Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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
Ejemplo n.º 6
0
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
Ejemplo n.º 7
0
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
Ejemplo n.º 8
0
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
Ejemplo n.º 9
0
    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,