00001
00002
00003
00004
00005
00006 #include "BDSGlobalConstants.hh"
00007
00008 #include "globals.hh"
00009 #include "BDSMuSpoilerMagField.hh"
00010
00011 #include "G4Navigator.hh"
00012 #include "G4TransportationManager.hh"
00013
00014 BDSMuSpoilerMagField::BDSMuSpoilerMagField(G4double aField)
00015 :itsBField(aField)
00016 {}
00017
00018 BDSMuSpoilerMagField::~BDSMuSpoilerMagField(){}
00019
00020 void BDSMuSpoilerMagField::GetFieldValue(const G4double Point[4],
00021 G4double *Bfield ) const
00022 {
00023 G4Navigator* MuSpoilerNavigator=
00024 G4TransportationManager::GetTransportationManager()->
00025 GetNavigatorForTracking();
00026
00027 G4ThreeVector GlobalPosition= G4ThreeVector( Point[0], Point[1], Point[2]);
00028 G4AffineTransform GlobalAffine=MuSpoilerNavigator->
00029 GetGlobalToLocalTransform();
00030 G4ThreeVector LocalR=GlobalAffine.TransformPoint(GlobalPosition);
00031
00032 G4double BFactor=itsBField/LocalR.mag();
00033
00034
00035
00036 Bfield[0]= LocalR.y()*BFactor;
00037 Bfield[1]= -LocalR.x()*BFactor;
00038 Bfield[2]=0;
00039 }
00040
00041
00042