11 #ifndef PNDFTSCATRACKPARAM_H 12 #define PNDFTSCATRACKPARAM_H 35 : x(v.
X()[i]), y(v.
Y()[i]), tx(v.Tx()[i]), ty(v.Ty()[i]), qp(v.
QP()[i]), z(v.
Z()[i]), C00(v.
Cov(0)[i]), C10(v.
Cov(1)[i]), C11(v.
Cov(2)[i]), C20(v.
Cov(3)[i]), C21(v.
Cov(4)[i]),
36 C22(v.
Cov(5)[i]), C30(v.
Cov(6)[i]), C31(v.
Cov(7)[i]), C32(v.
Cov(8)[i]), C33(v.
Cov(9)[i]), C40(v.
Cov(10)[i]), C41(v.
Cov(11)[i]), C42(v.
Cov(12)[i]), C43(v.
Cov(13)[i]),
37 C44(v.
Cov(14)[i]), chi2(v.
Chi2()[i]), ndf(v.
NDF()[i]), fAlpha(v.
Angle()[i])
41 float X0()
const {
return z; }
42 float X1()
const {
return x; }
43 float X2()
const {
return y; }
44 float Tx1()
const {
return tx; }
45 float Tx2()
const {
return ty; }
47 float X()
const {
return x; }
48 float Y()
const {
return y; }
49 float Z()
const {
return z; }
50 float Tx()
const {
return tx; }
51 float Ty()
const {
return ty; }
52 float QP()
const {
return qp; }
54 float Chi2()
const {
return chi2; }
55 int NDF()
const {
return ndf; }
58 float Angle()
const {
return fAlpha; }
60 float Err2X1()
const {
return Err2X(); }
62 float Err2Tx1()
const {
return Err2Tx(); }
63 float Err2Tx2()
const {
return Err2Ty(); }
65 float Err2X()
const {
return C00; }
66 float Err2Y()
const {
return C11; }
67 float Err2Tx()
const {
return C22; }
68 float Err2Ty()
const {
return C33; }
69 float Err2QP()
const {
return C44; }
72 float *
Par() {
return &x; }
73 float *
Cov() {
return &C00; }
75 float Par(
int i)
const 88 float Cov(
int i)
const 111 void SetCov(
int i,
float v)
114 case 0: C00 =
v;
break;
115 case 1: C10 =
v;
break;
116 case 2: C11 =
v;
break;
117 case 3: C20 =
v;
break;
118 case 4: C21 =
v;
break;
119 case 5: C22 =
v;
break;
120 case 6: C30 =
v;
break;
121 case 7: C31 =
v;
break;
122 case 8: C32 =
v;
break;
123 case 9: C33 =
v;
break;
124 case 10: C40 =
v;
break;
125 case 11: C41 =
v;
break;
126 case 12: C42 =
v;
break;
127 case 13: C43 =
v;
break;
128 case 14: C44 =
v;
break;
132 void SetX(
float v) { x =
v; }
133 void SetY(
float v) { y =
v; }
134 void SetZ(
float v) { z =
v; }
136 void SetTX(
float v) { tx =
v; }
137 void SetTY(
float v) { ty =
v; }
138 void SetQP(
float v) { qp =
v; }
140 void SetChi2(
float v) { chi2 =
v; }
141 void SetNDF(
int v) { ndf =
v; }
148 return TransportToX0Line(x_);
155 const float_m &mask = v.
Transport(hit, param);
164 const float_m &mask = v.
Filter(hit, param);
171 x = y = tx = ty = qp = z = C00 = C10 = C11 = C20 = C21 = C22 = C30 = C31 = C32 = C33 = C40 = C41 = C42 = C43 = C44 = 0.f;
176 bool TransportToX0Line(
float x0);
178 bool IsValid()
const {
return chi2 != -1; }
181 bool Rotate(
float) {
return 1; };
184 float x, y, tx, ty, qp, z, C00, C10, C11, C20, C21, C22, C30, C31, C32, C33, C40, C41, C42, C43, C44;
192 inline bool PndFTSCATrackParam::TransportToX0Line(
float x0_out)
194 float dz = (x0_out - z);
200 const float dzC32_in = dz * C32;
203 C10 += dz * (C21 + C30);
205 const float C20_in = C20;
208 C00 += dz * (C20 + C20_in);
210 const float C31_in = C31;
213 C11 += dz * (C31 + C31_in);
232 for (
int j = 0; j < 5; ++j)
233 fP[j] = v.
Par()[j][
i];
234 for (
int j = 0; j < 15; ++j)
235 fC[j] = v.
Cov()[j][
i];
238 float X0()
const {
return fX; }
239 float X1()
const {
return Y(); }
240 float X2()
const {
return Z(); }
242 float X()
const {
return fX; }
243 float Y()
const {
return fP[0]; }
244 float Z()
const {
return fP[1]; }
246 float DzDs()
const {
return fP[3]; }
247 float QPt()
const {
return fP[4]; }
252 float Chi2()
const {
return fChi2; }
253 int NDF()
const {
return fNDF; }
258 float Err2Y()
const {
return fC[0]; }
259 float Err2Z()
const {
return fC[2]; }
264 float Angle()
const {
return fAlpha; }
266 float Kappa(
float Bz)
const {
return fP[4] * Bz; }
271 const float *
Par()
const {
return fP; }
272 const float *
Cov()
const {
return fC; }
274 bool GetXYZPxPyPzQ(
float &x,
float &y,
float &z,
float &px,
float &py,
float &
pz,
int &q,
float cov[21])
const;
278 void GetDCAPoint(
float x,
float y,
float z,
float &px,
float &py,
float &pz,
float Bz)
const;
280 bool TransportToX0(
float x,
float Bz,
float maxSinPhi = .999);
294 for (
int i = 0; i < 5; i++)
296 for (
int i = 0; i < 15; i++)
301 float S(
float x,
float y,
float Bz)
const;
321 const float ex =
CosPhi();
322 const float ey =
SinPhi();
323 const float k =
QPt() * Bz;
324 const float dx = x -
X();
326 const float ey1 = k * dx + ey;
337 const float dx2 = dx * dx;
338 const float ss = ey + ey1;
339 const float cc = ex + ex1;
344 const float cci = 1.f / cc;
345 const float exi = 1.f / ex;
346 const float ex1i = 1.f / ex1;
348 const float tg = ss * cci;
350 const float dy = dx * tg;
355 float dSin = dl * k * 0.5;
361 const float dz = dS *
DzDs();
369 const float h2 = dx * (1.f + ey * ey1 + ex * ex1) * exi * ex1i * cci;
370 const float h4 = dx2 * (cc + ss * ey1 * ex1i) * cci * cci * Bz;
371 const float dxBz = dx * Bz;
379 const float c00 = fC[0];
380 const float c10 = fC[1];
381 const float c11 = fC[2];
382 const float c20 = fC[3];
383 const float c21 = fC[4];
384 const float c22 = fC[5];
385 const float c30 = fC[6];
386 const float c31 = fC[7];
387 const float c32 = fC[8];
388 const float c33 = fC[9];
389 const float c40 = fC[10];
390 const float c41 = fC[11];
391 const float c42 = fC[12];
392 const float c43 = fC[13];
393 const float c44 = fC[14];
395 fC[0] = (c00 + h2 * h2 * c22 + h4 * h4 * c44 + 2.f * (h2 * c20 + h4 * c40 + h2 * h4 * c42));
397 fC[1] = c10 + h2 * c21 + h4 * c41 + dS * (c30 + h2 * c32 + h4 * c43);
398 fC[2] = c11 + 2.f * dS * c31 + dS * dS * c33;
400 fC[3] = c20 + h2 * c22 + h4 * c42 + dxBz * (c40 + h2 * c42 + h4 * c44);
401 fC[4] = c21 + dS * c32 + dxBz * (c41 + dS * c43);
402 fC[5] = c22 + 2.f * dxBz * c42 + dxBz * dxBz * c44;
404 fC[6] = c30 + h2 * c32 + h4 * c43;
405 fC[7] = c31 + dS * c33;
406 fC[8] = c32 + dxBz * c43;
409 fC[10] = c40 + h2 * c42 + h4 * c44;
410 fC[11] = c41 + dS * c43;
411 fC[12] = c42 + dxBz * c44;
415 fC[0] = (fC[0] + h2 * h2 * fC[5] + h4 * h4 * fC[14] + 2 * (h2 * fC[3] + h4 * fC[10] + h2 * h4 * fC[12]));
417 fC[1] = fC[1] + h2 * fC[4] + h4 * fC[11] + dS * (fC[6] + h2 * fC[8] + h4 * fC[13]);
418 fC[2] = fC[2] + 2 * dS * fC[7] + dS * dS * fC[9];
420 fC[3] = fC[3] + h2 * fC[5] + h4 * fC[12] + dxBz * (fC[10] + h2 * fC[12] + h4 * fC[14]);
421 fC[4] = fC[4] + dS * fC[8] + dxBz * (fC[11] + dS * fC[13]);
422 fC[5] = fC[5] + 2 * dxBz * fC[12] + dxBz * dxBz * fC[14];
424 fC[6] = fC[6] + h2 * fC[8] + h4 * fC[13];
425 fC[7] = fC[7] + dS * fC[9];
426 fC[8] = fC[8] + dxBz * fC[13];
429 fC[10] = fC[10] + h2 * fC[12] + h4 * fC[14];
430 fC[11] = fC[11] + dS * fC[13];
431 fC[12] = fC[12] + dxBz * fC[14];
static T ASin(const T &x)
basic_istream< char, char_traits< char > > istream
bool GetXYZPxPyPzQ(float &x, float &y, float &z, float &px, float &py, float &pz, int &q, float cov[21]) const
float Kappa(float Bz) const
bool Transport(const FTSCAHit &hit, const PndFTSCAParam ¶m)
bool Rotate(float alpha, float maxSinPhi=.999)
friend F32vec4 sqrt(const F32vec4 &a)
float Err2QMomentum() const
static T Sqrt(const T &x)
friend std::istream & operator>>(std::istream &, PndFTSCATrackParam &)
friend std::ostream & operator<<(std::ostream &, const PndFTSCATrackParam &)
PndFTSCATrackParam(const TrackParamVector &v, int i)
void GetDCAPoint(float x, float y, float z, float &px, float &py, float &pz, float Bz) const
float_m Transport(const int_v &ista, const PndFTSCAParam ¶m, const float_m &mask=float_m(true))
const float * Par() const
const float * Cov() const
PndFTSCATrackParam TrackParam
bool TransportToX0(float x, float Bz, float maxSinPhi=.999)
basic_ostream< char, char_traits< char > > ostream
const float_v & Cov(int i) const
void ConvertTrackParamToVector(PndFTSCATrackParam t0[float_v::Size], int nTracksV)
const float_v & Par(int i) const
float_m Filter(const FTSCAHitV &hit, const PndFTSCAParam ¶m, const float_m &mask=float_m(true), const float_v &chi2Cut=10e10f)