Geant4 Cross Reference |
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