34 const G4double dydx[],
49 G4ThreeVector pos = G4ThreeVector(yIn[0], yIn[1], yIn[2]);
50 G4ThreeVector mom = G4ThreeVector(yIn[3], yIn[4], yIn[5]);
51 G4ThreeVector momUnit = mom.unit();
54 G4AffineTransform GlobalAffine =
auxNavigator->GetGlobalToLocalTransform();
55 G4ThreeVector localMomUnit = GlobalAffine.TransformAxis(momUnit);
57 if (localMomUnit.z() < 0.9 || mom.mag() < 40.0)
76 {yErr[i] = yOut[i] - yTemp[i];}
78 catch (
const std::exception&)
86 G4ThreeVector& localPos,
87 G4ThreeVector& localMom,
88 const G4ThreeVector& localA)
91 G4double localAMag = localA.mag();
96 G4double dc = h2*localAMag/8;
99 G4double dx = localMom.x()*h + localA.x()*h2/2;
100 G4double dy = localMom.y()*h + localA.y()*h2/2;
106 G4double dz = std::sqrt(std::abs(h2*(1.-h2*localAMag*localAMag/12)-dx*dx-dy*dy));
108 {
throw std::out_of_range(
"non-paraxial in old euler method");}
111 G4double ScaleFac=(dx*dx+dy*dy+dz*dz)/h2;
112 if (ScaleFac>1.0000001)
114 ScaleFac=std::sqrt(ScaleFac);
120 localPos.setX(localPos.x()+dx);
121 localPos.setY(localPos.y()+dy);
122 localPos.setZ(localPos.z()+dz);
124 localMom = localMom + h*localA;
128 localPos += h*localMom;