Example #1
0
def fitCon(confile,
           confchain,
           names=None,
           threads=1,
           set_plot=False,
           nwalkers=100,
           nburn=100,
           nchain=100,
           mode="test"):
    """ fit the continuum model.
    """
    if mode == "run":
        confile = ".".join([confile, "myrun"])
    zydata = get_data(confile, names=names)
    cont = Cont_Model(zydata, "drw")
    if mode == "test":
        print(cont([np.log(sigma), np.log(tau)], set_retq=True))
        return (None)
    elif mode == "show":
        cont.load_chain(confchain)
    elif mode == "run":
        confchain = ".".join([confchain, "myrun"])
        cont.do_mcmc(nwalkers=nwalkers,
                     nburn=nburn,
                     nchain=nchain,
                     fburn=None,
                     fchain=confchain,
                     threads=1)
    if set_plot:
        cont.show_hist(bins=100, figout="mcmc0", figext=figext)
    return (cont.hpd)
Example #2
0
def rm_single(rmid, nwalker, nchain, nburn, min_lag, max_lag, fig_out):
    # Input and output data position and name
    file_con = Location.project_loca + "result/light_curve/" + str(rmid) + \
        "/cont.txt"
    file_hbeta = Location.project_loca + "result/light_curve/" + str(rmid) + \
        "/Hbetab.txt"
    lc_plot = Location.project_loca + "result/light_curve/" + str(rmid) + \
        "/lightcurve"
    data_out = Location.project_loca + "result/light_curve/" + str(rmid) + \
        "/cont-hbeta.txt"
    last_mcmc = Location.project_loca + "result/light_curve/" + str(rmid) + \
        "/last_mcmc"
    # Fit continuum
    c = get_data([file_con])
    cmod = Cont_Model(c)
    cmod.do_mcmc(threads=100, nwalkers=nwalker, nchain=nchain, nburn=nburn)
    # Do mcmc
    cy = get_data([file_con, file_hbeta], names=["Continuum", "Hbeta"])
    cy.plot(figout=lc_plot, figext="png")
    cymod = Rmap_Model(cy)
    cymod.do_mcmc(conthpd=cmod.hpd,
                  threads=100,
                  fchain=data_out,
                  nwalkers=nwalker,
                  nchain=2.0 * nchain,
                  nburn=2.0 * nburn,
                  laglimit=[[min_lag, max_lag]])
    # Output mcmc result
    cymod.show_hist(figout=fig_out, figext="png")
    cypred = cymod.do_pred()
    cypred.plot(set_pred=True, obs=cy, figout=last_mcmc, figext="png")
    return [cymod.hpd[0][2], cymod.hpd[1][2], cymod.hpd[2][2]]
Example #3
0
def javelin_fit(ID):
    # 对ugriz五个band分别跑javelin连续谱模型拟合
    # 得到五个拟合结果
    band_pho = ['u', 'g', 'r', 'i', 'z']
    tau_pho = []  # in ugriz order
    sigma_pho = []  # in ugriz order
    for band in band_pho:
        filename = "./data/light_curve/" + band + \
            "_LC_" + ID + ".dat"
        # JAVELIN
        c = get_data([filename])
        cmod = Cont_Model(c)
        cmod.do_mcmc(threads=4)

        # 这里只记录了med的结果:

        # tau_mc_low = exp(cmod.hpd[0,1])
        tau_mc_med = exp(cmod.hpd[1, 1])
        # tau_mc_hig = exp(cmod.hpd[2,1])

        # sigma_mc_low = exp(cmod.hpd[0,0])
        sigma_mc_med = exp(cmod.hpd[1, 0])
        # sigma_mc_hig = exp(cmod.hpd[2,0])

        tau_pho.append(tau_mc_med)
        sigma_pho.append(sigma_mc_med)

    # 返回五个tau,sigma
    # 顺序是urgriz
    return tau_pho, sigma_pho
Example #4
0
def do_javelin(source_name, source_ID, zspec_driving, jd_driving, flux_driving,
               errflux_driving, jd_responding, flux_responding,
               errflux_responding):
    #Calculate lag with python Javelin program

    print "########## computing Javelin for source %d  ##########" % (
        source_ID)

    #converting lcs into a format accepted by the javelin method
    aa = str(np.random.randint(100))
    lcd_name = 'temp/driving_lc_' + aa + '_' + str(source_ID) + '.txt'
    np.savetxt(
        lcd_name,
        np.transpose([
            jd_driving / (1.0 + zspec_driving), flux_driving, errflux_driving
        ]))

    lcr_name = 'temp/responding_lc_' + aa + '_' + str(source_ID) + '.txt'
    np.savetxt(
        lcr_name,
        np.transpose([
            jd_responding / (1.0 + zspec_driving), flux_responding,
            errflux_responding
        ]))

    #running Javelin
    cont = get_data([lcd_name], names=[driving_filter])
    cmod = Cont_Model(cont)
    cmod.do_mcmc(nwalkers=100,
                 nburn=50,
                 nchain=100,
                 fchain="javelin_stat/chain_cont_" + source_name + ".txt")

    bothdata = get_data([lcd_name, lcr_name],
                        names=[driving_filter, responding_filter])
    mod_2band = Pmap_Model(bothdata)  #Rmap_Model(bothdata)
    mod_2band.do_mcmc(nwalkers=100,
                      nburn=50,
                      nchain=100,
                      conthpd=cmod.hpd,
                      laglimit=[[cent_lowlimit, cent_uplimit]],
                      fchain="javelin_stat/jav_chain_all_" + source_name +
                      ".txt")

    sigma, tau, lag, width, scale = np.loadtxt("javelin_stat/jav_chain_all_" +
                                               source_name + ".txt",
                                               unpack=True,
                                               usecols=[0, 1, 2, 3, 4])

    centau_median = np.median(lag)
    centau_uperr = (stats.scoreatpercentile(lag, perclim)) - centau_median
    centau_loerr = centau_median - (stats.scoreatpercentile(
        lag, (100. - perclim)))
    len_chain = len(lag[np.where(lag > -2000000000000)])

    return (source_ID, zspec_driving, len_chain, centau_median, centau_loerr,
            centau_uperr)
Example #5
0
# JAVELINE
#
import matplotlib.pyplot as plt
from javelin.zylc import get_data
from javelin.lcmodel import Cont_Model, Rmap_Model

javdata_con = get_data([
    "../data/con_test.txt",
], names=[
    "con",
])
javdata_rm = get_data(["../data/con_test.txt", "../data/line_test.txt"],
                      names=["con", "line"])
cont = Cont_Model(javdata_con)
#cont.do_mcmc(fchain="mychain0.dat",nwalkers=100, nburn=200, nchain=500)
cont.load_chain("mychain0.dat")
cont.show_hist(bins=100)
cont.get_hpd()
conthpd = cont.hpd
print(conthpd[1, :])
cont_best = cont.do_pred(conthpd[1, :])

x = cont_best.jlist[:]
y = cont_best.mlist[:] + cont_best.blist[:]
ey = cont_best.elist[:]
plt.plot(x[0], y[0] + javdata_con.cont_mean)
plt.fill_between(x[0],
                 y[0] - ey[0] + javdata_con.cont_mean,
                 y[0] + ey[0] + javdata_con.cont_mean,
                 where=None,
                 color='grey')
from javelin.zylc import get_data
from javelin.lcmodel import Cont_Model
from javelin.lcmodel import Rmap_Model

# for i in xrange(50):
for i in xrange(1):
    c = get_data(["dat/continuum.dat"])
    cmod = Cont_Model(c)
    cmod.do_mcmc(nwalkers=200, nburn=100, nchain=200, threads=1)
    a = cmod.get_hpd()
    javdata4 = get_data(["dat/continuum.dat", "dat/yelm.dat", "dat/zing.dat"],
                        names=["Continuum", "Yelm", "Zing"])
    rmap2 = Rmap_Model(javdata4)
    rmap2.do_mcmc(conthpd=a, nwalkers=200, nburn=100, nchain=200, threads=1)

    del rmap2
    del c
    print i
def do_javelin(ra, dec):
    #ra and dec are converted to 6 decimals format
    ras = "%.6f" % ra
    decs = "%.6f" % dec

    print "########## computing Javelin for source located at ra=%f and dec=%f  ##########" % (
        ra, dec)

    try:

        #the diver lc is loaded, we take into account the different formats used for opt and NIR data.
        if driving_filter != 'Q':
            agn_driving = lc_path + driving_filter + '/agn_' + str(
                ras) + '_' + str(decs) + '_' + driving_filter + '.fits'
            arch_driving = pf.open(agn_driving)
            jd_0 = 55000
            head_driving = arch_driving[0].header
            datos_driving = arch_driving[1].data
            jd_driving = datos_driving['JD'] - jd_0
            flux_driving = datos_driving[
                'FLUX_2'] * 1e27  #the flux value is multiplicated by 1e27 to avoid numerical errors produced by small numbers
            errflux_driving = datos_driving['FLUXERR_2'] * 1e27
            zspec_driving = head_driving['REDSHIFT']

        else:
            try:
                agn_driving = lc_path + driving_filter + '/bin3_onechip_' + str(
                    ras) + '_' + str(decs) + '_' + field + '.fits'
                arch_driving = pf.open(agn_driving)
            except:
                agn_driving = lc_path + driving_filter + '/bin3_morechip_' + str(
                    ras) + '_' + str(decs) + '_' + field + '.fits'
                arch_driving = pf.open(agn_driving)
            jd_0 = 2455000
            head_driving = arch_driving[0].header
            datos_driving = arch_driving[1].data
            jd_driving = datos_driving['JD'] - jd_0
            flux_driving = datos_driving[
                'fluxQ'] * 1e27  #the flux value is multiplicated by 1e27 to avoid numerical errors produced by small numbers
            errflux_driving = datos_driving['errfluxQ'] * 1e27
            zspec_driving = head_driving['REDSHIFT']

        lcd_name = 'temp/driving_lc_' + driving_filter + '_' + str(
            ras) + '_' + str(decs) + '.txt'
        np.savetxt(
            lcd_name,
            np.transpose([
                jd_driving / (1.0 + zspec_driving), flux_driving,
                errflux_driving
            ]))

        try:

            #reading the responding filter data
            if responding_filter != 'Q':
                agn_responding = lc_path + responding_filter + '/agn_' + str(
                    ras) + '_' + str(decs) + '_' + responding_filter + '.fits'
                arch_responding = pf.open(agn_responding)
                jd_0 = 55000
                head_responding = arch_responding[0].header
                datos_responding = arch_responding[1].data
                jd_responding = datos_responding['JD'] - jd_0
                flux_responding = datos_responding[
                    'FLUX_2'] * 1e27  #the flux value is multiplicated by 1e27 to avoid numerical errors produced by small numbers
                errflux_responding = datos_responding['FLUXERR_2'] * 1e27
                zspec_responding = head_responding['REDSHIFT']
            else:
                try:
                    agn_driving = lc_path + responding_filter + '/bin3_onechip_' + str(
                        ras) + '_' + field + '.fits'
                    arch_responding = pf.open(agn_responding)
                except:
                    agn_driving = lc_path + responding_filter + '/bin3_morechip_' + str(
                        ras) + '_' + field + '.fits'
                    arch_responding = pf.open(agn_responding)
                jd_0 = 2455000
                head_responding = arch_responding[0].header
                datos_responding = arch_responding[1].data
                jd_responding = datos_responding['JD'] - jd_0
                flux_responding = datos_responding[
                    'fluxQ'] * 1e27  #the flux value is multiplicated by 1e27 to avoid numerical errors produced by small numbers
                errflux_responding = datos_responding['errfluxQ'] * 1e27
                zspec_responding = head_responding['REDSHIFT']

            #converting lcs into a format accepted by the fortran method
            lcr_name = 'temp/responding_lc_' + responding_filter + '_' + str(
                ras) + '_' + str(decs) + '.txt'
            np.savetxt(
                lcr_name,
                np.transpose([
                    jd_responding / (1.0 + zspec_driving), flux_responding,
                    errflux_responding
                ]))

            #running Javelin
            cont = get_data([lcd_name], names=[driving_filter])
            cmod = Cont_Model(cont)
            cmod.do_mcmc(nwalkers=100,
                         nburn=50,
                         nchain=100,
                         fchain=jav_stat_path + "chain_cont_" +
                         driving_filter + "_vs_" + responding_filter + "_" +
                         str(ras) + "_" + str(decs) + ".txt")

            bothdata = get_data([lcd_name, lcr_name],
                                names=[driving_filter, responding_filter])
            mod_2band = Pmap_Model(bothdata)  #Rmap_Model(bothdata)
            mod_2band.do_mcmc(nwalkers=100,
                              nburn=50,
                              nchain=100,
                              conthpd=cmod.hpd,
                              laglimit=[[cent_lowlimit, cent_uplimit]],
                              widlimit=widlimit,
                              fchain=jav_stat_path + "jav_chain_all_" +
                              driving_filter + "_vs_" + responding_filter +
                              "_" + str(ras) + "_" + str(decs) + ".txt")

            sigma, tau, lag, width, scale = np.loadtxt(
                jav_stat_path + "jav_chain_all_" + driving_filter + "_vs_" +
                responding_filter + "_" + str(ras) + "_" + str(decs) + ".txt",
                unpack=True,
                usecols=[0, 1, 2, 3, 4])

            centau_median = np.median(lag)
            centau_uperr = (stats.scoreatpercentile(lag,
                                                    perclim)) - centau_median
            centau_loerr = centau_median - (stats.scoreatpercentile(
                lag, (100. - perclim)))
            len_chain = len(lag[np.where(lag > -2000000000000)])

            return (ra, dec, zspec_driving, len_chain, centau_median,
                    centau_loerr, centau_uperr)

        except:
            print "########## computing iccf FAILS for source located at ra=%f and dec=%f, NO RESPONDING LC available  ##########" % (
                ra, dec)
            cmd = 'rm ' + lcd_name
            os.system(cmd)
            return (ra, dec, -9999, -9999, -9999, -9999, -9999)
    except:

        print "########## computing iccf FAILS for source located at ra=%f and dec=%f, NO DRIVING LC available  ##########" % (
            ra, dec)

        return (ra, dec, -9999, -9999, -9999, -9999, -9999)
Example #8
0
# 22 Nov 2017 17:14:12

from javelin.lcmodel import Cont_Model, Disk_Model
from javelin.zylc import get_data
import os.path

data0 = get_data(["driver.dat",], names=["Driver",])
data0.plot()
cont = Cont_Model(data0, "drw")
if os.path.isfile("driver_chain.dat"):
    print ("cont model chain exists")
    cont.load_chain('driver_chain.dat')
    cont.show_hist(bins=100)
else:
    cont.do_mcmc(nwalkers=100, nburn=100, nchain=200, fburn=None, fchain="driver_chain.dat", threads=1)

conthpd = cont.hpd
print conthpd

data1 = get_data(["driver.dat", "wave2.dat", "wave3.dat", "wave4.dat"], names=["Driver", "Wave 2", "Wave 3", "Wave 4"])
data1.plot()
disk1 = Disk_Model(data1, effwave=[2000., 4000., 5000., 8000.])
if os.path.isfile("thin_disk_chain.dat"):
    print ("disk model chain exists")
    disk1.load_chain('thin_disk_chain.dat')
    disk1.show_hist()
else:
    disk1.do_mcmc(conthpd=conthpd, nwalkers=100, nburn=100, nchain=500, threads=1, fchain="thin_disk_chain.dat", flogp="thin_disk_flogp.dat", fburn="thin_disk_burn.dat")

Example #9
0
#running the javelin code in easy mode
from javelin.zylc import get_data
from javelin.lcmodel import Cont_Model, Pmap_Model, Rmap_Model
c = get_data(["continuum.txt"])
cm = Cont_Model(c)
cm.do_mcmc(nwalkers=1000, nburn=200, nchain=100)

cy = get_data(["continuum.txt", "hb.txt"])
cym = Pmap_Model(cy)
cym.do_mcmc(conthpd=cm.hpd, nwalkers=1000, nburn=200, nchain=100)
cym.show_hist()
cym.get_hpd()
cymhpd = cym.hpd

par_best = cymhpd[1, :]
cym_best = cym.do_pred(par_best)
cym_best.plot(set_pred=True, obs=cy)
def javelin_modeling(time, cflux, lflux, suff='', nburn=1000, nchain=500, mods=None):
    """Do lag calculations with Javelin
    
    Parameters:
        time: [n] array of time axis
        cflux: [2,n] continuum flux and error
        lflux: [2,n] line flux and error
        suff: suffix for printing
        mods: javelin models if already calculated [cont_mod, cont_line_mod]. 
            In that case, this function just does the plotting. 
    """
    
    if mods is None:
        # write light curves to file so javelin can read them #
        irand = np.random.randint(100000)
        text = '\n'.join(['{} {} {}'.format(*x) for x in zip(time, cflux[0], cflux[1])])
        with open('tmp_c%d.dat'%irand, 'w') as fp: fp.write(text)
        text = '\n'.join(['{} {} {}'.format(*x) for x in zip(time, lflux[0], lflux[1])])
        with open('tmp_l%d.dat'%irand, 'w') as fp: fp.write(text)

        # continuum first #
        cont_lc = get_data(['tmp_c%d.dat'%irand])
        cont_mod = Cont_Model(cont_lc)
        cont_mod.do_mcmc(set_verbose=False)
        #cont_mod.show_hist();return 0,cont_mod,0

        # continuum and line #
        cont_line_lc = get_data(['tmp_c%d.dat'%irand, 'tmp_l%d.dat'%irand]) 
        cont_line_mod = Rmap_Model(cont_line_lc)



        llimit = [-100, 100]
        pmap,_ = cont_line_mod.do_map([-0.6, 1.5, 1.0, 0.1, .2], 
                                      fixed=[1,1,1,1,1], set_verbose=False)
        cont_line_mod.do_mcmc(conthpd=cont_mod.hpd, laglimit=[llimit], nburn=nburn, nchain=nchain,
                         #fixed=[1,1,1,1,1], p_fix=pmap, threads=20,set_verbose=False)
                         threads=30,set_verbose=False)

        os.system('rm tmp_c%d.dat tmp_l%d.dat'%(irand, irand))
    else:
        cont_mod, cont_line_mod = mods
    
    # plot the result  of javelin fit #
    chains = cont_line_mod.flatchain
    lag_javelin = plt.histogram(chains[:,2], 400, density=1)

    bins_cent = (lag_javelin[1][1:] + lag_javelin[1][:-1])/2
    bins_err  = (lag_javelin[1][1:] - lag_javelin[1][:-1])/2

    percentile = lambda l: '[{:.4}, {:.4}]'.format(
        *np.percentile(chains[:,2], [(100-l)/2, l+(100-l)/2]))
    text = '# percentiles: 68, 90, 99: {}, {}, {}'.format(*[percentile(x) for x in [68, 90, 99]])
    text += '\n# mean lag: {:.4} +{:.4} {:.4}'.format(
        np.percentile(chains[:,2],50),
        np.percentile(chains[:,2],68+16)-np.percentile(chains[:,2],50),
        np.percentile(chains[:,2],16)-np.percentile(chains[:,2],50))
    print(text)
    text += '\ndescriptor lag_javelin{0},+- lag_javelin_prob{0}\n'.format(suff)
    text += '\n'.join(['{:.4} {:.4} {:.4}'.format(*x) 
                       for x in zip(bins_cent, bins_err, lag_javelin[0])])
    return text, cont_mod, cont_line_mod, lag_javelin