In [19]:
%pylab inline

import numpy
import astrohack_projections
import matplotlib.pyplot as plt

plt.rcParams['figure.figsize'] = 16, 16
plot_kwargs = {"interpolation": "nearest",
          "cmap": "afmhot",
          "origin": "lower"}

file_path = "./illustris_galaxies/cutout_83.hdf5"
illustris_gal = astrohack_projections.illustris_model_and_image(file_path)
illustris_gal.set_image_shape((30, 40))

for i in xrange(16):
    xi_hat, eta_hat = astrohack_projections.choose_random_projection()
    alpha, beta, gamma = numpy.random.uniform(0.0, 360.0, 3)
    intensity = 10
    scale = 0.2 * numpy.exp(numpy.random.uniform())
    xshift = numpy.random.uniform(13., 16.)
    yshift = numpy.random.uniform(18., 21.)
    psf_size = 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(xi_hat, eta_hat)
    
    plt.subplot(4, 4, i+1)
    a, mid = numpy.percentile(illustris_gal.get_image(), [15., 85.])
    ran = mid - a
    vmin = mid - 5. * ran
    vmax = mid + 20. * ran
    plt.imshow(numpy.sqrt(illustris_gal.get_image()), **plot_kwargs)
    plt.colorbar()


Populating the interactive namespace from numpy and matplotlib
WARNING: pylab import has clobbered these variables: ['gamma', 'beta']
`%matplotlib` prevents importing * from pylab and numpy

In [50]:
# create an album of 32 such objects with random projection + normaly distributed noise

# plot parameters
plt.rcParams['figure.figsize'] = 16, 16
plot_kwargs = {"interpolation": "nearest",
          "cmap": "afmhot",
          "origin": "lower"}

# initial galaxy data
file_path = "./illustris_galaxies/cutout_83.hdf5"
illustris_gal = astrohack_projections.illustris_model_and_image(file_path)
illustris_gal.set_image_shape((30, 40))

# 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.)

# galaxy model I fit with
basevar = 0.5 * numpy.eye(3)
gal_model = astrohack_projections.galaxy_model_3d()
v = [3., 0., 0.]
gal_model.add_gaussian(1.0, numpy.array([0., -1., 0.]), basevar + numpy.outer(v,v))
v = [-1., 3., 0.]
gal_model.add_gaussian(1.0, numpy.array([2., 1., 0.]), basevar + numpy.outer(v,v))
v = [1., 3., 0.]
gal_model.add_gaussian(1.0, numpy.array([-2., 1., 0.]), basevar + numpy.outer(v,v))

for i in xrange(32):
    # projection parameters
    xi_hat, eta_hat = astrohack_projections.choose_random_projection()
    alpha, beta, gamma = numpy.random.uniform(0.0, 360.0, 3)
    intensity = 150
    scale = 0.18 * numpy.exp(numpy.random.uniform())
    xshift = numpy.random.uniform(13., 16.)
    yshift = numpy.random.uniform(18., 21.)
    psf_size = 1
    bg = 0.
    # illustris galaxy
    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(xi_hat, eta_hat)
    # image
    image = astrohack_projections.image_and_model()
    image.set_shape((30, 40))
    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(image.get_shape()))
    image.set_data(illustris_gal.get_image() + numpy.random.normal(size=image.get_shape())/ numpy.sqrt(image.ivar))
    # album
    album.add_image(image)
    
print len(album)


32

In [56]:
def showme(album):
    plt.rcParams['figure.figsize'] = 20, 80
    plot_kwargs = {"interpolation": "nearest",
          "cmap": "afmhot",
          "origin": "lower"}
    for i in xrange(len(album)):
        image = album.get_all_images()[i]
        plt.subplot(16, 4, 2*i+1)
        vmin = -5. / numpy.sqrt(numpy.median(image.get_ivar())) # assumes bg = 0
        vmax = -2. * vmin # assumes bg = 0
        plt.imshow(numpy.nan_to_num(numpy.sqrt(image.get_data())), **plot_kwargs)
        plt.colorbar()
        plt.subplot(16, 4, 2*i+2)
        plt.imshow(numpy.nan_to_num(numpy.sqrt(image.get_synthetic())), **plot_kwargs)
        plt.colorbar()
        
showme(album)


/Users/dalyabaron/.virtualenvs/astro/lib/python2.7/site-packages/ipykernel/__main__.py:11: RuntimeWarning: invalid value encountered in sqrt
/Users/dalyabaron/.virtualenvs/astro/lib/python2.7/site-packages/ipykernel/__main__.py:14: RuntimeWarning: invalid value encountered in sqrt

In [57]:
# INITIALIZATION BLOCK!
import scipy.optimize as op

galpar0 = numpy.array([1., 2., 0., 0., 1., 1., 1., 0., 0., 0.,
                       1., 0., 2., 0., 1., 1., 1., 0., 0., 0.,
                       1., 0., 0., 2., 1., 1., 1., 0., 0., 0.])
imgpar0 = (10., 30., 30., 0.1, 0.5, 14., 20., 0.)

print "album before", album(galpar0)
for image in album:
    print "image before", image(imgpar0)
    
showme(album)
plt.savefig("./fitting_pngs/illustris_083/initialisation.pdf")


album before 1860197.46974
image before 19298.82477
image before 97702.7223512
image before 89949.033008
image before 11387.7683301
image before 41428.5533925
image before 30936.5970886
image before 11654.9443001
image before 154203.417843
image before 102767.585732
image before 45630.3478189
image before 18467.2655264
image before 92563.2513167
image before 38777.8636104
image before 81959.3490498
image before 33987.5268897
image before 99825.7726065
image before 82931.5798734
image before 17501.7373829
image before 116753.303508
image before 10686.6666589
image before 75227.7496407
image before 26551.6558907
image before 23918.624706
image before 103180.246448
image before 78170.6401198
image before 69474.3636449
image before 35246.4298841
image before 125421.943702
image before 36287.3092934
image before 58926.8902145
image before 15664.8716304
image before 17091.7531003
/Users/dalyabaron/.virtualenvs/astro/lib/python2.7/site-packages/ipykernel/__main__.py:11: RuntimeWarning: invalid value encountered in sqrt

In [58]:
# run the thing!
num_runs = 8

for i in xrange(num_runs):
    # album optimisation
    galpar0 = album.galaxy.get_parameters_vector()
    print "album before", album(galpar0)
    result = op.minimize(album, galpar0, method="Powell")
    galpar = result['x']
    print "album after", album(galpar)
    
    showme(album)
    plt.savefig("./fitting_pngs/illustris_083/run_%s_album.pdf" % str(2*i).zfill(2))
    plt.close()
    
    # image optimisation
    for image in album:
        imgpar0 = image.get_parameters_vector()
        print "image before", image(imgpar0)
        result = op.minimize(image, imgpar0)
        imgpar = result['x']
        print "image after", image(imgpar)

    showme(album)
    plt.savefig("./fitting_pngs/illustris_083/run_%s_image.pdf" % str(2*i+1).zfill(2))
    plt.close()


album before 1863576.58933
album after 582269.912151
image before 14455.720453
image after 1717.50466043
image before 28602.2898288
image after 4944.59088682
image before 19816.4338326
image after 3423.94874122
image before 17669.5815355
image after 1223.75830983
image before 10574.8877652
image after 1792.17473099
image before 11607.5974148
image after 2482.28887554
image before 17013.0974819
image after 1322.23558068
image before 49042.5493299
image after 8756.79880012
image before 26397.4568172
image after 7778.8994162
image before 3791.02997382
image after 1987.00527902
image before 13308.358738
image after 1535.19666695
image before 25963.8552794
image after 4965.78329053
image before 14624.8069364
image after 1955.62179569
image before 25741.2971665
image after 3849.14376427
image before 3565.31733636
image after 1713.89301901
image before 26336.2798429
image after 4245.26555475
image before 15570.7519591
image after 5633.42243305
image before 11571.5762551
image after 1381.55757834
image before 29909.1401101
image after 6676.4327819
image before 17567.1621565
image after 1285.27582793
image before 15824.1423978
image after 3366.14392039
image before 16303.5817325
image after 1739.77038868
image before 8216.53041713
image after 1504.57611722
image before 27122.5022476
image after 8393.93591794
image before 18955.5200253
image after 5322.96951338
image before 9351.4755029
image after 3810.6799774
image before 11429.8448995
image after 2046.11843713
image before 33191.4787781
image after 6122.63443446
image before 10759.7447278
image after 2641.02158592
image before 19154.8106352
image after 4387.13240362
image before 12987.7915908
image after 1468.77979913
image before 15832.3120032
image after
/Users/dalyabaron/.virtualenvs/astro/lib/python2.7/site-packages/ipykernel/__main__.py:11: RuntimeWarning: invalid value encountered in sqrt
/Users/dalyabaron/.virtualenvs/astro/lib/python2.7/site-packages/ipykernel/__main__.py:14: RuntimeWarning: invalid value encountered in sqrt
 1430.76763135
album before 110916.3151
album after 80085.7054117
image before 1379.57143944
image after 1357.72154438
image before 2896.04057785
image after 2666.96861188
image before 4040.59801768
image after 3414.67387133
image before 1233.88345297
image after 1170.89452018
image before 2170.90247918
image after 1865.16257562
image before 1672.52204389
image after 1589.50985523
image before 1293.60840902
image after 1270.29961304
image before 6691.9671135
image after 5062.76858823
image before 4376.21883196
image after 3555.9433996
image before 1975.34834151
image after 1775.25284998
image before 1289.34066395
image after 1277.39533458
image before 3861.75666728
image after 3272.56244527
image before 1615.60323864
image after 1560.908559
image before 3928.37725601
image after 3543.7198198
image before 1824.6164147
image after 1628.32553874
image before 3154.91180877
image after 2907.42636994
image before 3408.40724207
image after 2530.14237516
image before 1260.87205094
image after 1235.11564342
image before 4589.61000369
image after 3967.73836946
image before 1338.74656962
image after 1303.99343025
image before 2973.63596335
image after 2845.77438008
image before 1387.42868021
image after 1337.05189175
image before 1602.1772556
image after 1484.67717383
image before 3761.63389688
image after 3288.10456872
image before 2449.40303528
image after 2246.61244734
image before 3115.7519121
image after 2734.41397003
image before 1427.21927884
image after 1402.9812566
image before 2801.22546167
image after 2647.57568046
image before 1871.19108723
image after 1760.59029511
image before 2006.28435789
image after 1780.98070995
image before 1355.37513847
image after 1292.68640867
image before 1317.27589146
image after 1290.77575278
album before 71082.9486804
album after 69968.9912554
image before 1338.22730979
image after 1337.43716512
image before 2613.10291288
image after 2595.49592569
image before 3401.44266241
image after 3357.12738717
image before 1164.92342311
image after 1163.52366768
image before 1898.47592465
image after 1864.95441442
image before 1535.1607527
image after 1528.8296759
image before 1264.73038895
image after 1264.05086557
image before 4780.34079261
image after 4715.45872299
image before 3306.45337162
image after 3286.81626007
image before 1787.5633302
image after 1760.80628269
image before 1264.45238892
image after 1263.41306416
image before 3144.56015043
image after 3141.57340814
image before 1555.33861952
image after 1550.91747226
image before 3538.65952171
image after 3506.96432806
image before 1651.47582001
image after 1645.6723834
image before 2952.83377445
image after 2909.22488455
image before 2394.18086578
image after 2383.54072373
image before 1236.14209149
image after 1234.010603
image before 4065.67840834
image after 4024.91943789
image before 1315.57359408
image after 1309.35776688
image before 2899.56788542
image after 2878.27903494
image before 1311.49850109
image after 1307.73845265
image before 1520.65374471
image after 1514.37615817
image before 2959.84862918
image after 2948.9035846
image before 2118.19499132
image after 2114.22862563
image before 2764.93637764
image after 2758.81748764
image before 1407.24411606
image after 1404.60956111
image before 2803.20780406
image after 2770.7937548
image before 1691.5368854
image after 1688.63113044
image before 1688.10627002
image after 1680.304
image before 1283.4287726
image after 1282.59918979
image before 1297.52171531
image after 1293.73685637
album before 69501.0417344
album after 69278.6508274
image before 1332.88267846
image after 1332.61281689
image before 2610.68155302
image after 2605.58148331
image before 3353.63264198
image after 3340.67517618
image before 1160.91887196
image after 1160.48722517
image before 1903.6565645
image after 1897.59733116
image before 1508.01278781
image after 1506.9194626
image before 1264.29225052
image after 1263.92394021
image before 4637.3439206
image after 4622.5789746
image before 3258.80139439
image after 3252.08909803
image before 1758.02467355
image after 1754.26317341
image before 1262.68731987
image after 1262.17004901
image before 3110.21342007
image after 3105.95450236
image before 1557.15004608
image after 1555.42275857
image before 3498.00172381
image after 3492.70451794
image before 1647.3187438
image after 1546.65449556
image before 2895.21771922
image after 2884.11951718
image before 2378.0429265
image after 2372.28916796
image before 1235.63932474
image after 1234.40904693
image before 4052.41242237
image after 4043.29961203
image before 1312.83208197
image after 1310.80849955
image before 2887.26922246
image after 2882.89463353
image before 1293.44522661
image after 1292.89668944
image before 1540.25203492
image after 1538.71015086
image before 2821.68382246
image after 2817.48880564
image before 2077.96996891
image after 2076.3084528
image before 2775.64173292
image after 2770.79920733
image before 1406.80981933
image after 1405.69944579
image before 2842.77443791
image after 2832.34118069
image before 1655.66332661
image after 1654.21138442
image before 1655.18687972
image after 1653.31163118
image before 1277.92731749
image after 1277.55855849
image before 1292.38123114
image after 1291.41876224
album before 69052.0824928
album after 68952.3451616
image before 1330.74136015
image after 1330.61812066
image before 2613.53839764
image after 2610.64085362
image before 3328.33356243
image after 3324.49869222
image before 1158.0904767
image after 1158.02803082
image before 1926.64603679
image after 1925.41038414
image before 1497.02580819
image after 1496.60203391
image before 1264.25852606
image after 1264.13461172
image before 4547.01468814
image after 4535.00762731
image before 3252.65408475
image after 3249.86803932
image before 1752.69041413
image after 1750.67138979
image before 1261.61739008
image after 1261.36758187
image before 3091.16367097
image after 3087.78656696
image before 1557.38672779
image after 1556.54812388
image before 3481.37726443
image after 3479.73919538
image before 1529.28822705
image after 1528.61575472
image before 2873.06735351
image after 2866.38421105
image before 2358.87335752
image after 2355.04749859
image before 1234.69744475
image after 1234.17699062
image before 4062.47545804
image after 4056.71646767
image before 1311.59380236
image after 1311.13130887
image before 2901.30144995
image after 2899.77801406
image before 1288.73572629
image after 1288.39378763
image before 1559.09942234
image after 1558.62152872
image before 2756.13933659
image after 2753.73538324
image before 2078.52081347
image after 2077.50503298
image before 2789.01261877
image after 2433.93722814
image before 1408.16702529
image after 1407.72206462
image before 2863.93593101
image after 2859.32973989
image before 1647.57213011
image after 1647.18968043
image before 1647.57878561
image after 1646.34397662
image before 1275.53112848
image after 1275.28762108
image before 1290.67901409
image after 1290.39743803
album before 68534.7727067
album after 68326.7119345
image before 1331.31609037
image after 1330.89631197
image before 2623.05594205
image after 2616.94258178
image before 3349.72034082
image after 3344.83835573
image before 1157.20801399
image after 1157.06528205
image before 1968.40092921
image after 1965.12103407
image before 1487.3605974
image after 1485.78168577
image before 1262.65207992
image after 1262.48736226
image before 4402.67213009
image after 4380.02622701
image before 3370.48473465
image after 3362.5815405
image before 1756.63879127
image after 1753.45580274
image before 1265.7227666
image after 1265.18238153
image before 3045.7649587
image after 3036.76494086
image before 1564.58462733
image after 1563.16322355
image before 3435.26706528
image after 3428.27111854
image before 1502.61628121
image after 1501.95381832
image before 2839.93169241
image after 2832.71611381
image before 2357.86351012
image after 2355.19254661
image before 1232.96035212
image after 1232.27269141
image before 4057.67817593
image after 4054.83606195
image before 1310.29727049
image after 1310.01306705
image before 2923.90937911
image after 2919.93182584
image before 1287.96826173
image after 1287.10190675
image before 1601.32290991
image after 1600.03920768
image before 2697.69827209
image after 2691.89364105
image before 2103.06106848
image after 2100.44503861
image before 2297.16611558
image after 2286.83784703
image before 1416.34574863
image after 1414.86985765
image before 2816.1256483
image after 2812.08795327
image before 1648.75583445
image after 1648.29891954
image before 1634.52877998
image after 1631.59035321
image before 1272.96848259
image after 1271.95155723
image before 1291.1313681
image after 1290.94477033
album before 68209.0887413
album after 68150.0588274
image before 1329.68468929
image after 1329.59481943
image before 2625.73744488
image after 2624.26682503
image before 3351.69830223
image after 3349.28087244
image before 1156.02013762
image after 1155.96760533
image before 1990.25918256
image after 1988.72836107
image before 1478.72139093
image after 1478.26289069
image before 1261.58104216
image after 1261.51529228
image before 4334.89023949
image after 3813.16094864
image before 3379.02256356
image after 3377.93347035
image before 1750.80645526
image after 1748.13882093
image before 1265.79336344
image after 1265.7100033
image before 3036.83021324
image after 3033.98121426
image before 1568.23866706
image after 1567.93109352
image before 3418.25723342
image after 3416.85195089
image before 1496.20220656
image after 1495.57733532
image before 2815.21120985
image after 2812.7812688
image before 2350.03813115
image after 2349.97764722
image before 1231.70889553
image after 1231.57415408
image before 4055.62208531
image after 4052.85109639
image before 1314.2854007
image after 1314.11223473
image before 2929.11316794
image after 2927.97775649
image before 1282.8771012
image after 1282.78734088
image before 1609.38340355
image after 1609.05224414
image before 2681.49178466
image after 2680.14095093
image before 2096.91708578
image after 2096.48450215
image before 2260.69088272
image after 2257.25508216
image before 1419.7865675
image after 1419.72182515
image before 2816.58732357
image after 2816.0304458
image before 1644.8960496
image after 1644.40005324
image before 1623.97258452
image after 1609.241091
image before 1269.61786551
image after 1269.36949656
image before 1290.74951276
image after 1290.59749164
album before 67584.6228287
album after 67470.0502919
image before 1325.09015289
image after 1324.87410923
image before 2656.46260423
image after 2654.44912984
image before 3355.25405887
image after 3354.02422076
image before 1156.37501632
image after 1156.10389441
image before 2014.13478972
image after 2013.34937464
image before 1461.47216571
image after 1460.99150945
image before 1254.73481049
image after 1254.3891852
image before 3784.34978299
image after 3778.21544118
image before 3380.13020877
image after 3378.10339042
image before 1758.87079308
image after 1757.73354124
image before 1269.16862586
image after 1269.02657601
image before 3001.76141007
image after 2999.8668188
image before 1583.20970249
image after 1582.300584
image before 3432.98336248
image after 3432.53464815
image before 1500.72173798
image after 1499.7610957
image before 2767.75741911
image after 2764.5769246
image before 2366.25267675
image after 2365.27370794
image before 1229.54435974
image after 1228.05390827
image before 4041.52405139
image after 4039.54144523
image before 1321.06899839
image after 1320.76770765
image before 2920.55534456
image after 2919.34475869
image before 1275.07890796
image after 1274.25457632
image before 1617.78333094
image after 1617.29615373
image before 2699.37976188
image after 2694.18635495
image before 2096.94823497
image after 2095.23205292
image before 2245.79557443
image after 2242.97625091
image before 1421.69193944
image after 1421.23917295
image before 2732.1943989
image after 2723.099657
image before 1625.39423552
image after 1624.79676938
image before 1603.54608385
image after 1601.42784751
image before 1267.00704777
image after 1266.71111763
image before 1290.34137404
image after 1289.98368845