CMS 3D CMS Logo

L1GctGlobalHfSumAlgos.cc
Go to the documentation of this file.
2 
4 
8 
10 
11 L1GctGlobalHfSumAlgos::L1GctGlobalHfSumAlgos(const std::vector<L1GctWheelJetFpga*>& wheelJetFpga)
12  : L1GctProcessor(),
13  m_plusWheelJetFpga(wheelJetFpga.at(1)),
14  m_minusWheelJetFpga(wheelJetFpga.at(0)),
15  m_bitCountLuts(),
16  m_etSumLuts(),
17  m_hfInputSumsPlusWheel(),
18  m_hfInputSumsMinusWheel(),
19  m_hfOutputSumsPipe(),
20  m_setupOk(true) {
21  if (wheelJetFpga.size() != 2) {
22  m_setupOk = false;
23  if (m_verbose) {
24  edm::LogWarning("L1GctSetupError")
25  << "L1GctGlobalHfSumAlgos::L1GctGlobalHfSumAlgos() : Global HfSum Algos has been incorrectly constructed!\n"
26  << "This class needs two wheel jet fpga pointers. "
27  << "Number of wheel jet fpga pointers present is " << wheelJetFpga.size() << ".\n";
28  }
29  }
30 
31  if (m_plusWheelJetFpga == nullptr) {
32  m_setupOk = false;
33  if (m_verbose) {
34  edm::LogWarning("L1GctSetupError")
35  << "L1GctGlobalHfSumAlgos::L1GctGlobalHfSumAlgos() has been incorrectly constructed!\n"
36  << "Plus Wheel Jet Fpga pointer has not been set!\n";
37  }
38  }
39  if (m_minusWheelJetFpga == nullptr) {
40  m_setupOk = false;
41  if (m_verbose) {
42  edm::LogWarning("L1GctSetupError")
43  << "L1GctGlobalHfSumAlgos::L1GctGlobalHfSumAlgos() has been incorrectly constructed!\n"
44  << "Minus Wheel Jet Fpga pointer has not been set!\n";
45  }
46  }
47 
48  if (!m_setupOk && m_verbose) {
49  edm::LogError("L1GctSetupError") << "L1GctGlobalEnergyAlgos has been incorrectly constructed";
50  }
51 }
52 
54  std::map<L1GctHfEtSumsLut::hfLutType, const L1GctHfBitCountsLut*>::const_iterator bclut = m_bitCountLuts.begin();
55  while (bclut != m_bitCountLuts.end()) {
56  delete bclut->second;
57  bclut++;
58  }
59  std::map<L1GctHfEtSumsLut::hfLutType, const L1GctHfEtSumsLut*>::const_iterator eslut = m_etSumLuts.begin();
60  while (eslut != m_etSumLuts.end()) {
61  delete eslut->second;
62  eslut++;
63  }
64 }
65 
66 std::ostream& operator<<(std::ostream& os, const L1GctGlobalHfSumAlgos& fpga) {
67  os << "===L1GctGlobalHfSumAlgos===" << std::endl;
68  os << "WheelJetFpga* plus = " << fpga.m_plusWheelJetFpga << std::endl;
69  os << "Plus wheel inputs:" << std::endl;
70  os << "Bit counts ring 1: " << fpga.m_hfInputSumsPlusWheel.nOverThreshold0
71  << ", ring 2: " << fpga.m_hfInputSumsPlusWheel.nOverThreshold1 << std::endl;
72  os << "Et sums ring 1: " << fpga.m_hfInputSumsPlusWheel.etSum0 << ", ring 2: " << fpga.m_hfInputSumsPlusWheel.etSum1
73  << std::endl;
74  os << "WheelJetFpga* minus = " << fpga.m_minusWheelJetFpga << std::endl;
75  os << "Minus wheel inputs:" << std::endl;
76  os << "Bit counts ring 1: " << fpga.m_hfInputSumsMinusWheel.nOverThreshold0
77  << ", ring 2: " << fpga.m_hfInputSumsMinusWheel.nOverThreshold1 << std::endl;
78  os << "Et sums ring 1: " << fpga.m_hfInputSumsMinusWheel.etSum0 << ", ring 2: " << fpga.m_hfInputSumsMinusWheel.etSum1
79  << std::endl;
80 
81  int bxZero = -fpga.bxMin();
82  if (bxZero >= 0 && bxZero < fpga.numOfBx()) {
83  os << "Output word " << std::hex << fpga.hfSumsWord().at(bxZero) << std::dec << std::endl;
84  }
85 
86  return os;
87 }
88 
92 }
93 
95  m_hfOutputSumsPipe.clear();
97  // Make one copy of the empty pipeline for each type of Hf lut
98  unsigned nTypes = (unsigned)L1GctHfEtSumsLut::numberOfLutTypes;
99  for (unsigned t = 0; t < nTypes; ++t) {
101  }
102 }
103 
105  if (m_setupOk) {
108  }
109 }
110 
111 // process the event
113  if (m_setupOk) {
114  // step through the different types of Hf summed quantity
115  // and store each one in turn into the relevant pipeline
116 
117  // bit count, positive eta, ring 1
119 
120  // bit count, negative eta, ring 1
122 
123  // bit count, positive eta, ring 2
125 
126  // bit count, negative eta, ring 2
128 
129  // et sum, positive eta, ring 1
131 
132  // et sum, negative eta, ring 1
134 
135  // et sum, positive eta, ring 2
137 
138  // et sum, negative eta, ring 2
140  }
141 }
142 
143 // Convert bit count value using LUT and store in the pipeline
145  std::map<L1GctHfEtSumsLut::hfLutType, const L1GctHfBitCountsLut*>::const_iterator bclut = m_bitCountLuts.find(type);
146  if (bclut != m_bitCountLuts.end()) {
147  m_hfOutputSumsPipe[type].store((*bclut->second)[value], bxRel());
148  }
149 }
150 
151 // Convert et sum value using LUT and store in the pipeline
153  std::map<L1GctHfEtSumsLut::hfLutType, const L1GctHfEtSumsLut*>::const_iterator eslut = m_etSumLuts.find(type);
154  if (eslut != m_etSumLuts.end()) {
155  m_hfOutputSumsPipe[type].store((*eslut->second)[value], bxRel());
156  }
157 }
158 
161  std::vector<uint16_t> result(numOfBx());
162  std::map<L1GctHfEtSumsLut::hfLutType, Pipeline<uint16_t> >::const_iterator lut = m_hfOutputSumsPipe.find(type);
163  if (lut != m_hfOutputSumsPipe.end()) {
164  result = (lut->second).contents;
165  }
166 
167  return result;
168 }
169 
170 std::vector<unsigned> L1GctGlobalHfSumAlgos::hfSumsWord() const {
171  std::vector<unsigned> result(numOfBx(), 0x00001000);
172  std::vector<uint16_t> outputBits;
173 
175  for (unsigned bx = 0; bx < outputBits.size(); bx++) {
176  result.at(bx) |= outputBits.at(bx);
177  }
178 
180  for (unsigned bx = 0; bx < outputBits.size(); bx++) {
181  result.at(bx) |= outputBits.at(bx) << 3;
182  }
183 
185  for (unsigned bx = 0; bx < outputBits.size(); bx++) {
186  result.at(bx) |= outputBits.at(bx) << 6;
187  }
188 
190  for (unsigned bx = 0; bx < outputBits.size(); bx++) {
191  result.at(bx) |= outputBits.at(bx) << 9;
192  }
193 
195  for (unsigned bx = 0; bx < outputBits.size(); bx++) {
196  result.at(bx) |= outputBits.at(bx) << 12;
197  }
198 
200  for (unsigned bx = 0; bx < outputBits.size(); bx++) {
201  result.at(bx) |= outputBits.at(bx) << 16;
202  }
203 
205  for (unsigned bx = 0; bx < outputBits.size(); bx++) {
206  result.at(bx) |= outputBits.at(bx) << 19;
207  }
208 
210  for (unsigned bx = 0; bx < outputBits.size(); bx++) {
211  result.at(bx) |= outputBits.at(bx) << 22;
212  }
213 
214  return result;
215 }
216 
219  // Replaces existing list of luts with a new one
220  while (!m_bitCountLuts.empty()) {
221  delete m_bitCountLuts.begin()->second;
222  m_bitCountLuts.erase(m_bitCountLuts.begin());
223  }
232 
233  while (!m_etSumLuts.empty()) {
234  delete m_etSumLuts.begin()->second;
235  m_etSumLuts.erase(m_etSumLuts.begin());
236  }
241 }
242 
245  std::map<L1GctHfEtSumsLut::hfLutType, const L1GctHfBitCountsLut*>::const_iterator bclut = m_bitCountLuts.find(type);
246  if (bclut != m_bitCountLuts.end()) {
247  return (bclut->second);
248  } else {
249  return nullptr;
250  }
251 }
252 
254  std::map<L1GctHfEtSumsLut::hfLutType, const L1GctHfEtSumsLut*>::const_iterator eslut = m_etSumLuts.find(type);
255  if (eslut != m_etSumLuts.end()) {
256  return (eslut->second);
257  } else {
258  return nullptr;
259  }
260 }
261 
264  std::vector<double> result;
265  const L1GctHfEtSumsLut* ESLut = getESLut(type);
266  if (ESLut != nullptr) {
267  result = ESLut->lutFunction()->getThresholds();
268  }
269  return result;
270 }
MessageLogger.h
L1GctJetFinderBase::hfTowerSumsType::nOverThreshold0
L1GctJetCount< kHfCountBits > nOverThreshold0
Definition: L1GctJetFinderBase.h:78
L1GctGlobalHfSumAlgos::fetchInput
void fetchInput() override
get input data from sources; this is the standard way to provide input
Definition: L1GctGlobalHfSumAlgos.cc:104
L1GctHfEtSumsLut::hfLutType
hfLutType
Definition: L1GctHfEtSumsLut.h:24
L1GctGlobalHfSumAlgos
Emulates the GCT summing and packing of Hf Et sums and tower-over-threshold counts.
Definition: L1GctGlobalHfSumAlgos.h:27
L1GctHfEtSumsLut::bitCountPosEtaRing1
Definition: L1GctHfEtSumsLut.h:25
L1GctGlobalHfSumAlgos.h
L1GctProcessor::numOfBx
int numOfBx() const
Definition: L1GctProcessor.h:79
l1GtPatternGenerator_cfi.bx
bx
Definition: l1GtPatternGenerator_cfi.py:18
L1GctProcessor::bxRel
int bxRel() const
Definition: L1GctProcessor.h:81
L1GctHfEtSumsLut::etSumNegEtaRing1
Definition: L1GctHfEtSumsLut.h:31
L1GctUnsignedInt::value
unsigned value() const
access value as unsigned
Definition: L1GctUnsignedInt.h:53
L1GctJetFinderBase::hfTowerSumsType::etSum1
L1GctJetCount< kHfEtSumBits > etSum1
Definition: L1GctJetFinderBase.h:77
L1GctGlobalHfSumAlgos::m_etSumLuts
std::map< L1GctHfEtSumsLut::hfLutType, const L1GctHfEtSumsLut * > m_etSumLuts
Definition: L1GctGlobalHfSumAlgos.h:82
L1GctGlobalHfSumAlgos::L1GctGlobalHfSumAlgos
L1GctGlobalHfSumAlgos(const std::vector< L1GctWheelJetFpga * > &WheelJetFpga)
Constructor needs the Wheel card Fpgas set up first.
Definition: L1GctGlobalHfSumAlgos.cc:11
L1GctGlobalHfSumAlgos::resetPipelines
void resetPipelines() override
Definition: L1GctGlobalHfSumAlgos.cc:94
L1GctHfEtSumsLut::etSumPosEtaRing1
Definition: L1GctHfEtSumsLut.h:29
L1GctGlobalHfSumAlgos::~L1GctGlobalHfSumAlgos
~L1GctGlobalHfSumAlgos() override
Destructor.
Definition: L1GctGlobalHfSumAlgos.cc:53
L1GctGlobalHfSumAlgos::getThresholds
std::vector< double > getThresholds(const L1GctHfEtSumsLut::hfLutType type) const
Get thresholds.
Definition: L1GctGlobalHfSumAlgos.cc:263
L1GctJetFinderBase::hfTowerSumsType::nOverThreshold1
L1GctJetCount< kHfCountBits > nOverThreshold1
Definition: L1GctJetFinderBase.h:79
L1GctHfEtSumsLut
LUT for compression of HF Et sum to output format.
Definition: L1GctHfEtSumsLut.h:20
groupFilesInBlocks.temp
list temp
Definition: groupFilesInBlocks.py:142
operator<<
std::ostream & operator<<(std::ostream &os, const L1GctGlobalHfSumAlgos &fpga)
Definition: L1GctGlobalHfSumAlgos.cc:66
L1GctHfEtSumsLut::lutFunction
const L1CaloEtScale * lutFunction() const
Return the Lut function.
Definition: L1GctHfEtSumsLut.h:68
L1GctHfEtSumsLut::bitCountNegEtaRing1
Definition: L1GctHfEtSumsLut.h:27
relmon_rootfiles_spy.contents
contents
Definition: relmon_rootfiles_spy.py:129
L1GctGlobalHfSumAlgos::m_minusWheelJetFpga
L1GctWheelJetFpga * m_minusWheelJetFpga
Definition: L1GctGlobalHfSumAlgos.h:78
L1GctGlobalHfSumAlgos::setupLuts
void setupLuts(const L1CaloEtScale *scale)
Setup luts.
Definition: L1GctGlobalHfSumAlgos.cc:218
L1GctHfEtSumsLut.h
L1GctGlobalHfSumAlgos::hfSumsWord
std::vector< unsigned > hfSumsWord() const
Definition: L1GctGlobalHfSumAlgos.cc:170
OrderedSet.t
t
Definition: OrderedSet.py:90
L1GctHfEtSumsLut::bitCountPosEtaRing2
Definition: L1GctHfEtSumsLut.h:26
L1GctHfEtSumsLut::numberOfLutTypes
Definition: L1GctHfEtSumsLut.h:33
L1GctGlobalHfSumAlgos::m_hfInputSumsPlusWheel
hfTowerSumsType m_hfInputSumsPlusWheel
Definition: L1GctGlobalHfSumAlgos.h:85
L1GctWheelJetFpga::getOutputHfSums
hfTowerSumsType getOutputHfSums() const
get the output Hf Sums
Definition: L1GctWheelJetFpga.h:86
L1GctGlobalHfSumAlgos::resetProcessor
void resetProcessor() override
Separate reset methods for the processor itself and any data stored in pipelines.
Definition: L1GctGlobalHfSumAlgos.cc:89
edm::LogWarning
Definition: MessageLogger.h:141
L1GctWheelJetFpga.h
funct::true
true
Definition: Factorize.h:173
Scenarios_cff.scale
scale
Definition: Scenarios_cff.py:2186
edm::LogError
Definition: MessageLogger.h:183
L1GctProcessor::m_verbose
bool m_verbose
Flag to control output messages.
Definition: L1GctProcessor.h:109
L1GctGlobalHfSumAlgos::m_bitCountLuts
std::map< L1GctHfEtSumsLut::hfLutType, const L1GctHfBitCountsLut * > m_bitCountLuts
Definition: L1GctGlobalHfSumAlgos.h:81
L1GctHfBitCountsLut.h
L1GctProcessor::bxMin
int bxMin() const
Support for multiple beam crossing operation.
Definition: L1GctProcessor.h:77
L1GctGlobalHfSumAlgos::m_plusWheelJetFpga
L1GctWheelJetFpga * m_plusWheelJetFpga
Definition: L1GctGlobalHfSumAlgos.h:77
L1GctGlobalHfSumAlgos::m_hfInputSumsMinusWheel
hfTowerSumsType m_hfInputSumsMinusWheel
Definition: L1GctGlobalHfSumAlgos.h:86
L1CaloEtScale
Definition: L1CaloEtScale.h:29
value
Definition: value.py:1
L1GctGlobalHfSumAlgos::process
void process() override
process the data, fill output buffers
Definition: L1GctGlobalHfSumAlgos.cc:112
L1GctJetFinderBase::hfTowerSumsType::reset
void reset()
Definition: L1GctJetFinderBase.h:91
L1GctGlobalHfSumAlgos::getBCLut
const L1GctHfBitCountsLut * getBCLut(const L1GctHfEtSumsLut::hfLutType type) const
Get lut pointers.
Definition: L1GctGlobalHfSumAlgos.cc:244
L1CaloEtScale.h
L1CaloEtScale::getThresholds
const std::vector< double > & getThresholds() const
get thresholds
Definition: L1CaloEtScale.h:66
L1GctGlobalHfSumAlgos::m_setupOk
bool m_setupOk
Definition: L1GctGlobalHfSumAlgos.h:91
type
type
Definition: HCALResponse.h:21
L1GctGlobalHfSumAlgos::m_hfOutputSumsPipe
std::map< L1GctHfEtSumsLut::hfLutType, Pipeline< uint16_t > > m_hfOutputSumsPipe
Definition: L1GctGlobalHfSumAlgos.h:89
L1GctGlobalHfSumAlgos::storeEtSum
void storeEtSum(L1GctHfEtSumsLut::hfLutType type, uint16_t value)
Definition: L1GctGlobalHfSumAlgos.cc:152
L1GctGlobalHfSumAlgos::storeBitCount
void storeBitCount(L1GctHfEtSumsLut::hfLutType type, uint16_t value)
Definition: L1GctGlobalHfSumAlgos.cc:144
L1GctHfEtSumsLut::bitCountNegEtaRing2
Definition: L1GctHfEtSumsLut.h:28
L1GctHfEtSumsLut::etSumPosEtaRing2
Definition: L1GctHfEtSumsLut.h:30
L1GctJetFinderBase::hfTowerSumsType::etSum0
L1GctJetCount< kHfEtSumBits > etSum0
Definition: L1GctJetFinderBase.h:76
mps_fire.result
result
Definition: mps_fire.py:303
L1GctGlobalHfSumAlgos::hfSumsOutput
std::vector< uint16_t > hfSumsOutput(const L1GctHfEtSumsLut::hfLutType type) const
Access to output quantities.
Definition: L1GctGlobalHfSumAlgos.cc:160
L1GctProcessor
ABC for a GCT trigger data processing unit.
Definition: L1GctProcessor.h:22
L1GctProcessor::Pipeline
Definition: L1GctProcessor.h:84
L1GctHfBitCountsLut
LUT for compression of HF feature bit counts to output format.
Definition: L1GctHfBitCountsLut.h:19
TauDecayModes.dec
dec
Definition: TauDecayModes.py:143
L1GctHfEtSumsLut::etSumNegEtaRing2
Definition: L1GctHfEtSumsLut.h:32
L1GctGlobalHfSumAlgos::getESLut
const L1GctHfEtSumsLut * getESLut(const L1GctHfEtSumsLut::hfLutType type) const
Definition: L1GctGlobalHfSumAlgos.cc:253