示例#1
0
def absolute_rmsd(fit, energies, angles):  # expect energies and angles as dicts
    deviations = []
    for x in angles:
        theta = angles[x]
        deviations.append((energies[x] - energy_at_x(fit, theta))**2)
    rmsd = np.sqrt(np.mean(deviations))
    return rmsd
示例#2
0
def determine_fitness(root, molecules, basis_sets, loaded_data):
    reference_basis = '631Gd'
    for m in molecules:
        if m not in loaded_data:
            continue
        formatting = dict(root=root, mol=m, ref=reference_basis)
        with open('{root}/{ref}/{mol}/phased_fitted_curve.txt'.format(**formatting), 'r') as fh:
            reference_data = yaml.load(fh)
        # absolute is the data as referenced between fit and actual QM results
        data_absolute = []
        # relative is the data referenced between fit and the reference_basis fit
        data_relative = []
        for d in basis_sets:
            if d not in loaded_data[m]:
                continue
            formatting['basis'] = d
            energies, angles = loaded_data[m][d]
            with open('{root}/{basis}/{mol}/phased_fitted_curve.txt'.format(**formatting), 'r') as fh:
                fit = yaml.load(fh)
            data_absolute.append(dict(rmsd = absolute_rmsd(fit, energies, angles),
                            basis = d))
            data_relative.append(dict(rmsd = relative_rmsd(fit, reference_data),
                            basis = d))
            data = [{'x':angles,
                     'y':energies,
                     'marker':'r.-'},]
            fit_energies = {}
            for z in angles:
                fit_energies[z] = energy_at_x(fit, angles[z])
            data.append({'x':angles,'y':fit_energies,'marker':'b.-'})
            save_path = '{root}/Figures/{mol}/{basis}_with_fit.png'.format(**formatting)
            plot_scatters(data,save_path, show_legend=False, xlim=(0,360))
            
        with open('{root}/Figures/{mol}/rmsd_data.txt'.format(**formatting), 'w') as fh:
            fh.write('Absolute RMSDs from QM calculations\n')
            for d in data_absolute:
                fh.write('{basis:>12} : {rmsd:.2f}\n'.format(**d))
            fh.write('\n')
            fh.write('RMSDs relative to 6-31G(d) basis set fit\n')
            for d in data_relative:
                fh.write('{basis:>12} : {rmsd:.2f}\n'.format(**d))
            fh.write('___________________________________\n')
示例#3
0
def relative_rmsd(fit1, fit2):
    deviations = []
    for theta in range(0,360):
        deviations.append((energy_at_x(fit1, theta) - energy_at_x(fit2, theta))**2)
    rmsd = np.sqrt(np.mean(deviations))
    return rmsd