@@ -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