Skip to content

Commit bdece25

Browse files
authored
[ALICE3] Additional selections to decayfinder (#9939)
1 parent 2d8dead commit bdece25

File tree

1 file changed

+108
-12
lines changed

1 file changed

+108
-12
lines changed

ALICE3/TableProducer/alice3-decayfinder.cxx

Lines changed: 108 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,15 @@ struct alice3decayFinder {
8080
Configurable<float> kaFromD_dcaXYconstant{"kaFromD_dcaXYconstant", -1.0f, "[0] in |DCAxy| > [0]+[1]/pT"};
8181
Configurable<float> kaFromD_dcaXYpTdep{"kaFromD_dcaXYpTdep", 0.0, "[1] in |DCAxy| > [0]+[1]/pT"};
8282

83+
Configurable<float> DCosPA{"Cos of pointing angle", 0.99, " Cos of pointing angle: pt < 3 GeV"};
84+
Configurable<float> DCosPAHighPt{"Cos of pointing angle high pt", 0.995, " Cos of pointing angle: 3 GeV < pt"};
85+
Configurable<float> DCosPAxy{"Cos of pointing angle xy", 0.99, " Cos of pointing angle xy: pt < 3 GeV"};
86+
Configurable<float> DCosPAxyHighPt{"Cos of pointing angle xy high pt", 0.995, " Cos of pointing angle xy: 3 GeV < pt"};
87+
Configurable<float> DCosThetaStarLowPt{"Cos theta low pt", 0.8, "Cos theta; pt < 9"};
88+
Configurable<float> DCosThetaStarHighPt{"Cos theta high pt", 0.9, "Cos theta; 9 < pt < 16"};
89+
Configurable<float> DCosThetaStarVHighPt{"Cos theta vhigh", 1.0, "Cos theta; 16 < pt"};
90+
Configurable<float> DDauDecayLength{"Normalized dau decay length", 3, "|Normalized dau decay length| > [0]"};
91+
8392
Configurable<float> piFromLc_dcaXYconstant{"piFromLc_dcaXYconstant", -1.0f, "[0] in |DCAxy| > [0]+[1]/pT"};
8493
Configurable<float> piFromLc_dcaXYpTdep{"piFromLc_dcaXYpTdep", 0.0, "[1] in |DCAxy| > [0]+[1]/pT"};
8594
Configurable<float> kaFromLc_dcaXYconstant{"kaFromLc_dcaXYconstant", -1.0f, "[0] in |DCAxy| > [0]+[1]/pT"};
@@ -90,8 +99,8 @@ struct alice3decayFinder {
9099
ConfigurableAxis axisEta{"axisEta", {8, -4.0f, +4.0f}, "#eta"};
91100
ConfigurableAxis axisPt{"axisPt", {VARIABLE_WIDTH, 0.0f, 0.1f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f, 0.9f, 1.0f, 1.1f, 1.2f, 1.3f, 1.4f, 1.5f, 1.6f, 1.7f, 1.8f, 1.9f, 2.0f, 2.2f, 2.4f, 2.6f, 2.8f, 3.0f, 3.2f, 3.4f, 3.6f, 3.8f, 4.0f, 4.4f, 4.8f, 5.2f, 5.6f, 6.0f, 6.5f, 7.0f, 7.5f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 17.0f, 19.0f, 21.0f, 23.0f, 25.0f, 30.0f, 35.0f, 40.0f, 50.0f}, "pt axis for QA histograms"};
92101
ConfigurableAxis axisDCA{"axisDCA", {200, -100, 100}, "DCA (#mum)"};
93-
ConfigurableAxis axisDMass{"axisDMass", {200, 1.765f, 1.965f}, "D Inv Mass (GeV/c^{2})"};
94102
ConfigurableAxis axisDCADaughters{"axisDCADaughters", {200, 0, 100}, "DCA (#mum)"};
103+
ConfigurableAxis axisDMass{"axisDMass", {200, 1.765f, 1.965f}, "D Inv Mass (GeV/c^{2})"};
95104
ConfigurableAxis axisLcMass{"axisLcMass", {200, 2.186f, 2.386f}, "#Lambda_{c} Inv Mass (GeV/c^{2})"};
96105

97106
o2::vertexing::DCAFitterN<2> fitter;
@@ -120,7 +129,9 @@ struct alice3decayFinder {
120129

121130
// partitions for D mesons
122131
Partition<alice3tracks> tracksPiPlusFromD =
123-
((aod::a3DecayMap::decayMap & trackSelectionPiPlusFromD) == trackSelectionPiPlusFromD) && aod::track::signed1Pt > 0.0f && nabs(aod::track::dcaXY) > piFromD_dcaXYconstant + piFromD_dcaXYpTdep* nabs(aod::track::signed1Pt);
132+
((aod::a3DecayMap::decayMap & trackSelectionPiPlusFromD) == trackSelectionPiPlusFromD) &&
133+
aod::track::signed1Pt > 0.0f &&
134+
nabs(aod::track::dcaXY) > piFromD_dcaXYconstant + piFromD_dcaXYpTdep* nabs(aod::track::signed1Pt);
124135
Partition<alice3tracks> tracksPiMinusFromD =
125136
((aod::a3DecayMap::decayMap & trackSelectionPiMinusFromD) == trackSelectionPiMinusFromD) && aod::track::signed1Pt < 0.0f && nabs(aod::track::dcaXY) > piFromD_dcaXYconstant + piFromD_dcaXYpTdep* nabs(aod::track::signed1Pt);
126137
Partition<alice3tracks> tracksKaPlusFromD =
@@ -147,8 +158,14 @@ struct alice3decayFinder {
147158
struct {
148159
float dcaDau;
149160
float mass;
161+
std::array<float, 3> posSV;
162+
std::array<float, 3> P;
150163
float pt;
151164
float eta;
165+
float cosPA;
166+
float cosPAxy;
167+
float cosThetaStar;
168+
float normalizedDecayLength;
152169
} dmeson;
153170

154171
struct {
@@ -183,15 +200,19 @@ struct alice3decayFinder {
183200
std::array<float, 3> negP;
184201
posTrack.getPxPyPzGlo(posP);
185202
negTrack.getPxPyPzGlo(negP);
186-
187203
dmeson.dcaDau = TMath::Sqrt(fitter.getChi2AtPCACandidate());
188-
if (dmeson.dcaDau > dcaDaughtersSelection)
189-
return false;
190204

191205
// return mass
192206
dmeson.mass = RecoDecay::m(array{array{posP[0], posP[1], posP[2]}, array{negP[0], negP[1], negP[2]}}, array{posMass, negMass});
193207
dmeson.pt = std::hypot(posP[0] + negP[0], posP[1] + negP[1]);
194208
dmeson.eta = RecoDecay::eta(array{posP[0] + negP[0], posP[1] + negP[1], posP[2] + negP[2]});
209+
const auto posSV = fitter.getPCACandidate();
210+
dmeson.posSV[0] = posSV[0];
211+
dmeson.posSV[1] = posSV[1];
212+
dmeson.posSV[2] = posSV[2];
213+
o2::track::TrackParCov parentTrack = fitter.createParentTrackParCov();
214+
parentTrack.getPxPyPzGlo(dmeson.P);
215+
dmeson.cosThetaStar = RecoDecay::cosThetaStar(std::array{std::array{posP[0], posP[1], posP[2]}, std::array{negP[0], negP[1], negP[2]}}, std::array{posMass, negMass}, dmeson.mass, 0);
195216
return true;
196217
}
197218

@@ -225,7 +246,7 @@ struct alice3decayFinder {
225246
t1.getPxPyPzGlo(P1);
226247
t2.getPxPyPzGlo(P2);
227248

228-
lcbaryon.dcaDau = TMath::Sqrt(fitter.getChi2AtPCACandidate());
249+
lcbaryon.dcaDau = TMath::Sqrt(fitter3.getChi2AtPCACandidate());
229250
if (lcbaryon.dcaDau > dcaDaughtersSelection)
230251
return false;
231252

@@ -292,10 +313,15 @@ struct alice3decayFinder {
292313

293314
histos.add("hMassD", "hMassD", kTH1F, {axisDMass});
294315
histos.add("hMassDbar", "hMassDbar", kTH1F, {axisDMass});
295-
histos.add("hDCADDaughters", "hDCADDaughters", kTH1D, {axisDCADaughters});
296-
histos.add("hDCADbarDaughters", "hDCADbarDaughters", kTH1D, {axisDCADaughters});
316+
317+
histos.add("hDCosPA", "hDCosPA", kTH1F, {{200, 0, 1}});
318+
histos.add("hDCosPAxy", "hDCosPAxy", kTH1F, {{200, 0, 1}});
319+
histos.add("hDCosThetaStar", "hDCosThetaStar", kTH1F, {{200, -1, 1}});
320+
histos.add("hDDauDecayLength", "hDDauDecayLength", kTH1F, {{100, 0, 10}});
297321

298322
if (doDCAplotsD) {
323+
histos.add("hDCADDaughters", "hDCADDaughters", kTH1D, {axisDCADaughters});
324+
histos.add("hDCADbarDaughters", "hDCADbarDaughters", kTH1D, {axisDCA});
299325
histos.add("h2dDCAxyVsPtPiPlusFromD", "h2dDCAxyVsPtPiPlusFromD", kTH2F, {axisPt, axisDCA});
300326
histos.add("h2dDCAxyVsPtPiMinusFromD", "h2dDCAxyVsPtPiMinusFromD", kTH2F, {axisPt, axisDCA});
301327
histos.add("h2dDCAxyVsPtKaPlusFromD", "h2dDCAxyVsPtKaPlusFromD", kTH2F, {axisPt, axisDCA});
@@ -310,10 +336,10 @@ struct alice3decayFinder {
310336

311337
histos.add("hMassLc", "hMassLc", kTH1F, {axisLcMass});
312338
histos.add("hMassLcbar", "hMassLcbar", kTH1F, {axisLcMass});
313-
histos.add("hDCALcDaughters", "hDCALcDaughters", kTH1D, {axisDCADaughters});
314-
histos.add("hDCALcbarDaughters", "hDCALcbarDaughters", kTH1D, {axisDCADaughters});
315339

316340
if (doDCAplotsD) {
341+
histos.add("hDCALcDaughters", "hDCALcDaughters", kTH1D, {axisDCADaughters});
342+
histos.add("hDCALcbarDaughters", "hDCALcbarDaughters", kTH1D, {axisDCA});
317343
histos.add("h2dDCAxyVsPtPiPlusFromLc", "h2dDCAxyVsPtPiPlusFromLc", kTH2F, {axisPt, axisDCA});
318344
histos.add("h2dDCAxyVsPtPiMinusFromLc", "h2dDCAxyVsPtPiMinusFromLc", kTH2F, {axisPt, axisDCA});
319345
histos.add("h2dDCAxyVsPtKaPlusFromLc", "h2dDCAxyVsPtKaPlusFromLc", kTH2F, {axisPt, axisDCA});
@@ -369,6 +395,41 @@ struct alice3decayFinder {
369395
continue;
370396
if (!buildDecayCandidateTwoBody(posTrackRow, negTrackRow, o2::constants::physics::MassPionCharged, o2::constants::physics::MassKaonCharged))
371397
continue;
398+
399+
dmeson.cosPA = RecoDecay::cpa(std::array{collision.posX(), collision.posY(), collision.posZ()}, std::array{dmeson.posSV[0], dmeson.posSV[1], dmeson.posSV[2]}, std::array{dmeson.P[0], dmeson.P[1], dmeson.P[2]});
400+
dmeson.cosPAxy = RecoDecay::cpaXY(std::array{collision.posX(), collision.posY(), collision.posZ()}, std::array{dmeson.posSV[0], dmeson.posSV[1], dmeson.posSV[2]}, std::array{dmeson.P[0], dmeson.P[1], dmeson.P[2]});
401+
402+
const float dmesonCtau = 0.012301;
403+
dmeson.normalizedDecayLength = ((dmeson.mass * std::fabs(std::hypot(collision.posX(), collision.posY(), collision.posZ()) - std::hypot(dmeson.posSV[0], dmeson.posSV[1], dmeson.posSV[2]))) / std::hypot(dmeson.P[0], dmeson.P[1], dmeson.P[2])) / dmesonCtau;
404+
405+
histos.fill(HIST("hDCosPA"), dmeson.cosPA);
406+
histos.fill(HIST("hDCosPAxy"), dmeson.cosPAxy);
407+
histos.fill(HIST("hDCosThetaStar"), dmeson.cosThetaStar);
408+
histos.fill(HIST("hDDauDecayLength"), dmeson.normalizedDecayLength);
409+
410+
if (dmeson.dcaDau > dcaDaughtersSelection)
411+
continue;
412+
413+
if (dmeson.pt <= 3 && dmeson.cosPA < DCosPA)
414+
continue;
415+
else if (dmeson.pt > 3 && dmeson.cosPA < DCosPAHighPt)
416+
continue;
417+
418+
if (dmeson.pt <= 3 && dmeson.cosPAxy < DCosPAxy)
419+
continue;
420+
else if (dmeson.pt > 3 && dmeson.cosPAxy < DCosPAxyHighPt)
421+
continue;
422+
423+
if (dmeson.pt <= 9 && std::fabs(dmeson.cosThetaStar) > DCosThetaStarLowPt)
424+
continue;
425+
else if (dmeson.pt <= 16 && std::fabs(dmeson.cosThetaStar) > DCosThetaStarHighPt)
426+
continue;
427+
else if (dmeson.pt > 16 && std::fabs(dmeson.cosThetaStar) > DCosThetaStarVHighPt)
428+
continue;
429+
430+
if (dmeson.normalizedDecayLength < DDauDecayLength)
431+
continue;
432+
372433
histos.fill(HIST("hDCADDaughters"), dmeson.dcaDau * 1e+4);
373434
histos.fill(HIST("hMassD"), dmeson.mass);
374435
histos.fill(HIST("h3dRecD"), dmeson.pt, dmeson.eta, dmeson.mass);
@@ -381,6 +442,41 @@ struct alice3decayFinder {
381442
continue;
382443
if (!buildDecayCandidateTwoBody(posTrackRow, negTrackRow, o2::constants::physics::MassKaonCharged, o2::constants::physics::MassPionCharged))
383444
continue;
445+
446+
dmeson.cosPA = RecoDecay::cpa(std::array{collision.posX(), collision.posY(), collision.posZ()}, std::array{dmeson.posSV[0], dmeson.posSV[1], dmeson.posSV[2]}, std::array{dmeson.P[0], dmeson.P[1], dmeson.P[2]});
447+
dmeson.cosPAxy = RecoDecay::cpaXY(std::array{collision.posX(), collision.posY(), collision.posZ()}, std::array{dmeson.posSV[0], dmeson.posSV[1], dmeson.posSV[2]}, std::array{dmeson.P[0], dmeson.P[1], dmeson.P[2]});
448+
449+
const float dmesonCtau = 0.012301;
450+
dmeson.normalizedDecayLength = ((dmeson.mass * std::fabs(std::hypot(collision.posX(), collision.posY(), collision.posZ()) - std::hypot(dmeson.posSV[0], dmeson.posSV[1], dmeson.posSV[2]))) / std::hypot(dmeson.P[0], dmeson.P[1], dmeson.P[2])) / dmesonCtau;
451+
452+
histos.fill(HIST("hDCosPA"), dmeson.cosPA);
453+
histos.fill(HIST("hDCosPAxy"), dmeson.cosPAxy);
454+
histos.fill(HIST("hDCosThetaStar"), dmeson.cosThetaStar);
455+
histos.fill(HIST("hDDauDecayLength"), dmeson.normalizedDecayLength);
456+
457+
if (dmeson.dcaDau > dcaDaughtersSelection)
458+
continue;
459+
460+
if (dmeson.pt <= 3 && dmeson.cosPA < DCosPA)
461+
continue;
462+
else if (dmeson.pt > 3 && dmeson.cosPA < DCosPAHighPt)
463+
continue;
464+
465+
if (dmeson.pt <= 3 && dmeson.cosPAxy < DCosPAxy)
466+
continue;
467+
else if (dmeson.pt > 3 && dmeson.cosPAxy < DCosPAxyHighPt)
468+
continue;
469+
470+
if (dmeson.pt <= 9 && std::fabs(dmeson.cosThetaStar) > DCosThetaStarLowPt)
471+
continue;
472+
else if (dmeson.pt <= 16 && std::fabs(dmeson.cosThetaStar) > DCosThetaStarHighPt)
473+
continue;
474+
else if (dmeson.pt > 16 && std::fabs(dmeson.cosThetaStar) > DCosThetaStarVHighPt)
475+
continue;
476+
477+
if (dmeson.normalizedDecayLength < DDauDecayLength)
478+
continue;
479+
384480
histos.fill(HIST("hDCADbarDaughters"), dmeson.dcaDau * 1e+4);
385481
histos.fill(HIST("hMassDbar"), dmeson.mass);
386482
histos.fill(HIST("h3dRecDbar"), dmeson.pt, dmeson.eta, dmeson.mass);
@@ -426,7 +522,7 @@ struct alice3decayFinder {
426522
continue;
427523
if (!buildDecayCandidateThreeBody(proton, kaon, pion, o2::constants::physics::MassProton, o2::constants::physics::MassKaonCharged, o2::constants::physics::MassPionCharged))
428524
continue;
429-
histos.fill(HIST("hDCALcDaughters"), lcbaryon.dcaDau);
525+
histos.fill(HIST("hDCALcDaughters"), lcbaryon.dcaDau * 1e+4);
430526
histos.fill(HIST("hMassLc"), lcbaryon.mass);
431527
histos.fill(HIST("h3dRecLc"), lcbaryon.pt, lcbaryon.eta, lcbaryon.mass);
432528
}
@@ -442,7 +538,7 @@ struct alice3decayFinder {
442538
continue;
443539
if (!buildDecayCandidateThreeBody(proton, kaon, pion, o2::constants::physics::MassProton, o2::constants::physics::MassKaonCharged, o2::constants::physics::MassPionCharged))
444540
continue;
445-
histos.fill(HIST("hDCALcbarDaughters"), lcbaryon.dcaDau);
541+
histos.fill(HIST("hDCALcbarDaughters"), lcbaryon.dcaDau * 1e+4);
446542
histos.fill(HIST("hMassLcbar"), lcbaryon.mass);
447543
histos.fill(HIST("h3dRecLcbar"), lcbaryon.pt, lcbaryon.eta, lcbaryon.mass);
448544
}

0 commit comments

Comments
 (0)