44
55from dataclasses import dataclass
66from pathlib import Path
7- from typing import Any , Dict , List , TextIO
7+ from typing import Any , TextIO
88
99import numpy as np
1010from numpy import float64
@@ -25,20 +25,20 @@ class WWHeader:
2525 ni : int # Number of particle types
2626 nr : int # 10/16/16 = cartesian/cylindrical/spherical coord
2727 probid : str # Date and time of run
28- ne : List [int ] # Number of energy windows of each particle
28+ ne : list [int ] # Number of energy windows of each particle
2929 nfx : int # Number of fine meshses in i
3030 nfy : int # Number of fine meshses in j
3131 nfz : int # Number of fine meshses in k
32- origin : List [float ] # Bottom left corner for cart, bottom center for cyl
32+ origin : list [float ] # Bottom left corner for cart, bottom center for cyl
3333 ncx : int # Number of coarse meshses in i
3434 ncy : int # Number of coarse meshses in j
3535 ncz : int # Number of coarse meshses in k
3636
3737
3838@dataclass ()
3939class WWHeaderCyl (WWHeader ):
40- director_1 : List [float ] # Vector defining the director 1
41- director_2 : List [float ] # Vector defining the director 2
40+ director_1 : list [float ] # Vector defining the director 1
41+ director_2 : list [float ] # Vector defining the director 2
4242
4343
4444@dataclass ()
@@ -102,7 +102,7 @@ def _parse_header(infile: TextIO) -> WWHeader:
102102 ncy = int (float (words [1 ])) # Number of coarse meshes in j
103103 ncz = int (float (words [2 ])) # Number of coarse meshes in k
104104
105- header_args : Dict [str , Any ] = {
105+ header_args : dict [str , Any ] = {
106106 "if_" : if_ ,
107107 "iv" : iv ,
108108 "ni" : ni ,
@@ -147,7 +147,7 @@ def _read_block_2_vector(
147147 ...]
148148 """
149149 expected_length = 3 * number_of_coarse_intervals + 1
150- vector : List [float ] = []
150+ vector : list [float ] = []
151151 while len (vector ) < expected_length :
152152 words = infile .readline ().split ()
153153 vector .extend ([float (word ) for word in words ])
@@ -162,7 +162,7 @@ def _read_block_3(infile: TextIO, header: WWHeader) -> tuple[NestedList, NestedL
162162 for particle_index in range (header .ni ):
163163 # Read energy bins for this particle
164164 expected_energy_bins = header .ne [particle_index ]
165- energies_current_particle : List [float ] = []
165+ energies_current_particle : list [float ] = []
166166 while len (energies_current_particle ) < expected_energy_bins :
167167 words = infile .readline ().split ()
168168 energies_current_particle .extend ([float (word ) for word in words ])
@@ -171,7 +171,7 @@ def _read_block_3(infile: TextIO, header: WWHeader) -> tuple[NestedList, NestedL
171171 expected_value_bins = (
172172 header .nfx * header .nfy * header .nfz * expected_energy_bins
173173 )
174- values_current_particle : List [float ] = []
174+ values_current_particle : list [float ] = []
175175 while len (values_current_particle ) < expected_value_bins :
176176 words = infile .readline ().split ()
177177 values_current_particle .extend ([float (word ) for word in words ])
@@ -224,11 +224,11 @@ def _read_header_from_meshtally_file(mesh: Fmesh) -> WWHeader:
224224 nfy = ncy = len (mesh .x2bin ) - 1
225225 nfz = ncz = len (mesh .x3bin ) - 1
226226 if mesh .trsf and any (mesh .trsf .origin ):
227- origin = [mesh .trsf .origin [2 ], mesh .trsf .origin [1 ], mesh .trsf .origin [0 ]]
227+ origin = [mesh .trsf .origin [0 ], mesh .trsf .origin [1 ], mesh .trsf .origin [2 ]]
228228 else :
229229 origin = [0.0 , 0.0 , 0.0 ]
230230
231- header_args : Dict [str , Any ] = {
231+ header_args : dict [str , Any ] = {
232232 "if_" : if_ ,
233233 "iv" : iv ,
234234 "ni" : ni ,
@@ -257,6 +257,12 @@ def _read_header_from_meshtally_file(mesh: Fmesh) -> WWHeader:
257257 director_2 = [0.0 , 1.0 , 0.0 ] # Cant be the same as the axis
258258 else :
259259 director_2 = mesh .trsf .vec .tolist ()
260+ # The director vectors are AXS and VEC but with origin in the bottom center of
261+ # the cylinder instead of 0,0,0 as provided by MESHTAL.
262+ height = mesh .x2bin [- 1 ] - mesh .x2bin [0 ]
263+ director_1 = (np .array (director_1 ) * height + np .array (origin )).tolist ()
264+ radius = mesh .x1bin [- 1 ] - mesh .x1bin [0 ]
265+ director_2 = (np .array (director_2 ) * radius + np .array (origin )).tolist ()
260266 header_args .update (
261267 {
262268 "director_1" : director_1 ,
0 commit comments