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