BesMagneticField Class Reference

#include <BesMagneticField.hh>

List of all members.

Public Member Functions

 BesMagneticField ()
 ~BesMagneticField ()
void GetFieldValue (const double Point[3], double *Bfield) const
void SetStepperType (G4int i)
void SetStepper ()
void SetMinStep (G4double s)
void InitialiseAll ()
void CreateStepperAndChordFinder ()
void SetDeltaOneStep (double newvalue)
void SetDeltaIntersection (double newvalue)
void SetMinimumEpsilonStep (double newvalue)
void SetMaximumEpsilonStep (double newvalue)

Protected Attributes

G4FieldManager * fFieldManager
G4ChordFinder * fChordFinder
G4Mag_UsualEqRhs * fEquation
G4MagIntegratorStepper * fStepper
G4int fStepperType
G4double fMinStep
BesMagneticFieldMessengerfFieldMessenger
IMagneticFieldSvcm_pIMF


Detailed Description

Definition at line 56 of file BesMagneticField.hh.


Constructor & Destructor Documentation

BesMagneticField::BesMagneticField (  ) 

Definition at line 83 of file BesMagneticField.cc.

References InitialiseAll(), and m_pIMF.

00084   : fChordFinder(0), fStepper(0),m_pIMF(0)
00085 {
00086   ISvcLocator* svcLocator = Gaudi::svcLocator();
00087   StatusCode sc = svcLocator->service("MagneticFieldSvc",m_pIMF);
00088   if(sc!=StatusCode::SUCCESS) {
00089     G4cout<< "Unable to open Magnetic field service"<<G4endl;
00090   }
00091   InitialiseAll();
00092 }

BesMagneticField::~BesMagneticField (  ) 

Definition at line 94 of file BesMagneticField.cc.

References fChordFinder, fEquation, fFieldMessenger, and fStepper.

00095 {
00096   if(fFieldMessenger) delete fFieldMessenger;
00097   if(fChordFinder)   delete fChordFinder;
00098   if(fEquation)      delete fEquation;
00099   if(fStepper)       delete fStepper;
00100 }


Member Function Documentation

void BesMagneticField::CreateStepperAndChordFinder (  ) 

Definition at line 149 of file BesMagneticField.cc.

References fChordFinder, fFieldManager, fMinStep, fStepper, and SetStepper().

Referenced by InitialiseAll(), and BesMagneticFieldMessenger::SetNewValue().

00150 {
00151   SetStepper();
00152   G4cout<<"The minimal step is equal to "<<fMinStep/mm<<" mm"<<G4endl ;
00153 
00154   fFieldManager->SetDetectorField(this );
00155 
00156   if(fChordFinder) delete fChordFinder;
00157 
00158    fChordFinder = new G4ChordFinder(this , fMinStep,fStepper);
00159  
00160    fChordFinder->SetDeltaChord(0.25*mm);
00161    fFieldManager->SetChordFinder( fChordFinder );
00162    fFieldManager->SetDeltaOneStep(1.0e-2*mm);
00163    fFieldManager->SetDeltaIntersection(1.0e-3*mm);
00164    fFieldManager->SetMinimumEpsilonStep(5.0e-5);
00165    fFieldManager->SetMaximumEpsilonStep(1.0e-3);
00166 
00167    G4PropagatorInField* fieldPropagator
00168                  = G4TransportationManager::GetTransportationManager()
00169                       ->GetPropagatorInField();
00170    G4cout<<"LargestAcceptableStep is "<<fieldPropagator->GetLargestAcceptableStep()/m<<G4endl; 
00171 //read some values
00172     G4cout<<"field has created"<<G4endl;
00173     G4cout<<"fDelta_One_Step_Value is "<<fFieldManager->GetDeltaOneStep()<<G4endl;
00174     G4cout<<"fDelta_Intersection_Val is "<<fFieldManager->GetDeltaIntersection()<<G4endl;
00175     G4cout<<"fEpsilonMin is "<<fFieldManager->GetMinimumEpsilonStep()<<G4endl;
00176     G4cout<<"fEpsilonMax is "<< fFieldManager->GetMaximumEpsilonStep()<<G4endl;
00177     return;
00178 }

void BesMagneticField::GetFieldValue ( const double  Point[3],
double *  Bfield 
) const

Definition at line 103 of file BesMagneticField.cc.

References IMagneticFieldSvc::fieldVector(), ReadBoostRoot::GetField(), m_pIMF, IMagneticFieldSvc::uniFieldVector(), and x.

00104 {
00105         double x=Point[0];
00106         double y=Point[1];
00107         double z=Point[2];
00108 
00109         HepPoint3D r(x,y,z);
00110         HepVector3D b;
00111 
00112         if(ReadBoostRoot::GetField()==2)
00113           m_pIMF->fieldVector(r,b);
00114         else
00115           m_pIMF->uniFieldVector(r,b);
00116 
00117         Bfield[0]=b.x();
00118         Bfield[1]=b.y();
00119         Bfield[2]=b.z();
00120         
00121 //caogf debug   
00122 //      ofstream haha("field_out.dat",ios_base::app);
00123 //      haha<<x/mm<<" "<<y/mm<<" "<<z/mm<<" "<<Bfield[0]/tesla<<" "<<Bfield[1]/tesla<<" "<<Bfield[2]/tesla<<G4endl;
00124 //      haha.close();
00125 } 

void BesMagneticField::InitialiseAll (  ) 

Definition at line 130 of file BesMagneticField.cc.

References CreateStepperAndChordFinder(), fEquation, fFieldManager, fFieldMessenger, fMinStep, and fStepperType.

Referenced by BesMagneticField().

00131 {
00132     
00133   fFieldMessenger=new BesMagneticFieldMessenger(this); 
00134   fEquation = new G4Mag_UsualEqRhs(this); 
00135  
00136   fMinStep     = 0.01*mm ; // minimal step of 1 mm is default
00137 
00138   fStepperType =4;      // ClassicalRK4 is default stepper
00139   fFieldManager = G4TransportationManager::GetTransportationManager()
00140                                          ->GetFieldManager();
00141   G4cout<<"before CreateStepperAndChordFinder"<<G4endl;
00142   CreateStepperAndChordFinder();
00143 }

void BesMagneticField::SetDeltaIntersection ( double  newvalue  ) 

Definition at line 243 of file BesMagneticField.cc.

References fFieldManager.

Referenced by BesMagneticFieldMessenger::SetNewValue().

00244 {
00245         fFieldManager = G4TransportationManager::GetTransportationManager()->GetFieldManager();
00246         fFieldManager->SetDeltaIntersection(newvalue);
00247 }

void BesMagneticField::SetDeltaOneStep ( double  newvalue  ) 

Definition at line 237 of file BesMagneticField.cc.

References fFieldManager.

Referenced by BesMagneticFieldMessenger::SetNewValue().

00238 {
00239         fFieldManager = G4TransportationManager::GetTransportationManager()
00240                                                          ->GetFieldManager();
00241         fFieldManager->SetDeltaOneStep(newvalue);
00242 }

void BesMagneticField::SetMaximumEpsilonStep ( double  newvalue  ) 

Definition at line 253 of file BesMagneticField.cc.

References fFieldManager.

Referenced by BesMagneticFieldMessenger::SetNewValue().

00254 {
00255         fFieldManager =G4TransportationManager::GetTransportationManager()->GetFieldManager();
00256         fFieldManager->SetMaximumEpsilonStep(newvalue);
00257 }

void BesMagneticField::SetMinimumEpsilonStep ( double  newvalue  ) 

Definition at line 248 of file BesMagneticField.cc.

References fFieldManager.

Referenced by BesMagneticFieldMessenger::SetNewValue().

00249 {
00250         fFieldManager = G4TransportationManager::GetTransportationManager()->GetFieldManager();
00251         fFieldManager->SetMinimumEpsilonStep(newvalue);
00252 }

void BesMagneticField::SetMinStep ( G4double  s  )  [inline]

Definition at line 71 of file BesMagneticField.hh.

References fMinStep.

Referenced by BesMagneticFieldMessenger::SetNewValue().

00071 { fMinStep = s ; }

void BesMagneticField::SetStepper (  ) 

Definition at line 185 of file BesMagneticField.cc.

References fEquation, fStepper, and fStepperType.

Referenced by CreateStepperAndChordFinder().

00186 {
00187   if(fStepper) delete fStepper;
00188 
00189   switch ( fStepperType ) 
00190   {
00191     case 0:  
00192       fStepper = new G4ExplicitEuler( fEquation ); 
00193       G4cout<<"G4ExplicitEuler is called"<<G4endl;     
00194       break;
00195     case 1:  
00196       fStepper = new G4ImplicitEuler( fEquation );      
00197       G4cout<<"G4ImplicitEuler is called"<<G4endl;     
00198       break;
00199     case 2:  
00200       fStepper = new G4SimpleRunge( fEquation );        
00201       G4cout<<"G4SimpleRunge is called"<<G4endl;     
00202       break;
00203     case 3:  
00204       fStepper = new G4SimpleHeum( fEquation );         
00205       G4cout<<"G4SimpleHeum is called"<<G4endl;     
00206       break;
00207     case 4:  
00208       fStepper = new G4ClassicalRK4( fEquation );       
00209       G4cout<<"G4ClassicalRK4 (default) is called"<<G4endl;     
00210       break;
00211     case 5:  
00212       fStepper = new G4HelixExplicitEuler( fEquation ); 
00213       G4cout<<"G4HelixExplicitEuler is called"<<G4endl;     
00214       break;
00215     case 6:  
00216       fStepper = new G4HelixImplicitEuler( fEquation ); 
00217       G4cout<<"G4HelixImplicitEuler is called"<<G4endl;     
00218       break;
00219     case 7:  
00220       fStepper = new G4HelixSimpleRunge( fEquation );   
00221       G4cout<<"G4HelixSimpleRunge is called"<<G4endl;     
00222       break;
00223     case 8:  
00224       fStepper = new G4CashKarpRKF45( fEquation );      
00225       G4cout<<"G4CashKarpRKF45 is called"<<G4endl;     
00226       break;
00227     case 9:  
00228       fStepper = new G4RKG3_Stepper( fEquation );       
00229       G4cout<<"G4RKG3_Stepper is called"<<G4endl;     
00230       break;
00231     default: fStepper = 0;
00232   }
00233   return; 
00234 }

void BesMagneticField::SetStepperType ( G4int  i  )  [inline]

Definition at line 67 of file BesMagneticField.hh.

References fStepperType.

Referenced by BesMagneticFieldMessenger::SetNewValue().

00067 { fStepperType = i ; }


Member Data Documentation

G4ChordFinder* BesMagneticField::fChordFinder [protected]

Definition at line 85 of file BesMagneticField.hh.

Referenced by CreateStepperAndChordFinder(), and ~BesMagneticField().

G4Mag_UsualEqRhs* BesMagneticField::fEquation [protected]

Definition at line 86 of file BesMagneticField.hh.

Referenced by InitialiseAll(), SetStepper(), and ~BesMagneticField().

G4FieldManager* BesMagneticField::fFieldManager [protected]

Definition at line 84 of file BesMagneticField.hh.

Referenced by CreateStepperAndChordFinder(), InitialiseAll(), SetDeltaIntersection(), SetDeltaOneStep(), SetMaximumEpsilonStep(), and SetMinimumEpsilonStep().

BesMagneticFieldMessenger* BesMagneticField::fFieldMessenger [protected]

Definition at line 94 of file BesMagneticField.hh.

Referenced by InitialiseAll(), and ~BesMagneticField().

G4double BesMagneticField::fMinStep [protected]

Definition at line 92 of file BesMagneticField.hh.

Referenced by CreateStepperAndChordFinder(), InitialiseAll(), and SetMinStep().

G4MagIntegratorStepper* BesMagneticField::fStepper [protected]

Definition at line 89 of file BesMagneticField.hh.

Referenced by CreateStepperAndChordFinder(), SetStepper(), and ~BesMagneticField().

G4int BesMagneticField::fStepperType [protected]

Definition at line 90 of file BesMagneticField.hh.

Referenced by InitialiseAll(), SetStepper(), and SetStepperType().

IMagneticFieldSvc* BesMagneticField::m_pIMF [protected]

Definition at line 95 of file BesMagneticField.hh.

Referenced by BesMagneticField(), and GetFieldValue().


Generated on Tue Nov 29 23:17:32 2016 for BOSS_7.0.2 by  doxygen 1.4.7