Skip to content

Commit 4a34731

Browse files
committed
PWGEM/Dilepton: speed up 2pc
1 parent f3790ae commit 4a34731

File tree

3 files changed

+42
-46
lines changed

3 files changed

+42
-46
lines changed

PWGEM/Dilepton/Core/DileptonHadronMPC.h

Lines changed: 20 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ struct DileptonHadronMPC {
127127

128128
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"};
129129
ConfigurableAxis ConfRapidityBins{"ConfRapidityBins", {20, -1, 1}, "rapidity bins for output histograms"};
130-
ConfigurableAxis ConfDEtaBins{"ConfDEtaBins", {60, -3, 3}, "deta bins for output histograms"};
130+
ConfigurableAxis ConfDEtaBins{"ConfDEtaBins", {120, -6, 6}, "deta bins for output histograms"};
131131
Configurable<int> cfgNbinsDPhi{"cfgNbinsDPhi", 36, "nbins in dphi for output histograms"};
132132
Configurable<int> cfgNbinsCosNDPhi{"cfgNbinsCosNDPhi", 200, "nbins in cos(n(dphi)) for output histograms"};
133133
Configurable<int> cfgNmod{"cfgNmod", 2, "n-th harmonics"};
@@ -463,7 +463,7 @@ struct DileptonHadronMPC {
463463
o2::aod::pwgem::dilepton::utils::eventhistogram::addEventHistograms<-1>(&fRegistry);
464464

465465
std::string mass_axis_title = "m_{ll} (GeV/c^{2})";
466-
std::string pair_pt_axis_title = "p_{T,ll}^{trg} (GeV/c)";
466+
std::string pair_pt_axis_title = "p_{T,ll} (GeV/c)";
467467
std::string pair_dca_axis_title = "DCA_{ll} (#sigma)";
468468
std::string pair_rapidity_axis_title = "y_{ll}";
469469
std::string deta_axis_title = "#Delta#eta = #eta_{ll} - #eta_{h}";
@@ -539,7 +539,7 @@ struct DileptonHadronMPC {
539539
fRegistry.addClone("DileptonHadron/same/", "DileptonHadron/mix/");
540540

541541
// hadron-hadron
542-
const AxisSpec axis_cosndphi_hh{cfgNbinsCosNDPhi, -1, +1, std::format("cos({0:d}(#varphi_{{h}}^{{trg}} - #varphi_{{h}}^{{ref}}))", cfgNmod.value)};
542+
const AxisSpec axis_cosndphi_hh{cfgNbinsCosNDPhi, -1, +1, std::format("cos({0:d}(#varphi_{{h}}^{{ref1}} - #varphi_{{h}}^{{ref2}}))", cfgNmod.value)};
543543
fRegistry.add("HadronHadron/same/hDEtaCosNDPhi", "hadron-hadron 2PC", kTH2D, {axis_cosndphi_hh, axis_deta_hh}, true);
544544
}
545545
fRegistry.add("Dilepton/mix/hDiffBC", "diff. global BC in mixed event;|BC_{current} - BC_{mixed}|", kTH1D, {{10001, -0.5, 10000.5}}, true);
@@ -1014,24 +1014,6 @@ struct DileptonHadronMPC {
10141014
float cosndphi = std::cos(cfgNmod * dphi);
10151015
fRegistry.fill(HIST("HadronHadron/") + HIST(event_pair_types[ev_id]) + HIST("hDEtaCosNDPhi"), cosndphi, deta, weight);
10161016
}
1017-
1018-
// store ref tracks for mixed event in case of kAzimuthalCorrelation
1019-
if constexpr (ev_id == 0) {
1020-
if (cfgDoMix && cfgAnalysisType == static_cast<int>(o2::aod::pwgem::dilepton::utils::pairutil::DileptonHadronAnalysisType::kAzimuthalCorrelation)) {
1021-
std::pair<int, int> key_df_collision = std::make_pair(ndf, collision.globalIndex());
1022-
std::pair<int, int> pair_tmp_id1 = std::make_pair(ndf, t1.globalIndex());
1023-
std::pair<int, int> pair_tmp_id2 = std::make_pair(ndf, t2.globalIndex());
1024-
if (std::find(used_refTrackIds.begin(), used_refTrackIds.end(), pair_tmp_id1) == used_refTrackIds.end()) {
1025-
used_refTrackIds.emplace_back(pair_tmp_id1);
1026-
emh_ref->AddTrackToEventPool(key_df_collision, EMTrack(ndf, t1.globalIndex(), collision.globalIndex(), t1.trackId(), t1.pt(), t1.eta(), t1.phi(), 0.139));
1027-
} // store t1
1028-
if (std::find(used_refTrackIds.begin(), used_refTrackIds.end(), pair_tmp_id2) == used_refTrackIds.end()) {
1029-
used_refTrackIds.emplace_back(pair_tmp_id2);
1030-
emh_ref->AddTrackToEventPool(key_df_collision, EMTrack(ndf, t2.globalIndex(), collision.globalIndex(), t2.trackId(), t2.pt(), t2.eta(), t2.phi(), 0.139));
1031-
} // store t2
1032-
}
1033-
}
1034-
10351017
return true;
10361018
}
10371019

@@ -1149,15 +1131,27 @@ struct DileptonHadronMPC {
11491131
}
11501132
}
11511133

1134+
std::pair<int, int> key_df_collision = std::make_pair(ndf, collision.globalIndex());
1135+
11521136
if (nuls > 0 || nlspp > 0 || nlsmm > 0) { // at least 1 pair exists.
1137+
emh_ref->ReserveNTracksPerCollision(key_df_collision, refTracks_per_coll.size());
11531138
for (const auto& track : refTracks_per_coll) {
11541139
if (fEMTrackCut.IsSelected(track)) {
11551140
fRegistry.fill(HIST("Hadron/hs"), track.pt(), track.eta(), track.phi());
11561141
fRegistry.fill(HIST("Hadron/hTrackBit"), track.trackBit());
1142+
1143+
// store ref tracks for mixed event in case of kAzimuthalCorrelation
1144+
if (cfgDoMix && cfgAnalysisType == static_cast<int>(o2::aod::pwgem::dilepton::utils::pairutil::DileptonHadronAnalysisType::kAzimuthalCorrelation)) {
1145+
std::pair<int, int> pair_tmp_refTrack = std::make_pair(ndf, track.globalIndex());
1146+
if (std::find(used_refTrackIds.begin(), used_refTrackIds.end(), pair_tmp_refTrack) == used_refTrackIds.end()) {
1147+
used_refTrackIds.emplace_back(pair_tmp_refTrack);
1148+
emh_ref->AddTrackToEventPool(key_df_collision, EMTrack(ndf, track.globalIndex(), collision.globalIndex(), track.trackId(), track.pt(), track.eta(), track.phi(), 0.139));
1149+
} // store ref tracks
1150+
}
11571151
}
11581152
}
1159-
for (const auto& [trg, ref] : combinations(CombinationsStrictlyUpperIndexPolicy(refTracks_per_coll, refTracks_per_coll))) {
1160-
fillHadronHadron<0>(collision, trg, ref, posTracks_per_coll, negTracks_per_coll, cut);
1153+
for (const auto& [ref1, ref2] : combinations(CombinationsStrictlyUpperIndexPolicy(refTracks_per_coll, refTracks_per_coll))) {
1154+
fillHadronHadron<0>(collision, ref1, ref2, posTracks_per_coll, negTracks_per_coll, cut);
11611155
}
11621156
}
11631157

@@ -1198,7 +1192,6 @@ struct DileptonHadronMPC {
11981192
}
11991193

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

12031196
// make a vector of selected electrons in this collision.
12041197
auto selected_posTracks_in_this_event = emh_pos->GetTracksPerCollision(key_df_collision);
@@ -1256,7 +1249,6 @@ struct DileptonHadronMPC {
12561249
if (cfgAnalysisType == static_cast<int>(o2::aod::pwgem::dilepton::utils::pairutil::DileptonHadronAnalysisType::kAzimuthalCorrelation)) {
12571250
auto selected_refTracks_in_this_event = emh_ref->GetTracksPerCollision(key_df_collision);
12581251
auto collisionIds_in_mixing_pool_hadron = emh_ref->GetCollisionIdsFromEventPool(key_bin);
1259-
// 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());
12601252

12611253
for (const auto& mix_dfId_collisionId : collisionIds_in_mixing_pool_hadron) {
12621254
int mix_dfId = mix_dfId_collisionId.first;
@@ -1273,13 +1265,14 @@ struct DileptonHadronMPC {
12731265
}
12741266

12751267
auto refTracks_from_event_pool = emh_ref->GetTracksPerCollision(mix_dfId_collisionId);
1276-
// LOGF(info, "refTracks_from_event_pool.size() = %d", refTracks_from_event_pool.size());
1268+
// 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());
12771269
for (const auto& ref1 : selected_refTracks_in_this_event) { // ref-ref mix
12781270
for (const auto& ref2 : refTracks_from_event_pool) {
1271+
// LOGF(info, "ref1.pt() = %f, ref2.pt() = %f", ref1.pt(), ref2.pt());
12791272
fillHadronHadron<1>(collision, ref1, ref2, nullptr, nullptr, nullptr);
12801273
}
12811274
}
1282-
} // end of loop over mixed event pool for lepton-lepton
1275+
} // end of loop over mixed event pool for hadron-hadron
12831276
}
12841277

12851278
if (nuls > 0 || nlspp > 0 || nlsmm > 0) {

PWGEM/Dilepton/Utils/EventMixingHandler.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@ class EventMixingHandler
4747

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

50+
void ReserveNTracksPerCollision(U key_df_collision, int ntrack)
51+
{
52+
fMap_Tracks_per_collision[key_df_collision].reserve(ntrack);
53+
}
54+
5055
void AddTrackToEventPool(U key_df_collision, V obj)
5156
{
5257
fMap_Tracks_per_collision[key_df_collision].emplace_back(obj);

PWGEM/PhotonMeson/Core/DiphotonHadronMPC.h

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ struct DiphotonHadronMPC {
105105
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"};
106106

107107
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"};
108-
ConfigurableAxis ConfDEtaBins{"ConfDEtaBins", {60, -3, 3}, "deta bins for output histograms"};
108+
ConfigurableAxis ConfDEtaBins{"ConfDEtaBins", {120, -6, 6}, "deta bins for output histograms"};
109109
Configurable<int> cfgNbinsDPhi{"cfgNbinsDPhi", 36, "nbins in dphi for output histograms"};
110110
// Configurable<int> cfgNbinsCosNDPhi{"cfgNbinsCosNDPhi", 100, "nbins in cos(n(dphi)) for output histograms"};
111111
// Configurable<int> cfgNmod{"cfgNmod", 2, "n-th harmonics"};
@@ -556,12 +556,6 @@ struct DiphotonHadronMPC {
556556
// 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);
557557

558558
auto refTracks_per_collision = refTracks.sliceBy(perCollision_track, collision.globalIndex());
559-
for (const auto& track : refTracks_per_collision) {
560-
if (fEMTrackCut.IsSelected(track)) {
561-
fRegistry.fill(HIST("Hadron/hs"), track.pt(), track.eta(), track.phi());
562-
fRegistry.fill(HIST("Hadron/hTrackBit"), track.trackBit());
563-
}
564-
}
565559

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

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

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

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

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

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

721705
if (ndiphoton > 0) {
706+
emh_ref->ReserveNTracksPerCollision(key_df_collision, refTracks_per_collision.size());
707+
for (const auto& track : refTracks_per_collision) {
708+
if (fEMTrackCut.IsSelected(track)) {
709+
fRegistry.fill(HIST("Hadron/hs"), track.pt(), track.eta(), track.phi());
710+
fRegistry.fill(HIST("Hadron/hTrackBit"), track.trackBit());
711+
712+
std::pair<int, int> pair_tmp_ref = std::make_pair(ndf, track.globalIndex());
713+
if (std::find(used_refTrackIds.begin(), used_refTrackIds.end(), pair_tmp_ref) == used_refTrackIds.end()) { // add a ref track in mixing pool
714+
emh_ref->AddTrackToEventPool(key_df_collision, EMTrack(ndf, track.globalIndex(), collision.globalIndex(), track.globalIndex(), track.pt(), track.eta(), track.phi(), 0.139));
715+
used_refTrackIds.emplace_back(pair_tmp_ref);
716+
}
717+
}
718+
}
719+
722720
for (const auto& [ref1, ref2] : combinations(CombinationsStrictlyUpperIndexPolicy(refTracks_per_collision, refTracks_per_collision))) {
723721
if (fEMTrackCut.IsSelected(ref1) && fEMTrackCut.IsSelected(ref2)) {
724722
float deta = ref1.eta() - ref2.eta();

0 commit comments

Comments
 (0)