Cannot produce In115m from In115

I’m trying to replicate a neutron activation detector by simulating a cylinder of pure Indium next to a source of 2.45 MeV neutrons. All the papers say that this should produce some In115m, which will then emit a gamma of 336 keV. The reaction should be In115 to In115m via (n, n’) with a threshold neutron energy of 0.38 MeV.

However, when I simulate this, I make no In115m from my In115. I am using the ENDF VIII chain file, and I can’t find anywhere in it the reaction to go from In115 to In115m. My chain file contains the isotope In115m with the correct gamma decay, I am just not producing any In115m. I have tried plotting the source spectrum using the openmc_source_plotter, and there are no gammas from In115m. I have listed the most active nuclides after irradiation and In115m is not significantly active. Is my chain file missing the reaction that takes In115 to In115m? Is there another chain file I can use or can I modify this one?

Below is a minimal working example which takes a cylinder of Indium next to a neutron source and then saves a csv showing the most active nuclides present in the irradiated material. In115m should be produced from the In115 in the material at the start, but it is not (in any great quantity).

Many thanks in advance for your help!

import openmc
import math
import pandas as pd

# Material
In_material = openmc.Material(material_id=1)
In_material.add_element("In", percent=1)
In_material.set_density(units="g/cc", density=7.31)
In_material.name = "pure_indium"
In_material.depletable = True
In_material.volume = (math.pi * 25 / 4)

my_materials = openmc.Materials([In_material])

# Geometry
outer_sim = openmc.Sphere(r=30, boundary_type="vacuum")
front_detector = openmc.ZPlane(z0=20)
back_detector = openmc.ZPlane(z0=21)
surface_detector = openmc.ZCylinder(r=2.5)

detector_region = -surface_detector & +front_detector & -back_detector
rest_of_sim_region = -outer_sim & ~detector_region

detector_cell = openmc.Cell(region = detector_region, fill=In_material)
outside_detector_cell = openmc.Cell(region = rest_of_sim_region)

my_geometry = openmc.Geometry([detector_cell, outside_detector_cell])

# Source
my_source = openmc.IndependentSource()
my_source.space = openmc.stats.Point((0, 0, 0))
my_source.angle = openmc.stats.Isotropic() 
my_source.energy = openmc.stats.Discrete([2.45e6], [1])

settings = openmc.Settings(
    particles=100000,
    batches=100,
    run_mode="fixed source",
    output={'tallies': False},
    source=my_source
)

model = openmc.Model(my_geometry, my_materials, settings)

# Settings
model.settings.run_mode = 'fixed source'
model.settings.volume_calculations = []
model.settings.particles = 1_000_000
model.settings.batches = 100

# Depletion timesteps
timesteps_and_source_rates = [
    (1, 1e9),
    (5, 0),  # 5 s
    (55, 0),  # 60 s
]

timesteps = [item[0] for item in timesteps_and_source_rates]
source_rates = [item[1] for item in timesteps_and_source_rates]

# Run depletion
model.deplete(
                timesteps,
                source_rates=source_rates,
                method="predictor",
                operator_kwargs={
                    "normalization_mode": "source-rate",  
                    "reduce_chain_level": 5,
                    "reduce_chain": True,
                },
)

# Save a csv of active nuclides in the Indium for each timestep
results = openmc.deplete.ResultsList.from_hdf5("depletion_results.h5")
for step_id in range(4):
    step = results[step_id]

    material = step.get_material("1")
    nuclides = material.get_activity(by_nuclide=True, units='Bq/cm3')

    nuclide_df = pd.DataFrame(nuclides.items(), columns=['nuclide', 'activity_bq_per_cc'])
    nuclide_df = nuclide_df.sort_values('activity_bq_per_cc', ascending=False)
    nuclide_df.to_csv(f'Indium_nuclide_data_step_{step_id}.csv')

Hi Rosie

Great to see you on here. Sorry for the slow reply.

I don’t think we ever had the time to go over chain file production but it does currently miss a few things like the meta stable states that have come from reactions like n,n’. We get most of the meta stable states that come from n.g reactions but sadly we miss the one you want

We have scripts in the offical openmc data repo for making chain files and scripts in my own packaged version of that repo for making and downloading chain files.

There is one script which is a post process which adds meta stable states from n,g
official repo version and my own adaptation which is run with add_branching_ratios --help. These scripts just add the meta stable branching ratios from n’g

There is an open issue here which is worth a read, and I was trying to get more reaction for meta stable production accounted for
Including metastable states as reactions in chainfiles · Issue #2757 · openmc-dev/openmc (github.com)

There is a PR open which adds the framework for meta stables from non n,g reactions branching_ratios_for_multiple_reactions by shimwell · Pull Request #88 · openmc-dev/data (github.com) but this has been open for a while and it doesn’t actually add the n,n’ meta stable rates just the framework for adding them in the future.

The outstanding issue is that I don’t know how to reproduce the n,g meta stable rates and they come from serpent code. So we ideally would have a way to make these and then we can make meta stables for other reactions. I’m keen to help with this and it was a something I spotted as a problem about a year ago and I tried to move it along but got stuck.

Thanks very much for your help @Shimwell, sounds like it is not as simple a fix as I had hoped!