diff --git a/ALICE3/TableProducer/alice3-dileptonsmearing.cxx b/ALICE3/TableProducer/alice3-dileptonsmearing.cxx index 10718040939..42e6a21783e 100644 --- a/ALICE3/TableProducer/alice3-dileptonsmearing.cxx +++ b/ALICE3/TableProducer/alice3-dileptonsmearing.cxx @@ -154,7 +154,7 @@ struct alice3dileptonsmearer { } } else { // don't apply smearing - smearedelectron(ptgen, etagen, phigen, true); + smearedelectron(ptgen, etagen, phigen, false); } } // end of mc track loop } diff --git a/ALICE3/Tasks/alice3-dilepton.cxx b/ALICE3/Tasks/alice3-dilepton.cxx index 20defb40ee6..9efdb686f46 100644 --- a/ALICE3/Tasks/alice3-dilepton.cxx +++ b/ALICE3/Tasks/alice3-dilepton.cxx @@ -129,6 +129,11 @@ struct Alice3Lepton { registry.add("Reconstructed/Track/Phi", "Track Phi", kTH1F, {axisPhi}); registry.add("Reconstructed/Track/Eta_Pt", "Eta vs. Pt", kTH2F, {axisPt, axisEta}, true); + registry.add("Reconstructed/Track/PtMC", "Track Pt", kTH1F, {axisPt}); + registry.add("Reconstructed/Track/EtaMC", "Track Eta", kTH1F, {axisEta}); + registry.add("Reconstructed/Track/PhiMC", "Track Phi", kTH1F, {axisPhi}); + registry.add("Reconstructed/Track/EtaMC_PtMC", "Eta vs. Pt", kTH2F, {axisPt, axisEta}, true); + registry.addClone("Reconstructed/Track/", "Reconstructed/TrackPID/"); registry.addClone("Reconstructed/Track/", "Reconstructed/TrackPIDPre/"); } @@ -213,6 +218,10 @@ struct Alice3Lepton { registry.fill(HIST("Reconstructed/Track/Eta"), track.etaSmeared()); registry.fill(HIST("Reconstructed/Track/Phi"), track.phiSmeared()); registry.fill(HIST("Reconstructed/Track/Eta_Pt"), track.ptSmeared(), track.etaSmeared()); + registry.fill(HIST("Reconstructed/Track/PtMC"), mcParticle.pt()); + registry.fill(HIST("Reconstructed/Track/EtaMC"), mcParticle.eta()); + registry.fill(HIST("Reconstructed/Track/PhiMC"), mcParticle.phi()); + registry.fill(HIST("Reconstructed/Track/EtaMC_PtMC"), mcParticle.pt(), mcParticle.eta()); } else { registry.fill(HIST("Reconstructed/Track/SigmaOTofvspt"), track.pt(), track.nSigmaElectronOuterTOF()); registry.fill(HIST("Reconstructed/Track/SigmaITofvspt"), track.pt(), track.nSigmaElectronInnerTOF()); @@ -230,12 +239,20 @@ struct Alice3Lepton { registry.fill(HIST("Reconstructed/TrackPID/Eta"), track.etaSmeared()); registry.fill(HIST("Reconstructed/TrackPID/Phi"), track.phiSmeared()); registry.fill(HIST("Reconstructed/TrackPID/Eta_Pt"), track.ptSmeared(), track.etaSmeared()); + registry.fill(HIST("Reconstructed/TrackPID/PtMC"), mcParticle.pt()); + registry.fill(HIST("Reconstructed/TrackPID/EtaMC"), mcParticle.eta()); + registry.fill(HIST("Reconstructed/TrackPID/PhiMC"), mcParticle.phi()); + registry.fill(HIST("Reconstructed/TrackPID/EtaMC_PtMC"), mcParticle.pt(), mcParticle.eta()); if (track.isTrackPrefilter() == 0) { registry.fill(HIST("Reconstructed/TrackPIDPre/Pt"), track.ptSmeared()); registry.fill(HIST("Reconstructed/TrackPIDPre/Eta"), track.etaSmeared()); registry.fill(HIST("Reconstructed/TrackPIDPre/Phi"), track.phiSmeared()); registry.fill(HIST("Reconstructed/TrackPIDPre/Eta_Pt"), track.ptSmeared(), track.etaSmeared()); + registry.fill(HIST("Reconstructed/TrackPIDPre/PtMC"), mcParticle.pt()); + registry.fill(HIST("Reconstructed/TrackPIDPre/EtaMC"), mcParticle.eta()); + registry.fill(HIST("Reconstructed/TrackPIDPre/PhiMC"), mcParticle.phi()); + registry.fill(HIST("Reconstructed/TrackPIDPre/EtaMC_PtMC"), mcParticle.pt(), mcParticle.eta()); } } } else { @@ -429,6 +446,11 @@ struct Alice3Dilepton { registry.add("Reconstructed/Track/Phi", "Particle Phi", kTH1F, {axisPhi}); registry.add("Reconstructed/Track/Pre", "Particle Pre", kTH1F, {axisPre}); } + if (doprocessRecAllWithSmearing) { + registry.add("Reconstructed/Track/PtMC", "Track Pt", kTH1F, {axisPt}); + registry.add("Reconstructed/Track/EtaMC", "Particle Eta", kTH1F, {axisEta}); + registry.add("Reconstructed/Track/PhiMC", "Particle Phi", kTH1F, {axisPhi}); + } if (doprocessRecAll) { registry.add("Reconstructed/Track/SigmaOTofvspt", "Track #sigma oTOF", kTH2F, {axisPt, axisSigmaEl}); @@ -989,24 +1011,48 @@ struct Alice3Dilepton { } // end of processRec void processRecAllWithSmearing(MyFilteredAlice3Collision const& collisions, - MyFilteredTracksWithSmearing const& tracks) + MyFilteredTracksWithSmearing const&, + const aod::McParticles&) { - - for (const auto& track : tracks) { - if (!IsInAcceptance(track)) { - continue; - } - registry.fill(HIST("Reconstructed/Track/Pt"), track.ptSmeared()); - registry.fill(HIST("Reconstructed/Track/Eta"), track.etaSmeared()); - registry.fill(HIST("Reconstructed/Track/Phi"), track.phiSmeared()); - registry.fill(HIST("Reconstructed/Track/Pre"), track.isTrackPrefilter()); - } - for (const auto& collision : collisions) { registry.fill(HIST("Reconstructed/Event/VtxZ"), collision.posZ()); auto negTracks_coll = negTracksWithSmearing->sliceByCached(o2::aod::track::collisionId, collision.globalIndex(), cache_rec); auto posTracks_coll = posTracksWithSmearing->sliceByCached(o2::aod::track::collisionId, collision.globalIndex(), cache_rec); + for (const auto& track : negTracks_coll) { + if (!IsInAcceptance(track)) { + continue; + } + if (!track.has_mcParticle()) { + continue; + } + const auto mcParticle = track.template mcParticle_as(); + registry.fill(HIST("Reconstructed/Track/PtMC"), mcParticle.pt()); + registry.fill(HIST("Reconstructed/Track/EtaMC"), mcParticle.eta()); + registry.fill(HIST("Reconstructed/Track/PhiMC"), mcParticle.phi()); + registry.fill(HIST("Reconstructed/Track/Pt"), track.ptSmeared()); + registry.fill(HIST("Reconstructed/Track/Eta"), track.etaSmeared()); + registry.fill(HIST("Reconstructed/Track/Phi"), track.phiSmeared()); + registry.fill(HIST("Reconstructed/Track/Pre"), track.isTrackPrefilter()); + } + + for (const auto& track : posTracks_coll) { + if (!IsInAcceptance(track)) { + continue; + } + if (!track.has_mcParticle()) { + continue; + } + const auto mcParticle = track.template mcParticle_as(); + registry.fill(HIST("Reconstructed/Track/PtMC"), mcParticle.pt()); + registry.fill(HIST("Reconstructed/Track/EtaMC"), mcParticle.eta()); + registry.fill(HIST("Reconstructed/Track/PhiMC"), mcParticle.phi()); + registry.fill(HIST("Reconstructed/Track/Pt"), track.ptSmeared()); + registry.fill(HIST("Reconstructed/Track/Eta"), track.etaSmeared()); + registry.fill(HIST("Reconstructed/Track/Phi"), track.phiSmeared()); + registry.fill(HIST("Reconstructed/Track/Pre"), track.isTrackPrefilter()); + } + FillPairRecAll(negTracks_coll, posTracks_coll); FillPairRecAll(posTracks_coll, posTracks_coll); FillPairRecAll(negTracks_coll, negTracks_coll); diff --git a/ALICE3/Tasks/alice3-prefilterdilepton.cxx b/ALICE3/Tasks/alice3-prefilterdilepton.cxx index d0224656292..7f800eeaf8f 100644 --- a/ALICE3/Tasks/alice3-prefilterdilepton.cxx +++ b/ALICE3/Tasks/alice3-prefilterdilepton.cxx @@ -300,20 +300,10 @@ struct Alice3DileptonPrefilter { continue; } } - bool pass = false; if constexpr (isWithSmearing) { - pass = true; - } else { - if ((std::abs(pos.nSigmaElectronRich()) < nSigmaElectronRich && nSigmaPionRich < std::abs(pos.nSigmaPionRich())) || (std::abs(pos.nSigmaElectronOuterTOF()) < nSigmaEleCutOuterTOF && nSigmaPionCutOuterTOF < std::abs(pos.nSigmaPionOuterTOF())) || (std::abs(pos.nSigmaElectronInnerTOF()) < nSigmaEleCutInnerTOF && nSigmaPionCutInnerTOF < std::abs(pos.nSigmaPionInnerTOF()))) { - if ((std::abs(ele.nSigmaElectronRich()) < nSigmaElectronRich && nSigmaPionRich < std::abs(ele.nSigmaPionRich())) || (std::abs(ele.nSigmaElectronOuterTOF()) < nSigmaEleCutOuterTOF && nSigmaPionCutOuterTOF < std::abs(ele.nSigmaPionOuterTOF())) || (std::abs(ele.nSigmaElectronInnerTOF()) < nSigmaEleCutInnerTOF && nSigmaPionCutInnerTOF < std::abs(ele.nSigmaPionInnerTOF()))) { - pass = true; - } - } - } - if (pass) { - ROOT::Math::PtEtaPhiMVector v1(pos.pt(), pos.eta(), pos.phi(), o2::constants::physics::MassElectron); - ROOT::Math::PtEtaPhiMVector v2(ele.pt(), ele.eta(), ele.phi(), o2::constants::physics::MassElectron); + ROOT::Math::PtEtaPhiMVector v1(pos.ptSmeared(), pos.etaSmeared(), pos.phiSmeared(), o2::constants::physics::MassElectron); + ROOT::Math::PtEtaPhiMVector v2(ele.ptSmeared(), ele.etaSmeared(), ele.phiSmeared(), o2::constants::physics::MassElectron); ROOT::Math::PtEtaPhiMVector v12 = v1 + v2; float angle = RecoDecay::constrainAngle(ROOT::Math::VectorUtil::Angle(v1, v2), -M_PI); // o2::math_utils::bringToPMPi(angle); @@ -325,6 +315,27 @@ struct Alice3DileptonPrefilter { map_pfb[ele.globalIndex()] = 1; registry.fill(HIST("ReconstructedFiltered/Pair/ULS/Mass_Pt"), v12.M(), v12.Pt()); } + + } else { + + if ((std::abs(pos.nSigmaElectronRich()) < nSigmaElectronRich && nSigmaPionRich < std::abs(pos.nSigmaPionRich())) || (std::abs(pos.nSigmaElectronOuterTOF()) < nSigmaEleCutOuterTOF && nSigmaPionCutOuterTOF < std::abs(pos.nSigmaPionOuterTOF())) || (std::abs(pos.nSigmaElectronInnerTOF()) < nSigmaEleCutInnerTOF && nSigmaPionCutInnerTOF < std::abs(pos.nSigmaPionInnerTOF()))) { + if ((std::abs(ele.nSigmaElectronRich()) < nSigmaElectronRich && nSigmaPionRich < std::abs(ele.nSigmaPionRich())) || (std::abs(ele.nSigmaElectronOuterTOF()) < nSigmaEleCutOuterTOF && nSigmaPionCutOuterTOF < std::abs(ele.nSigmaPionOuterTOF())) || (std::abs(ele.nSigmaElectronInnerTOF()) < nSigmaEleCutInnerTOF && nSigmaPionCutInnerTOF < std::abs(ele.nSigmaPionInnerTOF()))) { + + ROOT::Math::PtEtaPhiMVector v1(pos.pt(), pos.eta(), pos.phi(), o2::constants::physics::MassElectron); + ROOT::Math::PtEtaPhiMVector v2(ele.pt(), ele.eta(), ele.phi(), o2::constants::physics::MassElectron); + ROOT::Math::PtEtaPhiMVector v12 = v1 + v2; + float angle = RecoDecay::constrainAngle(ROOT::Math::VectorUtil::Angle(v1, v2), -M_PI); + // o2::math_utils::bringToPMPi(angle); + + registry.fill(HIST("Reconstructed/Pair/ULS/Mass_Pt"), v12.M(), v12.Pt()); + + if (v12.M() < maxMass && std::abs(angle) < maxOp) { + map_pfb[pos.globalIndex()] = 1; + map_pfb[ele.globalIndex()] = 1; + registry.fill(HIST("ReconstructedFiltered/Pair/ULS/Mass_Pt"), v12.M(), v12.Pt()); + } + } + } } } // combination }