Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 // 27 // 28 // 29 // ------------------------------------------------------------ 30 // GEANT 4 include file implementation 31 // ------------------------------------------------------------ 32 // 33 // Class description: 34 // 35 // G4CoupledTransportation is an optional process to transport 36 // a particle, in case of coupled navigation in parallel geometries 37 // i.e. the geometrical propagation will be done 38 // encountering the geometrical volumes of the detectors and 39 // those of parallel geometries (eg for biasing, scoring, fast simulation) 40 // It is tasked with updating the "safety" to reflect the geometrical 41 // distance to the nearest volume, and the time of flight of the particle. 42 43 // ======================================================================= 44 // Created: 17 May 2006, J. Apostolakis 45 // ======================================================================= 46 #ifndef G4CoupledTransportation_hh 47 #define G4CoupledTransportation_hh 1 48 49 #include "G4Transportation.hh" 50 51 #include "G4Track.hh" 52 #include "G4Step.hh" 53 54 class G4PathFinder; 55 56 class G4CoupledTransportation : public G4Transportation 57 { 58 59 public: // with description 60 61 G4CoupledTransportation( G4int verbosityLevel= 0); 62 ~G4CoupledTransportation(); 63 64 G4double AlongStepGetPhysicalInteractionLength( 65 const G4Track& track, 66 G4double previousStepSize, 67 G4double currentMinimumStep, 68 G4double& currentSafety, 69 G4GPILSelection* selection 70 ); 71 72 // AlongStepDoIt is implemented by G4Transportation. 73 74 G4VParticleChange* PostStepDoIt( 75 const G4Track& track, 76 const G4Step& stepData 77 ); 78 // Responsible for the relocation 79 80 // PostStepGetPhysicalInteractionLength is implemented by 81 // G4Transportation to force PostStepDoIt, but not limiting the step. 82 83 static void SetSignifyStepsInAnyVolume( G4bool anyVol ) 84 { fSignifyStepInAnyVolume = anyVol; } 85 static G4bool GetSignifyStepsInAnyVolume() 86 { return fSignifyStepInAnyVolume; } 87 // Flag in step corresponds to first/last step in a volume 'any' 88 // geometry (if this is true) or refers to first/last step in mass 89 // geometry only (if false) 90 91 // The following methods give access to first/last step in particular 92 // geometry *independent* of the choice of the 'Signify' flag 93 // 94 G4bool IsFirstStepInAnyVolume() const { return fFirstStepInVolume; } 95 G4bool IsLastStepInAnyVolume() const { return fGeometryLimitedStep; } 96 G4bool IsFirstStepInMassVolume() const { return fFirstStepInMassVolume; } 97 G4bool IsLastStepInMassVolume() const { return fMassGeometryLimitedStep; } 98 99 public: // without description 100 101 void StartTracking(G4Track* aTrack); 102 void EndTracking(); 103 104 static G4bool EnableUseMagneticMoment(G4bool useMoment=true) 105 { return EnableMagneticMoment(useMoment); } 106 // Old name ... obsolete 107 108 protected: 109 110 void ReportInexactEnergy(G4double startEnergy, G4double endEnergy); 111 // Issue warning 112 113 void ReportMove( G4ThreeVector OldVector, G4ThreeVector NewVector, 114 const G4String& Quantity ); 115 116 private: 117 118 G4PathFinder* fPathFinder; 119 // The PathFinder used to transport the particle 120 121 G4double fPreviousMassSafety; 122 G4double fPreviousFullSafety; 123 124 G4bool fMassGeometryLimitedStep; 125 // Flag to determine whether a 'mass' boundary was reached. 126 127 private: 128 129 G4bool fFirstStepInMassVolume; 130 // G4bool fLastStepInMassVolume; => use fMassGeometryLimitedStep 131 132 static G4bool fSignifyStepInAnyVolume; 133 // True: First/Last step in any one of the geometries 134 // False: First/Last step in volume of 'mass' geometry 135 }; 136 137 #endif 138