def test__different_number_of_slices_between_planes(self): ordered_plane_redshifts = [(1.0 / 3.0), (2.0 / 3.0), 1.0, 1.25, 1.5, 1.75, 2.0] galaxies = [ ag.Galaxy(redshift=0.1), ag.Galaxy(redshift=0.2), ag.Galaxy(redshift=1.25), ag.Galaxy(redshift=1.35), ag.Galaxy(redshift=1.45), ag.Galaxy(redshift=1.55), ag.Galaxy(redshift=1.9), ] galaxies_in_redshift_ordered_planes = galaxies_in_redshift_ordered_planes_from( galaxies=galaxies, plane_redshifts=ordered_plane_redshifts ) assert galaxies_in_redshift_ordered_planes[0][0].redshift == 0.1 assert galaxies_in_redshift_ordered_planes[0][1].redshift == 0.2 assert galaxies_in_redshift_ordered_planes[1] == [] assert galaxies_in_redshift_ordered_planes[2] == [] assert galaxies_in_redshift_ordered_planes[3][0].redshift == 1.25 assert galaxies_in_redshift_ordered_planes[3][1].redshift == 1.35 assert galaxies_in_redshift_ordered_planes[4][0].redshift == 1.45 assert galaxies_in_redshift_ordered_planes[4][1].redshift == 1.55 assert galaxies_in_redshift_ordered_planes[6][0].redshift == 1.9
def test__6_galaxies_producing_4_planes__galaxy_redshift_match_planes(self): g0 = ag.Galaxy(redshift=1.0) g1 = ag.Galaxy(redshift=1.0) g2 = ag.Galaxy(redshift=0.1) g3 = ag.Galaxy(redshift=1.05) g4 = ag.Galaxy(redshift=0.95) g5 = ag.Galaxy(redshift=1.05) galaxies = [g0, g1, g2, g3, g4, g5] ordered_plane_redshifts = [0.1, 0.95, 1.0, 1.05] galaxies_in_redshift_ordered_planes = galaxies_in_redshift_ordered_planes_from( galaxies=galaxies, plane_redshifts=ordered_plane_redshifts ) assert galaxies_in_redshift_ordered_planes[0][0].redshift == 0.1 assert galaxies_in_redshift_ordered_planes[1][0].redshift == 0.95 assert galaxies_in_redshift_ordered_planes[2][0].redshift == 1.0 assert galaxies_in_redshift_ordered_planes[2][1].redshift == 1.0 assert galaxies_in_redshift_ordered_planes[3][0].redshift == 1.05 assert galaxies_in_redshift_ordered_planes[3][1].redshift == 1.05 assert galaxies_in_redshift_ordered_planes[0] == [g2] assert galaxies_in_redshift_ordered_planes[1] == [g4] assert galaxies_in_redshift_ordered_planes[2] == [g0, g1] assert galaxies_in_redshift_ordered_planes[3] == [g3, g5]
def from_galaxies(cls, galaxies, cosmology=cosmo.Planck15): plane_redshifts = plane_util.ordered_plane_redshifts_from( galaxies=galaxies) galaxies_in_planes = plane_util.galaxies_in_redshift_ordered_planes_from( galaxies=galaxies, plane_redshifts=plane_redshifts) planes = [] for plane_index in range(0, len(plane_redshifts)): planes.append(pl.Plane(galaxies=galaxies_in_planes[plane_index])) return Tracer(planes=planes, cosmology=cosmology)
def test_3_galaxies_x2_same_redshift__order_is_size_2_with_redshifts__plane_match_galaxy_redshifts( self, ): galaxies = [ ag.Galaxy(redshift=1.0), ag.Galaxy(redshift=1.0), ag.Galaxy(redshift=0.1), ] ordered_plane_redshifts = [0.1, 1.0] galaxies_in_redshift_ordered_planes = galaxies_in_redshift_ordered_planes_from( galaxies=galaxies, plane_redshifts=ordered_plane_redshifts) assert galaxies_in_redshift_ordered_planes[0][0].redshift == 0.1 assert galaxies_in_redshift_ordered_planes[1][0].redshift == 1.0 assert galaxies_in_redshift_ordered_planes[1][1].redshift == 1.0
def test__3_galaxies_reordered_in_ascending_redshift__planes_match_galaxy_redshifts( self, ): galaxies = [ ag.Galaxy(redshift=2.0), ag.Galaxy(redshift=1.0), ag.Galaxy(redshift=0.1), ] ordered_plane_redshifts = [0.1, 1.0, 2.0] galaxies_in_redshift_ordered_planes = galaxies_in_redshift_ordered_planes_from( galaxies=galaxies, plane_redshifts=ordered_plane_redshifts) assert galaxies_in_redshift_ordered_planes[0][0].redshift == 0.1 assert galaxies_in_redshift_ordered_planes[1][0].redshift == 1.0 assert galaxies_in_redshift_ordered_planes[2][0].redshift == 2.0
def test__galaxy_redshifts_dont_match_plane_redshifts__tied_to_nearest_plane(self): ordered_plane_redshifts = [0.5, 1.0, 2.0, 3.0] galaxies = [ ag.Galaxy(redshift=0.2), ag.Galaxy(redshift=0.4), ag.Galaxy(redshift=0.8), ag.Galaxy(redshift=1.2), ag.Galaxy(redshift=2.9), ] galaxies_in_redshift_ordered_planes = galaxies_in_redshift_ordered_planes_from( galaxies=galaxies, plane_redshifts=ordered_plane_redshifts ) assert galaxies_in_redshift_ordered_planes[0][0].redshift == 0.2 assert galaxies_in_redshift_ordered_planes[0][1].redshift == 0.4 assert galaxies_in_redshift_ordered_planes[1][0].redshift == 0.8 assert galaxies_in_redshift_ordered_planes[1][1].redshift == 1.2 assert galaxies_in_redshift_ordered_planes[2] == [] assert galaxies_in_redshift_ordered_planes[3][0].redshift == 2.9
def sliced_tracer_from_lens_line_of_sight_and_source_galaxies( cls, lens_galaxies, line_of_sight_galaxies, source_galaxies, planes_between_lenses, cosmology=cosmo.Planck15, ): """Ray-tracer for a lens system with any number of planes. The redshift of these planes are specified by the input parameters *lens_redshifts* and \ *slices_between_main_planes*. Every galaxy is placed in its closest plane in redshift-space. To perform multi-plane ray-tracing, a cosmology must be supplied so that deflection-angles can be rescaled \ according to the lens-geometry of the multi-plane system. All galaxies input to the tracer must therefore \ have redshifts. This tracer has only one grid (see gridStack) which is used for ray-tracing. Parameters ---------- lens_galaxies : [Galaxy] The list of galaxies in the ray-tracing calculation. image_plane_grid : grid_stacks.GridStack The image-plane grid which is traced. (includes the grid, sub-grid, blurring-grid, etc.). planes_between_lenses : [int] The number of slices between each main plane. The first entry in this list determines the number of slices \ between Earth (redshift 0.0) and main plane 0, the next between main planes 0 and 1, etc. border : masks.GridBorder The border of the grid, which is used to relocate demagnified traced pixels to the \ source-plane borders. cosmology : astropy.cosmology The cosmology of the ray-tracing calculation. """ lens_redshifts = plane_util.ordered_plane_redshifts_from( galaxies=lens_galaxies) plane_redshifts = plane_util.ordered_plane_redshifts_with_slicing_from( lens_redshifts=lens_redshifts, planes_between_lenses=planes_between_lenses, source_plane_redshift=source_galaxies[0].redshift, ) galaxies_in_planes = plane_util.galaxies_in_redshift_ordered_planes_from( galaxies=lens_galaxies + line_of_sight_galaxies, plane_redshifts=plane_redshifts, ) plane_redshifts.append(source_galaxies[0].redshift) galaxies_in_planes.append(source_galaxies) planes = [] for plane_index in range(0, len(plane_redshifts)): planes.append( pl.Plane( redshift=plane_redshifts[plane_index], galaxies=galaxies_in_planes[plane_index], )) return Tracer(planes=planes, cosmology=cosmology)