示例#1
0
def main():
    """ Converts usxsuw output into a ROOT TH2F histogram """

    parser = argparse.ArgumentParser(
        description=main.__doc__,
        epilog="Homepage: https://github.com/kbat/mc-tools")
    parser.add_argument('usrbdx', type=str, help='usxsuw binary output')
    parser.add_argument('root',
                        type=str,
                        nargs='?',
                        help='output ROOT file name',
                        default="")
    parser.add_argument('-v',
                        '--verbose',
                        action='store_true',
                        default=False,
                        dest='verbose',
                        help='print what is being done')

    args = parser.parse_args()

    if not path.isfile(args.usrbdx):
        print("usrbdx2root: File %s does not exist." % args.usrbdx,
              file=sys.stderr)
        return 1

    if args.root == "":
        rootFileName = "%s%s" % (args.usrbdx, ".root")
    else:
        rootFileName = args.root

    b = Data.Usrbdx()
    b.readHeader(args.usrbdx)

    ND = len(b.detector)

    if args.verbose:
        b.sayHeader()
        print("\n%d tallies found:" % ND)
        for i in range(ND):
            b.say(i)
            print("")

    fout = ROOT.TFile(rootFileName, "recreate")
    for i in range(ND):
        val = Data.unpackArray(b.readData(i))
        err = Data.unpackArray(b.readStat(i))
        det = b.detector[i]

        h = hist(det)

        for i in range(det.ne):
            for j in range(det.na):
                gbin = i + j * det.ne
                h.SetBinContent(i + 1, j + 1, val[gbin])
                h.SetBinError(i + 1, j + 1, err[gbin] * val[gbin])
        h.SetEntries(b.weight)
        h.Write()

    fout.Close()
示例#2
0
def main():
    """ Converts usxsuw output into a ROOT TH2F histogram """

    parser = argparse.ArgumentParser(description=main.__doc__,
                                     epilog="Homepage: https://github.com/kbat/mc-tools")
    parser.add_argument('usrbdx', type=str, help='usxsuw binary output')
    parser.add_argument('root', type=str, nargs='?', help='output ROOT file name', default="")
    parser.add_argument('-v', '--verbose', action='store_true', default=False, dest='verbose', help='print what is being done')

    args = parser.parse_args()

    if not path.isfile(args.usrbdx):
        print("usrbdx2root: File %s does not exist." % args.usrbdx, file=sys.stderr)
        return 1

    if args.root == "":
        rootFileName = "%s%s" % (args.usrbdx,".root")
    else:
        rootFileName = args.root

    b = Data.Usrbdx()
    b.readHeader(args.usrbdx) # data file closed here

    ND = len(b.detector)

    if args.verbose:
        b.sayHeader()
        print("\n%s %d %s found:" % ('*'*20, ND, "estimator" if ND==1 else "estimators"))
        for i in range(ND):
            b.say(i)
            print("")

    fout = ROOT.TFile(rootFileName, "recreate")
    for i in range(ND):
        val = Data.unpackArray(b.readData(i))
        err = Data.unpackArray(b.readStat(i))
        det = b.detector[i]
        lenval = len(val)

        assert lenval == len(err)

        h = hist(det)
        if det.lowneu and det.dist!=8:
            hn = histN(det)

#        print(det.name,det.lowneu,det.dist,"val:",len(val), det.ngroup, det.ne)
        if det.lowneu and det.dist==8: # 8 is NEUTRON
            lnval = val[-det.ngroup*det.na:][::-1]
            lnerr = err[-det.ngroup*det.na:][::-1]
            v = ()
            e = ()
            for a in range(det.na,0,-1):
                i = det.ngroup*(a-1)
                j = det.ngroup*(a)
                v += lnval[i:j]
                e += lnerr[i:j]

                i=(det.na-a)*det.ne
                j=(det.na-a+1)*det.ne
                v += val[i:j]
                e += err[i:j]

            val = v
            err = e


        assert lenval == len(val), "%d != %d" % (lenval, len(val))
        assert lenval == len(err), "%d != %d" % (lenval, len(err))


        nebins = getNEbins(det)
        for i in range(nebins):
            for j in range(det.na):
                gbin = i + j * nebins
                h.SetBinContent(i+1, j+1, val[gbin])
                h.SetBinError(i+1, j+1, val[gbin]*err[gbin]*15.91549*det.na) # still wrong if det.na>1

        # if (det.name=="pBackN"):
        #     for j in range(det.na):
        #         print(j)
        #         for i in range(nebins):
        #             print("%.3E %.3E %.3E" % (h.GetXaxis().GetBinLowEdge(i+1),
        #                                       h.GetXaxis().GetBinLowEdge(i+2), h.GetBinContent(i+1,j+1)))

        h.SetEntries(b.weight)
        h.Write()

        if det.lowneu and det.dist!=8:
            hn.Write()

    fout.Close()