00001 /* BDSIM code. Version 1.0 00002 Author: Grahame A. Blair, Royal Holloway, Univ. of London. 00003 Last modified 24.7.2002 00004 Copyright (c) 2002 by G.A.Blair. ALL RIGHTS RESERVED. 00005 */ 00006 00007 // 00008 // class BDSSextStepper 00009 // 00010 // Class description: 00011 // stepper for pure sextupole magnetic field 00012 00013 // History: 00014 // - Created. G.Blair 1/11/00 00015 00016 #ifndef BDSSEXTSTEPPER_HH 00017 #define BDSSEXTSTEPPER_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 BDSSextStepper : public G4MagIntegratorStepper 00025 { 00026 00027 public: // with description 00028 00029 BDSSextStepper(G4Mag_EqRhs *EqRhs); 00030 00031 ~BDSSextStepper(); 00032 00033 void Stepper( const G4double y[], 00034 const G4double dydx[], 00035 const G4double h, 00036 G4double yout[], 00037 G4double yerr[] ); 00038 // The stepper for the Runge Kutta integration. 00039 // The stepsize is fixed, equal to h. 00040 // Integrates ODE starting values y[0 to 6] 00041 // Outputs yout[] and its estimated error yerr[]. 00042 00043 G4double DistChord() const; 00044 // Estimate maximum distance of curved solution and chord ... 00045 00046 void SetBDblPrime(G4double aBDblPrime); 00047 G4double GetBDblPrime(); 00048 00049 void StepperName(); 00050 00051 public: // without description 00052 00053 G4int IntegratorOrder()const { return 2; } 00054 00055 protected: 00056 // --- Methods used to implement all the derived classes ----- 00057 00058 void AdvanceHelix( const G4double yIn[], 00059 G4ThreeVector Bfld, 00060 G4double h, 00061 G4double ySext[]); // output 00062 // A first order Step along a sext inside the field. 00063 00064 private: 00065 00066 G4Mag_EqRhs* fPtrMagEqOfMot; 00067 00068 G4double itsBDblPrime; 00069 00070 G4ThreeVector yInitial, yMidPoint, yFinal; 00071 // Data stored in order to find the chord. 00072 00073 G4double itsDist; 00074 00075 }; 00076 00077 inline void BDSSextStepper::SetBDblPrime(G4double aBDblPrime) 00078 {itsBDblPrime=aBDblPrime; 00079 } 00080 00081 inline G4double BDSSextStepper::GetBDblPrime() 00082 {return itsBDblPrime;} 00083 00084 inline void BDSSextStepper::StepperName() 00085 {G4cout<<"BDSSextStepper"<<G4endl;} 00086 00087 #endif /* BDSSEXTSTEPPER_HH */