CbmRoot
CbmKFTrackQA.cxx
Go to the documentation of this file.
1 //-----------------------------------------------------------
2 //-----------------------------------------------------------
3 
4 // Cbm Headers ----------------------
5 #include "CbmKFTrackQA.h"
6 #include "CbmMCTrack.h"
7 #include "CbmTrack.h"
8 #include "CbmTrackMatchNew.h"
9 
10 #include "FairRunAna.h"
11 
12 //KF Particle headers
13 #include "CbmKFVertex.h"
14 #include "CbmL1PFFitter.h"
15 #include "KFMCTrack.h"
16 #include "KFParticleMatch.h"
17 #include "KFParticleTopoReconstructor.h"
18 #include "KFTopoPerformance.h"
19 #include "L1Field.h"
20 
21 //ROOT headers
22 #include "TClonesArray.h"
23 #include "TDatabasePDG.h"
24 #include "TDirectory.h"
25 #include "TFile.h"
26 #include "TH1F.h"
27 #include "TH2F.h"
28 #include "TMath.h"
29 #include "TObject.h"
30 
31 //c++ and std headers
32 #include <cmath>
33 #include <iomanip>
34 #include <iostream>
35 
36 #include "CbmGlobalTrack.h"
37 #include "CbmMCDataArray.h"
38 #include "CbmMCDataManager.h"
39 #include "CbmMuchTrack.h"
40 #include "CbmRichRing.h"
41 #include "CbmStsTrack.h"
42 #include "CbmTofHit.h"
43 #include "CbmTofPoint.h"
44 #include "CbmTrack.h"
45 #include "CbmTrdHit.h"
46 #include "CbmTrdTrack.h"
47 
48 using std::map;
49 using std::vector;
50 
51 CbmKFTrackQA::CbmKFTrackQA(const char* name,
52  Int_t iVerbose,
53  TString outFileName)
54  : FairTask(name, iVerbose)
55  , fStsTrackBranchName("StsTrack")
56  , fGlobalTrackBranchName("GlobalTrack")
57  , fRichBranchName("RichRing")
58  , fTrdBranchName("TrdTrack")
59  , fTrdHitBranchName("TrdHit")
60  , fTofBranchName("TofHit")
61  , fMuchTrackBranchName("MuchTrack")
62  , fMCTracksBranchName("MCTrack")
63  , fStsTrackMatchBranchName("StsTrackMatch")
64  , fRichRingMatchBranchName("RichRingMatch")
65  , fTrdTrackMatchBranchName("TrdTrackMatch")
66  , fTofHitMatchBranchName("TofHitMatch")
67  , fMuchTrackMatchBranchName("MuchTrackMatch")
68  , fStsTrackArray(0)
69  , fGlobalTrackArray(0)
70  , fRichRingArray(0)
71  , fTrdTrackArray(0)
72  , fTrdHitArray(0)
73  , fTofHitArray(0)
74  , fMuchTrackArray(0)
75  , fMCTrackArray(0)
76  , fStsTrackMatchArray(0)
77  , fRichRingMatchArray(0)
78  , fTrdTrackMatchArray(0)
79  , fTofHitMatchArray(0)
80  , fMuchTrackMatchArray(0)
81  , fOutFileName(outFileName)
82  , fOutFile(0)
83  , fHistoDir(0)
84  , fNEvents(0)
85  , fPDGtoIndexMap() {
86  TFile* curFile = gFile;
87  TDirectory* curDirectory = gDirectory;
88 
89  if (!(fOutFileName == ""))
90  fOutFile = new TFile(fOutFileName.Data(), "RECREATE");
91  else
92  fOutFile = gFile;
93 
94  fOutFile->cd();
95 
96  fHistoDir = fOutFile->mkdir("KFTrackQA");
97  fHistoDir->cd();
98 
99  gDirectory->mkdir("STS");
100  gDirectory->cd("STS");
101  {
102  TString histoName[NStsHisto] = {"NHits", "chi2/NDF", "prob"};
103  TString axisName[NStsHisto] = {"N hits", "#chi^{2}/NDF", "prob"};
104  int nBins[NStsHisto] = {16, 100, 100};
105  float xMin[NStsHisto] = {-0.5, 0.f, 0.f};
106  float xMax[NStsHisto] = {15.5, 20.f, 1.f};
107 
108  TString subdirs[8] = {
109  "Tracks", "e", "mu", "pi", "K", "p", "fragments", "ghost"};
110 
111  for (int iDir = 0; iDir < 8; iDir++) {
112  gDirectory->mkdir(subdirs[iDir].Data());
113  gDirectory->cd(subdirs[iDir].Data());
114  {
115  gDirectory->mkdir("TrackFitQA");
116  gDirectory->cd("TrackFitQA");
117  {
118  TString res = "res";
119  TString pull = "pull";
120 
121  TString parName[5] = {"X", "Y", "Tx", "Ty", "QP"};
122  int nBinsFit = 100;
123  // float xMaxFit[5] = {0.15,0.15,0.01,0.01,3.5};
124  float xMaxFit[5] = {0.05, 0.045, 0.01, 0.01, 0.1};
125 
126  for (int iH = 0; iH < 5; iH++) {
127  hStsFitHisto[iDir][iH] = new TH1F((res + parName[iH]).Data(),
128  (res + parName[iH]).Data(),
129  nBinsFit,
130  -xMaxFit[iH],
131  xMaxFit[iH]);
132  hStsFitHisto[iDir][iH + 5] = new TH1F((pull + parName[iH]).Data(),
133  (pull + parName[iH]).Data(),
134  nBinsFit,
135  -10,
136  10);
137  }
138  }
139  gDirectory->cd("..");
140 
141  for (int iH = 0; iH < NStsHisto; iH++) {
142  hStsHisto[iDir][iH] = new TH1F(histoName[iH].Data(),
143  histoName[iH].Data(),
144  nBins[iH],
145  xMin[iH],
146  xMax[iH]);
147  hStsHisto[iDir][iH]->GetXaxis()->SetTitle(axisName[iH].Data());
148  }
149  }
150  gDirectory->cd(".."); //STS
151  }
152  }
153  gDirectory->cd("..");
154 
155  gDirectory->mkdir("MuCh");
156  gDirectory->cd("MuCh");
157  {
158  TString histoName[NMuchHisto] = {
159  "NHits", "FirstStation", "LastStation", "chi2/NDF", "prob"};
160  TString axisName[NMuchHisto] = {
161  "N hits", "First Station", "Last Station", "#chi^{2}/NDF", "prob"};
162  int nBins[NMuchHisto] = {16, 16, 16, 100, 100};
163  float xMin[NMuchHisto] = {-0.5f, -0.5f, -0.5f, 0.f, 0.f};
164  float xMax[NMuchHisto] = {15.5f, 15.5f, 15.5f, 20.f, 1.f};
165 
166  TString subdirs[3] = {"mu", "Background", "Ghost"};
167 
168  for (int iDir = 0; iDir < 3; iDir++) {
169  gDirectory->mkdir(subdirs[iDir].Data());
170  gDirectory->cd(subdirs[iDir].Data());
171  for (int iH = 0; iH < NMuchHisto; iH++) {
172  hMuchHisto[iDir][iH] = new TH1F(histoName[iH].Data(),
173  histoName[iH].Data(),
174  nBins[iH],
175  xMin[iH],
176  xMax[iH]);
177  hMuchHisto[iDir][iH]->GetXaxis()->SetTitle(axisName[iH].Data());
178  }
179  gDirectory->cd(".."); //MuCh
180  }
181  }
182  gDirectory->cd("..");
183 
184  gDirectory->mkdir("RICH");
185  gDirectory->cd("RICH");
186  {
187  TString subdirs[10] = {"AllTracks",
188  "e",
189  "mu",
190  "pi",
191  "K",
192  "p",
193  "Fragments",
194  "Mismatch",
195  "GhostTrack",
196  "GhostRing"};
197  TString histoName2D[NRichRingHisto2D] = {"r", "axisA", "axisB"};
198 
199  for (int iDir = 0; iDir < 10; iDir++) {
200  gDirectory->mkdir(subdirs[iDir]);
201  gDirectory->cd(subdirs[iDir]);
202  for (int iH = 0; iH < NRichRingHisto2D; iH++) {
203  hRichRingHisto2D[iDir][iH] = new TH2F(
204  histoName2D[iH], histoName2D[iH], 1000, 0, 15., 1000, 0, 10.);
205  hRichRingHisto2D[iDir][iH]->GetYaxis()->SetTitle(histoName2D[iH]
206  + TString(" [cm]"));
207  hRichRingHisto2D[iDir][iH]->GetXaxis()->SetTitle("p [GeV/c]");
208  }
209  gDirectory->cd(".."); //RICH
210  }
211  }
212  gDirectory->cd("..");
213 
214  gDirectory->mkdir("TRD");
215  gDirectory->cd("TRD");
216  {
217  TString histoName[NTrdHisto] = {"Wkn", "ANN"};
218  TString axisName[NTrdHisto] = {"Wkn", "ANN"};
219  int nBins[NTrdHisto] = {1000, 1000};
220  float xMin[NTrdHisto] = {-1.5f, -1.5f};
221  float xMax[NTrdHisto] = {1.5f, 1.5f};
222 
223  TString subdirs[14] = {"AllTracks",
224  "e",
225  "mu",
226  "pi",
227  "K",
228  "p",
229  "Fragments",
230  "Mismatch",
231  "GhostTrack",
232  "GhostTrdTrack",
233  "d",
234  "t",
235  "He3",
236  "He4"};
237 
238  for (int iDir = 0; iDir < 14; iDir++) {
239  gDirectory->mkdir(subdirs[iDir].Data());
240  gDirectory->cd(subdirs[iDir].Data());
241  for (int iH = 0; iH < NTrdHisto; iH++) {
242  hTrdHisto[iDir][iH] = new TH1F(histoName[iH].Data(),
243  histoName[iH].Data(),
244  nBins[iH],
245  xMin[iH],
246  xMax[iH]);
247  hTrdHisto[iDir][iH]->GetXaxis()->SetTitle(axisName[iH].Data());
248  }
249  hTrdHisto2D[iDir][0] =
250  new TH2F("dE/dx", "dE/dx", 1500, 0., 15., 1000, 0., 1000.);
251  hTrdHisto2D[iDir][0]->GetYaxis()->SetTitle("dE/dx [keV/(cm)]");
252  hTrdHisto2D[iDir][0]->GetXaxis()->SetTitle("p [GeV/c]");
253  gDirectory->cd(".."); //Trd
254  }
255  }
256  gDirectory->cd("..");
257 
258  gDirectory->mkdir("TOF");
259  gDirectory->cd("TOF");
260  {
261  TString histoName2D[2] = {"M2P", "M2dEdX"};
262  TString xAxisName[NTofHisto2D] = {"p [GeV/c]", "dE/dx [keV/(cm)]"};
263  TString yAxisName[NTofHisto2D] = {"m^{2} [GeV^{2}/c^{4}]",
264  "m^{2} [GeV^{2}/c^{4}]"};
265  float xMin[NTofHisto2D] = {-15., 0.};
266  float xMax[NTofHisto2D] = {15., 1000.};
267  Int_t xBins[NTofHisto2D] = {3000, 1000};
268  float yMin[NTofHisto2D] = {-2., -2.};
269  float yMax[NTofHisto2D] = {14., 14.};
270  Int_t yBins[NTofHisto2D] = {1600, 1600};
271 
272  TString subdirs[14] = {"AllTracks",
273  "e",
274  "mu",
275  "pi",
276  "K",
277  "p",
278  "Fragments",
279  "Mismatch",
280  "GhostTrack",
281  "WrongTofPoint",
282  "d",
283  "t",
284  "He3",
285  "He4"};
286 
287  for (int iDir = 0; iDir < 14; iDir++) {
288  gDirectory->mkdir(subdirs[iDir].Data());
289  gDirectory->cd(subdirs[iDir].Data());
290 
291  for (int iH = 0; iH < NTofHisto2D; iH++) {
292  hTofHisto2D[iDir][iH] = new TH2F(histoName2D[iH].Data(),
293  histoName2D[iH].Data(),
294  xBins[iH],
295  xMin[iH],
296  xMax[iH],
297  yBins[iH],
298  yMin[iH],
299  yMax[iH]);
300  hTofHisto2D[iDir][iH]->GetXaxis()->SetTitle(xAxisName[iH]);
301  hTofHisto2D[iDir][iH]->GetYaxis()->SetTitle(yAxisName[iH]);
302  }
303 
304  gDirectory->cd(".."); //Tof
305  }
306  }
307  gDirectory->cd("..");
308 
309  gFile = curFile;
310  gDirectory = curDirectory;
311 
312  fPDGtoIndexMap[11] = 1;
313  fPDGtoIndexMap[13] = 2;
314  fPDGtoIndexMap[211] = 3;
315  fPDGtoIndexMap[321] = 4;
316  fPDGtoIndexMap[2212] = 5;
317  fPDGtoIndexMap[1000010020] = 10;
318  fPDGtoIndexMap[1000010030] = 11;
319  fPDGtoIndexMap[1000020030] = 12;
320  fPDGtoIndexMap[1000020040] = 13;
321 }
322 
324 
325 InitStatus CbmKFTrackQA::Init() {
326  //Get ROOT Manager
327  FairRootManager* ioman = FairRootManager::Instance();
328 
329  if (ioman == 0) {
330  Warning("CbmKFTrackQA::Init", "RootManager not instantiated!");
331  return kERROR;
332  }
333 
334  // Get sts tracks
335  fStsTrackArray = (TClonesArray*) ioman->GetObject(fStsTrackBranchName);
336  if (fStsTrackArray == 0) {
337  Warning("CbmKFTrackQA::Init", "track-array not found!");
338  return kERROR;
339  }
340 
341  // Get global tracks
342  fGlobalTrackArray = (TClonesArray*) ioman->GetObject(fGlobalTrackBranchName);
343  if (fGlobalTrackArray == 0)
344  Warning("CbmKFTrackQA::Init", "global track array not found!");
345 
346  // Get ToF hits
347  fTofHitArray = (TClonesArray*) ioman->GetObject(fTofBranchName);
348  if (fTofHitArray == 0)
349  Warning("CbmKFTrackQA::Init", "TOF hit-array not found!");
350 
351  // TRD
352  fTrdTrackArray = (TClonesArray*) ioman->GetObject(fTrdBranchName);
353  if (fTrdTrackArray == 0)
354  Warning("CbmKFTrackQA::Init", "TRD track-array not found!");
355 
356  fTrdHitArray = (TClonesArray*) ioman->GetObject(fTrdHitBranchName);
357  if (fTrdHitArray == 0)
358  Warning("CbmKFTrackQA::Init", "TRD hit-array not found!");
359 
360  fRichRingArray = (TClonesArray*) ioman->GetObject(fRichBranchName);
361  if (fRichRingArray == 0)
362  Warning("CbmKFTrackQA::Init", "Rich ring array not found!");
363 
364  fMCTrackArray = (TClonesArray*) ioman->GetObject(fMCTracksBranchName);
365  if (fMCTrackArray == 0) {
366  Warning("CbmKFTrackQA::Init", "mc track array not found!");
367  return kERROR;
368  }
369 
370  //Track match
372  (TClonesArray*) ioman->GetObject(fStsTrackMatchBranchName);
373  if (fStsTrackMatchArray == 0) {
374  Warning("CbmKFTrackQA::Init", "track match array not found!");
375  return kERROR;
376  }
377 
378  //Ring match
380  (TClonesArray*) ioman->GetObject(fRichRingMatchBranchName);
381  if (fRichRingMatchArray == 0)
382  Warning("CbmKFTrackQA::Init", "RichRing match array not found!");
383 
384  //Tof match
385  fTofHitMatchArray = (TClonesArray*) ioman->GetObject(fTofHitMatchBranchName);
386  if (fTofHitMatchArray == 0)
387  Warning("CbmKFTrackQA::Init", "TofHit match array not found!");
388 
389  //TRD match
391  (TClonesArray*) ioman->GetObject(fTrdTrackMatchBranchName);
392  if (fTrdTrackMatchArray == 0)
393  Warning("CbmKFTrackQA::Init", "TrdTrack match array not found!");
394 
395  //Much track match
397  (TClonesArray*) ioman->GetObject(fMuchTrackMatchBranchName);
398  if (fMuchTrackMatchArray == 0) {
399  Warning("CbmKFTrackQA::Init", "Much track match array not found!");
400  }
401  //Much
402  fMuchTrackArray = (TClonesArray*) ioman->GetObject(fMuchTrackBranchName);
403  if (fMuchTrackArray == 0) {
404  Warning("CbmKFTrackQA::Init", "Much track-array not found!");
405  }
406 
407  // mc data manager
408  CbmMCDataManager* mcManager =
409  (CbmMCDataManager*) ioman->GetObject("MCDataManager");
410  if (mcManager == 0) {
411  Warning("CbmKFTrackQA::Init", "mc manager not found!");
412  }
413 
414  // Tof points
415  fTofPoints = (CbmMCDataArray*) mcManager->InitBranch("TofPoint");
416  if (fTofPoints == 0) {
417  Warning("CbmKFTrackQA::Init", "tof points not found!");
418  }
419 
420  return kSUCCESS;
421 }
422 
423 void CbmKFTrackQA::Exec(Option_t* /*opt*/) {
424  fNEvents++;
425 
426  Int_t nMCTracks = fMCTrackArray->GetEntriesFast();
427  vector<KFMCTrack> mcTracks(nMCTracks);
428  for (Int_t iMC = 0; iMC < nMCTracks; iMC++) {
429  CbmMCTrack* cbmMCTrack = (CbmMCTrack*) fMCTrackArray->At(iMC);
430 
431 
432  mcTracks[iMC].SetX(cbmMCTrack->GetStartX());
433  mcTracks[iMC].SetY(cbmMCTrack->GetStartY());
434  mcTracks[iMC].SetZ(cbmMCTrack->GetStartZ());
435  mcTracks[iMC].SetPx(cbmMCTrack->GetPx());
436  mcTracks[iMC].SetPy(cbmMCTrack->GetPy());
437  mcTracks[iMC].SetPz(cbmMCTrack->GetPz());
438 
439  Int_t pdg = cbmMCTrack->GetPdgCode();
440  Double_t q = 1;
441  if (pdg < 9999999
442  && ((TParticlePDG*) TDatabasePDG::Instance()->GetParticle(pdg)))
443  q = TDatabasePDG::Instance()->GetParticle(pdg)->Charge() / 3.0;
444  else if (pdg == 1000010020)
445  q = 1;
446  else if (pdg == -1000010020)
447  q = -1;
448  else if (pdg == 1000010030)
449  q = 1;
450  else if (pdg == -1000010030)
451  q = -1;
452  else if (pdg == 1000020030)
453  q = 2;
454  else if (pdg == -1000020030)
455  q = -2;
456  else if (pdg == 1000020040)
457  q = 2;
458  else if (pdg == -1000020040)
459  q = -2;
460  else
461  q = 0;
462  Double_t p = cbmMCTrack->GetP();
463 
464  mcTracks[iMC].SetMotherId(cbmMCTrack->GetMotherId());
465  mcTracks[iMC].SetQP(q / p);
466  mcTracks[iMC].SetPDG(pdg);
467  mcTracks[iMC].SetNMCPoints(0);
468  }
469 
470  Int_t ntrackMatches = fStsTrackMatchArray->GetEntriesFast();
471  vector<int> trackMatch(ntrackMatches, -1);
472 
473  for (int iTr = 0; iTr < ntrackMatches; iTr++) {
474  CbmTrackMatchNew* stsTrackMatch =
476  if (stsTrackMatch->GetNofLinks() == 0) continue;
477  Float_t bestWeight = 0.f;
478  Float_t totalWeight = 0.f;
479  Int_t mcTrackId = -1;
480  for (int iLink = 0; iLink < stsTrackMatch->GetNofLinks(); iLink++) {
481  totalWeight += stsTrackMatch->GetLink(iLink).GetWeight();
482  if (stsTrackMatch->GetLink(iLink).GetWeight() > bestWeight) {
483  bestWeight = stsTrackMatch->GetLink(iLink).GetWeight();
484  mcTrackId = stsTrackMatch->GetLink(iLink).GetIndex();
485  }
486  }
487  if (bestWeight / totalWeight < 0.7) continue;
488  if (mcTrackId >= nMCTracks || mcTrackId < 0) {
489  std::cout << "Sts Matching is wrong! StsTackId = " << mcTrackId
490  << " N mc tracks = " << nMCTracks << std::endl;
491  continue;
492  }
493 
494  mcTracks[mcTrackId].SetReconstructed();
495  trackMatch[iTr] = mcTrackId;
496  }
497 
498  //Check fit quality of the STS tracks
499  vector<CbmStsTrack> vRTracks(fStsTrackArray->GetEntriesFast());
500  vector<int> pdg(fStsTrackArray->GetEntriesFast(), 211);
501  for (int iTr = 0; iTr < fStsTrackArray->GetEntriesFast(); iTr++) {
502  CbmStsTrack* stsTrack = ((CbmStsTrack*) fStsTrackArray->At(iTr));
503  vRTracks[iTr] = *stsTrack;
504 
505  if (trackMatch[iTr] > -1) pdg[iTr] = mcTracks[trackMatch[iTr]].PDG();
506  }
507 
508  CbmKFVertex kfVertex;
509 
510  CbmL1PFFitter fitter;
511  vector<float> vChiToPrimVtx;
512  vector<L1FieldRegion> vField;
513  fitter.Fit(vRTracks, pdg);
514  fitter.GetChiToVertex(vRTracks, vField, vChiToPrimVtx, kfVertex, 3000000);
515 
516  for (unsigned int iTr = 0; iTr < vRTracks.size(); iTr++) {
517  if (trackMatch[iTr] < 0) continue;
518 
519  const KFMCTrack& mcTrack = mcTracks[trackMatch[iTr]];
520  if (mcTrack.MotherId() > -1) continue;
521  // if ( vRTracks[iTr].GetNofHits() < 11 ) continue;
522 
523  const FairTrackParam* parameters = vRTracks[iTr].GetParamFirst();
524 
525  Double_t recoParam[5] = {parameters->GetX(),
526  parameters->GetY(),
527  parameters->GetTx(),
528  parameters->GetTy(),
529  parameters->GetQp()};
530  Double_t recoError[5] = {parameters->GetCovariance(0, 0),
531  parameters->GetCovariance(1, 1),
532  parameters->GetCovariance(2, 2),
533  parameters->GetCovariance(3, 3),
534  parameters->GetCovariance(4, 4)};
535  Double_t mcParam[5] = {mcTrack.X(),
536  mcTrack.Y(),
537  mcTrack.Px() / mcTrack.Pz(),
538  mcTrack.Py() / mcTrack.Pz(),
539  mcTrack.Par()[6]};
540 
541  int iDir = GetHistoIndex(mcTrack.PDG());
542  if (iDir < 8) {
543 
544  for (int iParam = 0; iParam < 5; iParam++) {
545  Double_t residual = recoParam[iParam] - mcParam[iParam];
546  if (iParam == 4) {
547  Double_t pReco = fabs(1. / recoParam[iParam]);
548  Double_t pMC = fabs(1. / mcParam[iParam]);
549 
550  hStsFitHisto[0][iParam]->Fill((pReco - pMC) / pMC);
551  hStsFitHisto[iDir][iParam]->Fill((pReco - pMC) / pMC);
552  } else {
553  hStsFitHisto[0][iParam]->Fill(residual);
554  hStsFitHisto[iDir][iParam]->Fill(residual);
555  }
556 
557  if (recoError[iParam] >= 0.) {
558  Double_t pull = residual / sqrt(recoError[iParam]);
559  hStsFitHisto[0][iParam + 5]->Fill(pull);
560  hStsFitHisto[iDir][iParam + 5]->Fill(pull);
561  }
562  }
563  }
564  }
565 
566  //Check quality of global tracks
567 
568  vector<int> trackMuchMatch;
569  if (fMuchTrackMatchArray != NULL) {
570  Int_t nMuchTrackMatches = fMuchTrackMatchArray->GetEntriesFast();
571  trackMuchMatch.resize(nMuchTrackMatches, -1);
572 
573  for (int iTr = 0; iTr < nMuchTrackMatches; iTr++) {
574  CbmTrackMatchNew* muchTrackMatch =
576  if (muchTrackMatch->GetNofLinks() == 0) continue;
577  Float_t bestWeight = 0.f;
578  Float_t totalWeight = 0.f;
579  Int_t mcTrackId = -1;
580  for (int iLink = 0; iLink < muchTrackMatch->GetNofLinks(); iLink++) {
581  totalWeight += muchTrackMatch->GetLink(iLink).GetWeight();
582  if (muchTrackMatch->GetLink(iLink).GetWeight() > bestWeight) {
583  bestWeight = muchTrackMatch->GetLink(iLink).GetWeight();
584  mcTrackId = muchTrackMatch->GetLink(iLink).GetIndex();
585  }
586  }
587  if (bestWeight / totalWeight < 0.7) continue;
588  if (mcTrackId >= nMCTracks || mcTrackId < 0) {
589  std::cout << "Much Matching is wrong! MuchTackId = " << mcTrackId
590  << " N mc tracks = " << nMCTracks << std::endl;
591  continue;
592  }
593 
594  trackMuchMatch[iTr] = mcTrackId;
595  }
596  }
597 
598  if (fGlobalTrackArray == NULL)
599  Warning("KF Track QA", "No GlobalTrack array!");
600  else {
601  for (Int_t igt = 0; igt < fGlobalTrackArray->GetEntriesFast(); igt++) {
602  const CbmGlobalTrack* globalTrack =
603  static_cast<const CbmGlobalTrack*>(fGlobalTrackArray->At(igt));
604 
605  Int_t stsTrackIndex = globalTrack->GetStsTrackIndex(); //for STS histos
606  CbmStsTrack* cbmStsTrack =
607  (CbmStsTrack*) fStsTrackArray->At(stsTrackIndex);
608  int stsTrackMCIndex = trackMatch[stsTrackIndex];
609  Double_t* stsHistoData = new Double_t[NStsHisto];
610  stsHistoData[0] = cbmStsTrack->GetNofHits(); //NHits
611  stsHistoData[1] =
612  cbmStsTrack->GetChiSq() / cbmStsTrack->GetNDF(); //Chi2/NDF
613  stsHistoData[2] =
614  TMath::Prob(cbmStsTrack->GetChiSq(), cbmStsTrack->GetNDF()); //prob
615  if (stsTrackMCIndex > -1) {
616  int iDir = GetHistoIndex(mcTracks[stsTrackMCIndex].PDG());
617  if (iDir < 3) {
618  for (int iH = 0; iH < NStsHisto; iH++) {
619  hStsHisto[iDir][iH]->Fill(stsHistoData[iH]);
620  hStsHisto[0][iH]->Fill(stsHistoData[iH]);
621  }
622  }
623  } else
624  for (int iH = 0; iH < NStsHisto; iH++) //ghost
625  hStsHisto[7][iH]->Fill(stsHistoData[iH]);
626  delete[] stsHistoData;
627 
628 
629  Int_t muchIndex = globalTrack->GetMuchTrackIndex(); //for MuCh histos
630  if (muchIndex > -1) {
631  CbmMuchTrack* muchTrack =
632  (CbmMuchTrack*) fMuchTrackArray->At(muchIndex);
633 
634  int muchTrackMCIndex = trackMuchMatch[muchIndex];
635 
636  Double_t* muchHistoData = new Double_t[NMuchHisto];
637  muchHistoData[0] = muchTrack->GetNofHits(); //NHits
638  muchHistoData[1] =
639  GetZtoNStation(muchTrack->GetParamFirst()->GetZ()); //FirstStation
640  muchHistoData[2] =
641  GetZtoNStation(muchTrack->GetParamLast()->GetZ()); //LastStation
642  muchHistoData[3] =
643  muchTrack->GetChiSq() / muchTrack->GetNDF(); //Chi2/NDF
644  muchHistoData[4] =
645  TMath::Prob(muchTrack->GetChiSq(), muchTrack->GetNDF()); //prob
646 
647  if (stsTrackMCIndex < 0 || stsTrackMCIndex != muchTrackMCIndex) //ghost
648  for (int iH = 0; iH < NMuchHisto; iH++)
649  hMuchHisto[2][iH]->Fill(muchHistoData[iH]);
650  else {
651  if (TMath::Abs(mcTracks[stsTrackMCIndex].PDG()) == 13) //muon
652  for (int iH = 0; iH < NMuchHisto; iH++)
653  hMuchHisto[0][iH]->Fill(muchHistoData[iH]);
654  else //BG
655  for (int iH = 0; iH < NMuchHisto; iH++)
656  hMuchHisto[1][iH]->Fill(muchHistoData[iH]);
657  }
658  delete[] muchHistoData;
659  }
660 
661  //Check RICH quality
662  const FairTrackParam* stsPar = cbmStsTrack->GetParamFirst();
663  TVector3 mom;
664  stsPar->Momentum(mom);
665 
666  Double_t p = mom.Mag();
667  Double_t pt = mom.Perp();
668  Double_t pz = sqrt(p * p - pt * pt);
669 
671  Int_t richIndex = globalTrack->GetRichRingIndex();
672  if (richIndex > -1) {
673  CbmRichRing* richRing = (CbmRichRing*) fRichRingArray->At(richIndex);
674  if (richRing) {
675  int richTrackMCIndex = -1;
676  CbmTrackMatchNew* richRingMatch =
677  (CbmTrackMatchNew*) fRichRingMatchArray->At(richIndex);
678  if (richRingMatch) {
679  if (richRingMatch->GetNofLinks() > 0) {
680  float bestWeight = 0.f;
681  float totalWeight = 0.f;
682  int bestMCTrackId = -1;
683  for (int iLink = 0; iLink < richRingMatch->GetNofLinks();
684  iLink++) {
685  totalWeight += richRingMatch->GetLink(iLink).GetWeight();
686  if (richRingMatch->GetLink(iLink).GetWeight() > bestWeight) {
687  bestWeight = richRingMatch->GetLink(iLink).GetWeight();
688  bestMCTrackId = richRingMatch->GetLink(iLink).GetIndex();
689  }
690  }
691  if (bestWeight / totalWeight >= 0.7)
692  richTrackMCIndex = bestMCTrackId;
693  }
694  }
695 
696  Double_t r = richRing->GetRadius();
697  Double_t axisA = richRing->GetAaxis();
698  Double_t axisB = richRing->GetBaxis();
699 
700  hRichRingHisto2D[0][0]->Fill(p, r);
701  hRichRingHisto2D[0][1]->Fill(p, axisA);
702  hRichRingHisto2D[0][2]->Fill(p, axisB);
703 
704  int iTrackCategory = -1;
705  if (stsTrackMCIndex < 0)
706  iTrackCategory = 8; // ghost sts track + any ring
707  else if (richTrackMCIndex < 0)
708  iTrackCategory = 9; // normal sts track + ghost ring
709  else if (stsTrackMCIndex != richTrackMCIndex)
710  iTrackCategory = 7; // mismatched sts track and ring
711  else
712  iTrackCategory = GetHistoIndex(pdg[stsTrackIndex]);
713 
714  if (iTrackCategory < 10) {
715  hRichRingHisto2D[iTrackCategory][0]->Fill(p, r);
716  hRichRingHisto2D[iTrackCategory][1]->Fill(p, axisA);
717  hRichRingHisto2D[iTrackCategory][2]->Fill(p, axisB);
718  }
719  }
720  }
721  }
722 
723 
724  // Check Trd quality
725  Int_t ntrackTrdMatches = fTrdTrackMatchArray->GetEntriesFast();
726  vector<int> trackTrdMatch(ntrackTrdMatches, -1);
727 
728  Double_t eloss = 0;
729  Double_t dedx = 0.0;
730 
732  Int_t trdIndex = globalTrack->GetTrdTrackIndex(); //for Trd histos
733  if (trdIndex > -1) {
734  CbmTrdTrack* trdTrack = (CbmTrdTrack*) fTrdTrackArray->At(trdIndex);
735  if (trdTrack) {
736  Int_t trdTrackMCIndex = -1;
737  CbmTrackMatchNew* trdTrackMatch =
738  (CbmTrackMatchNew*) fTrdTrackMatchArray->At(trdIndex);
739  for (int iTr = 0; iTr < ntrackTrdMatches; iTr++) {
740  if (trdTrackMatch->GetNofLinks() == 0) continue;
741  Float_t bestWeight = 0.f;
742  Float_t totalWeight = 0.f;
743  for (int iLink = 0; iLink < trdTrackMatch->GetNofLinks();
744  iLink++) {
745  totalWeight += trdTrackMatch->GetLink(iLink).GetWeight();
746  if (trdTrackMatch->GetLink(iLink).GetWeight() > bestWeight) {
747  bestWeight = trdTrackMatch->GetLink(iLink).GetWeight();
748  trdTrackMCIndex = trdTrackMatch->GetLink(iLink).GetIndex();
749  }
750  }
751  if (bestWeight / totalWeight < 0.7) continue;
752  if (trdTrackMCIndex >= nMCTracks || trdTrackMCIndex < 0) {
753  std::cout << "Trd Matching is wrong! TrdTackId = "
754  << trdTrackMCIndex << " N mc tracks = " << nMCTracks
755  << std::endl;
756  continue;
757  }
758 
759  mcTracks[trdTrackMCIndex].SetReconstructed();
760  trackTrdMatch[iTr] = trdTrackMCIndex;
761  }
762 
763  Double_t* trdHistoData = new Double_t[NTrdHisto];
764  trdHistoData[0] = trdTrack->GetPidWkn(); //Wkn
765  trdHistoData[1] = trdTrack->GetPidANN(); //ANN
766 
767 
768  for (Int_t iTRD = 0; iTRD < trdTrack->GetNofHits(); iTRD++) {
769  Int_t TRDindex = trdTrack->GetHitIndex(iTRD);
770  CbmTrdHit* trdHit = (CbmTrdHit*) fTrdHitArray->At(TRDindex);
771  eloss += trdHit->GetELoss();
772  }
773  if (trdTrack->GetNofHits() > 0.)
774  eloss =
775  eloss / trdTrack->GetNofHits(); // average of dE/dx per station
776 
777  int iTrackCategory = -1;
778  if (stsTrackMCIndex < 0)
779  iTrackCategory = 8; // ghost sts track + any trd track
780  else if (trdTrackMCIndex < 0)
781  iTrackCategory = 9; // normal sts track + ghost trd track
782  else if (stsTrackMCIndex != trdTrackMCIndex)
783  iTrackCategory = 7; // mismatched sts track and trd track
784  else
785  iTrackCategory = GetHistoIndex(pdg[stsTrackIndex]);
786 
787  for (int iH = 0; iH < NTrdHisto; iH++) {
788  hTrdHisto[0][iH]->Fill(trdHistoData[iH]);
789  hTrdHisto[iTrackCategory][iH]->Fill(trdHistoData[iH]);
790  }
791  dedx = 1e6 * (pz / p) * eloss;
792  hTrdHisto2D[0][0]->Fill(mom.Mag(), dedx);
793  hTrdHisto2D[iTrackCategory][0]->Fill(mom.Mag(), dedx);
794 
795  delete[] trdHistoData;
796  }
797  }
798  }
799 
800  //Check Tof quality
802  Int_t tofIndex = globalTrack->GetTofHitIndex(); // for tof histo
803  Int_t stsIndex = globalTrack->GetStsTrackIndex();
804 
805  if (tofIndex > -1 && stsIndex > -1) {
806  CbmTofHit* tofHit = (CbmTofHit*) fTofHitArray->At(tofIndex);
807  CbmMatch* tofHitMatch = (CbmMatch*) fTofHitMatchArray->At(tofIndex);
808  CbmTrackMatchNew* stsMatch =
809  (CbmTrackMatchNew*) fStsTrackMatchArray->At(stsIndex);
810 
811  Double_t l = globalTrack->GetLength();
812  Double_t time = tofHit->GetTime();
813  Double_t q = stsPar->GetQp() > 0 ? 1. : -1.;
814  Double_t m2 =
815  p * p
816  * (1. / ((l / time / 29.9792458) * (l / time / 29.9792458)) - 1.);
817 
818  hTofHisto2D[0][0]->Fill(p * q, m2);
819  hTofHisto2D[0][1]->Fill(eloss * 1e6, m2);
820 
821  if (tofHit && tofHitMatch && stsMatch) {
822  Int_t tofMCPointIndex = tofHitMatch->GetMatchedLink().GetIndex();
823  Int_t tofMCEventNo = tofHitMatch->GetMatchedLink().GetEntry();
824  CbmTofPoint* tofPoint =
825  (CbmTofPoint*) fTofPoints->Get(0, tofMCEventNo, tofMCPointIndex);
826  Int_t tofMCTrackId = tofPoint->GetTrackID();
827 
828  int iHitCategory = -1;
829  if (stsTrackMCIndex < 0)
830  iHitCategory = 8; // ghost sts track + any tof hit
831  else if (tofMCTrackId < 0)
832  iHitCategory = 9; // normal sts track + ghost tof hit
833  else if (stsTrackMCIndex != tofMCTrackId)
834  iHitCategory = 7; // mismatched sts track and tof hit
835  else
836  iHitCategory = GetHistoIndex(pdg[stsTrackIndex]);
837 
838  hTofHisto2D[iHitCategory][0]->Fill(p * q, m2);
839  hTofHisto2D[iHitCategory][1]->Fill(eloss * 1e6, m2);
840  }
841  }
842  }
843  }
844  }
845 }
846 
848  TDirectory* curr = gDirectory;
849  TFile* currentFile = gFile;
850  // Open output file and write histograms
851 
852  fOutFile->cd();
854  if (!(fOutFileName == "")) {
855  fOutFile->Close();
856  fOutFile->Delete();
857  }
858  gFile = currentFile;
859  gDirectory = curr;
860 }
861 
863 
864 
865  if (!obj->IsFolder())
866  obj->Write();
867  else {
868  TDirectory* cur = gDirectory;
869  TFile* currentFile = gFile;
870 
871  TDirectory* sub = cur->GetDirectory(obj->GetName());
872  sub->cd();
873  TList* listSub = (static_cast<TDirectory*>(obj))->GetList();
874  TIter it(listSub);
875  while (TObject* obj1 = it())
876  WriteHistosCurFile(obj1);
877  cur->cd();
878  gFile = currentFile;
879  gDirectory = cur;
880  }
881 }
882 
884  map<int, int>::iterator it;
885  it = fPDGtoIndexMap.find(TMath::Abs(pdg));
886  if (it != fPDGtoIndexMap.end())
887  return it->second;
888  else
889  return 6;
890 }
891 
892 Int_t CbmKFTrackQA::GetZtoNStation(Double_t getZ) {
893  if (TMath::Abs(getZ - 145) <= 2.0) return 1;
894  if (TMath::Abs(getZ - 155) <= 2.0) return 2;
895  if (TMath::Abs(getZ - 165) <= 2.0) return 3;
896  if (TMath::Abs(getZ - 195) <= 2.0) return 4;
897  if (TMath::Abs(getZ - 205) <= 2.0) return 5;
898  if (TMath::Abs(getZ - 215) <= 2.0) return 6;
899  if (TMath::Abs(getZ - 245) <= 2.0) return 7;
900  if (TMath::Abs(getZ - 255) <= 2.0) return 8;
901  if (TMath::Abs(getZ - 265) <= 2.0) return 9;
902  if (TMath::Abs(getZ - 305) <= 2.0) return 10;
903  if (TMath::Abs(getZ - 315) <= 2.0) return 11;
904  if (TMath::Abs(getZ - 325) <= 2.0) return 12;
905  if (TMath::Abs(getZ - 370) <= 2.0) return 13;
906  if (TMath::Abs(getZ - 380) <= 2.0) return 14;
907  if (TMath::Abs(getZ - 390) <= 2.0) return 15;
908  if (TMath::Abs(getZ - 500) <= 2.0) return 16;
909  if (TMath::Abs(getZ - 510) <= 2.0) return 17;
910  if (TMath::Abs(getZ - 520) <= 2.0) return 18;
911 
912  return -1;
913 }
914 
CbmKFTrackQA::fOutFile
TFile * fOutFile
Definition: CbmKFTrackQA.h:99
CbmMCTrack::GetMotherId
Int_t GetMotherId() const
Definition: CbmMCTrack.h:71
CbmMatch::GetMatchedLink
const CbmLink & GetMatchedLink() const
Definition: CbmMatch.h:37
CbmMCDataManager::GetObject
CbmMCDataObject * GetObject(const char *name)
Definition: CbmMCDataManager.cxx:137
CbmTrack::GetChiSq
Double_t GetChiSq() const
Definition: CbmTrack.h:58
CbmMatch
Definition: CbmMatch.h:22
CbmMCTrack::GetStartX
Double_t GetStartX() const
Definition: CbmMCTrack.h:75
CbmMCDataManager.h
KFParticleMatch.h
CbmKFTrackQA::fPDGtoIndexMap
std::map< int, int > fPDGtoIndexMap
Definition: CbmKFTrackQA.h:103
CbmTrack::GetParamLast
const FairTrackParam * GetParamLast() const
Definition: CbmTrack.h:62
CbmKFTrackQA::fMuchTrackMatchBranchName
TString fMuchTrackMatchBranchName
Definition: CbmKFTrackQA.h:78
CbmKFTrackQA::fTrdBranchName
TString fTrdBranchName
Definition: CbmKFTrackQA.h:69
CbmKFTrackQA::CbmKFTrackQA
CbmKFTrackQA(const char *name="CbmKFTrackQA", Int_t iVerbose=0, TString outFileName="CbmKFTrackQA.root")
Definition: CbmKFTrackQA.cxx:51
CbmKFTrackQA::fStsTrackArray
TClonesArray * fStsTrackArray
Definition: CbmKFTrackQA.h:81
CbmKFTrackQA::WriteHistosCurFile
void WriteHistosCurFile(TObject *obj)
Definition: CbmKFTrackQA.cxx:862
CbmGlobalTrack::GetMuchTrackIndex
Int_t GetMuchTrackIndex() const
Definition: CbmGlobalTrack.h:40
CbmMatch::GetLink
const CbmLink & GetLink(Int_t i) const
Definition: CbmMatch.h:35
CbmMatch::GetNofLinks
Int_t GetNofLinks() const
Definition: CbmMatch.h:38
CbmKFTrackQA::hStsFitHisto
TH1F * hStsFitHisto[8][10]
Definition: CbmKFTrackQA.h:111
CbmKFTrackQA::hTrdHisto
TH1F * hTrdHisto[14][NTrdHisto]
Definition: CbmKFTrackQA.h:124
CbmTrack::GetNofHits
virtual Int_t GetNofHits() const
Definition: CbmTrack.h:53
CbmKFTrackQA::hStsHisto
TH1F * hStsHisto[8][NStsHisto]
Definition: CbmKFTrackQA.h:110
L1Field.h
CbmKFTrackQA::fTrdHitBranchName
TString fTrdHitBranchName
Definition: CbmKFTrackQA.h:70
CbmL1PFFitter
Definition: CbmL1PFFitter.h:31
sqrt
friend F32vec4 sqrt(const F32vec4 &a)
Definition: L1/vectors/P4_F32vec4.h:41
CbmL1PFFitter::Fit
void Fit(std::vector< CbmStsTrack > &Tracks, std::vector< int > &pidHypo)
Definition: CbmL1PFFitter.cxx:81
CbmKFTrackQA::Exec
virtual void Exec(Option_t *opt)
Definition: CbmKFTrackQA.cxx:423
CbmTrdHit::GetELoss
Double_t GetELoss() const
Definition: CbmTrdHit.h:79
CbmGlobalTrack::GetRichRingIndex
Int_t GetRichRingIndex() const
Definition: CbmGlobalTrack.h:41
CbmMCTrack::GetPdgCode
Int_t GetPdgCode() const
Definition: CbmMCTrack.h:70
CbmTrdHit
data class for a reconstructed Energy-4D measurement in the TRD
Definition: CbmTrdHit.h:35
CbmKFTrackQA::fTofHitMatchBranchName
TString fTofHitMatchBranchName
Definition: CbmKFTrackQA.h:77
CbmMCDataManager::InitBranch
CbmMCDataArray * InitBranch(const char *name)
Definition: CbmMCDataManager.cxx:106
CbmKFTrackQA::fRichRingArray
TClonesArray * fRichRingArray
Definition: CbmKFTrackQA.h:83
CbmMCDataArray.h
CbmKFTrackQA::fTrdTrackArray
TClonesArray * fTrdTrackArray
Definition: CbmKFTrackQA.h:84
CbmGlobalTrack.h
CbmMCDataArray
Access to a MC data branch for time-based analysis.
Definition: CbmMCDataArray.h:35
CbmRichRing
Definition: CbmRichRing.h:17
CbmGlobalTrack::GetLength
Double_t GetLength() const
Definition: CbmGlobalTrack.h:50
CbmMCTrack::GetPx
Double_t GetPx() const
Definition: CbmMCTrack.h:72
CbmKFTrackQA::fTrdTrackMatchBranchName
TString fTrdTrackMatchBranchName
Definition: CbmKFTrackQA.h:76
CbmMCTrack::GetPy
Double_t GetPy() const
Definition: CbmMCTrack.h:73
CbmRichRing.h
CbmMuchTrack
Definition: CbmMuchTrack.h:16
CbmKFTrackQA::GetZtoNStation
Int_t GetZtoNStation(Double_t getZ)
Definition: CbmKFTrackQA.cxx:892
CbmKFTrackQA::NTofHisto2D
static const int NTofHisto2D
Definition: CbmKFTrackQA.h:128
CbmStsTrack::GetNofHits
virtual Int_t GetNofHits() const
Definition: CbmStsTrack.h:76
CbmKFTrackQA::hTrdHisto2D
TH2F * hTrdHisto2D[14][NTrdHisto2D]
Definition: CbmKFTrackQA.h:126
CbmKFTrackQA::hMuchHisto
TH1F * hMuchHisto[3][NMuchHisto]
Definition: CbmKFTrackQA.h:114
CbmKFTrackQA::~CbmKFTrackQA
~CbmKFTrackQA()
Definition: CbmKFTrackQA.cxx:323
CbmKFTrackQA::fNEvents
Int_t fNEvents
Definition: CbmKFTrackQA.h:102
CbmKFTrackQA::Finish
virtual void Finish()
Definition: CbmKFTrackQA.cxx:847
CbmKFTrackQA.h
CbmMCTrack::GetStartZ
Double_t GetStartZ() const
Definition: CbmMCTrack.h:77
CbmStsTrack.h
Data class for STS tracks.
CbmGlobalTrack::GetStsTrackIndex
Int_t GetStsTrackIndex() const
Definition: CbmGlobalTrack.h:38
CbmKFTrackQA::fMCTrackArray
TClonesArray * fMCTrackArray
Definition: CbmKFTrackQA.h:88
CbmTrdTrack::GetPidANN
Double_t GetPidANN() const
Definition: CbmTrdTrack.h:32
CbmKFTrackQA::fMuchTrackBranchName
TString fMuchTrackBranchName
Definition: CbmKFTrackQA.h:72
CbmMuchTrack.h
CbmKFTrackQA::GetHistoIndex
int GetHistoIndex(int pdg)
Definition: CbmKFTrackQA.cxx:883
CbmKFTrackQA::fGlobalTrackArray
TClonesArray * fGlobalTrackArray
Definition: CbmKFTrackQA.h:82
CbmL1PFFitter::GetChiToVertex
void GetChiToVertex(std::vector< CbmStsTrack > &Tracks, std::vector< L1FieldRegion > &field, std::vector< float > &chiToVtx, CbmKFVertex &primVtx, float chiPrim=-1)
Definition: CbmL1PFFitter.cxx:403
mcTracks
static vector< vector< QAMCTrack > > mcTracks
Definition: CbmTofHitFinderTBQA.cxx:112
CbmKFTrackQA::fMCTracksBranchName
TString fMCTracksBranchName
Definition: CbmKFTrackQA.h:73
CbmTrack.h
CbmKFTrackQA::fStsTrackMatchArray
TClonesArray * fStsTrackMatchArray
Definition: CbmKFTrackQA.h:89
CbmMCDataArray::Get
TObject * Get(const CbmLink *lnk)
Definition: CbmMCDataArray.h:47
CbmHit::GetTime
Double_t GetTime() const
Definition: CbmHit.h:75
CbmKFTrackQA::fTofHitMatchArray
TClonesArray * fTofHitMatchArray
Definition: CbmKFTrackQA.h:92
CbmKFTrackQA::hRichRingHisto2D
TH2F * hRichRingHisto2D[10][NRichRingHisto2D]
Definition: CbmKFTrackQA.h:119
CbmKFTrackQA::fStsTrackMatchBranchName
TString fStsTrackMatchBranchName
Definition: CbmKFTrackQA.h:74
CbmTrack::GetHitIndex
Int_t GetHitIndex(Int_t iHit) const
Definition: CbmTrack.h:54
CbmGlobalTrack::GetTrdTrackIndex
Int_t GetTrdTrackIndex() const
Definition: CbmGlobalTrack.h:39
CbmTrackMatchNew.h
CbmL1PFFitter.h
CbmKFTrackQA::hTofHisto2D
TH2F * hTofHisto2D[14][NTofHisto2D]
Definition: CbmKFTrackQA.h:131
nMCTracks
Int_t nMCTracks
Definition: CbmHadronAnalysis.cxx:63
CbmTrack::GetNDF
Int_t GetNDF() const
Definition: CbmTrack.h:59
CbmTrdHit.h
Class for hits in TRD detector.
CbmKFTrackQA::fStsTrackBranchName
TString fStsTrackBranchName
Definition: CbmKFTrackQA.h:66
CbmKFTrackQA
Definition: CbmKFTrackQA.h:24
CbmKFTrackQA::fTrdTrackMatchArray
TClonesArray * fTrdTrackMatchArray
Definition: CbmKFTrackQA.h:91
CbmTrack::GetParamFirst
const FairTrackParam * GetParamFirst() const
Definition: CbmTrack.h:61
CbmRichRing::GetAaxis
Double_t GetAaxis() const
Definition: CbmRichRing.h:83
CbmKFTrackQA::fTofBranchName
TString fTofBranchName
Definition: CbmKFTrackQA.h:71
CbmKFTrackQA::NStsHisto
static const int NStsHisto
Definition: CbmKFTrackQA.h:107
CbmMCDataManager
Task class creating and managing CbmMCDataArray objects.
Definition: CbmMCDataManager.h:27
CbmKFTrackQA::fMuchTrackMatchArray
TClonesArray * fMuchTrackMatchArray
Definition: CbmKFTrackQA.h:93
CbmTrdTrack
Definition: CbmTrdTrack.h:22
CbmRichRing::GetBaxis
Double_t GetBaxis() const
Definition: CbmRichRing.h:84
CbmKFTrackQA::Init
virtual InitStatus Init()
Definition: CbmKFTrackQA.cxx:325
CbmGlobalTrack
Definition: CbmGlobalTrack.h:26
CbmMCTrack::GetStartY
Double_t GetStartY() const
Definition: CbmMCTrack.h:76
CbmKFTrackQA::fRichBranchName
TString fRichBranchName
Definition: CbmKFTrackQA.h:68
CbmMCTrack.h
CbmKFTrackQA::fTofPoints
CbmMCDataArray * fTofPoints
Definition: CbmKFTrackQA.h:95
CbmMCTrack
Definition: CbmMCTrack.h:34
CbmTrdTrack::GetPidWkn
Double_t GetPidWkn() const
Definition: CbmTrdTrack.h:31
fabs
friend F32vec4 fabs(const F32vec4 &a)
Definition: L1/vectors/P4_F32vec4.h:60
CbmKFTrackQA::fGlobalTrackBranchName
TString fGlobalTrackBranchName
Definition: CbmKFTrackQA.h:67
CbmTofPoint.h
ClassImp
ClassImp(CbmKFTrackQA)
CbmKFTrackQA::NRichRingHisto2D
static const int NRichRingHisto2D
Definition: CbmKFTrackQA.h:116
CbmRichRing::GetRadius
Float_t GetRadius() const
Definition: CbmRichRing.h:82
CbmKFTrackQA::NMuchHisto
static const int NMuchHisto
Definition: CbmKFTrackQA.h:113
CbmTrackMatchNew
Definition: CbmTrackMatchNew.h:19
CbmTofPoint
Geometric intersection of a MC track with a TOFb detector.
Definition: CbmTofPoint.h:40
CbmTofHit
Definition: core/data/tof/CbmTofHit.h:26
CbmKFTrackQA::fTrdHitArray
TClonesArray * fTrdHitArray
Definition: CbmKFTrackQA.h:85
CbmKFTrackQA::fRichRingMatchBranchName
TString fRichRingMatchBranchName
Definition: CbmKFTrackQA.h:75
CbmGlobalTrack::GetTofHitIndex
Int_t GetTofHitIndex() const
Definition: CbmGlobalTrack.h:42
CbmTrdTrack.h
CbmStsTrack
Definition: CbmStsTrack.h:37
CbmKFTrackQA::fTofHitArray
TClonesArray * fTofHitArray
Definition: CbmKFTrackQA.h:86
PairAnalysisStyler::Fill
static Int_t Fill[]
Definition: PairAnalysisStyleDefs.h:82
CbmKFVertex.h
CbmKFTrackQA::fRichRingMatchArray
TClonesArray * fRichRingMatchArray
Definition: CbmKFTrackQA.h:90
CbmMCTrack::GetP
Double_t GetP() const
Definition: CbmMCTrack.h:100
CbmKFTrackQA::fMuchTrackArray
TClonesArray * fMuchTrackArray
Definition: CbmKFTrackQA.h:87
CbmMCTrack::GetPz
Double_t GetPz() const
Definition: CbmMCTrack.h:74
CbmKFTrackQA::NTrdHisto
static const int NTrdHisto
Definition: CbmKFTrackQA.h:121
CbmKFTrackQA::fOutFileName
TString fOutFileName
Definition: CbmKFTrackQA.h:98
CbmKFTrackQA::fHistoDir
TDirectory * fHistoDir
Definition: CbmKFTrackQA.h:100
CbmKFVertex
Definition: CbmKFVertex.h:6