Skip to content

Commit d68db11

Browse files
authored
[PWGCF] FU: adding y cut for D0s and possibility to run with prompt D0s (#13308)
1 parent 1add4e2 commit d68db11

File tree

4 files changed

+242
-47
lines changed

4 files changed

+242
-47
lines changed

PWGCF/FemtoUniverse/TableProducer/femtoUniverseProducerMCTruthTask.cxx

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,9 @@ struct FemtoUniverseProducerMCTruthTask {
106106
Configurable<float> confEtaFilterCut{"confEtaFilterCut", 0.8, "Eta cut for the filtering tracks"};
107107
} ConfFilteringTracks;
108108

109+
// D0/D0bar cuts
110+
Configurable<float> yD0CandGenMax{"yD0CandGenMax", 0.5, "Rapidity cut for the D0/D0bar mesons"};
111+
109112
FemtoUniverseCollisionSelection colCuts;
110113
FemtoUniverseTrackSelection trackCuts;
111114
HistogramRegistry qaRegistry{"QAHistos", {}, OutputObjHandlingPolicy::QAObject};
@@ -162,8 +165,6 @@ struct FemtoUniverseProducerMCTruthTask {
162165
/// if the most open selection criteria are not fulfilled there is no
163166
/// point looking further at the track
164167

165-
if (particle.eta() < -ConfFilteringTracks.confEtaFilterCut || particle.eta() > ConfFilteringTracks.confEtaFilterCut)
166-
continue;
167168
if (particle.pt() < ConfFilteringTracks.confPtLowFilterCut || particle.pt() > ConfFilteringTracks.confPtHighFilterCut)
168169
continue;
169170

@@ -188,6 +189,24 @@ struct FemtoUniverseProducerMCTruthTask {
188189
continue;
189190
}
190191

192+
// check if D0/D0bar mesons pass the rapidity cut
193+
// if pass then saving the orgin of D0/D0bar
194+
// check if tracks (besides D0/D0bar) pass pseudorapidity cut
195+
int8_t origin = -99;
196+
if (std::abs(particle.pdgCode()) == Pdg::kD0) {
197+
if (std::abs(particle.y()) > yD0CandGenMax) {
198+
continue;
199+
} else {
200+
origin = RecoDecay::getCharmHadronOrigin(tracks, particle);
201+
}
202+
} else {
203+
if (std::abs(particle.eta()) > ConfFilteringTracks.confEtaFilterCut) {
204+
continue;
205+
} else {
206+
origin = -99;
207+
}
208+
}
209+
191210
/// check if we end-up with the correct final state using MC info
192211
int8_t sign = 0;
193212
if (std::abs(pdgCode) == Pdg::kD0 && !RecoDecay::isMatchedMCGen(tracks, particle, Pdg::kD0, std::array{+kPiPlus, -kKPlus}, true, &sign)) {
@@ -216,8 +235,8 @@ struct FemtoUniverseProducerMCTruthTask {
216235
pdgCode,
217236
pdgCode,
218237
childIDs,
219-
0,
220-
0);
238+
origin,
239+
-999.);
221240
}
222241
}
223242

PWGCF/FemtoUniverse/TableProducer/femtoUniverseProducerTask.cxx

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)