Skip to content

Commit daf940c

Browse files
authored
Merge pull request #49014 from mmusich/pvresolution_for_HLT
`PrimaryVertexResolution`: add protection against missing track references in input vertex
2 parents 4ddd889 + f88e74b commit daf940c

File tree

1 file changed

+34
-9
lines changed

1 file changed

+34
-9
lines changed

DQM/TrackingMonitor/src/PrimaryVertexResolution.cc

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ namespace {
4747
class PrimaryVertexResolution : public DQMEDAnalyzer {
4848
public:
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

328331
PrimaryVertexResolution::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-
343346
void 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

Comments
 (0)