Example #1
0
def PlotDR8urHa(output, out_folder):
    query = '''select d.petroMag_u - d.petroMag_r,
               d.petroMagErr_u*d.petroMagErr_u + d.petroMagErr_r*d.petroMagErr_r,
               d.h_alpha_flux, d.h_alpha_flux_err
               from observations as o, RESOLVEmasterfile as r, dr8data as d
               where o.flag = "C" and
               d.petroMagErr_r < 5 and
               d.petroMagErr_u < 5 and
               o.name = r.name and
               r.dr8specobjid = d.specobjid'''
    data = sq.get_data_sqliteSMNfunctions(path, db, query)
    xcomp = data[:, 0]
    xcomperr = np.sqrt(data[:, 1])
    ycomp = data[:, 2]
    ycomperr = data[:, 3]

    query = '''select d.petroMag_u - d.petroMag_r,
               d.petroMagErr_u*d.petroMagErr_u + d.petroMagErr_r*d.petroMagErr_r,
               d.h_alpha_flux, d.h_alpha_flux_err
               from observations as o, RESOLVEmasterfile as r, dr8data as d
               where o.flag = "TS" and
               d.petroMagErr_r < 5 and
               d.petroMagErr_u < 5 and
               o.name = r.name and
               r.dr8specobjid = d.specobjid'''

    data = sq.get_data_sqliteSMNfunctions(path, db, query)
    xsalt = data[:, 0]
    xsalterr = np.sqrt(data[:, 1])
    ysalt = data[:, 2]
    ysalterr = data[:, 3]

    #make the figure
    fig = P.figure()
    ax1 = fig.add_subplot(111)

    ax1.errorbar(xcomp, ycomp, xerr=xcomperr, yerr=ycomperr, ls='None', c='b',
                 marker='s', ms=3, label='Completed (C)')
    ax1.errorbar(xsalt, ysalt, xerr=xsalterr, yerr=ysalterr, ls='None', c='r',
                 marker='o', ms=3, label='SALT? (TS)')

    ax1.set_xlabel(r'U - r from DR8 [mag]')
    ax1.set_ylabel(r'$H_{\alpha}$ [1e-17 erg/s/cm$^{2}$]')

    ax1.set_yscale('log')
    ax1.set_ylim(2, 1e4)
    ax1.set_xlim(0.5, 3.0)

    P.legend(shadow=True, fancybox=True, numpoints=1)
    P.savefig(out_folder + output)
Example #2
0
def PlotDR8ug(output, out_folder):
    query = '''select d.petroMag_u - d.petroMag_g,
               d.petroMagErr_u*d.petroMagErr_u + d.petroMagErr_g*d.petroMagErr_g, sum(k.exptime)
               from kindata as k, observations as o, RESOLVEmasterfile as r, dr8data as d
               where o.flag = "C" and
               d.petroMagErr_g < 5 and
               d.petroMagErr_u < 5 and
               k.paflag = 1 and k.obsshift = "Z" and
               k.name = o.name and
               k.name = r.name and
               r.dr8specobjid = d.specobjid
               group by k.name'''
    data = sq.get_data_sqliteSMNfunctions(path, db, query)
    xcomp = data[:, 0]
    xcomperr = np.sqrt(data[:, 1])
    ycomp = data[:, 2]

    query = '''select d.petroMag_u - d.petroMag_g,
               d.petroMagErr_u*d.petroMagErr_u + d.petroMagErr_g*d.petroMagErr_g, sum(k.exptime)
               from kindata as k, observations as o, RESOLVEmasterfile as r, dr8data as d
               where o.flag = "TS" and
               d.petroMagErr_g < 5 and
               d.petroMagErr_u < 5 and
               k.paflag = 1 and k.obsshift = "Z" and
               k.name = o.name and
               k.name = r.name and
               r.dr8specobjid = d.specobjid
               group by k.name'''

    data = sq.get_data_sqliteSMNfunctions(path, db, query)
    xsalt = data[:, 0]
    xsalterr = np.sqrt(data[:, 1])
    ysalt = data[:, 2]

    #make the figure
    fig = P.figure()
    ax1 = fig.add_subplot(111)

    ax1.errorbar(xcomp, ycomp, xerr=xcomperr, ls='None', c='b',
                 marker='s', ms=3, label='Completed (C)')
    ax1.errorbar(xsalt, ysalt, xerr=xsalterr, ls='None', c='r',
                 marker='o', ms=3, label='SALT? (TS)')

    ax1.set_xlabel(r'U - g from DR8 [mag]')
    ax1.set_ylabel(r'EXPTIME [min]')

    ax1.set_xlim(0.5, 2.5)

    P.legend(shadow=True, fancybox=True, numpoints=1)
    P.savefig(out_folder + output)
Example #3
0
def _getAndProcessData(home, outfile='SubDists2.pkl'):
    """
    Retrieve data.
    """
    path = home + '/Research/CANDELS/v2s/'
    db = 'sams.db'

    #SQL query where all the magic happens.. or doesn't
    query = """select l1.redshift, l1.ra, l1.dec, l1.halo_id, l1.gal_id, l1.mhalo from testing l1
               inner join
               (
               select l2.halo_id, l2.gal_id from testing l2 where
               l2.halo_id in (select halo_id from testing group by halo_id having count(*) > 1)
               intersect
               select l3.halo_id, l3.gal_id from testing l3
               group by l3.halo_id, l3.gal_id having count(*) == 1
               )
               using (halo_id, gal_id) where
               l1.redshift > 0.1 and
               l1.redshift < 6.0
               """

    #pull out data
    data = sq.get_data_sqliteSMNfunctions(path, db, query)

    #group data
    grouped = _findValues(data)

    #dump it to a picked file
    wr.cPickleDumpDictionary(grouped, outfile)

    return grouped
def grR23(output, out_folder):
    query = '''select d.petroMag_g - d.petroMag_r,
               d.petroMagErr_g*d.petroMagErr_g + d.petroMagErr_r*d.petroMagErr_r,
               (d.oii_3726_flux + d.oiii_4959_flux + d.oiii_5007_flux)/d.h_beta_flux
               from dr8data as d  where
               d.petroMagErr_r > 0 and d.petroMagErr_r < 0.2 and
               d.petroMagErr_g > 0 and d.petroMagErr_g < 0.2 and
               d.oii_3726_flux > 0 and d.oiii_4959_flux > 0 and
               d.oiii_5007_flux > 0 and d.h_beta_flux > 0 and
               d.oii_3726_flux < 1e6 and d.oiii_4959_flux < 1e6 and
               d.oiii_5007_flux < 1e6 and d.h_beta_flux < 1e6'''
    data = sq.get_data_sqliteSMNfunctions(path, db, query)
    x = data[:, 0]
    xerr = np.sqrt(data[:, 1])
    y = np.log10(data[:, 2])
    #yerr = data[:, 3]

    #make the figure
    fig = P.figure()
    ax1 = fig.add_subplot(111)

    ax1.errorbar(y, x, yerr=xerr, ls='None', c='r', marker='o', ms=1.5)

    ax1.set_ylabel(r'g - r')
    ax1.set_xlabel(r'log (R$_{23}$)')

    P.savefig(out_folder + output)
def grmetallicity(output, out_folder):
    query = '''select d.petroMag_g - d.petroMag_r,
               d.petroMagErr_g*d.petroMagErr_g + d.petroMagErr_r*d.petroMagErr_r,
               (d.oii_3726_flux + d.oiii_4959_flux + d.oiii_5007_flux)/d.h_beta_flux
               from dr8data as d  where
               d.petroMagErr_r > 0 and d.petroMagErr_r < 0.15 and
               d.petroMagErr_g > 0 and d.petroMagErr_g < 0.15 and
               d.oii_3726_flux > 0 and d.oiii_4959_flux > 0 and
               d.oiii_5007_flux > 0 and d.h_beta_flux > 0 and
               d.oii_3726_flux < 1e7 and d.oiii_4959_flux < 1e7 and
               d.oiii_5007_flux < 1e7 and d.h_beta_flux < 1e7'''
    data = sq.get_data_sqliteSMNfunctions(path, db, query)
    x = data[:, 0]
    xerr = np.sqrt(data[:, 1])
    y = np.log10(data[:, 2])
    #from Tremonti et al. 2004, ApJ, 613, 898
    met = 9.185 - 0.313 * y - -0.264 * y**2 - 0.321 * y**3

    #make the figure
    fig = P.figure()
    ax1 = fig.add_subplot(111)

    ax1.errorbar(x, met, xerr=xerr, ls='None', c='r', marker='o', ms=1.5)

    ax1.set_xlabel(r'g - r')
    ax1.set_ylabel(r'12 + log(O/H)')

    ax1.set_ylim(6.8, 9.4)
    ax1.set_xlim(0.0, 1.1)

    P.savefig(out_folder + output)
def NUVgHa(output, out_folder):
    query = '''select g.nuv_mag - d.petroMag_r,
               g.nuv_magerr*g.nuv_magerr + d.petroMagErr_r*d.petroMagErr_r,
               d.h_alpha_flux, d.h_alpha_flux_err
               from dr8data as d, galex as g, RESOLVEmasterfile as r where
               d.h_alpha_flux_err > 0 and  d.h_alpha_flux_err < 1e2 and
               g.nuv_magerr > 0 and g.nuv_magerr < 2 and d.petroMagErr_r > 0 and
               d.petroMagErr_r < 2 and
               r.dr8specobjid = d.specobjid and r.dr7objid = g.sdssid'''
    data = sq.get_data_sqliteSMNfunctions(path, db, query)
    x = data[:, 0]
    xerr = np.sqrt(data[:, 1])
    y = data[:, 2]
    yerr = data[:, 3]

    #make the figure
    fig = P.figure()
    ax1 = fig.add_subplot(111)

    ax1.errorbar(x,
                 y,
                 xerr=xerr,
                 yerr=yerr,
                 ls='None',
                 c='r',
                 marker='o',
                 ms=1.5)

    ax1.set_xlabel(r'NUV - r')
    ax1.set_ylabel(r'$H_{\alpha}$ [1e-17 erg/s/cm$^{2}$/AA]')

    ax1.set_yscale('log')

    P.savefig(out_folder + output)
def grHa(output, out_folder):
    query = '''select d.petroMag_g - d.petroMag_r,
               d.petroMagErr_g*d.petroMagErr_g + d.petroMagErr_r*d.petroMagErr_r,
               d.h_alpha_flux, d.h_alpha_flux_err
               from dr8data as d  where
               d.h_alpha_flux_err > 0 and  d.h_alpha_flux_err < 1e2 and
               d.petroMagErr_r > 0 and d.petroMagErr_r < 0.1 and
               d.petroMagErr_g > 0 and d.petroMagErr_g < 0.1'''
    data = sq.get_data_sqliteSMNfunctions(path, db, query)
    x = data[:, 0]
    xerr = np.sqrt(data[:, 1])
    y = data[:, 2]
    yerr = data[:, 3]

    #make the figure
    fig = P.figure()
    ax1 = fig.add_subplot(111)

    ax1.errorbar(x,
                 y,
                 xerr=xerr,
                 yerr=yerr,
                 ls='None',
                 c='r',
                 marker='o',
                 ms=1.5)

    ax1.set_xlabel(r'g - r')
    ax1.set_ylabel(r'$H_{\alpha}$ [1e-17 erg/s/cm$^{2}$/AA]')

    ax1.set_yscale('log')
    ax1.set_xlim(-0.1, 1.8)

    P.savefig(out_folder + output)
Example #8
0
def PlotDR8ug50u(output, out_folder):
    query = '''select d.petroR50_u - d.petroR50_g,
               d.petroR50Err_u*d.petroR50Err_u* + d.petroR50Err_g*d.petroR50Err_g,
               d.petroMag_u,  d.petroMagErr_u
               from observations as o, RESOLVEmasterfile as r, dr8data as d
               where o.flag = "C" and
               o.name = r.name and
               petroR50Err_u > 0 and petroR50Err_r > 0 and d.petroMagErr_u < 5 and
               r.dr8specobjid = d.specobjid'''
    data = sq.get_data_sqliteSMNfunctions(path, db, query)
    xcomp = data[:, 0]
    xcomperr = np.sqrt(data[:, 1])
    ycomp = data[:, 2]
    ycomperr = data[:, 3]

    query = '''select d.petroR50_u - d.petroR50_g,
               d.petroR50Err_u*d.petroR50Err_u* + d.petroR50Err_g*d.petroR50Err_g,
               d.petroMag_u,  d.petroMagErr_u
               from observations as o, RESOLVEmasterfile as r, dr8data as d
               where o.flag = "TS" and
               o.name = r.name and
               petroR50Err_u > 0 and petroR50Err_r > 0 and d.petroMagErr_u < 5 and
               r.dr8specobjid = d.specobjid'''

    data = sq.get_data_sqliteSMNfunctions(path, db, query)
    xsalt = data[:, 0]
    xsalterr = np.sqrt(data[:, 1])
    ysalt = data[:, 2]
    ysalterr = data[:, 3]

    #make the figure
    fig = P.figure()
    ax1 = fig.add_subplot(111)

    ax1.errorbar(xcomp, ycomp, xerr=xcomperr, yerr=ycomperr, ls='None', c='b',
                 marker='s', ms=3, label='Completed (C)')
    ax1.errorbar(xsalt, ysalt, xerr=xsalterr, yerr=ysalterr, ls='None', c='r',
                 marker='o', ms=3, label='SALT? (TS)')

    ax1.set_xlabel(r'R50u - R50r from DR8 [arcsec]')
    ax1.set_ylabel(r'u [mag]')

    #ax1.set_ylim(0, 30)
    ax1.set_xlim(-5, 10)

    P.legend(shadow=True, fancybox=True, numpoints=1)
    P.savefig(out_folder + output)
Example #9
0
def PlotGALEXNUV(output, out_folder):
    query = '''select g.nuv_mag, g.nuv_magerr, sum(k.exptime)
               from kindata as k, observations as o, RESOLVEmasterfile as r, galex as g, galex_distinct as gt
               where o.flag = "C" and
               k.paflag = 1 and k.obsshift = "Z" and
               k.name = o.name and k.name = r.name and
               r.dr7objid = gt.sdssid and
               gt.sdssid = g.sdssid
               group by k.name'''
    data = sq.get_data_sqliteSMNfunctions(path, db, query)
    xcomp = data[:, 0]
    ycomp = data[:, 2]
    xcomperr = data[:, 1]

    query = '''select g.nuv_mag, g.nuv_magerr, sum(k.exptime)
               from kindata as k, observations as o, RESOLVEmasterfile as r, galex as g, galex_distinct as gt
               where o.flag = "TS" and
               k.paflag = 1 and k.obsshift = "Z" and
               k.name = o.name and k.name = r.name and
               r.dr7objid = gt.sdssid and
               gt.sdssid = g.sdssid
               group by k.name'''
    data = sq.get_data_sqliteSMNfunctions(path, db, query)
    xsalt = data[:, 0]
    ysalt = data[:, 2]
    xsalterr = data[:, 1]

    #make the figure
    fig = P.figure()
    fig.subplots_adjust(left=0.09, bottom=0.08,
                        right=0.93, top=0.95,
                        wspace=0.0, hspace=0.0)
    ax1 = fig.add_subplot(111)

    ax1.errorbar(xcomp, ycomp, xerr=xcomperr, ls='None', c='b',
                 marker='s', ms=3, label='Completed (C)')
    ax1.errorbar(xsalt, ysalt, xerr=xsalterr, ls='None', c='r',
                 marker='o', ms=3, label='SALT? (TS)')

    ax1.set_xlabel(r'GALEX NUV [mag]')
    ax1.set_ylabel(r'EXPTIME [min]')

    ax1.set_ylim(5, 85)

    P.legend(shadow=True, fancybox=True, numpoints=1)
    P.savefig(out_folder + output)
Example #10
0
def PlotHaflux(output, out_folder):
    query = '''select d.h_alpha_flux, d.h_alpha_flux_err, sum(k.exptime)
               from kindata as k, observations as o, RESOLVEmasterfile as r, dr8data as d
               where o.flag = "C" and
               k.paflag = 1 and k.obsshift = "Z" and
               k.name = o.name and
               k.name = r.name and
               r.dr8specobjid = d.specobjid
               group by k.name'''
    data = sq.get_data_sqliteSMNfunctions(path, db, query)
    xcomp = data[:, 0]
    xcomperr = data[:, 1]
    ycomp = data[:, 2]

    query = '''select d.h_alpha_flux, d.h_alpha_flux_err, sum(k.exptime)
               from kindata as k, observations as o, RESOLVEmasterfile as r, dr8data as d
               where o.flag = "TS" and
               k.paflag = 1 and k.obsshift = "Z" and
               k.name = o.name and
               k.name = r.name and
               r.dr8specobjid = d.specobjid
               group by k.name'''

    data = sq.get_data_sqliteSMNfunctions(path, db, query)
    xsalt = data[:, 0]
    xsalterr = data[:, 1]
    ysalt = data[:, 2]

    #make the figure
    fig = P.figure()
    ax1 = fig.add_subplot(111)

    ax1.errorbar(xcomp, ycomp, xerr=xcomperr, ls='None', c='b',
                 marker='s', ms=3, label='Completed (C)')
    ax1.errorbar(xsalt, ysalt, xerr=xsalterr, ls='None', c='r',
                 marker='o', ms=3, label='SALT? (TS)')

    ax1.set_xlabel(r'$H_{\alpha}$ [1e-17 erg/s/cm$^{2}$]')
    ax1.set_ylabel(r'EXPTIME [min]')

    ax1.set_xscale('log')
    ax1.set_xlim(5, 1e4)

    P.legend(shadow=True, fancybox=True, numpoints=1)
    P.savefig(out_folder + output)
Example #11
0
def getIds(column, database='catalogs.db'):
    """
    Recover ids from RESOLVEmasterfile table.

    :param column: name of the id column
    :type column: string
    :param database: name of the SQLite3 database file
    :type database: string

    :return: ids
    :rtype: ndarray
    """
    query = 'SELECT %s from RESOLVEmasterfile where %s > 0' % (column, column)
    data = sq.get_data_sqliteSMNfunctions('./', database, query, toNumpy=False)
    return data
Example #12
0
def getIds(column, database='catalogs.db'):
    """
    Recover ids from RESOLVEmasterfile table.

    :param column: name of the id column
    :type column: string
    :param database: name of the SQLite3 database file
    :type database: string

    :return: ids
    :rtype: ndarray
    """
    query = 'SELECT %s from RESOLVEmasterfile where %s > 0' % (column, column)
    data = sq.get_data_sqliteSMNfunctions('./', database, query, toNumpy=False)
    return data
def simplePlot(query, xlabel, ylabel, output, out_folder):
    #get data, all galaxies
    data = sq.get_data_sqliteSMNfunctions(path, db, query)
    col = data[:, 0]
    ew = data[:, 1]
    ewerr = data[:, 2]

    #make the figure
    fig = P.figure()
    fig.subplots_adjust(left=0.09,
                        bottom=0.08,
                        right=0.93,
                        top=0.95,
                        wspace=0.0,
                        hspace=0.0)
    ax1 = fig.add_subplot(111)

    ax1.errorbar(col, ew, yerr=ewerr, ls='None', marker='s', ms=2)

    ax1.set_xlabel(xlabel)
    ax1.set_ylabel(ylabel)

    P.savefig(out_folder + output)
Example #14
0
def quickTest(id=1242422,
              output='SingleHalo.pdf',
              db='database.db',
              path='/Users/sammy/Research/CANDELS/v2/'):
    """
    A single halo test.

    :param id: halo_id of the testable dark matter halo
    :type id: int
    :param output: name of the output file
    :type output: string
    :param db: name of the SQLite database file
    :type db: string
    :param path: full path of the database file
    :type path: string

    :return: None
    """
    #pull out data
    query = 'select redshift, ra, dec, mhalo, rhalo from lcone where halo_id = {0:d}'.format(
        id)
    data = sq.get_data_sqliteSMNfunctions(path, db, query)

    #redshift
    z = data[0, 0]

    #calculate the separations
    inp = dict(RA1=data[0, 1],
               DEC1=data[0, 2],
               RA2=data[1:, 1],
               DEC2=data[1:, 2])
    result = conv.physicalSeparation(inp, z)
    print result

    #make a plot
    text = r'halo\_id=%i, z=%.3f, mass=%.2f, scale=%.3f' % (id, z, data[0, 3],
                                                            result['scale'])

    P.figure(figsize=(12, 12))
    ax1 = P.subplot(221)
    ax2 = P.subplot(222)
    ax3 = P.subplot(223)
    ax4 = P.subplot(224)

    ax1.hist(result['distance'] / (1e3 * data[0, 4]), bins=12)
    ax2.hist(result['distance'], bins=12)

    RAs, DECs = (inp['RA2'] - inp['RA1']) * 1e4, (inp['DEC2'] -
                                                  inp['DEC1']) * 1e4
    ax3.scatter(RAs, DECs, c='b', s=100, marker='o', alpha=0.45)
    ax3.scatter(0, 0, c='k', s=120, marker='s')

    s4 = ax4.scatter(RAs,
                     DECs,
                     c=data[1:, 3],
                     s=80,
                     marker='o',
                     alpha=0.6,
                     cmap=cm.get_cmap('jet'),
                     vmin=9.5,
                     vmax=11.0)
    ax4.scatter(0, 0, c='k', s=120, marker='s')

    inset_axes = inset_locator.inset_axes(ax4,
                                          width='80%',
                                          height='1.5%',
                                          loc=9)
    c = P.colorbar(s4, cax=inset_axes, orientation='horizontal')
    c.set_label(r'$\log_{10} \left( M_{dm} [\mathrm{M}_{\odot}] \right )$',
                fontsize=13)
    for j in c.ax.get_xticklabels():
        j.set_fontsize(12)

    ax1.set_xlabel(r'Projected Distance / Radius of the Main Halo')
    ax2.set_xlabel(r'Projected Distance [kpc]')
    ax3.set_xlabel(r'$\Delta$RA [$10^{-4}$ deg]')
    ax4.set_xlabel(r'$\Delta$RA [$10^{-4}$ deg]')
    ax3.set_ylabel(r'$\Delta$DEC [$10^{-4}$ deg]')

    P.annotate(text, (0.5, 0.95),
               xycoords='figure fraction',
               ha='center',
               va='center',
               fontsize=12)

    P.savefig(output)
Example #15
0
def plotMergerFractionsMultiplot2(query,
                                  xlabel,
                                  ylabel,
                                  output,
                                  out_folder,
                                  mergetimelimit=0.25,
                                  ymin=-0.1,
                                  ymax=1.1,
                                  xmin=-1.9,
                                  xmax=4.15,
                                  xbins=80,
                                  ybins=80,
                                  title='Simulated Galaxies',
                                  size=4.5,
                                  alpha=0.2):
    #get data, all galaxies
    """
    Plots merger fraction
    """
    data = sq.get_data_sqliteSMNfunctions(path, db, query)
    x = data[:, 0]
    f775w = data[:, 1]
    f850lp = data[:, 2]
    uvcolor = f775w - f850lp
    tmerge = data[:, 3]
    tmajor = data[:, 4]

    #masks for simulated galaxies
    nomergeMask = tmerge < 0.0
    majorsMask = (tmajor > 0.0) & (tmajor <= mergetimelimit)
    majorsMask2 = (tmajor > mergetimelimit)
    mergersMask = (tmerge > 0.0) & (tmerge <= mergetimelimit) &\
                  (majorsMask == False) & (majorsMask2 == False)
    mergersMask2 = (nomergeMask == False) & (majorsMask == False) &\
                   (mergersMask == False) & (majorsMask2 == False)

    #KDE
    mu = M.AnaKDE([N.log10(x[nomergeMask]), uvcolor[nomergeMask]])
    x_vec, y_vec, zm, lvls, d0, d1 = mu.contour(N.linspace(xmin, xmax, xbins),
                                                N.linspace(ymin, ymax, ybins),
                                                return_data=True)
    #make the figure
    #fig = P.figure()
    fig = P.figure(figsize=(10, 10))
    fig.subplots_adjust(left=0.09,
                        bottom=0.08,
                        right=0.93,
                        top=0.95,
                        wspace=0.0,
                        hspace=0.0)
    ax1 = fig.add_subplot(211)
    ax2 = fig.add_subplot(212)
    #make contours
    lv = N.linspace(0.015, 0.95 * N.max(zm), 5)
    cont = ax1.contour(x_vec,
                       y_vec,
                       zm,
                       linewidths=0.9,
                       levels=lv,
                       colors='black')
    cont = ax2.contour(x_vec,
                       y_vec,
                       zm,
                       linewidths=0.9,
                       levels=lv,
                       colors='black')

    #plot scatters
    s2 = ax1.scatter(N.log10(x[majorsMask]),
                     uvcolor[majorsMask],
                     s=size,
                     c=1000. * tmajor[majorsMask],
                     marker='o',
                     cmap=cm.get_cmap('jet'),
                     edgecolor='none',
                     label='Major Merger: $T \leq %.0f$ Myr' %
                     (mergetimelimit * 1000.),
                     alpha=alpha)
    s2 = ax1.scatter(N.log10(x[majorsMask]),
                     uvcolor[majorsMask],
                     s=size,
                     c=1000. * tmajor[majorsMask],
                     marker='o',
                     cmap=cm.get_cmap('jet'),
                     edgecolor='none',
                     visible=False)
    s4 = ax2.scatter(N.log10(x[mergersMask]),
                     uvcolor[mergersMask],
                     s=size * 1.8,
                     c=1000. * tmerge[mergersMask],
                     marker='^',
                     cmap=cm.get_cmap('jet'),
                     edgecolor='none',
                     label='Minor Merger: $T \leq %.0f$ Myr' %
                     (mergetimelimit * 1000.),
                     alpha=alpha)
    s4 = ax2.scatter(N.log10(x[mergersMask]),
                     uvcolor[mergersMask],
                     s=size * 1.8,
                     c=1000. * tmerge[mergersMask],
                     marker='^',
                     cmap=cm.get_cmap('jet'),
                     edgecolor='none',
                     visible=False)

    #color bars
    c1 = fig.colorbar(s2, ax=ax1, shrink=0.7, fraction=0.05)
    c2 = fig.colorbar(s4, ax=ax2, shrink=0.7, fraction=0.05)
    c1.set_label('Time since latest merger [Myr]')
    c2.set_label('Time since latest merger [Myr]')
    #plot dividing line
    x = N.array([2.0, 2.5, 3.0, 4.0])
    y = x - 2.4
    ax1.plot(x, y, 'g--', lw=1.8)
    ax2.plot(x, y, 'g--', lw=1.8)

    #add annotate
    P.text(0.5,
           1.04,
           title,
           horizontalalignment='center',
           verticalalignment='center',
           transform=ax1.transAxes)
    #labels
    ax1.set_ylabel(ylabel)
    ax2.set_ylabel(ylabel)
    ax2.set_xlabel(xlabel)
    ax1.set_xticklabels([])
    #limits
    ax1.set_ylim(ymin, ymax)
    ax1.set_xlim(xmin, xmax)
    ax2.set_ylim(ymin, ymax)
    ax2.set_xlim(xmin, xmax)
    #legend and save
    ax1.legend(loc='upper left',
               scatterpoints=1,
               shadow=True,
               fancybox=True,
               markerscale=1.5)
    ax2.legend(loc='upper left',
               scatterpoints=1,
               shadow=True,
               fancybox=True,
               markerscale=1.5)
    P.savefig(out_folder + output)
Example #16
0
def plotMergerFractionsMultiplot2(query, xlabel, ylabel,
                                  output, out_folder,
                                  mergetimelimit=0.25,
                                  ymin=-0.1, ymax=1.1,
                                  xmin=-1.9, xmax=4.15,
                                  xbins=80, ybins=80,
                                  title='Simulated Galaxies',
                                  size=4.5, alpha=0.2):
    #get data, all galaxies
    """
    Plots merger fraction
    """
    data = sq.get_data_sqliteSMNfunctions(path, db, query)
    x = data[:, 0]
    f775w = data[:, 1]
    f850lp = data[:, 2]
    uvcolor = f775w - f850lp
    tmerge = data[:, 3]
    tmajor = data[:, 4]

    #masks for simulated galaxies
    nomergeMask = tmerge < 0.0
    majorsMask = (tmajor > 0.0) & (tmajor <= mergetimelimit)
    majorsMask2 = (tmajor > mergetimelimit)
    mergersMask = (tmerge > 0.0) & (tmerge <= mergetimelimit) &\
                  (majorsMask == False) & (majorsMask2 == False)
    mergersMask2 = (nomergeMask == False) & (majorsMask == False) &\
                   (mergersMask == False) & (majorsMask2 == False)

    #KDE
    mu = M.AnaKDE([N.log10(x[nomergeMask]), uvcolor[nomergeMask]])
    x_vec, y_vec, zm, lvls, d0, d1 = mu.contour(N.linspace(xmin, xmax, xbins),
                                                N.linspace(ymin, ymax, ybins),
                                                return_data=True)
    #make the figure
    #fig = P.figure()
    fig = P.figure(figsize=(10, 10))
    fig.subplots_adjust(left=0.09, bottom=0.08,
                        right=0.93, top=0.95,
                        wspace=0.0, hspace=0.0)
    ax1 = fig.add_subplot(211)
    ax2 = fig.add_subplot(212)
    #make contours
    lv = N.linspace(0.015, 0.95 * N.max(zm), 5)
    cont = ax1.contour(x_vec, y_vec, zm, linewidths=0.9,
                       levels=lv, colors='black')
    cont = ax2.contour(x_vec, y_vec, zm, linewidths=0.9,
                       levels=lv, colors='black')

    #plot scatters
    s2 = ax1.scatter(N.log10(x[majorsMask]), uvcolor[majorsMask],
                     s=size, c=1000. * tmajor[majorsMask], marker='o',
                     cmap=cm.get_cmap('jet'), edgecolor='none',
                     label='Major Merger: $T \leq %.0f$ Myr' % (mergetimelimit * 1000.),
                     alpha=alpha)
    s2 = ax1.scatter(N.log10(x[majorsMask]), uvcolor[majorsMask],
                     s=size, c=1000. * tmajor[majorsMask], marker='o',
                     cmap=cm.get_cmap('jet'), edgecolor='none',
                     visible=False)
    s4 = ax2.scatter(N.log10(x[mergersMask]), uvcolor[mergersMask],
                     s=size * 1.8, c=1000. * tmerge[mergersMask], marker='^',
                     cmap=cm.get_cmap('jet'), edgecolor='none',
                     label='Minor Merger: $T \leq %.0f$ Myr' % (mergetimelimit * 1000.),
                     alpha=alpha)
    s4 = ax2.scatter(N.log10(x[mergersMask]), uvcolor[mergersMask],
                     s=size * 1.8, c=1000. * tmerge[mergersMask], marker='^',
                     cmap=cm.get_cmap('jet'), edgecolor='none',
                     visible=False)

    #color bars
    c1 = fig.colorbar(s2, ax=ax1, shrink=0.7, fraction=0.05)
    c2 = fig.colorbar(s4, ax=ax2, shrink=0.7, fraction=0.05)
    c1.set_label('Time since latest merger [Myr]')
    c2.set_label('Time since latest merger [Myr]')
    #plot dividing line
    x = N.array([2.0, 2.5, 3.0, 4.0])
    y = x - 2.4
    ax1.plot(x, y, 'g--', lw=1.8)
    ax2.plot(x, y, 'g--', lw=1.8)

    #add annotate
    P.text(0.5, 1.04, title,
           horizontalalignment='center',
           verticalalignment='center',
           transform=ax1.transAxes)
    #labels
    ax1.set_ylabel(ylabel)
    ax2.set_ylabel(ylabel)
    ax2.set_xlabel(xlabel)
    ax1.set_xticklabels([])
    #limits
    ax1.set_ylim(ymin, ymax)
    ax1.set_xlim(xmin, xmax)
    ax2.set_ylim(ymin, ymax)
    ax2.set_xlim(xmin, xmax)
    #legend and save
    ax1.legend(loc='upper left', scatterpoints=1,
               shadow=True, fancybox=True, markerscale=1.5)
    ax2.legend(loc='upper left', scatterpoints=1,
               shadow=True, fancybox=True, markerscale=1.5)
    P.savefig(out_folder + output)
Example #17
0
def plotMergerFractionsMultiplot(query,
                                 xlabel,
                                 ylabel,
                                 output,
                                 out_folder,
                                 obs,
                                 mergetimelimit=0.25,
                                 ymin=-0.2,
                                 ymax=1.5,
                                 xmin=-1.9,
                                 xmax=4.15,
                                 xbins=80,
                                 ybins=80,
                                 title='Simulated Galaxies',
                                 size=4.5,
                                 alpha=0.2,
                                 ch=1):
    #get data, all galaxies
    data = sq.get_data_sqliteSMNfunctions(path, db, query)
    x = data[:, 0]
    f775w = data[:, 1]
    f850lp = data[:, 2]
    uvcolor = f775w - f850lp
    tmerge = data[:, 3]
    tmajor = data[:, 4]

    #masks for simulated galaxies
    nomergeMask = tmerge < 0.0
    majorsMask = (tmajor > 0.0) & (tmajor <= mergetimelimit)
    majorsMask2 = (tmajor > mergetimelimit)
    mergersMask = (tmerge > 0.0) & (tmerge <= mergetimelimit) &\
                  (majorsMask == False) & (majorsMask2 == False)
    mergersMask2 = (nomergeMask == False) & (majorsMask == False) &\
                   (mergersMask == False) & (majorsMask2 == False)

    #KDE
    mu = M.AnaKDE([N.log10(x[nomergeMask]), uvcolor[nomergeMask]])
    x_vec, y_vec, zm, lvls, d0, d1 = mu.contour(N.linspace(xmin, xmax, xbins),
                                                N.linspace(ymin, ymax, ybins),
                                                return_data=True)
    #make the figure
    #fig = P.figure()
    fig = P.figure(figsize=(10, 10))
    fig.subplots_adjust(left=0.09,
                        bottom=0.08,
                        right=0.93,
                        top=0.95,
                        wspace=0.0,
                        hspace=0.0)
    ax1 = fig.add_subplot(221)
    ax2 = fig.add_subplot(222)
    ax3 = fig.add_subplot(223)
    ax4 = fig.add_subplot(224)
    #make contours
    lv = N.linspace(0.015, 0.95 * N.max(zm), 5)
    cont = ax1.contour(x_vec,
                       y_vec,
                       zm,
                       linewidths=0.9,
                       levels=lv,
                       colors='black')
    cont = ax2.contour(x_vec,
                       y_vec,
                       zm,
                       linewidths=0.9,
                       levels=lv,
                       colors='black')
    cont = ax3.contour(x_vec,
                       y_vec,
                       zm,
                       linewidths=0.9,
                       levels=lv,
                       colors='black')
    cont = ax4.contour(x_vec,
                       y_vec,
                       zm,
                       linewidths=0.9,
                       levels=lv,
                       colors='black')

    #plot scatters
    s2 = ax2.scatter(N.log10(x[majorsMask]),
                     uvcolor[majorsMask],
                     s=size,
                     c=1000. * tmajor[majorsMask],
                     marker='o',
                     cmap=cm.get_cmap('jet'),
                     edgecolor='none',
                     label='Major Merger: $T \leq %.0f$ Myr' %
                     (mergetimelimit * 1000.),
                     alpha=alpha)
    s2 = ax2.scatter(N.log10(x[majorsMask]),
                     uvcolor[majorsMask],
                     s=size,
                     c=1000. * tmajor[majorsMask],
                     marker='o',
                     cmap=cm.get_cmap('jet'),
                     edgecolor='none',
                     visible=False)
    s4 = ax4.scatter(N.log10(x[mergersMask]),
                     uvcolor[mergersMask],
                     s=size * 1.8,
                     c=1000. * tmerge[mergersMask],
                     marker='^',
                     cmap=cm.get_cmap('jet'),
                     edgecolor='none',
                     label='Minor Merger: $T \leq %.0f$ Myr' %
                     (mergetimelimit * 1000.),
                     alpha=alpha)
    s4 = ax4.scatter(N.log10(x[mergersMask]),
                     uvcolor[mergersMask],
                     s=size * 1.8,
                     c=1000. * tmerge[mergersMask],
                     marker='^',
                     cmap=cm.get_cmap('jet'),
                     edgecolor='none',
                     visible=False)
    #Observed
    c = sex.sextractor(
        '/Users/sammy/workspace/herschelpaper/Kuang/section5_v5/f250_detect_z2-4_VC.txt'
    )
    c24 = sex.sextractor(
        '/Users/sammy/workspace/herschelpaper/Kuang/section5_v5/goodsh_goodsn_acsmatch_unified_z2-4.cat'
    )
    VC = []
    for i in range(len(c24)):
        VC += [N.compress(c.id_zband == c24.id_zband[i], c.vcflag)[0]]
    VC = N.array(VC)

    # enforce upper limits in ch2 flux
    fch2 = c24.ch2_flux_ujy.copy()
    for i in range(len(fch2)):
        if c24.ch2_flux_ujy[i] < c24.ch2_fluxerr_ujy[i]:
            fch2[i] = c24.ch2_fluxerr_ujy[i]
        if fch2[i] < 0.:
            fch2[
                i] = 0.5  # set a upper limit in ch2 of 0.5 uJy (it's the largest flux error in the sample; reasonable?)
        # enforce upper limits in i-band flux
    f_i = c24.i_flux_ujy.copy()
    for i in range(len(c24)):
        if c24.i_flux_ujy[i] < c24.i_fluxerr_ujy[i]:
            f_i[i] = c24.i_fluxerr_ujy[i]

    f_z = c24.z_flux_ujy.copy()
    imag = ujy_to_abmag(f_i)
    zmag = ujy_to_abmag(f_z)
    imz = imag - zmag

    l1 = ax1.scatter(N.compress(VC == 'a',
                                N.log10(c24.f250_mjy * 1000. / fch2)),
                     N.compress(VC == 'a', imz),
                     marker='x',
                     s=35,
                     color='black',
                     label='Regulars')
    l2 = ax1.scatter(N.compress(VC == 'b',
                                N.log10(c24.f250_mjy * 1000. / fch2)),
                     N.compress(VC == 'b', imz),
                     marker='o',
                     s=35,
                     color='red',
                     label='Mergers')
    l3 = ax1.scatter(N.compress(VC == 'c',
                                N.log10(c24.f250_mjy * 1000. / fch2)),
                     N.compress(VC == 'c', imz),
                     marker='^',
                     s=35,
                     color='gray',
                     label='Ambiguous')
    l4 = ax1.scatter(N.compress(VC == 'd',
                                N.log10(c24.f250_mjy * 1000. / fch2)),
                     N.compress(VC == 'd', imz),
                     marker='s',
                     s=35,
                     color='blue',
                     label='Compact core')
    zlim = 25.7
    if sum(zmag > zlim) > 0:
        l5 = ax1.scatter(N.compress(zmag > zlim,
                                    N.log10(c24.f250_mjy * 1000. / fch2)),
                         N.compress(zmag > zlim, imz),
                         marker='o',
                         facecolor='None',
                         edgecolor='black',
                         s=64,
                         label=r'$z_{850}>%.1f$' % zlim)

    l1 = ax3.scatter(N.compress(VC == 'a',
                                N.log10(c24.f250_mjy * 1000. / fch2)),
                     N.compress(VC == 'a', imz),
                     marker='x',
                     s=35,
                     color='black',
                     label='Regulars')
    l2 = ax3.scatter(N.compress(VC == 'b',
                                N.log10(c24.f250_mjy * 1000. / fch2)),
                     N.compress(VC == 'b', imz),
                     marker='o',
                     s=35,
                     color='red',
                     label='Mergers')
    l3 = ax3.scatter(N.compress(VC == 'c',
                                N.log10(c24.f250_mjy * 1000. / fch2)),
                     N.compress(VC == 'c', imz),
                     marker='^',
                     s=35,
                     color='gray',
                     label='Ambiguous')
    l4 = ax3.scatter(N.compress(VC == 'd',
                                N.log10(c24.f250_mjy * 1000. / fch2)),
                     N.compress(VC == 'd', imz),
                     marker='s',
                     s=35,
                     color='blue',
                     label='Compact core')
    zlim = 25.7
    if sum(zmag > zlim) > 0:
        l5 = ax3.scatter(N.compress(zmag > zlim,
                                    N.log10(c24.f250_mjy * 1000. / fch2)),
                         N.compress(zmag > zlim, imz),
                         marker='o',
                         facecolor='None',
                         edgecolor='black',
                         s=64,
                         label=r'$z_{850}>%.1f$' % zlim)

    #color bars
    c1 = fig.colorbar(s2, ax=ax2, shrink=0.7, fraction=0.05)
    c2 = fig.colorbar(s4, ax=ax4, shrink=0.7, fraction=0.05)
    c1.set_label('Time since latest merger [Myr]')
    c2.set_label('Time since latest merger [Myr]')
    #plot dividing line
    # y = x - 2.5
    x = N.array([2.0, 2.5, 3.0, 4.0])
    y = x - 2.7
    ax1.plot(x, y, 'g--')
    ax2.plot(x, y, 'g--')
    ax3.plot(x, y, 'g--')
    ax4.plot(x, y, 'g--')

    #add annotate
    P.text(0.5,
           1.04,
           title,
           horizontalalignment='center',
           verticalalignment='center',
           transform=ax2.transAxes)
    P.text(0.5,
           1.04,
           'Observed Galaxies',
           horizontalalignment='center',
           verticalalignment='center',
           transform=ax1.transAxes)
    #labels
    ax3.set_xlabel(xlabel)
    ax4.set_xlabel(xlabel)
    ax1.set_ylabel(ylabel)
    ax3.set_ylabel(ylabel)
    ax2.set_yticklabels([])
    ax4.set_yticklabels([])
    ax1.set_xticklabels([])
    ax2.set_xticklabels([])
    #limits
    ax1.set_ylim(ymin, ymax)
    ax1.set_xlim(xmin, xmax)
    ax2.set_ylim(ymin, ymax)
    ax2.set_xlim(xmin, xmax)
    ax3.set_ylim(ymin, ymax)
    ax3.set_xlim(xmin, xmax)
    ax4.set_ylim(ymin, ymax)
    ax4.set_xlim(xmin, xmax)
    #make grid
    #ax1.grid()
    #ax2.grid()
    #ax3.grid()
    #ax4.grid()
    #legend and save
    ax1.legend(loc='upper right',
               scatterpoints=1,
               shadow=True,
               fancybox=True,
               markerscale=1.5)
    ax2.legend(loc='upper left',
               scatterpoints=1,
               shadow=True,
               fancybox=True,
               markerscale=1.5)
    ax3.legend(loc='upper right',
               scatterpoints=1,
               shadow=True,
               fancybox=True,
               markerscale=1.5)
    ax4.legend(loc='upper left',
               scatterpoints=1,
               shadow=True,
               fancybox=True,
               markerscale=1.5)
    P.savefig(out_folder + output)
Example #18
0
def plotMergerFractions3(query,
                         xlabel, ylabel,
                         output, out_folder,
                         mergetimelimit=0.4,
                         mstarmin=8.0,
                         mstarmax=11.5,
                         mbins=15,
                         ymin=0.0,
                         ymax=1.0,
                         logscale=False):
    #get data, all galaxies
    data = sq.get_data_sqliteSMNfunctions(path, db, query)
    if logscale:
        mstar = N.log10(data[:, 0])
        logscale = False
    else:
        mstar = data[:, 0]
    print N.min(mstar), N.max(mstar)
    tmerge = data[:, 1]
    tmajor = data[:, 2]
    #masks
    nomergeMask = tmerge < 0.0
    majorsMask = (tmajor > 0.0) & (tmajor <= mergetimelimit)
    majorsMask2 = (tmajor > mergetimelimit)
    mergersMask = (tmerge > 0.0) & (tmerge <= mergetimelimit) &\
                  (majorsMask == False) & (majorsMask2 == False)
    mergersMask2 = (nomergeMask == False) & (majorsMask == False) &\
                   (mergersMask == False) & (majorsMask2 == False)
    #bin the data
    mids, numbs = dm.binAndReturnMergerFractions2(mstar,
                                                  nomergeMask,
                                                  mergersMask,
                                                  majorsMask,
                                                  mergersMask2,
                                                  majorsMask2,
                                                  mstarmin,
                                                  mstarmax,
                                                  mbins,
                                                  logscale)
    #the fraction of mergers
    noMergerFraction = N.array([float(x[1]) / x[0] for x in numbs])
    mergerFraction = N.array([float(x[2]) / x[0] for x in numbs])
    majorMergerFraction = N.array([float(x[3]) / x[0] for x in numbs])
    mergerFraction2 = N.array([float(x[4]) / x[0] for x in numbs])
    majorMergerFraction2 = N.array([float(x[5]) / x[0] for x in numbs])

    #sanity check
    for a, b, c, d, e in zip(noMergerFraction, mergerFraction, majorMergerFraction,
                             mergerFraction2, majorMergerFraction2):
        print a + b + c + d + e

        #make the figure
    #    fig = P.figure()
    fig = P.figure(figsize=(10, 10))
    fig.subplots_adjust(left=0.08, bottom=0.1,
                        right=0.97, top=0.93)
    ax1 = fig.add_subplot(111)
    #calculate widths
    wd = (mids[1] - mids[0]) * 1.0
    #draw bars
    ax1.bar(mids, noMergerFraction,
            label='Never Merged', align='center',
            color='0.5', width=wd)#, hatch = '/')
    ax1.bar(mids, mergerFraction2, align='center',
            bottom=noMergerFraction,
            label='Minor Merger: $T > %.0f$ Myr' % (mergetimelimit * 1000.),
            color='0.7', width=wd)#, hatch = '|')
    ax1.bar(mids, majorMergerFraction2, align='center',
            bottom=noMergerFraction + mergerFraction2,
            label='Major Merger: $T > %.0f$ Myr' % (mergetimelimit * 1000.),
            color='0.9', width=wd)#, hatch = '-')
    ax1.bar(mids, majorMergerFraction, align='center',
            bottom=noMergerFraction + mergerFraction2 + majorMergerFraction2,
            label='Major Merger: $T \leq %.0f$ Myr' % (mergetimelimit * 1000.),
            color='green', width=wd)#, hatch = '.')
    ax1.bar(mids, mergerFraction,
            bottom=noMergerFraction + mergerFraction2 + majorMergerFraction2 + majorMergerFraction,
            align='center',
            label='Minor Merger: $T \leq %.0f$ Myr' % (mergetimelimit * 1000.),
            color='red', width=wd)#, hatch = 'x')

    #labels
    ax1.set_xlabel(xlabel)
    ax1.set_ylabel(ylabel)
    ax1.set_ylim(ymin, ymax)
    ax1.set_xlim(mids[0] - wd / 2., mids[-1] + wd / 2.)
    #add annotate
    P.text(0.5, 1.05, 'All galaxies in $2 \leq z < 4$',
           horizontalalignment='center',
           verticalalignment='center',
           transform=ax1.transAxes)
    #legend and save
    P.legend(loc='lower left')
    P.savefig(out_folder + output)
Example #19
0
def plotMergerFractions(query,
                        xlabel, ylabel,
                        output, out_folder,
                        mergetimelimit=0.25,
                        mstarmin=8.0,
                        mstarmax=11.5,
                        mbins=15,
                        ymin=-0.001,
                        ymax=1.01,
                        logscale=False):
    """
    Plot merger fractions.
    """
    #get data, all galaxies
    data = sq.get_data_sqliteSMNfunctions(path, db, query)
    #mstar = N.log10(data[:, 0])
    mstar = data[:, 0]
    tmerge = data[:, 1]
    tmajor = data[:, 2]
    print N.min(mstar), N.max(mstar)
    #masks
    nomergeMask = tmerge < 0.0
    majorsMask = (tmajor > 0.0) & (tmajor <= mergetimelimit)
    majorsMask2 = (tmajor > mergetimelimit) & (tmajor <= 0.5)
    mergersMask = (tmerge > 0.0) & (tmerge <= mergetimelimit) &\
                  (majorsMask == False) & (majorsMask2 == False)
    mergersMask2 = (tmerge > mergetimelimit) & (tmerge <= 0.5) &\
                   (majorsMask2 == False)
    #bin the data
    mids, numbs = dm.binAndReturnMergerFractions2(mstar,
                                                  nomergeMask,
                                                  mergersMask,
                                                  majorsMask,
                                                  mergersMask2,
                                                  majorsMask2,
                                                  mstarmin,
                                                  mstarmax,
                                                  mbins,
                                                  logscale)
    #the fraction of mergers
    noMergerFraction = [float(x[1]) / x[0] for x in numbs]
    mergerFraction = [float(x[2]) / x[0] for x in numbs]
    majorMergerFraction = [float(x[3]) / x[0] for x in numbs]
    mergerFraction2 = [float(x[4]) / x[0] for x in numbs]
    majorMergerFraction2 = [float(x[5]) / x[0] for x in numbs]

    #sanity check
    for a, b, c, d, e in zip(noMergerFraction, mergerFraction, majorMergerFraction,
                             mergerFraction2, majorMergerFraction2):
        print a + b + c + d + e

    #make the figure
    if 'ps' in output:
        fig = P.figure()
    else:
        fig = P.figure(figsize=(10, 10))
    fig.subplots_adjust(left=0.08, bottom=0.07,
                        right=0.97, top=0.93)
    ax1 = fig.add_subplot(111)
    #draw lines ["-","--","-.",":"]
    ax1.plot(mids, noMergerFraction, 'k-', lw=2.6,
             label='Never Merged')
    #    ax1.plot(mids, mergerFraction, ls = '--', lw = 2.6,
    #             label = 'Minor Merger: $T \leq 250$ Myr')
    #    ax1.plot(mids, mergerFraction2, ls = '-.', lw = 2.6,
    #             label = 'Minor Merger: $250 < T \leq 500$ Myr')
    #    ax1.plot(mids, majorMergerFraction, ls = '--', lw = 2.6,
    #             label = 'Major Merger: $T \leq 250$ Myr')
    #    ax1.plot(mids, majorMergerFraction2, ls = '-.', lw = 2.6,
    #             label = 'Major Merger: $250 < T \leq 500$ Myr')
    ax1.plot(mids, majorMergerFraction, ls='-', lw=2.6, c='0.3',
             label='Young Major Merger')
    ax1.plot(mids, mergerFraction, ls='-.', lw=2.6, c='0.2',
             label='Young Minor Merger')
    ax1.plot(mids, majorMergerFraction2, ls='--', lw=2.6, c='0.4',
             label='Old Major Merger')
    ax1.plot(mids, mergerFraction2, ls=':', lw=2.6, c='0.5',
             label='Old Minor Merger')
    #labels
    ax1.set_xlabel(xlabel)
    ax1.set_ylabel(ylabel)
    #limits
    ax1.set_ylim(ymin, ymax)
    #add annotate
    P.text(0.5, 0.93, 'All galaxies\n$2 \leq z < 4$',
           horizontalalignment='center',
           verticalalignment='center',
           transform=ax1.transAxes)
    #legend and save
    P.legend(loc='upper left')
    P.savefig(out_folder + output)
Example #20
0
def plot_mergerfraction(path,
                        db,
                        reshifts,
                        out_folder,
                        outname,
                        xmin=-0.01,
                        xmax=2.3,
                        fluxlimit=5,
                        png=True,
                        mergetimelimit=0.25,
                        xbin=[10, 8, 9, 7, 7, 5],
                        neverMerged=False,
                        obs=True):
    '''
    Plots 
    '''
    #figure
    if png:
        fig = P.figure(figsize=(10, 10))
        type = '.png'
    else:
        fig = P.figure()
        type = '.ps'
    fig.subplots_adjust(left=0.09,
                        bottom=0.08,
                        right=0.93,
                        top=0.95,
                        wspace=0.0,
                        hspace=0.0)
    ax1 = fig.add_subplot(221)
    ax2 = fig.add_subplot(222)
    ax3 = fig.add_subplot(223)
    ax4 = fig.add_subplot(224)
    #loop over all the redshifts
    for i, reds in enumerate(redshifts):
        if obs:
            query = '''select FIR.pacs160_obs, galprop.tmerge, galprop.tmajmerge
                    from FIR, galprop where
                    %s and
                    FIR.pacs160_obs > 5e-4 and
                    FIR.pacs160_obs < 1e6 and
                    FIR.gal_id = galprop.gal_id and
                    FIR.halo_id = galprop.halo_id
                    ''' % reds
        else:
            query = '''select FIR.pacs160, galprop.tmerge, galprop.tmajmerge
                    from FIR, galprop where
                    %s and
                    FIR.pacs160 > 8.8 and
                    FIR.pacs160 < 13.0 and
                    FIR.gal_id = galprop.gal_id and
                    FIR.halo_id = galprop.halo_id
                    ''' % reds
            #tmp
        tmp = reds.split()
        zz = N.mean(N.array([float(tmp[2]), float(tmp[6])]))
        #get data
        data = sq.get_data_sqliteSMNfunctions(path, db, query)
        if obs:
            x = N.log10(data[:, 0] * 1e3)
        else:
            x = data[:, 0]
        tmerge = data[:, 1]
        tmajor = data[:, 2]
        print N.min(x), N.max(x)
        #masks
        nomergeMask = tmerge < 0.0
        majorsMask = (tmajor > 0.0) & (tmajor <= mergetimelimit)
        majorsMask2 = (tmajor > mergetimelimit)
        mergersMask = (tmerge > 0.0) & (tmerge <= mergetimelimit) &\
                      (majorsMask == False) & (majorsMask2 == False)
        mergersMask2 = (nomergeMask == False) & (majorsMask == False) &\
                       (mergersMask == False) & (majorsMask2 == False)

        print xbin[i]
        mids, numbs = dm.binAndReturnMergerFractions2(x, nomergeMask,
                                                      mergersMask, majorsMask,
                                                      mergersMask2,
                                                      majorsMask2, N.min(x),
                                                      N.max(x), xbin[i], False)
        #the fraction of mergers
        noMergerFraction = [float(x[1]) / x[0] for x in numbs]
        mergerFraction = [float(x[2]) / x[0] for x in numbs]
        majorMergerFraction = [float(x[3]) / x[0] for x in numbs]
        mergerFraction2 = [float(x[4]) / x[0] for x in numbs]
        majorMergerFraction2 = [float(x[5]) / x[0] for x in numbs]
        #sanity check
        for a, b, c, d, e in zip(noMergerFraction, mergerFraction,
                                 majorMergerFraction, mergerFraction2,
                                 majorMergerFraction2):
            print a + b + c + d + e

            #plots
        ax1.plot(mids, majorMergerFraction, label='$z = %.1f$' % zz)
        ax2.plot(mids, majorMergerFraction2, label='$z = %.1f$' % zz)
        ax3.plot(mids, mergerFraction, label='$z = %.1f$' % zz)
        if neverMerged:
            ax4.plot(mids, noMergerFraction, label='$z = %.1f$' % zz)
        else:
            ax4.plot(mids, mergerFraction2, label='$z = %.1f$' % zz)

    #set obs limit
    if obs:
        ax1.axvline(N.log10(fluxlimit), ls=':', color='green')
        ax2.axvline(N.log10(fluxlimit), ls=':', color='green')
        ax3.axvline(N.log10(fluxlimit), ls=':', color='green')
        ax4.axvline(N.log10(fluxlimit), ls=':', color='green')
        #labels
    if obs:
        ax3.set_xlabel('$\log_{10}(S_{160} \ [\mathrm{mJy}])$')
        ax4.set_xlabel('$\log_{10}(S_{160} \ [\mathrm{mJy}])$')
    else:
        ax3.set_xlabel('$\log_{10}(L_{160} \ [L_{\odot}])$')
        ax4.set_xlabel('$\log_{10}(L_{160} \ [L_{\odot}])$')
    ax1.set_ylabel('$\mathrm{Merger\ Fraction}$')
    ax3.set_ylabel('$\mathrm{Merger\ Fraction}$')
    ax2.set_yticklabels([])
    ax4.set_yticklabels([])
    ax1.set_xticklabels([])
    ax2.set_xticklabels([])
    #texts
    P.text(
        0.5,
        0.94,
        '$\mathrm{Major\ mergers:}\ T_{\mathrm{merge}} \leq %i \ \mathrm{Myr}$'
        % (mergetimelimit * 1000.),
        horizontalalignment='center',
        verticalalignment='center',
        transform=ax1.transAxes)
    P.text(
        0.5,
        0.94,
        '$\mathrm{Major\ mergers:}\ T_{\mathrm{merge}} > %i \ \mathrm{Myr}$' %
        (mergetimelimit * 1000.),
        horizontalalignment='center',
        verticalalignment='center',
        transform=ax2.transAxes)
    P.text(
        0.5,
        0.94,
        '$\mathrm{Minor\ mergers:}\ T_{\mathrm{merge}} \leq %i \ \mathrm{Myr}$'
        % (mergetimelimit * 1000.),
        horizontalalignment='center',
        verticalalignment='center',
        transform=ax3.transAxes)
    if neverMerged:
        P.text(0.5,
               0.94,
               '$\mathrm{Never\ Merged}$',
               horizontalalignment='center',
               verticalalignment='center',
               transform=ax4.transAxes)
    else:
        P.text(
            0.5,
            0.94,
            '$\mathrm{Minor\ mergers:}\ T_{\mathrm{merge}} > %i \ \mathrm{Myr}$'
            % (mergetimelimit * 1000.),
            horizontalalignment='center',
            verticalalignment='center',
            transform=ax4.transAxes)
        #set limits
    ax1.set_xlim(xmin, xmax)
    ax1.set_ylim(-0.01, 0.95)
    ax2.set_xlim(xmin, xmax)
    ax2.set_ylim(-0.01, 0.95)
    ax3.set_xlim(xmin, xmax)
    ax3.set_ylim(-0.01, 0.95)
    ax4.set_xlim(xmin, xmax)
    ax4.set_ylim(-0.01, 0.95)
    #make legend and save the figure
    ax3.legend(loc='center left')
    P.savefig(out_folder + outname + type)
Example #21
0
    mergetimelimit = 0.5
    query2 = '''select galprop.tmerge, galprop.tmajmerge
                from FIR, galprop, galphotdust where
                galphotdust.f775w - galphotdust.f850lp < 0.2 and
                FIR.spire250_obs > 5e-3 and
                FIR.z >= 2.0 and
                FIR.z < 4.0 and
                FIR.spire250_obs < 1e6 and
                FIR.gal_id = galprop.gal_id and
                FIR.halo_id = galprop.halo_id and
                FIR.gal_id = galphotdust.gal_id and
                FIR.halo_id = galphotdust.halo_id
                '''
    #get data
    data = sq.get_data_sqliteSMNfunctions(path, db, query2)
    tmerge = data[:, 0]
    tmajor = data[:, 1]
    #masks
    nomergeMask = tmerge < 0.0
    majorsMask = (tmajor > 0.0) & (tmajor <= mergetimelimit)
    majorsMask2 = (tmajor > mergetimelimit)
    mergersMask = (tmerge > 0.0) & (tmerge <= mergetimelimit) & \
                  (majorsMask == False) & (majorsMask2 == False)
    mergersMask2 = (nomergeMask == False) & (majorsMask == False) & \
                   (mergersMask == False) & (majorsMask2 == False)
    #the fraction of no mergers?
    nm2 = len(tmerge[tmerge < 0.0]) / float(len(tmerge)) * 100.
    nm3 = len(tmajor[tmajor < 0.0]) / float(len(tmajor)) * 100.
    nm4 = len(tmajor[majorsMask]) / float(len(tmajor)) * 100.
    #print out some statistics
Example #22
0
    mergetimelimit = 0.5
    query2 = '''select galprop.tmerge, galprop.tmajmerge
                from FIR, galprop, galphotdust where
                galphotdust.f775w - galphotdust.f850lp < 0.2 and
                FIR.spire250_obs > 5e-3 and
                FIR.z >= 2.0 and
                FIR.z < 4.0 and
                FIR.spire250_obs < 1e6 and
                FIR.gal_id = galprop.gal_id and
                FIR.halo_id = galprop.halo_id and
                FIR.gal_id = galphotdust.gal_id and
                FIR.halo_id = galphotdust.halo_id
                '''
    #get data
    data = sq.get_data_sqliteSMNfunctions(path, db, query2)
    tmerge = data[:,0]
    tmajor = data[:,1] 
    #masks
    nomergeMask = tmerge < 0.0
    majorsMask = (tmajor > 0.0) & (tmajor <= mergetimelimit)
    majorsMask2 = (tmajor > mergetimelimit)
    mergersMask = (tmerge > 0.0) & (tmerge <= mergetimelimit) & \
                  (majorsMask == False) & (majorsMask2 == False)
    mergersMask2 = (nomergeMask == False) & (majorsMask == False) & \
                   (mergersMask == False) & (majorsMask2 == False)
    #the fraction of no mergers?
    nm2 = len(tmerge[tmerge < 0.0]) / float(len(tmerge)) * 100.
    nm3 = len(tmajor[tmajor < 0.0]) / float(len(tmajor)) * 100.
    nm4 = len(tmajor[majorsMask]) / float(len(tmajor)) * 100.
    #print out some statistics
Example #23
0
def plotMergerFractionsMultiplot(query, xlabel, ylabel,
                                 output, out_folder, obs,
                                 mergetimelimit=0.25,
                                 ymin=-0.2, ymax=1.5,
                                 xmin=-1.9, xmax=4.15,
                                 xbins=80, ybins=80,
                                 title='Simulated Galaxies',
                                 size=4.5, alpha=0.2, ch=1):
    #get data, all galaxies
    data = sq.get_data_sqliteSMNfunctions(path, db, query)
    x = data[:, 0]
    f775w = data[:, 1]
    f850lp = data[:, 2]
    uvcolor = f775w - f850lp
    tmerge = data[:, 3]
    tmajor = data[:, 4]

    #masks for simulated galaxies
    nomergeMask = tmerge < 0.0
    majorsMask = (tmajor > 0.0) & (tmajor <= mergetimelimit)
    majorsMask2 = (tmajor > mergetimelimit)
    mergersMask = (tmerge > 0.0) & (tmerge <= mergetimelimit) &\
                  (majorsMask == False) & (majorsMask2 == False)
    mergersMask2 = (nomergeMask == False) & (majorsMask == False) &\
                   (mergersMask == False) & (majorsMask2 == False)

    #KDE
    mu = M.AnaKDE([N.log10(x[nomergeMask]), uvcolor[nomergeMask]])
    x_vec, y_vec, zm, lvls, d0, d1 = mu.contour(N.linspace(xmin, xmax, xbins),
                                                N.linspace(ymin, ymax, ybins),
                                                return_data=True)
    #make the figure
    #fig = P.figure()
    fig = P.figure(figsize=(10, 10))
    fig.subplots_adjust(left=0.09, bottom=0.08,
                        right=0.93, top=0.95,
                        wspace=0.0, hspace=0.0)
    ax1 = fig.add_subplot(221)
    ax2 = fig.add_subplot(222)
    ax3 = fig.add_subplot(223)
    ax4 = fig.add_subplot(224)
    #make contours
    lv = N.linspace(0.015, 0.95 * N.max(zm), 5)
    cont = ax1.contour(x_vec, y_vec, zm, linewidths=0.9,
                       levels=lv, colors='black')
    cont = ax2.contour(x_vec, y_vec, zm, linewidths=0.9,
                       levels=lv, colors='black')
    cont = ax3.contour(x_vec, y_vec, zm, linewidths=0.9,
                       levels=lv, colors='black')
    cont = ax4.contour(x_vec, y_vec, zm, linewidths=0.9,
                       levels=lv, colors='black')

    #plot scatters
    s2 = ax2.scatter(N.log10(x[majorsMask]), uvcolor[majorsMask],
                     s=size, c=1000. * tmajor[majorsMask], marker='o',
                     cmap=cm.get_cmap('jet'), edgecolor='none',
                     label='Major Merger: $T \leq %.0f$ Myr' % (mergetimelimit * 1000.),
                     alpha=alpha)
    s2 = ax2.scatter(N.log10(x[majorsMask]), uvcolor[majorsMask],
                     s=size, c=1000. * tmajor[majorsMask], marker='o',
                     cmap=cm.get_cmap('jet'), edgecolor='none',
                     visible=False)
    s4 = ax4.scatter(N.log10(x[mergersMask]), uvcolor[mergersMask],
                     s=size * 1.8, c=1000. * tmerge[mergersMask], marker='^',
                     cmap=cm.get_cmap('jet'), edgecolor='none',
                     label='Minor Merger: $T \leq %.0f$ Myr' % (mergetimelimit * 1000.),
                     alpha=alpha)
    s4 = ax4.scatter(N.log10(x[mergersMask]), uvcolor[mergersMask],
                     s=size * 1.8, c=1000. * tmerge[mergersMask], marker='^',
                     cmap=cm.get_cmap('jet'), edgecolor='none',
                     visible=False)
    #Observed
    c = sex.sextractor('/Users/sammy/workspace/herschelpaper/Kuang/section5_v5/f250_detect_z2-4_VC.txt')
    c24 = sex.sextractor(
        '/Users/sammy/workspace/herschelpaper/Kuang/section5_v5/goodsh_goodsn_acsmatch_unified_z2-4.cat')
    VC = []
    for i in range(len(c24)):
        VC += [N.compress(c.id_zband == c24.id_zband[i], c.vcflag)[0]]
    VC = N.array(VC)

    # enforce upper limits in ch2 flux
    fch2 = c24.ch2_flux_ujy.copy()
    for i in range(len(fch2)):
        if c24.ch2_flux_ujy[i] < c24.ch2_fluxerr_ujy[i]:
            fch2[i] = c24.ch2_fluxerr_ujy[i]
        if fch2[i] < 0.: fch2[
                         i] = 0.5  # set a upper limit in ch2 of 0.5 uJy (it's the largest flux error in the sample; reasonable?)
        # enforce upper limits in i-band flux
    f_i = c24.i_flux_ujy.copy()
    for i in range(len(c24)):
        if c24.i_flux_ujy[i] < c24.i_fluxerr_ujy[i]:
            f_i[i] = c24.i_fluxerr_ujy[i]

    f_z = c24.z_flux_ujy.copy()
    imag = ujy_to_abmag(f_i)
    zmag = ujy_to_abmag(f_z)
    imz = imag - zmag

    l1 = ax1.scatter(N.compress(VC == 'a', N.log10(c24.f250_mjy * 1000. / fch2)), N.compress(VC == 'a', imz),
                     marker='x', s=35, color='black', label='Regulars')
    l2 = ax1.scatter(N.compress(VC == 'b', N.log10(c24.f250_mjy * 1000. / fch2)), N.compress(VC == 'b', imz),
                     marker='o', s=35, color='red', label='Mergers')
    l3 = ax1.scatter(N.compress(VC == 'c', N.log10(c24.f250_mjy * 1000. / fch2)), N.compress(VC == 'c', imz),
                     marker='^', s=35, color='gray', label='Ambiguous')
    l4 = ax1.scatter(N.compress(VC == 'd', N.log10(c24.f250_mjy * 1000. / fch2)), N.compress(VC == 'd', imz),
                     marker='s', s=35, color='blue', label='Compact core')
    zlim = 25.7
    if sum(zmag > zlim) > 0:
        l5 = ax1.scatter(N.compress(zmag > zlim, N.log10(c24.f250_mjy * 1000. / fch2)),
                         N.compress(zmag > zlim, imz), marker='o', facecolor='None', edgecolor='black', s=64,
                         label=r'$z_{850}>%.1f$' % zlim)

    l1 = ax3.scatter(N.compress(VC == 'a', N.log10(c24.f250_mjy * 1000. / fch2)), N.compress(VC == 'a', imz),
                     marker='x', s=35, color='black', label='Regulars')
    l2 = ax3.scatter(N.compress(VC == 'b', N.log10(c24.f250_mjy * 1000. / fch2)), N.compress(VC == 'b', imz),
                     marker='o', s=35, color='red', label='Mergers')
    l3 = ax3.scatter(N.compress(VC == 'c', N.log10(c24.f250_mjy * 1000. / fch2)), N.compress(VC == 'c', imz),
                     marker='^', s=35, color='gray', label='Ambiguous')
    l4 = ax3.scatter(N.compress(VC == 'd', N.log10(c24.f250_mjy * 1000. / fch2)), N.compress(VC == 'd', imz),
                     marker='s', s=35, color='blue', label='Compact core')
    zlim = 25.7
    if sum(zmag > zlim) > 0:
        l5 = ax3.scatter(N.compress(zmag > zlim, N.log10(c24.f250_mjy * 1000. / fch2)),
                         N.compress(zmag > zlim, imz), marker='o', facecolor='None', edgecolor='black', s=64,
                         label=r'$z_{850}>%.1f$' % zlim)

    #color bars
    c1 = fig.colorbar(s2, ax=ax2, shrink=0.7, fraction=0.05)
    c2 = fig.colorbar(s4, ax=ax4, shrink=0.7, fraction=0.05)
    c1.set_label('Time since latest merger [Myr]')
    c2.set_label('Time since latest merger [Myr]')
    #plot dividing line
    # y = x - 2.5
    x = N.array([2.0, 2.5, 3.0, 4.0])
    y = x - 2.7
    ax1.plot(x, y, 'g--')
    ax2.plot(x, y, 'g--')
    ax3.plot(x, y, 'g--')
    ax4.plot(x, y, 'g--')

    #add annotate
    P.text(0.5, 1.04, title,
           horizontalalignment='center',
           verticalalignment='center',
           transform=ax2.transAxes)
    P.text(0.5, 1.04, 'Observed Galaxies',
           horizontalalignment='center',
           verticalalignment='center',
           transform=ax1.transAxes)
    #labels
    ax3.set_xlabel(xlabel)
    ax4.set_xlabel(xlabel)
    ax1.set_ylabel(ylabel)
    ax3.set_ylabel(ylabel)
    ax2.set_yticklabels([])
    ax4.set_yticklabels([])
    ax1.set_xticklabels([])
    ax2.set_xticklabels([])
    #limits
    ax1.set_ylim(ymin, ymax)
    ax1.set_xlim(xmin, xmax)
    ax2.set_ylim(ymin, ymax)
    ax2.set_xlim(xmin, xmax)
    ax3.set_ylim(ymin, ymax)
    ax3.set_xlim(xmin, xmax)
    ax4.set_ylim(ymin, ymax)
    ax4.set_xlim(xmin, xmax)
    #make grid
    #ax1.grid()
    #ax2.grid()
    #ax3.grid()
    #ax4.grid()
    #legend and save
    ax1.legend(loc='upper right', scatterpoints=1,
               shadow=True, fancybox=True, markerscale=1.5)
    ax2.legend(loc='upper left', scatterpoints=1,
               shadow=True, fancybox=True, markerscale=1.5)
    ax3.legend(loc='upper right', scatterpoints=1,
               shadow=True, fancybox=True, markerscale=1.5)
    ax4.legend(loc='upper left', scatterpoints=1,
               shadow=True, fancybox=True, markerscale=1.5)
    P.savefig(out_folder + output)
Example #24
0
def getDataSlow(db='database.db', path='/Users/sammy/Research/CANDELS/v2/'):
    """
    Get data from the lcone table in db.

    :param db: name of the SQLite database file.
    :type db: string
    :param path: full path of the database file
    :type path: string

    :Warning: This is extremely slow way to pull out data from a database.
              Should be rewritten using table joins etc. so that less queries
              could be performed.

    :return: redshift, halo mass and radius, projected distances of subhalo galaxies [kpc],
             halo_id of the main halo
    :rtype: dict
    """

    conversion = 0.000277777778  # degree to arcsecond

    redshifts = [
        'redshift < 0.5 and', 'redshift >= 0.5 and redshift < 1.0 and',
        'redshift >= 1.0 and redshift < 2.0 and',
        'redshift >= 2.0 and redshift < 3.0 and',
        'redshift >= 3.0 and redshift < 4.0 and',
        'redshift >= 4.0 and redshift < 5.0 and',
        'redshift >= 5.0 and redshift < 6.0 and',
        'redshift >= 6.0 and redshift < 7.0 and'
    ]

    for i, red in enumerate(redshifts):
        print red
        qr = 'select halo_id from lcone where %s gal_id > 1' % red
        #qr = 'select halo_id from lcone where %s mhalo > 12.7' % red
        #pull out data
        ids = sq.get_data_sqliteSMNfunctions(path, db, qr)

        uids = np.unique(ids)
        print len(uids), 'haloes'

        saveid = []
        saveorig = []
        savedist = []
        savemhalo = []
        saverhalo = []
        saveredshift = []

        #we should now look for each unique id
        for id in uids:
            query = 'select redshift, ra, dec, halo_id, mhalo, rhalo from lcone where halo_id = {0:d}'.format(
                id)
            #print query
            data = sq.get_data_sqliteSMNfunctions(path, db, query)

            #if multiples, then don't take it
            if len(set(data[:, 0])) > 1:
                print 'skipping', id
                continue
            if len(data[:, 1]) < 2:
                print 'no subhaloes', id, data[:, 1]
                continue

            #redshift
            z = data[0, 0]

            #look the diameter distance from the lookup table
            dd = cosmocalc(z, 71.0, 0.28)['PS_kpc']

            #the first halo, assume it to be the main halo
            RADeg1 = data[0, 1]
            decDeg1 = data[0, 2]
            #the following haloes, assume to be subhaloes
            RADeg2 = data[1:, 1]
            decDeg2 = data[1:, 2]

            #calculate the angular separation on the sky
            sep = Coords.calcAngSepDeg(RADeg1, decDeg1, RADeg2, decDeg2)

            physical_distance = sep * dd / conversion

            #these are all the main halo parameters
            saveredshift.append(z)
            saveid.append(int(data[0, 3]))
            savemhalo.append(data[0, 4])
            saverhalo.append(data[0, 5])

            savedist.append(physical_distance)
            saveorig.append(id)

        out = dict(halo_ids=saveid,
                   distances=savedist,
                   original=saveorig,
                   mhalo=savemhalo,
                   rhalo=saverhalo,
                   redshift=saveredshift)

        wr.cPickleDumpDictionary(out, 'distances%i.pickle' % (i + 1))
Example #25
0
def plotMergerFractions3(query,
                         xlabel,
                         ylabel,
                         output,
                         out_folder,
                         mergetimelimit=0.4,
                         mstarmin=8.0,
                         mstarmax=11.5,
                         mbins=15,
                         ymin=0.0,
                         ymax=1.0,
                         logscale=False):
    #get data, all galaxies
    data = sq.get_data_sqliteSMNfunctions(path, db, query)
    if logscale:
        mstar = N.log10(data[:, 0])
        logscale = False
    else:
        mstar = data[:, 0]
    print N.min(mstar), N.max(mstar)
    tmerge = data[:, 1]
    tmajor = data[:, 2]
    #masks
    nomergeMask = tmerge < 0.0
    majorsMask = (tmajor > 0.0) & (tmajor <= mergetimelimit)
    majorsMask2 = (tmajor > mergetimelimit)
    mergersMask = (tmerge > 0.0) & (tmerge <= mergetimelimit) &\
                  (majorsMask == False) & (majorsMask2 == False)
    mergersMask2 = (nomergeMask == False) & (majorsMask == False) &\
                   (mergersMask == False) & (majorsMask2 == False)
    #bin the data
    mids, numbs = dm.binAndReturnMergerFractions2(mstar, nomergeMask,
                                                  mergersMask, majorsMask,
                                                  mergersMask2, majorsMask2,
                                                  mstarmin, mstarmax, mbins,
                                                  logscale)
    #the fraction of mergers
    noMergerFraction = N.array([float(x[1]) / x[0] for x in numbs])
    mergerFraction = N.array([float(x[2]) / x[0] for x in numbs])
    majorMergerFraction = N.array([float(x[3]) / x[0] for x in numbs])
    mergerFraction2 = N.array([float(x[4]) / x[0] for x in numbs])
    majorMergerFraction2 = N.array([float(x[5]) / x[0] for x in numbs])

    #sanity check
    for a, b, c, d, e in zip(noMergerFraction, mergerFraction,
                             majorMergerFraction, mergerFraction2,
                             majorMergerFraction2):
        print a + b + c + d + e

        #make the figure
    #    fig = P.figure()
    fig = P.figure(figsize=(10, 10))
    fig.subplots_adjust(left=0.08, bottom=0.1, right=0.97, top=0.93)
    ax1 = fig.add_subplot(111)
    #calculate widths
    wd = (mids[1] - mids[0]) * 1.0
    #draw bars
    ax1.bar(mids,
            noMergerFraction,
            label='Never Merged',
            align='center',
            color='0.5',
            width=wd)  #, hatch = '/')
    ax1.bar(mids,
            mergerFraction2,
            align='center',
            bottom=noMergerFraction,
            label='Minor Merger: $T > %.0f$ Myr' % (mergetimelimit * 1000.),
            color='0.7',
            width=wd)  #, hatch = '|')
    ax1.bar(mids,
            majorMergerFraction2,
            align='center',
            bottom=noMergerFraction + mergerFraction2,
            label='Major Merger: $T > %.0f$ Myr' % (mergetimelimit * 1000.),
            color='0.9',
            width=wd)  #, hatch = '-')
    ax1.bar(mids,
            majorMergerFraction,
            align='center',
            bottom=noMergerFraction + mergerFraction2 + majorMergerFraction2,
            label='Major Merger: $T \leq %.0f$ Myr' % (mergetimelimit * 1000.),
            color='green',
            width=wd)  #, hatch = '.')
    ax1.bar(mids,
            mergerFraction,
            bottom=noMergerFraction + mergerFraction2 + majorMergerFraction2 +
            majorMergerFraction,
            align='center',
            label='Minor Merger: $T \leq %.0f$ Myr' % (mergetimelimit * 1000.),
            color='red',
            width=wd)  #, hatch = 'x')

    #labels
    ax1.set_xlabel(xlabel)
    ax1.set_ylabel(ylabel)
    ax1.set_ylim(ymin, ymax)
    ax1.set_xlim(mids[0] - wd / 2., mids[-1] + wd / 2.)
    #add annotate
    P.text(0.5,
           1.05,
           'All galaxies in $2 \leq z < 4$',
           horizontalalignment='center',
           verticalalignment='center',
           transform=ax1.transAxes)
    #legend and save
    P.legend(loc='lower left')
    P.savefig(out_folder + output)
Example #26
0
def plotMergerFractions(query,
                        xlabel,
                        ylabel,
                        output,
                        out_folder,
                        mergetimelimit=0.25,
                        mstarmin=8.0,
                        mstarmax=11.5,
                        mbins=15,
                        ymin=-0.001,
                        ymax=1.01,
                        logscale=False):
    """
    Plot merger fractions.
    """
    #get data, all galaxies
    data = sq.get_data_sqliteSMNfunctions(path, db, query)
    #mstar = N.log10(data[:, 0])
    mstar = data[:, 0]
    tmerge = data[:, 1]
    tmajor = data[:, 2]
    print N.min(mstar), N.max(mstar)
    #masks
    nomergeMask = tmerge < 0.0
    majorsMask = (tmajor > 0.0) & (tmajor <= mergetimelimit)
    majorsMask2 = (tmajor > mergetimelimit) & (tmajor <= 0.5)
    mergersMask = (tmerge > 0.0) & (tmerge <= mergetimelimit) &\
                  (majorsMask == False) & (majorsMask2 == False)
    mergersMask2 = (tmerge > mergetimelimit) & (tmerge <= 0.5) &\
                   (majorsMask2 == False)
    #bin the data
    mids, numbs = dm.binAndReturnMergerFractions2(mstar, nomergeMask,
                                                  mergersMask, majorsMask,
                                                  mergersMask2, majorsMask2,
                                                  mstarmin, mstarmax, mbins,
                                                  logscale)
    #the fraction of mergers
    noMergerFraction = [float(x[1]) / x[0] for x in numbs]
    mergerFraction = [float(x[2]) / x[0] for x in numbs]
    majorMergerFraction = [float(x[3]) / x[0] for x in numbs]
    mergerFraction2 = [float(x[4]) / x[0] for x in numbs]
    majorMergerFraction2 = [float(x[5]) / x[0] for x in numbs]

    #sanity check
    for a, b, c, d, e in zip(noMergerFraction, mergerFraction,
                             majorMergerFraction, mergerFraction2,
                             majorMergerFraction2):
        print a + b + c + d + e

    #make the figure
    if 'ps' in output:
        fig = P.figure()
    else:
        fig = P.figure(figsize=(10, 10))
    fig.subplots_adjust(left=0.08, bottom=0.07, right=0.97, top=0.93)
    ax1 = fig.add_subplot(111)
    #draw lines ["-","--","-.",":"]
    ax1.plot(mids, noMergerFraction, 'k-', lw=2.6, label='Never Merged')
    #    ax1.plot(mids, mergerFraction, ls = '--', lw = 2.6,
    #             label = 'Minor Merger: $T \leq 250$ Myr')
    #    ax1.plot(mids, mergerFraction2, ls = '-.', lw = 2.6,
    #             label = 'Minor Merger: $250 < T \leq 500$ Myr')
    #    ax1.plot(mids, majorMergerFraction, ls = '--', lw = 2.6,
    #             label = 'Major Merger: $T \leq 250$ Myr')
    #    ax1.plot(mids, majorMergerFraction2, ls = '-.', lw = 2.6,
    #             label = 'Major Merger: $250 < T \leq 500$ Myr')
    ax1.plot(mids,
             majorMergerFraction,
             ls='-',
             lw=2.6,
             c='0.3',
             label='Young Major Merger')
    ax1.plot(mids,
             mergerFraction,
             ls='-.',
             lw=2.6,
             c='0.2',
             label='Young Minor Merger')
    ax1.plot(mids,
             majorMergerFraction2,
             ls='--',
             lw=2.6,
             c='0.4',
             label='Old Major Merger')
    ax1.plot(mids,
             mergerFraction2,
             ls=':',
             lw=2.6,
             c='0.5',
             label='Old Minor Merger')
    #labels
    ax1.set_xlabel(xlabel)
    ax1.set_ylabel(ylabel)
    #limits
    ax1.set_ylim(ymin, ymax)
    #add annotate
    P.text(0.5,
           0.93,
           'All galaxies\n$2 \leq z < 4$',
           horizontalalignment='center',
           verticalalignment='center',
           transform=ax1.transAxes)
    #legend and save
    P.legend(loc='upper left')
    P.savefig(out_folder + output)