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 // G4ParticleChangeForTransport << 27 // 26 // 28 // Class description: << 29 // 27 // 30 // Concrete class for ParticleChange for trans << 28 // 31 << 29 // ------------------------------------------------------------ 32 // Author: Hisaya Kurashige, 10 May 1998 << 30 // GEANT 4 class header file 33 // ------------------------------------------- << 31 // 34 #ifndef G4ParticleChangeForTransport_hh << 32 // 35 #define G4ParticleChangeForTransport_hh 1 << 33 // ------------------------------------------------------------ >> 34 // Implemented for the new scheme 10 May. 1998 H.Kurahige >> 35 // Added theMaterialChange 16 FEb. 2000 H.Kurahige >> 36 // Remove thePolarizationChange 12 Feb. 2001 H.Kurashige >> 37 // Modification for G4TouchableHandle 22 Oct. 2001 R.Chytracek >> 38 // Add MaterialCutsCouple 8 Oct. 2002 H.Kurashige >> 39 // >> 40 // Class Description >> 41 // This class is a concrete class for ParticleChange for transportation >> 42 // >> 43 #ifndef G4ParticleChangeForTransport_h >> 44 #define G4ParticleChangeForTransport_h 1 36 45 37 #include "globals.hh" 46 #include "globals.hh" 38 #include "G4ios.hh" 47 #include "G4ios.hh" 39 #include "G4TouchableHandle.hh" 48 #include "G4TouchableHandle.hh" 40 #include "G4ParticleChange.hh" 49 #include "G4ParticleChange.hh" 41 50 42 class G4MaterialCutsCouple; 51 class G4MaterialCutsCouple; 43 class G4VSensitiveDetector; 52 class G4VSensitiveDetector; 44 53 45 class G4ParticleChangeForTransport final : pub << 54 class G4ParticleChangeForTransport: public G4ParticleChange 46 { << 55 { 47 public: 56 public: 48 << 57 // default constructor 49 G4ParticleChangeForTransport(); 58 G4ParticleChangeForTransport(); 50 59 51 ~G4ParticleChangeForTransport() override = << 60 // destructor >> 61 virtual ~G4ParticleChangeForTransport(); 52 62 53 G4ParticleChangeForTransport(const G4Parti << 63 protected: 54 G4ParticleChangeForTransport& operator=(co << 64 // hide copy constructor and assignment operator as protected >> 65 G4ParticleChangeForTransport(const G4ParticleChangeForTransport &right); >> 66 G4ParticleChangeForTransport & operator=(const G4ParticleChangeForTransport &right); >> 67 >> 68 public: // with description >> 69 // ---------------------------------------------------- >> 70 // --- the following methods are for updating G4Step ----- >> 71 // Return the pointer to the G4Step after updating the Step information >> 72 // by using final state information of the track given by a physics >> 73 // process >> 74 virtual G4Step* UpdateStepForAlongStep(G4Step* Step); >> 75 virtual G4Step* UpdateStepForAtRest(G4Step* Step); >> 76 virtual G4Step* UpdateStepForPostStep(G4Step* Step); >> 77 // A physics process gives the final state of the particle >> 78 // based on information of G4Track (or equivalently the PreStepPoint) >> 79 >> 80 virtual void Initialize(const G4Track&); >> 81 // Initialize all propoerties by using G4Track information >> 82 >> 83 // ---------------------------------------------------- >> 84 //--- methods to keep information of the final state-- >> 85 // IMPORTANT NOTE: Although the name of the class and methods are >> 86 // "Change", what it stores (and returns in get) are the "FINAL" >> 87 // values of the Position, Momentum, etc. >> 88 >> 89 const G4TouchableHandle& GetTouchableHandle() const; >> 90 void SetTouchableHandle(const G4TouchableHandle& fTouchable); >> 91 // Get/Set the touchable of the current particle. >> 92 // Note: Touchable in PostStepPoint will be updated only after PostStepDoIt >> 93 >> 94 G4Material* GetMaterialInTouchable() const; >> 95 void SetMaterialInTouchable(G4Material* fMaterial); >> 96 // Get/Propose the material in the touchable of the current particle. >> 97 >> 98 const G4MaterialCutsCouple* GetMaterialCutsCoupleInTouchable() const; >> 99 void SetMaterialCutsCoupleInTouchable(const G4MaterialCutsCouple* fMaterialCutsCouple); >> 100 // Get/Set the materialCutsCouple in the touchable of the current particle. >> 101 >> 102 G4VSensitiveDetector* GetSensitiveDetectorInTouchable() const; >> 103 void SetSensitiveDetectorInTouchable(G4VSensitiveDetector* fSensitiveDetector); >> 104 // Get/Set the sensitive detector in the touchable of the current particle. 55 105 56 // --- the following methods are for updatin << 106 G4bool GetMomentumChanged() const; 57 // Return the pointer to the G4Step after up << 107 void SetMomentumChanged(G4bool b); 58 // by using final state information of the t << 59 << 60 G4Step* UpdateStepForAlongStep(G4Step* Ste << 61 G4Step* UpdateStepForAtRest(G4Step* Step) << 62 G4Step* UpdateStepForPostStep(G4Step* Step << 63 // A physics process gives the final sta << 64 // based on information of G4Track (or e << 65 << 66 void Initialize(const G4Track&) final; << 67 // Initialize all properties by using G4 << 68 << 69 // --- methods to keep information of the fi << 70 // IMPORTANT NOTE: despite the name, what th << 71 // through its methods, are the "FINAL" valu << 72 << 73 inline const G4TouchableHandle& GetTouchab << 74 inline void SetTouchableHandle(const G4Tou << 75 // Get/Set the touchable of the current << 76 // Note: Touchable in PostStepPoint will << 77 // PostStepDoIt << 78 << 79 inline G4Material* GetMaterialInTouchable( << 80 inline void SetMaterialInTouchable(G4Mater << 81 // Get/Propose the material in the touch << 82 << 83 inline const G4MaterialCutsCouple* GetMate << 84 inline void SetMaterialCutsCoupleInTouchab << 85 const G4MaterialCutsCouple* fMaterialCutsC << 86 // Get/Set the materialCutsCouple in the << 87 // particle << 88 << 89 inline G4VSensitiveDetector* GetSensitiveD << 90 inline void SetSensitiveDetectorInTouchabl << 91 G4VSensitiveDetector* fSensitiveDetector); << 92 // Get/Set the sensitive detector in the << 93 << 94 inline G4bool GetMomentumChanged() const; << 95 inline void SetMomentumChanged(G4bool b); << 96 << 97 inline void << 98 SetPointerToVectorOfAuxiliaryPoints(std::v << 99 inline std::vector<G4ThreeVector>* << 100 GetPointerToVectorOfAuxiliaryPoints() cons << 101 // Smooth representation of curved traje << 102 108 103 void DumpInfo() const final; << 109 public: 104 << 110 virtual void DumpInfo() const; 105 private: << 106 111 >> 112 protected: 107 G4TouchableHandle theTouchableHandle; 113 G4TouchableHandle theTouchableHandle; 108 // The changed touchable of a given part << 114 // The changed touchable of a given particle. 109 115 110 G4bool isMomentumChanged = false; << 116 public: 111 // The flag which is set if momentum is << 112 117 113 G4Material* theMaterialChange = nullptr; << 118 // Prototype implementation of smooth representation of curved trajectories. >> 119 // Auxiliary points are ThreeVectors for now; change to G4AuxiliaryPoints. 114 120 115 const G4MaterialCutsCouple* theMaterialCut << 121 inline void SetPointerToVectorOfAuxiliaryPoints( std::vector<G4ThreeVector>* theNewVectorPointer ); >> 122 inline std::vector<G4ThreeVector>* GetPointerToVectorOfAuxiliaryPoints() const; 116 123 117 G4VSensitiveDetector* theSensitiveDetector << 124 private: 118 // The material (and MaterialCutsCouple) << 125 G4bool isMomentumChanged; 119 // currently locates << 126 // The flag which is set if momentum is changed in current step >> 127 G4Material* theMaterialChange; >> 128 const G4MaterialCutsCouple* theMaterialCutsCoupleChange; >> 129 G4VSensitiveDetector* theSensitiveDetectorChange; >> 130 // The material (and MaterialCutsCouple) where given track >> 131 // currently locates 120 132 121 std::vector<G4ThreeVector>* fpVectorOfAuxi << 133 private: >> 134 std::vector<G4ThreeVector>* fpVectorOfAuxiliaryPointsPointer; 122 }; 135 }; 123 136 124 #include "G4ParticleChangeForTransport.icc" 137 #include "G4ParticleChangeForTransport.icc" 125 138 126 #endif 139 #endif >> 140 >> 141 >> 142 >> 143 >> 144 >> 145 127 146