PandaRoot
PndFTSCATrackParam Class Reference

#include <PndFTSCATrackParam.h>

Public Member Functions

 PndFTSCATrackParam ()
 
 PndFTSCATrackParam (const TrackParamVector &v, int i)
 
float X0 () const
 
float X1 () const
 
float X2 () const
 
float X () const
 
float Y () const
 
float Z () const
 
float SinPhi () const
 
float DzDs () const
 
float QPt () const
 
float QP () const
 
float QMomentum () const
 
float SignCosPhi () const
 
float Chi2 () const
 
int NDF () const
 
float Err2X1 () const
 
float Err2X2 () const
 
float Err2Y () const
 
float Err2Z () const
 
float Err2SinPhi () const
 
float Err2DzDs () const
 
float Err2QPt () const
 
float Angle () const
 
float Kappa (float Bz) const
 
float CosPhi () const
 
float Err2QMomentum () const
 
const float * Par () const
 
const float * Cov () const
 
bool GetXYZPxPyPzQ (float &x, float &y, float &z, float &px, float &py, float &pz, int &q, float cov[21]) const
 
void SetSinPhi (float v)
 
void GetDCAPoint (float x, float y, float z, float &px, float &py, float &pz, float Bz) const
 
bool TransportToX0 (float x, float Bz, float maxSinPhi=.999)
 
bool Rotate (float alpha, float maxSinPhi=.999)
 
bool Transport (const FTSCAHit &hit, const PndFTSCAParam &param)
 
bool IsValid () const
 
void SetAsInvalid ()
 

Friends

std::istream & operator>> (std::istream &, PndFTSCATrackParam &)
 
std::ostream & operator<< (std::ostream &, const PndFTSCATrackParam &)
 

Detailed Description

Definition at line 236 of file PndFTSCATrackParam.h.

Constructor & Destructor Documentation

◆ PndFTSCATrackParam() [1/2]

PndFTSCATrackParam::PndFTSCATrackParam ( )
inline

Definition at line 241 of file PndFTSCATrackParam.h.

241 { Reset(); }

◆ PndFTSCATrackParam() [2/2]

PndFTSCATrackParam::PndFTSCATrackParam ( const TrackParamVector v,
int  i 
)
inline

Definition at line 242 of file PndFTSCATrackParam.h.

References PndCATrackParamVector::Cov(), i, and PndCATrackParamVector::Par().

242  : fX(v.X()[i]), fSignCosPhi(v.SignCosPhi()[i]), fChi2(v.Chi2()[i]), fNDF(v.NDF()[i]), fAlpha(v.Angle()[i])
243  {
244  for (int j = 0; j < 5; ++j)
245  fP[j] = v.Par()[j][i];
246  for (int j = 0; j < 15; ++j)
247  fC[j] = v.Cov()[j][i];
248  }
unsigned int i
Definition: P4_F32vec4.h:33
const float_v & Cov(int i) const
const float_v & Par(int i) const

Member Function Documentation

◆ Angle()

float PndFTSCATrackParam::Angle ( ) const
inline

Definition at line 276 of file PndFTSCATrackParam.h.

276 { return fAlpha; }

◆ Chi2()

float PndFTSCATrackParam::Chi2 ( ) const
inline

Definition at line 264 of file PndFTSCATrackParam.h.

Referenced by FTSCATrack::Fit(), and FTSCATrack::Fit2Times().

264 { return fChi2; }

◆ CosPhi()

float PndFTSCATrackParam::CosPhi ( ) const
inline

Definition at line 279 of file PndFTSCATrackParam.h.

References SinPhi(), and CAMath::Sqrt().

Referenced by TransportToX0().

279 { return fSignCosPhi * CAMath::Sqrt(1 - SinPhi() * SinPhi()); }
static T Sqrt(const T &x)
Definition: PndCAMath.h:57

◆ Cov()

const float* PndFTSCATrackParam::Cov ( ) const
inline

Definition at line 284 of file PndFTSCATrackParam.h.

References GetXYZPxPyPzQ(), and pz.

284 { return fC; }

◆ DzDs()

float PndFTSCATrackParam::DzDs ( ) const
inline

Definition at line 258 of file PndFTSCATrackParam.h.

Referenced by QP(), and TransportToX0().

258 { return fP[3]; }

◆ Err2DzDs()

float PndFTSCATrackParam::Err2DzDs ( ) const
inline

Definition at line 273 of file PndFTSCATrackParam.h.

273 { return fC[9]; }

◆ Err2QMomentum()

float PndFTSCATrackParam::Err2QMomentum ( ) const
inline

Definition at line 281 of file PndFTSCATrackParam.h.

Referenced by FTSCANPlet::QMomentumErr(), and FTSCANPlet::QMomentumErr2().

281 { return fC[14]; }

◆ Err2QPt()

float PndFTSCATrackParam::Err2QPt ( ) const
inline

Definition at line 274 of file PndFTSCATrackParam.h.

274 { return fC[14]; }

◆ Err2SinPhi()

float PndFTSCATrackParam::Err2SinPhi ( ) const
inline

Definition at line 272 of file PndFTSCATrackParam.h.

272 { return fC[5]; }

◆ Err2X1()

float PndFTSCATrackParam::Err2X1 ( ) const
inline

Definition at line 267 of file PndFTSCATrackParam.h.

References Err2Y().

267 { return Err2Y(); }

◆ Err2X2()

float PndFTSCATrackParam::Err2X2 ( ) const
inline

Definition at line 268 of file PndFTSCATrackParam.h.

References Err2Z().

268 { return Err2Z(); }

◆ Err2Y()

float PndFTSCATrackParam::Err2Y ( ) const
inline

Definition at line 270 of file PndFTSCATrackParam.h.

Referenced by Err2X1().

270 { return fC[0]; }

◆ Err2Z()

float PndFTSCATrackParam::Err2Z ( ) const
inline

Definition at line 271 of file PndFTSCATrackParam.h.

Referenced by Err2X2().

271 { return fC[2]; }

◆ GetDCAPoint()

void PndFTSCATrackParam::GetDCAPoint ( float  x,
float  y,
float  z,
float &  px,
float &  py,
float &  pz,
float  Bz 
) const

Referenced by SetSinPhi().

◆ GetXYZPxPyPzQ()

bool PndFTSCATrackParam::GetXYZPxPyPzQ ( float &  x,
float &  y,
float &  z,
float &  px,
float &  py,
float &  pz,
int &  q,
float  cov[21] 
) const

Referenced by Cov().

◆ IsValid()

bool PndFTSCATrackParam::IsValid ( ) const
inline

Definition at line 298 of file PndFTSCATrackParam.h.

298 { return fChi2 != -1; }

◆ Kappa()

float PndFTSCATrackParam::Kappa ( float  Bz) const
inline

Definition at line 278 of file PndFTSCATrackParam.h.

278 { return fP[4] * Bz; }

◆ NDF()

int PndFTSCATrackParam::NDF ( ) const
inline

Definition at line 265 of file PndFTSCATrackParam.h.

Referenced by FTSCATrack::Fit(), and FTSCATrack::Fit2Times().

265 { return fNDF; }

◆ Par()

const float* PndFTSCATrackParam::Par ( ) const
inline

Definition at line 283 of file PndFTSCATrackParam.h.

283 { return fP; }

◆ QMomentum()

float PndFTSCATrackParam::QMomentum ( ) const
inline

Definition at line 261 of file PndFTSCATrackParam.h.

References QPt().

Referenced by FTSCANPlet::QMomentum().

261 { return QPt(); }

◆ QP()

float PndFTSCATrackParam::QP ( ) const
inline

Definition at line 260 of file PndFTSCATrackParam.h.

References DzDs(), QPt(), and sqrt().

Referenced by FTSCATrack::Fit().

260 { return QPt() / sqrt(DzDs() * DzDs() + 1); }
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:40

◆ QPt()

float PndFTSCATrackParam::QPt ( ) const
inline

Definition at line 259 of file PndFTSCATrackParam.h.

Referenced by QMomentum(), QP(), and TransportToX0().

259 { return fP[4]; }

◆ Rotate()

bool PndFTSCATrackParam::Rotate ( float  alpha,
float  maxSinPhi = .999 
)

Referenced by SetSinPhi().

◆ SetAsInvalid()

void PndFTSCATrackParam::SetAsInvalid ( )
inline

Definition at line 299 of file PndFTSCATrackParam.h.

299 { fChi2 = -1; }

◆ SetSinPhi()

void PndFTSCATrackParam::SetSinPhi ( float  v)
inline

Definition at line 288 of file PndFTSCATrackParam.h.

References alpha, GetDCAPoint(), Rotate(), Transport(), TransportToX0(), and v.

288 { fP[2] = v; }
__m128 v
Definition: P4_F32vec4.h:15

◆ SignCosPhi()

float PndFTSCATrackParam::SignCosPhi ( ) const
inline

Definition at line 263 of file PndFTSCATrackParam.h.

263 { return fSignCosPhi; }

◆ SinPhi()

float PndFTSCATrackParam::SinPhi ( ) const
inline

Definition at line 257 of file PndFTSCATrackParam.h.

Referenced by CosPhi(), and TransportToX0().

257 { return fP[2]; }

◆ Transport()

bool PndFTSCATrackParam::Transport ( const FTSCAHit hit,
const PndFTSCAParam param 
)

Referenced by SetSinPhi().

◆ TransportToX0()

bool PndFTSCATrackParam::TransportToX0 ( float  x,
float  Bz,
float  maxSinPhi = .999 
)
inline

Definition at line 325 of file PndFTSCATrackParam.h.

References CAMath::Abs(), CAMath::ASin(), CosPhi(), DzDs(), f, QPt(), SinPhi(), CAMath::Sqrt(), X(), Y(), and Z().

Referenced by SetSinPhi().

326 {
327  //* Transport the track parameters to X=x, using linearization at t0, and the field value Bz
328  //* maxSinPhi is the max. allowed value for |t0.SinPhi()|
329  //* linearisation of trajectory t0 is also transported to X=x,
330  //* returns 1 if OK
331  //*
332 
333  const float ex = CosPhi();
334  const float ey = SinPhi();
335  const float k = QPt() * Bz;
336  const float dx = x - X();
337 
338  const float ey1 = k * dx + ey;
339 
340  // check for intersection with X=x
341 
342  if (CAMath::Abs(ey1) > maxSinPhi)
343  return 0;
344 
345  float ex1 = CAMath::Sqrt(1.f - ey1 * ey1);
346  if (ex < 0)
347  ex1 = -ex1;
348 
349  const float dx2 = dx * dx;
350  const float ss = ey + ey1;
351  const float cc = ex + ex1;
352 
353  if ((CAMath::Abs(cc) < 1.e-4 || CAMath::Abs(ex) < 1.e-4 || CAMath::Abs(ex1) < 1.e-4))
354  return 0;
355 
356  const float cci = 1.f / cc;
357  const float exi = 1.f / ex;
358  const float ex1i = 1.f / ex1;
359 
360  const float tg = ss * cci; // tan((phi1+phi)/2)
361 
362  const float dy = dx * tg;
363  float dl = dx * CAMath::Sqrt(1.f + tg * tg);
364 
365  if (cc < 0)
366  dl = -dl;
367  float dSin = dl * k * 0.5;
368  if (dSin > 1.f)
369  dSin = 1.f;
370  if (dSin < -1.f)
371  dSin = -1.f;
372  const float dS = (CAMath::Abs(k) > 1.e-4) ? (2 * CAMath::ASin(dSin) / k) : dl;
373  const float dz = dS * DzDs();
374 
375  // float H0[5] = { 1,0, h2, 0, h4 };
376  // float H1[5] = { 0, 1, 0, dS, 0 };
377  // float H2[5] = { 0, 0, 1, 0, dxBz };
378  // float H3[5] = { 0, 0, 0, 1, 0 };
379  // float H4[5] = { 0, 0, 0, 0, 1 };
380 
381  const float h2 = dx * (1.f + ey * ey1 + ex * ex1) * exi * ex1i * cci;
382  const float h4 = dx2 * (cc + ss * ey1 * ex1i) * cci * cci * Bz;
383  const float dxBz = dx * Bz;
384 
385  fX = X() + dx;
386  fP[0] = Y() + dy;
387  fP[1] = Z() + dz;
388  fP[2] = ey1;
389 
390 #if 1
391  const float c00 = fC[0];
392  const float c10 = fC[1];
393  const float c11 = fC[2];
394  const float c20 = fC[3];
395  const float c21 = fC[4];
396  const float c22 = fC[5];
397  const float c30 = fC[6];
398  const float c31 = fC[7];
399  const float c32 = fC[8];
400  const float c33 = fC[9];
401  const float c40 = fC[10];
402  const float c41 = fC[11];
403  const float c42 = fC[12];
404  const float c43 = fC[13];
405  const float c44 = fC[14];
406 
407  fC[0] = (c00 + h2 * h2 * c22 + h4 * h4 * c44 + 2.f * (h2 * c20 + h4 * c40 + h2 * h4 * c42));
408 
409  fC[1] = c10 + h2 * c21 + h4 * c41 + dS * (c30 + h2 * c32 + h4 * c43);
410  fC[2] = c11 + 2.f * dS * c31 + dS * dS * c33;
411 
412  fC[3] = c20 + h2 * c22 + h4 * c42 + dxBz * (c40 + h2 * c42 + h4 * c44);
413  fC[4] = c21 + dS * c32 + dxBz * (c41 + dS * c43);
414  fC[5] = c22 + 2.f * dxBz * c42 + dxBz * dxBz * c44;
415 
416  fC[6] = c30 + h2 * c32 + h4 * c43;
417  fC[7] = c31 + dS * c33;
418  fC[8] = c32 + dxBz * c43;
419  fC[9] = c33;
420 
421  fC[10] = c40 + h2 * c42 + h4 * c44;
422  fC[11] = c41 + dS * c43;
423  fC[12] = c42 + dxBz * c44;
424  fC[13] = c43;
425  fC[14] = c44;
426 #else
427  fC[0] = (fC[0] + h2 * h2 * fC[5] + h4 * h4 * fC[14] + 2 * (h2 * fC[3] + h4 * fC[10] + h2 * h4 * fC[12]));
428 
429  fC[1] = fC[1] + h2 * fC[4] + h4 * fC[11] + dS * (fC[6] + h2 * fC[8] + h4 * fC[13]);
430  fC[2] = fC[2] + 2 * dS * fC[7] + dS * dS * fC[9];
431 
432  fC[3] = fC[3] + h2 * fC[5] + h4 * fC[12] + dxBz * (fC[10] + h2 * fC[12] + h4 * fC[14]);
433  fC[4] = fC[4] + dS * fC[8] + dxBz * (fC[11] + dS * fC[13]);
434  fC[5] = fC[5] + 2 * dxBz * fC[12] + dxBz * dxBz * fC[14];
435 
436  fC[6] = fC[6] + h2 * fC[8] + h4 * fC[13];
437  fC[7] = fC[7] + dS * fC[9];
438  fC[8] = fC[8] + dxBz * fC[13];
439  fC[9] = fC[9];
440 
441  fC[10] = fC[10] + h2 * fC[12] + h4 * fC[14];
442  fC[11] = fC[11] + dS * fC[13];
443  fC[12] = fC[12] + dxBz * fC[14];
444  fC[13] = fC[13];
445  fC[14] = fC[14];
446 #endif
447 
448  return 1;
449 }
static T ASin(const T &x)
static T Sqrt(const T &x)
Definition: PndCAMath.h:57
static T Abs(const T &x)
Definition: PndCAMath.h:68
float f
Definition: P4_F32vec4.h:32

◆ X()

float PndFTSCATrackParam::X ( ) const
inline

Definition at line 254 of file PndFTSCATrackParam.h.

Referenced by TransportToX0().

254 { return fX; }

◆ X0()

float PndFTSCATrackParam::X0 ( ) const
inline

Definition at line 250 of file PndFTSCATrackParam.h.

250 { return fX; }

◆ X1()

float PndFTSCATrackParam::X1 ( ) const
inline

Definition at line 251 of file PndFTSCATrackParam.h.

References Y().

251 { return Y(); }

◆ X2()

float PndFTSCATrackParam::X2 ( ) const
inline

Definition at line 252 of file PndFTSCATrackParam.h.

References Z().

252 { return Z(); }

◆ Y()

float PndFTSCATrackParam::Y ( ) const
inline

Definition at line 255 of file PndFTSCATrackParam.h.

Referenced by TransportToX0(), and X1().

255 { return fP[0]; }

◆ Z()

float PndFTSCATrackParam::Z ( ) const
inline

Definition at line 256 of file PndFTSCATrackParam.h.

Referenced by TransportToX0(), and X2().

256 { return fP[1]; }

Friends And Related Function Documentation

◆ operator<<

std::ostream& operator<< ( std::ostream &  ,
const PndFTSCATrackParam  
)
friend

◆ operator>>

std::istream& operator>> ( std::istream &  ,
PndFTSCATrackParam  
)
friend

The documentation for this class was generated from the following file: