def expected_labels(kissel_dir): result = [] if (kissel_dir is None): for wk in xray_scattering.wk1995_iterator(): result.append(wk.label()) else: for atomic_number in xrange(1,100): result.append(tiny_pse.table(atomic_number).symbol()) return result
def expected_labels(kissel_dir): result = [] if (kissel_dir is None): for wk in xray_scattering.wk1995_iterator(): result.append(wk.label()) else: for atomic_number in xrange(1, 100): result.append(tiny_pse.table(atomic_number).symbol()) return result
def exercise_wk1995(): e = xray_scattering.wk1995("c1") assert e.table() == "WK1995" assert e.label() == "C" g = e.fetch() assert approx_equal(g.array_of_a(), (2.657506, 1.078079, 1.490909, -4.241070, 0.713791)) assert approx_equal(g.array_of_b(), (14.780758, 0.776775, 42.086842, -0.000294, 0.239535)) assert approx_equal(g.c(), 4.297983) assert approx_equal(g.at_stol_sq(0), 5.99719834328) assert approx_equal(g.at_stol_sq(1. / 9), 2.26895371584) assert approx_equal(g.at_stol(1. / 9), 4.93735084739) assert approx_equal(g.at_d_star_sq(1. / 9), 4.04679561237) e = xray_scattering.wk1995("yb2+", True) assert e.label() == "Yb2+" g = e.fetch() assert approx_equal(g.array_of_a()[0], 28.443794) assert approx_equal(g.array_of_b()[4], 0.001463) assert approx_equal(g.c(), -23.214935) e = xray_scattering.wk1995(" yB3+") assert e.label() == "Yb3+" g = e.fetch() assert approx_equal(g.array_of_a()[0], 28.191629) n = 0 for e in xray_scattering.wk1995_iterator(): n += 1 if (n == 213): assert e.label() == "Pu6+" else: assert e.label() != "Pu6+" d = xray_scattering.wk1995(e.label(), True) assert d.label() == e.label() assert n == 213 i = xray_scattering.wk1995_iterator() j = iter(i) assert i is j
def exercise_wk1995(): e = xray_scattering.wk1995("c1") assert e.table() == "WK1995" assert e.label() == "C" g = e.fetch() assert approx_equal(g.array_of_a(), (2.657506,1.078079,1.490909,-4.241070,0.713791)) assert approx_equal(g.array_of_b(), (14.780758,0.776775,42.086842,-0.000294,0.239535)) assert approx_equal(g.c(), 4.297983) assert approx_equal(g.at_stol_sq(0), 5.99719834328) assert approx_equal(g.at_stol_sq(1./9), 2.26895371584) assert approx_equal(g.at_stol(1./9), 4.93735084739) assert approx_equal(g.at_d_star_sq(1./9), 4.04679561237) e = xray_scattering.wk1995("yb2+", True) assert e.label() == "Yb2+" g = e.fetch() assert approx_equal(g.array_of_a()[0], 28.443794) assert approx_equal(g.array_of_b()[4], 0.001463) assert approx_equal(g.c(), -23.214935) e = xray_scattering.wk1995(" yB3+") assert e.label() == "Yb3+" g = e.fetch() assert approx_equal(g.array_of_a()[0], 28.191629) n = 0 for e in xray_scattering.wk1995_iterator(): n += 1 if (n == 213): assert e.label() == "Pu6+" else: assert e.label() != "Pu6+" d = xray_scattering.wk1995(e.label(), True) assert d.label() == e.label() assert n == 213 i = xray_scattering.wk1995_iterator() j = iter(i) assert i is j
def ensure_common_symbols(): lbl_it = [] for e in xray_scattering.it1992_iterator(): lbl_it.append(e.label()) lbl_it.sort() lbl_wk = [] for e in xray_scattering.wk1995_iterator(): lbl_wk.append(e.label()) lbl_wk.sort() assert lbl_wk == lbl_it lbl_ng = [] for i_entry in xrange(xray_scattering.n_gaussian_table_size()): lbl_ng.append(xray_scattering.n_gaussian_table_entry(i_entry, 6).label()) lbl_ng.sort() assert lbl_ng == lbl_it # for label in xray_scattering.standard_labels_list(): it = xray_scattering.it1992(label, True).fetch() wk = xray_scattering.wk1995(label, True).fetch() ng = xray_scattering.n_gaussian_table_entry(label, 0, 0).gaussian() assert approx_equal(wk.at_stol(0)/it.at_stol(0), 1, 5.e-3)
def ensure_common_symbols(): lbl_it = [] for e in xray_scattering.it1992_iterator(): lbl_it.append(e.label()) lbl_it.sort() lbl_wk = [] for e in xray_scattering.wk1995_iterator(): lbl_wk.append(e.label()) lbl_wk.sort() assert lbl_wk == lbl_it lbl_ng = [] for i_entry in range(xray_scattering.n_gaussian_table_size()): lbl_ng.append( xray_scattering.n_gaussian_table_entry(i_entry, 6).label()) lbl_ng.sort() assert lbl_ng == lbl_it # for label in xray_scattering.standard_labels_list(): it = xray_scattering.it1992(label, True).fetch() wk = xray_scattering.wk1995(label, True).fetch() ng = xray_scattering.n_gaussian_table_entry(label, 0, 0).gaussian() assert approx_equal(wk.at_stol(0) / it.at_stol(0), 1, 5.e-3)
def run(gaussian_fit_pickle_file_names): localtime = time.localtime() fits = read_pickled_fits(gaussian_fit_pickle_file_names) f = sys.stdout if (gaussian_fit_pickle_file_names[0].find("sds") >= 0): # retro-fitted write_fit_group(f, "h_sds", fits.all["SDS"]) return print >> f, "// This is an automatically generated file. DO NOT EDIT!" print >> f print >> f, "// Time %04d/%02d/%02d %02d:%02d:%02d" % localtime[:6] print >> f, "// Time zone:", time.tzname print >> f write_module_info(f, cctbx.eltbx.gaussian_fit) write_module_info(f, scitbx.math.gaussian_fit) print >> f, "// Parameters:" for k, v in fits.parameters.items(): print >> f, "// %s:" % k, v print >> f present = [] missing = [] for wk in xray_scattering.wk1995_iterator(): try: fit_group = fits.all[wk.label()] except Exception: missing.append(wk.label()) else: present.append(wk.label()) if (len(missing) > 0): print >> f, "// Warning: Missing scattering labels:" for label in missing: print >> f, "// ", label print >> f write_header(f) for label in present: write_fit_group(f, label, fits.all[label]) write_labels(f, present) write_table(f, present) write_tail(f, localtime, len(present))
def run(gaussian_fit_pickle_file_names): localtime = time.localtime() fits = read_pickled_fits(gaussian_fit_pickle_file_names) f = sys.stdout if (gaussian_fit_pickle_file_names[0].find("sds") >= 0): # retro-fitted write_fit_group(f, "h_sds", fits.all["SDS"]) return print >> f, "// This is an automatically generated file. DO NOT EDIT!" print >> f print >> f, "// Time %04d/%02d/%02d %02d:%02d:%02d" % localtime[:6] print >> f, "// Time zone:", time.tzname print >> f write_module_info(f, cctbx.eltbx.gaussian_fit) write_module_info(f, scitbx.math.gaussian_fit) print >> f, "// Parameters:" for k,v in fits.parameters.items(): print >> f, "// %s:" % k, v print >> f present = [] missing = [] for wk in xray_scattering.wk1995_iterator(): try: fit_group = fits.all[wk.label()] except Exception: missing.append(wk.label()) else: present.append(wk.label()) if (len(missing) > 0): print >> f, "// Warning: Missing scattering labels:" for label in missing: print >> f, "// ", label print >> f write_header(f) for label in present: write_fit_group(f, label, fits.all[label]) write_labels(f, present) write_table(f, present) write_tail(f, localtime, len(present))
def run(file_name, table_of_gaussians, cutoff, low_resolution_only=False, high_resolution_only=False, significant_errors_only=False, plots_dir=None, quiet=0, verbose=0): assert not (low_resolution_only and high_resolution_only) tab = itvc_section61_io.read_table6111(file_name) for wk in xray_scattering.wk1995_iterator(): label = wk.label() if (not label in tab.entries): print("Warning: missing scatterer:", label) stols = cctbx.eltbx.gaussian_fit.international_tables_stols sel = stols <= cutoff + 1.e-6 stols = stols.select(sel) if (low_resolution_only): sel = stols <= 2 stols = stols.select(sel) assert stols.size() == 56 elif (high_resolution_only): sel = stols > 2 stols = stols.select(sel) assert stols.size() == 6 range_62 = flex.size_t(range(62)) labels = flex.std_string() errors = [] correlations = flex.double() max_errors = flex.double() cmp_plots = flex.std_string() for element in tab.elements: entry = tab.entries[element] wk = table_of_gaussians(element, 1) assert entry.table_y.size() == 62 if (not flex.sort_permutation(data=entry.table_y, reverse=True).all_eq(range_62)): print("Increasing: %s (%d)" % (element, entry.atomic_number)) prev_y = entry.table_y[0] for y in entry.table_y: if (y > prev_y): print("higher:", y, "before:", prev_y) prev_y = y raise RuntimeError("Data values are not increasing.") if (low_resolution_only): gaussian_fit = scitbx.math.gaussian.fit(stols, entry.table_y[:-6], entry.table_sigmas[:-6], wk.fetch()) elif (high_resolution_only): gaussian_fit = scitbx.math.gaussian.fit(stols, entry.table_y[-6:], entry.table_sigmas[-6:], wk.fetch()) elif (entry.element != entry.atomic_symbol and entry.table_y[-6:].all_eq(0)): atom_entry = tab.entries[entry.atomic_symbol] patched_table_y = entry.table_y[:-6] patched_table_y.append(atom_entry.table_y[-6:]) patched_table_sigmas = entry.table_sigmas[:-6] patched_table_sigmas.append(atom_entry.table_sigmas[-6:]) gaussian_fit = scitbx.math.gaussian.fit(stols, patched_table_y, patched_table_sigmas, wk.fetch()) else: gaussian_fit = scitbx.math.gaussian.fit( stols, entry.table_y[:stols.size()], entry.table_sigmas[:stols.size()], wk.fetch()) labels.append(element) errors.append(gaussian_fit.significant_relative_errors()) max_errors.append(flex.max(errors[-1])) correlations.append( flex.linear_correlation( gaussian_fit.table_y(), gaussian_fit.fitted_values()).coefficient()) if (plots_dir is not None): if (not os.path.isdir(plots_dir)): print("No plots because the directory %s does not exist." % plots_dir) plots_dir = None else: cmp_plots.append( cctbx.eltbx.gaussian_fit.write_plots( plots_dir=plots_dir, label=element, gaussian_fit=gaussian_fit)) perm = flex.sort_permutation(data=max_errors, reverse=True) labels = labels.select(perm) errors = flex.select(errors, perm) correlations = correlations.select(perm) if (plots_dir is None): cmp_plots = [None] * len(labels) else: cmp_plots = cmp_plots.select(perm) for l, e, cc, p in zip(labels, errors, correlations, cmp_plots): entry = tab.entries[l] y = entry.table_y perm = flex.sort_permutation(data=e, reverse=True)[:3] high = [] for i in perm: if (significant_errors_only and e[i] < 0.01): break s = stols[i] a = "" if (not quiet and s < 2.1): a = "@%.3f" % y[i] high.append("%7.4f %4.2f%s" % (e[i], s, a)) if (high_resolution_only): break if (verbose or len(high) > 0): print("Element %-5s(%2d) cc=%.4f:" % (l, entry.atomic_number, cc), ", ".join(high)) if (verbose and p is not None): print(p) sys.stdout.write(open(p).read()) print()
def run( file_name, table_of_gaussians, cutoff, low_resolution_only=False, high_resolution_only=False, significant_errors_only=False, plots_dir=None, quiet=0, verbose=0, ): assert not (low_resolution_only and high_resolution_only) tab = itvc_section61_io.read_table6111(file_name) for wk in xray_scattering.wk1995_iterator(): label = wk.label() if not label in tab.entries: print "Warning: missing scatterer:", label stols = cctbx.eltbx.gaussian_fit.international_tables_stols sel = stols <= cutoff + 1.0e-6 stols = stols.select(sel) if low_resolution_only: sel = stols <= 2 stols = stols.select(sel) assert stols.size() == 56 elif high_resolution_only: sel = stols > 2 stols = stols.select(sel) assert stols.size() == 6 range_62 = flex.size_t(xrange(62)) labels = flex.std_string() errors = [] correlations = flex.double() max_errors = flex.double() cmp_plots = flex.std_string() for element in tab.elements: entry = tab.entries[element] wk = table_of_gaussians(element, 1) assert entry.table_y.size() == 62 if not flex.sort_permutation(data=entry.table_y, reverse=True).all_eq(range_62): print "Increasing: %s (%d)" % (element, entry.atomic_number) prev_y = entry.table_y[0] for y in entry.table_y: if y > prev_y: print "higher:", y, "before:", prev_y prev_y = y raise RuntimeError("Data values are not increasing.") if low_resolution_only: gaussian_fit = scitbx.math.gaussian.fit(stols, entry.table_y[:-6], entry.table_sigmas[:-6], wk.fetch()) elif high_resolution_only: gaussian_fit = scitbx.math.gaussian.fit(stols, entry.table_y[-6:], entry.table_sigmas[-6:], wk.fetch()) elif entry.element != entry.atomic_symbol and entry.table_y[-6:].all_eq(0): atom_entry = tab.entries[entry.atomic_symbol] patched_table_y = entry.table_y[:-6] patched_table_y.append(atom_entry.table_y[-6:]) patched_table_sigmas = entry.table_sigmas[:-6] patched_table_sigmas.append(atom_entry.table_sigmas[-6:]) gaussian_fit = scitbx.math.gaussian.fit(stols, patched_table_y, patched_table_sigmas, wk.fetch()) else: gaussian_fit = scitbx.math.gaussian.fit( stols, entry.table_y[: stols.size()], entry.table_sigmas[: stols.size()], wk.fetch() ) labels.append(element) errors.append(gaussian_fit.significant_relative_errors()) max_errors.append(flex.max(errors[-1])) correlations.append(flex.linear_correlation(gaussian_fit.table_y(), gaussian_fit.fitted_values()).coefficient()) if plots_dir is not None: if not os.path.isdir(plots_dir): print "No plots because the directory %s does not exist." % plots_dir plots_dir = None else: cmp_plots.append( cctbx.eltbx.gaussian_fit.write_plots(plots_dir=plots_dir, label=element, gaussian_fit=gaussian_fit) ) perm = flex.sort_permutation(data=max_errors, reverse=True) labels = labels.select(perm) errors = flex.select(errors, perm) correlations = correlations.select(perm) if plots_dir is None: cmp_plots = [None] * len(labels) else: cmp_plots = cmp_plots.select(perm) for l, e, cc, p in zip(labels, errors, correlations, cmp_plots): entry = tab.entries[l] y = entry.table_y perm = flex.sort_permutation(data=e, reverse=True)[:3] high = [] for i in perm: if significant_errors_only and e[i] < 0.01: break s = stols[i] a = "" if not quiet and s < 2.1: a = "@%.3f" % y[i] high.append("%7.4f %4.2f%s" % (e[i], s, a)) if high_resolution_only: break if verbose or len(high) > 0: print "Element %-5s(%2d) cc=%.4f:" % (l, entry.atomic_number, cc), ", ".join(high) if verbose and p is not None: print p sys.stdout.write(open(p).read()) print