Skip to content

Commit f121afb

Browse files
committed
PWGEM/PhotonMeson: speed up pairing loop
1 parent 65082ef commit f121afb

File tree

4 files changed

+77
-76
lines changed

4 files changed

+77
-76
lines changed

PWGEM/Dilepton/Core/Dilepton.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -512,6 +512,7 @@ struct Dilepton {
512512

513513
used_trackIds_per_col.clear();
514514
used_trackIds_per_col.shrink_to_fit();
515+
map_mixed_eventId_to_globalBC.clear();
515516

516517
delete h2sp_resolution;
517518
}

PWGEM/Dilepton/Core/DileptonHadronMPC.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -459,6 +459,7 @@ struct DileptonHadronMPC {
459459

460460
used_trackIds_per_col.clear();
461461
used_trackIds_per_col.shrink_to_fit();
462+
map_mixed_eventId_to_globalBC.clear();
462463
}
463464

464465
void addhistograms()

PWGEM/PhotonMeson/Core/Pi0EtaToGammaGamma.h

Lines changed: 24 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -309,10 +309,10 @@ struct Pi0EtaToGammaGamma {
309309
delete emh2;
310310
emh2 = 0x0;
311311

312-
used_photonIds.clear();
313-
used_photonIds.shrink_to_fit();
314-
used_dileptonIds.clear();
315-
used_dileptonIds.shrink_to_fit();
312+
used_photonIds_per_col.clear();
313+
used_photonIds_per_col.shrink_to_fit();
314+
used_dileptonIds_per_col.clear();
315+
used_dileptonIds_per_col.shrink_to_fit();
316316
map_mixed_eventId_to_globalBC.clear();
317317
}
318318

@@ -534,11 +534,10 @@ struct Pi0EtaToGammaGamma {
534534
o2::framework::Partition<o2::soa::Filtered<o2::soa::Join<o2::aod::EMPrimaryElectronsFromDalitz, o2::aod::EMPrimaryElectronEMEventIds, o2::aod::EMPrimaryElectronsPrefilterBitDerived>>> positrons = o2::aod::emprimaryelectron::sign > int8_t(0) && dileptoncuts.cfg_min_pt_track < o2::aod::track::pt&& nabs(o2::aod::track::eta) < dileptoncuts.cfg_max_eta_track;
535535
o2::framework::Partition<o2::soa::Filtered<o2::soa::Join<o2::aod::EMPrimaryElectronsFromDalitz, o2::aod::EMPrimaryElectronEMEventIds, o2::aod::EMPrimaryElectronsPrefilterBitDerived>>> electrons = o2::aod::emprimaryelectron::sign < int8_t(0) && dileptoncuts.cfg_min_pt_track < o2::aod::track::pt && nabs(o2::aod::track::eta) < dileptoncuts.cfg_max_eta_track;
536536

537-
// using MyEMH = o2::aod::pwgem::dilepton::utils::EventMixingHandler<std::tuple<int, int, int, int>, std::pair<int, int>, o2::aod::pwgem::dilepton::utils::EMTrack>;
538537
o2::aod::pwgem::dilepton::utils::EventMixingHandler<std::tuple<int, int, int, int>, std::pair<int, int>, o2::aod::pwgem::dilepton::utils::EMTrack>* emh1 = nullptr;
539538
o2::aod::pwgem::dilepton::utils::EventMixingHandler<std::tuple<int, int, int, int>, std::pair<int, int>, o2::aod::pwgem::dilepton::utils::EMTrack>* emh2 = nullptr;
540-
std::vector<std::pair<int, int>> used_photonIds; // <ndf, trackId>
541-
std::vector<std::tuple<int, int, int, int>> used_dileptonIds; // <ndf, trackId>
539+
std::vector<int> used_photonIds_per_col; // <ndf, trackId>
540+
std::vector<std::pair<int, int>> used_dileptonIds_per_col; // <ndf, trackId>
542541
std::map<std::pair<int, int>, uint64_t> map_mixed_eventId_to_globalBC;
543542

544543
template <typename TCollisions, typename TPhotons1, typename TPhotons2, typename TSubInfos1, typename TSubInfos2, typename TPreslice1, typename TPreslice2, typename TCut1, typename TCut2>
@@ -649,16 +648,13 @@ struct Pi0EtaToGammaGamma {
649648
RotationBackground<o2::soa::Join<o2::aod::SkimEMCClusters, o2::aod::EMCEMEventIds>>(v12, v1, v2, photons2_per_collision, g1.globalIndex(), g2.globalIndex(), weight);
650649
}
651650

652-
std::pair<int, int> pair_tmp_id1 = std::make_pair(ndf, g1.globalIndex());
653-
std::pair<int, int> pair_tmp_id2 = std::make_pair(ndf, g2.globalIndex());
654-
655-
if (std::find(used_photonIds.begin(), used_photonIds.end(), pair_tmp_id1) == used_photonIds.end()) {
651+
if (std::find(used_photonIds_per_col.begin(), used_photonIds_per_col.end(), g1.globalIndex()) == used_photonIds_per_col.end()) {
656652
emh1->AddTrackToEventPool(key_df_collision, o2::aod::pwgem::dilepton::utils::EMTrack(-1, g1.globalIndex(), collision.globalIndex(), g1.globalIndex(), g1.pt(), g1.eta(), g1.phi(), 0));
657-
used_photonIds.emplace_back(pair_tmp_id1);
653+
used_photonIds_per_col.emplace_back(g1.globalIndex());
658654
}
659-
if (std::find(used_photonIds.begin(), used_photonIds.end(), pair_tmp_id2) == used_photonIds.end()) {
655+
if (std::find(used_photonIds_per_col.begin(), used_photonIds_per_col.end(), g2.globalIndex()) == used_photonIds_per_col.end()) {
660656
emh1->AddTrackToEventPool(key_df_collision, o2::aod::pwgem::dilepton::utils::EMTrack(-1, g2.globalIndex(), collision.globalIndex(), g2.globalIndex(), g2.pt(), g2.eta(), g2.phi(), 0));
661-
used_photonIds.emplace_back(pair_tmp_id2);
657+
used_photonIds_per_col.emplace_back(g2.globalIndex());
662658
}
663659
ndiphoton++;
664660
} // end of pairing loop
@@ -702,15 +698,14 @@ struct Pi0EtaToGammaGamma {
702698

703699
fRegistry.fill(HIST("Pair/same/hs"), veeg.M(), veeg.Pt(), weight);
704700

705-
std::pair<int, int> pair_tmp_id1 = std::make_pair(ndf, g1.globalIndex());
706-
std::tuple<int, int, int, int> tuple_tmp_id2 = std::make_tuple(ndf, collision.globalIndex(), pos2.trackId(), ele2.trackId());
707-
if (std::find(used_photonIds.begin(), used_photonIds.end(), pair_tmp_id1) == used_photonIds.end()) {
701+
std::pair<int, int> tuple_tmp_id2 = std::make_pair(pos2.trackId(), ele2.trackId());
702+
if (std::find(used_photonIds_per_col.begin(), used_photonIds_per_col.end(), g1.globalIndex()) == used_photonIds_per_col.end()) {
708703
emh1->AddTrackToEventPool(key_df_collision, o2::aod::pwgem::dilepton::utils::EMTrack(-1, g1.globalIndex(), collision.globalIndex(), -1, g1.pt(), g1.eta(), g1.phi(), 0));
709-
used_photonIds.emplace_back(pair_tmp_id1);
704+
used_photonIds_per_col.emplace_back(g1.globalIndex());
710705
}
711-
if (std::find(used_dileptonIds.begin(), used_dileptonIds.end(), tuple_tmp_id2) == used_dileptonIds.end()) {
706+
if (std::find(used_dileptonIds_per_col.begin(), used_dileptonIds_per_col.end(), tuple_tmp_id2) == used_dileptonIds_per_col.end()) {
712707
emh2->AddTrackToEventPool(key_df_collision, o2::aod::pwgem::dilepton::utils::EMTrack(-1, -1, collision.globalIndex(), -1, v_ee.Pt(), v_ee.Eta(), v_ee.Phi(), v_ee.M()));
713-
used_dileptonIds.emplace_back(tuple_tmp_id2);
708+
used_dileptonIds_per_col.emplace_back(tuple_tmp_id2);
714709
}
715710
ndiphoton++;
716711
} // end of dielectron loop
@@ -732,21 +727,23 @@ struct Pi0EtaToGammaGamma {
732727

733728
fRegistry.fill(HIST("Pair/same/hs"), v12.M(), v12.Pt(), weight);
734729

735-
std::pair<int, int> pair_tmp_id1 = std::make_pair(ndf, g1.globalIndex());
736-
std::pair<int, int> pair_tmp_id2 = std::make_pair(ndf, g2.globalIndex());
737-
738-
if (std::find(used_photonIds.begin(), used_photonIds.end(), pair_tmp_id1) == used_photonIds.end()) {
730+
if (std::find(used_photonIds_per_col.begin(), used_photonIds_per_col.end(), g1.globalIndex()) == used_photonIds_per_col.end()) {
739731
emh1->AddTrackToEventPool(key_df_collision, o2::aod::pwgem::dilepton::utils::EMTrack(-1, g1.globalIndex(), collision.globalIndex(), -1, g1.pt(), g1.eta(), g1.phi(), 0));
740-
used_photonIds.emplace_back(pair_tmp_id1);
732+
used_photonIds_per_col.emplace_back(g1.globalIndex());
741733
}
742-
if (std::find(used_photonIds.begin(), used_photonIds.end(), pair_tmp_id2) == used_photonIds.end()) {
734+
if (std::find(used_photonIds_per_col.begin(), used_photonIds_per_col.end(), g2.globalIndex()) == used_photonIds_per_col.end()) {
743735
emh2->AddTrackToEventPool(key_df_collision, o2::aod::pwgem::dilepton::utils::EMTrack(-1, g2.globalIndex(), collision.globalIndex(), -1, g2.pt(), g2.eta(), g2.phi(), 0));
744-
used_photonIds.emplace_back(pair_tmp_id2);
736+
used_photonIds_per_col.emplace_back(g2.globalIndex());
745737
}
746738
ndiphoton++;
747739
} // end of pairing loop
748740
} // end of pairing in same event
749741

742+
used_photonIds_per_col.clear();
743+
used_photonIds_per_col.shrink_to_fit();
744+
used_dileptonIds_per_col.clear();
745+
used_dileptonIds_per_col.shrink_to_fit();
746+
750747
// event mixing
751748
if (!cfgDoMix || !(ndiphoton > 0)) {
752749
continue;

PWGEM/PhotonMeson/Core/TaggingPi0.h

Lines changed: 51 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -19,40 +19,41 @@
1919
#ifndef PWGEM_PHOTONMESON_CORE_TAGGINGPI0_H_
2020
#define PWGEM_PHOTONMESON_CORE_TAGGINGPI0_H_
2121

22+
#include "PWGEM/Dilepton/Utils/EMTrack.h"
23+
#include "PWGEM/Dilepton/Utils/EMTrackUtilities.h"
24+
#include "PWGEM/Dilepton/Utils/EventMixingHandler.h"
25+
#include "PWGEM/PhotonMeson/Core/DalitzEECut.h"
26+
#include "PWGEM/PhotonMeson/Core/EMCPhotonCut.h"
27+
#include "PWGEM/PhotonMeson/Core/EMPhotonEventCut.h"
28+
#include "PWGEM/PhotonMeson/Core/PHOSPhotonCut.h"
29+
#include "PWGEM/PhotonMeson/Core/V0PhotonCut.h"
30+
#include "PWGEM/PhotonMeson/DataModel/gammaTables.h"
31+
#include "PWGEM/PhotonMeson/Utils/EventHistograms.h"
32+
#include "PWGEM/PhotonMeson/Utils/PairUtilities.h"
33+
34+
#include "Common/Core/RecoDecay.h"
35+
36+
#include "CCDB/BasicCCDBManager.h"
37+
#include "DataFormatsParameters/GRPMagField.h"
38+
#include "DataFormatsParameters/GRPObject.h"
39+
#include "DetectorsBase/GeometryManager.h"
40+
#include "Framework/ASoAHelpers.h"
41+
#include "Framework/AnalysisDataModel.h"
42+
#include "Framework/AnalysisTask.h"
43+
#include "Framework/runDataProcessing.h"
44+
45+
#include "Math/Vector4D.h"
46+
#include "TString.h"
47+
48+
#include <algorithm>
49+
#include <array>
2250
#include <cstring>
2351
#include <iterator>
24-
#include <string>
2552
#include <map>
26-
#include <vector>
53+
#include <string>
2754
#include <tuple>
2855
#include <utility>
29-
#include <array>
30-
#include <algorithm>
31-
32-
#include "TString.h"
33-
#include "Math/Vector4D.h"
34-
#include "Framework/runDataProcessing.h"
35-
#include "Framework/AnalysisTask.h"
36-
#include "Framework/AnalysisDataModel.h"
37-
#include "Framework/ASoAHelpers.h"
38-
39-
#include "DetectorsBase/GeometryManager.h"
40-
#include "DataFormatsParameters/GRPObject.h"
41-
#include "DataFormatsParameters/GRPMagField.h"
42-
#include "CCDB/BasicCCDBManager.h"
43-
44-
#include "Common/Core/RecoDecay.h"
45-
#include "PWGEM/PhotonMeson/DataModel/gammaTables.h"
46-
#include "PWGEM/PhotonMeson/Core/V0PhotonCut.h"
47-
#include "PWGEM/PhotonMeson/Core/DalitzEECut.h"
48-
#include "PWGEM/PhotonMeson/Core/PHOSPhotonCut.h"
49-
#include "PWGEM/PhotonMeson/Core/EMCPhotonCut.h"
50-
#include "PWGEM/PhotonMeson/Core/EMPhotonEventCut.h"
51-
#include "PWGEM/PhotonMeson/Utils/PairUtilities.h"
52-
#include "PWGEM/Dilepton/Utils/EMTrack.h"
53-
#include "PWGEM/Dilepton/Utils/EventMixingHandler.h"
54-
#include "PWGEM/PhotonMeson/Utils/EventHistograms.h"
55-
#include "PWGEM/Dilepton/Utils/EMTrackUtilities.h"
56+
#include <vector>
5657

5758
using namespace o2;
5859
using namespace o2::aod;
@@ -306,10 +307,10 @@ struct TaggingPi0 {
306307
delete emh2;
307308
emh2 = 0x0;
308309

309-
used_photonIds.clear();
310-
used_photonIds.shrink_to_fit();
311-
used_dileptonIds.clear();
312-
used_dileptonIds.shrink_to_fit();
310+
used_photonIds_per_col.clear();
311+
used_photonIds_per_col.shrink_to_fit();
312+
used_dileptonIds_per_col.clear();
313+
used_dileptonIds_per_col.shrink_to_fit();
313314
map_mixed_eventId_to_globalBC.clear();
314315
}
315316

@@ -453,14 +454,14 @@ struct TaggingPi0 {
453454
using MyEMH = o2::aod::pwgem::dilepton::utils::EventMixingHandler<std::tuple<int, int, int, int>, std::pair<int, int>, EMTrack>;
454455
MyEMH* emh1 = nullptr;
455456
MyEMH* emh2 = nullptr;
456-
std::vector<std::pair<int, int>> used_photonIds; // <ndf, trackId>
457-
std::vector<std::tuple<int, int, int, int>> used_dileptonIds; // <ndf, trackId>
457+
std::vector<int> used_photonIds_per_col; // <ndf, trackId>
458+
std::vector<std::pair<int, int>> used_dileptonIds_per_col; // <ndf, trackId>
458459
std::map<std::pair<int, int>, uint64_t> map_mixed_eventId_to_globalBC;
459460

460461
template <typename TCollisions, typename TPhotons1, typename TPhotons2, typename TSubInfos1, typename TSubInfos2, typename TPreslice1, typename TPreslice2, typename TCut1, typename TCut2>
461462
void runPairing(TCollisions const& collisions,
462463
TPhotons1 const& photons1, TPhotons2 const& photons2,
463-
TSubInfos1 const& /*subinfos1*/, TSubInfos2 const& /*subinfos2*/,
464+
TSubInfos1 const&, TSubInfos2 const&,
464465
TPreslice1 const& perCollision1, TPreslice2 const& perCollision2,
465466
TCut1 const& cut1, TCut2 const& cut2)
466467
{
@@ -571,15 +572,14 @@ struct TaggingPi0 {
571572
ROOT::Math::PtEtaPhiMVector veeg = v_gamma + v_pos + v_ele;
572573
fRegistry.fill(HIST("Pair/same/hMvsPt"), veeg.M(), v_gamma.Pt(), weight);
573574

574-
std::pair<int, int> pair_tmp_id1 = std::make_pair(ndf, g1.globalIndex());
575-
std::tuple<int, int, int, int> tuple_tmp_id2 = std::make_tuple(ndf, collision.globalIndex(), pos2.trackId(), ele2.trackId());
576-
if (std::find(used_photonIds.begin(), used_photonIds.end(), pair_tmp_id1) == used_photonIds.end()) {
575+
std::pair<int, int> tuple_tmp_id2 = std::make_pair(pos2.trackId(), ele2.trackId());
576+
if (std::find(used_photonIds_per_col.begin(), used_photonIds_per_col.end(), g1.globalIndex()) == used_photonIds_per_col.end()) {
577577
emh1->AddTrackToEventPool(key_df_collision, EMTrack(-1, g1.globalIndex(), collision.globalIndex(), -1, g1.pt(), g1.eta(), g1.phi(), 0));
578-
used_photonIds.emplace_back(pair_tmp_id1);
578+
used_photonIds_per_col.emplace_back(g1.globalIndex());
579579
}
580-
if (std::find(used_dileptonIds.begin(), used_dileptonIds.end(), tuple_tmp_id2) == used_dileptonIds.end()) {
580+
if (std::find(used_dileptonIds_per_col.begin(), used_dileptonIds_per_col.end(), tuple_tmp_id2) == used_dileptonIds_per_col.end()) {
581581
emh2->AddTrackToEventPool(key_df_collision, EMTrack(-1, -1, collision.globalIndex(), -1, v_ee.Pt(), v_ee.Eta(), v_ee.Phi(), v_ee.M()));
582-
used_dileptonIds.emplace_back(tuple_tmp_id2);
582+
used_dileptonIds_per_col.emplace_back(tuple_tmp_id2);
583583
}
584584
ndiphoton++;
585585
} // end of dielectron loop
@@ -598,21 +598,23 @@ struct TaggingPi0 {
598598

599599
fRegistry.fill(HIST("Pair/same/hMvsPt"), v12.M(), v1.Pt(), weight);
600600

601-
std::pair<int, int> pair_tmp_id1 = std::make_pair(ndf, g1.globalIndex());
602-
std::pair<int, int> pair_tmp_id2 = std::make_pair(ndf, g2.globalIndex());
603-
604-
if (std::find(used_photonIds.begin(), used_photonIds.end(), pair_tmp_id1) == used_photonIds.end()) {
601+
if (std::find(used_photonIds_per_col.begin(), used_photonIds_per_col.end(), g1.globalIndex()) == used_photonIds_per_col.end()) {
605602
emh1->AddTrackToEventPool(key_df_collision, EMTrack(-1, g1.globalIndex(), collision.globalIndex(), -1, g1.pt(), g1.eta(), g1.phi(), 0));
606-
used_photonIds.emplace_back(pair_tmp_id1);
603+
used_photonIds_per_col.emplace_back(g1.globalIndex());
607604
}
608-
if (std::find(used_photonIds.begin(), used_photonIds.end(), pair_tmp_id2) == used_photonIds.end()) {
605+
if (std::find(used_photonIds_per_col.begin(), used_photonIds_per_col.end(), g2.globalIndex()) == used_photonIds_per_col.end()) {
609606
emh2->AddTrackToEventPool(key_df_collision, EMTrack(-1, g2.globalIndex(), collision.globalIndex(), -1, g2.pt(), g2.eta(), g2.phi(), 0));
610-
used_photonIds.emplace_back(pair_tmp_id2);
607+
used_photonIds_per_col.emplace_back(g2.globalIndex());
611608
}
612609
ndiphoton++;
613610
} // end of pairing loop
614611
} // end of pairing in same event
615612

613+
used_photonIds_per_col.clear();
614+
used_photonIds_per_col.shrink_to_fit();
615+
used_dileptonIds_per_col.clear();
616+
used_dileptonIds_per_col.shrink_to_fit();
617+
616618
// event mixing
617619
if (!cfgDoMix || !(ndiphoton > 0)) {
618620
continue;

0 commit comments

Comments
 (0)