Example #1
0
def parmfit(datfname, idxfname, param):
    fnames, enes, weights = tools.readdat(datfname)
    idxs, folds = readidx(idxfname)
    params = getparams(idxs, param)
    A = []
    B = []
    for fname, E_qm, weight in zip(fnames, enes, weights):
        mol = read.readxyz(file(fname))
        tors = analyze.gettorsbytype(mol, idxs)
        newmol, E_mm = tinker.minimize_file(fname, param)
        E_tor = getetor(newmol, tors, params)
        E_fit = E_qm - E_mm + E_tor
        weight = math.sqrt(weight)
        B.append(E_fit * weight)
        A.append([x*weight for x in getA(newmol, idxs, folds, tors)])
    A = numpy.array(A)
    B = numpy.array(B)

    result = numpy.linalg.lstsq(A, B)
    newparam = list(result[0][:-1])
    errors = numpy.dot(A, result[0]) - B
    errors = [error/math.sqrt(weight) for error, weight in zip(errors, weights)]
    error = extra_tools.weightedsd(errors, weights)
    printprm(newparam, idxs, folds)
    print error
Example #2
0
def printefit(datfname, idxfname, param):
    '''Only print E_fit'''
    import csv
    fnames, enes, weights = tools.readdat(datfname)
    idxs, folds = parmfit.readidx(idxfname)
    params = parmfit.getparams(idxs, param)
    writer = csv.writer(sys.stdout)
    writer.writerow(['Filename', 'weight', 'E_qm', 'E_mm', 'E_tor', 'E_fit'])
    for fname, E_qm, weight in zip(fnames, enes, weights):
        mol = read.readxyz(file(fname))
        tors = analyze.gettorsbytype(mol, idxs)
        newmol, E_mm = tinker.minimize_file(fname, param)
        E_tor = parmfit.getetor(newmol, tors, params)
        E_fit = E_qm - E_mm + E_tor
        writer.writerow([fname, weight, E_qm, E_mm, E_tor, E_fit])