示例#1
0
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
示例#2
0
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]
示例#3
0
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
示例#4
0
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")
示例#5
0
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
示例#6
0
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
示例#7
0
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