00001
00002
00003
00004
00005
00006
00007
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
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.;
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
00062 BFldIron/=2.;
00063
00064 BuildOuterFieldManager(6, BFldIron,CLHEP::pi/6);
00065 }
00066 }
00067
00068 void BDSSextupole::BuildBPFieldAndStepper()
00069 {
00070
00071 itsMagField=new BDSSextMagField(1*itsBDblPrime);
00072 itsEqRhs=new G4Mag_UsualEqRhs(itsMagField);
00073
00074 BDSSextStepper* sextStepper=new BDSSextStepper(itsEqRhs);
00075 sextStepper->SetBDblPrime(itsBDblPrime);
00076 itsStepper = sextStepper;
00077 }