Skip to content

feat: add file summary - #158

Open
mesmith75 wants to merge 23 commits into
ShipSoft:mainfrom
mesmith75:event_no
Open

mesmith75 wants to merge 23 commits into
ShipSoft:mainfrom
mesmith75:event_no

Conversation

@mesmith75

Copy link
Copy Markdown
Contributor

No description provided.

Mark E Smith and others added 19 commits October 8, 2026 17:42
…ry_service 0.5

data-model 0.6 renamed its fields and helpers to snake_case (detectorId
to detector_id, mothersAreConsistent to mothers_are_consistent and so
on) and moved the unit vocabulary from ship to SHiP. field_service 0.4
and geometry_service 0.5 moved into SHiP as well, with headers under
SHiP/FieldService/ and SHiP/GeometryService/. ship::SHiPGeometryService
is now SHiP::GeometryService.

The C++ sources, the PyROOT checks in scripts/ and the docs use the new
names, and CMake links SHiP::DataModel, SHiP::Units, SHiP::FieldService,
SHiP::FieldServiceG4Adapter, SHiP::FieldServiceMapIO and
SHiP::GeometryService. The pins move to shipdatamodel >=0.6,
field-service >=0.4 and shipgeometryservice >=0.5, which drops the <0.6
cap. The installed aegir config now asks for SHiPDataModel 0.6.

Nothing aegir writes changes on disk: the persisted classes are
data-model's, and their names (SHiP::MCParticle and so on) are the same
in 0.6.

BREAKING CHANGE: aegir needs shipdatamodel >=0.6, field-service >=0.4
and shipgeometryservice >=0.5. Code reading aegir output must use the
snake_case field names.

Assisted-by: Claude Code:claude-opus-5-5
Part of standardising the ShipSoft C++ stack on one top-level SHiP
namespace, after data-model, field_service, geometry_service and
Shannon. Each application nests under SHiP rather than declaring
directly into it.

aegir's own code moves into SHiP::aegir, with the children lower_case
below it: SHiP::aegir::clhep, ::hepmc and ::trace. The Geant4 code that
lived in SHiP::g4 becomes SHiP::aegir::g4, and IGeometrySource moves
from SHiP to SHiP::aegir, so only data-model, field_service and
geometry_service now declare into SHiP itself. The plugin classes stay
in anonymous namespaces, and geant4_module takes the Geant4 helpers it
uses through using-declarations rather than a using-directive.

The installed generator-source helper (aegir/mc_particle_source.hpp,
CMake target aegir::source_helper) keeps its path and target name, but
its declarations are now in SHiP::aegir. aegir-genie reopens namespace
aegir to use it, so it has to move to SHiP::aegir::genie in step;
there is no alias, because an alias cannot be reopened.

Nothing persisted changes: aegir defines no ROOT dictionary of its own,
and the classes it writes are data-model's.

BREAKING CHANGE: aegir's C++ API is in SHiP::aegir rather than aegir,
SHiP::g4 is now SHiP::aegir::g4, and SHiP::IGeometrySource is
SHiP::aegir::IGeometrySource. Code built against
aegir/mc_particle_source.hpp (aegir-genie) has to use the new names.

Assisted-by: Claude Code:claude-opus-5-5
With data-model 0.6, opening aegir 0.4 output (data-model 0.5 classes)
through RNTupleReader::Open(name, path) aborts in ROOT's RFieldMeta
with "fStagingClass->GetClassVersion() == classVersion violated", so
file_source could not re-simulate from existing files. data-model's I/O
rules only apply once the file's streamer infos are known to ROOT, which
needs the file opened through TFile first (root-project/root#23146,
the same workaround data-model's own compatibility test uses).

file_source now opens the TFile, keeps it alive for the reader's
lifetime and attaches the reader to the RNTuple anchor.
plot_muon_momentum.py and compare_rntuples.py open the TFile before
reading too, since they are pointed at existing output.

Checked against a 100-event gun_st_nofield_smoke output written on
2026-10-13 with data-model 0.5: file_source re-simulates five of its
events, and compare_rntuples.py reads it. Before the change file_source
aborts, as does a PyROOT read of the file that skips the TFile.

Assisted-by: Claude Code:claude-opus-5-5
…ry_service 0.5

data-model 0.6 renamed its fields and helpers to snake_case (detectorId
to detector_id, mothersAreConsistent to mothers_are_consistent and so
on) and moved the unit vocabulary from ship to SHiP. field_service 0.4
and geometry_service 0.5 moved into SHiP as well, with headers under
SHiP/FieldService/ and SHiP/GeometryService/. ship::SHiPGeometryService
is now SHiP::GeometryService.

The C++ sources, the PyROOT checks in scripts/ and the docs use the new
names, and CMake links SHiP::DataModel, SHiP::Units, SHiP::FieldService,
SHiP::FieldServiceG4Adapter, SHiP::FieldServiceMapIO and
SHiP::GeometryService. The pins move to shipdatamodel >=0.6,
field-service >=0.4 and shipgeometryservice >=0.5, which drops the <0.6
cap. The installed aegir config now asks for SHiPDataModel 0.6.

Nothing aegir writes changes on disk: the persisted classes are
data-model's, and their names (SHiP::MCParticle and so on) are the same
in 0.6.

BREAKING CHANGE: aegir needs shipdatamodel >=0.6, field-service >=0.4
and shipgeometryservice >=0.5. Code reading aegir output must use the
snake_case field names.

Assisted-by: Claude Code:claude-opus-5-5
Part of standardising the ShipSoft C++ stack on one top-level SHiP
namespace, after data-model, field_service, geometry_service and
Shannon. Each application nests under SHiP rather than declaring
directly into it.

aegir's own code moves into SHiP::aegir, with the children lower_case
below it: SHiP::aegir::clhep, ::hepmc and ::trace. The Geant4 code that
lived in SHiP::g4 becomes SHiP::aegir::g4, and IGeometrySource moves
from SHiP to SHiP::aegir, so only data-model, field_service and
geometry_service now declare into SHiP itself. The plugin classes stay
in anonymous namespaces, and geant4_module takes the Geant4 helpers it
uses through using-declarations rather than a using-directive.

The installed generator-source helper (aegir/mc_particle_source.hpp,
CMake target aegir::source_helper) keeps its path and target name, but
its declarations are now in SHiP::aegir. aegir-genie reopens namespace
aegir to use it, so it has to move to SHiP::aegir::genie in step;
there is no alias, because an alias cannot be reopened.

Nothing persisted changes: aegir defines no ROOT dictionary of its own,
and the classes it writes are data-model's.

BREAKING CHANGE: aegir's C++ API is in SHiP::aegir rather than aegir,
SHiP::g4 is now SHiP::aegir::g4, and SHiP::IGeometrySource is
SHiP::aegir::IGeometrySource. Code built against
aegir/mc_particle_source.hpp (aegir-genie) has to use the new names.

Assisted-by: Claude Code:claude-opus-5-5
With data-model 0.6, opening aegir 0.4 output (data-model 0.5 classes)
through RNTupleReader::Open(name, path) aborts in ROOT's RFieldMeta
with "fStagingClass->GetClassVersion() == classVersion violated", so
file_source could not re-simulate from existing files. data-model's I/O
rules only apply once the file's streamer infos are known to ROOT, which
needs the file opened through TFile first (root-project/root#23146,
the same workaround data-model's own compatibility test uses).

file_source now opens the TFile, keeps it alive for the reader's
lifetime and attaches the reader to the RNTuple anchor.
plot_muon_momentum.py and compare_rntuples.py open the TFile before
reading too, since they are pointed at existing output.

Checked against a 100-event gun_st_nofield_smoke output written on
2026-10-13 with data-model 0.5: file_source re-simulates five of its
events, and compare_rntuples.py reads it. Before the change file_source
aborts, as does a PyROOT read of the file that skips the TFile.

Assisted-by: Claude Code:claude-opus-5-5
ship-random 0.4.0 writes its multiply-adds as std::fma, so the same
seed draws the same bits on every platform and with any compiler flags
(ShipSoft/ship-random#11). Compared with 0.2, inexact uniform(lo, hi) /
uniform53(lo, hi) ranges and gaussian with a nonzero mean can differ in
the last bit on x86-64, so outputs are not bit-identical to runs made
with ship-random 0.2.

Since 0.3, ship-random installs its CMake version file with
SameMinorVersion compatibility, so find_package accepts only the
requested minor. The pixi spec is pinned to >=0.4,<0.5 and moves
together with find_package(SHiPRandom 0.4).

Assisted-by: Claude Code:claude-opus-5-5
@coderabbitai

coderabbitai Bot commented Oct 20, 2026 •

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 6c6e7df0-1ec0-49d9-a9fd-12f2774e6b6b
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants