Skip to content

Commit 80c14c6

Browse files
fmazzascFrancesco Mazzaschi
andauthored
Improve selections and fix ccdb initialisation (#7956)
Co-authored-by: Francesco Mazzaschi <fmazzasc@alipap1.cern.ch>
1 parent d192a2d commit 80c14c6

File tree

1 file changed

+54
-20
lines changed

1 file changed

+54
-20
lines changed

PWGLF/Tasks/QC/strangenessTrackingQC.cxx

Lines changed: 54 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ namespace
4343
};
4444

4545
struct miniCasc {
46-
bool isOmega;
46+
bool fillOmega;
4747
float pt;
4848
float eta;
4949
float phi;
@@ -84,6 +84,10 @@ struct strangenessTrackingQC {
8484
HistogramRegistry registry{
8585
"registry",
8686
{
87+
{"omegaMassFull", "; Mass (GeV/#it{c}^{2}); Counts", {HistType::kTH1F, {{125, 1.650, 1.700}}}},
88+
{"xiMassFull", "; Mass (GeV/#it{c}^{2}); Counts", {HistType::kTH1F, {{125, 1.296, 1.346}}}},
89+
{"omegaMassTracked", "; Mass (GeV/#it{c}^{2}); Counts", {HistType::kTH1F, {{125, 1.650, 1.700}}}},
90+
{"xiMassTracked", "; Mass (GeV/#it{c}^{2}); Counts", {HistType::kTH1F, {{125, 1.296, 1.346}}}},
8791
{"omegaHistFull", "; #it{p}_{T} (GeV/#it{c}); Radius (cm); Mass", {HistType::kTH3F, {{ptBins, decayRadBins, omegaMassBins}}}},
8892
{"xiHistFull", "; #it{p}_{T} (GeV/#it{c}); Radius (cm); Mass", {HistType::kTH3F, {{ptBins, decayRadBins, xiMassBins}}}},
8993
{"xiHistTracked", "; #it{p}_{T} (GeV/#it{c}); Radius (cm); Mass", {HistType::kTH3F, {{ptBins, decayRadBins, xiMassBins}}}},
@@ -98,15 +102,42 @@ struct strangenessTrackingQC {
98102
return std::hypot(dcaInfo[0], dcaInfo[1]);
99103
}
100104

105+
template <typename T>
106+
bool qualityTrackSelection(const T& track)
107+
{
108+
if (std::abs(track.eta()) > 0.9) {
109+
return false;
110+
}
111+
if (track.tpcNClsFound() < cfgCutNclusTPC) {
112+
return false;
113+
}
114+
return true;
115+
}
116+
117+
float computeMassMother(const float massA, const float massB, const std::array<float, 3>& momA, const std::array<float, 3>& momB, const std::array<float, 3>& momMother) const
118+
{
119+
float eA = std::hypot(massA, std::hypot(momA[0], momA[1], momA[2]));
120+
float eB = std::hypot(massB, std::hypot(momB[0], momB[1], momB[2]));
121+
float lmomMotherl = std::hypot(momMother[0], momMother[1], momMother[2]);
122+
float eMother = eA + eB;
123+
return std::sqrt(eMother * eMother - lmomMotherl * lmomMotherl);
124+
}
125+
101126
template <class TCasc>
102127
bool buildCascade(TCasc const& casc, CollisionCandidates::iterator const& collision, aod::V0s const&, TrackCandidates const&, miniCasc& miniCasc)
103128
{
104129
const auto& v0 = casc.template v0_as<aod::V0s>();
105130
const auto& bachelor = casc.template bachelor_as<TrackCandidates>();
106131
const auto& ptrack = v0.template posTrack_as<TrackCandidates>();
107132
const auto& ntrack = v0.template negTrack_as<TrackCandidates>();
133+
if (!qualityTrackSelection(ptrack) || !qualityTrackSelection(ntrack) || !qualityTrackSelection(bachelor)) {
134+
return false;
135+
}
108136
const auto& protonTrack = bachelor.sign() > 0 ? ntrack : ptrack;
109137
const auto& pionTrack = bachelor.sign() > 0 ? ptrack : ntrack;
138+
if (std::abs(protonTrack.tpcNSigmaPr()) > 3 || std::abs(pionTrack.tpcNSigmaPi()) > 3) {
139+
return false;
140+
}
110141
const auto primaryVertex = getPrimaryVertex(collision);
111142
std::array<float, 3> pvPos = {primaryVertex.getX(), primaryVertex.getY(), primaryVertex.getZ()};
112143

@@ -149,18 +180,12 @@ struct strangenessTrackingQC {
149180
}
150181

151182
miniCasc.pt = std::hypot(cascMom[0], cascMom[1]);
183+
miniCasc.massOmega = computeMassMother(constants::physics::MassLambda0, constants::physics::MassKaonCharged, v0Mom, bachelorMom, cascMom);
184+
miniCasc.massXi = computeMassMother(constants::physics::MassLambda0, constants::physics::MassPionCharged, v0Mom, bachelorMom, cascMom);
152185

153-
// look if the cascade is in the Xi mass window
154-
std::array<double, 2> masses;
155-
float eV0 = std::sqrt(RecoDecay::p2(v0Mom) + o2::constants::physics::MassLambda0 * o2::constants::physics::MassLambda0);
156-
float eKBach = std::sqrt(RecoDecay::p2(bachelorMom) + o2::constants::physics::MassKPlus * o2::constants::physics::MassKPlus);
157-
float ePiBach = std::sqrt(RecoDecay::p2(bachelorMom) + o2::constants::physics::MassPiPlus * o2::constants::physics::MassPiPlus);
158-
miniCasc.massOmega = std::sqrt((eV0 + eKBach) * (eV0 + eKBach) - RecoDecay::p2(cascMom));
159-
miniCasc.massXi = std::sqrt((eV0 + ePiBach) * (eV0 + ePiBach) - RecoDecay::p2(cascMom));
160-
161-
miniCasc.isOmega = false;
162-
if (TMath::Abs(miniCasc.massXi - constants::physics::MassXiMinus) > 0.005) {
163-
miniCasc.isOmega = true;
186+
miniCasc.fillOmega = false;
187+
if (TMath::Abs(miniCasc.massXi - constants::physics::MassXiMinus) > 0.01 && std::abs(bachelor.tpcNSigmaKa()) < 3) {
188+
miniCasc.fillOmega = true;
164189
}
165190

166191
miniCasc.dcaXYCasc = dcaToPV(pvPos, trackParCovCasc);
@@ -199,8 +224,6 @@ struct strangenessTrackingQC {
199224
ccdb->setCaching(true);
200225
ccdb->setLocalObjectValidityChecking();
201226
ccdb->setFatalWhenNull(false);
202-
// lut = o2::base::MatLayerCylSet::rectifyPtrFromFile(ccdb->get<o2::base::MatLayerCylSet>("GLO/Param/MatLUT"));
203-
204227
m_fitter.setPropagateToPCA(true);
205228
m_fitter.setMaxR(200.);
206229
m_fitter.setMinParamChange(1e-3);
@@ -216,10 +239,15 @@ struct strangenessTrackingQC {
216239

217240
void process(CollisionCandidates const& collisions, aod::AssignedTrackedCascades const& trackedCascades, aod::Cascades const& cascades, aod::V0s const& v0s, TrackCandidates const& tracks, aod::BCsWithTimestamps const&)
218241
{
242+
219243
for (const auto& trackedCascade : trackedCascades) {
220244
miniCasc miniCasc;
221245
const auto& casc = trackedCascade.cascade();
222246
auto collision = trackedCascade.collision_as<CollisionCandidates>();
247+
if (!collision.sel8() || std::abs(collision.posZ()) > 10) {
248+
continue;
249+
}
250+
initCCDB(collision.bc_as<aod::BCsWithTimestamps>());
223251
if (buildCascade(casc, collision, v0s, tracks, miniCasc)) {
224252

225253
// compute the dca of the tracked cascade
@@ -230,23 +258,29 @@ struct strangenessTrackingQC {
230258
auto pvPosArr = std::array<float, 3>{pvPos.getX(), pvPos.getY(), pvPos.getZ()};
231259
miniCasc.dcaXYTracked = dcaToPV(pvPosArr, trackCovTrk);
232260
// fill the histograms
233-
if (miniCasc.isOmega) {
261+
if (miniCasc.fillOmega) {
262+
registry.fill(HIST("omegaMassTracked"), miniCasc.massOmega);
234263
registry.fill(HIST("omegaHistTracked"), miniCasc.pt, miniCasc.radius, miniCasc.massOmega);
235-
} else {
236-
registry.fill(HIST("xiHistTracked"), miniCasc.pt, miniCasc.radius, miniCasc.massXi);
237264
}
265+
registry.fill(HIST("xiMassTracked"), miniCasc.massXi);
266+
registry.fill(HIST("xiHistTracked"), miniCasc.pt, miniCasc.radius, miniCasc.massXi);
238267
}
239268
}
240269

241270
for (auto& cascade : cascades) {
242271
miniCasc miniCasc;
243272
auto collision = cascade.collision_as<CollisionCandidates>();
273+
if (!collision.sel8() || std::abs(collision.posZ()) > 10) {
274+
continue;
275+
}
276+
initCCDB(collision.bc_as<aod::BCsWithTimestamps>());
244277
if (buildCascade(cascade, collision, v0s, tracks, miniCasc)) {
245-
if (miniCasc.isOmega) {
278+
if (miniCasc.fillOmega) {
279+
registry.fill(HIST("omegaMassFull"), miniCasc.massOmega);
246280
registry.fill(HIST("omegaHistFull"), miniCasc.pt, miniCasc.radius, miniCasc.massOmega);
247-
} else {
248-
registry.fill(HIST("xiHistFull"), miniCasc.pt, miniCasc.radius, miniCasc.massXi);
249281
}
282+
registry.fill(HIST("xiMassFull"), miniCasc.massXi);
283+
registry.fill(HIST("xiHistFull"), miniCasc.pt, miniCasc.radius, miniCasc.massXi);
250284
}
251285
}
252286
}

0 commit comments

Comments
 (0)