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