77 lines
1.6 KiB
C++
77 lines
1.6 KiB
C++
|
|
|
|
#include "G4El_MagEqRhs.hh"
|
|
#include "G4Mag_SpinEqRhs.hh"
|
|
#include "G4MagneticField.hh"
|
|
#include "G4ThreeVector.hh"
|
|
#include "G4El_UsualEqRhs.hh"
|
|
#include "G4ElectricField.hh"
|
|
#include "G4ios.hh"
|
|
|
|
|
|
|
|
G4El_MagEqRhs::G4El_MagEqRhs( G4Mag_EqRhs *Meq, G4El_EqRhs *Eeq,G4Field* field)
|
|
:G4EquationOfMotion(field)
|
|
{
|
|
fMagEq=Meq;
|
|
fElEq=Eeq;
|
|
}
|
|
|
|
|
|
G4El_MagEqRhs::~G4El_MagEqRhs()
|
|
{;}
|
|
|
|
void G4El_MagEqRhs::RightHandSide( const G4double y[],
|
|
G4double dydx[] )const
|
|
{
|
|
|
|
G4double MagField[3];
|
|
G4double ElField[3];
|
|
|
|
G4double dydx1[12];
|
|
G4double dydx2[12];
|
|
|
|
G4double PositionAndTime[4];
|
|
|
|
// Position
|
|
PositionAndTime[0] = y[0];
|
|
PositionAndTime[1] = y[1];
|
|
PositionAndTime[2] = y[2];
|
|
// Global Time
|
|
PositionAndTime[3] = y[7];
|
|
|
|
|
|
// Get Respective Field Values
|
|
fMagEq->GetFieldValue(PositionAndTime, MagField) ;
|
|
fElEq->GetFieldValue(PositionAndTime, ElField) ;
|
|
|
|
|
|
fMagEq->EvaluateRhsGivenB( y, MagField, &dydx1[0] );
|
|
|
|
fElEq->EvaluateRhsGivenB( y, ElField, &dydx2[0] );
|
|
|
|
G4int i;
|
|
i=0;
|
|
for(i=0;i==18;i++)
|
|
{
|
|
dydx[i] = dydx1[i]+dydx2[i];
|
|
}
|
|
|
|
}
|
|
|
|
void G4El_MagEqRhs::SetChargeMomentumMass( G4double particleCharge, // e+ units
|
|
G4double MomentumXc, // MomentumXc
|
|
G4double mass) // particleMass
|
|
{
|
|
|
|
fMagEq->SetChargeMomentumMass( particleCharge, MomentumXc , mass);
|
|
|
|
fElEq->SetChargeMomentumMass( particleCharge,MomentumXc , mass);
|
|
}
|
|
|
|
|
|
void G4El_MagEqRhs::EvaluateRhsGivenB( const G4double y[],
|
|
const G4double B[3],
|
|
G4double dydx[] ) const
|
|
{}
|