예제 #1
0
sigmav = np.sqrt(S)
one = np.arange(10000,10000000000,10000)

#Virial Mass best fit line
M_vir = 540*np.power(R,2)

#Luminous Mass best fit line
M_lum = 2000*np.power(np.power(M_vir/39,1.234567901)/130,0.8)

#Sigma_0, Mass Density, R_gal
sigma0 = mytable['VRMS_EXTRAP_DECONV']/np.sqrt(mytable['RADRMS_EXTRAP_DECONV'])  
M_den = mytable['MASS_EXTRAP']/(np.pi*np.power(mytable['RADRMS_EXTRAP_DECONV'],2)) 

mygalaxy = Galaxy("M100")
cpropstable = Table.read('m100.co10.kkms_props_cprops.fits')
rgal=mygalaxy.radius(ra = cpropstable['XPOS'], dec = cpropstable['YPOS'])

#indexes for low R_gal group 
index = np.where(rgal.value < 1100)	
	
##PLOTS##

#Virial mass vs.luminous mass plot
figure = plt.figure(figsize=(4.5,4)) #figure size in inches
line1, line2 = plt.loglog(one,one, mytable['MASS_EXTRAP'],mytable['VIRMASS_EXTRAP_DECONV'])
line1.set_linestyle('-')
line1.set_color('k')
line2.set_linestyle('None')
line2.set_marker('.')
plt.loglog(mytable['MASS_EXTRAP'][index],mytable['VIRMASS_EXTRAP_DECONV'][index],marker='.',c='b',linestyle='None')
plt.loglog(mytable['MASS_EXTRAP'][92],mytable['VIRMASS_EXTRAP_DECONV'][92],marker='.',c='w')
예제 #2
0
import astropy.table
import numpy as np
from astropy.table import Table, Column
import matplotlib.pyplot as plt
from galaxies import Galaxy
import astropy.units as u
import matplotlib as mpl
import astropy.constants as con
mpl.rcParams['font.family']='serif'
mpl.rcParams['font.serif'] = 'Times New Roman'
mygalaxy=Galaxy("M83")

mytable=Table.read('m83.co10.K_props_clfind.fits')
#note that matplotlib understands LaTeX math in the code m

rgal=mygalaxy.radius(ra=(mytable['XPOS']), dec=(mytable['YPOS']))
colrgal=Column(name='RGAL_PC',data=(rgal))
mytable.add_column(colrgal)

condition = np.ones(len(mytable),dtype=np.bool)
condition = (mytable['MASS_GCORR']>4.6e5) # & (mytable['RADRMS_EXTRAP_DECONV']>20)
idx = np.where(condition)
mytable = mytable[idx]

edge_in = np.array([0,450,2300,3200,3900,4500])
edge_out = np.array([450,2300,3200,3900,4500,10000])

for ins,outs in zip(edge_in,edge_out):
    subset = (mytable['MASS_EXTRAP']>3e5)*(mytable['RGAL_PC']<=outs)*(mytable['RGAL_PC']>ins)
    tt = mytable[subset]
    mass = tt['MASS_EXTRAP'].data
#Virial Mass best fit line
M_vir = 540 * np.power(R, 2)

#Luminous Mass best fit line
M_lum = 2000 * np.power(np.power(M_vir / 39, 1.234567901) / 130, 0.8)

#Sigma_0, Mass Density, R_gal
sigma0 = mytable['VRMS_EXTRAP_DECONV'] / np.sqrt(
    mytable['RADRMS_EXTRAP_DECONV'])
M_den = mytable['MASS_EXTRAP'] / (np.pi *
                                  np.power(mytable['RADRMS_EXTRAP_DECONV'], 2))

mygalaxy = Galaxy("M100")
cpropstable = Table.read('m100.co10.kkms_props_cprops.fits')
rgal = mygalaxy.radius(ra=cpropstable['XPOS'], dec=cpropstable['YPOS'])

#indexes for low R_gal group
index = np.where(rgal.value < 1100)

##PLOTS##

#Virial mass vs.luminous mass plot
figure = plt.figure(figsize=(4.5, 4))  #figure size in inches
line1, line2 = plt.loglog(one, one, mytable['MASS_EXTRAP'],
                          mytable['VIRMASS_EXTRAP_DECONV'])
line1.set_linestyle('-')
line1.set_color('k')
line2.set_linestyle('None')
line2.set_marker('.')
plt.loglog(mytable['MASS_EXTRAP'][index],
예제 #4
0
파일: rolling_fit.py 프로젝트: low-sky/m83
mpl.rcParams['font.family'] = 'serif'
mpl.rcParams['font.serif'] = 'Times New Roman'
mpl.rcParams['font.size'] = 12


# get info about m83
mygalaxy = Galaxy("M83")
print(mygalaxy)

# load fits file
tin = Table.read('m83.co10.K_props_clfind.fits')

minmass_global = 3.35e5
minmass = 3.35e5
# find cloud's galactocentric distance
rgal = mygalaxy.radius(ra=(tin['XPOS']), dec=(tin['YPOS']))
colrgal = Column(name='RGAL_PC', data=(rgal))
tin.add_column(colrgal)

t = Table(names=['Rmin', 'Rmax', 'Rmean', 'R_tpl', 'p_tpl', 'index',
                 'index_tpl', 'Mtrunc_tpl',
                 'M1', 'M5', 'Mean5', 'Mmean',
                 'index_trunc', 'Mtrun_trunc',
                 'index15_trunc', 'index85_trunc',
                 'Mtrun15_trunc', 'Mtrun85_trunc',
                 'pkprob_trunc'])

tfit = tin[tin['MASS_GCORR'] > minmass_global]
idx = np.argsort(tfit['RGAL_PC'])
tfit = tfit[idx]
npts = len(tfit)
예제 #5
0
from astropy.table import Table
from scipy.spatial import Voronoi
import matplotlib.path as mplPath
import astropy.wcs as wcs
from astropy.io import fits
import astropy.units as u
import numpy as np
from galaxies import Galaxy

m100 = Galaxy('M100')
tbl = Table.read('m100.co10.kkms_props_cprops_withSFR_subsets.fits')
hdr = fits.Header.fromtextfile('m100.header')
w = wcs.WCS(hdr)
ypix, xpix = np.meshgrid(np.linspace(0, 799, 800), np.linspace(0, 799, 800))
ra, dec = w.celestial.wcs_pix2world(xpix, ypix, 0)
radius = m100.radius(ra=ra, dec=dec)

rclds = m100.radius(ra=tbl[~tbl['Outliers']]['XPOS'],
                    dec=tbl[~tbl['Outliers']]['YPOS'])
maxrad = np.max(rclds.value)
xcloud, ycloud, zcloud = w.wcs_world2pix(tbl['XPOS'], tbl['YPOS'], tbl['VPOS'],
                                         0)
vor = Voronoi(zip(xcloud, ycloud))
label = np.zeros((800, 800), dtype=np.str)
keys = ['Nuclear', 'Interarm', 'Arm']

for idx, region in enumerate(vor.regions):
    verts = vor.vertices[region]
    path = mplPath.Path(verts)
    inout = path.contains_points(zip(xcloud, ycloud))
    regions = path.contains_points(zip(xpix.ravel(), ypix.ravel()))
예제 #6
0
파일: mspecmap.py 프로젝트: low-sky/m83
mpl.rcParams['font.family'] = 'serif'
mpl.rcParams['font.serif'] = 'Times New Roman'
mpl.rcParams['font.size'] = 12

# get info about m83
mygalaxy = Galaxy("M83")
print(mygalaxy)

# load fits file
tin = Table.read('m83.co10.K_props_clfind.fits')

minmass_global = 4e5
minmass = 4e5
# find cloud's galactocentric distance
tin = tin[tin['MASS_GCORR'] > minmass_global]
rgal = mygalaxy.radius(ra=(tin['XPOS']), dec=(tin['YPOS']))
xgal, ygal = mygalaxy.radius(ra=(tin['XPOS']), dec=(tin['YPOS']),
                             returnXY=True)
_, labels, _ = k_means(np.c_[xgal.value, ygal.value], 20)

colrgal = Column(name='RGAL_PC', data=(rgal))
tin.add_column(colrgal)

t = Table(names=['Xavg', 'Yavg', 'Rmean', 'R_tpl', 'p_tpl', 'index',
                 'index_tpl', 'Mtrunc_tpl',
                 'M1', 'M5', 'Mean5', 'Mmean'])

idx = np.argsort(tin['RGAL_PC'])
tfit = tin[idx]
npts = len(tfit)
stride = 25
예제 #7
0
import astropy.table
import numpy as np
from astropy.table import Table
import matplotlib.pyplot as plt
from galaxies import Galaxy
import astropy.units as u

mygalaxy = Galaxy("M83")
print(mygalaxy)

mytable = Table.read('/home/pafreema/Documents/m83.co10.K_props_cprops.fits')

idx = np.where(np.isfinite(
    mytable['VIRMASS_EXTRAP_DECONV']))  #removes values that are infinite/NaN

rgal = mygalaxy.radius(ra=(mytable['XPOS'][idx]), dec=(mytable['YPOS'][idx]))
#print rgal #get radii in parsecs

sigma = (mytable['VRMS_EXTRAP_DECONV'][idx]) / np.sqrt(
    (mytable['RADRMS_EXTRAP_DECONV'][idx])**2)  #sigma naught
dens = (mytable['MASS_EXTRAP'][idx]) / (np.pi * (
    (mytable['RADRMS_EXTRAP_DECONV'][idx])**2))  #mass density

m, b = np.polyfit(np.log(dens), np.log(sigma), 1)
x = np.linspace(10, 10e4, 100)
figure = plt.figure(figsize=(4.5, 4))
plt.scatter(dens, sigma, c=rgal, marker='s')
plt.plot(x, np.exp(m * np.log(x) + b))
plt.xlabel(r'${\Sigma}M\ (M_{\odot}/pc^2)$')
plt.ylabel(r'${\sigma}_0\ $')
plt.axis([3 * 10, 10e3, 10e-3, 1])
from astropy.table import Table
from scipy.spatial import Voronoi
import matplotlib.path as mplPath
import astropy.wcs as wcs
from astropy.io import fits
import astropy.units as u
import numpy as np
from galaxies import Galaxy

m100 = Galaxy('M100')
tbl = Table.read('m100.co10.kkms_props_cprops_withSFR_subsets.fits')
hdr = fits.Header.fromtextfile('m100.header')
w = wcs.WCS(hdr)
ypix,xpix = np.meshgrid(np.linspace(0,799,800),np.linspace(0,799,800))
ra,dec = w.celestial.wcs_pix2world(xpix,ypix,0)
radius = m100.radius(ra=ra,dec=dec)

rclds = m100.radius(ra=tbl[~tbl['Outliers']]['XPOS'],dec=tbl[~tbl['Outliers']]['YPOS'])
maxrad = np.max(rclds.value)
xcloud,ycloud,zcloud = w.wcs_world2pix(tbl['XPOS'],tbl['YPOS'],tbl['VPOS'],0)
vor = Voronoi(zip(xcloud,ycloud))
label = np.zeros((800,800),dtype=np.str)
keys = ['Nuclear','Interarm','Arm']

for idx,region in enumerate(vor.regions):
    verts = vor.vertices[region]
    path = mplPath.Path(verts)
    inout = path.contains_points(zip(xcloud,ycloud))
    regions = path.contains_points(zip(xpix.ravel(),ypix.ravel()))
    thislabel = tbl[inout][keys]
    print(thislabel)
예제 #9
0
파일: m83_map.py 프로젝트: low-sky/m83
from astropy.io import fits
from astropy.table import Table
from galaxies import Galaxy
import matplotlib.pyplot as mpl
import aplpy
import numpy as np
from radial_profile import lundgren_surfdens
import astropy.units as u

mpl.rcParams['font.family'] = 'serif'
mpl.rcParams['font.serif'] = 'Times New Roman'

mygalaxy = Galaxy("M83")

hdu = fits.open('m83.co10.tmax.fits')
rgal = mygalaxy.radius(header=hdu[0].header) / 1e3
hdr = hdu[0].header
del hdr['CDELT3']
del hdr['CRPIX3']
del hdr['CRVAL3']
# del hdr['NAXIS3']
del hdr['CTYPE3']
del hdr['CUNIT3']
hdr['WCSAXES'] = 2
newhdu = fits.PrimaryHDU(hdu[0].data, hdr)
radii = fits.PrimaryHDU(rgal, hdr)
map = aplpy.FITSFigure(newhdu)
map.show_colorscale(cmap='Greys', vmin=2.4, vmax=8, stretch='sqrt')
map.add_colorbar()
map.tick_labels.set_font(family='serif')
map.colorbar.set_axis_label_text(r'$T_{\mathrm{max}}\ (\mathrm{K})$')
예제 #10
0
from astropy.table import Column
import matplotlib.pyplot as plt
import powerlaw
from galaxies import Galaxy
import astropy.units as u
from tabulate import tabulate

#get info about m83
mygalaxy = Galaxy("M83")
print(mygalaxy)

#load fits file
t = Table.read('/home/pafreema/Documents/m83.co10.K_props_cprops.fits')

#find cloud's galactocentric distance
rgal = mygalaxy.radius(ra=(t['XPOS']), dec=(t['YPOS']))

#add those distances to the fits table
colrgal = Column(name='RADIUS_PC', data=(rgal))
t.add_column(colrgal)
#print(t)

#create a loop to input multiple bin noundaries
inneredge = np.array([0, 450, 2300, 3200, 3900])
outeredge = np.array([450, 2300, 3200, 3900, 4500])

column_names = [
    'Inner edge (pc)', 'Outer edge (pc)', 'GMC index', 'R', 'p',
    'Truncation mass (M$_\odot$)', 'Largest cloud (M$_\odot$)',
    '5th largest cloud (M$_\odot$)'
]
예제 #11
0
import matplotlib as mpl
import astropy.io.fits as fits
mpl.rcParams['font.family'] = 'serif'
mpl.rcParams['font.serif'] = 'Times New Roman'
mpl.rcParams['font.size'] = 14
#get info about m83
mygalaxy = Galaxy("M83")
print(mygalaxy)

# load fits file
t = Table.read('m83.co10.K_props_clfind.fits')
# import astropy.wcs as wcs

data = fits.getdata('m83.co10.tmax.fits')
hdr = fits.getheader('m83.co10.tmax.fits')
rgal_img = (mygalaxy.radius(header=hdr)).value

# find cloud's galactocentric distance


rgal = mygalaxy.radius(ra=(t['XPOS']), dec=(t['YPOS']))
colrgal = Column(name='RGAL_PC', data=(rgal))
t.add_column(colrgal)

t = t[(t['MASS_EXTRAP'].data > 3e5)]


massvals = t['MASS_EXTRAP'].data
radvals = t['RGAL_PC'].data
radsort = np.sort(radvals)
msort = massvals[np.argsort(radvals)]
예제 #12
0
def data(galaxyname, data, n_bins=1, r_nuc=0):

    # Import the libraries.
    from galaxies import Galaxy
    from astropy.table import Table
    from astropy.table import Column
    import astropy
    import powerlaw
    import numpy as np
    import astropy.table
    import astropy.units as u
    import matplotlib.pyplot as plt
    import matplotlib as mpl

    # Load its FITS file.
    t = Table.read(data)

    # Load the information about the galaxy.
    gxy = Galaxy(galaxyname)

    # Calculate the galaxy's properties.
    distance = np.asarray(gxy.distance)
    inclination = np.asarray(gxy.inclination)
    rgal = gxy.radius(ra=(t['XPOS']), dec=(t['YPOS']))
    rgal = rgal.to(u.kpc)
    rpgal = np.asarray(rgal)

    # Append these to the FITS table.
    col_rgal = Column(name='RADIUS_KPC', data=(rgal))
    t.add_column(col_rgal)

    # Sort the masses according to galactocentric radius.
    mass = t['MASS_EXTRAP'].data
    i_sorted = np.argsort(rgal)
    rgal_sorted = np.asarray(rgal[i_sorted])
    mass_sorted = np.asarray(mass[i_sorted])

    # Initiate a loop to calculate the bin boundaries and the indeces of these boundaries in the sorted list.
    totmass = np.sum(mass) / n_bins
    edge_f = 1.1 * np.max(rgal_sorted)
    edges = np.zeros(n_bins - 1)
    start = 0
    mass_equiv = [0]  #indeces for the sorted mass bins of equal mass
    mass_area = [0]  #indeces for the sorted mass bins of equal area
    rgal_equiv = [
        0, 2, 8**0.5, 12**0.5, 4, 20**0.5, 24**0.5, 28**0.5, 32**0.5, 6
    ]
    r = 1  #equal-area radial index
    e = 0  #edge index
    f = 0  #loop flag to skip the mass_area loop
    c = 0  #loop counter
    for i in range(len(mass_sorted)):
        #Find the indeces for bins of equal mass (equivalent to totmass)
        if np.sum(mass_sorted[start:i]) > totmass:
            edges[e] = 0.5 * (rgal_sorted[i] + rgal_sorted[i - 1])
            start = i
            mass_equiv = np.append(mass_equiv, i)
            e = e + 1
        #Find the indeces for bins of equal area (4pi kpc^2)
        if rgal_sorted[i] > rgal_equiv[r] and not f:
            if rgal_sorted[i] < rgal_equiv[3] and not f:
                mass_area = np.append(mass_area, i)
                r = r + 1
                c = 0
            if rgal_sorted[i] > rgal_equiv[3]:
                f = 1
                mass_area = np.append(mass_area, i)
    mass_equiv = np.append(mass_equiv, i)
    inneredge = np.concatenate(([0.000000], edges))
    outeredge = np.concatenate((edges, [edge_f]))

    # Create a template for a new table.
    column_names = [
        'Inner edge (kpc)', 'Outer edge (kpc)', 'GMC index', 'R', 'p',
        'Truncation mass ($M_\mathrm{\odot}$)',
        'Largest cloud ($M_\mathrm{\odot}$)',
        '5th largest cloud ($M_\mathrm{\odot}$)'
    ]
    column_types = ['f4', 'f4', 'f4', 'f4', 'f4', 'f4', 'f4', 'f4']
    table = Table(names=column_names, dtype=column_types)

    # Fill the table.
    for inneredge, outeredge in zip(inneredge, outeredge):

        idx = np.where((t['RADIUS_KPC'] >= inneredge)
                       & (t['RADIUS_KPC'] < outeredge))
        mass = t['MASS_EXTRAP'][idx].data
        fit = powerlaw.Fit(mass)
        fit_subset = powerlaw.Fit(mass, xmin=3e5)
        R, p = fit.distribution_compare('power_law', 'truncated_power_law')
        table.add_row()
        table[-1]['R'] = R
        table[-1]['p'] = p
        table[-1]['GMC index'] = -fit.alpha
        table[-1]['Inner edge (kpc)'] = inneredge
        table[-1]['Outer edge (kpc)'] = outeredge
        table[-1]['Largest cloud ($M_\mathrm{\odot}$)'] = np.nanmax(mass)
        table[-1][
            'Truncation mass ($M_\mathrm{\odot}$)'] = 1 / fit.truncated_power_law.parameter2
        table[-1]['5th largest cloud ($M_\mathrm{\odot}$)'] = np.sort(
            t['MASS_EXTRAP'][idx])[-5]

    # Write the data to a FITS file.
    table.write('../Data/' + galaxyname + '_data.fits', overwrite=True)

    # Plot the mass distribution trends for equal-mass bins.
    t = Table.read('../Data/' + galaxyname + '_data.fits')
    inneredge = t['Inner edge (kpc)'].data
    outeredge = t['Outer edge (kpc)'].data
    subplot_label = ('(a)', '(b)', '(c)', '(d)', '(e)', '(f)')
    for i in range(len(mass_equiv) - 1):

        binmass = mass_sorted[mass_equiv[i]:mass_equiv[i + 1]]
        myfit = powerlaw.Fit(binmass)
        R, p = myfit.distribution_compare('power_law', 'truncated_power_law')
        fig = myfit.truncated_power_law.plot_ccdf(label='Truncated\nPower Law')
        myfit.power_law.plot_ccdf(label='Power Law', ax=fig)
        myfit.plot_ccdf(drawstyle='steps', label='Data', ax=fig)

        # Format the plot.
        plt.legend(loc=0)
        #plt.title(galaxyname+'Equal-mass Mass Distribution, bin '+repr(i+1))
        plt.ylim(ymin=10**-3)
        plt.xlabel(r'$M_\mathrm{\odot}$', fontsize=20)
        plt.ylabel('CCDF', fontsize=20)
        mpl.rc('xtick', labelsize=16)
        mpl.rc('ytick', labelsize=16)
        plt.text(0.01,
                 0.5,
                 subplot_label[i],
                 ha='left',
                 va='center',
                 transform=fig.transAxes,
                 fontsize=16)
        plt.text(
            0.35,
            0.01,
            r'$M_{bin}\ =\ %e M_\mathrm{\odot}$' % (totmass) + '\n' +
            r'$R_{gal}\ =\ %5.4f\ \mathrm{kpc}\ \mathrm{to}\ %5.4f\ \mathrm{kpc}$'
            % (inneredge[i], outeredge[i]) + '\n' +
            r'$\mathrm{R}\ =\ %5.4f,\ \mathrm{p}\ =\ %5.4f$' % (R, p) + '\n' +
            r'$\alpha\ =\ %5.4f,\ M_\mathrm{0}\ =\ %5.4eM_\mathrm{\odot}$' %
            (-myfit.alpha, 1 / myfit.truncated_power_law.parameter2),
            ha='left',
            va='bottom',
            transform=fig.transAxes,
            fontsize=16)
        plt.savefig('../Data/' + galaxyname + '_power_law_equal_mass_' +
                    repr(i + 1) + '.png')
        plt.close()

    # Plot the mass distribution trend for equal-area bins.
    for i in range(len(mass_area) - 1):

        f = 0  #loop flag
        if mass_area[i + 1] - mass_area[i] < 3:
            f = 1
        if not f:
            binmass = mass_sorted[mass_area[i]:mass_area[i + 1]]
            myfit = powerlaw.Fit(binmass)
            R, p = myfit.distribution_compare('power_law',
                                              'truncated_power_law')
            fig = myfit.truncated_power_law.plot_ccdf(
                label='Truncated\nPower Law')
            myfit.power_law.plot_ccdf(label='Power Law', ax=fig)
            myfit.plot_ccdf(drawstyle='steps', label='Data', ax=fig)

            # Format the plot.
            plt.legend(loc=0)
            #plt.title(galaxyname+'Equal-area Mass Distribution, bin '+repr(i+1))
            plt.ylim(ymin=10**-3)
            plt.xlabel(r'$M_\mathrm{\odot}$', fontsize=20)
            plt.ylabel('CCDF', fontsize=20)
            mpl.rc('xtick', labelsize=16)
            mpl.rc('ytick', labelsize=16)
            plt.text(0.01,
                     0.5,
                     subplot_label[i],
                     ha='left',
                     va='center',
                     transform=fig.transAxes,
                     fontsize=16)
            plt.text(
                0.35,
                0.01,
                r'$R_{gal}\ =\ %5.4f\ \mathrm{kpc}\ \mathrm{to}\ %5.4f\ \mathrm{kpc}$'
                % (rgal_equiv[i], rgal_equiv[i + 1]) + '\n' +
                r'$\mathrm{R}\ =\ %5.4f,\ \mathrm{p}\ =\ %5.4f$' % (R, p) +
                '\n' +
                r'$\alpha\ =\ %5.4f,\ M_\mathrm{0}\ =\ %5.4eM_\mathrm{\odot}$'
                % (-myfit.alpha, 1 / myfit.truncated_power_law.parameter2),
                ha='left',
                va='bottom',
                transform=fig.transAxes,
                fontsize=16)
            plt.savefig('../Data/' + galaxyname + '_power_law_equal_area_' +
                        repr(i + 1) + '.png')
            plt.close()

    return [distance, inclination]
예제 #13
0
def param(galaxyname, data, r_nuc=0):
    # This is a module that will plot graphs of the clouds' virial parameter, surface density,
    # and linewidth on a one-parsec scale to its galactocentric radius.

    # import the libraries that are needed.
    from scipy import stats as sps
    from galaxies import Galaxy
    from astropy.table import Table
    import numpy as np
    import astropy.units as u
    import matplotlib.pyplot as plt
    import matplotlib as mpl

    # Load all of the data.
    gxy = Galaxy(galaxyname)
    cpropstable = Table.read(data)

    # Extract different data set
    lw = cpropstable['VRMS_EXTRAP']
    xval = cpropstable['XPOS']
    yval = cpropstable['YPOS']
    vmass = cpropstable['VIRMASS_EXTRAP_DECONV']
    mass = cpropstable['MASS_EXTRAP']
    radrms = cpropstable['RADRMS_EXTRAP_DECONV']
    rgal = gxy.radius(ra=xval, dec=yval)
    rgal = rgal.to(u.kpc)

    # Sort the masses according to galactocentric radius.
    i_sorted = np.argsort(rgal)
    rgal_sorted = np.asarray(rgal[i_sorted])
    mass_sorted = np.asarray(mass[i_sorted])

    # Calculate the virial parameter, surface density, and linewidth on a one-parsec scale.
    alpha = vmass / mass
    sigma = mass / (radrms**2)
    lwo = lw / ((radrms)**0.5)

    # Initialize the arrays to extract the glactic disk cloud properties.
    rad_sorted = radrms[i_sorted]
    alpha_sorted = np.log10(alpha[i_sorted])
    sigma_sorted = np.log10(sigma[i_sorted])
    lwo_sorted = np.log10(lwo[i_sorted])
    #lwo_sorted = lwo[i_sorted]
    lw_sorted = lw[i_sorted]
    mass_disk = []  #mass of each disk GMC
    rad_disk = []  #radius of each disk GMC
    alpha_disk = []  #virial parameter of each disk GMC
    sigma_disk = []  #suface density of each disk GMC
    lwo_disk = []  #normalized linewidth of each disk GMC
    lw_disk = []  #linewidth of each disk GMC

    # Create a loop to extract the galactic disk GMC properties.
    for i in range(len(mass_sorted)):
        if rgal_sorted[i] > r_nuc:
            if not np.isnan(alpha_sorted[i]) and not np.isnan(
                    sigma_sorted[i]) and not np.isnan(
                        lwo_sorted[i]) and not np.isnan(lw_sorted[i]):
                mass_disk = np.append(mass_disk, mass_sorted[i])
                rad_disk = np.append(rad_disk, rad_sorted[i])
                alpha_disk = np.append(alpha_disk, alpha_sorted[i])
                sigma_disk = np.append(sigma_disk, sigma_sorted[i])
                lwo_disk = np.append(lwo_disk, lwo_sorted[i])
                lw_disk = np.append(lw_disk, lw_sorted[i])

    # Separate the data into bins, then calculate the mean values.
    binaxis = [0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5]
    bin_means, bin_edges, binnumber = sps.binned_statistic(
        rgal,
        mass,
        statistic='mean',
        bins=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
    bin_medians, bin_edges, binnumber = sps.binned_statistic(
        rgal,
        mass,
        statistic='median',
        bins=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
    lwo_medians, bin_edges, binnumber = sps.binned_statistic(
        rgal,
        lwo,
        statistic=np.nanmedian,
        bins=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
    alpha_medians, bin_edges, binnumber = sps.binned_statistic(
        rgal,
        alpha,
        statistic=np.nanmedian,
        bins=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
    sigma_medians, bin_edges, binnumber = sps.binned_statistic(
        rgal,
        sigma,
        statistic=np.nanmedian,
        bins=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])

    # Plot the parameters with respect to the galactocentric radius.
    figure1 = plt.figure(figsize=(15, 5))

    ax = plt.subplot(1, 3, 1)
    l1 = plt.plot(rgal, alpha)
    plt.yscale('log')
    plt.setp(l1,
             marker='D',
             markersize=5,
             linestyle='None',
             color='b',
             label='GMC',
             alpha=0.7)
    plt.errorbar(binaxis,
                 alpha_medians,
                 xerr=0.5,
                 linestyle='None',
                 marker='o',
                 color='k',
                 lw=5,
                 alpha=0.7,
                 label='Median')
    plt.legend(loc=0)
    mpl.rc('xtick', labelsize=16)
    mpl.rc('ytick', labelsize=16)
    plt.text(0.5,
             0.99,
             '(a)',
             ha='center',
             va='top',
             transform=ax.transAxes,
             fontsize=16)
    plt.xlabel(r'$R_g\ (\mathrm{kpc})$', fontsize=20)
    plt.ylabel(r'$\alpha$', fontsize=20)
    #plt.title('(a)',fontsize=20)

    ax = plt.subplot(1, 3, 2)
    l1 = plt.plot(rgal, sigma)
    plt.yscale('log')
    plt.setp(l1,
             marker='D',
             markersize=5,
             linestyle='None',
             color='b',
             label='GMC',
             alpha=0.7)
    plt.errorbar(binaxis,
                 sigma_medians,
                 xerr=0.5,
                 linestyle='None',
                 marker='o',
                 color='k',
                 lw=5,
                 alpha=0.7,
                 label='Median')
    plt.legend(loc=0)
    mpl.rc('xtick', labelsize=16)
    mpl.rc('ytick', labelsize=16)
    plt.text(0.5,
             0.99,
             '(b)',
             ha='center',
             va='top',
             transform=ax.transAxes,
             fontsize=16)
    plt.xlabel(r'$R_g\ (\mathrm{kpc})$', fontsize=20)
    plt.ylabel(r'$\Sigma\ (\frac{M_\mathrm{\odot}}{\mathrm{pc}^{2}})$',
               fontsize=20)
    #plt.title('(b)',fontsize=20)

    ax = plt.subplot(1, 3, 3)
    l1 = plt.plot(rgal, lwo)
    plt.setp(l1,
             marker='D',
             markersize=5,
             linestyle='None',
             color='b',
             label='GMC',
             alpha=0.7)
    plt.errorbar(binaxis,
                 lwo_medians,
                 xerr=0.5,
                 linestyle='None',
                 marker='o',
                 color='k',
                 lw=5,
                 alpha=0.7,
                 label='Median')
    plt.legend(loc=0)
    mpl.rc('xtick', labelsize=16)
    mpl.rc('ytick', labelsize=16)
    plt.text(0.5,
             0.99,
             '(c)',
             ha='center',
             va='top',
             transform=ax.transAxes,
             fontsize=16)
    plt.xlabel(r'$R_g\ (\mathrm{kpc})$', fontsize=20)
    plt.ylabel(r'$\sigma_{0}\ (\frac{\mathrm{km}}{\mathrm{s}})$', fontsize=20)
    #plt.title('(c)',fontsize=20)

    plt.tight_layout()
    plt.savefig('../Parameters/' + galaxyname + '_param.png')
    plt.close()

    # Make a figure of the median mass for a given radius.
    figure2 = plt.figure(figsize=(8, 8))

    plt.errorbar(binaxis,
                 bin_means,
                 xerr=0.5,
                 linestyle='None',
                 marker='D',
                 color='b',
                 label='Mean',
                 alpha=0.7)
    plt.errorbar(binaxis,
                 bin_medians,
                 xerr=0.5,
                 linestyle='None',
                 marker='D',
                 color='g',
                 label='Median',
                 alpha=0.7)
    plt.yscale('log')
    plt.legend(loc=0)
    mpl.rc('xtick', labelsize=16)
    mpl.rc('ytick', labelsize=16)
    plt.xlabel(r'$R\ (\mathrm{kpc})$', fontsize=20)
    plt.ylabel(r'$M_{\mathrm{lum}}\ (M_{\odot})$', fontsize=20)
    #plt.title('GMC Mass Distribution in '+galaxyname,fontsize=20)

    plt.tight_layout()
    plt.savefig('../Parameters/' + galaxyname + '_dist.png')
    plt.close()

    return [mass_disk, rad_disk, alpha_disk, sigma_disk, lwo_disk, lw_disk]
#Luminous Mass best fit line
M_lum = 2000*np.power(np.power(M_vir/39,1.234567901)/130,0.8)

#Sigma_0, Mass Density, R_gal
sigma0 = mytable['VRMS_EXTRAP_DECONV']/np.sqrt(mytable['RADRMS_EXTRAP_DECONV'])  
M_den = mytable['MASS_EXTRAP']/(np.pi*np.power(mytable['RADRMS_EXTRAP_DECONV'],2)) 

#Surface density derived from radarea instead of radrms
high_Mden = np.where(M_den > 1000)
den_check = mytable['MASS_EXTRAP']/(np.pi*np.power(mytable['RADAREA_DECONV'],2))
test = [40,44,94,104] # Marks the arm cloud that moves to a higher density

#galactocentric radii
mygalaxy = Galaxy("M100")
cpropstable = Table.read('m100.co10.kkms_props_cprops_subsets_improved.fits')
x, y = mygalaxy.radius(ra = mytable['XPOS'], dec = mytable['YPOS'], returnXY = True)
rgal=mygalaxy.radius(ra = cpropstable['XPOS'], dec = cpropstable['YPOS'])

#indexes for low R_gal group 
index = np.where(rgal.value < 1100)	
centre_in = np.where(mytable['Nuclear'] == True)
arm_in = np.where(mytable['Arms'] == True)	
interarm_in = np.where(mytable['Interarm'] == True)
outliers = np.where(mytable['Outliers'] == True)

#Area of each region in kpc2 sr kpc^2 as found by region_areas.py 
area_arm = 99.0712520445
area_interarm = 106.465208911
area_nuc = 4.20965755925

예제 #15
0
파일: m83plots.py 프로젝트: pafreema/m83
import astropy
import astropy.table
import numpy as np
from astropy.table import Table, Column
import matplotlib.pyplot as plt
from galaxies import Galaxy
import astropy.units as u

mygalaxy = Galaxy("M83")

# load the file
mytable = Table.read("/home/pafreema/Documents/m83.co10.K_props_cprops.fits")
# note that matplotlib understands LaTeX math in the code m

rgal = mygalaxy.radius(ra=(mytable["XPOS"]), dec=(mytable["YPOS"]))
colrgal = Column(name="RADIUS_PC", data=(rgal))
mytable.add_column(colrgal)

idx = np.where(np.isfinite(mytable["VIRMASS_EXTRAP_DECONV"]))  # removes values that are infinite/NaN

m, b = np.polyfit(np.log(mytable["MASS_EXTRAP"][idx]), np.log(mytable["VIRMASS_EXTRAP_DECONV"][idx]), 1)
figure = plt.figure(figsize=(4.5, 4))  # figure size in inches
plt.scatter(mytable["MASS_EXTRAP"], mytable["VIRMASS_EXTRAP_DECONV"], c=mytable["RADIUS_PC"], marker="s")
test_mass = np.logspace(5, 9, 100)
plt.plot(test_mass, np.exp(m * np.log(test_mass) + b))  # fit line for m83
plt.plot(test_mass, test_mass, alpha=0.5, linewidth=2)  # fitted x=y
plt.xlabel(r"$M_{\mathrm{lum}}\ (M_{\odot})$")
plt.ylabel(r"$M_{\mathrm{vir}}\ (M_{\odot})$")
plt.axis([10e4, 10e7, 10e3, 10e7])
plt.colorbar(label="$R_{gal}\ (pc)$")
예제 #16
0
import astropy.units as u
from spectral_cube import SpectralCube
from galaxies import Galaxy

from pandas import DataFrame, read_csv
import pandas as pd
import statsmodels.formula.api as smf

# Calculate line width, sigma; and surface density, Sigma.
alpha = 6.7
sigma = I_mom0 / (np.sqrt(2*np.pi * I_max))
Sigma = alpha*I_mom0
# Importing radius of each data point.
gal = Galaxy('NGC1672')
hdr = fits.getheader('ngc1672_co21_12m+7m+tp_mom0.fits')
rad = gal.radius(header=hdr)
rad = (rad * u.Mpc.to(u.kpc)) * u.kpc / u.Mpc           # Converts rad from Mpc to kpc.
# Calculating width of each pixel, in parsecs.
pixsizes_deg = wcs.utils.proj_plane_pixel_scales(wcs.WCS(hdr))     # The size of each pixel, in degrees. Ignore that third dimension; that's pixel size for the speed.
pixsizes = pixsizes_deg[0] * np.pi / 180.                          # Pixel size, in radians.
pcperpixel =  pixsizes*d      					   # Number of parsecs per pixel.
pcperdeg = pcperpixel / pixsizes_deg[0]                            # Number of parsecs per degree.

# Getting beam width, in degrees and parsecs.
beam = hdr['BMAJ']                                      # Beam size, in degrees
beam = beam * pcperdeg                                  # Beam size, in pc

# Import data from .fits files.
I_mom0 = fits.getdata('ngc1672_co21_12m+7m+tp_mom0.fits')      # Mass density at each pixel.
I_mom1 = fits.getdata('ngc1672_co21_12m+7m+tp_mom1.fits')      # Intensity-weighted mean velocity of data, in km/s.
I_max = fits.getdata('ngc1672_co21_12m+7m+tp_tpeak.fits')      # Line-integrated intensity (in K*km/s).
예제 #17
0
import astropy
import astropy.table
import numpy as np
from astropy.table import Table
from astropy.table import Column
import matplotlib.pyplot as plt
import powerlaw
from galaxies import Galaxy
import astropy.units as u

mygalaxy = Galaxy("M83")
print(mygalaxy)

t = Table.read("/home/pafreema/Documents/m83.co10.K_props_cprops.fits")

rgal = mygalaxy.radius(ra=(t["XPOS"]), dec=(t["YPOS"]))

colrgal = Column(name="RADIUS_PC", data=(rgal))
t.add_column(colrgal)
# print(t)

# fit for the whole galaxy
mass = t["MASS_EXTRAP"].data  # pulls out the mass variable
myfit = powerlaw.Fit(mass)

idxnuc = np.where(t["RADIUS_PC"] < 1000)
idxmass = np.where((t["MASS_EXTRAP"] > 3e5) & (t["RADIUS_PC"] < 1000))
massnuc = t["MASS_EXTRAP"][idxnuc].data
massnuc_subset = t["MASS_EXTRAP"][idxmass].data
fit = powerlaw.Fit(massnuc)
fit_subset = powerlaw.Fit(massnuc_subset, xmin=3e5)