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 }