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

#include <jFEXForwardElecAlgo.h>

Inheritance diagram for LVL1::jFEXForwardElecAlgo:
Collaboration diagram for LVL1::jFEXForwardElecAlgo:

Public Member Functions

 jFEXForwardElecAlgo (const std::string &type, const std::string &name, const IInterface *parent)
 Constructors.
virtual StatusCode initialize () override
 standard Athena-Algorithm method
virtual ~jFEXForwardElecAlgo ()
 Destructor.
virtual StatusCode safetyTest () override
 Standard methods.
virtual StatusCode reset () override
virtual void setup (int inputTable[FEXAlgoSpaceDefs::jFEX_algoSpace_height][FEXAlgoSpaceDefs::jFEX_wide_algoSpace_width], int jfex, int fpga) override
virtual std::unordered_map< uint, jFEXForwardElecInfocalculateEDM () override
virtual void setFPGAEnergy (std::unordered_map< int, std::vector< int > > etmapEM, std::unordered_map< int, std::vector< int > > etmapHAD) override
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

virtual std::array< float, 2 > getEtaPhi (uint) override
virtual std::array< int, 2 > getEtEmHad (uint) const override
bool getEMSat (unsigned int ttID)
bool isValidSeed (uint seedTTID) const
void findAndFillNextTT (jFEXForwardElecInfo &elCluster, int neta, int nphi)
StatusCode ReadfromFile (const std::string &, std::unordered_map< unsigned int, std::vector< unsigned int > > &) const
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

SG::ReadHandleKey< LVL1::jTowerContainerm_jTowerContainerKey {this, "MyjTowers", "jTowerContainer", "jTower input container"}
SG::ReadHandle< jTowerContainerm_jTowerContainer
std::unordered_map< int, std::vector< int > > m_map_Etvalues_EM
std::unordered_map< int, std::vector< int > > m_map_Etvalues_HAD
int m_jFEXalgoTowerID [FEXAlgoSpaceDefs::jFEX_algoSpace_height][FEXAlgoSpaceDefs::jFEX_wide_algoSpace_width]
int m_jfex
int m_fpga
const int m_Edge_dR2 = std::round( (std::pow(2*M_PI/32,2)) * 1e5 )
const int m_Edge_dR3 = std::round( (std::pow(3*M_PI/32,2)) * 1e5 )
const int m_Edge_dR4 = std::round( (std::pow(4*M_PI/32,2)) * 1e5 )
Gaudi::Property< std::string > m_IsoMapStr {this, "IsoMap", "Run3L1CaloSimulation/JetMaps/2024_04_09/jFEX_FWD_iso.dat", "Contains Trigger towers in (forward) EM layer used for isolation"}
Gaudi::Property< std::string > m_Frac1MapStr {this, "Frac1Map", "Run3L1CaloSimulation/JetMaps/2024_04_09/jFEX_FWD_frac.dat", "Contains Trigger towers in FCal layer2 used for hadronic fraction 1 discriminant"}
Gaudi::Property< std::string > m_Frac2MapStr {this, "Frac2Map", "Run3L1CaloSimulation/JetMaps/2024_04_09/jFEX_FWD_frac2.dat", "Contains Trigger towers in FCal layer3 used for hadronic fraction 2 discriminant"}
Gaudi::Property< std::string > m_SearchGTauStr {this, "SearchGTauMap", "Run3L1CaloSimulation/JetMaps/2024_04_09/jFEX_FWD_searchGTau.dat" , "Contains Trigger tower to find local max (greater than)"}
Gaudi::Property< std::string > m_SearchGeTauStr {this, "SearchGeTauMap", "Run3L1CaloSimulation/JetMaps/2024_04_09/jFEX_FWD_searchGeTau.dat", "Contains Trigger tower to find local max (greater or equal than)"}
std::unordered_map< unsigned int, std::vector< unsigned int > > m_SeedRingMap
std::unordered_map< unsigned int, std::vector< unsigned int > > m_1stRingMap
std::unordered_map< unsigned int, std::vector< unsigned int > > m_IsoMap
std::unordered_map< unsigned int, std::vector< unsigned int > > m_Frac1Map
std::unordered_map< unsigned int, std::vector< unsigned int > > m_Frac2Map
std::unordered_map< unsigned int, std::vector< unsigned int > > m_SearchGTauMap
std::unordered_map< unsigned int, std::vector< unsigned int > > m_SearchGeTauMap
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

Static Private Attributes

static constexpr float m_2PI = 2*M_PI
static constexpr float m_TT_Size_phi = M_PI/32

Detailed Description

Definition at line 25 of file jFEXForwardElecAlgo.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

◆ jFEXForwardElecAlgo()

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

Constructors.

Definition at line 28 of file jFEXForwardElecAlgo.cxx.

28 : AthAlgTool(type, name, parent) {
29 declareInterface<IjFEXForwardElecAlgo>(this);
30 }
AthAlgTool()
Default constructor:

◆ ~jFEXForwardElecAlgo()

LVL1::jFEXForwardElecAlgo::~jFEXForwardElecAlgo ( )
virtual

Destructor.

Definition at line 33 of file jFEXForwardElecAlgo.cxx.

33 {
34 }

Member Function Documentation

◆ calculateEDM()

std::unordered_map< uint, LVL1::jFEXForwardElecInfo > LVL1::jFEXForwardElecAlgo::calculateEDM ( void )
overridevirtual

Implements LVL1::IjFEXForwardElecAlgo.

Definition at line 231 of file jFEXForwardElecAlgo.cxx.

231 {
232 std::unordered_map<uint, LVL1::jFEXForwardElecInfo> clusterList;
233 std::vector<int> lower_centre_neta;
234 std::vector<int> upper_centre_neta;
235
236 //check if we are in module 0 or 5 and assign corrrect eta FEXAlgoSpace parameters
237 if(m_jfex == 0) {
238 //Module 0
239 lower_centre_neta.assign({FEXAlgoSpaceDefs::jFEX_algoSpace_C_EMB_start_eta, // 28
242
243 upper_centre_neta.assign({FEXAlgoSpaceDefs::jFEX_algoSpace_C_EMB_end_eta, // 37
246 }
247 else {
248 //Module 5
249 lower_centre_neta.assign({FEXAlgoSpaceDefs::jFEX_algoSpace_A_EMB_eta, // 8
252
253 upper_centre_neta.assign({FEXAlgoSpaceDefs::jFEX_algoSpace_A_EMIE_eta, // 17
256 }
257
258 //define phi FEXAlgoSpace parameters
261
262 //loop over different EM/FCAL1 eta phi core fpga regions with different granularities. These are potential seed towers for electron clusters
263 for(uint region = 0; region<3; region++) {
264 for(int nphi = lower_centre_nphi[region]; nphi < upper_centre_nphi[region]; nphi++) {
265 for(int neta = lower_centre_neta[region]; neta < upper_centre_neta[region]; neta++) {
266
267 // ignore seeds for |eta| < 2.3 or from the first FCAL eta bin
268 if (m_jfex == 0 && neta >= FEXAlgoSpaceDefs::jFEX_algoSpace_C_FwdEl_start) continue;
269 if (m_jfex == 5 && neta <= FEXAlgoSpaceDefs::jFEX_algoSpace_A_FwdEl_start) continue;
270 if (m_jfex == 0 && neta == FEXAlgoSpaceDefs::jFEX_algoSpace_C_FCAL1_1st) continue;
271 if (m_jfex == 5 && neta == FEXAlgoSpaceDefs::jFEX_algoSpace_A_FCAL1_1st) continue;
272
273 // define ttID (only FCAL1 in the third region) which will be the key for class in map, ignore tower ID = 0
274 uint ttID = m_jFEXalgoTowerID[nphi][neta];
275 if(ttID == 0) continue;
276 //check if seed candidate is actual seed (passes local maximum criteria)
277 if(!isValidSeed(ttID)) continue;
278
279 //gather some first, basic information for resulting cluster/TOB
280 jFEXForwardElecInfo elCluster;
281 elCluster.setup(m_jfex, ttID, neta, nphi);
282 const auto [centreTT_eta, centreTT_phi] = getEtaPhi(ttID);
283 const auto [centreTT_EtEM, centreTT_EtHad] = getEtEmHad(ttID);
284 elCluster.setCoreTTfPhi(centreTT_phi);
285 elCluster.setCoreTTfEta(centreTT_eta);
286 elCluster.setCoreTTEtEM(centreTT_EtEM);
287 elCluster.setCoreTTSatEM(getEMSat(ttID));
288 elCluster.setNextTTEtEM(0);
289 elCluster.setNextTTID(0);
290 elCluster.setTTEtEMiso(0);
291
292 //find "NextTT", i.e., highest ET neighbour
293 findAndFillNextTT(elCluster, neta, nphi);
294
295 // sum up EM isolation using the isolation map and remove cluster ET
296 {
297 int sumEtEM = 0;
298 auto it_iso_map = m_IsoMap.find(ttID);
299 if(it_iso_map != m_IsoMap.end()) {
300 for(const auto& gtt : it_iso_map->second){
301 auto [tmp_EtEM,tmp_EtHad] = getEtEmHad(gtt);
302 sumEtEM += tmp_EtEM;
303 }
304 elCluster.setTTEtEMiso(sumEtEM-elCluster.getNextTTEtEM());
305 } else {
306 ATH_MSG_ERROR("Could not find TT" << ttID << " in jEM isolation map file.");
307 }
308 }
309
310 if(fabs(centreTT_eta) < 3.2) {
311 // for non-FCal positions only Frac1 is meaningful and has a "trivial" mapping
312 elCluster.setTTEtHad1(centreTT_EtHad);
313 elCluster.setTTEtHad2(0);
314 } else {
315 // sum up Et for hadronic fraction 1
316 {
317 int sumEtHad1 = 0;
318 auto it_frac1_map = m_Frac1Map.find(ttID);
319 if(it_frac1_map != m_Frac1Map.end()) {
320 for(const auto& gtt : it_frac1_map->second){
321 auto [tmp_EtEM,tmp_EtHad] = getEtEmHad(gtt);
322 sumEtHad1 += tmp_EtHad;
323 }
324 elCluster.setTTEtHad1(sumEtHad1);
325 } else {
326 ATH_MSG_ERROR("Could not find TT" << ttID << " in jEM frac1 map file.");
327 }
328 }
329
330 // sum up Et for hadronic fraction 2 (only FCal!)
331 {
332 int sumEtHad2 = 0;
333 auto it_frac2_map = m_Frac2Map.find(ttID);
334 if(it_frac2_map != m_Frac2Map.end()) {
335 for(const auto& gtt : it_frac2_map->second) {
336 auto [tmp_EtEM,tmp_EtHad] = getEtEmHad(gtt);
337 sumEtHad2 += tmp_EtHad;
338 }
339 elCluster.setTTEtHad2(sumEtHad2);
340 } else {
341 ATH_MSG_ERROR("Could not find TT" << ttID << " in jEM frac2 map file.");
342 }
343 }
344 }
345
346 // save this cluster in the list
347 clusterList[ttID] = std::move(elCluster);
348 }//eta
349 }//phi
350 }// 3 regions
351 return clusterList;
352 }
#define ATH_MSG_ERROR(x)
unsigned int uint
static constexpr int jFEX_algoSpace_A_FCAL1_1st
static constexpr int jFEX_algoSpace_C_EMB_start_eta
static constexpr int jFEX_algoSpace_A_FCAL_end_eta
static constexpr int jFEX_algoSpace_C_EMB_end_eta
static constexpr int jFEX_algoSpace_EMIE_end_phi
static constexpr int jFEX_algoSpace_C_FCAL_end_eta
static constexpr int jFEX_algoSpace_A_EMB_eta
static constexpr int jFEX_algoSpace_A_FCAL_start_eta
static constexpr int jFEX_algoSpace_C_FCAL_start_eta
static constexpr int jFEX_algoSpace_A_EMIE_eta
static constexpr int jFEX_algoSpace_FCAL_end_phi
static constexpr int jFEX_algoSpace_C_FCAL1_1st
static constexpr int jFEX_algoSpace_EMB_end_phi
static constexpr int jFEX_algoSpace_A_FwdEl_start
static constexpr int jFEX_algoSpace_FCAL_start_phi
static constexpr int jFEX_algoSpace_EMIE_start_phi
static constexpr int jFEX_algoSpace_C_FwdEl_start
static constexpr int jFEX_algoSpace_EMB_start_phi
static constexpr int jFEX_algoSpace_C_EMIE_start_eta
static constexpr int jFEX_algoSpace_C_EMIE_end_eta
std::unordered_map< unsigned int, std::vector< unsigned int > > m_Frac1Map
std::unordered_map< unsigned int, std::vector< unsigned int > > m_Frac2Map
virtual std::array< int, 2 > getEtEmHad(uint) const override
int m_jFEXalgoTowerID[FEXAlgoSpaceDefs::jFEX_algoSpace_height][FEXAlgoSpaceDefs::jFEX_wide_algoSpace_width]
virtual std::array< float, 2 > getEtaPhi(uint) override
void findAndFillNextTT(jFEXForwardElecInfo &elCluster, int neta, int nphi)
bool isValidSeed(uint seedTTID) const
bool getEMSat(unsigned int ttID)
std::unordered_map< unsigned int, std::vector< unsigned int > > m_IsoMap

◆ 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.

◆ 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

◆ findAndFillNextTT()

void LVL1::jFEXForwardElecAlgo::findAndFillNextTT ( jFEXForwardElecInfo & elCluster,
int neta,
int nphi )
private

Definition at line 146 of file jFEXForwardElecAlgo.cxx.

146 {
147 //determine direction for offsets (-1 : C-side, +1: A-side)
148 int direction = m_jfex < 3 ? -1 : +1;
149
150 std::vector<std::pair<int,int>> neighbours;
151 //eta/phi index offsets depend on the position of the seed the cluster is created from
152 //differentiate the (many) different cases:
153 if ( direction>0 ? neta < FEXAlgoSpaceDefs::jFEX_algoSpace_A_EMIE_eta - 1 // A-side condition
154 : neta > FEXAlgoSpaceDefs::jFEX_algoSpace_C_EMB_start_eta) // C-side condition
155 { //Barrel
156 neighbours = { {neta , nphi+1},
157 {neta , nphi-1},
158 {neta+1, nphi },
159 {neta-1, nphi }
160 };
161 } else if ( direction>0 ? neta == FEXAlgoSpaceDefs::jFEX_algoSpace_A_EMIE_eta - 1
163 { //Barrel next to Endcap
164 neighbours = { {neta, nphi+1},
165 {neta, nphi-1},
166 {neta-direction, nphi},
167 {neta+direction, nphi/2} //boundary crossing into endcap -> reduced phi granularity
168 };
169 } else if ( direction>0 ? neta == FEXAlgoSpaceDefs::jFEX_algoSpace_A_EMIE_eta
171 { //Endcap next to Barrel
172 neighbours = { {neta, nphi+1},
173 {neta, nphi-1},
174 {neta+direction, nphi},
175 {neta-direction, 2*nphi+0}, //crossing into barrel region, higher phi granularity
176 {neta-direction, 2*nphi+1}, // -> consider both "touching" towers
177 };
179 : neta < FEXAlgoSpaceDefs::jFEX_algoSpace_C_EMIE_end_eta - 1 && neta > FEXAlgoSpaceDefs::jFEX_algoSpace_C_EMIE_start_eta )
180 { //Endcap
181 neighbours = { {neta , nphi+1},
182 {neta , nphi-1},
183 {neta+1, nphi },
184 {neta-1, nphi }
185 };
186 } else if ( direction>0 ? neta == FEXAlgoSpaceDefs::jFEX_algoSpace_A_FCAL_start_eta - 1
188 { //Endcap next to FCal
189 neighbours = { {neta, nphi+1},
190 {neta, nphi-1},
191 {neta-direction, nphi},
192 {neta+2*direction, nphi/2} //boundary crossing into FCal -> reduced phi granularity and skip first FCal bin
193 };
194 } else if ( direction>0 ? neta == FEXAlgoSpaceDefs::jFEX_algoSpace_A_FCAL_start_eta + 1 //first FCal bin must be skipped!
195 : neta == FEXAlgoSpaceDefs::jFEX_algoSpace_C_EMIE_start_eta - 2 ) //first FCal bin must be skipped!
196 { //FCal next to Endcap
197 //phi spacing in FCal is very wide, no longer consider adding towers in phi direction
198 neighbours = { {neta-2*direction, 2*nphi+0}, //boundary crossing into endcap, higher phi granularity
199 {neta-2*direction, 2*nphi+1}, // -> consider both "touching" towers
200 {neta+direction, nphi}
201 };
203 : neta < FEXAlgoSpaceDefs::jFEX_algoSpace_C_FCAL_end_eta - 2 && neta > FEXAlgoSpaceDefs::jFEX_algoSpace_C_FCAL_start_eta )
204 { //FCal
205 neighbours = { {neta+1, nphi},
206 {neta-1, nphi}
207 };
208 } else if ( direction>0 ? neta == FEXAlgoSpaceDefs::jFEX_algoSpace_A_FCAL_end_eta - 1
210 { //FCal, last eta bin
211 neighbours = { {neta-direction, nphi}
212 };
213 } else {
214 ATH_MSG_ERROR("Eta index " << neta << " (side: "<< (direction>0?"A":"C") << ") does not seem to belong to any valid seed region");
215 }
216
217 //iterate over neighbours, find most energetic one
218 for (const auto& candEtaPhi: neighbours) {
219 uint candID = m_jFEXalgoTowerID[candEtaPhi.second][candEtaPhi.first];
220 const auto [candTT_EtEM, candTT_EtHad] = getEtEmHad(candID);
221 if (candTT_EtEM > elCluster.getNextTTEtEM()) {
222 elCluster.setNextTTEtEM(candTT_EtEM);
223 elCluster.setNextTTID(candID);
224 elCluster.setNextTTSatEM(getEMSat(candID));
225 }
226 }
227
228 }

◆ getEMSat()

bool LVL1::jFEXForwardElecAlgo::getEMSat ( unsigned int ttID)
private

Definition at line 93 of file jFEXForwardElecAlgo.cxx.

93 {
94 if(ttID == 0) {
95 return false;
96 }
97
98 const LVL1::jTower * tmpTower = m_jTowerContainer->findTower(ttID);
99 return tmpTower->getEMSat();
100 }
SG::ReadHandle< jTowerContainer > m_jTowerContainer
bool getEMSat() const
Definition jTower.h:56

◆ getEtaPhi()

std::array< float, 2 > LVL1::jFEXForwardElecAlgo::getEtaPhi ( uint ttID)
overrideprivatevirtual

Implements LVL1::IjFEXForwardElecAlgo.

Definition at line 69 of file jFEXForwardElecAlgo.cxx.

69 {
70 if(ttID == 0) {
71 return {999,999};
72 }
73 const LVL1::jTower *tmpTower = m_jTowerContainer->findTower(ttID);
74 return {tmpTower->centreEta(),tmpTower->centrePhi()};
75 }
float centrePhi() const
Definition jTower.h:80
float centreEta() const
Definition jTower.h:79

◆ getEtEmHad()

std::array< int, 2 > LVL1::jFEXForwardElecAlgo::getEtEmHad ( uint ttID) const
overrideprivatevirtual

Implements LVL1::IjFEXForwardElecAlgo.

Definition at line 77 of file jFEXForwardElecAlgo.cxx.

77 {
78 if(ttID == 0) {
79 return {0,0};
80 }
81 int TT_EtEM = 0;
82 if(m_map_Etvalues_EM.find(ttID) != m_map_Etvalues_EM.end()) {
83 TT_EtEM = m_map_Etvalues_EM.at(ttID)[0];
84 }
85 int TT_EtHad = 0;
86 if(m_map_Etvalues_HAD.find(ttID) != m_map_Etvalues_HAD.end()) {
87 TT_EtHad = m_map_Etvalues_HAD.at(ttID)[0];
88 }
89
90 return {TT_EtEM, TT_EtHad};
91 }
std::unordered_map< int, std::vector< int > > m_map_Etvalues_EM
std::unordered_map< int, std::vector< int > > m_map_Etvalues_HAD

◆ initialize()

StatusCode LVL1::jFEXForwardElecAlgo::initialize ( )
overridevirtual

standard Athena-Algorithm method

Definition at line 36 of file jFEXForwardElecAlgo.cxx.

36 {
37 ATH_CHECK(m_jTowerContainerKey.initialize());
38
44
45 return StatusCode::SUCCESS;
46 }
#define ATH_CHECK
Evaluate an expression and check for errors.
Gaudi::Property< std::string > m_Frac2MapStr
SG::ReadHandleKey< LVL1::jTowerContainer > m_jTowerContainerKey
Gaudi::Property< std::string > m_SearchGeTauStr
Gaudi::Property< std::string > m_SearchGTauStr
StatusCode ReadfromFile(const std::string &, std::unordered_map< unsigned int, std::vector< unsigned int > > &) const
Gaudi::Property< std::string > m_IsoMapStr
Gaudi::Property< std::string > m_Frac1MapStr
std::unordered_map< unsigned int, std::vector< unsigned int > > m_SearchGTauMap
std::unordered_map< unsigned int, std::vector< unsigned int > > m_SearchGeTauMap
static std::string find_calib_file(const std::string &logical_file_name)

◆ 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::IjFEXForwardElecAlgo::interfaceID ( )
inlinestaticinherited

Definition at line 40 of file IjFEXForwardElecAlgo.h.

41{
43}
static const InterfaceID IID_IjFEXForwardElecAlgo("LVL1::IjFEXForwardElecAlgo", 1, 0)

◆ isValidSeed()

bool LVL1::jFEXForwardElecAlgo::isValidSeed ( uint seedTTID) const
private

Definition at line 110 of file jFEXForwardElecAlgo.cxx.

110 {
111 auto [centreTT_EtEM,centreTT_EtHad] = getEtEmHad(seedTTID);
112 // check if seed has strictly more energy than its neighbours
113 {
114 auto it_seed_map = m_SearchGTauMap.find(seedTTID);
115 if(it_seed_map == m_SearchGTauMap.end()) {
116 ATH_MSG_ERROR("Could not find TT" << seedTTID << " in the seach (>) local maxima for tau/em file.");
117 return false;
118 }
119 for (const auto& gtt : it_seed_map->second ){
120 auto [tmp_EtEM,tmp_EtHad] = getEtEmHad(gtt);
121 if(tmp_EtEM>=centreTT_EtEM) {
122 return false;
123 }
124 }
125 }
126
127 // check if seed has equal or more energy than its neighbours
128 {
129 auto it_seed_map = m_SearchGeTauMap.find(seedTTID);
130 if(it_seed_map == m_SearchGeTauMap.end()) {
131 ATH_MSG_ERROR("Could not find TT" << seedTTID << " in the seach (>=) local maxima for tau/em file.");
132 return false;
133 }
134 for (const auto& gtt : it_seed_map->second ){
135 auto [tmp_EtEM,tmp_EtHad] = getEtEmHad(gtt);
136 if( tmp_EtEM>centreTT_EtEM) {
137 return false;
138 }
139 }
140 }
141
142 return true;
143 }

◆ 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.

◆ ReadfromFile()

StatusCode LVL1::jFEXForwardElecAlgo::ReadfromFile ( const std::string & fileName,
std::unordered_map< unsigned int, std::vector< unsigned int > > & fillingMap ) const
private

Definition at line 354 of file jFEXForwardElecAlgo.cxx.

354 {
355 std::string myline;
356 //opening file with ifstream
357 std::ifstream myfile(fileName);
358 if ( !myfile.is_open() ){
359 ATH_MSG_ERROR("Could not open file:" << fileName);
360 return StatusCode::FAILURE;
361 }
362
363 //loading the mapping information
364 while ( std::getline (myfile, myline) ) {
365 //removing the header of the file (it is just information!)
366 if(myline[0] == '#') continue;
367
368 //Splitting myline in different substrings
369 std::stringstream oneLine(myline);
370
371 //reading elements
372 std::vector<unsigned int> elements;
373 std::string element;
374 while(std::getline(oneLine, element, ' '))
375 {
376 elements.push_back(std::stoi(element));
377 }
378
379 // We should have at least two elements! Central TT and (at least) itself
380 if(elements.size() < 1){
381 ATH_MSG_ERROR("Unexpected number of elemennts (<1 expected) in file: "<< fileName);
382 return StatusCode::FAILURE;
383 }
384
385 //Central TiggerTower
386 unsigned int TTID = elements.at(0);
387
388 // rest of TTs that need to be checked
389 elements.erase(elements.begin());
390 fillingMap[TTID] = std::move(elements);
391 }
392 myfile.close();
393
394 return StatusCode::SUCCESS;
395 }

◆ 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()

StatusCode LVL1::jFEXForwardElecAlgo::reset ( )
overridevirtual

Implements LVL1::IjFEXForwardElecAlgo.

Definition at line 58 of file jFEXForwardElecAlgo.cxx.

58 {
59 return StatusCode::SUCCESS;
60 }

◆ safetyTest()

StatusCode LVL1::jFEXForwardElecAlgo::safetyTest ( )
overridevirtual

Standard methods.

Implements LVL1::IjFEXForwardElecAlgo.

Definition at line 49 of file jFEXForwardElecAlgo.cxx.

49 {
50 m_jTowerContainer = SG::ReadHandle<jTowerContainer>(m_jTowerContainerKey);
51 if(! m_jTowerContainer.isValid()) {
52 ATH_MSG_ERROR("Could not retrieve jTowerContainer " << m_jTowerContainerKey.key());
53 return StatusCode::FAILURE;
54 }
55 return StatusCode::SUCCESS;
56 }

◆ setFPGAEnergy()

void LVL1::jFEXForwardElecAlgo::setFPGAEnergy ( std::unordered_map< int, std::vector< int > > etmapEM,
std::unordered_map< int, std::vector< int > > etmapHAD )
overridevirtual

Implements LVL1::IjFEXForwardElecAlgo.

Definition at line 102 of file jFEXForwardElecAlgo.cxx.

104 {
105 m_map_Etvalues_EM=std::move(etmapEM);
106 m_map_Etvalues_HAD=std::move(etmapHAD);
107 }

◆ setup()

void LVL1::jFEXForwardElecAlgo::setup ( int inputTable[FEXAlgoSpaceDefs::jFEX_algoSpace_height][FEXAlgoSpaceDefs::jFEX_wide_algoSpace_width],
int jfex,
int fpga )
overridevirtual

Implements LVL1::IjFEXForwardElecAlgo.

Definition at line 62 of file jFEXForwardElecAlgo.cxx.

62 {
63 std::copy(&inputTable[0][0], &inputTable[0][0] + (FEXAlgoSpaceDefs::jFEX_algoSpace_height*FEXAlgoSpaceDefs::jFEX_wide_algoSpace_width), &m_jFEXalgoTowerID[0][0]);
64 m_jfex=jfex;
65 m_fpga=fpga;
66 }
static constexpr int jFEX_wide_algoSpace_width
static constexpr int jFEX_algoSpace_height

◆ 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_1stRingMap

std::unordered_map<unsigned int, std::vector<unsigned int> > LVL1::jFEXForwardElecAlgo::m_1stRingMap
private

Definition at line 71 of file jFEXForwardElecAlgo.h.

◆ m_2PI

float LVL1::jFEXForwardElecAlgo::m_2PI = 2*M_PI
staticconstexprprivate

Definition at line 58 of file jFEXForwardElecAlgo.h.

◆ 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_Edge_dR2

const int LVL1::jFEXForwardElecAlgo::m_Edge_dR2 = std::round( (std::pow(2*M_PI/32,2)) * 1e5 )
private

Definition at line 60 of file jFEXForwardElecAlgo.h.

◆ m_Edge_dR3

const int LVL1::jFEXForwardElecAlgo::m_Edge_dR3 = std::round( (std::pow(3*M_PI/32,2)) * 1e5 )
private

Definition at line 61 of file jFEXForwardElecAlgo.h.

◆ m_Edge_dR4

const int LVL1::jFEXForwardElecAlgo::m_Edge_dR4 = std::round( (std::pow(4*M_PI/32,2)) * 1e5 )
private

Definition at line 62 of file jFEXForwardElecAlgo.h.

◆ 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_fpga

int LVL1::jFEXForwardElecAlgo::m_fpga
private

Definition at line 57 of file jFEXForwardElecAlgo.h.

◆ m_Frac1Map

std::unordered_map<unsigned int, std::vector<unsigned int> > LVL1::jFEXForwardElecAlgo::m_Frac1Map
private

Definition at line 73 of file jFEXForwardElecAlgo.h.

◆ m_Frac1MapStr

Gaudi::Property<std::string> LVL1::jFEXForwardElecAlgo::m_Frac1MapStr {this, "Frac1Map", "Run3L1CaloSimulation/JetMaps/2024_04_09/jFEX_FWD_frac.dat", "Contains Trigger towers in FCal layer2 used for hadronic fraction 1 discriminant"}
private

Definition at line 65 of file jFEXForwardElecAlgo.h.

65{this, "Frac1Map", "Run3L1CaloSimulation/JetMaps/2024_04_09/jFEX_FWD_frac.dat", "Contains Trigger towers in FCal layer2 used for hadronic fraction 1 discriminant"};

◆ m_Frac2Map

std::unordered_map<unsigned int, std::vector<unsigned int> > LVL1::jFEXForwardElecAlgo::m_Frac2Map
private

Definition at line 74 of file jFEXForwardElecAlgo.h.

◆ m_Frac2MapStr

Gaudi::Property<std::string> LVL1::jFEXForwardElecAlgo::m_Frac2MapStr {this, "Frac2Map", "Run3L1CaloSimulation/JetMaps/2024_04_09/jFEX_FWD_frac2.dat", "Contains Trigger towers in FCal layer3 used for hadronic fraction 2 discriminant"}
private

Definition at line 66 of file jFEXForwardElecAlgo.h.

66{this, "Frac2Map", "Run3L1CaloSimulation/JetMaps/2024_04_09/jFEX_FWD_frac2.dat", "Contains Trigger towers in FCal layer3 used for hadronic fraction 2 discriminant"};

◆ m_IsoMap

std::unordered_map<unsigned int, std::vector<unsigned int> > LVL1::jFEXForwardElecAlgo::m_IsoMap
private

Definition at line 72 of file jFEXForwardElecAlgo.h.

◆ m_IsoMapStr

Gaudi::Property<std::string> LVL1::jFEXForwardElecAlgo::m_IsoMapStr {this, "IsoMap", "Run3L1CaloSimulation/JetMaps/2024_04_09/jFEX_FWD_iso.dat", "Contains Trigger towers in (forward) EM layer used for isolation"}
private

Definition at line 64 of file jFEXForwardElecAlgo.h.

64{this, "IsoMap", "Run3L1CaloSimulation/JetMaps/2024_04_09/jFEX_FWD_iso.dat", "Contains Trigger towers in (forward) EM layer used for isolation"};

◆ m_jfex

int LVL1::jFEXForwardElecAlgo::m_jfex
private

Definition at line 56 of file jFEXForwardElecAlgo.h.

◆ m_jFEXalgoTowerID

int LVL1::jFEXForwardElecAlgo::m_jFEXalgoTowerID[FEXAlgoSpaceDefs::jFEX_algoSpace_height][FEXAlgoSpaceDefs::jFEX_wide_algoSpace_width]
private

Definition at line 55 of file jFEXForwardElecAlgo.h.

◆ m_jTowerContainer

SG::ReadHandle<jTowerContainer> LVL1::jFEXForwardElecAlgo::m_jTowerContainer
private

Definition at line 52 of file jFEXForwardElecAlgo.h.

◆ m_jTowerContainerKey

SG::ReadHandleKey<LVL1::jTowerContainer> LVL1::jFEXForwardElecAlgo::m_jTowerContainerKey {this, "MyjTowers", "jTowerContainer", "jTower input container"}
private

Definition at line 51 of file jFEXForwardElecAlgo.h.

51{this, "MyjTowers", "jTowerContainer", "jTower input container"};

◆ m_map_Etvalues_EM

std::unordered_map<int,std::vector<int> > LVL1::jFEXForwardElecAlgo::m_map_Etvalues_EM
private

Definition at line 53 of file jFEXForwardElecAlgo.h.

◆ m_map_Etvalues_HAD

std::unordered_map<int,std::vector<int> > LVL1::jFEXForwardElecAlgo::m_map_Etvalues_HAD
private

Definition at line 54 of file jFEXForwardElecAlgo.h.

◆ m_SearchGeTauMap

std::unordered_map<unsigned int, std::vector<unsigned int> > LVL1::jFEXForwardElecAlgo::m_SearchGeTauMap
private

Definition at line 76 of file jFEXForwardElecAlgo.h.

◆ m_SearchGeTauStr

Gaudi::Property<std::string> LVL1::jFEXForwardElecAlgo::m_SearchGeTauStr {this, "SearchGeTauMap", "Run3L1CaloSimulation/JetMaps/2024_04_09/jFEX_FWD_searchGeTau.dat", "Contains Trigger tower to find local max (greater or equal than)"}
private

Definition at line 68 of file jFEXForwardElecAlgo.h.

68{this, "SearchGeTauMap", "Run3L1CaloSimulation/JetMaps/2024_04_09/jFEX_FWD_searchGeTau.dat", "Contains Trigger tower to find local max (greater or equal than)"};

◆ m_SearchGTauMap

std::unordered_map<unsigned int, std::vector<unsigned int> > LVL1::jFEXForwardElecAlgo::m_SearchGTauMap
private

Definition at line 75 of file jFEXForwardElecAlgo.h.

◆ m_SearchGTauStr

Gaudi::Property<std::string> LVL1::jFEXForwardElecAlgo::m_SearchGTauStr {this, "SearchGTauMap", "Run3L1CaloSimulation/JetMaps/2024_04_09/jFEX_FWD_searchGTau.dat" , "Contains Trigger tower to find local max (greater than)"}
private

Definition at line 67 of file jFEXForwardElecAlgo.h.

67{this, "SearchGTauMap", "Run3L1CaloSimulation/JetMaps/2024_04_09/jFEX_FWD_searchGTau.dat" , "Contains Trigger tower to find local max (greater than)"};

◆ m_SeedRingMap

std::unordered_map<unsigned int, std::vector<unsigned int> > LVL1::jFEXForwardElecAlgo::m_SeedRingMap
private

Definition at line 70 of file jFEXForwardElecAlgo.h.

◆ m_TT_Size_phi

float LVL1::jFEXForwardElecAlgo::m_TT_Size_phi = M_PI/32
staticconstexprprivate

Definition at line 59 of file jFEXForwardElecAlgo.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: