CMS 3D CMS Logo

Utilities.h
Go to the documentation of this file.
1 #ifndef DQM_HcalCommon_Utilities_h
2 #define DQM_HcalCommon_Utilities_h
3 
4 /*
5  * file: Utilities.h
6  * Author: Viktor Khristenko
7  *
8  * Description:
9  * Utility functions
10  */
11 
14 
15 namespace hcaldqm {
16  namespace utilities {
17  /*
18  * adc2fC lookup from conditions
19  * fC values are stored in CaloSamples tool
20  */
21  template <class Digi>
22  CaloSamples loadADC2fCDB(const edm::ESHandle<HcalDbService> &conditions, const HcalDetId did, const Digi &digi) {
23  CaloSamples calo_samples;
24  const HcalQIECoder *channelCoder = conditions->getHcalCoder(did);
25  const HcalQIEShape *shape = conditions->getHcalShape(channelCoder);
26  HcalCoderDb coder(*channelCoder, *shape);
27  coder.adc2fC(digi, calo_samples);
28  return calo_samples;
29  }
30 
31  // Get pedestal-subtracted charge
32  template <class Digi>
34  const CaloSamples &calo_samples,
35  const HcalDetId did,
36  const Digi &digi,
37  unsigned int n) {
39  int capid = digi[n].capid();
40  return calo_samples[n] - calibrations.pedestal(capid);
41  }
42 
43  template <class Digi>
44  double aveTSDB(const edm::ESHandle<HcalDbService> &conditions,
45  const CaloSamples &calo_samples,
46  const HcalDetId did,
47  const Digi &digi,
48  unsigned int i_start,
49  unsigned int i_end) {
50  double sumQ = 0;
51  double sumQT = 0;
52  for (unsigned int i = i_start; i <= i_end; ++i) {
53  double q = adc2fCDBMinusPedestal(conditions, calo_samples, did, digi, i);
54  sumQ += q;
55  sumQT += (i + 1) * q;
56  }
57  return (sumQ > 0 ? sumQT / sumQ - 1 : constants::GARBAGE_VALUE);
58  }
59 
60  template <class Digi>
61  double sumQDB(const edm::ESHandle<HcalDbService> &conditions,
62  const CaloSamples &calo_samples,
63  const HcalDetId did,
64  const Digi &digi,
65  unsigned int i_start,
66  unsigned int i_end) {
67  double sumQ = 0;
68  for (unsigned int i = i_start; i <= i_end; ++i) {
69  sumQ += adc2fCDBMinusPedestal(conditions, calo_samples, did, digi, i);
70  }
71  return sumQ;
72  }
73 
74  /*
75  * Some useful functions for QIE10/11 Data Frames
76  */
77  template <typename FRAME>
78  double aveTS_v10(FRAME const &frame, double ped = 0, int i = 0, int j = 3) {
79  double sumQ = 0;
80  double sumQT = 0;
81  for (int ii = i; ii <= j; ii++) {
82  double q = constants::adc2fC[frame[ii].adc()] - ped;
83  sumQ += q;
84  sumQT += (ii + 1) * q;
85  }
86 
87  return sumQ > 0 ? sumQT / sumQ - 1 : constants::GARBAGE_VALUE;
88  }
89 
90  template <typename FRAME>
91  double sumQ_v10(FRAME const &frame, double ped, int i = 0, int j = 3) {
92  double sumQ = 0;
93  for (int ii = i; ii <= j; ii++)
94  sumQ += constants::adc2fC[frame[ii].adc()] - ped;
95  return sumQ;
96  }
97 
98  /*
99  * Some useful functions on QIE8 digis
100  */
101  template <typename DIGI>
102  int maxTS(DIGI const &digi, double ped = 0) {
103  int maxTS = -1;
104  double maxQ = -100;
105  for (int i = 0; i < digi.size(); i++)
106  if ((digi.sample(i).nominal_fC() - ped) > maxQ) {
107  maxQ = digi.sample(i).nominal_fC() - ped;
108  maxTS = i;
109  }
110  return maxTS;
111  }
112 
113  template <typename DIGI>
114  double aveTS(DIGI const &digi, double ped = 0, int i = 0, int j = 3) {
115  double sumQ = 0;
116  double sumQT = 0;
117  for (int ii = i; ii <= j; ii++) {
118  sumQ += digi.sample(ii).nominal_fC() - ped;
119  sumQT += (ii + 1) * (digi.sample(ii).nominal_fC() - ped);
120  }
121 
122  return sumQ > 0 ? sumQT / sumQ - 1 : constants::GARBAGE_VALUE;
123  }
124 
125  template <typename DIGI>
126  double sumQ(DIGI const &digi, double ped, int i = 0, int j = 3) {
127  double sum = 0;
128  for (int ii = i; ii <= j; ii++)
129  sum += (digi.sample(ii).nominal_fC() - ped);
130  return sum;
131  }
132 
133  template <typename DIGI>
134  double aveQ(DIGI const &digi, double ped, int i = 0, int j = 3) {
135  return sumQ<DIGI>(digi, ped, i, j) / (j - i + 1);
136  }
137 
138  template <typename DIGI>
139  double sumADC(DIGI const &digi, double ped, int i = 0, int j = 3) {
140  double sum = 0;
141  for (int ii = i; ii <= j; ii++)
142  sum += digi.sample(ii).adc() - ped;
143  return sum;
144  }
145 
146  template <typename DIGI>
147  double aveADC(DIGI const &digi, double ped, int i = 0, int j = 3) {
148  return sumADC<DIGI>(digi, ped, i, j) / (j - i + 1);
149  }
150 
151  /*
152  * Log Functions
153  */
154  template <typename STDTYPE>
155  void dqmdebug(STDTYPE const &x, int debug = 0) {
156  if (debug == 0)
157  return;
158  std::cout << "%MSG" << std::endl;
159  std::cout << "%MSG-d HCALDQM::" << x;
160  std::cout << std::endl;
161  }
162 
163  /*
164  * Useful Detector/Electronics/TrigTower Functions.
165  * For Fast Detector Validity Check
166  */
167  int getTPSubDet(HcalTrigTowerDetId const &);
168  int getTPSubDetPM(HcalTrigTowerDetId const &);
169 
170  // Get a list of all crates
171  std::vector<int> getCrateList(HcalElectronicsMap const *emap);
172  std::map<int, uint32_t> getCrateHashMap(HcalElectronicsMap const *emap);
173 
174  // returns a list of FEDs sorted.
175  std::vector<int> getFEDList(HcalElectronicsMap const *);
176  std::vector<int> getFEDVMEList(HcalElectronicsMap const *);
177  std::vector<int> getFEDuTCAList(HcalElectronicsMap const *);
178 
179  std::pair<uint16_t, uint16_t> fed2crate(int fed);
180  uint16_t crate2fed(int crate, int slot);
181  bool isFEDHBHE(HcalElectronicsId const &);
182  bool isFEDHF(HcalElectronicsId const &);
183  bool isFEDHO(HcalElectronicsId const &);
184 
188  uint32_t hash(HcalDetId const &);
189  uint32_t hash(HcalElectronicsId const &);
190  uint32_t hash(HcalTrigTowerDetId const &);
191 
192  /*
193  * Orbit Gap Related
194  */
196 
197  int getRBX(uint32_t iphi);
198  } // namespace utilities
199 } // namespace hcaldqm
200 
201 #endif
type
Definition: HCALResponse.h:21
double aveTS(DIGI const &digi, double ped=0, int i=0, int j=3)
Definition: Utilities.h:114
int maxTS(DIGI const &digi, double ped=0)
Definition: Utilities.h:102
double aveADC(DIGI const &digi, double ped, int i=0, int j=3)
Definition: Utilities.h:147
double aveTSDB(const edm::ESHandle< HcalDbService > &conditions, const CaloSamples &calo_samples, const HcalDetId did, const Digi &digi, unsigned int i_start, unsigned int i_end)
Definition: Utilities.h:44
double sumQDB(const edm::ESHandle< HcalDbService > &conditions, const CaloSamples &calo_samples, const HcalDetId did, const Digi &digi, unsigned int i_start, unsigned int i_end)
Definition: Utilities.h:61
std::pair< uint16_t, uint16_t > fed2crate(int fed)
Definition: Utilities.cc:10
uint16_t crate2fed(int crate, int slot)
Definition: Utilities.cc:27
double adc2fCDBMinusPedestal(const edm::ESHandle< HcalDbService > &conditions, const CaloSamples &calo_samples, const HcalDetId did, const Digi &digi, unsigned int n)
Definition: Utilities.h:33
std::tuple< unsigned int, int, int, DigiType, int, int, int, float > Digi
Definition: GenericDigi.h:40
std::vector< int > getFEDVMEList(HcalElectronicsMap const *)
Definition: Utilities.cc:101
int const GARBAGE_VALUE
Definition: Constants.h:242
void adc2fC(const HBHEDataFrame &df, CaloSamples &lf) const override
Definition: HcalCoderDb.cc:68
double sumQ_v10(FRAME const &frame, double ped, int i=0, int j=3)
Definition: Utilities.h:91
uint32_t hash(HcalDetId const &)
Definition: Utilities.cc:48
int getTPSubDetPM(HcalTrigTowerDetId const &)
constexpr int adc(sample_type sample)
get the ADC sample (12 bits)
std::map< int, uint32_t > getCrateHashMap(HcalElectronicsMap const *emap)
Definition: Utilities.cc:66
CaloSamples loadADC2fCDB(const edm::ESHandle< HcalDbService > &conditions, const HcalDetId did, const Digi &digi)
Definition: Utilities.h:22
double sumADC(DIGI const &digi, double ped, int i=0, int j=3)
Definition: Utilities.h:139
ii
Definition: cuy.py:590
double const adc2fC[256]
Definition: Constants.h:248
std::string ogtype2string(constants::OrbitGapType type)
Definition: Utilities.cc:196
std::vector< int > getCrateList(HcalElectronicsMap const *emap)
Definition: Utilities.cc:52
constexpr double pedestal(int fCapId) const
get pedestal for capid=0..3
double aveQ(DIGI const &digi, double ped, int i=0, int j=3)
Definition: Utilities.h:134
int getTPSubDet(HcalTrigTowerDetId const &)
#define debug
Definition: HDRShower.cc:19
bool isFEDHBHE(HcalElectronicsId const &)
Definition: Utilities.cc:142
const HcalQIECoder * getHcalCoder(const HcalGenericDetId &fId) const
const HcalQIEShape * getHcalShape(const HcalGenericDetId &fId) const
std::vector< int > getFEDList(HcalElectronicsMap const *)
Definition: Utilities.cc:83
std::vector< int > getFEDuTCAList(HcalElectronicsMap const *)
Definition: Utilities.cc:121
double aveTS_v10(FRAME const &frame, double ped=0, int i=0, int j=3)
Definition: Utilities.h:78
int getRBX(uint32_t iphi)
Definition: Utilities.cc:233
bool isFEDHO(HcalElectronicsId const &)
Definition: Utilities.cc:180
const HcalCalibrations & getHcalCalibrations(const HcalGenericDetId &fId) const
void dqmdebug(STDTYPE const &x, int debug=0)
Definition: Utilities.h:155
Readout chain identification for Hcal.
bool isFEDHF(HcalElectronicsId const &)
Definition: Utilities.cc:156
double sumQ(DIGI const &digi, double ped, int i=0, int j=3)
Definition: Utilities.h:126