From ac641e31262ea91f7cc53adef82d5cd8f302c789 Mon Sep 17 00:00:00 2001 From: Daiki Sekihata Date: Sat, 8 Jun 2024 20:57:40 +0200 Subject: [PATCH] PWGEM/PhotonMeson: update event mixing --- PWGEM/PhotonMeson/Tasks/dalitzEEQC.cxx | 3 ++ PWGEM/PhotonMeson/Tasks/dalitzEEQCMC.cxx | 7 ++++ PWGEM/PhotonMeson/Tasks/dielectronQC.cxx | 49 ++++++++++++---------- PWGEM/PhotonMeson/Tasks/dielectronQCMC.cxx | 15 +++++++ 4 files changed, 52 insertions(+), 22 deletions(-) diff --git a/PWGEM/PhotonMeson/Tasks/dalitzEEQC.cxx b/PWGEM/PhotonMeson/Tasks/dalitzEEQC.cxx index c8c916dda08..4f087dfcd60 100644 --- a/PWGEM/PhotonMeson/Tasks/dalitzEEQC.cxx +++ b/PWGEM/PhotonMeson/Tasks/dalitzEEQC.cxx @@ -285,6 +285,9 @@ struct DalitzEEQC { ROOT::Math::PtEtaPhiMVector v1(t1.pt(), t1.eta(), t1.phi(), o2::constants::physics::MassElectron); ROOT::Math::PtEtaPhiMVector v2(t2.pt(), t2.eta(), t2.phi(), o2::constants::physics::MassElectron); ROOT::Math::PtEtaPhiMVector v12 = v1 + v2; + if (abs(v12.Rapidity()) > maxY) { + return false; + } float phiv = getPhivPair(t1.px(), t1.py(), t1.pz(), t2.px(), t2.py(), t2.pz(), t1.sign(), t2.sign(), collision.bz()); if (t1.sign() * t2.sign() < 0) { // ULS diff --git a/PWGEM/PhotonMeson/Tasks/dalitzEEQCMC.cxx b/PWGEM/PhotonMeson/Tasks/dalitzEEQCMC.cxx index bc0e8604697..05964720251 100644 --- a/PWGEM/PhotonMeson/Tasks/dalitzEEQCMC.cxx +++ b/PWGEM/PhotonMeson/Tasks/dalitzEEQCMC.cxx @@ -332,6 +332,9 @@ struct DalitzEEQCMC { ROOT::Math::PtEtaPhiMVector v1(t1.pt(), t1.eta(), t1.phi(), o2::constants::physics::MassElectron); ROOT::Math::PtEtaPhiMVector v2(t2.pt(), t2.eta(), t2.phi(), o2::constants::physics::MassElectron); ROOT::Math::PtEtaPhiMVector v12 = v1 + v2; + if (abs(v12.Rapidity()) > maxY) { + return false; + } float dca_t1_3d = t1.dca3DinSigma(); float dca_t2_3d = t2.dca3DinSigma(); float dca_ee_3d = std::sqrt((dca_t1_3d * dca_t1_3d + dca_t2_3d * dca_t2_3d) / 2.); @@ -532,6 +535,10 @@ struct DalitzEEQCMC { ROOT::Math::PtEtaPhiMVector v2(t2.pt(), t2.eta(), t2.phi(), o2::constants::physics::MassElectron); ROOT::Math::PtEtaPhiMVector v12 = v1 + v2; + if (abs(v12.Rapidity()) > maxY) { + continue; + } + if (mother_id > -1) { auto mcmother = mcparticles.iteratorAt(mother_id); if (mcmother.isPhysicalPrimary() || mcmother.producedByGenerator()) { diff --git a/PWGEM/PhotonMeson/Tasks/dielectronQC.cxx b/PWGEM/PhotonMeson/Tasks/dielectronQC.cxx index 8c22da23b16..b6bc4efd6f0 100644 --- a/PWGEM/PhotonMeson/Tasks/dielectronQC.cxx +++ b/PWGEM/PhotonMeson/Tasks/dielectronQC.cxx @@ -77,7 +77,7 @@ struct dielectronQC { struct : ConfigurableGroup { std::string prefix = "dileptoncut_group"; Configurable cfg_min_mass{"cfg_min_mass", 0.0, "min mass"}; - Configurable cfg_max_mass{"cfg_max_mass", 0.5, "max mass"}; + Configurable cfg_max_mass{"cfg_max_mass", 1e+10, "max mass"}; Configurable cfg_min_pair_dca3d{"cfg_min_pair_dca3d", 0.0, "min pair dca3d in sigma"}; Configurable cfg_max_pair_dca3d{"cfg_max_pair_dca3d", 1e+10, "max pair dca3d in sigma"}; Configurable cfg_apply_phiv{"cfg_apply_phiv", true, "flag to apply phiv cut"}; @@ -142,8 +142,8 @@ struct dielectronQC { ep_bin_edges = std::vector(ConfEPBins.value.begin(), ConfEPBins.value.end()); ep_bin_edges.erase(ep_bin_edges.begin()); - emh_pos = new o2::aod::pwgem::photonmeson::utils::EventMixingHandler, std::pair, EMTrack>(ndepth); - emh_ele = new o2::aod::pwgem::photonmeson::utils::EventMixingHandler, std::pair, EMTrack>(ndepth); + emh_pos = new o2::aod::pwgem::photonmeson::utils::EventMixingHandler, std::pair, EMTrack>(ndepth); + emh_ele = new o2::aod::pwgem::photonmeson::utils::EventMixingHandler, std::pair, EMTrack>(ndepth); DefineEMEventCut(); DefineDileptonCut(); @@ -317,7 +317,8 @@ struct dielectronQC { template bool fillPairInfo(TCollision const& collision, TTrack1 const& t1, TTrack2 const& t2) { - if (t1.trackId() == t2.trackId()) { // this is protection against pairing identical 2 tracks. This happens, when TTCA is used. TTCA can assign a track to several possible collisions. + if (t1.trackId() == t2.trackId()) { // this is protection against pairing 2 identical tracks. This happens, when TTCA is used. TTCA can assign a track to several possible collisions. + // LOGF(info, "event id = %d , same track is found. t1.trackId() = %d, t1.collisionId() = %d, t1.pt() = %f, t1.eta() = %f, t1.phi() = %f, t2.trackId() = %d, t2.collisionId() = %d, t2.pt() = %f, t2.eta() = %f, t2.phi() = %f", ev_id, t1.trackId(), t1.collisionId(), t1.pt(), t1.eta(), t1.phi(), t2.trackId(), t2.collisionId(), t2.pt(), t2.eta(), t2.phi()); return false; } @@ -341,6 +342,10 @@ struct dielectronQC { ROOT::Math::PtEtaPhiMVector v2(t2.pt(), t2.eta(), t2.phi(), o2::constants::physics::MassElectron); ROOT::Math::PtEtaPhiMVector v12 = v1 + v2; + if (abs(v12.Rapidity()) > maxY) { + return false; + } + float dca_t1_3d = t1.dca3DinSigma(); float dca_t2_3d = t2.dca3DinSigma(); float dca_ee_3d = std::sqrt((dca_t1_3d * dca_t1_3d + dca_t2_3d * dca_t2_3d) / 2.); @@ -383,34 +388,34 @@ struct dielectronQC { epbin = static_cast(ep_bin_edges.size()) - 2; } - std::pair key_df_collision = std::make_pair(ndf, collision.globalIndex()); + std::pair key_df_collision = std::make_pair(ndf, collision.globalIndex()); - std::tuple tuple_tmp_id1 = std::make_tuple(ndf, collision.globalIndex(), t1.trackId()); - std::tuple tuple_tmp_id2 = std::make_tuple(ndf, collision.globalIndex(), t2.trackId()); + std::pair pair_tmp_id1 = std::make_pair(ndf, t1.globalIndex()); + std::pair pair_tmp_id2 = std::make_pair(ndf, t2.globalIndex()); if (t1.sign() > 0) { - if (std::find(used_trackIds.begin(), used_trackIds.end(), tuple_tmp_id1) == used_trackIds.end()) { + if (std::find(used_trackIds.begin(), used_trackIds.end(), pair_tmp_id1) == used_trackIds.end()) { emh_pos->AddTrackToEventPool(key_df_collision, EMTrack(collision.globalIndex(), t1.trackId(), t1.pt(), t1.eta(), t1.phi(), o2::constants::physics::MassElectron, t1.sign(), t1.dca3DinSigma())); - used_trackIds.emplace_back(tuple_tmp_id1); + used_trackIds.emplace_back(pair_tmp_id1); fillTrackInfo(t1); } } else { - if (std::find(used_trackIds.begin(), used_trackIds.end(), tuple_tmp_id1) == used_trackIds.end()) { + if (std::find(used_trackIds.begin(), used_trackIds.end(), pair_tmp_id1) == used_trackIds.end()) { emh_ele->AddTrackToEventPool(key_df_collision, EMTrack(collision.globalIndex(), t1.trackId(), t1.pt(), t1.eta(), t1.phi(), o2::constants::physics::MassElectron, t1.sign(), t1.dca3DinSigma())); - used_trackIds.emplace_back(tuple_tmp_id1); + used_trackIds.emplace_back(pair_tmp_id1); fillTrackInfo(t1); } } if (t2.sign() > 0) { - if (std::find(used_trackIds.begin(), used_trackIds.end(), tuple_tmp_id2) == used_trackIds.end()) { + if (std::find(used_trackIds.begin(), used_trackIds.end(), pair_tmp_id2) == used_trackIds.end()) { emh_pos->AddTrackToEventPool(key_df_collision, EMTrack(collision.globalIndex(), t2.trackId(), t2.pt(), t2.eta(), t2.phi(), o2::constants::physics::MassElectron, t2.sign(), t2.dca3DinSigma())); - used_trackIds.emplace_back(tuple_tmp_id2); + used_trackIds.emplace_back(pair_tmp_id2); fillTrackInfo(t2); } } else { - if (std::find(used_trackIds.begin(), used_trackIds.end(), tuple_tmp_id2) == used_trackIds.end()) { + if (std::find(used_trackIds.begin(), used_trackIds.end(), pair_tmp_id2) == used_trackIds.end()) { emh_ele->AddTrackToEventPool(key_df_collision, EMTrack(collision.globalIndex(), t2.trackId(), t2.pt(), t2.eta(), t2.phi(), o2::constants::physics::MassElectron, t2.sign(), t2.dca3DinSigma())); - used_trackIds.emplace_back(tuple_tmp_id2); + used_trackIds.emplace_back(pair_tmp_id2); fillTrackInfo(t2); } } @@ -451,8 +456,8 @@ struct dielectronQC { fRegistry.fill(HIST("Track/hTOFNsigmaPr"), track.tpcInnerParam(), track.tofNSigmaPr()); } - o2::aod::pwgem::photonmeson::utils::EventMixingHandler, std::pair, EMTrack>* emh_pos = nullptr; - o2::aod::pwgem::photonmeson::utils::EventMixingHandler, std::pair, EMTrack>* emh_ele = nullptr; + o2::aod::pwgem::photonmeson::utils::EventMixingHandler, std::pair, EMTrack>* emh_pos = nullptr; + o2::aod::pwgem::photonmeson::utils::EventMixingHandler, std::pair, EMTrack>* emh_ele = nullptr; Filter collisionFilter_centrality = (cfgCentMin < o2::aod::cent::centFT0M && o2::aod::cent::centFT0M < cfgCentMax) || (cfgCentMin < o2::aod::cent::centFT0A && o2::aod::cent::centFT0A < cfgCentMax) || (cfgCentMin < o2::aod::cent::centFT0C && o2::aod::cent::centFT0C < cfgCentMax); using FilteredMyCollisions = soa::Filtered; @@ -465,7 +470,7 @@ struct dielectronQC { Partition posTracks = o2::aod::emprimaryelectron::sign > int8_t(0); Partition negTracks = o2::aod::emprimaryelectron::sign < int8_t(0); - std::vector> used_trackIds; + std::vector> used_trackIds; int ndf = 0; void processQC(FilteredMyCollisions const& collisions, FilteredMyTracks const& tracks) { @@ -485,7 +490,7 @@ struct dielectronQC { auto posTracks_per_coll = posTracks->sliceByCached(o2::aod::emprimaryelectron::emeventId, collision.globalIndex(), cache); auto negTracks_per_coll = negTracks->sliceByCached(o2::aod::emprimaryelectron::emeventId, collision.globalIndex(), cache); - // LOGF(info, "centrality = %f , posTracks_per_coll.size() = %d, negTracks_per_coll.size() = %d", centralities[cfgCentEstimator], posTracks_per_coll.size(), negTracks_per_coll.size()); + // LOGF(info, "collision.globalIndex() = %d , collision.posZ() = %f , collision.numContrib() = %d, centrality = %f , posTracks_per_coll.size() = %d, negTracks_per_coll.size() = %d", collision.globalIndex(), collision.posZ(), collision.numContrib(), centralities[cfgCentEstimator], posTracks_per_coll.size(), negTracks_per_coll.size()); int nuls = 0, nlspp = 0, nlsmm = 0; for (auto& [pos, ele] : combinations(CombinationsFullIndexPolicy(posTracks_per_coll, negTracks_per_coll))) { // ULS @@ -536,18 +541,18 @@ struct dielectronQC { } std::tuple key_bin = std::make_tuple(zbin, centbin, epbin); - std::pair key_df_collision = std::make_pair(ndf, collision.globalIndex()); + std::pair key_df_collision = std::make_pair(ndf, collision.globalIndex()); // make a vector of selected photons in this collision. auto selected_posTracks_in_this_event = emh_pos->GetTracksPerCollision(key_df_collision); auto selected_negTracks_in_this_event = emh_ele->GetTracksPerCollision(key_df_collision); - // LOGF(info, "N selected tracks in current event (%d, %d), npos = %d , nele = %d", ndf, collision.globalIndex(), selected_posTracks_in_this_event.size(), selected_negTracks_in_this_event.size()); + // LOGF(info, "N selected tracks in current event (%d, %d), zvtx = %f, centrality = %f , npos = %d , nele = %d, nuls = %d , nlspp = %d, nlsmm = %d", ndf, collision.globalIndex(), collision.posZ(), centralities[cfgCentEstimator], selected_posTracks_in_this_event.size(), selected_negTracks_in_this_event.size(), nuls, nlspp, nlsmm); auto collisionIds_in_mixing_pool = emh_pos->GetCollisionIdsFromEventPool(key_bin); // pos/ele does not matter. for (auto& mix_dfId_collisionId : collisionIds_in_mixing_pool) { int mix_dfId = mix_dfId_collisionId.first; - int64_t mix_collisionId = mix_dfId_collisionId.second; + int mix_collisionId = mix_dfId_collisionId.second; if (collision.globalIndex() == mix_collisionId && ndf == mix_dfId) { // this never happens. only protection. continue; diff --git a/PWGEM/PhotonMeson/Tasks/dielectronQCMC.cxx b/PWGEM/PhotonMeson/Tasks/dielectronQCMC.cxx index 45eb5a0d3e2..1ef1e0c818f 100644 --- a/PWGEM/PhotonMeson/Tasks/dielectronQCMC.cxx +++ b/PWGEM/PhotonMeson/Tasks/dielectronQCMC.cxx @@ -382,6 +382,11 @@ struct dielectronQCMC { ROOT::Math::PtEtaPhiMVector v1(t1.pt(), t1.eta(), t1.phi(), o2::constants::physics::MassElectron); ROOT::Math::PtEtaPhiMVector v2(t2.pt(), t2.eta(), t2.phi(), o2::constants::physics::MassElectron); ROOT::Math::PtEtaPhiMVector v12 = v1 + v2; + + if (abs(v12.Rapidity()) > maxY) { + return false; + } + float dca_t1_3d = t1.dca3DinSigma(); float dca_t2_3d = t2.dca3DinSigma(); float dca_ee_3d = std::sqrt((dca_t1_3d * dca_t1_3d + dca_t2_3d * dca_t2_3d) / 2.); @@ -697,6 +702,10 @@ struct dielectronQCMC { ROOT::Math::PtEtaPhiMVector v2(t2.pt(), t2.eta(), t2.phi(), o2::constants::physics::MassElectron); ROOT::Math::PtEtaPhiMVector v12 = v1 + v2; + if (abs(v12.Rapidity()) > maxY) { + continue; + } + if (mother_id > -1) { auto mcmother = mcparticles.iteratorAt(mother_id); if (mcmother.isPhysicalPrimary() || mcmother.producedByGenerator()) { @@ -818,6 +827,9 @@ struct dielectronQCMC { ROOT::Math::PtEtaPhiMVector v1(t1.pt(), t1.eta(), t1.phi(), o2::constants::physics::MassElectron); ROOT::Math::PtEtaPhiMVector v2(t2.pt(), t2.eta(), t2.phi(), o2::constants::physics::MassElectron); ROOT::Math::PtEtaPhiMVector v12 = v1 + v2; + if (abs(v12.Rapidity()) > maxY) { + continue; + } if (hfee_type > -1) { auto mp1 = mcparticles.iteratorAt(t1.mothersIds()[0]); auto mp2 = mcparticles.iteratorAt(t2.mothersIds()[0]); @@ -872,6 +884,9 @@ struct dielectronQCMC { ROOT::Math::PtEtaPhiMVector v1(t1.pt(), t1.eta(), t1.phi(), o2::constants::physics::MassElectron); ROOT::Math::PtEtaPhiMVector v2(t2.pt(), t2.eta(), t2.phi(), o2::constants::physics::MassElectron); ROOT::Math::PtEtaPhiMVector v12 = v1 + v2; + if (abs(v12.Rapidity()) > maxY) { + continue; + } if (hfee_type > -1) { auto mp1 = mcparticles.iteratorAt(t1.mothersIds()[0]); auto mp2 = mcparticles.iteratorAt(t2.mothersIds()[0]);