From a4fbcb6abfbf2b17a9b6094bfb6e659ad5ede493 Mon Sep 17 00:00:00 2001 From: Gauthier Legras Date: Thu, 12 Nov 2026 14:38:21 +0100 Subject: [PATCH 1/2] [PWGDQ]: add fraction of shared cluster and local phi in var manager --- PWGDQ/Core/VarManager.cxx | 10 ++++++++++ PWGDQ/Core/VarManager.h | 11 +++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/PWGDQ/Core/VarManager.cxx b/PWGDQ/Core/VarManager.cxx index 6e4820edba0..05bfb95e9d1 100644 --- a/PWGDQ/Core/VarManager.cxx +++ b/PWGDQ/Core/VarManager.cxx @@ -134,6 +134,10 @@ void VarManager::SetVariableDependencies() } if (fgUsedVars[kTrackIsInsideTPCModule]) { fgUsedVars[kPhiTPCOuter] = true; + fgUsedVars[kLocalSectorPhi] = true; + } + if (fgUsedVars[kLocalSectorPhi]) { + fgUsedVars[kPhiTPCOuter] = true; } } @@ -1020,6 +1024,8 @@ void VarManager::SetDefaultVarNames() fgVariableUnits[kEta] = ""; fgVariableNames[kPhi] = "#varphi"; fgVariableUnits[kPhi] = "rad."; + fgVariableNames[kLocalSectorPhi] = "local sector #varphi"; + fgVariableUnits[kLocalSectorPhi] = "rad."; fgVariableNames[kRap] = "y"; fgVariableUnits[kRap] = ""; fgVariableNames[kMass] = "mass"; @@ -1079,6 +1085,8 @@ void VarManager::SetDefaultVarNames() fgVariableUnits[kTPCnCRoverFindCls] = ""; fgVariableNames[kTPCchi2] = "TPC chi2"; fgVariableUnits[kTPCchi2] = ""; + fgVariableNames[kTPCFractionSharedCls] = "TPC fraction shared clusters"; + fgVariableUnits[kTPCFractionSharedCls] = ""; fgVariableNames[kTPCsignal] = "TPC dE/dx"; fgVariableUnits[kTPCsignal] = ""; fgVariableNames[kPhiTPCOuter] = "#varphi_{TPCout}"; @@ -2407,6 +2415,7 @@ void VarManager::SetDefaultVarNames() fgVarNamesMap["kUsedKF"] = kUsedKF; fgVarNamesMap["kKFMass"] = kKFMass; fgVarNamesMap["kKFMassGeoTop"] = kKFMassGeoTop; + fgVarNamesMap["kLocalSectorPhi"] = kLocalSectorPhi; fgVarNamesMap["kPt1"] = kPt1; fgVarNamesMap["kEta1"] = kEta1; fgVarNamesMap["kPhi1"] = kPhi1; @@ -2462,6 +2471,7 @@ void VarManager::SetDefaultVarNames() fgVarNamesMap["kTPCnclsCR"] = kTPCnclsCR; fgVarNamesMap["kTPCnCRoverFindCls"] = kTPCnCRoverFindCls; fgVarNamesMap["kTPCchi2"] = kTPCchi2; + fgVarNamesMap["kTPCFractionSharedCls"] = kTPCFractionSharedCls; fgVarNamesMap["kTPCsignal"] = kTPCsignal; fgVarNamesMap["kPhiTPCOuter"] = kPhiTPCOuter; fgVarNamesMap["kTrackIsInsideTPCModule"] = kTrackIsInsideTPCModule; diff --git a/PWGDQ/Core/VarManager.h b/PWGDQ/Core/VarManager.h index 7785e8c660d..a0a5096279a 100644 --- a/PWGDQ/Core/VarManager.h +++ b/PWGDQ/Core/VarManager.h @@ -585,6 +585,7 @@ class VarManager : public TObject // Barrel track variables kPin, kSignedPin, + kLocalSectorPhi, kTOFExpMom, kTrackTime, kTrackTimeRes, @@ -616,6 +617,7 @@ class VarManager : public TObject kTPCnclsCR, kTPCnCRoverFindCls, kTPCchi2, + kTPCFractionSharedCls, kTPCsignal, kPhiTPCOuter, kTrackIsInsideTPCModule, @@ -3092,8 +3094,10 @@ void VarManager::FillTrack(T const& track, float* values) if (fgUsedVars[kPhiTPCOuter]) { values[kPhiTPCOuter] = RecoDecay::constrainAngle(track.phi() - (track.sign() > 0 ? 1.0 : -1.0) * (o2::constants::math::PIHalf - TMath::ACos(0.22 * fgMagField / track.pt()))); } + if (fgUsedVars[kLocalSectorPhi]) { + values[kLocalSectorPhi] = values[kPhiTPCOuter] - TMath::Floor(18.0 * values[kPhiTPCOuter] / o2::constants::math::TwoPI) * (o2::constants::math::TwoPI / 18.0); + } if (fgUsedVars[kTrackIsInsideTPCModule]) { - float localSectorPhi = values[kPhiTPCOuter] - TMath::Floor(18.0 * values[kPhiTPCOuter] / o2::constants::math::TwoPI) * (o2::constants::math::TwoPI / 18.0); float edge = fgTPCInterSectorBoundary / 2.0 / 246.6; // minimal inter-sector boundary as angle float curvature = 3.0 * 3.33 * track.pt() / fgMagField * (1.0 - TMath::Sin(TMath::ACos(0.22 * fgMagField / track.pt()))); if (curvature / 2.466 > edge) { @@ -3101,7 +3105,7 @@ void VarManager::FillTrack(T const& track, float* values) } double min = edge; double max = o2::constants::math::TwoPI / 18.0 - edge; - values[kTrackIsInsideTPCModule] = (localSectorPhi > min && localSectorPhi < max ? 1.0 : 0.0); + values[kTrackIsInsideTPCModule] = (values[kLocalSectorPhi] > min && values[kLocalSectorPhi] < max ? 1.0 : 0.0); } if constexpr ((fillMap & ReducedTrack) > 0 && !((fillMap & Pair) > 0)) { @@ -3199,6 +3203,9 @@ void VarManager::FillTrack(T const& track, float* values) values[kITSchi2] = track.itsChi2NCl(); values[kTPCncls] = track.tpcNClsFound(); values[kTPCchi2] = track.tpcChi2NCl(); + if constexpr ((fillMap & TrackExtra) > 0) { + values[kTPCFractionSharedCls] = track.tpcFractionSharedCls(); + } values[kTrackLength] = track.length(); values[kTPCnclsCR] = track.tpcNClsCrossedRows(); values[kTRDPattern] = track.trdPattern(); From 6932db309b4b29a59dfc4e2b20e9f4adf642c6f2 Mon Sep 17 00:00:00 2001 From: Gauthier Legras Date: Thu, 12 Nov 2026 15:21:27 +0100 Subject: [PATCH 2/2] adding dynamic column in reducedBarrelInfo --- PWGDQ/Core/VarManager.h | 4 +--- PWGDQ/DataModel/ReducedInfoTables.h | 1 + 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/PWGDQ/Core/VarManager.h b/PWGDQ/Core/VarManager.h index a0a5096279a..4fb3354ce4e 100644 --- a/PWGDQ/Core/VarManager.h +++ b/PWGDQ/Core/VarManager.h @@ -3203,9 +3203,7 @@ void VarManager::FillTrack(T const& track, float* values) values[kITSchi2] = track.itsChi2NCl(); values[kTPCncls] = track.tpcNClsFound(); values[kTPCchi2] = track.tpcChi2NCl(); - if constexpr ((fillMap & TrackExtra) > 0) { - values[kTPCFractionSharedCls] = track.tpcFractionSharedCls(); - } + values[kTPCFractionSharedCls] = track.tpcFractionSharedCls(); values[kTrackLength] = track.length(); values[kTPCnclsCR] = track.tpcNClsCrossedRows(); values[kTRDPattern] = track.trdPattern(); diff --git a/PWGDQ/DataModel/ReducedInfoTables.h b/PWGDQ/DataModel/ReducedInfoTables.h index c6e79bf6840..5b50c38db6c 100644 --- a/PWGDQ/DataModel/ReducedInfoTables.h +++ b/PWGDQ/DataModel/ReducedInfoTables.h @@ -482,6 +482,7 @@ DECLARE_SOA_TABLE(ReducedTracksBarrel, "AOD", "RTBARREL", //! track::IsPVContributor, track::TPCNClsFound, track::TPCNClsCrossedRows, + track::TPCFractionSharedCls, reducedtrack::HasITS, reducedtrack::HasTRD, reducedtrack::HasTOF, reducedtrack::HasTPC);