Skip to content

Commit e314a47

Browse files
committed
adding hq selection to remove soft backgrounds
1 parent 8982531 commit e314a47

File tree

3 files changed

+70
-47
lines changed

3 files changed

+70
-47
lines changed

PWGLF/DataModel/ReducedHeptaQuarkTables.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ DECLARE_SOA_TABLE(RedHQEvents, "AOD", "REDHQEVENT",
3838
bc::GlobalBC,
3939
bc::RunNumber,
4040
timestamp::Timestamp,
41+
collision::PosX,
42+
collision::PosY,
4143
collision::PosZ,
4244
collision::NumContrib,
4345
redhqevent::Centrality,

PWGLF/TableProducer/Resonances/HeptaQuarktable.cxx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -438,7 +438,7 @@ struct heptaquarktable {
438438
if (keepEventDoubleHQ && numberPhi > 1 && numberLambda > 0 && (hqresonance.size() == hqresonanced1.size()) && (hqresonance.size() == hqresonanced2.size())) {
439439
histos.fill(HIST("hEventstat"), 2.5);
440440
/////////// Fill collision table///////////////
441-
redHQEvents(bc.globalBC(), currentRunNumber, bc.timestamp(), collision.posZ(), collision.numContrib(), centrality, numberPhi, numberLambda);
441+
redHQEvents(bc.globalBC(), currentRunNumber, bc.timestamp(), collision.posX(), collision.posY(), collision.posZ(), collision.numContrib(), centrality, numberPhi, numberLambda);
442442
auto indexEvent = redHQEvents.lastIndex();
443443
//// Fill track table for HQ//////////////////
444444
for (auto if1 = hqresonance.begin(); if1 != hqresonance.end(); ++if1) {

PWGLF/Tasks/Resonances/heptaquark.cxx

Lines changed: 67 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,22 @@ struct heptaquark {
4747
Configurable<int> cfgPIDStrategy{"cfgPIDStrategy", 3, "PID strategy 1"};
4848
Configurable<float> cfgPIDPrPi{"cfgPIDPrPi", 3, "PID selection for proton and pion"};
4949

50-
Configurable<float> minPhiMass{"minPhiMass", 1.01, "Minimum phi mass"};
51-
Configurable<float> maxPhiMass{"maxPhiMass", 1.03, "Maximum phi mass"};
50+
Configurable<float> cfgMinPhiMass{"cfgMinPhiMass", 1.01, "Minimum phi mass"};
51+
Configurable<float> cfgMaxPhiMass{"cfgMaxPhiMass", 1.03, "Maximum phi mass"};
5252

53-
Configurable<float> minLambdaMass{"minLambdaMass", 1.1, "Minimum lambda mass"};
54-
Configurable<float> maxLambdaMass{"maxLambdaMass", 1.13, "Maximum lambda mass"};
53+
Configurable<float> cfgMinLambdaMass{"cfgMinLambdaMass", 1.1, "Minimum lambda mass"};
54+
Configurable<float> cfgMaxLambdaMass{"cfgMaxLambdaMass", 1.13, "Maximum lambda mass"};
5555

56-
Configurable<float> cutNsigmaTPC{"cutNsigmaTPC", 2.5, "nsigma cut TPC"};
57-
Configurable<float> cutNsigmaTOF{"cutNsigmaTOF", 3.0, "nsigma cut TOF"};
56+
Configurable<float> cfgNsigmaTPC{"cfgNsigmaTPC", 2.5, "nsigma cut TPC"};
57+
Configurable<float> cfgNsigmaTOF{"cfgNsigmaTOF", 3.0, "nsigma cut TOF"};
58+
59+
Configurable<bool> cfgSelectHQ{"cfgSelectHQ", true, "switch to select HQ"};
60+
61+
Configurable<float> cfgMinPhiPt{"cfgMinPhiPt", 0.2, "Minimum phi pt"};
62+
Configurable<float> cfgMinLambdaPt{"cfgMinLambdaPt", 0.5, "Minimum lambda pt"};
63+
64+
Configurable<float> cfgSoftFraction{"cfgSoftFraction", 0.01, "Minimum allowed softest fraction"};
65+
Configurable<float> cfgCollinear{"cfgCollinear", 0.98, "Maximum allowed collinear selection"};
5866

5967
ConfigurableAxis massAxis{"massAxis", {600, 2.8, 3.4}, "Invariant mass axis"};
6068
ConfigurableAxis ptAxis{"ptAxis", {VARIABLE_WIDTH, 0.2, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 4.0, 5.0, 6.5, 8.0, 10.0, 100.0}, "Transverse momentum bins"};
@@ -95,105 +103,115 @@ struct heptaquark {
95103
{
96104
if (PIDStrategy == 0) {
97105
if (TOFHit != 1) {
98-
if (TMath::Abs(nsigmaTPC) < cutNsigmaTPC) {
106+
if (TMath::Abs(nsigmaTPC) < cfgNsigmaTPC) {
99107
return true;
100108
}
101109
}
102110
if (TOFHit == 1) {
103-
if (TMath::Abs(nsigmaTOF) < cutNsigmaTOF) {
111+
if (TMath::Abs(nsigmaTOF) < cfgNsigmaTOF) {
104112
return true;
105113
}
106114
}
107115
}
108116
if (PIDStrategy == 1) {
109117
if (ptcand < 0.5) {
110-
if (TOFHit != 1 && TMath::Abs(nsigmaTPC) < cutNsigmaTPC) {
118+
if (TOFHit != 1 && TMath::Abs(nsigmaTPC) < cfgNsigmaTPC) {
111119
return true;
112120
}
113-
if (TOFHit == 1 && TMath::Abs(nsigmaTOF) < cutNsigmaTOF) {
121+
if (TOFHit == 1 && TMath::Abs(nsigmaTOF) < cfgNsigmaTOF) {
114122
return true;
115123
}
116124
}
117125
if (ptcand >= 0.5) {
118-
if (TOFHit == 1 && TMath::Abs(nsigmaTOF) < cutNsigmaTOF) {
126+
if (TOFHit == 1 && TMath::Abs(nsigmaTOF) < cfgNsigmaTOF) {
119127
return true;
120128
}
121129
}
122130
}
123131
if (PIDStrategy == 2) {
124132
if (ptcand < 0.5) {
125-
if (TOFHit != 1 && TMath::Abs(nsigmaTPC) < cutNsigmaTPC) {
133+
if (TOFHit != 1 && TMath::Abs(nsigmaTPC) < cfgNsigmaTPC) {
126134
return true;
127135
}
128-
if (TOFHit == 1 && TMath::Abs(nsigmaTOF) < cutNsigmaTOF) {
136+
if (TOFHit == 1 && TMath::Abs(nsigmaTOF) < cfgNsigmaTOF) {
129137
return true;
130138
}
131139
}
132140
if (ptcand >= 0.5 && ptcand < 1.2) {
133-
if (TOFHit == 1 && TMath::Abs(nsigmaTOF) < cutNsigmaTOF) {
141+
if (TOFHit == 1 && TMath::Abs(nsigmaTOF) < cfgNsigmaTOF) {
134142
return true;
135143
}
136-
if (TOFHit != 1 && nsigmaTPC > -1.5 && nsigmaTPC < cutNsigmaTPC) {
144+
if (TOFHit != 1 && nsigmaTPC > -1.5 && nsigmaTPC < cfgNsigmaTPC) {
137145
return true;
138146
}
139147
}
140148
if (ptcand >= 1.2) {
141-
if (TOFHit == 1 && TMath::Abs(nsigmaTOF) < cutNsigmaTOF) {
149+
if (TOFHit == 1 && TMath::Abs(nsigmaTOF) < cfgNsigmaTOF) {
142150
return true;
143151
}
144-
if (TOFHit != 1 && TMath::Abs(nsigmaTPC) < cutNsigmaTPC) {
152+
if (TOFHit != 1 && TMath::Abs(nsigmaTPC) < cfgNsigmaTPC) {
145153
return true;
146154
}
147155
}
148156
}
149157
if (PIDStrategy == 3) {
150158
if (ptcand < 0.5) {
151-
if (TOFHit != 1 && TMath::Abs(nsigmaTPC) < cutNsigmaTPC) {
159+
if (TOFHit != 1 && TMath::Abs(nsigmaTPC) < cfgNsigmaTPC) {
152160
return true;
153161
}
154-
if (TOFHit == 1 && TMath::Abs(nsigmaTOF) < cutNsigmaTOF) {
162+
if (TOFHit == 1 && TMath::Abs(nsigmaTOF) < cfgNsigmaTOF) {
155163
return true;
156164
}
157165
}
158166
if (ptcand >= 0.5 && ptcand < 1.2) {
159-
if (TOFHit == 1 && TMath::Abs(nsigmaTOF) < cutNsigmaTOF) {
167+
if (TOFHit == 1 && TMath::Abs(nsigmaTOF) < cfgNsigmaTOF) {
160168
return true;
161169
}
162170
}
163171
if (ptcand >= 1.2) {
164-
if (TOFHit == 1 && TMath::Abs(nsigmaTOF) < cutNsigmaTOF) {
172+
if (TOFHit == 1 && TMath::Abs(nsigmaTOF) < cfgNsigmaTOF) {
165173
return true;
166174
}
167-
if (TOFHit != 1 && TMath::Abs(nsigmaTPC) < cutNsigmaTPC) {
175+
if (TOFHit != 1 && TMath::Abs(nsigmaTPC) < cfgNsigmaTPC) {
168176
return true;
169177
}
170178
}
171179
}
172180
return false;
173181
}
174182

175-
template <typename V01, typename V02>
176-
ROOT::Math::XYZVector getDCAofV0V0(V01 const& v01, V02 const& v02)
177-
{
178-
ROOT::Math::XYZVector v01pos, v02pos, v01mom, v02mom;
179-
v01pos.SetXYZ(v01.x(), v01.y(), v01.z());
180-
v02pos.SetXYZ(v02.x(), v02.y(), v02.z());
181-
v01mom.SetXYZ(v01.px(), v01.py(), v01.pz());
182-
v02mom.SetXYZ(v02.px(), v02.py(), v02.pz());
183-
184-
ROOT::Math::XYZVector posdiff = v02pos - v01pos;
185-
ROOT::Math::XYZVector cross = v01mom.Cross(v02mom);
186-
ROOT::Math::XYZVector dcaVec = (posdiff.Dot(cross) / cross.Mag2()) * cross;
187-
return dcaVec;
188-
}
189-
190-
template <typename V01, typename V02>
191-
float getCPA(V01 const& v01, V02 const& v02)
183+
template <typename HQ1, typename HQ2, typename HQ3>
184+
int selectHQ(HQ1 const& hq1, HQ2 const& hq2, HQ3 const& hq3)
192185
{
193-
ROOT::Math::XYZVector v01mom, v02mom;
194-
v01mom.SetXYZ(v01.px() / v01.p(), v01.py() / v01.p(), v01.pz() / v01.p());
195-
v02mom.SetXYZ(v02.px() / v02.p(), v02.py() / v02.p(), v02.pz() / v02.p());
196-
return v01mom.Dot(v02mom);
186+
int selection = 0;
187+
if (hq1.Pt() < cfgMinPhiPt || hq2.Pt() < cfgMinPhiPt || hq3.Pt() < cfgMinLambdaPt)
188+
selection += 1;
189+
190+
double sumE = hq1.E() + hq2.E() + hq3.E();
191+
double emin = std::min({hq1.E(), hq2.E(), hq3.E()});
192+
double fmin = emin / std::max(1e-9, sumE);
193+
if (fmin < cfgSoftFraction)
194+
selection += 2;
195+
196+
auto ex = hq1 + hq2 + hq3;
197+
TVector3 boost = -ex.BoostVector();
198+
auto hqphipair_boost = hq1 + hq2;
199+
auto hqlambda_boost = hq3;
200+
hqphipair_boost.Boost(boost);
201+
hqlambda_boost.Boost(boost);
202+
double cosHel = hqlambda_boost.Vect().Dot(hqphipair_boost.Vect()) / (hqlambda_boost.Vect().Mag() * hqphipair_boost.Vect().Mag());
203+
if (std::abs(cosHel) > cfgCollinear)
204+
selection += 4;
205+
/*
206+
ROOT::Math::XYZVector rPV(col.posX(), col.posY(), col.posZ());
207+
ROOT::Math::XYZVector rSV(hq3.hqx(), hq3.hqy(), hq3.hqz());
208+
ROOT::Math::XYZVector L = rSV - rPV;
209+
ROOT::Math::XYZVector exMom(ex.Px(), ex.Py(), ex.Pz());
210+
double cosPoint = L.Dot(exMom) / (L.R() * pEx.R() + 1e-9);
211+
if (cosPoint < cfgCosPoint)
212+
return 8;
213+
*/
214+
return selection;
197215
}
198216

199217
ROOT::Math::PxPyPzMVector DauVec1, DauVec2;
@@ -214,7 +232,7 @@ struct heptaquark {
214232
if (hqtrackd1.hqId() != 333)
215233
continue;
216234

217-
if (hqtrackd1.hqMass() < minPhiMass || hqtrackd1.hqMass() > maxPhiMass)
235+
if (hqtrackd1.hqMass() < cfgMinPhiMass || hqtrackd1.hqMass() > cfgMaxPhiMass)
218236
continue;
219237

220238
DauVec1 = ROOT::Math::PxPyPzMVector(hqtrackd1.hqd1Px(), hqtrackd1.hqd1Py(), hqtrackd1.hqd1Pz(), massKa);
@@ -246,7 +264,7 @@ struct heptaquark {
246264
if (hqtrackd2.hqId() != 333)
247265
continue;
248266

249-
if (hqtrackd2.hqMass() < minPhiMass || hqtrackd2.hqMass() > maxPhiMass)
267+
if (hqtrackd2.hqMass() < cfgMinPhiMass || hqtrackd2.hqMass() > cfgMaxPhiMass)
250268
continue;
251269

252270
DauVec1 = ROOT::Math::PxPyPzMVector(hqtrackd2.hqd1Px(), hqtrackd2.hqd1Py(), hqtrackd2.hqd1Pz(), massKa);
@@ -278,7 +296,7 @@ struct heptaquark {
278296
if (std::abs(hqtrackd3.hqId()) != 3122)
279297
continue;
280298

281-
if (hqtrackd3.hqMass() < minLambdaMass || hqtrackd3.hqMass() > maxLambdaMass)
299+
if (hqtrackd3.hqMass() < cfgMinLambdaMass || hqtrackd3.hqMass() > cfgMaxLambdaMass)
282300
continue;
283301

284302
int isLambda = static_cast<int>(hqtrackd3.hqId() < 0);
@@ -321,6 +339,9 @@ struct heptaquark {
321339
HQ12 = HQ1 + HQ2;
322340
HQ13 = HQ1 + HQ3;
323341

342+
if (cfgSelectHQ && selectHQ(HQ1, HQ2, HQ3))
343+
continue;
344+
324345
histos.fill(HIST("h_InvMass_same"), exotic.M(), exotic.Pt(), collision.centrality());
325346
histos.fill(HIST("hDalitz"), HQ12.M2(), HQ13.M2(), exotic.M(), exotic.Pt(), isLambda, collision.centrality());
326347

0 commit comments

Comments
 (0)