Ejemplo n.º 1
0
def calTP0_from_smica(dffile):
    import hpy

    fi = hpy.File(dffile)
    hascl = fi["clik/lkl_0/has_cl"]
    nb = fi["clik/lkl_0/nbins"] / hascl.sum()
    mt = fi["clik/lkl_0/m_channel_T"] * hascl[0]
    me = fi["clik/lkl_0/m_channel_P"] * hascl[1]
    mb = fi["clik/lkl_0/m_channel_P"] * hascl[2]
    m = mt + me + mb
    hgrp = fi["clik/lkl_0"]
    nc = hgrp.attrs["n_component"]
    prms = []
    fnd = False
    for i in range(1, nc):
        compot = hgrp["component_%d" % i].attrs["component_type"]
        if not (compot in ("calTP", "icalTP")):
            continue
        fnd = True
        break
    if not fnd:

        def cal(vals):
            return nm.ones((nb, m, m))

        cal.varpar = []
        return cal
    names = fi["clik/lkl_0/component_%d/names" % i].replace("\0", " ").split()
    im = fi["clik/lkl_0/component_%d/im" % i]
    if "w" in fi["clik/lkl_0/component_%d" % i]:
        w = fi["clik/lkl_0/component_%d/w" % i]
        other = fi["clik/lkl_0/component_%d/other" % i]
        w.shape = (m, m, 2)
        other.shape = (m, m, 2)
    else:
        w = nm.zeros((m, m, 2), dtype=nm.double)
        w[:, :] = [1, 0]
        other = nm.indices((m, m)).T[:, :, ::-1]
    if compot == "calTP":
        Mexp = nm.exp
    else:
        Mexp = lambda x: 1. / nm.sqrt(x)

    def cal(vals):
        vec = nm.ones(m)
        evals = Mexp(vals)
        vec[im[im < mt]] = evals[im < mt]
        vec[im[im >= mt]] = evals[im >= mt]
        if mb:
            vec[im[im >= mt] + mb] = evals[im >= mt]
        gmat = nm.outer(vec, vec)
        gmat_prime = gmat[other[:, :, 0], other[:, :, 1]]
        gmat = w[:, :, 0] * gmat + w[:, :, 1] * gmat_prime
        return nm.ones((nb, m, m)) * gmat[nm.newaxis, :, :]

    cal.varpar = names
    return cal
Ejemplo n.º 2
0
def remove_selfcheck(fname=None,root_grp=None):
  if fname!=None:
    hf = hpy.File(fname, 'r+')
    root_grp = hf["clik"]
  if "check_param" in root_grp:
    del root_grp["check_param"]
  if "check_value" in root_grp:
    del root_grp["check_value"]
  if fname:
    hf.close()
Ejemplo n.º 3
0
def baseCreateParobject(parobject):
  # init file
  hf = hpy.File(parobject, 'w')
  root_grp = hf.create_group("clik")
  
  # fill general info
  root_grp.attrs["n_lkl_object"] = 0
  root_grp.attrs["lmax"] = [-1,-1,-1,-1,-1,-1]
  
  return root_grp,hf
Ejemplo n.º 4
0
def add_selfcheck(fname,pars):
  import lkl
  mlkl = lkl.clik(fname)
  res = mlkl(pars)
  del(mlkl)
  
  # add check pars
  hf = hpy.File(fname, 'r+')
  root_grp = hf["clik"]
  root_grp.create_dataset("check_param",data=pars)
  root_grp.attrs["check_value"] = float(res)
  hf.close()
  return res
Ejemplo n.º 5
0
def get_bestfit_and_cl(dffile, bffile):
    import hpy
    import lkl

    fi = hpy.File(dffile)
    bff = nm.loadtxt(bffile)
    lmax = fi["clik/lkl_0/lmax"]
    hascl = fi["clik/lkl_0/has_cl"]
    cls = nm.zeros((6, lmax + 1))
    cnt = 0
    for i in range(6):
        if hascl[i]:
            cls[i] = bff[cnt:cnt + lmax + 1]
            cnt += lmax + 1
    lkl = lkl.clik(dffile)
    names = lkl.extra_parameter_names
    bestfit = dict(zip(names, bff[cnt:]))
    return bestfit, cls
Ejemplo n.º 6
0
def calTP_from_smica(dffile):
    cal0 = calTP0_from_smica(dffile)
    import hpy

    fi = hpy.File(dffile)
    hascl = fi["clik/lkl_0/has_cl"]
    nb = fi["clik/lkl_0/nbins"] / hascl.sum()
    mt = fi["clik/lkl_0/m_channel_T"] * hascl[0]
    me = fi["clik/lkl_0/m_channel_P"] * hascl[1]
    mb = fi["clik/lkl_0/m_channel_P"] * hascl[2]
    m = mt + me + mb
    hgrp = fi["clik/lkl_0"]
    nc = hgrp.attrs["n_component"]
    fnd = 0
    TP = {"T": "", "P": ""}
    for i in range(1, nc):
        compot = hgrp["component_%d" % i].attrs["component_type"]
        if compot == "totcal":
            TP["T"] = hgrp["component_%d" % i].attrs["calname"]
            fnd += 1
        if compot == "totcalP":
            TP["P"] = hgrp["component_%d" % i].attrs["calnameP"]
            fnd += 1
        if fnd == 2:
            break
    if fnd == 0:
        return cal0

    def cal(vals):
        rqd = cal0(vals[:-fnd])
        if TP["P"]:
            calP = 1. / (vals[-fnd])
            rP = nm.ones((m, m))
            rP[:mt, mt:] = calP
            rP[mt:, :mt] = calP
            rP[mt:, mt:] = calP**2
            rqd = rqd * rP[nm.newaxis, :, :]
        if TP["T"]:
            calT = 1. / vals[-1]
            rqd = rqd * calT**2
        return rqd

    cal.varpar = [v for v in list(cal0.varpar) + [TP["P"]] + [TP["T"]] if v]
    return cal
Ejemplo n.º 7
0
def beamTP_from_smica(dffile):
    import hpy

    fi = hpy.File(dffile)
    hascl = fi["clik/lkl_0/has_cl"]
    nb = fi["clik/lkl_0/nbins"] / hascl.sum()
    mt = fi["clik/lkl_0/m_channel_T"] * hascl[0]
    me = fi["clik/lkl_0/m_channel_P"] * hascl[1]
    mb = fi["clik/lkl_0/m_channel_P"] * hascl[2]
    m = mt + me + mb
    hgrp = fi["clik/lkl_0"]
    nc = hgrp.attrs["n_component"]
    prms = []
    fnd = False
    for i in range(1, nc):
        compot = hgrp["component_%d" % i].attrs["component_type"]
        if not (compot == "beamTP"):
            continue
        fnd = True
        break
    if not fnd:

        def cal(vals):
            return nm.ones((nb, m, m))

        cal.varpar = []
        return cal
    names = fi["clik/lkl_0/component_%d/names" % i].replace("\0", " ").split()
    neigen = fi["clik/lkl_0/component_%d/neigen" % i]
    im = fi["clik/lkl_0/component_%d/im" % i]
    im.shape = (m, m, neigen)
    modes = fi["clik/lkl_0/component_%d/modes" % i]
    modes.shape = (nb, m, m, neigen)

    def cal(vals):
        nals = nm.concatenate(([0.], vals))
        calpars = nals[im]
        return nm.exp(nm.sum(calpars[nm.newaxis, :, :, :] * modes, 3))

    cal.varpar = names
    return cal
Ejemplo n.º 8
0
def ordering_from_smica(dffile, jac=True):
    import hpy

    fi = hpy.File(dffile)
    msk = fi["clik/lkl_0/criterion_gauss_mask"]
    ord = fi["clik/lkl_0/criterion_gauss_ordering"]
    hascl = fi["clik/lkl_0/has_cl"]
    mT = fi["clik/lkl_0/m_channel_T"]
    mP = fi["clik/lkl_0/m_channel_P"]
    mE = mT * hascl[0]
    mB = mE + mP * hascl[1]
    m = mB + mP * hascl[2]
    #print mT,mP,mE,mB,m
    #print hascl
    nb = fi["clik/lkl_0/nbins"] / hascl.sum()
    m2 = m * m
    ordr = nm.concatenate([
        nm.arange(nb)[msk[iv + jv * m::m2] == 1] * m2 + iv * m + jv
        for iv, jv in zip(ord[::2], ord[1::2])
    ])
    if jac == True:
        Jt = []
        ps = ordr // m2
        ii = (ordr % m2) // m
        jj = (ordr % m2) % m
        ii_T = ii < mE
        jj_T = jj < mE
        ii_E = (ii >= mE) * (ii < mB)
        jj_E = (jj >= mE) * (jj < mB)
        ii_B = (ii >= mB) * (ii < m)
        jj_B = (jj >= mB) * (jj < m)

        if hascl[0]:
            #print (ii_T)[ps==0]
            #print (jj_T)[ps==0]
            #print (ii_T*jj_T)[ps==0]
            jac = nm.array([(ps == i) * ii_T * jj_T for i in range(nb)],
                           dtype=nm.int)
            #print jac.sum(1)
            Jt += [jac]
        if hascl[1]:
            jac = nm.array([(ps == i) * ii_E * jj_E for i in range(nb)],
                           dtype=nm.int)
            Jt += [jac]
        if hascl[2]:
            jac = nm.array([(ps == i) * ii_B * jj_B for i in range(nb)],
                           dtype=nm.int)
            Jt += [jac]
        if hascl[3]:
            TE = (ii_T * jj_E) + (ii_E * jj_T)
            jac = nm.array([(ps == i) * TE for i in range(nb)], dtype=nm.int)
            Jt += [jac]
        if hascl[4]:
            TB = (ii_T * jj_B) + (ii_B * jj_T)
            jac = nm.array([(ps == i) * TB for i in range(nb)], dtype=nm.int)
            Jt += [jac]
        if hascl[5]:
            EB = (ii_E * jj_B) + (ii_B * jj_E)
            jac = nm.array([(ps == i) * EB for i in range(nb)], dtype=nm.int)
            Jt += [jac]

        return ordr, nm.concatenate(Jt)
        #return ordr,nm.array([ordr/m2==i for i in range(nb)],dtype=nm.int)
    fi.close()
Ejemplo n.º 9
0
def parametric_from_smica(h5file, lmin=-1, lmax=-1, ilkl=0):
    import hpy
    ff = hpy.File(h5file, "r")
    return parametric_from_smica_group(ff["clik/lkl_%d" % ilkl], lmin, lmax)
    ff.close()
Ejemplo n.º 10
0
def best_fit_cmb(dffile, bestfit, cty="B"):
    import parobject as php
    import hpy
    import lkl
    import time

    oo, Jt0 = ordering_from_smica(dffile)

    fi = hpy.File(dffile)

    siginv = fi["clik/lkl_0/criterion_gauss_mat"]
    siginv.shape = (len(oo), len(oo))

    lm, oqb, nrms, rqh, rq = get_binned_calibrated_model_and_data(
        dffile, bestfit)
    hascl = fi["clik/lkl_0/has_cl"]
    tm = nm.concatenate([lm for h in hascl if h])

    good = Jt0.sum(1) != 0

    Jt = Jt0[good]

    Yo = nm.sum(oqb, 0) - rqh
    Yo = Yo.flat[oo]

    if cty == "B":
        a = time.time()
        Jt_siginv = nm.zeros((Jt.shape))
        w0, w1 = nm.where(Jt != 0)
        for ii in range(len(w0)):
            i = w0[ii]
            j = w1[ii]
            Jt_siginv[i] += siginv[j]

        print "pcompute Jt_siginv in %d sec" % (time.time() - a)

        b = time.time()
        Jt_siginv_Yo = nm.dot(Jt_siginv, Yo)
        print "pcompute Jt_siginv_Yo in %d sec" % (time.time() - b)

        c = time.time()
        nl = Jt.shape[0]
        Jt_siginv_J = nm.zeros((nl, nl))
        for ii in range(len(w0)):
            j = w0[ii]
            i = w1[ii]
            Jt_siginv_J[j] += Jt_siginv[:, i]
        print "pcompute Jt_siginv_Yo in %d sec" % (time.time() - c)

        #Jt_siginv,Jt_siginv_Yo,Jt_siginv_J = lkl.full_solve(Yo,Jt,siginv)
        #rVec = -lkl.chol_solve(Jt_siginv_J,Jt_siginv_Yo),1./nm.sqrt(Jt_siginv_J.diagonal())
        rVec = -nm.linalg.solve(Jt_siginv_J, Jt_siginv_Yo), 1. / nm.sqrt(
            Jt_siginv_J.diagonal())
        print time.time() - a
    else:
        a = time.time()
        Jt_siginv = nm.dot(Jt, siginv)
        Jt_siginv_Yo = nm.dot(Jt_siginv, Yo)
        Jt_siginv_J = nm.dot(Jt_siginv, Jt.T)

        #rVec = -lkl.chol_solve(Jt_siginv_J,Jt_siginv_Yo),1./nm.sqrt(Jt_siginv_J.diagonal())
        rVec = -nm.linalg.solve(Jt_siginv_J, Jt_siginv_Yo), 1. / nm.sqrt(
            Jt_siginv_J.diagonal())
        print time.time() - a

    #rVec = -nm.linalg.solve(Jt_siginv_J,Jt_siginv_Yo),1./nm.sqrt(Jt_siginv_J.diagonal())
    ##try:
    ##  import scipy.linalg as sla
    ##  cho_fac = sla.cho_factor(Jt_siginv_J)
    ##  rVec = -sla.cho_solve(cho_fac,Jt_siginv_Yo),1./nm.sqrt(Jt_siginv_J.diagonal())
    ##except Exception,e:
    ##  rVec = -nm.linalg.solve(Jt_siginv_J,Jt_siginv_Yo),1./nm.sqrt(Jt_siginv_J.diagonal())

    tVec = nm.zeros(len(tm))
    eVec = tVec * 0.
    tVec[good] = rVec[0]
    eVec[good] = rVec[1]
    tm.shape = (-1, len(lm))
    tVec.shape = tm.shape
    eVec.shape = tm.shape
    return tm, tVec, eVec
Ejemplo n.º 11
0
def get_binned_calibrated_model_and_data(dffile, bestfit, cls=None):
    import hpy
    if isinstance(bestfit, str):
        bestfit, cls = get_bestfit_and_cl(dffile, bestfit)
    fi = hpy.File(dffile)
    cal = calTP_from_smica(dffile)
    cvec = [bestfit[nn] for nn in cal.varpar]
    g = cal(cvec)
    bal = beamTP_from_smica(dffile)
    cvec = [bestfit[nn] for nn in bal.varpar]
    bg = bal(cvec)
    g *= bg
    acmb = fi["clik/lkl_0/A_cmb"]
    g *= nm.outer(acmb, acmb)[nm.newaxis, :, :]
    rqh = fi["clik/lkl_0/Rq_hat"]
    rqh.shape = g.shape
    # don't rescale the data
    #rqh/=g
    prms = parametric_from_smica(dffile)
    oq = []
    nrms = []
    for p in prms:
        print p
        pvec = [bestfit[nn] for nn in p.varpar]
        oq += [p(pvec)]
        if oq[-1].shape[1:] != rqh.shape[1:]:
            bet = nm.zeros((oq[-1].shape[0], rqh.shape[1], rqh.shape[1]))
            bet[:, :oq[-1].shape[1], :oq[-1].shape[1]] = oq[-1]
            oq[-1] = bet
        nrms += [p.__class__.__name__]
    oq = nm.array(oq)
    blmin = fi["clik/lkl_0/bin_lmin"]
    blmax = fi["clik/lkl_0/bin_lmax"]
    b_ws = fi["clik/lkl_0/bin_ws"]
    hascl = fi["clik/lkl_0/has_cl"]
    lmin = fi["clik/lkl_0/lmin"]
    lmax = fi["clik/lkl_0/lmax"]
    nb = fi["clik/lkl_0/nbins"] / hascl.sum()
    mt = fi["clik/lkl_0/m_channel_T"] * hascl[0]
    me = fi["clik/lkl_0/m_channel_P"] * hascl[1]
    mb = fi["clik/lkl_0/m_channel_P"] * hascl[2]
    m = mt + me + mb

    oqb = nm.zeros((len(oq), ) + rqh.shape)
    lm = nm.zeros(nb)
    print oq.shape, oq.shape[0]
    for b in range(nb):
        if oq.shape[0]:
            oqb[:, b] = nm.sum(
                oq[:, blmin[b]:blmax[b] + 1] *
                b_ws[nm.newaxis, blmin[b]:blmax[b] + 1, nm.newaxis,
                     nm.newaxis], 1)
        lm[b] += nm.sum(
            nm.arange(lmin + blmin[b], lmin + blmax[b] + 1) *
            b_ws[blmin[b]:blmax[b] + 1])
    res = lm, oqb, nrms, rqh
    if cls != None:
        rq = nm.zeros((nb, m, m))
        for b in range(nb):
            if mt:
                rq[b, :mt, :mt] += nm.sum(
                    cls[0, lmin + blmin[b]:lmin + blmax[b] + 1] *
                    b_ws[blmin[b]:blmax[b] + 1])
                if me:
                    rq[b, :mt, mt:mt + me] += nm.sum(
                        cls[3, lmin + blmin[b]:lmin + blmax[b] + 1] *
                        b_ws[blmin[b]:blmax[b] + 1])
                    rq[b, mt:mt + me, :mt] += nm.sum(
                        cls[3, lmin + blmin[b]:lmin + blmax[b] + 1] *
                        b_ws[blmin[b]:blmax[b] + 1])
                if mb:
                    rq[b, :mt, mt + me:mb + mt + me] += nm.sum(
                        cls[4, lmin + blmin[b]:lmin + blmax[b] + 1] *
                        b_ws[blmin[b]:blmax[b] + 1])
                    rq[b, mt + me:mb + mt + me, :mt] += nm.sum(
                        cls[4, lmin + blmin[b]:lmin + blmax[b] + 1] *
                        b_ws[blmin[b]:blmax[b] + 1])
            if me:
                rq[b, mt:mt + me, mt:mt +
                   me] += nm.sum(cls[1, lmin + blmin[b]:lmin + blmax[b] + 1] *
                                 b_ws[blmin[b]:blmax[b] + 1])
                if mb:
                    rq[b, mt:mt + me, mt + me:mb + mt + me] += nm.sum(
                        cls[5, lmin + blmin[b]:lmin + blmax[b] + 1] *
                        b_ws[blmin[b]:blmax[b] + 1])
                    rq[b, mt + me:mb + mt + me, mt:mt + me] += nm.sum(
                        cls[5, lmin + blmin[b]:lmin + blmax[b] + 1] *
                        b_ws[blmin[b]:blmax[b] + 1])
            if mb:
                rq[b, mt + me:mt + me + mb, mt + me:mb + mt +
                   me] += nm.sum(cls[2, lmin + blmin[b]:lmin + blmax[b] + 1] *
                                 b_ws[blmin[b]:blmax[b] + 1])

        #rescale le model stupid !
        oqb = nm.array([g * oo for oo in oqb])
        rq = rq * g

        res = lm, oqb, nrms, rqh, rq
    return res
Ejemplo n.º 12
0
def simulate_chanels(dffile, bestfit, cls, calib=True, nside=2048, all=False):
    import hpy
    if isinstance(bestfit, str):
        bestfit, cls = get_bestfit_and_cl(dffile, bestfit)
    fi = hpy.File(dffile)
    cal = calTP_from_smica(dffile)
    cvec = [bestfit[nn] for nn in cal.varpar]
    if not calib:
        cvec = cvec * 0
    g = nm.sqrt(cal(cvec)[0].diagonal())
    hascl = fi["clik/lkl_0/has_cl"]
    lmin = fi["clik/lkl_0/lmin"]
    lmax = fi["clik/lkl_0/lmax"]
    nb = fi["clik/lkl_0/nbins"] / hascl.sum()
    mt = fi["clik/lkl_0/m_channel_T"] * hascl[0]
    me = fi["clik/lkl_0/m_channel_P"] * hascl[1]
    mb = fi["clik/lkl_0/m_channel_P"] * hascl[2]
    m = mt + me + mb
    import healpy as hp

    #icls = [-1,-1,-1,-1,-1,-1]
    #if mt!=0:
    #  icls[0] = 0
    #if me!=0:
    #  icls[1] = 1
    #if mt!=[0]:
    #  icls[2] = 2
    #if mt*me != 0:
    #  icls[3] = 3
    #if mt*mb !=0:
    #  icls[4] = 5
    #if me*mb !=0:
    #  icls[5] = 4

    #ncls = [cls[i] if cls[i].sum() else None for i in icls if i!=-1]

    icls = [0, 1, 2, 3, 5, 4]
    ncls = [cls[i] for i in icls]

    if me == 0 and mb == 0:
        icls = [0]

    print "generate cmb"
    cmb = hp.synfast(ncls, nside, pol=True and len(ncls) > 1, new=True)

    # got maps  for the cmb !

    prms = parametric_from_smica(dffile)
    oq = []
    nrms = []
    for p in prms:
        pvec = [bestfit[nn] for nn in p.varpar]
        oq += [p(pvec)]
        nrms += [p.__class__.__name__]
    oq = nm.array(oq)
    oq = nm.sum(oq, 0)
    print "generate fg"
    fg = _simu_from_rq(mt, me, mb, oq, nside)

    maps = [[None, None, None]] * max(mt, me, mb)
    for i in range(mt):
        maps[i][0] = (cmb[0] + fg[i][0]) * g[i]
    for j in range(max(me, mb)):
        maps[i][1] = (cmb[1] + fg[i][1]) * g[i + mt]
        maps[i][2] = (cmb[2] + fg[i][2]) * g[i + mt]
    if all:
        return maps, cmb, fg, g
    return maps
Ejemplo n.º 13
0
def copy_and_get_0(pars):
  if "input_object" in pars:
    hpy.copyfile(pars.input_object,pars.res_object)
  outhf = hpy.File(pars.res_object,"r+")
  return outhf,outhf["clik/lkl_%d"%pars.int(default=0).lkl_id]