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)
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)