|
ATLAS Offline Software
|
Go to the documentation of this file.
18 #include "Gaudi/Property.h"
19 #include "GaudiKernel/SystemOfUnits.h"
42 ISvcLocator* pSvcLocator ) :
52 "Input location of particles (to be thinned)" );
56 "Filter to apply on Particles (true == keep element)" );
57 std::vector<bool>
filter( 10,
false );
73 for (
int i = 0;
i < 3;
i++) {
74 std::ostringstream
ss;
75 ss <<
"_test" << (
i+1);
92 return StatusCode::SUCCESS;
98 return StatusCode::SUCCESS;
103 const EventContext& ctx = Gaudi::Hive::currentContext();
107 if ( !
test( ctx, 0,
"test1" ).isSuccess() ) {
112 if ( !
test( ctx, 1,
"test2" ).isSuccess() ) {
117 if ( !
test( ctx, 2,
"test3" ).isSuccess() ) {
122 return allGood ? StatusCode::SUCCESS : StatusCode::FAILURE;
126 int testNum,
const std::string& testName )
128 const std::string&
test = testName;
137 (
"Could not fetch particles at [" << particlesName <<
"] !!");
138 return StatusCode::RECOVERABLE;
147 (
"symlinked containers are corrupted: " <<
endmsg
148 <<
" #iparticles: " << iparticles->
size() <<
endmsg
150 <<
" ipx[0] = " << iparticles->
at(0)->
px() <<
endmsg
151 <<
" px[0] = " <<
particles->at(0)->px());
152 return StatusCode::RECOVERABLE;
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);
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);
179 if (
test ==
"test1" ) {
183 }
else if (
test ==
"test2" ) {
187 }
else if (
test ==
"test3" ) {
193 return StatusCode::FAILURE;
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);
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);
215 return StatusCode::SUCCESS;
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";
230 << std::setw(9) << (*particles)[
i]->px() * igev
234 msg(MSG::INFO) <<
"===================" <<
endmsg;
239 msg(MSG::INFO) <<
"Filter [" << std::boolalpha;
241 std::ostream_iterator<bool>(
msg(MSG::INFO).
stream(),
" ") );
244 msg(MSG::INFO) <<
"... Processing [pre-thinning] ..." <<
endmsg;
246 msg(MSG::INFO) <<
"======== Index table =========" <<
endmsg;
250 for ( std::size_t
i = 0;
i !=
particles->size(); ++
i ) {
251 std::size_t newIdx =
tmp.index(
i );
252 std::stringstream newIdxStr;
269 msg(MSG::INFO) <<
"Filter [" << std::boolalpha;
271 std::ostream_iterator<bool>(
msg(MSG::INFO).
stream(),
" ") );
274 msg(MSG::INFO) <<
"... Processing [thinning] ..." <<
endmsg;
277 msg(MSG::INFO) <<
"======== Index table =========" <<
endmsg;
281 for ( std::size_t
i = 0;
i !=
particles->size(); ++
i ) {
282 std::size_t newIdx =
tmp.index(
i );
283 std::stringstream newIdxStr;
294 return StatusCode::SUCCESS;
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";
309 << std::setw(9) << (*particles)[
i]->px() * igev
313 msg(MSG::INFO) <<
"===================" <<
endmsg;
318 msg(MSG::INFO) <<
"Filter [" << std::boolalpha;
320 std::ostream_iterator<bool>(
msg(MSG::INFO).
stream(),
" ") );
323 msg(MSG::INFO) <<
"... Processing [pre-thinning] ..." <<
endmsg;
325 msg(MSG::INFO) <<
"======== Index table =========" <<
endmsg;
329 for ( std::size_t
i = 0;
i !=
particles->size(); ++
i ) {
330 std::size_t newIdx =
tmp.index(
i );
331 std::stringstream newIdxStr;
348 msg(MSG::INFO) <<
"Filter [" << std::boolalpha;
350 std::ostream_iterator<bool>(
msg(MSG::INFO).
stream(),
" ") );
353 msg(MSG::INFO) <<
"... Processing [thinning] ..." <<
endmsg;
356 msg(MSG::INFO) <<
"======== Index table =========" <<
endmsg;
360 for ( std::size_t
i = 0;
i !=
particles->size(); ++
i ) {
361 std::size_t newIdx =
tmp.index(
i );
362 std::stringstream newIdxStr;
373 return StatusCode::SUCCESS;
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";
389 << std::setw(9) << (*iparticles)[
i]->px() * igev
393 msg(MSG::INFO) <<
"===================" <<
endmsg;
398 msg(MSG::INFO) <<
"Filter [" << std::boolalpha;
400 std::ostream_iterator<bool>(
msg(MSG::INFO).
stream(),
" ") );
403 msg(MSG::INFO) <<
"... Processing [pre-thinning] ..." <<
endmsg;
405 msg(MSG::INFO) <<
"======== Index table =========" <<
endmsg;
409 for ( std::size_t
i = 0;
i != iparticles->size(); ++
i ) {
410 std::size_t newIdx =
tmp.index(
i );
411 std::stringstream newIdxStr;
428 msg(MSG::INFO) <<
"Filter [" << std::boolalpha;
430 std::ostream_iterator<bool>(
msg(MSG::INFO).
stream(),
" ") );
433 msg(MSG::INFO) <<
"... Processing [thinning] ..." <<
endmsg;
436 msg(MSG::INFO) <<
"======== Index table =========" <<
endmsg;
440 for ( std::size_t
i = 0;
i != iparticles->size(); ++
i ) {
441 std::size_t newIdx =
tmp.index(
i );
442 std::stringstream newIdxStr;
453 return StatusCode::SUCCESS;
def retrieve(aClass, aKey=None)
SG::ThinningHandleKey< AthExParticles > m_particlesKey1
Handle for requesting thinning for a data object.
Hold thinning decisions for one container.
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
WriteThinnedData()
Default constructor:
StringProperty m_elephantinoName
Elephantino input location.
StatusCode doThinningTest3(const EventContext &ctx, const SG::ThinningHandleKey< AthExIParticles > &iparticlesKey) const
Apply the real thinning.
virtual ~WriteThinnedData()
Destructor:
virtual double px() const
Implementation of the AthExIParticle interface.
const AthExIParticle * leg4() const
SG::ThinningHandleKey< AthExIParticles > m_iparticlesKey3
Handle for requesting thinning for a data object.
StatusCode initialize(const std::string &stream, const std::string &qualifier, bool used=true)
Should be called during the initialize phase.
virtual StatusCode execute() override
const AthExIParticle * ear2() const
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
void keep(size_t ndx)
Mark that index ndx in the container should be kept (not thinned away).
virtual StatusCode initialize() override
const AthExIParticle * ear1() const
const AthExIParticle * leg2() const
::StatusCode StatusCode
StatusCode definition for legacy code.
Hold thinning decisions for one container.
const ThinningDecision & decision() const
Return the thinning object we're building.
const AthExParticle * l1() const
static const std::size_t RemovedIdx
Flag used to show that an index has been thinned away.
StatusCode doThinningTest1(const EventContext &ctx, const SG::ThinningHandleKey< AthExParticles > &particlesKey) const
Apply the real thinning.
bool allGood
Loop over the SDOs & Digits.
void fill(H5::Group &out_file, size_t iterations)
SG::ReadHandleKeyArray< AthExDecay > m_decayKeys
SG::ReadHandleKeyArray< AthExIParticles > m_iparticlesKeys
SG::ThinningHandleKey< AthExParticles > m_particlesKey2
StringProperty m_particlesName
Particles input location.
An STL vector of pointers that by default owns its pointed-to elements.
virtual double px() const =0
AthExIParticle interface.
#define ATH_MSG_WARNING(x)
BooleanArrayProperty m_filter
Filter to apply on the Particles.
const AthExParticle * p2() const
const AthExIParticle * leg1() const
SG::ReadHandleKeyArray< AthExElephantino > m_elephantinoKeys
const AthExParticle * p1() const
const T * at(size_type n) const
Access an element, as an rvalue.
StatusCode doThinningTest2(const EventContext &ctx, const SG::ThinningHandleKey< AthExParticles > &particlesKey) const
Apply the real thinning.
StatusCode test(const EventContext &ctx, int testNum, const std::string &testName)
Exercise the following thinning tests: [testName = "test1"] retrieve a AthExParticles container remov...
Handle class for reading from StoreGate.
const AthExIParticle * leg3() const
virtual StatusCode finalize() override
StringProperty m_decayName
Decay input location.
size_type size() const noexcept
Returns the number of elements in the collection.
const AthExParticle * l2() const