コード例 #1
0
def graficar_data(theta, params_fijos, index=0,
                    dataset_SN=None, dataset_CC=None,
                    dataset_BAO=None, dataset_AGN=None, dataset_BAO_odintsov=None,
                    H0_Riess=False, cantidad_zs=int(10**5), model='HS',n=1,
                    nuisance_2 = False, errores_agrandados=False,close=False,
                    save_path=None,ebeta=None):
    '''Dados los parámetros del modelo devuelve un chi2 para los datos
    de supernovas.'''

    if save_path==None:
        path = os.chdir(path_datos_global+'/Graficos de datos')
    else:
        path = save_path

    [Mabs, omega_m, b, H_0] = all_parameters(theta, params_fijos, index)

    params_fisicos = [omega_m,b,H_0]
    zs_modelo, Hs_modelo = Hubble_teorico(params_fisicos, n=n, model=model,
                                z_min=0, z_max=10, cantidad_zs=cantidad_zs)
                                #Los datos de AGN van hasta z mas altos!
    Hs_interpolado = interp1d(zs_modelo, Hs_modelo)
    int_inv_Hs = cumtrapz(Hs_modelo**(-1), zs_modelo, initial=0)
    int_inv_Hs_interpolado = interp1d(zs_modelo, int_inv_Hs)

    if dataset_SN != None:
        #Importo los datos
        zcmb, zhel, Cinv, mb = dataset_SN
        muth = magn_aparente_teorica(int_inv_Hs_interpolado, zcmb, zhel)
        muobs =  mb - Mabs

        plt.figure()
        plt.grid()
        emu=np.sqrt(np.diag(np.linalg.inv(Cinv)))
        plt.title('Supernovas IA ({})'.format(model))
        plt.plot(zcmb,muth,'.',label='teorico')
        plt.errorbar(zcmb,muobs,emu,fmt='.', label='datos')
        plt.legend()
        plt.savefig('SN_mabs={}_omega={}_b={}_H0={}_model={}.png'.format(Mabs,omega_m,b,H_0,model))
        if close==True:
            plt.close()


    if dataset_CC != None:
        #Importo los datos
        z_data, H_data, dH = dataset_CC
        H_interp = interp1d(zs_modelo, Hs_modelo)
        H_teo = H_interp(z_data)

        plt.figure()
        plt.grid()
        plt.title('Cronómetros Cósmicos ({})'.format(model))
        plt.plot(zs_modelo,Hs_modelo,label='teorico')
        plt.errorbar(z_data,H_data,dH,fmt='.',label='datos')
        plt.legend()
        plt.savefig('CC_omega={}_b={}_H0={}_model={}.png'.format(omega_m,b,H_0,model))
        if close==True:
            plt.close()

    if dataset_BAO != None:
        num_datasets=5
        legends_datasets = ['Da_rd','Dh_rd','Dm_rd','Dv_rd','H*rd']
        for i in range(num_datasets): #Para cada tipo de dato
            (z_data_BAO, valores_data, errores_data_cuad,wb_fid) = dataset_BAO[i]
            if i==0: #Dato de Da
                rd = r_drag(omega_m,H_0,wb_fid) #Calculo del rd
                distancias_teoricas = Hs_to_Ds(Hs_interpolado, int_inv_Hs_interpolado, z_data_BAO, i)
                output_teorico = Ds_to_obs_final(zs_modelo, distancias_teoricas, rd, i)
            else: #De lo contrario..
                distancias_teoricas = Hs_to_Ds(Hs_interpolado, int_inv_Hs_interpolado, z_data_BAO, i)
                output_teorico = np.zeros(len(z_data_BAO))
                for j in range(len(z_data_BAO)): #Para cada dato de una especie
                     rd = r_drag(omega_m,H_0,wb_fid[j]) #Calculo del rd
                     output_teorico[j] = Ds_to_obs_final(zs_modelo,distancias_teoricas[j],rd,i)
            #Calculo el chi2 para cada tipo de dato (i)
            plt.figure()
            plt.title('{} ({})'.format(legends_datasets[i],model))
            plt.grid()
            plt.plot(z_data_BAO,output_teorico,'.',label='teorico')
            plt.errorbar(z_data_BAO,valores_data,np.sqrt(errores_data_cuad),fmt='.',label='datos')
            plt.legend()
            plt.savefig('BAO_{}_omega={}_b={}_H0={}_model={}.png'.format(legends_datasets[i],omega_m,b,H_0,model))
            if close==True:
                plt.close()



    if dataset_AGN != None:
        #Importo los datos
        z_data, logFuv, eFuv, logFx, eFx  = dataset_AGN

        if nuisance_2 == True:
            beta = 8.513
            ebeta = 0.437
            gamma = 0.622
            egamma = 0.014
        elif errores_agrandados == True:
            beta = 7.735
            ebeta = 2.44
            gamma = 0.648
            egamma = 0.07
        else: #Caso Estandar
            beta = 7.735
            if ebeta == None:
                ebeta = 0.244
            gamma = 0.648
            egamma = 0.007

        Es_modelo = Hs_modelo/H_0
#        DlH0_teo = zs_2_logDlH0(zs_modelo,Es_modelo,z_data)
#        DlH0_obs =  np.log10(3.24) - 25 + (logFx - gamma * logFuv - beta) / (2*gamma - 2)

        DlH0_teo = zs_2_logDlH0(int_inv_Hs_interpolado(z_data)*H_0,z_data)
        DlH0_obs =  np.log10(3.24) - 25 + (logFx - gamma * logFuv - beta) / (2*gamma - 2)



        df_dgamma =  (-logFx+beta+logFuv) / (2*(gamma-1)**2)
        eDlH0_cuad = (eFx**2 + gamma**2 * eFuv**2 + ebeta**2)/ (2*gamma - 2)**2 + (df_dgamma)**2 * egamma**2 #El cuadrado de los errores


        plt.figure()
        plt.grid()
        plt.title('AGN ({})'.format(model))
        plt.plot(z_data,DlH0_teo,'.',label='teorico')
        plt.errorbar(z_data,DlH0_obs,np.sqrt(eDlH0_cuad),fmt='.',label='datos')
        plt.savefig('AGN_omega={}_b={}_H0={}_model={}.png'.format(omega_m,b,H_0,model))
        plt.legend()
        if close==True:
            plt.close()

    if dataset_BAO_odintsov != None:
        #Importo los datos
        z_data_BAO, H_data_BAO, dH_BAO, rd_fid = dataset_BAO_odintsov
        H_interp = interp1d(zs_modelo, Hs_modelo)
        H_teo = H_interp(z_data_BAO)

        H_data_BAO_norm = np.zeros(len(H_data_BAO))
        for i in range(len(H_data_BAO_norm)):
            if rd_fid[i]==1:
                factor = 1
            else:
                rd = r_drag(omega_m,H_0,wb=0.0225) #Calculo del rd, fijo wb!! CHequear que es correcto
                factor = rd_fid[i]/rd
            H_data_BAO_norm[i] = H_data_BAO[i] * factor

        plt.figure()
        plt.grid()
        plt.title('BAO Odintsov ({})'.format(model))
        plt.plot(z_data_BAO,H_teo,'.',label='teorico')
        plt.errorbar(z_data_BAO,H_data_BAO_norm,dH_BAO,fmt='.',label='datos')
        plt.legend()
        plt.savefig('BAO_odintsov_omega={}_b={}_H0={}_model={}.png'.format(omega_m,b,H_0,model))
        if close==True:
            plt.close()
def params_to_chi2_odintsov(theta,
                            params_fijos,
                            index=0,
                            dataset_SN=None,
                            dataset_CC=None,
                            dataset_BAO=None,
                            dataset_AGN=None,
                            H0_Riess=False,
                            cantidad_zs=int(10**5),
                            model='HS',
                            n=1,
                            nuisance_2=False,
                            errores_agrandados=False):
    '''Dados los parámetros del modelo devuelve un chi2 para los datos
    de supernovas.'''

    #    chi2_SN = chi2_CC = chi2_BAO = chi2_AGN = chi2_H0 =  0

    chi2_SN = 0
    chi2_CC = 0
    chi2_BAO = 0
    chi2_AGN = 0
    chi2_H0 = 0

    [Mabs, omega_m, b, H_0] = all_parameters(theta, params_fijos, index)

    params_fisicos = [omega_m, b, H_0]
    zs_modelo_2, Hs_modelo_2 = Hubble_teorico(params_fisicos,
                                              n=n,
                                              model=model,
                                              z_min=0,
                                              z_max=10,
                                              cantidad_zs=cantidad_zs)
    #Los datos de AGN van hasta z mas altos!

    #MAL!
    #Filtro para z=0 para que no diverja la integral de (1/H)
    #mask = zs_modelo_2 > 0.001
    zs_modelo = zs_modelo_2
    Hs_modelo = Hs_modelo_2

    if dataset_SN != None:
        #Importo los datos
        zcmb, zhel, Cinv, mb = dataset_SN
        muth = magn_aparente_teorica(zs_modelo, Hs_modelo, zcmb, zhel)
        muobs = mb - Mabs
        chi2_SN = chi2_supernovas(muth, muobs, Cinv)

    if dataset_CC != None:
        #Importo los datos
        z_data, H_data, dH = dataset_CC
        H_interp = interp1d(zs_modelo, Hs_modelo)
        H_teo = H_interp(z_data)
        chi2_CC = chi2_sin_cov(H_teo, H_data, dH**2)

    if dataset_BAO != None:
        z_data_BAO, H_data_BAO, dH_BAO, rd_fid = dataset_BAO
        H_interp = interp1d(zs_modelo, Hs_modelo)
        H_teo = H_interp(z_data_BAO)

        H_data_BAO_norm = np.zeros(len(H_data_BAO))
        for i in range(len(H_data_BAO_norm)):
            if rd_fid[i] == 1:
                factor = 1
            else:
                rd = r_drag(
                    omega_m, H_0, wb=0.0225
                )  #Calculo del rd, fijo wb!! CHequear que es correcto
                factor = rd_fid[i] / rd
            H_data_BAO_norm[i] = H_data_BAO[i] * factor
        chi2_BAO = chi2_sin_cov(H_teo, H_data_BAO_norm, dH_BAO**2)

    return chi2_SN + chi2_CC + chi2_BAO
コード例 #3
0
def params_to_chi2(theta,
                   params_fijos,
                   index=0,
                   dataset_SN=None,
                   dataset_CC=None,
                   dataset_BAO=None,
                   dataset_AGN=None,
                   H0_Riess=False,
                   cantidad_zs=int(10**5),
                   model='HS',
                   n=1,
                   nuisance_2=False,
                   errores_agrandados=False,
                   integrador=1,
                   all_analytic=False):
    '''Dados los parámetros del modelo devuelve un chi2 para los datos
    de supernovas.'''

    #    chi2_SN = chi2_CC = chi2_BAO = chi2_AGN = chi2_H0 =  0

    chi2_SN = 0
    chi2_CC = 0
    chi2_BAO = 0
    chi2_AGN = 0
    chi2_H0 = 0

    [Mabs, omega_m, b, H_0] = all_parameters(theta, params_fijos, index)

    params_fisicos = [omega_m, b, H_0]
    if integrador == 0:
        zs_modelo, Hs_modelo = Hubble_teorico(params_fisicos,
                                              n=n,
                                              model=model,
                                              z_min=0,
                                              z_max=10,
                                              cantidad_zs=cantidad_zs,
                                              all_analytic=all_analytic)
        #Los datos de AGN van hasta 7 y pico
    elif integrador == 1:
        zs_modelo, Hs_modelo = Hubble_teorico_1(params_fisicos,
                                                n=n,
                                                model=model,
                                                z_min=0,
                                                z_max=10,
                                                cantidad_zs=cantidad_zs,
                                                all_analytic=all_analytic)
        #Los datos de AGN van hasta 7 y pico
    elif integrador == 2:
        zs_modelo, Hs_modelo = Hubble_teorico_2(params_fisicos,
                                                n=n,
                                                model=model,
                                                z_min=0,
                                                z_max=10,
                                                cantidad_zs=cantidad_zs,
                                                all_analytic=all_analytic)
        #Los datos de AGN van van hasta 7 y pico

    if (dataset_CC != None or dataset_BAO != None or dataset_AGN != None):
        Hs_interpolado = interp1d(zs_modelo, Hs_modelo)

    if (dataset_SN != None or dataset_BAO != None or dataset_AGN != None):
        int_inv_Hs = cumtrapz(Hs_modelo**(-1), zs_modelo, initial=0)
        int_inv_Hs_interpolado = interp1d(zs_modelo, int_inv_Hs)

    if dataset_SN != None:
        #Importo los datos
        zcmb, zhel, Cinv, mb = dataset_SN
        muth = magn_aparente_teorica(int_inv_Hs_interpolado, zcmb, zhel)
        muobs = mb - Mabs
        chi2_SN = chi2_supernovas(muth, muobs, Cinv)

    if dataset_CC != None:
        #Importo los datos
        z_data, H_data, dH = dataset_CC
        H_teo = Hs_interpolado(z_data)
        chi2_CC = chi2_sin_cov(H_teo, H_data, dH**2)

    if dataset_BAO != None:
        num_datasets = 5
        chies_BAO = np.zeros(num_datasets)
        for i in range(num_datasets):  #Para cada tipo de dato
            (z_data_BAO, valores_data, errores_data_cuad,
             wb_fid) = dataset_BAO[i]
            if i == 0:  #Dato de Da
                rd = r_drag(omega_m, H_0, wb_fid)  #Calculo del rd
                distancias_teoricas = Hs_to_Ds(Hs_interpolado,
                                               int_inv_Hs_interpolado,
                                               z_data_BAO, i)
                output_teorico = Ds_to_obs_final(zs_modelo,
                                                 distancias_teoricas, rd, i)
            else:  #De lo contrario..
                distancias_teoricas = Hs_to_Ds(Hs_interpolado,
                                               int_inv_Hs_interpolado,
                                               z_data_BAO, i)
                output_teorico = np.zeros(len(z_data_BAO))
                for j in range(
                        len(z_data_BAO)):  #Para cada dato de una especie
                    rd = r_drag(omega_m, H_0, wb_fid[j])  #Calculo del rd
                    output_teorico[j] = Ds_to_obs_final(
                        zs_modelo, distancias_teoricas[j], rd, i)
            #Calculo el chi2 para cada tipo de dato (i)
            chies_BAO[i] = chi2_sin_cov(output_teorico, valores_data,
                                        errores_data_cuad)

        if np.isnan(sum(chies_BAO)) == True:
            print('Hay errores!')
            print(omega_m, H_0, rd)

        chi2_BAO = np.sum(chies_BAO)

    if dataset_AGN != None:
        #Importo los datos
        z_data, logFuv, eFuv, logFx, eFx = dataset_AGN

        if nuisance_2 == True:  #Deprecated
            beta = 8.513
            ebeta = 0.437
            gamma = 0.622
            egamma = 0.014
        elif errores_agrandados == True:
            beta = 7.735
            ebeta = 0.6
            gamma = 0.648
            egamma = 0.007
        else:  #Caso Estandar
            beta = 7.735
            ebeta = 0.244
            gamma = 0.648
            egamma = 0.007

        DlH0_teo = zs_2_logDlH0(int_inv_Hs_interpolado(z_data) * H_0, z_data)
        DlH0_obs = np.log10(3.24) - 25 + (logFx - gamma * logFuv -
                                          beta) / (2 * gamma - 2)

        df_dgamma = (-logFx + beta + logFuv) / (2 * (gamma - 1)**2)
        eDlH0_cuad = (eFx**2 + gamma**2 * eFuv**2 + ebeta**2) / (
            2 * gamma -
            2)**2 + (df_dgamma)**2 * egamma**2  #El cuadrado de los errores

        chi2_AGN = chi2_sin_cov(DlH0_teo, DlH0_obs, eDlH0_cuad)

    if H0_Riess == True:
        chi2_H0 = ((Hs_modelo[0] - 73.48) / 1.66)**2

    return chi2_SN + chi2_CC + chi2_AGN + chi2_BAO + chi2_H0