70 if( angleThreshold < 0.0 ){
71 fAngle_threshold= 0.33*
pi;
73 fAngle_threshold= angleThreshold;
81 fStepperNumber = stepperNumber;
113 if(Ang_curve< fAngle_threshold){
115 fRK4Stepper->
Stepper(yInput,dydx,Step,yOut,yErr);
120 const G4int nvar = 6 ;
121 const G4int nvarMax = 8 ;
123 G4double yTemp[nvarMax], yIn[nvarMax], yTemp2[nvarMax];
127 for(i=0;i<nvar;i++) yIn[i]=yInput[i];
145 for(i=0;i<nvar;i++) {
146 yErr[i] = yOut[i] - yTemp2[i] ;
170 distChord=
GetRadHelix()*(1-std::cos(0.5*Ang_curve));
188 G4cout <<
"In HelixMixedStepper::Number of calls to smallStepStepper = "
190 <<
" and Number of calls to Helix = " << fNumCallsHelix <<
G4endl;
197 if (fVerbose>0)
G4cout <<
" G4HelixMixedStepper: ";
198 switch ( StepperNumber )
203 if (fVerbose>0)
G4cout <<
"G4ClassicalRK4";
209 if (fVerbose>0)
G4cout <<
"G4CashKarpRKF45";
213 if (fVerbose>0)
G4cout <<
"G4NystromRK4";
219 if (fVerbose>0)
G4cout <<
"G4ImplicitEuler";
225 if (fVerbose>0)
G4cout <<
"G4SimpleRunge";
229 if (fVerbose>0)
G4cout <<
"G4SimpleHeum";
233 if (fVerbose>0)
G4cout <<
"G4BogackiShampine23";
240 if (fVerbose>0)
G4cout <<
"G4BogackiShampine45";
244 if (fVerbose>0)
G4cout <<
"G4TsitourasRK45";
248 if (fVerbose>0)
G4cout <<
"G4DormandPrince745";
254 if (fVerbose>0)
G4cout <<
"G4HelixImplicitEuler";
258 if (fVerbose>0)
G4cout <<
"G4HelixSimpleRunge";
262 if (fVerbose>0)
G4cout <<
"G4HelixExplicitEuler";
270 if (fVerbose>0)
G4cout <<
"G4ExactHelixStepper";
274 if (fVerbose>0)
G4cout <<
"G4RKG3_Stepper";
280 if (fVerbose>0)
G4cout <<
"G4ExplicitEuler";
284 if (fVerbose>0)
G4cout <<
"G4ImplicitEuler";
291 if (fVerbose>0)
G4cout <<
"G4ClassicalRK4 (Default)";
295 G4cout <<
" chosen as stepper for small steps in G4HelixMixedStepper."
void AdvanceHelix(const G4double yIn[], G4ThreeVector Bfld, G4double h, G4double yHelix[], G4double yHelix2[]=0)
CLHEP::Hep3Vector G4ThreeVector
G4double GetRadHelix() const
virtual void Stepper(const G4double y[], const G4double dydx[], G4double h, G4double yout[], G4double yerr[])=0
void MagFieldEvaluate(const G4double y[], G4ThreeVector &Bfield)
G4MagIntegratorStepper * SetupStepper(G4Mag_EqRhs *EqRhs, G4int StepperName)
static constexpr double twopi
G4GLOB_DLL std::ostream G4cout
G4double GetInverseCurve(const G4double Momentum, const G4double Bmag)
void Stepper(const G4double y[], const G4double dydx[], G4double h, G4double yout[], G4double yerr[])
void SetAngCurve(const G4double Ang)
G4HelixMixedStepper(G4Mag_EqRhs *EqRhs, G4int StepperNumber=-1, G4double Angle_threshold=-1.0)
void SetCurve(const G4double Curve)
void DumbStepper(const G4double y[], G4ThreeVector Bfld, G4double h, G4double yout[])
void SetVerbose(G4int newvalue)
static constexpr double pi
G4double GetAngCurve() const
G4double DistChord() const