diff --git a/PWGEM/Dilepton/Core/SingleTrackQCMC.h b/PWGEM/Dilepton/Core/SingleTrackQCMC.h index 45c40aa5c1f..bd16f85f0e7 100644 --- a/PWGEM/Dilepton/Core/SingleTrackQCMC.h +++ b/PWGEM/Dilepton/Core/SingleTrackQCMC.h @@ -197,7 +197,7 @@ struct SingleTrackQCMC { HistogramRegistry fRegistry{"output", {}, OutputObjHandlingPolicy::AnalysisObject, false, false}; // 1 HistogramRegistry can keep up to 512 histograms static constexpr std::string_view event_cut_types[2] = {"before/", "after/"}; - static constexpr std::string_view lepton_source_types[9] = {"lf/", "Photon/", "PromptJPsi/", "NonPromptJPsi/", "PromptPsi2S/", "NonPromptPsi2S/", "c2l/", "b2l/", "b2c2l/"}; + static constexpr std::string_view lepton_source_types[10] = {"lf/", "lf_prompt/", "Photon/", "PromptJPsi/", "NonPromptJPsi/", "PromptPsi2S/", "NonPromptPsi2S/", "c2l/", "b2l/", "b2c2l/"}; ~SingleTrackQCMC() {} @@ -221,6 +221,7 @@ struct SingleTrackQCMC { // generated info fRegistry.add("Generated/lf/hs", "gen. single electron", kTHnSparseD, {axis_pt, axis_eta, axis_phi, axis_charge_gen}, true); + fRegistry.addClone("Generated/lf/", "Generated/lf_prompt/"); fRegistry.addClone("Generated/lf/", "Generated/PromptJPsi/"); fRegistry.addClone("Generated/lf/", "Generated/NonPromptJPsi/"); fRegistry.addClone("Generated/lf/", "Generated/PromptPsi2S/"); @@ -253,6 +254,7 @@ struct SingleTrackQCMC { fRegistry.add("Track/lf/positive/hPtGen_DeltaPhi", "electron #varphi resolution;p_{T}^{gen} (GeV/c);#varphi^{rec} - #varphi^{gen} (rad.)", kTH2F, {{200, 0, 10}, {100, -0.05f, 0.05f}}, true); } fRegistry.addClone("Track/lf/positive/", "Track/lf/negative/"); + fRegistry.addClone("Track/lf/", "Track/lf_prompt/"); fRegistry.addClone("Track/lf/", "Track/Photon/"); // this is not for efficiency! only for contamination. We don't store generated photon conversions. fRegistry.addClone("Track/lf/", "Track/PromptJPsi/"); fRegistry.addClone("Track/lf/", "Track/NonPromptJPsi/"); @@ -289,6 +291,7 @@ struct SingleTrackQCMC { // generated info fRegistry.add("Generated/lf/hs", "gen. single muon", kTHnSparseD, {axis_pt, axis_eta, axis_phi, axis_charge_gen}, true); + fRegistry.addClone("Generated/lf/", "Generated/lf_prompt/"); fRegistry.addClone("Generated/lf/", "Generated/PromptJPsi/"); fRegistry.addClone("Generated/lf/", "Generated/NonPromptJPsi/"); fRegistry.addClone("Generated/lf/", "Generated/PromptPsi2S/"); @@ -318,6 +321,7 @@ struct SingleTrackQCMC { fRegistry.add("Track/lf/positive/hPtGen_DeltaPhi", "muon #varphi resolution;p_{T}^{gen} (GeV/c);#varphi^{rec} - #varphi^{gen} (rad.)", kTH2F, {{200, 0, 10}, {100, -0.05f, 0.05f}}, true); } fRegistry.addClone("Track/lf/positive/", "Track/lf/negative/"); + fRegistry.addClone("Track/lf/", "Track/lf_prompt/"); fRegistry.addClone("Track/lf/", "Track/Photon/"); // this is not for efficiency! only for contamination. We don't store generated photon conversions. fRegistry.addClone("Track/lf/", "Track/PromptJPsi/"); fRegistry.addClone("Track/lf/", "Track/NonPromptJPsi/"); @@ -714,30 +718,33 @@ struct SingleTrackQCMC { if (mctrack.isPhysicalPrimary() || mctrack.producedByGenerator()) { if (pdg_mother == 111 || pdg_mother == 221 || pdg_mother == 331 || pdg_mother == 113 || pdg_mother == 223 || pdg_mother == 333) { - fillTrackInfo<0, TMCParticles>(track); + fillTrackInfo<0, TMCParticles>(track); // lf + if (IsFromCharm(mcmother, mcparticles) < 0 && IsFromBeauty(mcmother, mcparticles) < 0) { + fillTrackInfo<1, TMCParticles>(track); // lf_prompt + } } else if (pdg_mother == 443) { if (IsFromBeauty(mcmother, mcparticles) > 0) { // b is found in full decay chain. - fillTrackInfo<3, TMCParticles>(track); + fillTrackInfo<4, TMCParticles>(track); } else { - fillTrackInfo<2, TMCParticles>(track); + fillTrackInfo<3, TMCParticles>(track); } } else if (pdg_mother == 100443) { if (IsFromBeauty(mcmother, mcparticles) > 0) { // b is found in full decay chain. - fillTrackInfo<5, TMCParticles>(track); + fillTrackInfo<6, TMCParticles>(track); } else { - fillTrackInfo<4, TMCParticles>(track); + fillTrackInfo<5, TMCParticles>(track); } } else if (IsFromBeauty(mctrack, mcparticles) > 0) { // b is found in full decay chain. if (IsFromCharm(mctrack, mcparticles) > 0) { // c is found in full decay chain. - fillTrackInfo<8, TMCParticles>(track); + fillTrackInfo<9, TMCParticles>(track); } else { - fillTrackInfo<7, TMCParticles>(track); + fillTrackInfo<8, TMCParticles>(track); } } else if (IsFromCharm(mctrack, mcparticles) > 0) { // c is found in full decay chain. Not from b. - fillTrackInfo<6, TMCParticles>(track); + fillTrackInfo<7, TMCParticles>(track); } } else { - fillTrackInfo<1, TMCParticles>(track); + fillTrackInfo<2, TMCParticles>(track); } } // end of track loop @@ -821,6 +828,9 @@ struct SingleTrackQCMC { if (pdg_mother == 111 || pdg_mother == 221 || pdg_mother == 331 || pdg_mother == 113 || pdg_mother == 223 || pdg_mother == 333) { fRegistry.fill(HIST("Generated/lf/hs"), pt, eta, phi, -lepton.pdgCode() / pdg_lepton); + if (IsFromCharm(mcmother, mcparticles) < 0 && IsFromBeauty(mcmother, mcparticles) < 0) { + fRegistry.fill(HIST("Generated/lf_prompt/hs"), pt, eta, phi, -lepton.pdgCode() / pdg_lepton); + } } else if (pdg_mother == 443) { if (IsFromBeauty(mcmother, mcparticles) > 0) { // b is found in full decay chain. fRegistry.fill(HIST("Generated/NonPromptJPsi/hs"), pt, eta, phi, -lepton.pdgCode() / pdg_lepton);