41BDSFieldMagSolenoidBlock::BDSFieldMagSolenoidBlock(G4double strength,
42 G4bool strengthIsCurrent,
43 G4double innerRadiusIn,
44 G4double radialThicknessIn,
45 G4double fullLengthZIn,
49 radialThickness(radialThicknessIn),
50 fullLengthZ(fullLengthZIn),
53 coilTolerance(toleranceIn/(nSheetsIn*2)),
54 nSheetsBlock(nSheetsIn)
60 if (strengthIsCurrent)
67 I = B0 * 2 * a / CLHEP::mu0;
69 currentDensity = I*radialThickness*fullLengthZ/nSheetsBlock;
73 const G4double )
const
78 std::unique_ptr<BDSFieldMag> field;
79 G4ThreeVector blockField = G4ThreeVector(0,0,0);
80 G4ThreeVector sheetField;
81 double dr = radialThickness/nSheetsBlock;
82 for (
int sheet = 0; sheet < nSheetsBlock; sheet++)
84 field = std::make_unique<BDSFieldMagSolenoidSheet>(currentDensity,
86 a + (sheet * dr) + dr / 2,
89 sheetField = field->GetField(position);
90 if (sheetField == G4ThreeVector(0, 0, 0))
93 {blockField += sheetField;}