Skip to content

Commit ca473fb

Browse files
committed
ITS: fix output crash if zero tracks where found
Signed-off-by: Felix Schlepper <felix.schlepper@cern.ch>
1 parent 60adc43 commit ca473fb

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
@@ -322,43 +322,45 @@ void ITSTrackingInterface::run(framework::ProcessingContext& pc)
322322
mTracker->clustersToTracks(logger, errorLogger);
323323
}
324324
size_t totTracks{mTimeFrame->getNumberOfTracks()}, totClusIDs{mTimeFrame->getNumberOfUsedClusters()};
325-
allTracks.reserve(totTracks);
326-
allClusIdx.reserve(totClusIDs);
325+
if (totTracks) {
326+
allTracks.reserve(totTracks);
327+
allClusIdx.reserve(totClusIDs);
327328

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

0 commit comments

Comments
 (0)