Skip to content

Commit ae9aa1e

Browse files
authored
[PWGEM/Dilepton] update on dphiPosition (#12389)
1 parent 3952455 commit ae9aa1e

File tree

9 files changed

+104
-43
lines changed

9 files changed

+104
-43
lines changed

PWGEM/Dilepton/Core/DielectronCut.cxx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,13 @@ void DielectronCut::SelectPhotonConversion(bool flag)
6767
mSelectPC = flag;
6868
LOG(info) << "Dielectron Cut, select photon conversion: " << mSelectPC;
6969
}
70-
void DielectronCut::SetMindEtadPhi(bool flag, float min_deta, float min_dphi)
70+
void DielectronCut::SetMindEtadPhi(bool flag1, bool flag2, float min_deta, float min_dphi)
7171
{
72-
mApplydEtadPhi = flag;
72+
mApplydEtadPhi = flag1;
73+
mApplydEtadPhiPosition = flag2;
7374
mMinDeltaEta = min_deta;
7475
mMinDeltaPhi = min_dphi;
75-
LOG(info) << "Dielectron Cut, set apply deta-dphi cut: " << mApplydEtadPhi << " min_deta: " << mMinDeltaEta << " min_dphi: " << mMinDeltaPhi;
76+
LOG(info) << "Dielectron Cut, set apply deta-dphi cut: " << mApplydEtadPhi << " apply deta-dphi* cut: " << mApplydEtadPhiPosition << " min_deta: " << mMinDeltaEta << " min_dphi: " << mMinDeltaPhi;
7677
}
7778
void DielectronCut::SetRequireDifferentSides(bool flag)
7879
{

PWGEM/Dilepton/Core/DielectronCut.h

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ class DielectronCut : public TNamed
101101
}
102102

103103
template <bool dont_require_rapidity = false, typename TTrack1, typename TTrack2>
104-
bool IsSelectedPair(TTrack1 const& t1, TTrack2 const& t2, const float bz) const
104+
bool IsSelectedPair(TTrack1 const& t1, TTrack2 const& t2, const float bz, const float refR) const
105105
{
106106
ROOT::Math::PtEtaPhiMVector v1(t1.pt(), t1.eta(), t1.phi(), o2::constants::physics::MassElectron);
107107
ROOT::Math::PtEtaPhiMVector v2(t2.pt(), t2.eta(), t2.phi(), o2::constants::physics::MassElectron);
@@ -137,13 +137,28 @@ class DielectronCut : public TNamed
137137
return false;
138138
}
139139

140+
if (mApplydEtadPhi && mApplydEtadPhiPosition) { // applying both cuts is not allowed.
141+
return false;
142+
}
143+
140144
float deta = v1.Eta() - v2.Eta();
141145
float dphi = v1.Phi() - v2.Phi();
142146
o2::math_utils::bringToPMPi(dphi);
143147
if (mApplydEtadPhi && std::pow(deta / mMinDeltaEta, 2) + std::pow(dphi / mMinDeltaPhi, 2) < 1.f) {
144148
return false;
145149
}
146150

151+
float phiPosition1 = t1.phi() + std::asin(t1.sign() * 0.30282 * (bz * 0.1) * refR / (2.f * t1.pt()));
152+
float phiPosition2 = t2.phi() + std::asin(t2.sign() * 0.30282 * (bz * 0.1) * refR / (2.f * t2.pt()));
153+
154+
phiPosition1 = RecoDecay::constrainAngle(phiPosition1, 0, 1); // 0-2pi
155+
phiPosition2 = RecoDecay::constrainAngle(phiPosition2, 0, 1); // 0-2pi
156+
float dphiPosition = phiPosition1 - phiPosition2;
157+
o2::math_utils::bringToPMPi(dphiPosition);
158+
if (mApplydEtadPhiPosition && std::pow(deta / mMinDeltaEta, 2) + std::pow(dphiPosition / mMinDeltaPhi, 2) < 1.f) {
159+
return false;
160+
}
161+
147162
return true;
148163
}
149164

@@ -444,7 +459,7 @@ class DielectronCut : public TNamed
444459
void SetPairOpAng(float minOpAng = 0.f, float maxOpAng = 1e10f);
445460
void SetMaxMeePhiVDep(std::function<float(float)> phivDepCut, float min_phiv, float max_phiv);
446461
void SelectPhotonConversion(bool flag);
447-
void SetMindEtadPhi(bool flag, float min_deta, float min_dphi);
462+
void SetMindEtadPhi(bool applydEtadPhi, bool applydEtadPhiPosition, float min_deta, float min_dphi);
448463
void SetRequireDifferentSides(bool flag);
449464

450465
void SetTrackPtRange(float minPt = 0.f, float maxPt = 1e10f);
@@ -517,6 +532,7 @@ class DielectronCut : public TNamed
517532
std::function<float(float)> mMaxMeePhiVDep{}; // max mee as a function of phiv
518533
bool mSelectPC{false}; // flag to select photon conversion used in mMaxPhivPairMeeDep
519534
bool mApplydEtadPhi{false}; // flag to apply deta, dphi cut between 2 tracks
535+
bool mApplydEtadPhiPosition{false}; // flag to apply deta, dphi cut between 2 tracks
520536
float mMinDeltaEta{0.f};
521537
float mMinDeltaPhi{0.f};
522538
float mMinOpAng{0.f}, mMaxOpAng{1e10f};

PWGEM/Dilepton/Core/Dilepton.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,8 @@ struct Dilepton {
178178
Configurable<float> cfg_phiv_intercept{"cfg_phiv_intercept", -0.0280, "intercept for m vs. phiv"};
179179
Configurable<float> cfg_min_phiv{"cfg_min_phiv", 0.0, "min phiv (constant)"};
180180
Configurable<float> cfg_max_phiv{"cfg_max_phiv", 3.2, "max phiv (constant)"};
181-
Configurable<bool> cfg_apply_detadphi{"cfg_apply_detadphi", false, "flag to apply deta-dphi elliptic cut"};
181+
Configurable<bool> cfg_apply_detadphi{"cfg_apply_detadphi", false, "flag to apply deta-dphi elliptic cut at PV"};
182+
Configurable<bool> cfg_apply_detadphiposition{"cfg_apply_detadphiposition", false, "flag to apply deta-dphi elliptic cut at certain radius"};
182183
Configurable<float> cfg_min_deta{"cfg_min_deta", 0.02, "min deta between 2 electrons (elliptic cut)"};
183184
Configurable<float> cfg_min_dphi{"cfg_min_dphi", 0.2, "min dphi between 2 electrons (elliptic cut)"};
184185
Configurable<float> cfg_min_opang{"cfg_min_opang", 0.0, "min opening angle"};
@@ -673,7 +674,7 @@ struct Dilepton {
673674
fDielectronCut.SetPairDCARange(dielectroncuts.cfg_min_pair_dca3d, dielectroncuts.cfg_max_pair_dca3d); // in sigma
674675
fDielectronCut.SetMaxMeePhiVDep([&](float phiv) { return dielectroncuts.cfg_phiv_intercept + phiv * dielectroncuts.cfg_phiv_slope; }, dielectroncuts.cfg_min_phiv, dielectroncuts.cfg_max_phiv);
675676
fDielectronCut.ApplyPhiV(dielectroncuts.cfg_apply_phiv);
676-
fDielectronCut.SetMindEtadPhi(dielectroncuts.cfg_apply_detadphi, dielectroncuts.cfg_min_deta, dielectroncuts.cfg_min_dphi);
677+
fDielectronCut.SetMindEtadPhi(dielectroncuts.cfg_apply_detadphi, dielectroncuts.cfg_apply_detadphiposition, dielectroncuts.cfg_min_deta, dielectroncuts.cfg_min_dphi);
677678
fDielectronCut.SetPairOpAng(dielectroncuts.cfg_min_opang, dielectroncuts.cfg_max_opang);
678679
fDielectronCut.SetRequireDifferentSides(dielectroncuts.cfg_require_diff_sides);
679680

@@ -858,7 +859,7 @@ struct Dilepton {
858859
}
859860

860861
if constexpr (pairtype == o2::aod::pwgem::dilepton::utils::pairutil::DileptonPairType::kDielectron) {
861-
if (!cut.IsSelectedPair(t1, t2, d_bz)) {
862+
if (!cut.IsSelectedPair(t1, t2, d_bz, dielectroncuts.cfgRefR)) {
862863
return false;
863864
}
864865
} else if constexpr (pairtype == o2::aod::pwgem::dilepton::utils::pairutil::DileptonPairType::kDimuon) {
@@ -1403,7 +1404,7 @@ struct Dilepton {
14031404
}
14041405

14051406
if constexpr (pairtype == o2::aod::pwgem::dilepton::utils::pairutil::DileptonPairType::kDielectron) {
1406-
if (!cut.IsSelectedPair(t1, t2, d_bz)) {
1407+
if (!cut.IsSelectedPair(t1, t2, d_bz, dielectroncuts.cfgRefR)) {
14071408
return false;
14081409
}
14091410
} else if constexpr (pairtype == o2::aod::pwgem::dilepton::utils::pairutil::DileptonPairType::kDimuon) {

PWGEM/Dilepton/Core/DileptonHadronMPC.h

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,8 @@ struct DileptonHadronMPC {
183183
Configurable<float> cfg_phiv_intercept{"cfg_phiv_intercept", -0.0280, "intercept for m vs. phiv"};
184184
Configurable<float> cfg_min_phiv{"cfg_min_phiv", 0.0, "min phiv (constant)"};
185185
Configurable<float> cfg_max_phiv{"cfg_max_phiv", 3.2, "max phiv (constant)"};
186-
Configurable<bool> cfg_apply_detadphi{"cfg_apply_detadphi", false, "flag to apply deta-dphi elliptic cut"};
186+
Configurable<bool> cfg_apply_detadphi{"cfg_apply_detadphi", false, "flag to apply deta-dphi elliptic cut at PV"};
187+
Configurable<bool> cfg_apply_detadphiposition{"cfg_apply_detadphiposition", false, "flag to apply deta-dphi elliptic cut at certain radius"};
187188
Configurable<float> cfg_min_deta{"cfg_min_deta", 0.02, "min deta between 2 electrons (elliptic cut)"};
188189
Configurable<float> cfg_min_dphi{"cfg_min_dphi", 0.2, "min dphi between 2 electrons (elliptic cut)"};
189190

@@ -210,6 +211,7 @@ struct DileptonHadronMPC {
210211
Configurable<float> cfg_max_dcaz{"cfg_max_dcaz", 1.0, "max dca Z for single track in cm"};
211212
Configurable<bool> cfg_require_itsib_any{"cfg_require_itsib_any", false, "flag to require ITS ib any hits"};
212213
Configurable<bool> cfg_require_itsib_1st{"cfg_require_itsib_1st", true, "flag to require ITS ib 1st hit"};
214+
Configurable<float> cfgRefR{"cfgRefR", 1.2, "reference R (in m) for extrapolation"}; // https://cds.cern.ch/record/1419204
213215

214216
Configurable<int> cfg_pid_scheme{"cfg_pid_scheme", static_cast<int>(DielectronCut::PIDSchemes::kTPChadrejORTOFreq), "pid scheme [kTOFreq : 0, kTPChadrej : 1, kTPChadrejORTOFreq : 2, kTPConly : 3, kTOFif : 4, kPIDML : 5, kTPChadrejORTOFreq_woTOFif : 6]"};
215217
Configurable<float> cfg_min_TPCNsigmaEl{"cfg_min_TPCNsigmaEl", -2.0, "min. TPC n sigma for electron inclusion"};
@@ -588,7 +590,7 @@ struct DileptonHadronMPC {
588590
fDielectronCut.SetPairDCARange(dielectroncuts.cfg_min_pair_dca3d, dielectroncuts.cfg_max_pair_dca3d); // in sigma
589591
fDielectronCut.SetMaxMeePhiVDep([&](float phiv) { return dielectroncuts.cfg_phiv_intercept + phiv * dielectroncuts.cfg_phiv_slope; }, dielectroncuts.cfg_min_phiv, dielectroncuts.cfg_max_phiv);
590592
fDielectronCut.ApplyPhiV(dielectroncuts.cfg_apply_phiv);
591-
fDielectronCut.SetMindEtadPhi(dielectroncuts.cfg_apply_detadphi, dielectroncuts.cfg_min_deta, dielectroncuts.cfg_min_dphi);
593+
fDielectronCut.SetMindEtadPhi(dielectroncuts.cfg_apply_detadphi, dielectroncuts.cfg_apply_detadphiposition, dielectroncuts.cfg_min_deta, dielectroncuts.cfg_min_dphi);
592594
fDielectronCut.SetPairOpAng(0.f, 6.3);
593595
fDielectronCut.SetRequireDifferentSides(false);
594596

@@ -744,7 +746,7 @@ struct DileptonHadronMPC {
744746
}
745747

746748
if constexpr (pairtype == o2::aod::pwgem::dilepton::utils::pairutil::DileptonPairType::kDielectron) {
747-
if (!cut.IsSelectedPair(t1, t2, d_bz)) {
749+
if (!cut.IsSelectedPair(t1, t2, d_bz, dielectroncuts.cfgRefR)) {
748750
return false;
749751
}
750752
} else if constexpr (pairtype == o2::aod::pwgem::dilepton::utils::pairutil::DileptonPairType::kDimuon) {
@@ -915,7 +917,7 @@ struct DileptonHadronMPC {
915917
}
916918

917919
if constexpr (pairtype == o2::aod::pwgem::dilepton::utils::pairutil::DileptonPairType::kDielectron) {
918-
if (!cut.IsSelectedPair(t1, t2, d_bz)) {
920+
if (!cut.IsSelectedPair(t1, t2, d_bz, dielectroncuts.cfgRefR)) {
919921
return false;
920922
}
921923
} else if constexpr (pairtype == o2::aod::pwgem::dilepton::utils::pairutil::DileptonPairType::kDimuon) {
@@ -1312,7 +1314,7 @@ struct DileptonHadronMPC {
13121314
}
13131315

13141316
if constexpr (pairtype == o2::aod::pwgem::dilepton::utils::pairutil::DileptonPairType::kDielectron) {
1315-
if (!cut.IsSelectedPair(t1, t2, d_bz)) {
1317+
if (!cut.IsSelectedPair(t1, t2, d_bz, dielectroncuts.cfgRefR)) {
13161318
return false;
13171319
}
13181320
} else if constexpr (pairtype == o2::aod::pwgem::dilepton::utils::pairutil::DileptonPairType::kDimuon) {

PWGEM/Dilepton/Core/DileptonMC.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,8 @@ struct DileptonMC {
173173
Configurable<float> cfg_phiv_intercept{"cfg_phiv_intercept", -0.0280, "intercept for m vs. phiv"};
174174
Configurable<float> cfg_min_phiv{"cfg_min_phiv", 0.0, "min phiv (constant)"};
175175
Configurable<float> cfg_max_phiv{"cfg_max_phiv", 3.2, "max phiv (constant)"};
176-
Configurable<bool> cfg_apply_detadphi{"cfg_apply_detadphi", false, "flag to apply deta-dphi elliptic cut"};
176+
Configurable<bool> cfg_apply_detadphi{"cfg_apply_detadphi", false, "flag to apply deta-dphi elliptic cut at PV"};
177+
Configurable<bool> cfg_apply_detadphiposition{"cfg_apply_detadphiposition", false, "flag to apply deta-dphi elliptic cut at certain radius"};
177178
Configurable<float> cfg_min_deta{"cfg_min_deta", 0.02, "min deta between 2 electrons (elliptic cut)"};
178179
Configurable<float> cfg_min_dphi{"cfg_min_dphi", 0.2, "min dphi between 2 electrons (elliptic cut)"};
179180
Configurable<float> cfg_min_opang{"cfg_min_opang", 0.0, "min opening angle"};
@@ -209,6 +210,7 @@ struct DileptonMC {
209210
Configurable<float> cfg_max_its_cluster_size{"cfg_max_its_cluster_size", 16.f, "max ITS cluster size"};
210211
Configurable<float> cfg_min_rel_diff_pin{"cfg_min_rel_diff_pin", -1e+10, "min rel. diff. between pin and ppv"};
211212
Configurable<float> cfg_max_rel_diff_pin{"cfg_max_rel_diff_pin", +1e+10, "max rel. diff. between pin and ppv"};
213+
Configurable<float> cfgRefR{"cfgRefR", 1.2, "reference R (in m) for extrapolation"}; // https://cds.cern.ch/record/1419204
212214

213215
Configurable<int> cfg_pid_scheme{"cfg_pid_scheme", static_cast<int>(DielectronCut::PIDSchemes::kTPChadrejORTOFreq), "pid scheme [kTOFreq : 0, kTPChadrej : 1, kTPChadrejORTOFreq : 2, kTPConly : 3, kTOFif = 4, kPIDML = 5]"};
214216
Configurable<float> cfg_min_TPCNsigmaEl{"cfg_min_TPCNsigmaEl", -2.0, "min. TPC n sigma for electron inclusion"};
@@ -651,7 +653,7 @@ struct DileptonMC {
651653
fDielectronCut.SetPairDCARange(dielectroncuts.cfg_min_pair_dca3d, dielectroncuts.cfg_max_pair_dca3d); // in sigma
652654
fDielectronCut.SetMaxMeePhiVDep([&](float phiv) { return dielectroncuts.cfg_phiv_intercept + phiv * dielectroncuts.cfg_phiv_slope; }, dielectroncuts.cfg_min_phiv, dielectroncuts.cfg_max_phiv);
653655
fDielectronCut.ApplyPhiV(dielectroncuts.cfg_apply_phiv);
654-
fDielectronCut.SetMindEtadPhi(dielectroncuts.cfg_apply_detadphi, dielectroncuts.cfg_min_deta, dielectroncuts.cfg_min_dphi);
656+
fDielectronCut.SetMindEtadPhi(dielectroncuts.cfg_apply_detadphi, dielectroncuts.cfg_apply_detadphiposition, dielectroncuts.cfg_min_deta, dielectroncuts.cfg_min_dphi);
655657
fDielectronCut.SetPairOpAng(dielectroncuts.cfg_min_opang, dielectroncuts.cfg_max_opang);
656658
fDielectronCut.SetRequireDifferentSides(dielectroncuts.cfg_require_diff_sides);
657659

@@ -828,7 +830,7 @@ struct DileptonMC {
828830
return false;
829831
}
830832
}
831-
if (!cut.IsSelectedPair(t1, t2, d_bz)) {
833+
if (!cut.IsSelectedPair(t1, t2, d_bz, dielectroncuts.cfgRefR)) {
832834
return false;
833835
}
834836
} else if constexpr (pairtype == o2::aod::pwgem::dilepton::utils::pairutil::DileptonPairType::kDimuon) {
@@ -1895,7 +1897,7 @@ struct DileptonMC {
18951897
}
18961898

18971899
if constexpr (pairtype == o2::aod::pwgem::dilepton::utils::pairutil::DileptonPairType::kDielectron) {
1898-
if (!cut.template IsSelectedPair<is_wo_acc>(t1, t2, d_bz)) {
1900+
if (!cut.template IsSelectedPair<is_wo_acc>(t1, t2, d_bz, dielectroncuts.cfgRefR)) {
18991901
return false;
19001902
}
19011903
} else if constexpr (pairtype == o2::aod::pwgem::dilepton::utils::pairutil::DileptonPairType::kDimuon) {

PWGEM/Dilepton/Core/PhotonHBT.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,7 @@ struct PhotonHBT {
213213
Configurable<float> cfg_max_rel_diff_pin{"cfg_max_rel_diff_pin", +1e+10, "max rel. diff. between pin and ppv"};
214214
Configurable<bool> cfg_require_itsib_any{"cfg_require_itsib_any", false, "flag to require ITS ib any hits"};
215215
Configurable<bool> cfg_require_itsib_1st{"cfg_require_itsib_1st", true, "flag to require ITS ib 1st hit"};
216+
Configurable<float> cfgRefR{"cfgRefR", 1.2, "reference R (in m) for extrapolation"}; // https://cds.cern.ch/record/1419204
216217

217218
Configurable<int> cfg_pid_scheme{"cfg_pid_scheme", static_cast<int>(DielectronCut::PIDSchemes::kTPChadrejORTOFreq), "pid scheme [kTOFreq : 0, kTPChadrej : 1, kTPChadrejORTOFreq : 2, kTPConly : 3, kTOFif = 4, kPIDML = 5]"};
218219
Configurable<float> cfg_min_TPCNsigmaEl{"cfg_min_TPCNsigmaEl", -2.0, "min. TPC n sigma for electron inclusion"};
@@ -849,7 +850,7 @@ struct PhotonHBT {
849850
continue;
850851
}
851852
}
852-
if (!cut1.IsSelectedPair(pos1, ele1, d_bz)) {
853+
if (!cut1.IsSelectedPair(pos1, ele1, d_bz, dielectroncuts.cfgRefR)) {
853854
continue;
854855
}
855856

@@ -877,7 +878,7 @@ struct PhotonHBT {
877878
continue;
878879
}
879880
}
880-
if (!cut2.IsSelectedPair(pos2, ele2, d_bz)) {
881+
if (!cut2.IsSelectedPair(pos2, ele2, d_bz, dielectroncuts.cfgRefR)) {
881882
continue;
882883
}
883884

@@ -995,7 +996,7 @@ struct PhotonHBT {
995996
continue;
996997
}
997998
}
998-
if (!cut2.IsSelectedPair(pos2, ele2, d_bz)) {
999+
if (!cut2.IsSelectedPair(pos2, ele2, d_bz, dielectroncuts.cfgRefR)) {
9991000
continue;
10001001
}
10011002

@@ -1363,7 +1364,7 @@ struct PhotonHBT {
13631364
continue;
13641365
}
13651366
}
1366-
if (!cut.IsSelectedPair(pos, ele, d_bz)) {
1367+
if (!cut.IsSelectedPair(pos, ele, d_bz, dielectroncuts.cfgRefR)) {
13671368
continue;
13681369
}
13691370
passed_pairIds.emplace_back(std::make_pair(pos.globalIndex(), ele.globalIndex()));

0 commit comments

Comments
 (0)