Source code for coseda.ici.create_run_sh
#!/usr/bin/env python3
import argparse, os, shlex, sys
from pathlib import Path
from coseda.logging_utils import log_print
[docs]
def main():
ap = argparse.ArgumentParser(description="Create per-event sh_event.sh for indexamajig.")
ap.add_argument("--run-root", required=True, help="Timestamped runs folder (contains run_XXX/)")
ap.add_argument("--geom", required=True)
ap.add_argument("--cell", required=True)
ap.add_argument("--run", required=True, help="e.g. 0, 7, 012 -> zero-padded to 3")
ap.add_argument("--indexamajig", default="indexamajig")
argv = sys.argv[1:]
if "--" in argv:
sep = argv.index("--")
ours, extra = argv[:sep], argv[sep+1:]
else:
ours, extra = argv, []
args = ap.parse_args(ours)
run = f"{int(args.run):03d}"
run_dir = os.path.join(os.path.abspath(os.path.expanduser(args.run_root)), f"run_{run}")
Path(run_dir).mkdir(parents=True, exist_ok=True)
geom = os.path.abspath(args.geom)
cell = os.path.abspath(args.cell)
idx = args.indexamajig
n_events = 0
for ev_name in sorted(os.listdir(run_dir)):
ev_dir = os.path.join(run_dir, ev_name)
if not (os.path.isdir(ev_dir) and ev_name.startswith("event_")):
continue
lsts = [fn for fn in os.listdir(ev_dir) if fn.endswith(".lst")]
if len(lsts) != 1:
continue
lst_path = os.path.join(ev_dir, lsts[0])
# Extract the numeric part from event_XXXXXX → 000000
suffix = ev_name.split("_")[-1]
sh_ev = os.path.join(ev_dir, f"sh_{suffix}.sh")
out_part = os.path.join(ev_dir, f"stream_{suffix}.stream")
cmd = [
idx, "-g", geom, "-i", lst_path, "-o", out_part, "-p", cell, *extra
]
with open(sh_ev, "w", encoding="utf-8") as f:
f.write("#!/usr/bin/env bash\nset -euo pipefail\n")
f.write("# Auto-generated per-image job\n")
f.write(" ".join(shlex.quote(c) for c in cmd) + "\n")
os.chmod(sh_ev, 0o755)
n_events += 1
# print(f"[ok] wrote {n_events} event scripts under {run_dir}")
if __name__ == "__main__":
main()