Example #1
0
def indiv_calc(ii,zs,options,njks,jks,nmks,mks,logpz):
    print zs[ii]
    out= numpy.empty((2,njks,nmks))
    rc= rcmodel.rcmodel(Z=zs[ii],loggmin=1.8,loggmax='custom',
                        band=options.band,basti=options.basti,
                        imfmodel=options.imfmodel,
                        expsfh=options.expsfh,
                        parsec=options.parsec,
                        stage=options.stage)
    for jj in range(njks):
        if zs[ii] > rcmodel.jkzcut(jks[jj],upper=True) \
                or zs[ii] < rcmodel.jkzcut(jks[jj]):
            out[0,jj,:]= -numpy.finfo(numpy.dtype(numpy.float64)).max
            out[1,jj,:]= -numpy.finfo(numpy.dtype(numpy.float64)).max
            continue
        for kk in range(nmks):
            out[0,jj,kk]= logpz[ii]+rc(jks[jj],mks[kk])+numpy.log(-mks[kk])
            out[1,jj,kk]= logpz[ii]+rc(jks[jj],mks[kk])
    return out
Example #2
0
def indiv_calc(ii,zs,options,njks,jks):
    print zs[ii]
    rc= rcmodel.rcmodel(Z=zs[ii],loggmin=1.8,loggmax=loggmax,
                        band=options.band,basti=options.basti,
                        imfmodel=options.imfmodel,
                        expsfh=options.expsfh,
                        parsec=options.parsec,
                        eta=options.eta)
    out= numpy.empty(njks)
    for jj in range(njks):
        if options.type == 'mode':
            try:
                out[jj]= rc.mode(jks[jj])
            except ValueError:
                out[jj]= numpy.nan
        elif options.type == 'sig':
            try:
                out[jj]= rc.sigmafwhm(jks[jj])
            except ValueError:
                out[jj]= numpy.nan
    return out
Example #3
0
def plot_mx_jkz(parser):
    options,args= parser.parse_args()
    rc= rcmodel.rcmodel(Z=options.Z,loggmin=1.8,loggmax=loggmax,
                        basti=options.basti,band=options.band,
                        parsec=options.parsec,
                        expsfh=options.expsfh,
                        imfmodel=options.imfmodel,
                        eta=options.eta,afe=options.afe)
    #Calculate mode and hm
    njks= 101
    jks= numpy.linspace(0.5,0.8,njks)
    modes= numpy.array([rc.mode(jk) for jk in jks])
    hms= numpy.zeros((njks,2))
    for ii in range(njks):
        try:
            minhm, maxhm= rc.sigmafwhm(jks[ii],straight=True)
        except ValueError:
            minhm, maxhm= numpy.nan, numpy.nan
        hms[ii,0]= minhm
        hms[ii,1]= maxhm
    #Now plot
    bovy_plot.bovy_print(text_fontsize=20.,
                         legend_fontsize=24.,
                         xtick_labelsize=18.,
                         ytick_labelsize=18.,
                         axes_labelsize=24.)
    rc.plot(nbins=101,conditional=True)
    bovy_plot.bovy_plot(jks,modes,'w-',lw=2.,overplot=True)
    bovy_plot.bovy_plot(jks,hms[:,0],'-',lw=2.,color='0.85',overplot=True)
    bovy_plot.bovy_plot(jks,hms[:,1],'-',lw=2.,color='0.85',overplot=True)
    #Overplot the cuts in J-Ks for this Z
    bovy_plot.bovy_plot([rcmodel.zjkcut(options.Z),rcmodel.zjkcut(options.Z)],
                        [0.,-3.],'k--',lw=2.,overplot=True)
    bovy_plot.bovy_plot([rcmodel.zjkcut(options.Z,upper=True),rcmodel.zjkcut(options.Z,upper=True)],
                        [0.,-3.],'k--',lw=2.,overplot=True)
    if options.Z < 0.01: zstr= r'$Z = %.3f$' % options.Z
    else: zstr= r'$Z = %.2f$' % options.Z
    if options.afe:
        bovy_plot.bovy_text(zstr+'\n'+r'$[\alpha/\mathrm{Fe}] = 0.4$',
                            bottom_right=True,size=20.)
    else:
        bovy_plot.bovy_text(zstr,
                            bottom_right=True,size=20.)
    if options.basti and options.Z < 0.01:
        pyplot.annotate(r'$\mathrm{BaSTI}\rightarrow$',(0.5,1.08),
                        xycoords='axes fraction',
                        horizontalalignment='center',
                        verticalalignment='top',size=24.)
        #bovy_plot.bovy_text(r'$\mathrm{BaSTI}$',title=True,size=20.)
    elif options.parsec and options.Z < 0.01:
        pyplot.annotate(r'$\mathrm{PARSEC}\rightarrow$',(0.5,1.08),
                        xycoords='axes fraction',
                        horizontalalignment='center',
                        verticalalignment='top',size=24.)
        #bovy_plot.bovy_text(r'$\mathrm{PARSEC}$',title=True,size=20.)
    elif options.Z < 0.01:
        pyplot.annotate(r'$\mathrm{Padova}\rightarrow$',(0.5,1.08),
                        xycoords='axes fraction',
                        horizontalalignment='center',
                        verticalalignment='top',size=24.)
        #bovy_plot.bovy_text(r'$\mathrm{Padova}$',title=True,size=20.)
    bovy_plot.bovy_end_print(options.outfilename)
    return None
Example #4
0
def plot_logg_jk_apokasc(parser):
    options,args= parser.parse_args()
    #Setup Zs
    if os.path.exists(args[0]):
        savefile= open(args[0],'rb')
        outhist= pickle.load(savefile)
        hists= pickle.load(savefile)
        edgess= pickle.load(savefile)
        data= pickle.load(savefile)
        savefile.close()
    else:
        zs= numpy.arange(0.0005,0.03005,0.0005)
        if _DEBUG:
            zs= numpy.arange(0.0005,0.03005,0.005)
        fehs= isodist.Z2FEH(zs,zsolar=0.017)#0.017 for APOGEE analysis
        zs= zs[numpy.fabs(fehs-options.feh) < 0.2]
        if _DEBUG:
            zs= [zs[numpy.fabs(fehs-options.feh) < 0.2][0]]
        fehs= isodist.Z2FEH(zs,zsolar=0.017)   
        #Load the RC models for each feh individually
        rcms= []
        hists= []
        edgess= []
        for z in zs:
            print z
            trc= rcmodel.rcmodel(Z=z,loggmin=1.,loggmax=3.5,
                                 band=options.band,basti=options.basti,
                                 imfmodel=options.imfmodel,
                                 parsec=options.parsec)
            rcms.append(trc)
            sample= numpy.vstack([trc._sample[:,0],trc._loggs[:,0]]).T
            weights= trc._weights
            hist, edges= numpy.histogramdd(sample,weights=weights,bins=31,
                                           range=[[0.5,0.8],[1.,3.5]])
            hists.append(hist)
            edgess.append(edges)
        #Load APOKASC data
        data= apread.apokasc()
        indx= (data['KASC_RG_LOGG_SCALE_2'] > 1.)\
            *(data['KASC_RG_LOGG_SCALE_2'] < 3.5)\
            *(data['METALS'] > options.feh-0.2)\
            *(data['METALS'] <= options.feh+0.2)
        print "Using %i APOKASC objects ..." % (numpy.sum(indx))
        data= data[indx]
        ndata= numpy.sum(indx)
        #Stack predictions
        outhist= numpy.zeros_like(hists[0])
        for ii in range(ndata):
            zindx= numpy.argmin(numpy.fabs(fehs-data['METALS'][ii]))
            outhist+= hists[zindx]
        save_pickles(args[0],outhist,hists,edgess,data)
    #Normalize each J-K
    for ii in range(len(outhist[:,0])):
        outhist[ii,:]/= numpy.nanmax(outhist[ii,:])/numpy.nanmax(outhist)
        rev= copy.copy(outhist[ii,::-1]) #reverse, but in one go does not always work
        outhist[ii,:]= rev
    if True:
        #Reload apokasc data
        data= apread.apokasc()
        indx= (data['KASC_RG_LOGG_SCALE_2'] > 1.)\
            *(data['KASC_RG_LOGG_SCALE_2'] < 3.5)\
            *(data['METALS'] > options.feh-0.2)\
            *(data['METALS'] <= options.feh+0.2)
        data= data[indx]
    #Plot everything
    bovy_plot.bovy_print()
    bovy_plot.bovy_dens2d(outhist.T,origin='lower',cmap='gist_yarg',
                          xrange=[edgess[0][0][0],edgess[0][0][-1]],
                          yrange=[edgess[0][1][-1],edgess[0][1][0]],
                          aspect=(edgess[0][0][-1]-edgess[0][0][0])/float(edgess[0][1][-1]-edgess[0][1][0]),
                          xlabel=r'$(J-K_s)_0\ [\mathrm{mag}]$',
                          ylabel=r'$\mathrm{Seismic}\ \log g$',
                          shrink=0.78,
                          interpolation='nearest')
    #Overplot APOKASC data
    noseismo= data['SEISMO EVOL'] == 'UNKNOWN'
    if numpy.sum(noseismo) > 0:
        bovy_plot.bovy_plot(data['J0'][noseismo]-data['K0'][noseismo],
                            data['KASC_RG_LOGG_SCALE_2'][noseismo],'bo',
                            overplot=True,
                            mec='none',ms=3.)
    clumpseismo= data['SEISMO EVOL'] == 'CLUMP'
    if numpy.sum(clumpseismo) > 0:
        bovy_plot.bovy_plot(data['J0'][clumpseismo]-data['K0'][clumpseismo],
                            data['KASC_RG_LOGG_SCALE_2'][clumpseismo],'yo',
                            overplot=True,
                            mec='none',ms=4.5)
    noclumpseismo= (data['SEISMO EVOL'] == 'RGB') \
        + (data['SEISMO EVOL'] == 'DWARF/SUBGIANT')
    if numpy.sum(noclumpseismo) > 0:
        bovy_plot.bovy_plot(data['J0'][noclumpseismo]-data['K0'][noclumpseismo],
                            data['KASC_RG_LOGG_SCALE_2'][noclumpseismo],'ro',
                            overplot=True,
                            mec='none',ms=3.)
    bovy_plot.bovy_text(r'$%.1f < [\mathrm{M/H}] \leq %.1f$' % (options.feh-0.2,options.feh+0.2),
                        top_left=True,size=14.)
    bovy_plot.bovy_end_print(options.outfilename)
    return None
Example #5
0
def _calc_one(z, options, nages, lages, dlages):
    print z
    if options.allapogee or options.redapogee:
        rc = rcmodel.rcmodel(
            Z=z,
            loggmax=3.5,
            band=options.band,
            basti=options.basti,
            imfmodel=options.imfmodel,
            parsec=options.parsec,
            eta=options.eta,
        )
    else:
        rc = rcmodel.rcmodel(
            Z=z,
            loggmin=1.8,
            loggmax="custom",
            band=options.band,
            basti=options.basti,
            imfmodel=options.imfmodel,
            parsec=options.parsec,
            eta=options.eta,
        )
    out = numpy.zeros(nages)
    for jj in range(nages):
        jk = rc._jks
        aindx = (rc._lages <= lages[jj] + dlages) * (rc._lages > lages[jj] - dlages)
        if options.allapogee:
            aindx *= jk > 0.5
        elif options.redapogee:
            aindx *= jk > 0.8
        else:
            rcd = rcmodel.rcdist("../../rcdist-apogee/data/rcmodel_mode_jkz_ks_parsec_newlogg.sav")
            predH = numpy.array([rcd(j, z) for j in jk])
            predH = numpy.reshape(predH, len(jk))
            aindx *= (
                (jk < 0.8)
                * (jk > 0.5)
                * (z <= rcmodel.jkzcut(jk, upper=True))
                * (z >= rcmodel.jkzcut(jk))
                * (z <= 0.06)
                * (rc._sample[:, 1] > (predH - 0.4))
                * (rc._sample[:, 1] < (predH + 0.4))
                * (rc._sample[:, 1] > -3.0)
                * (rc._loggs[:, 0] <= 3.5)
            )
        if options.type == "omega":
            try:
                out[jj] = numpy.mean(rc._massweights[aindx])
            except ValueError:
                out[jj] = numpy.nan
        elif options.type == "numfrac":
            try:
                out[jj] = numpy.mean(rc._weights[aindx])
            except ValueError:
                out[jj] = numpy.nan
        elif options.type == "mass":
            try:
                out[jj] = numpy.sum(rc._masses[aindx] * rc._weights[aindx]) / numpy.sum(rc._weights[aindx])
            except ValueError:
                out[jj] = numpy.nan
    return out
Example #6
0
def plot_Z_jk_apokasc(parser):
    options, args = parser.parse_args()
    # Setup Zs
    if os.path.exists(args[0]):
        savefile = open(args[0], "rb")
        outhist = pickle.load(savefile)
        hists = pickle.load(savefile)
        edgess = pickle.load(savefile)
        data = pickle.load(savefile)
        savefile.close()
    else:
        if _PREDICT:
            zs = numpy.arange(0.0005, 0.06005, 0.0005)
            if _DEBUG:
                zs = numpy.arange(0.0005, 0.06005, 0.005)
            # Load the RC models for each feh individually
            rcms = []
            hists = []
            edgess = []
            for z in zs:
                print z
                trc = rcmodel.rcmodel(
                    Z=z,
                    loggmin=1.8,
                    loggmax=2.8,
                    band=options.band,
                    basti=options.basti,
                    imfmodel=options.imfmodel,
                    parsec=options.parsec,
                )
                rcms.append(trc)
                sample = numpy.vstack([trc._sample[:, 0], z * numpy.ones(trc._sample.shape[0])]).T
                weights = trc._weights
                hist, edges = numpy.histogramdd(
                    sample, weights=weights, bins=12, range=[[0.5, 0.8], [0.0, 0.06]]  # 12*(10-_DEBUG*9),
                )
                hists.append(hist)
                edgess.append(edges)
        # Load APOKASC data
        data = apread.apokasc()
        indx = (data["KASC_RG_LOGG_SCALE_2"] > 2.25) * (data["KASC_RG_LOGG_SCALE_2"] < 2.65)
        print "Using %i APOKASC objects ..." % (numpy.sum(indx))
        data = data[indx]
        if _PREDICT:
            # Stack predictions
            outhist = numpy.zeros_like(hists[0])
            for ii in range(len(hists)):
                outhist += hists[ii]
            save_pickles(args[0], outhist, hists, edgess, data)
    if _PREDICT:
        # Normalize each color
        pass
        #        for ii in range(len(outhist[:,0])):
    #            outhist[ii,:]/= numpy.nanmax(outhist[ii,:])/numpy.nanmax(outhist)
    # for ii in range(len(outhist[0,:])):
    #    outhist[:,ii]/= numpy.nanmax(outhist[:,ii])/numpy.nanmax(outhist)
    # Plot everything
    bovy_plot.bovy_print()
    if _PREDICT:
        bovy_plot.bovy_dens2d(
            outhist.T,
            origin="lower",
            cmap="gist_yarg",
            xrange=[edgess[0][0][0], edgess[0][0][-1]],
            yrange=[edgess[0][1][0], edgess[0][1][-1]],
            aspect=(edgess[0][0][-1] - edgess[0][0][0]) / float(edgess[0][1][-1] - edgess[0][1][0]),
            xlabel=r"$(J-K_s)_0\ [\mathrm{mag}]$",
            ylabel=r"$Z$",
            shrink=0.78,
            interpolation="nearest",
        )
        # Overplot APOKASC data
        # Load APOKASC data
        data = apread.apokasc()
        indx = (data["KASC_RG_LOGG_SCALE_2"] > 1.8) * (data["KASC_RG_LOGG_SCALE_2"] < 2.8)
        print "Using %i APOKASC objects ..." % (numpy.sum(indx))
        data = data[indx]
    bovy_plot.bovy_plot(
        data["J0"] - data["K0"],
        options.zsolar * 10.0 ** data["METALS"],
        c=data["KASC_RG_LOGG_SCALE_2"] - 2.45,
        s=20.0,
        edgecolors="none",
        scatter=True,
        colorbar=True,
        overplot=True,
    )
    #                        mec='none',ms=3.)
    # Overplot cuts
    jks = numpy.linspace(0.5, 0.8, 201)
    bovy_plot.bovy_plot(jks, rcmodel.jkzcut(jks), "k--", lw=2.0, overplot=True)
    bovy_plot.bovy_plot(jks, rcmodel.jkzcut(jks, upper=True), "k--", lw=2.0, overplot=True)
    bovy_plot.bovy_end_print(options.outfilename)
    return None