diff --git a/PWGLF/TableProducer/Common/zdc2stagecalibration.cxx b/PWGLF/TableProducer/Common/zdc2stagecalibration.cxx index 7462f157c7f..effa33e1b0a 100644 --- a/PWGLF/TableProducer/Common/zdc2stagecalibration.cxx +++ b/PWGLF/TableProducer/Common/zdc2stagecalibration.cxx @@ -166,6 +166,7 @@ struct zdc2stagecalibration { AxisSpec qComponentAxis = {4, 0.0, 4.0, "Q component"}; AxisSpec qTwistMomentAxis = {10, 0.0, 10.0, "Q moments (A: 0-4, C: 5-9)"}; AxisSpec qCorrelationComponentAxis = {4, 0.0, 4.0, "A-C correlation component"}; + AxisSpec phiHarmonicAxis = {8, 0.0, 8.0, "cos1,sin1,...,cos4,sin4"}; AxisSpec qValueAxis = {200, -4.0, 4.0, "Q"}; histos.add("hEvtSelInfo", "hEvtSelInfo", kTH1F, {{10, 0.0, 10.0}}); @@ -311,6 +312,33 @@ struct zdc2stagecalibration { histos.add("QCorrelationQA/pQACorrelationBeforeVsCentrality", "A-C Q correlations before recentering;centrality (%);correlation component;", kTProfile2D, {centralityAxis, qCorrelationComponentAxis}); histos.add("QCorrelationQA/pQACorrelationAfterVsCentrality", "A-C Q correlations after recentering;centrality (%);correlation component;", kTProfile2D, {centralityAxis, qCorrelationComponentAxis}); + // Final-calibration QA: only filled after recentering, width and twist. + histos.add("final_calibration/hQxAVsCentrality", "Final QxA vs centrality;centrality (%);Q_{x}^{A}", kTH2F, {centralityAxis, qValueAxis}); + histos.add("final_calibration/hQyAVsCentrality", "Final QyA vs centrality;centrality (%);Q_{y}^{A}", kTH2F, {centralityAxis, qValueAxis}); + histos.add("final_calibration/hQxCVsCentrality", "Final QxC vs centrality;centrality (%);Q_{x}^{C}", kTH2F, {centralityAxis, qValueAxis}); + histos.add("final_calibration/hQyCVsCentrality", "Final QyC vs centrality;centrality (%);Q_{y}^{C}", kTH2F, {centralityAxis, qValueAxis}); + histos.add("final_calibration/pQxAVsCentrality", "Final vs centrality;centrality (%);", kTProfile, {centralityAxis}); + histos.add("final_calibration/pQyAVsCentrality", "Final vs centrality;centrality (%);", kTProfile, {centralityAxis}); + histos.add("final_calibration/pQxCVsCentrality", "Final vs centrality;centrality (%);", kTProfile, {centralityAxis}); + histos.add("final_calibration/pQyCVsCentrality", "Final vs centrality;centrality (%);", kTProfile, {centralityAxis}); + histos.add("final_calibration/hPhiAVsCentrality", "Final ZNA #phi vs centrality;centrality (%);#phi_{A}", kTH2F, {centralityAxis, phiAxis}); + histos.add("final_calibration/hPhiCVsCentrality", "Final ZNC #phi vs centrality;centrality (%);#phi_{C}", kTH2F, {centralityAxis, phiAxis}); + histos.add("final_calibration/pCosPsiAPsiCVsCentrality", "Final A-C plane correlation;centrality (%);", kTProfile, {centralityAxis}); + histos.add("final_calibration/pCosPsiAPsiCVsCentralityVz", "Final A-C plane correlation vs centrality and v_{z};centrality (%);v_{z} (cm);", kTProfile2D, {centralityAxis, resolutionVzAxis}); + histos.add("final_calibration/pQxAQxCVsCentrality", "Final ;centrality (%);", kTProfile, {centralityAxis}); + histos.add("final_calibration/pQyAQyCVsCentrality", "Final ;centrality (%);", kTProfile, {centralityAxis}); + histos.add("final_calibration/pQxAQyCVsCentrality", "Final ;centrality (%);", kTProfile, {centralityAxis}); + histos.add("final_calibration/pQyAQxCVsCentrality", "Final ;centrality (%);", kTProfile, {centralityAxis}); + histos.add("final_calibration/pQxAVsCentralityVz", "Final vs centrality and v_{z};centrality (%);v_{z} (cm);", kTProfile2D, {centralityAxis, resolutionVzAxis}); + histos.add("final_calibration/pQyAVsCentralityVz", "Final vs centrality and v_{z};centrality (%);v_{z} (cm);", kTProfile2D, {centralityAxis, resolutionVzAxis}); + histos.add("final_calibration/pQxCVsCentralityVz", "Final vs centrality and v_{z};centrality (%);v_{z} (cm);", kTProfile2D, {centralityAxis, resolutionVzAxis}); + histos.add("final_calibration/pQyCVsCentralityVz", "Final vs centrality and v_{z};centrality (%);v_{z} (cm);", kTProfile2D, {centralityAxis, resolutionVzAxis}); + histos.add("final_calibration/pQMomentsVsCentrality", "Final Q moments: Qx,Qy,Qx^{2},Qy^{2},QxQy for A then C;centrality (%);moment index;", kTProfile2D, {centralityAxis, qTwistMomentAxis}); + histos.add("final_calibration/pPhiHarmonicsAVsCentrality", "Final ZNA #phi harmonics: cos(n#phi),sin(n#phi) for n=1..4;centrality (%);harmonic index;", kTProfile2D, {centralityAxis, phiHarmonicAxis}); + histos.add("final_calibration/pPhiHarmonicsCVsCentrality", "Final ZNC #phi harmonics: cos(n#phi),sin(n#phi) for n=1..4;centrality (%);harmonic index;", kTProfile2D, {centralityAxis, phiHarmonicAxis}); + histos.add("final_calibration/pQMagAVsCentrality", "Final |Q_{A}| vs centrality;centrality (%);<|Q_{A}|>", kTProfile, {centralityAxis}); + histos.add("final_calibration/pQMagCVsCentrality", "Final |Q_{C}| vs centrality;centrality (%);<|Q_{C}|>", kTProfile, {centralityAxis}); + ccdb->setURL(cfgCcdbParam.cfgURL); ccdb->setCaching(true); ccdb->setLocalObjectValidityChecking(); @@ -1170,6 +1198,42 @@ struct zdc2stagecalibration { histos.fill(HIST("ResolutionQA/pCosPsiAPsiCVsCentralityVz"), centrality, vz, correlation); } + if (calibrationStage.value == 2 && useQRecentering.value && useQWidthEqualization.value && useQTwist.value && qMagA > 0. && qMagC > 0.) { + histos.fill(HIST("final_calibration/hQxAVsCentrality"), centrality, qValues[0]); + histos.fill(HIST("final_calibration/hQyAVsCentrality"), centrality, qValues[1]); + histos.fill(HIST("final_calibration/hQxCVsCentrality"), centrality, qValues[2]); + histos.fill(HIST("final_calibration/hQyCVsCentrality"), centrality, qValues[3]); + histos.fill(HIST("final_calibration/pQxAVsCentrality"), centrality, qValues[0]); + histos.fill(HIST("final_calibration/pQyAVsCentrality"), centrality, qValues[1]); + histos.fill(HIST("final_calibration/pQxCVsCentrality"), centrality, qValues[2]); + histos.fill(HIST("final_calibration/pQyCVsCentrality"), centrality, qValues[3]); + histos.fill(HIST("final_calibration/hPhiAVsCentrality"), centrality, phiFinalA); + histos.fill(HIST("final_calibration/hPhiCVsCentrality"), centrality, phiFinalC); + const double finalCorrelation = std::cos(phiFinalA - phiFinalC); + histos.fill(HIST("final_calibration/pCosPsiAPsiCVsCentrality"), centrality, finalCorrelation); + histos.fill(HIST("final_calibration/pCosPsiAPsiCVsCentralityVz"), centrality, vz, finalCorrelation); + histos.fill(HIST("final_calibration/pQxAQxCVsCentrality"), centrality, qValues[0] * qValues[2]); + histos.fill(HIST("final_calibration/pQyAQyCVsCentrality"), centrality, qValues[1] * qValues[3]); + histos.fill(HIST("final_calibration/pQxAQyCVsCentrality"), centrality, qValues[0] * qValues[3]); + histos.fill(HIST("final_calibration/pQyAQxCVsCentrality"), centrality, qValues[1] * qValues[2]); + histos.fill(HIST("final_calibration/pQxAVsCentralityVz"), centrality, vz, qValues[0]); + histos.fill(HIST("final_calibration/pQyAVsCentralityVz"), centrality, vz, qValues[1]); + histos.fill(HIST("final_calibration/pQxCVsCentralityVz"), centrality, vz, qValues[2]); + histos.fill(HIST("final_calibration/pQyCVsCentralityVz"), centrality, vz, qValues[3]); + const auto finalMoments = makeTwistMoments(qValues); + for (int i = 0; i < 10; ++i) { + histos.fill(HIST("final_calibration/pQMomentsVsCentrality"), centrality, i + 0.5, finalMoments[i]); + } + for (int n = 1; n <= 4; ++n) { + histos.fill(HIST("final_calibration/pPhiHarmonicsAVsCentrality"), centrality, 2 * n - 1.5, std::cos(n * phiFinalA)); + histos.fill(HIST("final_calibration/pPhiHarmonicsAVsCentrality"), centrality, 2 * n - 0.5, std::sin(n * phiFinalA)); + histos.fill(HIST("final_calibration/pPhiHarmonicsCVsCentrality"), centrality, 2 * n - 1.5, std::cos(n * phiFinalC)); + histos.fill(HIST("final_calibration/pPhiHarmonicsCVsCentrality"), centrality, 2 * n - 0.5, std::sin(n * phiFinalC)); + } + histos.fill(HIST("final_calibration/pQMagAVsCentrality"), centrality, qMagA); + histos.fill(HIST("final_calibration/pQMagCVsCentrality"), centrality, qMagC); + } + histos.fill(HIST("hEvtSelInfo"), 7.5); fillTable(true, static_cast(qValues[0]), static_cast(qValues[2]), static_cast(qValues[1]), static_cast(qValues[3])); histos.fill(HIST("hEvtSelInfo"), 8.5);