Skip to content

Commit b91750e

Browse files
authored
[PWGDQ] Add more features for flow analysis using Event-Mixing (#8045)
* Add more axes for differential studies * Implement 3-subevent calculation for resolution factor
1 parent 8fdaccc commit b91750e

2 files changed

Lines changed: 128 additions & 20 deletions

File tree

PWGDQ/Core/HistogramsLibrary.cxx

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -982,6 +982,27 @@ void o2::aod::dqhistograms::DefineHistograms(HistogramManager* hm, const char* h
982982
hm->AddHistogram(histClass, "U2Q2_CentFT0C_ev1", "mass vs. centrality vs. U2Q2_event1", false, 125, 0.0, 5.0, VarManager::kMass, 9, 0.0, 90.0, VarManager::kCentFT0C, 100, -10.0, 10.0, VarManager::kU2Q2Ev1);
983983
hm->AddHistogram(histClass, "U2Q2_CentFT0C_ev2", "mass vs. centrality vs. U2Q2_event2", false, 125, 0.0, 5.0, VarManager::kMass, 9, 0.0, 90.0, VarManager::kCentFT0C, 100, -10.0, 10.0, VarManager::kU2Q2Ev2);
984984
}
985+
if (subGroupStr.Contains("metest")) {
986+
int var1[5] = {VarManager::kMass, VarManager::kPt, VarManager::kCentFT0C, VarManager::kU2Q2Ev1, VarManager::kCos2DeltaPhiMu1};
987+
int var2[5] = {VarManager::kMass, VarManager::kPt, VarManager::kCentFT0C, VarManager::kU2Q2Ev2, VarManager::kCos2DeltaPhiMu2};
988+
int bins[5] = {250, 60, 18, 100, 100};
989+
double minBins[5] = {0.0, 0.0, 0.0, -10., -1.0};
990+
double maxBins[5] = {5.0, 30.0, 90.0, 10., 1.0};
991+
hm->AddHistogram(histClass, "Mass_Pt_CentFT0C_U2Q2ev1_cos2DeltaPhiMu1", "", 5, var1, bins, minBins, maxBins, 0, -1, kTRUE);
992+
hm->AddHistogram(histClass, "Mass_Pt_CentFT0C_U2Q2ev2_cos2DeltaPhiMu2", "", 5, var2, bins, minBins, maxBins, 0, -1, kTRUE);
993+
hm->AddHistogram(histClass, "R2SPAB1_CentFT0C", "mass vs centrality vs. R2SPAB_event1", false, 250, 0.0, 5.0, VarManager::kMass, 18, 0.0, 90.0, VarManager::kCentFT0C, 100, -10.0, 10.0, VarManager::kTwoR2SP_AB1);
994+
hm->AddHistogram(histClass, "R2SPAB2_CentFT0C", "mass vs centrality vs. R2SPAB_event2", false, 250, 0.0, 5.0, VarManager::kMass, 18, 0.0, 90.0, VarManager::kCentFT0C, 100, -10.0, 10.0, VarManager::kTwoR2SP_AB2);
995+
hm->AddHistogram(histClass, "R2SPAC1_CentFT0C", "mass vs centrality vs. R2SPAC_event1", false, 250, 0.0, 5.0, VarManager::kMass, 18, 0.0, 90.0, VarManager::kCentFT0C, 100, -10.0, 10.0, VarManager::kTwoR2SP_AC1);
996+
hm->AddHistogram(histClass, "R2SPAC2_CentFT0C", "mass vs centrality vs. R2SPAC_event2", false, 250, 0.0, 5.0, VarManager::kMass, 18, 0.0, 90.0, VarManager::kCentFT0C, 100, -10.0, 10.0, VarManager::kTwoR2SP_AC2);
997+
hm->AddHistogram(histClass, "R2SPBC1_CentFT0C", "mass vs centrality vs. R2SPBC_event1", false, 250, 0.0, 5.0, VarManager::kMass, 18, 0.0, 90.0, VarManager::kCentFT0C, 100, -10.0, 10.0, VarManager::kTwoR2SP_BC1);
998+
hm->AddHistogram(histClass, "R2SPBC2_CentFT0C", "mass vs centrality vs. R2SPBC_event2", false, 250, 0.0, 5.0, VarManager::kMass, 18, 0.0, 90.0, VarManager::kCentFT0C, 100, -10.0, 10.0, VarManager::kTwoR2SP_BC2);
999+
hm->AddHistogram(histClass, "R2EPAB1_CentFT0C", "mass vs centrality vs. R2EPAB_event1", false, 250, 0.0, 5.0, VarManager::kMass, 18, 0.0, 90.0, VarManager::kCentFT0C, 100, -10.0, 10.0, VarManager::kTwoR2EP_AB1);
1000+
hm->AddHistogram(histClass, "R2EPAB2_CentFT0C", "mass vs centrality vs. R2EPAB_event2", false, 250, 0.0, 5.0, VarManager::kMass, 18, 0.0, 90.0, VarManager::kCentFT0C, 100, -10.0, 10.0, VarManager::kTwoR2EP_AB2);
1001+
hm->AddHistogram(histClass, "R2EPAC1_CentFT0C", "mass vs centrality vs. R2EPAC_event1", false, 250, 0.0, 5.0, VarManager::kMass, 18, 0.0, 90.0, VarManager::kCentFT0C, 100, -10.0, 10.0, VarManager::kTwoR2EP_AC1);
1002+
hm->AddHistogram(histClass, "R2EPAC2_CentFT0C", "mass vs centrality vs. R2EPAC_event2", false, 250, 0.0, 5.0, VarManager::kMass, 18, 0.0, 90.0, VarManager::kCentFT0C, 100, -10.0, 10.0, VarManager::kTwoR2EP_AC2);
1003+
hm->AddHistogram(histClass, "R2EPBC1_CentFT0C", "mass vs centrality vs. R2EPBC_event1", false, 250, 0.0, 5.0, VarManager::kMass, 18, 0.0, 90.0, VarManager::kCentFT0C, 100, -10.0, 10.0, VarManager::kTwoR2EP_BC1);
1004+
hm->AddHistogram(histClass, "R2EPBC2_CentFT0C", "mass vs centrality vs. R2EPBC_event2", false, 250, 0.0, 5.0, VarManager::kMass, 18, 0.0, 90.0, VarManager::kCentFT0C, 100, -10.0, 10.0, VarManager::kTwoR2EP_BC2);
1005+
}
9851006
if (subGroupStr.Contains("dimuon-polarization-he")) {
9861007
int varspTHE[4] = {VarManager::kMass, VarManager::kPt, VarManager::kCosThetaHE, VarManager::kPhiHE};
9871008
int varsFT0CCentHE[4] = {VarManager::kMass, VarManager::kCentFT0C, VarManager::kCosThetaHE, VarManager::kPhiHE};

PWGDQ/Core/VarManager.h

Lines changed: 107 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -368,10 +368,22 @@ class VarManager : public TObject
368368
kQ2Y0A2,
369369
kU2Q2Ev1,
370370
kU2Q2Ev2,
371-
kTwoR2SP1, // Scalar product resolution of event1 for ME technique
372-
kTwoR2SP2, // Scalar product resolution of event2 for ME technique
373-
kTwoR2EP1, // Event plane resolution of event2 for ME technique
374-
kTwoR2EP2, // Event plane resolution of event2 for ME technique
371+
kTwoR2SP1, // Scalar product resolution of event1 for ME technique
372+
kTwoR2SP2, // Scalar product resolution of event2 for ME technique
373+
kTwoR2EP1, // Event plane resolution of event2 for ME technique
374+
kTwoR2EP2, // Event plane resolution of event2 for ME technique
375+
kTwoR2SP_AB1, // Scalar product resolution of event1 for ME technique
376+
kTwoR2SP_AB2, // Scalar product resolution of event2 for ME technique
377+
kTwoR2SP_AC1, // Scalar product resolution of event1 for ME technique
378+
kTwoR2SP_AC2, // Scalar product resolution of event2 for ME technique
379+
kTwoR2SP_BC1, // Scalar product resolution of event1 for ME technique
380+
kTwoR2SP_BC2, // Scalar product resolution of event2 for ME technique
381+
kTwoR2EP_AB1, // Event plane resolution of event2 for ME technique
382+
kTwoR2EP_AB2, // Event plane resolution of event2 for ME technique
383+
kTwoR2EP_AC1, // Event plane resolution of event2 for ME technique
384+
kTwoR2EP_AC2, // Event plane resolution of event2 for ME technique
385+
kTwoR2EP_BC1, // Event plane resolution of event2 for ME technique
386+
kTwoR2EP_BC2, // Event plane resolution of event2 for ME technique
375387

376388
// Basic track/muon/pair wise variables
377389
kX,
@@ -1779,21 +1791,78 @@ void VarManager::FillTwoMixEvents(T1 const& ev1, T1 const& ev2, T2 const& /*trac
17791791
for (auto& track2 : tracks2) { Track2Filter = uint32_t(track2.isMuonSelected());}
17801792
*/
17811793
if constexpr ((fillMap & ReducedEventQvector) > 0) {
1794+
// Tobe used for the calculation of u1q1 and u2q2
1795+
values[kQ2X0A1] = ev1.q2x0a();
1796+
values[kQ2X0A2] = ev2.q2x0a();
1797+
values[kQ2Y0A1] = ev1.q2y0a();
1798+
values[kQ2Y0A2] = ev2.q2y0a();
1799+
17821800
values[kTwoR2SP1] = (ev1.q2x0b() * ev1.q2x0c() + ev1.q2y0b() * ev1.q2y0c());
17831801
values[kTwoR2SP2] = (ev2.q2x0b() * ev2.q2x0c() + ev2.q2y0b() * ev2.q2y0c());
1802+
values[kTwoR2SP_AB1] = (ev1.q2x0a() * ev1.q2x0b() + ev1.q2y0a() * ev1.q2y0b());
1803+
values[kTwoR2SP_AB2] = (ev2.q2x0a() * ev2.q2x0b() + ev2.q2y0a() * ev2.q2y0b());
1804+
values[kTwoR2SP_AC1] = (ev1.q2x0a() * ev1.q2x0c() + ev1.q2y0a() * ev1.q2y0c());
1805+
values[kTwoR2SP_AC2] = (ev2.q2x0a() * ev2.q2x0c() + ev2.q2y0a() * ev2.q2y0c());
1806+
values[kTwoR2SP_BC1] = (ev1.q2x0b() * ev1.q2x0c() + ev1.q2y0b() * ev1.q2y0c());
1807+
values[kTwoR2SP_BC2] = (ev2.q2x0b() * ev2.q2x0c() + ev2.q2y0b() * ev2.q2y0c());
17841808

1809+
if (ev1.q2y0a() * ev1.q2y0b() != 0.0) {
1810+
values[kTwoR2EP_AB1] = TMath::Cos(2 * (getEventPlane(2, ev1.q2x0a(), ev1.q2y0a()) - getEventPlane(2, ev1.q2x0b(), ev1.q2y0b())));
1811+
}
1812+
if (ev2.q2y0a() * ev2.q2y0b() != 0.0) {
1813+
values[kTwoR2EP_AB2] = TMath::Cos(2 * (getEventPlane(2, ev2.q2x0a(), ev2.q2y0a()) - getEventPlane(2, ev2.q2x0b(), ev2.q2y0b())));
1814+
}
1815+
if (ev1.q2y0a() * ev1.q2y0c() != 0.0) {
1816+
values[kTwoR2EP_AC1] = TMath::Cos(2 * (getEventPlane(2, ev1.q2x0a(), ev1.q2y0a()) - getEventPlane(2, ev1.q2x0c(), ev1.q2y0c())));
1817+
}
1818+
if (ev2.q2y0a() * ev2.q2y0c() != 0.0) {
1819+
values[kTwoR2EP_AC2] = TMath::Cos(2 * (getEventPlane(2, ev2.q2x0a(), ev2.q2y0a()) - getEventPlane(2, ev2.q2x0c(), ev2.q2y0c())));
1820+
}
17851821
if (ev1.q2y0b() * ev1.q2y0c() != 0.0) {
17861822
values[kTwoR2EP1] = TMath::Cos(2 * (getEventPlane(2, ev1.q2x0b(), ev1.q2y0b()) - getEventPlane(2, ev1.q2x0c(), ev1.q2y0c())));
1823+
values[kTwoR2EP_BC1] = TMath::Cos(2 * (getEventPlane(2, ev1.q2x0b(), ev1.q2y0b()) - getEventPlane(2, ev1.q2x0c(), ev1.q2y0c())));
17871824
}
1788-
17891825
if (ev2.q2y0b() * ev2.q2y0c() != 0.0) {
17901826
values[kTwoR2EP2] = TMath::Cos(2 * (getEventPlane(2, ev2.q2x0b(), ev2.q2y0b()) - getEventPlane(2, ev2.q2x0c(), ev2.q2y0c())));
1827+
values[kTwoR2EP_BC2] = TMath::Cos(2 * (getEventPlane(2, ev2.q2x0b(), ev2.q2y0b()) - getEventPlane(2, ev2.q2x0c(), ev2.q2y0c())));
17911828
}
1829+
}
1830+
if constexpr ((fillMap & CollisionQvect) > 0) {
17921831
// Tobe used for the calculation of u1q1 and u2q2
1793-
values[kQ2X0A1] = ev1.q2x0a();
1794-
values[kQ2X0A2] = ev2.q2x0a();
1795-
values[kQ2Y0A1] = ev1.q2y0a();
1796-
values[kQ2Y0A2] = ev2.q2y0a();
1832+
values[kQ2X0A1] = (ev1.qvecBPosRe() * ev1.nTrkBPos() + ev1.qvecBNegRe() * ev1.nTrkBNeg()) / (ev1.nTrkBPos() + ev1.nTrkBNeg());
1833+
values[kQ2X0A2] = (ev2.qvecBPosRe() * ev2.nTrkBPos() + ev2.qvecBNegRe() * ev2.nTrkBNeg()) / (ev2.nTrkBPos() + ev2.nTrkBNeg());
1834+
values[kQ2Y0A1] = (ev1.qvecBPosIm() * ev1.nTrkBPos() + ev1.qvecBNegIm() * ev1.nTrkBNeg()) / (ev1.nTrkBPos() + ev1.nTrkBNeg());
1835+
values[kQ2Y0A2] = (ev2.qvecBPosIm() * ev2.nTrkBPos() + ev2.qvecBNegIm() * ev2.nTrkBNeg()) / (ev2.nTrkBPos() + ev2.nTrkBNeg());
1836+
1837+
values[kTwoR2SP1] = (ev1.qvecFT0ARe() * ev1.qvecFT0CRe() + ev1.qvecFT0AIm() * ev1.qvecFT0CIm());
1838+
values[kTwoR2SP2] = (ev2.qvecFT0ARe() * ev2.qvecFT0CRe() + ev2.qvecFT0AIm() * ev2.qvecFT0CIm());
1839+
values[kTwoR2SP_AB1] = (values[kQ2X0A1] * ev1.qvecFT0ARe() + values[kQ2Y0A1] * ev1.qvecFT0AIm());
1840+
values[kTwoR2SP_AB2] = (values[kQ2X0A2] * ev2.qvecFT0ARe() + values[kQ2Y0A2] * ev2.qvecFT0AIm());
1841+
values[kTwoR2SP_AC1] = (values[kQ2X0A1] * ev1.qvecFT0CRe() + values[kQ2Y0A1] * ev1.qvecFT0CIm());
1842+
values[kTwoR2SP_AC2] = (values[kQ2X0A2] * ev2.qvecFT0CRe() + values[kQ2Y0A2] * ev2.qvecFT0CIm());
1843+
values[kTwoR2SP_BC1] = values[kTwoR2SP1];
1844+
values[kTwoR2SP_BC2] = values[kTwoR2SP2];
1845+
1846+
if (values[kQ2Y0A1] * ev1.qvecFT0AIm() != 0.0) {
1847+
values[kTwoR2EP_AB1] = TMath::Cos(2 * (getEventPlane(2, values[kQ2X0A1], values[kQ2Y0A1]) - getEventPlane(2, ev1.qvecFT0ARe(), ev1.qvecFT0AIm())));
1848+
}
1849+
if (values[kQ2Y0A2] * ev2.qvecFT0AIm() != 0.0) {
1850+
values[kTwoR2EP_AB2] = TMath::Cos(2 * (getEventPlane(2, values[kQ2X0A2], values[kQ2Y0A2]) - getEventPlane(2, ev2.qvecFT0ARe(), ev2.qvecFT0AIm())));
1851+
}
1852+
if (values[kQ2Y0A1] * ev1.qvecFT0CIm() != 0.0) {
1853+
values[kTwoR2EP_AC1] = TMath::Cos(2 * (getEventPlane(2, values[kQ2X0A1], values[kQ2Y0A1]) - getEventPlane(2, ev1.qvecFT0CRe(), ev1.qvecFT0CIm())));
1854+
}
1855+
if (values[kQ2Y0A2] * ev2.qvecFT0CIm() != 0.0) {
1856+
values[kTwoR2EP_AC2] = TMath::Cos(2 * (getEventPlane(2, values[kQ2X0A2], values[kQ2Y0A2]) - getEventPlane(2, ev2.qvecFT0CRe(), ev2.qvecFT0CIm())));
1857+
}
1858+
if (ev1.qvecFT0AIm() * ev1.qvecFT0CIm() != 0.0) {
1859+
values[kTwoR2EP1] = TMath::Cos(2 * (getEventPlane(2, ev1.qvecFT0ARe(), ev1.qvecFT0AIm()) - getEventPlane(2, ev1.qvecFT0CRe(), ev1.qvecFT0CIm())));
1860+
values[kTwoR2EP_BC1] = values[kTwoR2EP1];
1861+
}
1862+
if (ev2.qvecFT0AIm() * ev2.qvecFT0CIm() != 0.0) {
1863+
values[kTwoR2EP2] = TMath::Cos(2 * (getEventPlane(2, ev2.qvecFT0ARe(), ev2.qvecFT0AIm()) - getEventPlane(2, ev2.qvecFT0CRe(), ev2.qvecFT0CIm())));
1864+
values[kTwoR2EP_BC2] = values[kTwoR2EP2];
1865+
}
17971866
}
17981867

17991868
if (std::isnan(VarManager::fgValues[VarManager::kTwoR2SP1]) == true || std::isnan(VarManager::fgValues[VarManager::kTwoR2EP1]) == true) {
@@ -1802,6 +1871,24 @@ void VarManager::FillTwoMixEvents(T1 const& ev1, T1 const& ev2, T2 const& /*trac
18021871
values[kTwoR2EP1] = -999.;
18031872
values[kTwoR2EP2] = -999.;
18041873
}
1874+
if (std::isnan(VarManager::fgValues[VarManager::kTwoR2SP_AB1]) == true || std::isnan(VarManager::fgValues[VarManager::kTwoR2EP_AB1]) == true) {
1875+
values[kTwoR2SP_AB1] = -999.;
1876+
values[kTwoR2SP_AB2] = -999.;
1877+
values[kTwoR2EP_AB1] = -999.;
1878+
values[kTwoR2EP_AB2] = -999.;
1879+
}
1880+
if (std::isnan(VarManager::fgValues[VarManager::kTwoR2SP_AC1]) == true || std::isnan(VarManager::fgValues[VarManager::kTwoR2EP_AC1]) == true) {
1881+
values[kTwoR2SP_AC1] = -999.;
1882+
values[kTwoR2SP_AC2] = -999.;
1883+
values[kTwoR2EP_AC1] = -999.;
1884+
values[kTwoR2EP_AC2] = -999.;
1885+
}
1886+
if (std::isnan(VarManager::fgValues[VarManager::kTwoR2SP_BC1]) == true || std::isnan(VarManager::fgValues[VarManager::kTwoR2EP_BC1]) == true) {
1887+
values[kTwoR2SP_BC1] = -999.;
1888+
values[kTwoR2SP_BC2] = -999.;
1889+
values[kTwoR2EP_BC1] = -999.;
1890+
values[kTwoR2EP_BC2] = -999.;
1891+
}
18051892
}
18061893

18071894
template <uint32_t fillMap, typename T>
@@ -3762,9 +3849,9 @@ void VarManager::FillDileptonTrackVertexing(C const& collision, T1 const& lepton
37623849
values[kVertexingTauxyProjectedNs] = values[kVertexingTauxyProjected] / o2::constants::physics::LightSpeedCm2NS;
37633850
values[kVertexingTauzProjected] = (values[kVertexingLzProjected] * KFGeoThreeProng.GetMass()) / TMath::Abs(KFGeoThreeProng.GetPz());
37643851
} // end Run 2 quantities
3765-
} // end eventHasVtxCov
3766-
} // end (candidateType == kBtoJpsiEEK) && trackHasCov
3767-
} // end KF
3852+
} // end eventHasVtxCov
3853+
} // end (candidateType == kBtoJpsiEEK) && trackHasCov
3854+
} // end KF
37683855
}
37693856

37703857
template <typename C, typename A>
@@ -3866,14 +3953,14 @@ void VarManager::FillQVectorFromCentralFW(C const& collision, float* values)
38663953
values = fgValues;
38673954
}
38683955

3869-
float xQVecFT0a = collision.qvecFT0ARe(); // already normalised
3870-
float yQVecFT0a = collision.qvecFT0AIm(); // already normalised
3871-
float xQVecFT0c = collision.qvecFT0CRe(); // already normalised
3872-
float yQVecFT0c = collision.qvecFT0CIm(); // already normalised
3873-
float xQVecFT0m = collision.qvecFT0MRe(); // already normalised
3874-
float yQVecFT0m = collision.qvecFT0MIm(); // already normalised
3875-
float xQVecFV0a = collision.qvecFV0ARe(); // already normalised
3876-
float yQVecFV0a = collision.qvecFV0AIm(); // already normalised
3956+
float xQVecFT0a = collision.qvecFT0ARe(); // already normalised
3957+
float yQVecFT0a = collision.qvecFT0AIm(); // already normalised
3958+
float xQVecFT0c = collision.qvecFT0CRe(); // already normalised
3959+
float yQVecFT0c = collision.qvecFT0CIm(); // already normalised
3960+
float xQVecFT0m = collision.qvecFT0MRe(); // already normalised
3961+
float yQVecFT0m = collision.qvecFT0MIm(); // already normalised
3962+
float xQVecFV0a = collision.qvecFV0ARe(); // already normalised
3963+
float yQVecFV0a = collision.qvecFV0AIm(); // already normalised
38773964
float xQVecBPos = collision.qvecTPCposRe(); // already normalised
38783965
float yQVecBPos = collision.qvecTPCposIm(); // already normalised
38793966
float xQVecBNeg = collision.qvecTPCnegRe(); // already normalised

0 commit comments

Comments
 (0)