Skip to content

Commit aea5260

Browse files
committed
add histograms for kine-transformed mass bias
1 parent 13b446a commit aea5260

File tree

1 file changed

+46
-1
lines changed

1 file changed

+46
-1
lines changed

PWGLF/TableProducer/Strangeness/LFStrangeTreeCreator.cxx

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,23 @@ float CalculateDCAStraightToPV(float X, float Y, float Z, float Px, float Py, fl
103103
{
104104
return std::sqrt((std::pow((pvY - Y) * Pz - (pvZ - Z) * Py, 2) + std::pow((pvX - X) * Pz - (pvZ - Z) * Px, 2) + std::pow((pvX - X) * Py - (pvY - Y) * Px, 2)) / (Px * Px + Py * Py + Pz * Pz));
105105
}
106+
float kineFactor(std::array<float, 3> const& momA, std::array<float, 3> const& momB, std::array<float, 3> const& momC, float const& massB, float const& massC, bool const& reso)
107+
{
108+
float invMass = invMass2Body(momA, momC, momB, massC, massB);
109+
float ptC = std::hypot(momC[0], momC[1]);
110+
float ptB = std::hypot(momB[0], momB[1]);
111+
float p2C = momC[0] * momC[0] + momC[1] * momC[1] + momC[2] * momC[2];
112+
float p2B = momB[0] * momB[0] + momB[1] * momB[1] + momB[2] * momB[2];
113+
float eC = RecoDecay::sqrtSumOfSquares(momC[0], momC[1], momC[2], massC);
114+
float eB = RecoDecay::sqrtSumOfSquares(momB[0], momB[1], momB[2], massB);
115+
float pCpB = momC[0] * momB[0] + momC[1] * momB[1] + momC[2] * momB[2];
116+
float kineC = (eB * p2C / eC / ptC) - pCpB / ptC;
117+
float kineB = (eC * p2B / eB / ptB) - pCpB / ptB;
118+
if (reso) {
119+
return std::hypot(kineC, kineB) / invMass;
120+
}
121+
return (kineC + kineB) / invMass;
122+
}
106123
} // namespace
107124

108125
struct CandidateV0 {
@@ -162,10 +179,13 @@ struct LFStrangeTreeCreator {
162179

163180
ConfigurableAxis centAxis{"centAxis", {106, 0, 106}, "binning for the centrality"};
164181
ConfigurableAxis zVtxAxis{"zVtxBins", {100, -20.f, 20.f}, "Binning for the vertex z in cm"};
182+
ConfigurableAxis etaAxis{"etaAxis", {8, -0.8f, 0.8f}, "binning for pseudorapidity"};
183+
ConfigurableAxis massKineAxis{"kineAxis", {3000, -3.f, 3.f}, "binning for the kinematic-transofrmed mass shift distributions"};
165184

166185
// binning of (anti)lambda mass QA histograms
167186
ConfigurableAxis massLambdaAxis{"massLambdaAxis", {400, o2::constants::physics::MassLambda0 - 0.03f, o2::constants::physics::MassLambda0 + 0.03f}, "binning for the lambda invariant-mass"};
168187
ConfigurableAxis massXiAxis{"massXiAxis", {400, o2::constants::physics::MassXiMinus - 0.05f, o2::constants::physics::MassXiMinus + 0.05f}, "binning for the Xi invariant-mass"};
188+
ConfigurableAxis massK0sAxis{"massK0sAxis", {400, o2::constants::physics::MassK0 - 0.1f, o2::constants::physics::MassK0 + 0.1f}, "binning for the K0s invariant-mass"};
169189

170190
Configurable<float> zVtxMax{"zVtxMax", 10.0f, "maximum z position of the primary vertex"};
171191
Configurable<float> etaMax{"etaMax", 0.8f, "maximum eta"};
@@ -184,6 +204,8 @@ struct LFStrangeTreeCreator {
184204
Configurable<float> v0trackNsharedClusTpc{"v0trackNsharedClusTpc", 5, "Maximum number of shared TPC clusters for V0 daughter"};
185205
Configurable<float> vetoMassK0Short{"vetoMassK0Short", 0.01f, "veto for V0 compatible with K0s mass"};
186206
Configurable<float> v0radiusMax{"v0radiusMax", 100.f, "maximum V0 radius eccepted"};
207+
Configurable<float> v0alphaMax{"v0alphaMax", 10.f, "maximum Armenteros alpha (longitdinal momentum asymmetry)"};
208+
Configurable<float> v0qtMin{"v0qtMin", 0.f, "minimum Armenteros qt (transverse momentum)"};
187209

188210
Configurable<float> v0setting_dcav0dau{"v0setting_dcav0dau", 0.5f, "DCA V0 Daughters"};
189211
Configurable<float> v0setting_dcav0pv{"v0setting_dcav0pv", 1.f, "DCA V0 to Pv"};
@@ -282,6 +304,11 @@ struct LFStrangeTreeCreator {
282304
// v0 QA
283305
histos.add<TH3>("QA/massLambda", ";Centrality (%);#it{p}_{T} (GeV/#it{c});#it{M}(p + #pi^{-}) (GeV/#it{c}^{2});Entries", HistType::kTH3F, {centAxis, momAxis, massLambdaAxis});
284306
histos.add<TH3>("QA/massXi", ";Centrality (%);#it{p}_{T} (GeV/#it{c});#it{M}(#Lambda + #pi^{-}) (GeV/#it{c}^{2});Entries", HistType::kTH3F, {centAxis, momAxis, massXiAxis});
307+
histos.add<TH2>("QA/massK0s", ";#it{p}_{T} (GeV/#it{c});#it{M}(#pi^{+} + #pi^{-}) (GeV/#it{c}^{2});Entries", HistType::kTH2F, {momAxis, massK0sAxis});
308+
309+
// histograms for momentum shift/resolution extraction
310+
histos.add<TH3>("massKineBias", ";#eta;#it{p}_{T} (GeV/#it{c});#delta#it{M}/#Sigma_{i}#partial#it{M}/#partial#it{p}^{i}_{T}", HistType::kTH3F, {etaAxis, momAxis, massKineAxis});
311+
histos.add<TH3>("massKineReso", ";#eta;#it{p}_{T} (GeV/#it{c});#delta#it{M}/#Sigma_{i}(#partial#it{M}/#partial#it{p}^{i}_{T})^{2}", HistType::kTH3F, {etaAxis, momAxis, massKineAxis});
285312
}
286313

287314
template <class C, class T>
@@ -335,12 +362,21 @@ struct LFStrangeTreeCreator {
335362
}
336363

337364
auto alpha = alphaAP(momV0, momPos, momNeg);
365+
if (std::abs(alpha) > v0alphaMax) {
366+
continue;
367+
}
368+
338369
bool matter = alpha > 0;
339370
auto massPos = matter ? o2::constants::physics::MassProton : o2::constants::physics::MassPionCharged;
340371
auto massNeg = matter ? o2::constants::physics::MassPionCharged : o2::constants::physics::MassProton;
341372
auto mLambda = invMass2Body(momV0, momPos, momNeg, massPos, massNeg);
342373
auto mK0Short = invMass2Body(momV0, momPos, momNeg, o2::constants::physics::MassPionCharged, o2::constants::physics::MassPionCharged);
343374

375+
auto qt = qtAP(momV0, momPos);
376+
if (std::abs(qt) < v0qtMin) {
377+
continue;
378+
}
379+
344380
// pid selections
345381
auto nSigmaTPCPos = matter ? posTrack.tpcNSigmaPr() : posTrack.tpcNSigmaPi();
346382
auto nSigmaTPCNeg = matter ? negTrack.tpcNSigmaPi() : negTrack.tpcNSigmaPr();
@@ -416,7 +452,16 @@ struct LFStrangeTreeCreator {
416452
if (std::abs(mLambda - o2::constants::physics::MassLambda0) > lambdaMassCut) { // for QA histograms
417453
continue;
418454
}
455+
456+
float ptPos = std::hypot(momPos[0], momPos[1]);
457+
float deltaMass = mK0Short - o2::constants::physics::MassK0;
458+
float massKineBias = deltaMass / kineFactor(momV0, momPos, momNeg, o2::constants::physics::MassPiMinus, o2::constants::physics::MassPiMinus, false);
459+
float massKineReso = deltaMass / kineFactor(momV0, momPos, momNeg, o2::constants::physics::MassPiMinus, o2::constants::physics::MassPiMinus, true);
460+
419461
histos.fill(HIST("QA/massLambda"), centrality, ptV0, mLambda);
462+
histos.fill(HIST("QA/massK0s"), ptV0, mK0Short);
463+
histos.fill(HIST("massKineBias"), ptPos, massKineBias);
464+
histos.fill(HIST("massKineReso"), ptPos, massKineReso);
420465

421466
CandidateV0 candV0;
422467
candV0.pt = matter > 0. ? ptV0 : -ptV0;
@@ -427,7 +472,7 @@ struct LFStrangeTreeCreator {
427472
candV0.radius = radiusV0;
428473
candV0.cpa = cosPA;
429474
candV0.alphaAP = alpha;
430-
candV0.qtAP = qtAP(momV0, momPos);
475+
candV0.qtAP = qt;
431476
candV0.trackv0 = fitter.createParentTrackParCov();
432477
candV0.mompos = std::array{momPos[0], momPos[1], momPos[2]};
433478
candV0.momneg = std::array{momNeg[0], momNeg[1], momNeg[2]};

0 commit comments

Comments
 (0)