ATLAS Offline Software
Loading...
Searching...
No Matches
LVL1::eFEXFPGA Class Reference

#include <eFEXFPGA.h>

Inheritance diagram for LVL1::eFEXFPGA:
Collaboration diagram for LVL1::eFEXFPGA:

Public Member Functions

 eFEXFPGA (const std::string &type, const std::string &name, const IInterface *parent)
 Constructors.
virtual StatusCode initialize ()
 standard Athena-Algorithm method
virtual ~eFEXFPGA ()
 Destructor.
virtual StatusCode init (int id, int efexid)
virtual StatusCode execute (eFEXOutputCollection *inputOutputCollection, const EventContext &ctx)
virtual void reset ()
virtual int getID () const
virtual void SetTowersAndCells_SG (int[][6])
virtual void SetIsoWP (const std::vector< unsigned int > &, const std::vector< unsigned int > &, unsigned int &, unsigned int) const
virtual std::vector< std::unique_ptr< eFEXegTOB > > getEmTOBs ()
virtual std::vector< std::unique_ptr< eFEXtauTOB > > getTauHeuristicTOBs ()
virtual std::vector< std::unique_ptr< eFEXtauTOB > > getTauBDTTOBs ()
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysInitialize () override
 Perform system initialization for an algorithm.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const

Static Public Member Functions

static const InterfaceID & interfaceID ()

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed.

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

std::vector< std::unique_ptr< eFEXtauTOB > > getTauTOBs (std::vector< std::unique_ptr< eFEXtauTOB > > &tauTobObjects)
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

const unsigned int m_eFexStep = 25
 Internal data.
int m_id = 0
int m_efexid = 0
std::vector< std::unique_ptr< eFEXegTOB > > m_emTobObjects
std::vector< std::unique_ptr< eFEXtauTOB > > m_tauHeuristicTobObjects
std::vector< std::unique_ptr< eFEXtauTOB > > m_tauBDTTobObjects
int m_eTowersIDs [10][6] {}
SG::ReadHandleKey< TrigConf::L1Menum_l1MenuKey
SG::ReadHandleKey< LVL1::eTowerContainerm_eTowerContainerKey
ToolHandle< eFEXtauAlgoBasem_eFEXtauAlgoTool
ToolHandle< eFEXtauAlgoBasem_eFEXtauBDTAlgoTool
ToolHandle< eFEXegAlgom_eFEXegAlgoTool
ToolHandle< eFEXFormTOBsm_eFEXFormTOBsTool {this, "eFEXFormTOBs", "LVL1::eFEXFormTOBs", "Tool that creates eFEX TOB words"}
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default).
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default).
std::vector< SG::VarHandleKeyArray * > m_vhka
bool m_varHandleArraysDeclared

Detailed Description

Definition at line 38 of file eFEXFPGA.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< AlgTool > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ eFEXFPGA()

LVL1::eFEXFPGA::eFEXFPGA ( const std::string & type,
const std::string & name,
const IInterface * parent )

Constructors.

Definition at line 30 of file eFEXFPGA.cxx.

30 :
31 AthAlgTool(type,name,parent)
32{
33 declareInterface<eFEXFPGA>(this);
34}
AthAlgTool()
Default constructor:

◆ ~eFEXFPGA()

LVL1::eFEXFPGA::~eFEXFPGA ( )
virtual

Destructor.

Definition at line 38 of file eFEXFPGA.cxx.

39 {
40 }

Member Function Documentation

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T, V, H > & hndl,
const SG::VarHandleKeyType &  )
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158 {
160 hndl.value(),
161 hndl.documentation());
162
163 }
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( Gaudi::Property< T, V, H > & t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145 {
146 typedef typename SG::HandleClassifier<T>::type htype;
148 }
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>

◆ detStore()

const ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

◆ evtStore()

ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

◆ execute()

StatusCode LVL1::eFEXFPGA::execute ( eFEXOutputCollection * inputOutputCollection,
const EventContext & ctx )
virtual

Definition at line 73 of file eFEXFPGA.cxx.

73 {
74 m_emTobObjects.clear();
76 m_tauBDTTobObjects.clear();
77
78 SG::ReadHandle<eTowerContainer> eTowerContainer(m_eTowerContainerKey,ctx);
79 if(!eTowerContainer.isValid()){
80 ATH_MSG_FATAL("Could not retrieve container " << m_eTowerContainerKey.key() );
81 return StatusCode::FAILURE;
82 }
83
84 // Retrieve the L1 menu configuration
85 SG::ReadHandle<TrigConf::L1Menu> l1Menu (m_l1MenuKey, ctx);
86 ATH_CHECK(l1Menu.isValid());
87
88 auto & thr_eEM = l1Menu->thrExtraInfo().eEM();
89 auto & thr_eTAU = l1Menu->thrExtraInfo().eTAU();
90
91 auto emAlgoVersion = thr_eEM.algoVersion();
92 auto tauAlgoVersion = thr_eTAU.algoVersion();
93
94
95 // Define eta range to consider extra towers in edge cases
96 int min_eta;
97 int overflow_eta;
98 if ((m_efexid%3 == 0) && (m_id == 0)) {
99 min_eta = 0;
100 } else {
101 min_eta = 1;
102 }
103 if ((m_efexid%3 == 2) && (m_id == 3)) {
104 overflow_eta = 6;
105 } else {
106 overflow_eta = 5;
107 }
108
109 ATH_CHECK( m_eFEXegAlgoTool->safetyTest(ctx) );
110 for(int ieta = min_eta; ieta < overflow_eta; ieta++) {
111 for(int iphi = 1; iphi < 9; iphi++) {
112
113 int tobtable[3][3]={
114 {ieta > 0 ? m_eTowersIDs[iphi-1][ieta-1] : 0,
115 m_eTowersIDs[iphi-1][ieta],
116 ieta < 5 ? m_eTowersIDs[iphi-1][ieta+1] : 0},
117
118 {ieta > 0 ? m_eTowersIDs[iphi][ieta-1] : 0,
119 m_eTowersIDs[iphi][ieta],
120 ieta < 5 ? m_eTowersIDs[iphi][ieta+1] : 0},
121
122 {ieta > 0 ? m_eTowersIDs[iphi+1][ieta-1] : 0,
123 m_eTowersIDs[iphi+1][ieta],
124 ieta < 5 ? m_eTowersIDs[iphi+1][ieta+1] : 0},
125 };
126
127
128 m_eFEXegAlgoTool->setup(tobtable, m_efexid, m_id, ieta);
129
130 // ignore any tobs without a seed, move on to the next window
131 if (m_eFEXegAlgoTool->hasSeed() == false) continue;
132 unsigned int seed = m_eFEXegAlgoTool->getSeed();
133 unsigned int und = (m_eFEXegAlgoTool->getUnD() ? 1 : 0);
134
135 // the minimum energy to send to topo (not eta dependent yet, but keep inside loop as it will be eventually?)
136 unsigned int ptMinToTopoCounts = thr_eEM.ptMinToTopoCounts();
137
138 //returns a unsigned integer et value corresponding to the... eFEX EM cluster in 25 MeV internal calculation scale
139 unsigned int eEMTobEt = m_eFEXegAlgoTool->getET();
140
141 // thresholds from Trigger menu
142 // the menu eta runs from -25 to 24
143 int menuEta = m_id*4 + (m_efexid%3)*16 + ieta - 25;
144 auto iso_loose = thr_eEM.isolation(TrigConf::Selection::WP::LOOSE, menuEta);
145 auto iso_medium = thr_eEM.isolation(TrigConf::Selection::WP::MEDIUM, menuEta);
146 auto iso_tight = thr_eEM.isolation(TrigConf::Selection::WP::TIGHT, menuEta);
147
148 std::vector<unsigned int> threshReta;
149 threshReta.push_back(iso_loose.reta_fw());
150 threshReta.push_back(iso_medium.reta_fw());
151 threshReta.push_back(iso_tight.reta_fw());
152
153 std::vector<unsigned int> threshRhad;
154 threshRhad.push_back(iso_loose.rhad_fw());
155 threshRhad.push_back(iso_medium.rhad_fw());
156 threshRhad.push_back(iso_tight.rhad_fw());
157
158 std::vector<unsigned int> threshWstot;
159 threshWstot.push_back(iso_loose.wstot_fw());
160 threshWstot.push_back(iso_medium.wstot_fw());
161 threshWstot.push_back(iso_tight.wstot_fw());
162
163 ATH_MSG_DEBUG("ieta=" << ieta << " loose => reta_fw=" << threshReta[0] << ", rhad_fw=" << threshRhad[0] << ", wstot_fw=" << threshWstot[0]);
164 ATH_MSG_DEBUG("ieta=" << ieta << " medium => reta_fw=" << threshReta[1] << ", rhad_fw=" << threshRhad[1] << ", wstot_fw=" << threshWstot[1]);
165 ATH_MSG_DEBUG("ieta=" << ieta << " tight => reta_fw=" << threshReta[2] << ", rhad_fw=" << threshRhad[2] << ", wstot_fw=" << threshWstot[2]);
166
167 // Get Reta and Rhad outputs
168 std::vector<unsigned int> RetaCoreEnv;
169 m_eFEXegAlgoTool->getReta(RetaCoreEnv);
170 std::vector<unsigned int> RhadEMHad;
171 m_eFEXegAlgoTool->getRhad(RhadEMHad);
172 std::vector<unsigned int> WstotDenNum;
173 m_eFEXegAlgoTool->getWstot(WstotDenNum);
174
175 // Set Reta, Rhad and Wstot WP
176 unsigned int RetaWP = 0;
177 unsigned int RhadWP = 0;
178 unsigned int WstotWP = 0;
179
180 // bitshifts for the different iso vars
181 unsigned int RetaBitS = 3;
182 unsigned int RhadBitS = 3;
183 unsigned int WstotBitS = 5;
184
185 unsigned int maxEtCountsEm = thr_eEM.maxEtCounts(m_eFexStep);
186 if (eEMTobEt >= maxEtCountsEm){
187 RetaWP = 3;
188 RhadWP = 3;
189 WstotWP = 3;
190 }
191 else{
192 SetIsoWP(RetaCoreEnv,threshReta,RetaWP,RetaBitS);
193 SetIsoWP(RhadEMHad,threshRhad,RhadWP,RhadBitS);
194 SetIsoWP(WstotDenNum,threshWstot,WstotWP,WstotBitS);
195 }
196 int eta_ind = ieta; // No need to offset eta index with new 0-5 convention
197 int phi_ind = iphi - 1;
198
199 //form the egamma tob word and xTOB words
200 uint32_t tobword = m_eFEXFormTOBsTool->formEmTOBWord(m_id,eta_ind,phi_ind,RhadWP,WstotWP,RetaWP,seed,und,eEMTobEt,ptMinToTopoCounts, emAlgoVersion);
201 std::vector<uint32_t> xtobwords = m_eFEXFormTOBsTool->formEmxTOBWords(m_efexid,m_id,eta_ind,phi_ind,RhadWP,WstotWP,RetaWP,seed,und,eEMTobEt,ptMinToTopoCounts, emAlgoVersion);
202
203 std::unique_ptr<eFEXegTOB> tmp_tob = m_eFEXegAlgoTool->geteFEXegTOB();
204
205 tmp_tob->setFPGAID(m_id);
206 tmp_tob->seteFEXID(m_efexid);
207 tmp_tob->setEta(ieta);
208 tmp_tob->setPhi(iphi);
209 tmp_tob->setTobword(tobword);
210 tmp_tob->setxTobword0(xtobwords[0]);
211 tmp_tob->setxTobword1(xtobwords[1]);
212
213 // for plotting
214 if (inputOutputCollection->getdooutput() && (tobword != 0) && (eEMTobEt != 0)) {
215 inputOutputCollection->addeFexNumber(m_efexid);
216 inputOutputCollection->addEMtob(tobword);
217 inputOutputCollection->addValue_eg("WstotNum", tmp_tob->getWstotNum());
218 inputOutputCollection->addValue_eg("WstotDen", tmp_tob->getWstotDen());
219 inputOutputCollection->addValue_eg("RetaNum", tmp_tob->getRetaCore());
220 inputOutputCollection->addValue_eg("RetaDen", tmp_tob->getRetaEnv());
221 inputOutputCollection->addValue_eg("RhadNum", tmp_tob->getRhadEM());
222 inputOutputCollection->addValue_eg("RhadDen", tmp_tob->getRhadHad());
223 inputOutputCollection->addValue_eg("haveSeed", m_eFEXegAlgoTool->hasSeed());
224 inputOutputCollection->addValue_eg("ET", m_eFEXegAlgoTool->getET());
225 float eta = 9999;
226 m_eFEXegAlgoTool->getRealEta(eta);
227 inputOutputCollection->addValue_eg("eta", eta);
228 float phi = 9999;
229 m_eFEXegAlgoTool->getRealPhi(phi);
230 inputOutputCollection->addValue_eg("phi", phi);
231 unsigned int em_et = 9999;
232 m_eFEXegAlgoTool->getCoreEMTowerET(em_et);
233 inputOutputCollection->addValue_eg("em", em_et);
234 unsigned int had_et = 9999;
235 m_eFEXegAlgoTool->getCoreHADTowerET(had_et);
236 inputOutputCollection->addValue_eg("had", had_et);
237 inputOutputCollection->fill_eg();
238 }
239
240 // Now we've finished with that object we can move it into the class results store
241 if ( (tobword != 0) && (eEMTobEt != 0) ) m_emTobObjects.push_back(std::move(tmp_tob));
242
243 }
244 }
245
246 // --------------- TAU -------------
247 ATH_CHECK( m_eFEXtauAlgoTool->safetyTest(ctx) );
248 ATH_CHECK( m_eFEXtauBDTAlgoTool->safetyTest(ctx) );
249 for(int ieta = min_eta; ieta < overflow_eta; ieta++)
250 {
251 for(int iphi = 1; iphi < 9; iphi++)
252 {
253 int tobtable[3][3]={
254 {ieta > 0 ? m_eTowersIDs[iphi-1][ieta-1] : 0,
255 m_eTowersIDs[iphi-1][ieta],
256 ieta < 5 ? m_eTowersIDs[iphi-1][ieta+1] : 0},
257
258 {ieta > 0 ? m_eTowersIDs[iphi][ieta-1] : 0,
259 m_eTowersIDs[iphi][ieta],
260 ieta < 5 ? m_eTowersIDs[iphi][ieta+1] : 0},
261
262 {ieta > 0 ? m_eTowersIDs[iphi+1][ieta-1] : 0,
263 m_eTowersIDs[iphi+1][ieta],
264 ieta < 5 ? m_eTowersIDs[iphi+1][ieta+1] : 0},
265 };
266
267
268 m_eFEXtauAlgoTool->setup(tobtable, m_efexid, m_id, ieta);
269 m_eFEXtauAlgoTool->setAlgoVersion(tauAlgoVersion);
270 m_eFEXtauBDTAlgoTool->setup(tobtable, m_efexid, m_id, ieta);
271
272 if ( m_eFEXtauAlgoTool->isCentralTowerSeed() != m_eFEXtauBDTAlgoTool->isCentralTowerSeed() )
273 {
274 ATH_MSG_FATAL("BDT tau algo and heuristic tau algo should agree on seeding for all TOBs");
275 return StatusCode::FAILURE;
276 }
277
278 if (!m_eFEXtauAlgoTool->isCentralTowerSeed()){ continue; }
279
280 // the minimum energy to send to topo (not eta dependent yet, but keep inside loop as it will be eventually?)
281 unsigned int ptTauMinToTopoCounts = thr_eTAU.ptMinToTopoCounts();
282
283 unsigned int ptTauMinToTopoInEfexCounts = TrigConf::energyInCounts(thr_eTAU.ptMinToTopoMeV(), m_eFexStep);
284
285 // Get Et of eFEX tau object in internal units (25 MeV)
286 unsigned int eTauTobEt = m_eFEXtauAlgoTool->getEt();
287 unsigned int eTauBDTTobEt = m_eFEXtauBDTAlgoTool->getEt();
288
289 // thresholds from Trigger menu
290 // the menu eta runs from -25 to 24
291 int menuEta = m_id*4 + (m_efexid%3)*16 + ieta - 25;
292 auto iso_loose = thr_eTAU.isolation(TrigConf::Selection::WP::LOOSE, menuEta);
293 auto iso_medium = thr_eTAU.isolation(TrigConf::Selection::WP::MEDIUM, menuEta);
294 auto iso_tight = thr_eTAU.isolation(TrigConf::Selection::WP::TIGHT, menuEta);
295
296 std::vector<unsigned int> threshRCore;
297 threshRCore.push_back(iso_loose.rCore_fw());
298 threshRCore.push_back(iso_medium.rCore_fw());
299 threshRCore.push_back(iso_tight.rCore_fw());
300
301 std::vector<unsigned int> threshRHad;
302 threshRHad.push_back(iso_loose.rHad_fw());
303 threshRHad.push_back(iso_medium.rHad_fw());
304 threshRHad.push_back(iso_tight.rHad_fw());
305
306 // Get isolation values
307 std::vector<unsigned int> rCoreVec;
308 m_eFEXtauAlgoTool->getRCore(rCoreVec);
309
310 std::vector<unsigned int> rHadVec;
311 m_eFEXtauAlgoTool->getRHad(rHadVec);
312
313 // BDT-based tau algorithm outputs (both 0 for heuristic algorithm)
314 unsigned int bdtScore = 0;
315 unsigned int bdtCondition = 0;
316 unsigned int bdtRHadWP = 0;
317
318 // Set isolation WP
319 unsigned int rCoreWP = 0;
320 unsigned int rHadWP = 0;
321
322 // Isolation bitshift value
323 unsigned int RcoreBitS = 3;
324 unsigned int RhadBitS = 3;
325
326 unsigned int maxEtCountsTau = thr_eTAU.maxEtCounts(m_eFexStep);
327 unsigned int bdtMinEtCounts = thr_eTAU.minIsoEtCounts(m_eFexStep);
328 if (eTauTobEt >= maxEtCountsTau) {
329 rCoreWP = 3;
330 rHadWP = 3;
331 } else {
332 SetIsoWP(rCoreVec,threshRCore,rCoreWP,RcoreBitS);
333 SetIsoWP(rHadVec,threshRHad,rHadWP,RhadBitS);
334 }
335
336 // Only one tau algorithm may be active and this is controlled by the L1 menu.
337 // When the BDT algorithm is active, the rCore field contains the BDT L/M/T thresholds.
338 std::vector<unsigned int> threshBDT;
339 threshBDT.push_back(iso_loose.rCore_fw());
340 threshBDT.push_back(iso_medium.rCore_fw());
341 threshBDT.push_back(iso_tight.rCore_fw());
342 // in tau algoVersion 2, the autopass threshold for rhad frac (last parameter) is hardcoded
343 m_eFEXtauBDTAlgoTool->setThresholds(threshRHad, threshBDT, ptTauMinToTopoInEfexCounts, maxEtCountsTau, bdtMinEtCounts, (tauAlgoVersion==2) ? 0x0ff0 : maxEtCountsTau);
344 // Re-compute after setting thresholds.
345 // Threshold bits in the BDT algorithm's implementation are computed inside the algorithm class
346 m_eFEXtauBDTAlgoTool->compute();
347 eTauBDTTobEt = m_eFEXtauBDTAlgoTool->getEt();
348 bdtScore = m_eFEXtauBDTAlgoTool->getBDTScore();
349 bdtCondition = m_eFEXtauBDTAlgoTool->getBDTCondition();
350 bdtRHadWP = m_eFEXtauBDTAlgoTool->getBDTHadFracCondition();
351
352 unsigned int seed = m_eFEXtauAlgoTool->getSeed();
353 // Heuristic seed as returned is supercell value within 3x3 area, here want it within central cell
354 seed = seed - 4;
355
356 unsigned int und = (m_eFEXtauAlgoTool->getUnD() ? 1 : 0);
357
358 unsigned int bdtSeed = m_eFEXtauBDTAlgoTool->getSeed();
359
360 int eta_ind = ieta; // No need to offset eta index with new 0-5 convention
361 int phi_ind = iphi - 1;
362
363 // Form the tau TOB word and xTOB words
364 std::vector<uint32_t> xtobwords;
365 std::vector<uint32_t> xtobwordsBDT;
366
367 ATH_MSG_DEBUG("m_id: " << m_id << ", eta_ind: " << eta_ind << ", phi_ind: "
368 << phi_ind << ", eTauBDTTobEt: " << eTauBDTTobEt
369 << ", eTauTobEt: " << eTauTobEt << ", ptTauMinToTopoCounts: "
370 << ptTauMinToTopoCounts << ", maxEtCountsTau: " << maxEtCountsTau
371 << ", bdtScore: " << bdtScore << " bdtMinEtCounts: " << bdtMinEtCounts << " bdtRHadWP " << bdtRHadWP);
372
373 uint32_t tobwordBDT = m_eFEXFormTOBsTool->formTauTOBWord(m_id, eta_ind, phi_ind, eTauBDTTobEt, bdtRHadWP, bdtCondition, bdtSeed,0, ptTauMinToTopoCounts, tauAlgoVersion);
374 xtobwordsBDT = m_eFEXFormTOBsTool->formTauxTOBWords(m_efexid, m_id, eta_ind, phi_ind, eTauBDTTobEt, bdtRHadWP, bdtCondition, bdtSeed, 0, ptTauMinToTopoCounts, tauAlgoVersion, bdtScore);
375 uint32_t tobword = m_eFEXFormTOBsTool->formTauTOBWord(m_id, eta_ind, phi_ind, eTauTobEt, rHadWP, rCoreWP, seed, und, ptTauMinToTopoCounts, 0);
376 xtobwords = m_eFEXFormTOBsTool->formTauxTOBWords(m_efexid, m_id, eta_ind, phi_ind, eTauTobEt, rHadWP, rCoreWP, seed, und, ptTauMinToTopoCounts, 0, 0);
377
378 std::unique_ptr<eFEXtauTOB> tmp_tau_tob = m_eFEXtauAlgoTool->getTauTOB();
379 tmp_tau_tob->setFPGAID(m_id);
380 tmp_tau_tob->seteFEXID(m_efexid);
381 tmp_tau_tob->setEta(ieta);
382 tmp_tau_tob->setPhi(iphi);
383 tmp_tau_tob->setTobword(tobword);
384 tmp_tau_tob->setxTobword0(xtobwords[0]);
385 tmp_tau_tob->setxTobword1(xtobwords[1]);
386
387 std::unique_ptr<eFEXtauTOB> tmp_tau_tob_bdt = m_eFEXtauBDTAlgoTool->getTauTOB();
388 tmp_tau_tob_bdt->setFPGAID(m_id);
389 tmp_tau_tob_bdt->seteFEXID(m_efexid);
390 tmp_tau_tob_bdt->setEta(ieta);
391 tmp_tau_tob_bdt->setPhi(iphi);
392 tmp_tau_tob_bdt->setTobword(tobwordBDT);
393 tmp_tau_tob_bdt->setxTobword0(xtobwordsBDT[0]);
394 tmp_tau_tob_bdt->setxTobword1(xtobwordsBDT[1]);
395
396 // for plotting
397 if ((inputOutputCollection->getdooutput()) && ( tobword != 0 )) {
398 inputOutputCollection->addValue_tau("isCentralTowerSeed", m_eFEXtauAlgoTool->isCentralTowerSeed());
399 inputOutputCollection->addValue_tau("Et", m_eFEXtauAlgoTool->getEt());
400 inputOutputCollection->addValue_tau("EtBDT", m_eFEXtauBDTAlgoTool->getEt());
401 inputOutputCollection->addValue_tau("Eta", ieta);
402 inputOutputCollection->addValue_tau("Phi", iphi);
403 const LVL1::eTower * centerTower = eTowerContainer->findTower(m_eTowersIDs[iphi][ieta]);
404 const LVL1::eTower * oneOffEtaTower = ieta < 5 ? eTowerContainer->findTower(m_eTowersIDs[iphi][ieta+1]) : nullptr;
405 const LVL1::eTower * oneBelowEtaTower = ieta > 0 ? eTowerContainer->findTower(m_eTowersIDs[iphi][ieta-1]) : nullptr;
406 inputOutputCollection->addValue_tau("CenterTowerEt", centerTower->getTotalET());
407 inputOutputCollection->addValue_tau("OneOffEtaTowerEt", oneOffEtaTower ? oneOffEtaTower->getTotalET() : 0);
408 inputOutputCollection->addValue_tau("OneBelowEtaTowerEt", oneBelowEtaTower ? oneBelowEtaTower->getTotalET() : 0);
409 inputOutputCollection->addValue_tau("FloatEta", centerTower->eta() * centerTower->getPosNeg());
410 inputOutputCollection->addValue_tau("FloatPhi", centerTower->phi());
411 inputOutputCollection->addValue_tau("RCoreCore", rCoreVec[0]);
412 inputOutputCollection->addValue_tau("RCoreEnv", rCoreVec[1]);
413 inputOutputCollection->addValue_tau("RealRCore", m_eFEXtauAlgoTool->getRealRCore());
414 inputOutputCollection->addValue_tau("RCoreWP", rCoreWP);
415 inputOutputCollection->addValue_tau("RHadCore", rHadVec[0]);
416 inputOutputCollection->addValue_tau("RHadEnv", rHadVec[1]);
417 inputOutputCollection->addValue_tau("RealRHad", m_eFEXtauAlgoTool->getRealRHad());
418 inputOutputCollection->addValue_tau("RealRHadBDT", m_eFEXtauBDTAlgoTool->getRealRHad());
419 inputOutputCollection->addValue_tau("RHadWP", rHadWP);
420 inputOutputCollection->addValue_tau("Seed", seed);
421 inputOutputCollection->addValue_tau("UnD", und);
422 inputOutputCollection->addValue_tau("BDTScore", bdtScore);
423 inputOutputCollection->addValue_tau("BDTCondition", bdtCondition);
424 inputOutputCollection->addValue_tau("eFEXID", m_efexid);
425 inputOutputCollection->addValue_tau("FPGAID", m_id);
426
427
428 inputOutputCollection->fill_tau();
429 }
430 // Now we've finished with that object we can move it into the class results store
431 if ( tobword != 0 ) m_tauHeuristicTobObjects.push_back(std::move(tmp_tau_tob));
432 if ( tobwordBDT != 0 ) m_tauBDTTobObjects.push_back(std::move(tmp_tau_tob_bdt));
433
434 }
435 }
436
437 return StatusCode::SUCCESS;
438}
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_FATAL(x)
#define ATH_MSG_DEBUG(x)
const unsigned int m_eFexStep
Internal data.
Definition eFEXFPGA.h:67
ToolHandle< eFEXFormTOBs > m_eFEXFormTOBsTool
Definition eFEXFPGA.h:96
std::vector< std::unique_ptr< eFEXegTOB > > m_emTobObjects
Definition eFEXFPGA.h:71
std::vector< std::unique_ptr< eFEXtauTOB > > m_tauHeuristicTobObjects
Definition eFEXFPGA.h:72
SG::ReadHandleKey< TrigConf::L1Menu > m_l1MenuKey
Definition eFEXFPGA.h:76
ToolHandle< eFEXtauAlgoBase > m_eFEXtauAlgoTool
Definition eFEXFPGA.h:84
std::vector< std::unique_ptr< eFEXtauTOB > > m_tauBDTTobObjects
Definition eFEXFPGA.h:73
virtual void SetIsoWP(const std::vector< unsigned int > &, const std::vector< unsigned int > &, unsigned int &, unsigned int) const
Definition eFEXFPGA.cxx:557
ToolHandle< eFEXegAlgo > m_eFEXegAlgoTool
Definition eFEXFPGA.h:92
int m_eTowersIDs[10][6]
Definition eFEXFPGA.h:74
SG::ReadHandleKey< LVL1::eTowerContainer > m_eTowerContainerKey
Definition eFEXFPGA.h:80
ToolHandle< eFEXtauAlgoBase > m_eFEXtauBDTAlgoTool
Definition eFEXFPGA.h:88
float phi() const
Definition eTower.h:65
int getPosNeg() const
Definition eTower.h:121
int getTotalET() const
Get ET sum of all cells in the eTower in MeV.
Definition eTower.cxx:194
float eta() const
Definition eTower.h:64
unsigned int energyInCounts(unsigned int energyMeV, unsigned int energyResolutionMeV)
helper funtion to translate energies into counts
setEventNumber uint32_t

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase & ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ getEmTOBs()

std::vector< std::unique_ptr< eFEXegTOB > > LVL1::eFEXFPGA::getEmTOBs ( )
virtual

Definition at line 442 of file eFEXFPGA.cxx.

443{
444 // TOB sorting moved to eFEXSysSim to simplify xTOB production
445 // But leave this here in case more subtle requirement is uncovered in future
446 /*
447 auto tobsSort = m_emTobObjects;
448
449 ATH_MSG_DEBUG("number of tobs: " <<tobsSort.size() << " in FPGA: " << m_id << " before truncation");
450
451 // sort tobs by their et (last 12 bits of the 32 bit tob word)
452 std::sort (tobsSort.begin(), tobsSort.end(), TOBetSort<eFEXegTOB>);
453
454 // return the top 6 highest ET TOBs from the FPGA
455 if (tobsSort.size() > 6) tobsSort.resize(6);
456 return tobsSort;
457 */
458
459 /* Returning a vector of unique_pointers means this class will lose ownership.
460 This shouldn't be an issue since all this class does is create and return the
461 objects, but you should bear it in mind if you make changes */
462
463 // This copy seems to be needed - it won't let me pass m_emTobOjects directly (to do with being a class member?)
464 std::vector<std::unique_ptr<eFEXegTOB>> tobsSort;
465 for(auto &j : m_emTobObjects){
466 tobsSort.push_back(std::move(j));
467 }
468
469 return tobsSort;
470}

◆ getID()

virtual int LVL1::eFEXFPGA::getID ( ) const
inlinevirtual

Definition at line 53 of file eFEXFPGA.h.

53{return m_id;}

◆ getTauBDTTOBs()

std::vector< std::unique_ptr< eFEXtauTOB > > LVL1::eFEXFPGA::getTauBDTTOBs ( )
virtual

Definition at line 507 of file eFEXFPGA.cxx.

508{
510}
std::vector< std::unique_ptr< eFEXtauTOB > > getTauTOBs(std::vector< std::unique_ptr< eFEXtauTOB > > &tauTobObjects)
Definition eFEXFPGA.cxx:472

◆ getTauHeuristicTOBs()

std::vector< std::unique_ptr< eFEXtauTOB > > LVL1::eFEXFPGA::getTauHeuristicTOBs ( )
virtual

Definition at line 502 of file eFEXFPGA.cxx.

503{
505}

◆ getTauTOBs()

std::vector< std::unique_ptr< eFEXtauTOB > > LVL1::eFEXFPGA::getTauTOBs ( std::vector< std::unique_ptr< eFEXtauTOB > > & tauTobObjects)
private

Definition at line 472 of file eFEXFPGA.cxx.

473{
474 // TOB sorting moved to eFEXSysSim to simplify xTOB production
475 // But leave this here in case more subtle requirement is uncovered in future
476 /*
477 auto tobsSort = tauTobObjects;
478
479 ATH_MSG_DEBUG("number of tobs: " <<tobsSort.size() << " in FPGA: " << m_id << " before truncation");
480
481 // sort tobs by their et (last 12 bits of the 32 bit tob word)
482 std::sort (tobsSort.begin(), tobsSort.end(), TOBetSort<eFEXtauTOB>);
483
484 // return the top 6 highest ET TOBs from the FPGA
485 if (tobsSort.size() > 6) tobsSort.resize(6);
486 return tobsSort;
487 */
488
489 /* Returning a vector of unique_pointers means this class will lose ownership.
490 This shouldn't be an issue since all this class does is create and return the
491 objects, but you should bear it in mind if you make changes */
492
493 // This copy seems to be needed - it won't let me pass m_tauTobOjects directly (to do with being a class member?)
494 std::vector<std::unique_ptr<eFEXtauTOB>> tobsSort;
495 for(auto &j : tauTobObjects){
496 tobsSort.push_back(std::move(j));
497 }
498
499 return tobsSort;
500}

◆ init()

StatusCode LVL1::eFEXFPGA::init ( int id,
int efexid )
virtual

Definition at line 59 of file eFEXFPGA.cxx.

60{
61 m_id = id;
62 m_efexid = efexid;
63
64 return StatusCode::SUCCESS;
65}

◆ initialize()

StatusCode LVL1::eFEXFPGA::initialize ( )
virtual

standard Athena-Algorithm method

Definition at line 44 of file eFEXFPGA.cxx.

45{
46
47 ATH_CHECK(m_eTowerContainerKey.initialize());
48 ATH_CHECK( m_eFEXegAlgoTool.retrieve() );
49 ATH_CHECK( m_eFEXtauAlgoTool.retrieve() );
50 ATH_CHECK( m_eFEXtauBDTAlgoTool.retrieve() );
51
52
53 ATH_CHECK(m_l1MenuKey.initialize());
54
55 return StatusCode::SUCCESS;
56}

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< AlgTool > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ interfaceID()

const InterfaceID & LVL1::eFEXFPGA::interfaceID ( )
inlinestatic

Definition at line 41 of file eFEXFPGA.h.

41{ return IID_IeFEXFPGA; };
static const InterfaceID IID_IeFEXFPGA("LVL1::eFEXFPGA", 1, 0)
The eFEXFPGA class defines the structure of a single eFEX FPGA Its purpose is:

◆ msg()

MsgStream & AthCommonMsg< AlgTool >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24 {
25 return this->msgStream();
26 }

◆ msgLvl()

bool AthCommonMsg< AlgTool >::msgLvl ( const MSG::Level lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30 {
31 return this->msgLevel(lvl);
32 }

◆ outputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< AlgTool > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ renounce()

std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > AthCommonDataStore< AthCommonMsg< AlgTool > >::renounce ( T & h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381 {
382 h.renounce();
384 }
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ reset()

void LVL1::eFEXFPGA::reset ( )
virtual

Definition at line 67 of file eFEXFPGA.cxx.

67 {
68
69 m_id = -1;
70 m_efexid = -1;
71}

◆ SetIsoWP()

void LVL1::eFEXFPGA::SetIsoWP ( const std::vector< unsigned int > & CoreEnv,
const std::vector< unsigned int > & thresholds,
unsigned int & workingPoint,
unsigned int bitshift ) const
virtual

Definition at line 557 of file eFEXFPGA.cxx.

557 {
558 // Working point evaluted by Core * 2^bitshift > Threshold * Environment conditions
559 std::unordered_map<unsigned int, unsigned int> bsmap { {3, 8}, {5, 32}};
560
561 // if core (denom) has overflowed, automatically pass all thresholds
562 if (CoreEnv[0] > 0xffff) {
563 workingPoint = 3;
564 return;
565 }
566
567 unsigned int large = CoreEnv[0]*bsmap[bitshift]; // core
568 unsigned int small = CoreEnv[1]; // env
569
570 // Word length conditions
571 if (large > 0xffff ) large = 0xffff;
572 if (small > 0xffff ) small = 0xffff;
573
574 // Fail all if env sum overflows
575 if (small == 0xffff) {
576 workingPoint = 0;
577 return;
578 }
579
580 // Otherwise test thresholds in firmware order
581 // i.e. check lowest threshold failed rather than highest passed
582 if ( large < small*thresholds[0] ) {
583 workingPoint = 0;
584 return;
585 }
586 if ( large < small*thresholds[1] ) {
587 workingPoint = 1;
588 return;
589 }
590 if ( large < small*thresholds[2] ) {
591 workingPoint = 2;
592 return;
593 }
594 workingPoint = 3;
595 return;
596}

◆ SetTowersAndCells_SG()

void LVL1::eFEXFPGA::SetTowersAndCells_SG ( int tmp_eTowersIDs_subset[][6])
virtual

Definition at line 512 of file eFEXFPGA.cxx.

512 {
513
514 int rows = 10;
515 int cols = sizeof tmp_eTowersIDs_subset[0] / sizeof tmp_eTowersIDs_subset[0][0];
516
517 std::copy(&tmp_eTowersIDs_subset[0][0], &tmp_eTowersIDs_subset[0][0]+(10*6),&m_eTowersIDs[0][0]);
518
519 if(false){ //this prints out the eTower IDs that each FPGA is responsible for
520 ATH_MSG_DEBUG("\n---- eFEXFPGA --------- eFEX (" << m_efexid << " ----- FPGA (" << m_id << ") IS RESPONSIBLE FOR eTOWERS :");
521 for (int thisRow=rows-1; thisRow>=0; thisRow--){
522 for (int thisCol=0; thisCol<cols; thisCol++){
523 if(thisCol != cols-1){ ATH_MSG_DEBUG("| " << m_eTowersIDs[thisRow][thisCol] << " "); }
524 else { ATH_MSG_DEBUG("| " << m_eTowersIDs[thisRow][thisCol] << " |"); }
525 }
526 }
527 }
528
529
530 //-----------------------------------------------------------
531 // Set up a the second CSV file if necessary (should only need to be done if the mapping changes, which should never happen unless major changes to the simulation are required)
532 if(false){ // CSV CODE TO BE RE-INTRODUCED VERY SOON
533 SG::ReadHandle<eTowerContainer> eTowerContainer(m_eTowerContainerKey);
534 if(!eTowerContainer.isValid()){
535 ATH_MSG_FATAL("Could not retrieve container " << m_eTowerContainerKey.key() );
536 }
537
538 std::ofstream tower_fpga_efex_map;
539 tower_fpga_efex_map.open ("./tower_fpga_efex_map.csv", std::ios_base::app);
540
541 for (int thisRow=rows-1; thisRow>=0; thisRow--){
542 for (int thisCol=0; thisCol<cols; thisCol++){
543
544 const LVL1::eTower * tmpTower = eTowerContainer->findTower(m_eTowersIDs[thisRow][thisCol]);
545
546 tower_fpga_efex_map << m_efexid << "," << m_id << "," << m_eTowersIDs[thisRow][thisCol] << "," << tmpTower->eta() << "," << tmpTower->phi() << "\n";
547
548 }
549 }
550 }
551 //------------------------------------------------------------
552
553
554}

◆ sysInitialize()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysInitialize ( )
overridevirtualinherited

Perform system initialization for an algorithm.

We override this to declare all the elements of handle key arrays at the end of initialization. See comments on updateVHKA.

Reimplemented in asg::AsgMetadataTool, AthCheckedComponent< AthAlgTool >, AthCheckedComponent<::AthAlgTool >, and DerivationFramework::CfAthAlgTool.

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::updateVHKA ( Gaudi::Details::PropertyBase & )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308 {
309 // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310 // << " size: " << m_vhka.size() << endmsg;
311 for (auto &a : m_vhka) {
313 for (auto k : keys) {
314 k->setOwner(this);
315 }
316 }
317 }
std::vector< SG::VarHandleKeyArray * > m_vhka

Member Data Documentation

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default).

Definition at line 393 of file AthCommonDataStore.h.

◆ m_eFEXegAlgoTool

ToolHandle<eFEXegAlgo> LVL1::eFEXFPGA::m_eFEXegAlgoTool
private
Initial value:
{
this, "eFEXegAlgoTool", "LVL1::eFEXegAlgo",
"Tool that runs the eFEX e/gamma algorithm"}

Definition at line 92 of file eFEXFPGA.h.

92 {
93 this, "eFEXegAlgoTool", "LVL1::eFEXegAlgo",
94 "Tool that runs the eFEX e/gamma algorithm"};

◆ m_eFEXFormTOBsTool

ToolHandle<eFEXFormTOBs> LVL1::eFEXFPGA::m_eFEXFormTOBsTool {this, "eFEXFormTOBs", "LVL1::eFEXFormTOBs", "Tool that creates eFEX TOB words"}
private

Definition at line 96 of file eFEXFPGA.h.

96{this, "eFEXFormTOBs", "LVL1::eFEXFormTOBs", "Tool that creates eFEX TOB words"};

◆ m_efexid

int LVL1::eFEXFPGA::m_efexid = 0
private

Definition at line 70 of file eFEXFPGA.h.

◆ m_eFexStep

const unsigned int LVL1::eFEXFPGA::m_eFexStep = 25
private

Internal data.

Definition at line 67 of file eFEXFPGA.h.

◆ m_eFEXtauAlgoTool

ToolHandle<eFEXtauAlgoBase> LVL1::eFEXFPGA::m_eFEXtauAlgoTool
private
Initial value:
{
this, "eFEXtauAlgoTool", "LVL1::eFEXtauAlgo",
"Tool that runs the eFEX tau algorithm"}

Definition at line 84 of file eFEXFPGA.h.

84 {
85 this, "eFEXtauAlgoTool", "LVL1::eFEXtauAlgo",
86 "Tool that runs the eFEX tau algorithm"};

◆ m_eFEXtauBDTAlgoTool

ToolHandle<eFEXtauAlgoBase> LVL1::eFEXFPGA::m_eFEXtauBDTAlgoTool
private
Initial value:
{
this, "eFEXtauBDTAlgoTool", "LVL1::eFEXtauBDTAlgo",
"Tool that runs the eFEX BDT tau algorithm"}

Definition at line 88 of file eFEXFPGA.h.

88 {
89 this, "eFEXtauBDTAlgoTool", "LVL1::eFEXtauBDTAlgo",
90 "Tool that runs the eFEX BDT tau algorithm"};

◆ m_emTobObjects

std::vector< std::unique_ptr<eFEXegTOB> > LVL1::eFEXFPGA::m_emTobObjects
private

Definition at line 71 of file eFEXFPGA.h.

◆ m_eTowerContainerKey

SG::ReadHandleKey<LVL1::eTowerContainer> LVL1::eFEXFPGA::m_eTowerContainerKey
private
Initial value:
{
this, "MyETowers", "eTowerContainer",
"Input container for eTowers"}

Definition at line 80 of file eFEXFPGA.h.

80 {
81 this, "MyETowers", "eTowerContainer",
82 "Input container for eTowers"};

◆ m_eTowersIDs

int LVL1::eFEXFPGA::m_eTowersIDs[10][6] {}
private

Definition at line 74 of file eFEXFPGA.h.

74{};

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default).

Definition at line 390 of file AthCommonDataStore.h.

◆ m_id

int LVL1::eFEXFPGA::m_id = 0
private

Definition at line 69 of file eFEXFPGA.h.

◆ m_l1MenuKey

SG::ReadHandleKey<TrigConf::L1Menu> LVL1::eFEXFPGA::m_l1MenuKey
private
Initial value:
{
this, "L1TriggerMenu", "DetectorStore+L1TriggerMenu",
"Name of the L1Menu object to read configuration from"}

Definition at line 76 of file eFEXFPGA.h.

76 {
77 this, "L1TriggerMenu", "DetectorStore+L1TriggerMenu",
78 "Name of the L1Menu object to read configuration from"};

◆ m_tauBDTTobObjects

std::vector< std::unique_ptr<eFEXtauTOB> > LVL1::eFEXFPGA::m_tauBDTTobObjects
private

Definition at line 73 of file eFEXFPGA.h.

◆ m_tauHeuristicTobObjects

std::vector< std::unique_ptr<eFEXtauTOB> > LVL1::eFEXFPGA::m_tauHeuristicTobObjects
private

Definition at line 72 of file eFEXFPGA.h.

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< AlgTool > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< AlgTool > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.


The documentation for this class was generated from the following files: