@@ -323,9 +323,12 @@ struct FemtoUniverseProducerTask {
323323
324324 // D0/D0bar mesons
325325 struct : o2::framework::ConfigurableGroup {
326- Configurable<float > confD0D0barCandEtaCut{" confD0D0barCandEtaCut" , 0.8 , " max. cand. pseudorapidity" };
326+ Configurable<float > trackD0CandEtaMax{" trackD0CandEtaMax" , 0.8 , " max. track/D0 cand. pseudorapidity" };
327+ Configurable<double > yD0CandGenMax{" yD0CandGenMax" , 0.5 , " max. gen. D0 cand. rapidity" };
328+ Configurable<double > yD0CandMax{" yD0CandMax" , 0.8 , " max. D0 cand. rapidity" };
327329 Configurable<float > trackD0pTGenMin{" trackD0pTGenMin" , 0.0 , " MC Truth, min. pT for tracks and D0/D0bar cand." };
328330 Configurable<float > trackD0pTGenMax{" trackD0pTGenMax" , 24.0 , " MC Truth, max. pT for tracks and D0/D0bar cand." };
331+ Configurable<bool > useYCutD0Cand{" useYCutD0Cand" , true , " True - apply cut on y of D0 cand./false - apply cut on eta" };
329332 Configurable<bool > storeD0D0barDoubleMassHypo{" storeD0D0barDoubleMassHypo" , false , " Store D0/D0bar cand. which pass selection criteria for both, D0 and D0bar" };
330333 Configurable<std::vector<int >> classMlD0D0bar{" classMlD0D0bar" , {0 , 1 , 2 }, " Indexes of ML scores to be stored. Three indexes max." };
331334 } ConfD0Selection;
@@ -1484,7 +1487,11 @@ struct FemtoUniverseProducerTask {
14841487 continue ;
14851488 }
14861489
1487- if (std::abs (hfCand.eta ()) > ConfD0Selection.confD0D0barCandEtaCut ) {
1490+ if (ConfD0Selection.useYCutD0Cand && std::abs (hfHelper.yD0 (hfCand)) > ConfD0Selection.yD0CandMax ) {
1491+ continue ;
1492+ }
1493+
1494+ if (!(ConfD0Selection.useYCutD0Cand ) && std::abs (hfCand.eta ()) > ConfD0Selection.trackD0CandEtaMax ) {
14881495 continue ;
14891496 }
14901497
@@ -1603,7 +1610,11 @@ struct FemtoUniverseProducerTask {
16031610 continue ;
16041611 }
16051612
1606- if (std::abs (hfCand.eta ()) > ConfD0Selection.confD0D0barCandEtaCut ) {
1613+ if (ConfD0Selection.useYCutD0Cand && std::abs (hfHelper.yD0 (hfCand)) > ConfD0Selection.yD0CandMax ) {
1614+ continue ;
1615+ }
1616+
1617+ if (!(ConfD0Selection.useYCutD0Cand ) && std::abs (hfCand.eta ()) > ConfD0Selection.trackD0CandEtaMax ) {
16071618 continue ;
16081619 }
16091620
@@ -1729,7 +1740,11 @@ struct FemtoUniverseProducerTask {
17291740 continue ;
17301741 }
17311742
1732- if (std::abs (hfCand.eta ()) > ConfD0Selection.confD0D0barCandEtaCut ) {
1743+ if (ConfD0Selection.useYCutD0Cand && std::abs (hfHelper.yD0 (hfCand)) > ConfD0Selection.yD0CandMax ) {
1744+ continue ;
1745+ }
1746+
1747+ if (!(ConfD0Selection.useYCutD0Cand ) && std::abs (hfCand.eta ()) > ConfD0Selection.trackD0CandEtaMax ) {
17331748 continue ;
17341749 }
17351750
@@ -2118,8 +2133,7 @@ struct FemtoUniverseProducerTask {
21182133 std::vector<int > tmpIDtrack;
21192134
21202135 for (const auto & particle : mcParts) {
2121- if (particle.eta () < -ConfFilterCuts.confEtaFilterCut || particle.eta () > ConfFilterCuts.confEtaFilterCut )
2122- continue ;
2136+
21232137 if (particle.pt () < ConfD0Selection.trackD0pTGenMin || particle.pt () > ConfD0Selection.trackD0pTGenMax )
21242138 continue ;
21252139
@@ -2152,9 +2166,18 @@ struct FemtoUniverseProducerTask {
21522166 // / check if we have D0(bar) → π± K∓
21532167 continue ;
21542168 }
2169+
21552170 if (std::abs (particle.pdgCode ()) == Pdg::kD0 ) {
2156- origin = RecoDecay::getCharmHadronOrigin (mcParts, particle);
2157- mcGenFlag = particle.flagMcMatchGen ();
2171+ if (std::abs (particle.y ()) > ConfD0Selection.yD0CandGenMax ) {
2172+ continue ;
2173+ } else {
2174+ origin = RecoDecay::getCharmHadronOrigin (mcParts, particle);
2175+ mcGenFlag = particle.flagMcMatchGen ();
2176+ }
2177+ } else {
2178+ if (std::abs (particle.eta ()) > ConfD0Selection.trackD0CandEtaMax ) {
2179+ continue ;
2180+ }
21582181 }
21592182
21602183 outputParts (outputCollision.lastIndex (),
0 commit comments