Exemple #1
0
 def __init__(self, name, tag, purpose, id, nmax, refname, reftag, refmem):
     self.name = name
     self.tag = tag
     self.purpose = purpose
     self.id = id
     self.pdf = lhapdf.mkPDFs(self.name)
     self.nmem = min(len(self.pdf), nmax) if nmax > 0 else len(self.pdf)
     self.wghts = std.vector('double')()
     self.wghts.resize(self.nmem)
     self.wghtsalphas = std.vector('double')()
     self.wghtsalphas.resize(self.nmem)
     self.refname = refname
     self.reftag = reftag
     self.refmem = refmem
     self.refpdf = lhapdf.mkPDFs(self.refname)[self.refmem]
Exemple #2
0
	def __init__(self,name,tag,purpose,id,nmax,refname,reftag,refmem):
		self.name = name
		self.tag = tag
		self.purpose = purpose
		self.id = id
		self.pdf = lhapdf.mkPDFs(self.name)
		self.nmem = min(len(self.pdf),nmax) if nmax>0 else len(self.pdf)
		self.wghts = std.vector('double')()
		self.wghts.resize(self.nmem)
		self.wghtsalphas = std.vector('double')()
		self.wghtsalphas.resize(self.nmem)
		self.refname = refname
		self.reftag = reftag
		self.refmem = refmem
		self.refpdf = lhapdf.mkPDFs(self.refname)[self.refmem]
Exemple #3
0
    def set_pdf(self,refer,target):

        ##--set LHAPDF path
        lhapdf.pathsPrepend("/home/taebh/2021_Research/share/LHAPDF")
        self.nnpdf = lhapdf.mkPDF(refer,0)
        self.PDFsets = lhapdf.mkPDFs(target)
        self.numPDF = len(self.PDFsets)
Exemple #4
0
def get_pdf(pdfset, parton, q, xs):
    """get the PDF (xfx) for a certain set, parton, x and Q"""

    pdfs = lhapdf.mkPDFs(pdfset)
    pdf = np.zeros((len(pdfs), len(xs)))

    for i_member, pdfmember in enumerate(pdfs):
        for (i, xi) in enumerate(xs):
            if parton < 7:
                pdf[i_member - 1][i] = pdfmember.xfxQ(parton, xi, q)
            elif parton == 7:
                #DVAL 1-(-1)
                pdf[i_member - 1][i] = pdfmember.xfxQ(1, xi, q) - \
                     pdfmember.xfxQ(-1, xi, q)
            elif parton == 8:
                #UVAL 2-(-2)
                pdf[i_member - 1][i] = pdfmember.xfxQ(2, xi, q) - \
                     pdfmember.xfxQ(-2, xi, q)
            elif parton == 9:
                #Light sea: xS=2(xubar + xdbar + xsbar)
                pdf[i_member - 1][i] = 2*(pdfmember.xfxQ(-1, xi, q) + \
                     pdfmember.xfxQ(-2, xi, q) + \
                     pdfmember.xfxQ(-3, xi, q))
            else:
                raise ValueError('Parton id not in range 0...9')
    return pdf
Exemple #5
0
def d2calc(interface='JAMLIB'):

  if interface=='JAMLIB':
    jamlib=JAMLIB('JAM15/T3PPDF')
    npos = jamlib.npos
    first = 0
  elif interface=='LHAPDF':
    jamlib=lhapdf.mkPDFs("JAM15_T3PPDF_Ceven")
    npos = 200
    first = 1
    
  def _get_d2(i,Q2,nucleon):
    if interface=='JAMLIB':   
      Du=lambda x: jamlib.get_XF(i,'up',x,Q2)/x
      Dd=lambda x: jamlib.get_XF(i,'dp',x,Q2)/x
    elif interface=='LHAPDF':
      Du=lambda x: jamlib[i].xfxQ2(902,x,Q2)/x
      Dd=lambda x: jamlib[i].xfxQ2(901,x,Q2)/x
    
    if nucleon=='proton':
      D=lambda x: 4/9.*Du(x) + 1/9.*Dd(x)
    if nucleon=='neutron':
      D=lambda x: 1/9.*Du(x) + 4/9.*Dd(x)
    return 2*quad(lambda x: x**2*D(x),0,1)[0]
  
  def get_d2(Q2,nucleon):
    d2=[_get_d2(i+first,Q2,nucleon) for i in  range(npos)]
    d2=[_d2 for _d2 in d2 if np.isnan(_d2)==False]
    return np.mean(d2),np.var(d2)**0.5
  
  Q2=np.arange(1,2,0.1)
  Q2=np.append(Q2,np.arange(2,3,0.2))
  Q2=np.append(Q2,np.arange(3,6.5,0.5))
  d2p=[get_d2(_Q2,'proton') for _Q2 in Q2]
  d2n=[get_d2(_Q2,'neutron') for _Q2 in Q2]
def get_pdf(pdfset, parton, q, xs):
	"""get the PDF (xfx) for a certain set, parton, x and Q"""

	pdfs = lhapdf.mkPDFs(pdfset)
	pdf = np.zeros((len(pdfs), len(xs)))
	

	for i_member, pdfmember in enumerate(pdfs):
		for (i, xi) in enumerate(xs):
			if parton < 7:
				pdf[i_member - 1][i] = pdfmember.xfxQ(parton, xi, q)
			elif parton == 7:
				#DVAL 1-(-1)
				pdf[i_member - 1][i] = pdfmember.xfxQ(1, xi, q) - \
								 pdfmember.xfxQ(-1, xi, q)
			elif parton == 8:
				#UVAL 2-(-2)
				pdf[i_member - 1][i] = pdfmember.xfxQ(2, xi, q) - \
								 pdfmember.xfxQ(-2, xi, q)
			elif parton == 9:
				#Light sea: xS=2(xubar + xdbar + xsbar)
				pdf[i_member - 1][i] = 2*(pdfmember.xfxQ(-1, xi, q) + \
								 pdfmember.xfxQ(-2, xi, q) + \
								 pdfmember.xfxQ(-3, xi, q))
			else:
				raise ValueError('Parton id not in range 0...9')
	return pdf
Exemple #7
0
 def __init__(self,name,central_only=False,ismc=False):
     print 'loading ',name
     self.name=name
     self.ismc=ismc
     self.central_only=central_only
     if central_only==True:
         self.central=lhapdf.mkPDF(name,0)
     else:
         self.SETS=lhapdf.mkPDFs(name)
Exemple #8
0
  def __init__(self,name,X=[None],central_only=False):

    self.name=name
    self.central_only=central_only
    if central_only==True:
      self.central=lhapdf.mkPDF(name,0)
    else:
      self.SETS=lhapdf.mkPDFs(name)
    if X[0]==None: self.X=np.linspace(1e-3,0.99,1000)
    else: self.X=X
Exemple #9
0
    def __init__(self, pdf_name, xgrid, fl, Q):
        self.pdf_name = pdf_name
        self.pdf = lhapdf.mkPDFs(pdf_name)
        self.n_rep = len(self.pdf) - 1
        self.fl = fl
        self.xgrid = xgrid
        self.xfxQ = np.zeros(shape=(self.n_rep, fl.n, xgrid.n))

        # load replicas at Q
        self.setQ(Q)
def getPdfSets():
    pdfNames = [
        "CT10", "CT10nnlo_as_0117", "CT10nnlo_as_0119", "MSTW2008nnlo68cl",
        "MSTW2008nnlo68cl_asmz-68cl", "MSTW2008nnlo68cl_asmz+68cl",
        "NNPDF23_nnlo_as_0116", "NNPDF23_nnlo_as_0117", "NNPDF23_nnlo_as_0118",
        "NNPDF23_nnlo_as_0119", "NNPDF23_nnlo_as_0120", "NNPDF23_nnlo_as_0121",
        "NNPDF23_nnlo_as_0122"
    ]

    out = {}
    for name in pdfNames:
        out[name] = lhapdf.mkPDFs(name)
    return out
Exemple #11
0
def gen_hess_glue(Q2=2.0):

    X = 10**np.linspace(-4, -1, 100)
    X = np.append(X, np.linspace(0.1, 0.99, 100))

    data = {'X': X, 'Q2': Q2}
    pdfs = lhapdf.mkPDFs(fname)
    for i in range(len(pdfs)):
        data[i] = np.array([pdfs[i].xfxQ2(21, x, Q2) for x in X])

    err2 = np.zeros(data[0].size)
    for iset in range(1, len(pdfs), 2):
        err2 += (data[iset] - data[iset + 1])**2 / 4.0
    data['err'] = err2**0.5
    save(data, 'data/hess_glue_%.2f.po' % Q2)
def getPdfSets():
    pdfNames = [
        "CT10",
        "CT10nnlo_as_0117",
        "CT10nnlo_as_0119",
        "MSTW2008nnlo68cl",
        "MSTW2008nnlo68cl_asmz-68cl",
        "MSTW2008nnlo68cl_asmz+68cl",
        "NNPDF23_nnlo_as_0116",
        "NNPDF23_nnlo_as_0117",
        "NNPDF23_nnlo_as_0118",
        "NNPDF23_nnlo_as_0119",
        "NNPDF23_nnlo_as_0120",
        "NNPDF23_nnlo_as_0121",
        "NNPDF23_nnlo_as_0122"
    ]

    out = {}
    for name in pdfNames:
        out[name] = lhapdf.mkPDFs( name )
    return out
Exemple #13
0
def gen_dist_from_lhapdf(wdir,dist,dirname):

    print('\ngenerating  %s tables for benchmark using %s from lhapdf'%(dist,wdir))

    replicas=lhapdf.mkPDFs(dirname)
    X,Q2=gen_grid(dist)
    flavs=[-5,-4,-3,-2,-1,1,2,3,4,5,21]

    #--gen qpd data per replica
    checkdir('%s/benchmark'%wdir)
    cnt=0
    for i in range(len(replicas)):
        lprint('progress: %d/%d'%(cnt+1,len(replicas)))
        replica=replicas[i]
        data={}
        for _ in Q2:
            data[_]={}
            for flav in flavs:
                data[_][flav]=np.array([replica.xfxQ2(flav,x,_) for  x in X])
        save(data,'%s/benchmark/%s-%d-lha.dat'%(wdir,dist,cnt))
        cnt+=1
    print
Exemple #14
0
    def build_pdf(self):
        """Construct a grid of PDF from a grid in x depenging on
        the input parameters.

        Returns
        -------
            result: array_like
                PDF grid of shape=(replicas, flavours, x-grid)
        """
        # Call lhapdf PDF set PDF set
        pdf = lhapdf.mkPDFs(self.pdf_name)
        pdf_size = len(pdf)
        xgrid_size = self.xgrid.shape[0]

        # construct input pdf replicas
        inpdf = np.zeros((pdf_size, 2 * self.nf + 1, xgrid_size))
        for p in range(pdf_size):
            for f in range(-self.nf, self.nf + 1):
                for x in range(xgrid_size):
                    inpdf[p][f + self.nf][x] = pdf[p].xfxQ(
                        f, self.xgrid[x], self.q_value)
        return inpdf
Exemple #15
0
  def __init__(self,name):

    self.name=name
    self.SETS=lhapdf.mkPDFs(name)
p = lhapdf.mkPDF("CT10", 0)
p = lhapdf.mkPDF("CT10/0")

## Gluon PDF querying at x=0.001, Q2=10000
print p.xfxQ2(21, 1e-3, 1e4)

## Basic all-flavour PDF querying at x=0.01, Q=M_Z
for pid in p.flavors():
    print p.xfxQ(pid, 0.01, 91.2)

# TODO: demonstrate looping over PDF set members
pset = lhapdf.getPDFSet("CT10nlo")
print pset.description
pcentral = pset.mkPDF(0)
pdfs1 = pset.mkPDFs()
pdfs2 = lhapdf.mkPDFs("CT10nlo") # a direct way to get all the set's PDFs

## Filling a numpy 2D array with xf(x,Q) samples
import numpy as np
xs = [x for x in np.logspace(-7, 0, 5)]
qs = [q for q in np.logspace(1, 4, 4)]
gluon_xfs = np.empty([len(xs), len(qs)])
for ix, x in enumerate(xs):
    for iq, q in enumerate(qs):
        gluon_xfs[ix,iq] = p.xfxQ(21, x, q)
print gluon_xfs

## Version info, search paths, and metadata
print lhapdf.version()
print lhapdf.__version__
lhapdf.pathsPrepend("/path/to/extra/pdfsets")
Exemple #17
0
    def __init__(self, pdf_name, q_value, nf):

        self.nf = nf
        self.q_value = q_value
        self.pdf_name = pdf_name
        self.lhpdf = lhapdf.mkPDFs(pdf_name)
Exemple #18
0
p = lhapdf.mkPDF("CT10", 0)
p = lhapdf.mkPDF("CT10/0")

## Gluon PDF querying at x=0.001, Q2=10000
print(p.xfxQ2(21, 1e-3, 1e4))

## Basic all-flavour PDF querying at x=0.01, Q=M_Z
for pid in p.flavors():
    print(p.xfxQ(pid, 0.01, 91.2))

# TODO: demonstrate looping over PDF set members
pset = lhapdf.getPDFSet("CT10nlo")
print(pset.description)
pcentral = pset.mkPDF(0)
pdfs1 = pset.mkPDFs()
pdfs2 = lhapdf.mkPDFs("CT10nlo")  # a direct way to get all the set's PDFs

## Filling a numpy 2D array with xf(x,Q) samples
import numpy as np
xs = [x for x in np.logspace(-7, 0, 5)]
qs = [q for q in np.logspace(1, 4, 4)]
gluon_xfs = np.empty([len(xs), len(qs)])
for ix, x in enumerate(xs):
    for iq, q in enumerate(qs):
        gluon_xfs[ix, iq] = p.xfxQ(21, x, q)
print(gluon_xfs)

## Version info, search paths, and metadata
print(lhapdf.version())
print(lhapdf.__version__)
lhapdf.pathsPrepend("/path/to/extra/pdfsets")
Exemple #19
0
def main():
    args = arg_parser()
    compressed_file = args.infile

    # Reading results from file
    with open(compressed_file) as results_file:
        results = json.load(results_file)
    pdfset_name = results["pdfset_name"]
    index = results["index"]  # Array of index
    nbcomp = len(index)

    # Get LHAPDF datadir
    lhapdf_dir = Popen(["lhapdf-config", "--datadir"], stdout=PIPE)
    pdf_dir, _ = lhapdf_dir.communicate()
    pdf_dir = pdf_dir.decode("utf-8")
    pdf_dir = pdf_dir.replace("\n", "")

    # Create output file
    output = pdfset_name + "_compressed_" + str(nbcomp)

    # Create Output folders
    if not os.path.exists(output):
        os.mkdir(output)
    else:
        pass

    src_str = pdf_dir + "/" + pdfset_name + "/" + pdfset_name
    dst_str = output + "/" + output

    # Copy the LHAPDF replicas to the output file
    cindex = []
    console.print("\n• Copying the selected replicas to compressed set:",
                  style="bold blue")
    with trange(nbcomp) as iter_index:
        for ix, idx in enumerate(iter_index):
            indx = int(index[idx])  # Make sure it's an integer
            cindex.append(indx)
            # Extension name corresponding to the prior
            # Number of PDF replicas < 10000
            if indx < 10:
                ext_name_prior = "000" + str(indx)
            elif indx < 100:
                ext_name_prior = "00" + str(indx)
            elif indx < 1000:
                ext_name_prior = "0" + str(indx)
            else:
                ext_name_prior = str(indx)
            # Extension name for Compressed replicas
            if (ix + 1) < 10:
                ext_name_compress = "000" + str(ix + 1)
            elif (ix + 1) < 100:
                ext_name_compress = "00" + str(ix + 1)
            elif (ix + 1) < 1000:
                ext_name_compress = "0" + str(ix + 1)
            else:
                ext_name_compress = str(ix + 1)
            # Construc path name
            src = src_str + "_" + ext_name_prior + ".dat"
            dst = dst_str + "_" + ext_name_compress + ".dat"
            # copy srouce to compressed
            shutil.copy(src, dst)
            iter_index.set_description(
                f"copy original_{indx} to compressed_{ix+1}")

    # Construct .info file for compressed set
    src = src_str + ".info"
    dst = dst_str + ".info"
    src_file = open(src, "r")
    dst_file = open(dst, "w")
    for line in src_file.readlines():
        if "NumMembers:" in line:
            dst_file.write("NumMembers: " + str(nbcomp + 1) + "\n")
        else:
            dst_file.write(line)
    dst_file.close()
    src_file.close()

    # Fetching info from Prior Central PDF
    console.print("\n• Fetching information from original central PDF.",
                  style="bold blue")
    w = open(src_str + "_0000.dat", "r")
    xpdf = []
    xgrid, qgrid, fgrid = [], [], []
    textxs, textqs, textfs = [], [], []

    # Removing the info in the head
    for _ in range(0, 10):
        if "--" in w.readline():
            break

    # Init grid size count
    s = 0
    table = Table(show_header=True, header_style="bold magenta")
    table.add_column("N", justify="left")
    table.add_column("Subgrids", justify="center", width=35)
    while True:
        textxs.append(w.readline())
        xs = [float(el) for el in textxs[s].split()]
        textqs.append(w.readline())
        qs = [float(el) for el in textqs[s].split()]
        textfs.append(w.readline())
        fs = [int(float(el)) for el in textfs[s].split()]
        if len(xs) == 0:
            break
        xgrid.append(xs)
        qgrid.append(qs)
        fgrid.append(fs)
        nx = len(xgrid[s])
        nq = len(qgrid[s])
        table.add_row(f"{s}",
                      f"{len(xgrid[s])} {len(qgrid[s])} {len(fgrid[s])}")
        for ix in range(0, nx):
            for iq in range(0, nq):
                w.readline().split()
        w.readline()
        s += 1
    w.close()
    console.print(table)

    # Reading XPDF
    console.print("\n• Extract grid information from compressed set:",
                  style="bold blue")
    pdf = lhapdf.mkPDFs(pdfset_name)
    with trange(len(cindex)) as iter_index:
        for irep in iter_index:
            iter_index.set_description(f"Reading Replica {irep}")
            xpdf.append([])
            for ss in range(s):
                xpdf[irep].append([])
                for ix in range(len(xgrid[ss])):
                    xpdf[irep][ss].append([])
                    for iq in range(len(qgrid[ss])):
                        xpdf[irep][ss][ix].append([])
                        for ifl in range(len(fgrid[ss])):
                            xfq_result = pdf[cindex[irep]].xfxQ(
                                fgrid[ss][ifl], xgrid[ss][ix], qgrid[ss][iq])
                            if math.isnan(xfq_result): xfq_result = 0
                            xpdf[irep][ss][ix][iq].append(xfq_result)

    # Construct commpressed central PDF
    console.print("\n• Computing central replicas.", style="bold blue")
    w = open(dst_str + "_0000.dat", "w")
    w.write("PdfType: central\n")
    w.write("Format: lhagrid1\n---\n")

    for ss in range(s):
        w.write(textxs[ss])
        w.write(textqs[ss])
        w.write(textfs[ss])
        for ix in range(len(xgrid[ss])):
            for iq in range(len(qgrid[ss])):
                w.write(" ")
                for ifl in range(len(fgrid[ss])):
                    sum = 0
                    for irep in range(len(cindex)):
                        sum += xpdf[irep][ss][ix][iq][ifl]
                    sum /= nbcomp
                    print("%14.7E" % sum, end=' ', file=w)
                w.write("\n")
        w.write("---\n")
    w.close()
Exemple #20
0
def lhapdf_xfs(pdf_name, xs, flavors, Q2):
    pdf_information = lhapdf.getPDFSet(pdf_name)
    n_xs = len(xs)
    Q = np.sqrt(Q2)

    if (pdf_information.errorType == 'hessian') or (pdf_information.errorType
                                                    == 'symmhessian'):
        ## 'lhapdf.getPDFSet("ABMP16_3_nlo").errorType' is 'symmhessian'
        pdf_0 = lhapdf.mkPDF(pdf_name, 0)
        xfs = {}
        for flavor in flavors:
            xfs[flavor] = {
                'center': np.zeros(n_xs),
                'difference': np.zeros(n_xs)
            }
        for i in range(1, ((pdf_information.size - 1) / 2) + 1):
            pdf_plus = lhapdf.mkPDF(pdf_name, 2 * i)
            pdf_minus = lhapdf.mkPDF(pdf_name, 2 * i - 1)
            for j in range(n_xs):
                for flavor in flavors:
                    if flavor == 'uv':
                        xfs[flavor]['center'][j] = pdf_0.xfxQ(
                            2, xs[j], Q) - pdf_0.xfxQ(-2, xs[j], Q)
                        xfs[flavor]['difference'][j] += (
                            pdf_plus.xfxQ(2, xs[j], Q) -
                            pdf_plus.xfxQ(-2, xs[j], Q) -
                            (pdf_minus.xfxQ(2, xs[j], Q) -
                             pdf_minus.xfxQ(-2, xs[j], Q)))**2.0
                    elif flavor == 'dv':
                        xfs[flavor]['center'][j] = pdf_0.xfxQ(
                            1, xs[j], Q) - pdf_0.xfxQ(-1, xs[j], Q)
                        xfs[flavor]['difference'][j] += (
                            pdf_plus.xfxQ(1, xs[j], Q) -
                            pdf_plus.xfxQ(-1, xs[j], Q) -
                            (pdf_minus.xfxQ(1, xs[j], Q) -
                             pdf_minus.xfxQ(-1, xs[j], Q)))**2.0
                    elif flavor == 'u':
                        xfs[flavor]['center'][j] = pdf_0.xfxQ(2, xs[j], Q)
                        xfs[flavor]['difference'][j] += (
                            pdf_plus.xfxQ(2, xs[j], Q) -
                            pdf_minus.xfxQ(2, xs[j], Q))**2.0
                    elif flavor == 'd':
                        xfs[flavor]['center'][j] = pdf_0.xfxQ(1, xs[j], Q)
                        xfs[flavor]['difference'][j] += (
                            pdf_plus.xfxQ(1, xs[j], Q) -
                            pdf_minus.xfxQ(1, xs[j], Q))**2.0
                    elif flavor == 'd/u':
                        xfs[flavor]['center'][j] = pdf_0.xfxQ(
                            1, xs[j], Q) / pdf_0.xfxQ(2, xs[j], Q)
                        xfs[flavor]['difference'][j] += (
                            (pdf_plus.xfxQ(1, xs[j], Q) -
                             pdf_minus.xfxQ(1, xs[j], Q)) /
                            pdf_0.xfxQ(2, xs[j], Q))**2.0
                    elif flavor == 'db+ub':
                        xfs[flavor]['center'][j] = pdf_0.xfxQ(
                            -1, xs[j], Q) + pdf_0.xfxQ(-2, xs[j], Q)
                        xfs[flavor]['difference'][j] += (
                            pdf_plus.xfxQ(-1, xs[j], Q) +
                            pdf_plus.xfxQ(-2, xs[j], Q) -
                            (pdf_minus.xfxQ(-1, xs[j], Q) +
                             pdf_minus.xfxQ(-2, xs[j], Q)))**2.0
                    elif flavor == 'db-ub':
                        xfs[flavor]['center'][j] = pdf_0.xfxQ(
                            -1, xs[j], Q) - pdf_0.xfxQ(-2, xs[j], Q)
                        xfs[flavor]['difference'][j] += (
                            pdf_plus.xfxQ(-1, xs[j], Q) -
                            pdf_plus.xfxQ(-2, xs[j], Q) -
                            (pdf_minus.xfxQ(-1, xs[j], Q) -
                             pdf_minus.xfxQ(-2, xs[j], Q)))**2.0
                    elif flavor == 's+sb':
                        xfs[flavor]['center'][j] = pdf_0.xfxQ(
                            3, xs[j], Q) + pdf_0.xfxQ(-3, xs[j], Q)
                        xfs[flavor]['difference'][j] += (
                            pdf_plus.xfxQ(3, xs[j], Q) +
                            pdf_plus.xfxQ(-3, xs[j], Q) -
                            (pdf_minus.xfxQ(3, xs[j], Q) +
                             pdf_minus.xfxQ(-3, xs[j], Q)))**2.0
                    elif flavor == 'g':
                        xfs[flavor]['center'][j] = pdf_0.xfxQ(21, xs[j], Q)
                        xfs[flavor]['difference'][j] += (
                            pdf_plus.xfxQ(21, xs[j], Q) -
                            pdf_minus.xfxQ(21, xs[j], Q))**2.0
                    elif flavor == 'rs':
                        if pdf_name == 'CJ15nlo':
                            ## R_s is set to be 0.4 in CJ15
                            xfs[flavor]['center'][j] = 0.4
                            xfs[flavor]['difference'][j] += 0.0
                        else:
                            xfs[flavor]['center'][j] = (pdf_0.xfxQ(
                                3, xs[j], Q) + pdf_0.xfxQ(-3, xs[j], Q)) / (
                                    pdf_0.xfxQ(-1, xs[j], Q) +
                                    pdf_0.xfxQ(-2, xs[j], Q))
                            xfs[flavor]['difference'][j] += ((pdf_plus.xfxQ(3, xs[j], Q) + pdf_plus.xfxQ(-3, xs[j], Q) - (pdf_minus.xfxQ(3, xs[j], Q) + pdf_minus.xfxQ(-3, xs[j], Q))) / \
                                (pdf_0.xfxQ(-1, xs[j], Q) + pdf_0.xfxQ(-2, xs[j], Q))) ** 2.0

        for flavor in flavors:
            xfs[flavor]['difference'] = 0.5 * np.sqrt(
                xfs[flavor]['difference'])

    elif pdf_information.errorType == 'replicas':
        pdf_all = lhapdf.mkPDFs(pdf_name)

        xfs = {}
        xfs_temp = {}
        for flavor in flavors:
            xfs[flavor] = {'center': [], 'difference': []}
        for i in range(n_xs):
            for flavor in flavors:
                xfs_temp[flavor] = []
            for pdf_individual in pdf_all:
                for flavor in flavors:
                    if flavor == 'uv':
                        xfs_temp[flavor].append(
                            pdf_individual.xfxQ(2, xs[i], Q) -
                            pdf_individual.xfxQ(-2, xs[i], Q))
                    elif flavor == 'dv':
                        xfs_temp[flavor].append(
                            pdf_individual.xfxQ(1, xs[i], Q) -
                            pdf_individual.xfxQ(-1, xs[i], Q))
                    elif flavor == 'u':
                        xfs_temp[flavor].append(
                            pdf_individual.xfxQ(2, xs[i], Q))
                    elif flavor == 'd':
                        xfs_temp[flavor].append(
                            pdf_individual.xfxQ(1, xs[i], Q))
                    elif flavor == 'd/u':
                        xfs_temp[flavor].append(
                            pdf_individual.xfxQ(1, xs[i], Q) /
                            pdf_individual.xfxQ(2, xs[i], Q))
                    elif flavor == 'db+ub':
                        xfs_temp[flavor].append(
                            pdf_individual.xfxQ(-1, xs[i], Q) +
                            pdf_individual.xfxQ(-2, xs[i], Q))
                    elif flavor == 'db-ub':
                        xfs_temp[flavor].append(
                            pdf_individual.xfxQ(-1, xs[i], Q) -
                            pdf_individual.xfxQ(-2, xs[i], Q))
                    elif flavor == 's+sb':
                        xfs_temp[flavor].append(
                            pdf_individual.xfxQ(3, xs[i], Q) +
                            pdf_individual.xfxQ(-3, xs[i], Q))
                    elif flavor == 'g':
                        xfs_temp[flavor].append(
                            pdf_individual.xfxQ(21, xs[i], Q))
                    elif flavor == 'rs':
                        xfs_temp[flavor].append(
                            (pdf_individual.xfxQ(3, xs[i], Q) +
                             pdf_individual.xfxQ(-3, xs[i], Q)) /
                            (pdf_individual.xfxQ(-1, xs[i], Q) +
                             pdf_individual.xfxQ(-2, xs[i], Q)))

            for flavor in flavors:
                xfs[flavor]['center'].append(np.mean(xfs_temp[flavor], axis=0))
                xfs[flavor]['difference'].append(
                    np.std(xfs_temp[flavor], axis=0))

        for flavor in flavors:
            xfs[flavor]['center'] = np.array(xfs[flavor]['center'])
            xfs[flavor]['difference'] = np.array(xfs[flavor]['difference'])

    return xfs
Exemple #21
0
##--get generator information
id1 = events["Events"].array("pdg1")
x1 = events["Events"].array("x1")
id2 = events["Events"].array("pdg2")
x2 = events["Events"].array("x2")
xpdf1 = events["Events"].array("xpdf1")
xpdf2 = events["Events"].array("xpdf2")
Q = events["Events"].array("scalePDF")

##--set LHAPDF path
lhapdf.pathsPrepend("/home/taebh/2021_Research/share/LHAPDF")

numEvents = len(id1)
nnpdf = lhapdf.mkPDF("NNPDF31_nnlo_as_0118_mc_hessian_pdfas", 0)
PDFsets = lhapdf.mkPDFs("CT18NNLO")
numPDF = len(PDFsets)
reweight = np.empty([numPDF])

for j in range(numPDF):
    sumw = 0
    ct18 = PDFsets[j]
    for i in range(numEvents):
        sumw += (ct18.xfxQ(id1[i], x1[i], Q[i]) * ct18.xfxQ(
            id2[i], x2[i], Q[i])) / (nnpdf.xfxQ(id1[i], x1[i], Q[i]) *
                                     nnpdf.xfxQ(id2[i], x2[i], Q[i]))
    reweight[j] = sumw / numEvents

a = np.square(reweight[1:] - reweight[0])

PDFuncert = math.sqrt(a.sum())
Exemple #22
0
#! /usr/bin/env python

import sys
PDF = "CT14nnlo"
PID = 0
if len(sys.argv) > 1:
    PDF = sys.argv[1]
if len(sys.argv) > 2:
    PID = int(sys.argv[2])

import lhapdf
pdfs = lhapdf.mkPDFs(PDF)

import pylab as pl
xs = pl.append(pl.exp(pl.linspace(pl.log(1e-5), pl.log(0.1))),
               pl.linspace(0.1, 1.0))
#print xs

p0 = pl.array([pdfs[0].xfxQ(PID, x, 100) for x in xs])
p1 = pl.array([pdfs[1].xfxQ(PID, x, 100) for x in xs])
r10 = p1 / p0
print r10
# p2 = array([pdfs[2].xfxQ(PID,x,100) for x in xs])
# r20 = p2/p0
# plot(xs, r10, label="EV1/Nom")
# plot(xs, r20, label="EV2/Nom")

for i in range(1, len(pdfs)):
    pl.plot(xs,
            pl.array([pdfs[i].xfxQ(PID, x, 100) for x in xs]) / p0,
            label="EV{:d}/Nom".format(i))
Exemple #23
0
import sys,os
sys.path.insert(1,'../../')
import numpy as np
import pylab as py
import tools
from tools import tex,plot_band,fill_between
import lhapdf
import matplotlib.gridspec as gridspec
from  matplotlib import rc
rc('font',**{'family':'sans-serif','sans-serif':['Helvetica']})
rc('text',usetex=True)
from master import FITPACK


# initialize PDF instances
HERA15=lhapdf.mkPDFs('HERAPDF15LO_EIG')
MMHT14=lhapdf.mkPDFs('MMHT2014lo68cl')
MSTW08=lhapdf.mkPDFs('MSTW2008lo68cl')

# dictionary for pdg flav idx
pdgmap= {'u':2,'d':1,'ub':-2,'db': -1,'s':3,'g':21}

# simple function to access lhad pdfs
get_pdfs = lambda flav,x,Q2,iset,grp: grp[iset].xfxQ2(pdgmap[flav],x,Q2)

# load CJ15 from fitpack data 
fname='data/CDBONN_KP_1_LO_6.pdf'
CJ15=FITPACK().get_PDFs(fname)

# dictionary for labels
labmap = {}
Exemple #24
0
def plot2(Q2=2.0):

    hess = load('data/hess_glue_%.2f.po' % Q2)
    mc = load('data/mcglue_%.2f.po' % Q2)

    ncols, nrows = 1, 1
    py.figure(figsize=(ncols * 5, nrows * 4))
    ax = py.subplot(nrows, ncols, 1)

    X = hess['X']

    ct14 = lhapdf.mkPDFs('CT14nlo')
    denom = np.array([ct14[0].xfxQ2(21, x, Q2) for x in X])

    #--plot current errorbands (hess version)
    ax.fill_between(X, (hess[0] - hess['err']) / denom,
                    (hess[0] + hess['err']) / denom,
                    color='Y',
                    alpha=0.5,
                    label=r'$\rm EPPS16$')

    #--plot current errorbands (mc version)
    #g  = np.mean(mc,axis=0)
    #dg = np.std(mc,axis=0)
    #ax.fill_between(X,(g-dg)/denom
    #                 ,(g+dg)/denom
    #                 ,facecolor='none',hatch='//',edgecolor='k')

    #--plot mc reweighted errorbands
    weights = load('data/weights.po')
    g = np.sum([weights[i] * mc[i] for i in range(weights.size)], axis=0)
    dg = np.sum([weights[i] * (mc[i] - g)**2 for i in range(weights.size)],
                axis=0)**0.5

    ax.fill_between(X, (g - dg) / denom, (g + dg) / denom,
                    facecolor='r',
                    alpha=0.8,
                    label=r'$\rm EPPS16+EIC$')

    ##--plot eic kinematics
    #t=pd.read_excel('expdata/eic.xlsx')
    #xmin=np.amin(t.X)
    #xmax=np.amax(t.X)
    #ax.plot([xmin,xmax],[0.25,0.25],'g-',lw=5)
    #ax.text(0.3,0.15,r'$\rm EIC~kinematics$',size=10,transform=ax.transAxes)

    #--grids prop
    ax.axhline(1, color='k', ls=':')
    ax.set_ylim(0, 2)
    ax.set_xlim(1e-2, 0.9)
    ax.semilogx()
    ax.set_yticks([0, 0.5, 1, 1.5, 2])
    ax.set_xticks([0.01, 0.1])
    ax.set_xticklabels([r'$0.01$', r'$0.1$'])

    ax.text(0.05,
            0.9,
            r'$\mu^2=2{~\rm GeV^2}$',
            size=15,
            transform=ax.transAxes)
    ax.text(0.05, 0.8, r'$A=56$', size=15, transform=ax.transAxes)

    ax.legend(loc=1, framealpha=1)

    #--axis labels
    ax.set_ylabel(r'$R_g$', size=20)

    ax.set_xlabel(r'$x$', size=20)
    ax.xaxis.set_label_coords(0.95, -0.03)

    py.tight_layout()
    checkdir('gallery')
    #py.savefig('gallery/Rg.pdf')
    py.savefig('gallery/Rg.png')
    py.close()