@@ -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