diff --git a/reco/L1/CMakeLists.txt b/reco/L1/CMakeLists.txt index a9e5be41c11c0552a33cb44231c58da9c2ab4dd8..6b07858575b42d36875dc8402d4c656c2b27307f 100644 --- a/reco/L1/CMakeLists.txt +++ b/reco/L1/CMakeLists.txt @@ -48,9 +48,6 @@ set(SRCS L1Algo/L1Station.cxx L1Algo/L1TrackParFit.cxx L1Algo/L1MCEvent.cxx - L1Algo/L1Fit.cxx - L1Algo/L1FitMaterial.cxx - L1Algo/L1Extrapolation.cxx CbmL1MCTrack.cxx L1Algo/L1Material.cxx L1Algo/L1UMeasurementInfo.cxx diff --git a/reco/L1/L1Algo/L1Extrapolation.cxx b/reco/L1/L1Algo/L1Extrapolation.cxx deleted file mode 100644 index 99ea46080f2fe13f6ef62abc1cf777cfdba8abb2..0000000000000000000000000000000000000000 --- a/reco/L1/L1Algo/L1Extrapolation.cxx +++ /dev/null @@ -1,916 +0,0 @@ -/* Copyright (C) 2007-2017 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt - SPDX-License-Identifier: GPL-3.0-only - Authors: Maksym Zyzak, Sergey Gorbunov [committer], Igor Kulakov */ - -#include "L1Extrapolation.h" - -#include "L1Def.h" -#include "L1Field.h" -#include "L1TrackPar.h" - - -//#define cnst static const fvec -#define cnst const fvec - -void L1ExtrapolateAnalytic(L1TrackPar& T, fvec z_out, fvec qp0, const L1FieldRegion& F, const fvec* w); -void L1ExtrapolateRungeKutta(L1TrackPar& T, fvec z_out, fvec qp0, const L1FieldRegion& F, const fvec* w); - -void L1Extrapolate // extrapolates track parameters and returns jacobian for extrapolation of CovMatrix - (L1TrackPar& T, // input track parameters (x,y,tx,ty,Q/p) and cov.matrix - fvec z_out, // extrapolate to this z position - fvec qp0, // use Q/p linearisation at this value - const L1FieldRegion& F, const fvec* w) -{ - L1ExtrapolateRungeKutta(T, z_out, qp0, F, w); - //L1ExtrapolateAnalytic(T, z_out, qp0, F, w); -} - - -void L1ExtrapolateAnalytic(L1TrackPar& T, // input track parameters (x,y,tx,ty,Q/p) and cov.matrix - fvec z_out, // extrapolate to this z position - fvec qp0, // use Q/p linearisation at this value - const L1FieldRegion& F, const fvec* w) -{ - //cout<<"Extrapolation..."<<endl; - // - // Part of the analytic extrapolation formula with error (c_light*B*dz)^4/4! - // - - cnst c_light(0.000299792458); - - cnst c1(1.), c2(2.), c3(3.), c4(4.), c6(6.), c9(9.), c15(15.), c18(18.), c45(45.), c2i(1. / 2.), c3i(1. / 3.), - c6i(1. / 6.), c12i(1. / 12.); - - const fvec qp = T.qp; - fvec dz = (z_out - T.z); - - if (w) { dz.setZero(*w <= fvec::Zero()); } - - const fvec dz2 = dz * dz; - const fvec dz3 = dz2 * dz; - - // construct coefficients - - const fvec x = T.tx; - const fvec y = T.ty; - const fvec xx = x * x; - const fvec xy = x * y; - const fvec yy = y * y; - const fvec y2 = y * c2; - const fvec x2 = x * c2; - const fvec x4 = x * c4; - const fvec xx31 = xx * c3 + c1; - const fvec xx159 = xx * c15 + c9; - - const fvec Ay = -xx - c1; - const fvec Ayy = x * (xx * c3 + c3); - const fvec Ayz = -c2 * xy; - const fvec Ayyy = -(c15 * xx * xx + c18 * xx + c3); - - const fvec Ayy_x = c3 * xx31; - const fvec Ayyy_x = -x4 * xx159; - - const fvec Bx = yy + c1; - const fvec Byy = y * xx31; - const fvec Byz = c2 * xx + c1; - const fvec Byyy = -xy * xx159; - - const fvec Byy_x = c6 * xy; - const fvec Byyy_x = -y * (c45 * xx + c9); - const fvec Byyy_y = -x * xx159; - - // end of coefficients calculation - - const fvec t2 = c1 + xx + yy; - const fvec t = sqrt(t2); - const fvec h = qp0 * c_light; - const fvec ht = h * t; - - // get field integrals - const fvec ddz = T.z - F.z0; - const fvec Fx0 = F.cx0 + F.cx1 * ddz + F.cx2 * ddz * ddz; - const fvec Fx1 = (F.cx1 + c2 * F.cx2 * ddz) * dz; - const fvec Fx2 = F.cx2 * dz2; - const fvec Fy0 = F.cy0 + F.cy1 * ddz + F.cy2 * ddz * ddz; - const fvec Fy1 = (F.cy1 + c2 * F.cy2 * ddz) * dz; - const fvec Fy2 = F.cy2 * dz2; - const fvec Fz0 = F.cz0 + F.cz1 * ddz + F.cz2 * ddz * ddz; - const fvec Fz1 = (F.cz1 + c2 * F.cz2 * ddz) * dz; - const fvec Fz2 = F.cz2 * dz2; - - // - - const fvec sx = (Fx0 + Fx1 * c2i + Fx2 * c3i); - const fvec sy = (Fy0 + Fy1 * c2i + Fy2 * c3i); - const fvec sz = (Fz0 + Fz1 * c2i + Fz2 * c3i); - - const fvec Sx = (Fx0 * c2i + Fx1 * c6i + Fx2 * c12i); - const fvec Sy = (Fy0 * c2i + Fy1 * c6i + Fy2 * c12i); - const fvec Sz = (Fz0 * c2i + Fz1 * c6i + Fz2 * c12i); - - fvec syz; - { - constexpr double d = 360.; - cnst c00(30. * 6. / d), c01(30. * 2. / d), c02(30. / d), c10(3. * 40. / d), c11(3. * 15. / d), c12(3. * 8. / d), - c20(2. * 45. / d), c21(2. * 2. * 9. / d), c22(2. * 2. * 5. / d); - syz = Fy0 * (c00 * Fz0 + c01 * Fz1 + c02 * Fz2) + Fy1 * (c10 * Fz0 + c11 * Fz1 + c12 * Fz2) - + Fy2 * (c20 * Fz0 + c21 * Fz1 + c22 * Fz2); - } - - fvec Syz; - { - constexpr double d = 2520.; - cnst c00(21. * 20. / d), c01(21. * 5. / d), c02(21. * 2. / d), c10(7. * 30. / d), c11(7. * 9. / d), - c12(7. * 4. / d), c20(2. * 63. / d), c21(2. * 21. / d), c22(2. * 10. / d); - Syz = Fy0 * (c00 * Fz0 + c01 * Fz1 + c02 * Fz2) + Fy1 * (c10 * Fz0 + c11 * Fz1 + c12 * Fz2) - + Fy2 * (c20 * Fz0 + c21 * Fz1 + c22 * Fz2); - } - - const fvec syy = sy * sy * c2i; - const fvec syyy = syy * sy * c3i; - - fvec Syy; - { - constexpr double d = 2520.; - cnst c00(420. / d), c01(21. * 15. / d), c02(21. * 8. / d), c03(63. / d), c04(70. / d), c05(20. / d); - Syy = Fy0 * (c00 * Fy0 + c01 * Fy1 + c02 * Fy2) + Fy1 * (c03 * Fy1 + c04 * Fy2) + c05 * Fy2 * Fy2; - } - - fvec Syyy; - { - constexpr double d = 181440.; - cnst c000(7560 / d), c001(9 * 1008 / d), c002(5 * 1008 / d), c011(21 * 180 / d), c012(24 * 180 / d), - c022(7 * 180 / d), c111(540 / d), c112(945 / d), c122(560 / d), c222(112 / d); - const fvec Fy22 = Fy2 * Fy2; - Syyy = Fy0 * (Fy0 * (c000 * Fy0 + c001 * Fy1 + c002 * Fy2) + Fy1 * (c011 * Fy1 + c012 * Fy2) + c022 * Fy22) - + Fy1 * (Fy1 * (c111 * Fy1 + c112 * Fy2) + c122 * Fy22) + c222 * Fy22 * Fy2; - } - - - const fvec sA1 = sx * xy + sy * Ay + sz * y; - const fvec sA1_x = sx * y - sy * x2; - const fvec sA1_y = sx * x + sz; - - const fvec sB1 = sx * Bx - sy * xy - sz * x; - const fvec sB1_x = -sy * y - sz; - const fvec sB1_y = sx * y2 - sy * x; - - const fvec SA1 = Sx * xy + Sy * Ay + Sz * y; - const fvec SA1_x = Sx * y - Sy * x2; - const fvec SA1_y = Sx * x + Sz; - - const fvec SB1 = Sx * Bx - Sy * xy - Sz * x; - const fvec SB1_x = -Sy * y - Sz; - const fvec SB1_y = Sx * y2 - Sy * x; - - - const fvec sA2 = syy * Ayy + syz * Ayz; - const fvec sA2_x = syy * Ayy_x - syz * y2; - const fvec sA2_y = -syz * x2; - const fvec sB2 = syy * Byy + syz * Byz; - const fvec sB2_x = syy * Byy_x + syz * x4; - const fvec sB2_y = syy * xx31; - - const fvec SA2 = Syy * Ayy + Syz * Ayz; - const fvec SA2_x = Syy * Ayy_x - Syz * y2; - const fvec SA2_y = -Syz * x2; - const fvec SB2 = Syy * Byy + Syz * Byz; - const fvec SB2_x = Syy * Byy_x + Syz * x4; - const fvec SB2_y = Syy * xx31; - - const fvec sA3 = syyy * Ayyy; - const fvec sA3_x = syyy * Ayyy_x; - const fvec sB3 = syyy * Byyy; - const fvec sB3_x = syyy * Byyy_x; - const fvec sB3_y = syyy * Byyy_y; - - - const fvec SA3 = Syyy * Ayyy; - const fvec SA3_x = Syyy * Ayyy_x; - const fvec SB3 = Syyy * Byyy; - const fvec SB3_x = Syyy * Byyy_x; - const fvec SB3_y = Syyy * Byyy_y; - - const fvec ht1 = ht * dz; - const fvec ht2 = ht * ht * dz2; - const fvec ht3 = ht * ht * ht * dz3; - const fvec ht1sA1 = ht1 * sA1; - const fvec ht1sB1 = ht1 * sB1; - const fvec ht1SA1 = ht1 * SA1; - const fvec ht1SB1 = ht1 * SB1; - const fvec ht2sA2 = ht2 * sA2; - const fvec ht2SA2 = ht2 * SA2; - const fvec ht2sB2 = ht2 * sB2; - const fvec ht2SB2 = ht2 * SB2; - const fvec ht3sA3 = ht3 * sA3; - const fvec ht3sB3 = ht3 * sB3; - const fvec ht3SA3 = ht3 * SA3; - const fvec ht3SB3 = ht3 * SB3; - - T.x += (x + ht1SA1 + ht2SA2 + ht3SA3) * dz; - T.y += (y + ht1SB1 + ht2SB2 + ht3SB3) * dz; - T.tx += ht1sA1 + ht2sA2 + ht3sA3; - T.ty += ht1sB1 + ht2sB2 + ht3sB3; - T.z += dz; - - const fvec ctdz = c_light * t * dz; - const fvec ctdz2 = c_light * t * dz2; - - const fvec dqp = qp - qp0; - const fvec t2i = c1 / t2; - const fvec xt2i = x * t2i; - const fvec yt2i = y * t2i; - const fvec tmp0 = ht1SA1 + c2 * ht2SA2 + c3 * ht3SA3; - const fvec tmp1 = ht1SB1 + c2 * ht2SB2 + c3 * ht3SB3; - const fvec tmp2 = ht1sA1 + c2 * ht2sA2 + c3 * ht3sA3; - const fvec tmp3 = ht1sB1 + c2 * ht2sB2 + c3 * ht3sB3; - - const fvec j02 = dz * (c1 + xt2i * tmp0 + ht1 * SA1_x + ht2 * SA2_x + ht3 * SA3_x); - const fvec j12 = dz * (xt2i * tmp1 + ht1 * SB1_x + ht2 * SB2_x + ht3 * SB3_x); - const fvec j22 = c1 + xt2i * tmp2 + ht1 * sA1_x + ht2 * sA2_x + ht3 * sA3_x; - const fvec j32 = xt2i * tmp3 + ht1 * sB1_x + ht2 * sB2_x + ht3 * sB3_x; - - const fvec j03 = dz * (yt2i * tmp0 + ht1 * SA1_y + ht2 * SA2_y); - const fvec j13 = dz * (c1 + yt2i * tmp1 + ht1 * SB1_y + ht2 * SB2_y + ht3 * SB3_y); - const fvec j23 = yt2i * tmp2 + ht1 * sA1_y + ht2 * sA2_y; - const fvec j33 = c1 + yt2i * tmp3 + ht1 * sB1_y + ht2 * sB2_y + ht3 * sB3_y; - - const fvec j04 = ctdz2 * (SA1 + c2 * ht1 * SA2 + c3 * ht2 * SA3); - const fvec j14 = ctdz2 * (SB1 + c2 * ht1 * SB2 + c3 * ht2 * SB3); - const fvec j24 = ctdz * (sA1 + c2 * ht1 * sA2 + c3 * ht2 * sA3); - const fvec j34 = ctdz * (sB1 + c2 * ht1 * sB2 + c3 * ht2 * sB3); - - - // extrapolate inverse momentum - - T.x += j04 * dqp; - T.y += j14 * dqp; - T.tx += j24 * dqp; - T.ty += j34 * dqp; - - // covariance matrix transport - - const fvec c42 = T.C42, c43 = T.C43; - - const fvec cj00 = T.C00 + T.C20 * j02 + T.C30 * j03 + T.C40 * j04; - // const fvec cj10 = T.C10 + T.C21*j02 + T.C31*j03 + T.C41*j04; - const fvec cj20 = T.C20 + T.C22 * j02 + T.C32 * j03 + c42 * j04; - const fvec cj30 = T.C30 + T.C32 * j02 + T.C33 * j03 + c43 * j04; - - const fvec cj01 = T.C10 + T.C20 * j12 + T.C30 * j13 + T.C40 * j14; - const fvec cj11 = T.C11 + T.C21 * j12 + T.C31 * j13 + T.C41 * j14; - const fvec cj21 = T.C21 + T.C22 * j12 + T.C32 * j13 + c42 * j14; - const fvec cj31 = T.C31 + T.C32 * j12 + T.C33 * j13 + c43 * j14; - - // const fvec cj02 = T.C20*j22 + T.C30*j23 + T.C40*j24; - // const fvec cj12 = T.C21*j22 + T.C31*j23 + T.C41*j24; - const fvec cj22 = T.C22 * j22 + T.C32 * j23 + c42 * j24; - const fvec cj32 = T.C32 * j22 + T.C33 * j23 + c43 * j24; - - // const fvec cj03 = T.C20*j32 + T.C30*j33 + T.C40*j34; - // const fvec cj13 = T.C21*j32 + T.C31*j33 + T.C41*j34; - const fvec cj23 = T.C22 * j32 + T.C32 * j33 + c42 * j34; - const fvec cj33 = T.C32 * j32 + T.C33 * j33 + c43 * j34; - - T.C40 += c42 * j02 + c43 * j03 + T.C44 * j04; // cj40 - T.C41 += c42 * j12 + c43 * j13 + T.C44 * j14; // cj41 - T.C42 = c42 * j22 + c43 * j23 + T.C44 * j24; // cj42 - T.C43 = c42 * j32 + c43 * j33 + T.C44 * j34; // cj43 - - T.C00 = cj00 + j02 * cj20 + j03 * cj30 + j04 * T.C40; - T.C10 = cj01 + j02 * cj21 + j03 * cj31 + j04 * T.C41; - T.C11 = cj11 + j12 * cj21 + j13 * cj31 + j14 * T.C41; - - T.C20 = j22 * cj20 + j23 * cj30 + j24 * T.C40; - T.C30 = j32 * cj20 + j33 * cj30 + j34 * T.C40; - T.C21 = j22 * cj21 + j23 * cj31 + j24 * T.C41; - T.C31 = j32 * cj21 + j33 * cj31 + j34 * T.C41; - T.C22 = j22 * cj22 + j23 * cj32 + j24 * T.C42; - T.C32 = j32 * cj22 + j33 * cj32 + j34 * T.C42; - T.C33 = j32 * cj23 + j33 * cj33 + j34 * T.C43; - //cout<<"Extrapolation ok"<<endl; -} - - -void L1ExtrapolateRungeKutta // extrapolates track parameters and returns jacobian for extrapolation of CovMatrix - (L1TrackPar& T, // input track parameters (x,y,tx,ty,Q/p) and cov.matrix - fvec z_out, // extrapolate to this z position - fvec qp0, // use Q/p linearisation at this value - const L1FieldRegion& F, const fvec* w) -{ - // - // Forth-order Runge-Kutta method for solution of the equation - // of motion of a particle with parameter qp = Q /P - // in the magnetic field B() - // - // | x | tx - // | y | ty - // d/dz = | tx| = ft * ( ty * ( B(3)+tx*b(1) ) - (1+tx**2)*B(2) ) - // | ty| ft * (-tx * ( B(3)+ty+b(2) - (1+ty**2)*B(1) ) , - // - // where ft = c_light*qp*sqrt ( 1 + tx**2 + ty**2 ) . - // - // In the following for RK step : - // - // x=x[0], y=x[1], tx=x[3], ty=x[4]. - // - //======================================================================== - // - // NIM A395 (1997) 169-184; NIM A426 (1999) 268-282. - // - // the routine is based on LHC(b) utility code - // - //======================================================================== - - - cnst c_light(0.000299792458); - - const fvec a[4] = {fvec(0.), fvec(0.5), fvec(0.5), fvec(1.)}; - const fvec c[4] = {fvec(1. / 6.), fvec(1. / 3.), fvec(1. / 3.), fvec(1. / 6.)}; - const fvec b[4] = {fvec(0.), fvec(0.5), fvec(0.5), fvec(1.)}; - - int step4; - fvec k[16], x0[4], x[4], k1[16]; - fvec Ax[4], Ay[4], Ax_tx[4], Ay_tx[4], Ax_ty[4], Ay_ty[4]; - - //---------------------------------------------------------------- - - if (w) { z_out = iif(fvec::Zero() < *w, z_out, T.z); } - - fvec qp_in = T.qp; - const fvec z_in = T.z; - const fvec h = (z_out - T.z); - fvec hC = h * c_light; - x0[0] = T.x; - x0[1] = T.y; - x0[2] = T.tx; - x0[3] = T.ty; - // - // Runge-Kutta step - // - - int step; - int i; - - for (step = 0; step < 4; ++step) { - - for (i = 0; i < 4; ++i) { - if (step == 0) { x[i] = x0[i]; } - else { - x[i] = x0[i] + b[step] * k[step * 4 - 4 + i]; - } - } - fvec B[3]; - F.Get(x[0], x[1], z_in + a[step] * h, B); - - fvec tx = x[2]; - fvec ty = x[3]; - fvec tx2 = tx * tx; - fvec ty2 = ty * ty; - fvec txty = tx * ty; - fvec tx2ty21 = fvec(1.) + tx2 + ty2; - // if( tx2ty21 > 1.e4 ) return 1; - fvec I_tx2ty21 = fvec(1.) / tx2ty21 * qp0; - fvec tx2ty2 = sqrt(tx2ty21); - // fvec I_tx2ty2 = qp0 * hC / tx2ty2 ; unsused ??? - tx2ty2 *= hC; - fvec tx2ty2qp = tx2ty2 * qp0; - Ax[step] = (txty * B[0] + ty * B[2] - (fvec(1.) + tx2) * B[1]) * tx2ty2; - Ay[step] = (-txty * B[1] - tx * B[2] + (fvec(1.) + ty2) * B[0]) * tx2ty2; - - Ax_tx[step] = Ax[step] * tx * I_tx2ty21 + (ty * B[0] - fvec(2.) * tx * B[1]) * tx2ty2qp; - Ax_ty[step] = Ax[step] * ty * I_tx2ty21 + (tx * B[0] + B[2]) * tx2ty2qp; - Ay_tx[step] = Ay[step] * tx * I_tx2ty21 + (-ty * B[1] - B[2]) * tx2ty2qp; - Ay_ty[step] = Ay[step] * ty * I_tx2ty21 + (-tx * B[1] + fvec(2.) * ty * B[0]) * tx2ty2qp; - - step4 = step * 4; - k[step4] = tx * h; - k[step4 + 1] = ty * h; - k[step4 + 2] = Ax[step] * qp0; - k[step4 + 3] = Ay[step] * qp0; - - } // end of Runge-Kutta steps - - { - T.x = x0[0] + c[0] * k[0] + c[1] * k[4 + 0] + c[2] * k[8 + 0] + c[3] * k[12 + 0]; - T.y = x0[1] + c[0] * k[1] + c[1] * k[4 + 1] + c[2] * k[8 + 1] + c[3] * k[12 + 1]; - T.tx = x0[2] + c[0] * k[2] + c[1] * k[4 + 2] + c[2] * k[8 + 2] + c[3] * k[12 + 2]; - T.ty = x0[3] + c[0] * k[3] + c[1] * k[4 + 3] + c[2] * k[8 + 3] + c[3] * k[12 + 3]; - T.z = z_out; - } - - // - // Derivatives dx/dqp - // - - x0[0] = fvec(0.); - x0[1] = fvec(0.); - x0[2] = fvec(0.); - x0[3] = fvec(0.); - - // - // Runge-Kutta step for derivatives dx/dqp - - for (step = 0; step < 4; ++step) { - for (i = 0; i < 4; ++i) { - if (step == 0) { x[i] = x0[i]; } - else { - x[i] = x0[i] + b[step] * k1[step * 4 - 4 + i]; - } - } - step4 = step * 4; - k1[step4] = x[2] * h; - k1[step4 + 1] = x[3] * h; - k1[step4 + 2] = Ax[step] + Ax_tx[step] * x[2] + Ax_ty[step] * x[3]; - k1[step4 + 3] = Ay[step] + Ay_tx[step] * x[2] + Ay_ty[step] * x[3]; - - } // end of Runge-Kutta steps for derivatives dx/dqp - - fvec J[25]; - - for (i = 0; i < 4; ++i) { - J[20 + i] = x0[i] + c[0] * k1[i] + c[1] * k1[4 + i] + c[2] * k1[8 + i] + c[3] * k1[12 + i]; - } - J[24] = fvec(1.); - // - // end of derivatives dx/dqp - // - - // Derivatives dx/tx - // - - x0[0] = fvec(0.); - x0[1] = fvec(0.); - x0[2] = fvec(1.); - x0[3] = fvec(0.); - - // - // Runge-Kutta step for derivatives dx/dtx - // - - for (step = 0; step < 4; ++step) { - for (i = 0; i < 4; ++i) { - if (step == 0) { x[i] = x0[i]; } - else if (i != 2) { - x[i] = x0[i] + b[step] * k1[step * 4 - 4 + i]; - } - } - step4 = step * 4; - k1[step4] = x[2] * h; - k1[step4 + 1] = x[3] * h; - // k1[step4+2] = Ax_tx[step] * x[2] + Ax_ty[step] * x[3]; - k1[step4 + 3] = Ay_tx[step] * x[2] + Ay_ty[step] * x[3]; - - } // end of Runge-Kutta steps for derivatives dx/dtx - - for (i = 0; i < 4; ++i) { - if (i != 2) { J[10 + i] = x0[i] + c[0] * k1[i] + c[1] * k1[4 + i] + c[2] * k1[8 + i] + c[3] * k1[12 + i]; } - } - // end of derivatives dx/dtx - J[12] = fvec(1.); - J[14] = fvec(0.); - - // Derivatives dx/ty - // - - x0[0] = fvec(0.); - x0[1] = fvec(0.); - x0[2] = fvec(0.); - x0[3] = fvec(1.); - - // - // Runge-Kutta step for derivatives dx/dty - // - - for (step = 0; step < 4; ++step) { - for (i = 0; i < 4; ++i) { - if (step == 0) { - x[i] = x0[i]; // ty fixed - } - else if (i != 3) { - x[i] = x0[i] + b[step] * k1[step * 4 - 4 + i]; - } - } - step4 = step * 4; - k1[step4] = x[2] * h; - k1[step4 + 1] = x[3] * h; - k1[step4 + 2] = Ax_tx[step] * x[2] + Ax_ty[step] * x[3]; - // k1[step4+3] = Ay_tx[step] * x[2] + Ay_ty[step] * x[3]; - - } // end of Runge-Kutta steps for derivatives dx/dty - - for (i = 0; i < 3; ++i) { - J[15 + i] = x0[i] + c[0] * k1[i] + c[1] * k1[4 + i] + c[2] * k1[8 + i] + c[3] * k1[12 + i]; - } - // end of derivatives dx/dty - J[18] = fvec(1.); - J[19] = fvec(0.); - - // - // derivatives dx/dx and dx/dy - - for (i = 0; i < 10; ++i) { - J[i] = fvec(0.); - } - J[0] = fvec(1.); - J[6] = fvec(1.); - - fvec dqp = qp_in - qp0; - - { // update parameters - T.x += J[5 * 4 + 0] * dqp; - T.y += J[5 * 4 + 1] * dqp; - T.tx += J[5 * 4 + 2] * dqp; - T.ty += J[5 * 4 + 3] * dqp; - } - - // covariance matrix transport - - // // if ( C_in&&C_out ) CbmKFMath::multQtSQ( 5, J, C_in, C_out); // TODO - // j(0,2) = J[5*2 + 0]; - // j(1,2) = J[5*2 + 1]; - // j(2,2) = J[5*2 + 2]; - // j(3,2) = J[5*2 + 3]; - // - // j(0,3) = J[5*3 + 0]; - // j(1,3) = J[5*3 + 1]; - // j(2,3) = J[5*3 + 2]; - // j(3,3) = J[5*3 + 3]; - // - // j(0,4) = J[5*4 + 0]; - // j(1,4) = J[5*4 + 1]; - // j(2,4) = J[5*4 + 2]; - // j(3,4) = J[5*4 + 3]; - - const fvec c42 = T.C42, c43 = T.C43; - - const fvec cj00 = T.C00 + T.C20 * J[5 * 2 + 0] + T.C30 * J[5 * 3 + 0] + T.C40 * J[5 * 4 + 0]; - // const fvec cj10 = T.C10 + T.C21*J[5*2 + 0] + T.C31*J[5*3 + 0] + T.C41*J[5*4 + 0]; - const fvec cj20 = T.C20 + T.C22 * J[5 * 2 + 0] + T.C32 * J[5 * 3 + 0] + c42 * J[5 * 4 + 0]; - const fvec cj30 = T.C30 + T.C32 * J[5 * 2 + 0] + T.C33 * J[5 * 3 + 0] + c43 * J[5 * 4 + 0]; - - const fvec cj01 = T.C10 + T.C20 * J[5 * 2 + 1] + T.C30 * J[5 * 3 + 1] + T.C40 * J[5 * 4 + 1]; - const fvec cj11 = T.C11 + T.C21 * J[5 * 2 + 1] + T.C31 * J[5 * 3 + 1] + T.C41 * J[5 * 4 + 1]; - const fvec cj21 = T.C21 + T.C22 * J[5 * 2 + 1] + T.C32 * J[5 * 3 + 1] + c42 * J[5 * 4 + 1]; - const fvec cj31 = T.C31 + T.C32 * J[5 * 2 + 1] + T.C33 * J[5 * 3 + 1] + c43 * J[5 * 4 + 1]; - - // const fvec cj02 = T.C20*J[5*2 + 2] + T.C30*J[5*3 + 2] + T.C40*J[5*4 + 2]; - // const fvec cj12 = T.C21*J[5*2 + 2] + T.C31*J[5*3 + 2] + T.C41*J[5*4 + 2]; - const fvec cj22 = T.C22 * J[5 * 2 + 2] + T.C32 * J[5 * 3 + 2] + c42 * J[5 * 4 + 2]; - const fvec cj32 = T.C32 * J[5 * 2 + 2] + T.C33 * J[5 * 3 + 2] + c43 * J[5 * 4 + 2]; - - // const fvec cj03 = T.C20*J[5*2 + 3] + T.C30*J[5*3 + 3] + T.C40*J[5*4 + 3]; - // const fvec cj13 = T.C21*J[5*2 + 3] + T.C31*J[5*3 + 3] + T.C41*J[5*4 + 3]; - const fvec cj23 = T.C22 * J[5 * 2 + 3] + T.C32 * J[5 * 3 + 3] + c42 * J[5 * 4 + 3]; - const fvec cj33 = T.C32 * J[5 * 2 + 3] + T.C33 * J[5 * 3 + 3] + c43 * J[5 * 4 + 3]; - - T.C40 += c42 * J[5 * 2 + 0] + c43 * J[5 * 3 + 0] + T.C44 * J[5 * 4 + 0]; // cj40 - T.C41 += c42 * J[5 * 2 + 1] + c43 * J[5 * 3 + 1] + T.C44 * J[5 * 4 + 1]; // cj41 - T.C42 = c42 * J[5 * 2 + 2] + c43 * J[5 * 3 + 2] + T.C44 * J[5 * 4 + 2]; - T.C43 = c42 * J[5 * 2 + 3] + c43 * J[5 * 3 + 3] + T.C44 * J[5 * 4 + 3]; - - T.C00 = cj00 + J[5 * 2 + 0] * cj20 + J[5 * 3 + 0] * cj30 + J[5 * 4 + 0] * T.C40; - T.C10 = cj01 + J[5 * 2 + 0] * cj21 + J[5 * 3 + 0] * cj31 + J[5 * 4 + 0] * T.C41; - T.C11 = cj11 + J[5 * 2 + 1] * cj21 + J[5 * 3 + 1] * cj31 + J[5 * 4 + 1] * T.C41; - - T.C20 = J[5 * 2 + 2] * cj20 + J[5 * 3 + 2] * cj30 + J[5 * 4 + 2] * T.C40; - T.C30 = J[5 * 2 + 3] * cj20 + J[5 * 3 + 3] * cj30 + J[5 * 4 + 3] * T.C40; - T.C21 = J[5 * 2 + 2] * cj21 + J[5 * 3 + 2] * cj31 + J[5 * 4 + 2] * T.C41; - T.C31 = J[5 * 2 + 3] * cj21 + J[5 * 3 + 3] * cj31 + J[5 * 4 + 3] * T.C41; - T.C22 = J[5 * 2 + 2] * cj22 + J[5 * 3 + 2] * cj32 + J[5 * 4 + 2] * T.C42; - T.C32 = J[5 * 2 + 3] * cj22 + J[5 * 3 + 3] * cj32 + J[5 * 4 + 3] * T.C42; - T.C33 = J[5 * 2 + 3] * cj23 + J[5 * 3 + 3] * cj33 + J[5 * 4 + 3] * T.C43; -} - - -void L1Extrapolate0(L1TrackPar& T, // input track parameters (x,y,tx,ty,Q/p) and cov.matrix - fvec z_out, // extrapolate to this z position - L1FieldRegion& F) // magneti -{ - // - // Part of the analytic extrapolation formula with error (c_light*B*dz)^4/4! - // - - cnst c_light(0.000299792458); - - cnst c1(1.), c2i(1. / 2.), c3i(1. / 3.), c6i(1. / 6.), c12i(1. / 12.); - - const fvec qp = T.qp; - - - const fvec dz = (z_out - T.z); - const fvec dz2 = dz * dz; - - // construct coefficients - - const fvec x = T.tx; - const fvec y = T.ty; - // const fvec z = T.z; - const fvec xx = x * x; - const fvec xy = x * y; - const fvec yy = y * y; - const fvec Ay = -xx - c1; - const fvec Bx = yy + c1; - const fvec ct = c_light * sqrt(c1 + xx + yy); - - const fvec dzc2i = dz * c2i; - const fvec dz2c3i = dz2 * c3i; - const fvec dzc6i = dz * c6i; - const fvec dz2c12i = dz2 * c12i; - - const fvec sx = (F.cx0 + F.cx1 * dzc2i + F.cx2 * dz2c3i); - const fvec sy = (F.cy0 + F.cy1 * dzc2i + F.cy2 * dz2c3i); - const fvec sz = (F.cz0 + F.cz1 * dzc2i + F.cz2 * dz2c3i); - - const fvec Sx = (F.cx0 * c2i + F.cx1 * dzc6i + F.cx2 * dz2c12i); - const fvec Sy = (F.cy0 * c2i + F.cy1 * dzc6i + F.cy2 * dz2c12i); - const fvec Sz = (F.cz0 * c2i + F.cz1 * dzc6i + F.cz2 * dz2c12i); - - - const fvec ctdz = ct * dz; - const fvec ctdz2 = ct * dz2; - - const fvec j04 = ctdz2 * (Sx * xy + Sy * Ay + Sz * y); - const fvec j14 = ctdz2 * (Sx * Bx - Sy * xy - Sz * x); - const fvec j24 = ctdz * (sx * xy + sy * Ay + sz * y); - const fvec j34 = ctdz * (sx * Bx - sy * xy - sz * x); - - T.x += x * dz + j04 * qp; - T.y += y * dz + j14 * qp; - T.tx += j24 * qp; - T.ty += j34 * qp; - T.z += dz; - //T.t += sqrt((x-T.x)*(x-T.x)+(y-T.y)*(y-T.y)+dz*dz)/29.9792458f; - - // covariance matrix transport - - const fvec cj00 = T.C00 + T.C20 * dz + T.C40 * j04; - // const fvec cj10 = T.C10 + T.C21*dz + T.C41*j04; - const fvec cj20 = T.C20 + T.C22 * dz + T.C42 * j04; - const fvec cj30 = T.C30 + T.C32 * dz + T.C43 * j04; - - const fvec cj01 = T.C10 + T.C30 * dz + T.C40 * j14; - const fvec cj11 = T.C11 + T.C31 * dz + T.C41 * j14; - const fvec cj21 = T.C21 + T.C32 * dz + T.C42 * j14; - const fvec cj31 = T.C31 + T.C33 * dz + T.C43 * j14; - - // const fvec cj02 = T.C20 + T.C40*j24; - // const fvec cj12 = T.C21 + T.C41*j24; - const fvec cj22 = T.C22 + T.C42 * j24; - const fvec cj32 = T.C32 + T.C43 * j24; - - // const fvec cj03 = T.C30 + T.C40*j34; - // const fvec cj13 = T.C31 + T.C41*j34; - // const fvec cj23 = T.C32 + T.C42*j34; - const fvec cj33 = T.C33 + T.C43 * j34; - - T.C40 += T.C42 * dz + T.C44 * j04; // cj40 - T.C41 += T.C43 * dz + T.C44 * j14; // cj41 - T.C42 += T.C44 * j24; // cj42 - T.C43 += T.C44 * j34; // cj43 - - T.C00 = cj00 + dz * cj20 + j04 * T.C40; - T.C10 = cj01 + dz * cj21 + j04 * T.C41; - T.C11 = cj11 + dz * cj31 + j14 * T.C41; - - T.C20 = cj20 + j24 * T.C40; - T.C30 = cj30 + j34 * T.C40; - T.C21 = cj21 + j24 * T.C41; - T.C31 = cj31 + j34 * T.C41; - T.C22 = cj22 + j24 * T.C42; - T.C32 = cj32 + j34 * T.C42; - T.C33 = cj33 + j34 * T.C43; -} - - -void L1ExtrapolateTime(L1TrackPar& T, // input track parameters (x,y,tx,ty,Q/p) and cov.matrix - fvec dz, // extrapolate to this z position - fvec timeInfo) -{ - cnst c_light(29.9792458); - dz.setZero(timeInfo <= fvec::Zero()); - - T.t += dz * sqrt(T.tx * T.tx + T.ty * T.ty + fvec(1.)) / c_light; - - const fvec k1 = dz * T.tx / (c_light * sqrt(T.tx * T.tx + T.ty * T.ty + fvec(1.))); - const fvec k2 = dz * T.ty / (c_light * sqrt(T.tx * T.tx + T.ty * T.ty + fvec(1.))); - - fvec c52 = T.C52; - fvec c53 = T.C53; - - T.C50 += k1 * T.C20 + k2 * T.C30; - T.C51 += k1 * T.C21 + k2 * T.C31; - T.C52 += k1 * T.C22 + k2 * T.C32; - T.C53 += k1 * T.C32 + k2 * T.C33; - T.C54 += k1 * T.C42 + k2 * T.C43; - T.C55 += k1 * (T.C52 + c52) + k2 * (T.C53 + c53); -} - -void L1ExtrapolateLine(L1TrackPar& T, fvec z_out) -{ - fvec dz = z_out - T.z; - - T.x += T.tx * dz; - T.y += T.ty * dz; - T.z += dz; - - const fvec dzC32_in = dz * T.C32; - - T.C21 += dzC32_in; - T.C10 += dz * (T.C21 + T.C30); - - const fvec C20_in = T.C20; - - T.C20 += dz * T.C22; - T.C00 += dz * (T.C20 + C20_in); - - const fvec C31_in = T.C31; - - T.C31 += dz * T.C33; - T.C11 += dz * (T.C31 + C31_in); - T.C30 += dzC32_in; - - T.C40 += dz * T.C42; - T.C41 += dz * T.C43; -} - - -void L1ExtrapolateJXY // is not used currently - (fvec& tx, fvec& ty, - fvec& qp, // input track parameters - fvec dz, // extrapolate to this dz - L1FieldRegion& F, fvec& extrDx, fvec& extrDy, fvec extrJ[]) -{ - // - // Part of the analytic extrapolation formula with error (c_light*B*dz)^4/4! - // - - cnst c_light(0.000299792458); - - cnst c1(1.), c2(2.), c3(3.), c4(4.), c6(6.), c9(9.), c15(15.), c18(18.), c45(45.), c2i(1. / 2.), c6i(1. / 6.), - c12i(1. / 12.); - - fvec dz2 = dz * dz; - fvec dz3 = dz2 * dz; - - // construct coefficients - - fvec x = tx; - fvec y = ty; - fvec xx = x * x; - fvec xy = x * y; - fvec yy = y * y; - fvec y2 = y * c2; - fvec x2 = x * c2; - fvec x4 = x * c4; - fvec xx31 = xx * c3 + c1; - fvec xx159 = xx * c15 + c9; - - fvec Ay = -xx - c1; - fvec Ayy = x * (xx * c3 + c3); - fvec Ayz = -c2 * xy; - fvec Ayyy = -(c15 * xx * xx + c18 * xx + c3); - - fvec Ayy_x = c3 * xx31; - fvec Ayyy_x = -x4 * xx159; - - fvec Bx = yy + c1; - fvec Byy = y * xx31; - fvec Byz = c2 * xx + c1; - fvec Byyy = -xy * xx159; - - fvec Byy_x = c6 * xy; - fvec Byyy_x = -y * (c45 * xx + c9); - fvec Byyy_y = -x * xx159; - - // end of coefficients calculation - - fvec t2 = c1 + xx + yy; - fvec t = sqrt(t2); - fvec h = qp * c_light; - fvec ht = h * t; - - // get field integrals - fvec Fx0 = F.cx0; - fvec Fx1 = F.cx1 * dz; - fvec Fx2 = F.cx2 * dz2; - fvec Fy0 = F.cy0; - fvec Fy1 = F.cy1 * dz; - fvec Fy2 = F.cy2 * dz2; - fvec Fz0 = F.cz0; - fvec Fz1 = F.cz1 * dz; - fvec Fz2 = F.cz2 * dz2; - - // - - fvec Sx = (Fx0 * c2i + Fx1 * c6i + Fx2 * c12i); - fvec Sy = (Fy0 * c2i + Fy1 * c6i + Fy2 * c12i); - fvec Sz = (Fz0 * c2i + Fz1 * c6i + Fz2 * c12i); - - fvec Syz; - { - constexpr double d = 1. / 2520.; - cnst c00(21. * 20. * d), c01(21. * 5. * d), c02(21. * 2. * d), c10(7. * 30. * d), c11(7. * 9. * d), - c12(7. * 4. * d), c20(2. * 63. * d), c21(2. * 21. * d), c22(2. * 10. * d); - Syz = Fy0 * (c00 * Fz0 + c01 * Fz1 + c02 * Fz2) + Fy1 * (c10 * Fz0 + c11 * Fz1 + c12 * Fz2) - + Fy2 * (c20 * Fz0 + c21 * Fz1 + c22 * Fz2); - } - - fvec Syy; - { - constexpr double d = 1. / 2520.; - cnst c00(420. * d), c01(21. * 15. * d), c02(21. * 8. * d), c03(63. * d), c04(70. * d), c05(20. * d); - Syy = Fy0 * (c00 * Fy0 + c01 * Fy1 + c02 * Fy2) + Fy1 * (c03 * Fy1 + c04 * Fy2) + c05 * Fy2 * Fy2; - } - - fvec Syyy; - { - constexpr double d = 181440.; - cnst c000(7560 / d), c001(9 * 1008 / d), c002(5 * 1008 / d), c011(21 * 180 / d), c012(24 * 180 / d), - c022(7 * 180 / d), c111(540 / d), c112(945 / d), c122(560 / d), c222(112 / d); - fvec Fy22 = Fy2 * Fy2; - Syyy = Fy0 * (Fy0 * (c000 * Fy0 + c001 * Fy1 + c002 * Fy2) + Fy1 * (c011 * Fy1 + c012 * Fy2) + c022 * Fy22) - + Fy1 * (Fy1 * (c111 * Fy1 + c112 * Fy2) + c122 * Fy22) + c222 * Fy22 * Fy2; - } - - fvec SA1 = Sx * xy + Sy * Ay + Sz * y; - fvec SA1_x = Sx * y - Sy * x2; - fvec SA1_y = Sx * x + Sz; - - fvec SB1 = Sx * Bx - Sy * xy - Sz * x; - fvec SB1_x = -Sy * y - Sz; - fvec SB1_y = Sx * y2 - Sy * x; - - fvec SA2 = Syy * Ayy + Syz * Ayz; - fvec SA2_x = Syy * Ayy_x - Syz * y2; - fvec SA2_y = -Syz * x2; - fvec SB2 = Syy * Byy + Syz * Byz; - fvec SB2_x = Syy * Byy_x + Syz * x4; - fvec SB2_y = Syy * xx31; - - fvec SA3 = Syyy * Ayyy; - fvec SA3_x = Syyy * Ayyy_x; - fvec SB3 = Syyy * Byyy; - fvec SB3_x = Syyy * Byyy_x; - fvec SB3_y = Syyy * Byyy_y; - - fvec ht1 = ht * dz; - fvec ht2 = ht * ht * dz2; - fvec ht3 = ht * ht * ht * dz3; - fvec ht1SA1 = ht1 * SA1; - fvec ht1SB1 = ht1 * SB1; - fvec ht2SA2 = ht2 * SA2; - fvec ht2SB2 = ht2 * SB2; - fvec ht3SA3 = ht3 * SA3; - fvec ht3SB3 = ht3 * SB3; - - extrDx = (x + ht1SA1 + ht2SA2 + ht3SA3) * dz; - extrDy = (y + ht1SB1 + ht2SB2 + ht3SB3) * dz; - - fvec ctdz2 = c_light * t * dz2; - - fvec t2i = c1 / t2; - fvec xt2i = x * t2i; - fvec yt2i = y * t2i; - fvec tmp0 = ht1SA1 + c2 * ht2SA2 + c3 * ht3SA3; - fvec tmp1 = ht1SB1 + c2 * ht2SB2 + c3 * ht3SB3; - - extrJ[0] = dz * (c1 + xt2i * tmp0 + ht1 * SA1_x + ht2 * SA2_x + ht3 * SA3_x); // j02 - extrJ[1] = dz * (yt2i * tmp0 + ht1 * SA1_y + ht2 * SA2_y); // j03 - extrJ[2] = ctdz2 * (SA1 + c2 * ht1 * SA2 + c3 * ht2 * SA3); // j04 - extrJ[3] = dz * (xt2i * tmp1 + ht1 * SB1_x + ht2 * SB2_x + ht3 * SB3_x); // j12 - extrJ[4] = dz * (c1 + yt2i * tmp1 + ht1 * SB1_y + ht2 * SB2_y + ht3 * SB3_y); // j13 - extrJ[5] = ctdz2 * (SB1 + c2 * ht1 * SB2 + c3 * ht2 * SB3); // j14 -} - -void L1ExtrapolateJXY0(fvec& tx, - fvec& ty, // input track slopes - fvec dz, // extrapolate to this dz position - L1FieldRegion& F, fvec& extrDx, fvec& extrDy, fvec& J04, fvec& J14) -{ - cnst c_light(0.000299792458), c1(1.), c2i(0.5), c6i(1. / 6.), c12i(1. / 12.); - - fvec dz2 = dz * dz; - fvec dzc6i = dz * c6i; - fvec dz2c12i = dz2 * c12i; - - fvec xx = tx * tx; - fvec yy = ty * ty; - fvec xy = tx * ty; - - fvec Ay = -xx - c1; - fvec Bx = yy + c1; - - fvec ctdz2 = c_light * sqrt(c1 + xx + yy) * dz2; - - fvec Sx = F.cx0 * c2i + F.cx1 * dzc6i + F.cx2 * dz2c12i; - fvec Sy = F.cy0 * c2i + F.cy1 * dzc6i + F.cy2 * dz2c12i; - fvec Sz = F.cz0 * c2i + F.cz1 * dzc6i + F.cz2 * dz2c12i; - - extrDx = tx * dz; - extrDy = ty * dz; - J04 = ctdz2 * (Sx * xy + Sy * Ay + Sz * ty); - J14 = ctdz2 * (Sx * Bx - Sy * xy - Sz * tx); -} - -#undef cnst diff --git a/reco/L1/L1Algo/L1Extrapolation.h b/reco/L1/L1Algo/L1Extrapolation.h deleted file mode 100644 index f4ec3a4b5c8d5d8c53afe178ee69f9dd2dcee3a0..0000000000000000000000000000000000000000 --- a/reco/L1/L1Algo/L1Extrapolation.h +++ /dev/null @@ -1,60 +0,0 @@ -/* Copyright (C) 2007-2017 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt - SPDX-License-Identifier: GPL-3.0-only - Authors: Maksym Zyzak, Sergey Gorbunov [committer], Igor Kulakov */ - -#ifndef L1Extrapolation_h -#define L1Extrapolation_h - -#include "L1Def.h" -#include "L1Field.h" -#include "L1TrackPar.h" - -void L1Extrapolate // extrapolates track parameters and returns jacobian for extrapolation of CovMatrix - (L1TrackPar& T, // input track parameters (x,y,tx,ty,Q/p) and cov.matrix - fvec z_out, // extrapolate to this z position - fvec qp0, // use Q/p linearisation at this value - const L1FieldRegion& F, const fvec* w = nullptr); - -void L1Extrapolate0(L1TrackPar& T, // input track parameters (x,y,tx,ty,Q/p) and cov.matrix - fvec z_out, // extrapolate to this z position - L1FieldRegion& F); - -void L1ExtrapolateTime(L1TrackPar& T, // input track parameters (x,y,tx,ty,Q/p) and cov.matrix - fvec dz, // extrapolate to this z position - fvec timeInfo = fvec::One()); - -void L1ExtrapolateLine(L1TrackPar& T, fvec z_out); - -void L1ExtrapolateJXY // is not used currently - (fvec& tx, fvec& ty, - fvec& qp, // input track parameters - fvec dz, // extrapolate to this dz - L1FieldRegion& F, fvec& extrDx, fvec& extrDy, fvec extrJ[]); - -void L1ExtrapolateJXY0(fvec& tx, - fvec& ty, // input track slopes - fvec dz, // extrapolate to this dz position - L1FieldRegion& F, fvec& extrDx, fvec& extrDy, fvec& J04, fvec& J14); - - -inline void L1ExtrapolateXC00Line(const L1TrackPar& T, fvec z_out, fvec& x, fvec& C00) -{ - const fvec dz = (z_out - T.z); - x = T.x + T.tx * dz; - C00 = T.C00 + dz * (2 * T.C20 + dz * T.C22); -} - -inline void L1ExtrapolateYC11Line(const L1TrackPar& T, fvec z_out, fvec& y, fvec& C11) -{ - const fvec dz = (z_out - T.z); - y = T.y + T.ty * dz; - C11 = T.C11 + dz * (2 * T.C31 + dz * T.C33); -} - -inline void L1ExtrapolateC10Line(const L1TrackPar& T, fvec z_out, fvec& C10) -{ - const fvec dz = (z_out - T.z); - C10 = T.C10 + dz * (T.C21 + T.C30 + dz * T.C32); -} - -#endif diff --git a/reco/L1/L1Algo/L1Fit.cxx b/reco/L1/L1Algo/L1Fit.cxx deleted file mode 100644 index ffa2a3ab59b81a8fa0e77651db5fc1d1741ec865..0000000000000000000000000000000000000000 --- a/reco/L1/L1Algo/L1Fit.cxx +++ /dev/null @@ -1,12 +0,0 @@ -/* Copyright (C) 2021 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt - SPDX-License-Identifier: GPL-3.0-only - Authors: Sergey Gorbunov [committer] */ - -/// \file L1Fit.cxx -/// \brief Implementation of the L1Fit class -/// \author Sergey Gorbunov <se.gorbunov@gsi.de> -/// \date 15.03.2021 - -#include "L1Fit.h" - -//ClassImp(L1Fit); diff --git a/reco/L1/L1Algo/L1Fit.h b/reco/L1/L1Algo/L1Fit.h deleted file mode 100644 index b317ea963b45e2b8fe55726b2ff1564f33648ec4..0000000000000000000000000000000000000000 --- a/reco/L1/L1Algo/L1Fit.h +++ /dev/null @@ -1,88 +0,0 @@ -/* Copyright (C) 2021 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt - SPDX-License-Identifier: GPL-3.0-only - Authors: Sergey Gorbunov [committer] */ - -/// \file L1Fit.h -/// \brief Definition of the L1Fit class -/// \author Sergey Gorbunov <se.gorbunov@gsi.de> -/// \date 15.03.2021 - -#ifndef L1Fit_H -#define L1Fit_H - -#include "L1Constants.h" -#include "L1Def.h" -#include "L1Material.h" -#include "L1TrackPar.h" - -/// -/// A collection of fit routines used by the CA tracker -/// -class L1Fit { - -public: - /// constructor - L1Fit() {}; - - /// destructor - ~L1Fit() {}; - - /// set particle mass for the fit - void SetParticleMass(fvec mass) - { - fMass = mass; - fMass2 = mass * mass; - } - - /// get the particle mass - fvec GetParticleMass() const { return fMass; } - - /// get the particle mass squared - fvec GetParticleMass2() const { return fMass2; } - - /// === routines for material - - fvec BetheBlochIron(const float qp); - - fvec BetheBlochCarbon(const float qp); - - fvec BetheBlochAl(const float qp); - - static fvec ApproximateBetheBloch(const fvec& bg2); - - static fvec ApproximateBetheBloch(const fvec& bg2, const fvec& kp0, const fvec& kp1, const fvec& kp2, const fvec& kp3, - const fvec& kp4); - - void EnergyLossCorrection(L1TrackPar& T, const fvec& radThick, fvec& qp0, fvec direction, fvec w); - - template<int atomicZ> - void EnergyLossCorrection(float atomicA, float rho, float radLen, L1TrackPar& T, const fvec& radThick, fvec& qp0, - fvec direction, fvec w); - - void EnergyLossCorrectionAl(L1TrackPar& T, const fvec& radThick, fvec& qp0, fvec direction, fvec w); - - - void EnergyLossCorrectionCarbon(L1TrackPar& T, const fvec& radThick, fvec& qp0, fvec direction, fvec w); - - - void EnergyLossCorrectionIron(L1TrackPar& T, const fvec& radThick, fvec& qp0, fvec direction, fvec w); - - void L1AddMaterial(L1TrackPar& T, fvec radThick, fvec qp0, fvec w); - - void L1AddThickMaterial(L1TrackPar& T, fvec radThick, fvec qp0, fvec w, fvec thickness, bool fDownstream); - - void L1AddPipeMaterial(L1TrackPar& T, fvec qp0, fvec w); - - void L1AddTargetMaterial(L1TrackPar& T, fvec qp0, fvec w); - - const fvec PipeRadThick = 7.87e-3f; // 0.7 mm Aluminium // TODO: ! - const fvec TargetRadThick = 3.73e-2f * 2; // 250 mum Gold // TODO: ! - -private: - fvec fMass {L1Constants::phys::kMuonMass}; // muon mass by default - fvec fMass2 {fMass * fMass}; - - //ClassDefNV(L1Fit, 0) -}; - -#endif diff --git a/reco/L1/L1Algo/L1FitMaterial.cxx b/reco/L1/L1Algo/L1FitMaterial.cxx deleted file mode 100644 index 8491999c77e9171a5ef109435d9847a6d96d4c7c..0000000000000000000000000000000000000000 --- a/reco/L1/L1Algo/L1FitMaterial.cxx +++ /dev/null @@ -1,516 +0,0 @@ -/* Copyright (C) 2021 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt - SPDX-License-Identifier: GPL-3.0-only - Authors: Sergey Gorbunov [committer] */ - -#include "L1Def.h" -#include "L1Fit.h" -#include "L1Material.h" -#include "L1TrackPar.h" - -//#define cnst static const fvec -#define cnst const fvec - -//const fvec PipeRadThick = 7.87e-3f; // 0.7 mm Aluminium -//const fvec TargetRadThick = 3.73e-2f * 2; // 250 mum Gold - -fvec L1Fit::BetheBlochIron(const float qp) -{ - - float K = 0.000307075; // [GeV*cm^2/g] - float z = (qp > 0.) ? 1 : -1.; - float Z = 26; - float A = 55.845; - - float M = 0.10565f; - float p = fabs(1. / qp); //GeV - float E = sqrt(M * M + p * p); - float beta = p / E; - float betaSq = beta * beta; - float gamma = E / M; - float gammaSq = gamma * gamma; - - float I = 260 * 1e-9; // GeV - - float me = 0.000511; // GeV - float ratio = me / M; - float Tmax = (2 * me * betaSq * gammaSq) / (1 + 2 * gamma * ratio + ratio * ratio); - - // density correction - float dc = 0.; - if (p > 0.5) { // for particles above 1 Gev - float rho = 7.87; - float hwp = 28.816 * sqrt(rho * Z / A) * 1e-9; // GeV - dc = log(hwp / I) + log(beta * gamma) - 0.5; - } - - return K * z * z * (Z / A) * (1. / betaSq) * (0.5 * log(2 * me * betaSq * gammaSq * Tmax / (I * I)) - betaSq - dc); -} - -fvec L1Fit::BetheBlochCarbon(const float qp) -{ - - constexpr float K = 0.000307075; // GeV * g^-1 * cm^2 - float z = (qp > 0.) ? 1 : -1.; - constexpr float Z = 6; - constexpr float A = 12.011; - - constexpr float M = 0.10565f; - float p = fabs(1. / qp); //GeV - float E = sqrt(M * M + p * p); - float beta = p / E; - float betaSq = beta * beta; - float gamma = E / M; - float gammaSq = gamma * gamma; - - const float I = 16 * std::pow(6, 0.9) * 1e-9; // GeV mean excitation energy in eV - - constexpr float me = 0.000511; // GeV - constexpr float ratio = me / M; - float Tmax = (2 * me * betaSq * gammaSq) / (1 + 2 * gamma * ratio + ratio * ratio); - - // density correction - float dc = 0.; - if (p > 0.5) { // for particles above 1 Gev - constexpr float rho = 2.265; - const float hwp = 28.816 * sqrt(rho * Z / A) * 1e-9; // GeV - dc = log(hwp / I) + log(beta * gamma) - 0.5; - } - - return K * z * z * (Z / A) * (1. / betaSq) * (0.5 * log(2 * me * betaSq * gammaSq * Tmax / (I * I)) - betaSq - dc); -} - -fvec L1Fit::BetheBlochAl(const float qp) -{ - - constexpr float K = 0.000307075; // GeV * g^-1 * cm^2 - float z = (qp > 0.) ? 1 : -1.; - constexpr float Z = 13; - constexpr float A = 26.981; - - constexpr float M = 0.10565f; - float p = fabs(1. / qp); //GeV - float E = sqrt(M * M + p * p); - float beta = p / E; - float betaSq = beta * beta; - float gamma = E / M; - float gammaSq = gamma * gamma; - - const float I = 16 * std::pow(6, 0.9) * 1e-9; // GeV mean excitation energy in eV - - constexpr float me = 0.000511; // GeV - constexpr float ratio = me / M; - float Tmax = (2 * me * betaSq * gammaSq) / (1 + 2 * gamma * ratio + ratio * ratio); - - // density correction - float dc = 0.; - if (p > 0.5) { // for particles above 1 Gev - constexpr float rho = 2.70; - const float hwp = 28.816 * sqrt(rho * Z / A) * 1e-9; // GeV - dc = log(hwp / I) + log(beta * gamma) - 0.5; - } - - return K * z * z * (Z / A) * (1. / betaSq) * (0.5 * log(2 * me * betaSq * gammaSq * Tmax / (I * I)) - betaSq - dc); -} - -fvec L1Fit::ApproximateBetheBloch(const fvec& bg2) -{ - // - // This is the parameterization of the Bethe-Bloch formula inspired by Geant. - // - // bg2 - (beta*gamma)^2 - // kp0 - density [g/cm^3] - // kp1 - density effect first junction point - // kp2 - density effect second junction point - // kp3 - mean excitation energy [GeV] - // kp4 - mean Z/A - // - // The default values for the kp* parameters are for silicon. - // The returned value is in [GeV/(g/cm^2)]. - // - - const fvec kp0 = 2.33f; - const fvec kp1 = 0.20f; - const fvec kp2 = 3.00f; - const fvec kp3 = 173e-9f; - const fvec kp4 = 0.49848f; - - constexpr float mK = 0.307075e-3f; // [GeV*cm^2/g] - constexpr float _2me = 1.022e-3f; // [GeV/c^2] - const fvec rho = kp0; - const fvec x0 = kp1 * 2.303f; - const fvec x1 = kp2 * 2.303f; - const fvec mI = kp3; - const fvec mZA = kp4; - const fvec maxT = _2me * bg2; // neglecting the electron mass - - //*** Density effect - fvec d2(0.f); - const fvec x = 0.5f * log(bg2); - const fvec lhwI = log(28.816f * 1e-9f * sqrt(rho * mZA) / mI); - - fmask init = x > x1; - d2 = iif(init, lhwI + x - 0.5f, fvec::Zero()); - const fvec r = (x1 - x) / (x1 - x0); - init = (x > x0) & (x1 > x); - d2 = iif(init, lhwI + x - 0.5f + (0.5f - lhwI - x0) * r * r * r, d2); - - return mK * mZA * (fvec(1.f) + bg2) / bg2 - * (0.5f * log(_2me * bg2 * maxT / (mI * mI)) - bg2 / (fvec(1.f) + bg2) - d2); -} - -fvec L1Fit::ApproximateBetheBloch(const fvec& bg2, const fvec& kp0, const fvec& kp1, const fvec& kp2, const fvec& kp3, - const fvec& kp4) -{ - // - // This is the parameterization of the Bethe-Bloch formula inspired by Geant. - // - // bg2 - (beta*gamma)^2 - // kp0 - density [g/cm^3] - // kp1 - density effect first junction point - // kp2 - density effect second junction point - // kp3 - mean excitation energy [GeV] - // kp4 - mean Z/A - // - // The default values for the kp* parameters are for silicon. - // The returned value is in [GeV/(g/cm^2)]. - // - - // const fvec &kp0 = 2.33f; - // const fvec &kp1 = 0.20f; - // const fvec &kp2 = 3.00f; - // const fvec &kp3 = 173e-9f; - // const fvec &kp4 = 0.49848f; - - constexpr float mK = 0.307075e-3f; // [GeV*cm^2/g] - constexpr float _2me = 1.022e-3f; // [GeV/c^2] - const fvec& rho = kp0; - const fvec x0 = kp1 * 2.303f; - const fvec x1 = kp2 * 2.303f; - const fvec& mI = kp3; - const fvec& mZA = kp4; - const fvec maxT = _2me * bg2; // neglecting the electron mass - - //*** Density effect - fvec d2(0.f); - const fvec x = 0.5f * log(bg2); - const fvec lhwI = log(28.816f * 1e-9f * sqrt(rho * mZA) / mI); - - fmask init = x > x1; - d2 = iif(init, lhwI + x - 0.5f, fvec::Zero()); - const fvec r = (x1 - x) / (x1 - x0); - init = (x > x0) & (x1 > x); - d2 = iif(init, lhwI + x - 0.5f + (0.5f - lhwI - x0) * r * r * r, d2); - - return mK * mZA * (fvec(1.f) + bg2) / bg2 - * (0.5f * log(_2me * bg2 * maxT / (mI * mI)) - bg2 / (fvec(1.f) + bg2) - d2); -} - - -void L1Fit::EnergyLossCorrection(L1TrackPar& T, const fvec& radThick, fvec& qp0, fvec direction, fvec w) -{ - const fvec p2 = 1.f / (T.qp * T.qp); - const fvec E2 = fMass2 + p2; - - // fvec qp =T.qp; - - const fvec bethe = ApproximateBetheBloch(p2 / fMass2); - - // fvec bethe2 = BetheBlochAl(qp[0]); - - - fvec tr = sqrt(fvec(1.f) + T.tx * T.tx + T.ty * T.ty); - - fvec dE = bethe * radThick * tr * 9.34961f * 2.33f; - // fvec dE2 = bethe2 * radThick*tr*2.265f* 2.70f; - - // dE = fabs(dE_);//dE2;//bethe * radThick*tr * 9.34961f*2.33f ; - - - 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()); - - qp0 *= corr; - // fvec dqp = CalcQpAfterEloss(qp[0], (direction*dE)[0], fMass2[0]); - // qp0 = dqp; - // T.qp = dqp; - T.qp *= corr; - T.C40 *= corr; - T.C41 *= corr; - T.C42 *= corr; - T.C43 *= corr; - T.C44 *= corr * corr; -} - -template<int atomicZ> -void L1Fit::EnergyLossCorrection(float atomicA, float rho, float radLen, L1TrackPar& T, const fvec& radThick, fvec& qp0, - fvec direction, fvec w) -{ - const fvec p2 = 1.f / (T.qp * T.qp); - const fvec E2 = fMass2 + p2; - - fvec qp = T.qp; - - fvec i; - if (atomicZ < 13) i = (12. * atomicZ + 7.) * 1.e-9; - else - i = (9.76 * atomicZ + 58.8 * std::pow(atomicZ, -0.19)) * 1.e-9; - - const fvec bethe = ApproximateBetheBloch(p2 / fMass2, rho, 0.20, 3.00, i, atomicZ / atomicA); - - // const fvec bethe = ApproximateBetheBloch( p2/fMass2 ); - - // fvec bethe2 = BetheBlochAl(qp[0]); - - fvec tr = sqrt(fvec(1.f) + T.tx * T.tx + T.ty * T.ty); - - // fvec dE2 = 2*bethe * radThick*tr * 9.34961f*2.33f ; - fvec dE = bethe * radThick * tr * radLen * rho; - - 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()); - - qp0 *= corr; - // fvec dqp = CalcQpAfterEloss(qp[0], (direction*dE)[0], fMass2[0]); - // qp0 = dqp; - // T.qp = dqp; - T.qp *= corr; - - fvec P = fvec(fabs(1. / qp[0])); // GeV - - fvec Z(atomicZ); - fvec A(atomicA); - fvec RHO(rho); - - fvec STEP = radThick * tr * radLen; - fvec EMASS(0.511 * 1e-3); // GeV - - fvec BETA = P / sqrt(E2); - fvec GAMMA = sqrt(E2) / fMass; - - // Calculate xi factor (KeV). - fvec XI = (fvec(153.5) * Z * STEP * RHO) / (A * BETA * BETA); - - // Maximum energy transfer to atomic electron (KeV). - fvec ETA = BETA * GAMMA; - fvec ETASQ = ETA * ETA; - fvec RATIO = EMASS / fMass; - fvec F1 = fvec(2.) * EMASS * ETASQ; - fvec F2 = fvec(1.) + fvec(2.) * RATIO * GAMMA + RATIO * RATIO; - fvec EMAX = fvec(1e6) * F1 / F2; - - fvec DEDX2 = XI * EMAX * (fvec(1.) - (BETA * BETA / fvec(2.))) * fvec(1e-12); - - fvec P2 = P * P; - fvec SDEDX = ((E2) *DEDX2) / (P2 * P2 * P2); - - - // T.C40 *= corr; - // T.C41 *= corr; - // T.C42 *= corr; - // T.C43 *= corr; - // T.C44 *= corr*corr; - T.C44 += abs(SDEDX); - - // T.C40 *= corr; - // T.C41 *= corr; - // T.C42 *= corr; - // T.C43 *= corr; - // T.C44 *= corr*corr; -} - -void L1Fit::EnergyLossCorrectionAl(L1TrackPar& T, const fvec& radThick, fvec& qp0, 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, T, radThick, qp0, direction, w); -} - -void L1Fit::EnergyLossCorrectionCarbon(L1TrackPar& T, const fvec& radThick, fvec& qp0, 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, T, radThick, qp0, direction, w); -} - -void L1Fit::EnergyLossCorrectionIron(L1TrackPar& T, const fvec& radThick, fvec& qp0, 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, T, radThick, qp0, direction, w); -} - - -void L1Fit::L1AddMaterial(L1TrackPar& T, fvec radThick, fvec qp0, fvec w) -{ - cnst ONE = 1.; - - fvec tx = T.tx; - fvec ty = T.ty; - fvec txtx = tx * tx; - fvec tyty = ty * ty; - fvec txtx1 = txtx + ONE; - fvec h = txtx + tyty; - fvec t = sqrt(txtx1 + tyty); - fvec h2 = h * h; - fvec qp0t = qp0 * 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+fMass2*qp0*qp0t)*radThick*s0*s0 ); - fvec a = ((t + fMass2 * qp0 * qp0t) * radThick * s0 * s0); - - T.C22 += w * txtx1 * a; - T.C32 += w * tx * ty * a; - T.C33 += w * (ONE + tyty) * a; -} - - -// inline void L1Fit::L1AddThickMaterial( L1TrackPar &T, fvec radThick, fvec qp0, fvec thickness=0, fvec w = 1, fvec mass2 = 0.10565f*0.10565f, bool fDownstream = 1 ) -// { -// cnst ONE = 1.; -// -// fvec tx = T.tx; -// fvec ty = T.ty; -// fvec txtx = tx*tx; -// fvec tyty = ty*ty; -// fvec txtx1 = txtx + ONE; -// fvec h = txtx + tyty; -// fvec t = sqrt(txtx1 + tyty); -// fvec h2 = h*h; -// fvec qp0t = qp0*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+mass2*qp0*qp0t)*radThick*s0*s0 ); -// -// fvec D = (fDownstream) ? 1. : -1.; -// fvec T23 = (thickness * thickness) / 3.0; -// fvec T2 = thickness / 2.0; -// -// -// -// -// T.C00 += w*txtx1*a * T23; -// T.C10 += w*tx*ty*a * T23; -// T.C20 += w*txtx1*a * D * T2; -// T.C30 += w*tx*ty*a * D * T2; -// -// T.C11 += w*(ONE+tyty)*a * T23; -// T.C21 += w*tx*ty*a * D * T2; -// T.C31 += w*(ONE+tyty)*a * D * T2; -// -// T.C22 += w*txtx1*a; -// T.C32 += w*tx*ty*a; -// T.C33 += w*(ONE+tyty)*a; -// -// } - -void L1Fit::L1AddThickMaterial(L1TrackPar& T, fvec radThick, fvec qp0, fvec w, fvec thickness, bool fDownstream) -{ - cnst ONE = 1.; - - fvec tx = T.tx; - fvec ty = T.ty; - fvec txtx = tx * tx; - fvec tyty = ty * ty; - fvec txtx1 = txtx + ONE; - fvec h = txtx + tyty; - fvec t = sqrt(txtx1 + tyty); - fvec h2 = h * h; - fvec qp0t = qp0 * 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+fMass2*qp0*qp0t)*radThick*s0*s0 ); - fvec a = ((t + fMass2 * qp0 * qp0t) * radThick * s0 * s0); - - fvec D = (fDownstream) ? fvec(1.) : fvec(-1.); - fvec T23 = (thickness * thickness) / fvec(3.0); - fvec T2 = thickness / fvec(2.0); - - - T.C00 += w * txtx1 * a * T23; - T.C10 += w * tx * ty * a * T23; - T.C20 += w * txtx1 * a * D * T2; - T.C30 += w * tx * ty * a * D * T2; - - T.C11 += w * (ONE + tyty) * a * T23; - T.C21 += w * tx * ty * a * D * T2; - T.C31 += w * (ONE + tyty) * a * D * T2; - - T.C22 += w * txtx1 * a; - T.C32 += w * tx * ty * a; - T.C33 += w * (ONE + tyty) * a; -} - - -void L1Fit::L1AddPipeMaterial(L1TrackPar& T, fvec qp0, fvec w) -{ - cnst ONE = 1.f; - - // static const fscal RadThick=0.0009f;//0.5/18.76; - // static const fscal logRadThick=log(RadThick); - //const fscal RadThick=0.0009f;//0.5/18.76; - - const fscal logRadThick = log(PipeRadThick[0]); - fvec tx = T.tx; - fvec ty = T.ty; - fvec txtx = tx * tx; - fvec tyty = ty * ty; - fvec txtx1 = txtx + ONE; - fvec h = txtx + tyty; - fvec t = sqrt(txtx1 + tyty); - fvec h2 = h * h; - fvec qp0t = qp0 * 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 * fvec(logRadThick) + c3 * h + h2 * (c4 + c5 * h + c6 * h2)) * qp0t; - //fvec a = ( (ONE+fMass2*qp0*qp0t)*RadThick*s0*s0 ); - fvec a = ((t + fMass2 * qp0 * qp0t) * PipeRadThick * s0 * s0); - - T.C22 += w * txtx1 * a; - T.C32 += w * tx * ty * a; - T.C33 += w * (ONE + tyty) * a; -} - -void L1Fit::L1AddTargetMaterial(L1TrackPar& T, fvec qp0, fvec w) -{ - cnst ONE = 1.f; - - const fscal logRadThick = log(TargetRadThick[0]); - fvec tx = T.tx; - fvec ty = T.ty; - fvec txtx = tx * tx; - fvec tyty = ty * ty; - fvec txtx1 = txtx + ONE; - fvec h = txtx + tyty; - fvec t = sqrt(txtx1 + tyty); - fvec h2 = h * h; - fvec qp0t = qp0 * 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 * fvec(logRadThick) + c3 * h + h2 * (c4 + c5 * h + c6 * h2)) * qp0t; - //fvec a = ( (ONE+fMass2*qp0*qp0t)*RadThick*s0*s0 ); - fvec a = ((t + fMass2 * qp0 * qp0t) * TargetRadThick * s0 * s0); - - T.C22 += w * txtx1 * a; - T.C32 += w * tx * ty * a; - T.C33 += w * (ONE + tyty) * a; -} - -#undef cnst