Recent News
SNAP Version 4.2.1 Released
February 16, 2024
AptPlot 8.0.4 Updated
February 16, 2024
PyPost 4.0.3 Released
August 18, 2022

PyPost - A Python Postprocessor for Analysis of Code Results and Experimental Data

PyPost consists of a Python library and stand-alone Java application designed to provide
advanced post-processing capability for engineering analysis codes and experimental data

PyPost can be used to:

  • Query and extract time-dependent plot data from several nuclear engineering analysis
    codes including: RELAP5/RELAP5-3D, TRACE, MELCOR, etc...
  • Read experimental data stored in NRC Databank format.
  • Read and write data to and from Microsoft Excel and Open Office spreadsheets.
  • Read and write data to and from ASCII files.
  • Perform a wide range of mathematical operations on time-dependent vector data.
  • Interact directly with AptPlot to generate presentation quality plots in a wide range of

Although PyPost is a standalone application, it is currently being distributed to SUG and CAMP-SUG members as a feature set included with the AptPlot distribution. This allows PyPost to use the bundled Java version installed with AptPlot.

PyPost Overview

Read an overview of the PyPost application and its features. A detailed PyPost User's Manal is included in the distribution.


PyPost is licensed to SNAP User's Group (SUG) members.

Change Log

PyPost 4.0.3 released August 18, 2022:

  • The PyPost job step has been updated to execute PyPost as a library to a stand alone python executable. PyPost is available through the standard Python job step.
  • Updated to point to the correct website to detect new software versions.
  • Resolved an issue where the technologies dialog would not display the correct license text for included technologies.

PyPost 4.0.2 released July 5, 2022:

  • PyPost now uses a Py4J Gateway Server that limits access to the Java Virtual Machine for any connection made after the first. Py4J is only used when an external Python interpreter such as CPython3 is used.
  • PyPost's python bindings no longer write the Py4J authentication token to an external file when using an external Python interpreter such as CPython3.

PyPost 4.0.1 released October 29, 2021:

  • PyPost is now packaged directly with SNAP. This allows SNAP applications and utilities to automatically find the PyPost installation.
  • PyPost now depends on various SNAP plug-ins to support the PyPost Python bindings. The plugins directory of the local SNAP installation will be examined to determine which SNAP plug-ins are present. Python bindings that require a missing SNAP plug-in will not be available.

PyPost 3.1.0 released May 21, 2021:

  • The PyPost graphical user interface has been updated to support CPython script execution. The python interpreter used for execution is set from the Edit > Set Python Executable menu item. By default, the application will use the bundled Jython interpreter.
  • The CONTAIN and FRAPTRAN PyPost interfaces will now properly close files when the closeFile method is invoked.
  • An issue was resolved which could cause unit lookups for TRC GRF files to encounter an index out of bounds exception.

PyPost 3.0.1 released October 6, 2020:

  • An issue was resolved that prevented the openPlotFile method in the module from properly handling the file ID parameter.
  • A Jython-compatible version of the pathlib module was added to PyPost. This module will be automatically included in the Python Path when using the Jython interpreter.
  • An issue was resolved that prevented PyPost from correctly passing output messages to the stream log when using PyPost with SNAP's Python Directed streams.

PyPost 3.0.0 released July 17, 2020:

  • PyPost has been updated to work with Java 11. Starting with this version, Java 11 or newer is required. Methods that have been deprecated in Java 11 have been refactored to use the appropriate Java 11 equivalent. OpenJDK 11.0.6 Eclipse OpenJ9 JVM distributions for the 64-bit Windows and 64-bit Linux platforms are included in the installation.
  • Python bindings have been developed that allow PyPost to be accessed from Python scripts running outside of the PyPost application. This includes support for CPython versions 2.7 and 3.x. To do so, simply add the ‘PyPost/python’ directory to your Python Path as described in Section 2.1 in the PyPost user’s manual.
  • Support was added for reading MOOSE generated Exodus II and CSV files.

PyPost 2.0.2 released October 24, 2019:

  • Additional fix for GOTHIC 8.3 plot file format.

PyPost 2.0.1 released June 13, 2019:

  • Added support for GOTHIC 8.3 plot file format.

PyPost 2.0.0 released May 13, 2019:

  • The runtime environments for the PYPOST has been updated to OpenJDK 1.8.0 version 212. Bundled 1.8.0_212 JVM's are included for the 64-bit Windows and 64-bit Linux platforms.
  • PYPOST has been updated to support the command-line CPython interpreter. The external interpreter can be selected by using the –p command line parameter.
  • The PYPOST testsuite was updated to support the channel IDs provided as part of the most recent set of FAST analysis code modifications.
  • An issue was resolved that resulted in PYPOST reading DEMUX data from multiplexed TRACE XTV files as 4-byte floating point values for files saved using 8-byte values.

PyPost 1.3.3 released February 19, 2018:

  • An issue has been resolved that prevented proper SI/British engineering unit conversion in TRACE Axial Plots.
  • An issue has been resolved that caused TRACE Axial Plots generated in PyPost to display an incorrect label for the dependent axis.

PyPost 1.3.2 released February 7, 2018:

  • An issue was resolved that would throw an exception when reading unrecognized  variables from a RELAP5/RELAP5-3D plot file. Unrecognized variables are treated as unit-less values, plotted with a dependent variable label of “Undefined”.
  • The RELAP5-3D PIB plot file format reading logic has been updated to improve the performance for large files.
  • Several FAST binary plot file and FRAPCON/FAST output file read routine optimizations were added that significantly increase the read speed from these file formats.

PyPost 1.3.0 released December 1, 2017:

  • A demux method has been added for each of the analysis code plot types which support demuxing capability. The method requires two inputs: the name of the plot file and the desired name of the resulting demux file. A third optional text parameter is allowed which can be used to pass additional arguments to the demuxer.
    The following method call will demultiplex a TRACE XTV file named trace.xtv, creating a demux file named trace.dmx:

    TRACE.demux("trace.xtv", "trace.dmx")

    To run the above demuxer silently and without compression, use the optional argument as follows:

    TRACE.demux("trace.xtv", "trace.dmx", "-s -nc")

    Please refer to the PyPost User's Manual for information on the additional arguments available for these commands.

  • Added new interface and Python bindings to support the new FAST analysis code.

PyPost 1.2.4 released August 18, 2017:

  • Updated engineering units for RELAP5/RELAP5-3D plot files.
  • Support has been added to allow reading FRAPCON data using the rod average burnup instead of time.
  • The TRACE axial plotting logic was updated to report a warning if the provided data channel references an axial level greater than 1. In this case the first axial level will be used instead.
  • The yValAt method has been updated to include a tolerance of 5E-6 when determining if the provided search value is inside the range of independent values.

PyPost 1.2.3 released July 13, 2017:

  • The getAxialData() routine for TRACE has been updated to perform a linear interpolation when the requested plot time falls between two time steps.
  • The PyPost TRACE interface has been updated with a routine to retrieve data at a given time. This routine can be accessed through the TRACE and TRACB objects within a PyPost script.
  • """ Returns channel data at the specified time. """
    getValueAt(fileIndex, channelNames, time)

    """ Returns a list of doubles each containing channel data at the specified time. """ getValuesAt(self,index,names,time):

    Example: # Read liquid temperature at 100 seconds.
    ltemp = TRACE.getValuesAt(1, [‘tln-21A01’, ‘tln-21A20’], 100.0)

  • The command line argument display and users manual section were updated to remove the unused -v and -s command line arguments.

PyPost 1.2.2 released March 28, 2017:

  • Updated engineering units for COBRA plot files.

PyPost 1.2.1 released February 14, 2017:

  • Fixed the engineering units conversion logic for RETRAN-3D plot files.

PyPost 1.2.0 released January 17, 2017:

  • An issue was resolved which could result in improperly converted data values from being retrieved from a plot file. This situation could occur for MELCOR, COBRA, and RELAP5 plot files when data channels were read from a plot file and then the unit system was subsequently changed. If the same data values were read again after the unit system changed, the values were not converted to the newly selected unit system (if it was using British values it would still return British values and vice-versa).
  • Plot file read routines have been updated to handle importing the 8.2 version of the GOTHIC plot file format. This new logic will process the struct information provided in the plot file and allow access to this metadata information. Accessing metadata information can be made through the following python methods using the GOTHIC object provided within a PYPOST script (i.e. GOTHIC.getMetadataValue(0, 'title'):

    """ Returns the metadata names included in the plot file at the provided index """
    def getMetadataNames(self, index):
    return self.intf.getMetadataNames(index)

    """ Gets the value of the metadata token in the file at the specified index """
    def getMetadataValue(self, index, token):
    return self.intf.getMetadataValue(index, token)

    """ Determines if the file at the specified index contains a metadata name for the provided token """
    def hasMetadataName(self, index, token):
    return self.intf.hasMetadataName(index, token)

  • Support was added for RETRAN-3D plot file formats including: ASCII, binary and demultiplexed. The RETRAN-3D capability is accessed using the predefined RETRAN3D python variable in a PyPost script. An example for opening an ASCII plot file is: RETRAN3D.openPlotFile("./sample_data/retran3d/retran3d.ascii").

PyPost 1.1.2 released December 2, 2016:

  • Improved the read perfomance for TRACE XTV mux and demux files.

PyPost 1.1.1 released October 12, 2016:

  • The FRAPCON Interface was updated to support both ASCII and PIB based plot files. This functionality is provided automatically through the openPlotFile interface method.

PyPost 1.1.0 released September 23, 2016:

  • This version was built using Java Version 8 (1.8.0_102). Java 8 or newer is now required to run PyPost.
  • Two new functions were added to the FRAPCON Interface to support retrieving axial a radial data sets at a specified time.
    These include getAxialData(fileIndex, channelNames, time, offset) and getRadialData(fileIndex, channelNames, time, offset) which return a set of ChannelVectors containing axial or radial data for the indicated data channels at a specified time. Where the function arguments are:

    fileIndex [int] The file index of the open file.
    channelNames [String | String[] ] A string or String array containing the channel names.
    time [double] The analysis time in days in which the data is extracted.
    offset [double] An optional axial or radial offset to apply.


  • # Retrieve Axial Data for burnup at 1000. sec
    data = FRAPCON.getAxialData(1, 'burnup-A01', 1000)
    # Retrieve Radial Data for temperatures of Axial node 12 at 1400. sec
    data = FRAPCON.getRadialData(1, 'temp-A12R01', 1400)

PyPost 1.0.2 released July 7, 2016:

  • Updated User's manual to reflect the correct argument order for all openPlotFile and openDmxFile methods.
  • Added yValAt(x) method to return the dependent value of a vector variable at a specified independent variable location. Exceptions are thrown if the specified location is outside of the range of the vector. Intepolated values are used if the specified location falls between two ponits.
  • Added newEmptyVector() method to create empty vectors.
  • Fixed inconsistent version info. Version information was duplicated between the manifest and Version class.
    The Version class now obtains the correct version from the manifest.

PyPost 1.0.1 released May 12, 2016:

  • PyPost was updated to work with the SNAP PyPost job step.
  • An issue has been resolved where an exception message appeared in the PyPost log when calling AptPlot for the first time.
  • The TRACB interface was updated to add an explicit method for opening demultiplexed files. This prevents an error message from being reported when reading in a demultiplexed TRACB plot file.

PyPost 1.0.0 released March 5, 2015:

  • Initial SNAP User's Group distribution.

Limitations and ToDo's:

  • File demultiplexers have not been directly interfaced.
  • The MATLAB/Octave interfaces have not been created.
  • The report generator for the automated test scripts currently supports only the channel vector tests and the analysis code plot file formats. This will be expanded to cover all test results.