ATLAS Offline Software
Loading...
Searching...
No Matches
eFEXtauBDT.h
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.h -
7// -------------------
8// begin : 15 09 2022
9// email : david.reikher@cern.ch
10// ***************************************************************************/
11
12#ifndef eFEXtauBDT_H
13#define eFEXtauBDT_H
14
17#include <vector>
18
19class AthAlgTool;
20
21namespace LVL1 {
22// Doxygen class description below:
25
27
28public:
30 eFEXtauBDT(AthAlgTool *log, std::string config_path);
31
33 virtual ~eFEXtauBDT();
34
35 void next();
36
37 void setPointerToSCell(int eta, int phi, int layer, unsigned int *sCellPtr);
39 unsigned int *fracMultipliers);
40 void setPointerToBDTThresholdsParam(int index, unsigned int *bdtThresholds);
41 void setPointerToETThresholdParam(unsigned int *etThreshold);
42 void setPointerToMaxETParam(unsigned int *maxEtThreshold);
43 void setPointerToMaxETParamFrac(unsigned int *maxEtThreshold);
44 void setPointerToBDTMinETParam(unsigned int *bdtMinEtThreshold);
45
46 void buildBDTVariables();
47 void computeBDTScore();
48 void computeETEstimate();
53 void computeTowers();
56 void debugPrintTowers();
57 void initBDTVars();
58 void initETPointers();
59 void initEMETPointers();
60 void initHADETPointers();
61 void initTowersPointers();
62 unsigned int getETEstimate() const { return m_eTEstimate; }
63 unsigned int getEMETEstimate() const { return m_EM_eTEstimate; }
64 unsigned int getEMETEstimateOverflow() const {
66 }
67 unsigned int getHADETEstimate() const { return m_HAD_eTEstimate; }
68 unsigned int getHADETEstimateOverflow() const {
70 }
71 std::vector<unsigned int> &getBDTVars() { return m_bdtVars; }
72 std::vector<unsigned int> &getTowers() { return m_towers; }
73 std::vector<unsigned int> &getEMMultipliedByFracParams() {
74 return m_emEtXMultiplier;
75 }
76 std::vector<unsigned int> &getEMMultipliedByFracParamsOverflow() {
78 }
79 unsigned int getBDTScoreShifted() const { return m_bdtScoreShifted; }
80
81 // ======= These are the important getters ======
82 // These are the fields in the algorithm's output TOB structure in the
83 // VHDL implementation of eFEXFirmware (TriggerObjectCore_tau type in VHDL)
84 unsigned int getET() const;
85 unsigned int getTOBETOverflow() const { return m_eTEstimateOverflow; }
86 unsigned int getIsMax() const { return m_isSeeded; }
87 unsigned int getBDTCondition() const { return m_bdtCondition; }
88 unsigned int getFracCondition() const { return m_fracCondition; }
89 unsigned int getBDTScore() const { return m_bdtScore; }
90 // ================================================================================
91
92 unsigned int multWithOverflow(unsigned int a, unsigned int b, bool &overflow,
93 int resultNBits);
94 inline bool isOverflow(unsigned int number, int nBits);
95 inline unsigned int BitLeftShift(unsigned int number, int by, int totalNBits);
96 inline int flatTowerIndex(int eta, int phi);
97
98private:
99 void initPointers(const std::vector<std::vector<int>> &scells,
100 std::vector<unsigned int *> &ptr_list);
101 unsigned int computeEstimate(std::vector<unsigned int *> &ptr_list,
102 bool &overflow, int resultNBits);
103
104 unsigned int *superCellToPtr(int eta, int phi, int layer);
105
106 unsigned int *m_em0cells[3][3]{};
107 unsigned int *m_em1cells[12][3]{};
108 unsigned int *m_em2cells[12][3]{};
109 unsigned int *m_em3cells[3][3]{};
110 unsigned int *m_hadcells[3][3]{};
111 unsigned int *m_fracMultipliers[3]{};
112 unsigned int *m_bdtThresholds[3]{};
113 unsigned int *m_etThreshold{};
114 unsigned int *m_maxEtThreshold{};
115 unsigned int *m_maxEtThresholdFrac{};
116 unsigned int *m_bdtMinEtThreshold{};
117 unsigned int m_bdtScore = 0;
118 unsigned int m_bdtScoreShifted = 0;
119 unsigned int m_eTEstimate = 0;
121 unsigned int m_EM_eTEstimate = 0;
123 unsigned int m_HAD_eTEstimate = 0;
125 unsigned int m_fracCondition = 0;
126 unsigned int m_bdtCondition = 0;
127 bool m_isSeeded = false;
128 unsigned int m_hadEstimateShifted = 0;
129 std::vector<unsigned int> m_emEtXMultiplier;
130 std::vector<unsigned int> m_emEtXMultiplierOverflow;
131 std::vector<unsigned int> m_towers;
132
133 // Final computed BDT variables
134 std::vector<unsigned int> m_bdtVars;
135
136 // BDT variables are sums of supercells. The pointers to the memory locations
137 // containing the supercell ET values for each variable are stored in the
138 // following vector. Index in the vector corresponds to index of the variable.
139 std::vector<std::vector<unsigned int *>> m_bdtVarComputeSCellPointers;
140
141 // List of pointers to supercells that participate in the sum to estimate the
142 // ET
143 std::vector<unsigned int *> m_eTComputeSCellPointers;
144 std::vector<unsigned int *> m_EM_eTComputeSCellPointers;
145 std::vector<unsigned int *> m_HAD_eTComputeSCellPointers;
146 std::vector<std::vector<unsigned int *>> m_towersComputeSCellPointers;
147
148 bool m_bdtVarsComputed = false;
151};
152
153} // namespace LVL1
154
155#endif
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
static Double_t a
unsigned int getHADETEstimateOverflow() const
Definition eFEXtauBDT.h:68
unsigned int * m_em3cells[3][3]
Definition eFEXtauBDT.h:109
int flatTowerIndex(int eta, int phi)
unsigned int getBDTCondition() const
Definition eFEXtauBDT.h:87
unsigned int * m_maxEtThreshold
Definition eFEXtauBDT.h:114
unsigned int getEMETEstimate() const
Definition eFEXtauBDT.h:63
unsigned int getHADETEstimate() const
Definition eFEXtauBDT.h:67
unsigned int getEMETEstimateOverflow() const
Definition eFEXtauBDT.h:64
std::vector< unsigned int * > m_HAD_eTComputeSCellPointers
Definition eFEXtauBDT.h:145
void initPointers(const std::vector< std::vector< int > > &scells, std::vector< unsigned int * > &ptr_list)
unsigned int BitLeftShift(unsigned int number, int by, int totalNBits)
void setPointerToSCell(int eta, int phi, int layer, unsigned int *sCellPtr)
std::vector< unsigned int > & getEMMultipliedByFracParams()
Definition eFEXtauBDT.h:73
void computeHADETEstimate()
unsigned int m_hadEstimateShifted
Definition eFEXtauBDT.h:128
std::vector< unsigned int > & getBDTVars()
Definition eFEXtauBDT.h:71
unsigned int m_eTEstimate
Definition eFEXtauBDT.h:119
void setPointerToBDTMinETParam(unsigned int *bdtMinEtThreshold)
unsigned int m_bdtCondition
Definition eFEXtauBDT.h:126
unsigned int m_bdtScore
Definition eFEXtauBDT.h:117
unsigned int getTOBETOverflow() const
Definition eFEXtauBDT.h:85
std::vector< unsigned int > m_emEtXMultiplierOverflow
Definition eFEXtauBDT.h:130
std::vector< unsigned int * > m_eTComputeSCellPointers
Definition eFEXtauBDT.h:143
bool m_eTEstimateOverflow
Definition eFEXtauBDT.h:120
unsigned int * m_etThreshold
Definition eFEXtauBDT.h:113
unsigned int computeEstimate(std::vector< unsigned int * > &ptr_list, bool &overflow, int resultNBits)
unsigned int * m_em1cells[12][3]
Definition eFEXtauBDT.h:107
unsigned int multWithOverflow(unsigned int a, unsigned int b, bool &overflow, int resultNBits)
unsigned int m_fracCondition
Definition eFEXtauBDT.h:125
unsigned int * m_fracMultipliers[3]
Definition eFEXtauBDT.h:111
unsigned int * superCellToPtr(int eta, int phi, int layer)
unsigned int * m_maxEtThresholdFrac
Definition eFEXtauBDT.h:115
void setPointerToBDTThresholdsParam(int index, unsigned int *bdtThresholds)
void setPointerToMaxETParam(unsigned int *maxEtThreshold)
unsigned int getBDTScoreShifted() const
Definition eFEXtauBDT.h:79
std::vector< unsigned int > m_towers
Definition eFEXtauBDT.h:131
unsigned int getETEstimate() const
Definition eFEXtauBDT.h:62
unsigned int getIsMax() const
Definition eFEXtauBDT.h:86
void computeBDTCondition()
unsigned int getFracCondition() const
Definition eFEXtauBDT.h:88
std::vector< std::vector< unsigned int * > > m_towersComputeSCellPointers
Definition eFEXtauBDT.h:146
virtual ~eFEXtauBDT()
Destructor.
unsigned int getET() const
std::vector< unsigned int > m_emEtXMultiplier
Definition eFEXtauBDT.h:129
void computeIsCentralTowerSeed()
void initTowersPointers()
unsigned int * m_hadcells[3][3]
Definition eFEXtauBDT.h:110
unsigned int * m_em2cells[12][3]
Definition eFEXtauBDT.h:108
unsigned int getBDTScore() const
Definition eFEXtauBDT.h:89
AthAlgTool * m_log
Definition eFEXtauBDT.h:150
bool m_EM_eTEstimateOverflow
Definition eFEXtauBDT.h:122
unsigned int * m_bdtMinEtThreshold
Definition eFEXtauBDT.h:116
std::vector< unsigned int > & getTowers()
Definition eFEXtauBDT.h:72
unsigned int * m_em0cells[3][3]
Definition eFEXtauBDT.h:106
void setPointerToETThresholdParam(unsigned int *etThreshold)
void computeFracCondition()
std::vector< unsigned int * > m_EM_eTComputeSCellPointers
Definition eFEXtauBDT.h:144
bool isOverflow(unsigned int number, int nBits)
void setPointerToFracMultipliersParam(int index, unsigned int *fracMultipliers)
void debugPrintBDTVariables()
eFEXtauBDT(AthAlgTool *log, std::string config_path)
Constructors.
std::vector< unsigned int > & getEMMultipliedByFracParamsOverflow()
Definition eFEXtauBDT.h:76
void setPointerToMaxETParamFrac(unsigned int *maxEtThreshold)
unsigned int m_HAD_eTEstimate
Definition eFEXtauBDT.h:123
std::vector< unsigned int > m_bdtVars
Definition eFEXtauBDT.h:134
void computeEMETEstimate()
unsigned int * m_bdtThresholds[3]
Definition eFEXtauBDT.h:112
unsigned int m_EM_eTEstimate
Definition eFEXtauBDT.h:121
std::vector< std::vector< unsigned int * > > m_bdtVarComputeSCellPointers
Definition eFEXtauBDT.h:139
bool m_HAD_eTEstimateOverflow
Definition eFEXtauBDT.h:124
unsigned int m_bdtScoreShifted
Definition eFEXtauBDT.h:118
eFexTowerBuilder creates xAOD::eFexTowerContainer from supercells (LATOME) and triggerTowers (TREX) i...
Definition index.py:1
std::string number(const double &d, const std::string &s)
Definition utils.cxx:186