Commit 87cea8f7e8957a54760d84946e55bbcb7f7cf6b9
1 parent
b2e5864fc4
Exists in
master
replace 4 spaces by tabs
Showing 1 changed file with 87 additions and 87 deletions Inline Diff
allanplot.py
| #!/usr/bin/env python | 1 | 1 | #!/usr/bin/env python | |
| 2 | 2 | |||
| import argparse, allantools, numpy, csv, glob, Gnuplot, fnmatch, os | 3 | 3 | import argparse, allantools, numpy, csv, glob, Gnuplot, fnmatch, os | |
| import matplotlib.pyplot as plt | 4 | 4 | import matplotlib.pyplot as plt | |
| 5 | 5 | |||
| #============================================================================== | 6 | 6 | #============================================================================== | |
| 7 | 7 | |||
| # Default filename | 8 | 8 | # Default filename | |
| FILENAME = '*.dat' | 9 | 9 | FILENAME = '*.dat' | |
| COLUMNS = '2' | 10 | 10 | COLUMNS = '2' | |
| RATE = 1 | 11 | 11 | RATE = 1 | |
| 12 | 12 | |||
| #============================================================================== | 13 | 13 | #============================================================================== | |
| 14 | 14 | |||
| def parse(): | 15 | 15 | def parse(): | |
| """ | 16 | 16 | """ | |
| Specific parsing procedure for Allan Deviation plotting tool. | 17 | 17 | Specific parsing procedure for Allan Deviation plotting tool. | |
| :returns: populated namespace (parser) | 18 | 18 | :returns: populated namespace (parser) | |
| """ | 19 | 19 | """ | |
| parser = argparse.ArgumentParser(description = 'Plot Allan Deviation from timeseries file', | 20 | 20 | 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') | 21 | 21 | epilog = 'Example: \'./allanplot.py -f \'toto.dat\' -c 2 3\' compute and plot Allan Deviation form columns 2 and 3 of toto.dat') | |
| 22 | 22 | |||
| parser.add_argument('-f', | 23 | 23 | parser.add_argument('-f', | |
| action='store', | 24 | 24 | action='store', | |
| dest='filename', | 25 | 25 | dest='filename', | |
| default=FILENAME, | 26 | 26 | default=FILENAME, | |
| help='File(s) to import (default '+FILENAME+')') | 27 | 27 | help='File(s) to import (default '+FILENAME+')') | |
| 28 | 28 | |||
| parser.add_argument('-c', | 29 | 29 | parser.add_argument('-c', | |
| nargs = '+', | 30 | 30 | nargs = '+', | |
| action='store', | 31 | 31 | action='store', | |
| dest='columns', | 32 | 32 | dest='columns', | |
| default=COLUMNS, | 33 | 33 | default=COLUMNS, | |
| help='Columns to import (default '+str(COLUMNS)+')') | 34 | 34 | help='Columns to import (default '+str(COLUMNS)+')') | |
| 35 | 35 | |||
| parser.add_argument('-r', | 36 | 36 | parser.add_argument('-r', | |
| action='store', | 37 | 37 | action='store', | |
| dest='rate', | 38 | 38 | dest='rate', | |
| default=RATE, | 39 | 39 | default=RATE, | |
| help='Time rate in seconds (default '+str(RATE)+')') | 40 | 40 | help='Time rate in seconds (default '+str(RATE)+')') | |
| 41 | 41 | |||
| parser.add_argument('-R', | 42 | 42 | parser.add_argument('-R', | |
| action='store_true', | 43 | 43 | action='store_true', | |
| dest='rel', | 44 | 44 | dest='rel', | |
| default=False, | 45 | 45 | default=False, | |
| help='Relative ADev') | 46 | 46 | help='Relative ADev') | |
| 47 | 47 | |||
| args = parser.parse_args() | 48 | 48 | args = parser.parse_args() | |
| return args | 49 | 49 | return args | |
| 50 | 50 | |||
| #============================================================================== | 51 | 51 | #============================================================================== | |
| 52 | 52 | |||
| def main(): | 53 | 53 | def main(): | |
| """ | 54 | 54 | """ | |
| Main script | 55 | 55 | Main script | |
| """ | 56 | 56 | """ | |
| # Parse command line | 57 | 57 | # Parse command line | |
| args = parse() | 58 | 58 | args = parse() | |
| # filename | 59 | 59 | # filename | |
| filename = args.filename | 60 | 60 | filename = args.filename | |
| # columns | 61 | 61 | # columns | |
| columns = map(int, args.columns) | 62 | 62 | columns = map(int, args.columns) | |
| # rate | 63 | 63 | # rate | |
| rate = int(args.rate) | 64 | 64 | rate = int(args.rate) | |
| # rel | 65 | 65 | # rel | |
| rel = bool(args.rel) | 66 | 66 | rel = bool(args.rel) | |
| 67 | 67 | |||
| try: | 68 | 68 | try: | |
| list_files = [] | 69 | 69 | list_files = [] | |
| filename = filename.split() | 70 | 70 | filename = filename.split() | |
| for name in filename: | 71 | 71 | for name in filename: | |
| list_files.extend(sorted(glob.glob(name))) | 72 | 72 | list_files.extend(sorted(glob.glob(name))) | |
| 73 | 73 | |||
| for name in list_files: | 74 | 74 | for name in list_files: | |
| print(name) | 75 | 75 | print(name) | |
| data = [] | 76 | 76 | data = [] | |
| 77 | 77 | |||
| for f in list_files: | 78 | 78 | for f in list_files: | |
| with open(f, 'r') as dest_f: | 79 | 79 | with open(f, 'r') as dest_f: | |
| data_iter = csv.reader(dest_f, delimiter = '\t', quotechar = '"') | 80 | 80 | data_iter = csv.reader(dest_f, delimiter = '\t', quotechar = '"') | |
| temp_data = [value for value in data_iter] | 81 | 81 | temp_data = [value for value in data_iter] | |
| data.extend(temp_data) | 82 | 82 | data.extend(temp_data) | |
| 83 | 83 | |||
| data = numpy.asarray(data, dtype = float) | 84 | 84 | data = numpy.asarray(data, dtype = float) | |
| 85 | 85 | |||
| del(temp_data, list_files, value, f) | 86 | 86 | del(temp_data, list_files, value, f) | |
| 87 | 87 | |||
| g = Gnuplot.Gnuplot(persist = 1) | 88 | 88 | g = Gnuplot.Gnuplot(persist = 1) | |
| g('set logscale x') | 89 | 89 | g('set logscale x') | |
| g('set logscale y') | 90 | 90 | g('set logscale y') | |
| g('set grid') | 91 | 91 | g('set grid') | |
| g('set format y "%0.1e"') | 92 | 92 | g('set format y "%0.1e"') | |
| g.xlabel('Tau (s)') | 93 | 93 | g.xlabel('Tau (s)') | |
| g.ylabel('Adev') | 94 | 94 | g.ylabel('Adev') | |
| 95 | 95 | |||
| for i in columns: | 96 | 96 | for i in columns: | |
| if rel: | 97 | 97 | if rel: | |
| (tau2, ad, ade, adn) = allantools.adev(data[:,i]/data[:,i].mean(), rate=rate, data_type="freq", taus='decade') | 98 | 98 | (tau2, ad, ade, adn) = allantools.adev(data[:,i]/data[:,i].mean(), rate=rate, data_type="freq", taus='decade') | |
| else: | 99 | 99 | else: | |
| (tau2, ad, ade, adn) = allantools.adev(data[:,i], rate=rate, data_type="freq", taus='decade') | 100 | 100 | (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)))) | 101 | 101 | g.replot(Gnuplot.Data(tau2, ad, ade, with_='yerrorbars', title='%s : %s'%(name, str(i)))) | |
| 102 | 102 | |||
| except Exception as ex: | 103 | 103 | except Exception as ex: | |
| print 'Oups '+str(ex) | 104 | 104 | print 'Oups '+str(ex) | |
| print 'Program ending\n' | 105 | 105 | print 'Program ending\n' | |
| 106 | 106 | |||
| #============================================================================== | 107 | 107 | #============================================================================== | |
| 108 | 108 | |||
| if __name__ == "__main__": | 109 | 109 | if __name__ == "__main__": | |
| main() | 110 | 110 | main() | |
| 111 | 111 | |||