##// END OF EJS Templates
Daniel Valdez -
r338:d2d050d0b778
parent child
Show More
@@ -1,1323 +1,1324
1 import numpy
1 import numpy
2 import time, datetime, os
2 import time, datetime, os
3 from graphics.figure import *
3 from graphics.figure import *
4
4
5 class CrossSpectraPlot(Figure):
5 class CrossSpectraPlot(Figure):
6
6
7 __isConfig = None
7 __isConfig = None
8 __nsubplots = None
8 __nsubplots = None
9
9
10 WIDTH = None
10 WIDTH = None
11 HEIGHT = None
11 HEIGHT = None
12 WIDTHPROF = None
12 WIDTHPROF = None
13 HEIGHTPROF = None
13 HEIGHTPROF = None
14 PREFIX = 'cspc'
14 PREFIX = 'cspc'
15
15
16 def __init__(self):
16 def __init__(self):
17
17
18 self.__isConfig = False
18 self.__isConfig = False
19 self.__nsubplots = 4
19 self.__nsubplots = 4
20
20
21 self.WIDTH = 250
21 self.WIDTH = 250
22 self.HEIGHT = 250
22 self.HEIGHT = 250
23 self.WIDTHPROF = 0
23 self.WIDTHPROF = 0
24 self.HEIGHTPROF = 0
24 self.HEIGHTPROF = 0
25
25
26 def getSubplots(self):
26 def getSubplots(self):
27
27
28 ncol = 4
28 ncol = 4
29 nrow = self.nplots
29 nrow = self.nplots
30
30
31 return nrow, ncol
31 return nrow, ncol
32
32
33 def setup(self, idfigure, nplots, wintitle, showprofile=True):
33 def setup(self, idfigure, nplots, wintitle, showprofile=True):
34
34
35 self.__showprofile = showprofile
35 self.__showprofile = showprofile
36 self.nplots = nplots
36 self.nplots = nplots
37
37
38 ncolspan = 1
38 ncolspan = 1
39 colspan = 1
39 colspan = 1
40
40
41 self.createFigure(idfigure = idfigure,
41 self.createFigure(idfigure = idfigure,
42 wintitle = wintitle,
42 wintitle = wintitle,
43 widthplot = self.WIDTH + self.WIDTHPROF,
43 widthplot = self.WIDTH + self.WIDTHPROF,
44 heightplot = self.HEIGHT + self.HEIGHTPROF)
44 heightplot = self.HEIGHT + self.HEIGHTPROF)
45
45
46 nrow, ncol = self.getSubplots()
46 nrow, ncol = self.getSubplots()
47
47
48 counter = 0
48 counter = 0
49 for y in range(nrow):
49 for y in range(nrow):
50 for x in range(ncol):
50 for x in range(ncol):
51 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan, colspan, 1)
51 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan, colspan, 1)
52
52
53 counter += 1
53 counter += 1
54
54
55 def run(self, dataOut, idfigure, wintitle="", pairsList=None, showprofile='True',
55 def run(self, dataOut, idfigure, wintitle="", pairsList=None, showprofile='True',
56 xmin=None, xmax=None, ymin=None, ymax=None, zmin=None, zmax=None,
56 xmin=None, xmax=None, ymin=None, ymax=None, zmin=None, zmax=None,
57 save=False, figpath='./', figfile=None,
57 save=False, figpath='./', figfile=None,
58 power_cmap='jet', coherence_cmap='jet', phase_cmap='RdBu_r'):
58 power_cmap='jet', coherence_cmap='jet', phase_cmap='RdBu_r'):
59
59
60 """
60 """
61
61
62 Input:
62 Input:
63 dataOut :
63 dataOut :
64 idfigure :
64 idfigure :
65 wintitle :
65 wintitle :
66 channelList :
66 channelList :
67 showProfile :
67 showProfile :
68 xmin : None,
68 xmin : None,
69 xmax : None,
69 xmax : None,
70 ymin : None,
70 ymin : None,
71 ymax : None,
71 ymax : None,
72 zmin : None,
72 zmin : None,
73 zmax : None
73 zmax : None
74 """
74 """
75
75
76 if pairsList == None:
76 if pairsList == None:
77 pairsIndexList = dataOut.pairsIndexList
77 pairsIndexList = dataOut.pairsIndexList
78 else:
78 else:
79 pairsIndexList = []
79 pairsIndexList = []
80 for pair in pairsList:
80 for pair in pairsList:
81 if pair not in dataOut.pairsList:
81 if pair not in dataOut.pairsList:
82 raise ValueError, "Pair %s is not in dataOut.pairsList" %(pair)
82 raise ValueError, "Pair %s is not in dataOut.pairsList" %(pair)
83 pairsIndexList.append(dataOut.pairsList.index(pair))
83 pairsIndexList.append(dataOut.pairsList.index(pair))
84
84
85 if pairsIndexList == []:
85 if pairsIndexList == []:
86 return
86 return
87
87
88 if len(pairsIndexList) > 4:
88 if len(pairsIndexList) > 4:
89 pairsIndexList = pairsIndexList[0:4]
89 pairsIndexList = pairsIndexList[0:4]
90 factor = dataOut.normFactor
90 factor = dataOut.normFactor
91 x = dataOut.getVelRange(1)
91 x = dataOut.getVelRange(1)
92 y = dataOut.getHeiRange()
92 y = dataOut.getHeiRange()
93 z = dataOut.data_spc[:,:,:]/factor
93 z = dataOut.data_spc[:,:,:]/factor
94 # z = numpy.where(numpy.isfinite(z), z, numpy.NAN)
94 # z = numpy.where(numpy.isfinite(z), z, numpy.NAN)
95 avg = numpy.abs(numpy.average(z, axis=1))
95 avg = numpy.abs(numpy.average(z, axis=1))
96 noise = dataOut.getNoise()/factor
96 noise = dataOut.getNoise()/factor
97
97
98 zdB = 10*numpy.log10(z)
98 zdB = 10*numpy.log10(z)
99 avgdB = 10*numpy.log10(avg)
99 avgdB = 10*numpy.log10(avg)
100 noisedB = 10*numpy.log10(noise)
100 noisedB = 10*numpy.log10(noise)
101
101
102
102
103 thisDatetime = dataOut.datatime
103 thisDatetime = dataOut.datatime
104 title = "Cross-Spectra: %s" %(thisDatetime.strftime("%d-%b-%Y %H:%M:%S"))
104 title = "Cross-Spectra: %s" %(thisDatetime.strftime("%d-%b-%Y %H:%M:%S"))
105 xlabel = "Velocity (m/s)"
105 xlabel = "Velocity (m/s)"
106 ylabel = "Range (Km)"
106 ylabel = "Range (Km)"
107
107
108 if not self.__isConfig:
108 if not self.__isConfig:
109
109
110 nplots = len(pairsIndexList)
110 nplots = len(pairsIndexList)
111
111
112 self.setup(idfigure=idfigure,
112 self.setup(idfigure=idfigure,
113 nplots=nplots,
113 nplots=nplots,
114 wintitle=wintitle,
114 wintitle=wintitle,
115 showprofile=showprofile)
115 showprofile=showprofile)
116
116
117 if xmin == None: xmin = numpy.nanmin(x)
117 if xmin == None: xmin = numpy.nanmin(x)
118 if xmax == None: xmax = numpy.nanmax(x)
118 if xmax == None: xmax = numpy.nanmax(x)
119 if ymin == None: ymin = numpy.nanmin(y)
119 if ymin == None: ymin = numpy.nanmin(y)
120 if ymax == None: ymax = numpy.nanmax(y)
120 if ymax == None: ymax = numpy.nanmax(y)
121 if zmin == None: zmin = numpy.nanmin(avgdB)*0.9
121 if zmin == None: zmin = numpy.nanmin(avgdB)*0.9
122 if zmax == None: zmax = numpy.nanmax(avgdB)*0.9
122 if zmax == None: zmax = numpy.nanmax(avgdB)*0.9
123
123
124 self.__isConfig = True
124 self.__isConfig = True
125
125
126 self.setWinTitle(title)
126 self.setWinTitle(title)
127
127
128 for i in range(self.nplots):
128 for i in range(self.nplots):
129 pair = dataOut.pairsList[pairsIndexList[i]]
129 pair = dataOut.pairsList[pairsIndexList[i]]
130
130
131 title = "Channel %d: %4.2fdB" %(pair[0], noisedB[pair[0]])
131 title = "Channel %d: %4.2fdB" %(pair[0], noisedB[pair[0]])
132 zdB = 10.*numpy.log10(dataOut.data_spc[pair[0],:,:]/factor)
132 zdB = 10.*numpy.log10(dataOut.data_spc[pair[0],:,:]/factor)
133 axes0 = self.axesList[i*self.__nsubplots]
133 axes0 = self.axesList[i*self.__nsubplots]
134 axes0.pcolor(x, y, zdB,
134 axes0.pcolor(x, y, zdB,
135 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax, zmin=zmin, zmax=zmax,
135 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax, zmin=zmin, zmax=zmax,
136 xlabel=xlabel, ylabel=ylabel, title=title,
136 xlabel=xlabel, ylabel=ylabel, title=title,
137 ticksize=9, colormap=power_cmap, cblabel='')
137 ticksize=9, colormap=power_cmap, cblabel='')
138
138
139 title = "Channel %d: %4.2fdB" %(pair[1], noisedB[pair[1]])
139 title = "Channel %d: %4.2fdB" %(pair[1], noisedB[pair[1]])
140 zdB = 10.*numpy.log10(dataOut.data_spc[pair[1],:,:]/factor)
140 zdB = 10.*numpy.log10(dataOut.data_spc[pair[1],:,:]/factor)
141 axes0 = self.axesList[i*self.__nsubplots+1]
141 axes0 = self.axesList[i*self.__nsubplots+1]
142 axes0.pcolor(x, y, zdB,
142 axes0.pcolor(x, y, zdB,
143 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax, zmin=zmin, zmax=zmax,
143 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax, zmin=zmin, zmax=zmax,
144 xlabel=xlabel, ylabel=ylabel, title=title,
144 xlabel=xlabel, ylabel=ylabel, title=title,
145 ticksize=9, colormap=power_cmap, cblabel='')
145 ticksize=9, colormap=power_cmap, cblabel='')
146
146
147 coherenceComplex = dataOut.data_cspc[pairsIndexList[i],:,:]/numpy.sqrt(dataOut.data_spc[pair[0],:,:]*dataOut.data_spc[pair[1],:,:])
147 coherenceComplex = dataOut.data_cspc[pairsIndexList[i],:,:]/numpy.sqrt(dataOut.data_spc[pair[0],:,:]*dataOut.data_spc[pair[1],:,:])
148 coherence = numpy.abs(coherenceComplex)
148 coherence = numpy.abs(coherenceComplex)
149 # phase = numpy.arctan(-1*coherenceComplex.imag/coherenceComplex.real)*180/numpy.pi
149 # phase = numpy.arctan(-1*coherenceComplex.imag/coherenceComplex.real)*180/numpy.pi
150 phase = numpy.arctan2(coherenceComplex.imag, coherenceComplex.real)*180/numpy.pi
150 phase = numpy.arctan2(coherenceComplex.imag, coherenceComplex.real)*180/numpy.pi
151
151
152 title = "Coherence %d%d" %(pair[0], pair[1])
152 title = "Coherence %d%d" %(pair[0], pair[1])
153 axes0 = self.axesList[i*self.__nsubplots+2]
153 axes0 = self.axesList[i*self.__nsubplots+2]
154 axes0.pcolor(x, y, coherence,
154 axes0.pcolor(x, y, coherence,
155 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax, zmin=0, zmax=1,
155 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax, zmin=0, zmax=1,
156 xlabel=xlabel, ylabel=ylabel, title=title,
156 xlabel=xlabel, ylabel=ylabel, title=title,
157 ticksize=9, colormap=coherence_cmap, cblabel='')
157 ticksize=9, colormap=coherence_cmap, cblabel='')
158
158
159 title = "Phase %d%d" %(pair[0], pair[1])
159 title = "Phase %d%d" %(pair[0], pair[1])
160 axes0 = self.axesList[i*self.__nsubplots+3]
160 axes0 = self.axesList[i*self.__nsubplots+3]
161 axes0.pcolor(x, y, phase,
161 axes0.pcolor(x, y, phase,
162 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax, zmin=-180, zmax=180,
162 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax, zmin=-180, zmax=180,
163 xlabel=xlabel, ylabel=ylabel, title=title,
163 xlabel=xlabel, ylabel=ylabel, title=title,
164 ticksize=9, colormap=phase_cmap, cblabel='')
164 ticksize=9, colormap=phase_cmap, cblabel='')
165
165
166
166
167
167
168 self.draw()
168 self.draw()
169
169
170 if save:
170 if save:
171 date = thisDatetime.strftime("%Y%m%d_%H%M%S")
171 date = thisDatetime.strftime("%Y%m%d_%H%M%S")
172 if figfile == None:
172 if figfile == None:
173 figfile = self.getFilename(name = date)
173 figfile = self.getFilename(name = date)
174
174
175 self.saveFigure(figpath, figfile)
175 self.saveFigure(figpath, figfile)
176
176
177
177
178 class RTIPlot(Figure):
178 class RTIPlot(Figure):
179
179
180 __isConfig = None
180 __isConfig = None
181 __nsubplots = None
181 __nsubplots = None
182
182
183 WIDTHPROF = None
183 WIDTHPROF = None
184 HEIGHTPROF = None
184 HEIGHTPROF = None
185 PREFIX = 'rti'
185 PREFIX = 'rti'
186
186
187 def __init__(self):
187 def __init__(self):
188
188
189 self.timerange = 2*60*60
189 self.timerange = 2*60*60
190 self.__isConfig = False
190 self.__isConfig = False
191 self.__nsubplots = 1
191 self.__nsubplots = 1
192
192
193 self.WIDTH = 800
193 self.WIDTH = 800
194 self.HEIGHT = 150
194 self.HEIGHT = 150
195 self.WIDTHPROF = 120
195 self.WIDTHPROF = 120
196 self.HEIGHTPROF = 0
196 self.HEIGHTPROF = 0
197 self.counterftp = 0
197 self.counterftp = 0
198
198
199 def getSubplots(self):
199 def getSubplots(self):
200
200
201 ncol = 1
201 ncol = 1
202 nrow = self.nplots
202 nrow = self.nplots
203
203
204 return nrow, ncol
204 return nrow, ncol
205
205
206 def setup(self, idfigure, nplots, wintitle, showprofile=True):
206 def setup(self, idfigure, nplots, wintitle, showprofile=True):
207
207
208 self.__showprofile = showprofile
208 self.__showprofile = showprofile
209 self.nplots = nplots
209 self.nplots = nplots
210
210
211 ncolspan = 1
211 ncolspan = 1
212 colspan = 1
212 colspan = 1
213 if showprofile:
213 if showprofile:
214 ncolspan = 7
214 ncolspan = 7
215 colspan = 6
215 colspan = 6
216 self.__nsubplots = 2
216 self.__nsubplots = 2
217
217
218 self.createFigure(idfigure = idfigure,
218 self.createFigure(idfigure = idfigure,
219 wintitle = wintitle,
219 wintitle = wintitle,
220 widthplot = self.WIDTH + self.WIDTHPROF,
220 widthplot = self.WIDTH + self.WIDTHPROF,
221 heightplot = self.HEIGHT + self.HEIGHTPROF)
221 heightplot = self.HEIGHT + self.HEIGHTPROF)
222
222
223 nrow, ncol = self.getSubplots()
223 nrow, ncol = self.getSubplots()
224
224
225 counter = 0
225 counter = 0
226 for y in range(nrow):
226 for y in range(nrow):
227 for x in range(ncol):
227 for x in range(ncol):
228
228
229 if counter >= self.nplots:
229 if counter >= self.nplots:
230 break
230 break
231
231
232 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan, colspan, 1)
232 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan, colspan, 1)
233
233
234 if showprofile:
234 if showprofile:
235 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan+colspan, 1, 1)
235 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan+colspan, 1, 1)
236
236
237 counter += 1
237 counter += 1
238
238
239 def run(self, dataOut, idfigure, wintitle="", channelList=None, showprofile='True',
239 def run(self, dataOut, idfigure, wintitle="", channelList=None, showprofile='True',
240 xmin=None, xmax=None, ymin=None, ymax=None, zmin=None, zmax=None,
240 xmin=None, xmax=None, ymin=None, ymax=None, zmin=None, zmax=None,
241 timerange=None,
241 timerange=None,
242 save=False, figpath='./', figfile=None, ftp=False, ftpratio=1):
242 save=False, figpath='./', figfile=None, ftp=False, ftpratio=1):
243
243
244 """
244 """
245
245
246 Input:
246 Input:
247 dataOut :
247 dataOut :
248 idfigure :
248 idfigure :
249 wintitle :
249 wintitle :
250 channelList :
250 channelList :
251 showProfile :
251 showProfile :
252 xmin : None,
252 xmin : None,
253 xmax : None,
253 xmax : None,
254 ymin : None,
254 ymin : None,
255 ymax : None,
255 ymax : None,
256 zmin : None,
256 zmin : None,
257 zmax : None
257 zmax : None
258 """
258 """
259
259
260 if channelList == None:
260 if channelList == None:
261 channelIndexList = dataOut.channelIndexList
261 channelIndexList = dataOut.channelIndexList
262 else:
262 else:
263 channelIndexList = []
263 channelIndexList = []
264 for channel in channelList:
264 for channel in channelList:
265 if channel not in dataOut.channelList:
265 if channel not in dataOut.channelList:
266 raise ValueError, "Channel %d is not in dataOut.channelList"
266 raise ValueError, "Channel %d is not in dataOut.channelList"
267 channelIndexList.append(dataOut.channelList.index(channel))
267 channelIndexList.append(dataOut.channelList.index(channel))
268
268
269 if timerange != None:
269 if timerange != None:
270 self.timerange = timerange
270 self.timerange = timerange
271
271
272 tmin = None
272 tmin = None
273 tmax = None
273 tmax = None
274 factor = dataOut.normFactor
274 factor = dataOut.normFactor
275 x = dataOut.getTimeRange()
275 x = dataOut.getTimeRange()
276 y = dataOut.getHeiRange()
276 y = dataOut.getHeiRange()
277
277
278 z = dataOut.data_spc[channelIndexList,:,:]/factor
278 z = dataOut.data_spc[channelIndexList,:,:]/factor
279 z = numpy.where(numpy.isfinite(z), z, numpy.NAN)
279 z = numpy.where(numpy.isfinite(z), z, numpy.NAN)
280 avg = numpy.average(z, axis=1)
280 avg = numpy.average(z, axis=1)
281
281
282 avgdB = 10.*numpy.log10(avg)
282 avgdB = 10.*numpy.log10(avg)
283
283
284
284
285 thisDatetime = dataOut.datatime
285 thisDatetime = dataOut.datatime
286 title = "RTI: %s" %(thisDatetime.strftime("%d-%b-%Y"))
286 title = "RTI: %s" %(thisDatetime.strftime("%d-%b-%Y"))
287 xlabel = ""
287 xlabel = ""
288 ylabel = "Range (Km)"
288 ylabel = "Range (Km)"
289
289
290 if not self.__isConfig:
290 if not self.__isConfig:
291
291
292 nplots = len(channelIndexList)
292 nplots = len(channelIndexList)
293
293
294 self.setup(idfigure=idfigure,
294 self.setup(idfigure=idfigure,
295 nplots=nplots,
295 nplots=nplots,
296 wintitle=wintitle,
296 wintitle=wintitle,
297 showprofile=showprofile)
297 showprofile=showprofile)
298
298
299 tmin, tmax = self.getTimeLim(x, xmin, xmax)
299 tmin, tmax = self.getTimeLim(x, xmin, xmax)
300 if ymin == None: ymin = numpy.nanmin(y)
300 if ymin == None: ymin = numpy.nanmin(y)
301 if ymax == None: ymax = numpy.nanmax(y)
301 if ymax == None: ymax = numpy.nanmax(y)
302 if zmin == None: zmin = numpy.nanmin(avgdB)*0.9
302 if zmin == None: zmin = numpy.nanmin(avgdB)*0.9
303 if zmax == None: zmax = numpy.nanmax(avgdB)*0.9
303 if zmax == None: zmax = numpy.nanmax(avgdB)*0.9
304
304
305 self.name = thisDatetime.strftime("%Y%m%d_%H%M%S")
305 self.name = thisDatetime.strftime("%Y%m%d_%H%M%S")
306 self.__isConfig = True
306 self.__isConfig = True
307
307
308
308
309 self.setWinTitle(title)
309 self.setWinTitle(title)
310
310
311 for i in range(self.nplots):
311 for i in range(self.nplots):
312 title = "Channel %d: %s" %(dataOut.channelList[i], thisDatetime.strftime("%d-%b-%Y %H:%M:%S"))
312 title = "Channel %d: %s" %(dataOut.channelList[i], thisDatetime.strftime("%d-%b-%Y %H:%M:%S"))
313 axes = self.axesList[i*self.__nsubplots]
313 axes = self.axesList[i*self.__nsubplots]
314 zdB = avgdB[i].reshape((1,-1))
314 zdB = avgdB[i].reshape((1,-1))
315 axes.pcolorbuffer(x, y, zdB,
315 axes.pcolorbuffer(x, y, zdB,
316 xmin=tmin, xmax=tmax, ymin=ymin, ymax=ymax, zmin=zmin, zmax=zmax,
316 xmin=tmin, xmax=tmax, ymin=ymin, ymax=ymax, zmin=zmin, zmax=zmax,
317 xlabel=xlabel, ylabel=ylabel, title=title, rti=True, XAxisAsTime=True,
317 xlabel=xlabel, ylabel=ylabel, title=title, rti=True, XAxisAsTime=True,
318 ticksize=9, cblabel='', cbsize="1%")
318 ticksize=9, cblabel='', cbsize="1%")
319
319
320 if self.__showprofile:
320 if self.__showprofile:
321 axes = self.axesList[i*self.__nsubplots +1]
321 axes = self.axesList[i*self.__nsubplots +1]
322 axes.pline(avgdB[i], y,
322 axes.pline(avgdB[i], y,
323 xmin=zmin, xmax=zmax, ymin=ymin, ymax=ymax,
323 xmin=zmin, xmax=zmax, ymin=ymin, ymax=ymax,
324 xlabel='dB', ylabel='', title='',
324 xlabel='dB', ylabel='', title='',
325 ytick_visible=False,
325 ytick_visible=False,
326 grid='x')
326 grid='x')
327
327
328 self.draw()
328 self.draw()
329
329
330 if save:
330 if save:
331
331
332 if figfile == None:
332 if figfile == None:
333 figfile = self.getFilename(name = self.name)
333 figfile = self.getFilename(name = self.name)
334
334
335 self.saveFigure(figpath, figfile)
335 self.saveFigure(figpath, figfile)
336
336
337 self.counterftp += 1
337 self.counterftp += 1
338 if (ftp and (self.counterftp==ftpratio)):
338 if (ftp and (self.counterftp==ftpratio)):
339 figfilename = os.path.join(figpath,figfile)
339 figfilename = os.path.join(figpath,figfile)
340 self.sendByFTP(figfilename)
340 self.sendByFTP(figfilename)
341 self.counterftp = 0
341 self.counterftp = 0
342
342
343 if x[1] + (x[1]-x[0]) >= self.axesList[0].xmax:
343 if x[1] + (x[1]-x[0]) >= self.axesList[0].xmax:
344 self.__isConfig = False
344 self.__isConfig = False
345
345
346 class SpectraPlot(Figure):
346 class SpectraPlot(Figure):
347
347
348 __isConfig = None
348 __isConfig = None
349 __nsubplots = None
349 __nsubplots = None
350
350
351 WIDTHPROF = None
351 WIDTHPROF = None
352 HEIGHTPROF = None
352 HEIGHTPROF = None
353 PREFIX = 'spc'
353 PREFIX = 'spc'
354
354
355 def __init__(self):
355 def __init__(self):
356
356
357 self.__isConfig = False
357 self.__isConfig = False
358 self.__nsubplots = 1
358 self.__nsubplots = 1
359
359
360 self.WIDTH = 230
360 self.WIDTH = 230
361 self.HEIGHT = 250
361 self.HEIGHT = 250
362 self.WIDTHPROF = 120
362 self.WIDTHPROF = 120
363 self.HEIGHTPROF = 0
363 self.HEIGHTPROF = 0
364
364
365 def getSubplots(self):
365 def getSubplots(self):
366
366
367 ncol = int(numpy.sqrt(self.nplots)+0.9)
367 ncol = int(numpy.sqrt(self.nplots)+0.9)
368 nrow = int(self.nplots*1./ncol + 0.9)
368 nrow = int(self.nplots*1./ncol + 0.9)
369
369
370 return nrow, ncol
370 return nrow, ncol
371
371
372 def setup(self, idfigure, nplots, wintitle, showprofile=True):
372 def setup(self, idfigure, nplots, wintitle, showprofile=True):
373
373
374 self.__showprofile = showprofile
374 self.__showprofile = showprofile
375 self.nplots = nplots
375 self.nplots = nplots
376
376
377 ncolspan = 1
377 ncolspan = 1
378 colspan = 1
378 colspan = 1
379 if showprofile:
379 if showprofile:
380 ncolspan = 3
380 ncolspan = 3
381 colspan = 2
381 colspan = 2
382 self.__nsubplots = 2
382 self.__nsubplots = 2
383
383
384 self.createFigure(idfigure = idfigure,
384 self.createFigure(idfigure = idfigure,
385 wintitle = wintitle,
385 wintitle = wintitle,
386 widthplot = self.WIDTH + self.WIDTHPROF,
386 widthplot = self.WIDTH + self.WIDTHPROF,
387 heightplot = self.HEIGHT + self.HEIGHTPROF)
387 heightplot = self.HEIGHT + self.HEIGHTPROF)
388
388
389 nrow, ncol = self.getSubplots()
389 nrow, ncol = self.getSubplots()
390
390
391 counter = 0
391 counter = 0
392 for y in range(nrow):
392 for y in range(nrow):
393 for x in range(ncol):
393 for x in range(ncol):
394
394
395 if counter >= self.nplots:
395 if counter >= self.nplots:
396 break
396 break
397
397
398 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan, colspan, 1)
398 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan, colspan, 1)
399
399
400 if showprofile:
400 if showprofile:
401 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan+colspan, 1, 1)
401 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan+colspan, 1, 1)
402
402
403 counter += 1
403 counter += 1
404
404
405 def run(self, dataOut, idfigure, wintitle="", channelList=None, showprofile='True',
405 def run(self, dataOut, idfigure, wintitle="", channelList=None, showprofile='True',
406 xmin=None, xmax=None, ymin=None, ymax=None, zmin=None, zmax=None,
406 xmin=None, xmax=None, ymin=None, ymax=None, zmin=None, zmax=None,
407 save=False, figpath='./', figfile=None):
407 save=False, figpath='./', figfile=None):
408
408
409 """
409 """
410
410
411 Input:
411 Input:
412 dataOut :
412 dataOut :
413 idfigure :
413 idfigure :
414 wintitle :
414 wintitle :
415 channelList :
415 channelList :
416 showProfile :
416 showProfile :
417 xmin : None,
417 xmin : None,
418 xmax : None,
418 xmax : None,
419 ymin : None,
419 ymin : None,
420 ymax : None,
420 ymax : None,
421 zmin : None,
421 zmin : None,
422 zmax : None
422 zmax : None
423 """
423 """
424
424
425 if channelList == None:
425 if channelList == None:
426 channelIndexList = dataOut.channelIndexList
426 channelIndexList = dataOut.channelIndexList
427 else:
427 else:
428 channelIndexList = []
428 channelIndexList = []
429 for channel in channelList:
429 for channel in channelList:
430 if channel not in dataOut.channelList:
430 if channel not in dataOut.channelList:
431 raise ValueError, "Channel %d is not in dataOut.channelList"
431 raise ValueError, "Channel %d is not in dataOut.channelList"
432 channelIndexList.append(dataOut.channelList.index(channel))
432 channelIndexList.append(dataOut.channelList.index(channel))
433 factor = dataOut.normFactor
433 factor = dataOut.normFactor
434 x = dataOut.getVelRange(1)
434 x = dataOut.getVelRange(1)
435 y = dataOut.getHeiRange()
435 y = dataOut.getHeiRange()
436
436
437 z = dataOut.data_spc[channelIndexList,:,:]/factor
437 z = dataOut.data_spc[channelIndexList,:,:]/factor
438 z = numpy.where(numpy.isfinite(z), z, numpy.NAN)
438 z = numpy.where(numpy.isfinite(z), z, numpy.NAN)
439 avg = numpy.average(z, axis=1)
439 avg = numpy.average(z, axis=1)
440 noise = dataOut.getNoise()/factor
440 noise = dataOut.getNoise()/factor
441
441
442 zdB = 10*numpy.log10(z)
442 zdB = 10*numpy.log10(z)
443 avgdB = 10*numpy.log10(avg)
443 avgdB = 10*numpy.log10(avg)
444 noisedB = 10*numpy.log10(noise)
444 noisedB = 10*numpy.log10(noise)
445
445
446 thisDatetime = dataOut.datatime
446 thisDatetime = dataOut.datatime
447 title = "Spectra: %s" %(thisDatetime.strftime("%d-%b-%Y %H:%M:%S"))
447 title = "Spectra: %s" %(thisDatetime.strftime("%d-%b-%Y %H:%M:%S"))
448 xlabel = "Velocity (m/s)"
448 xlabel = "Velocity (m/s)"
449 ylabel = "Range (Km)"
449 ylabel = "Range (Km)"
450
450
451 if not self.__isConfig:
451 if not self.__isConfig:
452
452
453 nplots = len(channelIndexList)
453 nplots = len(channelIndexList)
454
454
455 self.setup(idfigure=idfigure,
455 self.setup(idfigure=idfigure,
456 nplots=nplots,
456 nplots=nplots,
457 wintitle=wintitle,
457 wintitle=wintitle,
458 showprofile=showprofile)
458 showprofile=showprofile)
459
459
460 if xmin == None: xmin = numpy.nanmin(x)
460 if xmin == None: xmin = numpy.nanmin(x)
461 if xmax == None: xmax = numpy.nanmax(x)
461 if xmax == None: xmax = numpy.nanmax(x)
462 if ymin == None: ymin = numpy.nanmin(y)
462 if ymin == None: ymin = numpy.nanmin(y)
463 if ymax == None: ymax = numpy.nanmax(y)
463 if ymax == None: ymax = numpy.nanmax(y)
464 if zmin == None: zmin = numpy.nanmin(avgdB)*0.9
464 if zmin == None: zmin = numpy.nanmin(avgdB)*0.9
465 if zmax == None: zmax = numpy.nanmax(avgdB)*0.9
465 if zmax == None: zmax = numpy.nanmax(avgdB)*0.9
466
466
467 self.__isConfig = True
467 self.__isConfig = True
468
468
469 self.setWinTitle(title)
469 self.setWinTitle(title)
470
470
471 for i in range(self.nplots):
471 for i in range(self.nplots):
472 title = "Channel %d: %4.2fdB" %(dataOut.channelList[i], noisedB[i])
472 title = "Channel %d: %4.2fdB" %(dataOut.channelList[i], noisedB[i])
473 axes = self.axesList[i*self.__nsubplots]
473 axes = self.axesList[i*self.__nsubplots]
474 axes.pcolor(x, y, zdB[i,:,:],
474 axes.pcolor(x, y, zdB[i,:,:],
475 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax, zmin=zmin, zmax=zmax,
475 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax, zmin=zmin, zmax=zmax,
476 xlabel=xlabel, ylabel=ylabel, title=title,
476 xlabel=xlabel, ylabel=ylabel, title=title,
477 ticksize=9, cblabel='')
477 ticksize=9, cblabel='')
478
478
479 if self.__showprofile:
479 if self.__showprofile:
480 axes = self.axesList[i*self.__nsubplots +1]
480 axes = self.axesList[i*self.__nsubplots +1]
481 axes.pline(avgdB[i], y,
481 axes.pline(avgdB[i], y,
482 xmin=zmin, xmax=zmax, ymin=ymin, ymax=ymax,
482 xmin=zmin, xmax=zmax, ymin=ymin, ymax=ymax,
483 xlabel='dB', ylabel='', title='',
483 xlabel='dB', ylabel='', title='',
484 ytick_visible=False,
484 ytick_visible=False,
485 grid='x')
485 grid='x')
486
486
487 noiseline = numpy.repeat(noisedB[i], len(y))
487 noiseline = numpy.repeat(noisedB[i], len(y))
488 axes.addpline(noiseline, y, idline=1, color="black", linestyle="dashed", lw=2)
488 axes.addpline(noiseline, y, idline=1, color="black", linestyle="dashed", lw=2)
489
489
490 self.draw()
490 self.draw()
491
491
492 if save:
492 if save:
493 date = thisDatetime.strftime("%Y%m%d_%H%M%S")
493 date = thisDatetime.strftime("%Y%m%d_%H%M%S")
494 if figfile == None:
494 if figfile == None:
495 figfile = self.getFilename(name = date)
495 figfile = self.getFilename(name = date)
496
496
497 self.saveFigure(figpath, figfile)
497 self.saveFigure(figpath, figfile)
498
498
499 class Scope(Figure):
499 class Scope(Figure):
500
500
501 __isConfig = None
501 __isConfig = None
502
502
503 def __init__(self):
503 def __init__(self):
504
504
505 self.__isConfig = False
505 self.__isConfig = False
506 self.WIDTH = 600
506 self.WIDTH = 600
507 self.HEIGHT = 200
507 self.HEIGHT = 200
508
508
509 def getSubplots(self):
509 def getSubplots(self):
510
510
511 nrow = self.nplots
511 nrow = self.nplots
512 ncol = 3
512 ncol = 3
513 return nrow, ncol
513 return nrow, ncol
514
514
515 def setup(self, idfigure, nplots, wintitle):
515 def setup(self, idfigure, nplots, wintitle):
516
516
517 self.nplots = nplots
517 self.nplots = nplots
518
518
519 self.createFigure(idfigure, wintitle)
519 self.createFigure(idfigure, wintitle)
520
520
521 nrow,ncol = self.getSubplots()
521 nrow,ncol = self.getSubplots()
522 colspan = 3
522 colspan = 3
523 rowspan = 1
523 rowspan = 1
524
524
525 for i in range(nplots):
525 for i in range(nplots):
526 self.addAxes(nrow, ncol, i, 0, colspan, rowspan)
526 self.addAxes(nrow, ncol, i, 0, colspan, rowspan)
527
527
528
528
529
529
530 def run(self, dataOut, idfigure, wintitle="", channelList=None,
530 def run(self, dataOut, idfigure, wintitle="", channelList=None,
531 xmin=None, xmax=None, ymin=None, ymax=None, save=False,
531 xmin=None, xmax=None, ymin=None, ymax=None, save=False,
532 figpath='./', figfile=None):
532 figpath='./', figfile=None):
533
533
534 """
534 """
535
535
536 Input:
536 Input:
537 dataOut :
537 dataOut :
538 idfigure :
538 idfigure :
539 wintitle :
539 wintitle :
540 channelList :
540 channelList :
541 xmin : None,
541 xmin : None,
542 xmax : None,
542 xmax : None,
543 ymin : None,
543 ymin : None,
544 ymax : None,
544 ymax : None,
545 """
545 """
546
546
547 if channelList == None:
547 if channelList == None:
548 channelIndexList = dataOut.channelIndexList
548 channelIndexList = dataOut.channelIndexList
549 else:
549 else:
550 channelIndexList = []
550 channelIndexList = []
551 for channel in channelList:
551 for channel in channelList:
552 if channel not in dataOut.channelList:
552 if channel not in dataOut.channelList:
553 raise ValueError, "Channel %d is not in dataOut.channelList"
553 raise ValueError, "Channel %d is not in dataOut.channelList"
554 channelIndexList.append(dataOut.channelList.index(channel))
554 channelIndexList.append(dataOut.channelList.index(channel))
555
555
556 x = dataOut.heightList
556 x = dataOut.heightList
557 y = dataOut.data[channelIndexList,:] * numpy.conjugate(dataOut.data[channelIndexList,:])
557 y = dataOut.data[channelIndexList,:] * numpy.conjugate(dataOut.data[channelIndexList,:])
558 y = y.real
558 y = y.real
559
559
560 thisDatetime = dataOut.datatime
560 thisDatetime = dataOut.datatime
561 title = "Scope: %s" %(thisDatetime.strftime("%d-%b-%Y %H:%M:%S"))
561 title = "Scope: %s" %(thisDatetime.strftime("%d-%b-%Y %H:%M:%S"))
562 xlabel = "Range (Km)"
562 xlabel = "Range (Km)"
563 ylabel = "Intensity"
563 ylabel = "Intensity"
564
564
565 if not self.__isConfig:
565 if not self.__isConfig:
566 nplots = len(channelIndexList)
566 nplots = len(channelIndexList)
567
567
568 self.setup(idfigure=idfigure,
568 self.setup(idfigure=idfigure,
569 nplots=nplots,
569 nplots=nplots,
570 wintitle=wintitle)
570 wintitle=wintitle)
571
571
572 if xmin == None: xmin = numpy.nanmin(x)
572 if xmin == None: xmin = numpy.nanmin(x)
573 if xmax == None: xmax = numpy.nanmax(x)
573 if xmax == None: xmax = numpy.nanmax(x)
574 if ymin == None: ymin = numpy.nanmin(y)
574 if ymin == None: ymin = numpy.nanmin(y)
575 if ymax == None: ymax = numpy.nanmax(y)
575 if ymax == None: ymax = numpy.nanmax(y)
576
576
577 self.__isConfig = True
577 self.__isConfig = True
578
578
579 self.setWinTitle(title)
579 self.setWinTitle(title)
580
580
581 for i in range(len(self.axesList)):
581 for i in range(len(self.axesList)):
582 title = "Channel %d" %(i)
582 title = "Channel %d" %(i)
583 axes = self.axesList[i]
583 axes = self.axesList[i]
584 ychannel = y[i,:]
584 ychannel = y[i,:]
585 axes.pline(x, ychannel,
585 axes.pline(x, ychannel,
586 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax,
586 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax,
587 xlabel=xlabel, ylabel=ylabel, title=title)
587 xlabel=xlabel, ylabel=ylabel, title=title)
588
588
589 self.draw()
589 self.draw()
590
590
591 if save:
591 if save:
592 date = thisDatetime.strftime("%Y%m%d_%H%M%S")
592 date = thisDatetime.strftime("%Y%m%d_%H%M%S")
593 if figfile == None:
593 if figfile == None:
594 figfile = self.getFilename(name = date)
594 figfile = self.getFilename(name = date)
595
595
596 self.saveFigure(figpath, figfile)
596 self.saveFigure(figpath, figfile)
597
597
598 class ProfilePlot(Figure):
598 class ProfilePlot(Figure):
599 __isConfig = None
599 __isConfig = None
600 __nsubplots = None
600 __nsubplots = None
601
601
602 WIDTHPROF = None
602 WIDTHPROF = None
603 HEIGHTPROF = None
603 HEIGHTPROF = None
604 PREFIX = 'spcprofile'
604 PREFIX = 'spcprofile'
605
605
606 def __init__(self):
606 def __init__(self):
607 self.__isConfig = False
607 self.__isConfig = False
608 self.__nsubplots = 1
608 self.__nsubplots = 1
609
609
610 self.WIDTH = 300
610 self.WIDTH = 300
611 self.HEIGHT = 500
611 self.HEIGHT = 500
612
612
613 def getSubplots(self):
613 def getSubplots(self):
614 ncol = 1
614 ncol = 1
615 nrow = 1
615 nrow = 1
616
616
617 return nrow, ncol
617 return nrow, ncol
618
618
619 def setup(self, idfigure, nplots, wintitle):
619 def setup(self, idfigure, nplots, wintitle):
620
620
621 self.nplots = nplots
621 self.nplots = nplots
622
622
623 ncolspan = 1
623 ncolspan = 1
624 colspan = 1
624 colspan = 1
625
625
626 self.createFigure(idfigure = idfigure,
626 self.createFigure(idfigure = idfigure,
627 wintitle = wintitle,
627 wintitle = wintitle,
628 widthplot = self.WIDTH,
628 widthplot = self.WIDTH,
629 heightplot = self.HEIGHT)
629 heightplot = self.HEIGHT)
630
630
631 nrow, ncol = self.getSubplots()
631 nrow, ncol = self.getSubplots()
632
632
633 counter = 0
633 counter = 0
634 for y in range(nrow):
634 for y in range(nrow):
635 for x in range(ncol):
635 for x in range(ncol):
636 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan, colspan, 1)
636 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan, colspan, 1)
637
637
638 def run(self, dataOut, idfigure, wintitle="", channelList=None,
638 def run(self, dataOut, idfigure, wintitle="", channelList=None,
639 xmin=None, xmax=None, ymin=None, ymax=None,
639 xmin=None, xmax=None, ymin=None, ymax=None,
640 save=False, figpath='./', figfile=None):
640 save=False, figpath='./', figfile=None):
641
641
642 if channelList == None:
642 if channelList == None:
643 channelIndexList = dataOut.channelIndexList
643 channelIndexList = dataOut.channelIndexList
644 channelList = dataOut.channelList
644 channelList = dataOut.channelList
645 else:
645 else:
646 channelIndexList = []
646 channelIndexList = []
647 for channel in channelList:
647 for channel in channelList:
648 if channel not in dataOut.channelList:
648 if channel not in dataOut.channelList:
649 raise ValueError, "Channel %d is not in dataOut.channelList"
649 raise ValueError, "Channel %d is not in dataOut.channelList"
650 channelIndexList.append(dataOut.channelList.index(channel))
650 channelIndexList.append(dataOut.channelList.index(channel))
651
651
652 factor = dataOut.normFactor
652 factor = dataOut.normFactor
653 y = dataOut.getHeiRange()
653 y = dataOut.getHeiRange()
654 x = dataOut.data_spc[channelIndexList,:,:]/factor
654 x = dataOut.data_spc[channelIndexList,:,:]/factor
655 x = numpy.where(numpy.isfinite(x), x, numpy.NAN)
655 x = numpy.where(numpy.isfinite(x), x, numpy.NAN)
656 avg = numpy.average(x, axis=1)
656 avg = numpy.average(x, axis=1)
657
657
658 avgdB = 10*numpy.log10(avg)
658 avgdB = 10*numpy.log10(avg)
659
659
660 thisDatetime = dataOut.datatime
660 thisDatetime = dataOut.datatime
661 title = "Power Profile"
661 title = "Power Profile"
662 xlabel = "dB"
662 xlabel = "dB"
663 ylabel = "Range (Km)"
663 ylabel = "Range (Km)"
664
664
665 if not self.__isConfig:
665 if not self.__isConfig:
666
666
667 nplots = 1
667 nplots = 1
668
668
669 self.setup(idfigure=idfigure,
669 self.setup(idfigure=idfigure,
670 nplots=nplots,
670 nplots=nplots,
671 wintitle=wintitle)
671 wintitle=wintitle)
672
672
673 if ymin == None: ymin = numpy.nanmin(y)
673 if ymin == None: ymin = numpy.nanmin(y)
674 if ymax == None: ymax = numpy.nanmax(y)
674 if ymax == None: ymax = numpy.nanmax(y)
675 if xmin == None: xmin = numpy.nanmin(avgdB)*0.9
675 if xmin == None: xmin = numpy.nanmin(avgdB)*0.9
676 if xmax == None: xmax = numpy.nanmax(avgdB)*0.9
676 if xmax == None: xmax = numpy.nanmax(avgdB)*0.9
677
677
678 self.__isConfig = True
678 self.__isConfig = True
679
679
680 self.setWinTitle(title)
680 self.setWinTitle(title)
681
681
682
682
683 title = "Power Profile: %s" %(thisDatetime.strftime("%d-%b-%Y %H:%M:%S"))
683 title = "Power Profile: %s" %(thisDatetime.strftime("%d-%b-%Y %H:%M:%S"))
684 axes = self.axesList[0]
684 axes = self.axesList[0]
685
685
686 legendlabels = ["channel %d"%x for x in channelList]
686 legendlabels = ["channel %d"%x for x in channelList]
687 axes.pmultiline(avgdB, y,
687 axes.pmultiline(avgdB, y,
688 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax,
688 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax,
689 xlabel=xlabel, ylabel=ylabel, title=title, legendlabels=legendlabels,
689 xlabel=xlabel, ylabel=ylabel, title=title, legendlabels=legendlabels,
690 ytick_visible=True, nxticks=5,
690 ytick_visible=True, nxticks=5,
691 grid='x')
691 grid='x')
692
692
693 self.draw()
693 self.draw()
694
694
695 if save:
695 if save:
696 date = thisDatetime.strftime("%Y%m%d")
696 date = thisDatetime.strftime("%Y%m%d")
697 if figfile == None:
697 if figfile == None:
698 figfile = self.getFilename(name = date)
698 figfile = self.getFilename(name = date)
699
699
700 self.saveFigure(figpath, figfile)
700 self.saveFigure(figpath, figfile)
701
701
702 class CoherenceMap(Figure):
702 class CoherenceMap(Figure):
703 __isConfig = None
703 __isConfig = None
704 __nsubplots = None
704 __nsubplots = None
705
705
706 WIDTHPROF = None
706 WIDTHPROF = None
707 HEIGHTPROF = None
707 HEIGHTPROF = None
708 PREFIX = 'cmap'
708 PREFIX = 'cmap'
709
709
710 def __init__(self):
710 def __init__(self):
711 self.timerange = 2*60*60
711 self.timerange = 2*60*60
712 self.__isConfig = False
712 self.__isConfig = False
713 self.__nsubplots = 1
713 self.__nsubplots = 1
714
714
715 self.WIDTH = 800
715 self.WIDTH = 800
716 self.HEIGHT = 150
716 self.HEIGHT = 150
717 self.WIDTHPROF = 120
717 self.WIDTHPROF = 120
718 self.HEIGHTPROF = 0
718 self.HEIGHTPROF = 0
719 self.counterftp = 0
719 self.counterftp = 0
720
720
721 def getSubplots(self):
721 def getSubplots(self):
722 ncol = 1
722 ncol = 1
723 nrow = self.nplots*2
723 nrow = self.nplots*2
724
724
725 return nrow, ncol
725 return nrow, ncol
726
726
727 def setup(self, idfigure, nplots, wintitle, showprofile=True):
727 def setup(self, idfigure, nplots, wintitle, showprofile=True):
728 self.__showprofile = showprofile
728 self.__showprofile = showprofile
729 self.nplots = nplots
729 self.nplots = nplots
730
730
731 ncolspan = 1
731 ncolspan = 1
732 colspan = 1
732 colspan = 1
733 if showprofile:
733 if showprofile:
734 ncolspan = 7
734 ncolspan = 7
735 colspan = 6
735 colspan = 6
736 self.__nsubplots = 2
736 self.__nsubplots = 2
737
737
738 self.createFigure(idfigure = idfigure,
738 self.createFigure(idfigure = idfigure,
739 wintitle = wintitle,
739 wintitle = wintitle,
740 widthplot = self.WIDTH + self.WIDTHPROF,
740 widthplot = self.WIDTH + self.WIDTHPROF,
741 heightplot = self.HEIGHT + self.HEIGHTPROF)
741 heightplot = self.HEIGHT + self.HEIGHTPROF)
742
742
743 nrow, ncol = self.getSubplots()
743 nrow, ncol = self.getSubplots()
744
744
745 for y in range(nrow):
745 for y in range(nrow):
746 for x in range(ncol):
746 for x in range(ncol):
747
747
748 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan, colspan, 1)
748 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan, colspan, 1)
749
749
750 if showprofile:
750 if showprofile:
751 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan+colspan, 1, 1)
751 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan+colspan, 1, 1)
752
752
753 def run(self, dataOut, idfigure, wintitle="", pairsList=None, showprofile='True',
753 def run(self, dataOut, idfigure, wintitle="", pairsList=None, showprofile='True',
754 xmin=None, xmax=None, ymin=None, ymax=None, zmin=None, zmax=None,
754 xmin=None, xmax=None, ymin=None, ymax=None, zmin=None, zmax=None,
755 timerange=None,
755 timerange=None,
756 save=False, figpath='./', figfile=None, ftp=False, ftpratio=1,
756 save=False, figpath='./', figfile=None, ftp=False, ftpratio=1,
757 coherence_cmap='jet', phase_cmap='RdBu_r'):
757 coherence_cmap='jet', phase_cmap='RdBu_r'):
758
758
759 if pairsList == None:
759 if pairsList == None:
760 pairsIndexList = dataOut.pairsIndexList
760 pairsIndexList = dataOut.pairsIndexList
761 else:
761 else:
762 pairsIndexList = []
762 pairsIndexList = []
763 for pair in pairsList:
763 for pair in pairsList:
764 if pair not in dataOut.pairsList:
764 if pair not in dataOut.pairsList:
765 raise ValueError, "Pair %s is not in dataOut.pairsList" %(pair)
765 raise ValueError, "Pair %s is not in dataOut.pairsList" %(pair)
766 pairsIndexList.append(dataOut.pairsList.index(pair))
766 pairsIndexList.append(dataOut.pairsList.index(pair))
767
767
768 if timerange != None:
768 if timerange != None:
769 self.timerange = timerange
769 self.timerange = timerange
770
770
771 if pairsIndexList == []:
771 if pairsIndexList == []:
772 return
772 return
773
773
774 if len(pairsIndexList) > 4:
774 if len(pairsIndexList) > 4:
775 pairsIndexList = pairsIndexList[0:4]
775 pairsIndexList = pairsIndexList[0:4]
776
776
777 tmin = None
777 tmin = None
778 tmax = None
778 tmax = None
779 x = dataOut.getTimeRange()
779 x = dataOut.getTimeRange()
780 y = dataOut.getHeiRange()
780 y = dataOut.getHeiRange()
781
781
782 thisDatetime = dataOut.datatime
782 thisDatetime = dataOut.datatime
783 title = "CoherenceMap: %s" %(thisDatetime.strftime("%d-%b-%Y"))
783 title = "CoherenceMap: %s" %(thisDatetime.strftime("%d-%b-%Y"))
784 xlabel = ""
784 xlabel = ""
785 ylabel = "Range (Km)"
785 ylabel = "Range (Km)"
786
786
787 if not self.__isConfig:
787 if not self.__isConfig:
788 nplots = len(pairsIndexList)
788 nplots = len(pairsIndexList)
789 self.setup(idfigure=idfigure,
789 self.setup(idfigure=idfigure,
790 nplots=nplots,
790 nplots=nplots,
791 wintitle=wintitle,
791 wintitle=wintitle,
792 showprofile=showprofile)
792 showprofile=showprofile)
793
793
794 tmin, tmax = self.getTimeLim(x, xmin, xmax)
794 tmin, tmax = self.getTimeLim(x, xmin, xmax)
795 if ymin == None: ymin = numpy.nanmin(y)
795 if ymin == None: ymin = numpy.nanmin(y)
796 if ymax == None: ymax = numpy.nanmax(y)
796 if ymax == None: ymax = numpy.nanmax(y)
797
797
798 self.name = thisDatetime.strftime("%Y%m%d_%H%M%S")
798 self.name = thisDatetime.strftime("%Y%m%d_%H%M%S")
799
799
800 self.__isConfig = True
800 self.__isConfig = True
801
801
802 self.setWinTitle(title)
802 self.setWinTitle(title)
803
803
804 for i in range(self.nplots):
804 for i in range(self.nplots):
805
805
806 pair = dataOut.pairsList[pairsIndexList[i]]
806 pair = dataOut.pairsList[pairsIndexList[i]]
807 coherenceComplex = dataOut.data_cspc[pairsIndexList[i],:,:]/numpy.sqrt(dataOut.data_spc[pair[0],:,:]*dataOut.data_spc[pair[1],:,:])
807 coherenceComplex = dataOut.data_cspc[pairsIndexList[i],:,:]/numpy.sqrt(dataOut.data_spc[pair[0],:,:]*dataOut.data_spc[pair[1],:,:])
808 avgcoherenceComplex = numpy.average(coherenceComplex, axis=0)
808 avgcoherenceComplex = numpy.average(coherenceComplex, axis=0)
809 coherence = numpy.abs(avgcoherenceComplex)
809 coherence = numpy.abs(avgcoherenceComplex)
810 # coherence = numpy.abs(coherenceComplex)
810 # coherence = numpy.abs(coherenceComplex)
811 # avg = numpy.average(coherence, axis=0)
811 # avg = numpy.average(coherence, axis=0)
812
812
813 z = coherence.reshape((1,-1))
813 z = coherence.reshape((1,-1))
814
814
815 counter = 0
815 counter = 0
816
816
817 title = "Coherence %d%d: %s" %(pair[0], pair[1], thisDatetime.strftime("%d-%b-%Y %H:%M:%S"))
817 title = "Coherence %d%d: %s" %(pair[0], pair[1], thisDatetime.strftime("%d-%b-%Y %H:%M:%S"))
818 axes = self.axesList[i*self.__nsubplots*2]
818 axes = self.axesList[i*self.__nsubplots*2]
819 axes.pcolorbuffer(x, y, z,
819 axes.pcolorbuffer(x, y, z,
820 xmin=tmin, xmax=tmax, ymin=ymin, ymax=ymax, zmin=0, zmax=1,
820 xmin=tmin, xmax=tmax, ymin=ymin, ymax=ymax, zmin=0, zmax=1,
821 xlabel=xlabel, ylabel=ylabel, title=title, rti=True, XAxisAsTime=True,
821 xlabel=xlabel, ylabel=ylabel, title=title, rti=True, XAxisAsTime=True,
822 ticksize=9, cblabel='', colormap=coherence_cmap, cbsize="1%")
822 ticksize=9, cblabel='', colormap=coherence_cmap, cbsize="1%")
823
823
824 if self.__showprofile:
824 if self.__showprofile:
825 counter += 1
825 counter += 1
826 axes = self.axesList[i*self.__nsubplots*2 + counter]
826 axes = self.axesList[i*self.__nsubplots*2 + counter]
827 axes.pline(coherence, y,
827 axes.pline(coherence, y,
828 xmin=0, xmax=1, ymin=ymin, ymax=ymax,
828 xmin=0, xmax=1, ymin=ymin, ymax=ymax,
829 xlabel='', ylabel='', title='', ticksize=7,
829 xlabel='', ylabel='', title='', ticksize=7,
830 ytick_visible=False, nxticks=5,
830 ytick_visible=False, nxticks=5,
831 grid='x')
831 grid='x')
832
832
833 counter += 1
833 counter += 1
834 # phase = numpy.arctan(-1*coherenceComplex.imag/coherenceComplex.real)*180/numpy.pi
834 # phase = numpy.arctan(-1*coherenceComplex.imag/coherenceComplex.real)*180/numpy.pi
835 phase = numpy.arctan2(avgcoherenceComplex.imag, avgcoherenceComplex.real)*180/numpy.pi
835 phase = numpy.arctan2(avgcoherenceComplex.imag, avgcoherenceComplex.real)*180/numpy.pi
836 # avg = numpy.average(phase, axis=0)
836 # avg = numpy.average(phase, axis=0)
837 z = phase.reshape((1,-1))
837 z = phase.reshape((1,-1))
838
838
839 title = "Phase %d%d: %s" %(pair[0], pair[1], thisDatetime.strftime("%d-%b-%Y %H:%M:%S"))
839 title = "Phase %d%d: %s" %(pair[0], pair[1], thisDatetime.strftime("%d-%b-%Y %H:%M:%S"))
840 axes = self.axesList[i*self.__nsubplots*2 + counter]
840 axes = self.axesList[i*self.__nsubplots*2 + counter]
841 axes.pcolorbuffer(x, y, z,
841 axes.pcolorbuffer(x, y, z,
842 xmin=tmin, xmax=tmax, ymin=ymin, ymax=ymax, zmin=-180, zmax=180,
842 xmin=tmin, xmax=tmax, ymin=ymin, ymax=ymax, zmin=-180, zmax=180,
843 xlabel=xlabel, ylabel=ylabel, title=title, rti=True, XAxisAsTime=True,
843 xlabel=xlabel, ylabel=ylabel, title=title, rti=True, XAxisAsTime=True,
844 ticksize=9, cblabel='', colormap=phase_cmap, cbsize="1%")
844 ticksize=9, cblabel='', colormap=phase_cmap, cbsize="1%")
845
845
846 if self.__showprofile:
846 if self.__showprofile:
847 counter += 1
847 counter += 1
848 axes = self.axesList[i*self.__nsubplots*2 + counter]
848 axes = self.axesList[i*self.__nsubplots*2 + counter]
849 axes.pline(phase, y,
849 axes.pline(phase, y,
850 xmin=-180, xmax=180, ymin=ymin, ymax=ymax,
850 xmin=-180, xmax=180, ymin=ymin, ymax=ymax,
851 xlabel='', ylabel='', title='', ticksize=7,
851 xlabel='', ylabel='', title='', ticksize=7,
852 ytick_visible=False, nxticks=4,
852 ytick_visible=False, nxticks=4,
853 grid='x')
853 grid='x')
854
854
855 self.draw()
855 self.draw()
856
856
857 if save:
857 if save:
858
858
859 if figfile == None:
859 if figfile == None:
860 figfile = self.getFilename(name = self.name)
860 figfile = self.getFilename(name = self.name)
861
861
862 self.saveFigure(figpath, figfile)
862 self.saveFigure(figpath, figfile)
863
863
864 self.counterftp += 1
864 self.counterftp += 1
865 if (ftp and (self.counterftp==ftpratio)):
865 if (ftp and (self.counterftp==ftpratio)):
866 figfilename = os.path.join(figpath,figfile)
866 figfilename = os.path.join(figpath,figfile)
867 self.sendByFTP(figfilename)
867 self.sendByFTP(figfilename)
868 self.counterftp = 0
868 self.counterftp = 0
869
869
870 if x[1] + (x[1]-x[0]) >= self.axesList[0].xmax:
870 if x[1] + (x[1]-x[0]) >= self.axesList[0].xmax:
871 self.__isConfig = False
871 self.__isConfig = False
872
872
873 class RTIfromNoise(Figure):
873 class RTIfromNoise(Figure):
874
874
875 __isConfig = None
875 __isConfig = None
876 __nsubplots = None
876 __nsubplots = None
877
877
878 PREFIX = 'rtinoise'
878 PREFIX = 'rtinoise'
879
879
880 def __init__(self):
880 def __init__(self):
881
881
882 self.timerange = 24*60*60
882 self.timerange = 24*60*60
883 self.__isConfig = False
883 self.__isConfig = False
884 self.__nsubplots = 1
884 self.__nsubplots = 1
885
885
886 self.WIDTH = 820
886 self.WIDTH = 820
887 self.HEIGHT = 200
887 self.HEIGHT = 200
888 self.WIDTHPROF = 120
888 self.WIDTHPROF = 120
889 self.HEIGHTPROF = 0
889 self.HEIGHTPROF = 0
890 self.xdata = None
890 self.xdata = None
891 self.ydata = None
891 self.ydata = None
892
892
893 def getSubplots(self):
893 def getSubplots(self):
894
894
895 ncol = 1
895 ncol = 1
896 nrow = 1
896 nrow = 1
897
897
898 return nrow, ncol
898 return nrow, ncol
899
899
900 def setup(self, idfigure, nplots, wintitle, showprofile=True):
900 def setup(self, idfigure, nplots, wintitle, showprofile=True):
901
901
902 self.__showprofile = showprofile
902 self.__showprofile = showprofile
903 self.nplots = nplots
903 self.nplots = nplots
904
904
905 ncolspan = 7
905 ncolspan = 7
906 colspan = 6
906 colspan = 6
907 self.__nsubplots = 2
907 self.__nsubplots = 2
908
908
909 self.createFigure(idfigure = idfigure,
909 self.createFigure(idfigure = idfigure,
910 wintitle = wintitle,
910 wintitle = wintitle,
911 widthplot = self.WIDTH+self.WIDTHPROF,
911 widthplot = self.WIDTH+self.WIDTHPROF,
912 heightplot = self.HEIGHT+self.HEIGHTPROF)
912 heightplot = self.HEIGHT+self.HEIGHTPROF)
913
913
914 nrow, ncol = self.getSubplots()
914 nrow, ncol = self.getSubplots()
915
915
916 self.addAxes(nrow, ncol*ncolspan, 0, 0, colspan, 1)
916 self.addAxes(nrow, ncol*ncolspan, 0, 0, colspan, 1)
917
917
918
918
919 def run(self, dataOut, idfigure, wintitle="", channelList=None, showprofile='True',
919 def run(self, dataOut, idfigure, wintitle="", channelList=None, showprofile='True',
920 xmin=None, xmax=None, ymin=None, ymax=None,
920 xmin=None, xmax=None, ymin=None, ymax=None,
921 timerange=None,
921 timerange=None,
922 save=False, figpath='./', figfile=None):
922 save=False, figpath='./', figfile=None):
923
923
924 if channelList == None:
924 if channelList == None:
925 channelIndexList = dataOut.channelIndexList
925 channelIndexList = dataOut.channelIndexList
926 channelList = dataOut.channelList
926 channelList = dataOut.channelList
927 else:
927 else:
928 channelIndexList = []
928 channelIndexList = []
929 for channel in channelList:
929 for channel in channelList:
930 if channel not in dataOut.channelList:
930 if channel not in dataOut.channelList:
931 raise ValueError, "Channel %d is not in dataOut.channelList"
931 raise ValueError, "Channel %d is not in dataOut.channelList"
932 channelIndexList.append(dataOut.channelList.index(channel))
932 channelIndexList.append(dataOut.channelList.index(channel))
933
933
934 if timerange != None:
934 if timerange != None:
935 self.timerange = timerange
935 self.timerange = timerange
936
936
937 tmin = None
937 tmin = None
938 tmax = None
938 tmax = None
939 x = dataOut.getTimeRange()
939 x = dataOut.getTimeRange()
940 y = dataOut.getHeiRange()
940 y = dataOut.getHeiRange()
941 factor = dataOut.normFactor
941 factor = dataOut.normFactor
942 noise = dataOut.getNoise()/factor
942 noise = dataOut.getNoise()/factor
943 noisedB = 10*numpy.log10(noise)
943 noisedB = 10*numpy.log10(noise)
944
944
945 thisDatetime = dataOut.datatime
945 thisDatetime = dataOut.datatime
946 title = "RTI Noise: %s" %(thisDatetime.strftime("%d-%b-%Y"))
946 title = "RTI Noise: %s" %(thisDatetime.strftime("%d-%b-%Y"))
947 xlabel = ""
947 xlabel = ""
948 ylabel = "Range (Km)"
948 ylabel = "Range (Km)"
949
949
950 if not self.__isConfig:
950 if not self.__isConfig:
951
951
952 nplots = 1
952 nplots = 1
953
953
954 self.setup(idfigure=idfigure,
954 self.setup(idfigure=idfigure,
955 nplots=nplots,
955 nplots=nplots,
956 wintitle=wintitle,
956 wintitle=wintitle,
957 showprofile=showprofile)
957 showprofile=showprofile)
958
958
959 tmin, tmax = self.getTimeLim(x, xmin, xmax)
959 tmin, tmax = self.getTimeLim(x, xmin, xmax)
960 if ymin == None: ymin = numpy.nanmin(noisedB)
960 if ymin == None: ymin = numpy.nanmin(noisedB)
961 if ymax == None: ymax = numpy.nanmax(noisedB)
961 if ymax == None: ymax = numpy.nanmax(noisedB)
962
962
963 self.name = thisDatetime.strftime("%Y%m%d_%H%M%S")
963 self.name = thisDatetime.strftime("%Y%m%d_%H%M%S")
964 self.__isConfig = True
964 self.__isConfig = True
965
965
966 self.xdata = numpy.array([])
966 self.xdata = numpy.array([])
967 self.ydata = numpy.array([])
967 self.ydata = numpy.array([])
968
968
969 self.setWinTitle(title)
969 self.setWinTitle(title)
970
970
971
971
972 title = "RTI Noise %s" %(thisDatetime.strftime("%d-%b-%Y"))
972 title = "RTI Noise %s" %(thisDatetime.strftime("%d-%b-%Y"))
973
973
974 legendlabels = ["channel %d"%idchannel for idchannel in channelList]
974 legendlabels = ["channel %d"%idchannel for idchannel in channelList]
975 axes = self.axesList[0]
975 axes = self.axesList[0]
976
976
977 self.xdata = numpy.hstack((self.xdata, x[0:1]))
977 self.xdata = numpy.hstack((self.xdata, x[0:1]))
978
978
979 if len(self.ydata)==0:
979 if len(self.ydata)==0:
980 self.ydata = noisedB[channelIndexList].reshape(-1,1)
980 self.ydata = noisedB[channelIndexList].reshape(-1,1)
981 else:
981 else:
982 self.ydata = numpy.hstack((self.ydata, noisedB[channelIndexList].reshape(-1,1)))
982 self.ydata = numpy.hstack((self.ydata, noisedB[channelIndexList].reshape(-1,1)))
983
983
984
984
985 axes.pmultilineyaxis(x=self.xdata, y=self.ydata,
985 axes.pmultilineyaxis(x=self.xdata, y=self.ydata,
986 xmin=tmin, xmax=tmax, ymin=ymin, ymax=ymax,
986 xmin=tmin, xmax=tmax, ymin=ymin, ymax=ymax,
987 xlabel=xlabel, ylabel=ylabel, title=title, legendlabels=legendlabels, marker='x', markersize=8, linestyle="solid",
987 xlabel=xlabel, ylabel=ylabel, title=title, legendlabels=legendlabels, marker='x', markersize=8, linestyle="solid",
988 XAxisAsTime=True
988 XAxisAsTime=True
989 )
989 )
990
990
991 self.draw()
991 self.draw()
992
992
993 if save:
993 if save:
994
994
995 if figfile == None:
995 if figfile == None:
996 figfile = self.getFilename(name = self.name)
996 figfile = self.getFilename(name = self.name)
997
997
998 self.saveFigure(figpath, figfile)
998 self.saveFigure(figpath, figfile)
999
999
1000 if x[1] + (x[1]-x[0]) >= self.axesList[0].xmax:
1000 if x[1] + (x[1]-x[0]) >= self.axesList[0].xmax:
1001 self.__isConfig = False
1001 self.__isConfig = False
1002 del self.xdata
1002 del self.xdata
1003 del self.ydata
1003 del self.ydata
1004
1004
1005
1005
1006 class SpectraHeisScope(Figure):
1006 class SpectraHeisScope(Figure):
1007
1007
1008
1008
1009 __isConfig = None
1009 __isConfig = None
1010 __nsubplots = None
1010 __nsubplots = None
1011
1011
1012 WIDTHPROF = None
1012 WIDTHPROF = None
1013 HEIGHTPROF = None
1013 HEIGHTPROF = None
1014 PREFIX = 'spc'
1014 PREFIX = 'spc'
1015
1015
1016 def __init__(self):
1016 def __init__(self):
1017
1017
1018 self.__isConfig = False
1018 self.__isConfig = False
1019 self.__nsubplots = 1
1019 self.__nsubplots = 1
1020
1020
1021 self.WIDTH = 230
1021 self.WIDTH = 230
1022 self.HEIGHT = 250
1022 self.HEIGHT = 250
1023 self.WIDTHPROF = 120
1023 self.WIDTHPROF = 120
1024 self.HEIGHTPROF = 0
1024 self.HEIGHTPROF = 0
1025 self.counterftp = 0
1025 self.counterftp = 0
1026
1026
1027 def getSubplots(self):
1027 def getSubplots(self):
1028
1028
1029 ncol = int(numpy.sqrt(self.nplots)+0.9)
1029 ncol = int(numpy.sqrt(self.nplots)+0.9)
1030 nrow = int(self.nplots*1./ncol + 0.9)
1030 nrow = int(self.nplots*1./ncol + 0.9)
1031
1031
1032 return nrow, ncol
1032 return nrow, ncol
1033
1033
1034 def setup(self, idfigure, nplots, wintitle):
1034 def setup(self, idfigure, nplots, wintitle):
1035
1035
1036 showprofile = False
1036 showprofile = False
1037 self.__showprofile = showprofile
1037 self.__showprofile = showprofile
1038 self.nplots = nplots
1038 self.nplots = nplots
1039
1039
1040 ncolspan = 1
1040 ncolspan = 1
1041 colspan = 1
1041 colspan = 1
1042 if showprofile:
1042 if showprofile:
1043 ncolspan = 3
1043 ncolspan = 3
1044 colspan = 2
1044 colspan = 2
1045 self.__nsubplots = 2
1045 self.__nsubplots = 2
1046
1046
1047 self.createFigure(idfigure = idfigure,
1047 self.createFigure(idfigure = idfigure,
1048 wintitle = wintitle,
1048 wintitle = wintitle,
1049 widthplot = self.WIDTH + self.WIDTHPROF,
1049 widthplot = self.WIDTH + self.WIDTHPROF,
1050 heightplot = self.HEIGHT + self.HEIGHTPROF)
1050 heightplot = self.HEIGHT + self.HEIGHTPROF)
1051
1051
1052 nrow, ncol = self.getSubplots()
1052 nrow, ncol = self.getSubplots()
1053
1053
1054 counter = 0
1054 counter = 0
1055 for y in range(nrow):
1055 for y in range(nrow):
1056 for x in range(ncol):
1056 for x in range(ncol):
1057
1057
1058 if counter >= self.nplots:
1058 if counter >= self.nplots:
1059 break
1059 break
1060
1060
1061 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan, colspan, 1)
1061 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan, colspan, 1)
1062
1062
1063 if showprofile:
1063 if showprofile:
1064 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan+colspan, 1, 1)
1064 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan+colspan, 1, 1)
1065
1065
1066 counter += 1
1066 counter += 1
1067
1067
1068 # __isConfig = None
1068 # __isConfig = None
1069 # def __init__(self):
1069 # def __init__(self):
1070 #
1070 #
1071 # self.__isConfig = False
1071 # self.__isConfig = False
1072 # self.WIDTH = 600
1072 # self.WIDTH = 600
1073 # self.HEIGHT = 200
1073 # self.HEIGHT = 200
1074 #
1074 #
1075 # def getSubplots(self):
1075 # def getSubplots(self):
1076 #
1076 #
1077 # nrow = self.nplots
1077 # nrow = self.nplots
1078 # ncol = 3
1078 # ncol = 3
1079 # return nrow, ncol
1079 # return nrow, ncol
1080 #
1080 #
1081 # def setup(self, idfigure, nplots, wintitle):
1081 # def setup(self, idfigure, nplots, wintitle):
1082 #
1082 #
1083 # self.nplots = nplots
1083 # self.nplots = nplots
1084 #
1084 #
1085 # self.createFigure(idfigure, wintitle)
1085 # self.createFigure(idfigure, wintitle)
1086 #
1086 #
1087 # nrow,ncol = self.getSubplots()
1087 # nrow,ncol = self.getSubplots()
1088 # colspan = 3
1088 # colspan = 3
1089 # rowspan = 1
1089 # rowspan = 1
1090 #
1090 #
1091 # for i in range(nplots):
1091 # for i in range(nplots):
1092 # self.addAxes(nrow, ncol, i, 0, colspan, rowspan)
1092 # self.addAxes(nrow, ncol, i, 0, colspan, rowspan)
1093
1093
1094 def run(self, dataOut, idfigure, wintitle="", channelList=None,
1094 def run(self, dataOut, idfigure, wintitle="", channelList=None,
1095 xmin=None, xmax=None, ymin=None, ymax=None, save=False,
1095 xmin=None, xmax=None, ymin=None, ymax=None, save=False,
1096 figpath='./', figfile=None, ftp=False, ftpratio=1):
1096 figpath='./', figfile=None, ftp=False, ftpratio=1):
1097
1097
1098 """
1098 """
1099
1099
1100 Input:
1100 Input:
1101 dataOut :
1101 dataOut :
1102 idfigure :
1102 idfigure :
1103 wintitle :
1103 wintitle :
1104 channelList :
1104 channelList :
1105 xmin : None,
1105 xmin : None,
1106 xmax : None,
1106 xmax : None,
1107 ymin : None,
1107 ymin : None,
1108 ymax : None,
1108 ymax : None,
1109 """
1109 """
1110
1110
1111 if channelList == None:
1111 if channelList == None:
1112 channelIndexList = dataOut.channelIndexList
1112 channelIndexList = dataOut.channelIndexList
1113 else:
1113 else:
1114 channelIndexList = []
1114 channelIndexList = []
1115 for channel in channelList:
1115 for channel in channelList:
1116 if channel not in dataOut.channelList:
1116 if channel not in dataOut.channelList:
1117 raise ValueError, "Channel %d is not in dataOut.channelList"
1117 raise ValueError, "Channel %d is not in dataOut.channelList"
1118 channelIndexList.append(dataOut.channelList.index(channel))
1118 channelIndexList.append(dataOut.channelList.index(channel))
1119
1119
1120 # x = dataOut.heightList
1120 # x = dataOut.heightList
1121 c = 3E8
1121 c = 3E8
1122 deltaHeight = dataOut.heightList[1] - dataOut.heightList[0]
1122 deltaHeight = dataOut.heightList[1] - dataOut.heightList[0]
1123 #deberia cambiar para el caso de 1Mhz y 100KHz
1123 #deberia cambiar para el caso de 1Mhz y 100KHz
1124 x = numpy.arange(-1*dataOut.nHeights/2.,dataOut.nHeights/2.)*(c/(2*deltaHeight*dataOut.nHeights*1000))
1124 x = numpy.arange(-1*dataOut.nHeights/2.,dataOut.nHeights/2.)*(c/(2*deltaHeight*dataOut.nHeights*1000))
1125 x= x/(10000.0)
1125 x= x/(10000.0)
1126 # y = dataOut.data[channelIndexList,:] * numpy.conjugate(dataOut.data[channelIndexList,:])
1126 # y = dataOut.data[channelIndexList,:] * numpy.conjugate(dataOut.data[channelIndexList,:])
1127 # y = y.real
1127 # y = y.real
1128 datadB = 10.*numpy.log10(dataOut.data_spc)
1128 datadB = 10.*numpy.log10(dataOut.data_spc)
1129 y = datadB
1129 y = datadB
1130
1130
1131 thisDatetime = dataOut.datatime
1131 thisDatetime = dataOut.datatime
1132 title = "Scope: %s" %(thisDatetime.strftime("%d-%b-%Y %H:%M:%S"))
1132 title = "Scope: %s" %(thisDatetime.strftime("%d-%b-%Y %H:%M:%S"))
1133 xlabel = "Frequency"
1133 xlabel = "Frequency x 10000"
1134 xlabel = ""
1134 ylabel = "Intensity (dB)"
1135 ylabel = "Intensity (dB)"
1135
1136
1136 if not self.__isConfig:
1137 if not self.__isConfig:
1137 nplots = len(channelIndexList)
1138 nplots = len(channelIndexList)
1138
1139
1139 self.setup(idfigure=idfigure,
1140 self.setup(idfigure=idfigure,
1140 nplots=nplots,
1141 nplots=nplots,
1141 wintitle=wintitle)
1142 wintitle=wintitle)
1142
1143
1143 if xmin == None: xmin = numpy.nanmin(x)
1144 if xmin == None: xmin = numpy.nanmin(x)
1144 if xmax == None: xmax = numpy.nanmax(x)
1145 if xmax == None: xmax = numpy.nanmax(x)
1145 if ymin == None: ymin = numpy.nanmin(y)
1146 if ymin == None: ymin = numpy.nanmin(y)
1146 if ymax == None: ymax = numpy.nanmax(y)
1147 if ymax == None: ymax = numpy.nanmax(y)
1147
1148
1148 self.__isConfig = True
1149 self.__isConfig = True
1149
1150
1150 self.setWinTitle(title)
1151 self.setWinTitle(title)
1151
1152
1152 for i in range(len(self.axesList)):
1153 for i in range(len(self.axesList)):
1153 ychannel = y[i,:]
1154 ychannel = y[i,:]
1154 title = "Channel %d - peak:%.2f" %(i,numpy.max(ychannel))
1155 title = "Channel %d - peak:%.2f" %(i,numpy.max(ychannel))
1155 axes = self.axesList[i]
1156 axes = self.axesList[i]
1156 axes.pline(x, ychannel,
1157 axes.pline(x, ychannel,
1157 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax,
1158 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax,
1158 xlabel=xlabel, ylabel=ylabel, title=title)
1159 xlabel=xlabel, ylabel=ylabel, title=title)
1159
1160
1160 self.draw()
1161 self.draw()
1161
1162
1162 if save:
1163 if save:
1163 date = thisDatetime.strftime("%Y%m%d_%H%M%S")
1164 date = thisDatetime.strftime("%Y%m%d_%H%M%S")
1164 if figfile == None:
1165 if figfile == None:
1165 figfile = self.getFilename(name = date)
1166 figfile = self.getFilename(name = date)
1166
1167
1167 self.saveFigure(figpath, figfile)
1168 self.saveFigure(figpath, figfile)
1168
1169
1169 self.counterftp += 1
1170 self.counterftp += 1
1170 if (ftp and (self.counterftp==ftpratio)):
1171 if (ftp and (self.counterftp==ftpratio)):
1171 figfilename = os.path.join(figpath,figfile)
1172 figfilename = os.path.join(figpath,figfile)
1172 self.sendByFTP(figfilename)
1173 self.sendByFTP(figfilename)
1173 self.counterftp = 0
1174 self.counterftp = 0
1174
1175
1175
1176
1176 class RTIfromSpectraHeis(Figure):
1177 class RTIfromSpectraHeis(Figure):
1177
1178
1178 __isConfig = None
1179 __isConfig = None
1179 __nsubplots = None
1180 __nsubplots = None
1180
1181
1181 PREFIX = 'rtinoise'
1182 PREFIX = 'rtinoise'
1182
1183
1183 def __init__(self):
1184 def __init__(self):
1184
1185
1185 self.timerange = 24*60*60
1186 self.timerange = 24*60*60
1186 self.__isConfig = False
1187 self.__isConfig = False
1187 self.__nsubplots = 1
1188 self.__nsubplots = 1
1188
1189
1189 self.WIDTH = 820
1190 self.WIDTH = 820
1190 self.HEIGHT = 200
1191 self.HEIGHT = 200
1191 self.WIDTHPROF = 120
1192 self.WIDTHPROF = 120
1192 self.HEIGHTPROF = 0
1193 self.HEIGHTPROF = 0
1193 self.counterftp = 0
1194 self.counterftp = 0
1194 self.xdata = None
1195 self.xdata = None
1195 self.ydata = None
1196 self.ydata = None
1196
1197
1197 def getSubplots(self):
1198 def getSubplots(self):
1198
1199
1199 ncol = 1
1200 ncol = 1
1200 nrow = 1
1201 nrow = 1
1201
1202
1202 return nrow, ncol
1203 return nrow, ncol
1203
1204
1204 def setup(self, idfigure, nplots, wintitle, showprofile=True):
1205 def setup(self, idfigure, nplots, wintitle, showprofile=True):
1205
1206
1206 self.__showprofile = showprofile
1207 self.__showprofile = showprofile
1207 self.nplots = nplots
1208 self.nplots = nplots
1208
1209
1209 ncolspan = 7
1210 ncolspan = 7
1210 colspan = 6
1211 colspan = 6
1211 self.__nsubplots = 2
1212 self.__nsubplots = 2
1212
1213
1213 self.createFigure(idfigure = idfigure,
1214 self.createFigure(idfigure = idfigure,
1214 wintitle = wintitle,
1215 wintitle = wintitle,
1215 widthplot = self.WIDTH+self.WIDTHPROF,
1216 widthplot = self.WIDTH+self.WIDTHPROF,
1216 heightplot = self.HEIGHT+self.HEIGHTPROF)
1217 heightplot = self.HEIGHT+self.HEIGHTPROF)
1217
1218
1218 nrow, ncol = self.getSubplots()
1219 nrow, ncol = self.getSubplots()
1219
1220
1220 self.addAxes(nrow, ncol*ncolspan, 0, 0, colspan, 1)
1221 self.addAxes(nrow, ncol*ncolspan, 0, 0, colspan, 1)
1221
1222
1222
1223
1223 def run(self, dataOut, idfigure, wintitle="", channelList=None, showprofile='True',
1224 def run(self, dataOut, idfigure, wintitle="", channelList=None, showprofile='True',
1224 xmin=None, xmax=None, ymin=None, ymax=None,
1225 xmin=None, xmax=None, ymin=None, ymax=None,
1225 timerange=None,
1226 timerange=None,
1226 save=False, figpath='./', figfile=None, ftp=False, ftpratio=1):
1227 save=False, figpath='./', figfile=None, ftp=False, ftpratio=1):
1227
1228
1228 if channelList == None:
1229 if channelList == None:
1229 channelIndexList = dataOut.channelIndexList
1230 channelIndexList = dataOut.channelIndexList
1230 channelList = dataOut.channelList
1231 channelList = dataOut.channelList
1231 else:
1232 else:
1232 channelIndexList = []
1233 channelIndexList = []
1233 for channel in channelList:
1234 for channel in channelList:
1234 if channel not in dataOut.channelList:
1235 if channel not in dataOut.channelList:
1235 raise ValueError, "Channel %d is not in dataOut.channelList"
1236 raise ValueError, "Channel %d is not in dataOut.channelList"
1236 channelIndexList.append(dataOut.channelList.index(channel))
1237 channelIndexList.append(dataOut.channelList.index(channel))
1237
1238
1238 if timerange != None:
1239 if timerange != None:
1239 self.timerange = timerange
1240 self.timerange = timerange
1240
1241
1241 tmin = None
1242 tmin = None
1242 tmax = None
1243 tmax = None
1243 x = dataOut.getTimeRange()
1244 x = dataOut.getTimeRange()
1244 y = dataOut.getHeiRange()
1245 y = dataOut.getHeiRange()
1245
1246
1246 factor = 1
1247 factor = 1
1247 data = dataOut.data_spc/factor
1248 data = dataOut.data_spc/factor
1248 data = numpy.average(data,axis=1)
1249 data = numpy.average(data,axis=1)
1249 datadB = 10*numpy.log10(data)
1250 datadB = 10*numpy.log10(data)
1250
1251
1251 # factor = dataOut.normFactor
1252 # factor = dataOut.normFactor
1252 # noise = dataOut.getNoise()/factor
1253 # noise = dataOut.getNoise()/factor
1253 # noisedB = 10*numpy.log10(noise)
1254 # noisedB = 10*numpy.log10(noise)
1254
1255
1255 thisDatetime = dataOut.datatime
1256 thisDatetime = dataOut.datatime
1256 title = "RTI: %s" %(thisDatetime.strftime("%d-%b-%Y"))
1257 title = "RTI: %s" %(thisDatetime.strftime("%d-%b-%Y"))
1257 xlabel = "Local Time"
1258 xlabel = "Local Time"
1258 ylabel = "Intensity (dB)"
1259 ylabel = "Intensity (dB)"
1259
1260
1260 if not self.__isConfig:
1261 if not self.__isConfig:
1261
1262
1262 nplots = 1
1263 nplots = 1
1263
1264
1264 self.setup(idfigure=idfigure,
1265 self.setup(idfigure=idfigure,
1265 nplots=nplots,
1266 nplots=nplots,
1266 wintitle=wintitle,
1267 wintitle=wintitle,
1267 showprofile=showprofile)
1268 showprofile=showprofile)
1268
1269
1269 tmin, tmax = self.getTimeLim(x, xmin, xmax)
1270 tmin, tmax = self.getTimeLim(x, xmin, xmax)
1270 if ymin == None: ymin = numpy.nanmin(datadB)
1271 if ymin == None: ymin = numpy.nanmin(datadB)
1271 if ymax == None: ymax = numpy.nanmax(datadB)
1272 if ymax == None: ymax = numpy.nanmax(datadB)
1272
1273
1273 self.name = thisDatetime.strftime("%Y%m%d_%H%M%S")
1274 self.name = thisDatetime.strftime("%Y%m%d_%H%M%S")
1274 self.__isConfig = True
1275 self.__isConfig = True
1275
1276
1276 self.xdata = numpy.array([])
1277 self.xdata = numpy.array([])
1277 self.ydata = numpy.array([])
1278 self.ydata = numpy.array([])
1278
1279
1279 self.setWinTitle(title)
1280 self.setWinTitle(title)
1280
1281
1281
1282
1282 # title = "RTI %s" %(thisDatetime.strftime("%d-%b-%Y"))
1283 # title = "RTI %s" %(thisDatetime.strftime("%d-%b-%Y"))
1283 title = "RTI-Noise - %s" %(thisDatetime.strftime("%d-%b-%Y %H:%M:%S"))
1284 title = "RTI-Noise - %s" %(thisDatetime.strftime("%d-%b-%Y %H:%M:%S"))
1284
1285
1285 legendlabels = ["channel %d"%idchannel for idchannel in channelList]
1286 legendlabels = ["channel %d"%idchannel for idchannel in channelList]
1286 axes = self.axesList[0]
1287 axes = self.axesList[0]
1287
1288
1288 self.xdata = numpy.hstack((self.xdata, x[0:1]))
1289 self.xdata = numpy.hstack((self.xdata, x[0:1]))
1289
1290
1290 if len(self.ydata)==0:
1291 if len(self.ydata)==0:
1291 self.ydata = datadB[channelIndexList].reshape(-1,1)
1292 self.ydata = datadB[channelIndexList].reshape(-1,1)
1292 else:
1293 else:
1293 self.ydata = numpy.hstack((self.ydata, datadB[channelIndexList].reshape(-1,1)))
1294 self.ydata = numpy.hstack((self.ydata, datadB[channelIndexList].reshape(-1,1)))
1294
1295
1295
1296
1296 axes.pmultilineyaxis(x=self.xdata, y=self.ydata,
1297 axes.pmultilineyaxis(x=self.xdata, y=self.ydata,
1297 xmin=tmin, xmax=tmax, ymin=ymin, ymax=ymax,
1298 xmin=tmin, xmax=tmax, ymin=ymin, ymax=ymax,
1298 xlabel=xlabel, ylabel=ylabel, title=title, legendlabels=legendlabels, marker='.', markersize=8, linestyle="solid",
1299 xlabel=xlabel, ylabel=ylabel, title=title, legendlabels=legendlabels, marker='.', markersize=8, linestyle="solid",
1299 XAxisAsTime=True
1300 XAxisAsTime=True
1300 )
1301 )
1301
1302
1302 self.draw()
1303 self.draw()
1303
1304
1304 if save:
1305 if save:
1305
1306
1306 if figfile == None:
1307 if figfile == None:
1307 figfile = self.getFilename(name = self.name)
1308 figfile = self.getFilename(name = self.name)
1308
1309
1309 self.saveFigure(figpath, figfile)
1310 self.saveFigure(figpath, figfile)
1310
1311
1311 self.counterftp += 1
1312 self.counterftp += 1
1312 if (ftp and (self.counterftp==ftpratio)):
1313 if (ftp and (self.counterftp==ftpratio)):
1313 figfilename = os.path.join(figpath,figfile)
1314 figfilename = os.path.join(figpath,figfile)
1314 self.sendByFTP(figfilename)
1315 self.sendByFTP(figfilename)
1315 self.counterftp = 0
1316 self.counterftp = 0
1316
1317
1317 if x[1] + (x[1]-x[0]) >= self.axesList[0].xmax:
1318 if x[1] + (x[1]-x[0]) >= self.axesList[0].xmax:
1318 self.__isConfig = False
1319 self.__isConfig = False
1319 del self.xdata
1320 del self.xdata
1320 del self.ydata
1321 del self.ydata
1321
1322
1322
1323
1323 No newline at end of file
1324
General Comments 0
You need to be logged in to leave comments. Login now