CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
EcalFenixStripFormatEE.cc
Go to the documentation of this file.
5 
7 #include <iostream>
8 
9 //-----------------------------------------------------------------------------------------
11 //------------------------------------------------------------------------------------------
12 
14 
15 //-----------------------------------------------------------------------------------------
16 
17 int EcalFenixStripFormatEE::setInput(int input_even, int inputEvenPeak, int input_odd, int inputOddPeak, int fgvb) {
18  inputEvenPeak_ = inputEvenPeak;
19  input_even_ = input_even;
20  inputOddPeak_ = inputOddPeak;
21  input_odd_ = input_odd;
22  fgvb_ = fgvb;
23  return 0;
24 }
25 //-----------------------------------------------------------------------------------------
26 
28  // Bad strip - zero everything
29  if (stripStatus_ != 0)
30  return 0;
31 
32  int even_output = 0;
33  int odd_output = 0;
34 
36  even_output = input_even_ >> shift_;
37  } else {
38  if (inputEvenPeak_ == 1)
39  even_output = input_even_ >> shift_;
40  }
41 
43  if (inputOddPeak_ == 1)
44  odd_output = input_odd_ >> shift_;
45  } else {
46  odd_output = input_odd_ >> shift_;
47  }
48 
49  // Prepare the amplitude output for the strip looking at the TPmode options
50  int output = 0;
51  bool is_odd_larger = false;
52 
53  if (ecaltpgTPMode_->EnableEEOddFilter && (odd_output > even_output))
54  is_odd_larger =
55  true; // If running with odd filter enabled, check if odd output is larger regardless of strip formatter output mode
57  case 0: // even filter out
58  output = even_output;
59  break;
60  case 1: // odd filter out
62  output = odd_output;
63  else
64  output = even_output;
65  break;
66  case 2: // larger between odd and even
67  if (ecaltpgTPMode_->EnableEEOddFilter && (odd_output > even_output)) {
68  output = odd_output;
69  } else
70  output = even_output;
71  break;
72  case 3: // even + odd
74  output = even_output + odd_output;
75  else
76  output = even_output;
77  break;
78  }
79 
80  // barrel saturates at 12 bits, endcap at 10!
81  // Pascal: finally no,endcap has 12 bits as in EB (bug in FENIX!!!!)
82  if (output > 0XFFF)
83  output = 0XFFF;
84 
85  // Info bits
86  // bit12 is sFGVB, bit13 is for odd>even flagging
87  output |= ((fgvb_ & 0x1) << 12);
88 
90  output |= ((is_odd_larger & 0x1) << 13);
91  }
92 
93  return output;
94 }
95 //------------------------------------------------------------------------------------------
96 
97 void EcalFenixStripFormatEE::process(std::vector<int> &fgvbout,
98  std::vector<int> &peakout_even,
99  std::vector<int> &filtout_even,
100  std::vector<int> &peakout_odd,
101  std::vector<int> &filtout_odd,
102  std::vector<int> &output) {
103  if (peakout_even.size() != filtout_even.size() || fgvbout.size() != filtout_even.size() ||
104  peakout_odd.size() != filtout_odd.size() || filtout_odd.size() != filtout_even.size()) {
105  edm::LogWarning("EcalTPG") << " problem in EcalFenixStripFormatEE: peak_out and filt_out don't "
106  "have the same size";
107  std::cout << " Size peak_out" << peakout_even.size() << ", size filt_out:" << filtout_even.size() << std::flush
108  << std::endl;
109  }
110 
111  for (unsigned int i = 0; i < filtout_even.size(); i++) {
112  setInput(filtout_even[i], peakout_even[i], filtout_odd[i], peakout_odd[i], fgvbout[i]);
113  output[i] = process();
114  }
115  return;
116 }
117 //-----------------------------------------------------------------------------------------
118 
120  const EcalTPGSlidingWindow *&slWin,
121  const EcalTPGStripStatus *stripStatus,
122  const EcalTPGTPMode *ecaltpgTPMode) {
123  // TP mode contains options for the formatter (odd/even filters config)
124  ecaltpgTPMode_ = ecaltpgTPMode;
125  const EcalTPGSlidingWindowMap &slwinmap = slWin->getMap();
126  EcalTPGSlidingWindowMapIterator it = slwinmap.find(id);
127  if (it != slwinmap.end())
128  shift_ = (*it).second;
129  else
130  edm::LogWarning("EcalTPG") << " could not find EcalTPGSlidingWindowMap entry for " << id;
131 
132  const EcalTPGStripStatusMap &statusMap = stripStatus->getMap();
133  EcalTPGStripStatusMapIterator sit = statusMap.find(id);
134  if (sit != statusMap.end()) {
135  stripStatus_ = (*sit).second;
136  } else {
137  stripStatus_ = 0; // Assume strip OK
138  }
139 }
140 //-----------------------------------------------------------------------------------------
const std::map< uint32_t, uint32_t > & getMap() const
int setInput(int input_even, int inputEvenPeak, int input_odd, int inputOddPeak, int fgvb)
uint16_t *__restrict__ id
uint16_t FenixEEStripInfobit2
Definition: EcalTPGTPMode.h:26
bool EnableEEOddFilter
Definition: EcalTPGTPMode.h:18
const std::map< uint32_t, uint16_t > & getMap() const
std::map< uint32_t, uint32_t > EcalTPGSlidingWindowMap
uint16_t FenixEEStripOutput
Definition: EcalTPGTPMode.h:24
bool EnableEEOddPeakFinder
Definition: EcalTPGTPMode.h:20
bool DisableEEEvenPeakFinder
Definition: EcalTPGTPMode.h:22
void setParameters(uint32_t id, const EcalTPGSlidingWindow *&, const EcalTPGStripStatus *, const EcalTPGTPMode *)
tuple cout
Definition: gather_cfg.py:144
const EcalTPGTPMode * ecaltpgTPMode_
Log< level::Warning, false > LogWarning
std::map< uint32_t, uint16_t > EcalTPGStripStatusMap
std::map< uint32_t, uint32_t >::const_iterator EcalTPGSlidingWindowMapIterator
std::map< uint32_t, uint16_t >::const_iterator EcalTPGStripStatusMapIterator