def do_pyspeck_fits_2comp(
    pcube,
    cube303m=None,
    vrange=(-105, 125),
    m1=None,
    guesses_simple=[1, 15, 5, 0.5, 0.7, 1] + [1, 36, 5, 0.5, 0.7, 1],
    limits=[(0, 20), (-105, 125), (1, 40), (0, 1), (0.3, 1.1), (0, 1e5)],
):

    if m1 is None:
        m1 = cube303m.moment1(axis=0).to(u.km / u.s)
    # Need to show pcube which pixels to ignore: m1 has nans
    pcube.mapplot.plane = m1.value
    pcube.fiteach(
        fittype='h2co_simple',
        multifit=True,
        guesses=guesses_simple,
        limited=[(True, True)] * len(guesses_simple),
        limits=limits,
        multicore=8,
    )

    pcube.mapplot(estimator=0)
    pcube_orig = pcube.parcube.copy()
    pcube2 = remove_bad_pars(pcube.parcube,
                             pcube.errcube,
                             len(guesses_simple),
                             min_nsig=4)
    return pcube2
Exemplo n.º 2
0
def do_pyspeck_fits_1comp(pcube, cube303m=None, vguesses='moment',
                          guesses=[1,None,5,0.5,0.7,1], vrange=(-105,125),
                          peaks=None,
                          m1=None,
                          limits=[(0,20), (-105,125),(1,40),(0,1),(0.3,1.1),(0,1e5)],
                          start_from_point=(0,0),
                          **kwargs):

    if m1 is None:
        m1 = cube303m.moment1(axis=0).to(u.km/u.s)
    if vguesses == 'moment':
        guesses_simple = np.array([guesses[0:1]+[x]+guesses[2:]
                                   for x in m1.value.flat]).T.reshape((len(guesses),)+m1.shape)
        bad = (guesses_simple[1,:,:] < vrange[0]) | (guesses_simple[1,:,:] > vrange[1])
        guesses_simple[1,bad] = 25
    else:
        guesses_simple = guesses

    g0 = guesses_simple

    if peaks is not None:
        # Wow, this is complicated
        # First, guesses needs to be reshaped to have the n_guesses as trailing axis
        # Then, it needs to be remade to have the first element be the appropriate peak...
        flatguesses = guesses_simple.reshape(guesses_simple.shape[0],
                                             np.prod(guesses_simple.shape[1:])).T
        guesses_simple = np.array([[peak]+g[1:].tolist()
                                   for peak,g in zip(peaks.value.flat,
                                                     flatguesses,)
                                  ]
                                 ).T.reshape((len(guesses),)+peaks.shape)
    # Can't accept guesses being wrong, and I've made too many mistakes...
    assert np.all(np.nan_to_num(g0[1:,0,0]) == np.nan_to_num(guesses_simple[1:,0,0]))
    assert np.all(np.nan_to_num(g0[1:,start_from_point[1],
                                   start_from_point[0]]) ==
                  np.nan_to_num(guesses_simple[1:,start_from_point[1],
                                               start_from_point[0]]))

    # Need to show pcube which pixels to ignore: m1 has nans
    pcube.mapplot.plane = m1.value
    pcube.fiteach(fittype='h2co_simple', multifit=True,
                  guesses=guesses_simple,
                  limited=[(True,True)] * len(guesses_simple),
                  limits=limits,
                  multicore=8,
                  integral=False,
                  **kwargs
                 )

    #pcube.mapplot(estimator=0)
    pcube_orig = pcube.parcube.copy()
    pcube2 = remove_bad_pars(pcube.parcube, pcube.errcube, len(guesses),
                             min_nsig=4)
Exemplo n.º 3
0
def do_pyspeck_fits_2comp(pcube, cube303m=None, vrange=(-105,125),
                          m1=None,
                          guesses_simple=[1,15,5,0.5,0.7,1] +
                          [1,36,5,0.5,0.7,1],
                          limits=[(0,20),(-105,125),(1,40),(0,1),(0.3,1.1),(0,1e5)],
                         ):

    if m1 is None:
        m1 = cube303m.moment1(axis=0).to(u.km/u.s)
    # Need to show pcube which pixels to ignore: m1 has nans
    pcube.mapplot.plane = m1.value
    pcube.fiteach(fittype='h2co_simple', multifit=True,
                        guesses=guesses_simple,
                        limited=[(True,True)] * len(guesses_simple),
                        limits=limits,
                        multicore=8,
                 )

    pcube.mapplot(estimator=0)
    pcube_orig = pcube.parcube.copy()
    pcube2 = remove_bad_pars(pcube.parcube, pcube.errcube, len(guesses_simple),
                             min_nsig=4)
    return pcube2
def do_pyspeck_fits_1comp(pcube,
                          cube303m=None,
                          vguesses='moment',
                          guesses=[1, None, 5, 0.5, 0.7, 1],
                          vrange=(-105, 125),
                          peaks=None,
                          m1=None,
                          limits=[(0, 20), (-105, 125), (1, 40), (0, 1),
                                  (0.3, 1.1), (0, 1e5)],
                          start_from_point=(0, 0),
                          **kwargs):

    if m1 is None:
        m1 = cube303m.moment1(axis=0).to(u.km / u.s)
    if vguesses == 'moment':
        guesses_simple = np.array([
            guesses[0:1] + [x] + guesses[2:] for x in m1.value.flat
        ]).T.reshape((len(guesses), ) + m1.shape)
        bad = (guesses_simple[1, :, :] < vrange[0]) | (guesses_simple[1, :, :]
                                                       > vrange[1])
        guesses_simple[1, bad] = 25
    else:
        guesses_simple = guesses

    g0 = guesses_simple

    if peaks is not None:
        # Wow, this is complicated
        # First, guesses needs to be reshaped to have the n_guesses as trailing axis
        # Then, it needs to be remade to have the first element be the appropriate peak...
        flatguesses = guesses_simple.reshape(guesses_simple.shape[0],
                                             np.prod(
                                                 guesses_simple.shape[1:])).T
        guesses_simple = np.array([[peak] + g[1:].tolist() for peak, g in zip(
            peaks.value.flat,
            flatguesses,
        )]).T.reshape((len(guesses), ) + peaks.shape)
    # Can't accept guesses being wrong, and I've made too many mistakes...
    assert np.all(
        np.nan_to_num(g0[1:, 0, 0]) == np.nan_to_num(guesses_simple[1:, 0, 0]))
    assert np.all(
        np.nan_to_num(g0[1:, start_from_point[1], start_from_point[0]]) ==
        np.nan_to_num(guesses_simple[1:, start_from_point[1],
                                     start_from_point[0]]))

    # Need to show pcube which pixels to ignore: m1 has nans
    pcube.mapplot.plane = m1.value
    pcube.fiteach(fittype='h2co_simple',
                  multifit=True,
                  guesses=guesses_simple,
                  limited=[(True, True)] * len(guesses_simple),
                  limits=limits,
                  multicore=8,
                  integral=False,
                  **kwargs)

    #pcube.mapplot(estimator=0)
    pcube_orig = pcube.parcube.copy()
    pcube2 = remove_bad_pars(pcube.parcube,
                             pcube.errcube,
                             len(guesses),
                             min_nsig=4)