CMS 3D CMS Logo

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

#include <MuonTrackValidator.h>

Inheritance diagram for MuonTrackValidator:
DQMEDAnalyzer MuonTrackValidatorBase edm::one::EDProducer< edm::EndRunProducer, edm::one::WatchRuns, edm::EndLuminosityBlockProducer, edm::one::WatchLuminosityBlocks, edm::Accumulator > edm::one::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

void analyze (const edm::Event &, const edm::EventSetup &) override
 Method called before the event loop. More...
 
void bookHistograms (DQMEDAnalyzer::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 DQMEDAnalyzer
void accumulate (edm::Event const &event, edm::EventSetup const &setup) final
 
virtual void analyze (edm::Event const &, edm::EventSetup const &)
 
void beginLuminosityBlock (edm::LuminosityBlock const &lumi, edm::EventSetup const &setup) final
 
void beginRun (edm::Run const &run, edm::EventSetup const &setup) final
 
virtual void dqmBeginLuminosityBlock (edm::LuminosityBlock const &, edm::EventSetup const &)
 
virtual void dqmBeginRun (edm::Run const &, edm::EventSetup const &)
 
 DQMEDAnalyzer ()
 
virtual void dqmEndLuminosityBlock (edm::LuminosityBlock const &, edm::EventSetup const &)
 
virtual void dqmEndRun (edm::Run const &, edm::EventSetup const &)
 
void endLuminosityBlock (edm::LuminosityBlock const &, edm::EventSetup const &) final
 
void endLuminosityBlockProduce (edm::LuminosityBlock &lumi, edm::EventSetup const &setup) final
 
void endRun (edm::Run const &, edm::EventSetup const &) final
 
void endRunProduce (edm::Run &run, edm::EventSetup const &setup) final
 
virtual bool getCanSaveByLumi ()
 
- Public Member Functions inherited from edm::one::EDProducer< edm::EndRunProducer, edm::one::WatchRuns, edm::EndLuminosityBlockProducer, edm::one::WatchLuminosityBlocks, edm::Accumulator >
 EDProducer ()=default
 
SerialTaskQueueglobalLuminosityBlocksQueue () final
 
SerialTaskQueueglobalRunsQueue () final
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
bool wantsGlobalLuminosityBlocks () const final
 
bool wantsGlobalRuns () const final
 
- Public Member Functions inherited from edm::one::EDProducerBase
 EDProducerBase ()
 
ModuleDescription const & moduleDescription () const
 
bool wantsStreamLuminosityBlocks () const
 
bool wantsStreamRuns () const
 
 ~EDProducerBase () override
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
std::vector< edm::ProductResolverIndex > const & putTokenIndexToProductResolverIndex () const
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription const &)> registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
 
 ~ProducerBase () noexcept(false) override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ESProxyIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

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

- Public Types inherited from DQMEDAnalyzer
typedef dqm::reco::DQMStore DQMStore
 
typedef dqm::reco::MonitorElement MonitorElement
 
- Public Types inherited from edm::one::EDProducerBase
typedef EDProducerBase ModuleType
 
- Public Types inherited from edm::ProducerBase
using ModuleToResolverIndicies = std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex >>
 
typedef ProductRegistryHelper::TypeLabelList TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Static Public Member Functions inherited from edm::one::EDProducerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::ProducerBase
ProducesCollector producesCollector ()
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
- 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 DQMEDAnalyzer
edm::EDPutTokenT< DQMTokenlumiToken_
 
edm::EDPutTokenT< DQMTokenrunToken_
 
- 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, edm::EDConsumerBase::consumes(), cosmictpSelector, dirName_, edm::ParameterSet::dump(), edm::ParameterSet::getParameter(), HLT_2018_cff::InputTag, 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.

20  : MuonTrackValidatorBase(pset) {
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++) {
61  }
62  simToRecoCollection_Token = consumes<reco::SimToRecoCollection>(associatormap);
63  recoToSimCollection_Token = consumes<reco::RecoToSimCollection>(associatormap);
64 
65  _simHitTpMapTag = mayConsume<SimHitTPAssociationProducer::SimHitTPAssociationList>(
66  pset.getParameter<edm::InputTag>("simHitTpMapTag"));
67 
68  MABH = false;
69  if (!UseAssociators) {
70  // flag MuonAssociatorByHits
71  if (associators[0] == "MuonAssociationByHits")
72  MABH = true;
73  // reset string associators to the map label
74  associators.clear();
75  associators.push_back(associatormap.label());
76  edm::LogVerbatim("MuonTrackValidator") << "--> associators reset to: " << associators[0];
77  } else {
78  for (auto const& associator : associators) {
79  consumes<reco::TrackToTrackingParticleAssociator>(edm::InputTag(associator));
80  }
81  }
82 
83  // inform on which SimHits will be counted
84  if (usetracker)
85  edm::LogVerbatim("MuonTrackValidator") << "\n usetracker = TRUE : Tracker SimHits WILL be counted";
86  else
87  edm::LogVerbatim("MuonTrackValidator") << "\n usetracker = FALSE : Tracker SimHits WILL NOT be counted";
88  if (usemuon)
89  edm::LogVerbatim("MuonTrackValidator") << " usemuon = TRUE : Muon SimHits WILL be counted";
90  else
91  edm::LogVerbatim("MuonTrackValidator") << " usemuon = FALSE : Muon SimHits WILL NOT be counted" << std::endl;
92 
93  // loop over the reco::Track collections to validate: check for inconsistent input settings
94  for (unsigned int www = 0; www < label.size(); www++) {
95  std::string recoTracksLabel = label[www].label();
96  std::string recoTracksInstance = label[www].instance();
97 
98  // tracks with hits only on tracker
99  if (recoTracksLabel == "generalTracks" || (recoTracksLabel.find("cutsRecoTracks") != std::string::npos) ||
100  recoTracksLabel == "ctfWithMaterialTracksP5LHCNavigation" || recoTracksLabel == "hltL3TkTracksFromL2" ||
101  (recoTracksLabel == "hltL3Muons" && recoTracksInstance == "L2Seeded")) {
102  if (usemuon) {
103  edm::LogWarning("MuonTrackValidator")
104  << "\n*** WARNING : inconsistent input tracksTag = " << label[www] << "\n with usemuon == true"
105  << "\n ---> please change to usemuon == false ";
106  }
107  if (!usetracker) {
108  edm::LogWarning("MuonTrackValidator")
109  << "\n*** WARNING : inconsistent input tracksTag = " << label[www] << "\n with usetracker == false"
110  << "\n ---> please change to usetracker == true ";
111  }
112  }
113 
114  // tracks with hits only on muon detectors
115  else if (recoTracksLabel == "standAloneMuons" || recoTracksLabel == "standAloneSETMuons" ||
116  recoTracksLabel == "cosmicMuons" || recoTracksLabel == "hltL2Muons") {
117  if (usetracker) {
118  edm::LogWarning("MuonTrackValidator")
119  << "\n*** WARNING : inconsistent input tracksTag = " << label[www] << "\n with usetracker == true"
120  << "\n ---> please change to usetracker == false ";
121  }
122  if (!usemuon) {
123  edm::LogWarning("MuonTrackValidator")
124  << "\n*** WARNING : inconsistent input tracksTag = " << label[www] << "\n with usemuon == false"
125  << "\n ---> please change to usemuon == true ";
126  }
127  }
128 
129  } // for (unsigned int www=0;www<label.size();www++)
130  }
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
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
edm::EDGetTokenT< SimHitTPAssociationProducer::SimHitTPAssociationList > _simHitTpMapTag
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
SingleObjectSelector< TrackingParticleCollection,::TrackingParticleSelector > TrackingParticleSelector
edm::EDGetTokenT< TrackingParticleCollection > tp_effic_Token
edm::EDGetTokenT< reco::BeamSpot > bsSrc_Token
MuonTrackValidator::~MuonTrackValidator ( )
inlineoverride

Destructor.

Definition at line 133 of file MuonTrackValidator.h.

References analyze(), and bookHistograms().

133 {}

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 338 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(), HLT_2018_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(), 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(), qcdUeDQM_cfi::quality, funct::sin(), mathSSE::sqrt(), reco::TrackBase::theta(), reco::TrackBase::thetaError(), RecoMuonValidator_cfi::tpSelector, HLT_2018_cff::track, duplicaterechits_cfi::trackCollection, reco::HitPattern::trackerLayersWithMeasurement(), TrackAlgoCompareUtil_cfi::UseAssociators, histoParameters_cff::usemuon, histoParameters_cff::usetracker, bphysicsOniaDQM_cfi::vertex, ParametersDefinerForTP::vertex(), TrackingParticle::vertex(), and w.

Referenced by ~MuonTrackValidator().

338  {
339  using namespace reco;
340 
341  edm::LogInfo("MuonTrackValidator") << "\n===================================================="
342  << "\n"
343  << "Analyzing new event"
344  << "\n"
345  << "====================================================\n"
346  << "\n";
347 
349  int PU_NumInteractions(-1);
350 
351  edm::ESHandle<ParametersDefinerForTP> Lhc_parametersDefinerTP;
352  std::unique_ptr<ParametersDefinerForTP> Cosmic_parametersDefinerTP;
353 
354  if (parametersDefiner == "LhcParametersDefinerForTP") {
355  setup.get<TrackAssociatorRecord>().get(parametersDefiner, Lhc_parametersDefinerTP);
356 
357  // PileupSummaryInfo is contained only in collision events
358  event.getByToken(pileupinfo_Token, puinfoH);
359  for (std::vector<PileupSummaryInfo>::const_iterator puInfoIt = puinfoH->begin(); puInfoIt != puinfoH->end();
360  ++puInfoIt) {
361  if (puInfoIt->getBunchCrossing() == 0) {
362  PU_NumInteractions = puInfoIt->getPU_NumInteractions();
363  break;
364  }
365  }
366 
367  } else if (parametersDefiner == "CosmicParametersDefinerForTP") {
368  edm::ESHandle<CosmicParametersDefinerForTP> _Cosmic_parametersDefinerTP;
369  setup.get<TrackAssociatorRecord>().get(parametersDefiner, _Cosmic_parametersDefinerTP);
370 
371  //Since we modify the object, we must clone it
372  Cosmic_parametersDefinerTP = _Cosmic_parametersDefinerTP->clone();
373 
375  //warning: make sure the TP collection used in the map is the same used here
376  event.getByToken(_simHitTpMapTag, simHitsTPAssoc);
377  Cosmic_parametersDefinerTP->initEvent(simHitsTPAssoc);
378  cosmictpSelector.initEvent(simHitsTPAssoc);
379  } else {
380  edm::LogError("MuonTrackValidator") << "Unexpected label: parametersDefiner = " << parametersDefiner.c_str()
381  << "\n";
382  }
383 
385  event.getByToken(tp_effic_Token, TPCollectionHeff);
386  TrackingParticleCollection const& tPCeff = *(TPCollectionHeff.product());
387 
388  edm::Handle<TrackingParticleCollection> TPCollectionHfake;
389  event.getByToken(tp_fake_Token, TPCollectionHfake);
390 
391  edm::Handle<reco::BeamSpot> recoBeamSpotHandle;
392  event.getByToken(bsSrc_Token, recoBeamSpotHandle);
393  reco::BeamSpot bs = *recoBeamSpotHandle;
394 
395  std::vector<const reco::TrackToTrackingParticleAssociator*> associator;
396  if (UseAssociators) {
398  for (auto const& associatorName : associators) {
399  event.getByLabel(associatorName, theAssociator);
400  associator.push_back(theAssociator.product());
401  }
402  }
403 
404  int w = 0;
405  for (unsigned int ww = 0; ww < associators.size(); ww++) {
406  for (unsigned int www = 0; www < label.size(); www++) {
407  //
408  //get collections from the event
409  //
411  unsigned int trackCollectionSize = 0;
412 
413  reco::RecoToSimCollection recSimColl;
414  reco::SimToRecoCollection simRecColl;
415 
416  // account for missing track collections (HLT case)
417  if (!event.getByToken(track_Collection_Token[www], trackCollection) && ignoremissingtkcollection_) {
418  recSimColl.post_insert();
419  simRecColl.post_insert();
420  }
421 
422  //associate tracks to TrackingParticles
423  else {
424  trackCollectionSize = trackCollection->size();
425 
426  if (UseAssociators) {
427  edm::LogVerbatim("MuonTrackValidator")
428  << "Analyzing " << label[www].process() << ":" << label[www].label() << ":" << label[www].instance()
429  << " with " << associators[ww].c_str() << "\n";
430 
431  LogTrace("MuonTrackValidator") << "Calling associateRecoToSim method"
432  << "\n";
433  recSimColl = associator[ww]->associateRecoToSim(trackCollection, TPCollectionHfake);
434  LogTrace("MuonTrackValidator") << "Calling associateSimToReco method"
435  << "\n";
436  simRecColl = associator[ww]->associateSimToReco(trackCollection, TPCollectionHeff);
437  } else {
438  edm::LogVerbatim("MuonTrackValidator")
439  << "Analyzing " << label[www].process() << ":" << label[www].label() << ":" << label[www].instance()
440  << " with " << associatormap.process() << ":" << associatormap.label() << ":" << associatormap.instance()
441  << "\n";
442 
443  Handle<reco::SimToRecoCollection> simtorecoCollectionH;
444  event.getByToken(simToRecoCollection_Token, simtorecoCollectionH);
445  simRecColl = *simtorecoCollectionH.product();
446 
447  Handle<reco::RecoToSimCollection> recotosimCollectionH;
448  event.getByToken(recoToSimCollection_Token, recotosimCollectionH);
449  recSimColl = *recotosimCollectionH.product();
450  }
451  }
452 
453  //
454  //fill simulation histograms
455  //
456  edm::LogVerbatim("MuonTrackValidator") << "\n# of TrackingParticles: " << tPCeff.size() << "\n";
457  int ats = 0;
458  int st = 0;
459  for (TrackingParticleCollection::size_type i = 0; i < tPCeff.size(); i++) {
460  bool TP_is_matched = false;
461  bool isChargeOK = true;
462  double quality = 0.;
463 
464  TrackingParticleRef tpr(TPCollectionHeff, i);
465  TrackingParticle* tp = const_cast<TrackingParticle*>(tpr.get());
466 
467  TrackingParticle::Vector momentumTP;
468  TrackingParticle::Point vertexTP;
469  double dxySim = 0;
470  double dzSim = 0;
471 
472  //If the TrackingParticle is collision-like, get the momentum and vertex at production state
473  //and the impact parameters w.r.t. PCA
474  if (parametersDefiner == "LhcParametersDefinerForTP") {
475  LogTrace("MuonTrackValidator") << "TrackingParticle " << i;
476  if (!tpSelector(*tp))
477  continue;
478  momentumTP = tp->momentum();
479  vertexTP = tp->vertex();
480  TrackingParticle::Vector momentum = Lhc_parametersDefinerTP->momentum(event, setup, tpr);
481  TrackingParticle::Point vertex = Lhc_parametersDefinerTP->vertex(event, setup, tpr);
482  dxySim = TrackingParticleIP::dxy(vertex, momentum, bs.position());
483  dzSim = TrackingParticleIP::dz(vertex, momentum, bs.position());
484  }
485  //for cosmics get the momentum and vertex at PCA
486  else if (parametersDefiner == "CosmicParametersDefinerForTP") {
487  edm::LogVerbatim("MuonTrackValidator") << "TrackingParticle " << i;
488  if (!cosmictpSelector(tpr, &bs, event, setup))
489  continue;
490  momentumTP = Cosmic_parametersDefinerTP->momentum(event, setup, tpr);
491  vertexTP = Cosmic_parametersDefinerTP->vertex(event, setup, tpr);
492  dxySim = TrackingParticleIP::dxy(vertexTP, momentumTP, bs.position());
493  dzSim = TrackingParticleIP::dz(vertexTP, momentumTP, bs.position());
494  }
495  edm::LogVerbatim("MuonTrackValidator") << "--------------------Selected TrackingParticle #" << tpr.key();
496  edm::LogVerbatim("MuonTrackValidator")
497  << "momentumTP: pt = " << sqrt(momentumTP.perp2()) << ", pz = " << momentumTP.z()
498  << ", \t vertexTP: radius = " << sqrt(vertexTP.perp2()) << ", z = " << vertexTP.z() << "\n";
499  st++;
500 
501  double TPeta = momentumTP.eta();
502  double xTPeta = getEta(TPeta); // may be |eta| in histos according to useFabsEta
503  double TPpt = sqrt(momentumTP.perp2());
504  double xTPpt = getPt(TPpt); // may be 1/pt in histos according to useInvPt
505  double TPphi = momentumTP.phi();
506  double TPrpos = sqrt(vertexTP.perp2());
507  double TPzpos = vertexTP.z();
508 
509  // Number of counted SimHits depend on the selection of tracker and muon detectors (via cfg parameters)
510  int nSimHits = 0;
511  if (usetracker && usemuon) {
512  nSimHits = tpr.get()->numberOfHits();
513  } else if (!usetracker && usemuon) {
514  nSimHits = tpr.get()->numberOfHits() - tpr.get()->numberOfTrackerHits();
515  } else if (usetracker && !usemuon) {
516  nSimHits = tpr.get()->numberOfTrackerHits();
517  }
518  edm::LogVerbatim("MuonTrackValidator") << "\t N simhits = " << nSimHits << "\n";
519 
520  int assoc_recoTrack_NValidHits = 0;
521  if (simRecColl.find(tpr) != simRecColl.end()) {
522  auto const& rt = simRecColl[tpr];
523  if (!rt.empty()) {
524  RefToBase<Track> assoc_recoTrack = rt.begin()->first;
525  edm::LogVerbatim("MuonTrackValidator")
526  << "-----------------------------associated Track #" << assoc_recoTrack.key();
527  TP_is_matched = true;
528  ats++;
529  if (assoc_recoTrack->charge() != tpr->charge())
530  isChargeOK = false;
531  quality = rt.begin()->second;
532  assoc_recoTrack_NValidHits = assoc_recoTrack->numberOfValidHits();
533  edm::LogVerbatim("MuonTrackValidator")
534  << "TrackingParticle #" << tpr.key() << " with pt=" << sqrt(momentumTP.perp2())
535  << " associated with quality:" << quality << "\n";
536  }
537  } else {
538  edm::LogVerbatim("MuonTrackValidator")
539  << "TrackingParticle #" << tpr.key() << " with pt,eta,phi: " << sqrt(momentumTP.perp2()) << " , "
540  << momentumTP.eta() << " , " << momentumTP.phi() << " , "
541  << " NOT associated to any reco::Track"
542  << "\n";
543  }
544 
545  // histos for efficiency vs eta
546 
547  fillPlotNoFlow(h_simuleta[w], xTPeta);
548  if (TP_is_matched) {
549  fillPlotNoFlow(h_assoceta[w], xTPeta);
550  if (!isChargeOK)
551  fillPlotNoFlow(h_misideta[w], xTPeta);
552  }
553 
554  // histos for efficiency vs phi
555  fillPlotNoFlow(h_simulphi[w], TPphi);
556  if (TP_is_matched) {
557  fillPlotNoFlow(h_assocphi[w], TPphi);
558  if (!isChargeOK)
559  fillPlotNoFlow(h_misidphi[w], TPphi);
560  }
561 
562  // histos for efficiency vs pT
563  fillPlotNoFlow(h_simulpT[w], xTPpt);
564  if (TP_is_matched) {
565  fillPlotNoFlow(h_assocpT[w], xTPpt);
566  if (!isChargeOK)
567  fillPlotNoFlow(h_misidpT[w], xTPpt);
568  }
569 
570  // histos for efficiency vs dxy
571  fillPlotNoFlow(h_simuldxy[w], dxySim);
572  if (TP_is_matched) {
573  fillPlotNoFlow(h_assocdxy[w], dxySim);
574  if (!isChargeOK)
575  fillPlotNoFlow(h_misiddxy[w], dxySim);
576  }
577 
578  // histos for efficiency vs dz
579  fillPlotNoFlow(h_simuldz[w], dzSim);
580  if (TP_is_matched) {
581  fillPlotNoFlow(h_assocdz[w], dzSim);
582  if (!isChargeOK)
583  fillPlotNoFlow(h_misiddz[w], dzSim);
584  }
585 
586  // histos for efficiency vs Radius
587  fillPlotNoFlow(h_simulRpos[w], TPrpos);
588  if (TP_is_matched)
589  fillPlotNoFlow(h_assocRpos[w], TPrpos);
590 
591  // histos for efficiency vs z position
592  fillPlotNoFlow(h_simulZpos[w], TPzpos);
593  if (TP_is_matched)
594  fillPlotNoFlow(h_assocZpos[w], TPzpos);
595 
596  // histos for efficiency vs Number of Hits
597  fillPlotNoFlow(h_simulhit[w], nSimHits);
598  if (TP_is_matched) {
599  fillPlotNoFlow(h_assochit[w], nSimHits);
600  nRecHits_vs_nSimHits[w]->Fill(nSimHits, assoc_recoTrack_NValidHits);
601 
602  // charge misid is more useful w.r.t. nRecHits (filled after)
603  //if (!isChargeOK) fillPlotNoFlow(h_misidhit[w], nSimHits);
604  }
605 
606  // histos for efficiency vs PileUp
607  fillPlotNoFlow(h_simulpu[w], PU_NumInteractions);
608  if (TP_is_matched) {
609  fillPlotNoFlow(h_assocpu[w], PU_NumInteractions);
610  if (!isChargeOK)
611  fillPlotNoFlow(h_misidpu[w], PU_NumInteractions);
612  }
613 
614  } // End for (TrackingParticleCollection::size_type i=0; i<tPCeff.size(); i++){
615 
616  //
617  //fill reconstructed track histograms
618  //
619  edm::LogVerbatim("MuonTrackValidator")
620  << "\n# of reco::Tracks with " << label[www].process() << ":" << label[www].label() << ":"
621  << label[www].instance() << ": " << trackCollectionSize << "\n";
622 
623  int at = 0;
624  int rT = 0;
625  for (edm::View<Track>::size_type i = 0; i < trackCollectionSize; ++i) {
626  bool Track_is_matched = false;
627  bool isChargeOK = true;
628  RefToBase<Track> track(trackCollection, i);
629  rT++;
630 
631  std::vector<std::pair<TrackingParticleRef, double> > tp;
633 
634  // new logic (bidirectional)
636  edm::LogVerbatim("MuonTrackValidator") << "----------------------------------------Track #" << track.key();
637 
638  if (recSimColl.find(track) != recSimColl.end()) {
639  tp = recSimColl[track];
640  if (!tp.empty()) {
641  tpr = tp.begin()->first;
642  // RtS and StR must associate the same pair !
643  if (simRecColl.find(tpr) != simRecColl.end()) {
644  auto const& assoc_track_checkback = simRecColl[tpr].begin()->first;
645 
646  if (assoc_track_checkback.key() == track.key()) {
647  edm::LogVerbatim("MuonTrackValidator")
648  << "------------------associated TrackingParticle #" << tpr.key();
649  Track_is_matched = true;
650  at++;
651  if (track->charge() != tpr->charge())
652  isChargeOK = false;
653  double Purity = tp.begin()->second;
654  double Quality = simRecColl[tpr].begin()->second;
655  edm::LogVerbatim("MuonTrackValidator") << "reco::Track #" << track.key() << " with pt=" << track->pt()
656  << " associated with purity:" << Purity << "\n";
657  if (MABH)
658  h_PurityVsQuality[w]->Fill(Quality, Purity);
659  }
660  }
661  }
662  }
663 
664  if (!Track_is_matched)
665  edm::LogVerbatim("MuonTrackValidator") << "reco::Track #" << track.key() << " with pt=" << track->pt()
666  << " NOT associated to any TrackingParticle"
667  << "\n";
668  }
669  // old logic, valid for cosmics 2-legs reco (bugged for collision scenario)
670  else {
671  if (recSimColl.find(track) != recSimColl.end()) {
672  tp = recSimColl[track];
673  if (!tp.empty()) {
674  tpr = tp.begin()->first;
675  Track_is_matched = true;
676  at++;
677  if (track->charge() != tpr->charge())
678  isChargeOK = false;
679  edm::LogVerbatim("MuonTrackValidator") << "reco::Track #" << track.key() << " with pt=" << track->pt()
680  << " associated with quality:" << tp.begin()->second << "\n";
681  }
682  } else {
683  edm::LogVerbatim("MuonTrackValidator") << "reco::Track #" << track.key() << " with pt=" << track->pt()
684  << " NOT associated to any TrackingParticle"
685  << "\n";
686  }
687  }
688 
689  //
690  int nRecHits = track->numberOfValidHits();
691  edm::LogVerbatim("MuonTrackValidator") << "\t N valid rechits = " << nRecHits << "\n";
692 
693  double etaRec = track->eta();
694  double xetaRec = getEta(etaRec);
695 
696  double ptRec = track->pt();
697  double xptRec = getPt(ptRec);
698 
699  double qoverpRec = track->qoverp();
700  double phiRec = track->phi();
701  double thetaRec = track->theta();
702  double dxyRec = track->dxy(bs.position());
703  double dzRec = track->dz(bs.position());
704 
705  double qoverpError = track->qoverpError();
706  double ptError = track->ptError();
707  double thetaError = track->thetaError();
708  double phiError = track->phiError();
709  double dxyError = track->dxyError();
710  double dzError = track->dzError();
711 
712  // histos for fake rate vs eta
713  fillPlotNoFlow(h_recoeta[w], xetaRec);
714  if (Track_is_matched) {
715  fillPlotNoFlow(h_assoc2eta[w], xetaRec);
716  }
717 
718  // histos for fake rate vs phi
719  fillPlotNoFlow(h_recophi[w], phiRec);
720  if (Track_is_matched) {
721  fillPlotNoFlow(h_assoc2phi[w], phiRec);
722  }
723 
724  // histos for fake rate vs pT
725  fillPlotNoFlow(h_recopT[w], xptRec);
726  if (Track_is_matched) {
727  fillPlotNoFlow(h_assoc2pT[w], xptRec);
728  }
729 
730  // histos for fake rate vs dxy
731  fillPlotNoFlow(h_recodxy[w], dxyRec);
732  if (Track_is_matched) {
733  fillPlotNoFlow(h_assoc2dxy[w], dxyRec);
734  }
735 
736  // histos for fake rate vs dz
737  fillPlotNoFlow(h_recodz[w], dzRec);
738  if (Track_is_matched) {
739  fillPlotNoFlow(h_assoc2dz[w], dzRec);
740  }
741 
742  // histos for fake rate vs Number of RecHits in track
743  fillPlotNoFlow(h_recohit[w], nRecHits);
744  if (Track_is_matched) {
745  fillPlotNoFlow(h_assoc2hit[w], nRecHits);
746  // charge misid w.r.t. nRecHits
747  if (!isChargeOK)
748  fillPlotNoFlow(h_misidhit[w], nRecHits);
749  }
750 
751  // histos for fake rate vs Number of PU interactions
752  fillPlotNoFlow(h_recopu[w], PU_NumInteractions);
753  if (Track_is_matched) {
754  fillPlotNoFlow(h_assoc2pu[w], PU_NumInteractions);
755  }
756 
757  // Fill other histos
758  TrackingParticle* tpp = const_cast<TrackingParticle*>(tpr.get());
759  // TrackingParticle parameters at point of closest approach to the beamline
760  TrackingParticle::Vector momentumTP;
761  TrackingParticle::Point vertexTP;
762 
763  if (parametersDefiner == "LhcParametersDefinerForTP") {
764  // following reco plots are made only from tracks associated to selected signal TPs
765  if (!(Track_is_matched && tpSelector(*tpp)))
766  continue;
767  else {
768  momentumTP = Lhc_parametersDefinerTP->momentum(event, setup, tpr);
769  vertexTP = Lhc_parametersDefinerTP->vertex(event, setup, tpr);
770  }
771  } else if (parametersDefiner == "CosmicParametersDefinerForTP") {
772  // following reco plots are made only from tracks associated to selected signal TPs
773  if (!(Track_is_matched && cosmictpSelector(tpr, &bs, event, setup)))
774  continue;
775  else {
776  momentumTP = Cosmic_parametersDefinerTP->momentum(event, setup, tpr);
777  vertexTP = Cosmic_parametersDefinerTP->vertex(event, setup, tpr);
778  }
779  }
780 
781  if (associators[ww] == "trackAssociatorByChi2") {
782  //association chi2
783  double assocChi2 = -tp.begin()->second; //in association map is stored -chi2
784  h_assochi2[www]->Fill(assocChi2);
785  h_assochi2_prob[www]->Fill(TMath::Prob((assocChi2)*5, 5));
786  } else if (associators[ww] == "trackAssociatorByHits") {
787  double fraction = tp.begin()->second;
788  h_assocFraction[www]->Fill(fraction);
789  h_assocSharedHit[www]->Fill(fraction * nRecHits);
790  }
791 
792  h_charge[w]->Fill(track->charge());
793 
794  // Hits
795  h_nhits[w]->Fill(nRecHits);
796  nhits_vs_eta[w]->Fill(xetaRec, nRecHits);
797  nhits_vs_phi[w]->Fill(phiRec, nRecHits);
798 
799  if (do_MUOhitsPlots) {
800  nDThits_vs_eta[w]->Fill(xetaRec, track->hitPattern().numberOfValidMuonDTHits());
801  nCSChits_vs_eta[w]->Fill(xetaRec, track->hitPattern().numberOfValidMuonCSCHits());
802  nRPChits_vs_eta[w]->Fill(xetaRec, track->hitPattern().numberOfValidMuonRPCHits());
803  if (useGEMs_)
804  nGEMhits_vs_eta[w]->Fill(xetaRec, track->hitPattern().numberOfValidMuonGEMHits());
805  if (useME0_)
806  nME0hits_vs_eta[w]->Fill(xetaRec, track->hitPattern().numberOfValidMuonME0Hits());
807  }
808 
809  if (do_TRKhitsPlots) {
810  nTRK_LayersWithMeas_vs_eta[w]->Fill(xetaRec, track->hitPattern().trackerLayersWithMeasurement());
811  nPixel_LayersWithMeas_vs_eta[w]->Fill(xetaRec, track->hitPattern().pixelLayersWithMeasurement());
812  h_nlosthits[w]->Fill(track->numberOfLostHits());
813  h_nmisslayers_inner[w]->Fill(track->hitPattern().numberOfLostHits(reco::HitPattern::MISSING_INNER_HITS));
814  h_nmisslayers_outer[w]->Fill(track->hitPattern().numberOfLostHits(reco::HitPattern::MISSING_OUTER_HITS));
815  nlosthits_vs_eta[w]->Fill(xetaRec, track->numberOfLostHits());
816  }
817 
818  // normalized chi2
819  h_nchi2[w]->Fill(track->normalizedChi2());
820  h_nchi2_prob[w]->Fill(TMath::Prob(track->chi2(), (int)track->ndof()));
821  chi2_vs_nhits[w]->Fill(nRecHits, track->normalizedChi2());
822  chi2_vs_eta[w]->Fill(xetaRec, track->normalizedChi2());
823  chi2_vs_phi[w]->Fill(phiRec, track->normalizedChi2());
824 
825  double ptSim = sqrt(momentumTP.perp2());
826  double xptSim = getPt(ptSim);
827  double qoverpSim = tpr->charge() / sqrt(momentumTP.x() * momentumTP.x() + momentumTP.y() * momentumTP.y() +
828  momentumTP.z() * momentumTP.z());
829  double etaSim = momentumTP.eta();
830  double thetaSim = momentumTP.theta();
831  double phiSim = momentumTP.phi();
832  double dxySim = TrackingParticleIP::dxy(vertexTP, momentumTP, bs.position());
833  double dzSim = TrackingParticleIP::dz(vertexTP, momentumTP, bs.position());
834 
835  double etares = etaRec - etaSim;
836  double ptRelRes = (ptRec - ptSim) / ptSim; // relative residual -> resolution
837  double ptPull = (ptRec - ptSim) / ptError;
838  double qoverpPull = (qoverpRec - qoverpSim) / qoverpError;
839  double thetaPull = (thetaRec - thetaSim) / thetaError;
840  double phiDiff = phiRec - phiSim;
841  if (abs(phiDiff) > M_PI) {
842  if (phiDiff > 0.)
843  phiDiff = phiDiff - 2. * M_PI;
844  else
845  phiDiff = phiDiff + 2. * M_PI;
846  }
847  double phiPull = phiDiff / phiError;
848  double dxyPull = (dxyRec - dxySim) / dxyError;
849  double dzPull = (dzRec - dzSim) / dzError;
850 
851  h_etaRes[w]->Fill(etares);
852  etares_vs_eta[w]->Fill(xetaRec, etares);
853 
854  ptres_vs_eta[w]->Fill(xetaRec, ptRelRes);
855  ptres_vs_pt[w]->Fill(xptSim, ptRelRes);
856  ptres_vs_phi[w]->Fill(phiRec, ptRelRes);
857  h_ptpull[w]->Fill(ptPull);
858  ptpull_vs_eta[w]->Fill(xetaRec, ptPull);
859  ptpull_vs_phi[w]->Fill(phiRec, ptPull);
860  h_qoverppull[w]->Fill(qoverpPull);
861 
862  thetaCotres_vs_eta[w]->Fill(xetaRec, cos(thetaRec) / sin(thetaRec) - cos(thetaSim) / sin(thetaSim));
863  thetaCotres_vs_pt[w]->Fill(xptSim, cos(thetaRec) / sin(thetaRec) - cos(thetaSim) / sin(thetaSim));
864  h_thetapull[w]->Fill(thetaPull);
865  thetapull_vs_eta[w]->Fill(xetaRec, thetaPull);
866  thetapull_vs_phi[w]->Fill(phiRec, thetaPull);
867 
868  phires_vs_eta[w]->Fill(xetaRec, phiDiff);
869  phires_vs_pt[w]->Fill(xptSim, phiDiff);
870  phires_vs_phi[w]->Fill(phiRec, phiDiff);
871  h_phipull[w]->Fill(phiPull);
872  phipull_vs_eta[w]->Fill(xetaRec, phiPull);
873  phipull_vs_phi[w]->Fill(phiRec, phiPull);
874 
875  dxyres_vs_eta[w]->Fill(xetaRec, dxyRec - dxySim);
876  dxyres_vs_pt[w]->Fill(xptSim, dxyRec - dxySim);
877  h_dxypull[w]->Fill(dxyPull);
878  dxypull_vs_eta[w]->Fill(xetaRec, dxyPull);
879 
880  dzres_vs_eta[w]->Fill(xetaRec, dzRec - dzSim);
881  dzres_vs_pt[w]->Fill(xptSim, dzRec - dzSim);
882  h_dzpull[w]->Fill(dzPull);
883  dzpull_vs_eta[w]->Fill(xetaRec, dzPull);
884 
885  double contrib_Qoverp = qoverpPull * qoverpPull / 5;
886  double contrib_dxy = dxyPull * dxyPull / 5;
887  double contrib_dz = dzPull * dzPull / 5;
888  double contrib_theta = thetaPull * thetaPull / 5;
889  double contrib_phi = phiPull * phiPull / 5;
890  double assoChi2 = contrib_Qoverp + contrib_dxy + contrib_dz + contrib_theta + contrib_phi;
891 
892  edm::LogVerbatim("MuonTrackValidator") << "normalized Chi2 (track 5-dofs matching) = " << assoChi2 << "\n"
893  << "\t contrib_Qoverp = " << contrib_Qoverp << "\n"
894  << "\t contrib_theta = " << contrib_theta << "\n"
895  << "\t contrib_phi = " << contrib_phi << "\n"
896  << "\t contrib_dxy = " << contrib_dxy << "\n"
897  << "\t contrib_dz = " << contrib_dz << "\n";
898 
899  edm::LogVerbatim("MuonTrackValidator") << "ptRec = " << ptRec << "\n"
900  << "etaRec = " << etaRec << "\n"
901  << "qoverpRec = " << qoverpRec << "\n"
902  << "thetaRec = " << thetaRec << "\n"
903  << "phiRec = " << phiRec << "\n"
904  << "dxyRec = " << dxyRec << "\n"
905  << "dzRec = " << dzRec << "\n"
906  << ""
907  << "\n"
908  << "qoverpError = " << qoverpError << "\n"
909  << "thetaError = " << thetaError << "\n"
910  << "phiError = " << phiError << "\n"
911  << "dxyError = " << dxyError << "\n"
912  << "dzError = " << dzError << "\n"
913  << ""
914  << "\n"
915  << "ptSim = " << ptSim << "\n"
916  << "etaSim = " << etaSim << "\n"
917  << "qoverpSim = " << qoverpSim << "\n"
918  << "thetaSim = " << thetaSim << "\n"
919  << "phiSim = " << phiSim << "\n"
920  << "dxySim = " << dxySim << "\n"
921  << "dzSim = " << dzSim << "\n";
922  } // End of for(edm::View<Track>::size_type i=0; i<trackCollectionSize; ++i) {
923 
924  h_tracks[w]->Fill(at);
925  h_fakes[w]->Fill(rT - at);
926  edm::LogVerbatim("MuonTrackValidator") << "Total Simulated: " << st << "\n"
927  << "Total Associated (simToReco): " << ats << "\n"
928  << "Total Reconstructed: " << rT << "\n"
929  << "Total Associated (recoToSim): " << at << "\n"
930  << "Total Fakes: " << rT - at << "\n";
931  w++;
932  } // End of for (unsigned int www=0;www<label.size();www++){
933  } //END of for (unsigned int ww=0;ww<associators.size();ww++){
934 }
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:525
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:250
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:219
void post_insert()
post insert action
T sqrt(T t)
Definition: SSEVec.h:19
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:740
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:232
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:69
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:73
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:575
const Point & position() const
position
Definition: BeamSpot.h:59
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 ( DQMEDAnalyzer::DQMStore::IBooker ibooker,
edm::Run const &  ,
edm::EventSetup const &  setup 
)
overridevirtual

Method called at the end of the event loop.

Implements DQMEDAnalyzer.

Definition at line 25 of file MuonTrackValidator.cc.

References ecalcalib_dqm_sourceclient-live_cfg::algo, trackingPlots::assoc, simPFProducer_cfi::associators, dqm::dqmstoreimpl::DQMStore::IBooker::book1D(), dqm::dqmstoreimpl::DQMStore::IBooker::book2D(), dqm::dqmstoreimpl::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(), label, edm::InputTag::label(), associators_cff::MABH, histoParameters_cff::maxCSCHit, histoParameters_cff::maxDTHit, gather_cfg::maxDxy, beam_dqm_sourceclient-live_cfg::maxDz, maxEta, histoParameters_cff::maxLayers, histoParameters_cff::maxNHit, HLT_2018_cff::maxPhi, histoParameters_cff::maxPixels, MuonErrorMatrixAnalyzer_cfi::maxPt, pileupFilter_cff::maxPU, histoParameters_cff::maxRPCHit, histoParameters_cff::maxRpos, HGVHistoProducerAlgoBlock_cfi::maxZpos, histoParameters_cff::minCSCHit, histoParameters_cff::minDTHit, histoParameters_cff::minDxy, pfMETCorrectionType0_cfi::minDz, ticl::constants::minEta, beam_dqm_sourceclient-live_cfg::minLayers, histoParameters_cff::minNHit, HLT_2018_cff::minPhi, histoParameters_cff::minPixels, beam_dqm_sourceclient-live_cfg::minPt, pileupFilter_cff::minPU, histoParameters_cff::minRPCHit, histoParameters_cff::minRpos, HGVHistoProducerAlgoBlock_cfi::minZpos, histoParameters_cff::nintCSCHit, histoParameters_cff::nintDTHit, histoParameters_cff::nintDxy, histoParameters_cff::nintDz, HGVHistoProducerAlgoBlock_cfi::nintEta, histoParameters_cff::nintLayers, histoParameters_cff::nintNHit, HGVHistoProducerAlgoBlock_cfi::nintPhi, histoParameters_cff::nintPixels, HGVHistoProducerAlgoBlock_cfi::nintPt, histoParameters_cff::nintPU, histoParameters_cff::nintRPCHit, histoParameters_cff::nintRpos, HGVHistoProducerAlgoBlock_cfi::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(), dqm::dqmstoreimpl::DQMStore::IBooker::setCurrentFolder(), and TrackValidationHeavyIons_cff::useLogPt.

Referenced by ~MuonTrackValidator().

27  {
28  for (unsigned int ww = 0; ww < associators.size(); ww++) {
29  for (unsigned int www = 0; www < label.size(); www++) {
30  ibooker.cd();
31  InputTag algo = label[www];
32  string dirName = dirName_;
33  if (!algo.process().empty())
34  dirName += algo.process() + "_";
35  if (!algo.label().empty())
36  dirName += algo.label();
37  if (!algo.instance().empty())
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(
58  "num_assoSimToReco_eta", "N of associated tracks (simToReco) vs eta", nintEta, minEta, maxEta));
59  h_assoc2eta.push_back(ibooker.book1D(
60  "num_assoRecoToSim_eta", "N of associated (recoToSim) tracks vs eta", nintEta, minEta, maxEta));
61  h_simuleta.push_back(ibooker.book1D("num_simul_eta", "N of simulated tracks vs eta", nintEta, minEta, maxEta));
62  h_misideta.push_back(ibooker.book1D("num_chargemisid_eta",
63  "N of associated (simToReco) tracks with charge misID vs eta",
64  nintEta,
65  minEta,
66  maxEta));
67 
68  h_recopT.push_back(ibooker.book1D("num_reco_pT", "N of reco track vs pT", nintPt, minPt, maxPt));
69  h_assocpT.push_back(
70  ibooker.book1D("num_assoSimToReco_pT", "N of associated tracks (simToReco) vs pT", nintPt, minPt, maxPt));
71  h_assoc2pT.push_back(
72  ibooker.book1D("num_assoRecoToSim_pT", "N of associated (recoToSim) tracks vs pT", nintPt, minPt, maxPt));
73  h_simulpT.push_back(ibooker.book1D("num_simul_pT", "N of simulated tracks vs pT", nintPt, minPt, maxPt));
74  h_misidpT.push_back(ibooker.book1D(
75  "num_chargemisid_pT", "N of associated (simToReco) tracks with charge misID vs pT", nintPt, minPt, maxPt));
76 
77  h_recophi.push_back(ibooker.book1D("num_reco_phi", "N of reco track vs phi", nintPhi, minPhi, maxPhi));
78  h_assocphi.push_back(ibooker.book1D(
79  "num_assoSimToReco_phi", "N of associated tracks (simToReco) vs phi", nintPhi, minPhi, maxPhi));
80  h_assoc2phi.push_back(ibooker.book1D(
81  "num_assoRecoToSim_phi", "N of associated (recoToSim) tracks vs phi", nintPhi, minPhi, maxPhi));
82  h_simulphi.push_back(ibooker.book1D("num_simul_phi", "N of simulated tracks vs phi", nintPhi, minPhi, maxPhi));
83  h_misidphi.push_back(ibooker.book1D("num_chargemisid_phi",
84  "N of associated (simToReco) tracks with charge misID vs phi",
85  nintPhi,
86  minPhi,
87  maxPhi));
88 
89  h_recohit.push_back(ibooker.book1D("num_reco_hit", "N of reco tracks vs N SimHits", nintNHit, minNHit, maxNHit));
90  h_assochit.push_back(ibooker.book1D(
91  "num_assoSimToReco_hit", "N of associated tracks (simToReco) vs N SimHits", nintNHit, minNHit, maxNHit));
92  h_assoc2hit.push_back(ibooker.book1D(
93  "num_assoRecoToSim_hit", "N of associated (recoToSim) tracks vs N Rechits", nintNHit, minNHit, maxNHit));
94  h_simulhit.push_back(
95  ibooker.book1D("num_simul_hit", "N of simulated tracks vs N SimHits", nintNHit, minNHit, maxNHit));
96  h_misidhit.push_back(ibooker.book1D("num_chargemisid_hit",
97  "N of associated (recoToSim) tracks with charge misID vs N RecHits",
98  nintNHit,
99  minNHit,
100  maxNHit));
101 
102  h_recodxy.push_back(ibooker.book1D("num_reco_dxy", "N of reco track vs dxy", nintDxy, minDxy, maxDxy));
103  h_assocdxy.push_back(ibooker.book1D(
104  "num_assoSimToReco_dxy", "N of associated tracks (simToReco) vs dxy", nintDxy, minDxy, maxDxy));
105  h_assoc2dxy.push_back(ibooker.book1D(
106  "num_assoRecoToSim_dxy", "N of associated (recoToSim) tracks vs dxy", nintDxy, minDxy, maxDxy));
107  h_simuldxy.push_back(ibooker.book1D("num_simul_dxy", "N of simulated tracks vs dxy", nintDxy, minDxy, maxDxy));
108  h_misiddxy.push_back(ibooker.book1D("num_chargemisid_dxy",
109  "N of associated (simToReco) tracks with charge misID vs dxy",
110  nintDxy,
111  minDxy,
112  maxDxy));
113  h_recodz.push_back(ibooker.book1D("num_reco_dz", "N of reco track vs dz", nintDz, minDz, maxDz));
114  h_assocdz.push_back(
115  ibooker.book1D("num_assoSimToReco_dz", "N of associated tracks (simToReco) vs dz", nintDz, minDz, maxDz));
116  h_assoc2dz.push_back(
117  ibooker.book1D("num_assoRecoToSim_dz", "N of associated (recoToSim) tracks vs dz", nintDz, minDz, maxDz));
118  h_simuldz.push_back(ibooker.book1D("num_simul_dz", "N of simulated tracks vs dz", nintDz, minDz, maxDz));
119  h_misiddz.push_back(ibooker.book1D(
120  "num_chargemisid_dz", "N of associated (simToReco) tracks with charge misID vs dz", nintDz, minDz, maxDz));
121 
122  h_assocRpos.push_back(ibooker.book1D(
123  "num_assoSimToReco_Rpos", "N of associated tracks (simToReco) vs Radius", nintRpos, minRpos, maxRpos));
124  h_simulRpos.push_back(
125  ibooker.book1D("num_simul_Rpos", "N of simulated tracks vs Radius", nintRpos, minRpos, maxRpos));
126 
127  h_assocZpos.push_back(ibooker.book1D(
128  "num_assoSimToReco_Zpos", "N of associated tracks (simToReco) vs Z", nintZpos, minZpos, maxZpos));
129  h_simulZpos.push_back(ibooker.book1D("num_simul_Zpos", "N of simulated tracks vs Z", nintZpos, minZpos, maxZpos));
130 
131  h_recopu.push_back(ibooker.book1D("num_reco_pu", "N of reco track vs pu", nintPU, minPU, maxPU));
132  h_assocpu.push_back(
133  ibooker.book1D("num_assoSimToReco_pu", "N of associated tracks (simToReco) vs pu", nintPU, minPU, maxPU));
134  h_assoc2pu.push_back(
135  ibooker.book1D("num_assoRecoToSim_pu", "N of associated (recoToSim) tracks vs pu", nintPU, minPU, maxPU));
136  h_simulpu.push_back(ibooker.book1D("num_simul_pu", "N of simulated tracks vs pu", nintPU, minPU, maxPU));
137  h_misidpu.push_back(ibooker.book1D(
138  "num_chargemisid_pu", "N of associated (simToReco) charge misIDed tracks vs pu", nintPU, minPU, maxPU));
139 
140  h_nchi2.push_back(ibooker.book1D("chi2", "Track normalized #chi^{2}", 80, 0., 20.));
141  h_nchi2_prob.push_back(ibooker.book1D("chi2prob", "Probability of track normalized #chi^{2}", 100, 0., 1.));
142 
143  chi2_vs_nhits.push_back(
144  ibooker.book2D("chi2_vs_nhits", "#chi^{2} vs nhits", nintNHit, minNHit, maxNHit, 20, 0., 10.));
145  chi2_vs_eta.push_back(ibooker.book2D("chi2_vs_eta", "chi2_vs_eta", nintEta, minEta, maxEta, 40, 0., 20.));
146  chi2_vs_phi.push_back(ibooker.book2D("chi2_vs_phi", "#chi^{2} vs #phi", nintPhi, minPhi, maxPhi, 40, 0., 20.));
147 
148  h_nhits.push_back(ibooker.book1D("nhits", "Number of hits per track", nintNHit, minNHit, maxNHit));
149  nhits_vs_eta.push_back(
150  ibooker.book2D("nhits_vs_eta", "Number of Hits vs eta", nintEta, minEta, maxEta, nintNHit, minNHit, maxNHit));
151  nhits_vs_phi.push_back(
152  ibooker.book2D("nhits_vs_phi", "#hits vs #phi", nintPhi, minPhi, maxPhi, nintNHit, minNHit, maxNHit));
153 
154  if (do_MUOhitsPlots) {
155  nDThits_vs_eta.push_back(ibooker.book2D(
156  "nDThits_vs_eta", "Number of DT hits vs eta", nintEta, minEta, maxEta, nintDTHit, minDTHit, maxDTHit));
157  nCSChits_vs_eta.push_back(ibooker.book2D(
158  "nCSChits_vs_eta", "Number of CSC hits vs eta", nintEta, minEta, maxEta, nintCSCHit, minCSCHit, maxCSCHit));
159  nRPChits_vs_eta.push_back(ibooker.book2D(
160  "nRPChits_vs_eta", "Number of RPC hits vs eta", nintEta, minEta, maxEta, nintRPCHit, minRPCHit, maxRPCHit));
161  if (useGEMs_)
162  nGEMhits_vs_eta.push_back(ibooker.book2D(
163  "nGEMhits_vs_eta", "Number of GEM hits vs eta", nintEta, minEta, maxEta, nintNHit, minNHit, maxNHit));
164  if (useME0_)
165  nME0hits_vs_eta.push_back(ibooker.book2D(
166  "nME0hits_vs_eta", "Number of ME0 hits vs eta", nintEta, minEta, maxEta, nintNHit, minNHit, maxNHit));
167  }
168 
169  if (do_TRKhitsPlots) {
170  nTRK_LayersWithMeas_vs_eta.push_back(ibooker.book2D("nTRK_LayersWithMeas_vs_eta",
171  "# TRK Layers with measurement vs eta",
172  nintEta,
173  minEta,
174  maxEta,
175  nintLayers,
176  minLayers,
177  maxLayers));
178  nPixel_LayersWithMeas_vs_eta.push_back(ibooker.book2D("nPixel_LayersWithMeas_vs_eta",
179  "Number of Pixel Layers with measurement vs eta",
180  nintEta,
181  minEta,
182  maxEta,
183  nintPixels,
184  minPixels,
185  maxPixels));
186  h_nmisslayers_inner.push_back(ibooker.book1D(
187  "nTRK_misslayers_inner", "Number of missing inner TRK layers", nintLayers, minLayers, maxLayers));
188  h_nmisslayers_outer.push_back(ibooker.book1D(
189  "nTRK_misslayers_outer", "Number of missing outer TRK layers", nintLayers, minLayers, maxLayers));
190  h_nlosthits.push_back(ibooker.book1D("nlosthits", "Number of lost hits per track", 6, -0.5, 5.5));
191  nlosthits_vs_eta.push_back(ibooker.book2D(
192  "nlosthits_vs_eta", "Number of lost hits per track vs eta", nintEta, minEta, maxEta, 6, -0.5, 5.5));
193  }
194 
195  ptres_vs_eta.push_back(ibooker.book2D("ptres_vs_eta",
196  "p_{T} Relative Residual vs #eta",
197  nintEta,
198  minEta,
199  maxEta,
200  ptRes_nbin,
202  ptRes_rangeMax));
203  ptres_vs_phi.push_back(ibooker.book2D("ptres_vs_phi",
204  "p_{T} Relative Residual vs #phi",
205  nintPhi,
206  minPhi,
207  maxPhi,
208  ptRes_nbin,
210  ptRes_rangeMax));
211  ptres_vs_pt.push_back(ibooker.book2D("ptres_vs_pt",
212  "p_{T} Relative Residual vs p_{T}",
213  nintPt,
214  minPt,
215  maxPt,
216  ptRes_nbin,
218  ptRes_rangeMax));
219  h_ptpull.push_back(ibooker.book1D("ptpull", "p_{T} Pull", 100, -10., 10.));
220  ptpull_vs_eta.push_back(
221  ibooker.book2D("ptpull_vs_eta", "p_{T} Pull vs #eta", nintEta, minEta, maxEta, 100, -10., 10.));
222  ptpull_vs_phi.push_back(
223  ibooker.book2D("ptpull_vs_phi", "p_{T} Pull vs #phi", nintPhi, minPhi, maxPhi, 100, -10., 10.));
224  h_qoverppull.push_back(ibooker.book1D("qoverppull", "q/p Pull", 100, -10., 10.));
225 
226  h_etaRes.push_back(ibooker.book1D("etaRes", "#eta residual", etaRes_nbin, etaRes_rangeMin, etaRes_rangeMax));
227  etares_vs_eta.push_back(ibooker.book2D("etares_vs_eta",
228  "#eta Residual vs #eta",
229  nintEta,
230  minEta,
231  maxEta,
232  etaRes_nbin,
234  etaRes_rangeMax));
235 
236  thetaCotres_vs_eta.push_back(ibooker.book2D("thetaCotres_vs_eta",
237  "cot(#theta) Residual vs #eta",
238  nintEta,
239  minEta,
240  maxEta,
244  thetaCotres_vs_pt.push_back(ibooker.book2D("thetaCotres_vs_pt",
245  "cot(#theta) Residual vs p_{T}",
246  nintPt,
247  minPt,
248  maxPt,
252  h_thetapull.push_back(ibooker.book1D("thetapull", "#theta Pull", 100, -10., 10.));
253  thetapull_vs_eta.push_back(
254  ibooker.book2D("thetapull_vs_eta", "#theta Pull vs #eta", nintEta, minEta, maxEta, 100, -10, 10));
255  thetapull_vs_phi.push_back(
256  ibooker.book2D("thetapull_vs_phi", "#theta Pull vs #phi", nintPhi, minPhi, maxPhi, 100, -10, 10));
257 
258  phires_vs_eta.push_back(ibooker.book2D("phires_vs_eta",
259  "#phi Residual vs #eta",
260  nintEta,
261  minEta,
262  maxEta,
263  phiRes_nbin,
265  phiRes_rangeMax));
266  phires_vs_pt.push_back(ibooker.book2D(
267  "phires_vs_pt", "#phi Residual vs p_{T}", nintPt, minPt, maxPt, phiRes_nbin, phiRes_rangeMin, phiRes_rangeMax));
268  phires_vs_phi.push_back(ibooker.book2D("phires_vs_phi",
269  "#phi Residual vs #phi",
270  nintPhi,
271  minPhi,
272  maxPhi,
273  phiRes_nbin,
275  phiRes_rangeMax));
276  h_phipull.push_back(ibooker.book1D("phipull", "#phi Pull", 100, -10., 10.));
277  phipull_vs_eta.push_back(
278  ibooker.book2D("phipull_vs_eta", "#phi Pull vs #eta", nintEta, minEta, maxEta, 100, -10, 10));
279  phipull_vs_phi.push_back(
280  ibooker.book2D("phipull_vs_phi", "#phi Pull vs #phi", nintPhi, minPhi, maxPhi, 100, -10, 10));
281 
282  dxyres_vs_eta.push_back(ibooker.book2D("dxyres_vs_eta",
283  "dxy Residual vs #eta",
284  nintEta,
285  minEta,
286  maxEta,
287  dxyRes_nbin,
289  dxyRes_rangeMax));
290  dxyres_vs_pt.push_back(ibooker.book2D(
291  "dxyres_vs_pt", "dxy Residual vs p_{T}", nintPt, minPt, maxPt, dxyRes_nbin, dxyRes_rangeMin, dxyRes_rangeMax));
292  h_dxypull.push_back(ibooker.book1D("dxypull", "dxy Pull", 100, -10., 10.));
293  dxypull_vs_eta.push_back(
294  ibooker.book2D("dxypull_vs_eta", "dxy Pull vs #eta", nintEta, minEta, maxEta, 100, -10, 10));
295 
296  dzres_vs_eta.push_back(ibooker.book2D(
297  "dzres_vs_eta", "dz Residual vs #eta", nintEta, minEta, maxEta, dzRes_nbin, dzRes_rangeMin, dzRes_rangeMax));
298  dzres_vs_pt.push_back(ibooker.book2D(
299  "dzres_vs_pt", "dz Residual vs p_{T}", nintPt, minPt, maxPt, dzRes_nbin, dzRes_rangeMin, dzRes_rangeMax));
300  h_dzpull.push_back(ibooker.book1D("dzpull", "dz Pull", 100, -10., 10.));
301  dzpull_vs_eta.push_back(
302  ibooker.book2D("dzpull_vs_eta", "dz Pull vs #eta", nintEta, minEta, maxEta, 100, -10, 10));
303 
304  nRecHits_vs_nSimHits.push_back(ibooker.book2D(
305  "nRecHits_vs_nSimHits", "nRecHits vs nSimHits", nintNHit, minNHit, maxNHit, nintNHit, minNHit, maxNHit));
306 
307  if (MABH) {
308  h_PurityVsQuality.push_back(
309  ibooker.book2D("PurityVsQuality", "Purity vs Quality (MABH)", 20, 0.01, 1.01, 20, 0.01, 1.01));
310  }
311 
312  if (associators[ww] == "trackAssociatorByChi2") {
313  h_assochi2.push_back(ibooker.book1D("assocChi2", "track association #chi^{2}", 1000, 0., 100.));
314  h_assochi2_prob.push_back(ibooker.book1D("assocChi2_prob", "probability of association #chi^{2}", 100, 0., 1.));
315  } else if (associators[ww] == "trackAssociatorByHits") {
316  h_assocFraction.push_back(ibooker.book1D("assocFraction", "fraction of shared hits", 22, 0., 1.1));
317  h_assocSharedHit.push_back(ibooker.book1D("assocSharedHit", "number of shared hits", 41, -0.5, 40.5));
318  }
319 
320  if (useLogPt) {
321  BinLogX(h_simulpT.back()->getTH1F());
322  BinLogX(h_assocpT.back()->getTH1F());
323  BinLogX(h_recopT.back()->getTH1F());
324  BinLogX(h_assoc2pT.back()->getTH1F());
325  BinLogX(h_misidpT.back()->getTH1F());
326 
327  BinLogX(phires_vs_pt.back()->getTH2F());
328  BinLogX(thetaCotres_vs_pt.back()->getTH2F());
329  BinLogX(dxyres_vs_pt.back()->getTH2F());
330  BinLogX(dzres_vs_pt.back()->getTH2F());
331  BinLogX(ptres_vs_pt.back()->getTH2F());
332  }
333 
334  } //for (unsigned int www=0;www<label.size();www++)
335  } //for (unsigned int ww=0;ww<associators.size();ww++)
336 }
std::vector< MonitorElement * > h_assoc2phi
std::vector< MonitorElement * > h_recoeta
std::vector< MonitorElement * > phipull_vs_phi
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX)
Definition: DQMStore.cc:239
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
void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:418
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
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
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
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
MonitorElement * book2D(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY)
Definition: DQMStore.cc:266
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 148 of file MuonTrackValidator.h.

Referenced by MuonTrackValidator().

edm::InputTag MuonTrackValidator::associatormap
private

Definition at line 145 of file MuonTrackValidator.h.

Referenced by MuonTrackValidator().

bool MuonTrackValidator::BiDirectional_RecoToSim_association
private

Definition at line 160 of file MuonTrackValidator.h.

Referenced by MuonTrackValidator().

CosmicTrackingParticleSelector MuonTrackValidator::cosmictpSelector
private

Definition at line 157 of file MuonTrackValidator.h.

Referenced by MuonTrackValidator().

std::string MuonTrackValidator::dirName_
private

Definition at line 144 of file MuonTrackValidator.h.

Referenced by MuonTrackValidator().

bool MuonTrackValidator::MABH
private

Definition at line 162 of file MuonTrackValidator.h.

Referenced by MuonTrackValidator().

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

Definition at line 147 of file MuonTrackValidator.h.

Referenced by MuonTrackValidator().

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

Definition at line 146 of file MuonTrackValidator.h.

Referenced by MuonTrackValidator().

TrackingParticleSelector MuonTrackValidator::tpSelector
private

Definition at line 156 of file MuonTrackValidator.h.

Referenced by MuonTrackValidator().

bool MuonTrackValidator::UseAssociators
private

Definition at line 150 of file MuonTrackValidator.h.

Referenced by MuonTrackValidator().

bool MuonTrackValidator::useGEMs_
private

Definition at line 151 of file MuonTrackValidator.h.

Referenced by MuonTrackValidator().

bool MuonTrackValidator::useME0_
private

Definition at line 152 of file MuonTrackValidator.h.

Referenced by MuonTrackValidator().