Skip to content

Commit 6db0441

Browse files
authored
PWGJE: Fixing problem with derived data and orphan tracks (#7428)
1 parent ab77759 commit 6db0441

2 files changed

Lines changed: 64 additions & 56 deletions

File tree

PWGJE/TableProducer/jetderiveddataproducer.cxx

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -225,18 +225,24 @@ struct JetDerivedDataProducerTask {
225225
}
226226
PROCESS_SWITCH(JetDerivedDataProducerTask, processMcCollisions, "produces derived MC collision table", false);
227227

228-
void processTracks(aod::Collision const& collision, soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksCov, aod::TracksDCA, aod::TracksDCACov, aod::TrackSelection, aod::TrackSelectionExtension> const& tracks) // we do not consider orphan tracks (tracks without a collision) in the JE framework
228+
void processTracks(soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksCov, aod::TracksDCA, aod::TracksDCACov, aod::TrackSelection, aod::TrackSelectionExtension>::iterator const& track, aod::Collisions const&)
229229
{
230-
for (auto const& track : tracks) {
231-
jTracksTable(collision.globalIndex(), track.pt(), track.eta(), track.phi(), jetderiveddatautilities::setTrackSelectionBit(track, track.dcaZ(), dcaZMax));
232-
auto trackParCov = getTrackParCov(track);
233-
auto xyzTrack = trackParCov.getXYZGlo();
234-
float sigmaDCAXYZ;
235-
float dcaXYZ = getDcaXYZ(track, &sigmaDCAXYZ);
236-
jTracksExtraTable(xyzTrack.X() - collision.posX(), xyzTrack.Y() - collision.posY(), track.dcaZ(), track.dcaXY(), dcaXYZ, std::sqrt(track.sigmaDcaZ2()), std::sqrt(track.sigmaDcaXY2()), sigmaDCAXYZ, track.sigma1Pt()); // why is this getSigmaZY
237-
jTracksParentIndexTable(track.globalIndex());
238-
trackCollisionMapping[{track.globalIndex(), collision.globalIndex()}] = jTracksTable.lastIndex();
230+
jTracksTable(track.collisionId(), track.pt(), track.eta(), track.phi(), jetderiveddatautilities::setTrackSelectionBit(track, track.dcaZ(), dcaZMax));
231+
auto trackParCov = getTrackParCov(track);
232+
auto xyzTrack = trackParCov.getXYZGlo();
233+
float sigmaDCAXYZ;
234+
float dcaXYZ = getDcaXYZ(track, &sigmaDCAXYZ);
235+
float dcaX = -99.0;
236+
float dcaY = -99.0;
237+
if (track.collisionId() >= 0) {
238+
auto const& collision = track.collision_as<aod::Collisions>();
239+
dcaX = xyzTrack.X() - collision.posX();
240+
dcaY = xyzTrack.Y() - collision.posY();
239241
}
242+
243+
jTracksExtraTable(dcaX, dcaY, track.dcaZ(), track.dcaXY(), dcaXYZ, std::sqrt(track.sigmaDcaZ2()), std::sqrt(track.sigmaDcaXY2()), sigmaDCAXYZ, track.sigma1Pt()); // why is this getSigmaZY
244+
jTracksParentIndexTable(track.globalIndex());
245+
trackCollisionMapping[{track.globalIndex(), track.collisionId()}] = jTracksTable.lastIndex();
240246
}
241247
PROCESS_SWITCH(JetDerivedDataProducerTask, processTracks, "produces derived track table", true);
242248

@@ -286,14 +292,12 @@ struct JetDerivedDataProducerTask {
286292
}
287293
PROCESS_SWITCH(JetDerivedDataProducerTask, processTracksWithCollisionAssociator, "produces derived track table taking into account track-to-collision associations", false);
288294

289-
void processMcTrackLabels(aod::Collision const&, soa::Join<aod::Tracks, aod::McTrackLabels> const& tracks)
295+
void processMcTrackLabels(soa::Join<aod::Tracks, aod::McTrackLabels>::iterator const& track)
290296
{
291-
for (auto const& track : tracks) {
292-
if (track.has_mcParticle()) {
293-
jMcTracksLabelTable(track.mcParticleId());
294-
} else {
295-
jMcTracksLabelTable(-1);
296-
}
297+
if (track.has_mcParticle()) {
298+
jMcTracksLabelTable(track.mcParticleId());
299+
} else {
300+
jMcTracksLabelTable(-1);
297301
}
298302
}
299303
PROCESS_SWITCH(JetDerivedDataProducerTask, processMcTrackLabels, "produces derived track labels table", false);

PWGJE/TableProducer/jetderiveddatawriter.cxx

Lines changed: 43 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -39,24 +39,24 @@ using namespace o2::framework::expressions;
3939
struct JetDerivedDataWriter {
4040

4141
struct : ConfigurableGroup {
42-
Configurable<float> chargedJetPtMin{"chargedJetPtMin", 0.0, "Minimum charged jet pt to accept event"};
43-
Configurable<float> chargedEventWiseSubtractedJetPtMin{"chargedEventWiseSubtractedJetPtMin", 0.0, "Minimum charged event-wise subtracted jet pt to accept event"};
44-
Configurable<float> chargedMCPJetPtMin{"chargedMCPJetPtMin", 0.0, "Minimum charged mcp jet pt to accept event"};
45-
Configurable<float> neutralJetPtMin{"neutralJetPtMin", 0.0, "Minimum neutral jet pt to accept event"};
46-
Configurable<float> neutralMCPJetPtMin{"neutralMCPJetPtMin", 0.0, "Minimum neutal mcp jet pt to accept event"};
47-
Configurable<float> fullJetPtMin{"fullJetPtMin", 0.0, "Minimum full jet pt to accept event"};
48-
Configurable<float> fullMCPJetPtMin{"fullMCPJetPtMin", 0.0, "Minimum full mcp jet pt to accept event"};
49-
Configurable<float> chargedD0JetPtMin{"chargedD0JetPtMin", 0.0, "Minimum charged D0 jet pt to accept event"};
50-
Configurable<float> chargedEventWiseSubtractedD0JetPtMin{"chargedEventWiseSubtractedD0JetPtMin", 0.0, "Minimum charged event-wise subtracted D0 jet pt to accept event"};
51-
Configurable<float> chargedD0MCPJetPtMin{"chargedD0MCPJetPtMin", 0.0, "Minimum charged D0 mcp jet pt to accept event"};
52-
Configurable<float> chargedLcJetPtMin{"chargedLcJetPtMin", 0.0, "Minimum charged Lc jet pt to accept event"};
53-
Configurable<float> chargedEventWiseSubtractedLcJetPtMin{"chargedEventWiseSubtractedLcJetPtMin", 0.0, "Minimum charged event-wise subtracted Lc jet pt to accept event"};
54-
Configurable<float> chargedLcMCPJetPtMin{"chargedLcMCPJetPtMin", 0.0, "Minimum charged Lc mcp jet pt to accept event"};
55-
Configurable<float> chargedDielectronJetPtMin{"chargedDielectronJetPtMin", 0.0, "Minimum charged Dielectron jet pt to accept event"};
56-
Configurable<float> chargedEventWiseSubtractedDielectronJetPtMin{"chargedEventWiseSubtractedDielectronJetPtMin", 0.0, "Minimum charged event-wise subtracted Dielectron jet pt to accept event"};
57-
Configurable<float> chargedDielectronMCPJetPtMin{"chargedDielectronMCPJetPtMin", 0.0, "Minimum charged Dielectron mcp jet pt to accept event"};
58-
Configurable<float> triggerTrackPtMin{"triggerTrackPtMin", 0.0, "Minimum trigger track pt to accept event"};
59-
Configurable<float> clusterEnergyMin{"clusterEnergyMin", 0.0, "Minimum cluster energy to accept event"};
42+
Configurable<float> thresholdChargedJetPtMin{"thresholdChargedJetPtMin", 0.0, "Minimum charged jet pt to accept event"};
43+
Configurable<float> thresholdChargedEventWiseSubtractedJetPtMin{"thresholdChargedEventWiseSubtractedJetPtMin", 0.0, "Minimum charged event-wise subtracted jet pt to accept event"};
44+
Configurable<float> thresholdChargedMCPJetPtMin{"thresholdChargedMCPJetPtMin", 0.0, "Minimum charged mcp jet pt to accept event"};
45+
Configurable<float> thresholdNeutralJetPtMin{"thresholdNeutralJetPtMin", 0.0, "Minimum neutral jet pt to accept event"};
46+
Configurable<float> thresholdNeutralMCPJetPtMin{"thresholdNeutralMCPJetPtMin", 0.0, "Minimum neutal mcp jet pt to accept event"};
47+
Configurable<float> thresholdFullJetPtMin{"thresholdFullJetPtMin", 0.0, "Minimum full jet pt to accept event"};
48+
Configurable<float> thresholdFullMCPJetPtMin{"thresholdFullMCPJetPtMin", 0.0, "Minimum full mcp jet pt to accept event"};
49+
Configurable<float> thresholdChargedD0JetPtMin{"thresholdChargedD0JetPtMin", 0.0, "Minimum charged D0 jet pt to accept event"};
50+
Configurable<float> thresholdChargedEventWiseSubtractedD0JetPtMin{"thresholdChargedEventWiseSubtractedD0JetPtMin", 0.0, "Minimum charged event-wise subtracted D0 jet pt to accept event"};
51+
Configurable<float> thresholdChargedD0MCPJetPtMin{"thresholdChargedD0MCPJetPtMin", 0.0, "Minimum charged D0 mcp jet pt to accept event"};
52+
Configurable<float> thresholdChargedLcJetPtMin{"thresholdChargedLcJetPtMin", 0.0, "Minimum charged Lc jet pt to accept event"};
53+
Configurable<float> thresholdChargedEventWiseSubtractedLcJetPtMin{"thresholdChargedEventWiseSubtractedLcJetPtMin", 0.0, "Minimum charged event-wise subtracted Lc jet pt to accept event"};
54+
Configurable<float> thresholdChargedLcMCPJetPtMin{"thresholdChargedLcMCPJetPtMin", 0.0, "Minimum charged Lc mcp jet pt to accept event"};
55+
Configurable<float> thresholdChargedDielectronJetPtMin{"thresholdChargedDielectronJetPtMin", 0.0, "Minimum charged Dielectron jet pt to accept event"};
56+
Configurable<float> thresholdChargedEventWiseSubtractedDielectronJetPtMin{"thresholdChargedEventWiseSubtractedDielectronJetPtMin", 0.0, "Minimum charged event-wise subtracted Dielectron jet pt to accept event"};
57+
Configurable<float> thresholdChargedDielectronMCPJetPtMin{"thresholdChargedDielectronMCPJetPtMin", 0.0, "Minimum charged Dielectron mcp jet pt to accept event"};
58+
Configurable<float> thresholdTriggerTrackPtMin{"thresholdTriggerTrackPtMin", 0.0, "Minimum trigger track pt to accept event"};
59+
Configurable<float> thresholdClusterEnergyMin{"thresholdClusterEnergyMin", 0.0, "Minimum cluster energy to accept event"};
6060
Configurable<int> downscaleFactor{"downscaleFactor", 1, "random downscale of selected events"};
6161

6262
Configurable<float> vertexZCut{"vertexZCut", 10.0, "z-vertex cut on event"};
@@ -258,41 +258,41 @@ struct JetDerivedDataWriter {
258258
{
259259
float selectionObjectPtMin = 0.0;
260260
if constexpr (std::is_same_v<std::decay_t<T>, aod::ChargedJets> || std::is_same_v<std::decay_t<T>, aod::ChargedMCDetectorLevelJets>) {
261-
selectionObjectPtMin = config.chargedJetPtMin;
261+
selectionObjectPtMin = config.thresholdChargedJetPtMin;
262262
} else if constexpr (std::is_same_v<std::decay_t<T>, aod::ChargedEventWiseSubtractedJets> || std::is_same_v<std::decay_t<T>, aod::ChargedMCDetectorLevelEventWiseSubtractedJets>) {
263-
selectionObjectPtMin = config.chargedEventWiseSubtractedJetPtMin;
263+
selectionObjectPtMin = config.thresholdChargedEventWiseSubtractedJetPtMin;
264264
} else if constexpr (std::is_same_v<std::decay_t<T>, aod::ChargedMCParticleLevelJets>) {
265-
selectionObjectPtMin = config.chargedMCPJetPtMin;
265+
selectionObjectPtMin = config.thresholdChargedMCPJetPtMin;
266266
} else if constexpr (std::is_same_v<std::decay_t<T>, aod::NeutralJets> || std::is_same_v<std::decay_t<T>, aod::NeutralMCDetectorLevelJets>) {
267-
selectionObjectPtMin = config.neutralJetPtMin;
267+
selectionObjectPtMin = config.thresholdNeutralJetPtMin;
268268
} else if constexpr (std::is_same_v<std::decay_t<T>, aod::NeutralMCParticleLevelJets>) {
269-
selectionObjectPtMin = config.neutralMCPJetPtMin;
269+
selectionObjectPtMin = config.thresholdNeutralMCPJetPtMin;
270270
} else if constexpr (std::is_same_v<std::decay_t<T>, aod::FullJets> || std::is_same_v<std::decay_t<T>, aod::FullMCDetectorLevelJets>) {
271-
selectionObjectPtMin = config.fullJetPtMin;
271+
selectionObjectPtMin = config.thresholdFullJetPtMin;
272272
} else if constexpr (std::is_same_v<std::decay_t<T>, aod::FullMCParticleLevelJets>) {
273-
selectionObjectPtMin = config.fullMCPJetPtMin;
273+
selectionObjectPtMin = config.thresholdFullMCPJetPtMin;
274274
} else if constexpr (std::is_same_v<std::decay_t<T>, aod::D0ChargedJets> || std::is_same_v<std::decay_t<T>, aod::D0ChargedMCDetectorLevelJets>) {
275-
selectionObjectPtMin = config.chargedD0JetPtMin;
275+
selectionObjectPtMin = config.thresholdChargedD0JetPtMin;
276276
} else if constexpr (std::is_same_v<std::decay_t<T>, aod::D0ChargedEventWiseSubtractedJets> || std::is_same_v<std::decay_t<T>, aod::D0ChargedMCDetectorLevelEventWiseSubtractedJets>) {
277-
selectionObjectPtMin = config.chargedEventWiseSubtractedD0JetPtMin;
277+
selectionObjectPtMin = config.thresholdChargedEventWiseSubtractedD0JetPtMin;
278278
} else if constexpr (std::is_same_v<std::decay_t<T>, aod::D0ChargedMCParticleLevelJets>) {
279-
selectionObjectPtMin = config.chargedD0MCPJetPtMin;
279+
selectionObjectPtMin = config.thresholdChargedD0MCPJetPtMin;
280280
} else if constexpr (std::is_same_v<std::decay_t<T>, aod::LcChargedJets> || std::is_same_v<std::decay_t<T>, aod::LcChargedMCDetectorLevelJets>) {
281-
selectionObjectPtMin = config.chargedLcJetPtMin;
281+
selectionObjectPtMin = config.thresholdChargedLcJetPtMin;
282282
} else if constexpr (std::is_same_v<std::decay_t<T>, aod::LcChargedEventWiseSubtractedJets> || std::is_same_v<std::decay_t<T>, aod::LcChargedMCDetectorLevelEventWiseSubtractedJets>) {
283-
selectionObjectPtMin = config.chargedEventWiseSubtractedLcJetPtMin;
283+
selectionObjectPtMin = config.thresholdChargedEventWiseSubtractedLcJetPtMin;
284284
} else if constexpr (std::is_same_v<std::decay_t<T>, aod::LcChargedMCParticleLevelJets>) {
285-
selectionObjectPtMin = config.chargedLcMCPJetPtMin;
285+
selectionObjectPtMin = config.thresholdChargedLcMCPJetPtMin;
286286
} else if constexpr (std::is_same_v<std::decay_t<T>, aod::DielectronChargedJets> || std::is_same_v<std::decay_t<T>, aod::DielectronChargedMCDetectorLevelJets>) {
287-
selectionObjectPtMin = config.chargedDielectronJetPtMin;
287+
selectionObjectPtMin = config.thresholdChargedDielectronJetPtMin;
288288
} else if constexpr (std::is_same_v<std::decay_t<T>, aod::DielectronChargedEventWiseSubtractedJets> || std::is_same_v<std::decay_t<T>, aod::DielectronChargedMCDetectorLevelEventWiseSubtractedJets>) {
289-
selectionObjectPtMin = config.chargedEventWiseSubtractedDielectronJetPtMin;
289+
selectionObjectPtMin = config.thresholdChargedEventWiseSubtractedDielectronJetPtMin;
290290
} else if constexpr (std::is_same_v<std::decay_t<T>, aod::DielectronChargedMCParticleLevelJets>) {
291-
selectionObjectPtMin = config.chargedDielectronMCPJetPtMin;
291+
selectionObjectPtMin = config.thresholdChargedDielectronMCPJetPtMin;
292292
} else if constexpr (std::is_same_v<std::decay_t<T>, aod::JTracks>) {
293-
selectionObjectPtMin = config.triggerTrackPtMin;
293+
selectionObjectPtMin = config.thresholdTriggerTrackPtMin;
294294
} else if constexpr (std::is_same_v<std::decay_t<T>, aod::JClusters>) {
295-
selectionObjectPtMin = config.clusterEnergyMin;
295+
selectionObjectPtMin = config.thresholdClusterEnergyMin;
296296
} else {
297297
selectionObjectPtMin = 0.0;
298298
}
@@ -309,9 +309,13 @@ struct JetDerivedDataWriter {
309309
}
310310
if (isTriggerObject) {
311311
if constexpr (std::is_same_v<std::decay_t<T>, aod::ChargedMCParticleLevelJets> || std::is_same_v<std::decay_t<T>, aod::NeutralMCParticleLevelJets> || std::is_same_v<std::decay_t<T>, aod::FullMCParticleLevelJets> || std::is_same_v<std::decay_t<T>, aod::D0ChargedMCParticleLevelJets> || std::is_same_v<std::decay_t<T>, aod::LcChargedMCParticleLevelJets> || std::is_same_v<std::decay_t<T>, aod::BplusChargedMCParticleLevelJets> || std::is_same_v<std::decay_t<T>, aod::DielectronChargedMCParticleLevelJets>) {
312-
McCollisionFlag[selectionObject.mcCollisionId()] = true;
312+
if (selectionObject.mcCollisionId() >= 0) {
313+
McCollisionFlag[selectionObject.mcCollisionId()] = true;
314+
}
313315
} else {
314-
collisionFlag[selectionObject.collisionId()] = true;
316+
if (selectionObject.collisionId() >= 0) {
317+
collisionFlag[selectionObject.collisionId()] = true;
318+
}
315319
}
316320
}
317321
}
@@ -322,7 +326,7 @@ struct JetDerivedDataWriter {
322326
PROCESS_SWITCH(JetDerivedDataWriter, processSetupAllCollisionsWithDownscaling, "setup the writing of untriggered collisions with downscaling", false);
323327
PROCESS_SWITCH(JetDerivedDataWriter, processSetupAllMcCollisionsWithDownscaling, "setup the writing of untriggered mccollisions with downscaling", false);
324328
PROCESS_SWITCH(JetDerivedDataWriter, processSetupEventTriggering, "process software triggers", false);
325-
PROCESS_SWITCH_FULL(JetDerivedDataWriter, processSelectionObjects<aod::ChargedJets>, processSelectingChargedJets, "process charged jets", true);
329+
PROCESS_SWITCH_FULL(JetDerivedDataWriter, processSelectionObjects<aod::ChargedJets>, processSelectingChargedJets, "process charged jets", false);
326330
PROCESS_SWITCH_FULL(JetDerivedDataWriter, processSelectionObjects<aod::ChargedEventWiseSubtractedJets>, processSelectingChargedEventWiseSubtractedJets, "process charged event-wise subtracted jets", false);
327331
PROCESS_SWITCH_FULL(JetDerivedDataWriter, processSelectionObjects<aod::ChargedMCDetectorLevelJets>, processSelectingChargedMCDJets, "process charged mcd jets", false);
328332
PROCESS_SWITCH_FULL(JetDerivedDataWriter, processSelectionObjects<aod::ChargedMCDetectorLevelEventWiseSubtractedJets>, processSelectingChargedMCDetectorLevelEventWiseSubtractedJets, "process charged event-wise subtracted mcd jets", false);

0 commit comments

Comments
 (0)