Skip to content

Commit 3faeaa7

Browse files
authored
adding track selection for rejecting migrated jet-jet tracks (#14336)
1 parent 1e4a0c9 commit 3faeaa7

File tree

3 files changed

+47
-9
lines changed

3 files changed

+47
-9
lines changed

PWGJE/Core/JetDerivedDataUtilities.h

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -614,7 +614,9 @@ enum JTrackSel {
614614
globalTrack = 1,
615615
qualityTrack = 2,
616616
qualityTrackWDCA = 3,
617-
hybridTrack = 4
617+
hybridTrack = 4,
618+
notBadMcTrack = 5,
619+
embeddedTrack = 6 // this is for the future when embedding comes. Hopefully it will mean we dont have to remake the derived data. mcd tracks embedded need to have this bit set
618620
};
619621

620622
template <typename T>
@@ -627,8 +629,14 @@ bool applyTrackKinematics(T const& track, float pTMin = 0.15, float pTMax = 100.
627629
}
628630

629631
template <typename T>
630-
bool selectTrack(T const& track, int trackSelection)
632+
bool selectTrack(T const& track, int trackSelection, bool isEmbedded = false)
631633
{
634+
if (!(track.trackSel() & (1 << JTrackSel::notBadMcTrack))) {
635+
return false;
636+
}
637+
if (isEmbedded && !(track.trackSel() & (1 << JTrackSel::embeddedTrack))) { // will get rid of non embedded tracks
638+
return false;
639+
}
632640
if (trackSelection == -1) {
633641
return true;
634642
}
@@ -650,7 +658,7 @@ int initialiseTrackSelection(const std::string& trackSelection)
650658
}
651659

652660
template <typename T>
653-
uint8_t setTrackSelectionBit(T const& track, float trackDCAZ, float maxDCAZ)
661+
uint8_t setTrackSelectionBit(T const& track, float trackDCAZ, float maxDCAZ, bool setNotBadMcTrack = true, bool isEmbedded = false)
654662
{
655663

656664
uint8_t bit = 0;
@@ -670,6 +678,12 @@ uint8_t setTrackSelectionBit(T const& track, float trackDCAZ, float maxDCAZ)
670678
if (track.trackCutFlagFb5()) {
671679
SETBIT(bit, JTrackSel::hybridTrack);
672680
}
681+
if (setNotBadMcTrack) {
682+
SETBIT(bit, JTrackSel::notBadMcTrack);
683+
}
684+
if (isEmbedded) {
685+
SETBIT(bit, JTrackSel::embeddedTrack);
686+
}
673687
return bit;
674688
}
675689

PWGJE/TableProducer/derivedDataProducer.cxx

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,8 @@ struct JetDerivedDataProducerTask {
184184
std::vector<float> amplitudesFDDA;
185185
std::vector<float> amplitudesFDDC;
186186

187+
std::vector<bool> trackWeightedMCSelection;
188+
187189
std::vector<uint32_t> bcRctMapping;
188190

189191
ctpRateFetcher rateFetcher;
@@ -213,9 +215,11 @@ struct JetDerivedDataProducerTask {
213215
upcCuts.SetFITAmpLimits({config.upcMaxFV0AAmplitude, config.upcMaxFT0AAmplitude, config.upcMaxFT0CAmplitude, config.upcMaxFDDAAmplitude, config.upcMaxFDDCAmplitude});
214216
}
215217

216-
void processClearMaps(aod::Collisions const& collisions)
218+
void processClearMaps(aod::Collisions const& collisions, aod::Tracks const& tracks)
217219
{
218220
trackCollisionMapping.clear();
221+
trackWeightedMCSelection.clear();
222+
trackWeightedMCSelection.resize(tracks.size(), true);
219223
if (!doprocessMcCollisionLabels) {
220224
for (int i = 0; i < collisions.size(); i++) {
221225
products.jCollisionMcInfosTable(-1.0, jetderiveddatautilities::JCollisionSubGeneratorId::none); // fill a dummy weights table if not MC
@@ -371,9 +375,29 @@ struct JetDerivedDataProducerTask {
371375
}
372376
PROCESS_SWITCH(JetDerivedDataProducerTask, processMcCollisionsWithoutCentralityAndMultiplicityAndXsection, "produces derived MC collision table without centrality, multiplicity and cross section information", false);
373377

378+
void processTrackSelectionForWeightedMC(soa::Join<aod::Tracks, aod::McTrackLabels> const& tracks, soa::Join<aod::Collisions, aod::McCollisionLabels> const&, aod::McCollisions const& mcCollisions, aod::McParticles const&)
379+
{
380+
if (mcCollisions.iteratorAt(0).getSubGeneratorId() == jetderiveddatautilities::JCollisionSubGeneratorId::mbGap || mcCollisions.iteratorAt(1).getSubGeneratorId() == jetderiveddatautilities::JCollisionSubGeneratorId::mbGap) {
381+
382+
for (auto const& track : tracks) {
383+
if (track.has_collision()) {
384+
auto const& trackCollision = track.collision_as<soa::Join<aod::Collisions, aod::McCollisionLabels>>();
385+
if (track.has_mcParticle() && trackCollision.has_mcCollision()) {
386+
auto const& trackMcCollision = trackCollision.mcCollision_as<aod::McCollisions>();
387+
auto const& particleMcCollision = track.mcParticle().mcCollision_as<aod::McCollisions>();
388+
if (trackMcCollision.globalIndex() != particleMcCollision.globalIndex() && trackMcCollision.getSubGeneratorId() != jetderiveddatautilities::JCollisionSubGeneratorId::mbGap && particleMcCollision.getSubGeneratorId() != jetderiveddatautilities::JCollisionSubGeneratorId::mbGap) {
389+
trackWeightedMCSelection[track.globalIndex()] = false;
390+
}
391+
}
392+
}
393+
}
394+
}
395+
}
396+
PROCESS_SWITCH(JetDerivedDataProducerTask, processTrackSelectionForWeightedMC, "select whether tracks should be dropped in weighted productions", false);
397+
374398
void processTracks(soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksCov, aod::TracksDCA, aod::TracksDCACov, aod::TrackSelection, aod::TrackSelectionExtension>::iterator const& track, aod::Collisions const&)
375399
{
376-
products.jTracksTable(track.collisionId(), track.pt(), track.eta(), track.phi(), jetderiveddatautilities::setTrackSelectionBit(track, track.dcaZ(), config.dcaZMax));
400+
products.jTracksTable(track.collisionId(), track.pt(), track.eta(), track.phi(), jetderiveddatautilities::setTrackSelectionBit(track, track.dcaZ(), config.dcaZMax, trackWeightedMCSelection[track.globalIndex()]));
377401
auto trackParCov = getTrackParCov(track);
378402
auto xyzTrack = trackParCov.getXYZGlo();
379403
float sigmaDCAXYZ2;
@@ -401,7 +425,7 @@ struct JetDerivedDataProducerTask {
401425
auto track = collisionTrackIndex.track_as<soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksCov, aod::TracksDCA, aod::TracksDCACov, aod::TrackSelection, aod::TrackSelectionExtension>>();
402426
auto trackParCov = getTrackParCov(track);
403427
if (track.collisionId() == collision.globalIndex()) {
404-
products.jTracksTable(collision.globalIndex(), track.pt(), track.eta(), track.phi(), jetderiveddatautilities::setTrackSelectionBit(track, track.dcaZ(), config.dcaZMax));
428+
products.jTracksTable(collision.globalIndex(), track.pt(), track.eta(), track.phi(), jetderiveddatautilities::setTrackSelectionBit(track, track.dcaZ(), config.dcaZMax, trackWeightedMCSelection[track.globalIndex()]));
405429
products.jTracksParentIndexTable(track.globalIndex());
406430
auto xyzTrack = trackParCov.getXYZGlo();
407431
float sigmaDCAXYZ2;
@@ -416,7 +440,7 @@ struct JetDerivedDataProducerTask {
416440
collisionInfo.setPos({collision.posX(), collision.posY(), collision.posZ()});
417441
collisionInfo.setCov(collision.covXX(), collision.covXY(), collision.covYY(), collision.covXZ(), collision.covYZ(), collision.covZZ());
418442
o2::base::Propagator::Instance()->propagateToDCABxByBz(collisionInfo, trackParCov, 2.f, noMatCorr, &dcaCovInfo);
419-
products.jTracksTable(collision.globalIndex(), trackParCov.getPt(), trackParCov.getEta(), trackParCov.getPhi(), jetderiveddatautilities::setTrackSelectionBit(track, dcaCovInfo.getZ(), config.dcaZMax)); // only qualitytracksWDCA are a reliable selection
443+
products.jTracksTable(collision.globalIndex(), trackParCov.getPt(), trackParCov.getEta(), trackParCov.getPhi(), jetderiveddatautilities::setTrackSelectionBit(track, dcaCovInfo.getZ(), config.dcaZMax, trackWeightedMCSelection[track.globalIndex()])); // only qualitytracksWDCA are a reliable selection
420444
products.jTracksParentIndexTable(track.globalIndex());
421445
auto xyzTrack = trackParCov.getXYZGlo();
422446
float dcaXY = dcaCovInfo.getY();
@@ -442,7 +466,7 @@ struct JetDerivedDataProducerTask {
442466
void processTracksRun2(soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksCov, aod::TracksDCA, aod::TrackSelection, aod::TrackSelectionExtension>::iterator const& track)
443467
{
444468
// TracksDCACov table is not yet available for Run 2 converted data. Remove this process function and use only processTracks when that becomes available.
445-
products.jTracksTable(track.collisionId(), track.pt(), track.eta(), track.phi(), jetderiveddatautilities::setTrackSelectionBit(track, track.dcaZ(), config.dcaZMax));
469+
products.jTracksTable(track.collisionId(), track.pt(), track.eta(), track.phi(), jetderiveddatautilities::setTrackSelectionBit(track, track.dcaZ(), config.dcaZMax, trackWeightedMCSelection[track.globalIndex()]));
446470
float sigmaDCAXYZ2 = 0.0;
447471
float dcaXYZ = getDcaXYZ(track, &sigmaDCAXYZ2);
448472
float dcaX = -99.0;

PWGJE/TableProducer/derivedDataWriter.cxx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,7 @@ struct JetDerivedDataWriter {
286286
template <typename T>
287287
bool trackSelection(T const& track)
288288
{
289-
if (config.performTrackSelection && !(track.trackSel() & ~(1 << jetderiveddatautilities::JTrackSel::trackSign))) { // skips tracks that pass no selections. This might cause a problem with tracks matched with clusters. We should generate a track selection purely for cluster matched tracks so that they are kept. This includes also the track pT selction.
289+
if (config.performTrackSelection && !(track.trackSel() & ~((1 << jetderiveddatautilities::JTrackSel::trackSign) | (1 << jetderiveddatautilities::JTrackSel::notBadMcTrack)))) { // skips tracks that pass no selections. This might cause a problem with tracks matched with clusters. We should generate a track selection purely for cluster matched tracks so that they are kept. This includes also the track pT selction.
290290
return false;
291291
}
292292
if (track.pt() < config.trackPtSelectionMin || std::abs(track.eta()) > config.trackEtaSelectionMax) {

0 commit comments

Comments
 (0)