/home/cern/BDSIM_new/src/BDSSolenoidMagField.cc

00001 //
00002 // This class returns the B field of a solenoid in GLOBAL coordinates
00003 //
00004 #include "BDSSolenoidMagField.hh"
00005 
00006 #include "G4Navigator.hh"
00007 #include "G4TransportationManager.hh"
00008 
00009 BDSSolenoidMagField::BDSSolenoidMagField(G4double aBField):itsBField(aBField){
00010   G4cout<<"Using Geant4 transportation"<<G4endl;
00011 }
00012 BDSSolenoidMagField::~BDSSolenoidMagField(){}
00013 
00014 void BDSSolenoidMagField::GetFieldValue( const G4double Point[4],
00015                                       G4double *Bfield ) const
00016 {
00017   G4Navigator* Navigator=
00018     G4TransportationManager::GetTransportationManager()->
00019     GetNavigatorForTracking();
00020  
00021   G4ThreeVector LocalR, GlobalR, LocalBField;
00022 
00023   // commented out because solenoid field (uniform) does not depend on position
00024   //GlobalR.setX(Point[0]);
00025   //GlobalR.setY(Point[1]);
00026   //GlobalR.setZ(Point[2]);
00027   //G4AffineTransform GlobalAffine = Navigator->GetGlobalToLocalTransform();
00028   //LocalR = GlobalAffine.TransformPoint(GlobalR); 
00029 
00030   LocalBField = G4ThreeVector(0.0, 0.0, itsBField);
00031   
00032   G4AffineTransform LocalAffine = Navigator->GetLocalToGlobalTransform();
00033   G4ThreeVector GlobalBField = LocalAffine.TransformAxis(LocalBField);
00034 
00035   Bfield[0]=GlobalBField.x();
00036   Bfield[1]=GlobalBField.y();
00037   Bfield[2]=GlobalBField.z();
00038 }

Generated on Wed Mar 5 17:25:23 2008 for BDSIM by  doxygen 1.5.3