Skip to content
Open
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
204 changes: 204 additions & 0 deletions PWGDQ/Core/DQConstants.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,204 @@
// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
// All rights not expressly granted are reserved.
//
// This software is distributed under the terms of the GNU General Public
// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
//
// 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.
//
/// \author Alexander Tiekoetter <alexander.tiekoetter@cern.ch>, Muenster
/// \brief Header file for definition of constants in the DQ framework
/// \file DQConstants.h

#ifndef PWGDQ_CORE_DQCONSTANTS_H_
#define PWGDQ_CORE_DQCONSTANTS_H_

#include <cstdint>

namespace o2::dqconstants
{
// Numerical conventions
inline constexpr float InvalidValueF = -9999.f;
inline constexpr int InvalidValueI = -9999;
inline constexpr int InvalidIndex = -1;

inline constexpr std::uint8_t Flag8 = 0u;
inline constexpr std::uint32_t Flag32 = 0u;
inline constexpr std::uint64_t Flag64 = 0ull;
Comment on lines +28 to +30

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Unused


inline constexpr float EmptyVariable = 0.0f;

inline constexpr double MillisecondsPerMinute = 60000.0;

inline constexpr int TwoProng = 2;
inline constexpr int ThreeProng = 3;
inline constexpr int FourProng = 4;

inline constexpr int TPCCalibTypeStart = 0;
inline constexpr int TPCCalibTypeEnd = 2;

inline constexpr float InvalidDCA = 998.0f;
inline constexpr float InvalidStdDev = -1.0;

// Checks
inline constexpr auto IsCoordinateInvalid = [](float value) constexpr -> bool {
return value < 0.f;
};

inline constexpr auto IsDCAInvalid = [](float value) constexpr -> bool {
return value > InvalidDCA;
};

inline constexpr auto IsStdDevValid = [](float value) constexpr -> bool {
return value < 0.f;
};

inline constexpr auto IsProcCodeInvalid = [](int procCode) constexpr -> bool {
return procCode == 0;
};

inline constexpr auto CheckCalibrationTypeInvalid = [](int type) constexpr -> bool {
return type < TPCCalibTypeStart || type > TPCCalibTypeEnd;
};

inline constexpr auto GetNumDegreesOfFreedom = [](int Ntrk) constexpr -> int {
return 2 * Ntrk - 3;
};

// Shared histogram class names
namespace histograms
{
// Event histograms names
inline constexpr char EventBeforeCuts[] = "Event_BeforeCuts";
inline constexpr char EventAfterCuts[] = "Event_AfterCuts";
inline constexpr char EventMCTruth[] = "Event_MCTruth";

// Track histogram names
inline constexpr char TrackBarrelBeforeCuts[] = "TrackBarrel_BeforeCuts";
inline constexpr char TrackBarrelAfterCuts[] = "TrackBarrel_";

inline constexpr char PairsBarrelSEPM[] = "PairsBarrelSEPM";
inline constexpr char PairsBarrelSEPP[] = "PairsBarrelSEPP";
inline constexpr char PairsBarrelSEMM[] = "PairsBarrelSEMM";

inline constexpr char PairsBarrelMEPM[] = "PairsBarrelMEPM";
inline constexpr char PairsBarrelMEPP[] = "PairsBarrelMEPP";
inline constexpr char PairsBarrelMEMM[] = "PairsBarrelMEMM";

// Muon histogram names
inline constexpr char MuonBeforeCuts[] = "Muons_BeforeCuts";
inline constexpr char TrackMuonBeforeCuts[] = "TrackMuon_BeforeCuts";
inline constexpr char TrackMuonAfterCuts[] = "TrackMuon_";

inline constexpr char PairsMuonSEPM[] = "PairsMuonSEPM";
inline constexpr char PairsMuonSEPP[] = "PairsMuonSEPP";
inline constexpr char PairsMuonSEMM[] = "PairsMuonSEMM";

inline constexpr char PairsMuonMEPM[] = "PairsMuonMEPM";
inline constexpr char PairsMuonMEPP[] = "PairsMuonMEPP";
inline constexpr char PairsMuonMEMM[] = "PairsMuonMEMM";
} // namespace histograms

namespace devices
{
inline constexpr char EventSelection[] = "analysis-event-selection";
inline constexpr char TrackSelection[] = "analysis-track-selection";
inline constexpr char MuonSelection[] = "analysis-muon-selection";
inline constexpr char PrefilterSelection[] = "analysis-prefilter-selection";
inline constexpr char SameEventPairing[] = "analysis-same-event-pairing";
inline constexpr char AsymmetricPairing[] = "analysis-asymmetric-pairing";
inline constexpr char DileptonTrack[] = "analysis-dilepton-track";
inline constexpr char DileptonTrackTrack[] = "analysis-dilepton-track-track";
} // namespace devices

// Defaults
namespace defaults
{
// Event selection defaults
inline constexpr int EventTagStartBit = 56;
inline constexpr float MaxAbsVertexZCm = 10.f;
inline constexpr char DefaultRCTLabel[] = "CBT";

inline constexpr int NumDalitzSelections = 8;

inline constexpr int NumTPCPostCalibrationTypes = 4;

// Track defaults
inline constexpr int NumDCAPars = 2;
inline constexpr int IndexDCAxy = 0;
inline constexpr int IndexDCAz = 1;
inline constexpr double InitialDCA = 1e10;

inline constexpr int RotationType1 = 1;
inline constexpr int RotationType2 = 2;
inline constexpr int RotationType3 = 3;

inline constexpr int BdtSingleClassOutput = 1;
inline constexpr int BdtMultiClassOutput = 3;

// Bimodality defaults
inline constexpr int BimodalMinDataSize = 3;
inline constexpr float BimodalityInvalidBinWidth = -1.0;
inline constexpr float BimodalityBinWidth = 0.005;

inline constexpr float BimodalityDCAFrac001 = 0.01;
inline constexpr float BimodalityDCAFrac002 = 0.02;
inline constexpr float BimodalityDCAFrac005 = 0.05;
inline constexpr float BimodalityDCAFrac01 = 0.1;
inline constexpr float BimodalityDCAFrac02 = 0.2;
inline constexpr float BimodalityDCAFrac05 = 0.5;
inline constexpr float BimodalityDCAFrac1 = 1.00;

// KFParticle defaults
inline constexpr int KFParticleMassConstrainedConstruction = 2;
inline constexpr int KFParticleLegacyConstructionMethod = 3;

inline constexpr int TrkCovEntries = 21;
inline constexpr int NumTrkCovPars = 6;

inline constexpr int TrkCovEntriesNoX = 15;
inline constexpr int NumTrkCovParsNoX = 5;

inline constexpr int NumTrkComponents = 3;

// Vertexing defaults
inline constexpr float InvalidVertexingError = 1.e8f;
inline constexpr float VertexingLxyzTolerance = 1.0e-8f;
inline constexpr float InitialShift = 0.0f;

inline constexpr float GJMinMagnitude = 1.e-6f;

// Detector defaults
inline constexpr int PostCalibElectron = 0;
inline constexpr int PostCalibPion = 1;
inline constexpr int PostCalibKaon = 2;
inline constexpr int PostCalibProton = 3;

inline constexpr int TPCPIDCalibrationMeanSigma = 1;
inline constexpr int TPCPIDCalibrationMeanSigmaStatus = 2;

inline constexpr int NumITSLayers = 7;

inline constexpr int NumMFTLayers = 10;
inline constexpr float MuonAbsorberExitZ = -505.; // cm

inline constexpr double InvalidZnEnergy = -1.e12;
inline constexpr int ZDCNeutronNTowers = 4;

inline constexpr float CurvatureNormalizationFactor = 2.466;

// Hadron defaults
inline constexpr float InitialHadronMass = 0.0f;

// Lifetimes
inline constexpr float LifetimeBPlus = 1.638e-12f; // s
inline constexpr float LifetimeB0 = 1.517e-12f; // s

} // namespace defaults

} // namespace o2::dqconstants

#endif // PWGDQ_CORE_DQCONSTANTS_H_
40 changes: 23 additions & 17 deletions PWGDQ/Core/VarManager.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,15 @@
// 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.
//
/// \author Ionut Cristian Arsene <iarsene@cern.ch, i.c.arsene@fys.uio.no>, Oslo
/// \brief Class to handle analysis variables
/// \file VarManager.cxx

#include "PWGDQ/Core/VarManager.h"

#include "PWGDQ/Core/DQConstants.h"

#include "Common/Core/RecoDecay.h"
#include "Tools/KFparticle/KFUtilities.h"

Expand Down Expand Up @@ -146,7 +152,7 @@ void VarManager::ResetValues(int startValue, int endValue, float* values)
if (!values) {
values = fgValues;
}
for (Int_t i = startValue; i < endValue; ++i) {
for (int i = startValue; i < endValue; ++i) {
values[i] = -9999.;
}
}
Expand Down Expand Up @@ -259,37 +265,37 @@ double VarManager::ComputePIDcalibration(int species, double nSigmaValue)
// species: 0 - electron, 1 - pion, 2 - kaon, 3 - proton
// Depending on the PID calibration type, we use different types of calibration histograms

if (fgCalibrationType == 1) {
if (fgCalibrationType == o2::dqconstants::defaults::TPCPIDCalibrationMeanSigma) {
// get the calibration histograms
CalibObjects calibMean = kTPCElectronMean;
CalibObjects calibSigma = kTPCElectronSigma;
switch (species) {
case 0:
case o2::dqconstants::defaults::PostCalibElectron:
calibMean = kTPCElectronMean;
calibSigma = kTPCElectronSigma;
break;
case 1:
case o2::dqconstants::defaults::PostCalibPion:
calibMean = kTPCPionMean;
calibSigma = kTPCPionSigma;
break;
case 2:
case o2::dqconstants::defaults::PostCalibKaon:
calibMean = kTPCKaonMean;
calibSigma = kTPCKaonSigma;
break;
case 3:
case o2::dqconstants::defaults::PostCalibProton:
calibMean = kTPCProtonMean;
calibSigma = kTPCProtonSigma;
break;
default:
LOG(fatal) << "Invalid species for PID calibration: " << species;
return -999.0; // Return zero if species is invalid
return o2::dqconstants::InvalidValueI; // Return zero if species is invalid
}

TH3F* calibMeanHist = dynamic_cast<TH3F*>(fgCalibs[calibMean]);
TH3F* calibSigmaHist = dynamic_cast<TH3F*>(fgCalibs[calibSigma]);
if (!calibMeanHist || !calibSigmaHist) {
LOG(fatal) << "Calibration histograms not found for species: " << species;
return -999.0; // Return zero if histograms are not found
return o2::dqconstants::InvalidValueI; // Return zero if histograms are not found
}

// Get the bin indices for the calibration histograms
Expand All @@ -306,43 +312,43 @@ double VarManager::ComputePIDcalibration(int species, double nSigmaValue)
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) {
} else if (fgCalibrationType == o2::dqconstants::defaults::TPCPIDCalibrationMeanSigmaStatus) {
// get the calibration histograms
CalibObjects calibMean = kTPCElectronMean;
CalibObjects calibSigma = kTPCElectronSigma;
CalibObjects calibStatus = kTPCElectronStatus;
switch (species) {
case 0:
case o2::dqconstants::defaults::PostCalibElectron:
calibMean = kTPCElectronMean;
calibSigma = kTPCElectronSigma;
calibStatus = kTPCElectronStatus;
break;
case 1:
case o2::dqconstants::defaults::PostCalibPion:
calibMean = kTPCPionMean;
calibSigma = kTPCPionSigma;
calibStatus = kTPCPionStatus;
break;
case 2:
case o2::dqconstants::defaults::PostCalibKaon:
calibMean = kTPCKaonMean;
calibSigma = kTPCKaonSigma;
calibStatus = kTPCKaonStatus;
break;
case 3:
case o2::dqconstants::defaults::PostCalibProton:
calibMean = kTPCProtonMean;
calibSigma = kTPCProtonSigma;
calibStatus = kTPCProtonStatus;
break;
default:
LOG(fatal) << "Invalid species for PID calibration: " << species;
return -999.0; // Return zero if species is invalid
return o2::dqconstants::InvalidValueI; // Return zero if species is invalid
}

THnF* calibMeanHist = dynamic_cast<THnF*>(fgCalibs[calibMean]);
THnF* calibSigmaHist = dynamic_cast<THnF*>(fgCalibs[calibSigma]);
THnF* calibStatusHist = dynamic_cast<THnF*>(fgCalibs[calibStatus]);
if (!calibMeanHist || !calibSigmaHist || !calibStatusHist) {
LOG(fatal) << "Calibration histograms not found for species: " << species;
return -999.0; // Return zero if histograms are not found
return o2::dqconstants::InvalidValueI; // Return zero if histograms are not found
}

// Get the bin indices for the calibration histograms
Expand Down Expand Up @@ -540,7 +546,7 @@ std::tuple<float, float, float, float, float> VarManager::BimodalityCoefficientU
// Bimodality coefficient = (skewness^2 + 1) / kurtosis
// return a tuple including the coefficient, mean, RMS, skewness, and kurtosis
size_t n = data.size();
if (n < 3) {
if (n < o2::dqconstants::defaults::BimodalMinDataSize) {
return std::make_tuple(-1.0, -1.0, -1.0, -1.0, -1.0);
}
float mean = std::accumulate(data.begin(), data.end(), 0.0) / n;
Expand Down Expand Up @@ -725,7 +731,7 @@ void VarManager::SetDefaultVarNames()
//
// Set default variable names
//
for (Int_t ivar = 0; ivar < kNVars; ++ivar) {
for (int ivar = 0; ivar < kNVars; ++ivar) {
fgVariableNames[ivar] = "DEFAULT NOT DEFINED";
fgVariableUnits[ivar] = "n/a";
}
Expand Down
Loading
Loading