Source code for banana.toy

"""
This module contains the Toy PDF.

It is defined at the initial scale :math:`Q = sqrt(2) GeV`.
"""


[docs] class toyPDFSet: """Fake PDF set""" def __init__(self, name): self.name = name
[docs] class MockPDF: """Imitates a lhapdf.PDF""" name = None xpdf = {}
[docs] def xfxQ2(self, pid, x, _Q2): """Get the PDF/FF xf(x) value at (x,q2) for the given PID. Parameters ---------- Parameters ---------- pid : int PDG parton ID. x : float Momentum fraction. Q2 : float Squared energy (renormalization) scale. Returns ------- float The value of xf(x,q2). """ # Initialize PDFs to zero if x > 1e0: return 0.0 if pid not in self.xpdf: return 0.0 return self.xpdf[pid](x)
[docs] def xfxQ(self, pid, x, Q): """Get the PDF/FF xf(x) value at (x,q) for the given PID. Parameters ---------- pid : int PDG parton ID. x : float Momentum fraction. Q : float Energy (renormalization) scale. Returns ------- type The value of xf(x,q). """ return self.xfxQ2(pid, x, Q * Q)
[docs] def alphasQ(self, q): "Return alpha_s at q" return self.alphasQ2(q**2)
[docs] def alphasQ2(self, _q2): "Return alpha_s at q2" return 0.35
[docs] def set(self): "Return the corresponding PDFSet" return toyPDFSet(self.name)
[docs] def hasFlavor(self, pid): """Contains a pdf for pid?""" return pid in ([21, 22] + list(range(-6, 6 + 1)))
[docs] class toyPDF_unpolarized(MockPDF): """ToyLH unpolarized implementation.""" def __init__(self): N_uv = 5.107200e0 auv = 0.8e0 buv = 3e0 N_dv = 3.064320e0 adv = 0.8e0 bdv = 4e0 N_g = 1.7e0 ag = -0.1e0 bg = 5e0 N_db = 0.1939875e0 adb = -0.1e0 bdb = 6e0 fs = 0.2e0 xuv = lambda x: N_uv * x**auv * (1e0 - x) ** buv xdv = lambda x: N_dv * x**adv * (1e0 - x) ** bdv xg = lambda x: N_g * x**ag * (1e0 - x) ** bg xdbar = lambda x: N_db * x**adb * (1e0 - x) ** bdb xubar = lambda x: xdbar(x) * (1e0 - x) xs = lambda x: fs * (xdbar(x) + xubar(x)) xsbar = xs self.xpdf = {} self.xpdf[3] = xs self.xpdf[2] = lambda x: xuv(x) + xubar(x) self.xpdf[1] = lambda x: xdv(x) + xdbar(x) self.xpdf[21] = self.xpdf[0] = xg self.xpdf[-1] = xdbar self.xpdf[-2] = xubar self.xpdf[-3] = xsbar self.name = "ToyLH"
[docs] class toyPDF_polarized(MockPDF): """ToyLH polarized implementation.""" def __init__(self): N_uv = 1.3 auv = 0.7 buv = 3.0 N_dv = -0.5 adv = 0.7 bdv = 4.0 N_g = 1.5 ag = 0.5 bg = 5.0 N_db = -0.05 adb = 0.3 bdb = 7 fs = 0.5 xuv = lambda x: N_uv * x**auv * (1e0 - x) ** buv * (1 + 3 * x) xdv = lambda x: N_dv * x**adv * (1e0 - x) ** bdv * (1 + 4 * x) xg = lambda x: N_g * x**ag * (1e0 - x) ** bg xdbar = lambda x: N_db * x**adb * (1e0 - x) ** bdb xubar = xdbar xs = lambda x: fs * xdbar(x) xsbar = xs self.xpdf = {} self.xpdf[3] = xs self.xpdf[2] = lambda x: xuv(x) + xubar(x) self.xpdf[1] = lambda x: xdv(x) + xdbar(x) self.xpdf[21] = self.xpdf[0] = xg self.xpdf[-1] = xdbar self.xpdf[-2] = xubar self.xpdf[-3] = xsbar self.name = "ToyLH_polarized"
[docs] class toyFF_unpolarized(MockPDF): """ToyFF from 1501.00494, Eqn. 3.3 and 3.4""" def __init__(self): N_v = 1.00881 N_s = 17.6255 N_g = 438.189 xD_u = lambda x: x * N_v * x ** (-0.963) * (1 - x) ** 1.370 xD_ub = lambda x: x * N_s * x**0.718 * (1 - x) ** 6.266 xD_g = lambda x: x * N_g * x**1.943 * (1 - x) ** 8 self.xpdf = {} self.xpdf[-3] = xD_ub self.xpdf[-2] = xD_ub self.xpdf[-1] = xD_u self.xpdf[0] = xD_g self.xpdf[1] = xD_ub self.xpdf[2] = xD_u self.xpdf[3] = xD_ub self.xpdf[21] = self.xpdf[0] self.name = "ToyFF_unpolarized"
[docs] def mkPDF(setname, _member): """ Factory functions for making single PDF/FF members. Create a new PDF/FF with the given PDF/FF set name and member ID. Parameters ---------- setname : type PDF/FF set name. member : type Member ID. Returns ------- toyPDF/FF PDF/FF object. """ if setname == "ToyLH_polarized": return toyPDF_polarized() if setname == "ToyFF_unpolarized": return toyFF_unpolarized() return toyPDF_unpolarized()