CMS 3D CMS Logo

HcalQIESample.h
Go to the documentation of this file.
1 #ifndef DIGIHCAL_HCALQIESAMPLE_H
2 #define DIGIHCAL_HCALQIESAMPLE_H
3 
4 #include <ostream>
5 #include <boost/cstdint.hpp>
6 
7 static
8 #ifdef __CUDA_ARCH__
9  __constant__
10 #else
11  constexpr
12 #endif
13 float
14 nominal_adc2fc[128] = {-0.5f,0.5f,1.5f,2.5f,3.5f,4.5f,5.5f,6.5f,7.5f,8.5f,9.5f,10.5f,11.5f,12.5f,13.5f,
15  15.0f,17.0f,19.0f,21.0f,23.0f,25.0f,27.0f,
16  29.5f,32.5f,35.5f,38.5f,
17  42.0f,46.0f,50.0f,
18  54.5f,59.5f,64.5f,
19  59.5f,64.5f,69.5f,74.5f,79.5f,84.5f,89.5f,94.5f,99.5f,104.5f,109.5f,114.5f,119.5f,124.5f,129.5f,
20  137.0f,147.0f,157.0f,167.0f,177.0f,187.0f,197.0f,
21  209.5f,224.5f,239.5f,254.5f,
22  272.0f,292.0f,312.0f,
23  334.5f,359.5f,384.5f,
24  359.5f,384.5f,409.5f,434.5f,459.5f,484.5f,509.5f,534.5f,559.5f,584.5f,609.5f,634.5f,659.5f,684.5f,709.5f,
25  747.0f,797.0f,847.0f,897.0f,947.0f,997.0f,1047.0f,
26  1109.5f,1184.5f,1259.5f,1334.5f,
27  1422.0f,1522.0f,1622.0f,
28  1734.5f,1859.5f,1984.5f,
29  1859.5f,1984.5f,2109.5f,2234.5f,2359.5f,2484.5f,2609.5f,2734.5f,2859.5f,2984.5f,3109.5f,3234.5f,3359.5f,3484.5f,3609.5f,
30  3797.0f,4047.0f,4297.0f,4547.0f,4797.0f,5047.0f,5297.0f,
31  5609.5f,5984.5f,6359.5f,6734.5f,
32  7172.0f,7672.0f,8172.0f,
33  8734.5f,9359.5f,9984.5f};
34 
42 public:
44  : theSample{0}
45  {}
47  : theSample{data}
48  {}
50  int fiberchan, bool dv=true, bool er=false)
51  : theSample((uint16_t)((adc&0x7f) | ((capid&0x3)<<7) |
52  (((fiber-1)&0x7)<<13) | ((fiberchan&0x3)<<11) |
53  ((dv)?(0x0200):(0)) | ((er)?(0x0400):(0))))
54  {}
55 
57  constexpr uint16_t raw() const { return theSample; }
59  constexpr int adc() const { return theSample&0x7F; }
61  constexpr double nominal_fC() const {
62  return nominal_adc2fc[adc()];
63  }
65  constexpr int capid() const { return (theSample>>7)&0x3; }
67  constexpr bool dv() const { return (theSample&0x0200)!=0; }
69  constexpr bool er() const { return (theSample&0x0400)!=0; }
71  constexpr int fiber() const { return ((theSample>>13)&0x7)+1; }
73  constexpr int fiberChan() const { return (theSample>>11)&0x3; }
75  constexpr int fiberAndChan() const { return (theSample>>11)&0x1F; }
76 
78  constexpr uint16_t operator()() { return theSample; }
79 
80 private:
81  uint16_t theSample;
82 };
83 
84 std::ostream& operator<<(std::ostream&, const HcalQIESample&);
85 
86 #endif
constexpr HcalQIESample()
Definition: HcalQIESample.h:43
constexpr bool er() const
is the error bit set?
Definition: HcalQIESample.h:69
constexpr uint16_t operator()()
for streaming
Definition: HcalQIESample.h:78
constexpr int fiberChan() const
get the fiber channel number
Definition: HcalQIESample.h:73
static constexpr float nominal_adc2fc[128]
Definition: HcalQIESample.h:14
uint16_t theSample
Definition: HcalQIESample.h:81
constexpr double nominal_fC() const
get the nominal FC (no calibrations applied)
Definition: HcalQIESample.h:61
constexpr int adc() const
get the ADC sample
Definition: HcalQIESample.h:59
std::ostream & operator<<(std::ostream &, const HcalQIESample &)
Definition: HcalQIESample.cc:3
constexpr bool dv() const
is the Data Valid bit set?
Definition: HcalQIESample.h:67
constexpr int capid() const
get the Capacitor id
Definition: HcalQIESample.h:65
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
constexpr uint16_t raw() const
get the raw word
Definition: HcalQIESample.h:57
constexpr HcalQIESample(int adc, int capid, int fiber, int fiberchan, bool dv=true, bool er=false)
Definition: HcalQIESample.h:49
#define constexpr
constexpr int fiber() const
get the fiber number
Definition: HcalQIESample.h:71
constexpr int fiberAndChan() const
get the id channel
Definition: HcalQIESample.h:75
constexpr HcalQIESample(uint16_t data)
Definition: HcalQIESample.h:46