Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Please consider the following formatting changes to #7986 #26

Merged
merged 1 commit into from
Oct 14, 2024
Merged
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
152 changes: 61 additions & 91 deletions PWGLF/Tasks/QC/strangenessTrackingQC.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,7 @@ namespace

};

struct miniCasc
{
struct miniCasc {
bool fillOmega;
float pt;
float eta;
Expand All @@ -55,8 +54,7 @@ struct miniCasc
float dcaXYTracked;
};

struct strangenessTrackingQC
{
struct strangenessTrackingQC {

using TrackCandidates = soa::Join<aod::TracksIU, aod::TracksExtra, aod::TracksCovIU, aod::pidTPCEl, aod::pidTPCPi, aod::pidTPCKa, aod::pidTPCPr>;
using CollisionCandidates = soa::Join<aod::Collisions, aod::EvSels>;
Expand Down Expand Up @@ -84,26 +82,26 @@ struct strangenessTrackingQC
o2::vertexing::DCAFitterN<2> m_fitter;

HistogramRegistry registry{
"registry",
{
{"omegaMass", "; Mass (GeV/#it{c}^{2}); Counts", {HistType::kTH1F, {{125, 1.650, 1.700}}}},
{"xiMass", "; Mass (GeV/#it{c}^{2}); Counts", {HistType::kTH1F, {{125, 1.296, 1.346}}}},
{"omegaMassTracked", "; Mass (GeV/#it{c}^{2}); Counts", {HistType::kTH1F, {{125, 1.650, 1.700}}}},
{"xiMassTracked", "; Mass (GeV/#it{c}^{2}); Counts", {HistType::kTH1F, {{125, 1.296, 1.346}}}},

{"omegaHist", "; #it{p}_{T} (GeV/#it{c}); Radius (cm); Mass", {HistType::kTH3F, {{ptBins, decayRadBins, omegaMassBins}}}},
{"xiHist", "; #it{p}_{T} (GeV/#it{c}); Radius (cm); Mass", {HistType::kTH3F, {{ptBins, decayRadBins, xiMassBins}}}},
{"xiHistTracked", "; #it{p}_{T} (GeV/#it{c}); Radius (cm); Mass", {HistType::kTH3F, {{ptBins, decayRadBins, xiMassBins}}}},
{"omegaHistTracked", "; #it{p}_{T} (GeV/#it{c}); Radius (cm); Mass", {HistType::kTH3F, {{ptBins, decayRadBins, omegaMassBins}}}},

{"xiDCAvsPt", "; #it{p}_{T} (GeV/#it{c}); DCA (cm)", {HistType::kTH2F, {{ptBins, dcaBins}}}},
{"omegaDCAvsPt", "; #it{p}_{T} (GeV/#it{c}); DCA (cm)", {HistType::kTH2F, {{ptBins, dcaBins}}}},
{"xiDCAvsPtTracked", "; #it{p}_{T} (GeV/#it{c}); DCA (cm)", {HistType::kTH2F, {{ptBins, dcaBins}}}},
{"omegaDCAvsPtTracked", "; #it{p}_{T} (GeV/#it{c}); DCA (cm)", {HistType::kTH2F, {{ptBins, dcaBins}}}},
}};
"registry",
{
{"omegaMass", "; Mass (GeV/#it{c}^{2}); Counts", {HistType::kTH1F, {{125, 1.650, 1.700}}}},
{"xiMass", "; Mass (GeV/#it{c}^{2}); Counts", {HistType::kTH1F, {{125, 1.296, 1.346}}}},
{"omegaMassTracked", "; Mass (GeV/#it{c}^{2}); Counts", {HistType::kTH1F, {{125, 1.650, 1.700}}}},
{"xiMassTracked", "; Mass (GeV/#it{c}^{2}); Counts", {HistType::kTH1F, {{125, 1.296, 1.346}}}},

{"omegaHist", "; #it{p}_{T} (GeV/#it{c}); Radius (cm); Mass", {HistType::kTH3F, {{ptBins, decayRadBins, omegaMassBins}}}},
{"xiHist", "; #it{p}_{T} (GeV/#it{c}); Radius (cm); Mass", {HistType::kTH3F, {{ptBins, decayRadBins, xiMassBins}}}},
{"xiHistTracked", "; #it{p}_{T} (GeV/#it{c}); Radius (cm); Mass", {HistType::kTH3F, {{ptBins, decayRadBins, xiMassBins}}}},
{"omegaHistTracked", "; #it{p}_{T} (GeV/#it{c}); Radius (cm); Mass", {HistType::kTH3F, {{ptBins, decayRadBins, omegaMassBins}}}},

{"xiDCAvsPt", "; #it{p}_{T} (GeV/#it{c}); DCA (cm)", {HistType::kTH2F, {{ptBins, dcaBins}}}},
{"omegaDCAvsPt", "; #it{p}_{T} (GeV/#it{c}); DCA (cm)", {HistType::kTH2F, {{ptBins, dcaBins}}}},
{"xiDCAvsPtTracked", "; #it{p}_{T} (GeV/#it{c}); DCA (cm)", {HistType::kTH2F, {{ptBins, dcaBins}}}},
{"omegaDCAvsPtTracked", "; #it{p}_{T} (GeV/#it{c}); DCA (cm)", {HistType::kTH2F, {{ptBins, dcaBins}}}},
}};

template <typename T>
float dcaToPV(o2::dataformats::VertexBase &PV, T &trackParCov)
float dcaToPV(o2::dataformats::VertexBase& PV, T& trackParCov)
{
auto matCorr = static_cast<o2::base::Propagator::MatCorrType>(setting_materialCorrection.value);
o2::dataformats::DCA impactParameterTrk;
Expand All @@ -112,20 +110,18 @@ struct strangenessTrackingQC
}

template <typename T>
bool qualityTrackSelection(const T &track)
bool qualityTrackSelection(const T& track)
{
if (std::abs(track.eta()) > 0.9)
{
if (std::abs(track.eta()) > 0.9) {
return false;
}
if (track.tpcNClsFound() < cfgCutNclusTPC)
{
if (track.tpcNClsFound() < cfgCutNclusTPC) {
return false;
}
return true;
}

float computeMassMother(const float massA, const float massB, const std::array<float, 3> &momA, const std::array<float, 3> &momB) const
float computeMassMother(const float massA, const float massB, const std::array<float, 3>& momA, const std::array<float, 3>& momB) const
{
float eA = std::hypot(massA, std::hypot(momA[0], momA[1], momA[2]));
float eB = std::hypot(massB, std::hypot(momB[0], momB[1], momB[2]));
Expand All @@ -135,20 +131,18 @@ struct strangenessTrackingQC
}

template <class TCasc>
bool buildCascade(TCasc const &casc, CollisionCandidates::iterator const &collision, aod::V0s const &, TrackCandidates const &, miniCasc &miniCasc)
bool buildCascade(TCasc const& casc, CollisionCandidates::iterator const& collision, aod::V0s const&, TrackCandidates const&, miniCasc& miniCasc)
{
const auto &v0 = casc.template v0_as<aod::V0s>();
const auto &bachelor = casc.template bachelor_as<TrackCandidates>();
const auto &ptrack = v0.template posTrack_as<TrackCandidates>();
const auto &ntrack = v0.template negTrack_as<TrackCandidates>();
if (!qualityTrackSelection(ptrack) || !qualityTrackSelection(ntrack) || !qualityTrackSelection(bachelor))
{
const auto& v0 = casc.template v0_as<aod::V0s>();
const auto& bachelor = casc.template bachelor_as<TrackCandidates>();
const auto& ptrack = v0.template posTrack_as<TrackCandidates>();
const auto& ntrack = v0.template negTrack_as<TrackCandidates>();
if (!qualityTrackSelection(ptrack) || !qualityTrackSelection(ntrack) || !qualityTrackSelection(bachelor)) {
return false;
}
const auto &protonTrack = bachelor.sign() > 0 ? ntrack : ptrack;
const auto &pionTrack = bachelor.sign() > 0 ? ptrack : ntrack;
if (std::abs(protonTrack.tpcNSigmaPr()) > 3 || std::abs(pionTrack.tpcNSigmaPi()) > 3)
{
const auto& protonTrack = bachelor.sign() > 0 ? ntrack : ptrack;
const auto& pionTrack = bachelor.sign() > 0 ? ptrack : ntrack;
if (std::abs(protonTrack.tpcNSigmaPr()) > 3 || std::abs(pionTrack.tpcNSigmaPi()) > 3) {
return false;
}
auto primaryVertex = getPrimaryVertex(collision);
Expand All @@ -166,11 +160,9 @@ struct strangenessTrackingQC
o2::track::TrackPar trackParV0;
o2::track::TrackPar trackParBachelor;
o2::track::TrackParCov trackParCovCasc;
if (m_fitter.process(getTrackParCov(pionTrack), getTrackParCov(protonTrack)))
{
if (m_fitter.process(getTrackParCov(pionTrack), getTrackParCov(protonTrack))) {
trackParCovV0 = m_fitter.createParentTrackParCov(0); // V0 track retrieved from p and pi daughters
if (m_fitter.process(trackParCovV0, getTrackParCov(bachelor)))
{
if (m_fitter.process(trackParCovV0, getTrackParCov(bachelor))) {
trackParV0 = m_fitter.getTrackParamAtPCA(0);
trackParBachelor = m_fitter.getTrackParamAtPCA(1);
trackParV0.getPxPyPzGlo(v0Mom);
Expand All @@ -179,24 +171,18 @@ struct strangenessTrackingQC
trackParCovCasc.getPxPyPzGlo(cascMom);
cascCpa = RecoDecay::cpa(pvPos, m_fitter.getPCACandidate(), cascMom);
cascDauDCA = std::sqrt(std::abs(m_fitter.getChi2AtPCACandidate()));
}
else
{
} else {
return false;
}
}
else
{
} else {
return false;
}

if (cascCpa < cascsetting_cosPA)
{
if (cascCpa < cascsetting_cosPA) {
return false;
}

if (cascDauDCA > cascsetting_dcaCascDaughters)
{
if (cascDauDCA > cascsetting_dcaCascDaughters) {
return false;
}

Expand All @@ -205,8 +191,7 @@ struct strangenessTrackingQC
miniCasc.massOmega = computeMassMother(constants::physics::MassLambda0, constants::physics::MassKaonCharged, v0Mom, bachelorMom);
miniCasc.massXi = computeMassMother(constants::physics::MassLambda0, constants::physics::MassPionCharged, v0Mom, bachelorMom);
miniCasc.fillOmega = false;
if (TMath::Abs(miniCasc.massXi - constants::physics::MassXiMinus) > cascsetting_massWindowXi && std::abs(bachelor.tpcNSigmaKa()) < 3)
{
if (TMath::Abs(miniCasc.massXi - constants::physics::MassXiMinus) > cascsetting_massWindowXi && std::abs(bachelor.tpcNSigmaKa()) < 3) {
miniCasc.fillOmega = true;
}

Expand All @@ -217,40 +202,33 @@ struct strangenessTrackingQC
return true;
}

void initCCDB(aod::BCsWithTimestamps::iterator const &bc)
void initCCDB(aod::BCsWithTimestamps::iterator const& bc)
{
if (mRunNumber == bc.runNumber())
{
if (mRunNumber == bc.runNumber()) {
return;
}
mRunNumber = bc.runNumber();
auto timestamp = bc.timestamp();

if (o2::parameters::GRPObject *grpo = ccdb->getForTimeStamp<o2::parameters::GRPObject>(cfgGRPpath, timestamp))
{
if (o2::parameters::GRPObject* grpo = ccdb->getForTimeStamp<o2::parameters::GRPObject>(cfgGRPpath, timestamp)) {
o2::base::Propagator::initFieldFromGRP(grpo);
bz = grpo->getNominalL3Field();
}
else if (o2::parameters::GRPMagField *grpmag = ccdb->getForTimeStamp<o2::parameters::GRPMagField>(cfgGRPmagPath, timestamp))
{
} else if (o2::parameters::GRPMagField* grpmag = ccdb->getForTimeStamp<o2::parameters::GRPMagField>(cfgGRPmagPath, timestamp)) {
o2::base::Propagator::initFieldFromGRP(grpmag);
bz = std::lround(5.f * grpmag->getL3Current() / 30000.f);
LOG(debug) << "bz = " << bz;
}
else
{
} else {
LOG(fatal) << "Got nullptr from CCDB for path " << cfgGRPmagPath << " of object GRPMagField and " << cfgGRPpath << " of object GRPObject for timestamp " << timestamp;
}
}

void init(InitContext const &)
void init(InitContext const&)
{
mRunNumber = 0;
bz = 0;

if (static_cast<o2::base::Propagator::MatCorrType>(setting_materialCorrection.value) == o2::base::Propagator::MatCorrType::USEMatCorrLUT)
{
auto *lut = o2::base::MatLayerCylSet::rectifyPtrFromFile(ccdb->get<o2::base::MatLayerCylSet>("GLO/Param/MatLUT"));
if (static_cast<o2::base::Propagator::MatCorrType>(setting_materialCorrection.value) == o2::base::Propagator::MatCorrType::USEMatCorrLUT) {
auto* lut = o2::base::MatLayerCylSet::rectifyPtrFromFile(ccdb->get<o2::base::MatLayerCylSet>("GLO/Param/MatLUT"));
LOG(info) << "Setting material correction LUT";
o2::base::Propagator::Instance(true)->setMatLUT(lut);
}
Expand All @@ -272,32 +250,28 @@ struct strangenessTrackingQC
// m_fitter.setMatCorrType(static_cast<o2::base::Propagator::MatCorrType>(mat));
}

void process(CollisionCandidates const &, aod::AssignedTrackedCascades const &trackedCascades, aod::Cascades const &cascades, aod::V0s const &v0s, TrackCandidates const &tracks, aod::BCsWithTimestamps const &)
void process(CollisionCandidates const&, aod::AssignedTrackedCascades const& trackedCascades, aod::Cascades const& cascades, aod::V0s const& v0s, TrackCandidates const& tracks, aod::BCsWithTimestamps const&)
{

for (const auto &trackedCascade : trackedCascades)
{
for (const auto& trackedCascade : trackedCascades) {
miniCasc miniCasc;
const auto &casc = trackedCascade.cascade();
const auto& casc = trackedCascade.cascade();
auto collision = trackedCascade.collision_as<CollisionCandidates>();
if (!collision.sel8() || std::abs(collision.posZ()) > 10)
{
if (!collision.sel8() || std::abs(collision.posZ()) > 10) {
continue;
}
initCCDB(collision.bc_as<aod::BCsWithTimestamps>());
m_fitter.setBz(bz);
if (buildCascade(casc, collision, v0s, tracks, miniCasc))
{
if (buildCascade(casc, collision, v0s, tracks, miniCasc)) {

// compute the dca of the tracked cascade
const auto &track = trackedCascade.track_as<TrackCandidates>();
const auto& track = trackedCascade.track_as<TrackCandidates>();
auto trackCovTrk = getTrackParCov(track);

auto primaryVertex = getPrimaryVertex(collision);
miniCasc.dcaXYTracked = dcaToPV(primaryVertex, trackCovTrk);
// fill the histograms
if (miniCasc.fillOmega)
{
if (miniCasc.fillOmega) {
registry.fill(HIST("omegaMassTracked"), miniCasc.massOmega);
registry.fill(HIST("omegaDCAvsPtTracked"), miniCasc.pt, miniCasc.dcaXYTracked);
registry.fill(HIST("omegaHistTracked"), miniCasc.pt, miniCasc.radius, miniCasc.massOmega);
Expand All @@ -308,20 +282,16 @@ struct strangenessTrackingQC
}
}

for (auto &cascade : cascades)
{
for (auto& cascade : cascades) {
miniCasc miniCasc;
auto collision = cascade.collision_as<CollisionCandidates>();
if (!collision.sel8() || std::abs(collision.posZ()) > 10)
{
if (!collision.sel8() || std::abs(collision.posZ()) > 10) {
continue;
}
initCCDB(collision.bc_as<aod::BCsWithTimestamps>());
m_fitter.setBz(bz);
if (buildCascade(cascade, collision, v0s, tracks, miniCasc))
{
if (miniCasc.fillOmega)
{
if (buildCascade(cascade, collision, v0s, tracks, miniCasc)) {
if (miniCasc.fillOmega) {
registry.fill(HIST("omegaMass"), miniCasc.massOmega);
registry.fill(HIST("omegaDCAvsPt"), miniCasc.pt, miniCasc.dcaXYCasc);
registry.fill(HIST("omegaHist"), miniCasc.pt, miniCasc.radius, miniCasc.massOmega);
Expand All @@ -334,8 +304,8 @@ struct strangenessTrackingQC
}
};

WorkflowSpec defineDataProcessing(ConfigContext const &cfgc)
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
{
return WorkflowSpec{
adaptAnalysisTask<strangenessTrackingQC>(cfgc)};
adaptAnalysisTask<strangenessTrackingQC>(cfgc)};
}
Loading