CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
CastorQIEShape.cc
Go to the documentation of this file.
1 
7 
8 namespace {
9  const float binMin [32] = {-1, 0, 1, 2, 3, 4, 5, 6, 7, 8,
10  9, 10, 11, 12, 13, 14, 16, 18, 20, 22,
11  24, 26, 28, 31, 34, 37, 40, 44, 48, 52,
12  57, 62};
13 }
14 
16 {
17  for (int i = 0; i < 32; i++) mValues [i] = binMin [i];
18  expand ();
19 }
20 
22 
24  int scale = 1;
25  for (unsigned range = 1; range < 4; range++) {
26  scale = scale * 5;
27  unsigned index = range * 32;
28  mValues [index] = mValues [index - 2]; // link to previous range
29  for (unsigned i = 1; i < 32; i++) {
30  mValues [index + i] = mValues [index + i - 1] + scale * (mValues [i] - mValues [i - 1]);
31  }
32  }
33  mValues [128] = 2 * mValues [127] - mValues [126]; // extrapolate
34 }
35 
36 float CastorQIEShape::lowEdge (unsigned fAdc) const {
37  if (fAdc < 128) return mValues [fAdc];
38  return 0.;
39 }
40 
41 float CastorQIEShape::center (unsigned fAdc) const {
42  if (fAdc < 128) {
43  if (fAdc % 32 == 31) return 0.5 * (3 * mValues [fAdc] - mValues [fAdc - 1]); // extrapolate
44  else return 0.5 * (mValues [fAdc] + mValues [fAdc + 1]); // interpolate
45  }
46  return 0.;
47 }
48 
49 float CastorQIEShape::highEdge (unsigned fAdc) const {
50  if (fAdc >= 128 ) return 0;
51  if (fAdc == 127 ) return mValues [fAdc+1];
52  if (fAdc % 32 == 31) return mValues [fAdc+3];
53  return mValues [fAdc+1];
54 }
55 
56 bool CastorQIEShape::setLowEdge (float fValue, unsigned fAdc) {
57  if (fAdc >= 32) return false;
58  mValues [fAdc] = fValue;
59  return true;
60 }
61 
62 bool CastorQIEShape::setLowEdges (const float fValue [32]) {
63  bool result = true;
64  for (int adc = 0; adc < 32; adc++) result = result && setLowEdge (fValue [adc], adc);
65  expand ();
66  return result;
67 }
int adc(sample_type sample)
get the ADC sample (12 bits)
int i
Definition: DBlmapReader.cc:9
tuple result
Definition: mps_fire.py:95
bool setLowEdges(const float fValue[32])
unsigned range(unsigned fAdc) const
float highEdge(unsigned fAdc) const
float mValues[129]
float center(unsigned fAdc) const
bool setLowEdge(float fValue, unsigned fAdc)
float lowEdge(unsigned fAdc) const