Entry 7

../_images/entry7.png

Authors

  • Chian-Chou Chen

Since the time of Hubble, the shapes and the structures of galaxies have been one of the major topics in astrophysical research. Results from these morphological studies often provide vital constraints to the models of galaxy formation and evolution. One of the best telescopes nowadays that offer the sharpest images that allows astronomers to study their objects in the greatest detail is the Hubble Space Telescope (HST). HST has been, and continues to be, providing astrounding images that revolutionize our understandings of the Universe.

On the other hand, another telescope that is catching up to the legacy of HST is the Atacama Large Millimeter/submillimeter Array (ALMA). Unlike HST, ALMA observes in the millimeter wavelengths. Observations in this regime has given astronomer headache, because to provide an milimeter images that is as sharp as those obtained by HST, one needs to build a telescope that has a disk diameter of more than 2 km, which is practically impossible. To circumvent this issue, astronomers put together an array of telescopes, like ALMA, and then synthesize these small telescope to operate like a very large one. ALMA has just started working, and the results are revolutionary. Images taken by ALMA reveal unpresedented details about distribution of dust, which is a complimentary to the images taken by HST because dust is not detectable by HST. Combing the images taken by the two state-of-the-art telescopes, astronomers are pushing the frontier of our knowledge about galaxy formation and evolution even further.

Here I present some of the images taken by both ALMA and HST that were used in my research. The results have recently been published in the Astrophysical Journal[1]. The galaxies shown in these images are so called the submillimeter galaxies (SMGs). SMGs are found to be the most violent star formers across the whole Universe. Astronomers believe that SMGs are forming stars in a rate that is 500 to 1000 times that of our own Milky Way galaxy. A natural question to ask, and a fundamental one, is how do galaxies form so many stars, and what makes them special? With the help of ALMA, for the first time astronomers can accurately pinpoint the location of SMGs in a very efficient way, which is critical because astronomers then can use this position to find out what do SMGs look like in the optical wavelength. In the image i show the signal obtained from ALMA in white contours and the color images are retrieved from the HST. In my study i find that SMGs have a mixture of shapes, but more than 80% of them are found to have very disturbed morphologies, suggesting that they might not be a single isolated galaxy, but two or even three galaxies that are in the process of merging together. So we conclude, because stars are formed from gas, by merging two galaxies, a lot of gas collides with each other, leading to an increase in gas density and therefore enhancement of the ability of forming stars.

[1] Chen, C.-C. et al., 2015, ApJ, 799, 194

Products

Source

#!/usr/bin/python

"""
	colormontage.py : to plot color montage for any ALESS SMG with 2+ optical/NIR band from HST, modified for the SciPy John Hunter Excellence in Plotting Contest. 
	Usage : python colormontage.py 

	04/10/2015
	(c)	Chian-Chou Chen
"""
from kapteyn import maputils
from kapteyn import wcs
from scipy import interpolate
from scipy import stats
import coords as c
import aplpy
import PIL
import montage
import pyfits
import numpy as np
import matplotlib.pyplot as mpl
import asciitable
from astropy.io import fits
import asciitable
import os.path
from astropy import wcs
from coscal import coscalc

def rgbplt(srcid,imr,img,imb,num=3):
    aplpy.make_rgb_cube([imr,img, \
                         imb],'etc/'+srcid+'_hstrgb.fits',north=True)
    im=[imr,img,imb]
    vmx=[]
    vmn=[]
    for bb in im:
        hdu=pyfits.open(bb)
        hdudata=hdu[0].data
        dat=[]
        for ii in range(1,hdudata.__len__()):
            for jj in range(1,hdudata.__len__()):
                if hdudata[ii][jj] > 0:
                    dat.append(hdudata[ii][jj])
        vmx.append(stats.scoreatpercentile(dat,99.7))
        vmn.append(stats.scoreatpercentile(dat,50))
            

    if num == 3:
        if srcid == 'aless10.1' or srcid == 'aless18.1' or srcid == 'aless45.1' or srcid == 'aless67.1' or srcid == 'aless79.2':
            vmx=[1e-1,1e-1,1e-2]
            vmn=[5e-3,5e-3,1e-3]
        if srcid == 'aless17.1' or srcid == 'aless17.2' or srcid == 'aless17.3':
            vmx=[6e-1,1.4e-1,2e-2]
            vmn=[6.3e-03,1e-02,4e-4]
        if srcid == 'aless45.1' or srcid == 'aless79.1':
            vmx=[8e-2,8e-2,8e-3]
            vmn=[5e-3,5e-3,1e-3]
        if srcid == 'aless13.1':
            vmx=[1.4e-1,1.5e-1,2e-2]
            vmn=[6e-03,8e-03,4e-3]

        aplpy.make_rgb_image('etc/'+srcid+'_hstrgb.fits','etc/'+srcid+'_hstrgb.tif', \
                             stretch_r='log',stretch_g='log',stretch_b='log',\
                             vmin_r=vmn[0], vmax_r=vmx[0], vmin_g=vmn[1], vmax_g=vmx[1], vmin_b=vmn[2], vmax_b=vmx[2], \
        )
    elif num == 2:
        vmx=[3e-01,9,1e-2]
        vmn=[5e-03,1.e-01,8e-4]
        if srcid == 'aless15.1' or srcid == 'aless15.2' or srcid == 'aless15.3' or srcid == 'aless15.6':
            vmx=[1e-01,3,9e-3]
            vmn=[5e-03,1.e-01,8e-3]
        if srcid == 'aless74.1' or srcid == 'aless43.1' or srcid == 'aless43.3':
            vmx=[4e-01,10,2e-2]
            vmn=[6e-03,1.5e-01,5e-3]
        if srcid == 'aless88.1' or srcid == 'aless88.11' or srcid == 'aless57.1':
            vmx=[4e-01,10,2e-2]
            vmn=[6e-03,1.5e-01,2e-3]
        if srcid == 'aless2.1' or srcid == 'aless2.2':
            vmx=[2e-01,5,1e-2]
            vmn=[6e-03,1.5e-01,3e-3]            
        if srcid == 'aless5.1':
            vmx=[4,100,2e-1]
            vmn=[6e-03,9e-01,5e-3]
        if srcid == 'aless118.1':
            vmx=[4e-01,10,2e-2]
            vmn=[6e-03,5e-01,1e-2]
            
        aplpy.make_rgb_image('etc/'+srcid+'_hstrgb.fits','etc/'+srcid+'_hstrgb.tif', \
                             stretch_r='log',stretch_g='log',stretch_b='log',\
                             vmin_r=vmn[0], vmax_r=vmx[0], vmin_g=vmn[1], vmax_g=vmx[1], vmin_b=vmn[2], vmax_b=vmx[2], \
        )
         

def plot1setting(fig,srcid,bxcd,bycd,photoz):
    if photoz == 99:
        photoz = 2.3
    distscl=coscalc(photoz)
    bxszkpc=70.
    wh = bxszkpc/distscl[0]/3600.
    rad = 0.8/3600.
    print srcid, photoz, distscl[0], wh
    fig.recenter(bxcd,bycd,width=wh,height=wh)
    # Axis
    fig.axis_labels.hide()
    fig.tick_labels.hide()
    fig.ticks.set_length(0)
    # IDs
    xcdoff=bxszkpc/distscl[0]/3600./2
    ycdoff=bxszkpc/distscl[0]/3600.*3/4/2
    fig.add_label(bxcd+xcdoff,bycd+ycdoff,' '.join(' '.join(srcid.upper()[i:i+5] for i in range(0, len(srcid), 5)).split()),size=20,color='white',weight='normal',horizontalalignment='left',verticalalignment='center')
    
def main():
    almapth='./'
    almatab=pyfits.open(almapth+'sources_aLESS_24jul2012_brightcal_M+S_IRAC_Radio_24+HSO+PACS.fits')
    alessidall=almatab[1].data.ALESS_ID
    alessra=almatab[1].data.RA_ALMA
    alessdec=almatab[1].data.DEC_ALMA
    lessid=almatab[1].data.NAME_LESS
    alessrms=almatab[1].data.RMS_ALMA
    alessphotoz=np.abs(almatab[1].data.Z_PHOT)
    alessids=[]
    for mm in alessidall:
        field=mm.split(' ')[0].lower()
        numb=str(float(mm.split(' ')[1]))
        alessids.append(field+numb)
    alessids=np.array(alessids)

    # get HST observed ALESS SMG IDs
    hstidtab=asciitable.read('srclist.tab')
    hstid=hstidtab.ID    

    # plot
    fig = mpl.figure(figsize=(12, 9))
    raw=0
    numcoll=3
    coll=numcoll
    deltacoll=1/3.
    numraw=4
    deltaraw=1/4.
    
        
    mpl.subplots_adjust(left=0,right=1,top=1,bottom=0,wspace = 0.00001,hspace = 0.000001)
    pth = './cutimg/'
    artgpth= './cutimg/'
    for srcid in alessids:
        cntst=np.where(hstid == srcid)
        if len(cntst[0]) == 1:
            flext=['814','105','125','160']
            chckn=0        
            for bb in range(0,len(flext)):
                chck=os.path.isfile(pth+srcid+'_'+flext[bb]+'.fits')
                if chck == True:
                    chckn=chckn+1

            if chckn > 1:
                cnnum=np.where(alessids == srcid)
                lessfile=lessid[cnnum][0]+'.fits'
                srcalessrms=alessrms[cnnum][0]*1e-3
                if chckn >= 3:
                    chck=os.path.isfile(pth+srcid+'_814.fits')
                    if chck == True :
                        imb=pth+srcid+'_814.fits'
                        img=pth+srcid+'_125.fits'
                        imr=pth+srcid+'_160.fits'
                        rgbplt(srcid,imr,img,imb)
                    else:
                        imb=pth+srcid+'_105.fits'
                        img=pth+srcid+'_125.fits'
                        imr=pth+srcid+'_160.fits'
                        rgbplt(srcid,imr,img,imb)


                    f = aplpy.FITSFigure('etc/'+srcid+'_hstrgb_2d.fits',figure=fig, subplot=[deltaraw*raw,deltacoll*coll,deltaraw,deltacoll])
                    f.show_rgb('etc/'+srcid+'_hstrgb.tif')
                    cnaless=np.where(alessids == srcid)
                    plot1setting(f,srcid,alessra[cnaless][0],alessdec[cnaless][0],alessphotoz[cnaless][0])
                    # rms contours
                    constart=srcalessrms
                    constep=srcalessrms
                    #levs1 = constart+np.arange(2,15,3)*constep
                    levs1 = constart+np.array([2,4,49,99])*constep
                    print lessfile
                    f.show_contour(almapth+'almamaps/'+lessfile,colors='white',levels=levs1,linewidths=2,linestyles='solid',alpha=0.8)
                elif chckn == 2:
                    imb=pth+srcid+'_814.fits'
                    if srcid == 'aless118.1':
                        imb=artgpth+'../aless118.1/'+srcid+'_814_sex_noobj.fits'                        
                    img=artgpth+srcid+'_greenv2.fits'
                    imr=pth+srcid+'_160.fits'
                    rgbplt(srcid,imr,img,imb,num=chckn)
                    
                    f = aplpy.FITSFigure('etc/'+srcid+'_hstrgb_2d.fits',figure=fig, subplot=[deltaraw*raw,deltacoll*coll,deltaraw,deltacoll])
                    f.show_rgb('etc/'+srcid+'_hstrgb.tif')
                    cnaless=np.where(alessids == srcid)
                    plot1setting(f,srcid,alessra[cnaless][0],alessdec[cnaless][0],alessphotoz[cnaless][0])
                    # rms contours
                    constart=srcalessrms
                    constep=srcalessrms
                    levs1 = constart+np.array([2,4,49,99])*constep
                    if srcid == 'aless88.11':
                        levs1 = (constart+np.array([2,4,49,99])*constep)/1.182        
                    print lessfile
                    f.show_contour(almapth+'almamaps/'+lessfile,colors='white',levels=levs1,linewidths=2,linestyles='solid',alpha=0.8)
                
        
            



                raw=raw+1

                if raw == numraw:
                    coll=coll-1
                    raw=0            

    f.save('colormontage.pdf')

if __name__=='__main__':
        main()

Table Of Contents

Previous topic

Entry 6

Next topic

Entry 8

This Page