Example #1
0
def index(request):
    config = config_file.get_config()
    
    if request.POST:
        if len(request.POST) > 0:
            for r in request.POST:
                config.set('bblio',r,str(request.POST[r]))
            config_file.set_config(config) 
    
    try:
        config.items('bblio')
    except:
        config.add_section('bblio')
    
    form = ConfigForm()
    for f in form.fields:
        try:
            form.fields[f].initial = config.get('bblio',str(f))
        except:
            config.set('bblio',f,'')
    config_file.set_config(config)    

    context = {'form' : form }
    
    return render(request, 'operations/admin.html', context)
Example #2
0
def return_masks(masterflat, toplot=False):
    config = config_file.set_config()

    masterflat.astype(float)

    ybin = config["binning"]
    print "assuming a ybin of", ybin

    print "creating a set of steps for the centres of the orders"

    steps = mean(masterflat[:,
                            len(masterflat[0]) / 2 -
                            10:len(masterflat[0]) / 2 + 10],
                 axis=1)
    #steps = steps[:-100/ybin]

    ### normalise the flats
    norm = []
    j = 200 / ybin
    i = 0
    while i < len(steps):
        norm.append([
            i + j / 2,
            min(steps[i:i + j]),
            max(steps[i:i + j]) - min(steps[i:i + j])
        ])
        i += j

    norm = array(norm)
    x = arange(len(steps))
    norm_min = interpolate.splrep(norm[:, 0], norm[:, 1], k=1)
    norm_min = interpolate.splev(x, norm_min)
    norm_max = interpolate.splrep(norm[:, 0], norm[:, 2], k=1)
    norm_max = interpolate.splev(x, norm_max)

    # plt.plot(x,norm_min)
    # plt.plot(x,norm_max+norm_min)
    # plt.plot(steps)
    # plt.show()

    steps -= norm_min
    steps /= norm_max

    from scipy.signal import find_peaks_cwt
    indexes = find_peaks_cwt(steps, arange(20, 70, 10) / ybin, min_snr=0.2)
    indexes = sort(indexes)  ### just to make sure
    indexes = indexes[:19]
    x = arange(len(indexes))

    # plt.plot(steps)
    # plt.scatter(indexes,zeros(len(indexes)))
    # plt.show()

    def minfunc(x0):
        f = x0[0] * log(x - x0[1]) + x0[2]
        return (f - indexes)**2

    x0 = optimize.least_squares(minfunc, [-1., -1., 1., 1.]).x
    x = arange(config["norder"] + 1)
    f = x0[0] * log((x - x0[1]) * x0[3]) + x0[2]

    #f = polyfit(x,indexes,3)
    #x = arange(config["norder"]+1)
    #f = polyval(f,x)

    # plt.scatter(arange(len(indexes)),indexes)
    # plt.plot(x,f)
    # plt.show()

    indexes = f.astype(int)

    if len(indexes) - 1 < config["norder"]:
        print "!!!!!!!!!!! Ah shit, did not identify enough orders, check your flats !!!!!!!!!!!!!!!!!"

    # plt.scatter(indexes,zeros(len(indexes)))
    # plt.plot(steps,color="r")
    # plt.show()
    print "finding edges for each order"

    order_masks = []
    stepsize = 50
    cutoff = 0.5

    for order in range(len(indexes) - 1):
        #for order in [22]:
        if order < config["norder"]:
            if order == 0:
                trace_top = []

                ### initiate trace
                xpos = arange(10 / ybin, indexes[order])
                edge = mean(masterflat[10 / ybin:indexes[order],
                                       len(masterflat[0]) / 2 -
                                       10 / ybin:len(masterflat[0]) / 2 + 10],
                            axis=1)
                mask = edge - min(edge) > cutoff * (max(edge) - min(edge))
                edge = min(xpos[mask])
                edge0 = edge
                width = indexes[order] - edge
                trace_top.append([len(masterflat[0]) / 2, edge])

                ### look left
                x = len(masterflat[0]) / 2 - 10
                while x > 100:
                    xpos = arange(10 / ybin, edge + width)
                    edge = mean(masterflat[10 / ybin:edge + width,
                                           x - stepsize:x + stepsize],
                                axis=1)
                    mask = edge - min(edge) > cutoff * (max(edge) - min(edge))
                    edge = min(xpos[mask])
                    trace_top.append([x, edge])

                    x -= stepsize

                zpt = indexes[order] - (indexes[order] -
                                        indexes[order - 1]) / 2
                edge = edge0

                ### look right
                x = len(masterflat[0]) / 2 + 10
                while x < len(masterflat[0]) - 100:
                    xpos = arange(10 / ybin, edge + width)
                    edge = mean(masterflat[10 / ybin:edge + width,
                                           x - stepsize:x + stepsize],
                                axis=1)
                    mask = edge - min(edge) > cutoff * (max(edge) - min(edge))
                    edge = min(xpos[mask])
                    trace_top.append([x, edge])

                    x += stepsize

            else:
                trace_top = []
                zpt = indexes[order] - (indexes[order] -
                                        indexes[order - 1]) / 2
                ### initiate trace
                xpos = arange(zpt, indexes[order])
                edge = mean(masterflat[zpt:indexes[order],
                                       len(masterflat[0]) / 2 -
                                       10:len(masterflat[0]) / 2 + 10],
                            axis=1)
                mask = edge - min(edge) > cutoff * (max(edge) - min(edge))
                edge = min(xpos[mask])
                width = indexes[order] - edge
                trace_top.append([len(masterflat[0]) / 2, edge])
                edge0 = edge
                zpt = edge - 5

                ### look left
                x = len(masterflat[0]) / 2 - 10
                while x > 100:
                    xpos = arange(zpt + (edge - edge0), edge + width)
                    edge = mean(masterflat[zpt + (edge - edge0):edge + width,
                                           x - stepsize:x + stepsize],
                                axis=1)
                    #plt.plot(xpos,edge)

                    emin, eminpos = min(edge), xpos[argmin(edge)]
                    if min(xpos) < eminpos:
                        xpos = xpos[argmin(edge):]
                        edge = edge[argmin(edge):]

                    mask = (edge -
                            min(edge)) > cutoff * (max(edge) - min(edge))
                    edge = min(xpos[mask])
                    #plt.axvline(x=edge)
                    #plt.show()

                    trace_top.append([x, edge])

                    x -= stepsize

                #zpt = indexes[order]-(indexes[order]-indexes[order-1])/2
                edge = edge0

                ### look right
                x = len(masterflat[0]) / 2 + 10
                while x < len(masterflat[0]) - 100:
                    xpos = arange(zpt + (edge - edge0), edge + width)
                    edge = mean(masterflat[zpt + (edge - edge0):edge + width,
                                           x - stepsize:x + stepsize],
                                axis=1)
                    #plt.plot(xpos,edge)

                    emin, eminpos = min(edge), xpos[argmin(edge)]
                    if min(xpos) < eminpos:
                        xpos = xpos[argmin(edge):]
                        edge = edge[argmin(edge):]

                    mask = edge - min(edge) > cutoff * (max(edge) - min(edge))
                    edge = min(xpos[mask])
                    #plt.axvline(x=edge)
                    #plt.show()

                    trace_top.append([x, edge])

                    x += stepsize

            trace_top = array(trace_top) - 2.
            trace_top_fit = polyfit_sigclip(trace_top[:, 0], trace_top[:, 1])
            #trace_top_fit = polyval(trace_top_fit,arange(len(masterflat)))

            #################

            trace_bottom = []
            zpt = indexes[order] + (indexes[order + 1] - indexes[order]) / 2
            ### initiate trace
            xpos = arange(indexes[order], zpt)
            edge = mean(masterflat[indexes[order]:zpt,
                                   len(masterflat[0]) / 2 -
                                   10:len(masterflat[0]) / 2 + 10],
                        axis=1)

            mask = edge - min(edge) > cutoff * (max(edge) - min(edge))
            edge = max(xpos[mask])
            width = edge - indexes[order]
            trace_bottom.append([len(masterflat[0]) / 2, edge])
            edge0 = edge
            zpt = edge + 5

            ### look left
            x = len(masterflat[0]) / 2 - 10
            while x > 100:
                xpos = arange(edge - width, zpt + (edge - edge0))
                edge = mean(masterflat[edge - width:zpt + (edge - edge0),
                                       x - stepsize:x + stepsize],
                            axis=1)

                emin, eminpos = min(edge), xpos[argmin(edge)]
                if max(xpos) > eminpos:
                    xpos = xpos[:argmin(edge)]
                    edge = edge[:argmin(edge)]

                #plt.plot(xpos,edge)

                mask = edge - min(edge) > cutoff * (max(edge) - min(edge))
                edge = max(xpos[mask])

                #plt.axvline(x=edge)
                #plt.show()

                trace_bottom.append([x, edge])

                x -= stepsize

            #zpt = indexes[order]+(indexes[order+1]-indexes[order])/2
            edge = edge0

            ### look right
            x = len(masterflat[0]) / 2 + 10
            while x < len(masterflat[0]) - 100:
                xpos = arange(edge - width, zpt + (edge - edge0))
                edge = mean(masterflat[edge - width:zpt + (edge - edge0),
                                       x - stepsize:x + stepsize],
                            axis=1)
                emin, eminpos = min(edge), xpos[argmin(edge)]
                if max(xpos) > eminpos:
                    xpos = xpos[:argmin(edge)]
                    edge = edge[:argmin(edge)]

                #plt.plot(xpos,edge)

                mask = edge - min(edge) > cutoff * (max(edge) - min(edge))
                edge = max(xpos[mask])

                #plt.axvline(x=edge)
                #plt.show()

                trace_bottom.append([x, edge])

                x += stepsize

            trace_bottom = array(trace_bottom) + 2.
            trace_bottom_fit = polyfit_sigclip(trace_bottom[:, 0],
                                               trace_bottom[:, 1])

            if toplot:

                plt.scatter(trace_bottom[:, 0], trace_bottom[:, 1])
                plt.plot(arange(len(masterflat[0])),
                         polyval(trace_bottom_fit, arange(len(masterflat[0]))))

                plt.scatter(trace_top[:, 0], trace_top[:, 1])
                plt.plot(arange(len(masterflat[0])),
                         polyval(trace_top_fit, arange(len(masterflat[0]))))
                plt.show()

            x = arange(len(masterflat[0]))
            y = arange(len(masterflat))
            xx, yy = meshgrid(x, y)
            mask = masterflat == masterflat
            mask *= yy > polyval(trace_top_fit, xx)
            mask *= yy < polyval(trace_bottom_fit, xx)

            order_masks.append([mask, trace_top_fit, trace_bottom_fit])

    pickle.dump(order_masks,
                open(config["folder"] + "/temp/order_masks.pkl", "wb"))

    return order_masks
Example #3
0
import os, sys, string, pickle, pyfits
import emcee
from numpy import *
from scipy import interpolate, optimize
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings("ignore")

import config_file
config = config_file.set_config()

library_path = config["spectral_library"] + "lib/"
library = pickle.load(open(library_path + "library.pkl", "rb"))

c = 3. * 10**5


def make_rot_prof(v, vsini=100, epsilon=0.6451, scale=1, vshift=0):

    vrot = 2 * (1 - epsilon) * (1 - (
        (v - vshift) / vsini)**2)**(0.5) + 0.5 * pi * epsilon * (1 - (
            (v - vshift) / vsini)**2)
    #vrot /= pi*vsini*(1-epsilon/3)

    mask = vrot != vrot
    vrot[mask] = 0

    vrot /= max(vrot)
    vrot *= scale

    return vrot