@@ -527,18 +527,34 @@ struct TaskPolarisationCharmHadrons {
527527 if (activateTHnSparseCosThStarHelicity) {
528528 registry.add (" hGenPromptHelicity" , " THn for polarisation studies with cosThStar w.r.t. helicity axis -- gen prompt signal" , HistType::kTHnSparseF , {thnAxisPt, thnAxisNumPvContributors, thnAxisY, thnAxisCosThetaStarHelicity, thnAxisDausAcc, thnAxisResoChannelLc, thnAxisCharge});
529529 registry.add (" hGenNonPromptHelicity" , " THn for polarisation studies with cosThStar w.r.t. helicity axis -- gen non-prompt signal" , HistType::kTHnSparseF , {thnAxisPt, thnAxisNumPvContributors, thnAxisY, thnAxisCosThetaStarHelicity, thnAxisPtB, thnAxisDausAcc, thnAxisResoChannelLc, thnAxisCharge});
530+ if (activatePartRecoDstar && (doprocessDstarMc || doprocessDstarMcWithMl)) {
531+ registry.add (" hGenPartRecoPromptHelicity" , " THn for polarisation studies with cosThStar w.r.t. helicity axis -- gen prompt partly reco signal" , HistType::kTHnSparseF , {thnAxisPt, thnAxisNumPvContributors, thnAxisY, thnAxisCosThetaStarHelicity, thnAxisDausAcc, thnAxisResoChannelLc, thnAxisCharge});
532+ registry.add (" hGenPartRecoNonPromptHelicity" , " THn for polarisation studies with cosThStar w.r.t. helicity axis -- gen non-prompt partly reco signal" , HistType::kTHnSparseF , {thnAxisPt, thnAxisNumPvContributors, thnAxisY, thnAxisCosThetaStarHelicity, thnAxisPtB, thnAxisDausAcc, thnAxisResoChannelLc, thnAxisCharge});
533+ }
530534 }
531535 if (activateTHnSparseCosThStarProduction) {
532536 registry.add (" hGenPromptProduction" , " THn for polarisation studies with cosThStar w.r.t. production axis -- gen prompt signal" , HistType::kTHnSparseF , {thnAxisPt, thnAxisNumPvContributors, thnAxisY, thnAxisCosThetaStarProduction, thnAxisDausAcc, thnAxisResoChannelLc, thnAxisCharge});
533537 registry.add (" hGenNonPromptProduction" , " THn for polarisation studies with cosThStar w.r.t. production axis -- gen non-prompt signal" , HistType::kTHnSparseF , {thnAxisPt, thnAxisNumPvContributors, thnAxisY, thnAxisCosThetaStarProduction, thnAxisPtB, thnAxisDausAcc, thnAxisResoChannelLc, thnAxisCharge});
538+ if (activatePartRecoDstar && (doprocessDstarMc || doprocessDstarMcWithMl)) {
539+ registry.add (" hGenPartRecoPromptProduction" , " THn for polarisation studies with cosThStar w.r.t. production axis -- gen partly reco prompt signal" , HistType::kTHnSparseF , {thnAxisPt, thnAxisNumPvContributors, thnAxisY, thnAxisCosThetaStarProduction, thnAxisDausAcc, thnAxisResoChannelLc, thnAxisCharge});
540+ registry.add (" hGenPartRecoNonPromptProduction" , " THn for polarisation studies with cosThStar w.r.t. production axis -- gen partly reco non-prompt signal" , HistType::kTHnSparseF , {thnAxisPt, thnAxisNumPvContributors, thnAxisY, thnAxisCosThetaStarProduction, thnAxisPtB, thnAxisDausAcc, thnAxisResoChannelLc, thnAxisCharge});
541+ }
534542 }
535543 if (activateTHnSparseCosThStarBeam) {
536544 registry.add (" hGenPromptBeam" , " THn for polarisation studies with cosThStar w.r.t. beam axis -- gen prompt signal" , HistType::kTHnSparseF , {thnAxisPt, thnAxisNumPvContributors, thnAxisY, thnAxisCosThetaStarBeam, thnAxisDausAcc, thnAxisResoChannelLc, thnAxisCharge});
537545 registry.add (" hGenNonPromptBeam" , " THn for polarisation studies with cosThStar w.r.t. beam axis -- gen non-prompt signal" , HistType::kTHnSparseF , {thnAxisPt, thnAxisNumPvContributors, thnAxisY, thnAxisCosThetaStarBeam, thnAxisPtB, thnAxisDausAcc, thnAxisResoChannelLc, thnAxisCharge});
546+ if (activatePartRecoDstar && (doprocessDstarMc || doprocessDstarMcWithMl)) {
547+ registry.add (" hGenPartRecoPromptBeam" , " THn for polarisation studies with cosThStar w.r.t. beam axis -- gen partly reco prompt signal" , HistType::kTHnSparseF , {thnAxisPt, thnAxisNumPvContributors, thnAxisY, thnAxisCosThetaStarBeam, thnAxisDausAcc, thnAxisResoChannelLc, thnAxisCharge});
548+ registry.add (" hGenPartRecoNonPromptBeam" , " THn for polarisation studies with cosThStar w.r.t. beam axis -- gen partly reco non-prompt signal" , HistType::kTHnSparseF , {thnAxisPt, thnAxisNumPvContributors, thnAxisY, thnAxisCosThetaStarBeam, thnAxisPtB, thnAxisDausAcc, thnAxisResoChannelLc, thnAxisCharge});
549+ }
538550 }
539551 if (activateTHnSparseCosThStarRandom) {
540- registry.add (" hGenPromptRandom" , " THn for polarisation studies with cosThStar w.r.t. random axis -- gen prompt signal" , HistType::kTHnSparseF , {thnAxisPt, thnAxisNumPvContributors, thnAxisY, thnAxisCosThetaStarRandom, thnAxisDausAcc, thnAxisResoChannelLc, thnAxisCharge});
541- registry.add (" hGenNonPromptRandom" , " THn for polarisation studies with cosThStar w.r.t. random axis -- gen non-prompt signal" , HistType::kTHnSparseF , {thnAxisPt, thnAxisNumPvContributors, thnAxisY, thnAxisCosThetaStarRandom, thnAxisPtB, thnAxisDausAcc, thnAxisResoChannelLc, thnAxisCharge});
552+ registry.add (" hGenPartRecoPromptRandom" , " THn for polarisation studies with cosThStar w.r.t. random axis -- gen prompt signal" , HistType::kTHnSparseF , {thnAxisPt, thnAxisNumPvContributors, thnAxisY, thnAxisCosThetaStarRandom, thnAxisDausAcc, thnAxisResoChannelLc, thnAxisCharge});
553+ registry.add (" hGenPartRecoNonPromptRandom" , " THn for polarisation studies with cosThStar w.r.t. random axis -- gen non-prompt signal" , HistType::kTHnSparseF , {thnAxisPt, thnAxisNumPvContributors, thnAxisY, thnAxisCosThetaStarRandom, thnAxisPtB, thnAxisDausAcc, thnAxisResoChannelLc, thnAxisCharge});
554+ if (activatePartRecoDstar && (doprocessDstarMc || doprocessDstarMcWithMl)) {
555+ registry.add (" hGenPartRecoPromptRandom" , " THn for polarisation studies with cosThStar w.r.t. random axis -- gen partly reco prompt signal" , HistType::kTHnSparseF , {thnAxisPt, thnAxisNumPvContributors, thnAxisY, thnAxisCosThetaStarRandom, thnAxisDausAcc, thnAxisResoChannelLc, thnAxisCharge});
556+ registry.add (" hGenPartRecoNonPromptRandom" , " THn for polarisation studies with cosThStar w.r.t. random axis -- gen partly reco non-prompt signal" , HistType::kTHnSparseF , {thnAxisPt, thnAxisNumPvContributors, thnAxisY, thnAxisCosThetaStarRandom, thnAxisPtB, thnAxisDausAcc, thnAxisResoChannelLc, thnAxisCharge});
557+ }
542558 }
543559 }
544560
@@ -894,32 +910,65 @@ struct TaskPolarisationCharmHadrons {
894910 // / \param ptBhadMother is the pt of the b-hadron mother (only in case of non-prompt)
895911 // / \param areDausInAcc is a flag indicating whether the daughters are in acceptance or not
896912 // / \param resoChannelLc indicates the Lc decay channel (direct, resonant)
913+ // / \param isPartRecoDstar is a flag indicating if it is a partly reconstructed Dstar->D0pi->Kpipipi0 meson (MC only)
897914 template <charm_polarisation::CosThetaStarType cosThetaStarType>
898- void fillGenHistos (float ptCharmHad, int numPvContributors, float rapCharmHad, float cosThetaStar, int8_t origin, float ptBhadMother, bool areDausInAcc, uint8_t resoChannelLc, int8_t charge)
915+ void fillGenHistos (float ptCharmHad, int numPvContributors, float rapCharmHad, float cosThetaStar, int8_t origin, float ptBhadMother, bool areDausInAcc, uint8_t resoChannelLc, int8_t charge, bool isPartRecoDstar )
899916 {
900917 if constexpr (cosThetaStarType == charm_polarisation::CosThetaStarType::Helicity) { // Helicity
901918 if (origin == RecoDecay::OriginType::Prompt) { // prompt
902- registry.fill (HIST (" hGenPromptHelicity" ), ptCharmHad, numPvContributors, rapCharmHad, cosThetaStar, areDausInAcc, resoChannelLc, charge);
919+ if (!isPartRecoDstar) {
920+ registry.fill (HIST (" hGenPromptHelicity" ), ptCharmHad, numPvContributors, rapCharmHad, cosThetaStar, areDausInAcc, resoChannelLc, charge);
921+ } else {
922+ registry.fill (HIST (" hGenPartRecoPromptHelicity" ), ptCharmHad, numPvContributors, rapCharmHad, cosThetaStar, areDausInAcc, resoChannelLc, charge);
923+ }
903924 } else { // non-prompt
904- registry.fill (HIST (" hGenNonPromptHelicity" ), ptCharmHad, numPvContributors, rapCharmHad, cosThetaStar, ptBhadMother, areDausInAcc, resoChannelLc, charge);
925+ if (!isPartRecoDstar) {
926+ registry.fill (HIST (" hGenNonPromptHelicity" ), ptCharmHad, numPvContributors, rapCharmHad, cosThetaStar, ptBhadMother, areDausInAcc, resoChannelLc, charge);
927+ } else {
928+ registry.fill (HIST (" hGenPartRecoNonPromptHelicity" ), ptCharmHad, numPvContributors, rapCharmHad, cosThetaStar, ptBhadMother, areDausInAcc, resoChannelLc, charge);
929+ }
905930 }
906931 } else if constexpr (cosThetaStarType == charm_polarisation::CosThetaStarType::Production) { // Production
907932 if (origin == RecoDecay::OriginType::Prompt) { // prompt
908- registry.fill (HIST (" hGenPromptProduction" ), ptCharmHad, numPvContributors, rapCharmHad, cosThetaStar, areDausInAcc, resoChannelLc, charge);
933+ if (!isPartRecoDstar) {
934+ registry.fill (HIST (" hGenPromptProduction" ), ptCharmHad, numPvContributors, rapCharmHad, cosThetaStar, areDausInAcc, resoChannelLc, charge);
935+ } else {
936+ registry.fill (HIST (" hGenPartRecoPromptProduction" ), ptCharmHad, numPvContributors, rapCharmHad, cosThetaStar, areDausInAcc, resoChannelLc, charge);
937+ }
909938 } else { // non-prompt
910- registry.fill (HIST (" hGenNonPromptProduction" ), ptCharmHad, numPvContributors, rapCharmHad, cosThetaStar, ptBhadMother, areDausInAcc, resoChannelLc, charge);
939+ if (!isPartRecoDstar) {
940+ registry.fill (HIST (" hGenNonPromptProduction" ), ptCharmHad, numPvContributors, rapCharmHad, cosThetaStar, ptBhadMother, areDausInAcc, resoChannelLc, charge);
941+ } else {
942+ registry.fill (HIST (" hGenPartRecoNonPromptProduction" ), ptCharmHad, numPvContributors, rapCharmHad, cosThetaStar, ptBhadMother, areDausInAcc, resoChannelLc, charge);
943+ }
911944 }
912945 } else if constexpr (cosThetaStarType == charm_polarisation::CosThetaStarType::Beam) { // Beam
913946 if (origin == RecoDecay::OriginType::Prompt) { // prompt
914- registry.fill (HIST (" hGenPromptBeam" ), ptCharmHad, numPvContributors, rapCharmHad, cosThetaStar, areDausInAcc, resoChannelLc, charge);
947+ if (!isPartRecoDstar) {
948+ registry.fill (HIST (" hGenPromptBeam" ), ptCharmHad, numPvContributors, rapCharmHad, cosThetaStar, areDausInAcc, resoChannelLc, charge);
949+ } else {
950+ registry.fill (HIST (" hGenPartRecoPromptBeam" ), ptCharmHad, numPvContributors, rapCharmHad, cosThetaStar, areDausInAcc, resoChannelLc, charge);
951+ }
915952 } else { // non-prompt
916- registry.fill (HIST (" hGenNonPromptBeam" ), ptCharmHad, numPvContributors, rapCharmHad, cosThetaStar, ptBhadMother, areDausInAcc, resoChannelLc, charge);
953+ if (!isPartRecoDstar) {
954+ registry.fill (HIST (" hGenNonPromptBeam" ), ptCharmHad, numPvContributors, rapCharmHad, cosThetaStar, ptBhadMother, areDausInAcc, resoChannelLc, charge);
955+ } else {
956+ registry.fill (HIST (" hGenPartRecoNonPromptBeam" ), ptCharmHad, numPvContributors, rapCharmHad, cosThetaStar, ptBhadMother, areDausInAcc, resoChannelLc, charge);
957+ }
917958 }
918959 } else if constexpr (cosThetaStarType == charm_polarisation::CosThetaStarType::Random) { // Random
919960 if (origin == RecoDecay::OriginType::Prompt) { // prompt
920- registry.fill (HIST (" hGenPromptRandom" ), ptCharmHad, numPvContributors, rapCharmHad, cosThetaStar, areDausInAcc, resoChannelLc, charge);
961+ if (!isPartRecoDstar) {
962+ registry.fill (HIST (" hGenPromptRandom" ), ptCharmHad, numPvContributors, rapCharmHad, cosThetaStar, areDausInAcc, resoChannelLc, charge);
963+ } else {
964+ registry.fill (HIST (" hGenPartRecoPromptRandom" ), ptCharmHad, numPvContributors, rapCharmHad, cosThetaStar, areDausInAcc, resoChannelLc, charge);
965+ }
921966 } else { // non-prompt
922- registry.fill (HIST (" hGenNonPromptRandom" ), ptCharmHad, numPvContributors, rapCharmHad, cosThetaStar, ptBhadMother, areDausInAcc, resoChannelLc, charge);
967+ if (!isPartRecoDstar) {
968+ registry.fill (HIST (" hGenNonPromptRandom" ), ptCharmHad, numPvContributors, rapCharmHad, cosThetaStar, ptBhadMother, areDausInAcc, resoChannelLc, charge);
969+ } else {
970+ registry.fill (HIST (" hGenPartRecoNonPromptRandom" ), ptCharmHad, numPvContributors, rapCharmHad, cosThetaStar, ptBhadMother, areDausInAcc, resoChannelLc, charge);
971+ }
923972 }
924973 }
925974 }
@@ -1037,8 +1086,9 @@ struct TaskPolarisationCharmHadrons {
10371086 bool partRecoDstar{false };
10381087 if constexpr (doMc) {
10391088 if constexpr (channel == charm_polarisation::DecayChannel::DstarToDzeroPi) {
1040- partRecoDstar = TESTBIT (std::abs (candidate.flagMcMatchRec ()), aod::hf_cand_dstar::DecayType::DstarToD0PiPi0);
1041- if (!TESTBIT (std::abs (candidate.flagMcMatchRec ()), aod::hf_cand_dstar::DecayType::DstarToD0Pi) && (!partRecoDstar || !activatePartRecoDstar)) { // this candidate is not signal and not partially reconstructed signal, skip
1089+ partRecoDstar = TESTBIT (std::abs (candidate.flagMcMatchRec ()), aod::hf_cand_dstar::DecayType::DstarToD0PiPi0) && TESTBIT (std::abs (candidate.flagMcMatchRecD0 ()), aod::hf_cand_dstar::DecayType::D0ToPiKPi0);
1090+ bool signalDstar = TESTBIT (std::abs (candidate.flagMcMatchRec ()), aod::hf_cand_dstar::DecayType::DstarToD0Pi) && TESTBIT (std::abs (candidate.flagMcMatchRecD0 ()), aod::hf_cand_dstar::DecayType::D0ToPiK);
1091+ if (!signalDstar && (!partRecoDstar || !activatePartRecoDstar)) { // this candidate is not signal and not partially reconstructed signal, skip
10421092 return isCandidateInSignalRegion;
10431093 }
10441094 origin = candidate.originMcRec ();
@@ -1555,8 +1605,12 @@ struct TaskPolarisationCharmHadrons {
15551605 bool areDauInAcc{true };
15561606 int8_t resoChannelLc = -1 ;
15571607 int8_t charge = -99 ;
1608+ bool partRecoDstar{false };
15581609 if constexpr (channel == charm_polarisation::DecayChannel::DstarToDzeroPi) {
1559- if (!TESTBIT (std::abs (mcParticle.flagMcMatchGen ()), aod::hf_cand_dstar::DecayType::DstarToD0Pi)) { // this particle is not signal, skip
1610+ partRecoDstar = TESTBIT (std::abs (mcParticle.flagMcMatchGen ()), aod::hf_cand_dstar::DecayType::DstarToD0PiPi0) && TESTBIT (std::abs (mcParticle.flagMcMatchGenD0 ()), aod::hf_cand_dstar::DecayType::D0ToPiKPi0);
1611+ bool signalDstar = TESTBIT (std::abs (mcParticle.flagMcMatchGen ()), aod::hf_cand_dstar::DecayType::DstarToD0Pi) && TESTBIT (std::abs (mcParticle.flagMcMatchGenD0 ()), aod::hf_cand_dstar::DecayType::D0ToPiK);
1612+
1613+ if (!signalDstar && (!activatePartRecoDstar || !partRecoDstar)) { // this particle is not signal and not partially reconstructed signal, skip
15601614 return ;
15611615 }
15621616 origin = mcParticle.originMcGen ();
@@ -1645,22 +1699,22 @@ struct TaskPolarisationCharmHadrons {
16451699 if (activateTHnSparseCosThStarHelicity) {
16461700 ROOT::Math::XYZVector helicityVec = fourVecMother.Vect ();
16471701 float cosThetaStarHelicity = helicityVec.Dot (threeVecDauCM) / std::sqrt (threeVecDauCM.Mag2 ()) / std::sqrt (helicityVec.Mag2 ());
1648- fillGenHistos<charm_polarisation::CosThetaStarType::Helicity>(ptCharmHad, numPvContributors, rapidity, cosThetaStarHelicity, origin, ptBhadMother, areDauInAcc, resoChannelLc, charge);
1702+ fillGenHistos<charm_polarisation::CosThetaStarType::Helicity>(ptCharmHad, numPvContributors, rapidity, cosThetaStarHelicity, origin, ptBhadMother, areDauInAcc, resoChannelLc, charge, partRecoDstar );
16491703 }
16501704 if (activateTHnSparseCosThStarProduction) {
16511705 ROOT::Math::XYZVector normalVec = ROOT::Math::XYZVector (pyCharmHad, -pxCharmHad, 0 .f );
16521706 float cosThetaStarProduction = normalVec.Dot (threeVecDauCM) / std::sqrt (threeVecDauCM.Mag2 ()) / std::sqrt (normalVec.Mag2 ());
1653- fillGenHistos<charm_polarisation::CosThetaStarType::Production>(ptCharmHad, numPvContributors, rapidity, cosThetaStarProduction, origin, ptBhadMother, areDauInAcc, resoChannelLc, charge);
1707+ fillGenHistos<charm_polarisation::CosThetaStarType::Production>(ptCharmHad, numPvContributors, rapidity, cosThetaStarProduction, origin, ptBhadMother, areDauInAcc, resoChannelLc, charge, partRecoDstar );
16541708 }
16551709 if (activateTHnSparseCosThStarBeam) {
16561710 ROOT::Math::XYZVector beamVec = ROOT::Math::XYZVector (0 .f , 0 .f , 1 .f );
16571711 float cosThetaStarBeam = beamVec.Dot (threeVecDauCM) / std::sqrt (threeVecDauCM.Mag2 ());
1658- fillGenHistos<charm_polarisation::CosThetaStarType::Beam>(ptCharmHad, numPvContributors, rapidity, cosThetaStarBeam, origin, ptBhadMother, areDauInAcc, resoChannelLc, charge);
1712+ fillGenHistos<charm_polarisation::CosThetaStarType::Beam>(ptCharmHad, numPvContributors, rapidity, cosThetaStarBeam, origin, ptBhadMother, areDauInAcc, resoChannelLc, charge, partRecoDstar );
16591713 }
16601714 if (activateTHnSparseCosThStarRandom) {
16611715 ROOT::Math::XYZVector randomVec = ROOT::Math::XYZVector (std::sin (thetaRandom) * std::cos (phiRandom), std::sin (thetaRandom) * std::sin (phiRandom), std::cos (thetaRandom));
16621716 float cosThetaStarRandom = randomVec.Dot (threeVecDauCM) / std::sqrt (threeVecDauCM.Mag2 ());
1663- fillGenHistos<charm_polarisation::CosThetaStarType::Random>(ptCharmHad, numPvContributors, rapidity, cosThetaStarRandom, origin, ptBhadMother, areDauInAcc, resoChannelLc, charge);
1717+ fillGenHistos<charm_polarisation::CosThetaStarType::Random>(ptCharmHad, numPvContributors, rapidity, cosThetaStarRandom, origin, ptBhadMother, areDauInAcc, resoChannelLc, charge, partRecoDstar );
16641718 }
16651719 }
16661720
0 commit comments