22 ATH_MSG_INFO(
" top::PDFScaleFactorCalculator initialize");
27 for (
const std::string& set_name :
m_config->LHAPDFSets()) {
35 " to recompute PDF weights.\n Content of sumWeight and totalSumWeight trees might be inconsistent with this recalculation.\n Use only PDFSumWeight and for PDF uncertainty estimates.\n");
39 return StatusCode::SUCCESS;
49 m_config->sgKeyTruthEvent()),
"PDFScaleFactorCalculator: Failed to retrieve TruthEvent container");
51 float mc_weight = event_info->
auxdataConst<
float>(
"AnalysisTop_eventWeight");
54 top::check((truthEventContainer->
size() == 1),
"TruthEvent container size != 1, not sure how to cope with PDF info");
55 int PDFID1(0), PDFID2(0), PDGID1(0), PDGID2(0);
56 float X1(0), X2(0), Q(0), XF1(0), XF2(0);
60 xAOD::TruthEvent::PdfParam::PDGID1),
"Failed to get PDFInfo: PDGID1");
62 xAOD::TruthEvent::PdfParam::PDGID2),
"Failed to get PDFInfo: PDGID2");
64 xAOD::TruthEvent::PdfParam::PDFID1),
"Failed to get PDFInfo: PDFID1");
66 xAOD::TruthEvent::PdfParam::PDFID2),
"Failed to get PDFInfo: PDFID2");
79 "Not enough info to recompute PDF weights (empty XF1,XF2).\n Please try to set LHAPDFBaseSet to a valid PDF set.\n XF1=" << XF1 <<
" XF2=" << XF2 <<
" LHAPDFBaseSet=" <<
81 return StatusCode::FAILURE;
87 pdf.second.event_weights.clear();
88 pdf.second.event_weights.resize(
pdf.second.pdf_members.size());
92 for (
const auto& pdf_member :
pdf.second.pdf_members) {
93 float new_xf1 = pdf_member->xfxQ(PDGID1, X1, Q);
94 float new_xf2 = pdf_member->xfxQ(PDGID2, X2, Q);
96 float weight = (new_xf1 * new_xf2) / (XF1 * XF2);
101 pdf.second.sum_of_event_weights[
i] += (
weight * mc_weight);
106 if (
m_config->saveLHAPDFEvent()) truthEvent->
auxdecor< std::vector< float > >(
107 "AnalysisTop_" +
pdf.first +
"_Weights") =
pdf.second.event_weights;
110 return StatusCode::SUCCESS;
115 m_config->addLHAPDFResult(
pdf.first,
pdf.second.sum_of_event_weights);
119 return StatusCode::SUCCESS;