Skip to content

Commit 4befc4c

Browse files
author
Andrea
committed
adding filtering of collisions to save space and better balancing filtering of tracks.
1 parent 92bff8e commit 4befc4c

File tree

1 file changed

+22
-9
lines changed

1 file changed

+22
-9
lines changed

DPG/Tasks/ITS/filterTracks.cxx

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -146,17 +146,22 @@ struct FilterTracks {
146146
Produces<aod::GenParticles> selectedGenParticles;
147147
Produces<aod::FilterColl> filterCollTable;
148148

149+
SliceCache cache;
149150
// Configurable<int> dummy{"dummy", 0, "dummy"};
150151
Configurable<float> minTrackPt{"minTrackPt", 0.25, "min track pt"};
151152
Configurable<float> trackDcaXyMax{"trackDcaXyMax", 0.5, "max track pt"};
152153
Configurable<int> trackPtSampling{"trackPtSampling", 0, "track sampling mode"};
153154
Configurable<float> trackPtWeightLowPt{"trackPtWeightLowPt", 0.01f, "trackPtWeightLowPt"};
154155
Configurable<float> trackPtWeightMidPt{"trackPtWeightMidPt", 0.10f, "trackPtWeightMidPt"};
156+
Configurable<float> collFilterFraction{"collFilterFraction", 0.05f, "collFilterFraction"};
155157

156158
Filter trackFilter = requireGlobalTrackWoDCAInFilter() && aod::track::pt > minTrackPt&& nabs(aod::track::dcaXY) < trackDcaXyMax;
159+
Filter collFilter = nabs(aod::collision::posZ * 10000.f - nround(aod::collision::posZ * 10000.f)) < collFilterFraction.node() * 2.f;
157160
using CollisionsWithEvSel = soa::Join<aod::Collisions, aod::EvSels>;
158161
using TracksWithSelAndDca = soa::Join<aod::Tracks, aod::TracksCov, aod::TracksDCA, aod::TracksDCACov, aod::TracksExtra, aod::TrackSelection, aod::pidTPCFullPi, aod::pidTOFFullPi, aod::pidTPCFullKa, aod::pidTOFFullKa, aod::pidTPCFullPr, aod::pidTOFFullPr>;
159162
using TracksWithSelAndDcaMc = soa::Join<TracksWithSelAndDca, aod::McTrackLabels>;
163+
using FilterCollisionsWithEvSel = soa::Filtered<CollisionsWithEvSel>;
164+
160165
Partition<soa::Filtered<TracksWithSelAndDca>> lowPtTracks = aod::track::pt < 2.f && (nabs(aod::track::pt * 10000.f - nround(aod::track::pt * 10000.f)) < trackPtWeightLowPt.node() * 2.f);
161166
Partition<soa::Filtered<TracksWithSelAndDca>> midPtTracks = aod::track::pt > 2.f && aod::track::pt < 5.f && (nabs(aod::track::pt * 10000.f - nround(aod::track::pt * 10000.f)) < trackPtWeightMidPt.node() * 2.f);
162167
Partition<soa::Filtered<TracksWithSelAndDca>> highPtTracks = aod::track::pt > 5.f;
@@ -254,45 +259,53 @@ struct FilterTracks {
254259
filteredTracksMC(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
255260
}
256261
}
257-
void processData(soa::Filtered<TracksWithSelAndDca> const& tracks)
262+
void processData(FilterCollisionsWithEvSel::iterator const& collision, soa::Filtered<TracksWithSelAndDca> const& tracks)
258263
{
264+
float zvtz = collision.posZ(); // dummy to silent compilation error about unused variable
259265
if (trackPtSampling == 0) {
260266
for (auto& track : tracks) {
261267
fillTableData(track);
262268
}
263269
} else {
264-
for (auto& track : lowPtTracks) {
270+
auto lowPtTracksThisColl = lowPtTracks->sliceByCached(aod::track::collisionId, collision.globalIndex(), cache);
271+
for (auto& track : lowPtTracksThisColl) {
265272
fillTableData(track);
266273
}
267-
for (auto& track : midPtTracks) {
274+
auto midPtTracksThisColl = midPtTracks->sliceByCached(aod::track::collisionId, collision.globalIndex(), cache);
275+
for (auto& track : midPtTracksThisColl) {
268276
fillTableData(track);
269277
}
270-
for (auto& track : highPtTracks) {
278+
auto highPtTracksThisColl = highPtTracks->sliceByCached(aod::track::collisionId, collision.globalIndex(), cache);
279+
for (auto& track : highPtTracksThisColl) {
271280
fillTableData(track);
272281
}
273282
}
274283
}
275284
PROCESS_SWITCH(FilterTracks, processData, "process data", true);
276-
void processCollisions(CollisionsWithEvSel::iterator const& collision)
285+
void processCollisions(FilterCollisionsWithEvSel::iterator const& collision)
277286
{
278287
filterCollTable(collision.bcId(), collision.posX(), collision.posY(), collision.posZ(), collision.covXX(), collision.covXY(), collision.covYY(), collision.covXZ(), collision.covYZ(), collision.covZZ(), collision.flags(), collision.chi2(), collision.numContrib(), collision.collisionTime(), collision.collisionTimeRes());
279288
}
280289
PROCESS_SWITCH(FilterTracks, processCollisions, "process collisions", true);
281290

282-
void processMC(soa::Filtered<TracksWithSelAndDcaMc> const& tracks, aod::McParticles const& mcParticles)
291+
void processMC(FilterCollisionsWithEvSel::iterator const& collision, soa::Filtered<TracksWithSelAndDcaMc> const& tracks, aod::McParticles const& mcParticles)
283292
{
293+
float zvtz = collision.posZ(); // dummy to silent compilation error about unused variable
284294
if (trackPtSampling == 0) {
285295
for (auto& track : tracks) {
286296
fillTableDataMC(track, mcParticles);
287297
}
288298
} else {
289-
for (auto& track : lowPtTracksMC) {
299+
auto lowPtTracksMCThisColl = lowPtTracksMC->sliceByCached(aod::track::collisionId, collision.globalIndex(), cache);
300+
for (auto& track : lowPtTracksMCThisColl) {
290301
fillTableDataMC(track, mcParticles);
291302
}
292-
for (auto& track : midPtTracksMC) {
303+
auto midPtTracksMCThisColl = midPtTracksMC->sliceByCached(aod::track::collisionId, collision.globalIndex(), cache);
304+
for (auto& track : midPtTracksMCThisColl) {
293305
fillTableDataMC(track, mcParticles);
294306
}
295-
for (auto& track : highPtTracksMC) {
307+
auto highPtTracksMCThisColl = highPtTracksMC->sliceByCached(aod::track::collisionId, collision.globalIndex(), cache);
308+
for (auto& track : highPtTracksMCThisColl) {
296309
fillTableDataMC(track, mcParticles);
297310
}
298311
}

0 commit comments

Comments
 (0)