From 5236a9b0da07b8b2a5e03d977357eb7145519693 Mon Sep 17 00:00:00 2001 From: Vincenzo Innocente Date: Tue, 22 Sep 2015 18:59:00 +0200 Subject: [PATCH 1/6] new histos etaphi and validfraction, move to position etaphi for seeds --- DQM/TrackingMonitor/interface/TrackAnalyzer.h | 3 +++ DQM/TrackingMonitor/src/TrackAnalyzer.cc | 23 +++++++++++++++++++ .../src/TrackBuildingAnalyzer.cc | 12 +++++----- 3 files changed, 32 insertions(+), 6 deletions(-) diff --git a/DQM/TrackingMonitor/interface/TrackAnalyzer.h b/DQM/TrackingMonitor/interface/TrackAnalyzer.h index c7364f4c1cf50..e3d2102da4802 100644 --- a/DQM/TrackingMonitor/interface/TrackAnalyzer.h +++ b/DQM/TrackingMonitor/interface/TrackAnalyzer.h @@ -194,6 +194,7 @@ class TrackAnalyzer MonitorElement* TrackPhi; MonitorElement* TrackEta; + MonitorElement* TrackEtaPhi=nullptr; MonitorElement* TrackTheta; MonitorElement* TrackPhiErr; @@ -273,6 +274,8 @@ class TrackAnalyzer MonitorElement* NumberOfMORecHitsPerTrackVsEta = nullptr; MonitorElement* NumberOfMORecHitVsPhiVsEtaPerTrack = nullptr; + MonitorElement* ValidFractionPerTrack = nullptr; + MonitorElement* ValidFractionVsPhiVsEtaPerTrack = nullptr; MonitorElement* NumberOfLayersPerTrack[4] = {nullptr,nullptr,nullptr,nullptr}; diff --git a/DQM/TrackingMonitor/src/TrackAnalyzer.cc b/DQM/TrackingMonitor/src/TrackAnalyzer.cc index 12becbb442bfb..7b6788c078b08 100644 --- a/DQM/TrackingMonitor/src/TrackAnalyzer.cc +++ b/DQM/TrackingMonitor/src/TrackAnalyzer.cc @@ -313,6 +313,12 @@ void TrackAnalyzer::bookHistosForHitProperties(DQMStore::IBooker & ibooker) { NumberOfMORecHitsPerTrack->setAxisTitle("Number of missing-outer RecHits for each Track"); NumberOfMORecHitsPerTrack->setAxisTitle("Number of Tracks", 2); + histname = "ValidFractionPerTrack_"; + ValidFractionPerTrack = ibooker.book1D(histname+CategoryName, histname+CategoryName, 101, 0., 1.01); + ValidFractionPerTrack->setAxisTitle("ValidFraction of RecHits for each Track"); + ValidFractionPerTrack->setAxisTitle("Number of Tracks", 2); + + if ( doRecHitVsPhiVsEtaPerTrack_ || doAllPlots_ ){ @@ -341,6 +347,12 @@ void TrackAnalyzer::bookHistosForHitProperties(DQMStore::IBooker & ibooker) { NumberOfMORecHitVsPhiVsEtaPerTrack->setAxisTitle("Track #eta ", 1); NumberOfMORecHitVsPhiVsEtaPerTrack->setAxisTitle("Track #phi ", 2); + histname = "ValidFractionVsPhiVsEtaPerTrack_"; + ValidFractionVsPhiVsEtaPerTrack = ibooker.bookProfile2D(histname+CategoryName, histname+CategoryName, + EtaBin, EtaMin, EtaMax, PhiBin, PhiMin, PhiMax, 0, 2., ""); + ValidFractionVsPhiVsEtaPerTrack->setAxisTitle("Track #eta ", 1); + ValidFractionVsPhiVsEtaPerTrack->setAxisTitle("Track #phi ", 2); + } @@ -830,6 +842,8 @@ void TrackAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSe NumberOfLostRecHitsPerTrack -> Fill(nLostRecHits); NumberOfMIRecHitsPerTrack -> Fill(nLostIn); NumberOfMORecHitsPerTrack -> Fill(nLostOut); + ValidFractionPerTrack -> Fill(track.validFraction()); + // 2D plots if ( doRecHitVsPhiVsEtaPerTrack_ || doAllPlots_ ) { @@ -837,6 +851,7 @@ void TrackAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSe NumberOfLostRecHitVsPhiVsEtaPerTrack->Fill(etaIn,phiIn,nLostRecHits); NumberOfMIRecHitVsPhiVsEtaPerTrack->Fill(etaIn,phiIn,nLostIn); NumberOfMORecHitVsPhiVsEtaPerTrack->Fill(etaOut,phiOut,nLostOut); + ValidFractionVsPhiVsEtaPerTrack -> Fill(etaIn,phiIn,track.validFraction()); } int nLayers[4] = { track.hitPattern().trackerLayersWithMeasurement(), @@ -1227,6 +1242,12 @@ void TrackAnalyzer::bookHistosForState(std::string sname, DQMStore::IBooker & ib tkmes.TrackEta->setAxisTitle("Track #eta", 1); tkmes.TrackEta->setAxisTitle("Number of Tracks",2); + histname = "TrackEtaPhi_" + histTag; + tkmes.TrackEtaPhi = ibooker.book2D(histname, histname, EtaBin, EtaMin, EtaMax, PhiBin, PhiMin, PhiMax); + tkmes.TrackEtaPhi->setAxisTitle("Track #eta", 1); + tkmes.TrackEtaPhi->setAxisTitle("Track #phi", 2); + + if (doThetaPlots_) { histname = "TrackTheta_" + histTag; tkmes.TrackTheta = ibooker.book1D(histname, histname, ThetaBin, ThetaMin, ThetaMax); @@ -1439,6 +1460,8 @@ void TrackAnalyzer::fillHistosForState(const edm::EventSetup& iSetup, const reco // angles tkmes.TrackPhi->Fill(phi); tkmes.TrackEta->Fill(eta); + tkmes.TrackEtaPhi->Fill(eta,phi); + if (doThetaPlots_) { tkmes.TrackTheta->Fill(theta); } diff --git a/DQM/TrackingMonitor/src/TrackBuildingAnalyzer.cc b/DQM/TrackingMonitor/src/TrackBuildingAnalyzer.cc index 5420f25775af8..78b217d748c71 100644 --- a/DQM/TrackingMonitor/src/TrackBuildingAnalyzer.cc +++ b/DQM/TrackingMonitor/src/TrackBuildingAnalyzer.cc @@ -296,9 +296,9 @@ void TrackBuildingAnalyzer::analyze GlobalPoint v(v0.x()-bs.x0(),v0.y()-bs.y0(),v0.z()-bs.z0()); double pt = sqrt(state.globalMomentum().perp2()); - double eta = state.globalMomentum().eta(); - double phi = state.globalMomentum().phi(); - double theta = state.globalMomentum().theta(); + double eta = state.globalPosition().eta(); + double phi = state.globalPosition().phi(); + double theta = state.globalPosition().theta(); //double pm = sqrt(state.globalMomentum().mag2()); //double pz = state.globalMomentum().z(); //double qoverp = tsAtClosestApproachSeed.trackStateAtPCA().charge()/p.mag(); @@ -350,9 +350,9 @@ void TrackBuildingAnalyzer::analyze GlobalPoint v(v0.x()-bs.x0(),v0.y()-bs.y0(),v0.z()-bs.z0()); double pt = sqrt(state.globalMomentum().perp2()); - double eta = state.globalMomentum().eta(); - double phi = state.globalMomentum().phi(); - double theta = state.globalMomentum().theta(); + double eta = state.globalPosition().eta(); + double phi = state.globalPosition().phi(); + double theta = state.globalPosition().theta(); //double pm = sqrt(state.globalMomentum().mag2()); //double pz = state.globalMomentum().z(); //double qoverp = tsAtClosestApproachTrackCand.trackStateAtPCA().charge()/p.mag(); From c3d4334c4696c1dd77161e2d025da87c4a8726b9 Mon Sep 17 00:00:00 2001 From: Vincenzo Innocente Date: Wed, 23 Sep 2015 11:34:50 +0200 Subject: [PATCH 2/6] fix candidate eta/phi --- DQM/TrackingMonitor/src/TrackBuildingAnalyzer.cc | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/DQM/TrackingMonitor/src/TrackBuildingAnalyzer.cc b/DQM/TrackingMonitor/src/TrackBuildingAnalyzer.cc index 78b217d748c71..96bc944ee2558 100644 --- a/DQM/TrackingMonitor/src/TrackBuildingAnalyzer.cc +++ b/DQM/TrackingMonitor/src/TrackBuildingAnalyzer.cc @@ -5,6 +5,7 @@ #include "TrackingTools/TransientTrack/interface/TransientTrack.h" #include "TrackingTools/PatternTools/interface/TSCBLBuilderNoMaterial.h" #include "TrackingTools/PatternTools/interface/TSCPBuilderNoMaterial.h" +#include "RecoTracker/TransientTrackingRecHit/interface/TkTransientTrackingRecHitBuilder.h" #include "DataFormats/BeamSpot/interface/BeamSpot.h" #include "MagneticField/Engine/interface/MagneticField.h" @@ -284,8 +285,9 @@ void TrackBuildingAnalyzer::analyze TSCBLBuilderNoMaterial tscblBuilder; //get parameters and errors from the candidate state - TransientTrackingRecHit::RecHitPointer recHit = theTTRHBuilder->build(&*(candidate.recHits().second-1)); - TrajectoryStateOnSurface state = trajectoryStateTransform::transientState( candidate.startingState(), recHit->surface(), theMF.product()); + auto const & theG = ((TkTransientTrackingRecHitBuilder const *)(theTTRHBuilder.product()))->geometry(); + auto const & candSS = candidate.startingState(); + TrajectoryStateOnSurface state = trajectoryStateTransform::transientState( candSS, &(theG->idToDet(candSS.detId())->surface()), theMF.product()); TrajectoryStateClosestToBeamLine tsAtClosestApproachSeed = tscblBuilder(*state.freeState(),bs);//as in TrackProducerAlgorithm if(!(tsAtClosestApproachSeed.isValid())) { edm::LogVerbatim("TrackBuilding") << "TrajectoryStateClosestToBeamLine not valid"; @@ -338,8 +340,9 @@ void TrackBuildingAnalyzer::analyze TSCBLBuilderNoMaterial tscblBuilder; //get parameters and errors from the candidate state - TransientTrackingRecHit::RecHitPointer recHit = theTTRHBuilder->build(&*(candidate.recHits().second-1)); - TrajectoryStateOnSurface state = trajectoryStateTransform::transientState( candidate.trajectoryStateOnDet(), recHit->surface(), theMF.product()); + auto const & theG = ((TkTransientTrackingRecHitBuilder const *)(theTTRHBuilder.product()))->geometry(); + auto const & candSS = candidate.trajectoryStateOnDet(); + TrajectoryStateOnSurface state = trajectoryStateTransform::transientState( candSS, &(theG->idToDet(candSS.detId())->surface()), theMF.product()); TrajectoryStateClosestToBeamLine tsAtClosestApproachTrackCand = tscblBuilder(*state.freeState(),bs);//as in TrackProducerAlgorithm if(!(tsAtClosestApproachTrackCand.isValid())) { edm::LogVerbatim("TrackBuilding") << "TrajectoryStateClosestToBeamLine not valid"; From 8b569c2a997c8a2c22d13e4a3a370810f75e021a Mon Sep 17 00:00:00 2001 From: Vincenzo Innocente Date: Wed, 23 Sep 2015 13:27:19 +0200 Subject: [PATCH 3/6] add track etaphi inner/outer --- DQM/TrackingMonitor/interface/TrackAnalyzer.h | 3 +++ DQM/TrackingMonitor/src/TrackAnalyzer.cc | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/DQM/TrackingMonitor/interface/TrackAnalyzer.h b/DQM/TrackingMonitor/interface/TrackAnalyzer.h index e3d2102da4802..aecec57317b6b 100644 --- a/DQM/TrackingMonitor/interface/TrackAnalyzer.h +++ b/DQM/TrackingMonitor/interface/TrackAnalyzer.h @@ -195,6 +195,9 @@ class TrackAnalyzer MonitorElement* TrackPhi; MonitorElement* TrackEta; MonitorElement* TrackEtaPhi=nullptr; + MonitorElement* TrackEtaPhiInner=nullptr; + MonitorElement* TrackEtaPhiOuter=nullptr; + MonitorElement* TrackTheta; MonitorElement* TrackPhiErr; diff --git a/DQM/TrackingMonitor/src/TrackAnalyzer.cc b/DQM/TrackingMonitor/src/TrackAnalyzer.cc index 7b6788c078b08..b7c732ebd3f4a 100644 --- a/DQM/TrackingMonitor/src/TrackAnalyzer.cc +++ b/DQM/TrackingMonitor/src/TrackAnalyzer.cc @@ -1247,6 +1247,17 @@ void TrackAnalyzer::bookHistosForState(std::string sname, DQMStore::IBooker & ib tkmes.TrackEtaPhi->setAxisTitle("Track #eta", 1); tkmes.TrackEtaPhi->setAxisTitle("Track #phi", 2); + histname = "TrackEtaPhiInner_" + histTag; + tkmes.TrackEtaPhiInner = ibooker.book2D(histname, histname, EtaBin, EtaMin, EtaMax, PhiBin, PhiMin, PhiMax); + tkmes.TrackEtaPhiInner->setAxisTitle("Track #eta", 1); + tkmes.TrackEtaPhiInner->setAxisTitle("Track #phi", 2); + + histname = "TrackEtaPhiOuter_" + histTag; + tkmes.TrackEtaPhiOuter = ibooker.book2D(histname, histname, EtaBin, EtaMin, EtaMax, PhiBin, PhiMin, PhiMax); + tkmes.TrackEtaPhiOuter->setAxisTitle("Track #eta", 1); + tkmes.TrackEtaPhiOuter->setAxisTitle("Track #phi", 2); + + if (doThetaPlots_) { histname = "TrackTheta_" + histTag; @@ -1388,6 +1399,12 @@ void TrackAnalyzer::fillHistosForState(const edm::EventSetup& iSetup, const reco double p, px, py, pz, pt, theta, phi, eta, q; double pxerror, pyerror, pzerror, pterror, perror, phierror, etaerror; + auto phiIn = track.innerPosition().phi(); + auto etaIn = track.innerPosition().eta(); + auto phiOut = track.outerPosition().phi(); + auto etaOut = track.outerPosition().eta(); + + if (sname == "default") { p = track.p(); @@ -1461,6 +1478,8 @@ void TrackAnalyzer::fillHistosForState(const edm::EventSetup& iSetup, const reco tkmes.TrackPhi->Fill(phi); tkmes.TrackEta->Fill(eta); tkmes.TrackEtaPhi->Fill(eta,phi); + tkmes.TrackEtaPhiInner->Fill(etaIn,phiIn); + tkmes.TrackEtaPhiOuter->Fill(etaOut,phiOut); if (doThetaPlots_) { tkmes.TrackTheta->Fill(theta); From 18ca7f7124271da0aeaefe44c31620f4a78a4c66 Mon Sep 17 00:00:00 2001 From: Vincenzo Innocente Date: Thu, 24 Sep 2015 18:40:21 +0200 Subject: [PATCH 4/6] new histo NtinV vs z, enable dca and sip for globalMuon --- .../python/MonitorTrackGLBMuons_cfi.py | 6 ++++++ DQMOffline/RecoB/plugins/PrimaryVertexMonitor.cc | 15 ++++++++++++--- DQMOffline/RecoB/plugins/PrimaryVertexMonitor.h | 1 + .../IterativeTracking/python/TobTecStep_cff.py | 2 +- 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/DQM/TrackingMonitor/python/MonitorTrackGLBMuons_cfi.py b/DQM/TrackingMonitor/python/MonitorTrackGLBMuons_cfi.py index 563c1da48bee9..9a14593b56e5c 100644 --- a/DQM/TrackingMonitor/python/MonitorTrackGLBMuons_cfi.py +++ b/DQM/TrackingMonitor/python/MonitorTrackGLBMuons_cfi.py @@ -13,3 +13,9 @@ MonitorTrackGLBMuons.doGeneralPropertiesPlots = True MonitorTrackGLBMuons.doHitPropertiesPlots = True MonitorTrackGLBMuons.doTrackerSpecific = True +MonitorTrackGLBMuons.doDCAPlots = True +MonitorTrackGLBMuons.doDCAwrtPVPlots = True +MonitorTrackGLBMuons.doDCAwrt000Plots = False +MonitorTrackGLBMuons.doSIPPlots = True +MonitorTrackGLBMuons.doEffFromHitPattern = False + diff --git a/DQMOffline/RecoB/plugins/PrimaryVertexMonitor.cc b/DQMOffline/RecoB/plugins/PrimaryVertexMonitor.cc index ff04d31c3a75b..e63f34a46e3e3 100644 --- a/DQMOffline/RecoB/plugins/PrimaryVertexMonitor.cc +++ b/DQMOffline/RecoB/plugins/PrimaryVertexMonitor.cc @@ -81,14 +81,22 @@ PrimaryVertexMonitor::bookHistograms(DQMStore::IBooker &iBooker, auto vposx = conf_.getParameter("Xpos"); auto vposy = conf_.getParameter("Ypos"); - nbtksinvtx[0] = iBooker.book1D("otherVtxTrksNbr","Reconstructed Tracks in Vertex (other Vtx)",40,-0.5,99.5); + nbtksinvtx[0] = iBooker.book1D("otherVtxTrksNbr","Reconstructed Tracks in Vertex (other Vtx)",40,-0.5,99.5); + ntracksVsZ[0] = iBooker.bookProfile("otherVtxTrksVsZ","Reconstructed Tracks in Vertex (other Vtx) vs Z",80,-20.,20.,50,0,100,""); + ntracksVsZ[0]->setAxisTitle("z-bs",1); + ntracksVsZ[0]->setAxisTitle("#tracks",2); + trksWeight[0] = iBooker.book1D("otherVtxTrksWeight","Total weight of Tracks in Vertex (other Vtx)",40,0,100.); vtxchi2[0] = iBooker.book1D("otherVtxChi2","#chi^{2} (other Vtx)",100,0.,200.); vtxndf[0] = iBooker.book1D("otherVtxNdf","ndof (other Vtx)",100,0.,200.); vtxprob[0] = iBooker.book1D("otherVtxProb","#chi^{2} probability (other Vtx)",100,0.,1.); nans[0] = iBooker.book1D("otherVtxNans","Illegal values for x,y,z,xx,xy,xz,yy,yz,zz (other Vtx)",9,0.5,9.5); - nbtksinvtx[1] = iBooker.book1D("tagVtxTrksNbr","Reconstructed Tracks in Vertex (tagged Vtx)",100,-0.5,99.5); + nbtksinvtx[1] = iBooker.book1D("tagVtxTrksNbr","Reconstructed Tracks in Vertex (tagged Vtx)",100,-0.5,99.5); + ntracksVsZ[1] = iBooker.bookProfile("tagVtxTrksVsZ","Reconstructed Tracks in Vertex (tagged Vtx) vs Z",80,-20.,20.,50,0,100,""); + ntracksVsZ[1]->setAxisTitle("z-bs",1); + ntracksVsZ[1]->setAxisTitle("#tracks",2); + trksWeight[1] = iBooker.book1D("tagVtxTrksWeight","Total weight of Tracks in Vertex (tagged Vtx)",100,0,100.); vtxchi2[1] = iBooker.book1D("tagVtxChi2","#chi^{2} (tagged Vtx)",100,0.,200.); vtxndf[1] = iBooker.book1D("tagVtxNdf","ndof (tagged Vtx)",100,0.,200.); @@ -355,7 +363,8 @@ void PrimaryVertexMonitor::vertexPlots(const Vertex & v, const BeamSpot& beamSpo t!=v.tracks_end(); t++) weight+= v.trackWeight(*t); trksWeight[i]->Fill(weight); nbtksinvtx[i]->Fill(v.tracksSize()); - + ntracksVsZ[i]->Fill(v.position().z()- beamSpot.z0(),v.tracksSize()); + vtxchi2[i]->Fill(v.chi2()); vtxndf[i]->Fill(v.ndof()); vtxprob[i]->Fill(ChiSquaredProbability(v.chi2() ,v.ndof())); diff --git a/DQMOffline/RecoB/plugins/PrimaryVertexMonitor.h b/DQMOffline/RecoB/plugins/PrimaryVertexMonitor.h index 6459a8e9c279f..5ab0e1d83ba7d 100644 --- a/DQMOffline/RecoB/plugins/PrimaryVertexMonitor.h +++ b/DQMOffline/RecoB/plugins/PrimaryVertexMonitor.h @@ -53,6 +53,7 @@ class PrimaryVertexMonitor : public DQMEDAnalyzer { MonitorElement *tt[2]; MonitorElement *xrec[2] , *yrec[2], *zrec[2], *xDiff[2] , *yDiff[2], *xerr[2] , *yerr[2], *zerr[2] ; MonitorElement *xerrVsTrks[2] , *yerrVsTrks[2], *zerrVsTrks[2] ; + MonitorElement * ntracksVsZ[2]; MonitorElement *vtxchi2[2] , *vtxndf[2], *vtxprob[2] , *nans[2]; MonitorElement *type[2]; MonitorElement *bsX, *bsY, *bsZ, *bsSigmaZ, *bsDxdz, *bsDydz, *bsBeamWidthX, *bsBeamWidthY, *bsType; diff --git a/RecoTracker/IterativeTracking/python/TobTecStep_cff.py b/RecoTracker/IterativeTracking/python/TobTecStep_cff.py index 7caa7ae53de79..bda8a2e6a0b5b 100644 --- a/RecoTracker/IterativeTracking/python/TobTecStep_cff.py +++ b/RecoTracker/IterativeTracking/python/TobTecStep_cff.py @@ -21,7 +21,7 @@ tobTecStepSeedLayersTripl = cms.EDProducer("SeedingLayersEDProducer", layerList = cms.vstring( #TOB - 'TOB1+TOB2+MTOB3', + 'TOB1+TOB2+MTOB3','TOB1+TOB2+MTOB4', #TOB+MTEC 'TOB1+TOB2+MTEC1_pos','TOB1+TOB2+MTEC1_neg', ), From 980906f46766dde9c2057f14e497e94b2fed92c7 Mon Sep 17 00:00:00 2001 From: Vincenzo Innocente Date: Thu, 24 Sep 2015 21:14:13 +0200 Subject: [PATCH 5/6] Update TobTecStep_cff.py remove a mod that was not supposed to be committed... --- RecoTracker/IterativeTracking/python/TobTecStep_cff.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RecoTracker/IterativeTracking/python/TobTecStep_cff.py b/RecoTracker/IterativeTracking/python/TobTecStep_cff.py index bda8a2e6a0b5b..7caa7ae53de79 100644 --- a/RecoTracker/IterativeTracking/python/TobTecStep_cff.py +++ b/RecoTracker/IterativeTracking/python/TobTecStep_cff.py @@ -21,7 +21,7 @@ tobTecStepSeedLayersTripl = cms.EDProducer("SeedingLayersEDProducer", layerList = cms.vstring( #TOB - 'TOB1+TOB2+MTOB3','TOB1+TOB2+MTOB4', + 'TOB1+TOB2+MTOB3', #TOB+MTEC 'TOB1+TOB2+MTEC1_pos','TOB1+TOB2+MTEC1_neg', ), From 08b3dafac625be96a63b4a2f44a27dc83c37efcb Mon Sep 17 00:00:00 2001 From: Vincenzo Innocente Date: Sun, 27 Sep 2015 14:50:33 +0200 Subject: [PATCH 6/6] protect against missing collection (as in HI for muons) --- DQM/TrackingMonitor/src/TrackAnalyzer.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DQM/TrackingMonitor/src/TrackAnalyzer.cc b/DQM/TrackingMonitor/src/TrackAnalyzer.cc index b7c732ebd3f4a..b8b3c4c2335cf 100644 --- a/DQM/TrackingMonitor/src/TrackAnalyzer.cc +++ b/DQM/TrackingMonitor/src/TrackAnalyzer.cc @@ -973,7 +973,7 @@ void TrackAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSe if(doDCAPlots_ || doPVPlots_ || doSIPPlots_ || doAllPlots_) { edm::Handle recoPrimaryVerticesHandle; iEvent.getByToken(pvToken_,recoPrimaryVerticesHandle); - if (recoPrimaryVerticesHandle->size() > 0) { + if (recoPrimaryVerticesHandle.isValid() && recoPrimaryVerticesHandle->size() > 0) { const reco::Vertex& pv = (*recoPrimaryVerticesHandle)[0];