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+
5048using namespace o2 ;
5149using namespace o2 ::framework;
5250using 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