@@ -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+
189217DECLARE_SOA_TABLE (HfCandXicToXiPiPiFulls, " AOD" , " HFXICXI2PIFULL" ,
190218 full::ParticleFlag,
191219 hf_cand_mc_flag::OriginMcRec,
@@ -343,12 +371,14 @@ DECLARE_SOA_TABLE(HfCandXicToXiPiPiFullPs, "AOD", "HFXICXI2PIFULLP",
343371struct 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