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

00001 //This class descibes an inner and an outer solenoid field. Derived from BDSQuadMagField.cc.
00002 
00003 #include "BDSGlobalConstants.hh" 
00004 #include "BDSDetectorSolenoidMagField.hh"
00005 #include "G4Navigator.hh"
00006 #include "G4TransportationManager.hh"
00007 
00008 BDSDetectorSolenoidMagField::BDSDetectorSolenoidMagField(G4double BIn, G4double BOut, G4double radiusIn, G4double radiusOut, G4double zMin, G4double zMax):itsBIn(BIn), itsBOut(BOut), itsRadiusIn(radiusIn), itsRadiusOut(radiusOut), itsZMin(zMin), itsZMax(zMax){}
00009 BDSDetectorSolenoidMagField::~BDSDetectorSolenoidMagField(){}
00010 
00011 void BDSDetectorSolenoidMagField::GetFieldValue( const G4double Point[4],
00012                        G4double *Bfield ) const
00013 {
00014       G4Navigator* SolenoidNavigator=
00015         G4TransportationManager::GetTransportationManager()->
00016         GetNavigatorForTracking();
00017  
00018   G4ThreeVector LocalR, GlobalR;
00019 
00020   GlobalR.setX(Point[0]);
00021   GlobalR.setY(Point[1]);
00022   GlobalR.setZ(Point[2]);
00023   G4AffineTransform GlobalAffine=SolenoidNavigator->GetGlobalToLocalTransform();
00024   LocalR=GlobalAffine.TransformPoint(GlobalR); 
00025 
00026   Bfield[0]=0;
00027   Bfield[1]=0;
00028 
00029   G4double zField=0;
00030 
00031   G4double localRad = sqrt(pow(LocalR.y(),2)+pow(LocalR.x(),2));
00032 
00033   if( (LocalR.z() > itsZMin) && (LocalR.z() < itsZMax) ){
00034     if(localRad<itsRadiusIn){
00035       zField = itsBIn;
00036     } else if(localRad<itsRadiusOut){
00037       zField = itsBOut;
00038     } else zField=0;
00039   } else zField=0;
00040 
00041   Bfield[2]=zField;
00042 }
00043 
00044 
00045 

Generated on 28 Jun 2015 for BDSIM by  doxygen 1.4.7