diff --git a/algo/ca/core/tracking/CaTrackFit.cxx b/algo/ca/core/tracking/CaTrackFit.cxx index 50007a34f77685e58522235abce58a5469ab53fa..3b7328c2b69adbaf801a5950c0f95c30661ad35f 100644 --- a/algo/ca/core/tracking/CaTrackFit.cxx +++ b/algo/ca/core/tracking/CaTrackFit.cxx @@ -34,19 +34,18 @@ namespace cbm::algo::ca F5 = m.CosPhi() * fTr.C50() + m.SinPhi() * fTr.C51(); F6 = m.CosPhi() * fTr.C60() + m.SinPhi() * fTr.C61(); - const fmask maskDoFilter = (HCH < m.Du2() * 16.f); - //cnst maskDoFilter = _f32vec4_true; + constexpr bool doProtect = !std::is_same<fscal, double>::value; + + const fmask maskDoFilter = doProtect ? (HCH < m.Du2() * 16.f) : fmask::One(); // correction to HCH is needed for the case when sigma2 is so small // with respect to HCH that it disappears due to the roundoff error // - fvec wi = fMaskF / (m.Du2() + fvec(1.0000001) * HCH); + fvec wi = doProtect ?(fMaskF / (m.Du2() + fvec(1.0000001) * HCH)) : (fMaskF / (m.Du2() + HCH)); fvec zetawi = fMaskF * zeta / (iif(maskDoFilter, m.Du2(), fvec::Zero()) + HCH); - //wi = iif(wi > fvec::Zero(), wi, fvec::Zero()); wi = iif(m.Du2() > fvec::Zero(), wi, fvec::Zero()); - // fTr.ChiSq() += iif( maskDoFilter, zeta * zetawi, fvec::Zero() ); fTr.ChiSq() += m.Ndf() * zeta * zeta * wi; fTr.Ndf() += m.Ndf() * fMaskF;