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 // 00032 // G4StepPoint.hh 00033 // 00034 // Class Description: 00035 // This class represents information associated with the 00036 // each end of a Step like the space/time data of the 00037 // particle. 00038 // 00039 // Contact: 00040 // Questions and comments to this code should be sent to 00041 // Hisaya Kurashige 00042 // 00043 // --------------------------------------------------------------- 00044 // Added fpMaterial 16 FEb. 2000 H.Kurahige 00045 // Added fpMaterialCutsCouple 8 Oct. 2002 H.Kurahige 00046 // Added fMagneticMoment Mar 2007 H.Kurashige 00047 00048 #ifndef G4StepPoint_h 00049 #define G4StepPoint_h 1 00050 00051 #include <cmath> // Include from 'system' 00052 #include <CLHEP/Units/PhysicalConstants.h> 00053 00054 #include "globals.hh" // Include from 'global' 00055 #include "G4Allocator.hh" // Include from 'global' 00056 #include "G4ThreeVector.hh" // Include from 'geometry' 00057 #include "G4VPhysicalVolume.hh" // Include from 'geometry' 00058 class G4VProcess; 00059 #include "G4SteppingControl.hh" 00060 #include "G4StepStatus.hh" // Include from 'track' 00061 #include "G4TouchableHandle.hh" // Include from 'geometry' 00062 #include "G4Material.hh" 00063 #include "G4LogicalVolume.hh" 00064 00065 class G4MaterialCutsCouple; 00066 class G4VSensitiveDetector; 00068 class G4StepPoint 00070 { 00071 00072 //-------- 00073 public: 00074 00075 00076 // Constructor/Destructor 00077 G4StepPoint(); 00078 00079 ~G4StepPoint(){} 00080 00081 // Copy Counstructor and assignment operator 00082 G4StepPoint(const G4StepPoint& ); 00083 G4StepPoint & operator=(const G4StepPoint &); 00084 00085 //-------- 00086 00087 public: // with description 00088 00089 // Get/Set functions 00090 const G4ThreeVector& GetPosition() const; 00091 void SetPosition(const G4ThreeVector& aValue); 00092 void AddPosition(const G4ThreeVector& aValue); 00093 00094 G4double GetLocalTime() const; 00095 void SetLocalTime(const G4double aValue); 00096 void AddLocalTime(const G4double aValue); 00097 // Time since the track is created. 00098 00099 G4double GetGlobalTime() const; 00100 void SetGlobalTime(const G4double aValue); 00101 void AddGlobalTime(const G4double aValue); 00102 // Time since the event in which the track belongs is created. 00103 00104 G4double GetProperTime() const; 00105 void SetProperTime(const G4double aValue); 00106 void AddProperTime(const G4double aValue); 00107 // Proper time of the particle. 00108 00109 const G4ThreeVector& GetMomentumDirection() const; 00110 void SetMomentumDirection(const G4ThreeVector& aValue); 00111 void AddMomentumDirection(const G4ThreeVector& aValue); 00112 // Direction of momentum (should be an unit vector) 00113 00114 G4ThreeVector GetMomentum() const; 00115 // Total momentum of the track 00116 00117 00118 G4double GetTotalEnergy() const; 00119 // Total energy of the track 00120 00121 G4double GetKineticEnergy() const; 00122 void SetKineticEnergy(const G4double aValue); 00123 void AddKineticEnergy(const G4double aValue); 00124 // Kinetic Energy of the track 00125 00126 G4double GetVelocity() const; 00127 void SetVelocity(G4double v); 00128 // 00129 00130 G4double GetBeta() const; 00131 // Velocity of the track in unit of c(light velocity) 00132 00133 G4double GetGamma() const; 00134 // Gamma factor (1/sqrt[1-beta*beta]) of the track 00135 00136 G4VPhysicalVolume* GetPhysicalVolume() const; 00137 00138 const G4VTouchable* GetTouchable() const; 00139 const G4TouchableHandle& GetTouchableHandle() const; 00140 void SetTouchableHandle(const G4TouchableHandle& apValue); 00141 00142 G4Material* GetMaterial() const; 00143 void SetMaterial(G4Material*); 00144 00145 const G4MaterialCutsCouple* GetMaterialCutsCouple() const; 00146 void SetMaterialCutsCouple(const G4MaterialCutsCouple*); 00147 00148 G4VSensitiveDetector* GetSensitiveDetector() const; 00149 void SetSensitiveDetector(G4VSensitiveDetector*); 00150 00151 G4double GetSafety() const; 00152 void SetSafety(const G4double aValue); 00153 00154 const G4ThreeVector& GetPolarization() const; 00155 void SetPolarization(const G4ThreeVector& aValue); 00156 void AddPolarization(const G4ThreeVector& aValue); 00157 00158 G4StepStatus GetStepStatus() const; 00159 void SetStepStatus(const G4StepStatus aValue); 00160 00161 const G4VProcess* GetProcessDefinedStep() const; 00162 // If the pointer is 0, this means the Step is defined 00163 // by the user defined limit in the current volume. 00164 void SetProcessDefinedStep(const G4VProcess* aValue); 00165 00166 00167 G4double GetMass() const; 00168 void SetMass(G4double value); 00169 00170 G4double GetCharge() const; 00171 void SetCharge(G4double value); 00172 00173 G4double GetMagneticMoment() const; 00174 void SetMagneticMoment(G4double value); 00175 00176 void SetWeight(G4double aValue); 00177 G4double GetWeight() const; 00178 00179 //--------- 00180 private: 00181 //--------- 00182 00183 // Member data 00184 G4ThreeVector fPosition; 00185 G4double fGlobalTime; 00186 // Time since event is created 00187 G4double fLocalTime; 00188 // Time since track is created 00189 G4double fProperTime; 00190 // Time since track is created (in rest frame of particle) 00191 G4ThreeVector fMomentumDirection; 00192 G4double fKineticEnergy; 00193 G4double fVelocity; 00194 // Momentum,energy and velocity 00195 G4TouchableHandle fpTouchable; 00196 // Touchable Handle 00197 G4Material* fpMaterial; 00198 // Material of the volmue 00199 const G4MaterialCutsCouple* fpMaterialCutsCouple; 00200 // MaterialCutsCouple of the volmue 00201 G4VSensitiveDetector* fpSensitiveDetector; 00202 G4double fSafety; 00203 G4ThreeVector fPolarization; 00204 G4StepStatus fStepStatus; 00205 // DoIt type which defined the current Step. 00206 const G4VProcess* fpProcessDefinedStep; 00207 // Process which defined the current Step. 00208 G4double fMass; 00209 // Dynamical mass of the particle 00210 G4double fCharge; 00211 // Dynamical Charge of the particle 00212 G4double fMagneticMoment; 00213 // Dynamical MagneticMoment of the particle 00214 G4double fWeight; 00215 // Track Weight 00216 }; 00217 00218 #include "G4StepPoint.icc" 00219 00220 #endif