Пример #1
0
def plot_spectrum(rms_data,input_spectrum):
    rms_data = functions.read_ascii(rms_data)
    rms_data = functions.read_table(rms_data)
    rms_data = transpose(rms_data)

    ### Find min
    for i in range(len(rms_data[0])):
        if rms_data[3][i] == min(rms_data[3]):
            teff_min = rms_data[0][i]
            logg_min = rms_data[1][i]
            feh_min = rms_data[2][i]
            break

    print teff_min,logg_min,feh_min

    teff_list = []
    logg_list = []
    rms_list = []
    
    for i in range(len(rms_data[0])):
        if rms_data[2][i] == feh_min:
            teff_list.append(rms_data[0][i])
            logg_list.append(rms_data[1][i])
            rms_list.append(rms_data[3][i])

    plt.subplot(211)
    cm = matplotlib.cm.get_cmap('jet')
    sc = plt.scatter(teff_list, logg_list, c=rms_list, vmin=min(rms_list), vmax=max(rms_list), s=70, cmap=cm,edgecolor="w")
    cbar = plt.colorbar(sc)
    cbar.ax.set_ylabel("RMS")

    plt.scatter(teff_min,logg_min,color="r",s=70,marker="+")

    spectype_functions.plot_isochrones(program_dir,"r-",1)

    plt.xlim(max(teff_list)+250,min(teff_list)-250)
    plt.ylim(max(logg_list)+.25,min(logg_list)-0.25)

    plt.xlabel("Teff (K)")
    plt.ylabel("Logg")

    plt.subplot(212)
    data_spectrum = functions.read_ascii(input_spectrum)
    data_spectrum = functions.read_table(data_spectrum)
    data_spectrum = transpose(array(data_spectrum))
    data_spectrum = spectype_functions.normalise(data_spectrum,flux_normalise_w1,flux_normalise_w2)

    template_spectrum = "template_" + str(int(teff_min)) + "_" + str(logg_min) + "_" + str(feh_min)+".dat"
    template_spectrum = functions.read_ascii(model_path_flux+template_spectrum)
    template_spectrum = functions.read_table(template_spectrum)
    template_spectrum = transpose(array(template_spectrum))
    template_spectrum = spectype_functions.normalise(template_spectrum,flux_normalise_w1,flux_normalise_w2)

    plt.plot(data_spectrum[0],data_spectrum[1],"b-")
    plt.plot(template_spectrum[0],template_spectrum[1],"g-")
    plt.xlim(3700,5800)
    
    plt.xlabel("Wavelength (A)")
    plt.ylabel("Normalised flux")

    plt.show()
Пример #2
0
    def plot_spectrum(rms_data,input_spectrum):

        print "Plotting ",input_spectrum

        rms_data = functions.read_ascii(rms_data)
        rms_data = functions.read_table(rms_data)
        rms_data = transpose(rms_data)

        ### Find min
        for i in range(len(rms_data[0])):
            if rms_data[3][i] == min(rms_data[3]):
                teff_min = rms_data[0][i]
                logg_min = rms_data[1][i]
                feh_min = rms_data[2][i]
                break

        print teff_min,logg_min,feh_min,min(rms_data[3])

        teff_list = []
        logg_list = []
        rms_list = []

        for i in range(len(rms_data[0])):
            if rms_data[2][i] == feh_min:
                teff_list.append(rms_data[0][i])
                logg_list.append(rms_data[1][i])
                rms_list.append(rms_data[3][i])

        ### Create 2D space
        teff_space = arange(min(teff_list),max(teff_list)+250,250)
        logg_space = arange(min(logg_list),max(logg_list)+0.5,0.5)

        rms_space = zeros([len(teff_space),len(logg_space)])

        for i in range(len(rms_list)):
            x_index = int((teff_list[i] - min(teff_list)) / 250.)
            y_index = int((logg_list[i] - min(logg_list)) / 0.5)
            rms_space[x_index,y_index] = rms_list[i]


        ### Crop 2D space to perform gaussian fit for min
        teff_space_cropped,logg_space_cropped,rms_space_cropped=spectype_functions.chop_array(teff_space,logg_space,transpose(rms_space),teff_min,logg_min,250,0.5)
        rms_space_cropped = -1*(rms_space_cropped - rms_space_cropped.max())
        print rms_space_cropped
        try:
            gauss_fit = spectype_functions.fitgaussian(rms_space_cropped)
            teff_min_fit = min(teff_space_cropped) + gauss_fit[2] * 250
            logg_min_fit = min(logg_space_cropped) + gauss_fit[1] * 0.5
        except TypeError:
            print "Bad gaussian fit, using abs min"
            teff_min_fit = teff_min
            logg_min_fit = logg_min

        if teff_min_fit < 3500:
            teff_min_fit = 3500
        if teff_min_fit > 9000:
            teff_min_fit = 9000

        if logg_min_fit < 0.0:
            logg_min_fit = 0.0
        if logg_min_fit > 5.0:
            logg_min_fit = 5.0

        teff_min = int(spectype_functions.round_value(teff_min_fit,250.))
        logg_min = spectype_functions.round_value(logg_min_fit,0.5)

        print teff_min,logg_min

        ### Plot teff_logg space
        plt.figure(figsize=(7,5))
        plt.subplot(211)

        plt.title(object_name+" "+file_name+" "+str(int(round(teff_min_fit,0)))+" "+str(round(logg_min_fit,1))+" "+str(feh_min)+" \n RMS="+str(round(min(rms_data[3]),4)))

        v_min = min(rms_list)
        v_max = min(rms_list)+((max(rms_list)-min(rms_list))/3.)
        #v_max = max(rms_list)
        rms_space = clip(rms_space,v_min,v_max)

        cm = matplotlib.cm.get_cmap('jet')
        sc = plt.contourf(teff_space,logg_space,transpose(rms_space),100,cmap=cm)

        #sc = plt.scatter(teff_list, logg_list, c=rms_list, vmin=min(rms_list), vmax=(max(rms_list)-min(rms_list))/3+min(rms_list), s=150, cmap=cm,edgecolor="w")
        cbar = plt.colorbar(sc)
        cbar.ax.set_ylabel("RMS")

        plt.scatter(teff_min_fit,logg_min_fit,color="r",s=70,marker="+")

        spectype_functions.plot_isochrones(program_dir,"r-",1)
        plt.xlim(max(teff_list),min(teff_list))
        plt.ylim(max(logg_list),min(logg_list))
        #plt.xlim(max(teff_list)+250,min(teff_list)-250)
        #plt.ylim(max(logg_list)+.25,min(logg_list)-0.25)

        plt.xlabel("Teff (K)")
        plt.ylabel("Logg")

        ### Plot spectrum
        plt.subplot(212)
        data_spectrum = functions.read_ascii(input_spectrum)
        data_spectrum = functions.read_table(data_spectrum)
        data_spectrum = transpose(array(data_spectrum))
        data_spectrum = spectype_functions.normalise(data_spectrum,flux_normalise_w1,flux_normalise_w2)

        template_spectrum = "template_" + str(int(teff_min)) + "_" + str(logg_min) + "_" + str(feh_min)+".dat"
        template_spectrum = functions.read_ascii(model_path_flux+template_spectrum)
        template_spectrum = functions.read_table(template_spectrum)
        template_spectrum = transpose(array(template_spectrum))
        template_spectrum = spectype_functions.normalise(template_spectrum,flux_normalise_w1,flux_normalise_w2)
    
        data_wave = data_spectrum[0]
        data_flux = data_spectrum[1]
        template_wave = template_spectrum[0]
        template_flux = template_spectrum[1]

        c = 3.0 * 10**5

        data_wave = data_wave / ((vel_shift / c) + 1)

        data_interp = interpolate.splrep(data_wave,data_flux,s=0)
        data_flux = interpolate.splev(master_flux_wave,data_interp,der=0)

        template_interp = interpolate.splrep(template_wave,template_flux,s=0)
        template_flux = interpolate.splev(master_flux_wave,template_interp,der=0)


        plt.plot(master_flux_wave,data_flux,"b-",label="data")
        plt.plot(master_flux_wave,template_flux,"g-",label="template")
        plt.xlim(3600,5800)
        ylim_range = max(template_flux)-min(template_flux)
        plt.ylim(min(template_flux)-ylim_range*0.2,max(template_flux)+ylim_range*0.2)

        plt.legend(loc="lower right",ncol=2)

        plt.xlabel("Wavelength (A)")
        plt.ylabel("Normalised flux")

        os.system("rm "+file_path_reduced+"spectype_plots/"+object_name+"_"+file_name+".pdf")
        plt.savefig(file_path_reduced+"spectype_plots/"+object_name+"_"+file_name+".pdf")
        #plt.show()

        return teff_min_fit,logg_min_fit,feh_min