Пример #1
0
def hessian_from_lincomb(pdf, V, set_name=None, folder=None, db=None, extra_fields=None):
    """Construct a new LHAPDF grid from a linear combination of members"""

    # preparing output folder
    neig = V.shape[1]

    base = applwrap.getlhapdfpath()[-1] + "/" + str(pdf) + "/" + str(pdf)
    if set_name is None:
        set_name = str(pdf) + "_hessian_" + str(neig)
    if folder is None:
        folder = ""
    set_root = os.path.join(folder, set_name)
    if not os.path.exists(set_root):
        os.makedirs(os.path.join(set_root))

    # copy replica 0
    shutil.copy(base + "_0000.dat", set_root + "/" + set_name + "_0000.dat")

    with open(base + ".info", "r") as inn, open(set_root + "/" + set_name + ".info", "w") as out:

        for l in inn.readlines():
            if l.find("SetDesc:") >= 0:
                out.write('SetDesc: "Hessian ' + str(pdf) + '_hessian"\n')
            elif l.find("NumMembers:") >= 0:
                out.write("NumMembers: " + str(neig + 1) + "\n")
            elif l.find("ErrorType: replicas") >= 0:
                out.write("ErrorType: symmhessian\n")
            else:
                out.write(l)
        if extra_fields is not None:
            yaml.dump(extra_fields, out, default_flow_style=False)

    headers, grids = load_all_replicas(pdf, db=db)
    hess_name = set_root + "/" + set_name
    result = (big_matrix(grids).dot(V)).add(grids[0], axis=0)
    hess_header = b"PdfType: error\nFormat: lhagrid1\n"
    for column in result.columns:
        write_replica(column + 1, hess_name, hess_header, result[column])

    return set_root
Пример #2
0
def get_lha_paths():
    return applwrap.getlhapdfpath()