From 3aeef1168dbb406e3ba1e30e2fdc73be5fa90d44 Mon Sep 17 00:00:00 2001 From: jesgum Date: Fri, 23 Oct 2026 13:44:21 +0200 Subject: [PATCH] Add NGlobalTracksVsFT0MOuterA needed for mc calibration --- Common/Tasks/centralityStudy.cxx | 333 ++++++++++--------------------- 1 file changed, 106 insertions(+), 227 deletions(-) diff --git a/Common/Tasks/centralityStudy.cxx b/Common/Tasks/centralityStudy.cxx index 3746eb622d5..7168d78b5cc 100644 --- a/Common/Tasks/centralityStudy.cxx +++ b/Common/Tasks/centralityStudy.cxx @@ -241,6 +241,16 @@ struct CentralityStudy { return std::get>(histPointers[name]); } + // fill the global histogram and, if enabled, its run-by-run copy with the same values + template + void fillHist(const TName& name, Ts... values) + { + histos.fill(name, values...); + if (studies.doRunByRunHistograms) { + getHist(histPath + TName::str)->Fill(values...); + } + } + void init(InitContext&) { ccdb->setURL(ccdbSettings.ccdbURL); @@ -350,6 +360,7 @@ struct CentralityStudy { histos.add("hNGlobalTracksVsFT0A", "hNGlobalTracksVsFT0A", kTH2F, {axisMultFT0A, axisMultGlobalTracks}); histos.add("hNGlobalTracksVsFT0C", "hNGlobalTracksVsFT0C", kTH2F, {axisMultFT0C, axisMultGlobalTracks}); histos.add("hNGlobalTracksVsFT0M", "hNGlobalTracksVsFT0M", kTH2F, {axisMultFT0M, axisMultGlobalTracks}); + histos.add("hNGlobalTracksVsFT0MOuterA", "hNGlobalTracksVsFT0MOuterA", kTH2F, {axisMultFT0M, axisMultGlobalTracks}); histos.add("hNGlobalTracksVsFV0A", "hNGlobalTracksVsFV0A", kTH2F, {axisMultFV0A, axisMultGlobalTracks}); histos.add("hNGlobalTracksVsFDDA", "hNGlobalTracksVsFDDA", kTH2F, {axisMultFDDA, axisMultGlobalTracks}); histos.add("hNGlobalTracksVsFDDC", "hNGlobalTracksVsFDDC", kTH2F, {axisMultFDDC, axisMultGlobalTracks}); @@ -555,9 +566,9 @@ struct CentralityStudy { histPointers.insert({histPath + "hFT0C_Collisions", histos.add((histPath + "hFT0C_Collisions").c_str(), "hFT0C_Collisions", {kTH1D, {{axisMultUltraFineFT0C}}})}); histPointers.insert({histPath + "hFT0COuter_Collisions", histos.add((histPath + "hFT0COuter_Collisions").c_str(), "hFT0COuter_Collisions", {kTH1D, {{axisMultUltraFineFT0C}}})}); histPointers.insert({histPath + "hFT0A_Collisions", histos.add((histPath + "hFT0A_Collisions").c_str(), "hFT0A_Collisions", {kTH1D, {{axisMultUltraFineFT0A}}})}); - histPointers.insert({histPath + "hFT0AOuter_Collisions", histos.add((histPath + "hFT0AOuter_Collisions").c_str(), "hFT0AOuter_Collisions", {kTH1D, {{axisMultUltraFineFT0C}}})}); + histPointers.insert({histPath + "hFT0AOuter_Collisions", histos.add((histPath + "hFT0AOuter_Collisions").c_str(), "hFT0AOuter_Collisions", {kTH1D, {{axisMultUltraFineFT0A}}})}); histPointers.insert({histPath + "hFV0AOuter_Collisions", histos.add((histPath + "hFV0AOuter_Collisions").c_str(), "hFV0AOuter_Collisions", {kTH1D, {{axisMultUltraFineFV0A}}})}); - histPointers.insert({histPath + "hFT0MOuterA_Collisions", histos.add((histPath + "hFT0MOuterA_Collisions").c_str(), "hFT0MOuterA_Collisions", {kTH1D, {{axisMultUltraFineFT0A}}})}); + histPointers.insert({histPath + "hFT0MOuterA_Collisions", histos.add((histPath + "hFT0MOuterA_Collisions").c_str(), "hFT0MOuterA_Collisions", {kTH1D, {{axisMultUltraFineFT0M}}})}); histPointers.insert({histPath + "hFT0M_Collisions", histos.add((histPath + "hFT0M_Collisions").c_str(), "hFT0M_Collisions", {kTH1D, {{axisMultUltraFineFT0M}}})}); histPointers.insert({histPath + "hFV0A_Collisions", histos.add((histPath + "hFV0A_Collisions").c_str(), "hFV0A_Collisions", {kTH1D, {{axisMultUltraFineFV0A}}})}); histPointers.insert({histPath + "hFIT_Collisions", histos.add((histPath + "hFIT_Collisions").c_str(), "hFIT_Collisions", {kTH1D, {{axisMultUltraFineFIT}}})}); @@ -616,6 +627,7 @@ struct CentralityStudy { histPointers.insert({histPath + "hNGlobalTracksVsFT0A", histos.add((histPath + "hNGlobalTracksVsFT0A").c_str(), "hNGlobalTracksVsFT0A", {kTH2F, {{axisMultFT0A, axisMultGlobalTracks}}})}); histPointers.insert({histPath + "hNGlobalTracksVsFT0C", histos.add((histPath + "hNGlobalTracksVsFT0C").c_str(), "hNGlobalTracksVsFT0C", {kTH2F, {{axisMultFT0C, axisMultGlobalTracks}}})}); histPointers.insert({histPath + "hNGlobalTracksVsFT0M", histos.add((histPath + "hNGlobalTracksVsFT0M").c_str(), "hNGlobalTracksVsFT0M", {kTH2F, {{axisMultFT0M, axisMultGlobalTracks}}})}); + histPointers.insert({histPath + "hNGlobalTracksVsFT0MOuterA", histos.add((histPath + "hNGlobalTracksVsFT0MOuterA").c_str(), "hNGlobalTracksVsFT0MOuterA", {kTH2F, {{axisMultFT0M, axisMultGlobalTracks}}})}); histPointers.insert({histPath + "hNGlobalTracksVsFV0A", histos.add((histPath + "hNGlobalTracksVsFV0A").c_str(), "hNGlobalTracksVsFV0A", {kTH2F, {{axisMultFV0A, axisMultGlobalTracks}}})}); histPointers.insert({histPath + "hNGlobalTracksVsNMFTTracks", histos.add((histPath + "hNGlobalTracksVsNMFTTracks").c_str(), "hNGlobalTracksVsNMFTTracks", {kTH2F, {{axisMultMFTTracks, axisMultGlobalTracks}}})}); histPointers.insert({histPath + "hNGlobalTracksVsNTPV", histos.add((histPath + "hNGlobalTracksVsNTPV").c_str(), "hNGlobalTracksVsNTPV", {kTH2F, {{axisMultPVContributors, axisMultGlobalTracks}}})}); @@ -721,19 +733,13 @@ struct CentralityStudy { initRun(collision); configureCentrality(collision); - histos.fill(HIST("hCollisionSelection"), 0); // all collisions - if (studies.doRunByRunHistograms) { - getHist(histPath + "hCollisionSelection")->Fill(0); - } + fillHist(HIST("hCollisionSelection"), 0); // all collisions if (evsel.applySel8 && !collision.multSel8()) { return; } - histos.fill(HIST("hCollisionSelection"), 1); - if (studies.doRunByRunHistograms) { - getHist(histPath + "hCollisionSelection")->Fill(1); - } + fillHist(HIST("hCollisionSelection"), 1); // calculate vertex-Z-equalized quantities if desired float multFV0A = collision.multFV0A(); @@ -796,8 +802,7 @@ struct CentralityStudy { passRequireIsVertexTOFmatched && passRequireIsVertexTRDmatched && passRejectSameBunchPileup && passRejectITSinROFpileupStandard && passRejectITSinROFpileupStrict && passSelectUPCcollisions && passRejectCollInTimeRangeNarrow && passINELgtZERO) { getHist(histPath + "hFT0CvsPVz_Collisions")->Fill(collision.multPVz(), multFT0C * scale.factorFT0C); - getHist(histPath + "hFT0CvsPVz_Collisions")->Fill(collision.multPVz(), multFT0C * scale.factorFT0C); - getHist(histPath + "hFT0AvsPVz_Collisions")->Fill(collision.multPVz(), multFT0A * scale.factorFT0C); + getHist(histPath + "hFT0AvsPVz_Collisions")->Fill(collision.multPVz(), multFT0A * scale.factorFT0A); getHist(histPath + "hFV0AvsPVz_Collisions")->Fill(collision.multPVz(), multFV0A * scale.factorFV0A); getHist(histPath + "hNGlobalTracksvsPVz_Collisions")->Fill(collision.multPVz(), multNTracksGlobal); getHist(histPath + "hNMFTTracksvsPVz_Collisions")->Fill(collision.multPVz(), mftNtracks); @@ -810,10 +815,7 @@ struct CentralityStudy { return; } - histos.fill(HIST("hCollisionSelection"), 2); - if (studies.doRunByRunHistograms) { - getHist(histPath + "hCollisionSelection")->Fill(2); - } + fillHist(HIST("hCollisionSelection"), 2); // _______________________________________________________ // Extra event selections start here @@ -821,53 +823,32 @@ struct CentralityStudy { return; } - histos.fill(HIST("hCollisionSelection"), 3 /* Not at ITS ROF border */); - if (studies.doRunByRunHistograms) { - getHist(histPath + "hCollisionSelection")->Fill(3); - } + fillHist(HIST("hCollisionSelection"), 3 /* Not at ITS ROF border */); if (!passRejectTFBorder) { return; } - histos.fill(HIST("hCollisionSelection"), 4 /* Not at TF border */); - if (studies.doRunByRunHistograms) { - getHist(histPath + "hCollisionSelection")->Fill(4); - } + fillHist(HIST("hCollisionSelection"), 4 /* Not at TF border */); if (!passRequireIsVertexITSTPC) { return; } - histos.fill(HIST("hCollisionSelection"), 5 /* Contains at least one ITS-TPC track */); - if (studies.doRunByRunHistograms) { - getHist(histPath + "hCollisionSelection")->Fill(5); - } + fillHist(HIST("hCollisionSelection"), 5 /* Contains at least one ITS-TPC track */); if (!passRequireIsGoodZvtxFT0VsPV) { return; } - histos.fill(HIST("hCollisionSelection"), 6 /* PV position consistency check */); - if (studies.doRunByRunHistograms) { - getHist(histPath + "hCollisionSelection")->Fill(6); - } + fillHist(HIST("hCollisionSelection"), 6 /* PV position consistency check */); if (!passRequireIsVertexTOFmatched) { return; } - histos.fill(HIST("hCollisionSelection"), 7 /* PV with at least one contributor matched with TOF */); - if (studies.doRunByRunHistograms) { - getHist(histPath + "hCollisionSelection")->Fill(7); - } + fillHist(HIST("hCollisionSelection"), 7 /* PV with at least one contributor matched with TOF */); if (!passRequireIsVertexTRDmatched) { return; } - histos.fill(HIST("hCollisionSelection"), 8 /* PV with at least one contributor matched with TRD */); - if (studies.doRunByRunHistograms) { - getHist(histPath + "hCollisionSelection")->Fill(8); - } + fillHist(HIST("hCollisionSelection"), 8 /* PV with at least one contributor matched with TRD */); if (!passRejectSameBunchPileup) { return; } - histos.fill(HIST("hCollisionSelection"), 9 /* Not at same bunch pile-up */); - if (studies.doRunByRunHistograms) { - getHist(histPath + "hCollisionSelection")->Fill(9); - } + fillHist(HIST("hCollisionSelection"), 9 /* Not at same bunch pile-up */); // do this only if information is available if constexpr (requires { collision.timeToNext(); }) { float timeToNeighbour = std::min( @@ -878,39 +859,24 @@ struct CentralityStudy { return; } } - histos.fill(HIST("hCollisionSelection"), 10 /* has suspicious neighbour */); - if (studies.doRunByRunHistograms) { - getHist(histPath + "hCollisionSelection")->Fill(10); - } + fillHist(HIST("hCollisionSelection"), 10 /* has suspicious neighbour */); if (!passRejectITSinROFpileupStandard) { return; } - histos.fill(HIST("hCollisionSelection"), 11 /* Not ITS ROF pileup (standard) */); - if (studies.doRunByRunHistograms) { - getHist(histPath + "hCollisionSelection")->Fill(11); - } + fillHist(HIST("hCollisionSelection"), 11 /* Not ITS ROF pileup (standard) */); if (!passRejectITSinROFpileupStrict) { return; } - histos.fill(HIST("hCollisionSelection"), 12 /* Not ITS ROF pileup (strict) */); - if (studies.doRunByRunHistograms) { - getHist(histPath + "hCollisionSelection")->Fill(12); - } + fillHist(HIST("hCollisionSelection"), 12 /* Not ITS ROF pileup (strict) */); if (!passSelectUPCcollisions) { // if zero then NOT upc, otherwise UPC return; } - histos.fill(HIST("hCollisionSelection"), 13 /* is UPC event */); - if (studies.doRunByRunHistograms) { - getHist(histPath + "hCollisionSelection")->Fill(13); - } + fillHist(HIST("hCollisionSelection"), 13 /* is UPC event */); if (!passRejectCollInTimeRangeNarrow) { return; } - histos.fill(HIST("hCollisionSelection"), 14 /* Reject collision in narrow time range */); - if (studies.doRunByRunHistograms) { - getHist(histPath + "hCollisionSelection")->Fill(14); - } + fillHist(HIST("hCollisionSelection"), 14 /* Reject collision in narrow time range */); if (evsel.rejectUpc) { if (collision.multFT0C() < cfgFwd.maxFT0CforZNACselection && @@ -927,10 +893,7 @@ struct CentralityStudy { return; } } - histos.fill(HIST("hCollisionSelection"), 15 /* pass em/upc rejection */); - if (studies.doRunByRunHistograms) { - getHist(histPath + "hCollisionSelection")->Fill(15); - } + fillHist(HIST("hCollisionSelection"), 15 /* pass em/upc rejection */); if (evsel.rejectIsFlangeEvent) { if constexpr (requires { collision.has_multBC(); }) { if (collision.has_multBC()) { @@ -944,18 +907,12 @@ struct CentralityStudy { } } - histos.fill(HIST("hCollisionSelection"), 16 /* reject flange events */); - if (studies.doRunByRunHistograms) { - getHist(histPath + "hCollisionSelection")->Fill(16); - } + fillHist(HIST("hCollisionSelection"), 16 /* reject flange events */); if (!passINELgtZERO) { return; } - histos.fill(HIST("hCollisionSelection"), 17 /* is INEL > 0 */); - if (studies.doRunByRunHistograms) { - getHist(histPath + "hCollisionSelection")->Fill(17); - } + fillHist(HIST("hCollisionSelection"), 17 /* is INEL > 0 */); if (evsel.applyBcSel) { if constexpr (requires { collision.has_multBC(); }) { @@ -975,14 +932,11 @@ struct CentralityStudy { } } - histos.fill(HIST("hCollisionSelection"), 18 /* bc selections */); - if (studies.doRunByRunHistograms) { - getHist(histPath + "hCollisionSelection")->Fill(18); - } + fillHist(HIST("hCollisionSelection"), 18 /* bc selections */); // if we got here, we also finally fill the FT0C histogram, please histos.fill(HIST("hNPVContributors"), collision.multNTracksPV()); - histos.fill(HIST("hFT0A_Collisions"), collision.multFT0A() * scale.factorFT0C); + histos.fill(HIST("hFT0A_Collisions"), collision.multFT0A() * scale.factorFT0A); histos.fill(HIST("hFT0C_Collisions"), collision.multFT0C() * scale.factorFT0C); histos.fill(HIST("hFT0M_Collisions"), (collision.multFT0A() + collision.multFT0C()) * scale.factorFT0M); histos.fill(HIST("hFV0A_Collisions"), collision.multFV0A() * scale.factorFV0A); @@ -1015,24 +969,14 @@ struct CentralityStudy { } if (studies.do2DPlots) { - histos.fill(HIST("hNContribsVsFT0C"), collision.multFT0C() * scale.factorFT0C, collision.multPVTotalContributors()); - histos.fill(HIST("hNContribsVsFV0A"), collision.multFV0A() * scale.factorFV0A, collision.multPVTotalContributors()); - histos.fill(HIST("hMatchedVsITSOnly"), collision.multNTracksITSOnly(), collision.multNTracksITSTPC()); + fillHist(HIST("hNContribsVsFT0C"), collision.multFT0C() * scale.factorFT0C, collision.multPVTotalContributors()); + fillHist(HIST("hNContribsVsFV0A"), collision.multFV0A() * scale.factorFV0A, collision.multPVTotalContributors()); + fillHist(HIST("hMatchedVsITSOnly"), collision.multNTracksITSOnly(), collision.multNTracksITSTPC()); // correlate also FIT detector signals - histos.fill(HIST("hFT0AVsFT0C"), collision.multFT0C() * scale.factorFT0C, collision.multFT0A()); - histos.fill(HIST("hFV0AVsFT0C"), collision.multFT0C() * scale.factorFT0C, collision.multFV0A()); - histos.fill(HIST("hFDDAVsFT0C"), collision.multFT0C() * scale.factorFT0C, collision.multFDDA()); - histos.fill(HIST("hFDDCVsFT0C"), collision.multFT0C() * scale.factorFT0C, collision.multFDDC()); - if (studies.doRunByRunHistograms) { - getHist(histPath + "hNContribsVsFT0C")->Fill(collision.multFT0C() * scale.factorFT0C, collision.multPVTotalContributors()); - getHist(histPath + "hNContribsVsFV0A")->Fill(collision.multFV0A() * scale.factorFV0A, collision.multPVTotalContributors()); - getHist(histPath + "hMatchedVsITSOnly")->Fill(collision.multNTracksITSOnly(), collision.multNTracksITSTPC()); - // correlate also FIT detector signals - getHist(histPath + "hFT0AVsFT0C")->Fill(collision.multFT0C() * scale.factorFT0C, collision.multFT0A()); - getHist(histPath + "hFV0AVsFT0C")->Fill(collision.multFT0C() * scale.factorFT0C, collision.multFV0A()); - getHist(histPath + "hFDDAVsFT0C")->Fill(collision.multFT0C() * scale.factorFT0C, collision.multFDDA()); - getHist(histPath + "hFDDCVsFT0C")->Fill(collision.multFT0C() * scale.factorFT0C, collision.multFDDC()); - } + fillHist(HIST("hFT0AVsFT0C"), collision.multFT0C() * scale.factorFT0C, collision.multFT0A()); + fillHist(HIST("hFV0AVsFT0C"), collision.multFT0C() * scale.factorFT0C, collision.multFV0A()); + fillHist(HIST("hFDDAVsFT0C"), collision.multFT0C() * scale.factorFT0C, collision.multFDDA()); + fillHist(HIST("hFDDCVsFT0C"), collision.multFT0C() * scale.factorFT0C, collision.multFDDC()); } if (studies.doOccupancyStudyVsCentrality2d) { @@ -1050,91 +994,45 @@ struct CentralityStudy { } if (studies.doNGlobalTracksVsRawSignals) { - histos.fill(HIST("hNGlobalTracksVsFT0A"), multFT0A, multNTracksGlobal); - histos.fill(HIST("hNGlobalTracksVsFT0C"), multFT0C, multNTracksGlobal); - histos.fill(HIST("hNGlobalTracksVsFT0M"), (multFT0A + multFT0C), multNTracksGlobal); - histos.fill(HIST("hNGlobalTracksVsFV0A"), multFV0A, multNTracksGlobal); - histos.fill(HIST("hNGlobalTracksVsNMFTTracks"), mftNtracks, multNTracksGlobal); - histos.fill(HIST("hNGlobalTracksVsNTPV"), multNTracksPV, multNTracksGlobal); - - // per run - if (studies.doRunByRunHistograms) { - getHist(histPath + "hNGlobalTracksVsFT0A")->Fill(multFT0A, multNTracksGlobal); - getHist(histPath + "hNGlobalTracksVsFT0C")->Fill(multFT0C, multNTracksGlobal); - getHist(histPath + "hNGlobalTracksVsFT0M")->Fill(multFT0A + multFT0C, multNTracksGlobal); - getHist(histPath + "hNGlobalTracksVsFV0A")->Fill(multFV0A, multNTracksGlobal); - getHist(histPath + "hNGlobalTracksVsNMFTTracks")->Fill(mftNtracks, multNTracksGlobal); - getHist(histPath + "hNGlobalTracksVsNTPV")->Fill(multNTracksPV, multNTracksGlobal); - } + fillHist(HIST("hNGlobalTracksVsFT0A"), multFT0A, multNTracksGlobal); + fillHist(HIST("hNGlobalTracksVsFT0C"), multFT0C, multNTracksGlobal); + fillHist(HIST("hNGlobalTracksVsFT0M"), (multFT0A + multFT0C), multNTracksGlobal); + fillHist(HIST("hNGlobalTracksVsFV0A"), multFV0A, multNTracksGlobal); + fillHist(HIST("hNGlobalTracksVsNMFTTracks"), mftNtracks, multNTracksGlobal); + fillHist(HIST("hNGlobalTracksVsNTPV"), multNTracksPV, multNTracksGlobal); } if (studies.doNTracksPVeta05VsRawSignals) { - histos.fill(HIST("hNTracksPVeta05VsFT0A"), multFT0A, multNTracksPV05); - histos.fill(HIST("hNTracksPVeta05VsFT0C"), multFT0C, multNTracksPV05); - histos.fill(HIST("hNTracksPVeta05VsFT0M"), (multFT0A + multFT0C), multNTracksPV05); - histos.fill(HIST("hNTracksPVeta05VsFV0A"), multFV0A, multNTracksPV05); - histos.fill(HIST("hNTracksPVeta05VsFDDA"), multFDDA, multNTracksPV05); - histos.fill(HIST("hNTracksPVeta05VsFDDC"), multFDDC, multNTracksPV05); - histos.fill(HIST("hNTracksPVeta05VsNMFTTracks"), mftNtracks, multNTracksPV05); - histos.fill(HIST("hNTracksPVeta05VsNTPV"), multNTracksPV, multNTracksPV05); - - // per run - if (studies.doRunByRunHistograms) { - getHist(histPath + "hNTracksPVeta05VsFT0A")->Fill(multFT0A, multNTracksPV05); - getHist(histPath + "hNTracksPVeta05VsFT0C")->Fill(multFT0C, multNTracksPV05); - getHist(histPath + "hNTracksPVeta05VsFT0M")->Fill(multFT0A + multFT0C, multNTracksPV05); - getHist(histPath + "hNTracksPVeta05VsFV0A")->Fill(multFV0A, multNTracksPV05); - getHist(histPath + "hNTracksPVeta05VsFDDA")->Fill(multFDDA, multNTracksPV05); - getHist(histPath + "hNTracksPVeta05VsFDDC")->Fill(multFDDC, multNTracksPV05); - getHist(histPath + "hNTracksPVeta05VsNMFTTracks")->Fill(mftNtracks, multNTracksPV05); - getHist(histPath + "hNTracksPVeta05VsNTPV")->Fill(multNTracksPV, multNTracksPV05); - } + fillHist(HIST("hNTracksPVeta05VsFT0A"), multFT0A, multNTracksPV05); + fillHist(HIST("hNTracksPVeta05VsFT0C"), multFT0C, multNTracksPV05); + fillHist(HIST("hNTracksPVeta05VsFT0M"), (multFT0A + multFT0C), multNTracksPV05); + fillHist(HIST("hNTracksPVeta05VsFV0A"), multFV0A, multNTracksPV05); + fillHist(HIST("hNTracksPVeta05VsFDDA"), multFDDA, multNTracksPV05); + fillHist(HIST("hNTracksPVeta05VsFDDC"), multFDDC, multNTracksPV05); + fillHist(HIST("hNTracksPVeta05VsNMFTTracks"), mftNtracks, multNTracksPV05); + fillHist(HIST("hNTracksPVeta05VsNTPV"), multNTracksPV, multNTracksPV05); } if (studies.doNTracksPVeta08VsRawSignals) { - histos.fill(HIST("hNTracksPVeta08VsFT0A"), multFT0A, multNTracksPV); - histos.fill(HIST("hNTracksPVeta08VsFT0C"), multFT0C, multNTracksPV); - histos.fill(HIST("hNTracksPVeta08VsFT0M"), (multFT0A + multFT0C), multNTracksPV); - histos.fill(HIST("hNTracksPVeta08VsFV0A"), multFV0A, multNTracksPV); - histos.fill(HIST("hNTracksPVeta08VsFDDA"), multFDDA, multNTracksPV); - histos.fill(HIST("hNTracksPVeta08VsFDDC"), multFDDC, multNTracksPV); - histos.fill(HIST("hNTracksPVeta08VsNMFTTracks"), mftNtracks, multNTracksPV); - histos.fill(HIST("hNTracksPVeta08VsNTPV"), multNTracksPV, multNTracksPV); - - // per run - if (studies.doRunByRunHistograms) { - getHist(histPath + "hNTracksPVeta08VsFT0A")->Fill(multFT0A, multNTracksPV); - getHist(histPath + "hNTracksPVeta08VsFT0C")->Fill(multFT0C, multNTracksPV); - getHist(histPath + "hNTracksPVeta08VsFT0M")->Fill(multFT0A + multFT0C, multNTracksPV); - getHist(histPath + "hNTracksPVeta08VsFV0A")->Fill(multFV0A, multNTracksPV); - getHist(histPath + "hNTracksPVeta08VsFDDA")->Fill(multFDDA, multNTracksPV); - getHist(histPath + "hNTracksPVeta08VsFDDC")->Fill(multFDDC, multNTracksPV); - getHist(histPath + "hNTracksPVeta08VsNMFTTracks")->Fill(mftNtracks, multNTracksPV); - getHist(histPath + "hNTracksPVeta08VsNTPV")->Fill(multNTracksPV, multNTracksPV); - } + fillHist(HIST("hNTracksPVeta08VsFT0A"), multFT0A, multNTracksPV); + fillHist(HIST("hNTracksPVeta08VsFT0C"), multFT0C, multNTracksPV); + fillHist(HIST("hNTracksPVeta08VsFT0M"), (multFT0A + multFT0C), multNTracksPV); + fillHist(HIST("hNTracksPVeta08VsFV0A"), multFV0A, multNTracksPV); + fillHist(HIST("hNTracksPVeta08VsFDDA"), multFDDA, multNTracksPV); + fillHist(HIST("hNTracksPVeta08VsFDDC"), multFDDC, multNTracksPV); + fillHist(HIST("hNTracksPVeta08VsNMFTTracks"), mftNtracks, multNTracksPV); + fillHist(HIST("hNTracksPVeta08VsNTPV"), multNTracksPV, multNTracksPV); } if (studies.doNTracksPVeta10VsRawSignals) { - histos.fill(HIST("hNTracksPVeta10VsFT0A"), multFT0A, multNTracksPV10); - histos.fill(HIST("hNTracksPVeta10VsFT0C"), multFT0C, multNTracksPV10); - histos.fill(HIST("hNTracksPVeta10VsFT0M"), (multFT0A + multFT0C), multNTracksPV10); - histos.fill(HIST("hNTracksPVeta10VsFV0A"), multFV0A, multNTracksPV10); - histos.fill(HIST("hNTracksPVeta10VsFDDA"), multFDDA, multNTracksPV10); - histos.fill(HIST("hNTracksPVeta10VsFDDC"), multFDDC, multNTracksPV10); - histos.fill(HIST("hNTracksPVeta10VsNMFTTracks"), mftNtracks, multNTracksPV10); - histos.fill(HIST("hNTracksPVeta10VsNTPV"), multNTracksPV, multNTracksPV10); - - // per run - if (studies.doRunByRunHistograms) { - getHist(histPath + "hNTracksPVeta10VsFT0A")->Fill(multFT0A, multNTracksPV10); - getHist(histPath + "hNTracksPVeta10VsFT0C")->Fill(multFT0C, multNTracksPV10); - getHist(histPath + "hNTracksPVeta10VsFT0M")->Fill(multFT0A + multFT0C, multNTracksPV10); - getHist(histPath + "hNTracksPVeta10VsFV0A")->Fill(multFV0A, multNTracksPV10); - getHist(histPath + "hNTracksPVeta10VsFDDA")->Fill(multFDDA, multNTracksPV10); - getHist(histPath + "hNTracksPVeta10VsFDDC")->Fill(multFDDC, multNTracksPV10); - getHist(histPath + "hNTracksPVeta10VsNMFTTracks")->Fill(mftNtracks, multNTracksPV10); - getHist(histPath + "hNTracksPVeta10VsNTPV")->Fill(multNTracksPV, multNTracksPV10); - } + fillHist(HIST("hNTracksPVeta10VsFT0A"), multFT0A, multNTracksPV10); + fillHist(HIST("hNTracksPVeta10VsFT0C"), multFT0C, multNTracksPV10); + fillHist(HIST("hNTracksPVeta10VsFT0M"), (multFT0A + multFT0C), multNTracksPV10); + fillHist(HIST("hNTracksPVeta10VsFV0A"), multFV0A, multNTracksPV10); + fillHist(HIST("hNTracksPVeta10VsFDDA"), multFDDA, multNTracksPV10); + fillHist(HIST("hNTracksPVeta10VsFDDC"), multFDDC, multNTracksPV10); + fillHist(HIST("hNTracksPVeta10VsNMFTTracks"), mftNtracks, multNTracksPV10); + fillHist(HIST("hNTracksPVeta10VsNTPV"), multNTracksPV, multNTracksPV10); } if constexpr (requires { collision.multMCExtraId(); }) { @@ -1158,22 +1056,13 @@ struct CentralityStudy { // if the table has centrality information // process FT0C centrality plots if (doprocessCollisionsWithCentrality || ccdbSettings.fetchCentralityCalibration) { - histos.fill(HIST("hCentrality"), centFT0C); - histos.fill(HIST("hNContribsVsCentrality"), centFT0C, collision.multPVTotalContributors()); - histos.fill(HIST("hNITSTPCTracksVsCentrality"), centFT0C, collision.multNTracksITSTPC()); - histos.fill(HIST("hNITSOnlyTracksVsCentrality"), centFT0C, collision.multNTracksITSOnly()); - histos.fill(HIST("hNGlobalTracksVsCentrality"), centFT0C, collision.multNTracksGlobal()); - histos.fill(HIST("hNMFTTracksVsCentrality"), centFT0C, collision.mftNtracks()); - histos.fill(HIST("hPVChi2VsCentrality"), centFT0C, collision.multPVChi2()); - if (studies.doRunByRunHistograms) { - getHist(histPath + "hCentrality")->Fill(centFT0C); - getHist(histPath + "hNContribsVsCentrality")->Fill(centFT0C, collision.multPVTotalContributors()); - getHist(histPath + "hNITSTPCTracksVsCentrality")->Fill(centFT0C, collision.multNTracksITSTPC()); - getHist(histPath + "hNITSOnlyTracksVsCentrality")->Fill(centFT0C, collision.multNTracksITSOnly()); - getHist(histPath + "hNGlobalTracksVsCentrality")->Fill(centFT0C, collision.multNTracksGlobal()); - getHist(histPath + "hNMFTTracksVsCentrality")->Fill(centFT0C, collision.mftNtracks()); - getHist(histPath + "hPVChi2VsCentrality")->Fill(centFT0C, collision.multPVChi2()); - } + fillHist(HIST("hCentrality"), centFT0C); + fillHist(HIST("hNContribsVsCentrality"), centFT0C, collision.multPVTotalContributors()); + fillHist(HIST("hNITSTPCTracksVsCentrality"), centFT0C, collision.multNTracksITSTPC()); + fillHist(HIST("hNITSOnlyTracksVsCentrality"), centFT0C, collision.multNTracksITSOnly()); + fillHist(HIST("hNGlobalTracksVsCentrality"), centFT0C, collision.multNTracksGlobal()); + fillHist(HIST("hNMFTTracksVsCentrality"), centFT0C, collision.mftNtracks()); + fillHist(HIST("hPVChi2VsCentrality"), centFT0C, collision.multPVChi2()); if (studies.doOccupancyStudyVsCentrality2d) { histos.fill(HIST("hNcontribsProfileVsTrackOccupancyVsCentrality"), collision.trackOccupancyInTimeRange(), centFT0C, collision.multPVTotalContributors()); histos.fill(HIST("hNGlobalTracksProfileVsTrackOccupancyVsCentrality"), collision.trackOccupancyInTimeRange(), centFT0C, collision.multNTracksGlobal()); @@ -1192,50 +1081,40 @@ struct CentralityStudy { if constexpr (requires { collision.has_multBC(); }) { if (collision.has_multBC()) { auto multbc = collision.template multBC_as>(); - histos.fill(HIST("hFV0AOuter_Collisions"), multbc.multFV0AOuter() * scale.factorFV0A); - histos.fill(HIST("hFT0AOuter_Collisions"), multbc.multFT0AOuter() * scale.factorFT0A); - histos.fill(HIST("hFT0MOuterA_Collisions"), multbc.multFT0AOuter() + multbc.multFT0C() * scale.factorFT0M); - - histos.fill(HIST("hFT0COuter_Collisions"), multbc.multFT0COuter() * scale.factorFT0C); - histos.fill(HIST("hFIT_Collisions"), (multbc.multFT0C() + multbc.multFT0AOuter() + multbc.multFV0AOuter()) * scale.factorFIT); - histos.fill(HIST("hFIT_FullV0_Collisions"), (multbc.multFT0C() + multbc.multFT0AOuter() + multbc.multFV0A()) * scale.factorFIT); - histos.fill(HIST("hFIT_All_Collisions"), (multbc.multFT0C() + multbc.multFT0A() + multbc.multFV0A()) * scale.factorFIT); + fillHist(HIST("hFV0AOuter_Collisions"), multbc.multFV0AOuter() * scale.factorFV0A); + fillHist(HIST("hFT0AOuter_Collisions"), multbc.multFT0AOuter() * scale.factorFT0A); + fillHist(HIST("hFT0MOuterA_Collisions"), (multbc.multFT0AOuter() + multbc.multFT0C()) * scale.factorFT0M); + + fillHist(HIST("hFT0COuter_Collisions"), multbc.multFT0COuter() * scale.factorFT0C); + fillHist(HIST("hFIT_Collisions"), (multbc.multFT0C() + multbc.multFT0AOuter() + multbc.multFV0AOuter()) * scale.factorFIT); + fillHist(HIST("hFIT_FullV0_Collisions"), (multbc.multFT0C() + multbc.multFT0AOuter() + multbc.multFV0A()) * scale.factorFIT); + fillHist(HIST("hFIT_All_Collisions"), (multbc.multFT0C() + multbc.multFT0A() + multbc.multFV0A()) * scale.factorFIT); if (studies.do2DPlots) { - histos.fill(HIST("hFT0AOuterVsFT0C"), multbc.multFT0C() * scale.factorFT0C, multbc.multFT0AOuter() * scale.factorFT0A); + fillHist(HIST("hFT0AOuterVsFT0C"), multbc.multFT0C() * scale.factorFT0C, multbc.multFT0AOuter() * scale.factorFT0A); + } + if (studies.doNGlobalTracksVsRawSignals) { + fillHist(HIST("hNGlobalTracksVsFT0MOuterA"), multbc.multFT0AOuter() + multbc.multFT0C(), multNTracksGlobal); } const uint64_t bcTimestamp = multbc.timestamp(); const float interactionRate = mRateFetcher.fetch(ccdb.service, bcTimestamp, mRunNumber, ccdbSettings.irSource.value, ccdbSettings.irCrashOnNull) / 1000.; // kHz - histos.fill(HIST("hInteractionRate"), interactionRate); + fillHist(HIST("hInteractionRate"), interactionRate); if (doprocessCollisionsWithCentrality || ccdbSettings.fetchCentralityCalibration) { - histos.fill(HIST("hInteractionRateVsCentrality"), centFT0C, interactionRate); - if (studies.doRunByRunHistograms) { - getHist(histPath + "hInteractionRateVsCentrality")->Fill(centFT0C, interactionRate); - } + fillHist(HIST("hInteractionRateVsCentrality"), centFT0C, interactionRate); } - if (studies.doRunByRunHistograms) { - getHist(histPath + "hInteractionRate")->Fill(interactionRate); - getHist(histPath + "hFT0AOuter_Collisions")->Fill(multbc.multFT0AOuter() * scale.factorFT0A); - getHist(histPath + "hFV0AOuter_Collisions")->Fill(multbc.multFV0AOuter() * scale.factorFV0A); - getHist(histPath + "hFT0MOuterA_Collisions")->Fill(multbc.multFT0AOuter() + multbc.multFT0C() * scale.factorFT0M); - if (studies.do2DPlots) { - getHist(histPath + "hFT0AOuterVsFT0C")->Fill(multbc.multFT0C() * scale.factorFT0C, multbc.multFT0AOuter() * scale.factorFT0A); - } - - if (studies.doTimeStudies) { - const float hoursAfterStartOfRun = static_cast(bcTimestamp - startOfRunTimestamp) / 3600000.0; - getHist(histPath + "hFT0AVsTime")->Fill(hoursAfterStartOfRun, collision.multFT0A()); - getHist(histPath + "hFT0CVsTime")->Fill(hoursAfterStartOfRun, collision.multFT0C()); - getHist(histPath + "hFT0MVsTime")->Fill(hoursAfterStartOfRun, collision.multFT0M()); - getHist(histPath + "hFV0AVsTime")->Fill(hoursAfterStartOfRun, collision.multFV0A()); - getHist(histPath + "hFV0AOuterVsTime")->Fill(hoursAfterStartOfRun, multbc.multFV0AOuter()); - getHist(histPath + "hMFTTracksVsTime")->Fill(hoursAfterStartOfRun, collision.mftNtracks()); - getHist(histPath + "hNGlobalVsTime")->Fill(hoursAfterStartOfRun, collision.multNTracksGlobal()); - getHist(histPath + "hNTPVContributorsVsTime")->Fill(hoursAfterStartOfRun, collision.multPVTotalContributors()); - getHist(histPath + "hPVzProfileCoVsTime")->Fill(hoursAfterStartOfRun, collision.multPVz()); - getHist(histPath + "hPVzProfileBcVsTime")->Fill(hoursAfterStartOfRun, multbc.multFT0PosZ()); - getHist(histPath + "hIRProfileVsTime")->Fill(hoursAfterStartOfRun, interactionRate); - } + if (studies.doRunByRunHistograms && studies.doTimeStudies) { + const float hoursAfterStartOfRun = static_cast(bcTimestamp - startOfRunTimestamp) / 3600000.0; + getHist(histPath + "hFT0AVsTime")->Fill(hoursAfterStartOfRun, collision.multFT0A()); + getHist(histPath + "hFT0CVsTime")->Fill(hoursAfterStartOfRun, collision.multFT0C()); + getHist(histPath + "hFT0MVsTime")->Fill(hoursAfterStartOfRun, collision.multFT0M()); + getHist(histPath + "hFV0AVsTime")->Fill(hoursAfterStartOfRun, collision.multFV0A()); + getHist(histPath + "hFV0AOuterVsTime")->Fill(hoursAfterStartOfRun, multbc.multFV0AOuter()); + getHist(histPath + "hMFTTracksVsTime")->Fill(hoursAfterStartOfRun, collision.mftNtracks()); + getHist(histPath + "hNGlobalVsTime")->Fill(hoursAfterStartOfRun, collision.multNTracksGlobal()); + getHist(histPath + "hNTPVContributorsVsTime")->Fill(hoursAfterStartOfRun, collision.multPVTotalContributors()); + getHist(histPath + "hPVzProfileCoVsTime")->Fill(hoursAfterStartOfRun, collision.multPVz()); + getHist(histPath + "hPVzProfileBcVsTime")->Fill(hoursAfterStartOfRun, multbc.multFT0PosZ()); + getHist(histPath + "hIRProfileVsTime")->Fill(hoursAfterStartOfRun, interactionRate); } } }