From 61302cc217e2ea5feeb0e21f688a5558cbc6a77a Mon Sep 17 00:00:00 2001
From: Valentina <v.akishina@gsi.de>
Date: Tue, 7 Sep 2021 05:15:30 +0200
Subject: [PATCH] L1: do not use MVD time measurement

---
 reco/L1/L1Algo/L1Algo.cxx          |  6 +++--
 reco/L1/L1Algo/L1Algo.h            |  4 +--
 reco/L1/L1Algo/L1CATrackFinder.cxx | 39 +++++++++++++++---------------
 reco/L1/L1Algo/L1Extrapolation.h   | 21 ++++++----------
 reco/L1/L1Algo/L1Filtration.h      | 12 ++++-----
 reco/L1/L1Algo/L1Station.h         |  2 ++
 6 files changed, 41 insertions(+), 43 deletions(-)

diff --git a/reco/L1/L1Algo/L1Algo.cxx b/reco/L1/L1Algo/L1Algo.cxx
index 2aacf0a3cb..6595844999 100644
--- a/reco/L1/L1Algo/L1Algo.cxx
+++ b/reco/L1/L1Algo/L1Algo.cxx
@@ -115,8 +115,10 @@ void L1Algo::Init(const L1Vector<fscal>& geo, const bool UseHitErrors, const boo
   std::cout << "L1Algo Input " << NStations << " Stations:" << std::endl;
 #endif  // TBB2
   for (int i = 0; i < NStations; i++) {
-    L1Station& st               = vStations[i];
-    st.type                     = geo[ind++];
+    L1Station& st = vStations[i];
+    st.type       = geo[ind++];
+    st.timeInfo   = 1;
+    if (st.type == 0) st.timeInfo = 0;
     st.z                        = geo[ind++];
     st.materialInfo.thick       = geo[ind++];
     st.Rmin                     = geo[ind++];
diff --git a/reco/L1/L1Algo/L1Algo.h b/reco/L1/L1Algo/L1Algo.h
index d004043835..2cc45aa584 100644
--- a/reco/L1/L1Algo/L1Algo.h
+++ b/reco/L1/L1Algo/L1Algo.h
@@ -204,7 +204,7 @@ public:
   int NFStations {0};    // ?
 
   L1Station vStations[fkMaxNstations] _fvecalignment;  // station info
-  L1Vector<L1Material> fRadThick {"fRadThick"};      // material for each station
+  L1Vector<L1Material> fRadThick {"fRadThick"};        // material for each station
 
   int NStsStrips {0};                   // number of strips
   L1Vector<L1Hit>* vStsHits {nullptr};  // hits as a combination of front-, backstrips and z-position
@@ -441,7 +441,7 @@ private:
 
   /// Find the doublets. Reformat data in the portion of doublets.
   void f20(  // input
-    Tindex n1, L1Station& stam, L1HitPoint* vStsHits_m, L1TrackPar* T_1, THitI* hitsl_1,
+    Tindex n1, L1Station& stal, L1Station& stam, L1HitPoint* vStsHits_m, L1TrackPar* T_1, THitI* hitsl_1,
 
     // output
     Tindex& n2, L1Vector<THitI>& i1_2,
diff --git a/reco/L1/L1Algo/L1CATrackFinder.cxx b/reco/L1/L1Algo/L1CATrackFinder.cxx
index 6edecd4454..d98a0989c0 100644
--- a/reco/L1/L1Algo/L1CATrackFinder.cxx
+++ b/reco/L1/L1Algo/L1CATrackFinder.cxx
@@ -368,7 +368,7 @@ inline void L1Algo::f11(  /// input 1st stage of singlet search
     if ((istam >= NMvdStations) && (istal <= NMvdStations - 1)) { fit.L1AddPipeMaterial(T, MaxInvMom, 1); }
 
     fvec dz = zstam - zl;
-    L1ExtrapolateTime(T, dz);
+    L1ExtrapolateTime(T, dz, stam.timeInfo);
 
     if (fGlobal || fmCBMmode)
     // extrapolate to left hit
@@ -387,7 +387,7 @@ inline void L1Algo::f11(  /// input 1st stage of singlet search
 /// Find the doublets. Reformat data in the portion of doublets.
 inline void L1Algo::f20(
   /// input
-  Tindex n1, L1Station& stam, L1HitPoint* vStsHits_m, L1TrackPar* T_1, THitI* hitsl_1,
+  Tindex n1, L1Station& stal, L1Station& stam, L1HitPoint* vStsHits_m, L1TrackPar* T_1, THitI* hitsl_1,
   /// output
   Tindex& n2, L1Vector<THitI>& i1_2,
 #ifdef DOUB_PERFORMANCE
@@ -436,8 +436,10 @@ inline void L1Algo::f20(
 
 
       // check y-boundaries
-      if (fabs(time - hitm.time) > sqrt(timeError + hitm.timeEr * hitm.timeEr) * 5) continue;
-      if (fabs(time - hitm.time) > 30) continue;
+      if ((stam.timeInfo) && (stal.timeInfo))
+        if (fabs(time - hitm.time) > sqrt(timeError + hitm.timeEr * hitm.timeEr) * 5) continue;
+      if ((stam.timeInfo) && (stal.timeInfo))
+        if (fabs(time - hitm.time) > 30) continue;
 
 #ifdef USE_EVENT_NUMBER
       if ((Event[i1_V][i1_4] != hitm.n)) continue;
@@ -631,7 +633,7 @@ inline void L1Algo::f30(  // input
 
       fvec dz = zPos_2 - T2.z;
 
-      L1ExtrapolateTime(T2, dz);
+      L1ExtrapolateTime(T2, dz, stam.timeInfo);
       // add middle hit
       L1ExtrapolateLine(T2, zPos_2);
 
@@ -661,7 +663,7 @@ inline void L1Algo::f30(  // input
         L1Filter(T2, info, u_back_2);
 
 
-      FilterTime(T2, timeM, timeMEr);
+      FilterTime(T2, timeM, timeMEr, stam.timeInfo);
 #ifdef USE_RL_TABLE
       if (!fmCBMmode) fit.L1AddMaterial(T2, fRadThick[istam].GetRadThick(T2.x, T2.y), T2.qp, 1);
 
@@ -673,7 +675,7 @@ inline void L1Algo::f30(  // input
       if ((istar >= NMvdStations) && (istam <= NMvdStations - 1)) { fit.L1AddPipeMaterial(T2, T2.qp, 1); }
 
       fvec dz2 = star.z - T2.z;
-      L1ExtrapolateTime(T2, dz2);
+      L1ExtrapolateTime(T2, dz2, stam.timeInfo);
 
       // extrapolate to the right hit station
 
@@ -741,12 +743,14 @@ inline void L1Algo::f30(  // input
 
 
           fvec dz3 = zr - T_cur.z;
-          L1ExtrapolateTime(T_cur, dz3);
+          L1ExtrapolateTime(T_cur, dz3, star.timeInfo);
 
           L1ExtrapolateLine(T_cur, zr);
 
-          if (fabs(T_cur.t[i2_4] - hitr.time) > sqrt(T_cur.C55[i2_4] + hitr.timeEr) * 5) continue;
-          if (fabs(T_cur.t[i2_4] - hitr.time) > 30) continue;
+          if ((star.timeInfo) && (stam.timeInfo))
+            if (fabs(T_cur.t[i2_4] - hitr.time) > sqrt(T_cur.C55[i2_4] + hitr.timeEr) * 5) continue;
+          if ((star.timeInfo) && (stam.timeInfo))
+            if (fabs(T_cur.t[i2_4] - hitr.time) > 30) continue;
 
 
           // - check whether hit belong to the window ( track position +\- errors ) -
@@ -805,7 +809,7 @@ inline void L1Algo::f30(  // input
 
           L1FilterChi2(info, x, y, C00, C10, C11, chi2, hitr.V());
 
-          FilterTime(T_cur, hitr.time, hitr.timeEr);
+          FilterTime(T_cur, hitr.time, hitr.timeEr, star.timeInfo);
 
 
 #ifdef DO_NOT_SELECT_TRIPLETS
@@ -877,7 +881,7 @@ inline void L1Algo::f31(  // input
 
     fvec dz = z_Pos[i3_V] - T_3[i3_V].z;
 
-    L1ExtrapolateTime(T_3[i3_V], dz);
+    L1ExtrapolateTime(T_3[i3_V], dz, star.timeInfo);
     L1ExtrapolateLine(T_3[i3_V], z_Pos[i3_V]);
 
 
@@ -907,7 +911,7 @@ inline void L1Algo::f31(  // input
     else
       L1Filter(T_3[i3_V], info, u_back_[i3_V]);
 
-    if (!fmCBMmode) FilterTime(T_3[i3_V], timeR[i3_V], timeER[i3_V]);
+    if (!fmCBMmode) FilterTime(T_3[i3_V], timeR[i3_V], timeER[i3_V], star.timeInfo);
 
     //  FilterTime(T_3[i3_V], timeR[i3_V], timeER[i3_V]);
   }
@@ -1301,6 +1305,7 @@ inline void L1Algo::DupletsStaPort(
   ///   @&hitsm_2 - index of middle hit in hits array indexed by doublet index
 
   if (istam < NStations) {
+    L1Station& stal = vStations[istal];
     L1Station& stam = vStations[istam];
 
     // prepare data
@@ -1344,7 +1349,7 @@ inline void L1Algo::DupletsStaPort(
 #endif  // DOUB_PERFORMANCE
 
     f20(  // input
-      n1, stam, vStsHits_m, T_1, hitsl_1,
+      n1, stal, stam, vStsHits_m, T_1, hitsl_1,
       // output
       n_2, i1_2,
 #ifdef DOUB_PERFORMANCE
@@ -1654,12 +1659,6 @@ void L1Algo::CATrackFinder()
       const float& time = (*vStsHits)[ih].t;
       if ((lasttime < time) && (!std::isinf(time))) lasttime = time;
       if ((starttime > time) && (time > 0)) starttime = time;
-
-      if (ist < NMvdStations) {
-        L1Hit& h = (*vStsHits)[ih];
-        h.t      = 0;
-        h.dt     = 100;
-      }
     }
 
 
diff --git a/reco/L1/L1Algo/L1Extrapolation.h b/reco/L1/L1Algo/L1Extrapolation.h
index 4958db054d..9696e97572 100644
--- a/reco/L1/L1Algo/L1Extrapolation.h
+++ b/reco/L1/L1Algo/L1Extrapolation.h
@@ -699,34 +699,29 @@ inline void L1Extrapolate0(L1TrackPar& T,  // input track parameters (x,y,tx,ty,
 
 
 inline void L1ExtrapolateTime(L1TrackPar& T,  // input track parameters (x,y,tx,ty,Q/p) and cov.matrix
-                              fvec dz         // extrapolate to this z position
-)
+                              fvec dz,        // extrapolate to this z position
+                              fvec timeInfo = 1.)
 {
 
   cnst c_light = 29.9792458;
 
-  T.t += sqrt((T.tx * T.tx) + (T.ty * T.ty) + 1) * dz / c_light;
+  const fvec mask = (timeInfo > 0);
+  fvec dz_mask    = mask & dz;
 
-  const fvec k1 = T.tx * dz / (c_light * sqrt((T.tx * T.tx) + (T.ty * T.ty) + 1));
-  const fvec k2 = T.ty * dz / (c_light * sqrt((T.tx * T.tx) + (T.ty * T.ty) + 1));
+  T.t += sqrt((T.tx * T.tx) + (T.ty * T.ty) + 1) * dz_mask / c_light;
+
+  const fvec k1 = dz_mask & T.tx / (c_light * sqrt((T.tx * T.tx) + (T.ty * T.ty) + 1));
+  const fvec k2 = dz_mask & T.ty / (c_light * sqrt((T.tx * T.tx) + (T.ty * T.ty) + 1));
 
   fvec c52 = T.C52;
   fvec c53 = T.C53;
 
-  //   cout<<k1<<" k1 "<<k2<<" k2 "<<endl;
-
-  //  fvec ha = T.C53;
-  //  fvec ha2 = T.C54;
-
   T.C50 += k1 * T.C20 + k2 * T.C30;
   T.C51 += k1 * T.C21 + k2 * T.C31;
   T.C52 += k1 * T.C22 + k2 * T.C32;
   T.C53 += k1 * T.C32 + k2 * T.C33;
   T.C54 += k1 * T.C42 + k2 * T.C43;
   T.C55 += k1 * (T.C52 + c52) + k2 * (T.C53 + c53);
-
-  //   cout<<ha<<" c53 "<<T.C53<<endl;
-  //     cout<<ha2<<" c54 "<<T.C54<<endl;
 }
 
 inline void L1ExtrapolateLine(L1TrackPar& T, fvec z_out)
diff --git a/reco/L1/L1Algo/L1Filtration.h b/reco/L1/L1Algo/L1Filtration.h
index 08e77162c2..0f2e448cef 100644
--- a/reco/L1/L1Algo/L1Filtration.h
+++ b/reco/L1/L1Algo/L1Filtration.h
@@ -14,7 +14,7 @@
 #define cnst const fvec
 
 
-inline void FilterTime(L1TrackPar& T, fvec t0, fvec dt0, fvec w = 1.)
+inline void FilterTime(L1TrackPar& T, fvec t0, fvec dt0, fvec timeInfo = 1., fvec w = 1.)
 {
   fvec wi, zeta, zetawi, HCH;
   fvec F0, F1, F2, F3, F4, F5;
@@ -33,11 +33,11 @@ inline void FilterTime(L1TrackPar& T, fvec t0, fvec dt0, fvec w = 1.)
   F4 = T.C54;
   F5 = T.C55;
 
-#if 0  // use mask
-  const fvec mask = (HCH < info.sigma2 * 16.);
-  wi = w/( (mask & info.sigma2) +HCH );
-  zetawi = zeta *wi;
-  T.chi2 +=  mask & (zeta * zetawi);
+#if 1  // use mask
+  const fvec mask = (timeInfo > 0);
+  wi              = mask & w / (dt0 * dt0 + HCH);
+  zetawi          = zeta * wi;
+  T.chi2 += mask & (zeta * zetawi);
 #else
   wi     = w / (dt0 * dt0 + HCH);
   zetawi = zeta * wi;
diff --git a/reco/L1/L1Algo/L1Station.h b/reco/L1/L1Algo/L1Station.h
index 8464a1df9d..c409f632ec 100644
--- a/reco/L1/L1Algo/L1Station.h
+++ b/reco/L1/L1Algo/L1Station.h
@@ -15,6 +15,7 @@ class L1Station {
 public:
   L1Station()
     : type(0)
+    , timeInfo(0)
     , z(0)
     , Rmin(0)
     , Rmax(0)
@@ -31,6 +32,7 @@ public:
   }
 
   int type;
+  int timeInfo;
   fvec z, Rmin, Rmax, Sy;
   L1MaterialInfo materialInfo;
   L1FieldSlice fieldSlice;
-- 
GitLab