ATLAS Offline Software
G4CaloTransportTool.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef G4ATLASTOOLS_G4CALOTRANSPORTTOOL_H
6 #define G4ATLASTOOLS_G4CALOTRANSPORTTOOL_H
7 
10 #include "G4PropagatorInField.hh"
11 
12 #include <memory>
13 #include <vector>
14 
15 class G4Track;
16 class G4VPhysicalVolume;
17 class G4FieldTrack;
18 
24 class G4CaloTransportTool : virtual public extends<AthAlgTool, IG4CaloTransportTool>
25 {
26 
27  public:
28 
29  G4CaloTransportTool(const std::string&, const std::string&, const IInterface*);
30 
31  // Algorithm finalize at begin of job
32  virtual StatusCode finalize() override final;
33  // Initialize propagator for the current thread
34  StatusCode initializePropagator() override final;
35  // Transport input track through the geometry
36  virtual std::vector<G4FieldTrack> transport(const G4Track& G4InputTrack) override final;
37 
38  private:
39  // Deleter for the unique_ptr managing the G4PropagatorInField
40  struct Deleter {
41  void operator()(G4PropagatorInField*) const;
42  };
43 
44  // Get the world volume in which the particle transport is performed
45  G4VPhysicalVolume* getWorldVolume();
46  // Create and return a new propagator
47  G4PropagatorInField* makePropagator();
48  // Advance track by single Geant4 step in geometry
49  void doStep(G4FieldTrack& fieldTrack);
50  // Pointer to the physical volume of the world (either simplified or full geometry)
51  G4VPhysicalVolume* m_worldVolume{};
52 
53  // Whether to use simplified geometry for particle transport
54  Gaudi::Property<bool> m_useSimplifiedGeo{this, "UseSimplifiedGeo", true, "Use simplified geometry for particle transport"};
55  // Name of the logical volume of the simplified world as defined in the loaded GDML file
56  Gaudi::Property<std::string> m_simplifiedWorldLogName{this, "SimplifiedWorldLogName", "Name of the logical volume of the simplified world"};
57  // Name of volume until which the particle is tracked in transport
58  Gaudi::Property<std::string> m_transportLimitVolume{this, "TransportLimitVolume", "Name of the volume until which the particle is transported"};
59  // Maximum number of steps in particle transport
60  Gaudi::Property<unsigned int> m_maxSteps{this, "MaxSteps", 100, "Maximum number of steps in particle transport"};
61  // Thread local propagator
62  static thread_local std::unique_ptr<G4PropagatorInField, Deleter> s_propagator;
63 
64 
65 }; // class G4CaloTransportTool
66 
67 
68 #endif // G4ATLASTOOLS_G4CALOTRANSPORTTOOL_H
G4CaloTransportTool::finalize
virtual StatusCode finalize() override final
Definition: G4CaloTransportTool.cxx:30
G4CaloTransportTool::m_transportLimitVolume
Gaudi::Property< std::string > m_transportLimitVolume
Definition: G4CaloTransportTool.h:58
G4CaloTransportTool::m_simplifiedWorldLogName
Gaudi::Property< std::string > m_simplifiedWorldLogName
Definition: G4CaloTransportTool.h:56
G4CaloTransportTool::m_worldVolume
G4VPhysicalVolume * m_worldVolume
Definition: G4CaloTransportTool.h:51
G4CaloTransportTool::m_maxSteps
Gaudi::Property< unsigned int > m_maxSteps
Definition: G4CaloTransportTool.h:60
G4CaloTransportTool::s_propagator
static thread_local std::unique_ptr< G4PropagatorInField, Deleter > s_propagator
Definition: G4CaloTransportTool.h:62
G4CaloTransportTool::Deleter::operator()
void operator()(G4PropagatorInField *) const
Definition: G4CaloTransportTool.cxx:20
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
AthAlgTool.h
G4CaloTransportTool::G4CaloTransportTool
G4CaloTransportTool(const std::string &, const std::string &, const IInterface *)
Definition: G4CaloTransportTool.cxx:25
G4CaloTransportTool::transport
virtual std::vector< G4FieldTrack > transport(const G4Track &G4InputTrack) override final
Definition: G4CaloTransportTool.cxx:152
G4CaloTransportTool::makePropagator
G4PropagatorInField * makePropagator()
Definition: G4CaloTransportTool.cxx:101
IG4CaloTransportTool.h
G4CaloTransportTool::getWorldVolume
G4VPhysicalVolume * getWorldVolume()
Definition: G4CaloTransportTool.cxx:73
G4CaloTransportTool::Deleter
Definition: G4CaloTransportTool.h:40
G4CaloTransportTool::initializePropagator
StatusCode initializePropagator() override final
Definition: G4CaloTransportTool.cxx:39
G4CaloTransportTool::doStep
void doStep(G4FieldTrack &fieldTrack)
Definition: G4CaloTransportTool.cxx:115
G4CaloTransportTool::m_useSimplifiedGeo
Gaudi::Property< bool > m_useSimplifiedGeo
Definition: G4CaloTransportTool.h:54
G4CaloTransportTool
A tool which transports particles through the Geant4 geometry.
Definition: G4CaloTransportTool.h:25