diff --git a/allanplot.py b/allanplot.py new file mode 100644 index 0000000..ad7e4b1 --- /dev/null +++ b/allanplot.py @@ -0,0 +1,95 @@ +#!/usr/bin/env python + +import argparse, allantools, numpy, csv, glob, Gnuplot + +#============================================================================== + +# 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\' compute and plot Allan Deviation form toto.dat values') + + 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)+')') + + args = parser.parse_args() + return args + +#============================================================================== + +def main(): + """ + Main script + """ + # Parse command line + args = parse() + # filename + filename = args.filename + # columns + columns = args.columns + # rate + rate = int(args.rate) + + try: + list_files = [] + filename = filename.split() + for name in filename: + list_files.extend(sorted(glob.glob(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.xlabel('Tau (s)') + g.ylabel('Adev') + + for i in columns: + (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()