Skip to content

Commit f4f6ba8

Browse files
authored
[PWGDQ] Add processes for dilepton flow analyses (#987)
* add process functions for dilepton flow analyses * small changes * add event mixing process, fix histo title, process_switch * fix enable option process * change the place of R computation and fill histos * fixes and suggestions from Ionut * remove column not needed
1 parent f3c56d9 commit f4f6ba8

6 files changed

Lines changed: 289 additions & 54 deletions

File tree

PWGDQ/Core/HistogramsLibrary.h

Lines changed: 54 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -82,24 +82,48 @@ void o2::aod::dqhistograms::DefineHistograms(HistogramManager* hm, const char* h
8282
hm->AddHistogram(histClass, "MCImpPar_CentVZERO", "MC impact param vs CentVZERO", false, 50, 0.0, 100.0, VarManager::kCentVZERO, 20, 0.0, 20.0, VarManager::kMCEventImpParam);
8383
}
8484
if (subGroupStr.Contains("qvector")) {
85-
hm->AddHistogram(histClass, "Q2X0A", "Q2X0A ", false, 100, -1.0, 1.0, VarManager::kQ2X0A);
86-
hm->AddHistogram(histClass, "Q2Y0A", "Q2Y0A ", false, 100, -1.0, 1.0, VarManager::kQ2Y0A);
87-
hm->AddHistogram(histClass, "Q2X0B", "Q2X0B ", false, 100, -1.0, 1.0, VarManager::kQ2X0B);
88-
hm->AddHistogram(histClass, "Q2Y0B", "Q2Y0B ", false, 100, -1.0, 1.0, VarManager::kQ2Y0B);
89-
hm->AddHistogram(histClass, "Q2X0C", "Q2X0C ", false, 100, -1.0, 1.0, VarManager::kQ2X0C);
90-
hm->AddHistogram(histClass, "Q2Y0C", "Q2Y0C ", false, 100, -1.0, 1.0, VarManager::kQ2Y0C);
91-
hm->AddHistogram(histClass, "Q2X0A_VtxZ", "Q2X0A vs VtxZ", true, 60, -15.0, 15.0, VarManager::kVtxZ, 100, -1.0, 1.0, VarManager::kQ2X0A);
92-
hm->AddHistogram(histClass, "Q2Y0A_VtxZ", "Q2Y0A vs VtxZ", true, 60, -15.0, 15.0, VarManager::kVtxZ, 100, -1.0, 1.0, VarManager::kQ2Y0A);
93-
hm->AddHistogram(histClass, "Q2X0B_VtxZ", "Q2X0B vs VtxZ", true, 60, -15.0, 15.0, VarManager::kVtxZ, 100, -1.0, 1.0, VarManager::kQ2X0B);
94-
hm->AddHistogram(histClass, "Q2Y0B_VtxZ", "Q2Y0B vs VtxZ", true, 60, -15.0, 15.0, VarManager::kVtxZ, 100, -1.0, 1.0, VarManager::kQ2Y0B);
95-
hm->AddHistogram(histClass, "Q2X0C_VtxZ", "Q2X0C vs VtxZ", true, 60, -15.0, 15.0, VarManager::kVtxZ, 100, -1.0, 1.0, VarManager::kQ2X0C);
96-
hm->AddHistogram(histClass, "Q2Y0C_VtxZ", "Q2Y0C vs VtxZ", true, 60, -15.0, 15.0, VarManager::kVtxZ, 100, -1.0, 1.0, VarManager::kQ2Y0C);
97-
hm->AddHistogram(histClass, "Q2X0A_Cent", "Q2X0A vs Cent", true, 90, 0.0, 90.0, VarManager::kCentVZERO, 100, -1.0, 1.0, VarManager::kQ2X0A);
98-
hm->AddHistogram(histClass, "Q2Y0A_Cent", "Q2Y0A vs Cent", true, 90, 0.0, 90.0, VarManager::kCentVZERO, 100, -1.0, 1.0, VarManager::kQ2Y0A);
99-
hm->AddHistogram(histClass, "Q2X0B_Cent", "Q2X0B vs Cent", true, 90, 0.0, 90.0, VarManager::kCentVZERO, 100, -1.0, 1.0, VarManager::kQ2X0B);
100-
hm->AddHistogram(histClass, "Q2Y0B_Cent", "Q2Y0B vs Cent", true, 90, 0.0, 90.0, VarManager::kCentVZERO, 100, -1.0, 1.0, VarManager::kQ2Y0B);
101-
hm->AddHistogram(histClass, "Q2X0C_Cent", "Q2X0C vs Cent", true, 90, 0.0, 90.0, VarManager::kCentVZERO, 100, -1.0, 1.0, VarManager::kQ2X0C);
102-
hm->AddHistogram(histClass, "Q2Y0C_Cent", "Q2Y0C vs Cent", true, 90, 0.0, 90.0, VarManager::kCentVZERO, 100, -1.0, 1.0, VarManager::kQ2Y0C);
85+
hm->AddHistogram(histClass, "Q2X0A", "Q_{2,x}^{A} ", false, 100, -1.0, 1.0, VarManager::kQ2X0A);
86+
hm->AddHistogram(histClass, "Q2Y0A", "Q_{2,y}^{A} ", false, 100, -1.0, 1.0, VarManager::kQ2Y0A);
87+
hm->AddHistogram(histClass, "Q2X0B", "Q_{2,x}^{B} ", false, 100, -1.0, 1.0, VarManager::kQ2X0B);
88+
hm->AddHistogram(histClass, "Q2Y0B", "Q_{2,y}^{B} ", false, 100, -1.0, 1.0, VarManager::kQ2Y0B);
89+
hm->AddHistogram(histClass, "Q2X0C", "Q_{2,x}^{C} ", false, 100, -1.0, 1.0, VarManager::kQ2X0C);
90+
hm->AddHistogram(histClass, "Q2Y0C", "Q_{2,y}^{C} ", false, 100, -1.0, 1.0, VarManager::kQ2Y0C);
91+
hm->AddHistogram(histClass, "Q2X0A_VtxZ", "Q_{2,x}^{A} vs z_{vtx}", true, 60, -15.0, 15.0, VarManager::kVtxZ, 100, -1.0, 1.0, VarManager::kQ2X0A);
92+
hm->AddHistogram(histClass, "Q2Y0A_VtxZ", "Q_{2,y}^{A} vs z_{vtx}", true, 60, -15.0, 15.0, VarManager::kVtxZ, 100, -1.0, 1.0, VarManager::kQ2Y0A);
93+
hm->AddHistogram(histClass, "Q2X0B_VtxZ", "Q_{2,x}^{B} vs z_{vtx}", true, 60, -15.0, 15.0, VarManager::kVtxZ, 100, -1.0, 1.0, VarManager::kQ2X0B);
94+
hm->AddHistogram(histClass, "Q2Y0B_VtxZ", "Q_{2,y}^{B} vs z_{vtx}", true, 60, -15.0, 15.0, VarManager::kVtxZ, 100, -1.0, 1.0, VarManager::kQ2Y0B);
95+
hm->AddHistogram(histClass, "Q2X0C_VtxZ", "Q_{2,x}^{C} vs z_{vtx}", true, 60, -15.0, 15.0, VarManager::kVtxZ, 100, -1.0, 1.0, VarManager::kQ2X0C);
96+
hm->AddHistogram(histClass, "Q2Y0C_VtxZ", "Q_{2,y}^{C} vs z_{vtx}", true, 60, -15.0, 15.0, VarManager::kVtxZ, 100, -1.0, 1.0, VarManager::kQ2Y0C);
97+
hm->AddHistogram(histClass, "Q2X0A_Cent", "Q_{2,x}^{A} vs Cent", true, 90, 0.0, 90.0, VarManager::kCentVZERO, 100, -1.0, 1.0, VarManager::kQ2X0A);
98+
hm->AddHistogram(histClass, "Q2Y0A_Cent", "Q_{2,y}^{A} vs Cent", true, 90, 0.0, 90.0, VarManager::kCentVZERO, 100, -1.0, 1.0, VarManager::kQ2Y0A);
99+
hm->AddHistogram(histClass, "Q2X0B_Cent", "Q_{2,x}^{B} vs Cent", true, 90, 0.0, 90.0, VarManager::kCentVZERO, 100, -1.0, 1.0, VarManager::kQ2X0B);
100+
hm->AddHistogram(histClass, "Q2Y0B_Cent", "Q_{2,y}^{B} vs Cent", true, 90, 0.0, 90.0, VarManager::kCentVZERO, 100, -1.0, 1.0, VarManager::kQ2Y0B);
101+
hm->AddHistogram(histClass, "Q2X0C_Cent", "Q_{2,x}^{C} vs Cent", true, 90, 0.0, 90.0, VarManager::kCentVZERO, 100, -1.0, 1.0, VarManager::kQ2X0C);
102+
hm->AddHistogram(histClass, "Q2Y0C_Cent", "Q_{2,y}^{C} vs Cent", true, 90, 0.0, 90.0, VarManager::kCentVZERO, 100, -1.0, 1.0, VarManager::kQ2Y0C);
103+
hm->AddHistogram(histClass, "Q3X0A", "Q_{3,x}^{A} ", false, 100, -1.0, 1.0, VarManager::kQ3X0A);
104+
hm->AddHistogram(histClass, "Q3Y0A", "Q_{3,y}^{A} ", false, 100, -1.0, 1.0, VarManager::kQ3Y0A);
105+
hm->AddHistogram(histClass, "Q3X0B", "Q_{3,x}^{B} ", false, 100, -1.0, 1.0, VarManager::kQ3X0B);
106+
hm->AddHistogram(histClass, "Q3Y0B", "Q_{3,y}^{B} ", false, 100, -1.0, 1.0, VarManager::kQ3Y0B);
107+
hm->AddHistogram(histClass, "Q3X0C", "Q_{3,x}^{C} ", false, 100, -1.0, 1.0, VarManager::kQ3X0C);
108+
hm->AddHistogram(histClass, "Q3Y0C", "Q_{3,y}^{C} ", false, 100, -1.0, 1.0, VarManager::kQ3Y0C);
109+
hm->AddHistogram(histClass, "Q3X0A_VtxZ", "Q_{3,x}^{A} vs z_{vtx}", true, 60, -15.0, 15.0, VarManager::kVtxZ, 100, -1.0, 1.0, VarManager::kQ3X0A);
110+
hm->AddHistogram(histClass, "Q3Y0A_VtxZ", "Q_{3,y}^{A} vs z_{vtx}", true, 60, -15.0, 15.0, VarManager::kVtxZ, 100, -1.0, 1.0, VarManager::kQ3Y0A);
111+
hm->AddHistogram(histClass, "Q3X0B_VtxZ", "Q_{3,x}^{B} vs z_{vtx}", true, 60, -15.0, 15.0, VarManager::kVtxZ, 100, -1.0, 1.0, VarManager::kQ3X0B);
112+
hm->AddHistogram(histClass, "Q3Y0B_VtxZ", "Q_{3,y}^{B} vs z_{vtx}", true, 60, -15.0, 15.0, VarManager::kVtxZ, 100, -1.0, 1.0, VarManager::kQ3Y0B);
113+
hm->AddHistogram(histClass, "Q3X0C_VtxZ", "Q_{3,x}^{C} vs z_{vtx}", true, 60, -15.0, 15.0, VarManager::kVtxZ, 100, -1.0, 1.0, VarManager::kQ3X0C);
114+
hm->AddHistogram(histClass, "Q3Y0C_VtxZ", "Q_{3,y}^{C} vs z_{vtx}", true, 60, -15.0, 15.0, VarManager::kVtxZ, 100, -1.0, 1.0, VarManager::kQ3Y0C);
115+
hm->AddHistogram(histClass, "Q3X0A_Cent", "Q_{3,x}^{A} vs Cent", true, 90, 0.0, 90.0, VarManager::kCentVZERO, 100, -1.0, 1.0, VarManager::kQ3X0A);
116+
hm->AddHistogram(histClass, "Q3Y0A_Cent", "Q_{3,y}^{A} vs Cent", true, 90, 0.0, 90.0, VarManager::kCentVZERO, 100, -1.0, 1.0, VarManager::kQ3Y0A);
117+
hm->AddHistogram(histClass, "Q3X0B_Cent", "Q_{3,x}^{B} vs Cent", true, 90, 0.0, 90.0, VarManager::kCentVZERO, 100, -1.0, 1.0, VarManager::kQ3X0B);
118+
hm->AddHistogram(histClass, "Q3Y0B_Cent", "Q_{3,y}^{B} vs Cent", true, 90, 0.0, 90.0, VarManager::kCentVZERO, 100, -1.0, 1.0, VarManager::kQ3Y0B);
119+
hm->AddHistogram(histClass, "Q3X0C_Cent", "Q_{3,x}^{C} vs Cent", true, 90, 0.0, 90.0, VarManager::kCentVZERO, 100, -1.0, 1.0, VarManager::kQ3X0C);
120+
hm->AddHistogram(histClass, "Q3Y0C_Cent", "Q_{3,y}^{C} vs Cent", true, 90, 0.0, 90.0, VarManager::kCentVZERO, 100, -1.0, 1.0, VarManager::kQ3Y0C);
121+
}
122+
if (subGroupStr.Contains("res")) {
123+
hm->AddHistogram(histClass, "R2SP", "", true, 9, 0.0, 90.0, VarManager::kCentVZERO, 100, -1.0, 1.0, VarManager::kR2SP);
124+
hm->AddHistogram(histClass, "R3SP", "", true, 9, 0.0, 90.0, VarManager::kCentVZERO, 100, -1.0, 1.0, VarManager::kR3SP);
125+
hm->AddHistogram(histClass, "R2EP", "", true, 9, 0.0, 90.0, VarManager::kCentVZERO, 100, -1.0, 1.0, VarManager::kR2EP);
126+
hm->AddHistogram(histClass, "R3EP", "", true, 9, 0.0, 90.0, VarManager::kCentVZERO, 100, -1.0, 1.0, VarManager::kR3EP);
103127
}
104128
}
105129

@@ -214,6 +238,12 @@ void o2::aod::dqhistograms::DefineHistograms(HistogramManager* hm, const char* h
214238
hm->AddHistogram(histClass, "VtxingProcCode", "", false, 10, 0.0, 10.0, VarManager::kVertexingProcCode);
215239
hm->AddHistogram(histClass, "VtxingChi2PCA", "", false, 100, 0.0, 10.0, VarManager::kVertexingChi2PCA);
216240
}
241+
if (subGroupStr.Contains("flow-barrel")) {
242+
hm->AddHistogram(histClass, "Mass_u2q2", "u_{2}Q_{2}^{A} vs m", true, 125, 0.0, 5.0, VarManager::kMass, 100, -1.0, 1.0, VarManager::kU2Q2);
243+
hm->AddHistogram(histClass, "Mass_u3q3", "u_{3}Q_{3}^{A} vs m", true, 125, 0.0, 5.0, VarManager::kMass, 100, -1.0, 1.0, VarManager::kU3Q3);
244+
hm->AddHistogram(histClass, "Mass_cos2DeltaPhi", "cos 2(#varphi-#Psi_{2}^{A}) vs m", true, 125, 0.0, 5.0, VarManager::kMass, 100, -1.0, 1.0, VarManager::kCos2DeltaPhi);
245+
hm->AddHistogram(histClass, "Mass_cos3DeltaPhi", "cos 3(#varphi-#Psi_{3}^{A}) vs m", true, 125, 0.0, 5.0, VarManager::kMass, 100, -1.0, 1.0, VarManager::kCos3DeltaPhi);
246+
}
217247
} else if (groupStr.Contains("pair_dimuon")) {
218248
hm->AddHistogram(histClass, "Mass", "", false, 750, 0.0, 15.0, VarManager::kMass);
219249
hm->AddHistogram(histClass, "Pt", "", false, 120, 0.0, 30.0, VarManager::kPt);
@@ -237,6 +267,12 @@ void o2::aod::dqhistograms::DefineHistograms(HistogramManager* hm, const char* h
237267
hm->AddHistogram(histClass, "Pt_Cent", "", false, 120, 0.0, 30.0, VarManager::kPt, 100, 0., 100., VarManager::kCentVZERO);
238268
hm->AddHistogram(histClass, "Rapidity_Cent", "", false, 200, 2.5, 4.0, VarManager::kRap, 100, 0., 100., VarManager::kCentVZERO);
239269
}
270+
if (subGroupStr.Contains("flow-dimuon")) {
271+
hm->AddHistogram(histClass, "Mass_u2q2", "u_{2}Q_{2}^{A} vs m", true, 125, 0.0, 5.0, VarManager::kMass, 100, -1.0, 1.0, VarManager::kU2Q2);
272+
hm->AddHistogram(histClass, "Mass_u3q3", "u_{3}Q_{3}^{A} vs m", true, 125, 0.0, 5.0, VarManager::kMass, 100, -1.0, 1.0, VarManager::kU3Q3);
273+
hm->AddHistogram(histClass, "Mass_cos2DeltaPhi", "cos 2(#varphi-#Psi_{2}^{A}) vs m", true, 125, 0.0, 5.0, VarManager::kMass, 100, -1.0, 1.0, VarManager::kCos2DeltaPhi);
274+
hm->AddHistogram(histClass, "Mass_cos3DeltaPhi", "cos 3(#varphi-#Psi_{3}^{A}) vs m", true, 125, 0.0, 5.0, VarManager::kMass, 100, -1.0, 1.0, VarManager::kCos3DeltaPhi);
275+
}
240276
} else if (groupStr.Contains("pair_electronmuon")) {
241277
hm->AddHistogram(histClass, "Mass", "", false, 750, 0.0, 30.0, VarManager::kMass);
242278
hm->AddHistogram(histClass, "Pt", "", false, 120, 0.0, 30.0, VarManager::kPt);

PWGDQ/Core/VarManager.cxx

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,34 @@ void VarManager::SetDefaultVarNames()
342342
fgVariableUnits[kMultB] = "";
343343
fgVariableNames[kMultC] = "N_{ch}^{C} ";
344344
fgVariableUnits[kMultC] = "";
345+
fgVariableNames[kQ3X0A] = "Q_{3,x}^{A} ";
346+
fgVariableUnits[kQ3X0A] = "";
347+
fgVariableNames[kQ3Y0A] = "Q_{3,y}^{A} ";
348+
fgVariableUnits[kQ3Y0A] = "";
349+
fgVariableNames[kQ3X0B] = "Q_{3,x}^{B} ";
350+
fgVariableUnits[kQ3X0B] = "";
351+
fgVariableNames[kQ3Y0B] = "Q_{3,y}^{B} ";
352+
fgVariableUnits[kQ3Y0B] = "";
353+
fgVariableNames[kQ3X0C] = "Q_{3,x}^{C} ";
354+
fgVariableUnits[kQ3X0C] = "";
355+
fgVariableNames[kQ3Y0C] = "Q_{3,y}^{C} ";
356+
fgVariableUnits[kQ3Y0C] = "";
357+
fgVariableNames[kU2Q2] = "u_{2}Q_{2}^{A} ";
358+
fgVariableUnits[kU2Q2] = "";
359+
fgVariableNames[kU3Q3] = "u_{3}Q_{3}^{A} ";
360+
fgVariableUnits[kU3Q3] = "";
361+
fgVariableNames[kCos2DeltaPhi] = "cos 2(#varphi-#Psi_{2}^{A}) ";
362+
fgVariableUnits[kCos2DeltaPhi] = "";
363+
fgVariableNames[kCos3DeltaPhi] = "cos 3(#varphi-#Psi_{3}^{A}) ";
364+
fgVariableUnits[kCos3DeltaPhi] = "";
365+
fgVariableNames[kR2SP] = "R_{2}^{SP} ";
366+
fgVariableUnits[kR2SP] = "";
367+
fgVariableNames[kR3SP] = "R_{3}^{SP} ";
368+
fgVariableUnits[kR3SP] = "";
369+
fgVariableNames[kR2EP] = "R_{2}^{EP} ";
370+
fgVariableUnits[kR2EP] = "";
371+
fgVariableNames[kR3EP] = "R_{3}^{EP} ";
372+
fgVariableUnits[kR3EP] = "";
345373
fgVariableNames[kPairMass] = "mass";
346374
fgVariableUnits[kPairMass] = "GeV/c2";
347375
fgVariableNames[kPairPt] = "p_{T}";

PWGDQ/Core/VarManager.h

Lines changed: 106 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ class VarManager : public TObject
6868
ReducedEventVtxCov = BIT(6),
6969
CollisionMC = BIT(7),
7070
ReducedEventMC = BIT(8),
71+
ReducedEventQvector = BIT(9),
7172
Track = BIT(0),
7273
TrackCov = BIT(1),
7374
TrackExtra = BIT(2),
@@ -85,8 +86,7 @@ class VarManager : public TObject
8586
ReducedMuonExtra = BIT(14),
8687
ReducedMuonCov = BIT(15),
8788
ParticleMC = BIT(16),
88-
Pair = BIT(17), // TODO: check whether we really need the Pair member here
89-
ReducedEventQvector = BIT(18)
89+
Pair = BIT(17) // TODO: check whether we really need the Pair member here
9090
};
9191

9292
enum PairCandidateType {
@@ -150,6 +150,16 @@ class VarManager : public TObject
150150
kMultA, // Multiplicity of the sub-event A
151151
kMultB,
152152
kMultC,
153+
kQ3X0A, // q-vector (e.g. from TPC) with x component (harmonic 2 and power 0), sub-event A
154+
kQ3Y0A, // q-vector (e.g. from TPC) with y component (harmonic 2 and power 0), sub-event A
155+
kQ3X0B,
156+
kQ3Y0B,
157+
kQ3X0C,
158+
kQ3Y0C,
159+
kR2SP,
160+
kR3SP,
161+
kR2EP,
162+
kR3EP,
153163
kNEventWiseVariables,
154164

155165
// Basic track/muon/pair wise variables
@@ -284,6 +294,10 @@ class VarManager : public TObject
284294
kImpParXYK,
285295
kDCATrackProd,
286296
kDCATrackVtxProd,
297+
kU2Q2,
298+
kU3Q3,
299+
kCos2DeltaPhi,
300+
kCos3DeltaPhi,
287301

288302
// Candidate-track correlation variables
289303
kPairMass,
@@ -370,6 +384,11 @@ class VarManager : public TObject
370384
fgFitterTwoProngFwd.setMinRelChi2Change(minRelChi2Change);
371385
fgFitterTwoProngFwd.setUseAbsDCA(useAbsDCA);
372386
}
387+
static auto getEventPlane(int harm, float qnxa, float qnya)
388+
{
389+
// Compute event plane angle from qn vector components for the sub-event A
390+
return (1.0 / harm) * TMath::ATan(qnya / qnxa);
391+
};
373392

374393
template <uint32_t fillMap, typename T>
375394
static void FillEvent(T const& event, float* values = nullptr);
@@ -387,8 +406,10 @@ class VarManager : public TObject
387406
static void FillDileptonTrackVertexing(C const& collision, T1 const& lepton1, T1 const& lepton2, T1 const& track, float* values);
388407
template <typename T1, typename T2>
389408
static void FillDileptonHadron(T1 const& dilepton, T2 const& hadron, float* values = nullptr, float hadronMass = 0.0f);
390-
template <typename C, typename A1, typename A2, typename A3>
391-
static void FillQVectorFromGFW(C const& collision, A1 const& compA, A2 const& compB, A3 const& compC, float normA = 1.0, float normB = 1.0, float normC = 1.0, float* values = nullptr);
409+
template <typename C, typename A>
410+
static void FillQVectorFromGFW(C const& collision, A const& compA2, A const& compB2, A const& compC2, A const& compA3, A const& compB3, A const& compC3, float normA = 1.0, float normB = 1.0, float normC = 1.0, float* values = nullptr);
411+
template <int pairType, typename T1, typename T2>
412+
static void FillPairVn(T1 const& t1, T2 const& t2, float* values = nullptr);
392413

393414
public:
394415
VarManager();
@@ -564,6 +585,28 @@ void VarManager::FillEvent(T const& event, float* values)
564585
values[kVtxChi2] = event.chi2();
565586
}
566587

588+
if constexpr ((fillMap & ReducedEventQvector) > 0) {
589+
values[kQ2X0A] = event.q2x0a();
590+
values[kQ2Y0A] = event.q2y0a();
591+
values[kQ2X0B] = event.q2x0b();
592+
values[kQ2Y0B] = event.q2y0b();
593+
values[kQ2X0C] = event.q2x0c();
594+
values[kQ2Y0C] = event.q2y0c();
595+
values[kMultA] = event.multa();
596+
values[kMultB] = event.multb();
597+
values[kMultC] = event.multc();
598+
values[kQ3X0A] = event.q3x0a();
599+
values[kQ3Y0A] = event.q3y0a();
600+
values[kQ3X0B] = event.q3x0b();
601+
values[kQ3Y0B] = event.q3y0b();
602+
values[kQ3X0C] = event.q3x0c();
603+
values[kQ3Y0C] = event.q3y0c();
604+
values[kR2SP] = (event.q2x0b() * event.q2x0c() + event.q2y0b() * event.q2y0c());
605+
values[kR3SP] = (event.q3x0b() * event.q3x0c() + event.q3y0b() * event.q3y0c());
606+
values[kR2EP] = TMath::Cos(2 * (getEventPlane(2, event.q2x0b(), event.q2y0b()) - getEventPlane(2, event.q2x0c(), event.q2y0c())));
607+
values[kR3EP] = TMath::Cos(3 * (getEventPlane(3, event.q3x0b(), event.q3y0b()) - getEventPlane(3, event.q3x0c(), event.q3y0c())));
608+
}
609+
567610
if constexpr ((fillMap & CollisionMC) > 0) {
568611
values[kMCEventGeneratorId] = event.generatorsID();
569612
values[kMCVtxX] = event.posX();
@@ -1220,23 +1263,73 @@ void VarManager::FillDileptonTrackVertexing(C const& collision, T1 const& lepton
12201263
}
12211264
}
12221265

1223-
template <typename C, typename A1, typename A2, typename A3>
1224-
void VarManager::FillQVectorFromGFW(C const& collision, A1 const& compA, A2 const& compB, A3 const& compC, float normA, float normB, float normC, float* values)
1266+
template <typename C, typename A>
1267+
void VarManager::FillQVectorFromGFW(C const& collision, A const& compA2, A const& compB2, A const& compC2, A const& compA3, A const& compB3, A const& compC3, float normA, float normB, float normC, float* values)
12251268
{
12261269
if (!values) {
12271270
values = fgValues;
12281271
}
12291272

1230-
// Fill Q vector from generic flow framework for different eta gap A, B, C
1231-
values[kQ2X0A] = compA.Re() / normA;
1232-
values[kQ2Y0A] = compA.Im() / normA;
1233-
values[kQ2X0B] = compB.Re() / normB;
1234-
values[kQ2Y0B] = compB.Im() / normB;
1235-
values[kQ2X0C] = compC.Re() / normC;
1236-
values[kQ2Y0C] = compC.Im() / normC;
1273+
// Fill Qn vectors from generic flow framework for different eta gap A, B, C (n=2,3)
1274+
values[kQ2X0A] = compA2.Re() / normA;
1275+
values[kQ2Y0A] = compA2.Im() / normA;
1276+
values[kQ2X0B] = compB2.Re() / normB;
1277+
values[kQ2Y0B] = compB2.Im() / normB;
1278+
values[kQ2X0C] = compC2.Re() / normC;
1279+
values[kQ2Y0C] = compC2.Im() / normC;
1280+
values[kQ3X0A] = compA3.Re() / normA;
1281+
values[kQ3Y0A] = compA3.Im() / normA;
1282+
values[kQ3X0B] = compB3.Re() / normB;
1283+
values[kQ3Y0B] = compB3.Im() / normB;
1284+
values[kQ3X0C] = compC3.Re() / normC;
1285+
values[kQ3Y0C] = compC3.Im() / normC;
12371286
values[kMultA] = normA;
12381287
values[kMultB] = normB;
12391288
values[kMultC] = normC;
1289+
1290+
// TODO: provide different computations for R
1291+
// Compute the R factor using the 2 sub-events technique for second and third harmonic
1292+
auto Psi2B = getEventPlane(2, values[kQ2X0B], values[kQ2Y0B]);
1293+
auto Psi3B = getEventPlane(3, values[kQ3X0B], values[kQ3Y0B]);
1294+
auto Psi2C = getEventPlane(2, values[kQ2X0C], values[kQ2Y0C]);
1295+
auto Psi3C = getEventPlane(3, values[kQ3X0C], values[kQ3Y0C]);
1296+
values[kR2SP] = (values[kQ2X0B] * values[kQ2X0C] + values[kQ2Y0B] * values[kQ2Y0C]);
1297+
values[kR3SP] = (values[kQ3X0B] * values[kQ3X0C] + values[kQ3Y0B] * values[kQ3Y0C]);
1298+
values[kR2EP] = TMath::Cos(2 * (Psi2B - Psi2C));
1299+
values[kR3EP] = TMath::Cos(3 * (Psi3B - Psi3C));
1300+
}
1301+
1302+
template <int pairType, typename T1, typename T2>
1303+
void VarManager::FillPairVn(T1 const& t1, T2 const& t2, float* values)
1304+
{
1305+
1306+
if (!values) {
1307+
values = fgValues;
1308+
}
1309+
1310+
float m1 = fgkElectronMass;
1311+
float m2 = fgkElectronMass;
1312+
if constexpr (pairType == kJpsiToMuMu) {
1313+
m1 = fgkMuonMass;
1314+
m2 = fgkMuonMass;
1315+
}
1316+
1317+
if constexpr (pairType == kElectronMuon) {
1318+
m2 = fgkMuonMass;
1319+
}
1320+
1321+
// Fill dilepton information
1322+
ROOT::Math::PtEtaPhiMVector v1(t1.pt(), t1.eta(), t1.phi(), m1);
1323+
ROOT::Math::PtEtaPhiMVector v2(t2.pt(), t2.eta(), t2.phi(), m2);
1324+
ROOT::Math::PtEtaPhiMVector v12 = v1 + v2;
1325+
1326+
// TODO: provide different computations for vn
1327+
// Compute the scalar product UQ using Q-vector from A, for second and third harmonic
1328+
// Dilepton vn could be accessible after dividing this product with the R factor
1329+
values[kU2Q2] = values[kQ2X0A] * std::cos(2 * v12.Phi()) + values[kQ2Y0A] * std::sin(2 * v12.Phi());
1330+
values[kU3Q3] = values[kQ3X0A] * std::cos(3 * v12.Phi()) + values[kQ3Y0A] * std::sin(3 * v12.Phi());
1331+
values[kCos2DeltaPhi] = std::cos(2 * (v12.Phi() - getEventPlane(2, values[kQ2X0A], values[kQ2Y0A])));
1332+
values[kCos3DeltaPhi] = std::cos(3 * (v12.Phi() - getEventPlane(3, values[kQ3X0A], values[kQ3Y0A])));
12401333
}
12411334

12421335
template <typename T1, typename T2>

0 commit comments

Comments
 (0)