Skip to content

Commit baa7d47

Browse files
committed
PWGEM/Dilepton: reduce memory consumption in createResolutionMap.cxx
1 parent 9aceb89 commit baa7d47

File tree

1 file changed

+121
-56
lines changed

1 file changed

+121
-56
lines changed

PWGEM/Dilepton/Tasks/createResolutionMap.cxx

Lines changed: 121 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ struct CreateResolutionMap {
6868

6969
Configurable<int> cfgEventGeneratorType{"cfgEventGeneratorType", -1, "if positive, select event generator type. i.e. gap or signal"};
7070
Configurable<int> cfgCentEstimator{"cfgCentEstimator", 2, "FT0M:0, FT0A:1, FT0C:2"};
71-
Configurable<bool> cfg_require_true_mc_collision_association{"cfg_require_true_mc_collision_association", true, "flag to require true mc collision association"};
71+
Configurable<bool> cfg_require_true_mc_collision_association{"cfg_require_true_mc_collision_association", false, "flag to require true mc collision association"};
7272
Configurable<bool> cfg_reject_fake_match_its_tpc{"cfg_reject_fake_match_its_tpc", false, "flag to reject fake match between ITS-TPC"};
7373
// Configurable<bool> cfg_reject_fake_match_its_tpc_tof{"cfg_reject_fake_match_its_tpc_tof", false, "flag to reject fake match between ITS-TPC-TOF"};
7474
Configurable<bool> cfg_reject_fake_match_mft_mch{"cfg_reject_fake_match_mft_mch", false, "flag to reject fake match between MFT-MCH"};
@@ -84,6 +84,9 @@ struct CreateResolutionMap {
8484
ConfigurableAxis ConfDeltaEtaBins{"ConfDeltaEtaBins", {200, -0.5f, +0.5f}, "deta bins for output histograms"};
8585
ConfigurableAxis ConfDeltaPhiBins{"ConfDeltaPhiBins", {200, -0.5f, +0.5f}, "dphi bins for output histograms"};
8686

87+
Configurable<bool> cfgFillTHnSparse{"cfgFillTHnSparse", true, "fill THnSparse for output"};
88+
Configurable<bool> cfgFillTH2{"cfgFillTH2", false, "fill TH2 for output"};
89+
8790
Configurable<bool> cfgRequireGoodRCT{"cfgRequireGoodRCT", false, "require good detector flag in run condtion table"};
8891
Configurable<std::string> cfgRCTLabelCB{"cfgRCTLabelCB", "CBT_hadronPID", "select 1 [CBT, CBT_hadron] see O2Physics/Common/CCDB/RCTSelectionFlags.h"};
8992
Configurable<std::string> cfgRCTLabelFWDSA{"cfgRCTLabelFWDSA", "CBT_muon", "select 1 [CBT_muon] see O2Physics/Common/CCDB/RCTSelectionFlags.h"};
@@ -212,18 +215,22 @@ struct CreateResolutionMap {
212215
registry.add("Event/Electron/hImpPar_Centrality", "true imapact parameter vs. estimated centrality;impact parameter (fm);centrality (%)", kTH2F, {{200, 0, 20}, {110, 0, 110}}, true);
213216
registry.add("Event/Muon/hImpPar_Centrality", "true imapact parameter vs. estimated centrality;impact parameter (fm);centrality (%)", kTH2F, {{200, 0, 20}, {110, 0, 110}}, true);
214217

215-
registry.add("Electron/hPt", "rec. p_{T,l};p_{T,l} (GeV/c)", kTH1F, {{1000, 0, 10}}, false);
216-
registry.add("Electron/hEtaPhi", "rec. #eta vs. #varphi;#varphi_{l} (rad.);#eta_{l}", kTH2F, {{90, 0, 2 * M_PI}, {100, -5, +5}}, false);
217-
registry.add("Electron/Ptgen_RelDeltaPt", "resolution", kTH2F, {{axis_pt_gen}, {axis_dpt}}, true);
218-
registry.add("Electron/Ptgen_DeltaEta", "resolution", kTH2F, {{axis_pt_gen}, {axis_deta}}, true);
219-
registry.add("Electron/Ptgen_DeltaPhi_Pos", "resolution", kTH2F, {{axis_pt_gen}, {axis_dphi}}, true);
220-
registry.add("Electron/Ptgen_DeltaPhi_Neg", "resolution", kTH2F, {{axis_pt_gen}, {axis_dphi}}, true);
221-
registry.addClone("Electron/", "StandaloneMuon/");
222-
registry.addClone("Electron/", "GlobalMuon/");
223-
224-
registry.add("Electron/hs_reso", "8D resolution positive", kTHnSparseF, {axis_cent, axis_pt_gen, axis_eta_cb_gen, axis_phi_gen, axis_charge_gen, axis_dpt, axis_deta, axis_dphi}, true);
225-
registry.add("StandaloneMuon/hs_reso", "8D resolution positive", kTHnSparseF, {axis_cent, axis_pt_gen, axis_eta_fwd_gen, axis_phi_gen, axis_charge_gen, axis_dpt, axis_deta, axis_dphi}, true);
226-
registry.add("GlobalMuon/hs_reso", "8D resolution positive", kTHnSparseF, {axis_cent, axis_pt_gen, axis_eta_fwd_gen, axis_phi_gen, axis_charge_gen, axis_dpt, axis_deta, axis_dphi}, true);
218+
if (cfgFillTH2) {
219+
registry.add("Electron/hPt", "rec. p_{T,l};p_{T,l} (GeV/c)", kTH1F, {{1000, 0, 10}}, false);
220+
registry.add("Electron/hEtaPhi", "rec. #eta vs. #varphi;#varphi_{l} (rad.);#eta_{l}", kTH2F, {{90, 0, 2 * M_PI}, {100, -5, +5}}, false);
221+
registry.add("Electron/Ptgen_RelDeltaPt", "resolution", kTH2F, {{axis_pt_gen}, {axis_dpt}}, true);
222+
registry.add("Electron/Ptgen_DeltaEta", "resolution", kTH2F, {{axis_pt_gen}, {axis_deta}}, true);
223+
registry.add("Electron/Ptgen_DeltaPhi_Pos", "resolution", kTH2F, {{axis_pt_gen}, {axis_dphi}}, true);
224+
registry.add("Electron/Ptgen_DeltaPhi_Neg", "resolution", kTH2F, {{axis_pt_gen}, {axis_dphi}}, true);
225+
registry.addClone("Electron/", "StandaloneMuon/");
226+
registry.addClone("Electron/", "GlobalMuon/");
227+
}
228+
229+
if (cfgFillTHnSparse) {
230+
registry.add("Electron/hs_reso", "8D resolution", kTHnSparseF, {axis_cent, axis_pt_gen, axis_eta_cb_gen, axis_phi_gen, axis_charge_gen, axis_dpt, axis_deta, axis_dphi}, true);
231+
registry.add("StandaloneMuon/hs_reso", "8D resolution", kTHnSparseF, {axis_cent, axis_pt_gen, axis_eta_fwd_gen, axis_phi_gen, axis_charge_gen, axis_dpt, axis_deta, axis_dphi}, true);
232+
registry.add("GlobalMuon/hs_reso", "8D resolution", kTHnSparseF, {axis_cent, axis_pt_gen, axis_eta_fwd_gen, axis_phi_gen, axis_charge_gen, axis_dpt, axis_deta, axis_dphi}, true);
233+
}
227234
}
228235

229236
void initCCDB(aod::BCsWithTimestamps::iterator const& bc)
@@ -376,8 +383,8 @@ struct CreateResolutionMap {
376383
std::pair<int8_t, std::set<uint8_t>> itsRequirement_ibany = {1, {0, 1, 2}}; // any hits on 3 ITS ib layers.
377384
std::pair<int8_t, std::set<uint8_t>> itsRequirement_ib1st = {1, {0}}; // first hit on ITS ib layers.
378385

379-
template <typename TCollision, typename TTrack>
380-
bool isSelectedTrack(TCollision const& collision, TTrack const& track)
386+
template <typename TTrack>
387+
bool isSelectedTrack(TTrack const& track)
381388
{
382389
if (!track.hasITS() || !track.hasTPC()) {
383390
return false;
@@ -425,23 +432,63 @@ struct CreateResolutionMap {
425432
return false;
426433
}
427434

428-
o2::dataformats::DCA mDcaInfoCov;
429-
mDcaInfoCov.set(999, 999, 999, 999, 999);
430-
auto track_par_cov_recalc = getTrackParCov(track);
431-
track_par_cov_recalc.setPID(o2::track::PID::Electron);
432-
mVtx.setPos({collision.posX(), collision.posY(), collision.posZ()});
433-
mVtx.setCov(collision.covXX(), collision.covXY(), collision.covYY(), collision.covXZ(), collision.covYZ(), collision.covZZ());
434-
o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, track_par_cov_recalc, 2.f, matCorr, &mDcaInfoCov);
435-
float dcaXY = mDcaInfoCov.getY();
436-
float dcaZ = mDcaInfoCov.getZ();
435+
return true;
436+
}
437+
438+
template <typename TTrack>
439+
bool isSelectedTrackKine(TTrack const& track, const float pt, const float eta, const float dcaXY, const float dcaZ)
440+
{
441+
if (!track.hasITS() || !track.hasTPC()) {
442+
return false;
443+
}
444+
445+
if (track.tpcChi2NCl() > electroncuts.cfg_max_chi2tpc) {
446+
return false;
447+
}
448+
449+
if (track.itsChi2NCl() > electroncuts.cfg_max_chi2its) {
450+
return false;
451+
}
452+
453+
if (track.itsNCls() < electroncuts.cfg_min_ncluster_its) {
454+
return false;
455+
}
456+
if (track.itsNClsInnerBarrel() < electroncuts.cfg_min_ncluster_itsib) {
457+
return false;
458+
}
459+
460+
auto hits = std::count_if(itsRequirement_ibany.second.begin(), itsRequirement_ibany.second.end(), [&](auto&& requiredLayer) { return track.itsClusterMap() & (1 << requiredLayer); });
461+
if (hits < itsRequirement_ibany.first) {
462+
return false;
463+
}
464+
if (electroncuts.cfg_require_itsib_1st) {
465+
auto hit_ib1st = std::count_if(itsRequirement_ib1st.second.begin(), itsRequirement_ib1st.second.end(), [&](auto&& requiredLayer) { return track.itsClusterMap() & (1 << requiredLayer); });
466+
if (hit_ib1st < itsRequirement_ib1st.first) {
467+
return false;
468+
}
469+
}
437470

438-
// LOGF(info, "collision.globalIndex() = %d, track.collisionId() = %d, track.pt() = %.16f, track_par_cov_recalc.getPt() = %.16f", collision.globalIndex(), track.collisionId(), track.pt(), track_par_cov_recalc.getPt());
471+
if (track.tpcNClsFound() < electroncuts.cfg_min_ncluster_tpc) {
472+
return false;
473+
}
474+
475+
if (track.tpcNClsCrossedRows() < electroncuts.cfg_min_ncrossedrows) {
476+
return false;
477+
}
478+
479+
if (track.tpcCrossedRowsOverFindableCls() < electroncuts.cfg_min_tpc_cr_findable_ratio) {
480+
return false;
481+
}
482+
483+
if (track.tpcFractionSharedCls() > electroncuts.cfg_max_frac_shared_clusters_tpc) {
484+
return false;
485+
}
439486

440487
if (std::fabs(dcaXY) > electroncuts.cfg_max_dcaxy || std::fabs(dcaZ) > electroncuts.cfg_max_dcaz) {
441488
return false;
442489
}
443490

444-
if (track_par_cov_recalc.getPt() < electroncuts.cfg_min_pt_track || std::fabs(track_par_cov_recalc.getEta()) > electroncuts.cfg_max_eta_track) {
491+
if (pt < electroncuts.cfg_min_pt_track || std::fabs(eta) > electroncuts.cfg_max_eta_track) {
445492
return false;
446493
}
447494

@@ -555,29 +602,38 @@ struct CreateResolutionMap {
555602
if (cfgRequireGoodRCT && !rctCheckerFWDSA.checkTable(collision)) {
556603
return;
557604
}
558-
registry.fill(HIST("StandaloneMuon/hPt"), pt);
559-
registry.fill(HIST("StandaloneMuon/hEtaPhi"), phi, eta);
560-
registry.fill(HIST("StandaloneMuon/hs_reso"), centrality, mcparticle.pt(), mcparticle.eta(), mcparticle.phi(), -mcparticle.pdgCode() / 13, (mcparticle.pt() - pt) / mcparticle.pt(), mcparticle.eta() - eta, mcparticle.phi() - phi);
561-
registry.fill(HIST("StandaloneMuon/Ptgen_RelDeltaPt"), mcparticle.pt(), (mcparticle.pt() - pt) / mcparticle.pt());
562-
registry.fill(HIST("StandaloneMuon/Ptgen_DeltaEta"), mcparticle.pt(), mcparticle.eta() - eta);
563-
if (mcparticle.pdgCode() == -13) { // positive muon
564-
registry.fill(HIST("StandaloneMuon/Ptgen_DeltaPhi_Pos"), mcparticle.pt(), mcparticle.phi() - phi);
565-
} else if (mcparticle.pdgCode() == 13) { // negative muon
566-
registry.fill(HIST("StandaloneMuon/Ptgen_DeltaPhi_Neg"), mcparticle.pt(), mcparticle.phi() - phi);
605+
if (cfgFillTHnSparse) {
606+
registry.fill(HIST("StandaloneMuon/hs_reso"), centrality, mcparticle.pt(), mcparticle.eta(), mcparticle.phi(), -mcparticle.pdgCode() / 13, (mcparticle.pt() - pt) / mcparticle.pt(), mcparticle.eta() - eta, mcparticle.phi() - phi);
607+
}
608+
609+
if (cfgFillTH2) {
610+
registry.fill(HIST("StandaloneMuon/hPt"), pt);
611+
registry.fill(HIST("StandaloneMuon/hEtaPhi"), phi, eta);
612+
registry.fill(HIST("StandaloneMuon/Ptgen_RelDeltaPt"), mcparticle.pt(), (mcparticle.pt() - pt) / mcparticle.pt());
613+
registry.fill(HIST("StandaloneMuon/Ptgen_DeltaEta"), mcparticle.pt(), mcparticle.eta() - eta);
614+
if (mcparticle.pdgCode() == -13) { // positive muon
615+
registry.fill(HIST("StandaloneMuon/Ptgen_DeltaPhi_Pos"), mcparticle.pt(), mcparticle.phi() - phi);
616+
} else if (mcparticle.pdgCode() == 13) { // negative muon
617+
registry.fill(HIST("StandaloneMuon/Ptgen_DeltaPhi_Neg"), mcparticle.pt(), mcparticle.phi() - phi);
618+
}
567619
}
568620
} else if (muon.trackType() == static_cast<uint8_t>(o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack)) {
569621
if (cfgRequireGoodRCT && !rctCheckerFWDGL.checkTable(collision)) {
570622
return;
571623
}
572-
registry.fill(HIST("GlobalMuon/hPt"), pt);
573-
registry.fill(HIST("GlobalMuon/hEtaPhi"), phi, eta);
574-
registry.fill(HIST("GlobalMuon/hs_reso"), centrality, mcparticle.pt(), mcparticle.eta(), mcparticle.phi(), -mcparticle.pdgCode() / 13, (mcparticle.pt() - pt) / mcparticle.pt(), mcparticle.eta() - eta, mcparticle.phi() - phi);
575-
registry.fill(HIST("GlobalMuon/Ptgen_RelDeltaPt"), mcparticle.pt(), (mcparticle.pt() - pt) / mcparticle.pt());
576-
registry.fill(HIST("GlobalMuon/Ptgen_DeltaEta"), mcparticle.pt(), mcparticle.eta() - eta);
577-
if (mcparticle.pdgCode() == -13) { // positive muon
578-
registry.fill(HIST("GlobalMuon/Ptgen_DeltaPhi_Pos"), mcparticle.pt(), mcparticle.phi() - phi);
579-
} else if (mcparticle.pdgCode() == 13) { // negative muon
580-
registry.fill(HIST("GlobalMuon/Ptgen_DeltaPhi_Neg"), mcparticle.pt(), mcparticle.phi() - phi);
624+
if (cfgFillTHnSparse) {
625+
registry.fill(HIST("GlobalMuon/hs_reso"), centrality, mcparticle.pt(), mcparticle.eta(), mcparticle.phi(), -mcparticle.pdgCode() / 13, (mcparticle.pt() - pt) / mcparticle.pt(), mcparticle.eta() - eta, mcparticle.phi() - phi);
626+
}
627+
if (cfgFillTH2) {
628+
registry.fill(HIST("GlobalMuon/hPt"), pt);
629+
registry.fill(HIST("GlobalMuon/hEtaPhi"), phi, eta);
630+
registry.fill(HIST("GlobalMuon/Ptgen_RelDeltaPt"), mcparticle.pt(), (mcparticle.pt() - pt) / mcparticle.pt());
631+
registry.fill(HIST("GlobalMuon/Ptgen_DeltaEta"), mcparticle.pt(), mcparticle.eta() - eta);
632+
if (mcparticle.pdgCode() == -13) { // positive muon
633+
registry.fill(HIST("GlobalMuon/Ptgen_DeltaPhi_Pos"), mcparticle.pt(), mcparticle.phi() - phi);
634+
} else if (mcparticle.pdgCode() == 13) { // negative muon
635+
registry.fill(HIST("GlobalMuon/Ptgen_DeltaPhi_Neg"), mcparticle.pt(), mcparticle.phi() - phi);
636+
}
581637
}
582638
}
583639
return;
@@ -655,7 +711,8 @@ struct CreateResolutionMap {
655711
if (cfg_require_true_mc_collision_association && mcparticle.mcCollisionId() != collision.mcCollisionId()) {
656712
return;
657713
}
658-
if (!isSelectedTrack(collision, track)) {
714+
715+
if (!isSelectedTrack(track)) {
659716
return;
660717
}
661718

@@ -666,23 +723,31 @@ struct CreateResolutionMap {
666723
mVtx.setPos({collision.posX(), collision.posY(), collision.posZ()});
667724
mVtx.setCov(collision.covXX(), collision.covXY(), collision.covYY(), collision.covXZ(), collision.covYZ(), collision.covZZ());
668725
o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, track_par_cov_recalc, 2.f, matCorr, &mDcaInfoCov);
669-
// float dcaXY = mDcaInfoCov.getY();
670-
// float dcaZ = mDcaInfoCov.getZ();
726+
float dcaXY = mDcaInfoCov.getY();
727+
float dcaZ = mDcaInfoCov.getZ();
671728

672729
float pt = track_par_cov_recalc.getPt();
673730
float eta = track_par_cov_recalc.getEta();
674731
float phi = track_par_cov_recalc.getPhi();
675732
o2::math_utils::bringTo02Pi(phi);
676733

677-
registry.fill(HIST("Electron/hPt"), pt);
678-
registry.fill(HIST("Electron/hEtaPhi"), phi, eta);
679-
registry.fill(HIST("Electron/hs_reso"), centrality, mcparticle.pt(), mcparticle.eta(), mcparticle.phi(), -mcparticle.pdgCode() / 11, (mcparticle.pt() - pt) / mcparticle.pt(), mcparticle.eta() - eta, mcparticle.phi() - phi);
680-
registry.fill(HIST("Electron/Ptgen_RelDeltaPt"), mcparticle.pt(), (mcparticle.pt() - pt) / mcparticle.pt());
681-
registry.fill(HIST("Electron/Ptgen_DeltaEta"), mcparticle.pt(), mcparticle.eta() - eta);
682-
if (mcparticle.pdgCode() == -11) { // positron
683-
registry.fill(HIST("Electron/Ptgen_DeltaPhi_Pos"), mcparticle.pt(), mcparticle.phi() - phi);
684-
} else if (mcparticle.pdgCode() == 11) { // electron
685-
registry.fill(HIST("Electron/Ptgen_DeltaPhi_Neg"), mcparticle.pt(), mcparticle.phi() - phi);
734+
if (!isSelectedTrackKine(track, pt, eta, dcaXY, dcaZ)) {
735+
return;
736+
}
737+
738+
if (cfgFillTHnSparse) {
739+
registry.fill(HIST("Electron/hs_reso"), centrality, mcparticle.pt(), mcparticle.eta(), mcparticle.phi(), -mcparticle.pdgCode() / 11, (mcparticle.pt() - pt) / mcparticle.pt(), mcparticle.eta() - eta, mcparticle.phi() - phi);
740+
}
741+
if (cfgFillTH2) {
742+
registry.fill(HIST("Electron/hPt"), pt);
743+
registry.fill(HIST("Electron/hEtaPhi"), phi, eta);
744+
registry.fill(HIST("Electron/Ptgen_RelDeltaPt"), mcparticle.pt(), (mcparticle.pt() - pt) / mcparticle.pt());
745+
registry.fill(HIST("Electron/Ptgen_DeltaEta"), mcparticle.pt(), mcparticle.eta() - eta);
746+
if (mcparticle.pdgCode() == -11) { // positron
747+
registry.fill(HIST("Electron/Ptgen_DeltaPhi_Pos"), mcparticle.pt(), mcparticle.phi() - phi);
748+
} else if (mcparticle.pdgCode() == 11) { // electron
749+
registry.fill(HIST("Electron/Ptgen_DeltaPhi_Neg"), mcparticle.pt(), mcparticle.phi() - phi);
750+
}
686751
}
687752
}
688753

0 commit comments

Comments
 (0)