diff --git a/reco/L1/L1Algo/L1CATrackFinder.cxx b/reco/L1/L1Algo/L1CATrackFinder.cxx index 3035054979bebd87dd74c78365bc7ee0babf9099..010f917936c6018a16e8c07f7f3108f773a81b32 100644 --- a/reco/L1/L1Algo/L1CATrackFinder.cxx +++ b/reco/L1/L1Algo/L1CATrackFinder.cxx @@ -578,16 +578,17 @@ inline void L1Algo::findTripletsStep0( // input L1Fit fit; fit.SetParticleMass(fDefaultMass); + n3 = 0; Tindex n3_V = 0, n3_4 = 0; - T_3.push_back(L1TrackPar_0); - u_front_3.push_back(fvec::Zero()); - u_back_3.push_back(fvec::Zero()); - z_Pos_3.push_back(fvec::Zero()); - du_.push_back(fvec::One()); - dv_.push_back(fvec::One()); - timeR.push_back(fvec::Zero()); - timeER.push_back(fvec::One()); + T_3.reset(1, L1TrackPar_0); + u_front_3.reset(1, fvec::Zero()); + u_back_3.reset(1, fvec::Zero()); + z_Pos_3.reset(1, fvec::Zero()); + du_.reset(1, fvec::One()); + dv_.reset(1, fvec::One()); + timeR.reset(1, fvec::Zero()); + timeER.reset(1, fvec::One()); assert(istar < fParameters.GetNstationsActive()); //TODO SG!!! check if it is needed @@ -765,9 +766,9 @@ inline void L1Algo::findTripletsStep0( // input (sqrt(Pick_r22 * (T2.C11 + stam.XYInfo.C11)) + fMaxDZ * abs(T2.ty))[i2_4] * iz, time, sqrt(timeError) * 5); - L1HitIndex_t irh = 0; - L1HitIndex_t Ntriplets = 0; - int irh1 = -1; + L1HitIndex_t irh = 0; + L1HitIndex_t doubletNtriplets = 0; + int irh1 = -1; while (true) { if (fParameters.DevIsIgnoreHitSearchAreas()) { irh1++; @@ -869,7 +870,26 @@ inline void L1Algo::findTripletsStep0( // input continue; // chi2_triplet < CHI2_CUT } +#ifndef FAST_CODE +//TODO: optimise triplet portion limit and put a warning +// assert(doubletNtriplets < fParameters.GetMaxTripletPerDoublets()); +#endif // FAST_CODE + + if (doubletNtriplets >= fParameters.GetMaxTripletPerDoublets()) { + cout << "L1: GetMaxTripletPerDoublets==" << fParameters.GetMaxTripletPerDoublets() + << " reached in findTripletsStep0()" << endl; + // reject already created triplets for this doublet + n3 = n3 - doubletNtriplets; + n3_V = n3 / fvec::size(); + n3_4 = n3 % fvec::size(); + //assert(0); + break; + } + // pack triplet + + doubletNtriplets++; + L1TrackPar& T3 = T_3[n3_V]; hitsl_3.push_back(hitsl_2[i2_4]); @@ -889,12 +909,10 @@ inline void L1Algo::findTripletsStep0( // input timeER[n3_V][n3_4] = hitr.timeEr; n3++; - Ntriplets++; - n3_V = n3 / fvec::size(); n3_4 = n3 % fvec::size(); - if (!n3_4) { + if (0 == n3_4) { T_3.push_back(L1TrackPar_0); u_front_3.push_back(fvec::Zero()); u_back_3.push_back(fvec::Zero()); @@ -906,29 +924,7 @@ inline void L1Algo::findTripletsStep0( // input timeR.push_back(fvec::Zero()); timeER.push_back(fvec::Zero()); } - -#ifndef FAST_CODE -//TODO: optimise triplet portion limit and put a warning -// assert(Ntriplets < fParameters.GetMaxTripletPerDoublets()); -#endif // FAST_CODE - if (Ntriplets >= fParameters.GetMaxTripletPerDoublets()) { - - n3 = n3 - Ntriplets; - - T_3.reset(n3 / fvec::size()); - u_front_3.reset(n3 / fvec::size()); - u_back_3.reset(n3 / fvec::size()); - z_Pos_3.reset(n3 / fvec::size()); - du_.reset(n3 / fvec::size()); - dv_.reset(n3 / fvec::size()); - timeR.reset(n3 / fvec::size()); - timeER.reset(n3 / fvec::size()); - cout << "L1: GetMaxTripletPerDoublets==" << fParameters.GetMaxTripletPerDoublets() - << " reached in findTripletsStep0()" << endl; - //assert(0); - break; - } - } + } // search area } // i2_4 } // i2_V @@ -1553,15 +1549,15 @@ inline void L1Algo::TripletsStaPort( /// creates triplets: int Thread = 0; #endif - L1Vector<L1TrackPar>& T_3 = fT_3[Thread]; - L1Vector<L1HitIndex_t>& hitsl_3 = fhitsl_3[Thread]; - L1Vector<L1HitIndex_t>& hitsm_3 = fhitsm_3[Thread]; - L1Vector<L1HitIndex_t>& hitsr_3 = fhitsr_3[Thread]; - L1Vector<fvec>& u_front3 = fu_front3[Thread]; - L1Vector<fvec>& u_back3 = fu_back3[Thread]; - L1Vector<fvec>& z_pos3 = fz_pos3[Thread]; - L1Vector<fvec>& timeR = fTimeR[Thread]; - L1Vector<fvec>& timeER = fTimeER[Thread]; + L1Vector<L1TrackPar>& T_3 = fT_3[Thread]; + L1Vector<L1HitIndex_t>& hitsl_3 = fhitsl_3[Thread]; + L1Vector<L1HitIndex_t>& hitsm_3 = fhitsm_3[Thread]; + L1Vector<L1HitIndex_t>& hitsr_3 = fhitsr_3[Thread]; + L1Vector<fvec>& u_front3 = fu_front3[Thread]; + L1Vector<fvec>& u_back3 = fu_back3[Thread]; + L1Vector<fvec>& z_pos3 = fz_pos3[Thread]; + L1Vector<fvec>& timeR = fTimeR[Thread]; + L1Vector<fvec>& timeER = fTimeER[Thread]; // L1Vector<fvec>& dx3 = dx[Thread]; // L1Vector<fvec>& dy3 = dy[Thread]; L1Vector<fvec>& du3 = du[Thread];