00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef BDSQUADSTEPPER_HH
00017 #define BDSQUADSTEPPER_HH
00018 #include "globals.hh"
00019 #include "G4MagIntegratorStepper.hh"
00020 #include "G4Mag_EqRhs.hh"
00021 #include "G4ThreeVector.hh"
00022 #include "G4Navigator.hh"
00023
00024 class BDSQuadStepper : public G4MagIntegratorStepper
00025 {
00026
00027 public:
00028
00029 BDSQuadStepper(G4Mag_EqRhs *EqRhs);
00030
00031 ~BDSQuadStepper();
00032
00033 void Stepper( const G4double y[],
00034 const G4double dydx[],
00035 const G4double h,
00036 G4double yout[],
00037 G4double yerr[] );
00038
00039
00040
00041
00042
00043 G4double DistChord() const;
00044
00045
00046 void SetBGrad(G4double aBGrad);
00047 G4double GetBGrad();
00048
00049 void StepperName();
00050
00051 public:
00052
00053 G4int IntegratorOrder()const { return 2; }
00054
00055 protected:
00056
00057
00058 void AdvanceHelix( const G4double yIn[],
00059 G4ThreeVector Bfld,
00060 G4double h,
00061 G4double yQuad[]);
00062
00063
00064 private:
00065
00066 G4Mag_EqRhs* fPtrMagEqOfMot;
00067
00068 G4double itsBGrad;
00069
00070 G4ThreeVector yInitial, yMidPoint, yFinal;
00071
00072
00073 G4double itsDist;
00074
00075 };
00076
00077 inline void BDSQuadStepper::SetBGrad(G4double aBGrad)
00078 {itsBGrad=aBGrad;
00079 }
00080
00081 inline G4double BDSQuadStepper::GetBGrad()
00082 {return itsBGrad;}
00083
00084 inline void BDSQuadStepper::StepperName()
00085 {G4cout<<"BDSQuadStepper"<<G4endl;}
00086
00087 #endif