ATLAS Offline Software
CreateData.cxx
Go to the documentation of this file.
1 
3 /*
4  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
5 */
6 
7 // CreateData.cxx
8 // Implementation file for class CreateData
9 // Author: S.Binet<binet@cern.ch>
11 
12 
13 // STL includes
14 
15 // FrameWork includes
16 #include "Gaudi/Property.h"
17 #include "GaudiKernel/SystemOfUnits.h"
18 
19 // StoreGate
20 #include "StoreGate/StoreGateSvc.h"
21 
22 // DataModel includes
24 #include "AthLinks/ElementLinkVector.h"
25 
26 // AthExThinning includes
32 
34 // Public methods:
36 
37 using namespace AthExThinning;
38 
39 // Constructors
41 CreateData::CreateData( const std::string& name,
42  ISvcLocator* pSvcLocator ) :
43  AthAlgorithm( name, pSvcLocator )
44 {
45  //
46  // Property declaration
47  //
48  //declareProperty( "Property", m_nProperty );
49 
50  declareProperty( "ParticlesOutput",
51  m_particlesOutputName = "Particles",
52  "Output location of the particles" );
53 
54  declareProperty( "NbrOfParticles",
55  m_nbrParticles = 10,
56  "Number of particles to create" );
57 
58  declareProperty( "DecayOutput",
59  m_decayOutputName = "TwoBodyDecay",
60  "Output location of a 2-body decay" );
61 
62  declareProperty( "ElephantinoOutput",
63  m_elephantinoOutputName = "PinkElephantino",
64  "Output location of an Elephantino with 4 legs" );
65 
66  declareProperty( "TestNames",
68  "list of test-names to create data for "
69  "(default: test1,test2,test3)" );
70  m_testNames = std::vector<std::string>(3);
71  m_testNames[0] = "test1";
72  m_testNames[1] = "test2";
73  m_testNames[2] = "test3";
74 }
75 
76 // Destructor
79 {}
80 
81 // Athena Algorithm's Hooks
84 {
85  ATH_MSG_INFO ("Initializing " << name() << "...");
86  return StatusCode::SUCCESS;
87 }
88 
90 {
91  ATH_MSG_INFO ("Finalizing " << name() << "...");
92  return StatusCode::SUCCESS;
93 }
94 
96 {
97  ATH_MSG_DEBUG ("Executing " << name() << "...");
98 
99  for ( std::vector<std::string>::const_iterator
100  itr = m_testNames.begin(),
101  iEnd = m_testNames.end();
102  itr != iEnd;
103  ++itr ) {
104  ATH_MSG_INFO("Generating data for [" << *itr << "]...");
105  if ( !makeData(*itr).isSuccess() ) {
106  ATH_MSG_ERROR ("Could not generate data for [" << *itr << "] !!");
107  return StatusCode::FAILURE;
108  }
109  }
110 
111  return StatusCode::SUCCESS;
112 }
113 
114 StatusCode CreateData::makeData( const std::string& test )
115 {
116  const std::string testName = "_"+test;
117  const std::string particlesOutputName = m_particlesOutputName.value()
118  + testName;
119  // create particles
121  if ( !evtStore()->record(particles, particlesOutputName).isSuccess() ) {
122  ATH_MSG_ERROR("Could not store particles at ["
123  << particlesOutputName << "]");
124  delete particles;
125  particles = 0;
126  return StatusCode::RECOVERABLE;
127  }
128  if ( !evtStore()->setConst(particles).isSuccess() ) {
129  ATH_MSG_WARNING("Could not setConst particles at ["
130  << particlesOutputName << "]");
131  }
132 
133  for ( unsigned int i = 0; i != m_nbrParticles.value(); ++i ) {
134  AthExParticle * p = new AthExParticle( (i+1) * 10. * Gaudi::Units::GeV,
135  (i+1) * 10. * Gaudi::Units::GeV,
136  (i+1) * 10. * Gaudi::Units::GeV,
137  (i+2) * 10. * Gaudi::Units::GeV );
138  particles->push_back(p);
139  }
140 
141  ATH_MSG_DEBUG ("particles: " << particles->size()
142  << " [" << particles << "]");
143 
144  const std::string decayOutputName = m_decayOutputName.value() + testName;
145  // create a dumb object from 2 particles
146  AthExDecay * dcy = new AthExDecay;
147  if ( !evtStore()->record(dcy, decayOutputName).isSuccess() ) {
148  ATH_MSG_ERROR("Could not store Decay at [" << decayOutputName << "] !!");
149  delete dcy;
150  dcy = 0;
151  return StatusCode::RECOVERABLE;
152  }
153  if ( !evtStore()->setConst(dcy).isSuccess() ) {
154  ATH_MSG_WARNING("Could not setConst Decay at [" << decayOutputName << "]");
155  }
156 
157  if ( particles->size() < 5 ) {
158  ATH_MSG_WARNING("Not enough particles to make a Decay !!");
159  return StatusCode::RECOVERABLE;
160  }
161 
162  // we need to test all the possible states of ElementLinks
163  // -> created from an index
164  const ElementLink<AthExParticles> p1( *particles, 0 );
165  // -> created from a pointer
166  const ElementLink<AthExParticles> p2( (*particles)[4], *particles );
167 
168  // -> created from an index
170  // -> created from a pointer
172 
173  dcy->setDecay( p1, p2, l1, l2 );
174 
175  const double igev = 1. / Gaudi::Units::GeV;
177  ("Created a Decay from :" << endmsg
178  << " p1: px= " << dcy->p1()->px() * igev << endmsg
179  << " p2: px= " << dcy->p2()->px() * igev << endmsg
180  << " l1: px= " << dcy->l1()->px() * igev << endmsg
181  << " l2: px= " << dcy->l2()->px() * igev
182  );
183 
184  // create the elephantino
185  const std::string elephantinoOutputName = m_elephantinoOutputName.value()
186  + testName;
187  AthExElephantino * eleph = new AthExElephantino;
188  if ( !evtStore()->record(eleph, elephantinoOutputName).isSuccess() ) {
189  ATH_MSG_ERROR("Could not store Elephantino at ["
190  << elephantinoOutputName << "] !!");
191  delete eleph;
192  eleph = 0;
193  return StatusCode::RECOVERABLE;
194  }
195  if ( !evtStore()->setConst(eleph).isSuccess() ) {
196  ATH_MSG_WARNING("Could not setConst Elephantino at ["
197  << elephantinoOutputName << "]");
198  }
199 
200  {
201  const AthExIParticles* iparticles = 0;
202  if ( !evtStore()->symLink( particles, iparticles ).isSuccess() ) {
203  ATH_MSG_WARNING("Could not symlink AthExParticles to AthExIParticles !!");
204  return StatusCode::RECOVERABLE;
205  }
206  }
207 
208  const AthExIParticles* iparticles = 0;
209  if ( !evtStore()->retrieve( iparticles, particlesOutputName).isSuccess() ||
210  0 == iparticles ) {
211  ATH_MSG_WARNING("Could not retrieve the (symlinked) AthExIParticles at ["
212  << particlesOutputName << "] !!");
213  return StatusCode::RECOVERABLE;
214  }
215 
216  if ( iparticles->size() < 9 ) {
217  ATH_MSG_WARNING("Not enough particles to make an Elephantino !!");
218  return StatusCode::RECOVERABLE;
219  }
220 
221  ATH_MSG_INFO(" particles: " << particles->size()
222  << endmsg <<
223  " iparticles: " << iparticles->size());
224 
225  if ( iparticles->size() != particles->size() ) {
226  ATH_MSG_ERROR("Error performing the symlink !" << endmsg
227  << " #iparticles: " << iparticles->size() << endmsg
228  << " #particles: " << particles->size() << endmsg
229  << " @iparticles: " << iparticles << endmsg
230  << " @particles: " << particles << endmsg
231  << "=== StoreGate content ===\n"
232  << evtStore()->dump());
233  return StatusCode::FAILURE;
234  }
235 
236  // we need to test all the possible states of ElementLinks
237  // -> created from an index
238  // -> created from a pointer
239  const ElementLink<AthExIParticles> ip1( *iparticles, 0 );
240  const ElementLink<AthExIParticles> ip2( (*iparticles)[4], *iparticles );
241  const ElementLink<AthExIParticles> ip3( *iparticles, 7 );
242  const ElementLink<AthExIParticles> ip4( (*iparticles)[8], *iparticles );
243 
244  eleph->setLegs( ip1, ip2, ip3, ip4 );
245 
246  const ElementLink<AthExIParticles> ie1( *iparticles, 1 );
247  const ElementLink<AthExIParticles> ie2( (*iparticles)[9], *iparticles );
248  eleph->setEars( ie1, ie2 );
249 
250  ATH_MSG_INFO("Created an Elephantino from :" << endmsg
251  << " leg1: px= " << eleph->leg1()->px() * igev << endmsg
252  << " leg2: px= " << eleph->leg2()->px() * igev << endmsg
253  << " leg3: px= " << eleph->leg3()->px() * igev << endmsg
254  << " leg4: px= " << eleph->leg4()->px() * igev << endmsg
255  << " ear1: px= " << eleph->ear1()->px() * igev << endmsg
256  << " ear2: px= " << eleph->ear2()->px() * igev);
257 
258  return StatusCode::SUCCESS;
259 }
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
AthExThinning::CreateData::m_decayOutputName
StringProperty m_decayOutputName
Decay object output location.
Definition: CreateData.h:84
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
AthExElephantino
AthExElephantino
Definition: AthExTPCnv.cxx:22
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
AthExThinning::CreateData::m_testNames
std::vector< std::string > m_testNames
list of test-names to create data for (default: test1,test2,test3)
Definition: CreateData.h:73
AthExThinning::CreateData::m_nbrParticles
UnsignedIntegerProperty m_nbrParticles
Number of particles to generate.
Definition: CreateData.h:81
AthExThinning::CreateData::m_particlesOutputName
StringProperty m_particlesOutputName
Particles output location.
Definition: CreateData.h:78
AthExParticles
Athena::TPCnvVers::Current AthExParticles
Definition: AthExTPCnv.cxx:32
AthExParticle::px
virtual double px() const
Implementation of the AthExIParticle interface.
Definition: AthExParticle.h:78
AthExThinning
Definition: CreateData.h:30
TrigInDetValidation_Base.test
test
Definition: TrigInDetValidation_Base.py:146
AthExThinning::CreateData::initialize
virtual StatusCode initialize()
Definition: CreateData.cxx:83
AthExElephantino::leg4
const AthExIParticle * leg4() const
Definition: AthExElephantino.cxx:77
AthExThinning::CreateData::execute
virtual StatusCode execute()
Definition: CreateData.cxx:95
AthExIParticles.h
AthExElephantino::ear2
const AthExIParticle * ear2() const
Definition: AthExElephantino.cxx:93
AthExDecay.h
AthCommonDataStore< AthCommonMsg< Algorithm > >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:85
skel.l2
l2
Definition: skel.GENtoEVGEN.py:426
AthExElephantino::ear1
const AthExIParticle * ear1() const
Definition: AthExElephantino.cxx:85
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
AthExElephantino::leg2
const AthExIParticle * leg2() const
Definition: AthExElephantino.cxx:61
lumiFormat.i
int i
Definition: lumiFormat.py:92
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
AthExParticles.h
AthExElephantino
Definition: AthExElephantino.h:33
AthExDecay::l1
const AthExParticle * l1() const
Definition: AthExDecay.cxx:73
AthExDecay::setDecay
void setDecay(const ElementLink< AthExParticles > &p1, const ElementLink< AthExParticles > &p2, const ElementLink< AthExParticles > &l1, const ElementLink< AthExParticles > &l2)
Definition: AthExDecay.cxx:91
AthExThinning::CreateData::m_elephantinoOutputName
StringProperty m_elephantinoOutputName
Elephantino object output location.
Definition: CreateData.h:87
AthAlgorithm
Definition: AthAlgorithm.h:47
AthExDecay
Definition: AthExDecay.h:28
AthExIParticles
Definition: AthExIParticles.h:29
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
AthExThinning::CreateData::CreateData
CreateData()
Default constructor:
AthExElephantino::setLegs
void setLegs(const ElementLink< AthExIParticles > &p1, const ElementLink< AthExIParticles > &p2, const ElementLink< AthExIParticles > &p3, const ElementLink< AthExIParticles > &p4)
Definition: AthExElephantino.cxx:105
CreateData.h
DataVector.h
An STL vector of pointers that by default owns its pointed-to elements.
AthExIParticle::px
virtual double px() const =0
AthExIParticle interface.
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
AthExElephantino.h
AthExDecay::p2
const AthExParticle * p2() const
Definition: AthExDecay.cxx:66
LArG4FSStartPointFilter.particles
list particles
Definition: LArG4FSStartPointFilter.py:84
AthExElephantino::leg1
const AthExIParticle * leg1() const
Definition: AthExElephantino.cxx:53
AthExDecay::p1
const AthExParticle * p1() const
Definition: AthExDecay.cxx:59
AthExParticle
Definition: AthExParticle.h:24
skel.l1
l1
Definition: skel.GENtoEVGEN.py:425
AthExThinning::CreateData::makeData
StatusCode makeData(const std::string &testName)
make data for a test
Definition: CreateData.cxx:114
AthExElephantino::leg3
const AthExIParticle * leg3() const
Definition: AthExElephantino.cxx:69
GeV
#define GeV
Definition: CaloTransverseBalanceVecMon.cxx:30
FourMomUtils::dump
std::ostream & dump(std::ostream &out, const I4MomIter iBeg, const I4MomIter iEnd)
Helper to stream out a range of I4Momentum objects.
Definition: P4Dumper.h:24
StoreGateSvc.h
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
AthExThinning::CreateData::finalize
virtual StatusCode finalize()
Definition: CreateData.cxx:89
AthExParticles
Definition: AthExParticles.h:37
AthExDecay::l2
const AthExParticle * l2() const
Definition: AthExDecay.cxx:80
AthExThinning::CreateData::~CreateData
virtual ~CreateData()
Destructor:
Definition: CreateData.cxx:78
AthExElephantino::setEars
void setEars(const ElementLink< AthExIParticles > &e1, const ElementLink< AthExIParticles > &e4)
Definition: AthExElephantino.cxx:118