diff --git a/MQ/mcbm/CbmDeviceBuildDigiEvents.cxx b/MQ/mcbm/CbmDeviceBuildDigiEvents.cxx index 46564aba178c6fe071907f24608bba1e7049bc60..98aab969cf5e336353138431417f308af500f53f 100644 --- a/MQ/mcbm/CbmDeviceBuildDigiEvents.cxx +++ b/MQ/mcbm/CbmDeviceBuildDigiEvents.cxx @@ -70,6 +70,7 @@ try { fvsSetTrigMaxNb = fConfig->GetValue<std::vector<std::string>>("SetTrigMaxNb"); fvsSetTrigMinLayersNb = fConfig->GetValue<std::vector<std::string>>("SetTrigMinLayersNb"); + fbDoNotSend = fConfig->GetValue<bool>("DoNotSend"); fsChannelNameDataInput = fConfig->GetValue<std::string>("TsNameIn"); fsChannelNameDataOutput = fConfig->GetValue<std::string>("EvtNameOut"); fsChannelNameHistosInput = fConfig->GetValue<std::string>("ChNameIn"); @@ -137,7 +138,7 @@ try { } } - /// Extract detector to remove if any + /// Extract detector to remove if any for (std::vector<std::string>::iterator itStrRem = fvsDelDet.begin(); itStrRem != fvsDelDet.end(); ++itStrRem) { @@ -152,7 +153,8 @@ try { continue; } } - /// Extract Trigger window to add if any + + /// Extract Trigger window to add if any for (std::vector<std::string>::iterator itStrTrigWin = fvsSetTrigWin.begin(); itStrTrigWin != fvsSetTrigWin.end(); ++itStrTrigWin) { @@ -257,9 +259,9 @@ try { /// Max number charPosDel++; - UInt_t uMaxNb = std::stoul((*itStrMaxNb).substr(charPosDel)); + Int_t iMaxNb = std::stol((*itStrMaxNb).substr(charPosDel)); - fpAlgo->SetTriggerMaxNumber(selDet, uMaxNb); + fpAlgo->SetTriggerMaxNumber(selDet, iMaxNb); } /// Extract MinLayersNb for trigger if any @@ -541,7 +543,7 @@ bool CbmDeviceBuildDigiEvents::HandleData(FairMQParts& parts, int /*index*/) fpAlgo->ProcessTs(); /// Send events vector to ouput - if (!SendEvents(parts)) return false; + if (!fbDoNotSend && !SendEvents(parts)) return false; /// Clear metadata fTimeSliceMetaDataArray->Clear(); @@ -707,23 +709,25 @@ bool CbmDeviceBuildDigiEvents::SendHistograms() CbmDeviceBuildDigiEvents::~CbmDeviceBuildDigiEvents() { /// Clear metadata - delete fCbmTsEventHeader; + if (fCbmTsEventHeader) delete fCbmTsEventHeader; /// Clear vectors - fvDigiT0->clear(); - fvDigiSts->clear(); - fvDigiMuch->clear(); - fvDigiTrd->clear(); - fvDigiTof->clear(); - fvDigiRich->clear(); - fvDigiPsd->clear(); + if (fvDigiT0) fvDigiT0->clear(); + if (fvDigiSts) fvDigiSts->clear(); + if (fvDigiMuch) fvDigiMuch->clear(); + if (fvDigiTrd) fvDigiTrd->clear(); + if (fvDigiTof) fvDigiTof->clear(); + if (fvDigiRich) fvDigiRich->clear(); + if (fvDigiPsd) fvDigiPsd->clear(); /// Clear metadata - fTimeSliceMetaDataArray->Clear(); - delete fTsMetaData; + if (fTimeSliceMetaDataArray) { + fTimeSliceMetaDataArray->Clear(); + delete fTsMetaData; - delete fTimeSliceMetaDataArray; - delete fpAlgo; + delete fTimeSliceMetaDataArray; + } + if (fpAlgo) delete fpAlgo; } void CbmDeviceBuildDigiEvents::Finish() {} diff --git a/MQ/mcbm/CbmDeviceBuildDigiEvents.h b/MQ/mcbm/CbmDeviceBuildDigiEvents.h index bd1e9dbe2772e6d8189c60b8c4f357b7d970f572..6632cd3ae10dfa136ac01de7b4d5835a261cbc5b 100644 --- a/MQ/mcbm/CbmDeviceBuildDigiEvents.h +++ b/MQ/mcbm/CbmDeviceBuildDigiEvents.h @@ -65,6 +65,8 @@ private: std::vector<std::string> fvsSetTrigMinNb = {}; std::vector<std::string> fvsSetTrigMaxNb = {}; std::vector<std::string> fvsSetTrigMinLayersNb = {}; + /// I/O control + bool fbDoNotSend = false; /// message queues std::string fsChannelNameDataInput = "unpts_0"; std::string fsChannelNameDataOutput = "events"; diff --git a/MQ/mcbm/runBuildDigiEvents.cxx b/MQ/mcbm/runBuildDigiEvents.cxx index a1184c1d8f16681d410d8bac3bd649592f14604c..97be32d5a20c0fe4a36fd2dd8e675eea78b93699 100644 --- a/MQ/mcbm/runBuildDigiEvents.cxx +++ b/MQ/mcbm/runBuildDigiEvents.cxx @@ -38,6 +38,7 @@ void addCustomOptions(bpo::options_description& options) options.add_options()("SetTrigMinLayersNb", bpo::value<std::vector<std::string>>()->multitoken()->composing(), "Set minimum number of fired layers for selected detector, use string matching " "ECbmModuleId,uMinLayersNb e.g. kTof,3"); + options.add_options()("DoNotSend", bpo::value<bool>()->default_value(false), "Disable the sending of data if true"); options.add_options()("TsNameIn", bpo::value<std::string>()->default_value("unpts_0"), "MQ channel name for unpacked TS data"); options.add_options()("EvtNameOut", bpo::value<std::string>()->default_value("events"),