@@ -164,7 +164,6 @@ GPUd() bool PropagatorImpl<value_T>::PropagateToXBxByBz(TrackParCov_t& track, va
164164 //
165165 // matCorr - material correction type, it is up to the user to make sure the pointer is attached (if LUT is requested)
166166 // ----------------------------------------------------------------
167- const value_type Epsilon = 0.00001 ;
168167 auto dx = xToGo - track.getX ();
169168 int dir = dx > 0 .f ? 1 : -1 ;
170169 if (!signCorr) {
@@ -226,7 +225,6 @@ GPUd() bool PropagatorImpl<value_T>::PropagateToXBxByBz(TrackPar_t& track, value
226225 //
227226 // matCorr - material correction type, it is up to the user to make sure the pointer is attached (if LUT is requested)
228227 // ----------------------------------------------------------------
229- const value_type Epsilon = 0.00001 ;
230228 auto dx = xToGo - track.getX ();
231229 int dir = dx > 0 .f ? 1 : -1 ;
232230 if (!signCorr) {
@@ -286,7 +284,6 @@ GPUd() bool PropagatorImpl<value_T>::propagateToX(TrackParCov_t& track, value_ty
286284 //
287285 // matCorr - material correction type, it is up to the user to make sure the pointer is attached (if LUT is requested)
288286 // ----------------------------------------------------------------
289- const value_type Epsilon = 0.00001 ;
290287 auto dx = xToGo - track.getX ();
291288 int dir = dx > 0 .f ? 1 : -1 ;
292289 if (!signCorr) {
@@ -346,7 +343,6 @@ GPUd() bool PropagatorImpl<value_T>::propagateToX(TrackPar_t& track, value_type
346343 //
347344 // matCorr - material correction type, it is up to the user to make sure the pointer is attached (if LUT is requested)
348345 // ----------------------------------------------------------------
349- const value_type Epsilon = 0.00001 ;
350346 auto dx = xToGo - track.getX ();
351347 int dir = dx > 0 .f ? 1 : -1 ;
352348 if (!signCorr) {
@@ -393,24 +389,34 @@ GPUd() bool PropagatorImpl<value_T>::propagateToX(TrackPar_t& track, value_type
393389// _______________________________________________________________________
394390template <typename value_T>
395391template <typename track_T>
396- GPUd () bool PropagatorImpl<value_T>::propagateToAlphaX(track_T& track, value_type alpha, value_type x, bool bzOnly, value_type maxSnp, value_type maxStep,
392+ GPUd () bool PropagatorImpl<value_T>::propagateToAlphaX(track_T& track, value_type alpha, value_type x, bool bzOnly, value_type maxSnp, value_type maxStep, int minSteps,
397393 MatCorrType matCorr, track::TrackLTIntegral* tofInfo, int signCorr) const
398394{
399395 // propagate to alpha,X, if needed in a few steps
400396 auto snp = track.getSnpAt (alpha, x, getNominalBz ());
401397 // apply safety factor 0.9 for crude rotation estimate
402- if (math_utils::detail::abs<value_type>(snp) < maxSnp * 0.9 && track.rotate (alpha) && propagateTo (track, x, bzOnly, maxSnp, maxStep, matCorr, tofInfo, signCorr)) {
403- return true ;
398+ if (math_utils::detail::abs<value_type>(snp) < maxSnp * 0.9 && track.rotate (alpha)) {
399+ auto dx = math_utils::detail::abs<value_type>(x - track.getX ());
400+ if (dx < Epsilon) {
401+ return true ;
402+ }
403+ return propagateTo (track, x, bzOnly, maxSnp, math_utils::detail::min<value_type>(dx / minSteps, maxStep), matCorr, tofInfo, signCorr);
404404 }
405+ return false ;
406+ /*
405407 // try to go in a few steps with intermediate rotations
408+
409+
406410 auto alphaTrg = alpha;
407411 math_utils::detail::bringToPMPi<value_type>(alphaTrg);
408412 auto alpCurr = track.getAlpha();
409413 math_utils::detail::bringToPMPi<value_type>(alpCurr);
410- auto dalp = math_utils::detail::deltaPhiSmall<value_type>(alpCurr, alphaTrg) / 2 ; // effective half (alpha - alphaCurr)
411- auto xtmp = (track.getX () + x) / 2 ;
414+ int nsteps = minSteps > 2 ? minSteps : 2;
415+ auto dalp = math_utils::detail::deltaPhiSmall<value_type>(alpCurr, alphaTrg) / nsteps; // effective (alpha - alphaCurr)/nsteps
416+ auto xtmp = (track.getX() + x) / nsteps;
412417 return track.rotate(alpCurr + dalp) && propagateTo(track, xtmp, bzOnly, maxSnp, maxStep, matCorr, tofInfo, signCorr) &&
413418 track.rotate(alpha) && propagateTo(track, x, bzOnly, maxSnp, maxStep, matCorr, tofInfo, signCorr);
419+ */
414420}
415421
416422// _______________________________________________________________________
@@ -730,11 +736,11 @@ template class PropagatorImpl<float>;
730736template class PropagatorImpl <double >;
731737#endif
732738#ifndef __HIPCC__ // TODO: Fixme: must prevent HIP from compiling this, should file bug report
733- template bool GPUd () PropagatorImpl<float>::propagateToAlphaX<PropagatorImpl<float>::TrackPar_t>(PropagatorImpl<float >::TrackPar_t&, float , float , bool , float , float , PropagatorImpl<float >::MatCorrType matCorr, track::TrackLTIntegral*, int ) const ;
734- template bool GPUd () PropagatorImpl<float>::propagateToAlphaX<PropagatorImpl<float>::TrackParCov_t>(PropagatorImpl<float >::TrackParCov_t&, float , float , bool , float , float , PropagatorImpl<float >::MatCorrType matCorr, track::TrackLTIntegral*, int ) const ;
739+ template bool GPUd () PropagatorImpl<float>::propagateToAlphaX<PropagatorImpl<float>::TrackPar_t>(PropagatorImpl<float >::TrackPar_t&, float , float , bool , float , float , int , PropagatorImpl<float >::MatCorrType matCorr, track::TrackLTIntegral*, int ) const ;
740+ template bool GPUd () PropagatorImpl<float>::propagateToAlphaX<PropagatorImpl<float>::TrackParCov_t>(PropagatorImpl<float >::TrackParCov_t&, float , float , bool , float , float , int , PropagatorImpl<float >::MatCorrType matCorr, track::TrackLTIntegral*, int ) const ;
735741#ifndef GPUCA_GPUCODE_DEVICE
736- template bool PropagatorImpl<double >::propagateToAlphaX<PropagatorImpl<double >::TrackPar_t>(PropagatorImpl<double >::TrackPar_t&, double , double , bool , double , double , PropagatorImpl<double >::MatCorrType matCorr, track::TrackLTIntegral*, int ) const ;
737- template bool PropagatorImpl<double >::propagateToAlphaX<PropagatorImpl<double >::TrackParCov_t>(PropagatorImpl<double >::TrackParCov_t&, double , double , bool , double , double , PropagatorImpl<double >::MatCorrType matCorr, track::TrackLTIntegral*, int ) const ;
742+ template bool PropagatorImpl<double >::propagateToAlphaX<PropagatorImpl<double >::TrackPar_t>(PropagatorImpl<double >::TrackPar_t&, double , double , bool , double , double , int , PropagatorImpl<double >::MatCorrType matCorr, track::TrackLTIntegral*, int ) const ;
743+ template bool PropagatorImpl<double >::propagateToAlphaX<PropagatorImpl<double >::TrackParCov_t>(PropagatorImpl<double >::TrackParCov_t&, double , double , bool , double , double , int , PropagatorImpl<double >::MatCorrType matCorr, track::TrackLTIntegral*, int ) const ;
738744#endif
739745#endif
740746} // namespace o2::base
0 commit comments