ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/Jeng/PVStudy/plugins/PVEffAnalyzer.cc
(Generate patch)

Comparing UserCode/Jeng/PVStudy/plugins/PVEffAnalyzer.cc (file contents):
Revision 1.1 by yygao, Mon Apr 19 16:07:17 2010 UTC vs.
Revision 1.2 by yygao, Tue Apr 20 09:51:02 2010 UTC

# Line 1 | Line 1
1 +
2   // -*- C++ -*-
3   //
4   // Package:    PVEffAnalyzer
# Line 49 | Line 50 | Implementation:
50   #include <SimDataFormats/Vertex/interface/SimVertexContainer.h>
51   #include <SimDataFormats/Track/interface/SimTrack.h>
52   #include <SimDataFormats/Track/interface/SimTrackContainer.h>
53 +
54   // BeamSpot
55   #include "DataFormats/BeamSpot/interface/BeamSpot.h"
56 + // For the clusters
57 + #include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h"
58 + #include "TrackingTools/Records/interface/TransientTrackRecord.h"
59 + #include "TrackingTools/TransientTrack/interface/TransientTrack.h"
60 + #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
61  
62   //root
63   #include <TROOT.h>
# Line 61 | Line 68 | Implementation:
68   #include <TPad.h>
69  
70   using namespace std;
71 + using namespace edm;
72 + using namespace reco;
73 +
74   typedef math::XYZTLorentzVectorF LorentzVector;
75   typedef math::XYZPoint Point;
76  
77   PVEffAnalyzer::PVEffAnalyzer(const edm::ParameterSet& iConfig)
78 +  :theTrackClusterizer(iConfig.getParameter<edm::ParameterSet>("TkClusParameters"))
79   {
80    //=======================================================================
81    // Get configuration for TrackTupleMaker
# Line 82 | Line 93 | PVEffAnalyzer::PVEffAnalyzer(const edm::
93    nTrkMin_                   = iConfig.getUntrackedParameter<int>("nTrkMin");
94    nTrkMax_                   = iConfig.getUntrackedParameter<int>("nTrkMax");
95    zsigncut_                  = iConfig.getUntrackedParameter<double>("zsigncut");
96 +  analyze_                   = iConfig.getUntrackedParameter<bool>("analyze",false);
97    bsSrc = iConfig.getParameter< edm::InputTag >("beamSpot");
98 <  
99 <  
98 >  reqCluster_               = iConfig.getUntrackedParameter<bool>("reqCluster",false);
99 >    
100    // Specify the data mode vector
101    if(realData_) datamode.push_back(0);
102    else {
# Line 120 | Line 132 | PVEffAnalyzer::PVEffAnalyzer(const edm::
132  
133   PVEffAnalyzer::~PVEffAnalyzer()
134   {
123
135    // do anything here that needs to be done at desctruction time
136    // (e.g. close files, deallocate resources etc.)
137    theFile->cd();
# Line 449 | Line 460 | PVEffAnalyzer::analyze(const edm::Event&
460      }
461    } // End of Analyzing MC Efficiency
462    
463 +  // Get the Builder for TrackClusters
464 +  edm::ESHandle<TransientTrackBuilder> theB;
465 +  iSetup.get<TransientTrackRecord>().get("TransientTrackBuilder",theB);
466 +  
467 +  std::vector< std::vector<reco::TransientTrack> > clusters1 =  theTrackClusterizer.clusterize((*theB).build(splitTrackCollection1Handle));
468 +  std::vector< std::vector<reco::TransientTrack> > clusters2 =  theTrackClusterizer.clusterize((*theB).build(splitTrackCollection2Handle));
469 +  
470 +  bool withValidCluster_tag = false;
471 +  bool withValidCluster_probe = false;
472 +
473 +  for (vector< vector<reco::TransientTrack> >::const_iterator iclus = clusters1.begin(); iclus != clusters1.end(); iclus++) {
474 +    if((*iclus).size()>1)  withValidCluster_probe = true;
475 +  }
476 +  for (vector< vector<reco::TransientTrack> >::const_iterator iclus = clusters2.begin(); iclus != clusters2.end(); iclus++) {
477 +    if((*iclus).size()>1)  withValidCluster_tag = true;
478 +  }
479 +
480    // ======= Analyze efficiency with split method
481 <  if ( !isGoodSplitEvent( *vertexColl->begin()) ) return;
481 >  if( reqCluster_ ) {
482 >    if ( !isGoodSplitEvent( *vertexColl->begin()) || !withValidCluster_tag || !withValidCluster_probe ) return;
483 >  }
484 >  else {
485 >    if ( !isGoodSplitEvent( *vertexColl->begin())) return;
486 >  }
487    if ( isGoodTagVertex( *splitVertexColl2->begin(), *vertexColl->begin(), zsigncut_) ) {
488      if(verbose_) {
489        std::cout<<"splitTrackColl1->size() = " << int(splitTrackColl1->size()) << std::endl;
# Line 483 | Line 516 | PVEffAnalyzer::endJob() {
516      case 1: suffix = "_mct";
517        break;
518      }
519 <    MakeEff(h_summary->ReadHisto1D(TString("numer_ntrack"+suffix)), h_summary->ReadHisto1D(TString("denom_ntrack"+suffix)), h_summary->ReadHisto1D(TString("eff_ntrack"+suffix)), false, 1);
519 >    if (analyze_)
520 >      MakeEff(h_summary->ReadHisto1D(TString("numer_ntrack"+suffix)), h_summary->ReadHisto1D(TString("denom_ntrack"+suffix)), h_summary->ReadHisto1D(TString("eff_ntrack"+suffix)), false, 1);
521    }    
522   }
523  
# Line 653 | Line 687 | void PVEffAnalyzer::MakeEff(TH1D* numer,
687      eff->SetBinError(i, error);
688    }
689   }
656
657 /*
658 // Copied from Validation/RecoTrack
659 void PVEffAnalyzer::setUpVectors(bool isRealData, int & nTrkMin_, int & nTrkMax_ ) {
660  std::vector<int>   totTAGv_ntracks, totPROBEv_ntracks;
661  if(!isRealData)
662    std::vector<int>   totSIMv_ntracks,totASSv_ntracks;  
663  for (int k=nTrkMin_;k<nTrkMax_+1;k++) {
664    totTAGv_ntracks.push_back(0);
665    totPROBEv_ntracks.push_back(0);
666    if(!realData) {
667      totSIMv_ntracks.push_back(0);
668      totASSv_ntracks.push_back(0);
669    }
670  }
671  
672  totTAG_ntracks.push_back(totTAGv_ntracks);
673  totPROBE_ntracks.push_back(totPROBEv_ntracks);
674  if(!realData) {
675    totSIM_ntracks.push_back(totSIMv_ntracks);
676    totASS_ntracks.push_back(totASSv_ntracks);
677  }
678 }
679
680 */

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines