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
Esempio n. 2
0
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
Esempio n. 3
0
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)
Esempio n. 6
0
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))
Esempio n. 9
0
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()
Esempio n. 10
0
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