28 #ifdef DO_TPCCATRACKER_EFF_PERFORMANCE
48 const int nTracks = tracker->
NTracks();
54 for (
int iTr = 0; iTr < nTracks; iTr++ ) {
63 tmpTr.
SetX( trParam.
X() );
64 tmpTr.
SetY( trParam.
Y() );
65 tmpTr.
SetZ( trParam.
Z() );
68 const int q = (trParam.
QPt()>=0 ? 1 : -1);
75 const float cosL = trParam.
DzDs();
78 tmpTr.
SetPz( pt * cosL );
83 for (
int i = 0;
i < 6;
i++)
84 for (
int j = 0; j < 6; j++)
90 J[3][5] = q * pt * pt * trParam.
CosPhi();
92 J[4][5] = q* pt * pt * trParam.
SinPhi();
94 J[5][5] = q* pt * pt * cosL;
98 CovIn[0][0] = .0001f*.0001f;
99 for (
int i = 1;
i < 6;
i++) {
104 for (
int i = 1;
i < 6;
i++) {
105 for (
int j = 1; j <=
i; j++, k++) {
106 CovIn[
i][j] = trParam.
Cov()[k];
107 CovIn[j][
i] = trParam.
Cov()[k];
113 for (
int i = 0;
i < 6;
i++)
114 for (
int j = 0; j < 6; j++) {
116 for (
int k = 0; k < 6; k++) {
117 CovInJ[
i][j] += CovIn[
i][k] * J[j][k];
122 for (
int i = 0;
i < 6;
i++)
123 for (
int j = 0; j < 6; j++) {
125 for (
int k = 0; k < 6; k++) {
126 CovOut[
i][j] += J[
i][k] * CovInJ[k][j];
133 for (
int i = 0;
i < 6;
i++) {
134 for (
int j = 0; j <=
i; j++, k++) {
135 KFPCov[k] = CovOut[
i][j];
136 ASSERT( !finite(CovOut[
i][j]) || CovOut[
i][j] == 0 ||
fabs( 1. - CovOut[j][
i]/CovOut[
i][j] ) <= 0.05,
137 "CovOut[" <<
i <<
"][" << j <<
"] == CovOut[" << j <<
"][" <<
i <<
"] : " << CovOut[
i][j] <<
" == " << CovOut[j][
i]);
142 static int nInfCov=0;
143 static int nNegCov = 0;
149 for (
int i = 0;
i < 6;
i++) {
150 for (
int j = 0; j <=
i; j++, k++) {
151 ok &= finite( KFPCov[k] );
152 finiteCov &= finite( KFPCov[k] );
154 ok &= ( KFPCov[k-1] > 0 );
155 negCov &= ( KFPCov[k-1] > 0 );
157 if(!finiteCov) nInfCov++;
158 if(!negCov) nNegCov++;
235 UNUSED_PARAM1(tracks);
236 fvec b[3], vertex[3]={0,0,0};
238 float cBz = b[2][0]*0.000299792458;
241 for(
unsigned short iTr=0; iTr < NTr; iTr++)
245 const float cA =
cos( -trParam.
Angle() );
246 const float sA =
sin( -trParam.
Angle() );
251 float pvP[2] = { pv.
X()[0]*sA + pv.
Y()[0]*cA , pv.
Z()[0] };
252 float pvC[3] = { cA*cA*cov[2][0] + 2* cA *cov[1][0] *sA + cov[0][0]* sA*sA,
253 cA* cov[4][0] + cov[3][0]* sA,
256 float pvX = pv.
X()[0]*cA - pv.
Y()[0]*sA;
260 float dy = trParam.
Y() - pvP[0];
261 float dz = trParam.
Z() - pvP[1];
262 float c[3] = { trParam.
Cov()[0], trParam.
Cov()[1], trParam.
Cov()[2] };
263 c[0]+= pvC[0]; c[1]+= pvC[1]; c[2]+= pvC[2];
264 float d = c[0]*c[2] - c[1]*c[1] ;
265 float chiTrack =
sqrt(
fabs( 0.5*(dy*dy*c[0]-2*dy*dz*c[1]+dz*dz*c[2])/d ) );
275 vector<int> vTrackPDG(
tmpTracks.size(), -1);
286 for(
unsigned int iTr=0; iTr<
tmpTracks.size(); iTr++)
288 int iMC = PndFTSCAPerformance::Instance().GetSubPerformance(
"Global Performance")->GetRecoData()[
tmpTracks[iTr].Id()].GetMCTrackId();
289 int PDG = (*PndFTSCAPerformance::Instance().GetSubPerformance(
"Global Performance")->fMCTracks)[iMC].PDG();
290 vTrackPDG[iTr] = PDG;
void SetCovarianceMatrix(const float *C)
void ReconstructPrimVertex()
friend F32vec4 cos(const F32vec4 &a)
const PndFTSCAGBTrack & Track(int i) const
static void SetField(fvec Bz)
void Init(vector< KFPTrack > &tracks, int nParticles)
vector< float > fChiToPrimVtx
friend F32vec4 sqrt(const F32vec4 &a)
friend F32vec4 sin(const F32vec4 &a)
~PndFTSTopoReconstructor()
void GetChiToPrimVertex(vector< KFPTrack > &tracks, KFParticleSIMD &pv, vector< float > &chi)
void ReconstructParticles()
TString pt(TString pts, TString exts="px py pz")
fvec * CovarianceMatrix()
const float * Cov() const
void GetFieldValue(const fvec xyz[], fvec B[]) const
void Init(PndFTSCAGBTracker *tracker)
const PndFTSCAParam & GetParameters() const
void ReconstructPrimVertex()
std::vector< const PndFTSCATrackParam * > tmpGbTracks
bool TransportToX0(float x, float Bz, float maxSinPhi=.999)
friend F32vec4 fabs(const F32vec4 &a)
std::vector< KFPTrack > tmpTracks
const PndFTSCATrackParam & InnerParam() const
static void FindParticles(std::vector< KFPTrack > &vRTracks, std::vector< float > &ChiToPrimVtx, std::vector< KFParticle > &Particles, KFParticleSIMD &PrimVtx, const std::vector< int > &vTrackPDG, const float cuts[2][3]=DefaultCuts)
KFPTopoReconstructor * fKFPTopoReconstructor
vector< KFParticle > fParticles
void RotateXY(float alpha)
static void SetField(Double_t Bz)
KFParticle & GetPrimVertex() const
Accessors.