00001 
00002 
00003 #include "BDSGlobalConstants.hh"
00004 #include "BDSDebug.hh"
00005 
00006 #include "BDSSolenoidMagField.hh"
00007 
00008 #include "G4Navigator.hh"
00009 #include "G4TransportationManager.hh"
00010 
00011 BDSSolenoidMagField::BDSSolenoidMagField(G4double aBField):itsBField(aBField){
00012   G4cout<<"Using Geant4 transportation"<<G4endl;
00013 }
00014 BDSSolenoidMagField::~BDSSolenoidMagField(){}
00015 
00016 void BDSSolenoidMagField::GetFieldValue( const G4double* ,
00017                                       G4double *Bfield ) const
00018 {
00019   G4Navigator* Navigator=
00020     G4TransportationManager::GetTransportationManager()->
00021     GetNavigatorForTracking();
00022  
00023   G4ThreeVector LocalR, GlobalR, LocalBField;
00024 
00025   
00026   
00027   
00028   
00029   
00030   
00031 
00032   LocalBField = G4ThreeVector(0.0, 0.0, itsBField);
00033   
00034   G4AffineTransform LocalAffine = Navigator->GetLocalToGlobalTransform();
00035   G4ThreeVector GlobalBField = LocalAffine.TransformAxis(LocalBField);
00036 
00037   Bfield[0]=GlobalBField.x();
00038   Bfield[1]=GlobalBField.y();
00039   Bfield[2]=GlobalBField.z();
00040 
00041 #ifdef BDSDEBUG
00042   G4cout << __METHOD_NAME__ << " B field = " << Bfield[0] << " " << Bfield[1] << " " << Bfield[2] << G4endl;
00043 #endif
00044   
00045 }