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

Provide Supercell-tower mapping Load information stored in a .csv file and provide information needed to connect the SuperCells to its corresponding tower. More...

#include <eFEXSuperCellTowerIdProvider.h>

Inheritance diagram for LVL1::eFEXSuperCellTowerIdProvider:
Collaboration diagram for LVL1::eFEXSuperCellTowerIdProvider:

Classes

struct  towerinfo
 Sturcture stores mapping information of a SuperCell. More...

Public Member Functions

 eFEXSuperCellTowerIdProvider (const std::string &type, const std::string &name, const IInterface *parent)
 Constructor.
 ~eFEXSuperCellTowerIdProvider ()
 Destructor.
virtual StatusCode initialize () override
 initialize the tool
StatusCode setAddress (const std::string &)
 set the address to the csv file and load
StatusCode geteTowerIDandslot (uint64_t scid, int &eTowerID, int &slot, bool &issplit) const
 obtain ordered tower IDs in an eFEX
bool ifhaveinputfile () const
 Check if the csv file is valid.
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

bool hasSuperCell (uint64_t) const
 Check if the SuperCell id exists in the csv file.
StatusCode loadcsv ()
 load the csv file
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

bool m_hascsvfile {false}
 if the csv file is valid
std::string m_csvaddress
 path to the csv file
std::unordered_map< uint64_t, towerinfom_SuperCelltoTowerIdmap
 map to store information about SuperCells with SuperCell ID as the key.
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

Provide Supercell-tower mapping Load information stored in a .csv file and provide information needed to connect the SuperCells to its corresponding tower.

Definition at line 32 of file eFEXSuperCellTowerIdProvider.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

◆ eFEXSuperCellTowerIdProvider()

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

Constructor.

Definition at line 11 of file eFEXSuperCellTowerIdProvider.cxx.

11 :
12 AthAlgTool(type, name, parent)
13{
14 declareInterface<eFEXSuperCellTowerIdProvider>(this);
15}
AthAlgTool()
Default constructor:

◆ ~eFEXSuperCellTowerIdProvider()

LVL1::eFEXSuperCellTowerIdProvider::~eFEXSuperCellTowerIdProvider ( )

Destructor.

Definition at line 17 of file eFEXSuperCellTowerIdProvider.cxx.

18{
19}

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.

◆ 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

◆ geteTowerIDandslot()

StatusCode LVL1::eFEXSuperCellTowerIdProvider::geteTowerIDandslot ( uint64_t scid,
int & eTowerID,
int & slot,
bool & issplit ) const

obtain ordered tower IDs in an eFEX

Parameters
scidHEX SuperCell ID
eTowerIDvariable to store the output tower ID
slotvariable to store the output slot number
issplitevariable to store if the SuperCell needs to be splited
Returns
status code

Definition at line 47 of file eFEXSuperCellTowerIdProvider.cxx.

48{
49 auto mapentry = m_SuperCelltoTowerIdmap.find(scid);
50
51 if (mapentry != m_SuperCelltoTowerIdmap.end()) {
52 towerinfo towerinfo_tem = mapentry->second;
53 eTowerID = towerinfo_tem.eTowerID;
54 slot = towerinfo_tem.slot;
55 issplit = towerinfo_tem.isSplit;
56 } else {
57 // The csv file only contains valid SuperCell
58 // Ingore invalid id.
59 eTowerID = -1;
60 slot = -1;
61 issplit = false;
62 }
63
64 return StatusCode::SUCCESS;
65}
std::unordered_map< uint64_t, towerinfo > m_SuperCelltoTowerIdmap
map to store information about SuperCells with SuperCell ID as the key.
Sturcture stores mapping information of a SuperCell.

◆ hasSuperCell()

bool LVL1::eFEXSuperCellTowerIdProvider::hasSuperCell ( uint64_t scid) const
private

Check if the SuperCell id exists in the csv file.

Definition at line 67 of file eFEXSuperCellTowerIdProvider.cxx.

68{
69 auto haskey = m_SuperCelltoTowerIdmap.find(scid);
70 if (haskey == m_SuperCelltoTowerIdmap.end()) {
71 return false;
72 }
73 return true;
74}

◆ ifhaveinputfile()

bool LVL1::eFEXSuperCellTowerIdProvider::ifhaveinputfile ( ) const

Check if the csv file is valid.

Definition at line 76 of file eFEXSuperCellTowerIdProvider.cxx.

76 {
77 return m_hascsvfile;
78}

◆ initialize()

StatusCode LVL1::eFEXSuperCellTowerIdProvider::initialize ( )
overridevirtual

initialize the tool

Definition at line 21 of file eFEXSuperCellTowerIdProvider.cxx.

22{
23 m_hascsvfile = false;
24 std::string csvpath = PathResolver::find_file("sc_tower_map.csv", "DATAPATH");
25 if (setAddress(csvpath) == StatusCode::FAILURE) {
26 ATH_MSG_WARNING("sc_tower_map.csv missing or invalid. Swiching to hard-coded mapping.");
27 };
28 return StatusCode::SUCCESS;
29}
#define ATH_MSG_WARNING(x)
StatusCode setAddress(const std::string &)
set the address to the csv file and load
static std::string find_file(const std::string &logical_file_name, const std::string &search_path)

◆ 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::eFEXSuperCellTowerIdProvider::interfaceID ( )
inlinestatic

Definition at line 44 of file eFEXSuperCellTowerIdProvider.h.

static const InterfaceID IID_IIeFEXSuperCellTowerIdProvider("LVL1::eFEXSuperCellTowerIdProvider", 1, 0)

◆ loadcsv()

StatusCode LVL1::eFEXSuperCellTowerIdProvider::loadcsv ( )
private

load the csv file

Definition at line 80 of file eFEXSuperCellTowerIdProvider.cxx.

81{
82 // read the .csv file line by line
83 std::string eachline;
84 std::ifstream myfile(m_csvaddress);
85 if (myfile.is_open()) {
86 while (std::getline(myfile, eachline)) {
87
88 // ignore text after #
89 std::string::size_type ipos = eachline.find("#");
90 if (ipos!=std::string::npos) eachline.resize(ipos);
91
92 // prevent reading lines with only white spaces
93 if (std::all_of(eachline.begin(), eachline.end(), ::isspace)) {
94 continue;
95 }
96
97 // split lines in the .csv file by comma
98 std::stringstream eachline_stream(eachline);
99 int each_etowerid{ -1 }, each_slot{ -1 };
100 bool eachisSplit{ false };
101 std::string each_scid = "";
102 int i{ 0 };
103 while (eachline_stream.good()) {
104 i++;
105 int number_in_eachline;
106 std::string tem_string;
107 std::getline(eachline_stream, tem_string, ',');
108 // first column: tower id
109 // second column: supercell id
110 // third column: slot number
111 // fourth column: if split energy
112 if (i == 1 || i == 3 || i == 4) {
113 try {
114 number_in_eachline = std::stoi(tem_string);
115 }
116 catch (...) {
117 ATH_MSG_ERROR( "Invalid input in " << m_csvaddress << ". Unable to convert " << tem_string << " to int.");
118 return StatusCode::FAILURE;
119 }
120 if (i == 1) {
121 each_etowerid = number_in_eachline;
122 } else if (i == 3) {
123 each_slot = number_in_eachline;
124 } else {
125 // check if the fourth column is a boolean or not
126 if (number_in_eachline != 0 && number_in_eachline != 1) {
127 ATH_MSG_ERROR("Invalid input in " << m_csvaddress << ". Unable to reader the fourth column.");
128 return StatusCode::FAILURE;
129 }
130 eachisSplit = number_in_eachline;
131 }
132 }
133 else if (i == 2) {
134 each_scid = std::move(tem_string);
135 }
136 else {
137 ATH_MSG_ERROR("Invalid input in " << m_csvaddress << ". Too many columns.");
138 return StatusCode::FAILURE;
139 }
140 }
141
142 // check the range of tower id
143 if (each_etowerid > 601599 || each_etowerid < 100000) {
144 ATH_MSG_ERROR("Invalid eTower ID in " << m_csvaddress << ".");
145 return StatusCode::FAILURE;
146 }
147 // check the range of slot
148 if (each_slot > 13 || each_slot < 0) {
149 ATH_MSG_ERROR("Invalid slot number in " << m_csvaddress << ".");
150 return StatusCode::FAILURE;
151 }
152 // The Hexadecimal SuperCell id should always start as 0x
153 if (each_scid.find("0x") == std::string::npos) {
154 ATH_MSG_ERROR("Invalid SuperCell ID in " << m_csvaddress << ".");
155 return StatusCode::FAILURE;
156 }
157 towerinfo each_towerinfo;
158 each_towerinfo.eTowerID = each_etowerid;
159 each_towerinfo.slot = each_slot;
160 each_towerinfo.isSplit = eachisSplit;
161 uint64_t scid_uint64 = strtoull(each_scid.c_str(), nullptr, 16);
162 try {
163 m_SuperCelltoTowerIdmap[scid_uint64] = each_towerinfo;
164 } catch (...) {
165 ATH_MSG_ERROR("Invalid SuperCell ID in " << m_csvaddress << ".");
166 return StatusCode::FAILURE;
167 }
168 }
169 myfile.close();
170 }
171 else {
172 ATH_MSG_ERROR("eFEXFPGATowerIdProvider: Unable to open" << m_csvaddress << ".");
173 return StatusCode::FAILURE;
174 }
175 return StatusCode::SUCCESS;
176}
#define ATH_MSG_ERROR(x)
std::string m_csvaddress
path to the csv file

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

◆ setAddress()

StatusCode LVL1::eFEXSuperCellTowerIdProvider::setAddress ( const std::string & inputaddress)

set the address to the csv file and load

Definition at line 31 of file eFEXSuperCellTowerIdProvider.cxx.

32{
33 if (inputaddress.empty()) {
34 m_hascsvfile = false;
35 return StatusCode::FAILURE;
36 }
37
38 m_hascsvfile = true;
39 m_csvaddress = inputaddress;
40 if ( loadcsv() == StatusCode::FAILURE) {
41 m_hascsvfile = false;
42 return StatusCode::FAILURE;
43 }
44 return StatusCode::SUCCESS;
45}

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

std::string LVL1::eFEXSuperCellTowerIdProvider::m_csvaddress
private

path to the csv file

Definition at line 76 of file eFEXSuperCellTowerIdProvider.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_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_hascsvfile

bool LVL1::eFEXSuperCellTowerIdProvider::m_hascsvfile {false}
private

if the csv file is valid

Definition at line 74 of file eFEXSuperCellTowerIdProvider.h.

74{false};

◆ m_SuperCelltoTowerIdmap

std::unordered_map<uint64_t, towerinfo> LVL1::eFEXSuperCellTowerIdProvider::m_SuperCelltoTowerIdmap
private

map to store information about SuperCells with SuperCell ID as the key.

Definition at line 85 of file eFEXSuperCellTowerIdProvider.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: