/scratch0/jsnuveri/BDSIM/BDSIMgit/bdsim/src/BDSSolenoidMagField.cc

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

Generated on 28 Jun 2015 for BDSIM by  doxygen 1.4.7