Exemplo n.º 1
0
def xiwpcorrect(xiNNin, xiangin, splitxi0, splitxi2, wpNNin, wpangin, splitwp, wpstart, wpend):
    """
  This function is for new statistic xiwp combining xi and wp.
  """
    mywp = wpcorrect(wpNNin, wpangin, splitwp, wpstart, wpend)
    myxiell = xicorrect(xiNNin, xiangin, splitxi0, splitxi2)
    myxiwp = xiwp.xiwp(myxiell, mywp)
    return myxiwp
Exemplo n.º 2
0
def xiwpcorrect(xiNNin, xiangin, splitxi0, splitxi2, wpNNin, wpangin, splitwp,
                wpstart, wpend):
    """
  This function is for new statistic xiwp combining xi and wp.
  """
    mywp = wpcorrect(wpNNin, wpangin, splitwp, wpstart, wpend)
    myxiell = xicorrect(xiNNin, xiangin, splitxi0, splitxi2)
    myxiwp = xiwp.xiwp(myxiell, mywp)
    return myxiwp
Exemplo n.º 3
0
def getbootcov(
    bootfile,
    workingdir,
    covtag=None,
    NSortot=2,
    nboot=5000000,
    fbaseend="_rmax48deltalog10r",
    xiellorwp=0,
    rpimax=80.0,
    splitwp=7,
    wpstart=1,
    wpend=19,
    nell=3,
    binfile=None,
    rperpcut=-1.0,
    smallRRcut=-1.0,
    dfacs=1,
    dfacmu=1,
    icovfname=None,
    smincut=-1.0,
    smaxcut=1.0e12,
    splitxi0=5,
    splitxi2=6,
    fbaseendxiell="_rmax48deltalog10r",
    fbaseendwp="_xigrid",
):
    """
  Get covariance matrix.
  fbaseend = '_rmax48deltalog10r' for xiell or '_xigrid' for wp.
  Third tier of stuff goes directly to xiellfromDR
  expect splitxi0/splitxi2 [those go to xicorrect; values determined in
  comparetiledcmockstotruthv0
  Added functionality for wp: xiellorwp = 1, splitwp = where to go from ang to NN.
  rpimax is for wp, default is 80.
  Leaving variable fbaseend for backward compatibility,  but if xiellorwp == 2, defaults to 
  using fbaseendxiell and fbaseendwp
  """
    # NNorang = 0 [NN] or 1 [ang] or 2 [optimal unbiased combination, not yet written]
    ## nevermind, that doesnt get used anywhere!!?? deleted, was the 4th elt in the list.

    assert xiellorwp >= 0 and xiellorwp <= 2

    nsub, pixelfname, fbaseNNstart, fbaseangstart, fbaseNNtotN, fbaseNNtotS, fbaseangtotN, fbaseangtotS = parsebootinfo(
        bootfile, workingdir
    )

    if nsub is None or pixelfname is None or fbaseNNstart is None or fbaseangstart is None:
        print "bad boot file, getbootcov returning None!"
        return None
    pixlist = getpixlist(pixelfname, nsub)

    myfbase_NN = fbaseNNstart
    myfbase_ang = fbaseangstart

    if xiellorwp == 0 or xiellorwp == 1:
        DRfacN_NN, fixRRdownN_NN = ximisc.getDRfactors(fbaseNNtotN + fbaseend)
        DRfacS_NN, fixRRdownS_NN = ximisc.getDRfactors(fbaseNNtotS + fbaseend)
        DRfacN_ang, fixRRdownN_ang = ximisc.getDRfactors(fbaseangtotN + fbaseend)
        DRfacS_ang, fixRRdownS_ang = ximisc.getDRfactors(fbaseangtotS + fbaseend)
    else:  ##xiwp statistic.  xiellorwp == 2
        ## xiell
        DRfacN_NNxiell, fixRRdownN_NNxiell = ximisc.getDRfactors(fbaseNNtotN + fbaseendxiell)
        DRfacS_NNxiell, fixRRdownS_NNxiell = ximisc.getDRfactors(fbaseNNtotS + fbaseendxiell)
        DRfacN_angxiell, fixRRdownN_angxiell = ximisc.getDRfactors(fbaseangtotN + fbaseendxiell)
        DRfacS_angxiell, fixRRdownS_angxiell = ximisc.getDRfactors(fbaseangtotS + fbaseendxiell)
        ## wp
        DRfacN_NNwp, fixRRdownN_NNwp = ximisc.getDRfactors(fbaseNNtotN + fbaseendwp)
        DRfacS_NNwp, fixRRdownS_NNwp = ximisc.getDRfactors(fbaseNNtotS + fbaseendwp)
        DRfacN_angwp, fixRRdownN_angwp = ximisc.getDRfactors(fbaseangtotN + fbaseendwp)
        DRfacS_angwp, fixRRdownS_angwp = ximisc.getDRfactors(fbaseangtotS + fbaseendwp)

    if xiellorwp == 0:
        splittag = "splits%d_%d" % (splitxi0, splitxi2)
    if xiellorwp == 1:
        splittag = "splitswp%d_%d_%d" % (splitwp, wpstart, wpend)
    if xiellorwp == 2:
        splittagxiell = "splits%d_%d" % (splitxi0, splitxi2)
        splittagwp = "splitswp%d_%d_%d" % (splitwp, wpstart, wpend)
        splittag = splittagxiell + "_" + splittagwp

    if binfile is not None:
        bintag = binfile.split("/")[-1].split(".")[0]
        covoutNN = "covtotv7NN_b%d_N%d_rebin-%s" % (nboot, nsub, bintag)
        covoutang = "covtotv7ang_b%d_N%d_rebin-%s" % (nboot, nsub, bintag)
        covoutcorr = "covtotv7corr_b%d_N%d_rebin-%s_%s" % (nboot, nsub, bintag, splittag)
    else:
        covoutNN = "covtotv7NN_b%d_N%d" % (nboot, nsub)
        covoutang = "covtotv7ang_b%d_N%d" % (nboot, nsub)
        covoutcorr = "covtotv7corr_b%d_N%d_%s" % (nboot, nsub, splittag)

    if covtag is not None:
        covoutNN = covoutNN + "_%s" % covtag
        covoutang = covoutang + "_%s" % covtag
        covoutcorr = covoutcorr + "_%s" % covtag

    icovoutNN = "i" + covoutNN
    icovoutang = "i" + covoutang
    icovoutcorr = "i" + covoutcorr

    if xiellorwp == 0 or xiellorwp == 1:
        DRinfoN_NN = [DRfacN_NN, fixRRdownN_NN]
        DRinfoS_NN = [DRfacS_NN, fixRRdownS_NN]
        DRinfoN_ang = [DRfacN_ang, fixRRdownN_ang]
        DRinfoS_ang = [DRfacS_ang, fixRRdownS_ang]
    else:
        # xiell
        DRinfoN_NNxiell = [DRfacN_NNxiell, fixRRdownN_NNxiell]
        DRinfoS_NNxiell = [DRfacS_NNxiell, fixRRdownS_NNxiell]
        DRinfoN_angxiell = [DRfacN_angxiell, fixRRdownN_angxiell]
        DRinfoS_angxiell = [DRfacS_angxiell, fixRRdownS_angxiell]
        # wp
        DRinfoN_NNwp = [DRfacN_NNwp, fixRRdownN_NNwp]
        DRinfoS_NNwp = [DRfacS_NNwp, fixRRdownS_NNwp]
        DRinfoN_angwp = [DRfacN_angwp, fixRRdownN_angwp]
        DRinfoS_angwp = [DRfacS_angwp, fixRRdownS_angwp]

    for ns in range(nsub):
        print ns
        fbase_NN = myfbase_NN + ("-%03d" % (ns)) + fbaseend
        fbase_ang = myfbase_ang + ("-%03d" % (ns)) + fbaseend
        if xiellorwp == 2:
            fbase_NNxiell = myfbase_NN + ("-%03d" % (ns)) + fbaseendxiell
            fbase_angxiell = myfbase_ang + ("-%03d" % (ns)) + fbaseendxiell
            fbase_NNwp = myfbase_NN + ("-%03d" % (ns)) + fbaseendwp
            fbase_angwp = myfbase_ang + ("-%03d" % (ns)) + fbaseendwp

        xx = np.where(pixlist["PID"] == ns)[0]
        assert len(xx) == 1
        assert xx[0] == ns
        NorSval = pixlist["NorS"][xx[0]]
        if NorSval == 0:
            if xiellorwp == 0 or xiellorwp == 1:
                DRinfo_NN = DRinfoN_NN
                DRinfo_ang = DRinfoN_ang
            else:
                DRinfo_NNxiell = DRinfoN_NNxiell
                DRinfo_angxiell = DRinfoN_angxiell
                DRinfo_NNwp = DRinfoN_NNwp
                DRinfo_angwp = DRinfoN_angwp

        else:  # south
            if xiellorwp == 0 or xiellorwp == 1:
                DRinfo_NN = DRinfoS_NN
                DRinfo_ang = DRinfoS_ang
            else:
                DRinfo_NNxiell = DRinfoS_NNxiell
                DRinfo_angxiell = DRinfoS_angxiell
                DRinfo_NNwp = DRinfoS_NNwp
                DRinfo_angwp = DRinfoS_angwp

        if xiellorwp == 0:
            xiinNN = xiell.xiellfromDR(
                fbase_NN, nell, binfile, rperpcut, dfacs, dfacmu, icovfname, smincut, smaxcut, DRinfo_NN, smallRRcut
            )
            xiinang = xiell.xiellfromDR(
                fbase_ang, nell, binfile, rperpcut, dfacs, dfacmu, icovfname, smincut, smaxcut, DRinfo_ang, smallRRcut
            )
            xicorr = xicorrect(xiinNN, xiinang, splitxi0, splitxi2)
        if xiellorwp == 1:  ## doing wp
            xiinNNtmp = wp.wpfromDR(fbase_NN, DRfacinfo=DRinfo_NN, rpimax=rpimax, icovfname=icovfname)
            xiinangtmp = wp.wpfromDR(fbase_ang, DRfacinfo=DRinfo_ang, rpimax=rpimax, icovfname=icovfname)

            ## these are for later, saving cov of NN and ang separately.
            xiinNN = wp.wpfromDR(
                fbase_NN, DRfacinfo=DRinfo_NN, rpimax=rpimax, icovfname=icovfname, wpstart=wpstart, wpend=wpend
            )
            xiinang = wp.wpfromDR(
                fbase_ang, DRfacinfo=DRinfo_ang, rpimax=rpimax, icovfname=icovfname, wpstart=wpstart, wpend=wpend
            )

            ##wpstart,end not already applied to this NN and ang!
            xicorr = wpcorrect(xiinNNtmp, xiinangtmp, splitwp, wpstart, wpend)

        if xiellorwp == 2:  ##doing xiwp
            xiinNNxiell = xiell.xiellfromDR(
                fbase_NNxiell,
                nell,
                binfile,
                rperpcut,
                dfacs,
                dfacmu,
                icovfname,
                smincut,
                smaxcut,
                DRinfo_NNxiell,
                smallRRcut,
            )
            xiinangxiell = xiell.xiellfromDR(
                fbase_angxiell,
                nell,
                binfile,
                rperpcut,
                dfacs,
                dfacmu,
                icovfname,
                smincut,
                smaxcut,
                DRinfo_angxiell,
                smallRRcut,
            )

            xiinNNwptmp = wp.wpfromDR(fbase_NNwp, DRfacinfo=DRinfo_NNwp, rpimax=rpimax, icovfname=icovfname)
            xiinangwptmp = wp.wpfromDR(fbase_angwp, DRfacinfo=DRinfo_angwp, rpimax=rpimax, icovfname=icovfname)

            xiinNNwp = wp.wpfromDR(
                fbase_NNwp, DRfacinfo=DRinfo_NNwp, rpimax=rpimax, icovfname=icovfname, wpstart=wpstart, wpend=wpend
            )
            xiinangwp = wp.wpfromDR(
                fbase_angwp, DRfacinfo=DRinfo_angwp, rpimax=rpimax, icovfname=icovfname, wpstart=wpstart, wpend=wpend
            )
            xiinNN = xiwp.xiwp(xiinNNxiell, xiinNNwp)
            xiinang = xiwp.xiwp(xiinangxiell, xiinangwp)
            xicorr = xiwpcorrect(
                xiinNNxiell, xiinangxiell, splitxi0, splitxi2, xiinNNwptmp, xiinangwptmp, splitwp, wpstart, wpend
            )

        ## tmp!  we tested to make sure we recovered the same correlation fxns as with old code.  Good!
        # tmpfname = "testing/testo%d" % ns
        # xiin.printxiellshort(tmpfname)
        if ns == 0:
            if xiellorwp == 0:
                ndata = xiinNN.ndata
                ndatacorr = ndata
            if xiellorwp == 1:
                ndata = len(xiinNN.wp)
                ndatacorr = len(xicorr.wp)
            if xiellorwp == 2:
                ndata = xiinNN.ntot
                ndatacorr = ndata

            xilistNN = np.zeros([nsub, ndata], dtype="float128")
            xilistang = np.zeros([nsub, ndata], dtype="float128")
            xilistcorr = np.zeros([nsub, ndatacorr], dtype="float128")
        if xiellorwp == 0:
            xilistNN[ns, :] = xiinNN.xilong
            xilistang[ns, :] = xiinang.xilong
            xilistcorr[ns, :] = xicorr.xilong
        if xiellorwp == 1:
            xilistNN[ns, :] = xiinNN.wp
            xilistang[ns, :] = xiinang.wp
            xilistcorr[ns, :] = xicorr.wp
        if xiellorwp == 2:
            xilistNN[ns, :] = xiinNN.xiwp
            xilistang[ns, :] = xiinang.xiwp
            xilistcorr[ns, :] = xicorr.xiwp

    ## check means with total counts.
    nindx = np.where(pixlist["NorS"] == 0)[0]
    sindx = np.where(pixlist["NorS"] == 1)[0]
    print "N/S: ", len(nindx), len(sindx)

    ## now compute mean and bootstrap errors:
    if NSortot == 0:
        ximeanNN = (xilistNN[nindx, :]).sum(axis=0) / float(len(nindx))
        ximeanang = (xilistang[nindx, :]).sum(axis=0) / float(len(nindx))
        ximeancorr = (xilistcorr[nindx, :]).sum(axis=0) / float(len(nindx))
        ntot = len(nindx)
        ## restrict xilist to N only
        xilistNN = xlistNN[nindx, :]
        xilistang = xlistang[nindx, :]
        xilistcorr = xlistcorr[nindx, :]

    if NSortot == 1:
        ximeanNN = (xilistNN[sindx, :]).sum(axis=0) / float(len(sindx))
        ximeanang = (xilistang[sindx, :]).sum(axis=0) / float(len(sindx))
        ximeancorr = (xilistcorr[sindx, :]).sum(axis=0) / float(len(sindx))
        ntot = len(sindx)
        ## restrict xilist to S only
        xilistNN = xlistNN[sindx, :]
        xilistang = xlistang[sindx, :]
        xilistcorr = xlistcorr[sindx, :]

    if NSortot == 2:
        ximeanNN = xilistNN.sum(axis=0) / float(nsub)
        ximeanang = xilistang.sum(axis=0) / float(nsub)
        ximeancorr = xilistcorr.sum(axis=0) / float(nsub)
        ntot = nsub

    xitotNN = np.zeros(ndata, dtype="float128")
    xitotang = np.zeros(ndata, dtype="float128")
    xitotcorr = np.zeros(ndatacorr, dtype="float128")
    CguessNN = np.zeros([ndata, ndata], dtype="float128")
    Cguessang = np.zeros([ndata, ndata], dtype="float128")
    Cguesscorr = np.zeros([ndatacorr, ndatacorr], dtype="float128")

    for b in range(nboot):
        rr = np.random.random_integers(0, ntot - 1, ntot)
        xitrialNN = (xilistNN[rr, :]).sum(axis=0) / float(ntot)
        xitrialang = (xilistang[rr, :]).sum(axis=0) / float(ntot)
        xitrialcorr = (xilistcorr[rr, :]).sum(axis=0) / float(ntot)
        xvecNN = np.matrix([xitrialNN - ximeanNN])
        xvecang = np.matrix([xitrialang - ximeanang])
        xveccorr = np.matrix([xitrialcorr - ximeancorr])
        CguessNN += xvecNN.T * xvecNN
        Cguessang += xvecang.T * xvecang
        Cguesscorr += xveccorr.T * xveccorr

    CguessNN = CguessNN / float(nboot - 1)
    Cguessang = Cguessang / float(nboot - 1)
    Cguesscorr = Cguesscorr / float(nboot - 1)

    ## put this back in after tests.
    #### now let's compute icov for all these.
    ## eqn 17 of 0608064:
    p = len(CguessNN[:, 0])
    unbiasicov = float(ntot - p - 2) / float(ntot - 1)

    CguessNN = np.matrix(CguessNN, dtype="float64")
    invCguessNN = CguessNN.I * unbiasicov
    printcov(CguessNN, covoutNN)
    printcov(invCguessNN, icovoutNN)

    Cguessang = np.matrix(Cguessang, dtype="float64")
    invCguessang = Cguessang.I * unbiasicov
    printcov(Cguessang, covoutang)
    printcov(invCguessang, icovoutang)

    Cguesscorr = np.matrix(Cguesscorr, dtype="float64")
    invCguesscorr = Cguesscorr.I * unbiasicov
    printcov(Cguesscorr, covoutcorr)
    printcov(invCguesscorr, icovoutcorr)

    return CguessNN, invCguessNN, Cguessang, invCguessang, Cguesscorr, invCguesscorr
Exemplo n.º 4
0
def debiasdataandcovxiMwp(
    xiNNd,
    xiangd,
    xiangdhigh,
    xiangdlow,
    xiNNm,
    xiangm,
    xi012m,
    splitxi0,
    splitxi2,
    wpNNd,
    wpangd,
    wpangdhigh,
    wpangdlow,
    wpNNm,
    wpangm,
    wp012m,
    splitwp,
    wpstart,
    wpend,
    covstatfname,
    nell=2,
    fname=None,
):
    # def debiasdataandcovwp(wpNNd, wpangd, wpangdhigh, wpangdlow, wpNNm, wpangm, wp012m, splitwp, wpstart,wpend,covstatfname,fname=None):
    """
  subtract the bias measured from the tiled mocks from the data, return a debiased combination.
  print it to a file (fname) to be fed to bethalexie code in long format.
  Also take in statistical covariance matrix and add two sources of systematics.
  """
    # def xiwpcorrect(xiNNin, xiangin,splitxi0,splitxi2,wpNNin, wpangin, splitwp, wpstart, wpend):
    xiwpcorrdtmp = xiwpcorrect(xiNNd, xiangd, splitxi0, splitxi2, wpNNd, wpangd, splitwp, wpstart, wpend)

    xiwpcorrm = xiwpcorrect(xiNNm, xiangm, splitxi0, splitxi2, wpNNm, wpangm, splitwp, wpstart, wpend)

    xiwpdebiased = copy.deepcopy(xiwpcorrdtmp)
    # tmp!
    #  print xiwpdebiased.xiell
    #  print xiwpdebiased.wp

    mydeltaxi = xi012m.xi - xiwpcorrm.xiell.xi  ## subtract xi objects.
    mydeltawp = wp012m.wp[wpstart : wpend + 1] - xiwpcorrm.wp.wp
    xiwpdebiased.xiell.xi = xiwpdebiased.xiell.xi + mydeltaxi
    xiwpdebiased.wp.wp = xiwpdebiased.wp.wp + mydeltawp
    xiwpdebiased.xiwp = np.concatenate((xiwpdebiased.xiell.xilong, xiwpdebiased.wp.wp))
    xiwpanghigh = xiwp.xiwp(xiangdhigh, wpangdhigh)
    xiwpanglow = xiwp.xiwp(xiangdlow, wpangdlow)

    ## now the cov.
    ## make sure this is the cov for the corrected statistic with same splits.
    if 0 == 0:
        #  try:
        cov = np.loadtxt(covstatfname)
        assert len(cov[:, 0]) == xiwpdebiased.ntot
        splitz = covstatfname.split("splitswp")[0].split("splits")[1].split("_")
        assert len(splitz) >= nell
        ilist = []
        tmp = 0
        for ss in splitz:
            tmp += 1
            ilist.append(int(ss))
            if tmp >= nell:
                break
        assert ilist[0] == splitxi0
        assert ilist[1] == splitxi2
        splitzwp = covstatfname.split("splitswp")[1].split("_")
        print splitzwp
        assert len(splitzwp) >= 3
        ilist = []
        tmp = 0
        for ss in splitzwp:
            tmp += 1
            ilist.append(int(ss))
            if tmp >= 3:
                break
        assert ilist[0] == splitwp
        assert ilist[1] == wpstart
        assert ilist[2] == wpend

        ## new jan 2 2014!!!  forgot to take into account the unbiasicov fac.  derive if from
        ## product of cov and icov.
        ## guess icovfname
        tmp = covstatfname.split("/")
        tmp[-1] = "i" + tmp[-1]
        icovstatfname = "/".join(tmp)
        icov = np.loadtxt(icovstatfname)

        unbiasicovfac = (ximisc.getmatrixdiag(np.matrix(cov) * np.matrix(icov))).mean()
        print "using this unbiasicovfac correction, dividing cov by this", unbiasicovfac
        cov = cov / unbiasicovfac

        diagstat = np.zeros(xiwpdebiased.ntot)
        diagtot = np.zeros(xiwpdebiased.ntot)
        diagvar = np.zeros(xiwpdebiased.ntot)
        for i in range(len(diagstat)):
            diagstat[i] = cov[i, i]

        xiangdiffvar = (0.5 * (xiangdhigh.xi.flatten() - xiangdlow.xi.flatten())) ** 2
        diagvar[0:splitxi0] = xiangdiffvar[0:splitxi0]
        nxi0 = len(xiNNd.xi0)
        nxi2 = len(xiNNd.xi2)
        diagvar[nxi0 : nxi0 + splitxi2] = xiangdiffvar[nxi0 : nxi0 + splitxi2]
        wpangdiffvar = (0.5 * (wpangdhigh.wp - wpangdlow.wp)) ** 2
        diagvar[nxi0 + nxi2 : nxi0 + nxi2 + splitwp - wpstart] = wpangdiffvar[wpstart:splitwp]
        print "ang high/low variance: ", diagvar / diagstat
        diagvar[0 : nxi0 + nxi2] = diagvar[0 : nxi0 + nxi2] + (mydeltaxi.flatten()) ** 2
        diagvar[nxi0 + nxi2 :] = diagvar[nxi0 + nxi2 :] + (mydeltawp) ** 2
        print "bias variance xi: ", (mydeltaxi.flatten()) ** 2 / diagstat[0 : nxi0 + nxi2]
        print "bias variance wp: ", (mydeltawp) ** 2 / diagstat[nxi0 + nxi2 :]
        ## add it into the covarianace matrix.
        for i in range(xiwpdebiased.ntot):
            cov[i, i] += diagvar[i]
            diagtot[i] = cov[i, i]
        print "total sys variance fraction", diagtot / diagstat

        ## make it a matrix.
        cov = np.matrix(cov)
        icov = cov.I

        fcovout = covstatfname + ".sys"
        ## print the covariance and icov to new file.
        printcov(cov, fcovout)
        tmp = fcovout.split("/")
        tmp[-1] = "i" + tmp[-1]
        ifcovout = "/".join(tmp)
        printcov(icov, ifcovout)

        xiwpfinal = xiwp.xiwp(xiwpdebiased.xiell, xiwpdebiased.wp, icovfname=ifcovout)
        if fname is not None:
            ofp = open(fname, "w")
            ofp.write("# ellmax = %d\n" % ((nell - 1) * 2))
            for i in range(len(xiwpfinal.xiell.svec.flatten())):
                ofp.write("%e %e\n" % (xiwpfinal.xiell.svec.flatten()[i], xiwpfinal.xiell.xi.flatten()[i]))
            for i in range(len(xiwpfinal.wp.wp)):
                ofp.write("%e %e\n" % (xiwpfinal.wp.rsig[i], xiwpfinal.wp.wp[i]))
            ofp.close()

        return xiwpfinal, cov

    else:
        print "cov file name does not match input splits, returning None!"
        xiwpfinal = xiwp.xiwp(xiwpdebiased.xiell, xiwpdebiased.wp, icovfname=ifcovout)
        if fname is not None:
            ofp = open(fname, "w")
            ofp.write("# ellmax = %d\n" % ((nell - 1) * 2))
            for i in range(len(xiwpfinal.xi.svec.flatten())):
                ofp.write("%e %e\n" % (xiwpfinal.xiell.svec.flatten()[i], xiwpfinal.xiell.xi.flatten()[i]))
            for i in range(len(xiwpfinal.wp.wp)):
                ofp.write("%e %e\n" % (xiwpfinal.wp.rsig[i], xiwpfinal.wp.wp[i]))
            ofp.close()

        return xiwpfinal, None
Exemplo n.º 5
0
def getbootcov(bootfile, workingdir, covtag=None, NSortot=2, nboot = 5000000, fbaseend='_rmax48deltalog10r',\
               xiellorwp=0,rpimax=80.,splitwp=7,wpstart=1,wpend=19,\
               nell=3,binfile=None,rperpcut=-1.,smallRRcut=-1.,\
               dfacs=1,dfacmu=1,icovfname=None,smincut=-1.,smaxcut=1.e12,\
               splitxi0=5,splitxi2=6,fbaseendxiell='_rmax48deltalog10r',fbaseendwp='_xigrid'):
    """
  Get covariance matrix.
  fbaseend = '_rmax48deltalog10r' for xiell or '_xigrid' for wp.
  Third tier of stuff goes directly to xiellfromDR
  expect splitxi0/splitxi2 [those go to xicorrect; values determined in
  comparetiledcmockstotruthv0
  Added functionality for wp: xiellorwp = 1, splitwp = where to go from ang to NN.
  rpimax is for wp, default is 80.
  Leaving variable fbaseend for backward compatibility,  but if xiellorwp == 2, defaults to 
  using fbaseendxiell and fbaseendwp
  """
    #NNorang = 0 [NN] or 1 [ang] or 2 [optimal unbiased combination, not yet written]
    ## nevermind, that doesnt get used anywhere!!?? deleted, was the 4th elt in the list.

    assert xiellorwp >= 0 and xiellorwp <= 2

    nsub, pixelfname, fbaseNNstart, fbaseangstart, \
    fbaseNNtotN, fbaseNNtotS, fbaseangtotN, fbaseangtotS =  parsebootinfo(bootfile,workingdir)

    if nsub is None or pixelfname is None or fbaseNNstart is None or fbaseangstart is None:
        print 'bad boot file, getbootcov returning None!'
        return None
    pixlist = getpixlist(pixelfname, nsub)

    myfbase_NN = fbaseNNstart
    myfbase_ang = fbaseangstart

    if xiellorwp == 0 or xiellorwp == 1:
        DRfacN_NN, fixRRdownN_NN = ximisc.getDRfactors(fbaseNNtotN + fbaseend)
        DRfacS_NN, fixRRdownS_NN = ximisc.getDRfactors(fbaseNNtotS + fbaseend)
        DRfacN_ang, fixRRdownN_ang = ximisc.getDRfactors(fbaseangtotN +
                                                         fbaseend)
        DRfacS_ang, fixRRdownS_ang = ximisc.getDRfactors(fbaseangtotS +
                                                         fbaseend)
    else:  ##xiwp statistic.  xiellorwp == 2
        ## xiell
        DRfacN_NNxiell, fixRRdownN_NNxiell = ximisc.getDRfactors(fbaseNNtotN +
                                                                 fbaseendxiell)
        DRfacS_NNxiell, fixRRdownS_NNxiell = ximisc.getDRfactors(fbaseNNtotS +
                                                                 fbaseendxiell)
        DRfacN_angxiell, fixRRdownN_angxiell = ximisc.getDRfactors(
            fbaseangtotN + fbaseendxiell)
        DRfacS_angxiell, fixRRdownS_angxiell = ximisc.getDRfactors(
            fbaseangtotS + fbaseendxiell)
        ## wp
        DRfacN_NNwp, fixRRdownN_NNwp = ximisc.getDRfactors(fbaseNNtotN +
                                                           fbaseendwp)
        DRfacS_NNwp, fixRRdownS_NNwp = ximisc.getDRfactors(fbaseNNtotS +
                                                           fbaseendwp)
        DRfacN_angwp, fixRRdownN_angwp = ximisc.getDRfactors(fbaseangtotN +
                                                             fbaseendwp)
        DRfacS_angwp, fixRRdownS_angwp = ximisc.getDRfactors(fbaseangtotS +
                                                             fbaseendwp)

    if xiellorwp == 0:
        splittag = 'splits%d_%d' % (splitxi0, splitxi2)
    if xiellorwp == 1:
        splittag = 'splitswp%d_%d_%d' % (splitwp, wpstart, wpend)
    if xiellorwp == 2:
        splittagxiell = 'splits%d_%d' % (splitxi0, splitxi2)
        splittagwp = 'splitswp%d_%d_%d' % (splitwp, wpstart, wpend)
        splittag = splittagxiell + '_' + splittagwp

    if binfile is not None:
        bintag = binfile.split('/')[-1].split('.')[0]
        covoutNN = 'covtotv7NN_b%d_N%d_rebin-%s' % (nboot, nsub, bintag)
        covoutang = 'covtotv7ang_b%d_N%d_rebin-%s' % (nboot, nsub, bintag)
        covoutcorr = 'covtotv7corr_b%d_N%d_rebin-%s_%s' % (nboot, nsub, bintag,
                                                           splittag)
    else:
        covoutNN = 'covtotv7NN_b%d_N%d' % (nboot, nsub)
        covoutang = 'covtotv7ang_b%d_N%d' % (nboot, nsub)
        covoutcorr = 'covtotv7corr_b%d_N%d_%s' % (nboot, nsub, splittag)

    if covtag is not None:
        covoutNN = covoutNN + '_%s' % covtag
        covoutang = covoutang + '_%s' % covtag
        covoutcorr = covoutcorr + '_%s' % covtag

    icovoutNN = 'i' + covoutNN
    icovoutang = 'i' + covoutang
    icovoutcorr = 'i' + covoutcorr

    if xiellorwp == 0 or xiellorwp == 1:
        DRinfoN_NN = [DRfacN_NN, fixRRdownN_NN]
        DRinfoS_NN = [DRfacS_NN, fixRRdownS_NN]
        DRinfoN_ang = [DRfacN_ang, fixRRdownN_ang]
        DRinfoS_ang = [DRfacS_ang, fixRRdownS_ang]
    else:
        #xiell
        DRinfoN_NNxiell = [DRfacN_NNxiell, fixRRdownN_NNxiell]
        DRinfoS_NNxiell = [DRfacS_NNxiell, fixRRdownS_NNxiell]
        DRinfoN_angxiell = [DRfacN_angxiell, fixRRdownN_angxiell]
        DRinfoS_angxiell = [DRfacS_angxiell, fixRRdownS_angxiell]
        # wp
        DRinfoN_NNwp = [DRfacN_NNwp, fixRRdownN_NNwp]
        DRinfoS_NNwp = [DRfacS_NNwp, fixRRdownS_NNwp]
        DRinfoN_angwp = [DRfacN_angwp, fixRRdownN_angwp]
        DRinfoS_angwp = [DRfacS_angwp, fixRRdownS_angwp]

    for ns in range(nsub):
        print ns
        fbase_NN = myfbase_NN + ('-%03d' % (ns)) + fbaseend
        fbase_ang = myfbase_ang + ('-%03d' % (ns)) + fbaseend
        if xiellorwp == 2:
            fbase_NNxiell = myfbase_NN + ('-%03d' % (ns)) + fbaseendxiell
            fbase_angxiell = myfbase_ang + ('-%03d' % (ns)) + fbaseendxiell
            fbase_NNwp = myfbase_NN + ('-%03d' % (ns)) + fbaseendwp
            fbase_angwp = myfbase_ang + ('-%03d' % (ns)) + fbaseendwp

        xx = np.where(pixlist['PID'] == ns)[0]
        assert len(xx) == 1
        assert xx[0] == ns
        NorSval = pixlist['NorS'][xx[0]]
        if (NorSval == 0):
            if xiellorwp == 0 or xiellorwp == 1:
                DRinfo_NN = DRinfoN_NN
                DRinfo_ang = DRinfoN_ang
            else:
                DRinfo_NNxiell = DRinfoN_NNxiell
                DRinfo_angxiell = DRinfoN_angxiell
                DRinfo_NNwp = DRinfoN_NNwp
                DRinfo_angwp = DRinfoN_angwp

        else:  #south
            if xiellorwp == 0 or xiellorwp == 1:
                DRinfo_NN = DRinfoS_NN
                DRinfo_ang = DRinfoS_ang
            else:
                DRinfo_NNxiell = DRinfoS_NNxiell
                DRinfo_angxiell = DRinfoS_angxiell
                DRinfo_NNwp = DRinfoS_NNwp
                DRinfo_angwp = DRinfoS_angwp

        if xiellorwp == 0:
            xiinNN = xiell.xiellfromDR(fbase_NN, nell, binfile, rperpcut,
                                       dfacs, dfacmu, icovfname, smincut,
                                       smaxcut, DRinfo_NN, smallRRcut)
            xiinang = xiell.xiellfromDR(fbase_ang, nell, binfile, rperpcut,
                                        dfacs, dfacmu, icovfname, smincut,
                                        smaxcut, DRinfo_ang, smallRRcut)
            xicorr = xicorrect(xiinNN, xiinang, splitxi0, splitxi2)
        if xiellorwp == 1:  ## doing wp
            xiinNNtmp = wp.wpfromDR(fbase_NN,
                                    DRfacinfo=DRinfo_NN,
                                    rpimax=rpimax,
                                    icovfname=icovfname)
            xiinangtmp = wp.wpfromDR(fbase_ang,
                                     DRfacinfo=DRinfo_ang,
                                     rpimax=rpimax,
                                     icovfname=icovfname)

            ## these are for later, saving cov of NN and ang separately.
            xiinNN = wp.wpfromDR(fbase_NN,
                                 DRfacinfo=DRinfo_NN,
                                 rpimax=rpimax,
                                 icovfname=icovfname,
                                 wpstart=wpstart,
                                 wpend=wpend)
            xiinang = wp.wpfromDR(fbase_ang,
                                  DRfacinfo=DRinfo_ang,
                                  rpimax=rpimax,
                                  icovfname=icovfname,
                                  wpstart=wpstart,
                                  wpend=wpend)

            ##wpstart,end not already applied to this NN and ang!
            xicorr = wpcorrect(xiinNNtmp, xiinangtmp, splitwp, wpstart, wpend)

        if xiellorwp == 2:  ##doing xiwp
            xiinNNxiell = xiell.xiellfromDR(fbase_NNxiell, nell, binfile,
                                            rperpcut, dfacs, dfacmu, icovfname,
                                            smincut, smaxcut, DRinfo_NNxiell,
                                            smallRRcut)
            xiinangxiell = xiell.xiellfromDR(fbase_angxiell, nell, binfile,
                                             rperpcut, dfacs, dfacmu,
                                             icovfname, smincut, smaxcut,
                                             DRinfo_angxiell, smallRRcut)

            xiinNNwptmp = wp.wpfromDR(fbase_NNwp,
                                      DRfacinfo=DRinfo_NNwp,
                                      rpimax=rpimax,
                                      icovfname=icovfname)
            xiinangwptmp = wp.wpfromDR(fbase_angwp,
                                       DRfacinfo=DRinfo_angwp,
                                       rpimax=rpimax,
                                       icovfname=icovfname)

            xiinNNwp = wp.wpfromDR(fbase_NNwp,
                                   DRfacinfo=DRinfo_NNwp,
                                   rpimax=rpimax,
                                   icovfname=icovfname,
                                   wpstart=wpstart,
                                   wpend=wpend)
            xiinangwp = wp.wpfromDR(fbase_angwp,
                                    DRfacinfo=DRinfo_angwp,
                                    rpimax=rpimax,
                                    icovfname=icovfname,
                                    wpstart=wpstart,
                                    wpend=wpend)
            xiinNN = xiwp.xiwp(xiinNNxiell, xiinNNwp)
            xiinang = xiwp.xiwp(xiinangxiell, xiinangwp)
            xicorr = xiwpcorrect(xiinNNxiell, xiinangxiell, splitxi0, splitxi2,
                                 xiinNNwptmp, xiinangwptmp, splitwp, wpstart,
                                 wpend)

        ## tmp!  we tested to make sure we recovered the same correlation fxns as with old code.  Good!
        #tmpfname = "testing/testo%d" % ns
        #xiin.printxiellshort(tmpfname)
        if (ns == 0):
            if (xiellorwp == 0):
                ndata = xiinNN.ndata
                ndatacorr = ndata
            if (xiellorwp == 1):
                ndata = len(xiinNN.wp)
                ndatacorr = len(xicorr.wp)
            if (xiellorwp == 2):
                ndata = xiinNN.ntot
                ndatacorr = ndata

            xilistNN = np.zeros([nsub, ndata], dtype='float128')
            xilistang = np.zeros([nsub, ndata], dtype='float128')
            xilistcorr = np.zeros([nsub, ndatacorr], dtype='float128')
        if (xiellorwp == 0):
            xilistNN[ns, :] = xiinNN.xilong
            xilistang[ns, :] = xiinang.xilong
            xilistcorr[ns, :] = xicorr.xilong
        if (xiellorwp == 1):
            xilistNN[ns, :] = xiinNN.wp
            xilistang[ns, :] = xiinang.wp
            xilistcorr[ns, :] = xicorr.wp
        if (xiellorwp == 2):
            xilistNN[ns, :] = xiinNN.xiwp
            xilistang[ns, :] = xiinang.xiwp
            xilistcorr[ns, :] = xicorr.xiwp

    ## check means with total counts.
    nindx = np.where(pixlist['NorS'] == 0)[0]
    sindx = np.where(pixlist['NorS'] == 1)[0]
    print 'N/S: ', len(nindx), len(sindx)

    ## now compute mean and bootstrap errors:
    if (NSortot == 0):
        ximeanNN = (xilistNN[nindx, :]).sum(axis=0) / float(len(nindx))
        ximeanang = (xilistang[nindx, :]).sum(axis=0) / float(len(nindx))
        ximeancorr = (xilistcorr[nindx, :]).sum(axis=0) / float(len(nindx))
        ntot = len(nindx)
        ## restrict xilist to N only
        xilistNN = xlistNN[nindx, :]
        xilistang = xlistang[nindx, :]
        xilistcorr = xlistcorr[nindx, :]

    if (NSortot == 1):
        ximeanNN = (xilistNN[sindx, :]).sum(axis=0) / float(len(sindx))
        ximeanang = (xilistang[sindx, :]).sum(axis=0) / float(len(sindx))
        ximeancorr = (xilistcorr[sindx, :]).sum(axis=0) / float(len(sindx))
        ntot = len(sindx)
        ## restrict xilist to S only
        xilistNN = xlistNN[sindx, :]
        xilistang = xlistang[sindx, :]
        xilistcorr = xlistcorr[sindx, :]

    if (NSortot == 2):
        ximeanNN = xilistNN.sum(axis=0) / float(nsub)
        ximeanang = xilistang.sum(axis=0) / float(nsub)
        ximeancorr = xilistcorr.sum(axis=0) / float(nsub)
        ntot = nsub

    xitotNN = np.zeros(ndata, dtype='float128')
    xitotang = np.zeros(ndata, dtype='float128')
    xitotcorr = np.zeros(ndatacorr, dtype='float128')
    CguessNN = np.zeros([ndata, ndata], dtype='float128')
    Cguessang = np.zeros([ndata, ndata], dtype='float128')
    Cguesscorr = np.zeros([ndatacorr, ndatacorr], dtype='float128')

    for b in range(nboot):
        rr = np.random.random_integers(0, ntot - 1, ntot)
        xitrialNN = (xilistNN[rr, :]).sum(axis=0) / float(ntot)
        xitrialang = (xilistang[rr, :]).sum(axis=0) / float(ntot)
        xitrialcorr = (xilistcorr[rr, :]).sum(axis=0) / float(ntot)
        xvecNN = np.matrix([xitrialNN - ximeanNN])
        xvecang = np.matrix([xitrialang - ximeanang])
        xveccorr = np.matrix([xitrialcorr - ximeancorr])
        CguessNN += (xvecNN.T * xvecNN)
        Cguessang += (xvecang.T * xvecang)
        Cguesscorr += (xveccorr.T * xveccorr)

    CguessNN = CguessNN / float(nboot - 1)
    Cguessang = Cguessang / float(nboot - 1)
    Cguesscorr = Cguesscorr / float(nboot - 1)

    ## put this back in after tests.
    #### now let's compute icov for all these.
    ## eqn 17 of 0608064:
    p = len(CguessNN[:, 0])
    unbiasicov = float(ntot - p - 2) / float(ntot - 1)

    CguessNN = np.matrix(CguessNN, dtype='float64')
    invCguessNN = CguessNN.I * unbiasicov
    printcov(CguessNN, covoutNN)
    printcov(invCguessNN, icovoutNN)

    Cguessang = np.matrix(Cguessang, dtype='float64')
    invCguessang = Cguessang.I * unbiasicov
    printcov(Cguessang, covoutang)
    printcov(invCguessang, icovoutang)

    Cguesscorr = np.matrix(Cguesscorr, dtype='float64')
    invCguesscorr = Cguesscorr.I * unbiasicov
    printcov(Cguesscorr, covoutcorr)
    printcov(invCguesscorr, icovoutcorr)

    return CguessNN, invCguessNN, Cguessang, invCguessang, Cguesscorr, invCguesscorr
Exemplo n.º 6
0
def debiasdataandcovxiMwp(xiNNd,
                          xiangd,
                          xiangdhigh,
                          xiangdlow,
                          xiNNm,
                          xiangm,
                          xi012m,
                          splitxi0,
                          splitxi2,
                          wpNNd,
                          wpangd,
                          wpangdhigh,
                          wpangdlow,
                          wpNNm,
                          wpangm,
                          wp012m,
                          splitwp,
                          wpstart,
                          wpend,
                          covstatfname,
                          nell=2,
                          fname=None):
    #def debiasdataandcovwp(wpNNd, wpangd, wpangdhigh, wpangdlow, wpNNm, wpangm, wp012m, splitwp, wpstart,wpend,covstatfname,fname=None):
    """
  subtract the bias measured from the tiled mocks from the data, return a debiased combination.
  print it to a file (fname) to be fed to bethalexie code in long format.
  Also take in statistical covariance matrix and add two sources of systematics.
  """
    #def xiwpcorrect(xiNNin, xiangin,splitxi0,splitxi2,wpNNin, wpangin, splitwp, wpstart, wpend):
    xiwpcorrdtmp = xiwpcorrect(xiNNd, xiangd, splitxi0,splitxi2,\
                           wpNNd, wpangd, splitwp, wpstart, wpend)

    xiwpcorrm = xiwpcorrect(xiNNm, xiangm, splitxi0, splitxi2,\
                          wpNNm,wpangm,splitwp,wpstart,wpend)

    xiwpdebiased = copy.deepcopy(xiwpcorrdtmp)
    #tmp!
    #  print xiwpdebiased.xiell
    #  print xiwpdebiased.wp

    mydeltaxi = xi012m.xi - xiwpcorrm.xiell.xi  ## subtract xi objects.
    mydeltawp = wp012m.wp[wpstart:wpend + 1] - xiwpcorrm.wp.wp
    xiwpdebiased.xiell.xi = xiwpdebiased.xiell.xi + mydeltaxi
    xiwpdebiased.wp.wp = xiwpdebiased.wp.wp + mydeltawp
    xiwpdebiased.xiwp = np.concatenate(
        (xiwpdebiased.xiell.xilong, xiwpdebiased.wp.wp))
    xiwpanghigh = xiwp.xiwp(xiangdhigh, wpangdhigh)
    xiwpanglow = xiwp.xiwp(xiangdlow, wpangdlow)

    ## now the cov.
    ## make sure this is the cov for the corrected statistic with same splits.
    if (0 == 0):
        #  try:
        cov = np.loadtxt(covstatfname)
        assert len(cov[:, 0]) == xiwpdebiased.ntot
        splitz = covstatfname.split('splitswp')[0].split('splits')[1].split(
            '_')
        assert len(splitz) >= nell
        ilist = []
        tmp = 0
        for ss in splitz:
            tmp += 1
            ilist.append(int(ss))
            if tmp >= nell:
                break
        assert ilist[0] == splitxi0
        assert ilist[1] == splitxi2
        splitzwp = covstatfname.split('splitswp')[1].split('_')
        print splitzwp
        assert len(splitzwp) >= 3
        ilist = []
        tmp = 0
        for ss in splitzwp:
            tmp += 1
            ilist.append(int(ss))
            if tmp >= 3:
                break
        assert ilist[0] == splitwp
        assert ilist[1] == wpstart
        assert ilist[2] == wpend

        ## new jan 2 2014!!!  forgot to take into account the unbiasicov fac.  derive if from
        ## product of cov and icov.
        ## guess icovfname
        tmp = covstatfname.split('/')
        tmp[-1] = 'i' + tmp[-1]
        icovstatfname = '/'.join(tmp)
        icov = np.loadtxt(icovstatfname)

        unbiasicovfac = (ximisc.getmatrixdiag(
            np.matrix(cov) * np.matrix(icov))).mean()
        print 'using this unbiasicovfac correction, dividing cov by this', unbiasicovfac
        cov = cov / unbiasicovfac

        diagstat = np.zeros(xiwpdebiased.ntot)
        diagtot = np.zeros(xiwpdebiased.ntot)
        diagvar = np.zeros(xiwpdebiased.ntot)
        for i in range(len(diagstat)):
            diagstat[i] = cov[i, i]

        xiangdiffvar = (0.5 *
                        (xiangdhigh.xi.flatten() - xiangdlow.xi.flatten()))**2
        diagvar[0:splitxi0] = xiangdiffvar[0:splitxi0]
        nxi0 = len(xiNNd.xi0)
        nxi2 = len(xiNNd.xi2)
        diagvar[nxi0:nxi0 + splitxi2] = xiangdiffvar[nxi0:nxi0 + splitxi2]
        wpangdiffvar = (0.5 * (wpangdhigh.wp - wpangdlow.wp))**2
        diagvar[nxi0 + nxi2:nxi0 + nxi2 + splitwp -
                wpstart] = wpangdiffvar[wpstart:splitwp]
        print 'ang high/low variance: ', diagvar / diagstat
        diagvar[0:nxi0 +
                nxi2] = diagvar[0:nxi0 + nxi2] + (mydeltaxi.flatten())**2
        diagvar[nxi0 + nxi2:] = diagvar[nxi0 + nxi2:] + (mydeltawp)**2
        print 'bias variance xi: ', (
            mydeltaxi.flatten())**2 / diagstat[0:nxi0 + nxi2]
        print 'bias variance wp: ', (mydeltawp)**2 / diagstat[nxi0 + nxi2:]
        ## add it into the covarianace matrix.
        for i in range(xiwpdebiased.ntot):
            cov[i, i] += diagvar[i]
            diagtot[i] = cov[i, i]
        print 'total sys variance fraction', diagtot / diagstat

        ## make it a matrix.
        cov = np.matrix(cov)
        icov = cov.I

        fcovout = covstatfname + '.sys'
        ## print the covariance and icov to new file.
        printcov(cov, fcovout)
        tmp = fcovout.split('/')
        tmp[-1] = 'i' + tmp[-1]
        ifcovout = '/'.join(tmp)
        printcov(icov, ifcovout)

        xiwpfinal = xiwp.xiwp(xiwpdebiased.xiell,
                              xiwpdebiased.wp,
                              icovfname=ifcovout)
        if fname is not None:
            ofp = open(fname, 'w')
            ofp.write("# ellmax = %d\n" % ((nell - 1) * 2))
            for i in range(len(xiwpfinal.xiell.svec.flatten())):
                ofp.write('%e %e\n' % (xiwpfinal.xiell.svec.flatten()[i],
                                       xiwpfinal.xiell.xi.flatten()[i]))
            for i in range(len(xiwpfinal.wp.wp)):
                ofp.write('%e %e\n' %
                          (xiwpfinal.wp.rsig[i], xiwpfinal.wp.wp[i]))
            ofp.close()

        return xiwpfinal, cov

    else:
        print 'cov file name does not match input splits, returning None!'
        xiwpfinal = xiwp.xiwp(xiwpdebiased.xiell,
                              xiwpdebiased.wp,
                              icovfname=ifcovout)
        if fname is not None:
            ofp = open(fname, 'w')
            ofp.write("# ellmax = %d\n" % ((nell - 1) * 2))
            for i in range(len(xiwpfinal.xi.svec.flatten())):
                ofp.write('%e %e\n' % (xiwpfinal.xiell.svec.flatten()[i],
                                       xiwpfinal.xiell.xi.flatten()[i]))
            for i in range(len(xiwpfinal.wp.wp)):
                ofp.write('%e %e\n' %
                          (xiwpfinal.wp.rsig[i], xiwpfinal.wp.wp[i]))
            ofp.close()

        return xiwpfinal, None