ATLAS Offline Software
Public Member Functions | Protected Member Functions | Private Types | Private Member Functions | Private Attributes | Friends | List of all members
ISF::SimKernelMT Class Referencefinal

Core Athena algorithm for the Integrated Simulation Framework. More...

#include <SimKernelMT.h>

Inheritance diagram for ISF::SimKernelMT:
Collaboration diagram for ISF::SimKernelMT:

Public Member Functions

 SimKernelMT (const std::string &name, ISvcLocator *pSvcLocator)
 Implements standard AthAlgorithm constructor. More...
 
virtual ~SimKernelMT ()
 Implements empty destructor. More...
 
StatusCode initialize () override
 Check user configuration and configure the algorithm state accordingly. More...
 
StatusCode execute () override
 Check the validity of the MC truth event in the current Athena event. More...
 
StatusCode finalize () override
 Implements empty finalize (implementation required by AthAlgorithm) More...
 
bool isClonable () const override
 
virtual StatusCode sysInitialize () override
 Override sysInitialize. More...
 
virtual const DataObjIDColl & extraOutputDeps () const override
 Return the list of extra output dependencies. More...
 
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc. More...
 
const ServiceHandle< StoreGateSvc > & evtStore () const
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc. More...
 
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc. More...
 
virtual StatusCode sysStart () override
 Handle START transition. More...
 
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles. More...
 
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles. More...
 
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T > &t)
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleKey &hndl, const std::string &doc, const SG::VarHandleKeyType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleBase &hndl, const std::string &doc, const SG::VarHandleType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleKeyArray &hndArr, const std::string &doc, const SG::VarHandleKeyArrayType &)
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, T &property, const std::string &doc, const SG::NotHandleType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, T &property, const std::string &doc="none")
 Declare a new Gaudi property. More...
 
void updateVHKA (Gaudi::Details::PropertyBase &)
 
MsgStream & msg () const
 
MsgStream & msg (const MSG::Level lvl) const
 
bool msgLvl (const MSG::Level lvl) const
 

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution More...
 
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. More...
 

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t
 

Private Member Functions

ISimulatorToolidentifySimulator (const ISF::ISFParticle &particle)
 Returns the simulator to use for the given particle. More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyArrayType &)
 specialization for handling Gaudi::Property<SG::VarHandleKeyArray> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleType &)
 specialization for handling Gaudi::Property<SG::VarHandleBase> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &t, const SG::NotHandleType &)
 specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray> More...
 

Private Attributes

SG::ReadHandleKey< McEventCollectionm_inputEvgenKey {this, "InputEvgenCollection", "", "Input EVGEN collection."}
 Input Generator Truth collection. More...
 
SG::WriteHandleKey< McEventCollectionm_outputTruthKey {this, "OutputTruthCollection", "", "Output Truth collection."}
 Output Simulation Truth collection. More...
 
SG::WriteHandleKey< TrackRecordCollectionm_caloEntryLayerKey {this, "CaloEntryLayerKey", "CaloEntryLayer", ""}
 Output TrackRecordCollections. More...
 
SG::WriteHandleKey< TrackRecordCollectionm_muonEntryLayerKey {this, "MuonEntryLayerKey", "MuonEntryLayer", ""}
 
SG::WriteHandleKey< TrackRecordCollectionm_muonExitLayerKey {this, "MuonExitLayerKey", "MuonExitLayer", ""}
 
BooleanProperty m_useShadowEvent {this, "UseShadowEvent", false, "New approach to selecting particles for simulation" }
 
Gaudi::Property< bool > m_forceGeoIDSvc {this, "AlwaysUseGeoIDSvc", false, "Force geoID recalculation for each particle" }
 Force geoID recalculation for each particle. More...
 
ToolHandle< IGenEventFilterm_truthPreselectionTool {this, "TruthPreselectionTool", "", "Tool for filtering out quasi-stable particle daughters"}
 
ServiceHandle< IInputConverterm_inputConverter {this, "InputConverter", "", "Input McEventCollection->ISFParticleContainer conversion service."}
 Input converter service (from Generator->ISF particle types) More...
 
ServiceHandle< ITruthSvcm_truthRecordSvc {this,"TruthRecordService", "ISF_MC15aPlusTruthService", ""}
 Central truth service. More...
 
ServiceHandle< Simulation::IZeroLifetimePatcherm_qspatcher {this, "QuasiStablePatcher", "", "Quasi-Stable Particle Simulation Patcher"}
 Quasi-Stable Particle Simulation Patcher. More...
 
ToolHandleArray< ISimulatorToolm_simulationTools {this, "SimulationTools", {}, ""}
 Simulation Tools. More...
 
ISimulatorToolm_particleKillerTool {}
 When no appropriate simulator can be found for a given particle, the particle is sent to this "particle killer": More...
 
PublicToolHandle< IEntryLayerToolm_entryLayerTool {this, "EntryLayerTool", "ISF_EntryLayerToolMT", ""}
 AthenaTool responsible for writing Calo/Muon Entry/Exit Layer collection. More...
 
ServiceHandle< IGeoIDSvcm_geoIDSvc {this, "GeoIDSvc", "", "Service to set particle GeoIDs"}
 Service to set particle GeoIDs. More...
 
ToolHandle< IParticleOrderingToolm_orderingTool {this, "ParticleOrderingTool", "", "Tool to set order of particles"}
 Tool to set particle ordering. More...
 
std::array< ToolHandleArray< ISimulationSelector >, AtlasDetDescr::fNumAtlasRegionsm_simSelectors
 The simulation selectors defining the "routing chain". More...
 
std::map< ISF::SimulationFlavor, ISimulatorTool * > m_simToolMap
 Map of the simulation flavours used in this job to the corresponding Simulation Services. More...
 
size_t m_maxParticleVectorSize {10240}
 Number of particles simultaneously sent to simulator. More...
 
DataObjIDColl m_extendedExtraObjects
 
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default) More...
 
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default) More...
 
std::vector< SG::VarHandleKeyArray * > m_vhka
 
bool m_varHandleArraysDeclared
 

Friends

class ISFTesting::SimKernelMT_test
 Allow the test class access to all methods. More...
 

Detailed Description

Core Athena algorithm for the Integrated Simulation Framework.

This Athena algorithm dispatches all selected particles from the input collection to the attached simulators.

Definition at line 61 of file SimKernelMT.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

◆ SimKernelMT()

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

Implements standard AthAlgorithm constructor.

Core Athena algorithm for the Integrated Simulation Framework.

Author
Elmar Ritsch Elmar.nosp@m..Rit.nosp@m.sch@c.nosp@m.ern..nosp@m.ch
Date
October 2016

Definition at line 25 of file SimKernelMT.cxx.

25  :
26  ::AthAlgorithm( name, pSvcLocator ),
27  m_simSelectors() //FIXME make private
28 {
29  // routing tools
30  declareProperty("BeamPipeSimulationSelectors", m_simSelectors[AtlasDetDescr::fAtlasForward] );
31  declareProperty("IDSimulationSelectors", m_simSelectors[AtlasDetDescr::fAtlasID] );
32  declareProperty("CaloSimulationSelectors", m_simSelectors[AtlasDetDescr::fAtlasCalo] );
33  declareProperty("MSSimulationSelectors", m_simSelectors[AtlasDetDescr::fAtlasMS] );
34  declareProperty("CavernSimulationSelectors", m_simSelectors[AtlasDetDescr::fAtlasCavern] );
35  // tuning parameters
36  declareProperty("MaximumParticleVectorSize" , m_maxParticleVectorSize );
37 }

◆ ~SimKernelMT()

ISF::SimKernelMT::~SimKernelMT ( )
virtual

Implements empty destructor.

Definition at line 40 of file SimKernelMT.cxx.

40  {
41 }

Member Function Documentation

◆ declareGaudiProperty() [1/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< Algorithm > >::declareGaudiProperty ( Gaudi::Property< T > &  hndl,
const SG::VarHandleKeyArrayType  
)
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKeyArray>

Definition at line 170 of file AthCommonDataStore.h.

172  {
173  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
174  hndl.value(),
175  hndl.documentation());
176 
177  }

◆ declareGaudiProperty() [2/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< Algorithm > >::declareGaudiProperty ( Gaudi::Property< T > &  hndl,
const SG::VarHandleKeyType  
)
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158  {
159  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
160  hndl.value(),
161  hndl.documentation());
162 
163  }

◆ declareGaudiProperty() [3/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< Algorithm > >::declareGaudiProperty ( Gaudi::Property< T > &  hndl,
const SG::VarHandleType  
)
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleBase>

Definition at line 184 of file AthCommonDataStore.h.

186  {
187  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
188  hndl.value(),
189  hndl.documentation());
190  }

◆ declareGaudiProperty() [4/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< Algorithm > >::declareGaudiProperty ( Gaudi::Property< T > &  t,
const SG::NotHandleType  
)
inlineprivateinherited

specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray>

Definition at line 199 of file AthCommonDataStore.h.

200  {
201  return PBASE::declareProperty(t);
202  }

◆ declareProperty() [1/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty ( const std::string &  name,
SG::VarHandleBase hndl,
const std::string &  doc,
const SG::VarHandleType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
hndlObject holding the property value.
docDocumentation string for the property.

This is the version for types that derive from SG::VarHandleBase. The property value object is put on the input and output lists as appropriate; then we forward to the base class.

Definition at line 245 of file AthCommonDataStore.h.

249  {
250  this->declare(hndl.vhKey());
251  hndl.vhKey().setOwner(this);
252 
253  return PBASE::declareProperty(name,hndl,doc);
254  }

◆ declareProperty() [2/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty ( const std::string &  name,
SG::VarHandleKey hndl,
const std::string &  doc,
const SG::VarHandleKeyType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
hndlObject holding the property value.
docDocumentation string for the property.

This is the version for types that derive from SG::VarHandleKey. The property value object is put on the input and output lists as appropriate; then we forward to the base class.

Definition at line 221 of file AthCommonDataStore.h.

225  {
226  this->declare(hndl);
227  hndl.setOwner(this);
228 
229  return PBASE::declareProperty(name,hndl,doc);
230  }

◆ declareProperty() [3/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty ( const std::string &  name,
SG::VarHandleKeyArray hndArr,
const std::string &  doc,
const SG::VarHandleKeyArrayType  
)
inlineinherited

Definition at line 259 of file AthCommonDataStore.h.

263  {
264 
265  // std::ostringstream ost;
266  // ost << Algorithm::name() << " VHKA declareProp: " << name
267  // << " size: " << hndArr.keys().size()
268  // << " mode: " << hndArr.mode()
269  // << " vhka size: " << m_vhka.size()
270  // << "\n";
271  // debug() << ost.str() << endmsg;
272 
273  hndArr.setOwner(this);
274  m_vhka.push_back(&hndArr);
275 
276  Gaudi::Details::PropertyBase* p = PBASE::declareProperty(name, hndArr, doc);
277  if (p != 0) {
278  p->declareUpdateHandler(&AthCommonDataStore<PBASE>::updateVHKA, this);
279  } else {
280  ATH_MSG_ERROR("unable to call declareProperty on VarHandleKeyArray "
281  << name);
282  }
283 
284  return p;
285 
286  }

◆ declareProperty() [4/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty ( const std::string &  name,
T &  property,
const std::string &  doc,
const SG::NotHandleType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
propertyObject holding the property value.
docDocumentation string for the property.

This is the generic version, for types that do not derive from SG::VarHandleKey. It just forwards to the base class version of declareProperty.

Definition at line 333 of file AthCommonDataStore.h.

337  {
338  return PBASE::declareProperty(name, property, doc);
339  }

◆ declareProperty() [5/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty ( const std::string &  name,
T &  property,
const std::string &  doc = "none" 
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
propertyObject holding the property value.
docDocumentation string for the property.

This dispatches to either the generic declareProperty or the one for VarHandle/Key/KeyArray.

Definition at line 352 of file AthCommonDataStore.h.

355  {
356  typedef typename SG::HandleClassifier<T>::type htype;
357  return declareProperty (name, property, doc, htype());
358  }

◆ declareProperty() [6/6]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty ( Gaudi::Property< T > &  t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145  {
146  typedef typename SG::HandleClassifier<T>::type htype;
148  }

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

95 { return m_detStore; }

◆ evtStore() [1/2]

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.

85 { return m_evtStore; }

◆ evtStore() [2/2]

const ServiceHandle<StoreGateSvc>& AthCommonDataStore< AthCommonMsg< Algorithm > >::evtStore ( ) const
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 90 of file AthCommonDataStore.h.

90 { return m_evtStore; }

◆ execute()

StatusCode ISF::SimKernelMT::execute ( )
override

Check the validity of the MC truth event in the current Athena event.

Return values
StatusCode::SUCCESSall HepMC::GenEvents of the current Athena event are valid
StatusCode::FAILUREthe MC truth collection could not be read
StatusCode::FAILUREthe MC truth collection does not have a valid tree structure

Definition at line 132 of file SimKernelMT.cxx.

132  {
133 
134  const EventContext& ctx = Gaudi::Hive::currentContext();
135  // Call setupEvent for all simulators (TODO: make the tools do this)
136  for (auto& curSimTool: m_simulationTools) {
137  if ( curSimTool ) {
138  ATH_CHECK(curSimTool->setupEvent(ctx));
139  ATH_MSG_DEBUG( "Event setup done for " << curSimTool->name() );
140  }
141  }
142 
144  if (!inputEvgen.isValid()) {
145  ATH_MSG_FATAL("Unable to read input GenEvent collection '" << inputEvgen.key() << "'");
146  return StatusCode::FAILURE;
147  }
148 
149  // create output Truth collection
151  std::unique_ptr<McEventCollection> shadowTruth{};
152  if (m_useShadowEvent) {
153  outputTruth = std::make_unique<McEventCollection>();
154  // copy input Evgen collection to shadow Truth collection
155  shadowTruth = std::make_unique<McEventCollection>(*inputEvgen);
156  for (HepMC::GenEvent* currentGenEvent : *shadowTruth ) {
157  // Apply QS patch if required
158  if ( not m_qspatcher.empty() ) {
159  ATH_CHECK(m_qspatcher->applyWorkaround(*currentGenEvent));
160  }
161  // Copy GenEvent and remove daughters of quasi-stable particles to be simulated
162  std::unique_ptr<HepMC::GenEvent> outputEvent = m_truthPreselectionTool->filterGenEvent(*currentGenEvent);
163  outputTruth->push_back(outputEvent.release());
164  }
165  }
166  else {
167  // copy input Evgen collection to output Truth collection
168  outputTruth = std::make_unique<McEventCollection>(*inputEvgen);
169  // Apply QS patch if required
170  if ( not m_qspatcher.empty() ) {
171  for (HepMC::GenEvent* currentGenEvent : *outputTruth ) {
172  ATH_CHECK(m_qspatcher->applyWorkaround(*currentGenEvent));
173  }
174  }
175  }
176 
177  const int largestGeneratedParticleBC = (outputTruth->empty()) ? HepMC::UNDEFINED_ID
178  : HepMC::maxGeneratedParticleBarcode(outputTruth->at(0)); // TODO make this more robust
179  const int largestGeneratedVertexBC = (outputTruth->empty()) ? HepMC::UNDEFINED_ID
180  : HepMC::maxGeneratedVertexBarcode(outputTruth->at(0)); // TODO make this more robust
181  // tell TruthService we're starting a new event
182  ATH_CHECK( m_truthRecordSvc->initializeTruthCollection(largestGeneratedParticleBC, largestGeneratedVertexBC) );
183 
184  // Create TrackRecordCollections and pass them to the entryLayerTool
186  caloEntryLayer = std::make_unique<TrackRecordCollection>(caloEntryLayer.name());
187  ATH_CHECK(m_entryLayerTool->registerTrackRecordCollection(caloEntryLayer.ptr(), fAtlasCaloEntry));
189  muonEntryLayer = std::make_unique<TrackRecordCollection>(muonEntryLayer.name());
190  ATH_CHECK(m_entryLayerTool->registerTrackRecordCollection(muonEntryLayer.ptr(), fAtlasMuonEntry));
192  muonExitLayer = std::make_unique<TrackRecordCollection>(muonExitLayer.name());
193  ATH_CHECK(m_entryLayerTool->registerTrackRecordCollection(muonExitLayer.ptr(), fAtlasMuonExit));
194 
195  // read and convert input
196  ISFParticleContainer simParticles;
197  ATH_CHECK( m_inputConverter->convert(*outputTruth, simParticles) );
198 
199  // create an ordered queue of particles
200  ISFParticleOrderedQueue particleQueue;
201  for ( auto& particle : simParticles ) {
202 
203  if ( m_orderingTool.empty() ) {
204  // Without a defined ordering, preserve old FIFO behaviour
205  particle->setOrder( -particleQueue.size() );
206  } else {
207  m_orderingTool->setOrder( *particle );
208  }
209 
210  particleQueue.push( particle );
211  }
212 
213  unsigned int loopCounter{0};
214  // loop until there are no more particles to simulate
216  ISimulatorTool* lastSimulator{};
217  ISFParticleContainer newSecondaries{};
218  while ( particleQueue.size() ) {
219  ++loopCounter;
220  ATH_MSG_VERBOSE("Main Loop pass no. " << loopCounter);
221  ATH_MSG_VERBOSE("Queue starts with " << particleQueue.size() << " particles.");
222  // Create a vector of particles with the same simulator
223  ISFParticleOrderedQueue tempQueue;
224  while ( particleQueue.size() ) {
225  auto particlePtr = particleQueue.top();
226  ISFParticle& curParticle( *particlePtr );
227  particleQueue.pop();
228 
229  // Get the geo ID for the particle
230  if ( m_forceGeoIDSvc || !validAtlasRegion( curParticle.nextGeoID() ) ) {
231  m_geoIDSvc->identifyAndRegNextGeoID( curParticle );
232  }
233 
234  // Get the simulator using the GeoID
235  auto& simTool = identifySimulator(curParticle);
236 
237  // Fill the vector
238  if ( particles.empty() ) {
239  // First particle in the vector defines the simulator
240  particles.push_back(particlePtr);
241  lastSimulator=&simTool;
242  }
243  else if (&simTool!=lastSimulator || particles.size() >= m_maxParticleVectorSize ) {
244  // Change of simulator, end the current vector
245  tempQueue.push(particlePtr);
246  }
247  else {
248  particles.push_back(particlePtr);
249  }
250  }
251  particleQueue = std::move(tempQueue);
252  #ifdef ISFDEBUG
253  if (loopCounter>100 && particles.size()<3) {
254  ATH_MSG_INFO("Main Loop pass no. " << loopCounter);
255  ATH_MSG_INFO("Selected " << particles.size() << " particles to be processed by " << lastSimulator->name());
256  for ( const ISFParticle *particle : particles ) {
258  }
259  }
260  #endif // ISFDEBUG
261 
262  ATH_MSG_VERBOSE("Selected " << particles.size() << " particles to be processed by " << lastSimulator->name());
263  // Run the simulation
264  ATH_CHECK( lastSimulator->simulateVector( particles, newSecondaries, outputTruth.ptr(), shadowTruth.get() ) );
265  ATH_MSG_VERBOSE(lastSimulator->name() << " returned " << newSecondaries.size() << " new particles to be added to the queue." );
266  // Register returned particles with the entry layer tool, set their order and enqueue them
267  for ( auto* secondary : newSecondaries ) {
268 
269  // Set up particle in ISF
270  m_entryLayerTool->registerParticle( *secondary );
271  if ( m_forceGeoIDSvc || !validAtlasRegion( secondary->nextGeoID() ) ) {
272  m_geoIDSvc->identifyAndRegNextGeoID( *secondary );
273  }
274 
275  if ( m_orderingTool.empty() ) {
276  // Without a defined ordering, preserve old FIFO behaviour
277  secondary->setOrder( -particleQueue.size() );
278  } else {
279  m_orderingTool->setOrder( *secondary );
280  }
281 
282  particleQueue.push( secondary );
283  }
284  newSecondaries.clear();
285 
286  // Delete simulated particles
287  for ( auto usedParticle : particles ) {
288  delete usedParticle;
289  }
290  particles.clear();
291  }
292  ATH_MSG_VERBOSE("Final status: queue contains " << particleQueue.size() << " particles.");
293 
294  // Release the event from all simulators (TODO: make the tools do this)
295  for (auto& curSimTool: m_simulationTools) {
296  if ( curSimTool ) {
297  ATH_CHECK(curSimTool->releaseEvent(ctx));
298  ATH_MSG_DEBUG( "releaseEvent() completed for " << curSimTool->name() );
299  }
300  }
301 
302  // Remove QS patch if required
303  if(!m_qspatcher.empty()) {
304  for (HepMC::GenEvent* currentGenEvent : *outputTruth ) {
305  ATH_CHECK(m_qspatcher->removeWorkaround(*currentGenEvent));
306  }
307  }
308 
309  return StatusCode::SUCCESS;
310 }

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

◆ finalize()

StatusCode ISF::SimKernelMT::finalize ( )
override

Implements empty finalize (implementation required by AthAlgorithm)

Definition at line 313 of file SimKernelMT.cxx.

313  {
314  return StatusCode::SUCCESS;
315 }

◆ identifySimulator()

ISF::ISimulatorTool & ISF::SimKernelMT::identifySimulator ( const ISF::ISFParticle particle)
private

Returns the simulator to use for the given particle.

Definition at line 319 of file SimKernelMT.cxx.

319  {
320  AtlasDetDescr::AtlasRegion geoID = particle.nextGeoID();
321 
322  auto& localSelectors = m_simSelectors[geoID];
323  for (auto& selector: localSelectors) {
324  bool selected = selector->selfSelect(particle);
325  if (selected) {
326  return *m_simToolMap.at(selector->simFlavor());
327  }
328  }
329 
330  ATH_MSG_WARNING("No simulator found for particle (" << particle << ")."
331  << " Will send it to " << m_particleKillerTool->name());
332  return *m_particleKillerTool;
333 }

◆ initialize()

StatusCode ISF::SimKernelMT::initialize ( )
override

Check user configuration and configure the algorithm state accordingly.

Definition at line 44 of file SimKernelMT.cxx.

44  {
45 
46  ATH_CHECK( m_simulationTools.retrieve() );
47  for ( auto& curSimTool : m_simulationTools )
48  {
49  if ( curSimTool )
50  {
51  const auto flavor = curSimTool->simFlavor();
52  auto itr = m_simToolMap.find(flavor);
53  if (itr != m_simToolMap.end() )
54  {
55  ATH_MSG_FATAL("Two ISimulatorTool instances (" << itr->second->name() << "," << curSimTool->name() << ") with the same flavor in this job!\n Check your configuration!");
56  return StatusCode::FAILURE;
57  }
58  // New flavour add it to the map.
59  m_simToolMap[flavor] = &*curSimTool;
60  if (flavor == ISF::ParticleKiller) {
61  m_particleKillerTool = &*curSimTool;
62  }
63  }
64  }
65  // Check that a particle killer simulator tool was provided
66  if (!m_particleKillerTool) {
67  ATH_MSG_FATAL("No fallback ParticleKiller Simulator Tool provided in SimulationTools, the job will bail out now.");
68  return StatusCode::FAILURE;
69  }
70 
71  ATH_MSG_INFO("The following Simulators will be used in this job: \t" << m_simulationTools);
72  // retrieve simulation selectors (i.e. the "routing chain")
73  for ( auto& selectorsToolHandleArray: m_simSelectors )
74  {
75  ATH_CHECK( selectorsToolHandleArray.retrieve() );
76  }
77 
78  // info screen output
79  ATH_MSG_INFO( "The following routing chains are defined:" );
80  for ( short geoID=AtlasDetDescr::fFirstAtlasRegion; geoID<AtlasDetDescr::fNumAtlasRegions; ++geoID )
81  {
82  auto& localSelectors = m_simSelectors[geoID];
83  ATH_MSG_INFO( AtlasDetDescr::AtlasRegionHelper::getName(geoID) << " (GeoID=" << geoID << "): \t" << localSelectors );
84 
85  for ( auto& selector : localSelectors )
86  {
87  const auto flavor = selector->simFlavor();
88  auto itr = m_simToolMap.find(flavor);
89  if (itr == m_simToolMap.end() )
90  {
91  ATH_MSG_WARNING( "Map from SimulationFlavor to SimulatorTool:" );
92  for ( auto& entry : m_simToolMap )
93  {
94  ATH_MSG_WARNING( "SimulationFlavor: " << entry.first << ", SimulatorTool Name: " << entry.second->name() );
95  }
96  ATH_MSG_FATAL( "No SimulationTool with flavor " << flavor << " expected by " << selector->name() << " found in this job!\n Check your configuration!" );
97  return StatusCode::FAILURE;
98  }
99  }
100  }
101 
102  ATH_CHECK( m_entryLayerTool.retrieve() );
103 
104  if ( not m_orderingTool.empty() ) {
105  ATH_CHECK( m_orderingTool.retrieve() );
106  }
107 
110 
111  ATH_CHECK( m_caloEntryLayerKey.initialize() );
112  ATH_CHECK( m_muonEntryLayerKey.initialize() );
113  ATH_CHECK( m_muonExitLayerKey.initialize() );
114 
115  ATH_CHECK( m_inputConverter.retrieve() );
116  if ( not m_truthPreselectionTool.empty() ) {
118  }
119 
120  ATH_CHECK ( m_truthRecordSvc.retrieve() );
121 
122  if ( not m_qspatcher.empty() ) {
123  ATH_CHECK( m_qspatcher.retrieve() );
124  }
125 
126  ATH_CHECK( m_geoIDSvc.retrieve() );
127 
128  return StatusCode::SUCCESS;
129 }

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

◆ isClonable()

bool ISF::SimKernelMT::isClonable ( ) const
inlineoverride

Definition at line 85 of file SimKernelMT.h.

85 { return true; }

◆ msg() [1/2]

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

Definition at line 24 of file AthCommonMsg.h.

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

◆ msg() [2/2]

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

Definition at line 27 of file AthCommonMsg.h.

27  {
28  return this->msgStream(lvl);
29  }

◆ 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();
383  PBASE::renounce (h);
384  }

◆ 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  {
365  handlesArray.renounce();
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, PyAthena::Alg, and AthHistogramAlgorithm.

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 }

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

◆ 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) {
312  std::vector<SG::VarHandleKey*> keys = a->keys();
313  for (auto k : keys) {
314  k->setOwner(this);
315  }
316  }
317  }

Friends And Related Function Documentation

◆ ISFTesting::SimKernelMT_test

friend class ISFTesting::SimKernelMT_test
friend

Allow the test class access to all methods.

Definition at line 64 of file SimKernelMT.h.

Member Data Documentation

◆ m_caloEntryLayerKey

SG::WriteHandleKey<TrackRecordCollection> ISF::SimKernelMT::m_caloEntryLayerKey {this, "CaloEntryLayerKey", "CaloEntryLayer", ""}
private

Output TrackRecordCollections.

Definition at line 96 of file SimKernelMT.h.

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

PublicToolHandle<IEntryLayerTool> ISF::SimKernelMT::m_entryLayerTool {this, "EntryLayerTool", "ISF_EntryLayerToolMT", ""}
private

AthenaTool responsible for writing Calo/Muon Entry/Exit Layer collection.

Definition at line 122 of file SimKernelMT.h.

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

Gaudi::Property<bool> ISF::SimKernelMT::m_forceGeoIDSvc {this, "AlwaysUseGeoIDSvc", false, "Force geoID recalculation for each particle" }
private

Force geoID recalculation for each particle.

Definition at line 102 of file SimKernelMT.h.

◆ m_geoIDSvc

ServiceHandle<IGeoIDSvc> ISF::SimKernelMT::m_geoIDSvc {this, "GeoIDSvc", "", "Service to set particle GeoIDs"}
private

Service to set particle GeoIDs.

Definition at line 125 of file SimKernelMT.h.

◆ m_inputConverter

ServiceHandle<IInputConverter> ISF::SimKernelMT::m_inputConverter {this, "InputConverter", "", "Input McEventCollection->ISFParticleContainer conversion service."}
private

Input converter service (from Generator->ISF particle types)

Definition at line 107 of file SimKernelMT.h.

◆ m_inputEvgenKey

SG::ReadHandleKey<McEventCollection> ISF::SimKernelMT::m_inputEvgenKey {this, "InputEvgenCollection", "", "Input EVGEN collection."}
private

Input Generator Truth collection.

Definition at line 92 of file SimKernelMT.h.

◆ m_maxParticleVectorSize

size_t ISF::SimKernelMT::m_maxParticleVectorSize {10240}
private

Number of particles simultaneously sent to simulator.

Definition at line 137 of file SimKernelMT.h.

◆ m_muonEntryLayerKey

SG::WriteHandleKey<TrackRecordCollection> ISF::SimKernelMT::m_muonEntryLayerKey {this, "MuonEntryLayerKey", "MuonEntryLayer", ""}
private

Definition at line 97 of file SimKernelMT.h.

◆ m_muonExitLayerKey

SG::WriteHandleKey<TrackRecordCollection> ISF::SimKernelMT::m_muonExitLayerKey {this, "MuonExitLayerKey", "MuonExitLayer", ""}
private

Definition at line 98 of file SimKernelMT.h.

◆ m_orderingTool

ToolHandle<IParticleOrderingTool> ISF::SimKernelMT::m_orderingTool {this, "ParticleOrderingTool", "", "Tool to set order of particles"}
private

Tool to set particle ordering.

Definition at line 128 of file SimKernelMT.h.

◆ m_outputTruthKey

SG::WriteHandleKey<McEventCollection> ISF::SimKernelMT::m_outputTruthKey {this, "OutputTruthCollection", "", "Output Truth collection."}
private

Output Simulation Truth collection.

Definition at line 94 of file SimKernelMT.h.

◆ m_particleKillerTool

ISimulatorTool* ISF::SimKernelMT::m_particleKillerTool {}
private

When no appropriate simulator can be found for a given particle, the particle is sent to this "particle killer":

Definition at line 119 of file SimKernelMT.h.

◆ m_qspatcher

ServiceHandle<Simulation::IZeroLifetimePatcher> ISF::SimKernelMT::m_qspatcher {this, "QuasiStablePatcher", "", "Quasi-Stable Particle Simulation Patcher"}
private

Quasi-Stable Particle Simulation Patcher.

Definition at line 113 of file SimKernelMT.h.

◆ m_simSelectors

std::array<ToolHandleArray<ISimulationSelector>, AtlasDetDescr::fNumAtlasRegions> ISF::SimKernelMT::m_simSelectors
private

The simulation selectors defining the "routing chain".

Definition at line 131 of file SimKernelMT.h.

◆ m_simToolMap

std::map<ISF::SimulationFlavor, ISimulatorTool*> ISF::SimKernelMT::m_simToolMap
private

Map of the simulation flavours used in this job to the corresponding Simulation Services.

Definition at line 134 of file SimKernelMT.h.

◆ m_simulationTools

ToolHandleArray<ISimulatorTool> ISF::SimKernelMT::m_simulationTools {this, "SimulationTools", {}, ""}
private

Simulation Tools.

Definition at line 116 of file SimKernelMT.h.

◆ m_truthPreselectionTool

ToolHandle<IGenEventFilter> ISF::SimKernelMT::m_truthPreselectionTool {this, "TruthPreselectionTool", "", "Tool for filtering out quasi-stable particle daughters"}
private

Definition at line 104 of file SimKernelMT.h.

◆ m_truthRecordSvc

ServiceHandle<ITruthSvc> ISF::SimKernelMT::m_truthRecordSvc {this,"TruthRecordService", "ISF_MC15aPlusTruthService", ""}
private

Central truth service.

Definition at line 110 of file SimKernelMT.h.

◆ m_useShadowEvent

BooleanProperty ISF::SimKernelMT::m_useShadowEvent {this, "UseShadowEvent", false, "New approach to selecting particles for simulation" }
private

Definition at line 100 of file SimKernelMT.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:
ISF::ISFParticleContainer
std::list< ISF::ISFParticle * > ISFParticleContainer
generic ISFParticle container (not necessarily a std::list!)
Definition: ISFParticleContainer.h:23
AtlasDetDescr::fNumAtlasRegions
@ fNumAtlasRegions
Definition: AtlasRegion.h:39
ISF::fAtlasMuonEntry
@ fAtlasMuonEntry
Definition: EntryLayer.h:38
ISF::SimKernelMT::m_simulationTools
ToolHandleArray< ISimulatorTool > m_simulationTools
Simulation Tools.
Definition: SimKernelMT.h:116
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
Trk::ParticleSwitcher::particle
constexpr ParticleHypothesis particle[PARTICLEHYPOTHESES]
the array of masses
Definition: ParticleHypothesis.h:76
ISF::SimKernelMT::m_inputConverter
ServiceHandle< IInputConverter > m_inputConverter
Input converter service (from Generator->ISF particle types)
Definition: SimKernelMT.h:107
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
ISF::SimKernelMT::m_muonExitLayerKey
SG::WriteHandleKey< TrackRecordCollection > m_muonExitLayerKey
Definition: SimKernelMT.h:98
AtlasDetDescr::fAtlasForward
@ fAtlasForward
Definition: AtlasRegion.h:34
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
ISF::fAtlasMuonExit
@ fAtlasMuonExit
Definition: EntryLayer.h:39
SG::ReadHandle< McEventCollection >
AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
AtlasDetDescr::AtlasRegion
AtlasRegion
Definition: AtlasRegion.h:27
ISF::SimKernelMT::m_outputTruthKey
SG::WriteHandleKey< McEventCollection > m_outputTruthKey
Output Simulation Truth collection.
Definition: SimKernelMT.h:94
ISF::ISFParticleOrderedQueue
std::priority_queue< ISF::ISFParticle *, ISF::ISFParticleVector, ISF::ISFParticleOrdering > ISFParticleOrderedQueue
the actual particle priority_queue
Definition: ISFParticleOrderedQueue.h:28
ISF::ParticleKiller
@ ParticleKiller
Definition: SimulationFlavor.h:21
HepMC::maxGeneratedVertexBarcode
int maxGeneratedVertexBarcode(const HepMC::GenEvent *genEvent)
Definition: MagicNumbers.h:377
ISF::SimKernelMT::m_simSelectors
std::array< ToolHandleArray< ISimulationSelector >, AtlasDetDescr::fNumAtlasRegions > m_simSelectors
The simulation selectors defining the "routing chain".
Definition: SimKernelMT.h:131
AthCommonDataStore< AthCommonMsg< Algorithm > >::m_evtStore
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
Definition: AthCommonDataStore.h:390
AthCommonDataStore< AthCommonMsg< Algorithm > >::m_vhka
std::vector< SG::VarHandleKeyArray * > m_vhka
Definition: AthCommonDataStore.h:398
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
AtlasDetDescr::AtlasRegionHelper::getName
static const char * getName(int region)
Definition: AtlasRegionHelper.cxx:13
ISF::SimKernelMT::identifySimulator
ISimulatorTool & identifySimulator(const ISF::ISFParticle &particle)
Returns the simulator to use for the given particle.
Definition: SimKernelMT.cxx:319
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
SG::VarHandleKeyArray::setOwner
virtual void setOwner(IDataHandleHolder *o)=0
ISF::SimKernelMT::m_particleKillerTool
ISimulatorTool * m_particleKillerTool
When no appropriate simulator can be found for a given particle, the particle is sent to this "partic...
Definition: SimKernelMT.h:119
ISF::SimKernelMT::m_useShadowEvent
BooleanProperty m_useShadowEvent
Definition: SimKernelMT.h:100
ISF::SimKernelMT::m_truthRecordSvc
ServiceHandle< ITruthSvc > m_truthRecordSvc
Central truth service.
Definition: SimKernelMT.h:110
AthCommonDataStore
Definition: AthCommonDataStore.h:52
AthAlgorithm::sysInitialize
virtual StatusCode sysInitialize() override
Override sysInitialize.
Definition: AthAlgorithm.cxx:66
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
AtlasDetDescr::fAtlasMS
@ fAtlasMS
Definition: AtlasRegion.h:36
AthCommonDataStore< AthCommonMsg< Algorithm > >::outputHandles
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override
Return this algorithm's output handles.
ISF::SimKernelMT::m_maxParticleVectorSize
size_t m_maxParticleVectorSize
Number of particles simultaneously sent to simulator.
Definition: SimKernelMT.h:137
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
ISF::SimKernelMT::m_qspatcher
ServiceHandle< Simulation::IZeroLifetimePatcher > m_qspatcher
Quasi-Stable Particle Simulation Patcher.
Definition: SimKernelMT.h:113
ISF::ISFParticleVector
std::vector< ISF::ISFParticle * > ISFParticleVector
ISFParticle vector.
Definition: ISFParticleContainer.h:26
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
AthCommonDataStore< AthCommonMsg< Algorithm > >::m_detStore
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
Definition: AthCommonDataStore.h:393
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
SG::VarHandleKeyArray::renounce
virtual void renounce()=0
HepMC::UNDEFINED_ID
constexpr int UNDEFINED_ID
Definition: MagicNumbers.h:55
SG::HandleClassifier::type
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
Definition: HandleClassifier.h:54
GetAllXsec.entry
list entry
Definition: GetAllXsec.py:132
ISF::SimKernelMT::m_entryLayerTool
PublicToolHandle< IEntryLayerTool > m_entryLayerTool
AthenaTool responsible for writing Calo/Muon Entry/Exit Layer collection.
Definition: SimKernelMT.h:122
merge_scale_histograms.doc
string doc
Definition: merge_scale_histograms.py:9
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
AtlasDetDescr::fAtlasCavern
@ fAtlasCavern
Definition: AtlasRegion.h:37
AtlasDetDescr::fAtlasID
@ fAtlasID
Definition: AtlasRegion.h:33
ISF::SimKernelMT::m_geoIDSvc
ServiceHandle< IGeoIDSvc > m_geoIDSvc
Service to set particle GeoIDs.
Definition: SimKernelMT.h:125
ISF::SimKernelMT::m_caloEntryLayerKey
SG::WriteHandleKey< TrackRecordCollection > m_caloEntryLayerKey
Output TrackRecordCollections.
Definition: SimKernelMT.h:96
AtlasDetDescr::fAtlasCalo
@ fAtlasCalo
Definition: AtlasRegion.h:35
SG::WriteHandle< McEventCollection >
AthAlgorithm::m_extendedExtraObjects
DataObjIDColl m_extendedExtraObjects
Definition: AthAlgorithm.h:79
a
TList * a
Definition: liststreamerinfos.cxx:10
python.selector.AtlRunQuerySelectorLhcOlc.selector
selector
Definition: AtlRunQuerySelectorLhcOlc.py:611
h
HepMC::maxGeneratedParticleBarcode
int maxGeneratedParticleBarcode(const HepMC::GenEvent *genEvent)
Definition: MagicNumbers.h:361
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
ISF::SimKernelMT::m_forceGeoIDSvc
Gaudi::Property< bool > m_forceGeoIDSvc
Force geoID recalculation for each particle.
Definition: SimKernelMT.h:102
ISF::fAtlasCaloEntry
@ fAtlasCaloEntry
Definition: EntryLayer.h:37
LArG4FSStartPointFilter.particles
list particles
Definition: LArG4FSStartPointFilter.py:84
SG::VarHandleBase::vhKey
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
Definition: StoreGate/src/VarHandleBase.cxx:616
declareProperty
#define declareProperty(n, p, h)
Definition: BaseFakeBkgTool.cxx:15
AthAlgorithm::AthAlgorithm
AthAlgorithm()
Default constructor:
ISF::SimKernelMT::m_simToolMap
std::map< ISF::SimulationFlavor, ISimulatorTool * > m_simToolMap
Map of the simulation flavours used in this job to the corresponding Simulation Services.
Definition: SimKernelMT.h:134
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:790
LHEF::Writer
Pythia8::Writer Writer
Definition: Prophecy4fMerger.cxx:12
validAtlasRegion
#define validAtlasRegion(region)
Definition: AtlasRegion.h:15
ISF::SimKernelMT::m_inputEvgenKey
SG::ReadHandleKey< McEventCollection > m_inputEvgenKey
Input Generator Truth collection.
Definition: SimKernelMT.h:92
ISF::SimKernelMT::m_orderingTool
ToolHandle< IParticleOrderingTool > m_orderingTool
Tool to set particle ordering.
Definition: SimKernelMT.h:128
AthCommonDataStore::declareGaudiProperty
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition: AthCommonDataStore.h:156
ISF::SimKernelMT::m_truthPreselectionTool
ToolHandle< IGenEventFilter > m_truthPreselectionTool
Definition: SimKernelMT.h:104
AtlasDetDescr::fFirstAtlasRegion
@ fFirstAtlasRegion
Definition: AtlasRegion.h:31
fitman.k
k
Definition: fitman.py:528
ISF::SimKernelMT::m_muonEntryLayerKey
SG::WriteHandleKey< TrackRecordCollection > m_muonEntryLayerKey
Definition: SimKernelMT.h:97
ServiceHandle< ICondSvc >