42BDSFieldMagSolenoidBlock::BDSFieldMagSolenoidBlock(G4double strength,
43 G4bool strengthIsCurrent,
44 G4double innerRadiusIn,
45 G4double radialThicknessIn,
46 G4double fullLengthZIn,
50 radialThickness(radialThicknessIn),
51 fullLengthZ(fullLengthZIn),
54 coilTolerance(toleranceIn/(nSheetsIn*2)),
55 nSheetsBlock(nSheetsIn)
61 if (strengthIsCurrent)
68 I = B0 * 2 * a / CLHEP::mu0;
70 currentDensity = I*radialThickness*fullLengthZ/nSheetsBlock;
74 const G4double )
const
79 std::unique_ptr<BDSFieldMag> field;
80 G4ThreeVector blockField = G4ThreeVector(0,0,0);
81 G4ThreeVector sheetField;
82 double dr = radialThickness/nSheetsBlock;
83 for (
int sheet = 0; sheet < nSheetsBlock; sheet++)
85 field = std::make_unique<BDSFieldMagSolenoidSheet>(currentDensity,
87 a + (sheet * dr) + dr / 2,
90 sheetField = field->GetField(position);
91 if (sheetField == G4ThreeVector(0, 0, 0))
94 {blockField += sheetField;}