Skip to content

Commit 9f0f4ca

Browse files
sweyh99alibuild
andauthored
[PWGJE] hybrid track cuts for Run2 converted data (#9680)
Co-authored-by: ALICE Action Bot <alibuild@cern.ch>
1 parent 70beb57 commit 9f0f4ca

File tree

6 files changed

+73
-6
lines changed

6 files changed

+73
-6
lines changed

Common/Core/TrackSelection.cxx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ bool TrackSelection::FulfillsITSHitRequirements(uint8_t itsClusterMap) const
3030
return true;
3131
}
3232

33-
const std::string TrackSelection::mCutNames[static_cast<int>(TrackSelection::TrackCuts::kNCuts)] = {"TrackType", "PtRange", "EtaRange", "TPCNCls", "TPCCrossedRows", "TPCCrossedRowsOverNCls", "TPCChi2NDF", "TPCRefit", "ITSNCls", "ITSChi2NDF", "ITSRefit", "ITSHits", "GoldenChi2", "DCAxy", "DCAz"};
33+
const std::string TrackSelection::mCutNames[static_cast<int>(TrackSelection::TrackCuts::kNCuts)] = {"TrackType", "PtRange", "EtaRange", "TPCNCls", "TPCCrossedRows", "TPCCrossedRowsOverNCls", "TPCChi2NDF", "TPCRefit", "ITSNCls", "ITSChi2NDF", "ITSRefit", "ITSHits", "GoldenChi2", "DCAxy", "DCAz", "TPCFracSharedCls"};
3434

3535
void TrackSelection::SetTrackType(o2::aod::track::TrackTypeEnum trackType)
3636
{
@@ -79,6 +79,11 @@ void TrackSelection::SetMinNCrossedRowsOverFindableClustersTPC(float minNCrossed
7979
mMinNCrossedRowsOverFindableClustersTPC = minNCrossedRowsOverFindableClustersTPC;
8080
LOG(info) << "Track selection, set min N crossed rows over findable clusters TPC: " << mMinNCrossedRowsOverFindableClustersTPC;
8181
}
82+
void TrackSelection::SetMaxTPCFractionSharedCls(float maxTPCFractionSharedCls)
83+
{
84+
mMaxTPCFractionSharedCls = maxTPCFractionSharedCls;
85+
LOG(info) << "Track selection, set max fraction of shared clusters TPC: " << mMaxTPCFractionSharedCls;
86+
}
8287
void TrackSelection::SetMinNClustersITS(int minNClustersITS)
8388
{
8489
mMinNClustersITS = minNClustersITS;
@@ -175,6 +180,9 @@ void TrackSelection::print() const
175180
case TrackCuts::kDCAz:
176181
LOG(info) << mCutNames[i] << " < " << mMaxDcaZ;
177182
break;
183+
case TrackCuts::kTPCFracSharedCls:
184+
LOG(info) << mCutNames[i] << " < " << mMaxTPCFractionSharedCls;
185+
break;
178186
default:
179187
LOG(fatal) << "Cut unknown!";
180188
}

Common/Core/TrackSelection.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ class TrackSelection
4545
kGoldenChi2,
4646
kDCAxy,
4747
kDCAz,
48+
kTPCFracSharedCls,
4849
kNCuts
4950
};
5051

@@ -114,6 +115,9 @@ class TrackSelection
114115
if (!IsSelected(track, TrackCuts::kDCAz)) {
115116
return false;
116117
}
118+
if (!IsSelected(track, TrackCuts::kTPCFracSharedCls)) {
119+
return false;
120+
}
117121
return true;
118122
}
119123

@@ -144,6 +148,7 @@ class TrackSelection
144148
setFlag(TrackCuts::kGoldenChi2);
145149
setFlag(TrackCuts::kDCAxy);
146150
setFlag(TrackCuts::kDCAz);
151+
setFlag(TrackCuts::kTPCFracSharedCls);
147152

148153
return flag;
149154
}
@@ -199,6 +204,8 @@ class TrackSelection
199204

200205
case TrackCuts::kDCAz:
201206
return std::fabs(track.dcaZ()) <= mMaxDcaZ;
207+
case TrackCuts::kTPCFracSharedCls:
208+
return track.tpcFractionSharedCls() <= mMaxTPCFractionSharedCls;
202209

203210
default:
204211
return false;
@@ -225,6 +232,7 @@ class TrackSelection
225232
void SetRequireNoHitsInITSLayers(std::set<uint8_t> excludedLayers);
226233
/// @brief Reset ITS requirements
227234
void ResetITSRequirements() { mRequiredITSHits.clear(); }
235+
void SetMaxTPCFractionSharedCls(float maxTPCFractionSharedCls);
228236

229237
/// @brief Print the track selection
230238
void print() const;
@@ -250,6 +258,8 @@ class TrackSelection
250258
float mMaxDcaZ{1e10f}; // max dca in z direction
251259
std::function<float(float)> mMaxDcaXYPtDep{}; // max dca in xy plane as function of pT
252260

261+
float mMaxTPCFractionSharedCls{1e10f}; // max fraction of shared TPC clusters
262+
253263
bool mRequireITSRefit{false}; // require refit in ITS
254264
bool mRequireTPCRefit{false}; // require refit in TPC
255265
bool mRequireGoldenChi2{false}; // require golden chi2 cut (Run 2 only)

Common/Core/TrackSelectionDefaults.cxx

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -120,12 +120,27 @@ TrackSelection getGlobalTrackSelectionRun3HF()
120120
// Reduced default track selection for jet validation based on hybrid cuts for converted (based on ESD's from run 2) A02D's
121121
TrackSelection getJEGlobalTrackSelectionRun2()
122122
{
123-
TrackSelection selectedTracks = getGlobalTrackSelection();
124-
selectedTracks.SetPtRange(0.15f, 1e15f);
125-
selectedTracks.SetRequireGoldenChi2(false);
126-
selectedTracks.SetMaxDcaXYPtDep([](float /*pt*/) { return 1e+10; });
123+
TrackSelection selectedTracks;
124+
125+
// These track selections are the same as the global track selections as of Jan 2025. Implemented seperately to prevent future
126+
// global track selection changes from affecting the Run 2 hybrid track selections.
127+
selectedTracks.SetTrackType(o2::aod::track::Run2Track); // Run 2 track asked by default
128+
selectedTracks.SetRequireITSRefit(true);
129+
selectedTracks.SetRequireTPCRefit(true);
130+
selectedTracks.SetRequireGoldenChi2(true);
131+
selectedTracks.SetMinNCrossedRowsTPC(70);
132+
selectedTracks.SetMinNCrossedRowsOverFindableClustersTPC(0.8f);
133+
selectedTracks.SetMaxChi2PerClusterTPC(4.f);
134+
selectedTracks.SetMaxChi2PerClusterITS(36.f);
135+
136+
// These track selections are different to the global track selections as of Jan 2025.
137+
selectedTracks.SetPtRange(0.15f, 1000.f);
127138
selectedTracks.SetEtaRange(-0.9f, 0.9f);
139+
selectedTracks.SetMaxDcaXYPtDep([](float /*pt*/) { return 1e+10; });
128140
selectedTracks.SetMaxDcaXY(2.4f);
129141
selectedTracks.SetMaxDcaZ(3.2f);
142+
selectedTracks.SetRequireHitsInITSLayers(0, {0, 1}); // no minimum required number of hits in any SPD layer
143+
selectedTracks.SetMaxTPCFractionSharedCls(0.4f); // This cut machinery was added since it's used in hybrid tracks Run 2
144+
130145
return selectedTracks;
131146
}

Common/Tools/trackSelectionRequest.cxx

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,14 @@ int trackSelectionRequest::getMinTPCCrossedRowsOverFindable() const
108108
{
109109
return minTPCcrossedrowsoverfindable;
110110
}
111+
void trackSelectionRequest::setMaxTPCFractionSharedCls(float maxTPCFractionSharedCls_)
112+
{
113+
maxTPCFractionSharedCls = maxTPCFractionSharedCls_;
114+
}
115+
int trackSelectionRequest::getMaxTPCFractionSharedCls() const
116+
{
117+
return maxTPCFractionSharedCls;
118+
}
111119
void trackSelectionRequest::setRequireITS(bool requireITS_)
112120
{
113121
requireITS = requireITS_;
@@ -159,6 +167,8 @@ void trackSelectionRequest::CombineWithLogicalOR(trackSelectionRequest const& lT
159167
minTPCcrossedrows = lTraSelRe.getMinTPCCrossedRows();
160168
if (lTraSelRe.getMinTPCCrossedRowsOverFindable() < minTPCcrossedrowsoverfindable)
161169
minTPCcrossedrowsoverfindable = lTraSelRe.getMinTPCCrossedRowsOverFindable();
170+
if (lTraSelRe.getMaxTPCFractionSharedCls() > maxTPCFractionSharedCls)
171+
maxTPCFractionSharedCls = lTraSelRe.getMaxTPCFractionSharedCls();
162172

163173
if (lTraSelRe.getRequireITS() == false)
164174
requireITS = false;
@@ -205,7 +215,9 @@ void trackSelectionRequest::PrintSelections() const
205215
LOGF(info, "Minimum TPC clusters ...................: %i", minTPCclusters);
206216
LOGF(info, "Minimum TPC crossed rows ...............: %i", minTPCcrossedrows);
207217
LOGF(info, "Minimum TPC crossed rows over findable .: %.3f", minTPCcrossedrowsoverfindable);
218+
LOGF(info, "Max Fraction of TPC Shared Clusters ....: %.3f", maxTPCFractionSharedCls);
219+
208220
LOGF(info, "Require ITS ............................: %i", requireITS);
209221
LOGF(info, "Minimum ITS clusters ...................: %i", minITSclusters);
210222
LOGF(info, "Max ITS chi2/clu ......................: %.3f", maxITSChi2percluster);
211-
}
223+
}

Common/Tools/trackSelectionRequest.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ class trackSelectionRequest
6060
int getMinTPCCrossedRows() const;
6161
void setMinTPCCrossedRowsOverFindable(float minTPCCrossedRowsOverFindable_);
6262
int getMinTPCCrossedRowsOverFindable() const;
63+
void setMaxTPCFractionSharedCls(float maxTPCFractionSharedCls_);
64+
int getMaxTPCFractionSharedCls() const;
6365

6466
void setRequireITS(bool requireITS_);
6567
bool getRequireITS() const;
@@ -97,6 +99,8 @@ class trackSelectionRequest
9799
return false;
98100
if (lTrack.tpcCrossedRowsOverFindableCls() < minTPCcrossedrowsoverfindable)
99101
return false;
102+
if (lTrack.tpcFractionSharedCls() > maxTPCFractionSharedCls)
103+
return false;
100104
if (lTrack.hasITS() == false && requireITS)
101105
return false;
102106
if (lTrack.itsNCls() < minITSclusters)
@@ -117,6 +121,8 @@ class trackSelectionRequest
117121
return false;
118122
if (lTrack.tpcCrossedRowsOverFindableCls() < minTPCcrossedrowsoverfindable)
119123
return false;
124+
if (lTrack.tpcFractionSharedCls() > maxTPCFractionSharedCls)
125+
return false;
120126
if (lTrack.hasITS() == false && requireITS)
121127
return false;
122128
if (lTrack.itsNCls() < minITSclusters)
@@ -146,6 +152,7 @@ class trackSelectionRequest
146152
int minTPCclusters;
147153
int minTPCcrossedrows;
148154
float minTPCcrossedrowsoverfindable;
155+
float maxTPCFractionSharedCls;
149156
// ITS parameters (TracksExtra)
150157
bool requireITS; // in Run 3, equiv to hasITS
151158
int minITSclusters;

PWGJE/TableProducer/derivedDataProducer.cxx

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,21 @@ struct JetDerivedDataProducerTask {
333333
}
334334
PROCESS_SWITCH(JetDerivedDataProducerTask, processTracksWithCollisionAssociator, "produces derived track table taking into account track-to-collision associations", false);
335335

336+
void processTracksRun2(soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksCov, aod::TracksDCA, aod::TrackSelection, aod::TrackSelectionExtension>::iterator const& track)
337+
{
338+
// TracksDCACov table is not yet available for Run 2 converted data. Remove this process function and use only processTracks when that becomes available.
339+
products.jTracksTable(track.collisionId(), track.pt(), track.eta(), track.phi(), jetderiveddatautilities::setTrackSelectionBit(track, track.dcaZ(), dcaZMax));
340+
float sigmaDCAXYZ2 = 0.0;
341+
float dcaXYZ = getDcaXYZ(track, &sigmaDCAXYZ2);
342+
float dcaX = -99.0;
343+
float dcaY = -99.0;
344+
345+
products.jTracksExtraTable(dcaX, dcaY, track.dcaZ(), track.dcaXY(), dcaXYZ, std::sqrt(1.), std::sqrt(1.), std::sqrt(sigmaDCAXYZ2), track.sigma1Pt()); // dummy values - will be fixed when TracksDCACov table is available for Run 2
346+
products.jTracksParentIndexTable(track.globalIndex());
347+
trackCollisionMapping[{track.globalIndex(), track.collisionId()}] = products.jTracksTable.lastIndex();
348+
}
349+
PROCESS_SWITCH(JetDerivedDataProducerTask, processTracksRun2, "produces derived track table for Run2 AO2Ds", false);
350+
336351
void processMcTrackLabels(soa::Join<aod::Tracks, aod::McTrackLabels>::iterator const& track)
337352
{
338353
if (track.has_mcParticle()) {

0 commit comments

Comments
 (0)