示例#1
0
def test_gaussian():

    pts = np.linspace(0, 10, 100)

    profile = generate_gaussian_profile(pts)

    params, errors, _, _, fail = \
        gauss_model(pts, profile, np.ones_like(pts), 1.0)

    # Check the amplitude
    npt.assert_allclose(params[0], 2.5, atol=0.01)
    # Width
    npt.assert_allclose(params[1], 3.0, atol=0.01)
    # Background
    npt.assert_allclose(params[2], 0.5, atol=0.02)
示例#2
0
def test_gaussian():

    pts = np.linspace(0, 10, 100)

    profile = generate_gaussian_profile(pts)

    params, errors, _, _, fail = \
        gauss_model(pts, profile, np.ones_like(pts), 1.0)

    # Check the amplitude
    npt.assert_allclose(params[0], 2.5, atol=0.01)
    # Width
    npt.assert_allclose(params[1], 3.0, atol=0.01)
    # Background
    npt.assert_allclose(params[2], 0.5, atol=0.02)
示例#3
0
def test_radial_profile_output(theta):

    model, skeleton = generate_filament_model(width=10.0,
                                              amplitude=1.0, background=0.0)

    dist_transform = nd.distance_transform_edt((~skeleton).astype(np.int))

    dist, radprof, weights, unbin_dist, unbin_radprof = \
        radial_profile(model, dist_transform, dist_transform,
                       ((1, 1), (model.shape[0] // 2, model.shape[1] // 2)),
                       img_scale=1.0, auto_cut=False, max_distance=20)

    params, errors, _, _, fail = \
        gauss_model(dist, radprof, np.ones_like(dist), 1.0)

    npt.assert_allclose(params[:-1], [1.0, 10.0, 0.0], atol=1e-1)
示例#4
0
def test_radial_profile_output(theta):

    model, skeleton = generate_filament_model(width=10.0,
                                              amplitude=1.0,
                                              background=0.0)

    dist_transform = nd.distance_transform_edt((~skeleton).astype(np.int))

    dist, radprof, weights, unbin_dist, unbin_radprof = \
        radial_profile(model, dist_transform, dist_transform,
                       ((1, 1), (model.shape[0] // 2, model.shape[1] // 2)),
                       img_scale=1.0, auto_cut=False, max_distance=20)

    params, errors, _, _, fail = \
        gauss_model(dist, radprof, np.ones_like(dist), 1.0)

    npt.assert_allclose(params[:-1], [1.0, 10.0, 0.0], atol=1e-1)
示例#5
0
def fit_skeleton_width(skel_array, intensity_array, pixscale, beam_width,
                       max_dist=50):
    '''
    Reproduce the width fitting of FilFinder, but simplified for a single
    super-structure.

    Parameters
    ----------
    pixscale : float
        Conversion of pixels to pc.
    beam_width : float
        Beam size in pc.
    max_dist : float or int
        Maximum radial distance in PIXELS.
    '''

    dist_arr = nd.distance_transform_edt(~skel_array)

    # bins = np.linspace(dist_arr.min(), max_dist,
    #                    int(np.sqrt(np.isfinite(dist_arr).sum())))

    del_bin = 0.25 * (beam_width / pixscale)

    bins = np.arange(dist_arr.min(), max_dist + del_bin,
                     del_bin)

    vals, bin_edges, bin_num = \
        binned_statistic(dist_arr.ravel(), intensity_array.ravel(),
                         bins=bins,
                         statistic=np.nanmean)

    variances = \
        binned_statistic(dist_arr.ravel(), intensity_array.ravel(),
                         bins=bins,
                         statistic=np.nanvar)[0]

    bin_width = (bin_edges[1] - bin_edges[0])
    bin_centers = bin_edges[1:] - bin_width / 2

    # weights = np.array([(bin_num == i).sum() for i in range(len(bins))])
    # weights = weights[weights > 0]

    # Convert the bin_centers to pc
    bin_centers *= pixscale

    # Nans are returned when nothing usable in a bin. Remove these before
    # fitting
    bin_centers = bin_centers[np.isfinite(vals)]
    variances = variances[np.isfinite(vals)]
    vals = vals[np.isfinite(vals)]

    weights = 1 / variances

    profile = np.array([bin_centers, vals, np.sqrt(variances)])

    # Now fit to a gaussian
    fit, err, model, names, fail = \
        gauss_model(bin_centers, vals, weights, beam_width)

    if fail:
        warn("Fail flag was raised. Check the output")
        # raise ValueError("Fit failed.")

    return fit, err, model, profile