Skip to content

Commit 71e8cff

Browse files
authored
Add first mother ancestor option
Add first mother ancestor option
1 parent 8b37798 commit 71e8cff

1 file changed

Lines changed: 67 additions & 91 deletions

File tree

PWGCF/Femto/Core/pairHistManager.h

Lines changed: 67 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,6 @@ enum PairHist {
6969
kKstarVsMt,
7070
kKstarVsMult,
7171
kKstarVsCent,
72-
// 3D: k* vs kT vs centrality
73-
kKstarVsKtVsCent,
7472
// 2D with mass
7573
kKstarVsMass1,
7674
kKstarVsMass2,
@@ -186,7 +184,6 @@ struct ConfPairBinning : o2::framework::ConfigurableGroup {
186184
o2::framework::Configurable<bool> usePdgMass{"usePdgMass", true, "(Reco) Use PDF masses for 4-vectors. If false, use reconstructed mass (if available). Not consulted for pure mc-truth pairs, which always use PDG mass"};
187185
o2::framework::Configurable<bool> plot1D{"plot1D", true, "(Reco/Mc) Enable 1D histograms"};
188186
o2::framework::Configurable<bool> plot2D{"plot2D", true, "(Reco/Mc) Enable 2D histograms"};
189-
o2::framework::Configurable<bool> plotKstarVsKtVsCent{"plotKstarVsKtVsCent", false, "(Reco/Mc) Enable 3D histogram (Kstar Vs Kt Vs Cent)"};
190187
o2::framework::Configurable<bool> plotKstarVsMtVsMult{"plotKstarVsMtVsMult", false, "(Reco/Mc) Enable 3D histogram (Kstar Vs Mt Vs Mult)"};
191188
o2::framework::Configurable<bool> plotKstarVsMtVsMultVsCent{"plotKstarVsMtVsMultVsCent", false, "(Reco/Mc) Enable 4D histogram (Kstar Vs Mt Vs Mult Vs Cent)"};
192189
o2::framework::Configurable<bool> plotKstarVsMtVsPt1VsPt2{"plotKstarVsMtVsPt1VsPt2", false, "(Reco/Mc) Enable 4D histogram (Kstar Vs Mt Vs Pt1 Vs Pt2)"};
@@ -216,7 +213,7 @@ struct ConfPairBinning : o2::framework::ConfigurableGroup {
216213
o2::framework::ConfigurableAxis pt2{"pt2", {{100, 0, 6}}, "Pt binning for particle 2"};
217214
o2::framework::ConfigurableAxis mass1{"mass1", {{100, 0, 2}}, "Mass binning for particle 1 (if particle has mass getter, otherwise PDG mass)"};
218215
o2::framework::ConfigurableAxis mass2{"mass2", {{100, 0, 2}}, "Mass binning for particle 2 (if particle has mass getter, otherwise PDG mass)"};
219-
o2::framework::ConfigurableAxis massInv{"massInv", {{100, 0, 5}}, "Invariant Mass binning"};
216+
o2::framework::ConfigurableAxis massInv{"massInv", {{100, 0, 2}}, "Invariant Mass binning"};
220217
o2::framework::ConfigurableAxis dalitzMtot{"dalitzMtot", {{100, 0, 10}}, "Total invariant mass squared binning in darlitz plot"};
221218
o2::framework::ConfigurableAxis dalitzM12{"dalitzM12", {{100, 0, 10}}, "Mass12 binning of darlitz plot"};
222219
o2::framework::ConfigurableAxis dalitzM13{"dalitzM13", {{100, 0, 10}}, "Mass13 binning of darlitz plot"};
@@ -234,7 +231,7 @@ struct ConfPairBinning : o2::framework::ConfigurableGroup {
234231
o2::framework::Configurable<bool> shUseCent{"shUseCent", false, "SH: bin by centrality instead of multiplicity"};
235232
o2::framework::ConfigurableAxis shCentBins{"shCentBins", {o2::framework::VARIABLE_WIDTH, 0.0f, 200.0f}, "SH: multiplicity/centrality bin edges (like FemtoUniverse confMultKstarBins)"};
236233
o2::framework::ConfigurableAxis shKtBins{"shKtBins", {o2::framework::VARIABLE_WIDTH, 0.1f, 0.2f, 0.3f, 0.4f}, "SH: kT bin edges (like FemtoUniverse confKtKstarBins)"};
237-
o2::framework::Configurable<bool> shPlot1D{"shPlot1D", false, "(SH) Also fill the 1D qinv/k* distribution (h1D) and the bin occupancy (BinCount) per (mult,kT) bin"};
234+
o2::framework::Configurable<bool> shPlot1D{"shPlot1D", false, "(SH) Also fill 1D qinv/k* numerator/denominator (h1D) per (mult,kT) bin"};
238235
};
239236

240237
struct ConfPairCuts : o2::framework::ConfigurableGroup {
@@ -249,6 +246,7 @@ struct ConfPairCuts : o2::framework::ConfigurableGroup {
249246
o2::framework::Configurable<float> massInvMax{"massInvMax", -1, "Maximal invariant mass (set to -1 to deactivate)"};
250247
o2::framework::Configurable<bool> mixOnlyCommonAncestor{"mixOnlyCommonAncestor", false, "Require pair to have common anchestor (in the same event)"};
251248
o2::framework::Configurable<bool> mixOnlyNonCommonAncestor{"mixOnlyNonCommonAncestor", false, "Require pair to have non-common anchestor (in the same event)"};
249+
o2::framework::Configurable<bool> useMotherAsAncestor{"useMotherAsAncestor", false, "Use the first ancestor (i.e. the direct mother) instead of the partonic mother when requiring (non-)common ancestry"};
252250
};
253251

254252
// the enum gives the correct index in the array
@@ -280,7 +278,6 @@ constexpr std::array<histmanager::HistInfo<PairHist>, kPairHistogramLast>
280278
{kPt1VsMinv, o2::framework::HistType::kTH2F, "hPt1VsMinv", "p_{T,1} vs m_{Inv}; p_{T,1} (GeV/#it{c}); m_{Inv} (GeV/#it{c}^{2})"},
281279
{kPt2VsMinv, o2::framework::HistType::kTH2F, "hPt2VsMinv", "p_{T,2} vs m_{Inv}; p_{T,2} (GeV/#it{c}); m_{Inv} (GeV/#it{c}^{2})"},
282280
// n-D
283-
{kKstarVsKtVsCent, o2::framework::HistType::kTHnSparseF, "hKstarVsKtVsCent", "k* vs k_{T} vs centrality; k* (GeV/#it{c}); k_{T} (GeV/#it{c}); Centrality (%);"},
284281
{kKstarVsMtVsMult, o2::framework::HistType::kTHnSparseF, "hKstarVsMtVsMult", "k* vs m_{T} vs multiplicity; k* (GeV/#it{c}); m_{T} (GeV/#it{c}^{2}); Multiplicity;"},
285282
{kKstarVsMtVsMultVsCent, o2::framework::HistType::kTHnSparseF, "hKstarVsMtVsMultVsCent", "k* vs m_{T} vs multiplicity vs centrality; k* (GeV/#it{c}); m_{T} (GeV/#it{c}^{2}); Multiplicity; Centrality (%);"},
286283
// n-D with pt
@@ -371,7 +368,6 @@ constexpr std::array<histmanager::HistInfo<PairHist>, kPairHistogramLast>
371368
{kKstarVsMt, {(confAnalysis).kstar, (confAnalysis).mt}}, \
372369
{kKstarVsMult, {(confAnalysis).kstar, (confAnalysis).multiplicity}}, \
373370
{kKstarVsCent, {(confAnalysis).kstar, (confAnalysis).centrality}}, \
374-
{kKstarVsKtVsCent, {(confAnalysis).kstar, (confAnalysis).kt, (confAnalysis).centrality}}, \
375371
{kKstarVsMass1, {(confAnalysis).kstar, (confAnalysis).mass1}}, \
376372
{kKstarVsMass2, {(confAnalysis).kstar, (confAnalysis).mass2}}, \
377373
{kMass1VsMass2, {(confAnalysis).mass1, (confAnalysis).mass2}}, \
@@ -496,11 +492,6 @@ constexpr char PrefixTrackTrackMe[] = "TrackTrack/ME/";
496492
constexpr char PrefixTrackV0Se[] = "TrackV0/SE/";
497493
constexpr char PrefixTrackV0Me[] = "TrackV0/ME/";
498494

499-
constexpr char PrefixTrackD0Se[] = "TrackD0/SE/";
500-
constexpr char PrefixTrackD0Me[] = "TrackD0/ME/";
501-
constexpr char PrefixD0D0Se[] = "D0D0/SE/";
502-
constexpr char PrefixD0D0Me[] = "D0D0/ME/";
503-
504495
constexpr char PrefixV0V0Se[] = "V0V0/SE/";
505496
constexpr char PrefixV0V0Me[] = "V0V0/ME/";
506497

@@ -546,7 +537,6 @@ class PairHistManager
546537
// flags for histograms
547538
mPlot1d = ConfPairBinning.plot1D.value;
548539
mPlot2d = ConfPairBinning.plot2D.value;
549-
mPlotKstarVsKtVsCent = ConfPairBinning.plotKstarVsKtVsCent.value;
550540
mPlotKstarVsMtVsMult = ConfPairBinning.plotKstarVsMtVsMult.value;
551541
mPlotKstarVsMtVsMultVsCent = ConfPairBinning.plotKstarVsMtVsMultVsCent.value;
552542

@@ -586,8 +576,6 @@ class PairHistManager
586576
// copy bin edges, stripping the leading VARIABLE_WIDTH (0) marker
587577
mShCentEdges.assign(ConfPairBinning.shCentBins.value.begin() + 1, ConfPairBinning.shCentBins.value.end());
588578
mShKtEdges.assign(ConfPairBinning.shKtBins.value.begin() + 1, ConfPairBinning.shKtBins.value.end());
589-
mShCentSpec = {ConfPairBinning.shCentBins, mShUseCent ? "centrality (%)" : "multiplicity"};
590-
mShKtSpec = {ConfPairBinning.shKtBins, "k_{T} (GeV/#it{c})"};
591579
}
592580

593581
// transverse mass type
@@ -709,9 +697,7 @@ class PairHistManager
709697
}
710698

711699
if (mPlotDalitz) {
712-
if constexpr (modes::isEqual(particleType1, modes::Particle::kTrack) && (modes::isEqual(particleType2, modes::Particle::kV0) ||
713-
modes::isEqual(particleType2, modes::Particle::kTwoTrackResonance) ||
714-
modes::isEqual(particleType2, modes::Particle::kCharmHadron))) {
700+
if constexpr (modes::isEqual(particleType1, modes::Particle::kTrack) && modes::isEqual(particleType2, modes::Particle::kV0)) {
715701
auto posDaughter = trackTable.rawIteratorAt(particle2.posDauId() - trackTable.offset());
716702
auto negDaughter = trackTable.rawIteratorAt(particle2.negDauId() - trackTable.offset());
717703
ROOT::Math::PtEtaPhiMVector posDau4v = ROOT::Math::PtEtaPhiMVector(posDaughter.pt(), posDaughter.eta(), posDaughter.phi(), mPdgMassPosDau2);
@@ -951,9 +937,6 @@ class PairHistManager
951937
}
952938

953939
// higher dimensional histograms
954-
if (mPlotKstarVsKtVsCent) {
955-
mHistogramRegistry->add(analysisDir + getHistNameV2(kKstarVsKtVsCent, HistTable), getHistDesc(kKstarVsKtVsCent, HistTable), getHistType(kKstarVsKtVsCent, HistTable), {Specs.at(kKstarVsKtVsCent)});
956-
}
957940
if (mPlotKstarVsMtVsMult) {
958941
mHistogramRegistry->add(analysisDir + getHistNameV2(kKstarVsMtVsMult, HistTable), getHistDesc(kKstarVsMtVsMult, HistTable), getHistType(kKstarVsMtVsMult, HistTable), {Specs.at(kKstarVsMtVsMult)});
959942
}
@@ -1031,80 +1014,80 @@ class PairHistManager
10311014
const int nKt = static_cast<int>(mShKtEdges.size()) - 1;
10321015
mShYlmBuffer.assign(nJM, {});
10331016

1034-
mShReal.resize(nJM);
1035-
mShImag.resize(nJM);
1017+
mShReal.resize(nCent);
1018+
mShImag.resize(nCent);
10361019
mShCov.resize(nCent);
10371020
mSh1D.resize(nCent);
10381021
mShBinCount.resize(nCent);
1039-
1040-
const std::string dir = std::string(prefix) + std::string(AnalysisDir) + "SH/";
1041-
int ihist = 0;
1042-
for (int l = 0; l <= mShLMax; ++l) {
1043-
for (int m = -l; m <= l; ++m) {
1044-
std::string lm = std::to_string(l);
1045-
lm += (m < 0) ? std::to_string(l - m) : std::to_string(m);
1046-
std::string nameRe = dir;
1047-
nameRe += "ReYlm";
1048-
nameRe += lm;
1049-
std::string nameIm = dir;
1050-
nameIm += "ImYlm";
1051-
nameIm += lm;
1052-
// shared "Y_{l}^{m}" suffix for both titles
1053-
std::string ylmLabel = "Y_{";
1054-
ylmLabel += std::to_string(l);
1055-
ylmLabel += "}^{";
1056-
ylmLabel += std::to_string(m);
1057-
ylmLabel += "}";
1058-
std::string titleRe = "Re ";
1059-
titleRe += ylmLabel;
1060-
titleRe += "; k* (GeV/#it{c}); mult/cent; k_{T} (GeV/#it{c})";
1061-
std::string titleIm = "Im ";
1062-
titleIm += ylmLabel;
1063-
titleIm += "; k* (GeV/#it{c}); mult/cent; k_{T} (GeV/#it{c})";
1064-
mShReal[ihist] = mHistogramRegistry->add<TH3>(nameRe.c_str(), titleRe.c_str(), o2::framework::kTH3D, {mShKstarSpec, mShCentSpec, mShKtSpec});
1065-
mShImag[ihist] = mHistogramRegistry->add<TH3>(nameIm.c_str(), titleIm.c_str(), o2::framework::kTH3D, {mShKstarSpec, mShCentSpec, mShKtSpec});
1066-
mShReal[ihist]->Sumw2();
1067-
mShImag[ihist]->Sumw2();
1068-
++ihist;
1069-
}
1070-
}
1071-
1072-
const int nAxisLM = 2 * nJM;
1073-
const o2::framework::AxisSpec covLmAxis{nAxisLM, -0.5, static_cast<double>(nAxisLM) - 0.5, "l,m #times (re,im)"};
1074-
10751022
for (int iCent = 0; iCent < nCent; ++iCent) {
1023+
mShReal[iCent].resize(nKt);
1024+
mShImag[iCent].resize(nKt);
10761025
mShCov[iCent].resize(nKt);
10771026
mSh1D[iCent].resize(nKt);
10781027
mShBinCount[iCent].resize(nKt);
1079-
// name suffix: mult_{low}_{high}
1080-
std::string centSuffix = "_mult_";
1081-
centSuffix += std::to_string(static_cast<int>(mShCentEdges[iCent]));
1082-
centSuffix += "_";
1083-
centSuffix += std::to_string(static_cast<int>(mShCentEdges[iCent + 1]));
1028+
// folder name: mult_{low}_{high}
1029+
const std::string centFolder = "mult_" + std::to_string(static_cast<int>(mShCentEdges[iCent])) +
1030+
"_" + std::to_string(static_cast<int>(mShCentEdges[iCent + 1]));
10841031
for (int iKt = 0; iKt < nKt; ++iKt) {
1085-
// name suffix: _mult_{low}_{high}_kT_{low*100}_{high*100}
1086-
std::string cellSuffix = centSuffix;
1087-
cellSuffix += "_kT_";
1088-
cellSuffix += std::to_string(static_cast<int>(mShKtEdges[iKt] * 100.0));
1089-
cellSuffix += "_";
1090-
cellSuffix += std::to_string(static_cast<int>(mShKtEdges[iKt + 1] * 100.0));
1032+
mShReal[iCent][iKt].resize(nJM);
1033+
mShImag[iCent][iKt].resize(nJM);
1034+
// folder name: kT_{low*100}_{high*100}
1035+
std::string ktFolder = "kT_";
1036+
ktFolder += std::to_string(static_cast<int>(mShKtEdges[iKt] * 100.0));
1037+
ktFolder += "_";
1038+
ktFolder += std::to_string(static_cast<int>(mShKtEdges[iKt + 1] * 100.0));
1039+
std::string dir = std::string(prefix) + std::string(AnalysisDir) + "SH/";
1040+
dir += centFolder;
1041+
dir += "/";
1042+
dir += ktFolder;
1043+
dir += "/";
1044+
1045+
int ihist = 0;
1046+
for (int l = 0; l <= mShLMax; ++l) {
1047+
for (int m = -l; m <= l; ++m) {
1048+
std::string lm = std::to_string(l);
1049+
lm += (m < 0) ? std::to_string(l - m) : std::to_string(m);
1050+
std::string nameRe = dir;
1051+
nameRe += "ReYlm";
1052+
nameRe += lm;
1053+
std::string nameIm = dir;
1054+
nameIm += "ImYlm";
1055+
nameIm += lm;
1056+
// shared "Y_{l}^{m}" suffix for both titles
1057+
std::string ylmLabel = "Y_{";
1058+
ylmLabel += std::to_string(l);
1059+
ylmLabel += "}^{";
1060+
ylmLabel += std::to_string(m);
1061+
ylmLabel += "}";
1062+
std::string titleRe = "Re ";
1063+
titleRe += ylmLabel;
1064+
titleRe += "; k* (GeV/#it{c}); Re[A_{l}^{m}]";
1065+
std::string titleIm = "Im ";
1066+
titleIm += ylmLabel;
1067+
titleIm += "; k* (GeV/#it{c}); Im[A_{l}^{m}]";
1068+
mShReal[iCent][iKt][ihist] = mHistogramRegistry->add<TH1>(nameRe.c_str(), titleRe.c_str(), o2::framework::kTH1D, {mShKstarSpec});
1069+
mShImag[iCent][iKt][ihist] = mHistogramRegistry->add<TH1>(nameIm.c_str(), titleIm.c_str(), o2::framework::kTH1D, {mShKstarSpec});
1070+
mShReal[iCent][iKt][ihist]->Sumw2();
1071+
mShImag[iCent][iKt][ihist]->Sumw2();
1072+
++ihist;
1073+
}
1074+
}
10911075

10921076
// SH covariance TH3D
1077+
const int nAxisLM = 2 * nJM;
1078+
const o2::framework::AxisSpec covLmAxis{nAxisLM, -0.5, static_cast<double>(nAxisLM) - 0.5, "l,m #times (re,im)"};
10931079
std::string nameCov = dir;
10941080
nameCov += "Cov";
1095-
nameCov += cellSuffix;
10961081
mShCov[iCent][iKt] = mHistogramRegistry->add<TH3>(nameCov.c_str(), "SH covariance; k* (GeV/#it{c}); l,m; l,m", o2::framework::kTH3D, {mShKstarSpec, covLmAxis, covLmAxis});
10971082
mShCov[iCent][iKt]->Sumw2();
10981083

1099-
if (mShPlot1D) {
1100-
std::string nameBinCount = dir;
1101-
nameBinCount += "BinCount";
1102-
nameBinCount += cellSuffix;
1103-
mShBinCount[iCent][iKt] = mHistogramRegistry->add<TH1>(nameBinCount.c_str(), "SH bin occupancy; k* (GeV/#it{c}); Entries", o2::framework::kTH1D, {mShKstarSpec});
1084+
std::string nameBinCount = dir;
1085+
nameBinCount += "BinCount";
1086+
mShBinCount[iCent][iKt] = mHistogramRegistry->add<TH1>(nameBinCount.c_str(), "SH bin occupancy; k* (GeV/#it{c}); Entries", o2::framework::kTH1D, {mShKstarSpec});
11041087

1088+
if (mShPlot1D) {
11051089
std::string name1D = dir;
11061090
name1D += "h1D";
1107-
name1D += cellSuffix;
11081091
mSh1D[iCent][iKt] = mHistogramRegistry->add<TH1>(name1D.c_str(), "1D distribution; k* (GeV/#it{c}); Entries", o2::framework::kTH1D, {mShKstarSpec});
11091092
mSh1D[iCent][iKt]->Sumw2();
11101093
}
@@ -1236,9 +1219,6 @@ class PairHistManager
12361219
// n-D histograms are only filled if enabled
12371220
// if "mass" getter does not exist for particle, it will be just set to 0
12381221
// the user has to make sure that in this case the bin number of this dimension is set to 1
1239-
if (mPlotKstarVsKtVsCent) {
1240-
mHistogramRegistry->fill(HIST(prefix) + HIST(AnalysisDir) + HIST(getHistName(kKstarVsKtVsCent, HistTable)), mKstar, mKt, mCent);
1241-
}
12421222
if (mPlotKstarVsMtVsMult) {
12431223
mHistogramRegistry->fill(HIST(prefix) + HIST(AnalysisDir) + HIST(getHistName(kKstarVsMtVsMult, HistTable)), mKstar, mMt, mMult);
12441224
}
@@ -1306,14 +1286,13 @@ class PairHistManager
13061286
mHistogramRegistry->fill(HIST(prefix) + HIST(AnalysisDir) + HIST(getHistName(kQoutQsideQlong, HistTable)), mQout, mQside, mQlong);
13071287
}
13081288
if (mPlotSH) {
1309-
const float shCentValue = mShUseCent ? mCent : mMult;
1310-
const int iCent = findShBin(shCentValue, mShCentEdges);
1289+
const int iCent = findShBin(mShUseCent ? mCent : mMult, mShCentEdges);
13111290
const int iKt = findShBin(mKt, mShKtEdges);
13121291
if (iCent >= 0 && iKt >= 0) {
13131292
mYlm.doYlmUpToL(mShLMax, mShOut, mShSide, mShLong, mShYlmBuffer.data());
13141293
for (std::size_t i = 0; i < mShYlmBuffer.size(); ++i) {
1315-
mShReal[i]->Fill(mShKv, shCentValue, mKt, std::real(mShYlmBuffer[i]));
1316-
mShImag[i]->Fill(mShKv, shCentValue, mKt, -std::imag(mShYlmBuffer[i]));
1294+
mShReal[iCent][iKt][i]->Fill(mShKv, std::real(mShYlmBuffer[i]));
1295+
mShImag[iCent][iKt][i]->Fill(mShKv, -std::imag(mShYlmBuffer[i]));
13171296
}
13181297
// covariance: outer product of the (re, -im) Ylm vector packed on 2*nJM axes
13191298
// (each Ylm contributes two consecutive axis bins: even = real, odd = -imag)
@@ -1327,8 +1306,8 @@ class PairHistManager
13271306
}
13281307
}
13291308

1309+
mShBinCount[iCent][iKt]->Fill(mShKv, 1.0);
13301310
if (mShPlot1D) {
1331-
mShBinCount[iCent][iKt]->Fill(mShKv, 1.0);
13321311
// FemtoUniverse h1D = f3d[0]: qinv (=2k*) for identical-LCMS, else k*.
13331312
const float sh1DValue = (mShFrame == ShFrameLcmsIdentical) ? (2.0f * mKstar) : mKstar;
13341313
mSh1D[iCent][iKt]->Fill(sh1DValue);
@@ -1649,7 +1628,6 @@ class PairHistManager
16491628
bool mPlot1d = true;
16501629
bool mPlot2d = true;
16511630

1652-
bool mPlotKstarVsKtVsCent = false;
16531631
bool mPlotKstarVsMtVsMult = false;
16541632
bool mPlotKstarVsMtVsMultVsCent = false;
16551633

@@ -1696,18 +1674,16 @@ class PairHistManager
16961674
static constexpr int ShFramePrf = 2;
16971675

16981676
o2::framework::AxisSpec mShKstarSpec{{60, 0.0f, 0.3f}, "k* (GeV/#it{c})"}; // set in init()
1699-
o2::framework::AxisSpec mShCentSpec{{1, 0.0f, 200.0f}, "mult/cent"};
1700-
o2::framework::AxisSpec mShKtSpec{{3, 0.1f, 0.4f}, "k_{T} (GeV/#it{c})"};
17011677

17021678
// kinematics computed in setPair(): axis value + 3 components feeding Ylm
17031679
float mShKv = 0.f; // kstar (non-identical) or qinv (identical)
17041680
float mShOut = 0.f;
17051681
float mShSide = 0.f;
17061682
float mShLong = 0.f;
17071683

1708-
// SH histograms per [ihist] (ihist = l*(l+1)+m); TH3: k* on X, mult/cent on Y, kT on Z
1709-
std::vector<std::shared_ptr<TH3>> mShReal;
1710-
std::vector<std::shared_ptr<TH3>> mShImag;
1684+
// SH histograms binned in [iCent][iKt][ihist]; ihist = l*(l+1)+m
1685+
std::vector<std::vector<std::vector<std::shared_ptr<TH1>>>> mShReal;
1686+
std::vector<std::vector<std::vector<std::shared_ptr<TH1>>>> mShImag;
17111687
// SH covariance matrix per [iCent][iKt]; TH3d: k* on X, 2*nJM (l,m x re/im)
17121688
std::vector<std::vector<std::shared_ptr<TH3>>> mShCov;
17131689
bool mShPlot1D = false;

0 commit comments

Comments
 (0)