예제 #1
0
def do_fit_wavelengths(pixels, lambdas, alphaguess, 
        sinbetaguess, gammaguess, deltaguess, band, pixel_y, error=None):

    ''' THIS HSOULD BE REMOVED'''

    bmap = {"Y": 6, "J": 5, "H": 4, "K": 3}
    order = bmap[band]

    
    parinfo = [
            {'fixed': 1, 'value': order, 'parname': 'order', 
                'limited': [0,0], 'limits': [0,0]},
            {'fixed': 1, 'value': pixel_y, 'parname': 'Y',
                'limited': [0,0], 'limits': [0,0]},
            {'fixed': 0, 'value': alphaguess, 'parname': 'alpha', 'step': 1e-5,
                'limited': [0,0], 'limits': [0,0]},
            {'fixed': 0, 'value': sinbetaguess, 'parname': 'sinbeta', 
                'step': 1e-5, 'limited': [0,0], 'limits': [30,50]},
            {'fixed': 0, 'value': gammaguess, 'parname': 'gamma','step': 1e-15,
                'limited': [1,1], 'limits': [0,20e-13]},
            {'fixed': 0, 'value': deltaguess, 'parname': 'delta', 'step': 1e-1,
                'limited': [1,1], 'limits': [0,2048]},
            ]

    fa = {"x": pixels, "y": lambdas}
    if error is not None:
        fa["error"] = error

    lsf = mpfit.mpfit(wavelength_residuals, parinfo=parinfo, functkw=fa, 
            quiet=1, maxiter=20)

    return lsf
예제 #2
0
def mpfitpeaks(x, y, N, error=None):

    pars = [1, np.min(y), 0]
    parinfo = [ {"value": N, "fixed": 1, "name": "Number of Peaks",
                    "limited": [0, 0], "limits": [0, 0]},
                {"value": 1.6, "fixed": 0, "name": "Sigma",
                    "limited": [0, 0], "limits": [0, 0]},
                {"value": pars[1], "fixed": 0, "name": "Offset",
                    "limited": [0, 0], "limits": [0, 0]},
                {"value": pars[2], "fixed": 0, "name": "Slope",
                    "limited": [0, 0], "limits": [0, 0]}]
    
    for i in range(N):
        v = {"value": np.max(y)/2., "fixed": 0, "name": "Peak Value(%i)" % i,
                "limited": [1, 0], "limits": [0, 0]}
        pars.append(np.max(y))
        parinfo.append(v)

        v = {"value": x[np.argmax(y)], "fixed": 0, "name": "Centroid(%i)" % i}
        pars.append(x[np.argmax(y)])
        parinfo.append(v)

    fa = {"x": x, "y": y}
    if error is not None: fa["error"] = error
    return mpfit.mpfit(multi_gaussian_residuals, parinfo=parinfo, functkw=fa,
            quiet=1)
예제 #3
0
def mpfitpeaks(x, y, N, error=None):

    pars = [1, np.min(y), 0]
    parinfo = [{
        "value": N,
        "fixed": 1,
        "name": "Number of Peaks",
        "limited": [0, 0],
        "limits": [0, 0]
    }, {
        "value": 1.6,
        "fixed": 0,
        "name": "Sigma",
        "limited": [0, 0],
        "limits": [0, 0]
    }, {
        "value": pars[1],
        "fixed": 0,
        "name": "Offset",
        "limited": [0, 0],
        "limits": [0, 0]
    }, {
        "value": pars[2],
        "fixed": 0,
        "name": "Slope",
        "limited": [0, 0],
        "limits": [0, 0]
    }]

    for i in range(N):
        v = {
            "value": np.max(y) / 2.,
            "fixed": 0,
            "name": "Peak Value(%i)" % i,
            "limited": [1, 0],
            "limits": [0, 0]
        }
        pars.append(np.max(y))
        parinfo.append(v)

        v = {"value": x[np.argmax(y)], "fixed": 0, "name": "Centroid(%i)" % i}
        pars.append(x[np.argmax(y)])
        parinfo.append(v)

    fa = {"x": x, "y": y}
    if error is not None: fa["error"] = error
    return mpfit.mpfit(multi_gaussian_residuals,
                       parinfo=parinfo,
                       functkw=fa,
                       quiet=1)
예제 #4
0
def mpfit_do(residual_fun, # function returned from mpfit_residuals() above
        x, # input x
        y, # input y = f(x)
        parinfo, # initial parameter guess
        error=None,
        maxiter=20):

    #TODO : Document parinfo part

    fa = {"x": x, "y": y}
    if error is not None:
        fa["error"] = error

    lsf = mpfit.mpfit(residual_fun, parinfo=parinfo, functkw=fa, 
            quiet=1, maxiter=maxiter)

    return lsf
예제 #5
0
def mpfitpeak(x, y, error=None):
    
    parinfo = [{"value": np.max(y), "fixed": 0, "name": "Peak Value",
                    'step': 10},
                {"value": x[np.argmax(y)], "fixed": 0, "name": "Centroid",
                    'step': .1},
                {"value": 1.1, "fixed": 0, "name": "Sigma",
                    'step': .1},
                {"value": np.min(y), "fixed": 0, "name": "Offset",
                    'step': 10},
                {"value": 0, "fixed": 0, "name": "Slope",
                    'step': 1e-5}]

    fa = {"x": x, "y": y}
    if error is not None: fa["error"] = error


    return mpfit.mpfit(gaussian_residuals, parinfo=parinfo, functkw=fa, quiet=1)
예제 #6
0
def mpfit_do(
        residual_fun,  # function returned from mpfit_residuals() above
        x,  # input x
        y,  # input y = f(x)
        parinfo,  # initial parameter guess
        error=None,
        maxiter=20):

    #TODO : Document parinfo part

    fa = {"x": x, "y": y}
    if error is not None:
        fa["error"] = error

    lsf = mpfit.mpfit(residual_fun,
                      parinfo=parinfo,
                      functkw=fa,
                      quiet=1,
                      maxiter=maxiter)

    return lsf
예제 #7
0
def mpfitpeak(x, y, error=None):

    parinfo = [{
        "value": np.max(y),
        "fixed": 0,
        "name": "Peak Value",
        'step': 10
    }, {
        "value": x[np.argmax(y)],
        "fixed": 0,
        "name": "Centroid",
        'step': .1
    }, {
        "value": 1.1,
        "fixed": 0,
        "name": "Sigma",
        'step': .1
    }, {
        "value": np.min(y),
        "fixed": 0,
        "name": "Offset",
        'step': 10
    }, {
        "value": 0,
        "fixed": 0,
        "name": "Slope",
        'step': 1e-5
    }]

    fa = {"x": x, "y": y}
    if error is not None: fa["error"] = error

    return mpfit.mpfit(gaussian_residuals,
                       parinfo=parinfo,
                       functkw=fa,
                       quiet=1)
예제 #8
0
def do_fit_wavelengths(pixels,
                       lambdas,
                       alphaguess,
                       sinbetaguess,
                       gammaguess,
                       deltaguess,
                       band,
                       pixel_y,
                       error=None):
    ''' THIS HSOULD BE REMOVED'''

    bmap = {"Y": 6, "J": 5, "H": 4, "K": 3}
    order = bmap[band]

    parinfo = [
        {
            'fixed': 1,
            'value': order,
            'parname': 'order',
            'limited': [0, 0],
            'limits': [0, 0]
        },
        {
            'fixed': 1,
            'value': pixel_y,
            'parname': 'Y',
            'limited': [0, 0],
            'limits': [0, 0]
        },
        {
            'fixed': 0,
            'value': alphaguess,
            'parname': 'alpha',
            'step': 1e-5,
            'limited': [0, 0],
            'limits': [0, 0]
        },
        {
            'fixed': 0,
            'value': sinbetaguess,
            'parname': 'sinbeta',
            'step': 1e-5,
            'limited': [0, 0],
            'limits': [30, 50]
        },
        {
            'fixed': 0,
            'value': gammaguess,
            'parname': 'gamma',
            'step': 1e-15,
            'limited': [1, 1],
            'limits': [0, 20e-13]
        },
        {
            'fixed': 0,
            'value': deltaguess,
            'parname': 'delta',
            'step': 1e-1,
            'limited': [1, 1],
            'limits': [0, 2048]
        },
    ]

    fa = {"x": pixels, "y": lambdas}
    if error is not None:
        fa["error"] = error

    lsf = mpfit.mpfit(wavelength_residuals,
                      parinfo=parinfo,
                      functkw=fa,
                      quiet=1,
                      maxiter=20)

    return lsf