26#include "FairMCPoint.h"
27#include "FairTrackParam.h"
29#include "TClonesArray.h"
60 fVertexZStsSlices = {make_pair(0., 5.), make_pair(5., 15.), make_pair(15., 25.), make_pair(25., 35.),
61 make_pair(35., 45.), make_pair(45., 55.), make_pair(55., 65.), make_pair(65., 75.),
62 make_pair(75., 85.), make_pair(85., 95.), make_pair(95., 105.)};
74 LOG(info) <<
"CbmRichUrqmdTest, event No. " <<
fEventNum;
87 int nofRichHits =
fRichHits->GetEntriesFast();
88 for (
int iHit = 0; iHit < nofRichHits; iHit++) {
90 if (
nullptr == hit)
continue;
93 for (
const auto& motherId : motherIds) {
103 fHM->
Create1<TH1D>(
"fh_vertex_z",
"fh_vertex_z;Z [cm];# vertices/ev.", 400, -50., 350);
104 fHM->
Create1<TH1D>(
"fh_vertex_z_sts",
"fh_vertex_z_sts;Z [cm];# vertices/ev.", 320, -50., 110.);
105 fHM->
Create2<TH2D>(
"fh_vertex_xy",
"fh_vertex_xy;X [cm];Y [cm];# vertices/ev.", 100, -200., 200., 100, -200., 200.);
106 fHM->
Create2<TH2D>(
"fh_vertex_zy",
"fh_vertex_zy;Z [cm];Y [cm];# vertices/ev.", 400, -50., 350, 100, -200., 200.);
107 fHM->
Create2<TH2D>(
"fh_vertex_zx",
"fh_vertex_zx;Z [cm];X [cm];# vertices/ev.", 400, -50., 350, 100, -200., 200.);
109 vector<string> vertexZTypes{
"z60_140",
"z140_330",
"z140_190"};
110 for (
const string& t : vertexZTypes) {
111 fHM->
Create2<TH2D>(
"fh_vertex_xy_" + t,
"fh_vertex_xy_" + t +
";X [cm];Y [cm];# vertices/ev.", 100, -200., 200.,
116 string name =
"fh_vertex_xy_z" + to_string(pair.first) +
"_" + to_string(pair.second);
117 fHM->
Create2<TH2D>(name, name +
";x [cm];y [cm];# vertices/ev.", 100, -100., 100., 100, -100., 100.);
120 vector<string> nofRingsTypes{
"1hit",
"7hits",
"prim_1hit",
"prim_7hits",
"target_1hit",
"target_7hits"};
121 for (
const string& t : nofRingsTypes) {
122 double nofBins = (t ==
"1hit" || t ==
"7hits") ? 30 : 100;
123 fHM->
Create1<TH1D>(
"fh_nof_rings_" + t,
"fh_nof_rings_" + t +
";# particles/ev.;Yield", nofBins, -.5,
127 vector<string> momP{
"fh_secel_mom",
"fh_gamma_target_mom",
"fh_gamma_nontarget_mom",
128 "fh_pi_mom",
"fh_kaon_mom",
"fh_mu_mom"};
129 for (
const string& t : momP) {
130 fHM->
Create1<TH1D>(t, t +
";P [GeV/c];Number per event", 100, 0., 20);
133 fHM->
Create1<TH1D>(
"fh_nof_points_per_event_src",
"fh_nof_points_per_event_src;Particle;# MC points/ev.", 7, .5, 7.5);
134 fHM->
Create1<TH1D>(
"fh_nof_hits_per_event",
"fh_nof_hits_per_event;# hits/ev.;Yield", 200, 0, 2000);
135 fHM->
Create1<TH1D>(
"fh_nof_points_per_event",
"fh_nof_points_per_event;# points/ev.;Yield", 200, 0, 10000);
136 fHM->
Create1<TH1D>(
"fh_nof_hits_per_pmt",
"fh_nof_hits_per_pmt;# hits/PMT;% of total", 65, -0.5, 64.5);
142 fHM->
Create2<TH2D>(
"fh_hitrate_xy",
"fh_hitrate_xy;X [cm];Y [cm];# hits/pixel/s", xPmtBins, yPmtBins);
144 fHM->
Create2<TH2D>(
"fh_hits_xy",
"fh_hits_xy;X [cm];Y [cm];# hits/PMT/ev.", xPmtBins, yPmtBins);
146 vector<string> pointXYTypes{
"",
"_pions",
"_gamma_target",
"_gamma_nontarget"};
147 for (
const string& t : pointXYTypes) {
148 fHM->
Create2<TH2D>(
"fh_points_xy" + t,
"fh_points_xy" + t +
";X [cm];Y [cm];# MC points/PMT/ev.", xPmtBins,
152 vector<string> skippedPmtTypes{
"10",
"20",
"30"};
153 for (
const string& t : skippedPmtTypes) {
155 "fh_skipped_pmt_xy_" + t +
";X [cm];Y [cm];# skipped PMTs (>" + t +
" hits) [%]", xPmtBins,
159 fHM->
Create1<TH1D>(
"fh_nof_proj_per_event",
"fh_nof_proj_per_event;# tracks/ev.;Yield", 600, -.5, 599.5);
160 fHM->
Create2<TH2D>(
"fh_proj_xy",
"fh_proj_xy;X [cm];Y [cm];# tracks/cm^{2}/ev.", 240, -120, 120, 420, -210, 210);
166 int nRings1hit = 0, nRings7hits = 0;
167 int nRingsPrim1hit = 0, nRingsPrim7hits = 0;
168 int nRingsTarget1hit = 0, nRingsTarget7hits = 0;
169 for (
int iR = 0; iR < nofRings; iR++) {
171 if (ring ==
nullptr)
continue;
173 if (ringMatch ==
nullptr || ringMatch->
GetNofLinks() < 1)
continue;
177 if (mcTrack ==
nullptr)
continue;
180 double mom = mcTrack->
GetP();
183 double dZ = vert.Z();
185 if (motherId == -1 && pdgAbs == 11)
continue;
188 if (nofHits >= 1) nRings1hit++;
191 if (motherId == -1 && nofHits >= 1) nRingsPrim1hit++;
192 if (motherId == -1 && nofHits >=
fMinNofHits) nRingsPrim7hits++;
194 if (dZ < 0.1 && nofHits >= 1) nRingsTarget1hit++;
195 if (dZ < 0.1 && nofHits >=
fMinNofHits) nRingsTarget7hits++;
198 if (motherId != -1) {
201 if (mother !=
nullptr) motherPdg = mother->
GetPdgCode();
202 if (motherId != -1 && pdgAbs == 11 && motherPdg != 22)
fHM->
H1(
"fh_secel_mom")->Fill(mom);
204 if (motherId != -1 && pdgAbs == 11 && motherPdg == 22) {
206 fHM->
H1(
"fh_gamma_target_mom")->Fill(mom);
209 fHM->
H1(
"fh_gamma_nontarget_mom")->Fill(mom);
213 if (pdgAbs == 211)
fHM->
H1(
"fh_pi_mom")->Fill(mom);
214 if (pdgAbs == 321)
fHM->
H1(
"fh_kaon_mom")->Fill(mom);
215 if (pdgAbs == 13)
fHM->
H1(
"fh_mu_mom")->Fill(mom);
218 fHM->
H1(
"fh_nof_rings_1hit")->Fill(nRings1hit);
219 fHM->
H1(
"fh_nof_rings_7hits")->Fill(nRings7hits);
221 fHM->
H1(
"fh_nof_rings_prim_1hit")->Fill(nRingsPrim1hit);
222 fHM->
H1(
"fh_nof_rings_prim_7hits")->Fill(nRingsPrim7hits);
224 fHM->
H1(
"fh_nof_rings_target_1hit")->Fill(nRingsTarget1hit);
225 fHM->
H1(
"fh_nof_rings_target_7hits")->Fill(nRingsTarget7hits);
230 int nofHits =
fRichHits->GetEntriesFast();
231 fHM->
H1(
"fh_nof_hits_per_event")->Fill(nofHits);
232 map<int, int> digisPerPmtMap;
233 for (
int iH = 0; iH < nofHits; iH++) {
235 if (hit ==
nullptr)
continue;
241 if (richDigi ==
nullptr)
continue;
243 if (pixelData ==
nullptr)
continue;
244 int pmtId = pixelData->
fPmtId;
245 digisPerPmtMap[pmtId]++;
248 for (
auto const& it : digisPerPmtMap) {
249 int pmtId = it.first;
250 int nofDigis = it.second;
252 TVector3 inPos(pmtData->
fX, pmtData->
fY, pmtData->
fZ);
255 if (nofDigis > 10)
fHM->
H2(
"fh_skipped_pmt_xy_10")->Fill(outPos.X(), outPos.Y());
256 if (nofDigis > 20)
fHM->
H2(
"fh_skipped_pmt_xy_20")->Fill(outPos.X(), outPos.Y());
257 if (nofDigis > 30)
fHM->
H2(
"fh_skipped_pmt_xy_30")->Fill(outPos.X(), outPos.Y());
261 for (
int pmtId : allPmtIds) {
262 fHM->
H1(
"fh_nof_hits_per_pmt")->Fill(digisPerPmtMap[pmtId]);
266 for (
int iE = 0; iE < nofEvents; iE++) {
270 fHM->
H1(
"fh_nof_points_per_event")->Fill(nofPoints);
271 for (
int i = 0; i < nofPoints; i++) {
273 if (point ==
nullptr)
continue;
274 fHM->
H1(
"fh_nof_points_per_event_src")->Fill(1);
276 int mcPhotonTrackId = point->GetTrackID();
277 if (mcPhotonTrackId < 0)
continue;
279 if (mcPhotonTrack ==
nullptr)
continue;
281 if (motherPhotonId < 0)
continue;
283 if (mcTrack ==
nullptr)
continue;
289 double dZ = vert.Z();
291 if (motherId == -1 && pdgAbs == 11)
continue;
293 if (motherId != -1) {
296 if (mother !=
nullptr) motherPdg = mother->
GetPdgCode();
297 if (motherId != -1 && pdgAbs == 11 && motherPdg != 22)
fHM->
H1(
"fh_nof_points_per_event_src")->Fill(2);
299 if (motherId != -1 && pdgAbs == 11 && motherPdg == 22) {
301 fHM->
H1(
"fh_nof_points_per_event_src")->Fill(3);
304 fHM->
H1(
"fh_nof_points_per_event_src")->Fill(4);
308 if (pdgAbs == 211)
fHM->
H1(
"fh_nof_points_per_event_src")->Fill(5);
309 if (pdgAbs == 321)
fHM->
H1(
"fh_nof_points_per_event_src")->Fill(6);
310 if (pdgAbs == 13)
fHM->
H1(
"fh_nof_points_per_event_src")->Fill(7);
318 for (
int iE = 0; iE < nofEvents; iE++) {
322 for (
int i = 0; i < nofPoints; i++) {
324 if (point ==
nullptr)
continue;
326 int iMCTrack = point->GetTrackID();
328 if (track ==
nullptr)
continue;
331 if (iMother == -1)
continue;
334 if (track2 ==
nullptr)
continue;
337 TVector3 inPos(point->GetX(), point->GetY(), point->GetZ());
341 fHM->
H2(
"fh_points_xy")->Fill(outPos.X(), outPos.Y());
342 if (motherId != -1) {
345 if (mother !=
nullptr) motherPdg = mother->
GetPdgCode();
348 if (motherId != -1 && pdgAbs == 11 && motherPdg == 22) {
349 if (vert.Z() < 0.1) {
350 fHM->
H2(
"fh_points_xy_gamma_target")->Fill(outPos.X(), outPos.Y());
353 fHM->
H2(
"fh_points_xy_gamma_nontarget")->Fill(outPos.X(), outPos.Y());
357 if (pdgAbs == 211)
fHM->
H2(
"fh_points_xy_pions")->Fill(outPos.X(), outPos.Y());
367 for (
int i = 0; i < nofProj; i++) {
369 if (proj ==
nullptr)
continue;
370 fHM->
H2(
"fh_proj_xy")->Fill(proj->GetX(), proj->GetY());
371 if (proj->GetX() != 0 && proj->GetY() != 0) nofGoodProj++;
373 fHM->
H1(
"fh_nof_proj_per_event")->Fill(nofGoodProj);
379 for (
int iE = 0; iE < nofEvents; iE++) {
384 for (
int i = 0; i < nMcTracks; i++) {
386 CbmLink val(1., i, eventId, fileId);
391 fHM->
H1(
"fh_vertex_z")->Fill(
v.Z());
392 fHM->
H1(
"fh_vertex_z_sts")->Fill(
v.Z());
393 fHM->
H2(
"fh_vertex_xy")->Fill(
v.X(),
v.Y());
394 fHM->
H2(
"fh_vertex_zy")->Fill(
v.Z(),
v.Y());
395 fHM->
H2(
"fh_vertex_zx")->Fill(
v.Z(),
v.X());
396 if (
v.Z() >= 60 &&
v.Z() <= 140)
fHM->
H2(
"fh_vertex_xy_z60_140")->Fill(
v.X(),
v.Y());
397 if (
v.Z() >= 140 &&
v.Z() <= 330)
fHM->
H2(
"fh_vertex_xy_z140_330")->Fill(
v.X(),
v.Y());
398 if (
v.Z() >= 140 &&
v.Z() <= 190)
fHM->
H2(
"fh_vertex_xy_z140_190")->Fill(
v.X(),
v.Y());
401 string name =
"fh_vertex_xy_z" + to_string(pair.first) +
"_" + to_string(pair.second);
402 if (
v.Z() > pair.first &&
v.Z() <= pair.second) {
403 fHM->
H2(name)->Fill(
v.X(),
v.Y());
418 fHM->
CreateCanvas(
"richurqmd_vertex_z",
"richurqmd_vertex_z", 1000, 1000);
424 fHM->
CreateCanvas(
"richurqmd_vertex_z_sts",
"richurqmd_vertex_z_sts", 1000, 1000);
433 TCanvas* c =
fHM->
CreateCanvas(
"richurqmd_vertex_xyz",
"richurqmd_vertex_xyz", 1800, 600);
444 gStyle->SetOptTitle(1);
446 TCanvas* c =
fHM->
CreateCanvas(
"richurqmd_vertex_sts_xyz",
"richurqmd_vertex_sts_xyz", 1600, 1200);
450 string name =
"fh_vertex_xy_z" + to_string(pair.first) +
"_" + to_string(pair.second);
454 DrawTextOnPad(to_string(pair.first) +
" cm < Z < " + to_string(pair.second) +
" cm", 0.3, 0.9, 0.7, 0.98);
457 gStyle->SetOptTitle(0);
460 vector<string> vertexZTypes{
"z60_140",
"z140_330",
"z140_190"};
461 for (
const string& t : vertexZTypes) {
462 string name =
"richurqmd_vertex_xy_" + t;
470 fHM->
CreateCanvas(
"richurqmd_nof_points_per_event_src",
"richurqmd_nof_points_per_event_src", 1000, 1000);
472 string labels[7] = {
"all",
473 "e^{#pm}_{sec} other",
474 "e^{#pm}_{target} from #gamma",
475 "e^{#pm}_{not target} from #gamma",
479 for (
int i = 1; i <= 7; i++) {
480 fHM->
H1(
"fh_nof_points_per_event_src")->GetXaxis()->SetBinLabel(i, labels[i - 1].c_str());
482 fHM->
H1(
"fh_nof_points_per_event_src")->GetXaxis()->SetLabelSize(0.05);
488 vector<string> nofRingsTypes{
"",
"_prim",
"_target"};
489 for (
const string& t : nofRingsTypes) {
490 string cName =
"richurqmd_nof_rings" + t;
491 string h1Name =
"fh_nof_rings" + t +
"_1hit";
492 string h7Name =
"fh_nof_rings" + t +
"_7hits";
496 stringstream ss1, ss2;
497 ss1 <<
"At least 1 hit (" <<
fHM->
H1(h1Name)->GetMean() <<
")";
498 ss2 <<
"At least 7 hits (" <<
fHM->
H1(h7Name)->GetMean() <<
")";
499 DrawH1({
fHM->
H1(h1Name),
fHM->
H1(h7Name)}, {ss1.str(), ss2.str()},
kLinear,
kLinear,
true, 0.4, 0.85, 0.99, 0.99,
505 fHM->
CreateCanvas(
"richurqmd_sources_mom",
"richurqmd_sources_mom", 1000, 1000);
512 stringstream ss1, ss2, ss3, ss4, ss5, ss6;
513 ss1 <<
"e^{#pm}_{target} from #gamma (" <<
fHM->
H1(
"fh_gamma_target_mom")->GetEntries() /
fEventNum <<
")";
514 ss2 <<
"e^{#pm}_{not target} from #gamma (" <<
fHM->
H1(
"fh_gamma_nontarget_mom")->GetEntries() /
fEventNum <<
")";
515 ss3 <<
"e^{#pm}_{sec} other (" <<
fHM->
H1(
"fh_secel_mom")->GetEntries() /
fEventNum <<
")";
516 ss4 <<
"#pi^{#pm} (" <<
fHM->
H1(
"fh_pi_mom")->GetEntries() /
fEventNum <<
")";
517 ss5 <<
"K^{#pm} (" <<
fHM->
H1(
"fh_kaon_mom")->GetEntries() /
fEventNum <<
")";
518 ss6 <<
"#mu^{#pm} (" <<
fHM->
H1(
"fh_mu_mom")->GetEntries() /
fEventNum <<
")";
519 DrawH1(
fHM->
H1Vector({
"fh_gamma_target_mom",
"fh_gamma_nontarget_mom",
"fh_secel_mom",
"fh_pi_mom",
"fh_kaon_mom",
521 {ss1.str(), ss2.str(), ss3.str(), ss4.str(), ss5.str(), ss6.str()},
kLinear,
kLog,
true, 0.5, 0.7, 0.99,
526 TCanvas* c =
fHM->
CreateCanvas(
"richurqmd_hits_xy",
"richurqmd_hits_xy", 1000, 1000);
533 TCanvas* c =
fHM->
CreateCanvas(
"richurqmd_occupancy_xy",
"richurqmd_occupancy_xy", 1000, 1000);
535 clone->GetZaxis()->SetTitle(
"Occupancy:# hits/PMT/ev./64 [%]");
541 vector<string> skippedPmtTypes{
"10",
"20",
"30"};
542 for (
const string& t : skippedPmtTypes) {
543 string name =
"richurqmd_skipped_pmt_xy_" + t;
551 fHM->
CreateCanvas(
"richurqmd_nof_hits_per_pmt",
"richurqmd_nof_hits_per_pmt", 1000, 1000);
554 fHM->
H1(
"fh_nof_hits_per_pmt")->SetStats(
true);
558 vector<string> pointXYTypes{
"",
"_pions",
"_gamma_target",
"_gamma_nontarget"};
559 for (
const string& t : pointXYTypes) {
560 string name =
"richurqmd_points_xy" + t;
568 fHM->
CreateCanvas(
"richurqmd_nof_hits_per_event",
"richurqmd_nof_hits_per_event", 1000, 1000);
571 fHM->
H1(
"fh_nof_hits_per_event")->SetStats(
true);
572 cout <<
"Mean number of hits per event = " <<
fHM->
H1(
"fh_nof_hits_per_event")->GetMean() << endl;
576 fHM->
CreateCanvas(
"richurqmd_nof_points_per_event",
"richurqmd_nof_points_per_event", 1000, 1000);
579 fHM->
H1(
"fh_nof_points_per_event")->SetStats(
true);
580 cout <<
"Mean number of points per event = " <<
fHM->
H1(
"fh_nof_points_per_event")->GetMean() << endl;
584 TCanvas* c =
fHM->
CreateCanvas(
"richurqmd_hitrate_xy",
"richurqmd_hitrate_xy", 1000, 1000);
591 TCanvas* c =
fHM->
CreateCanvas(
"richurqmd_proj_xy",
"richurqmd_proj_xy", 1000, 1000);
597 fHM->
CreateCanvas(
"richurqmd_nof_proj_per_event",
"richurqmd_nof_proj_per_event", 1000, 1000);
600 fHM->
H1(
"fh_nof_proj_per_event")->SetStats(
true);
601 cout <<
"Number of track projections per event = " <<
fHM->
H1(
"fh_nof_proj_per_event")->GetMean() << endl;
607 TDirectory* oldir = gDirectory;
608 TFile* outFile = FairRootManager::Instance()->GetOutFile();
609 if (outFile !=
nullptr) {
610 outFile->mkdir(GetName());
611 outFile->cd(GetName());
618 gDirectory->cd(oldir->GetPath());
ClassImp(CbmConverterManager)
void DrawTextOnPad(const string &text, Double_t x1, Double_t y1, Double_t x2, Double_t y2)
void SetDefaultDrawStyle()
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.
FairTask for matching RECO data to MC.
InitStatus Init()
Initialisation.
const Digi * Get(Int_t index) const
Get a digi object.
static CbmDigiManager * Instance()
Static instance.
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.
std::vector< TH1 * > H1Vector(const std::vector< std::string > &names) const
Return vector of pointers to TH1 histogram.
void Clear(Option_t *="")
Clear memory. Remove all histograms and canvases.
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 Scale(const std::string &histName, Double_t scale)
Scale histogram.
void WriteToFile()
Write all objects to current opened file.
void NormalizeToIntegral(const std::string &histName)
Normalize histogram to integral.
TH2 * H2Clone(const std::string &name) const
Return clone of TH2 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...
TH1 * H1(const std::string &name) const
Return pointer to TH1 histogram.
TObject * Get(const CbmLink *lnk)
Int_t Size(Int_t fileNumber, Int_t eventNumber)
int32_t GetFileIdByIndex(uint32_t index)
File number by index @value File number for event at given index in list.
int32_t GetEventIdByIndex(uint32_t index)
Event number by index @value Event number for event at given index in list.
std::size_t GetNofEvents() const
Number of events in the list @value Number of events.
int32_t GetMotherId() const
int32_t GetPdgCode() const
void GetStartVertex(TVector3 &vertex) const
static std::vector< CbmLink > GetMcTrackMotherIdsForRichHit(CbmDigiManager *digiMan, const CbmRichHit *hit, CbmMCDataArray *richPoints, CbmMCDataArray *mcTracks)
Get CbmLinks of Mother MC Tracks for RICH hit.
int32_t GetNofLinks() const
const CbmLink & GetMatchedLink() const
static CbmRichDigiMapManager & GetInstance()
Return Instance of CbmRichGeoManager.
std::vector< Int_t > GetPmtIds()
Return ids for all pmts.
CbmRichPixelData * GetPixelDataByAddress(Int_t address)
Return CbmRichDataPixel by digi address.
CbmRichPmtData * GetPmtDataById(Int_t id)
Return CbmRichDataPmt by id.
int32_t GetAddress() const
static void DrawPmtH2(TH2 *h, TCanvas *c, Bool_t usePmtBins=false)
void RotatePoint(TVector3 *inPos, TVector3 *outPos, Bool_t noTilting=false)
static CbmRichGeoManager & GetInstance()
int32_t GetNofHits() const
std::vector< std::pair< int, int > > fVertexZStsSlices
TClonesArray * fRichRings
CbmMCDataArray * fRichPoints
virtual void Exec(Option_t *option)
Inherited from FairTask.
void FillRichRingNofHits()
virtual InitStatus Init()
Inherited from FairTask.
void DrawHist()
Draw histograms.
CbmMCEventList * fEventList
CbmRichUrqmdTest()
Standard constructor.
TClonesArray * fRichProjections
void InitHistograms()
Initialize histograms.
virtual void Finish()
Inherited from FairTask.
CbmMCDataArray * fMcTracks
virtual ~CbmRichUrqmdTest()
Standard destructor.
std::map< CbmLink, int > fNofHitsInRingMap
TClonesArray * fRichRingMatches
CbmDigiManager * fDigiMan
static std::vector< double > GetPmtHistYbins()
static std::vector< double > GetPmtHistXbins()
T * GetOrFatal(const std::string &objName, const std::string &description="")
CbmMCDataArray * InitOrFatalMc(const std::string &objName, const std::string &description)