From 2270984385b81635a9e01390eb423cdc0f81bc4b Mon Sep 17 00:00:00 2001
From: "se.gorbunov" <se.gorbunov@gsi.de>
Date: Mon, 5 Sep 2022 23:09:06 +0000
Subject: [PATCH] L1: SIMD vectors: remove masked()

---
 reco/L1/L1Algo/L1Extrapolation.cxx       |  2 +-
 reco/L1/L1Algo/L1Filtration.h            | 10 +++++-----
 reco/L1/L1Algo/L1FitMaterial.cxx         |  4 ++--
 reco/L1/L1Algo/L1TrackParFit.cxx         |  8 ++++----
 reco/L1/ParticleFinder/CbmL1PFFitter.cxx | 10 +++++-----
 reco/L1/vectors/L1vecPseudo.h            |  2 --
 reco/L1/vectors/L1vecVc.h                |  2 --
 7 files changed, 17 insertions(+), 21 deletions(-)

diff --git a/reco/L1/L1Algo/L1Extrapolation.cxx b/reco/L1/L1Algo/L1Extrapolation.cxx
index e22ef374bc..cb2bb78fdf 100644
--- a/reco/L1/L1Algo/L1Extrapolation.cxx
+++ b/reco/L1/L1Algo/L1Extrapolation.cxx
@@ -687,7 +687,7 @@ void L1ExtrapolateTime(L1TrackPar& T,  // input track parameters (x,y,tx,ty,Q/p)
                        fvec timeInfo)
 {
   cnst c_light = 29.9792458;
-  dz.setZero(timeInfo < 0);  //TODO: SG: bug: must be <=0
+  dz.setZero(timeInfo <= fvec::Zero());
 
   T.t += dz * sqrt((T.tx * T.tx) + (T.ty * T.ty) + 1) / c_light;
 
diff --git a/reco/L1/L1Algo/L1Filtration.h b/reco/L1/L1Algo/L1Filtration.h
index e6b336bfb8..1e28b13418 100644
--- a/reco/L1/L1Algo/L1Filtration.h
+++ b/reco/L1/L1Algo/L1Filtration.h
@@ -28,7 +28,7 @@ inline void FilterTime(L1TrackPar& T, fvec t, fvec dt, fvec timeInfo = fvec::One
 
   fvec HCH = T.C55;
 
-  w = masked(w, timeInfo > fvec::Zero());
+  w.setZero(timeInfo <= fvec::Zero());
 
   fvec dt2 = dt * dt;
 
@@ -42,7 +42,7 @@ inline void FilterTime(L1TrackPar& T, fvec t, fvec dt, fvec timeInfo = fvec::One
 
   fvec wi     = w / (dt2 + 1.0000001f * HCH);
   fvec zeta   = T.t - t;
-  fvec zetawi = w * zeta / (masked(dt2, maskDoFilter) + HCH);
+  fvec zetawi = w * zeta / (iif(maskDoFilter, dt2, fvec::Zero()) + HCH);
 
   //T.chi2 += maskDoFilter & (zeta * zetawi);
   T.chi2 += zeta * zeta * wi;
@@ -113,9 +113,9 @@ inline void L1Filter(L1TrackPar& T, const L1UMeasurementInfo& info, fvec u, fvec
   // with respect to HCH that it disappears due to the roundoff error
   //
   fvec wi     = w / (info.sigma2 + 1.0000001f * HCH);
-  fvec zetawi = w * zeta / (masked(info.sigma2, maskDoFilter) + HCH);
+  fvec zetawi = w * zeta / (iif(maskDoFilter, info.sigma2, fvec::Zero()) + HCH);
 
-  // T.chi2 += masked( zeta * zetawi, maskDoFilter);
+  // T.chi2 += iif( maskDoFilter, zeta * zetawi, fvec::Zero() );
   T.chi2 += zeta * zeta * wi;
   T.NDF += w;
 
@@ -182,7 +182,7 @@ inline void L1FilterNoField(L1TrackPar& T, const L1UMeasurementInfo& info, fvec
   //fvec wi          = w / (info.sigma2 + 1.0000001f * HCH);
 
   fvec wi     = w / (info.sigma2 + HCH);
-  fvec zetawi = w * zeta / (masked(info.sigma2, maskDoFilter) + HCH);
+  fvec zetawi = w * zeta / (iif(maskDoFilter, info.sigma2, fvec::Zero()) + HCH);
 
   T.chi2 += zeta * zeta * wi;
   T.NDF += w;
diff --git a/reco/L1/L1Algo/L1FitMaterial.cxx b/reco/L1/L1Algo/L1FitMaterial.cxx
index 5299792d3f..91445450bb 100644
--- a/reco/L1/L1Algo/L1FitMaterial.cxx
+++ b/reco/L1/L1Algo/L1FitMaterial.cxx
@@ -149,7 +149,7 @@ fvec L1Fit::ApproximateBetheBloch(const fvec& bg2)
   const fvec lhwI = log(28.816f * 1e-9f * sqrt(rho * mZA) / mI);
 
   fmask init   = x > x1;
-  d2           = masked(lhwI + x - 0.5f, init);
+  d2           = iif(init, lhwI + x - 0.5f, fvec::Zero());
   const fvec r = (x1 - x) / (x1 - x0);
   init         = (x > x0) & (x1 > x);
   d2           = iif(init, lhwI + x - 0.5f + (0.5f - lhwI - x0) * r * r * r, d2);
@@ -196,7 +196,7 @@ fvec L1Fit::ApproximateBetheBloch(const fvec& bg2, const fvec& kp0, const fvec&
   const fvec lhwI = log(28.816f * 1e-9f * sqrt(rho * mZA) / mI);
 
   fmask init   = x > x1;
-  d2           = masked(lhwI + x - 0.5f, init);
+  d2           = iif(init, lhwI + x - 0.5f, fvec::Zero());
   const fvec r = (x1 - x) / (x1 - x0);
   init         = (x > x0) & (x1 > x);
   d2           = iif(init, lhwI + x - 0.5f + (0.5f - lhwI - x0) * r * r * r, d2);
diff --git a/reco/L1/L1Algo/L1TrackParFit.cxx b/reco/L1/L1Algo/L1TrackParFit.cxx
index 04080dff47..60e163ea4e 100644
--- a/reco/L1/L1Algo/L1TrackParFit.cxx
+++ b/reco/L1/L1Algo/L1TrackParFit.cxx
@@ -167,9 +167,9 @@ void L1TrackParFit::Filter(fvec t0, fvec dt0, fvec w, fvec timeInfo)
 
 #if 1  // use mask
   const fmask mask = (timeInfo > 0.f);
-  wi               = masked(w / (dt0 * dt0 + HCH), mask);
+  wi               = iif(mask, w / (dt0 * dt0 + HCH), fvec::Zero());
   zetawi           = zeta * wi;
-  chi2 += masked(zeta * zetawi, mask);
+  chi2 += iif(mask, zeta * zetawi, fvec::Zero());
 #else
   wi     = w / (dt0 * dt0 + HCH);
   zetawi = zeta * wi;
@@ -220,7 +220,7 @@ void L1TrackParFit::ExtrapolateLine(fvec z_out, fvec* w)
   cnst c_light = 29.9792458;
 
   fvec dz = (z_out - fz);
-  if (w) { dz = masked(dz, (fvec(0.f) < *w)); }
+  if (w) { dz.setZero(*w <= fvec::Zero()); }
 
   fx += dz * ftx;
   fy += dz * fty;
@@ -266,7 +266,7 @@ void L1TrackParFit::ExtrapolateLine1(fvec z_out, fvec* w, fvec v)
   cnst c_light = 29.9792458;
 
   fvec dz = (z_out - fz);
-  if (w) { dz = masked(dz, (fvec(0.f) < *w)); }
+  if (w) { dz.setZero(*w <= fvec::Zero()); }
 
   fx += dz * ftx;
   fy += dz * fty;
diff --git a/reco/L1/ParticleFinder/CbmL1PFFitter.cxx b/reco/L1/ParticleFinder/CbmL1PFFitter.cxx
index 5865d7fd58..270268c096 100644
--- a/reco/L1/ParticleFinder/CbmL1PFFitter.cxx
+++ b/reco/L1/ParticleFinder/CbmL1PFFitter.cxx
@@ -253,8 +253,8 @@ void CbmL1PFFitter::Fit(vector<CbmStsTrack>& Tracks, vector<int>& pidHypo)
       fld.Set(b0, z0, b1, z1, b2, z2);
 
       fmask initialised = (z[i] <= z_end) & (z_start < z[i]);
-      fvec w1           = masked(w[i], initialised);
-      fvec wIn          = mask2int(initialised);
+      fvec w1           = iif(initialised, w[i], fvec::Zero());
+      fvec wIn          = iif(initialised, fvec::One(), fvec::Zero());
 
       L1Extrapolate(T, z[i], qp0, fld, &w1);
       if (i == NMvdStations) {  // TODO: How a hit can be also a station? (S.Zharko)
@@ -330,8 +330,8 @@ void CbmL1PFFitter::Fit(vector<CbmStsTrack>& Tracks, vector<int>& pidHypo)
       fld.Set(b0, z0, b1, z1, b2, z2);
 
       fmask initialised = (z[i] < z_end) & (z_start <= z[i]);
-      fvec w1           = masked(w[i], initialised);
-      fvec wIn          = mask2int(initialised);
+      fvec w1           = iif(initialised, w[i], fvec::Zero());
+      fvec wIn          = iif(initialised, fvec::One(), fvec::Zero());
 
       L1Extrapolate(T, z[i], qp0, fld, &w1);
       if (i == NMvdStations - 1) {
@@ -526,7 +526,7 @@ void CbmL1PFFitter::GetChiToVertex(vector<CbmStsTrack>& Tracks, vector<L1FieldRe
     c[2] += fvec(Cv[2]);
     fvec d   = c[0] * c[2] - c[1] * c[1];
     fvec chi = sqrt(fabs(0.5 * (dx * dx * c[0] - 2 * dx * dy * c[1] + dy * dy * c[2]) / d));
-    chi      = masked(chi, fabs(d) >= fvec(1.e-20));
+    chi.setZero(fabs(d) < fvec(1.e-20));
 
     for (int iVec = 0; iVec < nTracks_SIMD; iVec++) {
       chiToVtx.push_back(chi[iVec]);
diff --git a/reco/L1/vectors/L1vecPseudo.h b/reco/L1/vectors/L1vecPseudo.h
index f107f5b5e4..4ae6671909 100644
--- a/reco/L1/vectors/L1vecPseudo.h
+++ b/reco/L1/vectors/L1vecPseudo.h
@@ -268,8 +268,6 @@ public:
 
 inline fvec fabs(const fvec& a) { return abs(a); }
 
-inline fvec masked(const fvec& a, const fmask& mask) { return iif(mask, a, fvec::Zero()); }
-
 inline fvec mask2int(const fmask& mask)
 {  // mask returned
   return iif(mask, fvec::One(), fvec::Zero());
diff --git a/reco/L1/vectors/L1vecVc.h b/reco/L1/vectors/L1vecVc.h
index f20939f5de..48e074ecfc 100644
--- a/reco/L1/vectors/L1vecVc.h
+++ b/reco/L1/vectors/L1vecVc.h
@@ -29,8 +29,6 @@ inline fvec operator-(const fvec& a, fscal b) { return a - fvec(b); }
 
 inline fvec fabs(const fvec& a) { return abs(a); }
 
-inline fvec masked(const fvec& a, const fmask& mask) { return iif(mask, a, fvec::Zero()); }
-
 inline fvec mask2int(const fmask& mask)
 {  // mask returned
   return iif(mask, fvec::One(), fvec::Zero());
-- 
GitLab