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

#include <jFexTower2SCellDecorator.h>

Inheritance diagram for LVL1::jFexTower2SCellDecorator:
Collaboration diagram for LVL1::jFexTower2SCellDecorator:

Public Member Functions

 jFexTower2SCellDecorator (const std::string &name, ISvcLocator *svc)
virtual StatusCode initialize () override
 Function initialising the algorithm.
virtual StatusCode execute (const EventContext &) const override
 Function executing the algorithm.
virtual StatusCode sysInitialize () override
 Override sysInitialize.
virtual bool isClonable () const override
 Specify if the algorithm is clonable.
virtual unsigned int cardinality () const override
 Cardinality (Maximum number of clones that can exist) special value 0 means that algorithm is reentrant.
virtual StatusCode sysExecute (const EventContext &ctx) override
 Execute an algorithm.
virtual const DataObjIDColl & extraOutputDeps () const override
 Return the list of extra output dependencies.
virtual bool filterPassed (const EventContext &ctx) const
virtual void setFilterPassed (bool state, const EventContext &ctx) const
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 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

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

StatusCode ReadSCfromFile (const std::string &)
StatusCode ReadTilefromFile (const std::string &)
bool isBadSCellID (const std::string &) 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< CaloCellContainerm_SCellKey {this, "SCell", "SCell", "SCell container"}
SG::ReadHandleKey< xAOD::TriggerTowerContainerm_triggerTowerKey {this, "xODTriggerTowers", "xAODTriggerTowers", "xAODTriggerTowers container"}
SG::ReadHandleKey< xAOD::jFexTowerContainerm_jTowersReadKey {this,"jTowersReadKey" ,"L1_jFexDataTowers", "Read jFexEDM Trigger Tower container"}
SG::WriteDecorHandleKey< xAOD::jFexTowerContainerm_SCellEtdecorKey { this, "SCellEtdecorKey" , m_jTowersReadKey, "SCellEt" , "SCell Et information of the jTower in MEV"}
SG::WriteDecorHandleKey< xAOD::jFexTowerContainerm_SCellEtadecorKey { this, "SCellEtadecorKey" , m_jTowersReadKey, "SCellEta" , "SCell Eta information of the jTower"}
SG::WriteDecorHandleKey< xAOD::jFexTowerContainerm_SCellPhidecorKey { this, "SCellPhidecorKey" , m_jTowersReadKey, "SCellPhi" , "SCell Phi information of the jTower"}
SG::WriteDecorHandleKey< xAOD::jFexTowerContainerm_SCellIDdecorKey { this, "SCellIDdecorKey" , m_jTowersReadKey, "SCellID" , "SCell IDs information of the jTower"}
SG::WriteDecorHandleKey< xAOD::jFexTowerContainerm_SCellMaskdecorKey { this, "SCellMaskdecorKey" , m_jTowersReadKey, "SCellMask" , "SCell masking information of the jTower"}
SG::WriteDecorHandleKey< xAOD::jFexTowerContainerm_TileEtdecorKey { this, "TileEtdecorKey" , m_jTowersReadKey, "TileEt" , "Tile Tower Et information in Encoded from cpET"}
SG::WriteDecorHandleKey< xAOD::jFexTowerContainerm_TileEtadecorKey { this, "TileEtadecorKey" , m_jTowersReadKey, "TileEta" , "Tile Tower Eta information of the jTower"}
SG::WriteDecorHandleKey< xAOD::jFexTowerContainerm_TilePhidecorKey { this, "TilePhidecorKey" , m_jTowersReadKey, "TilePhi" , "Tile Tower Phi information of the jTower"}
SG::WriteDecorHandleKey< xAOD::jFexTowerContainerm_jtowerEtMeVdecorKey { this, "jtowerEtMeVdecorKey", m_jTowersReadKey, "jtower2SCellEtMeV" , "jFex Tower Et information in MeV"}
SG::WriteDecorHandleKey< xAOD::jFexTowerContainerm_SCellEtMeVdecorKey { this, "SCellEtMeVdecorKey" , m_jTowersReadKey, "SCellEtMeV" , "SCell Et sum information in MeV"}
SG::WriteDecorHandleKey< xAOD::jFexTowerContainerm_TileEtMeVdecorKey { this, "TileEtMeVdecorKey" , m_jTowersReadKey, "TileEtMeV" , "Tile Et information in MeV"}
SG::WriteDecorHandleKey< xAOD::jFexTowerContainerm_jTowerEtdecorKey { this, "jTowerEtdecorKey" , m_jTowersReadKey, "emulated_jtowerEt" , "jFex Tower Et information. ENCODED!"}
Gaudi::Property< bool > m_apply_masking {this, "SCellMasking", true , "Applies masking. Only use for data"}
Gaudi::Property< bool > m_save_extras {this, "ExtraInfo" , false, "Saves additional decorated information "}
Gaudi::Property< std::string > m_jFEX2Scellmapping {this, "jFEX2SCmapping" , PathResolver::find_calib_file("L1CaloFEXByteStream/2022-10-19/jfex_SCID.txt") , "Text file to convert from simulation ID to SuperCell Identifier"}
Gaudi::Property< std::string > m_jFEX2Tilemapping {this, "jFEX2Tilemapping", PathResolver::find_calib_file("L1CaloFEXByteStream/2022-10-19/jfex_TileID.txt"), "Text file to convert from simulation ID to Tile Identifier"}
bool m_save_emulated_var = true
std::unordered_map< uint32_t, std::vector< uint64_t > > m_map_TTower2SCellsEM
std::unordered_map< uint32_t, std::vector< uint64_t > > m_map_TTower2SCellsHAD
std::unordered_map< uint32_t, std::tuple< uint32_t, float, float > > m_map_TTower2Tile
DataObjIDColl m_extendedExtraObjects
 Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.
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 33 of file jFexTower2SCellDecorator.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ jFexTower2SCellDecorator()

LVL1::jFexTower2SCellDecorator::jFexTower2SCellDecorator ( const std::string & name,
ISvcLocator * svc )

Definition at line 47 of file jFexTower2SCellDecorator.cxx.

47: AthReentrantAlgorithm(name, svc){}

Member Function Documentation

◆ cardinality()

unsigned int AthCommonReentrantAlgorithm< Gaudi::Algorithm >::cardinality ( ) const
overridevirtualinherited

Cardinality (Maximum number of clones that can exist) special value 0 means that algorithm is reentrant.

Override this to return 0 for reentrant algorithms.

Definition at line 75 of file AthCommonReentrantAlgorithm.cxx.

64{
65 return 0;
66}

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::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< Gaudi::Algorithm > >::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< Gaudi::Algorithm > >::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< Gaudi::Algorithm > >::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::jFexTower2SCellDecorator::execute ( const EventContext & ctx) const
overridevirtual

Function executing the algorithm.

Definition at line 87 of file jFexTower2SCellDecorator.cxx.

87 {
88
89 //Reading the Scell container
90 SG::ReadHandle<CaloCellContainer> ScellContainer(m_SCellKey, ctx);
91 if(!ScellContainer.isValid()) {
92 ATH_MSG_ERROR("Could not retrieve collection " << ScellContainer.key() );
93 return StatusCode::FAILURE;
94 }
95
96 //Reading the TriggerTower container
97 SG::ReadHandle<xAOD::TriggerTowerContainer> triggerTowerContainer(m_triggerTowerKey, ctx);
98 if(!triggerTowerContainer.isValid()) {
99 ATH_MSG_ERROR("Could not retrieve collection " << triggerTowerContainer.key() );
100 return StatusCode::FAILURE;
101 }
102
103 //Reading the jTower container
104 SG::ReadHandle<xAOD::jFexTowerContainer> jTowerContainer(m_jTowersReadKey, ctx);
105 if(!jTowerContainer.isValid()) {
106 ATH_MSG_ERROR("Could not retrieve collection " << jTowerContainer.key() );
107 return StatusCode::FAILURE;
108 }
109
110 if(ScellContainer->empty() || triggerTowerContainer->empty() || jTowerContainer->empty() ){
111 ATH_MSG_DEBUG("Nothing to decorate here, at least one container is empty. ScellContainer.size="<<ScellContainer->size() << " or jTowerContainer.size=" << jTowerContainer->size() << " or triggerTowerContainer.size=" << triggerTowerContainer->size() );
112 return StatusCode::SUCCESS;
113 }
114
115 // building Scell ID pointers
116 std::unordered_map< uint64_t, const CaloCell*> map_ScellID2ptr;
117
118 for(const CaloCell* scell : *ScellContainer){
119 const uint64_t ID = scell->ID().get_compact();
120 map_ScellID2ptr[ID] = scell;
121 }
122
123 // building Tile ID pointers
124 std::unordered_map< uint32_t, const xAOD::TriggerTower*> map_TileID2ptr;
125
126 for(const xAOD::TriggerTower* tower : *triggerTowerContainer){
127
128 // keeping just
129 if(std::abs(tower->eta())>1.5 || tower->sampling()!=1) continue;
130 map_TileID2ptr[tower->coolId()]=tower;
131 }
132
133 // FIXME: In C++20, we could do this more nicely with a templated lambda.
134 auto jTowerSCellEt = makeOptionalKey<std::vector<float> > (m_SCellEtdecorKey, ctx, m_save_extras);
135 auto jTowerSCellEta = makeOptionalKey<std::vector<float> > (m_SCellEtadecorKey, ctx, m_save_extras);
136 auto jTowerSCellPhi = makeOptionalKey<std::vector<float> > (m_SCellPhidecorKey, ctx, m_save_extras);
137 auto jTowerSCellID = makeOptionalKey<std::vector<int> > (m_SCellIDdecorKey, ctx, m_save_extras);
138 auto jTowerSCellMask = makeOptionalKey<std::vector<bool> > (m_SCellMaskdecorKey, ctx, m_save_extras);
139 auto jTowerTileEt = makeOptionalKey<int> (m_TileEtdecorKey, ctx, m_save_extras);
140 auto jTowerTileEta = makeOptionalKey<float> (m_TileEtadecorKey, ctx, m_save_extras);
141 auto jTowerTilePhi = makeOptionalKey<float> (m_TilePhidecorKey, ctx, m_save_extras);
142 auto jTowerEtencoded = makeOptionalKey<int> (m_jTowerEtdecorKey, ctx, m_save_emulated_var);
143
144 SG::WriteDecorHandle<xAOD::jFexTowerContainer, int > jTowerEtMeV (m_jtowerEtMeVdecorKey , ctx);
145 SG::WriteDecorHandle<xAOD::jFexTowerContainer, float > SCellEtMeV (m_SCellEtMeVdecorKey , ctx);
146 SG::WriteDecorHandle<xAOD::jFexTowerContainer, float > TileEtMeV (m_TileEtMeVdecorKey , ctx);
147
148 //looping over the jTowers to decorate them!
149 for(const xAOD::jFexTower* jTower : *jTowerContainer){
150
151 uint32_t jFexID = jTower->jFEXtowerID();
152 uint8_t source = jTower->Calosource();
153 int jFexEt = 0;
154 uint16_t jFexEtencoded = 0;
155
156 if(source >=7){
157 ATH_MSG_WARNING("Undefined source element: "<<source);
158 }
159
160 std::vector<float> scEt;
161 std::vector<float> scEta;
162 std::vector<float> scPhi;
163 std::vector<int> scID;
164 std::vector<bool> scMask;
165 float SCellEt = 0.0;
166 int TileEt = 0;
167 float TileEta = -99.0;
168 float TilePhi = -99.0;
169
170 if(source != 1){ // Source == 1 is belong to Tile Calorimeter, and of course the is not SCell information!
171
172 const std::unordered_map< uint32_t, std::vector<uint64_t> > * ptr_TTower2Cells;
173
174 //HAD layer for HEC, FCAL2 and FCAL3
175 if(source == 3 or source > 4){
176 ptr_TTower2Cells = &m_map_TTower2SCellsHAD;
177 }
178 else{
179 ptr_TTower2Cells = &m_map_TTower2SCellsEM;
180 }
181
182 //check that the jFEX Tower ID exists in the map
183 auto it_TTower2SCells = (*ptr_TTower2Cells).find(jFexID);
184 if(it_TTower2SCells == (*ptr_TTower2Cells).end()) {
185 ATH_MSG_ERROR("ID: "<<jFexID<< " not found on map m_map_TTower2SCellsEM/HAD");
186 return StatusCode::FAILURE;
187 }
188
189 bool invalid=true;
190 for (auto const& SCellID : it_TTower2SCells->second ) {
191
192 //check that the SCell Identifier exists in the map
193 auto it_ScellID2ptr = map_ScellID2ptr.find(SCellID);
194 if(it_ScellID2ptr == map_ScellID2ptr.end()) {
195 ATH_MSG_DEBUG("Scell ID: 0x"<<std::hex<<(SCellID >> 32)<<std::dec<< " not found on map map_ScellID2ptr");
196
197 scEt.push_back(0);
198 scEta.push_back(-99);
199 scPhi.push_back(-99);
200 // bit shifting to get only a 32 bit number
201 scID.push_back( SCellID >> 32 );
202 scMask.push_back(1); // treat missing cells as masked, so that if all missing will get a 0 not an invalid code
203
204 }
205 else{
206 const CaloCell* myCell = it_ScellID2ptr->second;
207
208 int val = std::round(myCell->energy()/(12.5*std::cosh(myCell->eta()))); // 12.5 is b.c. energy is in units of 12.5MeV per count
209 bool isMasked = m_apply_masking ? ((myCell)->provenance()&0x80) : false;
210 bool isInvalid = m_apply_masking ? ((myCell)->provenance()&0x40) : false;
211
212 invalid &= isInvalid;
213 //masked &= isMasked;
214
215 if( isMasked || isInvalid ) {
216 val = 0;
217 }
218
219 scEt.push_back(val);
220 scEta.push_back(myCell->eta());
221 scPhi.push_back(myCell->phi());
222 // bit shifting to get only a 32 bit number
223 scID.push_back( SCellID >> 32 );
224 scMask.push_back( isMasked );
225 }
226 }
227
228 //emulated encoded Et
229 float tmpSCellEt = 0;
230 for(const auto& tmpet : scEt){
231 tmpSCellEt += tmpet;
232 }
233
234 //How many SCell are masked? if all then send invalid code
235 unsigned int count_scMask =0;
236 for(const bool masked : scMask){
237 if(masked) count_scMask++;
238 }
239
240 SCellEt = tmpSCellEt*12.5;
241 // now must convert Total_Et int value into fex value: multi-level encoding
242 if(count_scMask==scMask.size()) {
243 jFexEtencoded = 0; // no data
244 } else if(invalid) {
245 jFexEtencoded = 4095; // invalid
246 } else {
247 jFexEtencoded = jFEXCompression::Compress( tmpSCellEt*12.5, false );
248 }
249
250 jFexEt = jFEXCompression::Expand( jTower->jTowerEt() );
251 }
252 else if(source == 1){
253
254 //check that the jFEX Tower ID exists in the map
255 auto it_TTower2Tile = m_map_TTower2Tile.find(jFexID);
256 if(it_TTower2Tile == m_map_TTower2Tile.end()) {
257 ATH_MSG_ERROR("ID: "<<jFexID<< " not found on map m_map_TTower2Tile");
258 return StatusCode::FAILURE;
259 }
260
261 uint32_t TileID = std::get<0>( it_TTower2Tile->second );
262
263 //check that the Tile Identifier exists in the map
264 auto it_TileID2ptr = map_TileID2ptr.find(TileID);
265 if(it_TileID2ptr == map_TileID2ptr.end()) {
266 ATH_MSG_WARNING("Scell ID: 0x"<<std::hex<<TileID<<std::dec<< " not found on map map_TileID2ptr");
267
268 jFexEtencoded = 0;
269 TileEt = 0;
270 TileEta = -99;
271 TilePhi = -99;
272 }
273 else{
274 jFexEtencoded = (it_TileID2ptr->second)->cpET();
275 TileEt = jFexEtencoded*500; // cf 500 since it is cpET
276 TileEta = (it_TileID2ptr->second)->eta();
277 float phi = (it_TileID2ptr->second)->phi() < M_PI ? (it_TileID2ptr->second)->phi() : (it_TileID2ptr->second)->phi()-2*M_PI;
278 TilePhi = phi;
279
280 }
281
282 jFexEt = jTower->jTowerEt()*500; // cf 500 since it is cpET
283
284 }
285
286 // Decorating the tower with the corresponding information
287 //Setup Decorator Handlers
288 if(m_save_extras) {
289 (*jTowerSCellEt) (*jTower) = std::move(scEt);
290 (*jTowerSCellEta) (*jTower) = std::move(scEta);
291 (*jTowerSCellPhi) (*jTower) = std::move(scPhi);
292 (*jTowerSCellID) (*jTower) = std::move(scID);
293 (*jTowerSCellMask) (*jTower) = std::move(scMask);
294 (*jTowerTileEt) (*jTower) = static_cast<int>( TileEt );
295 (*jTowerTileEta) (*jTower) = TileEta;
296 (*jTowerTilePhi) (*jTower) = TilePhi;
297 }
298
299 jTowerEtMeV (*jTower) = jFexEt;
300 SCellEtMeV (*jTower) = SCellEt;
301 TileEtMeV (*jTower) = TileEt;
302
304 (*jTowerEtencoded) (*jTower) = jFexEtencoded;
305 }
306
307
308 }
309
310 // Return gracefully
311 return StatusCode::SUCCESS;
312}
#define M_PI
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
#define ATH_MSG_ERROR(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
std::vector< Identifier > ID
virtual double phi() const override final
get phi (through CaloDetDescrElement)
Definition CaloCell.h:375
double energy() const
get energy (data member)
Definition CaloCell.h:327
virtual double eta() const override final
get eta (through CaloDetDescrElement)
Definition CaloCell.h:382
static int Expand(unsigned int code)
Uncompress data.
static unsigned int Compress(float floatEt, bool empty=false)
Compress data.
SG::WriteDecorHandleKey< xAOD::jFexTowerContainer > m_TileEtadecorKey
SG::WriteDecorHandleKey< xAOD::jFexTowerContainer > m_SCellEtdecorKey
SG::WriteDecorHandleKey< xAOD::jFexTowerContainer > m_SCellEtadecorKey
std::unordered_map< uint32_t, std::tuple< uint32_t, float, float > > m_map_TTower2Tile
SG::WriteDecorHandleKey< xAOD::jFexTowerContainer > m_SCellEtMeVdecorKey
SG::ReadHandleKey< CaloCellContainer > m_SCellKey
std::unordered_map< uint32_t, std::vector< uint64_t > > m_map_TTower2SCellsHAD
SG::WriteDecorHandleKey< xAOD::jFexTowerContainer > m_jtowerEtMeVdecorKey
SG::WriteDecorHandleKey< xAOD::jFexTowerContainer > m_SCellPhidecorKey
SG::WriteDecorHandleKey< xAOD::jFexTowerContainer > m_TileEtMeVdecorKey
SG::WriteDecorHandleKey< xAOD::jFexTowerContainer > m_TilePhidecorKey
SG::WriteDecorHandleKey< xAOD::jFexTowerContainer > m_jTowerEtdecorKey
SG::WriteDecorHandleKey< xAOD::jFexTowerContainer > m_SCellMaskdecorKey
SG::ReadHandleKey< xAOD::TriggerTowerContainer > m_triggerTowerKey
SG::WriteDecorHandleKey< xAOD::jFexTowerContainer > m_SCellIDdecorKey
SG::WriteDecorHandleKey< xAOD::jFexTowerContainer > m_TileEtdecorKey
std::unordered_map< uint32_t, std::vector< uint64_t > > m_map_TTower2SCellsEM
SG::ReadHandleKey< xAOD::jFexTowerContainer > m_jTowersReadKey
TriggerTower_v2 TriggerTower
Define the latest version of the TriggerTower class.
setWord1 uint16_t
setEventNumber uint32_t
jFexTower_v1 jFexTower
Define the latest version of the TriggerTower class.
Definition jFexTower.h:15

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::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

◆ extraOutputDeps()

const DataObjIDColl & AthCommonReentrantAlgorithm< Gaudi::Algorithm >::extraOutputDeps ( ) const
overridevirtualinherited

Return the list of extra output dependencies.

This list is extended to include symlinks implied by inheritance relations.

Definition at line 94 of file AthCommonReentrantAlgorithm.cxx.

90{
91 // If we didn't find any symlinks to add, just return the collection
92 // from the base class. Otherwise, return the extended collection.
93 if (!m_extendedExtraObjects.empty()) {
95 }
97}
An algorithm that can be simultaneously executed in multiple threads.

◆ filterPassed()

virtual bool AthCommonReentrantAlgorithm< Gaudi::Algorithm >::filterPassed ( const EventContext & ctx) const
inlinevirtualinherited

Definition at line 96 of file AthCommonReentrantAlgorithm.h.

96 {
97 return execState( ctx ).filterPassed();
98 }
virtual bool filterPassed(const EventContext &ctx) const

◆ initialize()

StatusCode LVL1::jFexTower2SCellDecorator::initialize ( )
overridevirtual

Function initialising the algorithm.

Definition at line 49 of file jFexTower2SCellDecorator.cxx.

49 {
50
51 ATH_MSG_INFO( "Initializing L1CaloFEXTools/jFexTower2SCellDecorator algorithm with name: "<< name());
52 ATH_MSG_INFO( "Decorating SG key: "<< m_jTowersReadKey);
53
54 ATH_CHECK( m_SCellKey.initialize() );
55 ATH_CHECK( m_triggerTowerKey.initialize() );
56 ATH_CHECK( m_jTowersReadKey.initialize() );
57
58 // This will avoid extra variables when the Key is different than DataTowers
59 if( (m_jTowersReadKey.key()).compare("L1_jFexDataTowers") != 0 ){
60 m_save_emulated_var = false;
61 }
62
63 //Decarator keys
64 ATH_CHECK( m_jtowerEtMeVdecorKey.initialize() );
65 ATH_CHECK( m_SCellEtMeVdecorKey.initialize() );
66 ATH_CHECK( m_TileEtMeVdecorKey.initialize() );
68
77
78
79
80 //Reading from CVMFS Trigger Tower and their corresponding SCell ID
83
84 return StatusCode::SUCCESS;
85}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_INFO(x)
StatusCode ReadTilefromFile(const std::string &)
StatusCode ReadSCfromFile(const std::string &)
Gaudi::Property< std::string > m_jFEX2Scellmapping
Gaudi::Property< std::string > m_jFEX2Tilemapping

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::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.

◆ isBadSCellID()

bool LVL1::jFexTower2SCellDecorator::isBadSCellID ( const std::string & ID) const
private

Definition at line 378 of file jFexTower2SCellDecorator.cxx.

378 {
379
380 // does it start with "0x"?, if so then is a GOOD SCell ID!
381 if (ID.find("0x") == std::string::npos) {
382 ATH_MSG_ERROR("Invalid SuperCell ID " << ID << ". Expecting hexadecimal number on the mapping file");
383 return true;
384 }
385 return false;
386}

◆ isClonable()

◆ msg()

MsgStream & AthCommonMsg< Gaudi::Algorithm >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

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

◆ msgLvl()

bool AthCommonMsg< Gaudi::Algorithm >::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< Gaudi::Algorithm > >::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.

◆ ReadSCfromFile()

StatusCode LVL1::jFexTower2SCellDecorator::ReadSCfromFile ( const std::string & fileName)
private

Definition at line 315 of file jFexTower2SCellDecorator.cxx.

315 {
316
317 std::string myline;
318
319 //openning file with ifstream
320 std::ifstream myfile(fileName);
321
322 if ( !myfile.is_open() ){
323 ATH_MSG_ERROR("Could not open file:" << fileName);
324 return StatusCode::FAILURE;
325 }
326
327 //loading the mapping information into an unordered_map <Fex Tower ID, vector of SCell IDs>
328 while ( std::getline (myfile, myline) ) {
329 std::vector<uint64_t> SCellvectorEM;
330 SCellvectorEM.clear();
331 std::vector<uint64_t> SCellvectorHAD;
332 SCellvectorHAD.clear();
333
334 //removing the header of the file (it is just information!)
335 if(myline[0] == '#') continue;
336
337 //Splitting myline in different substrings
338 std::stringstream oneSCellID(myline);
339
340 //reading elements
341 std::string substr = "";
342 int TTID = 0;
343 int elem = 0;
344
345 while(std::getline(oneSCellID, substr, ' '))
346 {
347 ++elem;
348 if(elem == 1){
349 TTID = std::stoi(substr);
350 }
351 else{
352 //Check if it looks like a SCell Identifier
353 if(isBadSCellID(substr)){
354 return StatusCode::FAILURE;
355 }
356
357 // converts hex number to unsigned long long int
358 uint64_t scid_uint64 = std::strtoull(substr.c_str(), nullptr, 0);
359
360 //empty slots are filled with 0xffffffffffffffff
361 if(scid_uint64 == 0xffffffffffffffff) continue;
362
363 //from element from 2 to 13 are EM SCells, element 14 is a HAD SCell
364 if(elem<14) SCellvectorEM.push_back(scid_uint64);
365 else SCellvectorHAD.push_back(scid_uint64);
366 }
367 }
368
369 m_map_TTower2SCellsEM[TTID] = std::move(SCellvectorEM);
370 m_map_TTower2SCellsHAD[TTID] = std::move(SCellvectorHAD);
371
372 }
373 myfile.close();
374
375 return StatusCode::SUCCESS;
376}
bool isBadSCellID(const std::string &) const

◆ ReadTilefromFile()

StatusCode LVL1::jFexTower2SCellDecorator::ReadTilefromFile ( const std::string & fileName)
private

Definition at line 391 of file jFexTower2SCellDecorator.cxx.

391 {
392
393 std::string myline;
394
395 //openning file with ifstream
396 std::ifstream myfile(fileName);
397
398 if ( !myfile.is_open() ){
399 ATH_MSG_ERROR("Could not open file:" << fileName);
400 return StatusCode::FAILURE;
401 }
402
403 //loading the mapping information into an unordered_map <Fex Tower ID, vector of SCell IDs>
404 while ( std::getline (myfile, myline) ) {
405
406 //removing the header of the file (it is just information!)
407 if(myline[0] == '#') continue;
408
409 //Splitting myline in different substrings
410 std::stringstream oneLine(myline);
411
412 std::vector<std::string> elements;
413 std::string element = "";
414
415 while(std::getline(oneLine, element, ' ')){
416 elements.push_back(element);
417 }
418
419 if(elements.size() != 4){
420 ATH_MSG_ERROR("Invalid number of element in " << myline << ". Expecting 4 elements {jFexID, TileID, eta, phi}");
421 return StatusCode::FAILURE;
422 }
423
424 uint32_t jFexID = std::stoi( elements.at(0) );
425 uint32_t TileID = std::stoi( elements.at(1) );
426 float eta = std::stof( elements.at(2) );
427 float phi = std::stof( elements.at(3) );
428
429 m_map_TTower2Tile[jFexID] = {TileID,eta,phi};
430
431 }
432 myfile.close();
433
434 return StatusCode::SUCCESS;
435}

◆ 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< Gaudi::Algorithm > >::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< Gaudi::Algorithm > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ setFilterPassed()

virtual void AthCommonReentrantAlgorithm< Gaudi::Algorithm >::setFilterPassed ( bool state,
const EventContext & ctx ) const
inlinevirtualinherited

Definition at line 100 of file AthCommonReentrantAlgorithm.h.

100 {
102 }
virtual void setFilterPassed(bool state, const EventContext &ctx) const

◆ sysExecute()

StatusCode AthCommonReentrantAlgorithm< Gaudi::Algorithm >::sysExecute ( const EventContext & ctx)
overridevirtualinherited

Execute an algorithm.

We override this in order to work around an issue with the Algorithm base class storing the event context in a member variable that can cause crashes in MT jobs.

Definition at line 85 of file AthCommonReentrantAlgorithm.cxx.

77{
78 return BaseAlg::sysExecute (ctx);
79}

◆ sysInitialize()

StatusCode AthCommonReentrantAlgorithm< Gaudi::Algorithm >::sysInitialize ( )
overridevirtualinherited

Override sysInitialize.

Override sysInitialize from the base class.

Loop through all output handles, and if they're WriteCondHandles, automatically register them and this Algorithm with the CondSvc

Scan through all outputHandles, and if they're WriteCondHandles, register them with the CondSvc

Reimplemented from AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >.

Reimplemented in HypoBase, and InputMakerBase.

Definition at line 61 of file AthCommonReentrantAlgorithm.cxx.

107 {
109
110 if (sc.isFailure()) {
111 return sc;
112 }
113
114 ServiceHandle<ICondSvc> cs("CondSvc",name());
115 for (auto h : outputHandles()) {
116 if (h->isCondition() && h->mode() == Gaudi::DataHandle::Writer) {
117 // do this inside the loop so we don't create the CondSvc until needed
118 if ( cs.retrieve().isFailure() ) {
119 ATH_MSG_WARNING("no CondSvc found: won't autoreg WriteCondHandles");
120 return StatusCode::SUCCESS;
121 }
122 if (cs->regHandle(this,*h).isFailure()) {
124 ATH_MSG_ERROR("unable to register WriteCondHandle " << h->fullKey()
125 << " with CondSvc");
126 }
127 }
128 }
129 return sc;
130}
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::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< Gaudi::Algorithm > >::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 }

Member Data Documentation

◆ m_apply_masking

Gaudi::Property<bool> LVL1::jFexTower2SCellDecorator::m_apply_masking {this, "SCellMasking", true , "Applies masking. Only use for data"}
private

Definition at line 70 of file jFexTower2SCellDecorator.h.

70{this, "SCellMasking", true , "Applies masking. Only use for data"};

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_extendedExtraObjects

DataObjIDColl AthCommonReentrantAlgorithm< Gaudi::Algorithm >::m_extendedExtraObjects
privateinherited

Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.

Empty if no symlinks were found.

Definition at line 114 of file AthCommonReentrantAlgorithm.h.

◆ m_jFEX2Scellmapping

Gaudi::Property<std::string> LVL1::jFexTower2SCellDecorator::m_jFEX2Scellmapping {this, "jFEX2SCmapping" , PathResolver::find_calib_file("L1CaloFEXByteStream/2022-10-19/jfex_SCID.txt") , "Text file to convert from simulation ID to SuperCell Identifier"}
private

Definition at line 74 of file jFexTower2SCellDecorator.h.

74{this, "jFEX2SCmapping" , PathResolver::find_calib_file("L1CaloFEXByteStream/2022-10-19/jfex_SCID.txt") , "Text file to convert from simulation ID to SuperCell Identifier"};
static std::string find_calib_file(const std::string &logical_file_name)

◆ m_jFEX2Tilemapping

Gaudi::Property<std::string> LVL1::jFexTower2SCellDecorator::m_jFEX2Tilemapping {this, "jFEX2Tilemapping", PathResolver::find_calib_file("L1CaloFEXByteStream/2022-10-19/jfex_TileID.txt"), "Text file to convert from simulation ID to Tile Identifier"}
private

Definition at line 75 of file jFexTower2SCellDecorator.h.

75{this, "jFEX2Tilemapping", PathResolver::find_calib_file("L1CaloFEXByteStream/2022-10-19/jfex_TileID.txt"), "Text file to convert from simulation ID to Tile Identifier"};

◆ m_jTowerEtdecorKey

SG::WriteDecorHandleKey<xAOD::jFexTowerContainer> LVL1::jFexTower2SCellDecorator::m_jTowerEtdecorKey { this, "jTowerEtdecorKey" , m_jTowersReadKey, "emulated_jtowerEt" , "jFex Tower Et information. ENCODED!"}
private

Definition at line 66 of file jFexTower2SCellDecorator.h.

66{ this, "jTowerEtdecorKey" , m_jTowersReadKey, "emulated_jtowerEt" , "jFex Tower Et information. ENCODED!"};

◆ m_jtowerEtMeVdecorKey

SG::WriteDecorHandleKey<xAOD::jFexTowerContainer> LVL1::jFexTower2SCellDecorator::m_jtowerEtMeVdecorKey { this, "jtowerEtMeVdecorKey", m_jTowersReadKey, "jtower2SCellEtMeV" , "jFex Tower Et information in MeV"}
private

Definition at line 63 of file jFexTower2SCellDecorator.h.

63{ this, "jtowerEtMeVdecorKey", m_jTowersReadKey, "jtower2SCellEtMeV" , "jFex Tower Et information in MeV"};

◆ m_jTowersReadKey

SG::ReadHandleKey< xAOD::jFexTowerContainer > LVL1::jFexTower2SCellDecorator::m_jTowersReadKey {this,"jTowersReadKey" ,"L1_jFexDataTowers", "Read jFexEDM Trigger Tower container"}
private

Definition at line 51 of file jFexTower2SCellDecorator.h.

51{this,"jTowersReadKey" ,"L1_jFexDataTowers", "Read jFexEDM Trigger Tower container"};

◆ m_map_TTower2SCellsEM

std::unordered_map< uint32_t, std::vector<uint64_t> > LVL1::jFexTower2SCellDecorator::m_map_TTower2SCellsEM
private

Definition at line 83 of file jFexTower2SCellDecorator.h.

◆ m_map_TTower2SCellsHAD

std::unordered_map< uint32_t, std::vector<uint64_t> > LVL1::jFexTower2SCellDecorator::m_map_TTower2SCellsHAD
private

Definition at line 84 of file jFexTower2SCellDecorator.h.

◆ m_map_TTower2Tile

std::unordered_map< uint32_t, std::tuple<uint32_t,float,float> > LVL1::jFexTower2SCellDecorator::m_map_TTower2Tile
private

Definition at line 85 of file jFexTower2SCellDecorator.h.

◆ m_save_emulated_var

bool LVL1::jFexTower2SCellDecorator::m_save_emulated_var = true
private

Definition at line 81 of file jFexTower2SCellDecorator.h.

◆ m_save_extras

Gaudi::Property<bool> LVL1::jFexTower2SCellDecorator::m_save_extras {this, "ExtraInfo" , false, "Saves additional decorated information "}
private

Definition at line 71 of file jFexTower2SCellDecorator.h.

71{this, "ExtraInfo" , false, "Saves additional decorated information "};

◆ m_SCellEtadecorKey

SG::WriteDecorHandleKey<xAOD::jFexTowerContainer> LVL1::jFexTower2SCellDecorator::m_SCellEtadecorKey { this, "SCellEtadecorKey" , m_jTowersReadKey, "SCellEta" , "SCell Eta information of the jTower"}
private

Definition at line 55 of file jFexTower2SCellDecorator.h.

55{ this, "SCellEtadecorKey" , m_jTowersReadKey, "SCellEta" , "SCell Eta information of the jTower"};

◆ m_SCellEtdecorKey

SG::WriteDecorHandleKey<xAOD::jFexTowerContainer> LVL1::jFexTower2SCellDecorator::m_SCellEtdecorKey { this, "SCellEtdecorKey" , m_jTowersReadKey, "SCellEt" , "SCell Et information of the jTower in MEV"}
private

Definition at line 54 of file jFexTower2SCellDecorator.h.

54{ this, "SCellEtdecorKey" , m_jTowersReadKey, "SCellEt" , "SCell Et information of the jTower in MEV"};

◆ m_SCellEtMeVdecorKey

SG::WriteDecorHandleKey<xAOD::jFexTowerContainer> LVL1::jFexTower2SCellDecorator::m_SCellEtMeVdecorKey { this, "SCellEtMeVdecorKey" , m_jTowersReadKey, "SCellEtMeV" , "SCell Et sum information in MeV"}
private

Definition at line 64 of file jFexTower2SCellDecorator.h.

64{ this, "SCellEtMeVdecorKey" , m_jTowersReadKey, "SCellEtMeV" , "SCell Et sum information in MeV"};

◆ m_SCellIDdecorKey

SG::WriteDecorHandleKey<xAOD::jFexTowerContainer> LVL1::jFexTower2SCellDecorator::m_SCellIDdecorKey { this, "SCellIDdecorKey" , m_jTowersReadKey, "SCellID" , "SCell IDs information of the jTower"}
private

Definition at line 57 of file jFexTower2SCellDecorator.h.

57{ this, "SCellIDdecorKey" , m_jTowersReadKey, "SCellID" , "SCell IDs information of the jTower"};

◆ m_SCellKey

SG::ReadHandleKey<CaloCellContainer> LVL1::jFexTower2SCellDecorator::m_SCellKey {this, "SCell", "SCell", "SCell container"}
private

Definition at line 45 of file jFexTower2SCellDecorator.h.

45{this, "SCell", "SCell", "SCell container"};

◆ m_SCellMaskdecorKey

SG::WriteDecorHandleKey<xAOD::jFexTowerContainer> LVL1::jFexTower2SCellDecorator::m_SCellMaskdecorKey { this, "SCellMaskdecorKey" , m_jTowersReadKey, "SCellMask" , "SCell masking information of the jTower"}
private

Definition at line 58 of file jFexTower2SCellDecorator.h.

58{ this, "SCellMaskdecorKey" , m_jTowersReadKey, "SCellMask" , "SCell masking information of the jTower"};

◆ m_SCellPhidecorKey

SG::WriteDecorHandleKey<xAOD::jFexTowerContainer> LVL1::jFexTower2SCellDecorator::m_SCellPhidecorKey { this, "SCellPhidecorKey" , m_jTowersReadKey, "SCellPhi" , "SCell Phi information of the jTower"}
private

Definition at line 56 of file jFexTower2SCellDecorator.h.

56{ this, "SCellPhidecorKey" , m_jTowersReadKey, "SCellPhi" , "SCell Phi information of the jTower"};

◆ m_TileEtadecorKey

SG::WriteDecorHandleKey<xAOD::jFexTowerContainer> LVL1::jFexTower2SCellDecorator::m_TileEtadecorKey { this, "TileEtadecorKey" , m_jTowersReadKey, "TileEta" , "Tile Tower Eta information of the jTower"}
private

Definition at line 60 of file jFexTower2SCellDecorator.h.

60{ this, "TileEtadecorKey" , m_jTowersReadKey, "TileEta" , "Tile Tower Eta information of the jTower"};

◆ m_TileEtdecorKey

SG::WriteDecorHandleKey<xAOD::jFexTowerContainer> LVL1::jFexTower2SCellDecorator::m_TileEtdecorKey { this, "TileEtdecorKey" , m_jTowersReadKey, "TileEt" , "Tile Tower Et information in Encoded from cpET"}
private

Definition at line 59 of file jFexTower2SCellDecorator.h.

59{ this, "TileEtdecorKey" , m_jTowersReadKey, "TileEt" , "Tile Tower Et information in Encoded from cpET"};

◆ m_TileEtMeVdecorKey

SG::WriteDecorHandleKey<xAOD::jFexTowerContainer> LVL1::jFexTower2SCellDecorator::m_TileEtMeVdecorKey { this, "TileEtMeVdecorKey" , m_jTowersReadKey, "TileEtMeV" , "Tile Et information in MeV"}
private

Definition at line 65 of file jFexTower2SCellDecorator.h.

65{ this, "TileEtMeVdecorKey" , m_jTowersReadKey, "TileEtMeV" , "Tile Et information in MeV"};

◆ m_TilePhidecorKey

SG::WriteDecorHandleKey<xAOD::jFexTowerContainer> LVL1::jFexTower2SCellDecorator::m_TilePhidecorKey { this, "TilePhidecorKey" , m_jTowersReadKey, "TilePhi" , "Tile Tower Phi information of the jTower"}
private

Definition at line 61 of file jFexTower2SCellDecorator.h.

61{ this, "TilePhidecorKey" , m_jTowersReadKey, "TilePhi" , "Tile Tower Phi information of the jTower"};

◆ m_triggerTowerKey

SG::ReadHandleKey<xAOD::TriggerTowerContainer> LVL1::jFexTower2SCellDecorator::m_triggerTowerKey {this, "xODTriggerTowers", "xAODTriggerTowers", "xAODTriggerTowers container"}
private

Definition at line 48 of file jFexTower2SCellDecorator.h.

48{this, "xODTriggerTowers", "xAODTriggerTowers", "xAODTriggerTowers container"};

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

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

Definition at line 398 of file AthCommonDataStore.h.


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