CMS 3D CMS Logo

List of all members | Classes | Public Member Functions | Protected Member Functions | Private Attributes
OffsetAnalyzerDQM Class Reference
Inheritance diagram for OffsetAnalyzerDQM:
DQMEDAnalyzer edm::stream::EDProducer< edm::GlobalCache< DQMEDAnalyzerGlobalCache >, edm::EndRunProducer, edm::EndLuminosityBlockProducer, edm::Accumulator >

Classes

struct  Plot1D
 
struct  PlotProfile
 

Public Member Functions

void analyze (const edm::Event &, const edm::EventSetup &) override
 
 OffsetAnalyzerDQM (const edm::ParameterSet &)
 
- Public Member Functions inherited from DQMEDAnalyzer
void accumulate (edm::Event const &event, edm::EventSetup const &setup) final
 
void beginLuminosityBlock (edm::LuminosityBlock const &lumi, edm::EventSetup const &setup) final
 
void beginRun (edm::Run const &run, edm::EventSetup const &setup) final
 
void beginStream (edm::StreamID id) final
 
virtual void dqmBeginRun (edm::Run const &, edm::EventSetup const &)
 
 DQMEDAnalyzer ()
 
void endLuminosityBlock (edm::LuminosityBlock const &lumi, edm::EventSetup const &setup) final
 
void endRun (edm::Run const &run, edm::EventSetup const &setup) final
 
virtual bool getCanSaveByLumi ()
 
- Public Member Functions inherited from edm::stream::EDProducer< edm::GlobalCache< DQMEDAnalyzerGlobalCache >, edm::EndRunProducer, edm::EndLuminosityBlockProducer, edm::Accumulator >
 EDProducer ()=default
 
 EDProducer (const EDProducer &)=delete
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
const EDProduceroperator= (const EDProducer &)=delete
 

Protected Member Functions

void bookHistograms (DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
 
int getEtaIndex (float eta)
 
- Protected Member Functions inherited from DQMEDAnalyzer
uint64_t meId () const
 

Private Attributes

std::vector< double > etabins
 
int muHigh
 
edm::EDGetTokenT< edm::View< PileupSummaryInfo > > muToken
 
int npvHigh
 
std::string offsetPlotBaseName
 
std::map< std::string, PlotProfileoffsetPlots
 
std::map< int, std::string > pdgMap
 
edm::EDGetTokenT< edm::View< pat::PackedCandidate > > pfToken
 
std::vector< std::string > pftypes
 
edm::EDGetTokenT< edm::View< reco::Vertex > > pvToken
 
std::map< std::string, Plot1Dth1dPlots
 

Additional Inherited Members

- Public Types inherited from DQMEDAnalyzer
typedef dqm::reco::DQMStore DQMStore
 
typedef dqm::reco::MonitorElement MonitorElement
 
- Public Types inherited from edm::stream::EDProducer< edm::GlobalCache< DQMEDAnalyzerGlobalCache >, edm::EndRunProducer, edm::EndLuminosityBlockProducer, edm::Accumulator >
using CacheTypes = CacheContexts< T... >
 
using GlobalCache = typename CacheTypes::GlobalCache
 
using HasAbility = AbilityChecker< T... >
 
using InputProcessBlockCache = typename CacheTypes::InputProcessBlockCache
 
using LuminosityBlockCache = typename CacheTypes::LuminosityBlockCache
 
using LuminosityBlockContext = LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCache >
 
using LuminosityBlockSummaryCache = typename CacheTypes::LuminosityBlockSummaryCache
 
using RunCache = typename CacheTypes::RunCache
 
using RunContext = RunContextT< RunCache, GlobalCache >
 
using RunSummaryCache = typename CacheTypes::RunSummaryCache
 
- Static Public Member Functions inherited from DQMEDAnalyzer
static void globalEndJob (DQMEDAnalyzerGlobalCache const *)
 
static void globalEndLuminosityBlockProduce (edm::LuminosityBlock &lumi, edm::EventSetup const &setup, LuminosityBlockContext const *context)
 
static void globalEndRunProduce (edm::Run &run, edm::EventSetup const &setup, RunContext const *context)
 
static std::unique_ptr< DQMEDAnalyzerGlobalCacheinitializeGlobalCache (edm::ParameterSet const &)
 
- Protected Attributes inherited from DQMEDAnalyzer
edm::EDPutTokenT< DQMTokenlumiToken_
 
edm::EDPutTokenT< DQMTokenrunToken_
 
unsigned int streamId_
 

Detailed Description

Definition at line 16 of file OffsetAnalyzerDQM.cc.

Constructor & Destructor Documentation

◆ OffsetAnalyzerDQM()

OffsetAnalyzerDQM::OffsetAnalyzerDQM ( const edm::ParameterSet iConfig)

Definition at line 96 of file OffsetAnalyzerDQM.cc.

References DeadROC_duringRun::dir, etabins, edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), mps_fire::i, muHigh, muToken, dqmiodumpmetadata::n, Skims_PA_cff::name, npvHigh, offsetPlotBaseName, offsetPlots, offsetAnalyzerDQM_cff::pdgKeys, pdgMap, offsetAnalyzerDQM_cff::pdgStrs, pfToken, pftypes, Plot1D, muonDTDigis_cfi::pset, pvToken, AlCaHLTBitMon_QueryRunRegistry::string, th1dPlots, runGCPTkAlMap::title, run3scouting_cff::vx, testProducerWithPsetDescEmpty_cfi::x1, and testProducerWithPsetDescEmpty_cfi::y1.

96  {
97  offsetPlotBaseName = iConfig.getParameter<std::string>("offsetPlotBaseName");
98 
99  pvToken = consumes<edm::View<reco::Vertex>>(iConfig.getParameter<edm::InputTag>("pvTag"));
100  muToken = consumes<edm::View<PileupSummaryInfo>>(iConfig.getParameter<edm::InputTag>("muTag"));
101  pfToken = consumes<edm::View<pat::PackedCandidate>>(iConfig.getParameter<edm::InputTag>("pfTag"));
102 
103  etabins = iConfig.getParameter<std::vector<double>>("etabins");
104  pftypes = iConfig.getParameter<std::vector<std::string>>("pftypes");
105 
106  muHigh = iConfig.getUntrackedParameter<int>("muHigh");
107  npvHigh = iConfig.getUntrackedParameter<int>("npvHigh");
108 
109  //initialize offset plots
110  const auto& offset_psets = iConfig.getParameter<std::vector<edm::ParameterSet>>("offsetPlots");
111  for (auto& pset : offset_psets) {
112  std::string name = pset.getParameter<std::string>("name");
113  std::string title = pset.getParameter<std::string>("title");
114  std::string dir = pset.getParameter<std::string>("dir");
115  std::vector<double> vx = pset.getParameter<std::vector<double>>("vx");
116  int ny = pset.getParameter<uint32_t>("ny");
117  double y0 = pset.getParameter<double>("y0");
118  double y1 = pset.getParameter<double>("y1");
119 
120  offsetPlots[name] = PlotProfile(name, title, dir, 0, 0, 0, vx, ny, y0, y1);
121  }
122 
123  //initialize th1d
124  const auto& th1d_psets = iConfig.getParameter<std::vector<edm::ParameterSet>>("th1dPlots");
125  for (auto& pset : th1d_psets) {
126  std::string name = pset.getParameter<std::string>("name");
127  std::string title = pset.getParameter<std::string>("title");
128  std::string dir = pset.getParameter<std::string>("dir");
129  int nx = pset.getParameter<uint32_t>("nx");
130  double x0 = pset.getParameter<double>("x0");
131  double x1 = pset.getParameter<double>("x1");
132 
133  th1dPlots[name] = Plot1D(name, title, dir, nx, x0, x1);
134  }
135 
136  //create pdg map
137  std::vector<uint32_t> pdgKeys = iConfig.getParameter<std::vector<uint32_t>>("pdgKeys");
138  std::vector<std::string> pdgStrs = iConfig.getParameter<std::vector<std::string>>("pdgStrs");
139  for (int i = 0, n = pdgKeys.size(); i < n; i++)
140  pdgMap[pdgKeys[i]] = pdgStrs[i];
141 }
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
edm::EDGetTokenT< edm::View< PileupSummaryInfo > > muToken
std::map< int, std::string > pdgMap
std::map< std::string, Plot1D > th1dPlots
std::vector< double > etabins
T getUntrackedParameter(std::string const &, T const &) const
edm::EDGetTokenT< edm::View< pat::PackedCandidate > > pfToken
std::string offsetPlotBaseName
std::map< std::string, PlotProfile > offsetPlots
edm::EDGetTokenT< edm::View< reco::Vertex > > pvToken
std::vector< std::string > pftypes

Member Function Documentation

◆ analyze()

void OffsetAnalyzerDQM::analyze ( const edm::Event iEvent,
const edm::EventSetup  
)
overridevirtual

Reimplemented from DQMEDAnalyzer.

Definition at line 153 of file OffsetAnalyzerDQM.cc.

References funct::abs(), PVValHelper::eta, etabins, getEtaIndex(), mps_fire::i, iEvent, amptDefaultParameters_cff::mu, muHigh, muToken, dqmiodumpmetadata::n, HLT_2023v12_cff::nEta, npvHigh, offsetPlotBaseName, offsetPlots, pdgMap, pfToken, pftypes, pvToken, alignCSCRings::s, AlCaHLTBitMon_QueryRunRegistry::string, edmLumisInFiles::summary, th1dPlots, and to_string().

153  {
154  //npv//
156  iEvent.getByToken(pvToken, vertexHandle);
157 
158  unsigned int nPVall = vertexHandle->size();
159  bool isGoodPV[nPVall];
160  for (size_t i = 0; i < nPVall; ++i)
161  isGoodPV[i] = false;
162 
163  int npv = 0;
164  for (unsigned int i = 0; i < nPVall; i++) {
165  const auto& pv = vertexHandle->at(i);
166  th1dPlots["pv_z"].fill(pv.z());
167 
168  if (!pv.isFake() && pv.ndof() >= 4 && fabs(pv.z()) <= 24.0 && fabs(pv.position().rho()) <= 2.0) {
169  npv++;
170  isGoodPV[i] = true;
171  }
172  }
173  th1dPlots["npv"].fill(npv);
174  int npv_in_range = npv;
175  if (npv_in_range < 0)
176  npv_in_range = 0;
177  else if (npv_in_range >= npvHigh)
178  npv_in_range = npvHigh - 1; // make sure int_mu won't lead to non-existing ME
179 
180  //mu//
181  int int_mu = -1;
183  if (iEvent.getByToken(muToken, muHandle)) {
184  const auto& summary = *muHandle;
185  auto it = std::find_if(summary.begin(), summary.end(), [](const auto& s) { return s.getBunchCrossing() == 0; });
186 
187  if (it->getBunchCrossing() != 0) {
188  edm::LogError("OffsetAnalyzerDQM") << "Cannot find the in-time pileup info " << it->getBunchCrossing();
189  } else {
190  float mu = it->getTrueNumInteractions();
191  th1dPlots["mu"].fill(mu);
192  int_mu = mu + 0.5;
193  }
194  }
195  if (int_mu >= muHigh)
196  int_mu = muHigh - 1; // make sure int_mu won't lead to non-existing ME
197 
198  //create map of pftypes vs total energy / eta
199  std::map<std::string, std::vector<double>> m_pftype_etaE;
200  int nEta = etabins.size() - 1;
201  for (const auto& pftype : pftypes)
202  m_pftype_etaE[pftype].assign(nEta, 0.0);
203 
204  //pf particles//
206  iEvent.getByToken(pfToken, pfHandle);
207 
208  for (unsigned int i = 0, n = pfHandle->size(); i < n; i++) {
209  const auto& cand = pfHandle->at(i);
210 
211  int etaIndex = getEtaIndex(cand.eta());
212  std::string pftype = pdgMap[abs(cand.pdgId())];
213  if (etaIndex == -1 || pftype.empty())
214  continue;
215 
216  if (pftype == "chm") { //check charged hadrons ONLY
217  bool attached = false;
218 
219  for (unsigned int ipv = 0; ipv < nPVall && !attached; ipv++) {
220  if (isGoodPV[ipv] && cand.fromPV(ipv) == 3)
221  attached = true; //pv used in fit
222  }
223  if (!attached)
224  pftype = "chu"; //unmatched charged hadron
225  }
227  /*
228  reco::TrackRef candTrkRef( cand.trackRef() );
229  if ( pftype == "chm" && !candTrkRef.isNull() ) { //check charged hadrons ONLY
230  bool attached = false;
231 
232  for (auto ipv=vertexHandle->begin(), endpv=vertexHandle->end(); ipv != endpv && !attached; ++ipv) {
233  if ( !ipv->isFake() && ipv->ndof() >= 4 && fabs(ipv->z()) < 24 ) { //must be attached to a good pv
234 
235  for(auto ivtrk=ipv->tracks_begin(), endvtrk=ipv->tracks_end(); ivtrk != endvtrk && !attached; ++ivtrk) {
236  reco::TrackRef pvTrkRef(ivtrk->castTo<reco::TrackRef>());
237  if (pvTrkRef == candTrkRef) attached = true;
238  }
239  }
240  }
241  if (!attached) pftype = "chu"; //unmatched charged hadron
242  }
243 */
245  m_pftype_etaE[pftype][etaIndex] += cand.et();
246  }
247 
248  for (const auto& pair : m_pftype_etaE) {
249  std::string pftype = pair.first;
250  std::vector<double> etaE = pair.second;
251 
252  std::string offset_name_npv = offsetPlotBaseName + "_npv" + std::to_string(npv_in_range) + "_" + pftype;
253  if (offsetPlots.find(offset_name_npv) == offsetPlots.end())
254  return; //npv is out of range ()
255 
256  for (int i = 0; i < nEta; i++) {
257  double eta = 0.5 * (etabins[i] + etabins[i + 1]);
258  offsetPlots[offset_name_npv].fill2D(eta, etaE[i]);
259  }
260 
261  if (int_mu != -1) {
262  std::string offset_name_mu = offsetPlotBaseName + "_mu" + std::to_string(int_mu) + "_" + pftype;
263  if (offsetPlots.find(offset_name_mu) == offsetPlots.end())
264  return; //mu is out of range
265 
266  for (int i = 0; i < nEta; i++) {
267  double eta = 0.5 * (etabins[i] + etabins[i + 1]);
268  offsetPlots[offset_name_mu].fill2D(eta, etaE[i]);
269  }
270  }
271  }
272 }
edm::EDGetTokenT< edm::View< PileupSummaryInfo > > muToken
std::map< int, std::string > pdgMap
std::map< std::string, Plot1D > th1dPlots
Log< level::Error, false > LogError
static std::string to_string(const XMLCh *ch)
std::vector< double > etabins
edm::EDGetTokenT< edm::View< pat::PackedCandidate > > pfToken
int iEvent
Definition: GenABIO.cc:224
int getEtaIndex(float eta)
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
std::string offsetPlotBaseName
std::map< std::string, PlotProfile > offsetPlots
edm::EDGetTokenT< edm::View< reco::Vertex > > pvToken
std::vector< std::string > pftypes

◆ bookHistograms()

void OffsetAnalyzerDQM::bookHistograms ( DQMStore::IBooker booker,
edm::Run const &  ,
edm::EventSetup const &   
)
overrideprotectedvirtual

Implements DQMEDAnalyzer.

Definition at line 143 of file OffsetAnalyzerDQM.cc.

References offsetPlots, and th1dPlots.

143  {
144  //std::cout << "OffsetAnalyzerDQM booking offset histograms" << std::endl;
145  for (auto& pair : offsetPlots) {
146  pair.second.book(booker);
147  }
148  for (auto& pair : th1dPlots) {
149  pair.second.book(booker);
150  }
151 }
std::map< std::string, Plot1D > th1dPlots
std::map< std::string, PlotProfile > offsetPlots

◆ getEtaIndex()

int OffsetAnalyzerDQM::getEtaIndex ( float  eta)
protected

Definition at line 274 of file OffsetAnalyzerDQM.cc.

References PVValHelper::eta, etabins, mps_fire::i, and HLT_2023v12_cff::nEta.

Referenced by analyze().

274  {
275  int nEta = etabins.size() - 1;
276 
277  for (int i = 0; i < nEta; i++) {
278  if (etabins[i] <= eta && eta < etabins[i + 1])
279  return i;
280  }
281  if (eta == etabins[nEta])
282  return nEta - 1;
283  else
284  return -1;
285 }
std::vector< double > etabins

Member Data Documentation

◆ etabins

std::vector<double> OffsetAnalyzerDQM::etabins
private

Definition at line 86 of file OffsetAnalyzerDQM.cc.

Referenced by analyze(), getEtaIndex(), and OffsetAnalyzerDQM().

◆ muHigh

int OffsetAnalyzerDQM::muHigh
private

Definition at line 88 of file OffsetAnalyzerDQM.cc.

Referenced by analyze(), and OffsetAnalyzerDQM().

◆ muToken

edm::EDGetTokenT<edm::View<PileupSummaryInfo> > OffsetAnalyzerDQM::muToken
private

Definition at line 92 of file OffsetAnalyzerDQM.cc.

Referenced by analyze(), and OffsetAnalyzerDQM().

◆ npvHigh

int OffsetAnalyzerDQM::npvHigh
private

Definition at line 89 of file OffsetAnalyzerDQM.cc.

Referenced by analyze(), and OffsetAnalyzerDQM().

◆ offsetPlotBaseName

std::string OffsetAnalyzerDQM::offsetPlotBaseName
private

Definition at line 84 of file OffsetAnalyzerDQM.cc.

Referenced by analyze(), and OffsetAnalyzerDQM().

◆ offsetPlots

std::map<std::string, PlotProfile> OffsetAnalyzerDQM::offsetPlots
private

Definition at line 81 of file OffsetAnalyzerDQM.cc.

Referenced by analyze(), bookHistograms(), and OffsetAnalyzerDQM().

◆ pdgMap

std::map<int, std::string> OffsetAnalyzerDQM::pdgMap
private

Definition at line 82 of file OffsetAnalyzerDQM.cc.

Referenced by analyze(), and OffsetAnalyzerDQM().

◆ pfToken

edm::EDGetTokenT<edm::View<pat::PackedCandidate> > OffsetAnalyzerDQM::pfToken
private

Definition at line 93 of file OffsetAnalyzerDQM.cc.

Referenced by analyze(), and OffsetAnalyzerDQM().

◆ pftypes

std::vector<std::string> OffsetAnalyzerDQM::pftypes
private

Definition at line 85 of file OffsetAnalyzerDQM.cc.

Referenced by analyze(), and OffsetAnalyzerDQM().

◆ pvToken

edm::EDGetTokenT<edm::View<reco::Vertex> > OffsetAnalyzerDQM::pvToken
private

Definition at line 91 of file OffsetAnalyzerDQM.cc.

Referenced by analyze(), and OffsetAnalyzerDQM().

◆ th1dPlots

std::map<std::string, Plot1D> OffsetAnalyzerDQM::th1dPlots
private

Definition at line 80 of file OffsetAnalyzerDQM.cc.

Referenced by analyze(), bookHistograms(), and OffsetAnalyzerDQM().