1 |
+ |
|
2 |
|
// -*- C++ -*- |
3 |
|
// |
4 |
|
// Package: PVEffAnalyzer |
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> |
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 |
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 { |
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(); |
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; |
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 |
|
|
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 |
– |
*/ |