@@ -47,7 +47,7 @@ namespace {
4747class PrimaryVertexResolution : public DQMEDAnalyzer {
4848public:
4949 PrimaryVertexResolution (const edm::ParameterSet& iConfig);
50- ~PrimaryVertexResolution () override ;
50+ ~PrimaryVertexResolution () override = default ;
5151
5252 void bookHistograms (DQMStore::IBooker&, edm::Run const &, edm::EventSetup const &) override ;
5353 void analyze (const edm::Event&, const edm::EventSetup&) override ;
@@ -60,12 +60,15 @@ class PrimaryVertexResolution : public DQMEDAnalyzer {
6060 const reco::BeamSpot& beamspot);
6161
6262 const edm::ESGetToken<TransientTrackBuilder, TransientTrackRecord> ttbToken_;
63- edm::EDGetTokenT<reco::VertexCollection> vertexSrc_;
64- edm::EDGetTokenT<reco::BeamSpot> beamspotSrc_;
65- edm::EDGetTokenT<LumiScalersCollection> lumiScalersSrc_;
66- edm::EDGetTokenT<OnlineLuminosityRecord> metaDataSrc_;
63+
64+ const edm::InputTag vertexInputTag_;
65+ const edm::EDGetTokenT<reco::VertexCollection> vertexSrc_;
66+ const edm::EDGetTokenT<reco::BeamSpot> beamspotSrc_;
67+ const edm::EDGetTokenT<LumiScalersCollection> lumiScalersSrc_;
68+ const edm::EDGetTokenT<OnlineLuminosityRecord> metaDataSrc_;
6769 const bool forceSCAL_;
68- std::string rootFolder_;
70+ const std::string rootFolder_;
71+ bool errorPrinted_;
6972
7073 AdaptiveVertexFitter fitter_;
7174
@@ -327,19 +330,19 @@ class PrimaryVertexResolution : public DQMEDAnalyzer {
327330
328331PrimaryVertexResolution::PrimaryVertexResolution (const edm::ParameterSet& iConfig)
329332 : ttbToken_(esConsumes(edm::ESInputTag(" " , iConfig.getUntrackedParameter<std::string>(" transientTrackBuilder" )))),
330- vertexSrc_(consumes<reco::VertexCollection>(iConfig.getUntrackedParameter<edm::InputTag>(" vertexSrc" ))),
333+ vertexInputTag_(iConfig.getUntrackedParameter<edm::InputTag>(" vertexSrc" )),
334+ vertexSrc_(consumes<reco::VertexCollection>(vertexInputTag_)),
331335 beamspotSrc_(consumes<reco::BeamSpot>(iConfig.getUntrackedParameter<edm::InputTag>(" beamspotSrc" ))),
332336 lumiScalersSrc_(consumes<LumiScalersCollection>(iConfig.getUntrackedParameter<edm::InputTag>(" lumiScalersSrc" ))),
333337 metaDataSrc_(consumes<OnlineLuminosityRecord>(iConfig.getUntrackedParameter<edm::InputTag>(" metaDataSrc" ))),
334338 forceSCAL_(iConfig.getUntrackedParameter<bool >(" forceSCAL" )),
335339 rootFolder_(iConfig.getUntrackedParameter<std::string>(" rootFolder" )),
340+ errorPrinted_(false ),
336341 binningX_(iConfig),
337342 binningY_(iConfig),
338343 hPV_(binningX_, binningY_),
339344 hOtherV_(binningX_, binningY_) {}
340345
341- PrimaryVertexResolution::~PrimaryVertexResolution () {}
342-
343346void PrimaryVertexResolution::fillDescriptions (edm::ConfigurationDescriptions& descriptions) {
344347 edm::ParameterSetDescription desc;
345348 desc.addUntracked <edm::InputTag>(" vertexSrc" , edm::InputTag (" trackingDQMgoodOfflinePrimaryVertices" ));
@@ -399,6 +402,28 @@ void PrimaryVertexResolution::analyze(const edm::Event& iEvent, const edm::Event
399402 if (vertices.empty ())
400403 return ;
401404
405+ // check upfront that refs to track are (likely) to be valid
406+ {
407+ bool ok = true ;
408+ for (const auto & v : vertices) {
409+ if (v.tracksSize () > 0 ) {
410+ const auto & ref = v.trackRefAt (0 );
411+ if (ref.isNull () || !ref.isAvailable ()) {
412+ if (!errorPrinted_)
413+ edm::LogWarning (" PrimaryVertexResolution" )
414+ << " Skipping vertex collection: " << vertexInputTag_
415+ << " since likely the track collection the vertex has refs pointing to is missing (at least the first "
416+ " TrackBaseRef is null or not available)" ;
417+ else
418+ errorPrinted_ = true ;
419+ ok = false ;
420+ }
421+ }
422+ }
423+ if (!ok)
424+ return ;
425+ }
426+
402427 edm::Handle<reco::BeamSpot> hbeamspot = iEvent.getHandle (beamspotSrc_);
403428 const reco::BeamSpot& beamspot = *hbeamspot;
404429
0 commit comments