Source code for mckit_meshes.mesh2com
from __future__ import annotations
import sys
[docs]
def mesh2com(xbins, ybins, zbins, out=sys.stdout):
"""Prints content for mcnp com file to plot crossections over mesh.
voxels centers and with normals in x, y and z directions.
"""
print("label 0 0", file=out)
print("file all", file=out)
current_basis = current_extent = current_origin = None
basis = "0 1 0 0 0 1"
extent = ybins[-1] - ybins[0], zbins[-1] - zbins[0]
extent = max(*extent)
extent = extent, extent
origin_y, origin_z = 0.5 * (ybins[-1] + ybins[0]), 0.5 * (zbins[-1] + zbins[0])
xmids = 0.5 * (xbins[:-1] + xbins[1:])
for x in xmids:
command = ""
if not current_basis or current_basis != basis:
command = "basis " + basis
current_basis = basis
if not current_extent or current_extent != extent:
command += " extent {} {}".format(*extent)
current_extent = extent
origin = x, origin_y, origin_z
if not current_origin or current_origin != origin:
command += " origin {} {} {}".format(*origin)
current_origin = origin
if command:
print(command, file=out)
basis = "1 0 0 0 0 1"
current_extent = None
extent = xbins[-1] - xbins[0], zbins[-1] - zbins[0]
extent = max(*extent)
extent = extent, extent
origin_x, origin_z = 0.5 * (xbins[-1] + xbins[0]), 0.5 * (zbins[-1] + zbins[0])
ymids = 0.5 * (ybins[:-1] + ybins[1:])
for y in ymids:
command = ""
if not current_basis or current_basis != basis:
command = "basis " + basis
current_basis = basis
if not current_extent or current_extent != extent:
command += " extent {} {}".format(*extent)
current_extent = extent
origin = origin_x, y, origin_z
if not current_origin or current_origin != origin:
command += " origin {} {} {}".format(*origin)
current_origin = origin
if command:
print(command, file=out)
basis = "1 0 0 0 1 0"
current_extent = None
extent = xbins[-1] - xbins[0], ybins[-1] - ybins[0]
extent = max(*extent)
extent = extent, extent
origin_x, origin_y = 0.5 * (xbins[-1] + xbins[0]), 0.5 * (ybins[-1] + ybins[0])
zmids = 0.5 * (zbins[:-1] + zbins[1:])
for z in zmids:
command = ""
if not current_basis or current_basis != basis:
command = "basis " + basis
current_basis = basis
if not current_extent or current_extent != extent:
command += " extent {} {}".format(*extent)
current_extent = extent
origin = origin_x, origin_y, z
if not current_origin or current_origin != origin:
command += " origin {} {} {}".format(*origin)
current_origin = origin
if command:
print(command, file=out)
print("end", file=out)