CMS 3D CMS Logo

DigiRunSummary.cc
Go to the documentation of this file.
2 
3 namespace hcaldqm
4 {
6  std::string const& taskname, edm::ParameterSet const& ps) :
7  DQClient(name, taskname, ps), _booked(false)
8  {
9  _thresh_unihf = ps.getUntrackedParameter<double>("thresh_unihf",
10  0.2);
11 
12  std::vector<uint32_t> vrefDigiSize = ps.getUntrackedParameter<std::vector<uint32_t>>("refDigiSize");
13  _refDigiSize[HcalBarrel] = vrefDigiSize[0];
14  _refDigiSize[HcalEndcap] = vrefDigiSize[1];
15  _refDigiSize[HcalOuter] = vrefDigiSize[2];
16  _refDigiSize[HcalForward] = vrefDigiSize[3];
17  }
18 
19  /* virtual */ void DigiRunSummary::beginRun(edm::Run const& r,
20  edm::EventSetup const& es)
21  {
22  DQClient::beginRun(r,es);
23 
24  if (_ptype!=fOffline)
25  return;
26 
27  // INITIALIZE WHAT NEEDS TO BE INITIALIZE ONLY ONCE!
32  FIBER_uTCA_MIN1, FIBERCH_MIN, false).rawId());
34  _vhashVME); // filter out VME
36  _vhashuTCA); // filter out uTCA
38  FIBER_uTCA_MIN1, FIBERCH_MIN, false).rawId());
40  FIBER_uTCA_MIN1, FIBERCH_MIN, false).rawId());
42  FIBER_uTCA_MIN1, FIBERCH_MIN, false).rawId());
44  FIBER_uTCA_MIN1, FIBERCH_MIN, false).rawId());
46  FIBER_uTCA_MIN1, FIBERCH_MIN, false).rawId());
48  FIBER_uTCA_MIN1, FIBERCH_MIN, false).rawId());
50  _vhashFEDHF); // preserve only HF FEDs
51 
56 
62 
63  _cOccupancy_depth.initialize(_name, "Occupancy",
68 
69  // GET THE NOMINAL NUMBER OF CHANNELS PER FED
70  std::vector<HcalGenericDetId> gids = _emap->allPrecisionId();
71  for (std::vector<HcalGenericDetId>::const_iterator it=gids.begin();
72  it!=gids.end(); ++it)
73  {
74  if (!it->isHcalDetId())
75  continue;
76  HcalDetId did(it->rawId());
78  _xNChsNominal.get(eid)++;
79  }
80  }
81 
82  /*
83  * END LUMI. EVALUATE LUMI BASED FLAGS
84  */
87  edm::EventSetup const& es)
88  {
89  DQClient::endLuminosityBlock(ib, ig, lb, es);
90 
91  if (_ptype!=fOffline)
92  return;
93 
94  LSSummary lssum;
95  lssum._LS=_currentLS;
96 
98 
99  // INITIALIZE LUMI BASED HISTOGRAMS
100  Container2D cDigiSize_Crate, cOccupancy_depth;
101  cDigiSize_Crate.initialize(_taskname, "DigiSize",
105  cOccupancy_depth.initialize(_taskname, "Occupancy",
110 
111  // LOAD LUMI BASED HISTOGRAMS
112  cOccupancy_depth.load(ig, _emap, _subsystem);
113  cDigiSize_Crate.load(ig, _emap, _subsystem);
114  MonitorElement *meNumEvents = ig.get(_subsystem+
115  "/RunInfo/NumberOfEvents");
116  int numEvents = meNumEvents->getBinContent(1);
117  bool unknownIdsPresent = ig.get(_subsystem+"/"
118  +_taskname+"/UnknownIds")->getBinContent(1)>0;
119 
120  // book the Numer of Events - set axis extendable
121  if (!_booked)
122  {
124  _meNumEvents = ib.book1D("NumberOfEvents", "NumberOfEvents",
125  1000, 1, 1001); // 1000 to start with
126  _meNumEvents->getTH1()->SetCanExtend(TH1::kXaxis);
127 
129  _booked=true;
130  }
132 
133  // ANALYZE THIS LS for LS BASED FLAGS
134  std::vector<HcalGenericDetId> gids = _emap->allPrecisionId();
135  for (std::vector<HcalGenericDetId>::const_iterator it=gids.begin();
136  it!=gids.end(); ++it)
137  {
138  if (!it->isHcalDetId())
139  continue;
140 
141  HcalDetId did = HcalDetId(it->rawId());
143 
144  cOccupancy_depth.getBinContent(did)>0?_xNChs.get(eid)++:
145  _xNChs.get(eid)+=0;
146  _cOccupancy_depth.fill(did, cOccupancy_depth.getBinContent(did));
147  // digi size
148  cDigiSize_Crate.getMean(eid)!=
149  _refDigiSize[did.subdet()]?
150  _xDigiSize.get(eid)++:_xDigiSize.get(eid)+=0;
151  cDigiSize_Crate.getRMS(eid)!=0?
152  _xDigiSize.get(eid)++:_xDigiSize.get(eid)+=0;
153  }
154 
155  // GENERATE SUMMARY AND STORE IT
156  std::vector<flag::Flag> vtmpflags;
157  vtmpflags.resize(nLSFlags);
158  vtmpflags[fDigiSize]=flag::Flag("DigiSize");
159  vtmpflags[fNChsHF]=flag::Flag("NChsHF");
160  vtmpflags[fUnknownIds]=flag::Flag("UnknownIds");
161  for (std::vector<uint32_t>::const_iterator it=_vhashCrates.begin();
162  it!=_vhashCrates.end(); ++it)
163  {
164  HcalElectronicsId eid(*it);
165  HcalDetId did = HcalDetId(_emap->lookup(eid));
166 
167  // reset all the tmp flags to fNA
168  // MUST DO IT NOW! AS NCDAQ MIGHT OVERWRITE IT!
169  for (std::vector<flag::Flag>::iterator ft=vtmpflags.begin();
170  ft!=vtmpflags.end(); ++ft)
171  ft->reset();
172 
173  if (_xDigiSize.get(eid)>0)
174  vtmpflags[fDigiSize]._state = flag::fBAD;
175  else
176  vtmpflags[fDigiSize]._state = flag::fGOOD;
177 
178  if (did.subdet() == HcalForward)
179  {
180  if (_xNChs.get(eid)!=_xNChsNominal.get(eid))
181  vtmpflags[fNChsHF]._state = flag::fBAD;
182  else
183  vtmpflags[fNChsHF]._state = flag::fGOOD;
184  } else {
185  vtmpflags[fNChsHF]._state = flag::fNA;
186  }
187  if (unknownIdsPresent)
188  vtmpflags[fUnknownIds]._state = flag::fBAD;
189  else
190  vtmpflags[fUnknownIds]._state = flag::fGOOD;
191 
192  // push all the flags for this crate
193  lssum._vflags.push_back(vtmpflags);
194  }
195 
196  // push all the flags for all FEDs for this LS
197  _vflagsLS.push_back(lssum);
198  }
199 
200  /*
201  * End Job
202  */
203  /* virtual */ std::vector<flag::Flag> DigiRunSummary::endJob(
205  {
206  if (_ptype!=fOffline)
207  return std::vector<flag::Flag>();
208 
210 
211  // PREPARE LS AND RUN BASED FLAGS TO USE IT FOR BOOKING
212  std::vector<flag::Flag> vflagsPerLS;
213  std::vector<flag::Flag> vflagsPerRun;
214  vflagsPerLS.resize(nLSFlags);
215  vflagsPerRun.resize(nDigiFlag-nLSFlags+1);
216  vflagsPerLS[fDigiSize]=flag::Flag("DigiSize");
217  vflagsPerLS[fNChsHF]=flag::Flag("NChsHF");
218  vflagsPerLS[fUnknownIds]=flag::Flag("UnknownIds");
219  vflagsPerRun[fDigiSize]=flag::Flag("DigiSize");
220  vflagsPerRun[fNChsHF]=flag::Flag("NChsHF");
221  vflagsPerRun[fUniHF-nLSFlags+1]=flag::Flag("UniSlotHF");
222  vflagsPerRun[fDead-nLSFlags+1]=flag::Flag("Dead");
223 
224  // INITIALIZE SUMMARY CONTAINERS
225  ContainerSingle2D cSummaryvsLS;
226  Container2D cSummaryvsLS_Crate;
227  cSummaryvsLS.initialize(_name, "SummaryvsLS",
231  cSummaryvsLS.book(ib, _subsystem);
232  cSummaryvsLS_Crate.initialize(_name, "SummaryvsLS",
235  new quantity::FlagQuantity(vflagsPerLS),
237  cSummaryvsLS_Crate.book(ib, _emap, _subsystem);
238 
239  // INITIALIZE CONTAINERS WE NEED TO LOAD or BOOK
240  Container2D cOccupancyCut_depth;
241  Container2D cDead_depth, cDead_Crate;
242  cOccupancyCut_depth.initialize(_taskname, "OccupancyCut",
247  cDead_depth.initialize(_name, "Dead",
252  cDead_Crate.initialize(_name, "Dead",
257 
258  // LOAD
259  cOccupancyCut_depth.load(ig, _emap, _subsystem);
260  cDead_depth.book(ib, _emap, _subsystem);
261  cDead_Crate.book(ib, _emap, _subsystem);
262 
263  // ANALYZE RUN BASED QUANTITIES
264  std::vector<HcalGenericDetId> gids = _emap->allPrecisionId();
265  for (std::vector<HcalGenericDetId>::const_iterator it=gids.begin();
266  it!=gids.end(); ++it)
267  {
268  if (!it->isHcalDetId())
269  continue;
270 
271  HcalDetId did = HcalDetId(it->rawId());
273 
274  if (_cOccupancy_depth.getBinContent(did)<1)
275  {
276  _xDead.get(eid)++;
277  cDead_depth.fill(did);
278  cDead_Crate.fill(eid);
279  }
280  if (did.subdet()==HcalForward)
281  _xUniHF.get(eid)+=cOccupancyCut_depth.getBinContent(did);
282  }
283  // ANALYZE FOR HF SLOT UNIFORMITY
284  for (uintCompactMap::const_iterator it=_xUniHF.begin();
285  it!=_xUniHF.end(); ++it)
286  {
287  uint32_t hash1 = it->first;
288  HcalElectronicsId eid1(hash1);
289  double x1 = it->second;
290 
291  for (uintCompactMap::const_iterator jt=_xUniHF.begin();
292  jt!=_xUniHF.end(); ++jt)
293  {
294  if (jt==it)
295  continue;
296 
297  double x2 = jt->second;
298  if (x2==0)
299  continue;
300  if (x1/x2<_thresh_unihf)
301  _xUni.get(eid1)++;
302  }
303  }
304 
305  /*
306  * Iterate over each crate
307  * Iterate over each LS Summary
308  * Iterate over all flags
309  * set...
310  */
311  // iterate over all crates
312  std::vector<flag::Flag> sumflags;
313  int icrate=0;
314  for (auto& it_crate : _vhashCrates) {
315  flag::Flag fSumRun("DIGI"); // summary flag for this FED
316  flag::Flag ffDead("Dead");
317  flag::Flag ffUniSlotHF("UniSlotHF");
318  HcalElectronicsId eid(it_crate);
319  HcalDetId did = HcalDetId(_emap->lookup(eid));
320 
321  // ITERATE OVER EACH LS
322  for (std::vector<LSSummary>::const_iterator itls=_vflagsLS.begin();
323  itls!=_vflagsLS.end(); ++itls)
324  {
325  int iflag=0;
326  flag::Flag fSumLS("DIGI");
327  for (std::vector<flag::Flag>::const_iterator ft=
328  itls->_vflags[icrate].begin(); ft!=itls->_vflags[icrate].end();
329  ++ft)
330  {
331  cSummaryvsLS_Crate.setBinContent(eid, itls->_LS, int(iflag), ft->_state);
332  fSumLS+=(*ft);
333  iflag++;
334  }
335  cSummaryvsLS.setBinContent(eid, itls->_LS, fSumLS._state);
336  fSumRun+=fSumLS;
337  }
338 
339  // EVALUATE RUN BASED FLAGS
340  if (_xDead.get(eid)>0)
341  ffDead._state = flag::fBAD;
342  else
343  ffDead._state = flag::fGOOD;
344  if (did.subdet() == HcalForward)
345  {
346  if (_xUni.get(eid)>0)
347  ffUniSlotHF._state = flag::fBAD;
348  else
349  ffUniSlotHF._state = flag::fGOOD;
350  }
351  fSumRun+=ffDead+ffUniSlotHF;
352 
353  // push the summary flag for this FED for the Whole Run
354  sumflags.push_back(fSumRun);
355 
356  // increment fed
357  icrate++;
358  }
359 
360  return sumflags;
361  }
362 }
T getUntrackedParameter(std::string const &, T const &) const
std::vector< LSSummary > _vflagsLS
MonitorElement * _meNumEvents
void setBinContent(int binx, double content)
set content of bin (1-D)
ContainerXXX< uint32_t > _xDigiSize
int const CRATE_VME_MIN
Definition: Constants.h:111
HcalSubdetector subdet() const
get the subdetector
Definition: HcalDetId.h:49
ContainerXXX< uint32_t > _xUni
virtual double getRMS(HcalDetId const &, int axix=1)
Definition: Container1D.cc:237
void initialize(HcalElectronicsMap const *, ElectronicsMapType etype=fHcalElectronicsMap)
MonitorElement * get(const std::string &path)
Definition: DQMStore.cc:307
virtual void beginRun(edm::Run const &, edm::EventSetup const &)
Definition: DQClient.cc:15
virtual CompactMap::const_iterator begin()
Definition: ContainerXXX.h:75
State _state
Definition: Flag.h:79
TH1 * getTH1() const
std::string _taskname
Definition: DQClient.h:47
int const SPIGOT_MIN
Definition: Constants.h:136
HcalElectronicsMap const * _emap
Definition: DQClient.h:54
virtual void reset()
Definition: ContainerXXX.h:366
filter::HashFilter _filter_FEDHF
int const FIBER_VME_MIN
Definition: Constants.h:141
std::vector< uint32_t > _vhashCrates
Definition: DQClient.h:58
int const FIBERCH_MIN
Definition: Constants.h:151
virtual void book(DQMStore::IBooker &, std::string subsystem="Hcal", std::string aux="")
std::vector< flag::Flag > endJob(DQMStore::IBooker &, DQMStore::IGetter &) override
virtual CompactMap::const_iterator end()
Definition: ContainerXXX.h:77
ProcessingType _ptype
Definition: DQModule.h:59
std::vector< uint32_t > _vhashuTCA
filter::HashFilter _filter_uTCA
virtual void setBinContent(int, int, int)
Container2D _cOccupancy_depth
virtual void endLuminosityBlock(DQMStore::IBooker &, DQMStore::IGetter &, edm::LuminosityBlock const &, edm::EventSetup const &)
Definition: DQClient.cc:114
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:118
virtual void initialize(std::string const &folder, hashfunctions::HashType, Quantity *, Quantity *, Quantity *qz=new ValueQuantity(quantity::fN), int debug=0)
Definition: Container2D.cc:32
int const FIBER_uTCA_MIN1
Definition: Constants.h:144
ContainerXXX< uint32_t > _xNChsNominal
std::vector< HcalGenericDetId > allPrecisionId() const
void beginRun(edm::Run const &, edm::EventSetup const &) override
void endLuminosityBlock(DQMStore::IBooker &, DQMStore::IGetter &, edm::LuminosityBlock const &, edm::EventSetup const &) override
std::string _name
Definition: DQModule.h:57
std::vector< uint32_t > _vhashFEDHF
virtual double getMean(HcalDetId const &, int axis=1)
Definition: Container1D.cc:232
int const CRATE_uTCA_MIN
Definition: Constants.h:116
std::map< HcalSubdetector, uint32_t > _refDigiSize
std::vector< uint32_t > _vhashVME
DigiRunSummary(std::string const &, std::string const &, edm::ParameterSet const &)
double getBinContent(HcalDetId const &) override
Definition: Container2D.cc:184
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:279
virtual void book(HcalElectronicsMap const *)
Definition: ContainerXXX.h:99
virtual void initialize(std::string const &folder, Quantity *, Quantity *, Quantity *qz=new ValueQuantity(quantity::fN), int debug=0)
virtual void load(DQMStore *, HcalElectronicsMap const *, std::string const &subsystem="Hcal", std::string const &aux="", std::string const &prepend="", DQMStore::OpenRunDirs mode=DQMStore::StripRunDirs)
Definition: Container1D.cc:596
ContainerXXX< uint32_t > _xNChs
void setBinContent(HcalDetId const &, int) override
Definition: Container2D.cc:235
double getBinContent(int binx) const
get content of bin (1-D)
virtual STDTYPE & get(HcalDetId const &)
Definition: ContainerXXX.h:249
if(dp >Float(M_PI)) dp-
electronicsmap::ElectronicsMap _ehashmap
void fill(HcalDetId const &) override
Definition: Container2D.cc:59
std::string _subsystem
Definition: DQModule.h:64
virtual void initialize(hashfunctions::HashType, int debug=0)
Definition: ContainerXXX.h:91
virtual void initialize(FilterType ftype, HashType htype, std::vector< uint32_t > const &)
Definition: HashFilter.cc:26
void book(DQMStore::IBooker &, HcalElectronicsMap const *, std::string subsystem="Hcal", std::string aux="") override
Definition: Container2D.cc:895
filter::HashFilter _filter_VME
Readout chain identification for Hcal.
const DetId lookup(HcalElectronicsId fId) const
lookup the logical detid associated with the given electronics id
ContainerXXX< uint32_t > _xUniHF
int const SLOT_uTCA_MIN
Definition: Constants.h:123
Definition: Run.h:43
ContainerXXX< uint32_t > _xDead
ib
Definition: cuy.py:660