00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef BDSSOLENOIDSTEPPER_HH
00017 #define BDSSOLENOIDSTEPPER_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 BDSSolenoidStepper : public G4MagIntegratorStepper
00025 {
00026
00027 public:
00028
00029 BDSSolenoidStepper(G4Mag_EqRhs *EqRhs);
00030
00031 ~BDSSolenoidStepper();
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 SetBField(G4double aBField);
00047 G4double GetBField();
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 yOut[]);
00062
00063
00064 private:
00065
00066 G4Mag_EqRhs* fPtrMagEqOfMot;
00067
00068 G4double itsBField;
00069
00070 G4double itsDist;
00071
00072 };
00073
00074 inline void BDSSolenoidStepper::SetBField(G4double aBField)
00075 {itsBField=aBField;
00076 }
00077
00078 inline G4double BDSSolenoidStepper::GetBField()
00079 {return itsBField;}
00080
00081 inline void BDSSolenoidStepper::StepperName()
00082 {G4cout<<"BDSSolenoidStepper"<<G4endl;}
00083
00084 #endif