Skip to content

Commit 2474962

Browse files
authored
[PWGEM/Dilepton] add possibility to select AC combination (AliceO2Group#8326)
1 parent 0f553c0 commit 2474962

File tree

5 files changed

+41
-4
lines changed

5 files changed

+41
-4
lines changed

PWGEM/Dilepton/Core/DielectronCut.cxx

+5
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,11 @@ void DielectronCut::SetMindEtadPhi(bool flag, float min_deta, float min_dphi)
7777
mMinDeltaPhi = min_dphi;
7878
LOG(info) << "Dielectron Cut, set apply deta-dphi cut: " << mApplydEtadPhi << " min_deta: " << mMinDeltaEta << " min_dphi: " << mMinDeltaPhi;
7979
}
80+
void DielectronCut::SetRequireDifferentSides(bool flag)
81+
{
82+
mRequireDiffSides = flag;
83+
LOG(info) << "Dielectron Cut, require 2 tracks to be from different sides: " << mRequireDiffSides;
84+
}
8085
void DielectronCut::SetTrackPtRange(float minPt, float maxPt)
8186
{
8287
mMinTrackPt = minPt;

PWGEM/Dilepton/Core/DielectronCut.h

+8
Original file line numberDiff line numberDiff line change
@@ -129,13 +129,19 @@ class DielectronCut : public TNamed
129129
if (mApplyPhiV && ((phiv < mMinPhivPair || (mMaxPhivPairMeeDep ? mMaxPhivPairMeeDep(v12.M()) : mMaxPhivPair) < phiv) ^ mSelectPC)) {
130130
return false;
131131
}
132+
132133
if (dca_ee_3d < mMinPairDCA3D || mMaxPairDCA3D < dca_ee_3d) { // in sigma for pair
133134
return false;
134135
}
136+
135137
if (opAng < mMinOpAng || mMaxOpAng < opAng) { // in sigma for pair
136138
return false;
137139
}
138140

141+
if (mRequireDiffSides && t1.eta() * t2.eta() > 0.0) {
142+
return false;
143+
}
144+
139145
float deta = v1.Eta() - v2.Eta();
140146
float dphi = v1.Phi() - v2.Phi();
141147
o2::math_utils::bringToPMPi(dphi);
@@ -380,6 +386,7 @@ class DielectronCut : public TNamed
380386
void SetPhivPairRange(float min, float max);
381387
void SelectPhotonConversion(bool flag);
382388
void SetMindEtadPhi(bool flag, float min_deta, float min_dphi);
389+
void SetRequireDifferentSides(bool flag);
383390

384391
void SetTrackPtRange(float minPt = 0.f, float maxPt = 1e10f);
385392
void SetTrackEtaRange(float minEta = -1e10f, float maxEta = 1e10f);
@@ -444,6 +451,7 @@ class DielectronCut : public TNamed
444451
float mMinDeltaEta{0.f};
445452
float mMinDeltaPhi{0.f};
446453
float mMinOpAng{0.f}, mMaxOpAng{1e10f};
454+
bool mRequireDiffSides{false}; // flag to require 2 tracks to be from different sides. (A-C combination). If one wants 2 tracks to be in the same side (A-A or C-C), one can simply use track eta cut.
447455

448456
// kinematic cuts
449457
float mMinTrackPt{0.f}, mMaxTrackPt{1e10f}; // range in pT

PWGEM/Dilepton/Core/Dilepton.h

+15-3
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ struct Dilepton {
103103
Configurable<int> cfgEP2Estimator_for_Mix{"cfgEP2Estimator_for_Mix", 3, "FT0M:0, FT0A:1, FT0C:2, BTot:3, BPos:4, BNeg:5"};
104104
Configurable<int> cfgQvecEstimator{"cfgQvecEstimator", 0, "FT0M:0, FT0A:1, FT0C:2, BTot:3, BPos:4, BNeg:5"};
105105
Configurable<int> cfgCentEstimator{"cfgCentEstimator", 2, "FT0M:0, FT0A:1, FT0C:2"};
106+
Configurable<int> cfgOccupancyEstimator{"cfgOccupancyEstimator", 0, "FT0C:0, Track:1"};
106107
Configurable<float> cfgCentMin{"cfgCentMin", 0, "min. centrality"};
107108
Configurable<float> cfgCentMax{"cfgCentMax", 999.f, "max. centrality"};
108109
Configurable<bool> cfgDoMix{"cfgDoMix", true, "flag for event mixing"};
@@ -168,6 +169,7 @@ struct Dilepton {
168169
Configurable<float> cfg_min_dphi{"cfg_min_dphi", 0.2, "min dphi between 2 electrons (elliptic cut)"};
169170
Configurable<float> cfg_min_opang{"cfg_min_opang", 0.0, "min opening angle"};
170171
Configurable<float> cfg_max_opang{"cfg_max_opang", 6.4, "max opening angle"};
172+
Configurable<bool> cfg_require_diff_sides{"cfg_require_diff_sides", false, "flag to require 2 tracks are from different sides."};
171173

172174
Configurable<float> cfg_min_pt_track{"cfg_min_pt_track", 0.2, "min pT for single track"};
173175
Configurable<float> cfg_min_eta_track{"cfg_min_eta_track", -0.8, "min eta for single track"};
@@ -342,6 +344,7 @@ struct Dilepton {
342344
}
343345
}
344346

347+
LOGF(info, "cfgOccupancyEstimator = %d", cfgOccupancyEstimator.value);
345348
if (ConfOccupancyBins.value[0] == VARIABLE_WIDTH) {
346349
occ_bin_edges = std::vector<float>(ConfOccupancyBins.value.begin(), ConfOccupancyBins.value.end());
347350
occ_bin_edges.erase(occ_bin_edges.begin());
@@ -628,6 +631,7 @@ struct Dilepton {
628631
fDielectronCut.ApplyPrefilter(dielectroncuts.cfg_apply_pf);
629632
fDielectronCut.SetMindEtadPhi(dielectroncuts.cfg_apply_detadphi, dielectroncuts.cfg_min_deta, dielectroncuts.cfg_min_dphi);
630633
fDielectronCut.SetPairOpAng(dielectroncuts.cfg_min_opang, dielectroncuts.cfg_max_opang);
634+
fDielectronCut.SetRequireDifferentSides(dielectroncuts.cfg_require_diff_sides);
631635

632636
// for track
633637
fDielectronCut.SetTrackPtRange(dielectroncuts.cfg_min_pt_track, 1e+10f);
@@ -836,8 +840,8 @@ struct Dilepton {
836840

837841
if (cfgAnalysisType == static_cast<int>(o2::aod::pwgem::dilepton::utils::pairutil::DileptonAnalysisType::kQC)) {
838842
float dpt = fabs(v1.Pt() - v2.Pt());
839-
float deta = v1.Pt() > v2.Pt() ? v1.Eta() - v2.Eta() : v2.Eta() - v1.Eta();
840-
float dphi = v1.Pt() > v2.Pt() ? v1.Phi() - v2.Phi() : v2.Phi() - v1.Phi();
843+
float deta = t1.sign() * v1.Pt() > t2.sign() * v2.Pt() ? v1.Eta() - v2.Eta() : v2.Eta() - v1.Eta();
844+
float dphi = t1.sign() * v1.Pt() > t2.sign() * v2.Pt() ? v1.Phi() - v2.Phi() : v2.Phi() - v1.Phi();
841845
o2::math_utils::bringToPMPi(dphi);
842846
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);
843847
float opAng = o2::aod::pwgem::dilepton::utils::pairutil::getOpeningAngle(t1.px(), t1.py(), t1.pz(), t2.px(), t2.py(), t2.pz());
@@ -1198,7 +1202,15 @@ struct Dilepton {
11981202
epbin = static_cast<int>(ep_bin_edges.size()) - 2;
11991203
}
12001204

1201-
int occbin = lower_bound(occ_bin_edges.begin(), occ_bin_edges.end(), collision.trackOccupancyInTimeRange()) - occ_bin_edges.begin() - 1;
1205+
int occbin = -1;
1206+
if (cfgOccupancyEstimator == 0) {
1207+
occbin = lower_bound(occ_bin_edges.begin(), occ_bin_edges.end(), collision.ft0cOccupancyInTimeRange()) - occ_bin_edges.begin() - 1;
1208+
} else if (cfgOccupancyEstimator == 1) {
1209+
occbin = lower_bound(occ_bin_edges.begin(), occ_bin_edges.end(), collision.trackOccupancyInTimeRange()) - occ_bin_edges.begin() - 1;
1210+
} else {
1211+
occbin = lower_bound(occ_bin_edges.begin(), occ_bin_edges.end(), collision.ft0cOccupancyInTimeRange()) - occ_bin_edges.begin() - 1;
1212+
}
1213+
12021214
if (occbin < 0) {
12031215
occbin = 0;
12041216
} else if (static_cast<int>(occ_bin_edges.size()) - 2 < occbin) {

PWGEM/Dilepton/Core/DileptonMC.h

+2
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ struct DileptonMC {
148148
Configurable<float> cfg_min_dphi{"cfg_min_dphi", 0.2, "min dphi between 2 electrons (elliptic cut)"};
149149
Configurable<float> cfg_min_opang{"cfg_min_opang", 0.0, "min opening angle"};
150150
Configurable<float> cfg_max_opang{"cfg_max_opang", 6.4, "max opening angle"};
151+
Configurable<bool> cfg_require_diff_sides{"cfg_require_diff_sides", false, "flag to require 2 tracks are from different sides."};
151152

152153
Configurable<float> cfg_min_pt_track{"cfg_min_pt_track", 0.2, "min pT for single track"};
153154
Configurable<float> cfg_min_eta_track{"cfg_min_eta_track", -0.8, "max eta for single track"};
@@ -516,6 +517,7 @@ struct DileptonMC {
516517
fDielectronCut.ApplyPrefilter(dielectroncuts.cfg_apply_pf);
517518
fDielectronCut.SetMindEtadPhi(dielectroncuts.cfg_apply_detadphi, dielectroncuts.cfg_min_deta, dielectroncuts.cfg_min_dphi);
518519
fDielectronCut.SetPairOpAng(dielectroncuts.cfg_min_opang, dielectroncuts.cfg_max_opang);
520+
fDielectronCut.SetRequireDifferentSides(dielectroncuts.cfg_require_diff_sides);
519521

520522
// for track
521523
fDielectronCut.SetTrackPtRange(dielectroncuts.cfg_min_pt_track, 1e+10f);

PWGEM/Dilepton/Core/PhotonHBT.h

+11-1
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ struct PhotonHBT {
9797
Configurable<bool> cfgDo3D{"cfgDo3D", false, "enable 3D analysis"};
9898
Configurable<int> cfgEP2Estimator_for_Mix{"cfgEP2Estimator_for_Mix", 3, "FT0M:0, FT0A:1, FT0C:2, BTot:3, BPos:4, BNeg:5"};
9999
Configurable<int> cfgCentEstimator{"cfgCentEstimator", 2, "FT0M:0, FT0A:1, FT0C:2"};
100+
Configurable<int> cfgOccupancyEstimator{"cfgOccupancyEstimator", 0, "FT0C:0, Track:1"};
100101
Configurable<float> cfgCentMin{"cfgCentMin", 0, "min. centrality"};
101102
Configurable<float> cfgCentMax{"cfgCentMax", 999, "max. centrality"};
102103
// Configurable<float> cfgSpherocityMin{"cfgSpherocityMin", -999.f, "min. spherocity"};
@@ -329,6 +330,7 @@ struct PhotonHBT {
329330
}
330331
}
331332

333+
LOGF(info, "cfgOccupancyEstimator = %d", cfgOccupancyEstimator.value);
332334
if (ConfOccupancyBins.value[0] == VARIABLE_WIDTH) {
333335
occ_bin_edges = std::vector<float>(ConfOccupancyBins.value.begin(), ConfOccupancyBins.value.end());
334336
occ_bin_edges.erase(occ_bin_edges.begin());
@@ -717,7 +719,15 @@ struct PhotonHBT {
717719
epbin = static_cast<int>(ep_bin_edges.size()) - 2;
718720
}
719721

720-
int occbin = lower_bound(occ_bin_edges.begin(), occ_bin_edges.end(), collision.trackOccupancyInTimeRange()) - occ_bin_edges.begin() - 1;
722+
int occbin = -1;
723+
if (cfgOccupancyEstimator == 0) {
724+
occbin = lower_bound(occ_bin_edges.begin(), occ_bin_edges.end(), collision.ft0cOccupancyInTimeRange()) - occ_bin_edges.begin() - 1;
725+
} else if (cfgOccupancyEstimator == 1) {
726+
occbin = lower_bound(occ_bin_edges.begin(), occ_bin_edges.end(), collision.trackOccupancyInTimeRange()) - occ_bin_edges.begin() - 1;
727+
} else {
728+
occbin = lower_bound(occ_bin_edges.begin(), occ_bin_edges.end(), collision.ft0cOccupancyInTimeRange()) - occ_bin_edges.begin() - 1;
729+
}
730+
721731
if (occbin < 0) {
722732
occbin = 0;
723733
} else if (static_cast<int>(occ_bin_edges.size()) - 2 < occbin) {

0 commit comments

Comments
 (0)