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)
50 , fTrackLength(t.fTrackLength)
51 , fPidHypo(t.fPidHypo)
52 , fDistance(t.fDistance)
53 , fTime(t.fTime)
54 , fTt(t.fTt)
55 , fT0(t.fT0)
56 , fT0Err(t.fT0Err)
57 , fTtErr(t.fTtErr)
58 , fT0TtCov(t.fT0TtCov)
59 , fChiSq(t.fChiSq)
60 , fNDF(t.fNDF)
61 , fTrackPar(CbmTofTrackletParam(t.fTrackPar))
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 = at[0] - 10; // Bmon time offset to scale times to ns regime and not 10^10ns
265 for (int32_t i = 0; i < nValidHits; i++) {
266 at[i] -= yoffset; // substract offset
267 sig_weight = (ae[i] * ae[i]);
268 Rsum += (aR[i] / sig_weight);
269 tsum += (at[i] / sig_weight);
270 RRsum += (aR[i] * aR[i] / sig_weight);
271 Rtsum += (aR[i] * at[i] / sig_weight);
272 esum += (1 / sig_weight);
273 }
274 double det_cov_mat =
275 esum * RRsum
276 - Rsum * Rsum; // Determinant of inverted Covariance Matrix -> 1/det is common Faktor of Cavariance Matrix
277 fT0 = (RRsum * tsum - Rsum * Rtsum) / det_cov_mat; // Best Guess for time at origin
278 fTt = (-Rsum * tsum + esum * Rtsum) / det_cov_mat; // Best guess for inverted velocity
279 fT0Err = sqrt(RRsum / det_cov_mat); // sqrt of (0,0) in Covariance matrix -> error on fT0
280 fTtErr = sqrt(esum / det_cov_mat); // sqrt of (1,1) in Covariance Matrix -> error on fTt
281 fT0TtCov = -Rsum / det_cov_mat; // (0,1)=(1,0) in Covariance Matrix -> cov(fT0,fTt)
282
283 fT0 += yoffset; // Adding yoffset again
284
285 //if (iHit0>-1) fhit[iHit0].SetTime(fT0);
286
287 LOG(debug) << Form("Trkl size %u, validHits %d, Tt = %6.4f TtErr = %2.4f Bmon "
288 "= %6.2f BmonErr = %2.2f BmonTtCov = %6.4f",
289 (uint32_t) fTofHit.size(), nValidHits, fTt, fTtErr, fT0, fT0Err, fT0TtCov);
290
291 return fT0;
292}
293
295{
296 double dTt = 0.;
297 int32_t iNt = 0;
298 for (uint32_t iHL = 0; iHL < fhit.size() - 1; iHL++) {
299 //if( fTofDet[iHL]>0 ) // exclude faked hits
300 for (uint32_t iHH = iHL + 1; iHH < fhit.size(); iHH++) {
301 //if( fTofDet[iHH]>0) // exclude faked hits
302 {
303 dTt += (fhit[iHH].GetTime() - fhit[iHL].GetTime())
304 / (fhit[iHH].GetR() - fhit[iHL].GetR()); // only valid for tracks from nominal vertex (0,0,0)
305 iNt++;
306 }
307 }
308 }
309 if (iNt == 0) {
310 LOG(warning) << "No valid hit pair ";
311 return fTt;
312 }
313 fTt = dTt / (double) iNt;
314 return fTt;
315}
316
317double CbmTofTracklet::GetXdif(int32_t iDetId, CbmTofHit* pHit)
318{
319 double dXref = 0.;
320 int32_t iNref = 0;
321 double dTx = 0;
322
323 if (1) {
324 for (uint32_t iHL = 0; iHL < fhit.size() - 1; iHL++) {
325 if (iDetId == fTofDet[iHL] || 0 == fTofDet[iHL]) continue; // exclude faked hits
326 for (uint32_t iHH = iHL + 1; iHH < fhit.size(); iHH++) {
327 if (iDetId == fTofDet[iHH] || 0 == fTofDet[iHH]) continue; // exclude faked hits
328 //dTt+=(fhit[iHH].GetTime()-fhit[iHL].GetTime())/(fhit[iHH].GetR()-fhit[iHL].GetR()); // for projective geometries only !!!
329 dTx += (fhit[iHH].GetX() - fhit[iHL].GetX()) / (fhit[iHH].GetZ() - fhit[iHL].GetZ());
330 iNref++;
331 }
332 }
333 dTx /= iNref;
334 }
335 else {
336 dTx = fTrackPar.GetTx();
337 }
338
339 iNref = 0;
340 for (uint32_t iHit = 0; iHit < fTofHit.size(); iHit++) {
341 if (iDetId == fTofDet[iHit] || 0 == fTofDet[iHit]) continue;
342
343 double dDZ = pHit->GetZ() - fhit[iHit].GetZ();
344 dXref += fhit[iHit].GetX() + dTx * dDZ;
345 iNref++;
346 }
347
348 if (iNref == 0) {
349 LOG(error) << "DetId " << iDetId << ", Nref " << iNref << " sizes " << fTofHit.size() << ", " << fhit.size();
350 return 1.E20;
351 }
352
353 dXref /= iNref;
354
355 return pHit->GetX() - dXref;
356}
357
358double CbmTofTracklet::GetYdif(int32_t iDetId, CbmTofHit* pHit)
359{
360 double dYref = 0.;
361 int32_t iNref = 0;
362 double dTy = 0;
363
364 if (1) {
365 for (uint32_t iHL = 0; iHL < fhit.size() - 1; iHL++) {
366 if (iDetId == fTofDet[iHL] || 0 == fTofDet[iHL]) continue; // exclude faked hits
367 for (uint32_t iHH = iHL + 1; iHH < fhit.size(); iHH++) {
368 if (iDetId == fTofDet[iHH] || 0 == fTofDet[iHH]) continue; // exclude faked hits
369 dTy += (fhit[iHH].GetY() - fhit[iHL].GetY()) / (fhit[iHH].GetZ() - fhit[iHL].GetZ());
370 iNref++;
371 }
372 }
373 dTy /= iNref;
374 }
375 else {
376 dTy = fTrackPar.GetTy();
377 }
378
379 iNref = 0;
380 for (uint32_t iHit = 0; iHit < fTofHit.size(); iHit++) {
381 if (iDetId == fTofDet[iHit] || 0 == fTofDet[iHit]) continue;
382
383 double dDZ = pHit->GetZ() - fhit[iHit].GetZ();
384 dYref += fhit[iHit].GetY() + dTy * dDZ;
385 iNref++;
386 }
387
388 if (iNref == 0) {
389 LOG(error) << "DetId " << iDetId << ", Nref " << iNref << " sizes " << fTofHit.size() << ", " << fhit.size();
390 return 1.E20;
391 }
392
393 dYref /= iNref;
394
395 return pHit->GetY() - dYref;
396}
397
398double CbmTofTracklet::GetTdif(int32_t iDetId, CbmTofHit* pHit)
399{
400 double dTref = 0.;
401 double Nref = 0;
402 double dTt = 0.;
403 int32_t iNt = 0;
404
405 if (1) {
406 for (uint32_t iHL = 0; iHL < fhit.size() - 1; iHL++) {
407 if (iDetId == fTofDet[iHL] || 0 == fTofDet[iHL]) continue; // exclude faked hits
408 for (uint32_t iHH = iHL + 1; iHH < fhit.size(); iHH++) {
409 if (iDetId == fTofDet[iHH] || 0 == fTofDet[iHH]) continue; // exclude faked hits
410 //dTt+=(fhit[iHH].GetTime()-fhit[iHL].GetTime())/(fhit[iHH].GetR()-fhit[iHL].GetR()); // for projective geometries only !!!
411 double dDist =
412 sqrt(pow((fhit[iHH].GetX() - fhit[iHL].GetX()), 2) + pow((fhit[iHH].GetY() - fhit[iHL].GetY()), 2)
413 + pow((fhit[iHH].GetZ() - fhit[iHL].GetZ()), 2));
414 double dSign = 1.;
415 if (fhit[iHH].GetZ() < fhit[iHL].GetZ()) dSign = -1.;
416 dTt += (fhit[iHH].GetTime() - fhit[iHL].GetTime()) / dDist * dSign;
417 iNt++;
418 }
419 }
420
421 if (iNt == 0) {
422 LOG(error) << "No valid hit pair ";
423 return 1.E20;
424 }
425 dTt /= (double) iNt;
426 }
427 else {
428 dTt = fTt;
429 }
430
431 for (uint32_t iHit = 0; iHit < fTofHit.size(); iHit++) {
432 if (iDetId == fTofDet[iHit] || 0 == fTofDet[iHit]) continue;
433 //dTref += fhit[iHit].GetTime() - dTt*(fhit[iHit].GetR()-pHit->GetR());
434 double dSign = 1.;
435 if (fhit[iHit].GetZ() < pHit->GetZ()) dSign = -1;
436 dTref += fhit[iHit].GetTime() - dTt * dSign * Dist3D(&fhit[iHit], pHit);
437 Nref++;
438 }
439 if (Nref == 0) {
440 LOG(error) << "DetId " << iDetId << ", Nref " << Nref << " sizes " << fTofHit.size() << ", " << fhit.size();
441 return 1.E20;
442 }
443 dTref /= (double) Nref;
444 double dTdif = pHit->GetTime() - dTref;
445 // LOG(debug) << "iSt "<< iSt<<" DetId "<<iDetId<<", Nref "<<Nref<<" Tdif
446 // "<<dTdif;
447 return dTdif;
448}
449
451{
452 for (uint32_t iHit = 0; iHit < fTofHit.size(); iHit++) {
453 int32_t iHaddr = fhit[iHit].GetAddress() & 0x003FFFFF;
454 /*
455 LOG(debug)<<Form(" Contain test hit %d for 0x%08x, 0x%08x = 0x%08x ?",
456 iHit,fhit[iHit].GetAddress(),iHaddr,iAddr)
457 ;
458 */
459 if (iHaddr == iAddr) return true;
460 }
461 return false;
462}
463
464int32_t CbmTofTracklet::HitIndexOfAddr(int32_t iAddr)
465{
466 for (uint32_t iHit = 0; iHit < fTofHit.size(); iHit++) {
467 if ((fhit[iHit].GetAddress() & 0x003FFFFF) == iAddr) return iHit;
468 }
469 return -1;
470}
471
473{
474 for (uint32_t iHit = 0; iHit < fTofHit.size(); iHit++) {
475 if ((fhit[iHit].GetAddress() & 0x003FFFFF) == iAddr) return &fhit[iHit];
476 }
477 return nullptr;
478}
479
480const double* CbmTofTracklet::GetPoint(int32_t n)
481{ // interface to event display: CbmTracks
482 fP[0] = fhit[n].GetX();
483 fP[1] = fhit[n].GetY();
484 fP[2] = fhit[n].GetZ();
485 fP[3] = fhit[n].GetTime();
486 // LOG(info) <<Form("CbmTofTracklet::GetPoint %d, %6.2f, %6.2f, %6.2f, %6.2f ",n,fP[0],fP[1],fP[2],fP[3]);
487 return fP;
488}
489
490const double* CbmTofTracklet::GetFitPoint(int32_t n)
491{ // interface to event display: CbmTracks
492 fP[0] = GetFitX(fhit[n].GetZ());
493 fP[1] = GetFitY(fhit[n].GetZ());
494 fP[2] = fhit[n].GetZ();
495 fP[3] = fhit[n].GetTime();
496 /*
497 LOG(info) <<Form("CbmTofTracklet::GetFitPoint %d, %6.2f - %6.2f, %6.2f - %6.2f, %6.2f, %6.2f ",
498 n,fP[0],fhit[n]->GetX(),fP[1],fhit[n]->GetY(),fP[2],fP[3]);
499 */
500 return fP;
501}
502
503double CbmTofTracklet::GetFitX(double dZ) { return fTrackPar.GetX() + fTrackPar.GetTx() * (dZ - fTrackPar.GetZ()); }
504
505double CbmTofTracklet::GetFitY(double dZ) { return fTrackPar.GetY() + fTrackPar.GetTy() * (dZ - fTrackPar.GetZ()); }
506
507double CbmTofTracklet::GetFitT(double dZ)
508{
509 // return fT0 + dR*fTt;
510 //return fT0 + fTt*dZ*sqrt(fTrackPar.GetTx()*fTrackPar.GetTx()+fTrackPar.GetTy()*fTrackPar.GetTy());
511 return fT0
512 + fTt * (dZ - fTrackPar.GetZ())
514}
515
516void CbmTofTracklet::Clear(Option_t* /*option*/)
517{
518 // LOG(debug) << "Clear TofTracklet with option "<<*option;
519 fTofHit.clear();
520 fTofDet.clear();
521 fMatChi.clear();
522 fhit.clear();
523}
524
526{
527 LOG(info) << Form("TrklInfo: Nhits %d, Tt %6.3f, stations: ", GetNofHits(), GetTt());
528 LOG(info);
529 for (int32_t iH = 0; iH < GetNofHits(); iH++) {
530 LOG(info) << Form(" Hit %2d: Ind %5d, det 0x%08x, addr 0x%08x, chi %6.3f, ae[]= %6.4f", iH, fTofHit[iH],
531 fTofDet[iH], fhit[iH].GetAddress(), fMatChi[iH], fhit[iH].GetTimeError());
532 }
533}
534
536{
537 double dDist = sqrt(pow((pHit0->GetX() - pHit1->GetX()), 2) + pow((pHit0->GetY() - pHit1->GetY()), 2)
538 + pow((pHit0->GetZ() - pHit1->GetZ()), 2));
539 return dDist;
540}
541
542double CbmTofTracklet::GetRefVel(uint32_t iNhit)
543{
544 double dVel = 0.;
545 double dTt = 0.;
546 int32_t iNt = 0;
547 if (fhit.size() >= iNhit) {
548 for (uint32_t iHL = 0; iHL < iNhit - 1; iHL++) {
549 for (uint32_t iHH = iHL + 1; iHH < iNhit; iHH++) {
550 dTt += (fhit[iHH].GetTime() - fhit[iHL].GetTime()) / (fhit[iHH].GetR() - fhit[iHL].GetR());
551 iNt++;
552 }
553 }
554 }
555 if (iNt == 0) { LOG(debug) << " CbmTofTracklet::GetRefVel: No valid hit pair "; }
556 else {
557 dVel = (double) iNt / dTt;
558 }
559 return dVel;
560}
561
ClassImp(CbmConverterManager)
friend fvec sqrt(const fvec &a)
double GetTime() const
Definition CbmHit.h:76
double GetZ() const
Definition CbmHit.h:71
double GetY() const
Definition CbmPixelHit.h:74
double GetX() const
Definition CbmPixelHit.h:73
double GetCovariance(int index) const
void SetCovariance(int index, double cov)
std::string ToString() const
Return string representation of class.
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 fParamLast
double GetFitX(double Z)
int32_t GetFirstInd(int32_t iSmType)
virtual double Dist3D(CbmTofHit *pHit0, CbmTofHit *pHit1)