diff --git a/PWGHF/HFC/TableProducer/correlatorHfeHadrons.cxx b/PWGHF/HFC/TableProducer/correlatorHfeHadrons.cxx index d0d3a1707bd..eb5beb0ca55 100644 --- a/PWGHF/HFC/TableProducer/correlatorHfeHadrons.cxx +++ b/PWGHF/HFC/TableProducer/correlatorHfeHadrons.cxx @@ -66,6 +66,7 @@ struct HfCorrelatorHfeHadrons { Configurable isRun3{"isRun3", true, "Data is from Run3 or Run2"}; Configurable numberEventsMixed{"numberEventsMixed", 5, "number of events mixed in ME process"}; + Configurable invMassEEMax{"invMassEEMax", 0.14f, "max Invariant Mass for Photonic electron"}; // Associated Hadron selection Configurable ptTrackMin{"ptTrackMin", 0.1f, "Transverse momentum range for associated hadron tracks"}; Configurable etaTrackMax{"etaTrackMax", 0.8f, "Eta range for associated hadron tracks"}; @@ -106,6 +107,7 @@ struct HfCorrelatorHfeHadrons { ConfigurableAxis binsPt{"binsPt", {50, 0.0, 50}, "#it{p_{T}}(GeV/#it{c})"}; ConfigurableAxis binsPoolBin{"binsPoolBin", {9, 0., 9.}, "PoolBin"}; ConfigurableAxis binsNSigma{"binsNSigma", {30, -15., 15.}, "#it{#sigma_{TPC}}"}; + ConfigurableAxis binsMass{"binsMass", {100, 0.0, 2.0}, "Mass (GeV/#it{c}^{2}); entries"}; HistogramRegistry registry{ "registry", @@ -117,11 +119,17 @@ struct HfCorrelatorHfeHadrons { AxisSpec axisDeltaEta = {binsDeltaEta, "#Delta #eta = #eta_{Electron}- #eta_{Hadron}"}; AxisSpec axisDeltaPhi = {binsDeltaPhi, "#Delta #varphi = #varphi_{Electron}- #varphi_{Hadron}"}; AxisSpec axisPt = {binsPt, "#it{p_{T}}(GeV/#it{c})"}; + AxisSpec axisMass = {binsMass, "Mass (GeV/#it{c}^{2}); entries"}; + AxisSpec const axisPoolBin = {binsPoolBin, "PoolBin"}; AxisSpec axisNSigma = {binsNSigma, "it{#sigma_{TPC}}"}; registry.add("hZvertex", "z vertex", {HistType::kTH1D, {axisPosZ}}); registry.add("hNevents", "No of events", {HistType::kTH1D, {{3, 1, 4}}}); + registry.add("hLikeMass", "Like mass", {HistType::kTH1D, {{axisMass}}}); + registry.add("hUnLikeMass", "unLike mass", {HistType::kTH1D, {{axisMass}}}); + registry.add("hLikeSignPt", "Like sign Momentum ", {HistType::kTH1D, {{axisPt}}}); + registry.add("hUnLikeSignPt", "UnLike sign Momentum", {HistType::kTH1D, {{axisPt}}}); registry.add("hInclusiveEHCorrel", "Sparse for Delta phi and Delta eta Inclusive Electron with Hadron;p_{T}^{e} (GeV#it{/c});p_{T}^{h} (GeV#it{/c});#Delta#varphi;#Delta#eta;", {HistType::kTHnSparseF, {{axisPt}, {axisPt}, {axisDeltaPhi}, {axisDeltaEta}}}); registry.add("hLSEHCorrel", "Sparse for Delta phi and Delta eta Like sign Electron pair with Hadron;p_{T}^{e} (GeV#it{/c});p_{T}^{h} (GeV#it{/c});#Delta#varphi;#Delta#eta;", {HistType::kTHnSparseF, {{axisPt}, {axisPt}, {axisDeltaPhi}, {axisDeltaEta}}}); registry.add("hULSEHCorrel", "Sparse for Delta phi and Delta eta UnLike sign Electron pair with Hadron;p_{T}^{e} (GeV#it{/c});p_{T}^{h} (GeV#it{/c});#Delta#varphi;#Delta#eta;", {HistType::kTHnSparseF, {{axisPt}, {axisPt}, {axisDeltaPhi}, {axisDeltaEta}}}); @@ -168,13 +176,13 @@ struct HfCorrelatorHfeHadrons { // Electron-hadron Correlation template - void fillCorrelation(CollisionType const& collision, ElectronType const& electron, TracksType const& tracks, BcType const&) + void fillCorrelation(CollisionType const& collision, ElectronType const& electrons, TracksType const& tracks, BcType const&) { if (!(isRun3 ? collision.sel8() : (collision.sel7() && collision.alias_bit(kINT7)))) { return; } int poolBin = corrBinning.getBin(std::make_tuple(collision.posZ(), collision.multFT0M())); - auto bc = collision.template bc_as(); + auto bc = collision.template bc_as(); int gCollisionId = collision.globalIndex(); int64_t timeStamp = bc.timestamp(); @@ -205,7 +213,7 @@ struct HfCorrelatorHfeHadrons { double phiElectron = -999; double etaElectron = -999; - for (const auto& eTrack : electron) { + for (const auto& eTrack : electrons) { ptElectron = eTrack.ptTrack(); phiElectron = eTrack.phiTrack(); etaElectron = eTrack.etaTrack(); @@ -237,18 +245,32 @@ struct HfCorrelatorHfeHadrons { registry.fill(HIST("hptElectron"), ptElectron); int nElectronLS = 0; int nElectronUS = 0; + float massLike = 0; + float massUnLike = 0; if (eTrack.nElPairLS() > 0) { for (int i = 0; i < eTrack.nElPairLS(); ++i) { + massLike = eTrack.invariantMassEE(); - ++nElectronLS; registry.fill(HIST("hLSElectronBin"), poolBin); + registry.fill(HIST("hLikeMass"), massLike); + + if (massLike <= invMassEEMax) { + ++nElectronLS; + registry.fill(HIST("hLikeSignPt"), eTrack.ptTrack()); + } } } if (eTrack.nElPairUS() > 0) { for (int i = 0; i < eTrack.nElPairUS(); ++i) { + massUnLike = eTrack.invariantMassEE(); - ++nElectronUS; registry.fill(HIST("hULSElectronBin"), poolBin); + registry.fill(HIST("hUnLikeMass"), massUnLike); + + if (massUnLike <= invMassEEMax) { + ++nElectronUS; + registry.fill(HIST("hLikeSignPt"), eTrack.ptTrack()); + } } } @@ -281,16 +303,18 @@ struct HfCorrelatorHfeHadrons { int nElHadUSCorr = 0; if (eTrack.nElPairLS() > 0) { for (int i = 0; i < eTrack.nElPairLS(); ++i) { - - ++nElHadLSCorr; - registry.fill(HIST("hLSEHCorrel"), ptElectron, ptHadron, deltaPhi, deltaEta); + if (eTrack.invariantMassEE() <= invMassEEMax) { + ++nElHadLSCorr; + registry.fill(HIST("hLSEHCorrel"), ptElectron, ptHadron, deltaPhi, deltaEta); + } } } if (eTrack.nElPairUS() > 0) { for (int i = 0; i < eTrack.nElPairUS(); ++i) { - - registry.fill(HIST("hULSEHCorrel"), ptElectron, ptHadron, deltaPhi, deltaEta); - ++nElHadUSCorr; + if (eTrack.invariantMassEE() <= invMassEEMax) { + registry.fill(HIST("hULSEHCorrel"), ptElectron, ptHadron, deltaPhi, deltaEta); + ++nElHadUSCorr; + } } } entryElectronHadronPair(deltaPhi, deltaEta, ptElectron, ptHadron, poolBin, nElHadLSCorr, nElHadUSCorr); @@ -363,10 +387,11 @@ struct HfCorrelatorHfeHadrons { // ======= Process starts for Data, Same event ============ void processData(TableCollision const& collision, - aod::HfCorrSelEl const& electron, - TableTracks const& tracks, aod::BCsWithTimestamps const& bc) + aod::HfCorrSelEl const& electrons, + TableTracks const& tracks, + aod::BCsWithTimestamps const& bcs) { - fillCorrelation(collision, electron, tracks, bc); + fillCorrelation(collision, electrons, tracks, bcs); } PROCESS_SWITCH(HfCorrelatorHfeHadrons, processData, "Process for Data", true); @@ -374,15 +399,16 @@ struct HfCorrelatorHfeHadrons { // ======= Process starts for McRec, Same event ============ void processMcRec(McTableCollision const& mcCollision, - aod::HfCorrSelEl const& mcElectron, - McTableTracks const& mcTracks) + aod::HfCorrSelEl const& mcElectrons, + McTableTracks const& mcTracks, + aod::BCsWithTimestamps const& bcs) { - fillCorrelation(mcCollision, mcElectron, mcTracks, 0); + fillCorrelation(mcCollision, mcElectrons, mcTracks, bcs); } PROCESS_SWITCH(HfCorrelatorHfeHadrons, processMcRec, "Process MC Reco mode", false); - void processMcGen(McGenTableCollision const& mcCollision, aod::McParticles const& mcParticles, aod::HfMcGenSelEl const& electron) + void processMcGen(McGenTableCollision const& mcCollision, aod::McParticles const& mcParticles, aod::HfMcGenSelEl const& electrons) { BinningTypeMcGen const corrBinningMcGen{{zBins, multBinsMcGen}, true}; @@ -407,7 +433,7 @@ struct HfCorrelatorHfeHadrons { double phiElectron = 0; double etaElectron = 0; - for (const auto& electronMc : electron) { + for (const auto& electronMc : electrons) { double ptHadron = 0; double phiHadron = 0; double etaHadron = 0; @@ -486,6 +512,7 @@ struct HfCorrelatorHfeHadrons { } } PROCESS_SWITCH(HfCorrelatorHfeHadrons, processMcRecMixedEvent, "Process Mixed Event MC Reco mode", false); + void processMcGenMixedEvent(McGenTableCollisions const& mcCollision, aod::HfMcGenSelEl const& electrons, aod::McParticles const& mcParticles) { @@ -539,6 +566,7 @@ struct HfCorrelatorHfeHadrons { } PROCESS_SWITCH(HfCorrelatorHfeHadrons, processMcGenMixedEvent, "Process Mixed Event MC Gen mode", false); }; + WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) { return WorkflowSpec{ diff --git a/PWGHF/HFL/DataModel/ElectronSelectionTable.h b/PWGHF/HFL/DataModel/ElectronSelectionTable.h index cae859d08f1..5566f5ca6ff 100644 --- a/PWGHF/HFL/DataModel/ElectronSelectionTable.h +++ b/PWGHF/HFL/DataModel/ElectronSelectionTable.h @@ -85,6 +85,7 @@ DECLARE_SOA_COLUMN(PhiTrack, phiTrack, float); //! azimuth of th DECLARE_SOA_COLUMN(PtTrack, ptTrack, float); //! transverse momentum of the electron track DECLARE_SOA_COLUMN(TpcNSigmaElTrack, tpcNSigmaElTrack, float); //! tpcNSigma of the electron track(TPC PID) DECLARE_SOA_COLUMN(TofNSigmaElTrack, tofNSigmaElTrack, float); //! tofNSigma of the electron track(TOF PID) +DECLARE_SOA_COLUMN(InvariantMassEE, invariantMassEE, float); //! invariant mass of the non-Hfelectron DECLARE_SOA_COLUMN(NElPairLS, nElPairLS, int); //! Number of Like sign electron pair DECLARE_SOA_COLUMN(NElPairUS, nElPairUS, int); //! Number of UnLike sign electron pair DECLARE_SOA_COLUMN(IsEmcal, isEmcal, bool); //! electron information @@ -98,6 +99,7 @@ DECLARE_SOA_TABLE(HfCorrSelEl, "AOD", "HfCORRSELEL", //! Electron Informations hf_corr_sel_electron::PtTrack, hf_corr_sel_electron::TpcNSigmaElTrack, hf_corr_sel_electron::TofNSigmaElTrack, + hf_corr_sel_electron::InvariantMassEE, hf_corr_sel_electron::NElPairLS, hf_corr_sel_electron::NElPairUS, hf_corr_sel_electron::IsEmcal); diff --git a/PWGHF/HFL/TableProducer/electronSelectionWithTpcEmcal.cxx b/PWGHF/HFL/TableProducer/electronSelectionWithTpcEmcal.cxx index 59e22fd8b03..952883b3eac 100644 --- a/PWGHF/HFL/TableProducer/electronSelectionWithTpcEmcal.cxx +++ b/PWGHF/HFL/TableProducer/electronSelectionWithTpcEmcal.cxx @@ -61,6 +61,7 @@ struct HfElectronSelectionWithTpcEmcal { Produces hfElectronSelection; Produces hfGenElectronSel; + // select the emcal or dcal acceptance enum EMCalRegion { NoAcceptance = 0, EMCalAcceptance = 1, @@ -71,6 +72,10 @@ struct HfElectronSelectionWithTpcEmcal { KFParticle kfNonHfe; Configurable fillEmcClusterInfo{"fillEmcClusterInfo", true, "Fill histograms with EMCal cluster info before and after track match"}; Configurable fillTrackInfo{"fillTrackInfo", true, "Fill histograms with Track Information info before track match"}; + Configurable skipNoEmcClusters{"skipNoEmcClusters", false, "Skip events with no EMCal clusters"}; + + // select the emcal or dcal acceptance + Configurable emcalRegion{"emcalRegion", 0, "Select EMCal region for filling histograms (see EMCalRegion enum)"}; // Event Selection Configurable zPvPosMax{"zPvPosMax", 10., "Maximum z of the primary vertex (cm)"}; @@ -138,7 +143,6 @@ struct HfElectronSelectionWithTpcEmcal { PresliceUnsorted perClusterMatchedTracks = o2::aod::emcalmatchedtrack::trackId; // configurable axis - ConfigurableAxis binsPosZ{"binsPosZ", {100, -10., 10.}, "primary vertex z coordinate"}; ConfigurableAxis binsEta{"binsEta", {100, -2.0, 2.}, "#it{#eta}"}; ConfigurableAxis binsPhi{"binsPhi", {32, 0.0, o2::constants::math::TwoPI}, "#it{#varphi}"}; @@ -181,6 +185,7 @@ struct HfElectronSelectionWithTpcEmcal { AxisSpec axisDeltaPhi = {binsDeltaPhi, "#Delta #varphi = #varphi_{trk}- #varphi_{cluster}"}; registry.add("hZvertex", "z vertex", {HistType::kTH1D, {axisPosZ}}); + registry.add("hNeventsAfterPassEmcal", "No of events pass the Emcal", {HistType::kTH1D, {{3, 1, 4}}}); registry.add("hNevents", "No of events", {HistType::kTH1D, {{3, 1, 4}}}); registry.add("hLikeMass", "Like mass", {HistType::kTH1D, {{axisMass}}}); registry.add("hUnLikeMass", "unLike mass", {HistType::kTH1D, {{axisMass}}}); @@ -370,7 +375,7 @@ struct HfElectronSelectionWithTpcEmcal { } } // Pass multiplicities and other required parameters for this electron - hfElectronSelection(electron.collisionId(), electron.globalIndex(), electron.eta(), electron.phi(), electron.pt(), electron.tpcNSigmaEl(), electron.tofNSigmaEl(), nElPairsLS, nElPairsUS, isEMcal); + hfElectronSelection(electron.collisionId(), electron.globalIndex(), electron.eta(), electron.phi(), electron.pt(), electron.tpcNSigmaEl(), electron.tofNSigmaEl(), invMassElectron, nElPairsLS, nElPairsUS, isEMcal); } // Electron Identification template @@ -380,14 +385,14 @@ struct HfElectronSelectionWithTpcEmcal { return; } - registry.fill(HIST("hNevents"), 1); + registry.fill(HIST("hNevents"), emcalRegion.value); // skip events with no clusters - if (emcClusters.size() == 0) { + if (emcClusters.size() == 0 && skipNoEmcClusters) { return; } registry.fill(HIST("hZvertex"), collision.posZ()); - + registry.fill(HIST("hNeventsAfterPassEmcal"), static_cast(emcalRegion)); ///////////////////////////////// // EMCal cluster info before match /// ///////////////////////////////