1717// / \author Krista Smith <krista.lizbeth.smith@cern.ch>, Pusan National University
1818
1919#include " PWGHF/Core/CentralityEstimation.h"
20+ #include " PWGHF/Core/DecayChannelsLegacy.h"
2021#include " PWGHF/DataModel/CandidateReconstructionTables.h"
2122#include " PWGHF/DataModel/CandidateSelectionTables.h"
2223
3839
3940using namespace o2 ;
4041using namespace o2 ::framework;
42+ using namespace o2 ::framework::expressions;
4143
4244// SV Reco method
4345enum {
@@ -124,6 +126,8 @@ DECLARE_SOA_COLUMN(EtaPiFromCasc, etaPiFromCasc, float);
124126DECLARE_SOA_COLUMN (EtaPiFromCharmBaryon, etaPiFromCharmBaryon, float );
125127DECLARE_SOA_COLUMN (EtaCharmBaryon, etaCharmBaryon, float );
126128DECLARE_SOA_COLUMN (EtaCascade, etaCascade, float );
129+ DECLARE_SOA_COLUMN (PhiCharmBaryon, phiCharmBaryon, float );
130+ DECLARE_SOA_COLUMN (YCharmBaryon, yCharmBaryon, float );
127131DECLARE_SOA_COLUMN (EtaV0, etaV0, float );
128132DECLARE_SOA_COLUMN (DcaXYToPvV0Dau0, dcaXYToPvV0Dau0, float );
129133DECLARE_SOA_COLUMN (DcaXYToPvV0Dau1, dcaXYToPvV0Dau1, float );
@@ -303,6 +307,13 @@ DECLARE_SOA_TABLE(HfKfXicFulls, "AOD", "HFKFXICFULL",
303307 full::ResultSelections,
304308 full::FlagMcMatchRec, full::DebugMcRec, full::OriginRec, full::CollisionMatched);
305309
310+ DECLARE_SOA_TABLE (HfCandToXiPiGen, " AOD" , " HFCANDTOXIPIGEN" ,
311+ full::PtCharmBaryon,
312+ full::EtaCharmBaryon,
313+ full::PhiCharmBaryon,
314+ full::YCharmBaryon,
315+ full::FlagMcMatchRec,
316+ full::OriginRec)
306317} // namespace o2::aod
307318
308319// / Writes the full information in an output TTree
@@ -311,16 +322,22 @@ struct HfTreeCreatorToXiPiQa {
311322 Produces<o2::aod::HfToXiPiFulls> rowCandidateFull;
312323 Produces<o2::aod::HfToXiPiLites> rowCandidateLite;
313324 Produces<o2::aod::HfKfXicFulls> rowKfCandidate;
325+ Produces<o2::aod::HfCandToXiPiGen> rowCandidateParticles;
314326 Produces<o2::aod::HfToXiPiEvs> rowEv;
315327
316328 Configurable<float > zPvCut{" zPvCut" , 10 ., " Cut on absolute value of primary vertex z coordinate" };
329+ Configurable<int8_t > genSelection{" genSelection" , o2::aod::hf_cand_xic0_omegac0::DecayType::XiczeroToXiPi, " Decay channel to be used to match particle information" };
330+ Configurable<bool > fillParticle{" fillParticle" , true , " Fill generated MC information if requested" };
317331
318332 using MyTrackTable = soa::Join<aod::Tracks, aod::TrackSelection, aod::TracksExtra>;
319333 using MyEventTable = soa::Join<aod::Collisions, aod::EvSels>;
320334 using MyEventTableWithFT0C = soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Cs>;
321335 using MyEventTableWithFT0M = soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Ms>;
322336 using MyEventTableWithNTracksPV = soa::Join<aod::Collisions, aod::EvSels, aod::CentNTPVs>;
337+ using MatchedGenXiPi = soa::Filtered<soa::Join<aod::McParticles, aod::HfXicToXiPiMCGen>>;
323338
339+ Filter filterGenXiPi = nabs(aod::hf_cand_mc_flag::flagMcMatchGen) == static_cast <int8_t >(BIT(genSelection));
340+
324341 void init (InitContext const &)
325342 {
326343 if ((doprocessMcLiteXic0 && doprocessMcLiteOmegac0) || (doprocessMcFullXic0 && doprocessMcFullOmegac0)) {
@@ -783,8 +800,10 @@ struct HfTreeCreatorToXiPiQa {
783800 // *~~~~~~~MC with DCAFitter~~~~~~~~*//
784801 // *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*//
785802
786- void processMcFullXic0 (MyEventTable const & collisions, MyTrackTable const &,
787- soa::Join<aod::HfCandToXiPi, aod::HfSelToXiPi, aod::HfXicToXiPiMCRec> const & candidates)
803+ void processMcFullXic0 (MyEventTable const & collisions,
804+ MyTrackTable const &,
805+ soa::Join<aod::HfCandToXiPi, aod::HfSelToXiPi, aod::HfXicToXiPiMCRec> const & candidates,
806+ MatchedGenXiPi const & mcParticles)
788807 {
789808 // Filling event properties
790809 rowEv.reserve (collisions.size ());
@@ -797,10 +816,25 @@ struct HfTreeCreatorToXiPiQa {
797816 for (const auto & candidate : candidates) {
798817 fillCandidate<DCAFITTER, FULL, false , MyEventTable>(candidate, candidate.flagMcMatchRec (), candidate.debugMcRec (), candidate.originMcRec (), candidate.collisionMatched ());
799818 }
819+
820+ // Filling particle properties if requested
821+ if (fillParticle) {
822+ rowCandidateParticles.reserve (mcParticles.size ());
823+ for (const auto & particle : mcParticles) {
824+ rowCandidateParticles (particle.pt (),
825+ particle.eta (),
826+ particle.phi (),
827+ RecoDecay::y (particle.pVector (), o2::constants::physics::MassXiC0),
828+ particle.flagMcMatchGen (),
829+ particle.originMcGen ());
830+ }
831+ }
800832 }
801833
802- void processMcFullOmegac0 (MyEventTable const & collisions, MyTrackTable const &,
803- soa::Join<aod::HfCandToXiPi, aod::HfSelToXiPi, aod::HfOmegacToXiPiMCRec> const & candidates)
834+ void processMcFullOmegac0 (MyEventTable const & collisions,
835+ MyTrackTable const &,
836+ soa::Join<aod::HfCandToXiPi, aod::HfSelToXiPi, aod::HfOmegacToXiPiMCRec> const & candidates,
837+ MatchedGenXiPi const & mcParticles)
804838 {
805839 // Filling event properties
806840 rowEv.reserve (collisions.size ());
@@ -813,10 +847,25 @@ struct HfTreeCreatorToXiPiQa {
813847 for (const auto & candidate : candidates) {
814848 fillCandidate<DCAFITTER, FULL, false , MyEventTable>(candidate, candidate.flagMcMatchRec (), candidate.debugMcRec (), candidate.originMcRec (), candidate.collisionMatched ());
815849 }
850+
851+ // Filling particle properties if requested
852+ if (fillParticle) {
853+ rowCandidateParticles.reserve (mcParticles.size ());
854+ for (const auto & particle : mcParticles) {
855+ rowCandidateParticles (particle.pt (),
856+ particle.eta (),
857+ particle.phi (),
858+ RecoDecay::y (particle.pVector (), o2::constants::physics::MassXiC0),
859+ particle.flagMcMatchGen (),
860+ particle.originMcGen ());
861+ }
862+ }
816863 }
817864
818- void processMcLiteXic0 (MyEventTable const & collisions, MyTrackTable const &,
819- soa::Join<aod::HfCandToXiPi, aod::HfSelToXiPi, aod::HfXicToXiPiMCRec> const & candidates)
865+ void processMcLiteXic0 (MyEventTable const & collisions,
866+ MyTrackTable const &,
867+ soa::Join<aod::HfCandToXiPi, aod::HfSelToXiPi, aod::HfXicToXiPiMCRec> const & candidates,
868+ MatchedGenXiPi const & mcParticles)
820869 {
821870 // Filling event properties
822871 rowEv.reserve (collisions.size ());
@@ -829,10 +878,25 @@ struct HfTreeCreatorToXiPiQa {
829878 for (const auto & candidate : candidates) {
830879 fillCandidate<DCAFITTER, LITE, false , MyEventTable>(candidate, candidate.flagMcMatchRec (), -7 , candidate.originMcRec (), candidate.collisionMatched ());
831880 }
881+
882+ // Filling particle properties if requested
883+ if (fillParticle) {
884+ rowCandidateParticles.reserve (mcParticles.size ());
885+ for (const auto & particle : mcParticles) {
886+ rowCandidateParticles (particle.pt (),
887+ particle.eta (),
888+ particle.phi (),
889+ RecoDecay::y (particle.pVector (), o2::constants::physics::MassXiC0),
890+ particle.flagMcMatchGen (),
891+ particle.originMcGen ());
892+ }
893+ }
832894 }
833895
834- void processMcLiteXic0WithFT0C (MyEventTableWithFT0C const & collisions, MyTrackTable const &,
835- soa::Join<aod::HfCandToXiPi, aod::HfSelToXiPi, aod::HfXicToXiPiMCRec> const & candidates)
896+ void processMcLiteXic0WithFT0C (MyEventTableWithFT0C const & collisions,
897+ MyTrackTable const &,
898+ soa::Join<aod::HfCandToXiPi, aod::HfSelToXiPi, aod::HfXicToXiPiMCRec> const & candidates,
899+ MatchedGenXiPi const & mcParticles)
836900 {
837901 // Filling event properties
838902 rowEv.reserve (collisions.size ());
@@ -845,10 +909,25 @@ struct HfTreeCreatorToXiPiQa {
845909 for (const auto & candidate : candidates) {
846910 fillCandidate<DCAFITTER, LITE, true , MyEventTableWithFT0C>(candidate, candidate.flagMcMatchRec (), -7 , candidate.originMcRec (), candidate.collisionMatched ());
847911 }
912+
913+ // Filling particle properties if requested
914+ if (fillParticle) {
915+ rowCandidateParticles.reserve (mcParticles.size ());
916+ for (const auto & particle : mcParticles) {
917+ rowCandidateParticles (particle.pt (),
918+ particle.eta (),
919+ particle.phi (),
920+ RecoDecay::y (particle.pVector (), o2::constants::physics::MassXiC0),
921+ particle.flagMcMatchGen (),
922+ particle.originMcGen ());
923+ }
924+ }
848925 }
849926
850- void processMcLiteXic0WithFT0M (MyEventTableWithFT0M const & collisions, MyTrackTable const &,
851- soa::Join<aod::HfCandToXiPi, aod::HfSelToXiPi, aod::HfXicToXiPiMCRec> const & candidates)
927+ void processMcLiteXic0WithFT0M (MyEventTableWithFT0M const & collisions,
928+ MyTrackTable const &,
929+ soa::Join<aod::HfCandToXiPi, aod::HfSelToXiPi, aod::HfXicToXiPiMCRec> const & candidates,
930+ MatchedGenXiPi const & mcParticles)
852931 {
853932 // Filling event properties
854933 rowEv.reserve (collisions.size ());
@@ -861,10 +940,25 @@ struct HfTreeCreatorToXiPiQa {
861940 for (const auto & candidate : candidates) {
862941 fillCandidate<DCAFITTER, LITE, true , MyEventTableWithFT0M>(candidate, candidate.flagMcMatchRec (), -7 , candidate.originMcRec (), candidate.collisionMatched ());
863942 }
943+
944+ // Filling particle properties if requested
945+ if (fillParticle) {
946+ rowCandidateParticles.reserve (mcParticles.size ());
947+ for (const auto & particle : mcParticles) {
948+ rowCandidateParticles (particle.pt (),
949+ particle.eta (),
950+ particle.phi (),
951+ RecoDecay::y (particle.pVector (), o2::constants::physics::MassXiC0),
952+ particle.flagMcMatchGen (),
953+ particle.originMcGen ());
954+ }
955+ }
864956 }
865957
866- void processMcLiteXic0WithNTracksPV (MyEventTableWithNTracksPV const & collisions, MyTrackTable const &,
867- soa::Join<aod::HfCandToXiPi, aod::HfSelToXiPi, aod::HfXicToXiPiMCRec> const & candidates)
958+ void processMcLiteXic0WithNTracksPV (MyEventTableWithNTracksPV const & collisions,
959+ MyTrackTable const &,
960+ soa::Join<aod::HfCandToXiPi, aod::HfSelToXiPi, aod::HfXicToXiPiMCRec> const & candidates,
961+ MatchedGenXiPi const & mcParticles)
868962 {
869963 // Filling event properties
870964 rowEv.reserve (collisions.size ());
@@ -877,10 +971,25 @@ struct HfTreeCreatorToXiPiQa {
877971 for (const auto & candidate : candidates) {
878972 fillCandidate<DCAFITTER, LITE, true , MyEventTableWithNTracksPV>(candidate, candidate.flagMcMatchRec (), -7 , candidate.originMcRec (), candidate.collisionMatched ());
879973 }
974+
975+ // Filling particle properties if requested
976+ if (fillParticle) {
977+ rowCandidateParticles.reserve (mcParticles.size ());
978+ for (const auto & particle : mcParticles) {
979+ rowCandidateParticles (particle.pt (),
980+ particle.eta (),
981+ particle.phi (),
982+ RecoDecay::y (particle.pVector (), o2::constants::physics::MassXiC0),
983+ particle.flagMcMatchGen (),
984+ particle.originMcGen ());
985+ }
986+ }
880987 }
881988
882- void processMcLiteOmegac0 (MyEventTable const & collisions, MyTrackTable const &,
883- soa::Join<aod::HfCandToXiPi, aod::HfSelToXiPi, aod::HfOmegacToXiPiMCRec> const & candidates)
989+ void processMcLiteOmegac0 (MyEventTable const & collisions,
990+ MyTrackTable const &,
991+ soa::Join<aod::HfCandToXiPi, aod::HfSelToXiPi, aod::HfOmegacToXiPiMCRec> const & candidates,
992+ MatchedGenXiPi const & mcParticles)
884993 {
885994 // Filling event properties
886995 rowEv.reserve (collisions.size ());
@@ -893,6 +1002,19 @@ struct HfTreeCreatorToXiPiQa {
8931002 for (const auto & candidate : candidates) {
8941003 fillCandidate<DCAFITTER, LITE, false , MyEventTable>(candidate, candidate.flagMcMatchRec (), -7 , candidate.originMcRec (), candidate.collisionMatched ());
8951004 }
1005+
1006+ // Filling particle properties if requested
1007+ if (fillParticle) {
1008+ rowCandidateParticles.reserve (mcParticles.size ());
1009+ for (const auto & particle : mcParticles) {
1010+ rowCandidateParticles (particle.pt (),
1011+ particle.eta (),
1012+ particle.phi (),
1013+ RecoDecay::y (particle.pVector (), o2::constants::physics::MassXiC0),
1014+ particle.flagMcMatchGen (),
1015+ particle.originMcGen ());
1016+ }
1017+ }
8961018 }
8971019
8981020 PROCESS_SWITCH (HfTreeCreatorToXiPiQa, processMcFullXic0, " Process MC with full information for xic0 w/o centrality" , false );
@@ -906,8 +1028,10 @@ struct HfTreeCreatorToXiPiQa {
9061028 // *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*//
9071029 // *~~~~~~~MC with KFParticle~~~~~~~~*//
9081030 // *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*//
909- void processKfMcXic0 (MyEventTable const & collisions, MyTrackTable const &,
910- soa::Join<aod::HfCandToXiPiKf, aod::HfSelToXiPiKf, aod::HfXicToXiPiMCRec> const & candidates)
1031+ void processKfMcXic0 (MyEventTable const & collisions,
1032+ MyTrackTable const &,
1033+ soa::Join<aod::HfCandToXiPiKf, aod::HfSelToXiPiKf, aod::HfXicToXiPiMCRec> const & candidates,
1034+ MatchedGenXiPi const & mcParticles)
9111035 {
9121036 // Filling event properties
9131037 rowEv.reserve (collisions.size ());
@@ -920,10 +1044,25 @@ struct HfTreeCreatorToXiPiQa {
9201044 for (const auto & candidate : candidates) {
9211045 fillCandidate<KFPARTICLE, FULL, false , MyEventTable>(candidate, candidate.flagMcMatchRec (), candidate.debugMcRec (), candidate.originMcRec (), candidate.collisionMatched ());
9221046 }
1047+
1048+ // Filling particle properties if requested
1049+ if (fillParticle) {
1050+ rowCandidateParticles.reserve (mcParticles.size ());
1051+ for (const auto & particle : mcParticles) {
1052+ rowCandidateParticles (particle.pt (),
1053+ particle.eta (),
1054+ particle.phi (),
1055+ RecoDecay::y (particle.pVector (), o2::constants::physics::MassXiC0),
1056+ particle.flagMcMatchGen (),
1057+ particle.originMcGen ());
1058+ }
1059+ }
9231060 }
9241061
925- void processKfMcXic0WithFT0C (MyEventTableWithFT0C const & collisions, MyTrackTable const &,
926- soa::Join<aod::HfCandToXiPiKf, aod::HfSelToXiPiKf, aod::HfXicToXiPiMCRec> const & candidates)
1062+ void processKfMcXic0WithFT0C (MyEventTableWithFT0C const & collisions,
1063+ MyTrackTable const &,
1064+ soa::Join<aod::HfCandToXiPiKf, aod::HfSelToXiPiKf, aod::HfXicToXiPiMCRec> const & candidates,
1065+ MatchedGenXiPi const & mcParticles)
9271066 {
9281067 // Filling event properties
9291068 rowEv.reserve (collisions.size ());
@@ -936,10 +1075,25 @@ struct HfTreeCreatorToXiPiQa {
9361075 for (const auto & candidate : candidates) {
9371076 fillCandidate<KFPARTICLE, FULL, true , MyEventTableWithFT0C>(candidate, candidate.flagMcMatchRec (), candidate.debugMcRec (), candidate.originMcRec (), candidate.collisionMatched ());
9381077 }
1078+
1079+ // Filling particle properties if requested
1080+ if (fillParticle) {
1081+ rowCandidateParticles.reserve (mcParticles.size ());
1082+ for (const auto & particle : mcParticles) {
1083+ rowCandidateParticles (particle.pt (),
1084+ particle.eta (),
1085+ particle.phi (),
1086+ RecoDecay::y (particle.pVector (), o2::constants::physics::MassXiC0),
1087+ particle.flagMcMatchGen (),
1088+ particle.originMcGen ());
1089+ }
1090+ }
9391091 }
9401092
941- void processKfMcXic0WithFT0M (MyEventTableWithFT0M const & collisions, MyTrackTable const &,
942- soa::Join<aod::HfCandToXiPiKf, aod::HfSelToXiPiKf, aod::HfXicToXiPiMCRec> const & candidates)
1093+ void processKfMcXic0WithFT0M (MyEventTableWithFT0M const & collisions,
1094+ MyTrackTable const &,
1095+ soa::Join<aod::HfCandToXiPiKf, aod::HfSelToXiPiKf, aod::HfXicToXiPiMCRec> const & candidates,
1096+ MatchedGenXiPi const & mcParticles)
9431097 {
9441098 // Filling event properties
9451099 rowEv.reserve (collisions.size ());
@@ -952,10 +1106,25 @@ struct HfTreeCreatorToXiPiQa {
9521106 for (const auto & candidate : candidates) {
9531107 fillCandidate<KFPARTICLE, FULL, true , MyEventTableWithFT0M>(candidate, candidate.flagMcMatchRec (), candidate.debugMcRec (), candidate.originMcRec (), candidate.collisionMatched ());
9541108 }
1109+
1110+ // Filling particle properties if requested
1111+ if (fillParticle) {
1112+ rowCandidateParticles.reserve (mcParticles.size ());
1113+ for (const auto & particle : mcParticles) {
1114+ rowCandidateParticles (particle.pt (),
1115+ particle.eta (),
1116+ particle.phi (),
1117+ RecoDecay::y (particle.pVector (), o2::constants::physics::MassXiC0),
1118+ particle.flagMcMatchGen (),
1119+ particle.originMcGen ());
1120+ }
1121+ }
9551122 }
9561123
957- void processKfMcXic0WithNTracksPV (MyEventTableWithNTracksPV const & collisions, MyTrackTable const &,
958- soa::Join<aod::HfCandToXiPiKf, aod::HfSelToXiPiKf, aod::HfXicToXiPiMCRec> const & candidates)
1124+ void processKfMcXic0WithNTracksPV (MyEventTableWithNTracksPV const & collisions,
1125+ MyTrackTable const &,
1126+ soa::Join<aod::HfCandToXiPiKf, aod::HfSelToXiPiKf, aod::HfXicToXiPiMCRec> const & candidates,
1127+ MatchedGenXiPi const & mcParticles)
9591128 {
9601129 // Filling event properties
9611130 rowEv.reserve (collisions.size ());
@@ -968,6 +1137,19 @@ struct HfTreeCreatorToXiPiQa {
9681137 for (const auto & candidate : candidates) {
9691138 fillCandidate<KFPARTICLE, FULL, true , MyEventTableWithNTracksPV>(candidate, candidate.flagMcMatchRec (), candidate.debugMcRec (), candidate.originMcRec (), candidate.collisionMatched ());
9701139 }
1140+
1141+ // Filling particle properties if requested
1142+ if (fillParticle) {
1143+ rowCandidateParticles.reserve (mcParticles.size ());
1144+ for (const auto & particle : mcParticles) {
1145+ rowCandidateParticles (particle.pt (),
1146+ particle.eta (),
1147+ particle.phi (),
1148+ RecoDecay::y (particle.pVector (), o2::constants::physics::MassXiC0),
1149+ particle.flagMcMatchGen (),
1150+ particle.originMcGen ());
1151+ }
1152+ }
9711153 }
9721154
9731155 PROCESS_SWITCH (HfTreeCreatorToXiPiQa, processKfMcXic0, " Process MC with information for xic0" , false );
0 commit comments