import numpy
import h5py
from astropy.table import Table
import matplotlib
import matplotlib.pyplot as plt
#from vast.voidfinder.absmag_comovingdist_functions import Distance
from vast.voidfinder.distance import z_to_comoving_dist
from vast.voidfinder.preprocessing import load_data_to_Table
# Constants
c = 3e5
DtoR = numpy.pi/180.
RtoD = 180./numpy.pi
distance_metric = 'comoving'
#distance_metric = 'redshift'
Omega_M = 0.3
h = 1.0
if __name__ == "__main__":
infilename1 = "vollim_dr7_cbp_102709_holes.txt"
infilename2 = "vollim_dr7_cbp_102709_maximal.txt"
infilename3 = "vollim_dr7_cbp_102709.dat"
############################################################################
# load hole locations
# keys are 'x' 'y' 'z' 'radius' 'flag'
#---------------------------------------------------------------------------
holes_data = Table.read(infilename1, format='ascii.commented_header')
############################################################################
############################################################################
# Load galaxy data and convert coordinates to xyz
#---------------------------------------------------------------------------
galaxy_data = Table.read(infilename3, format='ascii.commented_header')
if distance_metric == 'comoving':
r_gal = galaxy_data['Rgal']
else:
if 'redshift' in galaxy_data.colnames:
z_column = 'redshift'
elif 'REDSHIFT' in galaxy_data.colnames:
z_column = 'REDSHIFT'
elif 'z' in galaxy_data.colnames:
z_column = 'z'
else:
print('Redshift column not known. Please rename column to "redshift".')
r_gal = c*galaxy_data[z_column]/(100*h)
xin = r_gal*numpy.cos(galaxy_data['ra']*DtoR)*numpy.cos(galaxy_data['dec']*DtoR)
yin = r_gal*numpy.sin(galaxy_data['ra']*DtoR)*numpy.cos(galaxy_data['dec']*DtoR)
zin = r_gal*numpy.sin(galaxy_data['dec']*DtoR)
xyz_galaxy_data = Table([xin, yin, zin], names=('x','y','z'))
############################################################################
print(xyz_galaxy_data)
print(holes_data)
[docs]def load_void_data(infilename):
'''
Load voids as formatted for VoidFinder
Parameters
==========
infilename : string
path to desired data file
Returns
=======
holes_xyz : numpy.ndarray shape (N,3)
the xyz centers of the holes
holes_radii : numpy.ndarray shape (N,)
the radii of the holes
hole_flags : numpy.ndarray shape (N,)
the VoidFinder 'flag' output representing
which void group a hole belongs to
'''
holes_data = load_data_to_Table(infilename)
num_rows = len(holes_data)
holes_xyz = numpy.empty((num_rows, 3), dtype=numpy.float64)
hole_radii = numpy.empty(num_rows, dtype=numpy.float64)
hole_flags = numpy.empty(num_rows, dtype=numpy.int32)
holes_xyz[:,0] = holes_data['x']
holes_xyz[:,1] = holes_data['y']
holes_xyz[:,2] = holes_data['z']
hole_radii[:] = holes_data["radius"]
hole_flags[:] = holes_data["flag"]
return holes_xyz, hole_radii, hole_flags
[docs]def load_galaxy_data(infilename):
"""
Load a table of galaxies for use in VoidRender
Parameters
==========
infilename : string
path to desired data file
intended to be an astropy table output from VoidFinder
with columns 'ra', 'dec', 'redshift', and possibly 'Rgal'
Returns
=======
galaxy_data_xyz : numpy.ndarray shape (N,3)
xyz coordinates of galaxies from the data table
"""
galaxy_data = load_data_to_Table(infilename)
if all([name in galaxy_data.colnames for name in ['x', 'y', 'z']]):
num_rows = len(galaxy_data)
galaxy_data_xyz = numpy.empty((num_rows, 3), dtype=numpy.float64)
galaxy_data_xyz[:,0] = galaxy_data['x']
galaxy_data_xyz[:,1] = galaxy_data['y']
galaxy_data_xyz[:,2] = galaxy_data['z']
else:
############################################################################
# Identify the redshift column label
#---------------------------------------------------------------------------
if 'redshift' in galaxy_data.colnames:
z_column = 'redshift'
elif 'REDSHIFT' in galaxy_data.colnames:
z_column = 'REDSHIFT'
elif 'z' in galaxy_data.colnames:
z_column = 'z'
else:
print('Redshift column not known. Please rename column to "redshift".')
############################################################################
############################################################################
# Calculate the distance to the galaxies
#---------------------------------------------------------------------------
if distance_metric == 'comoving' and 'Rgal' not in galaxy_data.columns:
r_gal = z_to_comoving_dist(galaxy_data[z_column].data.astype(numpy.float32),
Omega_M,
h)
elif distance_metric == 'comoving':
r_gal = galaxy_data['Rgal']
else:
r_gal = c*galaxy_data[z_column]/(100*h)
############################################################################
############################################################################
# Convert sky coordinates to Cartesian coordinates
#---------------------------------------------------------------------------
xin = r_gal*numpy.cos(galaxy_data['ra']*DtoR)*numpy.cos(galaxy_data['dec']*DtoR)
yin = r_gal*numpy.sin(galaxy_data['ra']*DtoR)*numpy.cos(galaxy_data['dec']*DtoR)
zin = r_gal*numpy.sin(galaxy_data['dec']*DtoR)
############################################################################
############################################################################
# Create output array
#---------------------------------------------------------------------------
#xyz_galaxy_table = Table([xin, yin, zin], names=('x','y','z'))
num_rows = len(galaxy_data)
galaxy_data_xyz = numpy.empty((num_rows, 3), dtype=numpy.float64)
galaxy_data_xyz[:,0] = xin
galaxy_data_xyz[:,1] = yin
galaxy_data_xyz[:,2] = zin
############################################################################
return galaxy_data_xyz