Skip to content

Python API not reading nuclear data interpolation and breakpoint correctly #3672

@shimwell

Description

@shimwell

Bug Description

Reading in the h5 nuclear data with openmc appears to result in default interpolation and breakpoint values such as [2]

Steps to Reproduce

change the dir in this script and run the script it should print out different interpolation and breakpoint values when the file is read with the openmc python api and h5py directly.

import openmc.data
import h5py

# Load a sample HDF5 file and product
filename = "/home/jon/nuclear_data/tendl-2021-hdf5/tendl-2021-hdf5/Cr52.h5"
lib = openmc.data.IncidentNeutron.from_hdf5(filename)

# Pick a product with tabulated distributions
for rx in lib.reactions.values():
    for prod in rx.products:
        # Look for Tabulated1D in applicability or yield
        for app in getattr(prod, "applicability", []):
            if hasattr(app, "breakpoints") and hasattr(app, "interpolation"):
                print("App breakpoints:", app.breakpoints)
                print("App interpolation:", app.interpolation)
        y = getattr(prod, "yield_", None)
        if hasattr(y, "breakpoints") and hasattr(y, "interpolation"):
            print("Yield breakpoints:", y.breakpoints)
            print("Yield interpolation:", y.interpolation)
        # Look for Tabulated1D in distributions
        for dist in getattr(prod, "distribution", []):
            if hasattr(dist, "breakpoints") and hasattr(dist, "interpolation"):
                print("Dist breakpoints:", dist.breakpoints)
                print("Dist interpolation:", dist.interpolation)

# Now print the same info using h5py
print("\n--- h5py direct read ---")
with h5py.File(filename, "r") as f:
    cr52 = f["Cr52"]
    reactions = cr52["reactions"]
    for rx_name in reactions:
        rx_group = reactions[rx_name]
        for prod_name in rx_group:
            if not prod_name.startswith("product_"):
                continue
            prod_group = rx_group[prod_name]
            # Yield
            if "yield" in prod_group:
                y_ds = prod_group["yield"]
                print(f"{rx_name} {prod_name} yield breakpoints:", y_ds.attrs.get("breakpoints", None))
                print(f"{rx_name} {prod_name} yield interpolation:", y_ds.attrs.get("interpolation", None))
            # Distribution(s)
            for dist_key in prod_group:
                if dist_key.startswith("distribution_"):
                    dist_group = prod_group[dist_key]
                    # Applicability
                    if "applicability" in dist_group:
                        app_ds = dist_group["applicability"]
                        print(f"{rx_name} {prod_name} {dist_key} applicability breakpoints:", app_ds.attrs.get("breakpoints", None))
                        print(f"{rx_name} {prod_name} {dist_key} applicability interpolation:", app_ds.attrs.get("interpolation", None))
                    # Angle/mu distribution
                    if "angle" in dist_group and "mu" in dist_group["angle"]:
                        mu_ds = dist_group["angle"]["mu"]
                        print(f"{rx_name} {prod_name} {dist_key} angle/mu interpolation:", mu_ds.attrs.get("interpolation", None))

Environment

ubuntu , python 3.13, openmc develop branch

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions