Blame view

allanplot.py 3.37 KB
9706dd154   mer0m   Add files via upload
1
  #!/usr/bin/env python
677c5d1d0   bmarechal   resolve some bugs
2
3
  import argparse, allantools, numpy, csv, glob, Gnuplot, fnmatch, os
  import matplotlib.pyplot as plt
9706dd154   mer0m   Add files via upload
4
5
6
7
8
  
  #==============================================================================
  
  # Default filename
  FILENAME = '*.dat'
3c94f78ab   bmarechal   -
9
  COLUMNS = '2'
9706dd154   mer0m   Add files via upload
10
11
12
13
14
15
16
17
18
19
  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',
3c94f78ab   bmarechal   -
20
                                       epilog = 'Example: \'./allanplot.py -f \'toto.dat\' -c 2 3\' compute and plot Allan Deviation form columns 2 and 3 of toto.dat')
9706dd154   mer0m   Add files via upload
21
22
23
24
25
26
  
      parser.add_argument('-f',
                          action='store',
                          dest='filename',
                          default=FILENAME,
                          help='File(s) to import (default '+FILENAME+')')
d8cd5af60   bmarechal   -
27

9706dd154   mer0m   Add files via upload
28
29
30
31
32
33
      parser.add_argument('-c',
                          nargs = '+',
                          action='store',
                          dest='columns',
                          default=COLUMNS,
                          help='Columns to import (default '+str(COLUMNS)+')')
d8cd5af60   bmarechal   -
34

9706dd154   mer0m   Add files via upload
35
36
37
38
39
      parser.add_argument('-r',
                          action='store',
                          dest='rate',
                          default=RATE,
                          help='Time rate in seconds (default '+str(RATE)+')')
b2e5864fc   bmarechal   allanplot: add re...
40
41
42
43
44
      parser.add_argument('-R',
                          action='store_true',
                          dest='rel',
                          default=False,
                          help='Relative ADev')
9706dd154   mer0m   Add files via upload
45
46
47
48
49
50
51
52
53
54
55
56
57
58
      args = parser.parse_args()
      return args
  
  #==============================================================================
  
  def main():
      """
      Main script
      """
      # Parse command line
      args = parse()
      # filename
      filename = args.filename
      # columns
e6ad2cb77   bmarechal   -
59
      columns = map(int, args.columns)
9706dd154   mer0m   Add files via upload
60
61
      # rate
      rate = int(args.rate)
b2e5864fc   bmarechal   allanplot: add re...
62
63
      # rel
      rel = bool(args.rel)
9706dd154   mer0m   Add files via upload
64
65
66
67
68
69
  
      try:
          list_files = []
          filename = filename.split()
          for name in filename:
              list_files.extend(sorted(glob.glob(name)))
d8cd5af60   bmarechal   -
70

4d221a57e   bmarechal   print loaded files
71
72
          for name in list_files:
              print(name)
9706dd154   mer0m   Add files via upload
73
          data = []
d8cd5af60   bmarechal   -
74

9706dd154   mer0m   Add files via upload
75
76
77
78
79
          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)
d8cd5af60   bmarechal   -
80

9706dd154   mer0m   Add files via upload
81
          data = numpy.asarray(data, dtype = float)
d8cd5af60   bmarechal   -
82

9706dd154   mer0m   Add files via upload
83
          del(temp_data, list_files, value, f)
d8cd5af60   bmarechal   -
84
85
  
          g = Gnuplot.Gnuplot(persist = 1)
9706dd154   mer0m   Add files via upload
86
87
88
          g('set logscale x')
          g('set logscale y')
          g('set grid')
d8cd5af60   bmarechal   -
89
          g('set format y "%0.1e"')
9706dd154   mer0m   Add files via upload
90
91
          g.xlabel('Tau (s)')
          g.ylabel('Adev')
d8cd5af60   bmarechal   -
92

9706dd154   mer0m   Add files via upload
93
          for i in columns:
b2e5864fc   bmarechal   allanplot: add re...
94
95
96
97
              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')
9706dd154   mer0m   Add files via upload
98
              g.replot(Gnuplot.Data(tau2, ad, ade, with_='yerrorbars', title='%s : %s'%(name, str(i))))
d8cd5af60   bmarechal   -
99

9706dd154   mer0m   Add files via upload
100
101
102
103
104
105
106
107
108
      except Exception as ex:
              print 'Oups '+str(ex)
      print 'Program ending
  '
  
  #==============================================================================
  
  if __name__ == "__main__":
      main()