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

00001 /* BDSIM code.    Version 1.0
00002    Author: Grahame A. Blair, Royal Holloway, Univ. of London.
00003    Last modified 24.7.2002
00004    Copyright (c) 2002 by G.A.Blair.  ALL RIGHTS RESERVED. 
00005 
00006    Modified 22.03.05 by J.C.Carter, Royal Holloway, Univ. of London.
00007    Changed StringFromInt to be the BDSGlobal version
00008 */
00009 
00010 #include "BDSSextupole.hh"
00011 
00012 #include "BDSGlobalConstants.hh" 
00013 #include "BDSBeamPipeInfo.hh"
00014 #include "BDSMagnet.hh"
00015 #include "BDSMagnetType.hh"
00016 #include "BDSMagnetOuterInfo.hh"
00017 #include "BDSSextMagField.hh"
00018 #include "BDSSextStepper.hh"
00019 
00020 #include "G4FieldManager.hh"
00021 #include "G4LogicalVolume.hh"
00022 #include "G4UserLimits.hh"
00023 #include "G4Tubs.hh"
00024 #include "G4VisAttributes.hh"
00025 #include "G4VPhysicalVolume.hh"
00026 
00027 class BDSTiltOffset;
00028 
00029 BDSSextupole::BDSSextupole(G4String           name,
00030                            G4double           length,
00031                            G4double           bDblPrime,
00032                            BDSBeamPipeInfo*   beamPipeInfo,
00033                            BDSMagnetOuterInfo magnetOuterInfo,
00034                            BDSTiltOffset      tiltOffset):
00035   BDSMagnet(BDSMagnetType::sextupole, name, length,
00036             beamPipeInfo, magnetOuterInfo, tiltOffset),
00037    itsBDblPrime(bDblPrime)
00038 {;}
00039 
00040 void BDSSextupole::Build()
00041 {
00042   BDSMagnet::Build();
00043   if(BDSGlobalConstants::Instance()->GetIncludeIronMagFields())
00044     {
00045       G4double polePos[4];
00046       G4double Bfield[3];
00047       
00048       //coordinate in GetFieldValue
00049       polePos[0]=-BDSGlobalConstants::Instance()->GetMagnetPoleRadius()*sin(CLHEP::pi/6);
00050       polePos[1]=BDSGlobalConstants::Instance()->GetMagnetPoleRadius()*cos(CLHEP::pi/6);
00051       polePos[2]=0.;
00052       polePos[3]=-999.;//flag to use polePos rather than local track
00053       
00054       itsMagField->GetFieldValue(polePos,Bfield);
00055       G4double BFldIron=
00056         sqrt(Bfield[0]*Bfield[0]+Bfield[1]*Bfield[1])*
00057         BDSGlobalConstants::Instance()->GetMagnetPoleSize()/
00058         (BDSGlobalConstants::Instance()->GetComponentBoxSize()/2-
00059          BDSGlobalConstants::Instance()->GetMagnetPoleRadius());
00060       
00061       // Magnetic flux from a pole is divided in two directions
00062       BFldIron/=2.;
00063       
00064       BuildOuterFieldManager(6, BFldIron,CLHEP::pi/6);
00065     }
00066 }
00067 
00068 void BDSSextupole::BuildBPFieldAndStepper()
00069 {
00070   // set up the magnetic field and stepper
00071   itsMagField=new BDSSextMagField(1*itsBDblPrime); //L Deacon testing field sign 4/7/12
00072   itsEqRhs=new G4Mag_UsualEqRhs(itsMagField);
00073 
00074   BDSSextStepper* sextStepper=new BDSSextStepper(itsEqRhs);
00075   sextStepper->SetBDblPrime(itsBDblPrime);
00076   itsStepper = sextStepper;
00077 }

Generated on 28 Jun 2015 for BDSIM by  doxygen 1.4.7