-
Notifications
You must be signed in to change notification settings - Fork 628
[PWGHF] Added trigger for Sc-proton correlation #14786
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
Added parameters for Sigma_C trigger selection and updated event tagging logic for SigmaC candidates.
Added support for SigmaC particle selection in the HfFilterHelper class.
[Trigger,PWGHF] Please consider the following formatting changes to AliceO2Group#14786
fgrosa
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi @singhra1994 I still didn't look into the helper functions, but I already spotted several issues in the logic of the filter itself. Please implement the suggestions, and then I will take a look at the helper functions as well.
EventFiltering/PWGHF/HFFilter.cxx
Outdated
| float deltaEta = std::abs(RecoDecay::eta(pVecSigmaC) - track.eta() && pt3Prong < 3.0); | ||
| if (configSigmaC.isTrigSigmaCP && isTrackProton && deltaEta < 1.0) { | ||
|
|
||
| auto tagBDT = helper.isBDTSelected(scores[2], thresholdBDTScores[5]); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
be careful that this only works if thresholdBDTScores[5] is tighter than thresholdBDTScores[4]
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I know, I assumed that BDT cut on 3 prong creators should be looser, I only need stronger BDT on sigmaCpr trigger if there is the problem in reaching required selectivity
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok! Please put it separately, as cut for your trigger only to avoid confusion (since as it is now in the configurables, it seems that it is applied for all SigmaC states).
[Trigger,PWGHF] Please consider the following formatting changes to AliceO2Group#14786
fgrosa
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi @singhra1994, thanks for addressing my comments! The code looks correct to me now, but I would like to ask @mfaggin also to check that I didn't overlook any other bug that might affect the SigmaC-K triggers.
Please also address my remaining comments and then as discussed in the trigger meeting, verify that the output of the task is identical for the other triggers before and after your changes, so that we can then merge it. Thanks!
EventFiltering/PWGHF/HFFilter.cxx
Outdated
| Configurable<float> minMassSigmaCCorr{"minMassSigmaCCorr", 0.15, "minimum mass of SigmaC for correlation with proton"}; | ||
| Configurable<float> maxMassSigmaCCorr{"maxMassSigmaCCorr", 0.19, "maximum mass of SigmaC for correlation with proton"}; | ||
| Configurable<float> minPtSigmaC{"minPtSigmaC", 4.99, "minimum pT of SigmaC for correlation with proton"}; | ||
| Configurable<float> maxPtSigmaC{"maxPtSigmaC", 12.0, "maximum pT of SigmaC for correlation with proton"}; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Put these configurables in the labelled array with masses and pT cuts for resonances (cutsPtDeltaMassCharmReso), adding more columns (and a meaningful name for the label, e.g. SigmaCForPrCorr or something similar)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Addressed only for the masses, and not for the pt
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I didn't understand it, if you mean to put configuration of pT as well in label array, I already did it
EventFiltering/PWGHF/HFFilter.cxx
Outdated
|
|
||
| // array of BDT thresholds | ||
| std::array<LabeledArray<double>, kNCharmParticles> thresholdBDTScores; | ||
| std::array<LabeledArray<double>, kNCharmParticles + 1> thresholdBDTScores; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please put it separately
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I agree with this comment: leave your BDT fully independent from the others which are general for the triggers.
EventFiltering/PWGHF/HFFilter.cxx
Outdated
| float deltaEta = std::abs(RecoDecay::eta(pVecSigmaC) - track.eta() && pt3Prong < 3.0); | ||
| if (configSigmaC.isTrigSigmaCP && isTrackProton && deltaEta < 1.0) { | ||
|
|
||
| auto tagBDT = helper.isBDTSelected(scores[2], thresholdBDTScores[5]); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok! Please put it separately, as cut for your trigger only to avoid confusion (since as it is now in the configurables, it seems that it is applied for all SigmaC states).
| } | ||
| } | ||
| } | ||
| return true; // Passed all checks |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Before returning true, I suggest you to fill an histogram of Nsigma Vs Pt to monitor that you are indeed selecting what you want
| return false; | ||
| } | ||
|
|
||
| for (size_t speciesIndex = 0; speciesIndex < mPIDspecies.value.size(); ++speciesIndex) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is it needed to iterate over the PID hypotheses? Can't you simply test the proton PID since this is the only trigger foreseen?
|
|
||
| /// Delta mass selection on SigmaC candidates for correlation | ||
| template <typename T, typename H2> | ||
| inline bool HfFilterHelper::selectionSigmaCForScPCorr(const T& pTrackSameChargeFirst, const T& pTrackSameChargeSecond, const T& pTrackOppositeCharge, const T& pTrackSoftPi, const float ptSigmaC, const int8_t isSelectedLc, H2 hMassVsPt, const int& activateQA, float mDeltaMassMinSigmaC, float mDeltaMassMaxSigmaC, float mPtMinSigmaC, float mPtMaxSigmaC) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why do you need another function? Can't this be included in the already existing one (isSelectedSigmaCInDeltaMassRange) adding new bits?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I can use a single function but I am afraid it need lot of input in the function, ex.
template <int charge = -1, typename T, typename H2>
inline int8_t HfFilterHelper::isSelectedSigmaCInDeltaMassRange(
const T& pTrackSameChargeFirst,
const T& pTrackSameChargeSecond,
const T& pTrackOppositeCharge,
const T& pTrackSoftPi,
const float ptSigmaC,
const int8_t isSelectedLc,
H2 hMassVsPt,
const int& activateQA,
bool useInvMassforScPr,
float mDeltaMassMinSigmaC,
float mDeltaMassMaxSigmaC,
float mPtMinSigmaC,
float mPtMaxSigmaC)
{}
or I can define some variable as a private member of class and then pass a function to initialize these variables, but as of now I think it would be commit and in second version I can optimize the code
EventFiltering/PWGHF/HFFilter.cxx
Outdated
| } | ||
| } | ||
| float deltaEta = std::abs(RecoDecay::eta(pVecSigmaC) - track.eta()); | ||
| if (!keepEvent[kSigmaCPr] && (isTrackProton && deltaEta < 1.0 && pt3Prong > 3.0)) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why do you have an hard-coded cut on the pt3Prong? Can't you put a configurable?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks Fabrizio for mentioning it, this is even irrelevant cut , I will remove it. This was a check, I was thinking that that pT Lc and pT Sc are correlated and by applying pTLc cut as a function of pTSc, I will be able to reduce the background. Though, I was wrong, I checked it and found that in the selected invariant mass of Sc, pT of Lc is always remain in the range pTSc -2 to pTSc +0.5. Therefore, from the current version, let me just remove it online.
mfaggin
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi @fgrosa @singhra1994 I tried to go through the modifications and I posted some comments. It looks to me that the already existing trigger Sc-K is not affected by the proposed modifications, but I have a couple of warnings/comments for the Sc-p part.
EventFiltering/PWGHF/HFFilter.cxx
Outdated
| std::array<std::shared_ptr<TH1>, kNCharmParticles> hCharmDeuteronKstarDistr{}; | ||
| std::array<std::shared_ptr<TH2>, nTotBeautyParts> hMassVsPtB{}; | ||
| std::array<std::shared_ptr<TH2>, kNCharmParticles + 23> hMassVsPtC{}; // +9 for resonances (D*+, D*0, Ds*+, Ds1+, Ds2*+, Xic+* right sign, Xic+* wrong sign, Xic0* right sign, Xic0* wrong sign) +2 for SigmaC (SigmaC++, SigmaC0) +2 for SigmaCK pairs (SigmaC++K-, SigmaC0K0s) +3 for charm baryons (Xi+Pi, Xi+Ka, Xi+Pi+Pi) + JPsi + 4 for charm baryons (D0+p, D0+pWrongSign, D*0p, D*0+pWrongSign) | ||
| std::array<std::shared_ptr<TH2>, kNCharmParticles + 24> hMassVsPtC{}; // +9 for resonances (D*+, D*0, Ds*+, Ds1+, Ds2*+, Xic+* right sign, Xic+* wrong sign, Xic0* right sign, Xic0* wrong sign) +2 for SigmaC (SigmaC++, SigmaC0) +2 for SigmaCK pairs (SigmaC++K-, SigmaC0K0s) +3 for charm baryons (Xi+Pi, Xi+Ka, Xi+Pi+Pi) + JPsi + 4 for charm baryons (D0+p, D0+pWrongSign, D*0p, D*0+pWrongSign) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
(very very minor) update also the comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not addressed
EventFiltering/PWGHF/HFFilter.cxx
Outdated
| bool isTrackProton = helper.isSelectedTrack4Corr(track, configSigmaC.trkPIDspecies, configSigmaC.pidTPCMax, configSigmaC.pidTOFMax, configSigmaC.minPtProton, configSigmaC.maxPtProton, configSigmaC.tofPIDThreshold, configSigmaC.forceTOF); | ||
|
|
||
| if ((!keepEvent[kSigmaCPPK] || !keepEvent[kSigmaCPr]) && is3Prong[2] > 0 && is3ProngInMass[2] > 0 && isSignalTagged[2] > 0 && (isTrackKaon || isTrackProton)) { | ||
| // we need a candidate Lc->pKpi and a candidate soft kaon |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
(minor) also here update the comment to improve the readibility (this is valid a bit everywhere)
EventFiltering/PWGHF/HFFilter.cxx
Outdated
| // check the mass of the SigmaC++,0 candidate | ||
| auto pVecSigmaC = RecoDecay::pVec(pVecFirst, pVecSecond, pVecThird, pVecSoftPi); | ||
| auto ptSigmaC = RecoDecay::pt(pVecSigmaC); | ||
| int8_t whichSigmaC = helper.isSelectedSigmaCInDeltaMassRange<2>(pVecFirst, pVecThird, pVecSecond, pVecSoftPi, ptSigmaC, is3Prong[2], hMassVsPtC[kNCharmParticles + 9], activateQA); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
a warning here: the function helper.isSelectedSigmaCInDeltaMassRange<2> does a selection around the Sigmac++ mass only (note the <2> template parameter, which refers to the Sigmac charge). This is what we wanted for the already-existing triggers (Sc-K), but in your case you want correlations for both Sc0 and Sc++.
Mine is just a warning just because the masses of Sc0 and Sc++ are very very similar and this should be pretty harmless, but for your interest I suggest you to cross-check once more if there are other charge-dependent selections/functions that might not hold for your use-case.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Though in the previous version, I was not using this function but now I modified the function in such a way that by putting charge {-1}, I can look to the ground state of SigmaC in my required mass range and it will assign bit combined for both the mass
| @@ -1560,51 +1577,59 @@ struct HfFilter { // Main struct for HF triggers | |||
| /// - it is in the correct mass range | |||
|
|
|||
| // check the charge for SigmaC++K- candidates | |||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
again: update the comment. At this stage not only the Sc-K total charge is checked, but also the Sc one
| } | ||
| } | ||
| } | ||
| float deltaEta = std::abs(RecoDecay::eta(pVecSigmaC) - track.eta()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Again, at this stage it might be useful to have a comment of what you are doing, i.e. the fact that now you want to check the Sc-p correlation etc etc
EventFiltering/PWGHF/HFFilter.cxx
Outdated
|
|
||
| // array of BDT thresholds | ||
| std::array<LabeledArray<double>, kNCharmParticles> thresholdBDTScores; | ||
| std::array<LabeledArray<double>, kNCharmParticles + 1> thresholdBDTScores; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I agree with this comment: leave your BDT fully independent from the others which are general for the triggers.
| template <typename T1, typename T2, typename H2> | ||
| bool isSelectedTrack4Femto(const T1& track, const T2& trackPar, const int& activateQA, H2 hTPCPID, H2 hTOFPID, const int& trackSpecies); | ||
| template <typename Atrack, typename SpeciesContainer, typename T1, typename T2> | ||
| bool isSelectedTrack4Corr(Atrack const& track, SpeciesContainer const mPIDspecies, T1 const maxTPC, T2 const maxTOF, float minPt = 0.39, float maxPt = 4.6, float ptThreshold = 1.0, bool tofForced = false); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
personally, I'd avoid default parameter values here
| template <int charge, typename T, typename H2> | ||
| int8_t isSelectedSigmaCInDeltaMassRange(const T& pTrackSameChargeFirst, const T& pTrackSameChargeSecond, const T& pTrackOppositeCharge, const T& pTrackSoftPi, const float ptSigmaC, const int8_t isSelectedLc, H2 hMassVsPt, const int& activateQA); | ||
| template <typename T, typename H2> | ||
| bool selectionSigmaCForScPCorr(const T& pTrackSameChargeFirst, const T& pTrackSameChargeSecond, const T& pTrackOppositeCharge, const T& pTrackSoftPi, const float ptSigmaC, const int8_t isSelectedLc, H2 hMassVsPt, const int& activateQA, float mDeltaMassMinSigmaC = 0.155, float mDeltaMassMaxSigmaC = 0.2, float mPtMinSigmaC = 4.99, float mPtMaxSigmaC = 12.0); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
personally, I'd avoid default parameter values here
| /// Basic selection of proton or deuteron candidates | ||
| /// \param track is a track | ||
| /// \param mPIDspecies is a vector of different particle species | ||
| /// \param activateQA flag to activate the filling of QA histos | ||
| /// \param maxTPC is a vector of max TPCnSigma for different particle species | ||
| /// \param maxTOF is a vector of max TOFnSigma for different particle species | ||
| /// \param hProtonTPCPID histo with NsigmaTPC vs. p | ||
| /// \param hProtonTOFPID histo with NsigmaTOF vs. p | ||
| /// \return true if track passes all cuts | ||
| template <typename Atrack, typename SpeciesContainer, typename T1, typename T2> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this description is not consistent, and confusing. For example, during my review I was looking for an explanation of ptThreshold, which as far as I understand is the minimum pt at which you want to force the TOF for the proton (right?).
Please fix the description and possibly give meanigful names to the variables
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Removed the function now
| if (speciesIndex == 0) { // First species logic | ||
|
|
||
| if (std::abs(nSigmaTPC) > maxTPC->at(speciesIndex)) { | ||
| return false; // TPC check failed | ||
| } | ||
| if (track.hasTOF()) { | ||
| auto nSigmaTOF = o2::aod::pidutils::tofNSigma(pid, track); | ||
| if (std::abs(nSigmaTOF) > maxTOF->at(speciesIndex)) { | ||
| return false; // TOF check failed | ||
| } | ||
| } | ||
| } else { // Other species logic | ||
| if (std::abs(nSigmaTPC) < maxTPC->at(speciesIndex)) { // Check TPC nSigma first | ||
| if (track.hasTOF()) { | ||
| auto nSigmaTOF = o2::aod::pidutils::tofNSigma(pid, track); | ||
| if (std::abs(nSigmaTOF) < maxTOF->at(speciesIndex)) { | ||
| return false; // Reject if both TPC and TOF are within thresholds | ||
| } | ||
| } else { | ||
| return false; // Reject if only TPC is within threshold and TOF is unavailable | ||
| } | ||
| } | ||
| } | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Here I have a few questions
-
I agree with Fabrizio's comment, I do not understand why you loop over species and not just proton. Do you need to check other species (kaon, pion) because you want to apply a kaon and/or pion PID rejection? This is what I grasp from the code, but comments would help the reader
-
Why you treat differently the case
speciesIndex == 0from the others (once more: comment the code for the sake of readability)? Is it because the casespeciesIndex == 0corresponds to the proton hypothesis, and this is a special case for you (i.e. the "signal" one), while the others are used for PID rejection? If yes, then I find the solution of having the proton hypothesis as the 1st entry of aConfigurablevector a bit error-prone (I'm referring toConfigurable<std::vector<int>> trkPIDspecies). In case you want a PID rejection for other species, then I'd remove the proton from theConfigurablevector, and use this vector only for the species you want to use for the PID rejection (in other words: if by mistake one configures the vector with the order e.g. ka-pi-pr your logic is fully broken, but you can easily remove this possible mistake dedicateing theConfigurablevector for the species to be rejected).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi @mfaggin I have defined this function in this way in HFCL analysis so that every one can use it for each combination of particle selection and rejection
Here, now I am not thinking to use piK rejection and hence code will be modified accordingly
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ok I see. It's not up to me to decide, but since the definition of the trigger program is not like the final analysis, if I were you I'd just keep the piece of code that you need (i.e. treat just the proton case for your trigger) and if somebody else will come then he/she will take care of adding the new functionalities.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Now even removed this function, not needed anymore
Updated PID cuts and added new parameters for SigmaC-pr correlation. Adjusted track selection criteria and improved comments for clarity.
[Trigger,PWGHF] Please consider the following formatting changes to AliceO2Group#14786
EventFiltering/PWGHF/HFFilter.cxx
Outdated
| std::array<std::shared_ptr<TH1>, kNCharmParticles> hCharmDeuteronKstarDistr{}; | ||
| std::array<std::shared_ptr<TH2>, nTotBeautyParts> hMassVsPtB{}; | ||
| std::array<std::shared_ptr<TH2>, kNCharmParticles + 23> hMassVsPtC{}; // +9 for resonances (D*+, D*0, Ds*+, Ds1+, Ds2*+, Xic+* right sign, Xic+* wrong sign, Xic0* right sign, Xic0* wrong sign) +2 for SigmaC (SigmaC++, SigmaC0) +2 for SigmaCK pairs (SigmaC++K-, SigmaC0K0s) +3 for charm baryons (Xi+Pi, Xi+Ka, Xi+Pi+Pi) + JPsi + 4 for charm baryons (D0+p, D0+pWrongSign, D*0p, D*0+pWrongSign) | ||
| std::array<std::shared_ptr<TH2>, kNCharmParticles + 24> hMassVsPtC{}; // +9 for resonances (D*+, D*0, Ds*+, Ds1+, Ds2*+, Xic+* right sign, Xic+* wrong sign, Xic0* right sign, Xic0* wrong sign) +2 for SigmaC (SigmaC++, SigmaC0) +2 for SigmaCK pairs (SigmaC++K-, SigmaC0K0s) +3 for charm baryons (Xi+Pi, Xi+Ka, Xi+Pi+Pi) + JPsi + 4 for charm baryons (D0+p, D0+pWrongSign, D*0p, D*0+pWrongSign) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not addressed
EventFiltering/PWGHF/HFFilter.cxx
Outdated
| 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[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]); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Revert it putting it at the end
EventFiltering/PWGHF/HFFilter.cxx
Outdated
| } | ||
| float deltaEta = std::abs(RecoDecay::eta(pVecSigmaC) - track.eta()); | ||
| if (!keepEvent[kSigmaCPr] && (isTrackProton && deltaEta < 1.0)) { | ||
| auto tagBDT = helper.isBDTSelected(scores[2], thresholdBDTScoreScLcToPiKP.value); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Move this cut as suggested in the previous round of review
EventFiltering/PWGHF/HFFilter.cxx
Outdated
| if (TESTBIT(tagBDT, RecoDecay::OriginType::Prompt)) { | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This if statement doesn't do anything
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sorry, I missed it, I put this block for testing the code by printing some values, I removed the printing line but missed this
| } | ||
| if (isSigmaC2455 || isSigmaC2520) { | ||
| retValue |= BIT(0); | ||
| if (isSigmaC2455) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Don't apply useless changes that increase the probability of introducing bugs, please revert
| if (isSigmaC2455) | ||
| SETBIT(retValue, 2); | ||
| } | ||
| if (isSigmaC2520) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Don't apply useless changes that increase the probability of introducing bugs, please revert
| if (deltaMassPiKP > minDeltaMassScSigmaCPr && | ||
| deltaMassPiKP < maxDeltaMassScSigmaCPr && | ||
| ptSigmaC > minPtScSigmaPr) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| if (deltaMassPiKP > minDeltaMassScSigmaCPr && | |
| deltaMassPiKP < maxDeltaMassScSigmaCPr && | |
| ptSigmaC > minPtScSigmaPr) { | |
| if (deltaMassPiKP > mMinDeltaMassScSigmaCPr && | |
| deltaMassPiKP < mMaxDeltaMassScSigmaCPr && | |
| ptSigmaC > mMinPtScSigmaPr) { |
| if (deltaMassPKPi > minDeltaMassScSigmaCPr && | ||
| deltaMassPKPi < maxDeltaMassScSigmaCPr && | ||
| ptSigmaC > minPtScSigmaPr) // proton cuts |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| if (deltaMassPKPi > minDeltaMassScSigmaCPr && | |
| deltaMassPKPi < maxDeltaMassScSigmaCPr && | |
| ptSigmaC > minPtScSigmaPr) // proton cuts | |
| if (deltaMassPKPi > mMinDeltaMassScSigmaCPr && | |
| deltaMassPKPi < mMaxDeltaMassScSigmaCPr && | |
| ptSigmaC > mMinPtScSigmaPr) // proton cuts |
| void setParSigmaCPr(float minDeltaMassSigmaC, float maxDeltaMassSigmaC, float minPtSigmaC, float minPtProton, float maxPtProton, bool forceTOF, float minPtForTOF) | ||
| { | ||
| minDeltaMassScSigmaCPr = minDeltaMassSigmaC; | ||
| maxDeltaMassScSigmaCPr = maxDeltaMassSigmaC; | ||
|
|
||
| minPtScSigmaPr = minPtSigmaC; | ||
|
|
||
| minPtPrSigmaCPr = minPtProton; | ||
| maxPtPrSigmaCPr = maxPtProton; | ||
|
|
||
| forceTOFForPrSigmaCPr = forceTOF; | ||
| thresholdPtTOFForPrSigmaCPr = minPtForTOF; | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| void setParSigmaCPr(float minDeltaMassSigmaC, float maxDeltaMassSigmaC, float minPtSigmaC, float minPtProton, float maxPtProton, bool forceTOF, float minPtForTOF) | |
| { | |
| minDeltaMassScSigmaCPr = minDeltaMassSigmaC; | |
| maxDeltaMassScSigmaCPr = maxDeltaMassSigmaC; | |
| minPtScSigmaPr = minPtSigmaC; | |
| minPtPrSigmaCPr = minPtProton; | |
| maxPtPrSigmaCPr = maxPtProton; | |
| forceTOFForPrSigmaCPr = forceTOF; | |
| thresholdPtTOFForPrSigmaCPr = minPtForTOF; | |
| } | |
| void setParSigmaCPr(float minDeltaMassSigmaC, float maxDeltaMassSigmaC, float minPtSigmaC, float minPtProton, float maxPtProton, bool forceTOF, float minPtForTOF) | |
| { | |
| mMinDeltaMassScSigmaCPr = minDeltaMassSigmaC; | |
| mMaxDeltaMassScSigmaCPr = maxDeltaMassSigmaC; | |
| mMinPtScSigmaPr = minPtSigmaC; | |
| mMinPtPrSigmaCPr = minPtProton; | |
| mMaxPtPrSigmaCPr = maxPtProton; | |
| mForceTofProtonForSigmaCPr = forceTOF; | |
| mPtThresholdTofProtonForSigmaCPr = minPtForTOF; | |
| } |
Updated configurable parameters for SigmaCPr trigger and added logic for SigmaC-proton correlation. Enhanced event tagging and BDT score handling for SigmaC candidates.
[Trigger,PWGHF] Please consider the following formatting changes to AliceO2Group#14786
I have modified the block trigger SigmaCPPK in such a way that both SigmaCPPK and SigmaCP can be filled in the same block