@@ -1696,6 +1696,40 @@ struct HfTaskCharmPolarisation {
16961696 }
16971697 }
16981698 }
1699+ } else {
1700+ if (origin == RecoDecay::OriginType::Prompt) { // prompt
1701+ if constexpr (Channel == charm_polarisation::DecayChannel::DstarToDzeroPi) { // D*+
1702+ if (!isPartRecoDstar) {
1703+ if (activateTrackingSys) {
1704+ registry.fill (HIST (" hRecoPromptEP" ), invMassCharmHad, ptCharmHad, numPvContributors, std::abs (rapCharmHad), invMassD0, cosThetaStar, absEtaMin, numItsClsMin, numTpcClsMin, nMuons, centrality);
1705+ } else {
1706+ registry.fill (HIST (" hRecoPromptEP" ), invMassCharmHad, ptCharmHad, numPvContributors, std::abs (rapCharmHad), invMassD0, cosThetaStar, nMuons, centrality);
1707+ }
1708+ } else {
1709+ if (activateTrackingSys) {
1710+ registry.fill (HIST (" hPartRecoPromptEP" ), invMassCharmHad, ptCharmHad, numPvContributors, std::abs (rapCharmHad), invMassD0, cosThetaStar, absEtaMin, numItsClsMin, numTpcClsMin, nMuons, centrality);
1711+ } else {
1712+ registry.fill (HIST (" hPartRecoPromptEP" ), invMassCharmHad, ptCharmHad, numPvContributors, std::abs (rapCharmHad), invMassD0, cosThetaStar, nMuons, centrality);
1713+ }
1714+ }
1715+ }
1716+ } else { // non-prompt
1717+ if constexpr (Channel == charm_polarisation::DecayChannel::DstarToDzeroPi) { // D*+
1718+ if (!isPartRecoDstar) {
1719+ if (activateTrackingSys) {
1720+ registry.fill (HIST (" hRecoNonPromptEP" ), invMassCharmHad, ptCharmHad, numPvContributors, std::abs (rapCharmHad), invMassD0, cosThetaStar, absEtaMin, numItsClsMin, numTpcClsMin, nMuons, ptBhadMother, centrality);
1721+ } else {
1722+ registry.fill (HIST (" hRecoNonPromptEP" ), invMassCharmHad, ptCharmHad, numPvContributors, std::abs (rapCharmHad), invMassD0, cosThetaStar, absEtaMin, nMuons, ptBhadMother, centrality);
1723+ }
1724+ } else {
1725+ if (activateTrackingSys) {
1726+ registry.fill (HIST (" hPartRecoNonPromptEP" ), invMassCharmHad, ptCharmHad, numPvContributors, std::abs (rapCharmHad), invMassD0, cosThetaStar, absEtaMin, numItsClsMin, numTpcClsMin, nMuons, ptBhadMother, centrality);
1727+ } else {
1728+ registry.fill (HIST (" hPartRecoNonPromptEP" ), invMassCharmHad, ptCharmHad, numPvContributors, std::abs (rapCharmHad), invMassD0, cosThetaStar, nMuons, ptBhadMother, centrality);
1729+ }
1730+ }
1731+ }
1732+ }
16991733 }
17001734 }
17011735 }
@@ -1945,7 +1979,7 @@ struct HfTaskCharmPolarisation {
19451979 template <charm_polarisation::DecayChannel Channel, bool WithMl, bool DoMc, bool StudyLcPkPiBkgMc = false , bool WithEp = false , typename Cand, typename Part, typename Trk, typename T, typename QVecs = void >
19461980 bool runPolarisationAnalysis (Cand const & candidate, int bkgRotationId, T numPvContributors, Part const & particles, Trk const & /* tracks*/ , float centrality = -999 .f, QVecs const * qVecs = nullptr )
19471981 {
1948- if constexpr (WithEp) {
1982+ if constexpr (WithEp && !DoMc ) {
19491983 assert (qVecs && " EP analysis requested but qVecs == nullptr" );
19501984 assert (centrality && " EP analysis requested but centrality == nullptr" );
19511985 }
@@ -2303,23 +2337,21 @@ struct HfTaskCharmPolarisation {
23032337 nMuons = 0 ;
23042338 }
23052339 }
2306-
2307- if constexpr (WithEp ) {
2308- if ( !DoMc) {
2309- // / EP analysis
2340+
2341+ if (activateTHnSparseCosThStarEP ) {
2342+ if constexpr (WithEp && !DoMc) {
2343+ // EP analysis for data
23102344 float const xQvec = (*qVecs).at (0 );
23112345 float const yQvec = (*qVecs).at (1 );
23122346 ROOT::Math::XYZVector const qVecNorm = ROOT::Math::XYZVector (yQvec, -xQvec, 0 .f );
23132347 ROOT::Math::XYZVector const qVec = ROOT::Math::XYZVector (xQvec, yQvec, 0 .);
2314-
2315- if (activateTHnSparseCosThStarEP) {
2316- // EP
2317- ROOT::Math::XYZVector threeVecDauCMXY = ROOT::Math::XYZVector (threeVecDauCM.X (), threeVecDauCM.Y (), 0 .);
2318- float const phiEP = qVec.Dot (threeVecDauCMXY) / std::sqrt (threeVecDauCMXY.Mag2 ()) / std::sqrt (qVec.Mag2 ());
2319- float const cosThetaStarEP = qVecNorm.Dot (threeVecDauCM) / std::sqrt (threeVecDauCM.Mag2 ()) / std::sqrt (qVecNorm.Mag2 ());
2320- fillRecoHistos<Channel, WithMl, DoMc, charm_polarisation::CosThetaStarType::EP>(invMassCharmHadForSparse, ptCharmHad, numPvContributors, rapidity, invMassD0, invMassKPiLc, cosThetaStarEP, phiEP, outputMl, isRotatedCandidate, origin, ptBhadMother, resoChannelLc, absEtaTrackMin, numItsClsMin, numTpcClsMin, charge, nMuons, partRecoDstar, centrality);
2321- }
2322- } else {
2348+ ROOT::Math::XYZVector threeVecDauCMXY = ROOT::Math::XYZVector (threeVecDauCM.X (), threeVecDauCM.Y (), 0 .);
2349+ float const phiEP = qVec.Dot (threeVecDauCMXY) / std::sqrt (threeVecDauCMXY.Mag2 ()) / std::sqrt (qVec.Mag2 ());
2350+ float const cosThetaStarEP = qVecNorm.Dot (threeVecDauCM) / std::sqrt (threeVecDauCM.Mag2 ()) / std::sqrt (qVecNorm.Mag2 ());
2351+ fillRecoHistos<Channel, WithMl, DoMc, charm_polarisation::CosThetaStarType::EP>(invMassCharmHadForSparse, ptCharmHad, numPvContributors, rapidity, invMassD0, invMassKPiLc, cosThetaStarEP, phiEP, outputMl, isRotatedCandidate, origin, ptBhadMother, resoChannelLc, absEtaTrackMin, numItsClsMin, numTpcClsMin, charge, nMuons, partRecoDstar, centrality);
2352+ }
2353+ if (DoMc) {
2354+ // EP analysis for MC
23232355 double const deltaPhi = sampleDeltaPhi (ptCharmHad);
23242356 double psi = candidate.phi () - deltaPhi;
23252357 ROOT::Math::XYZVector qVecNorm = ROOT::Math::XYZVector (-std::sin (psi), std::cos (psi), 0 .f );
@@ -2907,7 +2939,7 @@ struct HfTaskCharmPolarisation {
29072939
29082940 for (const auto & dstarCandidate : groupedDstarCandidates) {
29092941 nCands++;
2910- if (runPolarisationAnalysis<charm_polarisation::DecayChannel::DstarToDzeroPi, false , true , false , true >(dstarCandidate, 0 , (occEstimator > 0 ) ? occupancy : numPvContributors, -1 /* MC particles*/ , tracks, centrality)) {
2942+ if (runPolarisationAnalysis<charm_polarisation::DecayChannel::DstarToDzeroPi, false , true >(dstarCandidate, 0 , (occEstimator > 0 ) ? occupancy : numPvContributors, -1 /* MC particles*/ , tracks, centrality)) {
29112943 nCandsInSignalRegion++;
29122944 }
29132945 }
@@ -2949,7 +2981,7 @@ struct HfTaskCharmPolarisation {
29492981
29502982 for (const auto & dstarCandidate : groupedDstarCandidates) {
29512983 nCands++;
2952- if (runPolarisationAnalysis<charm_polarisation::DecayChannel::DstarToDzeroPi, true , true , false , true >(dstarCandidate, 0 , (occEstimator > 0 ) ? occupancy : numPvContributors, -1 /* MC particles*/ , tracks, centrality)) {
2984+ if (runPolarisationAnalysis<charm_polarisation::DecayChannel::DstarToDzeroPi, true , true >(dstarCandidate, 0 , (occEstimator > 0 ) ? occupancy : numPvContributors, -1 /* MC particles*/ , tracks, centrality)) {
29532985 nCandsInSignalRegion++;
29542986 }
29552987 }
0 commit comments