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