00001 //---------------------------------------------------------------------------// 00002 //Description: Setup MagField 00003 //Author: Wu Chen(wuchen@mail.ihep.ac.cn) 00004 //Created: 17 Oct, 2012 00005 //Comment: 00006 //---------------------------------------------------------------------------// 00007 00008 #ifndef MyFieldSvc_h 00009 #define MyFieldSvc_h 1 00010 00011 #include "myglobals.hh" 00012 #include <vector> 00013 00014 class MyFieldSvcMessenger; 00015 class G4ChordFinder; 00016 class G4FieldManager; 00017 class G4UniformMagField; 00018 class G4UniformElectricField; 00019 class G4MagIntegratorStepper; 00020 class G4MagInt_Driver; 00021 class G4EqMagElectricField; 00022 class G4LogicalVolume; 00023 class MyFieldMap; 00024 00025 class MyFieldSvc 00026 { 00027 public: 00028 MyFieldSvc(); 00029 ~MyFieldSvc(); 00030 00031 static MyFieldSvc* GetMyFieldSvc(); 00032 00033 void ReadCard(G4String); 00034 00035 void SetField(G4LogicalVolume* fLogicWorld = 0); 00036 00037 void SetFieldType( G4String val ){ fType = val; } 00038 00039 void SetMagIntensity( G4double val ){ UniF_Intensity = val; } 00040 void SetMagTheta( G4double val ){ UniF_Theta = val; } 00041 void SetMagPhi( G4double val ){ UniF_Phi = val; } 00042 00043 void SetEleIntensity( G4double val ){ UniEF_Intensity = val; } 00044 void SetEleTheta( G4double val ){ UniEF_Theta = val; } 00045 void SetElePhi( G4double val ){ UniEF_Phi = val; } 00046 void SetStepper(); 00047 00048 private: 00049 00050 void Dump(); 00051 00052 void UpdateField( G4String opt = "" ); 00053 G4FieldManager* GetGlobalFieldManager(); 00054 00055 private: 00056 00057 static MyFieldSvc* fMyFieldSvc; 00058 MyFieldSvcMessenger* fMyFieldSvcMessenger; //messenger of this class 00059 G4ChordFinder* fChordFinder; 00060 00061 G4String fType; 00062 00063 //Magnetic Field 00064 G4UniformMagField* fMagField; 00065 G4double UniF_Intensity; 00066 G4double UniF_Theta; 00067 G4double UniF_Phi; 00068 00069 //Electric Field 00070 G4FieldManager* fFieldManager; 00071 G4UniformElectricField* fEleField; 00072 G4MagIntegratorStepper* fStepper; 00073 G4MagInt_Driver* fIntgrDriver; 00074 G4EqMagElectricField *fEquation; 00075 G4double UniEF_Intensity; 00076 G4double UniEF_Theta; 00077 G4double UniEF_Phi; 00078 G4double UniEF_StepL; 00079 G4int UniEF_StepT; 00080 00081 std::vector<G4String> fFieldMapFilenames; // input filenames for fieldmaps 00082 std::vector<G4double> fFieldMapScalings; // multiples the fields in each file by this factor 00083 std::vector<MyFieldMap*> fFieldMaps; // field map objects. Pointer is barely used as fieldmaps are defined 00084 }; 00085 00086 #endif 00087