Skip to content

Commit 4a64914

Browse files
committed
TPC Workflow: Give a proper error when some TPC digit MC labels are missing
1 parent 3b5fb4d commit 4a64914

1 file changed

Lines changed: 10 additions & 4 deletions

File tree

DataFormats/Detectors/TPC/include/DataFormatsTPC/WorkflowHelper.h

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ struct getWorkflowTPCInput_ret_internal {
4949
std::map<int, InputRef> inputrefs;
5050
std::vector<o2::dataformats::ConstMCLabelContainerView> mcInputs;
5151
std::vector<gsl::span<const char>> inputs;
52-
std::array<int, constants::MAXSECTOR> inputDigitsMCIndex;
5352
std::vector<o2::dataformats::ConstMCLabelContainerView> inputDigitsMC;
5453
std::unique_ptr<ClusterNative[]> clusterBuffer;
5554
ClusterNativeHelper::ConstMCLabelContainerViewWithBuffer clustersMCBuffer;
@@ -69,13 +68,17 @@ static auto getWorkflowTPCInput(o2::framework::ProcessingContext& pc, int verbos
6968
if (do_clusters && do_digits) {
7069
throw std::invalid_argument("Currently cannot process both clusters and digits");
7170
}
71+
std::array<int, constants::MAXSECTOR> inputDigitsMCIndex;
7272

7373
if (do_mcLabels) {
7474
std::vector<o2::framework::InputSpec> filter = {
7575
{"check", o2::framework::ConcreteDataTypeMatcher{o2::header::gDataOriginTPC, "DIGITSMCTR"}, o2::framework::Lifetime::Timeframe},
7676
{"check", o2::framework::ConcreteDataTypeMatcher{o2::header::gDataOriginTPC, "CLNATIVEMCLBL"}, o2::framework::Lifetime::Timeframe},
7777
};
7878
unsigned long recvMask = 0;
79+
if (do_digits) {
80+
std::fill(inputDigitsMCIndex.begin(), inputDigitsMCIndex.end(), -1);
81+
}
7982
for (auto const& ref : o2::framework::InputRecordWalker(pc.inputs(), filter)) {
8083
auto const* sectorHeader = o2::framework::DataRefUtils::getHeader<TPCSectorHeader*>(ref);
8184
if (sectorHeader == nullptr) {
@@ -93,7 +96,7 @@ static auto getWorkflowTPCInput(o2::framework::ProcessingContext& pc, int verbos
9396
recvMask |= (sectorHeader->sectorBits & tpcSectorMask);
9497
retVal->internal.inputrefs[sector].labels = ref;
9598
if (do_digits) {
96-
retVal->internal.inputDigitsMCIndex[sector] = retVal->internal.inputDigitsMC.size();
99+
inputDigitsMCIndex[sector] = retVal->internal.inputDigitsMC.size();
97100
retVal->internal.inputDigitsMC.emplace_back(o2::dataformats::ConstMCLabelContainerView(pc.inputs().get<gsl::span<char>>(ref)));
98101
}
99102
}
@@ -104,9 +107,12 @@ static auto getWorkflowTPCInput(o2::framework::ProcessingContext& pc, int verbos
104107
for (unsigned int i = 0; i < constants::MAXSECTOR; i++) {
105108
if (tpcSectorMask & (1ul << i)) {
106109
if (verbosity >= 1) {
107-
LOG(INFO) << "GOT MC LABELS FOR SECTOR " << i << " -> " << retVal->internal.inputDigitsMC[retVal->internal.inputDigitsMCIndex[i]].getNElements();
110+
LOG(INFO) << "GOT MC LABELS FOR SECTOR " << i << " -> " << retVal->internal.inputDigitsMC[inputDigitsMCIndex[i]].getNElements();
111+
}
112+
if (inputDigitsMCIndex[i] == -1) {
113+
throw std::runtime_error("digit mc labels missing");
108114
}
109-
retVal->inputDigitsMCPtrs[i] = &retVal->internal.inputDigitsMC[retVal->internal.inputDigitsMCIndex[i]];
115+
retVal->inputDigitsMCPtrs[i] = &retVal->internal.inputDigitsMC[inputDigitsMCIndex[i]];
110116
} else {
111117
retVal->inputDigitsMCPtrs[i] = nullptr;
112118
}

0 commit comments

Comments
 (0)