From 686c077c2935d8f099c5f1516109283d7a20fdec Mon Sep 17 00:00:00 2001 From: Valentina <v.akishina@gsi.de> Date: Tue, 31 Jan 2023 12:41:27 +0100 Subject: [PATCH] L1 use general fit function for mCBM --- reco/L1/CbmL1.cxx | 14 ++------ reco/L1/L1Algo/L1Algo.h | 2 ++ reco/L1/L1Algo/L1TrackFitter.cxx | 59 ++++++++++++++++++++++++++------ 3 files changed, 54 insertions(+), 21 deletions(-) diff --git a/reco/L1/CbmL1.cxx b/reco/L1/CbmL1.cxx index 19e69c677e..1a54247857 100644 --- a/reco/L1/CbmL1.cxx +++ b/reco/L1/CbmL1.cxx @@ -1008,23 +1008,15 @@ void CbmL1::Reconstruct(CbmEvent* event) if (fVerbose > 1) { cout << "L1 Track finder..." << endl; } fpAlgo->CATrackFinder(); - // IdealTrackFinder(); + // IdealTrackFinder(); fTrackingTime += fpAlgo->fCATime; if (fVerbose > 1) { cout << "L1 Track finder ok" << endl; } // fpAlgo->L1KFTrackFitter( fExtrapolateToTheEndOfSTS ); - { // track fit - L1FieldValue b = fpAlgo->GetParameters()->GetVertexFieldValue(); + // track fit + fpAlgo->L1KFTrackFitter(); - if ((fabs(b.x[0]) < 0.0000001) && (fabs(b.y[0]) < 0.0000001) && (fabs(b.z[0]) < 0.0000001)) { - // no field - fpAlgo->KFTrackFitter_simple(); - } - else { - fpAlgo->L1KFTrackFitter(); - } - } if (fVerbose > 1) { cout << "L1 Track fitter ok" << endl; } diff --git a/reco/L1/L1Algo/L1Algo.h b/reco/L1/L1Algo/L1Algo.h index cfa69f0172..798ecf952c 100644 --- a/reco/L1/L1Algo/L1Algo.h +++ b/reco/L1/L1Algo/L1Algo.h @@ -342,6 +342,8 @@ public: void GuessVec(L1TrackPar& t, fvec* xV, fvec* yV, fvec* zV, fvec* Sy, fvec* wV, int NHits, fvec* zCur = 0); void GuessVec(L1TrackParFit& t, fvec* xV, fvec* yV, fvec* zV, fvec* Sy, fvec* wV, int NHits, fvec* zCur = 0, fvec* timeV = 0, fvec* w_time = 0); + void GuessVecNoField(L1TrackParFit& t, fvec& x_last, fvec& x_2last, fvec& y_last, fvec& y_2last, fvec& z_end, + fvec& z_2last, fvec& time_last, fvec* w_time, fvec& dt2_last); void FilterFirst(L1TrackParFit& track, fvec& x, fvec& y, fvec& t, fvec& dt2, fvec& dx2, fvec& dy2, fvec& dxy); diff --git a/reco/L1/L1Algo/L1TrackFitter.cxx b/reco/L1/L1Algo/L1TrackFitter.cxx index 0c17271136..a876ab4fc0 100644 --- a/reco/L1/L1Algo/L1TrackFitter.cxx +++ b/reco/L1/L1Algo/L1TrackFitter.cxx @@ -359,8 +359,8 @@ void L1Algo::L1KFTrackFitter() fvec time_first; fvec dt2_first; - fvec x_last; - fvec y_last; + fvec x_last, x_2last; + fvec y_last, y_2last; fvec d_xx_lst; fvec d_yy_lst; fvec d_xy_lst; @@ -378,7 +378,7 @@ void L1Algo::L1KFTrackFitter() fvec fldZ1; fvec fldZ2; fvec z_start; - fvec z_end; + fvec z_end, z_2last; L1FieldValue fB[L1Constants::size::kMaxNstations], fB_temp _fvecalignment; @@ -454,6 +454,7 @@ void L1Algo::L1KFTrackFitter() d_yy_fst[iVec] = d_yy[ista][iVec]; d_xy_fst[iVec] = d_xy[ista][iVec]; } + else if (ih == nHitsTrack - 1) { z_end[iVec] = z[ista][iVec]; x_last[iVec] = x[ista][iVec]; @@ -464,6 +465,11 @@ void L1Algo::L1KFTrackFitter() time_last[iVec] = time[ista][iVec]; dt2_last[iVec] = dt2[ista][iVec]; } + else if (ih == nHitsTrack - 2) { + z_2last[iVec] = z[ista][iVec]; + x_2last[iVec] = x[ista][iVec]; + y_2last[iVec] = y[ista][iVec]; + } } fscal prevZ = z_end[iVec]; @@ -481,11 +487,17 @@ void L1Algo::L1KFTrackFitter() } } - GuessVec(fit, x, y, z, Sy, w, nStations, &z_end, time, w_time); + if (kGlobal == fTrackingMode || kMcbm == fTrackingMode) { + GuessVecNoField(fit, x_last, x_2last, y_last, y_2last, z_end, z_2last, time_last, w_time, dt2_last); + } + + else + + GuessVec(fit, x, y, z, Sy, w, nStations, &z_end, time, w_time); - if (kGlobal == fTrackingMode || kMcbm == fTrackingMode) { tr.qp = fvec(0.); } + if (kGlobal == fTrackingMode || kMcbm == fTrackingMode) { tr.qp = fvec(1. / 1.1); } - //tr.qp = iif(isFieldPresent, tr.qp, fvec(1. / 0.25)); + // tr.qp = iif(isFieldPresent, tr.qp, fvec(1. / 0.25)); for (int iter = 0; iter < 2; iter++) { // 1.5 iterations @@ -529,17 +541,21 @@ void L1Algo::L1KFTrackFitter() fit.Extrapolate(z[ista], qp01, fld1, wExtr); + //if (ista == fNstationsBeforePipe - 1) { //fit.AddPipeMaterial(qp01, wExtr); //fit.EnergyLossCorrection(fit.fPipeRadThick, qp01, fvec(1.f), wExtr); //} fit.AddMsInMaterial(fParameters.GetMaterialThickness(ista, tr.x, tr.y), qp01, wExtr); + fit.EnergyLossCorrection(fParameters.GetMaterialThickness(ista, tr.x, tr.y), qp01, fvec(1.f), wExtr); fit.Filter(sta[ista].frontInfo, u[ista], du2[ista], w1); fit.Filter(sta[ista].backInfo, v[ista], dv2[ista], w1); + fit.FilterTime(time[ista], dt2[ista], w1_time, sta[ista].timeInfo); + fldB2 = fldB1; fldZ2 = fldZ1; fldB1 = fldB0; @@ -734,6 +750,28 @@ void L1Algo::L1KFTrackFitter() } // iter } } +void L1Algo::GuessVecNoField(L1TrackParFit& t, fvec& x_last, fvec& x_2last, fvec& y_last, fvec& y_2last, fvec& z_end, + fvec& z_2last, fvec& time_last, fvec* w_time, fvec& dt2_last) +{ + fvec dzi = fvec(1.) / (z_end - z_2last); + + t.fTr.x = x_last; + t.fTr.y = y_last; + t.fTr.tx = (x_last - x_2last) * dzi; + t.fTr.ty = (y_last - y_2last) * dzi; + t.fTr.t = time_last; + t.fTr.z = z_end; + t.fTr.chi2 = fvec(0.); + t.fTr.NDF = fvec(2.); + + t.fTr.C20 = t.fTr.C21 = fvec(0.); + t.fTr.C30 = t.fTr.C31 = t.fTr.C32 = fvec(0.); + t.fTr.C40 = t.fTr.C41 = t.fTr.C42 = t.fTr.C43 = fvec(0.); + t.fTr.C50 = t.fTr.C51 = t.fTr.C52 = t.fTr.C53 = t.fTr.C54 = fvec(0.); + t.fTr.C22 = t.fTr.C33 = vINF; + t.fTr.C44 = fvec(1.); + t.fTr.C55 = fvec(dt2_last); +} void L1Algo::GuessVec(L1TrackPar& t, fvec* xV, fvec* yV, fvec* zV, fvec* Sy, fvec* wV, int NHits, fvec* zCur) @@ -829,10 +867,12 @@ void L1Algo::GuessVec(L1TrackParFit& t, fvec* xV, fvec* yV, fvec* zV, fvec* Sy, y = yV[i]; w = wV[i]; if (timeV) nhits = nhits + w_time[i]; - z = zV[i] - z0; - S = Sy[i]; + z = zV[i] - z0; + S = Sy[i]; + wz = w * z; wS = w * S; + A0 += w; A1 += wz; A2 += wz * z; @@ -876,8 +916,7 @@ void L1Algo::GuessVec(L1TrackParFit& t, fvec* xV, fvec* yV, fvec* zV, fvec* Sy, A1 = A1 + A3 * L1; A2 = A2 + (A4 + A4 + A5 * L1) * L1; b1 += b2 * L1; - det = fvec::One() / (-A1 * A1 + A0 * A2); - + det = fvec::One() / (-A1 * A1 + A0 * A2); t.fTr.y = (A2 * b0 - A1 * b1) * det; t.fTr.ty = (-A1 * b0 + A0 * b1) * det; t.fTr.qp = -L * c_light_i / sqrt(txtx1 + t.fTr.ty * t.fTr.ty); -- GitLab