@@ -205,6 +205,7 @@ struct Dilepton {
205205 o2::framework::Configurable<float > cfg_min_phiv{" cfg_min_phiv" , 0.0 , " min phiv (constant)" };
206206 o2::framework::Configurable<float > cfg_max_phiv{" cfg_max_phiv" , 3.2 , " max phiv (constant)" };
207207 o2::framework::Configurable<bool > cfg_apply_detadphi{" cfg_apply_detadphi" , false , " flag to apply deta-dphi elliptic cut at PV" };
208+ o2::framework::Configurable<bool > cfg_apply_detadphiPosition{" cfg_apply_detadphiPosition" , false , " flag to apply deta-dphi elliptic cut at ref. radius" };
208209 o2::framework::Configurable<float > cfg_min_deta{" cfg_min_deta" , 0.02 , " min deta between 2 electrons (elliptic cut)" };
209210 o2::framework::Configurable<float > cfg_min_dphi{" cfg_min_dphi" , 0.2 , " min dphi between 2 electrons (elliptic cut)" };
210211 o2::framework::Configurable<float > cfg_min_opang{" cfg_min_opang" , 0.0 , " min opening angle" };
@@ -619,6 +620,7 @@ struct Dilepton {
619620 if (cfgAnalysisType == static_cast <int >(o2::aod::pwgem::dilepton::utils::pairutil::DileptonAnalysisType::kQC )) {
620621 fRegistry .add (" Pair/same/uls/hs" , " dilepton" , o2::framework::HistType::kTHnSparseD , {axis_mass, axis_pt, axis_dca, axis_y}, true );
621622 fRegistry .add (" Pair/same/uls/hDeltaEtaDeltaPhi" , " #Delta#eta-#Delta#varphi between 2 tracks;#Delta#varphi (rad.);#Delta#eta;" , o2::framework::HistType::kTH2D , {{180 , -M_PI , M_PI }, {400 , -2 , +2 }}, true );
623+ fRegistry .add (" Pair/same/uls/hDeltaEtaDeltaPhiPos" , Form (" #Delta#eta-#Delta#varphi* between 2 tracks at r_{xy} = %3.2f m;#Delta#varphi* (rad.);#Delta#eta;" , dielectroncuts.cfgRefR .value ), o2::framework::HistType::kTH2D , {{180 , -M_PI , M_PI }, {400 , -2 , +2 }}, true );
622624
623625 if constexpr (pairtype == o2::aod::pwgem::dilepton::utils::pairutil::DileptonPairType::kDielectron ) {
624626 fRegistry .add (" Pair/same/uls/hMvsPhiV" , " m_{ee} vs. #varphi_{V};#varphi_{V} (rad.);m_{ee} (GeV/c^{2})" , o2::framework::HistType::kTH2D , {{90 , 0 , M_PI }, {100 , 0 .0f , 1 .0f }}, true ); // phiv is only for dielectron
@@ -768,10 +770,14 @@ struct Dilepton {
768770 fDielectronCut .SetPairDCARange (dielectroncuts.cfg_min_pair_dca3d , dielectroncuts.cfg_max_pair_dca3d ); // in sigma
769771 fDielectronCut .SetMaxMeePhiVDep ([&](float phiv) { return dielectroncuts.cfg_phiv_intercept + phiv * dielectroncuts.cfg_phiv_slope ; }, dielectroncuts.cfg_min_phiv , dielectroncuts.cfg_max_phiv );
770772 fDielectronCut .ApplyPhiV (dielectroncuts.cfg_apply_phiv );
771- fDielectronCut .SetMindEtadPhi (dielectroncuts.cfg_apply_detadphi , false , dielectroncuts.cfg_min_deta , dielectroncuts.cfg_min_dphi );
773+ fDielectronCut .SetMindEtadPhi (dielectroncuts.cfg_apply_detadphi , dielectroncuts. cfg_apply_detadphiPosition , dielectroncuts.cfg_min_deta , dielectroncuts.cfg_min_dphi );
772774 fDielectronCut .SetPairOpAng (dielectroncuts.cfg_min_opang , dielectroncuts.cfg_max_opang );
773775 // fDielectronCut.SetRequireDifferentSides(dielectroncuts.cfg_require_diff_sides);
774776
777+ if (dielectroncuts.cfg_apply_detadphi && dielectroncuts.cfg_apply_detadphiPosition ) {
778+ LOG (fatal) << " cfg_apply_detadphi and cfg_apply_detadphiPosition cannot be used simultaneously. Please select only one." ;
779+ }
780+
775781 // for track
776782 fDielectronCut .SetTrackPtRange (dielectroncuts.cfg_min_pt_track , dielectroncuts.cfg_max_pt_track );
777783 fDielectronCut .SetTrackEtaRange (dielectroncuts.cfg_min_eta_track , dielectroncuts.cfg_max_eta_track );
@@ -992,14 +998,20 @@ struct Dilepton {
992998 if (cfgAnalysisType == static_cast <int >(o2::aod::pwgem::dilepton::utils::pairutil::DileptonAnalysisType::kQC )) {
993999 float deta = t1.sign () * v1.Pt () > t2.sign () * v2.Pt () ? v1.Eta () - v2.Eta () : v2.Eta () - v1.Eta ();
9941000 float dphi = t1.sign () * v1.Pt () > t2.sign () * v2.Pt () ? v1.Phi () - v2.Phi () : v2.Phi () - v1.Phi ();
995- o2::math_utils::bringToPMPi (dphi);
1001+ dphi = RecoDecay::constrainAngle (dphi, -M_PI , 1U ); // -pi - +pi
1002+
1003+ float phiPosition1 = RecoDecay::constrainAngle (t1.phi () + std::asin (t1.sign () * 0.30282 * (d_bz * 0.1 ) * dielectroncuts.cfgRefR / (2 .f * t1.pt ())), 0 , 1U ); // 0-2pi
1004+ float phiPosition2 = RecoDecay::constrainAngle (t2.phi () + std::asin (t2.sign () * 0.30282 * (d_bz * 0.1 ) * dielectroncuts.cfgRefR / (2 .f * t2.pt ())), 0 , 1U ); // 0-2pi
1005+ float dphiPosition = t1.sign () * v1.Pt () > t2.sign () * v2.Pt () ? phiPosition1 - phiPosition2 : phiPosition2 - phiPosition1;
1006+ dphiPosition = RecoDecay::constrainAngle (dphiPosition, -M_PI , 1U ); // -pi - +pi
9961007
9971008 float phiv = o2::aod::pwgem::dilepton::utils::pairutil::getPhivPair (t1.px (), t1.py (), t1.pz (), t2.px (), t2.py (), t2.pz (), t1.sign (), t2.sign (), d_bz);
9981009 float opAng = o2::aod::pwgem::dilepton::utils::pairutil::getOpeningAngle (t1.px (), t1.py (), t1.pz (), t2.px (), t2.py (), t2.pz ());
9991010
10001011 if (t1.sign () * t2.sign () < 0 ) { // ULS
10011012 fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" uls/hs" ), v12.M (), v12.Pt (), pair_dca, v12.Rapidity (), weight);
10021013 fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" uls/hDeltaEtaDeltaPhi" ), dphi, deta, weight);
1014+ fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" uls/hDeltaEtaDeltaPhiPos" ), dphiPosition, deta, weight);
10031015 if constexpr (pairtype == o2::aod::pwgem::dilepton::utils::pairutil::DileptonPairType::kDielectron ) {
10041016 fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" uls/hMvsPhiV" ), phiv, v12.M (), weight);
10051017 fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" uls/hMvsOpAng" ), opAng, v12.M (), weight);
@@ -1012,6 +1024,7 @@ struct Dilepton {
10121024 } else if (t1.sign () > 0 && t2.sign () > 0 ) { // LS++
10131025 fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" lspp/hs" ), v12.M (), v12.Pt (), pair_dca, v12.Rapidity (), weight);
10141026 fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" lspp/hDeltaEtaDeltaPhi" ), dphi, deta, weight);
1027+ fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" lspp/hDeltaEtaDeltaPhiPos" ), dphiPosition, deta, weight);
10151028 if constexpr (pairtype == o2::aod::pwgem::dilepton::utils::pairutil::DileptonPairType::kDielectron ) {
10161029 fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" lspp/hMvsPhiV" ), phiv, v12.M (), weight);
10171030 fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" lspp/hMvsOpAng" ), opAng, v12.M (), weight);
@@ -1024,6 +1037,7 @@ struct Dilepton {
10241037 } else if (t1.sign () < 0 && t2.sign () < 0 ) { // LS--
10251038 fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" lsmm/hs" ), v12.M (), v12.Pt (), pair_dca, v12.Rapidity (), weight);
10261039 fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" lsmm/hDeltaEtaDeltaPhi" ), dphi, deta, weight);
1040+ fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" lsmm/hDeltaEtaDeltaPhiPos" ), dphiPosition, deta, weight);
10271041 if constexpr (pairtype == o2::aod::pwgem::dilepton::utils::pairutil::DileptonPairType::kDielectron ) {
10281042 fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" lsmm/hMvsPhiV" ), phiv, v12.M (), weight);
10291043 fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" lsmm/hMvsOpAng" ), opAng, v12.M (), weight);
@@ -1290,6 +1304,8 @@ struct Dilepton {
12901304 ifnode ((dielectroncuts.cfg_prefilter_bits_derived.node() & static_cast<uint16_t>(1 << int (o2::aod::pwgem::dilepton::utils::pairutil::DileptonPrefilterBitDerived::kMee ))) > static_cast<uint16_t>(0 ), (o2::aod::emprimaryelectron::pfbderived & static_cast <uint16_t >(1 << int (o2::aod::pwgem::dilepton::utils::pairutil::DileptonPrefilterBitDerived::kMee ))) <= static_cast<uint16_t>(0 ), true) &&
12911305 ifnode((dielectroncuts.cfg_prefilter_bits_derived.node() & static_cast<uint16_t>(1 << int (o2::aod::pwgem::dilepton::utils::pairutil::DileptonPrefilterBitDerived::kPhiV ))) > static_cast<uint16_t>(0 ), (o2::aod::emprimaryelectron::pfbderived & static_cast <uint16_t >(1 << int (o2::aod::pwgem::dilepton::utils::pairutil::DileptonPrefilterBitDerived::kPhiV ))) <= static_cast<uint16_t>(0 ), true) &&
12921306 ifnode((dielectroncuts.cfg_prefilter_bits_derived.node() & static_cast<uint16_t>(1 << int (o2::aod::pwgem::dilepton::utils::pairutil::DileptonPrefilterBitDerived::kPhiVLS ))) > static_cast<uint16_t>(0 ), (o2::aod::emprimaryelectron::pfbderived & static_cast <uint16_t >(1 << int (o2::aod::pwgem::dilepton::utils::pairutil::DileptonPrefilterBitDerived::kPhiVLS ))) <= static_cast<uint16_t>(0 ), true) &&
1307+ ifnode((dielectroncuts.cfg_prefilter_bits_derived.node() & static_cast<uint16_t>(1 << int (o2::aod::pwgem::dilepton::utils::pairutil::DileptonPrefilterBitDerived::kSplitOrMergedTrackULSAtRefR ))) > static_cast<uint16_t>(0 ), (o2::aod::emprimaryelectron::pfbderived & static_cast <uint16_t >(1 << int (o2::aod::pwgem::dilepton::utils::pairutil::DileptonPrefilterBitDerived::kSplitOrMergedTrackULSAtRefR ))) <= static_cast<uint16_t>(0 ), true) &&
1308+ ifnode((dielectroncuts.cfg_prefilter_bits_derived.node() & static_cast<uint16_t>(1 << int (o2::aod::pwgem::dilepton::utils::pairutil::DileptonPrefilterBitDerived::kSplitOrMergedTrackLSAtRefR ))) > static_cast<uint16_t>(0 ), (o2::aod::emprimaryelectron::pfbderived & static_cast <uint16_t >(1 << int (o2::aod::pwgem::dilepton::utils::pairutil::DileptonPrefilterBitDerived::kSplitOrMergedTrackLSAtRefR ))) <= static_cast<uint16_t>(0 ), true) &&
12931309 ifnode((dielectroncuts.cfg_prefilter_bits_derived.node() & static_cast<uint16_t>(1 << int (o2::aod::pwgem::dilepton::utils::pairutil::DileptonPrefilterBitDerived::kSplitOrMergedTrackLS ))) > static_cast<uint16_t>(0 ), (o2::aod::emprimaryelectron::pfbderived & static_cast <uint16_t >(1 << int (o2::aod::pwgem::dilepton::utils::pairutil::DileptonPrefilterBitDerived::kSplitOrMergedTrackLS ))) <= static_cast<uint16_t>(0 ), true) &&
12941310 ifnode((dielectroncuts.cfg_prefilter_bits_derived.node() & static_cast<uint16_t>(1 << int (o2::aod::pwgem::dilepton::utils::pairutil::DileptonPrefilterBitDerived::kSplitOrMergedTrackULS ))) > static_cast<uint16_t>(0 ), (o2::aod::emprimaryelectron::pfbderived & static_cast <uint16_t >(1 << int (o2::aod::pwgem::dilepton::utils::pairutil::DileptonPrefilterBitDerived::kSplitOrMergedTrackULS ))) <= static_cast<uint16_t>(0 ), true),
12951311 o2::aod::emprimaryelectron::pfbderived >= static_cast<uint16_t>(0 ));
0 commit comments