00001
00002
00003
00004
00005
00006 #include "BDSGlobalConstants.hh"
00007
00008 #include "BDSQuadMagField.hh"
00009
00010 #include "G4Navigator.hh"
00011 #include "G4TransportationManager.hh"
00012
00013 BDSQuadMagField::BDSQuadMagField(G4double aBGrad):itsBGrad(aBGrad){
00014 QuadNavigator=new G4Navigator();
00015 }
00016 BDSQuadMagField::~BDSQuadMagField(){
00017 delete QuadNavigator;
00018 }
00019
00020 void BDSQuadMagField::GetFieldValue( const G4double Point[4],
00021 G4double *Bfield ) const
00022 {
00023
00024
00025 G4ThreeVector LocalR, GlobalR;
00026
00027 GlobalR.setX(Point[0]);
00028 GlobalR.setY(Point[1]);
00029 GlobalR.setZ(Point[2]);
00030
00031 QuadNavigator->SetWorldVolume(G4TransportationManager::GetTransportationManager()->GetNavigatorForTracking()->GetWorldVolume());
00032 QuadNavigator->LocateGlobalPointAndSetup(GlobalR);
00033 G4AffineTransform GlobalAffine=QuadNavigator->GetGlobalToLocalTransform();
00034 LocalR=GlobalAffine.TransformPoint(GlobalR);
00035
00036
00037
00038
00039
00040 Bfield[0]=LocalR.y()*itsBGrad;
00041 Bfield[1]=LocalR.x()*itsBGrad;
00042 Bfield[2]=0;
00043
00044
00045 }
00046
00047
00048