67 G4cout <<
"G4ChordFinderSaf statistics report: " <<
G4endl;
99 G4double MagSqShift = OriginShift.mag2() ;
100 if( MagSqShift <
sqr(safetyRadius) ){
101 pointSafety = safetyRadius - std::sqrt(MagSqShift) ;
114 return ( OriginShift.mag2() < safetyRadius*safetyRadius );
131 G4double stepTrial, stepForAccuracy;
138 G4bool validEndPoint=
false;
139 G4double dChordStep, lastStepLength;
153 likelyGood =
std::max( startSafety ,
156 stepTrial =
std::min( stepMax, likelyGood );
167 dChordStep, dyErrPos);
171 G4bool endPointInSafetySphere=
176 || endPointInSafetySphere;
179 lastStepLength = stepTrial;
182 stepForChord =
NewStep(stepTrial, dChordStep, newStepEst_Uncons );
184 if( ! validEndPoint ) {
186 stepTrial = stepForChord;
187 else if (stepForChord <= stepTrial)
202 while( ! validEndPoint );
207 if( newStepEst_Uncons > 0.0 ){
213 if( pStepForAccuracy ){
215 G4double dyErr_relative = dyErrPos/(epsStep*lastStepLength);
216 if( dyErr_relative > 1.0 ) {
221 stepForAccuracy = 0.0;
223 *pStepForAccuracy = stepForAccuracy;
226 #ifdef TEST_CHORD_PRINT
229 G4cout <<
"ChordF/FindNextChord: NoTrials= " << noTrials
230 <<
" StepForGoodChord=" << std::setw(10) << stepTrial <<
G4endl;
G4double FindNextChord(const G4FieldTrack &yStart, G4double stepMax, G4FieldTrack &yEnd, G4double &dyErrPos, G4double epsStep, G4double *pStepForAccuracy, const G4ThreeVector latestSafetyOrigin, G4double latestSafetyRadius)
G4double GetFirstFraction()
CLHEP::Hep3Vector G4ThreeVector
void SetLastStepEstimateUnc(G4double stepEst)
virtual void PrintStatistics()
G4int SetVerbose(G4int newvalue=1)
G4bool CalculatePointInside(G4ThreeVector safetyOrigin, G4double safetyRadius, G4ThreeVector point)
G4ThreeVector GetPosition() const
G4GLOB_DLL std::ostream G4cout
G4bool AcceptableMissDist(G4double dChordStep) const
void AccumulateStatistics(G4int noTrials)
G4bool QuickAdvance(G4FieldTrack &y_val, const G4double dydx[], G4double hstep, G4double &dchord_step, G4double &dyerr)
T max(const T t1, const T t2)
brief Return the largest of the two arguments
G4double NewStep(G4double stepTrialOld, G4double dChordStep, G4double &stepEstimate_Unconstrained)
T min(const T t1, const T t2)
brief Return the smallest of the two arguments
G4double ComputeNewStepSize(G4double errMaxNorm, G4double hstepCurrent)
G4double GetLastStepEstimateUnc()
G4MagInt_Driver * GetIntegrationDriver()
G4double GetFractionLast()
G4double CalculatePointSafety(G4ThreeVector safetyOrigin, G4double safetyRadius, G4ThreeVector point)
G4ChordFinderSaf(G4MagInt_Driver *pIntegrationDriver)