diff --git a/PWGCF/TwoParticleCorrelations/DataModel/LongRangeDerived.h b/PWGCF/TwoParticleCorrelations/DataModel/LongRangeDerived.h index de216b6727a..af4916671da 100644 --- a/PWGCF/TwoParticleCorrelations/DataModel/LongRangeDerived.h +++ b/PWGCF/TwoParticleCorrelations/DataModel/LongRangeDerived.h @@ -142,90 +142,10 @@ using LRZdc = LRZdcs::iterator; namespace lrcorrtrktable { - -template -inline typename binningType::binned_t packInTable(const float& valueToBin) -{ - if (valueToBin <= binningType::binned_min) { - return binningType::underflowBin; - } else if (valueToBin >= binningType::binned_max) { - return binningType::overflowBin; - } else { - return static_cast((valueToBin - binningType::binned_min) / binningType::bin_width); - } -} - -template -inline float unPack(const typename binningType::binned_t& b) -{ - return binningType::bin_width * b + binningType::binned_min; -} - -template -inline typename binningType::binned_t packSymmetric(const float& valueToBin) -{ - if (valueToBin <= binningType::binned_min) { - return (binningType::underflowBin); - } else if (valueToBin >= binningType::binned_max) { - return (binningType::overflowBin); - } else if (valueToBin >= 0) { - return (static_cast((valueToBin * binningType::inv_bin_width) + 0.5f)); - } else { - return (static_cast((valueToBin * binningType::inv_bin_width) - 0.5f)); - } -} - -template -inline float unPackSymmetric(const typename binningType::binned_t& b) -{ - return binningType::bin_width * static_cast(b); -} - -namespace binning -{ - -template lim, typename binVariable = int8_t> -struct binningParent { - public: - typedef binVariable binned_t; - - // Reserve two bins: one for overflow and one for underflow - static constexpr int nbins = (1 << (8 * sizeof(binned_t))) - 2; - static constexpr binned_t overflowBin = nbins; - static constexpr binned_t underflowBin = -1; - static constexpr float binned_min = lim.first; - static constexpr float binned_max = lim.second; - static constexpr float binned_center = 0.5 * (binned_min + binned_max); - static constexpr float bin_width = (binned_max - binned_min) / static_cast(nbins); - static constexpr float inv_bin_width = 1. / bin_width; - static_assert(binned_min < binned_max, "Invalid binning range"); - static void print() - { - LOG(info) << "Binning: " << binned_min << " - " << binned_max << " with " << nbins << " bins, width = " - << bin_width << ". Overflow bin " << static_cast(overflowBin) << " Underflow bin " << static_cast(underflowBin); - } -}; - -using trkdca_v0 = binningParent(-2.0f, 2.0f), int8_t>; -using trkphi_v0 = binningParent(0.0f, o2::constants::math::TwoPI), uint16_t>; -using trkamp_v0 = binningParent(0.0f, 5000.0f), uint16_t>; -using trkpt_v0 = binningParent(0.0f, 10.0f), uint8_t>; -using trketa_v0 = binningParent(-5.0f, 5.0f), int16_t>; -using trkchi2_v0 = binningParent(0.0f, 10.0f), int8_t>; - -using trkdca = trkdca_v0; -using trkchi2 = trkchi2_v0; -using trkpt = trkpt_v0; -using trketa = trketa_v0; -using trkphi = trkphi_v0; -using trkamp = trkamp_v0; - -} // namespace binning - DECLARE_SOA_INDEX_COLUMN(LRCollision, lrCollision); DECLARE_SOA_INDEX_COLUMN(UpcLRCollision, upcLRCollision); DECLARE_SOA_COLUMN(ChannelID, channelID, uint8_t); -DECLARE_SOA_COLUMN(AmplitudeStore, amplitudeStore, binning::trkamp::binned_t); +DECLARE_SOA_COLUMN(Amplitude, amplitude, float); DECLARE_SOA_COLUMN(InvMass, invMass, float); DECLARE_SOA_COLUMN(IdPos, idPos, int64_t); DECLARE_SOA_COLUMN(IdNeg, idNeg, int64_t); @@ -234,29 +154,12 @@ DECLARE_SOA_COLUMN(V0Type, v0Type, uint8_t); DECLARE_SOA_COLUMN(AmbDegree, ambDegree, uint8_t); DECLARE_SOA_COLUMN(TPCNClsFound, tpcNClsFound, uint8_t); DECLARE_SOA_COLUMN(TPCNClsCrossedRows, tpcNClsCrossedRows, uint8_t); -DECLARE_SOA_COLUMN(TPCChi2NClStore, tpcChi2NClStore, binning::trkchi2::binned_t); //! Stored binned chi2 -DECLARE_SOA_COLUMN(DCAzStore, dcazStore, binning::trkdca::binned_t); //! Stored binned dcaz -DECLARE_SOA_COLUMN(BestDCAxyStore, bestdcaxyStore, binning::trkdca::binned_t); //! Stored binned best dcaxy -DECLARE_SOA_COLUMN(BestDCAzStore, bestdcazStore, binning::trkdca::binned_t); //! Stored binned best dcaz -DECLARE_SOA_COLUMN(PtStore, ptStore, binning::trkpt::binned_t); //! Stored binned pt -DECLARE_SOA_COLUMN(EtaStore, etaStore, binning::trketa::binned_t); //! Stored binned eta -DECLARE_SOA_COLUMN(PhiStore, phiStore, binning::trkphi::binned_t); //! Stored binned phi -DECLARE_SOA_DYNAMIC_COLUMN(TPCChi2NCl, tpcChi2NCl, - [](binning::trkchi2::binned_t chi2_binned) -> float { return unPack(chi2_binned); }); -DECLARE_SOA_DYNAMIC_COLUMN(DCAz, dcaZ, - [](binning::trkdca::binned_t dcaz_binned) -> float { return unPackSymmetric(dcaz_binned); }); -DECLARE_SOA_DYNAMIC_COLUMN(Pt, pt, - [](binning::trkpt::binned_t pt_binned) -> float { return unPack(pt_binned); }); -DECLARE_SOA_DYNAMIC_COLUMN(Eta, eta, - [](binning::trketa::binned_t eta_binned) -> float { return unPackSymmetric(eta_binned); }); -DECLARE_SOA_DYNAMIC_COLUMN(Phi, phi, - [](binning::trkphi::binned_t phi_binned) -> float { return unPackSymmetric(phi_binned); }); -DECLARE_SOA_DYNAMIC_COLUMN(BestDCAXY, bestDCAXY, - [](binning::trkdca::binned_t bestdcaxy_binned) -> float { return unPackSymmetric(bestdcaxy_binned); }); -DECLARE_SOA_DYNAMIC_COLUMN(BestDCAZ, bestDCAZ, - [](binning::trkdca::binned_t bestdcaz_binned) -> float { return unPackSymmetric(bestdcaz_binned); }); -DECLARE_SOA_DYNAMIC_COLUMN(Amplitude, amplitude, - [](binning::trkamp::binned_t amp_binned) -> float { return unPack(amp_binned); }); +DECLARE_SOA_COLUMN(TPCChi2NCl, tpcChi2NCl, float); +DECLARE_SOA_COLUMN(DcaZ, dcaZ, float); +DECLARE_SOA_COLUMN(Pt, pt, float); +DECLARE_SOA_COLUMN(Eta, eta, float); +DECLARE_SOA_COLUMN(Phi, phi, float); + enum TrackPid { kSpCharge, kSpPion, @@ -276,41 +179,30 @@ DECLARE_SOA_TABLE(LRMidTracks, "AOD", "LRMIDTRACK", lrcorrtrktable::LRCollisionId, lrcorrtrktable::TPCNClsFound, lrcorrtrktable::TPCNClsCrossedRows, - lrcorrtrktable::TPCChi2NClStore, - lrcorrtrktable::PtStore, - lrcorrtrktable::EtaStore, - lrcorrtrktable::PhiStore, - lrcorrtrktable::DCAzStore, - lrcorrtrktable::TrackType, - lrcorrtrktable::TPCChi2NCl, - lrcorrtrktable::Pt, - lrcorrtrktable::Eta, - lrcorrtrktable::Phi, - lrcorrtrktable::DCAz); + lrcorrtrktable::TPCChi2NCl, + lrcorrtrktable::Pt, + lrcorrtrktable::Eta, + lrcorrtrktable::Phi, + lrcorrtrktable::DcaZ, + lrcorrtrktable::TrackType); using LRMidTrack = LRMidTracks::iterator; DECLARE_SOA_TABLE(LRFt0aTracks, "AOD", "LRFT0ATRACK", o2::soa::Index<>, lrcorrtrktable::LRCollisionId, lrcorrtrktable::ChannelID, - lrcorrtrktable::AmplitudeStore, - lrcorrtrktable::EtaStore, - lrcorrtrktable::PhiStore, - lrcorrtrktable::Amplitude, - lrcorrtrktable::Eta, - lrcorrtrktable::Phi); + lrcorrtrktable::Amplitude, + lrcorrtrktable::Eta, + lrcorrtrktable::Phi); using LRFt0aTrack = LRFt0aTracks::iterator; DECLARE_SOA_TABLE(LRFt0cTracks, "AOD", "LRFT0CTRACK", o2::soa::Index<>, lrcorrtrktable::LRCollisionId, lrcorrtrktable::ChannelID, - lrcorrtrktable::AmplitudeStore, - lrcorrtrktable::EtaStore, - lrcorrtrktable::PhiStore, - lrcorrtrktable::Amplitude, - lrcorrtrktable::Eta, - lrcorrtrktable::Phi); + lrcorrtrktable::Amplitude, + lrcorrtrktable::Eta, + lrcorrtrktable::Phi); using LRFt0cTrack = LRFt0cTracks::iterator; DECLARE_SOA_TABLE(LRV0Tracks, "AOD", "LRV0TRACK", @@ -318,31 +210,23 @@ DECLARE_SOA_TABLE(LRV0Tracks, "AOD", "LRV0TRACK", lrcorrtrktable::LRCollisionId, lrcorrtrktable::IdPos, lrcorrtrktable::IdNeg, - lrcorrtrktable::PtStore, - lrcorrtrktable::EtaStore, - lrcorrtrktable::PhiStore, + lrcorrtrktable::Pt, + lrcorrtrktable::Eta, + lrcorrtrktable::Phi, lrcorrtrktable::InvMass, - lrcorrtrktable::V0Type, - lrcorrtrktable::Pt, - lrcorrtrktable::Eta, - lrcorrtrktable::Phi); + lrcorrtrktable::V0Type); using LRV0Track = LRV0Tracks::iterator; DECLARE_SOA_TABLE(LRMftTracks, "AOD", "LRMFTTRACK", o2::soa::Index<>, lrcorrtrktable::LRCollisionId, lrcorrtrktable::AmbDegree, - lrcorrtrktable::PtStore, - lrcorrtrktable::EtaStore, - lrcorrtrktable::PhiStore, + lrcorrtrktable::Pt, + lrcorrtrktable::Eta, + lrcorrtrktable::Phi, fwdtrack::NClusters, - lrcorrtrktable::BestDCAxyStore, - lrcorrtrktable::BestDCAzStore, - lrcorrtrktable::BestDCAXY, - lrcorrtrktable::BestDCAZ, - lrcorrtrktable::Pt, - lrcorrtrktable::Eta, - lrcorrtrktable::Phi); + fwdtrack::BestDCAXY, + fwdtrack::BestDCAZ); using LRMftTrack = LRMftTracks::iterator; DECLARE_SOA_TABLE(UpcLRMidTracks, "AOD", "UPCLRMIDTRACK", @@ -350,41 +234,30 @@ DECLARE_SOA_TABLE(UpcLRMidTracks, "AOD", "UPCLRMIDTRACK", lrcorrtrktable::UpcLRCollisionId, lrcorrtrktable::TPCNClsFound, lrcorrtrktable::TPCNClsCrossedRows, - lrcorrtrktable::TPCChi2NClStore, - lrcorrtrktable::PtStore, - lrcorrtrktable::EtaStore, - lrcorrtrktable::PhiStore, - lrcorrtrktable::DCAzStore, - lrcorrtrktable::TrackType, - lrcorrtrktable::TPCChi2NCl, - lrcorrtrktable::Pt, - lrcorrtrktable::Eta, - lrcorrtrktable::Phi, - lrcorrtrktable::DCAz); + lrcorrtrktable::TPCChi2NCl, + lrcorrtrktable::Pt, + lrcorrtrktable::Eta, + lrcorrtrktable::Phi, + lrcorrtrktable::DcaZ, + lrcorrtrktable::TrackType); using UpcLRMidTrack = UpcLRMidTracks::iterator; DECLARE_SOA_TABLE(UpcLRFt0aTracks, "AOD", "UPCLRFT0ATRACK", o2::soa::Index<>, lrcorrtrktable::UpcLRCollisionId, lrcorrtrktable::ChannelID, - lrcorrtrktable::AmplitudeStore, - lrcorrtrktable::EtaStore, - lrcorrtrktable::PhiStore, - lrcorrtrktable::Amplitude, - lrcorrtrktable::Eta, - lrcorrtrktable::Phi); + lrcorrtrktable::Amplitude, + lrcorrtrktable::Eta, + lrcorrtrktable::Phi); using UpcLRFt0aTrack = UpcLRFt0aTracks::iterator; DECLARE_SOA_TABLE(UpcLRFt0cTracks, "AOD", "UPCLRFT0CTRACK", o2::soa::Index<>, lrcorrtrktable::UpcLRCollisionId, lrcorrtrktable::ChannelID, - lrcorrtrktable::AmplitudeStore, - lrcorrtrktable::EtaStore, - lrcorrtrktable::PhiStore, - lrcorrtrktable::Amplitude, - lrcorrtrktable::Eta, - lrcorrtrktable::Phi); + lrcorrtrktable::Amplitude, + lrcorrtrktable::Eta, + lrcorrtrktable::Phi); using UpcLRFt0cTrack = UpcLRFt0cTracks::iterator; DECLARE_SOA_TABLE(UpcLRV0Tracks, "AOD", "UPCLRV0TRACK", @@ -392,31 +265,23 @@ DECLARE_SOA_TABLE(UpcLRV0Tracks, "AOD", "UPCLRV0TRACK", lrcorrtrktable::UpcLRCollisionId, lrcorrtrktable::IdPos, lrcorrtrktable::IdNeg, - lrcorrtrktable::PtStore, - lrcorrtrktable::EtaStore, - lrcorrtrktable::PhiStore, + lrcorrtrktable::Pt, + lrcorrtrktable::Eta, + lrcorrtrktable::Phi, lrcorrtrktable::InvMass, - lrcorrtrktable::V0Type, - lrcorrtrktable::Pt, - lrcorrtrktable::Eta, - lrcorrtrktable::Phi); + lrcorrtrktable::V0Type); using UpcLRV0Track = UpcLRV0Tracks::iterator; DECLARE_SOA_TABLE(UpcLRMftTracks, "AOD", "UPCLRMFTTRACK", o2::soa::Index<>, lrcorrtrktable::UpcLRCollisionId, lrcorrtrktable::AmbDegree, - lrcorrtrktable::PtStore, - lrcorrtrktable::EtaStore, - lrcorrtrktable::PhiStore, + lrcorrtrktable::Pt, + lrcorrtrktable::Eta, + lrcorrtrktable::Phi, fwdtrack::NClusters, - lrcorrtrktable::BestDCAxyStore, - lrcorrtrktable::BestDCAzStore, - lrcorrtrktable::BestDCAXY, - lrcorrtrktable::BestDCAZ, - lrcorrtrktable::Pt, - lrcorrtrktable::Eta, - lrcorrtrktable::Phi); + fwdtrack::BestDCAXY, + fwdtrack::BestDCAZ); using UpcLRMftTrack = UpcLRMftTracks::iterator; } // namespace o2::aod diff --git a/PWGCF/TwoParticleCorrelations/TableProducer/longrangeMaker.cxx b/PWGCF/TwoParticleCorrelations/TableProducer/longrangeMaker.cxx index 79a9465064c..61d404d5890 100644 --- a/PWGCF/TwoParticleCorrelations/TableProducer/longrangeMaker.cxx +++ b/PWGCF/TwoParticleCorrelations/TableProducer/longrangeMaker.cxx @@ -198,6 +198,7 @@ struct LongrangeMaker { ConfigurableAxis axisSpecies = {"axisSpecies", {4, 0.5, 4.5}, "Species axis"}; ConfigurableAxis axisAmplitude{"axisAmplitude", {5000, 0, 10000}, "FT0 amplitude"}; ConfigurableAxis axisChannel{"axisChannel", {208, 0, 208}, "FT0 channel"}; + ConfigurableAxis axisMFTAmbDegree{"axisMFTAmbDegree", {50, -0.5, 49.5}, "Track Ambiguity axis"}; } cfgAxis; Configurable> itsNsigmaPidCut{"itsNsigmaPidCut", std::vector{3, 2.5, 2, -3, -2.5, -2}, "ITS n-sigma cut for pions_posNsigma, kaons_posNsigma, protons_posNsigma, pions_negNsigma, kaons_negNsigma, protons_negNsigma"}; @@ -276,6 +277,9 @@ struct LongrangeMaker { xMftBestTrk->SetBinLabel(4, "DCAxy selection"); xMftBestTrk->SetBinLabel(5, "DCAz selection"); + histos.add("ReassignedMFTtrackAmbDegree", "ReassignedMFTtrackAmbDegree", kTH1D, {cfgAxis.axisMFTAmbDegree}); + histos.add("AssignedMFTtrackAmbDegree", "AssignedMFTtrackAmbDegree", kTH1D, {cfgAxis.axisMFTAmbDegree}); + histos.add("FT0A_Amp", "FT0A_Amp", kTH1D, {cfgAxis.axisAmplitude}); histos.add("FT0A_Amp_gaincorrected", "FT0A_Amp_gaincorrected", kTH1D, {cfgAxis.axisAmplitude}); histos.add("FT0A_Channel_vs_Amp", "FT0A_Channel_vs_Amp", kTH2D, {cfgAxis.axisChannel, cfgAxis.axisAmplitude}); @@ -393,22 +397,22 @@ struct LongrangeMaker { lrmidtracks(lrcollision.lastIndex(), track.tpcNClsFound(), track.tpcNClsCrossedRows(), - aod::lrcorrtrktable::packInTable(track.tpcChi2NCl()), - aod::lrcorrtrktable::packInTable(track.pt()), - aod::lrcorrtrktable::packSymmetric(track.eta()), - aod::lrcorrtrktable::packSymmetric(track.phi()), - aod::lrcorrtrktable::packSymmetric(track.dcaZ()), + track.tpcChi2NCl(), + track.pt(), + track.eta(), + track.phi(), + track.dcaZ(), aod::lrcorrtrktable::kSpCharge); if (pid != aod::lrcorrtrktable::kSpCharge) { lrmidtracks(lrcollision.lastIndex(), track.tpcNClsFound(), track.tpcNClsCrossedRows(), - aod::lrcorrtrktable::packInTable(track.tpcChi2NCl()), - aod::lrcorrtrktable::packInTable(track.pt()), - aod::lrcorrtrktable::packSymmetric(track.eta()), - aod::lrcorrtrktable::packSymmetric(track.phi()), - aod::lrcorrtrktable::packSymmetric(track.dcaZ()), + track.tpcChi2NCl(), + track.pt(), + track.eta(), + track.phi(), + track.dcaZ(), pid); } } @@ -433,11 +437,14 @@ struct LongrangeMaker { if (cfgfittrksel.cfgVerbosity > 0) { LOGF(info, "FT0A info: Channel = %d | indexchannel = %d | %f | %f", chanelid, iCh, ft0gainvalues[chanelid], ft0gainvalues[iCh]); } + if (eta > cfgfittrksel.cfgFt0aEtaMax || eta < cfgfittrksel.cfgFt0aEtaMin) { + continue; + } lrft0atracks(lrcollision.lastIndex(), chanelid, - aod::lrcorrtrktable::packInTable(gainampl), - aod::lrcorrtrktable::packSymmetric(eta), - aod::lrcorrtrktable::packSymmetric(phi)); + gainampl, + eta, + phi); histos.fill(HIST("FT0A_Amp"), ampl); histos.fill(HIST("FT0A_Channel_vs_Amp"), chanelid, ampl); histos.fill(HIST("FT0A_Amp_gaincorrected"), gainampl); @@ -452,11 +459,14 @@ struct LongrangeMaker { if (cfgfittrksel.cfgVerbosity > 0) { LOGF(info, "FT0C info: Channel = %d | indexchannel = %d | %f | %f", chanelid, iCh, ft0gainvalues[chanelid], ft0gainvalues[iCh]); } + if (eta > cfgfittrksel.cfgFt0cEtaMax || eta < cfgfittrksel.cfgFt0cEtaMin) { + continue; + } lrft0ctracks(lrcollision.lastIndex(), chanelid, - aod::lrcorrtrktable::packInTable(gainampl), - aod::lrcorrtrktable::packSymmetric(eta), - aod::lrcorrtrktable::packSymmetric(phi)); + gainampl, + eta, + phi); histos.fill(HIST("FT0C_Amp"), ampl); histos.fill(HIST("FT0C_Channel_vs_Amp"), chanelid, ampl); histos.fill(HIST("FT0C_Amp_gaincorrected"), gainampl); @@ -473,15 +483,21 @@ struct LongrangeMaker { continue; } auto phi = itrack.phi(); + if (itrack.collisionId() != reassoMftTrack.bestCollisionId()) { + histos.fill(HIST("ReassignedMFTtrackAmbDegree"), reassoMftTrack.ambDegree()); + } + if (itrack.collisionId() == reassoMftTrack.bestCollisionId()) { + histos.fill(HIST("AssignedMFTtrackAmbDegree"), reassoMftTrack.ambDegree()); + } o2::math_utils::bringTo02Pi(phi); lrmfttracks(lrcollision.lastIndex(), reassoMftTrack.ambDegree(), - aod::lrcorrtrktable::packInTable(itrack.pt()), - aod::lrcorrtrktable::packSymmetric(itrack.eta()), - aod::lrcorrtrktable::packSymmetric(phi), + itrack.pt(), + itrack.eta(), + phi, itrack.nClusters(), - aod::lrcorrtrktable::packSymmetric(reassoMftTrack.bestDCAXY()), - aod::lrcorrtrktable::packSymmetric(reassoMftTrack.bestDCAZ())); + reassoMftTrack.bestDCAXY(), + reassoMftTrack.bestDCAZ()); } // v0 loop @@ -498,9 +514,9 @@ struct LongrangeMaker { lrv0tracks(lrcollision.lastIndex(), posTrack.globalIndex(), negTrack.globalIndex(), - aod::lrcorrtrktable::packInTable(v0.pt()), - aod::lrcorrtrktable::packSymmetric(v0.eta()), - aod::lrcorrtrktable::packSymmetric(v0.phi()), + v0.pt(), + v0.eta(), + v0.phi(), v0.mK0Short(), aod::lrcorrtrktable::kSpK0short); } @@ -515,9 +531,9 @@ struct LongrangeMaker { lrv0tracks(lrcollision.lastIndex(), posTrack.globalIndex(), negTrack.globalIndex(), - aod::lrcorrtrktable::packInTable(v0.pt()), - aod::lrcorrtrktable::packSymmetric(v0.eta()), - aod::lrcorrtrktable::packSymmetric(v0.phi()), + v0.pt(), + v0.eta(), + v0.phi(), massV0, aod::lrcorrtrktable::kSpLambda); } @@ -526,9 +542,9 @@ struct LongrangeMaker { lrv0tracks(lrcollision.lastIndex(), posTrack.globalIndex(), negTrack.globalIndex(), - aod::lrcorrtrktable::packInTable(v0.pt()), - aod::lrcorrtrktable::packSymmetric(v0.eta()), - aod::lrcorrtrktable::packSymmetric(v0.phi()), + v0.pt(), + v0.eta(), + v0.phi(), massV0, aod::lrcorrtrktable::kSpALambda); } // end of Lambda and Anti-Lambda processing @@ -586,22 +602,22 @@ struct LongrangeMaker { upclrmidtracks(upclrcollision.lastIndex(), track.tpcNClsFound(), track.tpcNClsCrossedRows(), - aod::lrcorrtrktable::packInTable(track.tpcChi2NCl()), - aod::lrcorrtrktable::packInTable(track.pt()), - aod::lrcorrtrktable::packSymmetric(track.eta()), - aod::lrcorrtrktable::packSymmetric(track.phi()), - aod::lrcorrtrktable::packSymmetric(track.dcaZ()), + track.tpcChi2NCl(), + track.pt(), + track.eta(), + track.phi(), + track.dcaZ(), aod::lrcorrtrktable::kSpCharge); if (pid != aod::lrcorrtrktable::kSpCharge) { upclrmidtracks(upclrcollision.lastIndex(), track.tpcNClsFound(), track.tpcNClsCrossedRows(), - aod::lrcorrtrktable::packInTable(track.tpcChi2NCl()), - aod::lrcorrtrktable::packInTable(track.pt()), - aod::lrcorrtrktable::packSymmetric(track.eta()), - aod::lrcorrtrktable::packSymmetric(track.phi()), - aod::lrcorrtrktable::packSymmetric(track.dcaZ()), + track.tpcChi2NCl(), + track.pt(), + track.eta(), + track.phi(), + track.dcaZ(), pid); } } @@ -614,22 +630,28 @@ struct LongrangeMaker { float ampl = ft0.amplitudeA()[iCh]; auto phi = getPhiFT0(chanelid, 0); auto eta = getEtaFT0(chanelid, 0); + if (eta > cfgfittrksel.cfgFt0aEtaMax || eta < cfgfittrksel.cfgFt0aEtaMin) { + continue; + } upclrft0atracks(upclrcollision.lastIndex(), chanelid, - aod::lrcorrtrktable::packInTable(ampl), - aod::lrcorrtrktable::packSymmetric(eta), - aod::lrcorrtrktable::packSymmetric(phi)); + ampl, + eta, + phi); } for (std::size_t iCh = 0; iCh < ft0.channelC().size(); iCh++) { auto chanelid = ft0.channelC()[iCh] + KminFt0cCell; float ampl = ft0.amplitudeC()[iCh]; auto phi = getPhiFT0(chanelid, 1); auto eta = getEtaFT0(chanelid, 1); + if (eta > cfgfittrksel.cfgFt0cEtaMax || eta < cfgfittrksel.cfgFt0cEtaMin) { + continue; + } upclrft0ctracks(upclrcollision.lastIndex(), chanelid, - aod::lrcorrtrktable::packInTable(ampl), - aod::lrcorrtrktable::packSymmetric(eta), - aod::lrcorrtrktable::packSymmetric(phi)); + ampl, + eta, + phi); } } @@ -642,14 +664,20 @@ struct LongrangeMaker { } auto phi = itrack.phi(); o2::math_utils::bringTo02Pi(phi); + if (itrack.collisionId() != reassoMftTrack.bestCollisionId()) { + histos.fill(HIST("ReassignedMFTtrackAmbDegree"), reassoMftTrack.ambDegree()); + } + if (itrack.collisionId() == reassoMftTrack.bestCollisionId()) { + histos.fill(HIST("AssignedMFTtrackAmbDegree"), reassoMftTrack.ambDegree()); + } upclrmfttracks(upclrcollision.lastIndex(), reassoMftTrack.ambDegree(), - aod::lrcorrtrktable::packInTable(itrack.pt()), - aod::lrcorrtrktable::packSymmetric(itrack.eta()), - aod::lrcorrtrktable::packSymmetric(phi), + itrack.pt(), + itrack.eta(), + phi, itrack.nClusters(), - aod::lrcorrtrktable::packSymmetric(reassoMftTrack.bestDCAXY()), - aod::lrcorrtrktable::packSymmetric(reassoMftTrack.bestDCAZ())); + reassoMftTrack.bestDCAXY(), + reassoMftTrack.bestDCAZ()); } // v0 loop @@ -666,9 +694,9 @@ struct LongrangeMaker { upclrv0tracks(upclrcollision.lastIndex(), posTrack.globalIndex(), negTrack.globalIndex(), - aod::lrcorrtrktable::packInTable(v0.pt()), - aod::lrcorrtrktable::packSymmetric(v0.eta()), - aod::lrcorrtrktable::packSymmetric(v0.phi()), + v0.pt(), + v0.eta(), + v0.phi(), v0.mK0Short(), aod::lrcorrtrktable::kSpK0short); } @@ -683,9 +711,9 @@ struct LongrangeMaker { upclrv0tracks(upclrcollision.lastIndex(), posTrack.globalIndex(), negTrack.globalIndex(), - aod::lrcorrtrktable::packInTable(v0.pt()), - aod::lrcorrtrktable::packSymmetric(v0.eta()), - aod::lrcorrtrktable::packSymmetric(v0.phi()), + v0.pt(), + v0.eta(), + v0.phi(), massV0, aod::lrcorrtrktable::kSpLambda); } @@ -694,9 +722,9 @@ struct LongrangeMaker { upclrv0tracks(upclrcollision.lastIndex(), posTrack.globalIndex(), negTrack.globalIndex(), - aod::lrcorrtrktable::packInTable(v0.pt()), - aod::lrcorrtrktable::packSymmetric(v0.eta()), - aod::lrcorrtrktable::packSymmetric(v0.phi()), + v0.pt(), + v0.eta(), + v0.phi(), massV0, aod::lrcorrtrktable::kSpALambda); } // end of Lambda and Anti-Lambda processing @@ -768,22 +796,22 @@ struct LongrangeMaker { lrmidtracks(lrcollision.lastIndex(), track.tpcNClsFound(), track.tpcNClsCrossedRows(), - aod::lrcorrtrktable::packInTable(track.tpcChi2NCl()), - aod::lrcorrtrktable::packInTable(track.pt()), - aod::lrcorrtrktable::packSymmetric(track.eta()), - aod::lrcorrtrktable::packSymmetric(track.phi()), - aod::lrcorrtrktable::packSymmetric(track.dcaZ()), + track.tpcChi2NCl(), + track.pt(), + track.eta(), + track.phi(), + track.dcaZ(), aod::lrcorrtrktable::kSpCharge); if (pid != aod::lrcorrtrktable::kSpCharge) { lrmidtracks(lrcollision.lastIndex(), track.tpcNClsFound(), track.tpcNClsCrossedRows(), - aod::lrcorrtrktable::packInTable(track.tpcChi2NCl()), - aod::lrcorrtrktable::packInTable(track.pt()), - aod::lrcorrtrktable::packSymmetric(track.eta()), - aod::lrcorrtrktable::packSymmetric(track.phi()), - aod::lrcorrtrktable::packSymmetric(track.dcaZ()), + track.tpcChi2NCl(), + track.pt(), + track.eta(), + track.phi(), + track.dcaZ(), pid); } } @@ -797,11 +825,14 @@ struct LongrangeMaker { auto phi = getPhiFT0(chanelid, 0); auto eta = getEtaFT0(chanelid, 0); auto gainampl = ampl / ft0gainvalues[chanelid]; + if (eta > cfgfittrksel.cfgFt0aEtaMax || eta < cfgfittrksel.cfgFt0aEtaMin) { + continue; + } lrft0atracks(lrcollision.lastIndex(), chanelid, - aod::lrcorrtrktable::packInTable(gainampl), - aod::lrcorrtrktable::packSymmetric(eta), - aod::lrcorrtrktable::packSymmetric(phi)); + gainampl, + eta, + phi); histos.fill(HIST("FT0A_Amp"), ampl); histos.fill(HIST("FT0A_Channel_vs_Amp"), chanelid, ampl); histos.fill(HIST("FT0A_Amp_gaincorrected"), gainampl); @@ -813,11 +844,14 @@ struct LongrangeMaker { auto phi = getPhiFT0(chanelid, 1); auto eta = getEtaFT0(chanelid, 1); auto gainampl = ampl / ft0gainvalues[chanelid]; + if (eta > cfgfittrksel.cfgFt0cEtaMax || eta < cfgfittrksel.cfgFt0cEtaMin) { + continue; + } lrft0ctracks(lrcollision.lastIndex(), chanelid, - aod::lrcorrtrktable::packInTable(gainampl), - aod::lrcorrtrktable::packSymmetric(eta), - aod::lrcorrtrktable::packSymmetric(phi)); + gainampl, + eta, + phi); histos.fill(HIST("FT0C_Amp"), ampl); histos.fill(HIST("FT0C_Channel_vs_Amp"), chanelid, ampl); histos.fill(HIST("FT0C_Amp_gaincorrected"), gainampl); @@ -835,14 +869,20 @@ struct LongrangeMaker { } auto phi = itrack.phi(); o2::math_utils::bringTo02Pi(phi); + if (itrack.collisionId() != reassoMftTrack.bestCollisionId()) { + histos.fill(HIST("ReassignedMFTtrackAmbDegree"), reassoMftTrack.ambDegree()); + } + if (itrack.collisionId() == reassoMftTrack.bestCollisionId()) { + histos.fill(HIST("AssignedMFTtrackAmbDegree"), reassoMftTrack.ambDegree()); + } lrmfttracks(lrcollision.lastIndex(), reassoMftTrack.ambDegree(), - aod::lrcorrtrktable::packInTable(itrack.pt()), - aod::lrcorrtrktable::packSymmetric(itrack.eta()), - aod::lrcorrtrktable::packSymmetric(phi), + itrack.pt(), + itrack.eta(), + phi, itrack.nClusters(), - aod::lrcorrtrktable::packSymmetric(reassoMftTrack.bestDCAXY()), - aod::lrcorrtrktable::packSymmetric(reassoMftTrack.bestDCAZ())); + reassoMftTrack.bestDCAXY(), + reassoMftTrack.bestDCAZ()); } for (const auto& particle : mcparticles) { diff --git a/PWGCF/TwoParticleCorrelations/Tasks/longrangecorrDerived.cxx b/PWGCF/TwoParticleCorrelations/Tasks/longrangecorrDerived.cxx index f387acbbd2b..866fcdeba90 100644 --- a/PWGCF/TwoParticleCorrelations/Tasks/longrangecorrDerived.cxx +++ b/PWGCF/TwoParticleCorrelations/Tasks/longrangecorrDerived.cxx @@ -34,6 +34,8 @@ #include #include +#include + #include #include #include @@ -57,6 +59,7 @@ struct LongrangecorrDerived { struct : ConfigurableGroup { Configurable cfgNmixedevent{"cfgNmixedevent", 5, "how many events are mixed"}; + Configurable cfgSampleSize{"cfgSampleSize", 10, "Sample size for bootstrapping"}; Configurable cfgPidMask{"cfgPidMask", 0, "Selection bitmask for the TPC particle"}; Configurable cfgV0Mask{"cfgV0Mask", 0, "Selection bitmask for the V0 particle"}; Configurable cfgVtxCut{"cfgVtxCut", 10.0f, "Vertex Z range to consider"}; @@ -80,7 +83,6 @@ struct LongrangecorrDerived { ConfigurableAxis axisPhi{"axisPhi", {96, 0, TwoPI}, "#phi axis"}; ConfigurableAxis axisEtaTrig{"axisEtaTrig", {40, -1., 1.}, "#eta trig axis"}; ConfigurableAxis axisPtTrigger{"axisPtTrigger", {VARIABLE_WIDTH, 0.5, 1.0, 1.5, 2.0, 3.0, 4.0, 6.0, 10.0}, "pt trigger axis for histograms"}; - ConfigurableAxis axisPtAssoc{"axisPtAssoc", {VARIABLE_WIDTH, 0.5, 1.0, 1.5, 2.0, 3.0, 4.0, 6.0, 10.0}, "pt assoc axis for histograms"}; ConfigurableAxis axisVtxZ{"axisVtxZ", {40, -20, 20}, "vertex axis"}; ConfigurableAxis axisEtaAssoc{"axisEtaAssoc", {96, 3.5, 4.9}, "#eta assoc axis"}; ConfigurableAxis axisDeltaPhi{"axisDeltaPhi", {72, -PIHalf, PIHalf * 3}, "delta phi axis for histograms"}; @@ -91,6 +93,7 @@ struct LongrangecorrDerived { ConfigurableAxis axisChannel{"axisChannel", {208, 0, 208}, "FT0 channel"}; ConfigurableAxis axisMultME{"axisMultME", {VARIABLE_WIDTH, 0, 5, 10, 20, 30, 40, 50, 1000}, "Mixing bins - multiplicity"}; ConfigurableAxis axisVtxZME{"axisVtxZME", {VARIABLE_WIDTH, -10, -8, -6, -4, -2, 0, 2, 4, 6, 8, 10}, "Mixing bins - z-vertex"}; + ConfigurableAxis axisSample{"axisSample", {10, 0, 10}, "sample axis for histograms"}; ConfigurableAxis axisTPCNClsFound{"axisTPCNClsFound", {200, -0.5, 199.5}, "TPC Cluster axis"}; ConfigurableAxis axisTPCNClsCrossedRows{"axisTPCNClsCrossedRows", {200, -0.5, 199.5}, "TPC NCrossedRow axis"}; @@ -155,10 +158,10 @@ struct LongrangecorrDerived { void init(InitContext const&) { - std::vector corrAxis = {{cfgAxis.axisVtxZ, "z-vtx (cm)"}, + std::vector corrAxis = {{cfgAxis.axisSample, "Sample"}, + {cfgAxis.axisVtxZ, "z-vtx (cm)"}, {cfgAxis.axisMultiplicity, "multiplicity"}, {cfgAxis.axisPtTrigger, "p_{T} (GeV/c)"}, - {cfgAxis.axisPtAssoc, "p_{T} (GeV/c)"}, {cfgAxis.axisDeltaPhi, "#Delta#varphi (rad)"}, {cfgAxis.axisDeltaEta, "#Delta#eta"}}; std::vector effAxis = {{cfgAxis.axisVertexEfficiency, "z-vtx (cm)"}, @@ -182,14 +185,13 @@ struct LongrangecorrDerived { histos.add("Trig_etavsphi", "Trig_etavsphi", kTH2D, {cfgAxis.axisPhi, cfgAxis.axisEtaTrig}); histos.add("Trig_pt", "Trig_pt", kTH1D, {cfgAxis.axisPtTrigger}); histos.add("Trig_invMass", "Trig_invMass", kTH1D, {cfgAxis.axisInvMassQA}); - histos.add("Trig_hist", "Trig_hist", kTHnSparseF, {cfgAxis.axisVtxZ, cfgAxis.axisMultiplicity, cfgAxis.axisPtTrigger, cfgAxis.axisInvMass}); + histos.add("Trig_hist", "Trig_hist", kTHnSparseF, {cfgAxis.axisSample, cfgAxis.axisVtxZ, cfgAxis.axisMultiplicity, cfgAxis.axisPtTrigger, cfgAxis.axisInvMass}); histos.add("Trig_amp", "Trig_amp", kTH1D, {cfgAxis.axisAmplitude}); histos.add("Channel_vs_Trig_amp", "Channel_vs_Trig_amp", kTH2D, {cfgAxis.axisChannel, cfgAxis.axisAmplitude}); histos.add("Assoc_eta", "Assoc_eta", kTH1D, {cfgAxis.axisEtaAssoc}); histos.add("Assoc_phi", "Assoc_phi", kTH1D, {cfgAxis.axisPhi}); histos.add("Assoc_etavsphi", "Assoc_etavsphi", kTH2D, {cfgAxis.axisPhi, cfgAxis.axisEtaAssoc}); - histos.add("Assoc_pt", "Assoc_pt", kTH1D, {cfgAxis.axisPtAssoc}); histos.add("Assoc_amp", "Assoc_amp", kTH1D, {cfgAxis.axisAmplitude}); histos.add("Channel_vs_Assoc_amp", "Channel_vs_Assoc_amp", kTH2D, {cfgAxis.axisChannel, cfgAxis.axisAmplitude}); @@ -285,8 +287,6 @@ struct LongrangecorrDerived { if constexpr (requires { track.channelID(); }) { histos.fill(HIST("Assoc_amp"), track.amplitude()); histos.fill(HIST("Channel_vs_Assoc_amp"), track.channelID(), track.amplitude()); - } else { - histos.fill(HIST("Assoc_pt"), track.pt()); } if constexpr (requires { track.nClusters(); }) { histos.fill(HIST("MFTNClusters"), track.nClusters()); @@ -317,6 +317,7 @@ struct LongrangecorrDerived { template void fillCorrHist(TTarget target, TTriggers const& triggers, TAssocs const& assocs, bool mixing, float vz, float multiplicity, float eventWeight) { + int fSampleIndex = gRandom->Uniform(0, cfgSel.cfgSampleSize); for (auto const& triggerTrack : triggers) { auto trigAmpl = 1.0f; if constexpr (requires { triggerTrack.channelID(); }) { @@ -338,11 +339,11 @@ struct LongrangecorrDerived { if (!mixing) { fillTrigTrackQA(triggerTrack); if constexpr (requires { triggerTrack.channelID(); }) { - histos.fill(HIST("Trig_hist"), vz, multiplicity, 1.0, 1.0, eventWeight * trigAmpl); + histos.fill(HIST("Trig_hist"), fSampleIndex, vz, multiplicity, 1.0, 1.0, eventWeight * trigAmpl); } else if constexpr (requires { triggerTrack.invMass(); }) { - histos.fill(HIST("Trig_hist"), vz, multiplicity, triggerTrack.pt(), triggerTrack.invMass(), eventWeight * trigAmpl); + histos.fill(HIST("Trig_hist"), fSampleIndex, vz, multiplicity, triggerTrack.pt(), triggerTrack.invMass(), eventWeight * trigAmpl); } else { - histos.fill(HIST("Trig_hist"), vz, multiplicity, triggerTrack.pt(), 1.0, eventWeight * trigAmpl); + histos.fill(HIST("Trig_hist"), fSampleIndex, vz, multiplicity, triggerTrack.pt(), 1.0, eventWeight * trigAmpl); } } for (auto const& assoTrack : assocs) { @@ -365,11 +366,11 @@ struct LongrangecorrDerived { histos.fill(HIST("deltaEta_deltaPhi_mixed"), deltaPhi, deltaEta, eventWeight * trigAmpl * assoAmpl); } if constexpr (requires { triggerTrack.channelID(); }) { - target->getPairHist()->Fill(step, vz, multiplicity, 1.0, 1.0, deltaPhi, deltaEta, 1.0, eventWeight * trigAmpl * assoAmpl); + target->getPairHist()->Fill(step, fSampleIndex, vz, multiplicity, 1.0, deltaPhi, deltaEta, 1.0, eventWeight * trigAmpl * assoAmpl); } else if constexpr (requires { triggerTrack.invMass(); }) { - target->getPairHist()->Fill(step, vz, multiplicity, triggerTrack.pt(), triggerTrack.pt(), deltaPhi, deltaEta, triggerTrack.invMass(), eventWeight * trigAmpl * assoAmpl); + target->getPairHist()->Fill(step, fSampleIndex, vz, multiplicity, triggerTrack.pt(), deltaPhi, deltaEta, triggerTrack.invMass(), eventWeight * trigAmpl * assoAmpl); } else { - target->getPairHist()->Fill(step, vz, multiplicity, triggerTrack.pt(), triggerTrack.pt(), deltaPhi, deltaEta, 1.0, eventWeight * trigAmpl * assoAmpl); + target->getPairHist()->Fill(step, fSampleIndex, vz, multiplicity, triggerTrack.pt(), deltaPhi, deltaEta, 1.0, eventWeight * trigAmpl * assoAmpl); } } // associated tracks } // trigger tracks