@@ -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
240237struct 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/";
496492constexpr char PrefixTrackV0Se[] = " TrackV0/SE/" ;
497493constexpr 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-
504495constexpr char PrefixV0V0Se[] = " V0V0/SE/" ;
505496constexpr 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