From bc7ed5581c1cf391bd3945d75a5b1ca67b12ff2a Mon Sep 17 00:00:00 2001 From: abmodak <67369858+abmodak@users.noreply.github.com> Date: Tue, 28 Apr 2026 20:39:05 +0200 Subject: [PATCH 1/2] Add configurable track dcaZ condition and condition to reject flange events --- .../TableProducer/longrangeMaker.cxx | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/PWGCF/TwoParticleCorrelations/TableProducer/longrangeMaker.cxx b/PWGCF/TwoParticleCorrelations/TableProducer/longrangeMaker.cxx index 2ce35153861..eccf6d8fb4d 100644 --- a/PWGCF/TwoParticleCorrelations/TableProducer/longrangeMaker.cxx +++ b/PWGCF/TwoParticleCorrelations/TableProducer/longrangeMaker.cxx @@ -17,7 +17,6 @@ #include "PWGCF/Core/CorrelationContainer.h" #include "PWGCF/TwoParticleCorrelations/DataModel/LongRangeDerived.h" -// #include "PWGLF/DataModel/LFStrangenessTables.h" #include "PWGMM/Mult/DataModel/bestCollisionTable.h" #include "PWGUD/Core/SGCutParHolder.h" @@ -62,6 +61,7 @@ #include #include +#include #include #include #include @@ -120,6 +120,7 @@ struct LongrangeMaker { Configurable cfgOccuCut{"cfgOccuCut", 1000, "Occupancy selection"}; Configurable cfgVtxCut{"cfgVtxCut", 10.0f, "vertex Z selection"}; Configurable isApplyBestCollIndex{"isApplyBestCollIndex", true, "bestCollIndex"}; + Configurable isrejectFlangeEvent{"isrejectFlangeEvent", false, "At least one channel with -350 TDC < time < -450 TDC"}; } cfgevtsel; struct : ConfigurableGroup { @@ -130,6 +131,7 @@ struct LongrangeMaker { Configurable minNCrossedRowsTPC{"minNCrossedRowsTPC", 70.f, "cut on minimum number of TPC crossed rows"}; Configurable minTPCNClsFound{"minTPCNClsFound", 50.f, "cut on minimum value of TPC found clusters"}; Configurable maxDcaZ{"maxDcaZ", 2.f, "cut on maximum abs value of DCA z"}; + Configurable maxDcaXY{"maxDcaXY", 1.f, "cut on maximum abs value of DCA xy"}; Configurable maxChi2PerClusterTPC{"maxChi2PerClusterTPC", 4.f, "cut on maximum value of TPC chi2 per cluster"}; } cfgtrksel; @@ -151,7 +153,7 @@ struct LongrangeMaker { Configurable cfigFt0cEtaMin{"cfigFt0cEtaMin", -3.3f, "Minimum FT0C eta cut"}; Configurable cfigVerbosity{"cfigVerbosity", 0, "print statement"}; Configurable useGainCalib{"useGainCalib", true, "use gain calibration"}; - Configurable ConfGainPath{"ConfGainPath", "Analysis/EventPlane/GainEq/FT0", "Path to gain calibration"}; + Configurable confGainPath{"confGainPath", "Analysis/EventPlane/GainEq/FT0", "Path to gain calibration"}; } cfgfittrksel; struct : ConfigurableGroup { @@ -241,6 +243,7 @@ struct LongrangeMaker { x->SetBinLabel(10, "ApplyNoCollInRofStandard"); x->SetBinLabel(11, "ApplyNoHighMultCollInPrevRof"); x->SetBinLabel(12, "ApplyOccupancySelection"); + x->SetBinLabel(13, "reject flange event"); histos.add("hSelectionResult", "hSelectionResult", kTH1I, {{5, -0.5, 4.5}}); AxisSpec axisVtx = {vtxHistBin, "Vertex", "VtxAxis"}; @@ -270,6 +273,7 @@ struct LongrangeMaker { myTrackFilter.SetMinNCrossedRowsTPC(cfgtrksel.minNCrossedRowsTPC); myTrackFilter.SetMinNClustersTPC(cfgtrksel.minTPCNClsFound); myTrackFilter.SetMaxDcaZ(cfgtrksel.maxDcaZ); + myTrackFilter.SetMaxDcaXYPtDep([scale = cfgtrksel.maxDcaXY.value](float pt) { return scale * (0.0105f + 0.0350f / std::pow(pt, 1.1f)); }); myTrackFilter.SetMaxChi2PerClusterTPC(cfgtrksel.maxChi2PerClusterTPC); myTrackFilter.print(); @@ -309,7 +313,7 @@ struct LongrangeMaker { Filter fTracksEta = nabs(aod::track::eta) < cfgtrksel.cfgEtaCut; Filter fTracksPt = (aod::track::pt > cfgtrksel.cfgPtCutMin) && (aod::track::pt < cfgtrksel.cfgPtCutMax); - using CollTable = soa::Join; + using CollTable = soa::Join; using TrksTable = soa::Filtered>; using MftTrkTable = aod::MFTTracks; using BCs = soa::Join; @@ -329,7 +333,7 @@ struct LongrangeMaker { ft0gainvalues.clear(); ft0gainvalues = {}; if (cfgfittrksel.useGainCalib) { - const auto ft0GainObj = ccdb->getForTimeStamp>(cfgfittrksel.ConfGainPath, bc.timestamp()); + const auto ft0GainObj = ccdb->getForTimeStamp>(cfgfittrksel.confGainPath, bc.timestamp()); if (!ft0GainObj) { for (auto i{0u}; i < TotFt0Channels; i++) { ft0gainvalues.push_back(1.); @@ -604,7 +608,7 @@ struct LongrangeMaker { ft0gainvalues.clear(); ft0gainvalues = {}; if (cfgfittrksel.useGainCalib) { - const auto ft0GainObj = ccdb->getForTimeStamp>(cfgfittrksel.ConfGainPath, bc.timestamp()); + const auto ft0GainObj = ccdb->getForTimeStamp>(cfgfittrksel.confGainPath, bc.timestamp()); if (!ft0GainObj) { for (auto i{0u}; i < TotFt0Channels; i++) { ft0gainvalues.push_back(1.); @@ -911,6 +915,16 @@ struct LongrangeMaker { return false; } histos.fill(HIST("EventHist"), 12); + if (cfgevtsel.isrejectFlangeEvent) { + if constexpr (requires { col.ft0TriggerMask(); }) { + constexpr int IsFlangeEventId = 7; + std::bitset<8> ft0TriggerMask = col.ft0TriggerMask(); + if (ft0TriggerMask[IsFlangeEventId]) { + return false; + } + } + } + histos.fill(HIST("EventHist"), 13); return true; } From 83b6892da8cbf9a92759e4815c0dd9b847f2f1cc Mon Sep 17 00:00:00 2001 From: abmodak <67369858+abmodak@users.noreply.github.com> Date: Tue, 28 Apr 2026 20:41:36 +0200 Subject: [PATCH 2/2] Remove is_detected usage --- .../Tasks/longrangecorrDerived.cxx | 45 +++++++------------ 1 file changed, 16 insertions(+), 29 deletions(-) diff --git a/PWGCF/TwoParticleCorrelations/Tasks/longrangecorrDerived.cxx b/PWGCF/TwoParticleCorrelations/Tasks/longrangecorrDerived.cxx index 596f2a2d586..8fadf85472a 100644 --- a/PWGCF/TwoParticleCorrelations/Tasks/longrangecorrDerived.cxx +++ b/PWGCF/TwoParticleCorrelations/Tasks/longrangecorrDerived.cxx @@ -185,7 +185,7 @@ struct LongrangecorrDerived { void fillCollQA(TCollision const& col) { histos.fill(HIST("hMultiplicity"), col.multiplicity()); - if constexpr (std::experimental::is_detected::value) { + if constexpr (requires { col.centrality(); }) { histos.fill(HIST("hCentrality"), col.centrality()); } histos.fill(HIST("hVertexZ"), col.posZ()); @@ -197,7 +197,7 @@ struct LongrangecorrDerived { histos.fill(HIST("Trig_etavsphi"), track.phi(), track.eta()); histos.fill(HIST("Trig_eta"), track.eta()); histos.fill(HIST("Trig_phi"), track.phi()); - if constexpr (std::experimental::is_detected::value) { + if constexpr (requires { track.channelID(); }) { histos.fill(HIST("Trig_amp"), track.amplitude()); histos.fill(HIST("Channel_vs_Trig_amp"), track.channelID(), track.amplitude()); histos.fill(HIST("Trig_amp_gaincorrected"), track.gainAmplitude()); @@ -205,7 +205,7 @@ struct LongrangecorrDerived { } else { histos.fill(HIST("Trig_pt"), track.pt()); } - if constexpr (std::experimental::is_detected::value) { + if constexpr (requires { track.invMass(); }) { histos.fill(HIST("Trig_invMass"), track.invMass()); } } @@ -216,7 +216,7 @@ struct LongrangecorrDerived { histos.fill(HIST("Assoc_etavsphi"), track.phi(), track.eta()); histos.fill(HIST("Assoc_eta"), track.eta()); histos.fill(HIST("Assoc_phi"), track.phi()); - if constexpr (std::experimental::is_detected::value) { + if constexpr (requires { track.channelID(); }) { histos.fill(HIST("Assoc_amp"), track.amplitude()); histos.fill(HIST("Channel_vs_Assoc_amp"), track.channelID(), track.amplitude()); histos.fill(HIST("Assoc_amp_gaincorrected"), track.gainAmplitude()); @@ -244,25 +244,12 @@ struct LongrangecorrDerived { return true; } - template - using HasTpcTrack = decltype(std::declval().trackType()); - template - using HasV0Track = decltype(std::declval().v0Type()); - template - using HasInvMass = decltype(std::declval().invMass()); - template - using HasUpc = decltype(std::declval().gapSide()); - template - using HasFt0 = decltype(std::declval().channelID()); - template - using HasCent = decltype(std::declval().centrality()); - template void fillCorrHist(TTarget target, TTriggers const& triggers, TAssocs const& assocs, bool mixing, float vz, float multiplicity, float eventWeight) { for (auto const& triggerTrack : triggers) { auto trigAmpl = 1.0f; - if constexpr (std::experimental::is_detected::value) { + if constexpr (requires { triggerTrack.channelID(); }) { if (useGainCorr) trigAmpl = triggerTrack.gainAmplitude(); else @@ -270,18 +257,18 @@ struct LongrangecorrDerived { } else { trigAmpl = 1.0; } - if constexpr (std::experimental::is_detected::value) { + if constexpr (requires { triggerTrack.trackType(); }) { if (cfgPidMask != 0 && (cfgPidMask & (1u << static_cast(triggerTrack.trackType()))) == 0u) continue; - } else if constexpr (std::experimental::is_detected::value) { + } else if constexpr (requires { triggerTrack.v0Type(); }) { if (cfgV0Mask != 0 && (cfgV0Mask & (1u << static_cast(triggerTrack.v0Type()))) == 0u) continue; } if (!mixing) { fillTrigTrackQA(triggerTrack); - if constexpr (std::experimental::is_detected::value) { + if constexpr (requires { triggerTrack.channelID(); }) { histos.fill(HIST("Trig_hist"), vz, multiplicity, 1.0, 1.0, eventWeight * trigAmpl); - } else if constexpr (std::experimental::is_detected::value) { + } else if constexpr (requires { triggerTrack.v0Type(); }) { histos.fill(HIST("Trig_hist"), vz, multiplicity, triggerTrack.pt(), triggerTrack.invMass(), eventWeight * trigAmpl); } else { histos.fill(HIST("Trig_hist"), vz, multiplicity, triggerTrack.pt(), 1.0, eventWeight * trigAmpl); @@ -289,7 +276,7 @@ struct LongrangecorrDerived { } for (auto const& assoTrack : assocs) { auto assoAmpl = 1.0f; - if constexpr (std::experimental::is_detected::value) { + if constexpr (requires { assoTrack.v0Type(); }) { if (useGainCorr) assoAmpl = assoTrack.gainAmplitude(); else @@ -305,9 +292,9 @@ struct LongrangecorrDerived { } else { histos.fill(HIST("deltaEta_deltaPhi_mixed"), deltaPhi, deltaEta, eventWeight * trigAmpl * assoAmpl); } - if constexpr (std::experimental::is_detected::value) { + if constexpr (requires { triggerTrack.channelID(); }) { target->getPairHist()->Fill(step, vz, multiplicity, 1.0, 1.0, deltaPhi, deltaEta, 1.0, eventWeight * trigAmpl * assoAmpl); - } else if constexpr (std::experimental::is_detected::value) { + } else if constexpr (requires { triggerTrack.invMass(); }) { target->getPairHist()->Fill(step, vz, multiplicity, triggerTrack.pt(), 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); @@ -324,7 +311,7 @@ struct LongrangecorrDerived { } fillCollQA(col); auto multiplicity = 1.0f; - if constexpr (std::experimental::is_detected::value) { + if constexpr (requires { col.centrality(); }) { if (isUseCentEst) multiplicity = col.centrality(); else @@ -339,7 +326,7 @@ struct LongrangecorrDerived { void processMixed(TCollision const& cols, TrackTypes&&... tracks) { auto getMultiplicity = [this](auto& col) { - if constexpr (std::experimental::is_detected::value) { + if constexpr (requires { col.gapSide(); }) { if (!isUpcEventSelected(col)) { return -1.0f; } @@ -347,7 +334,7 @@ struct LongrangecorrDerived { (void)this; } auto multiplicity = 1.0f; - if constexpr (std::experimental::is_detected::value) { + if constexpr (requires { col.centrality(); }) { if (isUseCentEst) multiplicity = col.centrality(); else @@ -365,7 +352,7 @@ struct LongrangecorrDerived { Pair pairs{binningOnVtxAndMult, cfgNmixedevent, -1, cols, tracksTuple, &cache}; for (auto it = pairs.begin(); it != pairs.end(); it++) { auto& [col1, tracks1, col2, tracks2] = *it; - if constexpr (std::experimental::is_detected::value) { + if constexpr (requires { col1.gapSide(); } || requires { col2.gapSide(); }) { if (!isUpcEventSelected(col1) || !isUpcEventSelected(col2)) { continue; }