view plotss.py @ 36:ff63d71e1383

Separate out data file reader into a new class for ease of reuse.
author Daniel O'Connor <darius@dons.net.au>
date Wed, 28 Sep 2011 11:45:52 +0930
parents e80c2ff5fa87
children 3d2306e39700
line wrap: on
line source

#!/usr/bin/env python

import exceptions
import numpy
import pylab
import sys

class DataFile(object):
    def __init__(self, fname):
        f = file(fname)
        self.opts = {}
        for line in f:
            key, value = line.strip().split(' ', 1)
            if key == "XDATA":
                self.xdata = numpy.fromstring(value, sep = ', ')
                continue
            
            if key == "YDATA":
                self.ydata = numpy.fromstring(value, sep = ', ')
                continue
            
            try:
                self.opts[key] = int(value)
            except exceptions.ValueError, e:
                try:
                    self.opts[key] = float(value)
                except exceptions.ValueError, e:
                    self.opts[key] = value

    def __getitem__(self, k):
        return self.opts[k]
    
def doplot(fname):
    dfile = DataFile(fname)
    
    xdata = dfile.xdata / 1e6
    ydata = dfile.ydata
    pylab.title("Tag \'" + dfile['TAG'] + "\' at " + dfile['TIMESTAMP'])
    pylab.xlabel("Frequency (MHz)")
    pylab.ylabel("Level (dBm)")
    annstr = "FStart\t%.2f MHz\nFStop\t%.2f MHz\nPoints\t%d" % (
        float(dfile['FSTART']) / 1e6,
        float(dfile['FSTOP']) / 1e6,
        len(xdata))
    pylab.annotate(annstr, xy=(5, -40),  xycoords='axes points')

    annstr = "Video BW\t%.1f kHz\nResol. BW\t%.1f kHz\nAttenuation\t%.1f dB\nRef Level\t%.1f dBm" % (
        float(dfile['VIDBW']) / 1e3,
        float(dfile['RESBW']) / 1e3,
        float(dfile['ATTEN']),
        float(dfile['REFLEV']))        
    pylab.annotate(annstr, xy=(-140, -55),  xycoords='axes points')
    pylab.grid(True)
    pylab.plot(xdata, ydata, linestyle='solid', marker='.')
    pylab.show()
    
if __name__ == "__main__":
    if len(sys.argv) < 2:
        print "Need at least one file to plot"
        sys.exit(1)

    for fn in sys.argv[1:]:
        doplot(fn)