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