@@ -39,7 +39,7 @@ struct HfTaskMcEfficiency {
39
39
40
40
ConfigurableAxis axisPt{" axisPt" , {10 , 0 , 10 }, " pT axis" };
41
41
ConfigurableAxis axisMass{" axisMass" , {120 , 1.5848 , 2.1848 }, " m_inv axis" };
42
- ConfigurableAxis axisPdg{" axisPdg" , {VARIABLE_WIDTH, -4122.5 , -431.5 , -421.5 , -411.5 , 0 , 411.5 , 421.5 , 431.5 , 4122.5 }, " PDG code axis" };
42
+ ConfigurableAxis axisPdg{" axisPdg" , {VARIABLE_WIDTH, -4232.5 , - 4122.5 , -431.5 , -421.5 , -411.5 , 0 , 411.5 , 421.5 , 431.5 , 4122.5 , 4232 .5 }, " PDG code axis" };
43
43
ConfigurableAxis axisCPA{" axisCPA" , {102 , -1.02 , 1.02 }, " Cosine of pointing angle axis" };
44
44
45
45
Configurable<float > mcAcceptancePt{" mcAcceptancePt" , 0.1 , " MC Acceptance: lower pt limit" };
@@ -101,7 +101,7 @@ struct HfTaskMcEfficiency {
101
101
return track.isGlobalTrackWoDCA ();
102
102
}
103
103
104
- template <bool mc, bool hasDplus, bool hasDs, bool hasLc, typename T1, typename T2, typename T3>
104
+ template <bool mc, bool hasDplus, bool hasDs, bool hasLc, bool hasXicPlus, typename T1, typename T2, typename T3>
105
105
void candidate3ProngLoop (T1& candidates, T2& tracks, T3& mcParticles, std::vector<int > pdgCodes)
106
106
{
107
107
using TracksType = std::decay_t <decltype (tracks)>;
@@ -130,6 +130,11 @@ struct HfTaskMcEfficiency {
130
130
pdgDaughters[0 ] = +kProton ;
131
131
pdgDaughters[1 ] = -kKPlus ;
132
132
pdgDaughters[2 ] = +kPiPlus ;
133
+ } else if (pdgCode == Pdg::kXiCPlus ) {
134
+ decayType = 1 << aod::hf_cand_3prong::DecayType::XicToPKPi;
135
+ pdgDaughters[0 ] = +kProton ;
136
+ pdgDaughters[1 ] = -kKPlus ;
137
+ pdgDaughters[2 ] = +kPiPlus ;
133
138
} else {
134
139
LOGP (fatal, " Not implemented for PDG {}" , pdgCode);
135
140
}
@@ -164,6 +169,12 @@ struct HfTaskMcEfficiency {
164
169
isHypoMass2SelStep = candidate.isSelLcToPiKP ();
165
170
}
166
171
}
172
+ if constexpr (hasXicPlus) {
173
+ if (pdgCode == Pdg::kXiCPlus ) {
174
+ isHypoMass1SelStep = candidate.isSelXicToPKPi ();
175
+ isHypoMass2SelStep = candidate.isSelXicToPiKP ();
176
+ }
177
+ }
167
178
168
179
bool collisionMatched = false ;
169
180
int origin = RecoDecay::OriginType::None;
@@ -194,6 +205,23 @@ struct HfTaskMcEfficiency {
194
205
}
195
206
}
196
207
208
+ if (pdgCode == Pdg::kXiCPlus ) {
209
+ auto daughter = trackPos.mcParticle ();
210
+ if (std::abs (daughter.pdgCode ()) == kProton ) {
211
+ isHypoMass1TrackStep = true ;
212
+ isHypoMass1SelStep = true ;
213
+ isHypoMass2TrackStep = false ;
214
+ isHypoMass2SelStep = false ;
215
+ } else if (std::abs (daughter.pdgCode ()) == kPiPlus ) {
216
+ isHypoMass1TrackStep = false ;
217
+ isHypoMass1SelStep = false ;
218
+ isHypoMass2TrackStep = true ;
219
+ isHypoMass2SelStep = true ;
220
+ } else {
221
+ continue ;
222
+ }
223
+ }
224
+
197
225
collisionMatched = candidate.template collision_as <aod::McCollisionLabels>().mcCollisionId () == mcParticles.iteratorAt (indexRec).mcCollisionId ();
198
226
} // / end info MC used
199
227
@@ -207,6 +235,8 @@ struct HfTaskMcEfficiency {
207
235
if (isHypoMass1TrackStep) {
208
236
if (pdgCode == Pdg::kLambdaCPlus ) {
209
237
massHypo1 = hfHelper.invMassLcToPKPi (candidate);
238
+ } else if (pdgCode == Pdg::kXiCPlus ) {
239
+ massHypo1 = hfHelper.invMassXicToPKPi (candidate);
210
240
} else if (pdgCode == Pdg::kDPlus ) {
211
241
massHypo1 = hfHelper.invMassDplusToPiKPi (candidate);
212
242
} else if (pdgCode == Pdg::kDS ) {
@@ -217,6 +247,8 @@ struct HfTaskMcEfficiency {
217
247
if (isHypoMass2TrackStep) {
218
248
if (pdgCode == Pdg::kLambdaCPlus ) {
219
249
massHypo2 = hfHelper.invMassLcToPiKP (candidate);
250
+ } else if (pdgCode == Pdg::kXiCPlus ) {
251
+ massHypo2 = hfHelper.invMassXicToPiKP (candidate);
220
252
} else if (pdgCode == Pdg::kDS ) {
221
253
massHypo2 = hfHelper.invMassDsToPiKK (candidate);
222
254
}
@@ -481,10 +513,10 @@ struct HfTaskMcEfficiency {
481
513
482
514
// / 3-prong analyses
483
515
484
- template <bool hasDplus, bool hasDs, bool hasLc, typename C>
516
+ template <bool hasDplus, bool hasDs, bool hasLc, bool hasXicPlus, typename C>
485
517
void candidate3ProngMcLoop (C const & candidates, TracksWithSelectionMC const & tracks, aod::McParticles const & mcParticles, aod::McCollisionLabels const &, std::vector<int > pdgCodes)
486
518
{
487
- candidate3ProngLoop<true , hasDplus, hasDs, hasLc>(candidates, tracks, mcParticles, pdgCodes);
519
+ candidate3ProngLoop<true , hasDplus, hasDs, hasLc, hasXicPlus >(candidates, tracks, mcParticles, pdgCodes);
488
520
489
521
auto hCandidates = registry.get <StepTHn>(HIST (" hCandidates" ));
490
522
auto hTrackablePtEta = registry.get <StepTHn>(HIST (" hTrackablePtEta" ));
@@ -535,6 +567,10 @@ struct HfTaskMcEfficiency {
535
567
pdgDaughters[0 ] = +kProton ;
536
568
pdgDaughters[1 ] = -kKPlus ;
537
569
pdgDaughters[2 ] = +kPiPlus ;
570
+ } else if (pdgCode == Pdg::kXiCPlus ) {
571
+ pdgDaughters[0 ] = +kProton ;
572
+ pdgDaughters[1 ] = -kKPlus ;
573
+ pdgDaughters[2 ] = +kPiPlus ;
538
574
} else {
539
575
LOGP (fatal, " Not implemented for PDG {}" , pdgCode);
540
576
}
@@ -661,55 +697,63 @@ struct HfTaskMcEfficiency {
661
697
TracksWithSelection const & tracks)
662
698
{
663
699
std::vector<int > pdgCodes{Pdg::kDPlus };
664
- candidate3ProngLoop<false , true , false , false >(candidates, tracks, tracks, pdgCodes);
700
+ candidate3ProngLoop<false , true , false , false , false >(candidates, tracks, tracks, pdgCodes);
665
701
}
666
702
PROCESS_SWITCH (HfTaskMcEfficiency, processDataDplus, " Process D+ data (no MC information needed)" , false );
667
703
668
704
void processDataDs (soa::Join<aod::HfCand3Prong, aod::HfSelDsToKKPi> const & candidates,
669
705
TracksWithSelection const & tracks)
670
706
{
671
707
std::vector<int > pdgCodes{Pdg::kDS };
672
- candidate3ProngLoop<false , false , true , false >(candidates, tracks, tracks, pdgCodes);
708
+ candidate3ProngLoop<false , false , true , false , false >(candidates, tracks, tracks, pdgCodes);
673
709
}
674
710
PROCESS_SWITCH (HfTaskMcEfficiency, processDataDs, " Process Ds+ data (no MC information needed)" , false );
675
711
676
712
void processDataLc (soa::Join<aod::HfCand3Prong, aod::HfSelLc> const & candidates,
677
713
TracksWithSelection const & tracks)
678
714
{
679
715
std::vector<int > pdgCodes{Pdg::kLambdaCPlus };
680
- candidate3ProngLoop<false , false , false , true >(candidates, tracks, tracks, pdgCodes);
716
+ candidate3ProngLoop<false , false , false , true , false >(candidates, tracks, tracks, pdgCodes);
681
717
}
682
718
PROCESS_SWITCH (HfTaskMcEfficiency, processDataLc, " Process Lc data (no MC information needed)" , false );
683
719
720
+ void processDataXic (soa::Join<aod::HfCand3Prong, aod::HfSelXicToPKPi> const & candidates,
721
+ TracksWithSelection const & tracks)
722
+ {
723
+ std::vector<int > pdgCodes{Pdg::kXiCPlus };
724
+ candidate3ProngLoop<false , false , false , false , true >(candidates, tracks, tracks, pdgCodes);
725
+ }
726
+ PROCESS_SWITCH (HfTaskMcEfficiency, processDataXic, " Process Xic data (no MC information needed)" , false );
727
+
684
728
void processDataDplusDs (soa::Join<aod::HfCand3Prong, aod::HfSelDplusToPiKPi, aod::HfSelDsToKKPi> const & candidates,
685
729
TracksWithSelection const & tracks)
686
730
{
687
731
std::vector<int > pdgCodes{Pdg::kDPlus , Pdg::kDS };
688
- candidate3ProngLoop<false , true , true , false >(candidates, tracks, tracks, pdgCodes);
732
+ candidate3ProngLoop<false , true , true , false , false >(candidates, tracks, tracks, pdgCodes);
689
733
}
690
734
PROCESS_SWITCH (HfTaskMcEfficiency, processDataDplusDs, " Process D+ and Ds+ data (no MC information needed)" , false );
691
735
692
736
void processDataDplusDsLc (soa::Join<aod::HfCand3Prong, aod::HfSelDplusToPiKPi, aod::HfSelDsToKKPi, aod::HfSelLc> const & candidates,
693
737
TracksWithSelection const & tracks)
694
738
{
695
739
std::vector<int > pdgCodes{Pdg::kDPlus , Pdg::kDS , Pdg::kLambdaCPlus };
696
- candidate3ProngLoop<false , true , true , true >(candidates, tracks, tracks, pdgCodes);
740
+ candidate3ProngLoop<false , true , true , true , false >(candidates, tracks, tracks, pdgCodes);
697
741
}
698
742
PROCESS_SWITCH (HfTaskMcEfficiency, processDataDplusDsLc, " Process D+, Ds+, and Lc data (no MC information needed)" , false );
699
743
700
744
void processDataDplusLc (soa::Join<aod::HfCand3Prong, aod::HfSelDplusToPiKPi, aod::HfSelLc> const & candidates,
701
745
TracksWithSelection const & tracks)
702
746
{
703
747
std::vector<int > pdgCodes{Pdg::kDPlus , Pdg::kLambdaCPlus };
704
- candidate3ProngLoop<false , true , false , true >(candidates, tracks, tracks, pdgCodes);
748
+ candidate3ProngLoop<false , true , false , true , false >(candidates, tracks, tracks, pdgCodes);
705
749
}
706
750
PROCESS_SWITCH (HfTaskMcEfficiency, processDataDplusLc, " Process D+ and Lc data (no MC information needed)" , false );
707
751
708
752
void processDataDsLc (soa::Join<aod::HfCand3Prong, aod::HfSelDsToKKPi, aod::HfSelLc> const & candidates,
709
753
TracksWithSelection const & tracks)
710
754
{
711
755
std::vector<int > pdgCodes{Pdg::kDPlus , Pdg::kDS , Pdg::kLambdaCPlus };
712
- candidate3ProngLoop<false , false , true , true >(candidates, tracks, tracks, pdgCodes);
756
+ candidate3ProngLoop<false , false , true , true , false >(candidates, tracks, tracks, pdgCodes);
713
757
}
714
758
PROCESS_SWITCH (HfTaskMcEfficiency, processDataDsLc, " Process Ds+ and Lc data (no MC information needed)" , false );
715
759
@@ -730,7 +774,7 @@ struct HfTaskMcEfficiency {
730
774
aod::McCollisionLabels const & colls)
731
775
{
732
776
std::vector<int > pdgCodes{Pdg::kDPlus };
733
- candidate3ProngMcLoop<true , false , false >(candidates, tracks, mcParticles, colls, pdgCodes);
777
+ candidate3ProngMcLoop<true , false , false , false >(candidates, tracks, mcParticles, colls, pdgCodes);
734
778
}
735
779
PROCESS_SWITCH (HfTaskMcEfficiency, processMcDplus, " Process MC for D+ signal" , false );
736
780
@@ -740,7 +784,7 @@ struct HfTaskMcEfficiency {
740
784
aod::McCollisionLabels const & colls)
741
785
{
742
786
std::vector<int > pdgCodes{Pdg::kDS };
743
- candidate3ProngMcLoop<false , true , false >(candidates, tracks, mcParticles, colls, pdgCodes);
787
+ candidate3ProngMcLoop<false , true , false , false >(candidates, tracks, mcParticles, colls, pdgCodes);
744
788
}
745
789
PROCESS_SWITCH (HfTaskMcEfficiency, processMcDs, " Process MC for Ds+ signal" , false );
746
790
@@ -750,17 +794,27 @@ struct HfTaskMcEfficiency {
750
794
aod::McCollisionLabels const & colls)
751
795
{
752
796
std::vector<int > pdgCodes{Pdg::kLambdaCPlus };
753
- candidate3ProngMcLoop<false , false , true >(candidates, tracks, mcParticles, colls, pdgCodes);
797
+ candidate3ProngMcLoop<false , false , true , false >(candidates, tracks, mcParticles, colls, pdgCodes);
754
798
}
755
799
PROCESS_SWITCH (HfTaskMcEfficiency, processMcLc, " Process MC for Lc signal" , false );
756
800
801
+ void processMcXic (soa::Join<aod::HfCand3Prong, aod::HfSelXicToPKPi> const & candidates,
802
+ TracksWithSelectionMC const & tracks,
803
+ aod::McParticles const & mcParticles,
804
+ aod::McCollisionLabels const & colls)
805
+ {
806
+ std::vector<int > pdgCodes{Pdg::kXiCPlus };
807
+ candidate3ProngMcLoop<false , false , false , true >(candidates, tracks, mcParticles, colls, pdgCodes);
808
+ }
809
+ PROCESS_SWITCH (HfTaskMcEfficiency, processMcXic, " Process MC for Xic signal" , false );
810
+
757
811
void processMcDplusDs (soa::Join<aod::HfCand3Prong, aod::HfSelDplusToPiKPi, aod::HfSelDsToKKPi> const & candidates,
758
812
TracksWithSelectionMC const & tracks,
759
813
aod::McParticles const & mcParticles,
760
814
aod::McCollisionLabels const & colls)
761
815
{
762
816
std::vector<int > pdgCodes{Pdg::kDPlus , Pdg::kDS };
763
- candidate3ProngMcLoop<true , true , false >(candidates, tracks, mcParticles, colls, pdgCodes);
817
+ candidate3ProngMcLoop<true , true , false , false >(candidates, tracks, mcParticles, colls, pdgCodes);
764
818
}
765
819
PROCESS_SWITCH (HfTaskMcEfficiency, processMcDplusDs, " Process MC for D+ and Ds+ signals" , false );
766
820
@@ -770,7 +824,7 @@ struct HfTaskMcEfficiency {
770
824
aod::McCollisionLabels const & colls)
771
825
{
772
826
std::vector<int > pdgCodes{Pdg::kDPlus , Pdg::kDS , Pdg::kLambdaCPlus };
773
- candidate3ProngMcLoop<true , true , true >(candidates, tracks, mcParticles, colls, pdgCodes);
827
+ candidate3ProngMcLoop<true , true , true , false >(candidates, tracks, mcParticles, colls, pdgCodes);
774
828
}
775
829
PROCESS_SWITCH (HfTaskMcEfficiency, processMcDplusDsLc, " Process MC for D+, Ds+, and Lc signals" , false );
776
830
@@ -780,7 +834,7 @@ struct HfTaskMcEfficiency {
780
834
aod::McCollisionLabels const & colls)
781
835
{
782
836
std::vector<int > pdgCodes{Pdg::kDPlus , Pdg::kLambdaCPlus };
783
- candidate3ProngMcLoop<true , false , true >(candidates, tracks, mcParticles, colls, pdgCodes);
837
+ candidate3ProngMcLoop<true , false , true , false >(candidates, tracks, mcParticles, colls, pdgCodes);
784
838
}
785
839
PROCESS_SWITCH (HfTaskMcEfficiency, processMcDplusLc, " Process MC for D+ and Lc signals" , false );
786
840
@@ -790,7 +844,7 @@ struct HfTaskMcEfficiency {
790
844
aod::McCollisionLabels const & colls)
791
845
{
792
846
std::vector<int > pdgCodes{Pdg::kDS , Pdg::kLambdaCPlus };
793
- candidate3ProngMcLoop<false , true , true >(candidates, tracks, mcParticles, colls, pdgCodes);
847
+ candidate3ProngMcLoop<false , true , true , false >(candidates, tracks, mcParticles, colls, pdgCodes);
794
848
}
795
849
PROCESS_SWITCH (HfTaskMcEfficiency, processMcDsLc, " Process MC for Ds+ and Lc signals" , false );
796
850
};
0 commit comments