diff --git a/EventFiltering/PWGHF/HFFilter.cxx b/EventFiltering/PWGHF/HFFilter.cxx index 40e73859d2c..3f05e59f9df 100644 --- a/EventFiltering/PWGHF/HFFilter.cxx +++ b/EventFiltering/PWGHF/HFFilter.cxx @@ -149,14 +149,13 @@ struct HfFilter { // Main struct for HF triggers // parameters for Sigma_C proton trigger Configurable> cutsSigmaCPr{ - "cutsSigmaCPr", - {cutsSigmaCPrDefault[0], - static_cast(labelsRowsSigmaCPr.size()), - static_cast(labelsColumnsSigmaCPr.size()), - labelsRowsSigmaCPr, - labelsColumnsSigmaCPr}, - "Cuts for SigmaCPr trigger (proton pT, PID, TOF)" -}; + "cutsSigmaCPr", + {cutsSigmaCPrDefault[0], + static_cast(labelsRowsSigmaCPr.size()), + static_cast(labelsColumnsSigmaCPr.size()), + labelsRowsSigmaCPr, + labelsColumnsSigmaCPr}, + "Cuts for SigmaCPr trigger (proton pT, PID, TOF)"}; // parameters for charm baryons to Xi bachelor Configurable> cutsXiCascades{"cutsXiCascades", {cutsCascades[0], 1, 8, labelsEmpty, labelsColumnsCascades}, "Selections for cascades (Xi) for Xi+bachelor triggers"}; Configurable> cutsXiBachelor{"cutsXiBachelor", {cutsCharmBaryons[0], 1, 15, labelsEmpty, labelsColumnsCharmBarCuts}, "Selections for charm baryons (Xi+Pi, Xi+Ka, Xi+Pi+Pi)"}; @@ -295,15 +294,15 @@ struct HfFilter { // Main struct for HF triggers helper.setPtRangeSoftKaonXicResoToSigmaC(ptCuts->get(0u, 5u), ptCuts->get(1u, 5u)); helper.setVtxConfiguration(dfStrangeness, true); // (DCAFitterN, useAbsDCA) helper.setVtxConfiguration(dfStrangeness3, true); // (DCAFitterN, useAbsDCA) - helper.setParSigmaCPr( - cutsPtDeltaMassCharmReso->get(0u, 13u), // min ΔM - cutsPtDeltaMassCharmReso->get(1u, 13u), // max ΔM - cutsPtDeltaMassCharmReso->get(2u, 13u), // min pT SigmaC - cutsSigmaCPr->get(0u, 0u), // min pT proton - cutsSigmaCPr->get(1u, 0u), // max pT proton - static_cast(cutsSigmaCPr->get(2u, 0u)), // force TOF - cutsSigmaCPr->get(3u, 0u) // TOF pT threshold - ); + helper.setParSigmaCPr( + cutsPtDeltaMassCharmReso->get(0u, 13u), // min ΔM + cutsPtDeltaMassCharmReso->get(1u, 13u), // max ΔM + cutsPtDeltaMassCharmReso->get(2u, 13u), // min pT SigmaC + cutsSigmaCPr->get(0u, 0u), // min pT proton + cutsSigmaCPr->get(1u, 0u), // max pT proton + static_cast(cutsSigmaCPr->get(2u, 0u)), // force TOF + cutsSigmaCPr->get(3u, 0u) // TOF pT threshold + ); dfStrangeness.setMatCorrType(matCorr); dfStrangeness3.setMatCorrType(matCorr); helper.setVtxConfiguration(df2, false); // (DCAFitterN, useAbsDCA) @@ -390,7 +389,7 @@ struct HfFilter { // Main struct for HF triggers // ThetaC hMassVsPtC[kNCharmParticles + 21] = registry.add("fMassVsPtCharmBaryonToDstarP", "#it{M} vs. #it{p}_{T} distribution of triggered D^{*0}#p candidates;#it{p}_{T} (GeV/#it{c});#it{M} (GeV/#it{c}^{2});counts", HistType::kTH2D, {ptAxis, massAxisC[kNCharmParticles + 21]}); hMassVsPtC[kNCharmParticles + 22] = registry.add("fMassVsPtCharmBaryonToDstarPWrongSign", "#it{M} vs. #it{p}_{T} distribution of triggered D^{*0}#p wrong sign candidates;#it{p}_{T} (GeV/#it{c});#it{M} (GeV/#it{c}^{2});counts", HistType::kTH2D, {ptAxis, massAxisC[kNCharmParticles + 22]}); - //SigmaC-p + // SigmaC-p hMassVsPtC[kNCharmParticles + 23] = registry.add("fMassVsPtSigmaCPr", "#it{M} vs. #it{p}_{T} distribution of #Sigma_{c} for SigmaCPr trigger;#it{p}_{T} (GeV/#it{c});#it{M} (GeV/#it{c}^{2});counts", HistType::kTH2D, {ptAxis, massAxisC[kNCharmParticles + 23]}); for (int iBeautyPart{0}; iBeautyPart < kNBeautyParticles; ++iBeautyPart) { @@ -480,7 +479,7 @@ struct HfFilter { // Main struct for HF triggers bool isSelectedITSROFBorder = evSel.applyITSROFBorderCut ? collision.selection_bit(o2::aod::evsel::kNoITSROFrameBorder) : true; bool isSelectedPvZ = (std::fabs(collision.posZ()) < evSel.maxPvZ); if (!isSelectedTVX || !isSelectedTFBorder || !isSelectedITSROFBorder || !isSelectedPvZ) { - tags(keepEvent[kHighPt2P], keepEvent[kHighPt3P], keepEvent[kBeauty3P], keepEvent[kBeauty4P], keepEvent[kFemto2P], keepEvent[kFemto3P], keepEvent[kDoubleCharm2P], keepEvent[kDoubleCharm3P], keepEvent[kDoubleCharmMix], keepEvent[kV0Charm2P], keepEvent[kV0Charm3P], keepEvent[kCharmBarToXiBach], keepEvent[kSigmaCPPK], keepEvent[kSigmaC0K0], keepEvent[kSigmaCPr], keepEvent[kPhotonCharm2P], keepEvent[kPhotonCharm3P], keepEvent[kSingleCharm2P], keepEvent[kSingleCharm3P], keepEvent[kSingleNonPromptCharm2P], keepEvent[kSingleNonPromptCharm3P], keepEvent[kCharmBarToXi2Bach], keepEvent[kPrCharm2P], keepEvent[kBtoJPsiKa], keepEvent[kBtoJPsiKstar], keepEvent[kBtoJPsiPhi], keepEvent[kBtoJPsiPrKa], keepEvent[kBtoJPsiPi]); + tags(keepEvent[kHighPt2P], keepEvent[kHighPt3P], keepEvent[kBeauty3P], keepEvent[kBeauty4P], keepEvent[kFemto2P], keepEvent[kFemto3P], keepEvent[kDoubleCharm2P], keepEvent[kDoubleCharm3P], keepEvent[kDoubleCharmMix], keepEvent[kV0Charm2P], keepEvent[kV0Charm3P], keepEvent[kCharmBarToXiBach], keepEvent[kSigmaCPPK], keepEvent[kSigmaC0K0], keepEvent[kSigmaCPr], keepEvent[kPhotonCharm2P], keepEvent[kPhotonCharm3P], keepEvent[kSingleCharm2P], keepEvent[kSingleCharm3P], keepEvent[kSingleNonPromptCharm2P], keepEvent[kSingleNonPromptCharm3P], keepEvent[kCharmBarToXi2Bach], keepEvent[kPrCharm2P], keepEvent[kBtoJPsiKa], keepEvent[kBtoJPsiKstar], keepEvent[kBtoJPsiPhi], keepEvent[kBtoJPsiPrKa], keepEvent[kBtoJPsiPi]); continue; } @@ -1601,61 +1600,61 @@ struct HfFilter { // Main struct for HF triggers // check the charge for SigmaC++K- candidates - if(!keepEvent[kSigmaCPPK] && (std::abs(chargeSc + track.sign()) == 1 && std::abs(chargeSc) == 2 )){ - // check the invariant mass - float massSigmaCPKPi{-999.}, massSigmaCPiKP{-999.}, deltaMassXicResoPKPi{-999.}, deltaMassXicResoPiKP{-999.}; - float ptSigmaCKaon = RecoDecay::pt(pVecSigmaC, pVecFourth); + if (!keepEvent[kSigmaCPPK] && (std::abs(chargeSc + track.sign()) == 1 && std::abs(chargeSc) == 2)) { + // check the invariant mass + float massSigmaCPKPi{-999.}, massSigmaCPiKP{-999.}, deltaMassXicResoPKPi{-999.}, deltaMassXicResoPiKP{-999.}; + float ptSigmaCKaon = RecoDecay::pt(pVecSigmaC, pVecFourth); - if (ptSigmaCKaon > cutsPtDeltaMassCharmReso->get(2u, 10u)) { - if (TESTBIT(whichSigmaC, 0)) { - massSigmaCPKPi = RecoDecay::m(std::array{pVecFirst, pVecSecond, pVecThird, pVecSoftPi}, std::array{massProton, massKa, massPi, massPi}); - deltaMassXicResoPKPi = RecoDecay::m(std::array{pVecFirst, pVecSecond, pVecThird, pVecSoftPi, pVecFourth}, std::array{massProton, massKa, massPi, massPi, massKa}) - massSigmaCPKPi; - } - if (TESTBIT(whichSigmaC, 1)) { - massSigmaCPiKP = RecoDecay::m(std::array{pVecFirst, pVecSecond, pVecThird, pVecSoftPi}, std::array{massPi, massKa, massProton, massPi}); - deltaMassXicResoPiKP = RecoDecay::m(std::array{pVecFirst, pVecSecond, pVecThird, pVecSoftPi, pVecFourth}, std::array{massPi, massKa, massProton, massPi, massKa}) - massSigmaCPiKP; - } - bool isPKPiOk = (cutsPtDeltaMassCharmReso->get(0u, 10u) < deltaMassXicResoPKPi && deltaMassXicResoPKPi < cutsPtDeltaMassCharmReso->get(1u, 10u)); - bool isPiKPOk = (cutsPtDeltaMassCharmReso->get(0u, 10u) < deltaMassXicResoPiKP && deltaMassXicResoPiKP < cutsPtDeltaMassCharmReso->get(1u, 10u)); - if ((isPKPiOk || isPiKPOk) && isTrackKaon) { - /// This is a good SigmaC++K- event - keepEvent[kSigmaCPPK] = true; + if (ptSigmaCKaon > cutsPtDeltaMassCharmReso->get(2u, 10u)) { + if (TESTBIT(whichSigmaC, 0)) { + massSigmaCPKPi = RecoDecay::m(std::array{pVecFirst, pVecSecond, pVecThird, pVecSoftPi}, std::array{massProton, massKa, massPi, massPi}); + deltaMassXicResoPKPi = RecoDecay::m(std::array{pVecFirst, pVecSecond, pVecThird, pVecSoftPi, pVecFourth}, std::array{massProton, massKa, massPi, massPi, massKa}) - massSigmaCPKPi; + } + if (TESTBIT(whichSigmaC, 1)) { + massSigmaCPiKP = RecoDecay::m(std::array{pVecFirst, pVecSecond, pVecThird, pVecSoftPi}, std::array{massPi, massKa, massProton, massPi}); + deltaMassXicResoPiKP = RecoDecay::m(std::array{pVecFirst, pVecSecond, pVecThird, pVecSoftPi, pVecFourth}, std::array{massPi, massKa, massProton, massPi, massKa}) - massSigmaCPiKP; + } + bool isPKPiOk = (cutsPtDeltaMassCharmReso->get(0u, 10u) < deltaMassXicResoPKPi && deltaMassXicResoPKPi < cutsPtDeltaMassCharmReso->get(1u, 10u)); + bool isPiKPOk = (cutsPtDeltaMassCharmReso->get(0u, 10u) < deltaMassXicResoPiKP && deltaMassXicResoPiKP < cutsPtDeltaMassCharmReso->get(1u, 10u)); + if ((isPKPiOk || isPiKPOk) && isTrackKaon) { + /// This is a good SigmaC++K- event + keepEvent[kSigmaCPPK] = true; - /// QA plot - if (activateQA) { - if (isPKPiOk) { - if (TESTBIT(whichSigmaC, 2)) { - hMassVsPtC[kNCharmParticles + 11]->Fill(ptSigmaCKaon, deltaMassXicResoPKPi); - } - if (TESTBIT(whichSigmaC, 3)) { - hMassVsPtC[kNCharmParticles + 12]->Fill(ptSigmaCKaon, deltaMassXicResoPKPi); - } - } - if (isPiKPOk) { - if (TESTBIT(whichSigmaC, 2)) { - hMassVsPtC[kNCharmParticles + 11]->Fill(ptSigmaCKaon, deltaMassXicResoPiKP); + /// QA plot + if (activateQA) { + if (isPKPiOk) { + if (TESTBIT(whichSigmaC, 2)) { + hMassVsPtC[kNCharmParticles + 11]->Fill(ptSigmaCKaon, deltaMassXicResoPKPi); + } + if (TESTBIT(whichSigmaC, 3)) { + hMassVsPtC[kNCharmParticles + 12]->Fill(ptSigmaCKaon, deltaMassXicResoPKPi); + } } - if (TESTBIT(whichSigmaC, 3)) { - hMassVsPtC[kNCharmParticles + 12]->Fill(ptSigmaCKaon, deltaMassXicResoPiKP); + if (isPiKPOk) { + if (TESTBIT(whichSigmaC, 2)) { + hMassVsPtC[kNCharmParticles + 11]->Fill(ptSigmaCKaon, deltaMassXicResoPiKP); + } + if (TESTBIT(whichSigmaC, 3)) { + hMassVsPtC[kNCharmParticles + 12]->Fill(ptSigmaCKaon, deltaMassXicResoPiKP); + } } } } } } - } } float deltaEta = std::abs(RecoDecay::eta(pVecSigmaC) - track.eta()); if (!keepEvent[kSigmaCPr] && (isTrackProton && deltaEta < 1.0)) { - auto tagBDT = helper.isBDTSelected(scores[2], thresholdBDTScoreScLcToPiKP.value); - int8_t whichSigmaC = helper.isSelectedSigmaCInDeltaMassRange<-1>(pVecFirst, pVecThird, pVecSecond, pVecSoftPi, ptSigmaC, is3Prong[2], hMassVsPtC[kNCharmParticles + 23], activateQA); - if(TESTBIT(whichSigmaC, 4)){ - if(TESTBIT(tagBDT, RecoDecay::OriginType::Prompt)){ + auto tagBDT = helper.isBDTSelected(scores[2], thresholdBDTScoreScLcToPiKP.value); + int8_t whichSigmaC = helper.isSelectedSigmaCInDeltaMassRange<-1>(pVecFirst, pVecThird, pVecSecond, pVecSoftPi, ptSigmaC, is3Prong[2], hMassVsPtC[kNCharmParticles + 23], activateQA); + if (TESTBIT(whichSigmaC, 4)) { + if (TESTBIT(tagBDT, RecoDecay::OriginType::Prompt)) { + } } - } - //helper.selectionSigmaCForScPCorr(pVecFirst, pVecThird, pVecSecond, pVecSoftPi, ptSigmaC, is3Prong[2], hMassVsPtC[kNCharmParticles + 23], activateQA, configSigmaC.minMassSigmaCCorr, configSigmaC.maxMassSigmaCCorr, configSigmaC.minPtSigmaC, configSigmaC.maxPtSigmaC) - if (TESTBIT(whichSigmaC, 4) && TESTBIT(tagBDT, RecoDecay::OriginType::Prompt)) { + // helper.selectionSigmaCForScPCorr(pVecFirst, pVecThird, pVecSecond, pVecSoftPi, ptSigmaC, is3Prong[2], hMassVsPtC[kNCharmParticles + 23], activateQA, configSigmaC.minMassSigmaCCorr, configSigmaC.maxMassSigmaCCorr, configSigmaC.minPtSigmaC, configSigmaC.maxPtSigmaC) + if (TESTBIT(whichSigmaC, 4) && TESTBIT(tagBDT, RecoDecay::OriginType::Prompt)) { keepEvent[kSigmaCPr] = true; - } + } } } // end SigmaC++ candidate } // end loop over tracks (soft pi) @@ -2053,7 +2052,7 @@ struct HfFilter { // Main struct for HF triggers } } - tags(keepEvent[kHighPt2P], keepEvent[kHighPt3P], keepEvent[kBeauty3P], keepEvent[kBeauty4P], keepEvent[kFemto2P], keepEvent[kFemto3P], keepEvent[kDoubleCharm2P], keepEvent[kDoubleCharm3P], keepEvent[kDoubleCharmMix], keepEvent[kV0Charm2P], keepEvent[kV0Charm3P], keepEvent[kCharmBarToXiBach], keepEvent[kSigmaCPPK], keepEvent[kSigmaC0K0], keepEvent[kSigmaCPr], keepEvent[kPhotonCharm2P], keepEvent[kPhotonCharm3P], keepEvent[kSingleCharm2P], keepEvent[kSingleCharm3P], keepEvent[kSingleNonPromptCharm2P], keepEvent[kSingleNonPromptCharm3P], keepEvent[kCharmBarToXi2Bach], keepEvent[kPrCharm2P], keepEvent[kBtoJPsiKa], keepEvent[kBtoJPsiKstar], keepEvent[kBtoJPsiPhi], keepEvent[kBtoJPsiPrKa], keepEvent[kBtoJPsiPi]); + tags(keepEvent[kHighPt2P], keepEvent[kHighPt3P], keepEvent[kBeauty3P], keepEvent[kBeauty4P], keepEvent[kFemto2P], keepEvent[kFemto3P], keepEvent[kDoubleCharm2P], keepEvent[kDoubleCharm3P], keepEvent[kDoubleCharmMix], keepEvent[kV0Charm2P], keepEvent[kV0Charm3P], keepEvent[kCharmBarToXiBach], keepEvent[kSigmaCPPK], keepEvent[kSigmaC0K0], keepEvent[kSigmaCPr], keepEvent[kPhotonCharm2P], keepEvent[kPhotonCharm3P], keepEvent[kSingleCharm2P], keepEvent[kSingleCharm3P], keepEvent[kSingleNonPromptCharm2P], keepEvent[kSingleNonPromptCharm3P], keepEvent[kCharmBarToXi2Bach], keepEvent[kPrCharm2P], keepEvent[kBtoJPsiKa], keepEvent[kBtoJPsiKstar], keepEvent[kBtoJPsiPhi], keepEvent[kBtoJPsiPrKa], keepEvent[kBtoJPsiPi]); if (!std::accumulate(keepEvent, keepEvent + kNtriggersHF, 0)) { hProcessedEvents->Fill(1); diff --git a/EventFiltering/PWGHF/HFFilterHelpers.h b/EventFiltering/PWGHF/HFFilterHelpers.h index 563c921b8e2..14ec6573ed0 100644 --- a/EventFiltering/PWGHF/HFFilterHelpers.h +++ b/EventFiltering/PWGHF/HFFilterHelpers.h @@ -315,9 +315,9 @@ static const std::vector labelsRowsCutsPt = {"Minimum", "Maximum"}; // PID cuts constexpr float cutsNsigma[4][9] = { - {3., 3., 3., 5., 3., 3., 5., 3., 3.}, // TPC proton from Lc, pi/K from D0, K from 3-prong, femto selected proton, pi/K from Xic/Omegac, K from Xic*->SigmaC-Kaon, femto selected deuteron, K/p from beauty->JPsiX, proton from SigmaC-Pr correaltion - {3., 3., 3., 2.5, 3., 3., 5., 3., 3.}, // TOF proton from Lc, pi/K from D0, K from 3-prong, femto selected proton, pi/K from Xic/Omegac, K from Xic*->SigmaC-Kaon, femto selected deuteron, K/p from beauty->JPsiX, proton from SigmaC-Pr correaltion - {999., 999., 999., 2.5, 999., 999., 5., 999., 3.}, // Sum in quadrature of TPC and TOF (used only for femto selected proton and deuteron for pT < 4 GeV/c) + {3., 3., 3., 5., 3., 3., 5., 3., 3.}, // TPC proton from Lc, pi/K from D0, K from 3-prong, femto selected proton, pi/K from Xic/Omegac, K from Xic*->SigmaC-Kaon, femto selected deuteron, K/p from beauty->JPsiX, proton from SigmaC-Pr correaltion + {3., 3., 3., 2.5, 3., 3., 5., 3., 3.}, // TOF proton from Lc, pi/K from D0, K from 3-prong, femto selected proton, pi/K from Xic/Omegac, K from Xic*->SigmaC-Kaon, femto selected deuteron, K/p from beauty->JPsiX, proton from SigmaC-Pr correaltion + {999., 999., 999., 2.5, 999., 999., 5., 999., 3.}, // Sum in quadrature of TPC and TOF (used only for femto selected proton and deuteron for pT < 4 GeV/c) {999., 999., 999., 999., 999., 999., -4., 999., 999.} // ITS used only for femto selected deuteron for less than pt threshold }; static const std::vector labelsColumnsNsigma = {"PrFromLc", "PiKaFromDZero", "KaFrom3Prong", "PrForFemto", "PiKaFromCharmBaryon", "SoftKaonFromXicResoToSigmaC", "DeForFemto", "KaPrFromBeautyToJPsi", "PrFromSigmaCPr"}; @@ -381,22 +381,20 @@ static const std::vector labelsColumnsCascades = {"PtBachelor", "Pt constexpr float cutsCharmBaryons[1][15] = {{5., 5., 1000., 2.35, 2.60, 2.35, 3., 3., 2.7, -2., -2., 1.e6, 1.e6, -1., -1.}}; // MinPtXiPi, MinPtXiKa, MinPtXiPiPi, MinMassXiPi, MinMassXiKa, MinMassXiPiPi, MaxMassXiPi, MaxMassXiKa, MaxMassXiPiPi, CosPaXiBach, CosPaXiBachBach, Chi2PcaXiBach, Chi2PcaXiBachBach, DecLenXiBach, DecLenBachBach static const std::vector labelsColumnsCharmBarCuts = {"MinPtXiPi", "MinPtXiKa", "MinPtXiPiPi", "MinMassXiPi", "MinMassXiKa", "MinMassXiPiPi", "MaxMassXiPi", "MaxMassXiKa", "MaxMassXiPiPi", "CosPaXiBach", "CosPaXiBachBach", "Chi2PcaXiBach", "Chi2PcaXiBachBach", "DecLenXiBach", "DecLenBachBach"}; -//proton for SigmaC-pr trigger +// proton for SigmaC-pr trigger constexpr float cutsSigmaCPrDefault[4][1] = { - {0.399}, // ptPrMin - {4.501}, // ptPrMax - {1}, // forceTOF (0=false, 1=true) - {1.0} // ptTOFThreshold + {0.399}, // ptPrMin + {4.501}, // ptPrMax + {1}, // forceTOF (0=false, 1=true) + {1.0} // ptTOFThreshold }; static const std::vector labelsRowsSigmaCPr = { "ptPrMin", "ptPrMax", "forceTOF", - "ptTOFThreshold" -}; + "ptTOFThreshold"}; static const std::vector labelsColumnsSigmaCPr = { - "SigmaCPr" -}; + "SigmaCPr"}; constexpr int requireStrangenessTrackedXi[1][2] = {{1, 0}}; static const std::vector labelsColumnsCharmBaryons = {"CharmBarToXiBach", "CharmBarToXiBachBach"}; @@ -498,7 +496,7 @@ class HfFilterHelper mPtMinSigmaCPlusPlus = minPtSigmaCPlusPlus; mPtMinSigmaC2520PlusPlus = minPtSigmaC2520PlusPlus; } - void setParSigmaCPr(float minDeltaMassSigmaC, float maxDeltaMassSigmaC, float minPtSigmaC, float minPtProton, float maxPtProton, bool forceTOF, float minPtForTOF) + void setParSigmaCPr(float minDeltaMassSigmaC, float maxDeltaMassSigmaC, float minPtSigmaC, float minPtProton, float maxPtProton, bool forceTOF, float minPtForTOF) { minDeltaMassScSigmaCPr = minDeltaMassSigmaC; maxDeltaMassScSigmaCPr = maxDeltaMassSigmaC; @@ -533,7 +531,7 @@ class HfFilterHelper } void setNsigmaProtonCutsForFemto(std::array nSigmaCuts) { mNSigmaPrCutsForFemto = nSigmaCuts; } - void setNsigmaDeuteronCutsForFemto(std::array nSigmaCuts) { mNSigmaDeCutsForFemto = nSigmaCuts;} + void setNsigmaDeuteronCutsForFemto(std::array nSigmaCuts) { mNSigmaDeCutsForFemto = nSigmaCuts; } void setNsigmaProtonCutsForSigmaCPr(std::array nSigmaCuts) { mNSigmaPrCutsForSigmaCPr = nSigmaCuts; } void setDeuteronTrackSelectionForFemto(float minTpcCluster, float minTpcRow, float minTpcCrossedOverFound, float maxTpcShared, float maxTpcFracShared, float minItsCluster, float minItsIbCluster) @@ -841,14 +839,14 @@ class HfFilterHelper float mMaxTpcFracShared{1.}; // Maximum allowed fraction of shared TPC clusters relative to total clusters float mMinItsCluster{1.}; // Minimum required number of ITS clusters float mMinItsIbCluster{1.}; // Minimum required number of ITS clusters for IB -// SigmaC–p (ScPr) trigger -float minDeltaMassScSigmaCPr{0.15f}; // min Delta mass (SigmaC) -float maxDeltaMassScSigmaCPr{0.19f}; // max Delta mass (SigmaC) -float minPtScSigmaPr{4.99f}; // min pT(SigmaC) -float minPtPrSigmaCPr{0.399f}; // min pT(proton) -float maxPtPrSigmaCPr{4.501f}; // max pT(proton) -bool forceTOFForPrSigmaCPr{true}; // force TOF for proton -float thresholdPtTOFForPrSigmaCPr{1.0f}; // pT threshold above which TOF is required + // SigmaC–p (ScPr) trigger + float minDeltaMassScSigmaCPr{0.15f}; // min Delta mass (SigmaC) + float maxDeltaMassScSigmaCPr{0.19f}; // max Delta mass (SigmaC) + float minPtScSigmaPr{4.99f}; // min pT(SigmaC) + float minPtPrSigmaCPr{0.399f}; // min pT(proton) + float maxPtPrSigmaCPr{4.501f}; // max pT(proton) + bool forceTOFForPrSigmaCPr{true}; // force TOF for proton + float thresholdPtTOFForPrSigmaCPr{1.0f}; // pT threshold above which TOF is required // PID recalibrations int mTpcPidCalibrationOption{0}; // Option for TPC PID calibration (0 -> AO2D, 1 -> postcalibrations, 2 -> alternative bethe bloch parametrisation) @@ -1389,24 +1387,27 @@ inline int8_t HfFilterHelper::isSelectedSigmaCInDeltaMassRange(const T& pTrackSa isSigmaC2520 = (mDeltaMassMinSigmaC2520PlusPlus < deltaMassPKPi && deltaMassPKPi < mDeltaMassMaxSigmaC2520PlusPlus && ptSigmaC > mPtMinSigmaC2520PlusPlus); } if (isSigmaC2455 || isSigmaC2520) { - retValue |= BIT(0); - if (isSigmaC2455) SETBIT(retValue, 2); - if (isSigmaC2520) SETBIT(retValue, 3); - } - - // --- SigmaCPr selection --- - if constexpr (charge == -1) { - if (deltaMassPKPi > minDeltaMassScSigmaCPr && - deltaMassPKPi < maxDeltaMassScSigmaCPr && - ptSigmaC > minPtScSigmaPr) // proton cuts - { - SETBIT(retValue, 4); // SigmaCPr bit - } + retValue |= BIT(0); + if (isSigmaC2455) + SETBIT(retValue, 2); + if (isSigmaC2520) + SETBIT(retValue, 3); + } + + // --- SigmaCPr selection --- + if constexpr (charge == -1) { + if (deltaMassPKPi > minDeltaMassScSigmaCPr && + deltaMassPKPi < maxDeltaMassScSigmaCPr && + ptSigmaC > minPtScSigmaPr) // proton cuts + { + SETBIT(retValue, 4); // SigmaCPr bit } + } - if (activateQA) hMassVsPt->Fill(ptSigmaC, deltaMassPKPi); + if (activateQA) + hMassVsPt->Fill(ptSigmaC, deltaMassPKPi); } - + if (TESTBIT(isSelectedLc, 1)) { /// Lc->piKp case auto invMassLcToPiKP = RecoDecay::m(std::array{pTrackSameChargeFirst, pTrackOppositeCharge, pTrackSameChargeSecond}, std::array{massPi, massKa, massProton}); @@ -1424,21 +1425,23 @@ inline int8_t HfFilterHelper::isSelectedSigmaCInDeltaMassRange(const T& pTrackSa } if (isSigmaC2455 || isSigmaC2520) { retValue |= BIT(1); - if (isSigmaC2455) SETBIT(retValue, 2); - if (isSigmaC2520) SETBIT(retValue, 3); - } - - // --- SigmaCPr selection --- - if constexpr (charge == -1) { - if (deltaMassPiKP > minDeltaMassScSigmaCPr && - deltaMassPiKP < maxDeltaMassScSigmaCPr && - ptSigmaC > minPtScSigmaPr) - { - SETBIT(retValue, 4); // SigmaCPr bit - } + if (isSigmaC2455) + SETBIT(retValue, 2); + if (isSigmaC2520) + SETBIT(retValue, 3); + } + + // --- SigmaCPr selection --- + if constexpr (charge == -1) { + if (deltaMassPiKP > minDeltaMassScSigmaCPr && + deltaMassPiKP < maxDeltaMassScSigmaCPr && + ptSigmaC > minPtScSigmaPr) { + SETBIT(retValue, 4); // SigmaCPr bit } - if (activateQA) hMassVsPt->Fill(ptSigmaC, deltaMassPiKP); } + if (activateQA) + hMassVsPt->Fill(ptSigmaC, deltaMassPiKP); + } /// TODO: add QA plot return retValue; diff --git a/EventFiltering/filterTables.h b/EventFiltering/filterTables.h index 0d3eb9ff9dc..1e8909dcb7b 100644 --- a/EventFiltering/filterTables.h +++ b/EventFiltering/filterTables.h @@ -92,7 +92,7 @@ DECLARE_SOA_COLUMN(HfCharmBarToXi2Bach, hasHfCharmBarToXi2Bach, bool); DECLARE_SOA_COLUMN(HfPrCharm2P, hasHfPrCharm2P, bool); //! Charm baryon to 2-prong + bachelors DECLARE_SOA_COLUMN(HfSigmaCPPK, hasHfSigmaCPPK, bool); //! SigmaC(2455)++K- and SigmaC(2520)++K- + c.c. DECLARE_SOA_COLUMN(HfSigmaC0K0, hasHfSigmaC0K0, bool); //! SigmaC(2455)0KS0 and SigmaC(2520)0KS0 -DECLARE_SOA_COLUMN(HfSigmaCPr, hasHfSigmaCPr, bool); //! SigmaC(2455)Proton corr +DECLARE_SOA_COLUMN(HfSigmaCPr, hasHfSigmaCPr, bool); //! SigmaC(2455)Proton corr DECLARE_SOA_COLUMN(HfPhotonCharm2P, hasHfPhotonCharm2P, bool); //! photon with 2-prong charm hadron DECLARE_SOA_COLUMN(HfPhotonCharm3P, hasHfPhotonCharm3P, bool); //! photon with 3-prong charm hadron DECLARE_SOA_COLUMN(HfSingleCharm2P, hasHfSingleCharm2P, bool); //! 2-prong charm hadron (for efficiency studies)