@@ -47,6 +47,25 @@ using ReducedCols = soa::Join<aod::RedCollisions, aod::RedCentFT0Cs>;
4747using FullTracksExtIU = soa::Join<aod::TracksIU, aod::TracksExtra, aod::TracksCovIU, aod::pidTPCFullPr, aod::pidTPCFullPi, aod::pidTPCFullDe>;
4848using MCLabeledTracksIU = soa::Join<FullTracksExtIU, aod::McTrackLabels>;
4949
50+ std::vector<std::string> triggerLabels = {
51+ " fTriggerEventF1Proton" , " fTrackedOmega" , " fTrackedXi" , " fOmegaLargeRadius" ,
52+ " fDoubleOmega" , " fOmegaHighMult" , " fSingleXiYN" , " fQuadrupleXi" , " fDoubleXi" ,
53+ " fhadronOmega" , " fOmegaXi" , " fTripleXi" , " fOmega" , " fGammaVeryLowPtEMCAL" ,
54+ " fGammaVeryLowPtDCAL" , " fGammaHighPtEMCAL" , " fGammaLowPtEMCAL" , " fGammaVeryHighPtDCAL" ,
55+ " fGammaVeryHighPtEMCAL" , " fGammaLowPtDCAL" , " fJetNeutralLowPt" , " fJetNeutralHighPt" ,
56+ " fGammaHighPtDCAL" , " fJetFullLowPt" , " fJetFullHighPt" , " fEMCALReadout" , " fPCMandEE" ,
57+ " fPHOSnbar" , " fPCMHighPtPhoton" , " fPHOSPhoton" , " fLD" , " fPPPHI" , " fPD" , " fLLL" , " fPLL" ,
58+ " fPPL" , " fPPP" , " fLeadingPtTrack" , " fHighFt0cFv0Flat" , " fHighFt0cFv0Mult" , " fHighFt0Flat" ,
59+ " fHighFt0Mult" , " fHighMultFv0" , " fHighTrackMult" , " fHfSingleNonPromptCharm3P" ,
60+ " fHfSingleNonPromptCharm2P" , " fHfSingleCharm3P" , " fHfPhotonCharm3P" , " fHfHighPt2P" ,
61+ " fHfSigmaC0K0" , " fHfDoubleCharm2P" , " fHfBeauty3P" , " fHfFemto3P" , " fHfFemto2P" ,
62+ " fHfHighPt3P" , " fHfSigmaCPPK" , " fHfDoubleCharm3P" , " fHfDoubleCharmMix" ,
63+ " fHfPhotonCharm2P" , " fHfV0Charm2P" , " fHfBeauty4P" , " fHfV0Charm3P" , " fHfSingleCharm2P" ,
64+ " fHfCharmBarToXiBach" , " fSingleMuHigh" , " fSingleMuLow" , " fLMeeHMR" , " fDiMuon" ,
65+ " fDiElectron" , " fLMeeIMR" , " fSingleE" , " fTrackHighPt" , " fTrackLowPt" , " fJetChHighPt" ,
66+ " fJetChLowPt" , " fUDdiffLarge" , " fUDdiffSmall" , " fITSextremeIonisation" ,
67+ " fITSmildIonisation" , " fH3L3Body" , " fHe" , " fH2" };
68+
5069struct Candidate3body {
5170 // Index
5271 int mcmotherId;
@@ -102,8 +121,9 @@ struct ThreebodyRecoTask {
102121 PresliceUnsorted<aod::Vtx3BodyDatas> perCollisionVtx3BodyDatas = o2::aod::vtx3body::collisionId;
103122
104123 // Configurable for trigger selection
105- Configurable<std::string> triggerList{" triggerList" , " fH3L3Body" , " List of triggers used to select events" };
124+ Configurable<std::string> triggerList{"triggerList", "fTriggerEventF1Proton, fTrackedOmega, fTrackedXi, fOmegaLargeRadius, fDoubleOmega, fOmegaHighMult, fSingleXiYN, fQuadrupleXi, fDoubleXi, fhadronOmega, fOmegaXi, fTripleXi, fOmega, fGammaVeryLowPtEMCAL, fGammaVeryLowPtDCAL, fGammaHighPtEMCAL, fGammaLowPtEMCAL, fGammaVeryHighPtDCAL, fGammaVeryHighPtEMCAL, fGammaLowPtDCAL, fJetNeutralLowPt, fJetNeutralHighPt, fGammaHighPtDCAL, fJetFullLowPt, fJetFullHighPt, fEMCALReadout, fPCMandEE, fPHOSnbar, fPCMHighPtPhoton, fPHOSPhoton, fLD, fPPPHI, fPD, fLLL, fPLL, fPPL, fPPP, fLeadingPtTrack, fHighFt0cFv0Flat, fHighFt0cFv0Mult, fHighFt0Flat, fHighFt0Mult, fHighMultFv0, fHighTrackMult, fHfSingleNonPromptCharm3P, fHfSingleNonPromptCharm2P, fHfSingleCharm3P, fHfPhotonCharm3P, fHfHighPt2P, fHfSigmaC0K0, fHfDoubleCharm2P, fHfBeauty3P, fHfFemto3P, fHfFemto2P, fHfHighPt3P, fHfSigmaCPPK, fHfDoubleCharm3P, fHfDoubleCharmMix, fHfPhotonCharm2P, fHfV0Charm2P, fHfBeauty4P, fHfV0Charm3P, fHfSingleCharm2P, fHfCharmBarToXiBach, fSingleMuHigh, fSingleMuLow, fLMeeHMR, fDiMuon, fDiElectron, fLMeeIMR, fSingleE, fTrackHighPt, fTrackLowPt, fJetChHighPt, fJetChLowPt, fUDdiffLarge, fUDdiffSmall, fITSextremeIonisation, fITSmildIonisation, fH3L3Body, fHe, fH2", "List of triggers used to select events"};
106125 Configurable<bool > cfgOnlyKeepInterestedTrigger{" cfgOnlyKeepInterestedTrigger" , false , " Flag to keep only interested trigger" };
126+ Configurable<int > bcTolerance{" bcTolerance" , 100 , " Tolerance for BC in Zorro" };
107127 // Configuration to enable like-sign analysis
108128 Configurable<bool > cfgLikeSignAnalysis{" cfgLikeSignAnalysis" , false , " Enable like-sign analysis" };
109129 // Selection criteria
@@ -224,6 +244,7 @@ struct ThreebodyRecoTask {
224244 void init (InitContext const &)
225245 {
226246 zorroSummary.setObject (zorro.getZorroSummary ());
247+
227248 mRunNumber = 0 ;
228249
229250 ccdb->setURL (ccdbUrl);
@@ -243,6 +264,13 @@ struct ThreebodyRecoTask {
243264 registry.add (" hDiffRVtxDeuteron" , " hDiffRVtxDeuteron" , HistType::kTH1F , {{100 , -10 , 10 }}); // difference between the radius of decay vertex and minR of deuteron
244265 registry.add (" hDiffDaughterR" , " hDiffDaughterR" , HistType::kTH1F , {{10000 , -100 , 100 }}); // difference between minR of pion&proton and R of deuteron(bachelor)
245266
267+ // Check triggers
268+ auto hEventTriggerCount = registry.add <TH1>(" hEventTriggerCount" , " hEventTriggerCount" , HistType::kTH1F , {{static_cast <int >(triggerLabels.size () + 1 ), 0 , static_cast <double >(triggerLabels.size () + 1 )}});
269+ for (size_t i = 0 ; i < triggerLabels.size (); i++) {
270+ hEventTriggerCount->GetXaxis ()->SetBinLabel (i + 1 , triggerLabels[i].c_str ());
271+ }
272+ hEventTriggerCount->GetXaxis ()->SetBinLabel (triggerLabels.size () + 1 , " NoTrigger" );
273+
246274 if (cfgLikeSignAnalysis) {
247275 registry.add (" hInvMassCorrectSign" , " hInvMassCorrectSign" , HistType::kTH1F , {{80 , 2 .96f , 3 .04f }}); // check if there are contamination of possible signals which are caused by unexpected PID
248276 }
@@ -282,6 +310,7 @@ struct ThreebodyRecoTask {
282310 zorro.populateHistRegistry (registry, bc.runNumber ());
283311 }
284312
313+ LOGF (info, " Initializing CCDB for run %d" , bc.runNumber ());
285314 mRunNumber = bc.runNumber ();
286315 }
287316
@@ -296,13 +325,13 @@ struct ThreebodyRecoTask {
296325 bool haveProton = false , havePion = false , haveBachelor = false ;
297326 bool haveAntiProton = false , haveAntiPion = false , haveAntiBachelor = false ;
298327 for (const auto & mcparticleDaughter : particle.template daughters_as <TMCTrackTo>()) {
299- if (mcparticleDaughter.pdgCode () == 2212 )
328+ if (mcparticleDaughter.pdgCode () == PDG_t:: kProton )
300329 haveProton = true ;
301- if (mcparticleDaughter.pdgCode () == - 2212 )
330+ if (mcparticleDaughter.pdgCode () == PDG_t:: kProtonBar )
302331 haveAntiProton = true ;
303- if (mcparticleDaughter.pdgCode () == 211 )
332+ if (mcparticleDaughter.pdgCode () == PDG_t:: kPiPlus )
304333 havePion = true ;
305- if (mcparticleDaughter.pdgCode () == - 211 )
334+ if (mcparticleDaughter.pdgCode () == PDG_t:: kPiMinus )
306335 haveAntiPion = true ;
307336 if (mcparticleDaughter.pdgCode () == bachelorPdgCode)
308337 haveBachelor = true ;
@@ -642,13 +671,13 @@ struct ThreebodyRecoTask {
642671 bool haveAntiProton = false , havePionMinus = false , haveAntiDeuteron = false ;
643672 double mcLifetime = -1 ;
644673 for (const auto & mcparticleDaughter : mcparticle.template daughters_as <aod::McParticles>()) {
645- if (mcparticleDaughter.pdgCode () == 2212 )
674+ if (mcparticleDaughter.pdgCode () == PDG_t:: kProton )
646675 haveProton = true ;
647- if (mcparticleDaughter.pdgCode () == - 2212 )
676+ if (mcparticleDaughter.pdgCode () == PDG_t:: kProtonBar )
648677 haveAntiProton = true ;
649- if (mcparticleDaughter.pdgCode () == 211 )
678+ if (mcparticleDaughter.pdgCode () == PDG_t:: kPiPlus )
650679 havePionPlus = true ;
651- if (mcparticleDaughter.pdgCode () == -211 )
680+ if (mcparticleDaughter.pdgCode () == -PDG_t:: kPiPlus )
652681 havePionMinus = true ;
653682 if (mcparticleDaughter.pdgCode () == bachelorPdgCode) {
654683 haveDeuteron = true ;
@@ -695,8 +724,20 @@ struct ThreebodyRecoTask {
695724 candidateAnalysis<FullTracksExtIU>(collision, vtx, ifHasCandidate);
696725 }
697726 }
698- if (ifHasCandidate)
727+
728+ if (ifHasCandidate) {
729+ auto bc = collision.bc_as <aod::BCsWithTimestamps>();
730+ auto triggerSelection = zorro.getTriggerOfInterestResults (bc.globalBC (), bcTolerance);
731+ for (size_t i = 0 ; i < triggerSelection.size (); i++) {
732+ if (triggerSelection[i]) {
733+ registry.fill (HIST (" hEventTriggerCount" ), i + 0.5 );
734+ }
735+ }
736+ if (zorro.isNotSelectedByAny (bc.globalBC (), bcTolerance)) {
737+ registry.fill (HIST (" hEventTriggerCount" ), triggerLabels.size () + 0.5 );
738+ }
699739 registry.fill (HIST (" hEventCounter" ), 4.5 );
740+ }
700741 fillHistos ();
701742 resetHistos ();
702743
@@ -713,6 +754,8 @@ struct ThreebodyRecoTask {
713754 {
714755 candidates3body.clear ();
715756
757+ registry.fill (HIST (" hEventCounter" ), 0.5 , collisions.size ());
758+
716759 for (const auto & vtx : vtx3bodydatas) {
717760 const auto & collision = collisions.iteratorAt (vtx.collisionId ());
718761 if (cfgLikeSignAnalysis) {
@@ -784,8 +827,8 @@ struct ThreebodyRecoTask {
784827 if (lMother0.globalIndex () == lMother1.globalIndex () && lMother0.globalIndex () == lMother2.globalIndex ()) {
785828 lLabel = lMother0.globalIndex ();
786829 lPDG = lMother0.pdgCode ();
787- if ((lPDG == motherPdgCode && lMCTrack0.pdgCode () == 2212 && lMCTrack1.pdgCode () == - 211 && lMCTrack2.pdgCode () == bachelorPdgCode) ||
788- (lPDG == -motherPdgCode && lMCTrack0.pdgCode () == 211 && lMCTrack1.pdgCode () == - 2212 && lMCTrack2.pdgCode () == -bachelorPdgCode)) {
830+ if ((lPDG == motherPdgCode && lMCTrack0.pdgCode () == PDG_t:: kProton && lMCTrack1.pdgCode () == PDG_t:: kPiMinus && lMCTrack2.pdgCode () == bachelorPdgCode) ||
831+ (lPDG == -motherPdgCode && lMCTrack0.pdgCode () == PDG_t:: kPiPlus && lMCTrack1.pdgCode () == PDG_t:: kProtonBar && lMCTrack2.pdgCode () == -bachelorPdgCode)) {
789832 isTrueCand = true ;
790833 mcLifetime = RecoDecay::sqrtSumOfSquares (lMCTrack2.vx () - lMother2.vx (), lMCTrack2.vy () - lMother2.vy (), lMCTrack2.vz () - lMother2.vz ()) * o2::constants::physics::MassHyperTriton / lMother2.p ();
791834 lmother.SetXYZM (lMother0.px (), lMother0.py (), lMother0.pz (), o2::constants::physics::MassHyperTriton);
0 commit comments