120 for (
int i1_V = 0; i1_V < n1_V; i1_V++) {
127 fvec& u = u_front[i1_V];
128 fvec&
v = u_back[i1_V];
130 fvec zl = zPos[i1_V];
139 int istac = istal / 2;
146 if (istac != istal) {
147 fld0.
Set(l_B, stal.
z, centB, stac.
z, targB,
targZ);
155 if (istac != istal) {
156 fld1.
Set(m_B, zstam, l_B, zstal, centB, zstac);
158 fld1.
Set(m_B, zstam, l_B, zstal, targB,
targZ);
165 fld1.
Set(r_B, zstar, m_B, zstam, l_B, zstal);
176 T.C30 = T.C31 = T.C32 = 0;
177 T.C40 = T.C41 = T.C42 = T.C43 = 0;
182#ifndef BEGIN_FROM_TARGET
192 fvec& du = du_front[i1_V];
193 fvec& dv = du_back[i1_V];
199 fvec det = c_f * s_b - s_f * c_b;
206 T.C00 = (s_b * s_b * du * du + s_f * s_f * dv * dv) / det;
207 T.C10 = -(s_b * c_b * du * du + s_f * c_f * dv * dv) / det;
208 T.C11 = (c_b * c_b * du * du + c_f * c_f * dv * dv) / det;
215 fvec eX, eY, J04, J14;
234 T.C00 = TargetXYInfo.C00;
235 T.C10 = TargetXYInfo.C10;
236 T.C11 = TargetXYInfo.C11;
240 for (
int ista = 0; ista <= istal - 1; ista++) {
409 vector<THitI>& hitsm_2,
412 const vector<bool>& mrDuplets,
416 vector<THitI>& hitsl_3,
417 vector<THitI>& hitsm_3,
418 vector<THitI>& hitsr_3,
432 int n3_V = 0, n3_4 = 0;
434 T_3.push_back(L1TrackPar_0);
435 u_front_3.push_back(fvec_0);
436 u_back_3.push_back(fvec_0);
437 z_Pos_3.push_back(fvec_0);
440 du_front_3->push_back(fvec_0);
441 du_back_3->push_back(fvec_0);
450 for (
int i2 = 0; i2 < n2;) {
458 fvec du_front_2, du_back_2;
461 for (; n2_4 <
fvecLen && i2 < n2; n2_4++, i2++) {
463 if (!mrDuplets[hitsm_2[i2]]) {
469 const int i1 = i1_2[i2];
478 const int imh = hitsm_2[i2];
480 u_front_2[n2_4] = hitm.
U();
481 u_back_2[n2_4] = hitm.
V();
482 zPos_2[n2_4] = hitm.
Z();
483 du_front_2[n2_4] = hitm.
DU() * hitm.
DU();
484 du_back_2[n2_4] = hitm.
DV() * hitm.
DV();
486 hitsl_2[n2_4] = hitsl_1[i1];
487 hitsm_2_tmp[n2_4] = hitsm_2[i2];
520 for (
int i2_4 = 0; i2_4 < n2_4; i2_4++) {
523 if (T2.
C00[i2_4] < 0 || T2.
C11[i2_4] < 0 || T2.
C22[i2_4] < 0 || T2.
C33[i2_4] < 0 || T2.
C44[i2_4] < 0)
530#ifdef DO_NOT_SELECT_TRIPLETS
531 if (
isec == TRACKS_FROM_TRIPLETS_ITERATION)
532 Pick_r22 = Pick_r2 + 1;
535 const fscal iz = 1 / T2.
z[i2_4];
544 const fscal zr = hitr.
Z();
545 const fscal yr = hitr.
Y();
551 const fscal dy_est2 =
554 const fscal dy = yr - y[i2_4];
555 const fscal dy2 = dy * dy;
556 if (dy2 > dy_est2 && dy < 0)
567 const fscal dx = hitr.
X() - x[i2_4];
568 if (dx * dx > dx_est2)
575 fvec du2 = hitr.
DU(), dv2 = hitr.
DV();
582#ifdef DO_NOT_SELECT_TRIPLETS
583 if (
isec != TRACKS_FROM_TRIPLETS_ITERATION)
591 hitsl_3.push_back(hitsl_2[i2_4]);
592 hitsm_3.push_back(hitsm_2_tmp[i2_4]);
593 hitsr_3.push_back(irh);
596 u_front_3[n3_V][n3_4] = hitr.
U();
597 u_back_3[n3_V][n3_4] = hitr.
V();
598 z_Pos_3[n3_V][n3_4] = zr;
601 (*du_front_3)[n3_V][n3_4] = hitr.
DU() * hitr.
DU();
602 (*du_back_3)[n3_V][n3_4] = hitr.
DV() * hitr.
DV();
611 T_3.push_back(L1TrackPar_0);
612 u_front_3.push_back(fvec_0);
613 u_back_3.push_back(fvec_0);
614 z_Pos_3.push_back(fvec_0);
617 du_front_3->push_back(fvec_0);
618 du_back_3->push_back(fvec_0);
663 vector<THitI>& hitsl_3,
664 vector<THitI>& hitsm_3,
665 vector<THitI>& hitsr_3,
669 cout <<
" !!! L1Algo::f32 should not be called !!! " << endl;
675 int ista[NHits] = {istal, istal + 1, istal + 2};
678 for (
int is = 0; is < NHits; is++) {
679 sta[is] = vStations[ista[is]];
682 for (
int i3 = 0; i3 < n3; i3++) {
694 fscal u[NHits],
v[NHits], x[NHits], y[NHits], z[NHits];
695 fvec du2[NHits], dv2[NHits], ww = 1.;
696 for (
int ih = 0; ih < NHits; ih++) {
709 const fvec vINF = .1;
713 fvec dz01 = 1. / (z[1] - z[0]);
714 T.tx = (x[1] - x[0]) * dz01;
715 T.ty = (y[1] - y[0]) * dz01;
726 T.C30 = T.C31 = T.C32 = 0;
727 T.C40 = T.C41 = T.C42 = T.C43 = 0;
728 T.C22 = T.C33 = vINF;
735 fvec tx[3] = {(x[1] - x[0]) / (z[1] - z[0]), (x[2] - x[0]) / (z[2] - z[0]), (x[2] - x[1]) / (z[2] - z[1])};
736 fvec ty[3] = {(y[1] - y[0]) / (z[1] - z[0]), (y[2] - y[0]) / (z[2] - z[0]), (y[2] - y[1]) / (z[2] - z[1])};
737 for (
int ih = 0; ih < NHits; ih++) {
738 fvec dz = (sta[ih].
z - z[ih]);
741 fld.Set(B[0], sta[0].z, B[1], sta[1].z, B[2], sta[2].z);
744 for (
int ih = 1; ih < NHits; ih++) {
760 L1AddMaterial(T, sta[ih].materialInfo, T.qp, 1, 0.000511f * 0.000511f);
769 L1Filter(T, sta[ih].frontInfo, u[ih], ww, &du2[ih]);
770 L1Filter(T, sta[ih].backInfo,
v[ih], ww, &dv2[ih]);
774 for (
int iiter = 0; iiter < nIterations; iiter++) {
791 fvec det = c_f * s_b - s_f * c_b;
793 fvec du22 = du2[ih], dv22 = dv2[ih];
796 T.C00 = (s_b * s_b * du22 + s_f * s_f * dv22) / det;
797 T.C10 = -(s_b * c_b * du22 + s_f * c_f * dv22) / det;
798 T.C11 = (c_b * c_b * du22 + c_f * c_f * dv22) / det;
802 T.C30 = T.C31 = T.C32 = 0;
803 T.C40 = T.C41 = T.C42 = T.C43 = 0;
804 T.C22 = T.C33 = vINF;
809 for (ih = NHits - 2; ih >= 0; ih--) {
824 L1AddMaterial(T, sta[ih].materialInfo, T.qp, 1, 0.000511f * 0.000511f);
832 L1Filter(T, sta[ih].frontInfo, u[ih], ww, &du2[ih]);
833 L1Filter(T, sta[ih].backInfo,
v[ih], ww, &dv2[ih]);
850 det = c_f * s_b - s_f * c_b;
856 T.C00 = (s_b * s_b * du22 + s_f * s_f * dv22) / det;
857 T.C10 = -(s_b * c_b * du22 + s_f * c_f * dv22) / det;
858 T.C11 = (c_b * c_b * du22 + c_f * c_f * dv22) / det;
862 T.C30 = T.C31 = T.C32 = 0;
863 T.C40 = T.C41 = T.C42 = T.C43 = 0;
864 T.C22 = T.C33 = vINF;
869 for (ih = 1; ih < NHits; ih++) {
884 L1AddMaterial(T, sta[ih].materialInfo, T.qp, 1, 0.000511f * 0.000511f);
892 L1Filter(T, sta[ih].frontInfo, u[ih], ww, &du2[ih]);
893 L1Filter(T, sta[ih].backInfo,
v[ih], ww, &dv2[ih]);
1219 unsigned int& nstaltriplets,
1225 unsigned int* portionStopIndex,
1226 vector<THitI>& i1_2,
1227 vector<THitI>& hitsm_2,
1229 const vector<bool>& mrDuplets,
1234 std::vector<L1Triplet>* vTriplets_part,
1235 unsigned int* TripStartIndexH,
1236 unsigned int* TripStopIndexH)
1253 vector<THitI> hitsl_3, hitsm_3, hitsr_3;
1273 vStsHits_r, stam, star,
1275 istam, istar, vStsHits_m, T_1, fld_1, hitsl_1,
1281 n3, T_3, hitsl_3, hitsm_3, hitsr_3, u_front3, u_back3, z_pos3, &du_front3, &du_back3
1286 for (
unsigned int i = 0;
i < hitsl_3.size();
i++)
1288 for (
unsigned int i = 0;
i < hitsm_3.size();
i++)
1290 for (
unsigned int i = 0;
i < hitsr_3.size();
i++)
1298 n3_V, star, u_front3, u_back3, z_pos3,
1300 T_3, &du_front3, &du_back3
1306#ifdef TRIP_PERFORMANCE
1310 for (
int i = 0;
i < n3;
i++) {
1313 THitI iHits[3] = {RealIHitL[hitsl_3[
i]], RealIHitM[hitsm_3[
i]], RealIHitR[hitsr_3[
i]]};
1315 if (fL1Eff_triplets->AddOne(iHits))
1316 fL1Pulls->AddOne(T_3[i_V], i_4, iHits[2]);
1318 fL1Eff_triplets->AddOne(iHits);
1321 fL1Eff_triplets2->AddOne(iHits);
1328 n3, istal, istam, istar, T_3, hitsl_3, hitsm_3, hitsr_3,
1330 nstaltriplets, vTriplets_part[istal], TripStartIndexH, TripStopIndexH);
1359 fL1Pulls = l1Pulls_;
1362#ifdef TRIP_PERFORMANCE
1364 fL1Eff_triplets = l1Eff_triplets_;
1365 fL1Eff_triplets->
Init();
1367 fL1Eff_triplets2 = l1Eff_triplets2_;
1368 fL1Eff_triplets2->
Init();
1370#ifdef DOUB_PERFORMANCE
1372 fL1Eff_doublets = l1Eff_doublets_;
1373 fL1Eff_doublets->
Init();
1384#if defined(XXX) || defined(COUNTERS)
1385 static unsigned int stat_N = 0;
1417 static unsigned int stat_nStartHits = 0;
1434 for (vector<unsigned char>::iterator is =
vSFlag.begin(); is !=
vSFlag.end(); ++is)
1436 for (vector<unsigned char>::iterator is =
vSFlagB.begin(); is !=
vSFlagB.end(); ++is)
1442 stat_max_trip_size = 0,
1444 stat_max_BranchSize = 0, stat_max_n_branches = 0;
1459 vector<L1StsHit> vStsDontUsedHits_B;
1461 vector<L1HitPoint> vStsDontUsedHitsxy_A;
1462 vector<L1HitPoint> vStsDontUsedHitsxy_B;
1465 std::vector<L1StsHit>* vStsHitsUnused_buf = &vStsDontUsedHits_A;
1468 std::vector<L1HitPoint>* vStsHitPointsUnused_buf = &vStsDontUsedHitsxy_A;
1470 vStsHitsUnused_buf->clear();
1471 vStsHitPointsUnused_buf->clear();
1472 vector<THitI> RealIHit_v;
1473 RealIHit_v.resize(
vStsHits.size());
1482 for (
int ista = 0; ista <
NStations; ista++) {
1489 vStsDontUsedHitsxy_B.push_back(p);
1499 vStsDontUsedHitsxy_B.push_back(p1);
1502 vStsDontUsedHits_B.push_back(hit);
1509 for (
int istal =
NStations - 1; istal >= 0; istal--) {
1519 float yStep = 0.5 / hitDensity;
1522 const float xStep = yStep * 3;
1524 for (
int iS = 0; iS <
NStations; iS++) {
1526 grid.
Create(-1, 1, -0.6, 0.6, xStep, yStep);
1538 for (
int j = 0; j < int(RealIHit_v.size()); ++j)
1544 gti[
"init "] = c_timerG;
1549 cout <<
" Begin " << endl;
1551 cout <<
" NStartHits = " << stat_nStartHits / stat_N << endl;
1564 unsigned int nSinglets = 0;
1574 for (
int iS = 0; iS <
NStations; iS++) {
1634 float SigmaTargetX = 0, SigmaTargetY = 0;
1638 targB = vtxFieldValue;
1641 SigmaTargetX = SigmaTargetY = 1.0;
1644 SigmaTargetX = SigmaTargetY = 5.0;
1649 SigmaTargetX = SigmaTargetY = 10;
1656 TargetXYInfo.C00 = SigmaTargetX * SigmaTargetX;
1657 TargetXYInfo.C10 = 0;
1658 TargetXYInfo.C11 = SigmaTargetY * SigmaTargetY;
1670 cout <<
" CATrackFinder: Error: Too many Stantions" << endl;
1674 vector<unsigned int> TripStartIndexH_v, TripStopIndexH_v;
1675 vector<unsigned int> TripStartIndexHG124_v, TripStopIndexHG124_v;
1676 vector<unsigned int> TripStartIndexHG134_v, TripStopIndexHG134_v;
1684 unsigned int *TripStartIndexH = &(TripStartIndexH_v[0]), *TripStopIndexH = &(TripStopIndexH_v[0]);
1685 unsigned int *TripStartIndexHG124 = &(TripStartIndexHG124_v[0]),
1686 *TripStopIndexHG124 = &(TripStopIndexHG124_v[0]);
1687 unsigned int *TripStartIndexHG134 = &(TripStartIndexHG134_v[0]),
1688 *TripStopIndexHG134 = &(TripStopIndexHG134_v[0]);
1692 TripStartIndexH[
i] = 0;
1693 TripStopIndexH[
i] = 0;
1694 TripStartIndexHG124[
i] = 0;
1695 TripStopIndexHG124[
i] = 0;
1696 TripStartIndexHG134[
i] = 0;
1697 TripStopIndexHG134[
i] = 0;
1712 for (
int istal =
NStations - 1; istal >= 0; istal--) {
1723 unsigned int ip = 0;
1729 int NHits_l_P = NHits_l /
Portion;
1731 for (
int ipp = 0; ipp < NHits_l_P; ipp++) {
1741 n_g1.push_back(NHits_l - NHits_l_P *
Portion);
1743 nSinglets += n_g1.back();
1746 portionStopIndex[istal] = ip;
1752 stat_nSinglets[
isec] += nSinglets;
1758 ti[
isec][
"init "] = c_timer;
1772 unsigned int nstaltriplets = 0;
1773 unsigned int nstaltripletsG124 = 0;
1774 unsigned int nstaltripletsG134 = 0;
1777 lmDuplets[istal].resize(NHitsSta);
1778 lmDupletsG[istal].resize(NHitsSta);
1779 for (
unsigned int ip = portionStopIndex[istal + 1]; ip < portionStopIndex[istal]; ip++) {
1783 vector<THitI> hitsm_2;
1792 istal, istal + 1, ip, n_g1, portionStopIndex,
1795 T_1, fld_1, hitsl_1,
1799 n_2, i1_2, hitsm_2);
1802 istal, istal + 1, istal + 2, nstaltriplets, T_1, fld_1, hitsl_1,
1804 n_2, portionStopIndex, i1_2, hitsm_2,
1806 lmDuplets[istal + 1],
1808 vTriplets_part, TripStartIndexH, TripStopIndexH);
1811 vector<THitI> hitsmG_2;
1812 vector<THitI> i1G_2;
1818 istal, istal + 2, ip, n_g1, portionStopIndex,
1820 TG_1, fldG_1, hitslG_1,
1824 nG_2, i1G_2, hitsmG_2);
1826 istal, istal + 1, istal + 3, nstaltripletsG124, T_1, fld_1, hitsl_1,
1828 n_2, portionStopIndex, i1_2, hitsm_2,
1830 lmDupletsG[istal + 1],
1832 vTripletsG124_part, TripStartIndexHG124, TripStopIndexHG124);
1834 istal, istal + 2, istal + 3, nstaltripletsG134, TG_1, fldG_1, hitslG_1,
1836 nG_2, portionStopIndex, i1G_2, hitsmG_2,
1838 lmDuplets[istal + 2],
1840 vTripletsG134_part, TripStartIndexHG134, TripStopIndexHG134);
1846 ti[
isec][
"tripl1"] = c_timer;
1870 tSize += vTriplets_part[istal].size();
1871 tSize += vTripletsG124_part[istal].size();
1872 tSize += vTripletsG134_part[istal].size();
1879 for (
unsigned int i = 0;
i < vTriplets_part[istal].size();
i++) {
1880 vTriplets.push_back(vTriplets_part[istal][
i]);
1882 for (
unsigned int i = 0;
i < vTripletsG124_part[istal].size();
i++)
1884 vTriplets.push_back(vTripletsG124_part[istal][
i]);
1886 for (
unsigned int i = 0;
i < vTripletsG134_part[istal].size();
i++) {
1887 vTriplets.push_back(vTripletsG134_part[istal][
i]);
1892 TripStopIndexH[
i] +=
TripStartIndex[istal] + TripStopIndexHG124[
i] - TripStartIndexHG124[
i]
1893 + TripStopIndexHG134[
i] - TripStartIndexHG134[
i];
1960 ti[
isec][
"cpTrls"] = c_timer;
1977 TripStartIndexH, TripStopIndexH, nlevels);
1980 ti[
isec][
"nghbrs"] = c_timer;
1999#ifdef TRACKS_FROM_TRIPLETS
2000 if (
isec == TRACKS_FROM_TRIPLETS_ITERATION)
2006 for (
int ilev =
NStations - 3; ilev >= min_level; ilev--) {
2007 vector<L1Branch> vtrackcandidate;
2008 vtrackcandidate.clear();
2011 int nlevel = (
NStations - 2) - ilev + 1;
2022 for (
int itrip = trip_first; itrip < trip_end; itrip++) {
2026#ifndef FIND_GAPED_TRACKS
2036#ifdef TRACKS_FROM_TRIPLETS
2037 if (
isec != TRACKS_FROM_TRIPLETS_ITERATION)
2062 unsigned char curr_L = 1;
2066 fscal best_chi2 = curr_chi2;
2067 unsigned char best_L = curr_L;
2069#ifdef TRACKS_FROM_TRIPLETS
2074 CAFindTrack(istaF, best_tr, best_L, best_chi2, curr_trip, curr_tr, curr_L, curr_chi2, NCalls);
2090 if (best_L < ilev + 2)
2092 if (best_L < min_level + 3)
2095 int ndf = best_L * 2 - 5;
2096 best_chi2 = best_chi2 / ndf;
2109#ifndef TRACKS_FROM_TRIPLETS
2117 && (best_chi2 > 5.0))
2127 vtrackcandidate.push_back(best_tr);
2141 vector<L1Branch*> vptrackcandidate;
2142 vptrackcandidate.clear();
2144 for (vector<L1Branch>::iterator trIt = vtrackcandidate.begin(); trIt != vtrackcandidate.end(); ++trIt) {
2146 vptrackcandidate.push_back(&(*trIt));
2156 for (vector<L1Branch*>::iterator trIt = vptrackcandidate.begin(); trIt != vptrackcandidate.end(); ++trIt) {
2164 for (vector<THitI>::iterator phIt = tr->
StsHits.begin(); phIt != tr->
StsHits.end(); ++phIt) {
2169#ifdef TRACKS_FROM_TRIPLETS
2170 if (
isec != TRACKS_FROM_TRIPLETS_ITERATION)
2194 for (vector<THitI>::iterator phitIt = tr->
StsHits.begin(); phitIt != tr->
StsHits.end(); ++phitIt) {
2196#ifdef TRACKS_FROM_TRIPLETS
2197 if (
isec != TRACKS_FROM_TRIPLETS_ITERATION)
2203#ifdef TRACKS_FROM_TRIPLETS
2204 if (
isec == TRACKS_FROM_TRIPLETS_ITERATION)
2212 for (
int i = 0;
i < 6;
i++)
2214 for (
int i = 0;
i < 15;
i++)
2219#ifdef TRACKS_FROM_TRIPLETS
2223 if (
isec == TRACKS_FROM_TRIPLETS_ITERATION)
2232 unsigned int Bsize = 0, nb = 0;
2233 for (vector<L1Branch*>::iterator trIt = vptrackcandidate.begin(); trIt != vptrackcandidate.end(); ++trIt) {
2239 if (Bsize > stat_max_BranchSize)
2240 stat_max_BranchSize = Bsize;
2241 if (nb > stat_max_n_branches)
2242 stat_max_n_branches = nb;
2250 ti[
isec][
"tracks"] = c_timer;
2258 int StsHitsUnusedStartIndex_temp;
2260 int nDontUsedHits = 0;
2262 vStsHitsUnused_buf->clear();
2263 vStsHitPointsUnused_buf->clear();
2264 vStsHitsUnused_buf->reserve(HSize);
2265 vStsHitPointsUnused_buf->reserve(HSize);
2271 const L1StsHit& hit = (*vStsHitsUnused)[ih];
2275 vStsHitsUnused_buf->push_back(hit);
2288 vStsHitsUnused_buf = vStsHitsUnused_temp;
2291 vStsHitPointsUnused_buf = vStsHitsUnused_temp2;
2293 vStsHitsUnused_buf->clear();
2294 vStsHitPointsUnused_buf->clear();
2300 ti[
isec][
"finish"] = c_timer;
2305 if (stat_max_trip_size < tsize)
2306 stat_max_trip_size = tsize;
2323 cout <<
"iter = " <<
isec << endl;
2324 cout <<
" NSinglets = " << stat_nSinglets[
isec] / stat_N << endl;
2326 cout <<
" NTriplets = " << stat_nTriplets[
isec] / stat_N << endl;
2327 cout <<
" NHitsUnused = " << stat_nHits[
isec] / stat_N << endl;
2334 gti[
"iterts"] = c_timerG;
2338#ifndef TRACKS_FROM_TRIPLETS
2346 gti[
"merge "] = c_timerG;
2361 cout << endl <<
" --- Timers, ms --- " << endl;
2372 static long int NTimes =0, NHits=0, HitSize =0, NStrips=0, StripSize =0, NStripsB=0, StripSizeB =0,
2373 NDup=0, DupSize=0, NTrip=0, TripSize=0, NBranches=0, BranchSize=0, NTracks=0, TrackSize=0 ;
2382 NDup += stat_max_n_dup;
2383 DupSize += stat_max_n_dup*
sizeof( int);
2384 NTrip += stat_max_n_trip;
2385 TripSize += stat_max_trip_size;
2387 NBranches += stat_max_n_branches;
2388 BranchSize += stat_max_BranchSize;
2391 int k = 1024*NTimes;
2393 cout<<
"L1 Event size: \n"
2394 <<HitSize/k<<
"kB for "<<NHits/NTimes<<
" hits, \n"
2395 <<StripSize/k<<
"kB for "<<NStrips/NTimes<<
" strips, \n"
2396 <<StripSizeB/k<<
"kB for "<<NStripsB/NTimes<<
" stripsB, \n"
2397 <<DupSize/k<<
"kB for "<<NDup/NTimes<<
" doublets, \n"
2398 <<TripSize/k<<
"kB for "<<NTrip/NTimes<<
" triplets\n"
2399 <<BranchSize/k<<
"kB for "<<NBranches/NTimes<<
" branches, \n"
2400 <<TrackSize/k<<
"kB for "<<NTracks/NTimes<<
" tracks. "<<endl;
2401 cout<<
" L1 total event size = "
2402 <<( HitSize + StripSize + StripSizeB + DupSize + TripSize + BranchSize + TrackSize )/k
2417 static int iEvee = 0;
2422#ifdef DOUB_PERFORMANCE
2423 fL1Eff_doublets->CalculateEff();
2424 fL1Eff_doublets->Print(
"Doublets performance.", 1);
2426#ifdef TRIP_PERFORMANCE
2427 fL1Eff_triplets->CalculateEff();
2428 fL1Eff_triplets->Print(
"Triplet performance", 1);