def test_determine_format(): # 4-byte ints, little endian p = mcnp.PtracReader("mcnp_ptrac_i4_little.ptrac") assert_equal(p.endianness, "<") del p # 8-byte ints, little endian p = mcnp.PtracReader("mcnp_ptrac_i8_little.ptrac") assert_equal(p.endianness, "<") del p
def get_ptrac_src(ptrac_file, pformat="ASCII"): """ Return an array of Nx3 with the X, Y, Z coordinates and cell of all src events in a ptrac_file. Use pformat="BIN" to read a binary PTRAC """ if pformat.capitalize() == "Ascii": f = open(ptrac_file, 'r') head = read_ptrac_head(f) npart = head["v"][5][0] # print('Max number of particles in ptrac:', npart) # Notice this is total, SRC may be less ptrac_completo=np.zeros((npart, 4)) print('\n Reading ptrac file') for j in tqdm(range(npart), position=0, unit="part", unit_scale=True): line = f.readline() if not line: print ("\nptrac apparently stopped at nps=", j) break # end of file tokens = line.split() Event_ID = int(tokens[1]) event = readnextev(f) if Event_ID == 1000: ptrac_completo[j] = [event["x"], event["y"], event["z"], event["ncl"]] while event["next"] != 9000: event = readnextev(f) else: j = j +1 # to return the full ptrac and not cut last nps return ptrac_completo[:j] if pformat.capitalize() == "Bin": p = mcnp.PtracReader(ptrac_file) npart = 0 # Pyne binary reader does not return the MAX parameter. event = {} while True: try: p.read_nps_line() if p.next_event == 1000: npart+=1 except EOFError: break # no more entries while p.next_event != 9000: p.read_event_line(event) print("found {0} events".format(npart)) # reload and fill data ptrac_completo=np.zeros((npart, 4)) p = mcnp.PtracReader(ptrac_file) i = 0 while True: try: p.read_nps_line() except EOFError: break # no more entries while p.next_event != 9000: p.read_event_line(event) if (event["event_type"] == 1000): ptrac_completo[i] = [event['xxx'], event['yyy'], event['zzz'], event['ncl']] i+=1 return ptrac_completo[:i]
def test_read_headers(): p = mcnp.PtracReader("mcnp_ptrac_i4_little.ptrac") assert_equal(p.problem_title, "Generate a well-defined PTRAC file for PyNE test cases") del p # 8-byte ints, little endian p = mcnp.PtracReader("mcnp_ptrac_i8_little.ptrac") assert_equal(p.problem_title, "Generate a well-defined PTRAC file for PyNE test cases") del p
def test_write_to_hdf5(): test_files = ["mcnp_ptrac_i4_little.ptrac", "mcnp_ptrac_i8_little.ptrac"] for test_file in test_files: p = mcnp.PtracReader(test_file) h5file = tables.open_file("mcnp_ptrac_hdf5_file.h5", "w") tab = h5file.create_table("/", "t", mcnp.PtracEvent, "test") p.write_to_hdf5_table(tab) tab.flush() h5file.close() del h5file del tab del p # now check if the data was correctly written. # there should be 5 events of type 1000 (src) h5file = tables.open_file("mcnp_ptrac_hdf5_file.h5") tab = h5file.get_node("/t") selected = [1 for x in tab.iterrows() if x["event_type"] == 1000] assert_equal(len(selected), 5) h5file.close() del tab del h5file # clean up if os.path.exists("mcnp_ptrac_hdf5_file.h5"): os.unlink("mcnp_ptrac_hdf5_file.h5")
def get_rays(ptrac_file): """ Read a binary ptrac_file from mcnp, return three arrays: Initial points, Final points, and cell numbers for those events """ # 1st pass to determin number of events p = mcnp.PtracReader(ptrac_file) nevents = 0 event = {} while True: try: p.read_nps_line() except EOFError: break # no more entries p.read_event_line(event) while p.next_event != 9000: p.read_event_line(event) nevents += 1 print("found {0} events".format(nevents)) # reload and fill data init_points = [None] * nevents final_points = [None] * nevents cells = [None] * nevents p = mcnp.PtracReader(ptrac_file) i = 0 while True: try: p.read_nps_line() except EOFError: break # no more entries p.read_event_line(event) init_points[i] = np.array([event['xxx'], event['yyy'], event['zzz']]) c = int(event['ncl']) while p.next_event != 9000: p.read_event_line(event) final_points[i] = np.array( [event['xxx'], event['yyy'], event['zzz']]) cells[i] = c # Take these values for next point i += 1 if i == nevents: break init_points[i] = np.array( [event['xxx'], event['yyy'], event['zzz']]) c = int(event['ncl']) return init_points, final_points, cells
def get_rays(ptrac_file): """ Read a binary ptrac_file from mcnp, return three arrays: Initial points, Final points, and cell numbers for those events """ # 1st pass to determin number of events p = mcnp.PtracReader(ptrac_file) nevents = 0 event = {} while True: try: p.read_nps_line() except EOFError: break # no more entries p.read_event_line(event) nevents += 1 while p.next_event != 9000: p.read_event_line(event) nevents += 1 print("found {0} events".format(nevents)) # reload and fill data init_points = [None] * nevents final_points = [None] * nevents cells = [None] * nevents p = mcnp.PtracReader(ptrac_file) p.read_nps_line() for i in tqdm.tqdm(range(nevents), position=0, unit="event", unit_scale=True): p.read_event_line(event) init_points[i] = np.array([event['xxx'], event['yyy'], event['zzz']]) cells[i] = int(event['ncl']) if event["event_type"] != 1000: final_points[i - 1] = np.array( [event['xxx'], event['yyy'], event['zzz']]) else: final_points[i - 1] = np.array([None, None, None]) if p.next_event == 9000: try: p.read_nps_line() except EOFError: break # no more entries return init_points, final_points, cells
def test_read_events(): p = mcnp.PtracReader("mcnp_ptrac_i4_little.ptrac") evt = {} p.read_nps_line() assert_equal(p.next_event, 1000) p.read_event_line(evt) assert_equal(evt["xxx"], 0.0) assert_equal(evt["yyy"], 0.0) assert_equal(evt["zzz"], 0.0) del p del evt