From 45df4b3e2b13d232bce43094ad85381baf68278e Mon Sep 17 00:00:00 2001 From: Sophie Middleton Date: Sun, 22 Feb 2026 17:11:55 -0600 Subject: [PATCH 01/14] dask example --- pyutils/dask_integration.py | 117 ++++++++++++++++++++++++ pyutils/pydask.py | 175 ++++++++++++++++++++++++++++++++++++ 2 files changed, 292 insertions(+) create mode 100644 pyutils/dask_integration.py create mode 100644 pyutils/pydask.py diff --git a/pyutils/dask_integration.py b/pyutils/dask_integration.py new file mode 100644 index 0000000..b657e46 --- /dev/null +++ b/pyutils/dask_integration.py @@ -0,0 +1,117 @@ +"""Dask integration helpers for pyutils + +Provides a minimal wrapper to run the existing file-worker pipeline +with Dask (local or distributed). This is intended as a minimal, drop-in +example showing how to replace the concurrent.futures-based parallelism +with Dask delayed / distributed. + +Example usage: + from pyutils.dask_integration import process_files_with_dask + + # local cluster + results = process_files_with_dask( + file_list=my_files, + branches=['branch1','branch2'], + n_workers=4, + ) + + # remote scheduler + results = process_files_with_dask( + file_list=my_files, + branches=['branch1'], + scheduler_address='tcp://scheduler:8786' + ) +""" +from __future__ import annotations + +from typing import List, Optional, Tuple +import logging +import awkward as ak + +import dask +from dask import delayed +from dask.distributed import Client, progress + +# Import the module-level worker function from pyprocess +from .pyprocess import _worker_func + +LOGGER = logging.getLogger("pyutils.dask") + + +def process_files_with_dask( + file_list: List[str], + branches, + tree_path: str = "EventNtuple/ntuple", + use_remote: bool = False, + location: str = "local", + schema: str = "root", + n_workers: Optional[int] = None, + threads_per_worker: int = 1, + processes: bool = False, + scheduler_address: Optional[str] = None, + show_progress: bool = True, +) -> Optional[ak.Array]: + """Process many files using Dask and return concatenated awkward array. + + This function mirrors Processor.process_data semantics but uses Dask. + + If `scheduler_address` is provided, it will connect to the remote + Dask scheduler; otherwise it will start a local `Client` which will be + closed before returning. + """ + + if not file_list: + LOGGER.error("Empty file_list provided to process_files_with_dask") + return None + + client: Optional[Client] = None + created_client = False + try: + if scheduler_address: + client = Client(scheduler_address) + LOGGER.info(f"Connected to Dask scheduler at {scheduler_address}") + else: + # Create a local client; let Dask decide sensible defaults if None + client = Client(n_workers=n_workers, threads_per_worker=threads_per_worker, processes=processes) + created_client = True + LOGGER.info(f"Started local Dask client: {client}") + + # Build delayed tasks that call the existing module-level worker + tasks = [ + delayed(_worker_func)( + file_name, + branches=branches, + tree_path=tree_path, + use_remote=use_remote, + location=location, + schema=schema, + verbosity=0, + ) + for file_name in file_list + ] + + # Submit tasks to the cluster + futures = client.compute(tasks) + + if show_progress: + try: + progress(futures) + except Exception: + # progress widgets may fail in some terminals; ignore + pass + + results = client.gather(futures) + + # Filter out None results and concatenate with awkward + results = [r for r in results if r is not None] + if not results: + LOGGER.warning("Dask returned no successful results") + return None + + concatenated = ak.concatenate(results) + LOGGER.info(f"Concatenated {len(results)} arrays into {len(concatenated)} events") + return concatenated + + finally: + if created_client and client is not None: + client.close() diff --git a/pyutils/pydask.py b/pyutils/pydask.py new file mode 100644 index 0000000..9c88da4 --- /dev/null +++ b/pyutils/pydask.py @@ -0,0 +1,175 @@ +"""Dask-based Processor wrapper for pyutils + +Provides a `DaskProcessor` class that mirrors the public API of +`Processor` in `pyprocess.py` but runs the per-file worker function using +Dask (local or distributed). This file intentionally leaves the original +`pyprocess.py` unchanged and reuses its module-level `_worker_func`. + +Usage: + from pyutils.pydask import DaskProcessor + + dp = DaskProcessor() + arr = dp.process_data(file_list_path="files.txt", branches=..., n_workers=4) + +This is a lightweight adapter intended to be a drop-in alternative to +`Processor.process_data` for users who want to run on a Dask cluster. +""" +from __future__ import annotations + +from typing import List, Optional, Dict, Tuple +import logging +import awkward as ak +from dask import delayed +from dask.distributed import Client, progress + +from .pyprocess import _worker_func, Processor + +LOGGER = logging.getLogger("pyutils.pydask") + + +class DaskProcessor: + """Processor-like class that uses Dask for parallel file processing. + + Constructor arguments mirror `Processor` where relevant. + """ + + def __init__( + self, + tree_path: str = "EventNtuple/ntuple", + use_remote: bool = False, + location: str = "tape", + schema: str = "root", + verbosity: int = 1, + worker_verbosity: int = 0, + ): + # Reuse Processor for file-list utilities and logging + self._base = Processor( + tree_path=tree_path, + use_remote=use_remote, + location=location, + schema=schema, + verbosity=verbosity, + worker_verbosity=worker_verbosity, + ) + + def get_file_list(self, defname=None, file_list_path=None): + return self._base.get_file_list(defname=defname, file_list_path=file_list_path) + + def process_data( + self, + file_name: Optional[str] = None, + file_list_path: Optional[str] = None, + defname: Optional[str] = None, + branches: Optional[Dict] = None, + n_workers: Optional[int] = None, + threads_per_worker: int = 1, + processes: bool = False, + scheduler_address: Optional[str] = None, + show_progress: bool = True, + retries: int = 0, + custom_worker_func=None, + ) -> Optional[ak.Array]: + """Process files using Dask. Mirrors Processor.process_data semantics. + + Either provide a single `file_name` or one of `file_list_path`/`defname`. + If `scheduler_address` is provided, connects to that cluster; otherwise + starts a local `Client` which is closed before returning. + """ + + # Validate input sources + file_sources = sum(x is not None for x in [file_name, defname, file_list_path]) + if file_sources != 1: + self._base.logger.log("Please provide exactly one of 'file_name', 'file_list_path', or defname'", "error") + return None + + # Validate custom worker + if custom_worker_func is not None: + if not callable(custom_worker_func): + self._base.logger.log("custom_worker_func is not callable", "error") + return None + + # Single-file shortcut + if file_name: + if custom_worker_func is None: + worker = lambda fname: _worker_func( + fname, + branches=branches, + tree_path=self._base.tree_path, + use_remote=self._base.use_remote, + location=self._base.location, + schema=self._base.schema, + verbosity=self._base.worker_verbosity, + ) + else: + worker = custom_worker_func + + try: + result = worker(file_name) + return result + except Exception as e: + self._base.logger.log(f"Error processing {file_name}: {e}", "error") + return None + + # Prepare file list + file_list = self.get_file_list(defname=defname, file_list_path=file_list_path) + if not file_list: + self._base.logger.log("Results list has length zero", "warning") + return None + + # Choose worker function + if custom_worker_func is None: + # use module-level _worker_func as in pyprocess + def _wrap(fname): + return _worker_func( + fname, + branches=branches, + tree_path=self._base.tree_path, + use_remote=self._base.use_remote, + location=self._base.location, + schema=self._base.schema, + verbosity=self._base.worker_verbosity, + ) + + worker_func = _wrap + else: + worker_func = custom_worker_func + + client: Optional[Client] = None + created_client = False + try: + if scheduler_address: + client = Client(scheduler_address) + LOGGER.info(f"Connected to Dask scheduler at {scheduler_address}") + else: + client = Client(n_workers=n_workers, threads_per_worker=threads_per_worker, processes=processes) + created_client = True + LOGGER.info(f"Started local Dask client: {client}") + + # Create delayed tasks + tasks = [delayed(worker_func)(fname) for fname in file_list] + + futures = client.compute(tasks, retries=retries) + + if show_progress: + try: + progress(futures) + except Exception: + pass + + results = client.gather(futures) + + results = [r for r in results if r is not None] + if not results: + self._base.logger.log("Dask returned no successful results", "warning") + return None + + concatenated = ak.concatenate(results) + self._base.logger.log(f"Returning concatenated array containing {len(concatenated)} events", "success") + return concatenated + + finally: + if created_client and client is not None: + client.close() + + +__all__ = ["DaskProcessor"] From 0e5e7eafb53da5d220d54c23b4901a7af968c24f Mon Sep 17 00:00:00 2001 From: Sophie Middleton Date: Wed, 25 Feb 2026 08:17:37 -0600 Subject: [PATCH 02/14] dask tests add --- dask-tests/plot.py | 16 ++ dask-tests/run_dask_example.py | 430 +++++++++++++++++++++++++++++++++ dask-tests/test_dask.py | 14 ++ 3 files changed, 460 insertions(+) create mode 100644 dask-tests/plot.py create mode 100644 dask-tests/run_dask_example.py create mode 100644 dask-tests/test_dask.py diff --git a/dask-tests/plot.py b/dask-tests/plot.py new file mode 100644 index 0000000..544b3a3 --- /dev/null +++ b/dask-tests/plot.py @@ -0,0 +1,16 @@ +import pandas as pd +import matplotlib.pyplot as plt + +df = pd.read_csv("test.csv") +# compute total_cores (for dask rows) +df["total_cores"] = df.apply(lambda r: (r.n_workers * r.threads_per_worker) if r.mode=="dask" else r.max_workers, axis=1) +baseline = df[(df.mode=="processor") & (df.max_workers==1)]["avg_time_s"].iloc[0] +df["speedup"] = baseline / df["avg_time_s"] + +# plot avg time +df.plot.bar(x=df.index, y="avg_time_s") +plt.savefig("avg_time.png") + +# plot speedup vs cores +df.plot.scatter(x="total_cores", y="speedup") +plt.savefig("speedup_vs_cores.png") \ No newline at end of file diff --git a/dask-tests/run_dask_example.py b/dask-tests/run_dask_example.py new file mode 100644 index 0000000..f48dab9 --- /dev/null +++ b/dask-tests/run_dask_example.py @@ -0,0 +1,430 @@ +from pyutils.dask_integration import process_files_with_dask +from pyutils.pyprocess import Processor +import logging +import time +import tempfile +import os +from typing import List, Dict, Tuple, Optional +import awkward as ak + +logging.basicConfig(level=logging.INFO) + + +def run_processor(file_list: List[str], branches: Dict, max_workers: Optional[int] = None, use_processes: bool = False) -> Tuple[Optional[ak.Array], float]: + """Run the existing Processor.process_data using a temporary file-list and return (result, elapsed_seconds).""" + # Write file list to a temporary file so Processor can read it via file_list_path + with tempfile.NamedTemporaryFile(mode="w", delete=False) as f: + for p in file_list: + f.write(p + "\n") + tmp_path = f.name + + try: + proc = Processor() + t0 = time.perf_counter() + result = proc.process_data(file_list_path=tmp_path, branches=branches, max_workers=max_workers, use_processes=use_processes) + elapsed = time.perf_counter() - t0 + return result, elapsed + finally: + try: + os.remove(tmp_path) + except Exception: + pass + + +def run_dask(file_list: List[str], branches: Dict, n_workers: int = 4, threads_per_worker: int = 1, processes: bool = False, show_progress: bool = True) -> Tuple[Optional[ak.Array], float]: + """Run the Dask-based wrapper and return (result, elapsed_seconds).""" + t0 = time.perf_counter() + result = process_files_with_dask( + file_list=file_list, + branches=branches, + n_workers=n_workers, + threads_per_worker=threads_per_worker, + processes=processes, + show_progress=show_progress, + ) + elapsed = time.perf_counter() - t0 + return result, elapsed + + +def compare_results(a: Optional[ak.Array], b: Optional[ak.Array], show_items: int = 2) -> None: + """Compare two awkward arrays (or None). Prints summary comparison. + + Comparison is shallow: checks for None, lengths, top-level fields, and prints first items. + """ + if a is None and b is None: + print("Both results are None") + return + if a is None: + print("Processor result is None; Dask returned data") + return + if b is None: + print("Dask result is None; Processor returned data") + return + + try: + la = len(a) + except Exception: + la = None + try: + lb = len(b) + except Exception: + lb = None + + print(f"Lengths: Processor={la}, Dask={lb}") + + try: + fa = ak.fields(a) + except Exception: + fa = None + try: + fb = ak.fields(b) + except Exception: + fb = None + + print(f"Top-level fields: Processor={fa}, Dask={fb}") + + # Print first few items for manual inspection + def _show_first(arr, n): + try: + lst = ak.to_list(arr[:n]) + return lst + except Exception: + return None + + print("First items from Processor:", _show_first(a, show_items)) + print("First items from Dask:", _show_first(b, show_items)) + + +if __name__ == "__main__": + # Adjust these paths/branches for your environment + file_list = [ + "/Users/sophie/pyutils-dev/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000552.root", + "/Users/sophie/pyutils-dev/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002561.root", + "/Users/sophie/pyutils-dev/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000974.root", + ] + + branches = { + "trk": [ + "trk.nactive", + "trk.pdg", + "trk.status", + "trkqual.valid", + "trkqual.result", + "trkpid.valid", + "trkpid.result", + ] + } + + # Quick pre-parse: if user only requested plotting, handle it and exit + import argparse + pre_parser = argparse.ArgumentParser(add_help=False) + pre_parser.add_argument("--plot", action="store_true") + pre_parser.add_argument("--output", type=str, default=None) + pre_args, _ = pre_parser.parse_known_args() + if pre_args.plot: + csv_path = pre_args.output if pre_args.output is not None else None + if csv_path is None: + import glob + candidates = glob.glob("benchmark_results_*.csv") + candidates.sort(key=os.path.getmtime, reverse=True) + if candidates: + csv_path = candidates[0] + elif os.path.exists("test.csv"): + csv_path = "test.csv" + if csv_path is None: + print("No CSV provided and no benchmark_results_*.csv or test.csv found. Use --output to specify file.") + exit(1) + + # Minimal plotting (avoid importing heavy libs at module import time) + try: + import pandas as pd + import matplotlib.pyplot as plt + except Exception: + print("Plotting requires pandas and matplotlib. Install them with: pip install pandas matplotlib") + exit(1) + + df = pd.read_csv(csv_path) + df["n_workers"] = pd.to_numeric(df.get("n_workers"), errors="coerce") + df["threads_per_worker"] = pd.to_numeric(df.get("threads_per_worker"), errors="coerce") + df["max_workers"] = pd.to_numeric(df.get("max_workers"), errors="coerce") + df["avg_time_s"] = pd.to_numeric(df.get("avg_time_s"), errors="coerce") + + def total_cores(row): + if pd.notna(row.get("n_workers")) and pd.notna(row.get("threads_per_worker")): + return int(row["n_workers"] * row["threads_per_worker"]) + if pd.notna(row.get("max_workers")): + return int(row["max_workers"]) + return None + + df["total_cores"] = df.apply(total_cores, axis=1) + baseline_rows = df[(df['mode'] == "processor") & (df.max_workers == 1)] + if not baseline_rows.empty: + baseline = float(baseline_rows["avg_time_s"].iloc[0]) + else: + baseline = float(df["avg_time_s"].max()) + df["speedup"] = baseline / df["avg_time_s"] + + out_prefix = os.path.splitext(os.path.basename(csv_path))[0] + plots_dir = os.path.join(os.getcwd(), "benchmark_plots") + os.makedirs(plots_dir, exist_ok=True) + df_plot = df.dropna(subset=["total_cores", "avg_time_s"]).sort_values("total_cores") + + fig, ax = plt.subplots() + ax.bar(df_plot["total_cores"].astype(str), df_plot["avg_time_s"]) + ax.set_xlabel("Total cores") + ax.set_ylabel("Avg time (s)") + ax.set_title("Average runtime vs total cores") + fig.tight_layout() + out1 = os.path.join(plots_dir, f"{out_prefix}_avg_time.png") + fig.savefig(out1) + plt.close(fig) + print(f"Wrote {out1}") + + fig, ax = plt.subplots() + ax.plot(df_plot["total_cores"], df_plot["speedup"], marker="o") + ax.set_xlabel("Total cores") + ax.set_ylabel("Speedup (baseline/time)") + ax.set_title("Speedup vs total cores") + fig.tight_layout() + out2 = os.path.join(plots_dir, f"{out_prefix}_speedup.png") + fig.savefig(out2) + plt.close(fig) + print(f"Wrote {out2}") + + dask_df = df[df['mode'] == "dask"].dropna(subset=["n_workers", "threads_per_worker", "avg_time_s"]) + if not dask_df.empty: + pivot = dask_df.pivot_table(index="n_workers", columns="threads_per_worker", values="avg_time_s") + fig, ax = plt.subplots() + cax = ax.imshow(pivot.values, aspect="auto", origin="lower") + ax.set_xticks(range(len(pivot.columns))) + ax.set_xticklabels([str(int(x)) for x in pivot.columns]) + ax.set_yticks(range(len(pivot.index))) + ax.set_yticklabels([str(int(x)) for x in pivot.index]) + ax.set_xlabel("threads_per_worker") + ax.set_ylabel("n_workers") + ax.set_title("Dask avg time heatmap") + fig.colorbar(cax, label="avg_time_s") + out3 = os.path.join(plots_dir, f"{out_prefix}_heatmap.png") + fig.tight_layout() + fig.savefig(out3) + plt.close(fig) + print(f"Wrote {out3}") + # exit after plotting when using pre-parser + exit(0) + + print("Running Processor (local concurrent.futures)...") + p_res, p_time = run_processor(file_list, branches, max_workers=4, use_processes=False) + print(f"Processor time: {p_time:.3f}s") + + print("Running Dask wrapper...") + d_res, d_time = run_dask(file_list, branches, n_workers=4, threads_per_worker=1, processes=False, show_progress=False) + print(f"Dask time: {d_time:.3f}s") + + print("Comparing results...") + compare_results(p_res, d_res, show_items=2) + + # Benchmark mode via CLI + import argparse + + parser = argparse.ArgumentParser(description="Run Processor vs Dask example/benchmark") + parser.add_argument("--benchmark", action="store_true", help="Run benchmark sweep") + parser.add_argument("--repeat", type=int, default=1, help="Repeat each config this many times and report average") + parser.add_argument("--dry-run", action="store_true", help="Print benchmark plan and exit") + parser.add_argument("--output", type=str, default=None, help="CSV path to write benchmark results (default: timestamped file)") + parser.add_argument("--plot", action="store_true", help="Generate plots from existing CSV and exit") + args = parser.parse_args() + + def plot_benchmarks(csv_path: str) -> None: + try: + import pandas as pd + import matplotlib.pyplot as plt + except Exception as e: + print("Plotting requires pandas and matplotlib. Install them with: pip install pandas matplotlib") + print(f"Import error: {e}") + return + + if not os.path.exists(csv_path): + print(f"CSV file not found: {csv_path}") + return + + df = pd.read_csv(csv_path) + # Normalize numeric columns + df["n_workers"] = pd.to_numeric(df.get("n_workers"), errors="coerce") + df["threads_per_worker"] = pd.to_numeric(df.get("threads_per_worker"), errors="coerce") + df["max_workers"] = pd.to_numeric(df.get("max_workers"), errors="coerce") + df["avg_time_s"] = pd.to_numeric(df.get("avg_time_s"), errors="coerce") + + # total_cores: for dask use n_workers*threads_per_worker, else use max_workers + def total_cores(row): + if pd.notna(row.get("n_workers")) and pd.notna(row.get("threads_per_worker")): + return int(row["n_workers"] * row["threads_per_worker"]) + if pd.notna(row.get("max_workers")): + return int(row["max_workers"]) + return None + + df["total_cores"] = df.apply(total_cores, axis=1) + + # baseline: processor with max_workers==1 if available + baseline_rows = df[(df['mode'] == "processor") & (df.max_workers == 1)] + if not baseline_rows.empty: + baseline = float(baseline_rows["avg_time_s"].iloc[0]) + else: + baseline = float(df["avg_time_s"].max()) + + df["speedup"] = baseline / df["avg_time_s"] + + out_prefix = os.path.splitext(os.path.basename(csv_path))[0] + plots_dir = os.path.join(os.getcwd(), "benchmark_plots") + os.makedirs(plots_dir, exist_ok=True) + + # Avg time vs total cores + fig, ax = plt.subplots() + df_plot = df.dropna(subset=["total_cores", "avg_time_s"]).sort_values("total_cores") + ax.bar(df_plot["total_cores"].astype(str), df_plot["avg_time_s"]) + ax.set_xlabel("Total cores") + ax.set_ylabel("Avg time (s)") + ax.set_title("Average runtime vs total cores") + fig.tight_layout() + out1 = os.path.join(plots_dir, f"{out_prefix}_avg_time.png") + fig.savefig(out1) + plt.close(fig) + print(f"Wrote {out1}") + + # Speedup vs total cores + fig, ax = plt.subplots() + ax.plot(df_plot["total_cores"], df_plot["speedup"], marker="o") + ax.set_xlabel("Total cores") + ax.set_ylabel("Speedup (baseline/time)") + ax.set_title("Speedup vs total cores") + fig.tight_layout() + out2 = os.path.join(plots_dir, f"{out_prefix}_speedup.png") + fig.savefig(out2) + plt.close(fig) + print(f"Wrote {out2}") + + # Heatmap for Dask configs (n_workers x threads_per_worker) + dask_df = df[df['mode'] == "dask"].dropna(subset=["n_workers", "threads_per_worker", "avg_time_s"]) + if not dask_df.empty: + pivot = dask_df.pivot_table(index="n_workers", columns="threads_per_worker", values="avg_time_s") + fig, ax = plt.subplots() + cax = ax.imshow(pivot.values, aspect="auto", origin="lower") + ax.set_xticks(range(len(pivot.columns))) + ax.set_xticklabels([str(int(x)) for x in pivot.columns]) + ax.set_yticks(range(len(pivot.index))) + ax.set_yticklabels([str(int(x)) for x in pivot.index]) + ax.set_xlabel("threads_per_worker") + ax.set_ylabel("n_workers") + ax.set_title("Dask avg time heatmap") + fig.colorbar(cax, label="avg_time_s") + out3 = os.path.join(plots_dir, f"{out_prefix}_heatmap.png") + fig.tight_layout() + fig.savefig(out3) + plt.close(fig) + print(f"Wrote {out3}") + + # Handle plotting separately + if args.plot: + csv_path = args.output if args.output is not None else None + if csv_path is None: + # try to find most recent benchmark_results_*.csv + import glob + candidates = glob.glob("benchmark_results_*.csv") + candidates.sort(key=os.path.getmtime, reverse=True) + if candidates: + csv_path = candidates[0] + else: + # allow user to point at test.csv if present + if os.path.exists("test.csv"): + csv_path = "test.csv" + else: + print("No CSV provided and no benchmark_results_*.csv found. Use --output to specify file.") + csv_path = None + + if csv_path: + plot_benchmarks(csv_path) + # After plotting, exit + exit(0) + + if args.benchmark: + # Define a small grid of Dask configs to sweep + dask_grid = [ + (1, 1), + (2, 1), + (4, 1), + (2, 2), + ] + + print("Benchmark plan:") + for (nw, tp) in dask_grid: + print(f" Dask: n_workers={nw}, threads_per_worker={tp}") + print(f"Processor: max_workers=1..4 (threads)") + + if args.dry_run: + print("Dry run requested; exiting without executing benchmarks") + else: + # Run processor baseline (single run per worker setting) + proc_results = {} + for mw in [1, 2, 4]: + print(f"Running Processor with max_workers={mw}...", flush=True) + times = [] + for _ in range(args.repeat): + _, t = run_processor(file_list, branches, max_workers=mw, use_processes=False) + times.append(t) + proc_results[mw] = sum(times) / len(times) + print(f" avg time: {proc_results[mw]:.3f}s") + + # Run Dask grid + dask_results = {} + for (nw, tp) in dask_grid: + print(f"Running Dask n_workers={nw}, threads_per_worker={tp}...", flush=True) + times = [] + for _ in range(args.repeat): + _, t = run_dask(file_list, branches, n_workers=nw, threads_per_worker=tp, processes=False, show_progress=False) + times.append(t) + avg = sum(times) / len(times) + dask_results[(nw, tp)] = avg + print(f" avg time: {avg:.3f}s") + + # Summary + print("\nBenchmark summary:") + print("Processor (avg seconds):") + for k, v in proc_results.items(): + print(f" max_workers={k}: {v:.3f}s") + print("Dask (avg seconds):") + for k, v in dask_results.items(): + print(f" n_workers={k[0]}, threads_per_worker={k[1]}: {v:.3f}s") + + # Write CSV results + import csv + from datetime import datetime + + out_path = args.output + if out_path is None: + stamp = datetime.utcnow().strftime("%Y%m%dT%H%M%SZ") + out_path = f"benchmark_results_{stamp}.csv" + + print(f"Writing benchmark CSV to {out_path}") + with open(out_path, "w", newline="") as csvfile: + writer = csv.DictWriter(csvfile, fieldnames=["mode", "n_workers", "threads_per_worker", "max_workers", "avg_time_s", "repeat_count"]) + writer.writeheader() + # Processor rows + for k, v in proc_results.items(): + writer.writerow({ + "mode": "processor", + "n_workers": "", + "threads_per_worker": "", + "max_workers": k, + "avg_time_s": f"{v:.6f}", + "repeat_count": args.repeat, + }) + # Dask rows + for k, v in dask_results.items(): + writer.writerow({ + "mode": "dask", + "n_workers": k[0], + "threads_per_worker": k[1], + "max_workers": "", + "avg_time_s": f"{v:.6f}", + "repeat_count": args.repeat, + }) + diff --git a/dask-tests/test_dask.py b/dask-tests/test_dask.py new file mode 100644 index 0000000..fd65b9a --- /dev/null +++ b/dask-tests/test_dask.py @@ -0,0 +1,14 @@ +import boost_histogram as bh +from dask import delayed, compute + +@delayed +def process_file(path): + x, w = read_arrays(path) # awkward/numpy arrays + h = bh.Hist(bh.axis.Regular(100, 0, 10, name="x"), + storage=bh.storage.Weight()) + h.fill(x, weight=w) + return h + +tasks = [process_file(p) for p in paths] +partials = compute(*tasks) # list of Hist +total = sum(partials) # merge into global Hist From ada7b3c1b429425a84061c042412acf80b5d2716 Mon Sep 17 00:00:00 2001 From: sophieMu2e Date: Thu, 26 Feb 2026 08:49:15 -0600 Subject: [PATCH 03/14] pyprocess tests --- dask-tests/plot.py | 49 ++++- dask-tests/run_dask_example.py | 56 +++--- scripts/benchmark_dask.py | 243 ++++++++++++++++++++++ scripts/benchmark_pyprocess.py | 277 +++++++++++++++++++++++++ scripts/plot_bench.py | 356 +++++++++++++++++++++++++++++++++ 5 files changed, 947 insertions(+), 34 deletions(-) create mode 100644 scripts/benchmark_dask.py create mode 100644 scripts/benchmark_pyprocess.py create mode 100644 scripts/plot_bench.py diff --git a/dask-tests/plot.py b/dask-tests/plot.py index 544b3a3..3443a2b 100644 --- a/dask-tests/plot.py +++ b/dask-tests/plot.py @@ -1,16 +1,57 @@ import pandas as pd import matplotlib.pyplot as plt +import numpy as np df = pd.read_csv("test.csv") + +# Convert max_workers to numeric (handles empty strings as NaN) +df["max_workers"] = pd.to_numeric(df["max_workers"], errors="coerce") +df["n_workers"] = pd.to_numeric(df["n_workers"], errors="coerce") +df["threads_per_worker"] = pd.to_numeric(df["threads_per_worker"], errors="coerce") + # compute total_cores (for dask rows) df["total_cores"] = df.apply(lambda r: (r.n_workers * r.threads_per_worker) if r.mode=="dask" else r.max_workers, axis=1) -baseline = df[(df.mode=="processor") & (df.max_workers==1)]["avg_time_s"].iloc[0] + +# Get baseline: processor with max_workers==1 +baseline_rows = df[(df.mode=="processor") & (df.max_workers==1)] +if baseline_rows.empty: + # Fallback: use the slowest time as baseline + print("Warning: No processor row with max_workers==1 found. Using slowest time as baseline.") + baseline = df["avg_time_s"].max() +else: + baseline = baseline_rows["avg_time_s"].iloc[0] + df["speedup"] = baseline / df["avg_time_s"] +# Create a label for each row to describe the configuration +def row_label(r): + if r.mode == "processor": + return f"Processor (mw={int(r.max_workers)})" + else: + nw = int(r.n_workers) if pd.notna(r.n_workers) else "?" + tpw = int(r.threads_per_worker) if pd.notna(r.threads_per_worker) else "?" + return f"Dask (nw={nw}, tpw={tpw})" + +df["label"] = df.apply(row_label, axis=1) + # plot avg time -df.plot.bar(x=df.index, y="avg_time_s") +fig, ax = plt.subplots(figsize=(10, 6)) +ax.bar(df["label"], df["avg_time_s"]) +ax.set_ylabel("Average Time (s)") +ax.set_xlabel("Configuration") +ax.set_title("Average Runtime by Configuration") +plt.xticks(rotation=45, ha='right') +fig.tight_layout() plt.savefig("avg_time.png") +plt.close() # plot speedup vs cores -df.plot.scatter(x="total_cores", y="speedup") -plt.savefig("speedup_vs_cores.png") \ No newline at end of file +fig, ax = plt.subplots(figsize=(10, 6)) +ax.scatter(df["total_cores"], df["speedup"], s=100) +ax.set_xlabel("Total Cores") +ax.set_ylabel("Speedup (baseline/time)") +ax.set_title("Speedup vs Total Cores") +plt.grid(True, alpha=0.3) +fig.tight_layout() +plt.savefig("speedup_vs_cores.png") +plt.close() \ No newline at end of file diff --git a/dask-tests/run_dask_example.py b/dask-tests/run_dask_example.py index f48dab9..14ea6ae 100644 --- a/dask-tests/run_dask_example.py +++ b/dask-tests/run_dask_example.py @@ -96,12 +96,20 @@ def _show_first(arr, n): if __name__ == "__main__": - # Adjust these paths/branches for your environment - file_list = [ - "/Users/sophie/pyutils-dev/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000552.root", - "/Users/sophie/pyutils-dev/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002561.root", - "/Users/sophie/pyutils-dev/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000974.root", - ] + # Parse file-list early since it's needed for all modes + import argparse + early_parser = argparse.ArgumentParser(add_help=False) + early_parser.add_argument("--file-list", type=str, required=True, help="Path to text file with list of ROOT files (one per line)") + early_parser.add_argument("--plot", action="store_true") + early_parser.add_argument("--output", type=str, default=None) + early_parser.add_argument("--benchmark", action="store_true") + early_parser.add_argument("--repeat", type=int, default=1) + early_parser.add_argument("--dry-run", action="store_true") + early_args = early_parser.parse_args() + + # Read file list from file + with open(early_args.file_list, 'r') as f: + file_list = [line.strip() for line in f if line.strip()] branches = { "trk": [ @@ -116,13 +124,8 @@ def _show_first(arr, n): } # Quick pre-parse: if user only requested plotting, handle it and exit - import argparse - pre_parser = argparse.ArgumentParser(add_help=False) - pre_parser.add_argument("--plot", action="store_true") - pre_parser.add_argument("--output", type=str, default=None) - pre_args, _ = pre_parser.parse_known_args() - if pre_args.plot: - csv_path = pre_args.output if pre_args.output is not None else None + if early_args.plot: + csv_path = early_args.output if early_args.output is not None else None if csv_path is None: import glob candidates = glob.glob("benchmark_results_*.csv") @@ -226,14 +229,7 @@ def total_cores(row): # Benchmark mode via CLI import argparse - parser = argparse.ArgumentParser(description="Run Processor vs Dask example/benchmark") - parser.add_argument("--benchmark", action="store_true", help="Run benchmark sweep") - parser.add_argument("--repeat", type=int, default=1, help="Repeat each config this many times and report average") - parser.add_argument("--dry-run", action="store_true", help="Print benchmark plan and exit") - parser.add_argument("--output", type=str, default=None, help="CSV path to write benchmark results (default: timestamped file)") - parser.add_argument("--plot", action="store_true", help="Generate plots from existing CSV and exit") - args = parser.parse_args() - + # Benchmark mode def plot_benchmarks(csv_path: str) -> None: try: import pandas as pd @@ -323,8 +319,8 @@ def total_cores(row): print(f"Wrote {out3}") # Handle plotting separately - if args.plot: - csv_path = args.output if args.output is not None else None + if early_args.plot: + csv_path = early_args.output if early_args.output is not None else None if csv_path is None: # try to find most recent benchmark_results_*.csv import glob @@ -345,7 +341,7 @@ def total_cores(row): # After plotting, exit exit(0) - if args.benchmark: + if early_args.benchmark: # Define a small grid of Dask configs to sweep dask_grid = [ (1, 1), @@ -359,7 +355,7 @@ def total_cores(row): print(f" Dask: n_workers={nw}, threads_per_worker={tp}") print(f"Processor: max_workers=1..4 (threads)") - if args.dry_run: + if early_args.dry_run: print("Dry run requested; exiting without executing benchmarks") else: # Run processor baseline (single run per worker setting) @@ -367,7 +363,7 @@ def total_cores(row): for mw in [1, 2, 4]: print(f"Running Processor with max_workers={mw}...", flush=True) times = [] - for _ in range(args.repeat): + for _ in range(early_args.repeat): _, t = run_processor(file_list, branches, max_workers=mw, use_processes=False) times.append(t) proc_results[mw] = sum(times) / len(times) @@ -378,7 +374,7 @@ def total_cores(row): for (nw, tp) in dask_grid: print(f"Running Dask n_workers={nw}, threads_per_worker={tp}...", flush=True) times = [] - for _ in range(args.repeat): + for _ in range(early_args.repeat): _, t = run_dask(file_list, branches, n_workers=nw, threads_per_worker=tp, processes=False, show_progress=False) times.append(t) avg = sum(times) / len(times) @@ -398,7 +394,7 @@ def total_cores(row): import csv from datetime import datetime - out_path = args.output + out_path = early_args.output if out_path is None: stamp = datetime.utcnow().strftime("%Y%m%dT%H%M%SZ") out_path = f"benchmark_results_{stamp}.csv" @@ -415,7 +411,7 @@ def total_cores(row): "threads_per_worker": "", "max_workers": k, "avg_time_s": f"{v:.6f}", - "repeat_count": args.repeat, + "repeat_count": early_args.repeat, }) # Dask rows for k, v in dask_results.items(): @@ -425,6 +421,6 @@ def total_cores(row): "threads_per_worker": k[1], "max_workers": "", "avg_time_s": f"{v:.6f}", - "repeat_count": args.repeat, + "repeat_count": early_args.repeat, }) diff --git a/scripts/benchmark_dask.py b/scripts/benchmark_dask.py new file mode 100644 index 0000000..4ac841f --- /dev/null +++ b/scripts/benchmark_dask.py @@ -0,0 +1,243 @@ +#!/usr/bin/env python3 +""" +Benchmarking script for `pyutils.dask_integration.process_files_with_dask`. + +Features: +- Sweeps `n_workers` and `threads_per_worker` values +- Toggles `processes` True/False +- Supports comparing full vs reduced `branches` +- Uses `file_list_path` (local list) +- Records per-file durations and summary metrics to CSV + +Usage examples: + python3 scripts/benchmark_dask.py --file-list files.txt --out results.csv + +Note: This script uses the `process_files_with_dask` from the `pyutils` package +so run it from the repository root where `pyutils` is importable. +""" + +import argparse +import csv +import json +import os +import time +from statistics import mean, median + +from pyutils.dask_integration import process_files_with_dask + + +def percentile(sorted_list, p): + """Calculate percentile of a sorted list.""" + if not sorted_list: + return None + k = (len(sorted_list) - 1) * (p / 100.0) + f = int(k) + c = min(f + 1, len(sorted_list) - 1) + if f == c: + return sorted_list[int(k)] + d0 = sorted_list[f] * (c - k) + d1 = sorted_list[c] * (k - f) + return d0 + d1 + + +def run_single_config(file_list, branches, n_workers, threads_per_worker, processes, out_dir, verbosity=0): + """Run a single dask configuration and record timing.""" + pfx = f"nw={n_workers}_tpw={threads_per_worker}_proc={processes}_branches={'reduced' if branches else 'full'}" + out_prefix = os.path.join(out_dir, pfx) + os.makedirs(out_dir, exist_ok=True) + + # Run the dask processing with timing + t0 = time.perf_counter() + result = process_files_with_dask( + file_list=file_list, + branches=branches, + n_workers=n_workers, + threads_per_worker=threads_per_worker, + processes=processes, + show_progress=False, + ) + t1 = time.perf_counter() + + total_time = t1 - t0 + + # Try to infer total event count + try: + if result is None: + n_events = 0 + else: + n_events = len(result) + except Exception: + try: + # If dict-like (branches dict), try first field + if isinstance(result, dict): + n_events = len(next(iter(result.values()))) + else: + n_events = None + except Exception: + n_events = None + + files_processed = len(file_list) + files_per_sec = files_processed / total_time if total_time > 0 else None + + summary = { + "n_workers": n_workers, + "threads_per_worker": threads_per_worker, + "processes": processes, + "branches_mode": "reduced" if branches else "full", + "files_processed": files_processed, + "total_time": total_time, + "files_per_sec": files_per_sec, + "total_events": n_events if isinstance(n_events, int) else 0, + } + + if verbosity > 0: + print(f" Total time: {total_time:.3f}s") + print(f" Files/sec: {files_per_sec:.2f}") + print(f" Total events: {n_events}") + + return summary + + +def main(): + parser = argparse.ArgumentParser( + description="Benchmark dask integration with various worker configurations" + ) + parser.add_argument( + "--file-list", + dest="file_list", + required=True, + help="Path to a newline-separated local file list", + ) + parser.add_argument( + "--reduced-branches", + dest="reduced_branches", + help="Comma-separated reduced branch list (e.g. trk.nactive,trk.pdg)", + default=None, + ) + parser.add_argument( + "--out", + dest="out", + help="Summary CSV output path", + default="benchmark_dask_results.csv", + ) + parser.add_argument( + "--out-dir", + dest="out_dir", + help="Directory to store per-run outputs", + default="benchmark_out", + ) + parser.add_argument( + "--n-workers-list", + dest="nw_list", + help="Comma-separated n_workers values; default auto", + default=None, + ) + parser.add_argument( + "--threads-per-worker-list", + dest="tpw_list", + help="Comma-separated threads_per_worker values; default: 1", + default=None, + ) + parser.add_argument( + "--verbosity", + dest="verbosity", + type=int, + default=1, + ) + args = parser.parse_args() + + # Read and count files + with open(args.file_list, "r") as f: + file_lines = [l.strip() for l in f if l.strip()] + n_files = len(file_lines) + print(f"Loaded {n_files} files from {args.file_list}") + + # Determine default n_workers if not specified + cpu_cnt = os.cpu_count() or 1 + if args.nw_list: + nw_values = [int(x) for x in args.nw_list.split(",")] + else: + # Default sweep: 1, 2, 4, 8, 16, 32, cpu_count, and min(2*cpu_count, n_files) + nw_values = [1, 2, 4, 8, 16, 32, cpu_cnt, min(2 * cpu_cnt, max(1, n_files))] + nw_values = sorted(set(nw_values)) + + # Determine threads_per_worker values + if args.tpw_list: + tpw_values = [int(x) for x in args.tpw_list.split(",")] + else: + tpw_values = [1] + tpw_values = sorted(set(tpw_values)) + + # Always use a reduced grouped `branches` dict + if args.reduced_branches: + lst = [b.strip() for b in args.reduced_branches.split(",") if b.strip()] + reduced_branches = {"trk": lst} if lst else None + else: + reduced_branches = { + "trk": [ + "trk.nactive", + "trk.pdg", + "trk.status", + "trkqual.valid", + "trkqual.result", + "trkpid.valid", + "trkpid.result", + ] + } + + # Build sweep combinations + branch_options = [reduced_branches] + + combos = [] + for processes in (False, True): + for branches in branch_options: + for nw in nw_values: + for tpw in tpw_values: + # Skip unreasonable combinations + total_cores = nw * tpw + if total_cores > 2 * cpu_cnt: + continue + combos.append((nw, tpw, processes, branches)) + + print(f"Will run {len(combos)} configurations") + print(f"CPU count: {cpu_cnt}") + print(f"n_workers values: {nw_values}") + print(f"threads_per_worker values: {tpw_values}") + print(f"processes options: False, True") + print() + + # Run combos and collect summaries + summaries = [] + for i, (nw, tpw, processes, branches) in enumerate(combos, 1): + config_str = f"nw={nw}, tpw={tpw}, proc={processes}, branches={'reduced' if branches else 'full'}" + print(f"[{i}/{len(combos)}] Running: {config_str}") + try: + s = run_single_config( + file_list=file_lines, + branches=branches, + n_workers=nw, + threads_per_worker=tpw, + processes=processes, + out_dir=args.out_dir, + verbosity=args.verbosity, + ) + if s: + summaries.append(s) + except Exception as e: + print(f" Error: {e}") + + # Write summary CSV + if summaries: + keys = list(summaries[0].keys()) + with open(args.out, "w", newline="") as outcsv: + writer = csv.DictWriter(outcsv, fieldnames=keys) + writer.writeheader() + for row in summaries: + writer.writerow(row) + print(f"\nDone. Wrote summary to {args.out}") + else: + print("\nNo results to write.") + + +if __name__ == "__main__": + main() diff --git a/scripts/benchmark_pyprocess.py b/scripts/benchmark_pyprocess.py new file mode 100644 index 0000000..d6b135f --- /dev/null +++ b/scripts/benchmark_pyprocess.py @@ -0,0 +1,277 @@ +#!/usr/bin/env python3 +""" +Benchmarking script for `pyutils.pyprocess.Processor`. + +Features: +- Sweeps `max_workers` values +- Toggles `use_processes` True/False +- Supports comparing full vs reduced `branches` +- Can run with `file_list_path` (local list) or `defname` (SAM) +- Records per-file durations and summary metrics to CSV + +Usage examples: + python3 scripts/benchmark_pyprocess.py --file-list files.txt --out results.csv + +Note: This script uses the `Processor` and `_worker_func` from the `pyutils` package +so run it from the repository root where `pyutils` is importable. +""" + +import argparse +import csv +import functools +import json +import os +import time +from statistics import mean, median + +from pyutils.pyprocess import Processor, _worker_func + + +def timing_wrapper(file_name, branches, tree_path, use_remote, location, schema, verbosity): + """Top-level timing wrapper (picklable) that calls internal _worker_func.""" + t0 = time.perf_counter() + result = _worker_func( + file_name=file_name, + branches=branches, + tree_path=tree_path, + use_remote=use_remote, + location=location, + schema=schema, + verbosity=verbosity, + ) + t1 = time.perf_counter() + + # Try to infer event count + try: + n_events = len(result) + except Exception: + try: + # If awkward array or dict-like, try first field + n_events = len(next(iter(result.values()))) + except Exception: + n_events = None + + return {"file": file_name, "duration": (t1 - t0), "n_events": n_events, "result": result} + + +# Global config used by `bench_worker` so it has a single-argument signature +BENCH_CONFIG = {} + + +def bench_worker(file_name): + """Single-argument module-level worker that calls timing_wrapper using global BENCH_CONFIG. + + This satisfies `Processor`'s requirement that `custom_worker_func` takes exactly one + argument and is picklable for multiprocessing. + """ + return timing_wrapper(file_name, **BENCH_CONFIG) + + +def percentile(sorted_list, p): + if not sorted_list: + return None + k = (len(sorted_list) - 1) * (p / 100.0) + f = int(k) + c = min(f + 1, len(sorted_list) - 1) + if f == c: + return sorted_list[int(k)] + d0 = sorted_list[f] * (c - k) + d1 = sorted_list[c] * (k - f) + return d0 + d1 + + +def run_single_config(file_source_args, branches, max_workers, use_processes, out_dir, tree_path, use_remote, location, schema, verbosity, worker_verbosity): + pfx = f"mw={max_workers}_proc={use_processes}_branches={'reduced' if branches else 'full'}_{file_source_args.get('mode') or 'unknown'}" + out_prefix = os.path.join(out_dir, pfx) + os.makedirs(out_dir, exist_ok=True) + + processor = Processor(tree_path=tree_path, use_remote=use_remote, location=location, schema=schema, verbosity=verbosity, worker_verbosity=worker_verbosity) + + # Populate global BENCH_CONFIG used by the module-level `bench_worker` + global BENCH_CONFIG + BENCH_CONFIG = dict( + branches=branches, + tree_path=tree_path, + use_remote=use_remote, + location=location, + schema=schema, + verbosity=worker_verbosity, + ) + t0 = time.perf_counter() + results = processor.process_data( + file_name=None, + file_list_path=file_source_args.get("file_list_path"), + defname=file_source_args.get("defname"), + branches=branches, + max_workers=max_workers, + custom_worker_func=bench_worker, + use_processes=use_processes, + ) + t1 = time.perf_counter() + + # results: list of dicts returned by timing_wrapper (or None entries) + durations = [] + failed = 0 + total_events = 0 + per_file_rows = [] + + if results is None: + # No results + return None + + for r in results: + if not r: + failed += 1 + continue + dur = r.get("duration") + durations.append(dur) + n_ev = r.get("n_events") + if isinstance(n_ev, int): + total_events += n_ev + per_file_rows.append({"file": r.get("file"), "duration": dur, "n_events": n_ev}) + + durations_sorted = sorted(durations) + total_time = t1 - t0 + files_processed = len(durations) + files_per_sec = files_processed / total_time if total_time > 0 else None + + summary = { + "max_workers": max_workers, + "use_processes": use_processes, + "branches_mode": "reduced" if branches else "full", + "source_mode": file_source_args.get("mode"), + "files_processed": files_processed, + "failed": failed, + "total_time": total_time, + "files_per_sec": files_per_sec, + "mean_duration": mean(durations) if durations else None, + "median_duration": median(durations) if durations else None, + "p90_duration": percentile(durations_sorted, 90), + "p99_duration": percentile(durations_sorted, 99), + "total_events": total_events, + } + + # Write per-file CSV + per_file_csv = out_prefix + "_perfile.csv" + with open(per_file_csv, "w", newline="") as pf: + writer = csv.DictWriter(pf, fieldnames=["file", "duration", "n_events"]) + writer.writeheader() + for row in per_file_rows: + writer.writerow(row) + + return summary + + +def main(): + parser = argparse.ArgumentParser() + group = parser.add_mutually_exclusive_group(required=True) + group.add_argument("--file-list", dest="file_list", help="Path to a newline-separated local file list") + group.add_argument("--defname", dest="defname", help="SAM definition name (defname)") + parser.add_argument("--reduced-branches", dest="reduced_branches", help="Comma-separated reduced branch list (e.g. Edep,track)", default=None) + parser.add_argument("--out", dest="out", help="Summary CSV output path", default="benchmark_results.csv") + parser.add_argument("--out-dir", dest="out_dir", help="Directory to store per-run outputs", default="benchmark_out") + parser.add_argument("--max-workers-list", dest="mw_list", help="Comma-separated max_workers values; default auto", default=None) + parser.add_argument("--tree-path", dest="tree_path", default="EventNtuple/ntuple") + parser.add_argument("--use-remote", dest="use_remote", action="store_true") + parser.add_argument("--location", dest="location", default="tape") + parser.add_argument("--location-list", dest="location_list", help="Comma-separated list of locations to sweep (overrides --location)", default=None) + parser.add_argument("--schema", dest="schema", default="root") + parser.add_argument("--verbosity", dest="verbosity", type=int, default=1) + parser.add_argument("--worker-verbosity", dest="worker_verbosity", type=int, default=0) + args = parser.parse_args() + + # Prepare file source args + if args.file_list: + file_source_args = {"file_list_path": args.file_list, "mode": "file_list"} + # count files + with open(args.file_list, "r") as f: + file_lines = [l.strip() for l in f if l.strip()] + n_files = len(file_lines) + else: + file_source_args = {"defname": args.defname, "mode": "defname"} + # n_files unknown until query; use a conservative guess for sweep + n_files = 100 + + cpu_cnt = os.cpu_count() or 1 + # default sweep + if args.mw_list: + mw_values = [int(x) for x in args.mw_list.split(",")] + else: + mw_values = [1, 2, 4, 8, 16, 32, cpu_cnt, min(2 * cpu_cnt, max(1, n_files))] + # unique and sorted + mw_values = sorted(set(mw_values)) + + # Always use a reduced grouped `branches` dict. If the user supplies + # `--reduced-branches` use those fields; otherwise default to the + # `trk` group from dask-tests/run_dask_example.py. + if args.reduced_branches: + lst = [b.strip() for b in args.reduced_branches.split(",") if b.strip()] + reduced_branches = {"trk": lst} if lst else None + else: + reduced_branches = { + "trk": [ + "trk.nactive", + "trk.pdg", + "trk.status", + "trkqual.valid", + "trkqual.result", + "trkpid.valid", + "trkpid.result", + ] + } + + # Prepare location sweep + if args.location_list: + locations = [l.strip() for l in args.location_list.split(",") if l.strip()] + else: + locations = [args.location] + + # Sweep combinations - only the reduced branch set is used + branch_options = [reduced_branches] + + combos = [] + for location in locations: + for use_processes in (False, True): + for branches in branch_options: + for mw in mw_values: + combos.append((mw, use_processes, branches, location)) + + # Run combos and collect summaries + summaries = [] + for mw, use_processes, branches, location in combos: + # If the user specifies location 'local' treat it as local files (no remote mdh lookup) + per_run_use_remote = False if location == "local" else args.use_remote + print(f"Running: max_workers={mw}, use_processes={use_processes}, branches={'reduced' if branches else 'full'}, location={location}, use_remote={per_run_use_remote}") + try: + s = run_single_config( + file_source_args=file_source_args, + branches=branches, + max_workers=mw, + use_processes=use_processes, + out_dir=args.out_dir, + tree_path=args.tree_path, + use_remote=per_run_use_remote, + location=location, + schema=args.schema, + verbosity=args.verbosity, + worker_verbosity=args.worker_verbosity, + ) + if s: + summaries.append(s) + except Exception as e: + print(f"Error running config mw={mw} proc={use_processes} branches={'reduced' if branches else 'full'}: {e}") + + # Write summary CSV + if summaries: + keys = list(summaries[0].keys()) + with open(args.out, "w", newline="") as outcsv: + writer = csv.DictWriter(outcsv, fieldnames=keys) + writer.writeheader() + for row in summaries: + writer.writerow(row) + + print(f"Done. Wrote summary to {args.out} (per-file outputs in {args.out_dir})") + + +if __name__ == "__main__": + main() diff --git a/scripts/plot_bench.py b/scripts/plot_bench.py new file mode 100644 index 0000000..387a746 --- /dev/null +++ b/scripts/plot_bench.py @@ -0,0 +1,356 @@ +#!/usr/bin/env python3 +""" +Plotting utilities for benchmark results produced by +`scripts/benchmark_pyprocess.py`. + +Generates: +- throughput (files/sec) vs `max_workers` (hue=`use_processes`) +- latency percentiles (median, p90, p99) vs `max_workers` +- per-file duration histogram for a chosen per-file CSV + +Requires: pandas, matplotlib, seaborn + +Usage: + python3 scripts/plot_bench.py --summary bench_summary.csv --out-dir bench_out +""" + +import argparse +import glob +import os +import pandas as pd +import matplotlib.pyplot as plt + + +def ensure_dir(d): + os.makedirs(d, exist_ok=True) + + +def plot_throughput(df, out_path): + plt.figure(figsize=(7, 4)) + # Plot lines per `use_processes` value if present, otherwise single line + if "use_processes" in df.columns: + for val in sorted(df["use_processes"].unique()): + sub = df[df["use_processes"] == val].sort_values("max_workers") + plt.plot(sub["max_workers"], sub["files_per_sec"], marker="o", label=str(val)) + plt.legend(title="use_processes") + else: + df_sorted = df.sort_values("max_workers") + plt.plot(df_sorted["max_workers"], df_sorted["files_per_sec"], marker="o") + plt.xlabel("max_workers") + plt.ylabel("files / s") + plt.title("Throughput vs max_workers") + plt.grid(True, alpha=0.3) + plt.tight_layout() + plt.savefig(out_path) + plt.close() + + +def plot_latency_percentiles(df, out_path): + plt.figure(figsize=(7, 4)) + df_sorted = df.sort_values("max_workers") + for label in ["median_duration", "p90_duration", "p99_duration"]: + if label in df_sorted.columns: + plt.plot(df_sorted["max_workers"], df_sorted[label], marker="o", label=label) + plt.xlabel("max_workers") + plt.ylabel("duration (s)") + plt.title("Latency percentiles vs max_workers") + plt.legend() + plt.grid(True, alpha=0.3) + plt.tight_layout() + plt.savefig(out_path) + plt.close() + + +def plot_perfile_hist(perfile_csv, out_path): + df = pd.read_csv(perfile_csv) + if "duration" not in df.columns: + print(f"Per-file CSV {perfile_csv} has no 'duration' column") + return + plt.figure(figsize=(7, 4)) + data = df["duration"].dropna() + plt.hist(data, bins=60, density=False, alpha=0.7) + # simple KDE-like smoothing using a line from a gaussian filter if available + try: + from scipy.ndimage import gaussian_filter1d + import numpy as np + counts, bins = np.histogram(data, bins=60) + centers = 0.5 * (bins[1:] + bins[:-1]) + smooth = gaussian_filter1d(counts.astype(float), sigma=1.0) + # scale smooth to match histogram scale + plt.plot(centers, smooth, color="C1") + except Exception: + # scipy not available; skip smoothing + pass + plt.xlabel("per-file duration (s)") + plt.title(f"Per-file duration distribution ({os.path.basename(perfile_csv)})") + plt.tight_layout() + plt.savefig(out_path) + plt.close() + + +def plot_heatmap(df, value_col, out_path, index_col="max_workers", column_col="use_processes", aggfunc="mean"): + # Pivot and plot heatmap (matplotlib imshow) + if index_col not in df.columns or column_col not in df.columns: + print(f"Cannot create heatmap: missing {index_col} or {column_col} in summary") + return + pivot = df.pivot_table(index=index_col, columns=column_col, values=value_col, aggfunc=aggfunc) + if pivot.empty: + print("Pivot table empty for heatmap") + return + plt.figure(figsize=(8, 5)) + im = plt.imshow(pivot.values, aspect="auto", origin="lower", cmap="viridis") + plt.colorbar(im, label=value_col) + plt.yticks(range(len(pivot.index)), [str(x) for x in pivot.index]) + plt.xticks(range(len(pivot.columns)), [str(x) for x in pivot.columns]) + plt.xlabel(column_col) + plt.ylabel(index_col) + plt.title(f"{value_col} heatmap ({index_col} x {column_col})") + plt.tight_layout() + plt.savefig(out_path) + plt.close() + + +def plot_speedup_and_efficiency(df, out_path_speedup, out_path_efficiency, cores_col="max_workers"): + # Compute baseline as avg total_time where max_workers == 1 if present, else min + if "total_time" not in df.columns: + print("No total_time column to compute speedup") + return + df2 = df.copy() + df2[cores_col] = pd.to_numeric(df2[cores_col], errors="coerce") + # baseline per source_mode & location if present + groups = [] + if "source_mode" in df2.columns and "location" in df2.columns: + group_cols = ["source_mode", "location"] + elif "source_mode" in df2.columns: + group_cols = ["source_mode"] + else: + group_cols = [] + + if group_cols: + for name, g in df2.groupby(group_cols): + try: + base = g[g[cores_col] == 1]["total_time"].mean() + if pd.isna(base): + base = g["total_time"].min() + except Exception: + base = g["total_time"].min() + g = g.copy() + g["speedup"] = base / g["total_time"] + g["total_cores"] = g[cores_col] + groups.append(g) + df_speed = pd.concat(groups, ignore_index=True) + else: + try: + base = df2[df2[cores_col] == 1]["total_time"].mean() + if pd.isna(base): + base = df2["total_time"].min() + except Exception: + base = df2["total_time"].min() + df_speed = df2.copy() + df_speed["speedup"] = base / df_speed["total_time"] + df_speed["total_cores"] = df_speed[cores_col] + + # Speedup plot + plt.figure(figsize=(7, 4)) + for key, grp in df_speed.groupby("use_processes") if "use_processes" in df_speed.columns else [(None, df_speed)]: + plt.plot(grp[cores_col], grp["speedup"], marker="o", label=str(key)) + plt.xlabel("total cores") + plt.ylabel("speedup") + plt.title("Speedup vs cores") + if "use_processes" in df_speed.columns: + plt.legend(title="use_processes") + plt.grid(True, alpha=0.3) + plt.tight_layout() + plt.savefig(out_path_speedup) + plt.close() + + # Efficiency = speedup / total_cores + df_speed["efficiency"] = df_speed["speedup"] / df_speed["total_cores"].replace(0, pd.NA) + plt.figure(figsize=(7, 4)) + for key, grp in df_speed.groupby("use_processes") if "use_processes" in df_speed.columns else [(None, df_speed)]: + plt.plot(grp[cores_col], grp["efficiency"], marker="o", label=str(key)) + plt.xlabel("total cores") + plt.ylabel("efficiency (speedup / cores)") + plt.title("Efficiency vs cores") + if "use_processes" in df_speed.columns: + plt.legend(title="use_processes") + plt.grid(True, alpha=0.3) + plt.tight_layout() + plt.savefig(out_path_efficiency) + plt.close() + + +def plot_failure_rate(df, out_path): + if "failed" not in df.columns or "files_processed" not in df.columns: + print("No failure/files_processed columns to plot failure rate") + return + df2 = df.copy() + df2["failed_pct"] = df2["failed"] / (df2["failed"] + df2["files_processed"]).replace(0, pd.NA) + x = range(len(df2)) + labels = [f"mw={int(r['max_workers'])}" if not pd.isna(r.get('max_workers')) else str(i) for i, r in df2.iterrows()] + plt.figure(figsize=(8, 4)) + plt.bar(x, df2["failed"], label="failed") + plt.bar(x, df2["files_processed"], bottom=df2["failed"], label="successful") + plt.xticks(x, labels, rotation=45, ha="right") + plt.ylabel("files") + plt.title("Failed vs successful files per config") + plt.legend() + plt.tight_layout() + plt.savefig(out_path) + plt.close() + + +def plot_box_and_cdfs_from_perfiles(out_dir, out_prefix): + # Collect per-file CSVs and group them by config parsed from filename + pattern = os.path.join(out_dir, "*_perfile.csv") + files = glob.glob(pattern) + if not files: + print("No per-file CSVs found for box/CDF plots") + return + groups = {} + for fpath in files: + # filename like mw=4_proc=False_branches=reduced_file_list_perfile.csv + name = os.path.basename(fpath) + parts = name.split("_") + # try to extract mw and proc + mw = next((p.split("=")[1] for p in parts if p.startswith("mw=")), None) + proc = next((p.split("=")[1] for p in parts if p.startswith("proc=")), None) + key = f"mw={mw}_proc={proc}" + try: + df = pd.read_csv(fpath) + durations = df["duration"].dropna().values + except Exception: + continue + groups[key] = durations + + # Boxplot + keys = sorted(groups.keys()) + data = [groups[k] for k in keys] + plt.figure(figsize=(max(6, len(keys)*0.6), 5)) + plt.boxplot(data, labels=keys, showfliers=False) + plt.xticks(rotation=45, ha="right") + plt.ylabel("per-file duration (s)") + plt.title("Per-config per-file duration boxplot") + plt.tight_layout() + out_box = os.path.join(out_dir, f"{out_prefix}_boxplot.png") + plt.savefig(out_box) + plt.close() + + # CDFs + import numpy as _np + plt.figure(figsize=(7, 5)) + for k in keys: + arr = _np.sort(groups[k]) + cdf = _np.arange(1, len(arr)+1) / len(arr) + plt.plot(arr, cdf, label=k) + plt.xlabel("duration (s)") + plt.ylabel("CDF") + plt.title("Per-config CDF of per-file durations") + plt.legend(fontsize="small") + plt.tight_layout() + out_cdf = os.path.join(out_dir, f"{out_prefix}_cdfs.png") + plt.savefig(out_cdf) + plt.close() + + +def plot_perfile_timeline(perfile_csv, out_path): + if not os.path.exists(perfile_csv): + print(f"Per-file CSV not found: {perfile_csv}") + return + df = pd.read_csv(perfile_csv) + if "duration" not in df.columns: + print(f"Per-file CSV {perfile_csv} has no 'duration' column") + return + durations = df["duration"].fillna(0).values + plt.figure(figsize=(10, 4)) + plt.plot(range(len(durations)), durations, marker=".") + plt.xlabel("file index") + plt.ylabel("duration (s)") + plt.title(f"Per-file durations over file index ({os.path.basename(perfile_csv)})") + plt.tight_layout() + plt.savefig(out_path) + plt.close() + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("--summary", type=str, default="benchmark_results.csv", help="Summary CSV (from benchmark script)") + parser.add_argument("--out-dir", type=str, default="benchmark_out", help="Directory containing per-file CSVs and where plots will be written") + parser.add_argument("--plots-dir", type=str, default=None, help="Directory to write plots (defaults to /plots)") + parser.add_argument("--perfile", type=str, default=None, help="Optional explicit per-file CSV to plot") + args = parser.parse_args() + + if not os.path.exists(args.summary): + print(f"Summary CSV not found: {args.summary}") + return + + df = pd.read_csv(args.summary) + # Normalize types + for col in ["max_workers", "files_per_sec", "mean_duration"]: + if col in df.columns: + df[col] = pd.to_numeric(df[col], errors="coerce") + + plots_dir = args.plots_dir or os.path.join(args.out_dir, "plots") + ensure_dir(plots_dir) + + # Throughput plot + out1 = os.path.join(plots_dir, "throughput_max_workers.png") + plot_throughput(df, out1) + print(f"Wrote {out1}") + + # Latency percentiles + out2 = os.path.join(plots_dir, "latency_percentiles.png") + plot_latency_percentiles(df, out2) + print(f"Wrote {out2}") + + # Per-file histogram: select provided or pick a per-file CSV from out-dir + perfile_csv = args.perfile + if perfile_csv is None: + candidates = glob.glob(os.path.join(args.out_dir, "*_perfile.csv")) + candidates.sort(key=os.path.getmtime, reverse=True) + if candidates: + perfile_csv = candidates[0] + + if perfile_csv and os.path.exists(perfile_csv): + out3 = os.path.join(plots_dir, "perfile_duration_hist.png") + plot_perfile_hist(perfile_csv, out3) + print(f"Wrote {out3}") + else: + print("No per-file CSV found to plot per-file histogram") + + # Additional plots + # Heatmaps for files_per_sec and mean_duration (if available) + if "files_per_sec" in df.columns: + out_h1 = os.path.join(plots_dir, "heatmap_files_per_sec.png") + plot_heatmap(df, "files_per_sec", out_h1) + print(f"Wrote {out_h1}") + if "mean_duration" in df.columns: + out_h2 = os.path.join(plots_dir, "heatmap_mean_duration.png") + plot_heatmap(df, "mean_duration", out_h2) + print(f"Wrote {out_h2}") + + # Speedup and efficiency + out_speed = os.path.join(plots_dir, "speedup_vs_cores.png") + out_eff = os.path.join(plots_dir, "efficiency_vs_cores.png") + plot_speedup_and_efficiency(df, out_speed, out_eff) + print(f"Wrote {out_speed}") + print(f"Wrote {out_eff}") + + # Failure rate + out_fail = os.path.join(plots_dir, "failure_rate.png") + plot_failure_rate(df, out_fail) + print(f"Wrote {out_fail}") + + # Boxplot and CDFs from per-file CSVs (if any) + plot_box_and_cdfs_from_perfiles(args.out_dir, "perfile") + print(f"Wrote boxplot/CDFs to {args.out_dir}") + + # Per-file timeline for the picked perfile CSV + if perfile_csv and os.path.exists(perfile_csv): + out_tl = os.path.join(plots_dir, "perfile_timeline.png") + plot_perfile_timeline(perfile_csv, out_tl) + print(f"Wrote {out_tl}") + + +if __name__ == "__main__": + main() From 58d94cc9785025ba86555252c95ef0faf9389792 Mon Sep 17 00:00:00 2001 From: sophieMu2e Date: Fri, 27 Feb 2026 09:43:13 -0600 Subject: [PATCH 04/14] dask works --- bench_out/dask/benchmark_dask_results.csv | 17 + bench_out/dask/plots/efficiency_vs_cores.png | Bin 0 -> 54127 bytes .../heatmap_throughput_processes_false.png | Bin 0 -> 20234 bytes .../heatmap_throughput_processes_true.png | Bin 0 -> 17964 bytes .../heatmap_total_time_processes_false.png | Bin 0 -> 19821 bytes .../heatmap_total_time_processes_true.png | Bin 0 -> 20722 bytes bench_out/dask/plots/speedup_vs_cores.png | Bin 0 -> 44957 bytes .../dask/plots/throughput_vs_n_workers.png | Bin 0 -> 58335 bytes .../dask/plots/throughput_vs_total_cores.png | Bin 0 -> 40876 bytes .../dask/plots/total_time_comparison.png | Bin 0 -> 26295 bytes bench_out/pyprocess/failure_rate.png | Bin 0 -> 17980 bytes bench_out/pyprocess/heatmap_files_per_sec.png | Bin 0 -> 22839 bytes bench_out/pyprocess/heatmap_mean_duration.png | Bin 0 -> 22924 bytes bench_out/pyprocess/latency_percentiles.png | Bin 0 -> 34902 bytes ...lse_branches=reduced_file_list_perfile.csv | 51 ++ ...rue_branches=reduced_file_list_perfile.csv | 51 ++ ...lse_branches=reduced_file_list_perfile.csv | 51 ++ ...rue_branches=reduced_file_list_perfile.csv | 51 ++ ...=False_branches=full_file_list_perfile.csv | 51 ++ ...lse_branches=reduced_file_list_perfile.csv | 51 ++ ...rue_branches=reduced_file_list_perfile.csv | 51 ++ ...=False_branches=full_file_list_perfile.csv | 51 ++ ...lse_branches=reduced_file_list_perfile.csv | 51 ++ ...rue_branches=reduced_file_list_perfile.csv | 51 ++ ...lse_branches=reduced_file_list_perfile.csv | 51 ++ ...rue_branches=reduced_file_list_perfile.csv | 51 ++ ...lse_branches=reduced_file_list_perfile.csv | 51 ++ ...rue_branches=reduced_file_list_perfile.csv | 51 ++ ...lse_branches=reduced_file_list_perfile.csv | 51 ++ ...rue_branches=reduced_file_list_perfile.csv | 51 ++ ...lse_branches=reduced_file_list_perfile.csv | 51 ++ ...rue_branches=reduced_file_list_perfile.csv | 51 ++ bench_out/pyprocess/perfile_boxplot.png | Bin 0 -> 32048 bytes bench_out/pyprocess/perfile_cdfs.png | Bin 0 -> 71189 bytes bench_out/pyprocess/perfile_duration_hist.png | Bin 0 -> 31798 bytes bench_out/pyprocess/perfile_timeline.png | Bin 0 -> 35082 bytes .../pyprocess/throughput_max_workers.png | Bin 0 -> 32060 bytes pyutils/pynorm.py | 565 ++++++++++++++++++ scripts/benchmark_dask.py | 62 +- scripts/benchmark_pyprocess.py | 6 +- scripts/plot_bench.py | 4 +- scripts/plot_dask_bench.py | 293 +++++++++ 42 files changed, 1846 insertions(+), 19 deletions(-) create mode 100644 bench_out/dask/benchmark_dask_results.csv create mode 100644 bench_out/dask/plots/efficiency_vs_cores.png create mode 100644 bench_out/dask/plots/heatmap_throughput_processes_false.png create mode 100644 bench_out/dask/plots/heatmap_throughput_processes_true.png create mode 100644 bench_out/dask/plots/heatmap_total_time_processes_false.png create mode 100644 bench_out/dask/plots/heatmap_total_time_processes_true.png create mode 100644 bench_out/dask/plots/speedup_vs_cores.png create mode 100644 bench_out/dask/plots/throughput_vs_n_workers.png create mode 100644 bench_out/dask/plots/throughput_vs_total_cores.png create mode 100644 bench_out/dask/plots/total_time_comparison.png create mode 100644 bench_out/pyprocess/failure_rate.png create mode 100644 bench_out/pyprocess/heatmap_files_per_sec.png create mode 100644 bench_out/pyprocess/heatmap_mean_duration.png create mode 100644 bench_out/pyprocess/latency_percentiles.png create mode 100644 bench_out/pyprocess/mw=126_proc=False_branches=reduced_file_list_perfile.csv create mode 100644 bench_out/pyprocess/mw=126_proc=True_branches=reduced_file_list_perfile.csv create mode 100644 bench_out/pyprocess/mw=16_proc=False_branches=reduced_file_list_perfile.csv create mode 100644 bench_out/pyprocess/mw=16_proc=True_branches=reduced_file_list_perfile.csv create mode 100644 bench_out/pyprocess/mw=1_proc=False_branches=full_file_list_perfile.csv create mode 100644 bench_out/pyprocess/mw=1_proc=False_branches=reduced_file_list_perfile.csv create mode 100644 bench_out/pyprocess/mw=1_proc=True_branches=reduced_file_list_perfile.csv create mode 100644 bench_out/pyprocess/mw=2_proc=False_branches=full_file_list_perfile.csv create mode 100644 bench_out/pyprocess/mw=2_proc=False_branches=reduced_file_list_perfile.csv create mode 100644 bench_out/pyprocess/mw=2_proc=True_branches=reduced_file_list_perfile.csv create mode 100644 bench_out/pyprocess/mw=32_proc=False_branches=reduced_file_list_perfile.csv create mode 100644 bench_out/pyprocess/mw=32_proc=True_branches=reduced_file_list_perfile.csv create mode 100644 bench_out/pyprocess/mw=4_proc=False_branches=reduced_file_list_perfile.csv create mode 100644 bench_out/pyprocess/mw=4_proc=True_branches=reduced_file_list_perfile.csv create mode 100644 bench_out/pyprocess/mw=50_proc=False_branches=reduced_file_list_perfile.csv create mode 100644 bench_out/pyprocess/mw=50_proc=True_branches=reduced_file_list_perfile.csv create mode 100644 bench_out/pyprocess/mw=8_proc=False_branches=reduced_file_list_perfile.csv create mode 100644 bench_out/pyprocess/mw=8_proc=True_branches=reduced_file_list_perfile.csv create mode 100644 bench_out/pyprocess/perfile_boxplot.png create mode 100644 bench_out/pyprocess/perfile_cdfs.png create mode 100644 bench_out/pyprocess/perfile_duration_hist.png create mode 100644 bench_out/pyprocess/perfile_timeline.png create mode 100644 bench_out/pyprocess/throughput_max_workers.png create mode 100644 pyutils/pynorm.py create mode 100644 scripts/plot_dask_bench.py diff --git a/bench_out/dask/benchmark_dask_results.csv b/bench_out/dask/benchmark_dask_results.csv new file mode 100644 index 0000000..7baf607 --- /dev/null +++ b/bench_out/dask/benchmark_dask_results.csv @@ -0,0 +1,17 @@ +n_workers,threads_per_worker,processes,location,use_remote,branches_mode,files_processed,total_time,files_per_sec,total_events +1,1,False,disk,True,reduced,50,270.03346010809764,0.18516223870917478,176615 +1,2,False,disk,True,reduced,50,79.14171142992564,0.6317780990150996,176615 +2,1,False,disk,True,reduced,50,79.99395072995685,0.6250472634960828,176615 +2,2,False,disk,True,reduced,50,49.550081208115444,1.009080081826604,176615 +4,1,False,disk,True,reduced,50,48.75325505901128,1.025572547709474,176615 +4,2,False,disk,True,reduced,50,33.14685283997096,1.5084388325309197,176615 +8,1,False,disk,True,reduced,50,33.75744896312244,1.481154575827734,176615 +8,2,False,disk,True,reduced,50,26.864604625152424,1.8611850312952936,176615 +1,1,True,disk,True,reduced,50,165.37921098805964,0.30233546103693765,176615 +1,2,True,disk,True,reduced,50,81.19289831118658,0.6158174057091285,176615 +2,1,True,disk,True,reduced,50,76.2006694409065,0.656162214411711,176615 +2,2,True,disk,True,reduced,50,43.5278307790868,1.1486903690138126,176615 +4,1,True,disk,True,reduced,50,42.204172055004165,1.184716997524217,176615 +4,2,True,disk,True,reduced,50,25.04718433180824,1.9962323643900908,176615 +8,1,True,disk,True,reduced,50,25.170849769143388,1.9864247913192958,176615 +8,2,True,disk,True,reduced,50,19.178915356984362,2.6070295983548184,176615 diff --git a/bench_out/dask/plots/efficiency_vs_cores.png b/bench_out/dask/plots/efficiency_vs_cores.png new file mode 100644 index 0000000000000000000000000000000000000000..27303550251d94f23eed43183b1e21b0da4c4a0c GIT binary patch literal 54127 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 literal 0 HcmV?d00001 diff --git a/bench_out/dask/plots/heatmap_throughput_processes_false.png b/bench_out/dask/plots/heatmap_throughput_processes_false.png new file mode 100644 index 0000000000000000000000000000000000000000..579d85776c3b1ff297a3670678af566df53dffbe GIT binary patch literal 20234 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 literal 0 HcmV?d00001 diff --git a/bench_out/dask/plots/heatmap_throughput_processes_true.png b/bench_out/dask/plots/heatmap_throughput_processes_true.png new file mode 100644 index 0000000000000000000000000000000000000000..987973c6aab49dca88858699b580eca16878ab99 GIT binary patch literal 17964 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 literal 0 HcmV?d00001 diff --git a/bench_out/dask/plots/heatmap_total_time_processes_false.png b/bench_out/dask/plots/heatmap_total_time_processes_false.png new file mode 100644 index 0000000000000000000000000000000000000000..5f8d8b186b90f1704219c44b6aa1fa6e3dbc731a GIT binary patch literal 19821 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 LMafKYJ@5YmCc`MM literal 0 HcmV?d00001 diff --git a/bench_out/dask/plots/heatmap_total_time_processes_true.png b/bench_out/dask/plots/heatmap_total_time_processes_true.png new file mode 100644 index 0000000000000000000000000000000000000000..67fa4389f90272b1e29d4ae3253043fb65425cdd GIT binary patch literal 20722 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 literal 0 HcmV?d00001 diff --git a/bench_out/dask/plots/speedup_vs_cores.png b/bench_out/dask/plots/speedup_vs_cores.png new file mode 100644 index 0000000000000000000000000000000000000000..0c50695b24d7bde09358e24a61c159a8ebe14a58 GIT binary patch literal 44957 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 *x;ZLw)__@=$Dwl-`I9ytJ5vZ8HLYB1XYp=+&@X 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 literal 0 HcmV?d00001 diff --git a/bench_out/dask/plots/throughput_vs_total_cores.png b/bench_out/dask/plots/throughput_vs_total_cores.png new file mode 100644 index 0000000000000000000000000000000000000000..0b525fb159ba3b9d43edec277f9040009b42f5a1 GIT binary patch literal 40876 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 WnrG)Za!fUY&#;g^+wTS?Q2z!*N2W#q literal 0 HcmV?d00001 diff --git a/bench_out/dask/plots/total_time_comparison.png b/bench_out/dask/plots/total_time_comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..6a4c8157174da7720599ce5698c2b6556a7c451c GIT binary patch literal 26295 zcmeFZbzGI}wl<8qL`4t-q{UbYN=ZqBiWndvN|%U$biX-||9qdn-`=p<@XY(UV~lHD*EQ|{6{QO_RLoQq6cjX< zE}m1RpxBC`pxCUrof3Z1P7xdeU&I~dG##(nm^iu^+8a|S8amoq+BjO8-8krMZ0}%Z zV=c(bf09>}``|4{M_UJRK0d2ozrkx`Z_4*U$Eg9HvcvYGmIDO^ts(l)rbL+pGYSfm zBbUydxrT|H=-Cz-+FBw*%5qdWy*rNcU}pKb2V1$WoT=bF@%t5{0G=?;;k_22FEw91 zIyb}oD&T0FMIg_O2YZ6rRlM%g2p>Lim~;Dmp^=jtc(Em{gNxa_3|w8-oF`U)a8h!v zt}d&0CAwn<*D-hPi+zDEjD>>Ypu;FVk^CKnrqpJA^qu#Ez0;e~H#bAQ8PL~*uYW5> zUn!W5_H9L9KXPv3Ltjsy-+|eLz7ddrzY~3Zc;)}<5vK#*CMIge)!y54q;w%OEq~zt z^v5G1DKj(F%tE)~h;`2eIVQ4-jS44nyPAyLXRA44uaysu;L{BflP8O&N;6v3b$sI$ zU&O~O)Qj|9PFG%&-Z@!HoV1}Z zikEa~j^yiji^f$aRw-F5caOFv=hZEy+^b^eOJQSopFX3RZ)+$z{LJWV$N{O@t{1`< z>e<&FC%X&GPT5&~92KRY;G|O!g5~&>ZPr{ik`Qy?ROhYNpAxUUo{pMw=b&ahd9W@< z2HP3)&TFn-q<^u?rjc(M5l0l0vX7S!T`LHI|a4U=lQmOFu$!`ncd-28x45!}Tv17P}o9r$1j{kLw%XCbN8o%EV|l6J9&0 zUy}~k%-C7!v27RYv)qc)$pY6N@RlwQ&`s7yOG!wsP2-O1x~+~Rglm}?8V@w>x1kYj7pL-scTl3e}v z+H53nd70nxK`qnTe1eQ(thH|2Valieto9d|=VCS@gEKwXS67I;*u;g{6k?=3)R&jD zOzPzgEvRK0Wj59_U_=SxRkoO>H@kYTP+^H`N@|SxHP~v8s z2xbXUWlW}#kHWs*3(;GN;8RZV(oGj3xo2wJ&>I}Aj}#M33BVh8Nv*+Q+JRlEw>cZm ztEcMmdfA~;McO*ha1k~iy(h7&H~u{_-D};VlcRK3LZrQXr^w=$yZ{-uabHGe1D75r z!}SF`Eqv9WO2jS?1kPuv(Gy4gW!4PySB76SH!>N#fc>2?n7Ycmh2rMDroxAO- zhT61Dqt+H=HdY!7miZ@1#HsY$UNsH9r@1mKU!JU3&3Mj`dQCpRk}L4t$uPV~aGTPF z*+}Zy&ptO0$frNDo}d&}Shj9mve4$(m2WpV+vPg{?NKfqIExi41CIr@G?>Q%2vx(< z#PO`PMUh^2!3nn>C;U(z94*g+AQ6J7h*9MO^TyV61FY_oV~Y08@rpVlGnG|=je@ZL z=ECjvwLA_lta7zHyC8%;S@c-$_n+$;$P~Wy>7WY)t(18&-jewy$KHONf4Xf_colRhsLAriPH~Ad$Z@>vmUVJu_^LBM+qsOIJ5s%i=oY>>gC}rl>TB@~L z%H?Jy;W8PiU&U`!nUXCX$iSy0*;QJ}G%TksF9iuQ;r&GC@^td7SH@Cx@|3bp4#wa$8d`z| z?0>tm_GF#2!8NFg$uy$UcIL?IsZFIZjWnFF zlXe5;**pz5gKH07(_1~%#zT7R6=_^3umSt6d6w30hj*td&)|b@IL2Sos|G`alT#EG zC1I^b#`^u)^{w0_!`f*r4mX?&mLWC~FoQutT;dJyf);|Mma<~jxw-X=MN`>|#c$9I zT692cG&W~cCgsgv+BrDK=aKSxv}HHsf$fk71cu=-$}8;UE;(jSy?Wy$gU!Y%ysm@d zas{8~qc9rG^oMO%4>E7e%kXCHR=$^Ws{FKz*-YbNIN?B^9Djb$KqCXLJO7O=_4Z`_ z8}C^vjG0RnQ~K}cs-+t0E*_#xwL9*euRg9Q(i3|2(@+mKDZgPRFRCRaKHZr5eE5F+ zqFxj}Wi~U}ultHSVMt0@5l4*kfXHLG)Z;=MR@2Mg| zN?WzNh2P-Z=?^z{XtZ`lZeb3q%Ue5P=t{Po4I=DM%>KIbGa;q%1$ytg#H+hVulPA7)PqU(U$_@mOwn1UqC zA4QC_>h#K@8XZT}U{6~L|&iJKHjvvH8PFf0;@aG?P zQat3ht8Ws0F%P5N8RI^Csoixf6$b%+H$q3*=gzbW8w^?xp;k(9hTnrqp3K)~Al!2G(+yKY#M{!*#1b zuK{eAby1wmN{E7D`PYD~kipf08B;y2MD61TdiC8V=qVvxwS6cdt&ZV{Q&@JC&y5$Q z*5{jXeIM@P0DhDK>MEA6YR7tQ&_y3`{TADg$C8}dA=InhV#1dOErc9$Qq-^Q%tbgY zhBTkh51Bzp@Rbn{!DFe%vBbDGELOi{>_2w-Sw>A` zUZXVe&CsadQ~%OF9sd2SGU6P~}~x0LuA>7dG)>$tlR z(u4nz5J`b?nEC#etICR9+o&0LH$c3$h0NxIu%K_)%ojs`Aw9jB%z+2hn7zr%x`1w| zd}jej$`r#q#aiIg`bDrSitR4F9#@wcO=HqVQ}CF`_0BUftB+q!*JaN=mTr8g8y3GGOB%yAS>TIYrs%AD zy*AcIau?ck_^<|n`+3UtDN8=`gj_3jEYi8t?CoM^h(w=cdum zO=MAGtQ}_wIiBX=-tWs0&y=4Tqy9VTZpFt(N1E~Zj+KV~Z2JiSy5_T@0Hg`0?Vvc_ zcJ0eRuN@Z&vZYoxvbqf!t ziLv09g9Nq5RP%KT=F6TaOEaZG?#%YH(+wBp-DfxSRD;R|qD~o{Y53>;!2YrD_iz5G zQi;52wKa@eYp*om+)u@~=Txp-$#gcLN5B1&8>$}1vMxX~KCTPq((D@Vi#GFjPqb$a zMwFs5fr6sfyv%2ZA*{qM;iG+ecSIfX-evG;XD8YjlFOXZdMHVn&o$RbzKj2@m`kOA zTb9~oE4em0eJFKOAXDibDi{A%8HA!H1x4Z$G`9WRnkwVCmvzFH?I&9x-(L^mBiB_g z8v;H|0(wyWxU(Xc;5z2(JkgoD7|^1Ao?Km>j(S`>RQBf5lctpFU^WRq*M$^S`59Nc zhDb5Pn$Y7TuEfO&i*>Q@wOY$@*dOw-+Wx!P&O%DQ?;#qB@JD<)|Cb(H9F2uX0p*4} z8q(>gcbJ)h`J5}S&sRv(T|BW7YuI1r8=L#RvP*nIl}R`rs?A459{;aGFEl4w%FU0o zPW0#gu@*IFrwA5HD}FROMU5JhC&IF*%V@opanofx`Fsj5e=iT2vaf&G%<)*KCN+=1 zya=0lZNXmjbM#SWG-)r-h3)tTwOwHf>=rVNBf~)6aD_aZch$%GXKVRrtJuBVZ*{yg z76nw+ya*Woq-9R4daT`GrCAIl*22!gh8P){NQf4(MpeOPF%Y06y8$?@boBxpw(YyK z&Cdz1Cz5T|b&Az(JhQ)+4_ntuLKqrGBrastDa3XafKnOYvnSRp{5Q^_U{)qRmhvQ6 ztl=4(jHf%P6z4~?v!~E$r(%TAj^339m$IYbx_ikO#N*S;GqG0_lt%K!9l!1NT&Xok zyF!Bp;QA>|uV^jKX{@au21zBeKBA1PWU*n55Vi>O41)t_8W-XKxHUn%VlY^E1q!Z6 zEKliyyW41$WRz2?Pjy*7F~7$By|U)q19;Kx7JL#0PDL5K4TB#w(_ZV+mEpAs6ys&_ zX?o<~{Ql0CW;~8oMw0dRmq&*4-##Bd8PsJ{G?BaJ;klR<;|miaB1P~b&BaUu<`(lU z_zYVMm7rz0UDhm+0CJ|w_bL1El`bEaG8vlSXO)^M-`DJ6^s+0@rkBpX^5r7b%nD0h z#ECo{BpW&6q31-e5@!>A2S+(h-}RL?v8cj&{<@tl5&JFR*(!J`;B` z#{l;LVB50C3-Zc{o%C|w-RYhwPZ4T%Y03Ixy-qm>z0f}z7%SByMD1=wOt9eUJF-j@ zZ08}8?Es9D=G<%693RJ2!apB$XsYQ3r|bJo+kAHN<{!jPq!mrdS1ql4jq$fgD>&v` z#P4X;p3yI`6q0j~si(#gcK-3*Avfv=#`LhB>*kFNvftv^96z1uck3nUFXPxr57RxU z3(_H4PDADDyH82QLnT8~(`A@RRR)Mv@m%kJsd__FV zov*W-+c_I3JRzIT3c4mk85vRrvNdNc?)=N=rU)f-cP9K;te^1;^WXgV z(EN|05OfESm3&cbjkQZUta@PuPNlL8Uux;dRmXITUP5hyH(V`Yh3wQ(N zvH41G(FXhAv2i6}L)I@}i9DpY@b&%&o6NR;VPF;DpZqyvQSAj+Nx-Sb+mi0bjsX-@ zvFd`nef1Ob)IL)}rHVirZBg-2=GbAw@8G;SgLAB>1o!YcU z7DXL|^#@d`?JDhb;}1d|6T-Hon=w1>BDFKE*q4WnVuKF^%Mf%p+lT4Rr<@e~8kyDP z>I963`wKwT()BRRFXuB4@ZStp5K6h2BA233jL_!D7b||&U_qC`9sM^lieG7cws_$k zz9D#nhwt1~ODT)|-Mio|PTx^{cJk2HgoJ2U^9VU+)4EEgL@xWq4pVV?4nDLdV zj!;99nH`=x)2$i?zCh%}ja{KOF@Q<8C9Ql-Fy1-PnazJaXsn^~^r`6iv4XGB3Km0^ z2L%cHw|vFSW~0De439;GpmGRHOpyWB^LS+Nz+gp&(1AvP@XY}&1Jpg3v+p6 zR-TriEV0X-$uPt<1$3D=L;kqR$QHsuS)Ca@Q*JTy#-w&%2v_tiE66=&B|V~d#d-0F zfsN}jiZYsZhinvoP;`>rz`rIU&5FJtDbQZU!Zf}1cLcsEyu}at+4FxIYl>6Q9uwwr zT^wi1?Q!m+i&vGF5_6z&xX7VJKCFK-%UVAUz&`H<esfH$DXKsi3 z$BX0&fSR0L>w2yX^)C;G(DLZyQgg((+jo-s?$Y|D=60Sybn=A5LaT;`TldP`SAWFzIgYpU zPh_FeM8~?|s234(Hp4E->Gv6vg=2oXR$YFOEl;_x427?Bv19t~WWa~|Ba~+Z9J9vq z@C%zJR4Z(?`!hzd28KqnusW=7~^DWQB#jKB;_CwB5 z3|WfVSmW3l&0iOEOfiBEac_Uro-77$uDu}1`k{0t;`b0_Y zcEt8fBOFwUkN@~0pAhA&E#B}{Pa3LXwWKkBc2CAh>;{R>4-0FS>=?5wcmQ&>;p~^{ zekhQXa|oWq2^^xQV3GFA|J*a@%C&O&=N}vzLA5-5=GfCLr$Oo_hXyeY>;{ypQJbq6 zN6+h6X39}rHQLQ;y6Oq_{_%EJX?IM-ZI%kHl&9AD{eE=X`gRrcD^_;#7Lvi3UIai6 ziue^m#8JxA@XO%;@<33R7LZHENc@XxG%@LjmS^ zWRRfcpk2k$eFK*XqRqLgx;J7+8w(}b#2qzqA7Gea9+2sT_vb9==B1ehWkhMFn2Olj-$BwV5=*ZrX|{gVx*%o)WhuCBbK} z^SRF!xA-+gN#HrVQzc1^wpGT*lOiBACn>(&P1e3npD)j`4%a{b()^%qLF(vgHdofo z>c@0R`cAECwcY#gb~5g&>cAek5KOHsy>fFIQSy}3j1R*eeuD^?567^1FSVVSKXI~% zFO`XPDddck`*{Aab>wE6J?S3(YNen8qjyx(@E8fl?hW zAF=^ti-Mq+g?3&dB&k+&wcDF>lX3!t@71bu^Q4LBp7=Sx`Vdfz)2g1ls(9&iyA<%h zKZ8CdwlkNpvNDc&z+<4Ui}70Jr)>KGzoda#YCFA7Oj%~l^DKqHP4;nAg z#Q@9Uf+Z%OwdG0;+&j_~(BStc0ys9voImrs+05@2U6xsjj8J@OYn`%F*fkh{kM>+0$rh5;`SXS%Hj+>$fp#otnBmF)b3pP)$i|@ zX383JsNs6Bf>OEDgJjAP{@o#WoFpIVM)tGf&ym*V8WDWRjSH{k-2Yt~4ZX)0Tq&$S zSY3Ie9Rol)ZT_adU6`3^EnM4^&)V ztY9#p2GHfHt>8jhTRDC`$YP-Kbgo?B{{A0Ho+)i6mr<16_WdRl-L@m;jLb?7R(_p? z5}GRE^)d!nS55Kg4|lgE7&AbghY0y~#dw$JQc-W*pP4>PYc5xXH^1+XX++@cE(A*M zt*4slbmj9}2&M|EGNwS}o(86?A@ zTtdTFJbm_=l$*2o5q-%cWY}<8PsLtA2&IzNv|eE3%#KYV@)MP!y#%0ZP<1~feO_{~ zn{E2 zg?uYZbC=SWef`^oy^*^}=1KpHb`bQO|E8nl|9`~)Q-jX`{&dRo_La=ma3N5@ z7$IVF;8eFQ&bHmq-xrkVYh4`SwZ7!sh7K>cb~YJa_P?+xt)3FZO!wK=3*&ua zW&Qm$3_OIhE%3bK5Z?^jQnXe)R+pyO55Q@+ohn)K1CVv74%{28z$F;Y3{=RiR>NFT zP?&4T@hbWA7(!H56ufOTT~u|z?M+9K-LN&aEmGOnEPGJdmYi02BGPsAtzqQ@Cd0cl zr?vxQZ7PZokaUa}>Gn4$F)(X0RXBjWOR0?#4#Rby-Wk`q<&aWtP!+_&a7;Nm(quv1ygT3S+vnF87{%;wQeiFxG1Kqo)z!3$VWe^avk!Qy zyhZ%VXH;`CK0`8UisSxr;;h#3a6FPrydUSpcNksTR&19$3FZiThz5Cd4d?m0g9aY- zBn>Rg3|4(zG6UPqt=6Pg0pc}+*KLapeH6u`&Pdu2idFXSccL~1g7pSFIVKoet3Ne1 z9n*c^1&YTsRDKDCD4V_&@qH%jvunk__TH60@=cd{-4exu}%GKbI{oMxlJ*g&y2pJUn>-I|Nw2%-~|dt+b+8G>i5 zAGmbo+LPmeLi(#YVlLmYjXNak=R--u?1Qv`iJ~Qfn?Jw-9uS_qcs97jNO14@5v=K8SF)%&I?yfYDAMQjNa# zV!iT_{}H5_ePI4%JbC@}w@_RiV!-^J}tf2Ze&I| z1)9VQlLZ9Gb7tts_9^ul_smy6gf=Oq;XT3oe&6= z^MSv`jdx^)7d0a4kGFWbEPK}!cpyp(mC5gX+KTt{Zd@03ZHTY`RUj`F60F*91oE6k z^#a()%D_{{MgZ4 z!N1RQA=$uJYN=Z=+q%cqDTeF`_C6bP(+VU%WwJa$A&~K1L87Sm53RvTZCeOPkXn=_ zKR_kX+XYIW{&%&!J6WuMW{8sGJZFeCbh<+Thb^ywa=_TD|Upt7%@4tE0I;3)>$>es&v7jvYy2^F3 z;47%sC9-I;hXlcn=qlqS2X@kA;)95F^0VXywjfmZe&0$m2{V90Y5kT7itLLFAWjgRNVAPuU+R^)47=0oHatJM zhXAITX+*mq85Wjxr{UswM?Y}EyTELh_BoThKB4a@b7l@Q7`WSs!j5hRD$Zgl*8cz% zP^*^|L?q#7!mcS>c8MO;Q;&yo4xOOd5-W(`BjwfzQJ~%3=?v7HFY*h3`f_3%>M>#Q z1K&q3bytM8!wzI#k~0=iQGA#B?`d5ud{0dpBA=I5GF8v0?zg9pO$kK>RA?v_ zdjW)}8;V&~+B-2^6${qk(up9uw{#97Q}D{vU`jWebNeCR5=0T61+HELgVp5?H(^Ns z2);)q-hwZWjdPWw#D(i#i13B_%CX66y%m^ap}1}}^6d!hX0^HqVJalQIcOrV z$SGS=JAMRz63sYOglt<4HR0{mg!qR`AoqN<2^^bF3wn}54#c6!+B-0i3Chu_^+jHc z)R>zz=zP4?ZIyp70p9Rw(6{~IAg7!<@IB|LsqnS@0a^!FF$ANW85QzbO@YJ-^ztt3 zYHNBKU~XI+7(ePRwe13RwG%_GK`6{6`lKeZo15_9mvDUE75U?Xe6|pdDulIE;>Zum z$i=!l&^6vnX$*%$q#uVMHnN6PdK{E;T9e(LfoYWkQ7L-fTtwdFU;2yMqs~4t!Zsex);~$Ul}B z>Z>2JH%sk_13R-$ENsS~QM9Fvx%dj?Pt^<-J|suvJamED$4q?+7ANHzAKFZ? zNG~~6Payk6RH;Gfs_Sh7Ix3_3*b5)%MQ~F5GjxNeSa-EEP9c06tPCfGZe^UO-G&Bn znx;kma2F6^oft;)pxPEMwUNKkBz~v9|G62ZAnInSO>b#(@supBRCb{b4+*V6LXhQ|(2+;_%Jp})L&OY7YJ}aOAmmy9xErG1F z3)vA?J)y)q6khwcpaf1L6~u6b-WbQGOZ^(yRke2DjLLw5+XF1p)gJ?VugdJBy&K=F z2X2T}Qg*Y_PN*JtA^P(hP-TVWt$sRyvUned5;f46bp|p(hBY7MZA2W{Cpb>OcC}l8 zA24J-@FU(V52$fQe(j?mK_{*gC&D_Up`qpz6mOjvM1_6Fg-CDk2>9FNPwz`NX<2?8KPBg$1xOIkuG7#job9PM|8uY*n{1^JVmdM_VxXz9QN<8YeSSQnEA_~uwsCgop+8bP~2@{IOTMHcf%U_yF={*?v6a|0Swk_9EO}#-yjB2Mka+xad$tVkr9mlhl^NHAcx99Nh#?yt@Dh=YY7p9s z{w6|zCUZpQt_!%*(79OY8dyRak0`it+rIod62v;e#y9C4k+x^azVuHZP7B|Lb}0DQ zrv6@MgnW?w$POV}&Qbmz1OG2u(cqc?ojNn|@lH$(WRFi^(}k+aA8e<44uJ2@ zJnyT0!AY>|Il2KcB@2Ws4icb_RSZ)25qk|SUB^=3DD*#+-L(Ubnr^Mk4)lVjpKmSh zb)QpgM=enB#Betva$O7Kb)Q&!K@moF7(sg82h;qtHvw@9V1?NQ)x8Y{1f?=48gL)B zv9s>y(=XodwHH0oyUcvId>ty7cx(5WP9cY%A?)c`h?!8-1JL2T9cj znGR4dR;)(4zF7>UA}(Y|An!mhdFdp}(2|D=A_kWr6rm@fQ6&RPnc+NP@G`*K9(lkj zCa|^m_4yzwFiNC=X48Pm53?Bht;Kd){+PEykdo$|pd1+a51`)Vt;K)EIHf_nu!ZIq z?ktbdmbZpLrpIz~k22PP9kxPxGsR14r};-aDZEc4@k;4@-9nIumH`F6o($ldJi4SA zbZyUwLN{1aeP2+mxFrbMu^_R2jZLOsc@*5#hpfXF(YQIf)g4@z07f8J=vc=q~$X=wn|AhT72pbuqOF?lh z6L_`wy=ic|-cYzeMYdwaUkCNN>0G~6o^{Vzh}_8&f}lc7g9|A|=sOnp7y+V~1Vqtk zSY>sI%uXnQn4mOg6L%V=L(C*<56FOuBSB%UR4dD*Kk;?2JTVWN!Xi-)fYN6dN>YWr zAQqp@v+2;W*lV#AL_Z+KVz&mMI#l`>@rd(UlLVb}Q(5x&Y#e+lb zUjBd<1%yDB^NRT=UMYdt2HYN}%s%q2I0Odrjw;RblGWOgG?GxV%!*Za-Xp}O%(JSK z0kO)I0P&-69n7!yAHxryYkxQVcyAo}@yh>?noMCZ|DBWlpC82!o6-AOpe{U}n7&gN zH-moqmW(O+R4_+sELRnkuiC(%ymN3r?d$?~8PqQn)L#s$lSfrOr0@#iD zM@1pAiW;6rp|bt?PRwg$&m!0EOyE8u<)T!K%(~Rj7Fi6U;PJH{gs;FfaNo5K{S`$H z&y!6yAg8I?>fG)C!frOp1zB`YUVrcX3Eb1DVzvbm#b3-}*az}KQM*4G(yJs3FpRBK3VOJzD0sMg^E1TH)UQkBI{1zT z(UP6}O=pqS2ipiuXJOA7*WBP)$}HPX+$G*n<2NrBt&B z?4BQjs>DxZ)KnwU2W7XLhO1j-g#-dA{K$d#a~h4@|S7?xgU45AFYB_Xxm=`!mERoyi1P^76}rZ)`P6jfMyZP+S*= z=F6A5p*pvYXTYn~cz<_m{%U9Wi#Pp`s?A?Q_4m*7e!%isBJ^oAj_g@@X!@NNJ$)Ya z^nqTYjW4PrZRcbjroF>SK`sDJ^Bm9nqO z`H`P7&O9zp{%&TXx+_=L;7Om1L=<^071X4vKXQHhlu)zQ<=#=^a=TYG9im3cbFka2 zM$`_ekCB`N`qrWA2{%v?C=1@JWUCN7a-Vk-b#D(n?SHJm3z`BP^_|X9BQ_bhS3r6K4S_mqCjmniD9w^s@)a^iHCplRc#kUAPY7%b|m1e77@*GPcmr=Lg*Z zLa0fyLYiFQdTU=X-9k7LEPB`-s;PcNkAYl51q?b3WZe8G@lT)Sb5}wREv}noOngcZ z*st((iD#k7Ant?aHNFxx<_B^MO*-g*aFwVLPT1Sg8<4l4K!Q@*ca2nK*S`%Nyg z3@tg+u+9v`lLE3OE%NAPucXea!<&!o+Qhfj?Fj~khy#WGnkM{s4^tp)sQZng*V50T z&GHS*W2<$(F!=-gKc?zRNzHTb@IQ**I*&9RMK^xL>Pzv&tGgy^K9KvdVj8iC?j8r) z#}HI>YGj@G5S@^wf>!j$TQNVVC`>pUUORN(V|PpH#-ko63uIAu9BSpw=E>Cr$prNZ z!Qy&m(q`UFeCj%qj&@%-0d~Vc(hG3WwL>%SS){l@t@|W*B{EJw=ghC21D})f;&S?% zHW1cC3?W}BZQ!mjO`ZqZPszZy2;Q=77kMUTnEXf8J|1)j$V4k>QnwwNeP|KEwefn` zAq-wTr}o#H40!FpycM>itVU!9`1ztp7mk3K@2~oeCGWMmtHlItCwUwC7`sG$-&Oy+ z$dk_s&Ur&%(MI^ApOD5)2G~NScPd{hI?tQ+b1pA^eti=WLY>i60Lks2d_n zRMB9tggvUQCc#M^zB&0RLA&u|@?G20O3kZSgIJ$KiqwkN z{}mq4A$5ZG8SPAfS?e@AVG^^9h+0jl>+;Ozn_SqGw&5r zi!ZU-e>_wGnAWafjP{gS)9zl#gb7HUp0`P}ONIJDU-dp53)Yn9)0bM->> z7wBkv^ugTjxDLxqO_sI5mD#kg?EvQBJT#DX#?XiD%TeW9|MPIClxU+BKo`E~830X~ zsF6+(=ndbupb85BA>jLA;TEh=dRD!NrC1ng=E#FS{4eQ9%f!P3cY}?$w2An1=ifh< z+dZ}BDGL55Y{DwSsR?7>#FxxNYCOL**)xZS=A8jukewWWn^VNst}FkRtonEB^z$75 zjJ$m2cfG?~XJ7QL9a{qN^QCq^WQ?wE=t$7a&2rK>m)fG>h2lyHIj;OX0zcLTo5-_S zzqGYU&~C6J!T^%X+5!>->$~YElhhPPcot63{Y)Z1LeI}hGN60x9sV>aGC%@&$ZqgT zz2F5WR%5RxoanF6-+HWDEt$Dl=X+fLmmke3w26-^8_f0dPQVxyfD>{Ubq4FgCUlS? zb~M_10j=6(g{(f-1LXk)_6A{R{`zG!S$-={nGgR2>-|UqT)Pg?31U?!4Xq^IZxf;; z#(=$|v!rJ+8)cCLW+l_XAp@27N}O9jqf|2oHgmmXZIk5S+Wv z7os=S=`54g>Jwqh!FI@-Z|fXfx-l_b8kYxXU?lZylR@iBRAL@v?@R%c>Dg2px)}pj zubDstA5gb^$h?t78+S2C`XjlB{scuhT#lZBPoEVzQ%xG9qr%cO_3K;AwOkdv=D&5vjQA7RVm4M{<~^uSgh$u0ZRxp% zdeRTE}n){nKN^Y1sSE6=tHBc>AU1{ii^>fH+*2$^4HEP$ceL)vw^p?WbH76>*IK`6( z_kw(tCM^#-k~atq+{={*$zd2>oS`fB46gOEh9=UFAaL@zz;^zE)YWT6&_D8~)6;wb zJ0JFAUe(Q}-RxR#_crPHzRH_dKQxlA_SNMTdV4v=?U-5>YCAsAvb&*+Cd>^QfgIqo z>-B*2ZM9B^KC4%{(86txd?2f(0$+lbpxAd$OAC~lLwjEWMmN`08O-*g3nV-HDbS+? zh+z(?hfCB1R~2l2O#1SgQVP@eNmsAOOp(W7Ug^dFcOvk}f<2*O9lNo#VUIe!n-TVn8%Bp!uOI#M; zDUjf!7*l4?86v!ofeV+AjDp0fGSmQoL|$|;O2jEEG6ABJmeUDhUviYxDSc4Ep7fHC zI}4e(kWOr@lYG$zDB*cPM=hEyJD;v9hNvL66W2_)XzxgTfE)tLM)@c$Olk!QcuI1dm!mY@7G}{g6DEITNzUSO3HlMCB5$Sl zTFATGPwv(3C_gArdg-8=XrgNTn%bEfzQptWrHfqvBI2eh(2saafsi$xKeh*t4>~jnI(%pvvIU!& z-GOi*UN4_Y?fTk2GN>>q=e|vfoyP!}K#67>_9?J=sIKy@{}?jFCf`Aq8-}ApXrsb{ z@t}>Gv8K;`xun=7Q&m{}D9iJAWE2NZvU=o;TNy(>9&6AZYf!VVoOog3mE@!)E)Kw? zEy=7z1)J0;*AX7jF6;9D55e*ws-Hn4*~bBM!_Nj*RejHE&k9v zCt$M|D7|`g6WGXVneWa(jANYKU*|?nn+`l0&rL{=^c0 zmXN;+Ft10#@Q1fRYb*fJ>+yWrx$pg*0-#TKxB!-53OrgxL_qvk?fEx1yzhd4*db@)Us4DQ*fGbhA${LH>>C zwLxlmvaLqyd|0NYB_XecTrU1ouH#N-_*e|A?@!Uy?}?K5aip)u!d--hh}pC8BIRAES8bZXscxMXQ zMfdI!|Mv17Z`NPG=oN-%A6^*pcSix)i@bPE3+QqmOVntCct^O*jT$hk^DTH~vU3vx zFF^9Y#xSFs1u=r=u;wEckD`_{}ofp#uEn4;v2A=A&9$bb)Ukg9M+z&c3Djvc^Wcs01>2-AAOs+N+Yg~TnfMcFkrIr&)@3bkuaXUl z&@!BcRAI+njGI_}pW45fhr^p}Dm{0g(`Se(NjO5cKqRL{KFPCyx^d{NXZM2bVm}xI zqmj)ad%umCZ{gE_Gi>qX_N(`_oRD*WGX8~ijUMnyBdgF(Jz=?ji z0^@=w7TuYE8IDkdcsgEVQj-qBFrpu#GdDBsH_eTadO9;_s$NivXQV{Jg)GzY@ z3Ie#CR?HHdEyh>mbCUFcu`@S^K2`GNMyNx41k(Z^cy-1_dpsRA9>5GFSk;d4Lk*c+ zYr1{m#C{l1j=1|UeEiIFg_1@w36#w&_LbrTnK*8;UF6|@l{;q{E*VJlF)VxN%V+p7#8DE~<_E(*5 z;RMz6R$*`)*#3;t(A{wqE}xOv0ihrf*gb6{Y1u@L*yZ9lecvyF;o9`~8+AwJdcOQ_ zA-8rq9~lHu_5wGspqUQ!#U!P~;6v7H>^(>buYSVe4=9gs9Gu){Zq!$5jzZ-d@f<)u zG%vB0fmfdmUHyfu#M5xSKu)JLOq;sK_}gU?kgj7so3>E;AVYgAp=ci7AQ+6A$JULm zQ9FAd7zQ4!l6V(gq2F+;cL8L#I>CO;EZ68q2O79ajJWEa=u1fK(zrC{nE(olzSi z=sa?5y*&QNbz#)^lvU@Op&O_l3t4!gnPg^>bn7#nyF*l(?{W`i^826 zO{(VrRcSFwI9qyR5eH%O7Jp)n>6J-~MeE9%ir}c4gS5k2wb#z43dj0lk_ZvWbHm?)b+cR**YpAS0{yln3m)TCxfb-Hqln_O-rkW<0fV_zc)_ zIpP~xd)(eaHjjnonEueKN|(GYksE32=|ZN=J|jmf3Y+gddqLoAMJ3yMoP69et@6zJ zIJ(1GI~RHA<-1TzKkQZE0YM*E`ac?BFW-WF@nf_gDAno|yp>cKg5YTn(L%A;3#PaL zZaY2c0)p+ZA8Hgr&Zdzui1(<*QcCMiRI9ItDn$fHh!%sVAi;$bKhSzUWPwYqJiFkH z=1SB$OouL(s5io0FHz7Wi)&g!w_=c!2P*SjAny$?9bY0O$(NM&AZo*+HA!s}tf>ub z(41Z1N5e9Fz-w)$dwFKiL8Qm=sx@TJi&(BB=+Kp!-ix@B9x=0Wrlf6u%%PT~T-Z4< z@g~!0#!s_22Uq{FyX}X0l|AMDRbu6NF&sfRGJLN#9!Mc@MzdN##Y;7GKGmGWw+_>$ z$T1PPu2%4+41Bz(SwI%9nrm8s>u{tIoLV7_Lg44TFq*RpTj!}Ok1ONb_hk{qFh)kR@S5oqt5hA8U~jl1!LLez|cnv}uS66&R#JYHZw1*cM2TDIkZ zYpQq*yZQN&wg-*7&DCDG`>F7a=FW;LXapom7P$`%4A1;7H`DlHki|+evks`0NK&>m z>2SzKmK!8tfBQIf3;pzE8H*YA-2*#J24s$9o41}=8(_e02b^+wOgda}K|4#kV!;K@ z!5Cd7y7hA8rshmz$qk!|(`k{g$t~#dPQj)Q!PupNS$4RLT4&Y&t-Kx24Ce7?)Y4}k zuP>ag_GK>2mA){~9YW37#qdU57-`86I-q&aKj`=vw4)o4Fkr7DP01xLVfkbwN3*0Nm zRzS}}g8~hd=t>Rp6l6xt^au>I633xs2 zD8lS*2;YH?w4-VlVUxFZj`E;^w-Bju+?HgcnC5;^xFa6GXN z;W&B!j`fhtwWnMQNm1GrOYs=DH7R7DO;}39+z>{&A--e?CNgzL40}uRLs;tM8}ni0 zP<*6MFVH4wrt$fpR@q<-{{`U4ccAWfQSgX2r^GRSthg>hd31>J{advO{1_n5%S0)_ zc>U06!SFZ{&%D%z&KKz#30R=FhE;8PXk3NE5f)7XG*7YnG#s(^uk>@Sa>eAeB&!U5 z`U+EY_50bUj@1v1y%95%%BusAgG7|}Sp7o2+++dVBtrmVA`sQzv;c7Ut4;E%M}bOm zS*wK{6nLX*%i8d+h%$CZ`Q`Y0+x zP)(@VwAICkxwB*7A9Rp%o&VT7$&d?da}JKIT9L8J&ywvI53S0u1GBRanA}?MbSRD( zu*ksttu3NE#_^>dZX3+WprY`A()8nlf5OY}3MayvE%3pc*H%74f({>pP+$$Z=t>vL z7GKf1W`U$oIH_!fMjnh*(eG8opQ_UjR{c#{62c?_gm>0RR0T5~YLP)rR*GE^Sm=RW z-hTkHo8vl!l}o14z2LK{S+wkX^w&`G!)S6I?Tt8UIwD_2ZxLC|fgl#Z3211rFZ=&U9OWN-5Bu9ncE$hrkg$uiNUt1CHc? zyN*HKSdlODfamcqoCAt)#LOE;<8h58@W{4C;D}uN|6l9>bAe8G2Q3T%&COj3;sN$6 zsx5#e%wf&tbA&*fmVoCQJl%6=BY|L?CH&!9fQ@66Nb~I-95tYEG0?6NV6#gcG$>V4 z2|R1l2{hi_z{m_d0(6f6u!0JkcG?(qk`TkGS2oG4&H=3leGP2oPrVIX{8|KZ?mN&l z(OKZWopRuQ-shm>E1!Z2vl!qE`Z+Pr1lan$;}1N!BL=wFvKX|#IX@nFXT-V~0ug`3jxnDXw4Ht@uxs-a zv=QXwh9Af z6oWO}?Lahl%kC`j$^(=cDsagL)fE>o6}E_G4P<(sk|jeVuaV)n`Q<-jdhMbw8~Dn= Po9sMY{an^LB{Ts55$l-d literal 0 HcmV?d00001 diff --git a/bench_out/pyprocess/failure_rate.png b/bench_out/pyprocess/failure_rate.png new file mode 100644 index 0000000000000000000000000000000000000000..b5c5f6bcb4cbdcd38662488864e7f349cae153a6 GIT binary patch literal 17980 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 literal 0 HcmV?d00001 diff --git a/bench_out/pyprocess/heatmap_mean_duration.png b/bench_out/pyprocess/heatmap_mean_duration.png new file mode 100644 index 0000000000000000000000000000000000000000..7262802f0badf48623bbd0d95dacd6128e0fbfb1 GIT binary patch literal 22924 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 b@N;s5V`^zS6E>|Y@Q=8Nv~Yo-j_3aZc?$po literal 0 HcmV?d00001 diff --git a/bench_out/pyprocess/mw=126_proc=False_branches=reduced_file_list_perfile.csv b/bench_out/pyprocess/mw=126_proc=False_branches=reduced_file_list_perfile.csv new file mode 100644 index 0000000..2dbec4a --- /dev/null +++ b/bench_out/pyprocess/mw=126_proc=False_branches=reduced_file_list_perfile.csv @@ -0,0 +1,51 @@ +file,duration,n_events +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000044.root,26.380362796015106,3464 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/01/18/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000552.root,28.04793255298864,3524 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/7f/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001685.root,29.519163390039466,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/fc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002561.root,30.519976899027824,3573 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000254.root,31.0673414360499,3600 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/3e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000473.root,31.57698078895919,3507 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1c/cf/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001319.root,31.926272107986733,3476 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/0a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000284.root,32.4762266400503,3631 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000052.root,32.419919203966856,3527 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/4d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001167.root,32.80483683897182,3581 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000210.root,32.835430670995265,3561 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/9d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000917.root,33.90665145299863,3578 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/90/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000323.root,34.38395568996202,3512 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1a/82/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001610.root,34.658066225936636,3513 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/61/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000078.root,34.96171654900536,3433 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/56/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000050.root,34.99176952999551,3480 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/d0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001507.root,35.3629094370408,3671 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1e/98/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000080.root,35.87228953803424,3522 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/e5/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002824.root,35.96264208306093,3560 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000123.root,36.00370763707906,3516 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/16/84/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000008.root,35.95471900899429,3461 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000765.root,36.568770793033764,3588 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00003211.root,36.53590237000026,3551 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/10/47/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000549.root,36.865983705967665,3453 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001674.root,36.83432660903782,3494 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/39/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002047.root,37.146459854906425,3561 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/f7/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002266.root,37.40151210303884,3527 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000425.root,38.23933757899795,3563 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/11/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000797.root,38.334577335976064,3496 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000974.root,38.35068832198158,3556 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/83/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002447.root,38.904326561954804,3550 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/64/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001940.root,38.98050468007568,3609 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/cb/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000529.root,39.56571453099605,3498 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/fa/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000871.root,39.50947917101439,3535 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0c/8d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000217.root,39.56587041600142,3423 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/09/87/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000393.root,39.75868877698667,3511 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/7e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000092.root,39.93222926801536,3577 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000038.root,40.09283152304124,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000324.root,40.05890151206404,3462 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/77/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002170.root,40.42826940596569,3486 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/6d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000547.root,40.46841193700675,3520 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/31/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001883.root,40.73887089197524,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/1a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000087.root,40.758563617942855,3477 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0d/b8/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001588.root,40.73833423200995,3502 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/c9/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001373.root,40.86577081901487,3517 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/de/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000016.root,40.87694821704645,3521 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/7d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000111.root,40.838519311044365,3611 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/5e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002028.root,40.96291109803133,3566 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/93/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001934.root,40.947609710972756,3595 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0e/6e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000181.root,41.173575022025034,3544 diff --git a/bench_out/pyprocess/mw=126_proc=True_branches=reduced_file_list_perfile.csv b/bench_out/pyprocess/mw=126_proc=True_branches=reduced_file_list_perfile.csv new file mode 100644 index 0000000..87bd8b7 --- /dev/null +++ b/bench_out/pyprocess/mw=126_proc=True_branches=reduced_file_list_perfile.csv @@ -0,0 +1,51 @@ +file,duration,n_events +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/77/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002170.root,21.54025072802324,3486 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000052.root,21.717178800026886,3527 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/83/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002447.root,21.579261271981522,3550 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/6d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000547.root,21.613457798026502,3520 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/11/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000797.root,22.01851626089774,3496 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0c/8d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000217.root,21.740079756011255,3423 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/01/18/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000552.root,21.99140527297277,3524 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/61/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000078.root,21.666083759977482,3433 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/10/47/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000549.root,21.905159394955263,3453 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/de/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000016.root,21.769086794927716,3521 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000038.root,22.008105160901323,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000254.root,22.02919666899834,3600 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/3e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000473.root,22.247907145996578,3507 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/7d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000111.root,22.362119985977188,3611 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000123.root,22.35442906396929,3516 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/31/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001883.root,22.368237801943906,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/90/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000323.root,22.219206850975752,3512 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/16/84/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000008.root,22.46716490003746,3461 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000324.root,22.44718777993694,3462 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/93/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001934.root,22.46203799196519,3595 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/cb/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000529.root,22.5366256829584,3498 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/fa/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000871.root,22.526992056984454,3535 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1a/82/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001610.root,22.60296959010884,3513 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/d0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001507.root,22.576041028019972,3671 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00003211.root,22.629005581024103,3551 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/9d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000917.root,22.637223384925164,3578 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/5e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002028.root,22.725835205987096,3566 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000425.root,22.76491615001578,3563 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/0a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000284.root,22.832345949020237,3631 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001674.root,22.81802513403818,3494 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1c/cf/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001319.root,22.811941400985233,3476 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/39/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002047.root,22.850910877925344,3561 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0d/b8/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001588.root,22.86442600400187,3502 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/4d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001167.root,22.85016888496466,3581 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/64/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001940.root,22.87817942793481,3609 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/7e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000092.root,22.880950171034783,3577 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/fc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002561.root,22.893564623082057,3573 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/c9/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001373.root,22.899505322915502,3517 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/e5/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002824.root,22.9081147959223,3560 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/f7/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002266.root,22.925355535931885,3527 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000044.root,22.932052475982346,3464 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000974.root,22.965798104996793,3556 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1e/98/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000080.root,22.943937225965783,3522 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000210.root,23.016918289940804,3561 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/1a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000087.root,23.030855814926326,3477 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000765.root,23.02639072202146,3588 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/09/87/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000393.root,23.073962132097222,3511 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0e/6e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000181.root,23.102500114939176,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/56/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000050.root,23.140066063031554,3480 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/7f/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001685.root,23.400588837917894,3544 diff --git a/bench_out/pyprocess/mw=16_proc=False_branches=reduced_file_list_perfile.csv b/bench_out/pyprocess/mw=16_proc=False_branches=reduced_file_list_perfile.csv new file mode 100644 index 0000000..d1c5508 --- /dev/null +++ b/bench_out/pyprocess/mw=16_proc=False_branches=reduced_file_list_perfile.csv @@ -0,0 +1,51 @@ +file,duration,n_events +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/de/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000016.root,5.710102805052884,3521 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/1a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000087.root,6.112558144028299,3477 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/09/87/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000393.root,6.362293794052675,3511 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/90/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000323.root,6.6088094810256734,3512 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/64/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001940.root,6.811650903895497,3609 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/0a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000284.root,7.119055615039542,3631 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/6d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000547.root,7.368342605070211,3520 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/11/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000797.root,7.3620756070595235,3496 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/01/18/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000552.root,7.376469893963076,3524 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/39/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002047.root,7.3835381109965965,3561 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000123.root,7.399038684903644,3516 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/fc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002561.root,7.566228369018063,3573 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000974.root,7.573052699910477,3556 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/31/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001883.root,7.929537391988561,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/cb/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000529.root,8.004724881029688,3498 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/f7/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002266.root,8.052118333987892,3527 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/c9/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001373.root,3.78165994992014,3517 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0d/b8/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001588.root,4.077614882029593,3502 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0e/6e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000181.root,4.02895283093676,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/e5/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002824.root,5.065337899024598,3560 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0c/8d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000217.root,5.626326236058958,3423 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/3e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000473.root,5.564056869014166,3507 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/77/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002170.root,5.69069754506927,3486 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/7e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000092.root,6.027283619041555,3577 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000038.root,6.046654516016133,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/d0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001507.root,6.4413552390178666,3671 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/5e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002028.root,6.418888416956179,3566 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/10/47/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000549.root,6.717539221979678,3453 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/7f/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001685.root,6.717827807064168,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/7d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000111.root,6.4420902479905635,3611 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/93/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001934.root,6.738035682006739,3595 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000765.root,7.023705787025392,3588 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000210.root,5.840181907056831,3561 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000044.root,4.636794327991083,3464 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000052.root,4.984234575065784,3527 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/fa/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000871.root,4.709415570017882,3535 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000254.root,3.9772454210324213,3600 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001674.root,3.5236721329856664,3494 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/16/84/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000008.root,3.453290003933944,3461 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/4d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001167.root,3.333020808058791,3581 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/9d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000917.root,3.543220428051427,3578 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000324.root,3.6670020810561255,3462 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/83/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002447.root,3.679265931015834,3550 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/56/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000050.root,4.051341151003726,3480 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1a/82/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001610.root,3.8977693989872932,3513 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00003211.root,3.8717093829764053,3551 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/61/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000078.root,3.789656496956013,3433 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000425.root,3.7672109060222283,3563 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1c/cf/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001319.root,3.6093749250285327,3476 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1e/98/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000080.root,3.5296935690566897,3522 diff --git a/bench_out/pyprocess/mw=16_proc=True_branches=reduced_file_list_perfile.csv b/bench_out/pyprocess/mw=16_proc=True_branches=reduced_file_list_perfile.csv new file mode 100644 index 0000000..9ea2389 --- /dev/null +++ b/bench_out/pyprocess/mw=16_proc=True_branches=reduced_file_list_perfile.csv @@ -0,0 +1,51 @@ +file,duration,n_events +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/0a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000284.root,3.5790889530908316,3631 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/39/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002047.root,3.6594927470432594,3561 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000974.root,3.604245782014914,3556 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/11/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000797.root,3.5750568760558963,3496 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/09/87/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000393.root,3.655851223040372,3511 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/31/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001883.root,3.6496250120690092,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/90/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000323.root,3.7137895909836516,3512 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/6d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000547.root,3.755487069953233,3520 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/de/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000016.root,3.7679643540177494,3521 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/fc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002561.root,3.79408247792162,3573 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000123.root,3.8024779580300674,3516 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/64/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001940.root,3.8305949399946257,3609 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/f7/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002266.root,3.84853828093037,3527 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/cb/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000529.root,3.848065595026128,3498 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/1a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000087.root,3.9038486629724503,3477 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/01/18/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000552.root,3.934355332981795,3524 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/e5/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002824.root,3.138962344964966,3560 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/c9/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001373.root,3.2069341130554676,3517 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0c/8d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000217.root,3.1770540579454973,3423 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/3e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000473.root,3.2451381309656426,3507 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/d0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001507.root,3.222710979054682,3671 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/10/47/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000549.root,3.403335051960312,3453 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0d/b8/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001588.root,3.5761120379902422,3502 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0e/6e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000181.root,3.553927932982333,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000038.root,3.3393392079742625,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000765.root,3.3027099720202386,3588 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/77/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002170.root,3.410350188962184,3486 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/5e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002028.root,3.447233089013025,3566 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/7e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000092.root,3.5764064880786464,3577 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/7f/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001685.root,3.4548435530159622,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/7d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000111.root,3.407623026985675,3611 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/93/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001934.root,3.4713881140341982,3595 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000210.root,3.4550201119855046,3561 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000044.root,3.40921931900084,3464 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000052.root,3.5343232080340385,3527 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000254.root,3.4411527069751173,3600 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/fa/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000871.root,3.578037702012807,3535 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001674.root,3.4332318680826575,3494 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/4d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001167.root,3.4348499509505928,3581 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000324.root,3.384998922003433,3462 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1a/82/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001610.root,3.3550811539171264,3513 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/16/84/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000008.root,3.623257415019907,3461 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/83/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002447.root,3.444490281981416,3550 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/9d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000917.root,3.5577432230347767,3578 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/61/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000078.root,3.4918954690219834,3433 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000425.root,3.4654323289869353,3563 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00003211.root,3.564890780020505,3551 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/56/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000050.root,3.756552848033607,3480 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1e/98/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000080.root,2.9601016249507666,3522 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1c/cf/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001319.root,3.02798148104921,3476 diff --git a/bench_out/pyprocess/mw=1_proc=False_branches=full_file_list_perfile.csv b/bench_out/pyprocess/mw=1_proc=False_branches=full_file_list_perfile.csv new file mode 100644 index 0000000..ada2abd --- /dev/null +++ b/bench_out/pyprocess/mw=1_proc=False_branches=full_file_list_perfile.csv @@ -0,0 +1,51 @@ +file,duration,n_events +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/01/18/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000552.root,4.371675475966185, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/1a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000087.root,4.821530977031216, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000974.root,4.3284347840817645, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/6d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000547.root,4.398141689016484, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/fc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002561.root,4.270774103002623, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/0a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000284.root,4.043627355946228, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/90/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000323.root,4.208637435105629, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000123.root,4.285688568954356, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/cb/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000529.root,4.113454108941369, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/11/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000797.root,4.243961198022589, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/31/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001883.root,4.162205556058325, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/39/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002047.root,4.185792631935328, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/de/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000016.root,4.271689582965337, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/f7/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002266.root,4.123804584960453, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/09/87/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000393.root,4.229052040958777, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/64/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001940.root,4.265201607951894, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/c9/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001373.root,4.096404175972566, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/e5/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002824.root,4.052391598932445, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0c/8d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000217.root,4.15858023497276, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0d/b8/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001588.root,4.1120120249688625, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0e/6e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000181.root,4.225021082093008, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/3e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000473.root,4.337992143933661, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/7e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000092.root,4.246909897075966, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/d0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001507.root,4.290660989005119, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/10/47/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000549.root,4.11424750497099, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/5e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002028.root,3.9980411150027066, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/77/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002170.root,4.250829110038467, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000038.root,4.169580794987269, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/7f/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001685.root,4.310398972942494, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000765.root,4.0785379379522055, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/93/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001934.root,4.308712725061923, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/7d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000111.root,4.348405480035581, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000210.root,4.138592219911516, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000052.root,4.1343883340014145, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000044.root,3.9021473629400134, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/fa/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000871.root,4.186029255040921, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000254.root,4.126714452984743, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001674.root,4.152776425005868, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/16/84/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000008.root,4.082580351969227, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/4d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001167.root,4.035981132998131, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/9d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000917.root,3.9552046649623662, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000324.root,4.13789380597882, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/56/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000050.root,4.13365499896463, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/83/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002447.root,4.075618014088832, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1a/82/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001610.root,4.186113064060919, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00003211.root,4.063144081970677, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/61/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000078.root,3.880896057933569, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000425.root,4.2098071369109675, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1c/cf/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001319.root,4.074205823941156, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1e/98/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000080.root,4.29791554203257, diff --git a/bench_out/pyprocess/mw=1_proc=False_branches=reduced_file_list_perfile.csv b/bench_out/pyprocess/mw=1_proc=False_branches=reduced_file_list_perfile.csv new file mode 100644 index 0000000..340e311 --- /dev/null +++ b/bench_out/pyprocess/mw=1_proc=False_branches=reduced_file_list_perfile.csv @@ -0,0 +1,51 @@ +file,duration,n_events +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/01/18/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000552.root,3.3968118760967627,3524 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/1a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000087.root,2.823966166935861,3477 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000974.root,3.110537503962405,3556 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/6d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000547.root,2.973441867972724,3520 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/fc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002561.root,2.9773381730774418,3573 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/0a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000284.root,2.9943629630142823,3631 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/90/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000323.root,2.9751946050673723,3512 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000123.root,3.2524991219397634,3516 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/cb/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000529.root,3.0630404059775174,3498 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/11/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000797.root,3.2063957760110497,3496 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/31/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001883.root,2.9271435249829665,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/39/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002047.root,3.0873108089435846,3561 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/de/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000016.root,3.1385636910563335,3521 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/f7/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002266.root,2.9686747810337692,3527 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/09/87/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000393.root,3.2712422859622166,3511 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/64/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001940.root,3.2154463679762557,3609 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/c9/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001373.root,3.145194422919303,3517 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/e5/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002824.root,2.9506409249734133,3560 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0c/8d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000217.root,2.9605139680206776,3423 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0d/b8/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001588.root,3.2901832399656996,3502 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0e/6e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000181.root,3.478713625925593,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/3e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000473.root,3.0101476500276476,3507 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/7e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000092.root,3.380037119030021,3577 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/d0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001507.root,3.198079635971226,3671 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/10/47/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000549.root,2.9501936620799825,3453 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/5e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002028.root,3.230957277934067,3566 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/77/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002170.root,2.933459411957301,3486 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000038.root,3.0103406910784543,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/7f/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001685.root,3.144809177960269,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000765.root,2.88313485996332,3588 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/93/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001934.root,2.858208228019066,3595 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/7d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000111.root,2.8837578439852223,3611 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000210.root,2.9047174910083413,3561 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000052.root,2.870484648970887,3527 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000044.root,3.0466288229217753,3464 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/fa/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000871.root,2.9381100040627643,3535 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000254.root,2.9297921860124916,3600 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001674.root,2.9598261709325016,3494 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/16/84/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000008.root,2.986300486023538,3461 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/4d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001167.root,2.975855862023309,3581 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/9d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000917.root,3.189237170969136,3578 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000324.root,2.981092281988822,3462 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/56/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000050.root,3.1213629019912332,3480 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/83/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002447.root,2.98622170498129,3550 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1a/82/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001610.root,3.108467409037985,3513 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00003211.root,2.9678710479056463,3551 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/61/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000078.root,2.935586778097786,3433 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000425.root,2.923739741090685,3563 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1c/cf/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001319.root,2.9418412030208856,3476 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1e/98/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000080.root,2.92719409102574,3522 diff --git a/bench_out/pyprocess/mw=1_proc=True_branches=reduced_file_list_perfile.csv b/bench_out/pyprocess/mw=1_proc=True_branches=reduced_file_list_perfile.csv new file mode 100644 index 0000000..d19e225 --- /dev/null +++ b/bench_out/pyprocess/mw=1_proc=True_branches=reduced_file_list_perfile.csv @@ -0,0 +1,51 @@ +file,duration,n_events +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/01/18/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000552.root,3.2087256809463724,3524 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/1a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000087.root,2.9424613950541243,3477 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000974.root,2.942554982029833,3556 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/6d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000547.root,2.9445485309697688,3520 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/fc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002561.root,3.0519079850055277,3573 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/0a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000284.root,2.895164321991615,3631 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/90/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000323.root,2.9119740000460297,3512 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000123.root,3.1778480139328167,3516 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/cb/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000529.root,3.0132782160071656,3498 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/11/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000797.root,3.140525114024058,3496 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/31/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001883.root,3.0779861609917134,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/39/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002047.root,2.9505942719988525,3561 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/de/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000016.root,3.062873066053726,3521 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/f7/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002266.root,2.8879564229864627,3527 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/09/87/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000393.root,2.924737912020646,3511 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/64/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001940.root,2.8222598049324006,3609 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/c9/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001373.root,2.908328005927615,3517 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/e5/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002824.root,2.8856885369168594,3560 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0c/8d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000217.root,2.942477038013749,3423 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0d/b8/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001588.root,3.0482622710987926,3502 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0e/6e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000181.root,3.080863900948316,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/3e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000473.root,2.8035124499583617,3507 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/7e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000092.root,2.8969799160258844,3577 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/d0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001507.root,3.050138486898504,3671 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/10/47/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000549.root,2.9254326940281317,3453 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/5e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002028.root,2.889494605944492,3566 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/77/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002170.root,2.988072498003021,3486 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000038.root,2.91401029296685,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/7f/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001685.root,3.0229587759822607,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000765.root,2.971282096928917,3588 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/93/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001934.root,2.9336898889159784,3595 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/7d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000111.root,2.9017254910431802,3611 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000210.root,3.0774598359130323,3561 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000052.root,3.0300007320474833,3527 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000044.root,2.8692677340004593,3464 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/fa/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000871.root,2.8448090389138088,3535 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000254.root,2.8732213089242578,3600 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001674.root,3.058786793029867,3494 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/16/84/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000008.root,2.844793953001499,3461 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/4d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001167.root,2.7657962039811537,3581 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/9d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000917.root,2.953955314005725,3578 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000324.root,2.7587793900165707,3462 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/56/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000050.root,3.067965612979606,3480 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/83/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002447.root,2.9187952590873465,3550 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1a/82/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001610.root,2.88095078303013,3513 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00003211.root,2.892813184997067,3551 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/61/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000078.root,2.8506385519867763,3433 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000425.root,2.983073259005323,3563 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1c/cf/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001319.root,2.9450561380945146,3476 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1e/98/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000080.root,2.9835847769863904,3522 diff --git a/bench_out/pyprocess/mw=2_proc=False_branches=full_file_list_perfile.csv b/bench_out/pyprocess/mw=2_proc=False_branches=full_file_list_perfile.csv new file mode 100644 index 0000000..8b2c148 --- /dev/null +++ b/bench_out/pyprocess/mw=2_proc=False_branches=full_file_list_perfile.csv @@ -0,0 +1,51 @@ +file,duration,n_events +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/1a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000087.root,3.9577320819953457, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/01/18/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000552.root,4.216001498978585, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000974.root,4.057778875925578, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/6d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000547.root,4.059587763971649, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/fc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002561.root,4.168796059093438, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/0a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000284.root,4.112828609999269, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/90/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000323.root,4.030803658999503, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000123.root,4.460454079089686, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/cb/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000529.root,4.18309536203742, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/11/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000797.root,3.9527635719859973, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/31/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001883.root,4.000581940985285, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/39/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002047.root,3.9410553810885176, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/de/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000016.root,4.635487498017028, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/f7/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002266.root,4.4500320829683915, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/09/87/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000393.root,4.126200699945912, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/64/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001940.root,4.217542477999814, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/c9/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001373.root,4.163466050988063, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/e5/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002824.root,4.170961137977429, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0c/8d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000217.root,3.993027069955133, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0d/b8/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001588.root,4.09955262101721, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0e/6e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000181.root,4.30683175905142, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/3e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000473.root,4.272457557963207, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/7e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000092.root,4.106000368017703, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/d0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001507.root,4.016722540021874, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/10/47/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000549.root,3.954703763942234, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/5e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002028.root,4.025295138009824, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/77/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002170.root,3.8829298360506073, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000038.root,4.024974985979497, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/7f/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001685.root,4.1956475171027705, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000765.root,4.009154827101156, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/93/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001934.root,4.161535763996653, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/7d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000111.root,4.2769887099275365, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000210.root,4.083118811948225, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000052.root,3.9686564940493554, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000044.root,4.14251658692956, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/fa/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000871.root,4.102890599053353, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000254.root,4.113362879958004, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001674.root,4.145444613066502, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/16/84/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000008.root,4.095936084049754, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/4d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001167.root,4.159784982912242, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/9d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000917.root,4.198675401974469, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000324.root,4.291038541006856, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/56/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000050.root,4.266484302002937, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/83/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002447.root,4.085931459092535, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1a/82/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001610.root,4.131497867056169, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00003211.root,4.120298399007879, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/61/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000078.root,4.043993446044624, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000425.root,4.071278479998, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1c/cf/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001319.root,4.017384756007232, +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1e/98/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000080.root,4.002592372940853, diff --git a/bench_out/pyprocess/mw=2_proc=False_branches=reduced_file_list_perfile.csv b/bench_out/pyprocess/mw=2_proc=False_branches=reduced_file_list_perfile.csv new file mode 100644 index 0000000..f3a9666 --- /dev/null +++ b/bench_out/pyprocess/mw=2_proc=False_branches=reduced_file_list_perfile.csv @@ -0,0 +1,51 @@ +file,duration,n_events +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/1a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000087.root,2.990556612960063,3477 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/01/18/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000552.root,3.083185425028205,3524 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000974.root,2.870909283985384,3556 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/6d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000547.root,2.9566763300681487,3520 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/fc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002561.root,2.8649987570242956,3573 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/0a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000284.root,3.0278864970896393,3631 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/90/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000323.root,3.0605635549873114,3512 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000123.root,3.1669625520007685,3516 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/cb/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000529.root,3.1909837620332837,3498 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/11/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000797.root,2.9708865149877965,3496 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/31/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001883.root,2.8376232100417838,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/39/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002047.root,2.9435542699648067,3561 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/de/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000016.root,3.035845609032549,3521 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/f7/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002266.root,2.8850423650583252,3527 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/09/87/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000393.root,2.825660236994736,3511 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/64/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001940.root,2.840399540029466,3609 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/c9/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001373.root,2.91331104200799,3517 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/e5/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002824.root,2.9121555879246444,3560 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0c/8d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000217.root,2.83559948799666,3423 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0d/b8/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001588.root,3.0974682450760156,3502 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0e/6e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000181.root,3.0663670860230923,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/3e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000473.root,3.0972207280574366,3507 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/7e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000092.root,2.991496677044779,3577 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/d0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001507.root,3.134819640079513,3671 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/10/47/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000549.root,2.846750346943736,3453 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/5e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002028.root,2.884898492018692,3566 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/77/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002170.root,2.897595635964535,3486 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000038.root,2.8779853229643777,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/7f/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001685.root,2.8682335240300745,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000765.root,2.8912674579769373,3588 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/93/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001934.root,2.8932517879875377,3595 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/7d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000111.root,2.7965506709879264,3611 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000210.root,2.8262561230221763,3561 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000052.root,2.878274464979768,3527 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000044.root,2.7913413499481976,3464 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/fa/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000871.root,2.8558674280066043,3535 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000254.root,2.952113459003158,3600 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001674.root,2.909404958016239,3494 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/16/84/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000008.root,2.8608806349802762,3461 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/4d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001167.root,2.813301123911515,3581 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/9d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000917.root,2.872801144956611,3578 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000324.root,2.878683735965751,3462 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/56/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000050.root,3.1088300249539316,3480 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/83/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002447.root,2.909013289026916,3550 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1a/82/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001610.root,2.809691726928577,3513 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00003211.root,2.7884242199361324,3551 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/61/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000078.root,2.8279524279059842,3433 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000425.root,2.8825984789291397,3563 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1c/cf/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001319.root,2.8578355560312048,3476 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1e/98/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000080.root,2.840025749988854,3522 diff --git a/bench_out/pyprocess/mw=2_proc=True_branches=reduced_file_list_perfile.csv b/bench_out/pyprocess/mw=2_proc=True_branches=reduced_file_list_perfile.csv new file mode 100644 index 0000000..56a50cf --- /dev/null +++ b/bench_out/pyprocess/mw=2_proc=True_branches=reduced_file_list_perfile.csv @@ -0,0 +1,51 @@ +file,duration,n_events +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/1a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000087.root,2.994802962988615,3477 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/01/18/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000552.root,3.2733411559602246,3524 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000974.root,2.9100391179090366,3556 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/6d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000547.root,2.786817310960032,3520 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/fc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002561.root,2.857801193022169,3573 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/0a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000284.root,2.78939948300831,3631 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/90/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000323.root,2.8382570890244097,3512 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000123.root,3.083791925921105,3516 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/cb/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000529.root,2.974925576010719,3498 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/11/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000797.root,2.8791807260131463,3496 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/31/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001883.root,2.819737137062475,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/39/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002047.root,2.782307800021954,3561 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/f7/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002266.root,2.77869477099739,3527 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/de/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000016.root,3.00643544702325,3521 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/09/87/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000393.root,2.8348720220383257,3511 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/64/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001940.root,2.9351889609824866,3609 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/c9/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001373.root,2.800295560969971,3517 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/e5/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002824.root,2.837404467049055,3560 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0c/8d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000217.root,3.122664185008034,3423 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0d/b8/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001588.root,3.0662952889688313,3502 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0e/6e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000181.root,2.974842883995734,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/3e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000473.root,2.866795912035741,3507 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/7e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000092.root,2.765412915032357,3577 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/d0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001507.root,2.7729325860273093,3671 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/10/47/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000549.root,2.7838705679168925,3453 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/5e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002028.root,2.7706102239899337,3566 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/77/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002170.root,2.8202729600016028,3486 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000038.root,2.7926574400626123,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/7f/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001685.root,2.9604184249183163,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000765.root,3.0082186340587214,3588 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/93/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001934.root,2.786811165045947,3595 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/7d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000111.root,2.8371647719759494,3611 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000210.root,2.82049337902572,3561 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000052.root,2.8111500130034983,3527 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000044.root,2.8744195060571656,3464 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/fa/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000871.root,2.8506798970047385,3535 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000254.root,2.927634650026448,3600 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001674.root,2.9682965220417827,3494 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/16/84/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000008.root,2.8570477459579706,3461 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/4d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001167.root,2.8876435339916497,3581 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/9d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000917.root,2.898640182102099,3578 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000324.root,2.878363583004102,3462 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/56/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000050.root,3.0301890250993893,3480 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/83/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002447.root,2.874525386025198,3550 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1a/82/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001610.root,2.835482992930338,3513 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00003211.root,2.8678278860170394,3551 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000425.root,2.972447885898873,3563 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/61/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000078.root,3.077671036007814,3433 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1c/cf/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001319.root,2.9207726039458066,3476 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1e/98/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000080.root,2.8874046759447083,3522 diff --git a/bench_out/pyprocess/mw=32_proc=False_branches=reduced_file_list_perfile.csv b/bench_out/pyprocess/mw=32_proc=False_branches=reduced_file_list_perfile.csv new file mode 100644 index 0000000..d92ea22 --- /dev/null +++ b/bench_out/pyprocess/mw=32_proc=False_branches=reduced_file_list_perfile.csv @@ -0,0 +1,51 @@ +file,duration,n_events +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/10/47/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000549.root,11.856626719003543,3453 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/d0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001507.root,12.552812404930592,3671 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/6d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000547.root,15.908082130015828,3520 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/7d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000111.root,16.41059124597814,3611 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/7f/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001685.root,16.88522922305856,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/5e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002028.root,17.321745314984582,3566 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/90/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000323.root,17.363760430947877,3512 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/e5/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002824.root,17.352914638933726,3560 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0e/6e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000181.root,17.36142186599318,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/1a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000087.root,17.3919148480054,3477 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/64/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001940.root,17.737715220078826,3609 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/c9/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001373.root,17.741420720005408,3517 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/de/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000016.root,17.75898049294483,3521 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/09/87/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000393.root,18.059393532923423,3511 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/11/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000797.root,18.1280841070693,3496 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/cb/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000529.root,18.37781892006751,3498 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/fc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002561.root,18.39192266704049,3573 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/3e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000473.root,18.3780753769679,3507 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0c/8d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000217.root,18.61640007898677,3423 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/f7/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002266.root,19.220718223950826,3527 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000123.root,19.244946721941233,3516 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000974.root,19.337486695032567,3556 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/7e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000092.root,19.56766008294653,3577 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/93/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001934.root,19.56810846400913,3595 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/01/18/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000552.root,19.63663952006027,3524 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000765.root,19.78962292894721,3588 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/31/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001883.root,19.83308906806633,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/0a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000284.root,20.015998348011635,3631 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/39/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002047.root,20.9371768750716,3561 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000038.root,21.192681972985156,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0d/b8/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001588.root,21.22380715899635,3502 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/77/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002170.root,21.223336707917042,3486 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000052.root,10.623928432003595,3527 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000210.root,12.773690755013376,3561 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000044.root,9.321360650938004,3464 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/9d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000917.root,8.24200419895351,3578 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000254.root,9.079975781962276,3600 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001674.root,8.962723450968042,3494 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/fa/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000871.root,9.86899198195897,3535 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00003211.root,8.794679746963084,3551 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/4d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001167.root,9.776674941997044,3581 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1a/82/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001610.root,9.622014502994716,3513 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/83/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002447.root,9.841049046022817,3550 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/16/84/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000008.root,10.239514212007634,3461 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/56/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000050.root,9.85880828590598,3480 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1e/98/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000080.root,9.212520002038218,3522 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000324.root,10.590624756994657,3462 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/61/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000078.root,10.021835708990693,3433 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000425.root,9.852076425100677,3563 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1c/cf/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001319.root,9.910478818928823,3476 diff --git a/bench_out/pyprocess/mw=32_proc=True_branches=reduced_file_list_perfile.csv b/bench_out/pyprocess/mw=32_proc=True_branches=reduced_file_list_perfile.csv new file mode 100644 index 0000000..7fb6899 --- /dev/null +++ b/bench_out/pyprocess/mw=32_proc=True_branches=reduced_file_list_perfile.csv @@ -0,0 +1,51 @@ +file,duration,n_events +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/6d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000547.root,9.89196780801285,3520 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/d0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001507.root,10.065577021916397,3671 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/77/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002170.root,10.110732760978863,3486 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/31/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001883.root,10.153668106999248,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/01/18/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000552.root,10.17486074496992,3524 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/39/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002047.root,10.181867500999942,3561 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/e5/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002824.root,10.17394191189669,3560 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/11/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000797.root,10.206434588995762,3496 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/64/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001940.root,10.230052954982966,3609 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/3e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000473.root,10.231369600980543,3507 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/5e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002028.root,10.246526277041994,3566 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/09/87/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000393.root,10.266971891978756,3511 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/7e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000092.root,10.260544538032264,3577 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/0a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000284.root,10.269492603023537,3631 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/c9/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001373.root,10.317718564998358,3517 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0c/8d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000217.root,10.342099596047774,3423 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/f7/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002266.root,10.360925731947646,3527 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0d/b8/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001588.root,10.356075954041444,3502 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/1a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000087.root,10.385436389013194,3477 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000974.root,10.456197059014812,3556 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/7f/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001685.root,10.44999180000741,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/7d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000111.root,10.464090798981488,3611 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/93/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001934.root,10.49511820601765,3595 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/fc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002561.root,10.515294514014386,3573 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000038.root,10.524004839011468,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/cb/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000529.root,10.559328042902052,3498 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000765.root,10.550968040945008,3588 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/de/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000016.root,10.588267475017346,3521 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0e/6e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000181.root,10.63410905492492,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/10/47/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000549.root,10.641012166975997,3453 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/90/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000323.root,10.72437276202254,3512 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000123.root,10.782639664015733,3516 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000210.root,4.342900551971979,3561 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000044.root,4.23002168093808,3464 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/16/84/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000008.root,4.029954634024762,3461 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000052.root,4.364283437957056,3527 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000254.root,4.164607223006897,3600 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000324.root,3.98880694701802,3462 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/fa/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000871.root,4.339125212049112,3535 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/4d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001167.root,4.2820067800348625,3581 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/9d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000917.root,4.242754584061913,3578 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001674.root,4.3982274159789085,3494 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000425.root,3.9559153360314667,3563 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/56/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000050.root,4.21065860602539,3480 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1a/82/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001610.root,4.148253747960553,3513 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1c/cf/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001319.root,3.969824366038665,3476 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/83/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002447.root,4.257025392958894,3550 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/61/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000078.root,4.174926690990105,3433 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00003211.root,4.233888373943046,3551 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1e/98/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000080.root,4.079380749026313,3522 diff --git a/bench_out/pyprocess/mw=4_proc=False_branches=reduced_file_list_perfile.csv b/bench_out/pyprocess/mw=4_proc=False_branches=reduced_file_list_perfile.csv new file mode 100644 index 0000000..3d6d8c1 --- /dev/null +++ b/bench_out/pyprocess/mw=4_proc=False_branches=reduced_file_list_perfile.csv @@ -0,0 +1,51 @@ +file,duration,n_events +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/01/18/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000552.root,3.2267184710362926,3524 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000974.root,3.328750152955763,3556 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/1a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000087.root,3.4098886769497767,3477 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/6d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000547.root,3.469298741896637,3520 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/fc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002561.root,2.9489381950115785,3573 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/0a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000284.root,2.9810028850333765,3631 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/90/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000323.root,3.230497163021937,3512 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000123.root,3.247806346975267,3516 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/11/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000797.root,2.9277570110280067,3496 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/cb/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000529.root,3.1355697360122576,3498 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/31/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001883.root,2.979594604927115,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/39/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002047.root,3.0231738860020414,3561 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/f7/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002266.root,3.0697940579848364,3527 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/de/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000016.root,3.356428530998528,3521 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/09/87/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000393.root,3.0713272130815312,3511 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/64/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001940.root,3.1271594489226118,3609 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/c9/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001373.root,2.9138848579023033,3517 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/e5/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002824.root,3.0593318350147456,3560 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0c/8d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000217.root,3.053775261971168,3423 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0d/b8/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001588.root,3.2418080979259685,3502 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0e/6e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000181.root,2.98489388206508,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/3e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000473.root,2.8669727500528097,3507 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/7e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000092.root,2.955414436990395,3577 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/d0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001507.root,2.9993001819821075,3671 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/10/47/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000549.root,3.0516101829707623,3453 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/5e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002028.root,2.9368117939447984,3566 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/77/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002170.root,2.99628667102661,3486 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000038.root,2.9508605069713667,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/7f/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001685.root,2.9649625779129565,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000765.root,2.9628885709680617,3588 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/93/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001934.root,2.911974278977141,3595 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/7d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000111.root,2.8162545730592683,3611 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000210.root,2.801587065914646,3561 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000052.root,2.8834245610050857,3527 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000044.root,2.9344913869863376,3464 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/fa/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000871.root,2.8952855670358986,3535 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000254.root,2.8183316519716755,3600 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001674.root,2.8780713679734617,3494 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/16/84/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000008.root,2.9222174800233915,3461 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/4d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001167.root,2.8969324229983613,3581 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/9d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000917.root,2.8455339909996837,3578 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000324.root,2.8097135180141777,3462 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/56/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000050.root,3.097110377973877,3480 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/83/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002447.root,2.967841156059876,3550 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1a/82/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001610.root,2.8091422150610015,3513 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00003211.root,2.8445914139738306,3551 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000425.root,2.911433427943848,3563 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/61/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000078.root,3.099548676982522,3433 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1c/cf/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001319.root,2.8144811620004475,3476 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1e/98/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000080.root,2.8192993720294908,3522 diff --git a/bench_out/pyprocess/mw=4_proc=True_branches=reduced_file_list_perfile.csv b/bench_out/pyprocess/mw=4_proc=True_branches=reduced_file_list_perfile.csv new file mode 100644 index 0000000..71a75df --- /dev/null +++ b/bench_out/pyprocess/mw=4_proc=True_branches=reduced_file_list_perfile.csv @@ -0,0 +1,51 @@ +file,duration,n_events +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000974.root,2.868468470987864,3556 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/6d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000547.root,2.874513094080612,3520 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/01/18/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000552.root,3.0404889370547608,3524 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/1a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000087.root,3.102166887023486,3477 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/fc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002561.root,2.8675856770714745,3573 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/0a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000284.root,2.856005155015737,3631 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000123.root,3.066718526999466,3516 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/90/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000323.root,3.4080669379327446,3512 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/cb/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000529.root,2.8332980789709836,3498 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/11/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000797.root,2.9376322890166193,3496 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/31/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001883.root,2.911904159002006,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/39/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002047.root,2.81158023502212,3561 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/f7/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002266.root,2.8743410049937665,3527 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/de/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000016.root,3.022531625931151,3521 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/09/87/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000393.root,2.885928230942227,3511 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/64/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001940.root,2.8785038240021095,3609 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/c9/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001373.root,2.92197191901505,3517 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/e5/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002824.root,2.9046560309361666,3560 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0c/8d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000217.root,2.972751836059615,3423 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0d/b8/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001588.root,3.1232201209058985,3502 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/3e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000473.root,2.8702340580057353,3507 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0e/6e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000181.root,3.0086214779876173,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/7e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000092.root,2.817356667947024,3577 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/d0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001507.root,2.8828641559230164,3671 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/10/47/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000549.root,2.9248396020848304,3453 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/5e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002028.root,2.8460203669965267,3566 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/77/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002170.root,2.8353631460340694,3486 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000038.root,2.8080781139433384,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/7f/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001685.root,2.817204693099484,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000765.root,2.7967484620166942,3588 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/93/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001934.root,2.835564848035574,3595 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/7d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000111.root,2.782410605926998,3611 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000210.root,2.746718918904662,3561 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000052.root,2.793725732015446,3527 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000044.root,2.7742606879910454,3464 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/fa/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000871.root,2.7984517510049045,3535 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000254.root,2.8152522100135684,3600 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001674.root,2.895103420014493,3494 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/16/84/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000008.root,2.8698468590155244,3461 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/4d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001167.root,2.9444753379793838,3581 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/9d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000917.root,2.7796848400030285,3578 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000324.root,2.865489042014815,3462 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/56/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000050.root,2.960981345968321,3480 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/83/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002447.root,2.845331173040904,3550 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1a/82/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001610.root,2.884129959042184,3513 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00003211.root,2.8332176220137626,3551 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/61/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000078.root,2.8408353499835357,3433 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000425.root,2.8401076029986143,3563 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1c/cf/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001319.root,2.799782087909989,3476 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1e/98/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000080.root,3.048037661006674,3522 diff --git a/bench_out/pyprocess/mw=50_proc=False_branches=reduced_file_list_perfile.csv b/bench_out/pyprocess/mw=50_proc=False_branches=reduced_file_list_perfile.csv new file mode 100644 index 0000000..7a5739e --- /dev/null +++ b/bench_out/pyprocess/mw=50_proc=False_branches=reduced_file_list_perfile.csv @@ -0,0 +1,51 @@ +file,duration,n_events +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/1a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000087.root,19.8899133290397,3477 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0c/8d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000217.root,25.85641659691464,3423 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/5e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002028.root,26.91870216501411,3566 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/0a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000284.root,29.64838539995253,3631 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/83/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002447.root,30.167965959059075,3550 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000123.root,30.258436116040684,3516 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0d/b8/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001588.root,30.76949017297011,3502 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/e5/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002824.root,31.236751794000156,3560 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/6d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000547.root,32.04132304294035,3520 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/7e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000092.root,32.43506079399958,3577 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/d0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001507.root,32.438590571982786,3671 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/64/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001940.root,32.823379139997996,3609 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/3e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000473.root,33.14481803693343,3507 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/4d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001167.root,33.4221856900258,3581 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/10/47/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000549.root,33.46978838799987,3453 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/31/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001883.root,33.49795593507588,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000765.root,33.46645975403953,3588 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/93/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001934.root,35.00665214797482,3595 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/77/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002170.root,35.41430088400375,3486 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/7f/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001685.root,35.713343638926744,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/cb/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000529.root,36.08257911296096,3498 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/de/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000016.root,36.090960346045904,3521 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1a/82/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001610.root,36.01570078195073,3513 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/90/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000323.root,37.02024409396108,3512 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000044.root,37.255391577025875,3464 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/16/84/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000008.root,37.50649220403284,3461 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/39/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002047.root,37.84397727495525,3561 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/11/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000797.root,38.12215033790562,3496 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1c/cf/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001319.root,38.238032104913145,3476 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/9d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000917.root,38.48693552601617,3578 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000974.root,38.56106757395901,3556 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000425.root,38.48449136095587,3563 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000052.root,38.75148395297583,3527 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000038.root,38.96802655805368,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/61/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000078.root,39.114855274092406,3433 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000210.root,39.17537330102641,3561 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/fc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002561.root,39.22697399300523,3573 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001674.root,39.54253700294066,3494 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000324.root,39.53523384104483,3462 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/fa/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000871.root,39.55287323403172,3535 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000254.root,39.55308527103625,3600 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1e/98/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000080.root,40.06399601395242,3522 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/09/87/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000393.root,40.166982286958955,3511 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/f7/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002266.root,40.16937141807284,3527 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00003211.root,40.09027114196215,3551 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/56/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000050.root,40.240871008019894,3480 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0e/6e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000181.root,40.296574735082686,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/c9/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001373.root,40.30684503505472,3517 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/7d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000111.root,40.36790279496927,3611 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/01/18/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000552.root,40.60021472303197,3524 diff --git a/bench_out/pyprocess/mw=50_proc=True_branches=reduced_file_list_perfile.csv b/bench_out/pyprocess/mw=50_proc=True_branches=reduced_file_list_perfile.csv new file mode 100644 index 0000000..8666783 --- /dev/null +++ b/bench_out/pyprocess/mw=50_proc=True_branches=reduced_file_list_perfile.csv @@ -0,0 +1,51 @@ +file,duration,n_events +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/e5/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002824.root,18.731599915074185,3560 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/fc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002561.root,19.24228046205826,3573 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/c9/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001373.root,19.28795302589424,3517 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/7e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000092.root,19.25483093992807,3577 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/5e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002028.root,19.331241489038803,3566 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/10/47/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000549.root,19.56011945893988,3453 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/1a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000087.root,19.633814021013677,3477 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/64/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001940.root,19.556603090954013,3609 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0e/6e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000181.root,19.656091712997295,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/3e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000473.root,19.708974411943927,3507 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/83/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002447.root,19.802945293020457,3550 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000974.root,19.850943850935437,3556 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/0a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000284.root,20.02791606390383,3631 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/77/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002170.root,20.06527192890644,3486 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/90/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000323.root,20.37349378305953,3512 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/6d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000547.root,20.35926292394288,3520 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/7d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000111.root,20.362998035969213,3611 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/7f/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001685.root,20.44120099209249,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1a/82/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001610.root,20.460701234987937,3513 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0c/8d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000217.root,20.48327198100742,3423 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001674.root,20.534912063973024,3494 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/01/18/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000552.root,20.559474122943357,3524 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000324.root,20.579376932932064,3462 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/d0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001507.root,20.647022960009053,3671 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00003211.root,20.631808735080995,3551 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000038.root,20.66671903897077,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1c/cf/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001319.root,20.642538312007673,3476 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/31/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001883.root,20.68447408801876,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/39/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002047.root,20.750039124977775,3561 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000210.root,20.70632714498788,3561 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000765.root,20.746297867037356,3588 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/16/84/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000008.root,20.74007752398029,3461 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000425.root,20.74144305998925,3563 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/61/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000078.root,20.793192095006816,3433 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/93/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001934.root,20.80961848399602,3595 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/56/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000050.root,20.78641749091912,3480 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/09/87/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000393.root,20.839068036992103,3511 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/11/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000797.root,20.87471614300739,3496 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/cb/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000529.root,20.884019001969136,3498 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000254.root,20.87586182099767,3600 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000123.root,20.89731985400431,3516 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1e/98/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000080.root,20.90305270603858,3522 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000044.root,20.931804125895724,3464 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/f7/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002266.root,20.976382975000888,3527 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000052.root,20.977228892967105,3527 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/fa/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000871.root,20.997103486093692,3535 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/9d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000917.root,21.015753900981508,3578 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0d/b8/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001588.root,21.045943491975777,3502 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/de/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000016.root,21.072085362044163,3521 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/4d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001167.root,21.07456724101212,3581 diff --git a/bench_out/pyprocess/mw=8_proc=False_branches=reduced_file_list_perfile.csv b/bench_out/pyprocess/mw=8_proc=False_branches=reduced_file_list_perfile.csv new file mode 100644 index 0000000..158e3c2 --- /dev/null +++ b/bench_out/pyprocess/mw=8_proc=False_branches=reduced_file_list_perfile.csv @@ -0,0 +1,51 @@ +file,duration,n_events +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/0a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000284.root,3.171469829045236,3631 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/6d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000547.root,4.054399640997872,3520 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/01/18/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000552.root,4.172849890077487,3524 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/fc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002561.root,4.338186266948469,3573 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/90/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000323.root,4.455360096995719,3512 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/1a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000087.root,4.467225012020208,3477 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000974.root,4.468623794033192,3556 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000123.root,4.703505320940167,3516 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/cb/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000529.root,3.1638948440086097,3498 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/31/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001883.root,3.1360885159811005,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/11/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000797.root,3.82542864093557,3496 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/09/87/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000393.root,3.6848747439216822,3511 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/39/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002047.root,3.929915383923799,3561 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/de/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000016.root,3.973431528895162,3521 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/f7/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002266.root,4.051404847064987,3527 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/64/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001940.root,3.8969771190313622,3609 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/c9/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001373.root,2.9590517709730193,3517 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/e5/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002824.root,3.096806430025026,3560 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0c/8d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000217.root,2.885733235045336,3423 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0d/b8/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001588.root,3.2554447470465675,3502 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0e/6e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000181.root,3.29149150790181,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/3e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000473.root,3.2791527879890054,3507 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/7e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000092.root,3.50373663904611,3577 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/d0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001507.root,3.681745574926026,3671 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/10/47/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000549.root,3.122178927063942,3453 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/5e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002028.root,3.0663525589043275,3566 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/77/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002170.root,3.0449794509913772,3486 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000038.root,3.227537009981461,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/7f/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001685.root,3.2604956690920517,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000765.root,3.3948130189673975,3588 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/93/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001934.root,3.380471811047755,3595 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/7d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000111.root,3.3377677800599486,3611 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000210.root,3.3050342900678515,3561 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000052.root,3.0342079700203612,3527 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000044.root,2.990539292921312,3464 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/fa/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000871.root,2.9324453169247136,3535 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000254.root,2.996874734060839,3600 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001674.root,3.293995457002893,3494 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/16/84/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000008.root,3.265133130014874,3461 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/4d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001167.root,3.1376269799657166,3581 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/9d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000917.root,3.2245363499969244,3578 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000324.root,2.954013142036274,3462 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/56/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000050.root,3.105989998904988,3480 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/83/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002447.root,2.8920030259760097,3550 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1a/82/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001610.root,2.965257867006585,3513 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00003211.root,2.9390539780724794,3551 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/61/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000078.root,3.040355121018365,3433 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000425.root,3.0274660530267283,3563 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1c/cf/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001319.root,3.0337813809746876,3476 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1e/98/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000080.root,2.917209301958792,3522 diff --git a/bench_out/pyprocess/mw=8_proc=True_branches=reduced_file_list_perfile.csv b/bench_out/pyprocess/mw=8_proc=True_branches=reduced_file_list_perfile.csv new file mode 100644 index 0000000..5f9856c --- /dev/null +++ b/bench_out/pyprocess/mw=8_proc=True_branches=reduced_file_list_perfile.csv @@ -0,0 +1,51 @@ +file,duration,n_events +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/6d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000547.root,2.906557390000671,3520 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000974.root,2.922790179029107,3556 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/90/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000323.root,2.9361027649138123,3512 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/1a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000087.root,2.9811026179231703,3477 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/0a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000284.root,3.0583677450194955,3631 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000123.root,3.0761655380483717,3516 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/fc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002561.root,3.1049272939562798,3573 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/01/18/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000552.root,3.211867979960516,3524 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/11/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000797.root,2.9248460269300267,3496 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/cb/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000529.root,3.011219015927054,3498 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/31/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001883.root,3.007469098083675,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/09/87/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000393.root,2.8696071630110964,3511 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/39/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002047.root,3.0275272330036387,3561 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/f7/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002266.root,3.0015845509478822,3527 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/64/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001940.root,2.920918432995677,3609 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/de/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000016.root,3.4022533500101417,3521 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/c9/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001373.root,2.8682393910130486,3517 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/e5/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002824.root,3.009980870061554,3560 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/3e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000473.root,2.8908316480228677,3507 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0d/b8/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001588.root,3.046885560033843,3502 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0c/8d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000217.root,3.109989390010014,3423 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/7e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000092.root,2.956143300049007,3577 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0e/6e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000181.root,3.1960880419937894,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/d0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001507.root,2.99085721001029,3671 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/10/47/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000549.root,3.1624946660595015,3453 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/5e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002028.root,3.044373508077115,3566 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/77/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002170.root,2.966567530995235,3486 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000038.root,3.053271007956937,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/7f/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001685.root,3.1119826599024236,3544 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/93/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001934.root,3.0211322869872674,3595 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000765.root,3.15021265798714,3588 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/7d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000111.root,3.0488000490004197,3611 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000052.root,3.0655315050389618,3527 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000044.root,3.0428772289305925,3464 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/fa/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000871.root,2.965890350053087,3535 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000210.root,3.2328642240026966,3561 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001674.root,3.0378693300299346,3494 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000254.root,3.167553409934044,3600 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/16/84/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000008.root,3.189956536050886,3461 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/4d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001167.root,3.068126806989312,3581 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/9d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000917.root,2.953767859027721,3578 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000324.root,2.9152305589523166,3462 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/83/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002447.root,2.9739187449449673,3550 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1a/82/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001610.root,2.874075887957588,3513 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/56/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000050.root,3.114980246988125,3480 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00003211.root,2.9161281590349972,3551 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/61/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000078.root,2.996865515015088,3433 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000425.root,2.953255503089167,3563 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1c/cf/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001319.root,2.8834080790402368,3476 +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1e/98/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000080.root,2.873636726057157,3522 diff --git a/bench_out/pyprocess/perfile_boxplot.png b/bench_out/pyprocess/perfile_boxplot.png new file mode 100644 index 0000000000000000000000000000000000000000..6096511ca31b2dea66b47fc40abc9ec5dc95340c GIT binary patch literal 32048 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 literal 0 HcmV?d00001 diff --git a/bench_out/pyprocess/perfile_cdfs.png b/bench_out/pyprocess/perfile_cdfs.png new file mode 100644 index 0000000000000000000000000000000000000000..b127d84c65167685cee28d37b01b49c135556b23 GIT binary patch literal 71189 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 G`+ot6K&}@6 literal 0 HcmV?d00001 diff --git a/bench_out/pyprocess/perfile_duration_hist.png b/bench_out/pyprocess/perfile_duration_hist.png new file mode 100644 index 0000000000000000000000000000000000000000..7ab94a1cd7ff8fff70b9a11869ff7860cd22641d GIT binary patch literal 31798 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

    {4=Yqw>e(hL%W@dEI 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 YFW&x>%pCO4g107cr&`v3p{ literal 0 HcmV?d00001 diff --git a/bench_out/pyprocess/throughput_max_workers.png b/bench_out/pyprocess/throughput_max_workers.png new file mode 100644 index 0000000000000000000000000000000000000000..89e98e510e272ac924b1c31931e5bb9cfadf671a GIT binary patch literal 32060 zcmb@ubx@UE*f+|i8v*GQ1e8wcP`X6v?(XhZ0i|0SlfJk?DcS<*B@x15#=9@YH zo;~9@Za4S7?-keetHt+EA0;tRiBVx-U@)Ym#1vs*V4GoJAW_JO;2k-Es#x$BpR>5S zvyz>uvzvjV35>jfv%R&Qv$cgGrK^dflZBlv2QwQhGY=!BxwEsq6CVqU&HwoXvz?C@E#%ix&_CY-bti->{OMz*%iA`I2@%gPWc`~23&a0m-Fc=2)} zHvjjL3BnT`@b73PqyJw&(B9S6RcvxNS7RA{C;W6@C3?9~pp>V4Cw#Mkn?mZh{x_VE z+m^Icugx}gU8#LAl~*Z^f4G7fdxb<#jdpl1EUEuDZir#*>NbtjyEb5o2c{N=R@x{b-;=CU} z*&WuzF77Lgx*Y|$EhpZ%dwQ;&Zual}E7fT_IqAeQyUc55!4f=wF_gw1%+J;=$==6u z91X8ErpIAA@M)Mus}>!D{hUD$|gcoJ@A{aYG z;iu8xl9P>Jzrr`)pZ4zwCR|BfvN>)@Ei`*@^jmH6I5Nv8v5TiYIg*Nc(JG{ed0y-l zoDDB8Q%n}Ab?=w8*{V`tN23s9e|`sth(2&c{BMr>jOfGLWa;>rAdD^ zh2Q;W2DQ>u)f^c-CP6_#r}?Q8EvxqSc1>mFxXUgAz5MA?t-6n);o*~g2~0)bzJ0S$ z%9R^cEmqGG1ao28))|D+@4(o=<$AgyUE>SZOVWPp%@#>bsbnPioL$>P?gJQn&B;QQ z8ZaA0G6Zl;A%xPp3Cct`6&!G?y6r3EsT=F`$05>%8H=HD|p{dCV zOZfhTY~F}+zdM4g=qN+bOV#VBVSA!cJQUvotVBgwZ|~;b)`-whrEUriQ@MnTv2K&T zxY0(p<5KeFdIwQ76qHe7Zrfre^>UGmfA=?MHDLNIkuXW?*Ke4Pqnm3rYb@ugEyk;b zAFo9ptjGTTTkkINjlOcbIo;H(G9Bb(VPQE0KbBOMXw-5(CObDQ{8W7OblT6NIbEv5 zML|JvIFcorG*3fAV{x%RJx#A#oUha5DqrHYUsA`ZrlvMowiRZ8JH8mqr;54Mx zxEIGoNTQa3wkp6z1e+(Ls>4Ok&ocbA7s4@|?o4OBkVcTpK$e?qWLuW+$V zy8IJEP+y+79?Y=yd!keux4_%~ZI3Iy11qZ1n&0!>yvDabfk|UZwtRnW?H8GlH;*2~ zPC_CG9~(Q1%Vv(V-!)GmV@g0kKn}4Pr-uk>TdU4iWuIn-^$1CW4id_S;%o8{gh3)# zOIPQw<_(_HGOhV9Db9q1ghXM+s7Ro~Y&X~~lj~rO6m{d&Zzrw_#`q9Q*>7)c*Hw7vxl` zQl!coVMBUSs#zoRz=-owmer2cpacHGi73zz?nZ>NEdFXpgj|-=`(kgBalS9OEi*II z`vMJnkw}R+BwvKj?I?BAVX@I=@^E)Nuc|l^?Dm$cCC2>?Lmp{f^RaB{h?lV6;VShQ z6A7eq>fQfQf$bY_;?v-`X@9lomf{`my?DH}m0)%!o+0E@DR8vdRM!}fc2_JvhVYtc z6)eF4ZMt1V(4clkvc7m~H#nM14##X!>P1q3%CFb`MyIj*R&$Axhetg}qDSp9hS-2o zugUEA_xZVV^V8$q-a}m3@#5m*WQli+-^oflV|TQx%v|qUSE$Num*CYxY|@cIsZ2b5 zK^&T>UojYi98D?Df!{uQFjEPfIBNbqk85THM;NJA$L3#l@Fbdkvh5e$@|z{hEqGyC4QsR;}3=I0*}}0 z*B8@z9OJ4X`75CBeh&Eh^{cT5<4rKt+qZ8eS>qSu8Pw!Tx#87Ly?qI56SYSU5zOMPPSG3hC2aXlnXVAKeFe7G}1JO~H~P_MI1L#=#0tmLSj!}44~ z981oqAhxbJ)uwtZ`(L%yO-|NAS=I)*m&L$tR%ty*VA3kLnSU4Wm)ydFLBY8p812(z z6)x=jQx)%Qwj39sI!0-d(jXG9iXJ#)}*=IEeQ{kmr4?J zB;2;C`}x`0%?Uq$<_Df)Q%mH-v{FKjZ_c(WT=rG*^ktz|giP_7p8|CoX8P;B`O!$6wdfPn`WU4+A zI9)1wN1XDW>7!Yz+o5DGSp*oH`C64oj7dD>KLbC*?1_t1OOlCQ;>!}lrD>2+h*4!> zNsVxviRnp^i8SIexxM%|_je8)Nu*nGQGAWX&bul6l;bJ0e|?45&Xs!V-PwD3yb@N~ zo}P1w-E_mH&9_xre&*l0VHLYgkoA(iz#a-29B&2R8CIM-%+jzxqq zBn9YHzwZ^XX}GvlRM21jx;G+wen6JylR#9?jeQ%UZ;X1a&8RW0kGEFnB=6+n@o{nf z$h_bHr6Yd(&3v!gY$!fcU!^dLr!jkQUWPC6b8)Blp#>E-wk&M(CNQS#pGn*~=zaD3 zrA^8(58ycpDYH%b6D&zkT3-h%w+1DUDxvV0oR7XBB#9jr{&%yTVFdMu(7%cG*J(W+ z3Wu-5*^m)V74*Va%KJEY+Po1ivn;LozUv3xqpceW2jN5&nc}!B# zY==pE2A{`TKTT=b6=bRi_4IgLfz?(}9d#ddB`Z_ya=fH-Q2~EaX?Mem&#avfYs)*F zqmX@{?0p?`DO129txzBPN;D`x4y9K(@l37tbJUgY+?#DmY&;Qif*S14Y{nnsgED+? z-}ZYd#iM4!ij-*9$Q?=2zd1iz)QbNTBZI1lFH28Is7C#Qjg4(j#{I1wty=Zf;XHR0 z{rk&8Wbp8l^lGKWG9J>>m7oM$0pvAG%xNC=JI%4UnVz2T)?heYP!j+MzIUG|hCe11&pddbJ*#TMPjt7Nf?`@Wl1or`J-ONv{F z!O>E5lub|cwH(X-{?2J@K;SB6-s^Qd6S?Qkt5~1&0gho~p#&Tw1)-a4d~)*ALb7V> zSw*cj-UD&=accA5|;Wg>Ixs_F<~uD~)<(;Pxp#k4dv~%Zu{Yy;$iO<)6N6NyoS5;k@mD2@P?HUgyZn6K4b;aBzekPm zBOL7Lbwe3AY+i($xhv4Il=K*6AG5U=s6C1u1112du-o4PtO$c`g@!7RlHggDxAN|X)}9v(_e-Q(ckfQ*J_Bu&O( zC`^EH$#FNEbmDC)%#Uj(lz|Iy*UCm(u0b0vVzWe!{p*<;RcK0TYVqZvHC?8lfpAqu z8p^QQWfjNj&46!hTwrcG`|b0WQRV#wC<(k$i9vk>FGtIPRhsAb2S`53%ZoeQC5?}b zO}L0gxDG}I2O}*kEEL!J{YNY}lwXesdYopX!h~v-Xx=2{=$23qF}!&B@@q&4a#3~K ze=L+&WrP41_qPOEPFVc!aA*8WGX({O;HIV~QH18?+*MG0L&C#VB4rbqZT=atuF%Yn znZV?6!*Vl2Xk;LpS}>(kcQRkV-KD^L;|TPIX}7kvzWGSXwSp%kB($d*xO8%2ADYMg z{DZvZ@ak-+QuQaxjsEN+cUS?*X*WYJus^q&7#rtnfp5J`|MIWp0U~}H#YA?3pW)zJ z*{1LI{;9aVR4Qb&EOGmLNC;}rs00s+s?RXtNsP@Hp|LSR@^?DBGA%aEHnQi*tU_px zrBjdqV2C5{#s<(j-=~Kw?K-_C*OFVYC?8(uolnuVDW~rpU8^DwOtT;;+ZXfCtAJMv z)6UrVwb1nnoN}qQhT!Al-SKFSEWyEC4carwx^M}`qELlYzE@XQkFHKc6=D8Vwc+|q z-Xj2h-J5vZzkapkr4W7#(D6+Kq)dC1?qa?NBE^MRRf|^VDhuZCAV#~MCYCKKHkZ@5 zZOn10*`wa$ELX;+J{A#!IKR;bKrspc$ep@vloS=Cz{><%v3OQ9G>edvfXw;xU?xIb zKoCD&o|Rt<+~SSSff>Jmox4y~hK&#AsdueU+w9pf25&+^&WCTP*UL|ji6%M^w-;=# z2kI_*w*B!8NPt?XOdT|Ar}r;>Gzaug*- z9xl{4Z5PzzFJsj60VOl7yPGIbvMjGK?v2^=Akx;ZwNCOp+M6ue8PAKnozlM40Yp$P zLrCzfW_u{D^LM0Bp)Lsy&ab(*xW0txiR+veV`7JDzK>1Ety*L(WsiM_J}!mWx)pB6 zx_B#n6Yi&o{V0l6rt-1#eI(EIlhblSs->XHY*_Vu*~Vopn70ipTDhP8fMso~QxFj3 zMOavz(sp%s7jakc;6Yn)%S_8&nQuDrPVIlu$4D-s(;l`#XtfE=-iut37$?X)LuptS znjIGZ@-X1*N-L0&R+eF6tQafof|Y>9=77*d))DK4~74 zl;;yd#%c2(avWpVoe>DX+mUj>N?Olj&bxAND<()uoLsE_ZACYEXQRtLdmXRq0pT-x zMZC*qOeAfxnl7c+zXv2}!pI{HJ_!K7JkLcyXjT0G<3x7fjZ{muEnJ&2Jhq6qIMNRE zBAiZE-s3Iw?Jv8pV;n5EQGgp!fgFOzj*g3q)7Y;EFvxtiGRL!I;xYcZ(C6;ba`{xq zZGQ>_bc@%fgULA&6#$2F{j}Kg!LHQ3T?H+eSEA13vcAK9bR(^nW9;o|!S?ONzIwg= ztJb?CewPm$_~)i{8Oj?SH8iqviM26Mb$mFY)%aO;pnxRMV9h9Q494nf3cX@md5G*^ z(6#5SrI*#SfS6aM}OJY#lv=<9aX z*+mt+H~SAlGO`j0#qi$7?F>J1YRQO!Q;do*xxQsTB9YklbqDPU@Sg1KUY7?NT&Gr) zzpLFAT?m%^o*wvXEx?oza+<#Y`cbxo`ZsND7KiX`>%KQT^$zRG&^NzxgZ86TOEkYl zknykm`HoBf5gX8S5kS`}O#1O%tckedu?>h$`qNPjJ~r)776k)VRD`{CkgfN6B>wZ_ zf$<^$hsAS7Z|G?MrG#DfiR6Uw1P28beqI6Gf*Q!7bsRiv~9iO8f_oo&0U)K93JJ4pYaY0*t<|P8VR*3a;f$9GmKc|bT zgXMb5*aBB$J(frs6%oVmXO8t*289!7sS?ba9Uep!#b5*yrh8YC;J+>cYKOWyBG?!E%ynp*(M-9>8HT3?9s<%&|ED#{22U}jv6 zj6QE6wFg?a*B{3bNtQ^Iwxtb*Nt)2zt2j0?f66WqS`Bo{;X7M?X+`~_Af0(rhzX}-P_X`IV*_f2mVV`7=D&Z#>REs~o zrH-L`^}qlZD?WG>M55>S;8LvDrt3rYN{=Coh(ls?U1qG>{jg?wq|NVX;E-n7^xs++ zkLP)QA4l{y4aVB6Sw_vO!h4Uox=(&uznzZSO9Q+Mt!A*?ZIMRSc%hSUJdHTljYKEi zgp|DLWFN)EJYqx`X=!Qur#DXV8Ux@X)A-%~W=qE^AG~^tj1wv~_hlpf@87?LcA4P- zLLgUp>Yggq*)6Bvs0Ug}FBa>zc$St$$014oi;IJYlYSLdc46{Wy~n(GV-;@iN~Vkf0`dmEwyZCY zOPR*~Y>=BnQpltQJ~&1fXv{^9hBT#7oNza{dWcKLP%8+IUFhXVodC!Uj( zZb?|O3@g)>iT+0kJ{qQ1+%brh4pF39f$}KHCL0>y0-H)wM(1GH}u*njW= zi8sD2MXgCPg0w)w(L}2uK{}lSe%!9*B7wLoenzI%;_0w%nLQ)+p%1x!0$lPAx?H_e-fN~N^${S-cQYqCdZq=m<75EZdS-)YPJ(-@kvZ%eI(X z#Y=woPGnrD^p^$EF2ZpPH3OH8BK1S-Uqti9w^!zgZpgO-Z&4fmr-;Atwc0}UarJ)wzy^tE6R+_TB@|SI@3xG<6Hv7fl{og~1 zp>~^6IHu3Q?#W195YwSAk2BW$rd*pcar&F{<<7@r9Rnk-rv6nLxF?P90PM+PTgmxFLy(fQ1OwX-iN3w3 z4t;}-c)0q#e$41qb-t;HCru#-xCO zxRn+C8mSz(N;1S|W#<@Ne`h|#iN&z0IdcLY3i_X6_+E#rsK z$QV_DUPfPjFPvSb34ovQPzkaI`w`TFAh z=gaAJM~F@hCiG+w`mhce#)00D-DbLtj*EN<`|q1DDMj-P#{V%~yIgs=FhrKf@7?ur zc2xFM52mN5?_JJR7^w=^QX7!z(s%5k3m!DpEw=b4PzQKM!uhpe9Hhe?Bq5P%qgH#O zm|vo=7*L#5;$lbpXjHHut|yX<$ay<%HI4-=5zZIT&P_AhOd5g0PY&EC|6B{H{|Fv` zM`ve=r<`Obwr*u<5naI9JcK|kQ&p{d$L2{u z&$aq)GpT7BfjSOsLK-EB+a&6SmO!xY=axgTsqN3USw&`e+P?L0^cZ)a4!ottpIm+2V2z$lZZLf=mMsdhF#H4ILYevjVPGv$zBp*u!W1SR60#!EgaK2ck39WV>9lN7M; zyb-PMad;Xqe~#hQ?@MP6TKU_RmuN|YRTLMO5Rh#5U=ZyieeKEiipb?}38&Q^oSiVT z-thf5v$lsz5}CL+(Kq#?!I;;;yJV-3l$2agb6aXJH|RV83U$gtcM^x$NgqR5CXi$H z9OCJp;$J*muSbqHx!Hx0^0J@tqT~X@BOEB@o%8dL;}3unU;H75H@t!?B^L?*7_m66 zOXGjH1WSAlr`l4WU^ByqH*<$O;)*`9g8~hIN(~9g-;t&dgijA5U4lYIiZ!YbpKU@w zUi^U*SR=&CtC90cDp}N(rS+N$5sN%*w#sZB5MxPD=RX7g2q3!aK5={CnTc*)Ix?nx z3sjEo;2cvYfxwu{R8cfcAgYF>O+6_F&N zU~7vyMqNG}%HBD&8;a{_^`J0w#0vA*!0 z5@H98iweIdUp!@gdfjS?DeNkedQVvUtI_Ft7m1jT5o2UlLxPcwx6m&6jJ*>R+?6sn z|G0&+AfWDSQ@$^bBgdWX)aW$wXw47Qc~yXnbK?82i-5;r?W>H^Pj(ZT(s?=>ngXCzHMJ36_aQTvy+wzl<-o2a)}$7K@kUKe{g%-$rzzRjMkzy&ap*e2&RAAzxJy`hy!WS+|?V%6r9oout$j~QS>S^D?yU*TnHj`WeNwRJH)tj)D$ zd%>e(_dT#Db1kY(yg6dYBTELyv@cQ zW_3GXbjn~J5Ujes-v>quEcG4w%j?1J3&RaPs{v>e$3xvwzxOuf8>~D>4$+$rHvQ*aIKrMl`U&oDLb|ay7x)-tyM>o|FyZ znU5d=(qMmec1yGq@q{2}o0aj0YL~C+2WVKRpiXQ`=@w38xlHxaGIsI9m|wj+8Nkof zloUzCw0E1~{-zZEFXB{Pupk_h9YOtP2Y zF`pjwpt3jAH$#I#5NcPz4;BnM=g3pV&3^d_z(Hvb@Y6 z=ZFmFeE372$6c8S-nl{5j5%H%4I-0;{OV4+<f}k#JdN=VleDS5W23 zB`F#o=2%Y>Z5VPPr4EghF4P;(9)fCV{&Mx(Uv?M!OYvNr%ky*PI)J;Y=PJme7j>%f ziHN>q30=bg_fR#m?dj3Wd3Ow<$@TC9=y8tLEKbaB2Q%2BLFny3PdfptfMKfTUQovKi|y(=F2a(?{=QB?t7*bs`k2O700Ts?LQ4sfZ$4OHD;} zhwQo;xJK1H!UKlb2?ZTpnYuZsySKL&85Ol75CLr@SDxeoqaGbKf`l6rL=uK8DZXdW zE9XaEJssTq}#&xY*F#>HKDnOn;0AG{~zg-)db{=+*bmSDvP~N+L0=J?p!Y{ zf`0gWyHLAVB%9PX?n=VPX$R^ai#!CQgCP-+AJ+@B8H!1TxqsaABfv9TjDD1m@HOFg zx}@u_jr#ms!T>}Ic-&7ie}oVG1B}cND4Leg&$?HjYpny{Re8CdpS?-e;>B~I0aEJy zA$oLC&-Vs_%PN_iw;4F&GVy)4lcfR)uO0w7`3eDs8o<2 zFRrvpX(B>OjNMmO&n=qO@l{XZ>MFQxxa|}fK3+ZTHm@fPCp7mp5RswMUc>y5vWzwN z+X;qyn93$u>7t6v=vnQT{+vD>WJHtzE8T*Uh+@JtLDevF4SVuF&O@usmHgzqe;GT> z_v88ds1JI z+uo1Vxj93heLq7nef)%O&(!GG_i=jI^~ZmTsknzwe_fNK0MT_!j>y=!L6NoEr0Mj1 z&HM}WzG3F&2$I%S+mX!o2|^=_kE~HXX{+@(NNFH+lM^g-F`=X}_u2v%;Yfj__c2FM ztyH@=+Aj6y&mC`|t{a%wo0mAO|DCC|ArX4Ice>c6;_p?7{;X?MQBgr}!2kO7pN&U7 zuS2fp>$Ok~33ni6OnkFdBr_-H!>DhorP9vZ3Z=;iP!y$ zY8)qjkI2ruKNN3jZph4aT4A++Y?-;v`POnAJlivG`_42FOJDQE@Q5V9I-re2Rwu8Y zOVkex7Nx$>0@mq8znnU<-Gks9$ciYyJpp+{xGJoBJ{CN3MK| zDQ{3pidOsGxLnXXse9U+&cBtyLszYaEH=M9>Td4H0TGEKuJwt%v2K zX-u>FLtc2E@Gj}$K<>w$cftcn;vW4Ak2E!uv)U5xjK>c~4I+ca+J#GE zOyzTt**uk5I|rGUQQ!~^jB2ct#()IW+WGFdZ$ig@K6N@s{Wo)D>FMwpG{-y5CfmVK-$)V1C!93ay=Vw2^bpmK(r1cCT zXy7t?2bakR@WxG_bP>N8x8Uua;ERFaobq=z6z6Ak7$h9G2r1+47eROs6MTgj2=&jBtuaY%{ldG(k=TC4+Z+?dgmN*}w;JDUcthWA(F)t@ND8{`${J#`x0o{-9x zYq-oLCMGTuIKSgHv+Ekt$r0ywn&WR!`JFGa9O+QJC^4W(a_^YM3+37^y+rGoN)rH9 z|EM#E1$cSA2V|1M5Ni(Y=63JV0jeWMI|p{bDUq0a}fRExza+6 z4?+u>5bWL+gp=&#EEYPdQfrF`+PgduMeg%B%K5(d#G-xR^Mg$6A?}R%-}nT??%OQV zgX^RifVS`Ci)8=6xw49+Y%{!6wT(vCC_mXIx!Vg}kPN7rw+0{lMb$~A93koEm270C zACK5a(Ya%L5#gW5;x(M!-~}t#hGg8=AL|Dvd=7(nj~G{KwVwd6Q}{q7JxzmgAVN~# z40gX0UR|Yea_%dTxM(p`tQ{I3A7ASRVC<%d#r&sEc&t1RB9`4s1w{bwVnCIa|Lmea zT>_lJr1c_jjf?D^oJ4_#2qK?(rZ!9;U)#rhR_r|Qi}*V|O|aP)UnNsw3fQfXirn3= z#}73!SC!kO-v*GDy&$Yb952pTSc}k3{v3;x8x1Fmip8bi(8y#0!Cp#MmO(Y`b^8&( z6)$jb*6eZNK+IUf#W)$lvMHRFC1D0#3>Dm#@(%QGZG++9hjj=(Z$HLm@P}5`+5!+i z3HwIlhZdCKEg8FP(r<+3slQ8ihvwb z906fT+Ww@jK8J)=^3u&$PjE$1f0C|OZMtUJh^@N+C-AABLru>RvuJ7&hR3Kjp|9V58AO`D8Y zX;~@0bDECiCd50k2_Dz5-A}N-*i|C8GBc&{xVQ*)@Wb# zS>Aw$(`C1-L}^eTgyg-=_RgPz>Ro&xkp_! zoDtmKrL-YVHQVij#3D8xF!1{p+iCon$=;|SAs78kr)MU+OmkA2ZhdOP1&U`+tNj-IK%^CD~@=RPC}hy`rW`%-F2) z@{0|XKeV*e3(F*cIInK?X&W@z4~L5E$?HGRK~EDea{7tS|7QSCLHspmEo`+)^3`QJ$;V-W^;Z}^BTXjk3sChg~P{yL=>0*H*2Tgz^pkR za@yN6tgN9<>{-ThA`;DVsccS`e@st2?D-hD6il}#e7`fcdO9xRo<48<-?%4%d)=(| zi+-&AAPW`lSQC8B+cYcb8ZP~lVYuJbm`;1q-&V=r604nt8sR-d5X9`=e51;LOa&^- zd&re+-GRCR%Oz_oDgI{=Zig36v&(BWIUPQc!V5y+T6On5q~{3KpW-!4xWvo7yq_hb zv-B<0lZ1>7WO%RKSj;1bBmmH{mzIV%b%Qg+I%T4yqG|$pjLJDT{FdGtxL(r?w#$sSfO)NhVCn)XC9V5!031Qs_3^g_v^Aq7VJOprxK-Qd zrQOrza)`byo?GlVhyCfPd@H}J%o!u3WcUMRGrs+LjL=St@6^;F*hB2!AuJEuYve0^ zY|urL{H4*g_9LV=iVix4$o%f%Wi^D@J5Dh%{i*72iV)op^wal-j(nbeO+ zF(OZ0B2p%lkBqEERlXfK;DY>}-|2RQz3d{7RDE8YoYtuiOLs%-EpVA1@*UP8g8T`6rk3T$f=22$f_jg=aykoR>&nMRWb$+9y*A zzS)v!NV~gaF0=TnQQEt5u$FO0{f+hj-B++_cr`q7+K-EvG}Y~+{ue}ysMORjkjh^R z=Ux&4%BQ?-;{S)*G?@1j-_;@~F}pso6dDGWs=E1jioTM6ux%OyWoqr4; zDK?Y}@byJ;-A1gH2sCP{x;<3y5t}@9}AaJAI<%Xh{x8zux6y+g&u<;hEe(4G1kC!zxy4LAfngi56FUWw zZM?5Dk0hvgsoD)mLEC=3Ka3J%U#x5fJ-HMGYGV6-vt2JJ>Lt89Gth2|k4Vn({wID_ zcyi|Gl<(_`zja=uet-Zj~Nwq__X{ zlm*TCs8Ij1+y`VlBTC>~Oul%Zbgty)ztFsn)-mGhhc~>8m7hego>$Q8RH||_yoENc z9Il!^JscPh>}^{f29Pg9goPoAi^9;ZD)^CAQ4fdD?wFzKtsb=)k;c zUUEiJ(X$Os+lAh9z^W{y0atcP0jW!jhr6p`Zvo&uGU_%Hg78uo$aPPip%E}E2XJf} zEPr^gIXpt>t5|T^A|_91Bucc)&NSVHVI-U*H3>x3+g$xfoWS7WWju{%h1I<}+t8%k zqF1SOL4ibmtL*33X$D=+n0fBs$^$bxP=1e7q>(! zG^xxAL%29g2m_CAmk|`))Qb7+QK+|%CHTJR-nmTcXD;&J-W4rF-YL|&gaRRpu%d}n z*QqoMc*Ld&-DRz}g_>_NB8p+gY+>JT22_ThUW^H2X?L77@JA+!?lQj}n+5$N}}_PgKJeKGY>5_v~SQB3YmU@jolIt;-VL?G4tTNemm?hlBa z!|#5WkEKYDq)5iuFjNpMtoz-b%{+|+%eEkz3_na?yE))Ml#UBTRe&Nv*BPGD#TEQ&~qg!W`>Lt2E zcV`di7%!c8hAMb@1z0cB%v^A4)|AMHBky@w)i!Ez_N}sYqHczU~X3 zP&zop`}7+(DjIcQA1-yN=kXa%>qE6t0~Zk<0=}YYOy@0(fMle6l=n=XAHTnJQDi}P znSeURZ+>Mpgg=L$r}+%r_g9JcTB~o0xNcoz$sC=KJmrw+>)^&>{V6;l+io+@cxmG+ z;R${sXAs`+bKY3q1zkF|!G2c>c4uMQF0pU8kJ6#Ps{&B3U<$rN500Q+J_jtI|GYtL?h5c$N%b-2M#GTe$=GBtDS)!B zb?aPPbo08f{oL5Uw9|z|d>CWat#2!Ad^)Q9^0P&nqB@rB^aMiwg#BioP^uMk;0RTF zt49DJa7?(RwUxg)-ZqJG$ysGKP27m&w#`=YyS+m-J05Bc)!Pox4@ zrw(4=D*EdkpC%`pbL*EVNnhn1V@)iLE0s=Ht)V#3Hgx-&a-lr#U0`T~f`b_bmigx@ zju9*Tl^7eZSgmAjS+lC_6ZQR7trocLR!C)1B(K}y2A94zItNV8bM#}p{}BBQJd8FfI{Hj zjCDx6<(p%B>oq9P%9vNd9F9&d?Pe`|S)zx?*`_-u6UB!!&i6k`Qp6ijN?^~m(A|+B z+qDp3A;fH&infrDH_KoxQqRBJ%d->A3KgjvjQ=;HnE60J;s9J!l@8f_eQx?0f}w%M zLA(s%DVQr2EJ>M0Oa6n$;5%i(^4|5B-jJ zXISn!DC6Q+rpo5jqTNH2ZmEKu1Ka$W)V;B3tw;#NK_ULrg3KTkN;H3Rtg#g`SJERP za*W{Lgk|qcQ*O>06>a;>OQPWnpjzlXVHVF;JK1#X-aqoRR=LD~CRQ0Ge7|ZLn41L` zSZnl*IKwgjhQ~RdXSCwovHY2D)QC$#b%To>glG%;!?nT6rpJ4fJ>Q)%KA3dqRIC~{ zZblei>FrzBtG!2(RXm)nzOzalhqd+HAPczT51o$hLlk60+bpykHWYt7k6?kf@Q72; zV@JQAAACaF{j%CiP$}J@{&j>Q@^TVy);>>dqBN?3pRCwpd3I2a6Pvplk_cY|0i|8y7p9O8f+ z1D*Z9bFFtEJlpkr`fO+96&`XV5yxM};4D~F1%Z6qD`PZwYS(_;SOf!3?|Ir*s&50~}5@KRs8{52Z z9G{Qx0#?%X>|wWfT|Ga;3luhJc<9K=4>(N^vEbX)v+lk1?pK551`{plu2pYwH-6tr zj0r?^Er~22*RI?$eRS1N)YkUD>xQ^tj82ni2*~NxhJlA6hS-5a!uBgrNc<2uU5vT_ z0bT^ z1h^`_m0veF)BP@q&t0#P^OuoEoT0-Cu##%C|MiS8$T6;hKmbS)W`SImy@SJhfZ8T* zf!z8WSV-VQ$D>-|8YrL2)Rw;dO++6Q|LMIQpm3Mzk=@W;t;yGT#=#&+F{B4m(+Fwg z)c4g}+3@^N3rb~LAp-}~pM%B%zz4Vn(ccvSQm6WNj&??WGr17bi$R+nO|u(qdia%u3gLljfu1lH1Ql$Qv3Vi){#nt}tV<0S%F`W_6H8bf1%^E3=0Z z0b0NiyB1^ky*8pH9g9g=_5EqE-rvx0d|t$KcgvHcuKr5*D^PxVm1f*B0p*j6CrzST ze{Yey<)y3ld|O3w`p<)~6r>R+TGl!Odq*-L;H~T;Eri|KrTp*72Af$$&>%jfx_8WW zWx(0$1PyhO1y?)fQ>ZBBq<(sw2u1A(qdN*L%OjbhXbA(wR?M<7V$nQOpgEx15B@_T ztVLZVVpC8k55YMSCS!#P+V_zB5VjQ;S76-_d#H+_3XGO}N0n%8loP8V|E-3&wf8UL z6=8K5{)udgN^j4cW^V9;EBM|ZP_S#K8fNMV2aY+l``7)1Z{{CA=O||LtFzCp{Fcq( z-q>K+^%x3xcU#ZMB4%cfZ|V~A>%R*IaG+;n-H+g^-_V{6zt+Esyxqe*wUcNil3vfI z784u#HNx8rya_QtB*7tkgCzWD71$-Fx0}i+m5tE>2df_}Rk+agt}H^boLu#L+XyB? zj)MgOANo10Y^G+rV}?I4{;%y^*0vcIrtK4y1^oo$;kZ?^a`6fUae>iO10HmIsVqN! zEHb{AYGt}zU$BHim~|ST&w3)Gu1#-Uy0#||l&iK>3wsORAkE?&m1&^HlH2*4Z6Ezn z;2&xqU&K3holM-I=Ku67&SRd76vq8#|IC{svHw;}hc7B7Q?E3g)yRw)C^)v!Q3hf;WV(P+K4tP3w9p_3dfH$GfXsXRE?>Ws2D1fSaeF6us9nHFPZtP^^5BIN)lPy|cU z0a4Hkb;iK{>|h+d+6rvM!cD;bq2JI5lusD?^FRNdIPVBrsRLG;#}PPmYL@PS_#B}J z9y6Qi0HMGM6wVT#TUb~)wu~1XBqG)zXE#QEKI^atgGC`k3WA(qLn8esng88HxA-d> z(T(#>ceI=A{#<5p;nc}qhv3i0VQF`d`ZWNl*mi2TPz-a{zzyf>V6>db4*&gQBtZ2MLTh`+N1jfvrllD=Z(rJGB$%$d+^pxs5y11yk z{eN0}>!_;Quislm1OZV%q(e$YT9FQs22nyfL_ktH1vZExAl)LRgfv^aLplX%q`N~> z`po5h|K8_$&N*Ye;~nGOe>sHB+H38#t~swczw`6GbnwOW6FITva6Thwf8tjhN!WG8 zGn6#gl|q}t2yG6wj3U@{_}lGZM{UL_EiL`DgfOBV>6ag9Wan*YoAQ@7tg7mbulGL_ zKS>wuzoZct`S@_S<#WYdT0T~c#B4#Yt0<9+Pk2c1EJAB29i^VHpniyud_Er2P~#IF zxp$;-+9~UKN3PZ6p6*8*fiqrn(bcdRyEtwWN0}h3Lc9~K3-_|LOq3RQ<#uu0IkM-{ zU)l&bI}SeKwhE@)aC4N0_N|>h@!mwbj$Z!RYC%^f?lcr@LKcdL(Lp>H9lz#&ipHI3 z3Z_XkaM#wR3=0p>*Rg}?U$^nQFwVz)WU)#E{64xuR_Y~ zaK_BdRDOc+Eo{Mj`%+>THE(&)?5xHM?bz8o{e!|EPz&75!5Lk;-XZO6-ostWq^Gz< zlq=IzBDo)qu47%o(e4TFPckEJf5A}liHQG+$D*6q=WVu(nrCv~{EohNyI>M8VGI5p z4z!uy=HuinX?;g2IO&d{DZH&9xbx7_+nxP-0$EZzw7>~R0cAnYz|d|)(`JsY`YIU| zDD}4kj%_b0dM?}Mg6t&g5qmz-W)HuE9qG>&Pm1*n0>918IQJ=ei=Hl~fF;UHPEV}l zbvy`Za)sZ9guPk(x%p$^8+~3h%F$6`q-#Dtkt^VH>UhT|S$)zwQ6FxU1V}~h(zmgd z+n0W2%EbJg*1`Ke!YRCsSfiKu{!FOBOayL5q_*#trC_4}CFnzItB;S5{~+FMOC!AO z=y5PdlC4v5^J9A)JA_WR!2&?@YF-g`$?ozMLbGhWt?>|WT5k2u*}2!NYwVGO#sSK?C-5|eQzSI z@xnOFRAf%(gScinPvvC@4lbzY8(@ZLa%stQ0F}Zp43LZdm6MZ`ds3Dd7#PoVbnCI# zV6>gne1K(FomtEcsySwTsUkQk*4lq)Cn7!USy~iAFn6hL}9-HZ4kzYA-B{Iw= zZOf8RnypY#bak4-i*OUOu5BgDV)ph%(?q=ZkJ=Y!VW3Ym4WJg%#H{2ZYcvQJdJlrU zDVS+NkUU&+@8^uRW?PqwVYvaw#-^b4q^N@k6VoN*A91a23X*RiUkyS8je738k<5V) zOnXwMwZi1tG|PnQDx|V}zh>8%6LIx#y6UXZGCuZ^sQ58cM&tCttft9CYpkQ^nRsJh zAO0SDs$NHER0Ov--O+8^J+m8xlyV^~{_-7muCt{L@j*9>KHA;gh>FqF|0onZH|85B zJSk*5iw#Oc^txQgU2Z$06ji1-A(Mlno`Z4B7ofM^k(cYRGGG=Fb52|MLduv}m_Lt# zi4jM{z3k!pizkbr<>t;(Z1h)_mQ!GUZ@RY_b9;kn#N{xrk|GpZr%gsW z2<=1=xCG19+IUQ<-_sXYHr9KedE)1qv=HdV+B(@aHb|{xkqxU-mA?C4P&{>X>(ggb ziG^z4ke1vQ?^ok*4jCKLC5sh&8iv&Wyz{AV3SVg z>*4JUv`oviSzDI#sh0>ti7|A`L|4b0CK^xnC(vK99;7g}6xIxz&no@ASb6qRoW5lc zq%dW>(Nex1$U5L zyHFJFpBLxvtVJbUY)JgcJ|FU2NGfMW`(<~y3ZB-JZ(_3n=g}!Fpx(fOT4~cqPJ^dq z`KZ$aP@0mlY8HO$)4xq~euG*^;=V5qmxlkx4++r~6km5^leztI^MV%7l35F^`bF%05Scbm6_-}`HGm`G=FDE?q| z{k%HYwS!}8b_3TL22%WChcvH#_Pd#;zB4e9%RfMS&Q0-5c(tE7NnqP)?L&zVMKwjY zI%dU)g3hA}Q!S2-jF;)u`Ui(y;)ZF4*Xpv~p)UV`=U$m)KBipyi4rHn+0bSj-)Loi zs`5wa3=R}auK^L?HU9yvGSo>q`A;F#F|V%69PvdgteM(37|f|(EHv&3?FLIl-{2OUbv)mr+jb z!b)zCp_%f$f$@o{N))G0ng^2N&{bJ{&wug_)ezG{c0o7h!XMc4JbL={8mu;{%Tuzo zcZsCqgx&cIUa}D@@;{Qq+{OK>d%cFOMCx>$8ggmaZ#JFcUS2#|yTRgI&d1C#@yVA( zX`EH8<|F;C>JLIoCpg*YOD!EP`Pu@eP3N^Ir1BgBS&g79X0^ESr#a&vra2 zg(p7+of9i5-sqRcKB<9^&1|fDnm0>eTqeq1BC3&4lbOiDzr;M6+BZ@(Gau>Ho->e_ zLAH}pNuj8SS&4}6c_!S#4XRSONMFh&C*eBpw_%z?TDy}f zVC$dieiSGrgR#uZ#<}BS8&*69^aK}%8d@sSdfd_VsK?#%4A3eK}3GIf^8wVqVman#W(7Jx$u zMJcIsouK7;v@O#9u$tvzsaWb;9to^6O&t(U6xs=04klS%)RgMH|e~p6g^zjALHOEF=jSl9G`KW?Qt)NPS z;C$7p!))Q(^fyPS`B6gsMN z`L$8XeoHFF;&J1plqLJph>)cZQ?* zyeycXK9DU4`K-Q7(=L89|D(=0YqVzb@LMA?nU^j+&A84O7cRhr!zGwLBuB=gd+~TI zhMsm-N=n4lWJzS%8s<`7w&$ID1gq@i%f-E25nd;uJI&i9GvS;TKNRHGM?xO56DXpj z&AiIHSubK|MeXk`W$?Aby`bz;qE*sf5#P%`zlqZlW#{H2s?kEL>lyB_mS64x=b@`uX3Q4&KG8peMgkV z=Ar&07i3pR?9zv~^YwhASySoY4zoXzc%82;qz_NkPSMB53V5~xYjr#qEn9O%q0wI_ zW**@r@P7girXtR7fZD8M+!2JT-h9{R7+Ej-3Vqc0^5yE?`@Afz!&Pqd+=B~@i-CSm zR7bec*OgLU(bFYqOS|0Hkd5MjuXAsBd!6HLCh&Ruq%mk8cCCnG6DbZ)BD@Gn!~g(qj%OU%_{Us_f6Wv7S-KKM1wdhI*{c z4;Q?WI^@vOGWTJpte4_6S1SCu(_g#grOzm?K>Vh_MkNO9Y8}oLgn=tpNBLokvtF}e z>)|Rp7L$YHKYP^nD*kUMn@K6R;`JsA?r%%aKIp)8RFTdacfq`3^nlsj7bck%3 zm6NT|=1INF#*@qkyjry|zRw0*wu~dC5AwDSk6T{}X-F?WHnH(h;b0&pm&_A;TMvU3 zO0VTJIa@Hznut`SIYujA+-5p;xLEKYz9|ulU4JZ8UC_qqenM3VSFZ*X^tS#}43I~i zEhc&B7TXnj?!y45+OAV0Xf0X$ncC3)u2V@%)-t$aVNRsX-jUB~_+`59rZ(Hgn!d6~ z(_HK=q#Qq8qdgTS^vQtsR#N=J<`zbOcY)1yxhN=3&VkliE;xhv%GYX-2oY_Xp*c+R zq^CsUJTS5WS)l4ZOgH;Nxko)y2TH9KyUAX>Q}2jECsk#G9WwM($6h9?mfDtzRC`Rb z$yTvs<*%S;Q5!{cybptQHy9Y3Q+Cw%el>9An>RDI;t17IT)&>e%-v#N zm!=S}RFD<=YTJo#O8htdok#ns?A}q4^&IBCcic_~6)AmXYLk_DX1?&Ja+W`G5XX#F z)B~N@ZFa&w*`>Vc`@NdM)Ix~f5_X`PCqG|}mU51c%AeKVQuuh!ADcK=?9u&8`KOk7 zb4%+VzVEAums~RXy_8A+v1Au7YAx`4=G*8^`>YS7zsd=ZE7d=G!$^{hmzDsFkmD`y z!xbJNOW1FWQvuOSnMe-C-Y>$eYm_TK#9`c33ah5DePQ7LsoA^LBF7 zW#x%s%&`jAQY7wV`{*T>QCw-qym^Q9k0l@`IBEM# z?_~O&6tN2a!aE|vgx87>)p@fqg*~!`WwBn*9Pcs+-gCM|ee&|&UVJccM?poWU%S$R zZ1Ifk^?ie;J2WHCj&)s}Pw0A4lcb)Dg zori01{@``_jJM;n--B|mx-)diq*d!HUl~6`ZS>Uy({slYwZR~dfdL$bx1L<%=`byg z+iz!#ThPREsD6`4bql1 z6oDzt`n(Fy{rS$=bTu?}H2^o=s@6BB>V09-LpxI?<3gI_HqPjDS9%4H?0~q8$P=v+ z-#Fi_EZo=JL3N*^wX*K`35{vzoh};L|8Wy)VjB+rlVY#M1J6VH;!DkfLVPOzbjBKx zToGJX31HIo{TaNT&@J)V?BKRm$@{p7ni4EYr}UuaSn;WoIjrB!r*a>w4)9Q84%F<0 zauO5s#FJAmof2bVS|;E6Q;o_M^82Eo#ITug-`5Ati1q8HU8i=EWYI*6BsX80>ZL(a zq{mW(?ZJ>@`25%k>*w$7-9JatloQ0z12%W$sf*PkoP~Ur806Aova&cYyApD|bXyTA zPh{(0i(@`10|P_4R=h&m4Y_c4*@qtf>qp0IyQUH^)mNy=Od=fx$g_6t8U4(D!GWS0 z!0R2Lu5;32n>Ja!5;@{(waZaCo_C4)J+M?*-YwYue2&PZ{q7}pm5ZIqYoXrb=_itLV+%nml#)+xQ+dWdXXo^_=OZrV*RA27|2gkvUAwOH4+N76w#BP z>@V|oVy+vlB-@MMk-OhJrBRu9rwfIu5o1WOaL3qS6M5$#HO=9)z<6x)hg{b}O+sg9 zetx-5mxVUrKb)E$Zo;mvt|ZI53S^t>zl!8i`DdHj+vQk?TU+&Wh{P2{{nyT>sU7UJ z@4o%?(}TOLSyuu?`w5PIreyn@?sF-v=Yk=mzp;U_aa5!u7&mt6=Tk$eBYV`G`_I=%k zL@Wc&*#r|jD`hg2uH(Krv<2hh#!lv-a0n^mN4@m3pAdz+X>aVq3WHC8k38@laylS#OB;4uRo-K}QN z!S5yuPMKP*6R)l{k`1)jIJ=f+P>yr6mptqO*@Vsc8ynT0t|A&fG9FYCAbZS-g+Q(F z;XL|nnS)tHxzMcU<$n6(S7Ve(Zn#%Bo0^4IrUs4IC6l)pLnETTuvu4Z^g5^?Zg>mK zZxTU70+F;-lBspY4!S&+Q1|M(rQ1=9O@AO>UDu;ngPxfyPx-qk7SOk*pi1;*kSF%r zhFfJ$EDRPZydwxt?lwAibmP0gE_n~P+C{0sA`mLEgiVZ;>5^rmGOkFD>tT*l=MFh8 zlk>Zmoli!Mzb$RJzQ^^CtXj(Y`DKp02j8qiUN5dE)!#d!9z@@=y&#-mN$TS9jQEf2 zITnp8+a-w-BToiiw3W|D%NQermc*18x~{h#u6dny6S5gD4&i!1!;4#zLcx1iyGV||ugYR`7P1Vb&Te#>b9+dtrT0r-e z9+gM+5c!(9glO9N0-i+4SUANdkz1irUkV(EAbS1aoGdcHB64RfrwXONOET?$=Y%{X z<3s8t2R9{hMD>lIh;IH>pI2-Nx{hJaOO=kRAFZggyS@5-qweINdfiAWre|i;RKaP? zC)l5?vMeH4UGOu=)Sq=ujZNUE|I~Yn7ytfoGkS7xY@z>eXLh=AY~af0 zQEor{CjZkM4ncyCv%eVyLlX{0CEiW06{3b_CS+epsZe4bI!|``m?t^)+A??R*zw{| zyyEpks*tHznMo!fmWeLhL{to45Lq1K&)g`}F!wbQk= z=Q~5sbgc>lUk@|}oP6RfK29^`AC+&d?ToN5Ei0QJwX#I>Sio1|{g=|fhbrN(6TN_; zi`C7%m{~5A6Iqw;vz+uYM%3rep=Zkt!BK6+Ecwr^&j*JhDKZv!JDGTs1u%QwH#3X! z{F<*>kjL!Nz&Kg`?l{l6{mUw-c7pe5SGk_yu4WZV(*Y^$wOKDC=jH!>RltpHXCRk2l+m8&Et15eaM0d|C zJUZTWj;LI}0PN~*;fwS8^{IaDOK0-)r&B$Dc8B+mCJth^ck^>z{}?^t|Bls*7Z3P& zI|}KLMCk-8wR?4JGk{aXpFE7I!ai?J8A|HxRH&06Exsqd)z(2Uy>MBNoyS2jeX8#1 zK|RZ0QLFZQGxvFkp&$jB4-?ZKZl}%lIt0^u$yw zW&Ji6-;*C#?LEKte(&sL)tcPcn)to-3*CD4I$LRESOR0k7D_fthhyh9T=AvTgEQ;gka%reXy_X`1QU5hnLhYyaVu+x>VANi z!_1_XQ-!R=-mV6Q&B-Clo0^~Q%IN4?kp(P_-nF)aH`9A6OMF32J|{0-tG+ybzh*av z{<)G$#UGFF=jV4@u}-h%YVuV)zP;GBA-;*4v%R}l=EL-KVEvVg4R% zX(iI8jkd$A9MhSaS^8RifoUbglji}n9;c>OjqlpNM?E;T4j0-S6iJk;&2AS8`EfdR zUv4sS5cSw?sI8@Y3e@tqHMn@~S_b>DaMti?6bex0yAyd=8yF_vPF&TnsQr=-&#Tj? z_q7za`gAt(i!8>->9De_^Oe0rnjWHWrbH~nP>YLW9#}8G+?ncI7gjH2q!$#dou*+~ zuXcab5+Ysl0P1Xb6srr6~++GD$H^|%A@d%idj281eH$QbP}cW2;SDS8E` z4=_7?4GMxm9R+FU9FRLvhST&p`s_`xgtuFyM`$y%#Hy_9Bq8-hnYgdU*k~0e)SR8v0? z-+j>*amV`7Lmq{6t&RN3=YhzHm|hr<<*`ZvZO|V`$U1+W&bEdl^bTlQQX@=Fbj>Nh zWB}X$;VcRZ72 z{rIrUO^m&x0b%aYMmRyzCDy^MWzA%$pQ*|<$)@85k7!jHAnm(llnLA41wGo%;HMYp`Z9uyLC zEgb!OYfDMak&r>-?o*(~i5y)mPrd5wPH)cXT<}6f`TMtjTC=P22vZa{`J2Zel`yjj z5L7`o5ot6A3WcAgHU{Ab75GyF&n_BiKXa;Q9w>4!|9j;>!IkH+9Ib`yzyHN;0jB+~ zIKJ?hpnouTFy`|C_#|1^z29P8eQ~(6wCq(Bt%o8DS{^t!S>B7g@uAJgZk`qrNYGVc zRVpcEKYV-1jDWDE?WAPeTT~B=DwPRt?0h1}==u>DvhMKzAs+)8_aF!8cQ(Of<`jz(+oF^+`si7qgYw^x zo-h`;NjQm`^Id+w(`~kj4{uKrdr@od<7FBDw4~a|Y`FXm@?_u#pGQ~8lm|@)++DU* zZ{&wf3-W>M4QkDe3A@&mOGpZzt9)QK|M!s-ghy_E>$1D|`vS|kr*-Y?xpyEVr?ch7 zb6%6*^2S(>`sZ$Ec?(O0O-&}cJA^>9f8a4xN9k-~DO!`??3`I1NRxl1#RK&y-M=Y>D&txkr9Yc3kj_rF&c7zgH^m z5{9n8msAEiZIZ0@=uGX2fzH1l7I}L^r1Bxo6&p?3wtp9nM)V@vf@8?(b;M9`DCb7|1dP&gX(Fq=t{F~0LqTMXO2OocXl zmxKWFUgU6I@D0;juCJGNyJeT7jc{LId1x)aoo5D&4p8`kTKfSMHcwx1UN#-htZyuT zm%hs)15cm0iZi8fA?IbY8J;TqC!@6!iuD9aRjINDzLPD0H6aLCO)6kCHaK)iU zHZA%ozhK|MW8{z8GRvEO%PYNy)wd?WN(!Oi-}O4J-gB@iH&H0vlKr)K9e0VwZRDDz z*FxT{zMM+G{NQ^D?5D)w*s~Gve;-GRh?XBz8A|-;4jMM9JpyGEJwHD==r2tA(g_C8 zdWkE=z?=2<_m>Nr18))Qi>EwKGPHufG5>ojDCbvrIsxUDl+Ts{3|HQQAHh_D>-s}@ zs;xl@CQ$v~N>?_X=akYOIsbBT;Ni%8pQH8Y??-_>`w7TxHfO`1ya4+L5S?9OQi$_S zPrognAb1dj#=UwKfy>NK&(B|SjkZ0ZbPMsa?<7ubS1b8vVUG*b!K{SA7#N(x0-op_ zmX*2RK&{{S^9#typ8?W=SoVB-*-6gpRT_R6X1MSa=gS+^fA0AFEWcZ9des4-Mvh>9 z#@zne#qIaBL^wK>)@ivfgL#mLkrDHMB7+SDH1H6glpKXLW&hMxVeZH6c^iN1un6wF zK^rr)nST29o@JuTP-FF93M0|qX(r~?3C9W?=PR>G_Y4Rd4E2nk0*0fA^uE;rMYx2sKE6>VGhNbKnNjrp>U2pw6%Vq0+S~RFz@6TQhoKv-}clC93*REYV zXMX%B+EZuGiqco7!a>2~R`#d1hfFIw_cU(&7cLfwaw)da5buFK$IPt{b9RdWvYmhJ zG73X^1^e{&keIMFx2wF-#y|6^l5iHO zr!r&j{r;`^W&=Ejx?$LIs6Z<^sGfv>w5Rf#Mo>XE^86FWdaB{k2y3%`h5FIG_8B!j z_h+m@OzV9pX>5{e(YvUD7!%s~P!&hEy<$@aqj@_o*80 zn@=eI8UBii_Yd-lH4y=qcvQ1z$!#iaoL3J$XchH521VscKkFgQXNUpQpvouKxuk@0 zCI0mFdt*Z^?Mir5b=_b55go2Ut(N#Go5kBFJrbqmvs;p-qC$x_%ZW*5h_@K>QJ{=0 z;53lE7L?en*MTfi;!z+8_H8g@>>Ool`P-SJV^)A;gzn@A+C0R4uW;|AGP~xpcWqAH zm_$DkzYv2jD}oFfGG7_$xBVxp57AS<8G>*9Oi@x-~7RSp;6 z1G2DF7&%}*$E8XMd9PoN-1Oge4e9@D#GNl6@lrEn#B+Wn+H>QR8cts07vuwcpql^x zY^G+^dd}n%%5nlAKUwzq3TcmCyr2X6`P6b-7wJG9ijDj)`2_*5hgIWtUXN43!@V_s$U^@d9wNyb zvXCDQdx6UMcN2wG`b6WFz!z{qb3R%t=}&odNicDH13-k5&=u_4&^$Q#=KOn_r7N~K z4H9@~*g;$)C&z*At^N8a8DQh@g8ppukdKx13Vd2I;I62gwLXAhPPK4TGC6&bdy_?9 zL5`PoP9IoMLq+B!$QA^VxIjrhZ`me(7(~&VV4m?Dh=J-wW|4=F_G&S%PC|DkX2fmh zr_>)LbOEpC1;|z4_7a5|2d=b`ug9UnfV*K{23W3<&{5eYV9(zJrk(;kcz`K3VFSY# zZih>0K*@R`qSfs~gYpG0iS&ufSXZf47S@3s9sp29uM=(TE!Ps*C1vV8=3H=kcN~b= z$Z%MV3nJJ_B%`jsDgu!!pzeOo(9Sj_vES?#6e_x;Bo4*SAYpk8(H(=e52g1ZMWh8AL`fA6!%S@MmYc= za}d7Mc2x1T1EJ$~_L|w1(JGKm%}-5zfo==CT`bi8&B6Zf7iy4zA$vhL{S-)yV18K_n`e zz!jD3r2(%KWST`|pdgXe0L<-7pws($Z#6^79{g53!2vGn#6lk?P#S=}ohn(~P;+*g zB}oLG)^ut(0YSS%l~c(!wXLR+7PT$dNz8Aoh@I+0^kLQWNURzQ?T?fg>LcxLz1DwI z1(uqN>6^3l>kw1ZPd~P@OY1LcDW9N#dhF;b+@cn+MI7Ts97A<9%%u>=`v#_lvbGU- zsb=`ZoG%)%iAklYso{qV&5B;0P}HdJ?0kG;i2^*^CV)J%7KXc`j1>~w9zf8&t&wjS z^y-gO{&P?sa{`bQ%x5UhpFh89OpoWBBQI=ZbhRfRo$TcT)`fY-UDVu4^{A3;NL;4D zm8TiDXZ@JbWm5+_ytY3h0yYr}`*L2uW}Ac%;YGPx_?||0uY+mKcTlS;W~s8mT$a|{ z{Wg6^|8?2fsYhx8^uHZ~p1Xs!Y^5x5``(hlqJ+-J}ys}Tf;97#E-hN@S zRInLPR^QG8;Jh>Dp3jNJL&Rqh@kj*HxYaMX@A^01BbIzXw>1(W$^Xy}>ro%wRD*G% z``2}fOpK4)73$1n5|WZ;h?_()EFx>5e(Hx?GA%VNjpWds9seW_yg41#M>Te*U>jd> ztRpWY(>mJxbguwW3soO3-_3D5*!q-~mNo$Tt&S}X6^^aou|6(?rT~^X>n5-}lbwdp zV+whkQjJAx{&{w|@uS#uGW&CNwBoarimf5t)<`fGAxXHXZo3|JS4{ytg$57{!$7io zOmd>Ns2?>TuKsxJ&O*b{vDTZC!mx&5!@b_V{p)-<9b-w@iU%0LI>Q~`+Ad3w@5})n< zAO5U-pzhH~Rf9(6@QAp|Eb_CMgZ@*P)=#S*XV=JQ0H}yJ7_Cl23~`?JyEVD75e)w| z1quSS5o1HcNoYfhLp8(A%?;TiAWjf5M{)`Zl5piV`;?y;V=O#gXi5aWht@MqS9bpZQ)Cgeg@6-&1MK&m<$hcMptX&nfWK@; z1Cr{f(WHBk1 zVGGsB)bz9$)SdJ}V6prg*6BV@Llsp^Z^1!WL5L@1Cz&5E0LwWKf*SY*;xq@-sJ+Pq zGuEJtJsDbf*4HVU<9VzSa3UCo5QO|8UuunL`fU2Jk@?3)vN^}_;6O-h7 z@gk7U$BZ_EdZUP1=(V8+;!9=2VLj%Ux&JtyDK3EzKLK za&=mRcCyk6VvzBwFI{o@6xMKV9v+@G_&Q_I6Ez++W>9C<>YsrVGlR53)55|cDDenZ zd$pr0czAt?8}Gp=VkQd6PgDMQHai_z*$?wGGs!2QlV1J}D|;d0F1C9KZk;|*8Wci$ zTYyrfOR7UGutH;y+{I-AB9gne9;8|w4qN?|h}TmIc&T;Zvxz8Grdx7kh(6V zMyr(9ljym<0f905>B?Az}qNwBFQi!xH)wM56?J96Jd5#ut z(Y0MgY_?R93^{T{0D$KR;22Kt2iLMGEtn;u!$^*nv(PW+C+8bOnh{si7Z5~B7ZP0i zq%&uKx3$>94D+++rlg&bp>q()Usme|5z){DlXIKRy0DayTEV`4Sv{=6g0?w?R);Mr zJh96;6nA7DVk{LbCL+Rzi}c|8D5bMl4B(Uklp|fzF=8=oh)KB9+Nj}i{M(28H$n*Q zZ^_C7$cOAR<&fuUlH#dK55efOgKdm4xg2pt&bXoE^8MOHxeuO##!eQ$OH=kmK$!gmq);hyRjp0_5(i+G@_QB0SmjjpRI5islz z4GyY3GrkRW!iO4gM9FN%c(Dtcqtfe}FqCNxVKZ~E#kX)(xvdaJN#FWwm%WS>LTbze z!{>wk+YZsthu?lNL}U5x(H1~rN03f7zV{tyhB!)pU5(UMS56toVS$Y%^?$s&5wmJ| o{ol4u$VU7BM-y-BmuFZNr;U+lkC886WPVOYLP0!N?77$f0@lpkbN~PV literal 0 HcmV?d00001 diff --git a/pyutils/pynorm.py b/pyutils/pynorm.py new file mode 100644 index 0000000..d47aba7 --- /dev/null +++ b/pyutils/pynorm.py @@ -0,0 +1,565 @@ +#! /usr/bin/env +import DbService +import argparse +import ROOT +import math +import random +import os +import numpy as np + + +#-------------------------------------------------------------------------------------# +# Constants related to muon and pion interactions. +# References for these values can be found in the referenced documentation. + +# --- Muon Interactions --- +# Fraction of stopped muons that undergo nuclear capture +CAPTURES_PER_STOPPED_MUON = 0.609 +# Rate of radiative muon capture (RMC) events resulting in a gamma ray > 57 MeV, per capture event +RMC_GT_57_PER_CAPTURE = 1.43e-5 # Source: Phys. Rev. C 59, 2853 (1999) +# Fraction of stopped muons that undergo standard DIO (Decay In Orbit) +DIO_PER_STOPPED_MUON = 0.391 # Calculated as: 1 - CAPTURES_PER_STOPPED_MUON +# Rate of Incoming Particle Decay After Stopping (IPA) +IPA_DECAYS_PER_STOPPED_MUON = 0.92990 + +# --- Pion Interactions --- +# Fraction of stopped pions that result in a Radiative Pion Capture (RPC) +RPC_PER_STOPPED_PION = 0.0215 # Source: Reference uploaded on DocDB-469 +# --- Internal Conversion Ratios --- +# Ratio of internal conversion events per RMC event (assuming RPC value is applicable) +INTERNAL_PER_RMC = 0.00690 +# Ratio of internal conversion events per RPC event +INTERNAL_RPC_PER_RPC = 0.00690 # Source: Reference uploaded on DocDB-717 + + +# --- Configuration Placeholders (Mutable Variables) --- +# These values get overwritten later in the script or during runtime. + +# Expected rates per Proton on Target (POT) +target_stopped_muons_per_pot = 1.0 +target_stopped_pions_per_pot = 1.0 +ipa_stopped_mu_per_POT = 1.0 +ipa_stopping_rate = 1.0 + +# Event counters (initialized to zero) +num_pion_stops = 0.0 +num_pion_resamples = 0.0 +num_pion_filters = 0.0 +selected_sum_of_weights = 0.0 + +# Rate and operational parameters +rate = 1.0 +dutyfactor = 1.0 +total_pot = 0. + +#-------------------------------------------------------------------------------------# + +# --- Database Interaction --- + +# Establish a connection and retrieve simulation efficiencies from the database. + +# Initialize the database tool +db_tool = DbService.DbTool() +db_tool.init() + +# Define arguments for the database query +query_arguments = [ + "print-run", + "--purpose", "Sim_best", + "--version", "v1_1", + "--run", "1430", + "--table", "SimEfficiencies2", + "--content" +] + +# Execute the database query +db_tool.setArgs(query_arguments) +db_tool.run() + +# Store the raw result for further processing +rr = db_tool.getResult() + +# Fill varaibles associated with muon stops in target +lines= rr.split("\n") +for line in lines: + words = line.split(",") + if words[0] == "MuminusStopsCat" or words[0] == "MuBeamCat" : + #print(f"Including {words[0]} with rate {words[3]}") + rate = rate * float(words[3]) + target_stopped_muons_per_pot = rate * 1000 + + +# Fill variables associated with pion stops in target +lines= rr.split("\n") +for line in lines: + words = line.split(",") + if words[0] == "PiBeamCat" or words[0] == "PiTargetStops": + target_stopped_pions_per_pot *= float(words[3]) # 0.001880093 * 0.5165587875 + if words[0] == "PiTargetStops": + num_pion_stops = words[1] #41324703 + if words[0] == "PiMinusFilter" : + num_pion_filters = words[1] # 6634478 + if words[0] == "PhysicalPionStops" : + num_pion_resamples= words[2] # 10000000000 + if words[0] == "PiSelectedLifeimeWeight_sampler" : + selected_sum_of_weights = words[3] #2393.604874 + +# Fill variables associated with IPA stopped muons +lines= rr.split("\n") +for line in lines: + words = line.split(",") + if words[0] == "IPAStopsCat" or words[0] == "MuBeamCat" : + ipa_stopping_rate = ipa_stopping_rate * float(words[3]) + ipa_stopped_mu_per_POT = ipa_stopping_rate +print("IPAStopMuonRate=", ipa_stopped_mu_per_POT) + +#-------------------------------------------------------------------------------------# +def get_duty_factor(run_mode='1BB'): + """ + Returns the estimated duty factor based on the operational run mode (beam structure). + + Args: + run_mode (str): The operational mode, either '1BB' (1 beam batch) + or '2BB' (2 beam batches). Defaults to '1BB'. + + Returns: + float: The corresponding duty factor for the specified mode. + """ + if run_mode == '1BB': + # Duty factor for a single beam batch operation + duty_factor = 0.323 + elif run_mode == '2BB': + # Duty factor for two beam batch operation + duty_factor = 0.246 + else: + # Handle unrecognized modes or provide a default fallback if necessary + # print(f"Warning: Unknown run mode '{run_mode}'. Using default duty factor.") + duty_factor = 0.323 + + return duty_factor + +def get_pot(on_spill_time, run_mode='1BB', printout=False, frac=1): + """ + Calculates the total number of Protons on Target (POT) for a given live time. + + Args: + on_spill_time (float): The actual time the beam was on spill (in seconds). + run_mode (str): The operational mode ('1BB', '2BB', or 'custom'). + Defaults to '1BB'. + printout (bool): If True, prints calculation details. Defaults to False. + frac (float): Used only in 'custom' mode as a scaling fraction. + + Returns: + float: The calculated total number of Protons on Target (total_pot). + """ + # Numbers based on SU2020 analysis. + # See https://github.com/Mu2e/su2020/blob/master/analysis/pot_normalization.org + + # Initialize variables that will be dynamically assigned + mean_pbi = 0.0 + t_cycle = 0.0 + pot_per_cycle = 0.0 + + if run_mode == 'custom': + # Assume some fraction of 1BB + mean_pbi = 1.6e7 * frac + t_cycle = 1.33 # seconds + pot_per_cycle = 4e12 * (1 - frac) + + elif run_mode == '1BB': + # Single beam batch operation + mean_pbi = 1.6e7 + t_cycle = 1.33 # seconds + pot_per_cycle = 4e12 + + elif run_mode == '2BB': + # Two beam batch operation + mean_pbi = 3.9e7 + t_cycle = 1.4 # seconds + pot_per_cycle = 8e12 + + else: + raise ValueError(f"Unknown run_mode specified: {run_mode}") + + # --- Common Calculation Steps --- + num_cycles = on_spill_time / t_cycle + total_pot = num_cycles * pot_per_cycle + + if printout: + current_duty_factor = get_duty_factor(run_mode) if run_mode != 'custom' else 'N/A' + + print(f"Tcycle= {t_cycle}") + print(f"POT_per_cycle= {pot_per_cycle:.2e}") + # 'Livetime' here seems to mean 'Total experiment duration accounting for gaps' + print(f"Total_Duration= {on_spill_time / current_duty_factor}") + print(f"NPOT= {total_pot:.2e}") + + return total_pot + +#-------------------------------------------------------------------------------------# + +# FORWARD-DIRECTION NORMALIZATION FUNCTIONS REMOVED +# Users should now use the inverted POT calculation functions: +# - pot_for_rmc_events() +# - pot_for_dio_events() +# - pot_for_rpc_events() +# +# To calculate event expectations, use get_pot() and manual scaling if needed. + +# Helper function: work from signal to rmue +def get_ce_rmue(onspilltime, nsig, run_mode = '1BB'): + POT = get_pot(onspilltime, run_mode) + rmue = nsig/(POT * target_stopped_muons_per_pot * CAPTURES_PER_STOPPED_MUON) + return rmue + + +""" +The following section derives the cosmic yield for on spill/off spill for two specific generators (CRY/CORSIKA) +The cosmics are normalized according to the livetime fraction which overlaps with beam (Depends on duty factor and BB mode) +""" +# note this returns CosmicLivetime not # of generated events +def cry_onspill_normalization(livetime, run_mode = '1BB'): + return livetime + +# note this returns CosmicLivetime not # of generated events +def corsika_onspill_normalization(livetime, run_mode = '1BB'): + return livetime + + +#-------------------------------------------------------------------------------------# +# INVERTED NORMALIZATION FUNCTIONS: Given reconstructed event counts, calculate POT +#-------------------------------------------------------------------------------------# + +def pot_for_rmc_events(n_reconstructed, internal, e_min, k_max=90.1, run_mode='1BB'): + """ + Inverts the RMC normalization: given a number of reconstructed RMC events, + calculate the required Protons on Target (POT). + + Args: + n_reconstructed (float): Number of reconstructed RMC events. + internal (int/bool): Flag (1 or 0) indicating if internal conversion was used. + e_min (float): Minimum energy threshold for spectrum cut (MeV). + k_max (float): Maximum possible RMC energy (MeV). Defaults to 90.1 MeV. + run_mode (str): The operational mode ('1BB' or '2BB'). Defaults to '1BB'. + + Returns: + float: The required Protons on Target (POT). + """ + # Generate the RMC energy spectrum internally using the closure approximation + energies = [] + values = [] + + start_energy = 57.05 + bin_width = 0.1 + num_bins = int((float(k_max) - start_energy) / bin_width) + + for i in range(num_bins): + temp_e = start_energy + i * bin_width + x_fit = temp_e / float(k_max) + spectrum_value = (1 - 2*x_fit + 2*x_fit*x_fit) * x_fit * (1 - x_fit) * (1 - x_fit) + energies.append(temp_e) + values.append(spectrum_value) + + # Calculate normalization (fraction of spectrum above e_min threshold) + total_norm = sum(values) + cut_norm = 0 + + for i in range(len(values)): + bin_center = energies[i] + if (bin_center - bin_width / 2.0) >= float(e_min): + cut_norm += values[i] + + if total_norm == 0: + fraction_sampled = 0.0 + else: + fraction_sampled = cut_norm / total_norm + + # Build the scaling factor + scaling_factor = ( + target_stopped_muons_per_pot * + CAPTURES_PER_STOPPED_MUON * + RMC_GT_57_PER_CAPTURE * + fraction_sampled + ) + + # Apply internal conversion scaling if requested + is_internal_conversion = bool(int(internal)) + if is_internal_conversion: + scaling_factor *= INTERNAL_PER_RMC + + # Avoid division by zero + if scaling_factor == 0: + raise ValueError("Scaling factor is zero. Cannot calculate POT with these parameters.") + + # Invert: POT = n_events / scaling_factor + required_pot = n_reconstructed / scaling_factor + + print(f"RMC: n_events={n_reconstructed}, e_min={e_min}, k_max={k_max}, internal={internal}") + print(f"RMC: fraction_sampled={fraction_sampled}, scaling_factor={scaling_factor:.6e}") + print(f"RMC: required_POT={required_pot:.6e}") + + return required_pot + + +def pot_for_dio_events(n_reconstructed, e_min, run_mode='1BB'): + """ + Inverts the DIO normalization: given a number of reconstructed DIO events, + calculate the required Protons on Target (POT). + + Args: + n_reconstructed (float): Number of reconstructed DIO events. + e_min (float): Minimum energy threshold for the DIO spectrum cut (MeV). + run_mode (str): The operational mode ('1BB' or '2BB'). Defaults to '1BB'. + + Returns: + float: The required Protons on Target (POT). + """ + # Load the DIO energy spectrum data + spectrum_file_path = os.path.join( + os.environ["MUSE_WORK_DIR"], + "Production/JobConfig/ensemble/tables/heeck_finer_binning_2016_szafron.tbl" + ) + + energies = [] + values = [] + + try: + with open(spectrum_file_path, 'r') as spec_file: + for line in spec_file: + if not line.strip() or line.strip().startswith('#'): continue + try: + energy, value = map(float, line.split()) + energies.append(energy) + values.append(value) + except ValueError: + print(f"Warning: Could not parse line in spectrum file: {line.strip()}") + + except FileNotFoundError: + raise FileNotFoundError(f"DIO spectrum file not found at: {spectrum_file_path}") + + # Calculate normalization (fraction of spectrum above e_min) + total_norm = sum(values) + cut_norm = 0 + + for i in range(len(values)): + if energies[i] >= e_min: + cut_norm += values[i] + + if total_norm == 0: + fraction_sampled = 0.0 + else: + fraction_sampled = cut_norm / total_norm + + # Build the scaling factor + scaling_factor = ( + target_stopped_muons_per_pot * + DIO_PER_STOPPED_MUON * + fraction_sampled + ) + + # Avoid division by zero + if scaling_factor == 0: + raise ValueError("Scaling factor is zero. Cannot calculate POT with these parameters.") + + # Invert: POT = n_events / scaling_factor + required_pot = n_reconstructed / scaling_factor + + print(f"DIO: n_events={n_reconstructed}, e_min={e_min}") + print(f"DIO: fraction_sampled={fraction_sampled}, scaling_factor={scaling_factor:.6e}") + print(f"DIO: required_POT={required_pot:.6e}") + + return required_pot + + +def pot_for_rpc_events(n_reconstructed, t_min, internal, e_min, run_mode='1BB'): + """ + Inverts the RPC normalization: given a number of reconstructed RPC events, + calculate the required Protons on Target (POT). + + Handles both standard RPC and internal conversion events based on the 'internal' flag. + + Args: + n_reconstructed (float): Number of reconstructed RPC events. + t_min (float): Minimum time threshold (seconds) (Note: not used in current logic). + internal (int/bool): Flag (1 or 0) to include internal conversion scaling. + e_min (float): Minimum energy threshold for spectrum cut (MeV). + run_mode (str): The operational mode ('1BB' or '2BB'). Defaults to '1BB'. + + Returns: + float: The required Protons on Target (POT). + """ + # Load the RPC energy spectrum data + spectrum_file_path = os.path.join( + os.environ["MUSE_WORK_DIR"], + "Production/JobConfig/ensemble/tables/rpcspectrum.tbl" + ) + + energies = [] + values = [] + + try: + with open(spectrum_file_path, 'r') as spec_file: + for line in spec_file: + if not line.strip() or line.strip().startswith('#'): continue + try: + energy, value = map(float, line.split()) + energies.append(energy) + values.append(value) + except ValueError: + print(f"Warning: Could not parse line in spectrum file: {line.strip()}") + + except FileNotFoundError: + raise FileNotFoundError(f"RPC spectrum file not found at: {spectrum_file_path}") + + # Calculate normalization (fraction of spectrum above e_min) + total_norm = sum(values) + cut_norm = 0 + for i in range(len(values)): + if energies[i] >= float(e_min): + cut_norm += values[i] + + if total_norm == 0: + rpc_e_sample_frac = 0.0 + else: + rpc_e_sample_frac = cut_norm / total_norm + + # Calculate efficiency terms based on simulation globals + filter_efficiency = float(num_pion_filters) / float(num_pion_stops) + survival_probability_weight = float(selected_sum_of_weights) / float(num_pion_resamples) + + # Build the scaling factor + scaling_factor = ( + target_stopped_pions_per_pot * + filter_efficiency * + survival_probability_weight * + RPC_PER_STOPPED_PION * + rpc_e_sample_frac + ) + + # Apply internal conversion scaling if requested + is_internal_conversion = bool(int(internal)) + if is_internal_conversion: + scaling_factor *= INTERNAL_RPC_PER_RPC + + # Avoid division by zero + if scaling_factor == 0: + raise ValueError("Scaling factor is zero. Cannot calculate POT with these parameters.") + + # Invert: POT = n_events / scaling_factor + required_pot = n_reconstructed / scaling_factor + + print(f"RPC: n_events={n_reconstructed}, e_min={e_min}, t_min={t_min}, internal={internal}") + print(f"RPC: fraction_sampled={rpc_e_sample_frac}, scaling_factor={scaling_factor:.6e}") + print(f"RPC: required_POT={required_pot:.6e}") + + return required_pot + + +#-------------------------------------------------------------------------------------# +# RECONSTRUCTION EFFICIENCY CALCULATION +#-------------------------------------------------------------------------------------# + +def get_reco_eff(signal, filelist_path=None, verbose=False): + """ + Calculates the reconstruction efficiency for a given signal process + by counting reconstructed events vs. generated events across ROOT files. + + Args: + signal (str): Name of the signal process (e.g., 'RMC', 'DIO', 'RPC'). + filelist_path (str): Path to the file containing list of ROOT file paths. + If None, assumes a file named 'filenames_{signal}' exists. + verbose (bool): If True, prints progress information. Defaults to False. + + Returns: + float: Reconstruction efficiency (reco_events / gen_events). + Returns 0.0 if gen_events is 0 or files cannot be processed. + """ + # Determine the filelist path + if filelist_path is None: + filelist_path = f"filenames_{signal}" + + # Initialize event counters + reco_events = 0 + gen_events = 0 + + try: + # Open and read the filelist + with open(filelist_path, 'r') as flist: + files = [line.strip() for line in flist if line.strip()] + except FileNotFoundError: + raise FileNotFoundError(f"Filelist not found: {filelist_path}") + + if verbose: + print(f"Processing signal: {signal}") + print(f"Number of files to process: {len(files)}") + + # Loop over files in the list + for fn in files: + if verbose: + print(f" Processing file: {fn}") + + try: + # Open the ROOT file + fin = ROOT.TFile(fn) + + if fin.IsZombie(): + print(f" Warning: Could not open {fn}") + continue + + # Get the Events tree and count reconstructed events + te = fin.Get("Events") + if te: + n_entries = te.GetEntries() + reco_events += n_entries + if verbose: + print(f" Reco events in file: {n_entries}, cumulative: {reco_events}") + + # Get the SubRuns tree for generated event count + t_subruns = fin.Get("SubRuns") + if t_subruns: + # Find the GenEventCount branch + bl = t_subruns.GetListOfBranches() + branch_name = "" + + for i in range(bl.GetEntries()): + if bl[i].GetName().startswith("mu2e::GenEventCount"): + branch_name = bl[i].GetName() + break + + # Sum up generated events + if branch_name: + for i in range(t_subruns.GetEntries()): + t_subruns.GetEntry(i) + gen_count_obj = getattr(t_subruns, branch_name) + gen_events += gen_count_obj.product().count() + else: + if verbose: + print(f" Warning: GenEventCount branch not found in SubRuns tree") + + fin.Close() + + except Exception as e: + print(f" Error processing {fn}: {str(e)}") + continue + + # Calculate reconstruction efficiency + if gen_events == 0: + if verbose: + print("Warning: No generated events found. Returning 0.0") + return 0.0 + + reco_eff = reco_events / gen_events + + if verbose: + print(f"\nSummary for {signal}:") + print(f" Total reco events: {reco_events}") + print(f" Total gen events: {gen_events}") + print(f" Reconstruction efficiency: {reco_eff:.6f}") + + return reco_eff + + +if __name__ == '__main__': + tst_1BB = get_pot(9.52e6) + tst_2BB = get_pot(1.58e6) + print("SU2020 POT:", tst_1BB, tst_2BB) \ No newline at end of file diff --git a/scripts/benchmark_dask.py b/scripts/benchmark_dask.py index 4ac841f..b002247 100644 --- a/scripts/benchmark_dask.py +++ b/scripts/benchmark_dask.py @@ -40,9 +40,9 @@ def percentile(sorted_list, p): return d0 + d1 -def run_single_config(file_list, branches, n_workers, threads_per_worker, processes, out_dir, verbosity=0): +def run_single_config(file_list, branches, n_workers, threads_per_worker, processes, out_dir, location="local", use_remote=True, verbosity=0): """Run a single dask configuration and record timing.""" - pfx = f"nw={n_workers}_tpw={threads_per_worker}_proc={processes}_branches={'reduced' if branches else 'full'}" + pfx = f"nw={n_workers}_tpw={threads_per_worker}_proc={processes}_loc={location}_remote={use_remote}_branches={'reduced' if branches else 'full'}" out_prefix = os.path.join(out_dir, pfx) os.makedirs(out_dir, exist_ok=True) @@ -54,6 +54,8 @@ def run_single_config(file_list, branches, n_workers, threads_per_worker, proces n_workers=n_workers, threads_per_worker=threads_per_worker, processes=processes, + use_remote=use_remote, + location=location, show_progress=False, ) t1 = time.perf_counter() @@ -83,6 +85,8 @@ def run_single_config(file_list, branches, n_workers, threads_per_worker, proces "n_workers": n_workers, "threads_per_worker": threads_per_worker, "processes": processes, + "location": location, + "use_remote": use_remote, "branches_mode": "reduced" if branches else "full", "files_processed": files_processed, "total_time": total_time, @@ -118,13 +122,13 @@ def main(): "--out", dest="out", help="Summary CSV output path", - default="benchmark_dask_results.csv", + default="bench_out/dask/benchmark_dask_results.csv", ) parser.add_argument( "--out-dir", dest="out_dir", help="Directory to store per-run outputs", - default="benchmark_out", + default="bench_out/dask", ) parser.add_argument( "--n-workers-list", @@ -138,6 +142,24 @@ def main(): help="Comma-separated threads_per_worker values; default: 1", default=None, ) + parser.add_argument( + "--location", + dest="location", + help="Location/source for files (e.g., tape, cache, local)", + default="local", + ) + parser.add_argument( + "--location-list", + dest="location_list", + help="Comma-separated list of locations to sweep (overrides --location)", + default=None, + ) + parser.add_argument( + "--use-remote", + dest="use_remote", + action="store_true", + help="Enable remote file access", + ) parser.add_argument( "--verbosity", dest="verbosity", @@ -185,31 +207,39 @@ def main(): ] } + # Prepare location sweep + if args.location_list: + locations = [l.strip() for l in args.location_list.split(",") if l.strip()] + else: + locations = [args.location] + # Build sweep combinations branch_options = [reduced_branches] combos = [] - for processes in (False, True): - for branches in branch_options: - for nw in nw_values: - for tpw in tpw_values: - # Skip unreasonable combinations - total_cores = nw * tpw - if total_cores > 2 * cpu_cnt: - continue - combos.append((nw, tpw, processes, branches)) + for location in locations: + for processes in (False, True): + for branches in branch_options: + for nw in nw_values: + for tpw in tpw_values: + # Skip unreasonable combinations + total_cores = nw * tpw + if total_cores > 2 * cpu_cnt: + continue + combos.append((nw, tpw, processes, branches, location)) print(f"Will run {len(combos)} configurations") print(f"CPU count: {cpu_cnt}") print(f"n_workers values: {nw_values}") print(f"threads_per_worker values: {tpw_values}") print(f"processes options: False, True") + print(f"locations: {locations}") print() # Run combos and collect summaries summaries = [] - for i, (nw, tpw, processes, branches) in enumerate(combos, 1): - config_str = f"nw={nw}, tpw={tpw}, proc={processes}, branches={'reduced' if branches else 'full'}" + for i, (nw, tpw, processes, branches, location) in enumerate(combos, 1): + config_str = f"nw={nw}, tpw={tpw}, proc={processes}, loc={location}, remote={args.use_remote}, branches={'reduced' if branches else 'full'}" print(f"[{i}/{len(combos)}] Running: {config_str}") try: s = run_single_config( @@ -218,6 +248,8 @@ def main(): n_workers=nw, threads_per_worker=tpw, processes=processes, + location=location, + use_remote=args.use_remote, out_dir=args.out_dir, verbosity=args.verbosity, ) diff --git a/scripts/benchmark_pyprocess.py b/scripts/benchmark_pyprocess.py index d6b135f..ac137f0 100644 --- a/scripts/benchmark_pyprocess.py +++ b/scripts/benchmark_pyprocess.py @@ -12,6 +12,8 @@ Usage examples: python3 scripts/benchmark_pyprocess.py --file-list files.txt --out results.csv + python3 scripts/benchmark_pyprocess.py --file-list MDS3a_nosig.txt --location tape --use-remote --out bench_summary.csv --out-dir bench_out + Note: This script uses the `Processor` and `_worker_func` from the `pyutils` package so run it from the repository root where `pyutils` is importable. """ @@ -168,8 +170,8 @@ def main(): group.add_argument("--file-list", dest="file_list", help="Path to a newline-separated local file list") group.add_argument("--defname", dest="defname", help="SAM definition name (defname)") parser.add_argument("--reduced-branches", dest="reduced_branches", help="Comma-separated reduced branch list (e.g. Edep,track)", default=None) - parser.add_argument("--out", dest="out", help="Summary CSV output path", default="benchmark_results.csv") - parser.add_argument("--out-dir", dest="out_dir", help="Directory to store per-run outputs", default="benchmark_out") + parser.add_argument("--out", dest="out", help="Summary CSV output path", default="bench_out/pyprocess/benchmark_results.csv") + parser.add_argument("--out-dir", dest="out_dir", help="Directory to store per-run outputs", default="bench_out/pyprocess") parser.add_argument("--max-workers-list", dest="mw_list", help="Comma-separated max_workers values; default auto", default=None) parser.add_argument("--tree-path", dest="tree_path", default="EventNtuple/ntuple") parser.add_argument("--use-remote", dest="use_remote", action="store_true") diff --git a/scripts/plot_bench.py b/scripts/plot_bench.py index 387a746..56f76ef 100644 --- a/scripts/plot_bench.py +++ b/scripts/plot_bench.py @@ -274,8 +274,8 @@ def plot_perfile_timeline(perfile_csv, out_path): def main(): parser = argparse.ArgumentParser() - parser.add_argument("--summary", type=str, default="benchmark_results.csv", help="Summary CSV (from benchmark script)") - parser.add_argument("--out-dir", type=str, default="benchmark_out", help="Directory containing per-file CSVs and where plots will be written") + parser.add_argument("--summary", type=str, default="bench_out/pyprocess/benchmark_results.csv", help="Summary CSV (from benchmark script)") + parser.add_argument("--out-dir", type=str, default="bench_out/pyprocess", help="Directory containing per-file CSVs and where plots will be written") parser.add_argument("--plots-dir", type=str, default=None, help="Directory to write plots (defaults to /plots)") parser.add_argument("--perfile", type=str, default=None, help="Optional explicit per-file CSV to plot") args = parser.parse_args() diff --git a/scripts/plot_dask_bench.py b/scripts/plot_dask_bench.py new file mode 100644 index 0000000..eca8f26 --- /dev/null +++ b/scripts/plot_dask_bench.py @@ -0,0 +1,293 @@ +#!/usr/bin/env python3 +""" +Plotting utilities for benchmark results produced by +`scripts/benchmark_dask.py`. + +Generates: +- throughput (files/sec) vs `n_workers` (hue=`threads_per_worker` and `processes`) +- heatmap of throughput/time with n_workers x threads_per_worker +- speedup and efficiency vs total cores +- per-file duration distributions (if available) + +Requires: pandas, matplotlib + +Usage: + python3 scripts/plot_dask_bench.py --summary benchmark_dask_results.csv --out-dir bench_out +""" + +import argparse +import glob +import os +import pandas as pd +import matplotlib.pyplot as plt +import numpy as np + + +def ensure_dir(d): + os.makedirs(d, exist_ok=True) + + +def plot_throughput_vs_n_workers(df, out_path): + """Plot files/sec vs n_workers, grouped by threads_per_worker and processes.""" + plt.figure(figsize=(10, 6)) + + # Group by threads_per_worker and processes + for (tpw, proc), grp in df.groupby(["threads_per_worker", "processes"]): + grp_sorted = grp.sort_values("n_workers") + label = f"tpw={int(tpw)}, proc={proc}" + plt.plot(grp_sorted["n_workers"], grp_sorted["files_per_sec"], marker="o", label=label) + + plt.xlabel("n_workers") + plt.ylabel("files / s") + plt.title("Throughput vs n_workers") + plt.legend() + plt.grid(True, alpha=0.3) + plt.tight_layout() + plt.savefig(out_path) + plt.close() + print(f"Wrote {out_path}") + + +def plot_throughput_vs_total_cores(df, out_path): + """Plot files/sec vs total_cores (n_workers * threads_per_worker).""" + df_plot = df.copy() + df_plot["total_cores"] = df_plot["n_workers"] * df_plot["threads_per_worker"] + df_plot["label"] = df_plot.apply( + lambda r: f"proc={r['processes']}", axis=1 + ) + + plt.figure(figsize=(10, 6)) + for proc, grp in df_plot.groupby("processes"): + grp_sorted = grp.sort_values("total_cores") + label = f"processes={proc}" + plt.plot(grp_sorted["total_cores"], grp_sorted["files_per_sec"], marker="o", label=label) + + plt.xlabel("total cores (n_workers × threads_per_worker)") + plt.ylabel("files / s") + plt.title("Throughput vs total cores") + plt.legend() + plt.grid(True, alpha=0.3) + plt.tight_layout() + plt.savefig(out_path) + plt.close() + print(f"Wrote {out_path}") + + +def plot_heatmap_throughput(df, out_path, processes_val=False): + """Create heatmap of throughput with n_workers (rows) x threads_per_worker (columns).""" + df_proc = df[df["processes"] == processes_val].copy() + + if df_proc.empty: + print(f"No data for processes={processes_val}") + return + + pivot = df_proc.pivot_table( + index="n_workers", + columns="threads_per_worker", + values="files_per_sec", + aggfunc="mean" + ) + + if pivot.empty: + return + + plt.figure(figsize=(8, 6)) + im = plt.imshow(pivot.values, aspect="auto", origin="lower", cmap="viridis") + plt.colorbar(im, label="files / s") + plt.yticks(range(len(pivot.index)), [str(int(x)) for x in pivot.index]) + plt.xticks(range(len(pivot.columns)), [str(int(x)) for x in pivot.columns]) + plt.xlabel("threads_per_worker") + plt.ylabel("n_workers") + plt.title(f"Throughput heatmap (processes={processes_val})") + plt.tight_layout() + plt.savefig(out_path) + plt.close() + print(f"Wrote {out_path}") + + +def plot_heatmap_total_time(df, out_path, processes_val=False): + """Create heatmap of total_time with n_workers (rows) x threads_per_worker (columns).""" + df_proc = df[df["processes"] == processes_val].copy() + + if df_proc.empty: + print(f"No data for processes={processes_val}") + return + + pivot = df_proc.pivot_table( + index="n_workers", + columns="threads_per_worker", + values="total_time", + aggfunc="mean" + ) + + if pivot.empty: + return + + plt.figure(figsize=(8, 6)) + im = plt.imshow(pivot.values, aspect="auto", origin="lower", cmap="RdYlGn_r") + plt.colorbar(im, label="total time (s)") + plt.yticks(range(len(pivot.index)), [str(int(x)) for x in pivot.index]) + plt.xticks(range(len(pivot.columns)), [str(int(x)) for x in pivot.columns]) + plt.xlabel("threads_per_worker") + plt.ylabel("n_workers") + plt.title(f"Total time heatmap (processes={processes_val})") + plt.tight_layout() + plt.savefig(out_path) + plt.close() + print(f"Wrote {out_path}") + + +def plot_speedup_and_efficiency(df, out_path_speedup, out_path_efficiency): + """Compute and plot speedup and efficiency vs total_cores.""" + df_plot = df.copy() + df_plot["total_cores"] = df_plot["n_workers"] * df_plot["threads_per_worker"] + + # Find baseline: minimum total_time (fastest single-threaded config) + baseline = df_plot[df_plot["total_cores"] == 1]["total_time"] + if baseline.empty: + baseline = df_plot["total_time"].min() + else: + baseline = baseline.min() + + df_plot["speedup"] = baseline / df_plot["total_time"] + df_plot["efficiency"] = df_plot["speedup"] / df_plot["total_cores"] + + # Speedup plot + plt.figure(figsize=(10, 6)) + for proc, grp in df_plot.groupby("processes"): + grp_sorted = grp.sort_values("total_cores") + label = f"processes={proc}" + plt.plot(grp_sorted["total_cores"], grp_sorted["speedup"], marker="o", label=label) + + plt.xlabel("total cores") + plt.ylabel("speedup") + plt.title("Speedup vs total cores") + plt.legend() + plt.grid(True, alpha=0.3) + # Add diagonal line for perfect scaling + max_cores = df_plot["total_cores"].max() + plt.plot([1, max_cores], [1, max_cores], "k--", alpha=0.3, label="perfect scaling") + plt.legend() + plt.tight_layout() + plt.savefig(out_path_speedup) + plt.close() + print(f"Wrote {out_path_speedup}") + + # Efficiency plot + plt.figure(figsize=(10, 6)) + for proc, grp in df_plot.groupby("processes"): + grp_sorted = grp.sort_values("total_cores") + label = f"processes={proc}" + plt.plot(grp_sorted["total_cores"], grp_sorted["efficiency"], marker="o", label=label) + + plt.xlabel("total cores") + plt.ylabel("efficiency (speedup / cores)") + plt.title("Efficiency vs total cores") + plt.legend() + plt.grid(True, alpha=0.3) + plt.axhline(y=1.0, color="k", linestyle="--", alpha=0.3, label="perfect scaling") + plt.tight_layout() + plt.savefig(out_path_efficiency) + plt.close() + print(f"Wrote {out_path_efficiency}") + + +def plot_total_time_comparison(df, out_path): + """Bar plot comparing total_time across configurations.""" + df_plot = df.copy() + df_plot["total_cores"] = df_plot["n_workers"] * df_plot["threads_per_worker"] + df_plot["config"] = df_plot.apply( + lambda r: f"nw={int(r['n_workers'])},tpw={int(r['threads_per_worker'])},p={str(r['processes'])[0]}", + axis=1 + ) + + plt.figure(figsize=(14, 6)) + x = range(len(df_plot)) + colors = ["blue" if p else "orange" for p in df_plot["processes"]] + plt.bar(x, df_plot["total_time"], color=colors, alpha=0.7) + plt.xticks(x, df_plot["config"], rotation=45, ha="right", fontsize=9) + plt.ylabel("total time (s)") + plt.title("Total time by configuration") + plt.grid(True, alpha=0.3, axis="y") + + # Add legend + from matplotlib.patches import Patch + legend_elements = [Patch(facecolor="blue", alpha=0.7, label="processes=False"), + Patch(facecolor="orange", alpha=0.7, label="processes=True")] + plt.legend(handles=legend_elements) + + plt.tight_layout() + plt.savefig(out_path) + plt.close() + print(f"Wrote {out_path}") + + +def main(): + parser = argparse.ArgumentParser( + description="Plot benchmark results from benchmark_dask.py" + ) + parser.add_argument( + "--summary", + type=str, + default="bench_out/dask/benchmark_dask_results.csv", + help="Summary CSV from benchmark_dask.py", + ) + parser.add_argument( + "--out-dir", + type=str, + default="bench_out/dask", + help="Directory where plots will be written", + ) + args = parser.parse_args() + + if not os.path.exists(args.summary): + print(f"Summary CSV not found: {args.summary}") + return + + df = pd.read_csv(args.summary) + + # Ensure numeric types + for col in ["n_workers", "threads_per_worker", "total_time", "files_per_sec"]: + if col in df.columns: + df[col] = pd.to_numeric(df[col], errors="coerce") + + plots_dir = os.path.join(args.out_dir, "plots") + ensure_dir(plots_dir) + + # Throughput vs n_workers + out1 = os.path.join(plots_dir, "throughput_vs_n_workers.png") + plot_throughput_vs_n_workers(df, out1) + + # Throughput vs total cores + out2 = os.path.join(plots_dir, "throughput_vs_total_cores.png") + plot_throughput_vs_total_cores(df, out2) + + # Heatmaps for processes=False + out_h1_false = os.path.join(plots_dir, "heatmap_throughput_processes_false.png") + plot_heatmap_throughput(df, out_h1_false, processes_val=False) + + out_h2_false = os.path.join(plots_dir, "heatmap_total_time_processes_false.png") + plot_heatmap_total_time(df, out_h2_false, processes_val=False) + + # Heatmaps for processes=True (if data exists) + if (df["processes"] == True).any(): + out_h1_true = os.path.join(plots_dir, "heatmap_throughput_processes_true.png") + plot_heatmap_throughput(df, out_h1_true, processes_val=True) + + out_h2_true = os.path.join(plots_dir, "heatmap_total_time_processes_true.png") + plot_heatmap_total_time(df, out_h2_true, processes_val=True) + + # Speedup and efficiency + out_speed = os.path.join(plots_dir, "speedup_vs_cores.png") + out_eff = os.path.join(plots_dir, "efficiency_vs_cores.png") + plot_speedup_and_efficiency(df, out_speed, out_eff) + + # Total time comparison + out_time = os.path.join(plots_dir, "total_time_comparison.png") + plot_total_time_comparison(df, out_time) + + print(f"\nAll plots written to {plots_dir}") + + +if __name__ == "__main__": + main() From f0fc7ae383a9fec04879d1831aaf2cdc47b8dcf6 Mon Sep 17 00:00:00 2001 From: sophieMu2e Date: Fri, 27 Feb 2026 13:59:02 -0600 Subject: [PATCH 05/14] dask success --- .../pydask_demo-checkpoint.ipynb | 475 ++++++++++++++ examples/notebooks/pyutils_basics_dask.ipynb | 588 ++++++++++++++++++ examples/scripts/pyutils_basics_dask.py | 300 +++++++++ scripts/benchmark_pydask.py | 292 +++++++++ setup.py | 2 +- 5 files changed, 1656 insertions(+), 1 deletion(-) create mode 100644 examples/notebooks/.ipynb_checkpoints/pydask_demo-checkpoint.ipynb create mode 100644 examples/notebooks/pyutils_basics_dask.ipynb create mode 100644 examples/scripts/pyutils_basics_dask.py create mode 100644 scripts/benchmark_pydask.py diff --git a/examples/notebooks/.ipynb_checkpoints/pydask_demo-checkpoint.ipynb b/examples/notebooks/.ipynb_checkpoints/pydask_demo-checkpoint.ipynb new file mode 100644 index 0000000..270bdfb --- /dev/null +++ b/examples/notebooks/.ipynb_checkpoints/pydask_demo-checkpoint.ipynb @@ -0,0 +1,475 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "697f7e53", + "metadata": {}, + "source": [ + "# Distributed Data Processing with DaskProcessor\n", + "\n", + "This notebook demonstrates how to use **DaskProcessor** for scalable parallel processing of ROOT data files using Dask's distributed computing framework.\n", + "\n", + "## Overview\n", + "\n", + "DaskProcessor provides a drop-in replacement for the standard Processor that uses Dask for:\n", + "- **Local parallelization**: Efficiently use all cores on a single machine\n", + "- **Distributed computing**: Connect to Dask clusters for large-scale processing\n", + "- **Progress monitoring**: Track processing progress across multiple files\n", + "- **Error resilience**: Built-in retry mechanisms for failed tasks\n", + "\n", + "Key advantages:\n", + "- Same output format (Awkward Arrays) as standard Processor\n", + "- Easy switching between serial, parallel, and distributed modes\n", + "- Seamless integration with HPC clusters" + ] + }, + { + "cell_type": "markdown", + "id": "36924d6f", + "metadata": {}, + "source": [ + "## 1. Import Required Libraries" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ac36f622", + "metadata": {}, + "outputs": [], + "source": [ + "# Standard library imports\n", + "import time\n", + "import os\n", + "from typing import Dict, Optional\n", + "\n", + "# External packages\n", + "import awkward as ak\n", + "\n", + "# pyutils imports\n", + "from pyutils.pydask import DaskProcessor\n", + "from pyutils.pyprocess import Processor\n", + "from pyutils.pylogger import Logger\n", + "\n", + "# Initialize logger for notebook demonstrations\n", + "logger = Logger(print_prefix=\"[pydask demo]\", verbosity=2)" + ] + }, + { + "cell_type": "markdown", + "id": "42c0d172", + "metadata": {}, + "source": [ + "## 2. Initialize DaskProcessor\n", + "\n", + "Create and configure a DaskProcessor instance. DaskProcessor shares the same constructor parameters as the standard Processor but uses Dask for distributed execution." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6d3ecc6a", + "metadata": {}, + "outputs": [], + "source": [ + "# Initialize DaskProcessor with remote settings\n", + "dask_proc = DaskProcessor(\n", + " tree_path=\"EventNtuple/ntuple\",\n", + " use_remote=True, # Access remote persistent datasets\n", + " location=\"disk\", # Read from disk storage\n", + " verbosity=1,\n", + " worker_verbosity=0\n", + ")\n", + "\n", + "logger.log(\"DaskProcessor initialized with remote settings:\", \"success\")\n", + "logger.log(f\" tree_path: {dask_proc._base.tree_path}\", \"info\")\n", + "logger.log(f\" use_remote: {dask_proc._base.use_remote}\", \"info\")\n", + "logger.log(f\" location: {dask_proc._base.location}\", \"info\")" + ] + }, + { + "cell_type": "markdown", + "id": "87e1e64a", + "metadata": {}, + "source": [ + "## 3. Single File Processing\n", + "\n", + "Process a single ROOT file using DaskProcessor. This demonstrates the basic API for specifying branches and output field names." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "415dae78", + "metadata": {}, + "outputs": [], + "source": [ + "# Example: Single file processing\n", + "# (Replace with actual file path and branches for real data)\n", + "\n", + "branches = {\n", + " \"trk.mom\": \"momentum\", # Map ROOT branch to output field\n", + " \"trk.pos\": \"position\" # Multiple branches can be selected\n", + "}\n", + "\n", + "# This would process a single file:\n", + "# result = dask_proc.process_data(\n", + "# file_name=\"/path/to/data.root\",\n", + "# branches=branches\n", + "# )\n", + "\n", + "logger.log(\"Single File Processing Example:\", \"info\")\n", + "logger.log(\"When you have a single file, use file_name parameter:\", \"info\")\n", + "logger.log(\"\"\"\n", + "result = dask_proc.process_data(\n", + " file_name=\"/path/to/data.root\",\n", + " branches={\"trk.mom\": \"momentum\", \"trk.pos\": \"position\"},\n", + " show_progress=True\n", + ")\n", + "The result is an Awkward Array with the selected branches.\n", + "\"\"\", \"info\")" + ] + }, + { + "cell_type": "markdown", + "id": "08e1e81e", + "metadata": {}, + "source": [ + "## 4. Multi-File Processing with File Lists\n", + "\n", + "Process multiple files from a file list. This is where DaskProcessor shows its power by distributing work across multiple workers." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f47d5045", + "metadata": {}, + "outputs": [], + "source": [ + "# Load the MDS3a.txt file list from the repository\n", + "import os\n", + "\n", + "notebook_dir = os.getcwd()\n", + "file_list_path = os.path.join(notebook_dir, \"../../MDS3a.txt\")\n", + "\n", + "# Read the file list\n", + "if os.path.exists(file_list_path):\n", + " with open(file_list_path, 'r') as f:\n", + " sample_files = [line.strip() for line in f if line.strip()]\n", + " \n", + " logger.log(f\"Loaded MDS3a.txt file list\", \"success\")\n", + " logger.log(f\"Total files available: {len(sample_files)}\", \"info\")\n", + " \n", + " # Display statistics\n", + " logger.log(\"\\nFile list statistics:\", \"info\")\n", + " logger.log(f\" First file: {sample_files[0].split('/')[-1]}\", \"info\")\n", + " logger.log(f\" Last file: {sample_files[-1].split('/')[-1]}\", \"info\")\n", + " logger.log(f\" Dataset: MDC2025-001\", \"info\")\n", + "else:\n", + " logger.log(\"MDS3a.txt not found - using demo file paths\", \"warning\")\n", + " sample_files = [\n", + " \"/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/01/18/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000552.root\",\n", + " ]" + ] + }, + { + "cell_type": "markdown", + "id": "6c67fc03", + "metadata": {}, + "source": [ + "## 5. Configure Parallelization Parameters\n", + "\n", + "Explore key parameters for optimizing DaskProcessor performance based on your hardware and workload characteristics." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1b08e198", + "metadata": {}, + "outputs": [], + "source": [ + "# Key DaskProcessor.process_data() parameters:\n", + "\n", + "parameter_guide = {\n", + " \"n_workers\": {\n", + " \"description\": \"Number of parallel workers in the Dask cluster\",\n", + " \"default\": \"All available CPU cores\",\n", + " \"example\": \"n_workers=4 # Use 4 workers\",\n", + " \"use_case\": \"Scales to machine resources\"\n", + " },\n", + " \"threads_per_worker\": {\n", + " \"description\": \"Number of threads per worker\",\n", + " \"default\": 1,\n", + " \"example\": \"threads_per_worker=2 # 2 threads per worker\",\n", + " \"use_case\": \"For I/O-bound tasks, increase threads\"\n", + " },\n", + " \"processes\": {\n", + " \"description\": \"Use processes instead of threads\",\n", + " \"default\": False,\n", + " \"example\": \"processes=True # Use process-based parallelism\",\n", + " \"use_case\": \"CPU-bound tasks, GIL avoidance\"\n", + " },\n", + " \"show_progress\": {\n", + " \"description\": \"Display a progress bar during processing\",\n", + " \"default\": True,\n", + " \"example\": \"show_progress=True\",\n", + " \"use_case\": \"Monitor long-running jobs\"\n", + " },\n", + " \"retries\": {\n", + " \"description\": \"Number of retries for failed tasks\",\n", + " \"default\": 0,\n", + " \"example\": \"retries=2 # Retry up to 2 times\",\n", + " \"use_case\": \"Resilience to transient failures\"\n", + " }\n", + "}\n", + "\n", + "logger.log(\"Parallelization Parameter Guide:\", \"success\")\n", + "for param, details in parameter_guide.items():\n", + " logger.log(f\"\\n{param}:\", \"info\")\n", + " logger.log(f\" Description: {details['description']}\", \"info\")\n", + " logger.log(f\" Default: {details['default']}\", \"info\")\n", + " logger.log(f\" Example: {details['example']}\", \"info\")\n", + " logger.log(f\" Use Case: {details['use_case']}\", \"info\")" + ] + }, + { + "cell_type": "markdown", + "id": "49d1cb73", + "metadata": {}, + "source": [ + "## 6. Connect to Remote Dask Scheduler\n", + "\n", + "Scale beyond a single machine by connecting to a Dask cluster for large-scale distributed computing across multiple nodes." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d4814447", + "metadata": {}, + "outputs": [], + "source": [ + "# Remote scheduler setup instruction\n", + "remote_scheduler_guide = \"\"\"\n", + "STEP 1: Start Dask Scheduler on Cluster Head Node\n", + "===================================================\n", + "In a tmux session on your Dask cluster's head node:\n", + "\n", + " dask-scheduler --port 8786\n", + "\n", + "The scheduler will output something like:\n", + " \"Scheduler started at tcp://cluster-head.example.com:8786\"\n", + "\n", + "\n", + "STEP 2: Connect from Analysis Script\n", + "====================================\n", + "In your analysis notebook/script:\n", + "\n", + " branches = {\"trk.mom\": \"momentum\", \"trk.pos\": \"position\"}\n", + " \n", + " result = dask_proc.process_data(\n", + " file_list_path=\"/path/to/file_list.txt\",\n", + " branches=branches,\n", + " scheduler_address=\"tcp://cluster-head.example.com:8786\"\n", + " )\n", + "\n", + "The scheduler handles distributing tasks across all available worker nodes.\n", + "Worker processes should already be running on cluster nodes.\n", + "\n", + "\n", + "ADVANTAGES OF REMOTE SCHEDULER:\n", + "- Distribute work across multiple machines\n", + "- Utilize all available compute resources on the cluster\n", + "- Persistent scheduler can accept multiple jobs\n", + "- Progress monitoring from your local machine\n", + "- Decoupled job submission from execution\n", + "\"\"\"\n", + "\n", + "logger.log(remote_scheduler_guide, \"info\")" + ] + }, + { + "cell_type": "markdown", + "id": "6d6e5cbc", + "metadata": {}, + "source": [ + "## 7. Custom Worker Functions\n", + "\n", + "Define custom processing logic for specialized data transformations, filtering, and manipulations that go beyond simple branch selection." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1e43e725", + "metadata": {}, + "outputs": [], + "source": [ + "# Example custom worker function\n", + "def custom_physics_worker(file_path: str) -> Optional[ak.Array]:\n", + " \"\"\"\n", + " Custom worker function that performs specialized physics analysis:\n", + " - Reads specific branches from ROOT file\n", + " - Applies physics cuts (e.g., momentum threshold)\n", + " - Returns filtered Awkward Array\n", + " \n", + " Parameters:\n", + " file_path (str): Path to the ROOT file to process\n", + " \n", + " Returns:\n", + " ak.Array or None: Filtered data as Awkward Array\n", + " \"\"\"\n", + " try:\n", + " from pyutils.pyread import Reader\n", + " \n", + " # Initialize reader for this file\n", + " reader = Reader(file_path, tree_path=\"EventNtuple/ntuple\")\n", + " \n", + " # Read track data\n", + " data = reader.read(branches=[\"trk.mom\", \"trk.pos\", \"trk.charge\"])\n", + " \n", + " if data is None or len(data) == 0:\n", + " return None\n", + " \n", + " # Example physics cuts:\n", + " # - Keep only high-momentum tracks (momentum > 100 MeV/c)\n", + " # - Keep only positively charged tracks\n", + " high_mom_mask = data.trk.mom > 100\n", + " positive_charge_mask = data.trk.charge > 0\n", + " \n", + " filtered = data[high_mom_mask & positive_charge_mask]\n", + " \n", + " return filtered if len(filtered) > 0 else None\n", + " \n", + " except Exception as e:\n", + " print(f\"Error processing {file_path}: {e}\")\n", + " return None\n", + "\n", + "\n", + "# Example: Using custom worker function\n", + "logger.log(\"Custom Worker Function Example:\", \"success\")\n", + "logger.log(\"\"\"\n", + "# Define your custom worker function\n", + "\n", + "def my_custom_worker(file_path):\n", + " from pyutils.pyread import Reader\n", + " reader = Reader(file_path, tree_path=\"EventNtuple/ntuple\")\n", + " data = reader.read(branches=[\"trk.mom\", \"trk.pos\"])\n", + " \n", + " # Apply custom cuts\n", + " filtered = data[data.trk.mom > 100]\n", + " \n", + " return filtered\n", + "\n", + "# Use it with DaskProcessor\n", + "result = dask_proc.process_data(\n", + " file_list_path=\"/path/to/file_list.txt\",\n", + " custom_worker_func=my_custom_worker,\n", + " n_workers=4,\n", + " show_progress=True\n", + ")\n", + "\"\"\", \"info\")\n", + "\n", + "logger.log(\"\\nKey Requirements for Custom Worker Functions:\", \"info\")\n", + "logger.log(\" ✓ Must accept file_path as a string parameter\", \"info\")\n", + "logger.log(\" ✓ Must return an Awkward Array or None\", \"info\")\n", + "logger.log(\" ✓ Should handle exceptions gracefully\", \"info\")\n", + "logger.log(\" ✓ Cannot rely on global state (runs in separate processes)\", \"info\")" + ] + }, + { + "cell_type": "markdown", + "id": "c3453a50", + "metadata": {}, + "source": [ + "## 8. Compare Standard vs Dask Processors\n", + "\n", + "Benchmark and understand the performance differences between standard Processor and DaskProcessor for various workload scenarios." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8b9ef82d", + "metadata": {}, + "outputs": [], + "source": [ + "# Comparison table\n", + "comparison = {\n", + " \"Feature\": [\n", + " \"Parallelization Type\",\n", + " \"Best For\",\n", + " \"Scalability\",\n", + " \"Cluster Support\",\n", + " \"Progress Tracking\",\n", + " \"Memory Efficiency\",\n", + " \"Debugging\",\n", + " \"Error Resilience\"\n", + " ],\n", + " \"Standard Processor\": [\n", + " \"Thread pool (max_workers param)\",\n", + " \"Small file lists, quick testing\",\n", + " \"Single machine (limited by cores)\",\n", + " \"No native support\",\n", + " \"Basic logging only\",\n", + " \"Loads all results in memory\",\n", + " \"Easier (all in-process)\",\n", + " \"Limited retry mechanism\"\n", + " ],\n", + " \"DaskProcessor\": [\n", + " \"Dask distributed framework\",\n", + " \"Large file lists, HPC clusters\",\n", + " \"Multi-machine via remote scheduler\",\n", + " \"Full support (tcp:// addresses)\",\n", + " \"Progress bar with live updates\",\n", + " \"Distributed memory management\",\n", + " \"More complex (separate processes)\",\n", + " \"Built-in retries parameter\"\n", + " ]\n", + "}\n", + "\n", + "# Display comparison\n", + "logger.log(\"STANDARD PROCESSOR vs DASK PROCESSOR\", \"success\")\n", + "logger.log(\"=\" * 80, \"info\")\n", + "\n", + "import pandas as pd\n", + "df_comparison = pd.DataFrame(comparison)\n", + "logger.log(str(df_comparison.to_string(index=False)), \"info\")\n", + "\n", + "# When to use which\n", + "logger.log(\"\\n\" + \"=\" * 80, \"info\")\n", + "logger.log(\"DECISION GUIDE:\", \"success\")\n", + "logger.log(\"\"\"\n", + "Use STANDARD PROCESSOR when:\n", + " • Processing a small number of files (< 10-20)\n", + " • You want simpler debugging\n", + " • Operating on a single machine without HPC resources\n", + " • Throughput is not critical\n", + " • You're doing interactive analysis (faster startup)\n", + "\n", + "Use DASK PROCESSOR when:\n", + " • Processing hundreds or thousands of files\n", + " • You have access to a multi-core machine or HPC cluster\n", + " • You need progress monitoring for long-running jobs\n", + " • You want resilience to transient failures (retries)\n", + " • Complex workflows requiring custom worker functions\n", + " • You want easy scaling without code changes\n", + "\n", + "KEY ADVANTAGE: Both have identical APIs and output formats!\n", + "You can switch between them without changing analysis code.\n", + "\"\"\", \"info\")\n", + "\n", + "logger.log(\"\\n✓ This concludes the DaskProcessor tutorial!\", \"success\")" + ] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/examples/notebooks/pyutils_basics_dask.ipynb b/examples/notebooks/pyutils_basics_dask.ipynb new file mode 100644 index 0000000..98e6b7a --- /dev/null +++ b/examples/notebooks/pyutils_basics_dask.ipynb @@ -0,0 +1,588 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "750b4f5c", + "metadata": {}, + "source": [ + "# Getting Started: pyutils Basics with Dask\n", + "\n", + "## Introduction\n", + "\n", + "This tutorial builds on the basic `pyutils` functionality from [pyutils_basics.ipynb](pyutils_basics.ipynb) but focuses on **parallel processing** of multiple files using **DaskProcessor**.\n", + "\n", + "You will learn how to:\n", + "- Use `DaskProcessor` to process multiple files in parallel\n", + "- Apply the same analysis to aggregated data from many files\n", + "- Scale from a single file to thousands of files without code changes\n", + "- Leverage multi-core systems and HPC clusters\n", + "\n", + "## Key Difference from Serial Processing\n", + "\n", + "| Aspect | Standard `Processor` | `DaskProcessor` |\n", + "|--------|----------------------|-----------------|\n", + "| **Best For** | Single file or small file lists | Multiple files / large datasets |\n", + "| **Parallelization** | Thread pool on single machine | Dask distributed framework |\n", + "| **Scaling** | Limited to machine cores | Scales to clusters |\n", + "| **Progress Tracking** | Basic logging | Real-time progress bar |\n", + "\n", + "## Table of Contents\n", + "1. Setting up your environment\n", + "2. Creating a file list for multi-file processing\n", + "3. Processing data with DaskProcessor\n", + "4. Applying selection cuts to aggregated data\n", + "5. Inspecting aggregated data\n", + "6. Performing vector operations\n", + "7. Creating plots from aggregated results\n", + "8. Complete example with multiple files" + ] + }, + { + "cell_type": "markdown", + "id": "83ae7651", + "metadata": {}, + "source": [ + "## 1. Setting Up Your Environment" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a2c2364e", + "metadata": {}, + "outputs": [], + "source": [ + "# Import external packages\n", + "import awkward as ak\n", + "import numpy as np\n", + "\n", + "# Import pyutils modules\n", + "from pyutils.pydask import DaskProcessor\n", + "from pyutils.pyselect import Select\n", + "from pyutils.pyprint import Print\n", + "from pyutils.pyvector import Vector\n", + "from pyutils.pyplot import Plot\n", + "from pyutils.pylogger import Logger\n", + "\n", + "# Initialize logger for notebook output\n", + "logger = Logger(print_prefix=\"[pyutils_dask]\", verbosity=2)" + ] + }, + { + "cell_type": "markdown", + "id": "8066b44f", + "metadata": {}, + "source": [ + "## 2. Creating a File List for Multi-File Processing\n", + "\n", + "When working with multiple files, you need to create a file list. Each line in the file should contain the full path to a ROOT file." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e337bf4c", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "\n", + "# Load the MDS3a.txt file list from the repository\n", + "notebook_dir = os.getcwd()\n", + "file_list_path = os.path.join(notebook_dir, \"../../MDS3a.txt\")\n", + "\n", + "# Read the file list\n", + "if os.path.exists(file_list_path):\n", + " with open(file_list_path, 'r') as f:\n", + " sample_files = [line.strip() for line in f if line.strip()]\n", + " \n", + " logger.log(f\"Loaded file list from: MDS3a.txt\", \"success\")\n", + " logger.log(f\"Total files available: {len(sample_files)}\", \"info\")\n", + "else:\n", + " logger.log(\"MDS3a.txt not found, creating empty list\", \"warning\")\n", + " sample_files = []\n", + "\n", + "# Display first few files\n", + "logger.log(\"First 3 files in the list:\", \"info\")\n", + "for i, f in enumerate(sample_files[:3]):\n", + " logger.log(f\" {i+1}. {f.split('/')[-1]}\", \"info\")" + ] + }, + { + "cell_type": "markdown", + "id": "12260f2d", + "metadata": {}, + "source": [ + "## 3. Processing Data with DaskProcessor\n", + "\n", + "Now process all files in parallel using DaskProcessor. This demonstrates the key advantage of Dask: as your file list grows from 1 to 1000s of files, the same code automatically scales across available cores or connects to a remote HPC cluster." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9c1f22bd", + "metadata": {}, + "outputs": [], + "source": [ + "# Initialize DaskProcessor with remote settings for multi-file processing\n", + "processor = DaskProcessor(\n", + " tree_path=\"EventNtuple/ntuple\",\n", + " use_remote=True, # Access remote persistent datasets\n", + " location=\"disk\", # Read from disk storage\n", + " verbosity=1,\n", + " worker_verbosity=0\n", + ")\n", + "\n", + "logger.log(\"DaskProcessor initialized\", \"success\")\n", + "logger.log(\"Ready to process multiple files in parallel\", \"info\")\n", + "\n", + "# Define branches to extract\n", + "branches = [\"trksegs\"]\n", + "\n", + "logger.log(f\"Branches to extract: {branches}\", \"info\")\n", + "logger.log(\"Reading from persistent dataset (disk location)\", \"info\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "acbd14c7", + "metadata": {}, + "outputs": [], + "source": [ + "# Process data using DaskProcessor with multiple files in parallel\n", + "logger.log(\"Processing multiple files with DaskProcessor...\", \"info\")\n", + "logger.log(f\"Total files to process: {len(sample_files)}\", \"info\")\n", + "\n", + "try:\n", + " if sample_files and file_list_path:\n", + " logger.log(\"Using DaskProcessor with multi-file parallel processing\", \"info\")\n", + " \n", + " # Process all files in parallel\n", + " data = processor.process_data(\n", + " file_list_path=file_list_path,\n", + " branches=branches,\n", + " n_workers=4, # Use 4 parallel workers\n", + " threads_per_worker=1, # 1 thread per worker\n", + " processes=False, # Use threads (not processes)\n", + " show_progress=True # Show progress bar during processing\n", + " )\n", + " \n", + " else:\n", + " logger.log(\"File list not available, processing single file for demo\", \"warning\")\n", + " \n", + " from pyutils.pyprocess import Processor\n", + " demo_processor = Processor(\n", + " verbosity=1,\n", + " use_remote=True,\n", + " location=\"disk\"\n", + " )\n", + " \n", + " # Use first file from MDS3a.txt list\n", + " if sample_files:\n", + " demo_file = sample_files[0]\n", + " logger.log(f\"Processing first file from MDS3a.txt: {demo_file.split('/')[-1]}\", \"info\")\n", + " else:\n", + " demo_file = \"/pnfs/mu2e/tape/phy-nts/nts/mu2e/MDS2ac-OnSpillTriggered/MDC2020aw_perfect_v1_3/root/8c/0b/nts.mu2e.MDS2ac-OnSpillTriggered.MDC2020aw_perfect_v1_3.0.root\"\n", + " logger.log(\"Using fallback file for demo\", \"warning\")\n", + " \n", + " data = demo_processor.process_data(\n", + " file_name=demo_file,\n", + " branches=branches\n", + " )\n", + " \n", + " logger.log(\"Data aggregation complete\", \"success\")\n", + " logger.log(f\"Total events from all files: {len(data)}\", \"info\")\n", + " \n", + "except Exception as e:\n", + " logger.log(f\"Error during processing: {e}\", \"error\")\n", + " logger.log(\"Check that Mu2e environment is properly initialized\", \"warning\")" + ] + }, + { + "cell_type": "markdown", + "id": "050d8435", + "metadata": {}, + "source": [ + "## 4. Applying Selection Cuts to Aggregated Data\n", + "\n", + "After processing all files with DaskProcessor, apply selection cuts to the combined dataset. The workflow is identical to the serial case." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "75402889", + "metadata": {}, + "outputs": [], + "source": [ + "# Initialize selector\n", + "selector = Select(verbosity=1)\n", + "\n", + "# Select track segments at tracker entrance\n", + "logger.log(\"Selecting tracks at tracker entrance...\", \"info\")\n", + "\n", + "at_trkent = selector.select_surface(\n", + " data=data,\n", + " surface_name=\"TT_Front\"\n", + ")\n", + "\n", + "# Add selection mask to data\n", + "data[\"at_trkent\"] = at_trkent\n", + "\n", + "# Apply mask\n", + "trkent = data[at_trkent]\n", + "\n", + "logger.log(f\"Selected {len(trkent)} events at tracker entrance\", \"success\")\n", + "logger.log(f\"Selection efficiency: {100*len(trkent)/len(data):.1f}%\", \"info\")" + ] + }, + { + "cell_type": "markdown", + "id": "1e82415f", + "metadata": {}, + "source": [ + "## 5. Inspecting Aggregated Data\n", + "\n", + "Verify the data structure and cuts using the Print utility." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "706a9762", + "metadata": {}, + "outputs": [], + "source": [ + "# Initialize printer\n", + "printer = Print(verbose=False)\n", + "\n", + "# Display data structure after selection\n", + "logger.log(\"Data structure at tracker entrance:\", \"info\")\n", + "printer.print_n_events(trkent, n_events=1)" + ] + }, + { + "cell_type": "markdown", + "id": "8ea902fd", + "metadata": {}, + "source": [ + "## 6. Performing Vector Operations on Aggregated Data\n", + "\n", + "Calculate quantities (like momentum magnitude) from the aggregated data." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2cce3f08", + "metadata": {}, + "outputs": [], + "source": [ + "# Initialize vector processor\n", + "vector = Vector(verbosity=1)\n", + "\n", + "# Calculate momentum magnitude for all tracks\n", + "logger.log(\"Computing momentum magnitude...\", \"info\")\n", + "\n", + "mom_mag = vector.get_mag(\n", + " branch=trkent[\"trksegs\"],\n", + " vector_name=\"mom\"\n", + ")\n", + "\n", + "logger.log(\"Momentum magnitude computed\", \"success\")\n", + "logger.log(f\"Momentum range: {ak.min(ak.flatten(mom_mag, axis=None)):.2f} - {ak.max(ak.flatten(mom_mag, axis=None)):.2f} MeV/c\", \"info\")" + ] + }, + { + "cell_type": "markdown", + "id": "36b8b6ae", + "metadata": {}, + "source": [ + "## 7. Creating Plots from Aggregated Results\n", + "\n", + "Create publication-quality plots from the combined dataset. These plots show aggregated statistics across all processed files." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a2714dce", + "metadata": {}, + "outputs": [], + "source": [ + "# Initialize plotter\n", + "plotter = Plot()\n", + "\n", + "# Flatten arrays for plotting\n", + "time_flat = ak.flatten(trkent[\"trksegs\"][\"time\"], axis=None)\n", + "mom_mag_flat = ak.flatten(mom_mag, axis=None)\n", + "\n", + "logger.log(f\"Preparing plots from {len(time_flat)} track measurements\", \"info\")" + ] + }, + { + "cell_type": "markdown", + "id": "55a2518f", + "metadata": {}, + "source": [ + "### 7.1 Create 1D Histogram: Time Distribution" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e722c894", + "metadata": {}, + "outputs": [ + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mRunning cells with 'Python 3.9.25' requires the ipykernel package.\n", + "\u001b[1;31mCreate a Python Environment with the required packages.\n", + "\u001b[1;31mOr install 'ipykernel' using the command: '/bin/python -m pip install ipykernel -U --user --force-reinstall'" + ] + } + ], + "source": [ + "logger.log(\"Creating 1D histogram of time distribution...\", \"info\")\n", + "\n", + "plotter.plot_1D(\n", + " time_flat,\n", + " nbins=100,\n", + " xmin=450,\n", + " xmax=1695,\n", + " title=\"Time at Tracker Entrance (from Dask-processed Data)\",\n", + " xlabel=\"Fit time at Trk Ent [ns]\",\n", + " ylabel=\"Events per bin\",\n", + " out_path='h1_time_dask.png',\n", + " stat_box=True,\n", + " error_bars=True\n", + ")\n", + "\n", + "logger.log(\"1D histogram created: h1_time_dask.png\", \"success\")" + ] + }, + { + "cell_type": "markdown", + "id": "b028bda6", + "metadata": {}, + "source": [ + "### 7.2 Create 2D Histogram: Momentum vs. Time" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "88f696ed", + "metadata": {}, + "outputs": [], + "source": [ + "logger.log(\"Creating 2D histogram of momentum vs. time...\", \"info\")\n", + "\n", + "plotter.plot_2D(\n", + " x=mom_mag_flat,\n", + " y=time_flat,\n", + " nbins_x=100,\n", + " xmin=85,\n", + " xmax=115,\n", + " nbins_y=100,\n", + " ymin=450,\n", + " ymax=1650,\n", + " title=\"Momentum vs. Time at Tracker Entrance (from Dask-processed Data)\",\n", + " xlabel=\"Fit mom at Trk Ent [MeV/c]\",\n", + " ylabel=\"Fit time at Trk Ent [ns]\",\n", + " out_path='h2_timevmom_dask.png'\n", + ")\n", + "\n", + "logger.log(\"2D histogram created: h2_timevmom_dask.png\", \"success\")" + ] + }, + { + "cell_type": "markdown", + "id": "cb31e903", + "metadata": {}, + "source": [ + "## 8. Complete Example with Multiple Files\n", + "\n", + "Here's a complete working example showing how to scale from a single file to many files using DaskProcessor. The same analysis code works for any number of files." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "45655cf9", + "metadata": {}, + "outputs": [], + "source": [ + "\"\"\"\n", + "COMPLETE EXAMPLE: Multi-File Analysis with DaskProcessor\n", + "\n", + "The following code is a template for analyzing multiple files.\n", + "Replace file_list_path with your actual file list to run the analysis.\n", + "\n", + "Key features:\n", + "- Processes multiple files in parallel using Dask\n", + "- Same analysis code as above - just swap the Processor call\n", + "- Automatically scales to available cores/clusters\n", + "- Built-in progress monitoring\n", + "\"\"\"\n", + "\n", + "def complete_dask_analysis(file_list_path, branches, n_workers=4):\n", + " \"\"\"\n", + " Complete workflow for multi-file analysis with DaskProcessor.\n", + " \n", + " Parameters:\n", + " file_list_path (str): Path to file containing list of ROOT files\n", + " branches (list): List of branches to extract\n", + " n_workers (int): Number of Dask workers to use\n", + " \n", + " Returns:\n", + " dict: Results including plots and statistics\n", + " \"\"\"\n", + " \n", + " # 1. INITIALIZE\n", + " processor = DaskProcessor(tree_path=\"EventNtuple/ntuple\", verbosity=1)\n", + " selector = Select(verbosity=0)\n", + " vector = Vector(verbosity=0)\n", + " plotter = Plot()\n", + " \n", + " # 2. PROCESS DATA - This is where DaskProcessor scales across files!\n", + " data = processor.process_data(\n", + " file_list_path=file_list_path,\n", + " branches=branches,\n", + " n_workers=n_workers,\n", + " threads_per_worker=1,\n", + " processes=False,\n", + " show_progress=True # Progress bar during processing\n", + " )\n", + " \n", + " if data is None:\n", + " print(\"Error: No data returned from processing\")\n", + " return None\n", + " \n", + " # 3. APPLY SELECTIONS\n", + " at_trkent = selector.select_surface(data=data, surface_name=\"TT_Front\")\n", + " trkent = data[at_trkent]\n", + " \n", + " # 4. COMPUTE QUANTITIES\n", + " mom_mag = vector.get_mag(branch=trkent[\"trksegs\"], vector_name=\"mom\")\n", + " \n", + " # 5. CREATE PLOTS\n", + " time_flat = ak.flatten(trkent[\"trksegs\"][\"time\"], axis=None)\n", + " mom_mag_flat = ak.flatten(mom_mag, axis=None)\n", + " \n", + " # 1D plot\n", + " plotter.plot_1D(\n", + " time_flat, nbins=100, xmin=450, xmax=1695,\n", + " title=\"Time Distribution\", xlabel=\"Time [ns]\",\n", + " ylabel=\"Events\", out_path='time_dask.png'\n", + " )\n", + " \n", + " # 2D plot\n", + " plotter.plot_2D(\n", + " x=mom_mag_flat, y=time_flat,\n", + " nbins_x=100, xmin=85, xmax=115,\n", + " nbins_y=100, ymin=450, ymax=1650,\n", + " title=\"Momentum vs. Time\", \n", + " xlabel=\"Momentum [MeV/c]\", ylabel=\"Time [ns]\",\n", + " out_path='momentum_time_dask.png'\n", + " )\n", + " \n", + " # 6. RETURN RESULTS\n", + " return {\n", + " 'total_events': len(data),\n", + " 'selected_events': len(trkent),\n", + " 'efficiency': len(trkent) / len(data),\n", + " 'mom_min': ak.min(mom_mag_flat),\n", + " 'mom_max': ak.max(mom_mag_flat),\n", + " 'time_min': ak.min(time_flat),\n", + " 'time_max': ak.max(time_flat),\n", + " }\n", + "\n", + "\n", + "# Example usage (uncomment and modify for real analysis):\n", + "# \n", + "# # Create your file list (one file per line)\n", + "# file_list = \"/path/to/file_list.txt\"\n", + "# \n", + "# # Run analysis\n", + "# results = complete_dask_analysis(\n", + "# file_list_path=file_list,\n", + "# branches=[\"trksegs\"],\n", + "# n_workers=4\n", + "# )\n", + "# \n", + "# # Print results\n", + "# if results:\n", + "# print(f\"Total events: {results['total_events']}\")\n", + "# print(f\"Selected events: {results['selected_events']}\")\n", + "# print(f\"Selection efficiency: {100 * results['efficiency']:.1f}%\")\n", + "\n", + "logger.log(\"Complete example function defined\", \"success\")\n", + "logger.log(\"See commented code above for usage instructions\", \"info\")" + ] + }, + { + "cell_type": "markdown", + "id": "5cc8d550", + "metadata": {}, + "source": [ + "## Key Takeaways\n", + "\n", + "### When to Use DaskProcessor\n", + "\n", + "Use **DaskProcessor** (this tutorial) when:\n", + "- ✓ Processing multiple files (10s, 100s, or 1000s)\n", + "- ✓ You want progress monitoring across files\n", + "- ✓ You want automatic scaling to available cores\n", + "- ✓ You plan to connect to an HPC cluster later\n", + "- ✓ You need resilience to transient failures\n", + "\n", + "Use **Standard Processor** when:\n", + "- ✓ Working with a single file\n", + "- ✓ Processing a small number of files (< 5)\n", + "- ✓ Simpler debugging is needed\n", + "- ✓ Faster startup time is important\n", + "\n", + "### Workflow Comparison\n", + "\n", + "```\n", + "STANDARD PROCESSOR DASK PROCESSOR\n", + "────────────────────────── ──────────────────────────\n", + "File 1 → Process File 1 ─┐\n", + "File 2 → Process or File 2 ─┼→ Parallel Processing\n", + "File 3 → Process File 3 ─┘\n", + " (scales across cores/cluster)\n", + "\n", + "Same analysis code after processing!\n", + "```\n", + "\n", + "### Scaling Path\n", + "\n", + "1. **Single File**: Use standard `Processor` for development\n", + "2. **Multiple Files**: Switch to `DaskProcessor` with local workers\n", + "3. **Large Scale**: Point to remote Dask scheduler on HPC cluster\n", + "4. **Code Change**: None! Just change the scheduler address\n", + "\n", + "The real power of DaskProcessor is that you write your analysis once, and it scales effortlessly from your laptop to a full cluster." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "name": "python", + "version": "3.9.25" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/examples/scripts/pyutils_basics_dask.py b/examples/scripts/pyutils_basics_dask.py new file mode 100644 index 0000000..880c26e --- /dev/null +++ b/examples/scripts/pyutils_basics_dask.py @@ -0,0 +1,300 @@ +""" +pyutils basics with Dask +========================= + +This script demonstrates the core pyutils functionality using DaskProcessor +to handle multiple files in parallel. It shows: + +1. Importing data from multiple files using DaskProcessor +2. Applying selection cuts +3. Inspecting data +4. Performing vector operations +5. Creating plots from aggregated data + +Key differences from standard pyutils_basics: +- Uses DaskProcessor instead of Processor for parallel file handling +- Works with multiple files instead of a single file +- Scales across cores/clusters using Dask +""" + +import awkward as ak +import tempfile +import os + +# ============================================================================ +# 1. Setting up your environment +# ============================================================================ + +print("=" * 70) +print("pyutils Basics with Dask") +print("=" * 70) + +# Import the pyutils modules +from pyutils.pydask import DaskProcessor +from pyutils.pyselect import Select +from pyutils.pyprint import Print +from pyutils.pyvector import Vector +from pyutils.pyplot import Plot +from pyutils.pylogger import Logger + +# Initialize logger +logger = Logger(print_prefix="[pyutils_dask]", verbosity=2) + +# ============================================================================ +# 2. Processing Data with DaskProcessor +# ============================================================================ + +logger.log("Step 1: Initializing DaskProcessor", "info") + +# Initialize DaskProcessor with appropriate settings +processor = DaskProcessor( + tree_path="EventNtuple/ntuple", + use_remote=True, # Access files from remote location + location="disk", # Read from disk (persistent dataset) + verbosity=1, + worker_verbosity=0 +) + +logger.log("DaskProcessor initialized", "success") + +# Define the branches we want +branches = ["trksegs"] + +logger.log("Branches to extract: " + str(branches), "info") + +# For demonstration, show the API for multi-file processing +logger.log("\nMulti-File Processing Example:", "info") +logger.log(""" +To process multiple files, use a file list with DaskProcessor: + +1. Prepare a file list (one file path per line): + The repository includes MDS3a.txt with persistent dataset files + +2. Process with DaskProcessor: + + processor = DaskProcessor( + tree_path="EventNtuple/ntuple", + use_remote=True, # Access remote persistent datasets + location="disk" # Read from disk storage + ) + + data = processor.process_data( + file_list_path="MDS3a.txt", + branches=branches, + n_workers=4, # Use 4 parallel workers + show_progress=True # Show progress bar + ) + +Advantages over Processor: +- Scales across multiple cores automatically +- Easy to add more files without code changes +- Built-in progress monitoring +- Can connect to remote Dask clusters +""", "info") + +# Create a sample file list for demonstration +logger.log("\nCreating sample file list for demonstration...", "info") + +# Use the MDS3a.txt file list provided in the repository +import os +script_dir = os.path.dirname(os.path.abspath(__file__)) +file_list_path = os.path.join(script_dir, "../../MDS3a.txt") + +# Verify file exists +if os.path.exists(file_list_path): + with open(file_list_path, 'r') as f: + sample_files = [line.strip() for line in f if line.strip()] + + logger.log(f"Loaded file list from: {file_list_path}", "success") + logger.log(f"Total files in list: {len(sample_files)}", "info") + logger.log(f"First file: {sample_files[0][-80:]}", "info") +else: + logger.log(f"File list not found at: {file_list_path}", "warning") + logger.log("Using empty file list for demo", "info") + sample_files = [] + file_list_path = None + +# ============================================================================ +# 3. Processing Single File (Demo) +# ============================================================================ + +logger.log("\n" + "=" * 70, "info") +logger.log("Step 2: Processing Multiple Files with DaskProcessor", "info") +logger.log("=" * 70, "info") + +logger.log(f"Processing {len(sample_files)} files from MDS3a.txt with DaskProcessor...", "info") + +try: + # Use DaskProcessor to load and process multiple files in parallel + if sample_files and file_list_path: + logger.log("Using DaskProcessor with multi-file processing", "info") + + data = processor.process_data( + file_list_path=file_list_path, + branches=branches, + n_workers=4, # Use 4 parallel workers + show_progress=True # Show progress bar + ) + + else: + logger.log("File list not available, cannot process multiple files", "warning") + logger.log("Skipping analysis", "info") + raise Exception("MDS3a.txt file list required for this example") + + logger.log("Data aggregation complete", "success") + logger.log(f"Total events from all files: {len(data)}", "info") + + # ======================================================================== + # 4. Applying Selection Cuts + # ======================================================================== + + logger.log("\n" + "=" * 70, "info") + logger.log("Step 3: Applying Selection Cuts", "info") + logger.log("=" * 70, "info") + + selector = Select(verbosity=1) + + logger.log("Selecting track segments at tracker entrance (TT_Front)...", "info") + + # Create a mask to select track segments at the tracker entrance + at_trkent = selector.select_surface( + data=data, + surface_name="TT_Front" # Tracker entrance + ) + + # Add the mask to the data array + data["at_trkent"] = at_trkent + + # Apply the mask + trkent = data[at_trkent] + + logger.log(f"Selected {len(trkent)} events at tracker entrance", "success") + + # ======================================================================== + # 5. Inspecting Your Data + # ======================================================================== + + logger.log("\n" + "=" * 70, "info") + logger.log("Step 4: Inspecting Data", "info") + logger.log("=" * 70, "info") + + printer = Print(verbose=False) + + logger.log("Data structure at tracker entrance:", "info") + printer.print_n_events(trkent, n_events=1) + + # ======================================================================== + # 6. Performing Vector Operations + # ======================================================================== + + logger.log("\n" + "=" * 70, "info") + logger.log("Step 5: Performing Vector Operations", "info") + logger.log("=" * 70, "info") + + vector = Vector(verbosity=1) + + logger.log("Computing momentum magnitude...", "info") + + mom_mag = vector.get_mag( + branch=trkent["trksegs"], + vector_name="mom" + ) + + logger.log("Momentum magnitude computed", "success") + + # ======================================================================== + # 7. Creating Plots + # ======================================================================== + + logger.log("\n" + "=" * 70, "info") + logger.log("Step 6: Creating Plots", "info") + logger.log("=" * 70, "info") + + plotter = Plot() + + # Flatten arrays for plotting + time_flat = ak.flatten(trkent["trksegs"]["time"], axis=None) + mom_mag_flat = ak.flatten(mom_mag, axis=None) + + logger.log(f"Time values to plot: {len(time_flat)}", "info") + logger.log(f"Momentum values to plot: {len(mom_mag_flat)}", "info") + + # 1D Histogram: Time distribution + logger.log("Creating 1D histogram of time distribution...", "info") + + plotter.plot_1D( + time_flat, + nbins=100, + xmin=450, + xmax=1695, + title="Time at Tracker Entrance (Dask Example)", + xlabel="Fit time at Trk Ent [ns]", + ylabel="Events per bin", + out_path='h1_time_dask.png', + stat_box=True, + error_bars=True + ) + + logger.log("1D histogram created: h1_time_dask.png", "success") + + # 2D Histogram: Momentum vs. Time + logger.log("Creating 2D histogram of momentum vs. time...", "info") + + plotter.plot_2D( + x=mom_mag_flat, + y=time_flat, + nbins_x=100, + xmin=85, + xmax=115, + nbins_y=100, + ymin=450, + ymax=1650, + title="Momentum vs. Time at Tracker Entrance (Dask Example)", + xlabel="Fit mom at Trk Ent [MeV/c]", + ylabel="Fit time at Trk Ent [ns]", + out_path='h2_timevmom_dask.png' + ) + + logger.log("2D histogram created: h2_timevmom_dask.png", "success") + + # ======================================================================== + # Summary + # ======================================================================== + + logger.log("\n" + "=" * 70, "info") + logger.log("SUMMARY", "info") + logger.log("=" * 70, "info") + + summary = f""" +Multi-File Processing with DaskProcessor: + - Total files processed: {len(sample_files)} + - Total events aggregated: {len(data)} + - Events at tracker entrance: {len(trkent)} + - Momentum range: {ak.min(mom_mag_flat):.2f} - {ak.max(mom_mag_flat):.2f} MeV/c + - Time range: {ak.min(time_flat):.0f} - {ak.max(time_flat):.0f} ns + +Output plots created: + - h1_time_dask.png (1D time distribution) + - h2_timevmom_dask.png (2D momentum vs time) + +Key advantages of DaskProcessor: +✓ Process multiple files in parallel +✓ Automatic load balancing across cores +✓ Progress tracking with show_progress=True +✓ Easy scaling to remote clusters +✓ Same output format as standard Processor +✓ Built-in error resilience with retries +""" + logger.log(summary, "info") + +except FileNotFoundError: + logger.log("Sample data file not found. The script demonstrates the API.", "warning") + logger.log("\nTo run with real data:", "info") + logger.log("1. Edit the sample_files list with actual file paths", "info") + logger.log("2. Set appropriate file_list_path for multiple files", "info") + logger.log("3. Run: processor.process_data(file_list_path=..., branches=...)", "info") +except Exception as e: + logger.log(f"Error during processing: {e}", "error") + logger.log("Check that Mu2e environment is properly initialized", "warning") + +logger.log("\nScript completed!", "success") diff --git a/scripts/benchmark_pydask.py b/scripts/benchmark_pydask.py new file mode 100644 index 0000000..2591d59 --- /dev/null +++ b/scripts/benchmark_pydask.py @@ -0,0 +1,292 @@ +#!/usr/bin/env python3 +""" +Benchmarking script for DaskProcessor with pyutils analysis pipeline. + +This script benchmarks the complete pyutils analysis workflow using DaskProcessor: +- Data processing with various worker configurations +- Selection cuts +- Vector operations +- Histogram creation + +Features: +- Sweeps n_workers and threads_per_worker values +- Toggles processes True/False +- Records execution times and event statistics to CSV +- Generates performance summary + +Usage: + python3 scripts/benchmark_pydask.py --file-list MDS3a.txt --out bench_out/pydask_results.csv + +Requirements: + - MDS3a.txt or other file list with ROOT file paths + - Mu2e environment initialized with pyutils installed +""" + +import argparse +import csv +import os +import time +from statistics import mean, median + +from pyutils.pydask import DaskProcessor +from pyutils.pyselect import Select +from pyutils.pyvector import Vector +from pyutils.pyplot import Plot +from pyutils.pylogger import Logger +import awkward as ak + + +def percentile(sorted_list, p): + """Calculate percentile of a sorted list.""" + if not sorted_list: + return None + k = (len(sorted_list) - 1) * (p / 100.0) + f = int(k) + c = min(f + 1, len(sorted_list) - 1) + if f == c: + return sorted_list[int(k)] + d0 = sorted_list[f] * (c - k) + d1 = sorted_list[c] * (k - f) + return d0 + d1 + + +def run_analysis(file_list_path, n_workers, threads_per_worker, processes, logger): + """ + Run complete pyutils analysis pipeline with DaskProcessor. + + Returns dict with timing and statistics. + """ + + branches = ["trksegs"] + + # Initialize processor + processor = DaskProcessor( + tree_path="EventNtuple/ntuple", + use_remote=True, + location="disk", + verbosity=0, + worker_verbosity=0 + ) + + # Time the complete analysis + t0 = time.perf_counter() + + try: + # 1. Process data + data = processor.process_data( + file_list_path=file_list_path, + branches=branches, + n_workers=n_workers, + threads_per_worker=threads_per_worker, + processes=processes, + show_progress=False + ) + + if data is None or len(data) == 0: + return { + "n_workers": n_workers, + "threads_per_worker": threads_per_worker, + "processes": processes, + "total_time": time.perf_counter() - t0, + "total_events": 0, + "selected_events": 0, + "efficiency": 0, + "status": "failed" + } + + total_events = len(data) + + # 2. Apply selection cuts + selector = Select(verbosity=0) + at_trkent = selector.select_surface(data=data, surface_name="TT_Front") + trkent = data[at_trkent] + selected_events = len(trkent) + efficiency = selected_events / total_events if total_events > 0 else 0 + + # 3. Compute vector operations + vector = Vector(verbosity=0) + mom_mag = vector.get_mag(branch=trkent["trksegs"], vector_name="mom") + + # 4. Create plots + plotter = Plot() + time_flat = ak.flatten(trkent["trksegs"]["time"], axis=None) + mom_mag_flat = ak.flatten(mom_mag, axis=None) + + # Create placeholder plots (no actual output files) + # plotter.plot_1D(...) - skipped for benchmark + + t1 = time.perf_counter() + total_time = t1 - t0 + + return { + "n_workers": n_workers, + "threads_per_worker": threads_per_worker, + "processes": processes, + "total_time": total_time, + "total_events": total_events, + "selected_events": selected_events, + "efficiency": efficiency, + "status": "success" + } + + except Exception as e: + logger.log(f"Analysis failed: {e}", "error") + return { + "n_workers": n_workers, + "threads_per_worker": threads_per_worker, + "processes": processes, + "total_time": time.perf_counter() - t0, + "total_events": 0, + "selected_events": 0, + "efficiency": 0, + "status": f"failed: {str(e)}" + } + + +def main(): + parser = argparse.ArgumentParser( + description="Benchmark DaskProcessor with pyutils analysis pipeline" + ) + parser.add_argument( + "--file-list", + dest="file_list", + required=True, + help="Path to file list (one ROOT file path per line)" + ) + parser.add_argument( + "--out", + dest="out", + help="Summary CSV output path", + default="bench_out/pydask/benchmark_pydask_results.csv" + ) + parser.add_argument( + "--out-dir", + dest="out_dir", + help="Directory for output files", + default="bench_out/pydask" + ) + parser.add_argument( + "--n-workers-list", + dest="nw_list", + help="Comma-separated n_workers values (default: auto-sweep)", + default=None + ) + parser.add_argument( + "--threads-per-worker-list", + dest="tpw_list", + help="Comma-separated threads_per_worker values (default: 1)", + default=None + ) + parser.add_argument( + "--verbosity", + dest="verbosity", + type=int, + default=1 + ) + args = parser.parse_args() + + # Initialize logger + logger = Logger(print_prefix="[benchmark_pydask]", verbosity=args.verbosity) + + # Create output directory + os.makedirs(args.out_dir, exist_ok=True) + + # Read file list + with open(args.file_list, 'r') as f: + file_lines = [l.strip() for l in f if l.strip()] + + n_files = len(file_lines) + logger.log(f"Loaded {n_files} files from {args.file_list}", "success") + + # Determine n_workers sweep + cpu_cnt = os.cpu_count() or 1 + if args.nw_list: + nw_values = [int(x) for x in args.nw_list.split(",")] + else: + # Default sweep: powers of 2 up to CPU count and some larger values + nw_values = [1, 2, 4, 8, 16, 32, cpu_cnt, min(2 * cpu_cnt, max(1, n_files))] + nw_values = sorted(set(nw_values)) + + # Determine threads_per_worker sweep + if args.tpw_list: + tpw_values = [int(x) for x in args.tpw_list.split(",")] + else: + tpw_values = [1] + tpw_values = sorted(set(tpw_values)) + + # Prepare benchmark configurations + configs = [] + for nw in nw_values: + for tpw in tpw_values: + for use_processes in [False, True]: + configs.append({ + 'n_workers': nw, + 'threads_per_worker': tpw, + 'processes': use_processes + }) + + logger.log(f"Running {len(configs)} configurations", "info") + logger.log(f"Configurations:", "info") + logger.log(f" n_workers: {nw_values}", "info") + logger.log(f" threads_per_worker: {tpw_values}", "info") + logger.log(f" processes: [False, True]", "info") + + # Run benchmarks + results = [] + for i, config in enumerate(configs, 1): + logger.log(f"\n[{i}/{len(configs)}] Running: nw={config['n_workers']}, tpw={config['threads_per_worker']}, proc={config['processes']}", "info") + + result = run_analysis( + file_list_path=args.file_list, + n_workers=config['n_workers'], + threads_per_worker=config['threads_per_worker'], + processes=config['processes'], + logger=logger + ) + + results.append(result) + + logger.log(f" Time: {result['total_time']:.2f}s | Events: {result['total_events']} | Selected: {result['selected_events']} | Status: {result['status']}", "info") + + # Write results to CSV + if results: + fieldnames = [ + 'n_workers', + 'threads_per_worker', + 'processes', + 'total_time', + 'total_events', + 'selected_events', + 'efficiency', + 'status' + ] + + with open(args.out, 'w', newline='') as csvfile: + writer = csv.DictWriter(csvfile, fieldnames=fieldnames) + writer.writeheader() + for result in results: + writer.writerow(result) + + logger.log(f"\nResults written to: {args.out}", "success") + + # Print summary statistics + successful = [r for r in results if r['status'] == 'success'] + if successful: + times = [r['total_time'] for r in successful] + logger.log("\nPerformance Summary:", "success") + logger.log(f" Total runs: {len(results)} ({len(successful)} successful)", "info") + logger.log(f" Min time: {min(times):.2f}s", "info") + logger.log(f" Max time: {max(times):.2f}s", "info") + logger.log(f" Mean time: {mean(times):.2f}s", "info") + logger.log(f" Median time: {median(times):.2f}s", "info") + + # Find best configuration + best = min(successful, key=lambda x: x['total_time']) + logger.log(f"\nBest configuration: nw={best['n_workers']}, tpw={best['threads_per_worker']}, proc={best['processes']}", "success") + logger.log(f" Time: {best['total_time']:.2f}s", "info") + + logger.log("\nBenchmark complete!", "success") + + +if __name__ == "__main__": + main() diff --git a/setup.py b/setup.py index 99061e0..019e09f 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ setup( name="pyutils", - version="1.4.0", + version="1.8.0", author="Sophie Middleton, Samuel Grant, Andrew Edmonds, Leo Borrel", description="Python tools for Mu2e collaborators", url="https://github.com/Mu2e/pyutils", From 84deadcb4ce3c9dba54ceb3bdf4533ca20eeddf5 Mon Sep 17 00:00:00 2001 From: sophieMu2e Date: Fri, 27 Feb 2026 14:07:57 -0600 Subject: [PATCH 06/14] tidy up dask tests --- bench_out/dask/benchmark_dask_results.csv | 17 - bench_out/dask/plots/efficiency_vs_cores.png | Bin 54127 -> 0 bytes .../heatmap_throughput_processes_false.png | Bin 20234 -> 0 bytes .../heatmap_throughput_processes_true.png | Bin 17964 -> 0 bytes .../heatmap_total_time_processes_false.png | Bin 19821 -> 0 bytes .../heatmap_total_time_processes_true.png | Bin 20722 -> 0 bytes bench_out/dask/plots/speedup_vs_cores.png | Bin 44957 -> 0 bytes .../dask/plots/throughput_vs_n_workers.png | Bin 58335 -> 0 bytes .../dask/plots/throughput_vs_total_cores.png | Bin 40876 -> 0 bytes .../dask/plots/total_time_comparison.png | Bin 26295 -> 0 bytes bench_out/pyprocess/failure_rate.png | Bin 17980 -> 0 bytes bench_out/pyprocess/heatmap_files_per_sec.png | Bin 22839 -> 0 bytes bench_out/pyprocess/heatmap_mean_duration.png | Bin 22924 -> 0 bytes bench_out/pyprocess/latency_percentiles.png | Bin 34902 -> 0 bytes ...lse_branches=reduced_file_list_perfile.csv | 51 --- ...rue_branches=reduced_file_list_perfile.csv | 51 --- ...lse_branches=reduced_file_list_perfile.csv | 51 --- ...rue_branches=reduced_file_list_perfile.csv | 51 --- ...=False_branches=full_file_list_perfile.csv | 51 --- ...lse_branches=reduced_file_list_perfile.csv | 51 --- ...rue_branches=reduced_file_list_perfile.csv | 51 --- ...=False_branches=full_file_list_perfile.csv | 51 --- ...lse_branches=reduced_file_list_perfile.csv | 51 --- ...rue_branches=reduced_file_list_perfile.csv | 51 --- ...lse_branches=reduced_file_list_perfile.csv | 51 --- ...rue_branches=reduced_file_list_perfile.csv | 51 --- ...lse_branches=reduced_file_list_perfile.csv | 51 --- ...rue_branches=reduced_file_list_perfile.csv | 51 --- ...lse_branches=reduced_file_list_perfile.csv | 51 --- ...rue_branches=reduced_file_list_perfile.csv | 51 --- ...lse_branches=reduced_file_list_perfile.csv | 51 --- ...rue_branches=reduced_file_list_perfile.csv | 51 --- bench_out/pyprocess/perfile_boxplot.png | Bin 32048 -> 0 bytes bench_out/pyprocess/perfile_cdfs.png | Bin 71189 -> 0 bytes bench_out/pyprocess/perfile_duration_hist.png | Bin 31798 -> 0 bytes bench_out/pyprocess/perfile_timeline.png | Bin 35082 -> 0 bytes .../pyprocess/throughput_max_workers.png | Bin 32060 -> 0 bytes dask-tests/plot.py | 57 --- dask-tests/run_dask_example.py | 426 ------------------ dask-tests/test_dask.py | 14 - scripts/benchmark_dask.py | 275 ----------- scripts/benchmark_pydask.py | 292 ------------ scripts/benchmark_pyprocess.py | 279 ------------ scripts/plot_bench.py | 356 --------------- scripts/plot_dask_bench.py | 293 ------------ 45 files changed, 2927 deletions(-) delete mode 100644 bench_out/dask/benchmark_dask_results.csv delete mode 100644 bench_out/dask/plots/efficiency_vs_cores.png delete mode 100644 bench_out/dask/plots/heatmap_throughput_processes_false.png delete mode 100644 bench_out/dask/plots/heatmap_throughput_processes_true.png delete mode 100644 bench_out/dask/plots/heatmap_total_time_processes_false.png delete mode 100644 bench_out/dask/plots/heatmap_total_time_processes_true.png delete mode 100644 bench_out/dask/plots/speedup_vs_cores.png delete mode 100644 bench_out/dask/plots/throughput_vs_n_workers.png delete mode 100644 bench_out/dask/plots/throughput_vs_total_cores.png delete mode 100644 bench_out/dask/plots/total_time_comparison.png delete mode 100644 bench_out/pyprocess/failure_rate.png delete mode 100644 bench_out/pyprocess/heatmap_files_per_sec.png delete mode 100644 bench_out/pyprocess/heatmap_mean_duration.png delete mode 100644 bench_out/pyprocess/latency_percentiles.png delete mode 100644 bench_out/pyprocess/mw=126_proc=False_branches=reduced_file_list_perfile.csv delete mode 100644 bench_out/pyprocess/mw=126_proc=True_branches=reduced_file_list_perfile.csv delete mode 100644 bench_out/pyprocess/mw=16_proc=False_branches=reduced_file_list_perfile.csv delete mode 100644 bench_out/pyprocess/mw=16_proc=True_branches=reduced_file_list_perfile.csv delete mode 100644 bench_out/pyprocess/mw=1_proc=False_branches=full_file_list_perfile.csv delete mode 100644 bench_out/pyprocess/mw=1_proc=False_branches=reduced_file_list_perfile.csv delete mode 100644 bench_out/pyprocess/mw=1_proc=True_branches=reduced_file_list_perfile.csv delete mode 100644 bench_out/pyprocess/mw=2_proc=False_branches=full_file_list_perfile.csv delete mode 100644 bench_out/pyprocess/mw=2_proc=False_branches=reduced_file_list_perfile.csv delete mode 100644 bench_out/pyprocess/mw=2_proc=True_branches=reduced_file_list_perfile.csv delete mode 100644 bench_out/pyprocess/mw=32_proc=False_branches=reduced_file_list_perfile.csv delete mode 100644 bench_out/pyprocess/mw=32_proc=True_branches=reduced_file_list_perfile.csv delete mode 100644 bench_out/pyprocess/mw=4_proc=False_branches=reduced_file_list_perfile.csv delete mode 100644 bench_out/pyprocess/mw=4_proc=True_branches=reduced_file_list_perfile.csv delete mode 100644 bench_out/pyprocess/mw=50_proc=False_branches=reduced_file_list_perfile.csv delete mode 100644 bench_out/pyprocess/mw=50_proc=True_branches=reduced_file_list_perfile.csv delete mode 100644 bench_out/pyprocess/mw=8_proc=False_branches=reduced_file_list_perfile.csv delete mode 100644 bench_out/pyprocess/mw=8_proc=True_branches=reduced_file_list_perfile.csv delete mode 100644 bench_out/pyprocess/perfile_boxplot.png delete mode 100644 bench_out/pyprocess/perfile_cdfs.png delete mode 100644 bench_out/pyprocess/perfile_duration_hist.png delete mode 100644 bench_out/pyprocess/perfile_timeline.png delete mode 100644 bench_out/pyprocess/throughput_max_workers.png delete mode 100644 dask-tests/plot.py delete mode 100644 dask-tests/run_dask_example.py delete mode 100644 dask-tests/test_dask.py delete mode 100644 scripts/benchmark_dask.py delete mode 100644 scripts/benchmark_pydask.py delete mode 100644 scripts/benchmark_pyprocess.py delete mode 100644 scripts/plot_bench.py delete mode 100644 scripts/plot_dask_bench.py diff --git a/bench_out/dask/benchmark_dask_results.csv b/bench_out/dask/benchmark_dask_results.csv deleted file mode 100644 index 7baf607..0000000 --- a/bench_out/dask/benchmark_dask_results.csv +++ /dev/null @@ -1,17 +0,0 @@ -n_workers,threads_per_worker,processes,location,use_remote,branches_mode,files_processed,total_time,files_per_sec,total_events -1,1,False,disk,True,reduced,50,270.03346010809764,0.18516223870917478,176615 -1,2,False,disk,True,reduced,50,79.14171142992564,0.6317780990150996,176615 -2,1,False,disk,True,reduced,50,79.99395072995685,0.6250472634960828,176615 -2,2,False,disk,True,reduced,50,49.550081208115444,1.009080081826604,176615 -4,1,False,disk,True,reduced,50,48.75325505901128,1.025572547709474,176615 -4,2,False,disk,True,reduced,50,33.14685283997096,1.5084388325309197,176615 -8,1,False,disk,True,reduced,50,33.75744896312244,1.481154575827734,176615 -8,2,False,disk,True,reduced,50,26.864604625152424,1.8611850312952936,176615 -1,1,True,disk,True,reduced,50,165.37921098805964,0.30233546103693765,176615 -1,2,True,disk,True,reduced,50,81.19289831118658,0.6158174057091285,176615 -2,1,True,disk,True,reduced,50,76.2006694409065,0.656162214411711,176615 -2,2,True,disk,True,reduced,50,43.5278307790868,1.1486903690138126,176615 -4,1,True,disk,True,reduced,50,42.204172055004165,1.184716997524217,176615 -4,2,True,disk,True,reduced,50,25.04718433180824,1.9962323643900908,176615 -8,1,True,disk,True,reduced,50,25.170849769143388,1.9864247913192958,176615 -8,2,True,disk,True,reduced,50,19.178915356984362,2.6070295983548184,176615 diff --git a/bench_out/dask/plots/efficiency_vs_cores.png b/bench_out/dask/plots/efficiency_vs_cores.png deleted file mode 100644 index 27303550251d94f23eed43183b1e21b0da4c4a0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54127 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 diff --git a/bench_out/dask/plots/heatmap_throughput_processes_false.png b/bench_out/dask/plots/heatmap_throughput_processes_false.png deleted file mode 100644 index 579d85776c3b1ff297a3670678af566df53dffbe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20234 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 diff --git a/bench_out/dask/plots/heatmap_throughput_processes_true.png b/bench_out/dask/plots/heatmap_throughput_processes_true.png deleted file mode 100644 index 987973c6aab49dca88858699b580eca16878ab99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17964 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 diff --git a/bench_out/dask/plots/heatmap_total_time_processes_false.png b/bench_out/dask/plots/heatmap_total_time_processes_false.png deleted file mode 100644 index 5f8d8b186b90f1704219c44b6aa1fa6e3dbc731a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19821 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 LMafKYJ@5YmCc`MM diff --git a/bench_out/dask/plots/heatmap_total_time_processes_true.png b/bench_out/dask/plots/heatmap_total_time_processes_true.png deleted file mode 100644 index 67fa4389f90272b1e29d4ae3253043fb65425cdd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20722 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 diff --git a/bench_out/dask/plots/speedup_vs_cores.png b/bench_out/dask/plots/speedup_vs_cores.png deleted file mode 100644 index 0c50695b24d7bde09358e24a61c159a8ebe14a58..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44957 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 *x;ZLw)__@=$Dwl-`I9ytJ5vZ8HLYB1XYp=+&@X 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 diff --git a/bench_out/dask/plots/throughput_vs_total_cores.png b/bench_out/dask/plots/throughput_vs_total_cores.png deleted file mode 100644 index 0b525fb159ba3b9d43edec277f9040009b42f5a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40876 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 WnrG)Za!fUY&#;g^+wTS?Q2z!*N2W#q diff --git a/bench_out/dask/plots/total_time_comparison.png b/bench_out/dask/plots/total_time_comparison.png deleted file mode 100644 index 6a4c8157174da7720599ce5698c2b6556a7c451c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26295 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 Po9sMY{an^LB{Ts55$l-d diff --git a/bench_out/pyprocess/failure_rate.png b/bench_out/pyprocess/failure_rate.png deleted file mode 100644 index b5c5f6bcb4cbdcd38662488864e7f349cae153a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17980 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 diff --git a/bench_out/pyprocess/heatmap_mean_duration.png b/bench_out/pyprocess/heatmap_mean_duration.png deleted file mode 100644 index 7262802f0badf48623bbd0d95dacd6128e0fbfb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22924 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 b@N;s5V`^zS6E>|Y@Q=8Nv~Yo-j_3aZc?$po diff --git a/bench_out/pyprocess/mw=126_proc=False_branches=reduced_file_list_perfile.csv b/bench_out/pyprocess/mw=126_proc=False_branches=reduced_file_list_perfile.csv deleted file mode 100644 index 2dbec4a..0000000 --- a/bench_out/pyprocess/mw=126_proc=False_branches=reduced_file_list_perfile.csv +++ /dev/null @@ -1,51 +0,0 @@ -file,duration,n_events -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000044.root,26.380362796015106,3464 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/01/18/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000552.root,28.04793255298864,3524 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/7f/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001685.root,29.519163390039466,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/fc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002561.root,30.519976899027824,3573 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000254.root,31.0673414360499,3600 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/3e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000473.root,31.57698078895919,3507 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1c/cf/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001319.root,31.926272107986733,3476 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/0a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000284.root,32.4762266400503,3631 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000052.root,32.419919203966856,3527 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/4d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001167.root,32.80483683897182,3581 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000210.root,32.835430670995265,3561 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/9d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000917.root,33.90665145299863,3578 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/90/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000323.root,34.38395568996202,3512 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1a/82/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001610.root,34.658066225936636,3513 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/61/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000078.root,34.96171654900536,3433 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/56/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000050.root,34.99176952999551,3480 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/d0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001507.root,35.3629094370408,3671 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1e/98/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000080.root,35.87228953803424,3522 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/e5/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002824.root,35.96264208306093,3560 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000123.root,36.00370763707906,3516 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/16/84/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000008.root,35.95471900899429,3461 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000765.root,36.568770793033764,3588 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00003211.root,36.53590237000026,3551 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/10/47/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000549.root,36.865983705967665,3453 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001674.root,36.83432660903782,3494 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/39/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002047.root,37.146459854906425,3561 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/f7/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002266.root,37.40151210303884,3527 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000425.root,38.23933757899795,3563 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/11/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000797.root,38.334577335976064,3496 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000974.root,38.35068832198158,3556 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/83/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002447.root,38.904326561954804,3550 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/64/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001940.root,38.98050468007568,3609 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/cb/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000529.root,39.56571453099605,3498 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/fa/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000871.root,39.50947917101439,3535 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0c/8d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000217.root,39.56587041600142,3423 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/09/87/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000393.root,39.75868877698667,3511 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/7e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000092.root,39.93222926801536,3577 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000038.root,40.09283152304124,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000324.root,40.05890151206404,3462 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/77/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002170.root,40.42826940596569,3486 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/6d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000547.root,40.46841193700675,3520 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/31/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001883.root,40.73887089197524,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/1a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000087.root,40.758563617942855,3477 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0d/b8/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001588.root,40.73833423200995,3502 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/c9/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001373.root,40.86577081901487,3517 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/de/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000016.root,40.87694821704645,3521 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/7d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000111.root,40.838519311044365,3611 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/5e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002028.root,40.96291109803133,3566 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/93/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001934.root,40.947609710972756,3595 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0e/6e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000181.root,41.173575022025034,3544 diff --git a/bench_out/pyprocess/mw=126_proc=True_branches=reduced_file_list_perfile.csv b/bench_out/pyprocess/mw=126_proc=True_branches=reduced_file_list_perfile.csv deleted file mode 100644 index 87bd8b7..0000000 --- a/bench_out/pyprocess/mw=126_proc=True_branches=reduced_file_list_perfile.csv +++ /dev/null @@ -1,51 +0,0 @@ -file,duration,n_events -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/77/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002170.root,21.54025072802324,3486 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000052.root,21.717178800026886,3527 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/83/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002447.root,21.579261271981522,3550 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/6d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000547.root,21.613457798026502,3520 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/11/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000797.root,22.01851626089774,3496 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0c/8d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000217.root,21.740079756011255,3423 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/01/18/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000552.root,21.99140527297277,3524 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/61/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000078.root,21.666083759977482,3433 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/10/47/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000549.root,21.905159394955263,3453 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/de/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000016.root,21.769086794927716,3521 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000038.root,22.008105160901323,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000254.root,22.02919666899834,3600 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/3e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000473.root,22.247907145996578,3507 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/7d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000111.root,22.362119985977188,3611 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000123.root,22.35442906396929,3516 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/31/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001883.root,22.368237801943906,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/90/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000323.root,22.219206850975752,3512 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/16/84/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000008.root,22.46716490003746,3461 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000324.root,22.44718777993694,3462 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/93/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001934.root,22.46203799196519,3595 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/cb/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000529.root,22.5366256829584,3498 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/fa/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000871.root,22.526992056984454,3535 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1a/82/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001610.root,22.60296959010884,3513 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/d0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001507.root,22.576041028019972,3671 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00003211.root,22.629005581024103,3551 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/9d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000917.root,22.637223384925164,3578 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/5e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002028.root,22.725835205987096,3566 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000425.root,22.76491615001578,3563 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/0a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000284.root,22.832345949020237,3631 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001674.root,22.81802513403818,3494 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1c/cf/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001319.root,22.811941400985233,3476 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/39/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002047.root,22.850910877925344,3561 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0d/b8/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001588.root,22.86442600400187,3502 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/4d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001167.root,22.85016888496466,3581 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/64/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001940.root,22.87817942793481,3609 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/7e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000092.root,22.880950171034783,3577 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/fc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002561.root,22.893564623082057,3573 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/c9/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001373.root,22.899505322915502,3517 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/e5/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002824.root,22.9081147959223,3560 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/f7/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002266.root,22.925355535931885,3527 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000044.root,22.932052475982346,3464 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000974.root,22.965798104996793,3556 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1e/98/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000080.root,22.943937225965783,3522 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000210.root,23.016918289940804,3561 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/1a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000087.root,23.030855814926326,3477 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000765.root,23.02639072202146,3588 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/09/87/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000393.root,23.073962132097222,3511 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0e/6e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000181.root,23.102500114939176,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/56/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000050.root,23.140066063031554,3480 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/7f/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001685.root,23.400588837917894,3544 diff --git a/bench_out/pyprocess/mw=16_proc=False_branches=reduced_file_list_perfile.csv b/bench_out/pyprocess/mw=16_proc=False_branches=reduced_file_list_perfile.csv deleted file mode 100644 index d1c5508..0000000 --- a/bench_out/pyprocess/mw=16_proc=False_branches=reduced_file_list_perfile.csv +++ /dev/null @@ -1,51 +0,0 @@ -file,duration,n_events -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/de/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000016.root,5.710102805052884,3521 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/1a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000087.root,6.112558144028299,3477 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/09/87/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000393.root,6.362293794052675,3511 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/90/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000323.root,6.6088094810256734,3512 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/64/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001940.root,6.811650903895497,3609 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/0a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000284.root,7.119055615039542,3631 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/6d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000547.root,7.368342605070211,3520 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/11/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000797.root,7.3620756070595235,3496 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/01/18/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000552.root,7.376469893963076,3524 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/39/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002047.root,7.3835381109965965,3561 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000123.root,7.399038684903644,3516 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/fc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002561.root,7.566228369018063,3573 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000974.root,7.573052699910477,3556 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/31/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001883.root,7.929537391988561,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/cb/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000529.root,8.004724881029688,3498 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/f7/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002266.root,8.052118333987892,3527 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/c9/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001373.root,3.78165994992014,3517 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0d/b8/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001588.root,4.077614882029593,3502 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0e/6e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000181.root,4.02895283093676,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/e5/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002824.root,5.065337899024598,3560 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0c/8d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000217.root,5.626326236058958,3423 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/3e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000473.root,5.564056869014166,3507 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/77/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002170.root,5.69069754506927,3486 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/7e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000092.root,6.027283619041555,3577 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000038.root,6.046654516016133,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/d0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001507.root,6.4413552390178666,3671 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/5e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002028.root,6.418888416956179,3566 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/10/47/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000549.root,6.717539221979678,3453 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/7f/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001685.root,6.717827807064168,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/7d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000111.root,6.4420902479905635,3611 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/93/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001934.root,6.738035682006739,3595 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000765.root,7.023705787025392,3588 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000210.root,5.840181907056831,3561 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000044.root,4.636794327991083,3464 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000052.root,4.984234575065784,3527 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/fa/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000871.root,4.709415570017882,3535 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000254.root,3.9772454210324213,3600 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001674.root,3.5236721329856664,3494 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/16/84/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000008.root,3.453290003933944,3461 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/4d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001167.root,3.333020808058791,3581 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/9d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000917.root,3.543220428051427,3578 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000324.root,3.6670020810561255,3462 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/83/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002447.root,3.679265931015834,3550 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/56/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000050.root,4.051341151003726,3480 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1a/82/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001610.root,3.8977693989872932,3513 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00003211.root,3.8717093829764053,3551 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/61/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000078.root,3.789656496956013,3433 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000425.root,3.7672109060222283,3563 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1c/cf/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001319.root,3.6093749250285327,3476 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1e/98/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000080.root,3.5296935690566897,3522 diff --git a/bench_out/pyprocess/mw=16_proc=True_branches=reduced_file_list_perfile.csv b/bench_out/pyprocess/mw=16_proc=True_branches=reduced_file_list_perfile.csv deleted file mode 100644 index 9ea2389..0000000 --- a/bench_out/pyprocess/mw=16_proc=True_branches=reduced_file_list_perfile.csv +++ /dev/null @@ -1,51 +0,0 @@ -file,duration,n_events -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/0a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000284.root,3.5790889530908316,3631 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/39/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002047.root,3.6594927470432594,3561 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000974.root,3.604245782014914,3556 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/11/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000797.root,3.5750568760558963,3496 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/09/87/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000393.root,3.655851223040372,3511 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/31/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001883.root,3.6496250120690092,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/90/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000323.root,3.7137895909836516,3512 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/6d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000547.root,3.755487069953233,3520 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/de/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000016.root,3.7679643540177494,3521 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/fc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002561.root,3.79408247792162,3573 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000123.root,3.8024779580300674,3516 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/64/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001940.root,3.8305949399946257,3609 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/f7/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002266.root,3.84853828093037,3527 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/cb/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000529.root,3.848065595026128,3498 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/1a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000087.root,3.9038486629724503,3477 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/01/18/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000552.root,3.934355332981795,3524 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/e5/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002824.root,3.138962344964966,3560 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/c9/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001373.root,3.2069341130554676,3517 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0c/8d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000217.root,3.1770540579454973,3423 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/3e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000473.root,3.2451381309656426,3507 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/d0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001507.root,3.222710979054682,3671 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/10/47/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000549.root,3.403335051960312,3453 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0d/b8/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001588.root,3.5761120379902422,3502 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0e/6e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000181.root,3.553927932982333,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000038.root,3.3393392079742625,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000765.root,3.3027099720202386,3588 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/77/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002170.root,3.410350188962184,3486 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/5e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002028.root,3.447233089013025,3566 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/7e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000092.root,3.5764064880786464,3577 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/7f/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001685.root,3.4548435530159622,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/7d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000111.root,3.407623026985675,3611 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/93/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001934.root,3.4713881140341982,3595 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000210.root,3.4550201119855046,3561 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000044.root,3.40921931900084,3464 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000052.root,3.5343232080340385,3527 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000254.root,3.4411527069751173,3600 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/fa/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000871.root,3.578037702012807,3535 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001674.root,3.4332318680826575,3494 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/4d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001167.root,3.4348499509505928,3581 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000324.root,3.384998922003433,3462 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1a/82/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001610.root,3.3550811539171264,3513 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/16/84/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000008.root,3.623257415019907,3461 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/83/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002447.root,3.444490281981416,3550 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/9d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000917.root,3.5577432230347767,3578 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/61/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000078.root,3.4918954690219834,3433 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000425.root,3.4654323289869353,3563 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00003211.root,3.564890780020505,3551 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/56/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000050.root,3.756552848033607,3480 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1e/98/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000080.root,2.9601016249507666,3522 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1c/cf/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001319.root,3.02798148104921,3476 diff --git a/bench_out/pyprocess/mw=1_proc=False_branches=full_file_list_perfile.csv b/bench_out/pyprocess/mw=1_proc=False_branches=full_file_list_perfile.csv deleted file mode 100644 index ada2abd..0000000 --- a/bench_out/pyprocess/mw=1_proc=False_branches=full_file_list_perfile.csv +++ /dev/null @@ -1,51 +0,0 @@ -file,duration,n_events -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/01/18/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000552.root,4.371675475966185, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/1a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000087.root,4.821530977031216, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000974.root,4.3284347840817645, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/6d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000547.root,4.398141689016484, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/fc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002561.root,4.270774103002623, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/0a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000284.root,4.043627355946228, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/90/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000323.root,4.208637435105629, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000123.root,4.285688568954356, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/cb/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000529.root,4.113454108941369, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/11/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000797.root,4.243961198022589, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/31/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001883.root,4.162205556058325, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/39/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002047.root,4.185792631935328, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/de/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000016.root,4.271689582965337, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/f7/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002266.root,4.123804584960453, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/09/87/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000393.root,4.229052040958777, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/64/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001940.root,4.265201607951894, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/c9/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001373.root,4.096404175972566, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/e5/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002824.root,4.052391598932445, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0c/8d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000217.root,4.15858023497276, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0d/b8/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001588.root,4.1120120249688625, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0e/6e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000181.root,4.225021082093008, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/3e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000473.root,4.337992143933661, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/7e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000092.root,4.246909897075966, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/d0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001507.root,4.290660989005119, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/10/47/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000549.root,4.11424750497099, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/5e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002028.root,3.9980411150027066, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/77/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002170.root,4.250829110038467, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000038.root,4.169580794987269, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/7f/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001685.root,4.310398972942494, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000765.root,4.0785379379522055, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/93/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001934.root,4.308712725061923, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/7d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000111.root,4.348405480035581, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000210.root,4.138592219911516, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000052.root,4.1343883340014145, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000044.root,3.9021473629400134, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/fa/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000871.root,4.186029255040921, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000254.root,4.126714452984743, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001674.root,4.152776425005868, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/16/84/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000008.root,4.082580351969227, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/4d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001167.root,4.035981132998131, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/9d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000917.root,3.9552046649623662, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000324.root,4.13789380597882, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/56/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000050.root,4.13365499896463, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/83/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002447.root,4.075618014088832, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1a/82/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001610.root,4.186113064060919, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00003211.root,4.063144081970677, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/61/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000078.root,3.880896057933569, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000425.root,4.2098071369109675, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1c/cf/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001319.root,4.074205823941156, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1e/98/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000080.root,4.29791554203257, diff --git a/bench_out/pyprocess/mw=1_proc=False_branches=reduced_file_list_perfile.csv b/bench_out/pyprocess/mw=1_proc=False_branches=reduced_file_list_perfile.csv deleted file mode 100644 index 340e311..0000000 --- a/bench_out/pyprocess/mw=1_proc=False_branches=reduced_file_list_perfile.csv +++ /dev/null @@ -1,51 +0,0 @@ -file,duration,n_events -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/01/18/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000552.root,3.3968118760967627,3524 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/1a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000087.root,2.823966166935861,3477 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000974.root,3.110537503962405,3556 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/6d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000547.root,2.973441867972724,3520 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/fc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002561.root,2.9773381730774418,3573 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/0a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000284.root,2.9943629630142823,3631 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/90/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000323.root,2.9751946050673723,3512 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000123.root,3.2524991219397634,3516 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/cb/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000529.root,3.0630404059775174,3498 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/11/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000797.root,3.2063957760110497,3496 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/31/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001883.root,2.9271435249829665,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/39/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002047.root,3.0873108089435846,3561 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/de/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000016.root,3.1385636910563335,3521 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/f7/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002266.root,2.9686747810337692,3527 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/09/87/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000393.root,3.2712422859622166,3511 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/64/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001940.root,3.2154463679762557,3609 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/c9/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001373.root,3.145194422919303,3517 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/e5/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002824.root,2.9506409249734133,3560 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0c/8d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000217.root,2.9605139680206776,3423 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0d/b8/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001588.root,3.2901832399656996,3502 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0e/6e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000181.root,3.478713625925593,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/3e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000473.root,3.0101476500276476,3507 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/7e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000092.root,3.380037119030021,3577 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/d0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001507.root,3.198079635971226,3671 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/10/47/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000549.root,2.9501936620799825,3453 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/5e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002028.root,3.230957277934067,3566 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/77/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002170.root,2.933459411957301,3486 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000038.root,3.0103406910784543,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/7f/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001685.root,3.144809177960269,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000765.root,2.88313485996332,3588 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/93/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001934.root,2.858208228019066,3595 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/7d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000111.root,2.8837578439852223,3611 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000210.root,2.9047174910083413,3561 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000052.root,2.870484648970887,3527 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000044.root,3.0466288229217753,3464 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/fa/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000871.root,2.9381100040627643,3535 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000254.root,2.9297921860124916,3600 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001674.root,2.9598261709325016,3494 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/16/84/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000008.root,2.986300486023538,3461 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/4d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001167.root,2.975855862023309,3581 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/9d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000917.root,3.189237170969136,3578 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000324.root,2.981092281988822,3462 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/56/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000050.root,3.1213629019912332,3480 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/83/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002447.root,2.98622170498129,3550 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1a/82/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001610.root,3.108467409037985,3513 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00003211.root,2.9678710479056463,3551 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/61/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000078.root,2.935586778097786,3433 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000425.root,2.923739741090685,3563 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1c/cf/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001319.root,2.9418412030208856,3476 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1e/98/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000080.root,2.92719409102574,3522 diff --git a/bench_out/pyprocess/mw=1_proc=True_branches=reduced_file_list_perfile.csv b/bench_out/pyprocess/mw=1_proc=True_branches=reduced_file_list_perfile.csv deleted file mode 100644 index d19e225..0000000 --- a/bench_out/pyprocess/mw=1_proc=True_branches=reduced_file_list_perfile.csv +++ /dev/null @@ -1,51 +0,0 @@ -file,duration,n_events -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/01/18/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000552.root,3.2087256809463724,3524 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/1a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000087.root,2.9424613950541243,3477 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000974.root,2.942554982029833,3556 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/6d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000547.root,2.9445485309697688,3520 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/fc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002561.root,3.0519079850055277,3573 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/0a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000284.root,2.895164321991615,3631 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/90/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000323.root,2.9119740000460297,3512 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000123.root,3.1778480139328167,3516 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/cb/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000529.root,3.0132782160071656,3498 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/11/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000797.root,3.140525114024058,3496 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/31/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001883.root,3.0779861609917134,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/39/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002047.root,2.9505942719988525,3561 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/de/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000016.root,3.062873066053726,3521 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/f7/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002266.root,2.8879564229864627,3527 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/09/87/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000393.root,2.924737912020646,3511 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/64/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001940.root,2.8222598049324006,3609 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/c9/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001373.root,2.908328005927615,3517 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/e5/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002824.root,2.8856885369168594,3560 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0c/8d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000217.root,2.942477038013749,3423 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0d/b8/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001588.root,3.0482622710987926,3502 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0e/6e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000181.root,3.080863900948316,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/3e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000473.root,2.8035124499583617,3507 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/7e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000092.root,2.8969799160258844,3577 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/d0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001507.root,3.050138486898504,3671 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/10/47/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000549.root,2.9254326940281317,3453 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/5e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002028.root,2.889494605944492,3566 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/77/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002170.root,2.988072498003021,3486 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000038.root,2.91401029296685,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/7f/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001685.root,3.0229587759822607,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000765.root,2.971282096928917,3588 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/93/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001934.root,2.9336898889159784,3595 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/7d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000111.root,2.9017254910431802,3611 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000210.root,3.0774598359130323,3561 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000052.root,3.0300007320474833,3527 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000044.root,2.8692677340004593,3464 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/fa/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000871.root,2.8448090389138088,3535 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000254.root,2.8732213089242578,3600 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001674.root,3.058786793029867,3494 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/16/84/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000008.root,2.844793953001499,3461 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/4d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001167.root,2.7657962039811537,3581 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/9d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000917.root,2.953955314005725,3578 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000324.root,2.7587793900165707,3462 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/56/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000050.root,3.067965612979606,3480 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/83/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002447.root,2.9187952590873465,3550 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1a/82/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001610.root,2.88095078303013,3513 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00003211.root,2.892813184997067,3551 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/61/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000078.root,2.8506385519867763,3433 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000425.root,2.983073259005323,3563 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1c/cf/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001319.root,2.9450561380945146,3476 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1e/98/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000080.root,2.9835847769863904,3522 diff --git a/bench_out/pyprocess/mw=2_proc=False_branches=full_file_list_perfile.csv b/bench_out/pyprocess/mw=2_proc=False_branches=full_file_list_perfile.csv deleted file mode 100644 index 8b2c148..0000000 --- a/bench_out/pyprocess/mw=2_proc=False_branches=full_file_list_perfile.csv +++ /dev/null @@ -1,51 +0,0 @@ -file,duration,n_events -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/1a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000087.root,3.9577320819953457, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/01/18/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000552.root,4.216001498978585, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000974.root,4.057778875925578, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/6d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000547.root,4.059587763971649, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/fc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002561.root,4.168796059093438, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/0a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000284.root,4.112828609999269, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/90/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000323.root,4.030803658999503, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000123.root,4.460454079089686, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/cb/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000529.root,4.18309536203742, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/11/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000797.root,3.9527635719859973, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/31/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001883.root,4.000581940985285, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/39/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002047.root,3.9410553810885176, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/de/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000016.root,4.635487498017028, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/f7/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002266.root,4.4500320829683915, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/09/87/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000393.root,4.126200699945912, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/64/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001940.root,4.217542477999814, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/c9/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001373.root,4.163466050988063, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/e5/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002824.root,4.170961137977429, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0c/8d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000217.root,3.993027069955133, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0d/b8/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001588.root,4.09955262101721, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0e/6e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000181.root,4.30683175905142, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/3e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000473.root,4.272457557963207, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/7e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000092.root,4.106000368017703, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/d0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001507.root,4.016722540021874, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/10/47/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000549.root,3.954703763942234, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/5e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002028.root,4.025295138009824, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/77/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002170.root,3.8829298360506073, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000038.root,4.024974985979497, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/7f/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001685.root,4.1956475171027705, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000765.root,4.009154827101156, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/93/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001934.root,4.161535763996653, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/7d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000111.root,4.2769887099275365, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000210.root,4.083118811948225, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000052.root,3.9686564940493554, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000044.root,4.14251658692956, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/fa/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000871.root,4.102890599053353, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000254.root,4.113362879958004, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001674.root,4.145444613066502, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/16/84/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000008.root,4.095936084049754, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/4d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001167.root,4.159784982912242, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/9d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000917.root,4.198675401974469, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000324.root,4.291038541006856, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/56/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000050.root,4.266484302002937, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/83/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002447.root,4.085931459092535, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1a/82/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001610.root,4.131497867056169, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00003211.root,4.120298399007879, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/61/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000078.root,4.043993446044624, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000425.root,4.071278479998, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1c/cf/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001319.root,4.017384756007232, -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1e/98/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000080.root,4.002592372940853, diff --git a/bench_out/pyprocess/mw=2_proc=False_branches=reduced_file_list_perfile.csv b/bench_out/pyprocess/mw=2_proc=False_branches=reduced_file_list_perfile.csv deleted file mode 100644 index f3a9666..0000000 --- a/bench_out/pyprocess/mw=2_proc=False_branches=reduced_file_list_perfile.csv +++ /dev/null @@ -1,51 +0,0 @@ -file,duration,n_events -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/1a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000087.root,2.990556612960063,3477 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/01/18/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000552.root,3.083185425028205,3524 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000974.root,2.870909283985384,3556 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/6d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000547.root,2.9566763300681487,3520 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/fc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002561.root,2.8649987570242956,3573 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/0a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000284.root,3.0278864970896393,3631 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/90/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000323.root,3.0605635549873114,3512 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000123.root,3.1669625520007685,3516 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/cb/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000529.root,3.1909837620332837,3498 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/11/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000797.root,2.9708865149877965,3496 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/31/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001883.root,2.8376232100417838,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/39/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002047.root,2.9435542699648067,3561 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/de/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000016.root,3.035845609032549,3521 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/f7/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002266.root,2.8850423650583252,3527 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/09/87/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000393.root,2.825660236994736,3511 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/64/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001940.root,2.840399540029466,3609 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/c9/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001373.root,2.91331104200799,3517 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/e5/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002824.root,2.9121555879246444,3560 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0c/8d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000217.root,2.83559948799666,3423 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0d/b8/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001588.root,3.0974682450760156,3502 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0e/6e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000181.root,3.0663670860230923,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/3e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000473.root,3.0972207280574366,3507 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/7e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000092.root,2.991496677044779,3577 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/d0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001507.root,3.134819640079513,3671 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/10/47/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000549.root,2.846750346943736,3453 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/5e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002028.root,2.884898492018692,3566 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/77/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002170.root,2.897595635964535,3486 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000038.root,2.8779853229643777,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/7f/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001685.root,2.8682335240300745,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000765.root,2.8912674579769373,3588 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/93/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001934.root,2.8932517879875377,3595 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/7d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000111.root,2.7965506709879264,3611 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000210.root,2.8262561230221763,3561 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000052.root,2.878274464979768,3527 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000044.root,2.7913413499481976,3464 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/fa/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000871.root,2.8558674280066043,3535 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000254.root,2.952113459003158,3600 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001674.root,2.909404958016239,3494 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/16/84/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000008.root,2.8608806349802762,3461 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/4d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001167.root,2.813301123911515,3581 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/9d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000917.root,2.872801144956611,3578 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000324.root,2.878683735965751,3462 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/56/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000050.root,3.1088300249539316,3480 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/83/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002447.root,2.909013289026916,3550 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1a/82/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001610.root,2.809691726928577,3513 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00003211.root,2.7884242199361324,3551 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/61/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000078.root,2.8279524279059842,3433 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000425.root,2.8825984789291397,3563 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1c/cf/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001319.root,2.8578355560312048,3476 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1e/98/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000080.root,2.840025749988854,3522 diff --git a/bench_out/pyprocess/mw=2_proc=True_branches=reduced_file_list_perfile.csv b/bench_out/pyprocess/mw=2_proc=True_branches=reduced_file_list_perfile.csv deleted file mode 100644 index 56a50cf..0000000 --- a/bench_out/pyprocess/mw=2_proc=True_branches=reduced_file_list_perfile.csv +++ /dev/null @@ -1,51 +0,0 @@ -file,duration,n_events -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/1a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000087.root,2.994802962988615,3477 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/01/18/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000552.root,3.2733411559602246,3524 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000974.root,2.9100391179090366,3556 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/6d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000547.root,2.786817310960032,3520 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/fc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002561.root,2.857801193022169,3573 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/0a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000284.root,2.78939948300831,3631 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/90/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000323.root,2.8382570890244097,3512 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000123.root,3.083791925921105,3516 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/cb/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000529.root,2.974925576010719,3498 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/11/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000797.root,2.8791807260131463,3496 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/31/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001883.root,2.819737137062475,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/39/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002047.root,2.782307800021954,3561 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/f7/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002266.root,2.77869477099739,3527 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/de/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000016.root,3.00643544702325,3521 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/09/87/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000393.root,2.8348720220383257,3511 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/64/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001940.root,2.9351889609824866,3609 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/c9/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001373.root,2.800295560969971,3517 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/e5/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002824.root,2.837404467049055,3560 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0c/8d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000217.root,3.122664185008034,3423 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0d/b8/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001588.root,3.0662952889688313,3502 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0e/6e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000181.root,2.974842883995734,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/3e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000473.root,2.866795912035741,3507 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/7e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000092.root,2.765412915032357,3577 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/d0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001507.root,2.7729325860273093,3671 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/10/47/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000549.root,2.7838705679168925,3453 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/5e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002028.root,2.7706102239899337,3566 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/77/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002170.root,2.8202729600016028,3486 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000038.root,2.7926574400626123,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/7f/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001685.root,2.9604184249183163,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000765.root,3.0082186340587214,3588 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/93/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001934.root,2.786811165045947,3595 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/7d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000111.root,2.8371647719759494,3611 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000210.root,2.82049337902572,3561 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000052.root,2.8111500130034983,3527 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000044.root,2.8744195060571656,3464 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/fa/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000871.root,2.8506798970047385,3535 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000254.root,2.927634650026448,3600 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001674.root,2.9682965220417827,3494 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/16/84/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000008.root,2.8570477459579706,3461 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/4d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001167.root,2.8876435339916497,3581 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/9d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000917.root,2.898640182102099,3578 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000324.root,2.878363583004102,3462 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/56/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000050.root,3.0301890250993893,3480 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/83/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002447.root,2.874525386025198,3550 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1a/82/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001610.root,2.835482992930338,3513 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00003211.root,2.8678278860170394,3551 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000425.root,2.972447885898873,3563 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/61/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000078.root,3.077671036007814,3433 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1c/cf/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001319.root,2.9207726039458066,3476 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1e/98/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000080.root,2.8874046759447083,3522 diff --git a/bench_out/pyprocess/mw=32_proc=False_branches=reduced_file_list_perfile.csv b/bench_out/pyprocess/mw=32_proc=False_branches=reduced_file_list_perfile.csv deleted file mode 100644 index d92ea22..0000000 --- a/bench_out/pyprocess/mw=32_proc=False_branches=reduced_file_list_perfile.csv +++ /dev/null @@ -1,51 +0,0 @@ -file,duration,n_events -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/10/47/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000549.root,11.856626719003543,3453 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/d0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001507.root,12.552812404930592,3671 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/6d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000547.root,15.908082130015828,3520 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/7d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000111.root,16.41059124597814,3611 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/7f/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001685.root,16.88522922305856,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/5e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002028.root,17.321745314984582,3566 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/90/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000323.root,17.363760430947877,3512 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/e5/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002824.root,17.352914638933726,3560 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0e/6e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000181.root,17.36142186599318,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/1a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000087.root,17.3919148480054,3477 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/64/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001940.root,17.737715220078826,3609 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/c9/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001373.root,17.741420720005408,3517 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/de/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000016.root,17.75898049294483,3521 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/09/87/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000393.root,18.059393532923423,3511 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/11/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000797.root,18.1280841070693,3496 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/cb/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000529.root,18.37781892006751,3498 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/fc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002561.root,18.39192266704049,3573 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/3e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000473.root,18.3780753769679,3507 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0c/8d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000217.root,18.61640007898677,3423 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/f7/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002266.root,19.220718223950826,3527 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000123.root,19.244946721941233,3516 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000974.root,19.337486695032567,3556 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/7e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000092.root,19.56766008294653,3577 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/93/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001934.root,19.56810846400913,3595 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/01/18/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000552.root,19.63663952006027,3524 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000765.root,19.78962292894721,3588 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/31/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001883.root,19.83308906806633,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/0a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000284.root,20.015998348011635,3631 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/39/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002047.root,20.9371768750716,3561 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000038.root,21.192681972985156,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0d/b8/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001588.root,21.22380715899635,3502 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/77/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002170.root,21.223336707917042,3486 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000052.root,10.623928432003595,3527 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000210.root,12.773690755013376,3561 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000044.root,9.321360650938004,3464 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/9d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000917.root,8.24200419895351,3578 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000254.root,9.079975781962276,3600 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001674.root,8.962723450968042,3494 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/fa/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000871.root,9.86899198195897,3535 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00003211.root,8.794679746963084,3551 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/4d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001167.root,9.776674941997044,3581 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1a/82/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001610.root,9.622014502994716,3513 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/83/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002447.root,9.841049046022817,3550 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/16/84/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000008.root,10.239514212007634,3461 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/56/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000050.root,9.85880828590598,3480 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1e/98/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000080.root,9.212520002038218,3522 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000324.root,10.590624756994657,3462 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/61/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000078.root,10.021835708990693,3433 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000425.root,9.852076425100677,3563 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1c/cf/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001319.root,9.910478818928823,3476 diff --git a/bench_out/pyprocess/mw=32_proc=True_branches=reduced_file_list_perfile.csv b/bench_out/pyprocess/mw=32_proc=True_branches=reduced_file_list_perfile.csv deleted file mode 100644 index 7fb6899..0000000 --- a/bench_out/pyprocess/mw=32_proc=True_branches=reduced_file_list_perfile.csv +++ /dev/null @@ -1,51 +0,0 @@ -file,duration,n_events -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/6d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000547.root,9.89196780801285,3520 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/d0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001507.root,10.065577021916397,3671 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/77/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002170.root,10.110732760978863,3486 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/31/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001883.root,10.153668106999248,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/01/18/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000552.root,10.17486074496992,3524 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/39/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002047.root,10.181867500999942,3561 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/e5/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002824.root,10.17394191189669,3560 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/11/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000797.root,10.206434588995762,3496 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/64/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001940.root,10.230052954982966,3609 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/3e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000473.root,10.231369600980543,3507 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/5e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002028.root,10.246526277041994,3566 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/09/87/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000393.root,10.266971891978756,3511 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/7e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000092.root,10.260544538032264,3577 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/0a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000284.root,10.269492603023537,3631 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/c9/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001373.root,10.317718564998358,3517 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0c/8d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000217.root,10.342099596047774,3423 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/f7/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002266.root,10.360925731947646,3527 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0d/b8/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001588.root,10.356075954041444,3502 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/1a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000087.root,10.385436389013194,3477 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000974.root,10.456197059014812,3556 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/7f/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001685.root,10.44999180000741,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/7d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000111.root,10.464090798981488,3611 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/93/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001934.root,10.49511820601765,3595 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/fc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002561.root,10.515294514014386,3573 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000038.root,10.524004839011468,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/cb/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000529.root,10.559328042902052,3498 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000765.root,10.550968040945008,3588 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/de/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000016.root,10.588267475017346,3521 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0e/6e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000181.root,10.63410905492492,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/10/47/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000549.root,10.641012166975997,3453 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/90/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000323.root,10.72437276202254,3512 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000123.root,10.782639664015733,3516 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000210.root,4.342900551971979,3561 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000044.root,4.23002168093808,3464 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/16/84/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000008.root,4.029954634024762,3461 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000052.root,4.364283437957056,3527 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000254.root,4.164607223006897,3600 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000324.root,3.98880694701802,3462 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/fa/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000871.root,4.339125212049112,3535 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/4d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001167.root,4.2820067800348625,3581 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/9d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000917.root,4.242754584061913,3578 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001674.root,4.3982274159789085,3494 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000425.root,3.9559153360314667,3563 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/56/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000050.root,4.21065860602539,3480 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1a/82/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001610.root,4.148253747960553,3513 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1c/cf/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001319.root,3.969824366038665,3476 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/83/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002447.root,4.257025392958894,3550 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/61/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000078.root,4.174926690990105,3433 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00003211.root,4.233888373943046,3551 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1e/98/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000080.root,4.079380749026313,3522 diff --git a/bench_out/pyprocess/mw=4_proc=False_branches=reduced_file_list_perfile.csv b/bench_out/pyprocess/mw=4_proc=False_branches=reduced_file_list_perfile.csv deleted file mode 100644 index 3d6d8c1..0000000 --- a/bench_out/pyprocess/mw=4_proc=False_branches=reduced_file_list_perfile.csv +++ /dev/null @@ -1,51 +0,0 @@ -file,duration,n_events -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/01/18/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000552.root,3.2267184710362926,3524 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000974.root,3.328750152955763,3556 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/1a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000087.root,3.4098886769497767,3477 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/6d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000547.root,3.469298741896637,3520 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/fc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002561.root,2.9489381950115785,3573 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/0a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000284.root,2.9810028850333765,3631 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/90/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000323.root,3.230497163021937,3512 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000123.root,3.247806346975267,3516 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/11/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000797.root,2.9277570110280067,3496 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/cb/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000529.root,3.1355697360122576,3498 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/31/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001883.root,2.979594604927115,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/39/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002047.root,3.0231738860020414,3561 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/f7/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002266.root,3.0697940579848364,3527 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/de/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000016.root,3.356428530998528,3521 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/09/87/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000393.root,3.0713272130815312,3511 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/64/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001940.root,3.1271594489226118,3609 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/c9/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001373.root,2.9138848579023033,3517 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/e5/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002824.root,3.0593318350147456,3560 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0c/8d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000217.root,3.053775261971168,3423 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0d/b8/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001588.root,3.2418080979259685,3502 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0e/6e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000181.root,2.98489388206508,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/3e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000473.root,2.8669727500528097,3507 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/7e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000092.root,2.955414436990395,3577 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/d0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001507.root,2.9993001819821075,3671 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/10/47/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000549.root,3.0516101829707623,3453 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/5e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002028.root,2.9368117939447984,3566 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/77/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002170.root,2.99628667102661,3486 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000038.root,2.9508605069713667,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/7f/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001685.root,2.9649625779129565,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000765.root,2.9628885709680617,3588 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/93/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001934.root,2.911974278977141,3595 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/7d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000111.root,2.8162545730592683,3611 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000210.root,2.801587065914646,3561 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000052.root,2.8834245610050857,3527 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000044.root,2.9344913869863376,3464 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/fa/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000871.root,2.8952855670358986,3535 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000254.root,2.8183316519716755,3600 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001674.root,2.8780713679734617,3494 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/16/84/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000008.root,2.9222174800233915,3461 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/4d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001167.root,2.8969324229983613,3581 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/9d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000917.root,2.8455339909996837,3578 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000324.root,2.8097135180141777,3462 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/56/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000050.root,3.097110377973877,3480 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/83/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002447.root,2.967841156059876,3550 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1a/82/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001610.root,2.8091422150610015,3513 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00003211.root,2.8445914139738306,3551 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000425.root,2.911433427943848,3563 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/61/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000078.root,3.099548676982522,3433 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1c/cf/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001319.root,2.8144811620004475,3476 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1e/98/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000080.root,2.8192993720294908,3522 diff --git a/bench_out/pyprocess/mw=4_proc=True_branches=reduced_file_list_perfile.csv b/bench_out/pyprocess/mw=4_proc=True_branches=reduced_file_list_perfile.csv deleted file mode 100644 index 71a75df..0000000 --- a/bench_out/pyprocess/mw=4_proc=True_branches=reduced_file_list_perfile.csv +++ /dev/null @@ -1,51 +0,0 @@ -file,duration,n_events -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000974.root,2.868468470987864,3556 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/6d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000547.root,2.874513094080612,3520 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/01/18/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000552.root,3.0404889370547608,3524 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/1a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000087.root,3.102166887023486,3477 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/fc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002561.root,2.8675856770714745,3573 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/0a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000284.root,2.856005155015737,3631 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000123.root,3.066718526999466,3516 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/90/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000323.root,3.4080669379327446,3512 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/cb/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000529.root,2.8332980789709836,3498 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/11/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000797.root,2.9376322890166193,3496 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/31/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001883.root,2.911904159002006,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/39/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002047.root,2.81158023502212,3561 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/f7/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002266.root,2.8743410049937665,3527 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/de/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000016.root,3.022531625931151,3521 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/09/87/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000393.root,2.885928230942227,3511 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/64/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001940.root,2.8785038240021095,3609 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/c9/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001373.root,2.92197191901505,3517 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/e5/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002824.root,2.9046560309361666,3560 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0c/8d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000217.root,2.972751836059615,3423 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0d/b8/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001588.root,3.1232201209058985,3502 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/3e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000473.root,2.8702340580057353,3507 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0e/6e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000181.root,3.0086214779876173,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/7e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000092.root,2.817356667947024,3577 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/d0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001507.root,2.8828641559230164,3671 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/10/47/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000549.root,2.9248396020848304,3453 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/5e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002028.root,2.8460203669965267,3566 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/77/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002170.root,2.8353631460340694,3486 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000038.root,2.8080781139433384,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/7f/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001685.root,2.817204693099484,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000765.root,2.7967484620166942,3588 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/93/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001934.root,2.835564848035574,3595 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/7d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000111.root,2.782410605926998,3611 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000210.root,2.746718918904662,3561 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000052.root,2.793725732015446,3527 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000044.root,2.7742606879910454,3464 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/fa/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000871.root,2.7984517510049045,3535 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000254.root,2.8152522100135684,3600 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001674.root,2.895103420014493,3494 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/16/84/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000008.root,2.8698468590155244,3461 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/4d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001167.root,2.9444753379793838,3581 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/9d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000917.root,2.7796848400030285,3578 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000324.root,2.865489042014815,3462 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/56/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000050.root,2.960981345968321,3480 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/83/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002447.root,2.845331173040904,3550 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1a/82/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001610.root,2.884129959042184,3513 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00003211.root,2.8332176220137626,3551 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/61/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000078.root,2.8408353499835357,3433 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000425.root,2.8401076029986143,3563 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1c/cf/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001319.root,2.799782087909989,3476 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1e/98/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000080.root,3.048037661006674,3522 diff --git a/bench_out/pyprocess/mw=50_proc=False_branches=reduced_file_list_perfile.csv b/bench_out/pyprocess/mw=50_proc=False_branches=reduced_file_list_perfile.csv deleted file mode 100644 index 7a5739e..0000000 --- a/bench_out/pyprocess/mw=50_proc=False_branches=reduced_file_list_perfile.csv +++ /dev/null @@ -1,51 +0,0 @@ -file,duration,n_events -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/1a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000087.root,19.8899133290397,3477 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0c/8d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000217.root,25.85641659691464,3423 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/5e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002028.root,26.91870216501411,3566 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/0a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000284.root,29.64838539995253,3631 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/83/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002447.root,30.167965959059075,3550 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000123.root,30.258436116040684,3516 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0d/b8/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001588.root,30.76949017297011,3502 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/e5/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002824.root,31.236751794000156,3560 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/6d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000547.root,32.04132304294035,3520 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/7e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000092.root,32.43506079399958,3577 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/d0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001507.root,32.438590571982786,3671 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/64/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001940.root,32.823379139997996,3609 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/3e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000473.root,33.14481803693343,3507 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/4d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001167.root,33.4221856900258,3581 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/10/47/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000549.root,33.46978838799987,3453 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/31/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001883.root,33.49795593507588,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000765.root,33.46645975403953,3588 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/93/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001934.root,35.00665214797482,3595 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/77/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002170.root,35.41430088400375,3486 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/7f/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001685.root,35.713343638926744,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/cb/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000529.root,36.08257911296096,3498 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/de/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000016.root,36.090960346045904,3521 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1a/82/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001610.root,36.01570078195073,3513 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/90/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000323.root,37.02024409396108,3512 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000044.root,37.255391577025875,3464 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/16/84/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000008.root,37.50649220403284,3461 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/39/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002047.root,37.84397727495525,3561 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/11/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000797.root,38.12215033790562,3496 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1c/cf/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001319.root,38.238032104913145,3476 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/9d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000917.root,38.48693552601617,3578 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000974.root,38.56106757395901,3556 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000425.root,38.48449136095587,3563 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000052.root,38.75148395297583,3527 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000038.root,38.96802655805368,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/61/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000078.root,39.114855274092406,3433 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000210.root,39.17537330102641,3561 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/fc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002561.root,39.22697399300523,3573 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001674.root,39.54253700294066,3494 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000324.root,39.53523384104483,3462 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/fa/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000871.root,39.55287323403172,3535 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000254.root,39.55308527103625,3600 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1e/98/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000080.root,40.06399601395242,3522 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/09/87/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000393.root,40.166982286958955,3511 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/f7/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002266.root,40.16937141807284,3527 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00003211.root,40.09027114196215,3551 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/56/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000050.root,40.240871008019894,3480 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0e/6e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000181.root,40.296574735082686,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/c9/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001373.root,40.30684503505472,3517 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/7d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000111.root,40.36790279496927,3611 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/01/18/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000552.root,40.60021472303197,3524 diff --git a/bench_out/pyprocess/mw=50_proc=True_branches=reduced_file_list_perfile.csv b/bench_out/pyprocess/mw=50_proc=True_branches=reduced_file_list_perfile.csv deleted file mode 100644 index 8666783..0000000 --- a/bench_out/pyprocess/mw=50_proc=True_branches=reduced_file_list_perfile.csv +++ /dev/null @@ -1,51 +0,0 @@ -file,duration,n_events -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/e5/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002824.root,18.731599915074185,3560 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/fc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002561.root,19.24228046205826,3573 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/c9/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001373.root,19.28795302589424,3517 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/7e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000092.root,19.25483093992807,3577 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/5e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002028.root,19.331241489038803,3566 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/10/47/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000549.root,19.56011945893988,3453 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/1a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000087.root,19.633814021013677,3477 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/64/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001940.root,19.556603090954013,3609 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0e/6e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000181.root,19.656091712997295,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/3e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000473.root,19.708974411943927,3507 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/83/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002447.root,19.802945293020457,3550 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000974.root,19.850943850935437,3556 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/0a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000284.root,20.02791606390383,3631 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/77/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002170.root,20.06527192890644,3486 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/90/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000323.root,20.37349378305953,3512 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/6d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000547.root,20.35926292394288,3520 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/7d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000111.root,20.362998035969213,3611 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/7f/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001685.root,20.44120099209249,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1a/82/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001610.root,20.460701234987937,3513 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0c/8d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000217.root,20.48327198100742,3423 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001674.root,20.534912063973024,3494 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/01/18/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000552.root,20.559474122943357,3524 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000324.root,20.579376932932064,3462 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/d0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001507.root,20.647022960009053,3671 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00003211.root,20.631808735080995,3551 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000038.root,20.66671903897077,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1c/cf/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001319.root,20.642538312007673,3476 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/31/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001883.root,20.68447408801876,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/39/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002047.root,20.750039124977775,3561 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000210.root,20.70632714498788,3561 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000765.root,20.746297867037356,3588 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/16/84/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000008.root,20.74007752398029,3461 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000425.root,20.74144305998925,3563 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/61/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000078.root,20.793192095006816,3433 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/93/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001934.root,20.80961848399602,3595 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/56/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000050.root,20.78641749091912,3480 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/09/87/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000393.root,20.839068036992103,3511 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/11/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000797.root,20.87471614300739,3496 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/cb/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000529.root,20.884019001969136,3498 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000254.root,20.87586182099767,3600 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000123.root,20.89731985400431,3516 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1e/98/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000080.root,20.90305270603858,3522 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000044.root,20.931804125895724,3464 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/f7/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002266.root,20.976382975000888,3527 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000052.root,20.977228892967105,3527 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/fa/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000871.root,20.997103486093692,3535 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/9d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000917.root,21.015753900981508,3578 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0d/b8/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001588.root,21.045943491975777,3502 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/de/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000016.root,21.072085362044163,3521 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/4d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001167.root,21.07456724101212,3581 diff --git a/bench_out/pyprocess/mw=8_proc=False_branches=reduced_file_list_perfile.csv b/bench_out/pyprocess/mw=8_proc=False_branches=reduced_file_list_perfile.csv deleted file mode 100644 index 158e3c2..0000000 --- a/bench_out/pyprocess/mw=8_proc=False_branches=reduced_file_list_perfile.csv +++ /dev/null @@ -1,51 +0,0 @@ -file,duration,n_events -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/0a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000284.root,3.171469829045236,3631 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/6d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000547.root,4.054399640997872,3520 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/01/18/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000552.root,4.172849890077487,3524 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/fc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002561.root,4.338186266948469,3573 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/90/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000323.root,4.455360096995719,3512 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/1a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000087.root,4.467225012020208,3477 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000974.root,4.468623794033192,3556 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000123.root,4.703505320940167,3516 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/cb/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000529.root,3.1638948440086097,3498 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/31/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001883.root,3.1360885159811005,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/11/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000797.root,3.82542864093557,3496 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/09/87/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000393.root,3.6848747439216822,3511 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/39/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002047.root,3.929915383923799,3561 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/de/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000016.root,3.973431528895162,3521 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/f7/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002266.root,4.051404847064987,3527 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/64/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001940.root,3.8969771190313622,3609 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/c9/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001373.root,2.9590517709730193,3517 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/e5/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002824.root,3.096806430025026,3560 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0c/8d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000217.root,2.885733235045336,3423 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0d/b8/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001588.root,3.2554447470465675,3502 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0e/6e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000181.root,3.29149150790181,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/3e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000473.root,3.2791527879890054,3507 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/7e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000092.root,3.50373663904611,3577 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/d0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001507.root,3.681745574926026,3671 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/10/47/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000549.root,3.122178927063942,3453 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/5e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002028.root,3.0663525589043275,3566 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/77/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002170.root,3.0449794509913772,3486 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000038.root,3.227537009981461,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/7f/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001685.root,3.2604956690920517,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000765.root,3.3948130189673975,3588 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/93/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001934.root,3.380471811047755,3595 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/7d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000111.root,3.3377677800599486,3611 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000210.root,3.3050342900678515,3561 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000052.root,3.0342079700203612,3527 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000044.root,2.990539292921312,3464 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/fa/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000871.root,2.9324453169247136,3535 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000254.root,2.996874734060839,3600 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001674.root,3.293995457002893,3494 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/16/84/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000008.root,3.265133130014874,3461 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/4d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001167.root,3.1376269799657166,3581 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/9d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000917.root,3.2245363499969244,3578 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000324.root,2.954013142036274,3462 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/56/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000050.root,3.105989998904988,3480 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/83/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002447.root,2.8920030259760097,3550 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1a/82/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001610.root,2.965257867006585,3513 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00003211.root,2.9390539780724794,3551 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/61/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000078.root,3.040355121018365,3433 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000425.root,3.0274660530267283,3563 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1c/cf/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001319.root,3.0337813809746876,3476 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1e/98/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000080.root,2.917209301958792,3522 diff --git a/bench_out/pyprocess/mw=8_proc=True_branches=reduced_file_list_perfile.csv b/bench_out/pyprocess/mw=8_proc=True_branches=reduced_file_list_perfile.csv deleted file mode 100644 index 5f9856c..0000000 --- a/bench_out/pyprocess/mw=8_proc=True_branches=reduced_file_list_perfile.csv +++ /dev/null @@ -1,51 +0,0 @@ -file,duration,n_events -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/6d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000547.root,2.906557390000671,3520 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000974.root,2.922790179029107,3556 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/90/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000323.root,2.9361027649138123,3512 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/03/1a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000087.root,2.9811026179231703,3477 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/05/0a/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000284.root,3.0583677450194955,3631 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000123.root,3.0761655380483717,3516 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/04/fc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002561.root,3.1049272939562798,3573 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/01/18/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000552.root,3.211867979960516,3524 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/11/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000797.root,2.9248460269300267,3496 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/06/cb/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000529.root,3.011219015927054,3498 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/31/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001883.root,3.007469098083675,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/09/87/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000393.root,2.8696071630110964,3511 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/07/39/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002047.root,3.0275272330036387,3561 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/f7/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002266.root,3.0015845509478822,3527 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/64/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001940.root,2.920918432995677,3609 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/08/de/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000016.root,3.4022533500101417,3521 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/c9/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001373.root,2.8682393910130486,3517 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0a/e5/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002824.root,3.009980870061554,3560 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/3e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000473.root,2.8908316480228677,3507 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0d/b8/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001588.root,3.046885560033843,3502 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0c/8d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000217.root,3.109989390010014,3423 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/7e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000092.root,2.956143300049007,3577 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0e/6e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000181.root,3.1960880419937894,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/0f/d0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001507.root,2.99085721001029,3671 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/10/47/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000549.root,3.1624946660595015,3453 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/5e/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002028.root,3.044373508077115,3566 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/77/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002170.root,2.966567530995235,3486 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/11/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000038.root,3.053271007956937,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/7f/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001685.root,3.1119826599024236,3544 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/93/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001934.root,3.0211322869872674,3595 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/12/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000765.root,3.15021265798714,3588 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/7d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000111.root,3.0488000490004197,3611 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/be/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000052.root,3.0655315050389618,3527 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000044.root,3.0428772289305925,3464 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/14/fa/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000871.root,2.965890350053087,3535 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/13/89/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000210.root,3.2328642240026966,3561 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/bc/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001674.root,3.0378693300299346,3494 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/15/85/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000254.root,3.167553409934044,3600 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/16/84/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000008.root,3.189956536050886,3461 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/4d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001167.root,3.068126806989312,3581 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/17/9d/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000917.root,2.953767859027721,3578 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000324.root,2.9152305589523166,3462 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/83/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00002447.root,2.9739187449449673,3550 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1a/82/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001610.root,2.874075887957588,3513 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/19/56/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000050.root,3.114980246988125,3480 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/2b/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00003211.root,2.9161281590349972,3551 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/61/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000078.root,2.996865515015088,3433 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1b/a0/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000425.root,2.953255503089167,3563 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1c/cf/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00001319.root,2.8834080790402368,3476 -/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/1e/98/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000080.root,2.873636726057157,3522 diff --git a/bench_out/pyprocess/perfile_boxplot.png b/bench_out/pyprocess/perfile_boxplot.png deleted file mode 100644 index 6096511ca31b2dea66b47fc40abc9ec5dc95340c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32048 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 diff --git a/bench_out/pyprocess/perfile_cdfs.png b/bench_out/pyprocess/perfile_cdfs.png deleted file mode 100644 index b127d84c65167685cee28d37b01b49c135556b23..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71189 zcmcG#Wl$Vl)HRAbgG-R$lHl$xL4pK=2X}WE90qp?1PLxlAh_EggN6_^1Pw4a2{u4* zyUp{y->tfT?vGn_tA?VcX-;>aK4Eq$z?&IQUMek?pgp7owswnpsoPSV&nM1OD zF{~BX*e&Ashjs{s{Z|UvtTRtscZAie2FtF6+Jtv+IW2n06_xHd7#G+X$+Z(^EEjEq zc>V}H?gr}$kFqYB3fr=Z_3n;p2C`<@>=s-G^?D0RPM*mUqRBmd_!5MdIR4L<^(Zu+ z|Bj*&{Y-Lr#|v z5!WTORLN5;iQ`dhw){TL^_{O(wUE{BAcbbbHaFU!$Mf^^L$}0PVfr|*EZrd)Jr<*= zd(Sm1-g8OHYJHBoe?PSlTNzsYsWJ~(c_Qw1jBIo5n<*0TZ1d0vr9^T$GqdMgySq)> zlQNHZ_c!Obi~9&kg86se_$1Tzg#oORk9TL1u72Ki?`k4njKuG7Y1>z-v#)U9 zbII`wALdOAwOe?=*-is$MxJ}m;y#~L&;{Ogr#g)!n9#}DdENZ+hQj;P2c+jYx#K&2 zDO`=#BcPp+TDkn_DKZb>>%cqE#-0)<;rF%KsS*W+Q%N*A?eYlvx3SEH7sqQnUBP>3 zv;kY`E;*F3OVjbco9t8PH$5CkhXgtYtw&O9C2V~}BTsrC?+J#Jo(<5bO0GL|zH6V_ zm);xPn37JQNkT2Yy16~>?LLY;B9nfO&fHlEe!lY7NBz)GqH7X(u0BQL)!qHN-mKV1 zJ}N@?nR=f;I+W7EqTV>S7l&gs`e6f`J;i&0H-En5%7*Nf#NMr9nr@$LjwrmcfLcD> zU8jBcFr?^HVc2AcPtq_tI(pF5KY8%@aQwKnd=jF@c(NLFYQ6SqnOrYCoHh zSiBuL#>JUTrWR@KdUWr-#{i~T`1bWllhogeGWcey%msCqQG*rwEw`<`eUtA8Y2CHs z@MbBVo-3;hQOEWkfud&{9-{DgwnB>{>d>95K*|%j-F5-^O(|+hDlNYamiI2IE8Dxk zjbjP+kUG!i?O9zd+oBIX@RP%~wSKYP`~hjE-=X)nm-Z(VG(u^8mm!l1R=FfkkJlQp!HATK#N}Idb$OSo?^2p;vvXFNMp1M7jJrJ;4 zfSH?{%SmzbLtwHGlP(wum~X$>Wx^pE986N?0wQDDh<>8BM<7C!l$Q_g3#V-MZF>b2 zAm~{rDUHPblxG-1Q3!YuAtgETyU*4*Abd!_cXV7(+Q>qcX+0nBFPkDuL{`C(1yd}_ zZ?*%%qtZclc)SLk7BG~HfOQxMM=wmw>5da01C_*}DEJgx;u!b2A@tvj`oUeknD@es zpY6BjZA_tNT2kkvw-2RPBWLWKp7+y6AdFg(1Z&bT^(@W^;I7k>GlMTz{HJKOqc$(8 zWO#mSiduyqtaj(!gUkZ9$^2x)d)boy7Vl*@u3tUdu#bh?zX;hqX@e8wjSnjaXjg2? z;ku#TNp1Smh2i$V55c?_3)ZO(mz=a|fuVDhe6UCA_R#jitAf5`FAWWiwpLs@c2FTb zmeT1?o_p!bjrltBNr?i@p32Jj$I~&M>w^OqX)&=}9v+_Eu!n1VzoOm3po#qkOb`v6 ziyT+Rd*}6aC$NkQSNwl{)uZjXD3l5U7if-{hhA?ZAL|+zjF@c#uj5~5PkVcgNbc)9 z+iX)-bARBCH_ks?ZKie~C8p8}I;73}b_bqsOp5Pw*6m*$t&BZST~@T3t#}js<_(d1 z+w%6l2eqx8UE?jr<^X|=&81Pj1@f8^;^F5PEduau_vPx?(b*VJFSw?u_a~5lsQIw-P)?ZWLo#?xEcUSB=K-^Zi%Iw1ttSquyx=ZNJGbqA*s?g4%a8&dO~i&k+8m} z$a?Av$W-tuH)$ZUSHP^xRiK4#58 zQZ*O>!#t1%Uf@aRT3zqM_u8=Q?QGN@?pk*_Ik~>elr^z6-$C0~YjS^rx*euVi;tQIFC6iy~j2!yVM^zIh|u`PpkuiKwu@{;F`krB4YiVw-Hltnbz9scG%Lr;3q z1jJ2H^Y!3y4BL$R)TKzQ8}GwfTHoU{F)=Z-Ua=ozWw*(1h^mD*jB=yst*}2fD-+^i z#`1VllKX#bA2_Ai82N^Rg9lxu%Q-$96nP%5FkMK5^uxQlb?PT10E~u_8Yj6IO{lG11kk6wGzu1Ha8o5N@++`VpQ; zndm?Nm7=hR(Ft|FoUY@Zyn?&+Tm>b`d9qDP_GU@g;qR3h^L8`J283iEcB^Kg$}-1P z&`9u631n?QGn2G#A0bOD(9Pb+_ucbqJyxJ3VSW?Y<<&`|#WCvqyhuzWBl)AuRVWYd z(I)Q0j-)vq6F<8j-}mtS1WY5!puU`_-a{oqr)Z$UW2YhQia;aL%5>Zgtt}PaukMybgEVOs2p=m1zjqNv!4~9k*jFm-X2+eB9aW3-6i!t zChpOb>BQ+F@OeB5|90j(t)bj@tKCC!mDAz9+oK)~MUnGXlJVH$2WR>?cJR?W4 zK-34*)1<6;c&Q~8M>G5^$-Gz~xy9m>6VeqeC9ee%iOWNeE*OWE`$Tx{7SqeN>&A4% zHEDTyO&q;SCaJ9i7g)_fjAGNG*E1xfkOC#*vL4L*I-q#&x>dXUleC}M`{FL;R+u9F ztA-D-oSEpZObbOl8ShR;=vD%`A=*@12;!&&SnfYV9W47I>(A#vnQ9HeUXkN;j)u&) zal6>}6-ZC)yyA{qd(icQ5D5AcHn^ZMIT(F+@8J?z;DWyikg| zAA3S_B*n!Lm%_V|J*u9Q5;SUs9+T4NrJeI>@cehZCF+>JS~6R`54CVc-z8+(5QWzE zhghkDlateXYOP|?!I)?B=3yZ!tJIwn?Bcvs;SDIHNrux%<^)P6{xpuHr=m8=`w7Qn zYcio`dwYR6O#&05k*+2`Vy&<_e}8W8*2dy8gHke%vt+;P?_9G?p_Fm|QMeI-``p6v zfs#WMetU{3zH?1tDCl!L{bJ}C zCxzAGmCRZW0V8duRWylD+aU!&JI!6r23Hf8Je3sCIhLO|w`1oos`QFg`g&)^zp|=`6 z1QQp}gnh1^Qi5Qf+loct%5i4L$46)&}oM)U0vO4?+LNkwNBrv z`4A6biP}7#2fJPWRyEYqMf;+YSh`TrphF;2o<7wAGS>iRidV}RLPA1!8X_x$Uv1%+Wb?Fi?oEs0dU|Nbsr$)rYeWa)GI7oRuF&!q>APMa z|A5-qMCe^|y8FQgPN?7`328L&5TGjYlWAYfni8Ck+8C)j5S z(SNDeuk(YWG>APGXk%laaIZY%3G{wN_ioPd9O8G%2^j?GEy&eY87TvQWNa-_LH$2C zTib~L{~bNE*2L2$)!VX>uN=80zWLvCn^o|`>h;8gGyc3}1`j>_Td<7(A7HM{4HQZi zTytGG*k%ovUCl(gIy&-?fBqNk$G*0`U>=Kdea>q5zAI5;?ly;}eTh7OF}0reWM)gTsc-uP6TySZV# zg`DEthyQ(0Y2cr@xVSt9iC*>HU7tz#K6VFP_UGCcVw14G4hQg0KLC;m1nhoy*IrJf&3>|w*Z=69U%FphcAIOEs!7hx6*9Bz;DU1-eXl57nyitHKAZHFQb+W3={;|+5ea0z1gkMPba!AhrGsUzkyp0m}W)BJ9fu76N#z)_7 zGYBb?4cTy}^y~&rPBF^KS?EsxggSrbjI?#_d}K!B6Ypnp)-C2dy_3ocGelN)Ho%M2 z&ijHFx4qBQ7}(uj z#hU?Tmh?4q`RC8yzm%3TYNJ30@P$2OKYd2VSZw8M zaGvV4?C_)^Ee}Z4t*wmbYI!kAD}B7$`!#pLwho3$3Q~*RdhJV-e*N5&(I|^kn@Te! z7AH2N;Mh`sz5=DhWAM?QFqn|-E?DN3At+bTDx2OaN8g?!xcQ#R?;%P0f$8((vi6S$ zA=+gT1u`oURy22j+VKvMs;sU?>oy|*Fk>j4fb$%ugM&kw7O-EDK4GmAyK+$qYJPJe zo*Vs`hUe$aTAtHA4sK%y`>N97uFB{iWKY_YvA|RfK!12qN(SjHs?-S&bL}3BoCW3V zDQx5A$|7Dz{>9Y9Vqu``dv&sQzWNL4Rv*;?ABp5BWi^lxjmR(S$P6brMVVcV8$yz( z>EhqDvK^BeMk4rqd*niAoUQam>MV!P+5(8|X7e?M4JgVfG|zZ@odE_&)zQOGgl0-_ zpy7_LzU@sMPjEJGOh;D_$_HmRJM|w3j4~I0skaA2jMO{KsQCeB9=w#xjeSlf!}EtS zSsy&7eUo!28QKO03#T7!o z#x?!dT{`5Z&%itc-T${I<`Z6oV_)A@ACK% z!mHneaUp~)P~1^C(1(t(mp*4!-kB%v2Y$ReLYmFSAfsJ< zZfD(W5FIBZY94DqLhJ88sE1T3#dx^{#E1O0)}Em(3Vi4{ccF4xGL3pmbFRH+s&<>V zT6!V!Ks05`_mE#EETq%^cjE=rf&+A6cgRj(Tt>7!XnLQmI+4C4oZSVXS0H`UI^RSH zCxYC=Rh{*QH0m!h3JxSSwW)pW=(Gh+qlB7HS*sa<5^|j>Aw5QF4VCl}uUG&%iQ)&a zm#s21KIFkCzskUhh5Bq2xX*%$F6VK*A-vzyvcJ|6S)YTaJ!R`6kL8o4kpC8tPf;gn z=hH{QLO2BJkCYqKB8ya=Tgln(*3`pLCb6@%^7*l5HCt+or$NVZU2p_BfJ~!4I@p1G zDOOg}=aI^rc}`Ra6%P;>b8U-WI%}$-RSYfS?+}0JJ{{a;PXEoVW|e~&Fo?R=OpSEY zf{dd_ouUUovG46fB+TKv?B7?kC$l57V)x@<} ztO!y`$M}vQW{B~}e#8_smP0rR5`FYp(!tkml#A0&>XqWJQzcY<3kQQjUtY%-5NsW} zaXW^ycHw&IzUHkh;(uil`E(D>!f%^w3NuKg-$!kcR=ALUwBEWQg4W{5A^mMyo=j_Q z>)blavMFO^3-JALpWM%@Hc7f|8}nO|pvxqB(n%K583V@J9%#W43$Di^VLb1IljteD z1QU6`l=U*RG0UKjtI&3?LdV=is!<;6%)J@-OA6`{Akio$Bk22uhHVyY;r!KBJ=P>i zkNWk23eKp;2^*MWL8oYU#WqDMwnhUnjPo9T_+dsp{irs16IT99Rts0dm`NUYeugo> z0qc?aU(7|BxFzi6ofZV`Je80LjVM2I9CMMMje*UA!!lO=o9airznLk2-|bTluD)aA z3|LRxL9$%nA1$|MGtV!D3tctq*|jZ3mGLr@|6U=tPn2}jhzA{~kW-snH08)rpf2ZW zlk1GTu2v^k4>*%Outhwf&OvcoE?bw}B1+LJ_iVH}vx1p71r0edr%LZ0i!PXHQ$|ZQFF=D7XNkm?4AUOo+b-5@ik#wv9IrJu_ ziz6mV-wTY*XvXe*1ceLz{WTB8VSrT;(r`iGz6qc@pm@qqrS~_;OM|zaMEzu%A;gU- z%U{#bFYHP@D8J(-Qf}8*Mc`zg-(bC>;{1~yAO)c(Jw%9qTW67vXwvg=DafY>=b0{P zZu#G9F`py}4x*?{95YIojIOivA0xb2xf?+|N>o^kZtVMS%jKrXNge4sqsLw$gcDe6 zdQ~Dh!QS_m^%n_(gW&^R9f3`a=yjBilxYhOO^k6z8|3J9%X@K}IF??fCXFKNj;^tlmzW0cK6QkdTn6_bUEjpiEj3PE%8XN@Cnh9lrPHcvH$Pm_} zsnu`4Up?QHbF?t%V{Jod(T~w@)nPMcdW=KhHU2JEW3#hmj7<@T{c@s)QTn@Ra)aFC znwDNJ^#T0b_>hi_f^tpoShPC%sYG*OBSgYEI0ICY9`SQv{nyujDtMJnHIR`xnc)fZ zpoJD*W^XKZ{I*vVE(M*bTv*ZlLfDuCZe?V|B$)F0b1%{ZEc4jG8bn^1*pN6XZcR#k z(A)QTFKWr0AeTR0BMFt736Waw(ezIYjmJagSt`CL>dxCMh!5R#9|ZXRy^EU`3jwbT zOj)>xGdxp(?=ZPxuxz|v>e-MCG{ zVmyWThb8ka&2kJp?lsQ5`9hT-=d*z*Nu*HJt#X)Q&ASi2mQ>7=$p=}+(N6#U^`f8r z*bvWIZ9e>sbClTTZn)f+AMN4POVYR>zP!SU-f$vqY~D#SOUv+9-ZC>JhXP?z@i&%P zau{sPQ3NyPjqo?3C9kyWU%ZP4lA@9+P#P<_+VvmXyQ zuPmV)f;(LhL&qE8_>xdKLE$EB`@{OLilbNlj~{Pge;fNNpl>{erZ{9r0ontL4bzVs zB^j*!Vfi-yo1065Afe)K_*T9g`tbu5L$67W8*(>JvY_JAwxe9>&sNPx5NJ%$r^nE@ z=ev4h2#G`8T|;mms&7c%$#DOwAsN9q0wayrQDw3s-k4e|=baoBP`=-E}+7l-CZm>^CRSKQ%eNyQp!DF>Hh z5lot;EiRu`ozaN)k7^Ss(CSood$$%~fpTU4RGPw#pEmnH_`i>-!x0!WBzS2br_2yu zekGu~;n|18QC0E=6+a$d4bg^4NObQwD_M>^mZizD^+lelmn z9Fku%uVYdB{N|J;OPlp^)fE`S<+>$AA@t&(jqke4y7HXV&V%S;E4VmgY7J6!aGJCA zKf=jO$;`^4Ll;#;kH->|*#zyvAoE=i1vB$UbF)tyJLs{-U*3$Qe*MmXwd%rjpBbmX z12fP)Lp@l!7i?}mu$gCJ{ul9Ze-s(jU8#+yE4RN37p`uOgNX16G}fsTDh^gUkaf20 zux?=_5p^oUoV7h+0ZZx}Xj1J^8nfquQ!*pH@a+Q#?pLAQNSxKdw@l3TIlo?jTbziX z{Sj)yzD7)-h|fD=7V{Hg+9qvTroxmnC0a$#rpn+tQ%?9(cav0p-NP;^@8RPq2m8cm zM4sPG#%y8KSYIl*@LuLoY++-YvGkq2M&MW(T%{4L;Z%=NA*AQo68>NSs z0#HHIR^2uhVvryR^shT(m$8lEFo6)DROzL8Y+?w=+d^QZ3T|Dh>#nd3#FL!9-9#ij zGXvIK0qoE%`hEzvr2R_B@A>Gc7|G3L7ba&`;o;Hb=n0Fr4?i>>Xmv80G2)A1iy&w(lL^YR3ev$DusKihVkmQ5O&lb7O_*bF(fDD0`9P>)fN^0NVy=-_YHA2ZYVL>Ge`~=h)wgyt=dN%uh_pi^E+a6~Sfng7-E$MXhPt+31vI zqO|?>p9)A63w5oLT+=MtnZYfptB|&i36SqLM8H~ewyKu=&vz?1gyw+|(X4z%PA)5O z+0xQG+}0msQe9)zsuPHtXXDr$IwG$=C?;Y7*HinbzQ8|}LtOtSDjP0TrEUV2e;g+b zA7G7p%f{CJLbK+%k6dHO5&0v;f0DH!lQ2=RVqg8*|8Pxv=^YLLhK9+KP+O+9$Z1xY zfeJ&$u;!EY8iK%H<5g$~E z#HC$Dx;Bk+CO@jv_(ulquSYA@HTpyNVuH741gyfV*q;2C!D?5u-n)OwJt4uqmUz9a z)aseZ=TEe#cHZ#dcl4sbg&|l>m{jPnWdSjdd}M%+A|j^Im+KP;l1};nhdnrBi8a$O zkJiH@Hf>EwP!6q$coT2!=uzL-GsZ5J*aKKg5A1b@-?IV&c4=lXHk4uw)Ik8_W$6RP z&A^RZO-17&B0lH=_5_1PG{)*W(yE&~h2z4ly-=S0d*)VRP!_U2RoA}%K+kZ9#T3;- zlu*miGh&~mVoY|$yH;MJEVBe zfksQz;JRnlSQjT)0%{s1(8g5i!tld)ClIXKqpL* zL^7)PZ<}l4zr8UzV=}R`d%pXNyPZSDluU@#T4lawlY+cwSY(F`38P+cGse!q?u1`m0~4wT~%d=l{jopJ^=kbAlJh8y1i zwGAV#9O2*C>>X^hD++7>j*@nL%4pWu>^*7jJpY(B-1L})?qrwTkJb@Uq-8XYQ&qe( z#nQ3a0JHkw*+CV)JG3~tGKx?RnxWErTGW2vL}z1U>IAF%m3$lD!?KV!srZxw4oa|* z_+&QGDcRy4A}>?TvNV5JN5bFJ|K63b^01{eRaKrusgq&^emHzrlMnw)U8#n;uAnfW z+$xxdBRijrDmL*l>A_)~Xmxra3e}OfQljYnmPo{8*dgG?~qvYRUYJYi?%5k`8 zENWC&d(PUgz-Lz(la5B1L`9z>J0Aj2wF|C;s*K6?1??&2#3;rpm@w7te zoiq_pE79(dN+dTE1kzSnI=-Se9U&k`XliX9Ne>SC^bZG2H@YsA@f3^;4iHYAM~DQJ zwv`pV=Aw;3&T9QKy-x#q6}t0*B+jfXtVce%Ff7ew2v&gjdH77MsFIV!pyLTb%lUXQoZ(wp#ODMIkYd zAF3E6PiCKX+C^y}=b%`rN(xo&NDtD0(3i4;gM9nfTPSCRQ1%J_dyxUJsHWEOo5OIK z!OM*JGuym%K9p#6OEjyj4cJ(~ewwr+!B5VU=eHc!)1|(~b}od7h{^m{8NTI*c8fEC zU(Cn?kGO^Ka!tnw2`A*)xgm6n%OEjTP6j`=V$}tb*5!Fu@ego_LF1ph7RFzFu6>~J zo6XG>MEmjiNKe#bK7ovie}{*O9uSaTwNUY~KN%cm}4-jo(HmbgSX3-wEY)VJ^SdoLcJSra`>l)^N zLl(~C#U8W*$(76fKsc4{AaM9z094-my2jp?iYDj5jtWAV+L_iwRFo@Rw0Z5zD_$6f zrm+C!(zgFEaYuanM8?c@mf56nKkbUr8llK($}5rI+bRl!0?_wxmRNv2mjbp;YSEe) z_Ns$*jeR19W_1-V5^9hgW>4>{m^KYWD{YBt#$5ADDtiOxP3#vl7ID!E=8QHZbG#FT z3CcvLuj_a(Q#%gsij(A!k9WPi5r=a)em(RW_e5;IFOm!gxfDs?(Rbug z@nU$}FB@0MIcKEpwlL!g1?WjQYJ8n3ZfvyC*NjVLu3+cUPz=|mZI8!f@RFNJo+$DDd5vs>)7$RFCLwbe6`E$FV*n)c zr_1H*Qnvae(xDT4gez=42i3J0d4cf{`Jql~m@1$;ecS#wUSO^#2DpzFJ$9Ze!Bo*U zHxNRP($wI^^c#9=$Lcq-m5Tk+Fa7ae2M?3lC9TLQ=0#c1(BNmi?EW~pcc7|N_z(tO zK|GU#P3-)}$hw|xj6pJp2jlva@)NUM=s+*nD^-{X8Q>UtM)*Y3u`ayrz;?U2V0G|q z>2J6m>4#?QM2M*<_YNIFvU}EsCMHD#kaF<30}7`3gS)wp__VHRGMpkY!(0hzxws!8Xd)%0gY_jLAQOTCQsdqfd|QH;OEjqJBZ zpI!;QatCtzDK@1}8`2ULaAEAs48g*6(!Yk10L@fZ0V0KiK&+SISIk)bGD59Xtx)g5 zf&w>&;Ciz-qvs;LCPLz+O=<9CVW1!sXMrU$zErs;@OLd}gKJE+EuSzt#SLt@OkX~R z78Uef)H^H86ui_CjKi1JIR_$W_|lTl)J!9)Pp2X~dpk38UX*`x3sEZNDUm=3KvwGS zeZR|D(qDhn43t0k!16YNGl3v>o&m=!f8BM)8P)FQ_j!MPr8-_g9x)(&dxQ8YD;e5( zrd!c8FK4O4kiT^MR-5DrjRLR`N%kZn+C_qN%Nz?sLCpcZjt?U7ykRl=Wl9c!ro?=? z`X3AMil#RWWz!#jnT1~4?*05i04O#n`K-{Y&AP?+?$^Q|Lqs>?nCKZ8kWbIf*8f)3 z#eAfKeK!!N8eQL3`l3%_SlvlY#aqttn=a}mfHf7{Iqvs`@p>SIcNf5-B^LDF)K|&X zHGV7t_5ktt_;N`r`Qt0cl8U{rX)csBmFoo)>;O@C9>k2rC^*}S^XSh{Y+d)WbOY`9 z6r0otC8nktEP|QQl$*3`^D=NZ) zZZg`0_MWo}Pw7CtvFv&7eny~T(i=Mr z@-VXvS2lp$>GR3RTq-BWBVyD_^v#?!OpQy$QM`gReYPUca`9kLujniOJ2xf7ukW zky*>Io4L6bTsGX72}H&3emuIyxFljIUrfX_#n@qVhqd!j;=RTlZiWx3pky)J0xSN> z-H;tDWhT8#^C)m_Vqzk9+@zZ(oH-jMHyszfx&r;I5IfHz4s9)$oGaZ+d()Bh=EEww&_}l-oM9yu+C;c%ekG?kG9yvpv>S+P`-k$ zzW(q7R#E!QUIOOtaj)+&HB1aUdYmke=>l(X3Wro1uz9PtZm@IdS6bh>k?2gLVE&N9{=- ziHjim6zVd~EM~8ZqINtwEX_4Iw#rY^GF)Q*v1{ooM40L64J8oaQS#E4Yu0U`@n}j9 zd?rejx}YSfi>39Wtm>PpGT`x(FxxfCxO_7DeE!UuBNHb5ieStfG)Fk}v!Iy*%Cc zy6JR+AeJ{O5DR7eDU^6L;lmi3iY~=`a33Lj!yn|ldw8Kk+py2%NCn96lLEhusk|MG z(Dd^Y_RcNPw0FTZvsr3(JlINYTP5!F4)EHqX=}`&N@uO<5Ia#PhmQ>#)%3-0|NKbX zPn1&!|3GUN=~eKPwnf4w)?mC@3_AU|E33G;jvom}_itvz@BfW7#bJ|zO7y1Lc>72q zu6F&|A3SEOed7YoiSV{dmCNURDXiiQBClkN|KpUa;r{VB^^6&($ zw1(XJ9^m=E`)Ni8Vne--u`eNw7OIvpHddpu*6sBlh{>OG1RUR{I zEB~x*^Ie+QY>rHj-qzkbguZX(6{4(fRo_e$Sp< zNzU>t(_ggca->7VCCtsu30}N-Q9ztPY)Ez9IL2*#ZV>`&`~sLFqGxB{?!c`aXYr|p zzqQE#z79k`E>B;*<-o$t<^DVYKR-XDXB9B%ArVOZBXll|z8s3bow<=d{l?@07$pWe zb_>UT&j~rt_3e!3E#3}&f7@PL=!wF)?>n?@(C4X;5_u9iJP>lZLZOZL+d1_He;#{m zZr!=?NdQRJBxwYwimIxk0m1P-@Yd|-O=|Spx3f$Zyy1SyK0;hd`i^lNgS1Kiwgn9D zUQvNlFk>08KmL&4ZSQA*g-NQF{#wLQ_vfnNoybASA>6bu8qLu zZV&%;xYq8;M55Qy(sJO*j`wLKl}acgr0eh=Org8GxY!i2aGywlXvH(nb>q;O!DUIx zKM-oS&oWs0K$*M6+#!U^$X0$Le8037i`fsEB&@D`wx_mSApPa?lmK3}LjKrHz7_>+ z1Flr9bPV~3AApqSH}H)eK`F;jqZ+7+z3U+0TUYn`wO0o?x-D zxmvUCkMTliz(n-da=0utV*~4AguhosNeSKC?oCn|`zuTTC(-D+!a8-5b6t0q*!+9Z zckLb}oZyDuz87Ee`zM~vOV!dfTNazb0VhKgxnoj(2Zk4+V;o~8gJ%7T7jb+{3-=z> zD#zWmL&%tajTuJEV|#!GFBATgCR-v5uwOLoDvp?JtOgyQd(BG0<`rS7%f^38!ZA;B zoQJXEGI4vZcksi){$kj$HYp?Ni44fyOLRR4oxg82fM%)lW+8;L8k_ z+9Y95I|;e!!bk6^!%gldt{VZ_0>!I^YCX~dYBsa?8H@?P$$rv}BKqpG_iEdYywxNLv_@FSX5Dp0VCK$*&eQi>3; zG613*WOLLZ8fCI6jVu){E&FGBTH+ac%G%XxG@>3zr>9FhUEpB`#Px}v79ykoFsi*~ zFB^L|tqrT4cU%e`t1_swa}zLOd*cWHsWzFE@e}0)@T~O%Zp82T`+yCr$*>;|d&oP= z57@~)h?&2WldM1**yrK!|K zKF)W+1NYyPSsmCNX_org0<>6nyLwh6`PcFSzc`X95Z*l8W@urqJ=mfXIM4oU0xc@to-D#SJnD+Z7F z!bXEBiwvP)K8_DDB%|7RWr*JWl&<2I4zl-xs;5z{fI9ozvG>m-e#72wG&K(A?R`kZ zF}mr}j~}mhDr8OuNkWfft*F_^O7jwp%##X>1yW7#YN4lU)`m4h;vIh5p;` z$A0KPwyY$P(YZ942hI$Wkzw)1q8<23HTE^e*gn~3XJ~C?V3M_N1cWLty#kv2lxx zu(C47f1VJ#HcX^s!?5x}5$Mh#yTHUTs_qFdLVxa)nU&QKSm1`;6o^vOF@q)bOZ!kU z)^3K@6+^7a`C{31SYk!AdAxsIsi_(KobFK*gS54)vYX5Zi20!%BTui43;l&vGg%Vu zx4+Y<4;ZV_HtG6!e}(a{2wh2OKFXJQXocQp(yk%ydlkrN@Lv51pdGG5Fimhs?|Y?-IjYUGP$Zk*3mtTi{_?JkKK zqI(M&nv!N+{7V?R%i0aX3%#%e4E_3D`%^0+fV;K3c0kphc<*(PGTU8*8(;zPUVK6I z^kSuDDl9-e0B`lN7{H9z^8J&`R{Ri?ds>NLFUX|AY>4&ukDj-o$^t60g@w6HL%8zX+Y- zPqU5#`qMZ}_{s9+B?ew#)=R~o>nt$pWkEp~hO1*^1K_0)>5-hg3T#tT%x|7!1xrjIFm#}< zEq{d)#Fl=qF^fW#UMLZA08bh6@?|f?b@>P*rAa|&hEUW>bb^=sV~-+Az>IM@I*%B@ zWDD<17ENkC?7bcqq12qf{!sJbKr+F!d#)Gi?Ja3Y3prAGYsr#wL}-4jpAObC#x?ws zwHZ#*+XwUqzE5>Msohv#kw}++M+N9qIRkOa^JXGDyCe}7v(Aez3jbpS-mcBG-0kaoQ8A{q7Efq-$~U%fNcV#0^Xe_g;vF}-S-OsGz$;o+;Rg!#kkr)r2gcL^S`2QDOZygt9 z`*!^b4BZUf4bt7Hbf?nY-8E85w}7MwNQp>y4qYlpN_T_Q7=!|{&-p#i`|NkWpLhR% z-ydc!ueq*s9c!)cA-&NynOqTX5e;S--(Rn^-Qsb3+WbcK4>!$$LW+$AW?oW8`m622 z=&9WY?)0JCb!Fv3nR@Vn4mlQOsxs@SM=#@-t@uI{aKFkck1}|EI3(d#L@ck$|H(D> z4N7CmLWGk?8t@c zB+TZL ze5N^D-SOQ^RryHqym$qoLNap1r?H%ZUL4s5VYjvjNy&PczjQ}YO{XmcQJeZnmCfiwhO`!$Ai4IPN5R|``HQvHIgTx;iv zU^g~4GD=I+lxx13skK`KXa;OF3_R;p1|fUZu2{+~?;yRQ@2Erd5`}Tff)iu=Kj-4Aavz9Z!^B--S__yKgPJ*|C{vT%i*@pXG-&1;TfT-Z!(onlNbbD z!>{vHIv?_Valk?NNlz#c4VdPbqD6QPq;;yoC9;UG2*WeC$PrhX!#;GAxwmo)*uX~0 z9i-8ST;S^LQY8Tw77gTBJl61~EJ$__tcv0#qDE{{QkVwjNI*=26a%N-$nrUQ@a4&8 z#T_u59fH^crU?@VN1TPSVYM;J&PYlI!@_?_q0ZHC2{yL(8q6NMpVGaT9CGArY;3w# zUPn& zzZKK6v~uT7w*3WQ91hyYd7^ICzxKbL+?Bt7-`_sHvpKo(FLMXaz`($L&F5xQ43vs* zI_aGH0tcZS+R@0fZ}<7tdI(`{=XWmH_m3aoXFEr+_y670YJGM65AlF0k5hqaxMMRQ zBowcQYW>d4ZBdBg%ac*bCmCr(*GH@RF2W9>)dW5VF5gC8nSJBJvAoUH#QE;5;-8wg zEb9IyN1E#QU#wBA&`nd*lAW_g3JSV)M#(441bxW`rEIqx562cz+!ksb(jSoaa6)o; zOi;~Q-6LXfDH_ilJlkjhtOJck+!InYhx7jZ`~O!9;ZIXgPza-tA4azYWd$713;HB& zc5Vh2F)B4A58O12(%Y4`&>?XjsT~89Z~6`tgABI+BY;`}o1l9EaAkz`lC}evJ!Y-{ z?#=cuvnE%TNGLP)I8D+^cyB(?%nKER!e6*wQ^j6R5MHlKZzILw0ND;rj=8Ve)XjDv z9H`VS09%R9%cDk?%(k|Z_|LutVp06I(n5*MLBn?*e&r_BeWjw`p_5ydeMb7%&W$$$ z-OJ3)Mi(+eA#E*;PsaSG%UG6=Ug5q0hhxMmxxDXGf(6}+g8h|?mL4ZQ`#*+A&MZ3? z(#R$t@5>TGbfAPViz_PP9UP`zc)7Xl zJP&{FjlGdD>kbx8W_VmEOCdFUcpaOl^;WDObW)7>DLz(ISWlb)&6&%IRBRo_=DpxV zD|P5s9FjO88cB?;HpRkG;7^i7$=G}Q6Sr!KUve>H@*N)k-4&bh)t!{8^uv^HE7FPf zlr$TaSJ7wzH3GpW60NcX0UM&uQ;hA~iQJ3NZ)K!N&H>IQ0=|YkEwJATqDEq(Ofv>% z##f@(8S?3rFC4=mb}^i=S$E7OeK!I)^qHyKmN7&ajumdJc+%%H;2doTy_?3GV8^o5 z!j#UeXS|0d+-g7-8NHq9<Iq4u}Lj?w=4c5b`}Srg$&YxJbpnSmBhK!6~qr+ z-x@xtty#i0 z?ZzN6Q%Bir7;!(E(qrqU8A;VN$2cUEuONLzfnJBYEe=;8g_mwn9YL)VVIhtGu0` zNsf+=bagjRUj+qHG7MKjfOG!y=k8dcJlQ)2uN?2r0$oE>3|X9Df#PI7VP$FEP-$~d z=T_YP<@v|q5#bpVIM;tA1bHcYY^m&^H8nMsD~cs5sr25zzKRcmaT1|A=o`c+Q8&|r z{H?G(8GF<`d+0|n;p8)3MrWdsRi?9K!?FbCeX?U&L?FHoJ`PPXb@UCXZ4icq#rUaI zf%ZPm&K>|E^@AIe$)wsP#n!M=YV({m!2*C&9Ge;re#-D0xJaBf&n^zNfH_3*TJWZQ zEkGkFzcRBXzp8FR#nr+#H=_MHYR-qFG~WFeZCJV%*D+77C4*$qJLyL%5ct zZ)M@Ij!b!F$1`|yGN8YER)bQ-Vr>wmkRWW$PC=(n+6+DmuXO4hCDHikzl#Mc&2Q?W zu0L2K&U^s_Bz{p@{#p~%$*gNjS0TdeOBknS#9lpwHAqD$ zga51zciRkl(njA(k#nD*_^$ew^x%tR7Lld~-&863Iq zEa5PpKERZ^{ZSu&7p#ke^9ywcZ+*>kCQm!RdBjKN8JT#)FUdp1vUK4mW@&g4o`gxn zD1q&s_}{G|N_CJ|Nzofe%%IT8RiJ*n{UEo})8pAKVS+DRbyShee%e-=*cFzAQJ^ib zW)UdfK4jRhcBH&nBfrGzktPNI*`v;6bponFg*L74J(O#feG+I)>e4(kqcJRHuD@{> z(Ndfft?jFd7a%GJX<`=G<0&yUlAkLxmd&ns;aboW#uys8^ z-%N8EuO%AMkOso8W!Tc|3w0q>YlHfbFNRs^o3iZoUz0n(&eMQPWe2= z{hne7hu||ZYz{tjLzpQ2rZTBaE>xx92?(MxX1>}zv(4`>Dy7s{0l_>)y7gANw{?SK zkh((z#@M+K={K0I#s&G(S_%+ufj%@Dn`{HIlrB@SOwMGi?OlpkzP}k)po_2F)CBdx zkdKAbp)%w1rKZZU5M=rBt=A1!Wn<4bi*Wjt!6(QZa{Xpn!c+ zyFr&hQ1|S8zarIoE-(kJTX4dT0+#y%YFW_vTlwcGe@`cfSgQ$16|rC`%^o^uuB|<3 zkaMw2WrsXn0z*K|d0wrr;FB`L+oOD*V_BBAXEcdoOUwF|6xXb1U`jK!o#3ck+1=G% zOK(QR*}NHK9Aj>lN(KWks^1Ce6GkL9rPU`-y(PH%?Y~6*{ynX?F>{7tqf)M=mH-N2 z?A62&H{Q@ypHVqmTju=mzelI7s(=Y#9&*}J?cr%^N^Ksvv>LI$bJ(l+`0gJy@Zl`D zZeCwkiY35==nV`5_JgU&4jH+apWDXln><$J6dSb6{S z1KP=kFL?dz)h*bT_j%S=XKR2sf%yY<>6uu*Yx(zR2$hU%tk01fC5j0xnA99qy+{jDu6!K>Qoxy* zXHf7UCOZVqg}sAAKQd1NkW*~GPgf{>eSH@l?1vM{1Uy$I{`dgYS;W!oho)Zu2blKy zH7Z|@abO)ZnO5?3M=Pgm*ivTz_bos{Apl@d!PS)u`ay**;MvpxAQ>@$v`DVF7ri|o zvt8VP!{P1zx#rcy z>KT$nI2qBFLMey}-i+e9IL!;MnBknTZdyx08dnc;7X0z8)BNG8Xw^YN%GqKHwInr?ziuB{gr7t>8SBoovTcGN@`2J>ih7{m+3t zhE6(AU`yI#S;V-}9^3C31)uq+<%`ZWPo#D1zS^Fi&@eNje<|_#%`nou!1*04OA1cx z>Hj&gLlWCToM0gH;ZsKNvIF8LH!yORfgmm_VGj+Hp#I7iXfy=_gRIaSFpZoj#8lc5 z-v~uR&em@??(Z0&V@Oy8H~=>q4oC-`Mz7Su@#({M^(v~Wq714G<-q$kgkbg2^&=sn z8JpXB%acsD5x#P*xAR+4kHAz?*TMoH_)IKtAbs2mLi-IrwLiinq_@8szEI4|%iByA zo_HyJ)*fYXKczs}-}~=^zkbQR2m+qVN)kSpJG&RB%=oSBDsKn5pV1%H7uG!MGGYLw zi9}(|6RMCiK6$G3#o|U^$>!EGl$}9CW_{Q`&^P`@_>FY%`tyT+B-JLGW(12}r*K@69H$PXX($1y&wa5T<;#~ZNa$h= z;MEDs#WVZfUjI1hn0lx@+9q98gd}=xA*#-n2o{!p#PgB3f-BGd^T1ffY4CiVkWfF~lFSO}wTI ziJ?d|liB*yU^glhwD1%Wi<&e%z>F>7g1>+n0|Nk_+hOsvDgzP4ZVlSHzdi^4|DAY3vvkps7S@fk0@5P z?b|p=Kdpnp#Hgm%ciV+r{U5Tc!l}zB3ebO z;xRylv_5d4`)RPkee*w}B-Qj-2uQByEicbafy}ypCo3mcK8|`ski_mpVtNqFWrmu` zdfF`ahB{#Zn~l?TI)Im--$|Rx(Gti4?6+bbkw{@sqWR_1-~Y%0`B{cIy7`_}N2hHn z+EKwDaes^@34Q7u(9yOh_V!`U94UGI&-E; z8z45xd5GAL{_gZ+GT386DH;05e^r|_-6k58PGccs6w-G<6nGC{bJU|H)5`|;nK%`o zBT0*##K^DBfpNH&e@Gr2y5vza;NeILC!tfMme5Ofk*3lm6a}F&cS#XHXU!JqW!c2T zP`;15h|0X!SS|NA8DZ3vc*M1_M39N~`BP21SKeCImM4gEHU`%9{`(C|QLL+n-)^u; zEhHeR1_V=NBV$SAytWs185uEpw4_a6zkWs0dA+FQleqLWlyCAE7LE*Qd#=OqtpLb> zxZ>xsoH=(r0*116+lmRREl8tz@4s>S+kFlILs$Tz#RbhgJb45{bl&^D(KnVpOJqD| zNj_NS;-nMCJ}CX}h_k3U#IMI}_2D7dnTGRU&OPLa8j`GK6uAsysa!}W{#}DdzX>^& z6-|twW9f9*JCGI_6W_V)JB@tqnw%vP|BIvqAA6m1AW4BBKh-bkF>6Q_Vo-?9KYS){ z)tUFpJFdX+1OqO*$jz^!7<^O;oD5Z3-r6K2e3tupWOf zyiz{-RNPL2OQ>!X1=oeFwon zQ0%qG@=N?VE(|%d(MT3P#FJ`2p6*)wcY%=jQnu{B60TnLnVQnUd?h!r2@hE zIj*tI(GzXhNGH>T6-DU;IKG?UC3h9__#sQm)!^rs$S7Y@>Sm`kdJ0fk>5{|7&$mJ3 z5bgbwxSxqc@PSuaQp>|Ud>kWCO>)`hz($99nKF{nGuP(+Q?orH0>#FZ-?MtchEYtp_cEUv8{lA@FEnD%JQK$)Rs8dj{F63;xl#Vr zuXTj%9k^g9ZJ3>3v9jH8zd575LsM!ZDei7Xh19K#ZncIL( zQS9QFVhy!6Vv_JmWmmRpk^bWrC^Lw;W62QgOFB1;W1LjS-is56Efy)0c7eKA+8fe4 zb}4m`OD5eK8qcS7A&RNA7(b_m{`R%7+`1$v)Lk`E);L#}KGywxYRH^b()G4_793y6 zb^^`%w}@P=OnJI9j}gkZahfcOkZFs0p@?1#3gAf|Fg_ws??5LKO%P)G4~ z#{Q~YJpMvJWf+YX4IHg?fZ4$&a+zr@znoXnRB65O!HA|{5hitF#6tDyESNeW>eP9k zr{8^fh3Q(O>!s9C6;Xnxk;7gw%)$!GVuU?U$tet21noy9SI?=AiYLv&a9ZeT!?A!7 zX!o*f89xP_ugCT8hi7O=RaOMFep^Z_v#3FemGkno++75X`^wysxSFL_8y8RCxI{d| zO;~%y$S;uST_V4y)X#moTZV%#wP9LU;Lb~1GXfRM5iqx#S85M;j`mJ^m&2rt9wsyO z?UpbzJN(nc)uGQrPJ$nd5?pMb%jO4yzuXf?>wCA;g}?P*%pagFvTrIJ^5g&>{oZAH z;U`c|jGKQV@5$>vrC4(xEYW$uiT+TnhONI!-5bk$^wsF1v7+|Go3wO#xN7LC67>+8 z;ne6p3b$N^2_mm~9kV1*k0ZCl-uol*vVP(xgnB$dotZDJixcJ$w=hces(Dj%sA4mV znPu9Ncss44`Y-kO;}55SuaS^drVG}qZjheXf3y1lG*x4 z$1;AC;M&`~#kGvnkdP45dwZj;0PZ8DeNhl)=;TwRE*q^MRXU2-@r8vQLq>24PVVJ6 z)9!}rqP~U`jhCYy&K+au{;eQ9ED=yw08R<4h5XT3`wpX^Ah9-pfCZYBH#88}c3+y# zYg4+NV|ujLzZ0+Ue<8wUC{tip9JkLWP*p>k+_!P^0UOjH&WHpKN;9MooNnL~ z#9+5nSMyvSmZok3=xj8A$I5GK6Lck414`3K3Ju5OTAg=~1j7FMcTg#+t0!&{I7d)Q z`m*|Y=zaU!7;tQO4bJ^re-7Tof!q{39ze}j6iv2yZ9D>CH36@6nNJfFj>lJEF#V|w z=qH-O=lfKYBF;p3AdF)n{^DP#MA+_;KyaTk(rxg|N+*xQ4L7-gng{PE{Ey^_J@W-` z`aZzQ#RJkvgq4G1Y=t4F;UMhMt!{IYhcb#=sX{<=hAO*R;iO^9a z48rmCTlNZ0P|0lGE{>c3^zjsHK$M!``zP*3F7e>qU{TWWgTM7;?O1tlA^yxh<4ye& z18S^4ZlBN=mZ>kFnpN{l07KyaqA#$JTxqDK-AHl-K*B}NxyJmT3WH{56idDcy1q`_ zdv{3#rfWpN)j|b~F7I){QGa!BDOv*dY(iRzzV)%a94i6?1NpapyWnKwG}-k0m*X{n z7;g^W!?F19&e^UVj`^o%W>Ar-*l%r8)`R6QHYbih^vPa5eh?54Q13d&wf~K|Jq)$G z&1JScp#2r6EOB+sAtSD1s;+PLgF z9;`3ooS`5HLbnbEpyWu5y)H9o)ext&`}su)gg!jxeE#mBY2i3|D)BY>;CvkK1bN^i z4!P_85!W5;zta`CZDvGpshZ#~9!h(C27$1TKOn_Cti%8I}$*)?l=&UFpEmIw|5NIKr5tztSABqEumT5*$^C@W^tYOFI-2?%C%*vXUVEL0sCb23J zRaq1u7AkSZ&zVhYaPr5T|GirK=8{4*Wy~`kmNIl4O+wmo*jYmGgo8}Dj@zg<8foMl zPM12Qvpd+|HF&Iu@sEB3Dj;x?=`_k`o#1<3WF%@J)&EifPP;hgPfhi?+KAULC;0@- zNQz$A@Zo)5c&j9H8v#Al#rxlg+R() z7cEh^YH9@huvXq!56ckXtN|`7i*xOMNfMte6?yXlcnA?Ngd$LoD-tqaDOb;IW`pYX z#iO||GW1h#R2BR=y@0_&7X|lQSmk zP0{w_rI%~LLIw%pBLR{IFkqJWH7Yq}EP#qd^^0NtbLsVzL3+i z%K4XqXw|$SoIV)UgGtjdz$S@Ecq)_n#}Hx%j#GRN2Bh`ssGXmI5ObNj<+Bx`epB18 z=NwuKFs??g+^&7W+J(WnSFafqbYpwZU;_016c?`_p>-m(HuQ?|`Ma&pbQ6sGivS`T^`v@-crM>gv#z4B_2spkcySSaDg#}Nq=9>H17A)~| z)?g^CR5L|Jl|ezOBG=xeaOvH>z31Jd4B^+sYhm@B=!Vt^Ov7#%Si7*OhR>;vFf=j} zUZG8$k?9{R>>$=DE19A+zXw5E5bMR8SY9?2%iJQQ)$YrPezwB*)B90ru5A{^(LSF8 zjHwbCM9hAk&|p&B&pktQO2%Ysi1;G+!?~FpU;!9Oo*=U^XeY{{^QRMxWM+8UH$`~6rT|#jr+k#U8aKPzGaz0 ze%UfPr9ARpfaW}<^j@H0;U5j0KaFNk54RQ`V!)aVw|4}-{JzwmI1zlLFm3$(ZLO1654;}loC3#1+i2bD6yT0ZMJ zuQLZchZ4epbd>_2a&a5HUqd}U$=3I6%~I}HV^PD_2}@s8(v|h@mjtF{0S}g(=nBG* znHL?qdcI2C1qYD=*nbkrH8;SuO{8l>>x zr}pUQJ+WbkuRUIie`sPi9yBB?km?`{1(nyINO-A0_N_LmvpflePc*UfJK9a5j2H$Q*PsmZ&+ml+ z*7FlyX}gc=QHK785^ZgRW75O!796ye3g9I>v#)>cdzEu?dodW}%iE9)(qXDmc|_cW z6+=uu;>fJz4Eb~-CFmeVGp|};@+bdh{XT2(t5*Y`Qyal-?0};4ukW*SkF}o524yrC z5gpkE7d{F|aAeHq>k+||#Q0Ic2zmNX=~ny+3!^0jWZhi-VRH?$-r}Ol{4-C0CQvMp z3ZX;vp-dk4m#_tiXI9wd^BblM!)-sbJfK>y)ih0d7TdOLivRBPZ*oDe&vgnBA-G&< zbUsxWACIC?k`d@HvlUI@?#d35Z5yrzGV72pY>QR=r zja?AIs%cE}CeL@2itS6FMx37y#V99?PJhnAM4!f9^XBkfnky%t<)>`NrhDva^}#h} z&7L`SB~Vt4Rud{R(o>O&jAwG^qiHvO{)88C2ANV>H1GIcS+)7`Lt&(G45Tj7zs}I# z8(hQ_g!;veKV4T_9@c(Pdici%v)FNpFNn&dyu3NxU<6uV_-0?696q8({?yw;KAK~- z)8au*%fO$q#nWt6q5^b|J_ckGE9Cg-!#nzP{Dto%-_L&LPqB`=OZ+A_OMYR?Au?&& zSJ!<>JtUksju@fQPqL}ubY_b)3UnKGFHruFpITL>R^hYCvedO^Bcn+DY0KadpAq!- zZjvXkryhaxNtFT3^(FM}o-?zBO?iuH?q=L{YIO3a9x(bn4&tsa^B6IVkbg zfBBjgyxtUzG%Q826IXF>xI=*aNY@1|QuN@+bK{s=fdYCu#?-@u9jQg;-yHm^TrXjA zt}-^|BhW;rg9%CNww#FJRe;)hi|r~$0you&#{DV|h!I2Xm4h0bIQipuU%2a@fVCGU zewCn+g4J{TQ{!-@jei%c*%x=B(5;~-46sd<%SZd;Z_q$v0@)F$9|LP^;)2#g zRbb2$Si$&&AhaF}mbWyGm;y8^YIG!sh0$REiv?`r5df!~R?C0Jz2UO70pIja!k<5X zUL9341aSC6g=h;m;DbkJlM52O_s%RW+NJ`@)T1y+og66~#~-HgHd<97wd~pl27Z51 z6(9c)6J&>tPY_c56gl+&exyHSf*z;hCa9u@*jKy^z*dSZ=<#OuZ`biCAc|@VJT;xy z#fjlJ^fm<^iu+O{Iys;De^id!inQZ6 zr3@c587awvFI*`fhs%WU`6o{Qz^4EMa2X`#`$Xmv`s9O&Z?;dtdDr=)sUv^)*HSoF zYh6K2$2a(=nD?D0R)~ua8-2to+Ofk7J(ynbOKLN#qvvc=UH>@U^&lE28@&vmG0gMl zCvxCA^nId0+GG+rLp{_!O!*xcCUd!pc@*R;VO0int4U-lZ zA|?3`mQ8JU zWdOlhEfsft^WQE}?{3$m;Nv5m3*jXiq;(VjD9#cdzuc*2VuhH+PNei2QHJE*j0j+I49P=a;Ono&^ zZU#Nu29dcN~g6{3_MYv z1YmT`=D~JH6EaH6N@jiAI2$g!5gak~vnQmkG3At{Q}|qo@eH_!&t_V<*Xx&}(Hf$o z*VD4gdzPo*U)kR+;=a4%d3YeAx)JrzY0n{rj|7Ok-M_hQqnNqJSK%yu%@; z%|KjC+h7aQJhA8p6L#D2$aR4JZ&p{$#U5%@&QH}@J>HL{SI1=c(SvJ~^aLazaW-Eiy+6mm8V`Lg-T6 zQa6(tJ{SPUHeDFcBwA2J4UZl`(0QtSn1gO$n;U=ahvrWOa#~Z>PZ*{nAWDp#rT+@g z!J;0U0}EPAGJLU$gK@;T+pi~8UXX&32WYc5VkvW`;ARU;f5az&>nSCR#OHwMwr?3q<{l!?UtXLtQWur)^A;!rk_GLWJ|zt| zLgMo3qfk57zehI)yEBcWI7>`@f4k`MN3Ej~gK+@OW6hZv$E0upCfN=cv|J)H)y@~js(kJ{0G;+lS}BX zd>N`$tBY!8mHD){|fnvj5j9L;D+#~D$MWX9_4sz!yHn54(Td||S2t@X4t#WK$r zT+(PQO9dPGPXbXEsiS`(KWveC=#Sx(ZzkR(!44U8m3gP`k0W`b{9bFNMDsw>E7F) zqL#m(t0Mw!?nL*oQu9SM>~NQ&>7*KHD&;`$aEBA>5S@XTgKB1WCrQsCF~K`MkSp z=)<|lzM~W_YdF87By8?{pAhu`8^`5`Cd7HJX67SyzCp4GHNSXP1PWR>|-ZYJeD%uvMDzgU$(m9X5Go)o;XsOV?oU;vzOW4Y^S^p9Tjrmj0Yz zfwm|2$teOSow$Y#d^Hk4eW{8JlijCK5eS1HrVu+maCg<60(=*V2E*+Xa`&9maw0L+D3YUAsR7IB>zKax=W3nwIf`j?&G}oWeOvgl@}den-3pO^USxCm-)D9vZtf(}aAd!{*lVLFEhA%) zkA>T?`lZj#$mi5!fX2~$_sGKYaXvC3)v&GSgfuLW;WJ%huHrDX@gbfu#dGZ033PwNg6)462oTT%qY{FBtyvOV=tJ0s8z0=HDlft$P3^yXvnaQ z`2y%w)3mxTp;j5zM7q^>VDPnXqW-TaltGF-Q-bOQ&!cd#l(1;w_{~e2N1?F3g#j$~ z#AAj2uRe$uR-pvH$ip7I<26COS`~~+IQy^x%UiRAw^7c#o&_`fUNi*>>I@#*z&HYth84Q2Npic`Irwa z*vRt+d*{7I&H!@DAm2{w zX!GJ2)fl3kjVO2gh~^U&-7Mc-eeFz;x_S5hmZFsw^tDOwu!-sjyhyZ6pYq7?4{3|w zxJ=C$zy!rgr&YY;r};#ViwNAJIl$}M;;m^9w@C3WBC?^jmcX#ik~irIX%lEML^*cRDAP(4Xv3iOd+7*`CPxe)&;^TCfi;QeMJEJ1HEweWq#shx3CtO7AE` z1A_)aa*rF(q>(1&hc-E6%A|VH8QOdrb|#LUSldpo6k|eZF7KNlb^{OCQc|ZV*PT+}`4>))|Mt%mbQJ_+H(i#sfBaX-)x%MQ zkFbzrh1I|nkF>(ViP}-77_c}`XgUOVX7x+2qF*fQ<57DrMi;d9^Ms1jnifYV@Cgea z?q@XiZV9vrIQM>Zg-XBBTo)ut6#;0s9|-tjx^C&yD->^54YJRXM(sd#lnhME-oCi9WRPaG)|C>g?uJIMvrjFM;dUNnwjm5 zwV$#Is3W%_4k8zzG(2hBn~p@s-RwNBwNpVRhX7n6w;=ToHC{gSAHs#V8pV52F>ZlJ z3LX$SST&|f_)qh-Bx!6pmYHko%Q=S_|EE&FHI6ZV#LKwwjt9I-(8aP0=*)skQxnt~ z%f``K4ycgYd}CbwFtHm1Vk)xZo!bI3oddAv( z#V*YY5ALSjgBqZXTL&$g_B(e@kA-NoW$qL|X@BuF@}nrQOm;?czIcL?I~I|xs81Na za|TBJ;N@U^VCo+!IL6&;nRY?Q9(d=2+@5vbdrtt;r%peJ#tAfNLrxk_WP1U}hvz1V z!+%UKw<_K9yjySwP=1Uca5^uu-te#>D|XK`7W~FRZY;~NVCAXN&s6IICp_;Z20y{m zt1-M}RshO81|2}oI1ETpNlel<}WSM?TZ1~+@L2;2q*4igUea&F8_P{)- z(~eD80kIm{g$!Mi zY9!7n$sw6eI-4qfE72ZVjYt{VIWD@E1tpQ)6>oVu?Z_MO%gtR$TDjb~|0gc}0Nli_ z^7Xs1kH;)f(N+q{CAT8HXdF{8@@>odor#kSG}2>}HzSQI&x)`WVy_kwt#+g)HVd{4 zKISHJ#2LN!WaDpBM&`;rdU4P1SaB3}LOHx`L@{;1>YU=28BL*9D-0Jk+SzM!E~079 z--J2-fZt1882*j1QwyFSh8s)rWZZ?fY`?EPxVaiO4u-3R5;bH3FiD$8z`M$`?T#q9 zY+G%hNfLcO5d@+6k2aD?O)T${QkPqSI9RfD1ZuIY zhi|ES+4foc-4b@ag{Rphv@2*T4cxLYKJu8b_S$()Cr?%Sza>_T?pLNTel&h1aWSL8 zm(B6cz^rOX=xgT4ss*z$gdYQr{KqCZSMbLRG|W)e1vo1GS%54gPi~!_ngVdX>R484 z5`{Jk@4)FwRfLfQ)*&)8_sIg zDEey?6yy9uPENp6-A?qhe!YMnEM`aUiZ>jI#6mq^Qa6_3U$-Ztv(!M;a(blV)-Vp1 z8VpsRw{vUANC56uR?^rUB@KZW>wn7L(;gs&L{aY;7G)97q#r1bfzF@3(Wg)M@ZqUN z7C6DQ{}`b`COFQ|#)de145(!$LsY0m=p^8c!nEvh;_Io;07#V?|I62Nbt=m_DL7yM z)*L0O4l02pf#8faV9?3YHWGt%A}y_^V#}_A#*F<$GO?-^x(J}L-+2Rg5hk22MBPr$ zu0(i%g3i)w>x)?oUX56BscO_U-Yy~*odTrU;)NN5!cm1(|sI# zh+`>!;225qS?H-lY%VF>IF3Ri6&)3q!fw*J#7>3<|Md#Dj;U}EsS8%dAh$9#Pp8Br zA`z2~)J3;-bMEN%w-wj`Rf?J$2)xAW+QW`d0{VW?QU)kzZ?M_wB5bcxzP=U5gx`U; zYvk?i?OBheW{JxJY=9+?k;`&|T>_p*fL`~THV>gl{rd;KOB%$hc_A91@^n_r;2;Qu z*cDjmEGq$KFD@~|VGUOAccD9H%4X!K>!ws%RojUJs6G$l4LW&Y$XNgkJooPc&-?yO zA&0+e8SDX94z{H0ZpCxo`{sF0erqOdYfo;SWF8MDspJ)V&amFcqctlhQrEqK0E>ol*N#$wXL7)9J@{8U@3Sq)pJW*A8$bu`In4J^N#tjP%mt07`Le+>0I z7W3MHB`HI~bmF@O8HBB#&~2sx-@IsAmjZWRfhHxVG9TJO0gC2>+eXbqxPh`JYdxX8fCf7D3; zvf6vaw7dgdZ~&_sEEiGO%HP1d_>cSx{9p<)nflB6U$SLi2S@*Yj$P8#z7`0S-dkjA zBk4T_-s4+`DOVQbEyif?uU~&c48j5f?RW67B;nEW{b9@8b?^adV+RL^25l!~d&AGd z@BhEMQT;kogXeC6s(#=bNKL%aNZd2fllgZ$HmSR6jCVtQg@VZ$D4J$75&Q4xj_GSY z29lX&4z`fHKclho0+A2*Lg-JRLHaUd*=`qArlB zOoEEXS1!u}kd$UxDnvqH0Fv&dc#QGpq>id@L5hy&Vhjk?pMuF0`qh5 zMMz9dhd$TgaIo4mSat{ZBbUe_2ik56eEWu*BcR(sI6OQ0PoiU$+!(h8ANVwXCE)$& zb>G$nzNKUM!iG~-&Gn1qs5b9&d+$3asHw#ph3r-EUZCM&T>R_xF)(a=FUE%6oQSG2X{K7#$kHo1Y2?Ph|5SFss#$zw6C3m?`b8Ja z(LjqA1sDw&VxFs?N-{ZF(*beo(|;TZXx;Geu;wB9+o0VQy7~R){!Xj;ejg_WOfB0c z^7R5NwZEF5bbiv)fpnD4V(_*vpxtTu?>vWG=*i2YW@cqIOrL{ro~b1V9A8N^ar?*4 z=pb^1`RWqLH6(n^dcBVOI-6WVECLhl`uYheDQW$wp|LR*E(M=`WXS!$J8Plmld~Nl z2C@YL&JkmLT_AS;@$=&LaFU6LE#Lv2yhK~!DHV7DKxt2oqJQ_&;+Ws+6UT|^PW++< zn-@?e;L89wZCot(9b21#znJy%tN;^Khn|#91JFe;UP3~c+*j2|qjylIpoOX<$S@U_ zm+lFDD9mC}T%+I4PR{P6z48l4WA(d>4I;G+gc?VU^i>9jPAq^7O280|q-13MNGUoP zi?6A>ttyP8OzO6Ht4%pZl7PXA)yF?vWecLsmSDwnbG)W4^TIa*CPj6hbMna z>n})0kt-CNCZsfal4VJCtIt4zDCJW~qz`Vg?`FS(vU04ub&0BS4t0t)qz(Vk2Wp5{ z{N0lhH<&b>po-D6B^W;!if`cyTVbz>(MDvqWHvaIFcIq~f9Kg};2L-aiIRYP8S8!7 zeY4;2D+*JVfa=KZSuY)1zgzsX@P#JUHwk&#L|-rp6oI(GX>d=d3!pKt?SYMcT8eSlqr4p;kDbU*>I#%j zwfwXHu{6eZ)FbgZ-l5y>?57lIEi@8O)IGkTwtTS_aJ}EYrm*J^b%6cYi+ z#E;sfl_UUr;J%SyVssfUds)i4JiRx3Q!33{L!(SU1os4?C2)eoH8jT>LUJyK!iy4M zIhMf>c`Q0J6KqH~I0xQK{VTLai3E|Q+>Tj^=UyP^HJ+kOocexDz_0}AaOl!m##wm# z@qV@iljg2uf=+%lIxG1%Tf83R?A2tfBSA43(HX}q(CLzn=hC--4leq92tG~ZVcp$) zO@2c-$ScLuSq-RhO`=#DT(5PmUk+%xeT%sxb!9=1p?9=sKt=r@0hE+cN0f{O)~932 zyx%PoXt?=B_;_%ZPzK-X#f2yygGhdjTa*DOG%wrwLB{%h1-GN8o_%S1C@6Ao=KD?9 zNLpCwy4xzE?V#jJk7zb#e#~;+wq<$=3S$Bsl<$m~7yn|CbYazI3~r^-{REu^L2JAE ztBn`$BzxP>fDUw`UR!$sz<6Ml7kwbr4vXtYh+L$2C5;tPd*j(&3`4IrKhN`2s`qp) zGEknHZ+s>7Ae-Pj6SR2rtRgn$Z7n3Olmx8nYy5v0 zJIk=D+i=TEmvl;pbazUZAf+IUba!q+x*H^=Q@W)Q*>p&^)CNS5+^9(FJo|mmnVB=^ ze3);1;kw{o&mC+1R@_4gQ`ATcRM=2boRJr*F{C}N^9fN;MA$iv>!pk5o@6LajW~qS z#!~WcSpQDTUSZRhu7cwl*HGnLLHqdEB%udMH(@qIpf06rIMODua_*zc)>CFB)rv-r zdoFeDiLmgcp~g95<*~7DpFL4sfAe$lxJ<CAs*8@NwUOABKk(d1~K6lsRn!HfnLNiK# z!c5B4Z^P#UAt{~`WqQgs+Vn#N`l=ZwOc54!yHVf9^qk9q3_H)2Rksz};y1((a$>T^ zFJl8?LK*2apICaN{pu4Eu!DU&W_kRfu#TD&E>gUmAo3QkLC+h)ji{*G=t>*m?bAxo zfSc8QDEG2PBr4MwYpWcd8_DdoHKhEhlglGBy9$=tr+B<^8`_ip+-}@ zKPsf}Aj+rh=za04{X#=+(~sC7t(ltt&PNq^WR%%5S?U}e4a`pSs2p% zLrbo77HScFPd+!F9BL5Vu9g~QZw=YK4auaJAa-aJ-$>uq6aPBKNk2z_Ut8AP?cez| zR@b;aysf|FIiB8pY@u2Z2$aMT6xBL>O*ANZ!LuFy6ieGL6%+UB$!6;1}ysTK8s+r7QZP@BomWcO{Bq^RafhAwX?*;gt2Gm5lx>DE_J#{*aKy6@T zsly6eJR!+M_xdHB32cW@nyoEp(65S1X&P6_Ly;IiN9ul=zGo=+CjIQbm&dR1;^Mc= zvoP@ek$?Q0j)sI18<#5U!n=mVk&SN5h$HszNKtp+sMZV&4f1^R<3^_eDFQ`Pr5ure z=9LKZDI8MX7-q3S62BdY#eT~Ci`^dRM+IokdAi<2pWpF~9I=U-RS}jl8wx#Ta6aA; zrTcvn9GOoi<}UIJSW^axO`M#*qBR^?r^1*q&sm{fu&=04r^J{Jx!J;3ihRLP(C5h2V_G>^6k7=+J$iF=;HOCt^Vrv8 zGj0Q^vEhAWYlfE4_hLU=Mx{r(ns26+<5*0L=dlti4NP~w3Wl>ck1!b5wD(VPx}n!h zV3+<>8NgxfeW0Arm!|+hh?H=}hlX%0E(`2duY&^5LV1P&Qj%%}t#AxLSFr_}uA4WS7e za7vgdYXyNp?^ayAh5F&g+wdRkydWn&Ore^C80>C+@sqq{y?)|VR^G*B(5^M@>i7np znTaYCZnn$!5M|uee+2-g_j%IACXH=(pl?8a67W0X|Ibb0+uPeq3(k(dz15Ek_>;cH zv?6f-j^ABWu=RP(2c@$QKzSPeLQ@z@xzjBs~b1LM7=qTp4R>FFjcVK+?Wod`~ngba%z@{^8o& z^YOx^vURaPC4m7x&fXwf5;{(NU7AxZ(SE=M8kDe1}k1=3ho*T@hy$%CmEVo6Rj>K?9eHmo@aK~SnpMiAO9@e;PjI$|YPj*gCD z;TZVxIy!`2^g7ukMN(kq`_8-;xb_!o^d}ez@-4mJ1XeXI$-Y(>f6x$lSN6>Cm=Rz4 zik>*XBH!02`p6#<5M!fSFAoeWainJ?BAYt<9kcc*tZ%XNCd|~#&4R;cn4%l zk>FQD>Nq7D5MJMZ1YLJ^!TNZ%hs`>Mu>bdI+pd&J`^JMj$ z@A>zzc$QXjM6NVGJ|5&**)e_aS0uN(Au;hq#0Gfe8}sUU4}O8}iM6SC3Ti*lABnTq!`qt-^kPsjDtU*g ztN^TCNmlKz>x2EocVd`epmmA{gTa<%=yBs9ury6D;v&Sz#&ln^UIkgKiDuKj;D{sc zL8QM-G?{?1_gJ8-+x~o)Ym&9_jR0)dwdY*9f+cK>3EL!^IcLo+0eE1<}_0}%ry1}jTHeM&b)_FeQA$lPPc)Y zv0xxqJ{6tO7ogc}N;Lknw?fYujQq_b(9j z^^E&p?;@5^U3(yggPhvyGd~=VxzT#g5E9=XqZCekY7arDwZ0l~+8M1R48NGI8m52( z9}GsZEvzq;OFy9@{3ztL11M2Q4#lue+tysI`l;KOM^l+3*U{CKbi&B(@OM(tUEgT& zJ?M4a=n6>=03@~5S;C+uL@tRoO7@1F*yf9`{&tXVN{55EA>d?4-@?_*z-FmkJt3t{ z8&>pK>xvie4CTwkd18tA)@u#_mp>GZfib$~ImtiC;;{SNm`RpQJRH7%nyxV7FUYen z`v*1i;}SLH6wO71$DT(pu>Sj#B8}_)7Q_?X`!4TVHvkdT$dN>X#2fH{Bkj^sRP?>@ zgD<@JcR`gBP3s?%|5z&bMNw`II&qUAnl< zoq;x`77+wwC6^iI=BbnwZNT9I}fjP z=bl|_{?Tk-bPj(t9%O<1S}{q&&R984*hl`Qqj|{>HPKaP8z9RM2H0JL>8Dl@+J^b> z>Ft{lqORv5#^hyfwxdn47}sQR)dc5HTU&GV?D!57QXIx2zK}uJ4^+=~q?i&+Z^HKG zq&Rs9#udN~KMDK{yXor8$N;IGuTYQ9zy#8*cI6j$`+9%<01-V~%IwL|%rzLRFPwT% zpnd`eAy{8HWLlTOhB$C}bl@fN6S2tpb}6X!Y}S&m2Uk~PzW2y{YubAkI33aJP|O=Z z#A&cW{pQ6+-&A3Kos@;P(T%jzS1{S^TI{!GVrtT6L`Pa$F|vS+ z^yoDtVG#=+1y^~Vc%jj;K0Mzt#4JRT@DTAw+eKRP-Ga}XO{g1IPl6y#Aap4ZAcKB) z;nhf*H&WS2SVHZBv!Ai}#&PW6jZET5QYXH|ajjs3TmWIHL;{C*@%)#lX57Z#Fryi# z3%+~R;%uSq!ZRnT;-N`7{4}H_&8ONXqAhdb^6HZ%{hXyAB@{*1uvIkRzI@Gej87-0{lM8iriz8$iqK0a4;XzTYf0^zO}gSFFqzfB9_oZozBw|zhgZ{Ev1W)3>fDEo>C8F**#XOO@^4PhW*et|n>{zixW zSyXmj+WQV{T+)n*zVEeYEmaSin>CYu9}+}k+L0RHS(2uxW`+`}WOuC>q|)nZwv;}~ zp_Z3C>ly56`+H(qc&kzQa0ttcngftuEcV13&rz|L5vtQk5=FQKNuQ$%6C$Kg4#zbM z_-(xA8m;Vu!fN95q2CTCYfn#c2i!2nyoNdIT=8BmV2Y1;dCti_g@vk*h5D^r_xH0G zEpnXNJ@eLqD=%y)vCYX2GEh%rorELN54=UP{n&Xg%g(-;t&|#|R;wP(8f+f?-Q2u* z-<%sYBkZxQ`0BO`F9g5b#+{xo@9z#BZ}ZO=(VC>Tz%N*F75tu5rklF2%BIJj1gG4@U5{=y_fDKN+wqttP)$+(p z{v+FS_%KFThfi#|HXtPSw8Jt4l=AP9&^x!tyFY~lCf?FdrlaeFEZz46JFL*3+DG0B z83R}uc;uW)zfa{XP)hc~a=l{mqdme?eL|BZeJMJSNNIFcv? zY?hp9<3-cA6MaCqV>j13v7j)#h6t1L;@|Nv}5{Vql`=w$%iD-*-9D;h3*t-zdzAduJI&sOWn*&OwF}?%(5&ID8(gJRk za+ZF$wT-Twz2gm#gXJUD)vf$A#ks$oj`&&zoi*bw$#u6}X3}_!*046~Yeol+^+Y9P zuCCQ{E}=|XB7IDHMbp|6pDJIfxw6G$+C_5u@zPAhjSXbXAs}B6V6-&+zJOTQfjJY} z(Q<>`v=1xjLIwn`S)Z$G23mL+e4cmjX}+zTA4euzLkYk(@?CvwG9^IKSJa0m z32A(8bRz?h`&ckBjO=Hx-B%jP8Ms}nKjo-ghOpjKdcc`Z66M{sF*>c6k ziyR-$cvQK})7tJW$S=8B!c&|^)O1#$!jh6yhlhtS;LNqwD|PL?wzapn4~ggLifJVn z&iRY5+^vJemPYsO{*>C5`R~?skpq)J$;H6Si@$>gWYfw?LNQ_FyANG#o<}fEB?*+d z;5GbR!xy44pST-*v!ti2k%}A)JC~J3;xrX`M88%Pt@zQObx$lm5q>GtQdI3I-kq26 zn&=_T&BHxkE6gbl@g5zb9)B>}Y=+*`EiI4WRRJL)d`_Jg!Pfhn&5x3koBOUMZZW@c zmc&=v6iEL9sF${7P7>x}Z6j{s!%@m&7nLuH>)UvW9KI6Jn5BvJe<@W-_PtyK2wG!W zP;neT_5huAfN;x?5x{&fhr^(75Wvs}q9pKu!W|9>as6PdJL!71(Jh)=n_TjU%Kii_ zYd*Fk2++c-5`ejF4j4bRe;8wl7iKK%-0ybI)gO)I8ZOGu;q!AQO0PepOI zyhS^hq+~KFrFPg%kQuZ(k`kLCwv07v$)@@`35!ch%_H|$^U3aDyP< z7W#V@{72Hw42W5eVGI;nQs<}$iBjw>=+oX|-Fi(wSw50>`*bhz;lqbMFdKPCj38yT z95GuY$*z(d4>HWxF?M@B%TTlx+d6J@pt5>)PnfN zCSGj=6L8uk&l{5L8`CmQc7$ZUHzD!;9#tBZ<=tpa56#tGKK z*8*=YPyA-)R*?VR{l@HZ$6O zC_!%lTdeW4C5=Vn?N%Bp_Ln5Zx_^c4lqdxpQB-@NaE@1rcxT8I#*?#vqW9l0e8pM!pHT=v z@D48IkJK4|!yZR3JID6G%CVdx)KV1b!Q!QfS-b=@PQ{ywki_gD8BP#h3p3jAk zJFEev(eiwVhF8k0*uN&3iKS1Yb6C&ieBJR^p_ItlzVLxu8lJds z4x75qoRXaJ6VeATzL`x3B;^cK#%@kTA1zmvQ*2t}EdB+H)_(qjRxDq*Xpz#QFC@B1 z1zJvG5#s^jAE*(|Wu$X}9|$NB^y;8^zhXLzaFAHEkn>>v!L7=KnI4@$mw?DPJ{PcXbx4$nYGNz9F$_hv*-~guB>LrU(&jb*4 z`r6ukJXRl|FBbeykItnFOl{7ky1rCZRe|UogA0tV{I{03>C4}BEXYjj5Cpn?oo9?<#50@ zaCAY^Sl??%)-AD#)l)wv^REfigBcx%k zc$x5{`M@+)QBmcC8}f_jurzGgL3grk+R)py$W#H67O_>0`e|b~kTlHjSAw1ui%VIK zjN7ayTL};T2jSa%ZA8+6*;Q*0_t2|VblqJctBq6BAXn0lCtlXvutoN@@#o7OYcZ3O zzCZvKv2G_-FQa+=HI)l5bQY6+U=5hBSnR`NznGg#p}xXlU9eE5j1>F^3A_eR%)6r` z4;+%=>_p{D8YVKfx4;dC!}7)>A3TIAnGMRtv@W0k!z%E))pa1ql*o_HJtE6+#%Ov_ zWd^iZxRz5QYn^CC#}29@j|cA3_6KG=!~5ZyG4&$JYz+q3%*Jxa^Hwz1?+6H21 zp3PcTc)WykV)*He<+E07g2%dNB$@B-nJ#ls3FVDw>S|LJOG{H@%}i|14V@v*&E2toes&fVMY>FMz*Y8)X^)g)tKAvhnJ!Ws#!smAu_HG7yjfFJ)k zK8PO$mfVh%)Qtfv!(jTE6H(H%>dciKC$EOp@;y-Qouv;zS!@CxP8(L{jDt^#<+D)T z7aWfd)+pJ%f4#8*_BB_sohOmsu~Jeg%u3}r)T7pN#6Fx^`L$Alcu9G0$m`W@()y(v zFUZgoZ>YVb?QGxgFDLNT0yiYCUBl~oKh0p)$9tnO^#dL}mGx#r5w4~i64y5o5z;fI zBY>XeCr$A%RlJWeebokch{uvEu4urxMcu#_yQK+BJ{A@<`K?(lycCJ@BoX$tOq^XT z*%*iYJ&CIDd-)QECUq~G5(Zx^8`&^XqbplTdDuhRolHL*l_p9Tj10WN5fRB;*rD5d z1*ab*zSnVb`>895$i6DV)Li!jYWP79d;>Zmb!4FP3+wOaq-P4`auSjs6rGxT4%Pt7 zN+JWCN|ep2aH4VKp~?*xJ53&J(~33Yub@4Bmln@R&PzA`GfT8Bc7yhNW=gzitv1ZF zRea_jUzzHw=mUwz5Yo5X8Dc`w`Ub8w8|WIH8Y$LO7HhDmR=qjM1B`r+>o@x`;$Y?BkBO8!>HLmHh#&a{yw!@2!d($ zl*Gv!D)U|=BiCJ@!9DJm;5AH8!q1%H&c?u5TG)#XCC&6I|IU z;RM}iY`$p+e?5DEh(b-(vdv|_ zQIADM)oW17-MVgD&E?RGUOKZKdx(Rx?~^)Vv1^`Xpt^z_Dw^AdnZ>)+kE`o|eyDwH zDb7Cze=5Wxz)DWDp&e@y+w~Gd*FR>1i>TWJ3v08IA;wS?Q$eVwLn!AWh*ArccGyDj z~pC33}um0g8buD7_OwRai@ul-`ALAsJZm^rW)1pF`=(Xy>gpSE{^Ikk!hG;T-tNos8JVjGYZ2n0!e#Rk4g=u&;DL3 zgFGWY-HVp6T??WWOKCmR*oO(G0ZLuX$zp7~6>=OSp~Gkhl93wj+-le$+%(U8nYxna z7yB~(pX@Qj)S?TJfuX?)xs$EaeN<+HrOc$JYTV(-%-Td^psqrC6L|b zemP#?`LnEjp%ZGe&R$nm8Z(j}9uQx7)qx7`#K@kbrFuBSjSDfB4^%Qzjg~SHC~KR3 z;E4AqrbC}Dsrqs7qL!|Hd+XJ0kP5A2?Ib>%5tRiwJ`N5)5`;$YA0y*zzO-}79jI9h z$sqQ#2Yy>j9^e{OyreeM0DQqXA%byt$N&Sx)D;hJp|$zvBP?ZA^#lL94PZcOp0ZzA z#WB7FyyJXeDgIQ5=xEEHrqOe9;xxCk7)qKs%hjUC#m5_V+eldiSiK}w=s{2c!NHy? zQFoqK_^{y^E?+@o#y%B-&yQAhDjOj(;8diFGOGm1I)GC$vO(AZbmH?iu1^_~in97q z9n9OyeC~)|X3|r2S`g$L8-QFCC#!D2%|ciUVE|le)xPaRZt6{l*dMh%^cACazub^- zEzpLMs08=R0dB=V>s|MI!tVkFj7@m6VW7WY$^t5bk1(gd>6^DVP3(?K*6C81I@neBz%OPwEQCDgJ znJb1KMhFhmB2CK(r0w}N{crvskgQ^Oxjk9!)@M8N1FoFDg{l|tZsU2r0~`Tp>6|fd z-moQ10zX`?Xz~-cLg_$QJa2D`8={kx0thTVkjFwH;my{KuzT|c6heaEd>mGWn#=Xx zo=UQep9kUsk!tME|AG4Vsi$ZCNE%R<7$lREE&)uj7;KghOm;Bt*UxJ6C!`FvJU;&k}Z3E13tfUMZU1~=W!M@Q%rqd{6Hz;_r65Cag~Fo=8S-)n>;+*`m~XTIGZ={~{T&bKZ69}8IB zMPWImRk;}lp~gS^K0kI<5-HLAKNjGAx4PYuW$iJw1TEpS1zT%tL?Y}qfUli*2OTZd zg@a|R&z1BH*5-fog&(s3fRVboy87!H!k)oma^4D3IsfSkVThh1+rZVq!J-M<8r=PV zWX-g%zY>y_BRbW1Q~LiA{Z|nD=k;$u4ZHUP0-InMP~DlIsaI*!Y_e^WC5M$|^Blgq zTcvvDA``U9vGn}|D(%~*uEDOH7-hDBep+HK3^{KqpgJ;c-$0Q%i^|Jup?`8u@ugaE znE>BkI5p3NV@W!aFC&!EGW=yyc#w<>-tEyF@mjB~0YJ(S@cRWKy2BCPNvw8&cgdD| zEg&Q;3$3riucOzll3mOM%7?ntuTbfl(--5_;XGV}^r zq8lXjkd;+bw0BPfWO}yK?YvglHQ_^&tAm)G0P*`@^V=&{$&p|dij9bJ^t}a=aj1zC zYW@+(i;w-tY7L~(e86A^*-aD$emm(9uPO29y_oXnGz-P<CfFBK};u}Z)B>ik%I#)i!+l!8^&BXCVs=UOKJd7Z*;Kyr{^8$G? zE0il~osg{bbZ?_{-wgR=p94(q0andCHp$W6q}I8jfje-gcd_5f?rrpohiAb^X*MJ1 z@fsGypXOC6YEMY4W{5_-FCF>j?*mCk zzYwJL+B)}2S)JRR37n$p66At6cRKEC#uopXar%L4t}LNe#yu>jVkR9XrdjYc(!8E@ zXj1|I2`VUjT`QLG3sKNq0o$cJVKxfPnap}Oyf$(F#evT*4#%Kj+tiY5<9kPfT%;$T z+BN>cfEy5a(**ASfjPCseWTiWw?C98IIIrj4S0?qzm*Ldd;PI(iKsv8nVaJo+);wc zp>ITWS~)hV5tK%KZJ+F#wRmLy%8!mquuJhO4oX|zv6ZB$gG9Id2cObnB}@&pY+VjM z-5$XI{F(4~?=nfr&6?ohHTn>fL7v89@%kk@-0$t+DOgC_Ks$l@J+tBo;PtQCcpGYg zw0V)#W8m~X_;s^=8wk2*C;)l@vl$K;gGLKZOU<7J^7g>x5fd##5wiRZV4(;Z5>Eje zzVy97e!Ngd%E*?-!#XqQ{%$xD1l@ncfGc?$7%uF@9TIpUaeokLXm#Xq<_S*bOILsi zf?AHKu2e7X-Z&+FPjsQfVzq$~6NO`&O*2`q3Spld5;1oBKEV=ML*mQDHiv~^*mn~| zC+P}GzUA&?2k?bN0>@22#uy!&3@=rtonWa0>i^`$%qQt$0|rB!oTA7(}mF3qZlpiB*Mb#!#s# zHtFoY68u4NA2muUSqh;VIE{gf3ljvc9B4@j1@ zG-T4K@Yf@VR@Io)`j=TXI%6l>Ku(PkCPwl_f?ZhwKKCg|-sTfAVeaHNpH(kp%FWC8 z!k{!N{-*%kw~ZJ^um-~(3p$h->c8W+LYKS_JFVnx-|(f9yxv7X5cSx*6wJ&DmVe&^ zVbGTij2h#jiDUd)|Ik!CsVXD^z7R_g9c(KonX#PSLT}_8U1=B@wx+Akraw+#I1|NA7iNFS)eIF_x&kik#B6 z$?(Oii$p7e)JSSGw9x#yJ2N_Sd-U#Fi!wP{qPYj@v0?4eV-&rliGoH(zhzyx+gui8 zEt1)1&1mHJ7J6dZSCccJW%{u(M2^{!XkgRcI){lrH@OjMaLrUfk<)2p} z9j(wg6YNMBK2_#>#7IHRsEY#l^}FA<+iti0VDOUec#1Nq0(4l>ByYuYaK-?v zWq{BSADi{^!?FRBQFeQwP)<(Nj^gIlx7@_PTx=#DBQi7X-8*xNYn`zqU#;xM5j^1} zY|xdyrGw>bs!~g$ztxmtXyy&lCh2*S6nA_?q!^;Az=q0;y)n)rDVeN;PSg5`8Cf<= zU(OpW%t)y>Q9q`zFG8##0om+x1lZ#fSz&7%53#TU>6xrdR14B#w2VZYL*4_|w2zz&9sSixrBX|75&mZbPF?tl_WPIB;SPRWl&3k@k|fO z5Km8t0{YYqH+x`K{>X7X%iD|RvDvpgdeRp{l7+srk><2Qe9fG&W)xj#(y7ZLEGI>0 zMamo(9{Wa#cdIW_9Aod~tP?zdySFLHvkChIS{k9uH8%G$dU@;X2N>QNuzMBxmS`Tp z=c>`%`{*9DT|!*O4s~EbWwQY-&m~x9(7Peux5ybL>V;7*Xk48d4 zm-X}%ct|I`?j~trjfk&U&{1i+wZPc{wWV3_37}b7PKO>Pa%UPFHSX5@V6Y)!782`; z3CkjuM#eqx;872eZ2vTV*eq|T{z$U0h_G5nY*5oBR!*XY(9{p|;zd%~q_Q_oyFr3k zRwh|Kw}Tr|CJ2eu3@MGT!_yztVouDMvGfXCtHUT|8M7i0{I6KkGWg2Gg?yHCOU#6Nu;SN&CQ)%XJh0#fAel(*W2TjMl#bapsbk2A!VF zh}DqzBHQQ12LR3;vBdobYSP0KGeC7!2>mmB@BGeI4JBXWisGaL_V?4rpCMi)nt%VM z6`UlR`mUB=)-ygw-B#4rjx*4i3ft43u3rg?BfYqr!19k{YnvbVImkn=#TPVfywI z(3-?#oO+n>2>Skgq^(lbqUOhftNPR}8{QMhjeJ}!6q5Ex&^Be&`908nw#epsPbQKO z57A1gHH{fV`=xxmC1_446 z*(v~L@YI=o>>4g~9E>3p0$o<`UvQ~g=4&M;2)Yp})9>CAbB?Va0EzhvNVb}eUh@a3 zUb8?$_S!fV8VHn5uLBk@su!$pks`Pi8^?iK?*QyGePw$0GK~#tPgh%_!3(o{VKm6? zd-7$-Qj(uPmB@sKft<^rkH_cs_qf4>81LGj0LlJdTZMX)zSzSC;-cBAo+E8;C=kq~ zh5wE7dIPVCX4LitdS6C2^`?ES&_Zs1Kh0Nfqfv9!$1R3A8ko4m4m0rpV$jOM%pB>) zK*BI+xsx_pIsg25dTL~&|I6I$+u2RgeClMu)ru6^kC&KeS#Lu@hAbo)iy;P~a2 z!tUg}uVua-C+y<{--8Ojn0tw>D;PhwoGiPzo{YE()1LVJxePRd&%x{P%73fpwID97 z)C%{C|HUCG{E6@J3iNsnaP#MYz&PWi-2h@b+I+h8sgPz>R<^R5-Y9en-`X^E-|Z>* z=5+TM(4Kzia*3gS@L3YX;o3n0Tz5=1IFhPb}-q&R9#Cot^nM~a{os2$DdCmr4e%g<+0H zR-Vl&EJj%f>5_>tz3Vbm_8S=^)ecek3X5jmDDaliixAGrNp~ z6AY|4tQ1FjRgSkPv8Ev|VUXw*boa(>q1#==dUKzAEh(@D`PZw^$5o4TRr$?h!e>6^}ix2lb;*vva1Z!bf(_>91=ss#S&@ z3-}e2%1ZTgH8H*SIYE9B)QXay^iJ*aHh!J)MhHh{%GY<-FyOW(Ih$7aG_FkYmi9c~ z8@E3)NPE?^-sR)utGeijn=k2SEBZmi13koNU{a6O+JNE8{gXs$5J;JxMYyHwd8m!j zg>g`;X@Kk2qZTQNUEou-`A`UdM`H{z?4F_ENZr|)>*KFEb(1H^g=k@9sc6AmU_WJQ z7PA4Q!Je6qWK$FplBqLFgTjJR_Bfml#e|IgFqG|`*`M-`%wCcQB(rAH-| z3(OFg`k{n5m-m|nb>ic_La4>I)iWh*W`A*(w-=coYcCM&H9Mwxx^wG5br`*nmsfkj=0fogz#?-n}|gT z1@X9uNEl1MbPdpA5m+#D$CNjfn>4K%P(#lTJvv>AoLAcO9%uHQ-(~6vxOhwbkN7Di2drFD4G^G{zhlZ|t5Rd_C+8KytgIw4|GI>yG0!rUYngERIW ztqBk7nAJ;J{iZeiDD#T_YF*?#_xDzRKQ8&F`9zPbKO22?7t1h8HmXZNCp%2yR(EK3 z7#+o&N^YykWl~bbGqvxken_F6$fn@`%)fQy3A)>UM@0Q%{T<6;Dy-55z@U1JwlW2fuI+r^swt>L{|C&wUmO@cQ~`7b3X zzMHxzg|k3>Ja<@xq?Ixm$2oM8u0>{DM$2%d{y(!5kbo9sGJ^%8~P?Z&D+~7Fpm&CYgOqpvHKeYv>UXxSHY9%1y zEtIO@JMw(a5uPxmTd@}KSZ=dl-UWG~FFF{vBA`?7w{}tOJE^75#?F2`3x_rg;6RVQ zlhl9!q3yc;EoDYrc@$enIJtwncn^^S0i}3*yuiEBleR?Hqeb(6OE2x0Iso)$y#7hg zHayAca9D{VXD9^GkR>9@j}J$vZN-g7bzF*6;Xv+}&I$tQdEM1_FQvYqiw=oIFz&#k z)H2Yw9=g4LCpiVXF4s0^FPbkOm+8UtppiPfQj2Qe{v+ZTr9Xuci5?^Lq1sq|5q$!# zRwifvIF5Vhbe*TG3c8K9_fnE(jJ??OU1Ykc?v$nITxA8`Q=J82=A1Q@W!+=TP7nka z{-xDPrOv2zN7HWW%}-pP!-ZJjG`r$AXmfs)43C@= z3Lp~Z015VcstRq@><PXz;N+Ed$hH>J(jhEJh zS(GUJEKitKsMyC*&m9?>yEF$w7@C!Fbr6z^FCPO$1Hl;l&C?)2Lihk6(ng>k0g*0= z2*5cdi2HQ;@*!4DUENSM%;#vS^OcM{Om^<*f(v$|r^Dh7b{SmtP%!2l)O66*C0R_@ zlDSWBCvFGBP|0}LbqoL@DIXnGmGIa>T|M#b0<@uxwTOKLkdSN$_|Zzibx0lB%Mo^B zd-7!C-ca_<8`wCf*rUE96pJPU`;jD?55b>2%K;uw2Ct)bV7mwqIa>JsfUed7{PrEi zt+a6KZ(OCYMDUS{6FNvFjp{Bn_+Iw@;yU`JHTRBjYj1JI0B86T<)K^Y@ly|Qu37SO zFy>CI@_%rl%A;}c>onYfW4EGN`n}9`BtJT|qvc7ttp9#1<)1fd@G(0N^n%?8euk|I zi9At1;Z99sV@eX8j3)5C*JF4m^QKiE6{XaOOZ)Ap@`pV z7=8~r#+-cHMZ;kcp!XdpoBys_vp83x6mP%P8z@D`c=tZnwFI!$ezf(!Ml>@UJ5-?J z8~csX|J{2I1fJ~e?Vuyy5;b8gvX4AP%lifvQ;i00t}!rNvW#jWf_ID@%|c0xN-K_5 zJpn0eG;tL34yO65QZGw4GxF2||B6(@aOF7-ij}l`14OqDjoVoQPoGD}Vf0O`rv33^JE6H5>|K7Rc89^pC2c0cR8PfNfB__!p# zn~?DEGEl6=AS>suhPwLhG?2G9uk2lz0Bz~-UmJc~=l4K<>gils%uktUcH6)KlR8^% z8JWN>D*usP=8fA6=a{sg10Dl6r~q&dCp zPj?97gIVgluh}bnaX{N+dH}SyFj7aX5_I=hH4i>L3I4`5^13~uejOF7$m&b#`tvxE z?^RYcm4{muNTGsp)XqS;GnprzhIR%h|MoyTCVG;CYDwP&G(mx`z86vo-u-(+Kin%8T@>2L%r`-Fuo!?|R0BKLDQ845 zy^!?H1CPYFZ{x18f9F@2t3+ZS$7jl_=7fsX^xHhh>)d{ZY-bmG1>#@CD3Zc4Fxa{L zE*`R%ofA9oDeLA1uizY=!sFImD4^=JrHN?8BI#%AL+#&A<+yAfr=l0v%aSlSY7c!C zQhqy608QI}(@p!6>FJBfqt}k+Ug+}phWaK^(VPh*XFWgh_ARYUK9$E{0^|!?9$X4N zR_@=fBZ>uj9}^S9(T?=aIOh1r4^Q6=uroq*9k5@FC82W8qclw9-R4l_B(u-N_r?C$w`({3@^u;a#YAf1G~vV_qp%CH>pWB&Z6I(lDX zHMj@n9RnCh$Ol)ui8PWTFuY;82heWFx#geI`#s*^?G}NawodUL7JTRt8(3eve7Jnn zJgFxqyYET&gvQLTOpbc<=H9_1m}(5%^K$2`iS3h3Ziu7~wOMiO3}l7t6gn?gS+n+E zJC15OlTZ`wj?TmM?Ceow(#x87F$Dbe7l6k$*5E{wkrE=G11eNJ$S)RK3JHab-c^TP z05#}WgJIB%U*9_sk5%GsbouO>@NZ)5AmW<5WiX19kSF@P zn2Rmhw#J#yewS%S?~ZI2{n!Y&>J`r(IxL^hAwZ>0iX!dl{ggovQ*ea`>z5VO;w!4_ zH7_D_TwOvH8$%=|BrYN8+<{%ol_`GnI6+qSAubyM@yN%ZTWB?ki_8)Y4e9c|;DhcXGKiK8s-h!=L(K+U-a1VxDwB*GQw zT0^L;!Ur%ajuzwudgM(TX#o#}NSKBA5#ZczYNl&C$usS6D(W5A7q)4i9O~7Zvr;c3M>-^{;C9 zkxFgT$Cy}nY&Ng&z=!Te6+x!n%UtN@5&P=n zXMDf*Mw3Te4)(=iC54I8>Dw=Ajg%<_Uc=E&uRoXne3#GpT z;{E-ghtcidl^P0{`e|vH^2o|t8<)PCa!&8u5DGe)%2?8}uG-YUIKs@wY()p;%~LD6 zO0?6PZimHXeivQmdiAXOQ~j_R?es5d>@5cT#m^aEte-?^k!5;FT7+w=pQm!SNQ~;~ zn+~PT++ngqa7-$lgWvD0UrJzQ8aaD+XA6XguB!)8Cv zDVQ*8JbiWgcV+%w<6pjU#iO5t(S*)H^q`)Z-KY(-2IT`sok`D^&5=AHN73^>&x<`4 zGe{!9WCzPkfmHup4ysd?C#ZvGWM#k7@=9pF?9R~00yXy4A?G)`Np5CVadw`5*(O?z zbW{di%+6QdinxDnmOsrQd<4QiI)8DQ#};(LW0;DhH!O?tJJfkx)GFgSk>wVGP9HOV+fd>wT;lsZZT_CzG} zxwMm7KZptL`=K$AV2ML@!O6(%^ms3(#>dG||CTUr4T zqfJo*LDy)N0m1zS(EWfI!kRI7^@i}!XEj1 z_NL64;xGj%gUK>M9V6Ww$sm0L+tLzGDw(O6}O2q|(`%liK zY!)pn)m7u2#qJQlS>q_lXr|OpfLiMQN!O96`#@IDN~SKdMfor;o&i&MXnS^0nfx<9 zYK$}~#}+Bc|EldPqpDiibww#bN{~h=r9lt`3F#Cm=@JPk>29T!1_6*p30NwdR~_&i8qrqA<+TFo{XdrSr7HUc8rVtMz2e zQ_@l`9|=c>S?2KA7yU*Yzh{Hy^{UUoKWdW79R(IXf|h7bwJstef)f-Ry!NZOTy&hI zSmNU1)q<0t)skePfStzV?`StgGTA#XiI3bfvMX6xXUyZixwxHHJaZ?icNo9Zq;)r? z?y>G{Nxi+dutuEiS|51?-sW?>&m^Hr864gZsJ%Ixz7HAi(AcWK4;~b=c|NNyX)>dy zH&I{b@$tpyg;4f6?vBM5zgyOG{#cGw$}+sWods`U`z!DQ+m`t-8D>IGXS^-YZH@e> zliUQVxwg^8#b9Uoa$cIRQR=VB%d$^zfePE|@imWA$(`GEp(PyfY$Lk2;$XU_KFH42 zWM0Yel4t3)kB5ci;xso(H(lMkZSC!Q*N**b>TuNTAq@`@%NlSK$+Mp4`7*J`fMM!3 zp(=yn$&ewZMGMl!NOCc9b}1nw-qoM)JXISj z&@qL8@WV@Ox1-HhS=>*bCc(ci3TcMfvrB*{5Nq3y;o*%vuG_~jPXFfJCGY;O-{6Zu z?JU|lKT1}wrOi)TS~;nweEXSRUK@97r|3xHaQjEp+|u5rFSweOj@ znex80jJ6fos(;QhV1T)C?vcH`&pYuuTby7$D&^J_VV($A!^!kg(DMs?)BOIhcfhFGT0u2 z($;VqjKKRs=_sH14KSS{2J1HFfXn`J^~%n8u@9)}Havq(gunyk;;Ev}On3(9Wfkn% z7aEBA;qGpwTZFsNsa9m|XL12+!Bwb$PX^mgOq;EZO>wR0CXjJ!;PzVTD?!jCkURiK zYhk6x>$*q9X@7&96#tRGQUZgv&u~Y4n9>udM9YNEPKg}5JO@?ENM?cYB1wl1z&TlIqkHo zYfte%ahVhHWgME2b$`1*eeZ0ea92+rcN5jbd(q$Ra0ZRo<{u$Q0m&jz>1g;$-9)SlO~@b0EF4-Geo$pEoH~uo8fH1 zuR{zv{F`zi&oVg5({%!qKL{ntb?9Tpo~TgXoqv2Coh?uceMT`&!Up*oE6Z{dRz6lB zdA87}8HX{Q1MmZseiBV+dZc@8mv}!{BzLqXQT=KkGso56?8`oVwo;OSLVfN){%@Lf# zp!qNt1_PI?_#^kzhO2YIr*T5=$e~=klV|w35@`|fKCdRK?dU?tpG3+(9vU8A15Plr z|LJ+K2woTLru@f5vnTBSV9vDobvMnj7ySA@oWfg&x^(XY#0E<$M(o|cji-2uDG$?! zVs_Qjq@U*x=r-gNZsN!3zyD=8moeA-HS&f1eo4H>rUY5)+V7^Y;k^0MI@AndXDTyX z6OIj<>|`;~*E+~;pHp+RD{{W3Y#fQ$&)??P7O!e{zUbrIvHmmu=@YRos{W7CJ@1|L z4?3+>Bko&J!tGKNM@sd!v89Aw$NvLX)tfLRLo>;7p}GC1Ag8_fywnpre0I2DI#p%k z8T;+m2d1hhX5{pC1NAaa)EDX4hY6 zoo|&88U^Nj1R7D-@+00)hjvT0jH#(FC!QkB;WdR)=vvGHVY~TMIyTnc&6lIy7UwBS zDZ;y{jY>kpYO+}iZ5>}d-ngB)|5~v(I%fJgn$OUga<`Wu<3foEv#M--U~MrVm?c56 z-0T`^q;TEW)9Hz8!XMljb#dOEf^lmwT1~gBA4qFQc2G(5#_r(7pBy(_>1^@N2UAA{ ztu`ZK4+<3*NbB`>$3XSjS&2L3+z&pQpA?mijRJvsJoSNAoMLb0;5j!ZbzO{^nmks= zF>ZEgB$zX%MX#~p&z2RZ{i?zYq4L0|N5Uig+H2T3+iMQ5Ga?sq zy;xJT-0l3a>pn8t>Ym?mjXM@pZjAh^0u%U{-*rzNP0Ws-8rw>Wr%rRowG6ewh|$>0^<|TJA+z(S zln}x^#YDEC!ZHViCFH%^621QLL~{Z4qQT=Ht4gcS|`P8S^md6)pQc zA`!|iw3%9AX@N5I{(_^M;obOsvv^|RV!RM0N0byQya4V%XOJl}M;-d!Hhq|`8oYd9 z>+IkUmlJux3nG9TsP*4V<*yo#qqGuVc9f&f2M^Cv<}wZGZQ{~4x!K={DEFmj6ldf_ z@3w&jSn0->jGZudd5Qdp~wHuUoDoy@GL2kM7Kqe$krjd263`nKb>W*0qvk0*Dm zdLI#uxHbr_CNV4cYHDgD-xu#WP8;Bd8J(8A9<={+Drk9YzZRs;AFFlms5(09sE}&s z4h7BSb6NM7meent=SND6&KEMEpP@wZShqG~GIE}NPInvsTa2Wa-CND~4{*?w zLO92@b2((9{Wb0O7S)uM>w?NA&;dl8Y~lDVzn>m;={laZjEeC3h>m4JeLL{iB&so) zZ@Av?%eI5@nvPCsxtg4F70z$72bzT~`gQ}w{NkG;tC_wEr|iPnm_XI|N4;SUP)i%E zeN-2!biXh8(DeCdjnrF)<`h3Ca$l#e?@nlA7ye8m3sw+#ti`@HeNH{QGd}OgK^kRP zdDEd~-t0lzFlzri%Ih6}E)nPAgGMD+!)cmDYhDxEv95#FWJz-!2Y>Ue<(Tm4`E;qY zq-h;tlkGrWjN2z?#kCZ=iEeM-f1VwcaIVzm*Ki+VaTc)QA!ssp$nU1bw#w&mUd6hb zNBGK8(qeK(IjbRq@}Zpgu9=x)YlASu3-Z_7MGt)MKf__o2pD_%UEfJ5R+`hU^SdTj zv_cm{g@R&rNEs=X5v`b1oJ5K^aDCa>h33blEgPg|syW&sLt?I&GvD>w<_}p23V7>O z$8I8q4bm4%wt?99bQ_Or9X*s$b8j9t>vRgJU!nGh@A^OL!DdYh7~_|9%u0OVm?R~S z<&h(&Kc-)5_f2Pj_lNB3u!>{v0R*@c+cYyp8TyLK_Cy94uMl)x)4)AP=fs?rTnSQs zQgw8dQsW(FTV9rrpLh~9%X9v$8VT<}WIONLvZyBAqzN;RqwIdrugm0W^JVqq@9^m*Q#OEm;%*cgZm3zA!YT4IyUt#;(pO z^W_b|x##GW1R@E?9T-fWNdOTz;LKCkxf>bQqQ%gX%Uc(5Nue8L=xi?Tc%;ee;fk_z zZmDx6&-(KwR?Iw>W_r`sZaXrFl#+|~24p@LYvR?$+Sm9d-96)6D|4_j+Ly^w&XXXy zeZTwd(YJr2xVkS03CZ4K*VGX=9bEt_&RtorKN~N}Hm%IcRh5m*On^^Xx#T}T+FEc) z`clkLL8T63A@!XI)Wk^w+m8flar5~Ern`W%TeJkQ1EL*wTw->N4Yef|6?N8+0|=1Y zmv+s(H+MhGVUej)Xo%zFdA{8!3)|ocO%gc%$s42-KP{|LAZKQ3^O|E#l&1R{+Fl6v zj9$u*92KUs9j~ir{}&d^=~3YLxOxM{zCxFrM8`T55yq)?^h6$3h>AboxPsdK?ckA}_T5NXaklUt6TpV&Ppx0+2-dhucn zFrZbD#}qLfsnnJYE)y7q6EkESWj5mHu?S3y_^N5+Gy~LfIF;ocj~E#lem+ALrFPh~ zHvV(<$@^`ToLYcbNJ^@lV-&SF_oh&fUf^^wMaPg`OHyv>xImkQ4-2_z;Nvw0sv)7! z$ViDVQ`N_2ClHxt3Ll2q9l(I2W|;||#cX{dA+x#=BA89X8H3dsVH=ZXIqtvl7FuX@ut#jF*+IQL<7Y6>qK~RD-87k@d8yJ}h zG5^5J*e`bCT`~jp$pV4@)nBe)l2osqpp03I@$Gqfn-C@eQWM7As z+yfJ$12|4k<4+zxap5Gn73oBo@?0yHt?~hZ6 z2hYLP^m^WZa}$JIU;mRE%YaPCA*dXX0cIf?Ybu&=|Q{xbzzKZ38V5{&8w8(rTEooW#LjjI&gscCcE&T_4JNwAUtl>9tD5V;SA30{ zVlpQ(B4WNC2M=d3-+TPpzmZ^BdumyQq4OJ2heoV>0xknW*(0hZvRl~x~+TOw2Ku2{iB({R8|u+S-a0X3EWDXOG`9U4WnC%)=7aT)Km|yiPp5<^`T< z|3P|doJ91C@OLCYdqq1Tj=Cm-IVk!UQt^~QpO3idrZ8`gmv|e^SySMx@&g2 z6m9p$AJRVnPa*8Cz?4rBe=fmEymE06 zkMHL~@yB<3dPmTaP%U3+d}I}E^G8(6qJ=m4>-zbth>wbg_!@DQ?B8Bj2`Ox* z8=qY8k>zb?uHIVV7u0_)yQ`S~pkv+k6>SR{;bvEU{9G?1^9pgxCA0XZr~8JUOpuj& z7MD7u0j9BXK5%P>fh5^~q1!~Qla;3c@-nCd#ME?M?h6`o#H~U{;exOh@h$)HR&avu zn2niol0JzF8VBy!IfQg<*9hti55Tmy$KuO5gOKAocCgIliM(n4E$-g(h;%T#Zm*k( z*%==n-^F?YsJrQY0jMUkhj__d{x@hGqqwsvA1;0cG$(UmQDea{Gg3bckGnLUW#NC;moLJ`WT;o)>+eOwGueoOP6+_l5dA;RFe)o>Fg%BZe z6q~iA$A4ln52@$R4<{PvE0=fdnvIUoa&-AGPZs#O&|2rQCPE7XIU9FWayhd}bo+(P zB{7+xGJ2c>yZZ%&Zr85rGvTJ!^$@x|fV=2^5@E})(Au?{ky(6L$FIC>~9Rz_Ek;EVud(7)w#<)`7*iWqPyFN-V-+V`(a%;N*f^3!<(OUg+uGBT;{tAK z%H1cZBW1ZX*eqxs)f@{{(sQ7%*7Yf{Mavp~%m>c$A?s94TU)Q?Nnhj){t(I$w1Bo> zPlZS69-ulI6Ef(`bmHF6_tT=UwR0Noot>7gUaB5>R804cYdK%W;itz>Pv$QLUMp(d ztQ88eA5G47Glf5rstt}v;Wpm{XnMO2^@QT^ zymWjRVCimk<4z3d!d%I}32u?g1V@g?OdVVxKlm<&~(TO6IRFbqPNjrq2 zxujeg*-Aw{zgk&2ebEV27Fh2D__R(dKYtP;4NE-`PLV>kdS+zYCr4O&x^y~1_Z8>c zljY|hxKus7%N^wjr_Y*pl+DVApHSRh+al}BR4=`dK%WOyPV!CNc*%6(7VJV&*M*n}$x+RjB#LL^0*x<@_EPQJ6;9F6-W@u5Q@1P*zssAYsC}#P^-h?*XRYLtkmv zDT$|!rGm7DrNMq`&llGO6Yb!r5nwl%BXGdrS%tj5UhXJRL#rzv$w;x;2d zf6p#&=e)8G6@_UzsncBrGK#Hjp|p0AizjtPZK{kMOdBRF_q)tK%|`S13_KjSVZEA9}0VhjFZZIZ~=zIc3VEazU(G_iqfbm948CC$O=%4FBJ^-xv)*Mn{q zjZ)@a?zU=yAidYIwsQ<2= zW3nIHe)61+ZT7iVDE*!51;pXP{qoz-T)$4yjCdn-8j}wZf+7~%hW9cU*X6Pzhx1LW zQ>hY#pB*tT^~ewrtsMGgrw+TmjA3N)ol_CBWAeFRxbdodSyB4^P&EBhOTCsqRDMP6 ziVBUDH7B^)Zd$8mOr%kSn=E+OK`ERf;NoUtd?Ys!my53bk%XyKja4OMcs1KVTat9Z z_1d)E4*{gMZMO5$wI!q4wK1RWE;V0a$ze(ROuqh|W;HConismdatKuz&;x4jO7938 zKz);zoxQBsa02i!4LU;OzAt~sA%}jnOhj&Q^BqNL;l@{mxW$aCWv}~t)V4c1YFBbk zb&_rPnlUo`2pQQKu&p9_>X5qn)h5^^Bphke*pa7rQpEN8)sU?Qm^ht{KrZBe9p>B3 z30L0A01WJisJh8TZ*&i22l-XGY5ZEdYW9(_E%Mp8?`MrmEsrVsGJf_rm6l@SYJK9( z7MOlq^5}lYC(^@GKTPnLGXhH$0-h0ZRG)XOwVND&NBubCB-8Lit$bBoD+BMN7LWs4 zj2xTDNmbFI^9X2b-4P(4xu}!zR@<`67thyKD^SZo_8!ar{)`}ioAUIuVc$Y~Qv+)s zjQ|;aMkKa{4F9@!r4ady-kdeBdZ(w;F5l-`8`kNHUypgOqV`P}>1a&PKCB&dx2u_S zHQguIdOI#&`Tf;e%j$AH_wX|s-PA%lkLMeO8uC|nkFCxcnyw^c9cqJJE7vI$Hd70> zpYK>CKYMxgzO6tvH^m&SJZ%&wG@Y*f*z93(&@6>{^|wK~!{dC$-P+@JGAjj$fy#!) ztpkuQ#3Hf?5G-Owdiw7FP9xGx+jLNDzs3b2r6*r9$}e~nZ>~Rh@IXmc_SW;yobSQw zp}1t8=&hDJ7Ct?i()Id@fosr21pmW~o{C+-5IAwQ4i(R*ku`8tg))u|j%(C7(JKX0|W?ctX>ums9WE z3ZPl4)@dgbFw*Bt`7d(#4`h?U>oMFN&14EJsr~6v>@f6nnLzf0vZiLY$n89>%Dz8m zpf-!tEzE)nx6%R3R!A4r&=&0!0C)o?iZ;1TkP)uJjF|1HCHUvy#f;n(^=+iVkaNAA znQsInB+>xJC~K$XKqQ;y7QahQt`YbPVkic|JJh+o`5zL@k)yVEja}Dt?*#&0-u3M1 z>`X?%BrKZqui}oYlaGPwvb&cTh#rEa<>es=ba1)6x;z&A3?9jR^IenBiLkHt4=Z0PbuyOY-p7qg5R2g8X<~zw2?j>R-k&NS;LiM8 z3SK)KfIo@F9!tFi-Sb6wn-eAymz4+2O|(56XYudKvb^{XAv^2$-_+i>Pm>b;5 zxQ)}e&GO8)$L8+-yCC<4^YWBhwpE$Ls6Q*NTGWtIKF7Qcv4a}P!crnUAl^*Ez{Few zygE{0p|$?Al?J!9VJeV`SPW|<7UDV0-%?EQ$bo$M(IOnb%(Q}^BgoaNxe|7tq`*ouI%AP zK#Bmxtf1=weaGYV8%OV~{Ey-4)1#_~6^UmszW*CFdz7`j~wQx=~$J?|j&uA&tFD zVAWO;BU|oE>>*KoyV?qpSDmfL;ABJSMvw286g2LSzcUHw30j($%boP^L~5*qrZ8*& zu~?I^p^SQjmCes9xf}mQrfdp)aU$CuwsMPAH84BCLTe4eJzqJIjxzk)$A-E?r8+bP zlWVK6xt!C&&9?b+@~7z+ib|UBbbQ$!an>E%v6uH@F60qs16yV$HJ?^jiu4nXloXpP z?fVvnEyncb;=dV|9?RG?`8Fos8rPbf`6c{1C+?aPh-P9jR(`0kr{p}q!SZXFUyRhx z>Fj0tYTezp71=7{By^5z@@7c(?SLqY22X~y-|rI;0qX}S-6_B=6*p5GX5@kPhBctv z^wjXZaq)aW|Eqe=YiLPT@_WYm-zw98ylsOhfzqugBXw*~J7~iAo8vTqmm7r+uDgP2 zQCm2)&MbsMlT=?2^jq)c$!b~{tb!hHU^Apt9~cJ!K*W2~w1 zreyP}J%uD8{y#Q#Z|kSrgX?E(y*V%$*LPF9uXEJk_nV0Rne3h|t)R5Rw8>UA7s4j8 zG*R)Xy8atP9bk34PU7__@5U%~&W)uWU6-Xhe|LjWDwp!NL!~6!@$Iot9#S+hE|xc+_50D+pY-+_$KlZvV#^M`01T2x0$&AV=!ik4TYV zbp=LvQ?G?eVoDUbaE>U8X=u)x(Ob=UKoNkP`|LC@fb2`Cb2NF&Y~TXZb4^rXRC~j zcHv&%rD*gs!%or@($aY=npcxwj$}zcrT9`o^$iGTboX%`grK3VlMzmtGSM8a!QK+A zR~MvFsI^d7D?T*zCtptq{#s3iZG~&i`$iYLP`5B`s8{QxzPiDwnm}c@B1DnnDWkZ{ zlHn-R2W}CLI?pH38NP=vB1Ny1f(E`fO6P6_s1J9xE#!)m&&XUi6gQPZE#PLmtfOe936xuEzASA(U^L!@idmCWgm`9BXZ5xW4T`Q{Y;U zTSSx34CTwLkfZ~wr|c8{n9&1a-qN0)6+pHNJ`g-d)r%$T(@#S$LS3P z=5(({yi1a9TGmaS2LsPNEK?neWn8k_9~8EVJgYD+iK@L6s;KqjPnew7(X!EgWnZZL z;c-{Ll^t>jYq-H7O6-{c6DxX3z(o+|^%#94%FojffaRkW!YOvJ^OB}XE7FQ8zK7sp z&;25qgr|RQJRv9i5WLwMfhuewHNqn*g+BAp$(j9RGoVFq06{U9=r?9_4J{T#nQDG9 z{YW@{GRh>w{8;n%3IkzvuG1G=HT7#Z_-F@w9}Ssme^HkC5L406n+WO7ALvp}sQ>_} ze~8A5!B$Hb-mni(OZVlBh)9@MVJM9r1Z~7S8Z6d;vAjD0W3ewZWLR20E@G192Z!U< zJM-2Na9~@7lj(6r1ZkPDq$doKcQf?N@9E#$JbBBP{0^pdoxv@PyTLK!8j88)?DVA* zYaQRR);3r=On-((DgPoByXBhMRubhV-N4x`g>HKXM;MnFZU>D@sl0W#IoLz$J*PHe zJ2UCOI~VS<@_(-!^fzI3-jmHu_`V9Fh^r)qiN>BH9Yc3%FZ*k*lS_EMhD<@Fu~NT` zU``B2E#Ht{q?AuQKHbwSL8qr;a#@K=O6`jF_H)-4ycLM{Kp-Z^e?&YhU$x#nw=IS& z_RQ|%c|-`^ff*S)Jw01CZZ489vwX&r&G8?EBliP}o_~-^1!!O*6UIPbY(^e%E+u!9 zud2t%aLC`Mdb`hFMyI$z zZ@FhE`fnLajDR^udI`Nz07M0aKZ6Wi;$lFH4U@rC1>Yv387}oE}~-hQ?w2 zjsbJPs)#}Rg9?fsVHxw0j{B-0b}82q10Y8Je@_HGu@N)lS6>J;#pF zV}%ZEFQPGV69tSImNbLo*}}l-_xPfso7dG6nn>cr?*GuQoXo*cc}cag*38>go9yL4 zT;|{1m&<6P(>%Igow=#2O0@SZzszimA(Sa^CR$v4sp3PYuc9PP&Hd6wfd)y8Hc8a# z>cD};{+ljv@ajeo&!9fk?@L6_%kW;Wr^$z~!@16m~boSur%aR@GSOxHXGrpR8T3RhrzWmZu zt|?d(`s!gGqx!c5HI?rY%2OSUMaxNw0x@bbOxlWmhv%hT%Ml&oTCj4d6vQfOLD#&NC{p;+gh2Nb6X-sTU8e69QqZX3vYU zQvQCjVi&$T(yS=^-@ns?-hWl}BpSyBGbH^yk4dj3TbAHuReXsY8(oNmq<~wUl&NVf zs#~cqp~U?0?C_x5wm2RBhi{9w&Gs+$9SCc!-(xU$>#@$#ziZ%Uj>*S6`%q|8+V`C` zFKd6D$#B#JskK0Nvc&6pQNL3Hz4eOC70>oJ`Pxje+BA$mkA6v$`OjvgV9S;0di`;5 z1?uN3#FAbf7J3!;xPoXN&JiBwi;*@RFfgdnlp*DA3<*j!AGqwG*nZ!7Od^nR^bdQ+wfa$#{?Eo*t( zYo^rv$;=m)p!OUk{VKmx{V{=`cRc=n*+UGklXsyr9%0mu9U*Ct*+z6X>nql{G(GIg zso(V2b!K8e%%uwCy#MKTU4m*M^JdCRdYcx$kK?AC_vJj}sj(v2RN}t5bF-ZNp|7pE za~`$2d348R3OirqYR|q%j^NFb%t!(IV7x3>joCH4T96H&0e;lrl!I`I3ai<^>j)L~ zf5-35g#UrxOUC`)ZmbLsjzj^nEa9mKYI6EOhU7oz z$NL6>(?XOO?4B3SHIS&Z26>a|5Wl}`uz5Z*q6|p{b6D3kwcb~@Jj3QNOt1aI1{Q(7 zghUnIxR}W)$?iQbQ&m)n!I6v{P`HX0G6hDQPEvZDf+3{+1$$MCgip?LJ zm^!Q7597;`{9w@#QhE- z;Sg9szrq)N1S%8GAfre_p*g}&&zBG63Y!16VIoo}UfpyeOmznUZ+TqKIQJ=(`geM8x>RNcW4wNyF+>A-tZ9{xUf?a`EK&L(8jb&YRuxwnJU$uX>+Wvx)!JKfDmN0$ax42K^_fVszTN%s5V((-nx#mdD>T8HZJc(^)5b`=xiAjMguyE^eg! zejhG0LPM7C?Xkiz4zizTWZaDRmE!rRp48n#a?nO?j3eu#wRTj!ldD#^yi~;B7ua0B z=ue66O*ujoNG*m%>Snf@a}U?Gv*s5EzxFGBPXM(%M7bDhff~0QF*(2Dc?0zsj}|O^ zt65m0_1dpO-tcO_P6>@iRo(b>atC}0*m7*tqzHO;_mof={~r4P zV8yiK!e|u@r%-K5=G*K!-CwagBEml)_I0tNT|@>A(fLb64E+hE&@~D#{@{a3L<_R?>&KIB_pkiu4=F^+~`3za)cK9%4B15fG_O0rAd_ z-$C72jJWH>$dw@HaQrVuN=`Z77b55hiU|%sG!9_vT(v?K74U< zEP$gC&!SZ^0LpyrwBuHzu&OGazV+7j_QwNsc*w%Iz5{5fn7?Gdl`xKA1uBVMUu3jf zAP+knHKSVEZDtK9F9@|(Zd&-_dDgXKPHE;5+dcFnxp&6*<6N7RgrSPH zMl(MD(Jdu6@6*ee4k-}_!*sUJA9J!zcDLbWkcG2Z9p8WQ-BFH;G!n7C*~N%eFYK7k znuAe!t~E33en*T(AwUj(3>P^iGdY*+LCPtf5;mL23~}}9#&Qy`Lr!E+uD9jA%NWUV zUIqquGY|LhNN^pR>7@|=IQ*8;Z6$9aFzxC7r)lrcyS{t%J!x5wWj-Vel?%!~z(-3G zp!=^sKLs{(Z64C{eFYb!#ODf;x1x!ZosMcY3hdazPQe!XYwVRv9d`NVUFW%Xl%5!f zUp3L?9J75P($oA?s;xzYwI%3{tfS-Ou{2S)Mp#H%WAT(t-T1Vk5k+Lgw9D_yZZ?r3 zM_!YbOqlfdfQ`P?5g#jruwFZ~hy0eSnYi8xFN%XIdZsRD8&%E-Uj%RyOHt^;>rf>K zYbX%QBw4&hp&|yEFiC(F=F*v2dAOZ3%HOx4Ik%pgMl9o+%AZY%jLB0=uQxCNFd1d=$Jo zF=ci2PQEmFG+>=pA}$a3L#keyqA6+-QDRu2Kbb8^46=d8#iwQ~zWRF~KzUG%yeyq0~cY)d(z=E5BG)&HKxA`~WW(gSIowlcrE3In{`WCVTMwvl!4kdzufX z!ZJQ@rdbPyHj-J@3ByokH%5CG!XH>PN?QN8SKX83`YCBketLDBHE6P$Rg+eC#0nct(fwziQ5FE7`v^0AAjS7BZkK8RMHeyj1Kck;N5Y_uS4Uv@K`QqlW!Pf`p^iyFpZzZH4Pxm^a z){s9DS|mAbeu-7$-aKB&esGTNdv3GX<&Q;X0*zGek#o}O6wlKDd#rfZ8u%{=<&vbwrwh9mvRpCo>fmAlAI@ z3xqfHhApY*c-}*L5_%C89zN#|tke=uPSexKg-%F)6EOxNDzPV)%_)?az1amGJON8i zz)8O91O?p5o;W;!)<7bc3G)}4Ta-u)tbG+Af}mC*=}<&6m{=IW(o+0kaJwj0LwYRd1^b$20!aTqh zd;)x3NdrGIpChx5P1~K3dJnftYDA*(DaQg7c;0oylGF2^g*y!AoAHP1!&x}}Q3hYn zJdhW8l!QiZ{mO^R=+v~dHRzc_cmb>Z0^R9QX5dOud5ixJ0^V%3n_{ic3s7T?V=tdc83tGi!U!!dLdm($dlagkSS1M?{RNs4Lp)#Z6&u4=w5#Ocjed;W1?jj0N8b2!tu3Et`ygcIaGq4msskE3}PT(;5@Q8(_S3^Nz?iO9nguF9$#}CMK zS>(5#d%F*1HP+Z99IbIlNp~NgBTRJ*3&>aXatS>1NnkFU>hV1DUy2 z0rrZ;V!CGZ6gK$0<(m0+KTC`*5Vw=jEt)5x*B>>f$%s}_JcGMrFk+F2^V+9r?#*y! z2sjA3`UEdeT1fhY5`-I1<>nM<7U{hH`^12UBr`2UIR3pQmzjv|V*Kmo%tDIyf4xorzx^mDC5>cg zIz$uEnVj1L?`}oAQL(TMeFw zDDO8Q;&SLcJ{>(PYr){`6}Seo02;l3Cx4C(Ve<*3T`)o9N$FtaGkB^J{eAaT{-b93 z`{p4MG#QzhB|Vd$KE}ihd81&i0%ck7+Z<7sdc;AGSk-{niMPr0VzvdLTSb<^#xyK5-af7#SKW zfZqRbYciIQReM#p12NRX5S{tNZh3cu{guuoHC7NIODecBqq+?BxqmqEv0MGf)8Mq2 z;Qa9ZeF{h~1|g#<_hJ)(7u7dic_@&x>Gui$2D*YLHMn?q!m#+rfLqnrAO5E|S`noO zy19Rt(Y+O3{ylpm5fD5O?s+ngMrhp=!(vc;3Lz$AraCwR2e{J+za{*_5MomS4+c)C zfIEYOVFCcaej~rqmUa#dWb;c@_Ee7%2+k<=TjZUpQQv%Sji zKmA^pQ7G=PtGOs3va|)GbKNqn|2aTgZ5j9r3d3TY{h`c$Vg2OR2b~f{&kUK z^Cb3>vY`E5t<7r?Hidh5G&QQV1{HY&+$<*`TvU>Rvc$YLvHr&Rg+*YDYW5?im~Z9L_+6u9Jk{FlCy^{OiJa2lb{!QrZok-`wsZ&q256 zw-}!)(Rx*sKC|cKa*Ns^oREUV)eMAVB}*>xq&x}2GuDRA(t!Ofvz+EFbg|aOvlv*j zS60K-5#nqna@Q5R|8RF3jEY}5Pq17J>r~;J%J6rTQ$WLIuUgBDcb=O7v4=*d@TzI~ z%*$N3_MRdxo!q^BMe zg*0yPAl*L_04peSd&HymqZ8i3aumybII8nYdkEtI0Kh>x%fh!Dem9#nO_|;k%KI&ChPku z1OdyO>Y{tWb&x669SQe5bcgF1-@}=nI&OZNC2dSf{?!7XuCJF9Cj8H&Hva+@xG+f@ z{^$RqBY+6}NfD<(+%FM-`ELXIUnqk3t^dD2`c9MM>RzmccDAl-U+*>ePg-0~tUyH1 G`+ot6K&}@6 diff --git a/bench_out/pyprocess/perfile_duration_hist.png b/bench_out/pyprocess/perfile_duration_hist.png deleted file mode 100644 index 7ab94a1cd7ff8fff70b9a11869ff7860cd22641d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31798 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

      {4=Yqw>e(hL%W@dEI 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 YFW&x>%pCO4g107cr&`v3p{ diff --git a/bench_out/pyprocess/throughput_max_workers.png b/bench_out/pyprocess/throughput_max_workers.png deleted file mode 100644 index 89e98e510e272ac924b1c31931e5bb9cfadf671a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32060 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 diff --git a/dask-tests/plot.py b/dask-tests/plot.py deleted file mode 100644 index 3443a2b..0000000 --- a/dask-tests/plot.py +++ /dev/null @@ -1,57 +0,0 @@ -import pandas as pd -import matplotlib.pyplot as plt -import numpy as np - -df = pd.read_csv("test.csv") - -# Convert max_workers to numeric (handles empty strings as NaN) -df["max_workers"] = pd.to_numeric(df["max_workers"], errors="coerce") -df["n_workers"] = pd.to_numeric(df["n_workers"], errors="coerce") -df["threads_per_worker"] = pd.to_numeric(df["threads_per_worker"], errors="coerce") - -# compute total_cores (for dask rows) -df["total_cores"] = df.apply(lambda r: (r.n_workers * r.threads_per_worker) if r.mode=="dask" else r.max_workers, axis=1) - -# Get baseline: processor with max_workers==1 -baseline_rows = df[(df.mode=="processor") & (df.max_workers==1)] -if baseline_rows.empty: - # Fallback: use the slowest time as baseline - print("Warning: No processor row with max_workers==1 found. Using slowest time as baseline.") - baseline = df["avg_time_s"].max() -else: - baseline = baseline_rows["avg_time_s"].iloc[0] - -df["speedup"] = baseline / df["avg_time_s"] - -# Create a label for each row to describe the configuration -def row_label(r): - if r.mode == "processor": - return f"Processor (mw={int(r.max_workers)})" - else: - nw = int(r.n_workers) if pd.notna(r.n_workers) else "?" - tpw = int(r.threads_per_worker) if pd.notna(r.threads_per_worker) else "?" - return f"Dask (nw={nw}, tpw={tpw})" - -df["label"] = df.apply(row_label, axis=1) - -# plot avg time -fig, ax = plt.subplots(figsize=(10, 6)) -ax.bar(df["label"], df["avg_time_s"]) -ax.set_ylabel("Average Time (s)") -ax.set_xlabel("Configuration") -ax.set_title("Average Runtime by Configuration") -plt.xticks(rotation=45, ha='right') -fig.tight_layout() -plt.savefig("avg_time.png") -plt.close() - -# plot speedup vs cores -fig, ax = plt.subplots(figsize=(10, 6)) -ax.scatter(df["total_cores"], df["speedup"], s=100) -ax.set_xlabel("Total Cores") -ax.set_ylabel("Speedup (baseline/time)") -ax.set_title("Speedup vs Total Cores") -plt.grid(True, alpha=0.3) -fig.tight_layout() -plt.savefig("speedup_vs_cores.png") -plt.close() \ No newline at end of file diff --git a/dask-tests/run_dask_example.py b/dask-tests/run_dask_example.py deleted file mode 100644 index 14ea6ae..0000000 --- a/dask-tests/run_dask_example.py +++ /dev/null @@ -1,426 +0,0 @@ -from pyutils.dask_integration import process_files_with_dask -from pyutils.pyprocess import Processor -import logging -import time -import tempfile -import os -from typing import List, Dict, Tuple, Optional -import awkward as ak - -logging.basicConfig(level=logging.INFO) - - -def run_processor(file_list: List[str], branches: Dict, max_workers: Optional[int] = None, use_processes: bool = False) -> Tuple[Optional[ak.Array], float]: - """Run the existing Processor.process_data using a temporary file-list and return (result, elapsed_seconds).""" - # Write file list to a temporary file so Processor can read it via file_list_path - with tempfile.NamedTemporaryFile(mode="w", delete=False) as f: - for p in file_list: - f.write(p + "\n") - tmp_path = f.name - - try: - proc = Processor() - t0 = time.perf_counter() - result = proc.process_data(file_list_path=tmp_path, branches=branches, max_workers=max_workers, use_processes=use_processes) - elapsed = time.perf_counter() - t0 - return result, elapsed - finally: - try: - os.remove(tmp_path) - except Exception: - pass - - -def run_dask(file_list: List[str], branches: Dict, n_workers: int = 4, threads_per_worker: int = 1, processes: bool = False, show_progress: bool = True) -> Tuple[Optional[ak.Array], float]: - """Run the Dask-based wrapper and return (result, elapsed_seconds).""" - t0 = time.perf_counter() - result = process_files_with_dask( - file_list=file_list, - branches=branches, - n_workers=n_workers, - threads_per_worker=threads_per_worker, - processes=processes, - show_progress=show_progress, - ) - elapsed = time.perf_counter() - t0 - return result, elapsed - - -def compare_results(a: Optional[ak.Array], b: Optional[ak.Array], show_items: int = 2) -> None: - """Compare two awkward arrays (or None). Prints summary comparison. - - Comparison is shallow: checks for None, lengths, top-level fields, and prints first items. - """ - if a is None and b is None: - print("Both results are None") - return - if a is None: - print("Processor result is None; Dask returned data") - return - if b is None: - print("Dask result is None; Processor returned data") - return - - try: - la = len(a) - except Exception: - la = None - try: - lb = len(b) - except Exception: - lb = None - - print(f"Lengths: Processor={la}, Dask={lb}") - - try: - fa = ak.fields(a) - except Exception: - fa = None - try: - fb = ak.fields(b) - except Exception: - fb = None - - print(f"Top-level fields: Processor={fa}, Dask={fb}") - - # Print first few items for manual inspection - def _show_first(arr, n): - try: - lst = ak.to_list(arr[:n]) - return lst - except Exception: - return None - - print("First items from Processor:", _show_first(a, show_items)) - print("First items from Dask:", _show_first(b, show_items)) - - -if __name__ == "__main__": - # Parse file-list early since it's needed for all modes - import argparse - early_parser = argparse.ArgumentParser(add_help=False) - early_parser.add_argument("--file-list", type=str, required=True, help="Path to text file with list of ROOT files (one per line)") - early_parser.add_argument("--plot", action="store_true") - early_parser.add_argument("--output", type=str, default=None) - early_parser.add_argument("--benchmark", action="store_true") - early_parser.add_argument("--repeat", type=int, default=1) - early_parser.add_argument("--dry-run", action="store_true") - early_args = early_parser.parse_args() - - # Read file list from file - with open(early_args.file_list, 'r') as f: - file_list = [line.strip() for line in f if line.strip()] - - branches = { - "trk": [ - "trk.nactive", - "trk.pdg", - "trk.status", - "trkqual.valid", - "trkqual.result", - "trkpid.valid", - "trkpid.result", - ] - } - - # Quick pre-parse: if user only requested plotting, handle it and exit - if early_args.plot: - csv_path = early_args.output if early_args.output is not None else None - if csv_path is None: - import glob - candidates = glob.glob("benchmark_results_*.csv") - candidates.sort(key=os.path.getmtime, reverse=True) - if candidates: - csv_path = candidates[0] - elif os.path.exists("test.csv"): - csv_path = "test.csv" - if csv_path is None: - print("No CSV provided and no benchmark_results_*.csv or test.csv found. Use --output to specify file.") - exit(1) - - # Minimal plotting (avoid importing heavy libs at module import time) - try: - import pandas as pd - import matplotlib.pyplot as plt - except Exception: - print("Plotting requires pandas and matplotlib. Install them with: pip install pandas matplotlib") - exit(1) - - df = pd.read_csv(csv_path) - df["n_workers"] = pd.to_numeric(df.get("n_workers"), errors="coerce") - df["threads_per_worker"] = pd.to_numeric(df.get("threads_per_worker"), errors="coerce") - df["max_workers"] = pd.to_numeric(df.get("max_workers"), errors="coerce") - df["avg_time_s"] = pd.to_numeric(df.get("avg_time_s"), errors="coerce") - - def total_cores(row): - if pd.notna(row.get("n_workers")) and pd.notna(row.get("threads_per_worker")): - return int(row["n_workers"] * row["threads_per_worker"]) - if pd.notna(row.get("max_workers")): - return int(row["max_workers"]) - return None - - df["total_cores"] = df.apply(total_cores, axis=1) - baseline_rows = df[(df['mode'] == "processor") & (df.max_workers == 1)] - if not baseline_rows.empty: - baseline = float(baseline_rows["avg_time_s"].iloc[0]) - else: - baseline = float(df["avg_time_s"].max()) - df["speedup"] = baseline / df["avg_time_s"] - - out_prefix = os.path.splitext(os.path.basename(csv_path))[0] - plots_dir = os.path.join(os.getcwd(), "benchmark_plots") - os.makedirs(plots_dir, exist_ok=True) - df_plot = df.dropna(subset=["total_cores", "avg_time_s"]).sort_values("total_cores") - - fig, ax = plt.subplots() - ax.bar(df_plot["total_cores"].astype(str), df_plot["avg_time_s"]) - ax.set_xlabel("Total cores") - ax.set_ylabel("Avg time (s)") - ax.set_title("Average runtime vs total cores") - fig.tight_layout() - out1 = os.path.join(plots_dir, f"{out_prefix}_avg_time.png") - fig.savefig(out1) - plt.close(fig) - print(f"Wrote {out1}") - - fig, ax = plt.subplots() - ax.plot(df_plot["total_cores"], df_plot["speedup"], marker="o") - ax.set_xlabel("Total cores") - ax.set_ylabel("Speedup (baseline/time)") - ax.set_title("Speedup vs total cores") - fig.tight_layout() - out2 = os.path.join(plots_dir, f"{out_prefix}_speedup.png") - fig.savefig(out2) - plt.close(fig) - print(f"Wrote {out2}") - - dask_df = df[df['mode'] == "dask"].dropna(subset=["n_workers", "threads_per_worker", "avg_time_s"]) - if not dask_df.empty: - pivot = dask_df.pivot_table(index="n_workers", columns="threads_per_worker", values="avg_time_s") - fig, ax = plt.subplots() - cax = ax.imshow(pivot.values, aspect="auto", origin="lower") - ax.set_xticks(range(len(pivot.columns))) - ax.set_xticklabels([str(int(x)) for x in pivot.columns]) - ax.set_yticks(range(len(pivot.index))) - ax.set_yticklabels([str(int(x)) for x in pivot.index]) - ax.set_xlabel("threads_per_worker") - ax.set_ylabel("n_workers") - ax.set_title("Dask avg time heatmap") - fig.colorbar(cax, label="avg_time_s") - out3 = os.path.join(plots_dir, f"{out_prefix}_heatmap.png") - fig.tight_layout() - fig.savefig(out3) - plt.close(fig) - print(f"Wrote {out3}") - # exit after plotting when using pre-parser - exit(0) - - print("Running Processor (local concurrent.futures)...") - p_res, p_time = run_processor(file_list, branches, max_workers=4, use_processes=False) - print(f"Processor time: {p_time:.3f}s") - - print("Running Dask wrapper...") - d_res, d_time = run_dask(file_list, branches, n_workers=4, threads_per_worker=1, processes=False, show_progress=False) - print(f"Dask time: {d_time:.3f}s") - - print("Comparing results...") - compare_results(p_res, d_res, show_items=2) - - # Benchmark mode via CLI - import argparse - - # Benchmark mode - def plot_benchmarks(csv_path: str) -> None: - try: - import pandas as pd - import matplotlib.pyplot as plt - except Exception as e: - print("Plotting requires pandas and matplotlib. Install them with: pip install pandas matplotlib") - print(f"Import error: {e}") - return - - if not os.path.exists(csv_path): - print(f"CSV file not found: {csv_path}") - return - - df = pd.read_csv(csv_path) - # Normalize numeric columns - df["n_workers"] = pd.to_numeric(df.get("n_workers"), errors="coerce") - df["threads_per_worker"] = pd.to_numeric(df.get("threads_per_worker"), errors="coerce") - df["max_workers"] = pd.to_numeric(df.get("max_workers"), errors="coerce") - df["avg_time_s"] = pd.to_numeric(df.get("avg_time_s"), errors="coerce") - - # total_cores: for dask use n_workers*threads_per_worker, else use max_workers - def total_cores(row): - if pd.notna(row.get("n_workers")) and pd.notna(row.get("threads_per_worker")): - return int(row["n_workers"] * row["threads_per_worker"]) - if pd.notna(row.get("max_workers")): - return int(row["max_workers"]) - return None - - df["total_cores"] = df.apply(total_cores, axis=1) - - # baseline: processor with max_workers==1 if available - baseline_rows = df[(df['mode'] == "processor") & (df.max_workers == 1)] - if not baseline_rows.empty: - baseline = float(baseline_rows["avg_time_s"].iloc[0]) - else: - baseline = float(df["avg_time_s"].max()) - - df["speedup"] = baseline / df["avg_time_s"] - - out_prefix = os.path.splitext(os.path.basename(csv_path))[0] - plots_dir = os.path.join(os.getcwd(), "benchmark_plots") - os.makedirs(plots_dir, exist_ok=True) - - # Avg time vs total cores - fig, ax = plt.subplots() - df_plot = df.dropna(subset=["total_cores", "avg_time_s"]).sort_values("total_cores") - ax.bar(df_plot["total_cores"].astype(str), df_plot["avg_time_s"]) - ax.set_xlabel("Total cores") - ax.set_ylabel("Avg time (s)") - ax.set_title("Average runtime vs total cores") - fig.tight_layout() - out1 = os.path.join(plots_dir, f"{out_prefix}_avg_time.png") - fig.savefig(out1) - plt.close(fig) - print(f"Wrote {out1}") - - # Speedup vs total cores - fig, ax = plt.subplots() - ax.plot(df_plot["total_cores"], df_plot["speedup"], marker="o") - ax.set_xlabel("Total cores") - ax.set_ylabel("Speedup (baseline/time)") - ax.set_title("Speedup vs total cores") - fig.tight_layout() - out2 = os.path.join(plots_dir, f"{out_prefix}_speedup.png") - fig.savefig(out2) - plt.close(fig) - print(f"Wrote {out2}") - - # Heatmap for Dask configs (n_workers x threads_per_worker) - dask_df = df[df['mode'] == "dask"].dropna(subset=["n_workers", "threads_per_worker", "avg_time_s"]) - if not dask_df.empty: - pivot = dask_df.pivot_table(index="n_workers", columns="threads_per_worker", values="avg_time_s") - fig, ax = plt.subplots() - cax = ax.imshow(pivot.values, aspect="auto", origin="lower") - ax.set_xticks(range(len(pivot.columns))) - ax.set_xticklabels([str(int(x)) for x in pivot.columns]) - ax.set_yticks(range(len(pivot.index))) - ax.set_yticklabels([str(int(x)) for x in pivot.index]) - ax.set_xlabel("threads_per_worker") - ax.set_ylabel("n_workers") - ax.set_title("Dask avg time heatmap") - fig.colorbar(cax, label="avg_time_s") - out3 = os.path.join(plots_dir, f"{out_prefix}_heatmap.png") - fig.tight_layout() - fig.savefig(out3) - plt.close(fig) - print(f"Wrote {out3}") - - # Handle plotting separately - if early_args.plot: - csv_path = early_args.output if early_args.output is not None else None - if csv_path is None: - # try to find most recent benchmark_results_*.csv - import glob - candidates = glob.glob("benchmark_results_*.csv") - candidates.sort(key=os.path.getmtime, reverse=True) - if candidates: - csv_path = candidates[0] - else: - # allow user to point at test.csv if present - if os.path.exists("test.csv"): - csv_path = "test.csv" - else: - print("No CSV provided and no benchmark_results_*.csv found. Use --output to specify file.") - csv_path = None - - if csv_path: - plot_benchmarks(csv_path) - # After plotting, exit - exit(0) - - if early_args.benchmark: - # Define a small grid of Dask configs to sweep - dask_grid = [ - (1, 1), - (2, 1), - (4, 1), - (2, 2), - ] - - print("Benchmark plan:") - for (nw, tp) in dask_grid: - print(f" Dask: n_workers={nw}, threads_per_worker={tp}") - print(f"Processor: max_workers=1..4 (threads)") - - if early_args.dry_run: - print("Dry run requested; exiting without executing benchmarks") - else: - # Run processor baseline (single run per worker setting) - proc_results = {} - for mw in [1, 2, 4]: - print(f"Running Processor with max_workers={mw}...", flush=True) - times = [] - for _ in range(early_args.repeat): - _, t = run_processor(file_list, branches, max_workers=mw, use_processes=False) - times.append(t) - proc_results[mw] = sum(times) / len(times) - print(f" avg time: {proc_results[mw]:.3f}s") - - # Run Dask grid - dask_results = {} - for (nw, tp) in dask_grid: - print(f"Running Dask n_workers={nw}, threads_per_worker={tp}...", flush=True) - times = [] - for _ in range(early_args.repeat): - _, t = run_dask(file_list, branches, n_workers=nw, threads_per_worker=tp, processes=False, show_progress=False) - times.append(t) - avg = sum(times) / len(times) - dask_results[(nw, tp)] = avg - print(f" avg time: {avg:.3f}s") - - # Summary - print("\nBenchmark summary:") - print("Processor (avg seconds):") - for k, v in proc_results.items(): - print(f" max_workers={k}: {v:.3f}s") - print("Dask (avg seconds):") - for k, v in dask_results.items(): - print(f" n_workers={k[0]}, threads_per_worker={k[1]}: {v:.3f}s") - - # Write CSV results - import csv - from datetime import datetime - - out_path = early_args.output - if out_path is None: - stamp = datetime.utcnow().strftime("%Y%m%dT%H%M%SZ") - out_path = f"benchmark_results_{stamp}.csv" - - print(f"Writing benchmark CSV to {out_path}") - with open(out_path, "w", newline="") as csvfile: - writer = csv.DictWriter(csvfile, fieldnames=["mode", "n_workers", "threads_per_worker", "max_workers", "avg_time_s", "repeat_count"]) - writer.writeheader() - # Processor rows - for k, v in proc_results.items(): - writer.writerow({ - "mode": "processor", - "n_workers": "", - "threads_per_worker": "", - "max_workers": k, - "avg_time_s": f"{v:.6f}", - "repeat_count": early_args.repeat, - }) - # Dask rows - for k, v in dask_results.items(): - writer.writerow({ - "mode": "dask", - "n_workers": k[0], - "threads_per_worker": k[1], - "max_workers": "", - "avg_time_s": f"{v:.6f}", - "repeat_count": early_args.repeat, - }) - diff --git a/dask-tests/test_dask.py b/dask-tests/test_dask.py deleted file mode 100644 index fd65b9a..0000000 --- a/dask-tests/test_dask.py +++ /dev/null @@ -1,14 +0,0 @@ -import boost_histogram as bh -from dask import delayed, compute - -@delayed -def process_file(path): - x, w = read_arrays(path) # awkward/numpy arrays - h = bh.Hist(bh.axis.Regular(100, 0, 10, name="x"), - storage=bh.storage.Weight()) - h.fill(x, weight=w) - return h - -tasks = [process_file(p) for p in paths] -partials = compute(*tasks) # list of Hist -total = sum(partials) # merge into global Hist diff --git a/scripts/benchmark_dask.py b/scripts/benchmark_dask.py deleted file mode 100644 index b002247..0000000 --- a/scripts/benchmark_dask.py +++ /dev/null @@ -1,275 +0,0 @@ -#!/usr/bin/env python3 -""" -Benchmarking script for `pyutils.dask_integration.process_files_with_dask`. - -Features: -- Sweeps `n_workers` and `threads_per_worker` values -- Toggles `processes` True/False -- Supports comparing full vs reduced `branches` -- Uses `file_list_path` (local list) -- Records per-file durations and summary metrics to CSV - -Usage examples: - python3 scripts/benchmark_dask.py --file-list files.txt --out results.csv - -Note: This script uses the `process_files_with_dask` from the `pyutils` package -so run it from the repository root where `pyutils` is importable. -""" - -import argparse -import csv -import json -import os -import time -from statistics import mean, median - -from pyutils.dask_integration import process_files_with_dask - - -def percentile(sorted_list, p): - """Calculate percentile of a sorted list.""" - if not sorted_list: - return None - k = (len(sorted_list) - 1) * (p / 100.0) - f = int(k) - c = min(f + 1, len(sorted_list) - 1) - if f == c: - return sorted_list[int(k)] - d0 = sorted_list[f] * (c - k) - d1 = sorted_list[c] * (k - f) - return d0 + d1 - - -def run_single_config(file_list, branches, n_workers, threads_per_worker, processes, out_dir, location="local", use_remote=True, verbosity=0): - """Run a single dask configuration and record timing.""" - pfx = f"nw={n_workers}_tpw={threads_per_worker}_proc={processes}_loc={location}_remote={use_remote}_branches={'reduced' if branches else 'full'}" - out_prefix = os.path.join(out_dir, pfx) - os.makedirs(out_dir, exist_ok=True) - - # Run the dask processing with timing - t0 = time.perf_counter() - result = process_files_with_dask( - file_list=file_list, - branches=branches, - n_workers=n_workers, - threads_per_worker=threads_per_worker, - processes=processes, - use_remote=use_remote, - location=location, - show_progress=False, - ) - t1 = time.perf_counter() - - total_time = t1 - t0 - - # Try to infer total event count - try: - if result is None: - n_events = 0 - else: - n_events = len(result) - except Exception: - try: - # If dict-like (branches dict), try first field - if isinstance(result, dict): - n_events = len(next(iter(result.values()))) - else: - n_events = None - except Exception: - n_events = None - - files_processed = len(file_list) - files_per_sec = files_processed / total_time if total_time > 0 else None - - summary = { - "n_workers": n_workers, - "threads_per_worker": threads_per_worker, - "processes": processes, - "location": location, - "use_remote": use_remote, - "branches_mode": "reduced" if branches else "full", - "files_processed": files_processed, - "total_time": total_time, - "files_per_sec": files_per_sec, - "total_events": n_events if isinstance(n_events, int) else 0, - } - - if verbosity > 0: - print(f" Total time: {total_time:.3f}s") - print(f" Files/sec: {files_per_sec:.2f}") - print(f" Total events: {n_events}") - - return summary - - -def main(): - parser = argparse.ArgumentParser( - description="Benchmark dask integration with various worker configurations" - ) - parser.add_argument( - "--file-list", - dest="file_list", - required=True, - help="Path to a newline-separated local file list", - ) - parser.add_argument( - "--reduced-branches", - dest="reduced_branches", - help="Comma-separated reduced branch list (e.g. trk.nactive,trk.pdg)", - default=None, - ) - parser.add_argument( - "--out", - dest="out", - help="Summary CSV output path", - default="bench_out/dask/benchmark_dask_results.csv", - ) - parser.add_argument( - "--out-dir", - dest="out_dir", - help="Directory to store per-run outputs", - default="bench_out/dask", - ) - parser.add_argument( - "--n-workers-list", - dest="nw_list", - help="Comma-separated n_workers values; default auto", - default=None, - ) - parser.add_argument( - "--threads-per-worker-list", - dest="tpw_list", - help="Comma-separated threads_per_worker values; default: 1", - default=None, - ) - parser.add_argument( - "--location", - dest="location", - help="Location/source for files (e.g., tape, cache, local)", - default="local", - ) - parser.add_argument( - "--location-list", - dest="location_list", - help="Comma-separated list of locations to sweep (overrides --location)", - default=None, - ) - parser.add_argument( - "--use-remote", - dest="use_remote", - action="store_true", - help="Enable remote file access", - ) - parser.add_argument( - "--verbosity", - dest="verbosity", - type=int, - default=1, - ) - args = parser.parse_args() - - # Read and count files - with open(args.file_list, "r") as f: - file_lines = [l.strip() for l in f if l.strip()] - n_files = len(file_lines) - print(f"Loaded {n_files} files from {args.file_list}") - - # Determine default n_workers if not specified - cpu_cnt = os.cpu_count() or 1 - if args.nw_list: - nw_values = [int(x) for x in args.nw_list.split(",")] - else: - # Default sweep: 1, 2, 4, 8, 16, 32, cpu_count, and min(2*cpu_count, n_files) - nw_values = [1, 2, 4, 8, 16, 32, cpu_cnt, min(2 * cpu_cnt, max(1, n_files))] - nw_values = sorted(set(nw_values)) - - # Determine threads_per_worker values - if args.tpw_list: - tpw_values = [int(x) for x in args.tpw_list.split(",")] - else: - tpw_values = [1] - tpw_values = sorted(set(tpw_values)) - - # Always use a reduced grouped `branches` dict - if args.reduced_branches: - lst = [b.strip() for b in args.reduced_branches.split(",") if b.strip()] - reduced_branches = {"trk": lst} if lst else None - else: - reduced_branches = { - "trk": [ - "trk.nactive", - "trk.pdg", - "trk.status", - "trkqual.valid", - "trkqual.result", - "trkpid.valid", - "trkpid.result", - ] - } - - # Prepare location sweep - if args.location_list: - locations = [l.strip() for l in args.location_list.split(",") if l.strip()] - else: - locations = [args.location] - - # Build sweep combinations - branch_options = [reduced_branches] - - combos = [] - for location in locations: - for processes in (False, True): - for branches in branch_options: - for nw in nw_values: - for tpw in tpw_values: - # Skip unreasonable combinations - total_cores = nw * tpw - if total_cores > 2 * cpu_cnt: - continue - combos.append((nw, tpw, processes, branches, location)) - - print(f"Will run {len(combos)} configurations") - print(f"CPU count: {cpu_cnt}") - print(f"n_workers values: {nw_values}") - print(f"threads_per_worker values: {tpw_values}") - print(f"processes options: False, True") - print(f"locations: {locations}") - print() - - # Run combos and collect summaries - summaries = [] - for i, (nw, tpw, processes, branches, location) in enumerate(combos, 1): - config_str = f"nw={nw}, tpw={tpw}, proc={processes}, loc={location}, remote={args.use_remote}, branches={'reduced' if branches else 'full'}" - print(f"[{i}/{len(combos)}] Running: {config_str}") - try: - s = run_single_config( - file_list=file_lines, - branches=branches, - n_workers=nw, - threads_per_worker=tpw, - processes=processes, - location=location, - use_remote=args.use_remote, - out_dir=args.out_dir, - verbosity=args.verbosity, - ) - if s: - summaries.append(s) - except Exception as e: - print(f" Error: {e}") - - # Write summary CSV - if summaries: - keys = list(summaries[0].keys()) - with open(args.out, "w", newline="") as outcsv: - writer = csv.DictWriter(outcsv, fieldnames=keys) - writer.writeheader() - for row in summaries: - writer.writerow(row) - print(f"\nDone. Wrote summary to {args.out}") - else: - print("\nNo results to write.") - - -if __name__ == "__main__": - main() diff --git a/scripts/benchmark_pydask.py b/scripts/benchmark_pydask.py deleted file mode 100644 index 2591d59..0000000 --- a/scripts/benchmark_pydask.py +++ /dev/null @@ -1,292 +0,0 @@ -#!/usr/bin/env python3 -""" -Benchmarking script for DaskProcessor with pyutils analysis pipeline. - -This script benchmarks the complete pyutils analysis workflow using DaskProcessor: -- Data processing with various worker configurations -- Selection cuts -- Vector operations -- Histogram creation - -Features: -- Sweeps n_workers and threads_per_worker values -- Toggles processes True/False -- Records execution times and event statistics to CSV -- Generates performance summary - -Usage: - python3 scripts/benchmark_pydask.py --file-list MDS3a.txt --out bench_out/pydask_results.csv - -Requirements: - - MDS3a.txt or other file list with ROOT file paths - - Mu2e environment initialized with pyutils installed -""" - -import argparse -import csv -import os -import time -from statistics import mean, median - -from pyutils.pydask import DaskProcessor -from pyutils.pyselect import Select -from pyutils.pyvector import Vector -from pyutils.pyplot import Plot -from pyutils.pylogger import Logger -import awkward as ak - - -def percentile(sorted_list, p): - """Calculate percentile of a sorted list.""" - if not sorted_list: - return None - k = (len(sorted_list) - 1) * (p / 100.0) - f = int(k) - c = min(f + 1, len(sorted_list) - 1) - if f == c: - return sorted_list[int(k)] - d0 = sorted_list[f] * (c - k) - d1 = sorted_list[c] * (k - f) - return d0 + d1 - - -def run_analysis(file_list_path, n_workers, threads_per_worker, processes, logger): - """ - Run complete pyutils analysis pipeline with DaskProcessor. - - Returns dict with timing and statistics. - """ - - branches = ["trksegs"] - - # Initialize processor - processor = DaskProcessor( - tree_path="EventNtuple/ntuple", - use_remote=True, - location="disk", - verbosity=0, - worker_verbosity=0 - ) - - # Time the complete analysis - t0 = time.perf_counter() - - try: - # 1. Process data - data = processor.process_data( - file_list_path=file_list_path, - branches=branches, - n_workers=n_workers, - threads_per_worker=threads_per_worker, - processes=processes, - show_progress=False - ) - - if data is None or len(data) == 0: - return { - "n_workers": n_workers, - "threads_per_worker": threads_per_worker, - "processes": processes, - "total_time": time.perf_counter() - t0, - "total_events": 0, - "selected_events": 0, - "efficiency": 0, - "status": "failed" - } - - total_events = len(data) - - # 2. Apply selection cuts - selector = Select(verbosity=0) - at_trkent = selector.select_surface(data=data, surface_name="TT_Front") - trkent = data[at_trkent] - selected_events = len(trkent) - efficiency = selected_events / total_events if total_events > 0 else 0 - - # 3. Compute vector operations - vector = Vector(verbosity=0) - mom_mag = vector.get_mag(branch=trkent["trksegs"], vector_name="mom") - - # 4. Create plots - plotter = Plot() - time_flat = ak.flatten(trkent["trksegs"]["time"], axis=None) - mom_mag_flat = ak.flatten(mom_mag, axis=None) - - # Create placeholder plots (no actual output files) - # plotter.plot_1D(...) - skipped for benchmark - - t1 = time.perf_counter() - total_time = t1 - t0 - - return { - "n_workers": n_workers, - "threads_per_worker": threads_per_worker, - "processes": processes, - "total_time": total_time, - "total_events": total_events, - "selected_events": selected_events, - "efficiency": efficiency, - "status": "success" - } - - except Exception as e: - logger.log(f"Analysis failed: {e}", "error") - return { - "n_workers": n_workers, - "threads_per_worker": threads_per_worker, - "processes": processes, - "total_time": time.perf_counter() - t0, - "total_events": 0, - "selected_events": 0, - "efficiency": 0, - "status": f"failed: {str(e)}" - } - - -def main(): - parser = argparse.ArgumentParser( - description="Benchmark DaskProcessor with pyutils analysis pipeline" - ) - parser.add_argument( - "--file-list", - dest="file_list", - required=True, - help="Path to file list (one ROOT file path per line)" - ) - parser.add_argument( - "--out", - dest="out", - help="Summary CSV output path", - default="bench_out/pydask/benchmark_pydask_results.csv" - ) - parser.add_argument( - "--out-dir", - dest="out_dir", - help="Directory for output files", - default="bench_out/pydask" - ) - parser.add_argument( - "--n-workers-list", - dest="nw_list", - help="Comma-separated n_workers values (default: auto-sweep)", - default=None - ) - parser.add_argument( - "--threads-per-worker-list", - dest="tpw_list", - help="Comma-separated threads_per_worker values (default: 1)", - default=None - ) - parser.add_argument( - "--verbosity", - dest="verbosity", - type=int, - default=1 - ) - args = parser.parse_args() - - # Initialize logger - logger = Logger(print_prefix="[benchmark_pydask]", verbosity=args.verbosity) - - # Create output directory - os.makedirs(args.out_dir, exist_ok=True) - - # Read file list - with open(args.file_list, 'r') as f: - file_lines = [l.strip() for l in f if l.strip()] - - n_files = len(file_lines) - logger.log(f"Loaded {n_files} files from {args.file_list}", "success") - - # Determine n_workers sweep - cpu_cnt = os.cpu_count() or 1 - if args.nw_list: - nw_values = [int(x) for x in args.nw_list.split(",")] - else: - # Default sweep: powers of 2 up to CPU count and some larger values - nw_values = [1, 2, 4, 8, 16, 32, cpu_cnt, min(2 * cpu_cnt, max(1, n_files))] - nw_values = sorted(set(nw_values)) - - # Determine threads_per_worker sweep - if args.tpw_list: - tpw_values = [int(x) for x in args.tpw_list.split(",")] - else: - tpw_values = [1] - tpw_values = sorted(set(tpw_values)) - - # Prepare benchmark configurations - configs = [] - for nw in nw_values: - for tpw in tpw_values: - for use_processes in [False, True]: - configs.append({ - 'n_workers': nw, - 'threads_per_worker': tpw, - 'processes': use_processes - }) - - logger.log(f"Running {len(configs)} configurations", "info") - logger.log(f"Configurations:", "info") - logger.log(f" n_workers: {nw_values}", "info") - logger.log(f" threads_per_worker: {tpw_values}", "info") - logger.log(f" processes: [False, True]", "info") - - # Run benchmarks - results = [] - for i, config in enumerate(configs, 1): - logger.log(f"\n[{i}/{len(configs)}] Running: nw={config['n_workers']}, tpw={config['threads_per_worker']}, proc={config['processes']}", "info") - - result = run_analysis( - file_list_path=args.file_list, - n_workers=config['n_workers'], - threads_per_worker=config['threads_per_worker'], - processes=config['processes'], - logger=logger - ) - - results.append(result) - - logger.log(f" Time: {result['total_time']:.2f}s | Events: {result['total_events']} | Selected: {result['selected_events']} | Status: {result['status']}", "info") - - # Write results to CSV - if results: - fieldnames = [ - 'n_workers', - 'threads_per_worker', - 'processes', - 'total_time', - 'total_events', - 'selected_events', - 'efficiency', - 'status' - ] - - with open(args.out, 'w', newline='') as csvfile: - writer = csv.DictWriter(csvfile, fieldnames=fieldnames) - writer.writeheader() - for result in results: - writer.writerow(result) - - logger.log(f"\nResults written to: {args.out}", "success") - - # Print summary statistics - successful = [r for r in results if r['status'] == 'success'] - if successful: - times = [r['total_time'] for r in successful] - logger.log("\nPerformance Summary:", "success") - logger.log(f" Total runs: {len(results)} ({len(successful)} successful)", "info") - logger.log(f" Min time: {min(times):.2f}s", "info") - logger.log(f" Max time: {max(times):.2f}s", "info") - logger.log(f" Mean time: {mean(times):.2f}s", "info") - logger.log(f" Median time: {median(times):.2f}s", "info") - - # Find best configuration - best = min(successful, key=lambda x: x['total_time']) - logger.log(f"\nBest configuration: nw={best['n_workers']}, tpw={best['threads_per_worker']}, proc={best['processes']}", "success") - logger.log(f" Time: {best['total_time']:.2f}s", "info") - - logger.log("\nBenchmark complete!", "success") - - -if __name__ == "__main__": - main() diff --git a/scripts/benchmark_pyprocess.py b/scripts/benchmark_pyprocess.py deleted file mode 100644 index ac137f0..0000000 --- a/scripts/benchmark_pyprocess.py +++ /dev/null @@ -1,279 +0,0 @@ -#!/usr/bin/env python3 -""" -Benchmarking script for `pyutils.pyprocess.Processor`. - -Features: -- Sweeps `max_workers` values -- Toggles `use_processes` True/False -- Supports comparing full vs reduced `branches` -- Can run with `file_list_path` (local list) or `defname` (SAM) -- Records per-file durations and summary metrics to CSV - -Usage examples: - python3 scripts/benchmark_pyprocess.py --file-list files.txt --out results.csv - - python3 scripts/benchmark_pyprocess.py --file-list MDS3a_nosig.txt --location tape --use-remote --out bench_summary.csv --out-dir bench_out - -Note: This script uses the `Processor` and `_worker_func` from the `pyutils` package -so run it from the repository root where `pyutils` is importable. -""" - -import argparse -import csv -import functools -import json -import os -import time -from statistics import mean, median - -from pyutils.pyprocess import Processor, _worker_func - - -def timing_wrapper(file_name, branches, tree_path, use_remote, location, schema, verbosity): - """Top-level timing wrapper (picklable) that calls internal _worker_func.""" - t0 = time.perf_counter() - result = _worker_func( - file_name=file_name, - branches=branches, - tree_path=tree_path, - use_remote=use_remote, - location=location, - schema=schema, - verbosity=verbosity, - ) - t1 = time.perf_counter() - - # Try to infer event count - try: - n_events = len(result) - except Exception: - try: - # If awkward array or dict-like, try first field - n_events = len(next(iter(result.values()))) - except Exception: - n_events = None - - return {"file": file_name, "duration": (t1 - t0), "n_events": n_events, "result": result} - - -# Global config used by `bench_worker` so it has a single-argument signature -BENCH_CONFIG = {} - - -def bench_worker(file_name): - """Single-argument module-level worker that calls timing_wrapper using global BENCH_CONFIG. - - This satisfies `Processor`'s requirement that `custom_worker_func` takes exactly one - argument and is picklable for multiprocessing. - """ - return timing_wrapper(file_name, **BENCH_CONFIG) - - -def percentile(sorted_list, p): - if not sorted_list: - return None - k = (len(sorted_list) - 1) * (p / 100.0) - f = int(k) - c = min(f + 1, len(sorted_list) - 1) - if f == c: - return sorted_list[int(k)] - d0 = sorted_list[f] * (c - k) - d1 = sorted_list[c] * (k - f) - return d0 + d1 - - -def run_single_config(file_source_args, branches, max_workers, use_processes, out_dir, tree_path, use_remote, location, schema, verbosity, worker_verbosity): - pfx = f"mw={max_workers}_proc={use_processes}_branches={'reduced' if branches else 'full'}_{file_source_args.get('mode') or 'unknown'}" - out_prefix = os.path.join(out_dir, pfx) - os.makedirs(out_dir, exist_ok=True) - - processor = Processor(tree_path=tree_path, use_remote=use_remote, location=location, schema=schema, verbosity=verbosity, worker_verbosity=worker_verbosity) - - # Populate global BENCH_CONFIG used by the module-level `bench_worker` - global BENCH_CONFIG - BENCH_CONFIG = dict( - branches=branches, - tree_path=tree_path, - use_remote=use_remote, - location=location, - schema=schema, - verbosity=worker_verbosity, - ) - t0 = time.perf_counter() - results = processor.process_data( - file_name=None, - file_list_path=file_source_args.get("file_list_path"), - defname=file_source_args.get("defname"), - branches=branches, - max_workers=max_workers, - custom_worker_func=bench_worker, - use_processes=use_processes, - ) - t1 = time.perf_counter() - - # results: list of dicts returned by timing_wrapper (or None entries) - durations = [] - failed = 0 - total_events = 0 - per_file_rows = [] - - if results is None: - # No results - return None - - for r in results: - if not r: - failed += 1 - continue - dur = r.get("duration") - durations.append(dur) - n_ev = r.get("n_events") - if isinstance(n_ev, int): - total_events += n_ev - per_file_rows.append({"file": r.get("file"), "duration": dur, "n_events": n_ev}) - - durations_sorted = sorted(durations) - total_time = t1 - t0 - files_processed = len(durations) - files_per_sec = files_processed / total_time if total_time > 0 else None - - summary = { - "max_workers": max_workers, - "use_processes": use_processes, - "branches_mode": "reduced" if branches else "full", - "source_mode": file_source_args.get("mode"), - "files_processed": files_processed, - "failed": failed, - "total_time": total_time, - "files_per_sec": files_per_sec, - "mean_duration": mean(durations) if durations else None, - "median_duration": median(durations) if durations else None, - "p90_duration": percentile(durations_sorted, 90), - "p99_duration": percentile(durations_sorted, 99), - "total_events": total_events, - } - - # Write per-file CSV - per_file_csv = out_prefix + "_perfile.csv" - with open(per_file_csv, "w", newline="") as pf: - writer = csv.DictWriter(pf, fieldnames=["file", "duration", "n_events"]) - writer.writeheader() - for row in per_file_rows: - writer.writerow(row) - - return summary - - -def main(): - parser = argparse.ArgumentParser() - group = parser.add_mutually_exclusive_group(required=True) - group.add_argument("--file-list", dest="file_list", help="Path to a newline-separated local file list") - group.add_argument("--defname", dest="defname", help="SAM definition name (defname)") - parser.add_argument("--reduced-branches", dest="reduced_branches", help="Comma-separated reduced branch list (e.g. Edep,track)", default=None) - parser.add_argument("--out", dest="out", help="Summary CSV output path", default="bench_out/pyprocess/benchmark_results.csv") - parser.add_argument("--out-dir", dest="out_dir", help="Directory to store per-run outputs", default="bench_out/pyprocess") - parser.add_argument("--max-workers-list", dest="mw_list", help="Comma-separated max_workers values; default auto", default=None) - parser.add_argument("--tree-path", dest="tree_path", default="EventNtuple/ntuple") - parser.add_argument("--use-remote", dest="use_remote", action="store_true") - parser.add_argument("--location", dest="location", default="tape") - parser.add_argument("--location-list", dest="location_list", help="Comma-separated list of locations to sweep (overrides --location)", default=None) - parser.add_argument("--schema", dest="schema", default="root") - parser.add_argument("--verbosity", dest="verbosity", type=int, default=1) - parser.add_argument("--worker-verbosity", dest="worker_verbosity", type=int, default=0) - args = parser.parse_args() - - # Prepare file source args - if args.file_list: - file_source_args = {"file_list_path": args.file_list, "mode": "file_list"} - # count files - with open(args.file_list, "r") as f: - file_lines = [l.strip() for l in f if l.strip()] - n_files = len(file_lines) - else: - file_source_args = {"defname": args.defname, "mode": "defname"} - # n_files unknown until query; use a conservative guess for sweep - n_files = 100 - - cpu_cnt = os.cpu_count() or 1 - # default sweep - if args.mw_list: - mw_values = [int(x) for x in args.mw_list.split(",")] - else: - mw_values = [1, 2, 4, 8, 16, 32, cpu_cnt, min(2 * cpu_cnt, max(1, n_files))] - # unique and sorted - mw_values = sorted(set(mw_values)) - - # Always use a reduced grouped `branches` dict. If the user supplies - # `--reduced-branches` use those fields; otherwise default to the - # `trk` group from dask-tests/run_dask_example.py. - if args.reduced_branches: - lst = [b.strip() for b in args.reduced_branches.split(",") if b.strip()] - reduced_branches = {"trk": lst} if lst else None - else: - reduced_branches = { - "trk": [ - "trk.nactive", - "trk.pdg", - "trk.status", - "trkqual.valid", - "trkqual.result", - "trkpid.valid", - "trkpid.result", - ] - } - - # Prepare location sweep - if args.location_list: - locations = [l.strip() for l in args.location_list.split(",") if l.strip()] - else: - locations = [args.location] - - # Sweep combinations - only the reduced branch set is used - branch_options = [reduced_branches] - - combos = [] - for location in locations: - for use_processes in (False, True): - for branches in branch_options: - for mw in mw_values: - combos.append((mw, use_processes, branches, location)) - - # Run combos and collect summaries - summaries = [] - for mw, use_processes, branches, location in combos: - # If the user specifies location 'local' treat it as local files (no remote mdh lookup) - per_run_use_remote = False if location == "local" else args.use_remote - print(f"Running: max_workers={mw}, use_processes={use_processes}, branches={'reduced' if branches else 'full'}, location={location}, use_remote={per_run_use_remote}") - try: - s = run_single_config( - file_source_args=file_source_args, - branches=branches, - max_workers=mw, - use_processes=use_processes, - out_dir=args.out_dir, - tree_path=args.tree_path, - use_remote=per_run_use_remote, - location=location, - schema=args.schema, - verbosity=args.verbosity, - worker_verbosity=args.worker_verbosity, - ) - if s: - summaries.append(s) - except Exception as e: - print(f"Error running config mw={mw} proc={use_processes} branches={'reduced' if branches else 'full'}: {e}") - - # Write summary CSV - if summaries: - keys = list(summaries[0].keys()) - with open(args.out, "w", newline="") as outcsv: - writer = csv.DictWriter(outcsv, fieldnames=keys) - writer.writeheader() - for row in summaries: - writer.writerow(row) - - print(f"Done. Wrote summary to {args.out} (per-file outputs in {args.out_dir})") - - -if __name__ == "__main__": - main() diff --git a/scripts/plot_bench.py b/scripts/plot_bench.py deleted file mode 100644 index 56f76ef..0000000 --- a/scripts/plot_bench.py +++ /dev/null @@ -1,356 +0,0 @@ -#!/usr/bin/env python3 -""" -Plotting utilities for benchmark results produced by -`scripts/benchmark_pyprocess.py`. - -Generates: -- throughput (files/sec) vs `max_workers` (hue=`use_processes`) -- latency percentiles (median, p90, p99) vs `max_workers` -- per-file duration histogram for a chosen per-file CSV - -Requires: pandas, matplotlib, seaborn - -Usage: - python3 scripts/plot_bench.py --summary bench_summary.csv --out-dir bench_out -""" - -import argparse -import glob -import os -import pandas as pd -import matplotlib.pyplot as plt - - -def ensure_dir(d): - os.makedirs(d, exist_ok=True) - - -def plot_throughput(df, out_path): - plt.figure(figsize=(7, 4)) - # Plot lines per `use_processes` value if present, otherwise single line - if "use_processes" in df.columns: - for val in sorted(df["use_processes"].unique()): - sub = df[df["use_processes"] == val].sort_values("max_workers") - plt.plot(sub["max_workers"], sub["files_per_sec"], marker="o", label=str(val)) - plt.legend(title="use_processes") - else: - df_sorted = df.sort_values("max_workers") - plt.plot(df_sorted["max_workers"], df_sorted["files_per_sec"], marker="o") - plt.xlabel("max_workers") - plt.ylabel("files / s") - plt.title("Throughput vs max_workers") - plt.grid(True, alpha=0.3) - plt.tight_layout() - plt.savefig(out_path) - plt.close() - - -def plot_latency_percentiles(df, out_path): - plt.figure(figsize=(7, 4)) - df_sorted = df.sort_values("max_workers") - for label in ["median_duration", "p90_duration", "p99_duration"]: - if label in df_sorted.columns: - plt.plot(df_sorted["max_workers"], df_sorted[label], marker="o", label=label) - plt.xlabel("max_workers") - plt.ylabel("duration (s)") - plt.title("Latency percentiles vs max_workers") - plt.legend() - plt.grid(True, alpha=0.3) - plt.tight_layout() - plt.savefig(out_path) - plt.close() - - -def plot_perfile_hist(perfile_csv, out_path): - df = pd.read_csv(perfile_csv) - if "duration" not in df.columns: - print(f"Per-file CSV {perfile_csv} has no 'duration' column") - return - plt.figure(figsize=(7, 4)) - data = df["duration"].dropna() - plt.hist(data, bins=60, density=False, alpha=0.7) - # simple KDE-like smoothing using a line from a gaussian filter if available - try: - from scipy.ndimage import gaussian_filter1d - import numpy as np - counts, bins = np.histogram(data, bins=60) - centers = 0.5 * (bins[1:] + bins[:-1]) - smooth = gaussian_filter1d(counts.astype(float), sigma=1.0) - # scale smooth to match histogram scale - plt.plot(centers, smooth, color="C1") - except Exception: - # scipy not available; skip smoothing - pass - plt.xlabel("per-file duration (s)") - plt.title(f"Per-file duration distribution ({os.path.basename(perfile_csv)})") - plt.tight_layout() - plt.savefig(out_path) - plt.close() - - -def plot_heatmap(df, value_col, out_path, index_col="max_workers", column_col="use_processes", aggfunc="mean"): - # Pivot and plot heatmap (matplotlib imshow) - if index_col not in df.columns or column_col not in df.columns: - print(f"Cannot create heatmap: missing {index_col} or {column_col} in summary") - return - pivot = df.pivot_table(index=index_col, columns=column_col, values=value_col, aggfunc=aggfunc) - if pivot.empty: - print("Pivot table empty for heatmap") - return - plt.figure(figsize=(8, 5)) - im = plt.imshow(pivot.values, aspect="auto", origin="lower", cmap="viridis") - plt.colorbar(im, label=value_col) - plt.yticks(range(len(pivot.index)), [str(x) for x in pivot.index]) - plt.xticks(range(len(pivot.columns)), [str(x) for x in pivot.columns]) - plt.xlabel(column_col) - plt.ylabel(index_col) - plt.title(f"{value_col} heatmap ({index_col} x {column_col})") - plt.tight_layout() - plt.savefig(out_path) - plt.close() - - -def plot_speedup_and_efficiency(df, out_path_speedup, out_path_efficiency, cores_col="max_workers"): - # Compute baseline as avg total_time where max_workers == 1 if present, else min - if "total_time" not in df.columns: - print("No total_time column to compute speedup") - return - df2 = df.copy() - df2[cores_col] = pd.to_numeric(df2[cores_col], errors="coerce") - # baseline per source_mode & location if present - groups = [] - if "source_mode" in df2.columns and "location" in df2.columns: - group_cols = ["source_mode", "location"] - elif "source_mode" in df2.columns: - group_cols = ["source_mode"] - else: - group_cols = [] - - if group_cols: - for name, g in df2.groupby(group_cols): - try: - base = g[g[cores_col] == 1]["total_time"].mean() - if pd.isna(base): - base = g["total_time"].min() - except Exception: - base = g["total_time"].min() - g = g.copy() - g["speedup"] = base / g["total_time"] - g["total_cores"] = g[cores_col] - groups.append(g) - df_speed = pd.concat(groups, ignore_index=True) - else: - try: - base = df2[df2[cores_col] == 1]["total_time"].mean() - if pd.isna(base): - base = df2["total_time"].min() - except Exception: - base = df2["total_time"].min() - df_speed = df2.copy() - df_speed["speedup"] = base / df_speed["total_time"] - df_speed["total_cores"] = df_speed[cores_col] - - # Speedup plot - plt.figure(figsize=(7, 4)) - for key, grp in df_speed.groupby("use_processes") if "use_processes" in df_speed.columns else [(None, df_speed)]: - plt.plot(grp[cores_col], grp["speedup"], marker="o", label=str(key)) - plt.xlabel("total cores") - plt.ylabel("speedup") - plt.title("Speedup vs cores") - if "use_processes" in df_speed.columns: - plt.legend(title="use_processes") - plt.grid(True, alpha=0.3) - plt.tight_layout() - plt.savefig(out_path_speedup) - plt.close() - - # Efficiency = speedup / total_cores - df_speed["efficiency"] = df_speed["speedup"] / df_speed["total_cores"].replace(0, pd.NA) - plt.figure(figsize=(7, 4)) - for key, grp in df_speed.groupby("use_processes") if "use_processes" in df_speed.columns else [(None, df_speed)]: - plt.plot(grp[cores_col], grp["efficiency"], marker="o", label=str(key)) - plt.xlabel("total cores") - plt.ylabel("efficiency (speedup / cores)") - plt.title("Efficiency vs cores") - if "use_processes" in df_speed.columns: - plt.legend(title="use_processes") - plt.grid(True, alpha=0.3) - plt.tight_layout() - plt.savefig(out_path_efficiency) - plt.close() - - -def plot_failure_rate(df, out_path): - if "failed" not in df.columns or "files_processed" not in df.columns: - print("No failure/files_processed columns to plot failure rate") - return - df2 = df.copy() - df2["failed_pct"] = df2["failed"] / (df2["failed"] + df2["files_processed"]).replace(0, pd.NA) - x = range(len(df2)) - labels = [f"mw={int(r['max_workers'])}" if not pd.isna(r.get('max_workers')) else str(i) for i, r in df2.iterrows()] - plt.figure(figsize=(8, 4)) - plt.bar(x, df2["failed"], label="failed") - plt.bar(x, df2["files_processed"], bottom=df2["failed"], label="successful") - plt.xticks(x, labels, rotation=45, ha="right") - plt.ylabel("files") - plt.title("Failed vs successful files per config") - plt.legend() - plt.tight_layout() - plt.savefig(out_path) - plt.close() - - -def plot_box_and_cdfs_from_perfiles(out_dir, out_prefix): - # Collect per-file CSVs and group them by config parsed from filename - pattern = os.path.join(out_dir, "*_perfile.csv") - files = glob.glob(pattern) - if not files: - print("No per-file CSVs found for box/CDF plots") - return - groups = {} - for fpath in files: - # filename like mw=4_proc=False_branches=reduced_file_list_perfile.csv - name = os.path.basename(fpath) - parts = name.split("_") - # try to extract mw and proc - mw = next((p.split("=")[1] for p in parts if p.startswith("mw=")), None) - proc = next((p.split("=")[1] for p in parts if p.startswith("proc=")), None) - key = f"mw={mw}_proc={proc}" - try: - df = pd.read_csv(fpath) - durations = df["duration"].dropna().values - except Exception: - continue - groups[key] = durations - - # Boxplot - keys = sorted(groups.keys()) - data = [groups[k] for k in keys] - plt.figure(figsize=(max(6, len(keys)*0.6), 5)) - plt.boxplot(data, labels=keys, showfliers=False) - plt.xticks(rotation=45, ha="right") - plt.ylabel("per-file duration (s)") - plt.title("Per-config per-file duration boxplot") - plt.tight_layout() - out_box = os.path.join(out_dir, f"{out_prefix}_boxplot.png") - plt.savefig(out_box) - plt.close() - - # CDFs - import numpy as _np - plt.figure(figsize=(7, 5)) - for k in keys: - arr = _np.sort(groups[k]) - cdf = _np.arange(1, len(arr)+1) / len(arr) - plt.plot(arr, cdf, label=k) - plt.xlabel("duration (s)") - plt.ylabel("CDF") - plt.title("Per-config CDF of per-file durations") - plt.legend(fontsize="small") - plt.tight_layout() - out_cdf = os.path.join(out_dir, f"{out_prefix}_cdfs.png") - plt.savefig(out_cdf) - plt.close() - - -def plot_perfile_timeline(perfile_csv, out_path): - if not os.path.exists(perfile_csv): - print(f"Per-file CSV not found: {perfile_csv}") - return - df = pd.read_csv(perfile_csv) - if "duration" not in df.columns: - print(f"Per-file CSV {perfile_csv} has no 'duration' column") - return - durations = df["duration"].fillna(0).values - plt.figure(figsize=(10, 4)) - plt.plot(range(len(durations)), durations, marker=".") - plt.xlabel("file index") - plt.ylabel("duration (s)") - plt.title(f"Per-file durations over file index ({os.path.basename(perfile_csv)})") - plt.tight_layout() - plt.savefig(out_path) - plt.close() - - -def main(): - parser = argparse.ArgumentParser() - parser.add_argument("--summary", type=str, default="bench_out/pyprocess/benchmark_results.csv", help="Summary CSV (from benchmark script)") - parser.add_argument("--out-dir", type=str, default="bench_out/pyprocess", help="Directory containing per-file CSVs and where plots will be written") - parser.add_argument("--plots-dir", type=str, default=None, help="Directory to write plots (defaults to /plots)") - parser.add_argument("--perfile", type=str, default=None, help="Optional explicit per-file CSV to plot") - args = parser.parse_args() - - if not os.path.exists(args.summary): - print(f"Summary CSV not found: {args.summary}") - return - - df = pd.read_csv(args.summary) - # Normalize types - for col in ["max_workers", "files_per_sec", "mean_duration"]: - if col in df.columns: - df[col] = pd.to_numeric(df[col], errors="coerce") - - plots_dir = args.plots_dir or os.path.join(args.out_dir, "plots") - ensure_dir(plots_dir) - - # Throughput plot - out1 = os.path.join(plots_dir, "throughput_max_workers.png") - plot_throughput(df, out1) - print(f"Wrote {out1}") - - # Latency percentiles - out2 = os.path.join(plots_dir, "latency_percentiles.png") - plot_latency_percentiles(df, out2) - print(f"Wrote {out2}") - - # Per-file histogram: select provided or pick a per-file CSV from out-dir - perfile_csv = args.perfile - if perfile_csv is None: - candidates = glob.glob(os.path.join(args.out_dir, "*_perfile.csv")) - candidates.sort(key=os.path.getmtime, reverse=True) - if candidates: - perfile_csv = candidates[0] - - if perfile_csv and os.path.exists(perfile_csv): - out3 = os.path.join(plots_dir, "perfile_duration_hist.png") - plot_perfile_hist(perfile_csv, out3) - print(f"Wrote {out3}") - else: - print("No per-file CSV found to plot per-file histogram") - - # Additional plots - # Heatmaps for files_per_sec and mean_duration (if available) - if "files_per_sec" in df.columns: - out_h1 = os.path.join(plots_dir, "heatmap_files_per_sec.png") - plot_heatmap(df, "files_per_sec", out_h1) - print(f"Wrote {out_h1}") - if "mean_duration" in df.columns: - out_h2 = os.path.join(plots_dir, "heatmap_mean_duration.png") - plot_heatmap(df, "mean_duration", out_h2) - print(f"Wrote {out_h2}") - - # Speedup and efficiency - out_speed = os.path.join(plots_dir, "speedup_vs_cores.png") - out_eff = os.path.join(plots_dir, "efficiency_vs_cores.png") - plot_speedup_and_efficiency(df, out_speed, out_eff) - print(f"Wrote {out_speed}") - print(f"Wrote {out_eff}") - - # Failure rate - out_fail = os.path.join(plots_dir, "failure_rate.png") - plot_failure_rate(df, out_fail) - print(f"Wrote {out_fail}") - - # Boxplot and CDFs from per-file CSVs (if any) - plot_box_and_cdfs_from_perfiles(args.out_dir, "perfile") - print(f"Wrote boxplot/CDFs to {args.out_dir}") - - # Per-file timeline for the picked perfile CSV - if perfile_csv and os.path.exists(perfile_csv): - out_tl = os.path.join(plots_dir, "perfile_timeline.png") - plot_perfile_timeline(perfile_csv, out_tl) - print(f"Wrote {out_tl}") - - -if __name__ == "__main__": - main() diff --git a/scripts/plot_dask_bench.py b/scripts/plot_dask_bench.py deleted file mode 100644 index eca8f26..0000000 --- a/scripts/plot_dask_bench.py +++ /dev/null @@ -1,293 +0,0 @@ -#!/usr/bin/env python3 -""" -Plotting utilities for benchmark results produced by -`scripts/benchmark_dask.py`. - -Generates: -- throughput (files/sec) vs `n_workers` (hue=`threads_per_worker` and `processes`) -- heatmap of throughput/time with n_workers x threads_per_worker -- speedup and efficiency vs total cores -- per-file duration distributions (if available) - -Requires: pandas, matplotlib - -Usage: - python3 scripts/plot_dask_bench.py --summary benchmark_dask_results.csv --out-dir bench_out -""" - -import argparse -import glob -import os -import pandas as pd -import matplotlib.pyplot as plt -import numpy as np - - -def ensure_dir(d): - os.makedirs(d, exist_ok=True) - - -def plot_throughput_vs_n_workers(df, out_path): - """Plot files/sec vs n_workers, grouped by threads_per_worker and processes.""" - plt.figure(figsize=(10, 6)) - - # Group by threads_per_worker and processes - for (tpw, proc), grp in df.groupby(["threads_per_worker", "processes"]): - grp_sorted = grp.sort_values("n_workers") - label = f"tpw={int(tpw)}, proc={proc}" - plt.plot(grp_sorted["n_workers"], grp_sorted["files_per_sec"], marker="o", label=label) - - plt.xlabel("n_workers") - plt.ylabel("files / s") - plt.title("Throughput vs n_workers") - plt.legend() - plt.grid(True, alpha=0.3) - plt.tight_layout() - plt.savefig(out_path) - plt.close() - print(f"Wrote {out_path}") - - -def plot_throughput_vs_total_cores(df, out_path): - """Plot files/sec vs total_cores (n_workers * threads_per_worker).""" - df_plot = df.copy() - df_plot["total_cores"] = df_plot["n_workers"] * df_plot["threads_per_worker"] - df_plot["label"] = df_plot.apply( - lambda r: f"proc={r['processes']}", axis=1 - ) - - plt.figure(figsize=(10, 6)) - for proc, grp in df_plot.groupby("processes"): - grp_sorted = grp.sort_values("total_cores") - label = f"processes={proc}" - plt.plot(grp_sorted["total_cores"], grp_sorted["files_per_sec"], marker="o", label=label) - - plt.xlabel("total cores (n_workers × threads_per_worker)") - plt.ylabel("files / s") - plt.title("Throughput vs total cores") - plt.legend() - plt.grid(True, alpha=0.3) - plt.tight_layout() - plt.savefig(out_path) - plt.close() - print(f"Wrote {out_path}") - - -def plot_heatmap_throughput(df, out_path, processes_val=False): - """Create heatmap of throughput with n_workers (rows) x threads_per_worker (columns).""" - df_proc = df[df["processes"] == processes_val].copy() - - if df_proc.empty: - print(f"No data for processes={processes_val}") - return - - pivot = df_proc.pivot_table( - index="n_workers", - columns="threads_per_worker", - values="files_per_sec", - aggfunc="mean" - ) - - if pivot.empty: - return - - plt.figure(figsize=(8, 6)) - im = plt.imshow(pivot.values, aspect="auto", origin="lower", cmap="viridis") - plt.colorbar(im, label="files / s") - plt.yticks(range(len(pivot.index)), [str(int(x)) for x in pivot.index]) - plt.xticks(range(len(pivot.columns)), [str(int(x)) for x in pivot.columns]) - plt.xlabel("threads_per_worker") - plt.ylabel("n_workers") - plt.title(f"Throughput heatmap (processes={processes_val})") - plt.tight_layout() - plt.savefig(out_path) - plt.close() - print(f"Wrote {out_path}") - - -def plot_heatmap_total_time(df, out_path, processes_val=False): - """Create heatmap of total_time with n_workers (rows) x threads_per_worker (columns).""" - df_proc = df[df["processes"] == processes_val].copy() - - if df_proc.empty: - print(f"No data for processes={processes_val}") - return - - pivot = df_proc.pivot_table( - index="n_workers", - columns="threads_per_worker", - values="total_time", - aggfunc="mean" - ) - - if pivot.empty: - return - - plt.figure(figsize=(8, 6)) - im = plt.imshow(pivot.values, aspect="auto", origin="lower", cmap="RdYlGn_r") - plt.colorbar(im, label="total time (s)") - plt.yticks(range(len(pivot.index)), [str(int(x)) for x in pivot.index]) - plt.xticks(range(len(pivot.columns)), [str(int(x)) for x in pivot.columns]) - plt.xlabel("threads_per_worker") - plt.ylabel("n_workers") - plt.title(f"Total time heatmap (processes={processes_val})") - plt.tight_layout() - plt.savefig(out_path) - plt.close() - print(f"Wrote {out_path}") - - -def plot_speedup_and_efficiency(df, out_path_speedup, out_path_efficiency): - """Compute and plot speedup and efficiency vs total_cores.""" - df_plot = df.copy() - df_plot["total_cores"] = df_plot["n_workers"] * df_plot["threads_per_worker"] - - # Find baseline: minimum total_time (fastest single-threaded config) - baseline = df_plot[df_plot["total_cores"] == 1]["total_time"] - if baseline.empty: - baseline = df_plot["total_time"].min() - else: - baseline = baseline.min() - - df_plot["speedup"] = baseline / df_plot["total_time"] - df_plot["efficiency"] = df_plot["speedup"] / df_plot["total_cores"] - - # Speedup plot - plt.figure(figsize=(10, 6)) - for proc, grp in df_plot.groupby("processes"): - grp_sorted = grp.sort_values("total_cores") - label = f"processes={proc}" - plt.plot(grp_sorted["total_cores"], grp_sorted["speedup"], marker="o", label=label) - - plt.xlabel("total cores") - plt.ylabel("speedup") - plt.title("Speedup vs total cores") - plt.legend() - plt.grid(True, alpha=0.3) - # Add diagonal line for perfect scaling - max_cores = df_plot["total_cores"].max() - plt.plot([1, max_cores], [1, max_cores], "k--", alpha=0.3, label="perfect scaling") - plt.legend() - plt.tight_layout() - plt.savefig(out_path_speedup) - plt.close() - print(f"Wrote {out_path_speedup}") - - # Efficiency plot - plt.figure(figsize=(10, 6)) - for proc, grp in df_plot.groupby("processes"): - grp_sorted = grp.sort_values("total_cores") - label = f"processes={proc}" - plt.plot(grp_sorted["total_cores"], grp_sorted["efficiency"], marker="o", label=label) - - plt.xlabel("total cores") - plt.ylabel("efficiency (speedup / cores)") - plt.title("Efficiency vs total cores") - plt.legend() - plt.grid(True, alpha=0.3) - plt.axhline(y=1.0, color="k", linestyle="--", alpha=0.3, label="perfect scaling") - plt.tight_layout() - plt.savefig(out_path_efficiency) - plt.close() - print(f"Wrote {out_path_efficiency}") - - -def plot_total_time_comparison(df, out_path): - """Bar plot comparing total_time across configurations.""" - df_plot = df.copy() - df_plot["total_cores"] = df_plot["n_workers"] * df_plot["threads_per_worker"] - df_plot["config"] = df_plot.apply( - lambda r: f"nw={int(r['n_workers'])},tpw={int(r['threads_per_worker'])},p={str(r['processes'])[0]}", - axis=1 - ) - - plt.figure(figsize=(14, 6)) - x = range(len(df_plot)) - colors = ["blue" if p else "orange" for p in df_plot["processes"]] - plt.bar(x, df_plot["total_time"], color=colors, alpha=0.7) - plt.xticks(x, df_plot["config"], rotation=45, ha="right", fontsize=9) - plt.ylabel("total time (s)") - plt.title("Total time by configuration") - plt.grid(True, alpha=0.3, axis="y") - - # Add legend - from matplotlib.patches import Patch - legend_elements = [Patch(facecolor="blue", alpha=0.7, label="processes=False"), - Patch(facecolor="orange", alpha=0.7, label="processes=True")] - plt.legend(handles=legend_elements) - - plt.tight_layout() - plt.savefig(out_path) - plt.close() - print(f"Wrote {out_path}") - - -def main(): - parser = argparse.ArgumentParser( - description="Plot benchmark results from benchmark_dask.py" - ) - parser.add_argument( - "--summary", - type=str, - default="bench_out/dask/benchmark_dask_results.csv", - help="Summary CSV from benchmark_dask.py", - ) - parser.add_argument( - "--out-dir", - type=str, - default="bench_out/dask", - help="Directory where plots will be written", - ) - args = parser.parse_args() - - if not os.path.exists(args.summary): - print(f"Summary CSV not found: {args.summary}") - return - - df = pd.read_csv(args.summary) - - # Ensure numeric types - for col in ["n_workers", "threads_per_worker", "total_time", "files_per_sec"]: - if col in df.columns: - df[col] = pd.to_numeric(df[col], errors="coerce") - - plots_dir = os.path.join(args.out_dir, "plots") - ensure_dir(plots_dir) - - # Throughput vs n_workers - out1 = os.path.join(plots_dir, "throughput_vs_n_workers.png") - plot_throughput_vs_n_workers(df, out1) - - # Throughput vs total cores - out2 = os.path.join(plots_dir, "throughput_vs_total_cores.png") - plot_throughput_vs_total_cores(df, out2) - - # Heatmaps for processes=False - out_h1_false = os.path.join(plots_dir, "heatmap_throughput_processes_false.png") - plot_heatmap_throughput(df, out_h1_false, processes_val=False) - - out_h2_false = os.path.join(plots_dir, "heatmap_total_time_processes_false.png") - plot_heatmap_total_time(df, out_h2_false, processes_val=False) - - # Heatmaps for processes=True (if data exists) - if (df["processes"] == True).any(): - out_h1_true = os.path.join(plots_dir, "heatmap_throughput_processes_true.png") - plot_heatmap_throughput(df, out_h1_true, processes_val=True) - - out_h2_true = os.path.join(plots_dir, "heatmap_total_time_processes_true.png") - plot_heatmap_total_time(df, out_h2_true, processes_val=True) - - # Speedup and efficiency - out_speed = os.path.join(plots_dir, "speedup_vs_cores.png") - out_eff = os.path.join(plots_dir, "efficiency_vs_cores.png") - plot_speedup_and_efficiency(df, out_speed, out_eff) - - # Total time comparison - out_time = os.path.join(plots_dir, "total_time_comparison.png") - plot_total_time_comparison(df, out_time) - - print(f"\nAll plots written to {plots_dir}") - - -if __name__ == "__main__": - main() From 1722374252ed79db2c8bd182bddace838e234eb6 Mon Sep 17 00:00:00 2001 From: sophieMu2e Date: Fri, 27 Feb 2026 14:10:08 -0600 Subject: [PATCH 07/14] tidy up dask tests --- .../pydask_demo-checkpoint.ipynb | 475 ------------------ 1 file changed, 475 deletions(-) delete mode 100644 examples/notebooks/.ipynb_checkpoints/pydask_demo-checkpoint.ipynb diff --git a/examples/notebooks/.ipynb_checkpoints/pydask_demo-checkpoint.ipynb b/examples/notebooks/.ipynb_checkpoints/pydask_demo-checkpoint.ipynb deleted file mode 100644 index 270bdfb..0000000 --- a/examples/notebooks/.ipynb_checkpoints/pydask_demo-checkpoint.ipynb +++ /dev/null @@ -1,475 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "697f7e53", - "metadata": {}, - "source": [ - "# Distributed Data Processing with DaskProcessor\n", - "\n", - "This notebook demonstrates how to use **DaskProcessor** for scalable parallel processing of ROOT data files using Dask's distributed computing framework.\n", - "\n", - "## Overview\n", - "\n", - "DaskProcessor provides a drop-in replacement for the standard Processor that uses Dask for:\n", - "- **Local parallelization**: Efficiently use all cores on a single machine\n", - "- **Distributed computing**: Connect to Dask clusters for large-scale processing\n", - "- **Progress monitoring**: Track processing progress across multiple files\n", - "- **Error resilience**: Built-in retry mechanisms for failed tasks\n", - "\n", - "Key advantages:\n", - "- Same output format (Awkward Arrays) as standard Processor\n", - "- Easy switching between serial, parallel, and distributed modes\n", - "- Seamless integration with HPC clusters" - ] - }, - { - "cell_type": "markdown", - "id": "36924d6f", - "metadata": {}, - "source": [ - "## 1. Import Required Libraries" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ac36f622", - "metadata": {}, - "outputs": [], - "source": [ - "# Standard library imports\n", - "import time\n", - "import os\n", - "from typing import Dict, Optional\n", - "\n", - "# External packages\n", - "import awkward as ak\n", - "\n", - "# pyutils imports\n", - "from pyutils.pydask import DaskProcessor\n", - "from pyutils.pyprocess import Processor\n", - "from pyutils.pylogger import Logger\n", - "\n", - "# Initialize logger for notebook demonstrations\n", - "logger = Logger(print_prefix=\"[pydask demo]\", verbosity=2)" - ] - }, - { - "cell_type": "markdown", - "id": "42c0d172", - "metadata": {}, - "source": [ - "## 2. Initialize DaskProcessor\n", - "\n", - "Create and configure a DaskProcessor instance. DaskProcessor shares the same constructor parameters as the standard Processor but uses Dask for distributed execution." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6d3ecc6a", - "metadata": {}, - "outputs": [], - "source": [ - "# Initialize DaskProcessor with remote settings\n", - "dask_proc = DaskProcessor(\n", - " tree_path=\"EventNtuple/ntuple\",\n", - " use_remote=True, # Access remote persistent datasets\n", - " location=\"disk\", # Read from disk storage\n", - " verbosity=1,\n", - " worker_verbosity=0\n", - ")\n", - "\n", - "logger.log(\"DaskProcessor initialized with remote settings:\", \"success\")\n", - "logger.log(f\" tree_path: {dask_proc._base.tree_path}\", \"info\")\n", - "logger.log(f\" use_remote: {dask_proc._base.use_remote}\", \"info\")\n", - "logger.log(f\" location: {dask_proc._base.location}\", \"info\")" - ] - }, - { - "cell_type": "markdown", - "id": "87e1e64a", - "metadata": {}, - "source": [ - "## 3. Single File Processing\n", - "\n", - "Process a single ROOT file using DaskProcessor. This demonstrates the basic API for specifying branches and output field names." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "415dae78", - "metadata": {}, - "outputs": [], - "source": [ - "# Example: Single file processing\n", - "# (Replace with actual file path and branches for real data)\n", - "\n", - "branches = {\n", - " \"trk.mom\": \"momentum\", # Map ROOT branch to output field\n", - " \"trk.pos\": \"position\" # Multiple branches can be selected\n", - "}\n", - "\n", - "# This would process a single file:\n", - "# result = dask_proc.process_data(\n", - "# file_name=\"/path/to/data.root\",\n", - "# branches=branches\n", - "# )\n", - "\n", - "logger.log(\"Single File Processing Example:\", \"info\")\n", - "logger.log(\"When you have a single file, use file_name parameter:\", \"info\")\n", - "logger.log(\"\"\"\n", - "result = dask_proc.process_data(\n", - " file_name=\"/path/to/data.root\",\n", - " branches={\"trk.mom\": \"momentum\", \"trk.pos\": \"position\"},\n", - " show_progress=True\n", - ")\n", - "The result is an Awkward Array with the selected branches.\n", - "\"\"\", \"info\")" - ] - }, - { - "cell_type": "markdown", - "id": "08e1e81e", - "metadata": {}, - "source": [ - "## 4. Multi-File Processing with File Lists\n", - "\n", - "Process multiple files from a file list. This is where DaskProcessor shows its power by distributing work across multiple workers." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f47d5045", - "metadata": {}, - "outputs": [], - "source": [ - "# Load the MDS3a.txt file list from the repository\n", - "import os\n", - "\n", - "notebook_dir = os.getcwd()\n", - "file_list_path = os.path.join(notebook_dir, \"../../MDS3a.txt\")\n", - "\n", - "# Read the file list\n", - "if os.path.exists(file_list_path):\n", - " with open(file_list_path, 'r') as f:\n", - " sample_files = [line.strip() for line in f if line.strip()]\n", - " \n", - " logger.log(f\"Loaded MDS3a.txt file list\", \"success\")\n", - " logger.log(f\"Total files available: {len(sample_files)}\", \"info\")\n", - " \n", - " # Display statistics\n", - " logger.log(\"\\nFile list statistics:\", \"info\")\n", - " logger.log(f\" First file: {sample_files[0].split('/')[-1]}\", \"info\")\n", - " logger.log(f\" Last file: {sample_files[-1].split('/')[-1]}\", \"info\")\n", - " logger.log(f\" Dataset: MDC2025-001\", \"info\")\n", - "else:\n", - " logger.log(\"MDS3a.txt not found - using demo file paths\", \"warning\")\n", - " sample_files = [\n", - " \"/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/ensembleMDS3aMix1BBTriggered/MDC2025-001/root/01/18/nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.001430_00000552.root\",\n", - " ]" - ] - }, - { - "cell_type": "markdown", - "id": "6c67fc03", - "metadata": {}, - "source": [ - "## 5. Configure Parallelization Parameters\n", - "\n", - "Explore key parameters for optimizing DaskProcessor performance based on your hardware and workload characteristics." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "1b08e198", - "metadata": {}, - "outputs": [], - "source": [ - "# Key DaskProcessor.process_data() parameters:\n", - "\n", - "parameter_guide = {\n", - " \"n_workers\": {\n", - " \"description\": \"Number of parallel workers in the Dask cluster\",\n", - " \"default\": \"All available CPU cores\",\n", - " \"example\": \"n_workers=4 # Use 4 workers\",\n", - " \"use_case\": \"Scales to machine resources\"\n", - " },\n", - " \"threads_per_worker\": {\n", - " \"description\": \"Number of threads per worker\",\n", - " \"default\": 1,\n", - " \"example\": \"threads_per_worker=2 # 2 threads per worker\",\n", - " \"use_case\": \"For I/O-bound tasks, increase threads\"\n", - " },\n", - " \"processes\": {\n", - " \"description\": \"Use processes instead of threads\",\n", - " \"default\": False,\n", - " \"example\": \"processes=True # Use process-based parallelism\",\n", - " \"use_case\": \"CPU-bound tasks, GIL avoidance\"\n", - " },\n", - " \"show_progress\": {\n", - " \"description\": \"Display a progress bar during processing\",\n", - " \"default\": True,\n", - " \"example\": \"show_progress=True\",\n", - " \"use_case\": \"Monitor long-running jobs\"\n", - " },\n", - " \"retries\": {\n", - " \"description\": \"Number of retries for failed tasks\",\n", - " \"default\": 0,\n", - " \"example\": \"retries=2 # Retry up to 2 times\",\n", - " \"use_case\": \"Resilience to transient failures\"\n", - " }\n", - "}\n", - "\n", - "logger.log(\"Parallelization Parameter Guide:\", \"success\")\n", - "for param, details in parameter_guide.items():\n", - " logger.log(f\"\\n{param}:\", \"info\")\n", - " logger.log(f\" Description: {details['description']}\", \"info\")\n", - " logger.log(f\" Default: {details['default']}\", \"info\")\n", - " logger.log(f\" Example: {details['example']}\", \"info\")\n", - " logger.log(f\" Use Case: {details['use_case']}\", \"info\")" - ] - }, - { - "cell_type": "markdown", - "id": "49d1cb73", - "metadata": {}, - "source": [ - "## 6. Connect to Remote Dask Scheduler\n", - "\n", - "Scale beyond a single machine by connecting to a Dask cluster for large-scale distributed computing across multiple nodes." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d4814447", - "metadata": {}, - "outputs": [], - "source": [ - "# Remote scheduler setup instruction\n", - "remote_scheduler_guide = \"\"\"\n", - "STEP 1: Start Dask Scheduler on Cluster Head Node\n", - "===================================================\n", - "In a tmux session on your Dask cluster's head node:\n", - "\n", - " dask-scheduler --port 8786\n", - "\n", - "The scheduler will output something like:\n", - " \"Scheduler started at tcp://cluster-head.example.com:8786\"\n", - "\n", - "\n", - "STEP 2: Connect from Analysis Script\n", - "====================================\n", - "In your analysis notebook/script:\n", - "\n", - " branches = {\"trk.mom\": \"momentum\", \"trk.pos\": \"position\"}\n", - " \n", - " result = dask_proc.process_data(\n", - " file_list_path=\"/path/to/file_list.txt\",\n", - " branches=branches,\n", - " scheduler_address=\"tcp://cluster-head.example.com:8786\"\n", - " )\n", - "\n", - "The scheduler handles distributing tasks across all available worker nodes.\n", - "Worker processes should already be running on cluster nodes.\n", - "\n", - "\n", - "ADVANTAGES OF REMOTE SCHEDULER:\n", - "- Distribute work across multiple machines\n", - "- Utilize all available compute resources on the cluster\n", - "- Persistent scheduler can accept multiple jobs\n", - "- Progress monitoring from your local machine\n", - "- Decoupled job submission from execution\n", - "\"\"\"\n", - "\n", - "logger.log(remote_scheduler_guide, \"info\")" - ] - }, - { - "cell_type": "markdown", - "id": "6d6e5cbc", - "metadata": {}, - "source": [ - "## 7. Custom Worker Functions\n", - "\n", - "Define custom processing logic for specialized data transformations, filtering, and manipulations that go beyond simple branch selection." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "1e43e725", - "metadata": {}, - "outputs": [], - "source": [ - "# Example custom worker function\n", - "def custom_physics_worker(file_path: str) -> Optional[ak.Array]:\n", - " \"\"\"\n", - " Custom worker function that performs specialized physics analysis:\n", - " - Reads specific branches from ROOT file\n", - " - Applies physics cuts (e.g., momentum threshold)\n", - " - Returns filtered Awkward Array\n", - " \n", - " Parameters:\n", - " file_path (str): Path to the ROOT file to process\n", - " \n", - " Returns:\n", - " ak.Array or None: Filtered data as Awkward Array\n", - " \"\"\"\n", - " try:\n", - " from pyutils.pyread import Reader\n", - " \n", - " # Initialize reader for this file\n", - " reader = Reader(file_path, tree_path=\"EventNtuple/ntuple\")\n", - " \n", - " # Read track data\n", - " data = reader.read(branches=[\"trk.mom\", \"trk.pos\", \"trk.charge\"])\n", - " \n", - " if data is None or len(data) == 0:\n", - " return None\n", - " \n", - " # Example physics cuts:\n", - " # - Keep only high-momentum tracks (momentum > 100 MeV/c)\n", - " # - Keep only positively charged tracks\n", - " high_mom_mask = data.trk.mom > 100\n", - " positive_charge_mask = data.trk.charge > 0\n", - " \n", - " filtered = data[high_mom_mask & positive_charge_mask]\n", - " \n", - " return filtered if len(filtered) > 0 else None\n", - " \n", - " except Exception as e:\n", - " print(f\"Error processing {file_path}: {e}\")\n", - " return None\n", - "\n", - "\n", - "# Example: Using custom worker function\n", - "logger.log(\"Custom Worker Function Example:\", \"success\")\n", - "logger.log(\"\"\"\n", - "# Define your custom worker function\n", - "\n", - "def my_custom_worker(file_path):\n", - " from pyutils.pyread import Reader\n", - " reader = Reader(file_path, tree_path=\"EventNtuple/ntuple\")\n", - " data = reader.read(branches=[\"trk.mom\", \"trk.pos\"])\n", - " \n", - " # Apply custom cuts\n", - " filtered = data[data.trk.mom > 100]\n", - " \n", - " return filtered\n", - "\n", - "# Use it with DaskProcessor\n", - "result = dask_proc.process_data(\n", - " file_list_path=\"/path/to/file_list.txt\",\n", - " custom_worker_func=my_custom_worker,\n", - " n_workers=4,\n", - " show_progress=True\n", - ")\n", - "\"\"\", \"info\")\n", - "\n", - "logger.log(\"\\nKey Requirements for Custom Worker Functions:\", \"info\")\n", - "logger.log(\" ✓ Must accept file_path as a string parameter\", \"info\")\n", - "logger.log(\" ✓ Must return an Awkward Array or None\", \"info\")\n", - "logger.log(\" ✓ Should handle exceptions gracefully\", \"info\")\n", - "logger.log(\" ✓ Cannot rely on global state (runs in separate processes)\", \"info\")" - ] - }, - { - "cell_type": "markdown", - "id": "c3453a50", - "metadata": {}, - "source": [ - "## 8. Compare Standard vs Dask Processors\n", - "\n", - "Benchmark and understand the performance differences between standard Processor and DaskProcessor for various workload scenarios." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8b9ef82d", - "metadata": {}, - "outputs": [], - "source": [ - "# Comparison table\n", - "comparison = {\n", - " \"Feature\": [\n", - " \"Parallelization Type\",\n", - " \"Best For\",\n", - " \"Scalability\",\n", - " \"Cluster Support\",\n", - " \"Progress Tracking\",\n", - " \"Memory Efficiency\",\n", - " \"Debugging\",\n", - " \"Error Resilience\"\n", - " ],\n", - " \"Standard Processor\": [\n", - " \"Thread pool (max_workers param)\",\n", - " \"Small file lists, quick testing\",\n", - " \"Single machine (limited by cores)\",\n", - " \"No native support\",\n", - " \"Basic logging only\",\n", - " \"Loads all results in memory\",\n", - " \"Easier (all in-process)\",\n", - " \"Limited retry mechanism\"\n", - " ],\n", - " \"DaskProcessor\": [\n", - " \"Dask distributed framework\",\n", - " \"Large file lists, HPC clusters\",\n", - " \"Multi-machine via remote scheduler\",\n", - " \"Full support (tcp:// addresses)\",\n", - " \"Progress bar with live updates\",\n", - " \"Distributed memory management\",\n", - " \"More complex (separate processes)\",\n", - " \"Built-in retries parameter\"\n", - " ]\n", - "}\n", - "\n", - "# Display comparison\n", - "logger.log(\"STANDARD PROCESSOR vs DASK PROCESSOR\", \"success\")\n", - "logger.log(\"=\" * 80, \"info\")\n", - "\n", - "import pandas as pd\n", - "df_comparison = pd.DataFrame(comparison)\n", - "logger.log(str(df_comparison.to_string(index=False)), \"info\")\n", - "\n", - "# When to use which\n", - "logger.log(\"\\n\" + \"=\" * 80, \"info\")\n", - "logger.log(\"DECISION GUIDE:\", \"success\")\n", - "logger.log(\"\"\"\n", - "Use STANDARD PROCESSOR when:\n", - " • Processing a small number of files (< 10-20)\n", - " • You want simpler debugging\n", - " • Operating on a single machine without HPC resources\n", - " • Throughput is not critical\n", - " • You're doing interactive analysis (faster startup)\n", - "\n", - "Use DASK PROCESSOR when:\n", - " • Processing hundreds or thousands of files\n", - " • You have access to a multi-core machine or HPC cluster\n", - " • You need progress monitoring for long-running jobs\n", - " • You want resilience to transient failures (retries)\n", - " • Complex workflows requiring custom worker functions\n", - " • You want easy scaling without code changes\n", - "\n", - "KEY ADVANTAGE: Both have identical APIs and output formats!\n", - "You can switch between them without changing analysis code.\n", - "\"\"\", \"info\")\n", - "\n", - "logger.log(\"\\n✓ This concludes the DaskProcessor tutorial!\", \"success\")" - ] - } - ], - "metadata": { - "language_info": { - "name": "python" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} From 1619cd779c3d1c175aeb990330e3ee978b8d5c29 Mon Sep 17 00:00:00 2001 From: sophieMu2e Date: Fri, 27 Feb 2026 14:11:14 -0600 Subject: [PATCH 08/14] tidy up dask tests --- pyutils/dask_integration.py | 117 ------------------------------------ 1 file changed, 117 deletions(-) delete mode 100644 pyutils/dask_integration.py diff --git a/pyutils/dask_integration.py b/pyutils/dask_integration.py deleted file mode 100644 index b657e46..0000000 --- a/pyutils/dask_integration.py +++ /dev/null @@ -1,117 +0,0 @@ -"""Dask integration helpers for pyutils - -Provides a minimal wrapper to run the existing file-worker pipeline -with Dask (local or distributed). This is intended as a minimal, drop-in -example showing how to replace the concurrent.futures-based parallelism -with Dask delayed / distributed. - -Example usage: - from pyutils.dask_integration import process_files_with_dask - - # local cluster - results = process_files_with_dask( - file_list=my_files, - branches=['branch1','branch2'], - n_workers=4, - ) - - # remote scheduler - results = process_files_with_dask( - file_list=my_files, - branches=['branch1'], - scheduler_address='tcp://scheduler:8786' - ) -""" -from __future__ import annotations - -from typing import List, Optional, Tuple -import logging -import awkward as ak - -import dask -from dask import delayed -from dask.distributed import Client, progress - -# Import the module-level worker function from pyprocess -from .pyprocess import _worker_func - -LOGGER = logging.getLogger("pyutils.dask") - - -def process_files_with_dask( - file_list: List[str], - branches, - tree_path: str = "EventNtuple/ntuple", - use_remote: bool = False, - location: str = "local", - schema: str = "root", - n_workers: Optional[int] = None, - threads_per_worker: int = 1, - processes: bool = False, - scheduler_address: Optional[str] = None, - show_progress: bool = True, -) -> Optional[ak.Array]: - """Process many files using Dask and return concatenated awkward array. - - This function mirrors Processor.process_data semantics but uses Dask. - - If `scheduler_address` is provided, it will connect to the remote - Dask scheduler; otherwise it will start a local `Client` which will be - closed before returning. - """ - - if not file_list: - LOGGER.error("Empty file_list provided to process_files_with_dask") - return None - - client: Optional[Client] = None - created_client = False - try: - if scheduler_address: - client = Client(scheduler_address) - LOGGER.info(f"Connected to Dask scheduler at {scheduler_address}") - else: - # Create a local client; let Dask decide sensible defaults if None - client = Client(n_workers=n_workers, threads_per_worker=threads_per_worker, processes=processes) - created_client = True - LOGGER.info(f"Started local Dask client: {client}") - - # Build delayed tasks that call the existing module-level worker - tasks = [ - delayed(_worker_func)( - file_name, - branches=branches, - tree_path=tree_path, - use_remote=use_remote, - location=location, - schema=schema, - verbosity=0, - ) - for file_name in file_list - ] - - # Submit tasks to the cluster - futures = client.compute(tasks) - - if show_progress: - try: - progress(futures) - except Exception: - # progress widgets may fail in some terminals; ignore - pass - - results = client.gather(futures) - - # Filter out None results and concatenate with awkward - results = [r for r in results if r is not None] - if not results: - LOGGER.warning("Dask returned no successful results") - return None - - concatenated = ak.concatenate(results) - LOGGER.info(f"Concatenated {len(results)} arrays into {len(concatenated)} events") - return concatenated - - finally: - if created_client and client is not None: - client.close() From b836030536ec43c66a9fb5ddfc5dd450a40fdfce Mon Sep 17 00:00:00 2001 From: sophieMu2e Date: Fri, 27 Feb 2026 14:12:17 -0600 Subject: [PATCH 09/14] tidy up dask tests --- pyutils/pynorm.py | 565 ---------------------------------------------- 1 file changed, 565 deletions(-) delete mode 100644 pyutils/pynorm.py diff --git a/pyutils/pynorm.py b/pyutils/pynorm.py deleted file mode 100644 index d47aba7..0000000 --- a/pyutils/pynorm.py +++ /dev/null @@ -1,565 +0,0 @@ -#! /usr/bin/env -import DbService -import argparse -import ROOT -import math -import random -import os -import numpy as np - - -#-------------------------------------------------------------------------------------# -# Constants related to muon and pion interactions. -# References for these values can be found in the referenced documentation. - -# --- Muon Interactions --- -# Fraction of stopped muons that undergo nuclear capture -CAPTURES_PER_STOPPED_MUON = 0.609 -# Rate of radiative muon capture (RMC) events resulting in a gamma ray > 57 MeV, per capture event -RMC_GT_57_PER_CAPTURE = 1.43e-5 # Source: Phys. Rev. C 59, 2853 (1999) -# Fraction of stopped muons that undergo standard DIO (Decay In Orbit) -DIO_PER_STOPPED_MUON = 0.391 # Calculated as: 1 - CAPTURES_PER_STOPPED_MUON -# Rate of Incoming Particle Decay After Stopping (IPA) -IPA_DECAYS_PER_STOPPED_MUON = 0.92990 - -# --- Pion Interactions --- -# Fraction of stopped pions that result in a Radiative Pion Capture (RPC) -RPC_PER_STOPPED_PION = 0.0215 # Source: Reference uploaded on DocDB-469 -# --- Internal Conversion Ratios --- -# Ratio of internal conversion events per RMC event (assuming RPC value is applicable) -INTERNAL_PER_RMC = 0.00690 -# Ratio of internal conversion events per RPC event -INTERNAL_RPC_PER_RPC = 0.00690 # Source: Reference uploaded on DocDB-717 - - -# --- Configuration Placeholders (Mutable Variables) --- -# These values get overwritten later in the script or during runtime. - -# Expected rates per Proton on Target (POT) -target_stopped_muons_per_pot = 1.0 -target_stopped_pions_per_pot = 1.0 -ipa_stopped_mu_per_POT = 1.0 -ipa_stopping_rate = 1.0 - -# Event counters (initialized to zero) -num_pion_stops = 0.0 -num_pion_resamples = 0.0 -num_pion_filters = 0.0 -selected_sum_of_weights = 0.0 - -# Rate and operational parameters -rate = 1.0 -dutyfactor = 1.0 -total_pot = 0. - -#-------------------------------------------------------------------------------------# - -# --- Database Interaction --- - -# Establish a connection and retrieve simulation efficiencies from the database. - -# Initialize the database tool -db_tool = DbService.DbTool() -db_tool.init() - -# Define arguments for the database query -query_arguments = [ - "print-run", - "--purpose", "Sim_best", - "--version", "v1_1", - "--run", "1430", - "--table", "SimEfficiencies2", - "--content" -] - -# Execute the database query -db_tool.setArgs(query_arguments) -db_tool.run() - -# Store the raw result for further processing -rr = db_tool.getResult() - -# Fill varaibles associated with muon stops in target -lines= rr.split("\n") -for line in lines: - words = line.split(",") - if words[0] == "MuminusStopsCat" or words[0] == "MuBeamCat" : - #print(f"Including {words[0]} with rate {words[3]}") - rate = rate * float(words[3]) - target_stopped_muons_per_pot = rate * 1000 - - -# Fill variables associated with pion stops in target -lines= rr.split("\n") -for line in lines: - words = line.split(",") - if words[0] == "PiBeamCat" or words[0] == "PiTargetStops": - target_stopped_pions_per_pot *= float(words[3]) # 0.001880093 * 0.5165587875 - if words[0] == "PiTargetStops": - num_pion_stops = words[1] #41324703 - if words[0] == "PiMinusFilter" : - num_pion_filters = words[1] # 6634478 - if words[0] == "PhysicalPionStops" : - num_pion_resamples= words[2] # 10000000000 - if words[0] == "PiSelectedLifeimeWeight_sampler" : - selected_sum_of_weights = words[3] #2393.604874 - -# Fill variables associated with IPA stopped muons -lines= rr.split("\n") -for line in lines: - words = line.split(",") - if words[0] == "IPAStopsCat" or words[0] == "MuBeamCat" : - ipa_stopping_rate = ipa_stopping_rate * float(words[3]) - ipa_stopped_mu_per_POT = ipa_stopping_rate -print("IPAStopMuonRate=", ipa_stopped_mu_per_POT) - -#-------------------------------------------------------------------------------------# -def get_duty_factor(run_mode='1BB'): - """ - Returns the estimated duty factor based on the operational run mode (beam structure). - - Args: - run_mode (str): The operational mode, either '1BB' (1 beam batch) - or '2BB' (2 beam batches). Defaults to '1BB'. - - Returns: - float: The corresponding duty factor for the specified mode. - """ - if run_mode == '1BB': - # Duty factor for a single beam batch operation - duty_factor = 0.323 - elif run_mode == '2BB': - # Duty factor for two beam batch operation - duty_factor = 0.246 - else: - # Handle unrecognized modes or provide a default fallback if necessary - # print(f"Warning: Unknown run mode '{run_mode}'. Using default duty factor.") - duty_factor = 0.323 - - return duty_factor - -def get_pot(on_spill_time, run_mode='1BB', printout=False, frac=1): - """ - Calculates the total number of Protons on Target (POT) for a given live time. - - Args: - on_spill_time (float): The actual time the beam was on spill (in seconds). - run_mode (str): The operational mode ('1BB', '2BB', or 'custom'). - Defaults to '1BB'. - printout (bool): If True, prints calculation details. Defaults to False. - frac (float): Used only in 'custom' mode as a scaling fraction. - - Returns: - float: The calculated total number of Protons on Target (total_pot). - """ - # Numbers based on SU2020 analysis. - # See https://github.com/Mu2e/su2020/blob/master/analysis/pot_normalization.org - - # Initialize variables that will be dynamically assigned - mean_pbi = 0.0 - t_cycle = 0.0 - pot_per_cycle = 0.0 - - if run_mode == 'custom': - # Assume some fraction of 1BB - mean_pbi = 1.6e7 * frac - t_cycle = 1.33 # seconds - pot_per_cycle = 4e12 * (1 - frac) - - elif run_mode == '1BB': - # Single beam batch operation - mean_pbi = 1.6e7 - t_cycle = 1.33 # seconds - pot_per_cycle = 4e12 - - elif run_mode == '2BB': - # Two beam batch operation - mean_pbi = 3.9e7 - t_cycle = 1.4 # seconds - pot_per_cycle = 8e12 - - else: - raise ValueError(f"Unknown run_mode specified: {run_mode}") - - # --- Common Calculation Steps --- - num_cycles = on_spill_time / t_cycle - total_pot = num_cycles * pot_per_cycle - - if printout: - current_duty_factor = get_duty_factor(run_mode) if run_mode != 'custom' else 'N/A' - - print(f"Tcycle= {t_cycle}") - print(f"POT_per_cycle= {pot_per_cycle:.2e}") - # 'Livetime' here seems to mean 'Total experiment duration accounting for gaps' - print(f"Total_Duration= {on_spill_time / current_duty_factor}") - print(f"NPOT= {total_pot:.2e}") - - return total_pot - -#-------------------------------------------------------------------------------------# - -# FORWARD-DIRECTION NORMALIZATION FUNCTIONS REMOVED -# Users should now use the inverted POT calculation functions: -# - pot_for_rmc_events() -# - pot_for_dio_events() -# - pot_for_rpc_events() -# -# To calculate event expectations, use get_pot() and manual scaling if needed. - -# Helper function: work from signal to rmue -def get_ce_rmue(onspilltime, nsig, run_mode = '1BB'): - POT = get_pot(onspilltime, run_mode) - rmue = nsig/(POT * target_stopped_muons_per_pot * CAPTURES_PER_STOPPED_MUON) - return rmue - - -""" -The following section derives the cosmic yield for on spill/off spill for two specific generators (CRY/CORSIKA) -The cosmics are normalized according to the livetime fraction which overlaps with beam (Depends on duty factor and BB mode) -""" -# note this returns CosmicLivetime not # of generated events -def cry_onspill_normalization(livetime, run_mode = '1BB'): - return livetime - -# note this returns CosmicLivetime not # of generated events -def corsika_onspill_normalization(livetime, run_mode = '1BB'): - return livetime - - -#-------------------------------------------------------------------------------------# -# INVERTED NORMALIZATION FUNCTIONS: Given reconstructed event counts, calculate POT -#-------------------------------------------------------------------------------------# - -def pot_for_rmc_events(n_reconstructed, internal, e_min, k_max=90.1, run_mode='1BB'): - """ - Inverts the RMC normalization: given a number of reconstructed RMC events, - calculate the required Protons on Target (POT). - - Args: - n_reconstructed (float): Number of reconstructed RMC events. - internal (int/bool): Flag (1 or 0) indicating if internal conversion was used. - e_min (float): Minimum energy threshold for spectrum cut (MeV). - k_max (float): Maximum possible RMC energy (MeV). Defaults to 90.1 MeV. - run_mode (str): The operational mode ('1BB' or '2BB'). Defaults to '1BB'. - - Returns: - float: The required Protons on Target (POT). - """ - # Generate the RMC energy spectrum internally using the closure approximation - energies = [] - values = [] - - start_energy = 57.05 - bin_width = 0.1 - num_bins = int((float(k_max) - start_energy) / bin_width) - - for i in range(num_bins): - temp_e = start_energy + i * bin_width - x_fit = temp_e / float(k_max) - spectrum_value = (1 - 2*x_fit + 2*x_fit*x_fit) * x_fit * (1 - x_fit) * (1 - x_fit) - energies.append(temp_e) - values.append(spectrum_value) - - # Calculate normalization (fraction of spectrum above e_min threshold) - total_norm = sum(values) - cut_norm = 0 - - for i in range(len(values)): - bin_center = energies[i] - if (bin_center - bin_width / 2.0) >= float(e_min): - cut_norm += values[i] - - if total_norm == 0: - fraction_sampled = 0.0 - else: - fraction_sampled = cut_norm / total_norm - - # Build the scaling factor - scaling_factor = ( - target_stopped_muons_per_pot * - CAPTURES_PER_STOPPED_MUON * - RMC_GT_57_PER_CAPTURE * - fraction_sampled - ) - - # Apply internal conversion scaling if requested - is_internal_conversion = bool(int(internal)) - if is_internal_conversion: - scaling_factor *= INTERNAL_PER_RMC - - # Avoid division by zero - if scaling_factor == 0: - raise ValueError("Scaling factor is zero. Cannot calculate POT with these parameters.") - - # Invert: POT = n_events / scaling_factor - required_pot = n_reconstructed / scaling_factor - - print(f"RMC: n_events={n_reconstructed}, e_min={e_min}, k_max={k_max}, internal={internal}") - print(f"RMC: fraction_sampled={fraction_sampled}, scaling_factor={scaling_factor:.6e}") - print(f"RMC: required_POT={required_pot:.6e}") - - return required_pot - - -def pot_for_dio_events(n_reconstructed, e_min, run_mode='1BB'): - """ - Inverts the DIO normalization: given a number of reconstructed DIO events, - calculate the required Protons on Target (POT). - - Args: - n_reconstructed (float): Number of reconstructed DIO events. - e_min (float): Minimum energy threshold for the DIO spectrum cut (MeV). - run_mode (str): The operational mode ('1BB' or '2BB'). Defaults to '1BB'. - - Returns: - float: The required Protons on Target (POT). - """ - # Load the DIO energy spectrum data - spectrum_file_path = os.path.join( - os.environ["MUSE_WORK_DIR"], - "Production/JobConfig/ensemble/tables/heeck_finer_binning_2016_szafron.tbl" - ) - - energies = [] - values = [] - - try: - with open(spectrum_file_path, 'r') as spec_file: - for line in spec_file: - if not line.strip() or line.strip().startswith('#'): continue - try: - energy, value = map(float, line.split()) - energies.append(energy) - values.append(value) - except ValueError: - print(f"Warning: Could not parse line in spectrum file: {line.strip()}") - - except FileNotFoundError: - raise FileNotFoundError(f"DIO spectrum file not found at: {spectrum_file_path}") - - # Calculate normalization (fraction of spectrum above e_min) - total_norm = sum(values) - cut_norm = 0 - - for i in range(len(values)): - if energies[i] >= e_min: - cut_norm += values[i] - - if total_norm == 0: - fraction_sampled = 0.0 - else: - fraction_sampled = cut_norm / total_norm - - # Build the scaling factor - scaling_factor = ( - target_stopped_muons_per_pot * - DIO_PER_STOPPED_MUON * - fraction_sampled - ) - - # Avoid division by zero - if scaling_factor == 0: - raise ValueError("Scaling factor is zero. Cannot calculate POT with these parameters.") - - # Invert: POT = n_events / scaling_factor - required_pot = n_reconstructed / scaling_factor - - print(f"DIO: n_events={n_reconstructed}, e_min={e_min}") - print(f"DIO: fraction_sampled={fraction_sampled}, scaling_factor={scaling_factor:.6e}") - print(f"DIO: required_POT={required_pot:.6e}") - - return required_pot - - -def pot_for_rpc_events(n_reconstructed, t_min, internal, e_min, run_mode='1BB'): - """ - Inverts the RPC normalization: given a number of reconstructed RPC events, - calculate the required Protons on Target (POT). - - Handles both standard RPC and internal conversion events based on the 'internal' flag. - - Args: - n_reconstructed (float): Number of reconstructed RPC events. - t_min (float): Minimum time threshold (seconds) (Note: not used in current logic). - internal (int/bool): Flag (1 or 0) to include internal conversion scaling. - e_min (float): Minimum energy threshold for spectrum cut (MeV). - run_mode (str): The operational mode ('1BB' or '2BB'). Defaults to '1BB'. - - Returns: - float: The required Protons on Target (POT). - """ - # Load the RPC energy spectrum data - spectrum_file_path = os.path.join( - os.environ["MUSE_WORK_DIR"], - "Production/JobConfig/ensemble/tables/rpcspectrum.tbl" - ) - - energies = [] - values = [] - - try: - with open(spectrum_file_path, 'r') as spec_file: - for line in spec_file: - if not line.strip() or line.strip().startswith('#'): continue - try: - energy, value = map(float, line.split()) - energies.append(energy) - values.append(value) - except ValueError: - print(f"Warning: Could not parse line in spectrum file: {line.strip()}") - - except FileNotFoundError: - raise FileNotFoundError(f"RPC spectrum file not found at: {spectrum_file_path}") - - # Calculate normalization (fraction of spectrum above e_min) - total_norm = sum(values) - cut_norm = 0 - for i in range(len(values)): - if energies[i] >= float(e_min): - cut_norm += values[i] - - if total_norm == 0: - rpc_e_sample_frac = 0.0 - else: - rpc_e_sample_frac = cut_norm / total_norm - - # Calculate efficiency terms based on simulation globals - filter_efficiency = float(num_pion_filters) / float(num_pion_stops) - survival_probability_weight = float(selected_sum_of_weights) / float(num_pion_resamples) - - # Build the scaling factor - scaling_factor = ( - target_stopped_pions_per_pot * - filter_efficiency * - survival_probability_weight * - RPC_PER_STOPPED_PION * - rpc_e_sample_frac - ) - - # Apply internal conversion scaling if requested - is_internal_conversion = bool(int(internal)) - if is_internal_conversion: - scaling_factor *= INTERNAL_RPC_PER_RPC - - # Avoid division by zero - if scaling_factor == 0: - raise ValueError("Scaling factor is zero. Cannot calculate POT with these parameters.") - - # Invert: POT = n_events / scaling_factor - required_pot = n_reconstructed / scaling_factor - - print(f"RPC: n_events={n_reconstructed}, e_min={e_min}, t_min={t_min}, internal={internal}") - print(f"RPC: fraction_sampled={rpc_e_sample_frac}, scaling_factor={scaling_factor:.6e}") - print(f"RPC: required_POT={required_pot:.6e}") - - return required_pot - - -#-------------------------------------------------------------------------------------# -# RECONSTRUCTION EFFICIENCY CALCULATION -#-------------------------------------------------------------------------------------# - -def get_reco_eff(signal, filelist_path=None, verbose=False): - """ - Calculates the reconstruction efficiency for a given signal process - by counting reconstructed events vs. generated events across ROOT files. - - Args: - signal (str): Name of the signal process (e.g., 'RMC', 'DIO', 'RPC'). - filelist_path (str): Path to the file containing list of ROOT file paths. - If None, assumes a file named 'filenames_{signal}' exists. - verbose (bool): If True, prints progress information. Defaults to False. - - Returns: - float: Reconstruction efficiency (reco_events / gen_events). - Returns 0.0 if gen_events is 0 or files cannot be processed. - """ - # Determine the filelist path - if filelist_path is None: - filelist_path = f"filenames_{signal}" - - # Initialize event counters - reco_events = 0 - gen_events = 0 - - try: - # Open and read the filelist - with open(filelist_path, 'r') as flist: - files = [line.strip() for line in flist if line.strip()] - except FileNotFoundError: - raise FileNotFoundError(f"Filelist not found: {filelist_path}") - - if verbose: - print(f"Processing signal: {signal}") - print(f"Number of files to process: {len(files)}") - - # Loop over files in the list - for fn in files: - if verbose: - print(f" Processing file: {fn}") - - try: - # Open the ROOT file - fin = ROOT.TFile(fn) - - if fin.IsZombie(): - print(f" Warning: Could not open {fn}") - continue - - # Get the Events tree and count reconstructed events - te = fin.Get("Events") - if te: - n_entries = te.GetEntries() - reco_events += n_entries - if verbose: - print(f" Reco events in file: {n_entries}, cumulative: {reco_events}") - - # Get the SubRuns tree for generated event count - t_subruns = fin.Get("SubRuns") - if t_subruns: - # Find the GenEventCount branch - bl = t_subruns.GetListOfBranches() - branch_name = "" - - for i in range(bl.GetEntries()): - if bl[i].GetName().startswith("mu2e::GenEventCount"): - branch_name = bl[i].GetName() - break - - # Sum up generated events - if branch_name: - for i in range(t_subruns.GetEntries()): - t_subruns.GetEntry(i) - gen_count_obj = getattr(t_subruns, branch_name) - gen_events += gen_count_obj.product().count() - else: - if verbose: - print(f" Warning: GenEventCount branch not found in SubRuns tree") - - fin.Close() - - except Exception as e: - print(f" Error processing {fn}: {str(e)}") - continue - - # Calculate reconstruction efficiency - if gen_events == 0: - if verbose: - print("Warning: No generated events found. Returning 0.0") - return 0.0 - - reco_eff = reco_events / gen_events - - if verbose: - print(f"\nSummary for {signal}:") - print(f" Total reco events: {reco_events}") - print(f" Total gen events: {gen_events}") - print(f" Reconstruction efficiency: {reco_eff:.6f}") - - return reco_eff - - -if __name__ == '__main__': - tst_1BB = get_pot(9.52e6) - tst_2BB = get_pot(1.58e6) - print("SU2020 POT:", tst_1BB, tst_2BB) \ No newline at end of file From 0a1018c16baab769153cf0108983db55f92061f4 Mon Sep 17 00:00:00 2001 From: sophieMu2e Date: Fri, 27 Feb 2026 14:23:06 -0600 Subject: [PATCH 10/14] moved to pylogger --- pyutils/pydask.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/pyutils/pydask.py b/pyutils/pydask.py index 9c88da4..0b5f16d 100644 --- a/pyutils/pydask.py +++ b/pyutils/pydask.py @@ -17,15 +17,12 @@ from __future__ import annotations from typing import List, Optional, Dict, Tuple -import logging import awkward as ak from dask import delayed from dask.distributed import Client, progress from .pyprocess import _worker_func, Processor -LOGGER = logging.getLogger("pyutils.pydask") - class DaskProcessor: """Processor-like class that uses Dask for parallel file processing. @@ -139,11 +136,11 @@ def _wrap(fname): try: if scheduler_address: client = Client(scheduler_address) - LOGGER.info(f"Connected to Dask scheduler at {scheduler_address}") + self._base.logger.log(f"Connected to Dask scheduler at {scheduler_address}", "info") else: client = Client(n_workers=n_workers, threads_per_worker=threads_per_worker, processes=processes) created_client = True - LOGGER.info(f"Started local Dask client: {client}") + self._base.logger.log(f"Started local Dask client: {client}", "info") # Create delayed tasks tasks = [delayed(worker_func)(fname) for fname in file_list] From 054c53cd2dad790adce75fd8222a7569a144554c Mon Sep 17 00:00:00 2001 From: sophieMu2e Date: Fri, 27 Feb 2026 15:25:16 -0600 Subject: [PATCH 11/14] removed notebook, need to make more notebook examples in future PR --- examples/notebooks/pyutils_basics_dask.ipynb | 588 ------------------- 1 file changed, 588 deletions(-) delete mode 100644 examples/notebooks/pyutils_basics_dask.ipynb diff --git a/examples/notebooks/pyutils_basics_dask.ipynb b/examples/notebooks/pyutils_basics_dask.ipynb deleted file mode 100644 index 98e6b7a..0000000 --- a/examples/notebooks/pyutils_basics_dask.ipynb +++ /dev/null @@ -1,588 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "750b4f5c", - "metadata": {}, - "source": [ - "# Getting Started: pyutils Basics with Dask\n", - "\n", - "## Introduction\n", - "\n", - "This tutorial builds on the basic `pyutils` functionality from [pyutils_basics.ipynb](pyutils_basics.ipynb) but focuses on **parallel processing** of multiple files using **DaskProcessor**.\n", - "\n", - "You will learn how to:\n", - "- Use `DaskProcessor` to process multiple files in parallel\n", - "- Apply the same analysis to aggregated data from many files\n", - "- Scale from a single file to thousands of files without code changes\n", - "- Leverage multi-core systems and HPC clusters\n", - "\n", - "## Key Difference from Serial Processing\n", - "\n", - "| Aspect | Standard `Processor` | `DaskProcessor` |\n", - "|--------|----------------------|-----------------|\n", - "| **Best For** | Single file or small file lists | Multiple files / large datasets |\n", - "| **Parallelization** | Thread pool on single machine | Dask distributed framework |\n", - "| **Scaling** | Limited to machine cores | Scales to clusters |\n", - "| **Progress Tracking** | Basic logging | Real-time progress bar |\n", - "\n", - "## Table of Contents\n", - "1. Setting up your environment\n", - "2. Creating a file list for multi-file processing\n", - "3. Processing data with DaskProcessor\n", - "4. Applying selection cuts to aggregated data\n", - "5. Inspecting aggregated data\n", - "6. Performing vector operations\n", - "7. Creating plots from aggregated results\n", - "8. Complete example with multiple files" - ] - }, - { - "cell_type": "markdown", - "id": "83ae7651", - "metadata": {}, - "source": [ - "## 1. Setting Up Your Environment" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a2c2364e", - "metadata": {}, - "outputs": [], - "source": [ - "# Import external packages\n", - "import awkward as ak\n", - "import numpy as np\n", - "\n", - "# Import pyutils modules\n", - "from pyutils.pydask import DaskProcessor\n", - "from pyutils.pyselect import Select\n", - "from pyutils.pyprint import Print\n", - "from pyutils.pyvector import Vector\n", - "from pyutils.pyplot import Plot\n", - "from pyutils.pylogger import Logger\n", - "\n", - "# Initialize logger for notebook output\n", - "logger = Logger(print_prefix=\"[pyutils_dask]\", verbosity=2)" - ] - }, - { - "cell_type": "markdown", - "id": "8066b44f", - "metadata": {}, - "source": [ - "## 2. Creating a File List for Multi-File Processing\n", - "\n", - "When working with multiple files, you need to create a file list. Each line in the file should contain the full path to a ROOT file." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e337bf4c", - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "\n", - "# Load the MDS3a.txt file list from the repository\n", - "notebook_dir = os.getcwd()\n", - "file_list_path = os.path.join(notebook_dir, \"../../MDS3a.txt\")\n", - "\n", - "# Read the file list\n", - "if os.path.exists(file_list_path):\n", - " with open(file_list_path, 'r') as f:\n", - " sample_files = [line.strip() for line in f if line.strip()]\n", - " \n", - " logger.log(f\"Loaded file list from: MDS3a.txt\", \"success\")\n", - " logger.log(f\"Total files available: {len(sample_files)}\", \"info\")\n", - "else:\n", - " logger.log(\"MDS3a.txt not found, creating empty list\", \"warning\")\n", - " sample_files = []\n", - "\n", - "# Display first few files\n", - "logger.log(\"First 3 files in the list:\", \"info\")\n", - "for i, f in enumerate(sample_files[:3]):\n", - " logger.log(f\" {i+1}. {f.split('/')[-1]}\", \"info\")" - ] - }, - { - "cell_type": "markdown", - "id": "12260f2d", - "metadata": {}, - "source": [ - "## 3. Processing Data with DaskProcessor\n", - "\n", - "Now process all files in parallel using DaskProcessor. This demonstrates the key advantage of Dask: as your file list grows from 1 to 1000s of files, the same code automatically scales across available cores or connects to a remote HPC cluster." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9c1f22bd", - "metadata": {}, - "outputs": [], - "source": [ - "# Initialize DaskProcessor with remote settings for multi-file processing\n", - "processor = DaskProcessor(\n", - " tree_path=\"EventNtuple/ntuple\",\n", - " use_remote=True, # Access remote persistent datasets\n", - " location=\"disk\", # Read from disk storage\n", - " verbosity=1,\n", - " worker_verbosity=0\n", - ")\n", - "\n", - "logger.log(\"DaskProcessor initialized\", \"success\")\n", - "logger.log(\"Ready to process multiple files in parallel\", \"info\")\n", - "\n", - "# Define branches to extract\n", - "branches = [\"trksegs\"]\n", - "\n", - "logger.log(f\"Branches to extract: {branches}\", \"info\")\n", - "logger.log(\"Reading from persistent dataset (disk location)\", \"info\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "acbd14c7", - "metadata": {}, - "outputs": [], - "source": [ - "# Process data using DaskProcessor with multiple files in parallel\n", - "logger.log(\"Processing multiple files with DaskProcessor...\", \"info\")\n", - "logger.log(f\"Total files to process: {len(sample_files)}\", \"info\")\n", - "\n", - "try:\n", - " if sample_files and file_list_path:\n", - " logger.log(\"Using DaskProcessor with multi-file parallel processing\", \"info\")\n", - " \n", - " # Process all files in parallel\n", - " data = processor.process_data(\n", - " file_list_path=file_list_path,\n", - " branches=branches,\n", - " n_workers=4, # Use 4 parallel workers\n", - " threads_per_worker=1, # 1 thread per worker\n", - " processes=False, # Use threads (not processes)\n", - " show_progress=True # Show progress bar during processing\n", - " )\n", - " \n", - " else:\n", - " logger.log(\"File list not available, processing single file for demo\", \"warning\")\n", - " \n", - " from pyutils.pyprocess import Processor\n", - " demo_processor = Processor(\n", - " verbosity=1,\n", - " use_remote=True,\n", - " location=\"disk\"\n", - " )\n", - " \n", - " # Use first file from MDS3a.txt list\n", - " if sample_files:\n", - " demo_file = sample_files[0]\n", - " logger.log(f\"Processing first file from MDS3a.txt: {demo_file.split('/')[-1]}\", \"info\")\n", - " else:\n", - " demo_file = \"/pnfs/mu2e/tape/phy-nts/nts/mu2e/MDS2ac-OnSpillTriggered/MDC2020aw_perfect_v1_3/root/8c/0b/nts.mu2e.MDS2ac-OnSpillTriggered.MDC2020aw_perfect_v1_3.0.root\"\n", - " logger.log(\"Using fallback file for demo\", \"warning\")\n", - " \n", - " data = demo_processor.process_data(\n", - " file_name=demo_file,\n", - " branches=branches\n", - " )\n", - " \n", - " logger.log(\"Data aggregation complete\", \"success\")\n", - " logger.log(f\"Total events from all files: {len(data)}\", \"info\")\n", - " \n", - "except Exception as e:\n", - " logger.log(f\"Error during processing: {e}\", \"error\")\n", - " logger.log(\"Check that Mu2e environment is properly initialized\", \"warning\")" - ] - }, - { - "cell_type": "markdown", - "id": "050d8435", - "metadata": {}, - "source": [ - "## 4. Applying Selection Cuts to Aggregated Data\n", - "\n", - "After processing all files with DaskProcessor, apply selection cuts to the combined dataset. The workflow is identical to the serial case." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "75402889", - "metadata": {}, - "outputs": [], - "source": [ - "# Initialize selector\n", - "selector = Select(verbosity=1)\n", - "\n", - "# Select track segments at tracker entrance\n", - "logger.log(\"Selecting tracks at tracker entrance...\", \"info\")\n", - "\n", - "at_trkent = selector.select_surface(\n", - " data=data,\n", - " surface_name=\"TT_Front\"\n", - ")\n", - "\n", - "# Add selection mask to data\n", - "data[\"at_trkent\"] = at_trkent\n", - "\n", - "# Apply mask\n", - "trkent = data[at_trkent]\n", - "\n", - "logger.log(f\"Selected {len(trkent)} events at tracker entrance\", \"success\")\n", - "logger.log(f\"Selection efficiency: {100*len(trkent)/len(data):.1f}%\", \"info\")" - ] - }, - { - "cell_type": "markdown", - "id": "1e82415f", - "metadata": {}, - "source": [ - "## 5. Inspecting Aggregated Data\n", - "\n", - "Verify the data structure and cuts using the Print utility." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "706a9762", - "metadata": {}, - "outputs": [], - "source": [ - "# Initialize printer\n", - "printer = Print(verbose=False)\n", - "\n", - "# Display data structure after selection\n", - "logger.log(\"Data structure at tracker entrance:\", \"info\")\n", - "printer.print_n_events(trkent, n_events=1)" - ] - }, - { - "cell_type": "markdown", - "id": "8ea902fd", - "metadata": {}, - "source": [ - "## 6. Performing Vector Operations on Aggregated Data\n", - "\n", - "Calculate quantities (like momentum magnitude) from the aggregated data." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2cce3f08", - "metadata": {}, - "outputs": [], - "source": [ - "# Initialize vector processor\n", - "vector = Vector(verbosity=1)\n", - "\n", - "# Calculate momentum magnitude for all tracks\n", - "logger.log(\"Computing momentum magnitude...\", \"info\")\n", - "\n", - "mom_mag = vector.get_mag(\n", - " branch=trkent[\"trksegs\"],\n", - " vector_name=\"mom\"\n", - ")\n", - "\n", - "logger.log(\"Momentum magnitude computed\", \"success\")\n", - "logger.log(f\"Momentum range: {ak.min(ak.flatten(mom_mag, axis=None)):.2f} - {ak.max(ak.flatten(mom_mag, axis=None)):.2f} MeV/c\", \"info\")" - ] - }, - { - "cell_type": "markdown", - "id": "36b8b6ae", - "metadata": {}, - "source": [ - "## 7. Creating Plots from Aggregated Results\n", - "\n", - "Create publication-quality plots from the combined dataset. These plots show aggregated statistics across all processed files." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a2714dce", - "metadata": {}, - "outputs": [], - "source": [ - "# Initialize plotter\n", - "plotter = Plot()\n", - "\n", - "# Flatten arrays for plotting\n", - "time_flat = ak.flatten(trkent[\"trksegs\"][\"time\"], axis=None)\n", - "mom_mag_flat = ak.flatten(mom_mag, axis=None)\n", - "\n", - "logger.log(f\"Preparing plots from {len(time_flat)} track measurements\", \"info\")" - ] - }, - { - "cell_type": "markdown", - "id": "55a2518f", - "metadata": {}, - "source": [ - "### 7.1 Create 1D Histogram: Time Distribution" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e722c894", - "metadata": {}, - "outputs": [ - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mRunning cells with 'Python 3.9.25' requires the ipykernel package.\n", - "\u001b[1;31mCreate a Python Environment with the required packages.\n", - "\u001b[1;31mOr install 'ipykernel' using the command: '/bin/python -m pip install ipykernel -U --user --force-reinstall'" - ] - } - ], - "source": [ - "logger.log(\"Creating 1D histogram of time distribution...\", \"info\")\n", - "\n", - "plotter.plot_1D(\n", - " time_flat,\n", - " nbins=100,\n", - " xmin=450,\n", - " xmax=1695,\n", - " title=\"Time at Tracker Entrance (from Dask-processed Data)\",\n", - " xlabel=\"Fit time at Trk Ent [ns]\",\n", - " ylabel=\"Events per bin\",\n", - " out_path='h1_time_dask.png',\n", - " stat_box=True,\n", - " error_bars=True\n", - ")\n", - "\n", - "logger.log(\"1D histogram created: h1_time_dask.png\", \"success\")" - ] - }, - { - "cell_type": "markdown", - "id": "b028bda6", - "metadata": {}, - "source": [ - "### 7.2 Create 2D Histogram: Momentum vs. Time" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "88f696ed", - "metadata": {}, - "outputs": [], - "source": [ - "logger.log(\"Creating 2D histogram of momentum vs. time...\", \"info\")\n", - "\n", - "plotter.plot_2D(\n", - " x=mom_mag_flat,\n", - " y=time_flat,\n", - " nbins_x=100,\n", - " xmin=85,\n", - " xmax=115,\n", - " nbins_y=100,\n", - " ymin=450,\n", - " ymax=1650,\n", - " title=\"Momentum vs. Time at Tracker Entrance (from Dask-processed Data)\",\n", - " xlabel=\"Fit mom at Trk Ent [MeV/c]\",\n", - " ylabel=\"Fit time at Trk Ent [ns]\",\n", - " out_path='h2_timevmom_dask.png'\n", - ")\n", - "\n", - "logger.log(\"2D histogram created: h2_timevmom_dask.png\", \"success\")" - ] - }, - { - "cell_type": "markdown", - "id": "cb31e903", - "metadata": {}, - "source": [ - "## 8. Complete Example with Multiple Files\n", - "\n", - "Here's a complete working example showing how to scale from a single file to many files using DaskProcessor. The same analysis code works for any number of files." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "45655cf9", - "metadata": {}, - "outputs": [], - "source": [ - "\"\"\"\n", - "COMPLETE EXAMPLE: Multi-File Analysis with DaskProcessor\n", - "\n", - "The following code is a template for analyzing multiple files.\n", - "Replace file_list_path with your actual file list to run the analysis.\n", - "\n", - "Key features:\n", - "- Processes multiple files in parallel using Dask\n", - "- Same analysis code as above - just swap the Processor call\n", - "- Automatically scales to available cores/clusters\n", - "- Built-in progress monitoring\n", - "\"\"\"\n", - "\n", - "def complete_dask_analysis(file_list_path, branches, n_workers=4):\n", - " \"\"\"\n", - " Complete workflow for multi-file analysis with DaskProcessor.\n", - " \n", - " Parameters:\n", - " file_list_path (str): Path to file containing list of ROOT files\n", - " branches (list): List of branches to extract\n", - " n_workers (int): Number of Dask workers to use\n", - " \n", - " Returns:\n", - " dict: Results including plots and statistics\n", - " \"\"\"\n", - " \n", - " # 1. INITIALIZE\n", - " processor = DaskProcessor(tree_path=\"EventNtuple/ntuple\", verbosity=1)\n", - " selector = Select(verbosity=0)\n", - " vector = Vector(verbosity=0)\n", - " plotter = Plot()\n", - " \n", - " # 2. PROCESS DATA - This is where DaskProcessor scales across files!\n", - " data = processor.process_data(\n", - " file_list_path=file_list_path,\n", - " branches=branches,\n", - " n_workers=n_workers,\n", - " threads_per_worker=1,\n", - " processes=False,\n", - " show_progress=True # Progress bar during processing\n", - " )\n", - " \n", - " if data is None:\n", - " print(\"Error: No data returned from processing\")\n", - " return None\n", - " \n", - " # 3. APPLY SELECTIONS\n", - " at_trkent = selector.select_surface(data=data, surface_name=\"TT_Front\")\n", - " trkent = data[at_trkent]\n", - " \n", - " # 4. COMPUTE QUANTITIES\n", - " mom_mag = vector.get_mag(branch=trkent[\"trksegs\"], vector_name=\"mom\")\n", - " \n", - " # 5. CREATE PLOTS\n", - " time_flat = ak.flatten(trkent[\"trksegs\"][\"time\"], axis=None)\n", - " mom_mag_flat = ak.flatten(mom_mag, axis=None)\n", - " \n", - " # 1D plot\n", - " plotter.plot_1D(\n", - " time_flat, nbins=100, xmin=450, xmax=1695,\n", - " title=\"Time Distribution\", xlabel=\"Time [ns]\",\n", - " ylabel=\"Events\", out_path='time_dask.png'\n", - " )\n", - " \n", - " # 2D plot\n", - " plotter.plot_2D(\n", - " x=mom_mag_flat, y=time_flat,\n", - " nbins_x=100, xmin=85, xmax=115,\n", - " nbins_y=100, ymin=450, ymax=1650,\n", - " title=\"Momentum vs. Time\", \n", - " xlabel=\"Momentum [MeV/c]\", ylabel=\"Time [ns]\",\n", - " out_path='momentum_time_dask.png'\n", - " )\n", - " \n", - " # 6. RETURN RESULTS\n", - " return {\n", - " 'total_events': len(data),\n", - " 'selected_events': len(trkent),\n", - " 'efficiency': len(trkent) / len(data),\n", - " 'mom_min': ak.min(mom_mag_flat),\n", - " 'mom_max': ak.max(mom_mag_flat),\n", - " 'time_min': ak.min(time_flat),\n", - " 'time_max': ak.max(time_flat),\n", - " }\n", - "\n", - "\n", - "# Example usage (uncomment and modify for real analysis):\n", - "# \n", - "# # Create your file list (one file per line)\n", - "# file_list = \"/path/to/file_list.txt\"\n", - "# \n", - "# # Run analysis\n", - "# results = complete_dask_analysis(\n", - "# file_list_path=file_list,\n", - "# branches=[\"trksegs\"],\n", - "# n_workers=4\n", - "# )\n", - "# \n", - "# # Print results\n", - "# if results:\n", - "# print(f\"Total events: {results['total_events']}\")\n", - "# print(f\"Selected events: {results['selected_events']}\")\n", - "# print(f\"Selection efficiency: {100 * results['efficiency']:.1f}%\")\n", - "\n", - "logger.log(\"Complete example function defined\", \"success\")\n", - "logger.log(\"See commented code above for usage instructions\", \"info\")" - ] - }, - { - "cell_type": "markdown", - "id": "5cc8d550", - "metadata": {}, - "source": [ - "## Key Takeaways\n", - "\n", - "### When to Use DaskProcessor\n", - "\n", - "Use **DaskProcessor** (this tutorial) when:\n", - "- ✓ Processing multiple files (10s, 100s, or 1000s)\n", - "- ✓ You want progress monitoring across files\n", - "- ✓ You want automatic scaling to available cores\n", - "- ✓ You plan to connect to an HPC cluster later\n", - "- ✓ You need resilience to transient failures\n", - "\n", - "Use **Standard Processor** when:\n", - "- ✓ Working with a single file\n", - "- ✓ Processing a small number of files (< 5)\n", - "- ✓ Simpler debugging is needed\n", - "- ✓ Faster startup time is important\n", - "\n", - "### Workflow Comparison\n", - "\n", - "```\n", - "STANDARD PROCESSOR DASK PROCESSOR\n", - "────────────────────────── ──────────────────────────\n", - "File 1 → Process File 1 ─┐\n", - "File 2 → Process or File 2 ─┼→ Parallel Processing\n", - "File 3 → Process File 3 ─┘\n", - " (scales across cores/cluster)\n", - "\n", - "Same analysis code after processing!\n", - "```\n", - "\n", - "### Scaling Path\n", - "\n", - "1. **Single File**: Use standard `Processor` for development\n", - "2. **Multiple Files**: Switch to `DaskProcessor` with local workers\n", - "3. **Large Scale**: Point to remote Dask scheduler on HPC cluster\n", - "4. **Code Change**: None! Just change the scheduler address\n", - "\n", - "The real power of DaskProcessor is that you write your analysis once, and it scales effortlessly from your laptop to a full cluster." - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "name": "python", - "version": "3.9.25" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} From cfd211baa3d03731231bde96411b28a646d770ac Mon Sep 17 00:00:00 2001 From: sophieMu2e Date: Fri, 27 Feb 2026 15:39:10 -0600 Subject: [PATCH 12/14] edited README is pydask information --- README.md | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/README.md b/README.md index 4fed22e..4366075 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,7 @@ The suite consists of the following modules. ```python pyread # Data reading pyprocess # Listing and parallelisation +pydask # Dask-based distributed processing pyimport # TTree (EventNtuple) importing interface pyplot # Plotting and visualisation pyprint # Array visualisation @@ -79,6 +80,50 @@ replacing the port (8888) with your chosen number and the user with your usernam To connect to the notebook copy the URL with the unique token printed in the terminal of the mu2e machine into your local browser. +### 2.1a Parallel Processing: `pyprocess` vs `pydask` + +`pyutils` currently provides two parallel processing options: + +**`pyprocess`** (ThreadPoolExecutor/ProcessPoolExecutor): +- Uses Python's built-in `concurrent.futures` for parallelisation +- Best for: Small to medium datasets, local processing on single machine +- Simpler to use, less overhead +- Limited to resources available on your machine + +**`pydask`** (Dask-based): +- Uses Dask distributed computing framework +- Best for: Large datasets, leveraging clusters, EAF integration +- Supports both local and remote Dask schedulers +- Better for scaling to many workers across multiple machines + +#### Using `pydask` Locally + +```python +from pyutils.pydask import DaskProcessor + +# Create processor +dp = DaskProcessor( + tree_path="EventNtuple/ntuple", + use_remote=True, + location="disk" +) + +# Process data - automatically creates local Dask cluster +data = dp.process_data( + file_list_path="files.txt", + branches=["trksegs"], + n_workers=4, + threads_per_worker=1, + processes=True # Use processes instead of threads +) +``` + +This creates a temporary local Dask cluster with 4 workers, processes the files, then shuts down. + +#### Using `pydask` on EAF with Remote Scheduler + +We are in conversations with EAF team. We are currently not able to use a remote, centralized scheduler. Contact Sophie or Sam for more information on the progress of these conversations. + ### 2.2 Module documentation Help information be accessed with `help(name)`, where `name` can be the module name, a class name, or a function name. From af84b16c6921acd2417a3181ad5028d39308af6d Mon Sep 17 00:00:00 2001 From: sophieMu2e Date: Fri, 27 Feb 2026 15:39:13 -0600 Subject: [PATCH 13/14] edited README is pydask information --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4366075..08a523a 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ The suite consists of the following modules. ```python pyread # Data reading pyprocess # Listing and parallelisation -pydask # Dask-based distributed processing +pydask # Dask-based distributed processing (inherits from pyprocess.py) pyimport # TTree (EventNtuple) importing interface pyplot # Plotting and visualisation pyprint # Array visualisation From e80efd2de99413071e8d63a92693e0e7a4ad5ef7 Mon Sep 17 00:00:00 2001 From: sophieMu2e Date: Sat, 28 Feb 2026 16:38:57 -0600 Subject: [PATCH 14/14] edits --- examples/scripts/pyutils_basics_dask.py | 372 ++++++++++++------------ setup.py | 2 +- 2 files changed, 180 insertions(+), 194 deletions(-) diff --git a/examples/scripts/pyutils_basics_dask.py b/examples/scripts/pyutils_basics_dask.py index 880c26e..953cb7d 100644 --- a/examples/scripts/pyutils_basics_dask.py +++ b/examples/scripts/pyutils_basics_dask.py @@ -63,211 +63,200 @@ logger.log("Branches to extract: " + str(branches), "info") # For demonstration, show the API for multi-file processing -logger.log("\nMulti-File Processing Example:", "info") +logger.log("\nDaskProcessor with SAM Definition:", "info") logger.log(""" -To process multiple files, use a file list with DaskProcessor: +DaskProcessor can retrieve files from SAM definitions for parallel processing: -1. Prepare a file list (one file path per line): - The repository includes MDS3a.txt with persistent dataset files +- SAM definition: "nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.root" +- Queries files dynamically from the data catalog +- DaskProcessor creates a local cluster to process files in parallel -2. Process with DaskProcessor: - - processor = DaskProcessor( - tree_path="EventNtuple/ntuple", - use_remote=True, # Access remote persistent datasets - location="disk" # Read from disk storage - ) - - data = processor.process_data( - file_list_path="MDS3a.txt", - branches=branches, - n_workers=4, # Use 4 parallel workers - show_progress=True # Show progress bar - ) - -Advantages over Processor: +Advantages: +- Works with SAM definitions for dynamic file queries +- Can also use file_list_path for static file lists - Scales across multiple cores automatically -- Easy to add more files without code changes - Built-in progress monitoring -- Can connect to remote Dask clusters +- Can connect to remote Dask clusters on EAF """, "info") -# Create a sample file list for demonstration -logger.log("\nCreating sample file list for demonstration...", "info") - -# Use the MDS3a.txt file list provided in the repository -import os -script_dir = os.path.dirname(os.path.abspath(__file__)) -file_list_path = os.path.join(script_dir, "../../MDS3a.txt") - -# Verify file exists -if os.path.exists(file_list_path): - with open(file_list_path, 'r') as f: - sample_files = [line.strip() for line in f if line.strip()] - - logger.log(f"Loaded file list from: {file_list_path}", "success") - logger.log(f"Total files in list: {len(sample_files)}", "info") - logger.log(f"First file: {sample_files[0][-80:]}", "info") -else: - logger.log(f"File list not found at: {file_list_path}", "warning") - logger.log("Using empty file list for demo", "info") - sample_files = [] - file_list_path = None - # ============================================================================ -# 3. Processing Single File (Demo) +# 3. Processing Multiple Files with SAM Definition # ============================================================================ logger.log("\n" + "=" * 70, "info") -logger.log("Step 2: Processing Multiple Files with DaskProcessor", "info") +logger.log("Step 2: Retrieving File List with get_file_list()", "info") logger.log("=" * 70, "info") -logger.log(f"Processing {len(sample_files)} files from MDS3a.txt with DaskProcessor...", "info") +# Use get_file_list() to retrieve files from SAM definition +logger.log("Retrieving file list from SAM definition...", "info") -try: - # Use DaskProcessor to load and process multiple files in parallel - if sample_files and file_list_path: - logger.log("Using DaskProcessor with multi-file processing", "info") - - data = processor.process_data( - file_list_path=file_list_path, - branches=branches, - n_workers=4, # Use 4 parallel workers - show_progress=True # Show progress bar - ) - - else: - logger.log("File list not available, cannot process multiple files", "warning") - logger.log("Skipping analysis", "info") - raise Exception("MDS3a.txt file list required for this example") - - logger.log("Data aggregation complete", "success") - logger.log(f"Total events from all files: {len(data)}", "info") - - # ======================================================================== - # 4. Applying Selection Cuts - # ======================================================================== - - logger.log("\n" + "=" * 70, "info") - logger.log("Step 3: Applying Selection Cuts", "info") - logger.log("=" * 70, "info") - - selector = Select(verbosity=1) - - logger.log("Selecting track segments at tracker entrance (TT_Front)...", "info") - - # Create a mask to select track segments at the tracker entrance - at_trkent = selector.select_surface( - data=data, - surface_name="TT_Front" # Tracker entrance - ) - - # Add the mask to the data array - data["at_trkent"] = at_trkent - - # Apply the mask - trkent = data[at_trkent] - - logger.log(f"Selected {len(trkent)} events at tracker entrance", "success") - - # ======================================================================== - # 5. Inspecting Your Data - # ======================================================================== - - logger.log("\n" + "=" * 70, "info") - logger.log("Step 4: Inspecting Data", "info") - logger.log("=" * 70, "info") - - printer = Print(verbose=False) - - logger.log("Data structure at tracker entrance:", "info") - printer.print_n_events(trkent, n_events=1) - - # ======================================================================== - # 6. Performing Vector Operations - # ======================================================================== - - logger.log("\n" + "=" * 70, "info") - logger.log("Step 5: Performing Vector Operations", "info") - logger.log("=" * 70, "info") - - vector = Vector(verbosity=1) - - logger.log("Computing momentum magnitude...", "info") +file_list = processor.get_file_list( + defname="nts.mu2e.ensembleMDS3aMix1BBTriggered.MDC2025-001.root" +) + +if file_list and len(file_list) > 0: + logger.log(f"Retrieved {len(file_list)} files from SAM definition", "success") + logger.log(f"First file: {file_list[0][-80:]}", "info") - mom_mag = vector.get_mag( - branch=trkent["trksegs"], - vector_name="mom" - ) + # Save to temporary file for use with process_data + import tempfile + with tempfile.NamedTemporaryFile(mode='w', suffix='.txt', delete=False) as tmp: + for f in file_list: + tmp.write(f + '\n') + temp_file_list = tmp.name - logger.log("Momentum magnitude computed", "success") + logger.log(f"Saved file list to temporary file: {temp_file_list}", "info") - # ======================================================================== - # 7. Creating Plots - # ======================================================================== + # ==================================================================== + # 4. Processing Multiple Files with DaskProcessor + # ==================================================================== logger.log("\n" + "=" * 70, "info") - logger.log("Step 6: Creating Plots", "info") + logger.log("Step 3: Processing Multiple Files with DaskProcessor", "info") logger.log("=" * 70, "info") - plotter = Plot() - - # Flatten arrays for plotting - time_flat = ak.flatten(trkent["trksegs"]["time"], axis=None) - mom_mag_flat = ak.flatten(mom_mag, axis=None) - - logger.log(f"Time values to plot: {len(time_flat)}", "info") - logger.log(f"Momentum values to plot: {len(mom_mag_flat)}", "info") - - # 1D Histogram: Time distribution - logger.log("Creating 1D histogram of time distribution...", "info") - - plotter.plot_1D( - time_flat, - nbins=100, - xmin=450, - xmax=1695, - title="Time at Tracker Entrance (Dask Example)", - xlabel="Fit time at Trk Ent [ns]", - ylabel="Events per bin", - out_path='h1_time_dask.png', - stat_box=True, - error_bars=True - ) - - logger.log("1D histogram created: h1_time_dask.png", "success") - - # 2D Histogram: Momentum vs. Time - logger.log("Creating 2D histogram of momentum vs. time...", "info") - - plotter.plot_2D( - x=mom_mag_flat, - y=time_flat, - nbins_x=100, - xmin=85, - xmax=115, - nbins_y=100, - ymin=450, - ymax=1650, - title="Momentum vs. Time at Tracker Entrance (Dask Example)", - xlabel="Fit mom at Trk Ent [MeV/c]", - ylabel="Fit time at Trk Ent [ns]", - out_path='h2_timevmom_dask.png' - ) - - logger.log("2D histogram created: h2_timevmom_dask.png", "success") - - # ======================================================================== - # Summary - # ======================================================================== + logger.log("Starting parallel processing with DaskProcessor...", "info") - logger.log("\n" + "=" * 70, "info") - logger.log("SUMMARY", "info") - logger.log("=" * 70, "info") - - summary = f""" + try: + data = processor.process_data( + file_list_path=temp_file_list, + branches=branches, + n_workers=4, # Use 4 parallel workers + show_progress=True # Show progress bar + ) + + logger.log("Data aggregation complete", "success") + logger.log(f"Total events from all files: {len(data)}", "info") + + # Clean up temp file + import os + os.unlink(temp_file_list) + logger.log("Cleaned up temporary file", "info") + + # ==================================================================== + # 5. Applying Selection Cuts + # ==================================================================== + + logger.log("\n" + "=" * 70, "info") + logger.log("Step 4: Applying Selection Cuts", "info") + logger.log("=" * 70, "info") + + selector = Select(verbosity=1) + + logger.log("Selecting track segments at tracker entrance (TT_Front)...", "info") + + # Create a mask to select track segments at the tracker entrance + at_trkent = selector.select_surface( + data=data, + surface_name="TT_Front" # Tracker entrance + ) + + # Add the mask to the data array + data["at_trkent"] = at_trkent + + # Apply the mask + trkent = data[at_trkent] + + logger.log(f"Selected {len(trkent)} events at tracker entrance", "success") + + # ==================================================================== + # 6. Inspecting Your Data + # ==================================================================== + + logger.log("\n" + "=" * 70, "info") + logger.log("Step 5: Inspecting Data", "info") + logger.log("=" * 70, "info") + + printer = Print(verbose=False) + + logger.log("Data structure at tracker entrance:", "info") + printer.print_n_events(trkent, n_events=1) + + # ==================================================================== + # 7. Performing Vector Operations + # ==================================================================== + + logger.log("\n" + "=" * 70, "info") + logger.log("Step 6: Performing Vector Operations", "info") + logger.log("=" * 70, "info") + + vector = Vector(verbosity=1) + + logger.log("Computing momentum magnitude...", "info") + + mom_mag = vector.get_mag( + branch=trkent["trksegs"], + vector_name="mom" + ) + + logger.log("Momentum magnitude computed", "success") + + # ==================================================================== + # 8. Creating Plots + # ==================================================================== + + logger.log("\n" + "=" * 70, "info") + logger.log("Step 7: Creating Plots", "info") + logger.log("=" * 70, "info") + + plotter = Plot() + + # Flatten arrays for plotting + time_flat = ak.flatten(trkent["trksegs"]["time"], axis=None) + mom_mag_flat = ak.flatten(mom_mag, axis=None) + + logger.log(f"Time values to plot: {len(time_flat)}", "info") + logger.log(f"Momentum values to plot: {len(mom_mag_flat)}", "info") + + # 1D Histogram: Time distribution + logger.log("Creating 1D histogram of time distribution...", "info") + + plotter.plot_1D( + time_flat, + nbins=100, + xmin=450, + xmax=1695, + title="Time at Tracker Entrance (Dask Example)", + xlabel="Fit time at Trk Ent [ns]", + ylabel="Events per bin", + out_path='h1_time_dask.png', + stat_box=True, + error_bars=True + ) + + logger.log("1D histogram created: h1_time_dask.png", "success") + + # 2D Histogram: Momentum vs. Time + logger.log("Creating 2D histogram of momentum vs. time...", "info") + + plotter.plot_2D( + x=mom_mag_flat, + y=time_flat, + nbins_x=100, + xmin=85, + xmax=115, + nbins_y=100, + ymin=450, + ymax=1650, + title="Momentum vs. Time at Tracker Entrance (Dask Example)", + xlabel="Fit mom at Trk Ent [MeV/c]", + ylabel="Fit time at Trk Ent [ns]", + out_path='h2_timevmom_dask.png' + ) + + logger.log("2D histogram created: h2_timevmom_dask.png", "success") + + # ==================================================================== + # Summary + # ==================================================================== + + logger.log("\n" + "=" * 70, "info") + logger.log("SUMMARY", "info") + logger.log("=" * 70, "info") + + summary = f""" Multi-File Processing with DaskProcessor: - - Total files processed: {len(sample_files)} + - Total files processed: {len(file_list)} - Total events aggregated: {len(data)} - Events at tracker entrance: {len(trkent)} - Momentum range: {ak.min(mom_mag_flat):.2f} - {ak.max(mom_mag_flat):.2f} MeV/c @@ -285,16 +274,13 @@ ✓ Same output format as standard Processor ✓ Built-in error resilience with retries """ - logger.log(summary, "info") - -except FileNotFoundError: - logger.log("Sample data file not found. The script demonstrates the API.", "warning") - logger.log("\nTo run with real data:", "info") - logger.log("1. Edit the sample_files list with actual file paths", "info") - logger.log("2. Set appropriate file_list_path for multiple files", "info") - logger.log("3. Run: processor.process_data(file_list_path=..., branches=...)", "info") -except Exception as e: - logger.log(f"Error during processing: {e}", "error") - logger.log("Check that Mu2e environment is properly initialized", "warning") + logger.log(summary, "info") + + except FileNotFoundError: + logger.log("SAM definition files not found.", "error") + raise + except Exception as e: + logger.log(f"Error during processing: {e}", "error") + raise logger.log("\nScript completed!", "success") diff --git a/setup.py b/setup.py index 019e09f..ee50f77 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ setup( name="pyutils", - version="1.8.0", + version="1.9.0", author="Sophie Middleton, Samuel Grant, Andrew Edmonds, Leo Borrel", description="Python tools for Mu2e collaborators", url="https://github.com/Mu2e/pyutils",