diff --git a/bind/G4Calo.py b/bind/G4Calo.py index e59c21a..d3470d4 100644 --- a/bind/G4Calo.py +++ b/bind/G4Calo.py @@ -171,6 +171,27 @@ from IPython.display import Image, display from minipandas import MiniFrame +def _get_commit(): + try: + from minicalo_version import commit as _c + return _c + except ImportError: + pass + try: + r = subprocess.run( + ['git', 'rev-parse', '--short', 'HEAD'], + capture_output=True, text=True, + cwd=os.path.dirname(os.path.abspath(__file__)) + ) + if r.returncode == 0: + return r.stdout.strip() + except Exception: + pass + return 'unknown' + +print(f"miniCaloSim: commit {_get_commit()}") + + #### helpers ##### class Stopwatch(object): @@ -238,11 +259,14 @@ def _count_total_entries(root_paths, tree_name: str = "Hits") -> int: total += int(f[tree_name].num_entries) return total -def _assemble_results_to_mini_df(root_paths, tree_name: str = "Hits"): +def _assemble_results_to_mini_df(root_paths, tree_name: str = "Hits", event_id_offsets=None): """ Returns: scalars: dict[col, np.ndarray] # shape (N,) arrays: dict[col, np.ndarray] # shape (N, M[col]) + + event_id_offsets: optional list[int], one per file — added to the + 'event_id' column so that IDs are globally unique across batches. """ # 1) learn schema & sizes from first file scalar_cols, array_cols, array_sizes, dtypes_scalar, dtypes_array, _ = \ @@ -257,19 +281,22 @@ def _assemble_results_to_mini_df(root_paths, tree_name: str = "Hits"): # 4) fill by slices pos = 0 - for p in root_paths: + for file_idx, p in enumerate(root_paths): with uproot.open(p) as f: arr = f[tree_name].arrays(library="ak") n = len(arr) sl = slice(pos, pos + n) for c in scalar_cols: - scalars[c][sl] = np.asarray(arr[c]) + data = np.asarray(arr[c]) + if c == 'event_id' and event_id_offsets is not None: + data = data + event_id_offsets[file_idx] + scalars[c][sl] = data for c in array_cols: arrays[c][sl, :] = ak.to_numpy(arr[c]) # (n, fixed_size) pos += n - + #merge the dicts merged = {**scalars, **arrays} return MiniFrame(merged) @@ -412,6 +439,7 @@ Example #print(f"Running {nEventsLastCore} events on last core") nevents = [nEventsPerCore if i < nCores - 1 else nEventsLastCore for i in range(nCores)] + event_id_offsets = [sum(nevents[:i]) for i in range(nCores)] if manual_seed >= 0: seed = manual_seed @@ -466,7 +494,8 @@ Example try: df = _assemble_results_to_mini_df(rp) if return_steps: - steps_df = _assemble_results_to_mini_df(rp, tree_name="Steps") + steps_df = _assemble_results_to_mini_df(rp, tree_name="Steps", + event_id_offsets=event_id_offsets) finally: for f in tmpfile: if os.path.exists(f): diff --git a/docker/Dockerfile b/docker/Dockerfile index 3b91acf..ef4a2a4 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -101,7 +101,9 @@ RUN cd /root/minicalosim && git checkout $COMMIT && \ mkdir -p build && cd build && rm -rf * && cmake ../ && make -j4 -RUN cp /root/minicalosim/build/minicalo* /root/minicalosim/bind/G4Calo.py /root/minicalosim/bind/minicalo_tools.py /root/minicalosim/bind/minipandas.py /usr/local/lib/python3.10/dist-packages/ +RUN echo "commit = '${COMMIT}'" > /root/minicalosim/bind/minicalo_version.py + +RUN cp /root/minicalosim/build/minicalo* /root/minicalosim/bind/G4Calo.py /root/minicalosim/bind/minicalo_tools.py /root/minicalosim/bind/minipandas.py /root/minicalosim/bind/minicalo_version.py /usr/local/lib/python3.10/dist-packages/ RUN cp /root/minicalosim/bind/G4Calo_exec.py /usr/local/bin/ diff --git a/docker/Dockerfile-cpu b/docker/Dockerfile-cpu index 2c60cf0..6ec54ca 100644 --- a/docker/Dockerfile-cpu +++ b/docker/Dockerfile-cpu @@ -99,7 +99,8 @@ ADD minicalosim /root/minicalosim RUN cd /root/minicalosim && git checkout $COMMIT && \ git submodule update --init lib/pybind11 && \ mkdir -p build && cd build && rm -rf * && cmake ../ && make -j$(nproc) &&\ - cp minicalo* ../bind/G4Calo.py /usr/local/lib/python3.8/dist-packages/ + echo "commit = '${COMMIT}'" > ../bind/minicalo_version.py && \ + cp minicalo* ../bind/G4Calo.py ../bind/minicalo_version.py /usr/local/lib/python3.8/dist-packages/ diff --git a/docker/Dockerfile-mini b/docker/Dockerfile-mini index 004314b..7949860 100644 --- a/docker/Dockerfile-mini +++ b/docker/Dockerfile-mini @@ -52,9 +52,11 @@ RUN cd /root/minicalosim && git checkout $COMMIT && \ cmake --build build --parallel $(nproc) && \ cp build/minicalo*.so /usr/local/lib/python3.10/dist-packages/ -RUN cp /root/minicalosim/bind/G4Calo.py \ +RUN echo "commit = '${COMMIT}'" > /root/minicalosim/bind/minicalo_version.py && \ + cp /root/minicalosim/bind/G4Calo.py \ /root/minicalosim/bind/minicalo_tools.py \ /root/minicalosim/bind/minipandas.py \ + /root/minicalosim/bind/minicalo_version.py \ /usr/local/lib/python3.10/dist-packages/ && \ install -m 755 /root/minicalosim/bind/G4Calo_exec.py /usr/local/bin/G4Calo_exec.py