Пример #1
0
def incremental_fits(label, null_fit, params=None, plots_dir=None, verbose=0):
    if (params is None): params = fit_parameters()
    f0 = null_fit.table_y()[0]
    results = []
    previous_n_points = 0
    existing_gaussian = xray_scattering.gaussian([], [])
    while (existing_gaussian.n_terms() < params.max_n_terms):
        if (previous_n_points == null_fit.table_x().size()):
            print "%s: Full fit with %d terms. Search stopped." % (
                label, existing_gaussian.n_terms())
            print
            break
        n_terms = existing_gaussian.n_terms() + 1
        best_min = find_max_x_multi(
            null_fit=null_fit,
            existing_gaussian=existing_gaussian,
            target_powers=params.target_powers,
            minimize_using_sigmas=params.minimize_using_sigmas,
            n_repeats_minimization=params.n_repeats_minimization,
            shift_sqrt_b_mod_n=params.shift_sqrt_b_mod_n,
            b_min=params.b_min,
            max_max_error=params.max_max_error,
            n_start_fractions=params.n_start_fractions)
        if (best_min is None):
            print "Warning: No fit: %s n_terms=%d" % (label, n_terms)
            print
            break
        if (previous_n_points > best_min.final_gaussian_fit.table_x().size()):
            print "Warning: previous fit included more sampling points."
        previous_n_points = best_min.final_gaussian_fit.table_x().size()
        show_fit_summary("Best fit", label, best_min.final_gaussian_fit,
                         best_min.max_error)
        show_literature_fits(
            label=label,
            n_terms=n_terms,
            null_fit=null_fit,
            n_points=best_min.final_gaussian_fit.table_x().size(),
            e_other=best_min.max_error)
        best_min.final_gaussian_fit.show()
        best_min.show_minimization_parameters()
        existing_gaussian = best_min.final_gaussian_fit
        print
        show_minimize_multi_histogram()
        sys.stdout.flush()
        if (plots_dir):
            write_plots(plots_dir=plots_dir,
                        label=label + "_%d" % n_terms,
                        gaussian_fit=best_min.final_gaussian_fit)
        g = best_min.final_gaussian_fit
        results.append(
            xray_scattering.fitted_gaussian(stol=g.table_x()[-1],
                                            gaussian_sum=g))
    return results
Пример #2
0
def incremental_fits(label, null_fit, params=None, plots_dir=None, verbose=0):
  if (params is None): params = fit_parameters()
  f0 = null_fit.table_y()[0]
  results = []
  previous_n_points = 0
  existing_gaussian = xray_scattering.gaussian([],[])
  while (existing_gaussian.n_terms() < params.max_n_terms):
    if (previous_n_points == null_fit.table_x().size()):
      print "%s: Full fit with %d terms. Search stopped." % (
        label, existing_gaussian.n_terms())
      print
      break
    n_terms = existing_gaussian.n_terms() + 1
    best_min = find_max_x_multi(
      null_fit=null_fit,
      existing_gaussian=existing_gaussian,
      target_powers=params.target_powers,
      minimize_using_sigmas=params.minimize_using_sigmas,
      n_repeats_minimization=params.n_repeats_minimization,
      shift_sqrt_b_mod_n=params.shift_sqrt_b_mod_n,
      b_min=params.b_min,
      max_max_error=params.max_max_error,
      n_start_fractions=params.n_start_fractions)
    if (best_min is None):
      print "Warning: No fit: %s n_terms=%d" % (label, n_terms)
      print
      break
    if (previous_n_points > best_min.final_gaussian_fit.table_x().size()):
      print "Warning: previous fit included more sampling points."
    previous_n_points = best_min.final_gaussian_fit.table_x().size()
    show_fit_summary(
      "Best fit", label, best_min.final_gaussian_fit, best_min.max_error)
    show_literature_fits(
      label=label,
      n_terms=n_terms,
      null_fit=null_fit,
      n_points=best_min.final_gaussian_fit.table_x().size(),
      e_other=best_min.max_error)
    best_min.final_gaussian_fit.show()
    best_min.show_minimization_parameters()
    existing_gaussian = best_min.final_gaussian_fit
    print
    show_minimize_multi_histogram()
    sys.stdout.flush()
    if (plots_dir):
      write_plots(
        plots_dir=plots_dir,
        label=label+"_%d"%n_terms,
        gaussian_fit=best_min.final_gaussian_fit)
    g = best_min.final_gaussian_fit
    results.append(xray_scattering.fitted_gaussian(
      stol=g.table_x()[-1], gaussian_sum=g))
  return results
Пример #3
0
def decremental_fits(label,
                     null_fit,
                     full_fit=None,
                     params=None,
                     plots_dir=None,
                     verbose=0):
    if (params is None): params = fit_parameters()
    results = []
    last_fit = scitbx.math.gaussian.fit(null_fit.table_x(), null_fit.table_y(),
                                        null_fit.table_sigmas(), full_fit)
    while (last_fit.n_terms() > 1):
        good_min = scitbx.math.gaussian_fit.decremental_fit(
            existing_gaussian=last_fit, params=params)
        if (good_min is None):
            print "%s n_terms=%d: No successful minimization. Aborting." % (
                label, last_fit.n_terms() - 1)
            break
        show_fit_summary("Best fit", label, good_min.final_gaussian_fit,
                         good_min.max_error)
        show_literature_fits(
            label=label,
            n_terms=good_min.final_gaussian_fit.n_terms(),
            null_fit=null_fit,
            n_points=good_min.final_gaussian_fit.table_x().size(),
            e_other=good_min.max_error)
        good_min.final_gaussian_fit.show()
        good_min.show_minimization_parameters()
        last_fit = good_min.final_gaussian_fit
        print
        show_minimize_multi_histogram()
        sys.stdout.flush()
        if (plots_dir):
            write_plots(plots_dir=plots_dir,
                        label=label +
                        "_%d" % good_min.final_gaussian_fit.n_terms(),
                        gaussian_fit=good_min.final_gaussian_fit)
        g = good_min.final_gaussian_fit
        results.append(
            xray_scattering.fitted_gaussian(stol=g.table_x()[-1],
                                            gaussian_sum=g))
    return results
Пример #4
0
def decremental_fits(label, null_fit, full_fit=None, params=None,
                     plots_dir=None, verbose=0):
  if (params is None): params = fit_parameters()
  results = []
  last_fit = scitbx.math.gaussian.fit(
    null_fit.table_x(),
    null_fit.table_y(),
    null_fit.table_sigmas(),
    full_fit)
  while (last_fit.n_terms() > 1):
    good_min = scitbx.math.gaussian_fit.decremental_fit(
      existing_gaussian=last_fit,
      params=params)
    if (good_min is None):
      print "%s n_terms=%d: No successful minimization. Aborting." % (
        label, last_fit.n_terms()-1)
      break
    show_fit_summary(
      "Best fit", label, good_min.final_gaussian_fit, good_min.max_error)
    show_literature_fits(
      label=label,
      n_terms=good_min.final_gaussian_fit.n_terms(),
      null_fit=null_fit,
      n_points=good_min.final_gaussian_fit.table_x().size(),
      e_other=good_min.max_error)
    good_min.final_gaussian_fit.show()
    good_min.show_minimization_parameters()
    last_fit = good_min.final_gaussian_fit
    print
    show_minimize_multi_histogram()
    sys.stdout.flush()
    if (plots_dir):
      write_plots(
        plots_dir=plots_dir,
        label=label+"_%d"%good_min.final_gaussian_fit.n_terms(),
        gaussian_fit=good_min.final_gaussian_fit)
    g = good_min.final_gaussian_fit
    results.append(xray_scattering.fitted_gaussian(
      stol=g.table_x()[-1], gaussian_sum=g))
  return results