ATLAS Offline Software
eFEXtauBDT.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 //*************************************************************************
6 // eFEXtauBDT - description
7 // --------------------
8 // begin : 15 09 2022
9 // email : david.reikher@gmail.com
10 //*************************************************************************
11 
14 #include <string>
15 
16 #define ENERGY_WIDTH 16
17 #define PARAM_WIDTH 8
18 
19 // default constructor for persistency
20 LVL1::eFEXtauBDT::eFEXtauBDT(AthAlgTool *log, std::string config_path)
21  : m_bdt(config_path), m_log(log) {
22  m_log->msg(MSG::DEBUG) << "Configured BDT with this file: " << config_path
23  << endmsg;
24  m_bdtVars.resize(m_bdt.getVariables().size());
25  m_towers.resize(m_bdt.getNTowers());
26  int n_multipliers = sizeof(m_fracMultipliers) / sizeof(m_fracMultipliers[0]);
27  m_emEtXMultiplier.resize(n_multipliers);
28  m_emEtXMultiplierOverflow.resize(n_multipliers);
29 }
30 
33 
35  unsigned int *sCellPtr) {
36  switch (layer) {
37  case 0:
38  m_em0cells[eta][phi] = sCellPtr;
39  break;
40  case 1:
41  m_em1cells[eta][phi] = sCellPtr;
42  break;
43  case 2:
44  m_em2cells[eta][phi] = sCellPtr;
45  break;
46  case 3:
47  m_em3cells[eta][phi] = sCellPtr;
48  break;
49  case 4:
50  m_hadcells[eta][phi] = sCellPtr;
51  break;
52  }
53 }
54 
56  int index, unsigned int *fracMultiplierPtr) {
57  m_fracMultipliers[index] = fracMultiplierPtr;
58 }
59 
61  int index, unsigned int *bdtThresholdPtr) {
62  m_bdtThresholds[index] = bdtThresholdPtr;
63 }
64 
65 void LVL1::eFEXtauBDT::setPointerToETThresholdParam(unsigned int *etThreshold) {
66  m_etThreshold = etThreshold;
67 }
68 
70  unsigned int *maxEtThreshold) {
71  m_maxEtThreshold = maxEtThreshold;
72 }
73 
75  unsigned int *bdtMinEtThreshold) {
76  m_bdtMinEtThreshold = bdtMinEtThreshold;
77 }
78 
79 unsigned int *LVL1::eFEXtauBDT::superCellToPtr(int eta, int phi, int layer) {
80  unsigned int *ptr = 0;
81  switch (layer) {
82  case 0:
83  ptr = m_em0cells[eta][phi];
84  break;
85  case 1:
86  ptr = m_em1cells[eta][phi];
87  break;
88  case 2:
89  ptr = m_em2cells[eta][phi];
90  break;
91  case 3:
92  ptr = m_em3cells[eta][phi];
93  break;
94  case 4:
95  ptr = m_hadcells[eta][phi];
96  break;
97  }
98  return ptr;
99 }
100 
102  initPointers(m_bdt.getETSCells(), m_eTComputeSCellPointers);
103 }
104 
106  initPointers(m_bdt.getEMETSCells(), m_EM_eTComputeSCellPointers);
107 }
108 
110  initPointers(m_bdt.getHADETSCells(), m_HAD_eTComputeSCellPointers);
111 }
112 
113 void LVL1::eFEXtauBDT::initPointers(const std::vector<std::vector<int>> &scells,
114  std::vector<unsigned int *> &ptr_list) {
115  m_log->msg(MSG::DEBUG) << "Will use sum of supercells: " << endmsg;
116  for (auto scell : scells) {
117  int eta = scell[0];
118  int phi = scell[1];
119  int layer = scell[2];
120  m_log->msg(MSG::DEBUG) << "\teta=" << eta << "\tphi=" << phi
121  << "\tlayer=" << layer << endmsg;
122  unsigned int *ptr = superCellToPtr(eta, phi, layer);
123  if (ptr == 0) {
124  m_log->msg(MSG::DEBUG)
125  << "Could not convert eta=" << eta << " phi=" << phi
126  << " layer=" << layer
127  << " to a pointer to supercell. Are they within range?" << endmsg;
128  throw std::domain_error(
129  std::string("Could not convert eta=") + std::to_string(eta) +
130  " phi=" + std::to_string(phi) + " layer=" + std::to_string(layer) +
131  " to a pointer to supercell. Are they within range?");
132  }
133  ptr_list.push_back(ptr);
134  }
135 }
136 
138  m_towersComputeSCellPointers.resize(m_bdt.getNTowers());
139  for (size_t i = 0; i < m_towers.size(); i++) {
140  m_log->msg(MSG::DEBUG) << "Tower " << i << endmsg;
141  initPointers(m_bdt.getTowerSCells(i), m_towersComputeSCellPointers[i]);
142  }
143 }
144 
146  for (size_t i = 0; i < m_bdt.getVariables().size(); i++) {
147  BDTVariable var = m_bdt.getVariables()[i];
148 
149  m_log->msg(MSG::DEBUG) << i << " is " << var.m_name << ", sum of supercells"
150  << endmsg;
151  std::vector<unsigned int *> pointersToSCells;
152  for (size_t j = 0; j < var.m_scells.size(); j++) {
153  int eta = var.m_scells[j][0];
154  int phi = var.m_scells[j][1];
155  int layer = var.m_scells[j][2];
156  m_log->msg(MSG::DEBUG) << "\teta=" << eta << "\tphi=" << phi
157  << "\tlayer=" << layer << endmsg;
158  unsigned int *ptr = superCellToPtr(eta, phi, layer);
159  if (ptr == 0) {
160  m_log->msg(MSG::DEBUG)
161  << "Could not convert eta=" << eta << " phi=" << phi
162  << " layer=" << layer
163  << " to a pointer to supercell. Are they within range?" << endmsg;
164  throw std::domain_error(
165  std::string("Could not convert eta=") + std::to_string(eta) +
166  " phi=" + std::to_string(phi) + " layer=" + std::to_string(layer) +
167  " to a pointer to supercell. Are they within range?");
168  }
169  pointersToSCells.push_back(ptr);
170  }
171 
172  m_bdtVarComputeSCellPointers.push_back(pointersToSCells);
173  }
174 }
175 
177  buildBDTVariables();
178  computeTowers();
179  computeETEstimate();
180  computeHADETEstimate();
181  computeEMETEstimate();
182  computeBDTCondition();
183  computeFracCondition();
184  computeIsCentralTowerSeed();
185 }
186 
188 
189  std::string scellValues = "";
190  std::string em0Values = "";
191  std::string em1Values = "";
192  std::string em2Values = "";
193  std::string em3Values = "";
194  std::string hadValues = "";
195  for (size_t i = 0; i < LVL1::locMap.size(); i++) {
196  int eta = LVL1::locMap[i][0];
197  int phi = LVL1::locMap[i][1];
198  int layer = LVL1::locMap[i][2];
199  scellValues += std::to_string(*superCellToPtr(eta, phi, layer)) + " ";
200  switch (layer) {
201  case 0:
202  em0Values += std::to_string(*m_em0cells[eta][phi]) + " ";
203  break;
204  case 1:
205  em1Values += std::to_string(*m_em1cells[eta][phi]) + " ";
206  break;
207  case 2:
208  em2Values += std::to_string(*m_em2cells[eta][phi]) + " ";
209  break;
210  case 3:
211  em3Values += std::to_string(*m_em3cells[eta][phi]) + " ";
212  break;
213  case 4:
214  hadValues += std::to_string(*m_hadcells[eta][phi]) + " ";
215  break;
216  }
217  }
218 
219  m_log->msg(MSG::DEBUG) << "SCell values: " << scellValues << endmsg;
220  m_log->msg(MSG::DEBUG) << "layer 0 values: " << em0Values << endmsg;
221  m_log->msg(MSG::DEBUG) << "layer 1 values: " << em1Values << endmsg;
222  m_log->msg(MSG::DEBUG) << "layer 2 values: " << em2Values << endmsg;
223  m_log->msg(MSG::DEBUG) << "layer 3 values: " << em3Values << endmsg;
224  m_log->msg(MSG::DEBUG) << "layer 4 values: " << hadValues << endmsg;
225 }
226 
228  std::string bdtVariables = "";
229  for (size_t i = 0; i < m_bdtVars.size(); i++) {
230  bdtVariables += std::to_string(m_bdtVars[i]) + " ";
231  }
232 
233  m_log->msg(MSG::DEBUG) << "BDT Variables: " << bdtVariables << endmsg;
234 }
235 
236 // Build BDT Variables
238  debugPrintSCellValues();
239  for (size_t i = 0; i < m_bdtVarComputeSCellPointers.size(); i++) {
240  bool overflow;
241  m_bdtVars[i] = computeEstimate(m_bdtVarComputeSCellPointers[i], overflow,
242  ENERGY_WIDTH);
243  if (overflow) {
244  m_bdtVars[i] = (1 << ENERGY_WIDTH) - 1;
245  }
246  }
247  debugPrintBDTVariables();
248  m_bdtVarsComputed = true;
249 }
250 
252  // Need BDT variables to be computed
253  if (m_bdtVarsComputed == false) {
254  m_log->msg(MSG::DEBUG)
255  << "BDT Variables not computed. BDT score will be garbage." << endmsg;
256  }
257 
258  m_bdtScore = m_bdt.getBDT().decision_function(m_bdtVars)[0];
259  m_log->msg(MSG::DEBUG) << "BDT Score: " << m_bdtScore << endmsg;
260 }
261 
263  m_eTEstimate = computeEstimate(m_eTComputeSCellPointers, m_eTEstimateOverflow,
264  ENERGY_WIDTH);
265  m_log->msg(MSG::DEBUG) << "ET Estimate: " << m_eTEstimate << endmsg;
266 }
267 
269  m_EM_eTEstimate = computeEstimate(m_EM_eTComputeSCellPointers,
270  m_EM_eTEstimateOverflow, ENERGY_WIDTH);
271  m_log->msg(MSG::DEBUG) << "EM ET Estimate: " << m_EM_eTEstimate << endmsg;
272 }
273 
275  m_HAD_eTEstimate = computeEstimate(m_HAD_eTComputeSCellPointers,
276  m_HAD_eTEstimateOverflow, ENERGY_WIDTH);
277  m_log->msg(MSG::DEBUG) << "HAD ET Estimate: " << m_HAD_eTEstimate << endmsg;
278 }
279 
281  m_log->msg(MSG::DEBUG) << "Towers Estimate: " << endmsg;
282  for (int eta = 0; eta < 3; eta++) {
283  for (int phi = 0; phi < 3; phi++) {
284  int flatIndex = flatTowerIndex(eta, phi);
285  m_log->msg(MSG::DEBUG)
286  << "Tower " << flatIndex << " ET (eta=" << eta << ", phi=" << phi
287  << "): " << m_towers[flatIndex] << endmsg;
288  }
289  }
290 }
291 
292 int LVL1::eFEXtauBDT::flatTowerIndex(int eta, int phi) { return 3 * phi + eta; }
293 
295  for (size_t i = 0; i < m_towers.size(); i++) {
296  bool overflow;
297  m_towers[i] = computeEstimate(m_towersComputeSCellPointers[i], overflow,
298  ENERGY_WIDTH);
299  if (overflow) {
300  m_towers[i] = (1 << ENERGY_WIDTH) - 1;
301  }
302  }
303 
304  debugPrintTowers();
305 }
306 
307 bool LVL1::eFEXtauBDT::isOverflow(unsigned int number, int nBits) {
308  if ((number >> nBits) != 0) {
309  return true;
310  }
311  return false;
312 }
313 
314 unsigned int
315 LVL1::eFEXtauBDT::computeEstimate(std::vector<unsigned int *> &ptr_list,
316  bool &overflow, int resultNBits) {
317  unsigned int estimate = 0;
318  overflow = false;
319  for (unsigned int *it : ptr_list) {
320  estimate += *it;
321  if (isOverflow(estimate, resultNBits)) {
322  overflow = true;
323  }
324  }
325  return estimate;
326 }
327 
328 unsigned int LVL1::eFEXtauBDT::multWithOverflow(unsigned int a, unsigned int b,
329  bool &overflow,
330  int resultNBits) {
331  overflow = false;
332  if (b == 0) {
333  return 0;
334  }
335  unsigned int result = a * b;
336  if (a != result / b) {
337  // This shouldn't happen (a and b are in reality 16 bit numbers), but just
338  // in case.
339  overflow = true;
340  }
341 
342  overflow = isOverflow(result, resultNBits);
343 
344  return result;
345 }
346 
347 unsigned int LVL1::eFEXtauBDT::BitLeftShift(unsigned int number, int by,
348  int totalNBits) {
349  if ((number >> (totalNBits - by)) != 0) {
350  return (1 << totalNBits) - 1;
351  }
352  return number << by;
353 }
354 
356  int n_multipliers = sizeof(m_fracMultipliers) / sizeof(m_fracMultipliers[0]);
357 
358  if ((m_eTEstimate >= *m_maxEtThreshold) or m_eTEstimateOverflow or
359  m_HAD_eTEstimateOverflow) {
360 
361  m_fracCondition = (1 << (n_multipliers - 1)) - 1;
362  return;
363  }
364 
365  if (m_EM_eTEstimateOverflow) {
366  m_fracCondition = 0;
367  return;
368  }
369 
370  m_hadEstimateShifted = BitLeftShift(m_HAD_eTEstimate, 3, ENERGY_WIDTH);
371  int i = 0;
372  for (; i < n_multipliers; i++) {
373 
374  bool overflow;
375  m_emEtXMultiplier[i] = multWithOverflow(
376  *(m_fracMultipliers[i]), m_EM_eTEstimate, overflow, ENERGY_WIDTH);
377  m_emEtXMultiplierOverflow[i] = (int)overflow;
378 
379  if ((m_hadEstimateShifted < m_emEtXMultiplier[i]) or
380  m_emEtXMultiplierOverflow[i]) {
381  break;
382  }
383  }
384  m_fracCondition = i;
385 }
386 
388  computeBDTScore();
389  int n_thresholds = sizeof(m_bdtThresholds) / sizeof(m_bdtThresholds[0]);
390 
391  int toShiftRight = m_bdt.getScorePrecision() - PARAM_WIDTH;
392  // Only compare the MSB bits of the BDT score to the thresholds provided in
393  // the parameters
394  m_bdtScoreShifted = (m_bdtScore >> toShiftRight);
395 
396  if ((m_eTEstimate >= *m_maxEtThreshold) or m_eTEstimateOverflow or
397  m_eTEstimate < *m_bdtMinEtThreshold) {
398 
399  m_bdtCondition = (1 << (n_thresholds - 1)) - 1;
400  return;
401  }
402 
403  int i = 0;
404  for (; i < n_thresholds; i++) {
405  if (m_bdtScoreShifted < *(m_bdtThresholds[i])) {
406  break;
407  }
408  }
409  m_bdtCondition = i;
410 }
411 
412 // Check if central tower qualifies as a seed tower for the tau algorithm
413 // Bitwise computation (as opposed to implementation in eFEXtauBDTAlgo.cxx)
415  m_isSeeded = true;
416 
417  // Get central tower ET
418  unsigned int centralET = m_towers[4];
419 
420  // Loop over all cells and check that the central tower is a local maximum
421  for (unsigned int beta = 0; beta < 3; beta++) {
422  for (unsigned int bphi = 0; bphi < 3; bphi++) {
423  int flatIndex = flatTowerIndex(beta, bphi);
424  // Don't need to compare central cell with itself
425  if ((beta == 1) && (bphi == 1)) {
426  continue;
427  }
428 
429  // Cells to the up and right must have strictly lesser ET
430  if (beta == 2 || (beta == 1 && bphi == 2)) {
431  if (centralET <= m_towers[flatIndex]) {
432  m_isSeeded = false;
433  }
434  }
435  // Cells down and to the left must have lesser or equal ET. If strictly
436  // lesser would create zero TOB if two adjacent cells had equal energy
437  else if (beta == 0 || (beta == 1 && bphi == 0)) {
438  if (centralET < m_towers[flatIndex]) {
439  m_isSeeded = false;
440  }
441  }
442  }
443  }
444 
445  if (m_eTEstimate < *m_etThreshold) {
446  m_isSeeded = false;
447  }
448 
449  m_log->msg(MSG::DEBUG) << "Seeded: " << (int)m_isSeeded << endmsg;
450 }
451 
452 unsigned int LVL1::eFEXtauBDT::getET() const {
453  if (m_eTEstimateOverflow) {
454  return (1 << ENERGY_WIDTH) - 1;
455  }
456  if (m_eTEstimate < *m_etThreshold) {
457  return 0;
458  }
459  return m_eTEstimate;
460 }
LVL1::eFEXtauBDT::computeBDTCondition
void computeBDTCondition()
Definition: eFEXtauBDT.cxx:387
LVL1::eFEXtauBDT::m_towers
std::vector< unsigned int > m_towers
Definition: eFEXtauBDT.h:130
beamspotnt.var
var
Definition: bin/beamspotnt.py:1394
LVL1::eFEXtauBDT::m_bdt
eFEXBDT m_bdt
Definition: eFEXtauBDT.h:148
LVL1::eFEXtauBDT::flatTowerIndex
int flatTowerIndex(int eta, int phi)
Definition: eFEXtauBDT.cxx:292
get_generator_info.result
result
Definition: get_generator_info.py:21
LVL1::eFEXtauBDT::setPointerToMaxETParam
void setPointerToMaxETParam(unsigned int *maxEtThreshold)
Definition: eFEXtauBDT.cxx:69
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
LVL1::eFEXtauBDT::initPointers
void initPointers(const std::vector< std::vector< int >> &scells, std::vector< unsigned int * > &ptr_list)
Definition: eFEXtauBDT.cxx:113
LVL1::eFEXtauBDT::initHADETPointers
void initHADETPointers()
Definition: eFEXtauBDT.cxx:109
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:79
LVL1::eFEXtauBDT::setPointerToBDTMinETParam
void setPointerToBDTMinETParam(unsigned int *bdtMinEtThreshold)
Definition: eFEXtauBDT.cxx:74
index
Definition: index.py:1
eFEXBDT::getVariables
const std::vector< BDTVariable > & getVariables() const
Definition: eFEXBDT.h:58
skel.it
it
Definition: skel.GENtoEVGEN.py:423
LVL1::eFEXtauBDT::getET
unsigned int getET() const
Definition: eFEXtauBDT.cxx:452
LVL1::eFEXtauBDT::debugPrintBDTVariables
void debugPrintBDTVariables()
Definition: eFEXtauBDT.cxx:227
LVL1::eFEXtauBDT::debugPrintTowers
void debugPrintTowers()
Definition: eFEXtauBDT.cxx:280
LVL1::eFEXtauBDT::isOverflow
bool isOverflow(unsigned int number, int nBits)
Definition: eFEXtauBDT.cxx:307
LVL1::eFEXtauBDT::setPointerToBDTThresholdsParam
void setPointerToBDTThresholdsParam(int index, unsigned int *bdtThresholds)
Definition: eFEXtauBDT.cxx:60
LVL1::eFEXtauBDT::computeETEstimate
void computeETEstimate()
Definition: eFEXtauBDT.cxx:262
LVL1::eFEXtauBDT::computeEMETEstimate
void computeEMETEstimate()
Definition: eFEXtauBDT.cxx:268
ENERGY_WIDTH
#define ENERGY_WIDTH
Definition: eFEXtauBDT.cxx:16
LVL1::eFEXtauBDT::computeTowers
void computeTowers()
Definition: eFEXtauBDT.cxx:294
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
LVL1::eFEXtauBDT::m_log
AthAlgTool * m_log
Definition: eFEXtauBDT.h:149
LVL1::eFEXtauBDT::eFEXtauBDT
eFEXtauBDT(AthAlgTool *log, std::string config_path)
Constructors.
Definition: eFEXtauBDT.cxx:20
lumiFormat.i
int i
Definition: lumiFormat.py:92
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
LVL1::eFEXtauBDT::setPointerToETThresholdParam
void setPointerToETThresholdParam(unsigned int *etThreshold)
Definition: eFEXtauBDT.cxx:65
LVL1::eFEXtauBDT::setPointerToSCell
void setPointerToSCell(int eta, int phi, int layer, unsigned int *sCellPtr)
Definition: eFEXtauBDT.cxx:34
LVL1::eFEXtauBDT::initETPointers
void initETPointers()
Definition: eFEXtauBDT.cxx:101
fitman.by
by
Definition: fitman.py:411
LVL1::eFEXtauBDT::initTowersPointers
void initTowersPointers()
Definition: eFEXtauBDT.cxx:137
internal_poltrig::estimate
REAL estimate(const int &elen, REAL *e)
Definition: PolygonTriangulator.cxx:451
LVL1::eFEXtauBDT::initBDTVars
void initBDTVars()
Definition: eFEXtauBDT.cxx:145
python.selection.number
number
Definition: selection.py:20
LVL1::eFEXtauBDT::m_emEtXMultiplier
std::vector< unsigned int > m_emEtXMultiplier
Definition: eFEXtauBDT.h:128
ActsTrk::to_string
std::string to_string(const DetectorType &type)
Definition: GeometryDefs.h:34
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
LVL1::eFEXtauBDT::m_fracMultipliers
unsigned int * m_fracMultipliers[3]
Definition: eFEXtauBDT.h:111
eFEXBDT::getNTowers
int getNTowers() const
Definition: eFEXBDT.h:80
LVL1::eFEXtauBDT::buildBDTVariables
void buildBDTVariables()
Definition: eFEXtauBDT.cxx:237
LVL1::eFEXtauBDT::setPointerToFracMultipliersParam
void setPointerToFracMultipliersParam(int index, unsigned int *fracMultipliers)
Definition: eFEXtauBDT.cxx:55
DeMoScan.index
string index
Definition: DeMoScan.py:362
eFEXtauBDT.h
a
TList * a
Definition: liststreamerinfos.cxx:10
LVL1::eFEXtauBDT::computeBDTScore
void computeBDTScore()
Definition: eFEXtauBDT.cxx:251
LVL1::eFEXtauBDT::debugPrintSCellValues
void debugPrintSCellValues()
Definition: eFEXtauBDT.cxx:187
DEBUG
#define DEBUG
Definition: page_access.h:11
AthCommonMsg::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
LVL1::eFEXtauBDT::computeFracCondition
void computeFracCondition()
Definition: eFEXtauBDT.cxx:355
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
PARAM_WIDTH
#define PARAM_WIDTH
Definition: eFEXtauBDT.cxx:17
LVL1::eFEXtauBDT::superCellToPtr
unsigned int * superCellToPtr(int eta, int phi, int layer)
Definition: eFEXtauBDT.cxx:79
LVL1::eFEXtauBDT::m_emEtXMultiplierOverflow
std::vector< unsigned int > m_emEtXMultiplierOverflow
Definition: eFEXtauBDT.h:129
LVL1::eFEXtauBDT::~eFEXtauBDT
virtual ~eFEXtauBDT()
Destructor.
Definition: eFEXtauBDT.cxx:32
AthAlgTool
Definition: AthAlgTool.h:26
LVL1::eFEXtauBDT::BitLeftShift
unsigned int BitLeftShift(unsigned int number, int by, int totalNBits)
Definition: eFEXtauBDT.cxx:347
MuonParameters::beta
@ beta
Definition: MuonParamDefs.h:144
LVL1::eFEXtauBDT::m_bdtVars
std::vector< unsigned int > m_bdtVars
Definition: eFEXtauBDT.h:133
LVL1::eFEXtauBDT::initEMETPointers
void initEMETPointers()
Definition: eFEXtauBDT.cxx:105
LVL1::eFEXtauBDT::computeIsCentralTowerSeed
void computeIsCentralTowerSeed()
Definition: eFEXtauBDT.cxx:414
LVL1::eFEXtauBDT::computeEstimate
unsigned int computeEstimate(std::vector< unsigned int * > &ptr_list, bool &overflow, int resultNBits)
Definition: eFEXtauBDT.cxx:315
LVL1::eFEXtauBDT::computeHADETEstimate
void computeHADETEstimate()
Definition: eFEXtauBDT.cxx:274
SCellIndexing.h
LVL1::eFEXtauBDT::multWithOverflow
unsigned int multWithOverflow(unsigned int a, unsigned int b, bool &overflow, int resultNBits)
Definition: eFEXtauBDT.cxx:328
BDTVariable
Definition: eFEXBDT.h:16
LVL1::eFEXtauBDT::next
void next()
Definition: eFEXtauBDT.cxx:176