diff --git a/reco/L1/L1Algo/L1Extrapolation.cxx b/reco/L1/L1Algo/L1Extrapolation.cxx index 4ca1c944d55b606760545bfb194941ed3ed0c701..e22ef374bcc0f49577f16c0772e4ca94dc9ea4c2 100644 --- a/reco/L1/L1Algo/L1Extrapolation.cxx +++ b/reco/L1/L1Algo/L1Extrapolation.cxx @@ -44,7 +44,7 @@ void L1ExtrapolateAnalytic(L1TrackPar& T, // input track parameters (x,y,tx,ty, const fvec qp = T.qp; fvec dz = (z_out - T.z); - if (w) { dz = masked(dz, fvec::Zero() < *w); } + if (w) { dz.setZero(*w <= fvec::Zero()); } const fvec dz2 = dz * dz; const fvec dz3 = dz2 * dz; @@ -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 = masked(dz, timeInfo >= 0); + dz.setZero(timeInfo < 0); //TODO: SG: bug: must be <=0 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 4aecad1227174fc88e2f367019508605a58ccb5c..e6b336bfb8851a9ddc69b0e0d29f70d29ab04f72 100644 --- a/reco/L1/L1Algo/L1Filtration.h +++ b/reco/L1/L1Algo/L1Filtration.h @@ -176,7 +176,7 @@ inline void L1FilterNoField(L1TrackPar& T, const L1UMeasurementInfo& info, fvec F5 = info.cos_phi * T.C50 + info.sin_phi * T.C51; //const fmask maskDoFilter = (HCH < info.sigma2 * 16.f); - const fmask maskDoFilter(MaskOne()); + const fmask maskDoFilter(fmask::One()); //TODO: SG: try this //fvec wi = w / (info.sigma2 + 1.0000001f * HCH); diff --git a/reco/L1/L1Algo/L1TrackFitter.cxx b/reco/L1/L1Algo/L1TrackFitter.cxx index 3711195bdb886ec71c150b16fe87d99737e6c7bf..0520037c43ef3d168b3cd6cc3bd457801d62a9a7 100644 --- a/reco/L1/L1Algo/L1TrackFitter.cxx +++ b/reco/L1/L1Algo/L1TrackFitter.cxx @@ -531,9 +531,9 @@ void L1Algo::L1KFTrackFitter() fld.Set(fldB0, fldZ0, fldB1, fldZ1, fldB2, fldZ2); fmask initialised = (z[i] < z_end) & (z_start <= z[i]); - fvec w1 = masked(w[i], initialised); - fvec w1_time = masked(w_time[i], initialised); - fvec wIn = masked(fvec::One(), initialised); + fvec w1 = iif(initialised, w[i], fvec::Zero()); + fvec w1_time = iif(initialised, w_time[i], fvec::Zero()); + fvec wIn = iif(initialised, fvec::One(), fvec::Zero()); fld1 = fld; @@ -693,9 +693,9 @@ void L1Algo::L1KFTrackFitter() fld.Set(fldB0, fldZ0, fldB1, fldZ1, fldB2, fldZ2); fmask initialised = (z[i] <= z_end) & (z_start < z[i]); - fvec w1 = masked(w[i], initialised); - fvec w1_time = masked(w_time[i], initialised); - fvec wIn = masked(fvec::One(), initialised); + fvec w1 = iif(initialised, w[i], fvec::Zero()); + fvec w1_time = iif(initialised, w_time[i], fvec::Zero()); + fvec wIn = iif(initialised, fvec::One(), fvec::Zero()); L1Extrapolate(T, z[i], qp0, fld, &w1); @@ -1003,8 +1003,8 @@ void L1Algo::L1KFTrackFitterMuch() for (++i; i < nHits; i++) { fmask initialised = (z[i] <= z_end) & (z_start < z[i]); - fvec w1 = masked(w[i], initialised); - fvec wIn = masked(fvec::One(), initialised); + fvec w1 = iif(initialised, w[i], fvec::Zero()); + fvec wIn = iif(initialised, fvec::One(), fvec::Zero()); fldZ0 = z[i]; dz = (fldZ1 - fldZ0); @@ -1095,8 +1095,8 @@ void L1Algo::L1KFTrackFitterMuch() // T1.ExtrapolateLine1( z, &w2, v_mc); T1.ExtrapolateLine(z_cur, &w2); - nofSteps1 += masked(fvec::One(), !maskLastStep); - w2 = masked(w2, !maskLastStep); + nofSteps1 += iif(!maskLastStep, fvec::One(), fvec::Zero()); + w2 = iif(!maskLastStep, w2, fvec::Zero()); // T1.ExtrapolateLine( z_last, &w1); // L1ExtrapolateLine( T, z_last); @@ -1115,7 +1115,7 @@ void L1Algo::L1KFTrackFitterMuch() T1.L1AddThickMaterial(fParameters.GetMaterialThickness(i, T1.fx, T1.fy) / (nofSteps + fvec(1)), qp01, wIn, sta[i].materialInfo.thick / (nofSteps + fvec(1)), 1); - wIn = masked(wIn, !maskLastStep); + wIn = iif(!maskLastStep, wIn, fvec::Zero()); } else { fit.L1AddMaterial(T, sta[i].materialInfo, qp0, wIn); @@ -1199,8 +1199,8 @@ void L1Algo::L1KFTrackFitterMuch() for (--i; i >= 0; i--) { fmask initialised = (z[i] < z_end) & (z_start <= z[i]); - fvec w1 = masked(w[i], initialised); - fvec wIn = masked(fvec::One(), initialised); + fvec w1 = iif(initialised, w[i], fvec::Zero()); + fvec wIn = iif(initialised, fvec::One(), fvec::Zero()); if (i >= fNfieldStations - 1) { @@ -1235,7 +1235,7 @@ void L1Algo::L1KFTrackFitterMuch() // T1.ExtrapolateLine1( z_cur, &w2, v_mc); T1.ExtrapolateLine(z_cur, &w2); - nofSteps1 += masked(fvec::One(), !maskLastStep); + nofSteps1 += iif(!maskLastStep, fvec::One(), fvec::Zero()); // TODO: Unify the selection of energy loss correction! (S.Zharko) if constexpr (L1Constants::control::kIfUseRadLengthTable) { @@ -1252,7 +1252,7 @@ void L1Algo::L1KFTrackFitterMuch() T1.L1AddThickMaterial(fParameters.GetMaterialThickness(i, T1.fx, T1.fy) / (nofSteps + fvec(1)), qp01, w2, sta[i].materialInfo.thick / (nofSteps + fvec(1)), 0); - w2 = masked(w2, !maskLastStep); + w2 = iif(!maskLastStep, w2, fvec::Zero()); } else { fit.L1AddMaterial(T, sta[i].materialInfo, qp0, w2); @@ -1556,7 +1556,7 @@ void L1Algo::GuessVec(L1TrackParFit& t, fvec* xV, fvec* yV, fvec* zV, fvec* Sy, t.fy = (A2 * b0 - A1 * b1) * det; t.fty = (-A1 * b0 + A0 * b1) * det; t.fqp = -L * c_light_i / sqrt(txtx1 + t.fty * t.fty); - if (timeV) { t.ft = masked(time, nhits > 0); } + if (timeV) { t.ft = iif(nhits > fvec::Zero(), time, fvec::Zero()); } t.fz = z0; } diff --git a/reco/L1/OffLineInterface/CbmL1RichENNRingFinderParallel.cxx b/reco/L1/OffLineInterface/CbmL1RichENNRingFinderParallel.cxx index b531965401a974ca26a37b860ed32b1600d983ff..cdc1f7e82cd7f962dbbfb8651121fb509cc1605c 100644 --- a/reco/L1/OffLineInterface/CbmL1RichENNRingFinderParallel.cxx +++ b/reco/L1/OffLineInterface/CbmL1RichENNRingFinderParallel.cxx @@ -305,7 +305,7 @@ void CbmL1RichENNRingFinderParallel::ENNRingFinder(const int NHits, nsL1vector<E fvec S0, S1, S2, S3, S4, S5, S6, S7; fvec X = 0, Y = 0, R = 0, R2 = 0; - fmask validRing(MaskOne()); // mask of the valid rings + fmask validRing(fmask::One()); // mask of the valid rings fvec SearchAreaSize = 0; // number of hits to fit and search ring fvec PickUpAreaSize = 0; @@ -455,7 +455,7 @@ void CbmL1RichENNRingFinderParallel::ENNRingFinder(const int NHits, nsL1vector<E S4 += w * sHit.S4; } - } while (NotEmptyFmask(Dmax > fvec(0.))); + } while ((Dmax > fvec(0.)).isNotEmpty()); #ifdef PRINT_TIMING @@ -505,7 +505,7 @@ void CbmL1RichENNRingFinderParallel::ENNRingFinder(const int NHits, nsL1vector<E #ifdef PRINT_TIMING GetTimer("Ring finding: Store ring").Start(0); #endif // PRINT_TIMING - if (ISUNLIKELY(EmptyFmask(validRing))) continue; + if (ISUNLIKELY(validRing.isEmpty())) continue; /////////// #if 0 // TODO 1 @@ -534,7 +534,7 @@ void CbmL1RichENNRingFinderParallel::ENNRingFinder(const int NHits, nsL1vector<E ringV.localIHits.push_back( iif( validHit, sHit.localIndex, fvec(-1.) ) ); ringV.NHits += mask2int(validHit); validHit = validHit & ( d <= ShadowSize ); // TODO check *4 - if ( Empty (validHit) ) continue; // CHECKME + if ( validHit.isEmpty() ) continue; // CHECKME Shadow.push_back( iif( validHit, sHit.localIndex, fvec(-1.) ) ); } for( int ipu = 0; ipu < MaxPickUpAreaSize; ipu++ ) { @@ -545,12 +545,12 @@ void CbmL1RichENNRingFinderParallel::ENNRingFinder(const int NHits, nsL1vector<E const fvec dy = puHit.y - ringV.y; const fvec d = fabs( sqrt(dx*dx+dy*dy) - ringV.r ); validHit = validHit & ( d <= HitSize ); - if ( Empty (validHit) ) continue; + if ( validHit.isEmpty() ) continue; ringV.chi2 += d*d; ringV.localIHits.push_back( iif( validHit, puHit.localIndex, fvec(-1.) ) ); ringV.NHits += mask2int(validHit); validHit = validHit & ( d <= ShadowSize ); // TODO check *4 - if ( Empty (validHit) ) continue; // CHECKME + if ( validHit.isEmpty() ) continue; // CHECKME Shadow.push_back( iif( validHit, puHit.localIndex, fvec(-1.) ) ); } diff --git a/reco/L1/OffLineInterface/CbmL1RichENNRingFinderParallel.h b/reco/L1/OffLineInterface/CbmL1RichENNRingFinderParallel.h index 9a52d27f560300a13a74faa1946fb78438dae160..f8248257ea8a2b61e1f3c511da180be73263c2f2 100644 --- a/reco/L1/OffLineInterface/CbmL1RichENNRingFinderParallel.h +++ b/reco/L1/OffLineInterface/CbmL1RichENNRingFinderParallel.h @@ -114,7 +114,7 @@ class CbmL1RichENNRingFinderParallel : public CbmRichRingFinder { , Cx(0) , Cy(0) , // coefficients for the parameter space - on_ring(MaskOne()) {}; + on_ring(fmask::One()) {}; // variables for local search: fvec lx, ly, lr2; // local coordinates diff --git a/reco/L1/vectors/L1vecPseudo.h b/reco/L1/vectors/L1vecPseudo.h index 2d30cea3f020a085a421430ebf7cdcf6d59af54e..f107f5b5e41d85f4a543bfc4f6e3b0d290f8179f 100644 --- a/reco/L1/vectors/L1vecPseudo.h +++ b/reco/L1/vectors/L1vecPseudo.h @@ -80,6 +80,18 @@ public: return z; } + bool isEmpty() + { + bool ret = true; + for (int i = 0; i < fvecLen; i++) { + ret = ret && (!v[i]); + } + return ret; + } + + bool isNotEmpty() { return !isEmpty(); } + + friend std::ostream& operator<<(std::ostream& strm, const fmask& a) { strm << '['; @@ -130,6 +142,13 @@ public: fscal operator[](int i) const { return v[i]; } + void setZero(fmask m) + { + for (int i = 0; i < Size; i++) { + if (m[i]) { v[i] = 0.; } + } + } + #define _f1(A, F) \ fvec z; \ for (int i = 0; i < Size; i++) { \ @@ -247,9 +266,6 @@ public: #define _fvecalignment __attribute__((aligned(fvec::Size * sizeof(fscal)))) -inline fmask MaskOne() { return fmask::One(); } -inline fmask MaskZero() { return fmask::One(); } - inline fvec fabs(const fvec& a) { return abs(a); } inline fvec masked(const fvec& a, const fmask& mask) { return iif(mask, a, fvec::Zero()); } @@ -282,16 +298,6 @@ inline bool IsNanAny(const fvec& v) return ret; } -inline bool EmptyFmask(const fmask& a) -{ - bool ret = true; - for (int i = 0; i < fvecLen; i++) { - ret = ret && (!bool(a[i])); - } - return ret; -} - -inline bool NotEmptyFmask(const fmask& a) { return !EmptyFmask(a); } #include "std_alloc.h" diff --git a/reco/L1/vectors/L1vecVc.h b/reco/L1/vectors/L1vecVc.h index 910d0bb7148c641048e9ffcf5bf2d0668ab8c4e7..f20939f5deb03137c17e76df8f04d5b6a09344c0 100644 --- a/reco/L1/vectors/L1vecVc.h +++ b/reco/L1/vectors/L1vecVc.h @@ -26,8 +26,6 @@ inline fvec operator+(const fvec& a, fscal b) { return a + fvec(b); } inline fvec operator-(fscal a, const fvec& b) { return fvec(a) - b; } inline fvec operator-(const fvec& a, fscal b) { return a - fvec(b); } -inline fmask MaskOne() { return fmask::One(); } -inline fmask MaskZero() { return fmask::One(); } inline fvec fabs(const fvec& a) { return abs(a); } @@ -61,16 +59,6 @@ inline bool IsNanAny(const fvec& v) return ret; } -inline bool EmptyFmask(const fmask& a) -{ - bool ret = true; - for (int i = 0; i < fvecLen; i++) { - ret = ret && (!bool(a[i])); - } - return ret; -} - -inline bool NotEmptyFmask(const fmask& a) { return !EmptyFmask(a); } #include "std_alloc.h"