def getObvs(observables, **data_dict): ''' Given the list of observable strings return data vector and covariance matrices ''' if observables == ['xi']: fake_obs = Data.data_xi(**data_dict) fake_obs_cov = Data.data_cov(inference='abc', **data_dict)[1:16 , 1:16] xi_Cii = np.diag(fake_obs_cov) Cii_list = [xi_Cii] elif observables == ['nbar','xi']: fake_obs = np.hstack([Data.data_nbar(**data_dict), Data.data_xi(**data_dict)]) fake_obs_cov = Data.data_cov(inference='abc', **data_dict)[:16 , :16] Cii = np.diag(fake_obs_cov) xi_Cii = Cii[1:] nbar_Cii = Cii[0] Cii_list = [nbar_Cii, xi_Cii] elif observables == ['nbar','gmf']: ##### FIRST BIN OF GMF DROPPED ############### # CAUTION: hardcoded fake_obs = np.hstack([Data.data_nbar(**data_dict), Data.data_gmf(**data_dict)[1:]]) # CAUTION: Covariance matrix starts at 17 instead fake_obs_cov = Data.data_cov(inference='abc', **data_dict) Cii = np.diag(fake_obs_cov) gmf_Cii = Cii[17:] nbar_Cii = Cii[0] Cii_list = [nbar_Cii, gmf_Cii] return fake_obs, Cii_list
def xi(Mr=20, Nmock=500): ''' Plot xi(r) of the fake observations ''' prettyplot() pretty_colors = prettycolors() xir, cii = Data.data_xi(Mr=Mr, Nmock=Nmock) rbin = Data.data_xi_bins(Mr=Mr) fig = plt.figure(1) sub = fig.add_subplot(111) sub.plot(rbin, rbin*xir, c='k', lw=1) sub.errorbar(rbin, rbin*xir, yerr = rbin*cii**0.5 , fmt="ok", ms=1, capsize=2, alpha=1.) sub.set_xlim([0.1, 15]) sub.set_ylim([1, 10]) sub.set_yscale("log") sub.set_xscale("log") sub.set_xlabel(r'$\mathtt{r}\; (\mathtt{Mpc})$', fontsize=25) sub.set_ylabel(r'$\mathtt{r} \xi_{\rm gg}$', fontsize=25) fig_file = ''.join([util.fig_dir(), 'xi.Mr', str(Mr), '.Nmock', str(Nmock), '.png']) fig.savefig(fig_file, bbox_inches='tight') plt.close() return None
def TrueObservables(Mr=21, b_normal=0.25): ''' Plot xi and gmf for the data ''' # xi data xi_data = Data.data_xi(Mr=Mr, b_normal=b_normal) cov_data = Data.data_cov(Mr=Mr, b_normal=b_normal, inference='mcmc') data_xi_cov = cov_data[1:16, 1:16] xi_r_bin = Data.data_xi_bin(Mr=Mr) # gmf data data_gmf = Data.data_gmf(Mr=Mr, b_normal=b_normal) cov_data = Data.data_cov(Mr=Mr, b_normal=b_normal, inference='mcmc') data_gmf_cov = cov_data[16:, 16:] r_binedge = Data.data_gmf_bins() gmf_r_bin = 0.5 * (r_binedge[:-1] + r_binedge[1:]) prettyplot() pretty_colors = prettycolors() fig = plt.figure(figsize=(12, 6)) sub_xi = fig.add_subplot(121) sub_gmf = fig.add_subplot(122) #sub_xi.errorbar(xi_r_bin, xi_data, yerr = np.sqrt(np.diag(data_xi_cov)), fmt="o", color='k', # markersize=0, lw=0, capsize=3, elinewidth=1.5) #sub_xi.scatter(xi_r_bin, xi_data, c='k', s=10, lw=0) sub_xi.fill_between(xi_r_bin, xi_data - np.sqrt(np.diag(data_xi_cov)), xi_data + np.sqrt(np.diag(data_xi_cov)), color=pretty_colors[1]) sub_xi.set_yscale('log') sub_xi.set_xscale('log') sub_xi.set_xlim(0.1, 20) sub_xi.set_xlabel(r'$\mathtt{r}\; [\mathtt{Mpc}/h]$', fontsize=25) sub_xi.set_ylabel(r'$\xi(r)$', fontsize=25) #sub_gmf.errorbar(gmf_r_bin, data_gmf, yerr=np.sqrt(np.diag(data_gmf_cov)), # fmt="o", color='k', # markersize=0, lw=0, capsize=4, elinewidth=2) #sub_gmf.scatter(gmf_r_bin, data_gmf, s=15, lw=0, c='k', label='Mock Observation') sub_gmf.fill_between(gmf_r_bin, data_gmf - np.sqrt(np.diag(data_gmf_cov)), data_gmf + np.sqrt(np.diag(data_gmf_cov)), color=pretty_colors[1]) sub_gmf.set_xlim(1, 20) sub_gmf.set_xlabel(r'$\mathtt{N}$ (Group Richness)', fontsize=25) sub_gmf.yaxis.tick_right() sub_gmf.yaxis.set_ticks_position('both') sub_gmf.yaxis.set_label_position('right') sub_gmf.set_ylim([10**-7, 2.0 * 10**-4]) sub_gmf.set_yscale('log') sub_gmf.set_ylabel(r'$\zeta(\mathtt{N})$', fontsize=25) fig.subplots_adjust(hspace=0.05) fig_name = ''.join([ut.fig_dir(), 'paper.data_observables', '.pdf']) fig.savefig(fig_name, bbox_inches='tight', dpi=150) plt.close() return None
def TrueObservables(Mr=21, b_normal=0.25): ''' Plot xi and gmf for the data ''' # xi data xi_data = Data.data_xi(Mr=Mr, b_normal=b_normal) cov_data = Data.data_cov(Mr=Mr, b_normal=b_normal, inference='mcmc') data_xi_cov = cov_data[1:16, 1:16] xi_r_bin = Data.data_xi_bin(Mr=Mr) # gmf data data_gmf = Data.data_gmf(Mr=Mr, b_normal=b_normal) cov_data = Data.data_cov(Mr=Mr, b_normal=b_normal, inference='mcmc') data_gmf_cov = cov_data[16:, 16:] r_binedge = Data.data_gmf_bins() gmf_r_bin = 0.5 * (r_binedge[:-1] + r_binedge[1:]) prettyplot() pretty_colors = prettycolors() fig = plt.figure(figsize=(12,6)) sub_xi = fig.add_subplot(121) sub_gmf = fig.add_subplot(122) #sub_xi.errorbar(xi_r_bin, xi_data, yerr = np.sqrt(np.diag(data_xi_cov)), fmt="o", color='k', # markersize=0, lw=0, capsize=3, elinewidth=1.5) #sub_xi.scatter(xi_r_bin, xi_data, c='k', s=10, lw=0) sub_xi.fill_between(xi_r_bin, xi_data-np.sqrt(np.diag(data_xi_cov)), xi_data+np.sqrt(np.diag(data_xi_cov)), color=pretty_colors[1]) sub_xi.set_yscale('log') sub_xi.set_xscale('log') sub_xi.set_xlim(0.1, 20) sub_xi.set_xlabel(r'$\mathtt{r}\; [\mathtt{Mpc}/h]$', fontsize=25) sub_xi.set_ylabel(r'$\xi(r)$', fontsize=25) #sub_gmf.errorbar(gmf_r_bin, data_gmf, yerr=np.sqrt(np.diag(data_gmf_cov)), # fmt="o", color='k', # markersize=0, lw=0, capsize=4, elinewidth=2) #sub_gmf.scatter(gmf_r_bin, data_gmf, s=15, lw=0, c='k', label='Mock Observation') sub_gmf.fill_between(gmf_r_bin, data_gmf-np.sqrt(np.diag(data_gmf_cov)), data_gmf+np.sqrt(np.diag(data_gmf_cov)), color=pretty_colors[1]) sub_gmf.set_xlim(1, 20) sub_gmf.set_xlabel(r'$\mathtt{N}$ (Group Richness)', fontsize=25) sub_gmf.yaxis.tick_right() sub_gmf.yaxis.set_ticks_position('both') sub_gmf.yaxis.set_label_position('right') sub_gmf.set_ylim([10**-7, 2.0*10**-4]) sub_gmf.set_yscale('log') sub_gmf.set_ylabel(r'$\zeta(\mathtt{N})$', fontsize=25) fig.subplots_adjust(hspace=0.05) fig_name = ''.join([ut.fig_dir(), 'paper.data_observables', '.pdf']) fig.savefig(fig_name, bbox_inches='tight', dpi=150) plt.close() return None
def plot_data(Mr = 21 , output_dir = None): ''' plot summary statistics of the data ''' if output_dir is None: fig_dir = util.fig_dir() else: fig_dir = output_dir cov = Data.data_cov() xi_err = np.sqrt(np.diag(cov)[1:16]) gmf_err = np.sqrt(np.diag(cov)[16:]) fig , axes = plt.subplots(1, 2, figsize=(10, 5)) fig.subplots_adjust(wspace=0.4, hspace=0.4) ax = axes[0] x = Data.xi_binedges() y = Data.data_xi() ax.errorbar(0.5*(x[:-1]+x[1:]), y, yerr=xi_err, fmt=".k", capsize=0) ax.set_yscale('log') ax.set_xscale('log') ax.set_xlim(0.2, 22) ax.set_xlabel(r'$r[\mathrm{Mpc}/h]$') ax.set_ylabel(r'$\xi(r)$') ax = axes[1] x = Data.gmf_bins() y = Data.data_gmf() ax.errorbar(0.5*(x[:-1]+x[1:]), y, yerr=gmf_err, fmt=".k", capsize=0) ax.set_xlim(1, 20) ax.set_yscale('log') ax.set_xlabel(r'Group Richness $N$') ax.set_ylabel(r'$\zeta(N)$') fig_file = ''.join([fig_dir, "data", '_Mr', str(Mr),'.pdf']) plt.savefig(fig_file) plt.close()
def plot_data(Mr=21, output_dir=None): ''' plot summary statistics of the data ''' if output_dir is None: fig_dir = util.fig_dir() else: fig_dir = output_dir cov = Data.data_cov() xi_err = np.sqrt(np.diag(cov)[1:16]) gmf_err = np.sqrt(np.diag(cov)[16:]) fig, axes = plt.subplots(1, 2, figsize=(10, 5)) fig.subplots_adjust(wspace=0.4, hspace=0.4) ax = axes[0] x = Data.xi_binedges() y = Data.data_xi() ax.errorbar(0.5 * (x[:-1] + x[1:]), y, yerr=xi_err, fmt=".k", capsize=0) ax.set_yscale('log') ax.set_xscale('log') ax.set_xlim(0.2, 22) ax.set_xlabel(r'$r[\mathrm{Mpc}/h]$') ax.set_ylabel(r'$\xi(r)$') ax = axes[1] x = Data.gmf_bins() y = Data.data_gmf() ax.errorbar(0.5 * (x[:-1] + x[1:]), y, yerr=gmf_err, fmt=".k", capsize=0) ax.set_xlim(1, 20) ax.set_yscale('log') ax.set_xlabel(r'Group Richness $N$') ax.set_ylabel(r'$\zeta(N)$') fig_file = ''.join([fig_dir, "data", '_Mr', str(Mr), '.pdf']) plt.savefig(fig_file) plt.close()
def PosteriorObservable(Mr=21, b_normal=0.25, clobber=False): ''' Plot 1\sigma and 2\sigma model predictions from ABC-PMC posterior likelihood ''' prettyplot() pretty_colors = prettycolors() fig = plt.figure(1, figsize=(16, 12)) gs = gridspec.GridSpec(2, 2, height_ratios=[2.5, 1], width_ratios=[1, 1]) for obvs in ['nbargmf', 'nbarxi']: if obvs == 'nbargmf': result_dir = ''.join([ ut.dat_dir(), 'paper/ABC', obvs, '/run1/', ]) theta_file = lambda tt: ''.join( [result_dir, 'nbar_gmf_theta_t', str(tt), '.ABCnbargmf.dat']) tf = 8 obvs_list = ['gmf'] elif obvs == 'nbarxi': result_dir = ''.join([ut.dat_dir(), 'paper/ABC', obvs, '/']) theta_file = lambda tt: ''.join( [result_dir, 'nbar_xi_theta_t', str(tt), '.abc.dat']) tf = 9 obvs_list = ['xi'] else: raise ValueError theta = np.loadtxt(theta_file(tf)) # import thetas #theta = theta[:10] obvs_file = ''.join( theta_file(tf).rsplit('.dat')[:-1] + ['.', obvs_list[0], '.p']) print obvs_file HODsimulator = ABC_HODsim(Mr=Mr, b_normal=b_normal) if not os.path.isfile(obvs_file) or clobber: model_obv = [] for i in xrange(len(theta)): print i obv_i = HODsimulator(theta[i], prior_range=None, observables=obvs_list) model_obv.append(obv_i[0]) model_obv = np.array(model_obv) pickle.dump(model_obv, open(obvs_file, 'wb')) else: model_obv = pickle.load(open(obvs_file, 'rb')) if 'xi' in obvs: r_bin = Data.data_xi_bin(Mr=Mr) elif 'gmf' in obvs: r_binedge = Data.data_gmf_bins() r_bin = 0.5 * (r_binedge[:-1] + r_binedge[1:]) a, b, c, d, e = np.percentile(model_obv, [2.5, 16, 50, 84, 97.5], axis=0) # plotting if obvs == 'nbarxi': ax = plt.subplot(gs[0]) elif obvs == 'nbargmf': ax = plt.subplot(gs[1]) if 'xi' in obvs: # 2PCF xi_data = Data.data_xi(Mr=Mr, b_normal=b_normal) cov_data = Data.data_cov(Mr=Mr, b_normal=b_normal, inference='mcmc') data_xi_cov = cov_data[1:16, 1:16] ax.fill_between(r_bin, a, e, color=pretty_colors[3], alpha=0.3, edgecolor="none") ax.fill_between(r_bin, b, d, color=pretty_colors[3], alpha=0.5, edgecolor="none") ax.errorbar(r_bin, xi_data, yerr=np.sqrt(np.diag(data_xi_cov)), fmt="o", color='k', markersize=0, lw=0, capsize=3, elinewidth=1.5) ax.scatter(r_bin, xi_data, c='k', s=10, lw=0) ax.set_ylabel(r'$\xi_\mathtt{gg}(\mathtt{r})$', fontsize=27) ax.set_yscale('log') ax.set_xscale('log') ax.set_xticklabels([]) ax.set_xlim([0.1, 20.]) ax.set_ylim([0.09, 1000.]) ax = plt.subplot(gs[2]) ax.fill_between(r_bin, a / xi_data, e / xi_data, color=pretty_colors[3], alpha=0.3, edgecolor="none") ax.fill_between(r_bin, b / xi_data, d / xi_data, color=pretty_colors[3], alpha=0.5, edgecolor="none") ax.errorbar(r_bin, np.repeat(1., len(xi_data)), yerr=np.sqrt(np.diag(data_xi_cov)) / xi_data, fmt="o", color='k', markersize=0, lw=0, capsize=3, elinewidth=1.5) ax.plot(np.arange(0.1, 20., 0.1), np.repeat(1., len(np.arange(0.1, 20, 0.1))), c='k', ls='--', lw=2) ax.set_xlim([0.1, 20.]) ax.set_xscale('log') ax.set_ylim([0.5, 1.5]) ax.set_xlabel(r'$\mathtt{r}\;[\mathtt{Mpc}/h]$', fontsize=25) ax.set_ylabel(r'$\xi_\mathtt{gg}/\xi_\mathtt{gg}^\mathtt{obvs}$', fontsize=25) elif 'gmf' in obvs: # GMF data_gmf = Data.data_gmf(Mr=Mr, b_normal=b_normal) cov_data = Data.data_cov(Mr=Mr, b_normal=b_normal, inference='mcmc') data_gmf_cov = cov_data[16:, 16:] ax.fill_between(r_bin, a, e, color=pretty_colors[3], alpha=0.3, edgecolor="none") ax.fill_between(r_bin, b, d, color=pretty_colors[3], alpha=0.5, edgecolor="none", label='ABC Posterior') ax.errorbar(r_bin, data_gmf, yerr=np.sqrt(np.diag(data_gmf_cov)), fmt="o", color='k', markersize=0, lw=0, capsize=4, elinewidth=2) ax.scatter(r_bin, data_gmf, s=15, lw=0, c='k', label='Mock Observation') ax.legend(loc='upper right', scatterpoints=1, prop={'size': 25}, borderpad=1.0) ax.yaxis.tick_right() ax.yaxis.set_ticks_position('both') ax.yaxis.set_label_position('right') ax.set_ylabel(r'$\zeta$ $[(\mathrm{h}/\mathtt{Mpc})^{3}]$', fontsize=25) ax.set_yscale('log') ax.set_xlim([1., 20.]) ax.set_xticklabels([]) ax.set_ylim([10.**-7.2, 2 * 10**-4.]) ax = plt.subplot(gs[3]) ax.fill_between(r_bin, a / data_gmf, e / data_gmf, color=pretty_colors[3], alpha=0.3, edgecolor="none") ax.fill_between(r_bin, b / data_gmf, d / data_gmf, color=pretty_colors[3], alpha=0.5, edgecolor="none") ax.errorbar(r_bin, np.repeat(1., len(data_gmf)), yerr=np.sqrt(np.diag(data_gmf_cov)) / data_gmf, fmt="o", color='k', markersize=0, lw=0, capsize=3, elinewidth=1.5) ax.plot(np.arange(1., 20., 1), np.repeat(1., len(np.arange(1., 20, 1))), c='k', ls='--', lw=1.75) ax.yaxis.tick_right() ax.yaxis.set_label_position('right') ax.set_ylim([-0.1, 2.1]) ax.set_ylabel(r'$\zeta/\zeta^\mathtt{obvs}$', fontsize=25) ax.set_xlim([1., 20.]) ax.set_xlabel(r'$\mathtt{N}$ [Group Richness]', fontsize=25) fig.subplots_adjust(wspace=0.05, hspace=0.0) fig_name = ''.join([ut.fig_dir(), 'paper', '.ABCposterior', '.pdf']) fig.savefig(fig_name, bbox_inches='tight') plt.close() return None
def mcmc_mpi(Nwalkers, Nchains, observables=['nbar', 'xi'], data_dict={ 'Mr': 21, 'b_normal': 0.25 }, prior_name='first_try', mcmcrun=None): ''' Standard MCMC implementaion Parameters ----------- - Nwalker : Number of walkers - Nchains : Number of MCMC chains - observables : list of observables. Options are: ['nbar','xi'],['nbar','gmf'],['xi'] - data_dict : dictionary that specifies the observation keywords ''' #Initializing the vector of observables and inverse covariance matrix if observables == ['xi']: fake_obs = Data.data_xi(**data_dict) #fake_obs_icov = Data.data_inv_cov('xi', **data_dict) fake_obs_icov = Data.data_cov(inference='mcmc', **data_dict)[1:16, 1:16] if observables == ['nbar', 'xi']: fake_obs = np.hstack( [Data.data_nbar(**data_dict), Data.data_xi(**data_dict)]) fake_obs_icov = Data.data_cov(inference='mcmc', **data_dict)[:16, :16] if observables == ['nbar', 'gmf']: ##### FIRST BIN OF GMF DROPPED ############### # CAUTION: hardcoded fake_obs = np.hstack( [Data.data_nbar(**data_dict), Data.data_gmf(**data_dict)[1:]]) fake_obs_icov = np.zeros((10, 10)) #print Data.data_cov(**data_dict)[17: , 17:].shape # Covariance matrix being adjusted accordingly fake_obs_icov[1:, 1:] = Data.data_cov(inference='mcmc', **data_dict)[17:, 17:] fake_obs_icov[0, 1:] = Data.data_cov(inference='mcmc', **data_dict)[0, 17:] fake_obs_icov[1:, 0] = Data.data_cov(inference='mcmc', **data_dict)[17:, 0] fake_obs_icov[0, 0] = Data.data_cov(inference='mcmc', **data_dict)[0, 0] # True HOD parameters data_hod_dict = Data.data_hod_param(Mr=data_dict['Mr']) data_hod = np.array([ data_hod_dict['logM0'], # log M0 np.log(data_hod_dict['sigma_logM']), # log(sigma) data_hod_dict['logMmin'], # log Mmin data_hod_dict['alpha'], # alpha data_hod_dict['logM1'] # log M1 ]) Ndim = len(data_hod) # Priors prior_min, prior_max = PriorRange(prior_name) prior_range = np.zeros((len(prior_min), 2)) prior_range[:, 0] = prior_min prior_range[:, 1] = prior_max # mcmc chain output file chain_file = ''.join([ util.mcmc_dir(), util.observable_id_flag(observables), '.', mcmcrun, '.mcmc_chain.dat' ]) #print chain_file if os.path.isfile(chain_file) and continue_chain: print 'Continuing previous MCMC chain!' sample = np.loadtxt(chain_file) Nchain = Niter - (len(sample) / Nwalkers ) # Number of chains left to finish if Nchain > 0: pass else: raise ValueError print Nchain, ' iterations left to finish' # Initializing Walkers from the end of the chain pos0 = sample[-Nwalkers:] else: # new chain f = open(chain_file, 'w') f.close() Nchain = Niter # Initializing Walkers random_guess = data_hod pos0 = np.repeat(random_guess, Nwalkers).reshape(Ndim, Nwalkers).T + \ 5.e-2 * np.random.randn(Ndim * Nwalkers).reshape(Nwalkers, Ndim) #print pos0.shape # Initializing MPIPool pool = MPIPool() if not pool.is_master(): pool.wait() sys.exit(0) # Initializing the emcee sampler hod_kwargs = { 'prior_range': prior_range, 'data': fake_obs, 'data_icov': fake_obs_icov, 'observables': observables, 'Mr': data_dict['Mr'] } sampler = emcee.EnsembleSampler(Nwalkers, Ndim, lnPost, pool=pool, kwargs=hod_kwargs) # Initializing Walkers for result in sampler.sample(pos0, iterations=Nchain, storechain=False): position = result[0] #print position f = open(chain_file, 'a') for k in range(position.shape[0]): output_str = '\t'.join(position[k].astype('str')) + '\n' f.write(output_str) f.close() pool.close()
def mcmc_mpi( Nwalkers, Nchains, observables=["nbar", "xi"], data_dict={"Mr": 21, "b_normal": 0.25}, prior_name="first_try", mcmcrun=None, ): """ Standard MCMC implementaion Parameters ----------- - Nwalker : Number of walkers - Nchains : Number of MCMC chains - observables : list of observables. Options are: ['nbar','xi'],['nbar','gmf'],['xi'] - data_dict : dictionary that specifies the observation keywords """ # Initializing the vector of observables and inverse covariance matrix if observables == ["xi"]: fake_obs = Data.data_xi(**data_dict) # fake_obs_icov = Data.data_inv_cov('xi', **data_dict) fake_obs_icov = Data.data_cov(inference="mcmc", **data_dict)[1:16, 1:16] if observables == ["nbar", "xi"]: fake_obs = np.hstack([Data.data_nbar(**data_dict), Data.data_xi(**data_dict)]) fake_obs_icov = Data.data_cov(inference="mcmc", **data_dict)[:16, :16] if observables == ["nbar", "gmf"]: ##### FIRST BIN OF GMF DROPPED ############### # CAUTION: hardcoded fake_obs = np.hstack([Data.data_nbar(**data_dict), Data.data_gmf(**data_dict)[1:]]) fake_obs_icov = np.zeros((10, 10)) # print Data.data_cov(**data_dict)[17: , 17:].shape # Covariance matrix being adjusted accordingly fake_obs_icov[1:, 1:] = Data.data_cov(inference="mcmc", **data_dict)[17:, 17:] fake_obs_icov[0, 1:] = Data.data_cov(inference="mcmc", **data_dict)[0, 17:] fake_obs_icov[1:, 0] = Data.data_cov(inference="mcmc", **data_dict)[17:, 0] fake_obs_icov[0, 0] = Data.data_cov(inference="mcmc", **data_dict)[0, 0] # True HOD parameters data_hod_dict = Data.data_hod_param(Mr=data_dict["Mr"]) data_hod = np.array( [ data_hod_dict["logM0"], # log M0 np.log(data_hod_dict["sigma_logM"]), # log(sigma) data_hod_dict["logMmin"], # log Mmin data_hod_dict["alpha"], # alpha data_hod_dict["logM1"], # log M1 ] ) Ndim = len(data_hod) # Priors prior_min, prior_max = PriorRange(prior_name) prior_range = np.zeros((len(prior_min), 2)) prior_range[:, 0] = prior_min prior_range[:, 1] = prior_max # mcmc chain output file chain_file = "".join([util.mcmc_dir(), util.observable_id_flag(observables), ".", mcmcrun, ".mcmc_chain.dat"]) # print chain_file if os.path.isfile(chain_file) and continue_chain: print "Continuing previous MCMC chain!" sample = np.loadtxt(chain_file) Nchain = Niter - (len(sample) / Nwalkers) # Number of chains left to finish if Nchain > 0: pass else: raise ValueError print Nchain, " iterations left to finish" # Initializing Walkers from the end of the chain pos0 = sample[-Nwalkers:] else: # new chain f = open(chain_file, "w") f.close() Nchain = Niter # Initializing Walkers random_guess = data_hod pos0 = np.repeat(random_guess, Nwalkers).reshape(Ndim, Nwalkers).T + 5.0e-2 * np.random.randn( Ndim * Nwalkers ).reshape(Nwalkers, Ndim) # print pos0.shape # Initializing MPIPool pool = MPIPool() if not pool.is_master(): pool.wait() sys.exit(0) # Initializing the emcee sampler hod_kwargs = { "prior_range": prior_range, "data": fake_obs, "data_icov": fake_obs_icov, "observables": observables, "Mr": data_dict["Mr"], } sampler = emcee.EnsembleSampler(Nwalkers, Ndim, lnPost, pool=pool, kwargs=hod_kwargs) # Initializing Walkers for result in sampler.sample(pos0, iterations=Nchain, storechain=False): position = result[0] # print position f = open(chain_file, "a") for k in range(position.shape[0]): output_str = "\t".join(position[k].astype("str")) + "\n" f.write(output_str) f.close() pool.close()
def PosteriorObservable(Mr=21, b_normal=0.25, clobber=False): ''' Plot 1\sigma and 2\sigma model predictions from ABC-PMC posterior likelihood ''' prettyplot() pretty_colors=prettycolors() fig = plt.figure(1, figsize=(16,12)) gs = gridspec.GridSpec(2, 2, height_ratios=[2.5, 1], width_ratios=[1,1]) for obvs in ['nbargmf', 'nbarxi']: if obvs == 'nbargmf': result_dir = ''.join([ut.dat_dir(), 'paper/ABC', obvs, '/run1/',]) theta_file = lambda tt: ''.join([result_dir, 'nbar_gmf_theta_t', str(tt), '.ABCnbargmf.dat']) tf = 8 obvs_list = ['gmf'] elif obvs == 'nbarxi': result_dir = ''.join([ut.dat_dir(), 'paper/ABC', obvs, '/']) theta_file = lambda tt: ''.join([result_dir, 'nbar_xi_theta_t', str(tt), '.abc.dat']) tf = 9 obvs_list = ['xi'] else: raise ValueError theta = np.loadtxt(theta_file(tf)) # import thetas #theta = theta[:10] obvs_file = ''.join(theta_file(tf).rsplit('.dat')[:-1] + ['.', obvs_list[0], '.p']) print obvs_file HODsimulator = ABC_HODsim(Mr=Mr, b_normal=b_normal) if not os.path.isfile(obvs_file) or clobber: model_obv = [] for i in xrange(len(theta)): print i obv_i = HODsimulator( theta[i], prior_range=None, observables=obvs_list) model_obv.append(obv_i[0]) model_obv = np.array(model_obv) pickle.dump(model_obv, open(obvs_file, 'wb')) else: model_obv = pickle.load(open(obvs_file, 'rb')) if 'xi' in obvs: r_bin = Data.data_xi_bin(Mr=Mr) elif 'gmf' in obvs: r_binedge = Data.data_gmf_bins() r_bin = 0.5 * (r_binedge[:-1] + r_binedge[1:]) a, b, c, d, e = np.percentile(model_obv, [2.5, 16, 50, 84, 97.5], axis=0) # plotting if obvs == 'nbarxi': ax = plt.subplot(gs[0]) elif obvs == 'nbargmf': ax = plt.subplot(gs[1]) if 'xi' in obvs: # 2PCF xi_data = Data.data_xi(Mr=Mr, b_normal=b_normal) cov_data = Data.data_cov(Mr=Mr, b_normal=b_normal, inference='mcmc') data_xi_cov = cov_data[1:16, 1:16] ax.fill_between(r_bin, a, e, color=pretty_colors[3], alpha=0.3, edgecolor="none") ax.fill_between(r_bin, b, d, color=pretty_colors[3], alpha=0.5, edgecolor="none") ax.errorbar(r_bin, xi_data, yerr = np.sqrt(np.diag(data_xi_cov)), fmt="o", color='k', markersize=0, lw=0, capsize=3, elinewidth=1.5) ax.scatter(r_bin, xi_data, c='k', s=10, lw=0) ax.set_ylabel(r'$\xi_\mathtt{gg}(\mathtt{r})$', fontsize=27) ax.set_yscale('log') ax.set_xscale('log') ax.set_xticklabels([]) ax.set_xlim([0.1, 20.]) ax.set_ylim([0.09, 1000.]) ax = plt.subplot(gs[2]) ax.fill_between(r_bin, a/xi_data, e/xi_data, color=pretty_colors[3], alpha=0.3, edgecolor="none") ax.fill_between(r_bin, b/xi_data, d/xi_data, color=pretty_colors[3], alpha=0.5, edgecolor="none") ax.errorbar(r_bin, np.repeat(1., len(xi_data)), yerr=np.sqrt(np.diag(data_xi_cov))/xi_data, fmt="o", color='k', markersize=0, lw=0, capsize=3, elinewidth=1.5) ax.plot(np.arange(0.1, 20., 0.1), np.repeat(1., len(np.arange(0.1, 20, 0.1))), c='k', ls='--', lw=2) ax.set_xlim([0.1, 20.]) ax.set_xscale('log') ax.set_ylim([0.5, 1.5]) ax.set_xlabel(r'$\mathtt{r}\;[\mathtt{Mpc}/h]$', fontsize=25) ax.set_ylabel(r'$\xi_\mathtt{gg}/\xi_\mathtt{gg}^\mathtt{obvs}$', fontsize=25) elif 'gmf' in obvs: # GMF data_gmf = Data.data_gmf(Mr=Mr, b_normal=b_normal) cov_data = Data.data_cov(Mr=Mr, b_normal=b_normal, inference='mcmc') data_gmf_cov = cov_data[16:, 16:] ax.fill_between(r_bin, a, e, color=pretty_colors[3], alpha=0.3, edgecolor="none") ax.fill_between(r_bin, b, d, color=pretty_colors[3], alpha=0.5, edgecolor="none", label='ABC Posterior') ax.errorbar(r_bin, data_gmf, yerr=np.sqrt(np.diag(data_gmf_cov)), fmt="o", color='k', markersize=0, lw=0, capsize=4, elinewidth=2) ax.scatter(r_bin, data_gmf, s=15, lw=0, c='k', label='Mock Observation') ax.legend(loc='upper right', scatterpoints=1, prop={'size': 25}, borderpad=1.0) ax.yaxis.tick_right() ax.yaxis.set_ticks_position('both') ax.yaxis.set_label_position('right') ax.set_ylabel(r'$\zeta$ $[(\mathrm{h}/\mathtt{Mpc})^{3}]$', fontsize=25) ax.set_yscale('log') ax.set_xlim([1., 20.]) ax.set_xticklabels([]) ax.set_ylim([10.**-7.2, 2*10**-4.]) ax = plt.subplot(gs[3]) ax.fill_between(r_bin, a/data_gmf, e/data_gmf, color=pretty_colors[3], alpha=0.3, edgecolor="none") ax.fill_between(r_bin, b/data_gmf, d/data_gmf, color=pretty_colors[3], alpha=0.5, edgecolor="none") ax.errorbar(r_bin, np.repeat(1., len(data_gmf)), yerr=np.sqrt(np.diag(data_gmf_cov))/data_gmf, fmt="o", color='k', markersize=0, lw=0, capsize=3, elinewidth=1.5) ax.plot(np.arange(1., 20., 1), np.repeat(1., len(np.arange(1., 20, 1))), c='k', ls='--', lw=1.75) ax.yaxis.tick_right() ax.yaxis.set_label_position('right') ax.set_ylim([-0.1, 2.1]) ax.set_ylabel(r'$\zeta/\zeta^\mathtt{obvs}$', fontsize=25) ax.set_xlim([1., 20.]) ax.set_xlabel(r'$\mathtt{N}$ [Group Richness]', fontsize=25) fig.subplots_adjust(wspace=0.05, hspace=0.0) fig_name = ''.join([ut.fig_dir(), 'paper', '.ABCposterior', '.pdf']) fig.savefig(fig_name, bbox_inches='tight') plt.close() return None