Closed Jammy2211 closed 5 months ago
Bug 1
This script:
Creates a model with 30 x 2 Gaussians, which share the same centre:
total_gaussians = 30
gaussian_per_basis = 2
# The sigma values of the Gaussians will be fixed to values spanning 0.01 to the mask radius, 3.0".
mask_radius = 3.0
log10_sigma_list = np.linspace(-2, np.log10(mask_radius), total_gaussians)
# By defining the centre here, it creates two free parameters that are assigned below to all Gaussians.
centre_0 = af.UniformPrior(lower_limit=-0.1, upper_limit=0.1)
centre_1 = af.UniformPrior(lower_limit=-0.1, upper_limit=0.1)
bulge_gaussian_list = []
for j in range(gaussian_per_basis):
# A list of Gaussian model components whose parameters are customized belows.
gaussian_list = af.Collection(
af.Model(al.lp_linear.Gaussian) for _ in range(total_gaussians)
)
# Iterate over every Gaussian and customize its parameters.
for i, gaussian in enumerate(gaussian_list):
gaussian.centre.centre_0 = centre_0 # All Gaussians have same y centre.
gaussian.centre.centre_1 = centre_1 # All Gaussians have same x centre.
gaussian.ell_comps = gaussian_list[
0
].ell_comps # All Gaussians have same elliptical components.
gaussian.sigma = (
10 ** log10_sigma_list[i]
) # All Gaussian sigmas are fixed to values above.
bulge_gaussian_list += gaussian_list
# The Basis object groups many light profiles together into a single model component.
bulge = af.Model(
al.lp_basis.Basis,
light_profile_list=bulge_gaussian_list,
)
mass = af.Model(al.mp.Isothermal)
lens = af.Model(al.Galaxy, redshift=0.5, bulge=bulge, mass=mass)
# bulge = af.Model(al.lp.Sersic)
source = af.Model(al.Galaxy, redshift=1.0, bulge=al.lp_linear.Sersic)
model = af.Collection(galaxies=af.Collection(lens=lens, source=source))
The model.info
reads as follows:
Total Free Parameters = 17
model Collection (N=17)
galaxies Collection (N=17)
lens Galaxy (N=11)
bulge Basis (N=6)
light_profile_list Collection (N=6)
0 - 9 Gaussian (N=4)
mass Isothermal (N=5)
source Galaxy (N=6)
bulge Sersic (N=6)
galaxies
lens
redshift 0.5
bulge
light_profile_list
0 - 9
centre
centre_0 UniformPrior [0], lower_limit = -0.1, upper_limit = 0.1
centre_1 UniformPrior [1], lower_limit = -0.1, upper_limit = 0.1
ell_comps
ell_comps_0 GaussianPrior [4], mean = 0.0, sigma = 0.3
ell_comps_1 GaussianPrior [5], mean = 0.0, sigma = 0.3
sigma 0.01
Issues:
1) Why is the `light_profile_list 0-9? Should it not be 0-29? 2) Where is the second group of Gaussians running 29 - 59?
The original model.info
looked as follows:
Total Free Parameters = 17
model Collection (N=17)
galaxies Collection (N=17)
lens Galaxy (N=11)
bulge Basis (N=6)
light_profile_list Collection (N=6)
0 Gaussian (N=4)
1 Gaussian (N=4)
2 Gaussian (N=4)
3 Gaussian (N=4)
4 Gaussian (N=4)
5 Gaussian (N=4)
6 Gaussian (N=4)
7 Gaussian (N=4)
8 Gaussian (N=4)
9 Gaussian (N=4)
10 Gaussian (N=4)
11 Gaussian (N=4)
12 Gaussian (N=4)
13 Gaussian (N=4)
14 Gaussian (N=4)
15 Gaussian (N=4)
16 Gaussian (N=4)
17 Gaussian (N=4)
18 Gaussian (N=4)
19 Gaussian (N=4)
20 Gaussian (N=4)
21 Gaussian (N=4)
22 Gaussian (N=4)
23 Gaussian (N=4)
24 Gaussian (N=4)
25 Gaussian (N=4)
26 Gaussian (N=4)
27 Gaussian (N=4)
28 Gaussian (N=4)
29 Gaussian (N=4)
30 Gaussian (N=4)
31 Gaussian (N=4)
32 Gaussian (N=4)
33 Gaussian (N=4)
34 Gaussian (N=4)
35 Gaussian (N=4)
36 Gaussian (N=4)
37 Gaussian (N=4)
38 Gaussian (N=4)
39 Gaussian (N=4)
40 Gaussian (N=4)
41 Gaussian (N=4)
42 Gaussian (N=4)
43 Gaussian (N=4)
44 Gaussian (N=4)
45 Gaussian (N=4)
46 Gaussian (N=4)
47 Gaussian (N=4)
48 Gaussian (N=4)
49 Gaussian (N=4)
50 Gaussian (N=4)
51 Gaussian (N=4)
52 Gaussian (N=4)
53 Gaussian (N=4)
54 Gaussian (N=4)
55 Gaussian (N=4)
56 Gaussian (N=4)
57 Gaussian (N=4)
58 Gaussian (N=4)
59 Gaussian (N=4)
mass Isothermal (N=5)
source Galaxy (N=6)
bulge Sersic (N=6)
galaxies
lens
redshift 0.5
bulge
light_profile_list
0
centre
centre_0 UniformPrior [0], lower_limit = -0.1, upper_limit = 0.1
centre_1 UniformPrior [1], lower_limit = -0.1, upper_limit = 0.1
ell_comps
ell_comps_0 GaussianPrior [4], mean = 0.0, sigma = 0.3
ell_comps_1 GaussianPrior [5], mean = 0.0, sigma = 0.3
sigma 0.01
1
centre
centre_0 UniformPrior [0], lower_limit = -0.1, upper_limit = 0.1
centre_1 UniformPrior [1], lower_limit = -0.1, upper_limit = 0.1
ell_comps
ell_comps_0 GaussianPrior [4], mean = 0.0, sigma = 0.3
ell_comps_1 GaussianPrior [5], mean = 0.0, sigma = 0.3
sigma 0.012173570475023513
2
centre
centre_0 UniformPrior [0], lower_limit = -0.1, upper_limit = 0.1
centre_1 UniformPrior [1], lower_limit = -0.1, upper_limit = 0.1
ell_comps
ell_comps_0 GaussianPrior [4], mean = 0.0, sigma = 0.3
ell_comps_1 GaussianPrior [5], mean = 0.0, sigma = 0.3
sigma 0.01481958181103642
3
centre
centre_0 UniformPrior [0], lower_limit = -0.1, upper_limit = 0.1
centre_1 UniformPrior [1], lower_limit = -0.1, upper_limit = 0.1
ell_comps
ell_comps_0 GaussianPrior [4], mean = 0.0, sigma = 0.3
ell_comps_1 GaussianPrior [5], mean = 0.0, sigma = 0.3
sigma 0.018040722358702844
4
centre
centre_0 UniformPrior [0], lower_limit = -0.1, upper_limit = 0.1
centre_1 UniformPrior [1], lower_limit = -0.1, upper_limit = 0.1
ell_comps
ell_comps_0 GaussianPrior [4], mean = 0.0, sigma = 0.3
ell_comps_1 GaussianPrior [5], mean = 0.0, sigma = 0.3
sigma 0.02196200050540015
5
centre
centre_0 UniformPrior [0], lower_limit = -0.1, upper_limit = 0.1
centre_1 UniformPrior [1], lower_limit = -0.1, upper_limit = 0.1
ell_comps
ell_comps_0 GaussianPrior [4], mean = 0.0, sigma = 0.3
ell_comps_1 GaussianPrior [5], mean = 0.0, sigma = 0.3
sigma 0.026735596092499075
6
centre
centre_0 UniformPrior [0], lower_limit = -0.1, upper_limit = 0.1
centre_1 UniformPrior [1], lower_limit = -0.1, upper_limit = 0.1
ell_comps
ell_comps_0 GaussianPrior [4], mean = 0.0, sigma = 0.3
ell_comps_1 GaussianPrior [5], mean = 0.0, sigma = 0.3
sigma 0.03254676632238009
7
centre
centre_0 UniformPrior [0], lower_limit = -0.1, upper_limit = 0.1
centre_1 UniformPrior [1], lower_limit = -0.1, upper_limit = 0.1
ell_comps
ell_comps_0 GaussianPrior [4], mean = 0.0, sigma = 0.3
ell_comps_1 GaussianPrior [5], mean = 0.0, sigma = 0.3
sigma 0.03962103535596159
8
centre
centre_0 UniformPrior [0], lower_limit = -0.1, upper_limit = 0.1
centre_1 UniformPrior [1], lower_limit = -0.1, upper_limit = 0.1
ell_comps
ell_comps_0 GaussianPrior [4], mean = 0.0, sigma = 0.3
ell_comps_1 GaussianPrior [5], mean = 0.0, sigma = 0.3
sigma 0.04823294661991968
9
centre
centre_0 UniformPrior [0], lower_limit = -0.1, upper_limit = 0.1
centre_1 UniformPrior [1], lower_limit = -0.1, upper_limit = 0.1
ell_comps
ell_comps_0 GaussianPrior [4], mean = 0.0, sigma = 0.3
ell_comps_1 GaussianPrior [5], mean = 0.0, sigma = 0.3
sigma 0.05871671748956393
10
centre
centre_0 UniformPrior [0], lower_limit = -0.1, upper_limit = 0.1
centre_1 UniformPrior [1], lower_limit = -0.1, upper_limit = 0.1
ell_comps
ell_comps_0 GaussianPrior [4], mean = 0.0, sigma = 0.3
ell_comps_1 GaussianPrior [5], mean = 0.0, sigma = 0.3
sigma 0.07147920984212522
...and so on...
Bug 2
The model.results
for the fit above is kind of better, it has indexes for 29 and 59:
galaxies
lens
bulge
light_profile_list
59
centre
centre_0 -0.021
centre_1 -0.041
ell_comps
ell_comps_0 0.217
ell_comps_1 0.045
29
ell_comps
ell_comps_0 0.531
ell_comps_1 -0.401
Can we have these pair to ranges of model components? E.g. they should be 0-29 and 30 - 59.
Bug 3
The following example script:
In the first first source_lp[1]
produces this model.info
:
galaxies
lens
redshift 0.5
bulge - shear
light_profile_list
0 - 9
centre
centre_0 UniformPrior [86], lower_limit = -0.1, upper_limit = 0.1
centre_1 UniformPrior [87], lower_limit = -0.1, upper_limit = 0.1
ell_comps
ell_comps_0 UniformPrior [90], lower_limit = -0.001, upper_limit = 0.001
ell_comps_1 UniformPrior [91], lower_limit = -0.001, upper_limit = 0.001
sigma 0.01
This line is very strange:
bulge - shear
I don't know why the bulge and shear are doing this, here is what it looks like without the concise API:
bulge
light_profile_list
0
centre
centre_0 UniformPrior [86], lower_limit = -0.1, upper_limit = 0.1
centre_1 UniformPrior [87], lower_limit = -0.1, upper_limit = 0.1
ell_comps
ell_comps_0 UniformPrior [90], lower_limit = -0.001, upper_limit = 0.001
ell_comps_1 UniformPrior [91], lower_limit = -0.001, upper_limit = 0.001
sigma 0.01
1
centre
centre_0 UniformPrior [86], lower_limit = -0.1, upper_limit = 0.1
centre_1 UniformPrior [87], lower_limit = -0.1, upper_limit = 0.1
ell_comps
ell_comps_0 UniformPrior [90], lower_limit = -0.001, upper_limit = 0.001
ell_comps_1 UniformPrior [91], lower_limit = -0.001, upper_limit = 0.001
sigma 0.013501275609964633
...and so on...
mass
centre (0.0, 0.0)
ell_comps
ell_comps_0 UniformPrior [392], lower_limit = -0.001, upper_limit = 0.001
ell_comps_1 UniformPrior [393], lower_limit = -0.001, upper_limit = 0.001
einstein_radius UniformPrior [394], lower_limit = 1.5999, upper_limit = 1.6001
shear
gamma_1 UniformPrior [395], lower_limit = -1e-05, upper_limit = 1e-05
gamma_2 UniformPrior [396], lower_limit = -1e-05, upper_limit = 1e-05
I have added some more issues that need fixing, described in these two files:
https://github.com/Jammy2211/autolens_workspace_test/tree/main/rich
In PyAutoLens, we often compose a model where a galaxy is made of 90 Gaussian's:
The
model.info
file of this model is... large:The question is, how do we make this more concise?
There is repetition in the list of model component types:
We can condense this as follows:
There is constant repetition of priors, for example all
Gaussian
objects from 0 to 29 have the same priors:We could identify all model components with overlapping priors and condence as follows:
I suspect this will be useful for graph visualization...