15#include "FairRootManager.h"
16#include "FairRunOnline.h"
19#include "TClonesArray.h"
22#include "THttpServer.h"
23#include <TDirectory.h>
29using std::setprecision;
57 FairRootManager* ioman = FairRootManager::Instance();
65 fBmonDigiVec = ioman->InitObjectAs<std::vector<CbmTofDigi>
const*>(
"BmonDigi");
67 fBmonDigiArr =
static_cast<TClonesArray*
>(ioman->GetObject(
"BmonDigi"));
68 if (!
fBmonDigiArr) { LOG(info) <<
"No Bmon digi input."; }
84 fEvents =
new TClonesArray(
"CbmEvent", 100);
85 ioman->Register(
"CbmEvent",
"Cbm_Event",
fEvents, IsOutputBranchPersistent(
"CbmEvent"));
87 if (!
fEvents) LOG(fatal) <<
"Output branch was not created";
92 new TH1F(
"fDiffTime",
"Time difference between two consecutive digis;time diff [ns];Counts", 420, -100.5, 1999.5);
93 fhEventTime =
new TH1F(
"hEventTime",
"seed time of the events; Seed time [s]; Events", 60000, 0, 600);
95 new TH1F(
"fhEventDt",
"interval in seed time of consecutive events; Seed time [s]; Events", 2100, -100.5, 1999.5);
96 fhEventSize =
new TH1F(
"hEventSize",
"nb of all digis in the event; Nb Digis []; Events []", 10000, 0, 10000);
98 "nb of all digis per event vs seed time of the events; Seed "
99 "time [s]; Nb Digis []; Events []",
100 600, 0, 600, 1000, 0, 10000);
103 "nb of Bmon digis per event vs seed time of the events; Seed "
104 "time [s]; Nb Digis []; Events []",
105 600, 0, 600, 4000, 0, 4000);
107 "nb of STS digis per event vs seed time of the events; Seed "
108 "time [s]; Nb Digis []; Events []",
109 600, 0, 600, 4000, 0, 4000);
111 "nb of MUCH digis per event vs seed time of the events; Seed "
112 "time [s]; Nb Digis []; Events []",
113 600, 0, 600, 4000, 0, 4000);
115 "nb of TRD digis per event vs seed time of the events; Seed "
116 "time [s]; Nb Digis []; Events []",
117 600, 0, 600, 4000, 0, 4000);
119 "nb of TOF digis per event vs seed time of the events; Seed "
120 "time [s]; Nb Digis []; Events []",
121 600, 0, 600, 4000, 0, 4000);
123 "nb of RICH digis per event vs seed time of the events; Seed "
124 "time [s]; Nb Digis []; Events []",
125 600, 0, 600, 4000, 0, 4000);
127 "nb of PSD digis per event vs seed time of the events; Seed "
128 "time [s]; Nb Digis []; Events []",
129 600, 0, 600, 4000, 0, 4000);
142 LOG_IF(info,
fNrTs % 1000 == 0) <<
"Begin of TS " <<
fNrTs;
148 LOG(debug) <<
"Found " <<
fEventVector.size() <<
" events";
154 LOG(debug) <<
"Found " <<
fEventVector.size() <<
" triggered events";
167 Int_t nrBmonDigis {0};
178 LOG(debug) <<
"BmonDigis: " << nrBmonDigis;
179 LOG(debug) <<
"StsDigis: " << nrStsDigis;
180 LOG(debug) <<
"MuchDigis: " << nrMuchDigis;
181 LOG(debug) <<
"TrdDigis: " << nrTrdDigis;
182 LOG(debug) <<
"TofDigis: " << nrTofDigis;
183 LOG(debug) <<
"RichDigis: " << nrRichDigis;
184 LOG(debug) <<
"PsdDigis: " << nrPsdDigis;
190 if (nrMuchDigis > 0) {
200 for (
const auto& data :
fSorter) {
201 LOG(debug) <<
"Array, Entry(" << data.second.first <<
", " << data.second.second <<
"): " << fixed
202 << setprecision(15) << data.first <<
" ns";
224 Double_t time = it->first;
226 Int_t entry = it->second.second;
303 Bool_t hasTrigger {kTRUE};
384 Double_t dPreEvtTime = -1.0;
387 if (0.0 <= dPreEvtTime) {
fhEventDt->Fill(evt->GetStartTime() - dPreEvtTime); }
399 dPreEvtTime = evt->GetStartTime();
424 LOG(debug) <<
"Vector: " <<
event->ToString();
425 new ((*fEvents)[
fEvents->GetEntriesFast()])
CbmEvent(std::move(*event));
433 LOG(debug) <<
"Event " <<
counter <<
" has " <<
event->GetNofData() <<
" digis";
460 LOG(debug4) <<
"Entry: " << _entry;
474 if (
nullptr != pDigi) {
475 time = pDigi->GetTime();
476 fSorter.emplace(make_pair(time, make_pair(_system, _entry)));
483 if (
static_cast<UInt_t
>(_entry) <
fBmonDigiVec->size()) {
485 fSorter.emplace(make_pair(time, make_pair(_system, _entry)));
489 if (_entry < fBmonDigiArr->GetEntriesFast()) {
491 fSorter.emplace(make_pair(time, make_pair(_system, _entry)));
509 TFile* oldFile = gFile;
510 TDirectory* oldDir = gDirectory;
535 LOG(info) <<
"Total errors: " <<
fErrors;
ClassImp(CbmConverterManager)
@ kMvd
Micro-Vertex Detector.
@ kHodo
Hodoscope (for test beam times)
@ kTrd
Transition Radiation Detector.
@ kTof
Time-of-flight Detector.
@ kPsd
Projectile spectator detector.
@ kSts
Silicon Tracking System.
@ kMuch
Muon detection system.
@ kRich
Ring-Imaging Cherenkov Detector.
static Int_t GetNofDigis(ECbmModuleId systemId)
static Bool_t IsPresent(ECbmModuleId systemId)
Presence of a digi branch.
void UseMuchBeamTimeDigi(Bool_t)
Use CbmMuchBeamTimeDigi instead of CbmMuchDigi for MUCH.
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,...
void AddData(ECbmDataType type, uint32_t index)
void SetEndTime(double endTime)
std::string ToString() const
Bool_t fFillHistos
histogram with the nb of PSD digis per event vs seed time of the events
std::multimap< Double_t, digituple > fSorter
array with pointers to input containers
Bool_t IsDigiInEvent(Double_t)
Int_t fTriggerMaxTofDigis
Int_t fTriggerMaxRichDigis
TH1 * fhEventDt
histogram with the seed time of the events
Int_t fTriggerMaxMuchDigis
virtual InitStatus ReInit()
Double_t fPrevTime
Timeslice Counter.
TH1 * fDiffTime
vector with all created events
TH2 * fhNbDigiPerEvtTime
histogram with the nb of all digis in the event
Int_t fTriggerMinRichDigis
Double_t fFixedTimeWindow
TClonesArray * fEvents
input container of TO digis
TH2 * fhNbDigiPerEvtTimeTrd
histogram with the nb of MUCH digis per event vs seed time of the events
Int_t fTriggerMinPsdDigis
Int_t fTriggerMaxPsdDigis
std::vector< std::pair< ECbmModuleId, Int_t > > fVect
for digi sorting
TH1 * fhEventTime
histogram with the time difference between two consecutive digis
Int_t fTriggerMinTrdDigis
Int_t fTriggerMaxBmonDigis
Int_t fErrors
Event Counter.
Int_t fTriggerMinStsDigis
Int_t fTriggerMaxTrdDigis
Int_t fNrTs
Error Counter.
EventBuilderAlgo fEventBuilderAlgo
Switch ON/OFF filling of histograms.
TH2 * fhNbDigiPerEvtTimeMuch
histogram with the nb of STS digis per event vs seed time of the events
Int_t fTriggerMinTofDigis
TH2 * fhNbDigiPerEvtTimeBmon
histogram with the nb of all digis per event vs seed time of the events
virtual InitStatus Init()
~CbmMcbm2018EventBuilder()
TH2 * fhNbDigiPerEvtTimeTof
histogram with the nb of TRD digis per event vs seed time of the events
TH1 * fhEventSize
histogram with the interval in seed time of consecutive events
std::vector< CbmEvent * > fEventVector
pointer to the event which is currently build
Int_t fTriggerMaxStsDigis
CbmDigiManager * fDigiMan
Bool_t fbUseBaseMuchDigi
Save previous time information.
TH2 * fhNbDigiPerEvtTimePsd
histogram with the nb of RICH digis per event vs seed time of the events
virtual void Exec(Option_t *)
CbmMcbm2018EventBuilder()
TH2 * fhNbDigiPerEvtTimeRich
histogram with the nb of TOF digis per event vs seed time of the events
virtual void SetParContainers()
Int_t fTriggerMinMuchDigis
TClonesArray * fBmonDigiArr
void AddDigiToEvent(ECbmModuleId, Int_t)
const std::vector< CbmTofDigi > * fBmonDigiVec
TH2 * fhNbDigiPerEvtTimeSts
histogram with the nb of Bmon digis per event vs seed time of the events
Bool_t HasTrigger(CbmEvent *)
void AddDigiToSorter(ECbmModuleId, Int_t)
Int_t fTriggerMinBmonDigis
Data class for expanded digital TOF information.
double GetTime() const
Inherited from CbmDigi.