def construct_illustris_images(num_of_images, illustris_gal_path): """ function returns N images of the same galaxy at different projections """ #file_path = "/Users/dalyabaron/Downloads/cutout_242959.hdf5" #file_path = "/Users/dalyabaron/Copy/Astrophysics/python/new_scripts/new_scripts/DeprojectAllGalaxies/illustris_galaxies/cutout_83.hdf5" file_path = illustris_gal_path illustris_gal = astrohack_projections.illustris_model_and_image(file_path) illustris_gal.set_image_shape((60, 80)) images = [] for i in xrange(num_of_images): xi_hat, eta_hat = astrohack_projections.choose_random_projection() alpha, beta, gamma = numpy.random.uniform(0.0, 360.0, 3) intensity = 20 #150 scale = 0.015 * numpy.exp(numpy.random.uniform()) #0.18 * numpy.exp(numpy.random.uniform()) xshift = numpy.random.uniform(29., 31.)#(13., 16.) yshift = numpy.random.uniform(39., 41.)#(18., 21.) psf_size = 1.5 #1 bg = 0. kwargs = {'alpha':alpha, 'beta':beta, 'gamma':gamma, 'intensity':intensity, 'scale':scale, 'xshift': xshift, 'yshift': yshift, 'bg':0.0, 'psf_size':psf_size} illustris_gal.set_image_parameters(**kwargs) illustris_gal.construct_image() images.append(illustris_gal.get_image()) return images
def _construct_initial_album(self): """ construct the initial album with which the fitting begins, the album is constrcuted based on the same image parameters """ assert len(self.images_to_fit) > 0 assert self.in_gaus_num != None # album and PSF initialisation album = astrohack_projections.album_and_model() psf = astrohack_projections.mixture_of_gaussians(2) psf.add_gaussian(1., numpy.array([0., 0.]), numpy.eye(2)*1.) # construct the galaxy using Gaussian mixture basevar = 0.5 * numpy.eye(3) gal_model = astrohack_projections.galaxy_model_3d() for i in xrange(self.in_gaus_num): v = numpy.random.uniform(0, 3, size=3) mu = numpy.random.uniform(-3, 3, size=3) gal_model.add_gaussian(1.0, mu, basevar + numpy.outer(v, v)) # add all images to the album for i in xrange(self.image_parameters['num']): data = self.images_to_fit[i] # projection parameters xi_hat, eta_hat = astrohack_projections.choose_random_projection() alpha, beta, gamma = numpy.random.uniform(0.0, 360.0, 3) intensity = self.image_parameters['intensity'] scale = self.image_parameters['scale'] * numpy.exp(numpy.random.uniform()) if scale < 0.5: scale = 0.5 xshift = numpy.random.uniform(self.image_parameters['xshift'][0], self.image_parameters['xshift'][1]) yshift = numpy.random.uniform(self.image_parameters['yshift'][0], self.image_parameters['yshift'][1]) bg = self.image_parameters['bg'] image = astrohack_projections.image_and_model() image.set_shape(self.image_parameters['shape']) image.set_psf(psf) kwargs = {'alpha':alpha, 'beta':beta, 'gamma':gamma, 'intensity':intensity, 'scale':scale, 'xshift': xshift, 'yshift': yshift, 'bg':0.0} image.set_parameters(**kwargs) image.set_galaxy(gal_model) image.set_ivar(numpy.ones(data.shape)) image.set_data(data + numpy.random.normal(size=data.shape)/ numpy.sqrt(image.ivar)) # album album.add_image(image) album.set_galaxy(gal_model) self.albums[len(album.galaxy.alphas)] = album self.in_album = album
def construct_initial_album(illustris_images, psf_blur_size=None): """ the initial album contains 32 images of the illustris galaxy, the images will be a little blured so that 3 Gaussians will be sufficient for the fitting process. the album will contain a galaxy_3d_model that contains 3 Gaussians """ num_of_images = len(illustris_images) # album and PSF initialisation album = astrohack_projections.album_and_model() psf = astrohack_projections.mixture_of_gaussians(2) psf.add_gaussian(1., numpy.array([0., 0.]), numpy.eye(2)*1.) # construct the galaxy using Gaussian mixture basevar = 0.5 * numpy.eye(3) gal_model = astrohack_projections.galaxy_model_3d() for i in xrange(3): v = numpy.random.uniform(0, 3, size=3) mu = numpy.random.uniform(-3, 3, size=3) gal_model.add_gaussian(1.0, mu, basevar + numpy.outer(v, v)) # add all images to the album for i in xrange(num_of_images): if psf_blur_size != None: data = gaussian_filter(illustris_images[i], psf_blur_size) else: data = illustris_images[i] # projection parameters xi_hat, eta_hat = astrohack_projections.choose_random_projection() alpha, beta, gamma = numpy.random.uniform(0.0, 360.0, 3) intensity = 20 #150 # scale = 0.5 * numpy.exp(numpy.random.uniform()) #0.18 * numpy.exp(numpy.random.uniform()) # xshift = numpy.random.uniform(29.5, 31.)#(13., 16.)# yshift = numpy.random.uniform(39.5, 41.)#(18., 21.)# bg = 0. image = astrohack_projections.image_and_model() image.set_shape((60, 80)) image.set_psf(psf) scale = 0.3 #0.5 kwargs = {'alpha':alpha, 'beta':beta, 'gamma':gamma, 'intensity':intensity, 'scale':scale, 'xshift': xshift, 'yshift': yshift, 'bg':0.0} image.set_parameters(**kwargs) image.set_galaxy(gal_model) image.set_ivar(numpy.ones(data.shape)) image.set_data(data + numpy.random.normal(size=data.shape)/ numpy.sqrt(image.ivar)) # album album.add_image(image) return album
def _construct_images_to_fit(self): """ function constrcts a list of images for the fitting process based on the image parameters """ assert self.gal_path != None illustris_gal = astrohack_projections.illustris_model_and_image(self.gal_path) illustris_gal.set_image_shape(self.image_parameters['shape']) self.images_to_fit = [] for i in xrange(self.image_parameters['num']): xi_hat, eta_hat = astrohack_projections.choose_random_projection() alpha, beta, gamma = numpy.random.uniform(0.0, 360.0, 3) intensity = self.image_parameters['intensity'] scale = self.image_parameters['scale'] * numpy.exp(numpy.random.uniform()) xshift = numpy.random.uniform(self.image_parameters['xshift'][0], self.image_parameters['xshift'][1]) yshift = numpy.random.uniform(self.image_parameters['yshift'][0], self.image_parameters['yshift'][1]) psf_size = self.image_parameters['psf_size'] bg = self.image_parameters['bg'] kwargs = {'alpha':alpha, 'beta':beta, 'gamma':gamma, 'intensity':intensity, 'scale':scale, 'xshift': xshift, 'yshift': yshift, 'bg':0.0, 'psf_size':psf_size} illustris_gal.set_image_parameters(**kwargs) illustris_gal.construct_image() self.images_to_fit.append(illustris_gal.get_image())