Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/transportation/include/G4CoupledTransportation.hh

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /processes/transportation/include/G4CoupledTransportation.hh (Version 11.3.0) and /processes/transportation/include/G4CoupledTransportation.hh (Version 9.4.p2)


  1 //                                                  1 //
  2 // *******************************************      2 // ********************************************************************
  3 // * License and Disclaimer                         3 // * License and Disclaimer                                           *
  4 // *                                                4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of th      5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided      6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License      7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/      8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.           9 // * include a list of copyright holders.                             *
 10 // *                                               10 // *                                                                  *
 11 // * Neither the authors of this software syst     11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing fin     12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warran     13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assum     14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file      15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitatio     16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                               17 // *                                                                  *
 18 // * This  code  implementation is the result      18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboratio     19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distri     20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  ag     21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publicati     22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Sof     23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // *******************************************     24 // ********************************************************************
 25 //                                                 25 //
 26 //                                                 26 //
                                                   >>  27 // $Id: G4CoupledTransportation.hh,v 1.8 2011-01-05 00:59:03 asaim Exp $
                                                   >>  28 // GEANT4 tag $Name: geant4-09-04-patch-02 $
 27 //                                                 29 //
 28 //                                                 30 // 
 29 // -------------------------------------------     31 // ------------------------------------------------------------
 30 //        GEANT 4  include file implementation     32 //        GEANT 4  include file implementation
 31 // -------------------------------------------     33 // ------------------------------------------------------------
 32 //                                                 34 //
 33 // Class description:                              35 // Class description:
 34 //                                                 36 //
 35 // G4CoupledTransportation is an optional proc     37 // G4CoupledTransportation is an optional process to transport  
 36 // a particle, in case of coupled navigation i     38 // a particle, in case of coupled navigation in parallel geometries
 37 //  i.e. the geometrical propagation will be d     39 //  i.e. the geometrical propagation will be done
 38 //   encountering the geometrical volumes of t     40 //   encountering the geometrical volumes of the detectors and
 39 //   those of parallel geometries (eg for bias     41 //   those of parallel geometries (eg for biasing, scoring, fast simulation)
 40 // It is tasked with updating the "safety" to      42 // It is tasked with updating the "safety" to reflect the geometrical
 41 //   distance to the nearest volume, and the t     43 //   distance to the nearest volume, and the time of flight of the particle.
 42                                                    44 
 43 // ===========================================     45 // =======================================================================
 44 // Created:  17 May 2006, J. Apostolakis           46 // Created:  17 May 2006, J. Apostolakis
 45 // ===========================================     47 // =======================================================================
 46 #ifndef G4CoupledTransportation_hh                 48 #ifndef G4CoupledTransportation_hh
 47 #define G4CoupledTransportation_hh 1               49 #define G4CoupledTransportation_hh 1
 48                                                    50 
 49 #include "G4Transportation.hh"                 <<  51 #include "G4VProcess.hh"
                                                   >>  52 
                                                   >>  53 #include "G4FieldManager.hh"
                                                   >>  54 
                                                   >>  55 #include "G4Navigator.hh"
                                                   >>  56 #include "G4TransportationManager.hh"
                                                   >>  57 #include "G4PropagatorInField.hh"
                                                   >>  58 #include "G4PathFinder.hh"
 50                                                    59 
 51 #include "G4Track.hh"                              60 #include "G4Track.hh"
 52 #include "G4Step.hh"                               61 #include "G4Step.hh"
                                                   >>  62 #include "G4ParticleChangeForTransport.hh"
                                                   >>  63 class G4SafetyHelper; 
 53                                                    64 
 54 class G4PathFinder;                            <<  65 class G4CoupledTransportation : public G4VProcess 
 55                                                << 
 56 class G4CoupledTransportation : public G4Trans << 
 57 {                                                  66 {
                                                   >>  67   // Concrete class that does the geometrical transport 
 58                                                    68 
 59   public:  // with description                     69   public:  // with description
 60                                                    70 
 61      G4CoupledTransportation( G4int verbosityL     71      G4CoupledTransportation( G4int verbosityLevel= 0); 
 62      ~G4CoupledTransportation();                   72      ~G4CoupledTransportation(); 
 63                                                    73 
 64      G4double      AlongStepGetPhysicalInterac     74      G4double      AlongStepGetPhysicalInteractionLength(
 65                              const G4Track& tr     75                              const G4Track& track,
 66                                    G4double  p     76                                    G4double  previousStepSize,
 67                                    G4double  c     77                                    G4double  currentMinimumStep, 
 68                                    G4double& c     78                                    G4double& currentSafety,
 69                                    G4GPILSelec     79                                    G4GPILSelection* selection
 70                             );                     80                             );
 71                                                    81 
 72      // AlongStepDoIt is implemented by G4Tran <<  82      G4VParticleChange* AlongStepDoIt(
                                                   >>  83                              const G4Track& track,
                                                   >>  84                              const G4Step& stepData
                                                   >>  85                             );
 73                                                    86 
 74      G4VParticleChange* PostStepDoIt(              87      G4VParticleChange* PostStepDoIt(
 75                              const G4Track& tr     88                              const G4Track& track,
 76                              const G4Step&  st     89                              const G4Step&  stepData
 77                             );                     90                             );
 78        // Responsible for the relocation       <<  91        // Responsible for the relocation.
 79                                                    92 
 80      // PostStepGetPhysicalInteractionLength i <<  93      G4double PostStepGetPhysicalInteractionLength(
 81      // G4Transportation to force PostStepDoIt <<  94                              const G4Track& ,
                                                   >>  95                              G4double   previousStepSize,
                                                   >>  96                              G4ForceCondition* pForceCond
                                                   >>  97                             );
                                                   >>  98        // Forces the PostStepDoIt action to be called, 
                                                   >>  99        // but does not limit the step.
 82                                                   100 
 83      static void  SetSignifyStepsInAnyVolume(  << 101      G4PropagatorInField* GetPropagatorInField();
 84        { fSignifyStepInAnyVolume = anyVol; }   << 102      void SetPropagatorInField( G4PropagatorInField* pFieldPropagator);
 85      static G4bool GetSignifyStepsInAnyVolume( << 103        // Access/set the assistant class that Propagate in a Field.
 86        { return fSignifyStepInAnyVolume; }     << 104 
 87      // Flag in step corresponds to first/last << 105      inline void   SetVerboseLevel( G4int verboseLevel );
 88      // geometry (if this is true) or refers t << 106      inline G4int  GetVerboseLevel() const;
 89      // geometry only (if false)               << 107        // Level of warnings regarding eg energy conservation
 90                                                << 108        // in field integration.
 91      // The following methods give access to f << 109 
 92      // geometry *independent* of the choice o << 110      inline G4double GetThresholdWarningEnergy() const; 
 93      //                                        << 111      inline G4double GetThresholdImportantEnergy() const; 
 94      G4bool IsFirstStepInAnyVolume() const { r << 112      inline G4int GetThresholdTrials() const; 
 95      G4bool IsLastStepInAnyVolume() const { re << 113 
 96      G4bool IsFirstStepInMassVolume() const {  << 114      inline void SetThresholdWarningEnergy( G4double newEnWarn ); 
 97      G4bool IsLastStepInMassVolume() const { r << 115      inline void SetThresholdImportantEnergy( G4double newEnImp ); 
                                                   >> 116      inline void SetThresholdTrials(G4int newMaxTrials ); 
                                                   >> 117 
                                                   >> 118      // Get/Set parameters for killing loopers: 
                                                   >> 119      //   Above 'important' energy a 'looping' particle in field will 
                                                   >> 120      //   *NOT* be abandoned, except after fThresholdTrials attempts.
                                                   >> 121      // Below Warning energy, no verbosity for looping particles is issued
                                                   >> 122 
                                                   >> 123      inline G4double GetMaxEnergyKilled() const; 
                                                   >> 124      inline G4double GetSumEnergyKilled() const;
                                                   >> 125      inline void ResetKilledStatistics( G4int report = 1);      
                                                   >> 126      // Statistics for tracks killed (currently due to looping in field)
 98                                                   127 
 99   public:  // without description                 128   public:  // without description
100                                                   129 
101      void StartTracking(G4Track* aTrack);         130      void StartTracking(G4Track* aTrack); 
102      void EndTracking();                          131      void EndTracking();
103                                                   132 
104      static G4bool EnableUseMagneticMoment(G4b << 133      G4double AtRestGetPhysicalInteractionLength(
105       { return EnableMagneticMoment(useMoment) << 134                              const G4Track& ,
106      // Old name ... obsolete                  << 135                              G4ForceCondition* 
107                                                << 136                             ) { return -1.0; };
                                                   >> 137        // No operation in  AtRestDoIt.
                                                   >> 138 
                                                   >> 139      G4VParticleChange* AtRestDoIt(
                                                   >> 140                              const G4Track& ,
                                                   >> 141                              const G4Step&
                                                   >> 142                             ) {return 0;};
                                                   >> 143        // No operation in  AtRestDoIt.
                                                   >> 144 
108   protected:                                      145   protected:
109                                                   146 
                                                   >> 147      G4bool               DoesGlobalFieldExist();
                                                   >> 148        // Checks whether a field exists for the "global" field manager.
                                                   >> 149 
110      void ReportInexactEnergy(G4double startEn    150      void ReportInexactEnergy(G4double startEnergy, G4double endEnergy);
111        // Issue warning                           151        // Issue warning
112                                                   152 
113      void ReportMove( G4ThreeVector OldVector, << 
114                       const G4String& Quantity << 
115                                                << 
116   private:                                        153   private:
117                                                   154 
                                                   >> 155      G4Navigator*         fMassNavigator;
                                                   >> 156        // The navigator for the 'mass' geometry (the real one, that physics occurs in)
118      G4PathFinder*        fPathFinder;            157      G4PathFinder*        fPathFinder;
                                                   >> 158      G4int fNavigatorId;
119        // The PathFinder used to transport the    159        // The PathFinder used to transport the particle
120                                                   160 
                                                   >> 161      G4PropagatorInField* fFieldPropagator;
                                                   >> 162        // Still required in order to find/set the fieldmanager
                                                   >> 163 
                                                   >> 164      G4bool fGlobalFieldExists; 
                                                   >> 165      // G4bool fStartedNewTrack;   //  True for first step or restarted tracking 
                                                   >> 166                                    //    until first step's AlongStepGPIL
                                                   >> 167 
                                                   >> 168      G4ThreeVector        fTransportEndPosition;
                                                   >> 169      G4ThreeVector        fTransportEndMomentumDir;
                                                   >> 170      G4double             fTransportEndKineticEnergy;
                                                   >> 171      G4ThreeVector        fTransportEndSpin;
                                                   >> 172      G4bool               fMomentumChanged;
                                                   >> 173      G4bool               fEnergyChanged;
                                                   >> 174        // The particle's state after this Step, Store for DoIt
                                                   >> 175 
                                                   >> 176      G4bool               fEndGlobalTimeComputed; 
                                                   >> 177      G4double             fCandidateEndGlobalTime;
                                                   >> 178 
                                                   >> 179      G4bool               fParticleIsLooping;
                                                   >> 180    
                                                   >> 181      G4ThreeVector        fPreviousSftOrigin; 
121      G4double             fPreviousMassSafety;    182      G4double             fPreviousMassSafety;
122      G4double             fPreviousFullSafety;    183      G4double             fPreviousFullSafety;
123                                                   184 
                                                   >> 185      G4TouchableHandle    fCurrentTouchableHandle;
                                                   >> 186      
                                                   >> 187      // G4bool         fFieldExists;
                                                   >> 188        // Whether a magnetic field exists ...
                                                   >> 189        // A data member for this is problematic: it is useful only if it
                                                   >> 190        // can be initialised and updated -- and a scheme is not yet possible.
                                                   >> 191 
124      G4bool fMassGeometryLimitedStep;             192      G4bool fMassGeometryLimitedStep;
125        // Flag to determine whether a 'mass' b    193        // Flag to determine whether a 'mass' boundary was reached.
                                                   >> 194      G4bool fAnyGeometryLimitedStep; 
                                                   >> 195        // Did any geometry limit the step ?
126                                                   196 
127   private:                                     << 197      G4ParticleChangeForTransport fParticleChange;
                                                   >> 198        // New ParticleChange
128                                                   199 
129      G4bool fFirstStepInMassVolume;            << 200      G4double endpointDistance;
130      // G4bool fLastStepInMassVolume; => use f << 
131                                                   201 
132      static G4bool fSignifyStepInAnyVolume;    << 202 
133        // True: First/Last step in any one of  << 203   // Thresholds for looping particles: 
134        // False: First/Last step in volume of  << 204   // 
                                                   >> 205      G4double fThreshold_Warning_Energy;     //  Warn above this energy
                                                   >> 206      G4double fThreshold_Important_Energy;   //  Hesitate above this
                                                   >> 207      G4int    fThresholdTrials;              //    for this no of trials
                                                   >> 208        // Above 'important' energy a 'looping' particle in field will 
                                                   >> 209        //   *NOT* be abandoned, except after fThresholdTrials attempts.
                                                   >> 210      G4double fUnimportant_Energy;
                                                   >> 211        //  Below this energy, no verbosity for looping particles is issued
                                                   >> 212 
                                                   >> 213   // Counter for steps in which particle reports 'looping',
                                                   >> 214   //   if it is above 'Important' Energy 
                                                   >> 215      G4int    fNoLooperTrials; 
                                                   >> 216   // Statistics for tracks abandoned
                                                   >> 217      G4double fSumEnergyKilled;
                                                   >> 218      G4double fMaxEnergyKilled;
                                                   >> 219 
                                                   >> 220      G4SafetyHelper* fpSafetyHelper;  // To pass it the safety value obtained
                                                   >> 221 
                                                   >> 222   // Verbosity 
                                                   >> 223      G4int    fVerboseLevel;
                                                   >> 224        // Verbosity level for warnings
                                                   >> 225        // eg about energy non-conservation in magnetic field.
135 };                                                226 };
                                                   >> 227 
                                                   >> 228 #include "G4CoupledTransportation.icc"
136                                                   229 
137 #endif                                            230 #endif  
138                                                   231