A tool which transports particles through the Geant4 geometry.
More...
#include <G4CaloTransportTool.h>
|
G4VPhysicalVolume * | m_worldVolume {} |
|
Gaudi::Property< bool > | m_useSimplifiedGeo {this, "UseSimplifiedGeo", true, "Use simplified geometry for particle transport"} |
|
Gaudi::Property< std::string > | m_simplifiedWorldLogName {this, "SimplifiedWorldLogName", "Name of the logical volume of the simplified world"} |
|
Gaudi::Property< std::string > | m_transportLimitVolume {this, "TransportLimitVolume", "Name of the volume until which the particle is transported"} |
|
Gaudi::Property< unsigned int > | m_maxSteps {this, "MaxSteps", 100, "Maximum number of steps in particle transport"} |
|
thread_utils::ThreadLocalHolder< G4PropagatorInField > | m_propagatorHolder |
|
A tool which transports particles through the Geant4 geometry.
- Author
- Joshua Falco Beirer joshu.nosp@m.a.fa.nosp@m.lco.b.nosp@m.eire.nosp@m.r@cer.nosp@m.n.ch
Definition at line 24 of file G4CaloTransportTool.h.
◆ G4CaloTransportTool()
G4CaloTransportTool::G4CaloTransportTool |
( |
const std::string & |
type, |
|
|
const std::string & |
name, |
|
|
const IInterface * |
parent |
|
) |
| |
◆ doStep()
void G4CaloTransportTool::doStep |
( |
G4FieldTrack & |
fieldTrack | ) |
|
|
private |
Definition at line 115 of file G4CaloTransportTool.cxx.
119 auto navigator = propagator->GetNavigatorForPropagating();
121 G4double retSafety = -1.0;
122 G4double currentMinimumStep = 10.0 *
CLHEP::m;
124 G4VPhysicalVolume* currentPhysVol =
125 navigator->LocateGlobalPointAndSetup(fieldTrack.GetPosition(),
nullptr);
127 G4ThreeVector direction = fieldTrack.GetMomentumDirection();
129 navigator->LocateGlobalPointAndSetup(fieldTrack.GetPosition(), &direction);
131 if (fieldTrack.GetCharge() == 0) {
135 G4double stepLength = navigator->ComputeStep(
136 fieldTrack.GetPosition(), fieldTrack.GetMomentumDirection(),
137 currentMinimumStep, retSafety);
140 fieldTrack.SetPosition(fieldTrack.GetPosition() +
142 fieldTrack.GetMomentumDirection().unit());
146 propagator->ComputeStep(fieldTrack, currentMinimumStep, retSafety,
◆ finalize()
StatusCode G4CaloTransportTool::finalize |
( |
| ) |
|
|
finaloverridevirtual |
Definition at line 21 of file G4CaloTransportTool.cxx.
29 delete mapPair.second->GetNavigatorForPropagating();
30 delete mapPair.second;
33 return StatusCode::SUCCESS;
◆ getWorldVolume()
G4VPhysicalVolume * G4CaloTransportTool::getWorldVolume |
( |
| ) |
|
|
private |
Definition at line 72 of file G4CaloTransportTool.cxx.
76 ATH_MSG_INFO(
"Creating simplified world volume for particle transport");
78 G4LogicalVolume* logVol = G4LogicalVolumeStore::GetInstance()->GetVolume(
82 return new G4PVPlacement(
84 G4ThreeVector(0, 0, 0),
86 "simplifiedWorldPhysVol",
93 ATH_MSG_INFO(
"Using full geometry for particle transport");
94 return G4TransportationManager::GetTransportationManager()
95 ->GetNavigatorForTracking()
◆ initializePropagator()
StatusCode G4CaloTransportTool::initializePropagator |
( |
| ) |
|
|
finaloverride |
Definition at line 36 of file G4CaloTransportTool.cxx.
37 ATH_MSG_INFO(
"Initializing G4PropagatorInField for thread "
38 << G4Threading::G4GetThreadId());
45 G4Exception(
"G4CaloTransportTool",
"FailedToGetWorldVolume",
47 "G4CaloTransportTool: Failed to get world volume.");
53 ATH_MSG_INFO(
"Maximum allowed number of steps in particle transport: "
65 "G4CaloTransportTool::initializePropagator() Propagator already "
69 return StatusCode::SUCCESS;
◆ makePropagator()
G4PropagatorInField * G4CaloTransportTool::makePropagator |
( |
| ) |
|
|
private |
Definition at line 100 of file G4CaloTransportTool.cxx.
102 G4Navigator* navigator =
new G4Navigator();
106 G4FieldManager* fieldMgr =
107 G4TransportationManager::GetTransportationManager()->GetFieldManager();
109 G4PropagatorInField* propagator =
110 new G4PropagatorInField(navigator, fieldMgr);
◆ transport()
std::vector< G4FieldTrack > G4CaloTransportTool::transport |
( |
const G4Track & |
G4InputTrack | ) |
|
|
finaloverridevirtual |
Definition at line 153 of file G4CaloTransportTool.cxx.
157 int pdgId = G4InputTrack.GetDefinition()->GetPDGEncoding();
163 std::vector<G4FieldTrack> outputStepVector;
166 G4FieldTrack tmpFieldTrack(
'0');
167 G4FieldTrackUpdator::Update(&tmpFieldTrack, &G4InputTrack);
169 outputStepVector.push_back(tmpFieldTrack);
172 for (
unsigned int iStep = 0; iStep <
m_maxSteps; iStep++) {
174 G4ThreeVector preStepPos = tmpFieldTrack.GetPosition();
175 G4ThreeVector preStepMom = tmpFieldTrack.GetMomentum();
181 outputStepVector.push_back(tmpFieldTrack);
184 auto volume = navigator->LocateGlobalPointAndSetup(
185 tmpFieldTrack.GetPosition(),
nullptr);
187 if (volume !=
nullptr) {
189 std::string volName = volume->GetName();
198 <<
"Transport failure for particle PID: " << pdgId <<
" at step "
200 <<
" - PreStep position: " << preStepPos << G4endl
201 <<
" - PreStep momentum: " << preStepMom << G4endl
202 <<
" - PostStep position: " << tmpFieldTrack.GetPosition() << G4endl
203 <<
" - PostStep momentum: " << tmpFieldTrack.GetMomentum() << G4endl
204 <<
"Possible cause: The transport is likely outside the world volume."
206 <<
"Check if an envelope volume is defined and properly set up."
207 << G4endl <<
"This issue should not occur during normal operation.";
208 G4Exception(
"G4CaloTransportTool::transport",
209 "LocateGlobalPointAndSetup failed: Particle may be "
210 "transported outside the world volume.",
216 return outputStepVector;
◆ m_maxSteps
Gaudi::Property<unsigned int> G4CaloTransportTool::m_maxSteps {this, "MaxSteps", 100, "Maximum number of steps in particle transport"} |
|
private |
◆ m_propagatorHolder
◆ m_simplifiedWorldLogName
Gaudi::Property<std::string> G4CaloTransportTool::m_simplifiedWorldLogName {this, "SimplifiedWorldLogName", "Name of the logical volume of the simplified world"} |
|
private |
◆ m_transportLimitVolume
Gaudi::Property<std::string> G4CaloTransportTool::m_transportLimitVolume {this, "TransportLimitVolume", "Name of the volume until which the particle is transported"} |
|
private |
◆ m_useSimplifiedGeo
Gaudi::Property<bool> G4CaloTransportTool::m_useSimplifiedGeo {this, "UseSimplifiedGeo", true, "Use simplified geometry for particle transport"} |
|
private |
◆ m_worldVolume
G4VPhysicalVolume* G4CaloTransportTool::m_worldVolume {} |
|
private |
The documentation for this class was generated from the following files: