ATLAS Offline Software
Loading...
Searching...
No Matches
MDT_RegSelCondAlg Class Reference

#include <MDT_RegSelCondAlg.h>

Inheritance diagram for MDT_RegSelCondAlg:
Collaboration diagram for MDT_RegSelCondAlg:

Public Member Functions

 MDT_RegSelCondAlg (const std::string &name, ISvcLocator *pSvcLocator)
std::unique_ptr< RegSelSiLUTcreateTable (const EventContext &ctx, EventIDRange &id_range) const override
virtual StatusCode initialize () override
virtual StatusCode execute (const EventContext &ctx) const override
virtual bool isReEntrant () const override
 Avoid scheduling algorithm multiple times.
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

Public Attributes

SG::ReadCondHandleKey< MuonMDT_CablingMapm_cablingKey { this, "Cabling", "MuonMDT_CablingMap", "Key of output MDT cabling map" }
SG::ReadCondHandleKey< MdtCondDbDatam_condKey

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.

Protected Attributes

SG::ReadCondHandleKey< MuonGM::MuonDetectorManagerm_detMgrKey
 MuonDetectorManager from the conditions store.

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

Gaudi::Property< bool > m_printTable {this, "PrintTable", false}
Gaudi::Property< std::string > m_mangerName {this, "ManagerName", "", "Property no where used"}
SG::WriteCondHandleKey< IRegSelLUTCondDatam_tableKey { this, "RegSelLUT", "RegSelLUTCondData", "Region Selector lookup table" }
 Output conditions object.
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 18 of file MDT_RegSelCondAlg.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

◆ MDT_RegSelCondAlg()

MDT_RegSelCondAlg::MDT_RegSelCondAlg ( const std::string & name,
ISvcLocator * pSvcLocator )

Definition at line 29 of file MDT_RegSelCondAlg.cxx.

29 :
30 MuonRegSelCondAlg( name, pSvcLocator )
31{
32 ATH_MSG_DEBUG( "MDT_RegSelCondAlg::MDT_RegSelCondAlg() " << name );
33}
#define ATH_MSG_DEBUG(x)
MuonRegSelCondAlg(const std::string &name, ISvcLocator *pSvcLocator)

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.

62{
63 return 0;
64}

◆ createTable()

std::unique_ptr< RegSelSiLUT > MDT_RegSelCondAlg::createTable ( const EventContext & ctx,
EventIDRange & id_range ) const
overridevirtual

create the new lookup table

ne wlookup table

what is this loop over? This is awful code, this i parameter hides the "i" from loop over the iterators, or it did until I changed it

Implements MuonRegSelCondAlg.

Definition at line 48 of file MDT_RegSelCondAlg.cxx.

48 {
49
50 SG::ReadCondHandle<MuonMDT_CablingMap> cabling( m_cablingKey, ctx );
51
52 if( !cabling.range( id_range ) ) {
53 ATH_MSG_ERROR("Failed to retrieve validity range for " << cabling.key());
54 return {nullptr};
55 }
56
57 SG::ReadCondHandle<MuonGM::MuonDetectorManager> manager( m_detMgrKey, ctx );
58
59 if( !manager.range( id_range ) ) {
60 ATH_MSG_ERROR("Failed to retrieve validity range for " << manager.key());
61 return {nullptr};
62 }
63
64
65 const MdtCondDbData* conditions_ptr = nullptr;
66
67 if (!m_condKey.empty()){
68 SG::ReadCondHandle<MdtCondDbData> conditions(m_condKey, ctx);
69 if( !conditions.range( id_range ) ) {
70 ATH_MSG_ERROR("Failed to retrieve validity range for " << conditions.key());
71 return {nullptr};
72 }
73 conditions_ptr = conditions.cptr();
74 }
76
77
78
79 const MdtIdHelper* helper = manager->mdtIdHelper();
80
82 std::unique_ptr<RegSelSiLUT> lut = std::make_unique<RegSelSiLUT>();
83
84
85 IdContext ModuleContext = helper->module_context();
86
87 std::vector<Identifier>::const_iterator itr = helper->module_begin();
88 std::vector<Identifier>::const_iterator idlast = helper->module_end();
89
90 for ( ; itr!=idlast; ++itr ) {
91
92 Identifier Id = *itr;
93 IdentifierHash Idhash;
94
95 helper->get_hash(Id, Idhash, &ModuleContext);
96
97 ExpandedIdentifier exp_id;
98 if (helper->get_expanded_id( Id, exp_id, &ModuleContext)) {
99 ATH_MSG_DEBUG("Failed retrieving ExpandedIdentifier for PRD Identifier = " << Id.getString() << ". Skipping to the next PRD.");
100 continue;
101 }
102 if (conditions_ptr && !conditions_ptr->isGood(Id)) {
103 ATH_MSG_DEBUG("Channel is marked as dead");
104 continue;
105 }
106 int detid = ( exp_id[2]<0 ? -1 : 1 );
107 int layerid = exp_id[1]+1;
108
109 // get the element corresponding to multilayer = 1
110 const MuonGM::MdtReadoutElement* mdt1 = manager->getMdtReadoutElement(Id);
111 if (mdt1 == nullptr) {
112 continue;
113 }
114
115 Identifier Id2 = helper->channelID(Id, 2, 1, 1);
116
117 // get the element corresponding to multilayer = 2
118 const MuonGM::MdtReadoutElement* mdt2 = manager->getMdtReadoutElement(Id2);
119
120 double tubePitch = mdt1->tubePitch();
121
122 int ntlay = mdt1->getNLayers();
123 int ntubesl1 = mdt1->getNtubesperlayer();
124 int ntubesl2 = 0;
125
126 if (mdt2 != nullptr) ntubesl2 = mdt2->getNtubesperlayer();
127
128 Identifier Idv[4];
129 Idv[0] = helper->channelID(Id, 1, 1, 1);
130 Idv[1] = helper->channelID(Id, 1, 1, ntubesl1);
131 Idv[2] = helper->channelID(Id, 2, ntlay, 1);
132 Idv[3] = helper->channelID(Id, 2, ntlay, ntubesl2);
133
134 // std::cout<<" Number of tube layers "<<ntlay;
135 // std::cout<<" Number of tubes / layer (1 ,2) "<<ntubesl1<<", "<<ntubesl2;
136
137 double rmin = 99999999.;
138 double rmax = -99999999.;
139 double zmin = 99999999.;
140 double zmax = -99999999.;
141 double emin = 99999999.;
142 double emax = -99999999.;
143 double phimin = 999999.;
144 double phimax = -999999.;
145
146 double zpos21 = 0.;
147 Identifier Idsl = helper->channelID(Id, 1, 2, 1);
148 if (mdt1->barrel()) {
149 zpos21 = (mdt1->tubePos(Idsl)).z()-(mdt1->tubePos(Idv[0])).z();
150 }
151 else {
152 zpos21 = (mdt1->tubePos(Idsl)).perp()-(mdt1->tubePos(Idv[0])).perp();
153 }
154
157 // to a more sensibly named "itr"
158 for (int i=0; i<4; i++) {
159
160 const MuonGM::MdtReadoutElement* mdt = nullptr;
161
162 if ( i<2 ) mdt = mdt1;
163 else mdt = mdt2;
164 if (mdt == nullptr) {
165 // std::cout<<" element not found for index i = "<<i<<" --------- "<<std::endl;
166 if (i==2) {
167 Idv[2] = helper->channelID(Id, 1, ntlay, 1);
168 mdt = manager->getMdtReadoutElement(Idv[2]);
169 }
170 else if (i==3) {
171 Idv[3] = helper->channelID(Id, 1, ntlay, ntubesl1);
172 mdt = manager->getMdtReadoutElement(Idv[3]);
173 }
174 else {
175 // std::cout<<" Skipping element; i = "<<i<<" ----- "<<std::endl;
176 continue;
177 }
178
179 }
180
181 Amg::Vector3D mdtPos = mdt->tubePos(Idv[i]);
182
183 Amg::Vector3D mdtPos1 = mdtPos;
184 Amg::Vector3D mdtPos2 = mdtPos;
185
186 double scaleMin = (mdtPos.perp()-tubePitch/2.)/mdtPos.perp();
187 double scalePlus = (mdtPos.perp()+tubePitch/2.)/mdtPos.perp();
188
189 if (mdt->barrel()) {
190
191 // these are z ranges of the first or last tube layer
192 // mdtPos1.setZ(mdtPos.z()-tubePitch/2.);
193 // mdtPos2.setZ(mdtPos.z()+tubePitch/2.);
194 mdtPos1[2] = mdtPos.z()-tubePitch/2.;
195 mdtPos2[2] = mdtPos.z()+tubePitch/2.;
196
197 // correct the z ranges of the first or last tube layer to account for tube staggering
198 if (zpos21 > 1.) {
199 // mdtPos2.setZ(mdtPos2.z()+tubePitch/2.);
200 mdtPos2[2] = mdtPos2.z()+tubePitch/2.;
201 }
202 else if (zpos21 < -1.) {
203 //mdtPos1.setZ(mdtPos1.z()-tubePitch/2.);
204 mdtPos1[2] = mdtPos1.z()-tubePitch/2.;
205 }
206
207 if (i<2) {
208 mdtPos1[0] *= scaleMin;
209 mdtPos1[1] *= scaleMin;
210 mdtPos2[0] *= scaleMin;
211 mdtPos2[1] *= scaleMin;
212 // mdtPos1.setPerp(mdtPos.perp()-tubePitch/2.);
213 // mdtPos2.setPerp(mdtPos.perp()-tubePitch/2.);
214 }
215 else {
216 mdtPos1[0] *= scalePlus;
217 mdtPos1[1] *= scalePlus;
218 mdtPos2[0] *= scalePlus;
219 mdtPos2[1] *= scalePlus;
220 // mdtPos1.setPerp(mdtPos.perp()+tubePitch/2.);
221 // mdtPos2.setPerp(mdtPos.perp()+tubePitch/2.);
222 }
223 }
224 else {
225
226 // these are z ranges of the first or last tube layer
227 mdtPos1[0] *= scaleMin;
228 mdtPos1[1] *= scaleMin;
229 mdtPos2[0] *= scalePlus;
230 mdtPos2[1] *= scalePlus;
231 // mdtPos1.setPerp(mdtPos.perp()-tubePitch/2.);
232 // mdtPos2.setPerp(mdtPos.perp()+tubePitch/2.);
233 // correct the z ranges of the first or last tube layer to account for tube staggering
234 if (zpos21 > 1.) {
235 scalePlus = (mdtPos2.perp()+tubePitch/2.)/mdtPos2.perp();
236 mdtPos2[0] *= scalePlus;
237 mdtPos2[1] *= scalePlus;
238 // mdtPos2.setPerp(mdtPos2.perp()+tubePitch/2.);
239 }
240 else if (zpos21 < -1.) {
241 scaleMin = (mdtPos1.perp()-tubePitch/2.)/mdtPos1.perp();
242 mdtPos1[0] *= scaleMin;
243 mdtPos1[1] *= scaleMin;
244 // mdtPos1.setPerp(mdtPos1.perp()-tubePitch/2.);
245 }
246 if (i<2) {
247 if (mdt->sideA()){
248 // mdtPos1.setZ(mdtPos.z()-tubePitch/2.);
249 // mdtPos2.setZ(mdtPos.z()-tubePitch/2.);
250 mdtPos1[2] = mdtPos.z()-tubePitch/2.;
251 mdtPos2[2] = mdtPos.z()-tubePitch/2.;
252 }
253 else {
254 // mdtPos1.setZ(mdtPos.z()+tubePitch/2.);
255 // mdtPos2.setZ(mdtPos.z()+tubePitch/2.);
256 mdtPos1[2] = mdtPos.z()+tubePitch/2.;
257 mdtPos2[2] = mdtPos.z()+tubePitch/2.;
258 }
259 }
260 else {
261 if (mdt->sideA()) {
262 // mdtPos1.setZ(mdtPos.z()+tubePitch/2.);
263 // mdtPos2.setZ(mdtPos.z()+tubePitch/2.);
264 mdtPos1[2] = mdtPos.z()+tubePitch/2.;
265 mdtPos2[2] = mdtPos.z()+tubePitch/2.;
266 }
267 else {
268 // mdtPos1.setZ(mdtPos.z()-tubePitch/2.);
269 // mdtPos2.setZ(mdtPos.z()-tubePitch/2.);
270 mdtPos1[2] = mdtPos.z()-tubePitch/2.;
271 mdtPos2[2] = mdtPos.z()-tubePitch/2.;
272 }
273 }
274 }
275
276 double eminMod = 0.;
277 double emaxMod = 0.;
278 double zminMod = 0.;
279 double zmaxMod = 0.;
280 double rminMod = 0.;
281 double rmaxMod = 0.;
282 double dphi = 0.;
283
284 if (mdt->barrel()) {
285 eminMod = mdtPos1.eta();
286 emaxMod = mdtPos2.eta();
287
288 zminMod = mdtPos1.z();
289 zmaxMod = mdtPos2.z();
290
291 rminMod = mdtPos1.perp();
292 rmaxMod = mdtPos2.perp();
293
294 dphi = atan2(mdt->getSsize()/2., (mdtPos.perp()-tubePitch/2.));
295 }
296 else {
297 if (mdt->sideA()) {
298 eminMod = mdtPos2.eta();
299 emaxMod = mdtPos1.eta();
300
301 zminMod = mdtPos2.z();
302 zmaxMod = mdtPos1.z();
303
304 rminMod = mdtPos1.perp();
305 rmaxMod = mdtPos2.perp();
306 }
307 else {
308 eminMod = mdtPos1.eta();
309 emaxMod = mdtPos2.eta();
310
311 zminMod = mdtPos1.z();
312 zmaxMod = mdtPos2.z();
313
314 rminMod = mdtPos1.perp();
315 rmaxMod = mdtPos2.perp();
316 }
317
318 dphi = atan2(mdt->tubeLength(Idv[i])/2., (mdtPos.perp()-tubePitch/2.));
319 }
320
321 double pminMod = mdtPos.phi() - dphi;
322 double pmaxMod = mdtPos.phi() + dphi;
323
324 if (zminMod < zmin) {
325 zmin = zminMod;
326 }
327
328 if (zmaxMod > zmax) {
329 zmax = zmaxMod;
330 }
331
332 if (pminMod < phimin) phimin = pminMod;
333 if (pmaxMod > phimax) phimax = pmaxMod;
334 if (eminMod < emin) emin = eminMod;
335 if (emaxMod > emax) emax = emaxMod;
336 if (rminMod < rmin) rmin = rminMod;
337 if (rmaxMod > rmax) rmax = rmaxMod;
338 // std::cout<<" Module emin - emax "<<emin<<" "<<emax<<" phimin - phimax "<<phimin<<" "<<phimax<<std::endl;
339
340 }
341
342 // here define the eta and phi(0-2*pi) ranges
343 if (phimin<0) phimin = phimin + 2*M_PI;
344 if (phimax<0) phimax = phimax + 2*M_PI;
345
346 // calculate 4 sub detectors for the mdt, fore and aft barrel,
347 // and fore and aft endcaps
348
349 if ( mdt1->barrel() ) {
350 if ( mdt1->sideA() ) detid = 1;
351 else if ( mdt1->sideC() ) detid = -1;
352 }
353 else {
354 if ( mdt1->sideA() ) detid = 2;
355 else if ( mdt1->sideC() ) detid = -2;
356 }
357
358
359 // std::cout << "detid " << detid;
360
361 // if ( mdt1->barrel() ) detid = 0;
362 // if ( mdt1->sideA() ) detid = 1;
363 // if ( mdt1->sideC() ) detid = -1;
364
365 // std::cout << " -> " << detid << std::endl;
366
367 uint32_t RobId = cabling->getROBId(Idhash, msgStream());
368
369 RegSelModule m( zmin, zmax, rmin, rmax, phimin, phimax, layerid, detid, RobId, Idhash );
370
371 lut->addModule( m );
372
373 }
374
375
376 lut->initialise();
377
378 return lut;
379
380}
#define M_PI
#define ATH_MSG_ERROR(x)
std::string getString() const
Provide a string form of the identifier - hexadecimal.
SG::ReadCondHandleKey< MdtCondDbData > m_condKey
SG::ReadCondHandleKey< MuonMDT_CablingMap > m_cablingKey
bool isGood(const Identifier &Id) const
Returns if the identifier (tube/multiLayer/chamber) is masked in the conditions database.
Amg::Vector3D tubePos(const Identifier &id) const
Returns the global position of the given tube.
int getNLayers() const
Returns the number of tube layers inside the multilayer.
int getNtubesperlayer() const
Returns the number of tubes in each tube layer.
double tubePitch() const
Returns the distance between 2 tubes in a tube layer.
bool barrel() const
Returns whether the chamber is in the barrel (Assement on first later in stationName).
double tubeLength(const int tubeLayer, const int tube) const
SG::ReadCondHandleKey< MuonGM::MuonDetectorManager > m_detMgrKey
MuonDetectorManager from the conditions store.
Eigen::Matrix< double, 3, 1 > Vector3D
constexpr auto lut(Generator &&f)
setEventNumber uint32_t

◆ 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 MuonRegSelCondAlg::execute ( const EventContext & ctx) const
overridevirtualinherited

do stuff here ...

inpractice, this should never be called, although in serial athena,
because the implementation of the conditions behaviour is flawed in
the framework, this routine will be called every event (!) regardless
of whether it should be called or not so we need this check to
prevent unecessary code execution on out our side

create the new lookup table

create the conditions data for storage

leave this commented here since this is where it should really be, but we had to move it up in the code to handle the flawed conditions handling in the serial athena use case SG::WriteCondHandle<IRegSelLUTCondData> lutCondData( m_tableKey, ctx );

Definition at line 46 of file MuonRegSelCondAlg.cxx.

46 {
47 ATH_MSG_DEBUG("MuonRegSelCondAlg::execute() -- enter -- ");
48
50 ATH_MSG_DEBUG( "Creating region selector table " << m_tableKey );
51
52
53 SG::WriteCondHandle<IRegSelLUTCondData> lutCondData( m_tableKey, ctx );
54 if (lutCondData.isValid()) {
60 ATH_MSG_DEBUG("CondHandle " << lutCondData.fullKey() << " is already valid." );
61 return StatusCode::SUCCESS;
62 }
63
65
66 EventIDRange id_range;
67
68 std::unique_ptr<IRegSelLUT> rd = createTable( ctx, id_range );
69
70 if ( !rd ) return StatusCode::FAILURE;
71
72 ATH_MSG_DEBUG( "Initialising new map " );;
73
74 // write out new new LUT to a file if need be
75
76 if ( m_printTable ) {
77 if (const auto *lut = dynamic_cast<const RegSelSiLUT*>(rd.get())) {
78 lut->write( name()+".map" );
79 }
80 }
81
83
84 IRegSelLUTCondData* rcd = new IRegSelLUTCondData( std::move(rd) );
85
86 try {
91 if( lutCondData.record( id_range, rcd ).isFailure() ) {
92 ATH_MSG_ERROR( "Could not record " << m_tableKey
93 << " " << lutCondData.key()
94 << " with range " << id_range );
95 return StatusCode::FAILURE;
96 }
97 ATH_MSG_INFO( "RegSelCondAlg LUT recorded: " << m_tableKey);
98 }
99 catch (...) {
100 ATH_MSG_ERROR("MuonRegSelCondAlg::execute() failed to record table: " << m_tableKey);
101 return StatusCode::FAILURE;
102 }
103
104
105 ATH_MSG_DEBUG("MuonRegSelCondAlg::execute() -- exit -- ");
106
107 return StatusCode::SUCCESS;
108}
#define ATH_MSG_INFO(x)
RegSelCondData< IRegSelLUT > IRegSelLUTCondData
Gaudi::Property< bool > m_printTable
virtual std::unique_ptr< RegSelSiLUT > createTable(const EventContext &ctx, EventIDRange &id_range) const =0
SG::WriteCondHandleKey< IRegSelLUTCondData > m_tableKey
Output conditions object.

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

88{
89 // If we didn't find any symlinks to add, just return the collection
90 // from the base class. Otherwise, return the extended collection.
91 if (!m_extendedExtraObjects.empty()) {
93 }
95}
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 MDT_RegSelCondAlg::initialize ( )
overridevirtual

Reimplemented from MuonRegSelCondAlg.

Definition at line 38 of file MDT_RegSelCondAlg.cxx.

38 {
40 ATH_CHECK(m_cablingKey.initialize());
41 ATH_CHECK(m_condKey.initialize(!m_condKey.empty()));
42 return StatusCode::SUCCESS;
43}
#define ATH_CHECK
Evaluate an expression and check for errors.
virtual StatusCode initialize() override

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

◆ isClonable()

◆ isReEntrant()

virtual bool AthCondAlgorithm::isReEntrant ( ) const
inlineoverridevirtualinherited

Avoid scheduling algorithm multiple times.

With multiple concurrent events, conditions objects often expire simultaneously for all slots. To avoid that the scheduler runs the CondAlg in each slot, we declare it as "non-reentrant". This ensures that the conditions objects are only created once.

In case a particular CondAlg should behave differently, it can override this method again and return true.

See also
ATEAM-836

Definition at line 39 of file AthCondAlgorithm.h.

39{ return false; }

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

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

75{
76 return BaseAlg::sysExecute (ctx);
77}

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

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

SG::ReadCondHandleKey<MuonMDT_CablingMap> MDT_RegSelCondAlg::m_cablingKey { this, "Cabling", "MuonMDT_CablingMap", "Key of output MDT cabling map" }

Definition at line 28 of file MDT_RegSelCondAlg.h.

29{ this, "Cabling", "MuonMDT_CablingMap", "Key of output MDT cabling map" };

◆ m_condKey

SG::ReadCondHandleKey<MdtCondDbData> MDT_RegSelCondAlg::m_condKey
Initial value:
{this, "Conditions",
"MdtCondDbData", "Key of the MDT conditions to reject dead tubes"}

Definition at line 31 of file MDT_RegSelCondAlg.h.

31 {this, "Conditions",
32 "MdtCondDbData", "Key of the MDT conditions to reject dead tubes"};

◆ m_detMgrKey

SG::ReadCondHandleKey<MuonGM::MuonDetectorManager> MuonRegSelCondAlg::m_detMgrKey
protectedinherited
Initial value:
{
this, "DetectorManagerKey", "MuonDetectorManager",
"Key of input MuonDetectorManager condition data"}

MuonDetectorManager from the conditions store.

Definition at line 45 of file MuonRegSelCondAlg.h.

45 {
46 this, "DetectorManagerKey", "MuonDetectorManager",
47 "Key of input MuonDetectorManager condition 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_mangerName

Gaudi::Property<std::string> MuonRegSelCondAlg::m_mangerName {this, "ManagerName", "", "Property no where used"}
privateinherited

Definition at line 51 of file MuonRegSelCondAlg.h.

51{this, "ManagerName", "", "Property no where used"};

◆ m_printTable

Gaudi::Property<bool> MuonRegSelCondAlg::m_printTable {this, "PrintTable", false}
privateinherited

Definition at line 50 of file MuonRegSelCondAlg.h.

50{this, "PrintTable", false};

◆ m_tableKey

SG::WriteCondHandleKey<IRegSelLUTCondData> MuonRegSelCondAlg::m_tableKey { this, "RegSelLUT", "RegSelLUTCondData", "Region Selector lookup table" }
privateinherited

Output conditions object.

Definition at line 54 of file MuonRegSelCondAlg.h.

55{ this, "RegSelLUT", "RegSelLUTCondData", "Region Selector lookup table" };

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