33BDSFieldMagDipoleEnge::BDSFieldMagDipoleEnge(G4double strength,
34 G4double apertureRadius,
36 G4double engeCoefficient):
38 halfLength(0.5*coilLength),
40 engeCoeff(engeCoefficient)
44 const G4double )
const
46 G4double z = position.z();
47 G4double y = position.y();
48 G4double rho = position.perp();
50 G4double zleft = z + halfLength + D;
51 G4double zright = z - halfLength - D;
57 {
return G4ThreeVector();}
60 G4double By_left = (1 + std::exp(-zleft*engeCoeff/D) * std::cos(y*engeCoeff/D)) / (1 + 2*std::exp(-zleft*engeCoeff/D) * std::cos(y*engeCoeff/D) + std::exp(-2*zleft*engeCoeff/D));
61 G4double By_right = (1 + std::exp(zright*engeCoeff/D) * std::cos(y*engeCoeff/D)) / (1 + 2*std::exp(zright*engeCoeff/D) * std::cos(y*engeCoeff/D) + std::exp(2*zright*engeCoeff/D));
63 G4double Bz_left = ( std::exp(-zleft*engeCoeff/D) * std::sin(y*engeCoeff/D)) / (1 + 2*std::exp(-zleft*engeCoeff/D) * std::cos(y*engeCoeff/D) + std::exp(-2*zleft*engeCoeff/D));
64 G4double Bz_right = ( - std::exp(zright*engeCoeff/D) * std::sin(y*engeCoeff/D)) / (1 + 2*std::exp(zright*engeCoeff/D) * std::cos(y*engeCoeff/D) + std::exp(2*zright*engeCoeff/D));
66 By = By_left + By_right - 1.0;
67 Bz = Bz_left + Bz_right;
69 G4ThreeVector centerField = QueryField(y, 0.0);
70 G4double normalisation = B0 / centerField.y();
76 G4ThreeVector result = G4ThreeVector(0,By,Bz);