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
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')
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