def jwstfig_z3(simIa=None, simIbc=None, simII=None, contours=True, redshiftcircle=True, clobber=False, nsim=2000, **plotargs): from pytools import plotsetup from matplotlib import pyplot as pl fig = plotsetup.fullpaperfig([8, 4]) simIa, simIbc, simII = doublecircle('jwst3', simIa, simIbc, simII, clobber=clobber, circle1bands=['f182m', 'f300m'], circle2bands=['f210m', 'f300m'], contours=contours, redshiftcircle=redshiftcircle, filterset='jwst_z3', nsim=nsim, **plotargs) ax1, ax2 = fig.axes fig.subplots_adjust(left=0.1, bottom=0.18, right=0.89, top=0.95, wspace=0.1) ax2.yaxis.labelpad = 20 pl.draw() return simIa, simIbc, simII
def bushfig(simIa=None, simIbc=None, simII=None, contours=True, redshiftcircle=False, clobber=False, **plotargs): from pytools import plotsetup from matplotlib import pyplot as pl, ticker fig = plotsetup.fullpaperfig([8, 4]) simIa, simIbc, simII = doublecircle('bush', simIa, simIbc, simII, clobber=clobber, circle1bands=['f098m', 'f153m'], circle2bands=['f127m', 'f139m'], contours=contours, redshiftcircle=redshiftcircle, **plotargs) fig = pl.gcf() ax1, ax2 = fig.axes fig.subplots_adjust(left=0.1, bottom=0.18, right=0.89, top=0.95, wspace=0.1) ax1.set_xlim(-0.6, 0.95) ax1.set_ylim(-0.9, 0.5) ax2.set_xlim(-0.6, 0.6) ax2.set_ylim(-0.8, 0.6) ax2.yaxis.labelpad = 20 for ax in [ax1, ax2]: ax.xaxis.set_major_locator(ticker.MultipleLocator(0.2)) ax.xaxis.set_minor_locator(ticker.MultipleLocator(0.1)) ax.yaxis.set_major_locator(ticker.MultipleLocator(0.2)) ax.yaxis.set_minor_locator(ticker.MultipleLocator(0.1)) #ax.text( 0.1, 0.1, 'SN Ia', color=color1, # ha='left',va='top')#,transform=ax1.transAxes,fontsize=14) #ax.text( 0., -0.05, 'CC SN', color=color2, # ha='center',va='top')#,transform=ax1.transAxes,fontsize=14) ax2.text( 0.95, 0.95, 'GSD11Bus', transform=ax2.transAxes, ha='right', va='top', color='k', fontsize=15, ) pl.draw() return simIa, simIbc, simII
def plotzpoints(sn, simIa, dz=0.05): """ plot the :param sn: :param simIa: :param dz: :return: """ from matplotlib import cm import mpltools from pytools import plotsetup if 'FLT' not in simIa.__dict__: simIa.getLightCurves() zbins, c7Ipts, c8Ipts, cPNpts = get_colors_binned_by_z(sn, simIa, dz) plotsetup.fullpaperfig(1, [5, 5]) pl.clf() ax1 = pl.gca() # ax1.plot(QH,PN, ls=' ', marker='o',color='k', alpha=0.3 ) mpltools.color.cycle_cmap(len(zbins), cmap=cm.gist_rainbow_r, ax=ax1) for iz in range(len(zbins) - 1): z0, z1 = zbins[iz], zbins[iz + 1] #if dz>=0.1 : zmid = round(np.mean([z0,z1]),1) #elif dz>=0.01 : zmid = round(np.mean([z0,z1]),2) ax1.plot(c7Ipts[iz], cPNpts[iz], marker='o', alpha=0.3, ls=' ', mew=0, label='%.2f-%.2f' % (z0, z1)) ax1.legend(loc='upper left', ncol=2, numpoints=1, frameon=False, handletextpad=0.3, handlelength=0.2) ax1.set_xlabel('F763M-F814W') ax1.set_ylabel('F139M-F140W') # plotPhot(label=True) ax1.set_xlim(-0.8, 0.8) ax1.set_ylim(-0.8, 0.8) fig = pl.gcf() fig.subplots_adjust(bottom=0.12, left=0.16, right=0.95, top=0.95) pl.draw()
def plotzpoints(sn,simIa,dz=0.1): """ plot the :param sn: :param simIa: :param dz: :return: """ from matplotlib import cm from mpltools import color from pytools import plotsetup if 'FLT' not in simIa.__dict__ : simIa.getLightCurves() zbins = np.arange( sn.z - sn.zerr, sn.z + sn.zerr + dz, dz ) izbinarg = np.digitize( simIa.z, zbins, right=True )-1 iQ = np.where( simIa.FLT=='Q' ) iH = np.where( simIa.FLT=='H' ) iP = np.where( simIa.FLT=='P' ) iN = np.where( simIa.FLT=='N' ) Q,H,P,N = simIa.MAG[iQ],simIa.MAG[iH],simIa.MAG[iP],simIa.MAG[iN] QH = Q-H PN = P-N plotsetup.fullpaperfig( 1, [5,5] ) pl.clf() ax1 = pl.gca() # ax1.plot(QH,PN, ls=' ', marker='o',color='k', alpha=0.3 ) color.cycle_cmap( len(zbins), cmap=cm.gist_rainbow_r, ax=ax1) for iz in range(len(zbins)-1) : z0, z1 = zbins[iz],zbins[iz+1] QHz = QH[izbinarg==iz] PNz = PN[izbinarg==iz] if dz>=0.1 : zmid = round(np.mean([z0,z1]),1) elif dz>=0.01 : zmid = round(np.mean([z0,z1]),2) ax1.plot(QHz,PNz, marker='o', alpha=0.3, ls=' ',mew=0,label='%.1f-%.1f'%(z0,z1) ) ax1.legend(loc='upper left', ncol=2, numpoints=1, frameon=False, handletextpad=0.3, handlelength=0.2 ) ax1.set_xlabel('F153M-F160W') ax1.set_ylabel('F139M-F140W') plotPhot(label=True) ax1.set_xlim(-0.35,0.53) ax1.set_ylim(-0.35,0.53) fig = pl.gcf() fig.subplots_adjust(bottom=0.12,left=0.16,right=0.95,top=0.95) pl.draw()
def colfaxfig(simIa=None, simIbc=None, simII=None, contours=True, redshiftcircle=True, clobber=False, **plotargs): from pytools import plotsetup from matplotlib import pyplot as pl from mpltools import color from matplotlib import cm fig = plotsetup.fullpaperfig([8, 4]) simIa, simIbc, simII = doublecircle('colfax', simIa, simIbc, simII, clobber=clobber, circle1bands=['f139m', 'f127m'], circle2bands=['f139m', 'f153m'], contours=contours, redshiftcircle=redshiftcircle, **plotargs) fig = pl.gcf() ax1, ax2 = fig.axes fig.subplots_adjust(left=0.1, bottom=0.18, right=0.89, top=0.95, wspace=0.1) ax1.set_xlim(-0.5, 0.4) ax1.set_ylim(-0.7, 0.4) ax2.set_xlim(-0.5, 0.4) ax2.set_ylim(-0.4, 0.4) ax2.text( 0.95, 0.95, 'GND12Col', transform=ax2.transAxes, ha='right', va='top', color='k', fontsize=15, ) ax2.yaxis.labelpad = 20 colorlist = color.colors_from_cmap(2, cm.jet) ax1.text(0.15, 0.17, 'z=1.9', ha='left', va='top', color=colorlist[0]) ax1.text(-0.23, 0.32, 'z=2.4', ha='left', va='top', color=colorlist[1]) pl.draw() return simIa, simIbc, simII
def plotzpoints(sn,simIa,dz=0.05): """ plot the :param sn: :param simIa: :param dz: :return: """ from matplotlib import cm import mpltools from pytools import plotsetup if 'FLT' not in simIa.__dict__ : simIa.getLightCurves() zbins, c7Ipts, c8Ipts, cPNpts = get_colors_binned_by_z(sn,simIa,dz) plotsetup.fullpaperfig( 1, [5,5] ) pl.clf() ax1 = pl.gca() # ax1.plot(QH,PN, ls=' ', marker='o',color='k', alpha=0.3 ) mpltools.color.cycle_cmap( len(zbins), cmap=cm.gist_rainbow_r, ax=ax1) for iz in range(len(zbins)-1) : z0, z1 = zbins[iz],zbins[iz+1] #if dz>=0.1 : zmid = round(np.mean([z0,z1]),1) #elif dz>=0.01 : zmid = round(np.mean([z0,z1]),2) ax1.plot(c7Ipts[iz],cPNpts[iz], marker='o', alpha=0.3, ls=' ', mew=0,label='%.2f-%.2f'%(z0,z1) ) ax1.legend(loc='upper left', ncol=2, numpoints=1, frameon=False, handletextpad=0.3, handlelength=0.2 ) ax1.set_xlabel('F763M-F814W') ax1.set_ylabel('F139M-F140W') # plotPhot(label=True) ax1.set_xlim(-0.8,0.8) ax1.set_ylim(-0.8,0.8) fig = pl.gcf() fig.subplots_adjust(bottom=0.12,left=0.16,right=0.95,top=0.95) pl.draw()
def mkfig3d( simdata, dz=0.05, snanadatfile=_SNANADATFILE, ): """ Plot the results of a SNANA monte carlo simulation as a 3-D circle diagram. :param simdata: :param dz: :param snanadatfile: :return: """ from mpl_toolkits.mplot3d.axes3d import Axes3D from matplotlib import cm import mpltools from pytools import plotsetup fig = plotsetup.fullpaperfig( 1, [10,10] ) sn = stardust.SuperNova(snanadatfile) simIa, simIbc, simII = simdata ax1 = fig.add_axes( [0.12,0.12,0.85,0.85], projection='3d') c7I,c8I, cPN = get_colors( simII ) ax1.plot3D(c7I,c8I,cPN, marker='o', color='k', alpha=1, ls=' ', mew=0,label='Type II' ) c7I,c8I, cPN = get_colors( simIbc ) ax1.plot3D(c7I,c8I,cPN, marker='o', color='sienna', alpha=1, ls=' ', mew=0,label='Type Ibc' ) zbins, c7I,c8I, cPN = get_colors_binned_by_z( sn, simIa, dz=dz ) mpltools.color.cycle_cmap( len(zbins), cmap=cm.gist_rainbow_r, ax=ax1) for iz in range(len(zbins)-1) : z0, z1 = zbins[iz],zbins[iz+1] #if dz>=0.1 : zmid = round(np.mean([z0,z1]),1) #elif dz>=0.01 : zmid = round(np.mean([z0,z1]),2) ax1.plot3D(c7I[iz],c8I[iz],cPN[iz], marker='o', alpha=1, ls=' ', mew=0,label='%.2f-%.2f'%(z0,z1) ) ax1.set_xlim(-0.1,0.5) ax1.set_ylim(-0.4,0.2) ax1.set_zlim(-0.3,0.3) ax1.legend(loc='upper left', ncol=2, numpoints=1, frameon=False, handletextpad=0.3, handlelength=0.2 ) ax1.set_xlabel('F763M-F814W') ax1.set_ylabel('F845M-F140W') ax1.set_zlabel('F139M-F140W')
def mk_multisurvey_fig(): fig1 = plotsetup.fullpaperfig(figsize=[12,6]) fig1.clf() for survey, zbins, mfc, mec in zip( ['Deep','Med','Wide'], [np.arange(0.8,2.51,0.25),np.arange(0.3,1.25,0.2), np.arange(0.01,0.62,0.2)], [cp.lightred, cp.teal, cp.lightblue], [cp.darkred, cp.darkgreen, cp.darkblue]): mk_class_fig('%s_class.dat' % survey.lower(), zbins=zbins, mfc=mfc, mec=mec, color=mec, marker='D') ax = fig1.add_subplot(2,4,1) txt = ax.text(0.4, 0.7, 'Wide', ha='right', va='top', fontsize=15, color=cp.darkblue) txt = ax.text(0.6, 0.65, 'Med', ha='left', va='top', fontsize=15, color=cp.teal) txt = ax.text(1.5, 0.55, 'Deep', ha='center', va='top', fontsize=15, color=cp.darkred) pl.savefig(os.path.expanduser("~/Desktop/wfirst_classification_test.pdf"))
def sncosmo_circlefig( simIa=None, simCC=None, simIapkl='colfax_SncosmoSim_Ia.pkl', simCCpkl='colfax_SncosmoSim_CC.pkl', z_range=[1.9,2.35], nsim=1000, verbose=True, clobber=False ): """ Construct a color-color circle figure for SN Colfax, with observed photometry included. :param simIa: :param simCC: :param simIapkl: :param simCCpkl: :param z_range: :param nsim: :param verbose: :param clobber: :return: """ import medband_classtest import os import cPickle from matplotlib import pyplot as pl # from matplotlib import patheffects as pe import numpy as np from pytools import plotsetup fig = plotsetup.fullpaperfig( 1, figsize=[8,4]) pl.ioff() mjdpk = 56078 mjdmedband = 56084 t0_range = [ mjdmedband-mjdpk-3,mjdmedband-mjdpk+3 ] t0 = mjdmedband-mjdpk if simIa is not None : pass elif os.path.isfile( simIapkl ) and not clobber>1 : if verbose: print("Loading Ia simulation from pickle : %s"%simIapkl) fin = open( simIapkl, 'rb' ) simIa = cPickle.load( fin ) fin.close() else : if verbose: print("Running a new Ia simulation, then saving to pickle : %s"%simIapkl) simIa = medband_classtest.SncosmoSim( 'Ia' , z_range=z_range, t0_range=t0_range, nsim=nsim ) fout = open( simIapkl, 'wb' ) cPickle.dump( simIa, fout, protocol=-1 ) fout.close() if simCC is not None : pass elif os.path.isfile( simCCpkl ) and not clobber>1 : if verbose: print("Loading CC simulation from pickle : %s"%simCCpkl) fin = open( simCCpkl, 'rb' ) simCC = cPickle.load(fin) fin.close() else : if verbose: print("Running a new CC simulation, then saving to pickle : %s"%simCCpkl) simCC = medband_classtest.SncosmoSim( 'CC' , z_range=z_range, t0_range=t0_range, nsim=nsim ) fout = open( simCCpkl, 'wb' ) cPickle.dump( simCC, fout, protocol=-1 ) fout.close() import getredshift plotcontours( simIa, simCC, plotstyle='points' ) fig = pl.gcf() ax1 = fig.add_subplot(1,2,1) mkcirclepoints(zrange=z_range, t0=t0, colorselect=[1,0], coloredaxislabels=False, marker='o' ) ax2 = fig.add_subplot(1,2,2, sharex=ax1) mkcirclepoints(zrange=z_range, t0=t0, colorselect=[1,2], coloredaxislabels=False, marker='o' ) mag4 = { # using the multi-epoch stack for the psf model 'f127m':25.6728, 'f125w':26.1096, 'f139m':25.5964, 'f140w':25.7223, 'f153m':25.7903, 'f160w':25.9248, } magerr = { # using the drop-and-recover psf fitting err method 'f125w':0.126760, 'f127m':0.102688, 'f139m':0.132692, 'f140w':0.043144, 'f153m':0.170073, 'f160w':0.117535, } mag2 = { # Using steve's 0.3"-aperture photometry 'f127m':25.668, 'f125w':26.172, 'f139m':25.601, 'f140w':25.747, 'f153m':25.769, 'f160w':25.958, } magerr2 = { # Using steve's 0.3"-aperture photometry 'f127m':0.095, 'f125w':0.118, 'f139m':0.096, 'f140w':0.063, 'f153m':0.125, 'f160w':0.129, } mag = mag6 f25 = {} ferr25 = {} for k in mag.keys() : f25[k] = 10**(-0.4*(mag[k]-25.)) ferr25[k] = magerr[k] * f25[k] / 2.5*np.log10(np.e) deltamag = { 'f127m':mag['f127m']-mag['f125w'], 'f139m':mag['f139m']-mag['f140w'], 'f153m':mag['f153m']-mag['f160w'], } deltamagerr = { 'f127m':np.sqrt(magerr['f127m']**2+magerr['f125w']**2), 'f139m':np.sqrt(magerr['f139m']**2+magerr['f140w']**2), 'f153m':np.sqrt(magerr['f153m']**2+magerr['f160w']**2), } ax1.errorbar( deltamag['f139m'], deltamag['f127m'], deltamagerr['f127m'], deltamagerr['f139m'], marker='D', ms=10, elinewidth=2, capsize=0, color='darkorange' ) ax2.errorbar( deltamag['f139m'], deltamag['f153m'], deltamagerr['f153m'], deltamagerr['f139m'], marker='D', ms=10, elinewidth=2, capsize=0, color='darkorange' ) ax1.set_xlim( -0.35, 0.3 ) ax1.set_ylim( -0.7, 0.22 ) ax2.set_ylim( -0.4, 0.3 ) ax2.text( deltamag['f139m']+0.05, deltamag['f153m']-0.05, 'GND12Col' , ha='left',va='top', color='darkorange',fontsize=15,) # path_effects=[pe.withStroke( linewidth=3,foreground='k')] ) # pl.legend( loc='upper right', numpoints=2, handlelength=0.3) pl.draw() pl.ion() return( simIa, simCC )
def sncosmo_circlefig(simIa=None, simCC=None, simIapkl='colfax_SncosmoSim_Ia.pkl', simCCpkl='colfax_SncosmoSim_CC.pkl', z_range=[1.9, 2.35], nsim=1000, verbose=True, clobber=False): """ Construct a color-color circle figure for SN Colfax, with observed photometry included. :param simIa: :param simCC: :param simIapkl: :param simCCpkl: :param z_range: :param nsim: :param verbose: :param clobber: :return: """ import medband_classtest import os import cPickle from matplotlib import pyplot as pl # from matplotlib import patheffects as pe import numpy as np from pytools import plotsetup fig = plotsetup.fullpaperfig(1, figsize=[8, 4]) pl.ioff() mjdpk = 56078 mjdmedband = 56084 t0_range = [mjdmedband - mjdpk - 3, mjdmedband - mjdpk + 3] t0 = mjdmedband - mjdpk if simIa is not None: pass elif os.path.isfile(simIapkl) and not clobber > 1: if verbose: print("Loading Ia simulation from pickle : %s" % simIapkl) fin = open(simIapkl, 'rb') simIa = cPickle.load(fin) fin.close() else: if verbose: print("Running a new Ia simulation, then saving to pickle : %s" % simIapkl) simIa = medband_classtest.SncosmoSim('Ia', z_range=z_range, t0_range=t0_range, nsim=nsim) fout = open(simIapkl, 'wb') cPickle.dump(simIa, fout, protocol=-1) fout.close() if simCC is not None: pass elif os.path.isfile(simCCpkl) and not clobber > 1: if verbose: print("Loading CC simulation from pickle : %s" % simCCpkl) fin = open(simCCpkl, 'rb') simCC = cPickle.load(fin) fin.close() else: if verbose: print("Running a new CC simulation, then saving to pickle : %s" % simCCpkl) simCC = medband_classtest.SncosmoSim('CC', z_range=z_range, t0_range=t0_range, nsim=nsim) fout = open(simCCpkl, 'wb') cPickle.dump(simCC, fout, protocol=-1) fout.close() import getredshift plotcontours(simIa, simCC, plotstyle='points') fig = pl.gcf() ax1 = fig.add_subplot(1, 2, 1) mkcirclepoints(zrange=z_range, t0=t0, colorselect=[1, 0], coloredaxislabels=False, marker='o') ax2 = fig.add_subplot(1, 2, 2, sharex=ax1) mkcirclepoints(zrange=z_range, t0=t0, colorselect=[1, 2], coloredaxislabels=False, marker='o') mag4 = { # using the multi-epoch stack for the psf model 'f127m':25.6728, 'f125w':26.1096, 'f139m':25.5964, 'f140w':25.7223, 'f153m':25.7903, 'f160w':25.9248, } magerr = { # using the drop-and-recover psf fitting err method 'f125w':0.126760, 'f127m':0.102688, 'f139m':0.132692, 'f140w':0.043144, 'f153m':0.170073, 'f160w':0.117535, } mag2 = { # Using steve's 0.3"-aperture photometry 'f127m':25.668, 'f125w':26.172, 'f139m':25.601, 'f140w':25.747, 'f153m':25.769, 'f160w':25.958, } magerr2 = { # Using steve's 0.3"-aperture photometry 'f127m':0.095, 'f125w':0.118, 'f139m':0.096, 'f140w':0.063, 'f153m':0.125, 'f160w':0.129, } mag = mag6 f25 = {} ferr25 = {} for k in mag.keys(): f25[k] = 10**(-0.4 * (mag[k] - 25.)) ferr25[k] = magerr[k] * f25[k] / 2.5 * np.log10(np.e) deltamag = { 'f127m': mag['f127m'] - mag['f125w'], 'f139m': mag['f139m'] - mag['f140w'], 'f153m': mag['f153m'] - mag['f160w'], } deltamagerr = { 'f127m': np.sqrt(magerr['f127m']**2 + magerr['f125w']**2), 'f139m': np.sqrt(magerr['f139m']**2 + magerr['f140w']**2), 'f153m': np.sqrt(magerr['f153m']**2 + magerr['f160w']**2), } ax1.errorbar(deltamag['f139m'], deltamag['f127m'], deltamagerr['f127m'], deltamagerr['f139m'], marker='D', ms=10, elinewidth=2, capsize=0, color='darkorange') ax2.errorbar(deltamag['f139m'], deltamag['f153m'], deltamagerr['f153m'], deltamagerr['f139m'], marker='D', ms=10, elinewidth=2, capsize=0, color='darkorange') ax1.set_xlim(-0.35, 0.3) ax1.set_ylim(-0.7, 0.22) ax2.set_ylim(-0.4, 0.3) ax2.text( deltamag['f139m'] + 0.05, deltamag['f153m'] - 0.05, 'GND12Col', ha='left', va='top', color='darkorange', fontsize=15, ) # path_effects=[pe.withStroke( linewidth=3,foreground='k')] ) # pl.legend( loc='upper right', numpoints=2, handlelength=0.3) pl.draw() pl.ion() return (simIa, simCC)
def mkresidplot(datfile='ps1union.dat', ageaxis=True, highz='Malmquist', highzlabels=True, lensfactor=0.093, presfig=False, bigtext=False): """ construct the hubble residual plot """ from pytools import plotsetup, cosmo, colorpalette as cp from matplotlib import patches import numpy as np from matplotlib import pyplot as pl from scipy.interpolate import interp1d if presfig: plotsetup.presfig(wide=True) else: plotsetup.fullpaperfig([8.5, 4.5], bigtext=bigtext) clf() highz = highz.lower() if highz == 'malmquist': zlim = [0, 2.78] elif highz == 'rodney': zlim = [0, 3.49] if presfig: zlim = [0, 3.78] else: zlim = [0, 2.45] fig = gcf() if presfig: bottomAxeslim = [0.13, 0.18, 0.85, 0.65] else: bottomAxeslim = [0.09, 0.12, 0.88, 0.75] ax1 = fig.add_axes(bottomAxeslim, frameon=True, alpha=0.0, label='axes1') ax1top = ax1.twiny() # read in redshifts and distances hubbledat, H0, Om, MB = gethubbledat(datfile) if lensfactor: # muerr = 0.093z : Holz & Linder, 2005 # muerr = 0.055z : Jonsson+ 2012 hubbledat['muerr'] = np.sqrt(hubbledat['muerr']**2 + (lensfactor * hubbledat['z'])**2) # plot ground data colordict = { 'low-z': cp.purple, 'sdss': cp.lightblue, 'ps1': cp.darkblue, 'snls': cp.darkgreen, 'hstacs': cp.darkorange, 'hstwfc3': cp.medred, 'hstwfc3a': cp.medred, 'hstwfc3b': cp.darkred, 'jwst': cp.darkgrey, } elw = 0.75 cs = 0 for survey in ['low-z', 'sdss', 'snls', 'ps1', 'hstacs']: isurvey = where((hubbledat['survey'] == survey) & (hubbledat['spec'] > 0)) ax1.errorbar(hubbledat['z'][isurvey], hubbledat['mures'][isurvey], hubbledat['muerr'][isurvey], hubbledat['zerr'][isurvey], marker='o', ls=' ', mew=0.01, markersize=5, color=colordict[survey], mfc=colordict[survey], ecolor=colordict[survey], elinewidth=elw, capsize=cs, alpha=0.7) if highz: # get the high-z SN fits from Dan labeldict = {#'primo':'Rodney+ 2012', #'wilson':'Jones, Rodney+ 2013', 'stone':'GND13Sto', 'colfax':'GND12Col', } if highz == 'rodney': labeldict = { 'primo': 'Rodney+ 2012', 'wilson': 'Jones, Rodney+ 2013', 'stone': 'Rodney+ in prep', 'colfax': 'Rodney+ in prep', } for survey, namelist in zip( ['hstwfc3a', 'hstwfc3b'], [['primo', 'wilson'], ['stone', 'colfax']]): color = colordict[survey] for name in namelist: if name not in hubbledat['name']: continue iname = np.where(hubbledat['name'] == name)[0][0] z, zerr = hubbledat['z'][iname], hubbledat['zerr'][iname] mu, muerr = hubbledat['mures'][iname], hubbledat['muerr'][ iname] if name == 'colfax': # Not applying a lensing correction for mu=1.04 +-0.03 : 0.0426 +- 0.031 mag icol = np.where( [n.startswith('col') for n in hubbledat['name']])[0] mucol = interp1d(hubbledat['z'][icol], hubbledat['mures'][icol]) ax1.plot([2.16, 2.19, 2.21, 2.24, 2.26, 2.28], mucol([2.16, 2.19, 2.21, 2.24, 2.26, 2.28]), color=color, lw=0.75, ls='-') ax1.errorbar(2.26, mucol(2.26), muerr, marker='D', ls=' ', mew=0.01, markersize=8, color=color, mfc=color, ecolor=color, elinewidth=elw, capsize=cs, alpha=1) z = 2.26 mu = mucol(2.26) elif name == 'stone': # not applying a lensing correction for stone: # mu = mu + 0.0215; muerr = np.sqrt( muerr**2 + 0.02**2 ) isto = np.where( [n.startswith('stone') for n in hubbledat['name']])[0] musto = interp1d(hubbledat['z'][isto], hubbledat['mures'][isto]) ax1.plot(np.arange(1.66, 2.01, 0.02), musto(np.arange(1.66, 2.01, 0.02)), color=color, lw=0.75, ls='--') ax1.errorbar(1.80, musto(1.80), muerr, zerr, marker='D', ls=' ', mew=0.01, markersize=8, color=color, mfc=color, ecolor=color, elinewidth=elw, capsize=cs, alpha=1) z = 1.80 mu = musto(1.80) else: ax1.errorbar(z, mu, muerr, zerr, marker='D', ls=' ', mew=0.01, markersize=8, color=color, mfc=color, ecolor=color, elinewidth=elw, capsize=cs, alpha=1) if highzlabels and name in labeldict: # ax1.text( z-0.035, mu+0.07, labeldict[name], if name == 'primo': ax1.text( z - 0.05, mu + 0.035, labeldict[name], color=color, # backgroundcolor='w', va='bottom', ha='center', rotation=90) else: ax1.text( z, mu + muerr + 0.07, labeldict[name], color=color, # backgroundcolor='w', va='bottom', ha='center', rotation=90) # plot the lcdm cosmology ax1.axhline(0, color='0.4', ls='-') # plot extreme w' zLCDM = np.arange(0.01, 5, 0.05) muLCDM = cosmo.mu(zLCDM, H0=H0, Om=Om, Ode=(1 - Om), w0=-1., wa=0) #muextremeDE = cosmo.mu( z, H0=_H0, Om=_Om, Ode=(1-_Om), w0=-0.7, wa=-2) mu1 = cosmo.mu(zLCDM, H0=H0, Om=Om - 0.015, Ode=(1 - Om + 0.015), w0=-1.2, wa=0.7) mu2 = cosmo.mu(zLCDM, H0=H0, Om=Om + 0.055, Ode=(1 - Om - 0.055), w0=-0.65, wa=-2.2) ax1.fill_between(zLCDM, mu1 - muLCDM, mu2 - muLCDM, color='k', alpha=0.2, lw=0.01, zorder=10) if not presfig: ax1.text(0.08, -0.8, 'low-z', fontsize=(presfig and 'small') or 10.5, ha='center', color=colordict['low-z']) ax1.text(0.25, -0.85, 'SDSS', fontsize=(presfig and 'small') or 10.5, ha='center', color=colordict['sdss']) ax1.text(0.5, -0.9, 'PS1', fontsize=(presfig and 'small') or 10.5, ha='center', color=colordict['ps1']) ax1.text(0.75, -0.95, 'SNLS', fontsize=(presfig and 'small') or 10.5, ha='center', color=colordict['snls']) ax1.text(1.25, -0.8, 'HST+ACS', fontsize=(presfig and 'small') or 10.5, ha='center', color=colordict['hstacs']) ax1.text(1.95, -0.95, 'HST+WFC3', fontsize=(presfig and 'small') or 10.5, ha='center', color=colordict['hstwfc3b']) lowzRect = patches.Rectangle([0.0, -0.85], 0.08, 0.03, fill=True, lw=0, alpha=0.3, color=colordict['low-z']) sdssRect = patches.Rectangle([0.06, -0.9], 0.34, 0.03, fill=True, lw=0, alpha=0.3, color=colordict['sdss']) ps1Rect = patches.Rectangle([0.1, -0.95], 0.5, 0.03, fill=True, lw=0, alpha=0.3, color=colordict['ps1']) snlsRect = patches.Rectangle([0.15, -1.0], 0.9, 0.03, fill=True, lw=0, alpha=0.3, color=colordict['snls']) acsRect = patches.Rectangle([0.60, -0.85], 1.15, 0.03, fill=True, lw=0, alpha=0.3, color=colordict['hstacs']) wfc3Rect = patches.Rectangle([1.20, -1.0], 1.1, 0.03, fill=True, lw=0, alpha=0.3, color=colordict['hstwfc3b']) ax1.add_patch(lowzRect) ax1.add_patch(sdssRect) ax1.add_patch(ps1Rect) ax1.add_patch(snlsRect) ax1.add_patch(acsRect) ax1.add_patch(wfc3Rect) if highz == 'rodney': if not presfig: #ffsnRect = patches.Rectangle( [2.30,-1.0], 0.7, 0.03, fill=False,lw=1, alpha=1.0, color=colordict['hstwfc3b'] ) jwstRect = patches.Rectangle([2.00, -0.85], 2.0, 0.03, fill=False, lw=1, alpha=1.0, color=colordict['jwst']) #ax1.add_patch( ffsnRect ) ax1.add_patch(jwstRect) #ax1.text( 2.5, -0.95, '+ lensing',fontsize=10.5, ha='center', color=colordict['hstwfc3b'] ) ax1.text(3.0, -0.78, 'JWST', fontsize=(presfig and 'medium') or 10.5, ha='center', color=colordict['jwst']) color = cp.bluegray ax1.arrow(2.5, 0.15, 0.3, 0.0, fc=color, ec=color, head_width=0.05, head_length=0.0, overhang=0.0) ax1.plot(2.5, 0.15, marker='o', mfc='w', mec=color) ax1.text(2.49, 0.19, '0.3 Gyr', ha='left', va='bottom', color=color) ax1.text(2.82, 0.15, 'z=2.8', ha='left', va='center', color=color) color = cp.teal ax1.arrow(2.5, 0.45, 0.55, 0.0, fc=color, ec=color, head_width=0.05, head_length=0.08, overhang=0.25, length_includes_head=True) ax1.plot(2.5, 0.45, marker='o', mfc='w', mec=color) ax1.text(2.6, 0.48, '1 Gyr', ha='left', va='bottom', color=color) ax1.text(3.08, 0.45, 'z=3.8', ha='left', va='center', color=color) color = cp.coral ax1.arrow(2.5, 0.7, 0.75, 0.0, fc=color, ec=color, head_width=0.05, head_length=0.08, overhang=0.25, length_includes_head=True) ax1.plot(2.5, 0.7, marker='o', mfc='w', mec=color) ax1.text(2.7, 0.72, '2 Gyr', ha='left', va='bottom', color=color) ax1.text(3.28, 0.7, 'z=8.3', ha='left', va='center', color=color) if not presfig: ax1.text(2.5, 0.7, 'z=2.5', ha='center', va='bottom', color='0.4') ax1.text(2.5, 0.8, 'explosion', ha='center', va='bottom', color='0.3') #, fontsize=10.5 ) ax1.text(2.85, 0.8, 'delay', ha='center', va='bottom', color='0.3') #, fontsize=10.5 ) ax1.text(3.15, 0.8, 'formation', ha='left', va='bottom', color='0.3') #, fontsize=10.5 ) if presfig: ax1.text( 0.82, 0.46, 'flat $\Lambda$CDM', color='0.1', ha='right', va='top', transform=ax1.transAxes) # , fontsize=10.5, backgroundcolor='w' ) else: ax1.text( 0.99, 0.56, 'flat $\Lambda$CDM', color='0.1', ha='right', va='top', transform=ax1.transAxes) # , fontsize=10.5, backgroundcolor='w' ) ax1.text(0.99, 0.46, '$\pm$95\% conf. \non $w_0 , w_a$', color='0.4', ha='right', va='top', transform=ax1.transAxes) # , fontsize=10.5,backgroundcolor='w' ) # ax1.text( 0.95, 0.95, 'Open Symbols:\n no spec. confirmation', color='0.5', transform=ax1.transAxes, ha='right',va='top' ) ax1.set_xlabel('Redshift', fontsize='large') # ax1.set_ylabel('$\mu_{observed}$ - $\mu_{\Lambda CDM}$') if highz == 'rodney': ax1.set_ylabel(r'$m_B^{\prime} - m_{\Lambda CDM}$', fontsize='large') else: ax1.set_ylabel(r'$m_B + \alpha x_1 - \beta c - m_{\Lambda CDM}$', fontsize='large') if presfig: ax1.yaxis.set_label_coords(-0.08, 0.65) # mulim = array( [33,46.5] ) muresidlim = array([-1.05, 1.05]) # zlim = array( [0.0,3.49] ) ax1.xaxis.set_ticks([ 0.1, ] + np.arange(0.5, zlim[-1], 0.5).tolist()) ax1.set_xlim(zlim) ax1.set_ylim(muresidlim) from pytools import colorpalette as cp if highz.lower() == 'malmquist': # z, dm, tvis = get_visibility_time_grid( 0.5, x1=0., c=0. ) # contourlevels = [50] # ax1.contour( z, dm, tvis, levels=contourlevels, colors=cp.darkbluegray, linestyles='dashed' ) z5050, dm5050 = get_visibility_time_line(tvislim=50, deteff_threshold=0.5, x1=0, c=0, zrange=[1.0, 3.0]) ax1.fill_between(z5050, dm5050, np.ones(len(z5050)) * muresidlim[1] + 0.05, color=cp.bluegray, zorder=-200, alpha=0.3) # ax1.plot( z5050, dm5050, color='0.8') z050, dm050 = get_visibility_time_line(tvislim=0.01, deteff_threshold=0.5, x1=0, c=0, zrange=[1.7, 3.0]) ax1.fill_between(z050, dm050, np.ones(len(z050)) * muresidlim[1] + 0.05, color=cp.darkbluegray, zorder=-100, alpha=0.3) ax1.text(1.53, 0.92, 't$_{\\rm vis}<$50 days', ha='left', va='top', color=cp.darkgrey) ax1.text(2.75, 0.92, 'undetectable', ha='right', va='top', color=cp.darkgrey) if highz == 'evolution': # plot SNIa evolution minmassdict = progenitorMinMassLines(zform=11) z = minmassdict['z'] for key, color in zip(['mm25', 'mm15', 'mm04'], ['r', 'g', 'b']): minmass = minmassdict[key] mavez = Mave(_MAXMASS, minmass) ax1.plot(z, (mavez - mavez[0]) * _DMUDMASS, ls='-', color=color) ax1.text(2.5, -0.95, '+ lensing', fontsize=10.5, ha='center', color=colordict['hstwfc3b']) ax1.text(3.0, -0.78, 'JWST', fontsize=10.5, ha='center', color=colordict['jwst']) color = cp.bluegray ax1.arrow(2.5, 0.25, 0.3, 0.0, fc=color, ec=color, head_width=0.05, head_length=0.0, overhang=0.0) ax1.plot(2.5, 0.25, marker='o', mfc='w', mec=color) ax1.text(2.55, 0.27, '0.3 Gyr', ha='left', va='bottom', color=color) ax1.text(2.82, 0.25, 'z=2.8', ha='left', va='center', color=color) color = cp.teal ax1.arrow(2.5, 0.45, 0.55, 0.0, fc=color, ec=color, head_width=0.05, head_length=0.08, overhang=0.25, length_includes_head=True) ax1.plot(2.5, 0.45, marker='o', mfc='w', mec=color) ax1.text(2.65, 0.47, '1 Gyr', ha='left', va='bottom', color=color) ax1.text(3.08, 0.45, 'z=3.8', ha='left', va='center', color=color) color = cp.coral ax1.arrow(2.5, 0.65, 0.75, 0.0, fc=color, ec=color, head_width=0.05, head_length=0.08, overhang=0.25, length_includes_head=True) ax1.plot(2.5, 0.65, marker='o', mfc='w', mec=color) ax1.text(2.75, 0.67, '2 Gyr', ha='left', va='bottom', color=color) ax1.text(3.28, 0.65, 'z=8.3', ha='left', va='center', color=color) ax1.text(2.5, 0.7, 'z=2.5', ha='center', va='bottom', color='0.4') ax1.text(2.5, 0.8, 'explosion', ha='center', va='bottom', color='0.3', fontsize=10.5) ax1.text(2.85, 0.8, 'delay', ha='center', va='bottom', color='0.3', fontsize=10.5) ax1.text(3.15, 0.8, 'formation', ha='left', va='bottom', color='0.3', fontsize=10.5) if ageaxis: if highz == 'rodney': # ax1top.set_xlabel( 'age of Universe (Gyr)',fontsize='large',x=0.15,ha='left') ageticks = np.array([13, 9, 6, 4, 3, 2]) else: ageticks = np.array([13, 9, 6, 4, 3]) ax1top.set_xlabel('Age of Universe (Gyr)', fontsize='large') ax1top.set_xlim(zlim) ztickloctop = cosmo.zfromt(ageticks) ax1top.xaxis.set_ticks(ztickloctop) ax1top.xaxis.set_ticklabels(ageticks) pl.draw()
def plot_light_curve_fit_from_SNANA(snid='colfax', plotmags=False): """ make a plot showing the light curve fit, extracted from a SNANA output .TEXT file generated by D.Scolnic""" from pytools import plotsetup, colorpalette as cp from astropy.io import ascii import numpy as np from matplotlib import pyplot as pl from scipy.interpolate import interp1d from matplotlib import ticker import os import sys from hstphot import hstzpt alpha2filter = { 'H': 'f160w', 'N': 'f140w', 'J': 'f125w', 'Y': 'f105w', 'Z': 'f850l', 'I': 'f814w', 'V': 'f606w', 'L': 'f098m', 'O': 'f127m', 'P': 'f139m', 'Q': 'f153m', } colordict = { 'H': 'k', 'J': cp.darkgold, 'Y': cp.cadetblue, 'N': cp.darkgreen, 'V': cp.coral } fluxdat = ascii.read('CANDELs-%s.LCPLOT.TEXT' % snid) name = fluxdat['col1'] mjd = fluxdat['col2'] tobs = fluxdat['col3'] fluxcal = fluxdat['col4'] fluxcalerr = fluxdat['col5'] obsflag = fluxdat['col6'] bandletter = fluxdat['col7'] flux = fluxcal * 0.1 fluxerr = fluxcalerr * 0.1 # mag = np.where( flux>0, -2.5*np.log10( flux ) + 25, 35 ) # magerr = np.where( flux>0, 1.0857 * fluxerr / flux, 0.2 ) # medbanddict = {'f105w':'f098m','f125w':'f127m', 'f140w':'f139m', 'f160w':'f153m'} colors = [cp.purple, cp.bluegray, cp.darkgreen, cp.red] plotsetup.fullpaperfig([8, 3]) pl.clf() fig = pl.gcf() mjdmin = mjd.min() - 10 mjdmax = mjd.max() + 25 mjdmod = np.arange(mjdmin, mjdmax, 1) if snid == 'colfax': ymax = 0.7 ymaxMB = 0.3 mjdmin = 56025 mjdmax = 56220 z, mjdpeak = 2.1, 56080. snlabel = 'GND12Col' elif snid == 'stone': ymax = 1.2 ymaxMB = 0.35 mjdmin = 56430 mjdmax = 56600 z, mjdpeak = 1.8, 56485. snlabel = 'GND13Sto' trestmin = (mjdmin - mjdpeak) / (1 + z) trestmax = (mjdmax - mjdpeak) / (1 + z) ax1w = pl.subplot2grid([4, 3], [0, 0], rowspan=3) ax2w = pl.subplot2grid([4, 3], [0, 1], rowspan=3, sharex=ax1w, sharey=ax1w) ax3w = pl.subplot2grid([4, 3], [0, 2], rowspan=3, sharex=ax1w, sharey=ax1w) ax1m = pl.subplot2grid([4, 3], [3, 0], sharex=ax1w) ax2m = pl.subplot2grid([4, 3], [3, 1], sharex=ax1w, sharey=ax1m) ax3m = pl.subplot2grid([4, 3], [3, 2], sharex=ax1w, sharey=ax1m) iax = 0 for bbl, mbl, color in zip(['Y', 'J', 'N', 'H'], ['L', 'O', 'P', 'Q'], colors): if bbl not in bandletter: continue iax += 1 filternamew = alpha2filter[bbl].upper() filternamem = alpha2filter[mbl].upper() if iax == 1: axw = ax1w axm = ax1m axw.text(0.05, 0.92, snlabel, color='k', fontsize='large', fontweight='heavy', ha='left', va='top', transform=axw.transAxes) # axw.text( -0.28, 1.2, snlabel, backgroundcolor='w', color='k', fontsize='large', fontweight='heavy', ha='left',va='top', transform=axw.transAxes, zorder=1000 ) axw.set_ylabel('flux (zp$_{AB}$=25)') axm.set_ylabel('$\Delta$f$_{25}$') elif iax == 2: axw = ax2w axm = ax2m else: axw = ax3w axm = ax3m axw.yaxis.set_ticks_position('right') axw.yaxis.set_ticks_position('both') axm.yaxis.set_ticks_position('right') axm.yaxis.set_ticks_position('both') axtop = axw.twiny() axtop.set_xlim(trestmin, trestmax) if iax == 2: axtop.set_xlabel('rest frame time (days from peak)') axm.set_xlabel('observer frame time (MJD)') pl.setp(axw.get_yticklabels(), visible=False) pl.setp(axm.get_yticklabels(), visible=False) pl.setp(axw.get_xticklabels(), visible=False) axw.text(0.95, 0.92, filternamew, ha='right', va='top', color=color, transform=axw.transAxes) iobs = np.where((bandletter == bbl) & (obsflag > 0))[0] imod = np.where((bandletter == bbl) & (obsflag == 0))[0] # import pdb; pdb.set_trace() axw.errorbar(mjd[iobs], flux[iobs], fluxerr[iobs], color=color, marker='D', ls=' ', zorder=-100) axw.plot(mjd[imod], flux[imod], color=color, marker=' ', ls='-', zorder=-100) axw.fill_between(mjd[imod], flux[imod] + fluxerr[imod], flux[imod] - fluxerr[imod], color=color, alpha=0.3, zorder=-1000) if mbl not in bandletter: continue axm.text(0.95, 0.5, filternamem, ha='right', va='center', backgroundcolor='w', color=color, transform=axm.transAxes) iobsmb = np.where((bandletter == mbl) & (obsflag > 0))[0] imodmb = np.where((bandletter == mbl) & (obsflag == 0))[0] mbfluxinterp = interp1d(mjd[imodmb], flux[imodmb], fill_value=0, bounds_error=False) mbfluxdiff = flux[iobsmb] - mbfluxinterp(mjd[iobsmb]) axm.errorbar(mjd[iobsmb], mbfluxdiff, fluxerr[iobsmb], color=color, marker='o', mfc='w', ls=' ') axm.fill_between(mjd[imodmb], fluxerr[imodmb], -fluxerr[imodmb], color=color, alpha=0.3, zorder=-1000) axm.axhline(0, color=color, lw=0.8, ls='--') ax1w.set_xlim(mjdmin, mjdmax) ax1w.set_ylim(-0.08, ymax) ax1m.set_ylim(-ymaxMB, ymaxMB) ax1w.xaxis.set_major_locator(ticker.MultipleLocator(100)) ax1w.xaxis.set_minor_locator(ticker.MultipleLocator(25)) ax1w.yaxis.set_major_locator(ticker.MultipleLocator(0.2)) ax1w.yaxis.set_minor_locator(ticker.MultipleLocator(0.1)) ax1m.xaxis.set_major_locator(ticker.MultipleLocator(100)) ax1m.xaxis.set_minor_locator(ticker.MultipleLocator(25)) ax1m.yaxis.set_major_locator(ticker.MultipleLocator(0.2)) ax1m.yaxis.set_minor_locator(ticker.MultipleLocator(0.1)) fig.subplots_adjust(left=0.1, bottom=0.18, right=0.95, top=0.82, wspace=0., hspace=0) pl.draw()
def sncosmo_circlefig(simIa=None, simCC=None, simIapkl='bush_SncosmoSim_Ia.pkl', simCCpkl='bush_SncosmoSim_CC.pkl', z_range=[1.16, 2.36], nsim=1000, verbose=True, clobber=False): """ Construct a color-color circle figure for SN Colfax, with observed photometry included. :param simIa: :param simCC: :param simIapkl: :param simCCpkl: :param z_range: :param nsim: :param verbose: :param clobber: :return: """ import medband_classtest import os import cPickle from matplotlib import pyplot as pl # from matplotlib import patheffects as pe import numpy as np from pytools import plotsetup fig = plotsetup.fullpaperfig(1, figsize=[8, 4]) pl.ioff() mjdpk = 55797. mjdmedband = 55804. t0_range = [mjdmedband - mjdpk - 3, mjdmedband - mjdpk + 3] t0 = mjdmedband - mjdpk if simIa is not None: pass elif os.path.isfile(simIapkl) and not clobber > 1: if verbose: print("Loading Ia simulation from pickle : %s" % simIapkl) fin = open(simIapkl, 'rb') simIa = cPickle.load(fin) fin.close() else: if verbose: print("Running a new Ia simulation, then saving to pickle : %s" % simIapkl) simIa = medband_classtest.SncosmoSim('Ia', z_range=z_range, t0_range=t0_range, nsim=nsim) fout = open(simIapkl, 'wb') cPickle.dump(simIa, fout, protocol=-1) fout.close() if simCC is not None: pass elif os.path.isfile(simCCpkl) and not clobber > 1: if verbose: print("Loading CC simulation from pickle : %s" % simCCpkl) fin = open(simCCpkl, 'rb') simCC = cPickle.load(fin) fin.close() else: if verbose: print("Running a new CC simulation, then saving to pickle : %s" % simCCpkl) simCC = medband_classtest.SncosmoSim('CC', z_range=z_range, t0_range=t0_range, nsim=nsim) fout = open(simCCpkl, 'wb') cPickle.dump(simCC, fout, protocol=-1) fout.close() import getredshift # classify.plotcontours( simIa, simCC, plotstyle='points' ) fig = pl.gcf() ax1 = fig.add_subplot(1, 2, 1) mkcirclepoints(zrange=z_range, t0=t0, colorselect=[1, 0], coloredaxislabels=False, marker='o') ax2 = fig.add_subplot(1, 2, 2, sharex=ax1) mkcirclepoints(zrange=z_range, t0=t0, colorselect=[0, 2], coloredaxislabels=False, marker='o') mag4 = { # from psf model based on the multi-epoch stack 'f125w':25.9432, 'f127m':25.9555, 'f139m':25.5784, 'f140w':26.2892, 'f153m':25.3580, 'f160w':25.9067, } mag6 = { # from psf model based on the multi-epoch stack 'f125w':25.9464, 'f127m':25.9610, 'f139m':25.6361, 'f140w':26.2892, 'f153m':25.3578, 'f160w':25.9097, } magerr = { # from drop method 'f125w':0.106712, 'f127m':0.184979, 'f139m':0.214549, 'f140w':0.1162 , 'f153m':0.160024, 'f160w':0.138843, } mag = mag6 f25 = {} ferr25 = {} for k in mag.keys(): f25[k] = 10**(-0.4 * (mag[k] - 25.)) ferr25[k] = magerr[k] * f25[k] / 2.5 * np.log10(np.e) deltamag = { 'f127m': mag['f127m'] - mag['f125w'], 'f139m': mag['f139m'] - mag['f140w'], 'f153m': mag['f153m'] - mag['f160w'], } deltamagerr = { 'f127m': np.sqrt(magerr['f127m']**2 + magerr['f125w']**2), 'f139m': np.sqrt(magerr['f139m']**2 + magerr['f140w']**2), 'f153m': np.sqrt(magerr['f153m']**2 + magerr['f160w']**2), } ax1.errorbar(deltamag['f139m'], deltamag['f127m'], deltamagerr['f127m'], deltamagerr['f139m'], marker='D', ms=10, elinewidth=2, capsize=0, color='darkorange') ax2.errorbar(deltamag['f127m'], deltamag['f153m'], deltamagerr['f153m'], deltamagerr['f127m'], marker='D', ms=10, elinewidth=2, capsize=0, color='darkorange') ax1.set_xlim(-0.35, 0.3) ax1.set_ylim(-0.7, 0.22) ax2.set_ylim(-0.4, 0.3) ax2.text( deltamag['f139m'] + 0.05, deltamag['f153m'] - 0.05, 'GND12Bus', ha='left', va='top', color='darkorange', fontsize=15, ) # path_effects=[pe.withStroke( linewidth=3,foreground='k')] ) # pl.legend( loc='upper right', numpoints=2, handlelength=0.3) pl.draw() pl.ion() return (simIa, simCC)
def mkresidplot( datfile='ps1union.dat', ageaxis=True, highz='Malmquist', highzlabels=True, lensfactor=0.093, presfig=False, bigtext=False ) : """ construct the hubble residual plot """ from pytools import plotsetup, cosmo, colorpalette as cp from matplotlib import patches import numpy as np from matplotlib import pyplot as pl from scipy.interpolate import interp1d if presfig : plotsetup.presfig( wide=True ) else : plotsetup.fullpaperfig( [8.5,4.5], bigtext=bigtext) clf() highz= highz.lower() if highz=='malmquist': zlim=[0,2.78] elif highz=='rodney': zlim=[0,3.49] if presfig : zlim=[0,3.78] else : zlim=[0,2.45] fig = gcf() if presfig : bottomAxeslim = [ 0.13, 0.18, 0.85, 0.65 ] else : bottomAxeslim = [ 0.09, 0.12, 0.88, 0.75 ] ax1 = fig.add_axes( bottomAxeslim, frameon=True, alpha=0.0, label='axes1') ax1top = ax1.twiny() # read in redshifts and distances hubbledat, H0, Om, MB = gethubbledat( datfile ) if lensfactor : # muerr = 0.093z : Holz & Linder, 2005 # muerr = 0.055z : Jonsson+ 2012 hubbledat['muerr'] = np.sqrt( hubbledat['muerr']**2 + (lensfactor*hubbledat['z'])**2 ) # plot ground data colordict = {'low-z':cp.purple, 'sdss':cp.lightblue, 'ps1':cp.darkblue, 'snls':cp.darkgreen, 'hstacs':cp.darkorange, 'hstwfc3':cp.medred, 'hstwfc3a':cp.medred, 'hstwfc3b':cp.darkred, 'jwst':cp.darkgrey, } elw=0.75 cs=0 for survey in ['low-z','sdss','snls','ps1','hstacs']: isurvey = where( (hubbledat['survey']==survey) & (hubbledat['spec']>0) ) ax1.errorbar( hubbledat['z'][isurvey], hubbledat['mures'][isurvey], hubbledat['muerr'][isurvey], hubbledat['zerr'][isurvey], marker='o', ls=' ',mew=0.01, markersize=5, color=colordict[survey], mfc=colordict[survey], ecolor=colordict[survey], elinewidth=elw, capsize=cs, alpha=0.7 ) if highz : # get the high-z SN fits from Dan labeldict = {#'primo':'Rodney+ 2012', #'wilson':'Jones, Rodney+ 2013', 'stone':'GND13Sto', 'colfax':'GND12Col', } if highz=='rodney': labeldict = {'primo':'Rodney+ 2012', 'wilson':'Jones, Rodney+ 2013', 'stone':'Rodney+ in prep', 'colfax':'Rodney+ in prep', } for survey, namelist in zip( ['hstwfc3a','hstwfc3b'], [['primo','wilson'],['stone','colfax']] ): color=colordict[survey] for name in namelist : if name not in hubbledat['name'] : continue iname = np.where( hubbledat['name'] == name )[0][0] z,zerr = hubbledat['z'][iname], hubbledat['zerr'][iname] mu,muerr = hubbledat['mures'][iname],hubbledat['muerr'][iname] if name=='colfax' : # Not applying a lensing correction for mu=1.04 +-0.03 : 0.0426 +- 0.031 mag icol = np.where( [n.startswith('col') for n in hubbledat['name']] )[0] mucol = interp1d( hubbledat['z'][icol], hubbledat['mures'][icol] ) ax1.plot( [2.16,2.19,2.21,2.24,2.26,2.28], mucol([2.16,2.19,2.21,2.24,2.26,2.28]), color=color, lw=0.75, ls='-' ) ax1.errorbar( 2.26, mucol(2.26), muerr, marker='D', ls=' ',mew=0.01, markersize=8, color=color, mfc=color, ecolor=color, elinewidth=elw, capsize=cs, alpha=1 ) z = 2.26 mu = mucol(2.26) elif name=='stone' : # not applying a lensing correction for stone: # mu = mu + 0.0215; muerr = np.sqrt( muerr**2 + 0.02**2 ) isto = np.where( [n.startswith('stone') for n in hubbledat['name']] )[0] musto = interp1d( hubbledat['z'][isto], hubbledat['mures'][isto] ) ax1.plot( np.arange(1.66,2.01,0.02), musto(np.arange(1.66,2.01,0.02)), color=color, lw=0.75, ls='--' ) ax1.errorbar( 1.80, musto(1.80), muerr, zerr, marker='D', ls=' ',mew=0.01, markersize=8, color=color, mfc=color, ecolor=color, elinewidth=elw, capsize=cs, alpha=1 ) z = 1.80 mu = musto(1.80) else : ax1.errorbar( z, mu, muerr, zerr, marker='D', ls=' ',mew=0.01, markersize=8, color=color, mfc=color, ecolor=color, elinewidth=elw, capsize=cs, alpha=1 ) if highzlabels and name in labeldict : # ax1.text( z-0.035, mu+0.07, labeldict[name], if name=='primo': ax1.text( z-0.05, mu+0.035, labeldict[name], color=color, # backgroundcolor='w', va='bottom', ha='center', rotation=90 ) else : ax1.text( z, mu+muerr+0.07, labeldict[name], color=color, # backgroundcolor='w', va='bottom', ha='center', rotation=90 ) # plot the lcdm cosmology ax1.axhline( 0, color='0.4', ls='-' ) # plot extreme w' zLCDM = np.arange( 0.01, 5, 0.05) muLCDM = cosmo.mu( zLCDM, H0=H0, Om=Om, Ode=(1-Om), w0=-1., wa=0) #muextremeDE = cosmo.mu( z, H0=_H0, Om=_Om, Ode=(1-_Om), w0=-0.7, wa=-2) mu1 = cosmo.mu( zLCDM, H0=H0, Om=Om-0.015, Ode=(1-Om+0.015), w0=-1.2, wa=0.7) mu2 = cosmo.mu( zLCDM, H0=H0, Om=Om+0.055, Ode=(1-Om-0.055), w0=-0.65, wa=-2.2) ax1.fill_between( zLCDM, mu1-muLCDM, mu2-muLCDM, color='k', alpha=0.2, lw=0.01, zorder=10 ) if not presfig : ax1.text( 0.08, -0.8, 'low-z', fontsize=(presfig and 'small') or 10.5, ha='center', color=colordict['low-z'] ) ax1.text( 0.25, -0.85, 'SDSS', fontsize=(presfig and 'small') or 10.5, ha='center', color=colordict['sdss'] ) ax1.text( 0.5 , -0.9, 'PS1', fontsize=(presfig and 'small') or 10.5, ha='center', color=colordict['ps1'] ) ax1.text( 0.75, -0.95, 'SNLS', fontsize=(presfig and 'small') or 10.5, ha='center', color=colordict['snls'] ) ax1.text( 1.25, -0.8, 'HST+ACS', fontsize=(presfig and 'small') or 10.5, ha='center', color=colordict['hstacs'] ) ax1.text( 1.95, -0.95, 'HST+WFC3', fontsize=(presfig and 'small') or 10.5, ha='center', color=colordict['hstwfc3b'] ) lowzRect = patches.Rectangle( [0.0,-0.85], 0.08, 0.03, fill=True, lw=0, alpha=0.3, color=colordict['low-z'] ) sdssRect = patches.Rectangle( [0.06,-0.9], 0.34, 0.03, fill=True, lw=0, alpha=0.3, color=colordict['sdss'] ) ps1Rect = patches.Rectangle( [0.1,-0.95], 0.5, 0.03, fill=True, lw=0, alpha=0.3, color=colordict['ps1'] ) snlsRect = patches.Rectangle( [0.15,-1.0], 0.9, 0.03, fill=True, lw=0, alpha=0.3, color=colordict['snls'] ) acsRect = patches.Rectangle( [0.60,-0.85], 1.15, 0.03, fill=True, lw=0, alpha=0.3, color=colordict['hstacs'] ) wfc3Rect = patches.Rectangle( [1.20,-1.0], 1.1, 0.03, fill=True, lw=0, alpha=0.3, color=colordict['hstwfc3b'] ) ax1.add_patch( lowzRect ) ax1.add_patch( sdssRect ) ax1.add_patch( ps1Rect ) ax1.add_patch( snlsRect ) ax1.add_patch( acsRect ) ax1.add_patch( wfc3Rect ) if highz=='rodney': if not presfig : #ffsnRect = patches.Rectangle( [2.30,-1.0], 0.7, 0.03, fill=False,lw=1, alpha=1.0, color=colordict['hstwfc3b'] ) jwstRect = patches.Rectangle( [2.00,-0.85],2.0, 0.03, fill=False,lw=1, alpha=1.0, color=colordict['jwst'] ) #ax1.add_patch( ffsnRect ) ax1.add_patch( jwstRect ) #ax1.text( 2.5, -0.95, '+ lensing',fontsize=10.5, ha='center', color=colordict['hstwfc3b'] ) ax1.text( 3.0, -0.78, 'JWST', fontsize=(presfig and 'medium') or 10.5, ha='center', color=colordict['jwst'] ) color = cp.bluegray ax1.arrow( 2.5, 0.15, 0.3, 0.0, fc=color, ec=color, head_width=0.05, head_length=0.0, overhang=0.0 ) ax1.plot( 2.5, 0.15, marker='o', mfc='w', mec=color ) ax1.text( 2.49, 0.19, '0.3 Gyr', ha='left', va='bottom', color=color) ax1.text( 2.82, 0.15, 'z=2.8', ha='left', va='center', color=color) color = cp.teal ax1.arrow( 2.5, 0.45, 0.55, 0.0, fc=color, ec=color, head_width=0.05, head_length=0.08, overhang=0.25, length_includes_head=True ) ax1.plot( 2.5, 0.45, marker='o', mfc='w', mec=color ) ax1.text( 2.6, 0.48, '1 Gyr', ha='left', va='bottom', color=color) ax1.text( 3.08, 0.45, 'z=3.8', ha='left', va='center', color=color) color = cp.coral ax1.arrow( 2.5, 0.7, 0.75, 0.0, fc=color, ec=color, head_width=0.05, head_length=0.08, overhang=0.25, length_includes_head=True ) ax1.plot( 2.5, 0.7, marker='o', mfc='w', mec=color ) ax1.text( 2.7, 0.72, '2 Gyr', ha='left', va='bottom', color=color) ax1.text( 3.28, 0.7, 'z=8.3', ha='left', va='center', color=color) if not presfig : ax1.text( 2.5, 0.7, 'z=2.5', ha='center', va='bottom', color='0.4' ) ax1.text( 2.5, 0.8, 'explosion', ha='center', va='bottom', color='0.3' )#, fontsize=10.5 ) ax1.text( 2.85, 0.8, 'delay', ha='center', va='bottom', color='0.3' )#, fontsize=10.5 ) ax1.text( 3.15, 0.8, 'formation', ha='left', va='bottom', color='0.3' )#, fontsize=10.5 ) if presfig : ax1.text( 0.82, 0.46, 'flat $\Lambda$CDM', color='0.1', ha='right', va='top', transform=ax1.transAxes )# , fontsize=10.5, backgroundcolor='w' ) else : ax1.text( 0.99, 0.56, 'flat $\Lambda$CDM', color='0.1', ha='right', va='top', transform=ax1.transAxes )# , fontsize=10.5, backgroundcolor='w' ) ax1.text( 0.99, 0.46, '$\pm$95\% conf. \non $w_0 , w_a$', color='0.4', ha='right', va='top', transform=ax1.transAxes )# , fontsize=10.5,backgroundcolor='w' ) # ax1.text( 0.95, 0.95, 'Open Symbols:\n no spec. confirmation', color='0.5', transform=ax1.transAxes, ha='right',va='top' ) ax1.set_xlabel('Redshift',fontsize='large') # ax1.set_ylabel('$\mu_{observed}$ - $\mu_{\Lambda CDM}$') if highz=='rodney' : ax1.set_ylabel(r'$m_B^{\prime} - m_{\Lambda CDM}$', fontsize='large') else : ax1.set_ylabel(r'$m_B + \alpha x_1 - \beta c - m_{\Lambda CDM}$', fontsize='large') if presfig : ax1.yaxis.set_label_coords( -0.08, 0.65 ) # mulim = array( [33,46.5] ) muresidlim = array( [-1.05,1.05] ) # zlim = array( [0.0,3.49] ) ax1.xaxis.set_ticks( [0.1,] + np.arange(0.5,zlim[-1],0.5).tolist() ) ax1.set_xlim( zlim ) ax1.set_ylim( muresidlim ) from pytools import colorpalette as cp if highz.lower()=='malmquist' : # z, dm, tvis = get_visibility_time_grid( 0.5, x1=0., c=0. ) # contourlevels = [50] # ax1.contour( z, dm, tvis, levels=contourlevels, colors=cp.darkbluegray, linestyles='dashed' ) z5050, dm5050 = get_visibility_time_line( tvislim=50, deteff_threshold=0.5, x1=0, c=0, zrange=[1.0,3.0] ) ax1.fill_between( z5050, dm5050, np.ones(len(z5050))*muresidlim[1]+0.05, color=cp.bluegray, zorder=-200, alpha=0.3) # ax1.plot( z5050, dm5050, color='0.8') z050, dm050 = get_visibility_time_line( tvislim=0.01, deteff_threshold=0.5, x1=0, c=0, zrange=[1.7,3.0] ) ax1.fill_between( z050, dm050, np.ones(len(z050))*muresidlim[1]+0.05, color=cp.darkbluegray, zorder=-100, alpha=0.3) ax1.text( 1.53, 0.92, 't$_{\\rm vis}<$50 days', ha='left', va='top', color=cp.darkgrey ) ax1.text( 2.75, 0.92, 'undetectable', ha='right', va='top', color=cp.darkgrey ) if highz=='evolution' : # plot SNIa evolution minmassdict = progenitorMinMassLines( zform=11 ) z = minmassdict['z'] for key,color in zip( ['mm25','mm15','mm04'], ['r','g','b'] ): minmass = minmassdict[key] mavez = Mave( _MAXMASS, minmass ) ax1.plot( z, (mavez-mavez[0]) * _DMUDMASS, ls='-', color=color ) ax1.text( 2.5, -0.95, '+ lensing',fontsize=10.5, ha='center', color=colordict['hstwfc3b'] ) ax1.text( 3.0, -0.78, 'JWST', fontsize=10.5, ha='center', color=colordict['jwst'] ) color = cp.bluegray ax1.arrow( 2.5, 0.25, 0.3, 0.0, fc=color, ec=color, head_width=0.05, head_length=0.0, overhang=0.0 ) ax1.plot( 2.5, 0.25, marker='o', mfc='w', mec=color ) ax1.text( 2.55, 0.27, '0.3 Gyr', ha='left', va='bottom', color=color) ax1.text( 2.82, 0.25, 'z=2.8', ha='left', va='center', color=color) color = cp.teal ax1.arrow( 2.5, 0.45, 0.55, 0.0, fc=color, ec=color, head_width=0.05, head_length=0.08, overhang=0.25, length_includes_head=True ) ax1.plot( 2.5, 0.45, marker='o', mfc='w', mec=color ) ax1.text( 2.65, 0.47, '1 Gyr', ha='left', va='bottom', color=color) ax1.text( 3.08, 0.45, 'z=3.8', ha='left', va='center', color=color) color = cp.coral ax1.arrow( 2.5, 0.65, 0.75, 0.0, fc=color, ec=color, head_width=0.05, head_length=0.08, overhang=0.25, length_includes_head=True ) ax1.plot( 2.5, 0.65, marker='o', mfc='w', mec=color ) ax1.text( 2.75, 0.67, '2 Gyr', ha='left', va='bottom', color=color) ax1.text( 3.28, 0.65, 'z=8.3', ha='left', va='center', color=color) ax1.text( 2.5, 0.7, 'z=2.5', ha='center', va='bottom', color='0.4' ) ax1.text( 2.5, 0.8, 'explosion', ha='center', va='bottom', color='0.3', fontsize=10.5 ) ax1.text( 2.85, 0.8, 'delay', ha='center', va='bottom', color='0.3', fontsize=10.5 ) ax1.text( 3.15, 0.8, 'formation', ha='left', va='bottom', color='0.3', fontsize=10.5 ) if ageaxis : if highz=='rodney': # ax1top.set_xlabel( 'age of Universe (Gyr)',fontsize='large',x=0.15,ha='left') ageticks = np.array( [13, 9, 6, 4, 3, 2 ] ) else : ageticks = np.array( [13, 9, 6, 4, 3 ] ) ax1top.set_xlabel( 'Age of Universe (Gyr)',fontsize='large') ax1top.set_xlim( zlim ) ztickloctop = cosmo.zfromt( ageticks ) ax1top.xaxis.set_ticks( ztickloctop ) ax1top.xaxis.set_ticklabels( ageticks ) pl.draw()
def plotSNRtest02(datfileIa='colorColorClassify_Ia.dat', datfileCC='colorColorClassify_CC.dat'): """ Plot the results of a classification validation test. :return: """ from matplotlib import pyplot as pl from pytools import plotsetup import numpy as np from astropy.io import ascii datIa = ascii.read(datfileIa, format='commented_header', header_start=-1, data_start=0) datCC = ascii.read(datfileCC, format='commented_header', header_start=-1, data_start=0) pIaIa = datIa['P(Ia|D)'] zIa = datIa['z'] SNRIa = datIa['S/N'] pIaCC = datCC['P(Ia|D)'] zCC = datCC['z'] SNRCC = datCC['S/N'] fig2 = plotsetup.fullpaperfig(2, figsize=[8, 3]) def purity(nTrue, nFalse, W=3): return (float(nTrue) / (float(nTrue) + float(W * nFalse))) def efficiency(nTrue, nTot): return (float(nTrue) / float(nTot)) SNRlist = np.unique(SNRIa) ncol = len(SNRlist) icol = 0 axlist = [] for SNR in SNRlist: icol += 1 irow = -1 iSNRIa = np.where(SNRIa == SNR)[0] iSNRCC = np.where(SNRCC == SNR)[0] zIaSNR = zIa[iSNRIa] zCCSNR = zCC[iSNRCC] for threshold in [0.5, 0.75]: irow += 1 if icol == 1: ax1 = pl.subplot(2, ncol, icol + irow * ncol) ax = ax1 else: ax = pl.subplot(2, ncol, icol + irow * ncol, sharex=ax1, sharey=ax1) axlist.append(ax) nIaTrue = np.count_nonzero(pIaIa[iSNRIa] > threshold) nIaFalse = np.count_nonzero(pIaCC[iSNRCC] > threshold) nIaTot = len(iSNRIa) ppIa = purity(nIaTrue, nIaFalse, W=3) pIa = purity(nIaTrue, nIaFalse, W=1) eIa = efficiency(nIaTrue, nIaTot) print('SNR=%i, Thresh=%.2f, Purity = %.2f, Pseudo-Purity = %.2f' % (SNR, threshold, pIa, ppIa)) zbinmin = np.arange(1.8, 2.2, 0.05) ppIaz, pIaz, eIaz = [], [], [] zbinmid = [] for zmin in zbinmin: zmax = zmin + 0.05 izthisbinIa = np.where((zIaSNR >= zmin) & (zIaSNR < zmax))[0] izthisbinCC = np.where((zCCSNR >= zmin) & (zCCSNR < zmax))[0] if not len(izthisbinCC): continue if not len(izthisbinIa): continue nIaTrue = np.count_nonzero( pIaIa[iSNRIa][izthisbinIa] > threshold) nIaFalse = np.count_nonzero( pIaCC[iSNRCC][izthisbinCC] > threshold) nIaTot = len(izthisbinIa) if nIaTrue == 0 and nIaFalse == 0: continue ppIaz.append(purity(nIaTrue, nIaFalse, W=3)) pIaz.append(purity(nIaTrue, nIaFalse, W=1)) eIaz.append(efficiency(nIaTrue, nIaTot)) zbinmid.append(zmin + 0.025) ax.plot(zbinmid, ppIaz, color='darkorange', marker='d', ls='--', lw=1) ax.plot(zbinmid, pIaz, color='darkcyan', marker='o', ls='-', lw=1) ax.plot(zbinmid, eIaz, color='0.5', marker='^', ls=':', lw=1) ax.set_xlim(1.75, 2.25) ax.set_ylim(-0.1, 1.1) if icol == 2: pl.setp(ax.get_yticklabels(), visible=False) if icol == 3: ax.yaxis.set_ticks_position('right') ax.yaxis.set_ticks_position('both') ax.yaxis.set_label_position('right') if irow == 0: pl.setp(ax.get_xticklabels(), visible=False) ax.set_title('S/N=%i' % SNR, fontsize=12, color='0.5') #if irow==1 and icol==2 : # ax.set_xlabel('Redshift') #if icol==1 : # ax.set_ylabel('Ia Sample Purity') if icol == 2: ax.text(0.5, 0.05, 'thresh=%0.2f' % (threshold), ha='center', va='bottom', transform=ax.transAxes, fontsize=12, color='0.5') if irow == 0 and icol == ncol: ax.text(0.85, 0.05, 'true\npurity', ha='center', va='bottom', color='darkcyan', fontsize=10, transform=ax.transAxes) ax.text(0.5, 0.05, 'pseudo\npurity', ha='center', va='bottom', color='darkorange', fontsize=10, transform=ax.transAxes) ax.text(0.05, 0.05, 'efficiency', ha='left', va='bottom', color='0.3', fontsize=10, transform=ax.transAxes) # make a background axis frame for x and y axis labels bgAxes = pl.axes([0.05, 0.1, 0.9, 0.85], frameon=False) bgAxes.set_xticks([]) bgAxes.set_yticks([]) bgAxes.set_xlabel('Redshift') bgAxes.set_ylabel('Ia Sample Purity') pl.subplots_adjust(wspace=0, hspace=0, left=0.08, bottom=0.18, right=0.92, top=0.9) pl.draw()
def stonefig(simIa=None, simIbc=None, simII=None, contours=True, redshiftcircle=True, clobber=False, **plotargs): from pytools import plotsetup from mpltools import color from matplotlib import cm fig = plotsetup.fullpaperfig(figsize=[7.5, 3.5]) fig.clf() ax1 = fig.add_subplot(1, 2, 1) simIa, simIbc, simII = singlecircle( 'stone', simIa, simIbc, simII, clobber=clobber, medbandx='f139m', medbandy='f153m', contours=contours, redshiftcircle=False, #redshiftcircle, **plotargs) fig.subplots_adjust(left=0.10, bottom=0.15, right=0.92, top=0.98, wspace=0.0) ax1 = pl.gca() ax1.text( 0.05, 0.95, 'GND13Sto', transform=ax1.transAxes, ha='left', va='top', color='k', fontsize=15, ) ax2 = fig.add_subplot(1, 2, 2, sharex=ax1, sharey=ax1) singlecircle('stone', medbandx='f139m', medbandy='f153m', contours=False, points=False, redshiftcircle=True, **plotargs) #plot_redshift_circle(z_range=STONE.z_range, tobs=STONE.tobs, # medbandx='f139m', medbandy='f153m', # source='salt2', coloredaxislabels=False, marker='o' ) ax2.yaxis.set_label_position('right') ax2.yaxis.set_ticks_position('right') ax2.yaxis.set_ticks_position('both') pl.setp(ax2.yaxis.get_label(), rotation=-90) colorlist = color.colors_from_cmap(9, cm.jet) ax2.text(0.1, -0.15, 'z=1.6', ha='left', va='top', color=colorlist[0]) ax2.text(-0.06, -0.18, '1.7', ha='left', va='top', color=colorlist[1]) ax2.text(0.26, 0.06, '1.8', ha='left', va='top', color=colorlist[2]) ax2.text(0.14, 0.0, '1.9', ha='left', va='top', color='darkcyan') ax2.text(-0.1, -0.19, '2.0', ha='right', va='top', color='limegreen') ax2.text(-0.09, 0.23, '2.1', ha='right', va='bottom', color='darkolivegreen') ax2.text(0.13, 0.27, '2.2', ha='left', va='top', color=colorlist[6]) ax2.text(-0.1, -0.07, '2.3', ha='center', va='center', color=colorlist[7]) ax2.text(-0.23, -0.14, 'z=2.4', ha='right', va='bottom', color=colorlist[8]) ax1.set_xlim(-0.35, 0.35) ax1.set_ylim(-0.3, 0.45) pl.draw() return simIa, simIbc, simII
def mk_histogram_figure(sndatfile='candels_sn_hostphot2.txt', galdata=None, galdatfilelist=[ 'CANDELS.GOODSS.F160W.v1.PHOTOZ.CAT', 'CANDELS.GOODSN.F160W.v1.PHOTOZ.CAT', 'CANDELS.UDS.F160W.v1.photoz.cat', ], insetstamps=False): fig = plotsetup.fullpaperfig() cwd = os.path.abspath('.') sndata = ascii.read(sndatfile, format='commented_header', header_start=-1, data_start=0) igot160 = np.where(sndata['sb_f160w'] > 0)[0] sb160 = sndata['sb_f160w'][igot160] pIa = sndata['PIa'][igot160] pl.clf() ax = pl.axes([0.06, 0.12, 0.9, 0.6]) ax.hist(sb160, bins=np.arange(20, 28, 0.5), weights=pIa, color=cp.darkred, alpha=0.5, normed=True) ax.hist(sb160, bins=np.arange(20, 28, 0.5), weights=(1 - pIa), color=cp.darkblue, alpha=0.5, normed=True) if galdata is None: galdatalist = [ascii.read(galdatfile) for galdatfile in galdatfilelist] galdata = vstack(galdatalist, join_type='outer') m160 = galdata['mag_f160w'] zphot = galdata['Photo_z'] iz12 = np.where((zphot > 1) & (zphot < 2.5))[0] m160 = m160[iz12] ax.hist(m160, bins=np.arange(20, 28, 0.2), color=cp.black, alpha=0.3, normed=True, zorder=-1000) fig.subplots_adjust(left=0.06, bottom=0.12, right=0.97, top=0.97) ax.set_xlabel('SN Host Galaxy Surface Brightness (mag arcsec$^{-2}$)') ax.set_ylabel('Normalized Count') ax.set_yticks([]) ax.text(0.7, 0.92, '\\noindent Magnitude from total flux,\n' 'all galaxies with $1<z<2.5$', transform=ax.transAxes, ha='left', va='top', color=cp.darkgrey) ax.text(0.3, 0.92, '\\noindent CANDELS SN Host galaxies,\n' 'with $1<z<2.5$', transform=ax.transAxes, ha='left', va='top', color=cp.darkgrey) ax.text(0.15, 0.52, 'Type Ia SN', transform=ax.transAxes, ha='right', va='top', color=cp.darkred) ax.text(0.35, 0.62, 'CC SN', transform=ax.transAxes, ha='left', va='top', color=cp.darkblue) ax.plot([22.25, 22.75], [0.2, 0.3], marker=' ', ls='-', color=cp.darkblue, lw=1) ax.plot([21.75, 20.75], [0.13, 0.24], marker=' ', ls='-', color=cp.darkred, lw=1) pl.draw() if insetstamps: ax1 = pl.axes([0.1, 0.76, 0.18, 0.2]) show_sn_on_image('camille', 'camille_f160w_e00_reg_drz_sci.fits') ax2 = pl.axes([0.42, 0.76, 0.18, 0.2]) show_sn_on_image('gore', 'gore_f160w_e00_reg_drz_sci.fits') ax3 = pl.axes([0.72, 0.76, 0.18, 0.2]) show_sn_on_image('fairbanks', 'fairbanks_f160w_e00_reg_drz_sci.fits') #ax1.set_xticks([]) #ax2.set_xticks([]) #ax3.set_xticks([]) #ax1.set_yticks([]) #ax2.set_yticks([]) #ax3.set_yticks([]) imdat = pyfits.getdata('camille/camille_f160w_e00_reg_drz_sci.fits') h, w = imdat.shape #ax1.imshow( imdat[h/2-15:h/2+15,w/2-15:w/2+15], vmin=-0.05, vmax=0.15, # cmap=cm.Greys_r, aspect='equal', interpolation='nearest') return galdata
def plot_light_curve_fit( fitter='mlcs2k2', plotmags=True, compare=False ) : """ make the SN Tomas light curve fit figure""" from pytools import plotsetup, colorpalette as cp from astropy.io import ascii import numpy as np from matplotlib import pyplot as pl from matplotlib import ticker, gridspec import os import sys from hstphot import hstzpt thisfile = sys.argv[0] if 'ipython' in thisfile : thisfile = __file__ thisdir = os.path.abspath( os.path.dirname(thisfile)) sn = ascii.read(os.path.join(thisdir,'data/HST_FFSN_tomas.dat'), format='commented_header', header_start=-1, data_start=0) alpha2filter = { 'H':'F160W','N':'F140W','J':'F125W', 'Y':'F105W','I':'F814W','V':'F606W','B':'F435W' } colordict = { 'H':'k', 'N':cp.darkred, 'J':cp.darkgold, 'Y':cp.cadetblue, 'I':cp.darkgreen, 'V':cp.coral, 'B':cp.purple} if fitter=='both' : plotsetup.fullpaperfig([8,4]) gs = gridspec.GridSpec( 2,5 ) rowdict = {'salt2':1,'mlcs2k2':0} fitterlist=['mlcs2k2','salt2'] else : plotsetup.fullpaperfig([8,4]) gs = gridspec.GridSpec(1,5) rowdict = {fitter:0} fitterlist = [fitter] fig = pl.gcf() pl.clf() for fitter in fitterlist : axdict = { 'B':fig.add_subplot(gs[rowdict[fitter],0]), 'Y':fig.add_subplot(gs[rowdict[fitter],1]), 'J':fig.add_subplot(gs[rowdict[fitter],2]), 'N':fig.add_subplot(gs[rowdict[fitter],3]), 'H':fig.add_subplot(gs[rowdict[fitter],4]), } axdict['V'] = axdict['B'] axdict['I'] = axdict['B'] for band in ['V','I','Y','J','N','H'] : ax = axdict[band.upper()] filtname = alpha2filter[band] color = colordict[band] if band=='B': ax.text(0.85,0.45,'%s'%filtname.upper(), color=color, fontsize='small',ha='right',va='top', transform=ax.transAxes) if band=='V': ax.text(0.85,0.55,'%s'%filtname.upper(), color=color, fontsize='small',ha='right',va='top', transform=ax.transAxes) if plotmags : ifilt = np.where((sn['filter']==filtname) & (sn['magerr']>0))[0] y,yerr = sn['mag'][ifilt], sn['magerr'][ifilt] else : ifilt = np.where((sn['filter']==filtname))[0] f,ferr = sn['flux'][ifilt], sn['fluxerr'][ifilt] y = f*10**(-0.4*(sn['zpt'][ifilt]-25)) yerr = ferr*10**(-0.4*(sn['zpt'][ifilt]-25)) ax.errorbar( sn['mjd'][ifilt], y, yerr, color=color, marker='D', ls=' ', zorder=-100) # ax.errorbar( mjd[iobs], y[iobs], yerr[iobs], color=color, # marker='D', ls=' ', zorder=-100 ) fluxfile = os.path.join( thisdir,'data/%s_fit/HST_FFSN_tomas-1101-%s.flux'%(fitter,band) ) if not os.path.isfile(fluxfile): continue fluxdat = ascii.read(fluxfile) mjd = fluxdat['col2'] tobs = fluxdat['col3'] fluxcal = fluxdat['col4'] fluxcalerr = fluxdat['col5'] if filtname.lower().startswith('f1'): zptvega = hstzpt.getzptWFC3IR(filtname,'vega') zptab = hstzpt.getzptWFC3IR(filtname,'ab') else : zptvega = hstzpt.getzptACS(filtname,'vega') zptab = hstzpt.getzptACS(filtname,'ab') flux = fluxcal * 10**(-0.4*(27.5-zptvega)) fluxab25 = flux * 10**(-0.4*(zptab-25)) fluxerr = fluxcalerr * 10**(-0.4*(27.5-zptvega)) fluxerrab25 = fluxerr * 10**(-0.4*(zptab-25)) modkey = fluxdat['col6'] mag = np.where( fluxab25>0, -2.5*np.log10( fluxab25 ) + 25, 35 ) magerr = np.where( fluxab25>0, 1.0857 * fluxerrab25 / fluxab25, 0.2 ) if plotmags : y,yerr = mag, magerr else : y,yerr = fluxab25, fluxerrab25 iobs = np.where( modkey>0 )[0] imod = np.where( modkey==0 )[0] ax.plot( mjd[imod], y[imod], color=color, marker=' ', ls='-', zorder=-100 ) ax.fill_between( mjd[imod], y[imod]+yerr[imod], y[imod]-yerr[imod], color=color, alpha=0.3, zorder=-1000 ) ax.set_xlim( 56780,56950 ) ax.xaxis.set_major_locator( ticker.MultipleLocator( 100 ) ) ax.xaxis.set_minor_locator( ticker.MultipleLocator( 20 ) ) if plotmags : ax.set_ylim( 27.9, 22.25 ) else : ax.set_ylim( -0.2, 2.9 ) ax.yaxis.set_major_locator( ticker.MultipleLocator( 1 ) ) ax.yaxis.set_minor_locator( ticker.MultipleLocator( 0.5 ) ) ax.text(0.85,0.65,'%s'%filtname.upper(), color=color, fontsize='small',ha='right',va='top', transform=ax.transAxes) if band=='H': ax.text(0.9,0.9,'%s'%fitter.upper(), color='k', fontsize='large',ha='right',va='top', transform=ax.transAxes) if rowdict[fitter]==0: axtop = ax.twiny() z=1.31 mjdpk=56816.3 axtop.set_xlim( (ax.get_xlim()[0]-mjdpk)/(1+z), (ax.get_xlim()[1]-mjdpk)/(1+z) ) axtop.xaxis.set_major_locator( ticker.MultipleLocator( 20 ) ) axtop.xaxis.set_minor_locator( ticker.MultipleLocator( 10 ) ) axtop.xaxis.set_label_coords( -0.03, 1.01) axtop.tick_params( pad=2) if band=='I': axtop.set_xlabel( "t$_{\\rm rest}$ : ") if ax != axdict['B']: pl.setp( ax.get_yticklabels(),visible=False) if plotmags : axdict['B'].set_ylabel( r"AB mag")#, fontsize='x-large') else : axdict['B'].set_ylabel( r"Flux (zp$_{\rm AB}$=25)")#, fontsize='x-large') # fig.suptitle( 'SN HFF14tom at $z=1.33\pm0.02$' ) axdict['B'].set_xlabel( "MJD : ")#, fontsize='x-large') axdict['B'].xaxis.set_label_coords( -0.22, -0.06) #ax.yaxis.set_major_locator( ticker.MultipleLocator( 1 ) ) #ax.yaxis.set_minor_locator( ticker.MultipleLocator( 0.5 ) ) fig.subplots_adjust( left=0.08, bottom=0.12, right=0.98, top=0.91, hspace=0, wspace=0) pl.draw()
def mkfig3d( simdata, dz=0.05, snanadatfile=_SNANADATFILE, ): """ Plot the results of a SNANA monte carlo simulation as a 3-D circle diagram. :param simdata: :param dz: :param snanadatfile: :return: """ from mpl_toolkits.mplot3d.axes3d import Axes3D from matplotlib import cm import mpltools from pytools import plotsetup fig = plotsetup.fullpaperfig(1, [10, 10]) sn = stardust.SuperNova(snanadatfile) simIa, simIbc, simII = simdata ax1 = fig.add_axes([0.12, 0.12, 0.85, 0.85], projection='3d') c7I, c8I, cPN = get_colors(simII) ax1.plot3D(c7I, c8I, cPN, marker='o', color='k', alpha=1, ls=' ', mew=0, label='Type II') c7I, c8I, cPN = get_colors(simIbc) ax1.plot3D(c7I, c8I, cPN, marker='o', color='sienna', alpha=1, ls=' ', mew=0, label='Type Ibc') zbins, c7I, c8I, cPN = get_colors_binned_by_z(sn, simIa, dz=dz) mpltools.color.cycle_cmap(len(zbins), cmap=cm.gist_rainbow_r, ax=ax1) for iz in range(len(zbins) - 1): z0, z1 = zbins[iz], zbins[iz + 1] #if dz>=0.1 : zmid = round(np.mean([z0,z1]),1) #elif dz>=0.01 : zmid = round(np.mean([z0,z1]),2) ax1.plot3D(c7I[iz], c8I[iz], cPN[iz], marker='o', alpha=1, ls=' ', mew=0, label='%.2f-%.2f' % (z0, z1)) ax1.set_xlim(-0.1, 0.5) ax1.set_ylim(-0.4, 0.2) ax1.set_zlim(-0.3, 0.3) ax1.legend(loc='upper left', ncol=2, numpoints=1, frameon=False, handletextpad=0.3, handlelength=0.2) ax1.set_xlabel('F763M-F814W') ax1.set_ylabel('F845M-F140W') ax1.set_zlabel('F139M-F140W')
def mk_bush_lc_plot(snfitres=None): from astropy.io import ascii import numpy as np from scipy.interpolate import interp1d from matplotlib import pyplot as pl, ticker from pytools import plotsetup, colorpalette as cp import time start = time.time() if snfitres is not None: sn, fit, res = snfitres else: sn, fit, res = dofit( '/Users/rodney/Dropbox/MEDBAND/DATFILES/HST_CANDELS4_bushALL.sncosmo.dat', z=1.15, dz=0.001, t0=55803.1, dt0=25.0, model='s11-2006fo', noUV=True) snid = 'GSD11Bus' ymax = 0.8 # optbands = ['f350lp','f606w','f814w','f850lp'] allbands = np.unique(sn['filter']) broadbands = [ band for band in allbands if band in ['f814w', 'f105w', 'f125w', 'f140w', 'f160w'] ] nax = 5 medbanddict = { 'f105w': 'f098m', 'f125w': 'f127m', 'f140w': 'f139m', 'f160w': 'f153m' } bands = sn['filter'] mjd = sn['mjd'] flux = sn['flux'] * 10**(-0.4 * (sn['zpt'] - 25)) fluxerr = sn['fluxerr'] * 10**(-0.4 * (sn['zpt'] - 25)) alpha2filter = { 'H': 'f160w', 'N': 'f140w', 'J': 'f125w', 'Y': 'f105w', 'Z': 'f850l', 'I': 'f814w', 'V': 'f606w', 'L': 'f098m', 'O': 'f127m', 'P': 'f139m', 'Q': 'f153m', } plotsetup.fullpaperfig([8, 3]) pl.clf() fig = pl.gcf() #mjdmin = mjd.min()-10 #mjdmax = mjd.max()+25 ymax = 0.7 ymaxMB = 0.39 mjdmin = 55701 mjdmax = 55995 mjdmod = np.arange(mjdmin, mjdmax, 1) z, mjdpeak = 1.15, 55802. snlabel = 'GSD11Bus' trestmin = (mjdmin - mjdpeak) / (1 + z) trestmax = (mjdmax - mjdpeak) / (1 + z) ax1w = pl.subplot2grid([4, 4], [0, 0], rowspan=3) ax2w = pl.subplot2grid([4, 4], [0, 1], rowspan=3, sharex=ax1w, sharey=ax1w) ax3w = pl.subplot2grid([4, 4], [0, 2], rowspan=3, sharex=ax1w, sharey=ax1w) ax4w = pl.subplot2grid([4, 4], [0, 3], rowspan=3, sharex=ax1w, sharey=ax1w) #ax5w = pl.subplot2grid( [4,5], [0,4], rowspan=3, sharex=ax1w, sharey=ax1w ) ax1m = pl.subplot2grid([4, 4], [3, 0], sharex=ax1w) ax2m = pl.subplot2grid([4, 4], [3, 1], sharex=ax1w, sharey=ax1m) ax3m = pl.subplot2grid([4, 4], [3, 2], sharex=ax1w, sharey=ax1m) ax4m = pl.subplot2grid([4, 4], [3, 3], sharex=ax1w, sharey=ax1m) #ax5m = pl.subplot2grid( [4,5], [3,4], sharex=ax1w, sharey=ax1m ) iax = 0 for bb, mb in zip(['f105w', 'f125w', 'f140w', 'f160w'], ['f098m', 'f127m', 'f139m', 'f153m']): iax += 1 ibb = np.where(bands == bb) imb = np.where(bands == mb) yval = flux yerr = fluxerr ymod_bb = fit.bandflux(bb, mjdmod, zp=25, zpsys='ab') if iax == 1: axw = ax1w axm = ax1m axw.text(0.05, 0.92, snlabel, color='k', fontsize='large', fontweight='heavy', ha='left', va='top', transform=axw.transAxes) # axw.text( -0.28, 1.2, snlabel, backgroundcolor='w', color='k', fontsize='large', fontweight='heavy', ha='left',va='top', transform=axw.transAxes, zorder=1000 ) axw.set_ylabel('flux (zp$_{AB}$=25)') axm.set_ylabel('$\Delta$f$_{25}$') elif iax == 2: axw = ax2w axm = ax2m elif iax == 3: axw = ax3w axm = ax3m elif iax == 4: axw = ax4w axm = ax4m axw.yaxis.set_ticks_position('right') axw.yaxis.set_ticks_position('both') axm.yaxis.set_ticks_position('right') axm.yaxis.set_ticks_position('both') axtop = axw.twiny() axtop.set_xlim(trestmin, trestmax) if iax in [2, 3]: pl.setp(axw.get_yticklabels(), visible=False) pl.setp(axm.get_yticklabels(), visible=False) if iax == 2: axtop.set_xlabel('rest frame time (days from peak)') axm.set_xlabel('observer frame time (MJD)') pl.setp(axw.get_xticklabels(), visible=False) axw.text(0.95, 0.92, bb.upper(), ha='right', va='top', color='k', transform=axw.transAxes) color = 'k' axw.plot(mjdmod, ymod_bb, marker=None, color='0.5', ls='-', zorder=-10) axw.errorbar(mjd[ibb], yval[ibb], yerr[ibb], ms=8, marker='o', color=color, mfc=color, mec=color, capsize=0, ls=' ', zorder=10) if not mb: continue axm.text(0.95, 0.5, mb.upper(), ha='right', va='center', backgroundcolor='w', color=color, transform=axm.transAxes) mbfluxdiff = yval[imb] - fit.bandflux(mb, mjd[imb], zp=25, zpsys='ab') axm.errorbar(mjd[imb], mbfluxdiff, fluxerr[imb], color='k', marker='o', mfc='w', ls=' ') # axm.fill_between( mjdmod, fluxerr[imodmb], -fluxerr[imodmb], # color=color, alpha=0.3, zorder=-1000 ) axm.axhline(0, color='k', lw=0.8, ls='--') ax1w.set_xlim(mjdmin, mjdmax) ax1w.set_ylim(-0.08, ymax) ax1m.set_ylim(-ymaxMB, ymaxMB) ax1w.xaxis.set_major_locator(ticker.MultipleLocator(100)) ax1w.xaxis.set_minor_locator(ticker.MultipleLocator(25)) ax1w.yaxis.set_major_locator(ticker.MultipleLocator(0.2)) ax1w.yaxis.set_minor_locator(ticker.MultipleLocator(0.1)) ax1m.xaxis.set_major_locator(ticker.MultipleLocator(100)) ax1m.xaxis.set_minor_locator(ticker.MultipleLocator(25)) ax1m.yaxis.set_major_locator(ticker.MultipleLocator(0.2)) ax1m.yaxis.set_minor_locator(ticker.MultipleLocator(0.1)) fig.subplots_adjust(left=0.1, bottom=0.18, right=0.95, top=0.82, wspace=0., hspace=0) pl.draw()
def lcplot(snid='colfax', yunits='flux', snfitres=None): from matplotlib import pyplot as pl, ticker from pytools import plotsetup, colorpalette as cp import time start = time.time() if snfitres is not None: sn, fit, res = snfitres else: sn, fit, res = dofitIa(snid) if snid == 'bush': snid = 'GSD11Bus' ymax = 0.8 labelcorner = 'upper right' elif snid == 'colfax': snid = 'GND12Col' ymax = 0.7 labelcorner = 'upper right' elif snid == 'stone': snid = 'GND13Sto' ymax = 1.2 labelcorner = 'upper right' else: ymax = 1.2 labelcorner = 'upper right' # optbands = ['f350lp','f606w','f814w','f850lp'] allbands = np.unique(sn['filter']) broadbands = [ band for band in allbands if band in ['f105w', 'f125w', 'f140w', 'f160w'] ] nax = len(broadbands) medbanddict = { 'f105w': 'f098m', 'f125w': 'f127m', 'f140w': 'f139m', 'f160w': 'f153m' } bands = sn['filter'] markers = ['^', 'o', 's', 'd'] colors = [cp.purple, cp.bluegray, cp.darkgreen, cp.red] mjd = sn['mjd'] mag = sn['mag'] magerr = sn['magerr'] flux = sn['flux'] * 10**(-0.4 * (sn['zpt'] - 25)) fluxerr = sn['fluxerr'] * 10**(-0.4 * (sn['zpt'] - 25)) plotsetup.fullpaperfig(2, [8, 3]) pl.clf() fig = pl.gcf() mjdmin = mjd.min() - 10 mjdmax = mjd.max() + 25 mjdmod = np.arange(mjdmin, mjdmax, 1) z = res['parameters'][res['param_names'].index('z')] mjdpeak = res['parameters'][res['param_names'].index('t0')] trestmin = (mjdmin - mjdpeak) / (1 + z) trestmax = (mjdmax - mjdpeak) / (1 + z) iax = 0 for bb, marker, color in zip(broadbands, markers, colors): t1 = time.time() iax += 1 ibb = np.where(bands == bb) mb = medbanddict[bb] imb = np.where(bands == mb) if iax == 1: ax = fig.add_subplot(1, nax, iax) ax1 = ax axtop = ax.twiny() ax1.text(-0.3, 1.22, snid, color='k', fontsize='large', fontweight='heavy', ha='left', va='top', transform=ax.transAxes) elif iax == 2: ax = fig.add_subplot(1, nax, iax, sharex=ax1, sharey=ax1) axtop = ax.twiny() axtop.set_xlabel('rest frame time (days from peak)') ax.set_xlabel('observer frame time (MJD)') pl.setp(ax.get_yticklabels(), visible=False) elif iax == nax: ax = fig.add_subplot(1, nax, iax, sharex=ax1, sharey=ax1) axtop = ax.twiny() ax.yaxis.set_ticks_position('right') ax.yaxis.set_ticks_position('both') else: ax = fig.add_subplot(1, nax, iax, sharex=ax1, sharey=ax1) axtop = ax.twiny() pl.setp(ax.get_yticklabels(), visible=False) if yunits == 'mag': yval = mag yerr = magerr ymod_bb = fit.bandmag(bb, 'ab', mjdmod) ymod_mb = fit.bandmag(mb, 'ab', mjdmod) if iax == 1: ax.set_ylabel('AB mag') # ax.set_ylim( 30.6, 25.2 ) else: yval = flux yerr = fluxerr ymod_bb = fit.bandflux(bb, mjdmod, zp=25, zpsys='ab') ymod_mb = fit.bandflux(mb, mjdmod, zp=25, zpsys='ab') if iax == 1: ax.set_ylabel('flux (zp$_{AB}$=25)') ax.set_ylim(-0.09, ymax) ax.plot(mjdmod, ymod_bb, marker=None, color='0.5', ls='-', zorder=-10) ax.errorbar(mjd[ibb], yval[ibb], yerr[ibb], ms=8, marker='o', color=color, mfc=color, mec=color, capsize=0, ls=' ', zorder=10) if mb in allbands: ax.plot(mjdmod, ymod_mb, marker=None, color='0.5', ls='--', zorder=-10) ax.errorbar(mjd[imb], yval[imb], yerr[imb], ms=9, marker='o', color='k', mfc='w', mec='k', capsize=0, ls=' ', alpha=0.5, zorder=20) if labelcorner == 'lower right': ax.text(0.92, 0.42, '%s' % (bb.upper()), color=color, fontsize='medium', fontweight='heavy', ha='right', va='top', transform=ax.transAxes) if mb in allbands: ax.text(0.92, 0.32, '%s' % (mb.upper()), color='k', fontsize='medium', fontweight='heavy', ha='right', va='top', transform=ax.transAxes) elif labelcorner == 'upper left': ax.text(0.08, 0.92, '%s' % (bb.upper()), color=color, fontsize='medium', fontweight='heavy', ha='left', va='top', transform=ax.transAxes) if mb in allbands: ax.text(0.08, 0.82, '%s' % (mb.upper()), color='k', fontsize='medium', fontweight='heavy', ha='left', va='top', transform=ax.transAxes) if labelcorner == 'upper right': ax.text(0.92, 0.92, '%s' % (bb.upper()), color=color, fontsize='medium', fontweight='heavy', ha='right', va='top', transform=ax.transAxes) if mb in allbands: ax.text(0.92, 0.82, '%s' % (mb.upper()), color='k', fontsize='medium', fontweight='heavy', ha='right', va='top', transform=ax.transAxes) ax.set_xlim(mjdmin, mjdmax) axtop.set_xlim(trestmin, trestmax) ax.xaxis.set_major_locator(ticker.MultipleLocator(100)) ax.xaxis.set_minor_locator(ticker.MultipleLocator(20)) axtop.xaxis.set_major_locator(ticker.MultipleLocator(20)) axtop.xaxis.set_minor_locator(ticker.MultipleLocator(5)) ax.yaxis.set_major_locator(ticker.MultipleLocator(0.2)) ax.yaxis.set_minor_locator(ticker.MultipleLocator(0.1)) for tick in axtop.get_xaxis().get_major_ticks(): tick.set_pad(5.) tick.label1 = tick._get_text1() t2 = time.time() print("%s %.1f %.1f " % (bb.upper(), t2 - start, t2 - t1)) fig.subplots_adjust(left=0.1, bottom=0.18, right=0.95, top=0.82, wspace=0., hspace=0.15) pl.draw() t3 = time.time() print("All %.1f" % (t3 - start))
def mkExtinctionDemoFig(): """ Make a demo figure that shows how the pseudo-colors do not change much even under extreme host galaxy extinction :return: """ from matplotlib import pyplot as pl from matplotlib import ticker from pytools import plotsetup plotsetup.fullpaperfig(figsize=[8, 4]) pl.clf() ax1 = pl.subplot(3, 2, 1) mksedplot(z=2.0, Av=0.0, color='darkblue') ax2 = pl.subplot(3, 2, 3, sharex=ax1, sharey=ax1) mksedplot(z=2.0, Av=1.0, color='green') ax3 = pl.subplot(3, 2, 5, sharex=ax1, sharey=ax1) mksedplot(z=2.0, Av=2.0, color='darkred') pl.setp(ax1.get_xticklabels(), visible=False) pl.setp(ax2.get_xticklabels(), visible=False) ax3.set_xlim(1.12, 1.69) ax3.set_ylim(0.0, 0.7) ax3.set_yticklabels([]) #ax3.set_xticks([1.1,1.3,1.5,1.7]) ax3.set_xlabel('wavelength ($\mu$m)') ax2.set_ylabel('SN Flux or Filter Transmission\n (arbitrary units)') ax1.text(1.27, 0.6, 'F127M', color='darkmagenta', fontsize=9, ha='center', va='center') ax1.text(1.39, 0.6, 'F139M', color='teal', fontsize=9, ha='center', va='center') ax1.text(1.53, 0.6, 'F153M', color='darkorange', fontsize=9, ha='center', va='center') ax1.text(0.95, 0.45, 'A$_V$=0.0', color='darkblue', transform=ax1.transAxes, ha='right', va='top') ax2.text(0.95, 0.65, 'A$_V$=1.0', color='green', transform=ax2.transAxes, ha='right', va='top') ax3.text(0.95, 0.75, 'A$_V$=2.0', color='darkred', transform=ax3.transAxes, ha='right', va='top') ax4 = pl.subplot(2, 2, 2) mkcirclepoints(colorselect=[1, 0], source='hsiao', marker='o', ls=' ', mew=0) pl.setp(ax4.get_xticklabels(), visible=False) ax4.yaxis.set_ticks_position('right') ax4.yaxis.set_ticks_position('both') ax4.yaxis.set_label_position('right') ax5 = pl.subplot(2, 2, 4, sharex=ax4) mkcirclepoints(colorselect=[1, 2], source='hsiao', marker='o', ls=' ', mew=0) ax5.yaxis.set_ticks_position('right') ax5.yaxis.set_ticks_position('both') ax5.yaxis.set_label_position('right') ax5.set_xlim(-0.2, 0.25) ax4.set_ylim(-0.39, 0.19) ax5.set_ylim(-0.15, 0.29) pl.setp(ax5.yaxis.get_label(), rotation=-90) pl.setp(ax4.yaxis.get_label(), rotation=-90) ax4.yaxis.labelpad = 20 ax5.yaxis.labelpad = 20 ax1.xaxis.set_major_locator(ticker.MultipleLocator(0.1)) ax1.xaxis.set_minor_locator(ticker.MultipleLocator(0.05)) ax5.xaxis.set_major_locator(ticker.MultipleLocator(0.1)) ax5.xaxis.set_minor_locator(ticker.MultipleLocator(0.05)) ax4.yaxis.set_major_locator(ticker.MultipleLocator(0.1)) ax4.yaxis.set_minor_locator(ticker.MultipleLocator(0.05)) ax5.yaxis.set_major_locator(ticker.MultipleLocator(0.1)) ax5.yaxis.set_minor_locator(ticker.MultipleLocator(0.05)) fig = pl.gcf() fig.subplots_adjust(left=0.08, right=0.88, bottom=0.15, top=0.97, hspace=0, wspace=0.08)
def mkExtinctionDemoFigSmall(z=2.0): """ make a set of plots showing the SN Ia SED (Hsiao template) at three extinction values, with bandpasses overlaid. :return: """ import numpy as np import sncosmo # from sncosmost import hstbandpasses, ccsnmodels from matplotlib import rc rc('text', usetex=True) rc('text.latex', preamble='\usepackage[usenames]{xcolor}') from matplotlib import pyplot as pl from matplotlib import ticker from pytools import plotsetup from scipy import interpolate as scint fig = plotsetup.fullpaperfig(1, [8, 3]) # load the O'Donnell 1994 dust model dust = sncosmo.OD94Dust() snIa = sncosmo.Model(source='hsiao', effects=[dust], effect_names=['host'], effect_frames=['rest']) ax1 = pl.gca() f127m = sncosmo.get_bandpass('f127m') f139m = sncosmo.get_bandpass('f139m') f153m = sncosmo.get_bandpass('f153m') f125w = sncosmo.get_bandpass('f125w') f140w = sncosmo.get_bandpass('f140w') f160w = sncosmo.get_bandpass('f160w') wf127m = f127m.wave / 10000. wf139m = f139m.wave / 10000. wf153m = f153m.wave / 10000. wf125w = f125w.wave / 10000. wf140w = f140w.wave / 10000. wf160w = f160w.wave / 10000. # ax2 = ax1.twinx() ax2 = ax1 ax2.plot(wf127m, f127m.trans, color='darkmagenta', ls='-', lw=2) ax2.plot(wf153m, f153m.trans, color='darkorange', ls='-', lw=2) ax2.plot(wf125w, f125w.trans, color='darkmagenta', ls='--', lw=2) ax2.plot(wf160w, f160w.trans, color='darkorange', ls='--', lw=2) intf127m = scint.interp1d(wf127m, f127m.trans, bounds_error=False, fill_value=0) intf153m = scint.interp1d(wf153m, f153m.trans, bounds_error=False, fill_value=0) colorlist1, colorlist2 = [], [] for Av, ls, alpha in zip([2, 1, 0], [':', '--', '-'], [0.1, 0.3, 0.5]): snIa.set(z=z, t0=0, hostr_v=3.1, hostebv=Av / 3.1) colorlist1.append( snIa.bandmag('f127m', 'ab', 0) - snIa.bandmag('f125w', 'ab', 0)) colorlist2.append( snIa.bandmag('f153m', 'ab', 0) - snIa.bandmag('f160w', 'ab', 0)) snwave = np.arange(6000., 20000., 10.) snflux = snIa.flux(0, snwave) snwave = snwave / 10000. snflux = 0.12 * snflux / snflux[400] ax1.plot(snwave, snflux, color='k', ls=ls, lw=1, label='%.1f' % Av) overlap127 = np.min([snflux, intf127m(snwave)], axis=0) ax2.fill_between(snwave, np.zeros(len(snwave)), overlap127, color='darkmagenta', alpha=alpha) overlap153 = np.min([snflux, intf153m(snwave)], axis=0) pl.fill_between(snwave, np.zeros(len(snwave)), overlap153, color='darkorange', alpha=alpha) ax1.legend(loc='upper left', bbox_to_anchor=(0.0, 0.9), frameon=False, fontsize=11) ax1.text(0.08, 0.88, 'A$_V$', transform=ax1.transAxes, ha='left', va='bottom', fontsize=11) ax1.text(0.13, 0.88, '$\Delta$m$_{127}$', color='darkmagenta', transform=ax1.transAxes, ha='left', va='bottom', fontsize=11) ax1.text(0.23, 0.88, '$\Delta$m$_{153}$', color='darkorange', transform=ax1.transAxes, ha='left', va='bottom', fontsize=11) ax1.text(0.14, 0.78, '%.3f' % colorlist1[0], color='darkmagenta', transform=ax1.transAxes, ha='left', va='bottom', fontsize=11) ax1.text(0.23, 0.78, '%.3f' % colorlist2[0], color='darkorange', transform=ax1.transAxes, ha='left', va='bottom', fontsize=11) ax1.text(0.14, 0.68, '%.3f' % colorlist1[1], color='darkmagenta', transform=ax1.transAxes, ha='left', va='bottom', fontsize=11) ax1.text(0.23, 0.68, '%.3f' % colorlist2[1], color='darkorange', transform=ax1.transAxes, ha='left', va='bottom', fontsize=11) ax1.text(0.14, 0.58, '%.3f' % colorlist1[2], color='darkmagenta', transform=ax1.transAxes, ha='left', va='bottom', fontsize=11) ax1.text(0.23, 0.58, '%.3f' % colorlist2[2], color='darkorange', transform=ax1.transAxes, ha='left', va='bottom', fontsize=11) # title=+ # '\\textcolor{DarlMagenta}{W}' + # '\\textcolor{F153M-F160W')#, handlelength=0.5, numpoints=3) # ax1.text( 0.15,0.95,,ha='left',va='bottom') ax1.yaxis.set_major_locator(ticker.MultipleLocator(0.1)) ax1.yaxis.set_minor_locator(ticker.MultipleLocator(0.05)) ax1.xaxis.set_major_locator(ticker.MultipleLocator(0.2)) ax1.xaxis.set_minor_locator(ticker.MultipleLocator(0.1)) ax1.set_xlabel('wavelength ($\mu$m)') ax1.set_ylabel('SN Flux or Filter Transmission\n (arbitrary units)') ax1.set_xlim(0.6, 2.0) ax1.set_ylim(0.0, 0.7) ax1.set_yticklabels([]) ax1.text(1.27, 0.6, 'F127M,F125W', color='darkmagenta', fontsize=9, ha='center', va='center') ax1.text(1.53, 0.6, 'F153M,F160W', color='darkorange', fontsize=9, ha='center', va='center') fig.subplots_adjust(left=0.12, right=0.95, bottom=0.18, top=0.92)
def sncosmo_circlefig( simIa=None, simCC=None, simIapkl='stone_SncosmoSim_Ia.pkl', simCCpkl='stone_SncosmoSim_CC.pkl', z_range=[1.6,2.0], nsim=1000, verbose=True, clobber=False ): """ Construct a color-color circle figure for SN Colfax, with observed photometry included. :param simIa: :param simCC: :param simIapkl: :param simCCpkl: :param z_range: :param nsim: :param verbose: :param clobber: :return: """ import medband_classtest import os import cPickle from matplotlib import pyplot as pl # from matplotlib import patheffects as pe import numpy as np from pytools import plotsetup fig = plotsetup.fullpaperfig( 1, figsize=[8,4]) pl.ioff() mjdpk = 56482. mjdmedband = 56475. t0_range = [ mjdmedband-mjdpk-3,mjdmedband-mjdpk+3 ] t0 = mjdmedband-mjdpk if simIa is not None : pass elif os.path.isfile( simIapkl ) and not clobber>1 : if verbose: print("Loading Ia simulation from pickle : %s"%simIapkl) fin = open( simIapkl, 'rb' ) simIa = cPickle.load( fin ) fin.close() else : if verbose: print("Running a new Ia simulation, then saving to pickle : %s"%simIapkl) simIa = medband_classtest.SncosmoSim( 'Ia' , z_range=z_range, t0_range=t0_range, nsim=nsim ) fout = open( simIapkl, 'wb' ) cPickle.dump( simIa, fout, protocol=-1 ) fout.close() if simCC is not None : pass elif os.path.isfile( simCCpkl ) and not clobber>1 : if verbose: print("Loading CC simulation from pickle : %s"%simCCpkl) fin = open( simCCpkl, 'rb' ) simCC = cPickle.load(fin) fin.close() else : if verbose: print("Running a new CC simulation, then saving to pickle : %s"%simCCpkl) simCC = medband_classtest.SncosmoSim( 'CC' , z_range=z_range, t0_range=t0_range, nsim=nsim ) fout = open( simCCpkl, 'wb' ) cPickle.dump( simCC, fout, protocol=-1 ) fout.close() import getredshift plotcontours( simIa, simCC, plotstyle='points' ) fig = pl.gcf() ax1 = fig.add_subplot(1,2,1) mkcirclepoints(zrange=z_range, t0=t0, colorselect=[1,0], coloredaxislabels=False, marker='o' ) ax2 = fig.add_subplot(1,2,2, sharex=ax1) mkcirclepoints(zrange=z_range, t0=t0, colorselect=[1,2], coloredaxislabels=False, marker='o' ) magerr = { # from drop method 'f139m':0.182164 , 'f140w':0.0920638, 'f153m':0.185014 , 'f160w':0.0731440, } mag = { # from idl5 psf fitting 'f139m':25.4198, 'f140w':25.3622, 'f153m':25.5056, 'f160w':25.2278, } f25 = {} ferr25 = {} for k in mag.keys() : f25[k] = 10**(-0.4*(mag[k]-25.)) ferr25[k] = magerr[k] * f25[k] / 2.5*np.log10(np.e) deltamag = { 'f139m':mag['f139m']-mag['f140w'], 'f153m':mag['f153m']-mag['f160w'], } deltamagerr = { 'f139m':np.sqrt(magerr['f139m']**2+magerr['f140w']**2), 'f153m':np.sqrt(magerr['f153m']**2+magerr['f160w']**2), } # ax1.errorbar( deltamag['f139m'], deltamag['f127m'], # deltamagerr['f127m'], deltamagerr['f139m'], # marker='D', ms=10, elinewidth=2, capsize=0, color='darkorange' ) ax2.errorbar( deltamag['f139m'], deltamag['f153m'], deltamagerr['f153m'], deltamagerr['f139m'], marker='D', ms=10, elinewidth=2, capsize=0, color='darkorange' ) ax1.set_xlim( -0.35, 0.3 ) ax1.set_ylim( -0.7, 0.22 ) ax2.set_ylim( -0.4, 0.3 ) ax2.text( deltamag['f139m']+0.05, deltamag['f153m']-0.05, 'GND13Sto' , ha='left',va='top', color='darkorange',fontsize=15,) # path_effects=[pe.withStroke( linewidth=3,foreground='k')] ) # pl.legend( loc='upper right', numpoints=2, handlelength=0.3) pl.draw() pl.ion() return( simIa, simCC )
def mk_histogram_figure(sndatfile='candels_sn_hostphot2.txt', galdata=None, galdatfilelist=['CANDELS.GOODSS.F160W.v1.PHOTOZ.CAT', 'CANDELS.GOODSN.F160W.v1.PHOTOZ.CAT', 'CANDELS.UDS.F160W.v1.photoz.cat', ], insetstamps=False): fig = plotsetup.fullpaperfig() cwd = os.path.abspath('.') sndata = ascii.read(sndatfile, format='commented_header', header_start=-1, data_start=0) igot160 = np.where(sndata['sb_f160w']>0)[0] sb160 = sndata['sb_f160w'][igot160] pIa = sndata['PIa'][igot160] pl.clf() ax = pl.axes([0.06,0.12,0.9,0.6]) ax.hist( sb160, bins=np.arange(20,28,0.5), weights=pIa, color=cp.darkred, alpha=0.5, normed=True ) ax.hist( sb160, bins=np.arange(20,28,0.5), weights=(1-pIa), color=cp.darkblue, alpha=0.5, normed=True ) if galdata is None: galdatalist = [ascii.read(galdatfile) for galdatfile in galdatfilelist] galdata = vstack(galdatalist, join_type='outer') m160 = galdata['mag_f160w'] zphot = galdata['Photo_z'] iz12 = np.where((zphot>1) & (zphot<2.5) )[0] m160 = m160[iz12] ax.hist( m160, bins=np.arange(20,28,0.2), color=cp.black, alpha=0.3, normed=True, zorder=-1000 ) fig.subplots_adjust(left=0.06, bottom=0.12, right=0.97, top=0.97) ax.set_xlabel('SN Host Galaxy Surface Brightness (mag arcsec$^{-2}$)') ax.set_ylabel('Normalized Count') ax.set_yticks([]) ax.text(0.7, 0.92, '\\noindent Magnitude from total flux,\n' 'all galaxies with $1<z<2.5$', transform=ax.transAxes, ha='left', va='top', color=cp.darkgrey) ax.text(0.3, 0.92, '\\noindent CANDELS SN Host galaxies,\n' 'with $1<z<2.5$', transform=ax.transAxes, ha='left', va='top', color=cp.darkgrey) ax.text(0.15, 0.52, 'Type Ia SN', transform=ax.transAxes, ha='right', va='top', color=cp.darkred) ax.text(0.35, 0.62, 'CC SN', transform=ax.transAxes, ha='left', va='top', color=cp.darkblue) ax.plot([22.25, 22.75], [0.2, 0.3], marker=' ', ls='-', color=cp.darkblue, lw=1) ax.plot([21.75, 20.75], [0.13, 0.24], marker=' ', ls='-', color=cp.darkred, lw=1) pl.draw() if insetstamps: ax1 = pl.axes([0.1,0.76,0.18,0.2]) show_sn_on_image('camille','camille_f160w_e00_reg_drz_sci.fits') ax2 = pl.axes([0.42,0.76,0.18,0.2]) show_sn_on_image('gore','gore_f160w_e00_reg_drz_sci.fits') ax3 = pl.axes([0.72,0.76,0.18,0.2]) show_sn_on_image('fairbanks','fairbanks_f160w_e00_reg_drz_sci.fits') #ax1.set_xticks([]) #ax2.set_xticks([]) #ax3.set_xticks([]) #ax1.set_yticks([]) #ax2.set_yticks([]) #ax3.set_yticks([]) imdat = pyfits.getdata('camille/camille_f160w_e00_reg_drz_sci.fits') h,w = imdat.shape #ax1.imshow( imdat[h/2-15:h/2+15,w/2-15:w/2+15], vmin=-0.05, vmax=0.15, # cmap=cm.Greys_r, aspect='equal', interpolation='nearest') return galdata
def plotSNRtest01(datfileIa='colorColorClassify_Ia.dat', datfileCC='colorColorClassify_CC.dat'): """ Plot the results of a classification validation test. :return: """ from matplotlib import pyplot as pl from pytools import plotsetup import numpy as np from astropy.io import ascii datIa = ascii.read(datfileIa, format='commented_header', header_start=-1, data_start=0) datCC = ascii.read(datfileCC, format='commented_header', header_start=-1, data_start=0) pIaIa = datIa['P(Ia|D)'] zIa = datIa['z'] SNRIa = datIa['S/N'] pIaCC = datCC['P(Ia|D)'] zCC = datCC['z'] SNRCC = datCC['S/N'] fig1 = plotsetup.fullpaperfig(figsize=[8, 3]) SNRlist = np.unique(SNRIa) ncol = len(SNRlist) icol = 0 axlist = [] for SNR in SNRlist: icol += 1 if icol == 1: ax1 = pl.subplot(1, ncol, icol) ax = ax1 else: ax = pl.subplot(1, ncol, icol, sharex=ax1, sharey=ax1) axlist.append(ax) out1 = ax.hist(pIaIa[np.where(SNRIa == SNR)[0]], bins=np.arange(0, 1.01, 0.05), color='darkmagenta', alpha=0.3) out2 = ax.hist(pIaCC[np.where(SNRCC == SNR)[0]], bins=np.arange(0, 1.01, 0.05), color='teal', alpha=0.3) ax1.set_xlim(0.0, 1.05) ax1.set_xticks([0.2, 0.4, 0.6, 0.8, 1.0]) ax1 = axlist[0] imid = int(round(len(axlist) / 2)) ax2 = axlist[imid] ax3 = axlist[-1] ax2.set_xlabel('P(Ia$|$D)') ax1.set_ylabel('Number of Test SN') pl.setp(ax2.get_yticklabels(), visible=False) pl.setp(ax2.get_ylabel(), visible=False) ax3.yaxis.set_ticks_position('right') ax3.yaxis.set_ticks_position('both') ax3.yaxis.set_label_position('right') ax1.set_title('S/N=%i' % SNRlist[0], color='0.3') ax2.set_title('S/N=%i' % SNRlist[imid], color='0.3') ax3.set_title('S/N=%i' % SNRlist[-1], color='0.3') ax3.text(0.1, 0.95, 'CCSN\nTest\nSet', color='teal', ha='left', va='top', transform=ax3.transAxes) ax3.text(0.88, 0.95, 'SN Ia\nTest\nSet', color='darkmagenta', ha='right', va='top', transform=ax3.transAxes) pl.subplots_adjust(wspace=0, hspace=0, left=0.09, bottom=0.18, right=0.92, top=0.9) pl.draw()
def plot_light_curve_fit_from_SNANA( snid='colfax', plotmags=False ) : """ make a plot showing the light curve fit, extracted from a SNANA output .TEXT file generated by D.Scolnic""" from pytools import plotsetup, colorpalette as cp from astropy.io import ascii import numpy as np from matplotlib import pyplot as pl from scipy.interpolate import interp1d from matplotlib import ticker import os import sys from hstphot import hstzpt alpha2filter = { 'H':'f160w','N':'f140w','J':'f125w','Y':'f105w', 'Z':'f850l','I':'f814w','V':'f606w', 'L':'f098m','O':'f127m','P':'f139m','Q':'f153m', } colordict = { 'H':'k', 'J':cp.darkgold, 'Y':cp.cadetblue, 'N':cp.darkgreen, 'V':cp.coral } fluxdat = ascii.read( 'CANDELs-%s.LCPLOT.TEXT'%snid ) name = fluxdat['col1'] mjd = fluxdat['col2'] tobs = fluxdat['col3'] fluxcal = fluxdat['col4'] fluxcalerr = fluxdat['col5'] obsflag = fluxdat['col6'] bandletter = fluxdat['col7'] flux = fluxcal * 0.1 fluxerr = fluxcalerr * 0.1 # mag = np.where( flux>0, -2.5*np.log10( flux ) + 25, 35 ) # magerr = np.where( flux>0, 1.0857 * fluxerr / flux, 0.2 ) # medbanddict = {'f105w':'f098m','f125w':'f127m', 'f140w':'f139m', 'f160w':'f153m'} colors = [cp.purple, cp.bluegray,cp.darkgreen,cp.red] plotsetup.fullpaperfig( [8,3] ) pl.clf() fig = pl.gcf() mjdmin = mjd.min()-10 mjdmax = mjd.max()+25 mjdmod = np.arange( mjdmin, mjdmax, 1 ) if snid=='colfax' : ymax=0.7 ymaxMB=0.3 mjdmin= 56025 mjdmax = 56220 z, mjdpeak = 2.1, 56080. snlabel='GND12Col' elif snid=='stone' : ymax=1.2 ymaxMB=0.35 mjdmin= 56430 mjdmax = 56600 z,mjdpeak = 1.8, 56485. snlabel='GND13Sto' trestmin = (mjdmin - mjdpeak)/(1+z) trestmax = (mjdmax - mjdpeak)/(1+z) ax1w = pl.subplot2grid( [4,3], [0,0], rowspan=3 ) ax2w = pl.subplot2grid( [4,3], [0,1], rowspan=3, sharex=ax1w, sharey=ax1w ) ax3w = pl.subplot2grid( [4,3], [0,2], rowspan=3, sharex=ax1w, sharey=ax1w ) ax1m = pl.subplot2grid( [4,3], [3,0], sharex=ax1w ) ax2m = pl.subplot2grid( [4,3], [3,1], sharex=ax1w, sharey=ax1m ) ax3m = pl.subplot2grid( [4,3], [3,2], sharex=ax1w, sharey=ax1m ) iax = 0 for bbl, mbl, color in zip( ['Y','J','N','H'], ['L','O','P','Q'], colors ) : if bbl not in bandletter : continue iax += 1 filternamew = alpha2filter[ bbl ].upper() filternamem = alpha2filter[ mbl ].upper() if iax==1 : axw = ax1w axm = ax1m axw.text( 0.05, 0.92, snlabel, color='k', fontsize='large', fontweight='heavy', ha='left',va='top', transform=axw.transAxes ) # axw.text( -0.28, 1.2, snlabel, backgroundcolor='w', color='k', fontsize='large', fontweight='heavy', ha='left',va='top', transform=axw.transAxes, zorder=1000 ) axw.set_ylabel( 'flux (zp$_{AB}$=25)' ) axm.set_ylabel( '$\Delta$f$_{25}$' ) elif iax==2 : axw = ax2w axm = ax2m else : axw = ax3w axm = ax3m axw.yaxis.set_ticks_position('right') axw.yaxis.set_ticks_position('both') axm.yaxis.set_ticks_position('right') axm.yaxis.set_ticks_position('both') axtop = axw.twiny() axtop.set_xlim( trestmin, trestmax ) if iax==2 : axtop.set_xlabel( 'rest frame time (days from peak)') axm.set_xlabel( 'observer frame time (MJD)') pl.setp( axw.get_yticklabels(), visible=False ) pl.setp( axm.get_yticklabels(), visible=False ) pl.setp( axw.get_xticklabels(), visible=False ) axw.text( 0.95,0.92, filternamew, ha='right', va='top', color=color, transform=axw.transAxes ) iobs = np.where( (bandletter==bbl) & (obsflag>0) )[0] imod = np.where( (bandletter==bbl) & (obsflag==0) )[0] # import pdb; pdb.set_trace() axw.errorbar( mjd[iobs], flux[iobs], fluxerr[iobs], color=color, marker='D', ls=' ', zorder=-100 ) axw.plot( mjd[imod], flux[imod], color=color, marker=' ', ls='-', zorder=-100 ) axw.fill_between( mjd[imod], flux[imod]+fluxerr[imod], flux[imod]-fluxerr[imod], color=color, alpha=0.3, zorder=-1000 ) if mbl not in bandletter : continue axm.text( 0.95,0.5, filternamem, ha='right', va='center', backgroundcolor='w', color=color, transform=axm.transAxes ) iobsmb = np.where( (bandletter==mbl) & (obsflag>0) )[0] imodmb = np.where( (bandletter==mbl) & (obsflag==0) )[0] mbfluxinterp = interp1d( mjd[imodmb], flux[imodmb], fill_value=0, bounds_error=False ) mbfluxdiff = flux[iobsmb] - mbfluxinterp( mjd[iobsmb] ) axm.errorbar( mjd[iobsmb], mbfluxdiff, fluxerr[iobsmb], color=color, marker='o', mfc='w', ls=' ' ) axm.fill_between( mjd[imodmb], fluxerr[imodmb], -fluxerr[imodmb], color=color, alpha=0.3, zorder=-1000 ) axm.axhline( 0, color=color, lw=0.8, ls='--') ax1w.set_xlim( mjdmin, mjdmax ) ax1w.set_ylim( -0.08, ymax ) ax1m.set_ylim( -ymaxMB, ymaxMB ) ax1w.xaxis.set_major_locator( ticker.MultipleLocator( 100 ) ) ax1w.xaxis.set_minor_locator( ticker.MultipleLocator( 25 ) ) ax1w.yaxis.set_major_locator( ticker.MultipleLocator( 0.2 ) ) ax1w.yaxis.set_minor_locator( ticker.MultipleLocator( 0.1 ) ) ax1m.xaxis.set_major_locator( ticker.MultipleLocator( 100 ) ) ax1m.xaxis.set_minor_locator( ticker.MultipleLocator( 25 ) ) ax1m.yaxis.set_major_locator( ticker.MultipleLocator( 0.2 ) ) ax1m.yaxis.set_minor_locator( ticker.MultipleLocator( 0.1 ) ) fig.subplots_adjust( left=0.1, bottom=0.18, right=0.95, top=0.82, wspace=0., hspace=0 ) pl.draw()
def mkdemofig(): """ Construct a demonstration figure showing how the medium band filters pick out features in the Type Ia SN spectrum and how pseudo-colors can provide redshift information. (This is Figure 1 in the paper) """ from matplotlib import ticker from pytools import plotsetup plotsetup.fullpaperfig(figsize=[8, 4]) pl.clf() ax1 = pl.subplot(3, 2, 1) mksedplot(1.8, color='darkblue') ax2 = pl.subplot(3, 2, 3, sharex=ax1, sharey=ax1) mksedplot(2.0, color='green') ax3 = pl.subplot(3, 2, 5, sharex=ax1, sharey=ax1) mksedplot(2.2, color='darkred') pl.setp(ax1.get_xticklabels(), visible=False) pl.setp(ax2.get_xticklabels(), visible=False) ax3.set_xlim(1.12, 1.69) ax3.set_ylim(0.0, 0.7) ax3.set_yticklabels([]) ax3.set_xlabel('wavelength ($\mu$m)') ax2.set_ylabel('SN Flux or Filter Transmission\n (arbitrary units)') ax1.text(1.27, 0.6, 'F127M', color='darkmagenta', fontsize=9, ha='center', va='center') ax1.text(1.39, 0.6, 'F139M', color='teal', fontsize=9, ha='center', va='center') ax1.text(1.53, 0.6, 'F153M', color='darkorange', fontsize=9, ha='center', va='center') ax1.text(0.95, 0.45, 'z=1.8', color='darkblue', transform=ax1.transAxes, ha='right', va='top') ax2.text(0.95, 0.45, 'z=2.0', color='green', transform=ax2.transAxes, ha='right', va='top') ax3.text(0.95, 0.55, 'z=2.2', color='darkred', transform=ax3.transAxes, ha='right', va='top') ax4 = pl.subplot(2, 2, 2) mkcirclepoints(zrange=[1.8, 2.2], colorselect=[1, 0], source='hsiao', marker='o', ls=' ', mew=0.1, mec='w') ax4.text(0.19, -0.13, 'z=1.8', color='darkblue', ha='right', va='center', rotation=0) ax4.text(-0.06, 0.02, 'z=2.0', color='green', ha='center', va='center', rotation=0) ax4.text(0.15, -0.34, 'z=2.2', color='darkred', ha='left', va='center', rotation=0) pl.setp(ax4.get_xticklabels(), visible=False) ax4.yaxis.set_ticks_position('right') ax4.yaxis.set_ticks_position('both') ax4.yaxis.set_label_position('right') ax5 = pl.subplot(2, 2, 4, sharex=ax4) mkcirclepoints(zrange=[1.8, 2.2], colorselect=[1, 2], source='hsiao', marker='o', ls=' ', mew=0.1, mec='w') ax5.yaxis.set_ticks_position('right') ax5.yaxis.set_ticks_position('both') ax5.yaxis.set_label_position('right') ax5.text(0.2, 0.02, 'z=1.8', color='darkblue', ha='center', va='center', rotation=0) ax5.text(-0.07, -0.09, 'z=2.0', color='green', ha='center', va='center', rotation=0) ax5.text(0.11, 0.13, 'z=2.2', color='darkred', ha='center', va='center', rotation=0) ax5.set_xlim(-0.2, 0.25) ax4.set_ylim(-0.39, 0.19) ax5.set_ylim(-0.15, 0.29) pl.setp(ax5.yaxis.get_label(), rotation=-90) pl.setp(ax4.yaxis.get_label(), rotation=-90) ax4.yaxis.labelpad = 20 ax5.yaxis.labelpad = 20 ax1.xaxis.set_major_locator(ticker.MultipleLocator(0.1)) ax1.xaxis.set_minor_locator(ticker.MultipleLocator(0.05)) ax5.xaxis.set_major_locator(ticker.MultipleLocator(0.1)) ax5.xaxis.set_minor_locator(ticker.MultipleLocator(0.05)) ax4.yaxis.set_major_locator(ticker.MultipleLocator(0.1)) ax4.yaxis.set_minor_locator(ticker.MultipleLocator(0.05)) ax5.yaxis.set_major_locator(ticker.MultipleLocator(0.1)) ax5.yaxis.set_minor_locator(ticker.MultipleLocator(0.05)) fig = pl.gcf() fig.subplots_adjust(left=0.08, right=0.88, bottom=0.15, top=0.97, hspace=0, wspace=0.08)
def keck_proposal_plot(sn, fit, res): from pytools import plotsetup from matplotlib import rcParams, pyplot as pl plotsetup.fullpaperfig() pl.clf() tplot = np.arange(57525, 57720, 1) for bandname, color, offset in zip(['f105w', 'f125w', 'f140w', 'f160w'], ['b', 'g', 'darkorange', 'k'], [+1.5, +1, +0.5, 0]): mag = fit.bandmag(bandname, 'ab', tplot) pl.plot(tplot, mag + offset, color=color) snmjd = sn['MJD'] snmag = sn['MAG'] snmagerr = sn['MAGERR'] snband = sn['FILTER'] isn = np.where(snband == bandname.upper()) pl.errorbar(snmjd[isn], snmag[isn] + offset, snmagerr[isn], marker='o', ls=' ', ms=8, capsize=0.1, color=color) ax = pl.gca() ax.invert_yaxis() ax.set_ylim(27.4, 23.8) ax.set_xlim(57540, 57690) ax.text(57585, 27.0, 'Y+1.5 (F105W)', ha='right', color='b', fontsize='large', va='top') ax.text(57597, 25.8, 'J+1 (F125W)', ha='right', color='g', fontsize='large', va='bottom') ax.text(57650, 26.5, 'JH+0.5 (F140W)', ha='left', color='darkorange', fontsize='large', va='top') ax.text(57642, 25.4, 'H (F160W)', ha='left', color='k', fontsize='large', va='bottom') ax.set_xlabel('Observed Time (MJD)') ax.set_ylabel('AB magnitude') fig = pl.gcf() fig.subplots_adjust(left=0.12, bottom=0.14, right=0.97, top=0.97) pl.draw()
def mk_bush_lc_plot( snfitres=None ): from astropy.io import ascii import numpy as np from scipy.interpolate import interp1d from matplotlib import pyplot as pl, ticker from pytools import plotsetup, colorpalette as cp import time start = time.time() if snfitres is not None : sn,fit,res = snfitres else : sn,fit,res = dofit('/Users/rodney/Dropbox/MEDBAND/DATFILES/HST_CANDELS4_bushALL.sncosmo.dat', z=1.15, dz=0.001, t0=55803.1, dt0=25.0, model='s11-2006fo', noUV=True ) snid = 'GSD11Bus' ymax=0.8 # optbands = ['f350lp','f606w','f814w','f850lp'] allbands = np.unique( sn['filter'] ) broadbands = [ band for band in allbands if band in ['f814w','f105w','f125w','f140w','f160w'] ] nax = 5 medbanddict = {'f105w':'f098m','f125w':'f127m', 'f140w':'f139m', 'f160w':'f153m'} bands = sn['filter'] mjd = sn['mjd'] flux = sn['flux'] * 10**(-0.4*(sn['zpt']-25)) fluxerr = sn['fluxerr'] * 10**(-0.4*(sn['zpt']-25)) alpha2filter = { 'H':'f160w','N':'f140w','J':'f125w','Y':'f105w', 'Z':'f850l','I':'f814w','V':'f606w', 'L':'f098m','O':'f127m','P':'f139m','Q':'f153m', } plotsetup.fullpaperfig( [8,3] ) pl.clf() fig = pl.gcf() #mjdmin = mjd.min()-10 #mjdmax = mjd.max()+25 ymax=0.7 ymaxMB=0.39 mjdmin= 55701 mjdmax = 55995 mjdmod = np.arange( mjdmin, mjdmax, 1 ) z, mjdpeak = 1.15, 55802. snlabel='GSD11Bus' trestmin = (mjdmin - mjdpeak)/(1+z) trestmax = (mjdmax - mjdpeak)/(1+z) ax1w = pl.subplot2grid( [4,4], [0,0], rowspan=3 ) ax2w = pl.subplot2grid( [4,4], [0,1], rowspan=3, sharex=ax1w, sharey=ax1w ) ax3w = pl.subplot2grid( [4,4], [0,2], rowspan=3, sharex=ax1w, sharey=ax1w ) ax4w = pl.subplot2grid( [4,4], [0,3], rowspan=3, sharex=ax1w, sharey=ax1w ) #ax5w = pl.subplot2grid( [4,5], [0,4], rowspan=3, sharex=ax1w, sharey=ax1w ) ax1m = pl.subplot2grid( [4,4], [3,0], sharex=ax1w ) ax2m = pl.subplot2grid( [4,4], [3,1], sharex=ax1w, sharey=ax1m ) ax3m = pl.subplot2grid( [4,4], [3,2], sharex=ax1w, sharey=ax1m ) ax4m = pl.subplot2grid( [4,4], [3,3], sharex=ax1w, sharey=ax1m ) #ax5m = pl.subplot2grid( [4,5], [3,4], sharex=ax1w, sharey=ax1m ) iax = 0 for bb, mb in zip( ['f105w','f125w','f140w','f160w'], ['f098m','f127m','f139m','f153m'] ) : iax += 1 ibb = np.where( bands == bb ) imb = np.where( bands == mb ) yval = flux yerr = fluxerr ymod_bb = fit.bandflux( bb, mjdmod , zp=25, zpsys='ab' ) if iax==1 : axw = ax1w axm = ax1m axw.text( 0.05, 0.92, snlabel, color='k', fontsize='large', fontweight='heavy', ha='left',va='top', transform=axw.transAxes ) # axw.text( -0.28, 1.2, snlabel, backgroundcolor='w', color='k', fontsize='large', fontweight='heavy', ha='left',va='top', transform=axw.transAxes, zorder=1000 ) axw.set_ylabel( 'flux (zp$_{AB}$=25)' ) axm.set_ylabel( '$\Delta$f$_{25}$' ) elif iax==2 : axw = ax2w axm = ax2m elif iax==3 : axw = ax3w axm = ax3m elif iax==4 : axw = ax4w axm = ax4m axw.yaxis.set_ticks_position('right') axw.yaxis.set_ticks_position('both') axm.yaxis.set_ticks_position('right') axm.yaxis.set_ticks_position('both') axtop = axw.twiny() axtop.set_xlim( trestmin, trestmax ) if iax in [2,3] : pl.setp( axw.get_yticklabels(), visible=False ) pl.setp( axm.get_yticklabels(), visible=False ) if iax == 2 : axtop.set_xlabel( 'rest frame time (days from peak)') axm.set_xlabel( 'observer frame time (MJD)') pl.setp( axw.get_xticklabels(), visible=False ) axw.text( 0.95,0.92, bb.upper(), ha='right', va='top', color='k', transform=axw.transAxes ) color='k' axw.plot( mjdmod, ymod_bb, marker=None, color='0.5', ls='-' , zorder=-10 ) axw.errorbar( mjd[ibb], yval[ibb], yerr[ibb], ms=8, marker='o', color=color, mfc=color, mec=color, capsize=0, ls=' ' , zorder=10 ) if not mb : continue axm.text( 0.95,0.5, mb.upper(), ha='right', va='center', backgroundcolor='w', color=color, transform=axm.transAxes ) mbfluxdiff = yval[imb] - fit.bandflux( mb, mjd[imb], zp=25, zpsys='ab' ) axm.errorbar( mjd[imb], mbfluxdiff, fluxerr[imb], color='k', marker='o', mfc='w', ls=' ' ) # axm.fill_between( mjdmod, fluxerr[imodmb], -fluxerr[imodmb], # color=color, alpha=0.3, zorder=-1000 ) axm.axhline( 0, color='k', lw=0.8, ls='--') ax1w.set_xlim( mjdmin, mjdmax ) ax1w.set_ylim( -0.08, ymax ) ax1m.set_ylim( -ymaxMB, ymaxMB ) ax1w.xaxis.set_major_locator( ticker.MultipleLocator( 100 ) ) ax1w.xaxis.set_minor_locator( ticker.MultipleLocator( 25 ) ) ax1w.yaxis.set_major_locator( ticker.MultipleLocator( 0.2 ) ) ax1w.yaxis.set_minor_locator( ticker.MultipleLocator( 0.1 ) ) ax1m.xaxis.set_major_locator( ticker.MultipleLocator( 100 ) ) ax1m.xaxis.set_minor_locator( ticker.MultipleLocator( 25 ) ) ax1m.yaxis.set_major_locator( ticker.MultipleLocator( 0.2 ) ) ax1m.yaxis.set_minor_locator( ticker.MultipleLocator( 0.1 ) ) fig.subplots_adjust( left=0.1, bottom=0.18, right=0.95, top=0.82, wspace=0., hspace=0 ) pl.draw()
def sncosmoplot(sn, fit, res): from pytools import plotsetup from matplotlib import rcParams plotsetup.fullpaperfig() rcParams['text.usetex'] = False sncosmo.plot_lc(sn, model=fit, errors=res.errors)
def classdemofig(sim1=None, sim2=None, sim3=None, contours=True, clobber=False, **plotargs): """ Make a circle figure demonstrating the segregation of SN types in pseudo-color space for classification. :param sim1: :param sim2: :param sim3: :param contours: :param clobber: :param plotargs: :return: """ from pytools import plotsetup fig = plotsetup.fullpaperfig(figsize=[8, 4]) sim1, sim2, sim3 = doublecircle(None, sim1, sim2, sim3, clobber=clobber, contours=contours, redshiftcircle=False, **plotargs) ax1 = fig.add_subplot(1, 2, 1) ax2 = fig.add_subplot(1, 2, 2, sharex=ax1) if contours: ax1.text(-0.25, -0.3, 'SN Ia', color=_COLOR1, ha='right', va='top', fontsize=14) ax1.text(0.0, -0.08, 'SN II', color=_COLOR2, ha='center', va='center') ax1.text(-0.2, 0.25, 'SN Ib/c', color=_COLOR3, ha='right', va='top') else: ax1.text(-0.25, -0.3, 'SN Ia', color=_COLOR1, ha='right', va='top', fontsize=14) ax1.text(-0.25, -0.08, 'SN II', color=_COLOR2, ha='right', va='center') ax1.text(-0.25, 0.25, 'SN Ib/c', color=_COLOR3, ha='right', va='top') fig.subplots_adjust(left=0.12, bottom=0.14, right=0.88, top=0.95, wspace=0.1) ax1.set_xlim(-0.45, 0.4) ax1.set_ylim(-0.45, 0.3) ax2.set_ylim(-0.25, 0.3) return (sim1, sim2, sim3)
def mkdemofig(): """ Construct a demonstration figure showing how the medium band filters pick out features in the Type Ia SN spectrum and how pseudo-colors can provide redshift information. (This is Figure 1 in the paper) """ from matplotlib import ticker from pytools import plotsetup plotsetup.fullpaperfig(figsize=[8,4]) pl.clf() ax1 = pl.subplot( 3, 2, 1 ) mksedplot( 1.8, color='darkblue' ) ax2 = pl.subplot( 3, 2, 3, sharex=ax1, sharey=ax1 ) mksedplot( 2.0, color='green') ax3 = pl.subplot( 3, 2, 5, sharex=ax1, sharey=ax1 ) mksedplot( 2.2, color='darkred' ) pl.setp( ax1.get_xticklabels(), visible=False ) pl.setp( ax2.get_xticklabels(), visible=False ) ax3.set_xlim( 1.12, 1.69 ) ax3.set_ylim( 0.0, 0.7 ) ax3.set_yticklabels([]) ax3.set_xlabel('wavelength ($\mu$m)') ax2.set_ylabel('SN Flux or Filter Transmission\n (arbitrary units)') ax1.text(1.27,0.6,'F127M',color='darkmagenta',fontsize=9, ha='center',va='center') ax1.text(1.39,0.6,'F139M',color='teal',fontsize=9, ha='center',va='center') ax1.text(1.53,0.6,'F153M',color='darkorange',fontsize=9, ha='center',va='center') ax1.text(0.95,0.45,'z=1.8', color='darkblue', transform=ax1.transAxes,ha='right',va='top') ax2.text(0.95,0.45,'z=2.0', color='green', transform=ax2.transAxes,ha='right',va='top') ax3.text(0.95,0.55,'z=2.2', color='darkred', transform=ax3.transAxes,ha='right',va='top') ax4 = pl.subplot( 2, 2, 2 ) mkcirclepoints(zrange=[1.8,2.2], colorselect=[1,0], source='hsiao', marker='o', ls=' ', mew=0.1, mec='w' ) ax4.text( 0.19, -0.13, 'z=1.8', color='darkblue', ha='right', va='center', rotation=0) ax4.text( -0.06, 0.02, 'z=2.0', color='green', ha='center', va='center', rotation=0) ax4.text( 0.15, -0.34, 'z=2.2', color='darkred', ha='left', va='center', rotation=0) pl.setp( ax4.get_xticklabels(), visible=False ) ax4.yaxis.set_ticks_position( 'right') ax4.yaxis.set_ticks_position( 'both') ax4.yaxis.set_label_position( 'right') ax5 = pl.subplot( 2, 2, 4, sharex=ax4 ) mkcirclepoints(zrange=[1.8,2.2], colorselect=[1,2], source='hsiao', marker='o', ls=' ', mew=0.1, mec='w' ) ax5.yaxis.set_ticks_position( 'right') ax5.yaxis.set_ticks_position( 'both') ax5.yaxis.set_label_position( 'right') ax5.text( 0.2, 0.02, 'z=1.8', color='darkblue', ha='center', va='center', rotation=0) ax5.text( -0.07,-0.09, 'z=2.0', color='green', ha='center', va='center', rotation=0) ax5.text( 0.11, 0.13, 'z=2.2', color='darkred', ha='center', va='center', rotation=0) ax5.set_xlim( -0.2, 0.25 ) ax4.set_ylim( -0.39, 0.19 ) ax5.set_ylim( -0.15, 0.29 ) pl.setp( ax5.yaxis.get_label(), rotation=-90 ) pl.setp( ax4.yaxis.get_label(), rotation=-90 ) ax4.yaxis.labelpad= 20 ax5.yaxis.labelpad= 20 ax1.xaxis.set_major_locator( ticker.MultipleLocator( 0.1 ) ) ax1.xaxis.set_minor_locator( ticker.MultipleLocator( 0.05 ) ) ax5.xaxis.set_major_locator( ticker.MultipleLocator( 0.1 ) ) ax5.xaxis.set_minor_locator( ticker.MultipleLocator( 0.05 ) ) ax4.yaxis.set_major_locator( ticker.MultipleLocator( 0.1 ) ) ax4.yaxis.set_minor_locator( ticker.MultipleLocator( 0.05 ) ) ax5.yaxis.set_major_locator( ticker.MultipleLocator( 0.1 ) ) ax5.yaxis.set_minor_locator( ticker.MultipleLocator( 0.05 ) ) fig = pl.gcf() fig.subplots_adjust( left=0.08, right=0.88, bottom=0.15, top=0.97, hspace=0, wspace=0.08 )
def lcplot( snid='colfax', yunits='flux', snfitres=None ): from matplotlib import pyplot as pl, ticker from pytools import plotsetup, colorpalette as cp import time start = time.time() if snfitres is not None : sn,fit,res = snfitres else : sn,fit,res = dofitIa( snid ) if snid=='bush' : snid = 'GSD11Bus' ymax=0.8 labelcorner='upper right' elif snid=='colfax' : snid = 'GND12Col' ymax=0.7 labelcorner='upper right' elif snid=='stone' : snid = 'GND13Sto' ymax=1.2 labelcorner='upper right' else : ymax=1.2 labelcorner='upper right' # optbands = ['f350lp','f606w','f814w','f850lp'] allbands = np.unique( sn['filter'] ) broadbands = [ band for band in allbands if band in ['f105w','f125w','f140w','f160w'] ] nax = len(broadbands) medbanddict = {'f105w':'f098m','f125w':'f127m', 'f140w':'f139m', 'f160w':'f153m'} bands = sn['filter'] markers = ['^','o','s','d'] colors = [cp.purple, cp.bluegray,cp.darkgreen,cp.red] mjd = sn['mjd'] mag = sn['mag'] magerr = sn['magerr'] flux = sn['flux'] * 10**(-0.4*(sn['zpt']-25)) fluxerr = sn['fluxerr'] * 10**(-0.4*(sn['zpt']-25)) plotsetup.fullpaperfig( 2, [8,3] ) pl.clf() fig = pl.gcf() mjdmin = mjd.min()-10 mjdmax = mjd.max()+25 mjdmod = np.arange( mjdmin, mjdmax, 1 ) z = res['parameters'][ res['param_names'].index('z') ] mjdpeak = res['parameters'][ res['param_names'].index('t0') ] trestmin = (mjdmin - mjdpeak)/(1+z) trestmax = (mjdmax - mjdpeak)/(1+z) iax = 0 for bb, marker, color in zip( broadbands, markers, colors ) : t1 = time.time() iax += 1 ibb = np.where( bands == bb ) mb = medbanddict[bb] imb = np.where( bands == mb ) if iax==1 : ax = fig.add_subplot( 1, nax, iax ) ax1 = ax axtop = ax.twiny() ax1.text( -0.3, 1.22, snid, color='k', fontsize='large', fontweight='heavy', ha='left',va='top', transform=ax.transAxes ) elif iax==2 : ax = fig.add_subplot( 1, nax, iax, sharex=ax1, sharey=ax1 ) axtop = ax.twiny() axtop.set_xlabel( 'rest frame time (days from peak)') ax.set_xlabel( 'observer frame time (MJD)') pl.setp( ax.get_yticklabels(), visible=False ) elif iax==nax : ax = fig.add_subplot( 1, nax, iax, sharex=ax1, sharey=ax1 ) axtop = ax.twiny() ax.yaxis.set_ticks_position('right') ax.yaxis.set_ticks_position('both') else : ax = fig.add_subplot( 1, nax, iax, sharex=ax1, sharey=ax1 ) axtop = ax.twiny() pl.setp( ax.get_yticklabels(), visible=False ) if yunits=='mag' : yval = mag yerr = magerr ymod_bb = fit.bandmag( bb, 'ab', mjdmod ) ymod_mb = fit.bandmag( mb, 'ab', mjdmod ) if iax==1 : ax.set_ylabel( 'AB mag' ) # ax.set_ylim( 30.6, 25.2 ) else : yval = flux yerr = fluxerr ymod_bb = fit.bandflux( bb, mjdmod , zp=25, zpsys='ab' ) ymod_mb = fit.bandflux( mb, mjdmod , zp=25, zpsys='ab' ) if iax==1 : ax.set_ylabel( 'flux (zp$_{AB}$=25)' ) ax.set_ylim( -0.09, ymax ) ax.plot( mjdmod, ymod_bb, marker=None, color='0.5', ls='-' , zorder=-10 ) ax.errorbar( mjd[ibb], yval[ibb], yerr[ibb], ms=8, marker='o', color=color, mfc=color, mec=color, capsize=0, ls=' ' , zorder=10 ) if mb in allbands : ax.plot( mjdmod, ymod_mb, marker=None, color='0.5', ls='--' , zorder=-10 ) ax.errorbar( mjd[imb], yval[imb], yerr[imb], ms=9, marker='o', color='k', mfc='w', mec='k', capsize=0, ls=' ' , alpha=0.5, zorder=20 ) if labelcorner=='lower right' : ax.text( 0.92,0.42, '%s'%(bb.upper()) , color=color, fontsize='medium', fontweight='heavy', ha='right',va='top', transform=ax.transAxes ) if mb in allbands : ax.text( 0.92,0.32, '%s'%(mb.upper()) , color='k', fontsize='medium', fontweight='heavy', ha='right',va='top', transform=ax.transAxes ) elif labelcorner=='upper left' : ax.text( 0.08,0.92, '%s'%(bb.upper()) , color=color, fontsize='medium', fontweight='heavy', ha='left',va='top', transform=ax.transAxes ) if mb in allbands : ax.text( 0.08,0.82, '%s'%(mb.upper()) , color='k', fontsize='medium', fontweight='heavy', ha='left',va='top', transform=ax.transAxes ) if labelcorner=='upper right' : ax.text( 0.92,0.92, '%s'%(bb.upper()) , color=color, fontsize='medium', fontweight='heavy', ha='right',va='top', transform=ax.transAxes ) if mb in allbands : ax.text( 0.92,0.82, '%s'%(mb.upper()) , color='k', fontsize='medium', fontweight='heavy', ha='right',va='top', transform=ax.transAxes ) ax.set_xlim( mjdmin, mjdmax ) axtop.set_xlim( trestmin, trestmax ) ax.xaxis.set_major_locator( ticker.MultipleLocator( 100 ) ) ax.xaxis.set_minor_locator( ticker.MultipleLocator( 20 ) ) axtop.xaxis.set_major_locator( ticker.MultipleLocator( 20 ) ) axtop.xaxis.set_minor_locator( ticker.MultipleLocator( 5 ) ) ax.yaxis.set_major_locator( ticker.MultipleLocator( 0.2 ) ) ax.yaxis.set_minor_locator( ticker.MultipleLocator( 0.1 ) ) for tick in axtop.get_xaxis().get_major_ticks(): tick.set_pad(5.) tick.label1 = tick._get_text1() t2 = time.time() print( "%s %.1f %.1f "%( bb.upper(), t2-start, t2-t1)) fig.subplots_adjust( left=0.1, bottom=0.18, right=0.95, top=0.82, wspace=0., hspace=0.15 ) pl.draw() t3 = time.time() print( "All %.1f"%( t3-start) )