00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #include "G4FieldManager.hh"
00032 #include "G4Field.hh"
00033 #include "G4MagneticField.hh"
00034 #include "G4ChordFinder.hh"
00035 #include "G4FieldManagerStore.hh"
00036
00037 G4FieldManager::G4FieldManager(G4Field *detectorField,
00038 G4ChordFinder *pChordFinder,
00039 G4bool fieldChangesEnergy
00040 )
00041 : fDetectorField(detectorField),
00042 fChordFinder(pChordFinder),
00043 fAllocatedChordFinder(false),
00044 fEpsilonMinDefault(5.0e-5),
00045 fEpsilonMaxDefault(0.001),
00046 fDefault_Delta_One_Step_Value(0.01),
00047 fDefault_Delta_Intersection_Val(0.001),
00048 fEpsilonMin( fEpsilonMinDefault ),
00049 fEpsilonMax( fEpsilonMaxDefault)
00050 {
00051 fDelta_One_Step_Value= fDefault_Delta_One_Step_Value;
00052 fDelta_Intersection_Val= fDefault_Delta_Intersection_Val;
00053 if ( detectorField )
00054 fFieldChangesEnergy= detectorField->DoesFieldChangeEnergy();
00055 else
00056 fFieldChangesEnergy= fieldChangesEnergy;
00057
00058
00059 G4FieldManagerStore::Register(this);
00060 }
00061
00062 G4FieldManager::G4FieldManager(G4MagneticField *detectorField)
00063 : fDetectorField(detectorField), fAllocatedChordFinder(true),
00064 fEpsilonMinDefault(5.0e-5),
00065 fEpsilonMaxDefault(0.001),
00066 fFieldChangesEnergy(false),
00067 fDefault_Delta_One_Step_Value(0.01),
00068 fDefault_Delta_Intersection_Val(0.001),
00069 fEpsilonMin( fEpsilonMinDefault ),
00070 fEpsilonMax( fEpsilonMaxDefault)
00071 {
00072 fChordFinder= new G4ChordFinder( detectorField );
00073 fDelta_One_Step_Value= fDefault_Delta_One_Step_Value;
00074 fDelta_Intersection_Val= fDefault_Delta_Intersection_Val;
00075
00076 G4FieldManagerStore::Register(this);
00077 }
00078
00079 void G4FieldManager::ConfigureForTrack( const G4Track * )
00080 {
00081
00082 ;
00083 }
00084
00085 G4FieldManager::~G4FieldManager()
00086 {
00087 if( fAllocatedChordFinder ){
00088 delete fChordFinder;
00089 }
00090 G4FieldManagerStore::DeRegister(this);
00091 }
00092
00093 void
00094 G4FieldManager::CreateChordFinder(G4MagneticField *detectorMagField)
00095 {
00096 if ( fAllocatedChordFinder )
00097 delete fChordFinder;
00098 fChordFinder= new G4ChordFinder( detectorMagField );
00099 fAllocatedChordFinder= true;
00100 }
00101
00102 G4bool G4FieldManager::SetDetectorField(G4Field *pDetectorField)
00103 {
00104 fDetectorField= pDetectorField;
00105
00106 if ( pDetectorField )
00107 fFieldChangesEnergy= pDetectorField->DoesFieldChangeEnergy();
00108 else
00109 fFieldChangesEnergy= false;
00110
00111 return false;
00112 }
00113