src/BDSMuSpoilerMagField.cc

00001 /* BDSIM code.    Version 1.0
00002    Author: Grahame A. Blair, Royal Holloway, Univ. of London.
00003    Last modified 12.12.2004
00004    Copyright (c) 2004 by G.A.Blair.  ALL RIGHTS RESERVED. 
00005 */
00006 #include "BDSGlobalConstants.hh" 
00007 
00008 #include "globals.hh"
00009 #include "BDSMuSpoilerMagField.hh"
00010 #include "G4Navigator.hh"
00011 #include "G4TransportationManager.hh"
00012 
00013 BDSMuSpoilerMagField::BDSMuSpoilerMagField(G4double aField)
00014   :itsBField(aField)
00015 {
00016   MuSpoilerNavigator = new G4Navigator();
00017 }
00018 
00019 BDSMuSpoilerMagField::~BDSMuSpoilerMagField(){
00020   delete MuSpoilerNavigator;
00021 }
00022 
00023 void BDSMuSpoilerMagField::GetFieldValue(const G4double Point[4],
00024                                               G4double *Bfield ) const
00025 {
00026 
00027   G4ThreeVector GlobalPosition= G4ThreeVector( Point[0], Point[1], Point[2]);  
00028   MuSpoilerNavigator->SetWorldVolume(G4TransportationManager::GetTransportationManager()->GetNavigatorForTracking()->GetWorldVolume()); 
00029   MuSpoilerNavigator->LocateGlobalPointAndSetup(GlobalPosition);
00030 
00031   G4AffineTransform GlobalAffine=MuSpoilerNavigator->
00032     GetGlobalToLocalTransform();  
00033   G4ThreeVector LocalR=GlobalAffine.TransformPoint(GlobalPosition); 
00034 
00035   G4double BFactor=itsBField/LocalR.mag();
00036 
00037   //G4double phi = LocalR.phi();
00038 
00039   Bfield[0]= LocalR.y()*BFactor;
00040   Bfield[1]= -LocalR.x()*BFactor;
00041   Bfield[2]=0;
00042 }
00043 
00044 
00045 

Generated on 27 Aug 2013 for BDSIM by  doxygen 1.4.7