Skip to content

Latest commit

 

History

History
113 lines (76 loc) · 3.79 KB

README.textile

File metadata and controls

113 lines (76 loc) · 3.79 KB

pfile-tools: GE P-File Utilities

This package provides a library refrence to GE’s proprietary P-file format for their MR scanners. This is not a translation of their copyrighted header files, but a re-implementation. It’s designed to let you catalog and anonymize your raw data, and hopefully provide enough information to run your own reconstruction.

In addition to the library, pfile-tools provides small scripts to display pfile header values and do an anomymization.

Status

Header support is limited to stuff we’ve needed in-house or stuff that’s really obvious. If you need something added, let me know.

Installation

  $ easy_install pfile_tools

or

  $ cd pfile-tools; pip install .

API Usage

  >>> from pfile_tools import headers
  >>> pfile = headers.Pfile.from_file('/path/to/PXXXX.7')
  >>> print(pfile.revision)
  20
  >>> print(pfile.header.exam_number)
  5313
  >>> print(pfile.header.exam_datetime)
  datetime(2012, 3, 6, 10, 47, 42)

Pfile.header is a Python ctypes Structure.

dump_pfile_header

Does what it says on the tin — dumps a p-file’s header to standard out, in a delimited (by default, tab-delimited) format.

  Usage: dump_pfile_header [OPTIONS] pfile

  Dumps header information from a GE P-file

  Options:
    -h, --help            show this help message and exit
    -r REVISION, --revision=REVISION
                          Force a header revision (available: 20)
    --offsets             Show offsets to data elements
    --sizes               Show data element sizes
    --show-padding        Print unknown 'padding' elements
    --separator=SEPARATOR
                          Output field separator (default: \t)

anonymize_pfile

Strips personally-identifying information from a p-file.

  Usage: anonymize_pfile.py [OPTIONS] pfile pfile_out

  Removes personally-identifying information from a GE P-file

  Options:
    -h, --help            show this help message and exit
    -r REVISION, --revision=REVISION
                          Force a header revision (available: 20)
    --inplace             Edit file in-place. Ignores pfile_out.
    -v, --verbose         Print lots of extra debugging.

    Anonymization options:
      --name=yes/no       Set patient name to 'ANONYMIZED' (yes)
      --id=yes/no         Set patient ID to 'ANONYMIZED' (yes)
      --dateofbirth=yes/no
                          Set date of birth to '' (yes)
      --age=yes/no        Set age to 0 (yes)
      --weight=yes/no     Set weight to 0 (yes)
      --sex=yes/no        Set sex to 0 (yes)

License

pfile_tools is provided under the short-and-sweet BSD license. See LICENSE.txt for more information.

Changes

0.6.0:

  • Add experimental support for revision 28.002 and 30.000

0.5.0:

Thanks to dgobbi we now properly anonymize fields where the previous value was longer than the anonymized value.

0.4.0:

  • Add experimental support for revision 26.002

0.3.0:

  • Revamp, again, the version number detection code. It’s the first four bytes, and it is indeed a float. Because, reasons. Fie on Python for its automatic conversion of floats to doubles. FIE. ON. YOU.
  • Add support for revision 16 files.

0.2.0:

  • Detect version number differently — now we’re interpreting the first four bytes as a short representing version number, as opposed to using the first eight bytes as a float, which always seemed really strange anyhow. The downside is that the numbers don’t seem to be what anyone calls the software revision. Sigh. Anyhow, this also handles pfiles written by the newest and greatest GE software; there were a couple of 8-byte padding shifts.

0.1.3:

  • Started tracking changes. This version worked, more or less.