1 # Copyright (C) 2009-2010 Alberto Gomez-Casado
2 # Massimo Sandal <devicerandom@gmail.com>
3 # W. Trevor King <wking@drexel.edu>
5 # This file is part of Hooke.
7 # Hooke is free software: you can redistribute it and/or modify it
8 # under the terms of the GNU Lesser General Public License as
9 # published by the Free Software Foundation, either version 3 of the
10 # License, or (at your option) any later version.
12 # Hooke is distributed in the hope that it will be useful, but WITHOUT
13 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14 # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
15 # Public License for more details.
17 # You should have received a copy of the GNU Lesser General Public
18 # License along with Hooke. If not, see
19 # <http://www.gnu.org/licenses/>.
21 """Driver for text-exported HDF5 files from Igor pro
26 from .. import curve as lhc
27 from .. import libhooke as lh
29 class hdf5Driver(lhc.Driver):
31 def __init__(self, filename):
33 self.filename=filename
34 self.filedata=open(filename,'rU')
35 self.lines=list(self.filedata.readlines())
39 self.experiment='smfs'
45 if os.path.isdir(path):
47 self.raw_header=self.lines[0]
49 if 'IGP-HDF5-Hooke' in self.raw_header:
54 def _read_columns(self):
56 self.raw_columns=self.lines[4:]
59 for line in self.lines:
60 if line[:7]=='SpringC':
64 kline=kline.split(':')
66 self.k=float(kline[1])
73 for line in self.raw_columns:
75 xext.append(float(spline[0]))
76 yext.append(float(spline[1]))
77 xret.append(float(spline[2]))
78 yret.append(float(spline[3]))
80 return [[xext,yext],[xret,yret]]
83 self.data=self._read_columns()
84 return self.data[0][1],self.data[1][1]
87 def default_plots(self):
88 main_plot=lhc.PlotObject()
89 defl_ext,defl_ret=self.deflection()
90 yextforce=[i*self.k for i in defl_ext]
91 yretforce=[i*self.k for i in defl_ret]
92 main_plot.add_set(self.data[0][0],yextforce)
93 main_plot.add_set(self.data[1][0],yretforce)
94 main_plot.normalize_vectors()
95 main_plot.units=['Z','force'] #FIXME: if there's an header saying something about the time count, should be used
96 main_plot.destination=0
97 main_plot.title=self.filename
98 #main_plot.colors=['red','blue']