CbmRoot
Loading...
Searching...
No Matches
CbmDigitization.cxx
Go to the documentation of this file.
1/* Copyright (C) 2018-2021 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Volker Friese [committer], Florian Uhlig */
4
10#include "CbmDigitization.h"
11
12#include "CbmBmonDigitize.h"
14#include "CbmFsdDigitize.h"
15#include "CbmMuchDigitizeGem.h"
16#include "CbmMvdDigitizer.h"
18#include "CbmRichDigitizer.h"
19#include "CbmRunAna.h"
20#include "CbmSetup.h"
21#include "CbmStsDigitize.h"
22#include "CbmTofDigitize.h"
23#include "CbmTrdDigitizer.h"
24
25#include <FairFileSource.h>
26#include <FairMCEventHeader.h>
27#include <FairMonitor.h>
28#include <FairParAsciiFileIo.h>
29#include <FairParRootFileIo.h>
30#include <FairRootFileSink.h>
31#include <FairRuntimeDb.h>
32#include <Logger.h>
33
34#include <TClonesArray.h>
35#include <TGeoManager.h>
36#include <TObjString.h>
37#include <TROOT.h>
38
39#include <cassert>
40
41using cbm::sim::Mode;
43
44
45// ----- Constructor ----------------------------------------------------
46CbmDigitization::CbmDigitization() : TNamed("CbmDigitization", "Digitisation Run") { SetDefaultBranches(); }
47// --------------------------------------------------------------------------
48
49
50// ----- Destructor -----------------------------------------------------
52{
53 LOG(debug) << "Destructing " << fName;
54 for (auto it = fDigitizers.begin(); it != fDigitizers.end(); it++) {
55 if (it->second) delete it->second;
56 } //# CbmDigitizeInfos
57 // CbmDaq and the digitizers are destructed by FairRun.
58}
59// --------------------------------------------------------------------------
60
61
62// ----- Add an input file ----------------------------------------------
63void CbmDigitization::AddInput(UInt_t inputId, TString fileName, TimeDist dist, Double_t eventRate, ECbmTreeAccess mode)
64{
65 if (gSystem->AccessPathName(fileName)) LOG(fatal) << fName << ": input file " << fileName << " does not exist!";
66 if (mode != ECbmTreeAccess::kRegular)
67 LOG(fatal) << fName << ": access modes other than kRegular are not yet supported!";
68 TChain* chain = new TChain("cbmsim");
69 chain->Add(fileName.Data());
70 fSource->AddInput(inputId, chain, dist, eventRate, mode);
71}
72// --------------------------------------------------------------------------
73
74
75// ----- Add an ASCII parameter file ------------------------------------
77{
78 if (gSystem->AccessPathName(fileName.Data())) {
79 LOG(error) << fName << ": Parameter file " << fileName << " does not exist!";
80 return kFALSE;
81 }
82 fParAsciiFiles.Add(new TObjString(fileName.Data()));
83 LOG(info) << fName << ": Adding parameter file " << fileName;
84 return kTRUE;
85}
86// --------------------------------------------------------------------------
87
88
89// ----- Check input file -----------------------------------------------
91{
92
93 // --- Check presence of input data branch for the digitizers.
94 // --- If the branch is not found, the digitizer will not be instantiated.
95 Int_t nBranches = 0;
96 for (auto const& entry : fDigitizers) {
97 auto setIt = fSource->GetBranchList().find(entry.second->GetBranchName());
98 if (setIt != fSource->GetBranchList().end()) {
99 LOG(info) << fName << ": Found branch " << entry.second->GetBranchName() << " for system "
100 << CbmModuleList::GetModuleNameCaps(entry.first);
101 entry.second->SetPresent();
102 nBranches++;
103 } //? Branch required by digitizer is present in branch list
104 }
105
106 // Now we have to do some gymnastics to get the run ID, which is needed
107 // to determine the geometry tags, which in turn are needed to register
108 // the proper ASCII parameter files. This is rather nasty; the parameter
109 // handling is really a pain in the neck.
110 CbmMCInput* input = fSource->GetFirstInput();
111 assert(input);
112 TFile* file = input->GetChain()->GetFile();
113 assert(file);
114 TTree* tree = file->Get<TTree>("cbmsim");
115 assert(tree);
116 FairMCEventHeader* header = new FairMCEventHeader();
117 tree->SetBranchAddress("MCEventHeader.", &header);
118 tree->GetEntry(0);
119 fRun = header->GetRunID();
120 LOG(info) << fName << ": Run id is " << fRun;
121
122 return nBranches;
123}
124// --------------------------------------------------------------------------
125
126
127// ----- Create the digitisers ------------------------------------------
129{
130 std::cout << "Create default digitisers" << std::endl;
131
132 std::stringstream ss;
133
134 ss << fName << ": Create default digitisers: ";
135 Int_t nDigis = 0;
136 for (auto it = fDigitizers.begin(); it != fDigitizers.end(); it++) {
137
138 // --- Skip if marked inactive
139 if (!it->second->IsActive()) continue;
140
141 // --- Skip if MC data branch is not present. Exception: BMON does not need an input branch.
142 if (it->first != ECbmModuleId::kBmon && !it->second->IsPresent()) continue;
143
144 // --- Skip if a digitizer was set explicitly
145 if (it->second->GetDigitizer() != nullptr) continue;
146
147 /*
148 // --- Skip MVD for time-based mode
149 if (it->first == ECbmModuleId::kMvd && fMode == Mode::Timebased) {
150 LOG(info) << "MVD digitizer is not available "
151 << "in time-based mode. ";
152 continue;
153 }
154*/
155 LOG(info) << "system " << it->first;
156
157 ECbmModuleId system = it->first;
158 switch (system) {
160 fDigitizers[system]->SetDigitizer(new CbmMvdDigitizer());
161 ss << "MVD ";
162 nDigis++;
163 break;
165 fDigitizers[system]->SetDigitizer(new CbmStsDigitize());
166 ss << "STS ";
167 nDigis++;
168 break;
170 fDigitizers[system]->SetDigitizer(new CbmRichDigitizer());
171 ss << "RICH ";
172 nDigis++;
173 break;
175 fDigitizers[system]->SetDigitizer(new CbmMuchDigitizeGem());
176 ss << "MUCH ";
177 nDigis++;
178 break;
180 fDigitizers[system]->SetDigitizer(new CbmTrdDigitizer());
181 ss << "TRD ";
182 nDigis++;
183 break;
185 fDigitizers[system]->SetDigitizer(new CbmTofDigitize());
186 ss << "TOF ";
187 nDigis++;
188 break;
190 fDigitizers[system]->SetDigitizer(new CbmFsdDigitize());
191 ss << "FSD ";
192 nDigis++;
193 break;
195 fDigitizers[system]->SetDigitizer(new CbmPsdSimpleDigitizer());
196 ss << "PSD ";
197 nDigis++;
198 break;
200 fDigitizers[system]->SetDigitizer(new CbmBmonDigitize());
201 ss << "BMON ";
202 nDigis++;
203 break;
204 default: LOG(fatal) << fName << ": Unknown system " << system; break;
205 } //? system
206 } //# present systems
207 LOG(info) << ss.str();
208
209 return nDigis;
210}
211// --------------------------------------------------------------------------
212
213
214// ----- Deactivate a system --------------------------------------------
216{
217 if (fDigitizers.find(system) != fDigitizers.end()) fDigitizers[system]->SetActive(kFALSE);
218}
219// --------------------------------------------------------------------------
220
221
222// ----- Deactivate all systems except one ------------------------------
224{
225 for (auto& entry : fDigitizers)
226 entry.second->SetActive(kFALSE);
227 if (fDigitizers.find(system) != fDigitizers.end()) fDigitizers[system]->SetActive(kTRUE);
228}
229// --------------------------------------------------------------------------
230
231
232// ----- Embed an input file --------------------------------------------
233void CbmDigitization::EmbedInput(UInt_t inputId, TString fileName, UInt_t targetInputId, ECbmTreeAccess mode)
234{
235 if (gSystem->AccessPathName(fileName)) LOG(fatal) << fName << ": input file " << fileName << " does not exist!";
236 TChain* chain = new TChain("cbmsim");
237 chain->Add(fileName.Data());
238 fSource->EmbedInput(inputId, chain, targetInputId, mode);
239}
240// --------------------------------------------------------------------------
241
242
243// ----- Get a system geometry tag --------------------------------------
244TString CbmDigitization::GetGeoTag(ECbmModuleId system, TGeoManager* geo)
245{
246
247 assert(geo);
248 TString geoTag;
249 TString sysName = CbmModuleList::GetModuleName(system);
250 Int_t sysLength = sysName.Length() + 1;
251 gGeoManager->CdTop();
252 TGeoNode* cave = gGeoManager->GetCurrentNode(); // cave
253 for (Int_t iNode = 0; iNode < cave->GetNdaughters(); iNode++) {
254 TString volName = cave->GetDaughter(iNode)->GetVolume()->GetName();
255 if (volName.Contains(sysName.Data(), TString::kIgnoreCase)) {
256 geoTag = TString(volName(sysLength, volName.Length() - sysLength));
257 break;
258 } //? node is MUCH
259 } //# top level nodes
260
261 return geoTag;
262}
263// --------------------------------------------------------------------------
264
265
266// ----- Get a system geometry tag --------------------------------------
268{
269
270 // --- Run this method only once!
271 if (fIsInit) return;
272
273 std::cout << std::endl << std::endl;
274 LOG(info) << "===================================================";
275 LOG(info) << "========== Initialize with default values =========";
276 // --- Look for input branches
277 Int_t nBranches = CheckInput();
278 TString word = (nBranches == 1 ? "branch" : "branches");
279 LOG(info) << fName << ": " << nBranches << " input " << word << " found";
280
281
282 // --- Create default digitizers
283 Int_t nDigis = CreateDefaultDigitizers();
284 word = (nDigis == 1 ? " digitiser" : " digitisers");
285 LOG(info) << fName << ": " << nDigis << word << " instantiated.";
286
287
288 // --- Extract needed information from runtime database
289 FairRuntimeDb* rtdb = FairRuntimeDb::instance();
290 FairParRootFileIo* parIoRoot = new FairParRootFileIo();
291 parIoRoot->open(fParRootFile.Data(), "READ");
292 rtdb->setFirstInput(parIoRoot);
293
294
295 // --- Get geometry from runtime database
296 rtdb->getContainer("FairGeoParSet");
297 rtdb->initContainers(fRun);
298
299 // --- Add default parameter files for TRD and TOF
300 TString tofGeo = GetGeoTag(ECbmModuleId::kTof, gGeoManager);
301 TString trdGeo = GetGeoTag(ECbmModuleId::kTrd, gGeoManager);
302 TString fsdGeo = GetGeoTag(ECbmModuleId::kFsd, gGeoManager);
303 TString srcDir = gSystem->Getenv("VMCWORKDIR"); // top source directory
304 TString parFile;
305 if (trdGeo.Length() > 0) {
306 parFile = srcDir + "/parameters/trd/trd_" + trdGeo + ".asic.par";
307 AddParameterAsciiFile(parFile);
308 parFile = srcDir + "/parameters/trd/trd_" + trdGeo + ".digi.par";
309 AddParameterAsciiFile(parFile);
310 parFile = srcDir + "/parameters/trd/trd_" + trdGeo + ".gain.par";
311 AddParameterAsciiFile(parFile);
312 parFile = srcDir + "/parameters/trd/trd_" + trdGeo + ".gas.par";
313 AddParameterAsciiFile(parFile);
314 }
315 if (tofGeo.Length() > 0) {
316 parFile = srcDir + "/parameters/tof/tof_" + tofGeo + ".digibdf.par";
317 AddParameterAsciiFile(parFile);
318 }
319 if (fsdGeo.Length() > 0) {
320 parFile = srcDir + "/parameters/fsd/fsd_" + fsdGeo + ".digi.par";
321 AddParameterAsciiFile(parFile);
322 }
323
324 delete rtdb;
325 delete parIoRoot;
326
327
328 // --- Delete TGeoManager (will be initialised again from FairRunAna)
329 if (gROOT->GetVersionInt() >= 60602) {
330 gGeoManager->GetListOfVolumes()->Delete();
331 gGeoManager->GetListOfShapes()->Delete();
332 delete gGeoManager;
333 } //? ROOT version
334
335
336 std::cout << std::endl << std::endl;
337 LOG(info) << "===================================================";
338
339 fIsInit = kTRUE;
340}
341// --------------------------------------------------------------------------
342
343
344// ----- Execute digitisation run ---------------------------------------
345void CbmDigitization::Run(Int_t event1, Int_t event2)
346{
347
348 // --- Run info
349 std::cout << std::endl << std::endl;
350 LOG(info) << "===================================================";
351
352 DefaultInit();
353
354 // --- Create CbmRunAna
355 std::cout << std::endl;
356 CbmRunAna* run = new CbmRunAna();
357 run->SetAsync();
358 run->SetGenerateRunInfo(fGenerateRunInfo);
359 if (fGenerateRunInfo) LOG(info) << fName << ": Run info will be generated.";
360
361 // --- Create DAQ
362 if (fMode == Mode::EventByEvent)
363 fDaq = new CbmDaq(kTRUE);
364 else
366
367
368 // --- Register source
370 run->SetSource(fSource);
371
372
373 // --- Create file sink using output file name
374 // TODO: remove release after switching to FairRoot v18.8
375 //run->SetSink(std::make_unique<FairRootFileSink>(fOutFile));
376 run->SetSink(std::make_unique<FairRootFileSink>(fOutFile).release());
377 LOG(info) << fName << ": Output file is " << fOutFile;
378
379
380 // --- Set monitoring, if chosen
381 if (!fMoniFile.IsNull()) {
382 FairMonitor::GetMonitor()->EnableMonitor(kTRUE, fMoniFile);
383 LOG(info) << fName << ": Monitor is enabled; monitor file is " << fMoniFile;
384 }
385
386
387 // --- Register digitisers
388 for (auto it = fDigitizers.begin(); it != fDigitizers.end(); it++) {
389 CbmDigitizeBase* digitizer = it->second->GetDigitizer();
390 if (it->second->IsActive() && digitizer != nullptr) {
391 fDaq->SetDigitizer(it->first, digitizer);
392 if (fMode == Mode::EventByEvent) digitizer->SetEventMode();
393 digitizer->SetProduceNoise(fProduceNoise);
395 digitizer->SetRunStartTime(fSource->GetStartTime());
396 fDaq->SetLatency(digitizer->GetLatency());
397 run->AddTask(digitizer);
398 LOG(info) << fName << ": Added task " << digitizer->GetName();
399 } //? active and digitizer instance present
400 } //# digitizers
401
402
403 // --- In event-by-event mode: also empty events (time-slices) are stored
404 if (fMode == Mode::EventByEvent) StoreAllTimeSlices();
405
406
407 // --- Register DAQ
408 run->AddTask(fDaq);
409
410
411 // --- Set runtime database
412 LOG(info) << fName << ": Setting runtime DB ";
413 LOG(info) << fName << ": ROOT I/O is " << fParRootFile;
414 FairRuntimeDb* rtdb = run->GetRuntimeDb();
415 FairParRootFileIo* parIoRoot = new FairParRootFileIo();
416 parIoRoot->open(fParRootFile.Data(), "UPDATE");
417 if (fParAsciiFiles.IsEmpty()) {
418 LOG(info) << fName << ": No ASCII input to parameter database";
419 rtdb->setFirstInput(parIoRoot);
420 } //? ASCII parameter file list empty
421 else {
422 FairParAsciiFileIo* parIoAscii = new FairParAsciiFileIo();
423 parIoAscii->open(&fParAsciiFiles, "in");
424 rtdb->setFirstInput(parIoAscii);
425 rtdb->setSecondInput(parIoRoot);
426 } //? ASCII parameter file list not empty
427 LOG(info) << "===================================================";
428
429
430 // --- Initialise run
431 std::cout << std::endl << std::endl;
432 LOG(info) << "===================================================";
433 LOG(info) << fName << ": Initialising run...";
434 run->Init();
435 rtdb->setOutput(parIoRoot);
436 rtdb->saveOutput();
437 LOG(info) << fName << ": Initialising run...finished";
438 LOG(info) << "===================================================";
439
440
441 // --- Run digitisation
442 std::cout << std::endl << std::endl << std::endl;
443 LOG(info) << "===================================================";
444 LOG(info) << fName << ": Starting run...";
445 if (event2 < 0) {
446 if (event1 >= 0)
447 run->Run(0, event1 - 1); // Run event1 events
448 else
449 run->Run(); // Run all events in input
450 }
451 else {
452 if (event1 < 0) event1 = 0;
453 if (event1 <= event2)
454 run->Run(event1, event2); // Run from event1 to event2
455 else
456 run->Run(event1, event1); // Run only event1
457 }
458 std::cout << std::endl;
459 LOG(info) << fName << ": Run finished.";
460 LOG(info) << fName << ": Output file is " << fOutFile;
461 LOG(info) << fName << ": Parameter file is " << fParRootFile;
462 if (!fMoniFile.IsNull()) LOG(info) << fName << ": Monitor file is " << fMoniFile;
463
464 LOG(info) << "===================================================";
465
466
467 // --- Resource monitoring
468 std::cout << std::endl << std::endl;
469 LOG(info) << fName << ": CPU consumption";
470 if (!fMoniFile.IsNull()) FairMonitor::GetMonitor()->Print();
471 std::cout << std::endl;
472
473
474 // --- Clean up
475 // TODO: I confess I do not know why the TGeoManager has to be deleted here.
476 // As far as I can see, the same code is called from ~FairRunaAna().
477 // But if I do not do it, I get an error like
478 // root.exe(11905,0x7fff7d1a1300) malloc: *** error for object 0x7f811d201860:
479 // pointer being freed was not allocated
480 if (gGeoManager) {
481 if (gROOT->GetVersionInt() >= 60602) {
482 gGeoManager->GetListOfVolumes()->Delete();
483 gGeoManager->GetListOfShapes()->Delete();
484 }
485 delete gGeoManager;
486 }
487
488 TList* badlist = gROOT->GetListOfBrowsables();
489 badlist->Remove(badlist->FindObject("FairTaskList"));
490 delete run;
491}
492// --------------------------------------------------------------------------
493
494
495// ----- Set default info -----------------------------------------------
508// --------------------------------------------------------------------------
509
510
511// ----- Set digitizer explicitly ---------------------------------------
512void CbmDigitization::SetDigitizer(ECbmModuleId system, CbmDigitizeBase* digitizer, TString branch, Bool_t persistent)
513{
514
515 // Digitizer already present: replace
516 if (fDigitizers.find(system) != fDigitizers.end()) {
517 CbmDigitizeBase* oldDigitizer = fDigitizers[system]->GetDigitizer();
518 if (oldDigitizer != nullptr) {
519 LOG(warn) << fName << ": replacing " << oldDigitizer->GetName() << " by " << digitizer->GetName();
520 delete oldDigitizer;
521 }
522 if (!branch.IsNull()) fDigitizers[system]->SetBranchName(branch);
523 fDigitizers[system]->SetDigitizer(digitizer);
524 fDigitizers[system]->SetActive();
525 fDigitizers[system]->SetPersistent(persistent);
526 } //? digitizer present
527
528 // Digitizer not yet present: add
529 else
530 fDigitizers[system] = new CbmDigitizeInfo(system, branch, digitizer, kFALSE, kTRUE, persistent);
531}
532// --------------------------------------------------------------------------
533
534
535// ----- Set the output file --------------------------------------------
536void CbmDigitization::SetOutputFile(TString path, Bool_t overwrite)
537{
538
539 // --- Protect against overwriting an existing file
540 if ((!gSystem->AccessPathName(path.Data())) && (!overwrite)) {
541 LOG(fatal) << fName << ": output file " << path << " already exists!";
542 return;
543 }
544
545 // --- If the directory does not yet exist, create it
546 const char* directory = gSystem->DirName(path.Data());
547 if (gSystem->AccessPathName(directory)) {
548 Int_t success = gSystem->mkdir(directory, kTRUE);
549 if (success == -1)
550 LOG(fatal) << fName << ": output directory " << directory << " does not exist and cannot be created!";
551 else
552 LOG(info) << fName << ": created directory " << directory;
553 }
554
555 fOutFile = path;
556}
557// --------------------------------------------------------------------------
558
559
560// ----- Set the ROOT parameter file -----------------------------------
562{
563 if (gSystem->AccessPathName(fileName)) LOG(fatal) << fName << ": parameter file " << fileName << " does not exist!";
564 fParRootFile = fileName;
565}
566// --------------------------------------------------------------------------
567
568
569// ----- Get digitizer pointer if existing ------------------------------
571{
572
573 // Digitizer already present: return it
574 if (fDigitizers.find(system) != fDigitizers.end()) {
575 return fDigitizers[system]->GetDigitizer();
576 } //? digitizer present
577 // Digitizer not present: return nullptr
578 else
579 return nullptr;
580}
581// --------------------------------------------------------------------------
582
583
ECbmTreeAccess
Mode to read entries from a ROOT TTree.
Definition CbmDefs.h:152
ECbmModuleId
Definition CbmDefs.h:39
@ kMvd
Micro-Vertex Detector.
@ kTrd
Transition Radiation Detector.
@ kTof
Time-of-flight Detector.
@ kPsd
Projectile spectator detector.
@ kSts
Silicon Tracking System.
@ kMuch
Muon detection system.
@ kFsd
Forward spectator detector.
@ kRich
Ring-Imaging Cherenkov Detector.
ClassImp(CbmDigitization)
Class for producing RICH digis from from MCPoints.
TRD digitizer. Updated 24/04/2013 by Andrey Lebedev andrey.lebedev@gsi.de Updated 4/06/2018 by Alex B...
Task class for simulating the detector response of the t-zero detector.
CBM task class for filling digis into time slices.
Definition CbmDaq.h:44
void SetLatency(Double_t time)
Set the DAQ buffer latency.
Definition CbmDaq.cxx:512
void SetDigitizer(ECbmModuleId system, CbmDigitizeBase *digitizer)
Set the digitizer for a given system.
Definition CbmDaq.cxx:481
CbmMCInput * GetFirstInput()
First input from the first input set @value Pointer to first input.
const std::set< TString > & GetBranchList() const
List of branch names @value Reference to set of branch names.
Double_t GetStartTime()
Run start time.
void AddInput(UInt_t inputId, TChain *chain, cbm::sim::TimeDist dist, Double_t rate, ECbmTreeAccess mode=ECbmTreeAccess::kRegular)
Add a transport input.
void EmbedInput(UInt_t inputId, TChain *chain, UInt_t targetInputId, ECbmTreeAccess mode=ECbmTreeAccess::kRegular)
Embed a transport input.
void SetMode(cbm::sim::Mode mode)
Set event-by-event mode @value choice kTRUE if event-by-event mode.
void EmbedInput(UInt_t inputId, TString fileName, UInt_t targetInputId, ECbmTreeAccess mode=ECbmTreeAccess::kRegular)
Embed an input file into another one.
Int_t CheckInput()
Check the presence of input branches.
void SetParameterRootFile(TString fileName)
Set the parameter file name.
void DefaultInit()
Initialize the branches, digitizers and parameter files With default values.
void DeactivateAllBut(ECbmModuleId system)
Deactivate all systems except the specified one.
CbmDigitization()
Constructor.
Int_t CreateDefaultDigitizers()
Instantiate the default digitisers for the active systems.
TString fMoniFile
Resource monitoring information.
void Run()
Process all events from input.
void SetDigitizer(ECbmModuleId system, CbmDigitizeBase *digitizer, TString branch="", Bool_t persistent=kTRUE)
Set a digitizer explicitly.
void SetOutputFile(TString fileName, Bool_t overwrite=kFALSE)
Set the output file name.
CbmDigitizeBase * GetDigitizer(ECbmModuleId system)
Get the pointer on a given digitizer if existing.
std::map< ECbmModuleId, CbmDigitizeInfo * > fDigitizers
Bool_t AddParameterAsciiFile(TString fileName)
Add an ASCII parameter file.
TString fOutFile
Output data (digis)
TList fParAsciiFiles
ASCII parameter files.
void StoreAllTimeSlices(Bool_t choice=kTRUE)
Store all time-slices.
void Deactivate(ECbmModuleId system)
Deactivate a system for digitisation.
cbm::sim::Mode fMode
CbmDigitizationSource * fSource
Input source.
virtual ~CbmDigitization()
Destructor
TString GetGeoTag(ECbmModuleId system, TGeoManager *geo)
Get the geometry tag of a system from a TGeoManager.
Double_t fTimeSliceLength
TString fParRootFile
ROOT parameter file.
void SetDefaultBranches()
Default settings for digitizers.
void AddInput(UInt_t inputId, TString fileName, cbm::sim::TimeDist dist=cbm::sim::TimeDist::Poisson, Double_t eventRate=0., ECbmTreeAccess mode=ECbmTreeAccess::kRegular)
Add an input file.
Abstract base class for CBM digitisation tasks.
void SetRunStartTime(Double_t time)
Set the run start time.
virtual Double_t GetLatency() const =0
Detector system ID.
void SetCreateMatches(Bool_t choice=kTRUE)
Set creation of links to MC.
void SetProduceNoise(Bool_t choice=kTRUE)
Set production of inter-event noise.
void SetEventMode(Bool_t choice=kTRUE)
Set event-by-event mode.
Auxiliary class for CbmDigitize.
Class for the digitization of the CBM-FSD.
An MC (transport) input to digitisation in CBM.
Definition CbmMCInput.h:33
TChain * GetChain() const
Pointer to chain @value Pointer to TChain object.
Definition CbmMCInput.h:60
static TString GetModuleName(ECbmModuleId moduleId)
static TString GetModuleNameCaps(ECbmModuleId moduleId)
Class for producing RICH digis from from MCPoints.
void SetAsync(Bool_t async=kTRUE)
Definition CbmRunAna.h:39
Task class for simulating the detector response of the STS.
CBM ToF digitizer using beam data distributions as hit/cluster models.
TimeDist
Definition Defs.h:29