00001 #include "BDSBeamPipeInfo.hh"
00002 #include "BDSDebug.hh"
00003 #include "BDSGlobalConstants.hh"
00004 #include "BDSMagnet.hh"
00005 #include "BDSMagnetOuterInfo.hh"
00006 #include "BDSSolenoid.hh"
00007 #include "BDSSolenoidMagField.hh"
00008 #include "BDSSolenoidStepper.hh"
00009
00010 #include "G4LogicalVolume.hh"
00011 #include "G4Mag_UsualEqRhs.hh"
00012 #include "G4MagneticField.hh"
00013 #include "G4Tubs.hh"
00014 #include "G4UniformMagField.hh"
00015 #include "G4UserLimits.hh"
00016 #include "G4VisAttributes.hh"
00017 #include "G4VPhysicalVolume.hh"
00018
00019 class BDSTiltOffset;
00020
00021 BDSSolenoid::BDSSolenoid(G4String name,
00022 G4double length,
00023 G4double bField,
00024 BDSBeamPipeInfo* beamPipeInfo,
00025 BDSMagnetOuterInfo magnetOuterInfo,
00026 BDSTiltOffset tiltOffset):
00027 BDSMagnet(BDSMagnetType::solenoid, name, length,
00028 beamPipeInfo, magnetOuterInfo, tiltOffset),
00029 itsBField(bField)
00030 {;}
00031
00032 void BDSSolenoid::Build()
00033 {
00034 BDSMagnet::Build();
00035 if(BDSGlobalConstants::Instance()->GetIncludeIronMagFields())
00036 {
00037 G4cout << __METHOD_NAME__ << "IncludeIronMagFields option not implemented for solenoid class"<<G4endl;
00038 }
00039 }
00040
00041 void BDSSolenoid::BuildBPFieldAndStepper()
00042 {
00043 #ifdef BDSDEBUG
00044 G4cout << __METHOD_NAME__ << G4endl;
00045 #endif
00046
00047 G4ThreeVector Bfield(0.,0.,itsBField);
00048 itsMagField = new G4UniformMagField(Bfield);
00049 itsEqRhs = new G4Mag_UsualEqRhs(itsMagField);
00050 BDSSolenoidStepper* solenoidStepper = new BDSSolenoidStepper(itsEqRhs);
00051 solenoidStepper->SetBField(itsBField);
00052 itsStepper = solenoidStepper;
00053 }