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()
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()