50 fPtrMagEqOfMot(EqRhs), fAngCurve(0.), frCurve(0.), frHelix(0.)
93 if( (std::fabs(R_1) < 1e-10)||(Bmag<1e-12) )
105 Bnorm = (1.0/Bmag)*Bfld;
109 B_x_P = Bnorm.
cross(initTangent);
113 B_d_P = Bnorm.
dot(initTangent);
115 vpar = B_d_P * Bnorm;
116 vperp= initTangent - vpar;
118 B_v_P = std::sqrt( 1 - B_d_P * B_d_P);
126 if( std::fabs(Theta) > approc_limit )
128 SinT = std::sin(Theta);
129 CosT = std::cos(Theta);
136 SinT = Theta - 1.0/6.0 * Theta3;
137 CosT = 1 - 0.5 * Theta2 + 1.0/24.0 * Theta4;
144 positionMove = R * ( SinT * vperp + (1-CosT) * B_x_P) + h * vpar;
145 endTangent = CosT * vperp + SinT * B_x_P + vpar;
149 yHelix[0] = yIn[0] + positionMove.
x();
150 yHelix[1] = yIn[1] + positionMove.
y();
151 yHelix[2] = yIn[2] + positionMove.
z();
152 yHelix[3] = velocityVal * endTangent.
x();
153 yHelix[4] = velocityVal * endTangent.
y();
154 yHelix[5] = velocityVal * endTangent.
z();
160 SinT2 = 2.0 * SinT * CosT;
161 CosT2 = 1.0 - 2.0 * SinT * SinT;
162 endTangent = (CosT2 * vperp + SinT2 * B_x_P + vpar);
163 positionMove = R * ( SinT2 * vperp + (1-CosT2) * B_x_P) + h*2 * vpar;
165 yHelix2[0] = yIn[0] + positionMove.
x();
166 yHelix2[1] = yIn[1] + positionMove.
y();
167 yHelix2[2] = yIn[2] + positionMove.
z();
168 yHelix2[3] = velocityVal * endTangent.
x();
169 yHelix2[4] = velocityVal * endTangent.
y();
170 yHelix2[5] = velocityVal * endTangent.
z();
178 R_Helix =std::abs( ptan/(fUnitConstant * particleCharge*Bmag));
198 const G4int nvar = 6;
210 for(i=0;i<nvar;i++) { yIn[i]=yInput[i]; }
231 yErr[i] = yOut[i] - yTemp[i] ;
static constexpr double tesla
void AdvanceHelix(const G4double yIn[], G4ThreeVector Bfld, G4double h, G4double yHelix[], G4double yHelix2[]=0)
virtual void Stepper(const G4double y[], const G4double dydx[], G4double h, G4double yout[], G4double yerr[])
virtual void DumbStepper(const G4double y[], G4ThreeVector Bfld, G4double h, G4double yout[])=0
CLHEP::Hep3Vector G4ThreeVector
G4double GetRadHelix() const
double dot(const Hep3Vector &) const
void MagFieldEvaluate(const G4double y[], G4ThreeVector &Bfield)
virtual ~G4MagHelicalStepper()
void LinearStep(const G4double yIn[], G4double h, G4double yHelix[]) const
static constexpr double twopi
G4MagHelicalStepper(G4Mag_EqRhs *EqRhs)
static constexpr double m
G4double GetInverseCurve(const G4double Momentum, const G4double Bmag)
static constexpr double eplus
void SetRadHelix(const G4double Rad)
void SetAngCurve(const G4double Ang)
void SetCurve(const G4double Curve)
static constexpr double GeV
static constexpr double pi
Hep3Vector cross(const Hep3Vector &) const
G4double GetAngCurve() const
G4double DistChord() const