CbmRoot
Loading...
Searching...
No Matches
CbmTofTracklet.cxx
Go to the documentation of this file.
1/* Copyright (C) 2015-2020 PI-UHd, GSI
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Norbert Herrmann [committer], Florian Uhlig */
4
10#include "CbmTofTracklet.h"
11
12#include "CbmTofHit.h" // for CbmTofHit
13
14#include <FairTrackParam.h> // for FairTrackParam
15#include <Logger.h> // for Logger, LOG
16
17#include <TObject.h> // for TObject
18#include <TString.h> // for Form
19
20#include <string> // for string
21
22
23using std::vector;
24
26 : TObject()
27 , fTrackLength(0.)
28 , fPidHypo(-1)
29 , fDistance(0.)
30 , fTime(0.)
31 , fTt(0.)
32 , fT0(0.)
33 , fT0Err(0.)
34 , fTtErr(0.)
35 , fT0TtCov(0.)
36 , fChiSq(0.)
37 , fNDF(0)
38 , fTrackPar()
39 , fParamFirst()
40 , fParamLast()
41 , fTofHit(0, -1)
42 , fTofDet()
43 , fMatChi()
44 , fhit()
45{
46}
47
49 : TObject(t)
53 , fTime(t.fTime)
54 , fTt(t.fTt)
55 , fT0(t.fT0)
56 , fT0Err(t.fT0Err)
57 , fTtErr(t.fTtErr)
59 , fChiSq(t.fChiSq)
60 , fNDF(t.fNDF)
62 , fParamFirst(FairTrackParam(t.fParamFirst))
63 , fParamLast(FairTrackParam(t.fParamLast))
64 , fTofHit(t.fTofHit)
65 , fTofDet(t.fTofDet)
66 , fMatChi(t.fMatChi)
67 , fhit(t.fhit)
68{
69}
70
72
73/*
74CbmTofTracklet::CbmTofTracklet(const CbmTofTracklet &fSource) :
75 fTrackLength(0.),
76 fPidHypo(-1),
77 fDistance(0.),
78 fTime(0.),
79 fTt(0.),
80 fT0(0.),
81 fChiSq(0.),
82 fNDF(0),
83 fTrackPar(),
84 fParamFirst(),
85 fParamLast(),
86 fTofHit(0,-1),
87 fTofDet(),
88 fMatChi(),
89 fhit()
90{
91}
92
93CbmTofTracklet& CbmTofTracklet::operator=(const CbmTofTracklet &fSource){
94 // do something !
95 return *this;
96}
97*/
98
100{
101 fParamLast.SetX(par->GetX());
102 fParamLast.SetY(par->GetY());
103 fParamLast.SetZ(par->GetZ());
104 fParamLast.SetTx(par->GetTx());
105 fParamLast.SetTy(par->GetTy());
106 fParamLast.SetQp(par->GetQp());
107 for (int i = 0, k = 0; i < 3; i++)
108 for (int j = 0; j <= i; j++, k++)
109 fParamLast.SetCovariance(i, j, par->GetCovariance(k));
110}
111
113{
114 fTrackPar.SetX(fParamLast.GetX());
115 fTrackPar.SetY(fParamLast.GetY());
116 fTrackPar.SetZ(fParamLast.GetZ());
117 fTrackPar.SetTx(fParamLast.GetTx());
118 fTrackPar.SetTy(fParamLast.GetTy());
119 fTrackPar.SetQp(fParamLast.GetQp());
120 for (int i = 0, k = 0; i < 3; i++)
121 for (int j = 0; j <= i; j++, k++)
122 fTrackPar.SetCovariance(k, fParamLast.GetCovariance(i, j));
123}
124
125double CbmTofTracklet::GetMatChi2(int32_t iAddr)
126{
127 //LOG(debug1) << "array sizes: " << fTofHit.size() << ", " << fTofDet.size() << ", " << fMatChi.size();
128 for (uint32_t iHit = 0; iHit < fTofHit.size(); iHit++) {
129 //LOG(debug1) << Form(" -v- ind %d, tofhit %d, 0x%08x, chi %f ",iHit,fTofHit[iHit],fTofDet[iHit],fMatChi[iHit]);
130 //if(0==fTofDet[iHit]) LOG(fatal) << " CbmTofTracklet::GetMatChi2 Invalid Detector Type! ";
131 if (iAddr == fTofDet[iHit]) return fMatChi[iHit];
132 }
133 return -1.;
134}
135
136int32_t CbmTofTracklet::GetFirstInd(int32_t iAddr)
137{
138 for (uint32_t iHit = 0; iHit < fTofHit.size(); iHit++) {
139 // LOG(info) << " GFI "<< iSm <<", "<<iHit<<", "<< fTofDet[iHit];
140 if (iAddr != fTofDet[iHit]) return fTofHit[iHit];
141 }
142 LOG(fatal) << " CbmTofTracklet::GetFirstInd, did only find " << iAddr;
143 return -1;
144}
145
147{
148 double dZ0 = 0.;
149 if (fTrackPar.GetTx() != 0.) dZ0 = -fTrackPar.GetX() / fTrackPar.GetTx() + fTrackPar.GetZ();
150 return dZ0;
151}
152
154{
155 double dZ0 = 0.;
156 if (fTrackPar.GetTy() != 0.) dZ0 = -fTrackPar.GetY() / fTrackPar.GetTy() + fTrackPar.GetZ();
157 return dZ0;
158}
159
161{
162 double dR0 = sqrt(pow(GetFitX(0.), 2) + pow(GetFitY(0.), 2));
163 return dR0;
164}
165
167{
168 /*
169 double dR2=0.;
170 dR2 += pow(fTrackPar.GetX()-pHit->GetX(),2);
171 dR2 += pow(fTrackPar.GetY()-pHit->GetY(),2);
172 dR2 += pow(fTrackPar.GetZ()-pHit->GetZ(),2);
173 double dR = sqrt(dR2);
174 */
175 /*
176 double dR = pHit->GetR();
177 LOG(debug) <<Form(" CbmTofTracklet::GetTex Bmon %7.1f dR %7.1f, Tt %7.4f => Tex %7.3f, ",
178 fT0,dR,fTt,fT0 + dR*fTt)
179 <<fTrackPar.ToString()
180 ;
181 return fT0 + dR*fTt;
182 */
183 double dZ = pHit->GetZ();
184 double dSign = 1.;
185 if (pHit->GetZ() < fhit[0].GetZ()) dSign = -1;
186 double dTex = fhit[0].GetTime() + fTt * dSign * Dist3D(pHit, &fhit[0]);
187 LOG(debug) << Form("GetTex Bmon %7.3f, Z %7.1f, DZ %5.1f, Sign %2.0f, Tt %7.4f => Tex %7.3f, ", fhit[0].GetTime(), dZ,
188 dZ - fhit[0].GetZ(), dSign, fTt, dTex)
189 << fTrackPar.ToString();
190 return dTex;
191}
192
194{ //returns estimated time at R=0
195 // double dBmon=0.;
196 int32_t nValidHits = 0;
197 int32_t iHit1;
198 double dDist1;
199
200 double aR[fTofHit.size()];
201 double at[fTofHit.size()];
202 double ae[fTofHit.size()];
203 for (uint32_t iHit = 0; iHit < fTofHit.size(); iHit++) {
204 if (fTofDet[iHit] >= 0) { // exclude faked hits
205 if (nValidHits == 0) {
206 iHit1 = iHit;
207 //dDist1=fhit[iHit1].GetR();
208 dDist1 =
209 fhit[iHit1].GetZ() * sqrt(1. + fTrackPar.GetTx() * fTrackPar.GetTx() + fTrackPar.GetTy() * fTrackPar.GetTy());
210 }
211 //aR[nValidHits]=fhit[iHit].GetR();
212 double dSign = 1.;
213 if (fhit[iHit].GetZ() < fhit[iHit1].GetZ()) dSign = -1.;
214 aR[nValidHits] = dDist1 + dSign * Dist3D(&fhit[iHit], &fhit[iHit1]);
215 at[nValidHits] = fhit[iHit].GetTime();
216 ae[nValidHits] = 0.1; // const timing error, FIXME (?)
217 //ae[nValidHits]=fhit[iHit].GetTimeError();
218 nValidHits++;
219 }
220 }
221
222 /*
223 //
224 // follow tutorial solveLinear.C to solve the linear equation t=t0+tt*R
225 //
226 TVectorD R; R.Use(nValidHits,aR);
227 TVectorD t; t.Use(nValidHits,at);
228 TVectorD e; e.Use(nValidHits,ae);
229
230 const int32_t nrVar = 2;
231 TMatrixD A(nValidHits,nrVar);
232 TMatrixDColumn(A,0) = 1.0;
233 TMatrixDColumn(A,1) = R;
234
235 // first bring the weights in place
236 TMatrixD Aw = A;
237 TVectorD yw = t;
238 for (int32_t irow = 0; irow < A.GetNrows(); irow++) {
239 TMatrixDRow(Aw,irow) *= 1/e(irow);
240 yw(irow) /= e(irow);
241 }
242
243 TDecompSVD svd(Aw);
244 bool ok;
245 const TVectorD c_svd = svd.Solve(yw,ok);
246
247 // c_svd.Print();
248
249 fT0=c_svd[0];
250 fTt=c_svd[1];
251 */
252
253 //
254 // Using analyctical Solution of Chi2-Fit to solve the linear equation t=t0+tt*R
255 // Converted into Matrix Form, Matrices calcualted and only resulting formula are implemented
256 // J.Brandt
257 //
258 double RRsum = 0; // Values will follow this procedure:
259 double Rsum = 0; // $Rsum=\sum_{i}^{nValidHits}\frac{R_i}{e_i^2}$
260 double tsum = 0; // where e_i will always be the error on the t measurement
261 double esum = 0; // RR=R^2 in numerator, e denotes 1 in numerator , Rt= R*t in numerator
262 double Rtsum = 0; //
263 double sig_weight = 0; // ae^2
264 double yoffset =
265 (fTofHit.size() > 0) ? (at[0] - 10) : 0.; // Bmon time offset to scale times to ns regime and not 10^10ns
266
267 for (int32_t i = 0; i < nValidHits; i++) {
268 at[i] -= yoffset; // substract offset
269 sig_weight = (ae[i] * ae[i]);
270 Rsum += (aR[i] / sig_weight);
271 tsum += (at[i] / sig_weight);
272 RRsum += (aR[i] * aR[i] / sig_weight);
273 Rtsum += (aR[i] * at[i] / sig_weight);
274 esum += (1 / sig_weight);
275 }
276 double det_cov_mat =
277 esum * RRsum
278 - Rsum * Rsum; // Determinant of inverted Covariance Matrix -> 1/det is common Faktor of Cavariance Matrix
279 fT0 = (RRsum * tsum - Rsum * Rtsum) / det_cov_mat; // Best Guess for time at origin
280 fTt = (-Rsum * tsum + esum * Rtsum) / det_cov_mat; // Best guess for inverted velocity
281 fT0Err = sqrt(RRsum / det_cov_mat); // sqrt of (0,0) in Covariance matrix -> error on fT0
282 fTtErr = sqrt(esum / det_cov_mat); // sqrt of (1,1) in Covariance Matrix -> error on fTt
283 fT0TtCov = -Rsum / det_cov_mat; // (0,1)=(1,0) in Covariance Matrix -> cov(fT0,fTt)
284
285 fT0 += yoffset; // Adding yoffset again
286
287 //if (iHit0>-1) fhit[iHit0].SetTime(fT0);
288
289 LOG(debug) << Form("Trkl size %u, validHits %d, Tt = %6.4f TtErr = %2.4f Bmon "
290 "= %6.2f BmonErr = %2.2f BmonTtCov = %6.4f",
291 (uint32_t) fTofHit.size(), nValidHits, fTt, fTtErr, fT0, fT0Err, fT0TtCov);
292
293 return fT0;
294}
295
297{
298 double dTt = 0.;
299 int32_t iNt = 0;
300 for (uint32_t iHL = 0; iHL < fhit.size() - 1; iHL++) {
301 //if( fTofDet[iHL]>0 ) // exclude faked hits
302 for (uint32_t iHH = iHL + 1; iHH < fhit.size(); iHH++) {
303 //if( fTofDet[iHH]>0) // exclude faked hits
304 {
305 dTt += (fhit[iHH].GetTime() - fhit[iHL].GetTime())
306 / (fhit[iHH].GetR() - fhit[iHL].GetR()); // only valid for tracks from nominal vertex (0,0,0)
307 iNt++;
308 }
309 }
310 }
311 if (iNt == 0) {
312 LOG(warning) << "No valid hit pair ";
313 return fTt;
314 }
315 fTt = dTt / (double) iNt;
316 return fTt;
317}
318
319double CbmTofTracklet::GetXdif(int32_t iDetId, CbmTofHit* pHit)
320{
321 double dXref = 0.;
322 int32_t iNref = 0;
323 double dTx = 0;
324
325 if (1) {
326 for (uint32_t iHL = 0; iHL < fhit.size() - 1; iHL++) {
327 if (iDetId == fTofDet[iHL] || 0 == fTofDet[iHL]) continue; // exclude faked hits
328 for (uint32_t iHH = iHL + 1; iHH < fhit.size(); iHH++) {
329 if (iDetId == fTofDet[iHH] || 0 == fTofDet[iHH]) continue; // exclude faked hits
330 //dTt+=(fhit[iHH].GetTime()-fhit[iHL].GetTime())/(fhit[iHH].GetR()-fhit[iHL].GetR()); // for projective geometries only !!!
331 dTx += (fhit[iHH].GetX() - fhit[iHL].GetX()) / (fhit[iHH].GetZ() - fhit[iHL].GetZ());
332 iNref++;
333 }
334 }
335 dTx /= iNref;
336 }
337 else {
338 dTx = fTrackPar.GetTx();
339 }
340
341 iNref = 0;
342 for (uint32_t iHit = 0; iHit < fTofHit.size(); iHit++) {
343 if (iDetId == fTofDet[iHit] || 0 == fTofDet[iHit]) continue;
344
345 double dDZ = pHit->GetZ() - fhit[iHit].GetZ();
346 dXref += fhit[iHit].GetX() + dTx * dDZ;
347 iNref++;
348 }
349
350 if (iNref == 0) {
351 LOG(error) << "DetId " << iDetId << ", Nref " << iNref << " sizes " << fTofHit.size() << ", " << fhit.size();
352 return 1.E20;
353 }
354
355 dXref /= iNref;
356
357 return pHit->GetX() - dXref;
358}
359
360double CbmTofTracklet::GetYdif(int32_t iDetId, CbmTofHit* pHit)
361{
362 double dYref = 0.;
363 int32_t iNref = 0;
364 double dTy = 0;
365
366 if (1) {
367 for (uint32_t iHL = 0; iHL < fhit.size() - 1; iHL++) {
368 if (iDetId == fTofDet[iHL] || 0 == fTofDet[iHL]) continue; // exclude faked hits
369 for (uint32_t iHH = iHL + 1; iHH < fhit.size(); iHH++) {
370 if (iDetId == fTofDet[iHH] || 0 == fTofDet[iHH]) continue; // exclude faked hits
371 dTy += (fhit[iHH].GetY() - fhit[iHL].GetY()) / (fhit[iHH].GetZ() - fhit[iHL].GetZ());
372 iNref++;
373 }
374 }
375 dTy /= iNref;
376 }
377 else {
378 dTy = fTrackPar.GetTy();
379 }
380
381 iNref = 0;
382 for (uint32_t iHit = 0; iHit < fTofHit.size(); iHit++) {
383 if (iDetId == fTofDet[iHit] || 0 == fTofDet[iHit]) continue;
384
385 double dDZ = pHit->GetZ() - fhit[iHit].GetZ();
386 dYref += fhit[iHit].GetY() + dTy * dDZ;
387 iNref++;
388 }
389
390 if (iNref == 0) {
391 LOG(error) << "DetId " << iDetId << ", Nref " << iNref << " sizes " << fTofHit.size() << ", " << fhit.size();
392 return 1.E20;
393 }
394
395 dYref /= iNref;
396
397 return pHit->GetY() - dYref;
398}
399
400double CbmTofTracklet::GetTdif(int32_t iDetId, CbmTofHit* pHit)
401{
402 double dTref = 0.;
403 double Nref = 0;
404 double dTt = 0.;
405 int32_t iNt = 0;
406
407 if (1) {
408 for (uint32_t iHL = 0; iHL < fhit.size() - 1; iHL++) {
409 if (iDetId == fTofDet[iHL] || 0 == fTofDet[iHL]) continue; // exclude faked hits
410 for (uint32_t iHH = iHL + 1; iHH < fhit.size(); iHH++) {
411 if (iDetId == fTofDet[iHH] || 0 == fTofDet[iHH]) continue; // exclude faked hits
412 //dTt+=(fhit[iHH].GetTime()-fhit[iHL].GetTime())/(fhit[iHH].GetR()-fhit[iHL].GetR()); // for projective geometries only !!!
413 double dDist =
414 sqrt(pow((fhit[iHH].GetX() - fhit[iHL].GetX()), 2) + pow((fhit[iHH].GetY() - fhit[iHL].GetY()), 2)
415 + pow((fhit[iHH].GetZ() - fhit[iHL].GetZ()), 2));
416 double dSign = 1.;
417 if (fhit[iHH].GetZ() < fhit[iHL].GetZ()) dSign = -1.;
418 dTt += (fhit[iHH].GetTime() - fhit[iHL].GetTime()) / dDist * dSign;
419 iNt++;
420 }
421 }
422
423 if (iNt == 0) {
424 LOG(error) << "No valid hit pair ";
425 return 1.E20;
426 }
427 dTt /= (double) iNt;
428 }
429 else {
430 dTt = fTt;
431 }
432
433 for (uint32_t iHit = 0; iHit < fTofHit.size(); iHit++) {
434 if (iDetId == fTofDet[iHit] || 0 == fTofDet[iHit]) continue;
435 //dTref += fhit[iHit].GetTime() - dTt*(fhit[iHit].GetR()-pHit->GetR());
436 double dSign = 1.;
437 if (fhit[iHit].GetZ() < pHit->GetZ()) dSign = -1;
438 dTref += fhit[iHit].GetTime() - dTt * dSign * Dist3D(&fhit[iHit], pHit);
439 Nref++;
440 }
441 if (Nref == 0) {
442 LOG(error) << "DetId " << iDetId << ", Nref " << Nref << " sizes " << fTofHit.size() << ", " << fhit.size();
443 return 1.E20;
444 }
445 dTref /= (double) Nref;
446 double dTdif = pHit->GetTime() - dTref;
447 // LOG(debug) << "iSt "<< iSt<<" DetId "<<iDetId<<", Nref "<<Nref<<" Tdif
448 // "<<dTdif;
449 return dTdif;
450}
451
453{
454 for (uint32_t iHit = 0; iHit < fTofHit.size(); iHit++) {
455 int32_t iHaddr = fhit[iHit].GetAddress() & 0x003FFFFF;
456 /*
457 LOG(debug)<<Form(" Contain test hit %d for 0x%08x, 0x%08x = 0x%08x ?",
458 iHit,fhit[iHit].GetAddress(),iHaddr,iAddr)
459 ;
460 */
461 if (iHaddr == iAddr) return true;
462 }
463 return false;
464}
465
466int32_t CbmTofTracklet::HitIndexOfAddr(int32_t iAddr)
467{
468 for (uint32_t iHit = 0; iHit < fTofHit.size(); iHit++) {
469 if ((fhit[iHit].GetAddress() & 0x003FFFFF) == iAddr) return iHit;
470 }
471 return -1;
472}
473
475{
476 for (uint32_t iHit = 0; iHit < fTofHit.size(); iHit++) {
477 if ((fhit[iHit].GetAddress() & 0x003FFFFF) == iAddr) return &fhit[iHit];
478 }
479 return nullptr;
480}
481
482const double* CbmTofTracklet::GetPoint(int32_t n)
483{ // interface to event display: CbmTracks
484 fP[0] = fhit[n].GetX();
485 fP[1] = fhit[n].GetY();
486 fP[2] = fhit[n].GetZ();
487 fP[3] = fhit[n].GetTime();
488 // LOG(info) <<Form("CbmTofTracklet::GetPoint %d, %6.2f, %6.2f, %6.2f, %6.2f ",n,fP[0],fP[1],fP[2],fP[3]);
489 return fP;
490}
491
492const double* CbmTofTracklet::GetFitPoint(int32_t n)
493{ // interface to event display: CbmTracks
494 fP[0] = GetFitX(fhit[n].GetZ());
495 fP[1] = GetFitY(fhit[n].GetZ());
496 fP[2] = fhit[n].GetZ();
497 fP[3] = fhit[n].GetTime();
498 /*
499 LOG(info) <<Form("CbmTofTracklet::GetFitPoint %d, %6.2f - %6.2f, %6.2f - %6.2f, %6.2f, %6.2f ",
500 n,fP[0],fhit[n]->GetX(),fP[1],fhit[n]->GetY(),fP[2],fP[3]);
501 */
502 return fP;
503}
504
505double CbmTofTracklet::GetFitX(double dZ) { return fTrackPar.GetX() + fTrackPar.GetTx() * (dZ - fTrackPar.GetZ()); }
506
507double CbmTofTracklet::GetFitY(double dZ) { return fTrackPar.GetY() + fTrackPar.GetTy() * (dZ - fTrackPar.GetZ()); }
508
509double CbmTofTracklet::GetFitT(double dZ)
510{
511 // return fT0 + dR*fTt;
512 //return fT0 + fTt*dZ*sqrt(fTrackPar.GetTx()*fTrackPar.GetTx()+fTrackPar.GetTy()*fTrackPar.GetTy());
513 return fT0
514 + fTt * (dZ - fTrackPar.GetZ())
515 * sqrt(1. + fTrackPar.GetTx() * fTrackPar.GetTx() + fTrackPar.GetTy() * fTrackPar.GetTy());
516}
517
518void CbmTofTracklet::Clear(Option_t* /*option*/)
519{
520 // LOG(debug) << "Clear TofTracklet with option "<<*option;
521 fTofHit.clear();
522 fTofDet.clear();
523 fMatChi.clear();
524 fhit.clear();
525}
526
528{
529 LOG(info) << Form("TrklInfo: Nhits %d, Tt %6.3f, stations: ", GetNofHits(), GetTt());
530 LOG(info);
531 for (int32_t iH = 0; iH < GetNofHits(); iH++) {
532 LOG(info) << Form(" Hit %2d: Ind %5d, det 0x%08x, addr 0x%08x, chi %6.3f, ae[]= %6.4f", iH, fTofHit[iH],
533 fTofDet[iH], fhit[iH].GetAddress(), fMatChi[iH], fhit[iH].GetTimeError());
534 }
535}
536
538{
539 double dDist = sqrt(pow((pHit0->GetX() - pHit1->GetX()), 2) + pow((pHit0->GetY() - pHit1->GetY()), 2)
540 + pow((pHit0->GetZ() - pHit1->GetZ()), 2));
541 return dDist;
542}
543
544double CbmTofTracklet::GetRefVel(uint32_t iNhit)
545{
546 double dVel = 0.;
547 double dTt = 0.;
548 int32_t iNt = 0;
549 if (fhit.size() >= iNhit) {
550 for (uint32_t iHL = 0; iHL < iNhit - 1; iHL++) {
551 for (uint32_t iHH = iHL + 1; iHH < iNhit; iHH++) {
552 dTt += (fhit[iHH].GetTime() - fhit[iHL].GetTime()) / (fhit[iHH].GetR() - fhit[iHL].GetR());
553 iNt++;
554 }
555 }
556 }
557 if (iNt == 0) {
558 LOG(debug) << " CbmTofTracklet::GetRefVel: No valid hit pair ";
559 }
560 else {
561 dVel = (double) iNt / dTt;
562 }
563 return dVel;
564}
565
ClassImp(CbmConverterManager)
friend fvec sqrt(const fvec &a)
double GetTime() const
Definition CbmHit.h:79
double GetZ() const
Definition CbmHit.h:74
double GetY() const
Definition CbmPixelHit.h:74
double GetX() const
Definition CbmPixelHit.h:73
double GetCovariance(int index) const
Provides information on attaching a TofHit to a TofTrack.
double GetFitY(double Z)
virtual double GetTdif(int32_t iSmType, CbmTofHit *pHit)
double GetRefVel(uint32_t N)
virtual bool ContainsAddr(int32_t iAddr)
virtual CbmTofHit * HitPointerOfAddr(int32_t iAddr)
virtual int32_t HitIndexOfAddr(int32_t iAddr)
virtual void PrintInfo()
double GetTt() const
virtual double GetXdif(int32_t iSmType, CbmTofHit *pHit)
int32_t GetNofHits() const
virtual double GetMatChi2(int32_t iSm)
const double * GetPoint(int32_t n)
void Clear(Option_t *option="")
double GetFitT(double R)
const double * GetFitPoint(int32_t n)
virtual ~CbmTofTracklet()
std::vector< double > fMatChi
std::vector< int32_t > fTofDet
std::vector< CbmTofHit > fhit
double GetTime() const
void SetParamLast(const FairTrackParam *par)
virtual double GetYdif(int32_t iSmType, CbmTofHit *pHit)
virtual void GetFairTrackParamLast()
CbmTofTrackletParam fTrackPar
double GetTex(CbmTofHit *pHit)
std::vector< int32_t > fTofHit
FairTrackParam fParamFirst
FairTrackParam fParamLast
double GetFitX(double Z)
int32_t GetFirstInd(int32_t iSmType)
virtual double Dist3D(CbmTofHit *pHit0, CbmTofHit *pHit1)