Overview /

epic-analysis

github.com/eic/epic-analysis analysiscommunity · pass 2026-10-12 · commit 4cd611b5bbb8 · assessor claude-opus-5-5

The project shows no commits in 12 months (metrics:git.commits_12m = 0), every recorded default-branch and PR CI run fails at the build step in the eic image, all 22 open issues are older than one year, and there are no unit tests, formatter, linter, citation metadata, or code of conduct. Changes reach main through branch-protected PRs with a required approval, the README and tutorials document an eic-shell workflow, and CI runs a full download-analysis-postprocess chain on sample fast- and full-simulation data.

0.8overall, 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 CODEOWNERS or a README maintainer section naming at least two maintainers.
highS com.conduct (1) Add CODE_OF_CONDUCT.md linking the ePIC collaboration code of conduct and reporting contact, and a "Getting help" README section.
highS com.governance (0) Add a "Maintainers" section to the README naming the maintainers and the owning ePIC working group.
highS com.responsiveness (0) Review the 22 open issues and 10 open PRs, close stale ones, and label the rest.
highS eng.static-quality (0) Add .clang-format and .pre-commit-config.yaml with clang-format, enable pre-commit.ci, and add -Wall -Wextra to FLAGS in the Makefile.
highS via.citation (0) Add CITATION.cff listing the contributors and enable the Zenodo-GitHub integration.
highS via.support (0) State the maintainers, their institutions, and the owning ePIC working group in the README.
highM com.contributors (1) Review and merge or close the open contributor PRs (#295,
highM eic.currency (1) Merge the C++20 fixes from PR
highM eic.environment (0) Switch ci.yml to platform-release eic_xl:nightly and fix the build so build_all and build_no_delphes pass.
highM eng.ci (1) Fix the build failures in build_all and build_no_delphes (merge or rework PR
mediumS dist.dependencies (1) Pin Delphes to a release tag in deps/install_delphes.sh and declare minimum versions of ROOT, podio, EDM4eic and fmt in the build files.
mediumS dist.portability (1) Use CXX ?= g++ in the Makefile and add a Clang build job to ci.yml; make the S3 host and xrootd prefix configurable.
mediumS dist.releases (1) State SemVer in the README and tag a release with generated notes once main CI passes, then at least every six months.
mediumS dist.reproducibility (1) Document the eic-shell release used for each tag and write the config file contents and seed into each output ROOT file.
mediumS doc.contributing (1) Add CONTRIBUTING.md covering eic-shell setup, make, running the macro/ci macros locally, code style, and the PR review process.
mediumS doc.developer (1) Add a Doxyfile covering src/ and a GitHub Pages workflow that publishes it from main.
mediumS doc.user (1) State the tested eic-shell release and Delphes tag in the README, and add a quick-start that runs tutorial/analysis_template.C on a public input file (for example via xrootd).
mediumS eic.data-model (1) Add doc/output.md listing every branch of SidisTree, HFSTree and ParticleTree with units.
mediumS eng.change-control (2) Enable "Do not allow bypassing the above settings" (enforce for administrators) on the main protection rule.
mediumS eng.change-control (2) Add .github/CODEOWNERS naming at least two reviewers for src/, macro/ci/, and .github/.
mediumS via.license (1) Document in the README that builds with Delphes are distributed under GPL-3.0 (or default to EXCLUDE_DELPHES), and record the mstwpdf license in deps/README.md.
mediumM dist.packaging (1) Once a CMake install exists, add an epic-analysis recipe to eic-spack for the latest release.
mediumM eic.reuse (1) Port AnalysisEpic to podio::ROOTReader frames with EDM4eic collections (issue
mediumM eng.modularity (1) Replace the Makefile with CMake that sets CMAKE_CXX_STANDARD 20, uses find_package for ROOT, podio, EDM4eic and fmt, and installs the library and headers.
mediumM eng.testing (1) Add a test executable (Catch2, available in eic-shell) that checks Kinematics::CalculateDIS for each method on fixed four-vectors, run from ci.yml.
mediumM via.adoption (1) Contribute a SIDIS kinematics benchmark that uses the project to physics_benchmarks, and list known users in the README.

Assessment by criterion

Code health & engineering practices 1.0

2

Change control & code review eng.change-control

Established · confidence low

The only first-parent change in 12 months came through PR #294 with an approving review, and branch protection requires one approval; level 3 is not met because protection does not apply to administrators and was bypassed for a direct push in April 2025 and a merge with a failing required check.

Evidence (5)

Gaps to the next level

  • Branch protection has enforce_admins disabled; commit 8840aca (2025-04-27) was pushed directly to main.
  • PR
  • No CODEOWNERS; the 12-month sample is a single PR.

Actions

  • medium S Enable "Do not allow bypassing the above settings" (enforce for administrators) on the main protection rule.
  • medium S Add .github/CODEOWNERS naming at least two reviewers for src/, macro/ci/, and .github/.
1

Continuous integration eng.ci

Initial · confidence high

ci.yml runs on every PR and push to main and executes analysis and postprocessing macros on sample data, but every recorded default-branch run fails at the build jobs.

Evidence (4)

Gaps to the next level

  • Fewer than 80% of default-branch runs succeed; build_all and build_no_delphes fail on main and on open PRs.

Actions

  • high M Fix the build failures in build_all and build_no_delphes (merge or rework PR
1

Testing eng.testing

Initial · confidence high

There are no unit tests; CI runs analysis and postprocess macros on downloaded sample files as smoke tests, which currently do not execute because the build jobs fail.

Evidence (3)

Gaps to the next level

  • No unit tests for Kinematics reconstruction methods, Weights, or Histos.
  • CI produces plots but compares nothing against reference values, and its smoke tests are not running.

Actions

  • medium M Add a test executable (Catch2, available in eic-shell) that checks Kinematics::CalculateDIS for each method on fixed four-vectors, run from ci.yml.
0

Static analysis & consistency eng.static-quality

Absent · confidence high

No formatter, linter, or static analyzer is configured, and the Makefile sets -Wno-deprecated without enabling -Wall.

Evidence (3)

Gaps to the next level

  • No formatter or linter configuration and no compiler warning flags.

Actions

  • high S Add .clang-format and .pre-commit-config.yaml with clang-format, enable pre-commit.ci, and add -Wall -Wextra to FLAGS in the Makefile.
1

Architecture & language standards eng.modularity

Initial · confidence high

A Makefile builds a shared library with ROOT dictionaries, but the C++ standard is unspecified, the compiler and /usr/local/lib are hard-coded, there is no install target, and analyses are driven by interpreted ROOT macros.

Evidence (4)

Gaps to the next level

  • No declared C++ standard, no install or export target, and hard-coded -L/usr/local/lib (issue

Actions

  • medium M Replace the Makefile with CMake that sets CMAKE_CXX_STANDARD 20, uses find_package for ROOT, podio, EDM4eic and fmt, and installs the library and headers.

Documentation & usability 1.0

1

User onboarding doc.user

Initial · confidence high

The README covers eic-shell setup, Delphes installation, make targets and build options, and links ordered tutorials, but names no dependency versions and the tutorials need S3 credentials to obtain input data.

Evidence (3)

Gaps to the next level

  • No dependency versions (eic-shell release, Delphes, ROOT) are named.
  • No quick-start runnable without S3 credentials.

Actions

  • medium S State the tested eic-shell release and Delphes tag in the README, and add a quick-start that runs tutorial/analysis_template.C on a public input file (for example via xrootd).
1

Developer & API documentation doc.developer

Initial · confidence high

Public headers carry inline comments, doc/kinematics.md documents the reconstruction methods, and the README has a class flowchart, but there is no generated API reference.

Evidence (4)

Gaps to the next level

  • No generated API documentation (Doxygen or similar).

Actions

  • medium S Add a Doxyfile covering src/ and a GitHub Pages workflow that publishes it from main.
1

Contribution guidelines doc.contributing

Initial · confidence high

The README "Contributions" section says where to put macros and to open PRs, and the eic organization supplies PR and issue templates, but there is no description of build, test, or coding conventions.

Evidence (3)
  • README.md#L296-L314
  • community.files.contributing = false
  • community.files.pull_request_template = true

Gaps to the next level

  • No CONTRIBUTING covering development setup, running the CI macros locally, and coding conventions.

Actions

  • medium S Add CONTRIBUTING.md covering eic-shell setup, make, running the macro/ci macros locally, code style, and the PR review process.

Community & governance 0.6

0

Issue & PR responsiveness com.responsiveness

Absent · confidence low

There were no commits in 12 months while 22 issues are open, all older than one year, and PR #297 (December 2025) has no review or comment.

Evidence (4)

Gaps to the next level

  • No development activity in 12 months; open issues and PRs are not triaged and no triage process is documented.

Actions

  • high S Review the 22 open issues and 10 open PRs, close stale ones, and label the rest.
1

Contributor base com.contributors

Initial · confidence high

Two authors committed in 24 months and none in 12 months; no institutional affiliation is measurable.

Evidence (3)
  • git.authors_24m = 2
  • git.authors_12m = 0
  • git.email_domains_24m = 0

Gaps to the next level

  • Fewer than 4 active authors in 24 months and no merged external PRs in 12 months.

Actions

  • high M Review and merge or close the open contributor PRs (#295,
1

Knowledge concentration (bus factor) com.bus-factor

Initial · confidence medium

The bus factor (50%) is 1, but the one merged PR in the period was approved by a second person.

Evidence (4)

Gaps to the next level

  • Bus factor below 2 and no maintainer list or CODEOWNERS.

Actions

  • high S Add CODEOWNERS or a README maintainer section naming at least two maintainers.
0

Governance & roadmap com.governance

Absent · confidence high

Neither the README nor a CODEOWNERS file names maintainers, and there is no decision process, roadmap, or milestones.

Evidence (2)
  • files.governance = []
  • files.codeowners = []

Gaps to the next level

  • Maintainers are not identified and no governance, milestones, or ePIC ownership is documented.

Actions

  • high S Add a "Maintainers" section to the README naming the maintainers 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.

Evidence (2)

Gaps to the next level

  • No code of conduct with a reporting contact.

Actions

  • high S Add CODE_OF_CONDUCT.md linking the ePIC collaboration code of conduct and reporting contact, and a "Getting help" README section.

Infrastructure & distribution 1.0

1

Packaging & installability dist.packaging

Initial · confidence medium

A from-source Makefile build is documented, but there is no package recipe in eic-spack, Spack, or conda-forge.

Evidence (3)

Gaps to the next level

  • No recipe in eic-spack or another domain package manager.

Actions

  • medium M Once a CMake install exists, add an epic-analysis recipe to eic-spack for the latest release.
1

Releases & versioning dist.releases

Initial · confidence high

Eight tags exist, but the latest, v0.6.0, is from December 2022 and none were made in 24 months.

Evidence (3)
  • releases.count_24m = 0
  • releases.latest_date = 2022-12-27T17:41:33Z
  • files.changelog = []

Gaps to the next level

  • Fewer than 2 releases per year, no documented version scheme, and no changelog.

Actions

  • medium S State SemVer in the README and tag a release with generated notes once main CI passes, then at least every six months.
1

Dependency management & supply chain dist.dependencies

Initial · confidence high

deps/README.md lists the dependencies and the subrepo .gitrepo files record adage and delphes_EIC commits, but Delphes is cloned from its default branch, no versions are constrained, and mstwpdf is vendored without a source version.

Evidence (4)

Gaps to the next level

  • No minimum versions for ROOT, podio, EDM4eic, fmt, or Delphes; Delphes is unpinned.
  • Vendored mstwpdf has no recorded upstream version or source URL.

Actions

  • medium S Pin Delphes to a release tag in deps/install_delphes.sh and declare minimum versions of ROOT, podio, EDM4eic and fmt in the build files.
1

Reproducibility & environments dist.reproducibility

Initial · confidence medium

The README directs users to eic-shell and CI names an eic container, but no eic-shell version is pinned and the random seed is hard-coded in source rather than recorded in outputs.

Evidence (3)

Gaps to the next level

  • No pinned eic-shell release; CI uses the floating jug_xl:nightly tag.
  • Seed and configuration are not written to output files.

Actions

  • medium S Document the eic-shell release used for each tag and write the config file contents and seed into each output ROOT file.
1

Portability & heterogeneous computing dist.portability

Initial · confidence high

CI builds only on Linux x86_64 with GCC (the Makefile hard-codes g++), and the data-access and HPC tooling assume the BNL S3 endpoint and JLab Slurm.

Evidence (4)

Gaps to the next level

  • Single compiler and OS tested; S3 host and JLab xrootd prefix hard-coded in scripts.

Actions

  • medium S Use CXX ?= g++ in the Makefile and add a Clang build job to ci.yml; make the S3 host and xrootd prefix configurable.

EIC ecosystem integration 0.8

1

Reuse of EIC-supported components eic.reuse

Initial · confidence medium

The project uses ROOT, fmt, and (optionally) podio, EDM4hep and EDM4eic, but reads ePIC files through hard-coded TTree branch names and recomputes DIS kinematics that EICrecon already provides as InclusiveKinematics* collections.

Evidence (4)

Gaps to the next level

  • Raw TTreeReader access to EDM4eic branches instead of the podio API; no documented reason for recomputing EICrecon kinematics.
  • Vendors mstwpdf while LHAPDF ships in eic-shell.

Actions

  • medium M Port AnalysisEpic to podio::ROOTReader frames with EDM4eic collections (issue
1

Data formats & interoperability eic.data-model

Initial · confidence medium

Inputs include EDM4eic podio files, but outputs are ROOT files of TObjArray histograms, streamed project classes (Histos, BinSet), and flat trees whose schema is not documented.

Evidence (2)

Gaps to the next level

  • Output schema (SidisTree, HFSTree, ParticleTree branches) is not documented, and Histos objects need the project dictionary to read.

Actions

  • medium S Add doc/output.md listing every branch of SidisTree, HFSTree and ParticleTree with units.
0

EIC environment compatibility eic.environment

Absent · confidence medium

The README documents building in eic-shell, but every recorded CI build in the eic image fails, and the C++20 compatibility fix (PR #295) and /usr/local path fix (issue #292) remain unmerged.

Evidence (4)

Gaps to the next level

  • No public evidence of a successful build in a current eic-shell image.
  • CI targets the legacy jug_xl:nightly image name rather than eic_xl.

Actions

  • high M Switch ci.yml to platform-release eic_xl:nightly and fix the build so build_all and build_no_delphes pass.
1

Currency with the EIC stack eic.currency

Initial · confidence medium

Known incompatibilities with the current stack have been open for more than 6 months: issue #292 (May 2024), PR #295 for C++20 builds (January 2025), and the optional podio reader uses podio::EventStore, which podio removed before 1.0.

Evidence (3)

Gaps to the next level

  • Does not build against the current eic-shell stack (ROOT C++20, podio 1.8).

Actions

  • high M Merge the C++20 fixes from PR

Impact & long-term viability 0.5

1

Licensing via.license

Initial · confidence medium

LGPL-3.0 is detected and source files carry SPDX headers, but the default build links GPL-3.0 Delphes into the LGPL library and the vendored mstwpdf carries no license statement.

Evidence (4)

Gaps to the next level

  • The default build links a GPL-3.0 dependency into an LGPL-3.0 library.
  • No license recorded for deps/mstwpdf.

Actions

  • medium S Document in the README that builds with Delphes are distributed under GPL-3.0 (or default to EXCLUDE_DELPHES), and record the mstwpdf license in deps/README.md.
0

Citation & attribution via.citation

Absent · confidence high

There is no citation file, DOI, or citation request.

Evidence (2)
  • files.citation_cff = []
  • files.zenodo_json = []

Gaps to the next level

  • No citation information.

Actions

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

Adoption & downstream use via.adoption

Initial · confidence medium

Public use is limited to a SIDIS asymmetry project that consumes its SidisTree format; no EIC repository, benchmark, or campaign depends on it.

Evidence (3)

Gaps to the next level

  • No use as a dependency of another EIC repository or in benchmarks or campaigns.

Actions

  • medium M Contribute a SIDIS kinematics benchmark that uses the project to physics_benchmarks, and list known users in the README.
0

Institutional backing & continuity via.support

Absent · confidence medium

No maintainer affiliations, owning working group, or funding acknowledgement are stated, and there were no commits in 12 months.

Evidence (2)

Gaps to the next level

  • No identifiable maintainer affiliations or institutional commitment.

Actions

  • high S State the maintainers, their institutions, and the owning ePIC working group in the README.

Key metrics

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

Commits, 12 months0git.commits_12m
Active authors, 12 months0git.authors_12m
Active authors, 24 months2git.authors_24m
New authors, 12 months0git.new_authors_12m
Bus factor (50% of commits, 24 months)1git.bus_factor_50_24m
Top author share of commits, 24 months50%git.top_author_share_24m
Institutional e-mail domains, 24 months0git.email_domains_24m
Default-branch changes via PR, 12 months100%git.first_parent_pr_fraction_12m
PRs merged, 12 months0prs.merged_12m
Merged PRs reviewed by non-author–prs.reviewed_fraction_12m
Median days to merge–prs.median_days_to_merge_12m
Merged PRs touching tests–prs.test_touching_fraction_12m
Distinct reviewers, 12 months0prs.distinct_reviewers_12m
Issues opened, 12 months0issues.created_12m
Median days to first response–issues.median_first_response_days_12m
Issues without response–issues.unanswered_fraction_12m
Open issues older than 1 year22issues.open_older_365d
Releases, 24 months0releases.count_24m
Latest releasev0.6.0releases.latest_tag
Default-branch CI success rate0%ci.default_branch_success_rate
CI runs in eic-shellyesci.uses_eic_shell
License (SPDX)LGPL-3.0repo.license_spdx
Ships in eic-shellnopackaging.in_eic_shell
eic-shell version–packaging.eic_shell_version
Source lines (excluding vendored)13641code.source_lines
Test files0code.test_files