Skip to content

Commit 1daec49

Browse files
authored
[ALICE3] Add further selections to alice3 multicharm task (#10883)
1 parent 31e5fe0 commit 1daec49

File tree

1 file changed

+92
-37
lines changed

1 file changed

+92
-37
lines changed

ALICE3/TableProducer/alice3-multicharm.cxx

Lines changed: 92 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -86,29 +86,47 @@ struct alice3multicharm {
8686
Configurable<float> dcaXiCCDaughtersSelection{"dcaXiCCDaughtersSelection", 0.002f, "DCA between XiCC daughters (cm)"};
8787

8888
Configurable<float> piFromXiC_dcaXYconstant{"piFromXiC_dcaXYconstant", 0.001f, "[0] in |DCAxy| > [0]+[1]/pT"};
89+
Configurable<float> piFromXiC_dcaZconstant{"piFromXiC_dcaZconstant", 0.001f, "[0] in |DCAxy| > [0]+[1]/pT"};
8990
Configurable<float> piFromXiC_dcaXYpTdep{"piFromXiC_dcaXYpTdep", 0.0, "[1] in |DCAxy| > [0]+[1]/pT"};
91+
Configurable<float> piFromXiC_dcaZpTdep{"piFromXiC_dcaZpTdep", 0.0, "[1] in |DCAxy| > [0]+[1]/pT"};
9092
Configurable<float> piFromXiCC_dcaXYconstant{"piFromXiCC_dcaXYconstant", 0.001f, "[0] in |DCAxy| > [0]+[1]/pT"};
93+
Configurable<float> piFromXiCC_dcaZconstant{"piFromXiCC_dcaZconstant", 0.001f, "[0] in |DCAxy| > [0]+[1]/pT"};
9194
Configurable<float> piFromXiCC_dcaXYpTdep{"piFromXiCC_dcaXYpTdep", 0.0, "[1] in |DCAxy| > [0]+[1]/pT"};
95+
Configurable<float> piFromXiCC_dcaZpTdep{"piFromXiCC_dcaZpTdep", 0.0, "[1] in |DCAxy| > [0]+[1]/pT"};
9296
Configurable<float> xiFromXiC_dcaXYconstant{"xiFromXiC_dcaXYconstant", 0.001f, "[0] in |DCAxy| > [0]+[1]/pT"};
97+
Configurable<float> xiFromXiC_dcaZconstant{"xiFromXiC_dcaZconstant", 0.001f, "[0] in |DCAxy| > [0]+[1]/pT"};
9398
Configurable<float> xiFromXiC_dcaXYpTdep{"xiFromXiC_dcaXYpTdep", 0.0, "[1] in |DCAxy| > [0]+[1]/pT"};
99+
Configurable<float> xiFromXiC_dcaZpTdep{"xiFromXiC_dcaZpTdep", 0.0, "[1] in |DCAxy| > [0]+[1]/pT"};
100+
101+
Configurable<float> xiCFromXiCC_dcaXY{"xiCFromXiCC_dcaXY", 0.0015f, "maxDCA"};
102+
Configurable<float> xiCFromXiCC_dcaZ{"xiCFromXiCC_dcaZ", 0.0015f, "maxDCA"};
103+
Configurable<float> xiCC_dcaXY{"xiCC_dcaXY", 0.002f, "maxDCA"};
104+
Configurable<float> xiCC_dcaZ{"xiCC_dcaZ", 0.002f, "maxDCA"};
94105

95106
Configurable<float> minPiCPt{"minPiCPt", 0.15, "Minimum pT for XiC pions"};
96107
Configurable<float> minPiCCPt{"minPiCCPt", 0.3, "Minimum pT for XiCC pions"};
97108
Configurable<float> minNTracks{"minNTracks", -1, "Minimum number of tracks"};
98109

99110
Configurable<float> minXiCRadius{"minXiCRadius", 0.001, "Minimum R2D for XiC decay (cm)"};
111+
Configurable<float> minXiCCRadius{"minXiCCRadius", 0.005, "Minimum R2D for XiCC decay (cm)"};
112+
Configurable<float> xicMinProperLength{"xicMinProperLength", 0.002, "Minimum proper length for XiC decay (cm)"};
113+
Configurable<float> xicMaxProperLength{"xicMaxProperLength", 0.06, "Minimum proper length for XiC decay (cm)"};
114+
Configurable<float> xiccMinProperLength{"xiccMinProperLength", 0.004, "Minimum proper length for XiCC decay (cm)"};
115+
Configurable<float> xiccMaxProperLength{"xiccMaxProperLength", 999, "Minimum proper length for XiCC decay (cm)"};
100116
Configurable<float> massWindowXi{"massWindowXi", 0.015, "Mass window around Xi peak"};
101117
Configurable<float> massWindowXiC{"massWindowXiC", 0.015, "Mass window around XiC peak"};
102118

103119
ConfigurableAxis axisEta{"axisEta", {80, -4.0f, +4.0f}, "#eta"};
104120
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"};
105-
ConfigurableAxis axisDCA{"axisDCA", {200, -100, 100}, "DCA (#mum)"};
121+
ConfigurableAxis axisDCA2d{"axisDCA2d", {400, -200, 200}, "DCA2d (#mum)"};
122+
ConfigurableAxis axisDCA{"axisDCA", {200, 0, 200}, "DCA (#mum)"};
123+
ConfigurableAxis axisRadius{"axisRadius", {1000, 0, 1000}, "Decay radius (#mum)"};
124+
ConfigurableAxis axisDecayLength{"axisDecayLength", {2000, 0, 2000}, "Decay lenght (#mum)"};
106125

107126
ConfigurableAxis axisXiMass{"axisXiMass", {200, 1.221f, 1.421f}, "Xi Inv Mass (GeV/c^{2})"};
108127
ConfigurableAxis axisXiCMass{"axisXiCMass", {200, 2.368f, 2.568f}, "XiC Inv Mass (GeV/c^{2})"};
109128
ConfigurableAxis axisXiCCMass{"axisXiCCMass", {200, 3.521f, 3.721f}, "XiCC Inv Mass (GeV/c^{2})"};
110129

111-
ConfigurableAxis axisDCAXi{"axisDCAXi", {200, 0, 200}, "DCA (mum)"};
112130
ConfigurableAxis axisDCAXiCDaughters{"axisDCAXiCDaughters", {200, 0, 100}, "DCA (mum)"};
113131
ConfigurableAxis axisDCAXiCCDaughters{"axisDCAXiCCDaughters", {200, 0, 100}, "DCA (mum)"};
114132

@@ -129,9 +147,9 @@ struct alice3multicharm {
129147

130148
// partitions for Xi daughters
131149
Partition<alice3tracks> tracksPiFromXiC =
132-
((aod::a3DecayMap::decayMap & trackSelectionPiFromXiC) == trackSelectionPiFromXiC) && aod::track::signed1Pt > 0.0f && 1.0f / nabs(aod::track::signed1Pt) > minPiCPt&& nabs(aod::track::dcaXY) > piFromXiC_dcaXYconstant + piFromXiC_dcaXYpTdep* nabs(aod::track::signed1Pt);
133-
Partition<alice3tracks> tracksPiFromXiCC =
134-
((aod::a3DecayMap::decayMap & trackSelectionPiFromXiCC) == trackSelectionPiFromXiCC) && aod::track::signed1Pt > 0.0f && 1.0f / nabs(aod::track::signed1Pt) > minPiCCPt&& nabs(aod::track::dcaXY) > piFromXiCC_dcaXYconstant + piFromXiCC_dcaXYpTdep* nabs(aod::track::signed1Pt);
150+
((aod::a3DecayMap::decayMap & trackSelectionPiFromXiC) == trackSelectionPiFromXiC) && aod::track::signed1Pt > 0.0f && 1.0f / nabs(aod::track::signed1Pt) > minPiCPt&& nabs(aod::track::dcaXY) > piFromXiC_dcaXYconstant + piFromXiC_dcaXYpTdep* nabs(aod::track::signed1Pt) && nabs(aod::track::dcaZ) > piFromXiC_dcaZconstant + piFromXiC_dcaZpTdep* nabs(aod::track::signed1Pt);
151+
152+
Partition<alice3tracks> tracksPiFromXiCC = ((aod::a3DecayMap::decayMap & trackSelectionPiFromXiCC) == trackSelectionPiFromXiCC) && aod::track::signed1Pt > 0.0f && 1.0f / nabs(aod::track::signed1Pt) > minPiCCPt&& nabs(aod::track::dcaXY) > piFromXiCC_dcaXYconstant + piFromXiCC_dcaXYpTdep* nabs(aod::track::signed1Pt);
135153

136154
// Helper struct to pass candidate information
137155
struct {
@@ -386,28 +404,41 @@ struct alice3multicharm {
386404

387405
histos.add("hEtaXiCC", "hEtaXiCC", kTH1D, {axisEta});
388406
histos.add("hPtXiCC", "hPtXiCC", kTH1D, {axisPt});
389-
histos.add("hMcPtXiCC", "hMcPtXiCC", kTH1D, {axisPt});
390407
histos.add("h3dMassXiCC", "h3dMassXiCC", kTH3D, {axisPt, axisEta, axisXiCCMass});
391408

392409
histos.add("hDCAXiCDaughters", "hDCAXiCDaughters", kTH1D, {axisDCAXiCDaughters});
393410
histos.add("hDCAXiCCDaughters", "hDCAXiCCDaughters", kTH1D, {axisDCAXiCCDaughters});
394-
histos.add("hDCAXi", "hDCAXi", kTH1D, {axisDCAXi});
411+
histos.add("hDCAxyXi", "hDCAxyXi", kTH1D, {axisDCA});
412+
histos.add("hDCAzXi", "hDCAzXi", kTH1D, {axisDCA});
413+
414+
histos.add("hDCAxyXiC", "hDCAxyXiC", kTH1D, {axisDCA});
415+
histos.add("hDCAzXiC", "hDCAzXiC", kTH1D, {axisDCA});
416+
417+
histos.add("hDCAxyXiCC", "hDCAxyXiCC", kTH1D, {axisDCA});
418+
histos.add("hDCAzXiCC", "hDCAzXiCC", kTH1D, {axisDCA});
419+
395420
histos.add("hPi1cPt", "hPi1cPt", kTH1D, {axisPt});
396421
histos.add("hPi2cPt", "hPi2cPt", kTH1D, {axisPt});
397422
histos.add("hPiccPt", "hPiccPt", kTH1D, {axisPt});
398423

424+
histos.add("hMinXiCDecayRadius", "hMinXiCDecayRadius", kTH1D, {axisRadius});
425+
histos.add("hMinXiCCDecayRadius", "hMinXiCCDecayRadius", kTH1D, {axisRadius});
426+
427+
histos.add("hProperLengthXiC", "hProperLengthXiC", kTH1D, {axisDecayLength});
428+
histos.add("hProperLengthXiCC", "hProperLengthXiCC", kTH1D, {axisDecayLength});
429+
399430
// These histograms bookkeep the exact number of combinations attempted
400431
// CombinationsXiC: triplets Xi-pi-pi considered per Xi
401432
// CombinationsXiCC: doublets XiC-pi considered per XiC
402433
histos.add("hCombinationsXiC", "hCombinationsXiC", kTH1D, {axisNConsidered});
403434
histos.add("hCombinationsXiCC", "hCombinationsXiCC", kTH1D, {axisNConsidered});
404435
histos.add("hNCollisions", "hNCollisions", kTH1D, {{2, 0.5, 2.5}});
405-
histos.add("hNTracks", "hNTracks", kTH1D, {{500, 0, 5000}});
436+
histos.add("hNTracks", "hNTracks", kTH1D, {{20000, 0, 20000}});
406437

407438
if (doDCAplots) {
408-
histos.add("h2dDCAxyVsPtXiFromXiC", "h2dDCAxyVsPtXiFromXiC", kTH2D, {axisPt, axisDCA});
409-
histos.add("h2dDCAxyVsPtPiFromXiC", "h2dDCAxyVsPtPiFromXiC", kTH2D, {axisPt, axisDCA});
410-
histos.add("h2dDCAxyVsPtPiFromXiCC", "h2dDCAxyVsPtPiFromXiCC", kTH2D, {axisPt, axisDCA});
439+
histos.add("h2dDCAxyVsPtXiFromXiC", "h2dDCAxyVsPtXiFromXiC", kTH2D, {axisPt, axisDCA2d});
440+
histos.add("h2dDCAxyVsPtPiFromXiC", "h2dDCAxyVsPtPiFromXiC", kTH2D, {axisPt, axisDCA2d});
441+
histos.add("h2dDCAxyVsPtPiFromXiCC", "h2dDCAxyVsPtPiFromXiCC", kTH2D, {axisPt, axisDCA2d});
411442
}
412443
}
413444

@@ -420,7 +451,6 @@ struct alice3multicharm {
420451
histos.fill(HIST("h2dGenXiC"), mcParticle.pt(), mcParticle.eta());
421452
for (auto const& mcParticle : trueXiCC) {
422453
histos.fill(HIST("h2dGenXiCC"), mcParticle.pt(), mcParticle.eta());
423-
histos.fill(HIST("hMcPtXiCC"), mcParticle.pt());
424454
}
425455
}
426456

@@ -460,7 +490,7 @@ struct alice3multicharm {
460490
for (auto const& xiCand : cascades) {
461491
histos.fill(HIST("hMassXi"), xiCand.mXi());
462492

463-
if (std::abs(xiCand.mXi() - o2::constants::physics::MassXiMinus) > massWindowXi)
493+
if (std::fabs(xiCand.mXi() - o2::constants::physics::MassXiMinus) > massWindowXi)
464494
continue; // out of mass region
465495

466496
uint32_t nCombinationsC = 0;
@@ -472,11 +502,9 @@ struct alice3multicharm {
472502
if (!bitcheck(xi.decayMap(), kTrueXiFromXiC))
473503
continue;
474504

475-
if (xi.dcaXY() < xiFromXiC_dcaXYconstant)
505+
if (std::fabs(xi.dcaXY()) < xiFromXiC_dcaXYconstant || std::fabs(xi.dcaZ()) < xiFromXiC_dcaZconstant)
476506
continue;
477507

478-
histos.fill(HIST("hDCAXi"), xi.dcaXY() * 1e+4);
479-
480508
for (auto const& pi1c : tracksPiFromXiCgrouped) {
481509
if (mcSameMotherCheck && !checkSameMother(xi, pi1c))
482510
continue;
@@ -485,8 +513,6 @@ struct alice3multicharm {
485513
if (pi1c.pt() < minPiCPt)
486514
continue;
487515

488-
histos.fill(HIST("hPi1cPt"), pi1c.pt());
489-
490516
// second pion from XiC decay for starts here
491517
for (auto const& pi2c : tracksPiFromXiCgrouped) {
492518

@@ -499,8 +525,6 @@ struct alice3multicharm {
499525
if (pi2c.pt() < minPiCPt)
500526
continue;
501527

502-
histos.fill(HIST("hPi2cPt"), pi2c.pt());
503-
504528
// if I am here, it means this is a triplet to be considered for XiC vertexing.
505529
// will now attempt to build a three-body decay candidate with these three track rows.
506530

@@ -509,7 +533,7 @@ struct alice3multicharm {
509533
if (!buildDecayCandidateThreeBody(xi, pi1c, pi2c, o2::constants::physics::MassXiMinus, o2::constants::physics::MassPionCharged, o2::constants::physics::MassPionCharged))
510534
continue; // failed at building candidate
511535

512-
if (std::abs(thisXiCcandidate.mass - o2::constants::physics::MassXiCPlus) > massWindowXiC)
536+
if (std::fabs(thisXiCcandidate.mass - o2::constants::physics::MassXiCPlus) > massWindowXiC)
513537
continue; // out of mass region
514538
histos.fill(HIST("hCharmBuilding"), 1.0f);
515539

@@ -519,62 +543,93 @@ struct alice3multicharm {
519543
thisXiCcandidate.prong0mom[2] + thisXiCcandidate.prong1mom[2] + thisXiCcandidate.prong2mom[2]};
520544

521545
o2::track::TrackParCov xicTrack(thisXiCcandidate.xyz, momentumC, thisXiCcandidate.parentTrackCovMatrix, +1);
522-
523-
if (std::hypot(thisXiCcandidate.xyz[0], thisXiCcandidate.xyz[1]) < minXiCRadius)
546+
double xicDecayRadius2D = std::hypot(thisXiCcandidate.xyz[0], thisXiCcandidate.xyz[1]);
547+
if (xicDecayRadius2D < minXiCRadius)
524548
continue; // do not take if radius too small, likely a primary combination
525549

526550
o2::dataformats::DCA dcaInfo;
527-
float xicdcaXY = 1e+10;
551+
float xicdcaXY = 1e+10, xicdcaZ = 1e+10;
552+
;
528553
o2::track::TrackParCov xicTrackCopy(xicTrack); // paranoia
529-
530554
o2::vertexing::PVertex primaryVertex;
531555
primaryVertex.setXYZ(collision.posX(), collision.posY(), collision.posZ());
532556

533557
if (xicTrackCopy.propagateToDCA(primaryVertex, magneticField, &dcaInfo)) {
534558
xicdcaXY = dcaInfo.getY();
559+
xicdcaZ = dcaInfo.getZ();
535560
}
536561

562+
if (std::fabs(xicdcaXY) < xiCFromXiCC_dcaXY || std::fabs(xicdcaZ) < xiCFromXiCC_dcaZ)
563+
continue;
564+
537565
histos.fill(HIST("hMassXiC"), thisXiCcandidate.mass);
538-
histos.fill(HIST("hDCAXiCDaughters"), thisXiCcandidate.dca * 1e+4);
539566

540567
// attempt XiCC finding
541568
uint32_t nCombinationsCC = 0;
542569
for (auto const& picc : tracksPiFromXiCCgrouped) {
543-
544570
if (mcSameMotherCheck && !checkSameMotherExtra(xi, picc))
545571
continue;
546572
if (xiCand.posTrackId() == picc.globalIndex() || xiCand.negTrackId() == picc.globalIndex() || xiCand.bachTrackId() == picc.globalIndex())
547573
continue; // avoid using any track that was already used
548574
if (picc.pt() < minPiCCPt)
549575
continue;
550576

551-
histos.fill(HIST("hPiccPt"), picc.pt());
552-
553577
o2::track::TrackParCov piccTrack = getTrackParCov(picc);
554578
nCombinationsCC++;
555579
histos.fill(HIST("hCharmBuilding"), 2.0f);
556580
if (!buildDecayCandidateTwoBody(xicTrack, piccTrack, o2::constants::physics::MassXiCPlus, o2::constants::physics::MassPionCharged))
557581
continue; // failed at building candidate
558582

559-
histos.fill(HIST("hCharmBuilding"), 3.0f);
560-
histos.fill(HIST("hMassXiCC"), thisXiCCcandidate.mass);
561-
histos.fill(HIST("hPtXiCC"), thisXiCCcandidate.pt);
562-
histos.fill(HIST("hEtaXiCC"), thisXiCCcandidate.eta);
563-
histos.fill(HIST("h3dMassXiCC"), thisXiCCcandidate.pt, thisXiCCcandidate.eta, thisXiCCcandidate.mass);
564-
histos.fill(HIST("hDCAXiCCDaughters"), thisXiCCcandidate.dca * 1e+4);
565-
566583
const std::array<float, 3> momentumCC = {
567584
thisXiCCcandidate.prong0mom[0] + thisXiCCcandidate.prong1mom[0],
568585
thisXiCCcandidate.prong0mom[1] + thisXiCCcandidate.prong1mom[1],
569586
thisXiCCcandidate.prong0mom[2] + thisXiCCcandidate.prong1mom[2]};
570587

571588
o2::track::TrackParCov xiccTrack(thisXiCCcandidate.xyz, momentumCC, thisXiCCcandidate.parentTrackCovMatrix, +2);
589+
double xiccDecayRadius2D = std::hypot(thisXiCCcandidate.xyz[0], thisXiCCcandidate.xyz[1]);
590+
if (xiccDecayRadius2D < minXiCCRadius)
591+
continue; // do not take if radius too small, likely a primary combination
572592

573-
float xiccdcaXY = 1e+10;
593+
double totalMomentumC = std::hypot(momentumC[0], momentumC[1], momentumC[2]);
594+
double xicProperLength = std::fabs(std::hypot(thisXiCcandidate.xyz[0], thisXiCcandidate.xyz[1], thisXiCcandidate.xyz[2]) - std::hypot(thisXiCCcandidate.xyz[0], thisXiCCcandidate.xyz[1], thisXiCCcandidate.xyz[2]) * totalMomentumC) / (std::fabs(totalMomentumC) * thisXiCcandidate.mass);
595+
if (xicProperLength < xicMinProperLength || xicProperLength > xicMaxProperLength)
596+
continue;
597+
598+
double totalMomentumCC = std::hypot(momentumCC[0], momentumCC[1], momentumCC[2]);
599+
double xiccProperLength = std::fabs(std::hypot(collision.posX(), collision.posY(), collision.posZ()) - std::hypot(thisXiCCcandidate.xyz[0], thisXiCCcandidate.xyz[1], thisXiCCcandidate.xyz[2]) * totalMomentumCC) / (std::fabs(totalMomentumCC) * thisXiCCcandidate.mass);
600+
if (xiccProperLength < xiccMinProperLength || xiccProperLength > xicMaxProperLength)
601+
continue;
602+
603+
float xiccdcaXY = 1e+10, xiccdcaZ = 1e+10;
574604
if (xiccTrack.propagateToDCA(primaryVertex, magneticField, &dcaInfo)) {
575605
xiccdcaXY = dcaInfo.getY();
606+
xiccdcaZ = dcaInfo.getZ();
576607
}
577608

609+
if (std::fabs(xiccdcaXY) > xiCC_dcaXY || std::fabs(xiccdcaZ) > xiCC_dcaZ)
610+
continue;
611+
612+
histos.fill(HIST("hDCAXiCDaughters"), thisXiCcandidate.dca * 1e+4);
613+
histos.fill(HIST("hDCAXiCCDaughters"), thisXiCCcandidate.dca * 1e+4);
614+
histos.fill(HIST("hProperLengthXiCC"), xiccProperLength * 1e+4);
615+
histos.fill(HIST("hProperLengthXiC"), xicProperLength * 1e+4);
616+
histos.fill(HIST("hMinXiCCDecayRadius"), xiccDecayRadius2D * 1e+4);
617+
histos.fill(HIST("hMinXiCDecayRadius"), xicDecayRadius2D * 1e+4);
618+
histos.fill(HIST("hPi2cPt"), pi2c.pt());
619+
histos.fill(HIST("hPi1cPt"), pi1c.pt());
620+
histos.fill(HIST("hPiccPt"), picc.pt());
621+
histos.fill(HIST("hDCAxyXi"), std::fabs(xi.dcaXY() * 1e+4));
622+
histos.fill(HIST("hDCAzXi"), std::fabs(xi.dcaZ() * 1e+4));
623+
histos.fill(HIST("hDCAxyXiC"), std::fabs(xicdcaXY * 1e+4));
624+
histos.fill(HIST("hDCAzXiC"), std::fabs(xicdcaZ * 1e+4));
625+
histos.fill(HIST("hDCAxyXiCC"), std::fabs(xiccdcaXY * 1e+4));
626+
histos.fill(HIST("hDCAzXiCC"), std::fabs(xiccdcaZ * 1e+4));
627+
histos.fill(HIST("hCharmBuilding"), 3.0f);
628+
histos.fill(HIST("hMassXiCC"), thisXiCCcandidate.mass);
629+
histos.fill(HIST("hPtXiCC"), thisXiCCcandidate.pt);
630+
histos.fill(HIST("hEtaXiCC"), thisXiCCcandidate.eta);
631+
histos.fill(HIST("h3dMassXiCC"), thisXiCCcandidate.pt, thisXiCCcandidate.eta, thisXiCCcandidate.mass);
632+
578633
// produce multi-charm table for posterior analysis
579634
if (fillDerivedTable) {
580635
multiCharmCore(

0 commit comments

Comments
 (0)