The following script displays the contents of a .fio file. Compare the same procedure in matplotlib 9.13.9.
#!/usr/bin/env python
”'
this module reads and plots fio files. It can be invoked from
- the command line, blocking mode
$ pg_fioPlotter.py -f fileName.fio
- ipython and python scripts, non-blocking mode
import pg_fioPlotter as fp
a = fp.fioPlotter("<fileName>")
a.plot()
”'
from optparse import OptionParser
import math, sys
from pyqtgraph.Qt import QtGui, QtCore
import pyqtgraph as pg
app = None
win = None
a = None
class fioDataset:
”'
the class represents a column of a FIO file. The first column is the
x-axis which is used by all columns, name_in, e.g. test_00001_C1
”'
def __init__(self, name_in):
self.name = name_in
lst = self.name.split('_')
if len(lst) > 1:
self.deviceName = lst[-1]
if self.deviceName.find( "0") == 0:
self.deviceName = "ScanName"
else:
self.deviceName = "n.n."
self.x = []
self.y = []
return
class fioPlotter:
def __init__(self, fileName):
self.comments = []
self.user_comments = []
self.parameters = []
self.dataSets = []
self.fileName = fileName
self._read( fileName)
#
# /home/p12user/dirName/gen_00001.fio -> gen_00001
#
self.scanName = fileName.split("/")[-1].split(".")[0]
return
def _read( self, name):
”'
!
! user comments
!
%c
comments
%p
parameterName = parameterValue
%d
Col 1 AU_ALO_14_0001 FLOAT
Col 2 AU_ALO_14_0001 FLOAT
Col 3 AU_ALO_14_0001_RING FLOAT
data data data etc.
”'
print( "reading", name)
try:
inp = open( name, 'r')
except IOError as e:
print( "Failed to open {0}, {1}".format( name, e.strerror) )
sys.exit(255)
lines = inp.readlines()
inp.close()
flagComment = 0
flagParameter = 0
flagData = 0
for line in lines:
line = line.strip()
if line.find( "!") == 0:
self.user_comments.append( line)
flagComment, flagParameter, flagData = False, False, False
elif line.find( "%c") == 0:
flagComment, flagParameter, flagData = True, False, False
continue
elif line.find( "%p") == 0:
flagComment, flagParameter, flagData = False, True, False
continue
elif line.find( "%d") == 0:
flagComment, flagParameter, flagData = False, False, True
continue
#
if flagComment:
self.comments.append( line)
#
# parName = parValue
#
if flagParameter:
lst = line.split( "=")
self.parameters.append( {lst[0]: lst[1]})
if not flagData:
continue
lst = line.split()
if lst[0] == "Col":
#
# the 'Col 1 ...' description does not create a
# new FIO_dataset because it contains the x-axis for all
#
if lst[1] == "1":
pass
else:
self.dataSets.append( fioDataset( lst[2]))
else:
for i in range(1, len( self.dataSets)):
self.dataSets[i-1].x.append( float(lst[0]))
self.dataSets[i-1].y.append( float( lst[i]))
def plot( self):
”'
plots the contents of a fio file
”'
length = len(self.dataSets)
nCol = int(math.ceil(math.sqrt(length)))
nRow = int(math.ceil( length/nCol))
win.clear()
win.addLabel( self.scanName, row = 1, col = 1, colspan = nCol)
for i in range( 0, length):
r = int( math.ceil(i/nCol) + 2)
c = i % nCol + 1
plt = win.addPlot( row=r, col=c)
plt.setContentsMargins( 10, 10, 10, 10)
plt.showGrid( x = True, y = True)
plt.setTitle( title = self.dataSets[i].deviceName)
plt.plot( self.dataSets[i].x, self.dataSets[i].y, pen = (0, 0, 255))
app = QtGui.QApplication.instance()
if app is None:
pg.setConfigOption( 'background', 'w')
pg.setConfigOption( 'foreground', 'k')
app = pg.mkQApp()
if win is None:
win = pg.GraphicsWindow( title="The fioPlotter")
win.resize( 1000, 800)
win.clear()
if __name__ == '__main__':
usage = "usage: %prog -f fileName.fio "
parser = OptionParser(usage=usage)
parser.add_option( "-f", action="store", type="string", dest="fileName", help="name of the .fio file")
(options, args) = parser.parse_args()
if options.fileName is None:
parser.print_help()
sys.exit(255)
a = fioPlotter( options.fileName)
a.plot()
app.exec_()