CMS 3D CMS Logo

DigiRunSummary.cc
Go to the documentation of this file.
2 
3 namespace hcaldqm
4 {
5  using namespace constants;
6 
8  std::string const& taskname, edm::ParameterSet const& ps) :
9  DQClient(name, taskname, ps), _booked(false)
10  {
11  _thresh_unihf = ps.getUntrackedParameter<double>("thresh_unihf",
12  0.2);
13 
14  std::vector<uint32_t> vrefDigiSize = ps.getUntrackedParameter<std::vector<uint32_t>>("refDigiSize");
15  _refDigiSize[HcalBarrel] = vrefDigiSize[0];
16  _refDigiSize[HcalEndcap] = vrefDigiSize[1];
17  _refDigiSize[HcalOuter] = vrefDigiSize[2];
18  _refDigiSize[HcalForward] = vrefDigiSize[3];
19  }
20 
21  /* virtual */ void DigiRunSummary::beginRun(edm::Run const& r,
22  edm::EventSetup const& es)
23  {
24  DQClient::beginRun(r,es);
25 
26  if (_ptype!=fOffline)
27  return;
28 
29  // INITIALIZE WHAT NEEDS TO BE INITIALIZE ONLY ONCE!
34  FIBER_uTCA_MIN1, FIBERCH_MIN, false).rawId());
36  _vhashVME); // filter out VME
38  _vhashuTCA); // filter out uTCA
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  FIBER_uTCA_MIN1, FIBERCH_MIN, false).rawId());
52  _vhashFEDHF); // preserve only HF FEDs
53 
58 
64 
65  _cOccupancy_depth.initialize(_name, "Occupancy",
70 
71  // GET THE NOMINAL NUMBER OF CHANNELS PER FED
72  std::vector<HcalGenericDetId> gids = _emap->allPrecisionId();
73  for (std::vector<HcalGenericDetId>::const_iterator it=gids.begin();
74  it!=gids.end(); ++it)
75  {
76  if (!it->isHcalDetId())
77  continue;
78  HcalDetId did(it->rawId());
80  _xNChsNominal.get(eid)++;
81  }
82  }
83 
84  /*
85  * END LUMI. EVALUATE LUMI BASED FLAGS
86  */
89  edm::EventSetup const& es)
90  {
91  DQClient::endLuminosityBlock(ib, ig, lb, es);
92 
93  if (_ptype!=fOffline)
94  return;
95 
96  LSSummary lssum;
97  lssum._LS=_currentLS;
98 
100 
101  // INITIALIZE LUMI BASED HISTOGRAMS
102  Container2D cDigiSize_Crate, cOccupancy_depth;
103  cDigiSize_Crate.initialize(_taskname, "DigiSize",
107  cOccupancy_depth.initialize(_taskname, "Occupancy",
112 
113  // LOAD LUMI BASED HISTOGRAMS
114  cOccupancy_depth.load(ig, _emap, _subsystem);
115  cDigiSize_Crate.load(ig, _emap, _subsystem);
116  MonitorElement *meNumEvents = ig.get(_subsystem+
117  "/RunInfo/NumberOfEvents");
118  int numEvents = meNumEvents->getBinContent(1);
119  bool unknownIdsPresent = ig.get(_subsystem+"/"
120  +_taskname+"/UnknownIds")->getBinContent(1)>0;
121 
122  // book the Numer of Events - set axis extendable
123  if (!_booked)
124  {
126  _meNumEvents = ib.book1D("NumberOfEvents", "NumberOfEvents",
127  1000, 1, 1001); // 1000 to start with
128  _meNumEvents->getTH1()->SetCanExtend(TH1::kXaxis);
129 
131  _booked=true;
132  }
134 
135  // ANALYZE THIS LS for LS BASED FLAGS
136  std::vector<HcalGenericDetId> gids = _emap->allPrecisionId();
137  for (std::vector<HcalGenericDetId>::const_iterator it=gids.begin();
138  it!=gids.end(); ++it)
139  {
140  if (!it->isHcalDetId())
141  continue;
142 
143  HcalDetId did = HcalDetId(it->rawId());
145 
146  cOccupancy_depth.getBinContent(did)>0?_xNChs.get(eid)++:
147  _xNChs.get(eid)+=0;
148  _cOccupancy_depth.fill(did, cOccupancy_depth.getBinContent(did));
149  // digi size
150  cDigiSize_Crate.getMean(eid)!=
151  _refDigiSize[did.subdet()]?
152  _xDigiSize.get(eid)++:_xDigiSize.get(eid)+=0;
153  cDigiSize_Crate.getRMS(eid)!=0?
154  _xDigiSize.get(eid)++:_xDigiSize.get(eid)+=0;
155  }
156 
157  // GENERATE SUMMARY AND STORE IT
158  std::vector<flag::Flag> vtmpflags;
159  vtmpflags.resize(nLSFlags);
160  vtmpflags[fDigiSize]=flag::Flag("DigiSize");
161  vtmpflags[fNChsHF]=flag::Flag("NChsHF");
162  vtmpflags[fUnknownIds]=flag::Flag("UnknownIds");
163  vtmpflags[fLED]=flag::Flag("LEDMisfire");
164  for (std::vector<uint32_t>::const_iterator it=_vhashCrates.begin();
165  it!=_vhashCrates.end(); ++it)
166  {
167  HcalElectronicsId eid(*it);
168  HcalDetId did = HcalDetId(_emap->lookup(eid));
169 
170  // reset all the tmp flags to fNA
171  // MUST DO IT NOW! AS NCDAQ MIGHT OVERWRITE IT!
172  for (std::vector<flag::Flag>::iterator ft=vtmpflags.begin();
173  ft!=vtmpflags.end(); ++ft)
174  ft->reset();
175 
176  if (_xDigiSize.get(eid)>0)
177  vtmpflags[fDigiSize]._state = flag::fBAD;
178  else
179  vtmpflags[fDigiSize]._state = flag::fGOOD;
180 
181  if (did.subdet() == HcalForward)
182  {
183  if (_xNChs.get(eid)!=_xNChsNominal.get(eid))
184  vtmpflags[fNChsHF]._state = flag::fBAD;
185  else
186  vtmpflags[fNChsHF]._state = flag::fGOOD;
187  } else {
188  vtmpflags[fNChsHF]._state = flag::fNA;
189  }
190  if (unknownIdsPresent)
191  vtmpflags[fUnknownIds]._state = flag::fBAD;
192  else
193  vtmpflags[fUnknownIds]._state = flag::fGOOD;
194 
195  if ((did.subdet() == HcalBarrel) || (did.subdet() == HcalBarrel) || (did.subdet() == HcalBarrel) || (did.subdet() == HcalBarrel)) {
196  std::string ledHistName = _subsystem + "/" + _taskname + "/LED_CUCountvsLS/Subdet/";
197  if (did.subdet() == HcalBarrel) {
198  ledHistName += "HB";
199  } else if (did.subdet() == HcalEndcap) {
200  ledHistName += "HE";
201  } else if (did.subdet() == HcalOuter) {
202  ledHistName += "HO";
203  } else if (did.subdet() == HcalForward) {
204  ledHistName += "HF";
205  }
206  MonitorElement* ledHist = ig.get(ledHistName);
207  if (ledHist) {
208  bool ledSignalPresent = (ledHist->getEntries() > 0);
209  if (ledSignalPresent)
210  vtmpflags[fLED]._state = flag::fBAD;
211  else
212  vtmpflags[fLED]._state = flag::fGOOD;
213  } else {
214  vtmpflags[fLED]._state = flag::fNA;
215  }
216  } else {
217  vtmpflags[fLED]._state = flag::fNA;
218  }
219 
220 
221  // push all the flags for this crate
222  lssum._vflags.push_back(vtmpflags);
223  }
224 
225  // push all the flags for all FEDs for this LS
226  _vflagsLS.push_back(lssum);
227  cDigiSize_Crate.reset();
228  cOccupancy_depth.reset();
229  }
230 
231  /*
232  * End Job
233  */
234  /* virtual */ std::vector<flag::Flag> DigiRunSummary::endJob(
236  {
237  if (_ptype!=fOffline)
238  return std::vector<flag::Flag>();
239 
241 
242  // PREPARE LS AND RUN BASED FLAGS TO USE IT FOR BOOKING
243  std::vector<flag::Flag> vflagsPerLS;
244  std::vector<flag::Flag> vflagsPerRun;
245  vflagsPerLS.resize(nLSFlags);
246  vflagsPerRun.resize(nDigiFlag-nLSFlags+1);
247  vflagsPerLS[fDigiSize]=flag::Flag("DigiSize");
248  vflagsPerLS[fNChsHF]=flag::Flag("NChsHF");
249  vflagsPerLS[fUnknownIds]=flag::Flag("UnknownIds");
250  vflagsPerLS[fLED]=flag::Flag("LEDMisfire");
251  vflagsPerRun[fDigiSize]=flag::Flag("DigiSize");
252  vflagsPerRun[fNChsHF]=flag::Flag("NChsHF");
253  vflagsPerRun[fUniHF-nLSFlags+1]=flag::Flag("UniSlotHF");
254  vflagsPerRun[fDead-nLSFlags+1]=flag::Flag("Dead");
255 
256  // INITIALIZE SUMMARY CONTAINERS
257  ContainerSingle2D cSummaryvsLS;
258  Container2D cSummaryvsLS_Crate;
259  cSummaryvsLS.initialize(_name, "SummaryvsLS",
263  cSummaryvsLS.book(ib, _subsystem);
264  cSummaryvsLS_Crate.initialize(_name, "SummaryvsLS",
267  new quantity::FlagQuantity(vflagsPerLS),
269  cSummaryvsLS_Crate.book(ib, _emap, _subsystem);
270 
271  // INITIALIZE CONTAINERS WE NEED TO LOAD or BOOK
272  Container2D cOccupancyCut_depth;
273  Container2D cDead_depth, cDead_Crate;
274  cOccupancyCut_depth.initialize(_taskname, "OccupancyCut",
279  cDead_depth.initialize(_name, "Dead",
284  cDead_Crate.initialize(_name, "Dead",
289 
290  // LOAD
291  cOccupancyCut_depth.load(ig, _emap, _subsystem);
292  cDead_depth.book(ib, _emap, _subsystem);
293  cDead_Crate.book(ib, _emap, _subsystem);
294 
295  // ANALYZE RUN BASED QUANTITIES
296  std::vector<HcalGenericDetId> gids = _emap->allPrecisionId();
297  for (std::vector<HcalGenericDetId>::const_iterator it=gids.begin();
298  it!=gids.end(); ++it)
299  {
300  if (!it->isHcalDetId())
301  continue;
302 
303  HcalDetId did = HcalDetId(it->rawId());
305 
306  if (_cOccupancy_depth.getBinContent(did)<1)
307  {
308  _xDead.get(eid)++;
309  cDead_depth.fill(did);
310  cDead_Crate.fill(eid);
311  }
312  if (did.subdet()==HcalForward)
313  _xUniHF.get(eid)+=cOccupancyCut_depth.getBinContent(did);
314  }
315  // ANALYZE FOR HF SLOT UNIFORMITY
316  for (uintCompactMap::const_iterator it=_xUniHF.begin();
317  it!=_xUniHF.end(); ++it)
318  {
319  uint32_t hash1 = it->first;
320  HcalElectronicsId eid1(hash1);
321  double x1 = it->second;
322 
323  for (uintCompactMap::const_iterator jt=_xUniHF.begin();
324  jt!=_xUniHF.end(); ++jt)
325  {
326  if (jt==it)
327  continue;
328 
329  double x2 = jt->second;
330  if (x2==0)
331  continue;
332  if (x1/x2<_thresh_unihf)
333  _xUni.get(eid1)++;
334  }
335  }
336 
337  /*
338  * Iterate over each crate
339  * Iterate over each LS Summary
340  * Iterate over all flags
341  * set...
342  */
343  // iterate over all crates
344  std::vector<flag::Flag> sumflags;
345  int icrate=0;
346  for (auto& it_crate : _vhashCrates) {
347  flag::Flag fSumRun("DIGI"); // summary flag for this FED
348  flag::Flag ffDead("Dead");
349  flag::Flag ffUniSlotHF("UniSlotHF");
350  HcalElectronicsId eid(it_crate);
351  HcalDetId did = HcalDetId(_emap->lookup(eid));
352 
353  // ITERATE OVER EACH LS
354  for (std::vector<LSSummary>::const_iterator itls=_vflagsLS.begin();
355  itls!=_vflagsLS.end(); ++itls)
356  {
357  int iflag=0;
358  flag::Flag fSumLS("DIGI");
359  for (std::vector<flag::Flag>::const_iterator ft=
360  itls->_vflags[icrate].begin(); ft!=itls->_vflags[icrate].end();
361  ++ft)
362  {
363  cSummaryvsLS_Crate.setBinContent(eid, itls->_LS, int(iflag), ft->_state);
364  fSumLS+=(*ft);
365  iflag++;
366  }
367  cSummaryvsLS.setBinContent(eid, itls->_LS, fSumLS._state);
368  fSumRun+=fSumLS;
369  }
370 
371  // EVALUATE RUN BASED FLAGS
372  if (_xDead.get(eid)>0)
373  ffDead._state = flag::fBAD;
374  else
375  ffDead._state = flag::fGOOD;
376  if (did.subdet() == HcalForward)
377  {
378  if (_xUni.get(eid)>0)
379  ffUniSlotHF._state = flag::fBAD;
380  else
381  ffUniSlotHF._state = flag::fGOOD;
382  }
383  fSumRun+=ffDead+ffUniSlotHF;
384 
385  // push the summary flag for this FED for the Whole Run
386  sumflags.push_back(fSumRun);
387 
388  // increment fed
389  icrate++;
390  }
391 
392  return sumflags;
393  }
394 }
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:83
HcalSubdetector subdet() const
get the subdetector
Definition: HcalDetId.h:146
ContainerXXX< uint32_t > _xUni
virtual double getRMS(HcalDetId const &, int axix=1)
Definition: Container1D.cc:193
void initialize(HcalElectronicsMap const *, ElectronicsMapType etype=fHcalElectronicsMap)
virtual void beginRun(edm::Run const &, edm::EventSetup const &)
Definition: DQClient.cc:13
virtual CompactMap::const_iterator begin()
Definition: ContainerXXX.h:69
State _state
Definition: Flag.h:62
TH1 * getTH1() const
std::string _taskname
Definition: DQClient.h:46
virtual void initialize(std::string const &folder, quantity::Quantity *, quantity::Quantity *, quantity::Quantity *qz=new quantity::ValueQuantity(quantity::fN), int debug=0)
int const SPIGOT_MIN
Definition: Constants.h:108
HcalElectronicsMap const * _emap
Definition: DQClient.h:53
virtual void reset()
Definition: ContainerXXX.h:292
filter::HashFilter _filter_FEDHF
int const FIBER_VME_MIN
Definition: Constants.h:113
std::vector< uint32_t > _vhashCrates
Definition: DQClient.h:57
int const FIBERCH_MIN
Definition: Constants.h:122
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:70
ProcessingType _ptype
Definition: DQModule.h:43
virtual void reset()
Definition: Container1D.cc:60
std::vector< uint32_t > _vhashuTCA
void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:268
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:98
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:106
int const FIBER_uTCA_MIN1
Definition: Constants.h:116
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:41
std::vector< uint32_t > _vhashFEDHF
virtual double getMean(HcalDetId const &, int axis=1)
Definition: Container1D.cc:189
MonitorElement * get(std::string const &path)
Definition: DQMStore.cc:303
int const CRATE_uTCA_MIN
Definition: Constants.h:88
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:132
double getEntries() const
get # of entries
virtual void book(HcalElectronicsMap const *)
Definition: ContainerXXX.h:87
virtual void initialize(std::string const &folder, hashfunctions::HashType, quantity::Quantity *, quantity::Quantity *, quantity::Quantity *qz=new quantity::ValueQuantity(quantity::fN), int debug=0)
Definition: Container2D.cc:25
ContainerXXX< uint32_t > _xNChs
void setBinContent(HcalDetId const &, int) override
Definition: Container2D.cc:163
double getBinContent(int binx) const
get content of bin (1-D)
virtual STDTYPE & get(HcalDetId const &)
Definition: ContainerXXX.h:197
electronicsmap::ElectronicsMap _ehashmap
void fill(HcalDetId const &) override
Definition: Container2D.cc:52
virtual void initialize(FilterType ftype, hashfunctions::HashType htype, std::vector< uint32_t > const &)
Definition: HashFilter.cc:17
std::string _subsystem
Definition: DQModule.h:48
virtual void load(DQMStore::IGetter &, HcalElectronicsMap const *, std::string const &subsystem="Hcal", std::string const &aux="")
Definition: Container1D.cc:450
virtual void initialize(hashfunctions::HashType, int debug=0)
Definition: ContainerXXX.h:81
void book(DQMStore::IBooker &, HcalElectronicsMap const *, std::string subsystem="Hcal", std::string aux="") override
Definition: Container2D.cc:558
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:95
Definition: Run.h:45
ContainerXXX< uint32_t > _xDead
ib
Definition: cuy.py:662