Blame view

allanplot.py 2.9 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
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
  
  #==============================================================================
  
  # 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+')')
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
      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
e6ad2cb77   bmarechal   -
55
      columns = map(int, args.columns)
9706dd154   mer0m   Add files via upload
56
57
58
59
60
61
62
63
      # rate
      rate = int(args.rate)
  
      try:
          list_files = []
          filename = filename.split()
          for name in filename:
              list_files.extend(sorted(glob.glob(name)))
d8cd5af60   bmarechal   -
64

9706dd154   mer0m   Add files via upload
65
          data = []
d8cd5af60   bmarechal   -
66

9706dd154   mer0m   Add files via upload
67
68
69
70
71
          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   -
72

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

9706dd154   mer0m   Add files via upload
75
          del(temp_data, list_files, value, f)
d8cd5af60   bmarechal   -
76
77
  
          g = Gnuplot.Gnuplot(persist = 1)
9706dd154   mer0m   Add files via upload
78
79
80
          g('set logscale x')
          g('set logscale y')
          g('set grid')
d8cd5af60   bmarechal   -
81
          g('set format y "%0.1e"')
9706dd154   mer0m   Add files via upload
82
83
          g.xlabel('Tau (s)')
          g.ylabel('Adev')
d8cd5af60   bmarechal   -
84

9706dd154   mer0m   Add files via upload
85
86
87
          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))))
d8cd5af60   bmarechal   -
88

9706dd154   mer0m   Add files via upload
89
90
91
92
93
94
95
96
97
      except Exception as ex:
              print 'Oups '+str(ex)
      print 'Program ending
  '
  
  #==============================================================================
  
  if __name__ == "__main__":
      main()