@@ -161,6 +161,9 @@ struct Kstar892LightIon {
161161 Configurable<bool > isZvtxPosSelMC{" isZvtxPosSelMC" , true , " Zvtx position selection for MC events?" };
162162 Configurable<bool > selTVXMC{" selTVXMC" , true , " apply TVX selection in MC?" };
163163 Configurable<bool > selINELgt0MC{" selINELgt0MC" , true , " Select INEL > 0?" };
164+
165+ Configurable<float > invMassMinMID{" invMassMinMID" , 0.6 , " Minimum invariant mass for MID" };
166+ Configurable<float > invMassMaxMID{" invMassMaxMID" , 0.82 , " Maximum invariant mass for MID" };
164167 } selectionConfig;
165168
166169 Configurable<bool > calcLikeSign{" calcLikeSign" , true , " Calculate Like Sign" };
@@ -378,6 +381,8 @@ struct Kstar892LightIon {
378381 hMC.add (" Reflections/hOmegaToKpi" , " Refelction template of Omega" , kTH3F , {ptAxis, centralityAxis, invmassAxis});
379382 hMC.add (" Reflections/hPhiToKpi" , " Refelction template of Phi" , kTH3F , {ptAxis, centralityAxis, invmassAxis});
380383 hMC.add (" Reflections/hKstarSelf" , " Refelction template of Kstar" , kTH3F , {ptAxis, centralityAxis, invmassAxis});
384+ hMC.add (" Reflections/hEtaToKpi" , " Refelction template of Eta" , kTH3F , {ptAxis, centralityAxis, invmassAxis});
385+ hMC.add (" Reflections/hEtaPrimeToKpi" , " Refelction template of Eta'" , kTH3F , {ptAxis, centralityAxis, invmassAxis});
381386 }
382387
383388 if (doprocessMCCheck) {
@@ -1998,6 +2003,50 @@ struct Kstar892LightIon {
19982003 hMC.fill (HIST (" Reflections/hOmegaToKpi" ), fake2.Pt (), centrality, fake2.M ());
19992004 }
20002005
2006+ // =====================================================
2007+ // Eta -> pi pi(pi0) -> K pi
2008+ // =====================================================
2009+ if (motherPDG == o2::constants::physics::kEta && pdg1 == PDG_t::kPiPlus && pdg2 == PDG_t::kPiPlus ) {
2010+
2011+ // track 1 -> K
2012+ ROOT::Math::PxPyPzMVector p1K (track1.px (), track1.py (), track1.pz (), massKa);
2013+ ROOT::Math::PxPyPzMVector p2Pi (track2.px (), track2.py (), track2.pz (), massPi);
2014+ auto fake1 = p1K + p2Pi;
2015+
2016+ if (fake1.Rapidity () > selectionConfig.motherRapidityMin && fake1.Rapidity () < selectionConfig.motherRapidityMax )
2017+ hMC.fill (HIST (" Reflections/hEtaToKpi" ), fake1.Pt (), centrality, fake1.M ());
2018+
2019+ // track 2 -> K
2020+ ROOT::Math::PxPyPzMVector p1Pi (track1.px (), track1.py (), track1.pz (), massPi);
2021+ ROOT::Math::PxPyPzMVector p2K (track2.px (), track2.py (), track2.pz (), massKa);
2022+ auto fake2 = p1Pi + p2K;
2023+
2024+ if (fake2.Rapidity () > selectionConfig.motherRapidityMin && fake2.Rapidity () < selectionConfig.motherRapidityMax )
2025+ hMC.fill (HIST (" Reflections/hEtaToKpi" ), fake2.Pt (), centrality, fake2.M ());
2026+ }
2027+
2028+ // =====================================================
2029+ // Eta' (958) -> pi pi(eta) -> K pi
2030+ // =====================================================
2031+ if (motherPDG == o2::constants::physics::kEtaPrime && pdg1 == PDG_t::kPiPlus && pdg2 == PDG_t::kPiPlus ) {
2032+
2033+ // track 1 -> K
2034+ ROOT::Math::PxPyPzMVector p1K (track1.px (), track1.py (), track1.pz (), massKa);
2035+ ROOT::Math::PxPyPzMVector p2Pi (track2.px (), track2.py (), track2.pz (), massPi);
2036+ auto fake1 = p1K + p2Pi;
2037+
2038+ if (fake1.Rapidity () > selectionConfig.motherRapidityMin && fake1.Rapidity () < selectionConfig.motherRapidityMax )
2039+ hMC.fill (HIST (" Reflections/hEtaPrimeToKpi" ), fake1.Pt (), centrality, fake1.M ());
2040+
2041+ // track 2 -> K
2042+ ROOT::Math::PxPyPzMVector p1Pi (track1.px (), track1.py (), track1.pz (), massPi);
2043+ ROOT::Math::PxPyPzMVector p2K (track2.px (), track2.py (), track2.pz (), massKa);
2044+ auto fake2 = p1Pi + p2K;
2045+
2046+ if (fake2.Rapidity () > selectionConfig.motherRapidityMin && fake2.Rapidity () < selectionConfig.motherRapidityMax )
2047+ hMC.fill (HIST (" Reflections/hEtaPrimeToKpi" ), fake2.Pt (), centrality, fake2.M ());
2048+ }
2049+
20012050 // =====================================================
20022051 // Phi (1020) -> KK -> K pi
20032052 // =====================================================
@@ -2261,6 +2310,90 @@ struct Kstar892LightIon {
22612310 hMC.fill (HIST (" MCCheck/NchMC_AllGen" ), nChMCEta08);
22622311 }
22632312 PROCESS_SWITCH (Kstar892LightIon, processMCCheck, " Cross-check MC analysis" , false );
2313+
2314+ void processSEMassMID (EventCandidates::iterator const & collision, TrackCandidates const & tracks, aod::BCs const &)
2315+ {
2316+ if (!selectionEvent (collision, true )) { // fill data event cut histogram
2317+ return ;
2318+ }
2319+
2320+ centrality = -1 ;
2321+
2322+ if (selectCentEstimator == kFT0M ) {
2323+ centrality = collision.centFT0M ();
2324+ } else if (selectCentEstimator == kFT0A ) {
2325+ centrality = collision.centFT0A ();
2326+ } else if (selectCentEstimator == kFT0C ) {
2327+ centrality = collision.centFT0C ();
2328+ } else if (selectCentEstimator == kFV0A ) {
2329+ centrality = collision.centFV0A ();
2330+ } else {
2331+ centrality = collision.centFT0M (); // default
2332+ }
2333+
2334+ /* else if (selectCentEstimator == 4) {
2335+ centrality = collision.centMFT();
2336+ } */
2337+ /* else if (selectCentEstimator == 5) {
2338+ centrality = collision.centNGlobal();
2339+ } */
2340+ /* else if (selectCentEstimator == 6) {
2341+ centrality = collision.centNTPV();
2342+ } */
2343+
2344+ if (cQAevents) {
2345+ hEventSelection.fill (HIST (" hVertexZ" ), collision.posZ ());
2346+ hEventSelection.fill (HIST (" hCentrality" ), centrality);
2347+ }
2348+
2349+ for (const auto & [track1, track2] : combinations (CombinationsFullIndexPolicy (tracks, tracks))) {
2350+ if (!selectionTrack (track1) || !selectionTrack (track2)) {
2351+ continue ;
2352+ }
2353+
2354+ if (track1.globalIndex () == track2.globalIndex ())
2355+ continue ;
2356+
2357+ if (!selectionPair (track1, track2)) {
2358+ continue ;
2359+ }
2360+
2361+ // since we are using combinations full index policy, so repeated pairs are allowed, so we can check one with Kaon and other with pion
2362+ if ((!selectionConfig.isApplypTdepPID && !selectionConfig.isApplypTdepPIDwTOF ) && !selectionPID (track1, 1 )) // Track 1 is checked with Kaon
2363+ continue ;
2364+ if ((!selectionConfig.isApplypTdepPID && !selectionConfig.isApplypTdepPIDwTOF ) && !selectionPID (track2, 0 )) // Track 2 is checked with Pion
2365+ continue ;
2366+
2367+ if (selectionConfig.isApplypTdepPID && !selectionPIDpTdep (track1, 1 )) // Track 1 is checked with Kaon
2368+ continue ;
2369+ if (selectionConfig.isApplypTdepPID && !selectionPIDpTdep (track2, 0 )) // Track 2 is checked with Pion
2370+ continue ;
2371+
2372+ if (selectionConfig.isApplypTdepPIDwTOF && !selectionPIDpTdepTOF (track1, 1 )) // Track 1 is checked with Kaon
2373+ continue ;
2374+ if (selectionConfig.isApplypTdepPIDwTOF && !selectionPIDpTdepTOF (track2, 0 )) // Track 2 is checked with Pion
2375+ continue ;
2376+
2377+ /* if (selectionConfig.isApplyMID && (selectionMID(track1, 0) || selectionMID(track2, 1)))
2378+ continue;
2379+
2380+ if (selectionConfig.isApplypTdepMID && (selectionMIDpTdep(track1, 0) || selectionMIDpTdep(track2, 1)))
2381+ continue; */
2382+
2383+ daughter1 = ROOT::Math::PxPyPzMVector (track1.px (), track1.py (), track1.pz (), massKa);
2384+ daughter2 = ROOT::Math::PxPyPzMVector (track2.px (), track2.py (), track2.pz (), massPi);
2385+ mother = daughter1 + daughter2; // Kstar meson
2386+
2387+ if (mother.M () < selectionConfig.invMassMaxMID && mother.M () > selectionConfig.invMassMinMID ) {
2388+ if (selectionConfig.isApplyMID && (selectionMID (track1, 0 ) || selectionMID (track2, 1 )))
2389+ continue ;
2390+ }
2391+
2392+ isMix = false ;
2393+ fillInvMass (daughter1, daughter2, mother, centrality, isMix, track1, track2);
2394+ }
2395+ }
2396+ PROCESS_SWITCH (Kstar892LightIon, processSEMassMID, " Process Same event" , false );
22642397};
22652398
22662399WorkflowSpec defineDataProcessing (ConfigContext const & cfgc)
0 commit comments