lhapdf is hosted by Hepforge, IPPP Durham
LHAPDF  6.5.4
Reweighting.h
1 // -*- C++ -*-
2 //
3 // This file is part of LHAPDF
4 // Copyright (C) 2012-2023 The LHAPDF collaboration (see AUTHORS for details)
5 //
6 #pragma once
7 #ifndef LHAPDF_Reweighting_H
8 #define LHAPDF_Reweighting_H
9 
10 #include "LHAPDF/PDF.h"
11 #include "LHAPDF/PDFSet.h"
12 
13 namespace LHAPDF {
14 
15 
18 
19  namespace {
20  inline bool _checkAlphasQ2(double Q2, const PDF& pdfa, const PDF& pdfb, double aschk) {
21  if (aschk < 0) return true;
22  const double as_a = pdfa.alphasQ2(Q2);
23  const double as_b = pdfb.alphasQ2(Q2);
24  if (2 * std::abs(as_a - as_b) / (std::abs(as_a) + std::abs(as_b)) < aschk) return true;
25  std::cerr << "WARNING: alpha_s(Q2) mismatch in PDF reweighting "
26  << "at Q2 = " << Q2 << " GeV2:\n "
27  << as_a << " for " << pdfa.set().name() << "/" << pdfa.memberID() << " vs. "
28  << as_b << " for " << pdfb.set().name() << "/" << pdfb.memberID()
29  << std::endl;
30  return false;
31  }
32  }
33 
34 
37 
41  inline double weightxQ2(int id, double x, double Q2, const PDF& basepdf, const PDF& newpdf, double aschk=5e-2) {
42  if (aschk >= 0) _checkAlphasQ2(Q2, basepdf, newpdf, aschk);
43  const double xf_base = basepdf.xfxQ2(id, x, Q2);
44  const double xf_new = newpdf.xfxQ2(id, x, Q2);
45  return xf_new / xf_base;
46  }
47 
51  template <typename PDFPTR>
52  inline double weightxQ2(int id, double x, double Q2, const PDFPTR basepdf, const PDFPTR newpdf, double aschk=5e-2) {
53  return weightxQ2(id, x, Q2, *basepdf, *newpdf, aschk);
54  }
55 
59  inline double weightxQ(int id, double x, double Q, const PDF& basepdf, const PDF& newpdf, double aschk=5e-2) {
60  return weightxQ2(id, x, sqr(Q), basepdf, newpdf, aschk);
61  }
62 
66  template <typename PDFPTR>
67  inline double weightxQ(int id, double x, double Q, const PDFPTR basepdf, const PDFPTR newpdf, double aschk=5e-2) {
68  return weightxQ(id, x, Q, *basepdf, *newpdf, aschk);
69  }
70 
72 
73 
76 
80  inline double weightxxQ2(int id1, int id2, double x1, double x2, double Q2, const PDF& basepdf, const PDF& newpdf, double aschk=5e-2) {
81  if (aschk >= 0) _checkAlphasQ2(Q2, basepdf, newpdf, aschk);
82  const double w1 = weightxQ2(id1, x1, Q2, basepdf, newpdf, -1);
83  const double w2 = weightxQ2(id2, x2, Q2, basepdf, newpdf, -1);
84  return w1 * w2;
85  }
86 
90  template <typename PDFPTR>
91  inline double weightxxQ2(int id1, int id2, double x1, double x2, double Q2, const PDFPTR basepdf, const PDFPTR newpdf, double aschk=5e-2) {
92  return weightxxQ2(id1, id2, x1, x2, Q2, *basepdf, *newpdf, aschk);
93  }
94 
98  inline double weightxxQ(int id1, int id2, double x1, double x2, double Q, const PDF& basepdf, const PDF& newpdf, double aschk=5e-2) {
99  return weightxxQ2(id1, id2, x1, x2, sqr(Q), basepdf, newpdf, aschk);
100  }
101 
105  template <typename PDFPTR>
106  inline double weightxxQ(int id1, int id2, double x1, double x2, double Q, const PDFPTR basepdf, const PDFPTR newpdf, double aschk=5e-2) {
107  return weightxxQ(id1, id2, x1, x2, Q, *basepdf, *newpdf, aschk);
108  }
109 
111 
113 
114 }
115 #endif
N sqr(const N &x)
Convenience function for squaring (of any type)
Definition: Utils.h:208
PDF is the general interface for access to parton density information.
Definition: PDF.h:40
double xfxQ2(int id, double x, double q2) const
Get the PDF xf(x) value at (x,q2) for the given PID.
double weightxxQ2(int id1, int id2, double x1, double x2, double Q2, const PDF &basepdf, const PDF &newpdf, double aschk=5e-2)
Definition: Reweighting.h:80
double weightxxQ(int id1, int id2, double x1, double x2, double Q, const PDF &basepdf, const PDF &newpdf, double aschk=5e-2)
Definition: Reweighting.h:98
double weightxQ(int id, double x, double Q, const PDF &basepdf, const PDF &newpdf, double aschk=5e-2)
Definition: Reweighting.h:59
double weightxQ2(int id, double x, double Q2, const PDF &basepdf, const PDF &newpdf, double aschk=5e-2)
Definition: Reweighting.h:41