Skip to content

Commit adc5c55

Browse files
authored
[PWGHF] task to calculate directed flow of Dstar (#8778)
1 parent 670245b commit adc5c55

File tree

1 file changed

+42
-2
lines changed

1 file changed

+42
-2
lines changed

PWGHF/D2H/Tasks/taskDirectedFlowCharmHadrons.cxx

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,12 @@ using namespace o2::hf_evsel;
4343

4444
enum DecayChannel { DplusToPiKPi = 0,
4545
D0ToPiK,
46-
D0ToKPi };
46+
D0ToKPi,
47+
DstarToD0Pi };
4748

4849
struct HfTaskDirectedFlowCharmHadrons {
4950
Configurable<int> centEstimator{"centEstimator", 2, "Centrality estimation (FT0A: 1, FT0C: 2, FT0M: 3, FV0A: 4)"};
51+
Configurable<bool> selectionFlagDstar{"selectionFlagDstar", false, "Selection Flag for Dstar"};
5052
Configurable<int> selectionFlag{"selectionFlag", 1, "Selection Flag for hadron (e.g. 1 for skimming, 3 for topo. and kine., 7 for PID)"};
5153
Configurable<float> centralityMin{"centralityMin", 0., "Minimum centrality accepted in SP computation"};
5254
Configurable<float> centralityMax{"centralityMax", 100., "Maximum centrality accepted in SP computation"};
@@ -69,11 +71,14 @@ struct HfTaskDirectedFlowCharmHadrons {
6971
using CandDplusData = soa::Filtered<soa::Join<aod::HfCand3Prong, aod::HfSelDplusToPiKPi>>;
7072
using CandD0DataWMl = soa::Filtered<soa::Join<aod::HfCand2Prong, aod::HfSelD0, aod::HfMlD0>>;
7173
using CandD0Data = soa::Filtered<soa::Join<aod::HfCand2Prong, aod::HfSelD0>>;
74+
using CandDstarDataWMl = soa::Filtered<soa::Join<aod::HfCandDstars, aod::HfSelDstarToD0Pi, aod::HfMlDstarToD0Pi>>;
75+
using CandDstarData = soa::Filtered<soa::Join<aod::HfCandDstars, aod::HfSelDstarToD0Pi>>;
7276
using CollsWithQvecs = soa::Join<aod::Collisions, aod::EvSels, aod::CentFV0As, aod::CentFT0Ms, aod::CentFT0As, aod::CentFT0Cs, aod::SPCalibrationTables>;
7377
using TracksWithExtra = soa::Join<aod::Tracks, aod::TracksExtra>;
7478

7579
Filter filterSelectDplusCandidates = aod::hf_sel_candidate_dplus::isSelDplusToPiKPi >= selectionFlag;
7680
Filter filterSelectD0Candidates = aod::hf_sel_candidate_d0::isSelD0 >= selectionFlag || aod::hf_sel_candidate_d0::isSelD0bar >= selectionFlag;
81+
Filter filterSelectDstarCandidates = aod::hf_sel_candidate_dstar::isSelDstarToD0Pi == selectionFlagDstar;
7782

7883
Partition<CandD0Data> selectedD0ToPiK = aod::hf_sel_candidate_d0::isSelD0 >= selectionFlag;
7984
Partition<CandD0Data> selectedD0ToKPi = aod::hf_sel_candidate_d0::isSelD0bar >= selectionFlag;
@@ -92,7 +97,7 @@ struct HfTaskDirectedFlowCharmHadrons {
9297
{
9398

9499
/// check process functions
95-
std::array<int, 4> processes = {doprocessDplusStd, doprocessDplusMl, doprocessD0Std, doprocessD0Ml};
100+
std::array<int, 6> processes = {doprocessDplusStd, doprocessDplusMl, doprocessD0Std, doprocessD0Ml, doprocessDstarStd, doprocessDstarMl};
96101
const int nProcesses = std::accumulate(processes.begin(), processes.end(), 0);
97102
if (nProcesses > 1) {
98103
LOGP(fatal, "Only one process function should be enabled at a time, please check your configuration");
@@ -203,6 +208,7 @@ struct HfTaskDirectedFlowCharmHadrons {
203208
for (const auto& candidate : candidates) {
204209
double massCand = 0.;
205210
double rapCand = 0.;
211+
double signDstarCand = 0.0;
206212
std::vector<double> outputMl = {-999., -999.};
207213
if constexpr (std::is_same_v<T1, CandDplusData> || std::is_same_v<T1, CandDplusDataWMl>) {
208214
massCand = hfHelper.invMassDplusToPiKPi(candidate);
@@ -230,6 +236,19 @@ struct HfTaskDirectedFlowCharmHadrons {
230236
default:
231237
break;
232238
}
239+
} else if constexpr (std::is_same_v<T1, CandDstarData> || std::is_same_v<T1, CandDstarDataWMl>) {
240+
signDstarCand = candidate.signSoftPi();
241+
if (candidate.signSoftPi() > 0) {
242+
massCand = std::abs(candidate.invMassDstar() - candidate.invMassD0());
243+
rapCand = candidate.y(candidate.invMassDstar());
244+
} else if (candidate.signSoftPi() < 0) {
245+
massCand = std::abs(candidate.invMassAntiDstar() - candidate.invMassD0Bar());
246+
rapCand = candidate.y(candidate.invMassAntiDstar());
247+
}
248+
if constexpr (std::is_same_v<T1, CandDstarDataWMl>) {
249+
for (unsigned int iclass = 0; iclass < classMl->size(); iclass++)
250+
outputMl[iclass] = candidate.mlProbDstarToD0Pi()[classMl->at(iclass)];
251+
}
233252
}
234253

235254
auto trackprong0 = candidate.template prong0_as<Trk>();
@@ -244,6 +263,9 @@ struct HfTaskDirectedFlowCharmHadrons {
244263
if (userap)
245264
etaCand = rapCand;
246265

266+
if (selectionFlagDstar)
267+
sign = signDstarCand;
268+
247269
auto ux = cosNPhi; // real part of candidate q vector
248270
auto uy = sinNPhi; // imaginary part of candidate q vector
249271
auto uxQxp = ux * qxZDCA;
@@ -322,6 +344,24 @@ struct HfTaskDirectedFlowCharmHadrons {
322344
}
323345
PROCESS_SWITCH(HfTaskDirectedFlowCharmHadrons, processDplusStd, "Process Dplus candidates with rectangular cuts", true);
324346

347+
// Dstar with ML
348+
void processDstarMl(CollsWithQvecs::iterator const& collision,
349+
CandDstarDataWMl const& candidatesDstar,
350+
TracksWithExtra const& tracks)
351+
{
352+
runFlowAnalysis<DecayChannel::DstarToD0Pi>(collision, candidatesDstar, tracks);
353+
}
354+
PROCESS_SWITCH(HfTaskDirectedFlowCharmHadrons, processDstarMl, "Process Dstar candidates with ML", false);
355+
356+
// Dstar with rectangular cuts
357+
void processDstarStd(CollsWithQvecs::iterator const& collision,
358+
CandDstarData const& candidatesDstar,
359+
TracksWithExtra const& tracks)
360+
{
361+
runFlowAnalysis<DecayChannel::DstarToD0Pi>(collision, candidatesDstar, tracks);
362+
}
363+
PROCESS_SWITCH(HfTaskDirectedFlowCharmHadrons, processDstarStd, "Process Dstar candidates with rectangular cuts", true);
364+
325365
}; // End struct HfTaskDirectedFlowCharmHadrons
326366

327367
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)

0 commit comments

Comments
 (0)