|
18 | 18 | #ifndef O2_ANALYSIS_HFSECONDARYVERTEX_H_ |
19 | 19 | #define O2_ANALYSIS_HFSECONDARYVERTEX_H_ |
20 | 20 |
|
| 21 | +#include "ALICE3/DataModel/ECAL.h" |
21 | 22 | #include "Framework/AnalysisDataModel.h" |
22 | 23 | #include "Common/Core/RecoDecay.h" |
23 | 24 | #include "PWGHF/Core/HFSelectorCuts.h" |
@@ -313,6 +314,7 @@ auto InvMassJpsiToMuMu(const T& candidate) |
313 | 314 | { |
314 | 315 | return candidate.m(array{RecoDecay::getMassPDG(kMuonPlus), RecoDecay::getMassPDG(kMuonMinus)}); |
315 | 316 | } |
| 317 | + |
316 | 318 | } // namespace hf_cand_prong2 |
317 | 319 |
|
318 | 320 | // general columns |
@@ -967,6 +969,101 @@ DECLARE_SOA_TABLE(HfCandXiccMCRec, "AOD", "HFCANDXICCMCREC", //! |
967 | 969 | DECLARE_SOA_TABLE(HfCandXiccMCGen, "AOD", "HFCANDXICCMCGEN", //! |
968 | 970 | hf_cand_xicc::FlagMCMatchGen, |
969 | 971 | hf_cand_xicc::OriginMCGen); |
| 972 | + |
| 973 | +// specific chic candidate properties |
| 974 | +namespace hf_cand_chic |
| 975 | +{ |
| 976 | +DECLARE_SOA_INDEX_COLUMN_FULL(Index0, index0, int, HfCandProng2, "_0"); // Jpsi index |
| 977 | +DECLARE_SOA_INDEX_COLUMN_FULL(Index1, index1, int, ECALs, "_1"); |
| 978 | +// MC matching result: |
| 979 | +DECLARE_SOA_COLUMN(FlagMCMatchRec, flagMCMatchRec, int8_t); // reconstruction level |
| 980 | +DECLARE_SOA_COLUMN(FlagMCMatchGen, flagMCMatchGen, int8_t); // generator level |
| 981 | +DECLARE_SOA_COLUMN(OriginMCRec, originMCRec, int8_t); // particle origin, reconstruction level |
| 982 | +DECLARE_SOA_COLUMN(OriginMCGen, originMCGen, int8_t); // particle origin, generator level |
| 983 | +DECLARE_SOA_COLUMN(FlagMCDecayChanRec, flagMCDecayChanRec, int8_t); // resonant decay channel flag, reconstruction level |
| 984 | +DECLARE_SOA_COLUMN(FlagMCDecayChanGen, flagMCDecayChanGen, int8_t); // resonant decay channel flag, generator level |
| 985 | +DECLARE_SOA_COLUMN(JpsiToMuMuMass, jpsiToMuMuMass, float); // Jpsi mass |
| 986 | +// mapping of decay types |
| 987 | +enum DecayType { ChicToJpsiToEEGamma = 0, |
| 988 | + ChicToJpsiToMuMuGamma }; // move this to a dedicated cascade namespace in the future? |
| 989 | +// chic → Jpsi gamma |
| 990 | +template <typename T> |
| 991 | +auto CtChic(const T& candidate) |
| 992 | +{ |
| 993 | + return candidate.ct(RecoDecay::getMassPDG(pdg::Code::kChic1)); |
| 994 | +} |
| 995 | + |
| 996 | +template <typename T> |
| 997 | +auto YChic(const T& candidate) |
| 998 | +{ |
| 999 | + return candidate.y(RecoDecay::getMassPDG(pdg::Code::kChic1)); |
| 1000 | +} |
| 1001 | + |
| 1002 | +template <typename T> |
| 1003 | +auto EChic(const T& candidate) |
| 1004 | +{ |
| 1005 | + return candidate.e(RecoDecay::getMassPDG(pdg::Code::kChic1)); |
| 1006 | +} |
| 1007 | +template <typename T> |
| 1008 | +auto InvMassChicToJpsiGamma(const T& candidate) |
| 1009 | +{ |
| 1010 | + return candidate.m(array{RecoDecay::getMassPDG(pdg::Code::kJpsi), 0.}); |
| 1011 | +} |
| 1012 | + |
| 1013 | +} // namespace hf_cand_chic |
| 1014 | + |
| 1015 | +// declare dedicated chi_c candidate table |
| 1016 | +DECLARE_SOA_TABLE(HfCandChicBase, "AOD", "HFCANDCHICBASE", |
| 1017 | + // general columns |
| 1018 | + HFCAND_COLUMNS, |
| 1019 | + // 2-prong specific columns |
| 1020 | + hf_cand::PxProng0, hf_cand::PyProng0, hf_cand::PzProng0, |
| 1021 | + hf_cand::PxProng1, hf_cand::PyProng1, hf_cand::PzProng1, |
| 1022 | + hf_cand::ImpactParameter0, hf_cand::ImpactParameter1, |
| 1023 | + hf_cand::ErrorImpactParameter0, hf_cand::ErrorImpactParameter1, |
| 1024 | + hf_cand_chic::Index0Id, hf_cand_chic::Index1Id, |
| 1025 | + hf_track_index::HFflag, hf_cand_chic::JpsiToMuMuMass, |
| 1026 | + /* dynamic columns */ |
| 1027 | + hf_cand_prong2::M<hf_cand::PxProng0, hf_cand::PyProng0, hf_cand::PzProng0, hf_cand::PxProng1, hf_cand::PyProng1, hf_cand::PzProng1>, |
| 1028 | + hf_cand_prong2::M2<hf_cand::PxProng0, hf_cand::PyProng0, hf_cand::PzProng0, hf_cand::PxProng1, hf_cand::PyProng1, hf_cand::PzProng1>, |
| 1029 | + /* prong 2 */ |
| 1030 | + // hf_cand::PtProng1<hf_cand::PxProng1, hf_cand::PyProng1>, |
| 1031 | + // hf_cand::Pt2Prong1<hf_cand::PxProng1, hf_cand::PyProng1>, |
| 1032 | + // hf_cand::PVectorProng1<hf_cand::PxProng1, hf_cand::PyProng1, hf_cand::PzProng1>, |
| 1033 | + /* dynamic columns that use candidate momentum components */ |
| 1034 | + hf_cand::Pt<hf_cand_prong2::Px, hf_cand_prong2::Py>, |
| 1035 | + hf_cand::Pt2<hf_cand_prong2::Px, hf_cand_prong2::Py>, |
| 1036 | + hf_cand::P<hf_cand_prong2::Px, hf_cand_prong2::Py, hf_cand_prong2::Pz>, |
| 1037 | + hf_cand::P2<hf_cand_prong2::Px, hf_cand_prong2::Py, hf_cand_prong2::Pz>, |
| 1038 | + hf_cand::PVector<hf_cand_prong2::Px, hf_cand_prong2::Py, hf_cand_prong2::Pz>, |
| 1039 | + hf_cand::CPA<collision::PosX, collision::PosY, collision::PosZ, hf_cand::XSecondaryVertex, hf_cand::YSecondaryVertex, hf_cand::ZSecondaryVertex, hf_cand_prong2::Px, hf_cand_prong2::Py, hf_cand_prong2::Pz>, |
| 1040 | + hf_cand::CPAXY<collision::PosX, collision::PosY, hf_cand::XSecondaryVertex, hf_cand::YSecondaryVertex, hf_cand_prong2::Px, hf_cand_prong2::Py>, |
| 1041 | + hf_cand::Ct<collision::PosX, collision::PosY, collision::PosZ, hf_cand::XSecondaryVertex, hf_cand::YSecondaryVertex, hf_cand::ZSecondaryVertex, hf_cand_prong2::Px, hf_cand_prong2::Py, hf_cand_prong2::Pz>, |
| 1042 | + hf_cand::ImpactParameterXY<collision::PosX, collision::PosY, collision::PosZ, hf_cand::XSecondaryVertex, hf_cand::YSecondaryVertex, hf_cand::ZSecondaryVertex, hf_cand_prong2::Px, hf_cand_prong2::Py, hf_cand_prong2::Pz>, |
| 1043 | + hf_cand_prong2::MaxNormalisedDeltaIP<collision::PosX, collision::PosY, hf_cand::XSecondaryVertex, hf_cand::YSecondaryVertex, hf_cand::ErrorDecayLengthXY, hf_cand_prong2::Px, hf_cand_prong2::Py, hf_cand::ImpactParameter0, hf_cand::ErrorImpactParameter0, hf_cand::ImpactParameter1, hf_cand::ErrorImpactParameter1, hf_cand::PxProng0, hf_cand::PyProng0, hf_cand::PxProng1, hf_cand::PyProng1>, |
| 1044 | + hf_cand::Eta<hf_cand_prong2::Px, hf_cand_prong2::Py, hf_cand_prong2::Pz>, |
| 1045 | + hf_cand::Phi<hf_cand_prong2::Px, hf_cand_prong2::Py>, |
| 1046 | + hf_cand::Y<hf_cand_prong2::Px, hf_cand_prong2::Py, hf_cand_prong2::Pz>, |
| 1047 | + hf_cand::E<hf_cand_prong2::Px, hf_cand_prong2::Py, hf_cand_prong2::Pz>, |
| 1048 | + hf_cand::E2<hf_cand_prong2::Px, hf_cand_prong2::Py, hf_cand_prong2::Pz>); |
| 1049 | + |
| 1050 | +// extended table with expression columns that can be used as arguments of dynamic columns |
| 1051 | +DECLARE_SOA_EXTENDED_TABLE_USER(HfCandChicExt, HfCandChicBase, "HFCANDCHICEXT", |
| 1052 | + hf_cand_prong2::Px, hf_cand_prong2::Py, hf_cand_prong2::Pz); |
| 1053 | + |
| 1054 | +using HfCandChic = HfCandChicExt; |
| 1055 | + |
| 1056 | +// table with results of reconstruction level MC matching |
| 1057 | +DECLARE_SOA_TABLE(HfCandChicMCRec, "AOD", "HFCANDCHICMCREC", //! |
| 1058 | + hf_cand_chic::FlagMCMatchRec, |
| 1059 | + hf_cand_chic::OriginMCRec, |
| 1060 | + hf_cand_chic::FlagMCDecayChanRec); |
| 1061 | + |
| 1062 | +// table with results of generator level MC matching |
| 1063 | +DECLARE_SOA_TABLE(HfCandChicMCGen, "AOD", "HFCANDCHICMCGEN", //! |
| 1064 | + hf_cand_chic::FlagMCMatchGen, |
| 1065 | + hf_cand_chic::OriginMCGen, |
| 1066 | + hf_cand_chic::FlagMCDecayChanGen); |
970 | 1067 | } // namespace o2::aod |
971 | 1068 |
|
972 | 1069 | #endif // O2_ANALYSIS_HFSECONDARYVERTEX_H_ |
0 commit comments