Skip to content

Commit fe4ee68

Browse files
committed
Temporary use simplified version of propagateToAlphaX
1 parent 8209a49 commit fe4ee68

File tree

2 files changed

+21
-15
lines changed

2 files changed

+21
-15
lines changed

Detectors/Base/include/DetectorsBase/Propagator.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ class PropagatorImpl
9696
}
9797

9898
template <typename track_T>
99-
GPUd() bool propagateToAlphaX(track_T& track, value_type alpha, value_type x, bool bzOnly = false, value_type maxSnp = MAX_SIN_PHI, value_type maxStep = MAX_STEP,
99+
GPUd() bool propagateToAlphaX(track_T& track, value_type alpha, value_type x, bool bzOnly = false, value_type maxSnp = MAX_SIN_PHI, value_type maxStep = MAX_STEP, int minSteps = 1,
100100
MatCorrType matCorr = MatCorrType::USEMatCorrLUT, track::TrackLTIntegral* tofInfo = nullptr, int signCorr = 0) const;
101101

102102
GPUd() bool propagateToDCA(const o2::dataformats::VertexBase& vtx, o2::track::TrackParametrizationWithError<value_type>& track, value_type bZ,
@@ -160,7 +160,7 @@ class PropagatorImpl
160160
PropagatorImpl(bool uninitialized = false);
161161
~PropagatorImpl() = default;
162162
#endif
163-
163+
static constexpr value_type Epsilon = 0.00001; // precision of propagation to X
164164
template <typename T>
165165
GPUd() void getFieldXYZImpl(const math_utils::Point3D<T> xyz, T* bxyz) const;
166166

Detectors/Base/src/Propagator.cxx

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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
//_______________________________________________________________________
394390
template <typename value_T>
395391
template <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>;
730736
template 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

Comments
 (0)