File indexing completed on 2026-10-15 08:17:18
0001
0002
0003
0004
0005
0006
0007
0008
0009 import os, sys, collections, datetime
0010 outdir, TARGET, cdir = sys.argv[1], int(sys.argv[2]), sys.argv[3]
0011 rows = [l.split() for l in open(os.path.join(outdir, "segment_entries.txt")) if l.strip()]
0012 bad = [r for r in rows if int(r[2]) <= 0]
0013 if bad:
0014 print("unreadable/empty files (left out of the lists):"); print("\n".join(r[3] for r in bad))
0015 runs = collections.OrderedDict()
0016 for run, seg, ne, path in rows:
0017 if int(ne) <= 0: continue
0018 runs.setdefault(int(run), []).append((int(seg), int(ne), path))
0019 for r in runs: runs[r].sort()
0020 ilist, summary = 0, []
0021 for r, segs in runs.items():
0022 tot = sum(s[1] for s in segs)
0023 nl = max(1, int(round(tot / TARGET)))
0024 cuts = [tot * (k + 1) / nl for k in range(nl)]
0025 groups, cur, acc, k = [], [], 0, 0
0026 for s in segs:
0027 cur.append(s); acc += s[1]
0028 if k < nl - 1 and acc >= cuts[k]:
0029 groups.append(cur); cur = []; k += 1
0030 if cur: groups.append(cur)
0031 for g in groups:
0032 with open(os.path.join(outdir, "list_%02d.txt" % ilist), "w") as f:
0033 for s in g: f.write(s[2] + "\n")
0034 summary.append("%02d run %d segments %4d-%4d nseg %3d events %8d" % (ilist, r, g[0][0], g[-1][0], len(g), sum(s[1] for s in g)))
0035 ilist += 1
0036 with open(os.path.join(outdir, "lists_summary.txt"), "w") as f:
0037 f.write("\n".join(summary) + "\n")
0038 nev = sum(int(r[2]) for r in rows if int(r[2]) > 0)
0039 with open(os.path.join(outdir, "manifest.txt"), "w") as f:
0040 f.write("collect_dir %s\ntarget %d\nnlists %d\nnfiles %d\nnevents %d\nmade %s\n"
0041 % (cdir, TARGET, ilist, sum(len(v) for v in runs.values()), nev, datetime.datetime.now().isoformat(timespec="seconds")))
0042 print("\n".join(summary))
0043 print("lists: %d files: %d events: %d (unreadable files: %d)" % (ilist, sum(len(v) for v in runs.values()), nev, len(bad)))