20 std::unique_ptr < double[] > deriv(
new double[3*NTRK+3]);
22 std::vector< std::array<double,6> > pmom(NTRK);
23 double dm2dpx, dm2dpy, dm2dpz, ee, pt,
px,
py,
pz, cth;
32 for(
int it=0; it<NTRK; it++){
36 pmom[it][4] = pt = std::abs( constBF/trk->fitP[2] );
37 pmom[it][5] = cth = 1. /tan(trk->fitP[0]);
38 pmom[it][0] =
px = pt * cos(trk->fitP[1]);
39 pmom[it][1] =
py = pt * sin(trk->fitP[1]);
40 pmom[it][2] =
pz = pt * cth;
41 double mmm=trk->getMass();
46 ptot[3] += pmom[it][3];
50 for(
int it = 0; it < NTRK; ++it) {
58 dm2dpx = (ptot[3] / ee *
px - ptot[0]) * 2.;
59 dm2dpy = (ptot[3] / ee *
py - ptot[1]) * 2.;
60 dm2dpz = (ptot[3] / ee *
pz - ptot[2]) * 2.;
61 deriv[it*3 + 0] = dm2dpz * ((-pt) * (cth * cth + 1.));
62 deriv[it*3 + 1] = -dm2dpx *
py + dm2dpy *
px;
63 deriv[it*3 + 2] = (-dm2dpx *
px - dm2dpy*
py - dm2dpz*
pz)/vk->
TrackList[it]->fitP[2];
65 deriv[it*3 + 0] = deriv[it*3 + 1] = deriv[it*3 + 2] = 0.;
70 for(
int i=0; i<NTRK*3; i++){
72 for(
int j=0; j<NTRK*3; j++){
76 if(std::isnan(tmp)) {tmp=0.;}
77 if(std::isinf(tmp)) {tmp=0.;}
80 std::feclearexcept(FE_ALL_EXCEPT);
81 if(covM2<1.e-10)covM2=1.e-10;
83 (*MASS) = (ptot[3]-ptot[2])*(ptot[3]+ptot[2])-ptot[1]*ptot[1]-ptot[0]*ptot[0];
84 if((*MASS)<1.e-10) (*MASS) = 1.e-10;
85 (*MASS) = sqrt(*MASS);
86 (*sigM) = sqrt(covM2) / 2. / (*MASS);
static void getMagFld(const double, const double, const double, double &, double &, double &, const VKalVrtControlBase *)