Skip to content

Commit b11100e

Browse files
committed
ITS: fix output crash if zero tracks where found
1 parent 3851877 commit b11100e

File tree

1 file changed

+35
-33
lines changed

1 file changed

+35
-33
lines changed

Detectors/ITSMFT/ITS/tracking/src/TrackingInterface.cxx

Lines changed: 35 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -324,43 +324,45 @@ void ITSTrackingInterface::run(framework::ProcessingContext& pc)
324324
mTracker->clustersToTracks(logger, errorLogger);
325325
}
326326
size_t totTracks{mTimeFrame->getNumberOfTracks()}, totClusIDs{mTimeFrame->getNumberOfUsedClusters()};
327-
allTracks.reserve(totTracks);
328-
allClusIdx.reserve(totClusIDs);
327+
if (totTracks) {
328+
allTracks.reserve(totTracks);
329+
allClusIdx.reserve(totClusIDs);
329330

330-
if (mTimeFrame->hasBogusClusters()) {
331-
LOG(warning) << fmt::format(" - The processed timeframe had {} clusters with wild z coordinates, check the dictionaries", mTimeFrame->hasBogusClusters());
332-
}
333-
334-
for (unsigned int iROF{0}; iROF < trackROFvec.size(); ++iROF) {
335-
auto& tracksROF{trackROFvec[iROF]};
336-
auto& vtxROF = vertROFvec[iROF];
337-
auto& tracks = mTimeFrame->getTracks(iROF);
338-
auto number{tracks.size()};
339-
auto first{allTracks.size()};
340-
int offset = -tracksROF.getFirstEntry(); // cluster entry!!!
341-
tracksROF.setFirstEntry(first);
342-
tracksROF.setNEntries(number);
343-
tracksROF.setFlags(vtxROF.getFlags()); // copies 0xffffffff if cosmics
344-
if (processingMask[iROF]) {
345-
irFrames.emplace_back(tracksROF.getBCData(), tracksROF.getBCData() + nBCPerTF - 1).info = tracks.size();
331+
if (mTimeFrame->hasBogusClusters()) {
332+
LOG(warning) << fmt::format(" - The processed timeframe had {} clusters with wild z coordinates, check the dictionaries", mTimeFrame->hasBogusClusters());
346333
}
347-
allTrackLabels.reserve(mTimeFrame->getTracksLabel(iROF).size()); // should be 0 if not MC
348-
std::copy(mTimeFrame->getTracksLabel(iROF).begin(), mTimeFrame->getTracksLabel(iROF).end(), std::back_inserter(allTrackLabels));
349-
// Some conversions that needs to be moved in the tracker internals
350-
for (unsigned int iTrk{0}; iTrk < tracks.size(); ++iTrk) {
351-
auto& trc{tracks[iTrk]};
352-
trc.setFirstClusterEntry(allClusIdx.size()); // before adding tracks, create final cluster indices
353-
int ncl = trc.getNumberOfClusters(), nclf = 0;
354-
for (int ic = TrackITSExt::MaxClusters; ic--;) { // track internally keeps in->out cluster indices, but we want to store the references as out->in!!!
355-
auto clid = trc.getClusterIndex(ic);
356-
if (clid >= 0) {
357-
trc.setClusterSize(ic, mTimeFrame->getClusterSize(clid));
358-
allClusIdx.push_back(clid);
359-
nclf++;
334+
335+
for (unsigned int iROF{0}; iROF < trackROFvec.size(); ++iROF) {
336+
auto& tracksROF{trackROFvec[iROF]};
337+
auto& vtxROF = vertROFvec[iROF];
338+
auto& tracks = mTimeFrame->getTracks(iROF);
339+
auto number{tracks.size()};
340+
auto first{allTracks.size()};
341+
int offset = -tracksROF.getFirstEntry(); // cluster entry!!!
342+
tracksROF.setFirstEntry(first);
343+
tracksROF.setNEntries(number);
344+
tracksROF.setFlags(vtxROF.getFlags()); // copies 0xffffffff if cosmics
345+
if (processingMask[iROF]) {
346+
irFrames.emplace_back(tracksROF.getBCData(), tracksROF.getBCData() + nBCPerTF - 1).info = tracks.size();
347+
}
348+
allTrackLabels.reserve(mTimeFrame->getTracksLabel(iROF).size()); // should be 0 if not MC
349+
std::copy(mTimeFrame->getTracksLabel(iROF).begin(), mTimeFrame->getTracksLabel(iROF).end(), std::back_inserter(allTrackLabels));
350+
// Some conversions that needs to be moved in the tracker internals
351+
for (unsigned int iTrk{0}; iTrk < tracks.size(); ++iTrk) {
352+
auto& trc{tracks[iTrk]};
353+
trc.setFirstClusterEntry(allClusIdx.size()); // before adding tracks, create final cluster indices
354+
int ncl = trc.getNumberOfClusters(), nclf = 0;
355+
for (int ic = TrackITSExt::MaxClusters; ic--;) { // track internally keeps in->out cluster indices, but we want to store the references as out->in!!!
356+
auto clid = trc.getClusterIndex(ic);
357+
if (clid >= 0) {
358+
trc.setClusterSize(ic, mTimeFrame->getClusterSize(clid));
359+
allClusIdx.push_back(clid);
360+
nclf++;
361+
}
360362
}
363+
assert(ncl == nclf);
364+
allTracks.emplace_back(trc);
361365
}
362-
assert(ncl == nclf);
363-
allTracks.emplace_back(trc);
364366
}
365367
}
366368
LOGP(info, "ITSTracker pushed {} tracks and {} vertices", allTracks.size(), vertices.size());

0 commit comments

Comments
 (0)