Skip to content
Merged
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
84 changes: 42 additions & 42 deletions PWGLF/DataModel/LFSigmaTables.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ namespace v0SigmaCandidate
//______________________________________________________
// REGULAR COLUMNS FOR INDEXING
// FOR DERIVED
DECLARE_SOA_INDEX_COLUMN(Sigma0Collision, sigma0Collision); //!
DECLARE_SOA_INDEX_COLUMN(Sigma0Collision, sigma0Collision); //!
} // namespace v0SigmaCandidate

// for real data
Expand Down Expand Up @@ -77,22 +77,22 @@ DECLARE_SOA_COLUMN(PhotonDCAPosPV, photonDCAPosPV, float);
DECLARE_SOA_COLUMN(PhotonZconv, photonZconv, float);
DECLARE_SOA_COLUMN(PhotonEta, photonEta, float);
DECLARE_SOA_COLUMN(PhotonY, photonY, float);
DECLARE_SOA_COLUMN(PhotonPosTPCNSigma, photonPosTPCNSigma, float);
DECLARE_SOA_COLUMN(PhotonNegTPCNSigma, photonNegTPCNSigma, float);
DECLARE_SOA_COLUMN(PhotonPosTPCCrossedRows, photonPosTPCCrossedRows, uint8_t);
DECLARE_SOA_COLUMN(PhotonNegTPCCrossedRows, photonNegTPCCrossedRows, uint8_t);
DECLARE_SOA_COLUMN(PhotonPosTPCNSigma, photonPosTPCNSigma, float);
DECLARE_SOA_COLUMN(PhotonNegTPCNSigma, photonNegTPCNSigma, float);
DECLARE_SOA_COLUMN(PhotonPosTPCCrossedRows, photonPosTPCCrossedRows, uint8_t);
DECLARE_SOA_COLUMN(PhotonNegTPCCrossedRows, photonNegTPCCrossedRows, uint8_t);
DECLARE_SOA_COLUMN(PhotonPosPt, photonPosPt, float);
DECLARE_SOA_COLUMN(PhotonNegPt, photonNegPt, float);
DECLARE_SOA_COLUMN(PhotonPosEta, photonPosEta, float);
DECLARE_SOA_COLUMN(PhotonNegEta, photonNegEta, float);
DECLARE_SOA_COLUMN(PhotonPosY, photonPosY, float);
DECLARE_SOA_COLUMN(PhotonNegY, photonNegY, float);
DECLARE_SOA_COLUMN(PhotonPsiPair, photonPsiPair, float);
DECLARE_SOA_COLUMN(PhotonPosITSCls, photonPosITSCls, int);
DECLARE_SOA_COLUMN(PhotonNegITSCls, photonNegITSCls, int);
DECLARE_SOA_COLUMN(PhotonPosITSClSize, photonPosITSClSize, uint32_t);
DECLARE_SOA_COLUMN(PhotonNegITSClSize, photonNegITSClSize, uint32_t);
DECLARE_SOA_COLUMN(PhotonV0Type, photonV0Type, uint8_t);
DECLARE_SOA_COLUMN(PhotonPosITSCls, photonPosITSCls, int);
DECLARE_SOA_COLUMN(PhotonNegITSCls, photonNegITSCls, int);
DECLARE_SOA_COLUMN(PhotonPosITSClSize, photonPosITSClSize, uint32_t);
DECLARE_SOA_COLUMN(PhotonNegITSClSize, photonNegITSClSize, uint32_t);
DECLARE_SOA_COLUMN(PhotonV0Type, photonV0Type, uint8_t);
DECLARE_SOA_COLUMN(GammaBDTScore, gammaBDTScore, float);

} // namespace v0SigmaPhotonExtras
Expand Down Expand Up @@ -167,38 +167,38 @@ DECLARE_SOA_COLUMN(AntiLambdaBDTScore, antilambdaBDTScore, float);
} // namespace v0SigmaLambdaExtras

DECLARE_SOA_TABLE(V0SigmaLambdaExtras, "AOD", "V0SIGMALAMBDA",
v0SigmaLambdaExtras::LambdaPt,
v0SigmaLambdaExtras::LambdaMass,
v0SigmaLambdaExtras::LambdaQt,
v0SigmaLambdaExtras::LambdaAlpha,
v0SigmaLambdaExtras::LambdaRadius,
v0SigmaLambdaExtras::LambdaCosPA,
v0SigmaLambdaExtras::LambdaDCADau,
v0SigmaLambdaExtras::LambdaDCANegPV,
v0SigmaLambdaExtras::LambdaDCAPosPV,
v0SigmaLambdaExtras::LambdaEta,
v0SigmaLambdaExtras::LambdaY,
v0SigmaLambdaExtras::LambdaPosPrTPCNSigma,
v0SigmaLambdaExtras::LambdaPosPiTPCNSigma,
v0SigmaLambdaExtras::LambdaNegPrTPCNSigma,
v0SigmaLambdaExtras::LambdaNegPiTPCNSigma,
v0SigmaLambdaExtras::LambdaPosTPCCrossedRows,
v0SigmaLambdaExtras::LambdaNegTPCCrossedRows,
v0SigmaLambdaExtras::LambdaPosPt,
v0SigmaLambdaExtras::LambdaNegPt,
v0SigmaLambdaExtras::LambdaPosEta,
v0SigmaLambdaExtras::LambdaNegEta,
v0SigmaLambdaExtras::LambdaPosPrY,
v0SigmaLambdaExtras::LambdaPosPiY,
v0SigmaLambdaExtras::LambdaNegPrY,
v0SigmaLambdaExtras::LambdaNegPiY,
v0SigmaLambdaExtras::LambdaPosITSCls,
v0SigmaLambdaExtras::LambdaNegITSCls,
v0SigmaLambdaExtras::LambdaPosITSClSize,
v0SigmaLambdaExtras::LambdaNegITSClSize,
v0SigmaLambdaExtras::LambdaV0Type,
v0SigmaLambdaExtras::LambdaBDTScore,
v0SigmaLambdaExtras::AntiLambdaBDTScore);
v0SigmaLambdaExtras::LambdaPt,
v0SigmaLambdaExtras::LambdaMass,
v0SigmaLambdaExtras::LambdaQt,
v0SigmaLambdaExtras::LambdaAlpha,
v0SigmaLambdaExtras::LambdaRadius,
v0SigmaLambdaExtras::LambdaCosPA,
v0SigmaLambdaExtras::LambdaDCADau,
v0SigmaLambdaExtras::LambdaDCANegPV,
v0SigmaLambdaExtras::LambdaDCAPosPV,
v0SigmaLambdaExtras::LambdaEta,
v0SigmaLambdaExtras::LambdaY,
v0SigmaLambdaExtras::LambdaPosPrTPCNSigma,
v0SigmaLambdaExtras::LambdaPosPiTPCNSigma,
v0SigmaLambdaExtras::LambdaNegPrTPCNSigma,
v0SigmaLambdaExtras::LambdaNegPiTPCNSigma,
v0SigmaLambdaExtras::LambdaPosTPCCrossedRows,
v0SigmaLambdaExtras::LambdaNegTPCCrossedRows,
v0SigmaLambdaExtras::LambdaPosPt,
v0SigmaLambdaExtras::LambdaNegPt,
v0SigmaLambdaExtras::LambdaPosEta,
v0SigmaLambdaExtras::LambdaNegEta,
v0SigmaLambdaExtras::LambdaPosPrY,
v0SigmaLambdaExtras::LambdaPosPiY,
v0SigmaLambdaExtras::LambdaNegPrY,
v0SigmaLambdaExtras::LambdaNegPiY,
v0SigmaLambdaExtras::LambdaPosITSCls,
v0SigmaLambdaExtras::LambdaNegITSCls,
v0SigmaLambdaExtras::LambdaPosITSClSize,
v0SigmaLambdaExtras::LambdaNegITSClSize,
v0SigmaLambdaExtras::LambdaV0Type,
v0SigmaLambdaExtras::LambdaBDTScore,
v0SigmaLambdaExtras::AntiLambdaBDTScore);

// for MC data
namespace v0SigmaMCCandidate
Expand Down
38 changes: 19 additions & 19 deletions PWGLF/TableProducer/Strangeness/lambdakzeromlselection.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ struct lambdakzeromlselection {
Produces<aod::V0GammaMLScores> gammaMLSelections; // optionally aggregate information from ML output for posterior analysis (derived data)
Produces<aod::V0LambdaMLScores> lambdaMLSelections; // optionally aggregate information from ML output for posterior analysis (derived data)
Produces<aod::V0AntiLambdaMLScores> antiLambdaMLSelections; // optionally aggregate information from ML output for posterior analysis (derived data)
Produces<aod::V0K0ShortMLScores> kzeroShortMLSelections; // optionally aggregate information from ML output for posterior analysis (derived data)
Produces<aod::V0K0ShortMLScores> kzeroShortMLSelections; // optionally aggregate information from ML output for posterior analysis (derived data)

HistogramRegistry histos{"Histos", {}, OutputObjHandlingPolicy::AnalysisObject};

Expand All @@ -97,7 +97,7 @@ struct lambdakzeromlselection {
//// Order: Z, V0radius, PA, DCApostopv, DCAnegtopv, DCAV0daughters, DCAv0topv, PsiPair
Configurable<std::vector<int>> Topo_SelMap{"Topo_SelMap", std::vector<int>{0, 1, 1, 1, 1, 1, 1, 0}, "Mask to select basic topological features for ML Inference"};

//// Casting
//// Casting
std::vector<int> CastKine_SelMap, CastTopo_SelMap, Feature_SelMask;

// CCDB configuration
Expand Down Expand Up @@ -177,7 +177,7 @@ struct lambdakzeromlselection {
if (PredictKZeroShort)
kzeroshort_bdt.initModel(BDTLocalPathKZeroShort.value, enableOptimizations.value);
}

/// Here the Configurables are passed to std::vectors
CastKine_SelMap = (std::vector<int>)Kine_SelMap;
CastTopo_SelMap = (std::vector<int>)Topo_SelMap;
Expand All @@ -189,47 +189,48 @@ struct lambdakzeromlselection {
LOG(info) << "Feature_SelMask size: " << Feature_SelMask.size();
}

template<typename T, typename U>
std::vector<float> extractSelectedElements(const std::vector<T>& base_features, const std::vector<U>& Sel_mask) {
template <typename T, typename U>
std::vector<float> extractSelectedElements(const std::vector<T>& base_features, const std::vector<U>& Sel_mask)
{
std::vector<float> selected_elements;
for (size_t i = 0; i < Sel_mask.size(); ++i) {
if (Sel_mask[i]>=1) { // If the mask value is true, select the corresponding element
selected_elements.push_back(base_features[i]);
}
if (Sel_mask[i] >= 1) { // If the mask value is true, select the corresponding element
selected_elements.push_back(base_features[i]);
}
}
return selected_elements;
}
}

// Process candidate and store properties in object
template <typename TV0Object, typename T>
void processCandidate(TV0Object const& cand, const std::vector<T>& Feature_SelMask)
{
// Select features
std::vector<float> base_features{cand.mLambda(), cand.mAntiLambda(),
cand.mGamma(), cand.mK0Short(),
cand.pt(), static_cast<float>(cand.qtarm()), cand.alpha(),
std::vector<float> base_features{cand.mLambda(), cand.mAntiLambda(),
cand.mGamma(), cand.mK0Short(),
cand.pt(), static_cast<float>(cand.qtarm()), cand.alpha(),
cand.positiveeta(), cand.negativeeta(), cand.eta(),
cand.z(), cand.v0radius(), static_cast<float>(TMath::ACos(cand.v0cosPA())),
cand.dcapostopv(), cand.dcanegtopv(), cand.dcaV0daughters(),
cand.z(), cand.v0radius(), static_cast<float>(TMath::ACos(cand.v0cosPA())),
cand.dcapostopv(), cand.dcanegtopv(), cand.dcaV0daughters(),
cand.dcav0topv(), cand.psipair()};

// Apply mask to select features
std::vector<float> inputFeatures = extractSelectedElements(base_features, Feature_SelMask);

// calculate classifier output
if (PredictLambda){
if (PredictLambda) {
float* LambdaProbability = lambda_bdt.evalModel(inputFeatures);
lambdaMLSelections(LambdaProbability[1]);
}
if (PredictGamma){
if (PredictGamma) {
float* GammaProbability = gamma_bdt.evalModel(inputFeatures);
gammaMLSelections(GammaProbability[1]);
}
if (PredictAntiLambda){
if (PredictAntiLambda) {
float* AntiLambdaProbability = antilambda_bdt.evalModel(inputFeatures);
antiLambdaMLSelections(AntiLambdaProbability[1]);
}
if (PredictKZeroShort){
if (PredictKZeroShort) {
float* KZeroShortProbability = kzeroshort_bdt.evalModel(inputFeatures);
kzeroShortMLSelections(KZeroShortProbability[1]);
}
Expand Down Expand Up @@ -266,4 +267,3 @@ WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
{
return WorkflowSpec{adaptAnalysisTask<lambdakzeromlselection>(cfgc)};
}

89 changes: 43 additions & 46 deletions PWGLF/TableProducer/Strangeness/sigma0builder.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -64,12 +64,12 @@ using V0StandardDerivedDatas = soa::Join<aod::V0Cores, aod::V0CollRefs, aod::V0E
struct sigma0builder {
SliceCache cache;

Produces<aod::Sigma0Collision> v0sigma0Coll; // characterises collisions
Produces<aod::V0Sigma0CollRefs> v0Sigma0CollRefs; // characterises collisions
Produces<aod::Sigma0Collision> v0sigma0Coll; // characterises collisions
Produces<aod::V0Sigma0CollRefs> v0Sigma0CollRefs; // characterises collisions
Produces<aod::V0SigmaCandidates> v0Sigmas; // save sigma0 candidates for analysis
Produces<aod::V0SigmaPhotonExtras> v0SigmaPhotonExtras; // save sigma0 candidates for analysis
Produces<aod::V0SigmaLambdaExtras> v0SigmaLambdaExtras; // save sigma0 candidates for analysis
Produces<aod::V0SigmaMCCandidates> v0MCSigmas;
Produces<aod::V0SigmaPhotonExtras> v0SigmaPhotonExtras; // save sigma0 candidates for analysis
Produces<aod::V0SigmaLambdaExtras> v0SigmaLambdaExtras; // save sigma0 candidates for analysis
Produces<aod::V0SigmaMCCandidates> v0MCSigmas;

// For manual sliceBy
Preslice<V0DerivedMCDatas> perCollisionMCDerived = o2::aod::v0data::straCollisionId;
Expand Down Expand Up @@ -97,11 +97,11 @@ struct sigma0builder {
//// Photon criteria:
Configurable<float> PhotonDauPseudoRap{"PhotonDauPseudoRap", 1.0, "Max pseudorapidity of daughter tracks"};
Configurable<float> Photondcadautopv{"Photondcadautopv", 0.01, "Min DCA daughter To PV (cm)"};
Configurable<float> Photondcav0dau{"Photondcav0dau", 3.0, "Max DCA V0 Daughters (cm)"};
Configurable<float> Photondcav0dau{"Photondcav0dau", 3.0, "Max DCA V0 Daughters (cm)"};
Configurable<float> PhotonMinRadius{"PhotonMinRadius", 0.5, "Min photon conversion radius (cm)"};
Configurable<float> PhotonMaxRadius{"PhotonMaxRadius", 250, "Max photon conversion radius (cm)"};
Configurable<float> PhotonMaxMass{"PhotonMaxMass", 0.2, "Max photon mass (GeV/c^{2})"};

//// Sigma0 criteria:
Configurable<float> Sigma0Window{"Sigma0Window", 0.04, "Mass window around expected (in GeV/c2)"};

Expand Down Expand Up @@ -130,35 +130,35 @@ struct sigma0builder {
float GammaBDTScore = -1;
float LambdaBDTScore = -1;
float AntiLambdaBDTScore = -1;
if ((lambda.v0Type()==0) || (gamma.v0Type()==0))

if ((lambda.v0Type() == 0) || (gamma.v0Type() == 0))
return false;

if constexpr (requires { gamma.gammaBDTScore(); } &&
requires { lambda.lambdaBDTScore(); } &&
requires { lambda.antiLambdaBDTScore(); }){

LOGF(info, "X-check: ML Selection is on!");
// Gamma selection:
if (gamma.gammaBDTScore() <= Gamma_MLThreshold)
return false;

// Lambda and AntiLambda selection
if ((lambda.lambdaBDTScore() <= Lambda_MLThreshold) && (lambda.antiLambdaBDTScore() <= AntiLambda_MLThreshold))
return false;

GammaBDTScore = gamma.gammaBDTScore();
LambdaBDTScore = lambda.lambdaBDTScore();
AntiLambdaBDTScore = lambda.antiLambdaBDTScore();
}
else{
if constexpr (
requires { gamma.gammaBDTScore(); } &&
requires { lambda.lambdaBDTScore(); } &&
requires { lambda.antiLambdaBDTScore(); }) {

LOGF(info, "X-check: ML Selection is on!");
// Gamma selection:
if (gamma.gammaBDTScore() <= Gamma_MLThreshold)
return false;

// Lambda and AntiLambda selection
if ((lambda.lambdaBDTScore() <= Lambda_MLThreshold) && (lambda.antiLambdaBDTScore() <= AntiLambda_MLThreshold))
return false;

GammaBDTScore = gamma.gammaBDTScore();
LambdaBDTScore = lambda.lambdaBDTScore();
AntiLambdaBDTScore = lambda.antiLambdaBDTScore();
} else {
// Standard selection
// Gamma basic selection criteria:
if (TMath::Abs(gamma.mGamma()) > PhotonMaxMass)
return false;
if ((TMath::Abs(gamma.negativeeta()) > PhotonDauPseudoRap) || (TMath::Abs(gamma.positiveeta()) > PhotonDauPseudoRap))
return false;
if ((gamma.dcapostopv() > Photondcadautopv) || ( gamma.dcanegtopv() > Photondcadautopv))
if ((gamma.dcapostopv() > Photondcadautopv) || (gamma.dcanegtopv() > Photondcadautopv))
return false;
if (gamma.dcaV0daughters() > Photondcav0dau)
return false;
Expand Down Expand Up @@ -187,7 +187,7 @@ struct sigma0builder {
sigmaCandidate.Rapidity = RecoDecay::y(std::array{gamma.px() + lambda.px(), gamma.py() + lambda.py(), gamma.pz() + lambda.pz()}, o2::constants::physics::MassSigma0);

if (TMath::Abs(sigmaCandidate.mass - 1.192642) > Sigma0Window)
return false;
return false;

// Sigma related
float fSigmapT = sigmaCandidate.pT;
Expand Down Expand Up @@ -221,7 +221,7 @@ struct sigma0builder {
float fPhotonNegEta = gamma.negativeeta();
float fPhotonPosY = RecoDecay::y(std::array{gamma.pxpos(), gamma.pypos(), gamma.pzpos()}, o2::constants::physics::MassElectron);
float fPhotonNegY = RecoDecay::y(std::array{gamma.pxneg(), gamma.pyneg(), gamma.pzneg()}, o2::constants::physics::MassElectron);
float fPhotonPsiPair = gamma.psipair();
float fPhotonPsiPair = gamma.psipair();
int fPhotonPosITSCls = posTrackGamma.itsNCls();
int fPhotonNegITSCls = negTrackGamma.itsNCls();
uint32_t fPhotonPosITSClSize = posTrackGamma.itsClusterSizes();
Expand Down Expand Up @@ -265,21 +265,20 @@ struct sigma0builder {

// Filling TTree for ML analysis
v0Sigmas(fSigmapT, fSigmaMass, fSigmaRap);

v0SigmaPhotonExtras(fPhotonPt, fPhotonMass, fPhotonQt, fPhotonAlpha, fPhotonRadius,
fPhotonCosPA, fPhotonDCADau, fPhotonDCANegPV, fPhotonDCAPosPV, fPhotonZconv,
fPhotonEta, fPhotonY,fPhotonPosTPCNSigma, fPhotonNegTPCNSigma, fPhotonPosTPCCrossedRows,
fPhotonEta, fPhotonY, fPhotonPosTPCNSigma, fPhotonNegTPCNSigma, fPhotonPosTPCCrossedRows,
fPhotonNegTPCCrossedRows, fPhotonPosPt, fPhotonNegPt, fPhotonPosEta,
fPhotonNegEta, fPhotonPosY, fPhotonNegY, fPhotonPsiPair,
fPhotonPosITSCls, fPhotonNegITSCls, fPhotonPosITSClSize, fPhotonNegITSClSize,
fPhotonV0Type, GammaBDTScore);


v0SigmaLambdaExtras(fLambdaPt,fLambdaMass,fLambdaQt, fLambdaAlpha,

v0SigmaLambdaExtras(fLambdaPt, fLambdaMass, fLambdaQt, fLambdaAlpha,
fLambdaRadius, fLambdaCosPA, fLambdaDCADau, fLambdaDCANegPV,
fLambdaDCAPosPV, fLambdaEta, fLambdaY, fLambdaPosPrTPCNSigma,
fLambdaPosPiTPCNSigma, fLambdaNegPrTPCNSigma, fLambdaNegPiTPCNSigma, fLambdaPosTPCCrossedRows,
fLambdaNegTPCCrossedRows, fLambdaPosPt, fLambdaNegPt,fLambdaPosEta,
fLambdaNegTPCCrossedRows, fLambdaPosPt, fLambdaNegPt, fLambdaPosEta,
fLambdaNegEta, fLambdaPosPrY, fLambdaPosPiY, fLambdaNegPrY, fLambdaNegPiY,
fLambdaPosITSCls, fLambdaNegITSCls, fLambdaPosITSClSize, fLambdaNegITSClSize,
fLambdaV0Type, LambdaBDTScore, AntiLambdaBDTScore);
Expand All @@ -301,9 +300,9 @@ struct sigma0builder {
continue;

bool fIsSigma = false;
if ((gamma.pdgCode()==22) && (gamma.pdgCodeMother()==3212) && (lambda.pdgCode()==3122) && (lambda.pdgCodeMother()==3212) && (gamma.motherMCPartId() == lambda.motherMCPartId()))
if ((gamma.pdgCode() == 22) && (gamma.pdgCodeMother() == 3212) && (lambda.pdgCode() == 3122) && (lambda.pdgCodeMother() == 3212) && (gamma.motherMCPartId() == lambda.motherMCPartId()))
fIsSigma = true;

v0MCSigmas(fIsSigma);
}
}
Expand All @@ -328,11 +327,11 @@ struct sigma0builder {

nSigmaCandidates++;
if (nSigmaCandidates % 5000 == 0) {
LOG(info) << "Sigma0 Candidates built: " << nSigmaCandidates;
LOG(info) << "Sigma0 Candidates built: " << nSigmaCandidates;
}
v0Sigma0CollRefs(v0sigma0Coll.lastIndex());
v0Sigma0CollRefs(v0sigma0Coll.lastIndex());
}
}
}
}
}

Expand All @@ -354,13 +353,12 @@ struct sigma0builder {

nSigmaCandidates++;
if (nSigmaCandidates % 5000 == 0) {
LOG(info) << "Sigma0 Candidates built: " << nSigmaCandidates;
LOG(info) << "Sigma0 Candidates built: " << nSigmaCandidates;
}
v0Sigma0CollRefs(v0sigma0Coll.lastIndex());
v0Sigma0CollRefs(v0sigma0Coll.lastIndex());
}
}
}
}

}
PROCESS_SWITCH(sigma0builder, processMonteCarlo, "Fill sigma0 MC table", false);
PROCESS_SWITCH(sigma0builder, processSTDSelection, "Select gammas and lambdas with standard cuts", true);
Expand All @@ -371,4 +369,3 @@ WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
{
return WorkflowSpec{adaptAnalysisTask<sigma0builder>(cfgc)};
}

Loading