Skip to content

Commit 5f54bab

Browse files
authored
[PWGEM/Dilepton] update MC tasks (AliceO2Group#8496)
1 parent f92f61d commit 5f54bab

File tree

3 files changed

+122
-150
lines changed

3 files changed

+122
-150
lines changed

PWGEM/Dilepton/Core/Dilepton.h

Lines changed: 52 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -771,6 +771,26 @@ struct Dilepton {
771771
}
772772
}
773773

774+
std::map<std::tuple<int, int, int>, float> map_eta_geom; // map <dfId, collisionId, trackId> -> geometrical eta position at propagated point
775+
std::map<std::tuple<int, int, int>, float> map_phi_geom; // map <dfId, collisionId, trackId> -> geometrical phi position at propagated point
776+
777+
template <typename TTracks>
778+
void propagateElectron(TTracks const& tracks)
779+
{
780+
// this has to be called after initCCDB for bz.
781+
for (auto& track : tracks) {
782+
auto track_par_cov = getTrackParCov(track);
783+
track_par_cov.setPID(o2::track::PID::Electron);
784+
o2::base::Propagator::Instance()->propagateToX(track_par_cov, dielectroncuts.cfg_x_to_go, d_bz, o2::base::PropagatorImpl<float>::MAX_SIN_PHI, o2::base::PropagatorImpl<float>::MAX_STEP, matCorr);
785+
auto xyz = track_par_cov.getXYZGlo();
786+
float eta = RecoDecay::eta(std::array{xyz.X(), xyz.Y(), xyz.Z()});
787+
float phi = RecoDecay::phi(std::array{xyz.X(), xyz.Y()});
788+
o2::math_utils::bringTo02Pi(phi);
789+
map_eta_geom[std::make_tuple(ndf, track.emeventId(), track.globalIndex())] = eta;
790+
map_phi_geom[std::make_tuple(ndf, track.emeventId(), track.globalIndex())] = phi;
791+
}
792+
}
793+
774794
template <int ev_id, typename TCollision, typename TTrack1, typename TTrack2, typename TCut>
775795
bool fillPairInfo(TCollision const& collision, TTrack1 const& t1, TTrack2 const& t2, TCut const& cut)
776796
{
@@ -816,35 +836,22 @@ struct Dilepton {
816836
}
817837
}
818838

819-
float deta_geom = 999.f;
820-
float dphi_geom = 999.f;
839+
float deta_geom = 999.f, dphi_geom = 999.f;
821840
if constexpr (pairtype == o2::aod::pwgem::dilepton::utils::pairutil::DileptonPairType::kDielectron) {
822841
if (!cut.template IsSelectedPair(t1, t2, d_bz)) {
823842
return false;
824843
}
825-
if (dielectroncuts.cfg_x_to_go) {
826-
auto track_par_cov1 = getTrackParCov(t1);
827-
track_par_cov1.setPID(o2::track::PID::Electron);
828-
o2::base::Propagator::Instance()->propagateToX(track_par_cov1, dielectroncuts.cfg_x_to_go, d_bz, o2::base::PropagatorImpl<float>::MAX_SIN_PHI, o2::base::PropagatorImpl<float>::MAX_STEP, matCorr);
829-
auto xyz1 = track_par_cov1.getXYZGlo();
830-
float eta1 = RecoDecay::eta(std::array{xyz1.X(), xyz1.Y(), xyz1.Z()});
831-
float phi1 = RecoDecay::phi(std::array{xyz1.X(), xyz1.Y()});
832-
o2::math_utils::bringTo02Pi(phi1);
833-
834-
auto track_par_cov2 = getTrackParCov(t2);
835-
track_par_cov2.setPID(o2::track::PID::Electron);
836-
o2::base::Propagator::Instance()->propagateToX(track_par_cov2, dielectroncuts.cfg_x_to_go, d_bz, o2::base::PropagatorImpl<float>::MAX_SIN_PHI, o2::base::PropagatorImpl<float>::MAX_STEP, matCorr);
837-
auto xyz2 = track_par_cov2.getXYZGlo();
838-
float eta2 = RecoDecay::eta(std::array{xyz2.X(), xyz2.Y(), xyz2.Z()});
839-
float phi2 = RecoDecay::phi(std::array{xyz2.X(), xyz2.Y()});
840-
o2::math_utils::bringTo02Pi(phi2);
841-
842-
deta_geom = t1.sign() * t1.pt() > t2.sign() * t2.pt() ? eta1 - eta2 : eta2 - eta1;
843-
dphi_geom = t1.sign() * t1.pt() > t2.sign() * t2.pt() ? phi1 - phi2 : phi2 - phi1;
844-
o2::math_utils::bringToPMPi(dphi_geom);
845-
if (dielectroncuts.cfg_apply_detadphi_geom && std::pow(deta_geom / dielectroncuts.cfg_min_deta_geom, 2) + std::pow(dphi_geom / dielectroncuts.cfg_min_dphi_geom, 2) < 1.f) {
846-
return false;
847-
}
844+
845+
if constexpr (ev_id == 0) {
846+
deta_geom = t1.sign() * t1.pt() > t2.sign() * t2.pt() ? map_eta_geom[std::make_tuple(ndf, t1.emeventId(), t1.globalIndex())] - map_eta_geom[std::make_tuple(ndf, t2.emeventId(), t2.globalIndex())] : map_eta_geom[std::make_tuple(ndf, t2.emeventId(), t2.globalIndex())] - map_eta_geom[std::make_tuple(ndf, t1.emeventId(), t1.globalIndex())];
847+
dphi_geom = t1.sign() * t1.pt() > t2.sign() * t2.pt() ? map_phi_geom[std::make_tuple(ndf, t1.emeventId(), t1.globalIndex())] - map_phi_geom[std::make_tuple(ndf, t2.emeventId(), t2.globalIndex())] : map_phi_geom[std::make_tuple(ndf, t2.emeventId(), t2.globalIndex())] - map_phi_geom[std::make_tuple(ndf, t1.emeventId(), t1.globalIndex())];
848+
} else { // mixed event
849+
deta_geom = t1.sign() * t1.pt() > t2.sign() * t2.pt() ? map_eta_geom[std::make_tuple(t1.dfId(), t1.collisionId(), t1.globalIndex())] - map_eta_geom[std::make_tuple(t2.dfId(), t2.collisionId(), t2.globalIndex())] : map_eta_geom[std::make_tuple(t2.dfId(), t2.collisionId(), t2.globalIndex())] - map_eta_geom[std::make_tuple(t1.dfId(), t1.collisionId(), t1.globalIndex())];
850+
dphi_geom = t1.sign() * t1.pt() > t2.sign() * t2.pt() ? map_phi_geom[std::make_tuple(t1.dfId(), t1.collisionId(), t1.globalIndex())] - map_phi_geom[std::make_tuple(t2.dfId(), t2.collisionId(), t2.globalIndex())] : map_phi_geom[std::make_tuple(t2.dfId(), t2.collisionId(), t2.globalIndex())] - map_phi_geom[std::make_tuple(t1.dfId(), t1.collisionId(), t1.globalIndex())];
851+
}
852+
o2::math_utils::bringToPMPi(dphi_geom);
853+
if (dielectroncuts.cfg_x_to_go > 0.f && dielectroncuts.cfg_apply_detadphi_geom && std::pow(deta_geom / dielectroncuts.cfg_min_deta_geom, 2) + std::pow(dphi_geom / dielectroncuts.cfg_min_dphi_geom, 2) < 1.f) {
854+
return false;
848855
}
849856
} else if constexpr (pairtype == o2::aod::pwgem::dilepton::utils::pairutil::DileptonPairType::kDimuon) {
850857
if (!cut.template IsSelectedPair(t1, t2)) {
@@ -1200,6 +1207,13 @@ struct Dilepton {
12001207
auto negTracks_per_coll = negTracks.sliceByCached(perCollision, collision.globalIndex(), cache);
12011208
// 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());
12021209

1210+
if constexpr (pairtype == o2::aod::pwgem::dilepton::utils::pairutil::DileptonPairType::kDielectron) {
1211+
if (dielectroncuts.cfg_x_to_go > 0.f) {
1212+
propagateElectron(posTracks_per_coll);
1213+
propagateElectron(negTracks_per_coll);
1214+
}
1215+
}
1216+
12031217
int nuls = 0, nlspp = 0, nlsmm = 0;
12041218
for (auto& [pos, neg] : combinations(CombinationsFullIndexPolicy(posTracks_per_coll, negTracks_per_coll))) { // ULS
12051219
bool is_pair_ok = fillPairInfo<0>(collision, pos, neg, cut);
@@ -1325,7 +1339,6 @@ struct Dilepton {
13251339

13261340
} // end of collision loop
13271341

1328-
ndf++;
13291342
} // end of DF
13301343

13311344
template <typename TCollision, typename TTrack1, typename TTrack2, typename TCut>
@@ -1351,31 +1364,11 @@ struct Dilepton {
13511364
if (!cut.template IsSelectedPair(t1, t2, d_bz)) {
13521365
return false;
13531366
}
1354-
1355-
if (dielectroncuts.cfg_x_to_go) {
1356-
auto track_par_cov1 = getTrackParCov(t1);
1357-
track_par_cov1.setPID(o2::track::PID::Electron);
1358-
o2::base::Propagator::Instance()->propagateToX(track_par_cov1, dielectroncuts.cfg_x_to_go, d_bz, o2::base::PropagatorImpl<float>::MAX_SIN_PHI, o2::base::PropagatorImpl<float>::MAX_STEP, matCorr);
1359-
auto xyz1 = track_par_cov1.getXYZGlo();
1360-
float eta1 = RecoDecay::eta(std::array{xyz1.X(), xyz1.Y(), xyz1.Z()});
1361-
float phi1 = RecoDecay::phi(std::array{xyz1.X(), xyz1.Y()});
1362-
o2::math_utils::bringTo02Pi(phi1);
1363-
1364-
auto track_par_cov2 = getTrackParCov(t2);
1365-
track_par_cov2.setPID(o2::track::PID::Electron);
1366-
o2::base::Propagator::Instance()->propagateToX(track_par_cov2, dielectroncuts.cfg_x_to_go, d_bz, o2::base::PropagatorImpl<float>::MAX_SIN_PHI, o2::base::PropagatorImpl<float>::MAX_STEP, matCorr);
1367-
auto xyz2 = track_par_cov2.getXYZGlo();
1368-
float eta2 = RecoDecay::eta(std::array{xyz2.X(), xyz2.Y(), xyz2.Z()});
1369-
float phi2 = RecoDecay::phi(std::array{xyz2.X(), xyz2.Y()});
1370-
o2::math_utils::bringTo02Pi(phi2);
1371-
1372-
float deta_geom = t1.sign() * t1.pt() > t2.sign() * t2.pt() ? eta1 - eta2 : eta2 - eta1;
1373-
float dphi_geom = t1.sign() * t1.pt() > t2.sign() * t2.pt() ? phi1 - phi2 : phi2 - phi1;
1374-
o2::math_utils::bringToPMPi(dphi_geom);
1375-
1376-
if (dielectroncuts.cfg_apply_detadphi_geom && std::pow(deta_geom / dielectroncuts.cfg_min_deta_geom, 2) + std::pow(dphi_geom / dielectroncuts.cfg_min_dphi_geom, 2) < 1.f) {
1377-
return false;
1378-
}
1367+
float deta_geom = t1.sign() * t1.pt() > t2.sign() * t2.pt() ? map_eta_geom[std::make_tuple(ndf, t1.emeventId(), t1.globalIndex())] - map_eta_geom[std::make_tuple(ndf, t2.emeventId(), t2.globalIndex())] : map_eta_geom[std::make_tuple(ndf, t2.emeventId(), t2.globalIndex())] - map_eta_geom[std::make_tuple(ndf, t1.emeventId(), t1.globalIndex())];
1368+
float dphi_geom = t1.sign() * t1.pt() > t2.sign() * t2.pt() ? map_phi_geom[std::make_tuple(ndf, t1.emeventId(), t1.globalIndex())] - map_phi_geom[std::make_tuple(ndf, t2.emeventId(), t2.globalIndex())] : map_phi_geom[std::make_tuple(ndf, t2.emeventId(), t2.globalIndex())] - map_phi_geom[std::make_tuple(ndf, t1.emeventId(), t1.globalIndex())];
1369+
o2::math_utils::bringToPMPi(dphi_geom);
1370+
if (dielectroncuts.cfg_x_to_go > 0.f && dielectroncuts.cfg_apply_detadphi_geom && std::pow(deta_geom / dielectroncuts.cfg_min_deta_geom, 2) + std::pow(dphi_geom / dielectroncuts.cfg_min_dphi_geom, 2) < 1.f) {
1371+
return false;
13791372
}
13801373
} else if constexpr (pairtype == o2::aod::pwgem::dilepton::utils::pairutil::DileptonPairType::kDimuon) {
13811374
if (!cut.template IsSelectedPair(t1, t2)) {
@@ -1435,6 +1428,12 @@ struct Dilepton {
14351428

14361429
auto posTracks_per_coll = posTracks.sliceByCached(perCollision, collision.globalIndex(), cache);
14371430
auto negTracks_per_coll = negTracks.sliceByCached(perCollision, collision.globalIndex(), cache);
1431+
if constexpr (pairtype == o2::aod::pwgem::dilepton::utils::pairutil::DileptonPairType::kDielectron) {
1432+
if (dielectroncuts.cfg_x_to_go > 0.f) {
1433+
propagateElectron(posTracks_per_coll);
1434+
propagateElectron(negTracks_per_coll);
1435+
}
1436+
}
14381437

14391438
for (auto& [pos, neg] : combinations(CombinationsFullIndexPolicy(posTracks_per_coll, negTracks_per_coll))) { // ULS
14401439
if (isPairOK(collision, pos, neg, cut)) {
@@ -1505,6 +1504,7 @@ struct Dilepton {
15051504
runPairing<false>(collisions, positive_muons, negative_muons, o2::aod::emprimarymuon::emeventId, fDimuonCut);
15061505
}
15071506
map_weight.clear();
1507+
ndf++;
15081508
}
15091509
PROCESS_SWITCH(Dilepton, processAnalysis, "run dilepton analysis", true);
15101510

@@ -1525,6 +1525,7 @@ struct Dilepton {
15251525
runPairing<true>(collisions, positive_muons, negative_muons, o2::aod::emprimarymuon::emeventId, fDimuonCut);
15261526
}
15271527
map_weight.clear();
1528+
ndf++;
15281529
}
15291530
PROCESS_SWITCH(Dilepton, processTriggerAnalysis, "run dilepton analysis on triggered data", false);
15301531

0 commit comments

Comments
 (0)