def ch3cn_spw_fitter(): """ Generator for a multigaussian fitter covering the target spw """ myclass = model.SpectralModel( multigaussian_model, 12, parnames=[ 'shift', 'width', "13CH3CN 13_8", "13CH3CN 13_7", "13CH3CN 13_6", "13CH3CN 13_5", "13CH3CN 13_4", "13CH3CN 13_3", "13CH3CN 13_2", "13CH3CN 13_1", "13CH3CN 13_0", 'background' ], parlimited=[(False, False), (True, False)] + [(False, False)] * 9 + [(True, False)], parlimits=[ (0, 0), ] * 12, shortvarnames=(r'\Delta x', r'\sigma', "^{13}CH_3CN 13_8", "^{13}CH_3CN 13_7", "^{13}CH_3CN 13_6", "^{13}CH_3CN 13_5", "^{13}CH_3CN 13_4", "^{13}CH_3CN 13_3", "^{13}CH_3CN 13_2", "^{13}CH_3CN 13_1", "^{13}CH_3CN 13_0", 'T_{BG}'), centroid_par='shift', ) myclass.__name__ = "multigauss" return myclass
def ch3cn_spw_fitter(): """ Generator for a multigaussian fitter covering the target spw """ myclass = model.SpectralModel( multigaussian_model, 17, parnames=[ 'shift', 'width', "HNCO 1019_918", "CH3CN 12_7", "CH3CN 12_6", "CH13CN 12_3", "CH13CN 12_2", "CH3CN 12_5", "unknown", "CH13CN 12_1", "CH13CN 12_0", "CH3CN 12_4", "CH3CN 12_3", "CH3CN 12_2", "CH3CN 12_1", "CH3CN 12_0", 'background' ], parlimited=[(False, False), (True, False)] + [(False, False)] * 14 + [(True, False)], parlimits=[ (0, 0), ] * 17, shortvarnames=(r'\Delta x', r'\sigma', "HNCO 1019_918", "CH3CN 12_7", "CH3CN 12_6", "CH_3^{13}CN 12_3", "CH_3^{13}CN 12_2", "CH3CN 12_5", "unknown", "CH_3^{13}CN 12_1", "CH_3^{13}CN 12_0", "CH3CN 12_4", "CH3CN 12_3", "CH3CN 12_2", "CH3CN 12_1", "CH3CN 12_0", 'T_{BG}'), centroid_par='shift', ) myclass.__name__ = "multigauss" return myclass
def nh3_multi_v_model_generator(n_comp, linenames=None): """ Works for up to 2 componet fits at the moment Parameters ---------- n_comp : int The number of velocity componets to fit linenames : list A list of line names from the set ('oneone', ..., 'eighteight'); default is just 'oneone' Returns ------- model : `model.SpectralModel` A SpectralModel class build from N different metastable inversion hyperfine models """ n_para = n_comp * 4 idx_comp = np.arange(n_comp) if linenames is None: linenames = ['oneone'] nlines = len(linenames) if nlines > 1: print "[ERROR]: modeling more than a line yet to be implemented. Please only use one line for the time being" return None def nh3_vtau_multimodel(xarr, *args): # the parameters are in the order of vel, width, tex, tau for each velocity component assert len(args) == n_para return ammonia_multi_v(xarr, *args, line_names=linenames) mod = model.SpectralModel( nh3_vtau_multimodel, n_para, parnames=[ x for ln in idx_comp for x in ('vlsr{0}'.format(ln), 'sigma{0}'.format(ln), 'tex{0}'.format(ln), 'tau{0}'.format(ln)) ], parlimited=[(False, False), (True, False), (True, False), (True, False)] * n_para, parlimits=[ (0, 0), ] * n_para, shortvarnames=[ x for ln in idx_comp for x in ('v_{{VLSR,{0}}}'.format(ln), '\\sigma_{{{0}}}'.format(ln), 'T_{{ex,{0}}}'.format(ln), '\\tau_{{{0}}}'.format(ln)) ], fitunit='Hz') # the keyword fitunits is now fitunit? return mod
def hnco_absorption_fitter(): """ Generator for hnco absorption fitter class """ myclass = model.SpectralModel(hnco_model, 5, parnames=['shift','width','tex','column','background'], parlimited=[(False,False),(True,False),(True,False),(True,False),(True,False)], parlimits=[(0,0), (0,0), (0,0),(0,0),(0,0)], shortvarnames=(r'\Delta x',r'\sigma','T_{ex}','N','T_{BG}'), centroid_par='shift', ) myclass.__name__ = "hnco_absorption" return myclass
def ch3cn_fitter(): """ Generator for CH3CN fitter class """ myclass = model.SpectralModel(ch3cn_model, 4, parnames=['shift','width','tex','column'], parlimited=[(False,False),(True,False),(True,False),(True,False)], parlimits=[(0,0), (0,0), (0,0),(0,0)], shortvarnames=(r'\Delta x',r'\sigma','T_{ex}','N'), centroid_par='shift', ) myclass.__name__ = "ch3cn" return myclass
def hfonly_66_fixed_fitter(): myclass = model.SpectralModel(hfonly_66_fixed, 4, parnames=['shift', 'hf1amp', 'hf2amp', 'width', ], parlimited=[(False, False), (False,False), (False,False), (True,False), ], parlimits=[(0,0), (0,0), (0,0), (0,0), ], shortvarnames=(r'\Delta x', r'A_1', r'A_2', r'\sigma', ), centroid_par='shift', ) myclass.__name__ = "hfonly_66_fixed" return myclass
def ninenine_hf_fitter(): myclass = model.SpectralModel(ninenine_hf, 4, parnames=['shift', 'tex', 'tau', 'width' ], parlimited=[(False, False), (True,False), (True,False), (True,False) ], parlimits=[(0,0), (0,0), (0,0), (0,0),], shortvarnames=(r'\Delta x', r'T_{ex}', r'\tau', r'\sigma', ), centroid_par='shift', ) myclass.__name__ = "ninenine_hf" return myclass
def sevenseven_movinghf_fitter(): myclass = model.SpectralModel(sevenseven_movinghf, 7, parnames=['shift', 'tau', 'hf1off', 'hf2off', 'width', 'tex', 'tbackground', ], parlimited=[(False, False), (True,False), (True,False), (True,False), (True,False), (True,False), (True, False), ], parlimits=[(0,0), (0,0), (0,0), (0,0), (0,0), (0,0), (0,0)], shortvarnames=(r'\Delta x', r'\tau', r'\Delta_{hf1}', r'\Delta_{hf2}', r'\sigma', r'T_{ex}', r'T_{bg}', ), centroid_par='shift', ) myclass.__name__ = "sevenseven_movinghf" return myclass
v1 = voigt(xarr, amp1, xcen1, gw1, lw1, normalized=normalized) v2 = voigt(xarr, amp2, xcen2, gw2, lw2, normalized=normalized) v3 = voigt(xarr, amp3, xcen3, gw3, lw3, normalized=normalized) v4 = voigt(xarr, amp4, xcen4, gw4, lw4, normalized=normalized) if return_components: return np.array([base, v1, v2, v3, v4]) else: mod = base + v1 + v2 + v3 + v4 return mod ModelClass = model.SpectralModel(mymodel, 18, parnames=['b0','b1']+\ [a+str(ii) for ii in xrange(4) for a in ['amplitude','shift','gwidth','lwidth']], parlimited=[(False,False)]*2 + [(False,False),(False,False),(True,False),(True,False)]*4, parlimits=[(0,0)]*2 + [(0,0), (0,0), (0,0), (0,0)]*4, shortvarnames=('b0','b1') + ('A',r'\Delta x',r'\sigma_G',r'\sigma_L')*4, multisingle='multi', ) ModelClass.components = lambda xarr, pars: mymodel( xarr, *pars, return_components=True) def pcygni(xarr, b0, b1, amp1, xcen1, gw1,