Ejemplo n.º 1
0
def main(argv):
    if len(sys.argv) != 2:
        print("usage : %s lkl_file")
        sys.exit(1)

    lkls = hpy.File(sys.argv[1])["clik"]
    print("found %d likelihoods" % lkls.attrs["n_lkl_object"])
    f0 = sys.argv[1]
    f_tmpl = f0.split(".")
    f_tmpl = ".".join(f_tmpl[:-1] + ["%s"] + [f_tmpl[-1]])

    for lkln in ("lkl_%d" % v for v in range(lkls.attrs["n_lkl_object"])):
        fname = f_tmpl % lkln
        lkl = lkls[lkln]
        print("  " + fname)
        hf = hpy.File(fname, "w", lkls)
        if "lmax" in lkl.attrs:
            lmax = lkl.attrs["lmax"]
        else:
            ell = lkl.attrs["ell"]
            lmax = nm.max(ell)

        lmaxs = nm.where(lkl.attrs["has_cl"], lmax, -nm.ones(6, dtype=nm.int))
        chf = hf.create_group("clik")
        chf.attrs["lmax"] = lmaxs
        chf.attrs["n_lkl_object"] = 1
        lkl.copy(lkl, chf, "lkl_0")

        hf.close()
Ejemplo n.º 2
0
def main_lensing(argv):
  lkl = clik.clik_lensing(sys.argv[1])
  print("clik lensing file = %s"%sys.argv[1])
  if hpy.cldf.is_cldf(argv[1]):
    ff = hpy.File(argv[1])
    ty = ff["clik_lensing/itype"]
    if ty==0:
      renorm = 1
      ren1 = 0
    else:
      renorm = ff["clik_lensing/renorm"]
      ren1 = 0
      if ty in [3,4]:
        ren1 = ff["clik_lensing/ren1"]
  else:
    rr = file(argv[1]).read()
    if ("# format: mono") in rr:
      renorm = 1
      ren1 = 0
    elif ("# format: qecl") in rr:
      renorm = 1
      ren1 = 0
    else:
      renorm = 1
      ren1 = 1
    
  print("  Renormalization: %s\n  N1 computation: %s"%(["Off","On"][renorm],["Off","On"][ren1]))
  print("  lmax = %s (PP TT EE BB TE TB EB)"%lkl.lmax)
  print("  number of extra parameters %d"%len(lkl.extra_parameter_names))
  for nn in lkl.extra_parameter_names:
    print("     %s"%nn)
Ejemplo n.º 3
0
def change_plik_cmbonly(inhf, lklfile, outfile, lmin, lmax):
    olmin = 30
    olmax = 2508
    if lmin == -1 or lmin > lmax or lmin < olmin:
        lmin = olmin
    if lmax == -1 or lmax > olmax:
        lmax = olmax
    nb = 215
    blmin = nm.loadtxt(inhf._name + "/clik/lkl_0/_external/blmin.dat")
    blmax = nm.loadtxt(inhf._name + "/clik/lkl_0/_external/blmax.dat")
    bmin = nm.argmin((blmin + olmin - lmin)**2)
    bmax = nm.argmin((blmax + olmin - lmax)**2)

    lmin = blmin[bmin] + olmin
    lmax = blmax[bmax] + olmin

    print("restrict to %d %d [%d %d]" % (lmin, lmax, bmin, bmax))

    hpy.copyfile(lklfile, outfile)
    outhf = hpy.File(outfile, "r+")
    outhf["clik/lkl_0/bin_min_tt"] = bmin + 1
    outhf["clik/lkl_0/bin_max_tt"] = bmax + 1
    outhf["clik/lkl_0/bin_min_te"] = 1
    outhf["clik/lkl_0/bin_max_te"] = 199
    outhf["clik/lkl_0/bin_min_ee"] = 1
    outhf["clik/lkl_0/bin_max_ee"] = 199

    php.remove_selfcheck(root_grp=outhf["clik"])
    outhf.close()
def main(argv):

  if len(sys.argv)!=2:
    print "usage : %s parfile\n  copy input_clik to output_clik, change lmin and lmax of output_clik.\n  lmin and lmax can be set to -1 to keep the input_clik values.\n  input_clik, must be a plik or commander file.\n  if input_clik is a binned plik file, the effective lmin and lmax will be the set to the closest bins.\n  Here is an example parfile\n    #input and output clik files\n    input_clik = plik_dx11dr2_HM_v18_TT.clik\n\n    output_clik = plik_dx11dr2_HM_v18_TT_no143x143.clik\n\n    #set to -1 to use default value\n    #set to anything else to change lmin\n    lmin = -1    -1    -1    &\n           -1    -1    -1    &\n           -1    -1    -1   \n\n \n    #set to -1 to use default value\n    #set to anything else to change lmax\n    #set any non negative value inferior than lmin (0 is a good example) ro remove a cross spectra\n    lmax = -1    -1    -1    &\n           -1     0    -1    &\n           -1    -1    -1   \n\n "%osp.basename(sys.argv[0])
    sys.exit(0)
  pars = clik.miniparse(argv[1])
  lklfile = pars.str.input_clik
  lmin = pars.int_array.lmin
  lmax = pars.int_array.lmax
  if "beg_notch" in pars:
    beg = pars.int_array.beg_notch
    nd = pars.int_array.end_notch
  else:
    beg = [-1]*len(lmin)
    nd = [-1]*len(lmin)

  outfile = pars.str.output_clik
  
  inhf = hpy.File(lklfile)
  ty = inhf["clik/lkl_0/lkl_type"]
  if ty not in ("smica"):
    print "can only change lmin and lmax for plik likelihoods"
    sys.exit(-1)
  assert ty in ["smica"],"Cannot change lrange for likelihood type %s"%ty
  fnc = globals()["change_%s"%ty]
  fnc(inhf,lklfile,outfile,lmin,lmax,beg,nd)
Ejemplo n.º 5
0
def change_simlow(inhf, lklfile, outfile, lmin, lmax):
    hpy.copyfile(lklfile, outfile)
    outhf = hpy.File(outfile, "r+")
    outhf["clik/lmax"] = [-1, lmax, -1, -1, -1, -1]
    outhf["clik/lkl_0/lmin"] = lmin
    outhf["clik/lkl_0/lmax"] = lmax
    php.remove_selfcheck(root_grp=outhf["clik"])
    outhf.close()
Ejemplo n.º 6
0
def main(argv):

    lkl = hpy.File(sys.argv[1], "r")
    cls = lkl["clik/check_param"][:]
    if len(argv) == 2:
        clfile = argv[1] + ".cls"
    else:
        clfile = argv[2]
    cls.tofile(clfile, sep=" ")
def main(argv):
    pars = clik.miniparse(argv[1])

    inhf = hpy.File(pars.input_object)

    if "external_dir" in inhf["clik/lkl_%d" % pars.int(
            default=0).lkl_id].attrs and inhf["clik/lkl_%d" % pars.int(
                default=0).lkl_id].attrs["external_dir"] == ".":
        import shutil
        shutil.copytree(
            pars.input_object +
            "/clik/lkl_%d/_external" % pars.int(default=0).lkl_id,
            pars.install_path)
    else:
        dts = inhf["clik/lkl_%d/external_data" % pars.int(default=0).lkl_id][:]
        inhf.close()
        if not osp.exists(pars.install_path):
            os.mkdir(pars.install_path)
        f = open(osp.join(pars.install_path, "data.tar"), "w")
        f.write(dts.tostring())
        f.close()
        assert os.system("cd %s;tar xvf data.tar" % pars.install_path) == 0
        assert os.system("cd %s;rm -f data.tar" % pars.install_path) == 0

    if "res_object" in pars:
        hpy.copyfile(pars.input_object, pars.res_object)

        outhf = hpy.File(pars.res_object, "r+")
        try:
            del outhf["clik/lkl_%d/external_data" % pars.int(default=0).lkl_id]
        except Exception as e:
            pass
        try:
            rmtree(pars.input_object +
                   "/clik/lkl_%d/_external" % pars.int(default=0).lkl_id)
        except Exception as e:
            pass

        outhf["clik/lkl_%d" % pars.int(
            default=0).lkl_id].attrs["external_dir"] = pars.install_path
        outhf.close()
Ejemplo n.º 8
0
def main(argv):

    if clik.lkl_lensing.try_lensing(argv[1]):
        return main_lensing(argv)

    lkl = hpy.File(sys.argv[1], "r")
    cls = lkl["clik/check_param"][:]
    if len(argv) == 2:
        clfile = argv[1] + ".cls"
    else:
        clfile = argv[2]
    cls.tofile(clfile, sep=" ")
Ejemplo n.º 9
0
def change_gibbs_gauss(inhf, lklfile, outfile, lmin, lmax):
    olmin = inhf["clik/lkl_0/lmin"]
    if lmin == -1 or lmin > lmax:
        lmin = inhf["clik/lkl_0/lmin"]
    if lmax == -1:
        lmax = inhf["clik/lkl_0/lmax"]
    if lmax > 249:
        print("not possible")
        sys.exit(-1)
    hpy.copyfile(lklfile, outfile)
    outhf = hpy.File(outfile, "r+")
    outhf["clik/lmax"] = [lmax, -1, -1, -1, -1, -1]
    outhf["clik/lkl_0/lmin"] = lmin
    outhf["clik/lkl_0/lmax"] = lmax
    outhf["clik/lkl_0/delta_l"] = lmax
    php.remove_selfcheck(root_grp=outhf["clik"])
    outhf.close()
Ejemplo n.º 10
0
def main(argv):

    if len(sys.argv) != 5:
        print("usage : %s input_clik lmin lmax output_clik\n  copy input_clik to output_clik, change lmin and lmax of output_clik.\n  lmin and lmax can be set to -1 to keep the input_clik values.\n  input_clik, must be a plik or commander file.\n  if input_clik is a binned plik file, the effective lmin and lmax will be the set to the closest bins." % osp.basename(sys.argv[0]))
        sys.exit(0)
    lklfile = sys.argv[1]
    lmin = int(sys.argv[2])
    lmax = int(sys.argv[3])
    outfile = sys.argv[4]

    inhf = hpy.File(lklfile)
    ty = inhf["clik/lkl_0/lkl_type"]
    if ty not in ("smica", "gibbs_gauss"):
        print("can only change lmin and lmax for plik and commander TT likelihoods")
        sys.exit(-1)
    assert ty in [
        "smica", "gibbs_gauss"], "Cannot change lrange for likelihood type %s" % ty
    fnc = globals()["change_%s" % ty]
    fnc(inhf, lklfile, outfile, lmin, lmax)
Ejemplo n.º 11
0
def main_CMB(argv):
  clikl = clik.clik(sys.argv[1])

  extn = clikl.extra_parameter_names
  
  lkl = hpy.File(sys.argv[1],"r")["clik"]
  
  print("clik lkl file =  %s"%sys.argv[1])
  print("  number of likelihoods = %d"%lkl.attrs["n_lkl_object"])
  print("  lmax ( "+ " ".join([nl+" = %d"%ll for nl,ll in zip(("TT","EE","BB","TE","TB","EB"),lkl.attrs["lmax"]) if ll >-1])+" )")
  print("  number of varying extra parameters %d"%(len(extn)))
  for n in extn:
    print("    %s"%n)
  if "prior" in lkl:
    names = lkl["prior"].attrs["name"]
    names = [names[i*256:(i+1)*256].strip() for i in range(len(names)/256)]
    print("  gaussian priors on %s"%", ".join(names))
    loc = lkl["prior/loc"][:]
    print("  at \n    %s"%" ".join([str(l) for l in loc]))
    var = lkl["prior/var"][:]
    if len(var)==len(loc):
      var = nm.diag(var)
    var.shape=(len(loc),-1)
    print("  with variance")
    print("\n".join(["    "+" ".join([str(v) for v in vl]) for vl in var]))
  if "default" in lkl:
    loc = lkl["default/loc"][:] 
    print("  number of fixed parameters = %d"%len(loc))
    nms = lkl["default"].attrs["name"]
    nms = [nms[i*256:i*256+256].strip() for i in range(len(loc))]
    for n,l in zip(nms,loc):
      print("    %s = %g"%(n,l))

  ilkl = 0
  for lkli_n in ("lkl_%d"%v for v in range(lkl.attrs["n_lkl_object"])):
    lkli = lkl[lkli_n]
    print("\n  %s"%lkli_n)
    print("    lkl_type = %s"%lkli.attrs["lkl_type"])
    print("    unit = %g"%lkli.attrs["unit"])
    
    if "lmax" in lkli.attrs:
      lmax = lkli.attrs["lmax"]
      lmin = 0
      if "lmin" in lkli.attrs:
        lmin = lkli.attrs["lmin"]
      ellh = False
    else:
      ell = lkli.attrs["ell"]
      lmax = nm.max(ell)      
      lmin = nm.min(ell)
      ellh = not nm.alltrue((ell[1:]-ell[:-1]) == 1)
    
    print("    "+" ".join([nl+" = [%d , %d]"%(lmin,lmax) for nl,hl in zip(("TT","EE","BB","TE","TB","EB"),lkli.attrs["has_cl"]) if hl ])+" (discontinous)"*ellh)
    
    if "wl" in lkli.attrs:
      print("    has window function")
    if "nbins" in lkli.attrs:
      print("    nbins = %d"%lkli.attrs["nbins"])
    if lkli.attrs["lkl_type"]=="smica":
      print("    component 0 : CMB")
      for nc in range(1,lkli.attrs["n_component"]):
        if "component_name" in lkli["component_%d"%nc]:
          print("    component %d : %s"%(nc,lkli["component_%d"%nc].attrs["component_name"]))
        else:
          print("    component %d : %s"%(nc,lkli["component_%d"%nc].attrs["component_type"]))

    extn = clikl.get_extra_parameter_names_by_lkl(ilkl)
    print("    number of extra parameters = %d %s"%(len(extn),extn))
    ilkl +=1
Ejemplo n.º 12
0
def change_smica(inhf, lklfile, outfile, lmin, lmax):
    olmin = inhf["clik/lkl_0/lmin"]
    olmax = inhf["clik/lkl_0/lmax"]
    if lmin == -1 or lmin > lmax or lmin < olmin:
        lmin = olmin
    if lmax == -1 or lmax > olmax:
        lmax = olmax

    nb = inhf["clik/lkl_0/nbins"]

    blmin = inhf["clik/lkl_0/bin_lmin"]
    blmax = inhf["clik/lkl_0/bin_lmax"]

    bmin = nm.argmin((blmin + olmin - lmin)**2)
    bmax = nm.argmin((blmax + olmin - lmax)**2)

    lmin = blmin[bmin] + olmin
    lmax = blmax[bmax] + olmin

    print("restrict to %d %d" % (lmin, lmax))

    hascl = inhf["clik/lkl_0/has_cl"]
    assert hascl[1:].sum() == 0, "do not work yet on polar data"
    mT = inhf["clik/lkl_0/m_channel_T"]

    ord = inhf["clik/lkl_0/criterion_gauss_ordering"]
    ord.shape = (-1, 2)
    nmsk = inhf["clik/lkl_0/criterion_gauss_mask"]
    nmsk.shape = (nb, mT, mT)

    kp = []
    mx = 0
    for i, j in ord:
        cur = nm.arange(nb)[nmsk[:, i, j] == 1]
        kp += [nm.where((cur < bmax + 1) * (cur > bmin - 1))[0] + mx]
        mx += len(cur)
    kp = nm.concatenate(kp)

    siginv = inhf["clik/lkl_0/criterion_gauss_mat"]
    siginv.shape = (siginv.shape[0]**.5, -1)
    sig = nm.linalg.inv(siginv)
    del(siginv)
    nsig = ((sig[kp])[:, kp]) * 1.
    del(sig)
    nsiginv = nm.linalg.inv(nsig)
    del(nsig)

    hpy.copyfile(lklfile, outfile)
    outhf = hpy.File(outfile, "r+")

    outhf["clik/lmax"] = [lmax, -1, -1, -1, -1, -1]

    outhf["clik/lkl_0/lmin"] = lmin
    outhf["clik/lkl_0/lmax"] = lmax

    outhf["clik/lkl_0/nbins"] = bmax + 1 - bmin
    cutarr(inhf, outhf, 0, nb - 1, bmin, bmax, "clik/lkl_0/bin_lmin")
    outhf["clik/lkl_0/bin_lmin"] = outhf["clik/lkl_0/bin_lmin"] - \
        (lmin - olmin)
    cutarr(inhf, outhf, 0, nb - 1, bmin, bmax, "clik/lkl_0/bin_lmax")
    outhf["clik/lkl_0/bin_lmax"] = outhf["clik/lkl_0/bin_lmax"] - \
        (lmin - olmin)
    cutarr(inhf, outhf, olmin, olmax, lmin, lmax, "clik/lkl_0/bin_ws")

    cutarr(inhf, outhf, 0, nb - 1, bmin, bmax, "clik/lkl_0/Rq_hat")

    cutarr(inhf, outhf, 0, nb - 1, bmin, bmax, "clik/lkl_0/wq")
    cutarr(inhf, outhf, 0, nb - 1, bmin, bmax,
           "clik/lkl_0/criterion_gauss_mask")
    outhf["clik/lkl_0/criterion_gauss_mat"] = nsiginv.flat[:]

    for i in range(1, inhf["clik/lkl_0/n_component"]):
        if "lmin" not in inhf["clik/lkl_0/component_%d" % i]:
            continue
        outhf["clik/lkl_0/component_%d/lmin" % i] = lmin
        outhf["clik/lkl_0/component_%d/lmax" % i] = lmax

    php.remove_selfcheck(root_grp=outhf["clik"])
    outhf.close()
Ejemplo n.º 13
0
def main(argv):
    if len(sys.argv) < 4:
        print(
            "usage : %s lkl_file_1 lkl_file_2 [lkl_file_3 ...] result_lkl_file"
        )
        sys.exit(1)

    for fl in sys.argv[1:-1]:
        if clik.try_lensing(fl):
            print("clik_join doesn't work yet with lensing likelihood, sorry")
            sys.exit(1)

    lkls = [hpy.File(ll)["clik"] for ll in sys.argv[1:-1]]
    reslkl = hpy.File(sys.argv[-1], "w", ty=lkls[0])

    nlkl = 0
    lmax = -nm.ones(6, dtype=nm.int)
    resclik = reslkl.create_group("clik")
    name = []
    loc = []
    defn = []
    defloc = []
    var = nm.zeros((0, 0))

    for lklin in lkls:
        if "prior" in lklin:
            prid = lklin["prior"]
            pname = [n.strip() for n in prid.attrs["name"].split('\0') if n]
            for n in name:
                if n in pname:
                    raise Exception("already got a prior on %s" % n)
            ploc = prid["loc"][:]
            pvar = prid["var"][:]
            if len(pvar) == len(ploc):
                pvar = nm.diag(pvar)
            pvar.shape = (len(ploc), -1)
            nvar = nm.zeros((len(loc) + len(ploc), len(loc) + len(ploc)))
            nvar[:len(loc), :len(loc)] = var
            nvar[len(loc):, len(loc):] = pvar
            var = nvar
            name = list(name) + list(pname)
            loc = nm.concatenate((loc, ploc))

        lmaxin = lklin.attrs["lmax"]
        lmax = nm.max((lmax, lmaxin), 0)
        nlklin = lklin.attrs["n_lkl_object"]

        for i in range(nlklin):
            grpin = "lkl_%d" % i
            grpout = "lkl_%d" % nlkl
            nlkl += 1
            lklin.copy(lklin[grpin], resclik, grpout)

        if "default" in lklin:
            prid = lklin["default"]
            pname = [n.strip() for n in prid.attrs["name"].split('\0') if n]
            ploc = prid["loc"][:]
            for i, n in enumerate(pname):
                l = ploc[i]
                add = True
                for ii, nn in enumerate(defn):
                    if n == nn:
                        if l != defloc[ii]:
                            raise Exception(
                                "cannot fix the same parameter with different values"
                            )
                        add = False
                        break
                if add:
                    defn += [n]
                    defloc += [l]

    if len(name):
        prid = resclik.create_group("prior")
        prid.attrs["name"] = php.pack256(*name)
        prid.create_dataset("loc", data=loc.flat[:])
        prid.create_dataset("var", data=var.flat[:])
    if len(defn):
        prid = resclik.create_group("default")
        prid.attrs["name"] = php.pack256(*defn)
        prid.create_dataset("loc", data=nm.array(defloc).flat[:])

    resclik.attrs["lmax"] = lmax.astype(nm.int)
    resclik.attrs["n_lkl_object"] = nlkl

    reslkl.close()
Ejemplo n.º 14
0
    def __init__(self, clikfile, paramnames=None):
        # paramnames will be used to do the mapping to the extra parameters
        self.dffile = clikfile
        self.name = os.path.splitext(os.path.basename(clikfile))[0]
        if isinstance(paramnames, (list, tuple)):
            self.parnames = paramnames
        else:
            if paramnames is None:
                # match versions to the baseline .paramnames file
                for rem in ['_', 'a_', 'b_', 'c_', 'd_']:
                    name = self.name.replace(rem, '_').replace('_bin1', '')
                    paramnames = os.path.join(
                        os.path.dirname(__file__),
                        '../../data/' + name + '.paramnames')
                    if os.path.exists(paramnames):
                        break
            self.paramnamefile = paramnames
            self.paramnames = ParamNames(paramnames)
            self.parnames = self.paramnames.list()

        self.clik = clik.clik(clikfile)
        self._translate_parname(self.parnames)

        self.fi = hpy.File(self.dffile)

        # some metadata
        self.hascl = self.fi["clik/lkl_0/has_cl"]
        self.lmin = self.fi["clik/lkl_0/lmin"]
        self.lmax = self.fi["clik/lkl_0/lmax"]

        self.mt = self.fi["clik/lkl_0/m_channel_T"] * self.hascl[0]
        self.me = self.fi["clik/lkl_0/m_channel_P"] * self.hascl[1]
        self.mb = self.fi["clik/lkl_0/m_channel_P"] * self.hascl[2]
        self.m = self.mt + self.me + self.mb

        self.nb = self.fi["clik/lkl_0/nbins"] / self.hascl.sum()
        self.rq_shape = (self.nb, self.m, self.m)

        # binning details
        self.blmin = self.fi["clik/lkl_0/bin_lmin"]
        self.blmax = self.fi["clik/lkl_0/bin_lmax"]
        self.b_ws = self.fi["clik/lkl_0/bin_ws"]
        # the binning matrix is also simply obtained this way (but using it is slower than using the binning details, 'cause it's full of zeros)
        self.bns = php.read_bins(self.fi["clik/lkl_0"])

        # compute the binned ells
        self.lm = np.dot(self.bns[:self.nb, :self.lmax - self.lmin + 1],
                         np.arange(self.lmin, self.lmax + 1))

        # get the calibration part (and beam for plik 2015)
        # cal and bal are functions that expect a vector of parameters whose name and ordering are given by cal.varpar and bal.varpar
        # overal calibration is given by cal(pars)*vec(pars)*outer(acmb,acmb)[nm.newaxis,:,:]
        self.cal = smh.calTP_from_smica(self.dffile)
        self.bal = smh.beamTP_from_smica(self.dffile)
        self.acmb = self.fi["clik/lkl_0/A_cmb"]

        # get the binned Cl data array
        self.rqh = self.fi["clik/lkl_0/Rq_hat"]
        self.rqh.shape = self.rq_shape

        # get the additive nuisance components
        self.prms = smh.parametric_from_smica(self.dffile)
        self.prms_name = [p.get_name() for p in self.prms]

        # get the selection vector
        self.oo, self.Jt = smh.ordering_from_smica(self.dffile)

        # get the inverse covariance
        self.siginv = self.fi["clik/lkl_0/criterion_gauss_mat"]
        self.siginv.shape = (len(self.oo), len(self.oo))

        ls = np.arange(self.lmax + 1)
        self.llp1 = ls * (ls + 1) / (2 * np.pi)
        self.llp1[0] = 1
        self.indices = [(0, 0), (1, 1), (2, 2), (0, 1), (0, 2), (1, 2)]
        self.spectra = ["tt", "ee", "bb", "te", "tb", "eb"]
def change_smica(inhf,lklfile,outfile,lmins,lmaxs,beg,nd):
  olmin = inhf["clik/lkl_0/lmin"]
  olmax = inhf["clik/lkl_0/lmax"]
  lmaxs = nm.array([olmax if (lm == -1 or lm>olmax) else lm for lm in lmaxs])
  lmins = nm.array([olmin if (lm == -1 or lm<olmin) else lm for lm in lmins])
  beg_notch = nm.array([lmx if (lm == -1 or lm>lmx) else lm for lm,lmx in zip(beg,lmaxs)])
  end_notch = nm.array([lmx if (lm == -1 or lm<lmx) else lm for lm,lmx in zip(nd,lmins)])
  
  kpp =  lmaxs>lmins
  
  nb = inhf["clik/lkl_0/nbins"]

  hascl = inhf["clik/lkl_0/has_cl"]
  mT = inhf["clik/lkl_0/m_channel_T"]
  mP = inhf["clik/lkl_0/m_channel_P"]  
  mE = mT*hascl[0]
  mB = mE + mP*hascl[1]
  m =  mB + mP*hascl[2]
  
  blmin = inhf["clik/lkl_0/bin_lmin"][:nb/nm.sum(hascl)]
  blmax = inhf["clik/lkl_0/bin_lmax"][:nb/nm.sum(hascl)]
  
  
  bmins = nm.array([nm.argmin((blmin+olmin-lm)**2) for lm in lmins])
  bmaxs = nm.array([nm.argmin((blmax+olmin-lm)**2) for lm in lmaxs])

  
  bbeg_notch = nm.array([nm.argmin((blmin+olmin-lm)**2) for lm in beg_notch])
  bend_notch = nm.array([nm.argmin((blmin+olmin-lm)**2) for lm in end_notch])

  lmins = nm.array([blmin[bm]+olmin for bm in bmins])
  lmaxs = nm.array([blmax[bm]+olmin for bm in bmaxs])

  
  beg_notch = nm.array([blmin[bm]+olmin for bm in bbeg_notch])
  end_notch = nm.array([blmax[bm]+olmin for bm in bend_notch])

  
  dnames = inhf["clik/lkl_0/dnames"]
  dnames = [dnames[i*256:(i+1)*256].strip("\0") for i in range(len(dnames)/256)]
  print "restrict to"
  cc = 0
  for a in range(3):
    aT = "TEB"[a]
    for ii in range(mT if a==0 else mP*hascl[a]):
      for b in range(3):
        bT = "TEB"[b]
        for jj in range(mT if b==0 else mP*hascl[b]):
          print "  %s%s %s%s lmin = %d, lmax = %d"%(aT,dnames[mT*(a!=0)+ii][:-1],bT,dnames[mT*(b!=0)+jj][:-1],lmins[cc]*kpp[cc],lmaxs[cc]*kpp[cc]),
          if beg_notch[cc]*kpp[cc]<end_notch[cc]*kpp[cc]:
            print "[notch %d -> %d]"%(beg_notch[cc]*kpp[cc],end_notch[cc]*kpp[cc],),
          print ""
          cc+=1


  lmin = min(lmins[kpp])
  lmax = max(lmaxs[kpp])
  bmin = min(bmins[kpp])
  bmax = max(bmaxs[kpp])
  
  #sys.exit(-1)

  ord = inhf["clik/lkl_0/criterion_gauss_ordering"]
  ord.shape=(-1,2)
  nmsk = inhf["clik/lkl_0/criterion_gauss_mask"]
  nmsk.shape=(nb/nm.sum(hascl),m,m)

  kp = []
  mx = 0
  bmins.shape=(m,m)
  bmaxs.shape=(m,m)
  bbeg_notch.shape=(m,m)
  bend_notch.shape=(m,m)
  kpp.shape=(m,m)
  nnmsk = nmsk*1

  for i,j in ord:
    cur = nm.arange(nb/nm.sum(hascl))[nmsk[:,i,j]==1]
    nnmsk[:bmins[i,j],i,j] = 0
    nnmsk[bmaxs[i,j]+1:,i,j] = 0
    nnmsk[bbeg_notch[i,j]:bend_notch[i,j]+1,i,j]=0
    if kpp[i,j]:
      kp += [nm.where((cur<bmaxs[i,j]+1) * (cur>bmins[i,j]-1) * (((cur>bbeg_notch[i,j]-1) * (cur<bend_notch[i,j]+1))==False))[0]+mx]
      #print "cur",cur+mx
      #print "kp",kp[-1]
      #print i,j,len(cur),len(kp[-1])
      #print (cur<bmaxs[i,j]+1)
      #print (cur>bmins[i,j]-1)
      #print (cur<bbeg_notch[i,j]+1),bbeg_notch[i,j]
      #print (cur>bend_notch[i,j]-1),bend_notch[i,j]
    else:
      nnmsk[:,i,j] = 0
    mx += len(cur)
    
  kp = nm.concatenate(kp)
  
  siginv = inhf["clik/lkl_0/criterion_gauss_mat"]
  siginv.shape=(siginv.shape[0]**.5,-1)
  sig = nm.linalg.inv(siginv)
  del(siginv)
  
  nsig = ((sig[kp])[:,kp])*1.
  del(sig)
  nsiginv = nm.linalg.inv(nsig)
  del(nsig)

  hpy.copyfile(lklfile,outfile)
  outhf = hpy.File(outfile,"r+")
  
  #outhf["clik/lmax"] = [lmax,-1,-1,-1,-1,-1]
  
  #outhf["clik/lkl_0/lmin"] = lmin
  #outhf["clik/lkl_0/lmax"] = lmax
  
  #outhf["clik/lkl_0/nbins"] = bmax + 1 - bmin
  #cutarr(inhf,outhf,0,nb-1,bmin,bmax,"clik/lkl_0/bin_lmin")
  #outhf["clik/lkl_0/bin_lmin"] = outhf["clik/lkl_0/bin_lmin"]-(lmin-olmin)
  #cutarr(inhf,outhf,0,nb-1,bmin,bmax,"clik/lkl_0/bin_lmax")
  #outhf["clik/lkl_0/bin_lmax"] = outhf["clik/lkl_0/bin_lmax"]-(lmin-olmin)
  #cutarr(inhf,outhf,olmin,olmax,lmin,lmax,"clik/lkl_0/bin_ws")

  #cutarr(inhf,outhf,0,nb-1,bmin,bmax,"clik/lkl_0/Rq_hat")

  #cutarr(inhf,outhf,0,nb-1,bmin,bmax,"clik/lkl_0/wq")
  #cutarr(inhf,outhf,0,nb-1,bmin,bmax,"clik/lkl_0/criterion_gauss_mask",nnmsk)
  outhf["clik/lkl_0/criterion_gauss_mask"] = nnmsk.flat[:]
  outhf["clik/lkl_0/criterion_gauss_mat"] = nsiginv.flat[:]

  #for i in range(1,inhf["clik/lkl_0/n_component"]):
  #  if "lmin" not in inhf["clik/lkl_0/component_%d"%i]:
  #    continue
  #  outhf["clik/lkl_0/component_%d/lmin"%i]=lmin
  #  outhf["clik/lkl_0/component_%d/lmax"%i]=lmax

  php.remove_selfcheck(root_grp=outhf["clik"])
  outhf.close()