CbmRoot
CbmL1TrdTrackFinderSts.cxx
Go to the documentation of this file.
1 // -----------------------------------------------------------------------
2 // ----- CbmL1TrdTrackFinderSts -----
3 // ----- Created 6/12/05 by D. Kresan -----
4 // -----------------------------------------------------------------------
5 
7 
8 #include "CbmL1Def.h"
9 
10 #include "CbmKFTrack.h"
11 #include "CbmKFTrdHit.h"
12 #include "CbmStsTrack.h"
13 #include "CbmTrackMatch.h"
14 #include "CbmTrdHit.h"
15 #include "CbmTrdPoint.h"
16 #include "CbmTrdTrack.h"
17 #include "FairBaseParSet.h"
18 #include "FairDetector.h"
19 #include "FairRootManager.h"
20 #include "FairRunAna.h"
21 #include "FairRuntimeDb.h"
22 
23 #include "TArc.h"
24 #include "TCanvas.h"
25 #include "TClonesArray.h"
26 #include "TGraph.h"
27 #include "TH1F.h"
28 #include "TH2F.h"
29 #include "TLine.h"
30 #include "TMath.h"
31 
32 #include <iostream>
33 #include <map>
34 #include <vector>
35 
36 using std::cout;
37 using std::endl;
38 using std::map;
39 using std::vector;
40 
41 
42 //________________________________________________________________________
43 //
44 // CbmL1TrdTrackFinderSts
45 //
46 // Engine for track finding in the TRD. Based on the track extrapolation
47 // from the STS and further track following.
48 //
49 
50 
51 // -----------------------------------------------------------------------
53  : fEvents(0)
54  , // Number of events processed
55  fVerbose(1)
56  , // Verbosity level
57  fArrayTrdPoint(NULL)
58  , // Array of TRD points
59  fArrayTrdHit(0)
60  , // Array of TRD hits
61  fArrayStsTrack(NULL)
62  , // Array of STS tracks
63  fArrayStsTrackM(NULL)
64  , // Array of STS tracks
65  fArrayKFTrdHit(new TClonesArray("CbmKFTrdHit"))
66  , // Array of KF TRD hits
67  fvTrdTrack()
68  , fArrayTrdTrack(NULL)
69  , // Output Array of TRD tracks
70  fPid(211)
71  , // PID assumption
72  fNoTrdStations(0)
73  , // Number of TRD stations
74  fNoTrdPerStation(0)
75  , // Number of TRD layers per station
76  fmapHitUsed()
77  , fh_chi2hit(0)
78  , // Control histogramm
79  fh_chi2hit_plane(0)
80  , // Control histogramm
81  fh_resx_plane_true(0)
82  , // Control histogramm
83  fh_resy_plane_true(0)
84  , // Control histogramm
85  fh_resx_plane_fake(0)
86  , // Control histogramm
87  fh_resy_plane_fake(0)
88  , // Control histogramm
89  fh_resx_mom_true(0)
90  , // Control histogramm
91  fh_resy_mom_true(0)
92  , // Control histogramm
93  fh_pullx_plane_true(0)
94  , // Control histogramm
95  fh_pully_plane_true(0)
96  , // Control histogramm
97  fh_pullx_plane_fake(0)
98  , // Control histogramm
99  fh_pully_plane_fake(0)
100  , // Control histogramm
101  fLostTracks() {}
102 // -----------------------------------------------------------------------
103 
104 
105 // -----------------------------------------------------------------------
107  : fEvents(0)
108  , // Number of events processed
109  fVerbose(verbose)
110  , // Verbosity level
111  fArrayTrdPoint(NULL)
112  , // Array of TRD points
113  fArrayTrdHit(0)
114  , // Array of TRD hits
115  fArrayStsTrack(NULL)
116  , // Array of STS tracks
117  fArrayStsTrackM(NULL)
118  , // Array of STS tracks
119  fArrayKFTrdHit(new TClonesArray("CbmKFTrdHit"))
120  , // Array of KF TRD hits
121  fvTrdTrack()
122  , fArrayTrdTrack(NULL)
123  , // Output Array of TRD tracks
124  fPid(211)
125  , // PID assumption
126  fNoTrdStations(0)
127  , // Number of TRD stations
128  fNoTrdPerStation(0)
129  , // Number of TRD layers per station
130  fmapHitUsed()
131  , fh_chi2hit(0)
132  , // Control histogramm
133  fh_chi2hit_plane(0)
134  , // Control histogramm
135  fh_resx_plane_true(0)
136  , // Control histogramm
137  fh_resy_plane_true(0)
138  , // Control histogramm
139  fh_resx_plane_fake(0)
140  , // Control histogramm
141  fh_resy_plane_fake(0)
142  , // Control histogramm
143  fh_resx_mom_true(0)
144  , // Control histogramm
145  fh_resy_mom_true(0)
146  , // Control histogramm
147  fh_pullx_plane_true(0)
148  , // Control histogramm
149  fh_pully_plane_true(0)
150  , // Control histogramm
151  fh_pullx_plane_fake(0)
152  , // Control histogramm
153  fh_pully_plane_fake(0)
154  , // Control histogramm
155  fLostTracks() {}
156 // -----------------------------------------------------------------------
157 
158 
159 // -----------------------------------------------------------------------
161  // Destructor
162  if (fArrayKFTrdHit) fArrayKFTrdHit->Delete();
163  delete fArrayKFTrdHit;
164  // why delete the trdtrack array? This pointer
165  // is passed from CbmTrdFindTracks and is registered with the iomanager...
166  // should be not our business to delete the TClonesArray pointer
167  if (fArrayTrdTrack) fArrayTrdTrack->Delete();
168  // delete fArrayTrdTrack;
169 }
170 // -----------------------------------------------------------------------
171 
172 
173 // -----------------------------------------------------------------------
175  // Initialisation of the algorithm
176 
177  // Create histogramms
179  // Activate data branches
180  DataBranches();
181  // Determine the TRD layout
182  TrdLayout();
183  // fNoTrdStations = 3;
184  // fNoTrdPerStation = 4;
185 }
186 // -----------------------------------------------------------------------
187 
188 
189 // -----------------------------------------------------------------------
190 Int_t CbmL1TrdTrackFinderSts::DoFind(TClonesArray* hitArray,
191  TClonesArray* trackArray) {
192  // Implementation of the track finding algorithm
193  if (NULL == hitArray) { return 0; }
194  fArrayTrdHit = hitArray;
195  fArrayTrdTrack = trackArray;
196 
197  fmapHitUsed.clear();
198  fLostTracks.clear();
199 
200  // Sort the TRD hits by plane number
201  SortTrdHits();
202 
203  // Main part of algorithm
204  // Follow the track in TRD
205 
206  Process();
207 
208  Int_t nTrdTracks = fArrayTrdTrack->GetEntriesFast();
209 
210  // Event output
211  if (fVerbose > 0) {
212  cout << "---------------------------------------" << endl
213  << "-I- CbmL1TrdTrackFinderSts -I-" << endl
214  << "-I- Event summary -I-" << endl
215  << "-I- STS tracks : " << fArrayStsTrack->GetEntriesFast()
216  << endl
217  << "-I- TRD tracks found : " << nTrdTracks << endl
218  << "-I- TRD tracks lost : " << fLostTracks.size() << endl
219  << "---------------------------------------" << endl
220  << endl;
221  } else {
222  cout << "-I- CbmL1TrdTrackFinderSts::DoFind : " << nTrdTracks
223  << " TRD tracks found." << endl;
224  }
225 
226  // Clear array of KF trd hits
227  fArrayKFTrdHit->Clear();
228 
229  // Increment number of events
230  fEvents += 1;
231 
232  // control output
233  cout << "-I- CbmL1TrdTrackFinder : " << fEvents << " events processed"
234  << endl;
235 
236  // Return number of found TRD tracks
237  return nTrdTracks;
238 }
239 // -----------------------------------------------------------------------
240 
241 
242 // -----------------------------------------------------------------------
244  // Create TRD tracks from STS tracks, process them throug all stations
245  // and move to the output array
246 
247  /* new TCanvas("c1", "", 10, 10, 800, 800);
248  Int_t n;
249  Double_t x[10000], y[10000];
250  Int_t index;
251  CbmTrdPoint *pt;
252  TVector3 pos;
253  for(Int_t i = 0; i < fNoTrdHits[0]; i++) {
254  index = fTrdHitIndex[0][i];
255  pt = (CbmTrdPoint*) fArrayTrdPoint->At(index);
256  if(NULL == pt) continue;
257  pt->Position(pos);
258  x[n] = pos.X();
259  y[n] = pos.Y();
260  n += 1;
261  }
262  TGraph *gr = new TGraph(n, x, y);
263  gr->SetMarkerStyle(24);
264  gr->SetMarkerColor(4);
265  gr->SetMarkerSize(0.5);
266  gr->SetTitle("first layer");
267  gr->Draw("AP");
268  gr->GetHistogram()->GetXaxis()->SetRangeUser(0., 273.);
269  gr->GetHistogram()->GetXaxis()->SetTitle("x (cm)");
270  gr->GetHistogram()->GetYaxis()->SetRangeUser(0., 273.);
271  gr->GetHistogram()->GetYaxis()->SetTitle("y (cm)");*/
272 
273 
274  Sts2Trd(0., 1e16, 0., 1e16);
275 
277  // RemoveFakes();
278  MoveOut();
279 
280  /*
281  Sts2Trd(0., 1.,
282  0., 1e16);
283  ProcessAllStations();
284 // RemoveFakes();
285  MoveOut();*/
286 }
287 // -----------------------------------------------------------------------
288 
289 
290 // -----------------------------------------------------------------------
292  Double_t pmax,
293  Double_t chi2min,
294  Double_t chi2max) {
295  // Create TRD track from each STS track, that fullfill the selection
296  // criteria
297 
298  Int_t nStsTrack = fArrayStsTrack->GetEntriesFast();
299  CbmStsTrack* stsTrack = NULL;
300  CbmTrdTrack* trdTrack = NULL;
301  /* Double_t mom;
302  Double_t chi2;*/
303  // Loop over STS tracks
304  for (Int_t iStsTrack = 0; iStsTrack < nStsTrack; iStsTrack++) {
305  // Get pointer to the STS track
306  stsTrack = L1_DYNAMIC_CAST<CbmStsTrack*>(fArrayStsTrack->At(iStsTrack));
307  if (NULL == stsTrack) continue;
308  /*
309  // Cut on momentum
310  mom = 1./TMath::Abs(stsTrack->GetParamLast()->GetQp());
311  if(mom < pmin || mom >= pmax) continue;
312  // Cut on chi2
313  chi2 = stsTrack->GetChi2() / (Double_t)stsTrack->GetNDF();
314  if(chi2 < chi2min || chi2 >= chi2max) continue;
315 */
316  // Create TRD track
317  trdTrack = new CbmTrdTrack();
318  // Copy track parameters at plane of last hit
319  trdTrack->SetParamLast(stsTrack->GetParamLast());
320  // Copy chi2
321  trdTrack->SetChiSq(stsTrack->GetChiSq());
322  trdTrack->SetNDF(stsTrack->GetNDF());
323  // Set sts track index
324  trdTrack->SetPreviousTrackId(iStsTrack);
325  // Add it to the array
326  fvTrdTrack.push_back(trdTrack);
327  // Control output
328  if (fVerbose > 1) {
329  cout << "TRD track created from STS track " << iStsTrack << endl;
330  }
331  }
332  // sort(fvTrdTrack.begin(), fvTrdTrack.end(), CbmTrdTrack::CompareMomentum);
333 }
334 // -----------------------------------------------------------------------
335 
336 
337 // -----------------------------------------------------------------------
339  // Process all tracks through all stations
340 
341  // Loop over tracks
342  for (Int_t station = 0; station < fNoTrdStations; station++) {
343  vector<CbmTrdTrack*>::iterator iter;
344  int itr = 0;
345  for (iter = fvTrdTrack.begin(); iter != fvTrdTrack.end(); iter++) {
346  // Attach hits to track
347  ProcessStation(*iter, station);
348  // Update track
349  UpdateTrack(station, *iter);
350  itr++;
351  }
352  Clear();
353  if (fVerbose > 0) {
354  cout << "track candidates: " << fvTrdTrack.size() << "." << endl;
355  }
356  }
357 }
358 // -----------------------------------------------------------------------
359 
360 
361 // -----------------------------------------------------------------------
363  // Move the tracks from temporary array to the output array
364  vector<CbmTrdTrack*>::iterator iter;
365  CbmTrdTrack* track;
366  Int_t nOut = fArrayTrdTrack->GetEntries();
367  for (iter = fvTrdTrack.begin(); iter != fvTrdTrack.end(); iter++) {
368  track = *iter;
369  if (0 == track->GetFlag()) {
370  new ((*fArrayTrdTrack)[nOut]) CbmTrdTrack(*track);
371  nOut += 1;
372  }
373  delete track;
374  }
375  fvTrdTrack.clear();
376 }
377 // -----------------------------------------------------------------------
378 
379 
380 // -----------------------------------------------------------------------
382  const Int_t& station) {
383  // Extrapolate track parameters to the layers of current station,
384  // and pick up the closest hits
385 
386  // Track parameters
387 
388  CbmKFTrack kfTrack;
389  kfTrack.SetTrackParam(*(const_cast<FairTrackParam*>(pTrack->GetParamLast())));
390  kfTrack.SetPID(fPid);
391  Double_t qp0 = pTrack->GetParamLast()->GetQp();
392  Double_t* T = kfTrack.GetTrack();
393 
394  // Declare variables outside the loop
395  Int_t plane = 0;
396  Double_t ze = 0.;
397  Int_t hitIndex = 0;
398  CbmTrdHit* pHit = NULL;
399  Double_t chi2hit = 0;
400 
401  Int_t indexOfClosest;
402  Double_t minChi2;
403  // CbmTrdHit* closestHit = 0;
404  Int_t pointIndex;
405  CbmTrdPoint* trdPoint;
406  TVector3 pos;
407 
408  Int_t stsTrackIndex = pTrack->GetPreviousTrackId();
409  if (stsTrackIndex < 0) { Fatal("ProcessStation", "Invalid track index"); }
410  CbmTrackMatch* stsM =
411  L1_DYNAMIC_CAST<CbmTrackMatch*>(fArrayStsTrackM->At(stsTrackIndex));
412  Int_t trackID = stsM->GetMCTrackId();
413 
414  // Loop over layers in this station
415  for (Int_t iLayer = 0; iLayer < fNoTrdPerStation; iLayer++) {
416 
417  if (pTrack->GetFlag()) { return; }
418  // Plane number
419  plane = station * fNoTrdPerStation + iLayer;
420  // Skip if no TRD hits
421  if (fNoTrdHits[plane] < 1) continue;
422  // Get z coordinate of plane
423  ze = (L1_DYNAMIC_CAST<CbmTrdHit*>(fArrayTrdHit->At(fTrdHitIndex[plane][0])))
424  ->GetZ();
425  // Extrapolate to the plane
426  kfTrack.Extrapolate(ze, &qp0);
427 
428  minChi2 = 1e16;
429  indexOfClosest = -1;
430 
431  // Loop over TRD hits in this plane
432  for (Int_t iHit = 0; iHit < fNoTrdHits[plane]; iHit++) {
433 
434  // Get hit index
435  hitIndex = fTrdHitIndex[plane][iHit];
436  // If the hit is used, skip
437  if (fmapHitUsed[hitIndex]) continue;
438  // Get pointer to the hit
439  pHit = L1_DYNAMIC_CAST<CbmTrdHit*>(fArrayTrdHit->At(hitIndex));
440  // Get MC point
441  pointIndex = pHit->GetRefId();
442  trdPoint = L1_DYNAMIC_CAST<CbmTrdPoint*>(fArrayTrdPoint->At(pointIndex));
443  trdPoint->Position(pos);
444 
445  Double_t c1 = kfTrack.GetCovMatrix()[0];
446  Double_t c2 = kfTrack.GetCovMatrix()[2];
447  if (finite(c1) && c1 > 1.e-10)
448  c1 = (T[0] - pos.X()) / TMath::Sqrt(c1);
449  else
450  c1 = 100;
451  if (finite(c2) && c2 > 1.e-10)
452  c2 = (T[1] - pos.Y()) / TMath::Sqrt(c2);
453  else
454  c2 = 0;
455 
456  if (trdPoint->GetTrackID() == trackID) {
457  fh_resx_plane_true->Fill(T[0] - pos.X(), plane);
458  fh_resy_plane_true->Fill(T[1] - pos.Y(), plane);
459  fh_pullx_plane_true->Fill(c1, plane);
460  fh_pully_plane_true->Fill(c2, plane);
461  /* if(0==plane && kfTrack.GetTrack()[0]>0 && kfTrack.GetTrack()[1]>0) {
462  TArc *arc = new TArc(kfTrack.GetTrack()[0], kfTrack.GetTrack()[1], TMath::Max(TMath::Sqrt(kfTrack.GetCovMatrix()[0]),
463  TMath::Sqrt(kfTrack.GetCovMatrix()[2])));
464  arc->SetLineColor(2);
465  arc->Draw();
466  TLine *line = new TLine(kfTrack.GetTrack()[0], kfTrack.GetTrack()[1], pos.X(), pos.Y());
467  line->Draw();
468 
469  fh_resx_mom_true->Fill(kfTrack.GetTrack()[0]-pos.X(), 1./TMath::Abs(qp0));
470  fh_resy_mom_true->Fill(kfTrack.GetTrack()[1]-pos.Y(), 1./TMath::Abs(qp0));
471  }*/
472  } else {
473 
474  fh_resx_plane_fake->Fill(T[0] - pos.X(), plane);
475  fh_resy_plane_fake->Fill(T[1] - pos.Y(), plane);
476  fh_pullx_plane_fake->Fill(c1, plane);
477  fh_pully_plane_fake->Fill(c2, plane);
478  }
479  // Check for geometrical overlap
480  if (kFALSE == Overlap(kfTrack, pHit)) {
481  if (trdPoint->GetTrackID() == trackID) {
482  if (fVerbose > 1) {
483  cout << "-W- Lost true hit: plane:" << plane << " track: ("
484  << T[0] << ", " << T[1] << ") ("
485  << TMath::Sqrt(TMath::Abs(kfTrack.GetCovMatrix()[0])) << ", "
486  << TMath::Sqrt(TMath::Abs(kfTrack.GetCovMatrix()[2]))
487  << "), hit: (" << pHit->GetX() << ", " << pHit->GetY()
488  << ") (" << pHit->GetDx() << ", " << pHit->GetDy()
489  << "), point: (" << pos.X() << ", " << pos.Y() << ")"
490  << endl;
491  }
492  fLostTracks[trackID] = kTRUE;
493  }
494 
495  continue;
496  }
497  // Calculate normalised distance to hit
498  chi2hit = GetChi2Hit(kfTrack, pHit);
499  // Fill histogramms
500  fh_chi2hit->Fill(chi2hit);
501  fh_chi2hit_plane->Fill(chi2hit, plane);
502  // Take the smallest chi2
503  if (chi2hit < minChi2) {
504  minChi2 = chi2hit;
505  indexOfClosest = hitIndex;
506  // closestHit = pHit;
507  }
508  } // Loop over TRD hits
509 
510  // Add hit to the track
511  if (indexOfClosest != -1) {
512  pTrack->AddHit(indexOfClosest, kTRDHIT);
513  } else {
514  pTrack->SetFlag(1);
515  }
516  } // Loop over layers
517  // pTrack->SortHits();
518 }
519 // -----------------------------------------------------------------------
520 
521 
522 // -----------------------------------------------------------------------
523 void CbmL1TrdTrackFinderSts::UpdateTrack(Int_t station, CbmTrdTrack* pTrack) {
524  // Update track parameters using Kalman Filter
525 
526  // Get number of hits
527  Int_t nHits = pTrack->GetNofHits();
528  if (nHits < static_cast<Int_t>((station + 1) * fNoTrdPerStation)) {
529  pTrack->SetFlag(1);
530  return;
531  }
532  // Kalman filter track
533  CbmKFTrack kfTrack;
534  kfTrack.SetTrackParam(*(const_cast<FairTrackParam*>(pTrack->GetParamLast())));
535  kfTrack.GetRefChi2() = pTrack->GetChiSq();
536  kfTrack.GetRefNDF() = pTrack->GetNDF();
537  kfTrack.SetPID(fPid);
538  // Loop over hits
539  Int_t hitIndex = 0;
540  CbmTrdHit* pHit = NULL;
541  CbmKFTrdHit* pKFHit = NULL;
542  Double_t qp0 = pTrack->GetParamLast()->GetQp();
543  for (Int_t iHit = static_cast<Int_t>(station * fNoTrdPerStation);
544  iHit < nHits;
545  iHit++) {
546  // Get hit index
547  hitIndex = pTrack->GetHitIndex(iHit);
548  // Get pointer to the hit
549  pHit = L1_DYNAMIC_CAST<CbmTrdHit*>(fArrayTrdHit->At(hitIndex));
550  // Extrapolate to this hit
551  kfTrack.Extrapolate(pHit->GetZ());
552  // Get KF TRD hit
553  pKFHit = L1_DYNAMIC_CAST<CbmKFTrdHit*>(fArrayKFTrdHit->At(hitIndex));
554  // Add measurement
555  pKFHit->Filter(kfTrack, kTRUE, qp0);
556  } // Loop over hits
557  // Set track parameters
558  kfTrack.GetTrackParam(*(const_cast<FairTrackParam*>(pTrack->GetParamLast())));
559  pTrack->SetChiSq(kfTrack.GetRefChi2());
560  pTrack->SetNDF(kfTrack.GetRefNDF());
561  if (station == (fNoTrdStations - 1)) {
562  if (pTrack->GetChiSq() / static_cast<Double_t>(pTrack->GetNDF()) > 100)
563  pTrack->SetFlag(1);
564  }
565 }
566 // -----------------------------------------------------------------------
567 
568 
569 // -----------------------------------------------------------------------
570 void CbmL1TrdTrackFinderSts::Clear(const Option_t* a) {
571  // Delete bad tracks from track array
572  CbmTrdTrack* track;
573  for (vector<CbmTrdTrack*>::iterator iter = fvTrdTrack.begin();
574  iter != fvTrdTrack.end();
575  iter++) {
576  track = *iter;
577  if (0 != track->GetFlag()) {
578  fvTrdTrack.erase(iter);
579  iter--;
580  delete track;
581  }
582  }
583 }
584 // -----------------------------------------------------------------------
585 
586 
587 // -----------------------------------------------------------------------
589  // Remove ghost tracks from the track candidate array. Among two
590  // tracks with common hits, priority has one with smaller chi2.
591 
593  map<Int_t, Bool_t> mapStsTrackUsed;
594 
595  // Sort found tracks by chi2
596  sort(fvTrdTrack.begin(), fvTrdTrack.end(), CompareChi2);
597 
598  Int_t n_false;
599 
600  // Loop over sorted tracks
601  CbmTrdTrack* track;
602  Int_t nHits = 0;
603  Int_t hitIndex = 0;
604  vector<CbmTrdTrack*>::iterator iter;
605  for (iter = fvTrdTrack.begin(); iter != fvTrdTrack.end(); iter++) {
606  // Pointer to the track
607  track = *iter;
608  if (track->GetFlag()) {
609  // fvTrdTrack.erase(iter);
610  // delete track;
611  continue;
612  }
613 
614  // Loop over hits of this track, check if they are already
615  // attached
616  nHits = track->GetNofHits();
617  n_false = 0;
618  for (Int_t iHit = 0; iHit < nHits; iHit++) {
619  // Get hit index
620  hitIndex = track->GetHitIndex(iHit);
621  // Check flag
622  if (fmapHitUsed[hitIndex]) { n_false += 1; }
623  } // Loop over hits
624 
625  // if((Double_t)n_false/(Double_t)nHits > 0.3) {
626  if (n_false > 0) { track->SetFlag(1); }
627 
628  if (mapStsTrackUsed[track->GetPreviousTrackId()]) { track->SetFlag(1); }
629 
630  // Skip the fake tracks
631  if (track->GetFlag()) {
632  // fvTrdTrack.erase(iter);
633  // delete track;
634  continue;
635  }
636 
637  // Mark hits as attached
638  for (Int_t iHit = 0; iHit < nHits; iHit++) {
639  // Get hit index
640  hitIndex = track->GetHitIndex(iHit);
641  // Set flag
642  fmapHitUsed[hitIndex] = kTRUE;
643  } // Loop over hits
644 
645  mapStsTrackUsed[track->GetPreviousTrackId()] = kTRUE;
646  } // Loop over tracks
647 }
648 // -----------------------------------------------------------------------
649 
650 
651 // -----------------------------------------------------------------------
653  // Check for geometrical overlap between track extrapolation and hit
654  if (track.GetCovMatrix()[0] > 100) { return kFALSE; }
655  if (track.GetCovMatrix()[2] > 100) { return kFALSE; }
656 
657  Bool_t overlap;
658  if (pHit->GetDx() < 1e-9 && pHit->GetDy() < 1e-9) {
659  /* Double_t x1 = track.GetTrack()[0];
660  Double_t dx1 = TMath::Sqrt(track.GetCovMatrix()[0]);
661  Double_t x2 = pHit->GetX();
662  Bool_t overlap_x = ( ((x1+10*dx1) >= x2) &&
663  ((x1-10*dx1) <= x2) );
664  Double_t y1 = track.GetTrack()[1];
665  Double_t dy1 = TMath::Sqrt(track.GetCovMatrix()[2]);
666  Double_t y2 = pHit->GetY();
667  Bool_t overlap_y = ( ((y1+10*dy1) >= y2) &&
668  ((y1-10*dy1) <= y2) );
669  overlap = overlap_x && overlap_y;*/
670  Double_t x1 = track.GetTrack()[0];
671  Double_t x2 = pHit->GetX();
672  Bool_t overlap_x = TMath::Abs(x1 - x2) < 7;
673  Double_t y1 = track.GetTrack()[1];
674  Double_t y2 = pHit->GetY();
675  Bool_t overlap_y = TMath::Abs(y1 - y2) < 7;
676  overlap = overlap_x && overlap_y;
677  } else {
678  /* Double_t x1 = track.GetTrack()[0];
679  Double_t dx1 = TMath::Sqrt(track.GetCovMatrix()[0]);
680  Double_t x2 = pHit->GetX();
681  Double_t dx2 = pHit->GetDx() * 1e-4;
682  Bool_t overlap_x1 = ((x1+5*dx1) <= (x2+3*dx2)) &&
683  ((x1+5*dx1) >= (x2-3*dx2));
684  Bool_t overlap_x2 = ((x1-5*dx1) <= (x2+3*dx2)) &&
685  ((x1-5*dx1) >= (x2-3*dx2));
686  Bool_t overlap_x3 = ((x1+5*dx1) >= (x2+3*dx2)) &&
687  ((x1-5*dx1) <= (x2-3*dx2));
688  Bool_t overlap_x = overlap_x1 || overlap_x2 || overlap_x3;
689  Double_t y1 = track.GetTrack()[1];
690  Double_t dy1 = TMath::Sqrt(track.GetCovMatrix()[2]);
691  Double_t y2 = pHit->GetY();
692  Double_t dy2 = pHit->GetDy() * 1e-4;
693  Bool_t overlap_y1 = ((y1+5*dy1) <= (y2+3*dy2)) &&
694  ((y1+5*dy1) >= (y2-3*dy2));
695  Bool_t overlap_y2 = ((y1-5*dy1) <= (y2+3*dy2)) &&
696  ((y1-5*dy1) >= (y2-3*dy2));
697  Bool_t overlap_y3 = ((y1+5*dy1) >= (y2+3*dy2)) &&
698  ((y1-5*dy1) <= (y2-3*dy2));
699  Bool_t overlap_y = overlap_y1 || overlap_y2 || overlap_y3;
700  overlap = overlap_x && overlap_y;*/
701  Double_t x1 = track.GetTrack()[0];
702  Double_t x2 = pHit->GetX();
703  Double_t dx2 = pHit->GetDx();
704  Bool_t overlap_x = TMath::Abs(x1 - x2) <= (1.117 * 3 + 3 * dx2);
705  Double_t y1 = track.GetTrack()[1];
706  Double_t y2 = pHit->GetY();
707  Double_t dy2 = pHit->GetDy();
708  Bool_t overlap_y = TMath::Abs(y1 - y2) <= (1.314 * 3 + 3 * dy2);
709  overlap = overlap_x && overlap_y;
710  }
711  return overlap;
712 }
713 // -----------------------------------------------------------------------
714 
715 
716 // -----------------------------------------------------------------------
718  CbmTrdHit* pHit) {
719  // Get chi2 from track extrapolation to hit
720  Double_t chi2 = 0.;
721  if (pHit->GetDx() < 1e-14 && pHit->GetDx() > pHit->GetDy()
722  && pHit->GetDy() < 1e-14) {
723  Double_t dx = track.GetTrack()[0] - pHit->GetX();
724  Double_t dy = track.GetTrack()[1] - pHit->GetY();
725  Double_t c0 = track.GetCovMatrix()[0];
726  Double_t c1 = track.GetCovMatrix()[1];
727  Double_t c2 = track.GetCovMatrix()[2];
728  chi2 = 0.5 * (dx * dx * c0 - 2 * dx * dy * c1 + dy * dy * c2)
729  / (c0 * c2 - c1 * c1);
730  } else if (pHit->GetDx() < pHit->GetDy()) {
731  Double_t dx = track.GetTrack()[0] - pHit->GetX();
732  Double_t c0 = track.GetCovMatrix()[0] + TMath::Power(pHit->GetDx(), 2);
733  chi2 = dx * dx / c0;
734  } else {
735  Double_t dy = track.GetTrack()[1] - pHit->GetY();
736  Double_t c2 = track.GetCovMatrix()[2] + TMath::Power(pHit->GetDy(), 2);
737  chi2 = dy * dy / c2;
738  }
739  return chi2;
740 }
741 // -----------------------------------------------------------------------
742 
743 
744 // -----------------------------------------------------------------------
746  // Create control histogramms
747 
748  // Normalized distance to hit
749  fh_chi2hit =
750  new TH1F("h_chi2hit", "Normalized distance to hit", 500, 0., 50.);
751  fh_chi2hit_plane = new TH2F("h_chi2hit_plane",
752  "Normalized distance to hit vs. plane number",
753  500,
754  0.,
755  50.,
756  12,
757  0.,
758  12.);
759 
761  new TH2F("h_resx_plane_true", "", 200, -10., 10., 12, 0., 12.);
763  new TH2F("h_resy_plane_true", "", 200, -10., 10., 12, 0., 12.);
765  new TH2F("h_resx_plane_fake", "", 200, -10., 10., 12, 0., 12.);
767  new TH2F("h_resy_plane_fake", "", 200, -10., 10., 12, 0., 12.);
769  new TH2F("h_resx_mom_true", "", 200, -10., 10., 100, 0., 10.);
771  new TH2F("h_resy_mom_true", "", 200, -10., 10., 100, 0., 10.);
772 
774  new TH2F("h_pullx_plane_true", "", 200, -10., 10., 12, 0., 12.);
776  new TH2F("h_pully_plane_true", "", 200, -10., 10., 12, 0., 12.);
778  new TH2F("h_pullx_plane_fake", "", 200, -10., 10., 12, 0., 12.);
780  new TH2F("h_pully_plane_fake", "", 200, -10., 10., 12, 0., 12.);
781 }
782 // -----------------------------------------------------------------------
783 
784 
785 // -----------------------------------------------------------------------
787  // Initialisation
788 
789  // Get pointer to the ROOT manager
790  FairRootManager* rootMgr = FairRootManager::Instance();
791  if (NULL == rootMgr) {
792  cout << "-E- CbmL1TrdTrackFinderSts::DataBranches : "
793  << "ROOT manager is not instantiated" << endl;
794  return;
795  }
796  // Get pointer to the TRD points
798  L1_DYNAMIC_CAST<TClonesArray*>(rootMgr->GetObject("TrdPoint"));
799  if (NULL == fArrayTrdPoint) {
800  cout << "-W- CbmL1TrdTrackFinderSts::DataBranches : "
801  << "no TRD point array" << endl;
802  }
803  // Get pointer to the STS track array
805  L1_DYNAMIC_CAST<TClonesArray*>(rootMgr->GetObject("StsTrack"));
806  if (NULL == fArrayStsTrack) {
807  cout << "-W- CbmL1TrdTrackFinderSts::DataBranches : "
808  << "no STS track array" << endl;
809  }
810  // Get pointer to the STS track match array
812  L1_DYNAMIC_CAST<TClonesArray*>(rootMgr->GetObject("StsTrackMatch"));
813  if (NULL == fArrayStsTrackM) {
814  cout << "-W- CbmL1TrdTrackFinderSts::DataBranches : "
815  << "no STS track match array" << endl;
816  }
817 }
818 // -----------------------------------------------------------------------
819 
820 
821 // -----------------------------------------------------------------------
823  // Determine the actual TRD layout from the parameter file
824 
825  // Get the pointer to the singleton FairRunAna object
826  FairRunAna* ana = FairRunAna::Instance();
827  if (NULL == ana) {
828  cout << "-E- CbmL1TrdTrackFinderSts::TrdLayout :"
829  << " no FairRunAna object!" << endl;
830  return;
831  }
832  // Get the pointer to run-time data base
833  FairRuntimeDb* rtdb = ana->GetRuntimeDb();
834  if (NULL == rtdb) {
835  cout << "-E- CbmL1TrdTrackFinderSts::TrdLayout :"
836  << " no runtime database!" << endl;
837  return;
838  }
839  // Get the pointer to container of base parameters
840  FairBaseParSet* baseParSet =
841  L1_DYNAMIC_CAST<FairBaseParSet*>(rtdb->getContainer("FairBaseParSet"));
842  if (NULL == baseParSet) {
843  cout << "-E- CbmL1TrdTrackFinderSts::TrdLayout :"
844  << " no container of base parameters!" << endl;
845  return;
846  }
847  // Get the pointer to detector list
848  TObjArray* detList = baseParSet->GetDetList();
849  if (NULL == detList) {
850  cout << "-E- CbmL1TrdTrackFinderSts::TrdLayout :"
851  << " no detector list!" << endl;
852  return;
853  }
854  // Find TRD detector
855  FairDetector* trd =
856  L1_DYNAMIC_CAST<FairDetector*>(detList->FindObject("TRD"));
857  if (NULL == trd) {
858  cout << "-E- CbmL1TrdTrackFinderSts::TrdLayout :"
859  << " no TRD detector!" << endl;
860  return;
861  }
862  // Determine the geometry version
863  TString name = trd->GetGeometryFileName();
864  if (name.Contains("9")) {
865  cout << "-I- CbmL1TrdTrackFinderSts::TrdLayout :"
866  << " TRD geometry : 3x3." << endl;
867  fNoTrdStations = 3;
868  fNoTrdPerStation = 3;
869  } else if (name.Contains("12")) {
870  cout << "-I- CbmL1TrdTrackFinderSts::TrdLayout :"
871  << " TRD geometry : 3x4." << endl;
872  fNoTrdStations = 3;
873  fNoTrdPerStation = 4;
874  } else if (name.Contains("6x2")) {
875  cout << "-I- CbmL1TrdTrackFinderSts::TrdLayout :"
876  << " TRD geometry : 6x2." << endl;
877  fNoTrdStations = 6;
878  fNoTrdPerStation = 2;
879  } else if (name.Contains("standard")) {
880  cout << "-I- CbmL1TrdTrackFinderSts::TrdLayout :"
881  << " TRD geometry : 3x4 standard." << endl;
882  fNoTrdStations = 3;
883  fNoTrdPerStation = 4;
884  }
885 }
886 // -----------------------------------------------------------------------
887 
888 
889 // -----------------------------------------------------------------------
891  // Sort TRD hits by plane number
892  for (Int_t i = 0; i < 12; i++) {
893  fNoTrdHits[i] = 0;
894  }
895  // Declare variables outside the loop
896  Int_t nTrdHits = fArrayTrdHit->GetEntriesFast();
897  CbmTrdHit* hit = NULL;
898  CbmKFTrdHit* kfHit = NULL;
899  Int_t planeNumber = 0;
900  // Loop over TRD hits
901  for (Int_t iHit = 0; iHit < nTrdHits; iHit++) {
902  // Get pointer to the hit
903  hit = L1_DYNAMIC_CAST<CbmTrdHit*>(fArrayTrdHit->At(iHit));
904  if (NULL == hit) continue;
905  // Create KF TRD hit
906  new ((*fArrayKFTrdHit)[iHit]) CbmKFTrdHit();
907  kfHit = L1_DYNAMIC_CAST<CbmKFTrdHit*>(fArrayKFTrdHit->At(iHit));
908  kfHit->Create(hit);
909  // Get plane number
910  planeNumber = hit->GetPlaneId() - 1;
911  if (planeNumber < 0 || planeNumber > 12) {
912  cout << "-W- CbmL1TrdTrackFinderSts::SortTrdHits : "
913  << "wrong plane number." << endl;
914  continue;
915  }
916  // Store hit index in the array
917  fTrdHitIndex[planeNumber][fNoTrdHits[planeNumber]] = iHit;
918  // Increment number of hits in plane
919  fNoTrdHits[planeNumber] += 1;
920  }
921  // Control output
922  cout << endl << "-I- CbmL1TrdTrackFinderSts::SortTrdHits : " << endl;
923  for (Int_t i = 0; i < (fNoTrdStations * fNoTrdPerStation); i++) {
924  cout << "TRD plane no. " << i << " has " << fNoTrdHits[i] << " hits"
925  << endl;
926  }
927 }
928 // -----------------------------------------------------------------------
929 
930 
931 // -----------------------------------------------------------------------
933  // Write control histogramms to file
934  fh_chi2hit->Write();
935  fh_chi2hit_plane->Write();
936  fh_resx_plane_true->Write();
937  fh_resy_plane_true->Write();
938  fh_resx_plane_fake->Write();
939  fh_resy_plane_fake->Write();
940  fh_resx_mom_true->Write();
941  fh_resy_mom_true->Write();
942  fh_pullx_plane_true->Write();
943  fh_pully_plane_true->Write();
944  fh_pullx_plane_fake->Write();
945  fh_pully_plane_fake->Write();
946 }
947 // -----------------------------------------------------------------------
948 
949 
CbmL1TrdTrackFinderSts::fArrayKFTrdHit
TClonesArray * fArrayKFTrdHit
Definition: CbmL1TrdTrackFinderSts.h:35
CbmHit::GetZ
Double_t GetZ() const
Definition: CbmHit.h:70
CbmTrack::GetChiSq
Double_t GetChiSq() const
Definition: CbmTrack.h:58
CbmL1TrdTrackFinderSts::fh_resx_plane_true
TH2F * fh_resx_plane_true
Definition: CbmL1TrdTrackFinderSts.h:46
CbmTrack::GetParamLast
const FairTrackParam * GetParamLast() const
Definition: CbmTrack.h:62
CbmL1TrdTrackFinderSts::fNoTrdPerStation
Int_t fNoTrdPerStation
Definition: CbmL1TrdTrackFinderSts.h:40
CbmL1TrdTrackFinderSts::Overlap
Bool_t Overlap(CbmKFTrack &track, CbmTrdHit *pHit)
Definition: CbmL1TrdTrackFinderSts.cxx:652
CbmPixelHit::GetX
Double_t GetX() const
Definition: CbmPixelHit.h:83
CbmL1TrdTrackFinderSts::SortTrdHits
void SortTrdHits()
Definition: CbmL1TrdTrackFinderSts.cxx:890
CbmL1TrdTrackFinderSts::fArrayTrdTrack
TClonesArray * fArrayTrdTrack
Definition: CbmL1TrdTrackFinderSts.h:37
CbmTrack::GetNofHits
virtual Int_t GetNofHits() const
Definition: CbmTrack.h:53
CbmL1TrdTrackFinderSts::fmapHitUsed
std::map< Int_t, Bool_t > fmapHitUsed
Definition: CbmL1TrdTrackFinderSts.h:43
CbmPixelHit::GetY
Double_t GetY() const
Definition: CbmPixelHit.h:84
CbmTrack::GetFlag
Int_t GetFlag() const
Definition: CbmTrack.h:57
CbmL1TrdTrackFinderSts
Definition: CbmL1TrdTrackFinderSts.h:23
CbmKFTrack::SetPID
void SetPID(Int_t pidHypo)
Definition: CbmKFTrack.cxx:58
CbmPixelHit::GetDx
Double_t GetDx() const
Definition: CbmPixelHit.h:85
CbmL1TrdTrackFinderSts::fArrayTrdHit
TClonesArray * fArrayTrdHit
Definition: CbmL1TrdTrackFinderSts.h:32
CbmKFTrdHit.h
rootMgr
static FairRootManager * rootMgr
Definition: CbmDeviceHitBuilderTof.cxx:72
CbmKFTrack::GetTrack
Double_t * GetTrack()
Is it electron.
Definition: CbmKFTrack.h:58
CbmKFTrack::GetTrackParam
void GetTrackParam(FairTrackParam &track)
Definition: CbmKFTrack.cxx:45
CbmL1TrdTrackFinderSts::fh_pully_plane_fake
TH2F * fh_pully_plane_fake
Definition: CbmL1TrdTrackFinderSts.h:55
i
int i
Definition: L1/vectors/P4_F32vec4.h:25
CbmL1TrdTrackFinderSts::~CbmL1TrdTrackFinderSts
virtual ~CbmL1TrdTrackFinderSts()
Definition: CbmL1TrdTrackFinderSts.cxx:160
CbmTrdHit
data class for a reconstructed Energy-4D measurement in the TRD
Definition: CbmTrdHit.h:35
CbmL1TrdTrackFinderSts::RemoveFakes
void RemoveFakes()
Definition: CbmL1TrdTrackFinderSts.cxx:588
CbmTrackMatch
Definition: CbmTrackMatch.h:18
CbmTrack::SetPreviousTrackId
void SetPreviousTrackId(Int_t previousTrackId)
Definition: CbmTrack.h:72
CbmL1TrdTrackFinderSts::fvTrdTrack
std::vector< CbmTrdTrack * > fvTrdTrack
Definition: CbmL1TrdTrackFinderSts.h:36
CbmHit::GetRefId
Int_t GetRefId() const
Definition: CbmHit.h:72
CbmL1TrdTrackFinderSts::fEvents
Int_t fEvents
Definition: CbmL1TrdTrackFinderSts.h:29
CbmL1TrdTrackFinderSts::Clear
virtual void Clear(const Option_t *a=0)
Definition: CbmL1TrdTrackFinderSts.cxx:570
CbmL1TrdTrackFinderSts::fVerbose
Int_t fVerbose
Definition: CbmL1TrdTrackFinderSts.h:30
CbmTrack::SetParamLast
void SetParamLast(const FairTrackParam *par)
Definition: CbmTrack.h:76
CbmTrack::SetNDF
void SetNDF(Int_t ndf)
Definition: CbmTrack.h:71
CbmL1TrdTrackFinderSts::fh_resx_mom_true
TH2F * fh_resx_mom_true
Definition: CbmL1TrdTrackFinderSts.h:50
CbmTrackMatch.h
CbmL1TrdTrackFinderSts::fPid
Int_t fPid
Definition: CbmL1TrdTrackFinderSts.h:38
CbmPixelHit::GetDy
Double_t GetDy() const
Definition: CbmPixelHit.h:86
CbmL1TrdTrackFinderSts::CbmL1TrdTrackFinderSts
CbmL1TrdTrackFinderSts()
Definition: CbmL1TrdTrackFinderSts.cxx:52
CbmL1TrdTrackFinderSts.h
CbmL1TrdTrackFinderSts::fLostTracks
std::map< Int_t, Bool_t > fLostTracks
Definition: CbmL1TrdTrackFinderSts.h:56
CbmL1TrdTrackFinderSts::CreateHistogramms
void CreateHistogramms()
Definition: CbmL1TrdTrackFinderSts.cxx:745
CbmL1TrdTrackFinderSts::ProcessAllStations
void ProcessAllStations()
Definition: CbmL1TrdTrackFinderSts.cxx:338
CbmTrack::SetFlag
void SetFlag(Int_t flag)
Definition: CbmTrack.h:69
CbmL1TrdTrackFinderSts::fh_pullx_plane_fake
TH2F * fh_pullx_plane_fake
Definition: CbmL1TrdTrackFinderSts.h:54
CbmL1Def.h
CbmKFTrack::GetRefChi2
Double_t & GetRefChi2()
array[15] of covariance matrix
Definition: CbmKFTrack.h:60
finite
T finite(T x)
Definition: CbmL1Def.h:21
CbmStsTrack.h
Data class for STS tracks.
CbmKFTrack::GetRefNDF
Int_t & GetRefNDF()
Chi^2 after fit.
Definition: CbmKFTrack.h:61
ClassImp
ClassImp(CbmL1TrdTrackFinderSts)
CbmL1TrdTrackFinderSts::fh_resy_plane_fake
TH2F * fh_resy_plane_fake
Definition: CbmL1TrdTrackFinderSts.h:49
CbmL1TrdTrackFinderSts::fNoTrdHits
Int_t fNoTrdHits[12]
Definition: CbmL1TrdTrackFinderSts.h:41
CbmL1TrdTrackFinderSts::fTrdHitIndex
Int_t fTrdHitIndex[12][10000]
Definition: CbmL1TrdTrackFinderSts.h:42
CbmTrack::GetHitIndex
Int_t GetHitIndex(Int_t iHit) const
Definition: CbmTrack.h:54
CbmKFTrack::GetCovMatrix
Double_t * GetCovMatrix()
array[6] of track parameters(x,y,tx,ty,qp,z)
Definition: CbmKFTrack.h:59
CbmL1TrdTrackFinderSts::fh_resy_mom_true
TH2F * fh_resy_mom_true
Definition: CbmL1TrdTrackFinderSts.h:51
CbmL1TrdTrackFinderSts::CompareChi2
static Bool_t CompareChi2(const CbmTrdTrack *a, const CbmTrdTrack *b)
Definition: CbmL1TrdTrackFinderSts.h:85
CbmKFTrdHit::Create
void Create(CbmTrdHit *hit)
Definition: CbmKFTrdHit.cxx:23
CbmTrack::SetChiSq
void SetChiSq(Double_t chiSq)
Definition: CbmTrack.h:70
CbmL1TrdTrackFinderSts::ProcessStation
void ProcessStation(CbmTrdTrack *pTrack, const Int_t &station)
Definition: CbmL1TrdTrackFinderSts.cxx:381
CbmTrack::GetNDF
Int_t GetNDF() const
Definition: CbmTrack.h:59
CbmTrdHit.h
Class for hits in TRD detector.
CbmL1TrdTrackFinderSts::Process
void Process()
Definition: CbmL1TrdTrackFinderSts.cxx:243
CbmKFTrack.h
CbmL1TrdTrackFinderSts::fArrayStsTrack
TClonesArray * fArrayStsTrack
Definition: CbmL1TrdTrackFinderSts.h:33
CbmTrack::GetPreviousTrackId
Int_t GetPreviousTrackId() const
Definition: CbmTrack.h:60
CbmL1TrdTrackFinderSts::Init
void Init()
Definition: CbmL1TrdTrackFinderSts.cxx:174
kTRDHIT
@ kTRDHIT
Definition: CbmHit.h:25
CbmL1TrdTrackFinderSts::GetChi2Hit
Double_t GetChi2Hit(CbmKFTrack &track, CbmTrdHit *pHit)
Definition: CbmL1TrdTrackFinderSts.cxx:717
CbmTrdPoint
Definition: CbmTrdPoint.h:23
CbmTrdTrack
Definition: CbmTrdTrack.h:22
CbmKFTrdHit::Filter
Int_t Filter(CbmKFTrackInterface &track, Bool_t downstream, Double_t &QP0)
Definition: CbmKFTrdHit.cxx:61
CbmL1TrdTrackFinderSts::MoveOut
void MoveOut()
Definition: CbmL1TrdTrackFinderSts.cxx:362
CbmL1TrdTrackFinderSts::fArrayStsTrackM
TClonesArray * fArrayStsTrackM
Definition: CbmL1TrdTrackFinderSts.h:34
CbmL1TrdTrackFinderSts::fh_pully_plane_true
TH2F * fh_pully_plane_true
Definition: CbmL1TrdTrackFinderSts.h:53
CbmL1TrdTrackFinderSts::fh_chi2hit
TH1F * fh_chi2hit
Definition: CbmL1TrdTrackFinderSts.h:44
CbmL1TrdTrackFinderSts::fh_resy_plane_true
TH2F * fh_resy_plane_true
Definition: CbmL1TrdTrackFinderSts.h:47
CbmTrackMatch::GetMCTrackId
Int_t GetMCTrackId() const
Definition: CbmTrackMatch.h:44
CbmL1TrdTrackFinderSts::DataBranches
void DataBranches()
Definition: CbmL1TrdTrackFinderSts.cxx:786
CbmTrdPoint.h
pos
TVector3 pos
Definition: CbmMvdSensorDigiToHitTask.cxx:60
CbmL1TrdTrackFinderSts::WriteHistogramms
void WriteHistogramms()
Definition: CbmL1TrdTrackFinderSts.cxx:932
CbmL1TrdTrackFinderSts::fh_pullx_plane_true
TH2F * fh_pullx_plane_true
Definition: CbmL1TrdTrackFinderSts.h:52
CbmL1TrdTrackFinderSts::Sts2Trd
void Sts2Trd(Double_t pmin, Double_t pmax, Double_t chi2min, Double_t chi2max)
Definition: CbmL1TrdTrackFinderSts.cxx:291
CbmTrdTrack.h
CbmL1TrdTrackFinderSts::fh_resx_plane_fake
TH2F * fh_resx_plane_fake
Definition: CbmL1TrdTrackFinderSts.h:48
CbmL1TrdTrackFinderSts::TrdLayout
void TrdLayout()
Definition: CbmL1TrdTrackFinderSts.cxx:822
CbmStsTrack
Definition: CbmStsTrack.h:37
CbmKFTrdHit
Definition: CbmKFTrdHit.h:23
CbmKFTrack
Definition: CbmKFTrack.h:21
CbmL1TrdTrackFinderSts::fNoTrdStations
Int_t fNoTrdStations
Definition: CbmL1TrdTrackFinderSts.h:39
CbmL1TrdTrackFinderSts::fArrayTrdPoint
TClonesArray * fArrayTrdPoint
Definition: CbmL1TrdTrackFinderSts.h:31
CbmL1TrdTrackFinderSts::fh_chi2hit_plane
TH2F * fh_chi2hit_plane
Definition: CbmL1TrdTrackFinderSts.h:45
CbmTrack::AddHit
void AddHit(Int_t index, HitType type)
Definition: CbmTrack.cxx:75
CbmL1TrdTrackFinderSts::DoFind
Int_t DoFind(TClonesArray *hitArray, TClonesArray *trackArray)
Definition: CbmL1TrdTrackFinderSts.cxx:190
CbmKFTrack::SetTrackParam
void SetTrackParam(const FairTrackParam &track)
Definition: CbmKFTrack.cxx:34
CbmL1TrdTrackFinderSts::UpdateTrack
void UpdateTrack(Int_t station, CbmTrdTrack *track)
Definition: CbmL1TrdTrackFinderSts.cxx:523
CbmKFTrackInterface::Extrapolate
Int_t Extrapolate(Double_t z, Double_t *QP0=0)
Access to i-th hit.
Definition: CbmKFTrackInterface.cxx:39
CbmTrdHit::GetPlaneId
Int_t GetPlaneId() const
Inherited from CbmBaseHit.
Definition: CbmTrdHit.h:73