CbmRoot
Tracker.h
Go to the documentation of this file.
1 /*
2  * To change this license header, choose License Headers in Project Properties.
3  * To change this template file, choose Tools | Templates
4  * and open the template in the editor.
5  */
6 
7 /*
8  * File: Tracker.h
9  * Author: tablyaz
10  *
11  * Created on August 4, 2017, 2:23 PM
12  */
13 
14 #ifndef TRACKER_H
15 #define TRACKER_H
16 
17 #include "Station.h"
18 #include "Station3D.h"
19 #include <iostream>
20 
21 //#define CBM_BINNED_DEBUG
22 
23 #ifdef CBM_BINNED_DEBUG
24 #include "Debug.h"
25 #endif //CBM_BINNED_DEBUG
26 
27 using namespace std;
28 
30 public:
33  struct Track {
35  int length,
36  const CbmTrackParam2& lastParam,
37  Double_t chiSq)
38  : fHits(new CbmTBin::HitHolder*[length])
39  , fLength(0)
40  , fParams(new CbmTrackParam2[length])
41  , fIsClone(false)
42  , fChiSq(chiSq) {
43  for (int i = 0; i < length; ++i) {
44  if (ECbmModuleId::kRef == hits[i]->type) continue;
45 
47  fHits[fLength] = hits[i];
48  fHits[fLength++]->tracks.push_back(this);
49  }
50 
51  fParams[fLength - 1] = lastParam;
52  Double_t chiSq2 = chiSq;
53 
55 
56  for (int i = fLength - 2; i >= 0; --i) {
57  fParams[i] = tracker->fStationArray[i + 1]->Extrapolate(
58  fParams[i + 1], fHits[i]->hit->GetZ());
59  CbmBinnedStation::Update(fParams[i], fHits[i]->hit, chiSq2);
60  }
61  }
62 
63  ~Track() {
64  delete[] fHits;
65  delete[] fParams;
66  }
67 
68  Track(const Track&) = delete;
69  Track& operator=(const Track&) = delete;
71  int fLength;
72  //CbmBinnedStation::KFParams* fParams;
74  bool fIsClone;
75  Double_t fChiSq;
76  };
77 
78 public:
79  static CbmBinnedTracker* Instance();
80 
81 public:
82  CbmBinnedTracker(Double_t beamDx, Double_t beamDy)
83  : fNofTrueSegments(0)
84  , fNofWrongSegments(0)
85  , fStations()
86  , fStationArray()
87  , fNofStations(0)
88  , fBeforeLastLevel(0)
89  , fChiSqCut(0)
90  , fTracks()
91  , fBeamDx(beamDx)
92  , fBeamDxSq(beamDx * beamDx)
93  , fBeamDy(beamDy)
94  , fBeamDySq(beamDy * beamDy)
95  , fVertex()
96  , fVertexPseudoStation(0)
97  , fCanSkipHits(-1 /* Indicates: calculate the default value*/)
98  , fStage(0)
99 #ifdef CBM_BINNED_DEBUG
100  , fDebug()
101 #endif //CBM_BINNED_DEBUG
102  {
103  fVertex.SetX(0);
104  fVertex.SetY(0);
105  fVertex.SetZ(0);
106  fVertex.SetDx(beamDx);
107  fVertex.SetDy(beamDy);
108  fVertex.SetDxy(0);
109  fVertex.SetZ(0);
110  fVertex.SetTime(0);
111  fVertex.SetTimeError(1000000000000);
112  }
113 
114  ~CbmBinnedTracker() { delete fVertexPseudoStation; }
115 
118 
119  void Init() {
120  fVertexPseudoStation =
121  new CbmBinned3DStation(ECbmModuleId::kRef, -0.1, 0.1, 1, 1, 1);
122  fVertexPseudoStation->SetMinY(-0.1);
123  fVertexPseudoStation->SetMaxY(0.1);
124  fVertexPseudoStation->SetMinX(-0.1);
125  fVertexPseudoStation->SetMaxX(0.1);
126  fVertexPseudoStation->Init();
127  fVertexPseudoStation->AddHit(ECbmModuleId::kRef, &fVertex, -1);
128 
129  for (std::map<Double_t, CbmBinnedStation*>::const_iterator i =
130  fStations.begin();
131  i != fStations.end();
132  ++i) {
133  fStationArray.push_back(i->second);
134  std::cout << "Station min and max Zs: " << i->second->GetMinZ() << ", "
135  << i->second->GetMaxZ() << std::endl;
136  }
137 
138  if (fCanSkipHits < 0) fCanSkipHits = 0.3 * fStationArray.size();
139 
140  fChiSqCut = (fStations.size() - fCanSkipHits) * cbmBinnedSigmaSq * 3;
141  }
142 
143  Double_t GetBeamDxSq() const { return fBeamDxSq; }
144  Double_t GetBeamDySq() const { return fBeamDySq; }
145  CbmPixelHit& GetVertex() { return fVertex; }
146 
147  void AddStation(CbmBinnedStation* station) {
148  if (fStations.empty()) station->SetDefaultUse();
149 
150  fStations[station->GetMinZ()] = station;
151  fNofStations = fStations.size();
152  fBeforeLastLevel = fNofStations - 2;
153  }
154 
155  void SetChiSqCut(Double_t v) { fChiSqCut = v; }
156 
157  char GetStage() const { return fStage; }
158 
159  void SetStage(char v) {
160  fStage = v;
161  fVertexPseudoStation->SetStage(v);
162 
163  for (std::vector<CbmBinnedStation*>::iterator i = fStationArray.begin();
164  i != fStationArray.end();
165  ++i) {
166  CbmBinnedStation* aStation = *i;
167  aStation->SetStage(v);
168  }
169  }
170 
171  void SetCanSkipHits(Int_t v) { fCanSkipHits = v; }
172 
173  void Reconstruct(Double_t startTime) {
174  Clear();
175 
176  for (std::map<Double_t, CbmBinnedStation*>::iterator i = fStations.begin();
177  i != fStations.end();
178  ++i) {
179  CbmBinnedStation* aStation = i->second;
180  aStation->SetMinT(startTime);
181  }
182 
184  //ReconstructLocal();
185  //ReconstructGlobal();
186 
187  for (int i = -1; i <= fCanSkipHits; ++i) {
188  SetStage(i + 1);
189 
190  for (int j = 0; j <= (i == fCanSkipHits ? 0 : 1); ++j)
191  SeedTracks(i, i + j + 1);
192  }
193 
194  FindClones();
195 
196  std::cout << "Reconstructed "
197  << count_if(fTracks.begin(),
198  fTracks.end(),
199  [](const Track* t) { return !t->fIsClone; })
200  << " tracks" << std::endl;
201  }
202 
203  std::list<Track*>::const_iterator GetTracksBegin() const {
204  return fTracks.begin();
205  }
206  std::list<Track*>::const_iterator GetTracksEnd() const {
207  return fTracks.end();
208  }
209 
210 private:
211  void Clear() {
212  fVertexPseudoStation->SetStage(0);
213 
214  for (std::map<Double_t, CbmBinnedStation*>::iterator i = fStations.begin();
215  i != fStations.end();
216  ++i) {
217  CbmBinnedStation* aStation = i->second;
218  aStation->Clear();
219  }
220 
221  for (std::list<Track*>::iterator i = fTracks.begin(); i != fTracks.end();
222  ++i)
223  delete *i;
224 
225  fTracks.clear();
226  }
227 
229  std::map<Double_t, CbmBinnedStation*>::iterator i = fStations.begin();
230  i->second->CreateSegmentsFromHits();
231 
232  for (; true;) {
233  CbmBinnedStation* curStation = i->second;
234  ++i;
235 
236  if (i == fStations.end()) break;
237 
238  CbmBinnedStation* nextStation = i->second;
239  curStation->IterateSegments(
240  [&](CbmBinnedStation::Segment& segment) -> void {
241  nextStation->SearchHits(
242  segment, [&](CbmTBin::HitHolder & /*hitHolder*/) -> void {});
243  });
244  }
245 
246 #if 0 //def CBM_BINNED_DEBUG
247  static int nofRefTracks = 0;
248  static int nofRecoRefHits[] = { 0, 0, 0, 0, 0, 0 };
249  fDebug.Exec();
250  int stNo = 0;
251  CbmBinnedStation* firstStation = fStations.begin()->second;
252 
253  for (int i = 0; i < fDebug.fMCTracks.size(); ++i)
254  {
255  const CbmBinnedDebug::MCTrack& mcTrack = fDebug.fMCTracks[i];
256 
257  if (!mcTrack.isRef)
258  continue;
259 
260  ++nofRefTracks;
261  bool found[] = { false, false, false, false, false, false };
262  firstStation->IterateSegments(
263  [&](CbmBinnedStation::Segment& segment)->void
264  {
265  CbmTBin::HitHolder* hitHolder = segment.end;
266 
267  if (fDebug.TrackHasHit(stNo, i, hitHolder->index))
268  found[stNo] = true;
269 
270  std::list<CbmBinnedStation::Segment*> tmp(segment.children);
271 
272  while(!tmp.empty())
273  {
274  ++stNo;
275  std::list<CbmBinnedStation::Segment*> tmp2;
276 
277  for (std::list<CbmBinnedStation::Segment*>::const_iterator j = tmp.begin(); j != tmp.end(); ++j)
278  {
279  const CbmBinnedStation::Segment* s = *j;
280  tmp2.insert(tmp2.end(), s->children.begin(), s->children.end());
281  CbmTBin::HitHolder* hh = s->end;
282 
283  if (fDebug.TrackHasHit(stNo, i, hh->index))
284  found[stNo] = true;
285  }
286 
287  tmp.clear();
288  tmp.splice(tmp.end(), tmp2);
289  }
290 
291  stNo = 0;
292  }
293  );
294 
295  std::cout << "Reco hits: ";
296 
297  for (int j = 0; j < sizeof(nofRecoRefHits) / sizeof(int); ++j)
298  {
299  if (found[j])
300  ++nofRecoRefHits[j];
301 
302  double proc = 100 * nofRecoRefHits[j];
303  proc /= nofRefTracks;
304  std::cout << "[" << proc << "%=" << nofRecoRefHits[j] << "/" << nofRefTracks << "]";
305  }
306 
307  std::cout << std::endl << std::endl << std::endl;
308  }
309 #endif //CBM_BINNED_DEBUG
310  }
311 
312  Double_t GetChiSq(Double_t scatXSq,
313  Double_t scatYSq,
314  CbmBinnedStation::Segment& segment1,
315  CbmBinnedStation::Segment& segment2) const {
316  const CbmPixelHit* hit1 = segment1.begin->hit;
317  const CbmPixelHit* hit2 = segment1.end->hit;
318 
319  if (hit2 != segment2.begin->hit) return cbmBinnedCrazyChiSq;
320 
321  /*Double_t chiSqCoeffX1 = stationNumber < 1 ? 1 : fStations[stationNumber - 1]->GetNofSigmaXSq() / cbmBinnedSigmaSq;
322  Double_t chiSqCoeffY1 = stationNumber < 1 ? 1 : fStations[stationNumber - 1]->GetNofSigmaYSq() / cbmBinnedSigmaSq;
323  Double_t chiSqCoeffX2 = fStations[stationNumber]->GetNofSigmaXSq() / cbmBinnedSigmaSq;
324  Double_t chiSqCoeffY2 = fStations[stationNumber]->GetNofSigmaYSq() / cbmBinnedSigmaSq;
325  Double_t chiSqCoeffX = fStations[stationNumber + 1]->GetNofSigmaXSq() / cbmBinnedSigmaSq;
326  Double_t chiSqCoeffY = fStations[stationNumber + 1]->GetNofSigmaYSq() / cbmBinnedSigmaSq;*/
327 
328  const CbmPixelHit* hit = segment2.end->hit;
329  Double_t x1 = hit1->GetX();
330  Double_t y1 = hit1->GetY();
331  Double_t z1 = hit1->GetZ();
332  // Double_t t1 = hit1->GetTime(); (FU) not used
333  Double_t dx1 = hit1->GetDx();
334  Double_t dx1Sq = dx1 * dx1;
335  Double_t dy1 = hit1->GetDy();
336  Double_t dy1Sq = dy1 * dy1;
337  // Double_t dt1 = hit1->GetTimeError(); (FU) not used
338  // Double_t dt1Sq = dt1 * dt1; (FU) not used
339 
340  Double_t x2 = hit2->GetX();
341  Double_t y2 = hit2->GetY();
342  Double_t z2 = hit2->GetZ();
343  // Double_t t2 = hit2->GetTime(); (FU) not used
344  Double_t dx2 = hit2->GetDx();
345  Double_t dx2Sq = dx2 * dx2;
346  Double_t dy2 = hit2->GetDy();
347  Double_t dy2Sq = dy2 * dy2;
348  // Double_t dt2 = hit2->GetTimeError(); (FU) not used
349  // Double_t dt2Sq = dt2 * dt2; (FU) not used
350 
351  Double_t x = hit->GetX();
352  Double_t y = hit->GetY();
353  Double_t z = hit->GetZ();
354  //Double_t t = hit->GetTime(); (VF) unused
355  Double_t dx = hit->GetDx();
356  Double_t dxSq = dx * dx;
357  Double_t dy = hit->GetDy();
358  Double_t dySq = dy * dy;
359  //Double_t dt = hit->GetTimeError(); (VF) unused
360  //Double_t dtSq = dt * dt; (VF) unused
361 
362 
363  /*dx1Sq *= chiSqCoeffX1;
364  dy1Sq *= chiSqCoeffY1;
365  dx2Sq *= chiSqCoeffX2;
366  dy2Sq *= chiSqCoeffY2;
367  dxSq *= chiSqCoeffX;
368  dySq *= chiSqCoeffY;*/
369 
370  Double_t deltaZ12 = z2 - z1;
371  Double_t deltaZ = z - (z1 + z2) / 2;
372  Double_t coeff1 = (0.5 - deltaZ / deltaZ12);
373  Double_t coeff1Sq = coeff1 * coeff1;
374  Double_t coeff2 = (0.5 + deltaZ / deltaZ12);
375  Double_t coeff2Sq = coeff2 * coeff2;
376 
377  Double_t x12 = coeff1 * x1 + coeff2 * x2;
378  Double_t dx12Sq = coeff1Sq * dx1Sq + coeff2Sq * dx2Sq;
379  Double_t y12 = coeff1 * y1 + coeff2 * y2;
380  Double_t dy12Sq = coeff1Sq * dy1Sq + coeff2Sq * dy2Sq;
381 
382  // Double_t tx = (x2 - x1) / deltaZ12; (FU) not used
383  // Double_t ty = (y2 - y1) / deltaZ12; (FU) not used
384 
385  /* (VF) not used.
386  Double_t t12;
387  Double_t dt12Sq;
388 
389  if (0 == dt1)
390  {
391  t12 = t2 + std::sqrt(1 + tx * tx + ty * ty) * (z - z2) / cbmBinnedSOL;
392  dt12Sq = dt2Sq;
393  }
394  else
395  {
396  t12 = (t1 + t2) /2 + std::sqrt(1 + tx * tx + ty * ty) * deltaZ12 / cbmBinnedSOL;
397  dt12Sq = (dt1Sq + dt2Sq) / 2;
398  }
399  */
400 
401  return (x - x12) * (x - x12) / (dx12Sq + dxSq + scatXSq)
402  + (y - y12) * (y - y12) / (dy12Sq + dySq + scatYSq)
403  //+ (t - t12) * (t - t12) / (dt12Sq + dtSq)
404  ;
405  }
406 
408  CbmBinnedStation::Segment& segment2) const {
409  const CbmPixelHit* hit1 = segment1.begin->hit;
410  const CbmPixelHit* hit2 = segment1.end->hit;
411 
412  if (hit2 != segment2.begin->hit) return cbmBinnedCrazyChiSq;
413 
414  const CbmPixelHit* hit = segment2.end->hit;
415  Double_t x1 = hit1->GetX();
416  Double_t y1 = hit1->GetY();
417  Double_t z1 = hit1->GetZ();
418  //Double_t t1 = hit1->GetTime(); (VF) unused
419  Double_t dx1 = hit1->GetDx();
420  Double_t dx1Sq = dx1 * dx1;
421  Double_t dy1 = hit1->GetDy();
422  Double_t dy1Sq = dy1 * dy1;
423 
424  Double_t x2 = hit2->GetX();
425  Double_t y2 = hit2->GetY();
426  Double_t z2 = hit2->GetZ();
427  //Double_t t2 = hit2->GetTime(); (VF) unused
428  Double_t dx2 = hit2->GetDx();
429  Double_t dx2Sq = dx2 * dx2;
430  Double_t dy2 = hit2->GetDy();
431  Double_t dy2Sq = dy2 * dy2;
432 
433  Double_t x = hit->GetX();
434  Double_t y = hit->GetY();
435  Double_t z = hit->GetZ();
436  //Double_t t = hit->GetTime(); (VF) unused
437  Double_t dx = hit->GetDx();
438  Double_t dxSq = dx * dx;
439  Double_t dy = hit->GetDy();
440  Double_t dySq = dy * dy;
441 
442  Double_t deltaZ12 = z2 - z1;
443  Double_t deltaZ = z - (z1 + z2) / 2;
444  Double_t coeff1 = (0.5 - deltaZ / deltaZ12);
445  Double_t coeff1Sq = coeff1 * coeff1;
446  Double_t coeff2 = (0.5 + deltaZ / deltaZ12);
447  Double_t coeff2Sq = coeff2 * coeff2;
448 
449  Double_t x12 = coeff1 * x1 + coeff2 * x2;
450  Double_t dx12Sq = coeff1Sq * dx1Sq + coeff2Sq * dx2Sq;
451  Double_t y12 = coeff1 * y1 + coeff2 * y2;
452  Double_t dy12Sq = coeff1Sq * dy1Sq + coeff2Sq * dy2Sq;
453 
454  //Double_t tx = (x2 - x1) / deltaZ12; (VF) unused
455  //Double_t ty = (y2 - y1) / deltaZ12; (VF) unused
456 
457  return (x - x12) * (x - x12) / (dx12Sq + dxSq)
458  + (y - y12) * (y - y12) / (dy12Sq + dySq);
459  }
460 
461  /*void ReconstructGlobal()
462  {
463  std::map<Double_t, CbmBinnedStation*>::reverse_iterator stationIter = fStations.rbegin();
464  CbmBinnedStation* lastStation = (stationIter++)->second;
465  lastStation->NulifySegments();
466 
467  int stN = 4;
468  CbmBinnedStation* nextStation = lastStation;
469 
470  for (; stationIter != fStations.rend(); ++stationIter)
471  {
472  CbmBinnedStation* station = stationIter->second;
473  station->IterateSegments(
474  [&](CbmBinnedStation::Segment& segment)->void
475  {
476  CbmBinnedStation::Segment* closest = 0;
477  Double_t clDist = 0;
478  CbmBinnedStation::Segment* segChiSq = 0;
479  Double_t minSegChiSq = 0;
480 
481  for (std::list<CbmBinnedStation::Segment*>::iterator i = segment.children.begin(); i != segment.children.end(); ++i)
482  {
483  CbmBinnedStation::Segment* child = *i;
484 
485  if (child->chiSq > fChiSqCut)
486  continue;
487 
488  Double_t chiSq = GetChiSq(nextStation->GetScatXSq(), nextStation->GetScatYSq(), segment, *child) + child->chiSq;
489 
490  if (chiSq > fChiSqCut)
491  continue;
492 
493  if (segment.chiSq > chiSq)
494  {
495  segment.bestBranch = child;
496  segment.chiSq = chiSq;
497  }
498  }
499  }
500  );
501  --stN;
502  nextStation = station;
503  }
504 
505  fStations.begin()->second->IterateSegments(
506  [&](CbmBinnedStation::Segment& segment)->void
507  {
508  if (segment.chiSq > fChiSqCut)
509  return;
510 
511  CbmTBin::HitHolder* trackHolders[fNofStations];
512  CbmBinnedStation::Segment* segChain = &segment;
513  int i = 0;
514 
515  while (0 != segChain)
516  {
517  trackHolders[i++] = &segChain->end;
518  segChain = segChain->bestBranch;
519  }
520 
521  Track* aCandidate = new Track(trackHolders, fNofStations, segment.chiSq);
522  fTracks.push_back(aCandidate);
523  }
524  );
525  }*/
526  /*void TraverseTrackCandidates(int level, CbmBinnedStation::Segment** trackStart, CbmTBin::HitHolder** hhs, Double_t chiSq, std::list<Track*>& candidates, Double_t scatXSqs[6], Double_t scatYSqs[6])
527  {
528  CbmBinnedStation::Segment* segment = trackStart[level];
529 
530  for (std::list<CbmBinnedStation::Segment*>::iterator i = segment->children.begin(); i != segment->children.end(); ++i)
531  {
532  CbmBinnedStation::Segment* childSegment = *i;
533  Double_t deltaChiSq = GetChiSq(scatXSqs[level + 1], scatYSqs[level + 1], *segment, *childSegment);
534  Double_t chiSq2 = chiSq + deltaChiSq;
535  trackStart[level + 1] = childSegment;
536  hhs[level + 1] = childSegment->end;
537 
538  if (level == 4)
539  {
540  Track* aCandidate = new Track(hhs, 6, chiSq2);
541  candidates.push_back(aCandidate);
542  }
543  else
544  TraverseTrackCandidates(level + 1, trackStart, hhs, chiSq2, candidates, scatXSqs, scatYSqs);
545  }
546  }*/
547 
548  //KFStation fKFStations[6];
549 
550  /*void KFAddPointCoord(int stationNumber, CbmBinnedStation::KFParamsCoord& param, const CbmBinnedStation::KFParamsCoord& prevParam,
551  Double_t m, Double_t V, Double_t& chi2, Double_t z, Double_t prevZ, int coordNumber)
552  {
553  //const KFStation& station = fKFStations[stationNumber];
554  const CbmBinnedStation* station = fStationArray[stationNumber];
555  CbmBinnedStation::KFStation::Q Q = { 0 == coordNumber ? station->GetScatXSq() : station->GetScatYSq(), 0, 0, 0 };
556  Double_t deltaZ = z - prevZ;
557  Double_t deltaZSq = deltaZ * deltaZ;
558 
559  // Extrapolate.
560  param.coord += prevParam.tg * deltaZ; // params[k].tg is unchanged.
561 
562  // Filter.
563  param.C11 += prevParam.C12 * deltaZ + prevParam.C21 * deltaZ + prevParam.C22 * deltaZSq + Q.Q11;
564  param.C12 += prevParam.C22 * deltaZ + Q.Q12;
565  param.C21 += prevParam.C22 * deltaZ + Q.Q21;
566  param.C22 += Q.Q22;
567 
568  Double_t S = 1.0 / (V + param.C11);
569  Double_t Kcoord = param.C11 * S;
570  Double_t Ktg = param.C21 * S;
571  Double_t dzeta = m - param.coord;
572  param.coord += Kcoord * dzeta;
573  param.tg += Ktg * dzeta;
574  param.C21 -= param.C11 * Ktg;
575  param.C22 -= param.C12 * Ktg;
576  param.C11 *= 1.0 - Kcoord;
577  param.C12 *= 1.0 - Kcoord;
578  chi2 += dzeta * S * dzeta;
579  }
580 
581  void KFAddPoint(int stationNumber, CbmBinnedStation::KFParams& param, const CbmBinnedStation::KFParams& prevParam, Double_t m[2], Double_t V[2], Double_t z, Double_t prevZ)
582  {
583  KFAddPointCoord(stationNumber, param.xParams, prevParam.xParams, m[0], V[0], param.chi2, z, prevZ, 0);
584  KFAddPointCoord(stationNumber, param.yParams, prevParam.yParams, m[1], V[1], param.chi2, z, prevZ, 1);
585  }*/
586 
587  void TraverseTrackCandidates(int level,
588  CbmBinnedStation::Segment** trackStart,
589  CbmTBin::HitHolder** hhs,
590  ECbmModuleId* hts,
591  std::list<Track*>& candidates,
592  CbmTrackParam2 kfParamsPrev,
593  Double_t chiSqPrev) {
594  CbmBinnedStation::Segment* segment = trackStart[level];
595  const CbmPixelHit* hit = segment->end->hit;
596  CbmTrackParam2 kfParams =
597  fStationArray[level]->Extrapolate(kfParamsPrev, hit->GetZ());
598  Double_t chiSq = chiSqPrev;
599  CbmBinnedStation::Update(kfParams, hit, chiSq);
600 
601  //CbmBinnedSettings* settings = CbmBinnedSettings::Instance(); (VF) unused
602 
603  if (level == fNofStations - 1) {
604  Track* aCandidate = new Track(hhs, fNofStations, kfParams, chiSq);
605  candidates.push_back(aCandidate);
606  return;
607  }
608 
609  for (std::list<CbmBinnedStation::Segment*>::iterator i =
610  segment->children.begin();
611  i != segment->children.end();
612  ++i) {
613  CbmBinnedStation::Segment* childSegment = *i;
614  trackStart[level + 1] = childSegment;
615  hhs[level + 1] = childSegment->end;
616  TraverseTrackCandidates(
617  level + 1, trackStart, hhs, hts, candidates, kfParams, chiSq);
618  }
619  }
620 
622  std::map<Double_t, CbmBinnedStation*>::iterator startStationIter =
623  fStations.begin();
624  CbmBinnedStation* startStation = startStationIter->second;
625  CbmBinnedStation* secondStation = fStationArray[1];
626  startStation->IterateSegments(
627  [&](CbmBinnedStation::Segment& segment) -> void {
628  CbmBinnedStation::Segment* segments[fNofStations];
629  segments[0] = &segment;
630  CbmTBin::HitHolder* trackHolders[fNofStations];
631  ECbmModuleId hitTypes[fNofStations];
632  trackHolders[0] = segment.end;
633  hitTypes[0] = secondStation->GetStationType();
634  std::list<Track*> candidates;
635 
636  //TraverseTrackCandidates(0, segments, trackHolders, 0, candidates, scatXSqs, scatYSqs);
637  const CbmPixelHit* p1 = segment.begin->hit;
638  //const CbmPixelHit* p2 = segment.end->hit; (VF) unused
639  CbmTrackParam2 kfParams;
640  kfParams.SetX(p1->GetX());
641  kfParams.SetTx(0);
642  kfParams.SetY(p1->GetY());
643  kfParams.SetTy(0);
644  //kfParams.SetQp(1);
645  kfParams.SetZ(p1->GetZ());
646  kfParams.SetTime(p1->GetTime());
647  /*Double_t C[21];
648  std::fill_n(C, 21, 0);
649  C[0] = p1->GetDx() * p1->GetDx();// Cxx
650  C[6] = p1->GetDy() * p1->GetDy();// Cyy
651  C[11] = 1;// Ctxtx
652  C[15] = 1;// Ctyty
653  C[18] = 1;// Cqpqp
654  C[20] = p1->GetTimeError() * p1->GetTimeError();// Ctt
655  kfParams.SetCovMatrix(C);*/
656  kfParams.SetCovXX(p1->GetDx() * p1->GetDx());
657  kfParams.SetCovYY(p1->GetDy() * p1->GetDy());
658  kfParams.SetCovTxTx(1);
659  kfParams.SetCovTyTy(1);
660  kfParams.SetCovTT(p1->GetTimeError() * p1->GetTimeError());
661  Double_t chiSq = 0;
662  TraverseTrackCandidates(
663  0, segments, trackHolders, hitTypes, candidates, kfParams, chiSq);
664  Track* bestCandidate = 0;
665 
666  for (std::list<Track*>::iterator i = candidates.begin();
667  i != candidates.end();
668  ++i) {
669  Track* aCandidate = *i;
670 
671  if (0 == bestCandidate
672  || aCandidate->fChiSq < bestCandidate->fChiSq) {
673  delete bestCandidate;
674  bestCandidate = aCandidate;
675  } else
676  delete aCandidate;
677  }
678 
679  if (0 != bestCandidate) fTracks.push_back(bestCandidate);
680  });
681 
682 #ifdef CBM_BINNED_DEBUG
683  static int nofRefTracks = 0;
684  static int nofRecoRefHits[] = {0, 0, 0, 0, 0, 0};
685  fDebug.Exec();
686  CbmBinnedStation* firstStation = fStations.begin()->second;
687 
688  for (int i = 0; i < fDebug.fMCTracks.size(); ++i) {
689  const CbmBinnedDebug::MCTrack& mcTrack = fDebug.fMCTracks[i];
690 
691  if (!mcTrack.isRef) continue;
692 
693  for (std::list<Track*>::const_iterator j = fTracks.begin();
694  j != fTracks.end();
695  ++j) {
696  const Track* recoTrack = *j;
697  const CbmTBin::HitHolder* firstHit = recoTrack->fHits[0];
698 
699  if (!fDebug.TrackHasHit(0, i, firstHit->index)) continue;
700 
701  ++nofRecoRefHits[0];
702  ++nofRefTracks;
703 
704  for (int k = 1; k < 6; ++k) {
705  if (fDebug.TrackHasHit(k, i, recoTrack->fHits[k]->index))
706  ++nofRecoRefHits[k];
707  }
708  }
709  }
710 
711  std::cout << "Reco hits: ";
712 
713  for (int j = 0; j < sizeof(nofRecoRefHits) / sizeof(int); ++j) {
714  double proc = 100 * nofRecoRefHits[j];
715  proc /= nofRefTracks;
716  std::cout << "[" << proc << "%=" << nofRecoRefHits[j] << "/"
717  << nofRefTracks << "]";
718  }
719 
720  std::cout << std::endl << std::endl << std::endl;
721 #endif //CBM_BINNED_DEBUG
722  }
723 
724  void SeedTracks(int leftStationNo, int rightStationNo) {
725  int skippedHits = rightStationNo - leftStationNo - 1;
726  CbmBinnedStation* leftStation =
727  0 > leftStationNo ? fVertexPseudoStation : fStationArray[leftStationNo];
728  leftStation->IterateHits(
729  [this, &leftStationNo, &rightStationNo, &skippedHits](
730  CbmTBin::HitHolder& leftHitHolder) -> void {
731 #ifdef __MACH__
732  CbmTBin::HitHolder* trackHoldersBuf[fNofStations + 1];
733  CbmTBin::HitHolder** trackHolders = trackHoldersBuf;
734  CbmTBin::HitHolder* tmpTrackHoldersBuf[fNofStations + 1];
735  CbmTBin::HitHolder** tmpTrackHolders = tmpTrackHoldersBuf;
736 #else //__MACH__
737  CbmTBin::HitHolder* trackHolders[fNofStations + 1];
738  CbmTBin::HitHolder* tmpTrackHolders[fNofStations + 1];
739 #endif //__MACH__
740  tmpTrackHolders[0] = &leftHitHolder;
741  const CbmPixelHit* leftHit = leftHitHolder.hit;
742  CbmTrackParam2 kfParams;
743  kfParams.SetX(leftHit->GetX());
744  kfParams.SetTx(0);
745  kfParams.SetY(leftHit->GetY());
746  kfParams.SetTy(0);
747  kfParams.SetZ(leftHit->GetZ());
748  kfParams.SetTime(leftHit->GetTime());
749  kfParams.SetCovXX(leftHit->GetDx() * leftHit->GetDx());
750  kfParams.SetCovYY(leftHit->GetDy() * leftHit->GetDy());
751  kfParams.SetCovTxTx(1);
752  kfParams.SetCovTyTy(1);
753  kfParams.SetCovTT(leftHit->GetTimeError() * leftHit->GetTimeError());
754  Double_t chiSq = 0;
755  int bestLength = 2;
756  CbmTrackParam2 bestKfParams = kfParams;
757  Double_t bestChiSq = cbmBinnedCrazyChiSq;
758  CbmBinnedStation* rightStation = fStationArray[rightStationNo];
759  rightStation->IterateHits(
760  [this,
761  &leftStationNo,
762  &rightStationNo,
763  &skippedHits,
764  &trackHolders,
765  &tmpTrackHolders,
766  &kfParams,
767  &chiSq,
768  &bestLength,
769  &bestKfParams,
770  &bestChiSq,
771  &rightStation](CbmTBin::HitHolder& rightHitHolder) -> void {
772  tmpTrackHolders[1] = &rightHitHolder;
773  const CbmPixelHit* rightHit = rightHitHolder.hit;
774  CbmTrackParam2 updKfParams =
775  rightStation->Extrapolate(kfParams, rightHit->GetZ());
776  Double_t updChiSq = chiSq;
777  CbmBinnedStation::Update(updKfParams, rightHit, updChiSq);
778 
779  if (updChiSq > fChiSqCut) return;
780 
781  if (0 > leftStationNo) // Have to reset parameters here
782  {
783  bestChiSq = cbmBinnedCrazyChiSq;
784  bestLength = 2;
785  bestKfParams = kfParams;
786  }
787 
788  FollowTracks(0 > leftStationNo,
789  skippedHits,
790  rightStationNo,
791  3,
792  tmpTrackHolders,
793  updKfParams,
794  updChiSq,
795  bestLength,
796  trackHolders,
797  bestKfParams,
798  bestChiSq);
799 
800  if (0 > leftStationNo) // Have to save track here
801  {
802  if (bestLength - 1 >= fNofStations - fCanSkipHits) {
803  Track* aTrack =
804  new Track(trackHolders, bestLength, bestKfParams, bestChiSq);
805  fTracks.push_back(aTrack);
806  }
807  }
808  } // Lambda
809  ); // rightStation->IterateHits()
810 
811  if (0 <= leftStationNo) // Have to save track here
812  {
813  if (bestLength >= fNofStations - fCanSkipHits) {
814  Track* aTrack =
815  new Track(trackHolders, bestLength, bestKfParams, bestChiSq);
816  fTracks.push_back(aTrack);
817  }
818  }
819  });
820  }
821 
822  void FollowTracks(bool isPrimary,
823  int skippedHits,
824  int prevStationNo,
825  int length,
826  CbmTBin::HitHolder** trackHolders,
827  CbmTrackParam2 kfParams,
828  Double_t chiSq,
829  int& bestLength,
830  CbmTBin::HitHolder** bestTrackHolders,
831  CbmTrackParam2& bestKfParams,
832  Double_t& bestChiSq) {
833  Double_t prevZ = trackHolders[length - 2]->hit->GetZ();
834 
835  for (char i = 0; i <= (prevStationNo < fNofStations - 2 ? 1 : 0)
836  && skippedHits + i <= fCanSkipHits;
837  ++i) {
838  Int_t stationNo = prevStationNo + i + 1;
839  CbmBinnedStation* aStation = fStationArray[stationNo];
840  bool save = true;
841  aStation->SearchHits(
842  kfParams,
843  prevZ,
844  [this,
845  &isPrimary,
846  &skippedHits,
847  &length,
848  &trackHolders,
849  &kfParams,
850  &chiSq,
851  &bestLength,
852  &bestTrackHolders,
853  &bestKfParams,
854  &bestChiSq,
855  &i,
856  &stationNo,
857  &aStation,
858  &save](CbmTBin::HitHolder& hitHolder) -> void {
859  trackHolders[length - 1] = &hitHolder;
860  const CbmPixelHit* hit = hitHolder.hit;
861  CbmTrackParam2 updKfParams =
862  aStation->Extrapolate(kfParams, hit->GetZ());
863  Double_t updChiSq = chiSq;
864  CbmBinnedStation::Update(updKfParams, hit, updChiSq);
865 
866  Double_t chiSqCut = fChiSqCut;
867 
868  if (length - (isPrimary ? 1 : 0) > fNofStations - fCanSkipHits)
869  chiSqCut +=
870  (length - (isPrimary ? 1 : 0) - fNofStations + fCanSkipHits)
871  * cbmBinnedSigmaSq * 3;
872 
873  if (updChiSq > chiSqCut || updChiSq > bestChiSq)
874  return;
875  else {
876  save = false;
877 
878  if (stationNo < fNofStations - 1) {
879  FollowTracks(isPrimary,
880  skippedHits + i,
881  stationNo,
882  length + 1,
883  trackHolders,
884  updKfParams,
885  updChiSq,
886  bestLength,
887  bestTrackHolders,
888  bestKfParams,
889  bestChiSq);
890  } else {
891  if (length - (isPrimary ? 1 : 0) >= fNofStations - fCanSkipHits
892  && (length > bestLength
893  || (length == bestLength && updChiSq < bestChiSq))) {
894  for (int j = 0; j < length; ++j)
895  bestTrackHolders[j] = trackHolders[j];
896 
897  bestKfParams = updKfParams;
898  bestLength = length;
899  bestChiSq = chiSq;
900  }
901  }
902  }
903  } // Lambda
904  ); // SearchHits
905 
906  if (save) {
907  --length;
908 
909  if (length - (isPrimary ? 1 : 0) >= fNofStations - fCanSkipHits
910  && (length > bestLength
911  || (length == bestLength && chiSq < bestChiSq))) {
912  for (int j = 0; j < length; ++j)
913  bestTrackHolders[j] = trackHolders[j];
914 
915  bestKfParams = kfParams;
916  bestLength = length;
917  bestChiSq = chiSq;
918  }
919  }
920  }
921  }
922 
923  void FindClones() {
924  for (std::list<Track*>::iterator i = fTracks.begin(); i != fTracks.end();
925  ++i) {
926  Track* track = *i;
927 
928  if (track->fIsClone) continue;
929 
930  std::map<Track*, int> cloneNofs;
931 
932  for (int j = 0; j < track->fLength; ++j) {
933  CbmTBin::HitHolder* hit = track->fHits[j];
934  std::set<Track*> neighbourTracks;
935 
936  for (std::list<void*>::iterator k = hit->tracks.begin();
937  k != hit->tracks.end();
938  ++k) {
939  Track* track2 = static_cast<Track*>(*k);
940 
941  if (track2 == track || track2->fIsClone) continue;
942 
943  neighbourTracks.insert(track2);
944  }
945 
946  for (std::set<Track*>::iterator k = neighbourTracks.begin();
947  k != neighbourTracks.end();
948  ++k) {
949  Track* track2 = *k;
950  std::map<Track*, int>::iterator cni = cloneNofs.find(track2);
951 
952  if (cni == cloneNofs.end())
953  cloneNofs[track2] = 1;
954  else
955  ++cni->second;
956  }
957  }
958 
959  for (std::map<Track*, int>::iterator j = cloneNofs.begin();
960  j != cloneNofs.end();
961  ++j) {
962  Track* track2 = j->first;
963  auto minLength =
964  track->fLength < track2->fLength ? track->fLength : track2->fLength;
965 
966  if (j->second < int(0.7 * minLength)) continue;
967 
968  if (track2->fLength > track->fLength) {
969  track->fIsClone = true;
970  break;
971  } else if (track2->fLength == track->fLength) {
972  if (track2->fChiSq < track->fChiSq) {
973  track->fIsClone = true;
974  break;
975  } else
976  track2->fIsClone = true;
977  } else
978  track2->fIsClone = true;
979  }
980  }
981  }
982 
983 private:
984  std::map<Double_t, CbmBinnedStation*> fStations;
985  std::vector<CbmBinnedStation*> fStationArray;
988  Double_t fChiSqCut;
989  std::list<Track*> fTracks;
990  Double_t fBeamDx;
991  Double_t fBeamDxSq;
992  Double_t fBeamDy;
993  Double_t fBeamDySq;
997  char fStage;
998 #ifdef CBM_BINNED_DEBUG
999  CbmBinnedDebug fDebug;
1000 #endif
1001 
1002  friend class CbmBinnedTrackerQA;
1004 };
1005 
1006 #endif /* TRACKER_H */
CbmBinnedTracker::fNofTrueSegments
int fNofTrueSegments
Definition: Tracker.h:31
CbmHit::GetZ
Double_t GetZ() const
Definition: CbmHit.h:70
CbmBinnedTracker::CbmBinnedTracker
CbmBinnedTracker(const CbmBinnedTracker &)=delete
CbmBinnedStation::Segment
Definition: Station.h:31
CbmBinnedDebug::MCTrack
Definition: Debug.h:43
CbmPixelHit::GetX
Double_t GetX() const
Definition: CbmPixelHit.h:83
CbmBinnedDebug
Definition: Debug.h:30
CbmBinnedTracker::Init
void Init()
Definition: Tracker.h:119
CbmPixelHit::GetY
Double_t GetY() const
Definition: CbmPixelHit.h:84
CbmBinnedTracker::fBeforeLastLevel
int fBeforeLastLevel
Definition: Tracker.h:987
CbmBinnedTracker::fStage
char fStage
Definition: Tracker.h:997
CbmBinnedTracker::fStations
std::map< Double_t, CbmBinnedStation * > fStations
Definition: Tracker.h:984
CbmBinnedTracker::fNofWrongSegments
int fNofWrongSegments
Definition: Tracker.h:32
CbmPixelHit::GetDx
Double_t GetDx() const
Definition: CbmPixelHit.h:85
CbmBinnedTracker::Track::operator=
Track & operator=(const Track &)=delete
CbmTBin::HitHolder::tracks
std::list< void * > tracks
Definition: Bins.h:35
CbmBinnedTracker::Track::fHits
CbmTBin::HitHolder ** fHits
Definition: Tracker.h:70
CbmBinnedStation::GetMinZ
Double_t GetMinZ() const
Definition: Station.h:435
cbmBinnedSigmaSq
const Double_t cbmBinnedSigmaSq
Definition: Station.h:25
i
int i
Definition: L1/vectors/P4_F32vec4.h:25
CbmBinnedTracker::fBeamDx
Double_t fBeamDx
Definition: Tracker.h:990
CbmBinnedTracker::Track::fLength
int fLength
Definition: Tracker.h:71
ECbmModuleId
ECbmModuleId
Definition: CbmDefs.h:33
CbmBinnedTracker::fTracks
std::list< Track * > fTracks
Definition: Tracker.h:989
CbmBinnedTracker::GetChiSqWithoutTime
Double_t GetChiSqWithoutTime(CbmBinnedStation::Segment &segment1, CbmBinnedStation::Segment &segment2) const
Definition: Tracker.h:407
CbmBinnedTracker::SeedTracks
void SeedTracks(int leftStationNo, int rightStationNo)
Definition: Tracker.h:724
CbmBinnedTracker::GetBeamDxSq
Double_t GetBeamDxSq() const
Definition: Tracker.h:143
CbmBinnedTracker::fBeamDy
Double_t fBeamDy
Definition: Tracker.h:992
CbmPixelHit::GetDy
Double_t GetDy() const
Definition: CbmPixelHit.h:86
CbmHit::GetTimeError
Double_t GetTimeError() const
Definition: CbmHit.h:76
CbmBinnedTracker::FindClones
void FindClones()
Definition: Tracker.h:923
Station.h
CbmBinnedTracker::Track::Track
Track(CbmTBin::HitHolder **hits, int length, const CbmTrackParam2 &lastParam, Double_t chiSq)
Definition: Tracker.h:34
CbmBinnedTracker::AddStation
void AddStation(CbmBinnedStation *station)
Definition: Tracker.h:147
CbmTrackParam2::SetCovTxTx
void SetCovTxTx(Double_t v)
Definition: CbmTrackParam2.h:80
CbmBinnedTracker::Track::~Track
~Track()
Definition: Tracker.h:63
CbmBinnedStation::Extrapolate
CbmTrackParam2 Extrapolate(const CbmTrackParam2 &parIn, Double_t zOut)
Definition: Station.h:95
CbmTBin::HitHolder::hit
const CbmPixelHit * hit
Definition: Bins.h:29
CbmBinnedTracker::Track::Track
Track(const Track &)=delete
CbmBinnedTracker::operator=
CbmBinnedTracker & operator=(const CbmBinnedTracker &)=delete
CbmBinnedTracker::Clear
void Clear()
Definition: Tracker.h:211
CbmBinnedHitReader::Read
virtual void Read()=0
CbmBinnedHitReader::Instance
static CbmBinnedHitReader * Instance()
Definition: HitReader.cxx:813
CbmBinnedTracker::Track
Definition: Tracker.h:33
z2
Double_t z2[nSects2]
Definition: pipe_v16a_mvdsts100.h:11
CbmBinnedStation::IterateHits
virtual void IterateHits(std::function< void(CbmTBin::HitHolder &)> handleHit)=0
CbmBinnedStation::SearchHits
virtual void SearchHits(const CbmTrackParam2 &stateVec, Double_t stateZ, std::function< void(CbmTBin::HitHolder &)> handleHit)=0
CbmBinnedStation::IterateSegments
void IterateSegments(std::function< void(Segment &)> handleSegment)
Definition: Station.h:586
CbmBinnedStation::Segment::children
std::list< Segment * > children
Definition: Station.h:35
CbmBinnedTracker::GetVertex
CbmPixelHit & GetVertex()
Definition: Tracker.h:145
CbmBinnedTracker::Reconstruct
void Reconstruct(Double_t startTime)
Definition: Tracker.h:173
CbmBinnedStation
Definition: Station.h:29
CbmTrackParam2::SetTime
void SetTime(Double_t time)
Definition: CbmTrackParam2.h:71
CbmTBin::HitHolder
Definition: Bins.h:27
CbmHit::GetTime
Double_t GetTime() const
Definition: CbmHit.h:75
CbmBinnedTracker::fNofStations
int fNofStations
Definition: Tracker.h:986
CbmBinnedTracker::fVertex
CbmPixelHit fVertex
Definition: Tracker.h:994
CbmBinnedStation::Update
static void Update(CbmTrackParam2 &par, const CbmPixelHit *hit, Double_t &chiSq)
Definition: Station.h:194
CbmTrackParam2::SetCovXX
void SetCovXX(Double_t v)
Definition: CbmTrackParam2.h:74
CbmBinnedTracker::SetStage
void SetStage(char v)
Definition: Tracker.h:159
CbmBinnedTracker::ReconstructLocal
void ReconstructLocal()
Definition: Tracker.h:228
CbmBinnedTracker::Track::fIsClone
bool fIsClone
Definition: Tracker.h:74
CbmBinnedStation::SetStage
void SetStage(char v)
Definition: Station.h:545
ECbmModuleId::kRef
@ kRef
Reference plane.
CbmBinnedTracker::Instance
static CbmBinnedTracker * Instance()
Definition: Tracker.cxx:9
CbmBinnedTracker::FollowTracks
void FollowTracks(bool isPrimary, int skippedHits, int prevStationNo, int length, CbmTBin::HitHolder **trackHolders, CbmTrackParam2 kfParams, Double_t chiSq, int &bestLength, CbmTBin::HitHolder **bestTrackHolders, CbmTrackParam2 &bestKfParams, Double_t &bestChiSq)
Definition: Tracker.h:822
CbmBinned3DStation
Definition: Station3D.h:21
CbmTrackParam2::SetCovTT
void SetCovTT(Double_t v)
Definition: CbmTrackParam2.h:84
CbmTrackParam2
Definition: CbmTrackParam2.h:68
CbmBinnedTracker::GetStage
char GetStage() const
Definition: Tracker.h:157
CbmBinnedDebug::MCTrack::isRef
bool isRef
Definition: Debug.h:44
cbmBinnedCrazyChiSq
const Double_t cbmBinnedCrazyChiSq
Definition: Station.h:27
CbmBinnedTracker::GetChiSq
Double_t GetChiSq(Double_t scatXSq, Double_t scatYSq, CbmBinnedStation::Segment &segment1, CbmBinnedStation::Segment &segment2) const
Definition: Tracker.h:312
CbmBinnedTracker
Definition: Tracker.h:29
CbmBinnedTrackerQA
Definition: CbmBinnedTrackerQA.h:29
CbmBinnedTracker::TraverseTrackCandidates
void TraverseTrackCandidates(int level, CbmBinnedStation::Segment **trackStart, CbmTBin::HitHolder **hhs, ECbmModuleId *hts, std::list< Track * > &candidates, CbmTrackParam2 kfParamsPrev, Double_t chiSqPrev)
Definition: Tracker.h:587
CbmBinnedStation::SetDefaultUse
void SetDefaultUse()
Definition: Station.h:451
CbmBinnedTracker::fVertexPseudoStation
CbmBinnedStation * fVertexPseudoStation
Definition: Tracker.h:995
CbmBinnedStation::SetMinT
void SetMinT(Double_t v)
Definition: Station.h:446
CbmBinnedTracker::fChiSqCut
Double_t fChiSqCut
Definition: Tracker.h:988
v
__m128 v
Definition: L1/vectors/P4_F32vec4.h:1
CbmBinnedStation::Segment::end
CbmTBin::HitHolder * end
Definition: Station.h:33
CbmBinnedTracker::Track::fChiSq
Double_t fChiSq
Definition: Tracker.h:75
CbmBinnedTracker::GetTracksEnd
std::list< Track * >::const_iterator GetTracksEnd() const
Definition: Tracker.h:206
x
Double_t x
Definition: CbmMvdSensorDigiToHitTask.cxx:68
CbmTBin::HitHolder::index
Int_t index
Definition: Bins.h:30
y
Double_t y
Definition: CbmMvdSensorDigiToHitTask.cxx:68
CbmBinnedTracker::fBeamDySq
Double_t fBeamDySq
Definition: Tracker.h:993
Station3D.h
CbmBinnedTracker::fStationArray
std::vector< CbmBinnedStation * > fStationArray
Definition: Tracker.h:985
CbmBinnedStation::GetStationType
ECbmModuleId GetStationType() const
Definition: Station.h:434
hits
static vector< vector< QAHit > > hits
Definition: CbmTofHitFinderTBQA.cxx:114
CbmBinnedTracker::SetChiSqCut
void SetChiSqCut(Double_t v)
Definition: Tracker.h:155
CbmPixelHit
Definition: CbmPixelHit.h:21
CbmBinnedTracker::Track::fParams
CbmTrackParam2 * fParams
Definition: Tracker.h:73
CbmBinnedTracker::GetTracksBegin
std::list< Track * >::const_iterator GetTracksBegin() const
Definition: Tracker.h:203
CbmBinnedTracker::GetBeamDySq
Double_t GetBeamDySq() const
Definition: Tracker.h:144
CbmBinnedTracker::SetCanSkipHits
void SetCanSkipHits(Int_t v)
Definition: Tracker.h:171
z1
Double_t z1[nSects1]
Definition: pipe_v16a_mvdsts100.h:6
CbmBinnedTracker::~CbmBinnedTracker
~CbmBinnedTracker()
Definition: Tracker.h:114
CbmBinnedTracker::fBeamDxSq
Double_t fBeamDxSq
Definition: Tracker.h:991
CbmTrackParam2::SetCovYY
void SetCovYY(Double_t v)
Definition: CbmTrackParam2.h:76
CbmTBin
Definition: Bins.h:25
CbmBinnedStation::Clear
virtual void Clear()
Definition: Station.h:552
CbmBinnedTracker::CbmBinnedTracker
CbmBinnedTracker(Double_t beamDx, Double_t beamDy)
Definition: Tracker.h:82
Debug.h
CbmTrackParam2::SetCovTyTy
void SetCovTyTy(Double_t v)
Definition: CbmTrackParam2.h:82
CbmBinnedTracker::fCanSkipHits
Int_t fCanSkipHits
Definition: Tracker.h:996
CbmBinnedTracker::ReconstructGlobal
void ReconstructGlobal()
Definition: Tracker.h:621
CbmBinnedStation::Segment::begin
CbmTBin::HitHolder * begin
Definition: Station.h:32