diff --git a/PWGLF/Tasks/Strangeness/strangeness_in_jets.cxx b/PWGLF/Tasks/Strangeness/strangeness_in_jets.cxx index 862cf036e9d..c72e5514607 100644 --- a/PWGLF/Tasks/Strangeness/strangeness_in_jets.cxx +++ b/PWGLF/Tasks/Strangeness/strangeness_in_jets.cxx @@ -86,6 +86,7 @@ struct strangeness_in_jets { Configurable minTPCnClsFound{"minTPCnClsFound", 80.0f, "min number of found TPC clusters"}; Configurable minNCrossedRowsTPC{"minNCrossedRowsTPC", 80.0f, "min number of TPC crossed rows"}; Configurable maxChi2TPC{"maxChi2TPC", 4.0f, "max chi2 per cluster TPC"}; + Configurable maxChi2ITS{"maxChi2ITS", 36.0f, "max chi2 per cluster ITS"}; Configurable etaMin{"etaMin", -0.8f, "eta min"}; Configurable etaMax{"etaMax", +0.8f, "eta max"}; Configurable ptMin_V0_proton{"ptMin_V0_proton", 0.3f, "pt min of proton from V0"}; @@ -102,6 +103,8 @@ struct strangeness_in_jets { Configurable dcapostoPVmin{"dcapostoPVmin", 0.1f, "Minimum DCA Pos To PV"}; Configurable requireTOF{"requireTOF", false, "require TOF hit"}; Configurable requireITS{"requireITS", false, "require ITS hit"}; + Configurable dcaxyMax{"dcaxyMax", 0.1f, "Maximum DCAxy to primary vertex"}; + Configurable dcazMax{"dcazMax", 0.1f, "Maximum DCAz to primary vertex"}; // V0 Parameters Configurable yMin{"yMin", -0.5f, "minimum y"}; @@ -118,6 +121,8 @@ struct strangeness_in_jets { Configurable dcabachtopvMin{"dcabachtopvMin", 0.1f, "Minimum DCA bachelor to PV"}; Configurable dcaV0topvMin{"dcaV0topvMin", 0.1f, "Minimum DCA V0 to PV"}; Configurable dcaCascDaughtersMax{"dcaCascDaughtersMax", 0.5f, "Maximum DCA Daughters"}; + + // Debug Configurable> debug{"debug", {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, "debug"}; void init(InitContext const&) @@ -130,6 +135,16 @@ struct strangeness_in_jets { std::vector multBinning = {0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100}; AxisSpec multAxis = {multBinning, "FT0C percentile"}; + // Histograms (Pions) + registryData.add("piplus_tpc_in_jet", "piplus_tpc_in_jet", HistType::kTH3F, {multBinning, {100, 0.0, 10.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -10, 10, "n#sigma_{TPC}"}}); + registryData.add("piplus_tof_in_jet", "piplus_tof_in_jet", HistType::kTH3F, {multBinning, {100, 0.0, 10.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -10, 10, "n#sigma_{TOF}"}}); + registryData.add("piplus_tpc_in_ue", "piplus_tpc_in_ue", HistType::kTH3F, {multBinning, {100, 0.0, 10.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -10, 10, "n#sigma_{TPC}"}}); + registryData.add("piplus_tof_in_ue", "piplus_tof_in_ue", HistType::kTH3F, {multBinning, {100, 0.0, 10.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -10, 10, "n#sigma_{TOF}"}}); + registryData.add("piminus_tpc_in_jet", "piminus_tpc_in_jet", HistType::kTH3F, {multBinning, {100, 0.0, 10.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -10, 10, "n#sigma_{TPC}"}}); + registryData.add("piminus_tof_in_jet", "piminus_tof_in_jet", HistType::kTH3F, {multBinning, {100, 0.0, 10.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -10, 10, "n#sigma_{TOF}"}}); + registryData.add("piminus_tpc_in_ue", "piminus_tpc_in_ue", HistType::kTH3F, {multBinning, {100, 0.0, 10.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -10, 10, "n#sigma_{TPC}"}}); + registryData.add("piminus_tof_in_ue", "piminus_tof_in_ue", HistType::kTH3F, {multBinning, {100, 0.0, 10.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -10, 10, "n#sigma_{TOF}"}}); + // Histograms (Lambda) registryData.add("Lambda_in_jet", "Lambda_in_jet", HistType::kTH3F, {multBinning, {100, 0.0, 10.0, "#it{p}_{T} (GeV/#it{c})"}, {200, 1.09, 1.14, "m_{p#pi} (GeV/#it{c}^{2})"}}); registryData.add("AntiLambda_in_jet", "AntiLambda_in_jet", HistType::kTH3F, {multBinning, {100, 0.0, 10.0, "#it{p}_{T} (GeV/#it{c})"}, {200, 1.09, 1.14, "m_{p#pi} (GeV/#it{c}^{2})"}}); @@ -156,12 +171,20 @@ struct strangeness_in_jets { registryMC.add("K0s_generated", "K0s_generated", HistType::kTH2F, {multBinning, {100, 0.0, 10.0, "#it{p}_{T} (GeV/#it{c})"}}); registryMC.add("Lambda_generated", "Lambda_generated", HistType::kTH2F, {multBinning, {100, 0.0, 10.0, "#it{p}_{T} (GeV/#it{c})"}}); registryMC.add("AntiLambda_generated", "AntiLambda_generated", HistType::kTH2F, {multBinning, {100, 0.0, 10.0, "#it{p}_{T} (GeV/#it{c})"}}); + registryMC.add("XiPos_generated", "XiPos_generated", HistType::kTH2F, {multBinning, {100, 0.0, 10.0, "#it{p}_{T} (GeV/#it{c})"}}); + registryMC.add("XiNeg_generated", "XiNeg_generated", HistType::kTH2F, {multBinning, {100, 0.0, 10.0, "#it{p}_{T} (GeV/#it{c})"}}); + registryMC.add("OmegaPos_generated", "OmegaPos_generated", HistType::kTH2F, {multBinning, {100, 0.0, 10.0, "#it{p}_{T} (GeV/#it{c})"}}); + registryMC.add("OmegaNeg_generated", "OmegaNeg_generated", HistType::kTH2F, {multBinning, {100, 0.0, 10.0, "#it{p}_{T} (GeV/#it{c})"}}); registryMC.add("K0s_reconstructed", "K0s_reconstructed", HistType::kTH2F, {multBinning, {100, 0.0, 10.0, "#it{p}_{T} (GeV/#it{c})"}}); registryMC.add("Lambda_reconstructed", "Lambda_reconstructed", HistType::kTH2F, {multBinning, {100, 0.0, 10.0, "#it{p}_{T} (GeV/#it{c})"}}); registryMC.add("AntiLambda_reconstructed", "AntiLambda_reconstructed", HistType::kTH2F, {multBinning, {100, 0.0, 10.0, "#it{p}_{T} (GeV/#it{c})"}}); registryMC.add("K0s_reconstructed_incl", "K0s_reconstructed_incl", HistType::kTH2F, {multBinning, {100, 0.0, 10.0, "#it{p}_{T} (GeV/#it{c})"}}); registryMC.add("Lambda_reconstructed_incl", "Lambda_reconstructed_incl", HistType::kTH2F, {multBinning, {100, 0.0, 10.0, "#it{p}_{T} (GeV/#it{c})"}}); registryMC.add("AntiLambda_reconstructed_incl", "AntiLambda_reconstructed_incl", HistType::kTH2F, {multBinning, {100, 0.0, 10.0, "#it{p}_{T} (GeV/#it{c})"}}); + registryMC.add("XiPos_reconstructed", "XiPos_reconstructed", HistType::kTH2F, {multBinning, {100, 0.0, 10.0, "#it{p}_{T} (GeV/#it{c})"}}); + registryMC.add("XiNeg_reconstructed", "XiNeg_reconstructed", HistType::kTH2F, {multBinning, {100, 0.0, 10.0, "#it{p}_{T} (GeV/#it{c})"}}); + registryMC.add("OmegaPos_reconstructed", "OmegaPos_reconstructed", HistType::kTH2F, {multBinning, {100, 0.0, 10.0, "#it{p}_{T} (GeV/#it{c})"}}); + registryMC.add("OmegaNeg_reconstructed", "OmegaNeg_reconstructed", HistType::kTH2F, {multBinning, {100, 0.0, 10.0, "#it{p}_{T} (GeV/#it{c})"}}); // Histograms for reweighting registryMC.add("K0s_eta_pt_jet", "K0s_eta_pt_jet", HistType::kTH2F, {{100, 0.0, 10.0, "#it{p}_{T} (GeV/#it{c})"}, {18, -0.9, 0.9, "#eta"}}); @@ -203,6 +226,39 @@ struct strangeness_in_jets { return true; } + template + bool passedTrackSelectionForPions(const pionTrack& track) + { + if (!track.hasITS()) + return false; + if (track.itsNCls() < minITSnCls) + return false; + if (!track.hasTPC()) + return false; + if (track.tpcNClsFound() < minTPCnClsFound) + return false; + if (track.tpcNClsCrossedRows() < minNCrossedRowsTPC) + return false; + if (track.tpcChi2NCl() > maxChi2TPC) + return false; + if (track.itsChi2NCl() > maxChi2ITS) + return false; + if (track.eta() < etaMin || track.eta() > etaMax) + return false; + if (TMath::Abs(track.dcaXY()) > dcaxyMax) + return false; + if (TMath::Abs(track.dcaZ()) > dcazMax) + return false; + + // Rapidity Selection + TLorentzVector lorentzVect; + lorentzVect.SetXYZM(track.px(), track.py(), track.pz(), 0.13957021); + if (lorentzVect.Rapidity() < yMin || lorentzVect.Rapidity() > yMax) + return false; + + return true; + } + // Lambda Selections template bool passedLambdaSelection(const V& v0, const T1& ptrack, const T2& ntrack) @@ -254,7 +310,7 @@ struct strangeness_in_jets { // Rapidity Selection TLorentzVector lorentzVect; - lorentzVect.SetXYZM(ptrack.px() + ntrack.px(), ptrack.py() + ntrack.py(), ptrack.pz() + ntrack.pz(), 1.115683); + lorentzVect.SetXYZM(v0.px(), v0.py(), v0.pz(), 1.115683); if (lorentzVect.Rapidity() < yMin || lorentzVect.Rapidity() > yMax) return false; return true; @@ -311,7 +367,7 @@ struct strangeness_in_jets { // Rapidity Selection TLorentzVector lorentzVect; - lorentzVect.SetXYZM(ptrack.px() + ntrack.px(), ptrack.py() + ntrack.py(), ptrack.pz() + ntrack.pz(), 1.115683); + lorentzVect.SetXYZM(v0.px(), v0.py(), v0.pz(), 1.115683); if (lorentzVect.Rapidity() < yMin || lorentzVect.Rapidity() > yMax) return false; return true; @@ -368,7 +424,7 @@ struct strangeness_in_jets { // Rapidity Selection TLorentzVector lorentzVect; - lorentzVect.SetXYZM(ptrack.px() + ntrack.px(), ptrack.py() + ntrack.py(), ptrack.pz() + ntrack.pz(), 0.497614); + lorentzVect.SetXYZM(v0.px(), v0.py(), v0.pz(), 0.497614); if (lorentzVect.Rapidity() < yMin || lorentzVect.Rapidity() > yMax) return false; return true; @@ -966,13 +1022,65 @@ struct strangeness_in_jets { } } } + + for (auto track : tracks) { + + if (!passedTrackSelectionForPions(track)) + continue; + + TVector3 track_dir(track.px(), track.py(), track.pz()); + float deltaEta_jet = track_dir.Eta() - jet_axis.Eta(); + float deltaPhi_jet = GetDeltaPhi(track_dir.Phi(), jet_axis.Phi()); + float deltaR_jet = sqrt(deltaEta_jet * deltaEta_jet + deltaPhi_jet * deltaPhi_jet); + float deltaEta_ue1 = track_dir.Eta() - ue_axis1.Eta(); + float deltaPhi_ue1 = GetDeltaPhi(track_dir.Phi(), ue_axis1.Phi()); + float deltaR_ue1 = sqrt(deltaEta_ue1 * deltaEta_ue1 + deltaPhi_ue1 * deltaPhi_ue1); + float deltaEta_ue2 = track_dir.Eta() - ue_axis2.Eta(); + float deltaPhi_ue2 = GetDeltaPhi(track_dir.Phi(), ue_axis2.Phi()); + float deltaR_ue2 = sqrt(deltaEta_ue2 * deltaEta_ue2 + deltaPhi_ue2 * deltaPhi_ue2); + + // TPC + if (deltaR_jet < Rmax && track.sign() > 0) { + registryData.fill(HIST("piplus_tpc_in_jet"), multiplicity, track.pt(), track.tpcNSigmaPi()); + } + if ((deltaR_ue1 < Rmax || deltaR_ue2) < Rmax && track.sign() > 0) { + registryData.fill(HIST("piplus_tpc_in_ue"), multiplicity, track.pt(), track.tpcNSigmaPi()); + } + if (deltaR_jet < Rmax && track.sign() < 0) { + registryData.fill(HIST("piminus_tpc_in_jet"), multiplicity, track.pt(), track.tpcNSigmaPi()); + } + if ((deltaR_ue1 < Rmax || deltaR_ue2) < Rmax && track.sign() < 0) { + registryData.fill(HIST("piminus_tpc_in_ue"), multiplicity, track.pt(), track.tpcNSigmaPi()); + } + + if (track.tpcNSigmaPi() < nsigmaTPCmin || track.tpcNSigmaPi() > nsigmaTPCmax) + continue; + + if (!track.hasTOF()) + continue; + + // TOF + if (deltaR_jet < Rmax && track.sign() > 0) { + registryData.fill(HIST("piplus_tof_in_jet"), multiplicity, track.pt(), track.tofNSigmaPi()); + } + if ((deltaR_ue1 < Rmax || deltaR_ue2) < Rmax && track.sign() > 0) { + registryData.fill(HIST("piplus_tof_in_ue"), multiplicity, track.pt(), track.tofNSigmaPi()); + } + if (deltaR_jet < Rmax && track.sign() < 0) { + registryData.fill(HIST("piminus_tof_in_jet"), multiplicity, track.pt(), track.tofNSigmaPi()); + } + if ((deltaR_ue1 < Rmax || deltaR_ue2) < Rmax && track.sign() < 0) { + registryData.fill(HIST("piminus_tof_in_ue"), multiplicity, track.pt(), track.tofNSigmaPi()); + } + } } PROCESS_SWITCH(strangeness_in_jets, processData, "Process data", true); - Preslice perCollision = o2::aod::v0data::collisionId; + Preslice perCollisionV0 = o2::aod::v0data::collisionId; + Preslice perCollisionCasc = o2::aod::cascade::collisionId; Preslice perMCCollision = o2::aod::mcparticle::mcCollisionId; - void processMCefficiency(SimCollisions const& collisions, MCTracks const& mcTracks, aod::V0Datas const& fullV0s, aod::McCollisions const& mcCollisions, const aod::McParticles& mcParticles) + void processMCefficiency(SimCollisions const& collisions, MCTracks const& mcTracks, aod::V0Datas const& fullV0s, aod::CascDataExt const& Cascades, aod::McCollisions const& mcCollisions, const aod::McParticles& mcParticles) { for (const auto& collision : collisions) { registryQC.fill(HIST("number_of_events_mc"), 0.5); @@ -986,7 +1094,8 @@ struct strangeness_in_jets { registryQC.fill(HIST("number_of_events_mc"), 2.5); float multiplicity = collision.centFT0M(); - auto v0s_per_coll = fullV0s.sliceBy(perCollision, collision.globalIndex()); + auto v0s_per_coll = fullV0s.sliceBy(perCollisionV0, collision.globalIndex()); + auto casc_per_coll = Cascades.sliceBy(perCollisionCasc, collision.globalIndex()); auto mcParticles_per_coll = mcParticles.sliceBy(perMCCollision, collision.globalIndex()); for (auto& v0 : v0s_per_coll) { @@ -1043,6 +1152,64 @@ struct strangeness_in_jets { } } + // Cascades + for (auto& casc : casc_per_coll) { + auto bach = casc.template bachelor_as(); + auto neg = casc.template negTrack_as(); + auto pos = casc.template posTrack_as(); + + if (!bach.has_mcParticle()) + continue; + if (!pos.has_mcParticle()) + continue; + if (!neg.has_mcParticle()) + continue; + + auto posParticle = pos.mcParticle_as(); + auto negParticle = neg.mcParticle_as(); + auto bachParticle = bach.mcParticle_as(); + if (!posParticle.has_mothers()) + continue; + if (!negParticle.has_mothers()) + continue; + if (!bachParticle.has_mothers()) + continue; + + int pdg_parent(0); + for (auto& particleMotherOfNeg : negParticle.mothers_as()) { + for (auto& particleMotherOfPos : posParticle.mothers_as()) { + for (auto& particleMotherOfBach : bachParticle.mothers_as()) { + if (particleMotherOfNeg.globalIndex() != particleMotherOfPos.globalIndex()) + continue; + if (abs(particleMotherOfNeg.pdgCode()) != 3122) + continue; + if (!particleMotherOfBach.isPhysicalPrimary()) + continue; + pdg_parent = particleMotherOfBach.pdgCode(); + } + } + } + if (pdg_parent == 0) + continue; + + // Xi+ + if (passedXiSelection(casc, pos, neg, bach, collision) && pdg_parent == -3312) { + registryMC.fill(HIST("XiPos_reconstructed"), multiplicity, casc.pt()); + } + // Xi- + if (passedXiSelection(casc, pos, neg, bach, collision) && pdg_parent == 3312) { + registryMC.fill(HIST("XiNeg_reconstructed"), multiplicity, casc.pt()); + } + // Omega+ + if (passedOmegaSelection(casc, pos, neg, bach, collision) && pdg_parent == -3334) { + registryMC.fill(HIST("OmegaPos_reconstructed"), multiplicity, casc.pt()); + } + // Omega- + if (passedOmegaSelection(casc, pos, neg, bach, collision) && pdg_parent == 3334) { + registryMC.fill(HIST("OmegaNeg_reconstructed"), multiplicity, casc.pt()); + } + } + for (auto& mcParticle : mcParticles_per_coll) { if (mcParticle.y() < yMin || mcParticle.y() > yMax) @@ -1065,6 +1232,22 @@ struct strangeness_in_jets { registryMC.fill(HIST("AntiLambda_generated"), multiplicity, mcParticle.pt()); registryMC.fill(HIST("AntiLambda_eta_pt_pythia"), mcParticle.pt(), mcParticle.eta()); } + // Xi Pos + if (mcParticle.pdgCode() == -3312) { + registryMC.fill(HIST("XiPos_generated"), multiplicity, mcParticle.pt()); + } + // Xi Neg + if (mcParticle.pdgCode() == 3312) { + registryMC.fill(HIST("XiNeg_generated"), multiplicity, mcParticle.pt()); + } + // Omega Pos + if (mcParticle.pdgCode() == -3334) { + registryMC.fill(HIST("OmegaPos_generated"), multiplicity, mcParticle.pt()); + } + // Omega Neg + if (mcParticle.pdgCode() == 3334) { + registryMC.fill(HIST("OmegaNeg_generated"), multiplicity, mcParticle.pt()); + } } } }