diff --git a/macro/run/run_reco_tb_track.C b/macro/run/run_reco_tb_track.C index 67cd67d0632a8e9d91d24d1d4e4c81a97e5f8d2c..518cf39ce92a0d48357298ada55807b74a538127 100644 --- a/macro/run/run_reco_tb_track.C +++ b/macro/run/run_reco_tb_track.C @@ -170,14 +170,14 @@ void run_reco_tb_track(TString dataSet = "test", // run->AddTask(ECbmModuleId::psdHit); // std::cout << "-I- : Added task CbmPsdHitProducer" << std::endl; - // // --- STS track finder - // run->AddTask(new CbmKF()); - // CbmL1* l1 = new CbmL1(); - // l1->SetDataMode(1); - // run->AddTask(l1); - // CbmStsTrackFinder* stsTrackFinder = new CbmL1StsTrackFinder(); - // FairTask* stsFindTracks = new CbmStsFindTracks(0, stsTrackFinder); - // run->AddTask(stsFindTracks); + // --- STS track finder + run->AddTask(new CbmKF()); + CbmL1* l1 = new CbmL1(); + l1->SetDataMode(1); + run->AddTask(l1); + CbmStsTrackFinder* stsTrackFinder = new CbmL1StsTrackFinder(); + FairTask* stsFindTracks = new CbmStsFindTracks(0, stsTrackFinder); + run->AddTask(stsFindTracks); // // // --- Event builder (track-based) // run->AddTask(new CbmBuildEventsFromTracksReal()); diff --git a/reco/L1/CbmL1.cxx b/reco/L1/CbmL1.cxx index a7cd67c9f52a4a98f93bf49bb41dc45656caa3b7..9052a7ec4132d8b5557487f2362a8aa001e1011a 100644 --- a/reco/L1/CbmL1.cxx +++ b/reco/L1/CbmL1.cxx @@ -387,6 +387,8 @@ InitStatus CbmL1::Init() { if (FindTask) fUseMVD = FindTask->MvdUsage(); } + fUseMVD = 0; + histodir = gROOT->mkdir("L1"); @@ -1309,7 +1311,7 @@ void CbmL1::Reconstruct(CbmEvent* event) { static int nevent = 0; vFileEvent.clear(); - if (fTimesliceMode) { + if (fTimesliceMode && fPerformance) { int nofEvents = fEventList->GetNofEvents(); for (int iE = 0; iE < nofEvents; iE++) { @@ -1325,6 +1327,7 @@ void CbmL1::Reconstruct(CbmEvent* event) { vFileEvent.insert(DFSET::value_type(iFile, iEvent)); } + if (fVerbose > 1) cout << endl << "CbmL1::Exec event " << ++nevent << " ..." << endl << endl; #ifdef _OPENMP diff --git a/reco/L1/CbmL1Performance.cxx b/reco/L1/CbmL1Performance.cxx index 4edce3d4798589bc96a115a56d97b5dc017053d5..26ffa1d53a894fb11d20d15f6485e34afadc1b78 100644 --- a/reco/L1/CbmL1Performance.cxx +++ b/reco/L1/CbmL1Performance.cxx @@ -2757,6 +2757,7 @@ void CbmL1::InputPerformance() { link = hm->GetLink(iLink); } } + // if (bestWeight / totalWeight < 0.7 || iMCPoint < 0) continue; if (iMCPoint < 0) continue; diff --git a/reco/L1/CbmL1ReadEvent.cxx b/reco/L1/CbmL1ReadEvent.cxx index f32c3cf00912598a940eab739cd46d90e21a3ee3..b9d4a5e92846c62e948c30071c978ae18713eeee 100644 --- a/reco/L1/CbmL1ReadEvent.cxx +++ b/reco/L1/CbmL1ReadEvent.cxx @@ -1075,14 +1075,14 @@ void CbmL1::ReadEvent(L1AlgoInputData* fData_, CbmEvent* event) { h.t_reco = th.time; h.t_er = th.t_er; // h.track = th.track; - h.dx = th.dx; - h.dy = th.dy; - h.du = th.du; - h.dv = th.dv; - h.dxy = th.dxy; + // h.dx = th.dx; + // h.dy = th.dy; + h.du = th.du; + h.dv = th.dv; + // h.dxy = th.dxy; // h.p = th.p; // h.q = th.q; - h.ista = th.iStation; + // h.ista = th.iStation; // find and save z positions float z_tmp = -111.; @@ -1575,6 +1575,7 @@ void CbmL1::HitMatch() { iEvent = vFileEvent.begin()->second; } int nMvdPoints_ = 0; + if (!fTimesliceMode) if (listMvdPts) nMvdPoints_ = listMvdPts->GetEntriesFast(); diff --git a/reco/L1/L1Algo/L1Algo.cxx b/reco/L1/L1Algo/L1Algo.cxx index 886e16b9f808e620b3c7be7308bb80a14e96b6a0..0c5fff580ae9fc5328b5cc9941077d49918e2c33 100644 --- a/reco/L1/L1Algo/L1Algo.cxx +++ b/reco/L1/L1Algo/L1Algo.cxx @@ -276,6 +276,30 @@ void L1Algo::StripsToCoor(const fscal& u, _y = sta.yInfo.cos_phi * u + sta.yInfo.sin_phi * v; } +void L1Algo::dUdV_to_dY(const fvec& u, + const fvec& v, + fvec& _y, + const L1Station& sta) { + _y = sqrt((sta.yInfo.cos_phi * u) * (sta.yInfo.cos_phi * u) + + (sta.yInfo.sin_phi * v) * (sta.yInfo.sin_phi * v)); +} + +void L1Algo::dUdV_to_dX(const fvec& u, + const fvec& v, + fvec& _x, + const L1Station& sta) { + _x = sqrt((sta.xInfo.sin_phi * u) * (sta.xInfo.sin_phi * u) + + (sta.xInfo.cos_phi * v) * (sta.xInfo.cos_phi * v)); +} + +void L1Algo::dUdV_to_dXdY(const fvec& u, + const fvec& v, + fvec& _xy, + const L1Station& sta) { + _xy = ((sta.xInfo.sin_phi * u) * (sta.yInfo.cos_phi * u) + + (sta.xInfo.cos_phi * v) * (sta.yInfo.sin_phi * v)); +} + void L1Algo::StripsToCoor(const fvec& u, const fvec& v, fvec& x, @@ -294,34 +318,26 @@ void L1Algo::StripsToCoor(const fvec& u, L1HitPoint L1Algo::CreateHitPoint(const L1StsHit& hit, char ista) /// hit and station number { - L1Station& sta = vStations[int(ista)]; - const L1Strip& u = (*vStsStrips)[hit.f]; - const L1Strip& v = (*vStsStripsB)[hit.b]; - fscal x, y; - StripsToCoor(u, v, x, y, sta); + // L1Station& sta = vStations[int(ista)]; + const L1Strip& u = (*vStsStrips)[hit.f]; + const L1Strip& v = (*vStsStripsB)[hit.b]; const float& z = (*vStsZPos)[hit.iz]; const float& time = hit.t_reco; - return L1HitPoint( - x, y, hit.dx, hit.dy, hit.dxy, z, u, v, hit.du, hit.dv, time, hit.t_er); + return L1HitPoint(z, u, v, hit.du, hit.dv, time, hit.t_er); } void L1Algo::CreateHitPoint(const L1StsHit& hit, char ista, L1HitPoint& point) /// hit and station number { - L1Station& sta = vStations[int(ista)]; - const L1Strip& u = (*vStsStrips)[hit.f]; - const L1Strip& v = (*vStsStripsB)[hit.b]; - fscal x, y; - StripsToCoor(u, v, x, y, sta); + // L1Station& sta = vStations[int(ista)]; + const L1Strip& u = (*vStsStrips)[hit.f]; + const L1Strip& v = (*vStsStripsB)[hit.b]; const float& z = (*vStsZPos)[hit.iz]; const float& time = hit.t_reco; - const float& dx_ = hit.dx; - const float& dy_ = hit.dy; const float& du_ = hit.du; const float& dv_ = hit.dv; - const float& dxy_ = hit.dxy; - point.Set(x, y, dx_, dy_, dxy_, z, u.f, v.f, du_, dv_, time, hit.t_er); + point.Set(z, u.f, v.f, du_, dv_, time, hit.t_er); // point.Set(x,y,z,v.f,u.f, time, n1, hit.time1, 2.9 ); // TODO put correct time error from the hit } diff --git a/reco/L1/L1Algo/L1Algo.h b/reco/L1/L1Algo/L1Algo.h index 3d82474ac15f35135acc1b99d7480cd7214587bd..774d276f9532b41bb301b4e92be220b104f0bdd2 100644 --- a/reco/L1/L1Algo/L1Algo.h +++ b/reco/L1/L1Algo/L1Algo.h @@ -30,7 +30,7 @@ class L1AlgoDraw; #endif //#define USE_EVENT_NUMBER //#endif -#define MERGE_CLONES +//#define MERGE_CLONES #include "L1Branch.h" @@ -459,6 +459,14 @@ public: fscal& _y, fscal& _z, const L1Station& sta); + + void dUdV_to_dY(const fvec& u, const fvec& v, fvec& _y, const L1Station& sta); + + void dUdV_to_dX(const fvec& u, const fvec& v, fvec& _x, const L1Station& sta); + + void + dUdV_to_dXdY(const fvec& u, const fvec& v, fvec& _xy, const L1Station& sta); + void GetHitCoor(const L1StsHit& _h, fscal& _x, fscal& _y, char iS); void StripsToCoor( const fscal& u, @@ -683,8 +691,8 @@ private: nsL1::vector<fvec>::TSimd& u_front_3, nsL1::vector<fvec>::TSimd& u_back_3, nsL1::vector<fvec>::TSimd& z_Pos_3, - nsL1::vector<fvec>::TSimd& dx_, - nsL1::vector<fvec>::TSimd& dy_, + // nsL1::vector<fvec>::TSimd& dx_, + // nsL1::vector<fvec>::TSimd& dy_, nsL1::vector<fvec>::TSimd& du_, nsL1::vector<fvec>::TSimd& dv_, nsL1::vector<fvec>::TSimd& timeR, @@ -697,8 +705,8 @@ private: nsL1::vector<fvec>::TSimd& u_front_3, nsL1::vector<fvec>::TSimd& u_back_3, nsL1::vector<fvec>::TSimd& z_Pos_3, - nsL1::vector<fvec>::TSimd& dx_, - nsL1::vector<fvec>::TSimd& dy_, + // nsL1::vector<fvec>::TSimd& dx_, + // nsL1::vector<fvec>::TSimd& dy_, nsL1::vector<fvec>::TSimd& du_, nsL1::vector<fvec>::TSimd& dv_, nsL1::vector<fvec>::TSimd& timeR, diff --git a/reco/L1/L1Algo/L1Branch.h b/reco/L1/L1Algo/L1Branch.h index a9fdc8779757f34a024f30375d465dcd0188021f..00d6a40b4de779748003829d303174f010e40bce 100644 --- a/reco/L1/L1Algo/L1Branch.h +++ b/reco/L1/L1Algo/L1Branch.h @@ -26,43 +26,26 @@ class L1Triplet; struct L1Branch { L1Branch() - : n(0) - , Quality(0) - , CandIndex(0) + : //Quality(0), + ista(0) , Momentum(0) - , chi2(0) , NHits(0) - , Lengtha(0) - , ista(0) - , location(0) + , chi2(0) + , CandIndex(0) , StsHits() { // L1Branch():Momentum(0),chi2(0),NHits(0),Lengtha(0),ista(0) , StsHits(){ StsHits.resize(12); - // CandToCand.resize(200); - // CandToCand2.resize(200); - // StsHits.reserve(8); } - - int n; - unsigned short int Quality; + // unsigned short int Quality; + unsigned char ista; // fscal Quality; + // unsigned char iN; // iStation(3b) + nHits(5b) + char Momentum, NHits; + // char Lengtha; + fscal chi2; int CandIndex; - // bool SecondBest; - // bool ThirdBest; - fscal Momentum, chi2; - char NHits; - char Lengtha; - unsigned char ista; - int location; - // int check; - - // float time_dif; - - - // L1Branch* BestCandidateP; - // L1Branch* SecondBestCandidateP; L1Vector<THitI> StsHits; @@ -103,7 +86,7 @@ struct L1Branch { inline static bool compareCand(const L1Branch& a, const L1Branch& b) { - if (a.Lengtha != b.Lengtha) return (a.Lengtha > b.Lengtha); + if (a.NHits != b.NHits) return (a.NHits > b.NHits); if (a.ista != b.ista) return (a.ista < b.ista); @@ -113,9 +96,9 @@ struct L1Branch { } - static bool compareChi2(const L1Branch& a, const L1Branch& b) { - return (a.Quality > b.Quality); - } + // static bool compareChi2(const L1Branch &a, const L1Branch &b){ + // return (a.Quality > b.Quality ); + // } // static bool compareChi2(const L1Branch &a, const L1Branch &b){ // if (a.Lengtha != b.Lengtha) return (a.Lengtha > b.Lengtha); @@ -132,14 +115,15 @@ struct L1Branch { //} void Set(unsigned char iStation, unsigned char Length, float Chi2, float Qp) { - Lengtha = Length; - ista = iStation; - unsigned short int ista_l = 16 - iStation; - float tmp = sqrt(Chi2) / 3.5 * 255; + NHits = Length; + ista = iStation; + // iN = ( (static_cast<unsigned char>( Chi2 ))<<3 ) + (Level%8); + //unsigned short int ista_l = 16-iStation; + float tmp = sqrt(Chi2) / 3.5 * 255; if (tmp > 255) tmp = 255; - unsigned short int chi_2 = 255 - static_cast<unsigned char>(tmp); - Quality = (Length << 12) + (ista_l << 8) + chi_2; - Momentum = 1.0 / fabs(Qp); + // unsigned short int chi_2 = 255 - static_cast<unsigned char>( tmp ); + // Quality = (Length<<12) + (ista_l<<8) + chi_2; + Momentum = 1.0 / fabs(Qp); // chi2 = chi_2; chi2 = Chi2; } @@ -148,18 +132,18 @@ struct L1Branch { // Quality += - (Quality*(4096)) + (Length/(4096)); // } - static bool compareChi2Q(const L1Branch& a, const L1Branch& b) { - // return (a.Quality > b.Quality); - // - if (a.Lengtha != b.Lengtha) return (a.Lengtha > b.Lengtha); - - if (a.ista != b.ista) return (a.ista < b.ista); - - return (a.chi2 < b.chi2); - } - static bool comparePChi2(const L1Branch* a, const L1Branch* b) { - return compareChi2(*a, *b); - } + // static bool compareChi2Q(const L1Branch &a, const L1Branch &b){ + //// return (a.Quality > b.Quality); + //// + // if (a.Lengtha != b.Lengtha) return (a.Lengtha > b.Lengtha); + // + // if (a.ista != b.ista ) return (a.ista < b.ista ); + // + // return (a.chi2 < b.chi2 ); + // } + // static bool comparePChi2(const L1Branch *a, const L1Branch *b){ + // return compareChi2(*a,*b); + // } static bool compareMomentum(const L1Branch& a, const L1Branch& b) { return (a.Momentum > b.Momentum); } diff --git a/reco/L1/L1Algo/L1CATrackFinder.cxx b/reco/L1/L1Algo/L1CATrackFinder.cxx index ed551ec05655e3a596291e1432d6fc5354862ae4..34f74f9ea80308c14516ee8378960f3fec36895d 100644 --- a/reco/L1/L1Algo/L1CATrackFinder.cxx +++ b/reco/L1/L1Algo/L1CATrackFinder.cxx @@ -108,11 +108,11 @@ inline void L1Algo::f10( // input u_back_l[i1_V][i1_4] = hitl.V(); if (fUseHitErrors) { - d_x[i1_V][i1_4] = hitl.dX(); - d_y[i1_V][i1_4] = hitl.dY(); - d_xy[i1_V][i1_4] = hitl.dXY(); - d_u[i1_V][i1_4] = hitl.dU(); - d_v[i1_V][i1_4] = hitl.dV(); + // d_x[i1_V][i1_4] = hitl.dX(); + // d_y[i1_V][i1_4] = hitl.dY(); + // d_xy[i1_V][i1_4] = hitl.dXY(); + d_u[i1_V][i1_4] = hitl.dU(); + d_v[i1_V][i1_4] = hitl.dV(); } zPos_l[i1_V][i1_4] = hitl.Z(); @@ -174,12 +174,11 @@ inline void L1Algo::f11( /// input 1st stage of singlet search fvec& timeEr = HitTimeEr[i1_V]; const fvec& dzli = 1. / (zl - targZ); + fvec dx1, dy1, dxy1 = 0; - // fvec& du1 = d_u[i1_V]; - // fvec& dv1 = d_v[i1_V]; - fvec& dx1 = d_x[i1_V]; - fvec& dy1 = d_y[i1_V]; - fvec& dxy1 = d_xy[i1_V]; + dUdV_to_dX(d_u[i1_V], d_v[i1_V], dx1, stal); + dUdV_to_dY(d_u[i1_V], d_v[i1_V], dy1, stal); + dUdV_to_dXdY(d_u[i1_V], d_v[i1_V], dxy1, stal); StripsToCoor(u, v, xl, yl, stal); @@ -261,7 +260,7 @@ inline void L1Algo::f11( /// input 1st stage of singlet search T.t = time; -// #define BEGIN_FROM_TARGET + // #define BEGIN_FROM_TARGET #ifndef BEGIN_FROM_TARGET // the best now T.x = xl; @@ -478,7 +477,8 @@ inline void L1Algo::f20( // input (sqrt(Pick_m22 * (T1.C11 + stam.XYInfo.C11)) + MaxDZ * fabs(T1.ty))[i1_4] * iz, time, - sqrt(timeError)); + sqrt(timeError) * 5); + THitI imh = 0; @@ -517,10 +517,17 @@ inline void L1Algo::f20( // input fscal dy_est2 = Pick_m22[i1_4] * fabs(C11[i1_4] + stam.XYInfo.C11[i1_4]); - if (fUseHitErrors) - dy_est2 = Pick_m22[i1_4] * fabs(C11[i1_4] + hitm.dY() * hitm.dY()); + if (fUseHitErrors) { + fvec dym = 0; + dUdV_to_dY(hitm.dU(), hitm.dV(), dym, stam); + dy_est2 = Pick_m22[i1_4] * fabs(C11[i1_4] + dym[0] * dym[0]); + } + + fvec xm, ym = 0; - const fscal& dY = hitm.Y() - y[i1_4]; + StripsToCoor(hitm.U(), hitm.V(), xm, ym, stam); + + const fscal& dY = ym[i1_4] - y[i1_4]; if (dY * dY > dy_est2 && dY < 0) continue; @@ -530,10 +537,13 @@ inline void L1Algo::f20( // input fscal dx_est2 = Pick_m22[i1_4] * fabs(C00[i1_4] + stam.XYInfo.C00[i1_4]); - if (fUseHitErrors) - dx_est2 = Pick_m22[i1_4] * fabs(C00[i1_4] + hitm.dX() * hitm.dX()); + if (fUseHitErrors) { + fvec dxm = 0; + dUdV_to_dX(hitm.dU(), hitm.dV(), dxm, stam); + dx_est2 = Pick_m22[i1_4] * fabs(C00[i1_4] + dxm[0] * dxm[0]); + } - const fscal& dX = hitm.X() - x[i1_4]; + const fscal& dX = xm[i1_4] - x[i1_4]; if (dX * dX > dx_est2) continue; // check chi2 @@ -619,8 +629,8 @@ inline void L1Algo::f30( // input nsL1::vector<fvec>::TSimd& u_front_3, nsL1::vector<fvec>::TSimd& u_back_3, nsL1::vector<fvec>::TSimd& z_Pos_3, - nsL1::vector<fvec>::TSimd& dx_, - nsL1::vector<fvec>::TSimd& dy_, + // nsL1::vector<fvec>::TSimd& dx_, + // nsL1::vector<fvec>::TSimd& dy_, nsL1::vector<fvec>::TSimd& dv_, nsL1::vector<fvec>::TSimd& du_, nsL1::vector<fvec>::TSimd& timeR, @@ -636,8 +646,8 @@ inline void L1Algo::f30( // input u_front_3.push_back(fvec_0); u_back_3.push_back(fvec_0); z_Pos_3.push_back(fvec_0); - dx_.push_back(fvec_0); - dy_.push_back(fvec_0); + // dx_.push_back(fvec_0); + // dy_.push_back(fvec_0); du_.push_back(fvec_0); dv_.push_back(fvec_0); timeR.push_back(fvec_0); @@ -686,8 +696,6 @@ inline void L1Algo::f30( // input timeM[n2_4] = hitm.time; timeMEr[n2_4] = hitm.timeEr; // num[n2_4] = hitm.track; - dx2[n2_4] = hitm.dX(); - dy2[n2_4] = hitm.dY(); du2[n2_4] = hitm.dU(); dv2[n2_4] = hitm.dV(); @@ -695,6 +703,9 @@ inline void L1Algo::f30( // input hitsm_2_tmp[n2_4] = hitsm_2[i2]; } // n2_4 + dUdV_to_dX(du2, dv2, dx2, stam); + dUdV_to_dY(du2, dv2, dy2, stam); + fvec dz = zPos_2 - T2.z; L1ExtrapolateTime(T2, dz); @@ -791,7 +802,7 @@ inline void L1Algo::f30( // input + MaxDZ * fabs(T2.ty))[i2_4] * iz, time, - sqrt(timeError)); + sqrt(timeError) * 5); THitI irh = 0; @@ -802,7 +813,11 @@ inline void L1Algo::f30( // input if ((T2.n[i2_4] != hitr.n)) continue; #endif const fscal& zr = hitr.Z(); - const fscal& yr = hitr.Y(); + // const fscal& yr = hitr.Y(); + + fvec xr, yr = 0; + + StripsToCoor(hitr.U(), hitr.V(), xr, yr, star); fvec dz3 = zr - T2.z; L1ExtrapolateTime(T2, dz3); @@ -827,11 +842,13 @@ inline void L1Algo::f30( // input + star.XYInfo.C11 [i2_4]))); // TODO for FastPrim dx < dy - other sort is optimal. But not for doublets - if (fUseHitErrors) - dy_est2 = - (Pick_r22[i2_4] * (fabs(C11[i2_4] + hitr.dY() * hitr.dY()))); + if (fUseHitErrors) { + fvec dyr = 0; + dUdV_to_dY(hitr.dU(), hitr.dV(), dyr, star); + dy_est2 = (Pick_r22[i2_4] * (fabs(C11[i2_4] + dyr[0] * dyr[0]))); + } - const fscal& dY = yr - y[i2_4]; + const fscal& dY = yr[i2_4] - y[i2_4]; const fscal& dY2 = dY * dY; if (dY2 > dy_est2 && dY2 < 0) continue; // if (yr < y_minus_new[i2_4]) continue; @@ -846,11 +863,13 @@ inline void L1Algo::f30( // input fscal dx_est2 = (Pick_r22[i2_4] * (fabs(C00[i2_4] + star.XYInfo.C00[i2_4]))); - if (fUseHitErrors) - dx_est2 = - (Pick_r22[i2_4] * (fabs(C00[i2_4] + hitr.dX() * hitr.dX()))); + if (fUseHitErrors) { + fvec dxr = 0; + dUdV_to_dX(hitr.dU(), hitr.dV(), dxr, star); + dx_est2 = (Pick_r22[i2_4] * (fabs(C00[i2_4] + dxr[0] * dxr[0]))); + } - const fscal& dX = hitr.X() - x[i2_4]; + const fscal& dX = xr[i2_4] - x[i2_4]; if (dX * dX > dx_est2) continue; // check chi2 // not effective fvec C10; @@ -895,13 +914,13 @@ inline void L1Algo::f30( // input T3.SetOneEntry(n3_4, T2, i2_4); u_front_3[n3_V][n3_4] = hitr.U(); u_back_3[n3_V][n3_4] = hitr.V(); - dx_[n3_V][n3_4] = hitr.dX(); - dy_[n3_V][n3_4] = hitr.dY(); - du_[n3_V][n3_4] = hitr.dU(); - dv_[n3_V][n3_4] = hitr.dV(); - z_Pos_3[n3_V][n3_4] = zr; - timeR[n3_V][n3_4] = hitr.time; - timeER[n3_V][n3_4] = hitr.timeEr; + //dx_[n3_V][n3_4] = hitr.dX(); + // dy_[n3_V][n3_4] = hitr.dY(); + du_[n3_V][n3_4] = hitr.dU(); + dv_[n3_V][n3_4] = hitr.dV(); + z_Pos_3[n3_V][n3_4] = zr; + timeR[n3_V][n3_4] = hitr.time; + timeER[n3_V][n3_4] = hitr.timeEr; n3++; n3_V = n3 / fvecLen; @@ -912,8 +931,8 @@ inline void L1Algo::f30( // input u_front_3.push_back(fvec_0); u_back_3.push_back(fvec_0); z_Pos_3.push_back(fvec_0); - dx_.push_back(fvec_0); - dy_.push_back(fvec_0); + // dx_.push_back(fvec_0); + // dy_.push_back(fvec_0); du_.push_back(fvec_0); dv_.push_back(fvec_0); timeR.push_back(fvec_0); @@ -934,8 +953,8 @@ inline void L1Algo::f31( // input nsL1::vector<fvec>::TSimd& u_front_, nsL1::vector<fvec>::TSimd& u_back_, nsL1::vector<fvec>::TSimd& z_Pos, - nsL1::vector<fvec>::TSimd& dx_, - nsL1::vector<fvec>::TSimd& dy_, + // nsL1::vector<fvec>::TSimd& dx_, + // nsL1::vector<fvec>::TSimd& dy_, nsL1::vector<fvec>::TSimd& dv_, nsL1::vector<fvec>::TSimd& du_, nsL1::vector<fvec>::TSimd& timeR, @@ -1199,9 +1218,9 @@ inline void L1Algo::f4( // input TripletsLocal1[Station][Thread][nTripletsThread[istal][Thread]].SetLevel(0); TripletsLocal1[Station][Thread][nTripletsThread[istal][Thread]] - .first_neighbour = 0; + .SetFNeighbour(0); TripletsLocal1[Station][Thread][nTripletsThread[istal][Thread]] - .last_neighbour = 0; + .SetNNeighbours(0); Triplet = nTripletsThread[istal][Thread]; @@ -1251,7 +1270,7 @@ inline void L1Algo::f4( // input L1_ASSERT(ihitr < StsHitsUnusedStopIndex[istar], ihitr << " < " << StsHitsUnusedStopIndex[istar]); - fscal& time = T3.time[i3_4]; + fscal& time = T3.t[i3_4]; // int n = T3.n[i3_4]; @@ -1303,9 +1322,9 @@ inline void L1Algo::f4( // input if ((curNeighbour.GetMHit() != ihitr)) continue; - if (tr1.first_neighbour == 0) tr1.first_neighbour = Location; + if (tr1.GetFNeighbour() == 0) tr1.SetFNeighbour(Location); - tr1.last_neighbour = Location + 1; + tr1.SetNNeighbours(Location - tr1.GetFNeighbour() + 1); const unsigned char& jlevel = curNeighbour.GetLevel(); @@ -1608,10 +1627,10 @@ L1Algo::TripletsStaPort( /// creates triplets: input: @istal - start station nu nsL1::vector<fvec>::TSimd& z_pos3 = fz_pos3[Thread]; nsL1::vector<fvec>::TSimd& timeR = fTimeR[Thread]; nsL1::vector<fvec>::TSimd& timeER = fTimeER[Thread]; - nsL1::vector<fvec>::TSimd& dx3 = dx[Thread]; - nsL1::vector<fvec>::TSimd& dy3 = dy[Thread]; - nsL1::vector<fvec>::TSimd& du3 = du[Thread]; - nsL1::vector<fvec>::TSimd& dv3 = dv[Thread]; + // nsL1::vector<fvec>::TSimd& dx3 = dx[Thread]; + // nsL1::vector<fvec>::TSimd& dy3 = dy[Thread]; + nsL1::vector<fvec>::TSimd& du3 = du[Thread]; + nsL1::vector<fvec>::TSimd& dv3 = dv[Thread]; T_3.clear(); hitsl_3.clear(); @@ -1620,8 +1639,8 @@ L1Algo::TripletsStaPort( /// creates triplets: input: @istal - start station nu u_front3.clear(); u_back3.clear(); z_pos3.clear(); - dx3.clear(); - dy3.clear(); + // dx3.clear(); + // dy3.clear(); du3.clear(); dv3.clear(); timeR.clear(); @@ -1655,8 +1674,8 @@ L1Algo::TripletsStaPort( /// creates triplets: input: @istal - start station nu u_front3, u_back3, z_pos3, - dx3, - dy3, + // dx3, + // dy3, du3, dv3, timeR, @@ -1684,8 +1703,8 @@ L1Algo::TripletsStaPort( /// creates triplets: input: @istal - start station nu u_front3, u_back3, z_pos3, - dx3, - dy3, + // dx3, + // dy3, du3, dv3, timeR, @@ -1891,10 +1910,15 @@ void L1Algo::CATrackFinder() { #endif + float yStep = 1.5 / sqrt(nDontUsedHits); // empirics. 0.01*sqrt(2374) ~= 0.5 + - float yStep = 0.5 / sqrt(nDontUsedHits); // empirics. 0.01*sqrt(2374) ~= 0.5 + // float yStep = 0.5 / sqrt(nDontUsedHits); // empirics. 0.01*sqrt(2374) ~= 0.5 if (yStep > 0.3) yStep = 0.3; float xStep = yStep * 3; + // float xStep = yStep * 3; + + // yStep = 0.0078; // const float hitDensity = sqrt( nDontUsedHits ); // float yStep = 0.7*4/hitDensity; // empirics. 0.01*sqrt(2374) ~= 0.5 @@ -1907,7 +1931,7 @@ void L1Algo::CATrackFinder() { for (int iS = 0; iS < NStations; ++iS) { vGridTime[iS].BuildBins( - -1, 1, -0.6, 0.6, 0, lasttime, xStep, yStep, (lasttime + 1)); + -1, 1, -0.6, 0.6, 0, lasttime, xStep, yStep, (lasttime + 1) / 35); vGridTime[iS].StoreHits( StsHitsUnusedStopIndex[iS] - StsHitsUnusedStartIndex[iS], &((*vStsHits)[StsHitsUnusedStartIndex[iS]]), @@ -2127,35 +2151,34 @@ void L1Algo::CATrackFinder() { } /* { - /// possible left hits of triplets are splited in portions of 16 (4 SIMDs) to use memory faster - portionStopIndex[NStations-1] = 0; - unsigned int ip = 0; //index of curent portion - - for (int istal = NStations-2; istal >= FIRSTCASTATION; istal--) //start downstream chambers - { - int nHits = StsHitsUnusedStopIndex[istal] - StsHitsUnusedStartIndex[istal]; - - int NHits_P = nHits/Portion; - - for( int ipp = 0; ipp < NHits_P; ipp++ ) - { - n_g1[ip] = Portion; - ip++; - } // start_lh - portion of left hits - - n_g1[ip] = nHits - NHits_P*Portion; - - ip++; - portionStopIndex[istal] = ip; - }// lstations -// nPortions = ip; - } */ + /// possible left hits of triplets are splited in portions of 16 (4 SIMDs) to use memory faster + portionStopIndex[NStations-1] = 0; + unsigned int ip = 0; //index of curent portion + + for (int istal = NStations-2; istal >= FIRSTCASTATION; istal--) //start downstream chambers + { + int nHits = StsHitsUnusedStopIndex[istal] - StsHitsUnusedStartIndex[istal]; + + int NHits_P = nHits/Portion; + + for( int ipp = 0; ipp < NHits_P; ipp++ ) + { + n_g1[ip] = Portion; + ip++; + } // start_lh - portion of left hits + + n_g1[ip] = nHits - NHits_P*Portion; + + ip++; + portionStopIndex[istal] = ip; + }// lstations + // nPortions = ip; + } */ /// stage for triplets creation #ifdef XXX TStopwatch c_timer; - TStopwatch c_time; c_timer.Start(); #endif @@ -2403,8 +2426,13 @@ void L1Algo::CATrackFinder() { #endif L1Triplet& first_trip = (TripletsLocal1[istaF][ip][itrip]); + if (GetFUsed( + (*vSFlag)[(*vStsHitsUnused)[first_trip.GetLHit()].f] + | (*vSFlagB)[(*vStsHitsUnused)[first_trip.GetLHit()].b])) + continue; + - // ghost supression !!! + // ghost supression !!! #ifndef FIND_GAPED_TRACKS if (/*(isec == kFastPrimIter) ||*/ (isec == kAllPrimIter) || (isec == kAllPrimEIter) || (isec == kAllSecIter) @@ -2436,15 +2464,11 @@ void L1Algo::CATrackFinder() { continue; // try only triplets, which can start track with ilev+3 length. w\o it have more ghosts, but efficiency either } - if (GetFUsed( - (*vSFlag)[(*vStsHitsUnused)[first_trip.GetLHit()].f] - | (*vSFlagB)[(*vStsHitsUnused)[first_trip.GetLHit()].b])) - continue; - curr_tr.Momentum = 0.f; - curr_tr.chi2 = 0.f; - curr_tr.Lengtha = 0; - curr_tr.ista = 0; + // curr_tr.Momentum = 0.f; + curr_tr.chi2 = 0.f; + // curr_tr.Lengtha = 0; + curr_tr.ista = 0; (curr_tr).StsHits[0] = ((*RealIHitP)[first_trip.GetLHit()]); @@ -2458,8 +2482,6 @@ void L1Algo::CATrackFinder() { best_chi2 = curr_chi2; best_L = curr_L; - // cout<<istaF<<" istaF"<<endl; - CAFindTrack( istaF, best_tr, @@ -2640,17 +2662,19 @@ void L1Algo::CATrackFinder() { L1HitPoint tempPoint = CreateHitPoint( hit, 0); //TODO take number of station from hit - float xcoor = tempPoint.X(); - float ycoor = tempPoint.Y(); + float xcoor, ycoor = 0; + L1Station stah = vStations[0]; + StripsToCoor(tempPoint.U(), tempPoint.V(), xcoor, ycoor, stah); float zcoor = tempPoint.Z(); + float timeFlight = sqrt(xcoor * xcoor + ycoor * ycoor + zcoor * zcoor) / 30.f; // c = 30[cm/ns] sumTime += (hit.t_reco - timeFlight); } - t.NHits = tr.NHits; - t.Momentum = tr.Momentum; + t.NHits = tr.NHits; + // t.Momentum = tr.Momentum; t.fTrackTime = sumTime / t.NHits; vTracks_local[num_thread][SavedCand[num_thread]] = (t); @@ -2749,7 +2773,7 @@ void L1Algo::CATrackFinder() { // fL1Pulls->Build(1); // #endif #ifdef COUNTERS - stat_nHits[isec] += vStsHitsUnused->Size(); + // stat_nHits[isec] += (vStsHitsUnused*)->Size(); cout << "iter = " << isec << endl; cout << " NSinglets = " << stat_nSinglets[isec] / stat_N << endl; @@ -2804,40 +2828,39 @@ void L1Algo::CATrackFinder() { #if 0 - static long int NTimes =0, NHits=0, HitSize =0, NStrips=0, StripSize =0, NStripsB=0, StripSizeB =0, - NDup=0, DupSize=0, NTrip=0, TripSize=0, NBranches=0, BranchSize=0, NTracks=0, TrackSize=0 ; - - NTimes++; - NHits += vStsHitsUnused->size(); - HitSize += vStsHitsUnused->size()*sizeof(L1StsHit); - NStrips+= vStsStrips.size(); - StripSize += vStsStrips.size()*sizeof(fscal) + (*vSFlag).size()*sizeof(unsigned char); - NStripsB+= (*vSFlagB).size(); - StripSizeB += vStsStripsB.size()*sizeof(fscal) + (*vSFlagB).size()*sizeof(unsigned char); - NDup += stat_max_n_dup; - DupSize += stat_max_n_dup*sizeof(/*short*/ int); - NTrip += stat_max_n_trip; - TripSize += stat_max_trip_size; - - NBranches += stat_max_n_branches; - BranchSize += stat_max_BranchSize; - NTracks += vTracks.size(); - TrackSize += sizeof(L1Track)*vTracks.size() + sizeof(THitI)*vRecoHits.size(); - int k = 1024*NTimes; - - cout<<"L1 Event size: \n" - <<HitSize/k<<"kB for "<<NHits/NTimes<<" hits, \n" - <<StripSize/k<<"kB for "<<NStrips/NTimes<<" strips, \n" - <<StripSizeB/k<<"kB for "<<NStripsB/NTimes<<" stripsB, \n" - <<DupSize/k<<"kB for "<<NDup/NTimes<<" doublets, \n" - <<TripSize/k<<"kB for "<<NTrip/NTimes<<" triplets\n" - <<BranchSize/k<<"kB for "<<NBranches/NTimes<<" branches, \n" - <<TrackSize/k<<"kB for "<<NTracks/NTimes<<" tracks. "<<endl; - cout<<" L1 total event size = " - <<( HitSize + StripSize + StripSizeB + DupSize + TripSize + BranchSize + TrackSize )/k - <<" Kb"<<endl; + static long int NTimes =0, NHits=0, HitSize =0, NStrips=0, StripSize =0, NStripsB=0, StripSizeB =0, + NDup=0, DupSize=0, NTrip=0, TripSize=0, NBranches=0, BranchSize=0, NTracks=0, TrackSize=0 ; + + NTimes++; + NHits += vStsHitsUnused->size(); + HitSize += vStsHitsUnused->size()*sizeof(L1StsHit); + NStrips+= vStsStrips.size(); + StripSize += vStsStrips.size()*sizeof(fscal) + (*vSFlag).size()*sizeof(unsigned char); + NStripsB+= (*vSFlagB).size(); + StripSizeB += vStsStripsB.size()*sizeof(fscal) + (*vSFlagB).size()*sizeof(unsigned char); + NDup += stat_max_n_dup; + DupSize += stat_max_n_dup*sizeof(/*short*/ int); + NTrip += stat_max_n_trip; + TripSize += stat_max_trip_size; + + NBranches += stat_max_n_branches; + BranchSize += stat_max_BranchSize; + NTracks += vTracks.size(); + TrackSize += sizeof(L1Track)*vTracks.size() + sizeof(THitI)*vRecoHits.size(); + int k = 1024*NTimes; + + cout<<"L1 Event size: \n" + <<HitSize/k<<"kB for "<<NHits/NTimes<<" hits, \n" + <<StripSize/k<<"kB for "<<NStrips/NTimes<<" strips, \n" + <<StripSizeB/k<<"kB for "<<NStripsB/NTimes<<" stripsB, \n" + <<DupSize/k<<"kB for "<<NDup/NTimes<<" doublets, \n" + <<TripSize/k<<"kB for "<<NTrip/NTimes<<" triplets\n" + <<BranchSize/k<<"kB for "<<NBranches/NTimes<<" branches, \n" + <<TrackSize/k<<"kB for "<<NTracks/NTimes<<" tracks. "<<endl; + cout<<" L1 total event size = " + <<( HitSize + StripSize + StripSizeB + DupSize + TripSize + BranchSize + TrackSize )/k + <<" Kb"<<endl; #endif // 0 - //cout << "===> ... CA Track Finder " << endl << endl; #endif #ifdef DRAW @@ -2868,13 +2891,13 @@ void L1Algo::CATrackFinder() { /** ************************************************************* - * * - * The routine performs recursive search for tracks * - * * - * I. Kisel 06.03.05 * - * I.Kulakov 2012 * - * * - ****************************************************************/ + * * + * The routine performs recursive search for tracks * + * * + * I. Kisel 06.03.05 * + * I.Kulakov 2012 * + * * + ****************************************************************/ inline void L1Algo::CAFindTrack(int ista, L1Branch& best_tr, @@ -2955,11 +2978,11 @@ inline void L1Algo::CAFindTrack(int ista, unsigned int Thread = 0; unsigned int Triplet = 0; unsigned int Location = 0; - int N_neighbour = (curr_trip->last_neighbour - curr_trip->first_neighbour); + int N_neighbour = (curr_trip->GetNNeighbours()); for (Tindex in = 0; in < N_neighbour; in++) { - Location = curr_trip->first_neighbour + in; + Location = curr_trip->GetFNeighbour() + in; // Location = curr_trip->neighbours[in]; // const fscal &qp2 = curr_trip->GetQp(); @@ -2973,12 +2996,19 @@ inline void L1Algo::CAFindTrack(int ista, const L1Triplet& new_trip = TripletsLocal1[Station][Thread][Triplet]; + if ((new_trip.GetMHit() != curr_trip->GetRHit())) continue; + if ((new_trip.GetLHit() != curr_trip->GetMHit())) continue; + const fscal& qp1 = curr_trip->GetQp(); const fscal& qp2 = new_trip.GetQp(); fscal dqp = fabs(qp1 - qp2); fscal Cqp = curr_trip->Cqp; Cqp += new_trip.Cqp; + if (!fmCBMmode) + if (dqp > PickNeighbour * Cqp) + continue; // bad neighbour // CHECKME why do we need recheck it?? (it really change result) + const fscal& tx1 = curr_trip->tx; const fscal& tx2 = new_trip.tx; fscal dtx = fabs(tx1 - tx2); @@ -2996,12 +3026,6 @@ inline void L1Algo::CAFindTrack(int ista, if (dtx > PickNeighbour * Ctx) continue; } - if ((new_trip.GetMHit() != curr_trip->GetRHit())) continue; - if ((new_trip.GetLHit() != curr_trip->GetMHit())) continue; - - if (!fmCBMmode) - if (dqp > PickNeighbour * Cqp) - continue; // bad neighbour // CHECKME why do we need recheck it?? (it really change result) if (GetFUsed((*vSFlag)[(*vStsHitsUnused)[new_trip.GetLHit()].f] | (*vSFlagB)[(*vStsHitsUnused)[new_trip.GetLHit()] diff --git a/reco/L1/L1Algo/L1HitArea.h b/reco/L1/L1Algo/L1HitArea.h index c5cd48c44612db349014df9cf450254e18c3d8ef..53802871834b1e5e2a8a46a9ed20dcf601cc5883 100644 --- a/reco/L1/L1Algo/L1HitArea.h +++ b/reco/L1/L1Algo/L1HitArea.h @@ -180,7 +180,7 @@ inline L1HitAreaTime::L1HitAreaTime(const L1Grid& grid, fIndYmin = (bTmin * fNy * fNz + bZmin * fNy + bYmin); - fGrid.GetBinBounds(fIndYmin, y, dy, z, dz, t, dt); + //fGrid.GetBinBounds(fIndYmin, y, dy, z, dz, t, dt); fIz = bZmin; @@ -249,4 +249,4 @@ inline bool L1HitAreaTime::GetNext(THitI& i) { return !yIndexOutOfRange; } -#endif \ No newline at end of file +#endif diff --git a/reco/L1/L1Algo/L1HitPoint.h b/reco/L1/L1Algo/L1HitPoint.h index 3cdb69516d6184806ff3b60bb4e4b3418a84d32f..6f58da2c028090b3fcdb6406f66473e516319edf 100644 --- a/reco/L1/L1Algo/L1HitPoint.h +++ b/reco/L1/L1Algo/L1HitPoint.h @@ -5,37 +5,36 @@ #if 1 struct L1HitPoint { L1HitPoint() - : x(0.f) - , y(0.f) - , dx(0.f) - , dy(0.f) - , dxy(0.f) - , u(0.f) + : // x(0.f) + // , y(0.f) + // , dx(0.f) + // , dy(0.f) + // , dxy(0.f) + u(0.f) , v(0.f) , du(0.f) , dv(0.f) , z(0.f) , time(0.f) , timeEr(2.9f) {}; - L1HitPoint(fscal x_, - fscal y_, - fscal dx_, - fscal dy_, - fscal dxy_, - fscal du_, - fscal dv_, - fscal z_, - fscal v_, - fscal u_, - float time_, - float /*timeEv1_*/ = 0, - float timeEr_ = 2.9f) - : x(x_) - , y(y_) - , dx(dx_) - , dy(dy_) - , dxy(dxy_) - , u(u_) + L1HitPoint( + // fscal dx_, + // fscal dy_, + // fscal dxy_, + fscal du_, + fscal dv_, + fscal z_, + fscal v_, + fscal u_, + float time_, + float /*timeEv1_*/ = 0, + float timeEr_ = 2.9f) + : // : x(x_) + // , y(y_) + // , dx(dx_) + // , dy(dy_) + // , dxy(dxy_) + u(u_) , v(v_) , du(du_) , dv(dv_) @@ -46,14 +45,14 @@ struct L1HitPoint { // L1HitPoint(fscal x_, fscal y_, fscal z_, fscal v_, fscal u_, fscal time_, unsigned short int n_ = 0): // x(x_), y(y_), z(z_), u(u_), v(v_), time(time_){}; - fscal Xs() const { return X() / Z(); } - fscal Ys() const { return Y() / Z(); } // value to sort hits by + // fscal Xs() const { return X() / Z(); } + // fscal Ys() const { return Y() / Z(); } // value to sort hits by - fscal X() const { return x; } - fscal Y() const { return y; } - fscal dX() const { return dx; } - fscal dY() const { return dy; } - fscal dXY() const { return dxy; } + // fscal X() const { return x; } + // fscal Y() const { return y; } + // fscal dX() const { return dx; } + // fscal dY() const { return dy; } + // fscal dXY() const { return dxy; } fscal dU() const { return du; } fscal dV() const { return dv; } fscal Z() const { return z; } @@ -61,30 +60,29 @@ struct L1HitPoint { fscal V() const { return v; } // unsigned short int N() const { return n; } // int GetSortIndex() const { return SortIndex; } - void SetX(fscal X1) { x = X1; } - void SetY(fscal Y1) { y = Y1; } + // void SetX(fscal X1) { x = X1; } + // void SetY(fscal Y1) { y = Y1; } void SetZ(fscal Z1) { z = Z1; } void SetU(fscal U1) { u = U1; } void SetV(fscal V1) { v = V1; } - void Set(fscal& x1, - const float& y1, - const float& dx1, - const float& dy1, - const float& xy1, - const float& z1, - const fscal& u1, - const fscal& v1, - const fscal& du1, - const fscal& dv1, - const float& time1, - float timeEr1) { - x = x1; - y = y1; - dx = dx1; - dy = dy1; - du = du1; - dxy = xy1; + void Set( + // const float& dx1, + // const float& dy1, + // const float& xy1, + const float& z1, + const fscal& u1, + const fscal& v1, + const fscal& du1, + const fscal& dv1, + const float& time1, + float timeEr1) { + // x = x1; + // y = y1; + // dx = dx1; + // dy = dy1; + du = du1; + // dxy = xy1; dv = dv1; z = z1; u = u1; @@ -94,7 +92,8 @@ struct L1HitPoint { } private: - float x, y, dx, dy, dxy, u, v, du, dv; + // x, y, + float u, v, du, dv; float z; // TODO: may be we should use iz // x\u, v - front and back strips; x, y, z - coordinates of hits @@ -149,8 +148,6 @@ private: unsigned short int z; // TODO: may be we should use iz unsigned short int u, v; // x\u, v - front and back strips; x, y, z - coordinates of hits - - unsigned short int n; // number of event }; #endif diff --git a/reco/L1/L1Algo/L1HitsSortHelper.cxx b/reco/L1/L1Algo/L1HitsSortHelper.cxx index 3472355de341ef8480ef712748f9869fa7540e61..7229e945b5428d6827c72e2aa1f1edc2e0fc8e6a 100644 --- a/reco/L1/L1Algo/L1HitsSortHelper.cxx +++ b/reco/L1/L1Algo/L1HitsSortHelper.cxx @@ -29,14 +29,16 @@ L1HitsSortHelper::L1HitsSortHelper(vector<L1StsHit>& hits, L1_ASSERT(hits.size() == points.size(), hits.size() << " " << points.size()); const int NHits = fnDontUsedHits; fD.resize(NHits); + //float x,y=0; for (int iS = 0; iS < fNStations; ++iS) for (THitI i = fStsHitsUnusedStartIndex[iS]; i < fStsHitsUnusedStopIndex[iS]; i++) { - fD[i].h = &(hits[i]); - fD[i].p = &(points[i]); - fD[i].i = indices[i]; - fD[i].bin = fGrid[iS].GetBinBounded(fD[i].p->Xs(), fD[i].p->Ys()); + fD[i].h = &(hits[i]); + fD[i].p = &(points[i]); + fD[i].i = indices[i]; + // StripsToCoor(fD[i].p->U(),fD[i].p->V(), x, y, vStations[iS]); + // fD[i].bin = fGrid[iS].GetBinBounded(x[0], y[0]); } } diff --git a/reco/L1/L1Algo/L1HitsSortHelper.h b/reco/L1/L1Algo/L1HitsSortHelper.h index bc5c2af85c4d2c3d598ae2845abb4644d960e9da..d53c0d198e1188ef01d87e17586c1c9184d4ad79 100644 --- a/reco/L1/L1Algo/L1HitsSortHelper.h +++ b/reco/L1/L1Algo/L1HitsSortHelper.h @@ -17,7 +17,7 @@ struct L1HitsSortHelperData { static bool compare(const L1HitsSortHelperData& a, const L1HitsSortHelperData& b) { - return a.bin < b.bin || (a.bin == b.bin && a.p->Ys() < b.p->Ys()); + return a.bin < b.bin || (a.bin == b.bin && a.p->V() < b.p->V()); } }; diff --git a/reco/L1/L1Algo/L1Strip.h b/reco/L1/L1Algo/L1Strip.h index f6a57ac1a3b8e21e280c10dd387c4c8a43d6b8d3..0ae97574f04d3e9666b4b41322b12ec2a9cdb6b0 100644 --- a/reco/L1/L1Algo/L1Strip.h +++ b/reco/L1/L1Algo/L1Strip.h @@ -25,36 +25,6 @@ struct L1Strip { // unsigned short int n; // number of event }; -struct L1StripSelectTracks { - - L1StripSelectTracks() - : Cand(-1) -#ifdef _OPENMP - , Occupied() -#endif - { -#ifdef _OPENMP - omp_init_lock(&Occupied); -#endif - // Candidates.resize(70); - // Candidates2.resize(70); - // Cand = -1; - } - - ~L1StripSelectTracks() { -#ifdef _OPENMP - omp_destroy_lock(&Occupied); -#endif - } - - // L1Vector <L1Branch*> Candidates; - // L1Vector <int> Candidates2; - int Cand; -#ifdef _OPENMP - omp_lock_t Occupied; -#endif -}; - typedef unsigned /*short*/ int TStripI; // strip index type #endif diff --git a/reco/L1/L1Algo/L1StsHit.h b/reco/L1/L1Algo/L1StsHit.h index db32f1908153bd023c773c8c21d123817dadf548..54b6061b7ab2c28a5c0e854de118724af0717c78 100644 --- a/reco/L1/L1Algo/L1StsHit.h +++ b/reco/L1/L1Algo/L1StsHit.h @@ -11,49 +11,22 @@ typedef unsigned short int TZPosI; // strip z-coor index type class L1StsHit { public: + // float dx, dy, dxy; TStripI f, b; // front and back strip indices - TZPosI iz; // index of z coor. in L1Algo::vStsZPos - - float dx, dy, dxy; float du, dv; - bool used; float t_reco; float t_er; - int ista; - // int track, n; - float x, y; - - - L1StsHit() - : f(0) - , b(0) - , iz(0) - , dx(0.) - , dy(0.) - , dxy(0.) - , du(0.) - , dv(0.) - , used(false) - , t_reco(0.f) - , t_er(0.) - , ista(-1) - , x(0.) - , y(0.) {} + // int ista; + //int track, n; + // float x, y; + + + TZPosI iz; // index of z coor. in L1Algo::vStsZPos + + + L1StsHit() : f(0), b(0), du(0.), dv(0.), t_reco(0.f), t_er(0.), iz(0) {} L1StsHit(L1StsHit& h, /*short*/ int sh, /*short*/ int shB) - : f(h.f + sh) - , b(h.b + shB) - , iz(0) - , dx(0.) - , dy(0.) - , dxy(0.) - , du(0.) - , dv(0.) - , used(false) - , t_reco(0.f) - , t_er(0.) - , ista(-1) - , x(0.) - , y(0.) {} + : f(h.f + sh), b(h.b + shB), du(0.), dv(0.), t_reco(0.f), t_er(0.), iz(0) {} }; #endif diff --git a/reco/L1/L1Algo/L1TrackFitter.cxx b/reco/L1/L1Algo/L1TrackFitter.cxx index d80a76db92482e1771b2a3bbe3fbfc9925d9d0e0..1799c598569c53b5c704384d0ff5670df5f2deae 100644 --- a/reco/L1/L1Algo/L1TrackFitter.cxx +++ b/reco/L1/L1Algo/L1TrackFitter.cxx @@ -400,13 +400,10 @@ void L1Algo::L1KFTrackFitter() { w[ista][iVec] = 1.; if (ista > NMvdStations) w_time[ista][iVec] = 1.; - u[ista][iVec] = (*vStsStrips)[hit.f]; - v[ista][iVec] = (*vStsStripsB)[hit.b]; - d_x[ista][iVec] = hit.dx; - d_y[ista][iVec] = hit.dy; - d_u[ista][iVec] = hit.du; - d_v[ista][iVec] = hit.dv; - d_xy[ista][iVec] = hit.dxy; + u[ista][iVec] = (*vStsStrips)[hit.f]; + v[ista][iVec] = (*vStsStripsB)[hit.b]; + d_u[ista][iVec] = hit.du; + d_v[ista][iVec] = hit.dv; StripsToCoor(u[ista], v[ista], x_temp, y_temp, sta[ista]); x[ista][iVec] = x_temp[iVec]; y[ista][iVec] = y_temp[iVec]; @@ -414,6 +411,9 @@ void L1Algo::L1KFTrackFitter() { timeEr[ista][iVec] = hit.t_er; z[ista][iVec] = (*vStsZPos)[hit.iz]; sta[ista].fieldSlice.GetFieldValue(x[ista], y[ista], fB_temp); + dUdV_to_dX(d_u[ista], d_v[ista], d_x[ista], sta[ista]); + dUdV_to_dY(d_u[ista], d_v[ista], d_y[ista], sta[ista]); + dUdV_to_dXdY(d_u[ista], d_v[ista], d_xy[ista], sta[ista]); fB[ista].x[iVec] = fB_temp.x[iVec]; fB[ista].y[iVec] = fB_temp.y[iVec]; fB[ista].z[iVec] = fB_temp.z[iVec]; @@ -857,11 +857,11 @@ void L1Algo::L1KFTrackFitterMuch() { y[ista][iVec] = y_temp[iVec]; time[ista][iVec] = hit.t_reco; timeEr[ista][iVec] = hit.t_er; - d_x[ista][iVec] = hit.dx; - d_y[ista][iVec] = hit.dy; d_u[ista][iVec] = hit.du; d_v[ista][iVec] = hit.dv; - d_xy[ista][iVec] = hit.dxy; + dUdV_to_dX(d_u[ista], d_v[ista], d_x[ista], sta[ista]); + dUdV_to_dY(d_u[ista], d_v[ista], d_y[ista], sta[ista]); + dUdV_to_dXdY(d_u[ista], d_v[ista], d_xy[ista], sta[ista]); // mom[ista][iVec] = hit.p; z[ista][iVec] = (*vStsZPos)[hit.iz]; sta[ista].fieldSlice.GetFieldValue(x[ista], y[ista], fB_temp); diff --git a/reco/L1/L1Algo/L1TrackPar.h b/reco/L1/L1Algo/L1TrackPar.h index d32a643483698d5d6b3e750f4919f4014f69fcdf..6ce2baebdb5247c821f3e4b5c872ec6893a9b5a7 100644 --- a/reco/L1/L1Algo/L1TrackPar.h +++ b/reco/L1/L1Algo/L1TrackPar.h @@ -7,9 +7,7 @@ class L1TrackPar { public: fvec x, y, tx, ty, qp, z, t, C00, C10, C11, C20, C21, C22, C30, C31, C32, C33, - C40, C41, C42, C43, C44, C50, C51, C52, C53, C54, C55, chi2, NDF, time, - time1, t_er; - fvec n; + C40, C41, C42, C43, C44, C50, C51, C52, C53, C54, C55, chi2, NDF; L1TrackPar() @@ -42,11 +40,7 @@ public: , C54(0) , C55(0) , chi2(0) - , NDF(0) - , time(0) - , time1(0) - , t_er(0) - , n(0) {}; + , NDF(0) {}; L1TrackPar(double* T, double* C) : x(T[0]) , y(T[1]) @@ -79,11 +73,7 @@ public: , C54(C[19]) , C55(C[20]) , chi2(0) - , NDF(0) - , time(0) - , time1(0) - , t_er(0) - , n(0) {}; + , NDF(0) {}; void SetOneEntry(const int i0, const L1TrackPar& T1, const int i1); @@ -159,12 +149,8 @@ L1TrackPar::SetOneEntry(const int i0, const L1TrackPar& T1, const int i1) { C54[i0] = T1.C54[i1]; C55[i0] = T1.C55[i1]; - chi2[i0] = T1.chi2[i1]; - NDF[i0] = T1.NDF[i1]; - time[i0] = T1.time[i1]; - n[i0] = T1.n[i1]; - time1[i0] = T1.time1[i1]; - t_er[i0] = T1.t_er[i1]; + chi2[i0] = T1.chi2[i1]; + NDF[i0] = T1.NDF[i1]; } // SetOneEntry #endif diff --git a/reco/L1/L1Algo/L1Triplet.h b/reco/L1/L1Algo/L1Triplet.h index 633da1081a00caace34b235e3528b845c3bcda27..df3f4d6b53570700e85192ed3dc4a8924ba901a5 100644 --- a/reco/L1/L1Algo/L1Triplet.h +++ b/reco/L1/L1Algo/L1Triplet.h @@ -12,15 +12,19 @@ public: // int loc; private: - THitI w0; // left hit (16b) index in vStsHits array - THitI w1; // middle hit(16b) - THitI w2; // right hit(16b) - // unsigned char b0; // chi2(5b) + level(3b) + unsigned int first_neighbour; + char last_neighbour; unsigned char bl; // level - fscal b1; // qp (8b) + unsigned char st; // staL (4b), staM-1-staL (2b), staR-2-staL (2b) + fscal b1; // qp (8b) fscal chi2double; + THitI w0; // left hit (16b) index in vStsHits array + THitI w1; // middle hit(16b) + THitI w2; // right hit(16b) + // unsigned char b0; // chi2(5b) + level(3b) + public: // std::vector<unsigned int> neighbours; @@ -61,27 +65,24 @@ public: fscal Cqp; fscal tx, ty, Ctx, Cty; - // fscal time; - // fscal n; - unsigned int first_neighbour; - unsigned int last_neighbour; L1Triplet() - : w0() - , w1() - , w2() + : first_neighbour(0) + , last_neighbour(0) , bl() - , b1(0) , st() + , b1(0) , chi2double(0) + , w0() + , w1() + , w2() + , Cqp(0) , tx(0) , ty(0) , Ctx(0) - , Cty(0) - , first_neighbour(0) - , last_neighbour(0) {}; + , Cty(0) {}; void Set(unsigned int iHitL, unsigned int iHitM, @@ -114,9 +115,14 @@ public: void SetLevel(unsigned char Level) { bl = Level; } + THitI GetLHit() const { return w0; } THitI GetMHit() const { return w1; } THitI GetRHit() const { return w2; } + char GetNNeighbours() const { return last_neighbour; } + void SetNNeighbours(unsigned char n) { last_neighbour = n; } + unsigned int GetFNeighbour() const { return first_neighbour; } + void SetFNeighbour(unsigned int n) { first_neighbour = n; } // unsigned int GetFirstNeighbour() const { // return w1;