Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-05-15 07:41:52

0001 import argparse
0002 import os
0003 import re
0004 import subprocess
0005 
0006 
0007 def parse_geant4_version(version):
0008     match = re.fullmatch(r"\s*(\d+)\.(\d+)(?:\.(?:(\d+)|p(\d+))(?:\.beta)?)?\s*", version)
0009     if match is None:
0010         raise RuntimeError(f"Unable to parse Geant4 version: {version!r}")
0011 
0012     major, minor, patch, patchlevel = match.groups(default="0")
0013     return int(major), int(minor), int(patch if patch != "0" else patchlevel)
0014 
0015 
0016 def detect_geant4_version():
0017     version = os.environ.get("GEANT4_VERSION")
0018     if version:
0019         return version.strip()
0020 
0021     try:
0022         return subprocess.check_output(["geant4-config", "--version"], text=True).strip()
0023     except (OSError, subprocess.CalledProcessError) as err:
0024         raise RuntimeError(
0025             "Unable to determine Geant4 version. Set GEANT4_VERSION or ensure geant4-config is available."
0026         ) from err
0027 
0028 
0029 def geant4_series(version=None):
0030     resolved = detect_geant4_version() if version is None else version
0031     major, minor, _patch = parse_geant4_version(resolved)
0032 
0033     if (major, minor) == (11, 3):
0034         return "11.3"
0035     if (major, minor) >= (11, 4):
0036         return "11.4+"
0037 
0038     raise RuntimeError(
0039         f"Unsupported Geant4 version {resolved!r}. Add support for this release family."
0040     )
0041 
0042 
0043 def main():
0044     parser = argparse.ArgumentParser()
0045     parser.add_argument("field", nargs="?", choices=("version", "series"), default="version")
0046     args = parser.parse_args()
0047 
0048     version = detect_geant4_version()
0049 
0050     if args.field == "version":
0051         print(version)
0052     else:
0053         print(geant4_series(version))
0054 
0055 
0056 if __name__ == "__main__":
0057     main()