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
2 changes: 0 additions & 2 deletions PWGHF/DataModel/CandidateReconstructionTables.h
Original file line numberDiff line numberDiff line change
Expand Up@@ -1429,7 +1429,6 @@ DECLARE_SOA_INDEX_COLUMN(Cascade, cascade);
DECLARE_SOA_INDEX_COLUMN_FULL(PrimaryPi, primaryPi, int, Tracks, "_primarypi");
DECLARE_SOA_COLUMN(ImpactParOmegacXY, impactParOmegacXY, float);
DECLARE_SOA_COLUMN(ImpactParOmegacZ, impactParOmegacZ, float);
DECLARE_SOA_COLUMN(PtPrimaryPi, ptPrimaryPi, double);
DECLARE_SOA_COLUMN(InvMassLambda, invMassLambda, double);
DECLARE_SOA_COLUMN(InvMassAntiLambda, invMassAntiLambda, double);
DECLARE_SOA_COLUMN(InvMassCascade, invMassCascade, double);
Expand DownExpand Up@@ -1495,7 +1494,6 @@ DECLARE_SOA_TABLE(HfCandToXiPi, "AOD", "HFCANDTOXIPI",
hf_cand_toxipi::ErrImpactParCascXY, hf_cand_toxipi::ErrImpactParPrimaryPiXY, hf_cand_toxipi::ErrImpactParV0XY,
hf_cand_toxipi::V0Id, v0data::PosTrackId, v0data::NegTrackId, hf_cand_toxipi::CascadeId, hf_cand_toxipi::PrimaryPiId, cascdata::BachelorId,
hf_cand_toxipi::ImpactParOmegacXY, hf_cand_toxipi::ImpactParOmegacZ,
hf_cand_toxipi::PtPrimaryPi,
hf_cand_toxipi::InvMassLambda, hf_cand_toxipi::InvMassAntiLambda, hf_cand_toxipi::InvMassCascade, hf_cand_toxipi::InvMassOmegac,
hf_cand_toxipi::CosPAV0, hf_cand_toxipi::CosPAOmegac, hf_cand_toxipi::CosPACasc, hf_cand_toxipi::CosPAXYV0, hf_cand_toxipi::CosPAXYOmegac, hf_cand_toxipi::CosPAXYCasc,
hf_cand_toxipi::CTauOmegac, hf_cand_toxipi::CTauCascade, hf_cand_toxipi::CTauV0, hf_cand_toxipi::CTauXic,
Expand Down
16 changes: 9 additions & 7 deletions PWGHF/DataModel/CandidateSelectionTables.h
Original file line numberDiff line numberDiff line change
Expand Up@@ -234,16 +234,18 @@ DECLARE_SOA_TABLE(HfSelXiccToPKPiPi, "AOD", "HFSELXICC", //!

namespace hf_sel_toxipi
{
DECLARE_SOA_COLUMN(StatusPidLambda, statusPidLambda, int);
DECLARE_SOA_COLUMN(StatusPidCascade, statusPidCascade, int);
DECLARE_SOA_COLUMN(StatusPidOmegac, statusPidOmegac, int);
DECLARE_SOA_COLUMN(StatusInvMassLambda, statusInvMassLambda, int);
DECLARE_SOA_COLUMN(StatusInvMassCascade, statusInvMassCascade, int);
DECLARE_SOA_COLUMN(StatusInvMassOmegac, statusInvMassOmegac, int);
DECLARE_SOA_COLUMN(StatusPidLambda, statusPidLambda, bool);
DECLARE_SOA_COLUMN(StatusPidCascade, statusPidCascade, bool);
DECLARE_SOA_COLUMN(StatusPidOmegac, statusPidOmegac, bool);
DECLARE_SOA_COLUMN(StatusInvMassLambda, statusInvMassLambda, bool);
DECLARE_SOA_COLUMN(StatusInvMassCascade, statusInvMassCascade, bool);
DECLARE_SOA_COLUMN(StatusInvMassOmegac, statusInvMassOmegac, bool);
DECLARE_SOA_COLUMN(ResultSelections, resultSelections, bool);
} // namespace hf_sel_toxipi
DECLARE_SOA_TABLE(HfSelToXiPi, "AOD", "HFSELTOXIPI",
hf_sel_toxipi::StatusPidLambda, hf_sel_toxipi::StatusPidCascade, hf_sel_toxipi::StatusPidOmegac,
hf_sel_toxipi::StatusInvMassLambda, hf_sel_toxipi::StatusInvMassCascade, hf_sel_toxipi::StatusInvMassOmegac);
hf_sel_toxipi::StatusInvMassLambda, hf_sel_toxipi::StatusInvMassCascade, hf_sel_toxipi::StatusInvMassOmegac,
hf_sel_toxipi::ResultSelections);

} // namespace o2::aod
#endif // PWGHF_DATAMODEL_CANDIDATESELECTIONTABLES_H_
12 changes: 0 additions & 12 deletions PWGHF/TableProducer/candidateCreatorToXiPi.cxx
Original file line numberDiff line numberDiff line change
Expand Up@@ -81,8 +81,6 @@ struct HfCandidateCreatorToXiPi {
using MyCascTable = soa::Join<aod::CascDataExt, aod::CascCovs>;
using MyV0Table = soa::Join<aod::V0Datas, aod::V0Covs>;

OutputObj<TH1F> hPtPrimaryPi{TH1F("hPtPrimaryPi", "p_T primary #pi;p_T (GeV/#it{c});entries", 500, 0, 20)};
OutputObj<TH1F> hxVertexOmegac{TH1F("hxVertexOmegac", "x Omegac vertex;xVtx;entries", 500, -10, 10)};
OutputObj<TH1F> hInvMassOmegac{TH1F("hInvMassOmegac", "Omegac invariant mass;inv mass;entries", 500, 2.2, 3.1)};

void init(InitContext const&)
Expand All@@ -91,9 +89,6 @@ struct HfCandidateCreatorToXiPi {
ccdb->setCaching(true);
ccdb->setLocalObjectValidityChecking();
lut = o2::base::MatLayerCylSet::rectifyPtrFromFile(ccdb->get<o2::base::MatLayerCylSet>(ccdbPathLut));
if (!o2::base::GeometryManager::isGeometryLoaded()) {
ccdb->get<TGeoManager>(ccdbPathGeo);
}
runNumber = 0;
}

Expand DownExpand Up@@ -265,12 +260,6 @@ struct HfCandidateCreatorToXiPi {
double dcaxyV0Dau1 = trackV0Dau1.dcaXY();
double dcaxyCascDau = trackXiDauCharged.dcaXY();

hxVertexOmegac->Fill(vertexOmegacFromFitter[0]);

// primary pi pT spectrum
double ptPrimaryPi = std::sqrt((pVecPionFromOmegac[0] * pVecPionFromOmegac[0]) + (pVecPionFromOmegac[1] * pVecPionFromOmegac[1]));
hPtPrimaryPi->Fill(ptPrimaryPi);

// invariant mass under the hypothesis of particles ID corresponding to the decay chain
double mLambda = v0Element.mLambda(); // from LF table, V0 mass under lambda hypothesis
double mAntiLambda = v0Element.mAntiLambda(); // from LF table, V0 mass under anti-lambda hypothesis
Expand DownExpand Up@@ -336,7 +325,6 @@ struct HfCandidateCreatorToXiPi {
v0Element.globalIndex(), v0Element.posTrackId(), v0Element.negTrackId(),
casc.globalIndex(), trackPion.globalIndex(), trackXiDauCharged.globalIndex(),
impactParameterOmegac.getY(), impactParameterOmegac.getZ(),
ptPrimaryPi,
mLambda, mAntiLambda, mCasc, mOmegac,
cpaV0, cpaOmegac, cpaCasc, cpaxyV0, cpaxyOmegac, cpaxyCasc,
ctOmegac, ctCascade, ctV0, ctXic,
Expand Down
180 changes: 94 additions & 86 deletions PWGHF/TableProducer/candidateSelectorToXiPi.cxx
Original file line numberDiff line numberDiff line change
Expand Up@@ -87,7 +87,6 @@ struct HfCandidateSelectorToXiPi {

using MyTrackInfo = soa::Join<aod::BigTracksPIDExtended, aod::TrackSelection>;

OutputObj<TH1F> hPtPrimaryPi{TH1F("hPtPrimaryPi", "p_T primary #pi;p_T (GeV/#it{c});entries", 500, 0, 20)};
OutputObj<TH1F> hxVertexOmegac{TH1F("hxVertexOmegac", "x Omegac vertex;xVtx;entries", 500, -10, 10)};
OutputObj<TH1F> hInvMassOmegac{TH1F("hInvMassOmegac", "Omegac invariant mass;inv mass;entries", 500, 2.2, 3.1)};
OutputObj<TH1F> hCTauOmegac{TH1F("hCTauOmegac", "Omegac ctau;ctau;entries", 500, 0., 10.)};
Expand DownExpand Up@@ -137,6 +136,8 @@ struct HfCandidateSelectorToXiPi {
// looping over omegac candidates
for (auto const& candidate : candidates) {

bool resultSelections = true; // True if the candidate passes all the selections, False otherwise

auto trackV0PosDau = candidate.posTrack_as<MyTrackInfo>(); // positive V0 daughter
auto trackV0NegDau = candidate.negTrack_as<MyTrackInfo>(); // negative V0 daughter
auto trackPiFromCasc = candidate.bachelor_as<MyTrackInfo>(); // pion <- cascade
Expand All@@ -151,7 +152,7 @@ struct HfCandidateSelectorToXiPi {
trackPiFromLam = trackV0PosDau;
trackPrFromLam = trackV0NegDau;
} else if (signDecay == 0) {
continue;
resultSelections = false;
}

// eta selection
Expand All@@ -160,100 +161,100 @@ struct HfCandidateSelectorToXiPi {
double etaPiFromCasc = candidate.etaPiFromCasc();
double etaPiFromOme = candidate.etaPiFromOme();
if (std::abs(etaV0PosDau) > etaTrackMax) {
continue;
resultSelections = false;
}
if (std::abs(etaV0NegDau) > etaTrackMax) {
continue;
resultSelections = false;
}
if (std::abs(etaPiFromCasc) > etaTrackMax) {
continue;
resultSelections = false;
}
if (std::abs(etaPiFromOme) > etaTrackMax) {
continue;
resultSelections = false;
}

// minimum radius cut (LFcut)
if (RecoDecay::sqrtSumOfSquares(candidate.xDecayVtxCascade(), candidate.yDecayVtxCascade()) < radiusCascMin) {
continue;
resultSelections = false;
}
if (RecoDecay::sqrtSumOfSquares(candidate.xDecayVtxV0(), candidate.yDecayVtxV0()) < radiusV0Min) {
continue;
resultSelections = false;
}
// cosPA (LFcut)
if (candidate.cosPACasc() < cosPACascMin) {
continue;
resultSelections = false;
}
if (candidate.cosPAV0() < cosPAV0Min) {
continue;
resultSelections = false;
}
// cascade and v0 daughters dca cut (LF cut)
if (candidate.dcaCascDau() > dcaCascDauMax) {
continue;
resultSelections = false;
}
if (candidate.dcaV0Dau() > dcaV0DauMax) {
continue;
resultSelections = false;
}

// dca omegac daughters cut
if (candidate.dcaOmegacDau() > dcaOmegacDauMax) {
continue;
resultSelections = false;
}

// cut on primary pion dcaXY
if ((candidate.dcaXYToPVPrimaryPi() < dcaXYPriPiMin) || (candidate.dcaXYToPVPrimaryPi() > dcaXYPriPiMax)) {
continue;
resultSelections = false;
}

// pT selections
double ptPiFromCasc = RecoDecay::sqrtSumOfSquares(candidate.pxPiFromCasc(), candidate.pyPiFromCasc());
double ptPiFromOme = RecoDecay::sqrtSumOfSquares(candidate.pxPrimaryPi(), candidate.pyPrimaryPi());
if (std::abs(ptPiFromCasc) > ptPiFromCascMin) {
continue;
if (std::abs(ptPiFromCasc) < ptPiFromCascMin) {
resultSelections = false;
}
if (std::abs(ptPiFromOme) > ptPiFromOmeMin) {
continue;
if (std::abs(ptPiFromOme) < ptPiFromOmeMin) {
resultSelections = false;
}

// TPC clusters selections
if (trackPiFromOmeg.tpcNClsFound() < nClustersTpcMin) {
continue;
resultSelections = false;
}
if (trackPiFromLam.tpcNClsFound() < nClustersTpcMin) {
continue;
resultSelections = false;
}
if (trackPrFromLam.tpcNClsFound() < nClustersTpcMin) {
continue;
resultSelections = false;
}
if (trackPiFromCasc.tpcNClsFound() < nClustersTpcMin) {
continue;
resultSelections = false;
}

if (trackPiFromOmeg.tpcNClsCrossedRows() < nTpcCrossedRowsMin) {
continue;
resultSelections = false;
}
if (trackPiFromLam.tpcNClsCrossedRows() < nTpcCrossedRowsMin) {
continue;
resultSelections = false;
}
if (trackPrFromLam.tpcNClsCrossedRows() < nTpcCrossedRowsMin) {
continue;
resultSelections = false;
}
if (trackPiFromCasc.tpcNClsCrossedRows() < nTpcCrossedRowsMin) {
continue;
resultSelections = false;
}

if (trackPiFromOmeg.tpcCrossedRowsOverFindableCls() < tpcCrossedRowsOverFindableClustersRatioMin) {
continue;
resultSelections = false;
}

// ITS clusters selection
if (trackPiFromOmeg.itsNCls() < nClustersItsMin) {
continue;
resultSelections = false;
}
if (trackPiFromOmeg.itsNClsInnerBarrel() < nClustersItsInnBarrMin) {
continue;
resultSelections = false;
}
if (trackPiFromCasc.itsNCls() < nClustersItsMin) {
continue;
resultSelections = false;
}

// track-level PID selection
Expand All@@ -276,29 +277,35 @@ struct HfCandidateSelectorToXiPi {
pidPiFromOme = selectorPionFromOme.getStatusTrackPIDAll(trackPiFromOmeg);
}

int statusPidLambda = -1;
int statusPidCascade = -1;
int statusPidOmegac = -1;
bool statusPidLambda = false;
bool statusPidCascade = false;
bool statusPidOmegac = false;

if (pidProton == TrackSelectorPID::Status::PIDAccepted && pidPiFromLam == TrackSelectorPID::Status::PIDAccepted) {
statusPidLambda = 1;
hTest2->Fill(0.5);
statusPidLambda = true;
if (resultSelections) {
hTest2->Fill(0.5);
}
}

if (pidProton == TrackSelectorPID::Status::PIDAccepted && pidPiFromLam == TrackSelectorPID::Status::PIDAccepted && pidPiFromCasc == TrackSelectorPID::Status::PIDAccepted) {
statusPidCascade = 1;
hTest2->Fill(1.5);
statusPidCascade = true;
if (resultSelections) {
hTest2->Fill(1.5);
}
}

if (pidProton == TrackSelectorPID::Status::PIDAccepted && pidPiFromLam == TrackSelectorPID::Status::PIDAccepted && pidPiFromCasc == TrackSelectorPID::Status::PIDAccepted && pidPiFromOme == TrackSelectorPID::Status::PIDAccepted) {
statusPidOmegac = 1;
hTest2->Fill(2.5);
statusPidOmegac = true;
if (resultSelections) {
hTest2->Fill(2.5);
}
}

// invariant mass cuts
int statusInvMassLambda = -1;
int statusInvMassCascade = -1;
int statusInvMassOmegac = -1;
bool statusInvMassLambda = false;
bool statusInvMassCascade = false;
bool statusInvMassOmegac = false;

double invMassLambda = 0;
if (signDecay < 0) {
Expand All@@ -310,67 +317,68 @@ struct HfCandidateSelectorToXiPi {
double invMassOmegac = candidate.invMassOmegac();

if (std::abs(invMassLambda - massLambdaFromPDG) < (nSigmaInvMassCut * sigmaInvMassLambda)) {
statusInvMassLambda = 1;
if (statusPidLambda == 1 && statusPidCascade == 1 && statusPidOmegac == 1) {
statusInvMassLambda = true;
if (statusPidLambda && statusPidCascade && statusPidOmegac && resultSelections) {
hTest2->Fill(3.5);
}
}

if (std::abs(invMassCascade - massXiFromPDG) < (nSigmaInvMassCut * sigmaInvMassCascade)) {
statusInvMassCascade = 1;
if (statusPidLambda == 1 && statusPidCascade == 1 && statusPidOmegac == 1 && statusInvMassLambda == 1) {
statusInvMassCascade = true;
if (statusPidLambda && statusPidCascade && statusPidOmegac && statusInvMassLambda && resultSelections) {
hTest2->Fill(4.5);
}
}

if ((invMassOmegac >= invMassOmegacMin) && (invMassOmegac <= invMassOmegacMax)) {
statusInvMassOmegac = 1;
if (statusPidLambda == 1 && statusPidCascade == 1 && statusPidOmegac == 1 && statusInvMassLambda == 1 && statusInvMassCascade == 1) {
statusInvMassOmegac = true;
if (statusPidLambda && statusPidCascade && statusPidOmegac && statusInvMassLambda && statusInvMassCascade && resultSelections) {
hTest2->Fill(5.5);
}
}

hfSelToXiPi(statusPidLambda, statusPidCascade, statusPidOmegac, statusInvMassLambda, statusInvMassCascade, statusInvMassOmegac);
hfSelToXiPi(statusPidLambda, statusPidCascade, statusPidOmegac, statusInvMassLambda, statusInvMassCascade, statusInvMassOmegac, resultSelections);

if (statusPidLambda == -1) {
hTest1->Fill(0.5);
}
if (statusPidLambda == 1) {
hTest1->Fill(1.5);
}
if (statusPidCascade == -1) {
hTest1->Fill(2.5);
}
if (statusPidCascade == 1) {
hTest1->Fill(3.5);
}
if (statusPidOmegac == -1) {
hTest1->Fill(4.5);
}
if (statusPidOmegac == 1) {
hTest1->Fill(5.5);
}
if (statusInvMassLambda == -1) {
hTest1->Fill(6.5);
}
if (statusInvMassLambda == 1) {
hTest1->Fill(7.5);
}
if (statusInvMassCascade == -1) {
hTest1->Fill(8.5);
}
if (statusInvMassCascade == 1) {
hTest1->Fill(9.5);
}
if (statusInvMassOmegac == -1) {
hTest1->Fill(10.5);
}
if (statusInvMassOmegac == 1) {
hTest1->Fill(11.5);
if (resultSelections) {
if (!statusPidLambda) {
hTest1->Fill(0.5);
}
if (statusPidLambda) {
hTest1->Fill(1.5);
}
if (!statusPidCascade) {
hTest1->Fill(2.5);
}
if (statusPidCascade) {
hTest1->Fill(3.5);
}
if (!statusPidOmegac) {
hTest1->Fill(4.5);
}
if (statusPidOmegac) {
hTest1->Fill(5.5);
}
if (!statusInvMassLambda) {
hTest1->Fill(6.5);
}
if (statusInvMassLambda) {
hTest1->Fill(7.5);
}
if (!statusInvMassCascade) {
hTest1->Fill(8.5);
}
if (statusInvMassCascade) {
hTest1->Fill(9.5);
}
if (!statusInvMassOmegac) {
hTest1->Fill(10.5);
}
if (statusInvMassOmegac) {
hTest1->Fill(11.5);
}
}

if (statusPidLambda == 1 && statusPidCascade == 1 && statusPidOmegac == 1 && statusInvMassLambda == 1 && statusInvMassCascade == 1 && statusInvMassOmegac == 1) {
hPtPrimaryPi->Fill(ptPiFromOme);
if (statusPidLambda && statusPidCascade && statusPidOmegac && statusInvMassLambda && statusInvMassCascade && statusInvMassOmegac && resultSelections) {
hxVertexOmegac->Fill(candidate.xDecayVtxOmegac());
hInvMassOmegac->Fill(invMassOmegac);
hCTauOmegac->Fill(candidate.ctauOmegac());
Expand Down