Overview /

afterburner

github.com/eic/afterburner generatorcore · pass 2026-10-12 · commit 740f6356225f · assessor claude-opus-5-5

The repository has no license (issue #1 open since 2022), no code of conduct, and no citation metadata; 4 of 5 issues opened in 12 months received no response, and one author wrote 52% of commits in 24 months. All default-branch changes in 12 months arrived through reviewed PRs under branch protection, and the latest release (v0.2.1) is packaged in eic-spack and shipped in eic-shell, where it is used in ePIC simulation campaigns.

1.2overall, of 3

Action plan

The smallest steps that raise each criterion to its next level, in priority order. Download as Markdown ·

PriorityEffortCriterionAction
highS com.bus-factor (1) Add .github/CODEOWNERS naming at least two owners for cpp/.
highS com.conduct (1) Add CODE_OF_CONDUCT.md with a reporting contact, or link the ePIC collaboration code of conduct from the README.
highS com.governance (0) Add a "Maintainers" section to the README naming the maintainers, their roles and the owning ePIC working group.
highS com.responsiveness (0) Respond to and label issues
highS eng.static-quality (0) Add .clang-format and .pre-commit-config.yaml with clang-format and enable pre-commit.ci.
highS eng.static-quality (0) Add target_compile_options(... PRIVATE -Wall -Wextra -Wpedantic) to the three targets in cpp/*/CMakeLists.txt.
highS via.citation (0) Add CITATION.cff listing the contributors and enable the Zenodo-GitHub integration.
highS via.license (0) Add a LICENSE file with an OSI-approved license compatible with the bundled LGPL-2.1 gzstream code, agreed by the copyright holders.
mediumS com.contributors (1) Review and merge or close external PRs
mediumS com.responsiveness (0) Close or label the eight issues older than one year (#1,
mediumS dist.dependencies (1) Add VERSION arguments to the find_package calls for HepMC3, yaml-cpp, CLHEP, GSL and ROOT.
mediumS dist.dependencies (1) Replace cpp/external/CLI with find_package(CLI11) and drop the json_struct include path.
mediumS dist.portability (1) Add a CI matrix job building with Clang (CXX=clang++ in eic-shell) or on macos-latest with Homebrew dependencies.
mediumS dist.releases (1) State SemVer in the README and derive the --version string from project(VERSION ...) set to the release tag.
mediumS dist.releases (1) Tag a release at least every six months with generated release notes.
mediumS dist.reproducibility (1) Add a --seed option wired to AfterburnerConfig::random_seed and write the seed and abconv version into the GenRunInfo attributes.
mediumS dist.reproducibility (1) Document in the README the eic-shell release that ships each afterburner release.
mediumS doc.contributing (1) Add CONTRIBUTING.md describing development in eic-shell, the CMake build, running the CI smoke test locally, and PR conventions.
mediumS doc.developer (1) Add a Doxyfile and a GitHub Pages workflow publishing the API docs for cpp/afterburner/*.hh.
mediumS doc.developer (1) Add docs/architecture.md describing the library, converter and histogrammer and their data flow.
mediumS doc.user (1) List every find_package dependency with minimum versions in the README "Installation" section and state that eic-shell provides them.
mediumS doc.user (1) Add a README quick start that generates input with python/gen_hepmc_event.py and runs abconv on it.
mediumS eic.currency (2) Drop the vendored ReaderGZ.h and CLI11 copies in favour of the HepMC3 and CLI11 versions shipped in eic-shell.
mediumS eic.data-model (2) Add an attribute recording the afterburner version and attribute schema version, and a CI test that reads the output back with pyHepMC3 or uproot and checks the attributes.
mediumS eic.environment (2) Add a matrix over platform-release with a pinned eic_xl:<release> and eic_xl:nightly in .github/workflows/linux-eic-shell.yml.
mediumS eic.reuse (1) Remove ReaderGZ.h, gzstream.* and the gz format path, and rely on HepMC3::deduce_reader with HepMC3 built with compression.
mediumS eng.ci (1) Add push: branches: [main] to the on: block of .github/workflows/linux-eic-shell.yml.
mediumS eng.ci (1) Run pytest python/test_abconv.py with TEST_ABCONV_EXE=install/bin/abconv (and ctest once tests are registered) in the "Run test" step.
mediumS eng.modularity (1) Install the afterburner library and its headers with install(TARGETS ... EXPORT) and install(DIRECTORY ...).
mediumS via.support (1) State in the README the ePIC working group that owns afterburner and the maintainers' institutions.
mediumM eng.modularity (1) Move the beam presets from EicConfigurator.cc into YAML files under beam_configs/ loaded at run time (issue
mediumM eng.testing (1) Add Catch2 unit tests under cpp/tests/ for Smearer and Afterburner::process_event (crossing angle and vertex widths per preset) registered with add_test.
mediumM eng.testing (1) Assert in CI that output vertex and angle distributions of the generated sample match expected crossing angle and widths within tolerance.

Assessment by criterion

Code health & engineering practices 1.2

3

Change control & code review eng.change-control

Sustained · confidence medium

All 12 first-parent commits in 12 months came from PRs (the 4 non-merge commits are squash merges of PRs #15, #21, #23 and #26, so the 0.667 metric undercounts), every merged PR was reviewed, branch protection requires one approving review, and the eic organization PR template applies.

Evidence (6)
1

Continuous integration eng.ci

Initial · confidence high

The single workflow builds in eic-shell and runs one end-to-end smoke run on PRs to main, but it has no push trigger, so the default branch is never built, and it runs no test suite.

Evidence (3)

Gaps to the next level

  • The workflow does not run on pushes to main; default-branch success rate cannot be measured.
  • CI checks only that output files exist; no test suite (ctest/pytest) runs.
  • Branch protection has no required status checks.

Actions

  • medium S Add push: branches: [main] to the on: block of .github/workflows/linux-eic-shell.yml.
  • medium S Run pytest python/test_abconv.py with TEST_ABCONV_EXE=install/bin/abconv (and ctest once tests are registered) in the "Run test" step.
1

Testing eng.testing

Initial · confidence high

The only test file checks that abconv --help prints usage and is not run in CI; CI runs one end-to-end conversion and checks only that output files exist, with no unit tests of the afterburner algorithms.

Evidence (4)

Gaps to the next level

  • No unit tests for Afterburner, Smearer or EicConfigurator presets.
  • enable_testing() is called but no tests are registered with CTest.
  • The Pythia8 comparison in python/comparison.ipynb is manual and not automated.

Actions

  • medium M Add Catch2 unit tests under cpp/tests/ for Smearer and Afterburner::process_event (crossing angle and vertex widths per preset) registered with add_test.
  • medium M Assert in CI that output vertex and angle distributions of the generated sample match expected crossing angle and widths within tolerance.
0

Static analysis & consistency eng.static-quality

Absent · confidence high

No formatter, linter, static analyzer or compiler warning flags are configured in the repository or CI.

Evidence (3)

Gaps to the next level

  • No .clang-format, .clang-tidy or pre-commit configuration.
  • No -Wall -Wextra or equivalent warning flags in the CMake files.

Actions

  • high S Add .clang-format and .pre-commit-config.yaml with clang-format and enable pre-commit.ci.
  • high S Add target_compile_options(... PRIVATE -Wall -Wextra -Wpedantic) to the three targets in cpp/*/CMakeLists.txt.
1

Architecture & language standards eng.modularity

Initial · confidence high

CMake builds a static afterburner library, a benchmark library and the abconv tool with C++20, but all beam presets are compiled into a 2172-line EicConfigurator.cc and only the abconv executable is installed (no library, headers or package config).

Evidence (5)

Gaps to the next level

  • Beam parameters are hard-coded in C++; beam_configs/default.yaml is placeholder content and YAML loading is not implemented.
  • The afterburner library and headers are not installed, although the README advertises a C++ API.
  • cpp/afterburner/CMakeLists.txt references a non-existent ../external/json_struct/ directory.

Actions

  • medium M Move the beam presets from EicConfigurator.cc into YAML files under beam_configs/ loaded at run time (issue
  • medium S Install the afterburner library and its headers with install(TARGETS ... EXPORT) and install(DIRECTORY ...).

Documentation & usability 1.0

1

User onboarding doc.user

Initial · confidence high

The README has build steps, CLI examples and an options table, but lists only yaml-cpp as a dependency although CMake requires HepMC3, CLHEP, GSL and ROOT, gives no versions, and has no runnable example input.

Evidence (4)

Gaps to the next level

  • HepMC3, CLHEP, GSL and ROOT and all minimum versions are missing from the install instructions.
  • Examples use a user-supplied my.hepmc; python/gen_hepmc_event.py is not documented as a quick-start input.
  • README links to beam parameters point to the old eicweb.phy.anl.gov repository.

Actions

  • medium S List every find_package dependency with minimum versions in the README "Installation" section and state that eic-shell provides them.
  • medium S Add a README quick start that generates input with python/gen_hepmc_event.py and runs abconv on it.
1

Developer & API documentation doc.developer

Initial · confidence high

Some header members have Doxygen-style comments and the README describes the algorithm steps, but there is no generated API reference and no architecture overview of the library, converter and benchmark components.

Evidence (3)

Gaps to the next level

  • No Doxygen or other generated API documentation.
  • No architecture overview of afterburner, abconv and benchmark.

Actions

  • medium S Add a Doxyfile and a GitHub Pages workflow publishing the API docs for cpp/afterburner/*.hh.
  • medium S Add docs/architecture.md describing the library, converter and histogrammer and their data flow.
1

Contribution guidelines doc.contributing

Initial · confidence low

Only the eic organization PR template and issue templates apply; there is no CONTRIBUTING file describing setup, building, tests or conventions.

Evidence (3)

Gaps to the next level

  • No CONTRIBUTING.md covering eic-shell setup, build, tests and PR conventions.

Actions

  • medium S Add CONTRIBUTING.md describing development in eic-shell, the CMake build, running the CI smoke test locally, and PR conventions.

Community & governance 0.6

0

Issue & PR responsiveness com.responsiveness

Absent · confidence medium

Four of the five issues opened in 12 months have no response, no new issue is labeled, and 8 of 12 open issues are older than one year.

Evidence (5)

Gaps to the next level

  • Most issues opened in 12 months received no response.
  • External PRs

Actions

  • high S Respond to and label issues
  • medium S Close or label the eight issues older than one year (#1,
1

Contributor base com.contributors

Initial · confidence medium

Six authors from two email domains committed in 24 months, but no PR from outside the maintainer group was merged in 12 months, and the two open external PRs are unreviewed.

Evidence (4)

Gaps to the next level

  • No external PRs merged in the last 12 months.

Actions

  • medium S Review and merge or close external PRs
1

Knowledge concentration (bus factor) com.bus-factor

Initial · confidence high

The top author wrote 52% of commits in 24 months, while three people review and four merge; no CODEOWNERS or maintainer list exists in the repository.

Evidence (5)
  • git.bus_factor_50_24m = 1
  • git.top_author_share_24m = 0.524
  • prs.distinct_reviewers_12m = 3
  • prs.distinct_mergers_12m = 4
  • releases.authors_24m = 2

Gaps to the next level

  • Bus factor (50%) is 1.
  • No CODEOWNERS or maintainer list naming at least two people.

Actions

  • high S Add .github/CODEOWNERS naming at least two owners for cpp/.
0

Governance & roadmap com.governance

Absent · confidence medium

Design decisions are discussed in public issues (#11, #12), but neither the README nor a CODEOWNERS file identifies the maintainers, and there is no documented decision process, roadmap or milestone.

Evidence (3)

Gaps to the next level

  • Maintainers are not named in the repository.
  • No documented decision process or path to maintainership.

Actions

  • high S Add a "Maintainers" section to the README naming the maintainers, their roles and the owning ePIC working group.
1

Code of conduct & user support com.conduct

Initial · confidence medium

The eic organization issue-template configuration links the ePIC Mattermost for questions, but no code of conduct applies to the repository or the organization.

Evidence (2)

Gaps to the next level

  • No code of conduct with a reporting contact.

Actions

  • high S Add CODE_OF_CONDUCT.md with a reporting contact, or link the ePIC collaboration code of conduct from the README.

Infrastructure & distribution 1.4

1

Releases & versioning dist.releases

Initial · confidence high

Three releases with generated notes appeared in 24 months, but only one between October 2024 and October 2025, no version scheme is documented, and abconv --version reports 0.1.3 while CMake declares 1.0.0 at tag v0.2.1.

Evidence (4)

Gaps to the next level

  • Fewer than 2 releases in the first 12 months of the 24-month window.
  • No documented version scheme; the version strings disagree with the tags.

Actions

  • medium S State SemVer in the README and derive the --version string from project(VERSION ...) set to the release tag.
  • medium S Tag a release at least every six months with generated release notes.
1

Dependency management & supply chain dist.dependencies

Initial · confidence high

Dependencies are declared with find_package but without versions, CLI11 2.0.0 and HepMC3's example ReaderGZ/gzstream are vendored, and there is no update monitoring or SHA pinning.

Evidence (4)

Gaps to the next level

  • No minimum versions on any find_package call.
  • Vendored CLI11 2.0.0 while eic-shell ships CLI11 2.4.2; vendored ReaderGZ.h and gzstream.
  • cpp/afterburner/CMakeLists.txt lists a non-existent external/json_struct include path.

Actions

  • medium S Add VERSION arguments to the find_package calls for HepMC3, yaml-cpp, CLHEP, GSL and ROOT.
  • medium S Replace cpp/external/CLI with find_package(CLI11) and drop the json_struct include path.
1

Reproducibility & environments dist.reproducibility

Initial · confidence medium

The README points to eic-shell, where a pinned version is preinstalled, and abconv writes the beam configuration into HepMC3 run attributes, but no eic-shell version is documented, and the random seed is fixed at 1 in code, cannot be configured, and is not recorded.

Evidence (3)

Gaps to the next level

  • No documented eic-shell version or other machine-readable environment in the repository.
  • The random seed is hard-coded (_smear(1)); AfterburnerConfig::random_seed is unused and not written to output.

Actions

  • medium S Add a --seed option wired to AfterburnerConfig::random_seed and write the seed and abconv version into the GenRunInfo attributes.
  • medium S Document in the README the eic-shell release that ships each afterburner release.
1

Portability & heterogeneous computing dist.portability

Initial · confidence high

CI builds only on Linux x86_64 with the eic-shell GCC toolchain; no other compiler, architecture or OS is tested, although no site-specific paths appear in the code.

Evidence (3)

Gaps to the next level

  • No second compiler, architecture or OS in CI.

Actions

  • medium S Add a CI matrix job building with Clang (CXX=clang++ in eic-shell) or on macos-latest with Homebrew dependencies.

EIC ecosystem integration 1.8

1

Reuse of EIC-supported components eic.reuse

Initial · confidence medium

Event I/O uses HepMC3 readers and writers, but cpp/abconv/ReaderGZ.h and gzstream are an old copy of HepMC3 code for compressed input that HepMC3 has provided in its library (ReaderGZ, deduce_reader) since 3.2.5.

Evidence (3)

Gaps to the next level

  • Local copy of HepMC3 gzip reader instead of the HepMC3 library's compressed I/O.

Actions

  • medium S Remove ReaderGZ.h, gzstream.* and the gz format path, and rely on HepMC3::deduce_reader with HepMC3 built with compression.
2

Data formats & interoperability eic.data-model

Established · confidence high

Inputs and outputs are HepMC3 (ASCII or ROOT tree), the EIC generator standard, with beam configuration stored as run-info attributes; no format version is declared or checked and no round-trip test exists.

Evidence (2)

Gaps to the next level

  • No declared or checked version of the run-info attribute schema.
  • No I/O round-trip test.

Actions

  • medium S Add an attribute recording the afterburner version and attribute schema version, and a CI test that reads the output back with pyHepMC3 or uproot and checks the attributes.
2

EIC environment compatibility eic.environment

Established · confidence medium

The README directs users to the preinstalled version in eic-shell, and CI builds and runs abconv in eic_xl:nightly through eic/run-cvmfs-osg-eic-shell; no pinned stable eic-shell release is tested.

Evidence (3)

Gaps to the next level

  • CI tests only the nightly image, not a pinned stable eic-shell release.
  • The README does not state that the from-source build is done inside eic-shell.

Actions

  • medium S Add a matrix over platform-release with a pinned eic_xl:<release> and eic_xl:nightly in .github/workflows/linux-eic-shell.yml.
2

Currency with the EIC stack eic.currency

Established · confidence medium

The current release is built and shipped in eic-shell against HepMC3 3.3.0 and ROOT 6.40, and CI passes on the nightly image; the vendored HepMC3 compressed reader and CLI11 2.0.0 lag the versions in the stack.

Evidence (3)

Gaps to the next level

  • Vendored copies of HepMC3 reader code and CLI11 2.0.0 are not kept current with the stack.

Actions

  • medium S Drop the vendored ReaderGZ.h and CLI11 copies in favour of the HepMC3 and CLI11 versions shipped in eic-shell.

Impact & long-term viability 1.0

0

Licensing via.license

Absent · confidence high

The repository has no LICENSE file and GitHub detects no license; issue #1 requesting one has been open since 2022, while the repository contains BSD-3-Clause (CLI11) and LGPL-2.1 (gzstream) third-party code.

Evidence (3)

Gaps to the next level

  • No license; the code is all rights reserved.

Actions

  • high S Add a LICENSE file with an OSI-approved license compatible with the bundled LGPL-2.1 gzstream code, agreed by the copyright holders.
0

Citation & attribution via.citation

Absent · confidence high

There is no CITATION.cff, Zenodo DOI, codemeta or author list; the README references a beam effects note but does not ask users to cite the software.

Evidence (3)

Gaps to the next level

  • No citation information or contributor list.

Actions

  • high S Add CITATION.cff listing the contributors and enable the Zenodo-GitHub integration.
1

Institutional backing & continuity via.support

Initial · confidence low

Maintainers are identifiable through the eic-spack recipe and commit email domains, but the repository states no owning ePIC working group, institutional commitment or funding.

Evidence (2)

Gaps to the next level

  • No maintenance responsibility assigned within the EIC/ePIC structure is documented.

Actions

  • medium S State in the README the ePIC working group that owns afterburner and the maintainers' institutions.

Key metrics

Collected automatically at the assessed commit. People are counted, never named. Full data: metrics.json.

Commits, 12 months35git.commits_12m
Active authors, 12 months5git.authors_12m
Active authors, 24 months6git.authors_24m
New authors, 12 months1git.new_authors_12m
Bus factor (50% of commits, 24 months)1git.bus_factor_50_24m
Top author share of commits, 24 months52%git.top_author_share_24m
Institutional e-mail domains, 24 months2git.email_domains_24m
Default-branch changes via PR, 12 months67%git.first_parent_pr_fraction_12m
PRs merged, 12 months9prs.merged_12m
Merged PRs reviewed by non-author100%prs.reviewed_fraction_12m
Median days to merge11%prs.median_days_to_merge_12m
Merged PRs touching tests0%prs.test_touching_fraction_12m
Distinct reviewers, 12 months3prs.distinct_reviewers_12m
Issues opened, 12 months5issues.created_12m
Median days to first response2.1issues.median_first_response_days_12m
Issues without response80%issues.unanswered_fraction_12m
Open issues older than 1 year8issues.open_older_365d
Releases, 24 months3releases.count_24m
Latest releasev0.2.1releases.latest_tag
Default-branch CI success rate–ci.default_branch_success_rate
CI runs in eic-shellyesci.uses_eic_shell
License (SPDX)–repo.license_spdx
Ships in eic-shellyespackaging.in_eic_shell
eic-shell version0.2.1packaging.eic_shell_version
Source lines (excluding vendored)4836code.source_lines
Test files1code.test_files