Ejemplo n.º 1
0
def zig_zag_fits(label, null_fit, null_fit_more, params):
    six_term_best_min = scitbx.math.gaussian_fit.fit_with_golay_starts(
        label=label,
        null_fit=null_fit,
        null_fit_more=null_fit_more,
        params=params)
    results = []
    n_term_best_min = six_term_best_min
    have_all_points_in_previous = True
    while 1:
        while 1:
            if (n_term_best_min.final_gaussian_fit.n_terms() == 1):
                existing_gaussian = null_fit
            else:
                decr_best_min = scitbx.math.gaussian_fit.decremental_fit(
                    existing_gaussian=n_term_best_min.final_gaussian_fit,
                    params=params)
                assert decr_best_min is not None
                print "Decremental:",
                decr_best_min.show_summary()
                existing_gaussian = decr_best_min.final_gaussian_fit
                if (n_term_best_min.max_error <= params.negligible_max_error
                        and have_all_points_in_previous):
                    break
            incr_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)
            assert incr_best_min is not None
            print "Incremental:",
            incr_best_min.show_summary()
            if (existing_gaussian is null_fit):
                break
            if (not incr_best_min.is_better_than(n_term_best_min)):
                break
            n_term_best_min = incr_best_min
        print " Settled on:",
        n_term_best_min.show_summary()
        results.append(
            xray_scattering.fitted_gaussian(
                stol=n_term_best_min.final_gaussian_fit.table_x()[-1],
                gaussian_sum=n_term_best_min.final_gaussian_fit,
                max_error=n_term_best_min.max_error))
        if (existing_gaussian is null_fit):
            break
        have_all_points_in_previous = (
            n_term_best_min.final_gaussian_fit.table_x().size() ==
            decr_best_min.final_gaussian_fit.table_x().size())
        n_term_best_min = decr_best_min
    print
    return results
Ejemplo n.º 2
0
def zig_zag_fits(label, null_fit, null_fit_more, params):
  six_term_best_min = scitbx.math.gaussian_fit.fit_with_golay_starts(
    label=label,
    null_fit=null_fit,
    null_fit_more=null_fit_more,
    params=params)
  results = []
  n_term_best_min = six_term_best_min
  have_all_points_in_previous = True
  while 1:
    while 1:
      if (n_term_best_min.final_gaussian_fit.n_terms() == 1):
        existing_gaussian = null_fit
      else:
        decr_best_min = scitbx.math.gaussian_fit.decremental_fit(
          existing_gaussian=n_term_best_min.final_gaussian_fit,
          params=params)
        assert decr_best_min is not None
        print "Decremental:",
        decr_best_min.show_summary()
        existing_gaussian = decr_best_min.final_gaussian_fit
        if (n_term_best_min.max_error <= params.negligible_max_error
            and have_all_points_in_previous):
          break
      incr_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)
      assert incr_best_min is not None
      print "Incremental:",
      incr_best_min.show_summary()
      if (existing_gaussian is null_fit):
        break
      if (not incr_best_min.is_better_than(n_term_best_min)):
        break
      n_term_best_min = incr_best_min
    print " Settled on:",
    n_term_best_min.show_summary()
    results.append(xray_scattering.fitted_gaussian(
      stol=n_term_best_min.final_gaussian_fit.table_x()[-1],
      gaussian_sum=n_term_best_min.final_gaussian_fit,
      max_error=n_term_best_min.max_error))
    if (existing_gaussian is null_fit):
      break
    have_all_points_in_previous = (
         n_term_best_min.final_gaussian_fit.table_x().size()
      == decr_best_min.final_gaussian_fit.table_x().size())
    n_term_best_min = decr_best_min
  print
  return results
Ejemplo n.º 3
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
Ejemplo n.º 4
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