diff --git a/PWGDQ/Core/VarManager.h b/PWGDQ/Core/VarManager.h index 7785e8c660d..355204118e2 100644 --- a/PWGDQ/Core/VarManager.h +++ b/PWGDQ/Core/VarManager.h @@ -176,6 +176,7 @@ class VarManager : public TObject kTripleCandidateToPKPi, // e.g. Lambda_c -> p K- pi+ kJpsiHadronMass, // using the real hadron mass kJpsiPionMass, // treat the hadron as pion + kDsToKKPi, // e.g. Ds+ -> K+ K- pi+ or cc. kNMaxCandidateTypes }; @@ -5843,7 +5844,7 @@ void VarManager::FillDileptonTrackVertexing(C const& collision, T1 const& lepton procCode = VarManager::fgFitterThreeProngFwd.process(pars1, pars2, pars3); procCodeJpsi = VarManager::fgFitterTwoProngFwd.process(pars1, pars2); - } else if constexpr ((candidateType == kBtoJpsiEEK || candidateType == kDstarToD0KPiPi) && trackHasCov) { + } else if constexpr ((candidateType == kBtoJpsiEEK || candidateType == kDstarToD0KPiPi || candidateType == kDsToKKPi) && trackHasCov) { if constexpr (candidateType == kBtoJpsiEEK) { mlepton1 = o2::constants::physics::MassElectron; mlepton2 = o2::constants::physics::MassElectron; @@ -5852,6 +5853,10 @@ void VarManager::FillDileptonTrackVertexing(C const& collision, T1 const& lepton mlepton1 = o2::constants::physics::MassKaonCharged; mlepton2 = o2::constants::physics::MassPionCharged; mtrack = o2::constants::physics::MassPionCharged; + } else if constexpr (candidateType == kDsToKKPi) { + mlepton1 = o2::constants::physics::MassKaonCharged; + mlepton2 = o2::constants::physics::MassKaonCharged; + mtrack = o2::constants::physics::MassPionCharged; } std::array lepton1pars = {lepton1.y(), lepton1.z(), lepton1.snp(), lepton1.tgl(), lepton1.signed1Pt()}; std::array lepton1covs = {lepton1.cYY(), lepton1.cZY(), lepton1.cZZ(), lepton1.cSnpY(), lepton1.cSnpZ(), @@ -5927,7 +5932,7 @@ void VarManager::FillDileptonTrackVertexing(C const& collision, T1 const& lepton o2::dataformats::VertexBase primaryVertex = {vtxXYZ, vtxCov}; auto covMatrixPV = primaryVertex.getCov(); - if constexpr ((candidateType == kBtoJpsiEEK || candidateType == kDstarToD0KPiPi) && trackHasCov) { + if constexpr ((candidateType == kBtoJpsiEEK || candidateType == kDstarToD0KPiPi || candidateType == kDsToKKPi) && trackHasCov) { secondaryVertex = fgFitterThreeProngBarrel.getPCACandidate(); covMatrixPCA = fgFitterThreeProngBarrel.calcPCACovMatrixFlat(); } else if constexpr (candidateType == kBcToThreeMuons && muonHasCov) { diff --git a/PWGDQ/Tasks/tableReader_withAssoc.h b/PWGDQ/Tasks/tableReader_withAssoc.h index bdef445bbc6..8a269e74df9 100644 --- a/PWGDQ/Tasks/tableReader_withAssoc.h +++ b/PWGDQ/Tasks/tableReader_withAssoc.h @@ -4226,9 +4226,10 @@ struct AnalysisDileptonTrack { void init(o2::framework::InitContext& context) { - bool isBarrel = context.mOptions.get("processBarrelSkimmed"); + bool isBarrel = context.mOptions.get("processBarrelSkimmed") || context.mOptions.get("processDsToKKPi"); bool isBarrelME = context.mOptions.get("processBarrelMixedEvent"); bool isBarrelAsymmetric = context.mOptions.get("processDstarToD0Pi"); + bool isDsToKKPi = context.mOptions.get("processDsToKKPi"); bool isMuon = context.mOptions.get("processMuonSkimmed"); bool isMuonME = context.mOptions.get("processMuonMixedEvent"); @@ -4631,6 +4632,18 @@ struct AnalysisDileptonTrack { VarManager::FillDileptonHadron(dilepton, track, fValuesHadron); VarManager::FillDileptonTrackVertexing(event, lepton1, lepton2, track, fValuesHadron); } + if constexpr (TCandidateType == VarManager::kDsToKKPi) { + trackSelection = (assoc.isBarrelSelected_raw() & fTrackCutBitMap); + if (trackSelection == 0) { + continue; + } + auto track = assoc.template reducedtrack_as(); + if (track.globalIndex() == dilepton.index0Id() || track.globalIndex() == dilepton.index1Id()) { + continue; + } + VarManager::FillDileptonHadron(dilepton, track, fValuesHadron); + VarManager::FillDileptonTrackVertexing(event, lepton1, lepton2, track, fValuesHadron); + } if constexpr (TCandidateType == VarManager::kBcToThreeMuons) { trackSelection = (assoc.isMuonSelected_raw() & fTrackCutBitMap); if (trackSelection == 0) { @@ -4734,6 +4747,25 @@ struct AnalysisDileptonTrack { } } + void processDsToKKPi(o2::soa::Filtered const& events, + o2::soa::Filtered> const& assocs, + MyBarrelTracksWithCov const& tracks, + o2::soa::Filtered const& dileptons) + { + if (events.size() == 0) { + return; + } + if (fCurrentRun != events.begin().runNumber()) { + initParamsFromCCDB(events.begin().timestamp()); + fCurrentRun = events.begin().runNumber(); + } + for (auto const& event : events) { + auto groupedBarrelAssocs = assocs.sliceBy(trackAssocsPerCollision, event.globalIndex()); + auto groupedDielectrons = dileptons.sliceBy(dielectronsPerCollision, event.globalIndex()); + runDileptonHadron(event, groupedBarrelAssocs, tracks, groupedDielectrons); + } + } + o2::framework::Preslice muonAssocsPerCollision = o2::aod::reducedtrack_association::reducedeventId; o2::framework::Preslice dimuonsPerCollision = o2::aod::reducedpair::reducedeventId; @@ -4910,6 +4942,7 @@ struct AnalysisDileptonTrack { PROCESS_SWITCH(AnalysisDileptonTrack, processBarrelSkimmed, "Run barrel dilepton-track pairing, using skimmed data", false); PROCESS_SWITCH(AnalysisDileptonTrack, processDstarToD0Pi, "Run barrel pairing of D0 daughters with pion candidate, using skimmed data", false); + PROCESS_SWITCH(AnalysisDileptonTrack, processDsToKKPi, "Run barrel pairing of K+K- pairs with pion candidate for Ds reconstruction", false); PROCESS_SWITCH(AnalysisDileptonTrack, processMuonSkimmed, "Run muon dilepton-track pairing, using skimmed data", false); PROCESS_SWITCH(AnalysisDileptonTrack, processBarrelMixedEvent, "Run barrel dilepton-hadron mixed event pairing", false); PROCESS_SWITCH(AnalysisDileptonTrack, processMuonMixedEvent, "Run muon dilepton-hadron mixed event pairing", false);