Skip to content

Commit 0596bc4

Browse files
committed
Add guard to collision size
1 parent 3103678 commit 0596bc4

1 file changed

Lines changed: 11 additions & 2 deletions

File tree

‎PWGJE/TableProducer/derivedDataProducer.cxx‎

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ struct JetDerivedDataProducerTask {
166166
Configurable<bool> includeHadronicRate{"includeHadronicRate", true, "fill the collision information with the hadronic rate"};
167167
Configurable<bool> v0ChargedDecaysOnly{"v0ChargedDecaysOnly", true, "store V0s (at particle-level) only if they decay to charged particles"};
168168
Configurable<bool> isMCGenOnly{"isMCGenOnly", false, "analysis is run over mcGen only"};
169+
Configurable<bool> rejectMisindexedTracks{"rejectMisindexedTracks", false, "explicitly reject tracks that point to non-existent collisions"};
169170

170171
o2::framework::Configurable<bool> applyTrackingEfficiency{"applyTrackingEfficiency", {false}, "configurable to decide whether to apply artificial tracking efficiency (discarding tracks) in jet finding"};
171172
o2::framework::Configurable<std::vector<double>> trackingEfficiencyPtBinning{"trackingEfficiencyPtBinning", {0., 10, 999.}, "pt binning of tracking efficiency array if applyTrackingEfficiency is true"};
@@ -489,7 +490,7 @@ struct JetDerivedDataProducerTask {
489490
}
490491
PROCESS_SWITCH(JetDerivedDataProducerTask, processMcCollisionsWithoutCentralityAndMultiplicityAndXsection, "produces derived MC collision table without centrality, multiplicity and cross section information", false);
491492

492-
void processTrackSelectionForWeightedMC(soa::Join<aod::Tracks, aod::McTrackLabels> const& tracks, soa::Join<aod::Collisions, aod::McCollisionLabels> const&, aod::McCollisions const& mcCollisions, aod::McParticles const&)
493+
void processTrackSelectionForWeightedMC(soa::Join<aod::Tracks, aod::McTrackLabels> const& tracks, soa::Join<aod::Collisions, aod::McCollisionLabels> const& collisions, aod::McCollisions const& mcCollisions, aod::McParticles const&)
493494
{
494495
bool hasMBGap = false;
495496
for (auto const& mcCollision : mcCollisions) {
@@ -502,6 +503,10 @@ struct JetDerivedDataProducerTask {
502503
for (auto const& track : tracks) {
503504
if (track.has_collision()) {
504505
auto const& trackCollision = track.collision_as<soa::Join<aod::Collisions, aod::McCollisionLabels>>();
506+
if (config.rejectMisindexedTracks && track.collisionId() >= collisions.size()) {
507+
// LOGP(warning, "Tried to reference collision {} out of {} total; track skipped", track.collisionId(), collisions.size());
508+
continue;
509+
}
505510
if (track.has_mcParticle() && trackCollision.has_mcCollision()) {
506511
auto const& trackMcCollision = trackCollision.mcCollision_as<aod::McCollisions>();
507512
auto const& particleMcCollision = track.mcParticle().mcCollision_as<aod::McCollisions>();
@@ -515,7 +520,7 @@ struct JetDerivedDataProducerTask {
515520
}
516521
PROCESS_SWITCH(JetDerivedDataProducerTask, processTrackSelectionForWeightedMC, "select whether tracks should be dropped in weighted productions", false);
517522

518-
void processTracks(soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksCov, aod::TracksDCA, aod::TracksDCACov, aod::TrackSelection, aod::TrackSelectionExtension>::iterator const& track, aod::Collisions const&)
523+
void processTracks(soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksCov, aod::TracksDCA, aod::TracksDCACov, aod::TrackSelection, aod::TrackSelectionExtension>::iterator const& track, aod::Collisions const& collisions)
519524
{
520525
products.jTracksTable(track.collisionId(), track.pt(), track.eta(), track.phi(), jetderiveddatautilities::setTrackSelectionBit(track, track.dcaZ(), config.dcaZMax, trackMCSelection[track.globalIndex()]));
521526
auto trackParCov = getTrackParCov(track);
@@ -526,6 +531,10 @@ struct JetDerivedDataProducerTask {
526531
float dcaY = -99.0;
527532
if (track.collisionId() >= 0) {
528533
auto const& collision = track.collision_as<aod::Collisions>();
534+
if (config.rejectMisindexedTracks && track.collisionId() >= collisions.size()) {
535+
// LOGP(warning, "Tried to reference collision {} out of {} total; track skipped", track.collisionId(), collisions.size());
536+
return;
537+
}
529538
dcaX = xyzTrack.X() - collision.posX();
530539
dcaY = xyzTrack.Y() - collision.posY();
531540
}

0 commit comments

Comments
 (0)