Python PDS4 Tools
This document describes the current status and usage of tools developed at PDS-SBN to read and visualize PDS4 data in Python. Please note that a more feature-complete PDS4 reader and visualizer is also available in IDL here.
Reading PDS4 Images
An example Python module that can read and display an image from a PDS4 data product is available. The code will read the data based on the label keywords, but does not otherwise validate the label. If the user wants to display the image, the code will consider the label's Display_Settings, and provide a copy of the image in the correct orientation for drawing with the origin in the lower left corner. The code below is designed for reading BOPPS BIRC images, but can be used as an example for other limited problems. A more general solution will likely use a different approach.
Contact Mike Kelley with questions or comments regarding this code or its description.
Goal and Method
The goal is to read in an image from a BOPPS BIRC data product into a Numpy array, providing the correct orientation for display. We will provide a function with the name of the label, the function will then
- Open the label.
- Find the data product file name.
- Determine the Array_2D_Image data type and shape.
- Read in the data array.
- Return the array and meta data in a single object.
The object will have two attributes that allow access to the data
- the data with the axis order and orientation as provided in the file, and
- the data with the axis order and orientation reconfigured according to the label's Display_Settings class, so that it will have the correct orientation if drawn with the origin in the lower left corner.
For this basic example, we designed the reader as a function in a module named birc_example_reader. The user calls a single function, birc.read_image(), passing the name of the label as the first argument. The function will load the label using the ElementTree module and find the first Array_2D_Image element to read in. A second function, read_pds4_array(), determines the correct data type and shape, then reads the data from the file. A class specifically designed for PDS4 Array_2D_Image objects, aptly named PDS4_Array_2D_Image, is initialized with the data, the label describing the data, and the local_identifier of the array. The local_identifier is not normally required in PDS4 array objects, but it must be present when the image display orientation is provided via Display_Settings. Since these are present in the BIRC labels, our class assumes local_identifier is included. The class then determines the image orientation. The image is stored as a class attribute data. The class attribute display_data is also provided, which can be used for displaying with the origin in the lower left corner.
Download File:Birc example reader.zip.
Minimal Working Example
Reading PDS4 Tables
A Python package that can read and display PDS4 table data is available. Currently only Table_Character and Table_Binary objects are supported. In the future this tool is expected to support all PDS4 objects. The package expects labels that pass PDS4 Schema and Schematron validation, it will perform additional validation for both PDS4 Standards as well as optionally PDS-SBN standards. A PDS4 data viewer is also available for supported objects.
Contact Lev Nagdimunov with questions or comments regarding this code or its description.
This tool assumes the user is running Python 2.6 or 2.7. There are no additional requirements to read PDS4 table data, although a recent NumPy package can be used if installed. To visualize data Tkinter is required although it is part of the standard Python distribution for most platforms.