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 }