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: