Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 20 additions & 27 deletions PWGEM/Dilepton/Core/DileptonHadronMPC.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,14 +62,14 @@
#include <utility>
#include <vector>

using namespace o2;

Check failure on line 65 in PWGEM/Dilepton/Core/DileptonHadronMPC.h

View workflow job for this annotation

GitHub Actions / O2 linter

[using-directive]

Do not put using directives at global scope in headers.
using namespace o2::aod;

Check failure on line 66 in PWGEM/Dilepton/Core/DileptonHadronMPC.h

View workflow job for this annotation

GitHub Actions / O2 linter

[using-directive]

Do not put using directives at global scope in headers.
using namespace o2::framework;

Check failure on line 67 in PWGEM/Dilepton/Core/DileptonHadronMPC.h

View workflow job for this annotation

GitHub Actions / O2 linter

[using-directive]

Do not put using directives at global scope in headers.
using namespace o2::framework::expressions;

Check failure on line 68 in PWGEM/Dilepton/Core/DileptonHadronMPC.h

View workflow job for this annotation

GitHub Actions / O2 linter

[using-directive]

Do not put using directives at global scope in headers.
using namespace o2::soa;

Check failure on line 69 in PWGEM/Dilepton/Core/DileptonHadronMPC.h

View workflow job for this annotation

GitHub Actions / O2 linter

[using-directive]

Do not put using directives at global scope in headers.
using namespace o2::aod::pwgem::dilepton::utils;

Check failure on line 70 in PWGEM/Dilepton/Core/DileptonHadronMPC.h

View workflow job for this annotation

GitHub Actions / O2 linter

[using-directive]

Do not put using directives at global scope in headers.
using namespace o2::aod::pwgem::dilepton::utils::emtrackutil;

Check failure on line 71 in PWGEM/Dilepton/Core/DileptonHadronMPC.h

View workflow job for this annotation

GitHub Actions / O2 linter

[using-directive]

Do not put using directives at global scope in headers.
using namespace o2::aod::pwgem::dilepton::utils::pairutil;

Check failure on line 72 in PWGEM/Dilepton/Core/DileptonHadronMPC.h

View workflow job for this annotation

GitHub Actions / O2 linter

[using-directive]

Do not put using directives at global scope in headers.

using MyCollisions = soa::Join<aod::EMEvents, aod::EMEventsMult, aod::EMEventsCent>;
using MyCollision = MyCollisions::iterator;
Expand Down Expand Up @@ -127,7 +127,7 @@

ConfigurableAxis ConfPtHadronBins{"ConfPtHadronBins", {VARIABLE_WIDTH, 0.00, 0.15, 0.2, 0.3, 0.4, 0.50, 1.00, 2.00, 3.00, 4.00, 5.00}, "pT,h bins for output histograms"};
ConfigurableAxis ConfRapidityBins{"ConfRapidityBins", {20, -1, 1}, "rapidity bins for output histograms"};
ConfigurableAxis ConfDEtaBins{"ConfDEtaBins", {60, -3, 3}, "deta bins for output histograms"};
ConfigurableAxis ConfDEtaBins{"ConfDEtaBins", {120, -6, 6}, "deta bins for output histograms"};
Configurable<int> cfgNbinsDPhi{"cfgNbinsDPhi", 36, "nbins in dphi for output histograms"};
Configurable<int> cfgNbinsCosNDPhi{"cfgNbinsCosNDPhi", 200, "nbins in cos(n(dphi)) for output histograms"};
Configurable<int> cfgNmod{"cfgNmod", 2, "n-th harmonics"};
Expand Down Expand Up @@ -463,7 +463,7 @@
o2::aod::pwgem::dilepton::utils::eventhistogram::addEventHistograms<-1>(&fRegistry);

std::string mass_axis_title = "m_{ll} (GeV/c^{2})";
std::string pair_pt_axis_title = "p_{T,ll}^{trg} (GeV/c)";
std::string pair_pt_axis_title = "p_{T,ll} (GeV/c)";
std::string pair_dca_axis_title = "DCA_{ll} (#sigma)";
std::string pair_rapidity_axis_title = "y_{ll}";
std::string deta_axis_title = "#Delta#eta = #eta_{ll} - #eta_{h}";
Expand Down Expand Up @@ -507,7 +507,7 @@

const AxisSpec axis_pt_trg{ConfPtHadronBins, "p_{T,h} (GeV/c)"};
const AxisSpec axis_eta_trg{40, -2, +2, "#eta_{h}"};
const AxisSpec axis_phi_trg{36, 0, 2 * M_PI, "#varphi_{h} (rad.)"};

Check failure on line 510 in PWGEM/Dilepton/Core/DileptonHadronMPC.h

View workflow job for this annotation

GitHub Actions / O2 linter

[external-pi]

Use the PI constant (and its multiples and fractions) defined in o2::constants::math.
fRegistry.add("Hadron/hs", "hadron", kTHnSparseD, {axis_pt_trg, axis_eta_trg, axis_phi_trg}, false);
fRegistry.add("Hadron/hTrackBit", "track bit", kTH1D, {{65536, -0.5, 65535.5}}, false);

Expand All @@ -517,7 +517,7 @@
fRegistry.addClone("Dilepton/same/", "Dilepton/mix/");

if (cfgAnalysisType == static_cast<int>(o2::aod::pwgem::dilepton::utils::pairutil::DileptonHadronAnalysisType::kAzimuthalCorrelation)) {
const AxisSpec axis_dphi{cfgNbinsDPhi, -M_PI / 2, 3 * M_PI / 2, dphi_axis_title};

Check failure on line 520 in PWGEM/Dilepton/Core/DileptonHadronMPC.h

View workflow job for this annotation

GitHub Actions / O2 linter

[external-pi]

Use the PI constant (and its multiples and fractions) defined in o2::constants::math.
// dilepton-hadron
fRegistry.add("DileptonHadron/same/uls/hs", "dilepton-hadron 2PC", kTHnSparseD, {axis_mass, axis_pt, axis_dca, axis_y, axis_deta, axis_dphi}, true);
fRegistry.addClone("DileptonHadron/same/uls/", "DileptonHadron/same/lspp/");
Expand All @@ -539,7 +539,7 @@
fRegistry.addClone("DileptonHadron/same/", "DileptonHadron/mix/");

// hadron-hadron
const AxisSpec axis_cosndphi_hh{cfgNbinsCosNDPhi, -1, +1, std::format("cos({0:d}(#varphi_{{h}}^{{trg}} - #varphi_{{h}}^{{ref}}))", cfgNmod.value)};
const AxisSpec axis_cosndphi_hh{cfgNbinsCosNDPhi, -1, +1, std::format("cos({0:d}(#varphi_{{h}}^{{ref1}} - #varphi_{{h}}^{{ref2}}))", cfgNmod.value)};
fRegistry.add("HadronHadron/same/hDEtaCosNDPhi", "hadron-hadron 2PC", kTH2D, {axis_cosndphi_hh, axis_deta_hh}, true);
}
fRegistry.add("Dilepton/mix/hDiffBC", "diff. global BC in mixed event;|BC_{current} - BC_{mixed}|", kTH1D, {{10001, -0.5, 10000.5}}, true);
Expand Down Expand Up @@ -1014,24 +1014,6 @@
float cosndphi = std::cos(cfgNmod * dphi);
fRegistry.fill(HIST("HadronHadron/") + HIST(event_pair_types[ev_id]) + HIST("hDEtaCosNDPhi"), cosndphi, deta, weight);
}

// store ref tracks for mixed event in case of kAzimuthalCorrelation
if constexpr (ev_id == 0) {
if (cfgDoMix && cfgAnalysisType == static_cast<int>(o2::aod::pwgem::dilepton::utils::pairutil::DileptonHadronAnalysisType::kAzimuthalCorrelation)) {
std::pair<int, int> key_df_collision = std::make_pair(ndf, collision.globalIndex());
std::pair<int, int> pair_tmp_id1 = std::make_pair(ndf, t1.globalIndex());
std::pair<int, int> pair_tmp_id2 = std::make_pair(ndf, t2.globalIndex());
if (std::find(used_refTrackIds.begin(), used_refTrackIds.end(), pair_tmp_id1) == used_refTrackIds.end()) {
used_refTrackIds.emplace_back(pair_tmp_id1);
emh_ref->AddTrackToEventPool(key_df_collision, EMTrack(ndf, t1.globalIndex(), collision.globalIndex(), t1.trackId(), t1.pt(), t1.eta(), t1.phi(), 0.139));
} // store t1
if (std::find(used_refTrackIds.begin(), used_refTrackIds.end(), pair_tmp_id2) == used_refTrackIds.end()) {
used_refTrackIds.emplace_back(pair_tmp_id2);
emh_ref->AddTrackToEventPool(key_df_collision, EMTrack(ndf, t2.globalIndex(), collision.globalIndex(), t2.trackId(), t2.pt(), t2.eta(), t2.phi(), 0.139));
} // store t2
}
}

return true;
}

Expand Down Expand Up @@ -1149,15 +1131,27 @@
}
}

std::pair<int, int> key_df_collision = std::make_pair(ndf, collision.globalIndex());

if (nuls > 0 || nlspp > 0 || nlsmm > 0) { // at least 1 pair exists.
emh_ref->ReserveNTracksPerCollision(key_df_collision, refTracks_per_coll.size());
for (const auto& track : refTracks_per_coll) {
if (fEMTrackCut.IsSelected(track)) {
fRegistry.fill(HIST("Hadron/hs"), track.pt(), track.eta(), track.phi());
fRegistry.fill(HIST("Hadron/hTrackBit"), track.trackBit());

// store ref tracks for mixed event in case of kAzimuthalCorrelation
if (cfgDoMix && cfgAnalysisType == static_cast<int>(o2::aod::pwgem::dilepton::utils::pairutil::DileptonHadronAnalysisType::kAzimuthalCorrelation)) {
std::pair<int, int> pair_tmp_refTrack = std::make_pair(ndf, track.globalIndex());
if (std::find(used_refTrackIds.begin(), used_refTrackIds.end(), pair_tmp_refTrack) == used_refTrackIds.end()) {
used_refTrackIds.emplace_back(pair_tmp_refTrack);
emh_ref->AddTrackToEventPool(key_df_collision, EMTrack(ndf, track.globalIndex(), collision.globalIndex(), track.trackId(), track.pt(), track.eta(), track.phi(), 0.139));
} // store ref tracks
}
}
}
for (const auto& [trg, ref] : combinations(CombinationsStrictlyUpperIndexPolicy(refTracks_per_coll, refTracks_per_coll))) {
fillHadronHadron<0>(collision, trg, ref, posTracks_per_coll, negTracks_per_coll, cut);
for (const auto& [ref1, ref2] : combinations(CombinationsStrictlyUpperIndexPolicy(refTracks_per_coll, refTracks_per_coll))) {
fillHadronHadron<0>(collision, ref1, ref2, posTracks_per_coll, negTracks_per_coll, cut);
}
}

Expand Down Expand Up @@ -1198,7 +1192,6 @@
}

std::tuple<int, int, int, int> key_bin = std::make_tuple(zbin, centbin, epbin, occbin);
std::pair<int, int> key_df_collision = std::make_pair(ndf, collision.globalIndex());

// make a vector of selected electrons in this collision.
auto selected_posTracks_in_this_event = emh_pos->GetTracksPerCollision(key_df_collision);
Expand Down Expand Up @@ -1256,7 +1249,6 @@
if (cfgAnalysisType == static_cast<int>(o2::aod::pwgem::dilepton::utils::pairutil::DileptonHadronAnalysisType::kAzimuthalCorrelation)) {
auto selected_refTracks_in_this_event = emh_ref->GetTracksPerCollision(key_df_collision);
auto collisionIds_in_mixing_pool_hadron = emh_ref->GetCollisionIdsFromEventPool(key_bin);
// LOGF(info, "selected_refTracks_in_this_event.size() = %d, collisionIds_in_mixing_pool_hadron.size() = %d", selected_refTracks_in_this_event.size(), collisionIds_in_mixing_pool_hadron.size());

for (const auto& mix_dfId_collisionId : collisionIds_in_mixing_pool_hadron) {
int mix_dfId = mix_dfId_collisionId.first;
Expand All @@ -1273,13 +1265,14 @@
}

auto refTracks_from_event_pool = emh_ref->GetTracksPerCollision(mix_dfId_collisionId);
// LOGF(info, "refTracks_from_event_pool.size() = %d", refTracks_from_event_pool.size());
// LOGF(info, "selected_refTracks_in_this_event.size() = %d, collisionIds_in_mixing_pool_hadron.size() = %d, refTracks_from_event_pool.size() = %d", selected_refTracks_in_this_event.size(), collisionIds_in_mixing_pool_hadron.size(), refTracks_from_event_pool.size());
for (const auto& ref1 : selected_refTracks_in_this_event) { // ref-ref mix
for (const auto& ref2 : refTracks_from_event_pool) {
// LOGF(info, "ref1.pt() = %f, ref2.pt() = %f", ref1.pt(), ref2.pt());
fillHadronHadron<1>(collision, ref1, ref2, nullptr, nullptr, nullptr);
}
}
} // end of loop over mixed event pool for lepton-lepton
} // end of loop over mixed event pool for hadron-hadron
}

if (nuls > 0 || nlspp > 0 || nlsmm > 0) {
Expand Down
5 changes: 5 additions & 0 deletions PWGEM/Dilepton/Utils/EventMixingHandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,11 @@ class EventMixingHandler

void SetNdepth(int ndepth) { fNdepth = ndepth; }

void ReserveNTracksPerCollision(U key_df_collision, int ntrack)
{
fMap_Tracks_per_collision[key_df_collision].reserve(ntrack);
}

void AddTrackToEventPool(U key_df_collision, V obj)
{
fMap_Tracks_per_collision[key_df_collision].emplace_back(obj);
Expand Down
36 changes: 17 additions & 19 deletions PWGEM/PhotonMeson/Core/DiphotonHadronMPC.h
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ struct DiphotonHadronMPC {
ConfigurableAxis ConfPtggBins{"ConfPtggBins", {VARIABLE_WIDTH, 0.0, 0.1, 0.2, 0.3, 0.4, 0.50, 1.00, 1.50, 2.00, 2.50, 3.00, 3.50, 4.00, 4.50, 5.00, 6.00, 7.00, 8.00, 9.00, 10.00}, "pTgg bins for output histograms"};

ConfigurableAxis ConfPtHadronBins{"ConfPtHadronBins", {VARIABLE_WIDTH, 0.00, 0.15, 0.2, 0.3, 0.4, 0.50, 1.00, 2.00, 3.00, 4.00, 5.00}, "pT,h bins for output histograms"};
ConfigurableAxis ConfDEtaBins{"ConfDEtaBins", {60, -3, 3}, "deta bins for output histograms"};
ConfigurableAxis ConfDEtaBins{"ConfDEtaBins", {120, -6, 6}, "deta bins for output histograms"};
Configurable<int> cfgNbinsDPhi{"cfgNbinsDPhi", 36, "nbins in dphi for output histograms"};
// Configurable<int> cfgNbinsCosNDPhi{"cfgNbinsCosNDPhi", 100, "nbins in cos(n(dphi)) for output histograms"};
// Configurable<int> cfgNmod{"cfgNmod", 2, "n-th harmonics"};
Expand Down Expand Up @@ -556,12 +556,6 @@ struct DiphotonHadronMPC {
// LOGF(info, "collision.globalIndex() = %d, collision.posZ() = %f, centrality = %f, ep2 = %f, collision.trackOccupancyInTimeRange() = %d, zbin = %d, centbin = %d, epbin = %d, occbin = %d", collision.globalIndex(), collision.posZ(), centrality, ep2, collision.trackOccupancyInTimeRange(), zbin, centbin, epbin, occbin);

auto refTracks_per_collision = refTracks.sliceBy(perCollision_track, collision.globalIndex());
for (const auto& track : refTracks_per_collision) {
if (fEMTrackCut.IsSelected(track)) {
fRegistry.fill(HIST("Hadron/hs"), track.pt(), track.eta(), track.phi());
fRegistry.fill(HIST("Hadron/hTrackBit"), track.trackBit());
}
}

std::tuple<int, int, int, int> key_bin = std::make_tuple(zbin, centbin, epbin, occbin);
std::pair<int, int64_t> key_df_collision = std::make_pair(ndf, collision.globalIndex());
Expand All @@ -587,7 +581,7 @@ struct DiphotonHadronMPC {
auto pos2 = g2.template posTrack_as<TSubInfos2>();
auto ele2 = g2.template negTrack_as<TSubInfos2>();

int npair = 0;
int npair = 0; // the number of diphoton-h pairs
for (const auto& track : refTracks_per_collision) {
if (pos1.trackId() == track.trackId() || ele1.trackId() == track.trackId()) {
continue;
Expand All @@ -604,11 +598,6 @@ struct DiphotonHadronMPC {
dphi = RecoDecay::constrainAngle(dphi, -M_PI / 2, 1U);
fRegistry.fill(HIST("DiphotonHadron/same/hs"), v12.M(), v12.Pt(), deta, dphi);
npair++;
std::pair<int, int> pair_tmp_ref = std::make_pair(ndf, track.globalIndex());
if (std::find(used_refTrackIds.begin(), used_refTrackIds.end(), pair_tmp_ref) == used_refTrackIds.end()) { // add a ref track in mixing pool
emh_ref->AddTrackToEventPool(key_df_collision, EMTrack(ndf, track.globalIndex(), collision.globalIndex(), track.globalIndex(), track.pt(), track.eta(), track.phi(), 0.139));
used_refTrackIds.emplace_back(pair_tmp_ref);
}
}
} // end of ref track loop

Expand Down Expand Up @@ -671,7 +660,7 @@ struct DiphotonHadronMPC {
}
fRegistry.fill(HIST("Diphoton/same/hs"), veeg.M(), veeg.Pt());

int npair = 0;
int npair = 0; // the number of diphoton-h pairs
for (const auto& track : refTracks_per_collision) {
if (pos1.trackId() == track.trackId() || ele1.trackId() == track.trackId()) {
continue;
Expand All @@ -688,11 +677,6 @@ struct DiphotonHadronMPC {
fRegistry.fill(HIST("DiphotonHadron/same/hs"), veeg.M(), veeg.Pt(), deta, dphi);
npair++;

std::pair<int, int> pair_tmp_ref = std::make_pair(ndf, track.globalIndex());
if (std::find(used_refTrackIds.begin(), used_refTrackIds.end(), pair_tmp_ref) == used_refTrackIds.end()) { // add a ref track in mixing pool
emh_ref->AddTrackToEventPool(key_df_collision, EMTrack(ndf, track.globalIndex(), collision.globalIndex(), track.globalIndex(), track.pt(), track.eta(), track.phi(), 0.139));
used_refTrackIds.emplace_back(pair_tmp_ref);
}
} // end of ref track loop

if (npair > 0) {
Expand All @@ -719,6 +703,20 @@ struct DiphotonHadronMPC {
} // end of pairing in same event

if (ndiphoton > 0) {
emh_ref->ReserveNTracksPerCollision(key_df_collision, refTracks_per_collision.size());
for (const auto& track : refTracks_per_collision) {
if (fEMTrackCut.IsSelected(track)) {
fRegistry.fill(HIST("Hadron/hs"), track.pt(), track.eta(), track.phi());
fRegistry.fill(HIST("Hadron/hTrackBit"), track.trackBit());

std::pair<int, int> pair_tmp_ref = std::make_pair(ndf, track.globalIndex());
if (std::find(used_refTrackIds.begin(), used_refTrackIds.end(), pair_tmp_ref) == used_refTrackIds.end()) { // add a ref track in mixing pool
emh_ref->AddTrackToEventPool(key_df_collision, EMTrack(ndf, track.globalIndex(), collision.globalIndex(), track.globalIndex(), track.pt(), track.eta(), track.phi(), 0.139));
used_refTrackIds.emplace_back(pair_tmp_ref);
}
}
}

for (const auto& [ref1, ref2] : combinations(CombinationsStrictlyUpperIndexPolicy(refTracks_per_collision, refTracks_per_collision))) {
if (fEMTrackCut.IsSelected(ref1) && fEMTrackCut.IsSelected(ref2)) {
float deta = ref1.eta() - ref2.eta();
Expand Down
Loading