57e75d967c2406e0158a9665facc1406031b8e66
[hooke.git] / mfp1dexport.py
1 #!/usr/bin/env python
2
3 '''
4 mfp1dexport.py
5
6 Driver for text-exported MFP 1D files
7
8 Massimo Sandal (c) 2009
9 '''
10
11 import libhookecurve as lhc
12 import libhooke as lh
13
14 class mfp1dexportDriver(lhc.Driver):
15     
16     def __init__(self, filename):
17         
18         self.filename=filename
19         self.filedata=open(filename,'rU')
20         self.lines=list(self.filedata.readlines())
21         self.filedata.close()
22         
23         self.filetype='mfp1dexport'
24         self.experiment='smfs'
25         
26     def close_all(self):
27         self.filedata.close()
28         
29     def is_me(self):
30         try:
31             self.raw_header=self.lines[0:38]
32         except:
33             #Not enough lines for a header; not a good file
34             return False
35         
36         #FIXME: We want a more reasonable header recognition
37         if self.raw_header[0][0:4]=='Wave':
38             return True
39         else:
40             return False
41         
42     def _read_columns(self):
43         
44         self.raw_columns=self.lines[39:]
45         
46         kline=None
47         for line in self.lines:
48             if line[:7]=='SpringC':
49                 kline=line
50                 break
51         
52         kline=kline.split(':')
53         
54         #self.k=float(self.raw_header[23][8:])
55         self.k=float(kline[1])
56         
57         
58         xext=[]
59         xret=[]
60         yext=[]
61         yret=[]
62         for line in self.raw_columns:
63             spline=line.split()
64             xext.append(float(spline[0]))
65             yext.append(float(spline[1]))
66             xret.append(float(spline[2]))
67             yret.append(float(spline[3]))
68             
69         return [[xext,yext],[xret,yret]]
70         
71     def deflection(self):
72         self.data=self._read_columns()
73         return self.data[0][1],self.data[1][1]
74         
75         
76     def default_plots(self):   
77         main_plot=lhc.PlotObject()
78         defl_ext,defl_ret=self.deflection()
79         yextforce=[i*self.k for i in defl_ext]
80         yretforce=[i*self.k for i in defl_ret]
81         main_plot.add_set(self.data[0][0],yextforce)
82         main_plot.add_set(self.data[1][0],yretforce)
83         main_plot.normalize_vectors()
84         main_plot.units=['Z','force']  #FIXME: if there's an header saying something about the time count, should be used
85         main_plot.destination=0
86         main_plot.title=self.filename
87         #main_plot.colors=['red','blue']
88         return [main_plot]