From 0c894ef561b1821e98b7c4884d13277f8a5cc8c4 Mon Sep 17 00:00:00 2001 From: abmodak <67369858+abmodak@users.noreply.github.com> Date: Fri, 19 Sep 2025 18:17:22 +0200 Subject: [PATCH 1/4] Update longrangeCorrelation.cxx 1) Fix FT0C channel ID 2) Updates in MFT track selection 3) Remove FV0-Global and FV0-MFT correlations --- .../Tasks/longrangeCorrelation.cxx | 313 ++---------------- 1 file changed, 29 insertions(+), 284 deletions(-) diff --git a/PWGCF/TwoParticleCorrelations/Tasks/longrangeCorrelation.cxx b/PWGCF/TwoParticleCorrelations/Tasks/longrangeCorrelation.cxx index fdf69531056..dcdc38ffa90 100644 --- a/PWGCF/TwoParticleCorrelations/Tasks/longrangeCorrelation.cxx +++ b/PWGCF/TwoParticleCorrelations/Tasks/longrangeCorrelation.cxx @@ -83,13 +83,11 @@ enum KindOfEvntType { enum KindOfCorrType { kFT0AGLOBAL, kFT0CGLOBAL, - kFV0GLOBAL, kMFTGLOBAL, - kFV0MFT, kFT0AMFT }; -static constexpr std::string_view kCorrType[] = {"Ft0aGlobal/", "Ft0cGlobal/", "Fv0Global/", "MftGlobal/", "Fv0Mft/", "Ft0aMft/"}; +static constexpr std::string_view kCorrType[] = {"Ft0aGlobal/", "Ft0cGlobal/", "MftGlobal/", "Ft0aMft/"}; static constexpr std::string_view kEvntType[] = {"SE/", "ME/"}; AxisSpec axisEvent{10, 0.5, 9.5, "#Event", "EventAxis"}; @@ -105,7 +103,6 @@ struct LongrangeCorrelation { Service ccdb; o2::ccdb::CcdbApi ccdbApi; std::vector* offsetFT0; - std::vector* offsetFV0; HistogramRegistry histos{"histos", {}, OutputObjHandlingPolicy::AnalysisObject}; Configurable cfgVtxCut{"cfgVtxCut", 10.0f, "Vertex Z range to consider"}; Configurable cfgEtaCut{"cfgEtaCut", 1.0f, "Eta range to consider"}; @@ -144,11 +141,12 @@ struct LongrangeCorrelation { using CollTable = soa::Join; using TrksTable = soa::Filtered>; using MftTrkTable = soa::Filtered; + using MftTrkTable2 = soa::SmallGroups; + using MftBestTrkTable = soa::Filtered; Preslice perColGlobal = aod::track::collisionId; Preslice perColMft = aod::fwdtrack::collisionId; - + PresliceUnsorted perColBestMft = aod::fwdtrack::bestCollisionId; o2::ft0::Geometry ft0Det; - o2::fv0::Geometry* fv0Det; OutputObj sameFt0aGlobal{Form("sameEventFt0aGlobal_%i_%i", static_cast(cfgMinMult), static_cast(cfgMaxMult))}; OutputObj mixedFt0aGlobal{Form("mixedEventFt0aGlobal_%i_%i", static_cast(cfgMinMult), static_cast(cfgMaxMult))}; @@ -156,10 +154,6 @@ struct LongrangeCorrelation { OutputObj mixedFt0cGlobal{Form("mixedEventFt0cGlobal_%i_%i", static_cast(cfgMinMult), static_cast(cfgMaxMult))}; OutputObj sameMftGlobal{Form("sameEventMftGlobal_%i_%i", static_cast(cfgMinMult), static_cast(cfgMaxMult))}; OutputObj mixedMftGlobal{Form("mixedEventMftGlobal_%i_%i", static_cast(cfgMinMult), static_cast(cfgMaxMult))}; - OutputObj sameFv0Global{Form("sameEventFv0Global_%i_%i", static_cast(cfgMinMult), static_cast(cfgMaxMult))}; - OutputObj mixedFv0Global{Form("mixedEventFv0Global_%i_%i", static_cast(cfgMinMult), static_cast(cfgMaxMult))}; - OutputObj sameFv0Mft{Form("sameEventFv0Mft_%i_%i", static_cast(cfgMinMult), static_cast(cfgMaxMult))}; - OutputObj mixedFv0Mft{Form("mixedEventFv0Mft_%i_%i", static_cast(cfgMinMult), static_cast(cfgMaxMult))}; OutputObj sameFt0aMft{Form("sameEventFt0aMft_%i_%i", static_cast(cfgMinMult), static_cast(cfgMaxMult))}; OutputObj mixedFt0aMft{Form("mixedEventFt0aMft_%i_%i", static_cast(cfgMinMult), static_cast(cfgMaxMult))}; @@ -189,12 +183,9 @@ struct LongrangeCorrelation { ccdb->setCreatedNotAfter(std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()).count()); LOGF(info, "Getting alignment offsets from the CCDB..."); offsetFT0 = ccdb->getForTimeStamp>("FT0/Calib/Align", cfgCcdbParam.noLaterThan.value); - offsetFV0 = ccdb->getForTimeStamp>("FV0/Calib/Align", cfgCcdbParam.noLaterThan.value); LOGF(info, "Offset for FT0A: x = %.3f y = %.3f z = %.3f\n", (*offsetFT0)[0].getX(), (*offsetFT0)[0].getY(), (*offsetFT0)[0].getZ()); LOGF(info, "Offset for FT0C: x = %.3f y = %.3f z = %.3f\n", (*offsetFT0)[1].getX(), (*offsetFT0)[1].getY(), (*offsetFT0)[1].getZ()); - LOGF(info, "Offset for FV0-left: x = %.3f y = %.3f z = %.3f\n", (*offsetFV0)[0].getX(), (*offsetFV0)[0].getY(), (*offsetFV0)[0].getZ()); - LOGF(info, "Offset for FV0-right: x = %.3f y = %.3f z = %.3f\n", (*offsetFV0)[1].getX(), (*offsetFV0)[1].getY(), (*offsetFV0)[1].getZ()); - + std::vector corrAxis = {{axisSample, "Sample"}, {axisVtxZ, "z-vtx (cm)"}, {axisPtTrigger, "p_{T} (GeV/c)"}, @@ -207,8 +198,6 @@ struct LongrangeCorrelation { std::vector userAxis; - fv0Det = o2::fv0::Geometry::instance(o2::fv0::Geometry::eUninitialized); - if (doprocessEventStat) { histos.add("QA/EventHist", "events", kTH1F, {axisEvent}, false); histos.add("QA/VtxZHist", "v_{z} (cm)", kTH1F, {axisVtxZ}, false); @@ -236,27 +225,13 @@ struct LongrangeCorrelation { mixedFt0cGlobal.setObject(new CorrelationContainer(Form("mixedEventFt0cGlobal_%i_%i", static_cast(cfgMinMult), static_cast(cfgMaxMult)), Form("mixedEventFt0cGlobal_%i_%i", static_cast(cfgMinMult), static_cast(cfgMaxMult)), corrAxis, effAxis, userAxis)); } - if (doprocessFv0GlobalSE || doprocessFv0GlobalME) { - addHistos(); - addHistos(); - sameFv0Global.setObject(new CorrelationContainer(Form("sameEventFv0Global_%i_%i", static_cast(cfgMinMult), static_cast(cfgMaxMult)), Form("sameEventFv0Global_%i_%i", static_cast(cfgMinMult), static_cast(cfgMaxMult)), corrAxis, effAxis, userAxis)); - mixedFv0Global.setObject(new CorrelationContainer(Form("mixedEventFv0Global_%i_%i", static_cast(cfgMinMult), static_cast(cfgMaxMult)), Form("mixedEventFv0Global_%i_%i", static_cast(cfgMinMult), static_cast(cfgMaxMult)), corrAxis, effAxis, userAxis)); - } - if (doprocessMftGlobalSE || doprocessMftGlobalME) { addHistos(); addHistos(); sameMftGlobal.setObject(new CorrelationContainer(Form("sameEventMftGlobal_%i_%i", static_cast(cfgMinMult), static_cast(cfgMaxMult)), Form("sameEventMftGlobal_%i_%i", static_cast(cfgMinMult), static_cast(cfgMaxMult)), corrAxis, effAxis, userAxis)); mixedMftGlobal.setObject(new CorrelationContainer(Form("mixedEventMftGlobal_%i_%i", static_cast(cfgMinMult), static_cast(cfgMaxMult)), Form("mixedEventMftGlobal_%i_%i", static_cast(cfgMinMult), static_cast(cfgMaxMult)), corrAxis, effAxis, userAxis)); } - - if (doprocessFv0MftSE || doprocessFv0MftME) { - addHistos(); - addHistos(); - sameFv0Mft.setObject(new CorrelationContainer(Form("sameEventFv0Mft_%i_%i", static_cast(cfgMinMult), static_cast(cfgMaxMult)), Form("sameEventFv0Mft_%i_%i", static_cast(cfgMinMult), static_cast(cfgMaxMult)), corrAxis, effAxis, userAxis)); - mixedFv0Mft.setObject(new CorrelationContainer(Form("mixedEventFv0Mft_%i_%i", static_cast(cfgMinMult), static_cast(cfgMaxMult)), Form("mixedEventFv0Mft_%i_%i", static_cast(cfgMinMult), static_cast(cfgMaxMult)), corrAxis, effAxis, userAxis)); - } - + if (doprocessFt0aMftSE || doprocessFt0aMftME) { addHistos(); addHistos(); @@ -285,27 +260,6 @@ struct LongrangeCorrelation { return RecoDecay::phi(chPos.X() + (*offsetFT0)[i].getX(), chPos.Y() + (*offsetFT0)[i].getY()); } - double getPhiFV0(uint chno) - { - int cellsInLeft[] = {0, 1, 2, 3, 8, 9, 10, 11, 16, 17, 18, 19, 24, 25, 26, 27, 32, 40, 33, 41, 34, 42, 35, 43}; - bool isChnoInLeft = std::find(std::begin(cellsInLeft), std::end(cellsInLeft), chno) != std::end(cellsInLeft); - float offsetX, offsetY; - if (isChnoInLeft) { - offsetX = (*offsetFV0)[0].getX(); - offsetY = (*offsetFV0)[0].getY(); - } else { - offsetX = (*offsetFV0)[1].getX(); - offsetY = (*offsetFV0)[1].getY(); - } - - o2::fv0::Point3Dsimple chPos; - if (isReadoutCenter) - chPos = fv0Det->getReadoutCenter(chno); - else - chPos = fv0Det->getCellCenter(chno); - return RecoDecay::phi(chPos.x + offsetX, chPos.y + offsetY); - } - double getEtaFT0(uint chno, int i) { ft0Det.calculateChannelCenter(); @@ -318,35 +272,6 @@ struct LongrangeCorrelation { return -std::log(std::tan(0.5 * theta)); } - double getEtaFV0(uint chno) - { - int cellsInLeft[] = {0, 1, 2, 3, 8, 9, 10, 11, 16, 17, 18, 19, 24, 25, 26, 27, 32, 40, 33, 41, 34, 42, 35, 43}; - bool isChnoInLeft = std::find(std::begin(cellsInLeft), std::end(cellsInLeft), chno) != std::end(cellsInLeft); - float offsetX, offsetY, offsetZ; - if (isChnoInLeft) { - offsetX = (*offsetFV0)[0].getX(); - offsetY = (*offsetFV0)[0].getY(); - offsetZ = (*offsetFV0)[0].getZ(); - } else { - offsetX = (*offsetFV0)[1].getX(); - offsetY = (*offsetFV0)[1].getY(); - offsetZ = (*offsetFV0)[1].getZ(); - } - - o2::fv0::Point3Dsimple chPos; - if (isReadoutCenter) - chPos = fv0Det->getReadoutCenter(chno); - else - chPos = fv0Det->getCellCenter(chno); - - auto x = chPos.x + offsetX; - auto y = chPos.y + offsetY; - auto z = chPos.z + offsetZ; - auto r = std::sqrt(x * x + y * y); - auto theta = std::atan2(r, z); - return -std::log(std::tan(0.5 * theta)); - } - template bool isEventSelected(CheckCol const& col) { @@ -380,7 +305,7 @@ struct LongrangeCorrelation { histos.fill(HIST(kCorrType[corrType]) + HIST(kEvntType[evntType]) + HIST("hMult"), tracks.size()); for (auto const& iTrk : tracks) { auto phi = iTrk.phi(); - if constexpr (corrType == kFV0MFT || corrType == kFT0AMFT) { + if constexpr (corrType == kFT0AMFT) { o2::math_utils::bringTo02Pi(phi); } histos.fill(HIST(kCorrType[corrType]) + HIST(kEvntType[evntType]) + HIST("Trig_etavsphi"), phi, iTrk.eta()); @@ -443,7 +368,7 @@ struct LongrangeCorrelation { histos.fill(HIST("Ft0cGlobal/SE/Trig_hist"), fSampleIndex, vz, triggerTrack.pt()); for (std::size_t iCh = 0; iCh < ft0.channelC().size(); iCh++) { - auto chanelid = ft0.channelC()[iCh]; + auto chanelid = ft0.channelC()[iCh] + 96; float ampl = ft0.amplitudeC()[iCh]; if (mixing) @@ -485,122 +410,32 @@ struct LongrangeCorrelation { histos.fill(HIST("MftGlobal/SE/Trig_hist"), fSampleIndex, vz, triggerTrack.pt()); for (auto const& assoTrack : mft) { - if (!isMftTrackSelected(assoTrack)) { + auto bestMftTrack = assoTrack.template mfttrack_as(); + if (!isMftTrackSelected(bestMftTrack)) { continue; } - auto phi = assoTrack.phi(); + auto phi = bestMftTrack.phi(); o2::math_utils::bringTo02Pi(phi); if (mixing) { - histos.fill(HIST("MftGlobal/ME/Assoc_eta"), assoTrack.eta()); + histos.fill(HIST("MftGlobal/ME/Assoc_eta"), bestMftTrack.eta()); histos.fill(HIST("MftGlobal/ME/Assoc_phi"), phi); - histos.fill(HIST("MftGlobal/ME/Assoc_etavsphi"), phi, assoTrack.eta()); + histos.fill(HIST("MftGlobal/ME/Assoc_etavsphi"), phi, bestMftTrack.eta()); } else { - histos.fill(HIST("MftGlobal/SE/Assoc_eta"), assoTrack.eta()); + histos.fill(HIST("MftGlobal/SE/Assoc_eta"), bestMftTrack.eta()); histos.fill(HIST("MftGlobal/SE/Assoc_phi"), phi); - histos.fill(HIST("MftGlobal/SE/Assoc_etavsphi"), phi, assoTrack.eta()); + histos.fill(HIST("MftGlobal/SE/Assoc_etavsphi"), phi, bestMftTrack.eta()); } float deltaPhi = RecoDecay::constrainAngle(triggerTrack.phi() - phi, -PIHalf); - float deltaEta = triggerTrack.eta() - assoTrack.eta(); + float deltaEta = triggerTrack.eta() - bestMftTrack.eta(); if (mixing) histos.fill(HIST("MftGlobal/ME/deltaEta_deltaPhi"), deltaPhi, deltaEta); else histos.fill(HIST("MftGlobal/SE/deltaEta_deltaPhi"), deltaPhi, deltaEta); - target->getPairHist()->Fill(step, fSampleIndex, vz, triggerTrack.pt(), assoTrack.pt(), deltaPhi, deltaEta); + target->getPairHist()->Fill(step, fSampleIndex, vz, triggerTrack.pt(), bestMftTrack.pt(), deltaPhi, deltaEta); } // associated mft tracks } // trigger tracks } // fillCorrMftGlobal - template - void fillCorrFv0Global(TTarget target, TTriggers const& triggers, TFV0s const& fv0, bool mixing, float vz) - { - int fSampleIndex = gRandom->Uniform(0, cfgSampleSize); - if (!mixing) - histos.fill(HIST("Fv0Global/SE/hMult_used"), triggers.size()); - for (auto const& triggerTrack : triggers) { - if (!mixing) - histos.fill(HIST("Fv0Global/SE/Trig_hist"), fSampleIndex, vz, triggerTrack.pt()); - - for (std::size_t iCh = 0; iCh < fv0.channel().size(); iCh++) { - auto chanelid = fv0.channel()[iCh]; - float ampl = fv0.amplitude()[iCh]; - - if (mixing) - histos.fill(HIST("Fv0Global/ME/Assoc_amp"), chanelid, ampl); - else - histos.fill(HIST("Fv0Global/SE/Assoc_amp"), chanelid, ampl); - - auto phi = getPhiFV0(chanelid); - auto eta = getEtaFV0(chanelid); - - if (mixing) { - histos.fill(HIST("Fv0Global/ME/Assoc_eta"), eta); - histos.fill(HIST("Fv0Global/ME/Assoc_phi"), phi); - histos.fill(HIST("Fv0Global/ME/Assoc_etavsphi"), phi, eta); - } else { - histos.fill(HIST("Fv0Global/SE/Assoc_eta"), eta); - histos.fill(HIST("Fv0Global/SE/Assoc_phi"), phi); - histos.fill(HIST("Fv0Global/SE/Assoc_etavsphi"), phi, eta); - } - float deltaPhi = RecoDecay::constrainAngle(triggerTrack.phi() - phi, -PIHalf); - float deltaEta = triggerTrack.eta() - eta; - if (mixing) - histos.fill(HIST("Fv0Global/ME/deltaEta_deltaPhi"), deltaPhi, deltaEta); - else - histos.fill(HIST("Fv0Global/SE/deltaEta_deltaPhi"), deltaPhi, deltaEta); - target->getPairHist()->Fill(step, fSampleIndex, vz, triggerTrack.pt(), triggerTrack.pt(), deltaPhi, deltaEta); - } // associated fv0 tracks - } // trigger tracks - } // fillCorrFv0Global - - template - void fillCorrFv0Mft(TTarget target, TTracks const& tracks, TTriggers const& triggers, TFV0s const& fv0, bool mixing, float vz) - { - int fSampleIndex = gRandom->Uniform(0, cfgSampleSize); - if (!mixing) - histos.fill(HIST("Fv0Mft/SE/hMult_used"), tracks.size()); - for (auto const& triggerTrack : triggers) { - if (!isMftTrackSelected(triggerTrack)) { - continue; - } - if (!mixing) - histos.fill(HIST("Fv0Mft/SE/Trig_hist"), fSampleIndex, vz, triggerTrack.pt()); - - auto trigphi = triggerTrack.phi(); - o2::math_utils::bringTo02Pi(trigphi); - - for (std::size_t iCh = 0; iCh < fv0.channel().size(); iCh++) { - auto chanelid = fv0.channel()[iCh]; - float ampl = fv0.amplitude()[iCh]; - - if (mixing) - histos.fill(HIST("Fv0Mft/ME/Assoc_amp"), chanelid, ampl); - else - histos.fill(HIST("Fv0Mft/SE/Assoc_amp"), chanelid, ampl); - - auto phi = getPhiFV0(chanelid); - auto eta = getEtaFV0(chanelid); - - if (mixing) { - histos.fill(HIST("Fv0Mft/ME/Assoc_eta"), eta); - histos.fill(HIST("Fv0Mft/ME/Assoc_phi"), phi); - histos.fill(HIST("Fv0Mft/ME/Assoc_etavsphi"), phi, eta); - } else { - histos.fill(HIST("Fv0Mft/SE/Assoc_eta"), eta); - histos.fill(HIST("Fv0Mft/SE/Assoc_phi"), phi); - histos.fill(HIST("Fv0Mft/SE/Assoc_etavsphi"), phi, eta); - } - - float deltaPhi = RecoDecay::constrainAngle(trigphi - phi, -PIHalf); - float deltaEta = triggerTrack.eta() - eta; - if (mixing) - histos.fill(HIST("Fv0Mft/ME/deltaEta_deltaPhi"), deltaPhi, deltaEta); - else - histos.fill(HIST("Fv0Mft/SE/deltaEta_deltaPhi"), deltaPhi, deltaEta); - target->getPairHist()->Fill(step, fSampleIndex, vz, triggerTrack.pt(), triggerTrack.pt(), deltaPhi, deltaEta); - } // associated fv0 tracks - } // trigger tracks - } // fillCorrFv0Mft - template void fillCorrFt0aMft(TTarget target, TTracks const& tracks, TTriggers const& triggers, TFT0s const& ft0, bool mixing, float vz) { @@ -608,13 +443,14 @@ struct LongrangeCorrelation { if (!mixing) histos.fill(HIST("Ft0aMft/SE/hMult_used"), tracks.size()); for (auto const& triggerTrack : triggers) { - if (!isMftTrackSelected(triggerTrack)) { + auto bestMftTrack = triggerTrack.template mfttrack_as(); + if (!isMftTrackSelected(bestMftTrack)) { continue; } if (!mixing) - histos.fill(HIST("Ft0aMft/SE/Trig_hist"), fSampleIndex, vz, triggerTrack.pt()); + histos.fill(HIST("Ft0aMft/SE/Trig_hist"), fSampleIndex, vz, bestMftTrack.pt()); - auto trigphi = triggerTrack.phi(); + auto trigphi = bestMftTrack.phi(); o2::math_utils::bringTo02Pi(trigphi); for (std::size_t iCh = 0; iCh < ft0.channelA().size(); iCh++) { @@ -640,12 +476,12 @@ struct LongrangeCorrelation { } float deltaPhi = RecoDecay::constrainAngle(trigphi - phi, -PIHalf); - float deltaEta = triggerTrack.eta() - eta; + float deltaEta = bestMftTrack.eta() - eta; if (mixing) histos.fill(HIST("Ft0aMft/ME/deltaEta_deltaPhi"), deltaPhi, deltaEta); else histos.fill(HIST("Ft0aMft/SE/deltaEta_deltaPhi"), deltaPhi, deltaEta); - target->getPairHist()->Fill(step, fSampleIndex, vz, triggerTrack.pt(), triggerTrack.pt(), deltaPhi, deltaEta); + target->getPairHist()->Fill(step, fSampleIndex, vz, bestMftTrack.pt(), bestMftTrack.pt(), deltaPhi, deltaEta); } // associated ft0 tracks } // trigger tracks } // fillCorrFt0aMft @@ -702,7 +538,7 @@ struct LongrangeCorrelation { } } // same event - void processMftGlobalSE(CollTable::iterator const& col, MftTrkTable const& mfttracks, TrksTable const& tracks) + void processMftGlobalSE(CollTable::iterator const& col, MftBestTrkTable const& mfttracks, MftTrkTable const&, TrksTable const& tracks) { if (!isEventSelected(col)) { return; @@ -714,37 +550,7 @@ struct LongrangeCorrelation { fillCorrMftGlobal(sameMftGlobal, tracks, mfttracks, false, col.posZ()); } // same event - void processFv0GlobalSE(CollTable::iterator const& col, aod::FV0As const&, TrksTable const& tracks) - { - if (!isEventSelected(col)) { - return; - } - if (col.has_foundFV0()) { - fillYield(tracks); - const auto& fv0 = col.foundFV0(); - if (tracks.size() < cfgMinMult || tracks.size() >= cfgMaxMult) { - return; - } - fillCorrFv0Global(sameFv0Global, tracks, fv0, false, col.posZ()); - } - } // same event - - void processFv0MftSE(CollTable::iterator const& col, aod::FV0As const&, TrksTable const& tracks, MftTrkTable const& mfttracks) - { - if (!isEventSelected(col)) { - return; - } - if (col.has_foundFV0()) { - fillYield(mfttracks); - const auto& fv0 = col.foundFV0(); - if (tracks.size() < cfgMinMult || tracks.size() >= cfgMaxMult) { - return; - } - fillCorrFv0Mft(sameFv0Mft, tracks, mfttracks, fv0, false, col.posZ()); - } - } // same event - - void processFt0aMftSE(CollTable::iterator const& col, aod::FT0s const&, TrksTable const& tracks, MftTrkTable const& mfttracks) + void processFt0aMftSE(CollTable::iterator const& col, aod::FT0s const&, TrksTable const& tracks, MftBestTrkTable const& mfttracks, MftTrkTable const&) { if (!isEventSelected(col)) { return; @@ -815,7 +621,7 @@ struct LongrangeCorrelation { } } // mixed event - void processMftGlobalME(CollTable const& col, MftTrkTable const& mfttracks, TrksTable const& tracks) + void processMftGlobalME(CollTable const& col, MftBestTrkTable const& mfttracks, MftTrkTable const&, TrksTable const& tracks) { auto getTracksSize = [&tracks, this](CollTable::iterator const& collision) { auto associatedTracks = tracks.sliceByCached(o2::aod::track::collisionId, collision.globalIndex(), this->cache); @@ -825,7 +631,7 @@ struct LongrangeCorrelation { using MixedBinning = FlexibleBinningPolicy, aod::collision::PosZ, decltype(getTracksSize)>; MixedBinning binningOnVtxAndMult{{getTracksSize}, {axisVtxZME, axisMultME}, true}; auto tracksTuple = std::make_tuple(tracks, mfttracks); - Pair pairs{binningOnVtxAndMult, mixingParameter, -1, col, tracksTuple, &cache}; + Pair pairs{binningOnVtxAndMult, mixingParameter, -1, col, tracksTuple, &cache}; for (auto const& [col1, tracks1, col2, tracks2] : pairs) { if (!isEventSelected(col1) || !isEventSelected(col2)) { continue; @@ -837,64 +643,7 @@ struct LongrangeCorrelation { } } // mixed event - void processFv0GlobalME(CollTable const& col, aod::FV0As const&, TrksTable const& tracks) - { - auto getTracksSize = [&tracks, this](CollTable::iterator const& collision) { - auto associatedTracks = tracks.sliceByCached(o2::aod::track::collisionId, collision.globalIndex(), this->cache); - return associatedTracks.size(); - }; - - using MixedBinning = FlexibleBinningPolicy, aod::collision::PosZ, decltype(getTracksSize)>; - MixedBinning binningOnVtxAndMult{{getTracksSize}, {axisVtxZME, axisMultME}, true}; - for (auto const& [col1, col2] : soa::selfCombinations(binningOnVtxAndMult, mixingParameter, -1, col, col)) { - if (!isEventSelected(col1) || !isEventSelected(col2)) { - continue; - } - if (col1.globalIndex() == col2.globalIndex()) { - continue; - } - if (col1.has_foundFV0() && col2.has_foundFV0()) { - auto slicedTriggerTracks = tracks.sliceBy(perColGlobal, col1.globalIndex()); - fillYield(slicedTriggerTracks); - const auto& fv0 = col2.foundFV0(); - if (slicedTriggerTracks.size() < cfgMinMult || slicedTriggerTracks.size() >= cfgMaxMult) { - continue; - } - fillCorrFv0Global(mixedFv0Global, slicedTriggerTracks, fv0, true, col1.posZ()); - } - } - } // mixed event - - void processFv0MftME(CollTable const& col, aod::FV0As const&, TrksTable const& tracks, MftTrkTable const& mfttracks) - { - auto getTracksSize = [&tracks, this](CollTable::iterator const& collision) { - auto associatedTracks = tracks.sliceByCached(o2::aod::track::collisionId, collision.globalIndex(), this->cache); - return associatedTracks.size(); - }; - - using MixedBinning = FlexibleBinningPolicy, aod::collision::PosZ, decltype(getTracksSize)>; - MixedBinning binningOnVtxAndMult{{getTracksSize}, {axisVtxZME, axisMultME}, true}; - for (auto const& [col1, col2] : soa::selfCombinations(binningOnVtxAndMult, mixingParameter, -1, col, col)) { - if (!isEventSelected(col1) || !isEventSelected(col2)) { - continue; - } - if (col1.globalIndex() == col2.globalIndex()) { - continue; - } - if (col1.has_foundFV0() && col2.has_foundFV0()) { - auto slicedGlobalTracks = tracks.sliceBy(perColGlobal, col1.globalIndex()); - auto slicedTriggerMftTracks = mfttracks.sliceBy(perColMft, col1.globalIndex()); - fillYield(slicedTriggerMftTracks); - const auto& fv0 = col2.foundFV0(); - if (slicedGlobalTracks.size() < cfgMinMult || slicedGlobalTracks.size() >= cfgMaxMult) { - continue; - } - fillCorrFv0Mft(mixedFv0Mft, slicedGlobalTracks, slicedTriggerMftTracks, fv0, true, col1.posZ()); - } - } - } // mixed event - - void processFt0aMftME(CollTable const& col, aod::FT0s const&, TrksTable const& tracks, MftTrkTable const& mfttracks) + void processFt0aMftME(CollTable const& col, aod::FT0s const&, TrksTable const& tracks, MftBestTrkTable const& mfttracks, MftTrkTable const&) { auto getTracksSize = [&tracks, this](CollTable::iterator const& collision) { auto associatedTracks = tracks.sliceByCached(o2::aod::track::collisionId, collision.globalIndex(), this->cache); @@ -912,7 +661,7 @@ struct LongrangeCorrelation { } if (col1.has_foundFT0() && col2.has_foundFT0()) { auto slicedGlobalTracks = tracks.sliceBy(perColGlobal, col1.globalIndex()); - auto slicedTriggerMftTracks = mfttracks.sliceBy(perColMft, col1.globalIndex()); + auto slicedTriggerMftTracks = mfttracks.sliceBy(perColBestMft, col1.globalIndex()); fillYield(slicedTriggerMftTracks); const auto& ft0 = col2.foundFT0(); if (slicedGlobalTracks.size() < cfgMinMult || slicedGlobalTracks.size() >= cfgMaxMult) { @@ -930,10 +679,6 @@ struct LongrangeCorrelation { PROCESS_SWITCH(LongrangeCorrelation, processFt0cGlobalME, "mixed event FT0c vs global", false); PROCESS_SWITCH(LongrangeCorrelation, processMftGlobalSE, "same event MFT vs global", false); PROCESS_SWITCH(LongrangeCorrelation, processMftGlobalME, "mixed event MFT vs global", false); - PROCESS_SWITCH(LongrangeCorrelation, processFv0GlobalSE, "same event FV0 vs global", false); - PROCESS_SWITCH(LongrangeCorrelation, processFv0GlobalME, "mixed event FV0 vs global", false); - PROCESS_SWITCH(LongrangeCorrelation, processFv0MftSE, "same event FV0 vs MFT", false); - PROCESS_SWITCH(LongrangeCorrelation, processFv0MftME, "mixed event FV0 vs MFT", false); PROCESS_SWITCH(LongrangeCorrelation, processFt0aMftSE, "same event FT0a vs MFT", false); PROCESS_SWITCH(LongrangeCorrelation, processFt0aMftME, "mixed event FT0a vs MFT", false); }; From c5ade60152c62459c7fa9a5c55a38284f4c93e08 Mon Sep 17 00:00:00 2001 From: abmodak <67369858+abmodak@users.noreply.github.com> Date: Fri, 19 Sep 2025 19:23:25 +0200 Subject: [PATCH 2/4] Add FT0A vs FT0C correlation --- .../Tasks/longrangeCorrelation.cxx | 118 +++++++++++++++++- 1 file changed, 116 insertions(+), 2 deletions(-) diff --git a/PWGCF/TwoParticleCorrelations/Tasks/longrangeCorrelation.cxx b/PWGCF/TwoParticleCorrelations/Tasks/longrangeCorrelation.cxx index dcdc38ffa90..3636e6357f6 100644 --- a/PWGCF/TwoParticleCorrelations/Tasks/longrangeCorrelation.cxx +++ b/PWGCF/TwoParticleCorrelations/Tasks/longrangeCorrelation.cxx @@ -84,10 +84,11 @@ enum KindOfCorrType { kFT0AGLOBAL, kFT0CGLOBAL, kMFTGLOBAL, - kFT0AMFT + kFT0AMFT, + kFT0AFT0C }; -static constexpr std::string_view kCorrType[] = {"Ft0aGlobal/", "Ft0cGlobal/", "MftGlobal/", "Ft0aMft/"}; +static constexpr std::string_view kCorrType[] = {"Ft0aGlobal/", "Ft0cGlobal/", "MftGlobal/", "Ft0aMft/", "Ft0aFt0c"}; static constexpr std::string_view kEvntType[] = {"SE/", "ME/"}; AxisSpec axisEvent{10, 0.5, 9.5, "#Event", "EventAxis"}; @@ -156,6 +157,8 @@ struct LongrangeCorrelation { OutputObj mixedMftGlobal{Form("mixedEventMftGlobal_%i_%i", static_cast(cfgMinMult), static_cast(cfgMaxMult))}; OutputObj sameFt0aMft{Form("sameEventFt0aMft_%i_%i", static_cast(cfgMinMult), static_cast(cfgMaxMult))}; OutputObj mixedFt0aMft{Form("mixedEventFt0aMft_%i_%i", static_cast(cfgMinMult), static_cast(cfgMaxMult))}; + OutputObj sameFt0aFt0c{Form("sameEventFt0aFt0c_%i_%i", static_cast(cfgMinMult), static_cast(cfgMaxMult))}; + OutputObj mixedFt0aFt0c{Form("mixedEventFt0aFt0c_%i_%i", static_cast(cfgMinMult), static_cast(cfgMaxMult))}; template void addHistos() @@ -238,6 +241,13 @@ struct LongrangeCorrelation { sameFt0aMft.setObject(new CorrelationContainer(Form("sameEventFt0aMft_%i_%i", static_cast(cfgMinMult), static_cast(cfgMaxMult)), Form("sameEventFt0aMft_%i_%i", static_cast(cfgMinMult), static_cast(cfgMaxMult)), corrAxis, effAxis, userAxis)); mixedFt0aMft.setObject(new CorrelationContainer(Form("mixedEventFt0aMft_%i_%i", static_cast(cfgMinMult), static_cast(cfgMaxMult)), Form("mixedEventFt0aMft_%i_%i", static_cast(cfgMinMult), static_cast(cfgMaxMult)), corrAxis, effAxis, userAxis)); } + + if (doprocessFt0aFt0cSE || doprocessFt0aFt0cME) { + addHistos(); + addHistos(); + sameFt0aFt0c.setObject(new CorrelationContainer(Form("sameEventFt0aFt0c_%i_%i", static_cast(cfgMinMult), static_cast(cfgMaxMult)), Form("sameEventFt0aFt0c_%i_%i", static_cast(cfgMinMult), static_cast(cfgMaxMult)), corrAxis, effAxis, userAxis)); + mixedFt0aFt0c.setObject(new CorrelationContainer(Form("mixedEventFt0aFt0c_%i_%i", static_cast(cfgMinMult), static_cast(cfgMaxMult)), Form("mixedEventFt0aFt0c_%i_%i", static_cast(cfgMinMult), static_cast(cfgMaxMult)), corrAxis, effAxis, userAxis)); + } } Filter fTrackSelectionITS = ncheckbit(aod::track::v001::detectorMap, (uint8_t)o2::aod::track::ITS) && @@ -486,6 +496,64 @@ struct LongrangeCorrelation { } // trigger tracks } // fillCorrFt0aMft + template + void fillCorrFt0aFt0c(TTarget target, TTriggers const& triggers, TFT0As const& ft0a, TFT0Cs const& ft0c, bool mixing, float vz) + { + int fSampleIndex = gRandom->Uniform(0, cfgSampleSize); + if (!mixing) + histos.fill(HIST("Ft0aFt0c/SE/hMult_used"), triggers.size()); + + for (std::size_t iChA = 0; iChA < ft0a.channelA().size(); iChA++) { + if (!mixing) + histos.fill(HIST("Ft0aFt0c/SE/Trig_hist"), fSampleIndex, vz, -1); + + auto chanelidA = ft0a.channelA()[iChA]; + auto phiA = getPhiFT0(chanelidA, 0); + auto etaA = getEtaFT0(chanelidA, 0); + + if (mixing) { + histos.fill(HIST("Ft0aFt0c/ME/Trig_eta"), etaA); + histos.fill(HIST("Ft0aFt0c/ME/Trig_phi"), phiA); + histos.fill(HIST("Ft0aFt0c/ME/Trig_etavsphi"), phiA, etaA); + } else { + histos.fill(HIST("Ft0aFt0c/SE/Trig_eta"), etaA); + histos.fill(HIST("Ft0aFt0c/SE/Trig_phi"), phiA); + histos.fill(HIST("Ft0aFt0c/SE/Trig_etavsphi"), phiA, etaA); + } + + for (std::size_t iChC = 0; iChC < ft0c.channelC().size(); iChC++) { + + auto chanelidC = ft0c.channelC()[iChC] + 96; + float ampl = ft0c.amplitudeC()[iChC]; + auto phiC = getPhiFT0(chanelidC, 1); + auto etaC = getEtaFT0(chanelidC, 1); + + if (mixing) + histos.fill(HIST("Ft0aFt0c/ME/Assoc_amp"), chanelidC, ampl); + else + histos.fill(HIST("Ft0aFt0c/SE/Assoc_amp"), chanelidC, ampl); + + if (mixing) { + histos.fill(HIST("Ft0aFt0c/ME/Assoc_eta"), etaC); + histos.fill(HIST("Ft0aFt0c/ME/Assoc_phi"), phiC); + histos.fill(HIST("Ft0aFt0c/ME/Assoc_etavsphi"), phiC, etaC); + } else { + histos.fill(HIST("Ft0aFt0c/SE/Assoc_eta"), etaC); + histos.fill(HIST("Ft0aFt0c/SE/Assoc_phi"), phiC); + histos.fill(HIST("Ft0aFt0c/SE/Assoc_etavsphi"), phiC, etaC); + } + + float deltaPhi = RecoDecay::constrainAngle(phiA - phiC, -PIHalf); + float deltaEta = etaA - etaC; + if (mixing) + histos.fill(HIST("Ft0aFt0c/ME/deltaEta_deltaPhi"), deltaPhi, deltaEta); + else + histos.fill(HIST("Ft0aFt0c/SE/deltaEta_deltaPhi"), deltaPhi, deltaEta); + target->getPairHist()->Fill(step, fSampleIndex, vz, -1, -1, deltaPhi, deltaEta); + } // associated ft0 tracks + } // trigger tracks + } // fillCorrFt0aFt0c + void processEventStat(CollTable::iterator const& col) { histos.fill(HIST("QA/EventHist"), 1); @@ -565,6 +633,21 @@ struct LongrangeCorrelation { } } // same event + void processFt0aFt0cSE(CollTable::iterator const& col, aod::FT0s const&, TrksTable const& tracks) + { + if (!isEventSelected(col)) { + return; + } + if (col.has_foundFT0()) { + histos.fill("Ft0aFt0c/SE/hMult", tracks.size()); + const auto& ft0 = col.foundFT0(); + if (tracks.size() < cfgMinMult || tracks.size() >= cfgMaxMult) { + return; + } + fillCorrFt0aFt0c(sameFt0aFt0c, tracks, ft0, ft0, false, col.posZ()); + } + } // same event + void processFt0aGlobalME(CollTable const& col, aod::FT0s const&, TrksTable const& tracks) { auto getTracksSize = [&tracks, this](CollTable::iterator const& collision) { @@ -672,6 +755,35 @@ struct LongrangeCorrelation { } } // mixed event + void processFt0aFt0cME(CollTable const& col, aod::FT0s const&, TrksTable const& tracks) + { + auto getTracksSize = [&tracks, this](CollTable::iterator const& collision) { + auto associatedTracks = tracks.sliceByCached(o2::aod::track::collisionId, collision.globalIndex(), this->cache); + return associatedTracks.size(); + }; + + using MixedBinning = FlexibleBinningPolicy, aod::collision::PosZ, decltype(getTracksSize)>; + MixedBinning binningOnVtxAndMult{{getTracksSize}, {axisVtxZME, axisMultME}, true}; + for (auto const& [col1, col2] : soa::selfCombinations(binningOnVtxAndMult, mixingParameter, -1, col, col)) { + if (!isEventSelected(col1) || !isEventSelected(col2)) { + continue; + } + if (col1.globalIndex() == col2.globalIndex()) { + continue; + } + if (col1.has_foundFT0() && col2.has_foundFT0()) { + auto slicedTriggerTracks = tracks.sliceBy(perColGlobal, col1.globalIndex()); + histos.fill("Ft0aFt0c/ME/hMult", slicedTriggerTracks.size()); + const auto& ft0a = col1.foundFT0(); + const auto& ft0c = col2.foundFT0(); + if (slicedTriggerTracks.size() < cfgMinMult || slicedTriggerTracks.size() >= cfgMaxMult) { + continue; + } + fillCorrFt0aFt0c(mixedFt0aFt0c, slicedTriggerTracks, ft0a, ft0c, true, col1.posZ()); + } + } + } // mixed event + PROCESS_SWITCH(LongrangeCorrelation, processEventStat, "event stat", false); PROCESS_SWITCH(LongrangeCorrelation, processFt0aGlobalSE, "same event FT0a vs global", false); PROCESS_SWITCH(LongrangeCorrelation, processFt0aGlobalME, "mixed event FT0a vs global", false); @@ -681,6 +793,8 @@ struct LongrangeCorrelation { PROCESS_SWITCH(LongrangeCorrelation, processMftGlobalME, "mixed event MFT vs global", false); PROCESS_SWITCH(LongrangeCorrelation, processFt0aMftSE, "same event FT0a vs MFT", false); PROCESS_SWITCH(LongrangeCorrelation, processFt0aMftME, "mixed event FT0a vs MFT", false); + PROCESS_SWITCH(LongrangeCorrelation, processFt0aFt0cSE, "same event FT0a vs FT0c", false); + PROCESS_SWITCH(LongrangeCorrelation, processFt0aFt0cME, "mixed event FT0a vs FT0c", false); }; WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) From 943ab76b5fe8ea03f69ddf5562e9bf6959fc2778 Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Fri, 19 Sep 2025 17:27:59 +0000 Subject: [PATCH 3/4] Please consider the following formatting changes --- .../Tasks/longrangeCorrelation.cxx | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/PWGCF/TwoParticleCorrelations/Tasks/longrangeCorrelation.cxx b/PWGCF/TwoParticleCorrelations/Tasks/longrangeCorrelation.cxx index 3636e6357f6..0f57a2d73f6 100644 --- a/PWGCF/TwoParticleCorrelations/Tasks/longrangeCorrelation.cxx +++ b/PWGCF/TwoParticleCorrelations/Tasks/longrangeCorrelation.cxx @@ -188,7 +188,7 @@ struct LongrangeCorrelation { offsetFT0 = ccdb->getForTimeStamp>("FT0/Calib/Align", cfgCcdbParam.noLaterThan.value); LOGF(info, "Offset for FT0A: x = %.3f y = %.3f z = %.3f\n", (*offsetFT0)[0].getX(), (*offsetFT0)[0].getY(), (*offsetFT0)[0].getZ()); LOGF(info, "Offset for FT0C: x = %.3f y = %.3f z = %.3f\n", (*offsetFT0)[1].getX(), (*offsetFT0)[1].getY(), (*offsetFT0)[1].getZ()); - + std::vector corrAxis = {{axisSample, "Sample"}, {axisVtxZ, "z-vtx (cm)"}, {axisPtTrigger, "p_{T} (GeV/c)"}, @@ -234,7 +234,7 @@ struct LongrangeCorrelation { sameMftGlobal.setObject(new CorrelationContainer(Form("sameEventMftGlobal_%i_%i", static_cast(cfgMinMult), static_cast(cfgMaxMult)), Form("sameEventMftGlobal_%i_%i", static_cast(cfgMinMult), static_cast(cfgMaxMult)), corrAxis, effAxis, userAxis)); mixedMftGlobal.setObject(new CorrelationContainer(Form("mixedEventMftGlobal_%i_%i", static_cast(cfgMinMult), static_cast(cfgMaxMult)), Form("mixedEventMftGlobal_%i_%i", static_cast(cfgMinMult), static_cast(cfgMaxMult)), corrAxis, effAxis, userAxis)); } - + if (doprocessFt0aMftSE || doprocessFt0aMftME) { addHistos(); addHistos(); @@ -502,11 +502,11 @@ struct LongrangeCorrelation { int fSampleIndex = gRandom->Uniform(0, cfgSampleSize); if (!mixing) histos.fill(HIST("Ft0aFt0c/SE/hMult_used"), triggers.size()); - + for (std::size_t iChA = 0; iChA < ft0a.channelA().size(); iChA++) { if (!mixing) histos.fill(HIST("Ft0aFt0c/SE/Trig_hist"), fSampleIndex, vz, -1); - + auto chanelidA = ft0a.channelA()[iChA]; auto phiA = getPhiFT0(chanelidA, 0); auto etaA = getEtaFT0(chanelidA, 0); @@ -522,12 +522,12 @@ struct LongrangeCorrelation { } for (std::size_t iChC = 0; iChC < ft0c.channelC().size(); iChC++) { - + auto chanelidC = ft0c.channelC()[iChC] + 96; float ampl = ft0c.amplitudeC()[iChC]; auto phiC = getPhiFT0(chanelidC, 1); auto etaC = getEtaFT0(chanelidC, 1); - + if (mixing) histos.fill(HIST("Ft0aFt0c/ME/Assoc_amp"), chanelidC, ampl); else @@ -542,7 +542,7 @@ struct LongrangeCorrelation { histos.fill(HIST("Ft0aFt0c/SE/Assoc_phi"), phiC); histos.fill(HIST("Ft0aFt0c/SE/Assoc_etavsphi"), phiC, etaC); } - + float deltaPhi = RecoDecay::constrainAngle(phiA - phiC, -PIHalf); float deltaEta = etaA - etaC; if (mixing) From 069b2a3ec572939baeab8017dfc26db4464f2a15 Mon Sep 17 00:00:00 2001 From: abmodak <67369858+abmodak@users.noreply.github.com> Date: Fri, 19 Sep 2025 20:53:55 +0200 Subject: [PATCH 4/4] Fix o2 compilation error --- .../Tasks/longrangeCorrelation.cxx | 47 +++++++++---------- 1 file changed, 21 insertions(+), 26 deletions(-) diff --git a/PWGCF/TwoParticleCorrelations/Tasks/longrangeCorrelation.cxx b/PWGCF/TwoParticleCorrelations/Tasks/longrangeCorrelation.cxx index 0f57a2d73f6..6d6b811b66b 100644 --- a/PWGCF/TwoParticleCorrelations/Tasks/longrangeCorrelation.cxx +++ b/PWGCF/TwoParticleCorrelations/Tasks/longrangeCorrelation.cxx @@ -142,11 +142,8 @@ struct LongrangeCorrelation { using CollTable = soa::Join; using TrksTable = soa::Filtered>; using MftTrkTable = soa::Filtered; - using MftTrkTable2 = soa::SmallGroups; - using MftBestTrkTable = soa::Filtered; Preslice perColGlobal = aod::track::collisionId; Preslice perColMft = aod::fwdtrack::collisionId; - PresliceUnsorted perColBestMft = aod::fwdtrack::bestCollisionId; o2::ft0::Geometry ft0Det; OutputObj sameFt0aGlobal{Form("sameEventFt0aGlobal_%i_%i", static_cast(cfgMinMult), static_cast(cfgMaxMult))}; @@ -420,28 +417,27 @@ struct LongrangeCorrelation { histos.fill(HIST("MftGlobal/SE/Trig_hist"), fSampleIndex, vz, triggerTrack.pt()); for (auto const& assoTrack : mft) { - auto bestMftTrack = assoTrack.template mfttrack_as(); - if (!isMftTrackSelected(bestMftTrack)) { + if (!isMftTrackSelected(assoTrack)) { continue; } - auto phi = bestMftTrack.phi(); + auto phi = assoTrack.phi(); o2::math_utils::bringTo02Pi(phi); if (mixing) { - histos.fill(HIST("MftGlobal/ME/Assoc_eta"), bestMftTrack.eta()); + histos.fill(HIST("MftGlobal/ME/Assoc_eta"), assoTrack.eta()); histos.fill(HIST("MftGlobal/ME/Assoc_phi"), phi); - histos.fill(HIST("MftGlobal/ME/Assoc_etavsphi"), phi, bestMftTrack.eta()); + histos.fill(HIST("MftGlobal/ME/Assoc_etavsphi"), phi, assoTrack.eta()); } else { - histos.fill(HIST("MftGlobal/SE/Assoc_eta"), bestMftTrack.eta()); + histos.fill(HIST("MftGlobal/SE/Assoc_eta"), assoTrack.eta()); histos.fill(HIST("MftGlobal/SE/Assoc_phi"), phi); - histos.fill(HIST("MftGlobal/SE/Assoc_etavsphi"), phi, bestMftTrack.eta()); + histos.fill(HIST("MftGlobal/SE/Assoc_etavsphi"), phi, assoTrack.eta()); } float deltaPhi = RecoDecay::constrainAngle(triggerTrack.phi() - phi, -PIHalf); - float deltaEta = triggerTrack.eta() - bestMftTrack.eta(); + float deltaEta = triggerTrack.eta() - assoTrack.eta(); if (mixing) histos.fill(HIST("MftGlobal/ME/deltaEta_deltaPhi"), deltaPhi, deltaEta); else histos.fill(HIST("MftGlobal/SE/deltaEta_deltaPhi"), deltaPhi, deltaEta); - target->getPairHist()->Fill(step, fSampleIndex, vz, triggerTrack.pt(), bestMftTrack.pt(), deltaPhi, deltaEta); + target->getPairHist()->Fill(step, fSampleIndex, vz, triggerTrack.pt(), assoTrack.pt(), deltaPhi, deltaEta); } // associated mft tracks } // trigger tracks } // fillCorrMftGlobal @@ -453,14 +449,13 @@ struct LongrangeCorrelation { if (!mixing) histos.fill(HIST("Ft0aMft/SE/hMult_used"), tracks.size()); for (auto const& triggerTrack : triggers) { - auto bestMftTrack = triggerTrack.template mfttrack_as(); - if (!isMftTrackSelected(bestMftTrack)) { + if (!isMftTrackSelected(triggerTrack)) { continue; } if (!mixing) - histos.fill(HIST("Ft0aMft/SE/Trig_hist"), fSampleIndex, vz, bestMftTrack.pt()); + histos.fill(HIST("Ft0aMft/SE/Trig_hist"), fSampleIndex, vz, triggerTrack.pt()); - auto trigphi = bestMftTrack.phi(); + auto trigphi = triggerTrack.phi(); o2::math_utils::bringTo02Pi(trigphi); for (std::size_t iCh = 0; iCh < ft0.channelA().size(); iCh++) { @@ -486,12 +481,12 @@ struct LongrangeCorrelation { } float deltaPhi = RecoDecay::constrainAngle(trigphi - phi, -PIHalf); - float deltaEta = bestMftTrack.eta() - eta; + float deltaEta = triggerTrack.eta() - eta; if (mixing) histos.fill(HIST("Ft0aMft/ME/deltaEta_deltaPhi"), deltaPhi, deltaEta); else histos.fill(HIST("Ft0aMft/SE/deltaEta_deltaPhi"), deltaPhi, deltaEta); - target->getPairHist()->Fill(step, fSampleIndex, vz, bestMftTrack.pt(), bestMftTrack.pt(), deltaPhi, deltaEta); + target->getPairHist()->Fill(step, fSampleIndex, vz, triggerTrack.pt(), triggerTrack.pt(), deltaPhi, deltaEta); } // associated ft0 tracks } // trigger tracks } // fillCorrFt0aMft @@ -606,7 +601,7 @@ struct LongrangeCorrelation { } } // same event - void processMftGlobalSE(CollTable::iterator const& col, MftBestTrkTable const& mfttracks, MftTrkTable const&, TrksTable const& tracks) + void processMftGlobalSE(CollTable::iterator const& col, MftTrkTable const& mfttracks, TrksTable const& tracks) { if (!isEventSelected(col)) { return; @@ -618,7 +613,7 @@ struct LongrangeCorrelation { fillCorrMftGlobal(sameMftGlobal, tracks, mfttracks, false, col.posZ()); } // same event - void processFt0aMftSE(CollTable::iterator const& col, aod::FT0s const&, TrksTable const& tracks, MftBestTrkTable const& mfttracks, MftTrkTable const&) + void processFt0aMftSE(CollTable::iterator const& col, aod::FT0s const&, TrksTable const& tracks, MftTrkTable const& mfttracks) { if (!isEventSelected(col)) { return; @@ -639,7 +634,7 @@ struct LongrangeCorrelation { return; } if (col.has_foundFT0()) { - histos.fill("Ft0aFt0c/SE/hMult", tracks.size()); + histos.fill(HIST("Ft0aFt0c/SE/hMult"), tracks.size()); const auto& ft0 = col.foundFT0(); if (tracks.size() < cfgMinMult || tracks.size() >= cfgMaxMult) { return; @@ -704,7 +699,7 @@ struct LongrangeCorrelation { } } // mixed event - void processMftGlobalME(CollTable const& col, MftBestTrkTable const& mfttracks, MftTrkTable const&, TrksTable const& tracks) + void processMftGlobalME(CollTable const& col, MftTrkTable const& mfttracks, TrksTable const& tracks) { auto getTracksSize = [&tracks, this](CollTable::iterator const& collision) { auto associatedTracks = tracks.sliceByCached(o2::aod::track::collisionId, collision.globalIndex(), this->cache); @@ -714,7 +709,7 @@ struct LongrangeCorrelation { using MixedBinning = FlexibleBinningPolicy, aod::collision::PosZ, decltype(getTracksSize)>; MixedBinning binningOnVtxAndMult{{getTracksSize}, {axisVtxZME, axisMultME}, true}; auto tracksTuple = std::make_tuple(tracks, mfttracks); - Pair pairs{binningOnVtxAndMult, mixingParameter, -1, col, tracksTuple, &cache}; + Pair pairs{binningOnVtxAndMult, mixingParameter, -1, col, tracksTuple, &cache}; for (auto const& [col1, tracks1, col2, tracks2] : pairs) { if (!isEventSelected(col1) || !isEventSelected(col2)) { continue; @@ -726,7 +721,7 @@ struct LongrangeCorrelation { } } // mixed event - void processFt0aMftME(CollTable const& col, aod::FT0s const&, TrksTable const& tracks, MftBestTrkTable const& mfttracks, MftTrkTable const&) + void processFt0aMftME(CollTable const& col, aod::FT0s const&, TrksTable const& tracks, MftTrkTable const& mfttracks) { auto getTracksSize = [&tracks, this](CollTable::iterator const& collision) { auto associatedTracks = tracks.sliceByCached(o2::aod::track::collisionId, collision.globalIndex(), this->cache); @@ -744,7 +739,7 @@ struct LongrangeCorrelation { } if (col1.has_foundFT0() && col2.has_foundFT0()) { auto slicedGlobalTracks = tracks.sliceBy(perColGlobal, col1.globalIndex()); - auto slicedTriggerMftTracks = mfttracks.sliceBy(perColBestMft, col1.globalIndex()); + auto slicedTriggerMftTracks = mfttracks.sliceBy(perColMft, col1.globalIndex()); fillYield(slicedTriggerMftTracks); const auto& ft0 = col2.foundFT0(); if (slicedGlobalTracks.size() < cfgMinMult || slicedGlobalTracks.size() >= cfgMaxMult) { @@ -773,7 +768,7 @@ struct LongrangeCorrelation { } if (col1.has_foundFT0() && col2.has_foundFT0()) { auto slicedTriggerTracks = tracks.sliceBy(perColGlobal, col1.globalIndex()); - histos.fill("Ft0aFt0c/ME/hMult", slicedTriggerTracks.size()); + histos.fill(HIST("Ft0aFt0c/ME/hMult"), slicedTriggerTracks.size()); const auto& ft0a = col1.foundFT0(); const auto& ft0c = col2.foundFT0(); if (slicedTriggerTracks.size() < cfgMinMult || slicedTriggerTracks.size() >= cfgMaxMult) {