3636#include < cstdint>
3737#include < cstdlib>
3838#include < string>
39+ #include < type_traits>
3940#include < vector>
4041
4142#include < math.h>
@@ -86,8 +87,7 @@ DECLARE_SOA_COLUMN(D0MD, d0MD, float);
8687DECLARE_SOA_COLUMN (D0PtD, d0PtD, float );
8788DECLARE_SOA_COLUMN (D0EtaD, d0EtaD, float );
8889DECLARE_SOA_COLUMN (D0PhiD, d0PhiD, float );
89- DECLARE_SOA_COLUMN (D0MatchedFrom, d0MatchedFrom, int );
90- DECLARE_SOA_COLUMN (D0SelectedAs, d0SelectedAs, int );
90+ DECLARE_SOA_COLUMN (D0Category, d0Category, int );
9191DECLARE_SOA_COLUMN (D0DecayChannel, d0DecayChannel, int8_t );
9292} // namespace d0Info
9393
@@ -114,9 +114,7 @@ DECLARE_SOA_TABLE(D0McDTables, "AOD", "D0MCDTABLE",
114114 d0Info::D0Eta,
115115 d0Info::D0Phi,
116116 d0Info::D0Y ,
117- d0Info::D0MatchedFrom,
118- d0Info::D0SelectedAs,
119- d0Info::D0DecayChannel);
117+ d0Info::D0Category);
120118
121119DECLARE_SOA_TABLE (D0McPTables, " AOD" , " D0MCPTABLE" ,
122120 o2::soa::Index<>,
@@ -357,6 +355,12 @@ struct JetCorrelationD0 {
357355
358356 int matchedFrom = 0 ;
359357 int selectedAs = 0 ;
358+ int category = -1 ; // -1 undefined, 0 signal, 1 reflection, 2-5 correlated backgrounds
359+ constexpr int kD0ToKPi = 1 ;
360+ constexpr int kD0ToKPiPi = 2 ;
361+ constexpr int kD0ToPiPi = 3 ;
362+ constexpr int kD0ToPiPiPi = 4 ;
363+ constexpr int kD0ToKK = 5 ;
360364
361365 if (d0DecayChannel > 0 ) { // matched to a D0 on truth level (any channel)
362366 matchedFrom = 1 ;
@@ -368,6 +372,19 @@ struct JetCorrelationD0 {
368372 } else if (d0Candidate.candidateSelFlag () & BIT (1 )) { // CandidateSelFlag == BIT(1) -> selected as D0bar
369373 selectedAs = -1 ;
370374 }
375+ if ((std::abs (d0DecayChannel) == kD0ToKPi ) && (matchedFrom != 0 ) && (selectedAs == matchedFrom)) {
376+ category = 0 ; // signal -> D0 or D0bar, π+ K−
377+ } else if ((d0DecayChannel == kD0ToKPi ) && (selectedAs == -1 * matchedFrom)) {
378+ category = 1 ; // reflection
379+ } else if (d0DecayChannel == kD0ToKPiPi ) {
380+ category = 2 ; // corr bkg: π+ K− π0
381+ } else if (d0DecayChannel == kD0ToPiPi ) {
382+ category = 3 ; // corr bkg: π+ π−
383+ } else if (d0DecayChannel == kD0ToPiPiPi ) {
384+ category = 4 ; // corr bkg: π+ π− π0
385+ } else if (d0DecayChannel == kD0ToKK ) {
386+ category = 5 ; // corr bkg: K+ K−
387+ }
371388
372389 tableD0McDetector (tableCollision.lastIndex (), // might want to add some more detector level D0 quantities like prompt or non prompt info
373390 scores[2 ],
@@ -378,9 +395,7 @@ struct JetCorrelationD0 {
378395 d0Candidate.eta (),
379396 d0Candidate.phi (),
380397 d0Candidate.y (),
381- matchedFrom,
382- selectedAs,
383- d0DecayChannel);
398+ category);
384399 for (const auto & jet : jets) {
385400 if (jet.pt () < jetPtCutMin) {
386401 continue ;
0 commit comments