6 driver for mcs fluorescence files
8 Massimo Sandal, Allen Chen (c) 2009
11 import libhookecurve as lhc
15 class mcsDriver(lhc.Driver):
17 def __init__(self, filename):
19 Open the RED (A) ones; the BLUE (D) mirror ones will be automatically opened
21 #obtain name of blue files
23 if othername[-8]=='a': #fixme: how to make it general? (maybe should not be in driverspace but in environment...)
26 othername=''.join(oth)
27 self.filename=filename
28 self.othername=othername
30 #print self.filename, self.othername
32 self.filedata=open(filename,'rb')
33 self.reddata=self.filedata.read()
36 self.filebluedata=open(othername,'rb') #open also the blue ones
37 self.bluedata=self.filebluedata.read()
38 self.filebluedata.close()
41 self.experiment = 'smfluo'
44 if self.filename[-3:].lower()=='mcs':
51 self.filebluedata.close()
54 def default_plots(self):
55 red_data=self.read_file(self.reddata)
56 blue_data=self.read_file(self.bluedata)
57 blue_data=[-1*float(item) for item in blue_data] #visualize blue as "mirror" of red
59 main_plot=lhc.PlotObject()
60 main_plot.add_set(range(len(red_data)),red_data)
61 main_plot.add_set(range(len(blue_data)),blue_data)
62 main_plot.normalize_vectors()
63 main_plot.units=['time','count'] #FIXME: if there's an header saying something about the time count, should be used
64 main_plot.destination=0
65 main_plot.title=self.filename
66 main_plot.colors=['red','blue']
70 def read_file(self, raw_data):
72 intervalsperfile=struct.unpack('h', raw_data[10:12])[0] #read in number of intervals in this file
73 #this data is contained in bit offset 10-12 in mcs file
74 #see http://docs.python.org/library/struct.html#module-struct for additional explanation
76 numbytes=len(raw_data) #data is stored in 4-byte chunks, starting with pos 256
77 for j in range(0,intervalsperfile): #read in all intervals in file
78 temp=raw_data[256+j*4:256+j*4+4] #data starts at byte offset 256
79 real_data.append(struct.unpack('i', temp)[0]) #[0] because it returns a 1-element tuple