Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 13 additions & 12 deletions PWGLF/TableProducer/Resonances/doublephitable.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,8 @@
template <typename T>
bool selectionTrack(const T& candidate)
{
if (useGlobalTrack && !(candidate.isGlobalTrack() && candidate.isPVContributor() && candidate.itsNCls() > cfgITScluster && candidate.tpcNClsCrossedRows() > cfgTPCcluster)) {
// if (useGlobalTrack && !(candidate.isGlobalTrack() && candidate.isPVContributor() && candidate.itsNCls() > cfgITScluster && candidate.tpcNClsCrossedRows() > cfgTPCcluster)) {
if (useGlobalTrack && !(candidate.isGlobalTrack() && candidate.isPVContributor() && candidate.itsNCls() > cfgITScluster && candidate.tpcNClsFound() > cfgTPCcluster && candidate.tpcNClsCrossedRows() > cfgTPCcluster)) {
return false;
}
return true;
Expand Down Expand Up @@ -262,7 +263,7 @@
hProcessedEvents->Fill(2.5);
auto posThisColl = posTracks->sliceByCached(aod::track::collisionId, collision.globalIndex(), cache);
auto negThisColl = negTracks->sliceByCached(aod::track::collisionId, collision.globalIndex(), cache);
for (auto track1 : posThisColl) {

Check failure on line 266 in PWGLF/TableProducer/Resonances/doublephitable.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[const-ref-in-for-loop]

Use constant references for non-modified iterators in range-based for loops.
// track selection
if (!selectionTrack(track1)) {
continue;
Expand All @@ -272,7 +273,7 @@
if (!selectionPID(track1)) {
continue;
}
if (!(itsResponse.nSigmaITS<o2::track::PID::Kaon>(track1) > -2.0 && itsResponse.nSigmaITS<o2::track::PID::Kaon>(track1) < 3.0)) {
if (!(itsResponse.nSigmaITS<o2::track::PID::Kaon>(track1) > -3.0 && itsResponse.nSigmaITS<o2::track::PID::Kaon>(track1) < 3.0)) {

Check failure on line 276 in PWGLF/TableProducer/Resonances/doublephitable.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[magic-number]

Avoid magic numbers in expressions. Assign the value to a clearly named variable or constant.
continue;
}
Npostrack = Npostrack + 1;
Expand All @@ -281,7 +282,7 @@
qaRegistry.fill(HIST("hNsigmaPtkaonTOF"), track1.tofNSigmaKa(), track1.pt());
}
auto track1ID = track1.globalIndex();
for (auto track2 : negThisColl) {

Check failure on line 285 in PWGLF/TableProducer/Resonances/doublephitable.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[const-ref-in-for-loop]

Use constant references for non-modified iterators in range-based for loops.
auto track2ID = track2.globalIndex();
if (track2ID == track1ID) {
continue;
Expand All @@ -294,7 +295,7 @@
if (!selectionPID(track2)) {
continue;
}
if (!(itsResponse.nSigmaITS<o2::track::PID::Kaon>(track2) > -2.0 && itsResponse.nSigmaITS<o2::track::PID::Kaon>(track2) < 3.0)) {
if (!(itsResponse.nSigmaITS<o2::track::PID::Kaon>(track2) > -3.0 && itsResponse.nSigmaITS<o2::track::PID::Kaon>(track2) < 3.0)) {

Check failure on line 298 in PWGLF/TableProducer/Resonances/doublephitable.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[magic-number]

Avoid magic numbers in expressions. Assign the value to a clearly named variable or constant.
continue;
}
if (Npostrack == 1) {
Expand Down Expand Up @@ -442,7 +443,7 @@
bool selectionITSKaon(const T& candidate, float& nSigmaITS)
{
nSigmaITS = o2::aod::ITSResponse::nSigmaITS<o2::track::PID::Kaon>(candidate);
if (!(nSigmaITS > -2.0f && nSigmaITS < 3.0f)) {
if (!(nSigmaITS > -3.0f && nSigmaITS < 3.0f)) {

Check failure on line 446 in PWGLF/TableProducer/Resonances/doublephitable.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[magic-number]

Avoid magic numbers in expressions. Assign the value to a clearly named variable or constant.
return false;
}

Expand Down Expand Up @@ -515,12 +516,12 @@
pair.vertexLxy = std::hypot(pair.deltaVtxX, pair.deltaVtxY);
pair.vertexL3D = std::sqrt(pair.deltaVtxX * pair.deltaVtxX + pair.deltaVtxY * pair.deltaVtxY + pair.deltaVtxZ * pair.deltaVtxZ);
float varLxy = 0.5f * (cxx + cyy);
if (pair.vertexLxy > 1.e-12f) {

Check failure on line 519 in PWGLF/TableProducer/Resonances/doublephitable.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[magic-number]

Avoid magic numbers in expressions. Assign the value to a clearly named variable or constant.
varLxy = (pair.deltaVtxX * pair.deltaVtxX * cxx + 2.f * pair.deltaVtxX * pair.deltaVtxY * cxy + pair.deltaVtxY * pair.deltaVtxY * cyy) / (pair.vertexLxy * pair.vertexLxy);
}

float varL3D = (cxx + cyy + czz) / 3.f;
if (pair.vertexL3D > 1.e-12f) {

Check failure on line 524 in PWGLF/TableProducer/Resonances/doublephitable.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[magic-number]

Avoid magic numbers in expressions. Assign the value to a clearly named variable or constant.
varL3D = (pair.deltaVtxX * pair.deltaVtxX * cxx + pair.deltaVtxY * pair.deltaVtxY * cyy + pair.deltaVtxZ * pair.deltaVtxZ * czz +
2.f * pair.deltaVtxX * pair.deltaVtxY * cxy + 2.f * pair.deltaVtxX * pair.deltaVtxZ * cxz + 2.f * pair.deltaVtxY * pair.deltaVtxZ * cyz) /
(pair.vertexL3D * pair.vertexL3D);
Expand All @@ -542,7 +543,7 @@
pair.maxDcaChi2 = -1.f;
pair.maxAbsDcaXYSig = -1.f;
pair.maxAbsDcaZSig = -1.f;
for (const auto* kaon : kaons) {

Check failure on line 546 in PWGLF/TableProducer/Resonances/doublephitable.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[const-ref-in-for-loop]

Use constant references for non-modified iterators in range-based for loops.
if (std::isfinite(kaon->dcaXYSig) && kaon->dcaXYSig > -900.f) {
pair.sumDcaXYSig2 += kaon->dcaXYSig * kaon->dcaXYSig;
pair.maxAbsDcaXYSig = std::max(pair.maxAbsDcaXYSig, std::abs(kaon->dcaXYSig));
Expand Down Expand Up @@ -598,7 +599,7 @@
selectedNeg.reserve(negThisColl.size());
selectedPosITS.reserve(posThisColl.size());
selectedNegITS.reserve(negThisColl.size());
for (auto track : posThisColl) {

Check failure on line 602 in PWGLF/TableProducer/Resonances/doublephitable.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[const-ref-in-for-loop]

Use constant references for non-modified iterators in range-based for loops.
if (!selectionTrack(track)) {
continue;
}
Expand All @@ -620,7 +621,7 @@
}
}

for (auto track : negThisColl) {

Check failure on line 624 in PWGLF/TableProducer/Resonances/doublephitable.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[const-ref-in-for-loop]

Use constant references for non-modified iterators in range-based for loops.
if (!selectionTrack(track)) {
continue;
}
Expand All @@ -642,12 +643,6 @@
}
}

const int nPosTrack = static_cast<int>(selectedPos.size());
const int nNegTrack = static_cast<int>(selectedNeg.size());
if (nPosTrack < 2 || nNegTrack < 2) {
return;
}

std::vector<PhiCandidateVtx> phiCandidates;
phiCandidates.reserve(selectedPos.size() * selectedNeg.size());
for (size_t iPos = 0; iPos < selectedPos.size(); ++iPos) {
Expand All @@ -657,7 +652,7 @@
ROOT::Math::PxPyPzMVector kaonPlus(trackPlus.px(), trackPlus.py(), trackPlus.pz(), massKa);
ROOT::Math::PxPyPzMVector kaonMinus(trackMinus.px(), trackMinus.py(), trackMinus.pz(), massKa);
const auto phi = kaonPlus + kaonMinus;
if (phi.M() <= minPhiMass || phi.M() >= maxPhiMass) {
if (phi.M() < minPhiMass || phi.M() > maxPhiMass) {
continue;
}

Expand All @@ -669,7 +664,11 @@
if (phiCandidates.size() < 2) {
return;
}

const int nPosTrack = static_cast<int>(selectedPos.size());
const int nNegTrack = static_cast<int>(selectedNeg.size());
if (nPosTrack < 2 || nNegTrack < 2) {
return;
}
const auto primaryVertex = getPrimaryVertex(collision);
const auto covPV = primaryVertex.getCov();
std::vector<PhiPhiPairPayload> acceptedPairs;
Expand All @@ -682,6 +681,7 @@
const int64_t id3 = phi2.kPlus.globalIndex();
const int64_t id4 = phi2.kMinus.globalIndex();
if (id1 == id2 || id1 == id3 || id1 == id4 || id2 == id3 || id2 == id4 || id3 == id4) {
// LOGF(info, "same track: %d %d %d %d", id1, id2, id3, id4);
continue;
}
auto trackPar1 = getTrackParCov(phi1.kPlus);
Expand All @@ -700,6 +700,7 @@
}

if (nFitCandidates == 0) {
// LOG(info) << "Four-kaon DCAFitterN failed with an unknown exception";
continue;
}

Expand Down
83 changes: 81 additions & 2 deletions PWGLF/Tasks/Resonances/doublephimeson.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ struct doublephimeson {

// THnsparse bining
ConfigurableAxis configThnAxisPtCorr{"configThnAxisPtCorr", {1000, 0.0, 100}, "#it{M} (GeV/#it{c}^{2})"};
ConfigurableAxis configThnAxisInvMass{"configThnAxisInvMass", {300, 2.4, 3.0}, "#it{M} (GeV/#it{c}^{2})"};
ConfigurableAxis configThnAxisInvMass{"configThnAxisInvMass", {400, 2.5, 2.9}, "#it{M} (GeV/#it{c}^{2})"};
ConfigurableAxis configThnAxisInvMassPhi{"configThnAxisInvMassPhi", {20, 1.01, 1.03}, "#it{M} (GeV/#it{c}^{2})"};
ConfigurableAxis configThnAxisInvMassDeltaPhi{"configThnAxisInvMassDeltaPhi", {80, 0.0, 0.08}, "#it{M} (GeV/#it{c}^{2})"};
ConfigurableAxis configThnAxisInvMassDeltaPhiSigma{"configThnAxisInvMassDeltaPhiSigma", {100, 0.0, 10}, "#it{M} (GeV/#it{c}^{2}) sigma"};
Expand All @@ -163,7 +163,10 @@ struct doublephimeson {
ConfigurableAxis configThnAxisDeltaRPhi{"configThnAxisDeltaRPhi", {120, 0.0, 6.0}, "ΔR(φ,φ)"};
ConfigurableAxis configThnAxisZ{"configThnAxisZ", {100, 0.0, 1.0}, "z"};
ConfigurableAxis configThnAxisA{"configThnAxisA", {100, 0.0, 1.0}, "A"};

ConfigurableAxis configThnAxisPhiPtVertex{"configThnAxisPhiPtVertex", {100, 0.0, 100.0}, "phi pT (GeV/c)"};
ConfigurableAxis configThnAxisDecayLength{"configThnAxisDecayLength", {200, 0.0, 1.0}, "3D decay length (cm)"};
ConfigurableAxis configThnAxisFitChi2Ndf{"configThnAxisFitChi2Ndf", {200, 0.0, 100.0}, "four-kaon fit chi2/NDF"};
ConfigurableAxis configThnAxisRmsDcaSig{"configThnAxisRmsDcaSig", {300, 0.0, 15.0}, "RMS DCA significance"};
// Initialize the ananlysis task
void init(o2::framework::InitContext&)
{
Expand Down Expand Up @@ -198,6 +201,11 @@ struct doublephimeson {
const AxisSpec thnAxisDeltaRPhi{configThnAxisDeltaRPhi, "#Delta R(#phi,#phi)"};
const AxisSpec thnAxisZ{configThnAxisZ, "z = p_{T1}/(p_{T1}+p_{T2})"};
const AxisSpec thnAxisA{configThnAxisA, "A = |p_{T1}-p_{T2}|/(p_{T1}+p_{T2})"};

const AxisSpec thnAxisDecayLength{configThnAxisDecayLength, "#it{L}_{3D} (cm)"};
const AxisSpec thnAxisFitChi2Ndf{configThnAxisFitChi2Ndf, "#chi^{2}/NDF"};
const AxisSpec thnAxisRmsDcaSig{configThnAxisRmsDcaSig, "RMS DCA significance"};

histos.add("SEMassUnlike", "SEMassUnlike", HistType::kTHnSparseF, {thnAxisInvMass, thnAxisDeltaR, thnAxisPt, thnAxisDeltaR, thnAxisInvMassDeltaPhi, thnAxisPtCorr});
// histos.add("SEMassLike", "SEMassLike", HistType::kTHnSparseF, {thnAxisInvMass, thnAxisPt, thnAxisDeltaR, thnAxisInvMassPhi, thnAxisInvMassPhi, thnAxisNumPhi});
histos.add("MEMassUnlike", "MEMassUnlike", HistType::kTHnSparseF, {thnAxisInvMass, thnAxisDeltaR, thnAxisPt, thnAxisDeltaR, thnAxisInvMassDeltaPhi, thnAxisPtCorr});
Expand Down Expand Up @@ -226,6 +234,8 @@ struct doublephimeson {
thnAxisInvMassDeltaPhi, // DeltaM_phi
thnAxisPtCorr,
thnAxisNumPhi}); // pT correlation variable

histos.add("SEMassUnlike_VertexVars", "SEMassUnlike_VertexVars", HistType::kTHnSparseF, {thnAxisInvMass, thnAxisPt, thnAxisInvMassDeltaPhi, thnAxisInvMassPhi, thnAxisInvMassPhi, thnAxisDecayLength, thnAxisFitChi2Ndf, thnAxisRmsDcaSig});
}

// get kstar
Expand Down Expand Up @@ -343,6 +353,23 @@ struct doublephimeson {
}
}

if (PIDStrategy == 1004) {
if (ptcand < 0.5 && TOFHit != 1 && nsigmaTPC > -3.0 && nsigmaTPC < 3.0) {
return true;
}
if (ptcand < 0.5 && TOFHit == 1 && std::sqrt(nsigmaTOF * nsigmaTOF + nsigmaTPC * nsigmaTPC) < 2.5) {
return true;
}
if (ptcand >= 0.5) {
if (TOFHit != 1 && nsigmaTPC > -2.0 && nsigmaTPC < 2.0) {
return true;
}
if (TOFHit == 1 && std::sqrt(nsigmaTOF * nsigmaTOF + nsigmaTPC * nsigmaTPC) < 2.5) {
return true;
}
}
}

if (PIDStrategy == 1008) {
if (ptcand < 0.5 && TOFHit != 1 && nsigmaTPC > -2.0 && nsigmaTPC < 2.0) {
return true;
Expand Down Expand Up @@ -1798,6 +1825,58 @@ struct doublephimeson {
}
PROCESS_SWITCH(doublephimeson, processopti5, "Process Optimized same event with all variables", true);

void processPairOpti6(aod::PhiPhiPairs const& pairs)
{
constexpr double mPhiPDG = o2::constants::physics::MassPhi;
constexpr double mKPDG = o2::constants::physics::MassKPlus;

for (auto const& pair : pairs) {
if (pair.k1Index() == pair.k2Index() || pair.k1Index() == pair.k3Index() || pair.k1Index() == pair.k4Index() || pair.k2Index() == pair.k3Index() || pair.k2Index() == pair.k4Index() || pair.k3Index() == pair.k4Index()) {
continue;
}
if (std::abs(pair.k1DcaXY()) >= 0.02f || std::abs(pair.k1DcaZ()) >= 0.02f || std::abs(pair.k2DcaXY()) >= 0.02f || std::abs(pair.k2DcaZ()) >= 0.02f || std::abs(pair.k3DcaXY()) >= 0.02f || std::abs(pair.k3DcaZ()) >= 0.02f || std::abs(pair.k4DcaXY()) >= 0.02f || std::abs(pair.k4DcaZ()) >= 0.02f) {
continue;
}
const double pairPt = std::hypot(pair.pairPx(), pair.pairPy());
if (pairPt <= minExoticPt || pair.pairMass() < minExoticMass || pair.pairMass() > maxExoticMass) {
continue;
}

const double pt1 = std::hypot(pair.phi1Px(), pair.phi1Py());
const double pt2 = std::hypot(pair.phi2Px(), pair.phi2Py());
if (pt1 < minPhiPt || pt1 > maxPhiPt || pt2 < minPhiPt || pt2 > maxPhiPt) {
continue;
}

const ROOT::Math::PxPyPzMVector k1(pair.k1Px(), pair.k1Py(), pair.k1Pz(), mKPDG);
const ROOT::Math::PxPyPzMVector k2(pair.k2Px(), pair.k2Py(), pair.k2Pz(), mKPDG);
const ROOT::Math::PxPyPzMVector k3(pair.k3Px(), pair.k3Py(), pair.k3Pz(), mKPDG);
const ROOT::Math::PxPyPzMVector k4(pair.k4Px(), pair.k4Py(), pair.k4Pz(), mKPDG);

const double mCross14 = (k1 + k4).M();
const double mCross32 = (k3 + k2).M();
if ((mCross14 > cfgCrossPhiLow && mCross14 < cfgCrossPhiHigh) || (mCross32 > cfgCrossPhiLow && mCross32 < cfgCrossPhiHigh)) {
continue;
}

double deltaM = std::hypot(pair.phi1Mass() - mPhiPDG, pair.phi2Mass() - mPhiPDG);
if (useParametrized) {
deltaM = getDeltaMPhi(pair.phi1Mass(), pt1, pair.phi2Mass(), pt2);
}

const double decayLength = pair.vertexL3DSig();
const double fitChi2Ndf = pair.fitChi2Ndf();
const double rmsDcaSig = pair.rmsDcaSig();

if (!std::isfinite(pair.pairMass()) || !std::isfinite(deltaM) || !std::isfinite(pt1) || !std::isfinite(pt2) || !std::isfinite(decayLength) || !std::isfinite(fitChi2Ndf) || !std::isfinite(rmsDcaSig)) {
continue;
}

histos.fill(HIST("SEMassUnlike_VertexVars"), pair.pairMass(), pairPt, deltaM, pair.phi1Mass(), pair.phi2Mass(), decayLength, fitChi2Ndf, rmsDcaSig);
}
}
PROCESS_SWITCH(doublephimeson, processPairOpti6, "Process fitted phi-phi pairs with vertex variables", false);

SliceCache cache;
using BinningTypeVertexContributor = ColumnBinningPolicy<aod::collision::PosZ, aod::collision::NumContrib>;

Expand Down
Loading