Skip to content

Commit 85512fc

Browse files
[PWGDQ] Adding correlators of dimuons mixed (#9843)
1 parent 7c764e5 commit 85512fc

File tree

4 files changed

+84
-2
lines changed

4 files changed

+84
-2
lines changed

PWGDQ/Core/HistogramsLibrary.cxx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1082,6 +1082,16 @@ void o2::aod::dqhistograms::DefineHistograms(HistogramManager* hm, const char* h
10821082
hm->AddHistogram(histClass, "Mass_Pt_CentFT0C_V2ME_SP", "Mass_Pt_CentFT0C_V2ME_SP", true, 250, 0.0, 5.0, VarManager::kMass, 60, 0.0, 30.0, VarManager::kPt, 90, 0.0, 90.0, VarManager::kCentFT0C, "", "", "", VarManager::kV2ME_SP, VarManager::kWV2ME_SP);
10831083
hm->AddHistogram(histClass, "Mass_Pt_CentFT0C_V2ME_EP", "Mass_Pt_CentFT0C_V2ME_EP", true, 250, 0.0, 5.0, VarManager::kMass, 60, 0.0, 30.0, VarManager::kPt, 90, 0.0, 90.0, VarManager::kCentFT0C, "", "", "", VarManager::kV2ME_EP, VarManager::kWV2ME_EP);
10841084
}
1085+
if (subGroupStr.Contains("cumulantme")) {
1086+
hm->AddHistogram(histClass, "Mass_Pt_centrFT0C_M11REFoverMpME", "", true, 250, 0.0, 5.0, VarManager::kMass, 60, 0.0, 30.0, VarManager::kPt, 9, 0.0, 90.0, VarManager::kCentFT0C, "", "", "", VarManager::kM11REFoverMpME);
1087+
hm->AddHistogram(histClass, "Mass_Pt_centrFT0C_M1111REFoverMpME", "", true, 250, 0.0, 5.0, VarManager::kMass, 60, 0.0, 30.0, VarManager::kPt, 9, 0.0, 90.0, VarManager::kCentFT0C, "", "", "", VarManager::kM1111REFoverMpME);
1088+
hm->AddHistogram(histClass, "Mass_Pt_centrFT0C_M01POIoverMpME", "", true, 250, 0.0, 5.0, VarManager::kMass, 60, 0.0, 30.0, VarManager::kPt, 9, 0.0, 90.0, VarManager::kCentFT0C, "", "", "", VarManager::kM01POIoverMpME);
1089+
hm->AddHistogram(histClass, "Mass_Pt_centrFT0C_M0111POIoverMpME", "", true, 250, 0.0, 5.0, VarManager::kMass, 60, 0.0, 30.0, VarManager::kPt, 9, 0.0, 90.0, VarManager::kCentFT0C, "", "", "", VarManager::kM0111POIoverMpME);
1090+
hm->AddHistogram(histClass, "Mass_Pt_centrFT0C_Corr2REFME", "", true, 250, 0.0, 5.0, VarManager::kMass, 60, 0.0, 30.0, VarManager::kPt, 9, 0.0, 90.0, VarManager::kCentFT0C, "", "", "", VarManager::kCORR2REFbydimuonsME, VarManager::kM11REFoverMpME);
1091+
hm->AddHistogram(histClass, "Mass_Pt_centrFT0C_Corr4REFME", "", true, 250, 0.0, 5.0, VarManager::kMass, 60, 0.0, 30.0, VarManager::kPt, 9, 0.0, 90.0, VarManager::kCentFT0C, "", "", "", VarManager::kCORR4REFbydimuonsME, VarManager::kM1111REFoverMpME);
1092+
hm->AddHistogram(histClass, "Mass_Pt_centrFT0C_Corr2POIME", "", true, 250, 0.0, 5.0, VarManager::kMass, 60, 0.0, 30.0, VarManager::kPt, 9, 0.0, 90.0, VarManager::kCentFT0C, "", "", "", VarManager::kCORR2POIME, VarManager::kM01POIoverMpME);
1093+
hm->AddHistogram(histClass, "Mass_Pt_centrFT0C_Corr4POIME", "", true, 250, 0.0, 5.0, VarManager::kMass, 60, 0.0, 30.0, VarManager::kPt, 9, 0.0, 90.0, VarManager::kCentFT0C, "", "", "", VarManager::kCORR4POIME, VarManager::kM0111POIoverMpME);
1094+
}
10851095
if (subGroupStr.Contains("dimuon-polarization-he")) {
10861096
int varspTHE[4] = {VarManager::kMass, VarManager::kPt, VarManager::kCosThetaHE, VarManager::kPhiHE};
10871097
int varsrapHE[4] = {VarManager::kMass, VarManager::kRap, VarManager::kCosThetaHE, VarManager::kPhiHE};

PWGDQ/Core/VarManager.cxx

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,8 @@ void VarManager::SetDefaultVarNames()
294294
fgVariableUnits[kMultTracklets] = "";
295295
fgVariableNames[kMultDimuons] = "Multiplicity Dimuons Unlike Sign";
296296
fgVariableUnits[kMultDimuons] = "";
297+
fgVariableNames[kMultDimuonsME] = "Multiplicity Dimuons Unlike Sign Mixed Events";
298+
fgVariableUnits[kMultDimuonsME] = "";
297299
fgVariableNames[kCentFT0C] = "Centrality FT0C";
298300
fgVariableUnits[kCentFT0C] = "%";
299301
fgVariableNames[kMCEventGeneratorId] = "MC Generator ID";
@@ -887,6 +889,26 @@ void VarManager::SetDefaultVarNames()
887889
fgVariableUnits[kM1111REFoverMpplus] = "";
888890
fgVariableNames[kM1111REFoverMpminus] = "M^{-}_{1111}^{REF}/M^{-}_{p} ";
889891
fgVariableUnits[kM1111REFoverMpminus] = "";
892+
fgVariableNames[kM01POIME] = "M_{01}^{POI, ME}";
893+
fgVariableUnits[kM01POIME] = "";
894+
fgVariableNames[kM0111POIME] = "M_{0111}^{POI, ME}";
895+
fgVariableUnits[kM0111POIME] = "";
896+
fgVariableNames[kCORR2POIME] = "CORR2^{POI, ME}";
897+
fgVariableUnits[kCORR2POIME] = "";
898+
fgVariableNames[kCORR4POIME] = "CORR4^{POI, ME}";
899+
fgVariableUnits[kCORR4POIME] = "";
900+
fgVariableNames[kM01POIoverMpME] = "M_{01}^{POI, ME} / M_p";
901+
fgVariableUnits[kM01POIoverMpME] = "";
902+
fgVariableNames[kM0111POIoverMpME] = "M_{0111}^{POI, ME} / M_p";
903+
fgVariableUnits[kM0111POIoverMpME] = "";
904+
fgVariableNames[kM11REFoverMpME] = "M_{11}^{REF} / M_p";
905+
fgVariableUnits[kM11REFoverMpME] = "";
906+
fgVariableNames[kM1111REFoverMpME] = "M_{1111}^{REF} / M_p";
907+
fgVariableUnits[kM1111REFoverMpME] = "";
908+
fgVariableNames[kCORR2REFbydimuonsME] = "CORR2^{REF} / dimuons ME";
909+
fgVariableUnits[kCORR2REFbydimuonsME] = "";
910+
fgVariableNames[kCORR4REFbydimuonsME] = "CORR4^{REF} / dimuons ME";
911+
fgVariableUnits[kCORR4REFbydimuonsME] = "";
890912
fgVariableNames[kCos2DeltaPhi] = "cos 2(#varphi-#Psi_{2}^{A}) ";
891913
fgVariableUnits[kCos2DeltaPhi] = "";
892914
fgVariableNames[kCos3DeltaPhi] = "cos 3(#varphi-#Psi_{3}^{A}) ";
@@ -1096,6 +1118,7 @@ void VarManager::SetDefaultVarNames()
10961118
fgVarNamesMap["kMultZNC"] = kMultZNC;
10971119
fgVarNamesMap["kMultTracklets"] = kMultTracklets;
10981120
fgVarNamesMap["kMultDimuons"] = kMultDimuons;
1121+
fgVarNamesMap["kMultDimuonsME"] = kMultDimuonsME;
10991122
fgVarNamesMap["kMultNTracksHasITS"] = kMultNTracksHasITS;
11001123
fgVarNamesMap["kMultNTracksHasTPC"] = kMultNTracksHasTPC;
11011124
fgVarNamesMap["kMultNTracksHasTOF"] = kMultNTracksHasTOF;
@@ -1560,6 +1583,17 @@ void VarManager::SetDefaultVarNames()
15601583
fgVarNamesMap["kM0111POIoverMp"] = kM0111POIoverMp;
15611584
fgVarNamesMap["kCORR2POIMp"] = kCORR2POIMp;
15621585
fgVarNamesMap["kCORR4POIMp"] = kCORR4POIMp;
1586+
fgVarNamesMap["kM01POIME"] = kM01POIME;
1587+
fgVarNamesMap["kMultDimuonsME"] = kMultDimuonsME;
1588+
fgVarNamesMap["kM0111POIME"] = kM0111POIME;
1589+
fgVarNamesMap["kCORR2POIME"] = kCORR2POIME;
1590+
fgVarNamesMap["kCORR4POIME"] = kCORR4POIME;
1591+
fgVarNamesMap["kM01POIoverMpME"] = kM01POIoverMpME;
1592+
fgVarNamesMap["kM0111POIoverMpME"] = kM0111POIoverMpME;
1593+
fgVarNamesMap["kM11REFoverMpME"] = kM11REFoverMpME;
1594+
fgVarNamesMap["kM1111REFoverMpME"] = kM1111REFoverMpME;
1595+
fgVarNamesMap["kCORR2REFbydimuonsME"] = kCORR2REFbydimuonsME;
1596+
fgVarNamesMap["kCORR4REFbydimuonsME"] = kCORR4REFbydimuonsME;
15631597
fgVarNamesMap["kR2SP"] = kR2SP;
15641598
fgVarNamesMap["kR2EP"] = kR2EP;
15651599
fgVarNamesMap["kPsi2A"] = kPsi2A;

PWGDQ/Core/VarManager.h

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -707,6 +707,17 @@ class VarManager : public TObject
707707
kM1111REFoverMpplus,
708708
kM11REFoverMpminus,
709709
kM1111REFoverMpminus,
710+
kM01POIME,
711+
kMultDimuonsME,
712+
kM0111POIME,
713+
kCORR2POIME,
714+
kCORR4POIME,
715+
kM01POIoverMpME,
716+
kM0111POIoverMpME,
717+
kM11REFoverMpME,
718+
kM1111REFoverMpME,
719+
kCORR2REFbydimuonsME,
720+
kCORR4REFbydimuonsME,
710721
kR2SP,
711722
kR2EP,
712723
kPsi2A,
@@ -3023,6 +3034,25 @@ void VarManager::FillPairME(T1 const& t1, T2 const& t2, float* values)
30233034
values[kWV2ME_SP] = std::isnan(V2ME_SP) || std::isinf(V2ME_SP) ? 0. : 1.0;
30243035
values[kV2ME_EP] = std::isnan(V2ME_EP) || std::isinf(V2ME_EP) ? 0. : V2ME_EP;
30253036
values[kWV2ME_EP] = std::isnan(V2ME_EP) || std::isinf(V2ME_EP) ? 0. : 1.0;
3037+
3038+
if constexpr ((fillMap & ReducedEventQvectorExtra) > 0) {
3039+
complex<double> Q21(values[kQ2X0A] * values[kS11A], values[kQ2Y0A] * values[kS11A]);
3040+
complex<double> Q42(values[kQ42XA], values[kQ42YA]);
3041+
complex<double> Q23(values[kQ23XA], values[kQ23YA]);
3042+
complex<double> P2(TMath::Cos(2 * v12.Phi()), TMath::Sin(2 * v12.Phi()));
3043+
values[kM01POIME] = values[kMultDimuonsME] * values[kS11A];
3044+
values[kM0111POIME] = values[kMultDimuonsME] * (values[kS31A] - 3. * values[kS11A] * values[kS12A] + 2. * values[kS13A]);
3045+
values[kCORR2POIME] = (P2 * conj(Q21)).real() / values[kM01POIME];
3046+
values[kCORR4POIME] = (P2 * Q21 * conj(Q21) * conj(Q21) - P2 * Q21 * conj(Q42) - 2. * values[kS12A] * P2 * conj(Q21) + 2. * P2 * conj(Q23)).real() / values[kM0111POIME];
3047+
values[kM01POIoverMpME] = values[kMultDimuonsME] > 0 && !(std::isnan(values[kM01POIME]) || std::isinf(values[kM01POIME]) || std::isnan(values[kCORR2POIME]) || std::isinf(values[kCORR2POIME]) || std::isnan(values[kM0111POIME]) || std::isinf(values[kM0111POIME]) || std::isnan(values[kCORR4POIME]) || std::isinf(values[kCORR4POIME])) ? values[kM01POIME] / values[kMultDimuonsME] : 0;
3048+
values[kM0111POIoverMpME] = values[kMultDimuonsME] > 0 && !(std::isnan(values[kM0111POIME]) || std::isinf(values[kM0111POIME]) || std::isnan(values[kCORR4POIME]) || std::isinf(values[kCORR4POIME]) || std::isnan(values[kM01POIME]) || std::isinf(values[kM01POIME]) || std::isnan(values[kCORR2POIME]) || std::isinf(values[kCORR2POIME])) ? values[kM0111POIME] / values[kMultDimuonsME] : 0;
3049+
values[kM11REFoverMpME] = values[kMultDimuonsME] > 0 && !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) || std::isnan(values[kM1111REF]) || std::isinf(values[kM1111REF]) || std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF])) ? values[kM11REF] / values[kMultDimuonsME] : 0;
3050+
values[kM1111REFoverMpME] = values[kMultDimuonsME] > 0 && !(std::isnan(values[kM1111REF]) || std::isinf(values[kM1111REF]) || std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) || std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF])) ? values[kM1111REF] / values[kMultDimuonsME] : 0;
3051+
values[kCORR2REFbydimuonsME] = std::isnan(values[kM11REFoverMpME]) || std::isinf(values[kM11REFoverMpME]) || std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) || std::isnan(values[kM1111REFoverMpME]) || std::isinf(values[kM1111REFoverMpME]) || std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) ? 0 : values[kCORR2REF];
3052+
values[kCORR4REFbydimuonsME] = std::isnan(values[kM1111REFoverMpME]) || std::isinf(values[kM1111REFoverMpME]) || std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) || std::isnan(values[kM11REFoverMpME]) || std::isinf(values[kM11REFoverMpME]) || std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) ? 0 : values[kCORR4REF];
3053+
values[kCORR2POIME] = std::isnan(values[kCORR2POIME]) || std::isinf(values[kCORR2POIME]) || std::isnan(values[kM01POIME]) || std::isinf(values[kM01POIME]) || std::isnan(values[kCORR4POIME]) || std::isinf(values[kCORR4POIME]) || std::isnan(values[kM0111POIME]) || std::isinf(values[kM0111POIME]) ? 0 : values[kCORR2POIME];
3054+
values[kCORR4POIME] = std::isnan(values[kCORR4POIME]) || std::isinf(values[kCORR4POIME]) || std::isnan(values[kM0111POIME]) || std::isinf(values[kM0111POIME]) || std::isnan(values[kCORR2POIME]) || std::isinf(values[kCORR2POIME]) || std::isnan(values[kM01POIME]) || std::isinf(values[kM01POIME]) ? 0 : values[kCORR4POIME];
3055+
}
30263056
}
30273057
if constexpr (pairType == kDecayToMuMu) {
30283058
if (fgUsedVars[kQuadDCAabsXY]) {

PWGDQ/Tasks/tableReader.cxx

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ using MyEventsQvectorCentr = soa::Join<aod::ReducedEvents, aod::ReducedEventsExt
106106
using MyEventsQvectorCentrMultExtra = soa::Join<aod::ReducedEvents, aod::ReducedEventsExtended, aod::ReducedEventsQvectorCentr, aod::ReducedEventsMultPV, aod::ReducedEventsMultAll>;
107107
using MyEventsQvectorExtra = soa::Join<aod::ReducedEvents, aod::ReducedEventsExtended, aod::ReducedEventsQvector, aod::ReducedEventsQvectorExtra>;
108108
using MyEventsHashSelectedQvector = soa::Join<aod::ReducedEvents, aod::ReducedEventsExtended, aod::EventCuts, aod::MixingHashes, aod::ReducedEventsQvector>;
109-
using MyEventsHashSelectedQvectorExtra = soa::Join<aod::ReducedEvents, aod::ReducedEventsExtended, aod::EventCuts, aod::MixingHashes, aod::ReducedEventsQvector, aod::ReducedEventsQvectorExtra>;
109+
using MyEventsHashSelectedQvectorExtra = soa::Join<aod::ReducedEvents, aod::ReducedEventsExtended, ReducedEventVtxCov, aod::EventCuts, aod::MixingHashes, aod::ReducedEventsQvector, aod::ReducedEventsQvectorExtra, aod::ReducedEventsRefFlow>;
110110
using MyEventsHashSelectedQvectorCentr = soa::Join<aod::ReducedEvents, aod::ReducedEventsExtended, aod::EventCuts, aod::MixingHashes, aod::ReducedEventsQvectorCentr>;
111111

112112
using MyBarrelTracks = soa::Join<aod::ReducedTracks, aod::ReducedTracksBarrel, aod::ReducedTracksBarrelPID>;
@@ -701,7 +701,7 @@ struct AnalysisEventMixing {
701701
}
702702
}
703703
}
704-
if (context.mOptions.get<bool>("processMuonSkimmed") || context.mOptions.get<bool>("processMuonVnSkimmed") || context.mOptions.get<bool>("processMuonVnCentrSkimmed")) {
704+
if (context.mOptions.get<bool>("processMuonSkimmed") || context.mOptions.get<bool>("processMuonVnSkimmed") || context.mOptions.get<bool>("processMuonVnCentrSkimmed") || context.mOptions.get<bool>("processMuonVnExtraSkimmed")) {
705705
TString cutNames = fConfigMuonCuts.value;
706706
if (!cutNames.IsNull()) {
707707
std::unique_ptr<TObjArray> objArray(cutNames.Tokenize(","));
@@ -762,6 +762,7 @@ struct AnalysisEventMixing {
762762
}
763763

764764
uint32_t twoTrackFilter = 0;
765+
uint32_t mult_dimuons = 0;
765766
for (auto& track1 : tracks1) {
766767
for (auto& track2 : tracks2) {
767768
if constexpr (TPairType == VarManager::kDecayToEE) {
@@ -782,6 +783,7 @@ struct AnalysisEventMixing {
782783
for (unsigned int icut = 0; icut < ncuts; icut++) {
783784
if (twoTrackFilter & (static_cast<uint32_t>(1) << icut)) {
784785
if (track1.sign() * track2.sign() < 0) {
786+
mult_dimuons++;
785787
fHistMan->FillHistClass(histNames[icut][0].Data(), VarManager::fgValues);
786788
if (fConfigAmbiguousHist && !(track1.isAmbiguous() || track2.isAmbiguous())) {
787789
fHistMan->FillHistClass(Form("%s_unambiguous", histNames[icut][0].Data()), VarManager::fgValues);
@@ -803,6 +805,7 @@ struct AnalysisEventMixing {
803805
} // end for (cuts)
804806
} // end for (track2)
805807
} // end for (track1)
808+
VarManager::fgValues[VarManager::kMultDimuonsME] = mult_dimuons;
806809
}
807810

808811
// barrel-barrel and muon-muon event mixing
@@ -906,6 +909,10 @@ struct AnalysisEventMixing {
906909
{
907910
runSameSide<pairTypeMuMu, gkEventFillMapWithQvectorCentr>(events, muons, perEventsSelectedM);
908911
}
912+
void processMuonVnExtraSkimmed(soa::Filtered<MyEventsHashSelectedQvectorExtra>& events, soa::Filtered<MyMuonTracksSelected> const& muons)
913+
{
914+
runSameSide<pairTypeMuMu, gkEventFillMapWithCovQvectorExtraWithRefFlow>(events, muons, perEventsSelectedM);
915+
}
909916
// TODO: This is a dummy process function for the case when the user does not want to run any of the process functions (no event mixing)
910917
// If there is no process function enabled, the workflow hangs
911918
void processDummy(MyEvents&)
@@ -919,6 +926,7 @@ struct AnalysisEventMixing {
919926
PROCESS_SWITCH(AnalysisEventMixing, processBarrelVnSkimmed, "Run barrel-barrel vn mixing on skimmed tracks", false);
920927
PROCESS_SWITCH(AnalysisEventMixing, processMuonVnSkimmed, "Run muon-muon vn mixing on skimmed tracks", false);
921928
PROCESS_SWITCH(AnalysisEventMixing, processMuonVnCentrSkimmed, "Run muon-muon vn mixing on skimmed tracks from central framework", false);
929+
PROCESS_SWITCH(AnalysisEventMixing, processMuonVnExtraSkimmed, "Run muon-muon vn mixing on skimmed tracks from GFW", false);
922930
PROCESS_SWITCH(AnalysisEventMixing, processDummy, "Dummy function", false);
923931
};
924932

0 commit comments

Comments
 (0)