##// END OF EJS Templates
Se ploteo el valor maximo del espectro, SpectraHeis
Daniel Valdez -
r336:be49c974ff74
parent child
Show More
@@ -1,1308 +1,1308
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
1025
1026 def getSubplots(self):
1026 def getSubplots(self):
1027
1027
1028 ncol = int(numpy.sqrt(self.nplots)+0.9)
1028 ncol = int(numpy.sqrt(self.nplots)+0.9)
1029 nrow = int(self.nplots*1./ncol + 0.9)
1029 nrow = int(self.nplots*1./ncol + 0.9)
1030
1030
1031 return nrow, ncol
1031 return nrow, ncol
1032
1032
1033 def setup(self, idfigure, nplots, wintitle):
1033 def setup(self, idfigure, nplots, wintitle):
1034
1034
1035 showprofile = False
1035 showprofile = False
1036 self.__showprofile = showprofile
1036 self.__showprofile = showprofile
1037 self.nplots = nplots
1037 self.nplots = nplots
1038
1038
1039 ncolspan = 1
1039 ncolspan = 1
1040 colspan = 1
1040 colspan = 1
1041 if showprofile:
1041 if showprofile:
1042 ncolspan = 3
1042 ncolspan = 3
1043 colspan = 2
1043 colspan = 2
1044 self.__nsubplots = 2
1044 self.__nsubplots = 2
1045
1045
1046 self.createFigure(idfigure = idfigure,
1046 self.createFigure(idfigure = idfigure,
1047 wintitle = wintitle,
1047 wintitle = wintitle,
1048 widthplot = self.WIDTH + self.WIDTHPROF,
1048 widthplot = self.WIDTH + self.WIDTHPROF,
1049 heightplot = self.HEIGHT + self.HEIGHTPROF)
1049 heightplot = self.HEIGHT + self.HEIGHTPROF)
1050
1050
1051 nrow, ncol = self.getSubplots()
1051 nrow, ncol = self.getSubplots()
1052
1052
1053 counter = 0
1053 counter = 0
1054 for y in range(nrow):
1054 for y in range(nrow):
1055 for x in range(ncol):
1055 for x in range(ncol):
1056
1056
1057 if counter >= self.nplots:
1057 if counter >= self.nplots:
1058 break
1058 break
1059
1059
1060 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan, colspan, 1)
1060 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan, colspan, 1)
1061
1061
1062 if showprofile:
1062 if showprofile:
1063 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan+colspan, 1, 1)
1063 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan+colspan, 1, 1)
1064
1064
1065 counter += 1
1065 counter += 1
1066
1066
1067 # __isConfig = None
1067 # __isConfig = None
1068 # def __init__(self):
1068 # def __init__(self):
1069 #
1069 #
1070 # self.__isConfig = False
1070 # self.__isConfig = False
1071 # self.WIDTH = 600
1071 # self.WIDTH = 600
1072 # self.HEIGHT = 200
1072 # self.HEIGHT = 200
1073 #
1073 #
1074 # def getSubplots(self):
1074 # def getSubplots(self):
1075 #
1075 #
1076 # nrow = self.nplots
1076 # nrow = self.nplots
1077 # ncol = 3
1077 # ncol = 3
1078 # return nrow, ncol
1078 # return nrow, ncol
1079 #
1079 #
1080 # def setup(self, idfigure, nplots, wintitle):
1080 # def setup(self, idfigure, nplots, wintitle):
1081 #
1081 #
1082 # self.nplots = nplots
1082 # self.nplots = nplots
1083 #
1083 #
1084 # self.createFigure(idfigure, wintitle)
1084 # self.createFigure(idfigure, wintitle)
1085 #
1085 #
1086 # nrow,ncol = self.getSubplots()
1086 # nrow,ncol = self.getSubplots()
1087 # colspan = 3
1087 # colspan = 3
1088 # rowspan = 1
1088 # rowspan = 1
1089 #
1089 #
1090 # for i in range(nplots):
1090 # for i in range(nplots):
1091 # self.addAxes(nrow, ncol, i, 0, colspan, rowspan)
1091 # self.addAxes(nrow, ncol, i, 0, colspan, rowspan)
1092
1092
1093 def run(self, dataOut, idfigure, wintitle="", channelList=None,
1093 def run(self, dataOut, idfigure, wintitle="", channelList=None,
1094 xmin=None, xmax=None, ymin=None, ymax=None, save=False,
1094 xmin=None, xmax=None, ymin=None, ymax=None, save=False,
1095 figpath='./', figfile=None):
1095 figpath='./', figfile=None):
1096
1096
1097 """
1097 """
1098
1098
1099 Input:
1099 Input:
1100 dataOut :
1100 dataOut :
1101 idfigure :
1101 idfigure :
1102 wintitle :
1102 wintitle :
1103 channelList :
1103 channelList :
1104 xmin : None,
1104 xmin : None,
1105 xmax : None,
1105 xmax : None,
1106 ymin : None,
1106 ymin : None,
1107 ymax : None,
1107 ymax : None,
1108 """
1108 """
1109
1109
1110 if channelList == None:
1110 if channelList == None:
1111 channelIndexList = dataOut.channelIndexList
1111 channelIndexList = dataOut.channelIndexList
1112 else:
1112 else:
1113 channelIndexList = []
1113 channelIndexList = []
1114 for channel in channelList:
1114 for channel in channelList:
1115 if channel not in dataOut.channelList:
1115 if channel not in dataOut.channelList:
1116 raise ValueError, "Channel %d is not in dataOut.channelList"
1116 raise ValueError, "Channel %d is not in dataOut.channelList"
1117 channelIndexList.append(dataOut.channelList.index(channel))
1117 channelIndexList.append(dataOut.channelList.index(channel))
1118
1118
1119 # x = dataOut.heightList
1119 # x = dataOut.heightList
1120 c = 3E8
1120 c = 3E8
1121 deltaHeight = dataOut.heightList[1] - dataOut.heightList[0]
1121 deltaHeight = dataOut.heightList[1] - dataOut.heightList[0]
1122 #deberia cambiar para el caso de 1Mhz y 100KHz
1122 #deberia cambiar para el caso de 1Mhz y 100KHz
1123 x = numpy.arange(-1*dataOut.nHeights/2.,dataOut.nHeights/2.)*(c/(2*deltaHeight*dataOut.nHeights*1000))
1123 x = numpy.arange(-1*dataOut.nHeights/2.,dataOut.nHeights/2.)*(c/(2*deltaHeight*dataOut.nHeights*1000))
1124 x= x/(10000.0)
1124 x= x/(10000.0)
1125 # y = dataOut.data[channelIndexList,:] * numpy.conjugate(dataOut.data[channelIndexList,:])
1125 # y = dataOut.data[channelIndexList,:] * numpy.conjugate(dataOut.data[channelIndexList,:])
1126 # y = y.real
1126 # y = y.real
1127 datadB = 10.*numpy.log10(dataOut.data_spc)
1127 datadB = 10.*numpy.log10(dataOut.data_spc)
1128 y = datadB
1128 y = datadB
1129
1129
1130 thisDatetime = dataOut.datatime
1130 thisDatetime = dataOut.datatime
1131 title = "Scope: %s" %(thisDatetime.strftime("%d-%b-%Y %H:%M:%S"))
1131 title = "Scope: %s" %(thisDatetime.strftime("%d-%b-%Y %H:%M:%S"))
1132 xlabel = "Frequency"
1132 xlabel = "Frequency"
1133 ylabel = "Intensity (dB)"
1133 ylabel = "Intensity (dB)"
1134
1134
1135 if not self.__isConfig:
1135 if not self.__isConfig:
1136 nplots = len(channelIndexList)
1136 nplots = len(channelIndexList)
1137
1137
1138 self.setup(idfigure=idfigure,
1138 self.setup(idfigure=idfigure,
1139 nplots=nplots,
1139 nplots=nplots,
1140 wintitle=wintitle)
1140 wintitle=wintitle)
1141
1141
1142 if xmin == None: xmin = numpy.nanmin(x)
1142 if xmin == None: xmin = numpy.nanmin(x)
1143 if xmax == None: xmax = numpy.nanmax(x)
1143 if xmax == None: xmax = numpy.nanmax(x)
1144 if ymin == None: ymin = numpy.nanmin(y)
1144 if ymin == None: ymin = numpy.nanmin(y)
1145 if ymax == None: ymax = numpy.nanmax(y)
1145 if ymax == None: ymax = numpy.nanmax(y)
1146
1146
1147 self.__isConfig = True
1147 self.__isConfig = True
1148
1148
1149 self.setWinTitle(title)
1149 self.setWinTitle(title)
1150
1150
1151 for i in range(len(self.axesList)):
1151 for i in range(len(self.axesList)):
1152 title = "Channel %d" %(i)
1153 axes = self.axesList[i]
1154 ychannel = y[i,:]
1152 ychannel = y[i,:]
1153 title = "Channel %d - peak:%.2f" %(i,numpy.max(ychannel))
1154 axes = self.axesList[i]
1155 axes.pline(x, ychannel,
1155 axes.pline(x, ychannel,
1156 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax,
1156 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax,
1157 xlabel=xlabel, ylabel=ylabel, title=title)
1157 xlabel=xlabel, ylabel=ylabel, title=title)
1158
1158
1159 self.draw()
1159 self.draw()
1160
1160
1161 if save:
1161 if save:
1162 date = thisDatetime.strftime("%Y%m%d_%H%M%S")
1162 date = thisDatetime.strftime("%Y%m%d_%H%M%S")
1163 if figfile == None:
1163 if figfile == None:
1164 figfile = self.getFilename(name = date)
1164 figfile = self.getFilename(name = date)
1165
1165
1166 self.saveFigure(figpath, figfile)
1166 self.saveFigure(figpath, figfile)
1167
1167
1168
1168
1169 class RTIfromSpectraHeis(Figure):
1169 class RTIfromSpectraHeis(Figure):
1170
1170
1171 __isConfig = None
1171 __isConfig = None
1172 __nsubplots = None
1172 __nsubplots = None
1173
1173
1174 PREFIX = 'rtinoise'
1174 PREFIX = 'rtinoise'
1175
1175
1176 def __init__(self):
1176 def __init__(self):
1177
1177
1178 self.timerange = 24*60*60
1178 self.timerange = 24*60*60
1179 self.__isConfig = False
1179 self.__isConfig = False
1180 self.__nsubplots = 1
1180 self.__nsubplots = 1
1181
1181
1182 self.WIDTH = 820
1182 self.WIDTH = 820
1183 self.HEIGHT = 200
1183 self.HEIGHT = 200
1184 self.WIDTHPROF = 120
1184 self.WIDTHPROF = 120
1185 self.HEIGHTPROF = 0
1185 self.HEIGHTPROF = 0
1186 self.xdata = None
1186 self.xdata = None
1187 self.ydata = None
1187 self.ydata = None
1188
1188
1189 def getSubplots(self):
1189 def getSubplots(self):
1190
1190
1191 ncol = 1
1191 ncol = 1
1192 nrow = 1
1192 nrow = 1
1193
1193
1194 return nrow, ncol
1194 return nrow, ncol
1195
1195
1196 def setup(self, idfigure, nplots, wintitle, showprofile=True):
1196 def setup(self, idfigure, nplots, wintitle, showprofile=True):
1197
1197
1198 self.__showprofile = showprofile
1198 self.__showprofile = showprofile
1199 self.nplots = nplots
1199 self.nplots = nplots
1200
1200
1201 ncolspan = 7
1201 ncolspan = 7
1202 colspan = 6
1202 colspan = 6
1203 self.__nsubplots = 2
1203 self.__nsubplots = 2
1204
1204
1205 self.createFigure(idfigure = idfigure,
1205 self.createFigure(idfigure = idfigure,
1206 wintitle = wintitle,
1206 wintitle = wintitle,
1207 widthplot = self.WIDTH+self.WIDTHPROF,
1207 widthplot = self.WIDTH+self.WIDTHPROF,
1208 heightplot = self.HEIGHT+self.HEIGHTPROF)
1208 heightplot = self.HEIGHT+self.HEIGHTPROF)
1209
1209
1210 nrow, ncol = self.getSubplots()
1210 nrow, ncol = self.getSubplots()
1211
1211
1212 self.addAxes(nrow, ncol*ncolspan, 0, 0, colspan, 1)
1212 self.addAxes(nrow, ncol*ncolspan, 0, 0, colspan, 1)
1213
1213
1214
1214
1215 def run(self, dataOut, idfigure, wintitle="", channelList=None, showprofile='True',
1215 def run(self, dataOut, idfigure, wintitle="", channelList=None, showprofile='True',
1216 xmin=None, xmax=None, ymin=None, ymax=None,
1216 xmin=None, xmax=None, ymin=None, ymax=None,
1217 timerange=None,
1217 timerange=None,
1218 save=False, figpath='./', figfile=None):
1218 save=False, figpath='./', figfile=None):
1219
1219
1220 if channelList == None:
1220 if channelList == None:
1221 channelIndexList = dataOut.channelIndexList
1221 channelIndexList = dataOut.channelIndexList
1222 channelList = dataOut.channelList
1222 channelList = dataOut.channelList
1223 else:
1223 else:
1224 channelIndexList = []
1224 channelIndexList = []
1225 for channel in channelList:
1225 for channel in channelList:
1226 if channel not in dataOut.channelList:
1226 if channel not in dataOut.channelList:
1227 raise ValueError, "Channel %d is not in dataOut.channelList"
1227 raise ValueError, "Channel %d is not in dataOut.channelList"
1228 channelIndexList.append(dataOut.channelList.index(channel))
1228 channelIndexList.append(dataOut.channelList.index(channel))
1229
1229
1230 if timerange != None:
1230 if timerange != None:
1231 self.timerange = timerange
1231 self.timerange = timerange
1232
1232
1233 tmin = None
1233 tmin = None
1234 tmax = None
1234 tmax = None
1235 x = dataOut.getTimeRange()
1235 x = dataOut.getTimeRange()
1236 y = dataOut.getHeiRange()
1236 y = dataOut.getHeiRange()
1237
1237
1238 factor = 1
1238 factor = 1
1239 data = dataOut.data_spc/factor
1239 data = dataOut.data_spc/factor
1240 data = numpy.average(data,axis=1)
1240 data = numpy.average(data,axis=1)
1241 datadB = 10*numpy.log10(data)
1241 datadB = 10*numpy.log10(data)
1242
1242
1243 # factor = dataOut.normFactor
1243 # factor = dataOut.normFactor
1244 # noise = dataOut.getNoise()/factor
1244 # noise = dataOut.getNoise()/factor
1245 # noisedB = 10*numpy.log10(noise)
1245 # noisedB = 10*numpy.log10(noise)
1246
1246
1247 thisDatetime = dataOut.datatime
1247 thisDatetime = dataOut.datatime
1248 title = "RTI: %s" %(thisDatetime.strftime("%d-%b-%Y"))
1248 title = "RTI: %s" %(thisDatetime.strftime("%d-%b-%Y"))
1249 xlabel = "Local Time"
1249 xlabel = "Local Time"
1250 ylabel = "Intensity (dB)"
1250 ylabel = "Intensity (dB)"
1251
1251
1252 if not self.__isConfig:
1252 if not self.__isConfig:
1253
1253
1254 nplots = 1
1254 nplots = 1
1255
1255
1256 self.setup(idfigure=idfigure,
1256 self.setup(idfigure=idfigure,
1257 nplots=nplots,
1257 nplots=nplots,
1258 wintitle=wintitle,
1258 wintitle=wintitle,
1259 showprofile=showprofile)
1259 showprofile=showprofile)
1260
1260
1261 tmin, tmax = self.getTimeLim(x, xmin, xmax)
1261 tmin, tmax = self.getTimeLim(x, xmin, xmax)
1262 if ymin == None: ymin = numpy.nanmin(datadB)
1262 if ymin == None: ymin = numpy.nanmin(datadB)
1263 if ymax == None: ymax = numpy.nanmax(datadB)
1263 if ymax == None: ymax = numpy.nanmax(datadB)
1264
1264
1265 self.name = thisDatetime.strftime("%Y%m%d_%H%M%S")
1265 self.name = thisDatetime.strftime("%Y%m%d_%H%M%S")
1266 self.__isConfig = True
1266 self.__isConfig = True
1267
1267
1268 self.xdata = numpy.array([])
1268 self.xdata = numpy.array([])
1269 self.ydata = numpy.array([])
1269 self.ydata = numpy.array([])
1270
1270
1271 self.setWinTitle(title)
1271 self.setWinTitle(title)
1272
1272
1273
1273
1274 title = "RTI %s" %(thisDatetime.strftime("%d-%b-%Y"))
1274 title = "RTI %s" %(thisDatetime.strftime("%d-%b-%Y"))
1275
1275
1276 legendlabels = ["channel %d"%idchannel for idchannel in channelList]
1276 legendlabels = ["channel %d"%idchannel for idchannel in channelList]
1277 axes = self.axesList[0]
1277 axes = self.axesList[0]
1278
1278
1279 self.xdata = numpy.hstack((self.xdata, x[0:1]))
1279 self.xdata = numpy.hstack((self.xdata, x[0:1]))
1280
1280
1281 if len(self.ydata)==0:
1281 if len(self.ydata)==0:
1282 self.ydata = datadB[channelIndexList].reshape(-1,1)
1282 self.ydata = datadB[channelIndexList].reshape(-1,1)
1283 else:
1283 else:
1284 self.ydata = numpy.hstack((self.ydata, datadB[channelIndexList].reshape(-1,1)))
1284 self.ydata = numpy.hstack((self.ydata, datadB[channelIndexList].reshape(-1,1)))
1285
1285
1286
1286
1287 axes.pmultilineyaxis(x=self.xdata, y=self.ydata,
1287 axes.pmultilineyaxis(x=self.xdata, y=self.ydata,
1288 xmin=tmin, xmax=tmax, ymin=ymin, ymax=ymax,
1288 xmin=tmin, xmax=tmax, ymin=ymin, ymax=ymax,
1289 xlabel=xlabel, ylabel=ylabel, title=title, legendlabels=legendlabels, marker='x', markersize=8, linestyle="solid",
1289 xlabel=xlabel, ylabel=ylabel, title=title, legendlabels=legendlabels, marker='x', markersize=8, linestyle="solid",
1290 XAxisAsTime=True
1290 XAxisAsTime=True
1291 )
1291 )
1292
1292
1293 self.draw()
1293 self.draw()
1294
1294
1295 if save:
1295 if save:
1296
1296
1297 if figfile == None:
1297 if figfile == None:
1298 figfile = self.getFilename(name = self.name)
1298 figfile = self.getFilename(name = self.name)
1299
1299
1300 self.saveFigure(figpath, figfile)
1300 self.saveFigure(figpath, figfile)
1301
1301
1302 if x[1] + (x[1]-x[0]) >= self.axesList[0].xmax:
1302 if x[1] + (x[1]-x[0]) >= self.axesList[0].xmax:
1303 self.__isConfig = False
1303 self.__isConfig = False
1304 del self.xdata
1304 del self.xdata
1305 del self.ydata
1305 del self.ydata
1306
1306
1307
1307
1308 No newline at end of file
1308
General Comments 0
You need to be logged in to leave comments. Login now