Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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()
Ejemplo n.º 4
0
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()
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
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()
Ejemplo n.º 7
0
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')
Ejemplo n.º 8
0
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"))
Ejemplo n.º 9
0
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 )
Ejemplo n.º 10
0
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)
Ejemplo n.º 11
0
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()
Ejemplo n.º 12
0
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()
Ejemplo n.º 13
0
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)
Ejemplo n.º 14
0
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()
Ejemplo n.º 15
0
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()
Ejemplo n.º 16
0
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
Ejemplo n.º 17
0
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
Ejemplo n.º 18
0
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()
Ejemplo n.º 19
0
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')
Ejemplo n.º 20
0
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()
Ejemplo n.º 21
0
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))
Ejemplo n.º 22
0
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)
Ejemplo n.º 23
0
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)
Ejemplo n.º 24
0
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 )
Ejemplo n.º 25
0
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
Ejemplo n.º 26
0
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()
Ejemplo n.º 27
0
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()
Ejemplo n.º 28
0
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)
Ejemplo n.º 29
0
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()
Ejemplo n.º 30
0
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()
Ejemplo n.º 31
0
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)
Ejemplo n.º 32
0
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)
Ejemplo n.º 33
0
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 )
Ejemplo n.º 34
0
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) )