def readGC(file, standard_cosmology=True): ra, dec, zs, zp = [], [], [], [] dl = [] with open(file, 'r') as f: if standard_cosmology: omega = lal.CreateCosmologicalParameters(0.7, 0.3, 0.7, -1.0, 0.0, 0.0) for line in f: fields = line.split(None) if 0.0 < np.float(fields[40]) > 0.0 or np.float(fields[41]) > 0.0: if not (standard_cosmology): h = np.random.uniform(0.5, 1.0) om = np.random.uniform(0.0, 1.0) ol = 1.0 - om omega = lal.CreateCosmologicalParameters( h, om, ol, -1.0, 0.0, 0.0) ra.append(np.float(fields[0])) dec.append(np.float(fields[1])) zs.append(np.float(fields[40])) zp.append(np.float(fields[41])) if not (np.isnan(zs[-1])): dl.append(lal.LuminosityDistance(omega, zs[-1])) elif not (np.isnan(zp[-1])): dl.append(lal.LuminosityDistance(omega, zp[-1])) else: dl.append(-1) f.close() return np.column_stack( (np.radians(np.array(ra)), np.radians(np.array(dec)), np.array(dl)))
def calculate_redshift(distance, h=0.6790, om=0.3065, ol=0.6935, w0=-1.0): """ Calculate the redshift from the luminosity distance measurement using the Cosmology Calculator provided in LAL. By default assuming cosmological parameters from arXiv:1502.01589 - 'Planck 2015 results. XIII. Cosmological parameters' Using parameters from table 4, column 'TT+lowP+lensing+ext' This corresponds to Omega_M = 0.3065, Omega_Lambda = 0.6935, H_0 = 67.90 km s^-1 Mpc^-1 Returns an array of redshifts """ def find_z_root(z, dl, omega): return dl - lal.LuminosityDistance(omega, z) omega = lal.CreateCosmologicalParameters(h, om, ol, w0, 0.0, 0.0) if isinstance(distance, float): z = np.array([ newton(find_z_root, np.random.uniform(0.0, 2.0), args=(distance, omega)) ]) else: z = np.array([ newton(find_z_root, np.random.uniform(0.0, 2.0), args=(d, omega)) for d in distance ]) return z
def __init__(self): self.names = ['z', 'ra', 'dec', 'M', 'h', 'om', 'ol'] self.bounds = [[0.00001, 0.2], [0., 2. * np.pi], [-np.pi / 2., np.pi / 2.], [-30, -10], [0.5, 1.], [0.04, 1.], [0., 1.]] self.omega = lal.CreateCosmologicalParameters(0.7, 0.5, 0.5, -1., 0., 0.)
def __init__(self): self.names = ['redshift', 'magnitude', 'h', 'om', 'ol'] #,u'ra',u'dec' self.bounds = [[0.0, 2], [-30, -10], [0.5, 1.0], [0.04, 1.0], [0.0, 1.0]] self.omega = lal.CreateCosmologicalParameters(0.7, 0.5, 0.5, -1.0, 0.0, 0.0)
def __init__(self, catalog): self.names=['z', 'h', 'om', 'ol'] self.bounds=[[0.001,0.012], [0.5,1.], [0.04,1.], [0.,1.]] self.omega = lal.CreateCosmologicalParameters(0.7,0.5,0.5,-1.,0.,0.) self.catalog = catalog
def __init__(self, h=None, om=None, ol=None, w0=None, w1=None, w2=None, default_maxz=1e5, numpoints=1e4): default_omega = lal.CreateCosmologicalParameters( 0., 0., 0., 0., 0., 0.) lal.SetCosmologicalParametersDefaultValue(default_omega) # if any cosmological parameter was specified, create a custom # cosmology if any([p is not None for p in [h, om, ol, w0, w1, w2]]): h = h if h is not None else default_omega.h om = om if om is not None else default_omega.om ol = ol if ol is not None else default_omega.ol w0 = w0 if w0 is not None else default_omega.w0 w1 = w1 if w1 is not None else default_omega.w1 w2 = w2 if w2 is not None else default_omega.w2 self.omega = lal.CreateCosmologicalParameters( h, om, ol, w0, w1, w2) else: self.omega = default_omega self.default_maxz = default_maxz self.numpoints = int(numpoints) self.z2d = numpy.vectorize(lal.LuminosityDistance) # for computing nearby (z < 1) redshifts zs = numpy.linspace(0., 1., num=self.numpoints) ds = self.z2d(self.omega, zs) self.nearby_d2z = interpolate.interp1d(ds, zs, kind='linear', bounds_error=False) # for computing far away (z > 1) redshifts zs = numpy.logspace(0, numpy.log10(default_maxz), num=self.numpoints) ds = self.z2d(self.omega, zs) self.faraway_d2z = interpolate.interp1d(ds, zs, kind='linear', bounds_error=False) # store the default maximum distance self.default_maxdist = ds.max()
def __init__(self, catalog): self.names = ['zgw', 'h', 'om', 'ol', 'mgal', 'zgal', 'alpha', 'delta'] self.bounds = [[0.001, 0.015], [0.5, 2.0], [0.04, 1.0], [0.0, 1.0], [m_threshold, 30.0], [0.001, 0.015], [GW.ra.rad - 0.1, GW.ra.rad + 0.1], [GW.dec.rad - 0.1, GW.dec.rad + 0.1]] self.omega = lal.CreateCosmologicalParameters(0.7, 0.5, 0.5, -1., 0., 0.) self.catalog = catalog
self.dropgal() # run job = cpnest.CPNest(self, verbose=1, nthreads=4, nlive=1000, maxmcmc=100) if run_sampling: job.run() posteriors = job.get_posterior_samples(filename = 'posterior.dat') # Calcolo posterior su z posteriors = np.genfromtxt('posterior.dat', names = True) just_z = [post[0] for post in posteriors] self.pdfz = gaussian_kde(just_z) # Calcolo probabilità e ordino le galassie prob = self.catalog['z'].apply(self.pdfz) prob = prob/prob.max() self.catalog['p'] = prob self.catalog = self.catalog.sort_values('p', ascending = False) # self.get_names() self.catalog.to_csv('rank.txt', header=True, index=None, sep='\t', mode='w') if show_output: self.plot_outputs() if __name__ == '__main__': positions = 'posterior_samples.json' # positions = 'GW170817_GWTC-1.hdf5' # positions = 'posterior_samples_170817.dat' z_bounds = [0.02,0.08] omega = lal.CreateCosmologicalParameters(0.7,0.3,0.7,-1.,0.,0.) M = ranking(omega, z_bounds) M.run(file = positions, run_sampling = False, show_output = True)