CbmRoot
CbmLitRadLengthQa.cxx
Go to the documentation of this file.
1 
7 #include "CbmLitRadLengthQa.h"
8 #include "CbmDrawHist.h"
9 #include "CbmHistManager.h"
11 #include "CbmTrdAddress.h"
12 #include "CbmUtils.h"
13 #include "FairRadLenPoint.h"
14 #include "FairRootManager.h"
16 
17 #include "TCanvas.h"
18 #include "TClonesArray.h"
19 #include "TGeoManager.h"
20 #include "TH1.h"
21 #include "TProfile2D.h"
22 
23 #include "TRegexp.h"
24 #include <TFile.h>
25 
26 #include "boost/assign/list_of.hpp"
27 #include <boost/algorithm/string.hpp>
28 
29 #include <cstdlib>
30 #include <map>
31 #include <string>
32 
33 using boost::assign::list_of;
34 using Cbm::ToString;
35 using std::atoi;
36 using std::map;
37 using std::pair;
38 using std::string;
39 
40 const Double_t CbmLitRadLengthQa::SILICON_RAD_LENGTH = 9.365; // cm
41 
43  : fHM(NULL), fOutputDir(""), fRadLen(NULL), fDet() {}
44 
46  if (fHM) delete fHM;
47 }
48 
50  fHM = new CbmHistManager();
54  return kSUCCESS;
55 }
56 
57 void CbmLitRadLengthQa::Exec(Option_t* opt) {
58  static Int_t eventNo = 0;
59  eventNo++;
60  if (0 == eventNo % 10000) {
61  std::cout << "-I- CbmLitRadLengthQa::Exec: eventNo=" << eventNo
62  << std::endl;
63  }
64 
65  ExecDetector(".+", "Total");
66  ExecDetector("/cave_1/pipevac1_0/mvdstation.+", "Mvd");
67  ExecDetector("/cave_1/STS.+", "Sts");
68  ExecDetector("/cave_1/rich.+", "Rich");
69  ExecDetector("/cave_1/trd.+", "Trd");
70  ExecDetector("/cave_1/much.+", "Much");
71  ExecDetector("/cave_1/tof.+", "Tof");
77 }
78 
80  fHM->ShrinkEmptyBinsH2ByPattern("hrl_.+_P2");
81  TDirectory* oldir = gDirectory;
82  TFile* outFile = FairRootManager::Instance()->GetOutFile();
83  if (outFile != NULL) {
84  outFile->cd();
85  fHM->WriteToFile();
86  }
87  gDirectory->cd(oldir->GetPath());
88 
90  report->Create(fHM, fOutputDir);
91  delete report;
92  Draw();
94 }
95 
97  FairRootManager* ioman = FairRootManager::Instance();
98  assert(ioman != NULL);
99  fRadLen = (TClonesArray*) ioman->GetObject("RadLen");
100 }
101 
103  const Int_t nofBins = 1000;
104  const Int_t nofBinsX = 1000;
105  const Int_t nofBinsY = 1000;
106  const Int_t nofBinsSiliconThicknessX = 1100;
107  const Int_t nofBinsSiliconThicknessY = 1100;
108  const Double_t minX = -550.1;
109  const Double_t maxX = 549.9;
110  const Double_t minY = -550.1;
111  const Double_t maxY = 549.9;
112  vector<string> detNames =
113  list_of("Total")("Mvd")("Sts")("Rich")("Trd")("Much")("Tof");
114  Int_t nofDetNames = detNames.size();
115  for (Int_t iDet = 0; iDet < nofDetNames; iDet++) {
116  string detName = detNames[iDet];
117  Bool_t createHistograms =
118  detName == "Total"
119  || (detName == "Mvd" && fDet.GetDet(ECbmModuleId::kMvd))
120  || (detName == "Sts" && fDet.GetDet(ECbmModuleId::kSts))
121  || (detName == "Rich" && fDet.GetDet(ECbmModuleId::kRich))
122  || (detName == "Trd" && fDet.GetDet(ECbmModuleId::kTrd))
123  || (detName == "Much" && fDet.GetDet(ECbmModuleId::kMuch))
124  || (detName == "Tof" && fDet.GetDet(ECbmModuleId::kTof));
125  if (!createHistograms)
126  continue; // Create histograms only for the detectors wich are in the setup
127  string rtname = "hrl_RadThickness_" + detName;
128  fHM->Add(
129  rtname + "_H1",
130  new TH1D(string(rtname + "_H1").c_str(),
131  string(rtname + "_H1;Radiation thickness [%];Entries").c_str(),
132  nofBins,
133  0,
134  0));
135  fHM->Add(
136  rtname + "_P2",
137  new TProfile2D(
138  string(rtname + "_P2").c_str(),
139  string(rtname + "_P2;X [cm];Y [cm];Radiation thickness [%]").c_str(),
140  nofBinsX,
141  minX,
142  maxX,
143  nofBinsY,
144  minY,
145  maxY));
146  string tname = "hrl_Thickness_" + detName;
147  fHM->Add(tname + "_H1",
148  new TH1D(string(tname + "_H1").c_str(),
149  string(tname + "_H1;Thickness [cm];Entries").c_str(),
150  nofBins,
151  0,
152  0));
153  fHM->Add(
154  tname + "_P2",
155  new TProfile2D(string(tname + "_P2").c_str(),
156  string(tname + "_P2;X [cm];Y [cm];Thickness [cm]").c_str(),
157  nofBinsX,
158  minX,
159  maxX,
160  nofBinsY,
161  minY,
162  maxY));
163  string tsname = "hrl_ThicknessSilicon_" + detName;
164  fHM->Add(tsname + "_H1",
165  new TH1D(string(tsname + "_H1").c_str(),
166  string(tsname + "_H1;Thickness [cm];Entries").c_str(),
167  nofBins,
168  0,
169  0));
170  fHM->Add(tsname + "_P2",
171  new TProfile2D(
172  string(tsname + "_P2").c_str(),
173  string(tsname + "_P2;X [cm];Y [cm];Thickness [cm]").c_str(),
174  nofBinsSiliconThicknessX,
175  minX,
176  maxX,
177  nofBinsSiliconThicknessY,
178  minY,
179  maxY));
180  }
181 
182  // Additional histograms for each station in tracking detectors
183  vector<string> trackingDetNames =
184  list_of("Mvd")("Sts")("Trd")("Much")("MuchAbsorber");
185  Int_t nofTrackingDetNames = trackingDetNames.size();
186  for (Int_t iDet = 0; iDet < nofTrackingDetNames; iDet++) {
187  string dname = trackingDetNames[iDet];
188  Int_t nofStations =
189  (dname == "Mvd")
191  : (dname == "Sts")
193  : (dname == "Trd")
196  : (dname == "Much")
199  : (dname == "MuchAbsorber")
202  : 0;
203  for (Int_t iStation = 0; iStation < nofStations; iStation++) {
204  string name =
205  "hrl_RadThickness_" + dname + "_" + ToString<Int_t>(iStation) + "_H1";
206  fHM->Add(
207  name,
208  new TH1D(name.c_str(),
209  string(name + ";Radiation thickness [%];Entries").c_str(),
210  nofBins,
211  0,
212  0));
213  name =
214  "hrl_RadThickness_" + dname + "_" + ToString<Int_t>(iStation) + "_P2";
215  fHM->Add(
216  name,
217  new TProfile2D(
218  name.c_str(),
219  string(name + ";X [cm];Y [cm];Radiation thickness [%]").c_str(),
220  nofBinsX,
221  minX,
222  maxX,
223  nofBinsY,
224  minY,
225  maxY));
226  name = "hrl_Thickness_" + dname + "_" + ToString<Int_t>(iStation) + "_H1";
227  fHM->Add(name,
228  new TH1D(name.c_str(),
229  string(name + ";Thickness [cm];Entries").c_str(),
230  nofBins,
231  0,
232  0));
233  name = "hrl_Thickness_" + dname + "_" + ToString<Int_t>(iStation) + "_P2";
234  fHM->Add(
235  name,
236  new TProfile2D(name.c_str(),
237  string(name + ";X [cm];Y [cm];Thickness [cm]").c_str(),
238  nofBinsX,
239  minX,
240  maxX,
241  nofBinsY,
242  minY,
243  maxY));
244  name = "hrl_ThicknessSilicon_" + dname + "_" + ToString<Int_t>(iStation)
245  + "_H1";
246  fHM->Add(name,
247  new TH1D(name.c_str(),
248  string(name + ";Thickness [cm];Entries").c_str(),
249  nofBins,
250  0,
251  0));
252  name = "hrl_ThicknessSilicon_" + dname + "_" + ToString<Int_t>(iStation)
253  + "_P2";
254  fHM->Add(
255  name,
256  new TProfile2D(name.c_str(),
257  string(name + ";X [cm];Y [cm];Thickness [cm]").c_str(),
258  nofBinsSiliconThicknessX,
259  minX,
260  maxX,
261  nofBinsSiliconThicknessY,
262  minY,
263  maxY));
264  }
265  }
266 
267  // Additional histograms for MUCH absorbers
268 
269 
270  std::cout << fHM->ToString();
271 }
272 
273 void CbmLitRadLengthQa::ExecDetector(const string& pathPattern,
274  const string& detName) {
275  if (!(detName == "Total"
276  || (detName == "Mvd" && fDet.GetDet(ECbmModuleId::kMvd))
277  || (detName == "Sts" && fDet.GetDet(ECbmModuleId::kSts))
278  || (detName == "Rich" && fDet.GetDet(ECbmModuleId::kRich))
279  || (detName == "Trd" && fDet.GetDet(ECbmModuleId::kTrd))
280  || (detName == "Much" && fDet.GetDet(ECbmModuleId::kMuch))
281  || (detName == "Tof" && fDet.GetDet(ECbmModuleId::kTof))))
282  return;
283 
284  map<Int_t, Double_t>
285  radThicknessOnTrack; // track ID -> sum of radiation thickness on track
286  map<Int_t, Double_t>
287  thicknessOnTrack; // track ID -> sum of track lengthens on track
288  map<Int_t, Double_t>
289  thicknessSiliconOnTrack; // track ID -> sum of track lengthens on track in silicon equivalent
290 
291  Double_t x, y;
292  Double_t r2max = std::numeric_limits<Double_t>::min();
293  for (Int_t iRL = 0; iRL < fRadLen->GetEntriesFast(); iRL++) {
294  FairRadLenPoint* point = (FairRadLenPoint*) fRadLen->At(iRL);
295 
296  TVector3 pos = point->GetPosition();
297  TVector3 posOut = point->GetPositionOut();
298  TVector3 res = posOut - pos;
299  TVector3 middle = (pos + posOut) * 0.5;
300  //x = middle.X();
301  //y = middle.Y();
302 
303  TGeoNode* nodeOut =
304  gGeoManager->FindNode(posOut.X(), posOut.Y(), posOut.Z());
305  Bool_t isOutside = gGeoManager->IsOutside();
306  TGeoNode* node = gGeoManager->FindNode(middle.X(), middle.Y(), middle.Z());
307  TString path = gGeoManager->GetPath();
308  if (!isOutside && path.Contains(TRegexp(pathPattern.c_str()))) {
309  Double_t r2 = posOut.X() * posOut.X() + posOut.Y() * posOut.Y();
310  if (r2 > r2max) {
311  x = posOut.X();
312  y = posOut.Y();
313  r2max = r2;
314  }
315  const Double_t thickness = res.Mag();
316  const Double_t radThickness = 100 * thickness / point->GetRadLength();
317  const Double_t thicknessSilicon =
318  (SILICON_RAD_LENGTH / point->GetRadLength()) * thickness;
319  radThicknessOnTrack[point->GetTrackID()] += radThickness;
320  thicknessOnTrack[point->GetTrackID()] += thickness;
321  thicknessSiliconOnTrack[point->GetTrackID()] += thicknessSilicon;
322  }
323  }
324 
325  map<Int_t, Double_t>::const_iterator it;
326  for (it = radThicknessOnTrack.begin(); it != radThicknessOnTrack.end();
327  it++) {
328  Double_t rl = (*it).second;
329  fHM->H1("hrl_RadThickness_" + detName + "_H1")->Fill(rl);
330  fHM->P2("hrl_RadThickness_" + detName + "_P2")->Fill(x, y, rl);
331  }
332 
333  for (it = thicknessOnTrack.begin(); it != thicknessOnTrack.end(); it++) {
334  Double_t tl = (*it).second;
335  fHM->H1("hrl_Thickness_" + detName + "_H1")->Fill(tl);
336  fHM->P2("hrl_Thickness_" + detName + "_P2")->Fill(x, y, tl);
337  }
338 
339  for (it = thicknessSiliconOnTrack.begin();
340  it != thicknessSiliconOnTrack.end();
341  it++) {
342  Double_t tl = (*it).second;
343  fHM->H1("hrl_ThicknessSilicon_" + detName + "_H1")->Fill(tl);
344  fHM->P2("hrl_ThicknessSilicon_" + detName + "_P2")->Fill(x, y, tl);
345  }
346 }
347 
348 void CbmLitRadLengthQa::ExecDetector(const string& detName,
349  Int_t (*getStationId)(const TString&)) {
350  if (!((detName == "Mvd" && fDet.GetDet(ECbmModuleId::kMvd))
351  || (detName == "Sts" && fDet.GetDet(ECbmModuleId::kSts))
352  || (detName == "Trd" && fDet.GetDet(ECbmModuleId::kTrd))
353  || (detName == "Much" && fDet.GetDet(ECbmModuleId::kMuch))
354  || (detName == "MuchAbsorber" && fDet.GetDet(ECbmModuleId::kMuch))))
355  return;
356 
357  // track ID -> TRD station ID -> parameter
358  map<Int_t, map<Int_t, Double_t>>
359  radThicknessOnTrack; // track ID -> sum of radiation thickness on track
360  map<Int_t, map<Int_t, Double_t>>
361  thicknessOnTrack; // track ID -> sum of thickness on track
362  map<Int_t, map<Int_t, Double_t>>
363  thicknessSiliconOnTrack; // track ID -> sum of thickness on track
364  map<Int_t, map<Int_t, pair<Double_t, Double_t>>>
365  xyOnTrack; // track ID -> Station ID -> (X,Y) coordinate of exit point
366  // map<Int_t, map<Int_t, Double_t> > r2maxOnTrack; // track ID -> Station ID -> maximum radius
367 
368  // Double_t x, y;
369  // Double_t r2max = std::numeric_limits<Double_t>::min();
370  for (Int_t iRL = 0; iRL < fRadLen->GetEntriesFast(); iRL++) {
371  FairRadLenPoint* point = (FairRadLenPoint*) fRadLen->At(iRL);
372  Int_t trackId = point->GetTrackID();
373  Int_t detId = point->GetDetectorID();
374 
375  TVector3 pos = point->GetPosition();
376  TVector3 posOut = point->GetPositionOut();
377  TVector3 res = posOut - pos;
378  TVector3 middle = (pos + posOut) * 0.5;
379  //x = posOut.X();
380  //y = posOut.Y();
381 
382  TGeoNode* node = gGeoManager->FindNode(middle.X(), middle.Y(), middle.Z());
383  TString path = gGeoManager->GetPath();
384  Int_t stationId = getStationId(path);
385 
386  // Check if node exists in one of the geometry versions
387  if (stationId >= 0) {
388  // Double_t r2 = posOut.X() * posOut.X() + posOut.Y() * posOut.Y();
389  // Double_t& r2max = r2maxOnTrack[trackId][stationId];
390  // if (r2 > r2max) {
391  pair<Double_t, Double_t>& xy = xyOnTrack[trackId][stationId];
392  xy.first = posOut.X();
393  xy.second = posOut.Y();
394  // r2max = r2;
395  // }
396  const Double_t thickness = res.Mag();
397  const Double_t radThickness = 100 * thickness / point->GetRadLength();
398  const Double_t thicknessSilicon =
399  (SILICON_RAD_LENGTH / point->GetRadLength()) * thickness;
400  radThicknessOnTrack[trackId][stationId] += radThickness;
401  thicknessOnTrack[trackId][stationId] += thickness;
402  thicknessSiliconOnTrack[trackId][stationId] += thicknessSilicon;
403  }
404  }
405 
407  radThicknessOnTrack, "hrl_RadThickness_" + detName + "_", xyOnTrack);
409  thicknessOnTrack, "hrl_Thickness_" + detName + "_", xyOnTrack);
410  FillHistosDetector(thicknessSiliconOnTrack,
411  "hrl_ThicknessSilicon_" + detName + "_",
412  xyOnTrack);
413 }
414 
416  const map<Int_t, map<Int_t, Double_t>>& parMap,
417  const string& histName,
418  map<Int_t, map<Int_t, pair<Double_t, Double_t>>>& xyOnTrack) {
419  map<Int_t, map<Int_t, Double_t>>::const_iterator it1;
420  for (it1 = parMap.begin(); it1 != parMap.end(); it1++) {
421  Int_t trackId = (*it1).first;
422  map<Int_t, Double_t>::const_iterator it2;
423  for (it2 = (*it1).second.begin(); it2 != (*it1).second.end(); it2++) {
424  Int_t station = (*it2).first;
425  Double_t param = (*it2).second;
426  string name = histName + ToString<Int_t>(station) + "_H1";
427  fHM->H1(name)->Fill(param);
428  name = histName + ToString<Int_t>(station) + "_P2";
429  const pair<Double_t, Double_t>& xy = xyOnTrack[trackId][station];
430  fHM->P2(name)->Fill(xy.first, xy.second, param);
431  }
432  }
433 }
434 
435 Int_t CbmLitRadLengthQa::GetMvdStationId(const TString& nodePath) {
436  std::cout
437  << "-W- CbmLitRadLengthQa::GetMvdStationId: function not implemented\n";
438  return 0;
439 }
440 
441 Int_t CbmLitRadLengthQa::GetStsStationId(const TString& nodePath) {
442  Int_t station = 0;
443  Bool_t nodeExists = false;
444  if (nodePath.Contains(TRegexp(
445  "/cave_1/STS_v[0-9][0-9][a-z]_0/Station[0-9][0-9]_.+"))) { // sts_v12x
446  station = std::atoi(string((gGeoManager->GetPath() + 26), 2)
447  .c_str()); // 26-27th element is station number
448  nodeExists = true;
449  }
450  return (nodeExists) ? (station - 1) : -1;
451 }
452 
453 Int_t CbmLitRadLengthQa::GetTrdStationId(const TString& nodePath) {
454  Int_t layerId = -1;
455  if (nodePath.Contains(TRegexp(
456  "/cave_1/trd_v13[a-z]_0/layer[0-9][0-9]_[0-9][0-9][0-9][0-9][0-9]/"
457  "module[0-9]_.+"))) { // trd_v13x NEW
458  layerId = std::atoi(string(nodePath.Data() + 24, 2).c_str()) - 1;
459  } else if (nodePath.Contains(TRegexp("/cave_1/trd_v13[a-z]_[0-9][a-z]_0/"
460  "layer[0-9][0-9]_[0-9][0-9][0-9][0-9][0-"
461  "9]/module[0-9]_.+"))) { // trd_v13x NEW
462  layerId = std::atoi(string(nodePath.Data() + 27, 2).c_str()) - 1;
463  }
464  return layerId;
465 }
466 
467 Int_t CbmLitRadLengthQa::GetMuchStationId(const TString& nodePath) {
468  Int_t station = 0;
469  Int_t layer = 0;
470  Bool_t nodeExists = false;
471  if (nodePath.Contains(
472  TRegexp("/cave_1/much_0/muchstation[0-9][0-9]_0/"
473  "muchstation[0-9][0-9]layer[0-9]_0/.+"))) { // much_v11x
474  station = std::atoi(string(gGeoManager->GetPath() + 42, 2)
475  .c_str()); // 42-43th elements are station number
476  layer = std::atoi(string(1, *(gGeoManager->GetPath() + 49))
477  .c_str()); // 49th element is layer number
478  nodeExists = true;
479  }
480  return (nodeExists)
482  ->ConvertMuchToAbsoluteStationNr(station - 1, layer - 1)
483  : -1;
484 }
485 
486 Int_t CbmLitRadLengthQa::GetMuchAbsorberId(const TString& nodePath) {
487  Int_t absorberId = -1;
488  if (nodePath.Contains(
489  TRegexp("/cave_1/much_0/muchabsorber[0-9][0-9]_0"))) { // much_v11x
490  absorberId = std::atoi(string(gGeoManager->GetPath() + 27, 2).c_str())
491  - 1; // 42-43th elements are station number
492  }
493  return absorberId;
494 }
495 
502  SaveDetectorMaterialBudgetToFile("MuchAbsorber");
504 }
505 
507  const string& detName) {
508  string pattern = (detName == "Mvd" || detName == "Sts" || detName == "Trd"
509  || detName == "Much")
510  ? "hrl_ThicknessSilicon_" + detName + "_.+_P2"
511  : "hrl_ThicknessSilicon_" + detName + "_P2";
512  vector<TH1*> histos = fHM->H1Vector(pattern);
513  if (histos.empty()) return;
514  TFile* oldFile = gFile;
515  TDirectory* oldDirectory = gDirectory;
516  TFile* file =
517  new TFile(string(fOutputDir + "/" + boost::algorithm::to_lower_copy(detName)
518  + ".silicon.root")
519  .c_str(),
520  "RECREATE");
521  for (vector<TH1*>::const_iterator it = histos.begin(); it != histos.end();
522  it++) {
523  (*it)->Write();
524  }
525  if (detName == "Much") {
526  vector<TH1*> histos =
527  fHM->H1Vector("hrl_ThicknessSilicon_MuchAbsorber_.+_P2");
528  for (vector<TH1*>::const_iterator it = histos.begin(); it != histos.end();
529  it++) {
530  (*it)->Write();
531  }
532  }
533  file->Close();
534  delete file;
535  gFile = oldFile;
536  gDirectory = oldDirectory;
537 }
CbmLitRadLengthQa::GetMuchAbsorberId
static Int_t GetMuchAbsorberId(const TString &nodePath)
Return MUCH absorber ID by path to the node or -1 in case node does not exists.
Definition: CbmLitRadLengthQa.cxx:486
CbmHistManager::ToString
std::string ToString() const
Return string representation of class.
Definition: core/base/CbmHistManager.cxx:258
CbmHistManager::WriteToFile
void WriteToFile()
Write all histograms to current opened file.
Definition: core/base/CbmHistManager.cxx:103
CbmTrdAddress.h
Helper class to convert unique channel ID back and forth.
CbmHistManager::ShrinkEmptyBinsH2ByPattern
void ShrinkEmptyBinsH2ByPattern(const std::string &pattern)
Shrink empty bins in H2.
Definition: core/base/CbmHistManager.cxx:209
CbmLitRadLengthQa::Exec
virtual void Exec(Option_t *opt)
Derived from FairTask.
Definition: CbmLitRadLengthQa.cxx:57
CbmLitRadLengthQa::ExecDetector
void ExecDetector(const string &pathPattern, const string &detName)
Execute total radiation length for a particular detector.
Definition: CbmLitRadLengthQa.cxx:273
CbmLitRadLengthQa::Init
virtual InitStatus Init()
Derived from FairTask.
Definition: CbmLitRadLengthQa.cxx:49
CbmLitTrackingGeometryConstructor.h
Tracking geometry constructor.
CbmLitTrackingGeometryConstructor::GetNofMvdStations
Int_t GetNofMvdStations()
Return number of stations in MVD.
Definition: CbmLitTrackingGeometryConstructor.cxx:419
CbmLitRadLengthQa::FillHistosDetector
void FillHistosDetector(const map< Int_t, map< Int_t, Double_t >> &parMap, const string &histName, map< Int_t, map< Int_t, pair< Double_t, Double_t >>> &xyOnTrack)
Definition: CbmLitRadLengthQa.cxx:415
CbmLitRadLengthQa::CbmLitRadLengthQa
CbmLitRadLengthQa()
Constructor.
Definition: CbmLitRadLengthQa.cxx:42
ECbmModuleId::kMvd
@ kMvd
Micro-Vertex Detector.
CbmLitTrackingGeometryConstructor::GetNofMuchStations
Int_t GetNofMuchStations()
Return number of stations in MUCH.
Definition: CbmLitTrackingGeometryConstructor.cxx:337
CbmLitRadLengthQa::GetMvdStationId
static Int_t GetMvdStationId(const TString &nodePath)
Return MVD station ID by path to the node or -1 in case node does not exists.
Definition: CbmLitRadLengthQa.cxx:435
CbmLitRadLengthQa::fDet
CbmLitDetectorSetup fDet
Definition: CbmLitRadLengthQa.h:136
ECbmModuleId::kTof
@ kTof
Time-of-flight Detector.
CbmDrawHist.h
Helper functions for drawing 1D and 2D histograms and graphs.
CbmHistManager.h
Histogram manager.
min
friend F32vec4 min(const F32vec4 &a, const F32vec4 &b)
Definition: L1/vectors/P4_F32vec4.h:33
CbmLitTrackingGeometryConstructor::GetNofStsStations
Int_t GetNofStsStations()
Return number of stations in STS.
Definition: CbmLitTrackingGeometryConstructor.cxx:480
CbmHistManager
Histogram manager.
Definition: CbmHistManager.h:41
CbmLitTrackingGeometryConstructor::GetNofTrdStations
Int_t GetNofTrdStations()
Return number of stations in TRD.
Definition: CbmLitTrackingGeometryConstructor.cxx:315
CbmLitRadLengthQa::GetStsStationId
static Int_t GetStsStationId(const TString &nodePath)
Return STS station ID by path to the node or -1 in case node does not exists.
Definition: CbmLitRadLengthQa.cxx:441
CbmLitDetectorSetup::GetDet
bool GetDet(ECbmModuleId detId) const
Return detector presence in setup.
Definition: CbmLitDetectorSetup.cxx:27
CbmSimulationReport::Create
void Create(CbmHistManager *histManager, const std::string &outputDir)
Main function which creates report data.
CbmLitRadLengthQa
Definition: CbmLitRadLengthQa.h:21
CbmLitTrackingGeometryConstructor::ConvertMuchToAbsoluteStationNr
Int_t ConvertMuchToAbsoluteStationNr(Int_t station, Int_t layer)
Definition: CbmLitTrackingGeometryConstructor.cxx:497
CbmLitRadLengthQa::fHM
CbmHistManager * fHM
Definition: CbmLitRadLengthQa.h:130
ECbmModuleId::kRich
@ kRich
Ring-Imaging Cherenkov Detector.
CbmLitRadLengthQa::CreateHistograms
void CreateHistograms()
Create histograms.
Definition: CbmLitRadLengthQa.cxx:102
ClassImp
ClassImp(CbmLitRadLengthQa)
CbmHistManager::H1
TH1 * H1(const std::string &name) const
Return pointer to TH1 histogram.
Definition: CbmHistManager.h:170
CbmLitTrackingGeometryConstructor::GetNofMuchAbsorbers
Int_t GetNofMuchAbsorbers()
Return number of MUCH absorbers.
Definition: CbmLitTrackingGeometryConstructor.cxx:384
CbmLitRadLengthQa::~CbmLitRadLengthQa
virtual ~CbmLitRadLengthQa()
Destructor.
Definition: CbmLitRadLengthQa.cxx:45
CbmUtils.h
ECbmModuleId::kTrd
@ kTrd
Transition Radiation Detector.
CbmLitRadLengthQa::fOutputDir
string fOutputDir
Definition: CbmLitRadLengthQa.h:131
CbmHistManager::H1Vector
std::vector< TH1 * > H1Vector(const std::string &pattern) const
Return vector of pointers to TH1 histogram.
Definition: core/base/CbmHistManager.cxx:79
x
Double_t x
Definition: CbmMvdSensorDigiToHitTask.cxx:68
CbmHistManager::P2
TProfile2D * P2(const std::string &name) const
Return pointer to TH2 histogram.
Definition: CbmHistManager.h:283
CbmLitRadLengthQa::ReadDataBranches
void ReadDataBranches()
Read data branches.
Definition: CbmLitRadLengthQa.cxx:96
y
Double_t y
Definition: CbmMvdSensorDigiToHitTask.cxx:68
CbmLitRadLengthQa::SaveMaterialBudgetToFile
void SaveMaterialBudgetToFile()
Save silicon equivalent histograms to a separate files for each detector.
Definition: CbmLitRadLengthQa.cxx:496
pos
TVector3 pos
Definition: CbmMvdSensorDigiToHitTask.cxx:60
CbmSimulationReport
Base class for simulation reports.
Definition: CbmSimulationReport.h:28
ECbmModuleId::kMuch
@ kMuch
Muon detection system.
CbmLitRadLengthQa.h
FairTask for estimation of radiation length in the detector.
CbmLitRadLengthQaReport.h
Create report for radiation length QA.
CbmLitRadLengthQa::GetMuchStationId
static Int_t GetMuchStationId(const TString &nodePath)
Return MUCH station ID by path to the node or -1 in case node does not exists.
Definition: CbmLitRadLengthQa.cxx:467
CbmLitRadLengthQa::SaveDetectorMaterialBudgetToFile
void SaveDetectorMaterialBudgetToFile(const string &detName)
Definition: CbmLitRadLengthQa.cxx:506
CbmLitRadLengthQa::Finish
virtual void Finish()
Derived from FairTask.
Definition: CbmLitRadLengthQa.cxx:79
ECbmModuleId::kSts
@ kSts
Silicon Tracking System.
CbmLitTrackingGeometryConstructor::Instance
static CbmLitTrackingGeometryConstructor * Instance()
Return pointer to singleton object.
Definition: CbmLitTrackingGeometryConstructor.cxx:55
CbmLitRadLengthQa::SILICON_RAD_LENGTH
static const Double_t SILICON_RAD_LENGTH
Definition: CbmLitRadLengthQa.h:128
Cbm::ToString
std::string ToString(const T &value)
Definition: CbmUtils.h:16
CbmLitRadLengthQa::fRadLen
TClonesArray * fRadLen
Definition: CbmLitRadLengthQa.h:134
CbmLitRadLengthQa::GetTrdStationId
static Int_t GetTrdStationId(const TString &nodePath)
Return TRD station ID by path to the node or -1 in case node does not exists.
Definition: CbmLitRadLengthQa.cxx:453
CbmLitRadLengthQaReport
Create report for radiation length QA.
Definition: CbmLitRadLengthQaReport.h:23
CbmLitDetectorSetup::DetermineSetup
void DetermineSetup()
Determines detector presence using TGeoManager.
Definition: CbmLitDetectorSetup.cxx:79
CbmHistManager::Add
void Add(const std::string &name, TNamed *object)
Add new named object to manager.
Definition: CbmHistManager.h:58