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
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