In [4]:
%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 = "/Users/dalyabaron/Downloads/cutout_242959.hdf5"
illustris_gal = astrohack_projections.illustris_model_and_image(file_path)
illustris_gal.set_image_shape((60, 80))

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 = 1 
    scale = 0.015 * numpy.exp(numpy.random.uniform())
    xshift = numpy.random.uniform(29., 31.)
    yshift = numpy.random.uniform(39., 41.)
    psf_size = 3
    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()
    
    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.log10(illustris_gal.get_image()+1), **plot_kwargs)


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 [16]:
# 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_242959.hdf5"
illustris_gal = astrohack_projections.illustris_model_and_image(file_path)
illustris_gal.set_image_shape((40, 50))

# 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 = 10
    scale = 0.02 * numpy.exp(numpy.random.uniform())
    xshift = numpy.random.uniform(19.5, 21.)
    yshift = numpy.random.uniform(24.5, 26.)
    psf_size = 2
    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((40, 50))
    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 [18]:
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

In [19]:
# 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_242959/initialisation.pdf")


album before 11265289.6704
image before 731268.02729
image before 875263.74083
image before 122018.790673
image before 628327.782163
image before 354329.421535
image before 387454.117535
image before 221085.449447
image before 68563.5844979
image before 195639.649189
image before 308906.445395
image before 281204.570078
image before 73359.1791183
image before 78347.5562526
image before 139698.799606
image before 521498.108449
image before 876464.429572
image before 73374.549868
image before 860954.978775
image before 510891.034279
image before 196074.310445
image before 1546927.27417
image before 99028.6961817
image before 308815.067122
image before 472093.296298
image before 107442.633193
image before 137062.763835
image before 157080.541917
image before 191537.804309
image before 153766.372239
image before 693288.406218
image before 277583.935414
image before 493158.80221
/Users/dalyabaron/.virtualenvs/astro/lib/python2.7/site-packages/ipykernel/__main__.py:11: RuntimeWarning: invalid value encountered in sqrt

In [21]:
# 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_242959/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_242959/run_%s_image.pdf" % str(2*i+1).zfill(2))
    plt.close()


album before 221374.496803
album 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
 199289.753204
image before 11836.6433701
image after 11030.2865116
image before 8480.50399418
image after 8170.87344649
image before 2926.55879977
image after 2667.79848364
image before 7903.58352646
image after 7433.39220965
image before 6565.43902772
image after 4955.33176689
image before 6967.57881201
image after 6345.2062396
image before 3549.29147885
image after 2653.68746202
image before 3294.13982287
image after 3022.49652993
image before 3850.27795552
image after 2945.32823672
image before 4802.58419632
image after 3728.6684346
image before 5449.60304998
image after 3550.54290239
image before 2398.43155025
image after 2218.44639334
image before 3217.56997085
image after 2994.09024961
image before 3545.28120759
image after 3298.61532934
image before 6555.86006721
image after 5342.51681574
image before 12705.0763823
image after 11460.339014
image before 3233.3737279
image after 2763.29920271
image before 16985.5148855
image after 15227.3422226
image before 9927.0510878
image after 7019.61529454
image before 2852.26229777
image after 2687.9118964
image before 19292.5590895
image after 17127.8477098
image before 2940.84917713
image after 2832.07195729
image before 5135.58124033
image after 3983.55388516
image before 6700.22253641
image after 5586.28327004
image before 3144.50693088
image after 2947.71354058
image before 3633.48069993
image after 2839.62693532
image before 2960.55702092
image after 2558.79601164
image before 3152.93742817
image after 2881.6577761
image before 2974.57861752
image after 2577.3604205
image before 12811.3326953
image after 10791.6189737
image before 4084.72819348
image after 3676.06735245
image before 5402.50691129
image after 5098.48125892
album before 172426.155185
album after 161318.663715
image before 11011.3043042
image after 10557.9416653
image before 7070.10423797
image after 6886.81918283
image before 2782.01579281
image after 2574.10738748
image before 7577.77915162
image after 7163.19167127
image before 4544.25676795
image after 4429.52834615
image before 6374.15580891
image after 6270.10117015
image before 2783.03897764
image after 2637.41999456
image before 3136.22289861
image after 2510.7747153
image before 2916.63961178
image after 2857.12798708
image before 3635.16020014
image after 3469.21845019
image before 3502.77469559
image after 3317.83965424
image before 2215.89729168
image after 2181.16092759
image before 3077.951862
image after 3019.20838366
image before 3531.8390608
image after 2591.07069068
image before 5287.60815579
image after 4966.65507394
image before 8750.07023427
image after 8587.21933201
image before 2756.28309252
image after 2719.34601852
image before 9883.92468715
image after 9750.05900809
image before 7564.10609364
image after 7373.98277281
image before 2684.5202448
image after 2607.43578989
image before 14989.5278038
image after 14077.0632875
image before 2928.83147728
image after 2885.19346013
image before 3829.41130379
image after 3690.27723235
image before 5457.19332394
image after 5265.58060418
image before 3019.17616867
image after 2886.63828291
image before 2698.77223769
image after 2633.07584977
image before 2577.8461146
image after 2507.44952039
image before 2907.94405847
image after 2821.44709666
image before 2616.67076865
image after 2556.99728441
image before 11053.6326379
image after 10734.4080012
image before 3831.24363927
image after 3716.73917735
image before 4312.79611995
image after 4182.80452468
album before 154437.847434
album after 151468.450678
image before 9886.11368912
image after 9792.55280513
image before 6858.20255365
image after 6711.7577676
image before 2572.22063217
image after 2565.83978992
image before 7221.73922321
image after 7073.84778021
image before 4522.72924627
image after 4497.37507323
image before 6432.35563602
image after 6399.67771968
image before 2673.61574743
image after 2631.86271223
image before 2564.18533482
image after 2550.61492452
image before 2855.35693064
image after 2842.52846411
image before 3253.74277177
image after 3242.08885131
image before 3251.50617799
image after 3229.35004997
image before 2172.25610208
image after 2167.71301974
image before 3062.75901211
image after 3050.76708738
image before 2661.68291706
image after 2632.80582548
image before 5100.98642169
image after 4996.77881923
image before 8010.71728037
image after 7902.76882248
image before 2747.29343891
image after 2739.75824313
image before 8050.08037487
image after 8026.98560659
image before 7574.03729778
image after 7530.73020649
image before 2658.9502865
image after 2619.68345036
image before 13286.3750127
image after 12927.9453533
image before 2922.82981574
image after 2767.71751418
image before 3661.73435379
image after 3622.82266714
image before 5275.03489692
image after 5238.94584486
image before 2888.73686826
image after 2884.58392931
image before 2652.26553173
image after 2634.24260044
image before 2488.98791254
image after 2477.21033125
image before 2768.53846049
image after 2748.43848624
image before 2546.41879853
image after 2532.06755534
image before 10861.9971856
image after 10784.109245
image before 3845.97680837
image after 3826.31482706
image before 4128.67044798
image after 4039.96666256
album before 149700.205546
album after 148678.481553
image before 9592.99115226
image after 9551.39465901
image before 6891.298128
image after 6786.03464101
image before 2583.71003391
image after 2581.79187156
image before 7116.01342365
image after 7075.87488176
image before 4505.98540606
image after 4496.60308092
image before 6405.90818864
image after 6396.72204133
image before 2666.53369566
image after 2652.09290262
image before 2580.83285393
image after 2575.95055078
image before 2867.00508888
image after 2862.42335172
image before 3215.31919895
image after 3212.98263795
image before 3227.2921938
image after 3220.65100943
image before 2172.08329388
image after 2170.50892149
image before 3058.14883882
image after 3056.90934817
image before 2673.16485904
image after 2663.99219781
image before 5085.75971013
image after 5052.51411914
image before 7618.65204616
image after 7541.61614065
image before 2752.73859169
image after 2749.86814088
image before 7163.24279135
image after 7148.3970227
image before 7563.15704923
image after 7550.78789184
image before 2650.09474732
image after 2635.2912803
image before 12745.9636768
image after 12597.5532835
image before 2765.58937321
image after 2761.76323253
image before 3622.97840528
image after 3606.07397562
image before 5229.69690526
image after 5217.87854453
image before 2891.82446626
image after 2889.99572472
image before 2648.56724885
image after 2640.66497561
image before 2486.5601816
image after 2481.72169277
image before 2745.4334211
image after 2742.97038348
image before 2544.83443435
image after 2539.01188628
image before 10727.4208323
image after 10697.5006407
image before 3869.98567411
image after 3747.85898141
image before 3999.05276265
image after 3951.87367393
album before 147867.916566
album after 147333.706575
image before 9378.5709897
image after 9360.27194195
image before 6896.68721422
image after 6834.09980817
image before 2602.09279306
image after 2601.08778784
image before 7159.59744902
image after 7143.76251638
image before 4506.42950304
image after 4500.56181078
image before 6385.91433562
image after 6380.52311394
image before 2665.03065681
image after 2657.96805241
image before 2597.97652192
image after 2595.87686548
image before 2875.84213325
image after 2873.35158958
image before 3190.10070126
image after 3188.88733621
image before 3214.60191046
image after 3211.63621483
image before 2171.53928078
image after 2170.71316694
image before 3058.11151515
image after 3057.54250323
image before 2684.01192705
image after 2679.70394972
image before 5084.82805392
image after 5069.99738131
image before 7393.90299427
image after 7340.86774546
image before 2755.84534525
image after 2754.49901509
image before 6700.54579965
image after 6689.28015441
image before 7536.3258443
image after 7530.34978202
image before 2653.84737691
image after 2647.22590943
image before 12579.2465783
image after 12496.1439806
image before 2750.42262386
image after 2748.44717004
image before 3598.17286805
image after 3589.92892707
image before 5237.76421126
image after 5233.03611162
image before 2889.97408912
image after 2888.97693934
image before 2645.36110692
image after 2641.50539559
image before 2479.64155785
image after 2477.27255254
image before 2741.86710571
image after 2740.61919428
image before 2544.83060193
image after 2542.17762597
image before 10673.2608838
image after 10657.3320023
image before 3739.89049504
image after 3734.78139252
image before 3930.61803907
image after 3902.85946535
album before 146952.141471
album after 146671.957408
image before 9265.50707361
image after 9256.05524247
image before 6882.19383468
image after 6846.56949835
image before 2612.23624022
image after 2611.56809623
image before 7169.82020435
image after 7161.51215687
image before 4510.82962491
image after 4507.7034676
image before 6393.28849053
image after 6391.42029735
image before 2668.18114753
image after 2664.35276761
image before 2607.71271249
image after 2606.65727299
image before 2879.17333552
image after 2877.69616576
image before 3177.20433284
image after 3176.56185251
image before 3211.06159833
image after 3209.41033305
image before 2172.90654852
image after 2172.3711303
image before 3057.91349839
image after 3057.62218355
image before 2692.41748042
image after 2690.16591027
image before 5081.70790559
image after 5073.87966819
image before 7279.70856589
image after 7246.20919706
image before 2756.13839903
image after 2755.41802599
image before 6440.63714973
image after 6432.3881113
image before 7546.59355454
image after 7543.94295889
image before 2655.94824853
image after 2652.49635867
image before 12450.9489051
image after 12402.4046372
image before 2748.26071383
image after 2747.30156987
image before 3594.54588329
image after 3589.85369456
image before 5220.09147999
image after 5217.68711782
image before 2894.32106208
image after 2893.72974159
image before 2648.77314241
image after 2646.63239557
image before 2478.06341026
image after 2476.57426278
image before 2740.50043974
image after 2739.82607248
image before 2546.64877195
image after 2545.09760883
image before 10638.0173081
image after 10629.021829
image before 3740.64058989
image after 3737.65302932
image before 3898.94845796
image after 3882.71515832
album before 146453.51511
album after 146292.80153
image before 9192.55100731
image after 9187.22225099
image before 6864.84767037
image after 6844.24706758
image before 2619.9789157
image after 2619.52235322
image before 7173.42985194
image after 7168.61911375
image before 4515.30356601
image after 4513.41104838
image before 6398.517314
image after 6397.77980924
image before 2672.50099635
image after 2670.21602025
image before 2613.76781682
image after 2613.19634263
image before 2881.60871487
image after 2880.70239219
image before 3170.10229744
image after 3169.71844335
image before 3210.74200256
image after 3209.71540105
image before 2174.54122995
image after 2174.17865973
image before 3057.26311412
image after 3057.09179008
image before 2698.60490767
image after 2697.27803524
image before 5073.57614504
image after 5069.23430117
image before 7216.43375983
image after 7195.82803473
image before 2755.79535083
image after 2755.38505584
image before 6296.84546461
image after 6290.67468162
image before 7553.75768437
image after 7552.36697855
image before 2656.9912327
image after 2654.96188576
image before 12375.5923698
image after 12345.8003343
image before 2748.09276416
image after 2747.54790318
image before 3595.56647576
image after 3592.80511692
image before 5207.99834856
image after 5206.71976644
image before 2899.08690411
image after 2898.69178481
image before 2652.52757499
image after 2651.26082479
image before 2477.89353612
image after 2476.92153133
image before 2740.05009661
image after 2739.62109358
image before 2548.84273809
image after 2547.91608008
image before 10609.1836191
image after 10603.9472283
image before 3745.15002531
image after 3743.25516571
image before 3884.51331751
image after 3874.80220062
album before 146161.783413
album after 146058.120147
image before 9140.96096719
image after 9137.70418742
image before 6848.15976703
image after 6835.50788819
image before 2625.1115927
image after 2624.76299396
image before 7175.1596392
image after 7172.10552971
image before 4522.31971738
image after 4521.02004238
image before 6409.75892734
image after 6409.34394113
image before 2675.50660512
image after 2674.08004339
image before 2619.20539359
image after 2618.87227248
image before 2882.89802264
image after 2882.27840011
image before 3162.28226804
image after 3161.95259099
image before 3208.88606379
image after 3208.23446348
image before 2175.83287782
image after 2175.56664423
image before 3057.04131907
image after 3056.9277321
image before 2704.13101699
image after 2703.33366514
image before 5061.70434776
image after 5059.18755886
image before 7174.89015562
image after 7161.68800896
image before 2756.1723019
image after 2755.91205409
image before 6220.82479895
image after 6216.03412908
image before 7565.98218478
image after 7565.00154508
image before 2657.79418258
image after 2656.50251953
image before 12318.2784845
image after 12299.3729544
image before 2748.88312106
image after 2748.53672647
image before 3597.64665085
image after 3595.94832077
image before 5197.44376365
image after 5196.73767899
image before 2903.46267727
image after 2903.16985316
image before 2656.92408733
image after 2656.16008908
image before 2478.08584266
image after 2477.40092434
image before 2737.58236431
image after 2737.26584522
image before 2550.95458186
image after 2550.34809448
image before 10588.1348618
image after 10584.8205791
image before 3748.6275415
image after 3747.40822117
image before 3876.2280942
image after 3870.01468216
/Users/dalyabaron/.virtualenvs/astro/lib/python2.7/site-packages/scipy/optimize/optimize.py:891: RuntimeWarning: divide by zero encountered in double_scalars
  rhok = 1.0 / (numpy.dot(yk, sk))

In [23]:
# look at the galaxy model now
print type(album.galaxy)
print album.galaxy.get_parameters_vector()


<class 'astrohack_projections.galaxy_model_3d'>
[  4.10481932e+03   4.01760543e+00   2.67301469e-01   1.76902072e-01
   1.29078693e+00   1.44596773e+00   9.06668103e-01  -2.83910741e-01
  -1.86344931e-01  -3.92240603e-02   1.44869058e+04   2.90224782e+00
   1.21861053e+00   2.02405823e-01   2.29896687e+01   1.58912702e+01
   3.98331748e+00   3.25830937e+00  -3.95245027e+00  -1.26450159e+00
   7.36137851e+03   4.82590327e+00  -5.28186566e-01   9.59197895e-02
   1.04456963e+01   9.22751847e+00   1.45635504e+00  -3.12721237e+00
  -1.53549285e+00  -1.28143090e+00]