CMS 3D CMS Logo

ValueQuantity.h
Go to the documentation of this file.
1 #ifndef ValueQuantity_h
2 #define ValueQuantity_h
3 
6 #include "boost/unordered_map.hpp"
7 
8 namespace hcaldqm
9 {
10  namespace quantity
11  {
13  {
14  fN = 0,
15  fEvents = 1,
16  fEnergy = 2,
18  fADC_128 = 4,
19  fADC_5 = 5,
20  fADC_15 = 6,
21  ffC_10000 = 7,
22  ffC_1000 = 8,
23  ffC_3000 = 9,
24  fTiming_TS = 10,
26  fLS = 12,
27  fEt_256 = 13,
28  fEt_128 = 14,
29  fFG = 15,
30  fRatio = 16,
31  fDigiSize = 17,
33  fRatio2 = 19,
34  fdEtRatio = 20,
35  fSumdEt = 21,
40  fDiffAbs = 26,
42  fN_to8000 = 28,
47  fBX = 33,
49  fState = 35,
51  fDataSize = 37,
56  fADC_256 = 42,
63  fBadTDC = 49,
64  fRBX = 50,
69  fBX_36 = 55,
70  fADC_256_4 = 56, // ADC from 0-255, with 4 ADC granularity
71  };
72  const std::map<ValueQuantityType, std::string> name_value = {
73  {fN,"N"},
74  {fEvents,"Events"},
75  {fEnergy,"Energy"},
76  {fTiming_ns,"Timing"},
77  {fADC_5,"ADC (QIE8)"},
78  {fADC_15,"ADC (QIE8)"},
79  {fADC_128,"ADC (QIE8)"},
80  {fADC_256,"ADC"},
81  {fQIE10ADC_256,"ADC (QIE10/11)"},
82  {fQIE10ADC_16,"ADC (QIE10/11)"},
83  {ffC_1000,"fC (QIE8)"},
84  {ffC_3000,"fC (QIE8)"},
85  {ffC_10000,"fC (QIE8)"},
86  {fQIE8fC_1000_50,"fC"},
87  {fQIE10fC_2000,"fC"},
88  {fQIE10fC_10000,"fC"},
89  {fQIE10fC_400000,"fC"},
90  {ffC_generic_10000,"fC (QIE8/10/11)"},
91  {ffC_generic_400000,"fC (QIE8/10/11)"},
92  {fTiming_TS,"Timing"},
93  {fTiming_TS200,"Timing"},
94  {fLS,"LS"},
95  {fEt_256,"Et"},
96  {fEt_128,"Et"},
97  {fFG,"FG"},
98  {fRatio,"Ratio"},
99  {fDigiSize,"DigiSize"},
100  {fAroundZero,"Q"},
101  {fRatio2,"Ratio"},
102  {fdEtRatio,"dEtRatio"},
103  {fSumdEt,"SumdEt"},
104  {fTiming_100TS,"Timing"},
105  {fQIE10TDC_64,"TDC"},
106  {fQIE10TDC_16,"TDC"},
107  {fDiffAbs,"Q"},
108  {fRatio_0to2,"Ratio"},
109  {fN_to8000,"N"},
110  {fEnergyTotal,"Energy"},
111  {fN_m0to10000,"N"},
112  {fEtCorr_256,"Et"},
113  {fADCCorr_128,"ADC"},
114  {fBX,"BX"},
115  {fEnergy_1TeV,"Energy"},
116  {fState,"State"},
117  {fDataSize,"FED Data Size (kB)"},
118  {fTime_ns_250,"Time (ns)"},
119  {fDualAnodeAsymmetry, "(q_{1}-q_{2})/(q_{1}+q_{2})"},
120  {fTimingRatio, "q_{SOI+1}/q_{SOI}"},
121  {fQIE10fC_100000Coarse,"fC"},
122  {fBadTDC, "TDC"},
123  {fRBX, "RBX"},
124  {fTimingDiff_ns, "#Delta timing [ns]"},
125  {ffC_1000000, "fC"},
126  {fTime_ns_250_coarse, "Time (ns)"},
127  {fCapidMinusBXmod4, "(CapId - BX) % 4"},
128  {fBX_36, "BX"},
129  {fADC_256_4, "ADC"},
130  };
131  const std::map<ValueQuantityType, double> min_value = {
132  {fN,-0.05},
133  {fEvents,0},
134  {fEnergy,0},
135  {fTiming_ns,-50},
136  {fADC_128,-0.5},
137  {fADC_5,-0.5},
138  {fADC_15,-0.5},
139  {ffC_10000,0},
140  {ffC_1000,0},
141  {ffC_3000,0},
142  {fTiming_TS,-0.5},
143  {fTiming_TS200,-0.5},
144  {fLS,0.5},
145  {fEt_256,0},
146  {fEt_128,0},
147  {fFG,0},
148  {fRatio,0},
149  {fDigiSize,-0.5},
150  {fAroundZero,-1},
151  {fRatio2,0.5},
152  {fdEtRatio,0},
153  {fSumdEt,0},
154  {fTiming_100TS,-0.5},
155  {fQIE10ADC_256,-0.5},
156  {fQIE10ADC_16,-0.5},
157  {fQIE10TDC_64,-0.5},
158  {fQIE10TDC_16,-0.5},
159  {fDiffAbs,0},
160  {fRatio_0to2,0},
161  {fN_to8000,0},
162  {fEnergyTotal,0},
163  {fN_m0to10000,-0.05},
164  {fEtCorr_256,-1},
165  {fADCCorr_128,-2},
166  {fBX,-0.5},
167  {fEnergy_1TeV,0},
168  {fState,flag::fNA},
169  {fQIE10fC_400000,0},
170  {fDataSize,0},
171  {fQIE10fC_2000,0},
172  {fQIE10fC_10000,0},
173  {fQIE8fC_1000_50,0},
174  {fTime_ns_250,-0.5},
175  {fADC_256,-0.5},
176  {ffC_generic_10000,0.},
177  {ffC_generic_400000,0.},
178  {fDualAnodeAsymmetry,-1.},
179  {fTimingRatio,0.},
181  {fBadTDC,49.5},
182  {fRBX, 0.5},
183  {fTimingDiff_ns, -125.},
184  {ffC_1000000,0.},
185  {fTime_ns_250_coarse, -0.5},
186  {fCapidMinusBXmod4, -0.5},
187  {fBX_36, -0.5},
188  {fADC_256_4, -0.5},
189  };
190  const std::map<ValueQuantityType, double> max_value = {
191  {fN,1000},
192  {fEvents,1000},
193  {fEnergy,200},
194  {fTiming_ns,50},
195  {fADC_128,127.5},
196  {fADC_5,5},
197  {fADC_15,15},
198  {ffC_10000,10000},
199  {ffC_1000,1000},
200  {ffC_3000,3000},
201  {fTiming_TS,9.5},
202  {fTiming_TS200,9.5},
203  {fLS,4000.5},
204  {fEt_256,255.5},
205  {fEt_128,255.5},
206  {fFG,2},
207  {fRatio,1},
208  {fDigiSize,20.5},
209  {fAroundZero,1},
210  {fRatio2,1.5},
211  {fdEtRatio,1},
212  {fSumdEt,1000},
213  {fTiming_100TS,99.5},
214  {fQIE10ADC_256,255.5},
215  {fQIE10ADC_16,15.5},
216  {fQIE10TDC_64,63.5},
217  {fQIE10TDC_16,15.5},
218  {fDiffAbs,1},
219  {fRatio_0to2,2},
220  {fN_to8000,8000},
221  {fEnergyTotal,100000},
222  {fN_m0to10000,10000},
223  {fEtCorr_256,257},
224  {fADCCorr_128,128},
225  {fBX,3600.5},
226  {fEnergy_1TeV,1000},
228  {fQIE10fC_400000,400000},
229  {fDataSize,100},
230  {fQIE10fC_2000,2000},
231  {fQIE10fC_10000,10000},
232  {fQIE8fC_1000_50,1000},
233  {fTime_ns_250,249.5},
234  {fADC_256,255.5},
235  {ffC_generic_10000,10000},
236  {ffC_generic_400000,400000},
237  {fDualAnodeAsymmetry,1.},
238  {fTimingRatio,2.5},
239  {fQIE10fC_100000Coarse,100000},
240  {fBadTDC,61.5},
241  {fRBX, 18.5},
242  {fTimingDiff_ns, 125.},
243  {ffC_1000000,1.e6},
244  {fTime_ns_250_coarse, 249.5},
245  {fCapidMinusBXmod4, 3.5},
246  {fBX_36, 3564.-0.5},
247  {fADC_256_4, 255},
248  };
249  const std::map<ValueQuantityType, int> nbins_value = {
250  {fN,200},
251  {fEvents,200},
252  {fEnergy,100},
253  {fTiming_ns,200},
254  {fADC_128,128},
255  {fADC_5,100},
256  {fADC_15,300},
257  {ffC_10000,1000},
258  {ffC_1000,200},
259  {ffC_3000,600},
260  {fTiming_TS,10},
261  {fTiming_TS200,200},
262  {fLS,4000},
263  {fEt_256,256},
264  {fEt_128,128},
265  {fFG,2},
266  {fRatio,100},
267  {fDigiSize,21},
268  {fAroundZero,100},
269  {fRatio2,100},
270  {fdEtRatio,100},
271  {fSumdEt,100},
272  {fTiming_100TS,100},
273  {fQIE10ADC_256,256},
274  {fQIE10TDC_64,64},
275  {fQIE10TDC_16,16},
276  {fDiffAbs,200},
277  {fRatio_0to2,100},
278  {fN_to8000,8000},
279  {fEnergyTotal,500},
280  {fN_m0to10000,100},
281  {fEtCorr_256,258},
282  {fADCCorr_128,130},
283  {fBX,3601},
284  {fEnergy_1TeV,200},
286  {fQIE10fC_400000,1000},
287  {fDataSize,100},
288  {fQIE10fC_2000,100},
289  {fQIE10fC_10000,500},
290  {fQIE8fC_1000_50,50},
291  {fTime_ns_250,250},
292  {fADC_256,256},
293  {ffC_generic_10000,10000},
294  {ffC_generic_400000,10000},
295  {fDualAnodeAsymmetry,40},
296  {fTimingRatio,50},
297  {fQIE10fC_100000Coarse,1000},
298  {fBadTDC,12},
299  {fRBX, 18},
300  {fTimingDiff_ns, 40},
301  {ffC_1000000,1000},
302  {fTime_ns_250_coarse, 100},
303  {fCapidMinusBXmod4, 4},
304  {fBX_36, 99},
305  {fADC_256_4, 64},
306  };
307  class ValueQuantity : public Quantity
308  {
309  public:
312  Quantity(name_value.at(type), isLog), _type(type)
313  {}
314  ~ValueQuantity() override {}
315 
317  {return new ValueQuantity(_type, _isLog);}
318 
319  // get Value to be overriden
320  int getValue(int x) override
321  {
322  int ret_x = x;
323  if (_showOverflow) {
324  if (x < min()) {
325  ret_x = min();
326  } else if (x > max()) {
327  ret_x = max();
328  }
329  }
330  return ret_x;
331  }
332  double getValue(double x) override
333  {
334  double ret_x = x;
335  if (_showOverflow) {
336  if (x < min()) {
337  ret_x = min();
338  } else if (x > max()) {
339  ret_x = max();
340  }
341  }
342  return ret_x;
343  }
344 
345  // standard properties
346  QuantityType type() override {return fValueQuantity;}
347  int nbins() override {return nbins_value.at(_type);}
348  double min() override {return min_value.at(_type);}
349  double max() override {return max_value.at(_type);}
350 
351  void setBits(TH1* o) override
352  {Quantity::setBits(o);setLS(o);}
353  virtual void setLS(TH1* o)
354  {
355  if (_type==fLS)
356  {
357  // for LS axis - set the bit
358  // set extendable axes.
360  // o->SetCanExtend(TH1::kXaxis);
361  }
362  }
363 
364  protected:
366  };
367 
369  {
370  public:
372  FlagQuantity(std::vector<flag::Flag> const& flags) :
373  _flags(flags) {}
374  ~FlagQuantity() override {}
375 
376  FlagQuantity* makeCopy() override
377  {return new FlagQuantity(_flags);}
378 
379  std::string name() override {return "Flag";}
380  int nbins() override {return _flags.size();}
381  double min() override {return 0;}
382  double max() override {return _flags.size();}
383  int getValue(int f) override {return f;}
384  uint32_t getBin(int f) override {return f+1;}
385  std::vector<std::string> getLabels() override
386  {
387  std::vector<std::string> vnames;
388  for (std::vector<flag::Flag>::const_iterator
389  it=_flags.begin(); it!=_flags.end(); ++it)
390  vnames.push_back(it->_name);
391 
392  return vnames;
393  }
394  protected:
395 
396  std::vector<flag::Flag> _flags;
397  };
398 
399  class LumiSection : public ValueQuantity
400  {
401  public:
402  LumiSection() : ValueQuantity(fLS), _n(4000) {}
403  LumiSection(int n) : ValueQuantity(fLS), _n(n) {}
404  ~LumiSection() override {}
405 
406  LumiSection* makeCopy() override
407  {return new LumiSection(_n);}
408 
409  std::string name() override {return "LS";}
410  int nbins() override {return _n;}
411  double min() override {return 1;}
412  double max() override {return _n+1;}
413  int getValue(int l) override {
414  return l;
415  }
416  uint32_t getBin(int l) override
417  {return getValue(l);}
418  void setMax(double x) override {_n=x;}
419 
420  protected:
421  int _n;
422  };
423 
428  {
429  public:
430  LumiSectionCoarse() : ValueQuantity(fLS), _n(4000), _binning(10)
431  {}
433  _n(n), _binning(binning)
434  {}
435  ~LumiSectionCoarse() override {}
436 
438  {return new LumiSectionCoarse(_n, _binning);}
439 
440  std::string name() override {return "LS";}
441  int nbins() override {return (_n + _binning - 1) / _binning;}
442  double min() override {return 1;}
443  double max() override {return _n+1;}
444  int getValue(int l) override {return l;}
445  uint32_t getBin(int l) override
446  {
447  return (l + _binning - 1) / _binning;
448  }
449  void setMax(double x) override {_n=x;}
450 
451  protected:
452  int _n;
453  int _binning;
454  };
455 
456  class RunNumber : public ValueQuantity
457  {
458  public:
460  RunNumber(std::vector<int> runs) :
461  _runs(runs)
462  {}
463  ~RunNumber() override {}
464 
465  std::string name() override {return "Run";}
466  int nbins() override {return _runs.size();}
467  double min() override {return 0;}
468  double max() override {return _runs.size();}
469  std::vector<std::string> getLabels() override
470  {
471  char name[10];
472  std::vector<std::string> labels;
473  for (uint32_t i=0; i<_runs.size(); i++)
474  {
475  sprintf(name, "%d", _runs[i]);
476  labels.push_back(name);
477  }
478  return labels;
479  }
480  int getValue(int run) override
481  {
482  int ir = -1;
483  for (uint32_t i=0; i<_runs.size(); i++)
484  if (_runs[i]==run)
485  {
486  ir = (int)i;
487  break;
488  }
489 
490  if (ir==-1)
491  throw cms::Exception("HCALDQM")
492  << "run number doens't exist " << run;
493 
494  return ir;
495  }
496 
497  uint32_t getBin(int run) override
498  {
499  return (this->getValue(run)+1);
500  }
501 
502  protected:
503  std::vector<int> _runs;
504  };
505 
506  class EventNumber : public ValueQuantity
507  {
508  public:
510  EventNumber(int nevents) :
511  ValueQuantity(fN), _nevents(nevents)
512  {}
513  ~EventNumber() override {}
514 
515  std::string name() override {return "Event";}
516  int nbins() override {return _nevents;}
517  double min() override {return 0.5;}
518  double max() override {return _nevents+0.5;}
519 
520  protected:
521  int _nevents;
522  };
523 
524  class EventType : public ValueQuantity
525  {
526  public:
528  EventType(std::vector<uint32_t> const& vtypes):
530  {this->setup(vtypes);}
531  ~EventType() override {}
532 
533  virtual void setup(std::vector<uint32_t> const& vtypes)
534  {
535  std::cout << "SIZE = " << vtypes.size() << std::endl;
536  for (uint32_t i=0; i<vtypes.size(); i++)
537  _types.insert(std::make_pair((uint32_t)vtypes[i], i));
538  }
539  int getValue(int v) override
540  {
541  return _types[(uint32_t)v];
542  }
543  uint32_t getBin(int v) override
544  {
545  return getValue(v)+1;
546  }
547 
548  int nbins() override {return _types.size();}
549  double min() override {return 0;}
550  double max() override {return _types.size();}
551  std::string name() override {return "Event Type";}
552 
553  protected:
554  typedef boost::unordered_map<uint32_t, int> TypeMap;
555  TypeMap _types;
556 
557  public:
558  std::vector<std::string> getLabels() override
559  {
560  std::vector<std::string> labels(_types.size());
561  std::cout << "SIZE = " << _types.size() << std::endl;
562  for(auto const& v : _types)
563  {
565  }
566  return labels;
567  }
568  EventType* makeCopy() override
569  {
570  std::vector<uint32_t> vtypes;
571  for(auto const& p : _types)
572  {
573  vtypes.push_back(p.first);
574  }
575 
576  std::sort(vtypes.begin(), vtypes.end());
577  return new EventType(vtypes);
578  }
579  };
580  }
581 }
582 
583 #endif
ValueQuantity(ValueQuantityType type, bool isLog=false)
type
Definition: HCALResponse.h:21
const std::map< ValueQuantityType, int > nbins_value
virtual void setBits(TH1 *o)
Definition: Quantity.h:65
virtual std::string name()
Definition: Quantity.h:47
std::string name() override
uint32_t getBin(int run) override
FlagQuantity(std::vector< flag::Flag > const &flags)
std::vector< std::string > getLabels() override
uint32_t getBin(int v) override
void setBits(TH1 *o) override
def setup(process, global_tag, zero_tesla=False)
Definition: GeneralSetup.py:2
LumiSectionCoarse * makeCopy() override
std::vector< Variable::Flags > flags
Definition: MVATrainer.cc:135
std::vector< int > _runs
virtual void setup(std::vector< uint32_t > const &vtypes)
int getValue(int run) override
const std::map< ValueQuantityType, double > min_value
uint32_t getBin(int l) override
std::string name() override
int getValue(int f) override
FlagQuantity * makeCopy() override
boost::unordered_map< uint32_t, int > TypeMap
std::vector< flag::Flag > _flags
double f[11][100]
std::string name() override
int getValue(int v) override
std::string ogtype2string(constants::OrbitGapType type)
Definition: Utilities.cc:229
void setMax(double x) override
std::vector< std::string > getLabels() override
const std::map< ValueQuantityType, std::string > name_value
Definition: ValueQuantity.h:72
EventType * makeCopy() override
void setMax(double x) override
std::string name() override
EventType(std::vector< uint32_t > const &vtypes)
QuantityType type() override
int getValue(int l) override
uint32_t getBin(int l) override
virtual bool isLog()
Definition: Quantity.h:48
const std::map< ValueQuantityType, double > max_value
LumiSection * makeCopy() override
RunNumber(std::vector< int > runs)
int const BIT_OFFSET
Definition: Constants.h:313
std::vector< std::string > getLabels() override
uint32_t getBin(int f) override
ValueQuantity * makeCopy() override
int const BIT_AXIS_LS
Definition: Constants.h:317
double getValue(double x) override
std::string name() override