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