ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/osprai/osprai/trunk/ba_class.py
Revision: 50
Committed: Wed Feb 9 00:32:35 2011 UTC (8 years, 4 months ago) by clausted
File size: 7591 byte(s)
Log Message:
Remove deprecated matplotlib graph from ba_class.  Other minor changes.
Line File contents
1 """
2 ba_class
3 --------
4
5 Biosensor Array class for storing SPRI data.
6 This contains an array of SPR sensorgrams with their
7 associated models and parameters.
8 This can also contain the microarray geometery.
9
10 .. moduleauthor:: Christopher Lausted,
11 Institute for Systems Biology,
12 Yuhang Wan,
13 OSPRAI developers.
14
15 Examples::
16
17 >>> ba1 = BiosensorArray(800,1500) ## Allocate object with 800 spots of 1500 time points.
18 >>> ba1.roi[799].time[1499] = 7502.1 ## Set time in seconds.
19 >>> ba1.roi[799].value[1499] = 0.50 ## Set SPR reflectance signal.
20 >>> ba1.roi[799].name = "anti-IgG" ## Set name of microarray feature.
21 """
22 __version__ = "110208"
23
24
25 ## Import libraries.
26 import numpy as np
27 from datetime import date
28
29
30 class BiosensorArray(object):
31 """
32 The Biosensor Array class holds all ROIs (spots)
33 from an SPRI microarray run.
34
35 ================ =============== =======================================
36 Property Type Description
37 ---------------- --------------- ---------------------------------------
38 roi list of object List of RegOfInterest objects.
39 rois integer Size of roi (Number of ROIs).
40 dpoints integer Number of datapoints in each ROI.
41 primarydatafiles list of string List of file names.
42 comments list of string List of comments regarding experiments.
43 ================ =============== =======================================
44 """
45
46 def __init__(self, roi_size, datapoint_size):
47 """This object is dimensioned upon initialization.""" ## Might improve speed.
48 ## Use a list comprehension to dimension list of classes.
49 self.roi = [RegOfInterest(i,datapoint_size) for i in range(roi_size)]
50 ## Remember the dimensions for quick bounds-checking later.
51 self.rois = roi_size
52 self.dpoints = datapoint_size
53 ## Use these to keep track of laboratory notes.
54 self.primarydatafiles = [""] ## Like "spritdata.txt"
55 self.comments = [""] ## Like "Antibody data from 1 Jan 2010"
56 return
57
58 def xy2uid(self, gx, gy, x, y):
59 """Given roi coordinates, find corresponding uid (index)."""
60 coor1 = (gx, gy, x, y)
61 for roi in self.roi:
62 coor2 = (roi.gridx, roi.gridy, roi.spotx, roi.spoty)
63 if (coor1==coor2): return roi.uid ## Success.
64 return -1 ## Failure.
65
66 def set_plot_all(self):
67 """Choose to plot every sensorgram."""
68 for roi in self.roi: roi.plottable = True
69 return
70
71 def set_plot_list(self, ilist):
72 """Choose a list of sensorgrams to plot"""
73 for roi in self.roi: roi.plottable = False
74 for i in ilist: self.roi[i].plottable = True
75 return
76
77 """End of BiosensorArray class definition."""
78
79
80 class RegOfInterest(object):
81 """
82 This Region Of Interest class can hold one SPR sensorgram.
83
84 =========== =============== =============================================
85 Property Type Description
86 ----------- --------------- ---------------------------------------------
87 uid integer Unique ID integer. Never changes.
88 index integer Changes if ba size changes (add/remove rois).
89 time nparray Usually seconds.
90 value nparray Arbitrary units.
91 dpoints integer Can use for bounds checking.
92 name string Name of ROI.
93 desc string Description of ROI
94
95 gridx integer Can be Block number from GAL file.
96 gridy integer Unused?
97 spotx integer ROI column number.
98 spoty integer ROI row number.
99 bgroi list of integer One or more background ROIs.
100 calibM float Slope used for calibration
101 calibB float Intercept used for calibration.
102 plottable boolean Whether to plot
103
104 injconc list of float One or more analyte concentrations.
105 injstart list of float One or more injection start times.
106 injstop list of float One or more injection start times.
107 injrind list of float One or more expected refractive index jumps.
108
109 flow float Flowrate of injection.
110 model ref to funct Model describing this ROI.
111 params dict of dict Parameters for this model.
112 =========== =============== =============================================
113 """
114
115 def __init__(self, i, datapoint_size):
116 """
117 Each ROI in a list needs a unique ID number which will be i+1.
118 The time and value arrays must be allocated using datapoint_size.
119 """
120 self.uid = i+1 ## Unique ID integer. Never changes.
121 self.index = i ## Changes if ba size changes (add/remove rois).
122 self.time = np.zeros(datapoint_size, dtype=float) ## Usually seconds.
123 self.value = np.zeros(datapoint_size, dtype=float) ## Arbitrary units.
124 self.dpoints = datapoint_size ## Can use for bounds checking.
125 ## Useful optional information. Usually from GAL or Key files.
126 self.name = "Spot%i" % (i+1)
127 self.desc = "Description"
128 self.gridx = 0 ## Can be Block number from GAL file.
129 self.gridy = 0 ## Unused?
130 self.spotx = 0 ## ROI column number.
131 self.spoty = 0 ## ROI row number.
132 self.bgroi = [0] ## One or more background ROIs.
133 self.calibM = 1 ## Slope used for calibration
134 self.calibB = 0 ## Intercept used for calibration.
135 self.plottable = True ## Whether to plot
136 ## Optional injection information. Usually from Clamp or ICM Method files.
137 self.injconc = [0.0] ## One or more analyte concentrations.
138 self.injstart = [0.0] ## One or more injection start times.
139 self.injstop = [0.0] ## One or more injection start times.
140 self.injrind = [0.0] ## One or more expected refractive index jumps.
141 self.flow = 0 ## Flowrate of injection.
142 ## Curve fitting information. Model and model parameters.
143 ## Example model is reference to function like data=simple1to1(times,params)
144 ## Example params = {'Rmax': {'value':1, 'min':0, 'max':10, 'fixed':'float'} }
145 self.model = None ## Model describing this roi. Reference to a function.
146 self.params = [] ## Parameters for this model. A dictionary of dictionaries.
147
148 def time2dp(self, t):
149 """Find datapoint closest to given time."""
150 pos2 = self.time.searchsorted(t) ## Time point just after t.
151 pos2 = min(pos2, len(self.time)-1) ## Avoid indexing error.
152 pos1 = max(pos2-1,0) ## Time point just before t.
153 t2 = abs(self.time[pos2] - t)
154 t1 = abs(self.time[pos1] - t)
155 ## Decide if time point just before or just after is closer.
156 if (t2<t1):
157 return pos2
158 else:
159 return pos1
160
161 def time2val(self, t1, t2):
162 """Return list of SPR values between t1 and t2"""
163 dp1, dp2 = self.time2dp(t1), self.time2dp(t2)
164 return [self.value[i] for i in range(dp1, dp2)]
165
166 """End of RegOfInterest definition."""
167
168
169 ################################# End of module #################################