Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Introduce changes in order to switch from LumiScalers to MetaData #27677

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions DQM/TrackingMonitor/BuildFile.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
<use name="CommonTools/TriggerUtils"/>
<use name="DataFormats/TrackReco"/>
<use name="DataFormats/Luminosity"/>
<use name="DataFormats/OnlineMetaData"/>
<use name="DataFormats/VertexReco"/>
<use name="DataFormats/PatCandidates"/>
<use name="TrackingTools/TransientTrackingRecHit"/>
Expand Down
2 changes: 2 additions & 0 deletions DQM/TrackingMonitor/interface/TrackAnalyzer.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ Monitoring source for general quantities related to tracks.

#include "DataFormats/SiPixelCluster/interface/SiPixelCluster.h"
#include "DataFormats/Scalers/interface/LumiScalers.h"
#include "DataFormats/OnlineMetaData/interface/OnlineLuminosityRecord.h"

class BeamSpot;
class TrackAnalyzer {
Expand Down Expand Up @@ -80,6 +81,7 @@ class TrackAnalyzer {
edm::EDGetTokenT<reco::VertexCollection> pvToken_;
edm::EDGetTokenT<edmNew::DetSetVector<SiPixelCluster> > pixelClustersToken_;
edm::EDGetTokenT<LumiScalersCollection> lumiscalersToken_;
edm::EDGetTokenT<OnlineLuminosityRecord> metaDataToken_;
float lumi_factor_per_bx_;

edm::ParameterSet const* conf_;
Expand Down
2 changes: 2 additions & 0 deletions DQM/TrackingMonitor/interface/TrackingMonitor.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ Monitoring source for general quantities related to tracks.
#include "DataFormats/SiPixelCluster/interface/SiPixelCluster.h"

#include "DataFormats/Scalers/interface/LumiScalers.h"
#include "DataFormats/OnlineMetaData/interface/OnlineLuminosityRecord.h"

#include "DataFormats/Common/interface/OwnVector.h"
#include "RecoTracker/TkTrackingRegions/interface/TrackingRegion.h"
Expand Down Expand Up @@ -102,6 +103,7 @@ class TrackingMonitor : public one::DQMEDAnalyzer<one::DQMLuminosityBlockElement
edm::EDGetTokenT<reco::CandidateView> regionCandidateToken_;

edm::EDGetTokenT<LumiScalersCollection> lumiscalersToken_;
edm::EDGetTokenT<OnlineLuminosityRecord> metaDataToken_;

edm::InputTag stripClusterInputTag_;
edm::InputTag pixelClusterInputTag_;
Expand Down
2 changes: 2 additions & 0 deletions DQM/TrackingMonitor/interface/V0Monitor.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
#include "DataFormats/VertexReco/interface/VertexFwd.h"

#include "DataFormats/Scalers/interface/LumiScalers.h"
#include "DataFormats/OnlineMetaData/interface/OnlineLuminosityRecord.h"

class GenericTriggerEventFlag;

Expand Down Expand Up @@ -77,6 +78,7 @@ class V0Monitor : public DQMEDAnalyzer {
edm::EDGetTokenT<reco::BeamSpot> bsToken_;
edm::EDGetTokenT<reco::VertexCollection> pvToken_;
edm::EDGetTokenT<LumiScalersCollection> lumiscalersToken_;
edm::EDGetTokenT<OnlineLuminosityRecord> metaDataToken_;

int pvNDOF_;

Expand Down
1 change: 1 addition & 0 deletions DQM/TrackingMonitor/python/TrackingMonitor_cfi.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@
pvNDOF = cms.int32(4),
pixelCluster4lumi = cms.InputTag('siPixelClustersPreSplitting'),
scal = cms.InputTag('scalersRawToDigi'),
metadata = cms.InputTag('onlineMetaDataDigis'),
useBPixLayer1 = cms.bool(False),
minNumberOfPixelsPerCluster = cms.int32(2), # from DQM/PixelLumi/python/PixelLumiDQM_cfi.py
minPixelClusterCharge = cms.double(15000.),
Expand Down
1 change: 1 addition & 0 deletions DQM/TrackingMonitor/python/V0Monitor_cfi.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
beamSpot = cms.InputTag('offlineBeamSpot'),
primaryVertex = cms.InputTag('offlinePrimaryVertices'),
lumiScalers = cms.InputTag('scalersRawToDigi'),
metadata = cms.InputTag('onlineMetaDataDigis'),
pvNDOF = cms.int32(4),
genericTriggerEventPSet = cms.PSet(),
histoPSet = cms.PSet(
Expand Down
37 changes: 27 additions & 10 deletions DQM/TrackingMonitor/src/PrimaryVertexResolution.cc
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#include "DataFormats/VertexReco/interface/VertexFwd.h"
#include "DataFormats/BeamSpot/interface/BeamSpot.h"
#include "DataFormats/Scalers/interface/LumiScalers.h"
#include "DataFormats/OnlineMetaData/interface/OnlineLuminosityRecord.h"

#include "TrackingTools/TransientTrack/interface/TransientTrack.h"
#include "RecoVertex/VertexPrimitives/interface/TransientVertex.h"
Expand Down Expand Up @@ -62,6 +63,7 @@ class PrimaryVertexResolution : public DQMEDAnalyzer {
edm::EDGetTokenT<reco::VertexCollection> vertexSrc_;
edm::EDGetTokenT<reco::BeamSpot> beamspotSrc_;
edm::EDGetTokenT<LumiScalersCollection> lumiScalersSrc_;
edm::EDGetTokenT<OnlineLuminosityRecord> metaDataSrc_;
std::string rootFolder_;
std::string transientTrackBuilder_;

Expand Down Expand Up @@ -288,10 +290,11 @@ class PrimaryVertexResolution : public DQMEDAnalyzer {

void calculateAndFillResolution(const std::vector<reco::TransientTrack>& tracks,
size_t nvertices,
const LumiScalersCollection& lumiScalers,
float lumi,
std::mt19937& engine,
AdaptiveVertexFitter& fitter);


private:
const BinningX& binningX_;
const BinningY& binningY_;
Expand Down Expand Up @@ -327,6 +330,7 @@ PrimaryVertexResolution::PrimaryVertexResolution(const edm::ParameterSet& iConfi
: vertexSrc_(consumes<reco::VertexCollection>(iConfig.getUntrackedParameter<edm::InputTag>("vertexSrc"))),
beamspotSrc_(consumes<reco::BeamSpot>(iConfig.getUntrackedParameter<edm::InputTag>("beamspotSrc"))),
lumiScalersSrc_(consumes<LumiScalersCollection>(iConfig.getUntrackedParameter<edm::InputTag>("lumiScalersSrc"))),
metaDataSrc_(consumes<OnlineLuminosityRecord>(iConfig.getUntrackedParameter<edm::InputTag>("metaDataSrc"))),
rootFolder_(iConfig.getUntrackedParameter<std::string>("rootFolder")),
transientTrackBuilder_(iConfig.getUntrackedParameter<std::string>("transientTrackBuilder")),
binningX_(iConfig),
Expand All @@ -341,6 +345,7 @@ void PrimaryVertexResolution::fillDescriptions(edm::ConfigurationDescriptions& d
desc.addUntracked<edm::InputTag>("vertexSrc", edm::InputTag("trackingDQMgoodOfflinePrimaryVertices"));
desc.addUntracked<edm::InputTag>("beamspotSrc", edm::InputTag("offlineBeamSpot"));
desc.addUntracked<edm::InputTag>("lumiScalersSrc", edm::InputTag("scalersRawToDigi"));
desc.addUntracked<edm::InputTag>("metaDataSrc", edm::InputTag("onlineMetaDataDigis"));
desc.addUntracked<std::string>("rootFolder", "OfflinePV/Resolution");
desc.addUntracked<std::string>("transientTrackBuilder", "TransientTrackBuilder");

Expand Down Expand Up @@ -394,9 +399,20 @@ void PrimaryVertexResolution::analyze(const edm::Event& iEvent, const edm::Event
iEvent.getByToken(beamspotSrc_, hbeamspot);
const reco::BeamSpot& beamspot = *hbeamspot;

edm::Handle<LumiScalersCollection> hscalers;
iEvent.getByToken(lumiScalersSrc_, hscalers);
const LumiScalersCollection& lumiScalers = *hscalers;
float lumi= -1.;
edm::Handle<OnlineLuminosityRecord> metaData;
iEvent.getByToken(metaDataSrc_, metaData);
if (metaData.isValid()) {
lumi=metaData->instLumi();
}
else{
edm::Handle<LumiScalersCollection> lumiScalers;
iEvent.getByToken(lumiScalersSrc_, lumiScalers);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If the needed product is known at configuration time (as #27676 hints), it would be better to directly configure the modules to consume only the needed product.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you mean via eras?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In this case yes.

Given that this pattern is copy-pasted in this PR 4 times, a possible option would be to create an additional producer that extracts the lumi value from LumiScalersCollection/OnlineLuminosityRecord after which there would be one point for the customization, and all the clients could then just read the float from the event.

Copy link
Contributor

@mmusich mmusich Aug 2, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, that's a good suggestion. We didn't want to make era-based customizations because the list of modules needing to be treated is long (this is just the tip of the iceberg), but if there is a single event product that can be consumed for everybody that's more economical indeed.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@arossi83, @makortel
@mtosi (if I understood correctly) is suggesting to make use of this class: https://github.com/cms-sw/cmssw/blob/master/DQM/TrackingMonitor/src/GetLumi.cc and change the code only there (subsequently use this interface everywhere else in the client code).
This would avoid writing an additional EDProducer, would this be acceptable?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The class is certainly an improvement wrt. copy-paste. The input product customization (if that route is chosen) would still have to be repeated for each client, right?

if (lumiScalers.isValid() && !lumiScalers->empty()) {
LumiScalersCollection::const_iterator scalit = lumiScalers->begin();
lumi = scalit->instantLumi();
}
}

edm::ESHandle<TransientTrackBuilder> ttBuilderHandle;
iSetup.get<TransientTrackRecord>().get(transientTrackBuilder_, ttBuilderHandle);
Expand All @@ -413,15 +429,15 @@ void PrimaryVertexResolution::analyze(const edm::Event& iEvent, const edm::Event
const auto nvertices = vertices.size();
if (thePV.tracksSize() >= 4) {
auto sortedTracks = sortTracksByPt(thePV, ttBuilder, beamspot);
hPV_.calculateAndFillResolution(sortedTracks, nvertices, lumiScalers, engine_, fitter_);
hPV_.calculateAndFillResolution(sortedTracks, nvertices, lumi, engine_, fitter_);
}
++iPV;

// Other vertices
for (auto endPV = cend(vertices); iPV != endPV; ++iPV) {
if (iPV->tracksSize() >= 4) {
auto sortedTracks = sortTracksByPt(*iPV, ttBuilder, beamspot);
hOtherV_.calculateAndFillResolution(sortedTracks, nvertices, lumiScalers, engine_, fitter_);
hOtherV_.calculateAndFillResolution(sortedTracks, nvertices, lumi, engine_, fitter_);
}
}
}
Expand Down Expand Up @@ -451,7 +467,7 @@ std::vector<reco::TransientTrack> PrimaryVertexResolution::sortTracksByPt(const

void PrimaryVertexResolution::Plots::calculateAndFillResolution(const std::vector<reco::TransientTrack>& tracks,
size_t nvertices,
const LumiScalersCollection& lumiScalers,
float lumi,
std::mt19937& engine,
AdaptiveVertexFitter& fitter) {
const size_t end = tracks.size() % 2 == 0 ? tracks.size() : tracks.size() - 1;
Expand Down Expand Up @@ -499,10 +515,11 @@ void PrimaryVertexResolution::Plots::calculateAndFillResolution(const std::vecto
hDiff_Z_.fill(res, res.avgz());
}

if (!lumiScalers.empty()) {
hDiff_instLumiScal_.fill(res, lumiScalers.front().instantLumi());
}

hDiff_instLumiScal_.fill(res, lumi);

}


#include "FWCore/Framework/interface/MakerMacros.h"
DEFINE_FWK_MODULE(PrimaryVertexResolution);
26 changes: 18 additions & 8 deletions DQM/TrackingMonitor/src/TrackAnalyzer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -81,10 +81,12 @@ TrackAnalyzer::TrackAnalyzer(const edm::ParameterSet& iConfig, edm::ConsumesColl
edm::InputTag primaryVertexInputTag = iConfig.getParameter<edm::InputTag>("primaryVertex");
edm::InputTag pixelClusterInputTag = iConfig.getParameter<edm::InputTag>("pixelCluster4lumi");
edm::InputTag scalInputTag = iConfig.getParameter<edm::InputTag>("scal");
edm::InputTag metaDataInputTag = iConfig.getParameter<edm::InputTag>("metadata");
beamSpotToken_ = iC.consumes<reco::BeamSpot>(bsSrc);
pvToken_ = iC.consumes<reco::VertexCollection>(primaryVertexInputTag);
pixelClustersToken_ = iC.mayConsume<edmNew::DetSetVector<SiPixelCluster> >(pixelClusterInputTag);
lumiscalersToken_ = iC.mayConsume<LumiScalersCollection>(scalInputTag);
metaDataToken_ = iC.mayConsume<OnlineLuminosityRecord>(metaDataInputTag);

if (useBPixLayer1_)
lumi_factor_per_bx_ = GetLumi::FREQ_ORBIT * GetLumi::SECONDS_PER_LS / GetLumi::XSEC_PIXEL_CLUSTER;
Expand Down Expand Up @@ -1106,14 +1108,22 @@ void TrackAnalyzer::setBX(const edm::Event& iEvent) { bx_ = iEvent.bunchCrossing
#include "DataFormats/TrackerCommon/interface/TrackerTopology.h"
void TrackAnalyzer::setLumi(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
// as done by pixelLumi http://cmslxr.fnal.gov/source/DQM/PixelLumi/plugins/PixelLumiDQM.cc

edm::Handle<LumiScalersCollection> lumiScalers;
iEvent.getByToken(lumiscalersToken_, lumiScalers);
if (lumiScalers.isValid() && !lumiScalers->empty()) {
LumiScalersCollection::const_iterator scalit = lumiScalers->begin();
scal_lumi_ = scalit->instantLumi();
} else
scal_lumi_ = -1;
edm::Handle<OnlineLuminosityRecord> metaData;
iEvent.getByToken(metaDataToken_, metaData);
if (metaData.isValid()) {
scal_lumi_ = metaData->instLumi();
}
else {
edm::Handle<LumiScalersCollection> lumiScalers;
iEvent.getByToken(lumiscalersToken_, lumiScalers);
if (lumiScalers.isValid() && !lumiScalers->empty()) {
LumiScalersCollection::const_iterator scalit = lumiScalers->begin();
scal_lumi_ = scalit->instantLumi();
}
else {
scal_lumi_ = -1;
}
}

edm::Handle<edmNew::DetSetVector<SiPixelCluster> > pixelClusters;
iEvent.getByToken(pixelClustersToken_, pixelClusters);
Expand Down
25 changes: 18 additions & 7 deletions DQM/TrackingMonitor/src/TrackingMonitor.cc
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,7 @@ TrackingMonitor::TrackingMonitor(const edm::ParameterSet& iConfig)
pvSrcToken_ = mayConsume<reco::VertexCollection>(pvSrc_);

lumiscalersToken_ = consumes<LumiScalersCollection>(iConfig.getParameter<edm::InputTag>("scal"));
metaDataToken_ = consumes<OnlineLuminosityRecord>(iConfig.getParameter<edm::InputTag>("metadata"));

edm::InputTag alltrackProducer = iConfig.getParameter<edm::InputTag>("allTrackProducer");
edm::InputTag trackProducer = iConfig.getParameter<edm::InputTag>("TrackProducer");
Expand Down Expand Up @@ -753,13 +754,23 @@ void TrackingMonitor::analyze(const edm::Event& iEvent, const edm::EventSetup& i
MEFolderName = conf->getParameter<std::string>("FolderName");
std::string Folder = MEFolderName.substr(0, 2);
float lumi = -1.;
edm::Handle<LumiScalersCollection> lumiScalers;
iEvent.getByToken(lumiscalersToken_, lumiScalers);
if (lumiScalers.isValid() && !lumiScalers->empty()) {
LumiScalersCollection::const_iterator scalit = lumiScalers->begin();
lumi = scalit->instantLumi();
} else
lumi = -1.;

edm::Handle<OnlineLuminosityRecord> metaData;
iEvent.getByToken(metaDataToken_, metaData);
if (metaData.isValid()) {
lumi = metaData->instLumi();
}
else {
edm::Handle<LumiScalersCollection> lumiScalers;
iEvent.getByToken(lumiscalersToken_, lumiScalers);
if (lumiScalers.isValid() && !lumiScalers->empty()) {
LumiScalersCollection::const_iterator scalit = lumiScalers->begin();
lumi = scalit->instantLumi();
}
else {
lumi = -1;
}
}

if (doPlotsVsLUMI_ || doAllPlots)
NumberEventsOfVsLUMI->Fill(lumi);
Expand Down
26 changes: 19 additions & 7 deletions DQM/TrackingMonitor/src/V0Monitor.cc
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ V0Monitor::V0Monitor(const edm::ParameterSet& iConfig)
bsToken_(consumes<reco::BeamSpot>(iConfig.getParameter<edm::InputTag>("beamSpot"))),
pvToken_(consumes<reco::VertexCollection>(iConfig.getParameter<edm::InputTag>("primaryVertex"))),
lumiscalersToken_(consumes<LumiScalersCollection>(iConfig.getParameter<edm::InputTag>("lumiScalers"))),
metaDataToken_(consumes<OnlineLuminosityRecord>(iConfig.getParameter<edm::InputTag>("metadata"))),
pvNDOF_(iConfig.getParameter<int>("pvNDOF")),
genTriggerEventFlag_(new GenericTriggerEventFlag(
iConfig.getParameter<edm::ParameterSet>("genericTriggerEventPSet"), consumesCollector(), *this)) {
Expand Down Expand Up @@ -234,13 +235,24 @@ void V0Monitor::analyze(edm::Event const& iEvent, edm::EventSetup const& iSetup)
n_vs_BX_->Fill(bx);

float lumi = -1.;
edm::Handle<LumiScalersCollection> lumiScalers;
iEvent.getByToken(lumiscalersToken_, lumiScalers);
if (lumiScalers.isValid() && !lumiScalers->empty()) {
LumiScalersCollection::const_iterator scalit = lumiScalers->begin();
lumi = scalit->instantLumi();
} else
lumi = -1.;

edm::Handle<OnlineLuminosityRecord> metaData;
iEvent.getByToken(metaDataToken_, metaData);
if (metaData.isValid()) {
lumi = metaData->instLumi();
}
else {
edm::Handle<LumiScalersCollection> lumiScalers;
iEvent.getByToken(lumiscalersToken_, lumiScalers);
if (lumiScalers.isValid() && !lumiScalers->empty()) {
LumiScalersCollection::const_iterator scalit = lumiScalers->begin();
lumi = scalit->instantLumi();
}
else {
lumi = -1;
}
}

n_vs_lumi_->Fill(lumi);

edm::Handle<reco::BeamSpot> beamspotHandle;
Expand Down