00001 // 00002 // ******************************************************************** 00003 // * DISCLAIMER * 00004 // * * 00005 // * The following disclaimer summarizes all the specific disclaimers * 00006 // * of contributors to this software. The specific disclaimers,which * 00007 // * govern, are listed with their locations in: * 00008 // * http://cern.ch/geant4/license * 00009 // * * 00010 // * Neither the authors of this software system, nor their employing * 00011 // * institutes,nor the agencies providing financial support for this * 00012 // * work make any representation or warranty, express or implied, * 00013 // * regarding this software system or assume any liability for its * 00014 // * use. * 00015 // * * 00016 // * This code implementation is the intellectual property of the * 00017 // * GEANT4 collaboration. * 00018 // * By copying, distributing or modifying the Program (or any work * 00019 // * based on the Program) you indicate your acceptance of this * 00020 // * statement, and all its terms. * 00021 // ******************************************************************** 00022 // 00023 // 00024 // $Id: BesMagneticField.hh,v 1.5 2015/03/17 05:50:57 sunss Exp $ 00025 // GEANT4 tag $Name: BesSim-00-01-24 $ 00026 // 00027 // 00028 // A class for control of the Magnetic Field of the detector. 00029 // The field is assumed to be uniform. 00030 // 00031 // $ Id: $ 00032 00033 // Should this be a: 00034 // i) messenger 00035 // ii) user class that creates the field ? 00036 // iii) simply a derived class of Uniform field ? <== I have chosen this now. 00037 // iv) a field manager that creates/updates field (Prefered?) 00038 // 00039 00040 00041 #ifndef BesMagneticField_H 00042 #define BesMagneticField_H 00043 00044 #include "G4MagneticField.hh" 00045 #include "globals.hh" 00046 #include "MagneticField/IMagneticFieldSvc.h" 00047 00048 using namespace std; 00049 00050 class G4FieldManager; 00051 class G4ChordFinder; 00052 class G4Mag_UsualEqRhs; 00053 class G4MagIntegratorStepper; 00054 class BesMagneticFieldMessenger; 00055 00056 class BesMagneticField:public G4MagneticField 00057 { 00058 public: 00059 00060 BesMagneticField() ; // A zero field 00061 00062 ~BesMagneticField() ; 00063 void GetFieldValue( const double Point[3], 00064 double *Bfield ) const; 00065 00066 00067 void SetStepperType( G4int i) { fStepperType = i ; } 00068 00069 void SetStepper(); 00070 00071 void SetMinStep(G4double s) { fMinStep = s ; } 00072 00073 void InitialiseAll(); // Set parameters and call method below 00074 void CreateStepperAndChordFinder(); 00075 00076 void SetDeltaOneStep(double newvalue); 00077 void SetDeltaIntersection(double newvalue); 00078 void SetMinimumEpsilonStep(double newvalue); 00079 void SetMaximumEpsilonStep(double newvalue); 00080 00081 00082 protected: 00083 00084 G4FieldManager* fFieldManager ; 00085 G4ChordFinder* fChordFinder ; 00086 G4Mag_UsualEqRhs* fEquation ; 00087 00088 00089 G4MagIntegratorStepper* fStepper ; 00090 G4int fStepperType ; 00091 00092 G4double fMinStep ; 00093 00094 BesMagneticFieldMessenger* fFieldMessenger; 00095 IMagneticFieldSvc* m_pIMF; 00096 }; 00097 00098 #endif