32BDSFieldMagDipoleEnge::BDSFieldMagDipoleEnge(G4double strength,
33 G4double apertureRadius,
35 G4double engeCoefficient):
37 halfLength(0.5*coilLength),
39 engeCoeff(engeCoefficient)
43 const G4double )
const
45 G4double z = position.z();
46 G4double y = position.y();
47 G4double rho = position.perp();
49 G4double zleft = z + halfLength + D;
50 G4double zright = z - halfLength - D;
56 {
return G4ThreeVector();}
59 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));
60 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));
62 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));
63 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));
65 By = By_left + By_right - 1.0;
66 Bz = Bz_left + Bz_right;
68 G4ThreeVector centerField = QueryField(y, 0.0);
69 G4double normalisation = B0 / centerField.y();
75 G4ThreeVector result = G4ThreeVector(0,By,Bz);