Skip to content

Commit 5ce9831

Browse files
ginnocenAlessandro De FalcovkuceraGian Michele Innocenti
authored
PWGHF: Add chi_c analysis for ALICE3 studies (based on A. De Falco developments) (#169)
Co-authored-by: Alessandro De Falco <defalco@alicecerno2.cern.ch> Co-authored-by: Vít Kučera <vit.kucera@cern.ch> Co-authored-by: Gian Michele Innocenti <ginnocen@alicecerno2.cern.ch>
1 parent 913191a commit 5ce9831

File tree

8 files changed

+938
-2
lines changed

8 files changed

+938
-2
lines changed

PWGHF/Core/HFSelectorCuts.h

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ enum Code {
3131
kXiCPlus = 4232,
3232
kXiCCPlusPlus = 4422,
3333
kJpsi = 443,
34+
kChic1 = 20443,
3435
kBPlus = 521,
3536
kX3872 = 9920443
3637
};
@@ -580,6 +581,54 @@ static const std::vector<std::string> pTBinLabels = {
580581
// column labels
581582
static const std::vector<std::string> cutVarLabels = {"m", "CPA", "d0 Jpsi", "d0 Pi", "pT Jpsi", "pT Pi", "chi2PCA"};
582583
} // namespace hf_cuts_x_tojpsipipi
584+
585+
namespace hf_cuts_chic_tojpsigamma
586+
{
587+
// dummy selections for chic --> TO BE IMPLEMENTED
588+
static constexpr int npTBins = 9;
589+
static constexpr int nCutVars = 7;
590+
// default values for the pT bin edges (can be used to configure histogram axis)
591+
// offset by 1 from the bin numbers in cuts array
592+
constexpr double pTBins[npTBins + 1] = {
593+
0,
594+
0.5,
595+
1.0,
596+
2.0,
597+
3.0,
598+
4.0,
599+
5.0,
600+
7.0,
601+
10.0,
602+
15.0,
603+
};
604+
auto pTBins_v = std::vector<double>{pTBins, pTBins + npTBins + 1};
605+
606+
// default values for the cuts
607+
// m CPA d0Jpsi d0gamma pTJpsi pTgamma chi2PCA
608+
constexpr double cuts[npTBins][nCutVars] = {{3.0, -1., 0.001, 0.001, 0.5, 0.15, 1.}, /* 0<pt<0.5 */
609+
{3.0, -1., 0.001, 0.001, 0.5, 0.15, 1.}, /* 0.5<pt<1 */
610+
{3.0, -1., 0.001, 0.001, 0.5, 0.15, 1.}, /* 1<pt<2 */
611+
{3.0, -1., 0.001, 0.001, 0.5, 0.15, 1.}, /* 2<pt<3 */
612+
{3.0, -1., 0.001, 0.001, 0.5, 0.15, 1.}, /* 3<pt<4 */
613+
{3.0, -1., 0.001, 0.001, 0.5, 0.15, 1.}, /* 4<pt<5 */
614+
{3.0, -1., 0.001, 0.001, 0.5, 0.15, 1.}, /* 5<pt<7 */
615+
{3.0, -1., 0.001, 0.001, 0.5, 0.15, 1.}, /* 7<pt<10 */
616+
{3.0, -1., 0.001, 0.001, 0.5, 0.15, 1.}}; /* 10<pt<15 */
617+
// row labels
618+
static const std::vector<std::string> pTBinLabels = {
619+
"pT bin 0",
620+
"pT bin 1",
621+
"pT bin 2",
622+
"pT bin 3",
623+
"pT bin 4",
624+
"pT bin 5",
625+
"pT bin 6",
626+
"pT bin 7",
627+
"pT bin 8"};
628+
// column labels
629+
static const std::vector<std::string> cutVarLabels = {"m", "CPA", "d0 Jpsi", "d0 Gamma", "pT Jpsi", "pT Gamma", "chi2PCA"};
630+
} // namespace hf_cuts_chic_tojpsigamma
631+
583632
} // namespace o2::analysis
584633

585634
#endif // HF_SELECTOR_CUTS_H_

PWGHF/DataModel/HFCandidateSelectionTables.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,10 +141,15 @@ DECLARE_SOA_COLUMN(IsSelXToJpsiToMuMuPiPi, isSelXToJpsiToMuMuPiPi, int); //!
141141
} // namespace hf_selcandidate_x
142142
DECLARE_SOA_TABLE(HFSelXToJpsiPiPiCandidate, "AOD", "HFSELXCAND", //!
143143
hf_selcandidate_x::IsSelXToJpsiToEEPiPi, hf_selcandidate_x::IsSelXToJpsiToMuMuPiPi);
144-
} // namespace o2::aod
145144

146-
namespace o2::aod
145+
namespace hf_selcandidate_chic
147146
{
147+
DECLARE_SOA_COLUMN(IsSelChicToJpsiToEEGamma, isSelChicToJpsiToEEGamma, int); //!
148+
DECLARE_SOA_COLUMN(IsSelChicToJpsiToMuMuGamma, isSelChicToJpsiToMuMuGamma, int); //!
149+
} // namespace hf_selcandidate_chic
150+
DECLARE_SOA_TABLE(HFSelChicToJpsiGammaCandidate, "AOD", "HFSELCHICCAND", //!
151+
hf_selcandidate_chic::IsSelChicToJpsiToEEGamma, hf_selcandidate_chic::IsSelChicToJpsiToMuMuGamma);
152+
148153
namespace hf_selcandidate_xic
149154
{
150155
DECLARE_SOA_COLUMN(IsSelXicToPKPi, isSelXicToPKPi, int); //!

PWGHF/DataModel/HFSecondaryVertex.h

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#ifndef O2_ANALYSIS_HFSECONDARYVERTEX_H_
1919
#define O2_ANALYSIS_HFSECONDARYVERTEX_H_
2020

21+
#include "ALICE3/DataModel/ECAL.h"
2122
#include "Framework/AnalysisDataModel.h"
2223
#include "Common/Core/RecoDecay.h"
2324
#include "PWGHF/Core/HFSelectorCuts.h"
@@ -313,6 +314,7 @@ auto InvMassJpsiToMuMu(const T& candidate)
313314
{
314315
return candidate.m(array{RecoDecay::getMassPDG(kMuonPlus), RecoDecay::getMassPDG(kMuonMinus)});
315316
}
317+
316318
} // namespace hf_cand_prong2
317319

318320
// general columns
@@ -967,6 +969,101 @@ DECLARE_SOA_TABLE(HfCandXiccMCRec, "AOD", "HFCANDXICCMCREC", //!
967969
DECLARE_SOA_TABLE(HfCandXiccMCGen, "AOD", "HFCANDXICCMCGEN", //!
968970
hf_cand_xicc::FlagMCMatchGen,
969971
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);
9701067
} // namespace o2::aod
9711068

9721069
#endif // O2_ANALYSIS_HFSECONDARYVERTEX_H_

PWGHF/TableProducer/CMakeLists.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,11 @@ o2physics_add_dpl_workflow(candidate-creator-x
4949
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore O2::DetectorsVertexing ROOT::EG
5050
COMPONENT_NAME Analysis)
5151

52+
o2physics_add_dpl_workflow(candidate-creator-chic
53+
SOURCES HFCandidateCreatorChic.cxx
54+
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore O2::DetectorsVertexing ROOT::EG
55+
COMPONENT_NAME Analysis)
56+
5257
o2physics_add_dpl_workflow(tree-creator-lc-topkpi
5358
SOURCES HFTreeCreatorLcToPKPi.cxx
5459
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore O2::DetectorsVertexing ROOT::EG
@@ -123,3 +128,9 @@ o2physics_add_dpl_workflow(x-tojpsipipi-candidate-selector
123128
SOURCES HFXToJpsiPiPiCandidateSelector.cxx
124129
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore O2::DetectorsVertexing
125130
COMPONENT_NAME Analysis)
131+
132+
o2physics_add_dpl_workflow(chic-tojpsigamma-candidate-selector
133+
SOURCES HFChicToJpsiGammaCandidateSelector.cxx
134+
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore O2::DetectorsVertexing
135+
COMPONENT_NAME Analysis)
136+

0 commit comments

Comments
 (0)