CbmRoot
Loading...
Searching...
No Matches
CbmPsdMCbmQaReal.cxx
Go to the documentation of this file.
1/* Copyright (C) 2020-2021 Facility for Antiproton and Ion Research in Europe, Darmstadt
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Pierre-Alain Loizeau [committer] */
4
5#include "CbmPsdMCbmQaReal.h"
6
7#include "CbmDigiManager.h"
8#include "CbmDrawHist.h"
9#include "CbmEvent.h"
10#include "CbmGlobalTrack.h"
11#include "CbmHistManager.h"
12#include "CbmMatchRecoToMC.h"
13#include "CbmPsdDigi.h"
14#include "CbmPsdMCbmHit.h"
15#include "CbmStsDigi.h"
16#include "CbmTofDigi.h"
17#include "CbmTofHit.h"
18#include "CbmTofTracklet.h"
19#include "CbmTrackMatchNew.h"
20#include "CbmTrdTrack.h"
21#include "CbmUtils.h"
22
23#include "TCanvas.h"
24#include "TClonesArray.h"
25#include "TEllipse.h"
26#include "TF1.h"
27#include "TGeoBBox.h"
28#include "TGeoManager.h"
29#include "TGeoNode.h"
30#include "TH1.h"
31#include "TH1D.h"
32#include "TLatex.h"
33#include "TLine.h"
34#include "TMarker.h"
35#include "TMath.h"
36#include "TStyle.h"
37#include "TSystem.h"
38#include <TFile.h>
39
40#include <boost/assign/list_of.hpp>
41
42#include <iostream>
43#include <sstream>
44#include <string>
45
46#include <cmath>
47
48using namespace std;
49using boost::assign::list_of;
50
51#define PsdZPos 348.
52
54 : FairTask("CbmPsdMCbmQaReal")
55 , fBmonDigis(nullptr)
56 , fPsdHits(nullptr)
57 , fTofHits(nullptr)
58 , fTofTracks(nullptr)
59 , fCbmEvent(nullptr)
60 , fHM(nullptr)
61 , fEntryNum(0)
62 , fOutputDir("result")
63{
64}
65
67{
68 cout << "CbmPsdMCbmQaReal::Init" << endl;
69
70 FairRootManager* ioman = FairRootManager::Instance();
71 if (nullptr == ioman) { Fatal("CbmPsdMCbmQaReal::Init", "RootManager not instantised!"); }
72
74 fDigiMan->Init();
75
76 if (!fDigiMan->IsPresent(ECbmModuleId::kPsd)) Fatal("CbmPsdMCbmQaReal::Init", "No Psd Digis!");
77
78 if (!fDigiMan->IsPresent(ECbmModuleId::kTof)) Fatal("CbmPsdMCbmQaReal::Init", "No Tof Digis!");
79
80
81 fPsdHits = (TClonesArray*) ioman->GetObject("PsdHit");
82 if (nullptr == fPsdHits) { Fatal("CbmPsdMCbmQaReal::Init", "No Psd Hits!"); }
83
84 fTofHits = (TClonesArray*) ioman->GetObject("TofHit");
85 if (nullptr == fTofHits) { Fatal("CbmPsdMCbmQaReal::Init", "No Tof Hits!"); }
86
87 fTofTracks = (TClonesArray*) ioman->GetObject("TofTracks");
88 if (nullptr == fTofTracks) { Fatal("CbmPsdMCbmQaReal::Init", "No Tof Tracks!"); }
89
90 // fBmonDigis =(TClonesArray*) ioman->GetObject("CbmBmonDigi");
91 // if (nullptr == fBmonDigis) { Fatal("CbmPsdMCbmQaReal::Init", "No Bmon Digis!");}
92
93 fCbmEvent = (TClonesArray*) ioman->GetObject("CbmEvent");
94 if (nullptr == fCbmEvent) { Fatal("CbmPsdMCbmQaReal::Init", "No Event!"); }
95
97
98 return kSUCCESS;
99}
100
102{
103 fHM = new CbmHistManager();
104
105 fHM->Create1<TH1D>("fhNofEntries", "fhNofEntries; Counts", 1, 0.5, 1.5);
106 fHM->Create1<TH1D>("fhNofCbmEvents", "fhNofCbmEvents;Counts", 1, 0.5, 1.5);
107
108 fHM->Create1<TH1D>("fhHitsInTimeslice", "fhHitsInTimeslice;Timeslice;#Hits", 200, 1, 200);
109
110 // nof objects per timeslice
111 fHM->Create1<TH1D>("fhNofPsdDigisInTimeslice", "fhNofPsdDigisInTimeslice;# PSD digis / timeslice;Counts", 100, 0,
112 2000);
113 fHM->Create1<TH1D>("fhNofPsdHitsInTimeslice", "fhNofPsdHitsInTimeslice;# PSD hits / timeslice;Counts", 100, 0, 2000);
114
115 // PSD hits
116 fHM->Create2<TH2D>("fhPsdHitPos", "fhPsdHitPos;PSD module id [];PSD section id [];Counts", 20, 0, 20, 20, 0, 20);
117 fHM->Create1<TH1D>("fhPsdHitsTimeLog", "fhPsdHitsTimeLog;Time [ns];Counts", 400, 0., 0.);
118
119
120 // PSD digis, the limits of log histograms are set in Exec method
121 fHM->Create1<TH1D>("fhPsdDigisTimeLog", "fhNofPsdDigisTimeLog;Time [ns];Counts", 400, 0., 0.);
122 fHM->Create1<TH1D>("fhTofDigisTimeLog", "fhTofDigisTimeLog;Time [ns];Counts", 400, 0., 0.);
123 fHM->Create1<TH1D>("fhStsDigisTimeLog", "fhStsDigisTimeLog;Time [ns];Counts", 400, 0., 0.);
124 fHM->Create1<TH1D>("fhBmonDigisTimeLog", "fhBmonDigisTimeLog;Time [ns];Counts", 400, 0., 0.);
125
126 //Edep
127 fHM->Create1<TH1D>("fhPsdDigisEdep", "fhPsdDigisEdep;Edep [adc counts];Counts", 500, 0, 50000);
128 fHM->Create1<TH1D>("fhPsdHitEdep", "fhPsdHitEdep;Edep [adc counts];Counts", 500, 0, 50000);
129 fHM->Create1<TH1D>("fhPsdEdepInEvent", "fhPsdEdepInEvent; Edep [adc counts]; Counts", 500, 0, 300000);
130
131 //Tof Psd correlation
132 fHM->Create2<TH2D>("fhTofTrackMultPsdEdep", "fhTofTrackMultPsdEdep;PSD Edep [adc counts];Tof track Mult [];Counts",
133 500, 0, 400000, 20, 0, 20);
134 fHM->Create2<TH2D>("fhTofHitMultPsdEdep", "fhTofHitMultPsdEdep;PSD Edep [adc counts];Tof hit Mult [];Counts", 500, 0,
135 400000, 50, 0, 50);
136
137 //Tof Hits
138 fHM->Create3<TH3D>("fhTofXYZ", "fhTofXYZ;Tof Hit X [cm];TofHit Z [cm];Tof Hit Y [cm];Counts", 100, -20, 20, 141, 230.,
139 370., 100, -20, 20);
140 fHM->Create1<TH1D>("fhTofHitsZ", "fhTofHitsZ;Z [cm];Counts", 350, -0.5, 349.5);
141 fHM->Create2<TH2D>("fhTofHitsXZ", "fhTofHitsXZ;Z [cm];X [cm];Counts", 600, -150, 450, 500, -50, 450);
142
143 //Tof Tracks
144 fHM->Create1<TH1D>("fhTofTracksPerEvent", "fhTofTracksPerEvent;NofTracks/Event;Counts", 20, -5, 25);
145 fHM->Create2<TH2D>("fhTofTracksXY", "fhTofTracksXY;X[cm];Y[cm];NofTracks/cm^2", 250, -100, 150, 300, -150, 150);
146}
147
148
149void CbmPsdMCbmQaReal::Exec(Option_t* /*option*/)
150{
151 fEntryNum++;
152 fHM->H1("fhNofEntries")->Fill(1);
153 cout << "CbmPsdMCbmQaReal, entry No. " << fEntryNum << endl;
154
155 if (fDigiHitsInitialized == false) {
158
159 double minTime = std::numeric_limits<double>::max();
160 for (int i = 0; i < fDigiMan->GetNofDigis(ECbmModuleId::kPsd); i++) {
161 const CbmPsdDigi* psdDigi = fDigiMan->Get<CbmPsdDigi>(i);
162 // fHM->H1("fhRichDigisToT")->Fill(richDigi->GetToT());
163 if (psdDigi->GetTime() < minTime) minTime = psdDigi->GetTime();
164 }
165
166 double dT = 40e9;
167 fHM->H1("fhPsdHitsTimeLog")->GetXaxis()->SetLimits(minTime, minTime + dT);
168 fHM->H1("fhPsdDigisTimeLog")->GetXaxis()->SetLimits(minTime, minTime + dT);
169 fHM->H1("fhTofDigisTimeLog")->GetXaxis()->SetLimits(minTime, minTime + dT);
170 fHM->H1("fhStsDigisTimeLog")->GetXaxis()->SetLimits(minTime, minTime + dT);
171 fHM->H1("fhBmonDigisTimeLog")->GetXaxis()->SetLimits(minTime, minTime + dT);
172
173
175 }
176 } // if (fDigiHitsInitialized == false)
177
178 if (fDigiHitsInitialized == true) {
179
180 int nofPsdDigis = fDigiMan->GetNofDigis(ECbmModuleId::kPsd);
181 fHM->H1("fhNofPsdDigisInTimeslice")->Fill(nofPsdDigis);
182 for (int i = 0; i < nofPsdDigis; i++) {
183 const CbmPsdDigi* digi = fDigiMan->Get<CbmPsdDigi>(i);
184 fHM->H1("fhPsdDigisTimeLog")->Fill(digi->GetTime());
185 fHM->H1("fhPsdDigisEdep")->Fill(digi->GetEdep());
186 }
187
188 int nofTofDigis = fDigiMan->GetNofDigis(ECbmModuleId::kTof);
189 for (int i = 0; i < nofTofDigis; i++) {
190 const CbmTofDigi* digi = fDigiMan->Get<CbmTofDigi>(i);
191 fHM->H1("fhTofDigisTimeLog")->Fill(digi->GetTime());
192 }
193
195 int nofStsDigis = fDigiMan->GetNofDigis(ECbmModuleId::kSts);
196 for (int i = 0; i < nofStsDigis; i++) {
197 const CbmStsDigi* digi = fDigiMan->Get<CbmStsDigi>(i);
198 fHM->H1("fhStsDigisTimeLog")->Fill(digi->GetTime());
199 }
200 }
201
202 // int nofBmonDigis = fBmonDigis->GetEntriesFast();
203 // for (int i = 0; i < nofBmonDigis; i++) {
204 // CbmDigi* digi = static_cast<CbmDigi*>(fBmonDigis->At(i));
205 // fHM->H1("fhBmonDigisTimeLog")->Fill(digi->GetTime() );
206 // fHM->H1("fhBmonDigisTimeLogZoom")->Fill(digi->GetTime() );
207 // fHM->H1("fhBmonDigisTimeLogZoom2")->Fill(digi->GetTime());
208 // }
209 }
210
211 int nofPsdHits = fPsdHits->GetEntriesFast();
212 fHM->H1("fhNofPsdHitsInTimeslice")->Fill(nofPsdHits);
213 fHM->H1("fhHitsInTimeslice")->Fill(fEntryNum, nofPsdHits);
214 for (int iH = 0; iH < nofPsdHits; iH++) {
215 CbmPsdMCbmHit* psdHit = static_cast<CbmPsdMCbmHit*>(fPsdHits->At(iH));
216 fHM->H2("fhPsdHitPos")->Fill(psdHit->GetModuleID(), psdHit->GetSectionID());
217 fHM->H1("fhPsdHitEdep")->Fill(psdHit->GetEdep());
218 }
219
220 //CBMEVENT
221 auto fNCbmEvent = fCbmEvent->GetEntriesFast();
222
223 for (int i = 0; i < fNCbmEvent; i++) {
224 fHM->H1("fhNofCbmEvents")->Fill(1);
225 CbmEvent* ev = static_cast<CbmEvent*>(fCbmEvent->At(i));
226 std::vector<int> evPsdHitIndx;
227
228 // Scan Event to find first Digi that triggered.
229 std::cout << "Sts Digis:" << ev->GetNofData(ECbmDataType::kStsDigi) << std::endl;
230 std::cout << "Much Digis:" << ev->GetNofData(ECbmDataType::kMuchDigi) << std::endl;
231 std::cout << "Tof Digis:" << ev->GetNofData(ECbmDataType::kTofDigi) << std::endl;
232 std::cout << "Rich Digis:" << ev->GetNofData(ECbmDataType::kRichDigi) << std::endl;
233 std::cout << "Psd Digis:" << ev->GetNofData(ECbmDataType::kPsdDigi) << std::endl;
234
235 Int_t nofTofTracksInEvent = ev->GetNofData(ECbmDataType::kTofTrack);
236 Int_t nofPsdHitsInEvent = ev->GetNofData(ECbmDataType::kPsdHit);
237 Int_t nofTofHitsInEvent = ev->GetNofData(ECbmDataType::kTofHit);
238 Double_t PsdEdepInEvent = 0.;
239 for (int j = 0; j < nofPsdHitsInEvent; j++) {
240 auto iPsdHit = ev->GetIndex(ECbmDataType::kPsdHit, j);
241 evPsdHitIndx.push_back(iPsdHit);
242 CbmPsdMCbmHit* psdHit = static_cast<CbmPsdMCbmHit*>(fPsdHits->At(iPsdHit));
243 PsdEdepInEvent += psdHit->GetEdep();
244 }
245 fHM->H1("fhPsdEdepInEvent")->Fill(PsdEdepInEvent);
246 fHM->H2("fhTofTrackMultPsdEdep")->Fill(PsdEdepInEvent, nofTofTracksInEvent);
247 fHM->H2("fhTofHitMultPsdEdep")->Fill(PsdEdepInEvent, nofTofHitsInEvent);
248
249 for (int j = 0; j < nofTofHitsInEvent; j++) {
250 auto iTofHit = ev->GetIndex(ECbmDataType::kTofHit, j);
251 CbmTofHit* tofHit = static_cast<CbmTofHit*>(fTofHits->At(iTofHit));
252 //if (tofHit->GetZ() < 2.) continue; // Cut Bmon away!
253
254 fHM->H1("fhTofHitsZ")->Fill(tofHit->GetZ());
255 fHM->H1("fhTofHitsXZ")->Fill(tofHit->GetZ(), tofHit->GetX());
256 fHM->H3("fhTofXYZ")->Fill(tofHit->GetX(), tofHit->GetZ(), tofHit->GetY());
257 }
258
259 fHM->H1("fhTofTracksPerEvent")->Fill(nofTofTracksInEvent);
260 for (int j = 0; j < nofTofTracksInEvent; j++) {
261 auto iTofTrack = ev->GetIndex(ECbmDataType::kTofTrack, j);
262 CbmTofTracklet* tTrack = static_cast<CbmTofTracklet*>(fTofTracks->At(iTofTrack));
263
264 fHM->H2("fhTofTracksXY")->Fill(tTrack->GetFitX(PsdZPos), tTrack->GetFitY(PsdZPos));
265 }
266
267 } //End CbmEvent loop
268}
269
270
272{
273 cout.precision(4);
274
275 //SetDefaultDrawStyle();
276 //gStyle->SetOptStat(1111);
277 double nofEvents = fHM->H1("fhNofCbmEvents")->GetEntries();
278 fHM->ScaleByPattern("fh_.*", 1. / nofEvents);
279
280 {
281 fHM->CreateCanvas("psd_mcbm_fhNofEntries", "psd_mcbm_fhNofEntries", 600, 600);
282 DrawH1(fHM->H1("fhNofEntries"));
283 }
284
285 {
286 fHM->CreateCanvas("psd_mcbm_fhNofCbmEvents", "psd_mcbm_fhNofCbmEvents", 600, 600);
287 DrawH1(fHM->H1("fhNofCbmEvents"));
288 }
289
290 {
291 fHM->CreateCanvas("HitsInTimeslice", "HitsInTimeslice", 600, 600);
292 DrawH1(fHM->H1("fhHitsInTimeslice"));
293 }
294
295
296 {
297 TCanvas* c = fHM->CreateCanvas("psd_mcbm_nofObjectsInTimeslice", "psd_mcbm_nofObjectsInTimeslice", 1500, 500);
298 c->Divide(2, 1);
299 c->cd(1);
300 DrawH1(fHM->H1("fhNofPsdDigisInTimeslice"), kLinear, kLog);
301 c->cd(2);
302 DrawH1(fHM->H1("fhNofPsdHitsInTimeslice"), kLinear, kLog);
303 }
304
305 {
306 fHM->CreateCanvas("psd_mcbm_XY", "psd_mcbm_XY", 1200, 600);
307 DrawH2(fHM->H2("fhPsdHitPos"));
308 }
309
310 {
311 fHM->CreateCanvas("psd_mcbm_DigisTimeLog", "psd_mcbm_DigisTimeLog", 1200, 1200);
312 DrawH1({fHM->H1("fhStsDigisTimeLog"), fHM->H1("fhTofDigisTimeLog"), fHM->H1("fhBmonDigisTimeLog"),
313 fHM->H1("fhPsdDigisTimeLog")},
314 {"STS", "TOF", "Bmon", "PSD"}, kLinear, kLog, true, 0.87, 0.75, 0.99, 0.99);
315 gPad->SetLeftMargin(0.1);
316 gPad->SetRightMargin(0.10);
317 fHM->H1("fhStsDigisTimeLog")->GetYaxis()->SetTitleOffset(0.7);
318 fHM->H1("fhStsDigisTimeLog")->SetMinimum(0.9);
319 }
320
321 {
322 fHM->CreateCanvas("psd_mcbm_fhPsdDigisEdep", "psd_mcbm_fhPsdDigisEdep", 600, 600);
323 DrawH1(fHM->H1("fhPsdDigisEdep"));
324 }
325
326 {
327 fHM->CreateCanvas("psd_mcbm_fhPsdHitEdep", "psd_mcbm_fhPsdHitEdep", 600, 600);
328 DrawH1(fHM->H1("fhPsdHitEdep"));
329 }
330
331 {
332 fHM->CreateCanvas("psd_mcbm_fhPsdEdepInEvent", "psd_mcbm_fhPsdEdepInEvent", 600, 600);
333 DrawH1(fHM->H1("fhPsdEdepInEvent"));
334 }
335
336 {
337 fHM->CreateCanvas("psd_mcbm_fhTofTrackMultPsdEdep", "psd_mcbm_fhTofTrackMultPsdEdep", 1200, 1200);
338 DrawH2(fHM->H2("fhTofTrackMultPsdEdep"));
339 }
340
341 {
342 fHM->CreateCanvas("psd_mcbm_fhTofHitMultPsdEdep", "psd_mcbm_fhTofHitMultPsdEdep", 1200, 1200);
343 DrawH2(fHM->H2("fhTofHitMultPsdEdep"));
344 }
345
346 {
347 fHM->CreateCanvas("TofHitsZ", "TofHitsZ", 1200, 1200);
348 DrawH1(fHM->H1("fhTofHitsZ"));
349 }
350
351 {
352 fHM->CreateCanvas("TofHitsXZ", "TofHitsXZ", 1200, 1200);
353 DrawH2(fHM->H2("fhTofHitsXZ"));
354 }
355
356 {
357 fHM->CreateCanvas("ToF_XYZ", "ToF_XYZ", 1200, 1200);
358 fHM->H3("fhTofXYZ")->Draw();
359 }
360
361 {
362 TCanvas* c = fHM->CreateCanvas("TofTracksXY", "TofTracksXY", 1200, 800);
363 c->Divide(2, 1);
364 c->cd(1);
365 DrawH2(fHM->H2("fhTofTracksXY"));
366 //c->cd(2);
367 //DrawH2(fHM->H2("fhTofTracksXYRICH"));
368 }
369}
370
371
373{
374 //std::cout<<"Tracks: "<< fTofTracks->GetEntriesFast() <<std::endl;
375 std::cout << "Drawing Hists...";
376 DrawHist();
377 std::cout << "DONE!" << std::endl;
378
379 if (this->fDoDrawCanvas) {
381 std::cout << "Canvas saved to Images!" << std::endl;
382 }
383
384 if (this->fDoWriteHistToFile) {
386 TFile* oldFile = gFile;
387 TDirectory* oldDir = gDirectory;
388
389 std::string s = fOutputDir + "/RecoHists.root";
390 TFile* outFile = new TFile(s.c_str(), "RECREATE");
391 if (outFile->IsOpen()) {
392 fHM->WriteToFile();
393 std::cout << "Written to Root-file \"" << s << "\" ...";
394 outFile->Close();
395 std::cout << "Done!" << std::endl;
396 }
398 gFile = oldFile;
399 gDirectory = oldDir;
400 }
401}
402
403
404void CbmPsdMCbmQaReal::DrawFromFile(const string& fileName, const string& outputDir)
405{
406 fOutputDir = outputDir;
407
409 TFile* oldFile = gFile;
410 TDirectory* oldDir = gDirectory;
411
412 if (fHM != nullptr) delete fHM;
413
414 fHM = new CbmHistManager();
415 TFile* file = new TFile(fileName.c_str());
416 fHM->ReadFromFile(file);
417 DrawHist();
418
420
422 gFile = oldFile;
423 gDirectory = oldDir;
424}
425
426
ClassImp(CbmConverterManager)
@ kTof
Time-of-flight Detector.
@ kPsd
Projectile spectator detector.
@ kSts
Silicon Tracking System.
void DrawH1(TH1 *hist, HistScale logx, HistScale logy, const string &drawOpt, Int_t color, Int_t lineWidth, Int_t lineStyle, Int_t markerSize, Int_t markerStyle)
void DrawH2(TH2 *hist, HistScale logx, HistScale logy, HistScale logz, const string &drawOpt)
Helper functions for drawing 1D and 2D histograms and graphs.
@ kLinear
Definition CbmDrawHist.h:69
@ kLog
Definition CbmDrawHist.h:68
TClonesArray * fTofTracks
Histogram manager.
FairTask for matching RECO data to MC.
#define PsdZPos
static Int_t GetNofDigis(ECbmModuleId systemId)
static Bool_t IsPresent(ECbmModuleId systemId)
Presence of a digi branch.
InitStatus Init()
Initialisation.
const Digi * Get(Int_t index) const
Get a digi object.
static CbmDigiManager * Instance()
Static instance.
Class characterising one event by a collection of links (indices) to data objects,...
Definition CbmEvent.h:34
size_t GetNofData() const
Definition CbmEvent.cxx:53
uint32_t GetIndex(ECbmDataType type, uint32_t iData)
Definition CbmEvent.cxx:42
Histogram manager.
TCanvas * CreateCanvas(const std::string &name, const std::string &title, Int_t width, Int_t height)
Create and draw TCanvas and store pointer to it.
void SaveCanvasToImage(const std::string &outputDir, const std::string &options="png,eps")
Save all stored canvases to images.
TH2 * H2(const std::string &name) const
Return pointer to TH2 histogram.
void Create2(const std::string &name, const std::string &title, Int_t nofBinsX, Double_t minBinX, Double_t maxBinX, Int_t nofBinsY, Double_t minBinY, Double_t maxBinY)
Helper function for creation of 2-dimensional histograms and profiles. Template argument is a real ob...
void ReadFromFile(TFile *file)
Read histograms from file.
void ScaleByPattern(const std::string &pattern, Double_t scale)
Scale histograms which name matches specified pattern.
void WriteToFile()
Write all objects to current opened file.
TH3 * H3(const std::string &name) const
Return pointer to TH3 histogram.
void Create1(const std::string &name, const std::string &title, Int_t nofBins, Double_t minBin, Double_t maxBin)
Helper function for creation of 1-dimensional histograms and profiles. Template argument is a real ob...
void Create3(const std::string &name, const std::string &title, Int_t nofBinsX, Double_t minBinX, Double_t maxBinX, Int_t nofBinsY, Double_t minBinY, Double_t maxBinY, Int_t nofBinsZ, Double_t minBinZ, Double_t maxBinZ)
Helper function for creation of 3-dimensional histograms and profiles. Template argument is a real ob...
TH1 * H1(const std::string &name) const
Return pointer to TH1 histogram.
double GetZ() const
Definition CbmHit.h:71
double GetY() const
Definition CbmPixelHit.h:74
double GetX() const
Definition CbmPixelHit.h:73
Data class for PSD digital information.
Definition CbmPsdDigi.h:36
double GetEdep() const
Energy deposit.
Definition CbmPsdDigi.h:119
double GetTime() const
Time.
Definition CbmPsdDigi.h:105
data class for hit information in PSD
double GetSectionID() const
Index of PSD section @value section index [].
int32_t GetModuleID() const
Index of PSD module @value module index [].
double GetEdep() const
Energy deposited in PSD section @value Energy [a.u.].
TClonesArray * fTofHits
CbmDigiManager * fDigiMan
void DrawHist()
Draw histograms.
void DrawFromFile(const string &fileName, const string &outputDir)
Draw histogram from file.
CbmHistManager * fHM
virtual void Exec(Option_t *option)
Inherited from FairTask.
virtual InitStatus Init()
Inherited from FairTask.
TClonesArray * fPsdHits
TClonesArray * fCbmEvent
TClonesArray * fTofTracks
void InitHistograms()
Initialize histograms.
CbmPsdMCbmQaReal()
Standard constructor.
virtual void Finish()
Inherited from FairTask.
Data class for a single-channel message in the STS.
Definition CbmStsDigi.h:40
Data class for expanded digital TOF information.
Definition CbmTofDigi.h:47
double GetTime() const
Inherited from CbmDigi.
Definition CbmTofDigi.h:131
Provides information on attaching a TofHit to a TofTrack.
double GetFitY(double Z)
double GetFitX(double Z)
Hash for CbmL1LinkKey.