ATLAS Offline Software
Loading...
Searching...
No Matches
AthExThinning::WriteThinnedData Class Reference

#include <WriteThinnedData.h>

Inheritance diagram for AthExThinning::WriteThinnedData:
Collaboration diagram for AthExThinning::WriteThinnedData:

Public Member Functions

 WriteThinnedData (const std::string &name, ISvcLocator *pSvcLocator)
 Constructor with parameters:
virtual ~WriteThinnedData ()
 Destructor:
virtual StatusCode initialize () override
virtual StatusCode execute () override
virtual StatusCode finalize () override
virtual StatusCode sysInitialize () override
 Override sysInitialize.
virtual const DataObjIDColl & extraOutputDeps () const override
 Return the list of extra output dependencies.
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

 WriteThinnedData ()
 Default constructor:
StatusCode test (const EventContext &ctx, int testNum, const std::string &testName)
 Exercise the following thinning tests: [testName = "test1"] retrieve a AthExParticles container remove some of the AthExParticle using an 'AND' filter [testName = "test2"] retrieve a AthExParticles container remove some of the AthExParticle using an 'OR' filter [testName = "test3"] retrieve a AthExIParticles container remove some of the AthExIParticle using an 'AND' filter.
StatusCode doThinningTest1 (const EventContext &ctx, const SG::ThinningHandleKey< AthExParticles > &particlesKey) const
 Apply the real thinning.
StatusCode doThinningTest2 (const EventContext &ctx, const SG::ThinningHandleKey< AthExParticles > &particlesKey) const
 Apply the real thinning.
StatusCode doThinningTest3 (const EventContext &ctx, const SG::ThinningHandleKey< AthExIParticles > &iparticlesKey) const
 Apply the real thinning.
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

StringProperty m_particlesName
 Particles input location.
SG::ThinningHandleKey< AthExParticlesm_particlesKey1 { this, "ParticlesKey1", "", "" }
SG::ThinningHandleKey< AthExParticlesm_particlesKey2 { this, "ParticlesKey2", "", "" }
SG::ReadHandleKeyArray< AthExIParticlesm_iparticlesKeys { this, "IParticlesKeys", {}, "" }
SG::ThinningHandleKey< AthExIParticlesm_iparticlesKey3 { this, "IParticlesKey3", "", "" }
StringProperty m_decayName { this, "Decay", "TwoBodyDecay", "Input location of Decay" }
 Decay input location.
SG::ReadHandleKeyArray< AthExDecaym_decayKeys { this, "DecayKeys", {}, "" }
StringProperty m_elephantinoName { this, "Elephantino", "PinkElephantino", "Input location of Elephantino" }
 Elephantino input location.
SG::ReadHandleKeyArray< AthExElephantinom_elephantinoKeys { this, "ElephantinoKeys", {}, "" }
BooleanArrayProperty m_filter
 Filter to apply on the Particles.

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

DataObjIDColl m_extendedExtraObjects
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 58 of file WriteThinnedData.h.

Member Typedef Documentation

◆ StoreGateSvc_t

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

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ WriteThinnedData() [1/2]

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

Constructor with parameters:

Definition at line 41 of file WriteThinnedData.cxx.

42 :
43 ::AthAlgorithm( name, pSvcLocator )
44{
45 //
46 // Property declaration
47 //
48 //declareProperty( "Property", m_nProperty );
49
50 declareProperty( "Particles",
51 m_particlesName = "Particles",
52 "Input location of particles (to be thinned)" );
53
54 declareProperty( "Filter",
55 m_filter,
56 "Filter to apply on Particles (true == keep element)" );
57 std::vector<bool> filter( 10, false );
58 m_filter.set( filter );
59
60}
AthAlgorithm()
Default constructor:
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
StringProperty m_particlesName
Particles input location.
BooleanArrayProperty m_filter
Filter to apply on the Particles.

◆ ~WriteThinnedData()

WriteThinnedData::~WriteThinnedData ( )
virtual

Destructor:

Definition at line 64 of file WriteThinnedData.cxx.

65{}

◆ WriteThinnedData() [2/2]

AthExThinning::WriteThinnedData::WriteThinnedData ( )
protected

Default constructor:

Member Function Documentation

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< 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 }

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< 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< Algorithm > >::detStore ( ) const
inlineinherited

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

Definition at line 95 of file AthCommonDataStore.h.

◆ doThinningTest1()

StatusCode WriteThinnedData::doThinningTest1 ( const EventContext & ctx,
const SG::ThinningHandleKey< AthExParticles > & particlesKey ) const
protected

Apply the real thinning.

Definition at line 219 of file WriteThinnedData.cxx.

221{
222 SG::ThinningHandle<AthExParticles> particles (particlesKey, ctx);
223 std::vector<bool> filter = m_filter.value();
224
225 const double igev = 1. / Gaudi::Units::GeV;
226 msg(MSG::INFO) << "Particles | filter :" << endmsg;
227 for ( unsigned int i = 0; i != particles->size(); ++i ) {
228 const std::string kr = filter[i] ? "keep" : "remove";
229 msg(MSG::INFO)
230 << std::setw(9) << (*particles)[i]->px() * igev
231 << " | " << kr
232 << endmsg;
233 }
234 msg(MSG::INFO) << "===================" << endmsg;
235
236 std::fill( filter.begin() + (filter.size() / 2),
237 filter.end(),
238 true );
239 msg(MSG::INFO) << "Filter [" << std::boolalpha;
240 std::copy( filter.begin(), filter.end(),
241 std::ostream_iterator<bool>(msg(MSG::INFO).stream(), " ") );
242 msg(MSG::INFO) << "]" << endmsg;
243
244 msg(MSG::INFO) << "... Processing [pre-thinning] ..." << endmsg;
245 particles.keep (filter);
246 msg(MSG::INFO) << "======== Index table =========" << endmsg;
247 {
248 SG::ThinningDecisionBase tmp = particles.decision();
249 tmp.buildIndexMap();
250 for ( std::size_t i = 0; i != particles->size(); ++i ) {
251 std::size_t newIdx = tmp.index( i );
252 std::stringstream newIdxStr;
253 newIdxStr << newIdx;
254 msg(MSG::INFO)
255 << " idx " << i
256 << " -> " << (newIdx == SG::ThinningDecision::RemovedIdx
257 ? "-"
258 : newIdxStr.str() )
259 << endmsg;
260 }
261 }
262
263
264 filter = m_filter.value();
265 std::fill( filter.begin(),
266 filter.begin() + (filter.size() / 2),
267 true );
268
269 msg(MSG::INFO) << "Filter [" << std::boolalpha;
270 std::copy( filter.begin(), filter.end(),
271 std::ostream_iterator<bool>(msg(MSG::INFO).stream(), " ") );
272 msg(MSG::INFO) << "]" << endmsg;
273
274 msg(MSG::INFO) << "... Processing [thinning] ..." << endmsg;
276
277 msg(MSG::INFO) << "======== Index table =========" << endmsg;
278 {
279 SG::ThinningDecisionBase tmp = particles.decision();
280 tmp.buildIndexMap();
281 for ( std::size_t i = 0; i != particles->size(); ++i ) {
282 std::size_t newIdx = tmp.index( i );
283 std::stringstream newIdxStr;
284 newIdxStr << newIdx;
285 msg(MSG::INFO)
286 << " idx " << i
287 << " -> " << (newIdx == SG::ThinningDecision::RemovedIdx
288 ? "-"
289 : newIdxStr.str() )
290 << endmsg;
291 }
292 }
293
294 return StatusCode::SUCCESS;
295}
#define endmsg
MsgStream & msg() const
static const std::size_t RemovedIdx
Flag used to show that an index has been thinned away.

◆ doThinningTest2()

StatusCode WriteThinnedData::doThinningTest2 ( const EventContext & ctx,
const SG::ThinningHandleKey< AthExParticles > & particlesKey ) const
protected

Apply the real thinning.

Definition at line 298 of file WriteThinnedData.cxx.

300{
301 SG::ThinningHandle<AthExParticles> particles (particlesKey, ctx);
302 std::vector<bool> filter = m_filter.value();
303
304 const double igev = 1. / Gaudi::Units::GeV;
305 msg(MSG::INFO) << "Particles | filter :" << endmsg;
306 for ( unsigned int i = 0; i != particles->size(); ++i ) {
307 const std::string kr = filter[i] ? "keep" : "remove";
308 msg(MSG::INFO)
309 << std::setw(9) << (*particles)[i]->px() * igev
310 << " | " << kr
311 << endmsg;
312 }
313 msg(MSG::INFO) << "===================" << endmsg;
314
315 std::fill( filter.begin() + (filter.size() / 2),
316 filter.end(),
317 false );
318 msg(MSG::INFO) << "Filter [" << std::boolalpha;
319 std::copy( filter.begin(), filter.end(),
320 std::ostream_iterator<bool>(msg(MSG::INFO).stream(), " ") );
321 msg(MSG::INFO) << "]" << endmsg;
322
323 msg(MSG::INFO) << "... Processing [pre-thinning] ..." << endmsg;
324 particles.keep (filter);
325 msg(MSG::INFO) << "======== Index table =========" << endmsg;
326 {
327 SG::ThinningDecisionBase tmp = particles.decision();
328 tmp.buildIndexMap();
329 for ( std::size_t i = 0; i != particles->size(); ++i ) {
330 std::size_t newIdx = tmp.index( i );
331 std::stringstream newIdxStr;
332 newIdxStr << newIdx;
333 msg(MSG::INFO)
334 << " idx " << i
335 << " -> " << (newIdx == SG::ThinningDecision::RemovedIdx
336 ? "-"
337 : newIdxStr.str() )
338 << endmsg;
339 }
340 }
341
342
343 filter = m_filter.value();
344 std::fill( filter.begin(),
345 filter.begin() + (filter.size() / 2),
346 false );
347
348 msg(MSG::INFO) << "Filter [" << std::boolalpha;
349 std::copy( filter.begin(), filter.end(),
350 std::ostream_iterator<bool>(msg(MSG::INFO).stream(), " ") );
351 msg(MSG::INFO) << "]" << endmsg;
352
353 msg(MSG::INFO) << "... Processing [thinning] ..." << endmsg;
355
356 msg(MSG::INFO) << "======== Index table =========" << endmsg;
357 {
358 SG::ThinningDecisionBase tmp = particles.decision();
359 tmp.buildIndexMap();
360 for ( std::size_t i = 0; i != particles->size(); ++i ) {
361 std::size_t newIdx = tmp.index( i );
362 std::stringstream newIdxStr;
363 newIdxStr << newIdx;
364 msg(MSG::INFO)
365 << " idx " << i
366 << " -> " << (newIdx == SG::ThinningDecision::RemovedIdx
367 ? "-"
368 : newIdxStr.str() )
369 << endmsg;
370 }
371 }
372
373 return StatusCode::SUCCESS;
374}

◆ doThinningTest3()

StatusCode WriteThinnedData::doThinningTest3 ( const EventContext & ctx,
const SG::ThinningHandleKey< AthExIParticles > & iparticlesKey ) const
protected

Apply the real thinning.

Definition at line 378 of file WriteThinnedData.cxx.

380{
381 SG::ThinningHandle<AthExIParticles> iparticles (iparticlesKey, ctx);
382 std::vector<bool> filter = m_filter.value();
383
384 const double igev = 1. / Gaudi::Units::GeV;
385 msg(MSG::INFO) << "IParticles | filter :" << endmsg;
386 for ( unsigned int i = 0; i != iparticles->size(); ++i ) {
387 const std::string kr = filter[i] ? "keep" : "remove";
388 msg(MSG::INFO)
389 << std::setw(9) << (*iparticles)[i]->px() * igev
390 << " | " << kr
391 << endmsg;
392 }
393 msg(MSG::INFO) << "===================" << endmsg;
394
395 std::fill( filter.begin() + (filter.size() / 2),
396 filter.end(),
397 true );
398 msg(MSG::INFO) << "Filter [" << std::boolalpha;
399 std::copy( filter.begin(), filter.end(),
400 std::ostream_iterator<bool>(msg(MSG::INFO).stream(), " ") );
401 msg(MSG::INFO) << "]" << endmsg;
402
403 msg(MSG::INFO) << "... Processing [pre-thinning] ..." << endmsg;
404 iparticles.keep (filter);
405 msg(MSG::INFO) << "======== Index table =========" << endmsg;
406 {
407 SG::ThinningDecisionBase tmp = iparticles.decision();
408 tmp.buildIndexMap();
409 for ( std::size_t i = 0; i != iparticles->size(); ++i ) {
410 std::size_t newIdx = tmp.index( i );
411 std::stringstream newIdxStr;
412 newIdxStr << newIdx;
413 msg(MSG::INFO)
414 << " idx " << i
415 << " -> " << (newIdx == SG::ThinningDecision::RemovedIdx
416 ? "-"
417 : newIdxStr.str() )
418 << endmsg;
419 }
420 }
421
422
423 filter = m_filter.value();
424 std::fill( filter.begin(),
425 filter.begin() + (filter.size() / 2),
426 true );
427
428 msg(MSG::INFO) << "Filter [" << std::boolalpha;
429 std::copy( filter.begin(), filter.end(),
430 std::ostream_iterator<bool>(msg(MSG::INFO).stream(), " ") );
431 msg(MSG::INFO) << "]" << endmsg;
432
433 msg(MSG::INFO) << "... Processing [thinning] ..." << endmsg;
434 iparticles.keep (filter, SG::ThinningDecisionBase::Op::And);
435
436 msg(MSG::INFO) << "======== Index table =========" << endmsg;
437 {
438 SG::ThinningDecisionBase tmp = iparticles.decision();
439 tmp.buildIndexMap();
440 for ( std::size_t i = 0; i != iparticles->size(); ++i ) {
441 std::size_t newIdx = tmp.index( i );
442 std::stringstream newIdxStr;
443 newIdxStr << newIdx;
444 msg(MSG::INFO)
445 << " idx " << i
446 << " -> " << (newIdx == SG::ThinningDecision::RemovedIdx
447 ? "-"
448 : newIdxStr.str() )
449 << endmsg;
450 }
451 }
452
453 return StatusCode::SUCCESS;
454}

◆ evtStore()

ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< 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 WriteThinnedData::execute ( )
overridevirtual

Definition at line 101 of file WriteThinnedData.cxx.

102{
103 const EventContext& ctx = Gaudi::Hive::currentContext();
104 ATH_MSG_DEBUG("Executing " << name() << "...");
105
106 bool allGood = true;
107 if ( !test( ctx, 0, "test1" ).isSuccess() ) {
108 ATH_MSG_WARNING("Could not perform 'thinning test1' !!");
109 allGood = false;
110 }
111
112 if ( !test( ctx, 1, "test2" ).isSuccess() ) {
113 ATH_MSG_WARNING("Could not perform 'thinning test2' !!");
114 allGood = false;
115 }
116
117 if ( !test( ctx, 2, "test3" ).isSuccess() ) {
118 ATH_MSG_WARNING("Could not perform 'thinning test3' !!");
119 allGood = false;
120 }
121
122 return allGood ? StatusCode::SUCCESS : StatusCode::FAILURE;
123}
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
StatusCode test(const EventContext &ctx, int testNum, const std::string &testName)
Exercise the following thinning tests: [testName = "test1"] retrieve a AthExParticles container remov...
bool allGood
Loop over the SDOs & Digits.

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< 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 & AthAlgorithm::extraOutputDeps ( ) const
overridevirtualinherited

Return the list of extra output dependencies.

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

Definition at line 50 of file AthAlgorithm.cxx.

51{
52 // If we didn't find any symlinks to add, just return the collection
53 // from the base class. Otherwise, return the extended collection.
54 if (!m_extendedExtraObjects.empty()) {
56 }
57 return Algorithm::extraOutputDeps();
58}
DataObjIDColl m_extendedExtraObjects

◆ finalize()

StatusCode WriteThinnedData::finalize ( )
overridevirtual

Definition at line 95 of file WriteThinnedData.cxx.

96{
97 ATH_MSG_INFO("Finalizing " << name() << "...");
98 return StatusCode::SUCCESS;
99}
#define ATH_MSG_INFO(x)

◆ initialize()

StatusCode WriteThinnedData::initialize ( )
overridevirtual

Definition at line 69 of file WriteThinnedData.cxx.

70{
71 ATH_MSG_INFO("Initializing " << name() << "...");
72
73 for (int i = 0; i < 3; i++) {
74 std::ostringstream ss;
75 ss << "_test" << (i+1);
76 m_elephantinoKeys.emplace_back (m_elephantinoName.value() + ss.str());
77 m_decayKeys.emplace_back (m_decayName.value() + ss.str());
78 m_iparticlesKeys.emplace_back (m_particlesName.value() + ss.str());
79 }
80 ATH_CHECK( m_elephantinoKeys.initialize() );
81 ATH_CHECK( m_decayKeys.initialize() );
82 ATH_CHECK( m_iparticlesKeys.initialize() );
83
84 m_particlesKey1 = m_particlesName.value() + "_test1";
85 m_particlesKey2 = m_particlesName.value() + "_test2";
86 ATH_CHECK( m_particlesKey1.initialize ("StreamUSR_0") );
87 ATH_CHECK( m_particlesKey2.initialize ("StreamUSR_0") );
88
89 m_iparticlesKey3 = m_particlesName.value() + "_test3";
90 ATH_CHECK( m_iparticlesKey3.initialize ("StreamUSR_0") );
91
92 return StatusCode::SUCCESS;
93}
#define ATH_CHECK
Evaluate an expression and check for errors.
static Double_t ss
StringProperty m_elephantinoName
Elephantino input location.
SG::ReadHandleKeyArray< AthExElephantino > m_elephantinoKeys
SG::ThinningHandleKey< AthExParticles > m_particlesKey1
StringProperty m_decayName
Decay input location.
SG::ThinningHandleKey< AthExParticles > m_particlesKey2
SG::ReadHandleKeyArray< AthExIParticles > m_iparticlesKeys
SG::ReadHandleKeyArray< AthExDecay > m_decayKeys
SG::ThinningHandleKey< AthExIParticles > m_iparticlesKey3

◆ inputHandles()

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

◆ msg()

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

Definition at line 24 of file AthCommonMsg.h.

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

◆ msgLvl()

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

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ sysInitialize()

StatusCode AthAlgorithm::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< Algorithm > >.

Reimplemented in AthAnalysisAlgorithm, AthFilterAlgorithm, AthHistogramAlgorithm, and PyAthena::Alg.

Definition at line 66 of file AthAlgorithm.cxx.

66 {
68
69 if (sc.isFailure()) {
70 return sc;
71 }
72 ServiceHandle<ICondSvc> cs("CondSvc",name());
73 for (auto h : outputHandles()) {
74 if (h->isCondition() && h->mode() == Gaudi::DataHandle::Writer) {
75 // do this inside the loop so we don't create the CondSvc until needed
76 if ( cs.retrieve().isFailure() ) {
77 ATH_MSG_WARNING("no CondSvc found: won't autoreg WriteCondHandles");
78 return StatusCode::SUCCESS;
79 }
80 if (cs->regHandle(this,*h).isFailure()) {
81 sc = StatusCode::FAILURE;
82 ATH_MSG_ERROR("unable to register WriteCondHandle " << h->fullKey()
83 << " with CondSvc");
84 }
85 }
86 }
87 return sc;
88}
#define ATH_MSG_ERROR(x)
static Double_t sc
virtual StatusCode sysInitialize() override
Override sysInitialize.
AthCommonDataStore(const std::string &name, T... args)
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override
::StatusCode StatusCode
StatusCode definition for legacy code.

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< 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.

◆ test()

StatusCode WriteThinnedData::test ( const EventContext & ctx,
int testNum,
const std::string & testName )
protected

Exercise the following thinning tests: [testName = "test1"] retrieve a AthExParticles container remove some of the AthExParticle using an 'AND' filter [testName = "test2"] retrieve a AthExParticles container remove some of the AthExParticle using an 'OR' filter [testName = "test3"] retrieve a AthExIParticles container remove some of the AthExIParticle using an 'AND' filter.

thinning

Definition at line 125 of file WriteThinnedData.cxx.

127{
128 const std::string& test = testName;
129 ATH_MSG_INFO("Performing thinning test [" << test << "]...");
130
131 // fetch Particles
132 const std::string particlesName = m_particlesName.value() + "_" + test;
133 const AthExParticles * particles = 0;
134 if ( !evtStore()->retrieve(particles, particlesName).isSuccess() ||
135 0 == particles ) {
137 ("Could not fetch particles at [" << particlesName << "] !!");
138 return StatusCode::RECOVERABLE;
139 }
140
141 // fetch IParticles
142 SG::ReadHandle<AthExIParticles> iparticles (m_iparticlesKeys[testNum], ctx);
143
144 if ( iparticles->size() != particles->size() ||
145 iparticles->at(0)->px() != particles->at(0)->px() ) {
147 ("symlinked containers are corrupted: " << endmsg
148 << " #iparticles: " << iparticles->size() << endmsg
149 << " # particles: " << particles->size() << endmsg
150 << " ipx[0] = " << iparticles->at(0)->px() << endmsg
151 << " px[0] = " << particles->at(0)->px());
152 return StatusCode::RECOVERABLE;
153 }
154
155 // fetch Decay
156 SG::ReadHandle<AthExDecay> decay (m_decayKeys[testNum], ctx);
157
158 // fetch Elephantino
159 SG::ReadHandle<AthExElephantino> elephantino (m_elephantinoKeys[testNum], ctx);
160
161 const double igev = 1. / Gaudi::Units::GeV;
162 ATH_MSG_INFO("IN particles: " << particles->size() << endmsg
163 << "IN decay: " << endmsg
164 << " p1: px= " << decay->p1()->px() * igev << endmsg
165 << " p2: px= " << decay->p2()->px() * igev << endmsg
166 << " l1: px= " << decay->l1()->px() * igev << endmsg
167 << " l2: px= " << decay->l2()->px() * igev);
168
169 ATH_MSG_INFO("IN elephantino: " << endmsg
170 << " leg1: px= " << elephantino->leg1()->px() * igev << endmsg
171 << " leg2: px= " << elephantino->leg2()->px() * igev << endmsg
172 << " leg3: px= " << elephantino->leg3()->px() * igev << endmsg
173 << " leg4: px= " << elephantino->leg4()->px() * igev << endmsg
174 << " ear1: px= " << elephantino->ear1()->px() * igev << endmsg
175 << " ear2: px= " << elephantino->ear2()->px() * igev);
176
179 if ( test == "test1" ) {
180 if ( !doThinningTest1(ctx, m_particlesKey1).isSuccess() ) {
181 ATH_MSG_WARNING("Could not exercise Thinning !!");
182 }
183 } else if ( test == "test2" ) {
184 if ( !doThinningTest2(ctx, m_particlesKey2).isSuccess() ) {
185 ATH_MSG_WARNING("Could not exercise Thinning !!");
186 }
187 } else if ( test == "test3" ) {
188 if ( !doThinningTest3(ctx, m_iparticlesKey3).isSuccess() ) {
189 ATH_MSG_WARNING("Could not exercise Thinning !!");
190 }
191 } else {
192 ATH_MSG_ERROR("Unknown test: [" << test << "]");
193 return StatusCode::FAILURE;
194 }
196
198 ("Decay is now: " << endmsg
199 << " p1: px= " << decay->p1()->px() * igev << endmsg
200 << " p2: px= " << decay->p2()->px() * igev << endmsg
201 << " l1: px= " << decay->l1()->px() * igev << endmsg
202 << " l2: px= " << decay->l2()->px() * igev);
203
205 ("Elephantino is now: " << endmsg
206 << " leg1: px= " << elephantino->leg1()->px() * igev << endmsg
207 << " leg2: px= " << elephantino->leg2()->px() * igev << endmsg
208 << " leg3: px= " << elephantino->leg3()->px() * igev << endmsg
209 << " leg4: px= " << elephantino->leg4()->px() * igev << endmsg
210 << " ear1: px= " << elephantino->ear1()->px() * igev << endmsg
211 << " ear2: px= " << elephantino->ear2()->px() * igev);
212
213
214 ATH_MSG_INFO("[" << test << "] has been performed.");
215 return StatusCode::SUCCESS;
216}
Athena::TPCnvVers::Current AthExParticles
StatusCode doThinningTest2(const EventContext &ctx, const SG::ThinningHandleKey< AthExParticles > &particlesKey) const
Apply the real thinning.
StatusCode doThinningTest3(const EventContext &ctx, const SG::ThinningHandleKey< AthExIParticles > &iparticlesKey) const
Apply the real thinning.
StatusCode doThinningTest1(const EventContext &ctx, const SG::ThinningHandleKey< AthExParticles > &particlesKey) const
Apply the real thinning.
retrieve(aClass, aKey=None)
Definition PyKernel.py:110

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< 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 }
std::vector< SG::VarHandleKeyArray * > m_vhka

Member Data Documentation

◆ m_decayKeys

SG::ReadHandleKeyArray<AthExDecay> AthExThinning::WriteThinnedData::m_decayKeys { this, "DecayKeys", {}, "" }
protected

Definition at line 128 of file WriteThinnedData.h.

129{ this, "DecayKeys", {}, "" };

◆ m_decayName

StringProperty AthExThinning::WriteThinnedData::m_decayName { this, "Decay", "TwoBodyDecay", "Input location of Decay" }
protected

Decay input location.

Definition at line 125 of file WriteThinnedData.h.

126{ this, "Decay", "TwoBodyDecay", "Input location of Decay" };

◆ m_detStore

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

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_elephantinoKeys

SG::ReadHandleKeyArray<AthExElephantino> AthExThinning::WriteThinnedData::m_elephantinoKeys { this, "ElephantinoKeys", {}, "" }
protected

Definition at line 135 of file WriteThinnedData.h.

136{ this, "ElephantinoKeys", {}, "" };

◆ m_elephantinoName

StringProperty AthExThinning::WriteThinnedData::m_elephantinoName { this, "Elephantino", "PinkElephantino", "Input location of Elephantino" }
protected

Elephantino input location.

Definition at line 132 of file WriteThinnedData.h.

133{ this, "Elephantino", "PinkElephantino", "Input location of Elephantino" };

◆ m_evtStore

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

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_extendedExtraObjects

DataObjIDColl AthAlgorithm::m_extendedExtraObjects
privateinherited

Definition at line 79 of file AthAlgorithm.h.

◆ m_filter

BooleanArrayProperty AthExThinning::WriteThinnedData::m_filter
protected

Filter to apply on the Particles.

For each element of the filter being true the corresponding particle will be kept.

Definition at line 140 of file WriteThinnedData.h.

◆ m_iparticlesKey3

SG::ThinningHandleKey<AthExIParticles> AthExThinning::WriteThinnedData::m_iparticlesKey3 { this, "IParticlesKey3", "", "" }
protected

Definition at line 121 of file WriteThinnedData.h.

122{ this, "IParticlesKey3", "", "" };

◆ m_iparticlesKeys

SG::ReadHandleKeyArray<AthExIParticles> AthExThinning::WriteThinnedData::m_iparticlesKeys { this, "IParticlesKeys", {}, "" }
protected

Definition at line 118 of file WriteThinnedData.h.

119{ this, "IParticlesKeys", {}, "" };

◆ m_particlesKey1

SG::ThinningHandleKey<AthExParticles> AthExThinning::WriteThinnedData::m_particlesKey1 { this, "ParticlesKey1", "", "" }
protected

Definition at line 113 of file WriteThinnedData.h.

114{ this, "ParticlesKey1", "", "" };

◆ m_particlesKey2

SG::ThinningHandleKey<AthExParticles> AthExThinning::WriteThinnedData::m_particlesKey2 { this, "ParticlesKey2", "", "" }
protected

Definition at line 115 of file WriteThinnedData.h.

116{ this, "ParticlesKey2", "", "" };

◆ m_particlesName

StringProperty AthExThinning::WriteThinnedData::m_particlesName
protected

Particles input location.

Definition at line 111 of file WriteThinnedData.h.

◆ m_varHandleArraysDeclared

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

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

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

Definition at line 398 of file AthCommonDataStore.h.


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