diff --git a/DQMServices/ClientConfig/plugins/DQMGenericClient.cc b/DQMServices/ClientConfig/plugins/DQMGenericClient.cc index 7c3797c7fbee6..75b51b6d09e44 100644 --- a/DQMServices/ClientConfig/plugins/DQMGenericClient.cc +++ b/DQMServices/ClientConfig/plugins/DQMGenericClient.cc @@ -358,6 +358,20 @@ void DQMGenericClient::dqmEndJob(DQMStore::IBooker & ibooker, DQMStore::IGetter iSubDir != subDirSet.end(); ++iSubDir) { const string& dirName = *iSubDir; + // First normalize, then make cumulative, and only then efficiency + // This allows to use the cumulative distributions for efficiency calculation + for ( vector::const_iterator normOption = normOptions_.begin(); + normOption != normOptions_.end(); ++normOption ) + { + normalizeToEntries(ibooker, igetter, dirName, normOption->name, normOption->normHistName); + } + + for ( vector::const_iterator cdOption = cdOptions_.begin(); + cdOption != cdOptions_.end(); ++cdOption ) + { + makeCumulativeDist(ibooker, igetter, dirName, cdOption->name); + } + for ( vector::const_iterator efficOption = efficOptions_.begin(); efficOption != efficOptions_.end(); ++efficOption ) { @@ -376,17 +390,6 @@ void DQMGenericClient::dqmEndJob(DQMStore::IBooker & ibooker, DQMStore::IGetter computeProfile(ibooker, igetter, dirName, profileOption.name, profileOption.title, profileOption.srcName); } - for ( vector::const_iterator normOption = normOptions_.begin(); - normOption != normOptions_.end(); ++normOption ) - { - normalizeToEntries(ibooker, igetter, dirName, normOption->name, normOption->normHistName); - } - - for ( vector::const_iterator cdOption = cdOptions_.begin(); - cdOption != cdOptions_.end(); ++cdOption ) - { - makeCumulativeDist(ibooker, igetter, dirName, cdOption->name); - } } if ( ! outputFileName_.empty() ) theDQM->save(outputFileName_); diff --git a/Validation/RecoTrack/interface/MTVHistoProducerAlgo.h b/Validation/RecoTrack/interface/MTVHistoProducerAlgo.h index e211ecbd41612..4129392741c97 100644 --- a/Validation/RecoTrack/interface/MTVHistoProducerAlgo.h +++ b/Validation/RecoTrack/interface/MTVHistoProducerAlgo.h @@ -33,7 +33,9 @@ class MTVHistoProducerAlgo{ virtual void bookSimHistos(DQMStore::IBooker& ibook)=0; virtual void bookSimTrackHistos(DQMStore::IBooker& ibook)=0; + virtual void bookSimTrackPVAssociationHistos(DQMStore::IBooker& ibook)=0; virtual void bookRecoHistos(DQMStore::IBooker& ibook)=0; + virtual void bookRecoPVAssociationHistos(DQMStore::IBooker& ibook)=0; virtual void bookRecodEdxHistos(DQMStore::IBooker& ibook)=0; virtual void fill_generic_simTrack_histos(const TrackingParticle::Vector&,const TrackingParticle::Point& vertex, int bx)=0; @@ -42,11 +44,14 @@ class MTVHistoProducerAlgo{ virtual void fill_recoAssociated_simTrack_histos(int count, const TrackingParticle& tp, const TrackingParticle::Vector& momentumTP, const TrackingParticle::Point& vertexTP, - double dxy, double dz, int nSimHits, + double dxy, double dz, + double dxyPV, double dzPV, + int nSimHits, int nSimLayers, int nSimPixelLayers, int nSimStripMonoAndStereoLayers, const reco::Track* track, int numVertices, - double dR)=0; + double dR, + const math::XYZPoint *pvPosition)=0; virtual void fill_recoAssociated_simTrack_histos(int count, const reco::GenParticle& tp, @@ -58,6 +63,7 @@ class MTVHistoProducerAlgo{ virtual void fill_generic_recoTrack_histos(int count, const reco::Track& track, const math::XYZPoint& bsPosition, + const math::XYZPoint *pvPosition, bool isMatched, bool isSigMatched, bool isChargeMatched, diff --git a/Validation/RecoTrack/interface/MTVHistoProducerAlgoForTracker.h b/Validation/RecoTrack/interface/MTVHistoProducerAlgoForTracker.h index 3c0cdc800b6da..9ad5244b9df46 100644 --- a/Validation/RecoTrack/interface/MTVHistoProducerAlgoForTracker.h +++ b/Validation/RecoTrack/interface/MTVHistoProducerAlgoForTracker.h @@ -31,7 +31,9 @@ class MTVHistoProducerAlgoForTracker: public MTVHistoProducerAlgo { void bookSimHistos(DQMStore::IBooker& ibook) override; void bookSimTrackHistos(DQMStore::IBooker& ibook) override; + void bookSimTrackPVAssociationHistos(DQMStore::IBooker& ibook) override; void bookRecoHistos(DQMStore::IBooker& ibook) override; + void bookRecoPVAssociationHistos(DQMStore::IBooker& ibook) override; void bookRecodEdxHistos(DQMStore::IBooker& ibook) override; @@ -42,11 +44,14 @@ class MTVHistoProducerAlgoForTracker: public MTVHistoProducerAlgo { void fill_recoAssociated_simTrack_histos(int count, const TrackingParticle& tp, const TrackingParticle::Vector& momentumTP, const TrackingParticle::Point& vertexTP, - double dxy, double dz, int nSimHits, + double dxy, double dz, + double dxyPV, double dzPV, + int nSimHits, int nSimLayers, int nSimPixelLayers, int nSimStripMonoAndStereoLayers, const reco::Track* track, int numVertices, - double dR); + double dR, + const math::XYZPoint *pvPosition); void fill_recoAssociated_simTrack_histos(int count, const reco::GenParticle& tp, @@ -59,6 +64,7 @@ class MTVHistoProducerAlgoForTracker: public MTVHistoProducerAlgo { void fill_generic_recoTrack_histos(int count, const reco::Track& track, const math::XYZPoint& bsPosition, + const math::XYZPoint *pvPosition, bool isMatched, bool isSigMatched, bool isChargeMatched, @@ -140,6 +146,8 @@ class MTVHistoProducerAlgoForTracker: public MTVHistoProducerAlgo { double dxyRes_rangeMin,dxyRes_rangeMax; int dxyRes_nbin; double dzRes_rangeMin,dzRes_rangeMax; int dzRes_nbin; + double maxDzpvCum; int nintDzpvCum; + double maxDzpvsigCum; int nintDzpvsigCum; //sim MonitorElement *h_ptSIM, *h_etaSIM, *h_tracksSIM, *h_vertposSIM, *h_bunchxSIM; @@ -156,6 +164,8 @@ class MTVHistoProducerAlgoForTracker: public MTVHistoProducerAlgo { std::vector h_recophi, h_assocphi, h_assoc2phi, h_simulphi, h_looperphi, h_misidphi, h_pileupphi; std::vector h_recodxy, h_assocdxy, h_assoc2dxy, h_simuldxy, h_looperdxy, h_misiddxy, h_pileupdxy; std::vector h_recodz, h_assocdz, h_assoc2dz, h_simuldz, h_looperdz, h_misiddz, h_pileupdz; + std::vector h_recodxypv, h_assocdxypv, h_assoc2dxypv, h_simuldxypv, h_looperdxypv, h_misiddxypv, h_pileupdxypv; + std::vector h_recodzpv, h_assocdzpv, h_assoc2dzpv, h_simuldzpv, h_looperdzpv, h_misiddzpv, h_pileupdzpv; std::vector h_assocvertpos, h_simulvertpos, h_assoczpos, h_simulzpos; std::vector h_assocdr, h_assoc2dr, h_simuldr, h_recodr, h_pileupdr; @@ -167,6 +177,11 @@ class MTVHistoProducerAlgoForTracker: public MTVHistoProducerAlgo { std::vector h_reco_ootpu_eta, h_reco_ootpu_vertcount; std::vector h_con_eta, h_con_vertcount, h_con_zpos; + std::vector h_reco_dzpvcut, h_assoc_dzpvcut, h_assoc2_dzpvcut, h_simul_dzpvcut, h_simul2_dzpvcut, h_pileup_dzpvcut; + std::vector h_reco_dzpvsigcut, h_assoc_dzpvsigcut, h_assoc2_dzpvsigcut, h_simul_dzpvsigcut, h_simul2_dzpvsigcut, h_pileup_dzpvsigcut; + + std::vector h_reco_dzpvcut_pt, h_assoc_dzpvcut_pt, h_assoc2_dzpvcut_pt, h_simul_dzpvcut_pt, h_simul2_dzpvcut_pt, h_pileup_dzpvcut_pt; + std::vector h_reco_dzpvsigcut_pt, h_assoc_dzpvsigcut_pt, h_assoc2_dzpvsigcut_pt, h_simul_dzpvsigcut_pt, h_simul2_dzpvsigcut_pt, h_pileup_dzpvsigcut_pt; // dE/dx // in the future these might become an array diff --git a/Validation/RecoTrack/interface/MultiTrackValidator.h b/Validation/RecoTrack/interface/MultiTrackValidator.h index 35faeec2df7ba..f2a4c00f5b4b6 100644 --- a/Validation/RecoTrack/interface/MultiTrackValidator.h +++ b/Validation/RecoTrack/interface/MultiTrackValidator.h @@ -36,6 +36,7 @@ class MultiTrackValidator : public DQMEDAnalyzer, protected MultiTrackValidatorB const bool doSimTrackPlots_; const bool doRecoTrackPlots_; const bool dodEdxPlots_; + const bool doPVAssociationPlots_; MTVHistoProducerAlgo* histoProducerAlgo_; private: diff --git a/Validation/RecoTrack/plugins/MultiTrackValidator.cc b/Validation/RecoTrack/plugins/MultiTrackValidator.cc index 0130cc54ef29e..bec54154e6f3c 100644 --- a/Validation/RecoTrack/plugins/MultiTrackValidator.cc +++ b/Validation/RecoTrack/plugins/MultiTrackValidator.cc @@ -49,7 +49,8 @@ MultiTrackValidator::MultiTrackValidator(const edm::ParameterSet& pset): doSimPlots_(pset.getUntrackedParameter("doSimPlots")), doSimTrackPlots_(pset.getUntrackedParameter("doSimTrackPlots")), doRecoTrackPlots_(pset.getUntrackedParameter("doRecoTrackPlots")), - dodEdxPlots_(pset.getUntrackedParameter("dodEdxPlots")) + dodEdxPlots_(pset.getUntrackedParameter("dodEdxPlots")), + doPVAssociationPlots_(pset.getUntrackedParameter("doPVAssociationPlots")) { //theExtractor = IsoDepositExtractorFactory::get()->create( extractorName, extractorPSet, consumesCollector()); @@ -65,7 +66,7 @@ MultiTrackValidator::MultiTrackValidator(const edm::ParameterSet& pset): m_dEdx2Tag = consumes >(pset.getParameter< edm::InputTag >("dEdx2Tag")); } - if(doPlotsOnlyForTruePV_) { + if(doPlotsOnlyForTruePV_ || doPVAssociationPlots_) { label_tv = consumes(pset.getParameter< edm::InputTag >("label_tv")); recoVertexToken_ = consumes >(pset.getUntrackedParameter("label_vertex")); vertexAssociatorToken_ = consumes(pset.getUntrackedParameter("vertexAssociator")); @@ -209,12 +210,14 @@ void MultiTrackValidator::bookHistograms(DQMStore::IBooker& ibook, edm::Run cons if(doSimTrackPlots_) { histoProducerAlgo_->bookSimTrackHistos(ibook); + if(doPVAssociationPlots_) histoProducerAlgo_->bookSimTrackPVAssociationHistos(ibook); } //Booking histograms concerning with reconstructed tracks if(doRecoTrackPlots_) { histoProducerAlgo_->bookRecoHistos(ibook); if (dodEdxPlots_) histoProducerAlgo_->bookRecodEdxHistos(ibook); + if (doPVAssociationPlots_) histoProducerAlgo_->bookRecoPVAssociationHistos(ibook); } }//end loop www }// end loop ww @@ -250,7 +253,9 @@ void MultiTrackValidator::analyze(const edm::Event& event, const edm::EventSetup cosmictpSelector.initEvent(simHitsTPAssoc); } - if(doPlotsOnlyForTruePV_) { + const reco::Vertex::Point *thePVposition = nullptr; + const TrackingVertex::LorentzVector *theSimPVPosition = nullptr; + if(doPlotsOnlyForTruePV_ || doPVAssociationPlots_) { edm::Handle htv; event.getByToken(label_tv, htv); @@ -262,10 +267,18 @@ void MultiTrackValidator::analyze(const edm::Event& event, const edm::EventSetup auto v_r2s = hvassociator->associateRecoToSim(hvertex, htv); auto pvPtr = hvertex->refAt(0); - if(pvPtr->isFake() || pvPtr->ndof() < 0) // skip junk vertices - return; - auto pvFound = v_r2s.find(pvPtr); - if(pvFound == v_r2s.end()) + if(!(pvPtr->isFake() || pvPtr->ndof() < 0)) { // skip junk vertices + auto pvFound = v_r2s.find(pvPtr); + if(pvFound != v_r2s.end()) { + if(doPVAssociationPlots_) { + thePVposition = &(pvPtr->position()); + theSimPVPosition = &(pvFound->val[0].first->position()); + } + } + else if(doPlotsOnlyForTruePV_) + return; + } + else if(doPlotsOnlyForTruePV_) return; } @@ -508,6 +521,8 @@ void MultiTrackValidator::analyze(const edm::Event& event, const edm::EventSetup double dxySim(0); double dzSim(0); + double dxyPVSim = 0; + double dzPVSim = 0; double dR=dR_tPCeff[iTP]; //---------- THIS PART HAS TO BE CLEANED UP. THE PARAMETER DEFINER WAS NOT MEANT TO BE USED IN THIS WAY ---------- @@ -522,6 +537,12 @@ void MultiTrackValidator::analyze(const edm::Event& event, const edm::EventSetup dxySim = (-vertex.x()*sin(momentum.phi())+vertex.y()*cos(momentum.phi())); dzSim = vertex.z() - (vertex.x()*momentum.x()+vertex.y()*momentum.y())/sqrt(momentum.perp2()) * momentum.z()/sqrt(momentum.perp2()); + + if(theSimPVPosition) { + // As in TrackBase::dxy(Point) and dz(Point) + dxyPVSim = -(vertex.x()-theSimPVPosition->x())*sin(momentum.phi()) + (vertex.y()-theSimPVPosition->y())*cos(momentum.phi()); + dzPVSim = vertex.z()-theSimPVPosition->z() - ( (vertex.x()-theSimPVPosition->x()) + (vertex.y()-theSimPVPosition->y()) )/sqrt(momentum.perp2()) * momentum.z()/sqrt(momentum.perp2()); + } } //If the TrackingParticle is comics, get the momentum and vertex at PCA else @@ -531,6 +552,8 @@ void MultiTrackValidator::analyze(const edm::Event& event, const edm::EventSetup dxySim = (-vertexTP.x()*sin(momentumTP.phi())+vertexTP.y()*cos(momentumTP.phi())); dzSim = vertexTP.z() - (vertexTP.x()*momentumTP.x()+vertexTP.y()*momentumTP.y())/sqrt(momentumTP.perp2()) * momentumTP.z()/sqrt(momentumTP.perp2()); + + // Do dxy and dz vs. PV make any sense for cosmics? I guess not } //---------- THE PART ABOVE HAS TO BE CLEANED UP. THE PARAMETER DEFINER WAS NOT MEANT TO BE USED IN THIS WAY ---------- @@ -578,7 +601,7 @@ void MultiTrackValidator::analyze(const edm::Event& event, const edm::EventSetup int nSimLayers = nLayers_tPCeff[tpr]; int nSimPixelLayers = nPixelLayers_tPCeff[tpr]; int nSimStripMonoAndStereoLayers = nStripMonoAndStereoLayers_tPCeff[tpr]; - histoProducerAlgo_->fill_recoAssociated_simTrack_histos(w,tp,momentumTP,vertexTP,dxySim,dzSim,nSimHits,nSimLayers,nSimPixelLayers,nSimStripMonoAndStereoLayers,matchedTrackPointer,puinfo.getPU_NumInteractions(), dR); + histoProducerAlgo_->fill_recoAssociated_simTrack_histos(w,tp,momentumTP,vertexTP,dxySim,dzSim,dxyPVSim,dzPVSim,nSimHits,nSimLayers,nSimPixelLayers,nSimStripMonoAndStereoLayers,matchedTrackPointer,puinfo.getPU_NumInteractions(), dR, thePVposition); sts++; if(matchedTrackPointer) asts++; @@ -677,7 +700,7 @@ void MultiTrackValidator::analyze(const edm::Event& event, const edm::EventSetup } double dR=dR_trk[i]; - histoProducerAlgo_->fill_generic_recoTrack_histos(w,*track,bs.position(),isSimMatched,isSigSimMatched, isChargeMatched, numAssocRecoTracks, puinfo.getPU_NumInteractions(), nSimHits, sharedFraction,dR); + histoProducerAlgo_->fill_generic_recoTrack_histos(w,*track,bs.position(), thePVposition, isSimMatched,isSigSimMatched, isChargeMatched, numAssocRecoTracks, puinfo.getPU_NumInteractions(), nSimHits, sharedFraction, dR); h_reco_coll[ww]->Fill(www); if(isSimMatched) { h_assoc2_coll[ww]->Fill(www); diff --git a/Validation/RecoTrack/plugins/MultiTrackValidatorGenPs.cc b/Validation/RecoTrack/plugins/MultiTrackValidatorGenPs.cc index 172637bd62a77..82a19d208afaa 100644 --- a/Validation/RecoTrack/plugins/MultiTrackValidatorGenPs.cc +++ b/Validation/RecoTrack/plugins/MultiTrackValidatorGenPs.cc @@ -345,7 +345,7 @@ void MultiTrackValidatorGenPs::analyze(const edm::Event& event, const edm::Event double dR=0;//fixme: plots vs dR not implemented for now - histoProducerAlgo_->fill_generic_recoTrack_histos(w,*track,bs.position(),isGenMatched,isSigGenMatched, isChargeMatched, numAssocRecoTracks, puinfo.getPU_NumInteractions(), nSimHits, sharedFraction,dR); + histoProducerAlgo_->fill_generic_recoTrack_histos(w,*track,bs.position(), nullptr, isGenMatched,isSigGenMatched, isChargeMatched, numAssocRecoTracks, puinfo.getPU_NumInteractions(), nSimHits, sharedFraction,dR); // dE/dx if (dodEdxPlots_) histoProducerAlgo_->fill_dedx_recoTrack_histos(w,track, v_dEdx); diff --git a/Validation/RecoTrack/plugins/TrackerSeedValidator.cc b/Validation/RecoTrack/plugins/TrackerSeedValidator.cc index a8c48f299dfb8..6f077ee6dd983 100644 --- a/Validation/RecoTrack/plugins/TrackerSeedValidator.cc +++ b/Validation/RecoTrack/plugins/TrackerSeedValidator.cc @@ -277,8 +277,8 @@ void TrackerSeedValidator::analyze(const edm::Event& event, const edm::EventSetu } double dR=0;//fixme: plots vs dR not implemented for now - histoProducerAlgo_->fill_recoAssociated_simTrack_histos(w,*tp,tp->momentum(),tp->vertex(),dxySim,dzSim,nSimHits,nSimLayers,nSimPixelLayers,nSimStripMonoAndStereoLayers, - matchedTrackPointer,puinfo.getPU_NumInteractions(),dR); + histoProducerAlgo_->fill_recoAssociated_simTrack_histos(w,*tp,tp->momentum(),tp->vertex(),dxySim,dzSim,0,0,nSimHits,nSimLayers,nSimPixelLayers,nSimStripMonoAndStereoLayers, + matchedTrackPointer,puinfo.getPU_NumInteractions(),dR, nullptr); sts++; if (matchedTrackPointer) asts++; @@ -363,7 +363,7 @@ void TrackerSeedValidator::analyze(const edm::Event& event, const edm::EventSetu } double dR = 0.;//fixme: plots vs dR not implemented for now - histoProducerAlgo_->fill_generic_recoTrack_histos(w,*trackFromSeed,bs.position(),isSimMatched,isSigSimMatched, + histoProducerAlgo_->fill_generic_recoTrack_histos(w,*trackFromSeed,bs.position(), nullptr, isSimMatched,isSigSimMatched, isChargeMatched, numAssocSeeds, puinfo.getPU_NumInteractions(), nSimHits, sharedFraction, dR); diff --git a/Validation/RecoTrack/python/MTVHistoProducerAlgoForTrackerBlock_cfi.py b/Validation/RecoTrack/python/MTVHistoProducerAlgoForTrackerBlock_cfi.py index df0b950e477ab..484c5238e0657 100644 --- a/Validation/RecoTrack/python/MTVHistoProducerAlgoForTrackerBlock_cfi.py +++ b/Validation/RecoTrack/python/MTVHistoProducerAlgoForTrackerBlock_cfi.py @@ -114,4 +114,10 @@ dzRes_rangeMax = cms.double(+0.05), dzRes_nbin = cms.int32(150), + + maxDzpvCumulative = cms.double(0.6), + nintDzpvCumulative = cms.int32(240), + + maxDzpvsigCumulative = cms.double(10), + nintDzpvsigCumulative = cms.int32(200), ) diff --git a/Validation/RecoTrack/python/MultiTrackValidator_cfi.py b/Validation/RecoTrack/python/MultiTrackValidator_cfi.py index 74216eec5f75d..fe79526840f42 100644 --- a/Validation/RecoTrack/python/MultiTrackValidator_cfi.py +++ b/Validation/RecoTrack/python/MultiTrackValidator_cfi.py @@ -78,4 +78,5 @@ doSimTrackPlots = cms.untracked.bool(True), doRecoTrackPlots = cms.untracked.bool(True), dodEdxPlots = cms.untracked.bool(False), + doPVAssociationPlots = cms.untracked.bool(False), # do plots that require true PV, if True, label_vertex and vertexAssociator are read ) diff --git a/Validation/RecoTrack/python/PostProcessorTracker_cfi.py b/Validation/RecoTrack/python/PostProcessorTracker_cfi.py index 4911f62471636..a623916094a99 100644 --- a/Validation/RecoTrack/python/PostProcessorTracker_cfi.py +++ b/Validation/RecoTrack/python/PostProcessorTracker_cfi.py @@ -13,6 +13,8 @@ "effic_vs_phi 'Efficiency vs #phi' num_assoc(simToReco)_phi num_simul_phi", "effic_vs_dxy 'Efficiency vs Dxy' num_assoc(simToReco)_dxy num_simul_dxy", "effic_vs_dz 'Efficiency vs Dz' num_assoc(simToReco)_dz num_simul_dz", + "effic_vs_dxypv 'Efficiency vs Dxy(PV)' num_assoc(simToReco)_dxypv num_simul_dxypv", + "effic_vs_dzpv 'Efficiency vs Dz(PV)' num_assoc(simToReco)_dzpv num_simul_dzpv", "duplicatesRate 'Duplicates Rate vs #eta' num_duplicate_eta num_reco_eta", "duplicatesRate_Pt 'Duplicates Rate vs p_{T}' num_duplicate_pT num_reco_pT", "duplicatesRate_hit 'Duplicates Rate vs hit' num_duplicate_hit num_reco_hit", @@ -23,6 +25,8 @@ "duplicatesRate_phi 'Duplicates Rate vs #phi' num_duplicate_phi num_reco_phi", "duplicatesRate_dxy 'Duplicates Rate vs Dxy' num_duplicate_dxy num_reco_dxy", "duplicatesRate_dz 'Duplicates Rate vs Dz' num_duplicate_dz num_reco_dz", + "duplicatesRate_dxypv 'Duplicates Rate vs Dxy(PV)' num_duplicate_dxypv num_reco_dxypv", + "duplicatesRate_dzpv 'Duplicates Rate vs Dz(PV)' num_duplicate_dzpv num_reco_dzpv", "duplicatesRate_chi2 'Duplicates Rate vs normalized #chi^{2}' num_duplicate_chi2 num_reco_chi2", "chargeMisIdRate 'Charge MisID Rate vs #eta' num_chargemisid_eta num_reco_eta", "chargeMisIdRate_Pt 'Charge MisID Rate vs p_{T}' num_chargemisid_pT num_reco_pT", @@ -34,6 +38,8 @@ "chargeMisIdRate_phi 'Charge MisID Rate vs #phi' num_chargemisid_phi num_reco_phi", "chargeMisIdRate_dxy 'Charge MisID Rate vs Dxy' num_chargemisid_dxy num_reco_dxy", "chargeMisIdRate_dz 'Charge MisID Rate vs Dz' num_chargemisid_versus_dz num_reco_dz", + "chargeMisIdRate_dxypv 'Charge MisID Rate vs Dxy(PV)' num_chargemisid_dxypv num_reco_dxypv", + "chargeMisIdRate_dzpv 'Charge MisID Rate vs Dz(PV)' num_chargemisid_versus_dzpv num_reco_dzpv", "chargeMisIdRate_chi2 'Charge MisID Rate vs normalized #chi^{2}' num_chargemisid_chi2 num_reco_chi2", "effic_vs_vertpos 'Efficiency vs vertpos' num_assoc(simToReco)_vertpos num_simul_vertpos", "effic_vs_zpos 'Efficiency vs zpos' num_assoc(simToReco)_zpos num_simul_zpos", @@ -54,6 +60,8 @@ "pileuprate_phi 'Pileup rate vs #phi' num_pileup_phi num_reco_phi", "pileuprate_dxy 'Pileup rate vs dxy' num_pileup_dxy num_reco_dxy", "pileuprate_dz 'Pileup rate vs dz' num_pileup_dz num_reco_dz", + "pileuprate_dxypv 'Pileup rate vs dxy(PV)' num_pileup_dxypv num_reco_dxypv", + "pileuprate_dzpv 'Pileup rate vs dz(PV)' num_pileup_dzpv num_reco_dzpv", "pileuprate_dr 'Pileup rate vs dr' num_pileup_dr num_reco_dr", "pileuprate_chi2 'Pileup rate vs normalized #chi^{2}' num_pileup_chi2 num_reco_chi2", "fakerate 'Fake rate vs #eta' num_assoc(recoToSim)_eta num_reco_eta fake", @@ -66,6 +74,8 @@ "fakerate_vs_phi 'Fake rate vs phi' num_assoc(recoToSim)_phi num_reco_phi fake", "fakerate_vs_dxy 'Fake rate vs dxy' num_assoc(recoToSim)_dxy num_reco_dxy fake", "fakerate_vs_dz 'Fake rate vs dz' num_assoc(recoToSim)_dz num_reco_dz fake", + "fakerate_vs_dxypv 'Fake rate vs dxypv' num_assoc(recoToSim)_dxypv num_reco_dxypv fake", + "fakerate_vs_dzpv 'Fake rate vs dzpv' num_assoc(recoToSim)_dzpv num_reco_dzpv fake", "fakerate_vs_dr 'Fake rate vs dr' num_assoc(recoToSim)_dr num_reco_dr fake", "fakerate_vs_chi2 'Fake rate vs normalized #chi^{2}' num_assoc(recoToSim)_chi2 num_reco_chi2 fake", "fakerate_vertcount_barrel 'fake rate in barrel vs N of pileup vertices' num_assoc(recoToSim)_vertcount_barrel num_reco_vertcount_barrel fake", @@ -74,7 +84,27 @@ "fakerate_ootpu_entire 'fake rate from out of time pileup vs N of pileup vertices' num_assoc(recoToSim)_ootpu_entire num_reco_ootpu_entire", "fakerate_ootpu_barrel 'fake rate from out of time pileup in barrel vs N of pileup vertices' num_assoc(recoToSim)_ootpu_barrel num_reco_ootpu_barrel", "fakerate_ootpu_fwdpos 'fake rate from out of time pileup in endcap(+) vs N of pileup vertices' num_assoc(recoToSim)_ootpu_fwdpos num_reco_ootpu_fwdpos", - "fakerate_ootpu_fwdneg 'fake rate from out of time pileup in endcap(-) vs N of pileup vertices' num_assoc(recoToSim)_ootpu_fwdneg num_reco_ootpu_fwdneg" + "fakerate_ootpu_fwdneg 'fake rate from out of time pileup in endcap(-) vs N of pileup vertices' num_assoc(recoToSim)_ootpu_fwdneg num_reco_ootpu_fwdneg", + + "effic_vs_dzpvcut 'Efficiency vs. dz (PV)' num_assoc(simToReco)_dzpvcut num_simul_dzpvcut", + "effic_vs_dzpvcut2 'Efficiency (tracking eff factorized out) vs. dz (PV)' num_assoc(simToReco)_dzpvcut num_simul2_dzpvcut", + "fakerate_vs_dzpvcut 'Fake rate vs. dz(PV)' num_assoc(recoToSim)_dzpvcut num_reco_dzpvcut fake", + "pileuprate_dzpvcut 'Pileup rate vs. dz(PV)' num_pileup_dzpvcut num_reco_dzpvcut", + + "effic_vs_dzpvcut_pt 'Fraction of true p_{T} carried by recoed TPs from PV vs. dz(PV)' num_assoc(simToReco)_dzpvcut_pt num_simul_dzpvcut_pt", + "effic_vs_dzpvcut2_pt 'Fraction of true p_{T} carried by recoed TPs from PV (tracking eff factorized out) vs. dz(PV)' num_assoc(simToReco)_dzpvcut_pt num_simul2_dzpvcut_pt", + "fakerate_vs_dzpvcut_pt 'Fraction of fake p_{T} carried by tracks from PV vs. dz(PV)' num_assoc(recoToSim)_dzpvcut_pt num_reco_dzpvcut_pt fake", + "pileuprate_dzpvcut_pt 'Fraction of pileup p_{T} carried by tracks from PV vs. dz(PV)' num_pileup_dzpvcut_pt num_reco_dzpvcut_pt", + + "effic_vs_dzpvsigcut 'Efficiency vs. dz(PV)/dzError' num_assoc(simToReco)_dzpvsigcut num_simul_dzpvsigcut", + "effic_vs_dzpvsigcut2 'Efficiency (tracking eff factorized out) vs. dz(PV)/dzError' num_assoc(simToReco)_dzpvsigcut num_simul2_dzpvsigcut", + "fakerate_vs_dzpvsigcut 'Fake rate vs. dz(PV)/dzError' num_assoc(recoToSim)_dzpvsigcut num_reco_dzpvsigcut fake", + "pileuprate_dzpvsigcut 'Pileup rate vs. dz(PV)/dzError' num_pileup_dzpvsigcut num_reco_dzpvsigcut", + + "effic_vs_dzpvsigcut_pt 'Fraction of true p_{T} carried by recoed TPs from PV vs. dz(PV)/dzError' num_assoc(simToReco)_dzpvsigcut_pt num_simul_dzpvsigcut_pt", + "effic_vs_dzpvsigcut2_pt 'Fraction of true p_{T} carried by recoed TPs from PV (tracking eff factorized out) vs. dz(PV)/dzError' num_assoc(simToReco)_dzpvsigcut_pt num_simul2_dzpvsigcut_pt", + "fakerate_vs_dzpvsigcut_pt 'Fraction of fake p_{T} carried by tracks from PV vs. dz(PV)/dzError' num_assoc(recoToSim)_dzpvsigcut_pt num_reco_dzpvsigcut_pt fake", + "pileuprate_dzpvsigcut_pt 'Fraction of pileup p_{T} carried by tracks from PV vs. dz(PV)/dzError' num_pileup_dzpvsigcut_pt num_reco_dzpvsigcut_pt", ), resolution = cms.vstring( "cotThetares_vs_eta '#sigma(cot(#theta)) vs #eta' cotThetares_vs_eta", @@ -99,6 +129,32 @@ "h_thetapulleta '#theta Pull vs #eta' thetapull_vs_eta", "h_thetapullphi '#theta Pull vs #phi' thetapull_vs_phi" ), + cumulativeDists = cms.untracked.vstring( + "num_reco_dzpvcut", + "num_assoc(recoToSim)_dzpvcut", + "num_assoc(simToReco)_dzpvcut", + "num_simul_dzpvcut", + "num_simul2_dzpvcut", + "num_pileup_dzpvcut", + "num_reco_dzpvcut_pt", + "num_assoc(recoToSim)_dzpvcut_pt", + "num_assoc(simToReco)_dzpvcut_pt", + "num_simul_dzpvcut_pt", + "num_simul2_dzpvcut_pt", + "num_pileup_dzpvcut_pt", + "num_reco_dzpvsigcut", + "num_assoc(recoToSim)_dzpvsigcut", + "num_assoc(simToReco)_dzpvsigcut", + "num_simul_dzpvsigcut", + "num_simul2_dzpvsigcut", + "num_pileup_dzpvsigcut", + "num_reco_dzpvsigcut_pt", + "num_assoc(recoToSim)_dzpvsigcut_pt", + "num_assoc(simToReco)_dzpvsigcut_pt", + "num_simul_dzpvsigcut_pt", + "num_simul2_dzpvsigcut_pt", + "num_pileup_dzpvsigcut_pt", + ), outputFileName = cms.untracked.string("") ) diff --git a/Validation/RecoTrack/python/TrackValidation_cff.py b/Validation/RecoTrack/python/TrackValidation_cff.py index 0a50322c3bec0..2d1c49639f991 100644 --- a/Validation/RecoTrack/python/TrackValidation_cff.py +++ b/Validation/RecoTrack/python/TrackValidation_cff.py @@ -154,6 +154,7 @@ ) trackValidator.useLogPt=cms.untracked.bool(True) trackValidator.dodEdxPlots = True +trackValidator.doPVAssociationPlots = True #trackValidator.minpT = cms.double(-1) #trackValidator.maxpT = cms.double(3) #trackValidator.nintpT = cms.int32(40) @@ -170,7 +171,8 @@ label_tp_fake = "trackingParticlesSignal", associators = ["trackingParticleRecoTrackAsssociationSignal"], trackCollectionForDrCalculation = "generalTracksFromPV", - doPlotsOnlyForTruePV = True + doPlotsOnlyForTruePV = True, + doPVAssociationPlots = False, ) trackValidatorFromPVStandalone = trackValidatorFromPV.clone() trackValidatorFromPVStandalone.label.extend([ @@ -219,6 +221,7 @@ ], doSimPlots = False, doRecoTrackPlots = False, # Fake rate of all tracks vs. all TPs is already included in trackValidator + doPVAssociationPlots = False, ) trackValidatorAllTPEffic.histoProducerAlgoBlock.generalTpSelector.signalOnly = False trackValidatorAllTPEffic.histoProducerAlgoBlock.TpSelectorForEfficiencyVsEta.signalOnly = False diff --git a/Validation/RecoTrack/python/TrackValidation_fastsim_cff.py b/Validation/RecoTrack/python/TrackValidation_fastsim_cff.py index 1a21cb3c5625b..927acc2b9f177 100644 --- a/Validation/RecoTrack/python/TrackValidation_fastsim_cff.py +++ b/Validation/RecoTrack/python/TrackValidation_fastsim_cff.py @@ -8,6 +8,7 @@ #TrackAssociatorByHitsRecoDenom.ROUList = ['famosSimHitsTrackerHits'] trackValidator.useLogPt=cms.untracked.bool(True) trackValidator.dodEdxPlots = False +trackValidator.doPVAssociationPlots = False trackValidator.sim = [cms.InputTag('famosSimHits','TrackerHits')] trackValidator.stableOnlyTP = True diff --git a/Validation/RecoTrack/src/MTVHistoProducerAlgoForTracker.cc b/Validation/RecoTrack/src/MTVHistoProducerAlgoForTracker.cc index 08e603e71b26f..63d61333859e1 100644 --- a/Validation/RecoTrack/src/MTVHistoProducerAlgoForTracker.cc +++ b/Validation/RecoTrack/src/MTVHistoProducerAlgoForTracker.cc @@ -117,6 +117,12 @@ MTVHistoProducerAlgoForTracker::MTVHistoProducerAlgoForTracker(const edm::Parame dzRes_nbin = pset.getParameter("dzRes_nbin"); + maxDzpvCum = pset.getParameter("maxDzpvCumulative"); + nintDzpvCum = pset.getParameter("nintDzpvCumulative"); + + maxDzpvsigCum = pset.getParameter("maxDzpvsigCumulative"); + nintDzpvsigCum = pset.getParameter("nintDzpvsigCumulative"); + //--- tracking particle selectors for efficiency measurements using namespace edm; @@ -251,6 +257,36 @@ void MTVHistoProducerAlgoForTracker::bookSimTrackHistos(DQMStore::IBooker& ibook } } +void MTVHistoProducerAlgoForTracker::bookSimTrackPVAssociationHistos(DQMStore::IBooker& ibook) { + h_assocdxypv.push_back( ibook.book1D("num_assoc(simToReco)_dxypv","N of associated tracks (simToReco) vs dxy(PV)",nintDxy,minDxy,maxDxy) ); + h_simuldxypv.push_back( ibook.book1D("num_simul_dxypv","N of simulated tracks vs dxy(PV)",nintDxy,minDxy,maxDxy) ); + + h_assocdzpv.push_back( ibook.book1D("num_assoc(simToReco)_dzpv","N of associated tracks (simToReco) vs dz(PV)",nintDz,minDz,maxDz) ); + h_simuldzpv.push_back( ibook.book1D("num_simul_dzpv","N of simulated tracks vs dz(PV)",nintDz,minDz,maxDz) ); + + h_assoc_dzpvcut.push_back( ibook.book1D("num_assoc(simToReco)_dzpvcut","N of associated tracks (simToReco) vs dz(PV)",nintDzpvCum,0,maxDzpvCum) ); + h_simul_dzpvcut.push_back( ibook.book1D("num_simul_dzpvcut","N of simulated tracks from sim PV",nintDzpvCum,0,maxDzpvCum) ); + h_simul2_dzpvcut.push_back( ibook.book1D("num_simul2_dzpvcut","N of simulated tracks (associated to any track) from sim PV",nintDzpvCum,0,maxDzpvCum) ); + + h_assoc_dzpvcut_pt.push_back( ibook.book1D("num_assoc(simToReco)_dzpvcut_pt","#sump_{T} of associated tracks (simToReco) vs dz(PV)",nintDzpvCum,0,maxDzpvCum) ); + h_simul_dzpvcut_pt.push_back( ibook.book1D("num_simul_dzpvcut_pt","#sump_{T} of simulated tracks from sim PV",nintDzpvCum,0,maxDzpvCum) ); + h_simul2_dzpvcut_pt.push_back( ibook.book1D("num_simul2_dzpvcut_pt","#sump_{T} of simulated tracks (associated to any track) from sim PV",nintDzpvCum,0,maxDzpvCum) ); + h_assoc_dzpvcut_pt.back()->getTH1()->Sumw2(); + h_simul_dzpvcut_pt.back()->getTH1()->Sumw2(); + h_simul2_dzpvcut_pt.back()->getTH1()->Sumw2(); + + h_assoc_dzpvsigcut.push_back( ibook.book1D("num_assoc(simToReco)_dzpvsigcut","N of associated tracks (simToReco) vs dz(PV)/dzError",nintDzpvsigCum,0,maxDzpvsigCum) ); + h_simul_dzpvsigcut.push_back( ibook.book1D("num_simul_dzpvsigcut","N of simulated tracks from sim PV/dzError",nintDzpvsigCum,0,maxDzpvsigCum) ); + h_simul2_dzpvsigcut.push_back( ibook.book1D("num_simul2_dzpvsigcut","N of simulated tracks (associated to any track) from sim PV/dzError",nintDzpvsigCum,0,maxDzpvsigCum) ); + + h_assoc_dzpvsigcut_pt.push_back( ibook.book1D("num_assoc(simToReco)_dzpvsigcut_pt","#sump_{T} of associated tracks (simToReco) vs dz(PV)/dzError",nintDzpvsigCum,0,maxDzpvsigCum) ); + h_simul_dzpvsigcut_pt.push_back( ibook.book1D("num_simul_dzpvsigcut_pt","#sump_{T} of simulated tracks from sim PV/dzError",nintDzpvsigCum,0,maxDzpvsigCum) ); + h_simul2_dzpvsigcut_pt.push_back( ibook.book1D("num_simul2_dzpvsigcut_pt","#sump_{T} of simulated tracks (associated to any track) from sim PV/dzError",nintDzpvsigCum,0,maxDzpvsigCum) ); + h_assoc_dzpvsigcut_pt.back()->getTH1()->Sumw2(); + h_simul_dzpvsigcut_pt.back()->getTH1()->Sumw2(); + h_simul2_dzpvsigcut_pt.back()->getTH1()->Sumw2(); +} + void MTVHistoProducerAlgoForTracker::bookRecoHistos(DQMStore::IBooker& ibook){ h_tracks.push_back( ibook.book1D("tracks","number of reconstructed tracks", nintTracks, minTracks, maxTracks) ); h_fakes.push_back( ibook.book1D("fakes","number of fake reco tracks", nintTracks, minTracks, maxTracks) ); @@ -478,6 +514,43 @@ void MTVHistoProducerAlgoForTracker::bookRecoHistos(DQMStore::IBooker& ibook){ } } +void MTVHistoProducerAlgoForTracker::bookRecoPVAssociationHistos(DQMStore::IBooker& ibook){ + h_recodxypv.push_back( ibook.book1D("num_reco_dxypv","N of reco track vs dxy(PV)",nintDxy,minDxy,maxDxy) ); + h_assoc2dxypv.push_back( ibook.book1D("num_assoc(recoToSim)_dxypv","N of associated (recoToSim) tracks vs dxy(PV)",nintDxy,minDxy,maxDxy) ); + h_looperdxypv.push_back( ibook.book1D("num_duplicate_dxypv","N of associated (recoToSim) looper tracks vs dxy(PV)",nintDxy,minDxy,maxDxy) ); + h_misiddxypv.push_back( ibook.book1D("num_chargemisid_dxypv","N of associated (recoToSim) charge misIDed tracks vs dxy(PV)",nintDxy,minDxy,maxDxy) ); + h_pileupdxypv.push_back( ibook.book1D("num_pileup_dxypv","N of associated (recoToSim) pileup tracks vs dxy(PV)",nintDxy,minDxy,maxDxy) ); + + h_recodzpv.push_back( ibook.book1D("num_reco_dzpv","N of reco track vs dz(PV)",nintDz,minDz,maxDz) ); + h_assoc2dzpv.push_back( ibook.book1D("num_assoc(recoToSim)_dzpv","N of associated (recoToSim) tracks vs dz(PV)",nintDz,minDz,maxDz) ); + h_looperdzpv.push_back( ibook.book1D("num_duplicate_dzpv","N of associated (recoToSim) looper tracks vs dz(PV)",nintDz,minDz,maxDz) ); + h_misiddzpv.push_back( ibook.book1D("num_chargemisid_versus_dzpv","N of associated (recoToSim) charge misIDed tracks vs dz(PV)",nintDz,minDz,maxDz) ); + h_pileupdzpv.push_back( ibook.book1D("num_pileup_dzpv","N of associated (recoToSim) pileup tracks vs dz(PV)",nintDz,minDz,maxDz) ); + + h_reco_dzpvcut.push_back( ibook.book1D("num_reco_dzpvcut","N of reco track vs dz(PV)",nintDzpvCum,0,maxDzpvCum) ); + h_assoc2_dzpvcut.push_back( ibook.book1D("num_assoc(recoToSim)_dzpvcut","N of associated (recoToSim) tracks vs dz(PV)",nintDzpvCum,0,maxDzpvCum) ); + h_pileup_dzpvcut.push_back( ibook.book1D("num_pileup_dzpvcut", "N of associated (recoToSim) pileup tracks vs dz(PV)",nintDzpvCum,0,maxDzpvCum) ); + + h_reco_dzpvcut_pt.push_back( ibook.book1D("num_reco_dzpvcut_pt","#sump_{T} of reco track vs dz(PV)",nintDzpvCum,0,maxDzpvCum) ); + h_assoc2_dzpvcut_pt.push_back( ibook.book1D("num_assoc(recoToSim)_dzpvcut_pt","#sump_{T} of associated (recoToSim) tracks vs dz(PV)",nintDzpvCum,0,maxDzpvCum) ); + h_pileup_dzpvcut_pt.push_back( ibook.book1D("num_pileup_dzpvcut_pt", "#sump_{T} of associated (recoToSim) pileup tracks vs dz(PV)",nintDzpvCum,0,maxDzpvCum) ); + h_reco_dzpvcut_pt.back()->getTH1()->Sumw2(); + h_assoc2_dzpvcut_pt.back()->getTH1()->Sumw2(); + h_pileup_dzpvcut_pt.back()->getTH1()->Sumw2(); + + h_reco_dzpvsigcut.push_back( ibook.book1D("num_reco_dzpvsigcut","N of reco track vs dz(PV)/dzError",nintDzpvsigCum,0,maxDzpvsigCum) ); + h_assoc2_dzpvsigcut.push_back( ibook.book1D("num_assoc(recoToSim)_dzpvsigcut","N of associated (recoToSim) tracks vs dz(PV)/dzError",nintDzpvsigCum,0,maxDzpvsigCum) ); + h_pileup_dzpvsigcut.push_back( ibook.book1D("num_pileup_dzpvsigcut","N of associated (recoToSim) pileup tracks vs dz(PV)/dzError",nintDzpvsigCum,0,maxDzpvsigCum) ); + + h_reco_dzpvsigcut_pt.push_back( ibook.book1D("num_reco_dzpvsigcut_pt","#sump_{T} of reco track vs dz(PV)/dzError",nintDzpvsigCum,0,maxDzpvsigCum) ); + h_assoc2_dzpvsigcut_pt.push_back( ibook.book1D("num_assoc(recoToSim)_dzpvsigcut_pt","#sump_{T} of associated (recoToSim) tracks vs dz(PV)/dzError",nintDzpvsigCum,0,maxDzpvsigCum) ); + h_pileup_dzpvsigcut_pt.push_back( ibook.book1D("num_pileup_dzpvsigcut_pt","#sump_{T} of associated (recoToSim) pileup tracks vs dz(PV)/dzError",nintDzpvsigCum,0,maxDzpvsigCum) ); + h_reco_dzpvsigcut_pt.back()->getTH1()->Sumw2(); + h_assoc2_dzpvsigcut_pt.back()->getTH1()->Sumw2(); + h_pileup_dzpvsigcut_pt.back()->getTH1()->Sumw2(); + +} + void MTVHistoProducerAlgoForTracker::bookRecodEdxHistos(DQMStore::IBooker& ibook) { // dE/dx stuff h_dedx_estim.emplace_back(std::initializer_list{ @@ -511,11 +584,14 @@ void MTVHistoProducerAlgoForTracker::fill_recoAssociated_simTrack_histos(int cou const TrackingParticle& tp, const TrackingParticle::Vector& momentumTP, const TrackingParticle::Point& vertexTP, - double dxySim, double dzSim, int nSimHits, + double dxySim, double dzSim, + double dxyPVSim, double dzPVSim, + int nSimHits, int nSimLayers, int nSimPixelLayers, int nSimStripMonoAndStereoLayers, const reco::Track* track, int numVertices, - double dR){ + double dR, + const math::XYZPoint *pvPosition){ bool isMatched = track; auto const nSim3DLayers = nSimPixelLayers + nSimStripMonoAndStereoLayers; @@ -556,6 +632,10 @@ void MTVHistoProducerAlgoForTracker::fill_recoAssociated_simTrack_histos(int cou if((*TpSelectorForEfficiencyVsVTXR)(tp)){ fillPlotNoFlow(h_simuldxy[count],dxySim); if (isMatched) fillPlotNoFlow(h_assocdxy[count],dxySim); + if(pvPosition) { + fillPlotNoFlow(h_simuldxypv[count], dxyPVSim); + if (isMatched) fillPlotNoFlow(h_assocdxypv[count], dxyPVSim); + } fillPlotNoFlow(h_simulvertpos[count],sqrt(vertexTP.perp2())); if (isMatched) fillPlotNoFlow(h_assocvertpos[count],sqrt(vertexTP.perp2())); @@ -568,6 +648,29 @@ void MTVHistoProducerAlgoForTracker::fill_recoAssociated_simTrack_histos(int cou fillPlotNoFlow(h_simulzpos[count],vertexTP.z()); if (isMatched) fillPlotNoFlow(h_assoczpos[count],vertexTP.z()); + + if(pvPosition) { + fillPlotNoFlow(h_simuldzpv[count], dzPVSim); + + h_simul_dzpvcut[count]->Fill(0); + h_simul_dzpvsigcut[count]->Fill(0); + h_simul_dzpvcut_pt[count]->Fill(0, getPt(sqrt(momentumTP.perp2()))); + h_simul_dzpvsigcut_pt[count]->Fill(0, getPt(sqrt(momentumTP.perp2()))); + if(isMatched) { + fillPlotNoFlow(h_assocdzpv[count], dzPVSim); + + h_simul2_dzpvcut[count]->Fill(0); + h_simul2_dzpvsigcut[count]->Fill(0); + h_simul2_dzpvcut_pt[count]->Fill(0, getPt(sqrt(momentumTP.perp2()))); + h_simul2_dzpvsigcut_pt[count]->Fill(0, getPt(sqrt(momentumTP.perp2()))); + const double dzpvcut = std::abs(track->dz(*pvPosition)); + const double dzpvsigcut = dzpvcut / track->dzError(); + h_assoc_dzpvcut[count]->Fill(dzpvcut); + h_assoc_dzpvsigcut[count]->Fill(dzpvsigcut); + h_assoc_dzpvcut_pt[count]->Fill(dzpvcut, getPt(sqrt(momentumTP.perp2()))); + h_assoc_dzpvsigcut_pt[count]->Fill(dzpvsigcut, getPt(sqrt(momentumTP.perp2()))); + } + } } } @@ -591,6 +694,7 @@ void MTVHistoProducerAlgoForTracker::fill_dedx_recoTrack_histos(int count, const void MTVHistoProducerAlgoForTracker::fill_generic_recoTrack_histos(int count, const reco::Track& track, const math::XYZPoint& bsPosition, + const math::XYZPoint *pvPosition, bool isMatched, bool isSigMatched, bool isChargeMatched, @@ -610,6 +714,9 @@ void MTVHistoProducerAlgoForTracker::fill_generic_recoTrack_histos(int count, const auto pt = getPt(sqrt(track.momentum().perp2())); const auto dxy = track.dxy(bsPosition); const auto dz = track.dz(bsPosition); + const auto dxypv = pvPosition ? track.dxy(*pvPosition) : 0.0; + const auto dzpv = pvPosition ? track.dz(*pvPosition) : 0.0; + const auto dzpvsig = pvPosition ? dzpv / track.dzError() : 0.0; const auto nhits = track.found(); const auto nlayers = track.hitPattern().trackerLayersWithMeasurement(); const auto nPixelLayers = track.hitPattern().pixelLayersWithMeasurement(); @@ -629,6 +736,16 @@ void MTVHistoProducerAlgoForTracker::fill_generic_recoTrack_histos(int count, fillPlotNoFlow(h_recopu[count],numVertices); fillPlotNoFlow(h_recochi2[count], chi2); h_recodr[count]->Fill(deltar); + if(pvPosition) { + fillPlotNoFlow(h_recodxypv[count], dxypv); + fillPlotNoFlow(h_recodzpv[count], dzpv); + + h_reco_dzpvcut[count]->Fill(std::abs(dzpv)); + h_reco_dzpvsigcut[count]->Fill(std::abs(dzpvsig)); + h_reco_dzpvcut_pt[count]->Fill(std::abs(dzpv), pt); + h_reco_dzpvsigcut_pt[count]->Fill(std::abs(dzpvsig), pt); + } + if (isMatched) { fillPlotNoFlow(h_assoc2eta[count], eta); fillPlotNoFlow(h_assoc2phi[count], phi); @@ -642,6 +759,15 @@ void MTVHistoProducerAlgoForTracker::fill_generic_recoTrack_histos(int count, fillPlotNoFlow(h_assoc2pu[count],numVertices); fillPlotNoFlow(h_assoc2chi2[count], chi2); h_assoc2dr[count]->Fill(deltar); + if(pvPosition) { + fillPlotNoFlow(h_assoc2dxypv[count], dxypv); + fillPlotNoFlow(h_assoc2dzpv[count], dzpv); + + h_assoc2_dzpvcut[count]->Fill(std::abs(dzpv)); + h_assoc2_dzpvsigcut[count]->Fill(std::abs(dzpvsig)); + h_assoc2_dzpvcut_pt[count]->Fill(std::abs(dzpv), pt); + h_assoc2_dzpvsigcut_pt[count]->Fill(std::abs(dzpvsig), pt); + } nrecHit_vs_nsimHit_rec2sim[count]->Fill( track.numberOfValidHits(),nSimHits); h_assocFraction[count]->Fill( sharedFraction); @@ -659,6 +785,10 @@ void MTVHistoProducerAlgoForTracker::fill_generic_recoTrack_histos(int count, fillPlotNoFlow(h_misid3Dlayer[count], n3DLayers); fillPlotNoFlow(h_misidpu[count], numVertices); fillPlotNoFlow(h_misidchi2[count], chi2); + if(pvPosition) { + fillPlotNoFlow(h_misiddxypv[count], dxypv); + fillPlotNoFlow(h_misiddzpv[count], dzpv); + } } if (numAssocRecoTracks>1) { @@ -673,6 +803,10 @@ void MTVHistoProducerAlgoForTracker::fill_generic_recoTrack_histos(int count, fillPlotNoFlow(h_looper3Dlayer[count], n3DLayers); fillPlotNoFlow(h_looperpu[count], numVertices); fillPlotNoFlow(h_looperchi2[count], chi2); + if(pvPosition) { + fillPlotNoFlow(h_looperdxypv[count], dxypv); + fillPlotNoFlow(h_looperdzpv[count], dzpv); + } } else if(!isSigMatched) { fillPlotNoFlow(h_pileupeta[count], eta); @@ -687,6 +821,15 @@ void MTVHistoProducerAlgoForTracker::fill_generic_recoTrack_histos(int count, fillPlotNoFlow(h_pileuppu[count], numVertices); fillPlotNoFlow(h_pileupchi2[count], chi2); h_pileupdr[count]->Fill(deltar); + if(pvPosition) { + fillPlotNoFlow(h_pileupdxypv[count], dxypv); + fillPlotNoFlow(h_pileupdzpv[count], dzpv); + + h_pileup_dzpvcut[count]->Fill(std::abs(dzpv)); + h_pileup_dzpvsigcut[count]->Fill(std::abs(dzpvsig)); + h_pileup_dzpvcut_pt[count]->Fill(std::abs(dzpv), pt); + h_pileup_dzpvsigcut_pt[count]->Fill(std::abs(dzpvsig), pt); + } } } }