Add -p/--plot option so scripts will plot waves.
[igor.git] / bin / igorpackedexperiment.py
1 #!/usr/bin/env python
2 #
3 # Copyright (C) 2012 W. Trevor King <wking@tremily.us>
4 #
5 # This file is part of igor.
6 #
7 # igor is free software: you can redistribute it and/or modify it under the
8 # terms of the GNU Lesser General Public License as published by the Free
9 # Software Foundation, either version 3 of the License, or (at your option) any
10 # later version.
11 #
12 # igor is distributed in the hope that it will be useful, but WITHOUT ANY
13 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14 # A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
15 # details.
16 #
17 # You should have received a copy of the GNU Lesser General Public License
18 # along with igor.  If not, see <http://www.gnu.org/licenses/>.
19
20 "PXP -> ASCII conversion"
21
22 import pprint
23
24 import numpy
25
26 from igor.packed import load, walk
27 from igor.record.wave import WaveRecord
28 from igor.script import Script
29
30
31 class PackedScript (Script):
32     def _run(self, args):
33         self.args = args
34         records,filesystem = load(args.infile)
35         if hasattr(args.outfile, 'write'):
36             f = args.outfile  # filename is actually a stream object
37         else:
38             f = open(args.outfile, 'w')
39         try:
40             f.write(pprint.pformat(records))
41             f.write('\n')
42         finally:
43             if f != args.outfile:
44                 f.close()
45         if args.verbose > 0:
46             pprint.pprint(filesystem)
47         walk(filesystem, self._plot_wave_callback)
48
49     def _plot_wave_callback(self, dirpath, key, value):
50         if isinstance(value, WaveRecord):
51             self.plot_wave(self.args, value.wave, title=dirpath + [key])
52
53
54 s = PackedScript(
55     description=__doc__, filetype='IGOR Packed Experiment (.pxp) file')
56 s.run()