455 if(!
first){EndPoint= ApproxCurveV;}
458 Point_A=CurveA_PointVelocity.GetPosition();
459 Point_B=CurveB_PointVelocity.GetPosition();
468 ya=(PointG-Point_A).mag();
469 xb=(Point_A-CurrentF_Point).mag();
470 yb=-(PointG-CurrentF_Point).mag();
471 xc=(Point_A-Point_B).mag();
472 yc=-(CurrentE_Point-Point_B).mag();
477 ya=(Point_A-CurrentE_Point).mag();
478 xb=(Point_A-CurrentF_Point).mag();
479 yb=(PointG-CurrentF_Point).mag();
480 xc=(Point_A-Point_B).mag();
481 yc=-(Point_B-PointG).mag();
486 CurrentE_Point, eps_step);
492 if(std::abs(ya)<=tolerance||std::abs(yc)<=tolerance)
503 curve=std::abs(EndPoint.GetCurveLength()
508 test_step=(test_step-xb);
509 curve=std::abs(EndPoint.GetCurveLength()
510 -CurveB_PointVelocity.GetCurveLength());
511 xb=(CurrentF_Point-Point_B).mag();
514 if(test_step<=0) { test_step=0.1*xb; }
515 if(test_step>=xb) { test_step=0.5*xb; }
516 if(test_step>=curve){ test_step=0.5*curve; }
518 if(curve*(1.+eps_step)<xb)
528 G4cout <<
"G4ChordFinder::ApproxCurvePointS() - test-step ShF = "
529 << test_step <<
" EndPoint = " << EndPoint <<
G4endl;
535 CurveB_PointVelocity,
536 CurrentE_Point, eps_step );
538 G4cout <<
"G4ChordFinder::BrentApprox = " << EndPoint <<
G4endl;
539 G4cout <<
"G4ChordFinder::LinearApprox= " << TestTrack <<
G4endl;
G4double InvParabolic(const G4double xa, const G4double ya, const G4double xb, const G4double yb, const G4double xc, const G4double yc)
G4double GetCurveLength() const
G4FieldTrack ApproxCurvePointV(const G4FieldTrack &curveAPointVelocity, const G4FieldTrack &curveBPointVelocity, const G4ThreeVector ¤tEPoint, G4double epsStep)
G4GLOB_DLL std::ostream G4cout
G4bool AccurateAdvance(G4FieldTrack &y_current, G4double hstep, G4double eps, G4double hinitial=0.0)