Files
geant4/source/geometry/magneticfield/include/G4FieldTrack.icc
T
2016-06-08 15:55:53 +02:00

304 lines
7.1 KiB
Plaintext

// This code implementation is the intellectual property of
// the 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: G4FieldTrack.icc,v 1.4 2000/11/20 17:29:03 gcosmo Exp $
// GEANT4 tag $Name: geant4-03-00 $
//
#include "PhysicalConstants.h"
inline
G4FieldTrack::G4FieldTrack( const G4ThreeVector& pPosition,
const G4ThreeVector& pVelocity, // Can be unit
G4double curve_length,
G4double pEnergy,
G4double pLabortTimeOfFlight,
G4double pProperTimeOfFlight,
const G4ThreeVector* pSpin)
: fEnergy(pEnergy),
fLabTimeOfFlight(pLabortTimeOfFlight),
fProperTimeOfFlight(pProperTimeOfFlight),
fMomentumDir(pVelocity.unit())
{
SetCurvePnt( pPosition, pVelocity, curve_length );
if(pSpin) fSpin = *pSpin;
}
inline
G4FieldTrack::G4FieldTrack( const G4FieldTrack& rStVec )
: fDistanceAlongCurve( rStVec.fDistanceAlongCurve),
fEnergy( rStVec.fEnergy ),
fLabTimeOfFlight( rStVec.fLabTimeOfFlight ),
fProperTimeOfFlight( rStVec.fProperTimeOfFlight ),
fMomentumModulus( rStVec.fMomentumModulus ),
fSpin( rStVec.fSpin ),
fMomentumDir( rStVec.fMomentumDir )
{
SixVector[0]= rStVec.SixVector[0];
SixVector[1]= rStVec.SixVector[1];
SixVector[2]= rStVec.SixVector[2];
SixVector[3]= rStVec.SixVector[3];
SixVector[4]= rStVec.SixVector[4];
SixVector[5]= rStVec.SixVector[5];
// Old code:
// SetCurvePnt(rStVec.GetPosition(),
// rStVec.GetMomentumDir(),
// rStVec.GetCurveLength() ); // Slow, so changed it
}
inline
G4FieldTrack::~G4FieldTrack()
{
}
inline G4FieldTrack&
G4FieldTrack::SetCurvePnt(const G4ThreeVector& pPosition,
const G4ThreeVector& pVelocity, // Can be Unit
G4double s_curve )
{
SixVector[0] = pPosition.x();
SixVector[1] = pPosition.y();
SixVector[2] = pPosition.z();
SixVector[3] = pVelocity.x();
SixVector[4] = pVelocity.y();
SixVector[5] = pVelocity.z();
fMomentumDir = pVelocity.unit();
fDistanceAlongCurve= s_curve;
return *this;
}
inline
G4ThreeVector G4FieldTrack::GetPosition() const
{
G4ThreeVector myPosition( SixVector[0], SixVector[1], SixVector[2] );
return myPosition;
}
inline
void G4FieldTrack::SetPosition( G4ThreeVector pPosition)
{
SixVector[0] = pPosition.x();
SixVector[1] = pPosition.y();
SixVector[2] = pPosition.z();
}
// Older ... obsolete
inline
G4ThreeVector G4FieldTrack::Position() const
{
return this->GetPosition();
}
inline
const G4ThreeVector& G4FieldTrack::GetMomentumDir() const
{
// G4ThreeVector myVelocity( SixVector[3], SixVector[4], SixVector[5] );
// return myVelocity;
return fMomentumDir;
}
inline
G4double G4FieldTrack::GetCurveLength() const
{
return fDistanceAlongCurve;
}
inline
G4double G4FieldTrack::CurveS() const
{
return this->GetCurveLength();
}
inline
void G4FieldTrack::SetCurveLength(G4double nCurve_s)
{
fDistanceAlongCurve= nCurve_s;
}
inline
void G4FieldTrack::SetCurveS(G4double new_curve_s)
{
this->SetCurveLength(new_curve_s);
}
#ifdef ENERGY_OK
inline
G4double G4FieldTrack::GetEnergy() const
{
return fEnergy;
}
#endif
inline
void G4FieldTrack::SetEnergy(G4double nEnergy)
{
fEnergy=nEnergy;
}
inline
G4ThreeVector G4FieldTrack::GetSpin() const
{
return fSpin;
}
inline
void G4FieldTrack::SetSpin(G4ThreeVector nSpin)
{
fSpin=nSpin;
}
inline
G4double G4FieldTrack::GetLabTimeOfFlight() const
{
return fLabTimeOfFlight;
}
inline
void G4FieldTrack::SetLabTimeOfFlight(G4double nTOF)
{
fLabTimeOfFlight=nTOF;
}
inline
G4double G4FieldTrack::GetProperTimeOfFlight() const
{
return fProperTimeOfFlight;
}
inline
void G4FieldTrack::SetProperTimeOfFlight(G4double nTOF)
{
fProperTimeOfFlight=nTOF;
}
inline
G4double G4FieldTrack::GetMomentumModulus() const
{
return fMomentumModulus;
}
inline
void G4FieldTrack::SetMomentumModulus(G4double nMomentumMod)
{
fMomentumModulus= nMomentumMod; // does not modify energy
}
inline
void G4FieldTrack::SetMomentumDir(G4ThreeVector newMomDir)
{
fMomentumDir= newMomDir;
}
inline
G4ThreeVector G4FieldTrack::GetVelocity() const
{
return G4ThreeVector( SixVector[3], SixVector[4], SixVector[5] );
}
inline
void G4FieldTrack::SetVelocity(G4ThreeVector pVelocity)
{
SixVector[3] = pVelocity.x();
SixVector[4] = pVelocity.y();
SixVector[5] = pVelocity.z();
fMomentumDir = pVelocity.unit();
}
// Dump values to array
//
// note that momentum direction is not saved
inline
void G4FieldTrack::DumpToArray(G4double valArr[ncompSVEC] ) const
{
valArr[0]=SixVector[0];
valArr[1]=SixVector[1];
valArr[2]=SixVector[2];
valArr[3]=SixVector[3];
valArr[4]=SixVector[4];
valArr[5]=SixVector[5];
G4ThreeVector Velocity(valArr[3],valArr[4],valArr[5]);
G4double velocity_mag_sq = Velocity.mag2();
G4double mass_in_Kg;
mass_in_Kg = fEnergy / velocity_mag_sq * (1-velocity_mag_sq/c_squared);
valArr[6]= mass_in_Kg;
// valArr[6]=fEnergy; // When it is integrated over, do this ...
valArr[7]=fLabTimeOfFlight;
valArr[8]=fProperTimeOfFlight;
valArr[9]=fSpin.x();
valArr[10]=fSpin.y();
valArr[11]=fSpin.z();
// valArr[13]=fMomentumDir.x();
// valArr[14]=fMomentumDir.y();
// valArr[15]=fMomentumDir.z();
// valArr[]=fDistanceAlongCurve;
}
// Load values from array
//
// note that momentum direction must-be/is normalised
inline
void G4FieldTrack::LoadFromArray(G4double valArr[ncompSVEC])
{
SixVector[0]=valArr[0];
SixVector[1]=valArr[1];
SixVector[2]=valArr[2];
SixVector[3]=valArr[3];
SixVector[4]=valArr[4];
SixVector[5]=valArr[5];
G4ThreeVector Velocity(valArr[3],valArr[4],valArr[5]);
G4double velocity_mag_sq = Velocity.mag2();
// fEnergy=valArr[6]; // When it is integrated over, do this ...
G4double mass_in_Kg=valArr[6];
fEnergy= mass_in_Kg * velocity_mag_sq / (1-velocity_mag_sq/c_squared);
// sqr(c_light)
fMomentumDir= Velocity.unit();
fLabTimeOfFlight=valArr[7];
fProperTimeOfFlight=valArr[8];
fSpin=G4ThreeVector(valArr[9],valArr[10],valArr[11]);
// fMomentumDir=G4ThreeVector(valArr[13],valArr[14],valArr[15]);
// fDistanceAlongCurve= valArr[];
}
inline
G4FieldTrack & G4FieldTrack::operator = ( const G4FieldTrack& rStVec )
{
if (&rStVec == this) return *this;
// SetCurvePnt(rStVec.GetPosition(),
// rStVec.GetMomentumDir(),
// rStVec.GetCurveLength() );
SixVector[0]= rStVec.SixVector[0];
SixVector[1]= rStVec.SixVector[1];
SixVector[2]= rStVec.SixVector[2];
SixVector[3]= rStVec.SixVector[3];
SixVector[4]= rStVec.SixVector[4];
SixVector[5]= rStVec.SixVector[5];
SetCurveLength( rStVec.GetCurveLength() );
SetEnergy( rStVec.fEnergy );
SetLabTimeOfFlight( rStVec.GetLabTimeOfFlight() );
SetProperTimeOfFlight( rStVec.GetProperTimeOfFlight() );
SetSpin( rStVec.GetSpin() );
SetMomentumModulus( rStVec.GetMomentumModulus());
SetMomentumDir( rStVec.fMomentumDir );
return *this;
}