CbmRoot
Loading...
Searching...
No Matches
CbmMvdDigitizer.cxx
Go to the documentation of this file.
1/* Copyright (C) 2014-2020 Institut fuer Kernphysik, Goethe-Universitaet Frankfurt, Frankfurt
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Philipp Sitzmann [committer], Florian Uhlig, Volker Friese */
4
5// -------------------------------------------------------------------------
6// ----- CbmMvdDigitizer source file -----
7// -------------------------------------------------------------------------
8#include "CbmMvdDigitizer.h"
9
10#include "CbmMatch.h" // for CbmMatch
11#include "CbmMvdDetector.h" // for CbmMvdDetector
12#include "CbmMvdDigi.h" // for CbmMvdDigi
13#include "CbmMvdPileupManager.h" // for CbmMvdPileupManager
14#include "CbmMvdPoint.h" // for CbmMvdPoint
15#include "CbmMvdSensor.h" // for CbmMvdSensor
16#include "CbmMvdSensorDigitizerTask.h" // for CbmMvdSensorDigitizerTask
17
18#include <FairRootManager.h> // for FairRootManager
19#include <Logger.h> // for Logger, LOG
20
21#include <TCanvas.h> // for TCanvas
22#include <TClonesArray.h> // for TClonesArray
23#include <TFile.h> // for TFile
24#include <TH1.h> // for TH1, base class used for general histograms
25#include <TObjArray.h> // fir TObjArray
26#include <TObject.h> // for TObject
27#include <TRandom.h> // for TRandom
28#include <TRandom3.h> // for gRandom
29#include <TStopwatch.h> // for TStopwatch
30#include <TString.h> // for TString
31
32#include <cassert> // for assert
33#include <iomanip> // for setprecision, setw, __iom_t5
34#include <iostream> // for operator<<, basic_ostream, endl
35#include <map> // for __map_iterator, map, operator!=
36#include <string> // for allocator, char_traits
37#include <vector> // for vector
38
39using std::endl;
40using std::vector;
41
42// ----- Default constructor ------------------------------------------
44 : CbmDigitize<CbmMvdDigi>("MvdDigitize")
45 , fMode(0)
46 , fShowDebugHistos(kFALSE)
47 , fNoiseSensors(kFALSE)
48 , fDetector(nullptr)
49 , fInputPoints(nullptr)
50 , fMcPileUp(nullptr)
51 , fTmpMatch(nullptr)
52 , fTmpDigi(nullptr)
53 , fDigiVect()
54 , fMatchVect()
55 , fPerformanceDigi()
56 , fDigiPluginNr(0)
57 , fFakeRate(-1.)
58 , fNPileup(-1)
59 , fNDeltaElect(-1)
60 , fDeltaBufferSize(-1)
61 , fBgBufferSize(-1)
62 , epsilon()
63 , fInputBranchName("")
64 , fBgFileName("")
65 , fDeltaFileName("")
66 , fHistoFileName("./CbmMvdDigitizer_defaultHistoFile.root")
67 , fTimer()
68 , fPileupManager(nullptr)
69 , fDeltaManager(nullptr)
70
71{
72 fTmpDigi = new TClonesArray("CbmMvdDigi", 1000);
73 fTmpMatch = new TClonesArray("CbmMatch", 1000);
74 fHistoArray = 0;
75}
76// -------------------------------------------------------------------------
77
78// ----- Standard constructor ------------------------------------------
79CbmMvdDigitizer::CbmMvdDigitizer(const char* name, Int_t iMode, Int_t /*iVerbose*/)
80 : CbmDigitize<CbmMvdDigi>(name)
81 , fMode(iMode)
82 , fShowDebugHistos(kFALSE)
83 , fNoiseSensors(kFALSE)
84 , fDetector(nullptr)
85 , fInputPoints(nullptr)
86 , fMcPileUp(nullptr)
87 , fTmpMatch(nullptr)
88 , fTmpDigi(nullptr)
89 , fDigiVect()
90 , fMatchVect()
91 , fPerformanceDigi()
92 , fDigiPluginNr(0)
93 , fFakeRate(-1.)
94 , fNPileup(0)
95 , fNDeltaElect(0)
96 , fDeltaBufferSize(-1)
97 , fBgBufferSize(-1)
98 , epsilon()
99 , fInputBranchName("MvdPoint")
100 , fBgFileName("")
101 , fDeltaFileName("")
102 , fHistoFileName("./CbmMvdDigitizer_defaultHistoFile.root")
103 , fTimer()
104 , fPileupManager(nullptr)
105 , fDeltaManager(nullptr)
106{
107
108 fTmpDigi = new TClonesArray("CbmMvdDigi", 1000);
109 fTmpMatch = new TClonesArray("CbmMatch", 1000);
110 fHistoArray = 0;
111}
112// -------------------------------------------------------------------------
113
114// ----- Destructor ----------------------------------------------------
116{
117
118 if (fMcPileUp) {
119 fMcPileUp->Delete();
120 delete fMcPileUp;
121 }
122 delete fPileupManager;
123 delete fDeltaManager;
124}
125// -----------------------------------------------------------------------------
126
127// ----- Exec --------------------------------------------------------------
128void CbmMvdDigitizer::Exec(Option_t* /*opt*/)
129{
130 // --- Start timer
131 using namespace std;
132
133 fTimer.Start();
134 GetEventInfo(); // event number and time
135 cout << "- I - CbmMvdDigitizer:: Exec : Event time = " << fCurrentEventTime << endl;
136
137 // Add points from BG and Delta files to the array if needed
138 BuildEvent();
139
140
141 Int_t nPoints = fInputPoints->GetEntriesFast();
142 Int_t nDigis = 0;
143 CbmMvdPoint* point = 0;
144 cout << fName << "Debug: 1" << endl;
145
146 if (fInputPoints->GetEntriesFast() > 0) {
147 LOG(debug) << "//----------------------------------------//";
148 LOG(debug) << fName << ": Send Input";
149
150
151 Int_t nTargetPlugin = DetectPlugin(100);
152
153 // Distribute the points from the input array to the sensors
154
155
156 for (Int_t i = 0; i < nPoints; i++) {
157 point = (CbmMvdPoint*) fInputPoints->At(i);
158
159 fDetector->SendInputToSensorPlugin(point->GetDetectorID(), nTargetPlugin, static_cast<TObject*>(point));
160 }
161
162 cout << fName << "Debug: 2" << endl;
163
164 // Execute the plugged digitizer plugin for all sensors
165 LOG(debug) << fName << ": Execute DigitizerPlugin Nr. " << fDigiPluginNr;
167 LOG(debug) << fName << ": End Chain";
168
169 //cout << fName <<"Debug: 3" << endl;
170 // --- Send produced digis to DAQ
171 //fTmpDigi = fDetector->GetOutputDigis();
172 //fTmpMatch = fDetector->GetOutputDigiMatchs();
173
174 fDetector->GetOutputArray(nTargetPlugin, fTmpDigi);
175 //LOG(debug) << "CbmMvdDigitizer::Exec() - GetOutputArray completed";
176
177 fDetector->GetMatchArray(nTargetPlugin, fTmpMatch);
178 //LOG(debug) << "CbmMvdDigitizer::Exec() - GetMatchArray data completed";
179
180 //LOG(debug) << "Length of Digi Array " << fTmpDigi->GetEntriesFast();
181 //LOG(debug) << "Length of Digi Match Array " << fTmpMatch->GetEntriesFast();
182
183 Int_t nEntries = fTmpDigi->GetEntriesFast();
184 for (Int_t index = 0; index < nEntries; index++) {
185
186 CbmMvdDigi* digi = dynamic_cast<CbmMvdDigi*>(fTmpDigi->At(index));
187 CbmMvdDigi* digi1 = new CbmMvdDigi(*digi);
188 assert(digi1);
189 fDigiVect.push_back(digi1);
190
191 if (fCreateMatches) {
192 CbmMatch* match = dynamic_cast<CbmMatch*>(fTmpMatch->At(index));
193 CbmMatch* match1 = new CbmMatch(*match);
194 fMatchVect.push_back(match1);
195 SendData(digi1->GetTime(), digi1, match1);
196 }
197 else {
198 SendData(digi1->GetTime(), digi1);
199 }
200 nDigis++;
201
202 // cout << fName <<"Debug: 7" << endl;
203 }
204
205
206 // TODO: (VF) There seem to be no entries in the match array, nor matches
207 // attached to the digi object
208 LOG(debug) << fName << ": Sent " << nDigis << " digis to DAQ";
209
210 //fDigis->AbsorbObjects(fDetector->GetOutputDigis(),0,fDetector->GetOutputArray(fDigiPluginNr)->GetEntriesFast()-1);
211 //LOG(debug) << "Total of " << fDigis->GetEntriesFast() << " digis in this Event";
212 //LOG(dfVerbose) << "Start writing DigiMatchs";
213 //fDigiMatch->AbsorbObjects(fDetector->GetOutputDigiMatchs(),0,fDetector->GetOutputDigiMatchs()->GetEntriesFast()-1);
214 //if(fVerbose) LOG(debug) << "Total of " << fDigiMatch->GetEntriesFast() << " digisMatch in this Event";
215 LOG(debug) << "//----------------------------------------//";
216 //LOG(info) << "+ " << setw(20) << GetName() << ": Created: "
217 // << fDigis->GetEntriesFast() << " digis in "
218 // << fixed << setprecision(6) << fTimer.RealTime() << " s";
219 }
220
221 // Clear the arrays after being used. Every digi and match was already
222 // copied and send to the DAQ
223 fTmpDigi->Clear();
224 fTmpMatch->Clear();
225
226 // --- Event log
227 fTimer.Stop();
228 LOG(info) << "+ " << setw(15) << GetName() << ": Event " << setw(6) << right << fCurrentEvent << " at " << fixed
229 << setprecision(3) << fCurrentEventTime << " ns, points: " << nPoints << ", digis: " << nDigis
230 << ". Exec time " << setprecision(6) << fTimer.RealTime() << " s.";
231}
232// -----------------------------------------------------------------------------
233
234// ----- Init --------------------------------------------------------------
236{
237 LOG(info) << GetName() << ": Initialisation...";
238
239 // ********** RootManager
240 FairRootManager* ioman = FairRootManager::Instance();
241 if (!ioman) {
242 LOG(fatal) << "No FairRootManager!";
243 return kFATAL;
244 }
245
246 // ********** Get input arrays
247 fInputPoints = (TClonesArray*) ioman->GetObject("MvdPoint");
248
249 if (!fInputPoints) {
250 LOG(error) << "No MvdPoint branch found. There was no MVD in the "
251 "simulation. Switch this task off";
252 return kERROR;
253 }
254
255
256 // ********** Register output arrays
258 fMcPileUp = new TClonesArray("CbmMvdPoint", 10000);
259 ioman->Register("MvdPileUpMC", "Mvd MC Points after Pile Up", fMcPileUp, IsOutputBranchPersistent("MvdPileUpMC"));
260
262
263 // ********** Create pileup manager if necessary
264 if (fNPileup >= 1 && !(fPileupManager) && fMode == 0) {
265 if (fBgFileName == "") {
266 LOG(error) << "Pileup events needed, but no background file name given! ";
267 return kERROR;
268 }
270 if (fPileupManager->GetNEvents() < 2 * fNPileup) {
271 LOG(error) << "The size of your BG-File is insufficient to perform the requested pileup";
272 LOG(error) << " You need at least events > 2* fNPileup but there are only" << fNPileup << ", events in file "
274 LOG(fatal) << "The size of your BG-File is insufficient";
275 return kFATAL;
276 }
277 }
278
279 // ********** Create delta electron manager if required
280 if (fNDeltaElect >= 1 && !(fDeltaManager) && fMode == 0) {
281 if (fDeltaFileName == "") {
282 LOG(error) << "Delta events needed, but no delta elector file name given! ";
283 return kERROR;
284 }
287 LOG(error) << "The size of your Delta-File is insufficient to perform the requested pileup";
288 LOG(error) << " You need at least events > 2* fNDeltaElect but there are only" << fNDeltaElect
289 << ", events in file " << fDeltaManager->GetNEvents();
290 LOG(fatal) << "The size of your Delta-File is insufficient";
291 return kFATAL;
292 }
293 }
294
295
296 if (fEventMode) {
297 LOG(info) << GetName() << ": Running in event mode";
298 }
299 else {
300 LOG(info) << GetName() << ": Running in time based mode";
301 }
302
303 // Add the digitizer plugin to all sensors
304 std::map<int, CbmMvdSensor*>& sensorMap = fDetector->GetSensorMap();
305 UInt_t plugincount = fDetector->GetPluginCount();
306
307 for (auto itr = sensorMap.begin(); itr != sensorMap.end(); itr++) {
309 if (fNoiseSensors) digiTask->SetProduceNoise();
310 if (fEventMode) {
311 digiTask->SetEventMode();
312 }
313 itr->second->AddPlugin(digiTask);
314 itr->second->SetDigiPlugin(plugincount);
315 }
317 fDetector->SetPluginCount(plugincount + 1);
319
321 fDetector->Init();
322
323 // --- Read list of inactive channels
324 if (!fInactiveChannelFileName.IsNull()) {
325 LOG(info) << GetName() << ": Reading inactive channels from " << fInactiveChannelFileName;
326 auto result = ReadInactiveChannels();
327 if (!result.second) {
328 LOG(error) << GetName() << ": Error in reading from file! Task will be inactive.";
329 return kFATAL;
330 }
331 LOG(info) << GetName() << ": " << std::get<0>(result) << " lines read from file, " << fInactiveChannels.size()
332 << " channels set inactive";
333 }
334
335 // Screen output
336 LOG(debug) << GetName() << " initialised with parameters: ";
337 //PrintParameters();
338
339
340 return kSUCCESS;
341}
342
343// ----- Virtual public method Reinit ----------------------------------
344InitStatus CbmMvdDigitizer::ReInit() { return kSUCCESS; }
345// -------------------------------------------------------------------------
346
347
348// ----- Virtual method Finish -----------------------------------------
350{
351
352 Int_t nTargetPlugin = DetectPlugin(100);
353 LOG(debug) << "CbmMvdDigitizer::Finish() Autodetect: " << nTargetPlugin << " Manual Detect " << fDigiPluginNr;
354 LOG(debug) << "finishing";
355 LOG(debug) << "Trying to show Histograms: " << fShowDebugHistos;
356
357 if (fShowDebugHistos) {
359 //DisplayDebugHistos();
360 SafeDebugHistosToFile("TestHistoFile.root");
361 }
362
363 LOG(debug) << "Histograms completed";
364
365 // Get the digis which are still in the sensor buffers
366 fDetector->Finish();
367 fDetector->GetOutputArray(nTargetPlugin, fTmpDigi);
368 fDetector->GetMatchArray(nTargetPlugin, fTmpMatch);
369
370 // Send the remaining digis to the DAQ
371 Int_t nEntries = fTmpDigi->GetEntriesFast();
372 LOG(info) << GetName() << " Finalising buffers with " << nEntries << " digis";
373 for (Int_t index = 0; index < nEntries; index++) {
374
375 CbmMvdDigi* digi = dynamic_cast<CbmMvdDigi*>(fTmpDigi->At(index));
376 CbmMvdDigi* digi1 = new CbmMvdDigi(*digi);
377 assert(digi1);
378 fDigiVect.push_back(digi1);
379
380 if (fCreateMatches) {
381 CbmMatch* match = dynamic_cast<CbmMatch*>(fTmpMatch->At(index));
382 CbmMatch* match1 = new CbmMatch(*match);
383 fMatchVect.push_back(match1);
384 SendData(digi1->GetTime(), digi1, match1);
385 }
386 else {
387 SendData(digi1->GetTime(), digi1);
388 }
389 }
390
392}
393
394// -------------------------------------------------------------------------
395
397{
398
399 // detect correct plugin in the Task-array
400
401 Int_t nTargetPlugin = DetectPlugin(100);
402 LOG(debug) << "CbmMvdDigitizer::CollectHistograms - Targeting nTargetPlugin= " << nTargetPlugin;
403
404
405 if (!fHistoArray) {
406 LOG(debug) << "CbmMvdDigitizer::CollectHistograms - Created new TObjArray";
407 fHistoArray = new TObjArray();
408 }
409 else {
410 LOG(debug) << "CbmMvdDigitizer::CollectHistograms - Cleared new TObjArray";
411 fHistoArray->Clear();
412
413
414 }; //initialize array without deleting histograms by themselves
415
416 for (UInt_t i = 0; i < fDetector->GetMaxHistoNumber(nTargetPlugin); i++) {
417
418 // This all histograms in the sensors
419 LOG(debug) << "CbmMvdDigitizer::CollectHistograms - Trying to read histogram " << i;
420 fHistoArray->AddLast((TObject*) fDetector->GetHistogram(nTargetPlugin, i));
421 }
422};
423
424// -------------------------------------------------------------------------
425// Function to display histograms at Finish, must call ShowDebugHistograms before.
427{
428
429 //TCanvas* c = 0;
430 //c->Divide(3, 3);
431 if (!fHistoArray) {
432 LOG(info) << "CbmMvdDigitizer::DisplayDebugHistos - Error: fHistoArray not initialized. Disabling histograms.";
433 return;
434 }
435 for (Int_t i = 0; i < 9; i++) {
436 if (i >= fHistoArray->GetEntriesFast()) {
437 continue;
438 }
439 LOG(debug) << "Trying to display histogram" << i;
440 TString myCanvasName = TString("DigiCanvas") + i;
441 LOG(debug) << "Trying to generate Canvas with name" << myCanvasName;
442
443 new TCanvas(myCanvasName, myCanvasName, 150, 10, 800, 600);
444 //c-> cd(i);
445 ((TH1*) fHistoArray->At(i))->Draw();
446 }
447 //LOG(info) << "CbmMvdDigitizerL::Finish - Fit of the total cluster charge";
448 //fTotalChargeHisto->Fit("landau");
449
450 //c->Draw();
451};
452
453// -------------------------------------------------------------------------
454// Function safes histograms to file, must call ShowDebugHistograms before.
455
456
458{
459
460 if (!fHistoArray) {
461 LOG(info) << "CbmMvdDigitizerL::SafeDebugHistosToFile - Error: fHistoArray not initialized. Disabling histograms.";
462 return;
463 }
464 TFile* gFileCopy = gFile;
465 TFile* myFile = new TFile(histoFile, "Recreate");
466 LOG(info) << "CbmMvdDigitizer::SafeDebugHistosToFile - Writing histograms to file: " << histoFile;
467
468 for (Int_t i = 0; i < fHistoArray->GetEntriesFast(); i++) {
469
470 LOG(debug) << "CbmMvdDigitizer::SafeDebugHistosToFil - Saving histogram number " << i;
471 ((TH1*) fHistoArray->At(i))->Write();
472 }
473 myFile->Close();
474 gFile = gFileCopy;
475};
476
477
478// ----- Private method Reset ------------------------------------------
480// -------------------------------------------------------------------------
481
482
483// ----- Reset output arrays -------------------------------------------
485{
486 if (fMcPileUp) fMcPileUp->Delete();
487 if (fTmpMatch) fTmpMatch->Delete();
488 if (fTmpDigi) fTmpDigi->Delete();
489 fDigiVect.clear();
490 fMatchVect.clear();
491}
492// -------------------------------------------------------------------------
493
494
495// ----- Private method GetMvdGeometry ---------------------------------
497// -------------------------------------------------------------------------
498
500{
501
503 return detector->DetectPlugin(pluginID);
504}
505
507
508// ----- Private method PrintParameters --------------------------------
509
511{
512 std::stringstream ss;
513 ss.setf(std::ios_base::fixed, std::ios_base::floatfield);
514 ss << "============================================================" << endl;
515 ss << "============== Parameters MvdDigitizer =====================" << endl;
516 ss << "============================================================" << endl;
517 ss << "=============== End Task ===================================" << endl;
518 return ss.str();
519}
520// -------------------------------------------------------------------------
521
522// --------------- Build Event ------------------------------------------------------
524{
525
526 // Some frequently used variables
527 CbmMvdPoint* point = nullptr;
528 Int_t nOrig = 0;
529 Int_t nPile = 0;
530 Int_t nElec = 0;
531
532 // ----- First treat standard input file
533 nOrig = fInputPoints->GetEntriesFast();
534
535 // Since the points are distributed to several sensor tasks which creates
536 // several new arrays, the array index can't be used to link the proper
537 // MC information in the tasks to be used inside the task to link the
538 // correct MC information
539 // Add the index in the original array to to the point itself
540 for (int iPoint = 0; iPoint < nOrig; iPoint++) {
541 point = static_cast<CbmMvdPoint*>(fInputPoints->At(iPoint));
542 point->SetPointId(iPoint);
543 }
544
545 // ----- Then treat event pileup
546 if (fNPileup > 0) {
547
548 // --- Vector of available background events from pile-up.
549 // --- Each event is used only once.
550 Int_t nBuffer = fPileupManager->GetNEvents();
551 vector<Int_t> freeEvents(nBuffer);
552 for (Int_t i = 0; i < nBuffer; i++)
553 freeEvents[i] = i;
554
555 // --- Loop over pile-up events
556 for (Int_t iBg = 0; iBg < fNPileup; iBg++) {
557
558 // Select random event from vector and remove it after usage
559 Int_t index = gRandom->Integer(freeEvents.size());
560
561 Int_t iEvent = freeEvents[index];
562 TClonesArray* points = fPileupManager->GetEvent(iEvent);
563 freeEvents.erase(freeEvents.begin() + index);
564
565 // Add points from this event to the input arrays
566 for (Int_t iPoint = 0; iPoint < points->GetEntriesFast(); iPoint++) {
567 point = (CbmMvdPoint*) points->At(iPoint);
568 point->SetTrackID(-2);
569 point->SetPointId(-2);
570 nPile++;
571 new ((*fInputPoints)[fInputPoints->GetEntriesFast()]) CbmMvdPoint(*((CbmMvdPoint*) points->At(iPoint)));
572 }
573
574
575 } // Pileup event loop
576
577 } // Usage of pile-up
578
579
580 // ----- Finally, treat delta electrons
581 if (fNDeltaElect > 0) {
582
583 // --- Vector of available delta events.
584 // --- Each event is used only once.
585 Int_t nDeltaBuffer = fDeltaManager->GetNEvents();
586 vector<Int_t> freeDeltaEvents(nDeltaBuffer);
587 for (Int_t i = 0; i < nDeltaBuffer; i++)
588 freeDeltaEvents[i] = i;
589
590 // --- Loop over delta events
591 for (Int_t it = 0; it < fNDeltaElect; it++) {
592
593 // Select random event from vector and remove it after usage
594 Int_t indexD = gRandom->Integer(freeDeltaEvents.size());
595 Int_t iEventD = freeDeltaEvents[indexD];
596 TClonesArray* pointsD = fDeltaManager->GetEvent(iEventD);
597 freeDeltaEvents.erase(freeDeltaEvents.begin() + indexD);
598
599 // Add points from this event to the input arrays
600 for (Int_t iPoint = 0; iPoint < pointsD->GetEntriesFast(); iPoint++) {
601 point = (CbmMvdPoint*) pointsD->At(iPoint);
602 point->SetTrackID(-3); // Mark the points as delta electron
603 point->SetPointId(-3);
604 new ((*fInputPoints)[fInputPoints->GetEntriesFast()]) CbmMvdPoint(*((CbmMvdPoint*) pointsD->At(iPoint)));
605 nElec++;
606 }
607
608
609 } // Delta electron event loop
610
611 } // Usage of delta
612
613 for (Int_t i = 0; i < fInputPoints->GetEntriesFast(); i++)
614 new ((*fMcPileUp)[i]) CbmMvdPoint(*((CbmMvdPoint*) fInputPoints->At(i)));
615
616
617 // ----- At last: Screen output
618 LOG(debug) << "+ " << GetName() << "::BuildEvent: original " << nOrig << ", pileup " << nPile << ", delta " << nElec
619 << ", total " << nOrig + nPile + nElec << " MvdPoints";
620}
621// -----------------------------------------------------------------------------
622
623
TClonesArray * points
ClassImp(CbmMvdDigitizer)
int Int_t
virtual std::pair< size_t, bool > ReadInactiveChannels()
Set of inactive channels, indicated by CbmAddress.
Int_t fCurrentEvent
Number of current input.
TString fInactiveChannelFileName
Time of current MC event [ns].
std::set< uint32_t > fInactiveChannels
Name of file with inactive channels.
void GetEventInfo()
Get event information.
Double_t fCurrentEventTime
Number of current MC entry.
Bool_t fCreateMatches
Flag for production of inter-event noise.
Base class template for CBM digitisation tasks.
Definition CbmDigitize.h:44
void SendData(Double_t time, CbmMvdDigi *digi, CbmMatch *match=nullptr)
std::map< int, CbmMvdSensor * > & GetSensorMap()
TH1 * GetHistogram(UInt_t nPlugin, UInt_t nHistogramNumber)
Int_t GetPluginArraySize()
UInt_t GetMaxHistoNumber(UInt_t nPlugin)
static CbmMvdDetector * Instance()
Int_t DetectPlugin(Int_t pluginID)
void SetSensorArrayFilled(Bool_t value=kTRUE)
UInt_t GetPluginCount()
void SendInputToSensorPlugin(Int_t detectorid, Int_t nPlugin, TObject *input)
void GetOutputArray(Int_t nPlugin, TClonesArray *outputArray)
void GetMatchArray(Int_t nPlugin, TClonesArray *matchArray)
void SetPluginCount(UInt_t count)
void Exec(UInt_t nLevel)
double GetTime() const
std::string ParametersToString() const
CbmMvdPileupManager * fDeltaManager
TClonesArray * fMcPileUp
CbmMvdPileupManager * fPileupManager
TObjArray * fHistoArray
Temporary TClonesArray to absorb from MvdDetector.
TClonesArray * fInputPoints
virtual InitStatus Init()
void Exec(Option_t *opt)
std::vector< CbmMatch * > fMatchVect
Temporary storage for CbmDaq.
TClonesArray * fTmpDigi
Temporary TClonesArray to absorb from MvdDetector.
virtual void ResetArrays()
Clear data arrays.
std::vector< CbmMvdDigi * > fDigiVect
virtual InitStatus ReInit()
virtual void Finish()
TClonesArray * fTmpMatch
Int_t DetectPlugin(Int_t pluginID)
CbmMvdDetector * fDetector
void SafeDebugHistosToFile(TString histoFile)
void PrintParameters() const
TStopwatch fTimer
ROOT timer.
TClonesArray * GetEvent(Int_t iEvent)
void SetPointId(int32_t myId)
Definition CbmMvdPoint.h:90
Hash for CbmL1LinkKey.