Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
e2f47cc
Initial cut at PDG number implementation
paulromano Jan 23, 2026
ab23ed3
Fix broken build and update one test
paulromano Jan 23, 2026
49e189c
Rename ParticlePdg to PDGNumber
paulromano Jan 27, 2026
cb76a45
Rename header/source to pdg_number.h/cpp
paulromano Jan 27, 2026
a6ca46c
Rename function names
paulromano Jan 27, 2026
e79a082
More renaming
paulromano Jan 27, 2026
e80e742
Remove duplicate declarations
paulromano Jan 27, 2026
fa7942e
Rename ParticleType to PDGNumber on Python side
paulromano Jan 27, 2026
c942f59
Refactor back to ParticleType that stores PDG number
paulromano Jan 28, 2026
f8840b9
Use factory methods
paulromano Jan 28, 2026
2896db5
Introduce is_neutron and is_photon methods
paulromano Jan 28, 2026
1615818
Cleanup
paulromano Jan 28, 2026
9bef229
Clean up validation
paulromano Jan 28, 2026
3c31ec6
More cleanup
paulromano Jan 28, 2026
1b2b9fe
Simplifications around ParticleType on Python side
paulromano Jan 28, 2026
dccd52c
Clean up Python ParticleType
paulromano Jan 28, 2026
b84ebd3
No bump for weight windows file format
paulromano Jan 28, 2026
4310612
Better use of ParticleType in tracks.py
paulromano Jan 28, 2026
505d65c
Use ParticleType for WeightWindows.particle_type
paulromano Jan 28, 2026
d44eb2e
Use ParticleType for IndependentSource.particle
paulromano Jan 28, 2026
81b01b0
Move ParticleType to its own file
paulromano Jan 29, 2026
ceb5ed9
Change ParticleType to normal class on Python side
paulromano Jan 29, 2026
6885c8b
Remove extra dunder methods
paulromano Jan 29, 2026
70a199d
Add tests for ParticleType
paulromano Jan 29, 2026
4d629b4
Merge branch 'develop' into particle-type-pdg
paulromano Jan 29, 2026
73cae62
Fix C++ style formatting
paulromano Jan 29, 2026
67561a0
Fix failing tests
paulromano Jan 29, 2026
7d830ab
Update openmc/weight_windows.py
GuySten Jan 29, 2026
46d05d3
Update include/openmc/particle_type.h per @amandalund suggestion
paulromano Feb 3, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Use ParticleType for WeightWindows.particle_type
  • Loading branch information
paulromano committed Jan 28, 2026
commit 505d65c732c4e18973bcc951224ecca7dee0d575
30 changes: 17 additions & 13 deletions openmc/weight_windows.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,12 @@
from openmc.checkvalue import PathLike
from ._xml import get_elem_list, get_text, clean_indentation
from .mixin import IDManagerMixin


_ALLOWED_WW_PARTICLES = {'neutron', 'photon'}
from .source import ParticleType


def _normalize_ww_particle(particle):
name = str(openmc.ParticleType(particle))
if name not in _ALLOWED_WW_PARTICLES:
if name not in {'neutron', 'photon'}:
raise ValueError("Weight windows can only be applied for neutrons or photons")
return name

Expand Down Expand Up @@ -220,12 +218,15 @@ def mesh(self, mesh: MeshBase):
self._mesh = mesh

@property
def particle_type(self) -> str:
def particle_type(self) -> ParticleType:
return self._particle_type

@particle_type.setter
def particle_type(self, pt: str):
self._particle_type = _normalize_ww_particle(pt)
def particle_type(self, pt):
ptype = ParticleType(pt)
if ptype not in {ParticleType.NEUTRON, ParticleType.PHOTON}:
raise ValueError("Weight windows can only be applied for neutrons or photons")
self._particle_type = ptype

@property
def energy_bounds(self) -> Iterable[Real]:
Expand Down Expand Up @@ -335,7 +336,7 @@ def to_xml_element(self) -> ET.Element:
subelement.text = str(self.mesh.id)

subelement = ET.SubElement(element, 'particle_type')
subelement.text = self.particle_type
subelement.text = str(self.particle_type)

if self.energy_bounds is not None:
subelement = ET.SubElement(element, 'energy_bounds')
Expand Down Expand Up @@ -561,7 +562,7 @@ def __init__(
def __repr__(self):
string = type(self).__name__ + '\n'
string += f'\t{"Mesh":<20}=\t{self.mesh.id}\n'
string += f'\t{"Particle:":<20}=\t{self.particle_type}\n'
string += f'\t{"Particle:":<20}=\t{str(self.particle_type)}\n'
string += f'\t{"Energy Bounds:":<20}=\t{self.energy_bounds}\n'
string += f'\t{"Method":<20}=\t{self.method}\n'
string += f'\t{"Max Realizations:":<20}=\t{self.max_realizations}\n'
Expand Down Expand Up @@ -592,12 +593,15 @@ def energy_bounds(self, eb: Iterable[float]):
self._energy_bounds = eb

@property
def particle_type(self) -> str:
def particle_type(self) -> ParticleType:
return self._particle_type

@particle_type.setter
def particle_type(self, pt: str):
self._particle_type = _normalize_ww_particle(pt)
def particle_type(self, pt):
ptype = ParticleType(pt)
if ptype not in {ParticleType.NEUTRON, ParticleType.PHOTON}:
raise ValueError("Weight windows can only be applied for neutrons or photons")
self._particle_type = ptype

@property
def method(self) -> str:
Expand Down Expand Up @@ -700,7 +704,7 @@ def to_xml_element(self):
subelement = ET.SubElement(element, 'energy_bounds')
subelement.text = ' '.join(str(e) for e in self.energy_bounds)
particle_elem = ET.SubElement(element, 'particle_type')
particle_elem.text = self.particle_type
particle_elem.text = str(self.particle_type)
realizations_elem = ET.SubElement(element, 'max_realizations')
realizations_elem.text = str(self.max_realizations)
update_interval_elem = ET.SubElement(element, 'update_interval')
Expand Down
6 changes: 3 additions & 3 deletions tests/unit_tests/weightwindows/test_wwinp_reader.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@
n_e_bounds = (np.array([0.0,
100000.0,
146780.0]),)
n_particles = ('neutron',)
n_particles = [openmc.ParticleType.NEUTRON]

# expected results - neutron and photon data
np_mesh = openmc.RectilinearMesh()
Expand All @@ -63,7 +63,7 @@

np_e_bounds = (np.array([0.0, 100000.0, 146780.0, 215440.0]),
np.array([0.0, 1.0E8]))
np_particles = ('neutron', 'photon')
np_particles = [openmc.ParticleType.NEUTRON, openmc.ParticleType.PHOTON]

# expected results - photon data only
p_mesh = openmc.RectilinearMesh()
Expand All @@ -74,7 +74,7 @@
p_mesh.z_grid = np.array([-50.0, 50.0])

p_e_bounds = (np.array([0.0, 100000.0, 146780.0, 215440.0, 316230.0]),)
p_particles = ('photon',)
p_particles = [openmc.ParticleType.PHOTON]

expected_results = [('wwinp_n', n_mesh, n_particles, n_e_bounds),
('wwinp_np', np_mesh, np_particles, np_e_bounds),
Expand Down