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, 7 months ago) by clausted
File size: 7591 byte(s)
Log Message:
Remove deprecated matplotlib graph from ba_class.  Other minor changes.
Line User Rev File contents
1 clausted 7 """
2 clausted 47 ba_class
3     --------
4 clausted 7
5 clausted 47 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 clausted 48
17 clausted 47 >>> 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 clausted 7 """
22 clausted 50 __version__ = "110208"
23 clausted 7
24 clausted 47
25 clausted 7 ## Import libraries.
26     import numpy as np
27     from datetime import date
28    
29    
30     class BiosensorArray(object):
31 clausted 27 """
32     The Biosensor Array class holds all ROIs (spots)
33     from an SPRI microarray run.
34    
35 clausted 47 ================ =============== =======================================
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 clausted 27 """
45    
46 clausted 7 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 clausted 47 return
57 clausted 7
58     def xy2uid(self, gx, gy, x, y):
59     """Given roi coordinates, find corresponding uid (index)."""
60     coor1 = (gx, gy, x, y)
61 clausted 50 for roi in self.roi:
62     coor2 = (roi.gridx, roi.gridy, roi.spotx, roi.spoty)
63     if (coor1==coor2): return roi.uid ## Success.
64 clausted 7 return -1 ## Failure.
65    
66     def set_plot_all(self):
67     """Choose to plot every sensorgram."""
68 clausted 50 for roi in self.roi: roi.plottable = True
69 clausted 47 return
70 clausted 7
71     def set_plot_list(self, ilist):
72     """Choose a list of sensorgrams to plot"""
73 clausted 50 for roi in self.roi: roi.plottable = False
74 clausted 7 for i in ilist: self.roi[i].plottable = True
75 clausted 47 return
76    
77     """End of BiosensorArray class definition."""
78 clausted 7
79    
80     class RegOfInterest(object):
81 clausted 27 """
82     This Region Of Interest class can hold one SPR sensorgram.
83    
84 clausted 47 =========== =============== =============================================
85 clausted 27 Property Type Description
86 clausted 47 ----------- --------------- ---------------------------------------------
87 clausted 27 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 clausted 47 =========== =============== =============================================
113 clausted 27 """
114    
115 clausted 7 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 clausted 17 ## Curve fitting information. Model and model parameters.
143     ## Example model is reference to function like data=simple1to1(times,params)
144 clausted 28 ## Example params = {'Rmax': {'value':1, 'min':0, 'max':10, 'fixed':'float'} }
145 clausted 17 self.model = None ## Model describing this roi. Reference to a function.
146     self.params = [] ## Parameters for this model. A dictionary of dictionaries.
147 clausted 7
148     def time2dp(self, t):
149     """Find datapoint closest to given time."""
150 clausted 13 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 clausted 7 t2 = abs(self.time[pos2] - t)
154     t1 = abs(self.time[pos1] - t)
155 clausted 13 ## Decide if time point just before or just after is closer.
156 clausted 7 if (t2<t1):
157     return pos2
158     else:
159     return pos1
160 clausted 12
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 clausted 13 return [self.value[i] for i in range(dp1, dp2)]
165 clausted 12
166 clausted 47 """End of RegOfInterest definition."""
167 clausted 7
168 clausted 50
169 clausted 28 ################################# End of module #################################