Skip to content

Commit a0fef3d

Browse files
authored
[PWGLF] Adapt flowQC to higher harmonics for updated ep-tables (#11646)
1 parent 121ef5b commit a0fef3d

File tree

1 file changed

+39
-41
lines changed

1 file changed

+39
-41
lines changed

PWGLF/TableProducer/QC/flowQC.cxx

Lines changed: 39 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -19,34 +19,32 @@
1919
// o2-analysis-multiplicity-table, o2-analysis-ft0-corrected-table, o2-analysis-track-propagation,
2020
// o2-analysis-trackselection, o2-analysis-qvector-table, o2-analysis-lf-flow-qc
2121

22-
#include <cmath>
23-
24-
#include "Math/Vector4D.h"
25-
26-
#include "CCDB/BasicCCDBManager.h"
22+
#include "PWGLF/DataModel/EPCalibrationTables.h"
2723

24+
#include "Common/Core/EventPlaneHelper.h"
2825
#include "Common/Core/trackUtilities.h"
2926
#include "Common/DataModel/Centrality.h"
30-
#include "Common/DataModel/Multiplicity.h"
3127
#include "Common/DataModel/EventSelection.h"
32-
#include "Common/Core/EventPlaneHelper.h"
33-
#include "PWGLF/DataModel/EPCalibrationTables.h"
28+
#include "Common/DataModel/Multiplicity.h"
3429
#include "Common/DataModel/Qvectors.h"
3530

31+
#include "CCDB/BasicCCDBManager.h"
3632
#include "DataFormatsParameters/GRPMagField.h"
3733
#include "DataFormatsParameters/GRPObject.h"
3834
#include "DataFormatsTPC/BetheBlochAleph.h"
3935
#include "DetectorsBase/GeometryManager.h"
4036
#include "DetectorsBase/Propagator.h"
41-
37+
#include "Framework/ASoAHelpers.h"
4238
#include "Framework/AnalysisDataModel.h"
4339
#include "Framework/AnalysisTask.h"
44-
#include "Framework/ASoAHelpers.h"
4540
#include "Framework/HistogramRegistry.h"
4641
#include "Framework/runDataProcessing.h"
4742

43+
#include "Math/Vector4D.h"
4844
#include "TRandom3.h"
4945

46+
#include <cmath>
47+
5048
using namespace o2;
5149
using namespace o2::framework;
5250
using namespace o2::framework::expressions;
@@ -111,7 +109,7 @@ struct flowQC {
111109
int mRunNumber = 0;
112110
float mBz = 0.f;
113111

114-
Configurable<int> cfgHarmonics{"cfgHarmonics", 2, "Harmonics for flow analysis"};
112+
Configurable<float> cfgHarmonic{"cfgHarmonic", 2.f, "Harmonics for flow analysis"};
115113

116114
// Flow analysis
117115
using CollWithEPandQvec = soa::Join<aod::Collisions,
@@ -173,15 +171,15 @@ struct flowQC {
173171

174172
const AxisSpec centAxis{cfgCentralityBins, fmt::format("{} percentile", (std::string)centDetectorNames[cfgCentralityEstimator])};
175173

176-
const AxisSpec QxAxis{cfgQvecBins, Form("Q_{%d,x}", cfgHarmonics.value)};
177-
const AxisSpec QyAxis{cfgQvecBins, Form("Q_{%d,y}", cfgHarmonics.value)};
174+
const AxisSpec QxAxis{cfgQvecBins, Form("Q_{%.0f,x}", cfgHarmonic.value)};
175+
const AxisSpec QyAxis{cfgQvecBins, Form("Q_{%.0f,y}", cfgHarmonic.value)};
178176

179-
const AxisSpec NormQxAxis{cfgQvecBins, Form("#frac{Q_{%d,x}}{||#vec{Q_{%d}}||}", cfgHarmonics.value, cfgHarmonics.value)};
180-
const AxisSpec NormQyAxis{cfgQvecBins, Form("#frac{Q_{%d,y}}{||#vec{Q_{%d}}||}", cfgHarmonics.value, cfgHarmonics.value)};
177+
const AxisSpec NormQxAxis{cfgQvecBins, Form("#frac{Q_{%.0f,x}}{||#vec{Q_{%.0f}}||}", cfgHarmonic.value, cfgHarmonic.value)};
178+
const AxisSpec NormQyAxis{cfgQvecBins, Form("#frac{Q_{%.0f,y}}{||#vec{Q_{%.0f}}||}", cfgHarmonic.value, cfgHarmonic.value)};
181179

182-
const AxisSpec psiAxis{cfgPhiBins, Form("#psi_{%d}", cfgHarmonics.value)};
183-
const AxisSpec psiCompAxis{cfgPhiBins, Form("#psi_{%d}^{EP} - #psi_{%d}^{Qvec}", cfgHarmonics.value, cfgHarmonics.value)};
184-
const AxisSpec cosPsiCompAxis{cfgCosPhiBins, Form("cos[2(#psi_{%d}^{EP} - #psi_{%d}^{Qvec})]", cfgHarmonics.value, cfgHarmonics.value)};
180+
const AxisSpec psiAxis{cfgPhiBins, Form("#psi_{%.0f}", cfgHarmonic.value)};
181+
const AxisSpec psiCompAxis{cfgPhiBins, Form("#psi_{%.0f}^{EP} - #psi_{%.0f}^{Qvec}", cfgHarmonic.value, cfgHarmonic.value)};
182+
const AxisSpec cosPsiCompAxis{cfgCosPhiBins, Form("cos[2(#psi_{%.0f}^{EP} - #psi_{%.0f}^{Qvec})]", cfgHarmonic.value, cfgHarmonic.value)};
185183

186184
// z vertex histogram
187185
general.add("hRecVtxZData", "collision z position", HistType::kTH1F, {{200, -20., +20., "z position (cm)"}});
@@ -205,12 +203,12 @@ struct flowQC {
205203
hDeltaPsi[iMethod][iQvecDet][jQvecDet] = registry->add<TH2>(Form("hDeltaPsi_%s_%s_%s", qVecDetectorNames[iQvecDet].c_str(), qVecDetectorNames[jQvecDet].c_str(), suffixes[iMethod].c_str()), "", HistType::kTH2F, {centAxis, {cfgDeltaPhiBins, Form("#psi_{%s} - #psi_{%s}", qVecDetectorNames[iQvecDet].c_str(), qVecDetectorNames[jQvecDet].c_str())}});
206204

207205
// Scalar-product histograms
208-
auto spLabel = Form("#vec{Q}_{%d}^{%s} #upoint #vec{Q}_{%d}^{%s}", cfgHarmonics.value, qVecDetectorNames[iQvecDet].c_str(), cfgHarmonics.value, qVecDetectorNames[jQvecDet].c_str());
206+
auto spLabel = Form("#vec{Q}_{%.0f}^{%s} #upoint #vec{Q}_{%.0f}^{%s}", cfgHarmonic.value, qVecDetectorNames[iQvecDet].c_str(), cfgHarmonic.value, qVecDetectorNames[jQvecDet].c_str());
209207

210208
hScalarProduct[iMethod][iQvecDet][jQvecDet] = registry->add<TH2>(Form("hScalarProduct_%s_%s_%s", qVecDetectorNames[iQvecDet].c_str(), qVecDetectorNames[jQvecDet].c_str(), suffixes[iMethod].c_str()), "", HistType::kTH2F, {centAxis, {cfgQvecBins, spLabel}});
211209

212210
// Normalised scalar-product histograms
213-
auto normSpLabel = Form("#frac{#vec{Q}_{%d}^{%s} #upoint #vec{Q}_{%d}^{%s}}{||#vec{Q}_{%d}^{%s}|| ||#vec{Q}_{%d}^{%s}||}", cfgHarmonics.value, qVecDetectorNames[iQvecDet].c_str(), cfgHarmonics.value, qVecDetectorNames[jQvecDet].c_str(), cfgHarmonics.value, qVecDetectorNames[iQvecDet].c_str(), cfgHarmonics.value, qVecDetectorNames[jQvecDet].c_str());
211+
auto normSpLabel = Form("#frac{#vec{Q}_{%.0f}^{%s} #upoint #vec{Q}_{%.0f}^{%s}}{||#vec{Q}_{%.0f}^{%s}|| ||#vec{Q}_{%.0f}^{%s}||}", cfgHarmonic.value, qVecDetectorNames[iQvecDet].c_str(), cfgHarmonic.value, qVecDetectorNames[jQvecDet].c_str(), cfgHarmonic.value, qVecDetectorNames[iQvecDet].c_str(), cfgHarmonic.value, qVecDetectorNames[jQvecDet].c_str());
214212

215213
hNormalisedScalarProduct[iMethod][iQvecDet][jQvecDet] = registry->add<TH2>(Form("hNormalisedScalarProduct_%s_%s_%s", qVecDetectorNames[iQvecDet].c_str(), qVecDetectorNames[jQvecDet].c_str(), suffixes[iMethod].c_str()), "", HistType::kTH2F, {centAxis, {cfgQvecBins, normSpLabel}});
216214
}
@@ -263,52 +261,52 @@ struct flowQC {
263261
// EP method
264262
float QmodFT0A_EP = collision.qFT0A();
265263
float psiFT0A_EP = collision.psiFT0A();
266-
float QxFT0A_EP = QmodFT0A_EP * std::cos(2 * psiFT0A_EP);
267-
float QyFT0A_EP = QmodFT0A_EP * std::sin(2 * psiFT0A_EP);
264+
float QxFT0A_EP = QmodFT0A_EP * std::cos(cfgHarmonic.value * psiFT0A_EP);
265+
float QyFT0A_EP = QmodFT0A_EP * std::sin(cfgHarmonic.value * psiFT0A_EP);
268266

269267
float QmodFT0C_EP = collision.qFT0C();
270268
float psiFT0C_EP = collision.psiFT0C();
271-
float QxFT0C_EP = QmodFT0C_EP * std::cos(2 * psiFT0C_EP);
272-
float QyFT0C_EP = QmodFT0C_EP * std::sin(2 * psiFT0C_EP);
269+
float QxFT0C_EP = QmodFT0C_EP * std::cos(cfgHarmonic.value * psiFT0C_EP);
270+
float QyFT0C_EP = QmodFT0C_EP * std::sin(cfgHarmonic.value * psiFT0C_EP);
273271

274272
float QmodTPCl_EP = collision.qTPCL();
275273
float psiTPCl_EP = collision.psiTPCL();
276-
float QxTPCl_EP = QmodTPCl_EP * std::cos(2 * psiTPCl_EP);
277-
float QyTPCl_EP = QmodTPCl_EP * std::sin(2 * psiTPCl_EP);
274+
float QxTPCl_EP = QmodTPCl_EP * std::cos(cfgHarmonic.value * psiTPCl_EP);
275+
float QyTPCl_EP = QmodTPCl_EP * std::sin(cfgHarmonic.value * psiTPCl_EP);
278276

279277
float QmodTPCr_EP = collision.qTPCR();
280278
float psiTPCr_EP = collision.psiTPCR();
281-
float QxTPCr_EP = QmodTPCr_EP * std::cos(2 * psiTPCr_EP);
282-
float QyTPCr_EP = QmodTPCr_EP * std::sin(2 * psiTPCr_EP);
279+
float QxTPCr_EP = QmodTPCr_EP * std::cos(cfgHarmonic.value * psiTPCr_EP);
280+
float QyTPCr_EP = QmodTPCr_EP * std::sin(cfgHarmonic.value * psiTPCr_EP);
283281

284282
float QmodTPC_EP = collision.qTPC();
285283
float psiTPC_EP = collision.psiTPC();
286-
float QxTPC_EP = QmodTPC_EP * std::cos(2 * psiTPC_EP);
287-
float QyTPC_EP = QmodTPC_EP * std::sin(2 * psiTPC_EP);
284+
float QxTPC_EP = QmodTPC_EP * std::cos(cfgHarmonic.value * psiTPC_EP);
285+
float QyTPC_EP = QmodTPC_EP * std::sin(cfgHarmonic.value * psiTPC_EP);
288286

289287
// Qvec method
290-
float QxFT0A_Qvec = collision.qvecFT0AReVec()[cfgHarmonics - 2];
291-
float QyFT0A_Qvec = collision.qvecFT0AImVec()[cfgHarmonics - 2];
288+
float QxFT0A_Qvec = collision.qvecFT0AReVec()[cfgHarmonic.value - 2];
289+
float QyFT0A_Qvec = collision.qvecFT0AImVec()[cfgHarmonic.value - 2];
292290
float QmodFT0A_Qvec = std::hypot(QxFT0A_Qvec, QyFT0A_Qvec);
293291
float psiFT0A_Qvec = computeEventPlane(QyFT0A_Qvec, QxFT0A_Qvec);
294292

295-
float QxFT0C_Qvec = collision.qvecFT0CReVec()[cfgHarmonics - 2];
296-
float QyFT0C_Qvec = collision.qvecFT0CImVec()[cfgHarmonics - 2];
293+
float QxFT0C_Qvec = collision.qvecFT0CReVec()[cfgHarmonic.value - 2];
294+
float QyFT0C_Qvec = collision.qvecFT0CImVec()[cfgHarmonic.value - 2];
297295
float QmodFT0C_Qvec = std::hypot(QxFT0C_Qvec, QyFT0C_Qvec);
298296
float psiFT0C_Qvec = computeEventPlane(QyFT0C_Qvec, QxFT0C_Qvec);
299297

300-
float QxTPCl_Qvec = collision.qvecTPCnegReVec()[cfgHarmonics - 2];
301-
float QyTPCl_Qvec = collision.qvecTPCnegImVec()[cfgHarmonics - 2];
298+
float QxTPCl_Qvec = collision.qvecTPCnegReVec()[cfgHarmonic.value - 2];
299+
float QyTPCl_Qvec = collision.qvecTPCnegImVec()[cfgHarmonic.value - 2];
302300
float QmodTPCl_Qvec = std::hypot(QxTPCl_Qvec, QyTPCl_Qvec);
303301
float psiTPCl_Qvec = computeEventPlane(QyTPCl_Qvec, QxTPCl_Qvec);
304302

305-
float QxTPCr_Qvec = collision.qvecTPCposReVec()[cfgHarmonics - 2];
306-
float QyTPCr_Qvec = collision.qvecTPCposImVec()[cfgHarmonics - 2];
303+
float QxTPCr_Qvec = collision.qvecTPCposReVec()[cfgHarmonic.value - 2];
304+
float QyTPCr_Qvec = collision.qvecTPCposImVec()[cfgHarmonic.value - 2];
307305
float QmodTPCr_Qvec = std::hypot(QxTPCr_Qvec, QyTPCr_Qvec);
308306
float psiTPCr_Qvec = computeEventPlane(QyTPCr_Qvec, QxTPCr_Qvec);
309307

310-
float QxTPC_Qvec = collision.qvecTPCallReVec()[cfgHarmonics - 2];
311-
float QyTPC_Qvec = collision.qvecTPCallImVec()[cfgHarmonics - 2];
308+
float QxTPC_Qvec = collision.qvecTPCallReVec()[cfgHarmonic.value - 2];
309+
float QyTPC_Qvec = collision.qvecTPCallImVec()[cfgHarmonic.value - 2];
312310
float QmodTPC_Qvec = std::hypot(QxTPC_Qvec, QyTPC_Qvec);
313311
float psiTPC_Qvec = computeEventPlane(QyTPC_Qvec, QxTPC_Qvec);
314312

@@ -340,7 +338,7 @@ struct flowQC {
340338
}
341339
for (int iQvecDet = 0; iQvecDet < qVecDetectors::kNqVecDetectors; iQvecDet++) {
342340
hPsiComp[iQvecDet]->Fill(centrality, vec_Qpsi[methods::kEP][iQvecDet] - vec_Qpsi[methods::kQvec][iQvecDet]);
343-
hCosPsiComp[iQvecDet]->Fill(centrality, std::cos(2 * (vec_Qpsi[methods::kEP][iQvecDet] - vec_Qpsi[methods::kQvec][iQvecDet])));
341+
hCosPsiComp[iQvecDet]->Fill(centrality, std::cos(cfgHarmonic.value * (vec_Qpsi[methods::kEP][iQvecDet] - vec_Qpsi[methods::kQvec][iQvecDet])));
344342
}
345343
}
346344
};

0 commit comments

Comments
 (0)