Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
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
89 changes: 85 additions & 4 deletions PWGDQ/Core/VarManager.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,14 @@
// In applying this license CERN does not waive the privileges and immunities
// granted to it by virtue of its status as an Intergovernmental Organization
// or submit itself to any jurisdiction.
#include "PWGDQ/Core/VarManager.h"

#include "Tools/KFparticle/KFUtilities.h"

#include <cmath>
#include <iostream>

Check failure on line 16 in PWGDQ/Core/VarManager.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[include-iostream]

Do not include iostream. Use O2 logging instead.
#include <vector>
#include <map>
#include "PWGDQ/Core/VarManager.h"
#include "Tools/KFparticle/KFUtilities.h"
#include <vector>

using std::cout;
using std::endl;
Expand All @@ -29,7 +31,7 @@
float VarManager::fgMagField = 0.5;
float VarManager::fgzMatching = -77.5;
float VarManager::fgValues[VarManager::kNVars] = {0.0f};
float VarManager::fgTPCInterSectorBoundary = 1.0; // cm
float VarManager::fgTPCInterSectorBoundary = 1.0; // cm
int VarManager::fgITSROFbias = 0;
int VarManager::fgITSROFlength = 100;
int VarManager::fgITSROFBorderMarginLow = 0;
Expand Down Expand Up @@ -165,8 +167,8 @@
// TO Do: add more systems

// set the beam 4-momentum vectors
float beamAEnergy = energy / 2.0 * sqrt(NumberOfProtonsA * NumberOfProtonsC / NumberOfProtonsC / NumberOfProtonsA); // GeV

Check failure on line 170 in PWGDQ/Core/VarManager.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[std-prefix]

Use std:: prefix for names from the std namespace.
float beamCEnergy = energy / 2.0 * sqrt(NumberOfProtonsC * NumberOfProtonsA / NumberOfProtonsA / NumberOfProtonsC); // GeV

Check failure on line 171 in PWGDQ/Core/VarManager.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[std-prefix]

Use std:: prefix for names from the std namespace.
float beamAMomentum = std::sqrt(beamAEnergy * beamAEnergy - NumberOfNucleonsA * NumberOfNucleonsA * MassProton * MassProton);
float beamCMomentum = std::sqrt(beamCEnergy * beamCEnergy - NumberOfNucleonsC * NumberOfNucleonsC * MassProton * MassProton);
fgBeamA.SetPxPyPzE(0, 0, beamAMomentum, beamAEnergy);
Expand Down Expand Up @@ -265,7 +267,7 @@
double mean = calibMeanHist->GetBinContent(binTPCncls, binPin, binEta);
double sigma = calibSigmaHist->GetBinContent(binTPCncls, binPin, binEta);
return (nSigmaValue - mean) / sigma; // Return the calibrated nSigma value
} else if (fgCalibrationType == 2) {

Check failure on line 270 in PWGDQ/Core/VarManager.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[magic-number]

Avoid magic numbers in expressions. Assign the value to a clearly named variable or constant.
// get the calibration histograms
CalibObjects calibMean, calibSigma, calibStatus;
switch (species) {
Expand Down Expand Up @@ -425,6 +427,57 @@
fgVariableUnits[kMultFDDA] = "";
fgVariableNames[kMultFDDC] = "Multiplicity FDDC";
fgVariableUnits[kMultFDDC] = "";
// FIT timing information
fgVariableNames[kTimeFT0A] = "Time FT0A";
fgVariableUnits[kTimeFT0A] = "ns";
fgVariableNames[kTimeFT0C] = "Time FT0C";
fgVariableUnits[kTimeFT0C] = "ns";
fgVariableNames[kTimeFDDA] = "Time FDDA";
fgVariableUnits[kTimeFDDA] = "ns";
fgVariableNames[kTimeFDDC] = "Time FDDC";
fgVariableUnits[kTimeFDDC] = "ns";
fgVariableNames[kTimeFV0A] = "Time FV0A";
fgVariableUnits[kTimeFV0A] = "ns";
// FIT trigger masks
fgVariableNames[kTriggerMaskFT0] = "Trigger mask FT0";
fgVariableUnits[kTriggerMaskFT0] = "";
fgVariableNames[kTriggerMaskFDD] = "Trigger mask FDD";
fgVariableUnits[kTriggerMaskFDD] = "";
fgVariableNames[kTriggerMaskFV0A] = "Trigger mask FV0A";
fgVariableUnits[kTriggerMaskFV0A] = "";
// FIT beam-beam pileup flags
fgVariableNames[kBBFT0Apf] = "BB FT0A pileup flag";
fgVariableUnits[kBBFT0Apf] = "";
fgVariableNames[kBBFT0Cpf] = "BB FT0C pileup flag";
fgVariableUnits[kBBFT0Cpf] = "";
fgVariableNames[kBBFV0Apf] = "BB FV0A pileup flag";
fgVariableUnits[kBBFV0Apf] = "";
fgVariableNames[kBBFDDApf] = "BB FDDA pileup flag";
fgVariableUnits[kBBFDDApf] = "";
fgVariableNames[kBBFDDCpf] = "BB FDDC pileup flag";
fgVariableUnits[kBBFDDCpf] = "";
// FIT beam-gas pileup flags
fgVariableNames[kBGFT0Apf] = "BG FT0A pileup flag";
fgVariableUnits[kBGFT0Apf] = "";
fgVariableNames[kBGFT0Cpf] = "BG FT0C pileup flag";
fgVariableUnits[kBGFT0Cpf] = "";
fgVariableNames[kBGFV0Apf] = "BG FV0A pileup flag";
fgVariableUnits[kBGFV0Apf] = "";
fgVariableNames[kBGFDDApf] = "BG FDDA pileup flag";
fgVariableUnits[kBGFDDApf] = "";
fgVariableNames[kBGFDDCpf] = "BG FDDC pileup flag";
fgVariableUnits[kBGFDDCpf] = "";
// Distance to closest BC with triggers
fgVariableNames[kDistClosestBcTOR] = "Distance to closest BC with TOR";
fgVariableUnits[kDistClosestBcTOR] = "BC";
fgVariableNames[kDistClosestBcTSC] = "Distance to closest BC with TSC";
fgVariableUnits[kDistClosestBcTSC] = "BC";
fgVariableNames[kDistClosestBcTVX] = "Distance to closest BC with TVX";
fgVariableUnits[kDistClosestBcTVX] = "BC";
fgVariableNames[kDistClosestBcV0A] = "Distance to closest BC with V0A";
fgVariableUnits[kDistClosestBcV0A] = "BC";
fgVariableNames[kDistClosestBcT0A] = "Distance to closest BC with T0A";
fgVariableUnits[kDistClosestBcT0A] = "BC";
fgVariableNames[kMultZNA] = "Multiplicity ZNA";
fgVariableUnits[kMultZNA] = "";
fgVariableNames[kMultZNC] = "Multiplicity ZNC";
Expand Down Expand Up @@ -1544,6 +1597,34 @@
fgVarNamesMap["kTwoR2SP2"] = kTwoR2SP2;
fgVarNamesMap["kTwoR2EP1"] = kTwoR2EP1;
fgVarNamesMap["kTwoR2EP2"] = kTwoR2EP2;
// FIT timing information
fgVarNamesMap["kTimeFT0A"] = kTimeFT0A;
fgVarNamesMap["kTimeFT0C"] = kTimeFT0C;
fgVarNamesMap["kTimeFDDA"] = kTimeFDDA;
fgVarNamesMap["kTimeFDDC"] = kTimeFDDC;
fgVarNamesMap["kTimeFV0A"] = kTimeFV0A;
// FIT trigger masks
fgVarNamesMap["kTriggerMaskFT0"] = kTriggerMaskFT0;
fgVarNamesMap["kTriggerMaskFDD"] = kTriggerMaskFDD;
fgVarNamesMap["kTriggerMaskFV0A"] = kTriggerMaskFV0A;
// FIT beam-beam pileup flags
fgVarNamesMap["kBBFT0Apf"] = kBBFT0Apf;
fgVarNamesMap["kBBFT0Cpf"] = kBBFT0Cpf;
fgVarNamesMap["kBBFV0Apf"] = kBBFV0Apf;
fgVarNamesMap["kBBFDDApf"] = kBBFDDApf;
fgVarNamesMap["kBBFDDCpf"] = kBBFDDCpf;
// FIT beam-gas pileup flags
fgVarNamesMap["kBGFT0Apf"] = kBGFT0Apf;
fgVarNamesMap["kBGFT0Cpf"] = kBGFT0Cpf;
fgVarNamesMap["kBGFV0Apf"] = kBGFV0Apf;
fgVarNamesMap["kBGFDDApf"] = kBGFDDApf;
fgVarNamesMap["kBGFDDCpf"] = kBGFDDCpf;
// Distance to closest BC with triggers
fgVarNamesMap["kDistClosestBcTOR"] = kDistClosestBcTOR;
fgVarNamesMap["kDistClosestBcTSC"] = kDistClosestBcTSC;
fgVarNamesMap["kDistClosestBcTVX"] = kDistClosestBcTVX;
fgVarNamesMap["kDistClosestBcV0A"] = kDistClosestBcV0A;
fgVarNamesMap["kDistClosestBcT0A"] = kDistClosestBcT0A;
fgVarNamesMap["kNEventWiseVariables"] = kNEventWiseVariables;
fgVarNamesMap["kX"] = kX;
fgVarNamesMap["kY"] = kY;
Expand Down
99 changes: 90 additions & 9 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 @@ -436,6 +437,34 @@
kTwoR2SP2, // Scalar product resolution of event2 for ME technique
kTwoR2EP1, // Event plane resolution of event2 for ME technique
kTwoR2EP2, // Event plane resolution of event2 for ME technique
// FIT timing information
kTimeFT0A, // FT0A time
kTimeFT0C, // FT0C time
kTimeFDDA, // FDDA time
kTimeFDDC, // FDDC time
kTimeFV0A, // FV0A time
// FIT trigger masks
kTriggerMaskFT0, // FT0 trigger mask
kTriggerMaskFDD, // FDD trigger mask
kTriggerMaskFV0A, // FV0A trigger mask
// FIT beam-beam pileup flags
kBBFT0Apf, // Beam-beam flag in FT0A
kBBFT0Cpf, // Beam-beam flag in FT0C
kBBFV0Apf, // Beam-beam flag in FV0A
kBBFDDApf, // Beam-beam flag in FDDA
kBBFDDCpf, // Beam-beam flag in FDDC
// FIT beam-gas pileup flags
kBGFT0Apf, // Beam-gas flag in FT0A
kBGFT0Cpf, // Beam-gas flag in FT0C
kBGFV0Apf, // Beam-gas flag in FV0A
kBGFDDApf, // Beam-gas flag in FDDA
kBGFDDCpf, // Beam-gas flag in FDDC
// Distance to closest BC with triggers
kDistClosestBcTOR, // Distance to closest BC with TOR trigger
kDistClosestBcTSC, // Distance to closest BC with TSC trigger
kDistClosestBcTVX, // Distance to closest BC with TVX trigger
kDistClosestBcV0A, // Distance to closest BC with V0A trigger
kDistClosestBcT0A, // Distance to closest BC with T0A trigger
kNEventWiseVariables,

// Variables for event mixing with cumulant
Expand Down Expand Up @@ -1155,6 +1184,8 @@
template <typename T>
static void FillZDC(const T& zdc, float* values = nullptr);
template <typename T>
static void FillFIT(const T& fit, float* values = nullptr);
template <typename T>
static void FillBdtScore(const T& bdtScore, float* values = nullptr);

static void SetCalibrationObject(CalibObjects calib, TObject* obj)
Expand Down Expand Up @@ -1230,15 +1261,15 @@

static float fgMagField;
static float fgzMatching;
static float fgCenterOfMassEnergy; // collision energy
static float fgMassofCollidingParticle; // mass of the colliding particle
static float fgTPCInterSectorBoundary; // TPC inter-sector border size at the TPC outer radius, in cm
static int fgITSROFbias; // ITS ROF bias (from ALPIDE parameters)
static int fgITSROFlength; // ITS ROF length (from ALPIDE parameters)
static int fgITSROFBorderMarginLow; // ITS ROF border low margin
static int fgITSROFBorderMarginHigh; // ITS ROF border high margin
static uint64_t fgSOR; // Timestamp for start of run
static uint64_t fgEOR; // Timestamp for end of run
static float fgCenterOfMassEnergy; // collision energy
static float fgMassofCollidingParticle; // mass of the colliding particle
static float fgTPCInterSectorBoundary; // TPC inter-sector border size at the TPC outer radius, in cm
static int fgITSROFbias; // ITS ROF bias (from ALPIDE parameters)
static int fgITSROFlength; // ITS ROF length (from ALPIDE parameters)
static int fgITSROFBorderMarginLow; // ITS ROF border low margin
static int fgITSROFBorderMarginHigh; // ITS ROF border high margin
static uint64_t fgSOR; // Timestamp for start of run
static uint64_t fgEOR; // Timestamp for end of run
static ROOT::Math::PxPyPzEVector fgBeamA; // beam from A-side 4-momentum vector
static ROOT::Math::PxPyPzEVector fgBeamC; // beam from C-side 4-momentum vector

Expand Down Expand Up @@ -1501,8 +1532,8 @@
}
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 1535 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 1536 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()));
double pt = std::sqrt(std::pow(px, 2) + std::pow(py, 2));
values[kX] = mfttrack.x();
Expand Down Expand Up @@ -5030,6 +5061,56 @@
values[kTimeZPC] = zdc.timeZPC();
}

// -----------------------------------------------------------------------
// Fill FIT detector information
template <typename T>
void VarManager::FillFIT(T const& fit, float* values)
{
if (!values) {
values = fgValues;
}

// FIT amplitudes (reuse existing multiplicity variables)
values[kMultFT0A] = fit.ampFT0A;
values[kMultFT0C] = fit.ampFT0C;
values[kMultFDDA] = fit.ampFDDA;
values[kMultFDDC] = fit.ampFDDC;
values[kMultFV0A] = fit.ampFV0A;

// FIT timing information
values[kTimeFT0A] = fit.timeFT0A;
values[kTimeFT0C] = fit.timeFT0C;
values[kTimeFDDA] = fit.timeFDDA;
values[kTimeFDDC] = fit.timeFDDC;
values[kTimeFV0A] = fit.timeFV0A;

// FIT trigger masks
values[kTriggerMaskFT0] = fit.triggerMaskFT0;
values[kTriggerMaskFDD] = fit.triggerMaskFDD;
values[kTriggerMaskFV0A] = fit.triggerMaskFV0A;

// Beam-beam pileup flags
values[kBBFT0Apf] = fit.BBFT0Apf;
values[kBBFT0Cpf] = fit.BBFT0Cpf;
values[kBBFV0Apf] = fit.BBFV0Apf;
values[kBBFDDApf] = fit.BBFDDApf;
values[kBBFDDCpf] = fit.BBFDDCpf;

// Beam-gas pileup flags
values[kBGFT0Apf] = fit.BGFT0Apf;
values[kBGFT0Cpf] = fit.BGFT0Cpf;
values[kBGFV0Apf] = fit.BGFV0Apf;
values[kBGFDDApf] = fit.BGFDDApf;
values[kBGFDDCpf] = fit.BGFDDCpf;

// Distance to closest BC with triggers
values[kDistClosestBcTOR] = fit.distClosestBcTOR;
values[kDistClosestBcTSC] = fit.distClosestBcTSC;
values[kDistClosestBcTVX] = fit.distClosestBcTVX;
values[kDistClosestBcV0A] = fit.distClosestBcV0A;
values[kDistClosestBcT0A] = fit.distClosestBcT0A;
}

template <typename T1, typename T2>
void VarManager::FillDileptonHadron(T1 const& dilepton, T2 const& hadron, float* values, float hadronMass)
{
Expand Down
54 changes: 54 additions & 0 deletions PWGDQ/DataModel/ReducedInfoTables.h
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,60 @@ DECLARE_SOA_TABLE(ReducedZdcsExtra, "AOD", "REDUCEDZDCEXTRA", //! Event ZDC ex
using ReducedZdc = ReducedZdcs::iterator;
using ReducedZdcExtra = ReducedZdcsExtra::iterator;

namespace reducedfit
{
// FIT amplitudes
DECLARE_SOA_COLUMN(AmpFT0A, ampFT0A, float); //! FT0A amplitude
DECLARE_SOA_COLUMN(AmpFT0C, ampFT0C, float); //! FT0C amplitude
DECLARE_SOA_COLUMN(AmpFDDA, ampFDDA, float); //! FDDA amplitude
DECLARE_SOA_COLUMN(AmpFDDC, ampFDDC, float); //! FDDC amplitude
DECLARE_SOA_COLUMN(AmpFV0A, ampFV0A, float); //! FV0A amplitude
// FIT times
DECLARE_SOA_COLUMN(TimeFT0A, timeFT0A, float); //! FT0A time
DECLARE_SOA_COLUMN(TimeFT0C, timeFT0C, float); //! FT0C time
DECLARE_SOA_COLUMN(TimeFDDA, timeFDDA, float); //! FDDA time
DECLARE_SOA_COLUMN(TimeFDDC, timeFDDC, float); //! FDDC time
DECLARE_SOA_COLUMN(TimeFV0A, timeFV0A, float); //! FV0A time
// FIT trigger masks
DECLARE_SOA_COLUMN(TriggerMaskFT0, triggerMaskFT0, uint8_t); //! FT0 trigger mask
DECLARE_SOA_COLUMN(TriggerMaskFDD, triggerMaskFDD, uint8_t); //! FDD trigger mask
DECLARE_SOA_COLUMN(TriggerMaskFV0A, triggerMaskFV0A, uint8_t); //! FV0A trigger mask
// FIT pileup flags
DECLARE_SOA_COLUMN(BBFT0Apf, bbFT0Apf, int32_t); //! Beam-beam flag in FT0A
DECLARE_SOA_COLUMN(BGFT0Apf, bgFT0Apf, int32_t); //! Beam-gas flag in FT0A
DECLARE_SOA_COLUMN(BBFT0Cpf, bbFT0Cpf, int32_t); //! Beam-beam flag in FT0C
DECLARE_SOA_COLUMN(BGFT0Cpf, bgFT0Cpf, int32_t); //! Beam-gas flag in FT0C
DECLARE_SOA_COLUMN(BBFV0Apf, bbFV0Apf, int32_t); //! Beam-beam flag in FV0A
DECLARE_SOA_COLUMN(BGFV0Apf, bgFV0Apf, int32_t); //! Beam-gas flag in FV0A
DECLARE_SOA_COLUMN(BBFDDApf, bbFDDApf, int32_t); //! Beam-beam flag in FDDA
DECLARE_SOA_COLUMN(BGFDDApf, bgFDDApf, int32_t); //! Beam-gas flag in FDDA
DECLARE_SOA_COLUMN(BBFDDCpf, bbFDDCpf, int32_t); //! Beam-beam flag in FDDC
DECLARE_SOA_COLUMN(BGFDDCpf, bgFDDCpf, int32_t); //! Beam-gas flag in FDDC
// Distance to closest BC with various triggers
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", //! Event FIT information
reducedfit::AmpFT0A, reducedfit::AmpFT0C,
reducedfit::AmpFDDA, reducedfit::AmpFDDC, reducedfit::AmpFV0A,
reducedfit::TimeFT0A, reducedfit::TimeFT0C,
reducedfit::TimeFDDA, reducedfit::TimeFDDC, reducedfit::TimeFV0A,
reducedfit::TriggerMaskFT0, reducedfit::TriggerMaskFDD, reducedfit::TriggerMaskFV0A,
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
Loading
Loading