diff --git a/reco/L1/CbmL1Performance.cxx b/reco/L1/CbmL1Performance.cxx index 87090be90e3134b64402b37088421a74676e5734..07d4b2f03fd3ce5dd36f2cdbd01f7c4bff5b6fd5 100644 --- a/reco/L1/CbmL1Performance.cxx +++ b/reco/L1/CbmL1Performance.cxx @@ -1417,8 +1417,9 @@ void CbmL1::TrackFitPerformance() && (dir * (mc.z - fpAlgo->GetParameters()->GetStation(iSta).fZ[0]) > 0); iSta += dir) { // cout << iSta << " " << dir << endl; - fit.AddMsInMaterial(fpAlgo->GetParameters()->GetMaterialThickness(iSta, fit.fTr.x, fit.fTr.y), fit.fQp0, - fvec::One()); + auto radThick = fpAlgo->GetParameters()->GetMaterialThickness(iSta, fit.fTr.x, fit.fTr.y); + fit.AddMsInMaterial(radThick, fvec::One()); + fit.EnergyLossCorrection(radThick, fvec::One(), fvec::One()); } } if (mc.z != tr.z[0]) continue; @@ -1471,10 +1472,9 @@ void CbmL1::TrackFitPerformance() fit.Extrapolate(fpAlgo->GetParameters()->GetStation(iSta).fZ, fld, fvec::One()); - fit.AddMsInMaterial(fpAlgo->GetParameters()->GetMaterialThickness(iSta, fit.fTr.x, fit.fTr.y), fit.fQp0, - fvec::One()); + fit.AddMsInMaterial(fpAlgo->GetParameters()->GetMaterialThickness(iSta, fit.fTr.x, fit.fTr.y), fvec::One()); fit.EnergyLossCorrection(fpAlgo->GetParameters()->GetMaterialThickness(iSta, fit.fTr.x, fit.fTr.y), - fit.fQp0, fvec::One(), fvec::One()); + fvec::One(), fvec::One()); } fit.Extrapolate(mc.z, fld, fvec::One()); } diff --git a/reco/L1/L1Algo/L1BranchExtender.cxx b/reco/L1/L1Algo/L1BranchExtender.cxx index 7c912c2c6fbed9e033da67c9d5d12bbb1280b75f..7434fdebe4df1008632e1f87ff107ca98162cb9f 100644 --- a/reco/L1/L1Algo/L1BranchExtender.cxx +++ b/reco/L1/L1Algo/L1BranchExtender.cxx @@ -123,7 +123,9 @@ void L1Algo::BranchFitterFast(const L1Branch& t, L1TrackPar& Tout, const bool di fit.Filter(sta.frontInfo, hit.u, hit.du2, fvec::One()); fit.Filter(sta.backInfo, hit.v, hit.dv2, fvec::One()); fit.FilterTime(hit.t, hit.dt2, fvec::One(), sta.timeInfo); - fit.AddMsInMaterial(fParameters.GetMaterialThickness(ista, T.x, T.y), fit.fQp0, fvec::One()); + auto radThick = fParameters.GetMaterialThickness(ista, T.x, T.y); + fit.AddMsInMaterial(radThick, fvec::One()); + fit.EnergyLossCorrection(radThick, fvec(-1.f), fvec::One()); fldB0 = fldB1; fldB1 = fldB2; @@ -292,7 +294,9 @@ void L1Algo::FindMoreHits(L1Branch& t, L1TrackPar& Tout, const bool dir, fit.Filter(sta.frontInfo, hit.u, hit.du2, fvec::One()); fit.Filter(sta.backInfo, hit.v, hit.dv2, fvec::One()); fit.FilterTime(hit.t, hit.dt2, fvec::One(), sta.timeInfo); - fit.AddMsInMaterial(fParameters.GetMaterialThickness(ista, fit.fTr.x, fit.fTr.y), fit.fQp0, fvec::One()); + auto radThick = fParameters.GetMaterialThickness(ista, fit.fTr.x, fit.fTr.y); + fit.AddMsInMaterial(radThick, fvec::One()); + fit.EnergyLossCorrection(radThick, dir ? fvec(1.f) : fvec(-1.f), fvec::One()); fldB0 = fldB1; fldB1 = fldB2; diff --git a/reco/L1/L1Algo/L1CATrackFinder.cxx b/reco/L1/L1Algo/L1CATrackFinder.cxx index 0fadecf1e87297f62289b512b0bde42d7d3fb7af..a64086dce0dffdcfa747ee1c74dc94e195dc29aa 100644 --- a/reco/L1/L1Algo/L1CATrackFinder.cxx +++ b/reco/L1/L1Algo/L1CATrackFinder.cxx @@ -214,7 +214,7 @@ inline void L1Algo::findSingletsStep1( /// input 1st stage of singlet search L1TrackParFit fit; fit.SetParticleMass(GetDefaultParticleMass()); - fit.fQp0 = fvec(0.); + fit.fQp0 = fMaxInvMom; if (fpCurrentIteration->GetElectronFlag()) { fit.SetParticleMass(L1Constants::phys::kElectronMass); } else { @@ -265,14 +265,13 @@ inline void L1Algo::findSingletsStep1( /// input 1st stage of singlet search // TODO: iteration parameter: "Starting NDF of track parameters" // NDF = number of track parameters (6: x, y, tx, ty, qp, time) - number of measured parameters (3: x, y, time) on station or (2: x, y) on target - T.x = xl; - T.y = yl; - T.z = zl; - T.tx = tx; - T.ty = ty; - T.qp = fvec(0.); - T.t = time; - fit.fQp0 = fvec(0.); + T.x = xl; + T.y = yl; + T.z = zl; + T.tx = tx; + T.ty = ty; + T.qp = fvec(0.); + T.t = time; T.C20 = T.C21 = fvec(0.); T.C30 = T.C31 = T.C32 = fvec(0.); @@ -295,7 +294,7 @@ inline void L1Algo::findSingletsStep1( /// input 1st stage of singlet search fit.AddTargetToLine(fTargX, fTargY, fTargZ, TargetXYInfo, fld0); } - fit.AddMsInMaterial(fParameters.GetMaterialThickness(istal, T.x, T.y), fMaxInvMom, fvec::One()); + fit.AddMsInMaterial(fParameters.GetMaterialThickness(istal, T.x, T.y), fvec::One()); // extrapolate to the middle hit @@ -617,13 +616,11 @@ inline void L1Algo::findTripletsStep0( // input fit.Filter(stam.backInfo, u_back_2, dv2_2, fvec::One()); fit.FilterTime(t_2, dt2_2, fvec::One(), stam.timeInfo); - fit.fQp0 = fit.fTr.qp; - - fit.AddMsInMaterial(fParameters.GetMaterialThickness(iStaM, T2.x, T2.y), isMomentumFitted ? fit.fQp0 : fMaxInvMom, - fvec::One()); + fit.fQp0 = isMomentumFitted ? fit.fTr.qp : fMaxInvMom; + fit.AddMsInMaterial(fParameters.GetMaterialThickness(iStaM, T2.x, T2.y), fvec::One()); - //if ((iStaR >= fNstationsBeforePipe) && (iStaM <= fNstationsBeforePipe - 1)) { fit.L1AddPipeMaterial(T2, T2.qp, 1); } + fit.fQp0 = fit.fTr.qp; // extrapolate to the right hit station @@ -958,7 +955,9 @@ inline void L1Algo::findTripletsStep2(Tindex n3, int istal, int istam, int istar for (int ih = 1; ih < NHits; ++ih) { fit.Extrapolate(z[ih], fld, fvec::One()); - fit.AddMsInMaterial(fParameters.GetMaterialThickness(ista[ih], T.x, T.y), fit.fQp0, fvec::One()); + auto radThick = fParameters.GetMaterialThickness(ista[ih], T.x, T.y); + fit.AddMsInMaterial(radThick, fvec::One()); + fit.EnergyLossCorrection(radThick, fvec(-1.f), fvec::One()); fit.Filter(sta[ih].frontInfo, u[ih], du2[ih], fvec::One()); fit.Filter(sta[ih].backInfo, v[ih], dv2[ih], fvec::One()); fit.FilterTime(t[ih], dt2[ih], fvec::One(), sta[ih].timeInfo); @@ -990,7 +989,9 @@ inline void L1Algo::findTripletsStep2(Tindex n3, int istal, int istam, int istar for (int ih = NHits - 2; ih >= 0; --ih) { fit.Extrapolate(z[ih], fld, fvec::One()); - fit.AddMsInMaterial(fParameters.GetMaterialThickness(ista[ih], T.x, T.y), fit.fQp0, fvec::One()); + auto radThick = fParameters.GetMaterialThickness(ista[ih], T.x, T.y); + fit.AddMsInMaterial(radThick, fvec::One()); + fit.EnergyLossCorrection(radThick, fvec(1.f), fvec::One()); fit.Filter(sta[ih].frontInfo, u[ih], du2[ih], fvec::One()); fit.Filter(sta[ih].backInfo, v[ih], dv2[ih], fvec::One()); fit.FilterTime(t[ih], dt2[ih], fvec::One(), sta[ih].timeInfo); diff --git a/reco/L1/L1Algo/L1TrackFitter.cxx b/reco/L1/L1Algo/L1TrackFitter.cxx index a07fa6e64f7a86c101dc1416ff5d97fcf2aab7fb..d9bed492b92e930d9ca1c406a2f74c3333d70ead 100644 --- a/reco/L1/L1Algo/L1TrackFitter.cxx +++ b/reco/L1/L1Algo/L1TrackFitter.cxx @@ -258,14 +258,10 @@ void L1Algo::L1KFTrackFitter() fld1 = fld; fit.Extrapolate(z[ista], fld1, wExtr); - - fit.AddMsInMaterial(fParameters.GetMaterialThickness(ista, tr.x, tr.y), fit.fQp0, wExtr); - - fit.EnergyLossCorrection(fParameters.GetMaterialThickness(ista, tr.x, tr.y), fit.fQp0, fvec(1.f), wExtr); - + fit.AddMsInMaterial(fParameters.GetMaterialThickness(ista, tr.x, tr.y), wExtr); + fit.EnergyLossCorrection(fParameters.GetMaterialThickness(ista, tr.x, tr.y), 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); @@ -406,10 +402,8 @@ void L1Algo::L1KFTrackFitter() fvec wExtr = iif(initialised, fvec::One(), fvec::Zero()); fit.Extrapolate(z[ista], fld, w1); - - fit.AddMsInMaterial(fParameters.GetMaterialThickness(ista, tr.x, tr.y), fit.fQp0, wExtr); - fit.EnergyLossCorrection(fParameters.GetMaterialThickness(ista, tr.x, tr.y), fit.fQp0, fvec(-1.f), wExtr); - + fit.AddMsInMaterial(fParameters.GetMaterialThickness(ista, tr.x, tr.y), wExtr); + fit.EnergyLossCorrection(fParameters.GetMaterialThickness(ista, tr.x, tr.y), 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); diff --git a/reco/L1/L1Algo/L1TrackParFit.cxx b/reco/L1/L1Algo/L1TrackParFit.cxx index 27b328619e347a5aab6792317693e7d9df81a977..d595db3e3e35e3ac8eb0a6f41edec2a7bebdada2 100644 --- a/reco/L1/L1Algo/L1TrackParFit.cxx +++ b/reco/L1/L1Algo/L1TrackParFit.cxx @@ -993,7 +993,7 @@ void L1TrackParFit::ExtrapolateLine(fvec z_out, const fvec& w) } -void L1TrackParFit::AddMsInMaterial(const fvec& radThick, fvec qp0, fvec w) +void L1TrackParFit::AddMsInMaterial(const fvec& radThick, fvec w) { cnst ONE = 1.; @@ -1005,20 +1005,20 @@ void L1TrackParFit::AddMsInMaterial(const fvec& radThick, fvec qp0, fvec w) fvec h = txtx + tyty; fvec t = sqrt(txtx1 + tyty); fvec h2 = h * h; - fvec qp0t = qp0 * t; + fvec qp0t = fQp0 * t; cnst c1 = 0.0136f, c2 = c1 * 0.038f, c3 = c2 * 0.5f, c4 = -c3 / 2.0f, c5 = c3 / 3.0f, c6 = -c3 / 4.0f; fvec s0 = (c1 + c2 * log(radThick) + c3 * h + h2 * (c4 + c5 * h + c6 * h2)) * qp0t; //fvec a = ( (ONE+mass2*qp0*qp0t)*radThick*s0*s0 ); - fvec a = ((t + fMass2 * qp0 * qp0t) * radThick * s0 * s0); + fvec a = ((t + fMass2 * fQp0 * qp0t) * radThick * s0 * s0); fTr.C22 += w * txtx1 * a; fTr.C32 += w * tx * ty * a; fTr.C33 += w * (ONE + tyty) * a; } -void L1TrackParFit::AddMsInThickMaterial(fvec radThick, fvec qp0, fvec w, fvec thickness, bool fDownstream) +void L1TrackParFit::AddMsInThickMaterial(fvec radThick, fvec w, fvec thickness, bool fDownstream) { cnst ONE = 1.; @@ -1030,14 +1030,14 @@ void L1TrackParFit::AddMsInThickMaterial(fvec radThick, fvec qp0, fvec w, fvec t fvec h = txtx + tyty; fvec t = sqrt(txtx1 + tyty); fvec h2 = h * h; - fvec qp0t = qp0 * t; + fvec qp0t = fQp0 * t; cnst c1(0.0136), c2 = c1 * fvec(0.038), c3 = c2 * fvec(0.5), c4 = -c3 / fvec(2.0), c5 = c3 / fvec(3.0), c6 = -c3 / fvec(4.0); fvec s0 = (c1 + c2 * log(radThick) + c3 * h + h2 * (c4 + c5 * h + c6 * h2)) * qp0t; //fvec a = ( (ONE+mass2*qp0*qp0t)*radThick*s0*s0 ); - fvec a = ((t + fMass2 * qp0 * qp0t) * radThick * s0 * s0); + fvec a = ((t + fMass2 * fQp0 * qp0t) * radThick * s0 * s0); fvec D = (fDownstream) ? fvec(1.) : fvec(-1.); fvec T23 = (thickness * thickness) / fvec(3.0); @@ -1058,10 +1058,10 @@ void L1TrackParFit::AddMsInThickMaterial(fvec radThick, fvec qp0, fvec w, fvec t } -void L1TrackParFit::EnergyLossCorrection(const fvec& radThick, fvec& qp0, fvec direction, fvec w) +void L1TrackParFit::EnergyLossCorrection(const fvec& radThick, fvec upstreamDirection, fvec w) { const fvec qp2cut(1. / (10. * 10.)); // 10 GeV cut - const fvec qp02 = max(qp0 * qp0, qp2cut); + const fvec qp02 = max(fQp0 * fQp0, qp2cut); const fvec p2 = fvec(1.) / qp02; const fvec E2 = fMass2 + p2; @@ -1071,12 +1071,14 @@ void L1TrackParFit::EnergyLossCorrection(const fvec& radThick, fvec& qp0, fvec d const fvec dE = bethe * radThick * tr * 2.33f * 9.34961f; - const fvec E2Corrected = (sqrt(E2) + direction * dE) * (sqrt(E2) + direction * dE); - fvec corr = sqrt(p2 / (E2Corrected - fMass2)); - fmask ok = (corr == corr) & (fvec::Zero() < w); - corr = iif(ok, corr, fvec::One()); + const fvec ECorrected = sqrt(E2) + upstreamDirection * dE; + const fvec E2Corrected = ECorrected * ECorrected; + + fvec corr = sqrt(p2 / (E2Corrected - fMass2)); + fmask ok = (corr == corr) & (fvec::Zero() < w); + corr = iif(ok, corr, fvec::One()); - qp0 *= corr; + fQp0 *= corr; fTr.qp *= corr; fTr.C40 *= corr; fTr.C41 *= corr; @@ -1087,11 +1089,11 @@ void L1TrackParFit::EnergyLossCorrection(const fvec& radThick, fvec& qp0, fvec d } template<int atomicZ> -void L1TrackParFit::EnergyLossCorrection(float atomicA, float rho, float radLen, const fvec& radThick, fvec& qp0, - fvec direction, fvec w) +void L1TrackParFit::EnergyLossCorrection(float atomicA, float rho, float radLen, const fvec& radThick, fvec direction, + fvec w) { const fvec qp2cut(1. / (10. * 10.)); // 10 GeV cut - const fvec qp02 = max(qp0 * qp0, qp2cut); + const fvec qp02 = max(fQp0 * fQp0, qp2cut); const fvec p2 = fvec(1.) / qp02; const fvec E2 = fMass2 + p2; @@ -1111,7 +1113,7 @@ void L1TrackParFit::EnergyLossCorrection(float atomicA, float rho, float radLen, fmask ok = (corr == corr) & (fvec::Zero() < w); corr = iif(ok, corr, fvec::One()); - qp0 *= corr; + fQp0 *= corr; fTr.qp *= corr; fvec P(sqrt(p2)); // GeV @@ -1151,32 +1153,32 @@ void L1TrackParFit::EnergyLossCorrection(float atomicA, float rho, float radLen, } -void L1TrackParFit::EnergyLossCorrectionIron(const fvec& radThick, fvec& qp0, fvec direction, fvec w) +void L1TrackParFit::EnergyLossCorrectionIron(const fvec& radThick, fvec direction, fvec w) { constexpr int atomicZ = 26; constexpr float atomicA = 55.845f; constexpr float rho = 7.87; constexpr float radLen = 1.758f; - EnergyLossCorrection<atomicZ>(atomicA, rho, radLen, radThick, qp0, direction, w); + EnergyLossCorrection<atomicZ>(atomicA, rho, radLen, radThick, direction, w); } -void L1TrackParFit::EnergyLossCorrectionCarbon(const fvec& radThick, fvec& qp0, fvec direction, fvec w) +void L1TrackParFit::EnergyLossCorrectionCarbon(const fvec& radThick, fvec direction, fvec w) { constexpr int atomicZ = 6; constexpr float atomicA = 12.011f; constexpr float rho = 2.265; constexpr float radLen = 18.76f; - EnergyLossCorrection<atomicZ>(atomicA, rho, radLen, radThick, qp0, direction, w); + EnergyLossCorrection<atomicZ>(atomicA, rho, radLen, radThick, direction, w); } -void L1TrackParFit::EnergyLossCorrectionAl(const fvec& radThick, fvec& qp0, fvec direction, fvec w) +void L1TrackParFit::EnergyLossCorrectionAl(const fvec& radThick, fvec direction, fvec w) { constexpr int atomicZ = 13; constexpr float atomicA = 26.981f; constexpr float rho = 2.70f; constexpr float radLen = 2.265f; - EnergyLossCorrection<atomicZ>(atomicA, rho, radLen, radThick, qp0, direction, w); + EnergyLossCorrection<atomicZ>(atomicA, rho, radLen, radThick, direction, w); } void L1TrackParFit::GetExtrapolatedXYline(const fvec& z, const L1FieldRegion& F, fvec& extrX, fvec& extrY, fvec Jx[6], diff --git a/reco/L1/L1Algo/L1TrackParFit.h b/reco/L1/L1Algo/L1TrackParFit.h index 106a3b2ec5e7183e8a8195e5cb197adbba61549e..49bcc41c4da063f6916c2309e68cdaea6330c9c0 100644 --- a/reco/L1/L1Algo/L1TrackParFit.h +++ b/reco/L1/L1Algo/L1TrackParFit.h @@ -72,19 +72,18 @@ public: void ExtrapolateLine(fvec z_out, const fvec& w); void ExtrapolateLine(fvec z_out, const L1FieldRegion& F, const fvec& w); - - void EnergyLossCorrection(const fvec& radThick, fvec& qp0, fvec direction, fvec w); + void EnergyLossCorrection(const fvec& radThick, fvec upstreamDirection, fvec w); template<int atomicZ> - void EnergyLossCorrection(float atomicA, float rho, float radLen, const fvec& radThick, fvec& qp0, fvec direction, - fvec w); + void EnergyLossCorrection(float atomicA, float rho, float radLen, const fvec& radThick, fvec direction, fvec w); + + void EnergyLossCorrectionIron(const fvec& radThick, fvec direction, fvec w); + void EnergyLossCorrectionCarbon(const fvec& radThick, fvec direction, fvec w); + void EnergyLossCorrectionAl(const fvec& radThick, fvec direction, fvec w); - void EnergyLossCorrectionIron(const fvec& radThick, fvec& qp0, fvec direction, fvec w); - void EnergyLossCorrectionCarbon(const fvec& radThick, fvec& qp0, fvec direction, fvec w); - void EnergyLossCorrectionAl(const fvec& radThick, fvec& qp0, fvec direction, fvec w); + void AddMsInMaterial(const fvec& radThick, fvec w); - void AddMsInMaterial(const fvec& radThick, fvec qp0, fvec w); - void AddMsInThickMaterial(fvec radThick, fvec qp0, fvec w, fvec thickness, bool fDownstream); + void AddMsInThickMaterial(fvec radThick, fvec w, fvec thickness, bool fDownstream); void GetExtrapolatedXYline(const fvec& z, const L1FieldRegion& F, fvec& extrX, fvec& extrY, fvec Jx[6], fvec Jy[6]) const; diff --git a/reco/L1/ParticleFinder/CbmL1PFFitter.cxx b/reco/L1/ParticleFinder/CbmL1PFFitter.cxx index 3cfbf8665c5f155a8289a1f91239dafeb2e69a75..1ef9732af5d5d214684a9d2d17094ceb5db51c9a 100644 --- a/reco/L1/ParticleFinder/CbmL1PFFitter.cxx +++ b/reco/L1/ParticleFinder/CbmL1PFFitter.cxx @@ -328,8 +328,8 @@ void CbmL1PFFitter::Fit(vector<CbmStsTrack>& Tracks, vector<int>& pidHypo) fit.Filter(sta[i].frontInfo, u[i], du2[i], w1); fit.Filter(sta[i].backInfo, v[i], dv2[i], w1); fit.FilterTime(t[i], dt2[i], w1, sta[i].timeInfo); - fit.AddMsInMaterial(radThick, fit.fQp0, wIn); - fit.EnergyLossCorrection(radThick, fit.fQp0, -fvec::One(), wIn); + fit.AddMsInMaterial(radThick, wIn); + fit.EnergyLossCorrection(radThick, -fvec::One(), wIn); b2 = b1; z2 = z1; @@ -397,8 +397,8 @@ void CbmL1PFFitter::Fit(vector<CbmStsTrack>& Tracks, vector<int>& pidHypo) fit.Filter(sta[i].frontInfo, u[i], du2[i], w1); fit.Filter(sta[i].backInfo, v[i], dv2[i], w1); fit.FilterTime(t[i], dt2[i], w1, sta[i].timeInfo); - fit.AddMsInMaterial(radThick, fit.fQp0, wIn); - fit.EnergyLossCorrection(radThick, fit.fQp0, fvec::One(), wIn); + fit.AddMsInMaterial(radThick, wIn); + fit.EnergyLossCorrection(radThick, fvec::One(), wIn); b2 = b1; z2 = z1; @@ -558,12 +558,12 @@ void CbmL1PFFitter::GetChiToVertex(vector<CbmStsTrack>& Tracks, vector<PFFieldRe fit.Extrapolate(zSta[iSt], fld, w); auto radThick = CbmL1::Instance()->fpAlgo->GetParameters()->GetMaterialThickness(iSt, fit.fTr.x, fit.fTr.y); - fit.AddMsInMaterial(radThick, fit.fQp0, w); - fit.EnergyLossCorrection(radThick, fit.fQp0, fvec::One(), w); + fit.AddMsInMaterial(radThick, w); + fit.EnergyLossCorrection(radThick, fvec::One(), w); } fit.Extrapolate(primVtx.GetRefZ(), fld, fvec::One()); - fit.AddMsInMaterial(fit.GetTargetRadThick(), fit.fQp0, fvec::One()); - fit.EnergyLossCorrection(fit.GetTargetRadThick(), fit.fQp0, fvec::One(), fvec::One()); + fit.AddMsInMaterial(fit.GetTargetRadThick(), fvec::One()); + fit.EnergyLossCorrection(fit.GetTargetRadThick(), fvec::One(), fvec::One()); Double_t Cv[3] = {primVtx.GetCovMatrix()[0], primVtx.GetCovMatrix()[1], primVtx.GetCovMatrix()[2]};