// This code implementation is the intellectual property of // the RD44 GEANT4 collaboration. // // By copying, distributing or modifying the Program (or any work // based on the Program) you indicate your acceptance of this statement, // and all its terms. // // $Id: G4StepPoint.hh,v 2.4 1998/11/18 11:06:32 kurasige Exp $ // GEANT4 tag $Name: geant4-00 $ // // //--------------------------------------------------------------- // // G4StepPoint.hh // // Description: // This class represents information associated with the // each end of a Step like the space/time data of the // particle. // // Contact: // Questions and comments to this code should be sent to // Katsuya Amako (e-mail: Katsuya.Amako@kek.jp) // Takashi Sasaki (e-mail: Takashi.Sasaki@kek.jp) // // --------------------------------------------------------------- #ifndef G4StepPoint_h #define G4StepPoint_h 1 #include "globals.hh" // Include from 'global' #include "G4Allocator.hh" // Include from 'global' #include "G4ThreeVector.hh" // Include from 'geometry' #include "G4VPhysicalVolume.hh" // Include from 'geometry' class G4VProcess; #include "G4SteppingControl.hh" #include "G4StepStatus.hh" // Include from 'track' #include "G4VTouchable.hh" // Include from 'geometry' #include "G4Material.hh" #include "G4LogicalVolume.hh" ///////////////// class G4StepPoint ///////////////// { //-------- public: //-------- // Constructor/Destructor G4StepPoint(); ~G4StepPoint(); // Get/Set functions inline const G4ThreeVector& GetPosition() const { return fPosition; } inline void SetPosition(const G4ThreeVector& aValue) { fPosition = aValue; } inline void AddPosition(const G4ThreeVector& aValue) { fPosition += aValue; } inline G4double GetLocalTime() const { return fLocalTime; } inline void SetLocalTime(const G4double aValue) { fLocalTime = aValue; } inline void AddLocalTime(const G4double aValue) { fLocalTime += aValue; } // Time since the track is created. inline G4double GetGlobalTime() const { return fGlobalTime; } inline void SetGlobalTime(const G4double aValue) { fGlobalTime = aValue; } inline void AddGlobalTime(const G4double aValue) { fGlobalTime += aValue; } // Time since the event in which the track belongs is created. inline G4double GetProperTime() const { return fProperTime; } inline void SetProperTime(const G4double aValue) { fProperTime = aValue; } inline void AddProperTime(const G4double aValue) { fProperTime += aValue; } // Proper time of the particle. inline const G4ThreeVector& GetMomentumDirection() const { return fMomentumDirection; } inline void SetMomentumDirection(const G4ThreeVector& aValue) { fMomentumDirection = aValue; } inline void AddMomentumDirection(const G4ThreeVector& aValue) { fMomentumDirection += aValue; } inline G4ThreeVector GetMomentum() const { G4double tMomentum = sqrt(fKineticEnergy*fKineticEnergy + 2*fKineticEnergy*fMass); return G4ThreeVector(fMomentumDirection.x()*tMomentum, fMomentumDirection.y()*tMomentum, fMomentumDirection.z()*tMomentum); } inline G4double GetTotalEnergy() const { return fKineticEnergy + fMass; } inline G4double GetKineticEnergy() const { return fKineticEnergy; } inline void SetKineticEnergy(const G4double aValue) { fKineticEnergy = aValue; } inline void AddKineticEnergy(const G4double aValue) { fKineticEnergy += aValue; } // This velocity is the velocity as if in vacuum. // (So it is not corrected for the refraction index // in the case of photons - optical or X-rays.) // In order to get the velocity in the material, use // GetVelocity of G4Track. // inline G4double GetVelocity() const { if(fMass==0.){ return c_light; } else{ G4double tMomentum = sqrt(fKineticEnergy*fKineticEnergy + 2.0*fKineticEnergy*fMass); G4double tTotalEnergy = fKineticEnergy + fMass; return tMomentum/tTotalEnergy*c_light; } } inline G4VPhysicalVolume* GetPhysicalVolume() { return fpTouchable->GetVolume(); } inline G4VTouchable* GetTouchable() const { return fpTouchable; } inline void SetTouchable(G4VTouchable* apValue) { fpTouchable = apValue; } inline G4double GetSafety() const { return fSafety; } inline void SetSafety(const G4double aValue) { fSafety = aValue; } inline const G4ThreeVector& GetPolarization() const { return fPolarization; } inline void SetPolarization(const G4ThreeVector& aValue) { fPolarization = aValue; } inline void AddPolarization(const G4ThreeVector& aValue) { fPolarization += aValue; } inline G4StepStatus GetStepStatus() const { return fStepStatus; } inline void SetStepStatus(const G4StepStatus aValue) { fStepStatus = aValue; } inline const G4VProcess* GetProcessDefinedStep() const { return fpProcessDefinedStep; } // If the pointer is NULL, this means the Step is defined // by the user defined limit in the current volume. inline void SetProcessDefinedStep(G4VProcess* aValue) { fpProcessDefinedStep = aValue; } inline G4double GetGamma() const { return (fMass==0.) ? DBL_MAX : (fKineticEnergy+fMass)/fMass; } inline G4double GetBeta() const { return (fMass==0.) ? 1.0 : sqrt(fKineticEnergy*fKineticEnergy + 2.0*fKineticEnergy*fMass) /(fKineticEnergy+fMass); } inline G4double GetMass() const { return fMass; } inline void SetMass(G4double value) { fMass = value; } inline G4Material* GetMaterial() { return fpTouchable->GetVolume()->GetLogicalVolume()->GetMaterial(); } inline void SetWeight(G4double aValue) { fWeight = aValue; } inline G4double GetWeight() const { return fWeight; } //--------- private: //--------- // Member data G4ThreeVector fPosition; G4double fGlobalTime; // Time since event is created G4double fLocalTime; // Time since track is created G4double fProperTime; // Time since track is created (in rest frame of particle) G4ThreeVector fMomentumDirection; G4double fKineticEnergy; G4VTouchable* fpTouchable; G4double fSafety; G4ThreeVector fPolarization; G4StepStatus fStepStatus; // DoIt type which defined the current Step. G4VProcess* fpProcessDefinedStep; // Process which defined the current Step. G4double fMass; // Dynamical mass of the particle G4double fWeight; }; #endif