| """Create a small ROOT fixture from a Delphes sample.""" |
|
|
| from __future__ import annotations |
|
|
| import argparse |
| from pathlib import Path |
|
|
| import uproot |
|
|
| BRANCHES = ( |
| "jet_pt", |
| "jet_eta", |
| "jet_phi", |
| "jet_btag", |
| "ph_pt", |
| "ph_eta", |
| "ph_phi", |
| "ele_pt", |
| "ele_eta", |
| "ele_phi", |
| "ele_charge", |
| "mu_pt", |
| "mu_eta", |
| "mu_phi", |
| "mu_charge", |
| "MET_met", |
| "MET_phi", |
| "weight", |
| "Number", |
| ) |
|
|
|
|
| def shrink_sample(source: Path, target: Path, entries: int) -> None: |
| """Copy the active branches and first ``entries`` events to ``target``.""" |
| if entries < 1: |
| raise ValueError("entries must be positive") |
| target.parent.mkdir(parents=True, exist_ok=True) |
| with uproot.open(source) as source_file: |
| arrays = source_file["output"].arrays( |
| BRANCHES, entry_start=0, entry_stop=entries, library="ak" |
| ) |
| with uproot.recreate(target) as target_file: |
| target_file["output"] = arrays |
|
|
|
|
| def main() -> None: |
| parser = argparse.ArgumentParser(description=__doc__) |
| parser.add_argument("source", type=Path) |
| parser.add_argument("target", type=Path) |
| parser.add_argument("--entries", type=int, default=64) |
| args = parser.parse_args() |
| shrink_sample(args.source, args.target, args.entries) |
| print(f"Wrote {args.entries} events to {args.target}") |
|
|
|
|
| if __name__ == "__main__": |
| main() |
|
|