allanplot.py 2.75 KB
#!/usr/bin/env python

import argparse, allantools, numpy, csv, glob, Gnuplot, fnmatch, os
import matplotlib.pyplot as plt

#==============================================================================

# Default filename
FILENAME = '*.dat'
COLUMNS = '2'
RATE = 1

#==============================================================================

def parse():
	"""
	Specific parsing procedure for Allan Deviation plotting tool.
	:returns: populated namespace (parser)
	"""
	parser = argparse.ArgumentParser(description = 'Plot Allan Deviation from timeseries file',
									 epilog = 'Example: \'./allanplot.py -f \'toto.dat\' -c 2 3\' compute and plot Allan Deviation form columns 2 and 3 of toto.dat')

	parser.add_argument('-f',
						action='store',
						dest='filename',
						default=FILENAME,
						help='File(s) to import (default '+FILENAME+')')

	parser.add_argument('-c',
						nargs = '+',
						action='store',
						dest='columns',
						default=COLUMNS,
						help='Columns to import (default '+str(COLUMNS)+')')

	parser.add_argument('-r',
						action='store',
						dest='rate',
						default=RATE,
						help='Time rate in seconds (default '+str(RATE)+')')

	parser.add_argument('-R',
						action='store_true',
						dest='rel',
						default=False,
						help='Relative ADev')

	args = parser.parse_args()
	return args

#==============================================================================

def main():
	"""
	Main script
	"""
	# Parse command line
	args = parse()
	# filename
	filename = args.filename
	# columns
	columns = map(int, args.columns)
	# rate
	rate = int(args.rate)
	# rel
	rel = bool(args.rel)

	try:
		list_files = []
		filename = filename.split()
		for name in filename:
			list_files.extend(sorted(glob.glob(name)))

		for name in list_files:
			print(name)
		data = []

		for f in list_files:
			with open(f, 'r') as dest_f:
				data_iter = csv.reader(dest_f, delimiter = '\t', quotechar = '"')
				temp_data = [value for value in data_iter]
				data.extend(temp_data)

		data = numpy.asarray(data, dtype = float)

		del(temp_data, list_files, value, f)

		g = Gnuplot.Gnuplot(persist = 1)
		g('set logscale x')
		g('set logscale y')
		g('set grid')
		g('set format y "%0.1e"')
		g.xlabel('Tau (s)')
		g.ylabel('Adev')

		for i in columns:
			if rel:
				(tau2, ad, ade, adn) = allantools.adev(data[:,i]/data[:,i].mean(), rate=rate, data_type="freq", taus='decade')
			else:
				(tau2, ad, ade, adn) = allantools.adev(data[:,i], rate=rate, data_type="freq", taus='decade')
			g.replot(Gnuplot.Data(tau2, ad, ade, with_='yerrorbars', title='%s : %s'%(name, str(i))))

	except Exception as ex:
			print 'Oups '+str(ex)
	print 'Program ending\n'

#==============================================================================

if __name__ == "__main__":
	main()