00001 // 00002 // ******************************************************************** 00003 // * License and Disclaimer * 00004 // * * 00005 // * The Geant4 software is copyright of the Copyright Holders of * 00006 // * the Geant4 Collaboration. It is provided under the terms and * 00007 // * conditions of the Geant4 Software License, included in the file * 00008 // * LICENSE and available at http://cern.ch/geant4/license . These * 00009 // * include a list of copyright holders. * 00010 // * * 00011 // * Neither the authors of this software system, nor their employing * 00012 // * institutes,nor the agencies providing financial support for this * 00013 // * work make any representation or warranty, express or implied, * 00014 // * regarding this software system or assume any liability for its * 00015 // * use. Please see the license in the file LICENSE and URL above * 00016 // * for the full disclaimer and the limitation of liability. * 00017 // * * 00018 // * This code implementation is the result of the scientific and * 00019 // * technical work of the GEANT4 collaboration. * 00020 // * By using, copying, modifying or distributing the software (or * 00021 // * any work based on the software) you agree to acknowledge its * 00022 // * use in resulting scientific publications, and indicate your * 00023 // * acceptance of all terms of the Geant4 Software license. * 00024 // ******************************************************************** 00025 // 00026 // 00027 // $Id$ 00028 // 00029 // 00030 // ------------------------------------------------------------ 00031 // GEANT 4 class header file 00032 // 00033 // 00034 // ------------------------------------------------------------ 00035 // Implemented for the new scheme 10 May. 1998 H.Kurahige 00036 // Added theMaterialChange 16 FEb. 2000 H.Kurahige 00037 // Remove thePolarizationChange 12 Feb. 2001 H.Kurashige 00038 // Modification for G4TouchableHandle 22 Oct. 2001 R.Chytracek 00039 // Add MaterialCutsCouple 8 Oct. 2002 H.Kurashige 00040 // 00041 // Class Description 00042 // This class is a concrete class for ParticleChange for transportation 00043 // 00044 #ifndef G4ParticleChangeForTransport_h 00045 #define G4ParticleChangeForTransport_h 1 00046 00047 #include "globals.hh" 00048 #include "G4ios.hh" 00049 #include "G4TouchableHandle.hh" 00050 #include "G4ParticleChange.hh" 00051 00052 class G4MaterialCutsCouple; 00053 class G4VSensitiveDetector; 00054 00055 class G4ParticleChangeForTransport: public G4ParticleChange 00056 { 00057 public: 00058 // default constructor 00059 G4ParticleChangeForTransport(); 00060 00061 // destructor 00062 virtual ~G4ParticleChangeForTransport(); 00063 00064 protected: 00065 // hide copy constructor and assignment operator as protected 00066 G4ParticleChangeForTransport(const G4ParticleChangeForTransport &right); 00067 G4ParticleChangeForTransport & operator=(const G4ParticleChangeForTransport &right); 00068 00069 public: // with description 00070 // ---------------------------------------------------- 00071 // --- the following methods are for updating G4Step ----- 00072 // Return the pointer to the G4Step after updating the Step information 00073 // by using final state information of the track given by a physics 00074 // process 00075 virtual G4Step* UpdateStepForAlongStep(G4Step* Step); 00076 virtual G4Step* UpdateStepForAtRest(G4Step* Step); 00077 virtual G4Step* UpdateStepForPostStep(G4Step* Step); 00078 // A physics process gives the final state of the particle 00079 // based on information of G4Track (or equivalently the PreStepPoint) 00080 00081 virtual void Initialize(const G4Track&); 00082 // Initialize all propoerties by using G4Track information 00083 00084 // ---------------------------------------------------- 00085 //--- methods to keep information of the final state-- 00086 // IMPORTANT NOTE: Although the name of the class and methods are 00087 // "Change", what it stores (and returns in get) are the "FINAL" 00088 // values of the Position, Momentum, etc. 00089 00090 const G4TouchableHandle& GetTouchableHandle() const; 00091 void SetTouchableHandle(const G4TouchableHandle& fTouchable); 00092 // Get/Set the touchable of the current particle. 00093 // Note: Touchable in PostStepPoint will be updated only after PostStepDoIt 00094 00095 G4Material* GetMaterialInTouchable() const; 00096 void SetMaterialInTouchable(G4Material* fMaterial); 00097 // Get/Propose the material in the touchable of the current particle. 00098 00099 const G4MaterialCutsCouple* GetMaterialCutsCoupleInTouchable() const; 00100 void SetMaterialCutsCoupleInTouchable(const G4MaterialCutsCouple* fMaterialCutsCouple); 00101 // Get/Set the materialCutsCouple in the touchable of the current particle. 00102 00103 G4VSensitiveDetector* GetSensitiveDetectorInTouchable() const; 00104 void SetSensitiveDetectorInTouchable(G4VSensitiveDetector* fSensitiveDetector); 00105 // Get/Set the sensitive detector in the touchable of the current particle. 00106 00107 G4bool GetMomentumChanged() const; 00108 void SetMomentumChanged(G4bool b); 00109 00110 public: 00111 virtual void DumpInfo() const; 00112 00113 protected: 00114 G4TouchableHandle theTouchableHandle; 00115 // The changed touchable of a given particle. 00116 00117 public: 00118 00119 // Prototype implementation of smooth representation of curved trajectories. 00120 // Auxiliary points are ThreeVectors for now; change to G4AuxiliaryPoints. 00121 00122 inline void SetPointerToVectorOfAuxiliaryPoints( std::vector<G4ThreeVector>* theNewVectorPointer ); 00123 inline std::vector<G4ThreeVector>* GetPointerToVectorOfAuxiliaryPoints() const; 00124 00125 private: 00126 G4bool isMomentumChanged; 00127 // The flag which is set if momentum is changed in current step 00128 G4Material* theMaterialChange; 00129 const G4MaterialCutsCouple* theMaterialCutsCoupleChange; 00130 G4VSensitiveDetector* theSensitiveDetectorChange; 00131 // The material (and MaterialCutsCouple) where given track 00132 // currently locates 00133 00134 private: 00135 std::vector<G4ThreeVector>* fpVectorOfAuxiliaryPointsPointer; 00136 }; 00137 00138 #include "G4ParticleChangeForTransport.icc" 00139 00140 #endif 00141 00142 00143 00144 00145 00146