Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • le.koch/cbmroot
  • patrick.pfistner_AT_kit.edu/cbmroot
  • lena.rossel_AT_stud.uni-frankfurt.de/cbmroot
  • i.deppner/cbmroot
  • fweig/cbmroot
  • karpushkin_AT_inr.ru/cbmroot
  • v.akishina/cbmroot
  • rishat.sultanov_AT_cern.ch/cbmroot
  • l_fabe01_AT_uni-muenster.de/cbmroot
  • pwg-c2f/cbmroot
  • j.decuveland/cbmroot
  • a.toia/cbmroot
  • i.vassiliev/cbmroot
  • n.herrmann/cbmroot
  • o.lubynets/cbmroot
  • se.gorbunov/cbmroot
  • cornelius.riesen_AT_physik.uni-giessen.de/cbmroot
  • zhangqn17_AT_mails.tsinghua.edu.cn/cbmroot
  • bartosz.sobol/cbmroot
  • ajit.kumar/cbmroot
  • computing/cbmroot
  • a.agarwal_AT_vecc.gov.in/cbmroot
  • osingh/cbmroot
  • wielanek_AT_if.pw.edu.pl/cbmroot
  • malgorzata.karabowicz.stud_AT_pw.edu.pl/cbmroot
  • m.shiroya/cbmroot
  • s.roy/cbmroot
  • p.-a.loizeau/cbmroot
  • a.weber/cbmroot
  • ma.beyer/cbmroot
  • d.klein/cbmroot
  • d.smith/cbmroot
  • mvdsoft/cbmroot
  • d.spicker/cbmroot
  • y.h.leung/cbmroot
  • aksharma/cbmroot
  • m.deveaux/cbmroot
  • mkunold/cbmroot
  • h.darwish/cbmroot
  • pk.sharma_AT_vecc.gov.in/cbmroot
  • f_fido01_AT_uni-muenster.de/cbmroot
  • g.kozlov/cbmroot
  • d.emschermann/cbmroot
  • evgeny.lavrik/cbmroot
  • v.friese/cbmroot
  • f.uhlig/cbmroot
  • ebechtel_AT_ikf.uni-frankfurt.de/cbmroot
  • a.senger/cbmroot
  • praisig/cbmroot
  • s.lebedev/cbmroot
  • redelbach_AT_compeng.uni-frankfurt.de/cbmroot
  • p.subramani/cbmroot
  • a_meye37_AT_uni-muenster.de/cbmroot
  • om/cbmroot
  • o.golosov/cbmroot
  • l.chlad/cbmroot
  • a.bercuci/cbmroot
  • d.ramirez/cbmroot
  • v.singhal/cbmroot
  • h.schiller/cbmroot
  • apuntke/cbmroot
  • f.zorn/cbmroot
  • rubio_AT_physi.uni-heidelberg.de/cbmroot
  • p.chudoba/cbmroot
  • apuntke/mcbmroot
  • r.karabowicz/cbmroot
66 results
Show changes
Showing
with 281 additions and 382 deletions
......@@ -49,7 +49,7 @@ protected:
private:
/// Constants
static constexpr std::uint16_t fkFlesBmon = static_cast<std::uint16_t>(fles::SubsystemIdentifier::T0);
static constexpr std::uint16_t fkFlesBmon = static_cast<std::uint16_t>(fles::Subsystem::BMON);
/// Control flags
......@@ -223,10 +223,10 @@ private:
std::clock_t cpuendtime = std::clock();
auto wallendtime = std::chrono::high_resolution_clock::now();
// Cpu time in [µs]
// Cpu time in [mus]
auto cputime = 1e6 * (cpuendtime - cpustarttime) / CLOCKS_PER_SEC;
algo->AddCpuTime(cputime);
// Real time in [µs]
// Real time in [mus]
auto walltime = std::chrono::duration<double, std::micro>(wallendtime - wallstarttime).count();
algo->AddWallTime(walltime);
......@@ -234,7 +234,7 @@ private:
// Check some numbers from this timeslice
size_t nDigis = digivec.size();
LOG(debug) << "Component " << icomp << " connected to config " << config->GetName() << " n-Digis " << nDigis
<< " processed in walltime(cputime) = " << walltime << "(" << cputime << cputime << ") µs"
<< " processed in walltime(cputime) = " << walltime << "(" << cputime << cputime << ") micro s"
<< "this timeslice.";
if (fDoPerfProf) {
......
......@@ -336,7 +336,7 @@ try {
/* clang-format on */
/// Create input vectors
fvDigiT0 = new std::vector<CbmTofDigi>(1000000);
fvDigiBmon = new std::vector<CbmBmonDigi>(1000000);
fvDigiSts = new std::vector<CbmStsDigi>(1000000);
fvDigiMuch = new std::vector<CbmMuchDigi>(1000000);
fvDigiTrd = new std::vector<CbmTrdDigi>(1000000);
......@@ -347,7 +347,7 @@ try {
fCbmTsEventHeader = new CbmTsEventHeader();
/// Digis storage
fpAlgo->SetT0Digis(fvDigiT0);
fpAlgo->SetDigis(fvDigiBmon);
fpAlgo->SetDigis(fvDigiSts);
fpAlgo->SetDigis(fvDigiMuch);
fpAlgo->SetDigis(fvDigiTrd);
......@@ -399,7 +399,7 @@ RawEventBuilderDetector CbmDeviceBuildDigiEvents::GetDetectorBuilderCfg(std::str
{
/// FIXME: Disable clang formatting for now as it corrupts all alignment
/* clang-format off */
RawEventBuilderDetector cfgDet = ("kT0" == detName ? kRawEventBuilderDetT0
RawEventBuilderDetector cfgDet = ("kBmon" == detName ? kRawEventBuilderDetBmon
: ("kSts" == detName ? kRawEventBuilderDetSts
: ("kMuch" == detName ? kRawEventBuilderDetMuch
: ("kTrd" == detName ? kRawEventBuilderDetTrd
......@@ -417,7 +417,7 @@ ECbmModuleId CbmDeviceBuildDigiEvents::GetDetectorId(std::string detName)
{
/// FIXME: Disable clang formatting for now as it corrupts all alignment
/* clang-format off */
ECbmModuleId detId = ("kT0" == detName ? ECbmModuleId::kT0
ECbmModuleId detId = ("kBmon" == detName ? ECbmModuleId::kBmon
: ("kSts" == detName ? ECbmModuleId::kSts
: ("kMuch" == detName ? ECbmModuleId::kMuch
: ("kTrd" == detName ? ECbmModuleId::kTrd
......@@ -492,12 +492,12 @@ bool CbmDeviceBuildDigiEvents::HandleData(FairMQParts& parts, int /*index*/)
RootSerializer().Deserialize(*parts.At(uPartIdx), fCbmTsEventHeader);
++uPartIdx;
/// T0
/// Bmon
if (0 < (parts.At(uPartIdx))->GetSize()) {
std::string msgStrT0(static_cast<char*>(parts.At(uPartIdx)->GetData()), (parts.At(uPartIdx))->GetSize());
std::istringstream issT0(msgStrT0);
boost::archive::binary_iarchive inputArchiveT0(issT0);
inputArchiveT0 >> *fvDigiT0;
std::string msgStrBmon(static_cast<char*>(parts.At(uPartIdx)->GetData()), (parts.At(uPartIdx))->GetSize());
std::istringstream issBmon(msgStrBmon);
boost::archive::binary_iarchive inputArchiveBmon(issBmon);
inputArchiveBmon >> *fvDigiBmon;
}
++uPartIdx;
......@@ -528,7 +528,7 @@ bool CbmDeviceBuildDigiEvents::HandleData(FairMQParts& parts, int /*index*/)
}
++uPartIdx;
/// T0F
/// BmonF
if (0 < (parts.At(uPartIdx))->GetSize()) {
std::string msgStrTof(static_cast<char*>(parts.At(uPartIdx)->GetData()), (parts.At(uPartIdx))->GetSize());
std::istringstream issTof(msgStrTof);
......@@ -562,7 +562,7 @@ bool CbmDeviceBuildDigiEvents::HandleData(FairMQParts& parts, int /*index*/)
TimesliceMetaData(std::move(*fTsMetaData));
++uPartIdx;
LOG(debug) << "T0 Vector size: " << fvDigiT0->size();
LOG(debug) << "Bmon Vector size: " << fvDigiBmon->size();
LOG(debug) << "STS Vector size: " << fvDigiSts->size();
LOG(debug) << "MUCH Vector size: " << fvDigiMuch->size();
LOG(debug) << "TRD Vector size: " << fvDigiTrd->size();
......@@ -592,7 +592,7 @@ bool CbmDeviceBuildDigiEvents::HandleData(FairMQParts& parts, int /*index*/)
fTimeSliceMetaDataArray->Clear();
/// Clear vectors
fvDigiT0->clear();
fvDigiBmon->clear();
fvDigiSts->clear();
fvDigiMuch->clear();
fvDigiTrd->clear();
......@@ -698,13 +698,14 @@ bool CbmDeviceBuildDigiEvents::SendDigiEvents(FairMQParts& partsIn)
/// for each detector, find the data in the Digi vectors and copy them
/// TODO: Template + loop on list of data types?
/// ==> T0
uint32_t uNbDigis = (0 < event->GetNofData(ECbmDataType::kT0Digi) ? event->GetNofData(ECbmDataType::kT0Digi) : 0);
/// ==> Bmon
uint32_t uNbDigis =
(0 < event->GetNofData(ECbmDataType::kBmonDigi) ? event->GetNofData(ECbmDataType::kBmonDigi) : 0);
if (uNbDigis) {
auto startIt = fvDigiT0->begin() + event->GetIndex(ECbmDataType::kT0Digi, 0);
auto stopIt = fvDigiT0->begin() + event->GetIndex(ECbmDataType::kT0Digi, uNbDigis - 1);
auto startIt = fvDigiBmon->begin() + event->GetIndex(ECbmDataType::kBmonDigi, 0);
auto stopIt = fvDigiBmon->begin() + event->GetIndex(ECbmDataType::kBmonDigi, uNbDigis - 1);
++stopIt;
selEvent.fData.fT0.fDigis.assign(startIt, stopIt);
selEvent.fData.fBmon.fDigis.assign(startIt, stopIt);
}
/// ==> STS
......@@ -877,7 +878,7 @@ CbmDeviceBuildDigiEvents::~CbmDeviceBuildDigiEvents()
if (fCbmTsEventHeader) delete fCbmTsEventHeader;
/// Clear vectors
if (fvDigiT0) fvDigiT0->clear();
if (fvDigiBmon) fvDigiBmon->clear();
if (fvDigiSts) fvDigiSts->clear();
if (fvDigiMuch) fvDigiMuch->clear();
if (fvDigiTrd) fvDigiTrd->clear();
......
......@@ -14,6 +14,7 @@
/// CBM headers
#include "CbmAlgoBuildRawEvents.h"
#include "CbmBmonDigi.h"
#include "CbmMuchDigi.h"
#include "CbmPsdDigi.h"
#include "CbmRichDigi.h"
......@@ -58,7 +59,7 @@ private:
/// User settings parameters
/// Algo enum settings
std::string fsEvtOverMode = "NoOverlap";
std::string fsRefDet = "kT0";
std::string fsRefDet = "kBmon";
std::vector<std::string> fvsAddDet = {};
std::vector<std::string> fvsDelDet = {};
std::vector<std::string> fvsSetTrigWin = {};
......@@ -102,7 +103,7 @@ private:
/// TS information in header
CbmTsEventHeader* fCbmTsEventHeader = nullptr;
/// Digis storage
std::vector<CbmTofDigi>* fvDigiT0 = nullptr;
std::vector<CbmBmonDigi>* fvDigiBmon = nullptr;
std::vector<CbmStsDigi>* fvDigiSts = nullptr;
std::vector<CbmMuchDigi>* fvDigiMuch = nullptr;
std::vector<CbmTrdDigi>* fvDigiTrd = nullptr;
......
......@@ -111,7 +111,7 @@ try {
: EOverlapModeRaw::NoOverlap)));
fpAlgo->SetEventOverlapMode(mode);
/// Extract refdet
RawEventBuilderDetector refDet = ("kT0" == fsRefDet ? kRawEventBuilderDetT0
RawEventBuilderDetector refDet = ("kBmon" == fsRefDet ? kRawEventBuilderDetBmon
: ("kSts" == fsRefDet ? kRawEventBuilderDetSts
: ("kMuch" == fsRefDet ? kRawEventBuilderDetMuch
: ("kTrd" == fsRefDet ? kRawEventBuilderDetTrd
......@@ -121,7 +121,7 @@ try {
: kRawEventBuilderDetUndef)))))));
if (kRawEventBuilderDetUndef != refDet) {
fpAlgo->SetReferenceDetector(refDet);
}
}
else {
LOG(info) << "CbmDeviceBuildRawEvents::InitTask => Trying to change "
"reference to unsupported detector, ignored! "
......@@ -132,7 +132,7 @@ try {
for (std::vector<std::string>::iterator itStrAdd = fvsAddDet.begin();
itStrAdd != fvsAddDet.end();
++itStrAdd) {
RawEventBuilderDetector addDet = ("kT0" == *itStrAdd ? kRawEventBuilderDetT0
RawEventBuilderDetector addDet = ("kBmon" == *itStrAdd ? kRawEventBuilderDetBmon
: ("kSts" == *itStrAdd ? kRawEventBuilderDetSts
: ("kMuch" == *itStrAdd ? kRawEventBuilderDetMuch
: ("kTrd" == *itStrAdd ? kRawEventBuilderDetTrd
......@@ -142,20 +142,20 @@ try {
: kRawEventBuilderDetUndef)))))));
if (kRawEventBuilderDetUndef != addDet) {
fpAlgo->AddDetector(addDet);
}
}
else {
LOG(info) << "CbmDeviceBuildRawEvents::InitTask => Trying to add "
"unsupported detector, ignored! "
<< (*itStrAdd);
continue;
}
}
}
/// Extract detector to remove if any
for (std::vector<std::string>::iterator itStrRem = fvsDelDet.begin();
itStrRem != fvsDelDet.end();
++itStrRem) {
RawEventBuilderDetector remDet = ("kT0" == *itStrRem ? kRawEventBuilderDetT0
RawEventBuilderDetector remDet = ("kBmon" == *itStrRem ? kRawEventBuilderDetBmon
: ("kSts" == *itStrRem ? kRawEventBuilderDetSts
: ("kMuch" == *itStrRem ? kRawEventBuilderDetMuch
: ("kTrd" == *itStrRem ? kRawEventBuilderDetTrd
......@@ -165,14 +165,14 @@ try {
: kRawEventBuilderDetUndef)))))));
if (kRawEventBuilderDetUndef != remDet) {
fpAlgo->RemoveDetector(remDet);
}
}
else {
LOG(info) << "CbmDeviceBuildRawEvents::InitTask => Trying to remove "
"unsupported detector, ignored! "
<< (*itStrRem);
continue;
}
}
}
}
/// Extract Trigger window to add if any
for (std::vector<std::string>::iterator itStrTrigWin = fvsSetTrigWin.begin();
itStrTrigWin != fvsSetTrigWin.end();
......@@ -185,11 +185,11 @@ try {
<< " (Should be ECbmModuleId,dWinBeg,dWinEnd but instead found "
<< (*itStrTrigWin) << " )";
continue;
}
}
/// Detector Enum Tag
std::string sSelDet = (*itStrTrigWin).substr(0, charPosDel);
ECbmModuleId selDet = ("kT0" == sSelDet ? ECbmModuleId::kT0
ECbmModuleId selDet = ("kBmon" == sSelDet ? ECbmModuleId::kBmon
: ("kSts" == sSelDet ? ECbmModuleId::kSts
: ("kMuch" == sSelDet ? ECbmModuleId::kMuch
: ("kTrd" == sSelDet ? ECbmModuleId::kTrd
......@@ -203,7 +203,7 @@ try {
<< "Trying to set trigger window for unsupported detector, ignored! "
<< sSelDet;
continue;
}
}
/// Window beginning
charPosDel++;
......@@ -216,7 +216,7 @@ try {
<< " (Should be ECbmModuleId,dWinBeg,dWinEnd but instead found "
<< (*itStrTrigWin) << " )";
continue;
}
}
Double_t dWinBeg = std::stod(sNext.substr(0, charPosDel));
/// Window end
......@@ -224,7 +224,7 @@ try {
Double_t dWinEnd = std::stod(sNext.substr(charPosDel));
fpAlgo->SetTriggerWindow(selDet, dWinBeg, dWinEnd);
}
}
/// Extract MinNb for trigger if any
for (std::vector<std::string>::iterator itStrMinNb = fvsSetTrigMinNb.begin();
itStrMinNb != fvsSetTrigMinNb.end();
......@@ -241,7 +241,7 @@ try {
/// Detector Enum Tag
std::string sSelDet = (*itStrMinNb).substr(0, charPosDel);
ECbmModuleId selDet = ("kT0" == sSelDet ? ECbmModuleId::kT0
ECbmModuleId selDet = ("kBmon" == sSelDet ? ECbmModuleId::kBmon
: ("kSts" == sSelDet ? ECbmModuleId::kSts
: ("kMuch" == sSelDet ? ECbmModuleId::kMuch
: ("kTrd" == sSelDet ? ECbmModuleId::kTrd
......@@ -262,13 +262,13 @@ try {
UInt_t uMinNb = std::stoul((*itStrMinNb).substr(charPosDel));
fpAlgo->SetTriggerMinNumber(selDet, uMinNb);
}
}
/// FIXME: Re-enable clang formatting after formatted lines
/* clang-format on */
/// Create input vectors
fvDigiT0 = new std::vector<CbmTofDigi>();
fvDigiBmon = new std::vector<CbmBmonDigi>();
fvDigiSts = new std::vector<CbmStsDigi>();
fvDigiMuch = new std::vector<CbmMuchBeamTimeDigi>();
fvDigiTrd = new std::vector<CbmTrdDigi>();
......@@ -281,7 +281,7 @@ try {
fpAlgo->SetTimeSliceMetaDataArray(fTimeSliceMetaDataArray);
/// Digis storage
fpAlgo->SetT0Digis(fvDigiT0);
fpAlgo->SetDigis(fvDigiBmon);
fpAlgo->SetDigis(fvDigiSts);
fpAlgo->SetDigis(fvDigiMuch);
fpAlgo->SetDigis(fvDigiTrd);
......@@ -395,11 +395,11 @@ bool CbmDeviceBuildRawEvents::HandleData(FairMQParts& parts, int /*index*/)
TimesliceMetaData(std::move(*fTsMetaData));
++uPartIdx;
/// T0
std::string msgStrT0(static_cast<char*>(parts.At(uPartIdx)->GetData()), (parts.At(uPartIdx))->GetSize());
std::istringstream issT0(msgStrT0);
boost::archive::binary_iarchive inputArchiveT0(issT0);
inputArchiveT0 >> *fvDigiT0;
/// Bmon
std::string msgStrBmon(static_cast<char*>(parts.At(uPartIdx)->GetData()), (parts.At(uPartIdx))->GetSize());
std::istringstream issBmon(msgStrBmon);
boost::archive::binary_iarchive inputArchiveBmon(issBmon);
inputArchiveBmon >> *fvDigiBmon;
++uPartIdx;
/// STS
......@@ -423,7 +423,7 @@ bool CbmDeviceBuildRawEvents::HandleData(FairMQParts& parts, int /*index*/)
inputArchiveTrd >> *fvDigiTrd;
++uPartIdx;
/// T0F
/// BmonF
std::string msgStrTof(static_cast<char*>(parts.At(uPartIdx)->GetData()), (parts.At(uPartIdx))->GetSize());
std::istringstream issTof(msgStrTof);
boost::archive::binary_iarchive inputArchiveTof(issTof);
......@@ -454,7 +454,7 @@ bool CbmDeviceBuildRawEvents::HandleData(FairMQParts& parts, int /*index*/)
fTimeSliceMetaDataArray->Clear();
/// Clear vectors
fvDigiT0->clear();
fvDigiBmon->clear();
fvDigiSts->clear();
fvDigiMuch->clear();
fvDigiTrd->clear();
......@@ -541,7 +541,7 @@ CbmDeviceBuildRawEvents::~CbmDeviceBuildRawEvents()
delete fTsMetaData;
/// Clear vectors
fvDigiT0->clear();
fvDigiBmon->clear();
fvDigiSts->clear();
fvDigiMuch->clear();
fvDigiTrd->clear();
......
......@@ -14,6 +14,7 @@
/// CBM headers
#include "CbmAlgoBuildRawEvents.h"
#include "CbmBmonDigi.h"
#include "CbmMuchBeamTimeDigi.h"
#include "CbmPsdDigi.h"
#include "CbmRichDigi.h"
......@@ -58,7 +59,7 @@ private:
/// User settings parameters
/// Algo enum settings
std::string fsEvtOverMode = "NoOverlap";
std::string fsRefDet = "kT0";
std::string fsRefDet = "kBmon";
std::vector<std::string> fvsAddDet = {};
std::vector<std::string> fvsDelDet = {};
std::vector<std::string> fvsSetTrigWin = {};
......@@ -99,7 +100,7 @@ private:
TClonesArray* fTimeSliceMetaDataArray = nullptr; //!
TimesliceMetaData* fTsMetaData = nullptr;
/// Digis storage
std::vector<CbmTofDigi>* fvDigiT0 = nullptr;
std::vector<CbmBmonDigi>* fvDigiBmon = nullptr;
std::vector<CbmStsDigi>* fvDigiSts = nullptr;
std::vector<CbmMuchBeamTimeDigi>* fvDigiMuch = nullptr;
std::vector<CbmTrdDigi>* fvDigiTrd = nullptr;
......
......@@ -55,7 +55,7 @@ struct InitTaskError : std::runtime_error {
using namespace std;
//Bool_t bMcbm2018MonitorTaskT0ResetHistos = kFALSE;
//Bool_t bMcbm2018MonitorTaskBmonResetHistos = kFALSE;
CbmDeviceDigiEventSink::CbmDeviceDigiEventSink() {}
......@@ -75,6 +75,7 @@ try {
fbDisableCompression = fConfig->GetValue<bool>("DisableCompression");
fiTreeFileMaxSize = fConfig->GetValue<int64_t>("TreeFileMaxSize");
fbDigiEventInput = fConfig->GetValue<bool>("DigiEventInput");
fbExclusiveTrdExtract = fConfig->GetValue<bool>("ExclusiveTrdExtract");
fbFillHistos = fConfig->GetValue<bool>("FillHistos");
fuPublishFreqTs = fConfig->GetValue<uint32_t>("PubFreqTs");
......@@ -155,7 +156,7 @@ try {
/// Full TS Digis storage (optional usage, controlled by fbStoreFullTs!)
if (fbStoreFullTs) {
fvDigiT0 = new std::vector<CbmTofDigi>();
fvDigiBmon = new std::vector<CbmBmonDigi>();
fvDigiSts = new std::vector<CbmStsDigi>();
fvDigiMuch = new std::vector<CbmMuchDigi>();
fvDigiTrd = new std::vector<CbmTrdDigi>();
......@@ -163,13 +164,13 @@ try {
fvDigiRich = new std::vector<CbmRichDigi>();
fvDigiPsd = new std::vector<CbmPsdDigi>();
fpFairRootMgr->RegisterAny("T0Digi", fvDigiT0, kTRUE);
fpFairRootMgr->RegisterAny("StsDigi", fvDigiSts, kTRUE);
fpFairRootMgr->RegisterAny("MuchDigi", fvDigiMuch, kTRUE);
fpFairRootMgr->RegisterAny("TrdDigi", fvDigiTrd, kTRUE);
fpFairRootMgr->RegisterAny("TofDigi", fvDigiTof, kTRUE);
fpFairRootMgr->RegisterAny("RichDigi", fvDigiRich, kTRUE);
fpFairRootMgr->RegisterAny("PsdDigi", fvDigiPsd, kTRUE);
fpFairRootMgr->RegisterAny(CbmBmonDigi::GetBranchName(), fvDigiBmon, kTRUE);
fpFairRootMgr->RegisterAny(CbmStsDigi::GetBranchName(), fvDigiSts, kTRUE);
fpFairRootMgr->RegisterAny(CbmMuchDigi::GetBranchName(), fvDigiMuch, kTRUE);
fpFairRootMgr->RegisterAny(CbmTrdDigi::GetBranchName(), fvDigiTrd, kTRUE);
fpFairRootMgr->RegisterAny(CbmTofDigi::GetBranchName(), fvDigiTof, kTRUE);
fpFairRootMgr->RegisterAny(CbmRichDigi::GetBranchName(), fvDigiRich, kTRUE);
fpFairRootMgr->RegisterAny(CbmPsdDigi::GetBranchName(), fvDigiPsd, kTRUE);
}
fpFairRootMgr->WriteFolder();
......@@ -623,7 +624,7 @@ void CbmDeviceDigiEventSink::PrepareTreeEntry(CbmEventTimeslice unpTs)
/// Extract CbmEvent vector from input message
// FU, 29.06.22 Remove std::move to allow copy ellision
(*fEventsSel) = unpTs.GetSelectedData();
(*fEventsSel) = unpTs.GetSelectedData(fbExclusiveTrdExtract);
if (kTRUE == fbFillHistos) {
/// Accumulated counts, will show rise + plateau pattern in spill
fulProcessedEvents += fEventsSel->size();
......@@ -631,7 +632,7 @@ void CbmDeviceDigiEventSink::PrepareTreeEntry(CbmEventTimeslice unpTs)
/// Full TS Digis storage (optional usage, controlled by fbStoreFullTs!)
if (fbStoreFullTs) {
if (0 < unpTs.fvDigiT0.size()) fvDigiT0->assign(unpTs.fvDigiT0.begin(), unpTs.fvDigiT0.end());
if (0 < unpTs.fvDigiBmon.size()) fvDigiBmon->assign(unpTs.fvDigiBmon.begin(), unpTs.fvDigiBmon.end());
if (0 < unpTs.fvDigiSts.size()) fvDigiSts->assign(unpTs.fvDigiSts.begin(), unpTs.fvDigiSts.end());
if (0 < unpTs.fvDigiMuch.size()) fvDigiMuch->assign(unpTs.fvDigiMuch.begin(), unpTs.fvDigiMuch.end());
if (0 < unpTs.fvDigiTrd.size()) fvDigiTrd->assign(unpTs.fvDigiTrd.begin(), unpTs.fvDigiTrd.end());
......@@ -668,7 +669,7 @@ void CbmDeviceDigiEventSink::DumpTreeEntry()
fEventsSel->clear();
/// Full TS Digis storage (optional usage, controlled by fbStoreFullTs!)
if (fbStoreFullTs) {
fvDigiT0->clear();
fvDigiBmon->clear();
fvDigiSts->clear();
fvDigiMuch->clear();
fvDigiTrd->clear();
......@@ -759,6 +760,16 @@ bool CbmDeviceDigiEventSink::SendHistograms()
return true;
}
//--------------------------------------------------------------------//
void CbmDeviceDigiEventSink::PostRun()
{
// Needed to avoid due to other end of ZMQ channel being already gone if called during Finish/destructor
if (kTRUE == fbFillHistos) {
SendHistograms();
fLastPublishTime = std::chrono::system_clock::now();
} // if( kTRUE == fbFillHistos )
}
//--------------------------------------------------------------------//
CbmDeviceDigiEventSink::~CbmDeviceDigiEventSink()
{
......@@ -787,14 +798,12 @@ void CbmDeviceDigiEventSink::Finish()
LOG(info) << "Still buffered TS " << fmFullTsStorage.size() << " and still buffered empties "
<< fvulMissedTsIndices.size();
if (kTRUE == fbFillHistos) {
SendHistograms();
fLastPublishTime = std::chrono::system_clock::now();
} // if( kTRUE == fbFillHistos )
ChangeState(fair::mq::Transition::Stop);
std::this_thread::sleep_for(std::chrono::milliseconds(3000));
ChangeState(fair::mq::Transition::End);
if (fair::mq::State::Running == GetCurrentState()) {
/// Force state transitions only if not already done by ODC/DDS!
ChangeState(fair::mq::Transition::Stop);
std::this_thread::sleep_for(std::chrono::milliseconds(3000));
ChangeState(fair::mq::Transition::End);
}
fbFinishDone = kTRUE;
}
......@@ -867,11 +876,11 @@ CbmEventTimeslice::CbmEventTimeslice(FairMQParts& parts, bool bDigiEvtInput)
}
++uPartIdx;
/// (2) T0
std::string msgStrT0(static_cast<char*>(parts.At(uPartIdx)->GetData()), (parts.At(uPartIdx))->GetSize());
std::istringstream issT0(msgStrT0);
boost::archive::binary_iarchive inputArchiveT0(issT0);
inputArchiveT0 >> fvDigiT0;
/// (2) Bmon
std::string msgStrBmon(static_cast<char*>(parts.At(uPartIdx)->GetData()), (parts.At(uPartIdx))->GetSize());
std::istringstream issBmon(msgStrBmon);
boost::archive::binary_iarchive inputArchiveBmon(issBmon);
inputArchiveBmon >> fvDigiBmon;
++uPartIdx;
/// (3) STS
......@@ -895,7 +904,7 @@ CbmEventTimeslice::CbmEventTimeslice(FairMQParts& parts, bool bDigiEvtInput)
inputArchiveTrd >> fvDigiTrd;
++uPartIdx;
/// (6) T0F
/// (6) BmonF
std::string msgStrTof(static_cast<char*>(parts.At(uPartIdx)->GetData()), (parts.At(uPartIdx))->GetSize());
std::istringstream issTof(msgStrTof);
boost::archive::binary_iarchive inputArchiveTof(issTof);
......@@ -947,7 +956,7 @@ CbmEventTimeslice::CbmEventTimeslice(FairMQParts& parts, bool bDigiEvtInput)
CbmEventTimeslice::~CbmEventTimeslice()
{
fvDigiT0.clear();
fvDigiBmon.clear();
fvDigiSts.clear();
fvDigiMuch.clear();
fvDigiTrd.clear();
......@@ -958,7 +967,7 @@ CbmEventTimeslice::~CbmEventTimeslice()
fvDigiEvents.clear();
}
void CbmEventTimeslice::ExtractSelectedData()
void CbmEventTimeslice::ExtractSelectedData(bool bExclusiveTrdExtract)
{
fvDigiEvents.reserve(fvEvents.size());
......@@ -968,10 +977,11 @@ void CbmEventTimeslice::ExtractSelectedData()
selEvent.fTime = event.GetStartTime();
selEvent.fNumber = event.GetNumber();
/// FIXME: for pure digi based event, we select "continuous slices of digis"
/// For pure digi based event, we select "continuous slices of digis"
/// => Copy block of [First Digi index, last digi index] with assign(it_start, it_stop)
/// FIXME: Keep TRD1D + TRD2D support, may lead to holes in the digi sequence!
/// => Would need to keep the loop
/// => No data increase for most detectors as we use time window selection
/// Keep TRD1D + TRD2D support as single det, otherwise may lead to holes in the digi sequence!
/// => Need option to keep the loop to avoid adding extra digis if comparison to CbmEvents wanted
/// Get the proper order for block selection as TRD1D and TRD2D may insert indices in separate loops
/// => Needed to ensure that the start and stop of the block copy do not trigger a vector size exception
......@@ -979,29 +989,13 @@ void CbmEventTimeslice::ExtractSelectedData()
/// for each detector, find the data in the Digi vectors and copy them
/// TODO: Template + loop on list of data types?
/// ==> T0
uint32_t uNbDigis = (0 < event.GetNofData(ECbmDataType::kT0Digi) ? event.GetNofData(ECbmDataType::kT0Digi) : 0);
/// ==> Bmon
uint32_t uNbDigis = (0 < event.GetNofData(ECbmDataType::kBmonDigi) ? event.GetNofData(ECbmDataType::kBmonDigi) : 0);
if (uNbDigis) {
auto startIt = fvDigiT0.begin() + event.GetIndex(ECbmDataType::kT0Digi, 0);
auto stopIt = fvDigiT0.begin() + event.GetIndex(ECbmDataType::kT0Digi, uNbDigis - 1);
auto startIt = fvDigiBmon.begin() + event.GetIndex(ECbmDataType::kBmonDigi, 0);
auto stopIt = fvDigiBmon.begin() + event.GetIndex(ECbmDataType::kBmonDigi, uNbDigis - 1);
++stopIt;
selEvent.fData.fT0.fDigis.assign(startIt, stopIt);
/*
uint32_t uPrevIdx = event.GetIndex(ECbmDataType::kT0Digi, 0);
uint32_t uNbExtra = 0;
for (uint32_t uDigiIdx = 1; uDigiIdx < uNbDigis; ++uDigiIdx) {
// selEvent.fData.fT0.fDigis.push_back(fvDigiT0[event.GetIndex(ECbmDataType::kT0Digi, uDigiIdx)]);
if (uPrevIdx + 1 != event.GetIndex(ECbmDataType::kT0Digi, uDigiIdx)) {
uNbExtra += event.GetIndex(ECbmDataType::kT0Digi, uDigiIdx) - (uPrevIdx + 1);
}
uPrevIdx = event.GetIndex(ECbmDataType::kT0Digi, uDigiIdx);
}
if (0 < uNbExtra) {
LOG(info) << "In event " << event.GetNumber() << " the T0 block selection added " << uNbExtra
<< " extra digis compared to the loop one";
}
*/
selEvent.fData.fBmon.fDigis.assign(startIt, stopIt);
}
/// ==> STS
......@@ -1011,22 +1005,6 @@ void CbmEventTimeslice::ExtractSelectedData()
auto stopIt = fvDigiSts.begin() + event.GetIndex(ECbmDataType::kStsDigi, uNbDigis - 1);
++stopIt;
selEvent.fData.fSts.fDigis.assign(startIt, stopIt);
/*
uint32_t uPrevIdx = event.GetIndex(ECbmDataType::kStsDigi, 0);
uint32_t uNbExtra = 0;
for (uint32_t uDigiIdx = 1; uDigiIdx < uNbDigis; ++uDigiIdx) {
// selEvent.fData.fSts.fDigis.push_back(fvDigiSts[event.GetIndex(ECbmDataType::kStsDigi, uDigiIdx)]);
if (uPrevIdx + 1 != event.GetIndex(ECbmDataType::kStsDigi, uDigiIdx)) {
uNbExtra += event.GetIndex(ECbmDataType::kStsDigi, uDigiIdx) - (uPrevIdx + 1);
}
uPrevIdx = event.GetIndex(ECbmDataType::kStsDigi, uDigiIdx);
}
if (0 < uNbExtra) {
LOG(info) << "In event " << event.GetNumber() << " the STS block selection added " << uNbExtra
<< " extra digis compared to the loop one";
}
*/
}
/// ==> MUCH
......@@ -1036,49 +1014,30 @@ void CbmEventTimeslice::ExtractSelectedData()
auto stopIt = fvDigiMuch.begin() + event.GetIndex(ECbmDataType::kMuchDigi, uNbDigis - 1);
++stopIt;
selEvent.fData.fMuch.fDigis.assign(startIt, stopIt);
/*
uint32_t uPrevIdx = event.GetIndex(ECbmDataType::kMuchDigi, 0);
uint32_t uNbExtra = 0;
for (uint32_t uDigiIdx = 1; uDigiIdx < uNbDigis; ++uDigiIdx) {
// selEvent.fData.fMuch.fDigis.push_back(fvDigiMuch[event.GetIndex(ECbmDataType::kMuchDigi, uDigiIdx)]);
if (uPrevIdx + 1 != event.GetIndex(ECbmDataType::kMuchDigi, uDigiIdx)) {
uNbExtra += event.GetIndex(ECbmDataType::kMuchDigi, uDigiIdx) - (uPrevIdx + 1);
}
uPrevIdx = event.GetIndex(ECbmDataType::kMuchDigi, uDigiIdx);
}
if (0 < uNbExtra) {
LOG(info) << "In event " << event.GetNumber() << " the MUCH block selection added " << uNbExtra
<< " extra digis compared to the loop one";
}
*/
}
/// ==> TRD + TRD2D
uNbDigis = (0 < event.GetNofData(ECbmDataType::kTrdDigi) ? event.GetNofData(ECbmDataType::kTrdDigi) : 0);
if (uNbDigis) {
auto startIt = fvDigiTrd.begin() + event.GetIndex(ECbmDataType::kTrdDigi, 0);
auto stopIt = fvDigiTrd.begin() + event.GetIndex(ECbmDataType::kTrdDigi, uNbDigis - 1);
++stopIt;
selEvent.fData.fTrd.fDigis.assign(startIt, stopIt);
/*
uint32_t uPrevIdx = event.GetIndex(ECbmDataType::kTrdDigi, 0);
uint32_t uNbExtra = 0;
for (uint32_t uDigiIdx = 1; uDigiIdx < uNbDigis; ++uDigiIdx) {
// selEvent.fData.fTrd.fDigis.push_back(fvDigiTrd[event.GetIndex(ECbmDataType::kTrdDigi, uDigiIdx)]);
if (uPrevIdx + 1 != event.GetIndex(ECbmDataType::kTrdDigi, uDigiIdx)) {
uNbExtra += event.GetIndex(ECbmDataType::kTrdDigi, uDigiIdx) - (uPrevIdx + 1);
LOG(info) << "Extra TRD digi: prev is " << uPrevIdx << " vs new " << event.GetIndex(ECbmDataType::kTrdDigi, uDigiIdx)
<< " index " << uDigiIdx << " out of " << uNbDigis;
if (bExclusiveTrdExtract) {
for (uint32_t uDigiInEvt = 0; uDigiInEvt < uNbDigis; ++uDigiInEvt) {
/// Copy each digi in the event by itself to make sure we skip ones outside their own selection window but
/// inside the selection window of the other TRD subsystem, effectively enforcing differetn windows:
/// [t, t+dt](TRD) = [t, t+dt](TRD1D) + [t, t+dt](TRD2D)
/// => Exclusive but slower
selEvent.fData.fTrd.fDigis.push_back(fvDigiTrd[event.GetIndex(ECbmDataType::kTrdDigi, uDigiInEvt)]);
}
uPrevIdx = event.GetIndex(ECbmDataType::kTrdDigi, uDigiIdx);
}
if (0 < uNbExtra) {
LOG(info) << "In event " << event.GetNumber() << " the TRD block selection added " << uNbExtra
<< " extra digis compared to the loop one";
else {
/// Block copy of all TRD digis, has feature that it may include digis which are not matching the selection
/// window of a given TRD subsystem, effectively making a larger selection window:
/// [t, t+dt](TRD) = [t, t+dt](TRD1D) U [t, t+dt](TRD2D)
/// => Faster but inclusive, will lead to more TRD hits and tracks than expected
auto startIt = fvDigiTrd.begin() + event.GetIndex(ECbmDataType::kTrdDigi, 0);
auto stopIt = fvDigiTrd.begin() + event.GetIndex(ECbmDataType::kTrdDigi, uNbDigis - 1);
++stopIt;
selEvent.fData.fTrd.fDigis.assign(startIt, stopIt);
}
*/
}
/// ==> TOF
......@@ -1088,22 +1047,6 @@ void CbmEventTimeslice::ExtractSelectedData()
auto stopIt = fvDigiTof.begin() + event.GetIndex(ECbmDataType::kTofDigi, uNbDigis - 1);
++stopIt;
selEvent.fData.fTof.fDigis.assign(startIt, stopIt);
/*
uint32_t uPrevIdx = event.GetIndex(ECbmDataType::kTofDigi, 0);
uint32_t uNbExtra = 0;
for (uint32_t uDigiIdx = 1; uDigiIdx < uNbDigis; ++uDigiIdx) {
// selEvent.fData.fTof.fDigis.push_back(fvDigiTof[event.GetIndex(ECbmDataType::kTofDigi, uDigiIdx)]);
if (uPrevIdx + 1 != event.GetIndex(ECbmDataType::kTofDigi, uDigiIdx)) {
uNbExtra += event.GetIndex(ECbmDataType::kTofDigi, uDigiIdx) - (uPrevIdx + 1);
}
uPrevIdx = event.GetIndex(ECbmDataType::kTofDigi, uDigiIdx);
}
if (0 < uNbExtra) {
LOG(info) << "In event " << event.GetNumber() << " the TOF block selection added " << uNbExtra
<< " extra digis compared to the loop one";
}
*/
}
/// ==> RICH
......@@ -1113,22 +1056,6 @@ void CbmEventTimeslice::ExtractSelectedData()
auto stopIt = fvDigiRich.begin() + event.GetIndex(ECbmDataType::kRichDigi, uNbDigis - 1);
++stopIt;
selEvent.fData.fRich.fDigis.assign(startIt, stopIt);
/*
uint32_t uPrevIdx = event.GetIndex(ECbmDataType::kRichDigi, 0);
uint32_t uNbExtra = 0;
for (uint32_t uDigiIdx = 1; uDigiIdx < uNbDigis; ++uDigiIdx) {
// selEvent.fData.fRich.fDigis.push_back(fvDigiRich[event.GetIndex(ECbmDataType::kRichDigi, uDigiIdx)]);
if (uPrevIdx + 1 != event.GetIndex(ECbmDataType::kRichDigi, uDigiIdx)) {
uNbExtra += event.GetIndex(ECbmDataType::kRichDigi, uDigiIdx) - (uPrevIdx + 1);
}
uPrevIdx = event.GetIndex(ECbmDataType::kRichDigi, uDigiIdx);
}
if (0 < uNbExtra) {
LOG(info) << "In event " << event.GetNumber() << " the RICH block selection added " << uNbExtra
<< " extra digis compared to the loop one";
}
*/
}
/// ==> PSD
......@@ -1138,22 +1065,6 @@ void CbmEventTimeslice::ExtractSelectedData()
auto stopIt = fvDigiPsd.begin() + event.GetIndex(ECbmDataType::kPsdDigi, uNbDigis - 1);
++stopIt;
selEvent.fData.fPsd.fDigis.assign(startIt, stopIt);
/*
uint32_t uPrevIdx = event.GetIndex(ECbmDataType::kPsdDigi, 0);
uint32_t uNbExtra = 0;
for (uint32_t uDigiIdx = 1; uDigiIdx < uNbDigis; ++uDigiIdx) {
// selEvent.fData.fPsd.fDigis.push_back(fvDigiPsd[event.GetIndex(ECbmDataType::kPsdDigi, uDigiIdx)]);
if (uPrevIdx + 1 != event.GetIndex(ECbmDataType::kPsdDigi, uDigiIdx)) {
uNbExtra += event.GetIndex(ECbmDataType::kPsdDigi, uDigiIdx) - (uPrevIdx + 1);
}
uPrevIdx = event.GetIndex(ECbmDataType::kPsdDigi, uDigiIdx);
}
if (0 < uNbExtra) {
LOG(info) << "In event " << event.GetNumber() << " the PSD block selection added " << uNbExtra
<< " extra digis compared to the loop one";
}
*/
}
fvDigiEvents.push_back(selEvent);
......
......@@ -13,6 +13,7 @@
#define CBMDEVICEDIGIEVTSINK_H_
/// CBM headers
#include "CbmBmonDigi.h"
#include "CbmDigiEvent.h"
#include "CbmEvent.h"
#include "CbmMqTMessage.h"
......@@ -55,10 +56,10 @@ public:
CbmEventTimeslice(FairMQParts& parts, bool bDigiEvtInput = false);
~CbmEventTimeslice();
void ExtractSelectedData();
std::vector<CbmDigiEvent>& GetSelectedData()
void ExtractSelectedData(bool bExclusiveTrdExtract = true);
std::vector<CbmDigiEvent>& GetSelectedData(bool bExclusiveTrdExtract = true)
{
if (!fbDigiEvtInput) ExtractSelectedData();
if (!fbDigiEvtInput) ExtractSelectedData(bExclusiveTrdExtract);
return fvDigiEvents;
}
......@@ -67,7 +68,7 @@ public:
/// TS information in header
CbmTsEventHeader fCbmTsEventHeader;
/// Raw data
std::vector<CbmTofDigi> fvDigiT0;
std::vector<CbmBmonDigi> fvDigiBmon;
std::vector<CbmStsDigi> fvDigiSts;
std::vector<CbmMuchDigi> fvDigiMuch;
std::vector<CbmTrdDigi> fvDigiTrd;
......@@ -92,6 +93,7 @@ protected:
bool HandleMissTsData(FairMQMessagePtr&, int);
bool HandleData(FairMQParts&, int);
bool HandleCommand(FairMQMessagePtr&, int);
virtual void PostRun();
private:
/// Constants
......@@ -102,6 +104,7 @@ private:
bool fbWriteMissingTs = false; //! Switch ON/OFF writing of empty TS to file for the missing ones (if no bypass)
bool fbDisableCompression = false; //! Switch ON/OFF the ROOT file compression
bool fbDigiEventInput = false; //! Switch ON/OFF the input of CbmDigiEvents instead of raw data + CbmEvents
bool fbExclusiveTrdExtract = true; //! Switch ON/OFF loop based extraction of TRD digis due to 1D/2D
bool fbFillHistos = false; //! Switch ON/OFF filling of histograms
bool fbInitDone = false; //! Keep track of whether the Init was already fully completed
bool fbFinishDone = false; //! Keep track of whether the Finish was already called
......@@ -156,7 +159,7 @@ private:
/// CbmEvents
std::vector<CbmDigiEvent>* fEventsSel = nullptr; //! output container of CbmEvents
/// Full TS Digis storage (optional usage, controlled by fbStoreFullTs!)
std::vector<CbmTofDigi>* fvDigiT0 = nullptr;
std::vector<CbmBmonDigi>* fvDigiBmon = nullptr;
std::vector<CbmStsDigi>* fvDigiSts = nullptr;
std::vector<CbmMuchDigi>* fvDigiMuch = nullptr;
std::vector<CbmTrdDigi>* fvDigiTrd = nullptr;
......
......@@ -52,7 +52,7 @@ struct InitTaskError : std::runtime_error {
using namespace std;
//Bool_t bMcbm2018MonitorTaskT0ResetHistos = kFALSE;
//Bool_t bMcbm2018MonitorTaskBmonResetHistos = kFALSE;
CbmDeviceMcbmEventBuilderWin::CbmDeviceMcbmEventBuilderWin() { fpAlgo = new CbmMcbm2019TimeWinEventBuilderAlgo(); }
......@@ -116,7 +116,7 @@ try {
: EOverlapMode::NoOverlap)));
fpAlgo->SetEventOverlapMode(mode);
/// Extract refdet
EventBuilderDetector refDet = ("kT0" == fsRefDet ? kEventBuilderDetT0
EventBuilderDetector refDet = ("kBmon" == fsRefDet ? kEventBuilderDetBmon
: ("kSts" == fsRefDet ? kEventBuilderDetSts
: ("kMuch" == fsRefDet ? kEventBuilderDetMuch
: ("kTrd" == fsRefDet ? kEventBuilderDetTrd
......@@ -137,7 +137,7 @@ try {
for (std::vector<std::string>::iterator itStrAdd = fvsAddDet.begin();
itStrAdd != fvsAddDet.end();
++itStrAdd) {
EventBuilderDetector addDet = ("kT0" == *itStrAdd ? kEventBuilderDetT0
EventBuilderDetector addDet = ("kBmon" == *itStrAdd ? kEventBuilderDetBmon
: ("kSts" == *itStrAdd ? kEventBuilderDetSts
: ("kMuch" == *itStrAdd ? kEventBuilderDetMuch
: ("kTrd" == *itStrAdd ? kEventBuilderDetTrd
......@@ -160,7 +160,7 @@ try {
for (std::vector<std::string>::iterator itStrRem = fvsDelDet.begin();
itStrRem != fvsDelDet.end();
++itStrRem) {
EventBuilderDetector remDet = ("kT0" == *itStrRem ? kEventBuilderDetT0
EventBuilderDetector remDet = ("kBmon" == *itStrRem ? kEventBuilderDetBmon
: ("kSts" == *itStrRem ? kEventBuilderDetSts
: ("kMuch" == *itStrRem ? kEventBuilderDetMuch
: ("kTrd" == *itStrRem ? kEventBuilderDetTrd
......@@ -194,7 +194,7 @@ try {
/// Detector Enum Tag
std::string sSelDet = (*itStrTrigWin).substr(0, charPosDel);
ECbmModuleId selDet = ("kT0" == sSelDet ? ECbmModuleId::kT0
ECbmModuleId selDet = ("kBmon" == sSelDet ? ECbmModuleId::kBmon
: ("kSts" == sSelDet ? ECbmModuleId::kSts
: ("kMuch" == sSelDet ? ECbmModuleId::kMuch
: ("kTrd" == sSelDet ? ECbmModuleId::kTrd
......@@ -246,7 +246,7 @@ try {
/// Detector Enum Tag
std::string sSelDet = (*itStrMinNb).substr(0, charPosDel);
ECbmModuleId selDet = ("kT0" == sSelDet ? ECbmModuleId::kT0
ECbmModuleId selDet = ("kBmon" == sSelDet ? ECbmModuleId::kBmon
: ("kSts" == sSelDet ? ECbmModuleId::kSts
: ("kMuch" == sSelDet ? ECbmModuleId::kMuch
: ("kTrd" == sSelDet ? ECbmModuleId::kTrd
......@@ -273,7 +273,7 @@ try {
/* clang-format on */
/// Create input vectors
fvDigiT0 = new std::vector<CbmTofDigi>();
fvDigiBmon = new std::vector<CbmTofDigi>();
fvDigiSts = new std::vector<CbmStsDigi>();
fvDigiMuch = new std::vector<CbmMuchBeamTimeDigi>();
fvDigiTrd = new std::vector<CbmTrdDigi>();
......@@ -290,7 +290,7 @@ try {
if (NULL == fTimeSliceMetaDataArray) { throw InitTaskError("Failed creating the TS meta data TClonesarray "); }
ioman->Register("TimesliceMetaData", "TS Meta Data", fTimeSliceMetaDataArray, kFALSE);
/// Digis storage
ioman->RegisterAny("T0Digi", fvDigiT0, kFALSE);
ioman->RegisterAny("BmonDigi", fvDigiBmon, kFALSE);
ioman->RegisterAny("StsDigi", fvDigiSts, kFALSE);
ioman->RegisterAny("MuchBeamTimeDigi", fvDigiMuch, kFALSE);
ioman->RegisterAny("TrdDigi", fvDigiTrd, kFALSE);
......@@ -492,11 +492,11 @@ bool CbmDeviceMcbmEventBuilderWin::HandleData(FairMQParts& parts, int /*index*/)
]) TimesliceMetaData(std::move(*fTsMetaData));
++uPartIdx;
/// T0
std::string msgStrT0(static_cast<char*>(parts.At(uPartIdx)->GetData()), (parts.At(uPartIdx))->GetSize());
std::istringstream issT0(msgStrT0);
boost::archive::binary_iarchive inputArchiveT0(issT0);
inputArchiveT0 >> *fvDigiT0;
/// BMON
std::string msgStrBmon(static_cast<char*>(parts.At(uPartIdx)->GetData()), (parts.At(uPartIdx))->GetSize());
std::istringstream issBmon(msgStrBmon);
boost::archive::binary_iarchive inputArchiveBmon(issBmon);
inputArchiveBmon >> *fvDigiBmon;
++uPartIdx;
/// STS
......@@ -520,7 +520,7 @@ bool CbmDeviceMcbmEventBuilderWin::HandleData(FairMQParts& parts, int /*index*/)
inputArchiveTrd >> *fvDigiTrd;
++uPartIdx;
/// T0F
/// TOF
std::string msgStrTof(static_cast<char*>(parts.At(uPartIdx)->GetData()), (parts.At(uPartIdx))->GetSize());
std::istringstream issTof(msgStrTof);
boost::archive::binary_iarchive inputArchiveTof(issTof);
......@@ -552,7 +552,7 @@ bool CbmDeviceMcbmEventBuilderWin::HandleData(FairMQParts& parts, int /*index*/)
// delete fTsMetaData;
/// Clear vectors
fvDigiT0->clear();
fvDigiBmon->clear();
fvDigiSts->clear();
fvDigiMuch->clear();
fvDigiTrd->clear();
......@@ -660,7 +660,7 @@ CbmDeviceMcbmEventBuilderWin::~CbmDeviceMcbmEventBuilderWin()
delete fTsMetaData;
/// Clear vectors
fvDigiT0->clear();
fvDigiBmon->clear();
fvDigiSts->clear();
fvDigiMuch->clear();
fvDigiTrd->clear();
......
......@@ -59,7 +59,7 @@ private:
/// User settings parameters
/// Algo enum settings
std::string fsEvtOverMode = "NoOverlap";
std::string fsRefDet = "kT0";
std::string fsRefDet = "kBmon";
std::vector<std::string> fvsAddDet = {};
std::vector<std::string> fvsDelDet = {};
std::vector<std::string> fvsSetTrigWin = {};
......@@ -104,7 +104,7 @@ private:
TClonesArray* fTimeSliceMetaDataArray = nullptr; //!
TimesliceMetaData* fTsMetaData = nullptr;
/// Digis storage
std::vector<CbmTofDigi>* fvDigiT0 = nullptr;
std::vector<CbmTofDigi>* fvDigiBmon = nullptr;
std::vector<CbmStsDigi>* fvDigiSts = nullptr;
std::vector<CbmMuchBeamTimeDigi>* fvDigiMuch = nullptr;
std::vector<CbmTrdDigi>* fvDigiTrd = nullptr;
......
......@@ -54,7 +54,7 @@ struct InitTaskError : std::runtime_error {
using namespace std;
//Bool_t bMcbm2018MonitorTaskT0ResetHistos = kFALSE;
//Bool_t bMcbm2018MonitorTaskBmonResetHistos = kFALSE;
CbmDeviceMcbmEventSink::CbmDeviceMcbmEventSink() {}
......@@ -105,7 +105,7 @@ try {
// InitContainers();
/// Create input vectors
fvDigiT0 = new std::vector<CbmTofDigi>();
fvDigiBmon = new std::vector<CbmTofDigi>();
fvDigiSts = new std::vector<CbmStsDigi>();
fvDigiMuch = new std::vector<CbmMuchBeamTimeDigi>();
fvDigiTrd = new std::vector<CbmTrdDigi>();
......@@ -151,7 +151,7 @@ try {
/// TS MetaData
fpFairRootMgr->Register("TimesliceMetaData", "TS Meta Data", fTimeSliceMetaDataArray, kTRUE);
/// Digis storage
fpFairRootMgr->RegisterAny("T0Digi", fvDigiT0, kTRUE);
fpFairRootMgr->RegisterAny("BmonDigi", fvDigiBmon, kTRUE);
fpFairRootMgr->RegisterAny("StsDigi", fvDigiSts, kTRUE);
fpFairRootMgr->RegisterAny("MuchBeamTimeDigi", fvDigiMuch, kTRUE);
fpFairRootMgr->RegisterAny("TrdDigi", fvDigiTrd, kTRUE);
......@@ -541,15 +541,15 @@ void CbmDeviceMcbmEventSink::PrepareTreeEntry(CbmUnpackedTimeslice unpTs)
/*
/// Explicit copy version: safe but slow
/// T0
fvDigiT0->insert( fvDigiT0->end(), unpTs.fvDigiT0.begin(), unpTs.fvDigiT0.end() );
/// Bmon
fvDigiBmon->insert( fvDigiBmon->end(), unpTs.fvDigiBmon.begin(), unpTs.fvDigiBmon.end() );
/// STS
fvDigiSts->insert( fvDigiSts->end(), unpTs.fvDigiSts.begin(), unpTs.fvDigiSts.end() );
/// MUCH
fvDigiMuch->insert( fvDigiMuch->end(), unpTs.fvDigiMuch.begin(), unpTs.fvDigiMuch.end() );
/// TRD
fvDigiTrd->insert( fvDigiTrd->end(), unpTs.fvDigiTrd.begin(), unpTs.fvDigiTrd.end() );
/// T0F
/// BmonF
fvDigiTof->insert( fvDigiTof->end(), unpTs.fvDigiTof.begin(), unpTs.fvDigiTof.end() );
/// RICH
fvDigiRich->insert( fvDigiRich->end(), unpTs.fvDigiRich.begin(), unpTs.fvDigiRich.end() );
......@@ -557,15 +557,15 @@ void CbmDeviceMcbmEventSink::PrepareTreeEntry(CbmUnpackedTimeslice unpTs)
fvDigiPsd->insert( fvDigiPsd->end(), unpTs.fvDigiPsd.begin(), unpTs.fvDigiPsd.end() );
*/
/// move version: safe but slow
/// T0
(*fvDigiT0) = std::move(unpTs.fvDigiT0);
/// Bmon
(*fvDigiBmon) = std::move(unpTs.fvDigiBmon);
/// STS
(*fvDigiSts) = std::move(unpTs.fvDigiSts);
/// MUCH
(*fvDigiMuch) = std::move(unpTs.fvDigiMuch);
/// TRD
(*fvDigiTrd) = std::move(unpTs.fvDigiTrd);
/// T0F
/// BmonF
(*fvDigiTof) = std::move(unpTs.fvDigiTof);
/// RICH
(*fvDigiRich) = std::move(unpTs.fvDigiRich);
......@@ -597,7 +597,7 @@ void CbmDeviceMcbmEventSink::DumpTreeEntry()
fTimeSliceMetaDataArray->Clear();
/// Clear vectors
fvDigiT0->clear();
fvDigiBmon->clear();
fvDigiSts->clear();
fvDigiMuch->clear();
fvDigiTrd->clear();
......@@ -645,7 +645,7 @@ CbmDeviceMcbmEventSink::~CbmDeviceMcbmEventSink()
delete fTsMetaData;
/// Clear vectors
fvDigiT0->clear();
fvDigiBmon->clear();
fvDigiSts->clear();
fvDigiMuch->clear();
fvDigiTrd->clear();
......@@ -703,11 +703,11 @@ CbmUnpackedTimeslice::CbmUnpackedTimeslice(FairMQParts& parts) : fEventsArray("C
fTsMetaData = *(static_cast<TimesliceMetaData*>(tempObjectMeta));
} // if( TString( tempObject->ClassName() ).EqualTo( "TClonesArray") )
/// T0
std::string msgStrT0(static_cast<char*>(parts.At(uPartIdx)->GetData()), (parts.At(uPartIdx))->GetSize());
std::istringstream issT0(msgStrT0);
boost::archive::binary_iarchive inputArchiveT0(issT0);
inputArchiveT0 >> fvDigiT0;
/// Bmon
std::string msgStrBmon(static_cast<char*>(parts.At(uPartIdx)->GetData()), (parts.At(uPartIdx))->GetSize());
std::istringstream issBmon(msgStrBmon);
boost::archive::binary_iarchive inputArchiveBmon(issBmon);
inputArchiveBmon >> fvDigiBmon;
++uPartIdx;
/// STS
......@@ -731,7 +731,7 @@ CbmUnpackedTimeslice::CbmUnpackedTimeslice(FairMQParts& parts) : fEventsArray("C
inputArchiveTrd >> fvDigiTrd;
++uPartIdx;
/// T0F
/// BmonF
std::string msgStrTof(static_cast<char*>(parts.At(uPartIdx)->GetData()), (parts.At(uPartIdx))->GetSize());
std::istringstream issTof(msgStrTof);
boost::archive::binary_iarchive inputArchiveTof(issTof);
......@@ -767,7 +767,7 @@ CbmUnpackedTimeslice::CbmUnpackedTimeslice(FairMQParts& parts) : fEventsArray("C
CbmUnpackedTimeslice::~CbmUnpackedTimeslice()
{
fvDigiT0.clear();
fvDigiBmon.clear();
fvDigiSts.clear();
fvDigiMuch.clear();
fvDigiTrd.clear();
......
......@@ -51,7 +51,7 @@ public:
~CbmUnpackedTimeslice();
TimesliceMetaData fTsMetaData;
std::vector<CbmTofDigi> fvDigiT0;
std::vector<CbmTofDigi> fvDigiBmon;
std::vector<CbmStsDigi> fvDigiSts;
std::vector<CbmMuchBeamTimeDigi> fvDigiMuch;
std::vector<CbmTrdDigi> fvDigiTrd;
......@@ -120,7 +120,7 @@ private:
TClonesArray* fTimeSliceMetaDataArray = nullptr; //!
TimesliceMetaData* fTsMetaData = nullptr;
/// Digis storage
std::vector<CbmTofDigi>* fvDigiT0 = nullptr;
std::vector<CbmTofDigi>* fvDigiBmon = nullptr;
std::vector<CbmStsDigi>* fvDigiSts = nullptr;
std::vector<CbmMuchBeamTimeDigi>* fvDigiMuch = nullptr;
std::vector<CbmTrdDigi>* fvDigiTrd = nullptr;
......
......@@ -272,10 +272,10 @@ bool CbmDeviceMcbmMonitorPulser::HandleData(FairMQParts& parts, int /*index*/)
RootSerializer().Deserialize(*parts.At(uPartIdx), fTsMetaData);
++uPartIdx;
std::string msgStrT0(static_cast<char*>(parts.At(uPartIdx)->GetData()), (parts.At(uPartIdx))->GetSize());
std::istringstream issT0(msgStrT0);
boost::archive::binary_iarchive inputArchiveT0(issT0);
inputArchiveT0 >> fvDigiT0;
std::string msgStrBmon(static_cast<char*>(parts.At(uPartIdx)->GetData()), (parts.At(uPartIdx))->GetSize());
std::istringstream issBmon(msgStrBmon);
boost::archive::binary_iarchive inputArchiveBmon(issBmon);
inputArchiveBmon >> fvDigiBmon;
++uPartIdx;
std::string msgStrSts(static_cast<char*>(parts.At(uPartIdx)->GetData()), (parts.At(uPartIdx))->GetSize());
......@@ -318,7 +318,7 @@ bool CbmDeviceMcbmMonitorPulser::HandleData(FairMQParts& parts, int /*index*/)
/// Clear vectors
delete fTsMetaData;
fvDigiT0.clear();
fvDigiBmon.clear();
fvDigiSts.clear();
fvDigiMuch.clear();
fvDigiTrd.clear();
......
......@@ -91,7 +91,7 @@ private:
/// TS MetaData storage
TimesliceMetaData* fTsMetaData = nullptr;
/// Digis storage
std::vector<CbmTofDigi> fvDigiT0 = {};
std::vector<CbmTofDigi> fvDigiBmon = {};
std::vector<CbmStsDigi> fvDigiSts = {};
std::vector<CbmMuchBeamTimeDigi> fvDigiMuch = {};
std::vector<CbmTrdDigi> fvDigiTrd = {};
......@@ -128,7 +128,7 @@ private:
void CreateHistos();
/// Variables to store the previous digi time
Double_t fPrevTimeT0 = 0.;
Double_t fPrevTimeBmon = 0.;
Double_t fPrevTimeSts = 0.;
Double_t fPrevTimeMuch = 0.;
Double_t fPrevTimeTrd = 0.;
......@@ -136,19 +136,19 @@ private:
Double_t fPrevTimeRich = 0.;
Double_t fPrevTimePsd = 0.;
/// Variables to store the first digi fitting the previous T0 hits
/// Variables to store the first digi fitting the previous Bmon hits
/// => Time-order means the time window for following one can only be in a later digi
Int_t fPrevT0FirstDigiSts = 0;
Int_t fPrevT0FirstDigiMuch = 0;
Int_t fPrevT0FirstDigiTrd = 0;
Int_t fPrevT0FirstDigiTof = 0;
Int_t fPrevT0FirstDigiRich = 0;
Int_t fPrevT0FirstDigiPsd = 0;
Int_t fPrevBmonFirstDigiSts = 0;
Int_t fPrevBmonFirstDigiMuch = 0;
Int_t fPrevBmonFirstDigiTrd = 0;
Int_t fPrevBmonFirstDigiTof = 0;
Int_t fPrevBmonFirstDigiRich = 0;
Int_t fPrevBmonFirstDigiPsd = 0;
/// User settings: Data correction parameters
/// Charge cut
UInt_t fuMinTotPulserT0 = 182;
UInt_t fuMaxTotPulserT0 = 190;
UInt_t fuMinTotPulserBmon = 182;
UInt_t fuMaxTotPulserBmon = 190;
UInt_t fuMinAdcPulserSts = 90;
UInt_t fuMaxAdcPulserSts = 100;
UInt_t fuMinAdcPulserMuch = 5;
......@@ -184,37 +184,37 @@ private:
Int_t fBinWidth = 1;
TH1* fT0StsDiff = nullptr;
TH1* fT0MuchDiff = nullptr;
TH1* fT0TrdDiff = nullptr;
TH1* fT0TofDiff = nullptr;
TH1* fT0RichDiff = nullptr;
TH1* fT0PsdDiff = nullptr;
TH2* fT0PsdDiffCharge = nullptr;
TH2* fT0StsDiffEvo = nullptr;
TH2* fT0MuchDiffEvo = nullptr;
TH2* fT0TrdDiffEvo = nullptr;
TH2* fT0TofDiffEvo = nullptr;
TH2* fT0RichDiffEvo = nullptr;
TH2* fT0PsdDiffEvo = nullptr;
TH2* fT0StsDiffEvoLong = nullptr;
TH2* fT0MuchDiffEvoLong = nullptr;
TH2* fT0TrdDiffEvoLong = nullptr;
TH2* fT0TofDiffEvoLong = nullptr;
TH2* fT0RichDiffEvoLong = nullptr;
TH2* fT0PsdDiffEvoLong = nullptr;
TH1* fBmonStsDiff = nullptr;
TH1* fBmonMuchDiff = nullptr;
TH1* fBmonTrdDiff = nullptr;
TH1* fBmonTofDiff = nullptr;
TH1* fBmonRichDiff = nullptr;
TH1* fBmonPsdDiff = nullptr;
TH2* fBmonPsdDiffCharge = nullptr;
TH2* fBmonStsDiffEvo = nullptr;
TH2* fBmonMuchDiffEvo = nullptr;
TH2* fBmonTrdDiffEvo = nullptr;
TH2* fBmonTofDiffEvo = nullptr;
TH2* fBmonRichDiffEvo = nullptr;
TH2* fBmonPsdDiffEvo = nullptr;
TH2* fBmonStsDiffEvoLong = nullptr;
TH2* fBmonMuchDiffEvoLong = nullptr;
TH2* fBmonTrdDiffEvoLong = nullptr;
TH2* fBmonTofDiffEvoLong = nullptr;
TH2* fBmonRichDiffEvoLong = nullptr;
TH2* fBmonPsdDiffEvoLong = nullptr;
Double_t fdStartTime = -1;
TProfile* fT0StsMeanEvo = nullptr;
TProfile* fT0MuchMeanEvo = nullptr;
TProfile* fT0TrdMeanEvo = nullptr;
TProfile* fT0TofMeanEvo = nullptr;
TProfile* fT0RichMeanEvo = nullptr;
TProfile* fT0PsdMeanEvo = nullptr;
TH1* fT0T0Diff = nullptr;
TProfile* fBmonStsMeanEvo = nullptr;
TProfile* fBmonMuchMeanEvo = nullptr;
TProfile* fBmonTrdMeanEvo = nullptr;
TProfile* fBmonTofMeanEvo = nullptr;
TProfile* fBmonRichMeanEvo = nullptr;
TProfile* fBmonPsdMeanEvo = nullptr;
TH1* fBmonBmonDiff = nullptr;
TH1* fStsStsDiff = nullptr;
TH1* fMuchMuchDiff = nullptr;
TH1* fTrdTrdDiff = nullptr;
......@@ -222,14 +222,14 @@ private:
TH1* fRichRichDiff = nullptr;
TH1* fPsdPsdDiff = nullptr;
TH2* fT0StsNb = nullptr;
TH2* fT0MuchNb = nullptr;
TH2* fT0TrdNb = nullptr;
TH2* fT0TofNb = nullptr;
TH2* fT0RichNb = nullptr;
TH2* fT0PsdNb = nullptr;
TH2* fBmonStsNb = nullptr;
TH2* fBmonMuchNb = nullptr;
TH2* fBmonTrdNb = nullptr;
TH2* fBmonTofNb = nullptr;
TH2* fBmonRichNb = nullptr;
TH2* fBmonPsdNb = nullptr;
Int_t fiT0Nb = 0;
Int_t fiBmonNb = 0;
Int_t fiStsNb = 0;
Int_t fiMuchNb = 0;
Int_t fiTrdNb = 0;
......@@ -237,25 +237,25 @@ private:
Int_t fiRichNb = 0;
Int_t fiPsdNb = 0;
TH1* fT0Address = nullptr;
TH1* fT0Channel = nullptr;
TH1* fBmonAddress = nullptr;
TH1* fBmonChannel = nullptr;
TH2* fT0StsDpbDiff = nullptr;
TH2* fT0StsDpbDiffEvo[kuMaxNbStsDpbs];
TH2* fBmonStsDpbDiff = nullptr;
TH2* fBmonStsDpbDiffEvo[kuMaxNbStsDpbs];
TH1* fStsDpbCntsEvo[kuMaxNbStsDpbs];
TH2* fT0MuchRocDiff = nullptr;
TH2* fT0MuchAsicDiff = nullptr;
TH2* fT0MuchAsicDiffEvo[kuMaxNbMuchAsics];
TH2* fBmonMuchRocDiff = nullptr;
TH2* fBmonMuchAsicDiff = nullptr;
TH2* fBmonMuchAsicDiffEvo[kuMaxNbMuchAsics];
TH2* fDigisPerAsicEvo = nullptr;
Double_t fdLastMuchDigi[kuMaxNbMuchAsics][kuNbChanSMX];
Double_t fdLastMuchDigiPulser[kuMaxNbMuchAsics][kuNbChanSMX];
TH2* fSameChanDigisDistEvo = nullptr;
Double_t fdLastT0DigiPulser = 0;
Double_t fdLastBmonDigiPulser = 0;
TH2* fDigiTimeEvoT0 = nullptr;
TH2* fDigiTimeEvoBmon = nullptr;
TH2* fDigiTimeEvoSts = nullptr;
TH2* fDigiTimeEvoMuch = nullptr;
TH2* fDigiTimeEvoTof = nullptr;
......
......@@ -49,7 +49,7 @@ struct InitTaskError : std::runtime_error {
using namespace std;
Bool_t bMcbm2018MonitorTaskT0ResetHistos = kFALSE;
Bool_t bMcbm2018MonitorTaskBmonResetHistos = kFALSE;
CbmDeviceMcbmUnpack::CbmDeviceMcbmUnpack()
{
......@@ -69,7 +69,7 @@ try {
fvsSetTimeOffs = fConfig->GetValue<std::vector<std::string>>("SetTrigWin");
fsChannelNameDataInput = fConfig->GetValue<std::string>("TsNameIn");
fsChannelNameDataOutput = fConfig->GetValue<std::string>("TsNameOut");
/// TODO: option to set fuDigiMaskedIdT0 !!!!
/// TODO: option to set fuDigiMaskedIdBmon !!!!
fsAllowedChannels[0] = fsChannelNameDataInput;
// Get the information about created channels from the device
......@@ -323,20 +323,20 @@ bool CbmDeviceMcbmUnpack::SendUnpData()
oaTrd << fUnpAlgoTrd->GetVector();
std::string* strMsgTrd = new std::string(ossTrd.str());
/// Split TOF vector in TOF and T0
std::vector<CbmTofDigi>& vDigiTofT0 = fUnpAlgoTof->GetVector();
/// Split TOF vector in TOF and Bmon
std::vector<CbmTofDigi>& vDigiTofBmon = fUnpAlgoTof->GetVector();
std::vector<CbmTofDigi> vDigiTof = {};
std::vector<CbmTofDigi> vDigiT0 = {};
std::vector<CbmTofDigi> vDigiBmon = {};
for (auto digi : vDigiTofT0) {
if (fuDigiMaskedIdT0 == (digi.GetAddress() & fuDigiMaskId)) {
/// Insert data in T0 output container
vDigiT0.emplace_back(digi);
} // if( fuDigiMaskedIdT0 == ( digi.GetAddress() & fuDigiMaskId ) )
for (auto digi : vDigiTofBmon) {
if (fuDigiMaskedIdBmon == (digi.GetAddress() & fuDigiMaskId)) {
/// Insert data in Bmon output container
vDigiBmon.emplace_back(digi);
} // if( fuDigiMaskedIdBmon == ( digi.GetAddress() & fuDigiMaskId ) )
else {
/// Insert data in TOF output container
vDigiTof.emplace_back(digi);
} // else of if( fuDigiMaskedIdT0 == ( digi.GetAddress() & fuDigiMaskId ) )
} // else of if( fuDigiMaskedIdBmon == ( digi.GetAddress() & fuDigiMaskId ) )
} // for( auto digi: vDigi )
std::stringstream ossTof;
......@@ -344,10 +344,10 @@ bool CbmDeviceMcbmUnpack::SendUnpData()
oaTof << vDigiTof;
std::string* strMsgTof = new std::string(ossTof.str());
std::stringstream ossT0;
boost::archive::binary_oarchive oaT0(ossT0);
oaT0 << vDigiT0;
std::string* strMsgT0 = new std::string(ossT0.str());
std::stringstream ossBmon;
boost::archive::binary_oarchive oaBmon(ossBmon);
oaBmon << vDigiBmon;
std::string* strMsgBmon = new std::string(ossBmon.str());
std::stringstream ossRich;
boost::archive::binary_oarchive oaRich(ossRich);
......@@ -372,10 +372,10 @@ bool CbmDeviceMcbmUnpack::SendUnpData()
*/
parts.AddPart(NewMessage(
const_cast<char*>(strMsgT0->c_str()), // data
strMsgT0->length(), // size
const_cast<char*>(strMsgBmon->c_str()), // data
strMsgBmon->length(), // size
[](void*, void* object) { delete static_cast<std::string*>(object); },
strMsgT0)); // object that manages the data
strMsgBmon)); // object that manages the data
parts.AddPart(NewMessage(
const_cast<char*>(strMsgSts->c_str()), // data
......@@ -456,10 +456,10 @@ Bool_t CbmDeviceMcbmUnpack::DoUnpack(const fles::Timeslice& ts, size_t /*compone
fUnpAlgoTof->AddMsComponentToList(uCompIdx, kusSysIdTof);
break;
} // case kusSysIdTof
case kusSysIdT0: {
fUnpAlgoTof->AddMsComponentToList(uCompIdx, kusSysIdT0);
case kusSysIdBmon: {
fUnpAlgoTof->AddMsComponentToList(uCompIdx, kusSysIdBmon);
break;
} // case kusSysIdT0
} // case kusSysIdBmon
case kusSysIdRich: {
fUnpAlgoRich->AddMsComponentToList(uCompIdx, kusSysIdRich);
break;
......
......@@ -49,7 +49,7 @@ private:
static const uint16_t kusSysIdMuch = 0x50;
static const uint16_t kusSysIdTrd = 0x40;
static const uint16_t kusSysIdTof = 0x60;
static const uint16_t kusSysIdT0 = 0x90;
static const uint16_t kusSysIdBmon = 0x90;
static const uint16_t kusSysIdRich = 0x30;
static const uint16_t kusSysIdPsd = 0x80;
......@@ -61,7 +61,7 @@ private:
std::string fsChannelNameDataInput = "fullts";
std::string fsChannelNameDataOutput = "unpts_0";
std::string fsChannelNameCommands = "commands";
UInt_t fuDigiMaskedIdT0 = 0x00005006;
UInt_t fuDigiMaskedIdBmon = 0x00005006;
UInt_t fuDigiMaskId = 0x0001FFFF;
/// List of MQ channels names
......
......@@ -53,7 +53,7 @@ struct InitTaskError : std::runtime_error {
using namespace std;
//Bool_t bMcbm2018MonitorTaskT0ResetHistos = kFALSE;
//Bool_t bMcbm2018MonitorTaskBmonResetHistos = kFALSE;
CbmDeviceUnpack::CbmDeviceUnpack() {}
......@@ -320,38 +320,18 @@ Bool_t CbmDeviceUnpack::InitContainers()
trdfasp2dconfig->SetDoWriteOutput();
// Activate the line below to write Trd1D digis to a separate "TrdFaspDigi" branch. Can be used to separate between Fasp and Spadic digis
//trdfasp2dconfig->SetOutputBranchName("TrdFaspDigi");
uint8_t map[NFASPMOD];
uint16_t crob_map[NCROBMOD];
for (uint32_t i(0); i < NFASPMOD; i++)
map[i] = i;
if (fuRunId <= 1588) {
const size_t nfasps = 12;
uint8_t map21[] = {9, 2, 3, 11, 10, 7, 8, 0, 1, 4, 6, 5};
for (uint32_t i(0); i < nfasps; i++)
map[i] = map21[i];
uint16_t crob_map21[] = {0x00f0, 0, 0, 0, 0};
for (uint32_t i(0); i < NCROBMOD; i++)
crob_map[i] = crob_map21[i];
}
else if (fuRunId >= 2335) {
const size_t nfasp0 = 72;
const size_t nfasps = 36;
uint8_t map22[] = {
84, 85, 86, 87, 88, 89, // FEB14/0xffc1
90, 91, 92, 93, 94, 95, // FEB17/0xffc1
96, 97, 98, 99, 100, 101, // FEB18/0xffc1
102, 103, 104, 105, 106, 107, // FEB16/0xffc1
72, 73, 74, 75, 76, 77, // FEB9/0xffc1
78, 79, 80, 81, 82, 83 // FEB8/0xffc1
};
for (uint32_t i(0); i < nfasps; i++)
map[i + nfasp0] = map22[i];
uint16_t crob_map22[] = {0xffc2, 0xffc5, 0xffc1, 0, 0};
for (uint32_t i(0); i < NCROBMOD; i++)
crob_map[i] = crob_map22[i];
}
trdfasp2dconfig->SetFaspMapping(5, map);
trdfasp2dconfig->SetCrobMapping(5, crob_map);
// uint16_t crob_map[NCROBMOD];
// if (fuRunId <= 1588) {
// uint16_t crob_map21[] = {0x00f0, 0, 0, 0, 0};
// for (uint32_t i(0); i < NCROBMOD; i++)
// crob_map[i] = crob_map21[i];
// }
// else if (fuRunId >= 2335) {
// uint16_t crob_map22[] = {0xffc2, 0xffc5, 0xffc1, 0, 0};
// for (uint32_t i(0); i < NCROBMOD; i++)
// crob_map[i] = crob_map22[i];
// }
// trdfasp2dconfig->SetCrobMapping(5, crob_map);
std::string parfilesbasepathTrdfasp2d = Form("%s/parameters/trd", srcDir.Data());
trdfasp2dconfig->SetParFilesBasePath(parfilesbasepathTrdfasp2d);
trdfasp2dconfig->SetSystemTimeOffset(-1800); // [ns] value to be updated
......@@ -433,7 +413,7 @@ Bool_t CbmDeviceUnpack::InitContainers()
richconfig->DoTotOffsetCorrection(); // correct ToT offset
richconfig->SetDebugState();
richconfig->SetDoWriteOutput();
std::string parfilesbasepathRich = Form("%s/macro/beamtime/mcbm2021/", srcDir.Data());
std::string parfilesbasepathRich = Form("%s/macro/beamtime/mcbm2024/", srcDir.Data());
richconfig->SetParFilesBasePath(parfilesbasepathRich);
richconfig->SetSystemTimeOffset(256000 - 1200); // [ns] 1 MS and additional correction
if (1904 < fuRunId) richconfig->SetSystemTimeOffset(-1200);
......@@ -491,9 +471,9 @@ Bool_t CbmDeviceUnpack::InitContainers()
charPosDel++;
int32_t iOffset = std::stoi((*itStrOffs).substr(charPosDel));
if ("kT0" == sSelDet && fBmonConfig) { //
if ("kBmon" == sSelDet && fBmonConfig) { //
fBmonConfig->SetSystemTimeOffset(iOffset);
} // else if( "kT0" == sSelDet )
} // else if( "kBmon" == sSelDet )
else if ("kSTS" == sSelDet && fStsConfig) { //
fStsConfig->SetSystemTimeOffset(iOffset);
} // if( "kSTS" == sSelDet && fStsConfig)
......@@ -849,14 +829,14 @@ bool CbmDeviceUnpack::SendUnpData()
parts.AddPart(std::move(messTsHeader));
// ---- T0 ----
// ---- Bmon ----
std::stringstream ossBmon;
boost::archive::binary_oarchive oaBmon(ossBmon);
if (fBmonConfig) { //
oaBmon << *(fBmonConfig->GetOutputVec());
}
else {
oaBmon << (std::vector<CbmTofDigi>());
oaBmon << (std::vector<CbmBmonDigi>());
}
std::string* strMsgBmon = new std::string(ossBmon.str());
......
......@@ -77,15 +77,15 @@ protected:
private:
/// Constants
static constexpr std::uint16_t fkFlesBmon = static_cast<std::uint16_t>(fles::SubsystemIdentifier::T0);
static constexpr std::uint16_t fkFlesMvd = static_cast<std::uint16_t>(fles::SubsystemIdentifier::MVD);
static constexpr std::uint16_t fkFlesSts = static_cast<std::uint16_t>(fles::SubsystemIdentifier::STS);
static constexpr std::uint16_t fkFlesMuch = static_cast<std::uint16_t>(fles::SubsystemIdentifier::MUCH);
static constexpr std::uint16_t fkFlesTrd = static_cast<std::uint16_t>(fles::SubsystemIdentifier::TRD);
static constexpr std::uint16_t fkFlesTrd2D = static_cast<std::uint16_t>(fles::SubsystemIdentifier::TRD2D);
static constexpr std::uint16_t fkFlesTof = static_cast<std::uint16_t>(fles::SubsystemIdentifier::RPC);
static constexpr std::uint16_t fkFlesRich = static_cast<std::uint16_t>(fles::SubsystemIdentifier::RICH);
static constexpr std::uint16_t fkFlesPsd = static_cast<std::uint16_t>(fles::SubsystemIdentifier::PSD);
static constexpr std::uint16_t fkFlesBmon = static_cast<std::uint16_t>(fles::Subsystem::BMON);
static constexpr std::uint16_t fkFlesMvd = static_cast<std::uint16_t>(fles::Subsystem::MVD);
static constexpr std::uint16_t fkFlesSts = static_cast<std::uint16_t>(fles::Subsystem::STS);
static constexpr std::uint16_t fkFlesMuch = static_cast<std::uint16_t>(fles::Subsystem::MUCH);
static constexpr std::uint16_t fkFlesTrd = static_cast<std::uint16_t>(fles::Subsystem::TRD);
static constexpr std::uint16_t fkFlesTrd2D = static_cast<std::uint16_t>(fles::Subsystem::TRD2D);
static constexpr std::uint16_t fkFlesTof = static_cast<std::uint16_t>(fles::Subsystem::TOF);
static constexpr std::uint16_t fkFlesRich = static_cast<std::uint16_t>(fles::Subsystem::RICH);
static constexpr std::uint16_t fkFlesPsd = static_cast<std::uint16_t>(fles::Subsystem::PSD);
/// Control flags
......@@ -271,10 +271,10 @@ private:
std::clock_t cpuendtime = std::clock();
auto wallendtime = std::chrono::high_resolution_clock::now();
// Cpu time in [µs]
// Cpu time in [mus]
auto cputime = 1e6 * (cpuendtime - cpustarttime) / CLOCKS_PER_SEC;
algo->AddCpuTime(cputime);
// Real time in [µs]
// Real time in [mus]
auto walltime = std::chrono::duration<double, std::micro>(wallendtime - wallstarttime).count();
algo->AddWallTime(walltime);
......@@ -282,7 +282,7 @@ private:
// Check some numbers from this timeslice
size_t nDigis = digivec.size();
LOG(debug) << "Component " << icomp << " connected to config " << config->GetName() << " n-Digis " << nDigis
<< " processed in walltime(cputime) = " << walltime << "(" << cputime << cputime << ") µs"
<< " processed in walltime(cputime) = " << walltime << "(" << cputime << cputime << ") micro s"
<< "this timeslice.";
if (fDoPerfProf) {
......
......@@ -19,7 +19,7 @@ void addCustomOptions(bpo::options_description& options)
options.add_options()("IgnTsOver", bpo::value<bool>()->default_value(false), "Ignore TS overlap if true");
options.add_options()("EvtOverMode", bpo::value<std::string>()->default_value("NoOverlap"),
"Set the event overlap mode, use string matching an EOverlapMode ");
options.add_options()("RefDet", bpo::value<std::string>()->default_value("kT0"),
options.add_options()("RefDet", bpo::value<std::string>()->default_value("kBmon"),
"Set the reference (seed) detector, use string matching an ECbmModuleId ");
options.add_options()("AddDet", bpo::value<std::vector<std::string>>()->multitoken()->composing(),
"Add a detector for digis selection, use string matching an ECbmModuleId ");
......
......@@ -19,7 +19,7 @@ void addCustomOptions(bpo::options_description& options)
options.add_options()("IgnTsOver", bpo::value<bool>()->default_value(false), "Ignore TS overlap if true");
options.add_options()("EvtOverMode", bpo::value<std::string>()->default_value("NoOverlap"),
"Set the event overlap mode, use string matching an EOverlapMode ");
options.add_options()("RefDet", bpo::value<std::string>()->default_value("kT0"),
options.add_options()("RefDet", bpo::value<std::string>()->default_value("kBmon"),
"Set the reference (seed) detector, use string matching an ECbmModuleId ");
options.add_options()("AddDet", bpo::value<std::vector<std::string>>()->multitoken()->composing(),
"Add a detector for digis selection, use string matching an ECbmModuleId ");
......
......@@ -33,6 +33,8 @@ void addCustomOptions(bpo::options_description& options)
options.add_options()("DigiEventInput", bpo::value<bool>()->default_value(false),
"Enable the input of CbmDigiEvents instead of raw data + CbmEvents if true");
options.add_options()("ExclusiveTrdExtract", bpo::value<bool>()->default_value(true),
"Enable loop based extraction of TRD digis to handle different 1D/2D sel windows if true");
options.add_options()("FillHistos", bpo::value<bool>()->default_value(false),
"Fill histograms and send them to histo server if true");
......