CbmRoot
CbmTofHitFinderTBQA.cxx
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 #include "CbmTofHitFinderTBQA.h"
8 #include "CbmMCDataManager.h"
9 #include "CbmMatch.h"
10 #include "CbmTofAddress.h"
11 #include "CbmTofHit.h"
12 #include "CbmTofPoint.h"
13 #include "FairLogger.h"
14 #include "TH1.h"
15 #include <TFile.h>
16 
17 using std::cout;
18 using std::endl;
19 using std::list;
20 using std::pair;
21 using std::set;
22 using std::vector;
23 
24 /*
25 struct TofHitDesc
26 {
27  CbmTofHit hit;
28  list<const CbmTofPoint*> pointRefs;
29 };
30 
31 struct TofPointDesc
32 {
33  CbmTofPoint point;
34  Int_t trackId;
35  list<const CbmTofHit*> hitRefs;
36 };
37 
38 struct TrackDesc
39 {
40  list<CbmTofPoint*> tofPoints;
41  list<CbmTofDigiExp> topDigis;
42  list<CbmTofDigiExp> bottomDigis;
43  list<TofHitDesc*> tofHits;
44 };
45 
46 static vector<vector<TofHitDesc> > tofHitsAll;
47 static vector<vector<TofPointDesc> > tofPointsAll;
48 static vector<vector<TrackDesc> > tofTracksAll;
49 */
50 
51 struct QAMCTrack;
52 
53 struct QAMCPoint {
54  double x;
55  double y;
56  double t;
57  int detId;
59  bool isInit;
60 
61  // QAMCPoint() : x(0.), y(0.), t(0.), detId(0), track(nullptr), isInit(false) {}
62 };
63 
64 struct QAHit {
65  double x;
66  double dx;
67  double y;
68  double dy;
69  double t;
70  double dt;
71  set<const QAMCPoint*> points;
72  set<const QAMCTrack*> tracks;
73  int detId;
74 
76  : x(0.)
77  , dx(0.)
78  , y(0.)
79  , dy(0.)
80  , t(0.)
81  , dt(0.)
82  , points()
83  , tracks()
84  , detId(0) {}
85 
86  QAHit(double _x,
87  double _dx,
88  double _y,
89  double _dy,
90  double _t,
91  double _dt,
92  set<const QAMCPoint*> _points,
93  set<const QAMCTrack*> _tracks,
94  int _detId)
95  : x(_x)
96  , dx(_dx)
97  , y(_y)
98  , dy(_dy)
99  , t(_t)
100  , dt(_dt)
101  , points(_points)
102  , tracks(_tracks)
103  , detId(_detId) {}
104 };
105 
106 struct QAMCTrack {
107  list<const QAMCPoint*> points;
108  list<const QAHit*> hits;
109  QAMCTrack() : points(), hits() {}
110 };
111 
112 static vector<vector<QAMCTrack>> mcTracks;
113 static vector<vector<QAMCPoint>> mcPoints;
114 static vector<vector<QAHit>> hits;
115 
116 static TH1F* deltaTHisto = 0;
117 static TH1F* deltaXHisto = 0;
118 static TH1F* deltaYHisto = 0;
119 static TH1F* pullTHisto = 0;
120 static TH1F* pullXHisto = 0;
121 static TH1F* pullYHisto = 0;
122 static TH1F* nofHitsHisto = 0;
123 static TH1F* nofTracksDepositedHisto = 0;
124 
126  : isEvByEv(false)
127  , fTofHits(0)
128  , fTofDigiMatchs(0)
129  , fTofDigis(0)
130  , fTofDigiPointMatchs(0)
131  , fTofMCPoints(0)
132  , fMCTracks(0)
133  , fTimeSlice(0)
134  , fEventList(0) {}
135 
137  FairRootManager* ioman = FairRootManager::Instance();
138 
139  if (0 == ioman) LOG(fatal) << "No FairRootManager";
140 
141  fTofHits = static_cast<TClonesArray*>(ioman->GetObject("TofHit"));
142  fTofDigiMatchs = static_cast<TClonesArray*>(ioman->GetObject("TofDigiMatch"));
143  fTofDigis = static_cast<TClonesArray*>(ioman->GetObject("TofDigiExp"));
145  static_cast<TClonesArray*>(ioman->GetObject("TofDigiMatchPoints"));
146 
147  CbmMCDataManager* mcManager =
148  static_cast<CbmMCDataManager*>(ioman->GetObject("MCDataManager"));
149  fTofMCPoints = mcManager->InitBranch("TofPoint");
150  fMCTracks = mcManager->InitBranch("MCTrack");
151  /*tofHitsAll.resize(1000);
152  tofPointsAll.resize(1000);
153  tofTracksAll.resize(1000);
154 
155  for (int i = 0; i < 1000; ++i)
156  {
157  Int_t nofmct = fMCTracks->Size(0, i);
158 
159  for (int j = 0; j < nofmct; ++j)
160  tofTracksAll[i].push_back( { {}, {}, {}, {} } );
161 
162  Int_t evSize = fTofMCPoints->Size(0, i);
163 
164  for (int j = 0; j < evSize; ++j)
165  {
166  CbmTofPoint tp = *static_cast<const CbmTofPoint*> (fTofMCPoints->Get(0, i, j));
167  tofPointsAll[i].push_back( { tp, tp.GetTrackID(), {} } );
168  tofTracksAll[i][tp.GetTrackID()].tofPoints.push_back(&(tofPointsAll[i].back().point));
169  }
170  }*/
171 
172  mcTracks.resize(1000);
173  mcPoints.resize(1000);
174  hits.resize(1000);
175 
176  fTimeSlice = static_cast<CbmTimeSlice*>(ioman->GetObject("TimeSlice."));
177 
178  if (0 == fTimeSlice) LOG(fatal) << "No time slice";
179 
180  fEventList = static_cast<CbmMCEventList*>(ioman->GetObject("MCEventList."));
181 
182  if (0 == fEventList) LOG(fatal) << "No event list";
183 
184  for (int i = 0; i < 1000; ++i) {
185  vector<QAMCTrack>& evMcTracks = mcTracks[i];
186  vector<QAMCPoint>& evMcPoints = mcPoints[i];
187 
188  Int_t nofmct = fMCTracks->Size(0, i);
189 
190  if (nofmct > 0) evMcTracks.resize(nofmct);
191 
192  Int_t nofmcp = fTofMCPoints->Size(0, i);
193 
194  if (nofmcp > 0) evMcPoints.resize(nofmcp);
195 
196  for (int j = 0; j < nofmcp; ++j) {
197  const CbmTofPoint* tp =
198  static_cast<const CbmTofPoint*>(fTofMCPoints->Get(0, i, j));
199  int trackId = tp->GetTrackID();
200  evMcPoints[j] = {tp->GetX(),
201  tp->GetY(),
202  tp->GetTime(),
203  tp->GetDetectorID(),
204  &evMcTracks[trackId],
205  false};
206  const QAMCPoint* lastPoint = &evMcPoints[j];
207  evMcTracks[trackId].points.push_back(lastPoint);
208  }
209  }
210 
211  deltaTHisto = new TH1F("deltaTHisto", "deltaTHisto", 100, -1., 1.);
212  deltaXHisto = new TH1F("deltaXHisto", "deltaXHisto", 100, -5., 5.);
213  deltaYHisto = new TH1F("deltaYHisto", "deltaYHisto", 100, -5., 5.);
214  pullTHisto = new TH1F("pullTHisto", "pullTHisto", 100, -5., 5.);
215  pullXHisto = new TH1F("pullXHisto", "pullXHisto", 100, -5., 5.);
216  pullYHisto = new TH1F("pullYHisto", "pullYHisto", 100, -5., 5.);
217  nofHitsHisto = new TH1F("nofHitsHisto", "nofHitsHisto", 5, 0., 5.);
219  new TH1F("nofTracksDepositedHisto", "nofTracksDepositedHisto", 8, 0., 8.);
220 
221  return kSUCCESS;
222 }
223 
224 static Int_t currentEvN = 0;
225 // static int minEntry = 100000; (VF) not used
226 // static int maxEntry = -100000; (VF) not used
227 static int globalNofHits = 0;
228 static int globalNofDigis = 0;
229 
230 void CbmTofHitFinderTBQA::Exec(Option_t*) {
231  /*vector<TofHitDesc>& tofHitsEv = tofHitsAll[currentEvN];
232  Int_t nofHits = fTofHits->GetEntriesFast();
233 
234  for (Int_t i = 0; i < nofHits; ++i)
235  {
236  CbmTofHit hit = *static_cast<const CbmTofHit*> (fTofHits->At(i));
237  tofHitsEv.push_back( { hit, {} } );
238  TofHitDesc& lastHit = tofHitsEv.back();
239  int nofRefs = lastHit.pointRefs.size();
240  const CbmMatch* pDigiMatch = static_cast<const CbmMatch*> (fTofDigiMatchs->At(i));
241  Int_t nofDigis = pDigiMatch->GetNofLinks();
242  set<pair<Int_t, Int_t> > trackIds;
243 
244  for (Int_t j = 0; j < nofDigis; ++j)
245  {
246  const CbmLink& lnk = pDigiMatch->GetLink(j);
247  Int_t digiInd = lnk.GetIndex();
248  Int_t digiEvN = lnk.GetEntry();
249  CbmTofDigiExp* pDigi = static_cast<CbmTofDigiExp*> (fTofDigis->At(digiInd));
250  const CbmMatch* pPointMatch = pDigi->GetMatch();
251  Int_t nofPoints = pPointMatch->GetNofLinks();
252 
253  for (Int_t k = 0; k < nofPoints; ++k)
254  {
255  const CbmLink& pointLnk = pPointMatch->GetLink(k);
256  Int_t evN = pointLnk.GetEntry() - 1;
257  Int_t pointInd = pointLnk.GetIndex();
258 
259  int qq = 0;
260 
261  if (evN >= tofPointsAll.size())
262  ++qq;
263  else if (pointInd >= tofPointsAll[evN].size())
264  ++qq;
265 
266  lastHit.pointRefs.push_back(&(tofPointsAll[evN][pointInd].point));
267  tofPointsAll[evN][pointInd].hitRefs.push_back(&(lastHit.hit));
268 
269  if (tofPointsAll[evN][pointInd].trackId >= tofTracksAll[evN].size())
270  ++qq;
271 
272  if (tofPointsAll[evN][pointInd].trackId < 0)
273  ++qq;
274 
275  trackIds.insert( { evN, tofPointsAll[evN][pointInd].trackId } );
276  }
277  }
278 
279  for (set<pair<Int_t, Int_t> >::const_iterator j = trackIds.begin(); j != trackIds.end(); ++j)
280  tofTracksAll[j->first][j->second].tofHits.push_back(&lastHit);
281  }
282 
283  Int_t nofAllDigis = fTofDigis->GetEntriesFast();
284 
285  for (Int_t i = 0; i < nofAllDigis; ++i)
286  {
287  const CbmTofDigiExp* pDigi = static_cast<const CbmTofDigiExp*> (fTofDigis->At(i));
288  const CbmMatch* pPointMatch = pDigi->GetMatch();
289  Int_t nofPoints = pPointMatch->GetNofLinks();
290  set<pair<Int_t, Int_t> > trackIds;
291 
292  for (Int_t j = 0; j < nofPoints; ++j)
293  {
294  const CbmLink& pointLnk = pPointMatch->GetLink(j);
295 
296  int entry = pointLnk.GetEntry();
297 
298  if (minEntry > entry)
299  minEntry = entry;
300 
301  if (maxEntry < entry)
302  maxEntry = entry;
303 
304  Int_t evN = pointLnk.GetEntry() - 1;
305  Int_t pointInd = pointLnk.GetIndex();
306  trackIds.insert( { evN, tofPointsAll[evN][pointInd].trackId } );
307  }
308 
309  for (set<pair<Int_t, Int_t> >::const_iterator j = trackIds.begin(); j != trackIds.end(); ++j)
310  {
311  if (0 == pDigi->GetSide())
312  tofTracksAll[j->first][j->second].topDigis.push_back(*pDigi);
313  else
314  tofTracksAll[j->first][j->second].bottomDigis.push_back(*pDigi);
315  }
316  }*/
317 
318  hits.push_back({});
319  vector<QAHit>& evHits = hits[currentEvN];
320  Int_t nofHits = fTofHits->GetEntriesFast();
321  evHits.resize(nofHits);
322  globalNofHits += nofHits;
323  Int_t nofDigis = fTofDigis->GetEntriesFast();
324  globalNofDigis += nofDigis;
325 
326  for (int i = 0; i < nofHits; ++i) {
327  const CbmTofHit* hit = static_cast<const CbmTofHit*>(fTofHits->At(i));
328  const CbmMatch* hitMatch =
329  static_cast<const CbmMatch*>(fTofDigiMatchs->At(i));
330  // evHits[i] = { hit->GetX(), hit->GetDx(), hit->GetY(), hit->GetDy(), hit->GetTime(), hit->GetTimeError(), {}, {}, CbmTofAddress::GetModFullId(hit->GetAddress()) } ;
331  evHits[i] = QAHit {hit->GetX(),
332  hit->GetDx(),
333  hit->GetY(),
334  hit->GetDy(),
335  hit->GetTime(),
336  hit->GetTimeError(),
337  set<const QAMCPoint*> {},
338  set<const QAMCTrack*> {},
340  QAHit& lastHit = evHits[i];
341 
342  nofDigis = hitMatch->GetNofLinks();
343 
344  for (int j = 0; j < nofDigis; ++j) {
345  const CbmLink& lnk = hitMatch->GetLink(j);
346  Int_t digiInd = lnk.GetIndex();
347  // CbmTofDigiExp* pDigi = static_cast<CbmTofDigiExp*> (fTofDigis->At(digiInd)); (VF) not used
348  const CbmMatch* pPointMatch =
349  static_cast<const CbmMatch*>(fTofDigiPointMatchs->At(digiInd));
350 
351  Int_t nofPoints = pPointMatch->GetNofLinks();
352 
353  for (Int_t k = 0; k < nofPoints; ++k) {
354  const CbmLink& pointLnk = pPointMatch->GetLink(k);
355  Int_t evN = pointLnk.GetEntry() - 1;
356  Int_t pointInd = pointLnk.GetIndex();
357  lastHit.points.insert(&mcPoints[evN][pointInd]);
358  lastHit.tracks.insert(mcPoints[evN][pointInd].track);
359 
360  if (!mcPoints[evN][pointInd].isInit) {
361  double eventTime = fEventList->GetEventTime(evN + 1, 0);
362  mcPoints[evN][pointInd].t += eventTime;
363  mcPoints[evN][pointInd].isInit = true;
364  }
365  }
366  }
367 
368  set<QAMCTrack*> tracks;
369 
370  for (set<const QAMCPoint*>::const_iterator j = lastHit.points.begin();
371  j != lastHit.points.end();
372  ++j) {
373  const QAMCPoint* point = *j;
374  tracks.insert(point->track);
375  }
376 
377  for (set<QAMCTrack*>::iterator j = tracks.begin(); j != tracks.end(); ++j) {
378  QAMCTrack* track = *j;
379  track->hits.push_back(&lastHit);
380  }
381  }
382 
383  ++currentEvN;
384 }
385 
386 static void SaveHisto(TH1* histo) {
387  TFile* curFile = TFile::CurrentFile();
388  TString histoName = histo->GetName();
389  histoName += ".root";
390  TFile fh(histoName.Data(), "RECREATE");
391  histo->Write();
392  fh.Close();
393  delete histo;
394  TFile::CurrentFile() = curFile;
395 }
396 
398  /*cout << "min entry = " << minEntry << endl;
399  cout << "max entry = " << maxEntry << endl;
400  int nofHits = 0;
401  int nofPoints = 0;
402  int nofPointsWithHits = 0;
403  int nofMCTracks = 0;
404  int nofMCTracksWithHits = 0;
405  int nofMCTracksWithDigis = 0;
406  int nofMCTracksWithBothDigis = 0;
407 
408  for (int i = 0; i < 1000; ++i)
409  {
410  nofHits += tofHitsAll[i].size();
411  nofPoints += tofPointsAll[i].size();
412 
413  for (int j = 0; j < tofPointsAll[i].size(); ++j)
414  {
415  if (!tofPointsAll[i][j].hitRefs.empty())
416  ++nofPointsWithHits;
417  }
418 
419  for (int j = 0; j < tofTracksAll[i].size(); ++j)
420  {
421  if (!tofTracksAll[i][j].tofPoints.empty())
422  {
423  ++nofMCTracks;
424 
425  if (!tofTracksAll[i][j].tofHits.empty())
426  {
427  ++nofMCTracksWithHits;
428 
429  for(list<TofHitDesc*>::const_iterator k = tofTracksAll[i][j].tofHits.begin(); k != tofTracksAll[i][j].tofHits.end(); ++k)
430  {
431  const TofHitDesc* hitDesc = *k;
432  const CbmTofHit* hit = &(hitDesc->hit);
433  set<Int_t> detIds;
434  int nofRefs = hitDesc->pointRefs.size();
435 
436  for (list<const CbmTofPoint*>::const_iterator l = hitDesc->pointRefs.begin(); l != hitDesc->pointRefs.end(); ++l)
437  {
438  const CbmTofPoint* point = *l;
439  detIds.insert(point->GetDetectorID());
440  }
441 
442  Double_t x = 0;
443  Double_t y = 0;
444  int nofPts = 0;
445 
446  for(list<CbmTofPoint*>::const_iterator l = tofTracksAll[i][j].tofPoints.begin(); l != tofTracksAll[i][j].tofPoints.end(); ++l)
447  {
448  const CbmTofPoint* point = *l;
449 
450  if (detIds.find(point->GetDetectorID()) == detIds.end())
451  continue;
452 
453  x += point->GetX();
454  y += point->GetY();
455  ++nofPts;
456  }
457 
458  if (nofPts > 0)
459  {
460  deltaXHisto->Fill(hit->GetX() - x / nofPts);
461  deltaYHisto->Fill(hit->GetY() - y / nofPts);
462  }
463 
464  nofHitsHisto->Fill(tofTracksAll[i][j].tofHits.size());
465  }
466  }
467 
468  if (!tofTracksAll[i][j].topDigis.empty() || !tofTracksAll[i][j].bottomDigis.empty())
469  ++nofMCTracksWithDigis;
470 
471  if (!tofTracksAll[i][j].topDigis.empty() && !tofTracksAll[i][j].bottomDigis.empty())
472  {
473  ++nofMCTracksWithBothDigis;
474 
475  if (tofTracksAll[i][j].tofHits.empty())
476  {
477  for (list<CbmTofDigiExp>::const_iterator k = tofTracksAll[i][j].topDigis.begin(); k != tofTracksAll[i][j].topDigis.end(); ++k)
478  {
479  for (list<CbmTofDigiExp>::const_iterator l = tofTracksAll[i][j].bottomDigis.begin(); l != tofTracksAll[i][j].bottomDigis.end(); ++l)
480  deltaTHisto->Fill(k->GetTime() - l->GetTime());
481  }
482  }
483  }
484  }
485  }
486  }
487 
488  cout << "NOF hits = " << nofHits << ", NOF MC points = " << nofPoints << ", NOF MC points with hits = " << nofPointsWithHits << ", NOF MC tracks = " << nofMCTracks
489  << ", NOF MC tracks with hits = " << nofMCTracksWithHits << ", NOF MC tracks with digis = " << nofMCTracksWithDigis << ", NOF MC tracks with both digis = "
490  << nofMCTracksWithBothDigis << endl;*/
491 
492  int nofTracksTof = 0;
493  int nofTracksHit = 0;
494  int nofMCEvents = 0;
495 
496  for (vector<vector<QAMCTrack>>::const_iterator i = mcTracks.begin();
497  i != mcTracks.end();
498  ++i) {
499  const vector<QAMCTrack>& evTracks = *i;
500 
501  if (!evTracks.empty()) ++nofMCEvents;
502 
503  for (vector<QAMCTrack>::const_iterator j = evTracks.begin();
504  j != evTracks.end();
505  ++j) {
506  const QAMCTrack& track = *j;
507 
508  if (!track.points.empty()) {
509  ++nofTracksTof;
510 
511  if (!track.hits.empty()) ++nofTracksHit;
512  }
513 
514  for (list<const QAHit*>::const_iterator k = track.hits.begin();
515  k != track.hits.end();
516  ++k) {
517  const QAHit* hit = *k;
518  //set<int> detIds;
519  set<const QAMCPoint*> hitPoints;
520 
521  //if (hit->points.empty())
522  //continue;
523 
524  double x = 0;
525  double y = 0;
526  double t = 0;
527 
528  /*for (set<const QAMCPoint*>::const_iterator l = hit->points.begin(); l != hit->points.end(); ++l)
529  {
530  const QAMCPoint* point = *l;
531  //x += point->x;
532  //y += point->y;
533  //t += point->t;
534  detIds.insert(point->detId);
535  }*/
536 
537  for (list<const QAMCPoint*>::const_iterator l = track.points.begin();
538  l != track.points.end();
539  ++l) {
540  const QAMCPoint* point = *l;
541 
542  //if (detIds.find(point->detId) != detIds.end())
543  if (point->isInit && hit->detId == point->detId)
544  hitPoints.insert(point);
545  }
546 
547  if (hitPoints.empty()) continue;
548 
549  for (set<const QAMCPoint*>::const_iterator l = hitPoints.begin();
550  l != hitPoints.end();
551  ++l) {
552  const QAMCPoint* point = *l;
553  x += point->x;
554  y += point->y;
555  t += point->t;
556  }
557 
558  int nofPoints =
559  hitPoints.size(); //hit->points.size();//hitPoints.size();
560  double deltaX = hit->x - x / nofPoints;
561  double deltaY = hit->y - y / nofPoints;
562  double deltaT = hit->t - t / nofPoints;
563  deltaXHisto->Fill(deltaX);
564  deltaYHisto->Fill(deltaY);
565  deltaTHisto->Fill(deltaT);
566  pullXHisto->Fill(deltaX / hit->dx);
567  pullYHisto->Fill(deltaY / hit->dy);
568  pullTHisto->Fill(deltaT / hit->dt);
569  }
570  }
571  }
572 
573  int nofHitEvents = 0;
574  int nofHits = 0;
575  int nofSingleHits = 0;
576 
577  for (vector<vector<QAHit>>::const_iterator i = hits.begin(); i != hits.end();
578  ++i) {
579  const vector<QAHit>& evHits = *i;
580 
581  if (!evHits.empty()) ++nofHitEvents;
582 
583  nofHits += evHits.size();
584 
585  for (vector<QAHit>::const_iterator j = evHits.begin(); j != evHits.end();
586  ++j) {
587  const QAHit& hit = *j;
588  nofTracksDepositedHisto->Fill(hit.tracks.size());
589 
590  if (hit.tracks.size() == 1) ++nofSingleHits;
591  }
592  }
593 
602 
603  double eff = 100 * nofTracksHit;
604  eff /= nofTracksTof;
605  cout << "Clustering efficiency: " << eff << " % [ " << nofTracksHit << " / "
606  << nofTracksTof << " ]" << endl;
607  cout << "NOF hit events: " << nofHitEvents << endl;
608  cout << "NOF hits: " << nofHits << endl;
609  cout << "NOF hits2: " << globalNofHits << endl;
610  cout << "NOF digis: " << globalNofDigis << endl;
611  cout << "NOF MC Events: " << nofMCEvents << endl;
612  eff = 100 * nofSingleHits;
613  eff /= nofHits;
614  cout << "Pure hits: " << eff << " % [ " << nofSingleHits << " / " << nofHits
615  << " ]" << endl;
616 }
617 
CbmTofHitFinderTBQA::fMCTracks
CbmMCDataArray * fMCTracks
Definition: CbmTofHitFinderTBQA.h:41
CbmMatch
Definition: CbmMatch.h:22
CbmMCDataManager.h
CbmTofHitFinderTBQA.h
CbmTofHitFinderTBQA::fEventList
CbmMCEventList * fEventList
Definition: CbmTofHitFinderTBQA.h:43
QAHit
Definition: CbmTofHitFinderTBQA.cxx:64
CbmPixelHit::GetX
Double_t GetX() const
Definition: CbmPixelHit.h:83
QAHit::y
double y
Definition: CbmTofHitFinderTBQA.cxx:67
CbmMatch::GetLink
const CbmLink & GetLink(Int_t i) const
Definition: CbmMatch.h:35
CbmMatch::GetNofLinks
Int_t GetNofLinks() const
Definition: CbmMatch.h:38
QAHit::t
double t
Definition: CbmTofHitFinderTBQA.cxx:69
CbmTofHitFinderTBQA::fTofHits
TClonesArray * fTofHits
Definition: CbmTofHitFinderTBQA.h:36
QAHit::dt
double dt
Definition: CbmTofHitFinderTBQA.cxx:70
CbmPixelHit::GetY
Double_t GetY() const
Definition: CbmPixelHit.h:84
QAHit::QAHit
QAHit(double _x, double _dx, double _y, double _dy, double _t, double _dt, set< const QAMCPoint * > _points, set< const QAMCTrack * > _tracks, int _detId)
Definition: CbmTofHitFinderTBQA.cxx:86
CbmPixelHit::GetDx
Double_t GetDx() const
Definition: CbmPixelHit.h:85
CbmMCDataArray::Size
Int_t Size(Int_t fileNumber, Int_t eventNumber)
Definition: CbmMCDataArray.cxx:133
CbmTofHitFinderTBQA::CbmTofHitFinderTBQA
CbmTofHitFinderTBQA()
Definition: CbmTofHitFinderTBQA.cxx:125
QAMCPoint::t
double t
Definition: CbmTofHitFinderTBQA.cxx:56
globalNofDigis
static int globalNofDigis
Definition: CbmTofHitFinderTBQA.cxx:228
CbmTofHitFinderTBQA::Finish
void Finish()
Definition: CbmTofHitFinderTBQA.cxx:397
i
int i
Definition: L1/vectors/P4_F32vec4.h:25
pullTHisto
static TH1F * pullTHisto
Definition: CbmTofHitFinderTBQA.cxx:119
QAMCPoint::x
double x
Definition: CbmTofHitFinderTBQA.cxx:54
CbmMCDataManager::InitBranch
CbmMCDataArray * InitBranch(const char *name)
Definition: CbmMCDataManager.cxx:106
SaveHisto
static void SaveHisto(TH1 *histo)
Definition: CbmTofHitFinderTBQA.cxx:386
QAMCTrack::hits
list< const QAHit * > hits
Definition: CbmTofHitFinderTBQA.cxx:108
CbmMatch.h
CbmTofHitFinderTBQA
Definition: CbmTofHitFinderTBQA.h:23
CbmPixelHit::GetDy
Double_t GetDy() const
Definition: CbmPixelHit.h:86
CbmHit::GetTimeError
Double_t GetTimeError() const
Definition: CbmHit.h:76
QAMCPoint::y
double y
Definition: CbmTofHitFinderTBQA.cxx:55
QAMCPoint
Definition: CbmTofHitFinderTBQA.cxx:53
QAHit::QAHit
QAHit()
Definition: CbmTofHitFinderTBQA.cxx:75
QAMCTrack::QAMCTrack
QAMCTrack()
Definition: CbmTofHitFinderTBQA.cxx:109
currentEvN
static Int_t currentEvN
Definition: CbmTofHitFinderTBQA.cxx:224
tracks
TClonesArray * tracks
Definition: Analyze_matching.h:17
mcTracks
static vector< vector< QAMCTrack > > mcTracks
Definition: CbmTofHitFinderTBQA.cxx:112
deltaTHisto
static TH1F * deltaTHisto
Definition: CbmTofHitFinderTBQA.cxx:116
CbmMCDataArray::Get
TObject * Get(const CbmLink *lnk)
Definition: CbmMCDataArray.h:47
CbmHit::GetTime
Double_t GetTime() const
Definition: CbmHit.h:75
QAMCPoint::isInit
bool isInit
Definition: CbmTofHitFinderTBQA.cxx:59
CbmHit::GetAddress
Int_t GetAddress() const
Definition: CbmHit.h:73
CbmMCEventList::GetEventTime
Double_t GetEventTime(UInt_t event, UInt_t file)
Event start time.
Definition: CbmMCEventList.cxx:86
QAMCTrack::points
list< const QAMCPoint * > points
Definition: CbmTofHitFinderTBQA.cxx:107
CbmTofAddress.h
QAHit::detId
int detId
Definition: CbmTofHitFinderTBQA.cxx:73
ClassImp
ClassImp(CbmConverterManager) InitStatus CbmConverterManager
Definition: CbmConverterManager.cxx:12
CbmMCEventList
Container class for MC events with number, file and start time.
Definition: CbmMCEventList.h:38
QAMCTrack
Definition: CbmTofHitFinderTBQA.cxx:106
nofTracksDepositedHisto
static TH1F * nofTracksDepositedHisto
Definition: CbmTofHitFinderTBQA.cxx:123
deltaYHisto
static TH1F * deltaYHisto
Definition: CbmTofHitFinderTBQA.cxx:118
pullXHisto
static TH1F * pullXHisto
Definition: CbmTofHitFinderTBQA.cxx:120
CbmTofHitFinderTBQA::Exec
void Exec(Option_t *option)
Definition: CbmTofHitFinderTBQA.cxx:230
CbmTofHitFinderTBQA::fTofDigiMatchs
TClonesArray * fTofDigiMatchs
Definition: CbmTofHitFinderTBQA.h:37
CbmTofHitFinderTBQA::fTofMCPoints
CbmMCDataArray * fTofMCPoints
Definition: CbmTofHitFinderTBQA.h:40
CbmMCDataManager
Task class creating and managing CbmMCDataArray objects.
Definition: CbmMCDataManager.h:27
QAHit::x
double x
Definition: CbmTofHitFinderTBQA.cxx:65
pullYHisto
static TH1F * pullYHisto
Definition: CbmTofHitFinderTBQA.cxx:121
CbmTimeSlice
Bookkeeping of time-slice content.
Definition: CbmTimeSlice.h:29
CbmTofHitFinderTBQA::fTofDigis
TClonesArray * fTofDigis
Definition: CbmTofHitFinderTBQA.h:38
x
Double_t x
Definition: CbmMvdSensorDigiToHitTask.cxx:68
CbmTofPoint.h
deltaXHisto
static TH1F * deltaXHisto
Definition: CbmTofHitFinderTBQA.cxx:117
y
Double_t y
Definition: CbmMvdSensorDigiToHitTask.cxx:68
QAHit::points
set< const QAMCPoint * > points
Definition: CbmTofHitFinderTBQA.cxx:71
hits
static vector< vector< QAHit > > hits
Definition: CbmTofHitFinderTBQA.cxx:114
CbmTofHitFinderTBQA::fTimeSlice
CbmTimeSlice * fTimeSlice
Definition: CbmTofHitFinderTBQA.h:42
QAHit::dy
double dy
Definition: CbmTofHitFinderTBQA.cxx:68
QAHit::tracks
set< const QAMCTrack * > tracks
Definition: CbmTofHitFinderTBQA.cxx:72
CbmTofPoint
Geometric intersection of a MC track with a TOFb detector.
Definition: CbmTofPoint.h:40
CbmTofHit
Definition: core/data/tof/CbmTofHit.h:26
nofHitsHisto
static TH1F * nofHitsHisto
Definition: CbmTofHitFinderTBQA.cxx:122
mcPoints
static vector< vector< QAMCPoint > > mcPoints
Definition: CbmTofHitFinderTBQA.cxx:113
QAHit::dx
double dx
Definition: CbmTofHitFinderTBQA.cxx:66
QAMCPoint::track
QAMCTrack * track
Definition: CbmTofHitFinderTBQA.cxx:58
CbmTofHitFinderTBQA::Init
InitStatus Init()
Definition: CbmTofHitFinderTBQA.cxx:136
CbmTofAddress::GetModFullId
static Int_t GetModFullId(UInt_t address)
Definition: CbmTofAddress.h:111
globalNofHits
static int globalNofHits
Definition: CbmTofHitFinderTBQA.cxx:227
CbmTofHitFinderTBQA::fTofDigiPointMatchs
TClonesArray * fTofDigiPointMatchs
Definition: CbmTofHitFinderTBQA.h:39
QAMCPoint::detId
int detId
Definition: CbmTofHitFinderTBQA.cxx:57