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