def test_addition(self): phase_1 = DummyPhaseImaging("one") phase_2 = DummyPhaseImaging("two") phase_3 = DummyPhaseImaging("three") pipeline1 = al.PipelineDataset("", phase_1, phase_2) pipeline2 = al.PipelineDataset("", phase_3) assert (phase_1, phase_2, phase_3) == (pipeline1 + pipeline2).phases
def make_pipeline( name, phase_folders, real_space_shape_2d=(100, 100), real_space_pixel_scales=(0.1, 0.1), optimizer_class=af.MultiNest, ): class LensPlanex2GalPhase(al.PhaseInterferometer): def customize_priors(self, results): self.galaxies.lens_0.light.centre_0 = -1.0 self.galaxies.lens_0.light.centre_1 = -1.0 self.galaxies.lens_1.light.centre_0 = 1.0 self.galaxies.lens_1.light.centre_1 = 1.0 phase1 = LensPlanex2GalPhase( phase_name="phase_1", phase_folders=phase_folders, galaxies=dict( lens_0=al.GalaxyModel(redshift=0.5, light=al.lp.EllipticalSersic), lens_1=al.GalaxyModel(redshift=0.5, light=al.lp.EllipticalSersic), ), real_space_shape_2d=real_space_shape_2d, real_space_pixel_scales=real_space_pixel_scales, optimizer_class=optimizer_class, ) phase1.optimizer.const_efficiency_mode = True phase1.optimizer.n_live_points = 40 phase1.optimizer.sampling_efficiency = 0.8 return al.PipelineDataset(name, phase1)
def make_pipeline(name, phase_folders, non_linear_class=af.MultiNest): class MMPhase(al.PhaseImaging): pass phase1 = MMPhase( phase_name="phase_1", phase_folders=phase_folders, galaxies=dict(lens=al.GalaxyModel(redshift=0.5, light=al.lp.EllipticalSersic)), non_linear_class=non_linear_class, ) phase1.optimizer.const_efficiency_mode = True phase1.optimizer.n_live_points = 20 phase1.optimizer.sampling_efficiency = 0.8 class MMPhase2(al.PhaseImaging): def customize_priors(self, results): self.galaxies.lens = results.from_phase("phase_1").model.lens phase2 = MMPhase2( phase_name="phase_2", phase_folders=phase_folders, galaxies=dict(lens=al.GalaxyModel(redshift=0.5, light=al.lp.EllipticalSersic)), non_linear_class=non_linear_class, ) phase2.optimizer.const_efficiency_mode = True phase2.optimizer.n_live_points = 20 phase2.optimizer.sampling_efficiency = 0.8 return al.PipelineDataset(name, phase1, phase2)
def make_pipeline(name, phase_folders, non_linear_class=af.MultiNest): phase1 = al.PhaseImaging( phase_name="phase_1", phase_folders=phase_folders, galaxies=dict( lens=al.GalaxyModel(redshift=0.5, mass=al.mp.EllipticalIsothermal), source_0=al.GalaxyModel(redshift=1.0, sersic=al.lp.EllipticalSersic), ), non_linear_class=non_linear_class, ) phase1.optimizer.const_efficiency_mode = True phase1.optimizer.n_live_points = 60 phase1.optimizer.sampling_efficiency = 0.7 phase2 = al.PhaseImaging( phase_name="phase_2", phase_folders=phase_folders, galaxies=dict( lens=phase1.result.model.galaxies.lens, source_0=phase1.result.model.galaxies.source_0, source_1=al.GalaxyModel(redshift=1.0, sersic=al.lp.EllipticalSersic), source_2=al.GalaxyModel(redshift=1.0, sersic=al.lp.EllipticalSersic), ), non_linear_class=non_linear_class, ) phase2.optimizer.const_efficiency_mode = True phase2.optimizer.n_live_points = 60 phase2.optimizer.sampling_efficiency = 0.7 return al.PipelineDataset(name, phase1, phase2)
def make_pipeline(name, phase_folders, non_linear_class=af.MultiNest): class LensPhase(al.PhaseImaging): def customize_priors(self, results): self.galaxies.lens.mass.centre_0 = af.GaussianPrior(mean=4.0, sigma=0.1) self.galaxies.lens.mass.centre_1 = af.GaussianPrior(mean=4.0, sigma=0.1) self.galaxies.source.light.centre_0 = af.GaussianPrior(mean=4.0, sigma=0.1) self.galaxies.source.light.centre_1 = af.GaussianPrior(mean=4.0, sigma=0.1) phase1 = LensPhase( phase_name="phase_1", phase_folders=phase_folders, galaxies=dict( lens=al.GalaxyModel(redshift=0.5, mass=al.mp.SphericalIsothermal), source=al.GalaxyModel(redshift=1.0, light=al.lp.EllipticalSersic), ), positions_threshold=0.5, non_linear_class=non_linear_class, ) phase1.optimizer.const_efficiency_mode = True phase1.optimizer.n_live_points = 30 phase1.optimizer.sampling_efficiency = 0.8 return al.PipelineDataset(name, phase1)
def make_pipeline(name, phase_folders, non_linear_class=af.MultiNest): phase1 = al.PhaseImaging( phase_name="phase_1", phase_folders=phase_folders, galaxies=dict( lens=al.GalaxyModel(redshift=0.5, mass=al.mp.EllipticalIsothermal), source=al.GalaxyModel(redshift=1.0, sersic=al.lp.EllipticalSersic), ), sub_size=1, non_linear_class=non_linear_class, ) phase1.optimizer.const_efficiency_mode = True phase1.optimizer.n_live_points = 20 phase1.optimizer.sampling_efficiency = 0.8 # We want to set up the source from the result, where: # If it is parametric, it is a model (thus N = 12). # If it is an inversion, it is an instance (Thus N = 5) # When we use af.last, this fails, because the promise pixelizzation attribute is another promise. source = source_with_previous_model_or_instance() phase2 = al.PhaseImaging( phase_name="phase_2", phase_folders=phase_folders, galaxies=dict(lens=phase1.result.model.galaxies.lens, source=source), sub_size=1, non_linear_class=non_linear_class, ) return al.PipelineDataset(name, phase1, phase2)
def make_pipeline(name, folders, search=af.DynestyStatic()): phase1 = al.PhaseImaging( phase_name="phase_1", folders=folders, galaxies=dict( lens=al.GalaxyModel(redshift=0.5, mass=al.mp.EllipticalIsothermal), source_0=al.GalaxyModel(redshift=1.0, light=al.lp.EllipticalSersic), ), search=search, ) phase2 = al.PhaseImaging( phase_name="phase_2", folders=folders, galaxies=dict( lens=al.GalaxyModel(redshift=0.5, mass=phase1.result.model.galaxies.lens.mass), source_0=al.GalaxyModel( redshift=1.0, light=phase1.result.model.galaxies.source_0.light), source_1=al.GalaxyModel(redshift=1.0, light=al.lp.EllipticalSersic), ), search=search, ) return al.PipelineDataset(name, phase1, phase2)
def make_pipeline(name, folders, real_space_mask, search=af.DynestyStatic()): mass = af.PriorModel(al.mp.EllipticalIsothermal) mass.centre.centre_0 = 0.0 mass.centre.centre_1 = 0.0 mass.einstein_radius = 1.6 pixelization = af.PriorModel(al.pix.Rectangular) pixelization.shape_0 = 20.0 pixelization.shape_1 = 20.0 phase1 = al.PhaseInterferometer( phase_name="phase_1", folders=folders, galaxies=dict( lens=al.GalaxyModel(redshift=0.5, bulge=al.lp.SphericalDevVaucouleurs, mass=mass), source=al.GalaxyModel(redshift=1.0, pixelization=pixelization, regularization=al.reg.Constant), ), real_space_mask=real_space_mask, search=search, ) phase1.search.const_efficiency_mode = True phase1.search.n_live_points = 60 phase1.search.facc = 0.8 return al.PipelineDataset(name, phase1)
def make_pipeline(name, phase_folders, optimizer_class=af.MultiNest): sersic = af.PriorModel(al.lp.EllipticalSersic) # This will lead to pretty weird results sersic.add_assertion(sersic.axis_ratio > sersic.intensity) phase1 = al.PhaseImaging( phase_name="phase_1", phase_folders=phase_folders, galaxies=dict(lens=al.GalaxyModel(redshift=0.5, sersic=sersic)), optimizer_class=optimizer_class, ) phase1.optimizer.const_efficiency_mode = True phase1.optimizer.n_live_points = 40 phase1.optimizer.sampling_efficiency = 0.8 # TODO : And even with them not causing errors above, the promise doesnt work. phase2 = al.PhaseImaging( phase_name="phase_2", phase_folders=phase_folders, galaxies=dict(lens=phase1.result.model.galaxies.lens), optimizer_class=optimizer_class, ) phase2.optimizer.const_efficiency_mode = True phase2.optimizer.n_live_points = 40 phase2.optimizer.sampling_efficiency = 0.8 return al.PipelineDataset(name, phase1, phase2)
def make_pipeline(name, phase_folders, optimizer_class=af.MultiNest): phase1 = al.PhaseImaging( phase_name="phase_1", phase_folders=phase_folders, galaxies=dict( lens=al.GalaxyModel(redshift=0.5, light=al.lp.EllipticalSersic)), optimizer_class=optimizer_class, ) phase1.optimizer.const_efficiency_mode = True phase1.optimizer.n_live_points = 40 phase1.optimizer.sampling_efficiency = 0.8 phase1 = phase1.extend_with_multiple_hyper_phases(hyper_galaxy=True) phase2 = al.PhaseImaging( phase_name="phase_2", phase_folders=phase_folders, galaxies=dict(lens=al.GalaxyModel( redshift=0.5, light=phase1.result.model.galaxies.lens.light, hyper_galaxy=phase1.result.hyper_combined.instance.galaxies.lens. hyper_galaxy, )), optimizer_class=optimizer_class, ) phase2.optimizer.const_efficiency_mode = True phase2.optimizer.n_live_points = 40 phase2.optimizer.sampling_efficiency = 0.8 return al.PipelineDataset(name, phase1, phase2)
def make_pipeline( name, phase_folders, real_space_shape_2d=(100, 100), real_space_pixel_scales=(0.1, 0.1), optimizer_class=af.MultiNest, ): phase1 = al.PhaseInterferometer( phase_name="phase_1", phase_folders=phase_folders, galaxies=dict( lens=al.GalaxyModel( redshift=0.5, light=al.lp.SphericalDevVaucouleurs, mass=al.mp.EllipticalIsothermal, ), source=al.GalaxyModel(redshift=1.0, light=al.lp.EllipticalSersic), ), real_space_shape_2d=real_space_shape_2d, real_space_pixel_scales=real_space_pixel_scales, optimizer_class=optimizer_class, ) phase1.optimizer.const_efficiency_mode = True phase1.optimizer.n_live_points = 60 phase1.optimizer.sampling_efficiency = 0.8 return al.PipelineDataset(name, phase1)
def make_pipeline( name, phase_folders, real_space_shape_2d=(100, 100), real_space_pixel_scales=(0.1, 0.1), optimizer_class=af.MultiNest, ): phase1 = al.PhaseInterferometer( phase_name="phase_1", phase_folders=phase_folders, galaxies=dict( lens=al.GalaxyModel( redshift=0.5, light=al.lp.SphericalDevVaucouleurs, mass=al.mp.EllipticalIsothermal, ), source=al.GalaxyModel(redshift=1.0, light=al.lp.EllipticalSersic), ), real_space_shape_2d=real_space_shape_2d, real_space_pixel_scales=real_space_pixel_scales, optimizer_class=optimizer_class, ) phase1.optimizer.const_efficiency_mode = True phase1.optimizer.n_live_points = 60 phase1.optimizer.sampling_efficiency = 0.8 phase1 = phase1.extend_with_multiple_hyper_phases(hyper_galaxy=True) phase2 = al.PhaseInterferometer( phase_name="phase_2", phase_folders=phase_folders, galaxies=dict( lens=al.GalaxyModel( redshift=0.5, light=phase1.result.model.galaxies.lens.light, mass=phase1.result.model.galaxies.lens.mass, hyper_galaxy=phase1.result.hyper_combined.instance.galaxies. lens.hyper_galaxy, ), source=al.GalaxyModel( redshift=1.0, light=phase1.result.model.galaxies.source.light, hyper_galaxy=phase1.result.hyper_combined.instance.galaxies. source.hyper_galaxy, ), ), real_space_shape_2d=real_space_shape_2d, real_space_pixel_scales=real_space_pixel_scales, optimizer_class=optimizer_class, ) phase2.optimizer.const_efficiency_mode = True phase2.optimizer.n_live_points = 40 phase2.optimizer.sampling_efficiency = 0.8 phase2 = phase2.extend_with_multiple_hyper_phases(hyper_galaxy=True) return al.PipelineDataset(name, phase1, phase2)
def make_pipeline(name, phase_folders, optimizer_class=af.MultiNest): class SourcePix(al.PhaseImaging): def customize_priors(self, results): self.galaxies.lens.mass.centre.centre_0 = 0.0 self.galaxies.lens.mass.centre.centre_1 = 0.0 self.galaxies.lens.mass.einstein_radius = 1.6 self.galaxies.source.pixelization.shape_0 = 20.0 self.galaxies.source.pixelization.shape_1 = 20.0 phase1 = SourcePix( phase_name="phase_1", phase_folders=phase_folders, galaxies=dict( lens=al.GalaxyModel( redshift=0.5, light=al.lp.SphericalDevVaucouleurs, mass=al.mp.EllipticalIsothermal, ), source=al.GalaxyModel( redshift=1.0, pixelization=al.pix.VoronoiMagnification, regularization=al.reg.Constant, ), ), optimizer_class=optimizer_class, ) phase1.optimizer.const_efficiency_mode = True phase1.optimizer.n_live_points = 60 phase1.optimizer.sampling_efficiency = 0.8 return al.PipelineDataset(name, phase1)
def make_pipeline(name, phase_folders, optimizer_class=af.MultiNest): class MMPhase(al.PhaseImaging): def customize_priors(self, results): self.galaxies.lens_0.light.axis_ratio = 0.2 self.galaxies.lens_0.light.phi = 90.0 self.galaxies.lens_0.light.centre_0 = 1.0 self.galaxies.lens_0.light.centre_1 = 2.0 self.galaxies.lens_1.light.axis_ratio = 0.2 self.galaxies.lens_1.light.phi = 90.0 self.galaxies.lens_1.light.centre_0 = 1.0 self.galaxies.lens_1.light.centre_1 = 2.0 phase1 = MMPhase( phase_name="phase_1", phase_folders=phase_folders, galaxies=dict( lens_0=al.GalaxyModel(redshift=0.5, light=al.lp.EllipticalSersic), lens_1=al.GalaxyModel(redshift=0.5, light=al.lp.EllipticalSersic), ), optimizer_class=optimizer_class, ) phase1.optimizer.const_efficiency_mode = True phase1.optimizer.n_live_points = 20 phase1.optimizer.sampling_efficiency = 0.8 return al.PipelineDataset(name, phase1)
def make_pipeline( name, phase_folders, real_space_shape_2d=(100, 100), real_space_pixel_scales=(0.1, 0.1), non_linear_class=af.MultiNest, ): class LensPlaneGalaxyX2Phase(al.PhaseInterferometer): def customize_priors(self, results): self.galaxies.lens_0.light.centre_0 = -1.0 self.galaxies.lens_0.light.centre_1 = -1.0 self.galaxies.lens_1.light.centre_0 = 1.0 self.galaxies.lens_1.light.centre_1 = 1.0 phase1 = LensPlaneGalaxyX2Phase( phase_name="phase_1", phase_folders=phase_folders, galaxies=dict( lens_0=al.GalaxyModel(redshift=0.5, light=al.lp.EllipticalSersic), lens_1=al.GalaxyModel(redshift=0.5, light=al.lp.EllipticalSersic), ), real_space_shape_2d=real_space_shape_2d, real_space_pixel_scales=real_space_pixel_scales, non_linear_class=non_linear_class, ) phase1.optimizer.const_efficiency_mode = True phase1.optimizer.n_live_points = 40 phase1.optimizer.sampling_efficiency = 0.8 phase1 = phase1.extend_with_multiple_hyper_phases(hyper_galaxy=True) phase2 = al.PhaseInterferometer( phase_name="phase_2", phase_folders=phase_folders, galaxies=dict( lens_0=al.GalaxyModel( redshift=0.5, light=phase1.result.model.galaxies.lens_0.light, hyper_galaxy=phase1.result.hyper_combined.instance.galaxies.lens_0.hyper_galaxy, ), lens_1=al.GalaxyModel( redshift=0.5, light=phase1.result.model.galaxies.lens_1.light, hyper_galaxy=phase1.result.hyper_combined.instance.galaxies.lens_1.hyper_galaxy, ), ), real_space_shape_2d=real_space_shape_2d, real_space_pixel_scales=real_space_pixel_scales, non_linear_class=non_linear_class, ) phase2.optimizer.const_efficiency_mode = True phase2.optimizer.n_live_points = 40 phase2.optimizer.sampling_efficiency = 0.8 return al.PipelineDataset(name, phase1, phase2)
def make_pipeline(name, phase_folders, optimizer_class=af.MultiNest): class QuickPhase(al.PhaseImaging): def customize_priors(self, results): self.galaxies.lens.light.centre_0 = af.UniformPrior( lower_limit=-0.01, upper_limit=0.01) self.galaxies.lens.light.centre_1 = af.UniformPrior( lower_limit=-0.01, upper_limit=0.01) self.galaxies.lens.light.axis_ratio = af.UniformPrior( lower_limit=0.79, upper_limit=0.81) self.galaxies.lens.light.phi = af.UniformPrior(lower_limit=-1.0, upper_limit=1.0) self.galaxies.lens.light.intensity = af.UniformPrior( lower_limit=0.99, upper_limit=1.01) self.galaxies.lens.light.effective_radius = af.UniformPrior( lower_limit=1.25, upper_limit=1.35) self.galaxies.lens.light.sersic_index = af.UniformPrior( lower_limit=3.95, upper_limit=4.05) phase1 = QuickPhase( phase_name="phase_1", phase_folders=phase_folders, galaxies=dict( lens=al.GalaxyModel(redshift=0.5, light=al.lp.EllipticalSersic)), optimizer_class=optimizer_class, ) phase1.optimizer.const_efficiency_mode = True phase1.optimizer.n_live_points = 40 phase1.optimizer.sampling_efficiency = 0.8 class GridPhase(al.PhaseImaging): def customize_priors(self, results): self.galaxies.lens.light.centre_0 = 0.0 self.galaxies.lens.light.centre_1 = 0.0 self.galaxies.lens.light.axis_ratio = results.from_phase( "phase_1").instance.lens.light.axis_ratio self.galaxies.lens.light.phi = results.from_phase( "phase_1").instance.lens.light.phi self.galaxies.lens.light.intensity = results.from_phase( "phase_1").instance.lens.light.intensity self.galaxies.lens.light.effective_radius = af.UniformPrior( lower_limit=0.0, upper_limit=4.0) self.galaxies.lens.light.sersic_index = af.UniformPrior( lower_limit=1.0, upper_limit=8.0) phase2 = GridPhase( phase_name="phase_2", phase_folders=phase_folders, galaxies=dict( lens=al.GalaxyModel(redshift=0.5, light=al.lp.EllipticalSersic)), optimizer_class=af.GridSearch, ) phase2.optimizer.const_efficiency_mode = True return al.PipelineDataset(name, phase1, phase2)
def make_pipeline(name, phase_folders, non_linear_class=af.MultiNest): phase1 = al.PhaseImaging( phase_name="phase_1", phase_folders=phase_folders, galaxies=dict( lens=al.GalaxyModel( redshift=0.5, light=al.lp.SphericalDevVaucouleurs, mass=al.mp.EllipticalIsothermal, ), source=al.GalaxyModel(redshift=1.0, light=al.lp.EllipticalSersic), ), non_linear_class=non_linear_class, ) phase1.optimizer.const_efficiency_mode = True phase1.optimizer.n_live_points = 60 phase1.optimizer.sampling_efficiency = 0.8 phase1 = phase1.extend_with_multiple_hyper_phases( hyper_galaxy=True, include_background_sky=True, include_background_noise=True) phase2 = al.PhaseImaging( phase_name="phase_2", phase_folders=phase_folders, galaxies=dict( lens=al.GalaxyModel( redshift=0.5, light=phase1.result.model.galaxies.lens.light, mass=phase1.result.model.galaxies.lens.mass, hyper_galaxy=phase1.result.hyper_combined.instance.galaxies. lens.hyper_galaxy, ), source=al.GalaxyModel( redshift=1.0, light=phase1.result.model.galaxies.source.light, hyper_galaxy=phase1.result.hyper_combined.instance.galaxies. source.hyper_galaxy, ), ), hyper_image_sky=phase1.result.hyper_combined.instance.hyper_image_sky, hyper_background_noise=phase1.result.hyper_combined.instance. hyper_background_noise, non_linear_class=non_linear_class, ) phase2.optimizer.const_efficiency_mode = True phase2.optimizer.n_live_points = 40 phase2.optimizer.sampling_efficiency = 0.8 phase2 = phase2.extend_with_multiple_hyper_phases( hyper_galaxy=True, include_background_sky=True, include_background_noise=True) return al.PipelineDataset(name, phase1, phase2)
def make_pipeline(name, folders, real_space_mask, search=af.DynestyStatic()): mass = af.PriorModel(al.mp.EllipticalIsothermal) mass.centre.centre_0 = 2.0 mass.centre.centre_1 = 2.0 mass.einstein_radius = 1.6 pixelization = af.PriorModel(al.pix.VoronoiMagnification) pixelization.shape_0 = 20.0 pixelization.shape_1 = 20.0 phase1 = al.PhaseInterferometer( phase_name="phase_1", folders=folders, galaxies=dict( lens=al.GalaxyModel(redshift=0.5, mass=mass), source=al.GalaxyModel(redshift=1.0, pixelization=pixelization, regularization=al.reg.Constant), ), real_space_mask=real_space_mask, search=search, ) phase1.search.const_efficiency_mode = True phase1.search.n_live_points = 60 phase1.search.facc = 0.8 phase1 = phase1.extend_with_inversion_phase() phase2 = al.PhaseInterferometer( phase_name="phase_2", folders=folders, galaxies=dict( lens=al.GalaxyModel(redshift=0.5, mass=phase1.result.model.galaxies.lens.mass), source=al.GalaxyModel( redshift=1.0, pixelization=phase1.results.settings_inversion.instance. galaxies.source.pixelization, regularization=phase1.results.settings_inversion.instance. galaxies.source.regularization, ), ), real_space_mask=real_space_mask, search=search, ) phase2.search.const_efficiency_mode = True phase2.search.n_live_points = 60 phase2.search.facc = 0.8 phase2 = phase2.extend_with_inversion_phase() return al.PipelineDataset(name, phase1, phase2)
def test_run_pipeline(self): phase_1 = DummyPhaseImaging("one") phase_2 = DummyPhaseImaging("two") pipeline = al.PipelineDataset("", phase_1, phase_2) pipeline.run(dataset=MockImagingData(), mask=MockMask()) assert len(phase_2.results) == 2
def test_pass_mask(self): mask = MockMask() phase_1 = DummyPhaseImaging("one") phase_2 = DummyPhaseImaging("two") pipeline = al.PipelineDataset("", phase_1, phase_2) pipeline.run(dataset=MockImagingData(), mask=mask) assert phase_1.mask is mask assert phase_2.mask is mask
def make_pipeline(name, folders, search=af.DynestyStatic()): phase1 = al.PhaseImaging( phase_name="phase_1", folders=folders, galaxies=dict( lens=al.GalaxyModel(redshift=0.5, mass=al.mp.EllipticalIsothermal), source=al.GalaxyModel(redshift=1.0, light=al.lp.EllipticalSersic), ), search=af.DynestyStatic(n_live_points=40, evidence_tolerance=10.0), ) pixeliation = af.PriorModel(al.pix.VoronoiBrightnessImage) pixeliation.pixels = 100 phase1 = phase1.extend_with_multiple_hyper_phases(setup=al.SetupPipeline(), include_inversion=False) phase2 = al.PhaseImaging( phase_name="phase_2", folders=folders, galaxies=dict( lens=al.GalaxyModel( redshift=0.5, mass=phase1.result.instance.galaxies.lens.mass), source=al.GalaxyModel( redshift=1.0, pixelization=pixeliation, regularization=al.reg.AdaptiveBrightness, ), ), search=af.DynestyStatic(n_live_points=40, evidence_tolerance=10.0), ) phase2 = phase2.extend_with_multiple_hyper_phases(setup=al.SetupPipeline(), include_inversion=True) phase3 = al.PhaseImaging( phase_name="phase_3", folders=folders, galaxies=dict( lens=al.GalaxyModel(redshift=0.5, mass=phase1.result.model.galaxies.lens.mass), source=al.GalaxyModel( redshift=1.0, pixelization=phase2.result.instance.galaxies.source. pixelization, regularization=phase2.result.instance.galaxies.source. regularization, ), ), search=af.DynestyStatic(n_live_points=40, evidence_tolerance=10.0), ) return al.PipelineDataset(name, phase1, phase2, phase3)
def make_pipeline(name, phase_folders, non_linear_class=af.MultiNest): class SourcePix(al.PhaseImaging): def customize_priors(self, results): self.galaxies.lens.mass.centre.centre_0 = 0.0 self.galaxies.lens.mass.centre.centre_1 = 0.0 self.galaxies.lens.mass.einstein_radius = 1.6 phase1 = SourcePix( phase_name="phase_1", phase_folders=phase_folders, galaxies=dict( lens=al.GalaxyModel(redshift=0.5, mass=al.mp.EllipticalIsothermal), source=al.GalaxyModel( redshift=1.0, pixelization=al.pix.Rectangular, regularization=al.reg.Constant, ), ), non_linear_class=non_linear_class, ) phase1.optimizer.const_efficiency_mode = True phase1.optimizer.n_live_points = 60 phase1.optimizer.sampling_efficiency = 0.8 phase1.extend_with_multiple_hyper_phases(hyper_galaxy=True) phase2 = al.PhaseImaging( phase_name="phase_2", phase_folders=phase_folders, galaxies=dict( lens=al.GalaxyModel( redshift=0.5, mass=phase1.result.model.galaxies.lens.mass, hyper_galaxy=al.HyperGalaxy, ), source=al.GalaxyModel( redshift=1.0, pixelization=phase1.result.model.galaxies.source.pixelization, regularization=phase1.result.model.galaxies.source. regularization, hyper_galaxy=phase1.result.hyper_combined.instance.galaxies. source.hyper_galaxy, ), ), non_linear_class=non_linear_class, ) phase2.optimizer.const_efficiency_mode = True phase2.optimizer.n_live_points = 40 phase2.optimizer.sampling_efficiency = 0.8 return al.PipelineDataset(name, phase1, phase2)
def make_pipeline(name, phase_folders, non_linear_class=af.MultiNest): phase1 = al.PhaseImaging( phase_name="phase_1__lens_bulge_disk", phase_folders=phase_folders, galaxies=dict( lens=al.GalaxyModel( redshift=0.5, light=al.lp.SphericalDevVaucouleurs, mass=al.mp.EllipticalIsothermal, ), source=al.GalaxyModel(redshift=1.0, light=al.lp.EllipticalSersic), ), non_linear_class=af.MultiNest, ) phase1.optimizer.const_efficiency_mode = True phase1.optimizer.n_live_points = 40 phase1.optimizer.sampling_efficiency = 0.3 lens = al.setup.lens_with_light_only_from_result(result=af.last, fix_lens_light=True) # Setup the power-law mass profile and initialize its priors from the SIE. mass = af.PriorModel(al.mp.EllipticalPowerLaw) mass.centre = af.last.model.galaxies.lens.mass.centre mass.axis_ratio = af.last.model.galaxies.lens.mass.axis_ratio mass.phi = af.last.model.galaxies.lens.mass.phi mass.einstein_radius = af.last.model_absolute( a=0.3).galaxies.lens.mass.einstein_radius lens.mass = mass lens.hyper_galaxy = ( af.last.hyper_combined.instance.optional.galaxies.lens.hyper_galaxy) phase2 = al.PhaseImaging( phase_name="phase_2__lens_power_law__source", phase_folders=phase_folders, galaxies=dict(lens=lens, source=phase1.result.instance.galaxies.source), hyper_image_sky=af.last.hyper_combined.instance.optional. hyper_image_sky, hyper_background_noise=af.last.hyper_combined.instance.optional. hyper_background_noise, non_linear_class=af.MultiNest, ) phase2.optimizer.const_efficiency_mode = True phase2.optimizer.n_live_points = 75 phase2.optimizer.sampling_efficiency = 0.2 return al.PipelineDataset(name, phase1, phase2)
def test_files(self, mock_files): pipeline = al.PipelineDataset( "pipeline_name", DummyPhaseImaging(phase_name="phase_name")) pipeline.run(dataset=MockImagingData(), mask=MockMask()) assert ( mock_files[2].text == "phase=phase_name\nphase_tag=\npipeline=pipeline_name\npipeline_tag=\ndataset_name=data_name" ) assert "phase_name///optimizer.pickle" in mock_files[3].filename
def test_pass_positions(self): positions = [[(1.0, 1.0), (2.0, 2.0)]] phase_1 = DummyPhaseImaging("one") phase_2 = DummyPhaseImaging("two") pipeline = al.PipelineDataset("", phase_1, phase_2) pipeline.run(dataset=MockImagingData(), mask=MockMask(), positions=positions) assert phase_1.positions == positions assert phase_2.positions == positions
def make_pipeline(name, folders, search=af.DynestyStatic()): mass = af.PriorModel(al.mp.EllipticalIsothermal) mass.centre.centre_0 = 0.0 mass.centre.centre_1 = 0.0 mass.einstein_radius = 1.6 phase1 = al.PhaseImaging( phase_name="phase_1", folders=folders, galaxies=dict( lens=al.GalaxyModel(redshift=0.5, mass=mass), source=al.GalaxyModel( redshift=1.0, pixelization=al.pix.Rectangular, regularization=al.reg.Constant, ), ), search=search, ) phase1.search.const_efficiency_mode = True phase1.search.n_live_points = 60 phase1.search.facc = 0.8 phase1.extend_with_multiple_hyper_phases(hyper_galaxies_search=True) phase2 = al.PhaseImaging( phase_name="phase_2", folders=folders, galaxies=dict( lens=al.GalaxyModel( redshift=0.5, mass=phase1.result.model.galaxies.lens.mass, hyper_galaxy=al.HyperGalaxy, ), source=al.GalaxyModel( redshift=1.0, pixelization=phase1.result.model.galaxies.source.pixelization, regularization=phase1.result.model.galaxies.source.regularization, hyper_galaxy=phase1.result.hyper_combined.instance.galaxies.source.hyper_galaxy, ), ), search=search, ) phase2.search.const_efficiency_mode = True phase2.search.n_live_points = 40 phase2.search.facc = 0.8 return al.PipelineDataset(name, phase1, phase2)
def make_pipeline(name, phase_folders, optimizer_class=af.MultiNest): class SourcePix(al.PhaseImaging): def customize_priors(self, results): self.galaxies.lens.mass.centre.centre_0 = 2.0 self.galaxies.lens.mass.centre.centre_1 = 2.0 self.galaxies.lens.mass.einstein_radius = 1.2 phase1 = SourcePix( phase_name="phase_1", phase_folders=phase_folders, galaxies=dict( lens=al.GalaxyModel(redshift=0.5, mass=al.mp.EllipticalIsothermal), source=al.GalaxyModel( redshift=1.0, pixelization=al.pix.VoronoiMagnification, regularization=al.reg.Constant, ), ), optimizer_class=optimizer_class, ) phase1.optimizer.const_efficiency_mode = True phase1.optimizer.n_live_points = 60 phase1.optimizer.sampling_efficiency = 0.8 phase1 = phase1.extend_with_inversion_phase() phase2 = al.PhaseImaging( phase_name="phase_2", phase_folders=phase_folders, galaxies=dict( lens=al.GalaxyModel(redshift=0.5, mass=phase1.result.model.galaxies.lens.mass), source=al.GalaxyModel( redshift=1.0, pixelization=phase1.result.inversion.instance.galaxies.source. pixelization, regularization=phase1.result.inversion.instance.galaxies. source.regularization, ), ), optimizer_class=optimizer_class, ) phase2.optimizer.const_efficiency_mode = True phase2.optimizer.n_live_points = 60 phase2.optimizer.sampling_efficiency = 0.8 phase2 = phase2.extend_with_inversion_phase() return al.PipelineDataset(name, phase1, phase2)
def make_pipeline(slam, settings): """SETUP PIPELINE & PHASE NAMES, TAGS AND PATHS""" pipeline_name = "pipeline_mass[total]" """ This pipeline is tagged according to whether: 1) Hyper-fitting settings (galaxies, sky, background noise) are used. 2) The lens galaxy mass model includes an `ExternalShear`. 3) The lens`s light model is fixed or variable. """ path_prefix = f"{slam.path_prefix}/{pipeline_name}/{slam.source_tag}/{slam.light_parametric_tag}/{slam.mass_tag}" """SLaM: Set whether shear is included in the mass model using the `ExternalShear` model of the Source pipeline.""" shear = slam.pipeline_mass.shear_from_previous_pipeline(index=-1) """ Phase 1: Fit the lens `Galaxy`'s light and mass and one source galaxy, where we: 1) Use the source galaxy of the `source` pipeline. 2) Use the lens galaxy light of the `light` pipeline. 3) Set priors on the lens galaxy `MassProfile`'s using the `EllipticalIsothermal` and `ExternalShear` of previous pipelines. """ mass = slam.pipeline_mass.setup_mass.mass_prior_model_with_updated_priors( index=-1, unfix_mass_centre=True) """SLaM: Use the source and lens light models from the previous *Source* and *Light* pipelines.""" lens = slam.lens_from_light_parametric_pipeline_for_mass_total_pipeline( mass=mass, shear=shear) source = slam.source_from_previous_pipeline_model_if_parametric() phase1 = al.PhaseImaging( search=af.DynestyStatic( name="phase[1]_light[parametric]_mass[total]_source", n_live_points=100), galaxies=dict(lens=lens, source=source), hyper_image_sky=af.last.hyper_combined.instance.optional. hyper_image_sky, hyper_background_noise=af.last.hyper_combined.instance.optional. hyper_background_noise, settings=settings, ) if not slam.setup_hyper.hyper_fixed_after_source: phase1 = phase1.extend_with_multiple_hyper_phases( setup_hyper=slam.setup_hyper, include_inversion=True) return al.PipelineDataset(pipeline_name, path_prefix, phase1)
def make_pipeline(name, phase_folders, non_linear_class=af.MultiNest): phase1 = al.PhaseImaging( phase_name="phase_1", phase_folders=phase_folders, galaxies=dict(lens=al.GalaxyModel(redshift=0.5, sersic=al.lp.EllipticalSersic)), non_linear_class=non_linear_class, ) phase1.optimizer.const_efficiency_mode = True phase1.optimizer.n_live_points = 40 phase1.optimizer.sampling_efficiency = 0.8 return al.PipelineDataset(name, phase1)
def make_pipeline(name, folders, search=af.DynestyStatic()): lens = al.GalaxyModel(redshift=0.5, mass=al.mp.EllipticalIsothermal) lens.mass.centre_0 = af.UniformPrior(lower_limit=-0.01, upper_limit=0.01) lens.mass.centre_1 = af.UniformPrior(lower_limit=-0.01, upper_limit=0.01) lens.mass.einstein_radius = af.UniformPrior(lower_limit=1.55, upper_limit=1.65) source = al.GalaxyModel(redshift=1.0, light=al.lp.EllipticalSersic) source.light.centre_0 = af.UniformPrior(lower_limit=-0.01, upper_limit=0.01) source.light.centre_1 = af.UniformPrior(lower_limit=-0.01, upper_limit=0.01) source.light.intensity = af.UniformPrior(lower_limit=0.35, upper_limit=0.45) source.light.effective_radius = af.UniformPrior(lower_limit=0.45, upper_limit=0.55) source.light.sersic_index = af.UniformPrior(lower_limit=0.9, upper_limit=1.1) class GridPhase( af.as_grid_search(phase_class=al.PhaseImaging, parallel=True)): @property def grid_priors(self): return [ self.model.galaxies.subhalo.mass.centre_0, self.model.galaxies.subhalo.mass.centre_1, ] subhalo = al.GalaxyModel(redshift=0.5, mass=al.mp.SphericalTruncatedNFWMCRLudlow) subhalo.mass.mass_at_200 = af.LogUniformPrior(lower_limit=1.0e6, upper_limit=1.0e11) subhalo.mass.centre_0 = af.UniformPrior(lower_limit=-2.5, upper_limit=2.5) subhalo.mass.centre_1 = af.UniformPrior(lower_limit=-2.5, upper_limit=2.5) phase1 = GridPhase( phase_name="phase_1", folders=folders, galaxies=dict(lens=lens, subhalo=subhalo, source=source), search=search, settings=al.SettingsPhaseImaging(), number_of_steps=2, ) return al.PipelineDataset(name, phase1)