Skip to content

Commit 991f617

Browse files
authored
[PWGEM/PhotonMeson] speed up pairing in DiphotonHadronMPC.h (#13614)
1 parent f390c5c commit 991f617

File tree

1 file changed

+31
-25
lines changed

1 file changed

+31
-25
lines changed

PWGEM/PhotonMeson/Core/DiphotonHadronMPC.h

Lines changed: 31 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -321,10 +321,12 @@ struct DiphotonHadronMPC {
321321
delete emh_ref;
322322
emh_ref = 0x0;
323323

324-
used_photonIds.clear();
325-
used_photonIds.shrink_to_fit();
326-
used_dileptonIds.clear();
327-
used_dileptonIds.shrink_to_fit();
324+
used_photonIds_per_col.clear();
325+
used_photonIds_per_col.shrink_to_fit();
326+
used_dileptonIds_per_col.clear();
327+
used_dileptonIds_per_col.shrink_to_fit();
328+
used_diphotonIds_per_col.clear();
329+
used_diphotonIds_per_col.shrink_to_fit();
328330

329331
map_mixed_eventId_to_globalBC.clear();
330332
}
@@ -482,9 +484,9 @@ struct DiphotonHadronMPC {
482484
MyEMH_track* emh_diphoton = nullptr;
483485
MyEMH_track* emh_ref = nullptr;
484486

485-
std::vector<std::pair<int, int>> used_photonIds; // <ndf, trackId>
486-
std::vector<std::tuple<int, int, int, int>> used_dileptonIds; // <ndf, trackId>
487-
std::vector<std::tuple<int, int, int, int>> used_diphotonIds; // <ndf, trackId>
487+
std::vector<int> used_photonIds_per_col; // <ndf, trackId>
488+
std::vector<std::pair<int, int>> used_dileptonIds_per_col; // <ndf, trackId>
489+
std::vector<std::tuple<int, int, int>> used_diphotonIds_per_col; // <ndf, trackId>
488490
std::map<std::pair<int, int>, uint64_t> map_mixed_eventId_to_globalBC;
489491

490492
template <bool isTriggerAnalysis, typename TCollisions, typename TPhotons1, typename TPhotons2, typename TSubInfos1, typename TSubInfos2, typename TPreslice1, typename TPreslice2, typename TCut1, typename TCut2, typename TRefTracks>
@@ -599,22 +601,20 @@ struct DiphotonHadronMPC {
599601
} // end of ref track loop
600602

601603
if (npair > 0) {
602-
std::tuple<int, int, int, int> tuple_tmp_diphoton = std::make_tuple(ndf, g1.globalIndex(), g2.globalIndex(), -1);
603-
if (std::find(used_diphotonIds.begin(), used_diphotonIds.end(), tuple_tmp_diphoton) == used_diphotonIds.end()) {
604+
std::tuple<int, int, int> tuple_tmp_diphoton = std::make_tuple(g1.globalIndex(), g2.globalIndex(), -1);
605+
if (std::find(used_diphotonIds_per_col.begin(), used_diphotonIds_per_col.end(), tuple_tmp_diphoton) == used_diphotonIds_per_col.end()) {
604606
emh_diphoton->AddTrackToEventPool(key_df_collision, EMTrack(ndf, -1, collision.globalIndex(), -1, v12.Pt(), v12.Eta(), v12.Phi(), v12.M()));
605-
used_diphotonIds.emplace_back(tuple_tmp_diphoton);
607+
used_diphotonIds_per_col.emplace_back(tuple_tmp_diphoton);
606608
}
607609
}
608610

609-
std::pair<int, int> pair_tmp_id1 = std::make_pair(ndf, g1.globalIndex());
610-
std::pair<int, int> pair_tmp_id2 = std::make_pair(ndf, g2.globalIndex());
611-
if (std::find(used_photonIds.begin(), used_photonIds.end(), pair_tmp_id1) == used_photonIds.end()) {
611+
if (std::find(used_photonIds_per_col.begin(), used_photonIds_per_col.end(), g1.globalIndex()) == used_photonIds_per_col.end()) {
612612
emh1->AddTrackToEventPool(key_df_collision, EMTrack(ndf, g1.globalIndex(), collision.globalIndex(), g1.globalIndex(), g1.pt(), g1.eta(), g1.phi(), 0));
613-
used_photonIds.emplace_back(pair_tmp_id1);
613+
used_photonIds_per_col.emplace_back(g1.globalIndex());
614614
}
615-
if (std::find(used_photonIds.begin(), used_photonIds.end(), pair_tmp_id2) == used_photonIds.end()) {
615+
if (std::find(used_photonIds_per_col.begin(), used_photonIds_per_col.end(), g2.globalIndex()) == used_photonIds_per_col.end()) {
616616
emh1->AddTrackToEventPool(key_df_collision, EMTrack(ndf, g2.globalIndex(), collision.globalIndex(), g2.globalIndex(), g2.pt(), g2.eta(), g2.phi(), 0));
617-
used_photonIds.emplace_back(pair_tmp_id2);
617+
used_photonIds_per_col.emplace_back(g2.globalIndex());
618618
}
619619
ndiphoton++;
620620
} // end of pairing loop
@@ -677,28 +677,34 @@ struct DiphotonHadronMPC {
677677
} // end of ref track loop
678678

679679
if (npair > 0) {
680-
std::tuple<int, int, int, int> tuple_tmp_diphoton = std::make_tuple(ndf, g1.globalIndex(), pos2.trackId(), ele2.trackId());
681-
if (std::find(used_diphotonIds.begin(), used_diphotonIds.end(), tuple_tmp_diphoton) == used_diphotonIds.end()) {
680+
std::tuple<int, int, int> tuple_tmp_diphoton = std::make_tuple(g1.globalIndex(), pos2.trackId(), ele2.trackId());
681+
if (std::find(used_diphotonIds_per_col.begin(), used_diphotonIds_per_col.end(), tuple_tmp_diphoton) == used_diphotonIds_per_col.end()) {
682682
emh_diphoton->AddTrackToEventPool(key_df_collision, EMTrack(ndf, -1, collision.globalIndex(), -1, veeg.Pt(), veeg.Eta(), veeg.Phi(), veeg.M()));
683-
used_diphotonIds.emplace_back(tuple_tmp_diphoton);
683+
used_diphotonIds_per_col.emplace_back(tuple_tmp_diphoton);
684684
}
685685
}
686686

687-
std::pair<int, int> pair_tmp_id1 = std::make_pair(ndf, g1.globalIndex());
688-
std::tuple<int, int, int, int> tuple_tmp_id2 = std::make_tuple(ndf, collision.globalIndex(), pos2.trackId(), ele2.trackId());
689-
if (std::find(used_photonIds.begin(), used_photonIds.end(), pair_tmp_id1) == used_photonIds.end()) {
687+
std::pair<int, int> tuple_tmp_id2 = std::make_pair(pos2.trackId(), ele2.trackId());
688+
if (std::find(used_photonIds_per_col.begin(), used_photonIds_per_col.end(), g1.globalIndex()) == used_photonIds_per_col.end()) {
690689
emh1->AddTrackToEventPool(key_df_collision, EMTrack(ndf, g1.globalIndex(), collision.globalIndex(), -1, g1.pt(), g1.eta(), g1.phi(), 0));
691-
used_photonIds.emplace_back(pair_tmp_id1);
690+
used_photonIds_per_col.emplace_back(g1.globalIndex());
692691
}
693-
if (std::find(used_dileptonIds.begin(), used_dileptonIds.end(), tuple_tmp_id2) == used_dileptonIds.end()) {
692+
if (std::find(used_dileptonIds_per_col.begin(), used_dileptonIds_per_col.end(), tuple_tmp_id2) == used_dileptonIds_per_col.end()) {
694693
emh2->AddTrackToEventPool(key_df_collision, EMTrack(ndf, -1, collision.globalIndex(), -1, v_ee.Pt(), v_ee.Eta(), v_ee.Phi(), v_ee.M()));
695-
used_dileptonIds.emplace_back(tuple_tmp_id2);
694+
used_dileptonIds_per_col.emplace_back(tuple_tmp_id2);
696695
}
697696
ndiphoton++;
698697
} // end of dielectron loop
699698
} // end of g1 loop
700699
} // end of pairing in same event
701700

701+
used_photonIds_per_col.clear();
702+
used_photonIds_per_col.shrink_to_fit();
703+
used_dileptonIds_per_col.clear();
704+
used_dileptonIds_per_col.shrink_to_fit();
705+
used_diphotonIds_per_col.clear();
706+
used_diphotonIds_per_col.shrink_to_fit();
707+
702708
if (ndiphoton > 0) {
703709
emh_ref->ReserveNTracksPerCollision(key_df_collision, refTracks_per_collision.size());
704710
for (const auto& track : refTracks_per_collision) {

0 commit comments

Comments
 (0)