@@ -898,28 +898,49 @@ struct chargedkstaranalysis {
898898 PROCESS_SWITCH (chargedkstaranalysis, processDataSE, " Process Event for data without Partitioning" , true );
899899
900900 SliceCache cache;
901- using BinningTypeVtxZT0M = ColumnBinningPolicy<aod::collision::PosZ, aod::cent::CentFT0M>;
902-
903- // using BinningTypeVtxZT0M = ColumnBinningPolicy<aod::collision::PosZ, aod::mult::MultFV0M<aod::mult::MultFV0A, aod::mult::MultFV0C>>;
904- BinningTypeVtxZT0M colBinning{{cfgvtxbins, cfgmultbins}, true };
905- void processDataME (EventCandidates const & collisions, TrackCandidates const & tracks, V0Candidates const & v0s)
901+ using BinningTypeVertexContributor = ColumnBinningPolicy<aod::collision::PosZ, aod::cent::CentFT0M>;
902+ BinningTypeVertexContributor binningOnPositions{{cfgvtxbins, cfgmultbins}, true };
903+ Pair<EventCandidates, TrackCandidates, V0Candidates, BinningTypeVertexContributor> pair{binningOnPositions, nEvtMixing, -1 , &cache};
904+ void processDataME (EventCandidates const & /* collisions*/ , TrackCandidates const & /* tracks*/ , V0Candidates const & /* V0s*/ )
906905 {
907- Preslice<aod::Tracks> perCollision = aod::track::collisionId;
908- Preslice<aod::V0s> perCollisionV0 = aod::v0::collisionId;
909- auto tracksV0sTuple = std::make_tuple (tracks, v0s);
910-
911- Pair<EventCandidates, TrackCandidates, V0Candidates, BinningTypeVtxZT0M> pair{colBinning, nEvtMixing, -1 , collisions, tracksV0sTuple, &cache};
912- // restrk1 is a TrackCandidates table of tracks belonging to collision c1 (aod::Collision::iterator)
913- // resov0s2 is a V0Candidates table of V0s belonging to collision c2 (aod::Collision::iterator)
914- for (const auto & [c1, restrk1, c2, resov0s2] : pair) {
915- if (!colCuts.isSelected (c1) || !colCuts.isSelected (c2)) {
916- // Default event selection
906+ for (auto & [c1, tracks1, c2, tracks2] : pair) {
907+
908+ if (!colCuts.isSelected (c1)) {
917909 continue ;
918910 }
919- colCuts.fillQA (c1);
920- fillHistograms<false , true >(c1, restrk1, resov0s2);
911+ if (!colCuts.isSelected (c2)) {
912+ continue ;
913+ }
914+
915+ for (auto & [t1, t2] : o2::soa::combinations (
916+ o2::soa::CombinationsFullIndexPolicy (tracks1, tracks2))) {
917+ // Here t1 corressponds to bachelor track and t2 corressponds to v0s.
918+ if (!isTrackSelected (t1))
919+ continue ;
920+ if (!trackCut (t1))
921+ continue ;
922+ if (!selectionPIDPion (t1))
923+ continue ;
924+
925+ auto posDauTrack = t2.template posTrack_as <TrackCandidates>();
926+ auto negDauTrack = t2.template negTrack_as <TrackCandidates>();
927+ if (!cfgByPassDauPIDSelection && !selectionPIDPion (posDauTrack)) // Perhaps it's already applied in trackCut (need to check QA plots)
928+ continue ;
929+ if (!cfgByPassDauPIDSelection && !selectionPIDPion (negDauTrack))
930+ continue ;
931+ if (!selectionK0s (c2, t2))
932+ continue ;
933+
934+ ROOT::Math::PxPyPzMVector lResoSecondary, lDecayDaughter_bach, lResoKstar;
935+ lDecayDaughter_bach = ROOT::Math::PxPyPzMVector (t1.px (), t1.py (), t1.pz (), massPi);
936+ lResoSecondary = ROOT::Math::PxPyPzMVector (t2.px (), t2.py (), t2.pz (), massK0s);
937+ lResoKstar = lResoSecondary + lDecayDaughter_bach;
938+
939+ if (lResoKstar.Rapidity () > cKstarMaxRap || lResoKstar.Rapidity () < cKstarMinRap)
940+ continue ;
941+ histos.fill (HIST (" hInvmass_KstarME" ), c1.centFT0M (), lResoKstar.Pt (), lResoKstar.M ());
942+ }
921943 }
922- // fillHistograms<false, false>(collision, tracks, v0s); // second order
923944 }
924945 PROCESS_SWITCH (chargedkstaranalysis, processDataME, " Process Event for data without Partitioning" , true );
925946
0 commit comments