Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

BesMagneticField Class Reference

#include <BesMagneticField.hh>

List of all members.

Public Member Functions

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

Protected Attributes

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


Constructor & Destructor Documentation

BesMagneticField::BesMagneticField  ) 
 

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  ) 
 

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

BesMagneticField::BesMagneticField  ) 
 

BesMagneticField::~BesMagneticField  ) 
 


Member Function Documentation

void BesMagneticField::CreateStepperAndChordFinder  ) 
 

void BesMagneticField::CreateStepperAndChordFinder  ) 
 

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
 

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

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  ) 
 

void BesMagneticField::InitialiseAll  ) 
 

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  ) 
 

void BesMagneticField::SetDeltaIntersection double  newvalue  ) 
 

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

void BesMagneticField::SetDeltaOneStep double  newvalue  ) 
 

void BesMagneticField::SetDeltaOneStep double  newvalue  ) 
 

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

void BesMagneticField::SetMaximumEpsilonStep double  newvalue  ) 
 

void BesMagneticField::SetMaximumEpsilonStep double  newvalue  ) 
 

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

void BesMagneticField::SetMinimumEpsilonStep double  newvalue  ) 
 

void BesMagneticField::SetMinimumEpsilonStep double  newvalue  ) 
 

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

void BesMagneticField::SetMinStep G4double  s  )  [inline]
 

00071 { fMinStep = s ; }

void BesMagneticField::SetMinStep G4double  s  )  [inline]
 

00071 { fMinStep = s ; }

void BesMagneticField::SetStepper  ) 
 

void BesMagneticField::SetStepper  ) 
 

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]
 

00067 { fStepperType = i ; }

void BesMagneticField::SetStepperType G4int  i  )  [inline]
 

00067 { fStepperType = i ; }


Member Data Documentation

G4ChordFinder* BesMagneticField::fChordFinder [protected]
 

G4ChordFinder* BesMagneticField::fChordFinder [protected]
 

G4Mag_UsualEqRhs* BesMagneticField::fEquation [protected]
 

G4Mag_UsualEqRhs* BesMagneticField::fEquation [protected]
 

G4FieldManager* BesMagneticField::fFieldManager [protected]
 

G4FieldManager* BesMagneticField::fFieldManager [protected]
 

BesMagneticFieldMessenger* BesMagneticField::fFieldMessenger [protected]
 

BesMagneticFieldMessenger* BesMagneticField::fFieldMessenger [protected]
 

G4double BesMagneticField::fMinStep [protected]
 

G4MagIntegratorStepper* BesMagneticField::fStepper [protected]
 

G4MagIntegratorStepper* BesMagneticField::fStepper [protected]
 

G4int BesMagneticField::fStepperType [protected]
 

IMagneticFieldSvc* BesMagneticField::m_pIMF [protected]
 

IMagneticFieldSvc* BesMagneticField::m_pIMF [protected]
 


The documentation for this class was generated from the following files:
Generated on Wed Feb 2 15:52:43 2011 for BOSS6.5.5 by  doxygen 1.3.9.1