CMS 3D CMS Logo

List of all members | Public Member Functions | Private Attributes
MuonTrackValidator Class Reference

#include <MuonTrackValidator.h>

Inheritance diagram for MuonTrackValidator:
one::DQMEDAnalyzer< T > MuonTrackValidatorBase one::dqmimplementation::DQMBaseClass< T... >

Public Member Functions

void analyze (const edm::Event &, const edm::EventSetup &) override
 Method called before the event loop. More...
 
void bookHistograms (DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
 Method called at the end of the event loop. More...
 
 MuonTrackValidator (const edm::ParameterSet &pset)
 Constructor. More...
 
 ~MuonTrackValidator () override
 Destructor. More...
 
- Public Member Functions inherited from one::DQMEDAnalyzer< T >
 DQMEDAnalyzer ()=default
 
 DQMEDAnalyzer (DQMEDAnalyzer< T... > const &)=delete
 
 DQMEDAnalyzer (DQMEDAnalyzer< T... > &&)=delete
 
 ~DQMEDAnalyzer () override=default
 

Private Attributes

edm::EDGetTokenT< SimHitTPAssociationProducer::SimHitTPAssociationList_simHitTpMapTag
 
edm::InputTag associatormap
 
bool BiDirectional_RecoToSim_association
 
CosmicTrackingParticleSelector cosmictpSelector
 
std::string dirName_
 
bool MABH
 
edm::EDGetTokenT< reco::RecoToSimCollectionrecoToSimCollection_Token
 
edm::EDGetTokenT< reco::SimToRecoCollectionsimToRecoCollection_Token
 
TrackingParticleSelector tpSelector
 
bool UseAssociators
 
bool useGEMs_
 
bool useME0_
 

Additional Inherited Members

- Protected Member Functions inherited from MuonTrackValidatorBase
void BinLogX (TH1 *h)
 
void doProfileX (TH2 *th2, MonitorElement *me)
 
void doProfileX (MonitorElement *th2m, MonitorElement *me)
 
template<typename T >
void fillPlotNoFlow (MonitorElement *h, T val)
 
double getEta (double eta)
 
double getPt (double pt)
 
 MuonTrackValidatorBase (const edm::ParameterSet &pset, edm::ConsumesCollector iC)
 Constructor. More...
 
 MuonTrackValidatorBase (const edm::ParameterSet &pset)
 
virtual ~MuonTrackValidatorBase ()(false)
 Destructor. More...
 
- Protected Attributes inherited from MuonTrackValidatorBase
std::vector< std::string > associators
 
edm::InputTag bsSrc
 
edm::EDGetTokenT< reco::BeamSpotbsSrc_Token
 
std::vector< MonitorElement * > chi2_vs_eta
 
std::vector< MonitorElement * > chi2_vs_nhits
 
std::vector< MonitorElement * > chi2_vs_phi
 
int cotThetaRes_nbin
 
double cotThetaRes_rangeMax
 
double cotThetaRes_rangeMin
 
bool do_MUOhitsPlots
 
bool do_TRKhitsPlots
 
std::vector< MonitorElement * > dxypull_vs_eta
 
int dxyRes_nbin
 
double dxyRes_rangeMax
 
double dxyRes_rangeMin
 
std::vector< MonitorElement * > dxyres_vs_eta
 
std::vector< MonitorElement * > dxyres_vs_pt
 
std::vector< MonitorElement * > dzpull_vs_eta
 
int dzRes_nbin
 
double dzRes_rangeMax
 
double dzRes_rangeMin
 
std::vector< MonitorElement * > dzres_vs_eta
 
std::vector< MonitorElement * > dzres_vs_pt
 
int etaRes_nbin
 
double etaRes_rangeMax
 
double etaRes_rangeMin
 
std::vector< MonitorElement * > etares_vs_eta
 
std::vector< MonitorElement * > h_assoc2dxy
 
std::vector< MonitorElement * > h_assoc2dz
 
std::vector< MonitorElement * > h_assoc2eta
 
std::vector< MonitorElement * > h_assoc2hit
 
std::vector< MonitorElement * > h_assoc2phi
 
std::vector< MonitorElement * > h_assoc2pT
 
std::vector< MonitorElement * > h_assoc2pu
 
std::vector< MonitorElement * > h_assocdxy
 
std::vector< MonitorElement * > h_assocdz
 
std::vector< MonitorElement * > h_assoceta
 
std::vector< MonitorElement * > h_assocFraction
 
std::vector< MonitorElement * > h_assochi2
 
std::vector< MonitorElement * > h_assochi2_prob
 
std::vector< MonitorElement * > h_assochit
 
std::vector< MonitorElement * > h_assocphi
 
std::vector< MonitorElement * > h_assocpT
 
std::vector< MonitorElement * > h_assocpu
 
std::vector< MonitorElement * > h_assocRpos
 
std::vector< MonitorElement * > h_assocSharedHit
 
std::vector< MonitorElement * > h_assocZpos
 
std::vector< MonitorElement * > h_charge
 
std::vector< MonitorElement * > h_dxypull
 
std::vector< MonitorElement * > h_dxypulleta
 
std::vector< MonitorElement * > h_dzpull
 
std::vector< MonitorElement * > h_dzpulleta
 
std::vector< MonitorElement * > h_etaRes
 
std::vector< MonitorElement * > h_fakes
 
std::vector< MonitorElement * > h_losthits
 
std::vector< MonitorElement * > h_misiddxy
 
std::vector< MonitorElement * > h_misiddz
 
std::vector< MonitorElement * > h_misideta
 
std::vector< MonitorElement * > h_misidhit
 
std::vector< MonitorElement * > h_misidphi
 
std::vector< MonitorElement * > h_misidpT
 
std::vector< MonitorElement * > h_misidpu
 
std::vector< MonitorElement * > h_nchi2
 
std::vector< MonitorElement * > h_nchi2_prob
 
std::vector< MonitorElement * > h_nhits
 
std::vector< MonitorElement * > h_nlosthits
 
std::vector< MonitorElement * > h_nmisslayers_inner
 
std::vector< MonitorElement * > h_nmisslayers_outer
 
std::vector< MonitorElement * > h_phipull
 
std::vector< MonitorElement * > h_phipulleta
 
std::vector< MonitorElement * > h_phipullphi
 
std::vector< MonitorElement * > h_ptpull
 
std::vector< MonitorElement * > h_ptpulleta
 
std::vector< MonitorElement * > h_ptpullphi
 
std::vector< MonitorElement * > h_PurityVsQuality
 
std::vector< MonitorElement * > h_qoverppull
 
std::vector< MonitorElement * > h_recodxy
 
std::vector< MonitorElement * > h_recodz
 
std::vector< MonitorElement * > h_recoeta
 
std::vector< MonitorElement * > h_recohit
 
std::vector< MonitorElement * > h_recophi
 
std::vector< MonitorElement * > h_recopT
 
std::vector< MonitorElement * > h_recopu
 
std::vector< MonitorElement * > h_simuldxy
 
std::vector< MonitorElement * > h_simuldz
 
std::vector< MonitorElement * > h_simuleta
 
std::vector< MonitorElement * > h_simulhit
 
std::vector< MonitorElement * > h_simulphi
 
std::vector< MonitorElement * > h_simulpT
 
std::vector< MonitorElement * > h_simulpu
 
std::vector< MonitorElement * > h_simulRpos
 
std::vector< MonitorElement * > h_simulZpos
 
std::vector< MonitorElement * > h_thetapull
 
std::vector< MonitorElement * > h_thetapulleta
 
std::vector< MonitorElement * > h_thetapullphi
 
std::vector< MonitorElement * > h_tracks
 
bool ignoremissingtkcollection_
 
std::vector< edm::InputTaglabel
 
edm::InputTag label_pileupinfo
 
edm::InputTag label_tp_effic
 
edm::InputTag label_tp_fake
 
double maxCSCHit
 
double maxDTHit
 
double maxDxy
 
double maxDz
 
double maxEta
 
double maxLayers
 
double maxNHit
 
double maxPhi
 
double maxPixels
 
double maxPt
 
double maxPU
 
double maxRPCHit
 
double maxRpos
 
double maxZpos
 
double minCSCHit
 
double minDTHit
 
double minDxy
 
double minDz
 
double minEta
 
double minLayers
 
double minNHit
 
double minPhi
 
double minPixels
 
double minPt
 
double minPU
 
double minRPCHit
 
double minRpos
 
double minZpos
 
edm::ParameterSet muonHistoParameters
 
std::vector< MonitorElement * > nCSChits_vs_eta
 
std::vector< MonitorElement * > nDThits_vs_eta
 
std::vector< MonitorElement * > nGEMhits_vs_eta
 
std::vector< MonitorElement * > nhits_vs_eta
 
std::vector< MonitorElement * > nhits_vs_phi
 
int nintCSCHit
 
int nintDTHit
 
int nintDxy
 
int nintDz
 
int nintEta
 
int nintLayers
 
int nintNHit
 
int nintPhi
 
int nintPixels
 
int nintPt
 
int nintPU
 
int nintRPCHit
 
int nintRpos
 
int nintZpos
 
std::vector< MonitorElement * > nlosthits_vs_eta
 
std::vector< MonitorElement * > nME0hits_vs_eta
 
std::vector< MonitorElement * > nPixel_LayersWithMeas_vs_eta
 
std::vector< MonitorElement * > nRecHits_vs_nSimHits
 
std::vector< MonitorElement * > nRPChits_vs_eta
 
std::vector< MonitorElement * > nTRK_LayersWithMeas_vs_eta
 
std::string out
 
std::string parametersDefiner
 
std::vector< MonitorElement * > phipull_vs_eta
 
std::vector< MonitorElement * > phipull_vs_phi
 
int phiRes_nbin
 
double phiRes_rangeMax
 
double phiRes_rangeMin
 
std::vector< MonitorElement * > phires_vs_eta
 
std::vector< MonitorElement * > phires_vs_phi
 
std::vector< MonitorElement * > phires_vs_pt
 
edm::EDGetTokenT< std::vector< PileupSummaryInfo > > pileupinfo_Token
 
std::vector< MonitorElement * > ptpull_vs_eta
 
std::vector< MonitorElement * > ptpull_vs_phi
 
int ptRes_nbin
 
double ptRes_rangeMax
 
double ptRes_rangeMin
 
std::vector< MonitorElement * > ptres_vs_eta
 
std::vector< MonitorElement * > ptres_vs_phi
 
std::vector< MonitorElement * > ptres_vs_pt
 
edm::ESHandle< MagneticFieldtheMF
 
std::vector< MonitorElement * > thetaCotres_vs_eta
 
std::vector< MonitorElement * > thetaCotres_vs_pt
 
std::vector< MonitorElement * > thetapull_vs_eta
 
std::vector< MonitorElement * > thetapull_vs_phi
 
edm::EDGetTokenT< TrackingParticleCollectiontp_effic_Token
 
edm::EDGetTokenT< TrackingParticleCollectiontp_fake_Token
 
std::vector< edm::EDGetTokenT< edm::View< reco::Track > > > track_Collection_Token
 
bool useFabsEta
 
bool useInvPt
 
bool useLogPt
 
bool usemuon
 
bool usetracker
 

Detailed Description

Class that produces histograms to validate Muon Track Reconstruction performances

Definition at line 17 of file MuonTrackValidator.h.

Constructor & Destructor Documentation

MuonTrackValidator::MuonTrackValidator ( const edm::ParameterSet pset)
inline

Constructor.

Definition at line 20 of file MuonTrackValidator.h.

References _simHitTpMapTag, ctfWithMaterialTrackMCMatch_cfi::associator, associatormap, MuonTrackValidatorBase::associators, BiDirectional_RecoToSim_association, MuonTrackValidatorBase::bsSrc, MuonTrackValidatorBase::bsSrc_Token, cosmictpSelector, dirName_, edm::ParameterSet::dump(), edm::ParameterSet::getParameter(), MuonTrackValidatorBase::label, MuonTrackValidatorBase::label_pileupinfo, MuonTrackValidatorBase::label_tp_effic, MuonTrackValidatorBase::label_tp_fake, MABH, MuonTrackValidatorBase::pileupinfo_Token, recoToSimCollection_Token, simToRecoCollection_Token, AlCaHLTBitMon_QueryRunRegistry::string, MuonTrackValidatorBase::tp_effic_Token, MuonTrackValidatorBase::tp_fake_Token, tpSelector, MuonTrackValidatorBase::track_Collection_Token, UseAssociators, useGEMs_, useME0_, MuonTrackValidatorBase::usemuon, and MuonTrackValidatorBase::usetracker.

21  dirName_ = pset.getParameter<std::string>("dirName");
22  associatormap = pset.getParameter< edm::InputTag >("associatormap");
23  UseAssociators = pset.getParameter< bool >("UseAssociators");
24  useGEMs_ = pset.getParameter< bool >("useGEMs");
25  useME0_ = pset.getParameter< bool >("useME0");
26  edm::ParameterSet tpset = pset.getParameter<edm::ParameterSet>("muonTPSelector");
27  tpSelector = TrackingParticleSelector(tpset.getParameter<double>("ptMin"),
28  tpset.getParameter<double>("ptMax"),
29  tpset.getParameter<double>("minRapidity"),
30  tpset.getParameter<double>("maxRapidity"),
31  tpset.getParameter<double>("tip"),
32  tpset.getParameter<double>("lip"),
33  tpset.getParameter<int>("minHit"),
34  tpset.getParameter<bool>("signalOnly"),
35  tpset.getParameter<bool>("intimeOnly"),
36  tpset.getParameter<bool>("chargedOnly"),
37  tpset.getParameter<bool>("stableOnly"),
38  tpset.getParameter<std::vector<int> >("pdgId"));
39 
40  cosmictpSelector = CosmicTrackingParticleSelector(tpset.getParameter<double>("ptMin"),
41  tpset.getParameter<double>("minRapidity"),
42  tpset.getParameter<double>("maxRapidity"),
43  tpset.getParameter<double>("tip"),
44  tpset.getParameter<double>("lip"),
45  tpset.getParameter<int>("minHit"),
46  tpset.getParameter<bool>("chargedOnly"),
47  tpset.getParameter<std::vector<int> >("pdgId"));
48 
49  BiDirectional_RecoToSim_association = pset.getParameter<bool>("BiDirectional_RecoToSim_association");
50 
51  // dump cfg parameters
52  edm::LogVerbatim("MuonTrackValidator") << "constructing MuonTrackValidator: " << pset.dump();
53 
54  // Declare consumes (also for the base class)
55  bsSrc_Token = consumes<reco::BeamSpot>(bsSrc);
56  tp_effic_Token = consumes<TrackingParticleCollection>(label_tp_effic);
57  tp_fake_Token = consumes<TrackingParticleCollection>(label_tp_fake);
58  pileupinfo_Token = consumes<std::vector<PileupSummaryInfo> >(label_pileupinfo);
59  for (unsigned int www=0;www<label.size();www++){
60  track_Collection_Token.push_back(consumes<edm::View<reco::Track> >(label[www]));
61  }
62  simToRecoCollection_Token = consumes<reco::SimToRecoCollection>(associatormap);
63  recoToSimCollection_Token = consumes<reco::RecoToSimCollection>(associatormap);
64 
65  _simHitTpMapTag = mayConsume<SimHitTPAssociationProducer::SimHitTPAssociationList>(pset.getParameter<edm::InputTag>("simHitTpMapTag"));
66 
67  MABH = false;
68  if (!UseAssociators) {
69  // flag MuonAssociatorByHits
70  if (associators[0] == "MuonAssociationByHits") MABH = true;
71  // reset string associators to the map label
72  associators.clear();
73  associators.push_back(associatormap.label());
74  edm::LogVerbatim("MuonTrackValidator") << "--> associators reset to: " <<associators[0];
75  } else {
76  for (auto const& associator :associators) {
77  consumes<reco::TrackToTrackingParticleAssociator>(edm::InputTag(associator));
78  }
79  }
80 
81  // inform on which SimHits will be counted
82  if (usetracker) edm::LogVerbatim("MuonTrackValidator")
83  <<"\n usetracker = TRUE : Tracker SimHits WILL be counted";
84  else edm::LogVerbatim("MuonTrackValidator")
85  <<"\n usetracker = FALSE : Tracker SimHits WILL NOT be counted";
86  if (usemuon) edm::LogVerbatim("MuonTrackValidator")
87  <<" usemuon = TRUE : Muon SimHits WILL be counted";
88  else edm::LogVerbatim("MuonTrackValidator")
89  <<" usemuon = FALSE : Muon SimHits WILL NOT be counted"<<std::endl;
90 
91  // loop over the reco::Track collections to validate: check for inconsistent input settings
92  for (unsigned int www=0;www<label.size();www++) {
93  std::string recoTracksLabel = label[www].label();
94  std::string recoTracksInstance = label[www].instance();
95 
96  // tracks with hits only on tracker
97  if (recoTracksLabel=="generalTracks" ||
98  (recoTracksLabel.find("cutsRecoTracks") != std::string::npos) ||
99  recoTracksLabel=="ctfWithMaterialTracksP5LHCNavigation" ||
100  recoTracksLabel=="hltL3TkTracksFromL2" ||
101  (recoTracksLabel=="hltL3Muons" && recoTracksInstance=="L2Seeded"))
102  {
103  if (usemuon) {
104  edm::LogWarning("MuonTrackValidator")
105  <<"\n*** WARNING : inconsistent input tracksTag = "<<label[www]
106  <<"\n with usemuon == true"<<"\n ---> please change to usemuon == false ";
107  }
108  if (!usetracker) {
109  edm::LogWarning("MuonTrackValidator")
110  <<"\n*** WARNING : inconsistent input tracksTag = "<<label[www]
111  <<"\n with usetracker == false"<<"\n ---> please change to usetracker == true ";
112  }
113  }
114 
115  // tracks with hits only on muon detectors
116  else if (recoTracksLabel=="standAloneMuons" ||
117  recoTracksLabel=="standAloneSETMuons" ||
118  recoTracksLabel=="cosmicMuons" ||
119  recoTracksLabel=="hltL2Muons")
120  {
121  if (usetracker) {
122  edm::LogWarning("MuonTrackValidator")
123  <<"\n*** WARNING : inconsistent input tracksTag = "<<label[www]
124  <<"\n with usetracker == true"<<"\n ---> please change to usetracker == false ";
125  }
126  if (!usemuon) {
127  edm::LogWarning("MuonTrackValidator")
128  <<"\n*** WARNING : inconsistent input tracksTag = "<<label[www]
129  <<"\n with usemuon == false"<<"\n ---> please change to usemuon == true ";
130  }
131  }
132 
133  } // for (unsigned int www=0;www<label.size();www++)
134  }
T getParameter(std::string const &) const
std::vector< edm::EDGetTokenT< edm::View< reco::Track > > > track_Collection_Token
std::string dump(unsigned int indent=0) const
edm::EDGetTokenT< SimHitTPAssociationProducer::SimHitTPAssociationList > _simHitTpMapTag
SingleObjectSelector< TrackingParticleCollection,::TrackingParticleSelector > TrackingParticleSelector
CosmicTrackingParticleSelector cosmictpSelector
edm::EDGetTokenT< TrackingParticleCollection > tp_fake_Token
std::vector< edm::InputTag > label
MuonTrackValidatorBase(const edm::ParameterSet &pset, edm::ConsumesCollector iC)
Constructor.
ObjectSelector< CosmicTrackingParticleSelector > CosmicTrackingParticleSelector
edm::EDGetTokenT< reco::RecoToSimCollection > recoToSimCollection_Token
edm::EDGetTokenT< reco::SimToRecoCollection > simToRecoCollection_Token
TrackingParticleSelector tpSelector
edm::InputTag associatormap
std::vector< std::string > associators
edm::EDGetTokenT< std::vector< PileupSummaryInfo > > pileupinfo_Token
edm::EDGetTokenT< TrackingParticleCollection > tp_effic_Token
edm::EDGetTokenT< reco::BeamSpot > bsSrc_Token
MuonTrackValidator::~MuonTrackValidator ( )
inlineoverride

Destructor.

Definition at line 137 of file MuonTrackValidator.h.

References analyze(), and bookHistograms().

137 { }

Member Function Documentation

void MuonTrackValidator::analyze ( const edm::Event event,
const edm::EventSetup setup 
)
override

Method called before the event loop.

Method called once per event

Definition at line 217 of file MuonTrackValidator.cc.

References funct::abs(), ctfWithMaterialTrackMCMatch_cfi::associator, muonValidationHeavyIons_cff::associatormap, MuonErrorMatrixAnalyzer_cfi::associatorName, simPFProducer_cfi::associators, edm::AssociationMap< Tag >::begin(), MuonTrackValidator_cfi::BiDirectional_RecoToSim_association, reco::TrackBase::charge(), reco::TrackBase::chi2(), CosmicParametersDefinerForTP::clone(), funct::cos(), histoParameters_cff::do_MUOhitsPlots, histoParameters_cff::do_TRKhitsPlots, TrackingParticleIP::dxy(), reco::TrackBase::dxy(), reco::TrackBase::dxyError(), TrackingParticleIP::dz(), reco::TrackBase::dz(), reco::TrackBase::dzError(), edm::AssociationMap< Tag >::end(), reco::TrackBase::eta(), edm::AssociationMap< Tag >::find(), dedxEstimators_cff::fraction, edm::EventSetup::get(), edm::Ref< C, T, F >::get(), edm::Event::getByToken(), reco::TrackBase::hitPattern(), mps_fire::i, createfilelist::int, edm::RefToBase< T >::key(), edm::Ref< C, T, F >::key(), diffTwoXMLs::label, LogTrace, M_PI, associators_cff::MABH, reco::HitPattern::MISSING_INNER_HITS, reco::HitPattern::MISSING_OUTER_HITS, ParametersDefinerForTP::momentum(), TrackingParticle::momentum(), reco::TrackBase::ndof(), reco::TrackBase::normalizedChi2(), reco::HitPattern::numberOfLostHits(), reco::TrackBase::numberOfLostHits(), reco::TrackBase::numberOfValidHits(), reco::HitPattern::numberOfValidMuonCSCHits(), reco::HitPattern::numberOfValidMuonDTHits(), reco::HitPattern::numberOfValidMuonGEMHits(), reco::HitPattern::numberOfValidMuonME0Hits(), reco::HitPattern::numberOfValidMuonRPCHits(), MuonTrackValidator_cfi::parametersDefiner, reco::TrackBase::phi(), muonME0PseudoDigis_cfi::phiError, reco::TrackBase::phiError(), reco::HitPattern::pixelLayersWithMeasurement(), reco::BeamSpot::position(), edm::AssociationMap< Tag >::post_insert(), edm::Handle< T >::product(), reco::TrackBase::pt(), reco::TrackBase::ptError(), reco::TrackBase::qoverp(), reco::TrackBase::qoverpError(), jets_cff::quality, funct::sin(), mathSSE::sqrt(), reco::TrackBase::theta(), reco::TrackBase::thetaError(), RecoMuonValidator_cfi::tpSelector, HiIsolationCommonParameters_cff::track, findElectronsInSiStrips_cfi::trackCollection, reco::HitPattern::trackerLayersWithMeasurement(), TrackAlgoCompareUtil_cfi::UseAssociators, histoParameters_cff::usemuon, histoParameters_cff::usetracker, ParametersDefinerForTP::vertex(), TrackingParticle::vertex(), and w.

Referenced by ~MuonTrackValidator().

217  {
218  using namespace reco;
219 
220  edm::LogInfo("MuonTrackValidator") << "\n====================================================" << "\n"
221  << "Analyzing new event" << "\n"
222  << "====================================================\n" << "\n";
223 
225  int PU_NumInteractions(-1);
226 
227  edm::ESHandle<ParametersDefinerForTP> Lhc_parametersDefinerTP;
228  std::unique_ptr<ParametersDefinerForTP> Cosmic_parametersDefinerTP;
229 
230  if(parametersDefiner=="LhcParametersDefinerForTP") {
231  setup.get<TrackAssociatorRecord>().get(parametersDefiner, Lhc_parametersDefinerTP);
232 
233  // PileupSummaryInfo is contained only in collision events
234  event.getByToken(pileupinfo_Token,puinfoH);
235  for (std::vector<PileupSummaryInfo>::const_iterator puInfoIt = puinfoH->begin(); puInfoIt != puinfoH->end(); ++puInfoIt) {
236  if (puInfoIt->getBunchCrossing()==0) {
237  PU_NumInteractions = puInfoIt->getPU_NumInteractions();
238  break;
239  }
240  }
241 
242  }
243  else if(parametersDefiner=="CosmicParametersDefinerForTP") {
244  edm::ESHandle<CosmicParametersDefinerForTP> _Cosmic_parametersDefinerTP;
245  setup.get<TrackAssociatorRecord>().get(parametersDefiner, _Cosmic_parametersDefinerTP);
246 
247  //Since we modify the object, we must clone it
248  Cosmic_parametersDefinerTP = _Cosmic_parametersDefinerTP->clone();
249 
251  //warning: make sure the TP collection used in the map is the same used here
252  event.getByToken(_simHitTpMapTag,simHitsTPAssoc);
253  Cosmic_parametersDefinerTP->initEvent(simHitsTPAssoc);
254  cosmictpSelector.initEvent(simHitsTPAssoc);
255  }
256  else {
257  edm::LogError("MuonTrackValidator")
258  << "Unexpected label: parametersDefiner = "<< parametersDefiner.c_str() << "\n";
259  }
260 
261  edm::Handle<TrackingParticleCollection> TPCollectionHeff ;
262  event.getByToken(tp_effic_Token,TPCollectionHeff);
263  TrackingParticleCollection const & tPCeff = *(TPCollectionHeff.product());
264 
265  edm::Handle<TrackingParticleCollection> TPCollectionHfake ;
266  event.getByToken(tp_fake_Token,TPCollectionHfake);
267 
268  edm::Handle<reco::BeamSpot> recoBeamSpotHandle;
269  event.getByToken(bsSrc_Token,recoBeamSpotHandle);
270  reco::BeamSpot bs = *recoBeamSpotHandle;
271 
272  std::vector<const reco::TrackToTrackingParticleAssociator*> associator;
273  if (UseAssociators) {
275  for (auto const& associatorName : associators) {
276  event.getByLabel(associatorName,theAssociator);
277  associator.push_back( theAssociator.product() );
278  }
279  }
280 
281  int w=0;
282  for (unsigned int ww=0;ww<associators.size();ww++) {
283  for (unsigned int www=0;www<label.size();www++) {
284  //
285  //get collections from the event
286  //
288  unsigned int trackCollectionSize = 0;
289 
290  reco::RecoToSimCollection recSimColl;
291  reco::SimToRecoCollection simRecColl;
292 
293  // account for missing track collections (HLT case)
294  if (!event.getByToken(track_Collection_Token[www], trackCollection) && ignoremissingtkcollection_) {
295  recSimColl.post_insert();
296  simRecColl.post_insert();
297  }
298 
299  //associate tracks to TrackingParticles
300  else {
301  trackCollectionSize = trackCollection->size();
302 
303  if(UseAssociators) {
304  edm::LogVerbatim("MuonTrackValidator") << "Analyzing "
305  << label[www].process()<<":"
306  << label[www].label()<<":"
307  << label[www].instance()<<" with "
308  << associators[ww].c_str() <<"\n";
309 
310  LogTrace("MuonTrackValidator") << "Calling associateRecoToSim method" << "\n";
311  recSimColl = associator[ww]->associateRecoToSim(trackCollection,
312  TPCollectionHfake);
313  LogTrace("MuonTrackValidator") << "Calling associateSimToReco method" << "\n";
314  simRecColl = associator[ww]->associateSimToReco(trackCollection,
315  TPCollectionHeff);
316  } else {
317  edm::LogVerbatim("MuonTrackValidator") << "Analyzing "
318  << label[www].process()<<":"
319  << label[www].label()<<":"
320  << label[www].instance()<<" with "
321  << associatormap.process()<<":"
322  << associatormap.label()<<":"
323  << associatormap.instance()<<"\n";
324 
325  Handle<reco::SimToRecoCollection > simtorecoCollectionH;
326  event.getByToken(simToRecoCollection_Token,simtorecoCollectionH);
327  simRecColl = *simtorecoCollectionH.product();
328 
329  Handle<reco::RecoToSimCollection > recotosimCollectionH;
330  event.getByToken(recoToSimCollection_Token,recotosimCollectionH);
331  recSimColl = *recotosimCollectionH.product();
332  }
333  }
334 
335  //
336  //fill simulation histograms
337  //
338  edm::LogVerbatim("MuonTrackValidator") << "\n# of TrackingParticles: " << tPCeff.size() << "\n";
339  int ats = 0;
340  int st = 0;
341  for (TrackingParticleCollection::size_type i=0; i<tPCeff.size(); i++){
342  bool TP_is_matched = false;
343  bool isChargeOK = true;
344  double quality = 0.;
345 
346  TrackingParticleRef tpr(TPCollectionHeff, i);
347  TrackingParticle* tp = const_cast<TrackingParticle*>(tpr.get());
348 
349  TrackingParticle::Vector momentumTP;
350  TrackingParticle::Point vertexTP;
351  double dxySim = 0;
352  double dzSim = 0;
353 
354  //If the TrackingParticle is collision-like, get the momentum and vertex at production state
355  //and the impact parameters w.r.t. PCA
356  if(parametersDefiner=="LhcParametersDefinerForTP")
357  {
358  LogTrace("MuonTrackValidator") <<"TrackingParticle "<< i;
359  if(! tpSelector(*tp)) continue;
360  momentumTP = tp->momentum();
361  vertexTP = tp->vertex();
362  TrackingParticle::Vector momentum = Lhc_parametersDefinerTP->momentum(event,setup,tpr);
363  TrackingParticle::Point vertex = Lhc_parametersDefinerTP->vertex(event,setup,tpr);
364  dxySim = TrackingParticleIP::dxy(vertex, momentum, bs.position());
365  dzSim = TrackingParticleIP::dz(vertex, momentum, bs.position());
366  }
367  //for cosmics get the momentum and vertex at PCA
368  else if(parametersDefiner=="CosmicParametersDefinerForTP")
369  {
370  edm::LogVerbatim("MuonTrackValidator") <<"TrackingParticle "<< i;
371  if(! cosmictpSelector(tpr,&bs,event,setup)) continue;
372  momentumTP = Cosmic_parametersDefinerTP->momentum(event,setup,tpr);
373  vertexTP = Cosmic_parametersDefinerTP->vertex(event,setup,tpr);
374  dxySim = TrackingParticleIP::dxy(vertexTP, momentumTP, bs.position());
375  dzSim = TrackingParticleIP::dz(vertexTP, momentumTP, bs.position());
376  }
377  edm::LogVerbatim("MuonTrackValidator") <<"--------------------Selected TrackingParticle #"<<tpr.key();
378  edm::LogVerbatim("MuonTrackValidator") <<"momentumTP: pt = "<<sqrt(momentumTP.perp2())<<", pz = "<<momentumTP.z()
379  <<", \t vertexTP: radius = "<<sqrt(vertexTP.perp2())<< ", z = "<<vertexTP.z() <<"\n";
380  st++;
381 
382  double TPeta = momentumTP.eta();
383  double xTPeta = getEta(TPeta); // may be |eta| in histos according to useFabsEta
384  double TPpt = sqrt(momentumTP.perp2());
385  double xTPpt = getPt(TPpt); // may be 1/pt in histos according to useInvPt
386  double TPphi = momentumTP.phi();
387  double TPrpos = sqrt(vertexTP.perp2());
388  double TPzpos = vertexTP.z();
389 
390  // Number of counted SimHits depend on the selection of tracker and muon detectors (via cfg parameters)
391  int nSimHits = 0;
392  if (usetracker && usemuon) {
393  nSimHits= tpr.get()->numberOfHits();
394  }
395  else if (!usetracker && usemuon) {
396  nSimHits= tpr.get()->numberOfHits() - tpr.get()->numberOfTrackerHits();
397  }
398  else if (usetracker && !usemuon) {
399  nSimHits=tpr.get()->numberOfTrackerHits();
400  }
401  edm::LogVerbatim("MuonTrackValidator") << "\t N simhits = "<< nSimHits<<"\n";
402 
403  int assoc_recoTrack_NValidHits = 0;
404  if(simRecColl.find(tpr) != simRecColl.end()) {
405  auto const & rt = simRecColl[tpr];
406  if (!rt.empty()) {
407  RefToBase<Track> assoc_recoTrack = rt.begin()->first;
408  edm::LogVerbatim("MuonTrackValidator")<<"-----------------------------associated Track #"<<assoc_recoTrack.key();
409  TP_is_matched = true;
410  ats++;
411  if (assoc_recoTrack->charge() != tpr->charge()) isChargeOK = false;
412  quality = rt.begin()->second;
413  assoc_recoTrack_NValidHits = assoc_recoTrack->numberOfValidHits();
414  edm::LogVerbatim("MuonTrackValidator") << "TrackingParticle #" <<tpr.key()
415  << " with pt=" << sqrt(momentumTP.perp2())
416  << " associated with quality:" << quality <<"\n";
417  }
418  } else {
419  edm::LogVerbatim("MuonTrackValidator")
420  << "TrackingParticle #" << tpr.key()
421  << " with pt,eta,phi: "
422  << sqrt(momentumTP.perp2()) << " , "<< momentumTP.eta() << " , "<< momentumTP.phi() << " , "
423  << " NOT associated to any reco::Track" << "\n";
424  }
425 
426  // histos for efficiency vs eta
427 
428  fillPlotNoFlow(h_simuleta[w], xTPeta);
429  if (TP_is_matched) {
430  fillPlotNoFlow(h_assoceta[w], xTPeta);
431  if (!isChargeOK) fillPlotNoFlow(h_misideta[w], xTPeta);
432  }
433 
434  // histos for efficiency vs phi
435  fillPlotNoFlow(h_simulphi[w], TPphi);
436  if (TP_is_matched) {
437  fillPlotNoFlow(h_assocphi[w], TPphi);
438  if (!isChargeOK) fillPlotNoFlow(h_misidphi[w], TPphi);
439  }
440 
441  // histos for efficiency vs pT
442  fillPlotNoFlow(h_simulpT[w], xTPpt);
443  if (TP_is_matched) {
444  fillPlotNoFlow(h_assocpT[w], xTPpt);
445  if (!isChargeOK) fillPlotNoFlow(h_misidpT[w], xTPpt);
446  }
447 
448  // histos for efficiency vs dxy
449  fillPlotNoFlow(h_simuldxy[w], dxySim);
450  if (TP_is_matched) {
451  fillPlotNoFlow(h_assocdxy[w], dxySim);
452  if (!isChargeOK) fillPlotNoFlow(h_misiddxy[w], dxySim);
453  }
454 
455  // histos for efficiency vs dz
456  fillPlotNoFlow(h_simuldz[w], dzSim);
457  if (TP_is_matched) {
458  fillPlotNoFlow(h_assocdz[w], dzSim);
459  if (!isChargeOK) fillPlotNoFlow(h_misiddz[w], dzSim);
460  }
461 
462  // histos for efficiency vs Radius
463  fillPlotNoFlow(h_simulRpos[w], TPrpos);
464  if (TP_is_matched) fillPlotNoFlow(h_assocRpos[w], TPrpos);
465 
466  // histos for efficiency vs z position
467  fillPlotNoFlow(h_simulZpos[w], TPzpos);
468  if (TP_is_matched) fillPlotNoFlow(h_assocZpos[w], TPzpos);
469 
470  // histos for efficiency vs Number of Hits
471  fillPlotNoFlow(h_simulhit[w], nSimHits );
472  if (TP_is_matched) {
473  fillPlotNoFlow(h_assochit[w], nSimHits );
474  nRecHits_vs_nSimHits[w]->Fill(nSimHits, assoc_recoTrack_NValidHits);
475 
476  // charge misid is more useful w.r.t. nRecHits (filled after)
477  //if (!isChargeOK) fillPlotNoFlow(h_misidhit[w], nSimHits);
478  }
479 
480  // histos for efficiency vs PileUp
481  fillPlotNoFlow(h_simulpu[w], PU_NumInteractions);
482  if (TP_is_matched) {
483  fillPlotNoFlow(h_assocpu[w], PU_NumInteractions);
484  if (!isChargeOK) fillPlotNoFlow(h_misidpu[w], PU_NumInteractions);
485  }
486 
487  } // End for (TrackingParticleCollection::size_type i=0; i<tPCeff.size(); i++){
488 
489  //
490  //fill reconstructed track histograms
491  //
492  edm::LogVerbatim("MuonTrackValidator") << "\n# of reco::Tracks with "
493  << label[www].process()<<":"
494  << label[www].label()<<":"
495  << label[www].instance()
496  << ": " << trackCollectionSize << "\n";
497 
498  int at = 0;
499  int rT = 0;
500  for(edm::View<Track>::size_type i=0; i<trackCollectionSize; ++i) {
501  bool Track_is_matched = false;
502  bool isChargeOK = true;
503  RefToBase<Track> track(trackCollection, i);
504  rT++;
505 
506  std::vector<std::pair<TrackingParticleRef, double> > tp;
508 
509  // new logic (bidirectional)
511  edm::LogVerbatim("MuonTrackValidator")<<"----------------------------------------Track #"<< track.key();
512 
513  if(recSimColl.find(track) != recSimColl.end()) {
514  tp = recSimColl[track];
515  if (!tp.empty()) {
516  tpr = tp.begin()->first;
517  // RtS and StR must associate the same pair !
518  if(simRecColl.find(tpr) != simRecColl.end()) {
519  auto const & assoc_track_checkback = simRecColl[tpr].begin()->first;
520 
521  if ( assoc_track_checkback.key() == track.key() ) {
522  edm::LogVerbatim("MuonTrackValidator")<<"------------------associated TrackingParticle #"<<tpr.key();
523  Track_is_matched = true;
524  at++;
525  if (track->charge() != tpr->charge()) isChargeOK = false;
526  double Purity = tp.begin()->second;
527  double Quality = simRecColl[tpr].begin()->second;
528  edm::LogVerbatim("MuonTrackValidator") << "reco::Track #" << track.key() << " with pt=" << track->pt()
529  << " associated with purity:" << Purity <<"\n";
530  if (MABH) h_PurityVsQuality[w]->Fill(Quality,Purity);
531  }
532  }
533  }
534  }
535 
536  if (!Track_is_matched)
537  edm::LogVerbatim("MuonTrackValidator")
538  << "reco::Track #" << track.key() << " with pt=" << track->pt() << " NOT associated to any TrackingParticle" << "\n";
539  }
540  // old logic, valid for cosmics 2-legs reco (bugged for collision scenario)
541  else {
542  if(recSimColl.find(track) != recSimColl.end()){
543  tp = recSimColl[track];
544  if (!tp.empty()) {
545  tpr = tp.begin()->first;
546  Track_is_matched = true;
547  at++;
548  if (track->charge() != tpr->charge()) isChargeOK = false;
549  edm::LogVerbatim("MuonTrackValidator") << "reco::Track #" << track.key() << " with pt=" << track->pt()
550  << " associated with quality:" << tp.begin()->second <<"\n";
551  }
552  } else {
553  edm::LogVerbatim("MuonTrackValidator") << "reco::Track #" << track.key() << " with pt=" << track->pt()
554  << " NOT associated to any TrackingParticle" << "\n";
555  }
556  }
557 
558  //
559  int nRecHits = track->numberOfValidHits();
560  edm::LogVerbatim("MuonTrackValidator") << "\t N valid rechits = "<< nRecHits <<"\n";
561 
562  double etaRec = track->eta();
563  double xetaRec = getEta(etaRec);
564 
565  double ptRec = track->pt();
566  double xptRec = getPt(ptRec);
567 
568  double qoverpRec = track->qoverp();
569  double phiRec = track->phi();
570  double thetaRec = track->theta();
571  double dxyRec = track->dxy(bs.position());
572  double dzRec = track->dz(bs.position());
573 
574  double qoverpError = track->qoverpError();
575  double ptError = track->ptError();
576  double thetaError = track->thetaError();
577  double phiError = track->phiError();
578  double dxyError = track->dxyError();
579  double dzError = track->dzError();
580 
581  // histos for fake rate vs eta
582  fillPlotNoFlow(h_recoeta[w], xetaRec);
583  if (Track_is_matched) {
584  fillPlotNoFlow(h_assoc2eta[w], xetaRec);
585  }
586 
587  // histos for fake rate vs phi
588  fillPlotNoFlow(h_recophi[w], phiRec);
589  if (Track_is_matched) {
590  fillPlotNoFlow(h_assoc2phi[w], phiRec);
591  }
592 
593  // histos for fake rate vs pT
594  fillPlotNoFlow(h_recopT[w], xptRec);
595  if (Track_is_matched) {
596  fillPlotNoFlow(h_assoc2pT[w], xptRec);
597  }
598 
599  // histos for fake rate vs dxy
600  fillPlotNoFlow(h_recodxy[w], dxyRec);
601  if (Track_is_matched) {
602  fillPlotNoFlow(h_assoc2dxy[w], dxyRec);
603  }
604 
605  // histos for fake rate vs dz
606  fillPlotNoFlow(h_recodz[w], dzRec);
607  if (Track_is_matched) {
608  fillPlotNoFlow(h_assoc2dz[w], dzRec);
609  }
610 
611  // histos for fake rate vs Number of RecHits in track
612  fillPlotNoFlow(h_recohit[w], nRecHits);
613  if (Track_is_matched) {
614  fillPlotNoFlow(h_assoc2hit[w], nRecHits);
615  // charge misid w.r.t. nRecHits
616  if (!isChargeOK) fillPlotNoFlow(h_misidhit[w], nRecHits);
617  }
618 
619  // histos for fake rate vs Number of PU interactions
620  fillPlotNoFlow(h_recopu[w], PU_NumInteractions);
621  if (Track_is_matched) {
622  fillPlotNoFlow(h_assoc2pu[w], PU_NumInteractions);
623  }
624 
625  // Fill other histos
626  TrackingParticle* tpp = const_cast<TrackingParticle*>(tpr.get());
627  // TrackingParticle parameters at point of closest approach to the beamline
628  TrackingParticle::Vector momentumTP;
629  TrackingParticle::Point vertexTP;
630 
631  if (parametersDefiner=="LhcParametersDefinerForTP") {
632  // following reco plots are made only from tracks associated to selected signal TPs
633  if (! (Track_is_matched && tpSelector(*tpp)) ) continue;
634  else {
635  momentumTP = Lhc_parametersDefinerTP->momentum(event,setup,tpr) ;
636  vertexTP = Lhc_parametersDefinerTP->vertex(event,setup,tpr);
637  }
638  }
639  else if (parametersDefiner=="CosmicParametersDefinerForTP") {
640  // following reco plots are made only from tracks associated to selected signal TPs
641  if (! (Track_is_matched && cosmictpSelector(tpr,&bs,event,setup)) ) continue;
642  else {
643  momentumTP = Cosmic_parametersDefinerTP->momentum(event,setup,tpr) ;
644  vertexTP = Cosmic_parametersDefinerTP->vertex(event,setup,tpr);
645  }
646  }
647 
648  if (associators[ww]=="trackAssociatorByChi2"){
649  //association chi2
650  double assocChi2 = -tp.begin()->second;//in association map is stored -chi2
651  h_assochi2[www]->Fill(assocChi2);
652  h_assochi2_prob[www]->Fill(TMath::Prob((assocChi2)*5,5));
653  }
654  else if (associators[ww]=="trackAssociatorByHits"){
655  double fraction = tp.begin()->second;
656  h_assocFraction[www]->Fill(fraction);
657  h_assocSharedHit[www]->Fill(fraction*nRecHits);
658  }
659 
660  h_charge[w]->Fill(track->charge());
661 
662  // Hits
663  h_nhits[w]->Fill(nRecHits);
664  nhits_vs_eta[w]->Fill(xetaRec, nRecHits);
665  nhits_vs_phi[w]->Fill(phiRec, nRecHits);
666 
667  if (do_MUOhitsPlots) {
668  nDThits_vs_eta[w]->Fill(xetaRec,track->hitPattern().numberOfValidMuonDTHits());
669  nCSChits_vs_eta[w]->Fill(xetaRec,track->hitPattern().numberOfValidMuonCSCHits());
670  nRPChits_vs_eta[w]->Fill(xetaRec,track->hitPattern().numberOfValidMuonRPCHits());
671  if(useGEMs_) nGEMhits_vs_eta[w]->Fill(xetaRec,track->hitPattern().numberOfValidMuonGEMHits());
672  if(useME0_) nME0hits_vs_eta[w]->Fill(xetaRec,track->hitPattern().numberOfValidMuonME0Hits());
673  }
674 
675  if (do_TRKhitsPlots) {
676  nTRK_LayersWithMeas_vs_eta[w]->Fill(xetaRec,track->hitPattern().trackerLayersWithMeasurement());
677  nPixel_LayersWithMeas_vs_eta[w]->Fill(xetaRec,track->hitPattern().pixelLayersWithMeasurement());
678  h_nlosthits[w]->Fill(track->numberOfLostHits());
679  h_nmisslayers_inner[w]->Fill(track->hitPattern().numberOfLostHits(reco::HitPattern::MISSING_INNER_HITS));
680  h_nmisslayers_outer[w]->Fill(track->hitPattern().numberOfLostHits(reco::HitPattern::MISSING_OUTER_HITS));
681  nlosthits_vs_eta[w]->Fill(xetaRec,track->numberOfLostHits());
682  }
683 
684  // normalized chi2
685  h_nchi2[w]->Fill(track->normalizedChi2());
686  h_nchi2_prob[w]->Fill(TMath::Prob(track->chi2(),(int)track->ndof()));
687  chi2_vs_nhits[w]->Fill(nRecHits, track->normalizedChi2());
688  chi2_vs_eta[w]->Fill(xetaRec, track->normalizedChi2());
689  chi2_vs_phi[w]->Fill(phiRec,track->normalizedChi2());
690 
691  double ptSim = sqrt(momentumTP.perp2());
692  double xptSim = getPt(ptSim);
693  double qoverpSim = tpr->charge() /
694  sqrt(momentumTP.x()*momentumTP.x()+momentumTP.y()*momentumTP.y()+momentumTP.z()*momentumTP.z());
695  double etaSim = momentumTP.eta();
696  double thetaSim = momentumTP.theta();
697  double phiSim = momentumTP.phi();
698  double dxySim = TrackingParticleIP::dxy(vertexTP, momentumTP, bs.position());
699  double dzSim = TrackingParticleIP::dz(vertexTP, momentumTP, bs.position());
700 
701  double etares = etaRec - etaSim;
702  double ptRelRes = (ptRec - ptSim) / ptSim; // relative residual -> resolution
703  double ptPull = (ptRec - ptSim) / ptError;
704  double qoverpPull = (qoverpRec-qoverpSim) / qoverpError;
705  double thetaPull = (thetaRec - thetaSim) / thetaError;
706  double phiDiff = phiRec - phiSim;
707  if (abs(phiDiff) > M_PI) {
708  if (phiDiff >0.) phiDiff = phiDiff - 2.*M_PI;
709  else phiDiff = phiDiff + 2.*M_PI;
710  }
711  double phiPull = phiDiff / phiError;
712  double dxyPull = (dxyRec-dxySim) / dxyError;
713  double dzPull = (dzRec-dzSim) / dzError;
714 
715  h_etaRes[w]->Fill(etares);
716  etares_vs_eta[w]->Fill(xetaRec, etares);
717 
718  ptres_vs_eta[w]->Fill(xetaRec,ptRelRes);
719  ptres_vs_pt[w]->Fill(xptSim,ptRelRes);
720  ptres_vs_phi[w]->Fill(phiRec,ptRelRes);
721  h_ptpull[w]->Fill(ptPull);
722  ptpull_vs_eta[w]->Fill(xetaRec,ptPull);
723  ptpull_vs_phi[w]->Fill(phiRec,ptPull);
724  h_qoverppull[w]->Fill(qoverpPull);
725 
726  thetaCotres_vs_eta[w]->Fill(xetaRec, cos(thetaRec)/sin(thetaRec) - cos(thetaSim)/sin(thetaSim));
727  thetaCotres_vs_pt[w]->Fill(xptSim, cos(thetaRec)/sin(thetaRec) - cos(thetaSim)/sin(thetaSim));
728  h_thetapull[w]->Fill(thetaPull);
729  thetapull_vs_eta[w]->Fill(xetaRec,thetaPull);
730  thetapull_vs_phi[w]->Fill(phiRec,thetaPull);
731 
732  phires_vs_eta[w]->Fill(xetaRec,phiDiff);
733  phires_vs_pt[w]->Fill(xptSim,phiDiff);
734  phires_vs_phi[w]->Fill(phiRec,phiDiff);
735  h_phipull[w]->Fill(phiPull);
736  phipull_vs_eta[w]->Fill(xetaRec,phiPull);
737  phipull_vs_phi[w]->Fill(phiRec,phiPull);
738 
739  dxyres_vs_eta[w]->Fill(xetaRec,dxyRec-dxySim);
740  dxyres_vs_pt[w]->Fill(xptSim,dxyRec-dxySim);
741  h_dxypull[w]->Fill(dxyPull);
742  dxypull_vs_eta[w]->Fill(xetaRec,dxyPull);
743 
744  dzres_vs_eta[w]->Fill(xetaRec,dzRec-dzSim);
745  dzres_vs_pt[w]->Fill(xptSim,dzRec-dzSim);
746  h_dzpull[w]->Fill(dzPull);
747  dzpull_vs_eta[w]->Fill(xetaRec,dzPull);
748 
749  double contrib_Qoverp = qoverpPull*qoverpPull/5;
750  double contrib_dxy = dxyPull*dxyPull/5;
751  double contrib_dz = dzPull*dzPull/5;
752  double contrib_theta = thetaPull*thetaPull/5;
753  double contrib_phi = phiPull*phiPull/5;
754  double assoChi2 = contrib_Qoverp+contrib_dxy+contrib_dz+contrib_theta+contrib_phi;
755 
756  edm::LogVerbatim("MuonTrackValidator") << "normalized Chi2 (track 5-dofs matching) = "<<assoChi2 <<"\n"
757  << "\t contrib_Qoverp = " << contrib_Qoverp << "\n"
758  << "\t contrib_theta = " << contrib_theta << "\n"
759  << "\t contrib_phi = " << contrib_phi << "\n"
760  << "\t contrib_dxy = " << contrib_dxy << "\n"
761  << "\t contrib_dz = " << contrib_dz << "\n";
762 
763  edm::LogVerbatim("MuonTrackValidator") << "ptRec = " << ptRec << "\n"
764  << "etaRec = " << etaRec << "\n"
765  << "qoverpRec = " << qoverpRec << "\n"
766  << "thetaRec = " << thetaRec << "\n"
767  << "phiRec = " << phiRec << "\n"
768  << "dxyRec = " << dxyRec << "\n"
769  << "dzRec = " << dzRec << "\n"
770  << "" << "\n"
771  << "qoverpError = " << qoverpError << "\n"
772  << "thetaError = " << thetaError << "\n"
773  << "phiError = " << phiError << "\n"
774  << "dxyError = " << dxyError << "\n"
775  << "dzError = " << dzError << "\n"
776  << "" << "\n"
777  << "ptSim = " << ptSim << "\n"
778  << "etaSim = " << etaSim << "\n"
779  << "qoverpSim = " << qoverpSim << "\n"
780  << "thetaSim = " << thetaSim << "\n"
781  << "phiSim = " << phiSim << "\n"
782  << "dxySim = " << dxySim << "\n"
783  << "dzSim = " << dzSim << "\n";
784  } // End of for(edm::View<Track>::size_type i=0; i<trackCollectionSize; ++i) {
785 
786  h_tracks[w]->Fill(at);
787  h_fakes[w]->Fill(rT-at);
788  edm::LogVerbatim("MuonTrackValidator") << "Total Simulated: " << st << "\n"
789  << "Total Associated (simToReco): " << ats << "\n"
790  << "Total Reconstructed: " << rT << "\n"
791  << "Total Associated (recoToSim): " << at << "\n"
792  << "Total Fakes: " << rT-at << "\n";
793  w++;
794  } // End of for (unsigned int www=0;www<label.size();www++){
795  } //END of for (unsigned int ww=0;ww<associators.size();ww++){
796 }
void fillPlotNoFlow(MonitorElement *h, T val)
std::vector< MonitorElement * > h_assoc2phi
std::vector< MonitorElement * > h_recoeta
std::vector< MonitorElement * > phipull_vs_phi
unsigned int size_type
Definition: View.h:90
std::vector< MonitorElement * > h_assoc2hit
std::vector< MonitorElement * > h_PurityVsQuality
std::vector< MonitorElement * > h_etaRes
std::vector< MonitorElement * > h_misiddxy
std::vector< MonitorElement * > h_assochi2_prob
std::vector< MonitorElement * > h_recopT
std::vector< MonitorElement * > h_nchi2_prob
std::vector< MonitorElement * > dxyres_vs_eta
std::vector< MonitorElement * > h_assoc2dxy
const double w
Definition: UKUtility.cc:23
std::vector< edm::EDGetTokenT< edm::View< reco::Track > > > track_Collection_Token
std::vector< MonitorElement * > thetaCotres_vs_eta
std::vector< TrackingParticle > TrackingParticleCollection
Vector momentum() const
spatial momentum vector
const_iterator end() const
last iterator over the map (read only)
std::vector< MonitorElement * > h_recohit
std::vector< MonitorElement * > dxyres_vs_pt
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:579
std::vector< MonitorElement * > h_fakes
std::vector< MonitorElement * > h_dxypull
std::vector< MonitorElement * > phires_vs_phi
std::vector< MonitorElement * > h_assoc2pu
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
const_iterator find(const key_type &k) const
find element with specified reference key
std::vector< MonitorElement * > h_nhits
std::vector< MonitorElement * > h_ptpull
std::vector< MonitorElement * > ptpull_vs_phi
key_type key() const
Accessor for product key.
Definition: Ref.h:265
std::vector< MonitorElement * > h_assoceta
std::vector< MonitorElement * > h_tracks
uint16_t size_type
std::vector< MonitorElement * > nDThits_vs_eta
std::vector< MonitorElement * > dzres_vs_pt
std::vector< MonitorElement * > ptres_vs_eta
edm::EDGetTokenT< SimHitTPAssociationProducer::SimHitTPAssociationList > _simHitTpMapTag
std::vector< MonitorElement * > h_simuldxy
std::vector< MonitorElement * > h_simuldz
math::XYZPointD Point
point in the space
std::vector< MonitorElement * > h_misiddz
std::vector< MonitorElement * > nhits_vs_eta
std::vector< MonitorElement * > nhits_vs_phi
std::vector< MonitorElement * > h_nchi2
std::vector< MonitorElement * > h_nmisslayers_inner
std::vector< MonitorElement * > h_qoverppull
CosmicTrackingParticleSelector cosmictpSelector
std::vector< MonitorElement * > thetapull_vs_eta
std::vector< MonitorElement * > chi2_vs_nhits
std::vector< MonitorElement * > h_misidphi
std::vector< MonitorElement * > h_simulphi
edm::EDGetTokenT< TrackingParticleCollection > tp_fake_Token
std::vector< edm::InputTag > label
std::vector< MonitorElement * > h_assocSharedHit
std::vector< MonitorElement * > thetapull_vs_phi
std::vector< MonitorElement * > h_misidpu
auto dz(const T_Vertex &vertex, const T_Momentum &momentum, const T_Point &point)
size_t key() const
Definition: RefToBase.h:250
void post_insert()
post insert action
T sqrt(T t)
Definition: SSEVec.h:18
std::vector< MonitorElement * > h_assoc2dz
std::vector< MonitorElement * > phires_vs_pt
std::vector< MonitorElement * > ptres_vs_phi
std::vector< MonitorElement * > h_assocZpos
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
std::vector< MonitorElement * > ptpull_vs_eta
std::vector< MonitorElement * > h_recophi
std::vector< MonitorElement * > nRecHits_vs_nSimHits
std::vector< MonitorElement * > dzres_vs_eta
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
virtual TrackingParticle::Vector momentum(const edm::Event &iEvent, const edm::EventSetup &iSetup, const Charge ch, const Point &vtx, const LorentzVector &lv) const
void initEvent(edm::Handle< SimHitTPAssociationProducer::SimHitTPAssociationList > simHitsTPAssocToSet) const
std::vector< MonitorElement * > nME0hits_vs_eta
unsigned short numberOfValidHits() const
number of valid hits found
Definition: TrackBase.h:820
std::vector< MonitorElement * > h_simulRpos
std::vector< MonitorElement * > nTRK_LayersWithMeas_vs_eta
std::vector< MonitorElement * > chi2_vs_eta
std::vector< MonitorElement * > h_simulhit
T const * get() const
Returns C++ pointer to the item.
Definition: Ref.h:245
std::vector< MonitorElement * > h_charge
#define LogTrace(id)
std::vector< MonitorElement * > h_assocphi
#define M_PI
edm::EDGetTokenT< reco::RecoToSimCollection > recoToSimCollection_Token
edm::EDGetTokenT< reco::SimToRecoCollection > simToRecoCollection_Token
std::vector< MonitorElement * > h_assocpT
std::vector< MonitorElement * > h_assocpu
T const * product() const
Definition: Handle.h:81
std::vector< MonitorElement * > ptres_vs_pt
std::vector< MonitorElement * > h_simulpT
std::vector< MonitorElement * > dzpull_vs_eta
std::vector< MonitorElement * > h_recodz
std::vector< MonitorElement * > phires_vs_eta
std::vector< MonitorElement * > h_misideta
std::vector< MonitorElement * > nlosthits_vs_eta
TrackingParticleSelector tpSelector
std::vector< MonitorElement * > dxypull_vs_eta
std::string const & label() const
Definition: InputTag.h:36
Point vertex() const
Parent vertex position.
std::string const & process() const
Definition: InputTag.h:40
std::vector< MonitorElement * > h_nlosthits
std::vector< MonitorElement * > etares_vs_eta
std::vector< MonitorElement * > h_misidhit
std::vector< MonitorElement * > h_nmisslayers_outer
std::unique_ptr< ParametersDefinerForTP > clone() const override
fixed size matrix
auto dxy(const T_Vertex &vertex, const T_Momentum &momentum, const T_Point &point)
edm::InputTag associatormap
std::vector< MonitorElement * > h_simulZpos
std::vector< MonitorElement * > h_recodxy
T get() const
Definition: EventSetup.h:62
std::vector< MonitorElement * > h_recopu
std::vector< MonitorElement * > h_phipull
std::vector< MonitorElement * > h_assocdz
std::vector< MonitorElement * > thetaCotres_vs_pt
Monte Carlo truth information used for tracking validation.
std::vector< MonitorElement * > h_dzpull
int charge() const
track electric charge
Definition: TrackBase.h:567
const Point & position() const
position
Definition: BeamSpot.h:62
std::vector< MonitorElement * > nPixel_LayersWithMeas_vs_eta
std::vector< MonitorElement * > h_assoc2pT
std::vector< MonitorElement * > h_assochi2
std::vector< MonitorElement * > h_misidpT
const_iterator begin() const
first iterator over the map (read only)
std::vector< MonitorElement * > h_assocFraction
math::XYZVectorD Vector
point in the space
std::vector< MonitorElement * > chi2_vs_phi
std::vector< std::string > associators
std::vector< MonitorElement * > h_assocRpos
edm::EDGetTokenT< std::vector< PileupSummaryInfo > > pileupinfo_Token
std::vector< MonitorElement * > h_assocdxy
edm::EDGetTokenT< TrackingParticleCollection > tp_effic_Token
std::vector< MonitorElement * > h_thetapull
std::string const & instance() const
Definition: InputTag.h:37
std::vector< MonitorElement * > nRPChits_vs_eta
std::vector< MonitorElement * > h_simulpu
std::vector< MonitorElement * > h_assochit
std::vector< MonitorElement * > nGEMhits_vs_eta
std::vector< MonitorElement * > nCSChits_vs_eta
virtual TrackingParticle::Point vertex(const edm::Event &iEvent, const edm::EventSetup &iSetup, const Charge ch, const Point &vtx, const LorentzVector &lv) const
std::vector< MonitorElement * > h_simuleta
std::vector< MonitorElement * > phipull_vs_eta
std::vector< MonitorElement * > h_assoc2eta
edm::EDGetTokenT< reco::BeamSpot > bsSrc_Token
void MuonTrackValidator::bookHistograms ( DQMStore::IBooker ibooker,
edm::Run const &  ,
edm::EventSetup const &  setup 
)
override

Method called at the end of the event loop.

Definition at line 25 of file MuonTrackValidator.cc.

References patPFMETCorrections_cff::algo, trackingPlots::assoc, simPFProducer_cfi::associators, DQMStore::IBooker::book1D(), DQMStore::IBooker::book2D(), DQMStore::IBooker::cd(), histoParameters_cff::cotThetaRes_nbin, histoParameters_cff::cotThetaRes_rangeMax, histoParameters_cff::cotThetaRes_rangeMin, TrackerOfflineValidation_Dqm_cff::dirName, histoParameters_cff::do_MUOhitsPlots, histoParameters_cff::do_TRKhitsPlots, histoParameters_cff::dxyRes_nbin, histoParameters_cff::dxyRes_rangeMax, histoParameters_cff::dxyRes_rangeMin, histoParameters_cff::dzRes_nbin, histoParameters_cff::dzRes_rangeMax, histoParameters_cff::dzRes_rangeMin, histoParameters_cff::etaRes_nbin, histoParameters_cff::etaRes_rangeMax, histoParameters_cff::etaRes_rangeMin, edm::InputTag::instance(), edm::InputTag::label(), diffTwoXMLs::label, associators_cff::MABH, histoParameters_cff::maxCSCHit, histoParameters_cff::maxDTHit, gather_cfg::maxDxy, cutBasedMuonId_MuonPOG_V0_cff::maxDz, maxEta, histoParameters_cff::maxLayers, histoParameters_cff::maxNHit, trackingParticleSelector_cfi::maxPhi, histoParameters_cff::maxPixels, MuonErrorMatrixAnalyzer_cfi::maxPt, pileupFilter_cff::maxPU, histoParameters_cff::maxRPCHit, histoParameters_cff::maxRpos, histoParameters_cff::maxZpos, histoParameters_cff::minCSCHit, histoParameters_cff::minDTHit, histoParameters_cff::minDxy, histoParameters_cff::minDz, heepElectronID_HEEPV50_cff::minEta, dt1dClusters_cfi::minLayers, histoParameters_cff::minNHit, trackingParticleSelector_cfi::minPhi, histoParameters_cff::minPixels, lostTracks_cfi::minPt, pileupFilter_cff::minPU, histoParameters_cff::minRPCHit, histoParameters_cff::minRpos, histoParameters_cff::minZpos, histoParameters_cff::nintCSCHit, histoParameters_cff::nintDTHit, histoParameters_cff::nintDxy, histoParameters_cff::nintDz, histoParameters_cff::nintEta, histoParameters_cff::nintLayers, histoParameters_cff::nintNHit, histoParameters_cff::nintPhi, histoParameters_cff::nintPixels, histoParameters_cff::nintPt, histoParameters_cff::nintPU, histoParameters_cff::nintRPCHit, histoParameters_cff::nintRpos, histoParameters_cff::nintZpos, histoParameters_cff::phiRes_nbin, histoParameters_cff::phiRes_rangeMax, histoParameters_cff::phiRes_rangeMin, edm::InputTag::process(), histoParameters_cff::ptRes_nbin, histoParameters_cff::ptRes_rangeMax, histoParameters_cff::ptRes_rangeMin, python.rootplot.root2matplotlib::replace(), DQMStore::IBooker::setCurrentFolder(), and TrackValidationHeavyIons_cff::useLogPt.

Referenced by ~MuonTrackValidator().

25  {
26 
27  for (unsigned int ww=0;ww<associators.size();ww++){
28  for (unsigned int www=0;www<label.size();www++){
29 
30  ibooker.cd();
31  InputTag algo = label[www];
32  string dirName=dirName_;
33  if (algo.process()!="")
34  dirName+=algo.process()+"_";
35  if(algo.label()!="")
36  dirName+=algo.label();
37  if(algo.instance()!="")
38  dirName+=("_"+algo.instance());
39  if (dirName.find("Tracks")<dirName.length()){
40  dirName.replace(dirName.find("Tracks"),6,"Trks");
41  }
42  if (dirName.find("UpdatedAtVtx")<dirName.length()){
43  dirName.replace(dirName.find("UpdatedAtVtx"),12,"UpdAtVtx");
44  }
45  string assoc= associators[ww];
46  if (assoc.find("tpToTkmuTrackAssociation")<assoc.length()){
47  dirName+="_TkAsso";
48  }
49  std::replace(dirName.begin(), dirName.end(), ':', '_');
50  ibooker.setCurrentFolder(dirName);
51 
52  h_tracks.push_back( ibooker.book1D("Ntracks","Number of reconstructed tracks",100,-0.5,99.5) );
53  h_fakes.push_back( ibooker.book1D("Nfakes","Number of fake reco tracks",20,-0.5,19.5) );
54  h_charge.push_back( ibooker.book1D("Ncharge","track charge",3,-1.5,1.5) );
55 
56  h_recoeta.push_back( ibooker.book1D("num_reco_eta","N of reco track vs eta",nintEta,minEta,maxEta) );
57  h_assoceta.push_back( ibooker.book1D("num_assoSimToReco_eta","N of associated tracks (simToReco) vs eta",nintEta,minEta,maxEta) );
58  h_assoc2eta.push_back( ibooker.book1D("num_assoRecoToSim_eta","N of associated (recoToSim) tracks vs eta",nintEta,minEta,maxEta) );
59  h_simuleta.push_back( ibooker.book1D("num_simul_eta","N of simulated tracks vs eta",nintEta,minEta,maxEta) );
60  h_misideta.push_back( ibooker.book1D("num_chargemisid_eta","N of associated (simToReco) tracks with charge misID vs eta",nintEta,minEta,maxEta) );
61 
62  h_recopT.push_back( ibooker.book1D("num_reco_pT","N of reco track vs pT",nintPt,minPt,maxPt) );
63  h_assocpT.push_back( ibooker.book1D("num_assoSimToReco_pT","N of associated tracks (simToReco) vs pT",nintPt,minPt,maxPt) );
64  h_assoc2pT.push_back( ibooker.book1D("num_assoRecoToSim_pT","N of associated (recoToSim) tracks vs pT",nintPt,minPt,maxPt) );
65  h_simulpT.push_back( ibooker.book1D("num_simul_pT","N of simulated tracks vs pT",nintPt,minPt,maxPt) );
66  h_misidpT.push_back( ibooker.book1D("num_chargemisid_pT","N of associated (simToReco) tracks with charge misID vs pT",nintPt,minPt,maxPt) );
67 
68  h_recophi.push_back( ibooker.book1D("num_reco_phi","N of reco track vs phi",nintPhi,minPhi,maxPhi) );
69  h_assocphi.push_back( ibooker.book1D("num_assoSimToReco_phi","N of associated tracks (simToReco) vs phi",nintPhi,minPhi,maxPhi) );
70  h_assoc2phi.push_back( ibooker.book1D("num_assoRecoToSim_phi","N of associated (recoToSim) tracks vs phi",nintPhi,minPhi,maxPhi) );
71  h_simulphi.push_back( ibooker.book1D("num_simul_phi","N of simulated tracks vs phi",nintPhi,minPhi,maxPhi) );
72  h_misidphi.push_back( ibooker.book1D("num_chargemisid_phi","N of associated (simToReco) tracks with charge misID vs phi",nintPhi,minPhi,maxPhi) );
73 
74  h_recohit.push_back( ibooker.book1D("num_reco_hit","N of reco tracks vs N SimHits",nintNHit,minNHit,maxNHit) );
75  h_assochit.push_back( ibooker.book1D("num_assoSimToReco_hit","N of associated tracks (simToReco) vs N SimHits",nintNHit,minNHit,maxNHit) );
76  h_assoc2hit.push_back( ibooker.book1D("num_assoRecoToSim_hit","N of associated (recoToSim) tracks vs N Rechits",nintNHit,minNHit,maxNHit) );
77  h_simulhit.push_back( ibooker.book1D("num_simul_hit","N of simulated tracks vs N SimHits",nintNHit,minNHit,maxNHit) );
78  h_misidhit.push_back( ibooker.book1D("num_chargemisid_hit","N of associated (recoToSim) tracks with charge misID vs N RecHits",nintNHit,minNHit,maxNHit) );
79 
80  h_recodxy.push_back( ibooker.book1D("num_reco_dxy","N of reco track vs dxy",nintDxy,minDxy,maxDxy) );
81  h_assocdxy.push_back( ibooker.book1D("num_assoSimToReco_dxy","N of associated tracks (simToReco) vs dxy",nintDxy,minDxy,maxDxy) );
82  h_assoc2dxy.push_back( ibooker.book1D("num_assoRecoToSim_dxy","N of associated (recoToSim) tracks vs dxy",nintDxy,minDxy,maxDxy) );
83  h_simuldxy.push_back( ibooker.book1D("num_simul_dxy","N of simulated tracks vs dxy",nintDxy,minDxy,maxDxy) );
84  h_misiddxy.push_back( ibooker.book1D("num_chargemisid_dxy","N of associated (simToReco) tracks with charge misID vs dxy",nintDxy,minDxy,maxDxy) );
85  h_recodz.push_back( ibooker.book1D("num_reco_dz","N of reco track vs dz",nintDz,minDz,maxDz) );
86  h_assocdz.push_back( ibooker.book1D("num_assoSimToReco_dz","N of associated tracks (simToReco) vs dz",nintDz,minDz,maxDz) );
87  h_assoc2dz.push_back( ibooker.book1D("num_assoRecoToSim_dz","N of associated (recoToSim) tracks vs dz",nintDz,minDz,maxDz) );
88  h_simuldz.push_back( ibooker.book1D("num_simul_dz","N of simulated tracks vs dz",nintDz,minDz,maxDz) );
89  h_misiddz.push_back( ibooker.book1D("num_chargemisid_dz","N of associated (simToReco) tracks with charge misID vs dz",nintDz,minDz,maxDz) );
90 
91  h_assocRpos.push_back( ibooker.book1D("num_assoSimToReco_Rpos","N of associated tracks (simToReco) vs Radius",nintRpos,minRpos,maxRpos) );
92  h_simulRpos.push_back( ibooker.book1D("num_simul_Rpos","N of simulated tracks vs Radius",nintRpos,minRpos,maxRpos) );
93 
94  h_assocZpos.push_back( ibooker.book1D("num_assoSimToReco_Zpos","N of associated tracks (simToReco) vs Z",nintZpos,minZpos,maxZpos) );
95  h_simulZpos.push_back( ibooker.book1D("num_simul_Zpos","N of simulated tracks vs Z",nintZpos,minZpos,maxZpos) );
96 
97  h_recopu.push_back( ibooker.book1D("num_reco_pu","N of reco track vs pu",nintPU,minPU,maxPU) );
98  h_assocpu.push_back( ibooker.book1D("num_assoSimToReco_pu","N of associated tracks (simToReco) vs pu",nintPU,minPU,maxPU) );
99  h_assoc2pu.push_back( ibooker.book1D("num_assoRecoToSim_pu","N of associated (recoToSim) tracks vs pu",nintPU,minPU,maxPU) );
100  h_simulpu.push_back( ibooker.book1D("num_simul_pu","N of simulated tracks vs pu",nintPU,minPU,maxPU) );
101  h_misidpu.push_back( ibooker.book1D("num_chargemisid_pu","N of associated (simToReco) charge misIDed tracks vs pu",nintPU,minPU,maxPU) );
102 
103  h_nchi2.push_back( ibooker.book1D("chi2","Track normalized #chi^{2}", 80, 0., 20.) );
104  h_nchi2_prob.push_back( ibooker.book1D("chi2prob", "Probability of track normalized #chi^{2}",100,0.,1.) );
105 
106  chi2_vs_nhits.push_back( ibooker.book2D("chi2_vs_nhits","#chi^{2} vs nhits",nintNHit,minNHit,maxNHit,20,0.,10.) );
107  chi2_vs_eta.push_back( ibooker.book2D("chi2_vs_eta","chi2_vs_eta",nintEta,minEta,maxEta, 40, 0., 20. ));
108  chi2_vs_phi.push_back( ibooker.book2D("chi2_vs_phi","#chi^{2} vs #phi",nintPhi,minPhi,maxPhi, 40, 0., 20. ) );
109 
110  h_nhits.push_back( ibooker.book1D("nhits", "Number of hits per track", nintNHit,minNHit,maxNHit ) );
111  nhits_vs_eta.push_back( ibooker.book2D("nhits_vs_eta","Number of Hits vs eta",nintEta,minEta,maxEta,nintNHit,minNHit,maxNHit) );
112  nhits_vs_phi.push_back( ibooker.book2D("nhits_vs_phi","#hits vs #phi",nintPhi,minPhi,maxPhi,nintNHit,minNHit,maxNHit) );
113 
114  if (do_MUOhitsPlots) {
115  nDThits_vs_eta.push_back( ibooker.book2D("nDThits_vs_eta","Number of DT hits vs eta",nintEta,minEta,maxEta,nintDTHit,minDTHit,maxDTHit) );
116  nCSChits_vs_eta.push_back( ibooker.book2D("nCSChits_vs_eta","Number of CSC hits vs eta",nintEta,minEta,maxEta,nintCSCHit,minCSCHit,maxCSCHit) );
117  nRPChits_vs_eta.push_back( ibooker.book2D("nRPChits_vs_eta","Number of RPC hits vs eta",nintEta,minEta,maxEta,nintRPCHit,minRPCHit,maxRPCHit) );
118  if (useGEMs_)
119  nGEMhits_vs_eta.push_back( ibooker.book2D("nGEMhits_vs_eta","Number of GEM hits vs eta",nintEta,minEta,maxEta,nintNHit,minNHit,maxNHit) );
120  if(useME0_)
121  nME0hits_vs_eta.push_back( ibooker.book2D("nME0hits_vs_eta","Number of ME0 hits vs eta",nintEta,minEta,maxEta,nintNHit,minNHit,maxNHit) );
122 
123  }
124 
125  if (do_TRKhitsPlots) {
126  nTRK_LayersWithMeas_vs_eta.push_back(ibooker.book2D("nTRK_LayersWithMeas_vs_eta","# TRK Layers with measurement vs eta",
128  nPixel_LayersWithMeas_vs_eta.push_back(ibooker.book2D("nPixel_LayersWithMeas_vs_eta","Number of Pixel Layers with measurement vs eta",
130  h_nmisslayers_inner.push_back( ibooker.book1D("nTRK_misslayers_inner", "Number of missing inner TRK layers", nintLayers,minLayers,maxLayers ) );
131  h_nmisslayers_outer.push_back( ibooker.book1D("nTRK_misslayers_outer", "Number of missing outer TRK layers", nintLayers,minLayers,maxLayers ) );
132  h_nlosthits.push_back( ibooker.book1D("nlosthits", "Number of lost hits per track", 6,-0.5,5.5 ) );
133  nlosthits_vs_eta.push_back( ibooker.book2D("nlosthits_vs_eta","Number of lost hits per track vs eta",nintEta,minEta,maxEta,6,-0.5,5.5) );
134  }
135 
136  ptres_vs_eta.push_back(ibooker.book2D("ptres_vs_eta","p_{T} Relative Residual vs #eta",
138  ptres_vs_phi.push_back( ibooker.book2D("ptres_vs_phi","p_{T} Relative Residual vs #phi",
140  ptres_vs_pt.push_back(ibooker.book2D("ptres_vs_pt","p_{T} Relative Residual vs p_{T}",
142  h_ptpull.push_back( ibooker.book1D("ptpull", "p_{T} Pull", 100, -10., 10.) );
143  ptpull_vs_eta.push_back(ibooker.book2D("ptpull_vs_eta","p_{T} Pull vs #eta",nintEta,minEta,maxEta,100,-10.,10.));
144  ptpull_vs_phi.push_back(ibooker.book2D("ptpull_vs_phi","p_{T} Pull vs #phi",nintPhi,minPhi,maxPhi,100,-10.,10.));
145  h_qoverppull.push_back( ibooker.book1D("qoverppull","q/p Pull", 100, -10., 10.) );
146 
147  h_etaRes.push_back( ibooker.book1D("etaRes", "#eta residual", etaRes_nbin, etaRes_rangeMin, etaRes_rangeMax) );
148  etares_vs_eta.push_back( ibooker.book2D("etares_vs_eta","#eta Residual vs #eta",
150 
151  thetaCotres_vs_eta.push_back(ibooker.book2D("thetaCotres_vs_eta","cot(#theta) Residual vs #eta",
153  thetaCotres_vs_pt.push_back(ibooker.book2D("thetaCotres_vs_pt","cot(#theta) Residual vs p_{T}",
155  h_thetapull.push_back( ibooker.book1D("thetapull","#theta Pull",100,-10.,10.) );
156  thetapull_vs_eta.push_back(ibooker.book2D("thetapull_vs_eta","#theta Pull vs #eta",nintEta,minEta,maxEta,100,-10,10));
157  thetapull_vs_phi.push_back(ibooker.book2D("thetapull_vs_phi","#theta Pull vs #phi",nintPhi,minPhi,maxPhi,100,-10,10));
158 
159  phires_vs_eta.push_back(ibooker.book2D("phires_vs_eta","#phi Residual vs #eta",
161  phires_vs_pt.push_back(ibooker.book2D("phires_vs_pt","#phi Residual vs p_{T}",
163  phires_vs_phi.push_back(ibooker.book2D("phires_vs_phi","#phi Residual vs #phi",
165  h_phipull.push_back( ibooker.book1D("phipull","#phi Pull",100,-10.,10.) );
166  phipull_vs_eta.push_back(ibooker.book2D("phipull_vs_eta","#phi Pull vs #eta",nintEta,minEta,maxEta,100,-10,10));
167  phipull_vs_phi.push_back(ibooker.book2D("phipull_vs_phi","#phi Pull vs #phi",nintPhi,minPhi,maxPhi,100,-10,10));
168 
169  dxyres_vs_eta.push_back(ibooker.book2D("dxyres_vs_eta","dxy Residual vs #eta",
171  dxyres_vs_pt.push_back( ibooker.book2D("dxyres_vs_pt","dxy Residual vs p_{T}",
173  h_dxypull.push_back( ibooker.book1D("dxypull","dxy Pull",100,-10.,10.) );
174  dxypull_vs_eta.push_back(ibooker.book2D("dxypull_vs_eta","dxy Pull vs #eta",nintEta,minEta,maxEta,100,-10,10));
175 
176  dzres_vs_eta.push_back(ibooker.book2D("dzres_vs_eta","dz Residual vs #eta",
178  dzres_vs_pt.push_back(ibooker.book2D("dzres_vs_pt","dz Residual vs p_{T}",
180  h_dzpull.push_back( ibooker.book1D("dzpull","dz Pull",100,-10.,10.) );
181  dzpull_vs_eta.push_back(ibooker.book2D("dzpull_vs_eta","dz Pull vs #eta",nintEta,minEta,maxEta,100,-10,10));
182 
183  nRecHits_vs_nSimHits.push_back( ibooker.book2D("nRecHits_vs_nSimHits","nRecHits vs nSimHits",nintNHit,minNHit,maxNHit, nintNHit,minNHit,maxNHit ));
184 
185  if (MABH) {
186  h_PurityVsQuality.push_back
187  (ibooker.book2D("PurityVsQuality","Purity vs Quality (MABH)",20,0.01,1.01,20,0.01,1.01) );
188  }
189 
190  if (associators[ww]=="trackAssociatorByChi2"){
191  h_assochi2.push_back( ibooker.book1D("assocChi2","track association #chi^{2}",1000,0.,100.) );
192  h_assochi2_prob.push_back(ibooker.book1D("assocChi2_prob","probability of association #chi^{2}",100,0.,1.));
193  } else if (associators[ww]=="trackAssociatorByHits"){
194  h_assocFraction.push_back( ibooker.book1D("assocFraction","fraction of shared hits",22,0.,1.1) );
195  h_assocSharedHit.push_back(ibooker.book1D("assocSharedHit","number of shared hits",41,-0.5,40.5));
196  }
197 
198  if (useLogPt) {
199  BinLogX(h_simulpT.back()->getTH1F());
200  BinLogX(h_assocpT.back()->getTH1F());
201  BinLogX(h_recopT.back()->getTH1F());
202  BinLogX(h_assoc2pT.back()->getTH1F());
203  BinLogX(h_misidpT.back()->getTH1F());
204 
205  BinLogX(phires_vs_pt.back()->getTH2F());
206  BinLogX(thetaCotres_vs_pt.back()->getTH2F());
207  BinLogX(dxyres_vs_pt.back()->getTH2F());
208  BinLogX(dzres_vs_pt.back()->getTH2F());
209  BinLogX(ptres_vs_pt.back()->getTH2F());
210  }
211 
212  } //for (unsigned int www=0;www<label.size();www++)
213  } //for (unsigned int ww=0;ww<associators.size();ww++)
214 
215 }
std::vector< MonitorElement * > h_assoc2phi
std::vector< MonitorElement * > h_recoeta
std::vector< MonitorElement * > phipull_vs_phi
std::vector< MonitorElement * > h_assoc2hit
std::vector< MonitorElement * > h_PurityVsQuality
std::vector< MonitorElement * > h_etaRes
std::vector< MonitorElement * > h_misiddxy
std::vector< MonitorElement * > h_assochi2_prob
std::vector< MonitorElement * > h_recopT
std::vector< MonitorElement * > h_nchi2_prob
std::vector< MonitorElement * > dxyres_vs_eta
std::vector< MonitorElement * > h_assoc2dxy
std::vector< MonitorElement * > thetaCotres_vs_eta
std::vector< MonitorElement * > h_recohit
std::vector< MonitorElement * > dxyres_vs_pt
std::vector< MonitorElement * > h_fakes
std::vector< MonitorElement * > h_dxypull
std::vector< MonitorElement * > phires_vs_phi
std::vector< MonitorElement * > h_assoc2pu
def replace(string, replacements)
std::vector< MonitorElement * > h_nhits
std::vector< MonitorElement * > h_ptpull
std::vector< MonitorElement * > ptpull_vs_phi
std::vector< MonitorElement * > h_assoceta
std::vector< MonitorElement * > h_tracks
std::vector< MonitorElement * > nDThits_vs_eta
std::vector< MonitorElement * > dzres_vs_pt
std::vector< MonitorElement * > ptres_vs_eta
std::vector< MonitorElement * > h_simuldxy
std::vector< MonitorElement * > h_simuldz
std::vector< MonitorElement * > h_misiddz
std::vector< MonitorElement * > nhits_vs_eta
std::vector< MonitorElement * > nhits_vs_phi
std::vector< MonitorElement * > h_nchi2
std::vector< MonitorElement * > h_nmisslayers_inner
std::vector< MonitorElement * > h_qoverppull
std::vector< MonitorElement * > thetapull_vs_eta
std::vector< MonitorElement * > chi2_vs_nhits
std::vector< MonitorElement * > h_misidphi
std::vector< MonitorElement * > h_simulphi
void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:268
std::vector< edm::InputTag > label
std::vector< MonitorElement * > h_assocSharedHit
std::vector< MonitorElement * > thetapull_vs_phi
std::vector< MonitorElement * > h_misidpu
std::vector< MonitorElement * > h_assoc2dz
std::vector< MonitorElement * > phires_vs_pt
std::vector< MonitorElement * > ptres_vs_phi
std::vector< MonitorElement * > h_assocZpos
std::vector< MonitorElement * > ptpull_vs_eta
std::vector< MonitorElement * > h_recophi
std::vector< MonitorElement * > nRecHits_vs_nSimHits
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:106
std::vector< MonitorElement * > dzres_vs_eta
std::vector< MonitorElement * > nME0hits_vs_eta
std::vector< MonitorElement * > h_simulRpos
std::vector< MonitorElement * > nTRK_LayersWithMeas_vs_eta
std::vector< MonitorElement * > chi2_vs_eta
std::vector< MonitorElement * > h_simulhit
std::vector< MonitorElement * > h_charge
std::vector< MonitorElement * > h_assocphi
std::vector< MonitorElement * > h_assocpT
std::vector< MonitorElement * > h_assocpu
MonitorElement * book2D(Args &&...args)
Definition: DQMStore.h:109
std::vector< MonitorElement * > ptres_vs_pt
std::vector< MonitorElement * > h_simulpT
std::vector< MonitorElement * > dzpull_vs_eta
std::vector< MonitorElement * > h_recodz
std::vector< MonitorElement * > phires_vs_eta
std::vector< MonitorElement * > h_misideta
std::vector< MonitorElement * > nlosthits_vs_eta
std::vector< MonitorElement * > dxypull_vs_eta
std::string const & label() const
Definition: InputTag.h:36
std::string const & process() const
Definition: InputTag.h:40
std::vector< MonitorElement * > h_nlosthits
std::vector< MonitorElement * > etares_vs_eta
std::vector< MonitorElement * > h_misidhit
std::vector< MonitorElement * > h_nmisslayers_outer
std::vector< MonitorElement * > h_simulZpos
std::vector< MonitorElement * > h_recodxy
std::vector< MonitorElement * > h_recopu
std::vector< MonitorElement * > h_phipull
std::vector< MonitorElement * > h_assocdz
std::vector< MonitorElement * > thetaCotres_vs_pt
std::vector< MonitorElement * > h_dzpull
std::vector< MonitorElement * > nPixel_LayersWithMeas_vs_eta
std::vector< MonitorElement * > h_assoc2pT
std::vector< MonitorElement * > h_assochi2
std::vector< MonitorElement * > h_misidpT
std::vector< MonitorElement * > h_assocFraction
std::vector< MonitorElement * > chi2_vs_phi
std::vector< std::string > associators
std::vector< MonitorElement * > h_assocRpos
std::vector< MonitorElement * > h_assocdxy
std::vector< MonitorElement * > h_thetapull
std::string const & instance() const
Definition: InputTag.h:37
std::vector< MonitorElement * > nRPChits_vs_eta
std::vector< MonitorElement * > h_simulpu
std::vector< MonitorElement * > h_assochit
std::vector< MonitorElement * > nGEMhits_vs_eta
std::vector< MonitorElement * > nCSChits_vs_eta
std::vector< MonitorElement * > h_simuleta
std::vector< MonitorElement * > phipull_vs_eta
std::vector< MonitorElement * > h_assoc2eta

Member Data Documentation

edm::EDGetTokenT<SimHitTPAssociationProducer::SimHitTPAssociationList> MuonTrackValidator::_simHitTpMapTag
private

Definition at line 152 of file MuonTrackValidator.h.

Referenced by MuonTrackValidator().

edm::InputTag MuonTrackValidator::associatormap
private

Definition at line 149 of file MuonTrackValidator.h.

Referenced by MuonTrackValidator().

bool MuonTrackValidator::BiDirectional_RecoToSim_association
private

Definition at line 164 of file MuonTrackValidator.h.

Referenced by MuonTrackValidator().

CosmicTrackingParticleSelector MuonTrackValidator::cosmictpSelector
private

Definition at line 161 of file MuonTrackValidator.h.

Referenced by MuonTrackValidator().

std::string MuonTrackValidator::dirName_
private

Definition at line 148 of file MuonTrackValidator.h.

Referenced by MuonTrackValidator().

bool MuonTrackValidator::MABH
private

Definition at line 166 of file MuonTrackValidator.h.

Referenced by MuonTrackValidator().

edm::EDGetTokenT<reco::RecoToSimCollection> MuonTrackValidator::recoToSimCollection_Token
private

Definition at line 151 of file MuonTrackValidator.h.

Referenced by MuonTrackValidator().

edm::EDGetTokenT<reco::SimToRecoCollection> MuonTrackValidator::simToRecoCollection_Token
private

Definition at line 150 of file MuonTrackValidator.h.

Referenced by MuonTrackValidator().

TrackingParticleSelector MuonTrackValidator::tpSelector
private

Definition at line 160 of file MuonTrackValidator.h.

Referenced by MuonTrackValidator().

bool MuonTrackValidator::UseAssociators
private

Definition at line 154 of file MuonTrackValidator.h.

Referenced by MuonTrackValidator().

bool MuonTrackValidator::useGEMs_
private

Definition at line 155 of file MuonTrackValidator.h.

Referenced by MuonTrackValidator().

bool MuonTrackValidator::useME0_
private

Definition at line 156 of file MuonTrackValidator.h.

Referenced by MuonTrackValidator().