Skip to content

Commit cb366b9

Browse files
committed
Add a table for ML study
1 parent 4799092 commit cb366b9

File tree

1 file changed

+95
-11
lines changed

1 file changed

+95
-11
lines changed

PWGHF/TableProducer/treeCreatorXicToXiPiPi.cxx

Lines changed: 95 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ DECLARE_SOA_TABLE(HfCandXicToXiPiPiLites, "AOD", "HFXICXI2PILITE",
117117
full::ImpactParameterNormalisedPi1,
118118
full::MaxNormalisedDeltaIP);
119119

120-
DECLARE_SOA_TABLE(HfCandXicToXiPiPiLiteKfs, "AOD", "HFXICXI2PILITKF",
120+
DECLARE_SOA_TABLE(HfCandXicToXiPiPiLiteKfs, "AOD", "HFXICXI2PILITEKF",
121121
full::ParticleFlag,
122122
hf_cand_mc_flag::OriginMcRec,
123123
full::CandidateSelFlag,
@@ -186,6 +186,34 @@ DECLARE_SOA_TABLE(HfCandXicToXiPiPiLiteKfs, "AOD", "HFXICXI2PILITKF",
186186
hf_cand_xic_to_xi_pi_pi::DcaXYPi0Xi,
187187
hf_cand_xic_to_xi_pi_pi::DcaXYPi1Xi);
188188

189+
DECLARE_SOA_TABLE(HfCandXicToXiPiPiLiteMLs, "AOD", "HFXICXI2PILITEML",
190+
full::ParticleFlag,
191+
hf_cand_mc_flag::OriginMcRec,
192+
full::CandidateSelFlag,
193+
full::Y,
194+
full::Eta,
195+
full::Phi,
196+
full::P,
197+
full::Pt,
198+
full::M,
199+
hf_cand_xic_to_xi_pi_pi::InvMassXi,
200+
hf_cand_xic_to_xi_pi_pi::InvMassLambda,
201+
full::DecayLength,
202+
full::DecayLengthXY,
203+
full::Cpa,
204+
full::CpaXY,
205+
hf_cand_xic_to_xi_pi_pi::CpaXi,
206+
hf_cand_xic_to_xi_pi_pi::CpaXYXi,
207+
hf_cand_xic_to_xi_pi_pi::CpaLambda,
208+
hf_cand_xic_to_xi_pi_pi::CpaXYLambda,
209+
full::ImpactParameterXi,
210+
full::ImpactParameterNormalisedXi,
211+
full::ImpactParameterPi0,
212+
full::ImpactParameterNormalisedPi0,
213+
full::ImpactParameterPi1,
214+
full::ImpactParameterNormalisedPi1,
215+
full::MaxNormalisedDeltaIP);
216+
189217
DECLARE_SOA_TABLE(HfCandXicToXiPiPiFulls, "AOD", "HFXICXI2PIFULL",
190218
full::ParticleFlag,
191219
hf_cand_mc_flag::OriginMcRec,
@@ -343,12 +371,14 @@ DECLARE_SOA_TABLE(HfCandXicToXiPiPiFullPs, "AOD", "HFXICXI2PIFULLP",
343371
struct HfTreeCreatorXicToXiPiPi {
344372
Produces<o2::aod::HfCandXicToXiPiPiLites> rowCandidateLite;
345373
Produces<o2::aod::HfCandXicToXiPiPiLiteKfs> rowCandidateLiteKf;
374+
Produces<o2::aod::HfCandXicToXiPiPiLiteMLs> rowCandidateLiteMl;
346375
Produces<o2::aod::HfCandXicToXiPiPiFulls> rowCandidateFull;
347376
Produces<o2::aod::HfCandXicToXiPiPiFullKfs> rowCandidateFullKf;
348377
Produces<o2::aod::HfCandXicToXiPiPiFullPs> rowCandidateFullParticles;
349378

350379
Configurable<int> selectionFlagXic{"selectionFlagXic", 1, "Selection Flag for Xic"};
351380
Configurable<bool> fillCandidateLiteTable{"fillCandidateLiteTable", false, "Switch to fill lite table with candidate properties"};
381+
Configurable<bool> fillCandidateMlLiteTable{"fillCandidateMlLiteTable", false, "Switch to fill lite table with ML related variables"};
352382
Configurable<bool> fillGenParticleTable{"fillGenParticleTable", false, "Switch to fill table with MC truth for generated particles"};
353383
// parameters for production of training samples
354384
Configurable<bool> fillOnlySignal{"fillOnlySignal", false, "Flag to fill derived tables with signal for ML trainings"};
@@ -358,6 +388,7 @@ struct HfTreeCreatorXicToXiPiPi {
358388

359389
using SelectedCandidates = soa::Filtered<soa::Join<aod::HfCandXic, aod::HfSelXicToXiPiPi>>;
360390
using SelectedCandidatesKf = soa::Filtered<soa::Join<aod::HfCandXic, aod::HfCandXicKF, aod::HfSelXicToXiPiPi>>;
391+
using SelectedCandidatesML = soa::Filtered<soa::Join<aod::HfCandXic, aod::HfSelXicToXiPiPi>>;
361392
using SelectedCandidatesMc = soa::Filtered<soa::Join<aod::HfCandXic, aod::HfCandXicMcRec, aod::HfSelXicToXiPiPi>>;
362393
using SelectedCandidatesKfMc = soa::Filtered<soa::Join<aod::HfCandXic, aod::HfCandXicKF, aod::HfCandXicMcRec, aod::HfSelXicToXiPiPi>>;
363394
using MatchedGenXicToXiPiPi = soa::Filtered<soa::Join<aod::McParticles, aod::HfCandXicMcGen>>;
@@ -372,9 +403,16 @@ struct HfTreeCreatorXicToXiPiPi {
372403

373404
void init(InitContext const&)
374405
{
406+
std::array<bool, 5> doprocess{doprocessData, doprocessDataKf, doprocessDataWithML, doprocessMc, doprocessMcKf};
407+
if(std::accumulate(doprocess.begin(), doprocess.end(),0) == 0) {
408+
LOGP(fatal, "No process fuction enabled?");
409+
}
410+
if (std::accumulate(doprocess.begin(), doprocess.end(),0) != 1) {
411+
LOGP(fatal, "Only one process function can be enabled at a time.");
412+
}
375413
}
376414

377-
template <bool DoMc, bool DoKf, typename T>
415+
template <bool DoMc, bool DoKf, bool DoMl, typename T>
378416
void fillCandidateTable(const T& candidate)
379417
{
380418
int8_t particleFlag = candidate.sign();
@@ -636,6 +674,35 @@ struct HfTreeCreatorXicToXiPiPi {
636674
candidate.dcaXYPi1Xi());
637675
}
638676
}
677+
if constexpr (DoMl){
678+
rowCandidateLiteMl(
679+
particleFlag,
680+
originMc,
681+
candidate.isSelXicToXiPiPi(),
682+
candidate.y(o2::constants::physics::MassXiCPlus),
683+
candidate.eta(),
684+
candidate.phi(),
685+
candidate.p(),
686+
candidate.pt(),
687+
candidate.invMassXicPlus(),
688+
candidate.invMassXi(),
689+
candidate.invMassLambda(),
690+
candidate.decayLength(),
691+
candidate.decayLengthXY(),
692+
candidate.cpa(),
693+
candidate.cpaXY(),
694+
candidate.cpaXi(),
695+
candidate.cpaXYXi(),
696+
candidate.cpaLambda(),
697+
candidate.cpaXYLambda(),
698+
candidate.impactParameter0(),
699+
candidate.impactParameterNormalised0(),
700+
candidate.impactParameter1(),
701+
candidate.impactParameterNormalised1(),
702+
candidate.impactParameter2(),
703+
candidate.impactParameterNormalised2(),
704+
candidate.maxNormalisedDeltaIP());
705+
}
639706
}
640707

641708
void processData(SelectedCandidates const& candidates)
@@ -653,10 +720,10 @@ struct HfTreeCreatorXicToXiPiPi {
653720
continue;
654721
}
655722
}
656-
fillCandidateTable<false, false>(candidate);
723+
fillCandidateTable<false, false, false>(candidate);
657724
}
658725
}
659-
PROCESS_SWITCH(HfTreeCreatorXicToXiPiPi, processData, "Process data with DCAFitter reconstruction", true);
726+
PROCESS_SWITCH(HfTreeCreatorXicToXiPiPi, processData, "Process data with DCAFitter reconstruction", false);
660727

661728
void processDataKf(SelectedCandidatesKf const& candidates)
662729
{
@@ -673,11 +740,28 @@ struct HfTreeCreatorXicToXiPiPi {
673740
continue;
674741
}
675742
}
676-
fillCandidateTable<false, true>(candidate);
743+
fillCandidateTable<false, true, false>(candidate);
677744
}
678745
}
679746
PROCESS_SWITCH(HfTreeCreatorXicToXiPiPi, processDataKf, "Process data with KFParticle reconstruction", false);
680747

748+
void processDataWithML(SelectedCandidatesML const& candidates)
749+
{
750+
// Filling candidate properties
751+
rowCandidateLiteMl.reserve(candidates.size());
752+
753+
for (const auto& candidate : candidates) {
754+
if (fillOnlyBackground && downSampleBkgFactor < 1.) {
755+
float const pseudoRndm = candidate.ptProng1() * 1000. - static_cast<int64_t>(candidate.ptProng1() * 1000);
756+
if (pseudoRndm >= downSampleBkgFactor && candidate.pt() < ptMaxForDownSample) {
757+
continue;
758+
}
759+
}
760+
fillCandidateTable<false, false, true>(candidate);
761+
}
762+
}
763+
PROCESS_SWITCH(HfTreeCreatorXicToXiPiPi, processDataWithML, "Process data with DCAFitter reconstruction and ML", true);
764+
681765
void processMc(SelectedCandidatesMc const& candidates,
682766
MatchedGenXicToXiPiPi const& particles)
683767
{
@@ -689,7 +773,7 @@ struct HfTreeCreatorXicToXiPiPi {
689773
rowCandidateFull.reserve(recSig.size());
690774
}
691775
for (const auto& candidate : recSig) {
692-
fillCandidateTable<true, false>(candidate);
776+
fillCandidateTable<true, false, false>(candidate);
693777
}
694778
} else if (fillOnlyBackground) {
695779
if (fillCandidateLiteTable) {
@@ -702,7 +786,7 @@ struct HfTreeCreatorXicToXiPiPi {
702786
if (candidate.pt() < ptMaxForDownSample && pseudoRndm >= downSampleBkgFactor) {
703787
continue;
704788
}
705-
fillCandidateTable<true, false>(candidate);
789+
fillCandidateTable<true, false, false>(candidate);
706790
}
707791
} else {
708792
if (fillCandidateLiteTable) {
@@ -711,7 +795,7 @@ struct HfTreeCreatorXicToXiPiPi {
711795
rowCandidateFull.reserve(candidates.size());
712796
}
713797
for (const auto& candidate : candidates) {
714-
fillCandidateTable<true, false>(candidate);
798+
fillCandidateTable<true, false, false>(candidate);
715799
}
716800
}
717801

@@ -743,7 +827,7 @@ struct HfTreeCreatorXicToXiPiPi {
743827
rowCandidateFull.reserve(recSigKf.size());
744828
}
745829
for (const auto& candidate : recSigKf) {
746-
fillCandidateTable<true, true>(candidate);
830+
fillCandidateTable<true, true, false>(candidate);
747831
}
748832
} else if (fillOnlyBackground) {
749833
if (fillCandidateLiteTable) {
@@ -756,7 +840,7 @@ struct HfTreeCreatorXicToXiPiPi {
756840
if (candidate.pt() < ptMaxForDownSample && pseudoRndm >= downSampleBkgFactor) {
757841
continue;
758842
}
759-
fillCandidateTable<true, true>(candidate);
843+
fillCandidateTable<true, true, false>(candidate);
760844
}
761845
} else {
762846
if (fillCandidateLiteTable) {
@@ -765,7 +849,7 @@ struct HfTreeCreatorXicToXiPiPi {
765849
rowCandidateFull.reserve(candidates.size());
766850
}
767851
for (const auto& candidate : candidates) {
768-
fillCandidateTable<true, true>(candidate);
852+
fillCandidateTable<true, true, false>(candidate);
769853
}
770854
}
771855

0 commit comments

Comments
 (0)