From c2fd68bd7868665a5e047bcef1c36005e67be1a7 Mon Sep 17 00:00:00 2001 From: "se.gorbunov" <se.gorbunov@gsi.de> Date: Tue, 6 Sep 2022 01:36:42 +0000 Subject: [PATCH] L1: SIMD vectors: remove custom operators --- reco/L1/L1Algo/L1CATrackFinder.cxx | 14 +++--- reco/L1/L1Algo/L1CloneMerger.cxx | 8 +-- reco/L1/L1Algo/L1Extrapolation.cxx | 43 +++++++++------- reco/L1/L1Algo/L1Filtration.h | 8 +-- reco/L1/L1Algo/L1FitMaterial.cxx | 40 ++++++++------- reco/L1/L1Algo/L1TrackExtender.cxx | 8 +-- reco/L1/L1Algo/L1TrackFitter.cxx | 14 +++--- reco/L1/L1Algo/L1TrackParFit.cxx | 49 ++++++++++--------- .../CbmL1RichENNRingFinderParallel.cxx | 14 +++--- reco/L1/ParticleFinder/CbmL1PFFitter.cxx | 16 +++--- reco/L1/vectors/L1vec.h | 2 + reco/L1/vectors/L1vecPseudo.h | 17 +------ reco/L1/vectors/L1vecVc.h | 15 ------ 13 files changed, 115 insertions(+), 133 deletions(-) diff --git a/reco/L1/L1Algo/L1CATrackFinder.cxx b/reco/L1/L1Algo/L1CATrackFinder.cxx index 6fa5e9b0cc..54212c1dc7 100644 --- a/reco/L1/L1Algo/L1CATrackFinder.cxx +++ b/reco/L1/L1Algo/L1CATrackFinder.cxx @@ -224,14 +224,14 @@ inline void L1Algo::findSingletsStep1( /// input 1st stage of singlet search T.ty = ty; T.t = time; - T.qp = 0.; - T.C20 = T.C21 = 0; - T.C30 = T.C31 = T.C32 = 0; - T.C40 = T.C41 = T.C42 = T.C43 = 0; - T.C50 = T.C51 = T.C52 = T.C53 = T.C54 = 0; - T.C22 = T.C33 = fMaxSlopePV * fMaxSlopePV / 9.; + T.qp = fvec(0.); + T.C20 = T.C21 = fvec(0.); + T.C30 = T.C31 = T.C32 = fvec(0.); + T.C40 = T.C41 = T.C42 = T.C43 = fvec(0.); + T.C50 = T.C51 = T.C52 = T.C53 = T.C54 = fvec(0.); + T.C22 = T.C33 = fMaxSlopePV * fMaxSlopePV / fvec(9.); if (kGlobal == fTrackingMode || kMcbm == fTrackingMode) T.C22 = T.C33 = 10; - T.C44 = fMaxInvMom / 3. * fMaxInvMom / 3.; + T.C44 = fMaxInvMom / fvec(3.) * fMaxInvMom / fvec(3.); T.C55 = timeEr * timeEr; if (fParameters.DevIsFitSingletsFromTarget()) { // TODO: doesn't work. Why? diff --git a/reco/L1/L1Algo/L1CloneMerger.cxx b/reco/L1/L1Algo/L1CloneMerger.cxx index 3cd1acb2b6..7305303779 100644 --- a/reco/L1/L1Algo/L1CloneMerger.cxx +++ b/reco/L1/L1Algo/L1CloneMerger.cxx @@ -170,17 +170,17 @@ void L1CloneMerger::Exec(L1Vector<L1Track>& extTracks, L1Vector<L1HitIndex_t>& e stam = staf - 1; fvec zm = frAlgo.GetParameters()->GetStation(stam).z; - fvec xm = 0.5 * (Tf.x + Tf.tx * (zm - Tf.z) + Tb.x + Tb.tx * (zm - Tb.z)); - fvec ym = 0.5 * (Tf.y + Tf.ty * (zm - Tf.z) + Tb.y + Tb.ty * (zm - Tb.z)); + fvec xm = fvec(0.5) * (Tf.x + Tf.tx * (zm - Tf.z) + Tb.x + Tb.tx * (zm - Tb.z)); + fvec ym = fvec(0.5) * (Tf.y + Tf.ty * (zm - Tf.z) + Tb.y + Tb.ty * (zm - Tb.z)); frAlgo.GetParameters()->GetStation(stam).fieldSlice.GetFieldValue(xm, ym, fBm); fld.Set(fBb, Tb.z, fBm, zm, fBf, Tf.z); - fvec zMiddle = 0.5 * (Tb.z + Tf.z); + fvec zMiddle = fvec(0.5) * (Tb.z + Tf.z); L1Extrapolate(Tf, zMiddle, Tf.qp, fld); L1Extrapolate(Tb, zMiddle, Tb.qp, fld); - fvec Chi2Tracks = 0.f; + fvec Chi2Tracks(0.); FilterTracks(&(Tf.x), &(Tf.C00), &(Tb.x), &(Tb.C00), 0, 0, &Chi2Tracks); if (Chi2Tracks[0] > 50) continue; diff --git a/reco/L1/L1Algo/L1Extrapolation.cxx b/reco/L1/L1Algo/L1Extrapolation.cxx index cb2bb78fdf..735528a41b 100644 --- a/reco/L1/L1Algo/L1Extrapolation.cxx +++ b/reco/L1/L1Algo/L1Extrapolation.cxx @@ -110,16 +110,18 @@ void L1ExtrapolateAnalytic(L1TrackPar& T, // input track parameters (x,y,tx,ty, fvec syz; { - cnst d = 1. / 360., c00 = 30. * 6. * d, c01 = 30. * 2. * d, c02 = 30. * d, c10 = 3. * 40. * d, c11 = 3. * 15. * d, - c12 = 3. * 8. * d, c20 = 2. * 45. * d, c21 = 2. * 2. * 9. * d, c22 = 2. * 2. * 5. * d; + constexpr double d = 1. / 360.; + cnst c00(30. * 6. * d), c01(30. * 2. * d), c02(30. * d), c10(3. * 40. * d), c11(3. * 15. * d), c12(3. * 8. * d), + c20(2. * 45. * d), c21(2. * 2. * 9. * d), c22(2. * 2. * 5. * d); syz = Fy0 * (c00 * Fz0 + c01 * Fz1 + c02 * Fz2) + Fy1 * (c10 * Fz0 + c11 * Fz1 + c12 * Fz2) + Fy2 * (c20 * Fz0 + c21 * Fz1 + c22 * Fz2); } fvec Syz; { - cnst d = 1. / 2520., c00 = 21. * 20. * d, c01 = 21. * 5. * d, c02 = 21. * 2. * d, c10 = 7. * 30. * d, - c11 = 7. * 9. * d, c12 = 7. * 4. * d, c20 = 2. * 63. * d, c21 = 2. * 21. * d, c22 = 2. * 10. * d; + constexpr double d = 1. / 2520.; + cnst c00(21. * 20. * d), c01(21. * 5. * d), c02(21. * 2. * d), c10(7. * 30. * d), c11(7. * 9. * d), + c12(7. * 4. * d), c20(2. * 63. * d), c21(2. * 21. * d), c22(2. * 10. * d); Syz = Fy0 * (c00 * Fz0 + c01 * Fz1 + c02 * Fz2) + Fy1 * (c10 * Fz0 + c11 * Fz1 + c12 * Fz2) + Fy2 * (c20 * Fz0 + c21 * Fz1 + c22 * Fz2); } @@ -129,15 +131,16 @@ void L1ExtrapolateAnalytic(L1TrackPar& T, // input track parameters (x,y,tx,ty, fvec Syy; { - cnst d = 1. / 2520., c00 = 420. * d, c01 = 21. * 15. * d, c02 = 21. * 8. * d, c03 = 63. * d, c04 = 70. * d, - c05 = 20. * d; - Syy = Fy0 * (c00 * Fy0 + c01 * Fy1 + c02 * Fy2) + Fy1 * (c03 * Fy1 + c04 * Fy2) + c05 * Fy2 * Fy2; + constexpr double d = 1. / 2520.; + cnst c00(420. * d), c01(21. * 15. * d), c02(21. * 8. * d), c03(63. * d), c04(70. * d), c05(20. * d); + Syy = Fy0 * (c00 * Fy0 + c01 * Fy1 + c02 * Fy2) + Fy1 * (c03 * Fy1 + c04 * Fy2) + c05 * Fy2 * Fy2; } fvec Syyy; { - cnst d = 1. / 181440., c000 = 7560 * d, c001 = 9 * 1008 * d, c002 = 5 * 1008 * d, c011 = 21 * 180 * d, - c012 = 24 * 180 * d, c022 = 7 * 180 * d, c111 = 540 * d, c112 = 945 * d, c122 = 560 * d, c222 = 112 * d; + constexpr double d = 1. / 181440.; + cnst c000(7560 * d), c001(9 * 1008 * d), c002(5 * 1008 * d), c011(21 * 180 * d), c012(24 * 180 * d), + c022(7 * 180 * d), c111(540 * d), c112(945 * d), c122(560 * d), c222(112 * d); const fvec Fy22 = Fy2 * Fy2; Syyy = Fy0 * (Fy0 * (c000 * Fy0 + c001 * Fy1 + c002 * Fy2) + Fy1 * (c011 * Fy1 + c012 * Fy2) + c022 * Fy22) + Fy1 * (Fy1 * (c111 * Fy1 + c112 * Fy2) + c122 * Fy22) + c222 * Fy22 * Fy2; @@ -686,13 +689,13 @@ void L1ExtrapolateTime(L1TrackPar& T, // input track parameters (x,y,tx,ty,Q/p) fvec dz, // extrapolate to this z position fvec timeInfo) { - cnst c_light = 29.9792458; + cnst c_light(29.9792458); dz.setZero(timeInfo <= fvec::Zero()); T.t += dz * sqrt((T.tx * T.tx) + (T.ty * T.ty) + 1) / c_light; - const fvec k1 = dz * T.tx / (c_light * sqrt((T.tx * T.tx) + (T.ty * T.ty) + 1.)); - const fvec k2 = dz * T.ty / (c_light * sqrt((T.tx * T.tx) + (T.ty * T.ty) + 1.)); + const fvec k1 = dz * T.tx / (c_light * sqrt((T.tx * T.tx) + (T.ty * T.ty) + fvec(1.))); + const fvec k2 = dz * T.ty / (c_light * sqrt((T.tx * T.tx) + (T.ty * T.ty) + fvec(1.))); fvec c52 = T.C52; fvec c53 = T.C53; @@ -809,23 +812,25 @@ void L1ExtrapolateJXY // is not used currently fvec Syz; { - cnst d = 1. / 2520., c00 = 21. * 20. * d, c01 = 21. * 5. * d, c02 = 21. * 2. * d, c10 = 7. * 30. * d, - c11 = 7. * 9. * d, c12 = 7. * 4. * d, c20 = 2. * 63. * d, c21 = 2. * 21. * d, c22 = 2. * 10. * d; + constexpr double d = 1. / 2520.; + cnst c00(21. * 20. * d), c01(21. * 5. * d), c02(21. * 2. * d), c10(7. * 30. * d), c11(7. * 9. * d), + c12(7. * 4. * d), c20(2. * 63. * d), c21(2. * 21. * d), c22(2. * 10. * d); Syz = Fy0 * (c00 * Fz0 + c01 * Fz1 + c02 * Fz2) + Fy1 * (c10 * Fz0 + c11 * Fz1 + c12 * Fz2) + Fy2 * (c20 * Fz0 + c21 * Fz1 + c22 * Fz2); } fvec Syy; { - cnst d = 1. / 2520., c00 = 420. * d, c01 = 21. * 15. * d, c02 = 21. * 8. * d, c03 = 63. * d, c04 = 70. * d, - c05 = 20. * d; - Syy = Fy0 * (c00 * Fy0 + c01 * Fy1 + c02 * Fy2) + Fy1 * (c03 * Fy1 + c04 * Fy2) + c05 * Fy2 * Fy2; + constexpr double d = 1. / 2520.; + cnst c00(420. * d), c01(21. * 15. * d), c02(21. * 8. * d), c03(63. * d), c04(70. * d), c05(20. * d); + Syy = Fy0 * (c00 * Fy0 + c01 * Fy1 + c02 * Fy2) + Fy1 * (c03 * Fy1 + c04 * Fy2) + c05 * Fy2 * Fy2; } fvec Syyy; { - cnst d = 1. / 181440., c000 = 7560 * d, c001 = 9 * 1008 * d, c002 = 5 * 1008 * d, c011 = 21 * 180 * d, - c012 = 24 * 180 * d, c022 = 7 * 180 * d, c111 = 540 * d, c112 = 945 * d, c122 = 560 * d, c222 = 112 * d; + constexpr double d = 1. / 181440.; + cnst c000(7560 * d), c001(9 * 1008 * d), c002(5 * 1008 * d), c011(21 * 180 * d), c012(24 * 180 * d), + c022(7 * 180 * d), c111(540 * d), c112(945 * d), c122(560 * d), c222(112 * d); fvec Fy22 = Fy2 * Fy2; Syyy = Fy0 * (Fy0 * (c000 * Fy0 + c001 * Fy1 + c002 * Fy2) + Fy1 * (c011 * Fy1 + c012 * Fy2) + c022 * Fy22) + Fy1 * (Fy1 * (c111 * Fy1 + c112 * Fy2) + c122 * Fy22) + c222 * Fy22 * Fy2; diff --git a/reco/L1/L1Algo/L1Filtration.h b/reco/L1/L1Algo/L1Filtration.h index 1e28b13418..f9975ef476 100644 --- a/reco/L1/L1Algo/L1Filtration.h +++ b/reco/L1/L1Algo/L1Filtration.h @@ -256,7 +256,7 @@ inline void L1FilterChi2XYC00C10C11(const L1UMeasurementInfo& info, fvec& x, fve HCH = (F0 * info.cos_phi + F1 * info.sin_phi); - wi = 1. / (info.sigma2 + HCH); + wi = fvec(1.) / (info.sigma2 + HCH); zetawi = zeta * wi; chi2 += zeta * zetawi; @@ -273,7 +273,7 @@ inline void L1FilterChi2XYC00C10C11(const L1UMeasurementInfo& info, fvec& x, fve inline void L1FilterVtx(L1TrackPar& T, fvec x, fvec y, const L1XYMeasurementInfo& info, fvec extrDx, fvec extrDy, fvec J[]) { - cnst TWO = 2.; + cnst TWO(2.); fvec zeta0, zeta1, S00, S10, S11, si; fvec F00, F10, F20, F30, F40, F01, F11, F21, F31, F41; @@ -304,14 +304,14 @@ inline void L1FilterVtx(L1TrackPar& T, fvec x, fvec y, const L1XYMeasurementInfo S10 = info.C10 + F10 + J[3] * F20 + J[4] * F30 + J[5] * F40; S11 = info.C11 + F11 + J[3] * F21 + J[4] * F31 + J[5] * F41; - si = 1. / (S00 * S11 - S10 * S10); + si = fvec(1.) / (S00 * S11 - S10 * S10); //si = fvec(rcp(fvec((S00*S11 - S10*S10)[0]))); fvec S00tmp = S00; S00 = si * S11; S10 = -si * S10; S11 = si * S00tmp; - T.chi2 += zeta0 * zeta0 * S00 + 2. * zeta0 * zeta1 * S10 + zeta1 * zeta1 * S11; + T.chi2 += zeta0 * zeta0 * S00 + fvec(2.) * zeta0 * zeta1 * S10 + zeta1 * zeta1 * S11; T.NDF += TWO; K00 = F00 * S00 + F01 * S10; diff --git a/reco/L1/L1Algo/L1FitMaterial.cxx b/reco/L1/L1Algo/L1FitMaterial.cxx index a5b4586b3e..2804436807 100644 --- a/reco/L1/L1Algo/L1FitMaterial.cxx +++ b/reco/L1/L1Algo/L1FitMaterial.cxx @@ -279,32 +279,32 @@ void L1Fit::EnergyLossCorrection(float atomicA, float rho, float radLen, L1Track // T.qp = dqp; T.qp *= corr; - float P = fabs(1. / qp[0]); // GeV + fvec P = fvec(fabs(1. / qp[0])); // GeV - float Z = atomicZ; - float A = atomicA; - float RHO = rho; + fvec Z(atomicZ); + fvec A(atomicA); + fvec RHO(rho); - fvec STEP = radThick * tr * radLen; - fvec EMASS = 0.511 * 1e-3; // GeV + fvec STEP = radThick * tr * radLen; + fvec EMASS(0.511 * 1e-3); // GeV fvec BETA = P / sqrt(E2); fvec GAMMA = sqrt(E2) / fMass; // Calculate xi factor (KeV). - fvec XI = (153.5 * Z * STEP * RHO) / (A * BETA * BETA); + fvec XI = (fvec(153.5) * Z * STEP * RHO) / (A * BETA * BETA); // Maximum energy transfer to atomic electron (KeV). fvec ETA = BETA * GAMMA; fvec ETASQ = ETA * ETA; fvec RATIO = EMASS / fMass; - fvec F1 = 2. * EMASS * ETASQ; - fvec F2 = 1. + 2. * RATIO * GAMMA + RATIO * RATIO; - fvec EMAX = 1e6 * F1 / F2; + fvec F1 = fvec(2.) * EMASS * ETASQ; + fvec F2 = fvec(1.) + fvec(2.) * RATIO * GAMMA + RATIO * RATIO; + fvec EMAX = fvec(1e6) * F1 / F2; - fvec DEDX2 = XI * EMAX * (1. - (BETA * BETA / 2.)) * 1e-12; + fvec DEDX2 = XI * EMAX * (fvec(1.) - (BETA * BETA / fvec(2.))) * fvec(1e-12); - float P2 = P * P; + fvec P2 = P * P; fvec SDEDX = ((E2) *DEDX2) / (P2 * P2 * P2); @@ -456,15 +456,16 @@ void L1Fit::L1AddThickMaterial(L1TrackPar& T, fvec radThick, fvec qp0, fvec w, f fvec h2 = h * h; fvec qp0t = qp0 * t; - cnst c1 = 0.0136f, c2 = c1 * 0.038f, c3 = c2 * 0.5f, c4 = -c3 / 2.0f, c5 = c3 / 3.0f, c6 = -c3 / 4.0f; + cnst c1(0.0136), c2 = c1 * fvec(0.038), c3 = c2 * fvec(0.5), c4 = -c3 / fvec(2.0), c5 = c3 / fvec(3.0), + c6 = -c3 / fvec(4.0); fvec s0 = (c1 + c2 * log(radThick) + c3 * h + h2 * (c4 + c5 * h + c6 * h2)) * qp0t; //fvec a = ( (ONE+fMass2*qp0*qp0t)*radThick*s0*s0 ); fvec a = ((t + fMass2 * qp0 * qp0t) * radThick * s0 * s0); - fvec D = (fDownstream) ? 1. : -1.; - fvec T23 = (thickness * thickness) / 3.0; - fvec T2 = thickness / 2.0; + fvec D = (fDownstream) ? fvec(1.) : fvec(-1.); + fvec T23 = (thickness * thickness) / fvec(3.0); + fvec T2 = thickness / fvec(2.0); T.C00 += w * txtx1 * a * T23; @@ -495,11 +496,12 @@ void L1Fit::L1AddHalfMaterial(L1TrackPar& T, const L1MaterialInfo& info, fvec qp fvec h2 = h * h; fvec qp0t = qp0 * t; - cnst c1 = 0.0136f, c2 = c1 * 0.038f, c3 = c2 * 0.5f, c4 = -c3 / 2.0f, c5 = c3 / 3.0f, c6 = -c3 / 4.0f; + cnst c1(0.0136), c2 = c1 * fvec(0.038), c3 = c2 * fvec(0.5), c4 = -c3 / fvec(2.0), c5 = c3 / fvec(3.0), + c6 = -c3 / fvec(4.0); - fvec s0 = (c1 + c2 * (info.logRadThick + log(0.5)) + c3 * h + h2 * (c4 + c5 * h + c6 * h2)) * qp0t; + fvec s0 = (c1 + c2 * (info.logRadThick + fvec(log(0.5))) + c3 * h + h2 * (c4 + c5 * h + c6 * h2)) * qp0t; //fvec a = ( (ONE+fMass2*qp0*qp0t)*info.RadThick*0.5*s0*s0 ); - fvec a = ((t + fMass2 * qp0 * qp0t) * info.RadThick * 0.5 * s0 * s0); + fvec a = ((t + fMass2 * qp0 * qp0t) * info.RadThick * fvec(0.5) * s0 * s0); T.C22 += txtx1 * a; T.C32 += tx * ty * a; diff --git a/reco/L1/L1Algo/L1TrackExtender.cxx b/reco/L1/L1Algo/L1TrackExtender.cxx index ae8298e166..bfd01b3a60 100644 --- a/reco/L1/L1Algo/L1TrackExtender.cxx +++ b/reco/L1/L1Algo/L1TrackExtender.cxx @@ -67,9 +67,9 @@ void L1Algo::BranchFitterFast(const L1Branch& t, L1TrackPar& T, const bool dir, auto [x2, y2] = sta2.ConvUVtoXY<fvec>(u2, v2); // fvec z2 = hit2.z; - fvec dzi = 1. / (z1 - z0); + fvec dzi = fvec(1.) / (z1 - z0); - const fvec vINF = .1; + const fvec vINF = fvec(.1); T.x = x0; T.y = y0; if (initParams) { @@ -82,8 +82,8 @@ void L1Algo::BranchFitterFast(const L1Branch& t, L1TrackPar& T, const bool dir, T.t = hit0.t; // T.t[0]=(hit0.t+hit1.t+hit2.t)/3; - T.chi2 = 0.; - T.NDF = 2.; + T.chi2 = fvec(0.); + T.NDF = fvec(2.); T.C00 = sta0.XYInfo.C00; T.C10 = sta0.XYInfo.C10; T.C11 = sta0.XYInfo.C11; diff --git a/reco/L1/L1Algo/L1TrackFitter.cxx b/reco/L1/L1Algo/L1TrackFitter.cxx index 6aeb45a1f2..0d63bb0736 100644 --- a/reco/L1/L1Algo/L1TrackFitter.cxx +++ b/reco/L1/L1Algo/L1TrackFitter.cxx @@ -19,10 +19,10 @@ using std::vector; namespace NS_L1TrackFitter { - const fvec c_light = 0.000299792458, c_light_i = 1. / c_light; - const fvec ZERO = 0.; - const fvec ONE = 1.; - const fvec vINF = 0.1; + const fvec c_light(0.000299792458), c_light_i(fvec(1.) / c_light); + const fvec ZERO(0.); + const fvec ONE(1.); + const fvec vINF(0.1); } // namespace NS_L1TrackFitter using namespace NS_L1TrackFitter; @@ -81,7 +81,7 @@ void L1Algo::KFTrackFitter_simple() // TODO: Add pipe. auto [x2, y2] = sta1.ConvUVtoXY<fvec>(u2, v2); // fvec z2 = hit2.z; - fvec dzi = 1. / (z1 - z0); + fvec dzi = fvec(1.) / (z1 - z0); // const fvec vINF = .1; T.x = x0; @@ -1470,7 +1470,7 @@ void L1Algo::GuessVec(L1TrackPar& t, fvec* xV, fvec* yV, fvec* zV, fvec* Sy, fve fvec L, L1; t.x = (Ai0 * a0 + Ai1 * a1 + Ai3 * a2) * det; t.tx = (Ai1 * a0 + Ai2 * a1 + Ai4 * a2) * det; - fvec txtx1 = 1. + t.tx * t.tx; + fvec txtx1 = fvec(1.) + t.tx * t.tx; L = (Ai3 * a0 + Ai4 * a1 + Ai5 * a2) * det / txtx1; L1 = L * t.tx; A1 = A1 + A3 * L1; @@ -1545,7 +1545,7 @@ void L1Algo::GuessVec(L1TrackParFit& t, fvec* xV, fvec* yV, fvec* zV, fvec* Sy, fvec L, L1; t.fx = (Ai0 * a0 + Ai1 * a1 + Ai3 * a2) * det; t.ftx = (Ai1 * a0 + Ai2 * a1 + Ai4 * a2) * det; - fvec txtx1 = 1. + t.ftx * t.ftx; + fvec txtx1 = fvec(1.) + t.ftx * t.ftx; L = (Ai3 * a0 + Ai4 * a1 + Ai5 * a2) * det / txtx1; L1 = L * t.ftx; A1 = A1 + A3 * L1; diff --git a/reco/L1/L1Algo/L1TrackParFit.cxx b/reco/L1/L1Algo/L1TrackParFit.cxx index 9890852328..7cd752c3a2 100644 --- a/reco/L1/L1Algo/L1TrackParFit.cxx +++ b/reco/L1/L1Algo/L1TrackParFit.cxx @@ -225,10 +225,10 @@ void L1TrackParFit::ExtrapolateLine(fvec z_out, fvec* w) fx += dz * ftx; fy += dz * fty; fz += dz; - ft += dz * sqrt(1. + ftx * ftx + fty * fty) / c_light; + ft += dz * sqrt(fvec(1.) + ftx * ftx + fty * fty) / c_light; - const fvec k1 = dz * ftx / (c_light * sqrt(ftx * ftx + fty * fty + 1.)); - const fvec k2 = dz * fty / (c_light * sqrt(ftx * ftx + fty * fty + 1.)); + const fvec k1 = dz * ftx / (c_light * sqrt(ftx * ftx + fty * fty + fvec(1.))); + const fvec k2 = dz * fty / (c_light * sqrt(ftx * ftx + fty * fty + fvec(1.))); const fvec dzC32_in = dz * C32; @@ -263,7 +263,7 @@ void L1TrackParFit::ExtrapolateLine(fvec z_out, fvec* w) void L1TrackParFit::ExtrapolateLine1(fvec z_out, fvec* w, fvec v) { - cnst c_light = 29.9792458; + cnst c_light(29.9792458); fvec dz = (z_out - fz); if (w) { dz.setZero(*w <= fvec::Zero()); } @@ -272,10 +272,10 @@ void L1TrackParFit::ExtrapolateLine1(fvec z_out, fvec* w, fvec v) fy += dz * fty; fz += dz; - ft += dz * sqrt(1. + ftx * ftx + fty * fty) / (v * c_light); + ft += dz * sqrt(fvec(1.) + ftx * ftx + fty * fty) / (v * c_light); - const fvec k1 = dz * ftx / ((v * c_light) * sqrt(ftx * ftx + fty * fty + 1.)); - const fvec k2 = dz * fty / ((v * c_light) * sqrt(ftx * ftx + fty * fty + 1.)); + const fvec k1 = dz * ftx / ((v * c_light) * sqrt(ftx * ftx + fty * fty + fvec(1.))); + const fvec k2 = dz * fty / ((v * c_light) * sqrt(ftx * ftx + fty * fty + fvec(1.))); const fvec dzC32_in = dz * C32; @@ -741,15 +741,16 @@ void L1TrackParFit::L1AddThickMaterial(fvec radThick, fvec qp0, fvec w, fvec thi fvec h2 = h * h; fvec qp0t = qp0 * t; - cnst c1 = 0.0136f, c2 = c1 * 0.038f, c3 = c2 * 0.5f, c4 = -c3 / 2.0f, c5 = c3 / 3.0f, c6 = -c3 / 4.0f; + cnst c1(0.0136), c2 = c1 * fvec(0.038), c3 = c2 * fvec(0.5), c4 = -c3 / fvec(2.0), c5 = c3 / fvec(3.0), + c6 = -c3 / fvec(4.0); fvec s0 = (c1 + c2 * log(radThick) + c3 * h + h2 * (c4 + c5 * h + c6 * h2)) * qp0t; //fvec a = ( (ONE+mass2*qp0*qp0t)*radThick*s0*s0 ); fvec a = ((t + fMass2 * qp0 * qp0t) * radThick * s0 * s0); - fvec D = (fDownstream) ? 1. : -1.; - fvec T23 = (thickness * thickness) / 3.0; - fvec T2 = thickness / 2.0; + fvec D = (fDownstream) ? fvec(1.) : fvec(-1.); + fvec T23 = (thickness * thickness) / fvec(3.0); + fvec T2 = thickness / fvec(2.0); C00 += w * txtx1 * a * T23; C10 += w * tx * ty * a * T23; @@ -845,33 +846,33 @@ void L1TrackParFit::EnergyLossCorrection(float atomicA, float rho, float radLen, qp0 *= corr; fqp *= corr; - float P = fabs(1. / qp0[0]); // GeV + fvec P(fabs(1. / qp0[0])); // GeV - float Z = atomicZ; - float A = atomicA; - float RHO = rho; + fvec Z(atomicZ); + fvec A(atomicA); + fvec RHO(rho); - fvec STEP = radThick * tr * radLen; - fvec EMASS = 0.511 * 1e-3; // GeV + fvec STEP = radThick * tr * radLen; + fvec EMASS(0.511 * 1e-3); // GeV fvec BETA = P / sqrt(E2Corrected); fvec GAMMA = sqrt(E2Corrected) / fMass; // Calculate xi factor (KeV). - fvec XI = (153.5 * Z * STEP * RHO) / (A * BETA * BETA); + fvec XI = (fvec(153.5) * Z * STEP * RHO) / (A * BETA * BETA); // Maximum energy transfer to atomic electron (KeV). fvec ETA = BETA * GAMMA; fvec ETASQ = ETA * ETA; fvec RATIO = EMASS / fMass; - fvec F1 = 2. * EMASS * ETASQ; - fvec F2 = 1. + 2. * RATIO * GAMMA + RATIO * RATIO; - fvec EMAX = 1e6 * F1 / F2; + fvec F1 = fvec(2.) * EMASS * ETASQ; + fvec F2 = fvec(1.) + fvec(2.) * RATIO * GAMMA + RATIO * RATIO; + fvec EMAX = fvec(1e6) * F1 / F2; - fvec DEDX2 = XI * EMAX * (1. - (BETA * BETA / 2.)) * 1e-12; + fvec DEDX2 = XI * EMAX * (fvec(1.) - (BETA * BETA / fvec(2.))) * fvec(1e-12); - float P2 = P * P; - fvec SDEDX = ((E2) *DEDX2) / (P2 * P2 * P2); + fvec P2 = P * P; + fvec SDEDX = (E2 * DEDX2) / (P2 * P2 * P2); // T.C40 *= corr; // T.C41 *= corr; diff --git a/reco/L1/OffLineInterface/CbmL1RichENNRingFinderParallel.cxx b/reco/L1/OffLineInterface/CbmL1RichENNRingFinderParallel.cxx index cfa04e1d88..26db240835 100644 --- a/reco/L1/OffLineInterface/CbmL1RichENNRingFinderParallel.cxx +++ b/reco/L1/OffLineInterface/CbmL1RichENNRingFinderParallel.cxx @@ -395,9 +395,9 @@ void CbmL1RichENNRingFinderParallel::ENNRingFinder(const int NHits, nsL1vector<E sHit.S2 = sHit.lx * sHit.ly; sHit.S3 = sHit.lx * lr2; sHit.S4 = sHit.ly * lr2; - sHit.C = -lr * .5; + sHit.C = -lr * fvec(.5); - const fvec w = iif(validHit, iif(lr > fvec(1.E-4), 1. / lr, fvec::One()), fvec::Zero()); + const fvec w = iif(validHit, iif(lr > fvec(1.E-4), fvec(1.) / lr, fvec::One()), fvec::Zero()); const fvec w2 = w * w; sHit.Cx = w * sHit.lx; sHit.Cy = w * sHit.ly; @@ -423,7 +423,7 @@ void CbmL1RichENNRingFinderParallel::ENNRingFinder(const int NHits, nsL1vector<E fvec tmp = S0 * S1 - S2 * S2; // if( fabs(tmp) < 1.E-10 ) break; // CHECKME - tmp = 0.5 / tmp; + tmp = fvec(0.5) / tmp; X = (S3 * S1 - S4 * S2) * tmp; Y = (S4 * S0 - S3 * S2) * tmp; R2 = X * X + Y * Y; @@ -431,7 +431,7 @@ void CbmL1RichENNRingFinderParallel::ENNRingFinder(const int NHits, nsL1vector<E const fvec Dcut = Dmax * Rejection; // cut for noise hits // float RingCut = HitSize4 * R ; // closeness - S0 = S1 = S2 = S3 = S4 = 0.0; + S0 = S1 = S2 = S3 = S4 = fvec::Zero(); Dmax = -1.; for (THitIndex ih = 0; ih < MaxSearchAreaSize; ih++) { @@ -446,7 +446,7 @@ void CbmL1RichENNRingFinderParallel::ENNRingFinder(const int NHits, nsL1vector<E const fvec dp = iif(sHit.on_ring, fvec(-1.), abs(sHit.C + sHit.Cx * X + sHit.Cy * Y)); Dmax = iif(((dp <= Dcut) & (dp > Dmax)), dp, Dmax); - fvec w = iif((sHit.on_ring), 1. / (HitSizeSq_v + abs(dSq)), 1. / (1.e-5 + abs(dSq))); + fvec w = iif((sHit.on_ring), fvec(1.) / (HitSizeSq_v + abs(dSq)), fvec(1.) / (fvec(1.e-5) + abs(dSq))); w = iif((dp <= Dcut) & validHit, w, fvec::Zero()); S0 += w * sHit.S0; S1 += w * sHit.S1; @@ -487,8 +487,8 @@ void CbmL1RichENNRingFinderParallel::ENNRingFinder(const int NHits, nsL1vector<E // if( fabs(s0) < 1.E-6 || fabs(s1) < 1.E-6 ) continue; // CHECKME const fvec tmp = s1 * (S5 * S5 - NRingHits * S0) + s0 * s0; const fvec A = ((S0 * S7 - S3 * S5) * s1 - s2 * s0) / tmp; - Y = (s2 + s0 * A) / s1 * 0.5; - X = (S3 + S5 * A - S2 * Y * 2) / S0 * 0.5; + Y = (s2 + s0 * A) / s1 * fvec(0.5); + X = (S3 + S5 * A - S2 * Y * 2) / S0 * fvec(0.5); R2 = X * X + Y * Y - A; // if( R2 < 0 ) continue; // will be rejected letter by R2 > R2Min R = sqrt(R2); diff --git a/reco/L1/ParticleFinder/CbmL1PFFitter.cxx b/reco/L1/ParticleFinder/CbmL1PFFitter.cxx index 3d3c88e799..8ec8617c0a 100644 --- a/reco/L1/ParticleFinder/CbmL1PFFitter.cxx +++ b/reco/L1/ParticleFinder/CbmL1PFFitter.cxx @@ -48,10 +48,10 @@ using std::vector; namespace NS_L1TrackFitter { - const fvec c_light = 0.000299792458, c_light_i = 1. / c_light; - const fvec ZERO = 0.; - const fvec ONE = 1.; - const fvec vINF = 0.1; + const fvec c_light(0.000299792458), c_light_i = fvec(1.) / c_light; + const fvec ZERO = fvec(0.); + const fvec ONE = fvec(1.); + const fvec vINF = fvec(0.1); } // namespace NS_L1TrackFitter using namespace NS_L1TrackFitter; @@ -498,7 +498,7 @@ void CbmL1PFFitter::GetChiToVertex(vector<CbmStsTrack>& Tracks, vector<L1FieldRe for (int iSt = nStations - 4; iSt >= 0; iSt--) { - fvec w = iif(T.z > (zSta[iSt] + 2.5), fvec::One(), fvec::Zero()); + fvec w = iif(T.z > (zSta[iSt] + fvec(2.5)), fvec::One(), fvec::Zero()); L1Extrapolate(T, zSta[iSt], T.qp, fld, &w); if (iSt == NMvdStations - 1) { @@ -518,14 +518,14 @@ void CbmL1PFFitter::GetChiToVertex(vector<CbmStsTrack>& Tracks, vector<L1FieldRe Double_t Cv[3] = {primVtx.GetCovMatrix()[0], primVtx.GetCovMatrix()[1], primVtx.GetCovMatrix()[2]}; - fvec dx = T.x - primVtx.GetRefX(); - fvec dy = T.y - primVtx.GetRefY(); + fvec dx = T.x - fvec(primVtx.GetRefX()); + fvec dy = T.y - fvec(primVtx.GetRefY()); fvec c[3] = {T.C00, T.C10, T.C11}; c[0] += fvec(Cv[0]); c[1] += fvec(Cv[1]); c[2] += fvec(Cv[2]); fvec d = c[0] * c[2] - c[1] * c[1]; - fvec chi = sqrt(abs(0.5 * (dx * dx * c[0] - 2 * dx * dy * c[1] + dy * dy * c[2]) / d)); + fvec chi = sqrt(abs(fvec(0.5) * (dx * dx * c[0] - fvec(2.) * dx * dy * c[1] + dy * dy * c[2]) / d)); chi.setZero(abs(d) < fvec(1.e-20)); for (int iVec = 0; iVec < nTracks_SIMD; iVec++) { diff --git a/reco/L1/vectors/L1vec.h b/reco/L1/vectors/L1vec.h index 901ab2f7fa..d706949356 100644 --- a/reco/L1/vectors/L1vec.h +++ b/reco/L1/vectors/L1vec.h @@ -8,4 +8,6 @@ #include "vectors/L1vecVc.h" //#include "vectors/L1vecPseudo.h" +#include "std_alloc.h" + #endif diff --git a/reco/L1/vectors/L1vecPseudo.h b/reco/L1/vectors/L1vecPseudo.h index 9ea93f1604..ad0af0e0dc 100644 --- a/reco/L1/vectors/L1vecPseudo.h +++ b/reco/L1/vectors/L1vecPseudo.h @@ -119,7 +119,7 @@ public: fscal v[fmask::Size]; - fvec() : fvec(0.f) {} + fvec() : fvec(0.) {} fvec(const fvec& a) { @@ -235,22 +235,11 @@ public: friend fvec operator-(const fvec& a) { return fvec(0) - a; } friend fvec operator+(const fvec& a) { return a; } - friend fvec operator+(const fvec& a, const fscal& b) { return a + fvec(b); } - friend fvec operator-(const fvec& a, const fscal& b) { return a - fvec(b); } - friend fvec operator*(const fvec& a, const fscal& b) { return a * fvec(b); } - friend fvec operator/(const fvec& a, const fscal& b) { return a / fvec(b); } - friend fvec operator+(const fscal& a, const fvec& b) { return fvec(a) + b; } - friend fvec operator-(const fscal& a, const fvec& b) { return fvec(a) - b; } - friend fvec operator*(const fscal& a, const fvec& b) { return fvec(a) * b; } - friend fvec operator/(const fscal& a, const fvec& b) { return fvec(a) / b; } + friend void operator+=(fvec& a, const fvec& b) { a = a + b; } friend void operator-=(fvec& a, const fvec& b) { a = a - b; } friend void operator*=(fvec& a, const fvec& b) { a = a * b; } friend void operator/=(fvec& a, const fvec& b) { a = a / b; } - friend void operator+=(fvec& a, const fscal& b) { a = a + b; } - friend void operator-=(fvec& a, const fscal& b) { a = a - b; } - friend void operator*=(fvec& a, const fscal& b) { a = a * b; } - friend void operator/=(fvec& a, const fscal& b) { a = a / b; } friend std::ostream& operator<<(std::ostream& strm, const fvec& a) { @@ -272,9 +261,7 @@ public: } __attribute__((aligned(16))); - #define _fvecalignment __attribute__((aligned(fvec::size() * sizeof(fscal)))) -#include "std_alloc.h" #endif diff --git a/reco/L1/vectors/L1vecVc.h b/reco/L1/vectors/L1vecVc.h index b38e36bc45..639a221624 100644 --- a/reco/L1/vectors/L1vecVc.h +++ b/reco/L1/vectors/L1vecVc.h @@ -13,19 +13,4 @@ typedef Vc::float_m fmask; #define _fvecalignment __attribute__((aligned(Vc::VectorAlignment))) -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 fvec operator/(fscal a, const fvec& b) { return fvec(a) / b; } -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 fvec operator-(fscal a, const fvec& b) { return fvec(a) - b; } -inline fvec operator-(const fvec& a, fscal b) { return a - fvec(b); } - -#include "std_alloc.h" - - #endif -- GitLab