def galaxy_Lumfct_prior(dict_modelsfiles, dict_modelfluxes, z, *par):

  # Calculated B-band at this parameter space point
  h_70 = 1.

  distance = model.z2Dlum(z)#/3.08567758e24

  lumfactor = (4. * pi * distance**2.)
  bands, gal_flux = galaxy_flux(dict_modelsfiles, dict_modelfluxes, *par)

#  array = np.arange(len(bands))
#  x_B = np.int(array[(14.87 > bands > 14.80)])
 
  flux_B = gal_flux[(14.87 > bands > 14.80)]

#  mag1= -2.5 * np.log10(flux_B) - 48.6
#  distmod = -5.0 * np.log10((distance/3.08567758e24 *1e6)/10) 
#  abs_mag1 = mag1 + distmod
#  thispoint1 = abs_mag1


  lum_B = lumfactor * flux_B
  thismag = 51.6 - 2.5 *np.log10(lum_B)
  

  # Expected B-band calculation
  
  expected = -20.3 - (5 * np.log10(h_70) )- (1.1 * z)


  return expected,thismag
예제 #2
0
    def plot_manyrealizations_SED(self):    


        #reading from valid data from object data
        ydata = self.data.fluxes[self.data.fluxes>0.]
        yerror = self.data.fluxerrs[self.data.fluxes>0.]
        yndflags = self.data.ndflag[self.data.fluxes>0.]
        Nrealizations = self.out['realizations2plot']

        #Data frequencies (obs and rest), and model frequencies
        data_nus_obs = 10**self.data.nus[self.data.fluxes>0.]
        data_nus_rest = data_nus_obs * (1+self.z) 
        data_nus = np.log10(data_nus_rest)

        all_nus =self.allnus
        all_nus_rest = 10**all_nus 
        all_nus_obs =  10**all_nus / (1+self.z) #observed

        distance= model.z2Dlum(self.z)
        lumfactor = (4. * math.pi * distance**2.)
        data_nuLnu_rest = ydata* data_nus_obs *lumfactor
        data_errors_rest= yerror * data_nus_obs * lumfactor

        SBnuLnu, BBnuLnu, GAnuLnu, TOnuLnu, TOTALnuLnu, BBnuLnu_deredd = self.nuLnus

        #plotting settings
        fig, ax1, ax2 = SED_plotting_settings(all_nus_rest, data_nuLnu_rest, self.allnus)
        SBcolor, BBcolor, GAcolor, TOcolor, TOTALcolor= SED_colors(combination = 'a')
        lw= 1.5
        
        li = []

        for i in range(Nrealizations):

            #Settings for model lines
            p2=ax1.plot(all_nus, SBnuLnu[i], marker="None", linewidth=lw, label="1 /sigma", color= SBcolor, alpha = 0.5)
            p3=ax1.plot(all_nus, BBnuLnu[i], marker="None", linewidth=lw, label="1 /sigma",color= BBcolor, alpha = 0.5)
            p4=ax1.plot(all_nus, GAnuLnu[i],marker="None", linewidth=lw, label="1 /sigma",color=GAcolor, alpha = 0.5)
            p5=ax1.plot( all_nus, TOnuLnu[i], marker="None",  linewidth=lw, label="1 /sigma",color= TOcolor ,alpha = 0.5)
            p1= ax1.plot( all_nus, TOTALnuLnu[i], marker="None", linewidth=lw,  label="1 /sigma", color= TOTALcolor, alpha= 0.5)

            p6 = ax1.plot(data_nus, self.filtered_modelpoints_nuLnu[i][self.data.fluxes>0.], marker='o', linestyle="None",markersize=5, color="red", alpha =0.7)


            det = [yndflags==1]
            upp = [yndflags==0]

            upplimits = ax1.errorbar(data_nus[upp], 2.*data_nuLnu_rest[upp], yerr= data_errors_rest[upp]/2, uplims = True, linestyle='',  markersize=5, color="black")
            (_, caps, _) = ax1.errorbar(data_nus[det], data_nuLnu_rest[det], yerr= data_errors_rest[det], capsize=4, linestyle="None", linewidth=1.5,  marker='o',markersize=5, color="black", alpha = 1)
            
            ra = self.filtered_modelpoints_nuLnu[i][self.data.fluxes>0.]
            li.append(np.sum(abs(data_nuLnu_rest[data_nus<13.]-ra[data_nus<13.])))

        #print np.sum(li)


        ax1.annotate(r'XID='+str(self.data.name)+r', z ='+ str(self.z), xy=(0, 1),  xycoords='axes points', xytext=(20, 250), textcoords='axes points' )#+ ', log $\mathbf{L}_{\mathbf{IR}}$= ' + str(Lir_agn) +', log $\mathbf{L}_{\mathbf{FIR}}$= ' + str(Lfir) + ',  log $\mathbf{L}_{\mathbf{UV}} $= '+ str(Lbol_agn)
        print ' => SEDs of '+ str(Nrealizations)+' different realization were plotted.'

        return fig, np.sum(li)/Nrealizations
예제 #3
0
    def chi_squared_value(self):
        #######Calculate chi-squared value of best-fit SED, excludes upper limits
        ###returns: chi-squared and number of filters used in fit
        ydata = self.data.fluxes[self.data.fluxes > 0.]
        yerror = self.data.fluxerrs[self.data.fluxes > 0.]
        yndflags = self.data.ndflag[self.data.fluxes > 0.]

        data_nus_obs = 10**self.data.nus[self.data.fluxes > 0.]

        distance = model.z2Dlum(self.z)
        lumfactor = (4. * math.pi * distance**2.)
        data_nuLnu_rest = ydata * data_nus_obs * lumfactor
        data_errors_rest = yerror * data_nus_obs * lumfactor

        det = [yndflags == 1]
        upp = [yndflags == 0]

        model_y = self.filtered_modelpoints_nuLnu_best[
            self.data.fluxes > 0.][det]
        obs_y = data_nuLnu_rest[det]
        obs_err = data_errors_rest[det]

        nfilters = len(obs_y)
        diff = [(obs_y[x] - model_y[x])**2 / (obs_err[x]**2)
                for x in xrange(nfilters)]

        chi_squared = np.sum(diff)

        return chi_squared, nfilters
def PLOT_SED_manyrealizations(source, data_nus_0, ydata_0, yerror_0, z, all_nus, FLUXES4plotting, Nrealizations, filtered_modelpoints, index_dataexist):


    # Choosing only existing data points (source-dependent: not total CATALOG array)
 
    data_nus = data_nus_0[index_dataexist]
    ydata = ydata_0[index_dataexist]
    yerror = yerror_0[index_dataexist]
   


    #data nuLnu
    data_nus_obs = 10**data_nus 
    data_nus_rest = 10**data_nus * (1+z) 
    data_nus = np.log10(data_nus_rest)
    all_nus_rest = 10**all_nus 
    all_nus_obs =  10**all_nus / (1+z) #observed
    distance= model.z2Dlum(z)
    lumfactor = (4. * pi * distance**2.)
    data_nuLnu_rest = ydata* data_nus_obs *lumfactor
    data_errors_rest= yerror * data_nus_obs * lumfactor

    fig, ax1, ax2 = SED_plotting_settings(all_nus_rest, data_nuLnu_rest)

    SBnuLnu, BBnuLnu, GAnuLnu, TOnuLnu, TOTALnuLnu, BBnuLnu_deredd = FLUXES2nuLnu_4plotting(all_nus_rest, FLUXES4plotting, z)

    SBcolor, BBcolor, GAcolor, TOcolor, TOTALcolor= SED_colors(combination = 'a')
    lw= 1.5

    thinning_4plot = len(TOTALnuLnu) / (Nrealizations)


    for j in range(Nrealizations):

        
        i = j * 10 
        #Settings for model lines
        p2=ax1.plot(all_nus, SBnuLnu[i], marker="None", linewidth=lw, label="1 /sigma", color= SBcolor, alpha = 0.5)
        p3=ax1.plot(all_nus, BBnuLnu[i], marker="None", linewidth=lw, label="1 /sigma",color= BBcolor, alpha = 0.5)
        p4=ax1.plot( all_nus, GAnuLnu[i],marker="None", linewidth=lw, label="1 /sigma",color=GAcolor, alpha = 0.5)
        p5=ax1.plot( all_nus, TOnuLnu[i], marker="None",  linewidth=lw, label="1 /sigma",color= TOcolor ,alpha = 0.5)
        p1= ax1.plot( all_nus, TOTALnuLnu[i], marker="None", linewidth=lw,  label="1 /sigma", color= TOTALcolor, alpha= 0.5)

        interp_total= interp1d(all_nus, TOTALnuLnu[i], bounds_error=False, fill_value=0.)

        TOTALnuLnu_at_datapoints = interp_total(data_nus)


        (_, caps, _) = ax1.errorbar(data_nus, data_nuLnu_rest, yerr= data_errors_rest, capsize=4, linestyle="None", linewidth=1.5,  marker='o',markersize=5, color="black", alpha = 0.5)
        p6 = ax1.plot(data_nus, TOTALnuLnu_at_datapoints ,   marker='o', linestyle="None",markersize=5, color="red")
        
#        p6 = ax1.plot(np.log10(10**data_nus_0 *(1+z)), filtered_modelpoints[i] ,  marker='o', linestyle="None",markersize=5, color="red")

    ax1.annotate(r'XID='+str(source)+r', z ='+ str(z), xy=(0, 1),  xycoords='axes points', xytext=(20, 310), textcoords='axes points' )#+ ', log $\mathbf{L}_{\mathbf{IR}}$= ' + str(Lir_agn) +', log $\mathbf{L}_{\mathbf{FIR}}$= ' + str(Lfir) + ',  log $\mathbf{L}_{\mathbf{UV}} $= '+ str(Lbol_agn)
    print ' => SEDs of '+ str(Nrealizations)+' different realization were plotted.'

    return fig
def PLOT_SED_bestfit(source, data_nus_0, ydata_0, yerrors_0,  z, all_nus, FLUXES4plotting, filtered_modelpoints, index_dataexist):

 
    # Choosing only existing data points (source-dependent: not total CATALOG array)
    data_nus = data_nus_0[index_dataexist]
    data_flux = ydata_0[index_dataexist]
    data_errors = yerrors_0[index_dataexist]
  

    data_nus_obs = 10**data_nus
    data_nus_rest =10**data_nus*(1+z) #rest
    data_nus =np.log10(data_nus_rest)
    all_nus_rest = 10**all_nus
    all_nus_obs = 10**all_nus/(1+z) #observed 
    distance= model.z2Dlum(z)
    lumfactor = (4. * pi * distance**2.)


    data_nuLnu_rest = data_flux* data_nus_obs *lumfactor
    data_errors_rest= data_errors * data_nus_obs * lumfactor

    fig, ax1, ax2 = SED_plotting_settings(all_nus_rest, data_nuLnu_rest)


    SBnuLnu, BBnuLnu, GAnuLnu, TOnuLnu, TOTALnuLnu, BBnuLnu_deredd = [f[0] for f in FLUXES2nuLnu_4plotting(all_nus_rest, FLUXES4plotting, z)]

    SBFnu_array, BBFnu_array, GAFnu_array, TOFnu_array, TOTALFnu_array,BBFnu_array_deredd = FLUXES4plotting
    np.savetxt('/data2/calistro/Dropbox/totalnuLnu_'+str(source)+'.txt', np.column_stack((all_nus_rest, TOTALnuLnu)))#TOTALFnu_array.T)))		
#    print np.shape(filtered_modelpoints), np.shape(data_nus_0), np.shape(data_nus)
#    filtered_modelpoints_best = filtered_modelpoints * (10**data_nus_0) * lumfactor



    #Settings for model lines
    SBcolor, BBcolor, GAcolor, TOcolor, TOTALcolor= SED_colors(combination = 'a')
    lw= 1.5
    p1= ax1.plot( all_nus, TOTALnuLnu, marker="None", linewidth=lw,  label="1 /sigma", color= TOTALcolor, alpha= 1.0)
    p2=ax1.plot(all_nus, SBnuLnu, marker="None", linewidth=lw, label="1 /sigma", color= SBcolor, alpha = 0.6)
    p3=ax1.plot(all_nus, BBnuLnu, marker="None", linewidth=lw, label="1 /sigma",color= BBcolor, alpha = 0.6)
    p4=ax1.plot( all_nus, GAnuLnu,marker="None", linewidth=lw, label="1 /sigma",color=GAcolor, alpha = 0.6)
    p5=ax1.plot( all_nus, TOnuLnu, marker="None",  linewidth=lw, label="1 /sigma",color= TOcolor, alpha = 0.6)
    interp_total= interp1d(all_nus, TOTALnuLnu, bounds_error=False, fill_value=0.)
    TOTALnuLnu_at_datapoints = interp_total(data_nus)

    
    
#    p6 = ax1.plot(np.log10(10**data_nus_0*(1+z)), filtered_modelpoints_best[0] ,  marker='o', linestyle="None", markersize=5, color="red")
    #p6 = ax1.plot(data_nus, TOTALnuLnu_at_datapoints ,  marker='o', linestyle="None", markersize=5, color="red")
    
    (_, caps, _) = ax1.errorbar(data_nus, data_nuLnu_rest, yerr= data_errors_rest, capsize=4, linestyle="None", linewidth=1.5,  marker='o',markersize=5, color="black", alpha = 0.5)

    ax1.annotate(r'XID='+str(source)+r', z ='+ str(z), xy=(0, 1),  xycoords='axes points', xytext=(20, 310), textcoords='axes points' )#+ ', log $\mathbf{L}_{\mathbf{IR}}$= ' + str(Lir_agn) +', log $\mathbf{L}_{\mathbf{FIR}}$= ' + str(Lfir) + ',  log $\mathbf{L}_{\mathbf{UV}} $= '+ str(Lbol_agn)

    #plt.savefig(folder+str(source)+'/SEDbest_'+str(source)+'.pdf', format = 'pdf')#, dpi = 900

    print ' => Best fit SED was plotted.'
    return fig
예제 #6
0
def FLUXES2nuLnu_4plotting(all_nus_rest, FLUXES4plotting, z):

    all_nus_rest = all_nus_rest 
    all_nus_obs = all_nus_rest /(1+z) #observed
    distance= model.z2Dlum(z)
    lumfactor = (4. * pi * distance**2.)

    SBnuLnu, BBnuLnu, GAnuLnu, TOnuLnu, TOTALnuLnu, BBnuLnu_deredd, iSBnuLnu, iBBnuLnu, iGAnuLnu, iTOnuLnu, iTOTALnuLnu,iBBnuLnu_deredd  = [ f *lumfactor*all_nus_obs for f in FLUXES4plotting]

    return SBnuLnu, BBnuLnu, GAnuLnu, TOnuLnu, TOTALnuLnu, BBnuLnu_deredd,  iSBnuLnu, iBBnuLnu, iGAnuLnu, iTOnuLnu, iTOTALnuLnu,iBBnuLnu_deredd  
    def plot_manyrealizations_SED(self):    


        #reading from valid data from object data
        ydata = self.data.fluxes[self.data.fluxes>0.]
        yerror = self.data.fluxerrs[self.data.fluxes>0.]
        yndflags = self.data.ndflag[self.data.fluxes>0.]
        Nrealizations = self.out['realizations2plot']

        #Data frequencies (obs and rest), and model frequencies
        data_nus_obs = 10**self.data.nus[self.data.fluxes>0.]
        data_nus_rest = data_nus_obs * (1+self.z) 
        data_nus = np.log10(data_nus_rest)

        all_nus =self.allnus
        all_nus_rest = 10**all_nus 
        all_nus_obs =  10**all_nus / (1+self.z) #observed

        distance= model.z2Dlum(self.z)
        lumfactor = (4. * math.pi * distance**2.)
        data_nuLnu_rest = ydata* data_nus_obs *lumfactor
        data_errors_rest= yerror * data_nus_obs * lumfactor

        SBnuLnu, BBnuLnu, GAnuLnu, TOnuLnu, TOTALnuLnu, BBnuLnu_deredd = self.nuLnus

        #plotting settings
        fig, ax1, ax2 = SED_plotting_settings(all_nus_rest, data_nuLnu_rest)
        SBcolor, BBcolor, GAcolor, TOcolor, TOTALcolor= SED_colors(combination = 'a')
        lw= 1.5

        for i in range(Nrealizations):

            #Settings for model lines
            p2=ax1.plot(all_nus, SBnuLnu[i], marker="None", linewidth=lw, label="1 /sigma", color= SBcolor, alpha = 0.5)
            p3=ax1.plot(all_nus, BBnuLnu[i], marker="None", linewidth=lw, label="1 /sigma",color= BBcolor, alpha = 0.5)
            p4=ax1.plot(all_nus, GAnuLnu[i],marker="None", linewidth=lw, label="1 /sigma",color=GAcolor, alpha = 0.5)
            p5=ax1.plot( all_nus, TOnuLnu[i], marker="None",  linewidth=lw, label="1 /sigma",color= TOcolor ,alpha = 0.5)
            p1= ax1.plot( all_nus, TOTALnuLnu[i], marker="None", linewidth=lw,  label="1 /sigma", color= TOTALcolor, alpha= 0.5)

            p6 = ax1.plot(data_nus, self.filtered_modelpoints_nuLnu[i][self.data.fluxes>0.],   marker='o', linestyle="None",markersize=5, color="red", alpha =0.7)

            det = [yndflags==1]
            upp = [yndflags==0]

            upplimits = ax1.errorbar(data_nus[upp], 2.*data_nuLnu_rest[upp], yerr= data_errors_rest[upp]/2, uplims = True, linestyle='',  markersize=5, color="black")
            (_, caps, _) = ax1.errorbar(data_nus[det], data_nuLnu_rest[det], yerr= data_errors_rest[det], capsize=4, linestyle="None", linewidth=1.5,  marker='o',markersize=5, color="black", alpha = 1)


        ax1.annotate(r'XID='+str(self.data.name)+r', z ='+ str(self.z), xy=(0, 1),  xycoords='axes points', xytext=(20, 310), textcoords='axes points' )#+ ', log $\mathbf{L}_{\mathbf{IR}}$= ' + str(Lir_agn) +', log $\mathbf{L}_{\mathbf{FIR}}$= ' + str(Lfir) + ',  log $\mathbf{L}_{\mathbf{UV}} $= '+ str(Lbol_agn)
        print ' => SEDs of '+ str(Nrealizations)+' different realization were plotted.'

        return fig
def FLUXES2nuLnu_4plotting(all_nus_rest, FLUXES4plotting, z):

    """
    input: all_nus_rest (10** , NOT log!!!!)
    """
    all_nus_rest = all_nus_rest 
    all_nus_obs = all_nus_rest /(1+z) #observed
    distance= model.z2Dlum(z)
    lumfactor = (4. * pi * distance**2.)

    SBnuLnu, BBnuLnu, GAnuLnu, TOnuLnu, TOTALnuLnu, BBnuLnu_deredd = [ f *lumfactor*all_nus_obs for f in FLUXES4plotting]

    return SBnuLnu, BBnuLnu, GAnuLnu, TOnuLnu, TOTALnuLnu, BBnuLnu_deredd
    def FLUXES2nuLnu_4plotting(self, all_nus_rest, FLUXES4plotting, z):

        """
        Converts FLUXES4plotting into nuLnu_4plotting.

        ##input: 
        - all_nus_rest (give in 10^lognu, not log.)
        - FLUXES4plotting : fluxes for the four models corresponding
                            to each element of the total chain
        - source redshift z                    
        """

        all_nus_obs = 10**all_nus_rest /(1+z) 
        distance= model.z2Dlum(z)
        lumfactor = (4. * math.pi * distance**2.)
        SBnuLnu, BBnuLnu, GAnuLnu, TOnuLnu, TOTALnuLnu, BBnuLnu_deredd = [ f *lumfactor*all_nus_obs for f in FLUXES4plotting]

        return SBnuLnu, BBnuLnu, GAnuLnu, TOnuLnu, TOTALnuLnu, BBnuLnu_deredd
예제 #10
0
    def FLUXES2nuLnu_4plotting(self, all_nus_rest, FLUXES4plotting, z):

        """
        Converts FLUXES4plotting into nuLnu_4plotting.

        ##input: 
        - all_nus_rest (give in 10^lognu, not log.)
        - FLUXES4plotting : fluxes for the four models corresponding
                            to each element of the total chain
        - source redshift z                    
        """

        all_nus_obs = 10**all_nus_rest /(1+z) 
        distance= model.z2Dlum(z)
        lumfactor = (4. * math.pi * distance**2.)
        SBnuLnu, BBnuLnu, GAnuLnu, TOnuLnu, TOTALnuLnu, BBnuLnu_deredd = [ f *lumfactor*all_nus_obs for f in FLUXES4plotting]

        return SBnuLnu, BBnuLnu, GAnuLnu, TOnuLnu, TOTALnuLnu, BBnuLnu_deredd
예제 #11
0
def PLOT_SED_bestfit(source, data_nus, data_flux, data_errors,  z, all_nus, FLUXES4plotting, filtered_modelpoints, ifiltered_modelpoints1):

    data_nus_obs = 10**data_nus
    data_nus_rest =10**data_nus*(1+z) #rest
    data_nus =np.log10(data_nus_rest)
    all_nus_rest = 10**all_nus
    all_nus_obs = 10**all_nus/(1+z) #observed 
    distance= model.z2Dlum(z)
    lumfactor = (4. * pi * distance**2.)
    data_nuLnu_rest = data_flux* data_nus_obs *lumfactor
    data_errors_rest= data_errors * data_nus_obs * lumfactor

    
    SBnuLnu, BBnuLnu, GAnuLnu, TOnuLnu, TOTALnuLnu, BBnuLnu_deredd, _, _, _, _,_, _  = [f[0] for f in FLUXES2nuLnu_4plotting(all_nus_rest, FLUXES4plotting, z)]
    _, _, _, _, _, _,iSBnuLnu, iBBnuLnu, iGAnuLnu, iTOnuLnu, iTOTALnuLnu,iBBnuLnu_deredd =FLUXES2nuLnu_4plotting(all_nus_rest, FLUXES4plotting, z)

    filtered_modelpoints_best = filtered_modelpoints * data_nus_obs * lumfactor
    ifiltered_modelpoints = ifiltered_modelpoints1* data_nus_obs * lumfactor
    return SBnuLnu, BBnuLnu, GAnuLnu, TOnuLnu, TOTALnuLnu, BBnuLnu_deredd,  filtered_modelpoints_best, iSBnuLnu, iBBnuLnu, iGAnuLnu, iTOnuLnu, iTOTALnuLnu,iBBnuLnu_deredd, ifiltered_modelpoints
예제 #12
0
def PLOT_SED_manyrealizations(source, data_nus, ydata, yerror, z, all_nus, FLUXES4plotting,  filtered_modelpoints1, Nrealizations):



	#data nuLnu
    data_nus_obs = 10**data_nus 
    data_nus_rest = 10**data_nus * (1+z) 
    data_nus = np.log10(data_nus_rest)
    all_nus_rest = 10**all_nus 
    all_nus_obs =  10**all_nus / (1+z) #observed
    distance= model.z2Dlum(z)
    lumfactor = (4. * pi * distance**2.)
    data_nuLnu_rest = ydata* data_nus_obs *lumfactor
    data_errors_rest=yerror * data_nus_obs * lumfactor

    SBnuLnu, BBnuLnu, GAnuLnu, TOnuLnu, TOTALnuLnu, BBnuLnu_deredd, _, _, _, _,_, _   = FLUXES2nuLnu_4plotting(all_nus_rest, FLUXES4plotting, z)
    #data_errors_rest= data_errors * data_nus_obs * lumfactor
    filtered_modelpoints = filtered_modelpoints1* data_nus_obs * lumfactor
    
    return SBnuLnu, BBnuLnu, GAnuLnu, TOnuLnu, TOTALnuLnu, BBnuLnu_deredd, filtered_modelpoints
예제 #13
0
def PLOT_nr1(source, catalog, data_nus, data_flux, data_errors,  z, all_nus, FLUXES4plotting, filtered_modelpoints, ifiltered_modelpoints, Nrealizations, mock_input):

    # Two subplots, unpack the output array immediately


    
    data_nus_obs = 10**data_nus 
    data_nus_rest = 10**data_nus * (1+z) 
    data_nus_rest_log = np.log10(data_nus_rest)

    all_nus_rest = 10**all_nus 
    all_nus_obs =  10**all_nus / (1+z) #observed
    distance= model.z2Dlum(z)
    lumfactor = (4. * pi * distance**2.)
    data_nuLnu_rest = data_flux* data_nus_obs *lumfactor
    data_errors_rest=data_errors * data_nus_obs * lumfactor

    fig, ax1, ax2, ax3, ax4 = SED_plotting_settings(all_nus_rest, data_nuLnu_rest)
    plt.subplots_adjust(top=0.6, bottom=0, wspace=0)

#=================================
# INPUT AND BEST OUTPUT SED
#=================================

    SBnuLnu, BBnuLnu, GAnuLnu, TOnuLnu, TOTALnuLnu, BBnuLnu_deredd, filtered_modelpoints_best, iSBnuLnu, iBBnuLnu, iGAnuLnu, iTOnuLnu, iTOTALnuLnu,iBBnuLnu_deredd, ifiltered_modelpoints_lum = PLOT_SED_bestfit(source, data_nus, data_flux, data_errors,  z, all_nus, FLUXES4plotting, filtered_modelpoints, ifiltered_modelpoints)




    SBcolor, BBcolor, GAcolor, TOcolor, TOTALcolor, grey= SED_colors(combination = 'a')
    lw =2
 

    ip1= ax1.plot( all_nus, iTOTALnuLnu, marker="None", linewidth=lw, linestyle='--', label="1 /sigma", color= TOTALcolor, alpha= 1.0)
    ip2=ax1.plot(all_nus, iSBnuLnu, marker="None", linewidth=lw, linestyle='--',label="1 /sigma", color= SBcolor, alpha = 1)
    ip3=ax1.plot(all_nus, iBBnuLnu, marker="None", linewidth=lw, linestyle='--',label="1 /sigma",color= BBcolor, alpha = 1)
    ip4=ax1.plot( all_nus, iGAnuLnu,marker="None", linewidth=lw, linestyle='--',label="1 /sigma",color=GAcolor, alpha = 1)
    ip5=ax1.plot( all_nus, iTOnuLnu, marker="None",  linewidth=lw, linestyle='--',label="1 /sigma",color= TOcolor, alpha = 1)
    interp_total= interp1d(all_nus, iTOTALnuLnu, bounds_error=False, fill_value=0.)
    iTOTALnuLnu_at_datapoints = interp_total(data_nus)


    #plot data points. These are read out from PLOR_SED_bestfit
    #ip6 = ax1.plot(data_nus_rest_log, ifiltered_modelpoints_lum ,  marker='*', linestyle="None", markersize=5, color="red", alpha = 1)
    

    p1= ax1.plot( all_nus, TOTALnuLnu, marker="None", linewidth=lw,  label="1 /sigma", color= TOTALcolor, alpha= 1.0)
    p2=ax1.plot(all_nus, SBnuLnu, marker="None", linewidth=lw, label="1 /sigma", color= SBcolor, alpha = 1)
    p3=ax1.plot(all_nus, BBnuLnu, marker="None", linewidth=lw, label="1 /sigma",color= BBcolor, alpha = 1)
    p4=ax1.plot( all_nus, GAnuLnu,marker="None", linewidth=lw, label="1 /sigma",color=GAcolor, alpha = 1)
    p5=ax1.plot( all_nus, TOnuLnu, marker="None",  linewidth=lw, label="1 /sigma",color= TOcolor, alpha = 1)
    interp_total= interp1d(all_nus, TOTALnuLnu, bounds_error=False, fill_value=0.)
    TOTALnuLnu_at_datapoints = interp_total(data_nus)
    p6 = ax1.plot(data_nus_rest_log, filtered_modelpoints_best[0] ,  marker='o', linestyle="None", markersize=5, color="red", alpha = 1)
    

    (_, caps, _) = ax1.errorbar(data_nus_rest_log, data_nuLnu_rest, yerr= data_errors_rest, capsize=4, linestyle="None", linewidth=lw,  marker='o',markersize=5, color="black")

    

#=================================
# MANY REALIZATIONS SED
#=================================
    

    SBnuLnu, BBnuLnu, GAnuLnu, TOnuLnu, TOTALnuLnu, BBnuLnu_deredd, filtered_modelpoints = PLOT_SED_manyrealizations(source, data_nus, data_flux, data_errors, z, all_nus, FLUXES4plotting,  filtered_modelpoints, Nrealizations)

    thinning_4plot = len(TOTALnuLnu) / (Nrealizations)

    for j in range(Nrealizations):

        
        i = j * 10 
        #Settings for model lines
        q2=ax3.plot(all_nus, SBnuLnu[i], marker="None", linewidth=lw, label="1 /sigma", color= SBcolor, alpha = 0.4)
        q3=ax3.plot(all_nus, BBnuLnu[i], marker="None", linewidth=lw, label="1 /sigma",color= BBcolor, alpha = 0.4)
        q4=ax3.plot( all_nus, GAnuLnu[i],marker="None", linewidth=lw, label="1 /sigma",color=GAcolor, alpha = 0.4)
        q5=ax3.plot( all_nus, TOnuLnu[i], marker="None",  linewidth=lw, label="1 /sigma",color= TOcolor ,alpha = 0.4)
        q1= ax3.plot( all_nus, TOTALnuLnu[i], marker="None", linewidth=lw,  label="1 /sigma", color= TOTALcolor, alpha= 0.4)

        interp_total= interp1d(all_nus, TOTALnuLnu[i], bounds_error=False, fill_value=0.)

        TOTALnuLnu_at_datapoints = interp_total(data_nus)


        (_, caps, _) = ax3.errorbar(data_nus_rest_log, data_nuLnu_rest, yerr= data_errors_rest, capsize=4, linestyle="None", linewidth=1.5,  marker='.',markersize=5, color="black", alpha = 0.4)
        

        q6 = ax3.plot(data_nus_rest_log, filtered_modelpoints[i] ,  marker='o', linestyle="None",markersize=5, color="red")

    ax1.annotate(r'\hspace{0.1cm} \\z ='+ str(z)+ r' \\ input = dashed lines \\ output maximum likelihood = solid line ' , xy=(0, 0.5),  xycoords='axes points', xytext=(20, 380), textcoords='axes points', fontsize=16 )
    ax3.annotate(r'output realizations from PDF' , xy=(0, 0.1),  xycoords='axes points', xytext=(20, 380), textcoords='axes points', fontsize=16 )

    print ' => SEDs of '+ str(Nrealizations)+' different realization were plotted.'


#=================================
# TABLE
#=================================

  
    itau, iage, inh, iirlum, iSB ,iBB, iGA, iTO, iBBebv, iGAebv= mock_input[np.float(source)]

    tau_e, age_e, nh_e, irlum_e, SB_e, BB_e, GA_e, TO_e, BBebv_e, GAebv_e, Mstar_e, SFR_e, SFR_file_e, Lfir_e, Lir_e, Lbol_e, Lbol_deredd_e  = np.loadtxt('/data2/calistro/AGNfitter/OUTPUT/'+str(source)+'/parameters_with_errors_'+str(source)+'.txt', usecols=(0,1,2,3,4,5,6,7,8,9,10,11, 12, 13,14,15, 16), unpack=True , dtype = ('S')) 
    iage = '%.3s'%np.log10(np.float(iage))
    sourceline2_0 = [tau_e[0], age_e[0], nh_e[0], irlum_e[0], SB_e[0], BB_e[0], GA_e[0], TO_e[0], BBebv_e[0], GAebv_e[0]]
    sourceline2_1 = [tau_e[1], age_e[1], nh_e[1], irlum_e[1], SB_e[1], BB_e[1], GA_e[1], TO_e[1], BBebv_e[1], GAebv_e[1]]
    sourceline2_2 = [tau_e[2], age_e[2], nh_e[2], irlum_e[2], SB_e[2], BB_e[2], GA_e[2], TO_e[2], BBebv_e[2], GAebv_e[2]]
    outputline_0 = ['%.4s' %i for i in  sourceline2_0]
    outputline_1 = ['%.4s' %i for i in  sourceline2_1]
    outputline_2 = ['%.4s' %i for i in  sourceline2_2]
    outputline = [r'$%.4s ^{%.4s} _{%.4s} $' %(outputline_0[i], outputline_1[i], outputline_2[i]) for i in range(len(sourceline2_0))]


    rows = [r'$\tau$', 'age', r'N$_h$', r'lum$_{IR}$', 'SB', 'BB', 'GA', 'TO', r'E(B-V)$_{bbb}$', r'E(B-V)$_{gal}$']
    columns = [r'input',  r'output']

    tablearray = np.array([(itau, iage, inh, iirlum, iSB ,iBB, iGA,iTO, iBBebv, iGAebv), outputline ])
    tablearray_transpose = tablearray.T
    

    the_table = plt.table(cellText= tablearray_transpose,
                        colWidths=[1,1],
                      rowLabels=rows,
                      colLabels=columns, loc ='center',  bbox=[-1.25, 0, 0.25, 1]  ,cellLoc='center')
    #Changing heights
    table_props = the_table.properties()
    table_cells = table_props['child_artists']
    for cell in table_cells: cell.set_height(0.1)
    the_table.set_fontsize(18)





    
# Adjust layout to make room for the table:
  
    if catalog == 'data/MOCKagntype1.txt':
        print '/data2/calistro/AGNfitter/OUTPUT/MOCKagn1/'+str(source)+'/bigplot.pdf'
        plt.savefig('/data2/calistro/AGNfitter/OUTPUT/'+str(source)+'/bigplot_'+str(source)+'.pdf',bbox_inches='tight')
        plt.close(fig)

    if catalog == 'data/MOCKagn.txt':
        print '/Users/Gabriela/Codes/AGNfitter/OUTPUT/MOCK/'+str(source)+'/bigplot.pdf'
        plt.savefig('/data2/calistro/AGNfitter/OUTPUT/'+str(source)+'/bigplot_'+str(source)+'.pdf',bbox_inches='tight')
        plt.close(fig)


    elif catalog == 'data/MOCKagntype2.txt':
        print '/data2/calistro/AGNfitter/OUTPUT/'+str(source)+'/bigplot.pdf'
        plt.savefig('/data2/calistro/AGNfitter/OUTPUT/'+str(source)+'/bigplot_'+str(source)+'.pdf',bbox_inches='tight')
        plt.close(fig)
예제 #14
0
def general_plot1(filename, catalog, sourceline,  P, folder, opt, dict_modelsfiles, filterdict, path_AGNfitter, dict_modelfluxes):


    data_nus, ydata, ysigma = DATA(catalog, sourceline)
    z = REDSHIFT(catalog, sourceline)
    sourcename = NAME(catalog, sourceline)		
    path = os.path.abspath(__file__).rsplit('/', 1)[0]

    if not os.path.lexists(folder+str(sourcename)+'/samples_mcmc.sav'):
	print 'Error: The MCMC sampling has not been perfomed yet, or the chains were not saved properly.'

#==============================================

    samples = general.loadobj(filename)
    #nwalkers, nsamples, npar = samples['chain'].shape

    #ntemps, nwalkers, nsamples, npar = samples['chain'].shape
    nwalkers, nsamples, npar = samples['chain'].shape



    mean_accept =  samples['accept'].mean()
    print 'Mean acceptance fraction', mean_accept 
        

#======================================

    if filename.startswith(folder+str(sourcename)+'/samples_mcmc'):

        #Thinning
        Ns, Nt = opt['Nsample'], opt['Nthinning']

        assert Ns * Nt <= nsamples 

        chain_flat = samples['chain'][:,0:Ns*Nt:Nt,:].reshape(-1, npar)
                     #mix all walkers' steps into one chain
                     #of shape [(nwalkers*steps), parameters]
        lnprob = samples['lnprob'][:,0:Ns*Nt:Nt].ravel()
        isort = (-lnprob).argsort() #sort parameter vector for likelihood
        lnprob_sorted = np.reshape(lnprob[isort],(-1,1))
        lnprob_max = lnprob_sorted[0]
        chain_flat_sorted = chain_flat[isort]

        best_fit_par = chain_flat[isort[0]]
        total_length_chain = int(len(chain_flat))

        Nthin_compute = opt['realizations2compute'] #thinning chain to compute small
                                                #number of luminosities
        Nrealizations = opt['realizations2plot'] #thinning it even more
                                                 #for doing fewer superposed plots
	
        # calculate the model fluxes, mapping parameter space values to observables.

#=====================THE INPUT PARAMETERS=================================
    if catalog == 'data/MOCKagntype1.txt':
        
        mock_input, z_t1 = mock1.MOCKdata_chain()


    if catalog == 'data/MOCKagn.txt':
        
        mock_input, z_t1 = mock1.MOCKdata_chain()
        
    elif catalog == 'data/MOCKagntype2.txt':
        mock_input, z_t2 = mock2.MOCKdata_chain()
    
    

    all_nus, FLUXES4plotting, filtered_modelpoints, ifiltered_modelpoints = fluxes_arrays(data_nus, catalog, sourceline, dict_modelsfiles, filterdict, chain_flat_sorted, Nthin_compute,path_AGNfitter, dict_modelfluxes, mock_input)
    distance = model.z2Dlum(z)

    chain_best_sigma =[]

    for i in range(int(0.65*len(chain_flat_sorted))):	
        chain_best_sigma.append(chain_flat_sorted[i])	
    
    chain_best_sigma = np.array(chain_best_sigma)
	
#===================PLOT SEDS=======================


    plot_nr1 = PLOT_nr1(sourcename, catalog, data_nus, ydata, ysigma,  z, all_nus, FLUXES4plotting, filtered_modelpoints, ifiltered_modelpoints, Nrealizations, mock_input)


    print '************ =) ***********'
예제 #15
0
    def fluxes(self, data):
        """
        This is the main function of the class.
        """
        self.chain_obj.props()

        SBFnu_list = []
        BBFnu_list = []
        GAFnu_list = []
        TOFnu_list = []
        TOTALFnu_list = []
        BBFnu_deredd_list = []
        if self.output_type == 'plot':
            filtered_modelpoints_list = []

        gal_do, irlum_dict, nh_dict, BBebv_dict, _ = data.dictkey_arrays
        # Take the last 4 dictionaries, which are for plotting. (the first 4 were at bands)
        _, _, _, _, STARBURSTFdict, BBBFdict, GALAXYFdict, TORUSFdict, _ = data.dict_modelfluxes

        nsample, npar = self.chain_obj.flatchain.shape
        source = data.name

        if self.output_type == 'plot':
            tau, agelog, nh, irlum, SB, BB, GA, TO, BBebv, GAebv = self.chain_obj.flatchain[
                np.random.choice(nsample,
                                 (self.out['realizations2plot'])), :].T
        elif self.output_type == 'int_lums':
            tau, agelog, nh, irlum, SB, BB, GA, TO, BBebv, GAebv = self.chain_obj.flatchain[
                np.random.choice(nsample, (self.out['realizations2int'])), :].T
        elif self.output_type == 'best_fit':
            tau, agelog, nh, irlum, SB, BB, GA, TO, BBebv, GAebv = self.best_fit_pars

        age = 10**agelog

        self.all_nus_rest = np.arange(11.5, 16, 0.001)

        for g in range(len(tau)):

            # Pick dictionary key-values, nearest to the MCMC- parameter values
            irlum_dct = model.pick_STARBURST_template(irlum[g], irlum_dict)
            nh_dct = model.pick_TORUS_template(nh[g], nh_dict)
            ebvbbb_dct = model.pick_BBB_template(BBebv[g], BBebv_dict)
            gal_do.nearest_par2dict(tau[g], age[g], GAebv[g])
            tau_dct, age_dct, ebvg_dct = gal_do.t, gal_do.a, gal_do.e

            #Produce model fluxes at all_nus_rest for plotting, through interpolation
            all_gal_nus, gal_Fnus = GALAXYFdict[tau_dct, age_dct, ebvg_dct]
            GAinterp = scipy.interpolate.interp1d(all_gal_nus,
                                                  gal_Fnus,
                                                  bounds_error=False,
                                                  fill_value=0.)
            all_gal_Fnus = GAinterp(self.all_nus_rest)

            all_sb_nus, sb_Fnus = STARBURSTFdict[irlum_dct]
            SBinterp = scipy.interpolate.interp1d(all_sb_nus,
                                                  sb_Fnus,
                                                  bounds_error=False,
                                                  fill_value=0.)
            all_sb_Fnus = SBinterp(self.all_nus_rest)

            all_bbb_nus, bbb_Fnus = BBBFdict[ebvbbb_dct]
            BBinterp = scipy.interpolate.interp1d(all_bbb_nus,
                                                  bbb_Fnus,
                                                  bounds_error=False,
                                                  fill_value=0.)
            all_bbb_Fnus = BBinterp(self.all_nus_rest)

            all_bbb_nus, bbb_Fnus_deredd = BBBFdict['0.0']
            BBderedinterp = scipy.interpolate.interp1d(all_bbb_nus,
                                                       bbb_Fnus_deredd,
                                                       bounds_error=False,
                                                       fill_value=0.)
            all_bbb_Fnus_deredd = BBderedinterp(self.all_nus_rest)

            all_tor_nus, tor_Fnus = TORUSFdict[nh_dct]
            TOinterp = scipy.interpolate.interp1d(all_tor_nus,
                                                  np.log10(tor_Fnus),
                                                  bounds_error=False,
                                                  fill_value=0.)
            all_tor_Fnus = 10**(TOinterp(self.all_nus_rest))

            if self.output_type == 'plot':
                par2 = tau[g], agelog[g], nh[g], irlum[g], SB[g], BB[g], GA[
                    g], TO[g], BBebv[g], GAebv[g]
                filtered_modelpoints, _, _ = parspace.ymodel(
                    data.nus, data.z, data.dictkey_arrays,
                    data.dict_modelfluxes, *par2)

            #Using the costumized normalization
            SBFnu = (all_sb_Fnus / 1e20) * 10**float(SB[g])
            BBFnu = (all_bbb_Fnus / 1e60) * 10**float(BB[g])
            GAFnu = (all_gal_Fnus / 1e18) * 10**float(GA[g])
            TOFnu = (all_tor_Fnus / 1e-40) * 10**float(TO[g])
            BBFnu_deredd = (all_bbb_Fnus_deredd / 1e60) * 10**float(BB[g])

            TOTALFnu = SBFnu + BBFnu + GAFnu + TOFnu

            #Append to the list for all realizations
            SBFnu_list.append(SBFnu)
            BBFnu_list.append(BBFnu)
            GAFnu_list.append(GAFnu)
            TOFnu_list.append(TOFnu)
            TOTALFnu_list.append(TOTALFnu)
            BBFnu_deredd_list.append(BBFnu_deredd)
            #Only if SED plotting: do the same with the  modelled flux values at each data point
            if self.output_type == 'plot':
                filtered_modelpoints_list.append(filtered_modelpoints)

        #Convert lists into Numpy arrays
        SBFnu_array = np.array(SBFnu_list)
        BBFnu_array = np.array(BBFnu_list)
        GAFnu_array = np.array(GAFnu_list)
        TOFnu_array = np.array(TOFnu_list)
        TOTALFnu_array = np.array(TOTALFnu_list)
        BBFnu_array_deredd = np.array(BBFnu_deredd_list)

        #Put them all together to transport
        FLUXES4plotting = (SBFnu_array, BBFnu_array, GAFnu_array, TOFnu_array,
                           TOTALFnu_array, BBFnu_array_deredd)
        #Convert Fluxes to nuLnu
        self.nuLnus4plotting = self.FLUXES2nuLnu_4plotting(
            self.all_nus_rest, FLUXES4plotting, data.z)

        #Only if SED plotting:
        if self.output_type == 'plot':
            filtered_modelpoints = np.array(filtered_modelpoints_list)
            distance = model.z2Dlum(data.z)
            lumfactor = (4. * math.pi * distance**2.)
            self.filtered_modelpoints_nuLnu = (filtered_modelpoints *
                                               lumfactor * 10**(data.nus))
        #Only if calculating integrated luminosities:
        elif self.output_type == 'int_lums':
            self.int_lums = np.log10(
                self.integrated_luminosities(self.out, self.all_nus_rest,
                                             self.nuLnus4plotting))
예제 #16
0
    def fluxes(self, data):    

        """
        This is the main function of the class.
        """
        self.chain_obj.props()

        SBFnu_list = []
        BBFnu_list = []
        GAFnu_list= []
        TOFnu_list = []
        TOTALFnu_list = []
        BBFnu_deredd_list = []
        if self.output_type == 'plot':
            filtered_modelpoints_list = []


        gal_do,  irlum_dict, nh_dict, BBebv_dict,_ = data.dictkey_arrays
        # Take the last 4 dictionaries, which are for plotting. (the first 4 were at bands)
        _,_,_,_,STARBURSTFdict , BBBFdict, GALAXYFdict, TORUSFdict,_= data.dict_modelfluxes

        nsample, npar = self.chain_obj.flatchain.shape
        source = data.name

        if self.output_type == 'plot':
            tau, agelog, nh, irlum, SB ,BB, GA,TO, BBebv, GAebv= self.chain_obj.flatchain[np.random.choice(nsample, (self.out['realizations2plot'])),:].T
        elif self.output_type == 'int_lums':
            tau, agelog, nh, irlum, SB ,BB, GA,TO, BBebv, GAebv= self.chain_obj.flatchain[np.random.choice(nsample, (self.out['realizations2int'])),:].T
        elif self.output_type == 'best_fit':
            tau, agelog, nh, irlum, SB ,BB, GA,TO, BBebv, GAebv= self.best_fit_pars

        age = 10**agelog

        self.all_nus_rest = np.arange(11.5, 16, 0.001) 

        for g in range(len(tau)):


            # Pick dictionary key-values, nearest to the MCMC- parameter values
            irlum_dct = model.pick_STARBURST_template(irlum[g], irlum_dict)
            nh_dct = model.pick_TORUS_template(nh[g], nh_dict)
            ebvbbb_dct = model.pick_BBB_template(BBebv[g], BBebv_dict)
            gal_do.nearest_par2dict(tau[g], age[g], GAebv[g])
            tau_dct, age_dct, ebvg_dct=gal_do.t, gal_do.a,gal_do.e

            #Produce model fluxes at all_nus_rest for plotting, through interpolation
            all_gal_nus, gal_Fnus = GALAXYFdict[tau_dct, age_dct,ebvg_dct]   
            GAinterp = scipy.interpolate.interp1d(all_gal_nus, gal_Fnus, bounds_error=False, fill_value=0.)
            all_gal_Fnus = GAinterp(self.all_nus_rest)

            all_sb_nus, sb_Fnus= STARBURSTFdict[irlum_dct] 
            SBinterp = scipy.interpolate.interp1d(all_sb_nus, sb_Fnus, bounds_error=False, fill_value=0.)
            all_sb_Fnus = SBinterp(self.all_nus_rest)

            all_bbb_nus, bbb_Fnus = BBBFdict[ebvbbb_dct] 
            BBinterp = scipy.interpolate.interp1d(all_bbb_nus, bbb_Fnus, bounds_error=False, fill_value=0.)
            all_bbb_Fnus = BBinterp(self.all_nus_rest)

            all_bbb_nus, bbb_Fnus_deredd = BBBFdict['0.0']
            BBderedinterp = scipy.interpolate.interp1d(all_bbb_nus, bbb_Fnus_deredd, bounds_error=False, fill_value=0.)
            all_bbb_Fnus_deredd = BBderedinterp(self.all_nus_rest)

            all_tor_nus, tor_Fnus= TORUSFdict[nh_dct]
            TOinterp = scipy.interpolate.interp1d(all_tor_nus, np.log10(tor_Fnus), bounds_error=False, fill_value=0.)
            all_tor_Fnus = 10**(TOinterp(self.all_nus_rest))        


            if self.output_type == 'plot':
                par2 = tau[g], agelog[g], nh[g], irlum[g], SB[g] ,BB[g], GA[g] ,TO[g], BBebv[g], GAebv[g]
                filtered_modelpoints, _, _ = parspace.ymodel(data.nus,data.z, data.dictkey_arrays, data.dict_modelfluxes, *par2)
                

            #Using the costumized normalization 
            SBFnu =   (all_sb_Fnus /1e20) *10**float(SB[g]) 
            BBFnu = (all_bbb_Fnus /1e60) * 10**float(BB[g]) 
            GAFnu =   (all_gal_Fnus/ 1e18) * 10**float(GA[g]) 
            TOFnu =   (all_tor_Fnus/  1e-40) * 10**float(TO[g])
            BBFnu_deredd = (all_bbb_Fnus_deredd /1e60) * 10**float(BB[g])

            TOTALFnu =  SBFnu + BBFnu + GAFnu + TOFnu
            
            #Append to the list for all realizations
            SBFnu_list.append(SBFnu)
            BBFnu_list.append(BBFnu)
            GAFnu_list.append(GAFnu)
            TOFnu_list.append(TOFnu)
            TOTALFnu_list.append(TOTALFnu)
            BBFnu_deredd_list.append(BBFnu_deredd)
            #Only if SED plotting: do the same with the  modelled flux values at each data point 
            if self.output_type == 'plot':
                filtered_modelpoints_list.append(filtered_modelpoints)


        #Convert lists into Numpy arrays
        SBFnu_array = np.array(SBFnu_list)
        BBFnu_array = np.array(BBFnu_list)
        GAFnu_array = np.array(GAFnu_list)
        TOFnu_array = np.array(TOFnu_list)
        TOTALFnu_array = np.array(TOTALFnu_list)
        BBFnu_array_deredd = np.array(BBFnu_deredd_list)    

        #Put them all together to transport
        FLUXES4plotting = (SBFnu_array, BBFnu_array, GAFnu_array, TOFnu_array, TOTALFnu_array,BBFnu_array_deredd)
        #Convert Fluxes to nuLnu
        self.nuLnus4plotting = self.FLUXES2nuLnu_4plotting(self.all_nus_rest, FLUXES4plotting, data.z)

        #Only if SED plotting:
        if self.output_type == 'plot':
            filtered_modelpoints = np.array(filtered_modelpoints_list)
            distance= model.z2Dlum(data.z)
            lumfactor = (4. * math.pi * distance**2.)
            self.filtered_modelpoints_nuLnu = (filtered_modelpoints *lumfactor* 10**(data.nus))
        #Only if calculating integrated luminosities:    
        elif self.output_type == 'int_lums':
            self.int_lums= np.log10(self.integrated_luminosities(self.out ,self.all_nus_rest, self.nuLnus4plotting))
예제 #17
0
    def fluxes(self, data):
        """
        This is the main function of the class.
        """
        self.chain_obj.props()

        SBFnu_list = []
        BBFnu_list = []
        GAFnu_list = []
        TOFnu_list = []
        TOTALFnu_list = []
        BBFnu_deredd_list = []
        if self.output_type == 'plot':
            filtered_modelpoints_list = []

        gal_obj, sb_obj, tor_obj, bbb_obj = data.dictkey_arrays

        # Take the  4 dictionaries for plotting. Dicts are described in DICTIONARIES_AGNfitter.py
        _, _, _, _, STARBURSTFdict, BBBFdict, GALAXYFdict, TORUSFdict, _, _ = data.dict_modelfluxes

        nsample, npar = self.chain_obj.flatchain.shape
        source = data.name

        if self.output_type == 'plot':
            par = self.chain_obj.flatchain[np.random.choice(
                nsample, (self.out['realizations2plot'])), :]  #.T
        elif self.output_type == 'int_lums':
            par = self.chain_obj.flatchain[np.random.choice(
                nsample, (self.out['realizations2int'])), :]  #.T
        elif self.output_type == 'best_fit':
            par = self.chain_obj.best_fit_pars

        if self.models['BBB'] == 'D12_S' or self.models['BBB'] == 'D12_K':
            self.all_nus_rest = np.arange(11.5, 19, 0.001)
        else:
            self.all_nus_rest = np.arange(11.5, 16.2, 0.001)

        if self.output_type == 'plot' or self.output_type == 'int_lums':

            for g in range(self.out['realizations2plot']):

                ## Pick dictionary key-values, nearest to the MCMC- parameter values
                ## Use pick_nD if model has more than one parameter,
                ## and pick_1D if it has only one.
                gal_obj.pick_nD(par[g][self.P['idxs'][0]:self.P['idxs'][1]])
                tor_obj.pick_1D(par[g][self.P['idxs'][2]:self.P['idxs'][3]])

                if len(sb_obj.par_names) == 1:
                    sb_obj.pick_1D(par[g][self.P['idxs'][1]:self.P['idxs'][2]])
                    all_sb_nus, sb_Fnus = STARBURSTFdict[
                        sb_obj.matched_parkeys]
                else:
                    sb_obj.pick_nD(par[g][self.P['idxs'][1]:self.P['idxs'][2]])
                    all_sb_nus, sb_Fnus = STARBURSTFdict[tuple(
                        sb_obj.matched_parkeys)]

                if len(bbb_obj.par_names) == 1:
                    GA, SB, TO, BB = par[g][-4:]
                    bbb_obj.pick_1D(
                        par[g][self.P['idxs'][3]:self.P['idxs'][4]])
                    all_bbb_nus, bbb_Fnus = BBBFdict[bbb_obj.matched_parkeys]
                #print bbb_Fnus
                else:
                    GA, SB, TO = par[g][-3:]
                    BB = 0.
                    bbb_obj.pick_nD(
                        par[g][self.P['idxs'][3]:self.P['idxs'][4]])
                    all_bbb_nus, bbb_Fnus = BBBFdict[tuple(
                        bbb_obj.matched_parkeys)]

            #Produce model fluxes at all_nus_rest for plotting, through interpolation
                all_gal_nus, gal_Fnus = GALAXYFdict[tuple(
                    gal_obj.matched_parkeys)]
                GAinterp = scipy.interpolate.interp1d(all_gal_nus,
                                                      gal_Fnus,
                                                      bounds_error=False,
                                                      fill_value=0.)
                all_gal_Fnus = GAinterp(self.all_nus_rest)

                SBinterp = scipy.interpolate.interp1d(all_sb_nus,
                                                      sb_Fnus,
                                                      bounds_error=False,
                                                      fill_value=0.)
                all_sb_Fnus = SBinterp(self.all_nus_rest)

                BBinterp = scipy.interpolate.interp1d(all_bbb_nus,
                                                      bbb_Fnus,
                                                      bounds_error=False,
                                                      fill_value=0.)
                all_bbb_Fnus = BBinterp(self.all_nus_rest)

                ### Plot dereddened
                if len(bbb_obj.par_names) == 1:
                    all_bbb_nus, bbb_Fnus_deredd = BBBFdict['0.0']
                    BBderedinterp = scipy.interpolate.interp1d(
                        all_bbb_nus,
                        bbb_Fnus_deredd,
                        bounds_error=False,
                        fill_value=0.)
                    all_bbb_Fnus_deredd = BBderedinterp(self.all_nus_rest)
                else:
                    all_bbb_Fnus_deredd = all_bbb_Fnus

                all_tor_nus, tor_Fnus = TORUSFdict[tor_obj.matched_parkeys]
                TOinterp = scipy.interpolate.interp1d(all_tor_nus,
                                                      np.log10(tor_Fnus),
                                                      bounds_error=False,
                                                      fill_value=0.)
                all_tor_Fnus = 10**(TOinterp(self.all_nus_rest))
                all_tor_Fnus[self.all_nus_rest > 16] = 0

                if self.output_type == 'plot':
                    par2 = par[g]
                    #print data.dictkey_arrays
                    filtered_modelpoints, _, _ = parspace.ymodel(
                        data.nus, data.z, data.dlum, data.dictkey_arrays,
                        data.dict_modelfluxes, self.P, *par2)
                    #print filtered_modelpoints

                #Using the costumized normalization
                SBFnu = (all_sb_Fnus / 1e20) * 10**float(SB)
                BBFnu = (all_bbb_Fnus / 1e60) * 10**float(
                    BB)  # * (data.dlum)**2
                GAFnu = (all_gal_Fnus / 1e18) * 10**float(GA)
                TOFnu = (all_tor_Fnus / 1e-40) * 10**float(TO)
                BBFnu_deredd = (all_bbb_Fnus_deredd / 1e60) * 10**float(BB)

                TOTALFnu = SBFnu + BBFnu + GAFnu + TOFnu

                #Append to the list for all realizations
                SBFnu_list.append(SBFnu)
                BBFnu_list.append(BBFnu)
                GAFnu_list.append(GAFnu)
                TOFnu_list.append(TOFnu)
                TOTALFnu_list.append(TOTALFnu)
                BBFnu_deredd_list.append(BBFnu_deredd)
                #Only if SED plotting: do the same with the  modelled flux values at each data point
                if self.output_type == 'plot':
                    filtered_modelpoints_list.append(filtered_modelpoints)

            #Convert lists into Numpy arrays
            SBFnu_array = np.array(SBFnu_list)
            BBFnu_array = np.array(BBFnu_list)
            GAFnu_array = np.array(GAFnu_list)
            TOFnu_array = np.array(TOFnu_list)
            TOTALFnu_array = np.array(TOTALFnu_list)
            BBFnu_array_deredd = np.array(BBFnu_deredd_list)

            #Put them all together to transport
            FLUXES4plotting = (SBFnu_array, BBFnu_array, GAFnu_array,
                               TOFnu_array, TOTALFnu_array, BBFnu_array_deredd)
            #Convert Fluxes to nuLnu
            self.nuLnus4plotting = self.FLUXES2nuLnu_4plotting(
                self.all_nus_rest, FLUXES4plotting, data.z)

        elif self.output_type == 'best_fit':

            ## Pick dictionary key-values, nearest to the MCMC- parameter values
            ## Use pick_nD if model has more than one parameter,
            ## and pick_1D if it has only one.
            gal_obj.pick_nD(par[self.P['idxs'][0]:self.P['idxs'][1]])
            tor_obj.pick_1D(par[self.P['idxs'][2]:self.P['idxs'][3]])

            if len(sb_obj.par_names) == 1:
                sb_obj.pick_1D(par[self.P['idxs'][1]:self.P['idxs'][2]])
                all_sb_nus, sb_Fnus = STARBURSTFdict[sb_obj.matched_parkeys]
            else:
                sb_obj.pick_nD(par[self.P['idxs'][1]:self.P['idxs'][2]])
                all_sb_nus, sb_Fnus = STARBURSTFdict[tuple(
                    sb_obj.matched_parkeys)]

            if len(bbb_obj.par_names) == 1:
                GA, SB, TO, BB = par[-4:]
                bbb_obj.pick_1D(par[self.P['idxs'][3]:self.P['idxs'][4]])
                all_bbb_nus, bbb_Fnus = BBBFdict[bbb_obj.matched_parkeys]
            #print bbb_Fnus
            else:
                GA, SB, TO = par[-3:]
                BB = 0.
                bbb_obj.pick_nD(par[self.P['idxs'][3]:self.P['idxs'][4]])
                all_bbb_nus, bbb_Fnus = BBBFdict[tuple(
                    bbb_obj.matched_parkeys)]

        #Produce model fluxes at all_nus_rest for plotting, through interpolation
            all_gal_nus, gal_Fnus = GALAXYFdict[tuple(gal_obj.matched_parkeys)]
            GAinterp = scipy.interpolate.interp1d(all_gal_nus,
                                                  gal_Fnus,
                                                  bounds_error=False,
                                                  fill_value=0.)
            all_gal_Fnus = GAinterp(self.all_nus_rest)

            SBinterp = scipy.interpolate.interp1d(all_sb_nus,
                                                  sb_Fnus,
                                                  bounds_error=False,
                                                  fill_value=0.)
            all_sb_Fnus = SBinterp(self.all_nus_rest)

            BBinterp = scipy.interpolate.interp1d(all_bbb_nus,
                                                  bbb_Fnus,
                                                  bounds_error=False,
                                                  fill_value=0.)
            all_bbb_Fnus = BBinterp(self.all_nus_rest)

            ### Plot dereddened
            if len(bbb_obj.par_names) == 1:
                all_bbb_nus, bbb_Fnus_deredd = BBBFdict['0.0']
                BBderedinterp = scipy.interpolate.interp1d(all_bbb_nus,
                                                           bbb_Fnus_deredd,
                                                           bounds_error=False,
                                                           fill_value=0.)
                all_bbb_Fnus_deredd = BBderedinterp(self.all_nus_rest)
            else:
                all_bbb_Fnus_deredd = all_bbb_Fnus

            all_tor_nus, tor_Fnus = TORUSFdict[tor_obj.matched_parkeys]
            TOinterp = scipy.interpolate.interp1d(all_tor_nus,
                                                  np.log10(tor_Fnus),
                                                  bounds_error=False,
                                                  fill_value=0.)
            all_tor_Fnus = 10**(TOinterp(self.all_nus_rest))
            all_tor_Fnus[self.all_nus_rest > 16] = 0

            par2 = par
            #print data.dictkey_arrays
            filtered_modelpoints, _, _ = parspace.ymodel(
                data.nus, data.z, data.dlum, data.dictkey_arrays,
                data.dict_modelfluxes, self.P, *par2)
            #print filtered_modelpoints

            #Using the costumized normalization
            SBFnu = (all_sb_Fnus / 1e20) * 10**float(SB)
            BBFnu = (all_bbb_Fnus / 1e60) * 10**float(BB)  # * (data.dlum)**2
            GAFnu = (all_gal_Fnus / 1e18) * 10**float(GA)
            TOFnu = (all_tor_Fnus / 1e-40) * 10**float(TO)
            BBFnu_deredd = (all_bbb_Fnus_deredd / 1e60) * 10**float(BB)

            TOTALFnu = SBFnu + BBFnu + GAFnu + TOFnu

            #Put them all together to transport
            FLUXES4plotting = (SBFnu, BBFnu, GAFnu, TOFnu, TOTALFnu,
                               BBFnu_deredd)
            #Convert Fluxes to nuLnu
            self.nuLnus4plotting = self.FLUXES2nuLnu_4plotting(
                self.all_nus_rest, FLUXES4plotting, data.z)

        #Only if SED plotting:
        if self.output_type == 'plot':
            filtered_modelpoints = np.array(filtered_modelpoints_list)
            distance = model.z2Dlum(data.z)
            lumfactor = (4. * math.pi * distance**2.)
            self.filtered_modelpoints_nuLnu = (filtered_modelpoints *
                                               lumfactor * 10**(data.nus))
            #print self.filtered_modelpoints_nuLnu
            #print 10**(data.nus)
        #Only if calculating integrated luminosities:
        elif self.output_type == 'int_lums':
            self.int_lums = np.log10(
                self.integrated_luminosities(self.out, self.all_nus_rest,
                                             self.nuLnus4plotting))
        elif self.output_type == 'best_fit':
            distance = model.z2Dlum(data.z)
            lumfactor = (4. * math.pi * distance**2.)
            self.filtered_modelpoints_nuLnu = (filtered_modelpoints *
                                               lumfactor * 10**(data.nus))
def main(filename, catalog, sourceline,  P, folder, opt, dict_modelsfiles, filterdict, path_AGNfitter, dict_modelfluxes):


    z = REDSHIFT(catalog, sourceline)
    
    sourcename = NAME(catalog, sourceline)      
 
    data_nus, ydata, ysigma = DATA(catalog, sourceline)

    array = np.arange(len(data_nus))
    index_dataexist = array[(data_nus< np.log10(10**(15.38)/(1+z))) & (ydata>-99.)]


    path = os.path.abspath(__file__).rsplit('/', 1)[0]

    if not os.path.lexists(folder+str(sourcename)+'/samples_mcmc.sav'):
        print 'Error: The MCMC sampling has not been perfomed yet, or the chains were not saved properly.'

#==============================================

    samples = general.loadobj(filename)
    nwalkers, nsamples, npar = samples['chain'].shape

    nwalkers, nsamples, npar = samples['chain'].shape
    

    mean_accept =  samples['accept'].mean()
    print 'Mean acceptance fraction', mean_accept
    if opt['plottraces_burn-in'] :  
        

#=================== BURN-IN =================
 
      if filename.startswith(folder+str(sourcename)+'/samples_burn1-2-3'):

        if opt['plottraces_burn-in'] :    
            print 'Plotting traces of burn-in'
            fig, nwplot = plot_trace_burnin123(P, samples['chain'], samples['lnprob'])
            fig.suptitle('Chain traces for %i steps of %i walkers' % (nwplot,nwalkers))
            fig.savefig(folder+str(sourcename)+'/traces1-2-3.' +  opt['plotformat'])
            pl.close(fig)   

        if opt['plotautocorr'] :
     
            fig, axes = general.plot_autocorr(samples['chain'], P)
            fig.suptitle('Autocorrelation for %i walkers with %i samples. '
                         '(Mean acceptance fraction %.2f)' %
                         (nwalkers, nsamples, mean_accept), fontsize=14)
            fig.savefig(folder+str(sourcename)+'/autocorr1-2-3.' +  opt['plotformat'])

#===================MCMC===================== 

    if filename.startswith(folder+str(sourcename)+'/samples_mcmc'):

        #Thinning
        Ns, Nt = opt['Nsample'], opt['Nthinning']

        assert Ns * Nt <= nsamples 

        chain_flat = samples['chain'][:,0:Ns*Nt:Nt,:].reshape(-1, npar)
                     #mix all walkers' steps into one chain
                     #of shape [(nwalkers*steps), parameters]
        lnprob = samples['lnprob'][:,0:Ns*Nt:Nt].ravel()
        isort = (-lnprob).argsort() #sort parameter vector for likelihood
        lnprob_sorted = np.reshape(lnprob[isort],(-1,1))
        lnprob_max = lnprob_sorted[0]
        chain_flat_sorted = chain_flat[isort]

        best_fit_par = chain_flat[isort[0]]
        total_length_chain = int(len(chain_flat))

        Nthin_compute = opt['realizations2compute'] #thinning chain to compute small
                                                #number of luminosities
        Nrealizations = opt['realizations2plot'] #thinning it even more
                                                 #for doing fewer superposed plots
    

        all_nus, FLUXES4plotting, filtered_modelpoints = fluxes_arrays(data_nus, catalog, sourceline, dict_modelsfiles, filterdict, chain_flat_sorted, Nthin_compute,path_AGNfitter, dict_modelfluxes)
        # calculate the model fluxes, mapping parameter space values to observables.
        


#=================PLOT_TRACES===================

        if opt['plottraces_mcmc'] : 

            print 'Plotting traces of mcmc'
            fig, nwplot = plot_trace_mcmc(P, samples['chain'],samples['lnprob'])
            fig.suptitle('Chain traces for %i of %i walkers. Main acceptance fraction: %f' % (nwplot,nwalkers,mean_accept))
            fig.savefig(folder+str(sourcename)+'/traces_mcmc.' + opt['plotformat'])
            pl.close(fig)

#===============INTEGRATE LUMINOSITIES=================


        if opt['integratedlum']:
            print 'Computing integrated luminosities Loptuv_GA, LMir_TO, LMir_SB, Loptuv_BB, LFir_8-1000'
            #print 'Saving in: ', folder + str(sourcename)+'/integrated_luminosities_'+str(sourcename)+'.txt'
            L0, L1, L2, L3, L4 , L5=integrated_luminosities_arrays(all_nus, FLUXES4plotting, Nthin_compute, total_length_chain, z, folder, sourcename)
            #Loptuv_BB, Loptuv_GA, LMir_TO, LMir_SB, Loptuv_BB, LFir_8-1000

#==================PLOT PDF TRIANGLE=================

        if opt['posteriortriangle']:
            print 'Plotting triangle of PDFs of parameters.'
            figure = plot_posteriors_triangle_pars(chain_flat, best_fit_par)
            figure.savefig(folder+str(sourcename)+'/posterior_triangle_pars_'+str(sourcename)+'.' + opt['plotformat'])
            pl.close(figure)

### change this opt to opt['posteriortriangleofluminosities]
        if opt['posteriortrianglewithluminosities'] :

            if not os.path.lexists(folder+str(sourcename)+'/integrated_luminosities_'+str(sourcename)+'.txt'):
                L0, L1, L2, L3, L4, L5 =integrated_luminosities_arrays(all_nus, FLUXES4plotting, Nthin_compute, total_length_chain ,z, folder, sourcename)
                print 'Plotting triangle of PDFs of derived quantities.'
            L0, L1, L2, L3, L4, L5 = np.loadtxt(folder + str(sourcename)+'/integrated_luminosities_'+str(sourcename)+'.txt', usecols=(0,1,2,3,4,5),unpack= True)
            chain_others = np.column_stack((L0, L1, L2, L3, L4, L5))
            chain_luminosities = np.column_stack((L0, L1, L2, L3, L4, L5))  

            figure2= plot_posteriors_triangle_other_quantities(chain_others)
            figure2.savefig(folder+str(sourcename)+'/posterior_triangle_others_'+str(sourcename)+'.'+ opt['plotformat'])
            pl.close(figure2)   


#-==========PRINT PARAMETERS WITH UNCERTAINTIES=============

        if opt['printpar_meanwitherrors']:

            if not opt['integratedlum']:
                L0, L1, L2, L3, L4, L5 =integrated_luminosities_arrays(all_nus, FLUXES4plotting, Nthin_compute, total_length_chain ,z, folder, sourcename)
                
            print 'Printing mean values of the parameters with corresponding errors.'

            
            
            chain_pars_and_others = np.column_stack((chain_flat_sorted, L0, L1, L2, L3, L4, L5 ))
            tau_e, age_e, nh_e, irlum_e, SB_e, BB_e, GA_e, TO_e, BBebv_e, GAebv_e, L0_e, L1_e, L2_e, L3_e, L4_e, L5_e = parameters_with_errors(chain_pars_and_others)
            parameters_with_errors_transpose= np.transpose(parameters_with_errors(chain_pars_and_others))

            L5_e_transpose = np.transpose(L5_e)


            Mstar_e, SFR_e, SFR_file_e = model.stellar_info(parameters_with_errors_transpose, catalog, sourceline, path_AGNfitter)
           
            SFR_IR_e = model.sfr_IR(L5_e)


            Mstar_e = np.reshape(Mstar_e,(-1,1))
            SFR_e = np.reshape(SFR_e,(-1,1))
            SFR_file_e = np.reshape(SFR_file_e,(-1,1))      
            SFR_IR_e = np.reshape(SFR_IR_e, (-1,1))
            
           
        #L0_e, L1_e, L2_e, L3_e, L4_e is L_sb, L_bbb, L_ga, L_to, Lbb_dered

            output_error = np.column_stack((tau_e, age_e, nh_e, irlum_e, SB_e, BB_e, GA_e, TO_e, BBebv_e, GAebv_e, Mstar_e, SFR_e, SFR_file_e, L0_e, L1_e, L2_e, L3_e, L4_e, L5_e, SFR_IR_e)) 
            np.savetxt(folder + str(sourcename)+'/parameters_with_errors_1_'+str(sourcename)+'.txt' , output_error, delimiter = " ",fmt="%s" ,header="tau_e, age_e, nh_e, irlum_e, SB_e, BB_e, GA_e, TO_e, BBebv_e, GAebv_e, Mstar_e, SFR_e, SFR_file_e, L0_e, L1_e, L2_e, L3_e, L4_e, L5_e, SFR_IR ")


        if opt['printpar_onesigmarealisations']:
            #ERASE
            print 'Printint all values of the parameters corresponding to realisation with the best 65% likelihoods.'
 
#-==========PRINT MAX LIKELIHOOD=============


        if opt['printpar_maxlikelihood']:
            print 'Printing parameters of maximum likelihood'
            distance = model.z2Dlum(z)
            Mstar, SFR, SFR_file = model.stellar_info_best(best_fit_par, catalog, sourceline, path_AGNfitter)
            L0_b = L0[0]
            L1_b = L1[0]
            L2_b= L2[0]
            L3_b= L3[0]
            L4_b = L4[0]
            L5_b = L5[0]
            L5_reshaped=np.reshape(L5[0],(-1,1)) 
            
            SFR_IR =np.reshape((model.sfr_IR(L5_reshaped)), (1))

        
            output = np.hstack((best_fit_par, np.log10(Mstar), SFR, SFR_file , lnprob_max, L0_b, L1_b, L2_b, L3_b, L4_b, L5_b ,SFR_IR))
            output_names = np.array(['tau ','age',' nhv',' irlum ','SB',' BB ','GA',' TO ','BBebv ','GAebv ','Mstar ','SFR ','SFR_file','ln_likelihood','L0_b', 'L1_b', 'L2_b', 'L3_b', 'L4_b', 'L5_b','SFR_IR'])                                           
            np.savetxt(folder + str(sourcename)+'/max_likelihood_parameters_1_'+ str(sourcename) + '.txt' , np.column_stack((output, output_names)), delimiter = " ",fmt="%s" ,header="Maximum likelihood parameters (Chi2Minimization)")

        #===================PLOT SEDS=======================

        if opt['plotSEDbest']:

            fig = PLOT_SED_bestfit(sourcename, data_nus, ydata, ysigma, z, all_nus, FLUXES4plotting, filtered_modelpoints, index_dataexist)
            plt.savefig(folder+str(sourcename)+'/SED_best_'+str(sourcename)+'.pdf', format = 'pdf')
            plt.close(fig)

        if opt['plotSEDrealizations']:

            fig = PLOT_SED_manyrealizations(sourcename, data_nus, ydata, ysigma, z, all_nus, FLUXES4plotting, Nrealizations, filtered_modelpoints, index_dataexist)
            plt.savefig(folder+str(sourcename)+'/SED_realizations_'+str(sourcename)+'.pdf', format = 'pdf')
            plt.close(fig)


    print '************ =) ***********'