X-Git-Url: http://git.tremily.us/?p=hooke.git;a=blobdiff_plain;f=hooke%2Fdriver%2Fcsvdriver.py;h=89ff5ff52022430b104476196770f5f648ad023b;hp=227935a7dc3ef48fd47b603923849511b9b57318;hb=c46aaa51003a6722a28eea0e49f63ef1bb0e882d;hpb=bdb1fd5e614e714daf3fe86c55f4e6c4a073baee diff --git a/hooke/driver/csvdriver.py b/hooke/driver/csvdriver.py index 227935a..89ff5ff 100644 --- a/hooke/driver/csvdriver.py +++ b/hooke/driver/csvdriver.py @@ -1,21 +1,4 @@ -# Copyright (C) 2008-2010 Massimo Sandal -# W. Trevor King -# -# This file is part of Hooke. -# -# Hooke is free software: you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation, either -# version 3 of the License, or (at your option) any later version. -# -# Hooke is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with Hooke. If not, see -# . +# Copyright """Simple driver to read general comma-separated values in Hooke @@ -26,60 +9,68 @@ X1 , Y1 , X2 , Y2 , X3 , Y3 ... If the number of columns is odd, the last column is ignored. """ -from .. import curve as lhc -from .. import libhooke as lh import csv - -class csvdriverDriver(lhc.Driver): - - def __init__(self, filename): - - self.filedata = open(filename,'r') - self.data = list(self.filedata) - self.filedata.close() - - self.filetype = 'generic' - self.experiment = '' - - self.filename=filename - - def is_me(self): - myfile=file(self.filename) - headerline=myfile.readlines()[0] - myfile.close() - - #using a custom header makes things much easier... - #(looking for raw CSV data is at strong risk of confusion) - if headerline[:-1]=='Hooke data': - return True - else: - return False - - def close_all(self): - self.filedata.close() - - def default_plots(self): - rrows=csv.reader(self.data) - rows=list(rrows) #transform the csv.reader iterator in a normal list - columns=lh.transposed2(rows[1:]) - - main_plot=lhc.PlotObject() - main_plot.vectors=[] - - for index in range(0,len(columns),2): - main_plot.vectors.append([]) - temp_x=columns[index] - temp_y=columns[index+1] - - #convert to float (the csv gives strings) - temp_x=[float(item) for item in temp_x] - temp_y=[float(item) for item in temp_y] - - main_plot.vectors[-1].append(temp_x) - main_plot.vectors[-1].append(temp_y) - - main_plot.units=['x','y'] - main_plot.title=self.filename - main_plot.destination=0 - - return [main_plot] +import os.path + +import lib.curve +import lib.driver +import lib.libhooke +import lib.plot + +class csvdriverDriver(lib.driver.Driver): + + def __init__(self, filename): + + self.filedata = open(filename,'r') + self.data = list(self.filedata) + self.filedata.close() + + self.filetype = 'generic' + self.experiment = '' + + self.filename=filename + + def close_all(self): + self.filedata.close() + + def default_plots(self): + rrows=csv.reader(self.data) + rows=list(rrows) #transform the csv.reader iterator into a normal list + columns=lib.libhooke.transposed2(rows[1:]) + + for index in range(0, len(columns), 2): + temp_x=columns[index] + temp_y=columns[index+1] + #convert to float (the csv gives strings) + temp_x=[float(item) for item in temp_x] + temp_y=[float(item) for item in temp_y] + + curve = lib.curve.Curve() + + curve.destination.row = index + 1 + curve.label = 'curve ' + str(index) + curve.style = 'plot' + curve.units.x = 'x' + curve.units.y = 'y' + curve.x = temp_x + curve.y = temp_y + + plot = lib.plot.Plot() + plot.title = os.path.basename(self.filename) + plot.curves.append(curve) + + #TODO: is normalization helpful or detrimental here? + #plot.normalize() + return plot + + def is_me(self): + myfile=file(self.filename) + headerline=myfile.readlines()[0] + myfile.close() + + #using a custom header makes things much easier... + #(looking for raw CSV data is at strong risk of confusion) + if headerline[:-1]=='Hooke data': + return True + else: + return False