Skip to content

Commit 3e32aac

Browse files
authored
Fix MFT filter condition + Add MFT reassociated track table
1 parent 1b95952 commit 3e32aac

File tree

1 file changed

+25
-16
lines changed

1 file changed

+25
-16
lines changed

PWGCF/TwoParticleCorrelations/TableProducer/longrangeMaker.cxx

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,6 @@ struct LongrangeMaker {
157157
Configurable<float> cfgTofPidPtCut{"cfgTofPidPtCut", 0.3f, "Minimum pt to use TOF N-sigma"};
158158
Configurable<bool> isUseItsPid{"isUseItsPid", false, "Use ITS PID for particle identification"};
159159

160-
SliceCache cache;
161160
Service<o2::ccdb::BasicCCDBManager> ccdb;
162161
Service<o2::framework::O2DatabasePDG> pdg;
163162
o2::ccdb::CcdbApi ccdbApi;
@@ -197,6 +196,8 @@ struct LongrangeMaker {
197196
x->SetBinLabel(9, "ApplyNoHighMultCollInPrevRof");
198197

199198
myTrackFilter = getGlobalTrackSelectionRun3ITSMatch(TrackSelection::GlobalTrackRun3ITSMatching::Run3ITSibAny, TrackSelection::GlobalTrackRun3DCAxyCut::Default);
199+
myTrackFilter.SetPtRange(cfgtrksel.cfgPtCutMin, cfgtrksel.cfgPtCutMax);
200+
myTrackFilter.SetEtaRange(-cfgtrksel.cfgEtaCut, cfgtrksel.cfgEtaCut);
200201
myTrackFilter.SetMinNCrossedRowsTPC(cfgtrksel.minNCrossedRowsTPC);
201202
myTrackFilter.SetMinNClustersTPC(cfgtrksel.minTPCNClsFound);
202203
myTrackFilter.SetMaxDcaZ(cfgtrksel.maxDcaZ);
@@ -213,35 +214,30 @@ struct LongrangeMaker {
213214
Produces<aod::Ft0aLRTable> ft0aLRTable;
214215
Produces<aod::Ft0cLRTable> ft0cLRTable;
215216
Produces<aod::MftTrkLRTable> mftLRTable;
217+
Produces<aod::MftBestTrkLRTable> mftbestLRTable;
216218
Produces<aod::V0TrkLRTable> v0LRTable;
217219

218220
Filter fTracksEta = nabs(aod::track::eta) < cfgtrksel.cfgEtaCut;
219221
Filter fTracksPt = (aod::track::pt > cfgtrksel.cfgPtCutMin) && (aod::track::pt < cfgtrksel.cfgPtCutMax);
220-
Filter fMftTrackColID = (aod::fwdtrack::bestCollisionId >= 0);
221-
Filter fMftTrackDca = (nabs(aod::fwdtrack::bestDCAXY) < cfgmfttrksel.cfigMftDcaxy);
222222

223223
using CollTable = soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::CentFT0Cs, aod::CentFV0As, aod::CentFT0Ms>;
224224
using TrksTable = soa::Filtered<soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksDCA, aod::TrackSelection, aod::pidTPCFullPi, aod::pidTPCFullKa, aod::pidTPCFullPr, aod::pidTOFbeta, aod::pidTOFFullPi, aod::pidTOFFullKa, aod::pidTOFFullPr>>;
225-
using MftTrkTable = soa::Filtered<aod::MFTTracks>;
225+
using MftTrkTable = aod::MFTTracks;
226226

227-
Preslice<TrksTable> perColGlobal = aod::track::collisionId;
228-
Preslice<MftTrkTable> perColMft = aod::fwdtrack::collisionId;
229-
Preslice<aod::V0Datas> perColV0 = aod::v0data::collisionId;
230-
231-
void process(CollTable::iterator const& col, TrksTable const& tracks, aod::FT0s const&, MftTrkTable const& mfttracks, aod::V0Datas const& V0s)
227+
void process(CollTable::iterator const& col, TrksTable const& tracks, aod::FT0s const&, MftTrkTable const& mfttracks, soa::SmallGroups<aod::BestCollisionsFwd> const& retracks, aod::V0Datas const& V0s, aod::BCsWithTimestamps const&)
232228
{
233229
if (!isEventSelected(col)) {
234230
return;
235231
}
236-
auto tracksInCollision = tracks.sliceBy(perColGlobal, col.globalIndex());
237-
auto multiplicity = countNTracks(tracksInCollision);
232+
233+
auto multiplicity = countNTracks(tracks);
238234
auto centrality = selColCent(col);
239235
auto bc = col.bc_as<aod::BCsWithTimestamps>();
240236

241237
collisionLRTable(bc.runNumber(), col.posZ(), multiplicity, centrality, bc.timestamp());
242238

243239
// track loop
244-
for (const auto& track : tracksInCollision) {
240+
for (const auto& track : tracks) {
245241
if (!track.isGlobalTrack())
246242
continue;
247243
if (!myTrackFilter.IsSelected(track))
@@ -275,18 +271,31 @@ struct LongrangeMaker {
275271
}
276272

277273
// mft loop
278-
auto mfttracksInCollision = mfttracks.sliceBy(perColMft, col.globalIndex());
279-
for (const auto& track : mfttracksInCollision) {
274+
for (const auto& track : mfttracks) {
280275
if (!isMftTrackSelected(track))
281276
continue;
282277
auto phi = track.phi();
283278
o2::math_utils::bringTo02Pi(phi);
284279
mftLRTable(collisionLRTable.lastIndex(), track.pt(), track.eta(), phi);
285280
}
286281

282+
if (retracks.size() > 0) {
283+
for (const auto& retrack : retracks) {
284+
if (std::abs(retrack.bestDCAXY()) > cfgmfttrksel.cfigMftDcaxy) {
285+
continue; // does not point to PV properly
286+
}
287+
auto track = retrack.mfttrack();
288+
if (!isMftTrackSelected(track)) {
289+
continue;
290+
}
291+
auto phi = track.phi();
292+
o2::math_utils::bringTo02Pi(phi);
293+
mftbestLRTable(collisionLRTable.lastIndex(), track.pt(), track.eta(), phi);
294+
}
295+
}
296+
287297
// v0 loop
288-
auto v0tracksInCollision = V0s.sliceBy(perColV0, col.globalIndex());
289-
for (const auto& v0 : v0tracksInCollision) {
298+
for (const auto& v0 : V0s) {
290299
if (!isSelectV0Track(v0)) { // Quality selection for V0 prongs
291300
continue;
292301
}

0 commit comments

Comments
 (0)