FairRoot/PandaRoot
Public Member Functions | Private Member Functions | Private Attributes | List of all members
PndFTSTopoReconstructor Class Reference

#include <PndFTSTopoReconstructor.h>

Public Member Functions

 PndFTSTopoReconstructor ()
 
 ~PndFTSTopoReconstructor ()
 
void Init (PndFTSCAGBTracker *tracker)
 
void ReconstructPrimVertex ()
 
void ReconstructParticles ()
 
KFParticleGetPrimVertex () const
 Accessors. More...
 
vector< KFParticle > const & GetParticles () const
 
vector< KFPTrack > const & GetTracks () const
 
vector< int > const & GetRTrackIds () const
 
vector< float > const & GetChiPrim () const
 

Private Member Functions

PndFTSTopoReconstructoroperator= (PndFTSTopoReconstructor &)
 
 PndFTSTopoReconstructor (PndFTSTopoReconstructor &)
 
void GetChiToPrimVertex (vector< KFPTrack > &tracks, KFParticleSIMD &pv, vector< float > &chi)
 

Private Attributes

KFPTopoReconstructorfKFPTopoReconstructor
 
std::vector< KFPTracktmpTracks
 
std::vector< const
PndFTSCATrackParam * > 
tmpGbTracks
 
vector< int > fRTrackIds
 
vector< float > fChiToPrimVtx
 
vector< KFParticlefParticles
 

Detailed Description

Definition at line 18 of file PndFTSTopoReconstructor.h.

Constructor & Destructor Documentation

PndFTSTopoReconstructor::PndFTSTopoReconstructor ( )
inline
PndFTSTopoReconstructor::~PndFTSTopoReconstructor ( )

Definition at line 33 of file PndFTSTopoReconstructor.cxx.

References fKFPTopoReconstructor.

34 {
36 }
KFPTopoReconstructor * fKFPTopoReconstructor
PndFTSTopoReconstructor::PndFTSTopoReconstructor ( PndFTSTopoReconstructor )
private

Member Function Documentation

vector<float> const& PndFTSTopoReconstructor::GetChiPrim ( ) const
inline

Definition at line 33 of file PndFTSTopoReconstructor.h.

References fChiToPrimVtx.

33 { return fChiToPrimVtx; }
void PndFTSTopoReconstructor::GetChiToPrimVertex ( vector< KFPTrack > &  tracks,
KFParticleSIMD pv,
vector< float > &  chi 
)
private

Definition at line 231 of file PndFTSTopoReconstructor.cxx.

References PndFTSCATrackParam::Angle(), b, c, cos(), PndFTSCATrackParam::Cov(), KFParticleSIMD::CovarianceMatrix(), d, dy, dz, fabs(), KFParticleSIMD::GetFieldValue(), sin(), sqrt(), tmpGbTracks, PndFTSCATrackParam::TransportToX0(), KFParticleSIMD::X(), KFParticleSIMD::Y(), PndFTSCATrackParam::Y(), KFParticleSIMD::Z(), and PndFTSCATrackParam::Z().

Referenced by ReconstructParticles().

234 {
235  UNUSED_PARAM1(tracks);
236  fvec b[3], vertex[3]={0,0,0};
237  pv.GetFieldValue(vertex,b);
238  float cBz = b[2][0]*0.000299792458;
239 
240  unsigned short NTr = tmpGbTracks.size();
241  for(unsigned short iTr=0; iTr < NTr; iTr++)
242  {
243  PndFTSCATrackParam trParam = *(tmpGbTracks[iTr]);
244 
245  const float cA = cos( -trParam.Angle() );
246  const float sA = sin( -trParam.Angle() );
247 
248  const fvec * cov = pv.CovarianceMatrix();
249 
250  //parameters and covariance matrix of the primary vertex in YZ of the track
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,
254  cov[5][0]};
255  //Transport track to PV
256  float pvX = pv.X()[0]*cA - pv.Y()[0]*sA;
257  trParam.TransportToX0( pvX, -cBz );
258 
259 
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 ) );
266  chi[iTr] = chiTrack;
267  }
268 }
const fvec & X() const
friend F32vec4 cos(const F32vec4 &a)
Definition: P4_F32vec4.h:112
double dy
TObjArray * d
TTree * b
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:29
const fvec & Y() const
friend F32vec4 sin(const F32vec4 &a)
Definition: P4_F32vec4.h:111
fvec * CovarianceMatrix()
const float * Cov() const
void GetFieldValue(const fvec xyz[], fvec B[]) const
const fvec & Z() const
std::vector< const PndFTSCATrackParam * > tmpGbTracks
bool TransportToX0(float x, float Bz, float maxSinPhi=.999)
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
vector<KFParticle> const& PndFTSTopoReconstructor::GetParticles ( ) const
inline

Definition at line 30 of file PndFTSTopoReconstructor.h.

References fParticles.

30 { return fParticles; }
vector< KFParticle > fParticles
KFParticle& PndFTSTopoReconstructor::GetPrimVertex ( ) const
inline

Accessors.

Definition at line 29 of file PndFTSTopoReconstructor.h.

References fKFPTopoReconstructor, and KFPTopoReconstructor::GetPrimVertex().

Referenced by ReconstructParticles().

KFParticle & GetPrimVertex()
Accessors.
KFPTopoReconstructor * fKFPTopoReconstructor
vector<int> const& PndFTSTopoReconstructor::GetRTrackIds ( ) const
inline

Definition at line 32 of file PndFTSTopoReconstructor.h.

References fRTrackIds.

32 { return fRTrackIds; }
vector<KFPTrack> const& PndFTSTopoReconstructor::GetTracks ( ) const
inline

Definition at line 31 of file PndFTSTopoReconstructor.h.

References tmpTracks.

31 { return tmpTracks; }
std::vector< KFPTrack > tmpTracks
void PndFTSTopoReconstructor::Init ( PndFTSCAGBTracker tracker)

Definition at line 38 of file PndFTSTopoReconstructor.cxx.

References CAMath::Abs(), PndFTSCATrackParam::Angle(), ASSERT, PndFTSCAParam::Bz(), PndFTSCAParam::cBz(), PndFTSCATrackParam::Chi2(), PndFTSCATrackParam::CosPhi(), PndFTSCATrackParam::Cov(), PndFTSCATrackParam::DzDs(), f, fabs(), fChiToPrimVtx, fKFPTopoReconstructor, fRTrackIds, PndFTSCAGBTracker::GetParameters(), i, KFPTopoReconstructor::Init(), PndFTSCAGBTrack::InnerParam(), PndFTSCATrackParam::NDF(), PndFTSCAGBTracker::NTracks(), ok, pt(), PndFTSCATrackParam::QPt(), KFPTrack::RotateXY(), KFPTrack::SetCharge(), KFPTrack::SetChi2(), KFPTrack::SetCovarianceMatrix(), KFParticle::SetField(), KFParticleSIMD::SetField(), KFPTrack::SetId(), KFPTrack::SetNDF(), KFPTrack::SetPx(), KFPTrack::SetPy(), KFPTrack::SetPz(), KFPTrack::SetX(), KFPTrack::SetY(), KFPTrack::SetZ(), PndFTSCATrackParam::SinPhi(), tmpGbTracks, tmpTracks, PndFTSCAGBTracker::Track(), PndFTSCATrackParam::TransportToX0(), PndFTSCATrackParam::X(), PndFTSCATrackParam::Y(), and PndFTSCATrackParam::Z().

39 {
40 #ifdef PANDA_STT
41  KFParticle::SetField( -tracker->GetParameters().Bz() ); // to understand -1 see SetField
42  KFParticleSIMD::SetField( -tracker->GetParameters().Bz() ); // to understand -1 see SetField
43 #else
44  KFParticle::SetField( -tracker->GetParameters().Bz() ); // to understand -1 see SetField
45  KFParticleSIMD::SetField( -tracker->GetParameters().Bz() ); // to understand -1 see SetField
46 #endif
47  // create and fill array of tracks to init KFParticleTopoReconstructor
48  const int nTracks = tracker->NTracks();
49  tmpTracks.resize(nTracks);
50  fChiToPrimVtx.resize(nTracks, 10);
51  tmpGbTracks.resize(nTracks);
52 
53  int iOTr = 0; // index in out array
54  for ( int iTr = 0; iTr < nTracks; iTr++ ) {
55  // get track params in local CS
56  PndFTSCATrackParam trParam = tracker->Track( iTr ).InnerParam();
57 
58  trParam.TransportToX0( 0, tracker->GetParameters().cBz( ) );
59 
60  KFPTrack &tmpTr = tmpTracks[iOTr];
61 
62  // -- convert parameters
63  tmpTr.SetX( trParam.X() );
64  tmpTr.SetY( trParam.Y() );
65  tmpTr.SetZ( trParam.Z() );
66 
67  const float pt = CAMath::Abs( 1.f / trParam.QPt() );
68  const int q = (trParam.QPt()>=0 ? 1 : -1);
69 // if ( pt < 1 ) continue; // dbg
70 // if ( trParam.NDF() < 20-5 ) continue; // at least 15 hits in track
71 // if ( trParam.Chi2() > 10*trParam.NDF() ) continue; // dbg
72 // if ( iOTr >= 4 ) continue; // dbg
73 
74 
75  const float cosL = trParam.DzDs();
76  tmpTr.SetPx( pt * trParam.CosPhi() );
77  tmpTr.SetPy( pt * trParam.SinPhi() );
78  tmpTr.SetPz( pt * cosL );
79 
80  // -- convert cov matrix
81  // get jacobian
82  float J[6][6];
83  for (int i = 0; i < 6; i++)
84  for (int j = 0; j < 6; j++)
85  J[i][j] = 0;
86  J[0][0] = 1; // x -> x
87  J[1][1] = 1; // y -> y
88  J[2][2] = 1; // z -> z
89  J[3][3] = -pt * trParam.SinPhi() / trParam.CosPhi();
90  J[3][5] = q * pt * pt * trParam.CosPhi(); // q/pt -> px
91  J[4][3] = pt; // sinPhi -> py
92  J[4][5] = q* pt * pt * trParam.SinPhi(); // q/pt -> py
93  J[5][4] = pt; // dz/ds -> pz
94  J[5][5] = q* pt * pt * cosL; // q/pt -> pz
95 
96  float CovIn[6][6]; // triangular -> symmetric matrix
97  {
98  CovIn[0][0] = .0001f*.0001f; // dx. From nowhere. TODO
99  for (int i = 1; i < 6; i++) {
100  CovIn[i][0] = 0;
101  CovIn[0][i] = 0;
102  }
103  int k = 0;
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];
108  }
109  }
110  }
111 
112  float CovInJ[6][6]; // CovInJ = CovIn * J^t
113  for (int i = 0; i < 6; i++)
114  for (int j = 0; j < 6; j++) {
115  CovInJ[i][j] = 0;
116  for (int k = 0; k < 6; k++) {
117  CovInJ[i][j] += CovIn[i][k] * J[j][k];
118  }
119  }
120 
121  float CovOut[6][6]; // CovOut = J * CovInJ
122  for (int i = 0; i < 6; i++)
123  for (int j = 0; j < 6; j++) {
124  CovOut[i][j] = 0;
125  for (int k = 0; k < 6; k++) {
126  CovOut[i][j] += J[i][k] * CovInJ[k][j];
127  }
128  }
129 
130  float KFPCov[21]; // symmetric matrix -> triangular
131  {
132  int k = 0;
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]);
138  }
139  }
140  }
141 
142 static int nInfCov=0;
143 static int nNegCov = 0;
144  { // check cov matrix
145  bool ok = true;
146 bool finiteCov=true;
147 bool negCov = true;
148  int k = 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] );
153  }
154  ok &= ( KFPCov[k-1] > 0 );
155 negCov &= ( KFPCov[k-1] > 0 );
156  }
157 if(!finiteCov) nInfCov++;
158 if(!negCov) nNegCov++;
159 // if(!negCov || !finiteCov)
160 // {
161 // std::cout <<
162 // for (int i = 0; i < 6; i++) {
163 // for (int j = 0; j <= i; j++, k++) {
164 // std::cout << KFPCov[k] <<" ";
165 // }
166 // std::cout << std::endl;
167 // }
168 // std::cout << " track "<< std::endl;
169 // for (int i = 0; i < 5; i++) {
170 // for (int j = 0; j <= i; j++, k++) {
171 // std::cout << trParam.Cov()[k] <<" ";
172 // }
173 // std::cout << std::endl;
174 // }
175 // }
176 // std::cout << "Neg " << nNegCov << " infinite " << nInfCov << std::endl;
177 
178  if (!ok) continue;
179  }
180  // { // dbg output
181  // float *outM = &(CovIn[0][0]);
182  // std::cout << "CovIn = " << std::endl;
183  // for (int i = 0; i < 6; i++) {
184  // for (int j = 0; j <= i; j++) {
185  // std::cout << outM[6*i+j] << " ";
186  // }
187  // std::cout << std::endl;
188  // }
189  // }
190  // { // dbg output
191  // float *outM = &(CovOut[0][0]);
192  // std::cout << "CovOut = " << std::endl;
193  // for (int i = 0; i < 6; i++) {
194  // for (int j = 0; j <= i; j++) {
195  // std::cout << outM[6*i+j] << " ";
196  // }
197  // std::cout << std::endl;
198  // }
199  // }
200 
201  tmpTr.SetCovarianceMatrix( KFPCov );
202  tmpTr.SetCharge( (trParam.QPt()) / CAMath::Abs(trParam.QPt()) );
203 
204  tmpTr.RotateXY( tracker->Track( iTr ).InnerParam().Angle() ); // convert into Global CS. Can't be done erlier because in tracker X hasn't correspondent covMatrix elements.
205 
206  tmpTr.SetChi2( trParam.Chi2() );
207  tmpTr.SetNDF( trParam.NDF() );
208  tmpTr.SetId(iTr);
209 
210  fRTrackIds.push_back(iTr);
211 
212 // trParam.TransportToX0WithMaterial( 0, tracker->GetParameters().cBz( ) );
213 //
214 // fChiToPrimVtx[iOTr] = (trParam.Cov()[2]* trParam.Y()*trParam.Y() + trParam.Z() *(-2 *trParam.Cov()[1]*trParam.Y() + trParam.Cov()[0] *trParam.Z()))/(-trParam.Cov()[1]*trParam.Cov()[1] + trParam.Cov()[0]* trParam.Cov()[2]);
215 
216  tmpGbTracks[iOTr] = &tracker->Track( iTr ).InnerParam();
217  iOTr++;
218  }
219  tmpTracks.resize(iOTr);
220  fChiToPrimVtx.resize(iOTr);
221  tmpGbTracks.resize(iOTr);
222 
224 } // void PndFTSTopoReconstructor::Init(PndFTSCAGBTracker* tracker)
void SetCovarianceMatrix(const float *C)
Definition: KFPTrack.h:100
const PndFTSCAGBTrack & Track(int i) const
static void SetField(fvec Bz)
void Init(vector< KFPTrack > &tracks, int nParticles)
Int_t i
Definition: run_full.C:25
void SetZ(float z)
Definition: KFPTrack.h:92
void SetNDF(int ndf)
Definition: KFPTrack.h:98
void SetY(float y)
Definition: KFPTrack.h:91
void SetX(float x)
Definition: KFPTrack.h:90
void SetPx(float px)
Definition: KFPTrack.h:93
void SetId(int id)
Definition: KFPTrack.h:109
TString pt(TString pts, TString exts="px py pz")
Definition: invexp.C:133
static T Abs(const T &x)
Definition: PndCAMath.h:39
float Bz() const
Definition: PndFTSCAParam.h:48
const float * Cov() const
float cBz() const
Definition: PndFTSCAParam.h:49
const PndFTSCAParam & GetParameters() const
float_m ok
TFile * f
Definition: bump_analys.C:12
std::vector< const PndFTSCATrackParam * > tmpGbTracks
bool TransportToX0(float x, float Bz, float maxSinPhi=.999)
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
std::vector< KFPTrack > tmpTracks
int NTracks() const
const PndFTSCATrackParam & InnerParam() const
void SetPy(float py)
Definition: KFPTrack.h:94
void SetPz(float pz)
Definition: KFPTrack.h:95
#define ASSERT(v, msg)
Definition: PndCADef.h:56
KFPTopoReconstructor * fKFPTopoReconstructor
void RotateXY(float alpha)
Definition: KFPTrack.cxx:7
static void SetField(Double_t Bz)
Definition: KFParticle.h:406
void SetChi2(float chi)
Definition: KFPTrack.h:97
void SetCharge(int q)
Definition: KFPTrack.h:96
PndFTSTopoReconstructor& PndFTSTopoReconstructor::operator= ( PndFTSTopoReconstructor )
private
void PndFTSTopoReconstructor::ReconstructParticles ( )

Definition at line 270 of file PndFTSTopoReconstructor.cxx.

References fChiToPrimVtx, KFParticleFinder::FindParticles(), fParticles, GetChiToPrimVertex(), GetPrimVertex(), and tmpTracks.

271 {
272  // find short-lived particles
273 
275  vector<int> vTrackPDG(tmpTracks.size(), -1);
276 
277  float fCuts[3][3];
278 
279  fCuts[0][0] = 3.;
280  fCuts[0][1] = 3.;
281  fCuts[0][2] = -3;
282  fCuts[1][0] = 3.;
283  fCuts[1][1] = 3.;
284  fCuts[1][2] = -3;
285 
286  for(unsigned int iTr=0; iTr<tmpTracks.size(); iTr++)
287  {
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;
291 
292  }
293  //calculate chi to primary vertex, chi = sqrt(dr C-1 dr)
296 } // void PndFTSTopoReconstructor::ReconstructPrimVertex
void GetChiToPrimVertex(vector< KFPTrack > &tracks, KFParticleSIMD &pv, vector< float > &chi)
std::vector< KFPTrack > tmpTracks
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)
vector< KFParticle > fParticles
KFParticle & GetPrimVertex() const
Accessors.
void PndFTSTopoReconstructor::ReconstructPrimVertex ( )

Definition at line 226 of file PndFTSTopoReconstructor.cxx.

References fKFPTopoReconstructor, and KFPTopoReconstructor::ReconstructPrimVertex().

227 {
229 } // void PndFTSTopoReconstructor::ReconstructPrimVertex
KFPTopoReconstructor * fKFPTopoReconstructor

Member Data Documentation

vector<float> PndFTSTopoReconstructor::fChiToPrimVtx
private

Definition at line 51 of file PndFTSTopoReconstructor.h.

Referenced by GetChiPrim(), Init(), and ReconstructParticles().

KFPTopoReconstructor* PndFTSTopoReconstructor::fKFPTopoReconstructor
private
vector<KFParticle> PndFTSTopoReconstructor::fParticles
private

Definition at line 52 of file PndFTSTopoReconstructor.h.

Referenced by GetParticles(), and ReconstructParticles().

vector<int> PndFTSTopoReconstructor::fRTrackIds
private

Definition at line 49 of file PndFTSTopoReconstructor.h.

Referenced by GetRTrackIds(), and Init().

std::vector<const PndFTSCATrackParam*> PndFTSTopoReconstructor::tmpGbTracks
private

Definition at line 44 of file PndFTSTopoReconstructor.h.

Referenced by GetChiToPrimVertex(), and Init().

std::vector<KFPTrack> PndFTSTopoReconstructor::tmpTracks
private

Definition at line 43 of file PndFTSTopoReconstructor.h.

Referenced by GetTracks(), Init(), and ReconstructParticles().


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