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