Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
a18e2c6
[PWGDQ] Add ReducedFIT table for UPC analysis
minjungkim12 Nov 10, 2025
aaf800e
[PWGDQ] Refactor FIT handling to use VarManager::FillFIT()
minjungkim12 Nov 14, 2025
fdb1a5a
[PWGDQ] Complete FIT pileup flags and fired channels implementation
minjungkim12 Nov 16, 2025
626f509
[PWGDQ] Add name mappings for all FIT detector variables
minjungkim12 Nov 16, 2025
a7a895f
[PWGDQ] Add variable names and units for all FIT detector variables
minjungkim12 Nov 16, 2025
5c4394f
[PWGDQ] Fix pileup flag bit operations for float values array
minjungkim12 Nov 16, 2025
a4ce877
Add simple BC-based FillFIT following ZDC pattern
minjungkim12 Nov 17, 2025
ceffd7d
[PWGDQ] Add debug logging to FillFIT BC path
minjungkim12 Nov 17, 2025
33af1e3
[PWGDQ] Add processPbPbWithFilterBarrelOnlyWithFIT for UPC analysis w…
minjungkim12 Nov 17, 2025
b299ebf
[PWGDQ] Fix FIT detector accessor method names in BC-based FillFIT
minjungkim12 Nov 17, 2025
b9437df
Fix FIT detector amplitude initialization and fired channel counting
minjungkim12 Nov 17, 2025
dd935bb
[PWGDQ] Fix FIT detector filling by extracting detector objects expli…
minjungkim12 Nov 17, 2025
4934b53
[PWGDQ] Refactor FIT detector filling and add background pileup info
minjungkim12 Nov 17, 2025
56c66ad
fix based on Ionut's comments and suggestions
minjungkim12 Nov 18, 2025
962d88d
fix unused param error and minor improvement of FIllFIT info in VarMa…
minjungkim12 Nov 18, 2025
99fc3b0
fix handling unused paramemeter
minjungkim12 Nov 18, 2025
8bad4c2
Merge remote-tracking branch 'upstream/master' into FitInfo_UPC_DQ
minjungkim12 Nov 18, 2025
9a9e093
code optimization for filling FIT info; support native UDhelper
minjungkim12 Nov 19, 2025
d107c17
Please consider the following formatting changes
alibuild Nov 19, 2025
f33c655
Merge pull request #2 from alibuild/alibot-cleanup-13773
minjungkim12 Nov 19, 2025
360cf31
Comment out rapidity gap filter constant
minjungkim12 Nov 20, 2025
e5fe13c
Please consider the following formatting changes
alibuild Nov 20, 2025
029982d
Merge pull request #3 from alibuild/alibot-cleanup-13773
minjungkim12 Nov 20, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
137 changes: 137 additions & 0 deletions PWGDQ/Core/VarManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,14 +65,14 @@
#include <cmath>
#include <complex>
#include <cstdint>
#include <iostream>

Check failure on line 68 in PWGDQ/Core/VarManager.h

View workflow job for this annotation

GitHub Actions / O2 linter

[include-iostream]

Do not include iostream. Use O2 logging instead.
#include <map>
#include <utility>
#include <vector>

using std::complex;

Check failure on line 73 in PWGDQ/Core/VarManager.h

View workflow job for this annotation

GitHub Actions / O2 linter

[import-std-name]

Do not import names from the std namespace in headers.
using std::cout;

Check failure on line 74 in PWGDQ/Core/VarManager.h

View workflow job for this annotation

GitHub Actions / O2 linter

[import-std-name]

Do not import names from the std namespace in headers.
using std::endl;

Check failure on line 75 in PWGDQ/Core/VarManager.h

View workflow job for this annotation

GitHub Actions / O2 linter

[import-std-name]

Do not import names from the std namespace in headers.

using SMatrix55 = ROOT::Math::SMatrix<double, 5, 5, ROOT::Math::MatRepSym<double, 5>>;
using SMatrix5 = ROOT::Math::SVector<double, 5>;
Expand Down Expand Up @@ -108,6 +108,7 @@
ReducedEventMultExtra = BIT(19),
CollisionQvectCentr = BIT(20),
RapidityGapFilter = BIT(21),
ReducedFit = BIT(22),
Track = BIT(0),
TrackCov = BIT(1),
TrackExtra = BIT(2),
Expand Down Expand Up @@ -418,6 +419,39 @@
kTimeZNC,
kTimeZPA,
kTimeZPC,
kAmplitudeFT0A,
kAmplitudeFT0C,
kTimeFT0A,
kTimeFT0C,
kTriggerMaskFT0,
kNFiredChannelsFT0A,
kNFiredChannelsFT0C,
kAmplitudeFDDA,
kAmplitudeFDDC,
kTimeFDDA,
kTimeFDDC,
kTriggerMaskFDD,
kNFiredChannelsFDDA,
kNFiredChannelsFDDC,
kAmplitudeFV0A,
kTimeFV0A,
kTriggerMaskFV0A,
kNFiredChannelsFV0A,
kBBFT0Apf,
kBGFT0Apf,
kBBFT0Cpf,
kBGFT0Cpf,
kBBFV0Apf,
kBGFV0Apf,
kBBFDDApf,
kBGFDDApf,
kBBFDDCpf,
kBGFDDCpf,
kDistClosestBcTOR,
kDistClosestBcTSC,
kDistClosestBcTVX,
kDistClosestBcV0A,
kDistClosestBcT0A,
kQ2X0A1,
kQ2X0A2,
kQ2Y0A1,
Expand Down Expand Up @@ -1208,6 +1242,8 @@
static void FillDileptonTrackTrackVertexing(C const& collision, T1 const& lepton1, T1 const& lepton2, T1 const& track1, T1 const& track2, float* values);
template <typename T>
static void FillZDC(const T& zdc, float* values = nullptr);
template <typename TBCs, typename TFT0s, typename TFDDs, typename TFV0As>
static void FillFIT(uint64_t midbc, std::vector<std::pair<uint64_t, int64_t>>& bcMap, TBCs const& bcs, TFT0s const& ft0s, TFDDs const& fdds, TFV0As const& fv0as, float* values = nullptr);
template <typename T>
static void FillBdtScore(const T& bdtScore, float* values = nullptr);

Expand Down Expand Up @@ -1557,9 +1593,9 @@
}
if constexpr ((fillMap & MuonCov) > 0 || (fillMap & ReducedMuonCov) > 0) {
o2::dataformats::GlobalFwdTrack propmuon = PropagateMuon(muontrack, collision);
double px = propmuon.getP() * sin(M_PI / 2 - atan(mfttrack.tgl())) * cos(mfttrack.phi());

Check failure on line 1596 in PWGDQ/Core/VarManager.h

View workflow job for this annotation

GitHub Actions / O2 linter

[std-prefix]

Use std:: prefix for names from the std namespace.
double py = propmuon.getP() * sin(M_PI / 2 - atan(mfttrack.tgl())) * sin(mfttrack.phi());

Check failure on line 1597 in PWGDQ/Core/VarManager.h

View workflow job for this annotation

GitHub Actions / O2 linter

[std-prefix]

Use std:: prefix for names from the std namespace.
double pz = propmuon.getP() * cos(M_PI / 2 - atan(mfttrack.tgl()));

Check failure on line 1598 in PWGDQ/Core/VarManager.h

View workflow job for this annotation

GitHub Actions / O2 linter

[std-prefix]

Use std:: prefix for names from the std namespace.
double pt = std::sqrt(std::pow(px, 2) + std::pow(py, 2));
values[kX] = mfttrack.x();
values[kY] = mfttrack.y();
Expand Down Expand Up @@ -2095,7 +2131,7 @@
trackPar.propagateParamToDCA({collision.posX(), collision.posY(), collision.posZ()}, fgMagField, &dca);

// if it is a displaced track longitudinally, add it to the track vector
if (abs(dca[0]) < 3.0 && abs(dca[1]) > 4.0) {

Check failure on line 2134 in PWGDQ/Core/VarManager.h

View workflow job for this annotation

GitHub Actions / O2 linter

[std-prefix]

Use std:: prefix for names from the std namespace.
if (track.tgl() > 0.1) {
tracksP.push_back(track.z());
}
Expand Down Expand Up @@ -4077,10 +4113,10 @@
values[kVertexingLxyErr] = (KFPV.GetCovariance(0) + KFGeoTwoProng.GetCovariance(0)) * dxPair2PV * dxPair2PV + (KFPV.GetCovariance(2) + KFGeoTwoProng.GetCovariance(2)) * dyPair2PV * dyPair2PV + 2 * ((KFPV.GetCovariance(1) + KFGeoTwoProng.GetCovariance(1)) * dxPair2PV * dyPair2PV);
values[kVertexingLzErr] = (KFPV.GetCovariance(5) + KFGeoTwoProng.GetCovariance(5)) * dzPair2PV * dzPair2PV;
values[kVertexingLxyzErr] = (KFPV.GetCovariance(0) + KFGeoTwoProng.GetCovariance(0)) * dxPair2PV * dxPair2PV + (KFPV.GetCovariance(2) + KFGeoTwoProng.GetCovariance(2)) * dyPair2PV * dyPair2PV + (KFPV.GetCovariance(5) + KFGeoTwoProng.GetCovariance(5)) * dzPair2PV * dzPair2PV + 2 * ((KFPV.GetCovariance(1) + KFGeoTwoProng.GetCovariance(1)) * dxPair2PV * dyPair2PV + (KFPV.GetCovariance(3) + KFGeoTwoProng.GetCovariance(3)) * dxPair2PV * dzPair2PV + (KFPV.GetCovariance(4) + KFGeoTwoProng.GetCovariance(4)) * dyPair2PV * dzPair2PV);
if (fabs(values[kVertexingLxy]) < 1.e-8f)

Check failure on line 4116 in PWGDQ/Core/VarManager.h

View workflow job for this annotation

GitHub Actions / O2 linter

[std-prefix]

Use std:: prefix for names from the std namespace.
values[kVertexingLxy] = 1.e-8f;
values[kVertexingLxyErr] = values[kVertexingLxyErr] < 0. ? 1.e8f : std::sqrt(values[kVertexingLxyErr]) / values[kVertexingLxy];
if (fabs(values[kVertexingLz]) < 1.e-8f)

Check failure on line 4119 in PWGDQ/Core/VarManager.h

View workflow job for this annotation

GitHub Actions / O2 linter

[std-prefix]

Use std:: prefix for names from the std namespace.
values[kVertexingLz] = 1.e-8f;
values[kVertexingLzErr] = values[kVertexingLzErr] < 0. ? 1.e8f : std::sqrt(values[kVertexingLzErr]) / values[kVertexingLz];
if (fabs(values[kVertexingLxyz]) < 1.e-8f)
Expand Down Expand Up @@ -5215,6 +5251,107 @@
values[kTimeZPC] = zdc.timeZPC();
}

template <typename TBCs, typename TFT0s, typename TFDDs, typename TFV0As>
void VarManager::FillFIT(uint64_t midbc, std::vector<std::pair<uint64_t, int64_t>>& bcMap, TBCs const& bcs, TFT0s const& /*ft0s*/, TFDDs const& /*fdds*/, TFV0As const& /*fv0as*/, float* values)
{
if (!values) {
values = fgValues;
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In this function you do not cover the case when the FIT data is in the reduced DQ data model and is being used from the analysis workflow (e.g. from table reader). Is this something you plan to add later or?


// Initialize all FIT variables to default values
values[kAmplitudeFT0A] = -1.f;
values[kAmplitudeFT0C] = -1.f;
values[kTimeFT0A] = -999.f;
values[kTimeFT0C] = -999.f;
values[kTriggerMaskFT0] = 0;
values[kNFiredChannelsFT0A] = 0;
values[kNFiredChannelsFT0C] = 0;
values[kAmplitudeFDDA] = -1.f;
values[kAmplitudeFDDC] = -1.f;
values[kTimeFDDA] = -999.f;
values[kTimeFDDC] = -999.f;
values[kTriggerMaskFDD] = 0;
values[kNFiredChannelsFDDA] = 0;
values[kNFiredChannelsFDDC] = 0;
values[kAmplitudeFV0A] = -1.f;
values[kTimeFV0A] = -999.f;
values[kTriggerMaskFV0A] = 0;
values[kNFiredChannelsFV0A] = 0;
values[kBBFT0Apf] = 0;
values[kBGFT0Apf] = 0;
values[kBBFT0Cpf] = 0;
values[kBGFT0Cpf] = 0;
values[kBBFV0Apf] = 0;
values[kBGFV0Apf] = 0;
values[kBBFDDApf] = 0;
values[kBGFDDApf] = 0;
values[kBBFDDCpf] = 0;
values[kBGFDDCpf] = 0;
values[kDistClosestBcTOR] = 999;
values[kDistClosestBcTSC] = 999;
values[kDistClosestBcTVX] = 999;
values[kDistClosestBcV0A] = 999;
values[kDistClosestBcT0A] = 999;

// Find the BC entry for midbc
auto it = std::find_if(bcMap.begin(), bcMap.end(),
[midbc](const std::pair<uint64_t, int64_t>& p) { return p.first == midbc; });

if (it != bcMap.end()) {
auto bcId = it->second;
auto bcEntry = bcs.iteratorAt(bcId);

// Fill FT0 information
if (bcEntry.has_foundFT0()) {
auto ft0 = bcEntry.foundFT0();
values[kTimeFT0A] = ft0.timeA();
values[kTimeFT0C] = ft0.timeC();
const auto& ampsA = ft0.amplitudeA();
const auto& ampsC = ft0.amplitudeC();
values[kAmplitudeFT0A] = 0.f;
for (auto amp : ampsA)
values[kAmplitudeFT0A] += amp;
values[kAmplitudeFT0C] = 0.f;
for (auto amp : ampsC)
values[kAmplitudeFT0C] += amp;
values[kNFiredChannelsFT0A] = ft0.channelA().size();
values[kNFiredChannelsFT0C] = ft0.channelC().size();
values[kTriggerMaskFT0] = ft0.triggerMask();
}

// Fill FV0A information
if (bcEntry.has_foundFV0()) {
auto fv0a = bcEntry.foundFV0();
values[kTimeFV0A] = fv0a.time();
const auto& amps = fv0a.amplitude();
values[kAmplitudeFV0A] = 0.f;
for (auto amp : amps)
values[kAmplitudeFV0A] += amp;
values[kTriggerMaskFV0A] = fv0a.triggerMask();
}

// Fill FDD information
if (bcEntry.has_foundFDD()) {
auto fdd = bcEntry.foundFDD();
values[kTimeFDDA] = fdd.timeA();
values[kTimeFDDC] = fdd.timeC();
const auto& ampsA = fdd.chargeA();
const auto& ampsC = fdd.chargeC();
values[kAmplitudeFDDA] = 0.f;
for (auto amp : ampsA)
values[kAmplitudeFDDA] += amp;
values[kAmplitudeFDDC] = 0.f;
for (auto amp : ampsC)
values[kAmplitudeFDDC] += amp;
values[kTriggerMaskFDD] = fdd.triggerMask();
}
}

// Fill pileup flags and distances to closest BCs
// This requires scanning nearby BCs - simplified version for now
// Full implementation would need the complete BC range similar to PWGUD processFITInfo
}

template <typename T1, typename T2>
void VarManager::FillDileptonHadron(T1 const& dilepton, T2 const& hadron, float* values, float hadronMass)
{
Expand Down
65 changes: 63 additions & 2 deletions PWGDQ/DataModel/ReducedInfoTables.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ namespace o2::aod

namespace dqppfilter
{
DECLARE_SOA_COLUMN(EventFilter, eventFilter, uint64_t); //! Bit-field used for the high level event triggering
DECLARE_SOA_COLUMN(NewBcIndex, newBcIndex, uint64_t); //! globalIndex of the new BC determined in filterPbPb
DECLARE_SOA_COLUMN(EventFilter, eventFilter, uint64_t); //! Bit-field used for the high level event triggering
DECLARE_SOA_COLUMN(NewBcIndex, newBcIndex, uint64_t); //! globalIndex of the new BC determined in filterPbPb
} // namespace dqppfilter

DECLARE_SOA_TABLE(DQEventFilter, "AOD", "EVENTFILTER", //! Store event-level decisions (DQ high level triggers)
Expand Down Expand Up @@ -273,6 +273,67 @@ DECLARE_SOA_TABLE(ReducedZdcsExtra, "AOD", "REDUCEDZDCEXTRA", //! Event ZDC ex
using ReducedZdc = ReducedZdcs::iterator;
using ReducedZdcExtra = ReducedZdcsExtra::iterator;

namespace reducedfit
{
// FIT detector information (based on upchelpers::FITInfo structure)
DECLARE_SOA_COLUMN(AmplitudeFT0A, amplitudeFT0A, float); //! FT0A total amplitude
DECLARE_SOA_COLUMN(AmplitudeFT0C, amplitudeFT0C, float); //! FT0C total amplitude
DECLARE_SOA_COLUMN(TimeFT0A, timeFT0A, float); //! FT0A time
DECLARE_SOA_COLUMN(TimeFT0C, timeFT0C, float); //! FT0C time
DECLARE_SOA_COLUMN(TriggerMaskFT0, triggerMaskFT0, uint8_t); //! FT0 trigger mask
DECLARE_SOA_COLUMN(NFiredChannelsFT0A, nFiredChannelsFT0A, int); //! Number of fired channels in FT0A
DECLARE_SOA_COLUMN(NFiredChannelsFT0C, nFiredChannelsFT0C, int); //! Number of fired channels in FT0C
DECLARE_SOA_COLUMN(AmplitudeFDDA, amplitudeFDDA, float); //! FDDA total amplitude
DECLARE_SOA_COLUMN(AmplitudeFDDC, amplitudeFDDC, float); //! FDDC total amplitude
DECLARE_SOA_COLUMN(TimeFDDA, timeFDDA, float); //! FDDA time
DECLARE_SOA_COLUMN(TimeFDDC, timeFDDC, float); //! FDDC time
DECLARE_SOA_COLUMN(TriggerMaskFDD, triggerMaskFDD, uint8_t); //! FDD trigger mask
DECLARE_SOA_COLUMN(NFiredChannelsFDDA, nFiredChannelsFDDA, int); //! Number of fired channels in FDDA
DECLARE_SOA_COLUMN(NFiredChannelsFDDC, nFiredChannelsFDDC, int); //! Number of fired channels in FDDC
DECLARE_SOA_COLUMN(AmplitudeFV0A, amplitudeFV0A, float); //! FV0A total amplitude
DECLARE_SOA_COLUMN(TimeFV0A, timeFV0A, float); //! FV0A time
DECLARE_SOA_COLUMN(TriggerMaskFV0A, triggerMaskFV0A, uint8_t); //! FV0A trigger mask
DECLARE_SOA_COLUMN(NFiredChannelsFV0A, nFiredChannelsFV0A, int); //! Number of fired channels in FV0A
DECLARE_SOA_COLUMN(BBFT0Apf, bbFT0Apf, int32_t); //! Beam-beam flags for FT0A
DECLARE_SOA_COLUMN(BGFT0Apf, bgFT0Apf, int32_t); //! Beam-gas flags for FT0A
DECLARE_SOA_COLUMN(BBFT0Cpf, bbFT0Cpf, int32_t); //! Beam-beam flags for FT0C
DECLARE_SOA_COLUMN(BGFT0Cpf, bgFT0Cpf, int32_t); //! Beam-gas flags for FT0C
DECLARE_SOA_COLUMN(BBFV0Apf, bbFV0Apf, int32_t); //! Beam-beam flags for FV0A
DECLARE_SOA_COLUMN(BGFV0Apf, bgFV0Apf, int32_t); //! Beam-gas flags for FV0A
DECLARE_SOA_COLUMN(BBFDDApf, bbFDDApf, int32_t); //! Beam-beam flags for FDDA
DECLARE_SOA_COLUMN(BGFDDApf, bgFDDApf, int32_t); //! Beam-gas flags for FDDA
DECLARE_SOA_COLUMN(BBFDDCpf, bbFDDCpf, int32_t); //! Beam-beam flags for FDDC
DECLARE_SOA_COLUMN(BGFDDCpf, bgFDDCpf, int32_t); //! Beam-gas flags for FDDC
DECLARE_SOA_COLUMN(DistClosestBcTOR, distClosestBcTOR, int32_t); //! Distance to closest BC with TOR trigger
DECLARE_SOA_COLUMN(DistClosestBcTSC, distClosestBcTSC, int32_t); //! Distance to closest BC with TSC trigger
DECLARE_SOA_COLUMN(DistClosestBcTVX, distClosestBcTVX, int32_t); //! Distance to closest BC with TVX trigger
DECLARE_SOA_COLUMN(DistClosestBcV0A, distClosestBcV0A, int32_t); //! Distance to closest BC with V0A trigger
DECLARE_SOA_COLUMN(DistClosestBcT0A, distClosestBcT0A, int32_t); //! Distance to closest BC with T0A trigger
} // namespace reducedfit

DECLARE_SOA_TABLE(ReducedFITs, "AOD", "REDUCEDFIT", //! FIT detector information
reducedfit::AmplitudeFT0A, reducedfit::AmplitudeFT0C,
reducedfit::TimeFT0A, reducedfit::TimeFT0C,
reducedfit::TriggerMaskFT0,
reducedfit::NFiredChannelsFT0A, reducedfit::NFiredChannelsFT0C,
reducedfit::AmplitudeFDDA, reducedfit::AmplitudeFDDC,
reducedfit::TimeFDDA, reducedfit::TimeFDDC,
reducedfit::TriggerMaskFDD,
reducedfit::NFiredChannelsFDDA, reducedfit::NFiredChannelsFDDC,
reducedfit::AmplitudeFV0A, reducedfit::TimeFV0A,
reducedfit::TriggerMaskFV0A,
reducedfit::NFiredChannelsFV0A,
reducedfit::BBFT0Apf, reducedfit::BGFT0Apf,
reducedfit::BBFT0Cpf, reducedfit::BGFT0Cpf,
reducedfit::BBFV0Apf, reducedfit::BGFV0Apf,
reducedfit::BBFDDApf, reducedfit::BGFDDApf,
reducedfit::BBFDDCpf, reducedfit::BGFDDCpf,
reducedfit::DistClosestBcTOR, reducedfit::DistClosestBcTSC,
reducedfit::DistClosestBcTVX, reducedfit::DistClosestBcV0A,
reducedfit::DistClosestBcT0A);

using ReducedFIT = ReducedFITs::iterator;

namespace reducedtrack
{
// basic track information
Expand Down
83 changes: 83 additions & 0 deletions PWGDQ/TableProducer/tableMaker_withAssoc.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@ constexpr static uint32_t gkEventFillMapWithMultsZdc = VarManager::ObjTypes::BC
constexpr static uint32_t gkEventFillMapWithMultsAndEventFilter = VarManager::ObjTypes::BC | VarManager::ObjTypes::Collision | VarManager::ObjTypes::CollisionMult | VarManager::ObjTypes::CollisionMultExtra | VarManager::ObjTypes::EventFilter;
constexpr static uint32_t gkEventFillMapWithMultsEventFilterZdc = VarManager::ObjTypes::BC | VarManager::ObjTypes::Collision | VarManager::ObjTypes::CollisionMult | VarManager::ObjTypes::CollisionMultExtra | VarManager::ObjTypes::EventFilter | VarManager::ObjTypes::Zdc;
constexpr static uint32_t gkEventFillMapWithMultsRapidityGapFilterZdc = VarManager::ObjTypes::BC | VarManager::ObjTypes::Collision | VarManager::ObjTypes::CollisionMult | VarManager::ObjTypes::CollisionMultExtra | VarManager::ObjTypes::RapidityGapFilter | VarManager::ObjTypes::Zdc;
constexpr static uint32_t gkEventFillMapWithMultsRapidityGapFilterZdcFit = VarManager::ObjTypes::BC | VarManager::ObjTypes::Collision | VarManager::ObjTypes::CollisionMult | VarManager::ObjTypes::CollisionMultExtra | VarManager::ObjTypes::RapidityGapFilter | VarManager::ObjTypes::Zdc | VarManager::ObjTypes::ReducedFit;
// constexpr static uint32_t gkEventFillMapWithCent = VarManager::ObjTypes::BC | VarManager::ObjTypes::Collision | VarManager::ObjTypes::CollisionCent;
constexpr static uint32_t gkEventFillMapWithCentAndMults = VarManager::ObjTypes::BC | VarManager::ObjTypes::Collision | VarManager::ObjTypes::CollisionCent | VarManager::CollisionMult | VarManager::ObjTypes::CollisionMultExtra;
constexpr static uint32_t gkEventFillMapWithMultsExtra = VarManager::ObjTypes::BC | VarManager::ObjTypes::Collision | VarManager::CollisionMult | VarManager::ObjTypes::CollisionMultExtra;
Expand Down Expand Up @@ -167,6 +168,7 @@ struct TableMaker {
Produces<ReducedEventsVtxCov> eventVtxCov;
Produces<ReducedEventsInfo> eventInfo;
Produces<ReducedZdcs> zdc;
Produces<ReducedFITs> fit;
Produces<ReducedEventsMultPV> multPV;
Produces<ReducedEventsMultAll> multAll;
Produces<ReducedTracksBarrelInfo> trackBarrelInfo;
Expand Down Expand Up @@ -861,6 +863,56 @@ struct TableMaker {
VarManager::FillZDC(bc_zdc);
}
}
// Fill FIT info using newbc pattern for UPC events (similar to ZDC)
if constexpr ((TEventFillMap & VarManager::ObjTypes::ReducedFit) > 0) {
if constexpr ((TEventFillMap & VarManager::ObjTypes::RapidityGapFilter) > 0) {
// The DQRapidityGapFilter contains the index of the bc we want to get FIT info from
auto newbc = bcs.rawIteratorAt(collision.newBcIndex());
// Fill FIT information from newbc
if (newbc.has_foundFT0()) {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think for all this block of code you can just call the VarManager::FillFIT(), otherwise, this VarManager function does not seem to be used anywhere

auto ft0 = newbc.foundFT0();
VarManager::fgValues[VarManager::kTimeFT0A] = ft0.timeA();
VarManager::fgValues[VarManager::kTimeFT0C] = ft0.timeC();
const auto& ampsA = ft0.amplitudeA();
const auto& ampsC = ft0.amplitudeC();
VarManager::fgValues[VarManager::kAmplitudeFT0A] = 0.f;
for (auto amp : ampsA)
VarManager::fgValues[VarManager::kAmplitudeFT0A] += amp;
VarManager::fgValues[VarManager::kAmplitudeFT0C] = 0.f;
for (auto amp : ampsC)
VarManager::fgValues[VarManager::kAmplitudeFT0C] += amp;
VarManager::fgValues[VarManager::kNFiredChannelsFT0A] = ft0.channelA().size();
VarManager::fgValues[VarManager::kNFiredChannelsFT0C] = ft0.channelC().size();
VarManager::fgValues[VarManager::kTriggerMaskFT0] = ft0.triggerMask();
}
if (newbc.has_foundFV0()) {
auto fv0a = newbc.foundFV0();
VarManager::fgValues[VarManager::kTimeFV0A] = fv0a.time();
const auto& amps = fv0a.amplitude();
VarManager::fgValues[VarManager::kAmplitudeFV0A] = 0.f;
for (auto amp : amps)
VarManager::fgValues[VarManager::kAmplitudeFV0A] += amp;
VarManager::fgValues[VarManager::kNFiredChannelsFV0A] = fv0a.channel().size();
VarManager::fgValues[VarManager::kTriggerMaskFV0A] = fv0a.triggerMask();
}
if (newbc.has_foundFDD()) {
auto fdd = newbc.foundFDD();
VarManager::fgValues[VarManager::kTimeFDDA] = fdd.timeA();
VarManager::fgValues[VarManager::kTimeFDDC] = fdd.timeC();
const auto& ampsA = fdd.chargeA();
const auto& ampsC = fdd.chargeC();
VarManager::fgValues[VarManager::kAmplitudeFDDA] = 0.f;
for (auto amp : ampsA)
VarManager::fgValues[VarManager::kAmplitudeFDDA] += amp;
VarManager::fgValues[VarManager::kAmplitudeFDDC] = 0.f;
for (auto amp : ampsC)
VarManager::fgValues[VarManager::kAmplitudeFDDC] += amp;
VarManager::fgValues[VarManager::kNFiredChannelsFDDA] = fdd.channelA().size();
VarManager::fgValues[VarManager::kNFiredChannelsFDDC] = fdd.channelC().size();
VarManager::fgValues[VarManager::kTriggerMaskFDD] = fdd.triggerMask();
}
}
}
if constexpr ((TEventFillMap & VarManager::ObjTypes::CollisionMultExtra) > 0 && (TTrackFillMap & VarManager::ObjTypes::Track) > 0 && (TTrackFillMap & VarManager::ObjTypes::TrackDCA) > 0) {
auto groupedTrackIndices = trackAssocs.sliceBy(trackIndicesPerCollision, collision.globalIndex());
VarManager::FillEventTrackEstimators<TTrackFillMap>(collision, groupedTrackIndices, tracks);
Expand Down Expand Up @@ -968,6 +1020,37 @@ struct TableMaker {
zdc(-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0);
}
}
// Fill FIT table if requested
if constexpr ((TEventFillMap & VarManager::ObjTypes::ReducedFit) > 0) {
fit(VarManager::fgValues[VarManager::kAmplitudeFT0A], VarManager::fgValues[VarManager::kAmplitudeFT0C],
VarManager::fgValues[VarManager::kTimeFT0A], VarManager::fgValues[VarManager::kTimeFT0C],
static_cast<uint8_t>(VarManager::fgValues[VarManager::kTriggerMaskFT0]),
static_cast<int>(VarManager::fgValues[VarManager::kNFiredChannelsFT0A]),
static_cast<int>(VarManager::fgValues[VarManager::kNFiredChannelsFT0C]),
VarManager::fgValues[VarManager::kAmplitudeFDDA], VarManager::fgValues[VarManager::kAmplitudeFDDC],
VarManager::fgValues[VarManager::kTimeFDDA], VarManager::fgValues[VarManager::kTimeFDDC],
static_cast<uint8_t>(VarManager::fgValues[VarManager::kTriggerMaskFDD]),
static_cast<int>(VarManager::fgValues[VarManager::kNFiredChannelsFDDA]),
static_cast<int>(VarManager::fgValues[VarManager::kNFiredChannelsFDDC]),
VarManager::fgValues[VarManager::kAmplitudeFV0A], VarManager::fgValues[VarManager::kTimeFV0A],
static_cast<uint8_t>(VarManager::fgValues[VarManager::kTriggerMaskFV0A]),
static_cast<int>(VarManager::fgValues[VarManager::kNFiredChannelsFV0A]),
static_cast<int32_t>(VarManager::fgValues[VarManager::kBBFT0Apf]),
static_cast<int32_t>(VarManager::fgValues[VarManager::kBGFT0Apf]),
static_cast<int32_t>(VarManager::fgValues[VarManager::kBBFT0Cpf]),
static_cast<int32_t>(VarManager::fgValues[VarManager::kBGFT0Cpf]),
static_cast<int32_t>(VarManager::fgValues[VarManager::kBBFV0Apf]),
static_cast<int32_t>(VarManager::fgValues[VarManager::kBGFV0Apf]),
static_cast<int32_t>(VarManager::fgValues[VarManager::kBBFDDApf]),
static_cast<int32_t>(VarManager::fgValues[VarManager::kBGFDDApf]),
static_cast<int32_t>(VarManager::fgValues[VarManager::kBBFDDCpf]),
static_cast<int32_t>(VarManager::fgValues[VarManager::kBGFDDCpf]),
static_cast<int32_t>(VarManager::fgValues[VarManager::kDistClosestBcTOR]),
static_cast<int32_t>(VarManager::fgValues[VarManager::kDistClosestBcTSC]),
static_cast<int32_t>(VarManager::fgValues[VarManager::kDistClosestBcTVX]),
static_cast<int32_t>(VarManager::fgValues[VarManager::kDistClosestBcV0A]),
static_cast<int32_t>(VarManager::fgValues[VarManager::kDistClosestBcT0A]));
}
if constexpr ((TEventFillMap & VarManager::ObjTypes::CollisionMultExtra) > 0) {
multPV(collision.multNTracksHasITS(), collision.multNTracksHasTPC(), collision.multNTracksHasTOF(), collision.multNTracksHasTRD(),
collision.multNTracksITSOnly(), collision.multNTracksTPCOnly(), collision.multNTracksITSTPC(),
Expand Down
Loading