##// END OF EJS Templates
15/3/18
ebocanegra -
r1149:c513dba92d21
parent child
Show More

The requested changes are too big and content was truncated. Show full diff

@@ -1,2160 +1,2161
1 import os
1 import os
2 import datetime
2 import datetime
3 import numpy
3 import numpy
4 import inspect
4 import inspect
5 from figure import Figure, isRealtime, isTimeInHourRange
5 from figure import Figure, isRealtime, isTimeInHourRange
6 from plotting_codes import *
6 from plotting_codes import *
7
7
8
8
9 class SpcParamPlot(Figure):
9 class SpcParamPlot(Figure):
10
10
11 isConfig = None
11 isConfig = None
12 __nsubplots = None
12 __nsubplots = None
13
13
14 WIDTHPROF = None
14 WIDTHPROF = None
15 HEIGHTPROF = None
15 HEIGHTPROF = None
16 PREFIX = 'SpcParam'
16 PREFIX = 'SpcParam'
17
17
18 def __init__(self, **kwargs):
18 def __init__(self, **kwargs):
19 Figure.__init__(self, **kwargs)
19 Figure.__init__(self, **kwargs)
20 self.isConfig = False
20 self.isConfig = False
21 self.__nsubplots = 1
21 self.__nsubplots = 1
22
22
23 self.WIDTH = 250
23 self.WIDTH = 250
24 self.HEIGHT = 250
24 self.HEIGHT = 250
25 self.WIDTHPROF = 120
25 self.WIDTHPROF = 120
26 self.HEIGHTPROF = 0
26 self.HEIGHTPROF = 0
27 self.counter_imagwr = 0
27 self.counter_imagwr = 0
28
28
29 self.PLOT_CODE = SPEC_CODE
29 self.PLOT_CODE = SPEC_CODE
30
30
31 self.FTP_WEI = None
31 self.FTP_WEI = None
32 self.EXP_CODE = None
32 self.EXP_CODE = None
33 self.SUB_EXP_CODE = None
33 self.SUB_EXP_CODE = None
34 self.PLOT_POS = None
34 self.PLOT_POS = None
35
35
36 self.__xfilter_ena = False
36 self.__xfilter_ena = False
37 self.__yfilter_ena = False
37 self.__yfilter_ena = False
38
38
39 def getSubplots(self):
39 def getSubplots(self):
40
40
41 ncol = int(numpy.sqrt(self.nplots)+0.9)
41 ncol = int(numpy.sqrt(self.nplots)+0.9)
42 nrow = int(self.nplots*1./ncol + 0.9)
42 nrow = int(self.nplots*1./ncol + 0.9)
43
43
44 return nrow, ncol
44 return nrow, ncol
45
45
46 def setup(self, id, nplots, wintitle, showprofile=True, show=True):
46 def setup(self, id, nplots, wintitle, showprofile=True, show=True):
47
47
48 self.__showprofile = showprofile
48 self.__showprofile = showprofile
49 self.nplots = nplots
49 self.nplots = nplots
50
50
51 ncolspan = 1
51 ncolspan = 1
52 colspan = 1
52 colspan = 1
53 if showprofile:
53 if showprofile:
54 ncolspan = 3
54 ncolspan = 3
55 colspan = 2
55 colspan = 2
56 self.__nsubplots = 2
56 self.__nsubplots = 2
57
57
58 self.createFigure(id = id,
58 self.createFigure(id = id,
59 wintitle = wintitle,
59 wintitle = wintitle,
60 widthplot = self.WIDTH + self.WIDTHPROF,
60 widthplot = self.WIDTH + self.WIDTHPROF,
61 heightplot = self.HEIGHT + self.HEIGHTPROF,
61 heightplot = self.HEIGHT + self.HEIGHTPROF,
62 show=show)
62 show=show)
63
63
64 nrow, ncol = self.getSubplots()
64 nrow, ncol = self.getSubplots()
65
65
66 counter = 0
66 counter = 0
67 for y in range(nrow):
67 for y in range(nrow):
68 for x in range(ncol):
68 for x in range(ncol):
69
69
70 if counter >= self.nplots:
70 if counter >= self.nplots:
71 break
71 break
72
72
73 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan, colspan, 1)
73 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan, colspan, 1)
74
74
75 if showprofile:
75 if showprofile:
76 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan+colspan, 1, 1)
76 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan+colspan, 1, 1)
77
77
78 counter += 1
78 counter += 1
79
79
80 def run(self, dataOut, id, wintitle="", channelList=None, showprofile=True,
80 def run(self, dataOut, id, wintitle="", channelList=None, showprofile=True,
81 xmin=None, xmax=None, ymin=None, ymax=None, zmin=None, zmax=None,
81 xmin=None, xmax=None, ymin=None, ymax=None, zmin=None, zmax=None,
82 save=False, figpath='./', figfile=None, show=True, ftp=False, wr_period=1,
82 save=False, figpath='./', figfile=None, show=True, ftp=False, wr_period=1,
83 server=None, folder=None, username=None, password=None,
83 server=None, folder=None, username=None, password=None,
84 ftp_wei=0, exp_code=0, sub_exp_code=0, plot_pos=0, realtime=False,
84 ftp_wei=0, exp_code=0, sub_exp_code=0, plot_pos=0, realtime=False,
85 xaxis="frequency", colormap='jet', normFactor=None , Selector = 0):
85 xaxis="frequency", colormap='jet', normFactor=None , Selector = 0):
86
86
87 """
87 """
88
88
89 Input:
89 Input:
90 dataOut :
90 dataOut :
91 id :
91 id :
92 wintitle :
92 wintitle :
93 channelList :
93 channelList :
94 showProfile :
94 showProfile :
95 xmin : None,
95 xmin : None,
96 xmax : None,
96 xmax : None,
97 ymin : None,
97 ymin : None,
98 ymax : None,
98 ymax : None,
99 zmin : None,
99 zmin : None,
100 zmax : None
100 zmax : None
101 """
101 """
102 if realtime:
102 if realtime:
103 if not(isRealtime(utcdatatime = dataOut.utctime)):
103 if not(isRealtime(utcdatatime = dataOut.utctime)):
104 print 'Skipping this plot function'
104 print 'Skipping this plot function'
105 return
105 return
106
106
107 if channelList == None:
107 if channelList == None:
108 channelIndexList = dataOut.channelIndexList
108 channelIndexList = dataOut.channelIndexList
109 else:
109 else:
110 channelIndexList = []
110 channelIndexList = []
111 for channel in channelList:
111 for channel in channelList:
112 if channel not in dataOut.channelList:
112 if channel not in dataOut.channelList:
113 raise ValueError, "Channel %d is not in dataOut.channelList" %channel
113 raise ValueError, "Channel %d is not in dataOut.channelList" %channel
114 channelIndexList.append(dataOut.channelList.index(channel))
114 channelIndexList.append(dataOut.channelList.index(channel))
115
115
116 # if normFactor is None:
116 # if normFactor is None:
117 # factor = dataOut.normFactor
117 # factor = dataOut.normFactor
118 # else:
118 # else:
119 # factor = normFactor
119 # factor = normFactor
120 if xaxis == "frequency":
120 if xaxis == "frequency":
121 x = dataOut.spcparam_range[0]
121 x = dataOut.spcparam_range[0]
122 xlabel = "Frequency (kHz)"
122 xlabel = "Frequency (kHz)"
123
123
124 elif xaxis == "time":
124 elif xaxis == "time":
125 x = dataOut.spcparam_range[1]
125 x = dataOut.spcparam_range[1]
126 xlabel = "Time (ms)"
126 xlabel = "Time (ms)"
127
127
128 else:
128 else:
129 x = dataOut.spcparam_range[2]
129 x = dataOut.spcparam_range[2]
130 xlabel = "Velocity (m/s)"
130 xlabel = "Velocity (m/s)"
131 print "Vmax=",x[-1]
131
132
132 ylabel = "Range (Km)"
133 ylabel = "Range (Km)"
133
134
134 y = dataOut.getHeiRange()
135 y = dataOut.getHeiRange()
135
136
136 z = dataOut.SPCparam[Selector] #GauSelector] #dataOut.data_spc/factor
137 z = dataOut.SPCparam[Selector] /1966080.0#/ dataOut.normFactor#GauSelector] #dataOut.data_spc/factor
137 #print 'GausSPC', z[0,32,10:40]
138 #print 'GausSPC', z[0,32,10:40]
138 z = numpy.where(numpy.isfinite(z), z, numpy.NAN)
139 z = numpy.where(numpy.isfinite(z), z, numpy.NAN)
139 zdB = 10*numpy.log10(z)
140 zdB = 10*numpy.log10(z)
140
141
141 avg = numpy.average(z, axis=1)
142 avg = numpy.average(z, axis=1)
142 avgdB = 10*numpy.log10(avg)
143 avgdB = 10*numpy.log10(avg)
143
144
144 noise = dataOut.spc_noise
145 noise = dataOut.spc_noise
145 noisedB = 10*numpy.log10(noise)
146 noisedB = 10*numpy.log10(noise)
146
147
147 thisDatetime = datetime.datetime.utcfromtimestamp(dataOut.getTimeRange()[0])
148 thisDatetime = datetime.datetime.utcfromtimestamp(dataOut.getTimeRange()[0])
148 title = wintitle + " Spectra"
149 title = wintitle + " Spectra"
149 if ((dataOut.azimuth!=None) and (dataOut.zenith!=None)):
150 if ((dataOut.azimuth!=None) and (dataOut.zenith!=None)):
150 title = title + '_' + 'azimuth,zenith=%2.2f,%2.2f'%(dataOut.azimuth, dataOut.zenith)
151 title = title + '_' + 'azimuth,zenith=%2.2f,%2.2f'%(dataOut.azimuth, dataOut.zenith)
151
152
152 if not self.isConfig:
153 if not self.isConfig:
153
154
154 nplots = len(channelIndexList)
155 nplots = len(channelIndexList)
155
156
156 self.setup(id=id,
157 self.setup(id=id,
157 nplots=nplots,
158 nplots=nplots,
158 wintitle=wintitle,
159 wintitle=wintitle,
159 showprofile=showprofile,
160 showprofile=showprofile,
160 show=show)
161 show=show)
161
162
162 if xmin == None: xmin = numpy.nanmin(x)
163 if xmin == None: xmin = numpy.nanmin(x)
163 if xmax == None: xmax = numpy.nanmax(x)
164 if xmax == None: xmax = numpy.nanmax(x)
164 if ymin == None: ymin = numpy.nanmin(y)
165 if ymin == None: ymin = numpy.nanmin(y)
165 if ymax == None: ymax = numpy.nanmax(y)
166 if ymax == None: ymax = numpy.nanmax(y)
166 if zmin == None: zmin = numpy.floor(numpy.nanmin(noisedB)) - 3
167 if zmin == None: zmin = numpy.floor(numpy.nanmin(noisedB)) - 3
167 if zmax == None: zmax = numpy.ceil(numpy.nanmax(avgdB)) + 3
168 if zmax == None: zmax = numpy.ceil(numpy.nanmax(avgdB)) + 3
168
169
169 self.FTP_WEI = ftp_wei
170 self.FTP_WEI = ftp_wei
170 self.EXP_CODE = exp_code
171 self.EXP_CODE = exp_code
171 self.SUB_EXP_CODE = sub_exp_code
172 self.SUB_EXP_CODE = sub_exp_code
172 self.PLOT_POS = plot_pos
173 self.PLOT_POS = plot_pos
173
174
174 self.isConfig = True
175 self.isConfig = True
175
176
176 self.setWinTitle(title)
177 self.setWinTitle(title)
177
178
178 for i in range(self.nplots):
179 for i in range(self.nplots):
179 index = channelIndexList[i]
180 index = channelIndexList[i]
180 str_datetime = '%s %s'%(thisDatetime.strftime("%Y/%m/%d"),thisDatetime.strftime("%H:%M:%S"))
181 str_datetime = '%s %s'%(thisDatetime.strftime("%Y/%m/%d"),thisDatetime.strftime("%H:%M:%S"))
181 title = "Channel %d: %4.2fdB: %s" %(dataOut.channelList[index], noisedB[index], str_datetime)
182 title = "Channel %d: %4.2fdB: %s" %(dataOut.channelList[index], noisedB[index], str_datetime)
182 if len(dataOut.beam.codeList) != 0:
183 if len(dataOut.beam.codeList) != 0:
183 title = "Ch%d:%4.2fdB,%2.2f,%2.2f:%s" %(dataOut.channelList[index], noisedB[index], dataOut.beam.azimuthList[index], dataOut.beam.zenithList[index], str_datetime)
184 title = "Ch%d:%4.2fdB,%2.2f,%2.2f:%s" %(dataOut.channelList[index], noisedB[index], dataOut.beam.azimuthList[index], dataOut.beam.zenithList[index], str_datetime)
184
185
185 axes = self.axesList[i*self.__nsubplots]
186 axes = self.axesList[i*self.__nsubplots]
186 axes.pcolor(x, y, zdB[index,:,:],
187 axes.pcolor(x, y, zdB[index,:,:],
187 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax, zmin=zmin, zmax=zmax,
188 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax, zmin=zmin, zmax=zmax,
188 xlabel=xlabel, ylabel=ylabel, title=title, colormap=colormap,
189 xlabel=xlabel, ylabel=ylabel, title=title, colormap=colormap,
189 ticksize=9, cblabel='')
190 ticksize=9, cblabel='')
190
191
191 if self.__showprofile:
192 if self.__showprofile:
192 axes = self.axesList[i*self.__nsubplots +1]
193 axes = self.axesList[i*self.__nsubplots +1]
193 axes.pline(avgdB[index,:], y,
194 axes.pline(avgdB[index,:], y,
194 xmin=zmin, xmax=zmax, ymin=ymin, ymax=ymax,
195 xmin=zmin, xmax=zmax, ymin=ymin, ymax=ymax,
195 xlabel='dB', ylabel='', title='',
196 xlabel='dB', ylabel='', title='',
196 ytick_visible=False,
197 ytick_visible=False,
197 grid='x')
198 grid='x')
198
199
199 noiseline = numpy.repeat(noisedB[index], len(y))
200 noiseline = numpy.repeat(noisedB[index], len(y))
200 axes.addpline(noiseline, y, idline=1, color="black", linestyle="dashed", lw=2)
201 axes.addpline(noiseline, y, idline=1, color="black", linestyle="dashed", lw=2)
201
202
202 self.draw()
203 self.draw()
203
204
204 if figfile == None:
205 if figfile == None:
205 str_datetime = thisDatetime.strftime("%Y%m%d_%H%M%S")
206 str_datetime = thisDatetime.strftime("%Y%m%d_%H%M%S")
206 name = str_datetime
207 name = str_datetime
207 if ((dataOut.azimuth!=None) and (dataOut.zenith!=None)):
208 if ((dataOut.azimuth!=None) and (dataOut.zenith!=None)):
208 name = name + '_az' + '_%2.2f'%(dataOut.azimuth) + '_zn' + '_%2.2f'%(dataOut.zenith)
209 name = name + '_az' + '_%2.2f'%(dataOut.azimuth) + '_zn' + '_%2.2f'%(dataOut.zenith)
209 figfile = self.getFilename(name)
210 figfile = self.getFilename(name)
210
211
211 self.save(figpath=figpath,
212 self.save(figpath=figpath,
212 figfile=figfile,
213 figfile=figfile,
213 save=save,
214 save=save,
214 ftp=ftp,
215 ftp=ftp,
215 wr_period=wr_period,
216 wr_period=wr_period,
216 thisDatetime=thisDatetime)
217 thisDatetime=thisDatetime)
217
218
218
219
219
220
220 class MomentsPlot(Figure):
221 class MomentsPlot(Figure):
221
222
222 isConfig = None
223 isConfig = None
223 __nsubplots = None
224 __nsubplots = None
224
225
225 WIDTHPROF = None
226 WIDTHPROF = None
226 HEIGHTPROF = None
227 HEIGHTPROF = None
227 PREFIX = 'prm'
228 PREFIX = 'prm'
228
229
229 def __init__(self, **kwargs):
230 def __init__(self, **kwargs):
230 Figure.__init__(self, **kwargs)
231 Figure.__init__(self, **kwargs)
231 self.isConfig = False
232 self.isConfig = False
232 self.__nsubplots = 1
233 self.__nsubplots = 1
233
234
234 self.WIDTH = 280
235 self.WIDTH = 280
235 self.HEIGHT = 250
236 self.HEIGHT = 250
236 self.WIDTHPROF = 120
237 self.WIDTHPROF = 120
237 self.HEIGHTPROF = 0
238 self.HEIGHTPROF = 0
238 self.counter_imagwr = 0
239 self.counter_imagwr = 0
239
240
240 self.PLOT_CODE = MOMENTS_CODE
241 self.PLOT_CODE = MOMENTS_CODE
241
242
242 self.FTP_WEI = None
243 self.FTP_WEI = None
243 self.EXP_CODE = None
244 self.EXP_CODE = None
244 self.SUB_EXP_CODE = None
245 self.SUB_EXP_CODE = None
245 self.PLOT_POS = None
246 self.PLOT_POS = None
246
247
247 def getSubplots(self):
248 def getSubplots(self):
248
249
249 ncol = int(numpy.sqrt(self.nplots)+0.9)
250 ncol = int(numpy.sqrt(self.nplots)+0.9)
250 nrow = int(self.nplots*1./ncol + 0.9)
251 nrow = int(self.nplots*1./ncol + 0.9)
251
252
252 return nrow, ncol
253 return nrow, ncol
253
254
254 def setup(self, id, nplots, wintitle, showprofile=True, show=True):
255 def setup(self, id, nplots, wintitle, showprofile=True, show=True):
255
256
256 self.__showprofile = showprofile
257 self.__showprofile = showprofile
257 self.nplots = nplots
258 self.nplots = nplots
258
259
259 ncolspan = 1
260 ncolspan = 1
260 colspan = 1
261 colspan = 1
261 if showprofile:
262 if showprofile:
262 ncolspan = 3
263 ncolspan = 3
263 colspan = 2
264 colspan = 2
264 self.__nsubplots = 2
265 self.__nsubplots = 2
265
266
266 self.createFigure(id = id,
267 self.createFigure(id = id,
267 wintitle = wintitle,
268 wintitle = wintitle,
268 widthplot = self.WIDTH + self.WIDTHPROF,
269 widthplot = self.WIDTH + self.WIDTHPROF,
269 heightplot = self.HEIGHT + self.HEIGHTPROF,
270 heightplot = self.HEIGHT + self.HEIGHTPROF,
270 show=show)
271 show=show)
271
272
272 nrow, ncol = self.getSubplots()
273 nrow, ncol = self.getSubplots()
273
274
274 counter = 0
275 counter = 0
275 for y in range(nrow):
276 for y in range(nrow):
276 for x in range(ncol):
277 for x in range(ncol):
277
278
278 if counter >= self.nplots:
279 if counter >= self.nplots:
279 break
280 break
280
281
281 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan, colspan, 1)
282 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan, colspan, 1)
282
283
283 if showprofile:
284 if showprofile:
284 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan+colspan, 1, 1)
285 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan+colspan, 1, 1)
285
286
286 counter += 1
287 counter += 1
287
288
288 def run(self, dataOut, id, wintitle="", channelList=None, showprofile=True,
289 def run(self, dataOut, id, wintitle="", channelList=None, showprofile=True,
289 xmin=None, xmax=None, ymin=None, ymax=None, zmin=None, zmax=None,
290 xmin=None, xmax=None, ymin=None, ymax=None, zmin=None, zmax=None,
290 save=False, figpath='./', figfile=None, show=True, ftp=False, wr_period=1,
291 save=False, figpath='./', figfile=None, show=True, ftp=False, wr_period=1,
291 server=None, folder=None, username=None, password=None,
292 server=None, folder=None, username=None, password=None,
292 ftp_wei=0, exp_code=0, sub_exp_code=0, plot_pos=0, realtime=False):
293 ftp_wei=0, exp_code=0, sub_exp_code=0, plot_pos=0, realtime=False):
293
294
294 """
295 """
295
296
296 Input:
297 Input:
297 dataOut :
298 dataOut :
298 id :
299 id :
299 wintitle :
300 wintitle :
300 channelList :
301 channelList :
301 showProfile :
302 showProfile :
302 xmin : None,
303 xmin : None,
303 xmax : None,
304 xmax : None,
304 ymin : None,
305 ymin : None,
305 ymax : None,
306 ymax : None,
306 zmin : None,
307 zmin : None,
307 zmax : None
308 zmax : None
308 """
309 """
309
310
310 if dataOut.flagNoData:
311 if dataOut.flagNoData:
311 return None
312 return None
312
313
313 if realtime:
314 if realtime:
314 if not(isRealtime(utcdatatime = dataOut.utctime)):
315 if not(isRealtime(utcdatatime = dataOut.utctime)):
315 print 'Skipping this plot function'
316 print 'Skipping this plot function'
316 return
317 return
317
318
318 if channelList == None:
319 if channelList == None:
319 channelIndexList = dataOut.channelIndexList
320 channelIndexList = dataOut.channelIndexList
320 else:
321 else:
321 channelIndexList = []
322 channelIndexList = []
322 for channel in channelList:
323 for channel in channelList:
323 if channel not in dataOut.channelList:
324 if channel not in dataOut.channelList:
324 raise ValueError, "Channel %d is not in dataOut.channelList"
325 raise ValueError, "Channel %d is not in dataOut.channelList"
325 channelIndexList.append(dataOut.channelList.index(channel))
326 channelIndexList.append(dataOut.channelList.index(channel))
326
327
327 factor = dataOut.normFactor
328 factor = dataOut.normFactor
328 x = dataOut.abscissaList
329 x = dataOut.abscissaList
329 y = dataOut.heightList
330 y = dataOut.heightList
330
331
331 z = dataOut.data_pre[channelIndexList,:,:]/factor
332 z = dataOut.data_pre[channelIndexList,:,:]/factor
332 z = numpy.where(numpy.isfinite(z), z, numpy.NAN)
333 z = numpy.where(numpy.isfinite(z), z, numpy.NAN)
333 avg = numpy.average(z, axis=1)
334 avg = numpy.average(z, axis=1)
334 noise = dataOut.noise/factor
335 noise = dataOut.noise/factor
335
336
336 zdB = 10*numpy.log10(z)
337 zdB = 10*numpy.log10(z)
337 avgdB = 10*numpy.log10(avg)
338 avgdB = 10*numpy.log10(avg)
338 noisedB = 10*numpy.log10(noise)
339 noisedB = 10*numpy.log10(noise)
339
340
340 #thisDatetime = dataOut.datatime
341 #thisDatetime = dataOut.datatime
341 thisDatetime = datetime.datetime.utcfromtimestamp(dataOut.getTimeRange()[0])
342 thisDatetime = datetime.datetime.utcfromtimestamp(dataOut.getTimeRange()[0])
342 title = wintitle + " Parameters"
343 title = wintitle + " Parameters"
343 xlabel = "Velocity (m/s)"
344 xlabel = "Velocity (m/s)"
344 ylabel = "Range (Km)"
345 ylabel = "Range (Km)"
345
346
346 update_figfile = False
347 update_figfile = False
347
348
348 if not self.isConfig:
349 if not self.isConfig:
349
350
350 nplots = len(channelIndexList)
351 nplots = len(channelIndexList)
351
352
352 self.setup(id=id,
353 self.setup(id=id,
353 nplots=nplots,
354 nplots=nplots,
354 wintitle=wintitle,
355 wintitle=wintitle,
355 showprofile=showprofile,
356 showprofile=showprofile,
356 show=show)
357 show=show)
357
358
358 if xmin == None: xmin = numpy.nanmin(x)
359 if xmin == None: xmin = numpy.nanmin(x)
359 if xmax == None: xmax = numpy.nanmax(x)
360 if xmax == None: xmax = numpy.nanmax(x)
360 if ymin == None: ymin = numpy.nanmin(y)
361 if ymin == None: ymin = numpy.nanmin(y)
361 if ymax == None: ymax = numpy.nanmax(y)
362 if ymax == None: ymax = numpy.nanmax(y)
362 if zmin == None: zmin = numpy.nanmin(avgdB)*0.9
363 if zmin == None: zmin = numpy.nanmin(avgdB)*0.9
363 if zmax == None: zmax = numpy.nanmax(avgdB)*0.9
364 if zmax == None: zmax = numpy.nanmax(avgdB)*0.9
364
365
365 self.FTP_WEI = ftp_wei
366 self.FTP_WEI = ftp_wei
366 self.EXP_CODE = exp_code
367 self.EXP_CODE = exp_code
367 self.SUB_EXP_CODE = sub_exp_code
368 self.SUB_EXP_CODE = sub_exp_code
368 self.PLOT_POS = plot_pos
369 self.PLOT_POS = plot_pos
369
370
370 self.isConfig = True
371 self.isConfig = True
371 update_figfile = True
372 update_figfile = True
372
373
373 self.setWinTitle(title)
374 self.setWinTitle(title)
374
375
375 for i in range(self.nplots):
376 for i in range(self.nplots):
376 str_datetime = '%s %s'%(thisDatetime.strftime("%Y/%m/%d"),thisDatetime.strftime("%H:%M:%S"))
377 str_datetime = '%s %s'%(thisDatetime.strftime("%Y/%m/%d"),thisDatetime.strftime("%H:%M:%S"))
377 title = "Channel %d: %4.2fdB: %s" %(dataOut.channelList[i], noisedB[i], str_datetime)
378 title = "Channel %d: %4.2fdB: %s" %(dataOut.channelList[i], noisedB[i], str_datetime)
378 axes = self.axesList[i*self.__nsubplots]
379 axes = self.axesList[i*self.__nsubplots]
379 axes.pcolor(x, y, zdB[i,:,:],
380 axes.pcolor(x, y, zdB[i,:,:],
380 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax, zmin=zmin, zmax=zmax,
381 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax, zmin=zmin, zmax=zmax,
381 xlabel=xlabel, ylabel=ylabel, title=title,
382 xlabel=xlabel, ylabel=ylabel, title=title,
382 ticksize=9, cblabel='')
383 ticksize=9, cblabel='')
383 #Mean Line
384 #Mean Line
384 mean = dataOut.data_param[i, 1, :]
385 mean = dataOut.data_param[i, 1, :]
385 axes.addpline(mean, y, idline=0, color="black", linestyle="solid", lw=1)
386 axes.addpline(mean, y, idline=0, color="black", linestyle="solid", lw=1)
386
387
387 if self.__showprofile:
388 if self.__showprofile:
388 axes = self.axesList[i*self.__nsubplots +1]
389 axes = self.axesList[i*self.__nsubplots +1]
389 axes.pline(avgdB[i], y,
390 axes.pline(avgdB[i], y,
390 xmin=zmin, xmax=zmax, ymin=ymin, ymax=ymax,
391 xmin=zmin, xmax=zmax, ymin=ymin, ymax=ymax,
391 xlabel='dB', ylabel='', title='',
392 xlabel='dB', ylabel='', title='',
392 ytick_visible=False,
393 ytick_visible=False,
393 grid='x')
394 grid='x')
394
395
395 noiseline = numpy.repeat(noisedB[i], len(y))
396 noiseline = numpy.repeat(noisedB[i], len(y))
396 axes.addpline(noiseline, y, idline=1, color="black", linestyle="dashed", lw=2)
397 axes.addpline(noiseline, y, idline=1, color="black", linestyle="dashed", lw=2)
397
398
398 self.draw()
399 self.draw()
399
400
400 self.save(figpath=figpath,
401 self.save(figpath=figpath,
401 figfile=figfile,
402 figfile=figfile,
402 save=save,
403 save=save,
403 ftp=ftp,
404 ftp=ftp,
404 wr_period=wr_period,
405 wr_period=wr_period,
405 thisDatetime=thisDatetime)
406 thisDatetime=thisDatetime)
406
407
407
408
408
409
409 class SkyMapPlot(Figure):
410 class SkyMapPlot(Figure):
410
411
411 __isConfig = None
412 __isConfig = None
412 __nsubplots = None
413 __nsubplots = None
413
414
414 WIDTHPROF = None
415 WIDTHPROF = None
415 HEIGHTPROF = None
416 HEIGHTPROF = None
416 PREFIX = 'mmap'
417 PREFIX = 'mmap'
417
418
418 def __init__(self, **kwargs):
419 def __init__(self, **kwargs):
419 Figure.__init__(self, **kwargs)
420 Figure.__init__(self, **kwargs)
420 self.isConfig = False
421 self.isConfig = False
421 self.__nsubplots = 1
422 self.__nsubplots = 1
422
423
423 # self.WIDTH = 280
424 # self.WIDTH = 280
424 # self.HEIGHT = 250
425 # self.HEIGHT = 250
425 self.WIDTH = 600
426 self.WIDTH = 600
426 self.HEIGHT = 600
427 self.HEIGHT = 600
427 self.WIDTHPROF = 120
428 self.WIDTHPROF = 120
428 self.HEIGHTPROF = 0
429 self.HEIGHTPROF = 0
429 self.counter_imagwr = 0
430 self.counter_imagwr = 0
430
431
431 self.PLOT_CODE = MSKYMAP_CODE
432 self.PLOT_CODE = MSKYMAP_CODE
432
433
433 self.FTP_WEI = None
434 self.FTP_WEI = None
434 self.EXP_CODE = None
435 self.EXP_CODE = None
435 self.SUB_EXP_CODE = None
436 self.SUB_EXP_CODE = None
436 self.PLOT_POS = None
437 self.PLOT_POS = None
437
438
438 def getSubplots(self):
439 def getSubplots(self):
439
440
440 ncol = int(numpy.sqrt(self.nplots)+0.9)
441 ncol = int(numpy.sqrt(self.nplots)+0.9)
441 nrow = int(self.nplots*1./ncol + 0.9)
442 nrow = int(self.nplots*1./ncol + 0.9)
442
443
443 return nrow, ncol
444 return nrow, ncol
444
445
445 def setup(self, id, nplots, wintitle, showprofile=False, show=True):
446 def setup(self, id, nplots, wintitle, showprofile=False, show=True):
446
447
447 self.__showprofile = showprofile
448 self.__showprofile = showprofile
448 self.nplots = nplots
449 self.nplots = nplots
449
450
450 ncolspan = 1
451 ncolspan = 1
451 colspan = 1
452 colspan = 1
452
453
453 self.createFigure(id = id,
454 self.createFigure(id = id,
454 wintitle = wintitle,
455 wintitle = wintitle,
455 widthplot = self.WIDTH, #+ self.WIDTHPROF,
456 widthplot = self.WIDTH, #+ self.WIDTHPROF,
456 heightplot = self.HEIGHT,# + self.HEIGHTPROF,
457 heightplot = self.HEIGHT,# + self.HEIGHTPROF,
457 show=show)
458 show=show)
458
459
459 nrow, ncol = 1,1
460 nrow, ncol = 1,1
460 counter = 0
461 counter = 0
461 x = 0
462 x = 0
462 y = 0
463 y = 0
463 self.addAxes(1, 1, 0, 0, 1, 1, True)
464 self.addAxes(1, 1, 0, 0, 1, 1, True)
464
465
465 def run(self, dataOut, id, wintitle="", channelList=None, showprofile=False,
466 def run(self, dataOut, id, wintitle="", channelList=None, showprofile=False,
466 tmin=0, tmax=24, timerange=None,
467 tmin=0, tmax=24, timerange=None,
467 save=False, figpath='./', figfile=None, show=True, ftp=False, wr_period=1,
468 save=False, figpath='./', figfile=None, show=True, ftp=False, wr_period=1,
468 server=None, folder=None, username=None, password=None,
469 server=None, folder=None, username=None, password=None,
469 ftp_wei=0, exp_code=0, sub_exp_code=0, plot_pos=0, realtime=False):
470 ftp_wei=0, exp_code=0, sub_exp_code=0, plot_pos=0, realtime=False):
470
471
471 """
472 """
472
473
473 Input:
474 Input:
474 dataOut :
475 dataOut :
475 id :
476 id :
476 wintitle :
477 wintitle :
477 channelList :
478 channelList :
478 showProfile :
479 showProfile :
479 xmin : None,
480 xmin : None,
480 xmax : None,
481 xmax : None,
481 ymin : None,
482 ymin : None,
482 ymax : None,
483 ymax : None,
483 zmin : None,
484 zmin : None,
484 zmax : None
485 zmax : None
485 """
486 """
486
487
487 arrayParameters = dataOut.data_param
488 arrayParameters = dataOut.data_param
488 error = arrayParameters[:,-1]
489 error = arrayParameters[:,-1]
489 indValid = numpy.where(error == 0)[0]
490 indValid = numpy.where(error == 0)[0]
490 finalMeteor = arrayParameters[indValid,:]
491 finalMeteor = arrayParameters[indValid,:]
491 finalAzimuth = finalMeteor[:,3]
492 finalAzimuth = finalMeteor[:,3]
492 finalZenith = finalMeteor[:,4]
493 finalZenith = finalMeteor[:,4]
493
494
494 x = finalAzimuth*numpy.pi/180
495 x = finalAzimuth*numpy.pi/180
495 y = finalZenith
496 y = finalZenith
496 x1 = [dataOut.ltctime, dataOut.ltctime]
497 x1 = [dataOut.ltctime, dataOut.ltctime]
497
498
498 #thisDatetime = dataOut.datatime
499 #thisDatetime = dataOut.datatime
499 thisDatetime = datetime.datetime.utcfromtimestamp(dataOut.ltctime)
500 thisDatetime = datetime.datetime.utcfromtimestamp(dataOut.ltctime)
500 title = wintitle + " Parameters"
501 title = wintitle + " Parameters"
501 xlabel = "Zonal Zenith Angle (deg) "
502 xlabel = "Zonal Zenith Angle (deg) "
502 ylabel = "Meridional Zenith Angle (deg)"
503 ylabel = "Meridional Zenith Angle (deg)"
503 update_figfile = False
504 update_figfile = False
504
505
505 if not self.isConfig:
506 if not self.isConfig:
506
507
507 nplots = 1
508 nplots = 1
508
509
509 self.setup(id=id,
510 self.setup(id=id,
510 nplots=nplots,
511 nplots=nplots,
511 wintitle=wintitle,
512 wintitle=wintitle,
512 showprofile=showprofile,
513 showprofile=showprofile,
513 show=show)
514 show=show)
514
515
515 if self.xmin is None and self.xmax is None:
516 if self.xmin is None and self.xmax is None:
516 self.xmin, self.xmax = self.getTimeLim(x1, tmin, tmax, timerange)
517 self.xmin, self.xmax = self.getTimeLim(x1, tmin, tmax, timerange)
517
518
518 if timerange != None:
519 if timerange != None:
519 self.timerange = timerange
520 self.timerange = timerange
520 else:
521 else:
521 self.timerange = self.xmax - self.xmin
522 self.timerange = self.xmax - self.xmin
522
523
523 self.FTP_WEI = ftp_wei
524 self.FTP_WEI = ftp_wei
524 self.EXP_CODE = exp_code
525 self.EXP_CODE = exp_code
525 self.SUB_EXP_CODE = sub_exp_code
526 self.SUB_EXP_CODE = sub_exp_code
526 self.PLOT_POS = plot_pos
527 self.PLOT_POS = plot_pos
527 self.name = thisDatetime.strftime("%Y%m%d_%H%M%S")
528 self.name = thisDatetime.strftime("%Y%m%d_%H%M%S")
528 self.firstdate = '%s %s'%(thisDatetime.strftime("%Y/%m/%d"),thisDatetime.strftime("%H:%M:%S"))
529 self.firstdate = '%s %s'%(thisDatetime.strftime("%Y/%m/%d"),thisDatetime.strftime("%H:%M:%S"))
529 self.isConfig = True
530 self.isConfig = True
530 update_figfile = True
531 update_figfile = True
531
532
532 self.setWinTitle(title)
533 self.setWinTitle(title)
533
534
534 i = 0
535 i = 0
535 str_datetime = '%s %s'%(thisDatetime.strftime("%Y/%m/%d"),thisDatetime.strftime("%H:%M:%S"))
536 str_datetime = '%s %s'%(thisDatetime.strftime("%Y/%m/%d"),thisDatetime.strftime("%H:%M:%S"))
536
537
537 axes = self.axesList[i*self.__nsubplots]
538 axes = self.axesList[i*self.__nsubplots]
538 nevents = axes.x_buffer.shape[0] + x.shape[0]
539 nevents = axes.x_buffer.shape[0] + x.shape[0]
539 title = "Meteor Detection Sky Map\n %s - %s \n Number of events: %5.0f\n" %(self.firstdate,str_datetime,nevents)
540 title = "Meteor Detection Sky Map\n %s - %s \n Number of events: %5.0f\n" %(self.firstdate,str_datetime,nevents)
540 axes.polar(x, y,
541 axes.polar(x, y,
541 title=title, xlabel=xlabel, ylabel=ylabel,
542 title=title, xlabel=xlabel, ylabel=ylabel,
542 ticksize=9, cblabel='')
543 ticksize=9, cblabel='')
543
544
544 self.draw()
545 self.draw()
545
546
546 self.save(figpath=figpath,
547 self.save(figpath=figpath,
547 figfile=figfile,
548 figfile=figfile,
548 save=save,
549 save=save,
549 ftp=ftp,
550 ftp=ftp,
550 wr_period=wr_period,
551 wr_period=wr_period,
551 thisDatetime=thisDatetime,
552 thisDatetime=thisDatetime,
552 update_figfile=update_figfile)
553 update_figfile=update_figfile)
553
554
554 if dataOut.ltctime >= self.xmax:
555 if dataOut.ltctime >= self.xmax:
555 self.isConfigmagwr = wr_period
556 self.isConfigmagwr = wr_period
556 self.isConfig = False
557 self.isConfig = False
557 update_figfile = True
558 update_figfile = True
558 axes.__firsttime = True
559 axes.__firsttime = True
559 self.xmin += self.timerange
560 self.xmin += self.timerange
560 self.xmax += self.timerange
561 self.xmax += self.timerange
561
562
562
563
563
564
564
565
565 class WindProfilerPlot(Figure):
566 class WindProfilerPlot(Figure):
566
567
567 __isConfig = None
568 __isConfig = None
568 __nsubplots = None
569 __nsubplots = None
569
570
570 WIDTHPROF = None
571 WIDTHPROF = None
571 HEIGHTPROF = None
572 HEIGHTPROF = None
572 PREFIX = 'wind'
573 PREFIX = 'wind'
573
574
574 def __init__(self, **kwargs):
575 def __init__(self, **kwargs):
575 Figure.__init__(self, **kwargs)
576 Figure.__init__(self, **kwargs)
576 self.timerange = None
577 self.timerange = None
577 self.isConfig = False
578 self.isConfig = False
578 self.__nsubplots = 1
579 self.__nsubplots = 1
579
580
580 self.WIDTH = 800
581 self.WIDTH = 800
581 self.HEIGHT = 300
582 self.HEIGHT = 300
582 self.WIDTHPROF = 120
583 self.WIDTHPROF = 120
583 self.HEIGHTPROF = 0
584 self.HEIGHTPROF = 0
584 self.counter_imagwr = 0
585 self.counter_imagwr = 0
585
586
586 self.PLOT_CODE = WIND_CODE
587 self.PLOT_CODE = WIND_CODE
587
588
588 self.FTP_WEI = None
589 self.FTP_WEI = None
589 self.EXP_CODE = None
590 self.EXP_CODE = None
590 self.SUB_EXP_CODE = None
591 self.SUB_EXP_CODE = None
591 self.PLOT_POS = None
592 self.PLOT_POS = None
592 self.tmin = None
593 self.tmin = None
593 self.tmax = None
594 self.tmax = None
594
595
595 self.xmin = None
596 self.xmin = None
596 self.xmax = None
597 self.xmax = None
597
598
598 self.figfile = None
599 self.figfile = None
599
600
600 def getSubplots(self):
601 def getSubplots(self):
601
602
602 ncol = 1
603 ncol = 1
603 nrow = self.nplots
604 nrow = self.nplots
604
605
605 return nrow, ncol
606 return nrow, ncol
606
607
607 def setup(self, id, nplots, wintitle, showprofile=True, show=True):
608 def setup(self, id, nplots, wintitle, showprofile=True, show=True):
608
609
609 self.__showprofile = showprofile
610 self.__showprofile = showprofile
610 self.nplots = nplots
611 self.nplots = nplots
611
612
612 ncolspan = 1
613 ncolspan = 1
613 colspan = 1
614 colspan = 1
614
615
615 self.createFigure(id = id,
616 self.createFigure(id = id,
616 wintitle = wintitle,
617 wintitle = wintitle,
617 widthplot = self.WIDTH + self.WIDTHPROF,
618 widthplot = self.WIDTH + self.WIDTHPROF,
618 heightplot = self.HEIGHT + self.HEIGHTPROF,
619 heightplot = self.HEIGHT + self.HEIGHTPROF,
619 show=show)
620 show=show)
620
621
621 nrow, ncol = self.getSubplots()
622 nrow, ncol = self.getSubplots()
622
623
623 counter = 0
624 counter = 0
624 for y in range(nrow):
625 for y in range(nrow):
625 if counter >= self.nplots:
626 if counter >= self.nplots:
626 break
627 break
627
628
628 self.addAxes(nrow, ncol*ncolspan, y, 0, colspan, 1)
629 self.addAxes(nrow, ncol*ncolspan, y, 0, colspan, 1)
629 counter += 1
630 counter += 1
630
631
631 def run(self, dataOut, id, wintitle="", channelList=None, showprofile='False',
632 def run(self, dataOut, id, wintitle="", channelList=None, showprofile='False',
632 xmin=None, xmax=None, ymin=None, ymax=None, zmin=None, zmax=None,
633 xmin=None, xmax=None, ymin=None, ymax=None, zmin=None, zmax=None,
633 zmax_ver = None, zmin_ver = None, SNRmin = None, SNRmax = None,
634 zmax_ver = None, zmin_ver = None, SNRmin = None, SNRmax = None,
634 timerange=None, SNRthresh = None,
635 timerange=None, SNRthresh = None,
635 save=False, figpath='./', lastone=0,figfile=None, ftp=False, wr_period=1, show=True,
636 save=False, figpath='./', lastone=0,figfile=None, ftp=False, wr_period=1, show=True,
636 server=None, folder=None, username=None, password=None,
637 server=None, folder=None, username=None, password=None,
637 ftp_wei=0, exp_code=0, sub_exp_code=0, plot_pos=0):
638 ftp_wei=0, exp_code=0, sub_exp_code=0, plot_pos=0):
638 """
639 """
639
640
640 Input:
641 Input:
641 dataOut :
642 dataOut :
642 id :
643 id :
643 wintitle :
644 wintitle :
644 channelList :
645 channelList :
645 showProfile :
646 showProfile :
646 xmin : None,
647 xmin : None,
647 xmax : None,
648 xmax : None,
648 ymin : None,
649 ymin : None,
649 ymax : None,
650 ymax : None,
650 zmin : None,
651 zmin : None,
651 zmax : None
652 zmax : None
652 """
653 """
653
654
654 # if timerange is not None:
655 # if timerange is not None:
655 # self.timerange = timerange
656 # self.timerange = timerange
656 #
657 #
657 # tmin = None
658 # tmin = None
658 # tmax = None
659 # tmax = None
659
660
660 x = dataOut.getTimeRange1(dataOut.paramInterval)
661 x = dataOut.getTimeRange1(dataOut.paramInterval)
661 y = dataOut.heightList
662 y = dataOut.heightList
662 z = dataOut.data_output.copy()
663 z = dataOut.data_output.copy()
663 nplots = z.shape[0] #Number of wind dimensions estimated
664 nplots = z.shape[0] #Number of wind dimensions estimated
664 nplotsw = nplots
665 nplotsw = nplots
665
666
666
667
667 #If there is a SNR function defined
668 #If there is a SNR function defined
668 if dataOut.data_SNR is not None:
669 if dataOut.data_SNR is not None:
669 nplots += 1
670 nplots += 1
670 SNR = dataOut.data_SNR[0]
671 SNR = dataOut.data_SNR[0]
671 SNRavg = SNR#numpy.average(SNR, axis=0)
672 SNRavg = SNR#numpy.average(SNR, axis=0)
672
673
673 SNRdB = 10*numpy.log10(SNR)
674 SNRdB = 10*numpy.log10(SNR)
674 SNRavgdB = 10*numpy.log10(SNRavg)
675 SNRavgdB = 10*numpy.log10(SNRavg)
675
676
676 if SNRthresh == None:
677 if SNRthresh == None:
677 SNRthresh = -5.0
678 SNRthresh = -5.0
678 ind = numpy.where(SNRavg < 10**(SNRthresh/10))[0]
679 ind = numpy.where(SNRavg < 10**(SNRthresh/10))[0]
679
680
680 for i in range(nplotsw):
681 for i in range(nplotsw):
681 z[i,ind] = numpy.nan
682 z[i,ind] = numpy.nan
682
683
683 thisDatetime = datetime.datetime.utcfromtimestamp(dataOut.ltctime)
684 thisDatetime = datetime.datetime.utcfromtimestamp(dataOut.ltctime)
684 #thisDatetime = datetime.datetime.now()
685 #thisDatetime = datetime.datetime.now()
685 title = wintitle + "Wind"
686 title = wintitle + "Wind"
686 xlabel = ""
687 xlabel = ""
687 ylabel = "Height (km)"
688 ylabel = "Height (km)"
688 update_figfile = False
689 update_figfile = False
689
690
690 if not self.isConfig:
691 if not self.isConfig:
691
692
692 self.setup(id=id,
693 self.setup(id=id,
693 nplots=nplots,
694 nplots=nplots,
694 wintitle=wintitle,
695 wintitle=wintitle,
695 showprofile=showprofile,
696 showprofile=showprofile,
696 show=show)
697 show=show)
697
698
698 if timerange is not None:
699 if timerange is not None:
699 self.timerange = timerange
700 self.timerange = timerange
700
701
701 self.xmin, self.xmax = self.getTimeLim(x, xmin, xmax, timerange)
702 self.xmin, self.xmax = self.getTimeLim(x, xmin, xmax, timerange)
702
703
703 if ymin == None: ymin = numpy.nanmin(y)
704 if ymin == None: ymin = numpy.nanmin(y)
704 if ymax == None: ymax = numpy.nanmax(y)
705 if ymax == None: ymax = numpy.nanmax(y)
705
706
706 if zmax == None: zmax = numpy.nanmax(abs(z[range(2),:]))
707 if zmax == None: zmax = numpy.nanmax(abs(z[range(2),:]))
707 #if numpy.isnan(zmax): zmax = 50
708 #if numpy.isnan(zmax): zmax = 50
708 if zmin == None: zmin = -zmax
709 if zmin == None: zmin = -zmax
709
710
710 if nplotsw == 3:
711 if nplotsw == 3:
711 if zmax_ver == None: zmax_ver = numpy.nanmax(abs(z[2,:]))
712 if zmax_ver == None: zmax_ver = numpy.nanmax(abs(z[2,:]))
712 if zmin_ver == None: zmin_ver = -zmax_ver
713 if zmin_ver == None: zmin_ver = -zmax_ver
713
714
714 if dataOut.data_SNR is not None:
715 if dataOut.data_SNR is not None:
715 if SNRmin == None: SNRmin = numpy.nanmin(SNRavgdB)
716 if SNRmin == None: SNRmin = numpy.nanmin(SNRavgdB)
716 if SNRmax == None: SNRmax = numpy.nanmax(SNRavgdB)
717 if SNRmax == None: SNRmax = numpy.nanmax(SNRavgdB)
717
718
718
719
719 self.FTP_WEI = ftp_wei
720 self.FTP_WEI = ftp_wei
720 self.EXP_CODE = exp_code
721 self.EXP_CODE = exp_code
721 self.SUB_EXP_CODE = sub_exp_code
722 self.SUB_EXP_CODE = sub_exp_code
722 self.PLOT_POS = plot_pos
723 self.PLOT_POS = plot_pos
723
724
724 self.name = thisDatetime.strftime("%Y%m%d_%H%M%S")
725 self.name = thisDatetime.strftime("%Y%m%d_%H%M%S")
725 self.isConfig = True
726 self.isConfig = True
726 self.figfile = figfile
727 self.figfile = figfile
727 update_figfile = True
728 update_figfile = True
728
729
729 self.setWinTitle(title)
730 self.setWinTitle(title)
730
731
731 if ((self.xmax - x[1]) < (x[1]-x[0])):
732 if ((self.xmax - x[1]) < (x[1]-x[0])):
732 x[1] = self.xmax
733 x[1] = self.xmax
733
734
734 strWind = ['Zonal', 'Meridional', 'Vertical']
735 strWind = ['Zonal', 'Meridional', 'Vertical']
735 strCb = ['Velocity (m/s)','Velocity (m/s)','Velocity (cm/s)']
736 strCb = ['Velocity (m/s)','Velocity (m/s)','Velocity (cm/s)']
736 zmaxVector = [zmax, zmax, zmax_ver]
737 zmaxVector = [zmax, zmax, zmax_ver]
737 zminVector = [zmin, zmin, zmin_ver]
738 zminVector = [zmin, zmin, zmin_ver]
738 windFactor = [1,1,100]
739 windFactor = [1,1,100]
739
740
740 for i in range(nplotsw):
741 for i in range(nplotsw):
741
742
742 title = "%s Wind: %s" %(strWind[i], thisDatetime.strftime("%Y/%m/%d %H:%M:%S"))
743 title = "%s Wind: %s" %(strWind[i], thisDatetime.strftime("%Y/%m/%d %H:%M:%S"))
743 axes = self.axesList[i*self.__nsubplots]
744 axes = self.axesList[i*self.__nsubplots]
744
745
745 z1 = z[i,:].reshape((1,-1))*windFactor[i]
746 z1 = z[i,:].reshape((1,-1))*windFactor[i]
746
747
747 print 'x', x
748 print 'x', x
748 print datetime.datetime.utcfromtimestamp(x[0])
749 print datetime.datetime.utcfromtimestamp(x[0])
749 print datetime.datetime.utcfromtimestamp(x[1])
750 print datetime.datetime.utcfromtimestamp(x[1])
750
751
751 #z1=numpy.ma.masked_where(z1==0.,z1)
752 #z1=numpy.ma.masked_where(z1==0.,z1)
752
753
753 axes.pcolorbuffer(x, y, z1,
754 axes.pcolorbuffer(x, y, z1,
754 xmin=self.xmin, xmax=self.xmax, ymin=ymin, ymax=ymax, zmin=zminVector[i], zmax=zmaxVector[i],
755 xmin=self.xmin, xmax=self.xmax, ymin=ymin, ymax=ymax, zmin=zminVector[i], zmax=zmaxVector[i],
755 xlabel=xlabel, ylabel=ylabel, title=title, rti=True, XAxisAsTime=True,
756 xlabel=xlabel, ylabel=ylabel, title=title, rti=True, XAxisAsTime=True,
756 ticksize=9, cblabel=strCb[i], cbsize="1%", colormap="seismic" )
757 ticksize=9, cblabel=strCb[i], cbsize="1%", colormap="seismic" )
757
758
758 if dataOut.data_SNR is not None:
759 if dataOut.data_SNR is not None:
759 i += 1
760 i += 1
760 title = "Signal Noise Ratio (SNR): %s" %(thisDatetime.strftime("%Y/%m/%d %H:%M:%S"))
761 title = "Signal Noise Ratio (SNR): %s" %(thisDatetime.strftime("%Y/%m/%d %H:%M:%S"))
761 axes = self.axesList[i*self.__nsubplots]
762 axes = self.axesList[i*self.__nsubplots]
762 SNRavgdB = SNRavgdB.reshape((1,-1))
763 SNRavgdB = SNRavgdB.reshape((1,-1))
763 axes.pcolorbuffer(x, y, SNRavgdB,
764 axes.pcolorbuffer(x, y, SNRavgdB,
764 xmin=self.xmin, xmax=self.xmax, ymin=ymin, ymax=ymax, zmin=SNRmin, zmax=SNRmax,
765 xmin=self.xmin, xmax=self.xmax, ymin=ymin, ymax=ymax, zmin=SNRmin, zmax=SNRmax,
765 xlabel=xlabel, ylabel=ylabel, title=title, rti=True, XAxisAsTime=True,
766 xlabel=xlabel, ylabel=ylabel, title=title, rti=True, XAxisAsTime=True,
766 ticksize=9, cblabel='', cbsize="1%", colormap="jet")
767 ticksize=9, cblabel='', cbsize="1%", colormap="jet")
767
768
768 self.draw()
769 self.draw()
769
770
770 self.save(figpath=figpath,
771 self.save(figpath=figpath,
771 figfile=figfile,
772 figfile=figfile,
772 save=save,
773 save=save,
773 ftp=ftp,
774 ftp=ftp,
774 wr_period=wr_period,
775 wr_period=wr_period,
775 thisDatetime=thisDatetime,
776 thisDatetime=thisDatetime,
776 update_figfile=update_figfile)
777 update_figfile=update_figfile)
777
778
778 if dataOut.ltctime + dataOut.paramInterval >= self.xmax:
779 if dataOut.ltctime + dataOut.paramInterval >= self.xmax:
779 self.counter_imagwr = wr_period
780 self.counter_imagwr = wr_period
780 self.isConfig = False
781 self.isConfig = False
781 update_figfile = True
782 update_figfile = True
782
783
783
784
784 class ParametersPlot(Figure):
785 class ParametersPlot(Figure):
785
786
786 __isConfig = None
787 __isConfig = None
787 __nsubplots = None
788 __nsubplots = None
788
789
789 WIDTHPROF = None
790 WIDTHPROF = None
790 HEIGHTPROF = None
791 HEIGHTPROF = None
791 PREFIX = 'param'
792 PREFIX = 'param'
792
793
793 nplots = None
794 nplots = None
794 nchan = None
795 nchan = None
795
796
796 def __init__(self, **kwargs):
797 def __init__(self, **kwargs):
797 Figure.__init__(self, **kwargs)
798 Figure.__init__(self, **kwargs)
798 self.timerange = None
799 self.timerange = None
799 self.isConfig = False
800 self.isConfig = False
800 self.__nsubplots = 1
801 self.__nsubplots = 1
801
802
802 self.WIDTH = 800
803 self.WIDTH = 800
803 self.HEIGHT = 180
804 self.HEIGHT = 180
804 self.WIDTHPROF = 120
805 self.WIDTHPROF = 120
805 self.HEIGHTPROF = 0
806 self.HEIGHTPROF = 0
806 self.counter_imagwr = 0
807 self.counter_imagwr = 0
807
808
808 self.PLOT_CODE = RTI_CODE
809 self.PLOT_CODE = RTI_CODE
809
810
810 self.FTP_WEI = None
811 self.FTP_WEI = None
811 self.EXP_CODE = None
812 self.EXP_CODE = None
812 self.SUB_EXP_CODE = None
813 self.SUB_EXP_CODE = None
813 self.PLOT_POS = None
814 self.PLOT_POS = None
814 self.tmin = None
815 self.tmin = None
815 self.tmax = None
816 self.tmax = None
816
817
817 self.xmin = None
818 self.xmin = None
818 self.xmax = None
819 self.xmax = None
819
820
820 self.figfile = None
821 self.figfile = None
821
822
822 def getSubplots(self):
823 def getSubplots(self):
823
824
824 ncol = 1
825 ncol = 1
825 nrow = self.nplots
826 nrow = self.nplots
826
827
827 return nrow, ncol
828 return nrow, ncol
828
829
829 def setup(self, id, nplots, wintitle, show=True):
830 def setup(self, id, nplots, wintitle, show=True):
830
831
831 self.nplots = nplots
832 self.nplots = nplots
832
833
833 ncolspan = 1
834 ncolspan = 1
834 colspan = 1
835 colspan = 1
835
836
836 self.createFigure(id = id,
837 self.createFigure(id = id,
837 wintitle = wintitle,
838 wintitle = wintitle,
838 widthplot = self.WIDTH + self.WIDTHPROF,
839 widthplot = self.WIDTH + self.WIDTHPROF,
839 heightplot = self.HEIGHT + self.HEIGHTPROF,
840 heightplot = self.HEIGHT + self.HEIGHTPROF,
840 show=show)
841 show=show)
841
842
842 nrow, ncol = self.getSubplots()
843 nrow, ncol = self.getSubplots()
843
844
844 counter = 0
845 counter = 0
845 for y in range(nrow):
846 for y in range(nrow):
846 for x in range(ncol):
847 for x in range(ncol):
847
848
848 if counter >= self.nplots:
849 if counter >= self.nplots:
849 break
850 break
850
851
851 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan, colspan, 1)
852 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan, colspan, 1)
852
853
853 counter += 1
854 counter += 1
854
855
855 def run(self, dataOut, id, wintitle="", channelList=None, paramIndex = 0, colormap="jet",
856 def run(self, dataOut, id, wintitle="", channelList=None, paramIndex = 0, colormap="jet",
856 xmin=None, xmax=None, ymin=None, ymax=None, zmin=None, zmax=None, timerange=None,
857 xmin=None, xmax=None, ymin=None, ymax=None, zmin=None, zmax=None, timerange=None,
857 showSNR=False, SNRthresh = -numpy.inf, SNRmin=None, SNRmax=None,
858 showSNR=False, SNRthresh = -numpy.inf, SNRmin=None, SNRmax=None,
858 save=False, figpath='./', lastone=0,figfile=None, ftp=False, wr_period=1, show=True,
859 save=False, figpath='./', lastone=0,figfile=None, ftp=False, wr_period=1, show=True,
859 server=None, folder=None, username=None, password=None,
860 server=None, folder=None, username=None, password=None,
860 ftp_wei=0, exp_code=0, sub_exp_code=0, plot_pos=0, HEIGHT=None):
861 ftp_wei=0, exp_code=0, sub_exp_code=0, plot_pos=0, HEIGHT=None):
861 """
862 """
862
863
863 Input:
864 Input:
864 dataOut :
865 dataOut :
865 id :
866 id :
866 wintitle :
867 wintitle :
867 channelList :
868 channelList :
868 showProfile :
869 showProfile :
869 xmin : None,
870 xmin : None,
870 xmax : None,
871 xmax : None,
871 ymin : None,
872 ymin : None,
872 ymax : None,
873 ymax : None,
873 zmin : None,
874 zmin : None,
874 zmax : None
875 zmax : None
875 """
876 """
876
877
877 if HEIGHT is not None:
878 if HEIGHT is not None:
878 self.HEIGHT = HEIGHT
879 self.HEIGHT = HEIGHT
879
880
880
881
881 if not isTimeInHourRange(dataOut.datatime, xmin, xmax):
882 if not isTimeInHourRange(dataOut.datatime, xmin, xmax):
882 return
883 return
883
884
884 if channelList == None:
885 if channelList == None:
885 channelIndexList = range(dataOut.data_param.shape[0])
886 channelIndexList = range(dataOut.data_param.shape[0])
886 else:
887 else:
887 channelIndexList = []
888 channelIndexList = []
888 for channel in channelList:
889 for channel in channelList:
889 if channel not in dataOut.channelList:
890 if channel not in dataOut.channelList:
890 raise ValueError, "Channel %d is not in dataOut.channelList"
891 raise ValueError, "Channel %d is not in dataOut.channelList"
891 channelIndexList.append(dataOut.channelList.index(channel))
892 channelIndexList.append(dataOut.channelList.index(channel))
892
893
893 x = dataOut.getTimeRange1(dataOut.paramInterval)
894 x = dataOut.getTimeRange1(dataOut.paramInterval)
894 y = dataOut.getHeiRange()
895 y = dataOut.getHeiRange()
895
896
896 if dataOut.data_param.ndim == 3:
897 if dataOut.data_param.ndim == 3:
897 z = dataOut.data_param[channelIndexList,paramIndex,:]
898 z = dataOut.data_param[channelIndexList,paramIndex,:]
898 else:
899 else:
899 z = dataOut.data_param[channelIndexList,:]
900 z = dataOut.data_param[channelIndexList,:]
900
901
901 if showSNR:
902 if showSNR:
902 #SNR data
903 #SNR data
903 SNRarray = dataOut.data_SNR[channelIndexList,:]
904 SNRarray = dataOut.data_SNR[channelIndexList,:]
904 SNRdB = 10*numpy.log10(SNRarray)
905 SNRdB = 10*numpy.log10(SNRarray)
905 ind = numpy.where(SNRdB < SNRthresh)
906 ind = numpy.where(SNRdB < SNRthresh)
906 z[ind] = numpy.nan
907 z[ind] = numpy.nan
907
908
908 thisDatetime = dataOut.datatime
909 thisDatetime = dataOut.datatime
909 # thisDatetime = datetime.datetime.utcfromtimestamp(dataOut.getTimeRange()[0])
910 # thisDatetime = datetime.datetime.utcfromtimestamp(dataOut.getTimeRange()[0])
910 title = wintitle + " Parameters Plot" #: %s" %(thisDatetime.strftime("%d-%b-%Y"))
911 title = wintitle + " Parameters Plot" #: %s" %(thisDatetime.strftime("%d-%b-%Y"))
911 xlabel = ""
912 xlabel = ""
912 ylabel = "Range (Km)"
913 ylabel = "Range (Km)"
913
914
914 update_figfile = False
915 update_figfile = False
915
916
916 if not self.isConfig:
917 if not self.isConfig:
917
918
918 nchan = len(channelIndexList)
919 nchan = len(channelIndexList)
919 self.nchan = nchan
920 self.nchan = nchan
920 self.plotFact = 1
921 self.plotFact = 1
921 nplots = nchan
922 nplots = nchan
922
923
923 if showSNR:
924 if showSNR:
924 nplots = nchan*2
925 nplots = nchan*2
925 self.plotFact = 2
926 self.plotFact = 2
926 if SNRmin == None: SNRmin = numpy.nanmin(SNRdB)
927 if SNRmin == None: SNRmin = numpy.nanmin(SNRdB)
927 if SNRmax == None: SNRmax = numpy.nanmax(SNRdB)
928 if SNRmax == None: SNRmax = numpy.nanmax(SNRdB)
928
929
929 self.setup(id=id,
930 self.setup(id=id,
930 nplots=nplots,
931 nplots=nplots,
931 wintitle=wintitle,
932 wintitle=wintitle,
932 show=show)
933 show=show)
933
934
934 if timerange != None:
935 if timerange != None:
935 self.timerange = timerange
936 self.timerange = timerange
936
937
937 self.xmin, self.xmax = self.getTimeLim(x, xmin, xmax, timerange)
938 self.xmin, self.xmax = self.getTimeLim(x, xmin, xmax, timerange)
938
939
939 if ymin == None: ymin = numpy.nanmin(y)
940 if ymin == None: ymin = numpy.nanmin(y)
940 if ymax == None: ymax = numpy.nanmax(y)
941 if ymax == None: ymax = numpy.nanmax(y)
941 if zmin == None: zmin = numpy.nanmin(z)
942 if zmin == None: zmin = numpy.nanmin(z)
942 if zmax == None: zmax = numpy.nanmax(z)
943 if zmax == None: zmax = numpy.nanmax(z)
943
944
944 self.FTP_WEI = ftp_wei
945 self.FTP_WEI = ftp_wei
945 self.EXP_CODE = exp_code
946 self.EXP_CODE = exp_code
946 self.SUB_EXP_CODE = sub_exp_code
947 self.SUB_EXP_CODE = sub_exp_code
947 self.PLOT_POS = plot_pos
948 self.PLOT_POS = plot_pos
948
949
949 self.name = thisDatetime.strftime("%Y%m%d_%H%M%S")
950 self.name = thisDatetime.strftime("%Y%m%d_%H%M%S")
950 self.isConfig = True
951 self.isConfig = True
951 self.figfile = figfile
952 self.figfile = figfile
952 update_figfile = True
953 update_figfile = True
953
954
954 self.setWinTitle(title)
955 self.setWinTitle(title)
955
956
956 for i in range(self.nchan):
957 for i in range(self.nchan):
957 index = channelIndexList[i]
958 index = channelIndexList[i]
958 title = "Channel %d: %s" %(dataOut.channelList[index], thisDatetime.strftime("%Y/%m/%d %H:%M:%S"))
959 title = "Channel %d: %s" %(dataOut.channelList[index], thisDatetime.strftime("%Y/%m/%d %H:%M:%S"))
959 axes = self.axesList[i*self.plotFact]
960 axes = self.axesList[i*self.plotFact]
960 z1 = z[i,:].reshape((1,-1))
961 z1 = z[i,:].reshape((1,-1))
961 axes.pcolorbuffer(x, y, z1,
962 axes.pcolorbuffer(x, y, z1,
962 xmin=self.xmin, xmax=self.xmax, ymin=ymin, ymax=ymax, zmin=zmin, zmax=zmax,
963 xmin=self.xmin, xmax=self.xmax, ymin=ymin, ymax=ymax, zmin=zmin, zmax=zmax,
963 xlabel=xlabel, ylabel=ylabel, title=title, rti=True, XAxisAsTime=True,
964 xlabel=xlabel, ylabel=ylabel, title=title, rti=True, XAxisAsTime=True,
964 ticksize=9, cblabel='', cbsize="1%",colormap=colormap)
965 ticksize=9, cblabel='', cbsize="1%",colormap=colormap)
965
966
966 if showSNR:
967 if showSNR:
967 title = "Channel %d SNR: %s" %(dataOut.channelList[index], thisDatetime.strftime("%Y/%m/%d %H:%M:%S"))
968 title = "Channel %d SNR: %s" %(dataOut.channelList[index], thisDatetime.strftime("%Y/%m/%d %H:%M:%S"))
968 axes = self.axesList[i*self.plotFact + 1]
969 axes = self.axesList[i*self.plotFact + 1]
969 SNRdB1 = SNRdB[i,:].reshape((1,-1))
970 SNRdB1 = SNRdB[i,:].reshape((1,-1))
970 axes.pcolorbuffer(x, y, SNRdB1,
971 axes.pcolorbuffer(x, y, SNRdB1,
971 xmin=self.xmin, xmax=self.xmax, ymin=ymin, ymax=ymax, zmin=SNRmin, zmax=SNRmax,
972 xmin=self.xmin, xmax=self.xmax, ymin=ymin, ymax=ymax, zmin=SNRmin, zmax=SNRmax,
972 xlabel=xlabel, ylabel=ylabel, title=title, rti=True, XAxisAsTime=True,
973 xlabel=xlabel, ylabel=ylabel, title=title, rti=True, XAxisAsTime=True,
973 ticksize=9, cblabel='', cbsize="1%",colormap='jet')
974 ticksize=9, cblabel='', cbsize="1%",colormap='jet')
974
975
975
976
976 self.draw()
977 self.draw()
977
978
978 if dataOut.ltctime >= self.xmax:
979 if dataOut.ltctime >= self.xmax:
979 self.counter_imagwr = wr_period
980 self.counter_imagwr = wr_period
980 self.isConfig = False
981 self.isConfig = False
981 update_figfile = True
982 update_figfile = True
982
983
983 self.save(figpath=figpath,
984 self.save(figpath=figpath,
984 figfile=figfile,
985 figfile=figfile,
985 save=save,
986 save=save,
986 ftp=ftp,
987 ftp=ftp,
987 wr_period=wr_period,
988 wr_period=wr_period,
988 thisDatetime=thisDatetime,
989 thisDatetime=thisDatetime,
989 update_figfile=update_figfile)
990 update_figfile=update_figfile)
990
991
991
992
992
993
993 class Parameters1Plot(Figure):
994 class Parameters1Plot(Figure):
994
995
995 __isConfig = None
996 __isConfig = None
996 __nsubplots = None
997 __nsubplots = None
997
998
998 WIDTHPROF = None
999 WIDTHPROF = None
999 HEIGHTPROF = None
1000 HEIGHTPROF = None
1000 PREFIX = 'prm'
1001 PREFIX = 'prm'
1001
1002
1002 def __init__(self, **kwargs):
1003 def __init__(self, **kwargs):
1003 Figure.__init__(self, **kwargs)
1004 Figure.__init__(self, **kwargs)
1004 self.timerange = 2*60*60
1005 self.timerange = 2*60*60
1005 self.isConfig = False
1006 self.isConfig = False
1006 self.__nsubplots = 1
1007 self.__nsubplots = 1
1007
1008
1008 self.WIDTH = 800
1009 self.WIDTH = 800
1009 self.HEIGHT = 180
1010 self.HEIGHT = 180
1010 self.WIDTHPROF = 120
1011 self.WIDTHPROF = 120
1011 self.HEIGHTPROF = 0
1012 self.HEIGHTPROF = 0
1012 self.counter_imagwr = 0
1013 self.counter_imagwr = 0
1013
1014
1014 self.PLOT_CODE = PARMS_CODE
1015 self.PLOT_CODE = PARMS_CODE
1015
1016
1016 self.FTP_WEI = None
1017 self.FTP_WEI = None
1017 self.EXP_CODE = None
1018 self.EXP_CODE = None
1018 self.SUB_EXP_CODE = None
1019 self.SUB_EXP_CODE = None
1019 self.PLOT_POS = None
1020 self.PLOT_POS = None
1020 self.tmin = None
1021 self.tmin = None
1021 self.tmax = None
1022 self.tmax = None
1022
1023
1023 self.xmin = None
1024 self.xmin = None
1024 self.xmax = None
1025 self.xmax = None
1025
1026
1026 self.figfile = None
1027 self.figfile = None
1027
1028
1028 def getSubplots(self):
1029 def getSubplots(self):
1029
1030
1030 ncol = 1
1031 ncol = 1
1031 nrow = self.nplots
1032 nrow = self.nplots
1032
1033
1033 return nrow, ncol
1034 return nrow, ncol
1034
1035
1035 def setup(self, id, nplots, wintitle, showprofile=True, show=True):
1036 def setup(self, id, nplots, wintitle, showprofile=True, show=True):
1036
1037
1037 self.__showprofile = showprofile
1038 self.__showprofile = showprofile
1038 self.nplots = nplots
1039 self.nplots = nplots
1039
1040
1040 ncolspan = 1
1041 ncolspan = 1
1041 colspan = 1
1042 colspan = 1
1042
1043
1043 self.createFigure(id = id,
1044 self.createFigure(id = id,
1044 wintitle = wintitle,
1045 wintitle = wintitle,
1045 widthplot = self.WIDTH + self.WIDTHPROF,
1046 widthplot = self.WIDTH + self.WIDTHPROF,
1046 heightplot = self.HEIGHT + self.HEIGHTPROF,
1047 heightplot = self.HEIGHT + self.HEIGHTPROF,
1047 show=show)
1048 show=show)
1048
1049
1049 nrow, ncol = self.getSubplots()
1050 nrow, ncol = self.getSubplots()
1050
1051
1051 counter = 0
1052 counter = 0
1052 for y in range(nrow):
1053 for y in range(nrow):
1053 for x in range(ncol):
1054 for x in range(ncol):
1054
1055
1055 if counter >= self.nplots:
1056 if counter >= self.nplots:
1056 break
1057 break
1057
1058
1058 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan, colspan, 1)
1059 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan, colspan, 1)
1059
1060
1060 if showprofile:
1061 if showprofile:
1061 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan+colspan, 1, 1)
1062 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan+colspan, 1, 1)
1062
1063
1063 counter += 1
1064 counter += 1
1064
1065
1065 def run(self, dataOut, id, wintitle="", channelList=None, showprofile=False,
1066 def run(self, dataOut, id, wintitle="", channelList=None, showprofile=False,
1066 xmin=None, xmax=None, ymin=None, ymax=None, zmin=None, zmax=None,timerange=None,
1067 xmin=None, xmax=None, ymin=None, ymax=None, zmin=None, zmax=None,timerange=None,
1067 parameterIndex = None, onlyPositive = False,
1068 parameterIndex = None, onlyPositive = False,
1068 SNRthresh = -numpy.inf, SNR = True, SNRmin = None, SNRmax = None, onlySNR = False,
1069 SNRthresh = -numpy.inf, SNR = True, SNRmin = None, SNRmax = None, onlySNR = False,
1069 DOP = True,
1070 DOP = True,
1070 zlabel = "", parameterName = "", parameterObject = "data_param",
1071 zlabel = "", parameterName = "", parameterObject = "data_param",
1071 save=False, figpath='./', lastone=0,figfile=None, ftp=False, wr_period=1, show=True,
1072 save=False, figpath='./', lastone=0,figfile=None, ftp=False, wr_period=1, show=True,
1072 server=None, folder=None, username=None, password=None,
1073 server=None, folder=None, username=None, password=None,
1073 ftp_wei=0, exp_code=0, sub_exp_code=0, plot_pos=0):
1074 ftp_wei=0, exp_code=0, sub_exp_code=0, plot_pos=0):
1074 #print inspect.getargspec(self.run).args
1075 #print inspect.getargspec(self.run).args
1075 """
1076 """
1076
1077
1077 Input:
1078 Input:
1078 dataOut :
1079 dataOut :
1079 id :
1080 id :
1080 wintitle :
1081 wintitle :
1081 channelList :
1082 channelList :
1082 showProfile :
1083 showProfile :
1083 xmin : None,
1084 xmin : None,
1084 xmax : None,
1085 xmax : None,
1085 ymin : None,
1086 ymin : None,
1086 ymax : None,
1087 ymax : None,
1087 zmin : None,
1088 zmin : None,
1088 zmax : None
1089 zmax : None
1089 """
1090 """
1090
1091
1091 data_param = getattr(dataOut, parameterObject)
1092 data_param = getattr(dataOut, parameterObject)
1092
1093
1093 if channelList == None:
1094 if channelList == None:
1094 channelIndexList = numpy.arange(data_param.shape[0])
1095 channelIndexList = numpy.arange(data_param.shape[0])
1095 else:
1096 else:
1096 channelIndexList = numpy.array(channelList)
1097 channelIndexList = numpy.array(channelList)
1097
1098
1098 nchan = len(channelIndexList) #Number of channels being plotted
1099 nchan = len(channelIndexList) #Number of channels being plotted
1099
1100
1100 if nchan < 1:
1101 if nchan < 1:
1101 return
1102 return
1102
1103
1103 nGraphsByChannel = 0
1104 nGraphsByChannel = 0
1104
1105
1105 if SNR:
1106 if SNR:
1106 nGraphsByChannel += 1
1107 nGraphsByChannel += 1
1107 if DOP:
1108 if DOP:
1108 nGraphsByChannel += 1
1109 nGraphsByChannel += 1
1109
1110
1110 if nGraphsByChannel < 1:
1111 if nGraphsByChannel < 1:
1111 return
1112 return
1112
1113
1113 nplots = nGraphsByChannel*nchan
1114 nplots = nGraphsByChannel*nchan
1114
1115
1115 if timerange is not None:
1116 if timerange is not None:
1116 self.timerange = timerange
1117 self.timerange = timerange
1117
1118
1118 #tmin = None
1119 #tmin = None
1119 #tmax = None
1120 #tmax = None
1120 if parameterIndex == None:
1121 if parameterIndex == None:
1121 parameterIndex = 1
1122 parameterIndex = 1
1122
1123
1123 x = dataOut.getTimeRange1(dataOut.paramInterval)
1124 x = dataOut.getTimeRange1(dataOut.paramInterval)
1124 y = dataOut.heightList
1125 y = dataOut.heightList
1125 z = data_param[channelIndexList,parameterIndex,:].copy()
1126 z = data_param[channelIndexList,parameterIndex,:].copy()
1126
1127
1127 zRange = dataOut.abscissaList
1128 zRange = dataOut.abscissaList
1128 # nChannels = z.shape[0] #Number of wind dimensions estimated
1129 # nChannels = z.shape[0] #Number of wind dimensions estimated
1129 # thisDatetime = dataOut.datatime
1130 # thisDatetime = dataOut.datatime
1130
1131
1131 if dataOut.data_SNR is not None:
1132 if dataOut.data_SNR is not None:
1132 SNRarray = dataOut.data_SNR[channelIndexList,:]
1133 SNRarray = dataOut.data_SNR[channelIndexList,:]
1133 SNRdB = 10*numpy.log10(SNRarray)
1134 SNRdB = 10*numpy.log10(SNRarray)
1134 # SNRavgdB = 10*numpy.log10(SNRavg)
1135 # SNRavgdB = 10*numpy.log10(SNRavg)
1135 ind = numpy.where(SNRdB < 10**(SNRthresh/10))
1136 ind = numpy.where(SNRdB < 10**(SNRthresh/10))
1136 z[ind] = numpy.nan
1137 z[ind] = numpy.nan
1137
1138
1138 thisDatetime = datetime.datetime.utcfromtimestamp(dataOut.getTimeRange()[0])
1139 thisDatetime = datetime.datetime.utcfromtimestamp(dataOut.getTimeRange()[0])
1139 title = wintitle + " Parameters Plot" #: %s" %(thisDatetime.strftime("%d-%b-%Y"))
1140 title = wintitle + " Parameters Plot" #: %s" %(thisDatetime.strftime("%d-%b-%Y"))
1140 xlabel = ""
1141 xlabel = ""
1141 ylabel = "Range (Km)"
1142 ylabel = "Range (Km)"
1142
1143
1143 if (SNR and not onlySNR): nplots = 2*nplots
1144 if (SNR and not onlySNR): nplots = 2*nplots
1144
1145
1145 if onlyPositive:
1146 if onlyPositive:
1146 colormap = "jet"
1147 colormap = "jet"
1147 zmin = 0
1148 zmin = 0
1148 else: colormap = "RdBu_r"
1149 else: colormap = "RdBu_r"
1149
1150
1150 if not self.isConfig:
1151 if not self.isConfig:
1151
1152
1152 self.setup(id=id,
1153 self.setup(id=id,
1153 nplots=nplots,
1154 nplots=nplots,
1154 wintitle=wintitle,
1155 wintitle=wintitle,
1155 showprofile=showprofile,
1156 showprofile=showprofile,
1156 show=show)
1157 show=show)
1157
1158
1158 self.xmin, self.xmax = self.getTimeLim(x, xmin, xmax, timerange)
1159 self.xmin, self.xmax = self.getTimeLim(x, xmin, xmax, timerange)
1159
1160
1160 if ymin == None: ymin = numpy.nanmin(y)
1161 if ymin == None: ymin = numpy.nanmin(y)
1161 if ymax == None: ymax = numpy.nanmax(y)
1162 if ymax == None: ymax = numpy.nanmax(y)
1162 if zmin == None: zmin = numpy.nanmin(zRange)
1163 if zmin == None: zmin = numpy.nanmin(zRange)
1163 if zmax == None: zmax = numpy.nanmax(zRange)
1164 if zmax == None: zmax = numpy.nanmax(zRange)
1164
1165
1165 if SNR:
1166 if SNR:
1166 if SNRmin == None: SNRmin = numpy.nanmin(SNRdB)
1167 if SNRmin == None: SNRmin = numpy.nanmin(SNRdB)
1167 if SNRmax == None: SNRmax = numpy.nanmax(SNRdB)
1168 if SNRmax == None: SNRmax = numpy.nanmax(SNRdB)
1168
1169
1169 self.FTP_WEI = ftp_wei
1170 self.FTP_WEI = ftp_wei
1170 self.EXP_CODE = exp_code
1171 self.EXP_CODE = exp_code
1171 self.SUB_EXP_CODE = sub_exp_code
1172 self.SUB_EXP_CODE = sub_exp_code
1172 self.PLOT_POS = plot_pos
1173 self.PLOT_POS = plot_pos
1173
1174
1174 self.name = thisDatetime.strftime("%Y%m%d_%H%M%S")
1175 self.name = thisDatetime.strftime("%Y%m%d_%H%M%S")
1175 self.isConfig = True
1176 self.isConfig = True
1176 self.figfile = figfile
1177 self.figfile = figfile
1177
1178
1178 self.setWinTitle(title)
1179 self.setWinTitle(title)
1179
1180
1180 if ((self.xmax - x[1]) < (x[1]-x[0])):
1181 if ((self.xmax - x[1]) < (x[1]-x[0])):
1181 x[1] = self.xmax
1182 x[1] = self.xmax
1182
1183
1183 for i in range(nchan):
1184 for i in range(nchan):
1184
1185
1185 if (SNR and not onlySNR): j = 2*i
1186 if (SNR and not onlySNR): j = 2*i
1186 else: j = i
1187 else: j = i
1187
1188
1188 j = nGraphsByChannel*i
1189 j = nGraphsByChannel*i
1189
1190
1190 if ((dataOut.azimuth!=None) and (dataOut.zenith!=None)):
1191 if ((dataOut.azimuth!=None) and (dataOut.zenith!=None)):
1191 title = title + '_' + 'azimuth,zenith=%2.2f,%2.2f'%(dataOut.azimuth, dataOut.zenith)
1192 title = title + '_' + 'azimuth,zenith=%2.2f,%2.2f'%(dataOut.azimuth, dataOut.zenith)
1192
1193
1193 if not onlySNR:
1194 if not onlySNR:
1194 axes = self.axesList[j*self.__nsubplots]
1195 axes = self.axesList[j*self.__nsubplots]
1195 z1 = z[i,:].reshape((1,-1))
1196 z1 = z[i,:].reshape((1,-1))
1196 axes.pcolorbuffer(x, y, z1,
1197 axes.pcolorbuffer(x, y, z1,
1197 xmin=self.xmin, xmax=self.xmax, ymin=ymin, ymax=ymax, zmin=zmin, zmax=zmax,
1198 xmin=self.xmin, xmax=self.xmax, ymin=ymin, ymax=ymax, zmin=zmin, zmax=zmax,
1198 xlabel=xlabel, ylabel=ylabel, title=title, rti=True, XAxisAsTime=True,colormap=colormap,
1199 xlabel=xlabel, ylabel=ylabel, title=title, rti=True, XAxisAsTime=True,colormap=colormap,
1199 ticksize=9, cblabel=zlabel, cbsize="1%")
1200 ticksize=9, cblabel=zlabel, cbsize="1%")
1200
1201
1201 if DOP:
1202 if DOP:
1202 title = "%s Channel %d: %s" %(parameterName, channelIndexList[i], thisDatetime.strftime("%Y/%m/%d %H:%M:%S"))
1203 title = "%s Channel %d: %s" %(parameterName, channelIndexList[i], thisDatetime.strftime("%Y/%m/%d %H:%M:%S"))
1203
1204
1204 if ((dataOut.azimuth!=None) and (dataOut.zenith!=None)):
1205 if ((dataOut.azimuth!=None) and (dataOut.zenith!=None)):
1205 title = title + '_' + 'azimuth,zenith=%2.2f,%2.2f'%(dataOut.azimuth, dataOut.zenith)
1206 title = title + '_' + 'azimuth,zenith=%2.2f,%2.2f'%(dataOut.azimuth, dataOut.zenith)
1206 axes = self.axesList[j]
1207 axes = self.axesList[j]
1207 z1 = z[i,:].reshape((1,-1))
1208 z1 = z[i,:].reshape((1,-1))
1208 axes.pcolorbuffer(x, y, z1,
1209 axes.pcolorbuffer(x, y, z1,
1209 xmin=self.xmin, xmax=self.xmax, ymin=ymin, ymax=ymax, zmin=zmin, zmax=zmax,
1210 xmin=self.xmin, xmax=self.xmax, ymin=ymin, ymax=ymax, zmin=zmin, zmax=zmax,
1210 xlabel=xlabel, ylabel=ylabel, title=title, rti=True, XAxisAsTime=True,colormap=colormap,
1211 xlabel=xlabel, ylabel=ylabel, title=title, rti=True, XAxisAsTime=True,colormap=colormap,
1211 ticksize=9, cblabel=zlabel, cbsize="1%")
1212 ticksize=9, cblabel=zlabel, cbsize="1%")
1212
1213
1213 if SNR:
1214 if SNR:
1214 title = "Channel %d Signal Noise Ratio (SNR): %s" %(channelIndexList[i], thisDatetime.strftime("%Y/%m/%d %H:%M:%S"))
1215 title = "Channel %d Signal Noise Ratio (SNR): %s" %(channelIndexList[i], thisDatetime.strftime("%Y/%m/%d %H:%M:%S"))
1215 axes = self.axesList[(j)*self.__nsubplots]
1216 axes = self.axesList[(j)*self.__nsubplots]
1216 if not onlySNR:
1217 if not onlySNR:
1217 axes = self.axesList[(j + 1)*self.__nsubplots]
1218 axes = self.axesList[(j + 1)*self.__nsubplots]
1218
1219
1219 axes = self.axesList[(j + nGraphsByChannel-1)]
1220 axes = self.axesList[(j + nGraphsByChannel-1)]
1220
1221
1221 z1 = SNRdB[i,:].reshape((1,-1))
1222 z1 = SNRdB[i,:].reshape((1,-1))
1222 axes.pcolorbuffer(x, y, z1,
1223 axes.pcolorbuffer(x, y, z1,
1223 xmin=self.xmin, xmax=self.xmax, ymin=ymin, ymax=ymax, zmin=SNRmin, zmax=SNRmax,
1224 xmin=self.xmin, xmax=self.xmax, ymin=ymin, ymax=ymax, zmin=SNRmin, zmax=SNRmax,
1224 xlabel=xlabel, ylabel=ylabel, title=title, rti=True, XAxisAsTime=True,colormap="jet",
1225 xlabel=xlabel, ylabel=ylabel, title=title, rti=True, XAxisAsTime=True,colormap="jet",
1225 ticksize=9, cblabel=zlabel, cbsize="1%")
1226 ticksize=9, cblabel=zlabel, cbsize="1%")
1226
1227
1227
1228
1228
1229
1229 self.draw()
1230 self.draw()
1230
1231
1231 if x[1] >= self.axesList[0].xmax:
1232 if x[1] >= self.axesList[0].xmax:
1232 self.counter_imagwr = wr_period
1233 self.counter_imagwr = wr_period
1233 self.isConfig = False
1234 self.isConfig = False
1234 self.figfile = None
1235 self.figfile = None
1235
1236
1236 self.save(figpath=figpath,
1237 self.save(figpath=figpath,
1237 figfile=figfile,
1238 figfile=figfile,
1238 save=save,
1239 save=save,
1239 ftp=ftp,
1240 ftp=ftp,
1240 wr_period=wr_period,
1241 wr_period=wr_period,
1241 thisDatetime=thisDatetime,
1242 thisDatetime=thisDatetime,
1242 update_figfile=False)
1243 update_figfile=False)
1243
1244
1244 class SpectralFittingPlot(Figure):
1245 class SpectralFittingPlot(Figure):
1245
1246
1246 __isConfig = None
1247 __isConfig = None
1247 __nsubplots = None
1248 __nsubplots = None
1248
1249
1249 WIDTHPROF = None
1250 WIDTHPROF = None
1250 HEIGHTPROF = None
1251 HEIGHTPROF = None
1251 PREFIX = 'prm'
1252 PREFIX = 'prm'
1252
1253
1253
1254
1254 N = None
1255 N = None
1255 ippSeconds = None
1256 ippSeconds = None
1256
1257
1257 def __init__(self, **kwargs):
1258 def __init__(self, **kwargs):
1258 Figure.__init__(self, **kwargs)
1259 Figure.__init__(self, **kwargs)
1259 self.isConfig = False
1260 self.isConfig = False
1260 self.__nsubplots = 1
1261 self.__nsubplots = 1
1261
1262
1262 self.PLOT_CODE = SPECFIT_CODE
1263 self.PLOT_CODE = SPECFIT_CODE
1263
1264
1264 self.WIDTH = 450
1265 self.WIDTH = 450
1265 self.HEIGHT = 250
1266 self.HEIGHT = 250
1266 self.WIDTHPROF = 0
1267 self.WIDTHPROF = 0
1267 self.HEIGHTPROF = 0
1268 self.HEIGHTPROF = 0
1268
1269
1269 def getSubplots(self):
1270 def getSubplots(self):
1270
1271
1271 ncol = int(numpy.sqrt(self.nplots)+0.9)
1272 ncol = int(numpy.sqrt(self.nplots)+0.9)
1272 nrow = int(self.nplots*1./ncol + 0.9)
1273 nrow = int(self.nplots*1./ncol + 0.9)
1273
1274
1274 return nrow, ncol
1275 return nrow, ncol
1275
1276
1276 def setup(self, id, nplots, wintitle, showprofile=False, show=True):
1277 def setup(self, id, nplots, wintitle, showprofile=False, show=True):
1277
1278
1278 showprofile = False
1279 showprofile = False
1279 self.__showprofile = showprofile
1280 self.__showprofile = showprofile
1280 self.nplots = nplots
1281 self.nplots = nplots
1281
1282
1282 ncolspan = 5
1283 ncolspan = 5
1283 colspan = 4
1284 colspan = 4
1284 if showprofile:
1285 if showprofile:
1285 ncolspan = 5
1286 ncolspan = 5
1286 colspan = 4
1287 colspan = 4
1287 self.__nsubplots = 2
1288 self.__nsubplots = 2
1288
1289
1289 self.createFigure(id = id,
1290 self.createFigure(id = id,
1290 wintitle = wintitle,
1291 wintitle = wintitle,
1291 widthplot = self.WIDTH + self.WIDTHPROF,
1292 widthplot = self.WIDTH + self.WIDTHPROF,
1292 heightplot = self.HEIGHT + self.HEIGHTPROF,
1293 heightplot = self.HEIGHT + self.HEIGHTPROF,
1293 show=show)
1294 show=show)
1294
1295
1295 nrow, ncol = self.getSubplots()
1296 nrow, ncol = self.getSubplots()
1296
1297
1297 counter = 0
1298 counter = 0
1298 for y in range(nrow):
1299 for y in range(nrow):
1299 for x in range(ncol):
1300 for x in range(ncol):
1300
1301
1301 if counter >= self.nplots:
1302 if counter >= self.nplots:
1302 break
1303 break
1303
1304
1304 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan, colspan, 1)
1305 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan, colspan, 1)
1305
1306
1306 if showprofile:
1307 if showprofile:
1307 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan+colspan, 1, 1)
1308 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan+colspan, 1, 1)
1308
1309
1309 counter += 1
1310 counter += 1
1310
1311
1311 def run(self, dataOut, id, cutHeight=None, fit=False, wintitle="", channelList=None, showprofile=True,
1312 def run(self, dataOut, id, cutHeight=None, fit=False, wintitle="", channelList=None, showprofile=True,
1312 xmin=None, xmax=None, ymin=None, ymax=None,
1313 xmin=None, xmax=None, ymin=None, ymax=None,
1313 save=False, figpath='./', figfile=None, show=True):
1314 save=False, figpath='./', figfile=None, show=True):
1314
1315
1315 """
1316 """
1316
1317
1317 Input:
1318 Input:
1318 dataOut :
1319 dataOut :
1319 id :
1320 id :
1320 wintitle :
1321 wintitle :
1321 channelList :
1322 channelList :
1322 showProfile :
1323 showProfile :
1323 xmin : None,
1324 xmin : None,
1324 xmax : None,
1325 xmax : None,
1325 zmin : None,
1326 zmin : None,
1326 zmax : None
1327 zmax : None
1327 """
1328 """
1328
1329
1329 if cutHeight==None:
1330 if cutHeight==None:
1330 h=270
1331 h=270
1331 heightindex = numpy.abs(cutHeight - dataOut.heightList).argmin()
1332 heightindex = numpy.abs(cutHeight - dataOut.heightList).argmin()
1332 cutHeight = dataOut.heightList[heightindex]
1333 cutHeight = dataOut.heightList[heightindex]
1333
1334
1334 factor = dataOut.normFactor
1335 factor = dataOut.normFactor
1335 x = dataOut.abscissaList[:-1]
1336 x = dataOut.abscissaList[:-1]
1336 #y = dataOut.getHeiRange()
1337 #y = dataOut.getHeiRange()
1337
1338
1338 z = dataOut.data_pre[:,:,heightindex]/factor
1339 z = dataOut.data_pre[:,:,heightindex]/factor
1339 z = numpy.where(numpy.isfinite(z), z, numpy.NAN)
1340 z = numpy.where(numpy.isfinite(z), z, numpy.NAN)
1340 avg = numpy.average(z, axis=1)
1341 avg = numpy.average(z, axis=1)
1341 listChannels = z.shape[0]
1342 listChannels = z.shape[0]
1342
1343
1343 #Reconstruct Function
1344 #Reconstruct Function
1344 if fit==True:
1345 if fit==True:
1345 groupArray = dataOut.groupList
1346 groupArray = dataOut.groupList
1346 listChannels = groupArray.reshape((groupArray.size))
1347 listChannels = groupArray.reshape((groupArray.size))
1347 listChannels.sort()
1348 listChannels.sort()
1348 spcFitLine = numpy.zeros(z.shape)
1349 spcFitLine = numpy.zeros(z.shape)
1349 constants = dataOut.constants
1350 constants = dataOut.constants
1350
1351
1351 nGroups = groupArray.shape[0]
1352 nGroups = groupArray.shape[0]
1352 nChannels = groupArray.shape[1]
1353 nChannels = groupArray.shape[1]
1353 nProfiles = z.shape[1]
1354 nProfiles = z.shape[1]
1354
1355
1355 for f in range(nGroups):
1356 for f in range(nGroups):
1356 groupChann = groupArray[f,:]
1357 groupChann = groupArray[f,:]
1357 p = dataOut.data_param[f,:,heightindex]
1358 p = dataOut.data_param[f,:,heightindex]
1358 # p = numpy.array([ 89.343967,0.14036615,0.17086219,18.89835291,1.58388365,1.55099167])
1359 # p = numpy.array([ 89.343967,0.14036615,0.17086219,18.89835291,1.58388365,1.55099167])
1359 fitLineAux = dataOut.library.modelFunction(p, constants)*nProfiles
1360 fitLineAux = dataOut.library.modelFunction(p, constants)*nProfiles
1360 fitLineAux = fitLineAux.reshape((nChannels,nProfiles))
1361 fitLineAux = fitLineAux.reshape((nChannels,nProfiles))
1361 spcFitLine[groupChann,:] = fitLineAux
1362 spcFitLine[groupChann,:] = fitLineAux
1362 # spcFitLine = spcFitLine/factor
1363 # spcFitLine = spcFitLine/factor
1363
1364
1364 z = z[listChannels,:]
1365 z = z[listChannels,:]
1365 spcFitLine = spcFitLine[listChannels,:]
1366 spcFitLine = spcFitLine[listChannels,:]
1366 spcFitLinedB = 10*numpy.log10(spcFitLine)
1367 spcFitLinedB = 10*numpy.log10(spcFitLine)
1367
1368
1368 zdB = 10*numpy.log10(z)
1369 zdB = 10*numpy.log10(z)
1369 #thisDatetime = dataOut.datatime
1370 #thisDatetime = dataOut.datatime
1370 thisDatetime = datetime.datetime.utcfromtimestamp(dataOut.getTimeRange()[0])
1371 thisDatetime = datetime.datetime.utcfromtimestamp(dataOut.getTimeRange()[0])
1371 title = wintitle + " Doppler Spectra: %s" %(thisDatetime.strftime("%d-%b-%Y %H:%M:%S"))
1372 title = wintitle + " Doppler Spectra: %s" %(thisDatetime.strftime("%d-%b-%Y %H:%M:%S"))
1372 xlabel = "Velocity (m/s)"
1373 xlabel = "Velocity (m/s)"
1373 ylabel = "Spectrum"
1374 ylabel = "Spectrum"
1374
1375
1375 if not self.isConfig:
1376 if not self.isConfig:
1376
1377
1377 nplots = listChannels.size
1378 nplots = listChannels.size
1378
1379
1379 self.setup(id=id,
1380 self.setup(id=id,
1380 nplots=nplots,
1381 nplots=nplots,
1381 wintitle=wintitle,
1382 wintitle=wintitle,
1382 showprofile=showprofile,
1383 showprofile=showprofile,
1383 show=show)
1384 show=show)
1384
1385
1385 if xmin == None: xmin = numpy.nanmin(x)
1386 if xmin == None: xmin = numpy.nanmin(x)
1386 if xmax == None: xmax = numpy.nanmax(x)
1387 if xmax == None: xmax = numpy.nanmax(x)
1387 if ymin == None: ymin = numpy.nanmin(zdB)
1388 if ymin == None: ymin = numpy.nanmin(zdB)
1388 if ymax == None: ymax = numpy.nanmax(zdB)+2
1389 if ymax == None: ymax = numpy.nanmax(zdB)+2
1389
1390
1390 self.isConfig = True
1391 self.isConfig = True
1391
1392
1392 self.setWinTitle(title)
1393 self.setWinTitle(title)
1393 for i in range(self.nplots):
1394 for i in range(self.nplots):
1394 # title = "Channel %d: %4.2fdB" %(dataOut.channelList[i]+1, noisedB[i])
1395 # title = "Channel %d: %4.2fdB" %(dataOut.channelList[i]+1, noisedB[i])
1395 title = "Height %4.1f km\nChannel %d:" %(cutHeight, listChannels[i])
1396 title = "Height %4.1f km\nChannel %d:" %(cutHeight, listChannels[i])
1396 axes = self.axesList[i*self.__nsubplots]
1397 axes = self.axesList[i*self.__nsubplots]
1397 if fit == False:
1398 if fit == False:
1398 axes.pline(x, zdB[i,:],
1399 axes.pline(x, zdB[i,:],
1399 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax,
1400 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax,
1400 xlabel=xlabel, ylabel=ylabel, title=title
1401 xlabel=xlabel, ylabel=ylabel, title=title
1401 )
1402 )
1402 if fit == True:
1403 if fit == True:
1403 fitline=spcFitLinedB[i,:]
1404 fitline=spcFitLinedB[i,:]
1404 y=numpy.vstack([zdB[i,:],fitline] )
1405 y=numpy.vstack([zdB[i,:],fitline] )
1405 legendlabels=['Data','Fitting']
1406 legendlabels=['Data','Fitting']
1406 axes.pmultilineyaxis(x, y,
1407 axes.pmultilineyaxis(x, y,
1407 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax,
1408 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax,
1408 xlabel=xlabel, ylabel=ylabel, title=title,
1409 xlabel=xlabel, ylabel=ylabel, title=title,
1409 legendlabels=legendlabels, marker=None,
1410 legendlabels=legendlabels, marker=None,
1410 linestyle='solid', grid='both')
1411 linestyle='solid', grid='both')
1411
1412
1412 self.draw()
1413 self.draw()
1413
1414
1414 self.save(figpath=figpath,
1415 self.save(figpath=figpath,
1415 figfile=figfile,
1416 figfile=figfile,
1416 save=save,
1417 save=save,
1417 ftp=ftp,
1418 ftp=ftp,
1418 wr_period=wr_period,
1419 wr_period=wr_period,
1419 thisDatetime=thisDatetime)
1420 thisDatetime=thisDatetime)
1420
1421
1421
1422
1422 class EWDriftsPlot(Figure):
1423 class EWDriftsPlot(Figure):
1423
1424
1424 __isConfig = None
1425 __isConfig = None
1425 __nsubplots = None
1426 __nsubplots = None
1426
1427
1427 WIDTHPROF = None
1428 WIDTHPROF = None
1428 HEIGHTPROF = None
1429 HEIGHTPROF = None
1429 PREFIX = 'drift'
1430 PREFIX = 'drift'
1430
1431
1431 def __init__(self, **kwargs):
1432 def __init__(self, **kwargs):
1432 Figure.__init__(self, **kwargs)
1433 Figure.__init__(self, **kwargs)
1433 self.timerange = 2*60*60
1434 self.timerange = 2*60*60
1434 self.isConfig = False
1435 self.isConfig = False
1435 self.__nsubplots = 1
1436 self.__nsubplots = 1
1436
1437
1437 self.WIDTH = 800
1438 self.WIDTH = 800
1438 self.HEIGHT = 150
1439 self.HEIGHT = 150
1439 self.WIDTHPROF = 120
1440 self.WIDTHPROF = 120
1440 self.HEIGHTPROF = 0
1441 self.HEIGHTPROF = 0
1441 self.counter_imagwr = 0
1442 self.counter_imagwr = 0
1442
1443
1443 self.PLOT_CODE = EWDRIFT_CODE
1444 self.PLOT_CODE = EWDRIFT_CODE
1444
1445
1445 self.FTP_WEI = None
1446 self.FTP_WEI = None
1446 self.EXP_CODE = None
1447 self.EXP_CODE = None
1447 self.SUB_EXP_CODE = None
1448 self.SUB_EXP_CODE = None
1448 self.PLOT_POS = None
1449 self.PLOT_POS = None
1449 self.tmin = None
1450 self.tmin = None
1450 self.tmax = None
1451 self.tmax = None
1451
1452
1452 self.xmin = None
1453 self.xmin = None
1453 self.xmax = None
1454 self.xmax = None
1454
1455
1455 self.figfile = None
1456 self.figfile = None
1456
1457
1457 def getSubplots(self):
1458 def getSubplots(self):
1458
1459
1459 ncol = 1
1460 ncol = 1
1460 nrow = self.nplots
1461 nrow = self.nplots
1461
1462
1462 return nrow, ncol
1463 return nrow, ncol
1463
1464
1464 def setup(self, id, nplots, wintitle, showprofile=True, show=True):
1465 def setup(self, id, nplots, wintitle, showprofile=True, show=True):
1465
1466
1466 self.__showprofile = showprofile
1467 self.__showprofile = showprofile
1467 self.nplots = nplots
1468 self.nplots = nplots
1468
1469
1469 ncolspan = 1
1470 ncolspan = 1
1470 colspan = 1
1471 colspan = 1
1471
1472
1472 self.createFigure(id = id,
1473 self.createFigure(id = id,
1473 wintitle = wintitle,
1474 wintitle = wintitle,
1474 widthplot = self.WIDTH + self.WIDTHPROF,
1475 widthplot = self.WIDTH + self.WIDTHPROF,
1475 heightplot = self.HEIGHT + self.HEIGHTPROF,
1476 heightplot = self.HEIGHT + self.HEIGHTPROF,
1476 show=show)
1477 show=show)
1477
1478
1478 nrow, ncol = self.getSubplots()
1479 nrow, ncol = self.getSubplots()
1479
1480
1480 counter = 0
1481 counter = 0
1481 for y in range(nrow):
1482 for y in range(nrow):
1482 if counter >= self.nplots:
1483 if counter >= self.nplots:
1483 break
1484 break
1484
1485
1485 self.addAxes(nrow, ncol*ncolspan, y, 0, colspan, 1)
1486 self.addAxes(nrow, ncol*ncolspan, y, 0, colspan, 1)
1486 counter += 1
1487 counter += 1
1487
1488
1488 def run(self, dataOut, id, wintitle="", channelList=None,
1489 def run(self, dataOut, id, wintitle="", channelList=None,
1489 xmin=None, xmax=None, ymin=None, ymax=None, zmin=None, zmax=None,
1490 xmin=None, xmax=None, ymin=None, ymax=None, zmin=None, zmax=None,
1490 zmaxVertical = None, zminVertical = None, zmaxZonal = None, zminZonal = None,
1491 zmaxVertical = None, zminVertical = None, zmaxZonal = None, zminZonal = None,
1491 timerange=None, SNRthresh = -numpy.inf, SNRmin = None, SNRmax = None, SNR_1 = False,
1492 timerange=None, SNRthresh = -numpy.inf, SNRmin = None, SNRmax = None, SNR_1 = False,
1492 save=False, figpath='./', lastone=0,figfile=None, ftp=False, wr_period=1, show=True,
1493 save=False, figpath='./', lastone=0,figfile=None, ftp=False, wr_period=1, show=True,
1493 server=None, folder=None, username=None, password=None,
1494 server=None, folder=None, username=None, password=None,
1494 ftp_wei=0, exp_code=0, sub_exp_code=0, plot_pos=0):
1495 ftp_wei=0, exp_code=0, sub_exp_code=0, plot_pos=0):
1495 """
1496 """
1496
1497
1497 Input:
1498 Input:
1498 dataOut :
1499 dataOut :
1499 id :
1500 id :
1500 wintitle :
1501 wintitle :
1501 channelList :
1502 channelList :
1502 showProfile :
1503 showProfile :
1503 xmin : None,
1504 xmin : None,
1504 xmax : None,
1505 xmax : None,
1505 ymin : None,
1506 ymin : None,
1506 ymax : None,
1507 ymax : None,
1507 zmin : None,
1508 zmin : None,
1508 zmax : None
1509 zmax : None
1509 """
1510 """
1510
1511
1511 if timerange is not None:
1512 if timerange is not None:
1512 self.timerange = timerange
1513 self.timerange = timerange
1513
1514
1514 tmin = None
1515 tmin = None
1515 tmax = None
1516 tmax = None
1516
1517
1517 x = dataOut.getTimeRange1(dataOut.outputInterval)
1518 x = dataOut.getTimeRange1(dataOut.outputInterval)
1518 # y = dataOut.heightList
1519 # y = dataOut.heightList
1519 y = dataOut.heightList
1520 y = dataOut.heightList
1520
1521
1521 z = dataOut.data_output
1522 z = dataOut.data_output
1522 nplots = z.shape[0] #Number of wind dimensions estimated
1523 nplots = z.shape[0] #Number of wind dimensions estimated
1523 nplotsw = nplots
1524 nplotsw = nplots
1524
1525
1525 #If there is a SNR function defined
1526 #If there is a SNR function defined
1526 if dataOut.data_SNR is not None:
1527 if dataOut.data_SNR is not None:
1527 nplots += 1
1528 nplots += 1
1528 SNR = dataOut.data_SNR
1529 SNR = dataOut.data_SNR
1529
1530
1530 if SNR_1:
1531 if SNR_1:
1531 SNR += 1
1532 SNR += 1
1532
1533
1533 SNRavg = numpy.average(SNR, axis=0)
1534 SNRavg = numpy.average(SNR, axis=0)
1534
1535
1535 SNRdB = 10*numpy.log10(SNR)
1536 SNRdB = 10*numpy.log10(SNR)
1536 SNRavgdB = 10*numpy.log10(SNRavg)
1537 SNRavgdB = 10*numpy.log10(SNRavg)
1537
1538
1538 ind = numpy.where(SNRavg < 10**(SNRthresh/10))[0]
1539 ind = numpy.where(SNRavg < 10**(SNRthresh/10))[0]
1539
1540
1540 for i in range(nplotsw):
1541 for i in range(nplotsw):
1541 z[i,ind] = numpy.nan
1542 z[i,ind] = numpy.nan
1542
1543
1543
1544
1544 showprofile = False
1545 showprofile = False
1545 # thisDatetime = dataOut.datatime
1546 # thisDatetime = dataOut.datatime
1546 thisDatetime = datetime.datetime.utcfromtimestamp(x[1])
1547 thisDatetime = datetime.datetime.utcfromtimestamp(x[1])
1547 title = wintitle + " EW Drifts"
1548 title = wintitle + " EW Drifts"
1548 xlabel = ""
1549 xlabel = ""
1549 ylabel = "Height (Km)"
1550 ylabel = "Height (Km)"
1550
1551
1551 if not self.isConfig:
1552 if not self.isConfig:
1552
1553
1553 self.setup(id=id,
1554 self.setup(id=id,
1554 nplots=nplots,
1555 nplots=nplots,
1555 wintitle=wintitle,
1556 wintitle=wintitle,
1556 showprofile=showprofile,
1557 showprofile=showprofile,
1557 show=show)
1558 show=show)
1558
1559
1559 self.xmin, self.xmax = self.getTimeLim(x, xmin, xmax, timerange)
1560 self.xmin, self.xmax = self.getTimeLim(x, xmin, xmax, timerange)
1560
1561
1561 if ymin == None: ymin = numpy.nanmin(y)
1562 if ymin == None: ymin = numpy.nanmin(y)
1562 if ymax == None: ymax = numpy.nanmax(y)
1563 if ymax == None: ymax = numpy.nanmax(y)
1563
1564
1564 if zmaxZonal == None: zmaxZonal = numpy.nanmax(abs(z[0,:]))
1565 if zmaxZonal == None: zmaxZonal = numpy.nanmax(abs(z[0,:]))
1565 if zminZonal == None: zminZonal = -zmaxZonal
1566 if zminZonal == None: zminZonal = -zmaxZonal
1566 if zmaxVertical == None: zmaxVertical = numpy.nanmax(abs(z[1,:]))
1567 if zmaxVertical == None: zmaxVertical = numpy.nanmax(abs(z[1,:]))
1567 if zminVertical == None: zminVertical = -zmaxVertical
1568 if zminVertical == None: zminVertical = -zmaxVertical
1568
1569
1569 if dataOut.data_SNR is not None:
1570 if dataOut.data_SNR is not None:
1570 if SNRmin == None: SNRmin = numpy.nanmin(SNRavgdB)
1571 if SNRmin == None: SNRmin = numpy.nanmin(SNRavgdB)
1571 if SNRmax == None: SNRmax = numpy.nanmax(SNRavgdB)
1572 if SNRmax == None: SNRmax = numpy.nanmax(SNRavgdB)
1572
1573
1573 self.FTP_WEI = ftp_wei
1574 self.FTP_WEI = ftp_wei
1574 self.EXP_CODE = exp_code
1575 self.EXP_CODE = exp_code
1575 self.SUB_EXP_CODE = sub_exp_code
1576 self.SUB_EXP_CODE = sub_exp_code
1576 self.PLOT_POS = plot_pos
1577 self.PLOT_POS = plot_pos
1577
1578
1578 self.name = thisDatetime.strftime("%Y%m%d_%H%M%S")
1579 self.name = thisDatetime.strftime("%Y%m%d_%H%M%S")
1579 self.isConfig = True
1580 self.isConfig = True
1580
1581
1581
1582
1582 self.setWinTitle(title)
1583 self.setWinTitle(title)
1583
1584
1584 if ((self.xmax - x[1]) < (x[1]-x[0])):
1585 if ((self.xmax - x[1]) < (x[1]-x[0])):
1585 x[1] = self.xmax
1586 x[1] = self.xmax
1586
1587
1587 strWind = ['Zonal','Vertical']
1588 strWind = ['Zonal','Vertical']
1588 strCb = 'Velocity (m/s)'
1589 strCb = 'Velocity (m/s)'
1589 zmaxVector = [zmaxZonal, zmaxVertical]
1590 zmaxVector = [zmaxZonal, zmaxVertical]
1590 zminVector = [zminZonal, zminVertical]
1591 zminVector = [zminZonal, zminVertical]
1591
1592
1592 for i in range(nplotsw):
1593 for i in range(nplotsw):
1593
1594
1594 title = "%s Drifts: %s" %(strWind[i], thisDatetime.strftime("%Y/%m/%d %H:%M:%S"))
1595 title = "%s Drifts: %s" %(strWind[i], thisDatetime.strftime("%Y/%m/%d %H:%M:%S"))
1595 axes = self.axesList[i*self.__nsubplots]
1596 axes = self.axesList[i*self.__nsubplots]
1596
1597
1597 z1 = z[i,:].reshape((1,-1))
1598 z1 = z[i,:].reshape((1,-1))
1598
1599
1599 axes.pcolorbuffer(x, y, z1,
1600 axes.pcolorbuffer(x, y, z1,
1600 xmin=self.xmin, xmax=self.xmax, ymin=ymin, ymax=ymax, zmin=zminVector[i], zmax=zmaxVector[i],
1601 xmin=self.xmin, xmax=self.xmax, ymin=ymin, ymax=ymax, zmin=zminVector[i], zmax=zmaxVector[i],
1601 xlabel=xlabel, ylabel=ylabel, title=title, rti=True, XAxisAsTime=True,
1602 xlabel=xlabel, ylabel=ylabel, title=title, rti=True, XAxisAsTime=True,
1602 ticksize=9, cblabel=strCb, cbsize="1%", colormap="RdBu_r")
1603 ticksize=9, cblabel=strCb, cbsize="1%", colormap="RdBu_r")
1603
1604
1604 if dataOut.data_SNR is not None:
1605 if dataOut.data_SNR is not None:
1605 i += 1
1606 i += 1
1606 if SNR_1:
1607 if SNR_1:
1607 title = "Signal Noise Ratio + 1 (SNR+1): %s" %(thisDatetime.strftime("%Y/%m/%d %H:%M:%S"))
1608 title = "Signal Noise Ratio + 1 (SNR+1): %s" %(thisDatetime.strftime("%Y/%m/%d %H:%M:%S"))
1608 else:
1609 else:
1609 title = "Signal Noise Ratio (SNR): %s" %(thisDatetime.strftime("%Y/%m/%d %H:%M:%S"))
1610 title = "Signal Noise Ratio (SNR): %s" %(thisDatetime.strftime("%Y/%m/%d %H:%M:%S"))
1610 axes = self.axesList[i*self.__nsubplots]
1611 axes = self.axesList[i*self.__nsubplots]
1611 SNRavgdB = SNRavgdB.reshape((1,-1))
1612 SNRavgdB = SNRavgdB.reshape((1,-1))
1612
1613
1613 axes.pcolorbuffer(x, y, SNRavgdB,
1614 axes.pcolorbuffer(x, y, SNRavgdB,
1614 xmin=self.xmin, xmax=self.xmax, ymin=ymin, ymax=ymax, zmin=SNRmin, zmax=SNRmax,
1615 xmin=self.xmin, xmax=self.xmax, ymin=ymin, ymax=ymax, zmin=SNRmin, zmax=SNRmax,
1615 xlabel=xlabel, ylabel=ylabel, title=title, rti=True, XAxisAsTime=True,
1616 xlabel=xlabel, ylabel=ylabel, title=title, rti=True, XAxisAsTime=True,
1616 ticksize=9, cblabel='', cbsize="1%", colormap="jet")
1617 ticksize=9, cblabel='', cbsize="1%", colormap="jet")
1617
1618
1618 self.draw()
1619 self.draw()
1619
1620
1620 if x[1] >= self.axesList[0].xmax:
1621 if x[1] >= self.axesList[0].xmax:
1621 self.counter_imagwr = wr_period
1622 self.counter_imagwr = wr_period
1622 self.isConfig = False
1623 self.isConfig = False
1623 self.figfile = None
1624 self.figfile = None
1624
1625
1625
1626
1626
1627
1627
1628
1628 class PhasePlot(Figure):
1629 class PhasePlot(Figure):
1629
1630
1630 __isConfig = None
1631 __isConfig = None
1631 __nsubplots = None
1632 __nsubplots = None
1632
1633
1633 PREFIX = 'mphase'
1634 PREFIX = 'mphase'
1634
1635
1635 def __init__(self, **kwargs):
1636 def __init__(self, **kwargs):
1636 Figure.__init__(self, **kwargs)
1637 Figure.__init__(self, **kwargs)
1637 self.timerange = 24*60*60
1638 self.timerange = 24*60*60
1638 self.isConfig = False
1639 self.isConfig = False
1639 self.__nsubplots = 1
1640 self.__nsubplots = 1
1640 self.counter_imagwr = 0
1641 self.counter_imagwr = 0
1641 self.WIDTH = 600
1642 self.WIDTH = 600
1642 self.HEIGHT = 300
1643 self.HEIGHT = 300
1643 self.WIDTHPROF = 120
1644 self.WIDTHPROF = 120
1644 self.HEIGHTPROF = 0
1645 self.HEIGHTPROF = 0
1645 self.xdata = None
1646 self.xdata = None
1646 self.ydata = None
1647 self.ydata = None
1647
1648
1648 self.PLOT_CODE = MPHASE_CODE
1649 self.PLOT_CODE = MPHASE_CODE
1649
1650
1650 self.FTP_WEI = None
1651 self.FTP_WEI = None
1651 self.EXP_CODE = None
1652 self.EXP_CODE = None
1652 self.SUB_EXP_CODE = None
1653 self.SUB_EXP_CODE = None
1653 self.PLOT_POS = None
1654 self.PLOT_POS = None
1654
1655
1655
1656
1656 self.filename_phase = None
1657 self.filename_phase = None
1657
1658
1658 self.figfile = None
1659 self.figfile = None
1659
1660
1660 def getSubplots(self):
1661 def getSubplots(self):
1661
1662
1662 ncol = 1
1663 ncol = 1
1663 nrow = 1
1664 nrow = 1
1664
1665
1665 return nrow, ncol
1666 return nrow, ncol
1666
1667
1667 def setup(self, id, nplots, wintitle, showprofile=True, show=True):
1668 def setup(self, id, nplots, wintitle, showprofile=True, show=True):
1668
1669
1669 self.__showprofile = showprofile
1670 self.__showprofile = showprofile
1670 self.nplots = nplots
1671 self.nplots = nplots
1671
1672
1672 ncolspan = 7
1673 ncolspan = 7
1673 colspan = 6
1674 colspan = 6
1674 self.__nsubplots = 2
1675 self.__nsubplots = 2
1675
1676
1676 self.createFigure(id = id,
1677 self.createFigure(id = id,
1677 wintitle = wintitle,
1678 wintitle = wintitle,
1678 widthplot = self.WIDTH+self.WIDTHPROF,
1679 widthplot = self.WIDTH+self.WIDTHPROF,
1679 heightplot = self.HEIGHT+self.HEIGHTPROF,
1680 heightplot = self.HEIGHT+self.HEIGHTPROF,
1680 show=show)
1681 show=show)
1681
1682
1682 nrow, ncol = self.getSubplots()
1683 nrow, ncol = self.getSubplots()
1683
1684
1684 self.addAxes(nrow, ncol*ncolspan, 0, 0, colspan, 1)
1685 self.addAxes(nrow, ncol*ncolspan, 0, 0, colspan, 1)
1685
1686
1686
1687
1687 def run(self, dataOut, id, wintitle="", pairsList=None, showprofile='True',
1688 def run(self, dataOut, id, wintitle="", pairsList=None, showprofile='True',
1688 xmin=None, xmax=None, ymin=None, ymax=None,
1689 xmin=None, xmax=None, ymin=None, ymax=None,
1689 timerange=None,
1690 timerange=None,
1690 save=False, figpath='./', figfile=None, show=True, ftp=False, wr_period=1,
1691 save=False, figpath='./', figfile=None, show=True, ftp=False, wr_period=1,
1691 server=None, folder=None, username=None, password=None,
1692 server=None, folder=None, username=None, password=None,
1692 ftp_wei=0, exp_code=0, sub_exp_code=0, plot_pos=0):
1693 ftp_wei=0, exp_code=0, sub_exp_code=0, plot_pos=0):
1693
1694
1694
1695
1695 tmin = None
1696 tmin = None
1696 tmax = None
1697 tmax = None
1697 x = dataOut.getTimeRange1(dataOut.outputInterval)
1698 x = dataOut.getTimeRange1(dataOut.outputInterval)
1698 y = dataOut.getHeiRange()
1699 y = dataOut.getHeiRange()
1699
1700
1700
1701
1701 #thisDatetime = dataOut.datatime
1702 #thisDatetime = dataOut.datatime
1702 thisDatetime = datetime.datetime.utcfromtimestamp(dataOut.ltctime)
1703 thisDatetime = datetime.datetime.utcfromtimestamp(dataOut.ltctime)
1703 title = wintitle + " Phase of Beacon Signal" # : %s" %(thisDatetime.strftime("%d-%b-%Y"))
1704 title = wintitle + " Phase of Beacon Signal" # : %s" %(thisDatetime.strftime("%d-%b-%Y"))
1704 xlabel = "Local Time"
1705 xlabel = "Local Time"
1705 ylabel = "Phase"
1706 ylabel = "Phase"
1706
1707
1707
1708
1708 #phase = numpy.zeros((len(pairsIndexList),len(dataOut.beacon_heiIndexList)))
1709 #phase = numpy.zeros((len(pairsIndexList),len(dataOut.beacon_heiIndexList)))
1709 phase_beacon = dataOut.data_output
1710 phase_beacon = dataOut.data_output
1710 update_figfile = False
1711 update_figfile = False
1711
1712
1712 if not self.isConfig:
1713 if not self.isConfig:
1713
1714
1714 self.nplots = phase_beacon.size
1715 self.nplots = phase_beacon.size
1715
1716
1716 self.setup(id=id,
1717 self.setup(id=id,
1717 nplots=self.nplots,
1718 nplots=self.nplots,
1718 wintitle=wintitle,
1719 wintitle=wintitle,
1719 showprofile=showprofile,
1720 showprofile=showprofile,
1720 show=show)
1721 show=show)
1721
1722
1722 if timerange is not None:
1723 if timerange is not None:
1723 self.timerange = timerange
1724 self.timerange = timerange
1724
1725
1725 self.xmin, self.xmax = self.getTimeLim(x, xmin, xmax, timerange)
1726 self.xmin, self.xmax = self.getTimeLim(x, xmin, xmax, timerange)
1726
1727
1727 if ymin == None: ymin = numpy.nanmin(phase_beacon) - 10.0
1728 if ymin == None: ymin = numpy.nanmin(phase_beacon) - 10.0
1728 if ymax == None: ymax = numpy.nanmax(phase_beacon) + 10.0
1729 if ymax == None: ymax = numpy.nanmax(phase_beacon) + 10.0
1729
1730
1730 self.FTP_WEI = ftp_wei
1731 self.FTP_WEI = ftp_wei
1731 self.EXP_CODE = exp_code
1732 self.EXP_CODE = exp_code
1732 self.SUB_EXP_CODE = sub_exp_code
1733 self.SUB_EXP_CODE = sub_exp_code
1733 self.PLOT_POS = plot_pos
1734 self.PLOT_POS = plot_pos
1734
1735
1735 self.name = thisDatetime.strftime("%Y%m%d_%H%M%S")
1736 self.name = thisDatetime.strftime("%Y%m%d_%H%M%S")
1736 self.isConfig = True
1737 self.isConfig = True
1737 self.figfile = figfile
1738 self.figfile = figfile
1738 self.xdata = numpy.array([])
1739 self.xdata = numpy.array([])
1739 self.ydata = numpy.array([])
1740 self.ydata = numpy.array([])
1740
1741
1741 #open file beacon phase
1742 #open file beacon phase
1742 path = '%s%03d' %(self.PREFIX, self.id)
1743 path = '%s%03d' %(self.PREFIX, self.id)
1743 beacon_file = os.path.join(path,'%s.txt'%self.name)
1744 beacon_file = os.path.join(path,'%s.txt'%self.name)
1744 self.filename_phase = os.path.join(figpath,beacon_file)
1745 self.filename_phase = os.path.join(figpath,beacon_file)
1745 update_figfile = True
1746 update_figfile = True
1746
1747
1747
1748
1748 #store data beacon phase
1749 #store data beacon phase
1749 #self.save_data(self.filename_phase, phase_beacon, thisDatetime)
1750 #self.save_data(self.filename_phase, phase_beacon, thisDatetime)
1750
1751
1751 self.setWinTitle(title)
1752 self.setWinTitle(title)
1752
1753
1753
1754
1754 title = "Phase Offset %s" %(thisDatetime.strftime("%Y/%m/%d %H:%M:%S"))
1755 title = "Phase Offset %s" %(thisDatetime.strftime("%Y/%m/%d %H:%M:%S"))
1755
1756
1756 legendlabels = ["phase %d"%(chan) for chan in numpy.arange(self.nplots)]
1757 legendlabels = ["phase %d"%(chan) for chan in numpy.arange(self.nplots)]
1757
1758
1758 axes = self.axesList[0]
1759 axes = self.axesList[0]
1759
1760
1760 self.xdata = numpy.hstack((self.xdata, x[0:1]))
1761 self.xdata = numpy.hstack((self.xdata, x[0:1]))
1761
1762
1762 if len(self.ydata)==0:
1763 if len(self.ydata)==0:
1763 self.ydata = phase_beacon.reshape(-1,1)
1764 self.ydata = phase_beacon.reshape(-1,1)
1764 else:
1765 else:
1765 self.ydata = numpy.hstack((self.ydata, phase_beacon.reshape(-1,1)))
1766 self.ydata = numpy.hstack((self.ydata, phase_beacon.reshape(-1,1)))
1766
1767
1767
1768
1768 axes.pmultilineyaxis(x=self.xdata, y=self.ydata,
1769 axes.pmultilineyaxis(x=self.xdata, y=self.ydata,
1769 xmin=self.xmin, xmax=self.xmax, ymin=ymin, ymax=ymax,
1770 xmin=self.xmin, xmax=self.xmax, ymin=ymin, ymax=ymax,
1770 xlabel=xlabel, ylabel=ylabel, title=title, legendlabels=legendlabels, marker='x', markersize=8, linestyle="solid",
1771 xlabel=xlabel, ylabel=ylabel, title=title, legendlabels=legendlabels, marker='x', markersize=8, linestyle="solid",
1771 XAxisAsTime=True, grid='both'
1772 XAxisAsTime=True, grid='both'
1772 )
1773 )
1773
1774
1774 self.draw()
1775 self.draw()
1775
1776
1776 self.save(figpath=figpath,
1777 self.save(figpath=figpath,
1777 figfile=figfile,
1778 figfile=figfile,
1778 save=save,
1779 save=save,
1779 ftp=ftp,
1780 ftp=ftp,
1780 wr_period=wr_period,
1781 wr_period=wr_period,
1781 thisDatetime=thisDatetime,
1782 thisDatetime=thisDatetime,
1782 update_figfile=update_figfile)
1783 update_figfile=update_figfile)
1783
1784
1784 if dataOut.ltctime + dataOut.outputInterval >= self.xmax:
1785 if dataOut.ltctime + dataOut.outputInterval >= self.xmax:
1785 self.counter_imagwr = wr_period
1786 self.counter_imagwr = wr_period
1786 self.isConfig = False
1787 self.isConfig = False
1787 update_figfile = True
1788 update_figfile = True
1788
1789
1789
1790
1790
1791
1791 class NSMeteorDetection1Plot(Figure):
1792 class NSMeteorDetection1Plot(Figure):
1792
1793
1793 isConfig = None
1794 isConfig = None
1794 __nsubplots = None
1795 __nsubplots = None
1795
1796
1796 WIDTHPROF = None
1797 WIDTHPROF = None
1797 HEIGHTPROF = None
1798 HEIGHTPROF = None
1798 PREFIX = 'nsm'
1799 PREFIX = 'nsm'
1799
1800
1800 zminList = None
1801 zminList = None
1801 zmaxList = None
1802 zmaxList = None
1802 cmapList = None
1803 cmapList = None
1803 titleList = None
1804 titleList = None
1804 nPairs = None
1805 nPairs = None
1805 nChannels = None
1806 nChannels = None
1806 nParam = None
1807 nParam = None
1807
1808
1808 def __init__(self, **kwargs):
1809 def __init__(self, **kwargs):
1809 Figure.__init__(self, **kwargs)
1810 Figure.__init__(self, **kwargs)
1810 self.isConfig = False
1811 self.isConfig = False
1811 self.__nsubplots = 1
1812 self.__nsubplots = 1
1812
1813
1813 self.WIDTH = 750
1814 self.WIDTH = 750
1814 self.HEIGHT = 250
1815 self.HEIGHT = 250
1815 self.WIDTHPROF = 120
1816 self.WIDTHPROF = 120
1816 self.HEIGHTPROF = 0
1817 self.HEIGHTPROF = 0
1817 self.counter_imagwr = 0
1818 self.counter_imagwr = 0
1818
1819
1819 self.PLOT_CODE = SPEC_CODE
1820 self.PLOT_CODE = SPEC_CODE
1820
1821
1821 self.FTP_WEI = None
1822 self.FTP_WEI = None
1822 self.EXP_CODE = None
1823 self.EXP_CODE = None
1823 self.SUB_EXP_CODE = None
1824 self.SUB_EXP_CODE = None
1824 self.PLOT_POS = None
1825 self.PLOT_POS = None
1825
1826
1826 self.__xfilter_ena = False
1827 self.__xfilter_ena = False
1827 self.__yfilter_ena = False
1828 self.__yfilter_ena = False
1828
1829
1829 def getSubplots(self):
1830 def getSubplots(self):
1830
1831
1831 ncol = 3
1832 ncol = 3
1832 nrow = int(numpy.ceil(self.nplots/3.0))
1833 nrow = int(numpy.ceil(self.nplots/3.0))
1833
1834
1834 return nrow, ncol
1835 return nrow, ncol
1835
1836
1836 def setup(self, id, nplots, wintitle, show=True):
1837 def setup(self, id, nplots, wintitle, show=True):
1837
1838
1838 self.nplots = nplots
1839 self.nplots = nplots
1839
1840
1840 ncolspan = 1
1841 ncolspan = 1
1841 colspan = 1
1842 colspan = 1
1842
1843
1843 self.createFigure(id = id,
1844 self.createFigure(id = id,
1844 wintitle = wintitle,
1845 wintitle = wintitle,
1845 widthplot = self.WIDTH + self.WIDTHPROF,
1846 widthplot = self.WIDTH + self.WIDTHPROF,
1846 heightplot = self.HEIGHT + self.HEIGHTPROF,
1847 heightplot = self.HEIGHT + self.HEIGHTPROF,
1847 show=show)
1848 show=show)
1848
1849
1849 nrow, ncol = self.getSubplots()
1850 nrow, ncol = self.getSubplots()
1850
1851
1851 counter = 0
1852 counter = 0
1852 for y in range(nrow):
1853 for y in range(nrow):
1853 for x in range(ncol):
1854 for x in range(ncol):
1854
1855
1855 if counter >= self.nplots:
1856 if counter >= self.nplots:
1856 break
1857 break
1857
1858
1858 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan, colspan, 1)
1859 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan, colspan, 1)
1859
1860
1860 counter += 1
1861 counter += 1
1861
1862
1862 def run(self, dataOut, id, wintitle="", channelList=None, showprofile=True,
1863 def run(self, dataOut, id, wintitle="", channelList=None, showprofile=True,
1863 xmin=None, xmax=None, ymin=None, ymax=None, SNRmin=None, SNRmax=None,
1864 xmin=None, xmax=None, ymin=None, ymax=None, SNRmin=None, SNRmax=None,
1864 vmin=None, vmax=None, wmin=None, wmax=None, mode = 'SA',
1865 vmin=None, vmax=None, wmin=None, wmax=None, mode = 'SA',
1865 save=False, figpath='./', figfile=None, show=True, ftp=False, wr_period=1,
1866 save=False, figpath='./', figfile=None, show=True, ftp=False, wr_period=1,
1866 server=None, folder=None, username=None, password=None,
1867 server=None, folder=None, username=None, password=None,
1867 ftp_wei=0, exp_code=0, sub_exp_code=0, plot_pos=0, realtime=False,
1868 ftp_wei=0, exp_code=0, sub_exp_code=0, plot_pos=0, realtime=False,
1868 xaxis="frequency"):
1869 xaxis="frequency"):
1869
1870
1870 """
1871 """
1871
1872
1872 Input:
1873 Input:
1873 dataOut :
1874 dataOut :
1874 id :
1875 id :
1875 wintitle :
1876 wintitle :
1876 channelList :
1877 channelList :
1877 showProfile :
1878 showProfile :
1878 xmin : None,
1879 xmin : None,
1879 xmax : None,
1880 xmax : None,
1880 ymin : None,
1881 ymin : None,
1881 ymax : None,
1882 ymax : None,
1882 zmin : None,
1883 zmin : None,
1883 zmax : None
1884 zmax : None
1884 """
1885 """
1885 #SEPARAR EN DOS PLOTS
1886 #SEPARAR EN DOS PLOTS
1886 nParam = dataOut.data_param.shape[1] - 3
1887 nParam = dataOut.data_param.shape[1] - 3
1887
1888
1888 utctime = dataOut.data_param[0,0]
1889 utctime = dataOut.data_param[0,0]
1889 tmet = dataOut.data_param[:,1].astype(int)
1890 tmet = dataOut.data_param[:,1].astype(int)
1890 hmet = dataOut.data_param[:,2].astype(int)
1891 hmet = dataOut.data_param[:,2].astype(int)
1891
1892
1892 x = dataOut.abscissaList
1893 x = dataOut.abscissaList
1893 y = dataOut.heightList
1894 y = dataOut.heightList
1894
1895
1895 z = numpy.zeros((nParam, y.size, x.size - 1))
1896 z = numpy.zeros((nParam, y.size, x.size - 1))
1896 z[:,:] = numpy.nan
1897 z[:,:] = numpy.nan
1897 z[:,hmet,tmet] = dataOut.data_param[:,3:].T
1898 z[:,hmet,tmet] = dataOut.data_param[:,3:].T
1898 z[0,:,:] = 10*numpy.log10(z[0,:,:])
1899 z[0,:,:] = 10*numpy.log10(z[0,:,:])
1899
1900
1900 xlabel = "Time (s)"
1901 xlabel = "Time (s)"
1901 ylabel = "Range (km)"
1902 ylabel = "Range (km)"
1902
1903
1903 thisDatetime = datetime.datetime.utcfromtimestamp(dataOut.ltctime)
1904 thisDatetime = datetime.datetime.utcfromtimestamp(dataOut.ltctime)
1904
1905
1905 if not self.isConfig:
1906 if not self.isConfig:
1906
1907
1907 nplots = nParam
1908 nplots = nParam
1908
1909
1909 self.setup(id=id,
1910 self.setup(id=id,
1910 nplots=nplots,
1911 nplots=nplots,
1911 wintitle=wintitle,
1912 wintitle=wintitle,
1912 show=show)
1913 show=show)
1913
1914
1914 if xmin is None: xmin = numpy.nanmin(x)
1915 if xmin is None: xmin = numpy.nanmin(x)
1915 if xmax is None: xmax = numpy.nanmax(x)
1916 if xmax is None: xmax = numpy.nanmax(x)
1916 if ymin is None: ymin = numpy.nanmin(y)
1917 if ymin is None: ymin = numpy.nanmin(y)
1917 if ymax is None: ymax = numpy.nanmax(y)
1918 if ymax is None: ymax = numpy.nanmax(y)
1918 if SNRmin is None: SNRmin = numpy.nanmin(z[0,:])
1919 if SNRmin is None: SNRmin = numpy.nanmin(z[0,:])
1919 if SNRmax is None: SNRmax = numpy.nanmax(z[0,:])
1920 if SNRmax is None: SNRmax = numpy.nanmax(z[0,:])
1920 if vmax is None: vmax = numpy.nanmax(numpy.abs(z[1,:]))
1921 if vmax is None: vmax = numpy.nanmax(numpy.abs(z[1,:]))
1921 if vmin is None: vmin = -vmax
1922 if vmin is None: vmin = -vmax
1922 if wmin is None: wmin = 0
1923 if wmin is None: wmin = 0
1923 if wmax is None: wmax = 50
1924 if wmax is None: wmax = 50
1924
1925
1925 pairsList = dataOut.groupList
1926 pairsList = dataOut.groupList
1926 self.nPairs = len(dataOut.groupList)
1927 self.nPairs = len(dataOut.groupList)
1927
1928
1928 zminList = [SNRmin, vmin, cmin] + [pmin]*self.nPairs
1929 zminList = [SNRmin, vmin, cmin] + [pmin]*self.nPairs
1929 zmaxList = [SNRmax, vmax, cmax] + [pmax]*self.nPairs
1930 zmaxList = [SNRmax, vmax, cmax] + [pmax]*self.nPairs
1930 titleList = ["SNR","Radial Velocity","Coherence"]
1931 titleList = ["SNR","Radial Velocity","Coherence"]
1931 cmapList = ["jet","RdBu_r","jet"]
1932 cmapList = ["jet","RdBu_r","jet"]
1932
1933
1933 for i in range(self.nPairs):
1934 for i in range(self.nPairs):
1934 strAux1 = "Phase Difference "+ str(pairsList[i][0]) + str(pairsList[i][1])
1935 strAux1 = "Phase Difference "+ str(pairsList[i][0]) + str(pairsList[i][1])
1935 titleList = titleList + [strAux1]
1936 titleList = titleList + [strAux1]
1936 cmapList = cmapList + ["RdBu_r"]
1937 cmapList = cmapList + ["RdBu_r"]
1937
1938
1938 self.zminList = zminList
1939 self.zminList = zminList
1939 self.zmaxList = zmaxList
1940 self.zmaxList = zmaxList
1940 self.cmapList = cmapList
1941 self.cmapList = cmapList
1941 self.titleList = titleList
1942 self.titleList = titleList
1942
1943
1943 self.FTP_WEI = ftp_wei
1944 self.FTP_WEI = ftp_wei
1944 self.EXP_CODE = exp_code
1945 self.EXP_CODE = exp_code
1945 self.SUB_EXP_CODE = sub_exp_code
1946 self.SUB_EXP_CODE = sub_exp_code
1946 self.PLOT_POS = plot_pos
1947 self.PLOT_POS = plot_pos
1947
1948
1948 self.isConfig = True
1949 self.isConfig = True
1949
1950
1950 str_datetime = '%s %s'%(thisDatetime.strftime("%Y/%m/%d"),thisDatetime.strftime("%H:%M:%S"))
1951 str_datetime = '%s %s'%(thisDatetime.strftime("%Y/%m/%d"),thisDatetime.strftime("%H:%M:%S"))
1951
1952
1952 for i in range(nParam):
1953 for i in range(nParam):
1953 title = self.titleList[i] + ": " +str_datetime
1954 title = self.titleList[i] + ": " +str_datetime
1954 axes = self.axesList[i]
1955 axes = self.axesList[i]
1955 axes.pcolor(x, y, z[i,:].T,
1956 axes.pcolor(x, y, z[i,:].T,
1956 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax, zmin=self.zminList[i], zmax=self.zmaxList[i],
1957 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax, zmin=self.zminList[i], zmax=self.zmaxList[i],
1957 xlabel=xlabel, ylabel=ylabel, title=title, colormap=self.cmapList[i],ticksize=9, cblabel='')
1958 xlabel=xlabel, ylabel=ylabel, title=title, colormap=self.cmapList[i],ticksize=9, cblabel='')
1958 self.draw()
1959 self.draw()
1959
1960
1960 if figfile == None:
1961 if figfile == None:
1961 str_datetime = thisDatetime.strftime("%Y%m%d_%H%M%S")
1962 str_datetime = thisDatetime.strftime("%Y%m%d_%H%M%S")
1962 name = str_datetime
1963 name = str_datetime
1963 if ((dataOut.azimuth!=None) and (dataOut.zenith!=None)):
1964 if ((dataOut.azimuth!=None) and (dataOut.zenith!=None)):
1964 name = name + '_az' + '_%2.2f'%(dataOut.azimuth) + '_zn' + '_%2.2f'%(dataOut.zenith)
1965 name = name + '_az' + '_%2.2f'%(dataOut.azimuth) + '_zn' + '_%2.2f'%(dataOut.zenith)
1965 figfile = self.getFilename(name)
1966 figfile = self.getFilename(name)
1966
1967
1967 self.save(figpath=figpath,
1968 self.save(figpath=figpath,
1968 figfile=figfile,
1969 figfile=figfile,
1969 save=save,
1970 save=save,
1970 ftp=ftp,
1971 ftp=ftp,
1971 wr_period=wr_period,
1972 wr_period=wr_period,
1972 thisDatetime=thisDatetime)
1973 thisDatetime=thisDatetime)
1973
1974
1974
1975
1975 class NSMeteorDetection2Plot(Figure):
1976 class NSMeteorDetection2Plot(Figure):
1976
1977
1977 isConfig = None
1978 isConfig = None
1978 __nsubplots = None
1979 __nsubplots = None
1979
1980
1980 WIDTHPROF = None
1981 WIDTHPROF = None
1981 HEIGHTPROF = None
1982 HEIGHTPROF = None
1982 PREFIX = 'nsm'
1983 PREFIX = 'nsm'
1983
1984
1984 zminList = None
1985 zminList = None
1985 zmaxList = None
1986 zmaxList = None
1986 cmapList = None
1987 cmapList = None
1987 titleList = None
1988 titleList = None
1988 nPairs = None
1989 nPairs = None
1989 nChannels = None
1990 nChannels = None
1990 nParam = None
1991 nParam = None
1991
1992
1992 def __init__(self, **kwargs):
1993 def __init__(self, **kwargs):
1993 Figure.__init__(self, **kwargs)
1994 Figure.__init__(self, **kwargs)
1994 self.isConfig = False
1995 self.isConfig = False
1995 self.__nsubplots = 1
1996 self.__nsubplots = 1
1996
1997
1997 self.WIDTH = 750
1998 self.WIDTH = 750
1998 self.HEIGHT = 250
1999 self.HEIGHT = 250
1999 self.WIDTHPROF = 120
2000 self.WIDTHPROF = 120
2000 self.HEIGHTPROF = 0
2001 self.HEIGHTPROF = 0
2001 self.counter_imagwr = 0
2002 self.counter_imagwr = 0
2002
2003
2003 self.PLOT_CODE = SPEC_CODE
2004 self.PLOT_CODE = SPEC_CODE
2004
2005
2005 self.FTP_WEI = None
2006 self.FTP_WEI = None
2006 self.EXP_CODE = None
2007 self.EXP_CODE = None
2007 self.SUB_EXP_CODE = None
2008 self.SUB_EXP_CODE = None
2008 self.PLOT_POS = None
2009 self.PLOT_POS = None
2009
2010
2010 self.__xfilter_ena = False
2011 self.__xfilter_ena = False
2011 self.__yfilter_ena = False
2012 self.__yfilter_ena = False
2012
2013
2013 def getSubplots(self):
2014 def getSubplots(self):
2014
2015
2015 ncol = 3
2016 ncol = 3
2016 nrow = int(numpy.ceil(self.nplots/3.0))
2017 nrow = int(numpy.ceil(self.nplots/3.0))
2017
2018
2018 return nrow, ncol
2019 return nrow, ncol
2019
2020
2020 def setup(self, id, nplots, wintitle, show=True):
2021 def setup(self, id, nplots, wintitle, show=True):
2021
2022
2022 self.nplots = nplots
2023 self.nplots = nplots
2023
2024
2024 ncolspan = 1
2025 ncolspan = 1
2025 colspan = 1
2026 colspan = 1
2026
2027
2027 self.createFigure(id = id,
2028 self.createFigure(id = id,
2028 wintitle = wintitle,
2029 wintitle = wintitle,
2029 widthplot = self.WIDTH + self.WIDTHPROF,
2030 widthplot = self.WIDTH + self.WIDTHPROF,
2030 heightplot = self.HEIGHT + self.HEIGHTPROF,
2031 heightplot = self.HEIGHT + self.HEIGHTPROF,
2031 show=show)
2032 show=show)
2032
2033
2033 nrow, ncol = self.getSubplots()
2034 nrow, ncol = self.getSubplots()
2034
2035
2035 counter = 0
2036 counter = 0
2036 for y in range(nrow):
2037 for y in range(nrow):
2037 for x in range(ncol):
2038 for x in range(ncol):
2038
2039
2039 if counter >= self.nplots:
2040 if counter >= self.nplots:
2040 break
2041 break
2041
2042
2042 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan, colspan, 1)
2043 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan, colspan, 1)
2043
2044
2044 counter += 1
2045 counter += 1
2045
2046
2046 def run(self, dataOut, id, wintitle="", channelList=None, showprofile=True,
2047 def run(self, dataOut, id, wintitle="", channelList=None, showprofile=True,
2047 xmin=None, xmax=None, ymin=None, ymax=None, SNRmin=None, SNRmax=None,
2048 xmin=None, xmax=None, ymin=None, ymax=None, SNRmin=None, SNRmax=None,
2048 vmin=None, vmax=None, wmin=None, wmax=None, mode = 'SA',
2049 vmin=None, vmax=None, wmin=None, wmax=None, mode = 'SA',
2049 save=False, figpath='./', figfile=None, show=True, ftp=False, wr_period=1,
2050 save=False, figpath='./', figfile=None, show=True, ftp=False, wr_period=1,
2050 server=None, folder=None, username=None, password=None,
2051 server=None, folder=None, username=None, password=None,
2051 ftp_wei=0, exp_code=0, sub_exp_code=0, plot_pos=0, realtime=False,
2052 ftp_wei=0, exp_code=0, sub_exp_code=0, plot_pos=0, realtime=False,
2052 xaxis="frequency"):
2053 xaxis="frequency"):
2053
2054
2054 """
2055 """
2055
2056
2056 Input:
2057 Input:
2057 dataOut :
2058 dataOut :
2058 id :
2059 id :
2059 wintitle :
2060 wintitle :
2060 channelList :
2061 channelList :
2061 showProfile :
2062 showProfile :
2062 xmin : None,
2063 xmin : None,
2063 xmax : None,
2064 xmax : None,
2064 ymin : None,
2065 ymin : None,
2065 ymax : None,
2066 ymax : None,
2066 zmin : None,
2067 zmin : None,
2067 zmax : None
2068 zmax : None
2068 """
2069 """
2069 #Rebuild matrix
2070 #Rebuild matrix
2070 utctime = dataOut.data_param[0,0]
2071 utctime = dataOut.data_param[0,0]
2071 cmet = dataOut.data_param[:,1].astype(int)
2072 cmet = dataOut.data_param[:,1].astype(int)
2072 tmet = dataOut.data_param[:,2].astype(int)
2073 tmet = dataOut.data_param[:,2].astype(int)
2073 hmet = dataOut.data_param[:,3].astype(int)
2074 hmet = dataOut.data_param[:,3].astype(int)
2074
2075
2075 nParam = 3
2076 nParam = 3
2076 nChan = len(dataOut.groupList)
2077 nChan = len(dataOut.groupList)
2077 x = dataOut.abscissaList
2078 x = dataOut.abscissaList
2078 y = dataOut.heightList
2079 y = dataOut.heightList
2079
2080
2080 z = numpy.full((nChan, nParam, y.size, x.size - 1),numpy.nan)
2081 z = numpy.full((nChan, nParam, y.size, x.size - 1),numpy.nan)
2081 z[cmet,:,hmet,tmet] = dataOut.data_param[:,4:]
2082 z[cmet,:,hmet,tmet] = dataOut.data_param[:,4:]
2082 z[:,0,:,:] = 10*numpy.log10(z[:,0,:,:]) #logarithmic scale
2083 z[:,0,:,:] = 10*numpy.log10(z[:,0,:,:]) #logarithmic scale
2083 z = numpy.reshape(z, (nChan*nParam, y.size, x.size-1))
2084 z = numpy.reshape(z, (nChan*nParam, y.size, x.size-1))
2084
2085
2085 xlabel = "Time (s)"
2086 xlabel = "Time (s)"
2086 ylabel = "Range (km)"
2087 ylabel = "Range (km)"
2087
2088
2088 thisDatetime = datetime.datetime.utcfromtimestamp(dataOut.ltctime)
2089 thisDatetime = datetime.datetime.utcfromtimestamp(dataOut.ltctime)
2089
2090
2090 if not self.isConfig:
2091 if not self.isConfig:
2091
2092
2092 nplots = nParam*nChan
2093 nplots = nParam*nChan
2093
2094
2094 self.setup(id=id,
2095 self.setup(id=id,
2095 nplots=nplots,
2096 nplots=nplots,
2096 wintitle=wintitle,
2097 wintitle=wintitle,
2097 show=show)
2098 show=show)
2098
2099
2099 if xmin is None: xmin = numpy.nanmin(x)
2100 if xmin is None: xmin = numpy.nanmin(x)
2100 if xmax is None: xmax = numpy.nanmax(x)
2101 if xmax is None: xmax = numpy.nanmax(x)
2101 if ymin is None: ymin = numpy.nanmin(y)
2102 if ymin is None: ymin = numpy.nanmin(y)
2102 if ymax is None: ymax = numpy.nanmax(y)
2103 if ymax is None: ymax = numpy.nanmax(y)
2103 if SNRmin is None: SNRmin = numpy.nanmin(z[0,:])
2104 if SNRmin is None: SNRmin = numpy.nanmin(z[0,:])
2104 if SNRmax is None: SNRmax = numpy.nanmax(z[0,:])
2105 if SNRmax is None: SNRmax = numpy.nanmax(z[0,:])
2105 if vmax is None: vmax = numpy.nanmax(numpy.abs(z[1,:]))
2106 if vmax is None: vmax = numpy.nanmax(numpy.abs(z[1,:]))
2106 if vmin is None: vmin = -vmax
2107 if vmin is None: vmin = -vmax
2107 if wmin is None: wmin = 0
2108 if wmin is None: wmin = 0
2108 if wmax is None: wmax = 50
2109 if wmax is None: wmax = 50
2109
2110
2110 self.nChannels = nChan
2111 self.nChannels = nChan
2111
2112
2112 zminList = []
2113 zminList = []
2113 zmaxList = []
2114 zmaxList = []
2114 titleList = []
2115 titleList = []
2115 cmapList = []
2116 cmapList = []
2116 for i in range(self.nChannels):
2117 for i in range(self.nChannels):
2117 strAux1 = "SNR Channel "+ str(i)
2118 strAux1 = "SNR Channel "+ str(i)
2118 strAux2 = "Radial Velocity Channel "+ str(i)
2119 strAux2 = "Radial Velocity Channel "+ str(i)
2119 strAux3 = "Spectral Width Channel "+ str(i)
2120 strAux3 = "Spectral Width Channel "+ str(i)
2120
2121
2121 titleList = titleList + [strAux1,strAux2,strAux3]
2122 titleList = titleList + [strAux1,strAux2,strAux3]
2122 cmapList = cmapList + ["jet","RdBu_r","jet"]
2123 cmapList = cmapList + ["jet","RdBu_r","jet"]
2123 zminList = zminList + [SNRmin,vmin,wmin]
2124 zminList = zminList + [SNRmin,vmin,wmin]
2124 zmaxList = zmaxList + [SNRmax,vmax,wmax]
2125 zmaxList = zmaxList + [SNRmax,vmax,wmax]
2125
2126
2126 self.zminList = zminList
2127 self.zminList = zminList
2127 self.zmaxList = zmaxList
2128 self.zmaxList = zmaxList
2128 self.cmapList = cmapList
2129 self.cmapList = cmapList
2129 self.titleList = titleList
2130 self.titleList = titleList
2130
2131
2131 self.FTP_WEI = ftp_wei
2132 self.FTP_WEI = ftp_wei
2132 self.EXP_CODE = exp_code
2133 self.EXP_CODE = exp_code
2133 self.SUB_EXP_CODE = sub_exp_code
2134 self.SUB_EXP_CODE = sub_exp_code
2134 self.PLOT_POS = plot_pos
2135 self.PLOT_POS = plot_pos
2135
2136
2136 self.isConfig = True
2137 self.isConfig = True
2137
2138
2138 str_datetime = '%s %s'%(thisDatetime.strftime("%Y/%m/%d"),thisDatetime.strftime("%H:%M:%S"))
2139 str_datetime = '%s %s'%(thisDatetime.strftime("%Y/%m/%d"),thisDatetime.strftime("%H:%M:%S"))
2139
2140
2140 for i in range(self.nplots):
2141 for i in range(self.nplots):
2141 title = self.titleList[i] + ": " +str_datetime
2142 title = self.titleList[i] + ": " +str_datetime
2142 axes = self.axesList[i]
2143 axes = self.axesList[i]
2143 axes.pcolor(x, y, z[i,:].T,
2144 axes.pcolor(x, y, z[i,:].T,
2144 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax, zmin=self.zminList[i], zmax=self.zmaxList[i],
2145 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax, zmin=self.zminList[i], zmax=self.zmaxList[i],
2145 xlabel=xlabel, ylabel=ylabel, title=title, colormap=self.cmapList[i],ticksize=9, cblabel='')
2146 xlabel=xlabel, ylabel=ylabel, title=title, colormap=self.cmapList[i],ticksize=9, cblabel='')
2146 self.draw()
2147 self.draw()
2147
2148
2148 if figfile == None:
2149 if figfile == None:
2149 str_datetime = thisDatetime.strftime("%Y%m%d_%H%M%S")
2150 str_datetime = thisDatetime.strftime("%Y%m%d_%H%M%S")
2150 name = str_datetime
2151 name = str_datetime
2151 if ((dataOut.azimuth!=None) and (dataOut.zenith!=None)):
2152 if ((dataOut.azimuth!=None) and (dataOut.zenith!=None)):
2152 name = name + '_az' + '_%2.2f'%(dataOut.azimuth) + '_zn' + '_%2.2f'%(dataOut.zenith)
2153 name = name + '_az' + '_%2.2f'%(dataOut.azimuth) + '_zn' + '_%2.2f'%(dataOut.zenith)
2153 figfile = self.getFilename(name)
2154 figfile = self.getFilename(name)
2154
2155
2155 self.save(figpath=figpath,
2156 self.save(figpath=figpath,
2156 figfile=figfile,
2157 figfile=figfile,
2157 save=save,
2158 save=save,
2158 ftp=ftp,
2159 ftp=ftp,
2159 wr_period=wr_period,
2160 wr_period=wr_period,
2160 thisDatetime=thisDatetime)
2161 thisDatetime=thisDatetime)
@@ -1,1605 +1,1605
1 '''
1 '''
2 Created on Jul 9, 2014
2 Created on Jul 9, 2014
3
3
4 @author: roj-idl71
4 @author: roj-idl71
5 '''
5 '''
6 import os
6 import os
7 import datetime
7 import datetime
8 import numpy
8 import numpy
9
9
10 import matplotlib.pyplot as plt
10 import matplotlib.pyplot as plt
11
11
12 from figure import Figure, isRealtime, isTimeInHourRange
12 from figure import Figure, isRealtime, isTimeInHourRange
13 from plotting_codes import *
13 from plotting_codes import *
14 from matplotlib.pyplot import savefig
14 from matplotlib.pyplot import savefig
15
15
16 class SpectraPlot(Figure):
16 class SpectraPlot(Figure):
17
17
18 isConfig = None
18 isConfig = None
19 __nsubplots = None
19 __nsubplots = None
20
20
21 WIDTHPROF = None
21 WIDTHPROF = None
22 HEIGHTPROF = None
22 HEIGHTPROF = None
23 PREFIX = 'spc'
23 PREFIX = 'spc'
24
24
25 def __init__(self, **kwargs):
25 def __init__(self, **kwargs):
26 Figure.__init__(self, **kwargs)
26 Figure.__init__(self, **kwargs)
27 self.isConfig = False
27 self.isConfig = False
28 self.__nsubplots = 1
28 self.__nsubplots = 1
29
29
30 self.WIDTH = 300
30 self.WIDTH = 300
31 self.HEIGHT = 300
31 self.HEIGHT = 300
32 self.WIDTHPROF = 120
32 self.WIDTHPROF = 120
33 self.HEIGHTPROF = 0
33 self.HEIGHTPROF = 0
34 self.counter_imagwr = 0
34 self.counter_imagwr = 0
35
35
36 self.PLOT_CODE = SPEC_CODE
36 self.PLOT_CODE = SPEC_CODE
37
37
38 self.FTP_WEI = None
38 self.FTP_WEI = None
39 self.EXP_CODE = None
39 self.EXP_CODE = None
40 self.SUB_EXP_CODE = None
40 self.SUB_EXP_CODE = None
41 self.PLOT_POS = None
41 self.PLOT_POS = None
42
42
43 self.__xfilter_ena = False
43 self.__xfilter_ena = False
44 self.__yfilter_ena = False
44 self.__yfilter_ena = False
45
45
46 self.indice=1
46 self.indice=1
47
47
48 def getSubplots(self):
48 def getSubplots(self):
49
49
50 ncol = int(numpy.sqrt(self.nplots)+0.9)
50 ncol = int(numpy.sqrt(self.nplots)+0.9)
51 nrow = int(self.nplots*1./ncol + 0.9)
51 nrow = int(self.nplots*1./ncol + 0.9)
52
52
53 return nrow, ncol
53 return nrow, ncol
54
54
55 def setup(self, id, nplots, wintitle, showprofile=True, show=True):
55 def setup(self, id, nplots, wintitle, showprofile=True, show=True):
56
56
57 self.__showprofile = showprofile
57 self.__showprofile = showprofile
58 self.nplots = nplots
58 self.nplots = nplots
59
59
60 ncolspan = 1
60 ncolspan = 1
61 colspan = 1
61 colspan = 1
62 if showprofile:
62 if showprofile:
63 ncolspan = 3
63 ncolspan = 3
64 colspan = 2
64 colspan = 2
65 self.__nsubplots = 2
65 self.__nsubplots = 2
66
66
67 self.createFigure(id = id,
67 self.createFigure(id = id,
68 wintitle = wintitle,
68 wintitle = wintitle,
69 widthplot = self.WIDTH + self.WIDTHPROF,
69 widthplot = self.WIDTH + self.WIDTHPROF,
70 heightplot = self.HEIGHT + self.HEIGHTPROF,
70 heightplot = self.HEIGHT + self.HEIGHTPROF,
71 show=show)
71 show=show)
72
72
73 nrow, ncol = self.getSubplots()
73 nrow, ncol = self.getSubplots()
74
74
75 counter = 0
75 counter = 0
76 for y in range(nrow):
76 for y in range(nrow):
77 for x in range(ncol):
77 for x in range(ncol):
78
78
79 if counter >= self.nplots:
79 if counter >= self.nplots:
80 break
80 break
81
81
82 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan, colspan, 1)
82 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan, colspan, 1)
83
83
84 if showprofile:
84 if showprofile:
85 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan+colspan, 1, 1)
85 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan+colspan, 1, 1)
86
86
87 counter += 1
87 counter += 1
88
88
89 def run(self, dataOut, id, wintitle="", channelList=None, showprofile=True,
89 def run(self, dataOut, id, wintitle="", channelList=None, showprofile=True,
90 xmin=None, xmax=None, ymin=None, ymax=None, zmin=None, zmax=None,
90 xmin=None, xmax=None, ymin=None, ymax=None, zmin=None, zmax=None,
91 save=False, figpath='./', figfile=None, show=True, ftp=False, wr_period=1,
91 save=False, figpath='./', figfile=None, show=True, ftp=False, wr_period=1,
92 server=None, folder=None, username=None, password=None,
92 server=None, folder=None, username=None, password=None,
93 ftp_wei=0, exp_code=0, sub_exp_code=0, plot_pos=0, realtime=False,
93 ftp_wei=0, exp_code=0, sub_exp_code=0, plot_pos=0, realtime=False,
94 xaxis="frequency", colormap='jet', normFactor=None):
94 xaxis="frequency", colormap='jet', normFactor=None):
95
95
96 """
96 """
97
97
98 Input:
98 Input:
99 dataOut :
99 dataOut :
100 id :
100 id :
101 wintitle :
101 wintitle :
102 channelList :
102 channelList :
103 showProfile :
103 showProfile :
104 xmin : None,
104 xmin : None,
105 xmax : None,
105 xmax : None,
106 ymin : None,
106 ymin : None,
107 ymax : None,
107 ymax : None,
108 zmin : None,
108 zmin : None,
109 zmax : None
109 zmax : None
110 """
110 """
111 if realtime:
111 if realtime:
112 if not(isRealtime(utcdatatime = dataOut.utctime)):
112 if not(isRealtime(utcdatatime = dataOut.utctime)):
113 print 'Skipping this plot function'
113 print 'Skipping this plot function'
114 return
114 return
115
115
116 if channelList == None:
116 if channelList == None:
117 channelIndexList = dataOut.channelIndexList
117 channelIndexList = dataOut.channelIndexList
118 else:
118 else:
119 channelIndexList = []
119 channelIndexList = []
120 for channel in channelList:
120 for channel in channelList:
121 if channel not in dataOut.channelList:
121 if channel not in dataOut.channelList:
122 raise ValueError, "Channel %d is not in dataOut.channelList" %channel
122 raise ValueError, "Channel %d is not in dataOut.channelList" %channel
123 channelIndexList.append(dataOut.channelList.index(channel))
123 channelIndexList.append(dataOut.channelList.index(channel))
124
124
125 if normFactor is None:
125 if normFactor is None:
126 factor = dataOut.normFactor
126 factor = dataOut.normFactor
127 else:
127 else:
128 factor = normFactor
128 factor = normFactor
129 if xaxis == "frequency":
129 if xaxis == "frequency":
130 x = dataOut.getFreqRange(1)/1000.
130 x = dataOut.getFreqRange(1)/1000.
131 xlabel = "Frequency (kHz)"
131 xlabel = "Frequency (kHz)"
132
132
133 elif xaxis == "time":
133 elif xaxis == "time":
134 x = dataOut.getAcfRange(1)
134 x = dataOut.getAcfRange(1)
135 xlabel = "Time (ms)"
135 xlabel = "Time (ms)"
136
136
137 else:
137 else:
138 x = dataOut.getVelRange(1)
138 x = dataOut.getVelRange(1)
139 xlabel = "Velocity (m/s)"
139 xlabel = "Velocity (m/s)"
140
140
141 ylabel = "Range (Km)"
141 ylabel = "Range (Km)"
142
142
143 y = dataOut.getHeiRange()
143 y = dataOut.getHeiRange()
144
144 print 'dataOut.normFactor', dataOut.normFactor
145 z = dataOut.data_spc/factor
145 z = dataOut.data_spc/factor
146 z = numpy.where(numpy.isfinite(z), z, numpy.NAN)
146 z = numpy.where(numpy.isfinite(z), z, numpy.NAN)
147 zdB = 10*numpy.log10(z)
147 zdB = 10*numpy.log10(z)
148
148
149 avg = numpy.average(z, axis=1)
149 avg = numpy.average(z, axis=1)
150 avgdB = 10*numpy.log10(avg)
150 avgdB = 10*numpy.log10(avg)
151
151
152 noise = dataOut.getNoise()/factor
152 noise = dataOut.getNoise()/factor
153 noisedB = 10*numpy.log10(noise)
153 noisedB = 10*numpy.log10(noise)
154
154
155 thisDatetime = datetime.datetime.utcfromtimestamp(dataOut.getTimeRange()[0])
155 thisDatetime = datetime.datetime.utcfromtimestamp(dataOut.getTimeRange()[0])
156 title = wintitle + " Spectra"
156 title = wintitle + " Spectra"
157
157
158
158
159
159
160 print 'len de X',len(x), numpy.shape(x), 'len de spc line',len(dataOut.data_spc[1,:,15]), numpy.shape(dataOut.data_spc)
160 print 'len de X',len(x), numpy.shape(x), 'len de spc line',len(dataOut.data_spc[1,:,15]), numpy.shape(dataOut.data_spc)
161 print 'Altura:', y[0], y[1], y[13], y[14], y[10]
161 print 'Altura:', y[0], y[1], y[13], y[14], y[10]
162 #a=z[1,:,15]
162 #a=z[1,:,15]
163
163
164 # fig = plt.figure(10+self.indice)
164 # fig = plt.figure(10+self.indice)
165 # plt.plot( x[0:128], zdB[0,:,10] )
165 # plt.plot( x[0:128], zdB[0,:,10] )
166 # plt.axis([-12, 12, 15, 50])
166 # plt.axis([-12, 12, 15, 50])
167 # plt.title(" %s" %( '%s %s'%(thisDatetime.strftime("%Y/%m/%d"),thisDatetime.strftime("%H:%M:%S"))) )
167 # plt.title(" %s" %( '%s %s'%(thisDatetime.strftime("%Y/%m/%d"),thisDatetime.strftime("%H:%M:%S"))) )
168 # plt.ylabel('Intensidad [dB]')
168 # plt.ylabel('Intensidad [dB]')
169 # plt.xlabel('Velocidad [m/s]')
169 # plt.xlabel('Velocidad [m/s]')
170 # fig.savefig('/home/erick/Documents/Pics/to{}.png'.format(self.indice))
170 # fig.savefig('/home/erick/Documents/Pics/to{}.png'.format(self.indice))
171 #
171 #
172 # plt.show()
172 # plt.show()
173 #
173 #
174 # self.indice=self.indice+1
174 # self.indice=self.indice+1
175
175
176
176
177
177
178 if ((dataOut.azimuth!=None) and (dataOut.zenith!=None)):
178 if ((dataOut.azimuth!=None) and (dataOut.zenith!=None)):
179 title = title + '_' + 'azimuth,zenith=%2.2f,%2.2f'%(dataOut.azimuth, dataOut.zenith)
179 title = title + '_' + 'azimuth,zenith=%2.2f,%2.2f'%(dataOut.azimuth, dataOut.zenith)
180
180
181 if not self.isConfig:
181 if not self.isConfig:
182
182
183 nplots = len(channelIndexList)
183 nplots = len(channelIndexList)
184
184
185 self.setup(id=id,
185 self.setup(id=id,
186 nplots=nplots,
186 nplots=nplots,
187 wintitle=wintitle,
187 wintitle=wintitle,
188 showprofile=showprofile,
188 showprofile=showprofile,
189 show=show)
189 show=show)
190
190
191 if xmin == None: xmin = numpy.nanmin(x)
191 if xmin == None: xmin = numpy.nanmin(x)
192 if xmax == None: xmax = numpy.nanmax(x)
192 if xmax == None: xmax = numpy.nanmax(x)
193 if ymin == None: ymin = numpy.nanmin(y)
193 if ymin == None: ymin = numpy.nanmin(y)
194 if ymax == None: ymax = numpy.nanmax(y)
194 if ymax == None: ymax = numpy.nanmax(y)
195 if zmin == None: zmin = numpy.floor(numpy.nanmin(noisedB)) - 3
195 if zmin == None: zmin = numpy.floor(numpy.nanmin(noisedB)) - 3
196 if zmax == None: zmax = numpy.ceil(numpy.nanmax(avgdB)) + 3
196 if zmax == None: zmax = numpy.ceil(numpy.nanmax(avgdB)) + 3
197
197
198 self.FTP_WEI = ftp_wei
198 self.FTP_WEI = ftp_wei
199 self.EXP_CODE = exp_code
199 self.EXP_CODE = exp_code
200 self.SUB_EXP_CODE = sub_exp_code
200 self.SUB_EXP_CODE = sub_exp_code
201 self.PLOT_POS = plot_pos
201 self.PLOT_POS = plot_pos
202
202
203 self.isConfig = True
203 self.isConfig = True
204
204
205 self.setWinTitle(title)
205 self.setWinTitle(title)
206
206
207 for i in range(self.nplots):
207 for i in range(self.nplots):
208 index = channelIndexList[i]
208 index = channelIndexList[i]
209 str_datetime = '%s %s'%(thisDatetime.strftime("%Y/%m/%d"),thisDatetime.strftime("%H:%M:%S"))
209 str_datetime = '%s %s'%(thisDatetime.strftime("%Y/%m/%d"),thisDatetime.strftime("%H:%M:%S"))
210 title = "Channel %d: %4.2fdB: %s" %(dataOut.channelList[index], noisedB[index], str_datetime)
210 title = "Channel %d: %4.2fdB: %s" %(dataOut.channelList[index], noisedB[index], str_datetime)
211 if len(dataOut.beam.codeList) != 0:
211 if len(dataOut.beam.codeList) != 0:
212 title = "Ch%d:%4.2fdB,%2.2f,%2.2f:%s" %(dataOut.channelList[index], noisedB[index], dataOut.beam.azimuthList[index], dataOut.beam.zenithList[index], str_datetime)
212 title = "Ch%d:%4.2fdB,%2.2f,%2.2f:%s" %(dataOut.channelList[index], noisedB[index], dataOut.beam.azimuthList[index], dataOut.beam.zenithList[index], str_datetime)
213
213
214 axes = self.axesList[i*self.__nsubplots]
214 axes = self.axesList[i*self.__nsubplots]
215 axes.pcolor(x, y, zdB[index,:,:],
215 axes.pcolor(x, y, zdB[index,:,:],
216 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax, zmin=zmin, zmax=zmax,
216 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax, zmin=zmin, zmax=zmax,
217 xlabel=xlabel, ylabel=ylabel, title=title, colormap=colormap,
217 xlabel=xlabel, ylabel=ylabel, title=title, colormap=colormap,
218 ticksize=9, cblabel='')
218 ticksize=9, cblabel='')
219
219
220 if self.__showprofile:
220 if self.__showprofile:
221 axes = self.axesList[i*self.__nsubplots +1]
221 axes = self.axesList[i*self.__nsubplots +1]
222 axes.pline(avgdB[index,:], y,
222 axes.pline(avgdB[index,:], y,
223 xmin=zmin, xmax=zmax, ymin=ymin, ymax=ymax,
223 xmin=zmin, xmax=zmax, ymin=ymin, ymax=ymax,
224 xlabel='dB', ylabel='', title='',
224 xlabel='dB', ylabel='', title='',
225 ytick_visible=False,
225 ytick_visible=False,
226 grid='x')
226 grid='x')
227
227
228 noiseline = numpy.repeat(noisedB[index], len(y))
228 noiseline = numpy.repeat(noisedB[index], len(y))
229 axes.addpline(noiseline, y, idline=1, color="black", linestyle="dashed", lw=2)
229 axes.addpline(noiseline, y, idline=1, color="black", linestyle="dashed", lw=2)
230
230
231 self.draw()
231 self.draw()
232
232
233 if figfile == None:
233 if figfile == None:
234 str_datetime = thisDatetime.strftime("%Y%m%d_%H%M%S")
234 str_datetime = thisDatetime.strftime("%Y%m%d_%H%M%S")
235 name = str_datetime
235 name = str_datetime
236 if ((dataOut.azimuth!=None) and (dataOut.zenith!=None)):
236 if ((dataOut.azimuth!=None) and (dataOut.zenith!=None)):
237 name = name + '_az' + '_%2.2f'%(dataOut.azimuth) + '_zn' + '_%2.2f'%(dataOut.zenith)
237 name = name + '_az' + '_%2.2f'%(dataOut.azimuth) + '_zn' + '_%2.2f'%(dataOut.zenith)
238 figfile = self.getFilename(name)
238 figfile = self.getFilename(name)
239
239
240 self.save(figpath=figpath,
240 self.save(figpath=figpath,
241 figfile=figfile,
241 figfile=figfile,
242 save=save,
242 save=save,
243 ftp=ftp,
243 ftp=ftp,
244 wr_period=wr_period,
244 wr_period=wr_period,
245 thisDatetime=thisDatetime)
245 thisDatetime=thisDatetime)
246
246
247
247
248 class CrossSpectraPlot(Figure):
248 class CrossSpectraPlot(Figure):
249
249
250 isConfig = None
250 isConfig = None
251 __nsubplots = None
251 __nsubplots = None
252
252
253 WIDTH = None
253 WIDTH = None
254 HEIGHT = None
254 HEIGHT = None
255 WIDTHPROF = None
255 WIDTHPROF = None
256 HEIGHTPROF = None
256 HEIGHTPROF = None
257 PREFIX = 'cspc'
257 PREFIX = 'cspc'
258
258
259 def __init__(self, **kwargs):
259 def __init__(self, **kwargs):
260 Figure.__init__(self, **kwargs)
260 Figure.__init__(self, **kwargs)
261 self.isConfig = False
261 self.isConfig = False
262 self.__nsubplots = 4
262 self.__nsubplots = 4
263 self.counter_imagwr = 0
263 self.counter_imagwr = 0
264 self.WIDTH = 250
264 self.WIDTH = 250
265 self.HEIGHT = 250
265 self.HEIGHT = 250
266 self.WIDTHPROF = 0
266 self.WIDTHPROF = 0
267 self.HEIGHTPROF = 0
267 self.HEIGHTPROF = 0
268
268
269 self.PLOT_CODE = CROSS_CODE
269 self.PLOT_CODE = CROSS_CODE
270 self.FTP_WEI = None
270 self.FTP_WEI = None
271 self.EXP_CODE = None
271 self.EXP_CODE = None
272 self.SUB_EXP_CODE = None
272 self.SUB_EXP_CODE = None
273 self.PLOT_POS = None
273 self.PLOT_POS = None
274
274
275 self.indice=0
275 self.indice=0
276
276
277 def getSubplots(self):
277 def getSubplots(self):
278
278
279 ncol = 4
279 ncol = 4
280 nrow = self.nplots
280 nrow = self.nplots
281
281
282 return nrow, ncol
282 return nrow, ncol
283
283
284 def setup(self, id, nplots, wintitle, showprofile=True, show=True):
284 def setup(self, id, nplots, wintitle, showprofile=True, show=True):
285
285
286 self.__showprofile = showprofile
286 self.__showprofile = showprofile
287 self.nplots = nplots
287 self.nplots = nplots
288
288
289 ncolspan = 1
289 ncolspan = 1
290 colspan = 1
290 colspan = 1
291
291
292 self.createFigure(id = id,
292 self.createFigure(id = id,
293 wintitle = wintitle,
293 wintitle = wintitle,
294 widthplot = self.WIDTH + self.WIDTHPROF,
294 widthplot = self.WIDTH + self.WIDTHPROF,
295 heightplot = self.HEIGHT + self.HEIGHTPROF,
295 heightplot = self.HEIGHT + self.HEIGHTPROF,
296 show=True)
296 show=True)
297
297
298 nrow, ncol = self.getSubplots()
298 nrow, ncol = self.getSubplots()
299
299
300 counter = 0
300 counter = 0
301 for y in range(nrow):
301 for y in range(nrow):
302 for x in range(ncol):
302 for x in range(ncol):
303 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan, colspan, 1)
303 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan, colspan, 1)
304
304
305 counter += 1
305 counter += 1
306
306
307 def run(self, dataOut, id, wintitle="", pairsList=None,
307 def run(self, dataOut, id, wintitle="", pairsList=None,
308 xmin=None, xmax=None, ymin=None, ymax=None, zmin=None, zmax=None,
308 xmin=None, xmax=None, ymin=None, ymax=None, zmin=None, zmax=None,
309 coh_min=None, coh_max=None, phase_min=None, phase_max=None,
309 coh_min=None, coh_max=None, phase_min=None, phase_max=None,
310 save=False, figpath='./', figfile=None, ftp=False, wr_period=1,
310 save=False, figpath='./', figfile=None, ftp=False, wr_period=1,
311 power_cmap='jet', coherence_cmap='jet', phase_cmap='RdBu_r', show=True,
311 power_cmap='jet', coherence_cmap='jet', phase_cmap='RdBu_r', show=True,
312 server=None, folder=None, username=None, password=None,
312 server=None, folder=None, username=None, password=None,
313 ftp_wei=0, exp_code=0, sub_exp_code=0, plot_pos=0, normFactor=None,
313 ftp_wei=0, exp_code=0, sub_exp_code=0, plot_pos=0, normFactor=None,
314 xaxis='frequency'):
314 xaxis='frequency'):
315
315
316 """
316 """
317
317
318 Input:
318 Input:
319 dataOut :
319 dataOut :
320 id :
320 id :
321 wintitle :
321 wintitle :
322 channelList :
322 channelList :
323 showProfile :
323 showProfile :
324 xmin : None,
324 xmin : None,
325 xmax : None,
325 xmax : None,
326 ymin : None,
326 ymin : None,
327 ymax : None,
327 ymax : None,
328 zmin : None,
328 zmin : None,
329 zmax : None
329 zmax : None
330 """
330 """
331
331
332 if pairsList == None:
332 if pairsList == None:
333 pairsIndexList = dataOut.pairsIndexList
333 pairsIndexList = dataOut.pairsIndexList
334 else:
334 else:
335 pairsIndexList = []
335 pairsIndexList = []
336 for pair in pairsList:
336 for pair in pairsList:
337 if pair not in dataOut.pairsList:
337 if pair not in dataOut.pairsList:
338 raise ValueError, "Pair %s is not in dataOut.pairsList" %str(pair)
338 raise ValueError, "Pair %s is not in dataOut.pairsList" %str(pair)
339 pairsIndexList.append(dataOut.pairsList.index(pair))
339 pairsIndexList.append(dataOut.pairsList.index(pair))
340
340
341 if not pairsIndexList:
341 if not pairsIndexList:
342 return
342 return
343
343
344 if len(pairsIndexList) > 4:
344 if len(pairsIndexList) > 4:
345 pairsIndexList = pairsIndexList[0:4]
345 pairsIndexList = pairsIndexList[0:4]
346
346
347 if normFactor is None:
347 if normFactor is None:
348 factor = dataOut.normFactor
348 factor = dataOut.normFactor
349 else:
349 else:
350 factor = normFactor
350 factor = normFactor
351 x = dataOut.getVelRange(1)
351 x = dataOut.getVelRange(1)
352 y = dataOut.getHeiRange()
352 y = dataOut.getHeiRange()
353 z = dataOut.data_spc[:,:,:]/factor
353 z = dataOut.data_spc[:,:,:]/factor
354 z = numpy.where(numpy.isfinite(z), z, numpy.NAN)
354 z = numpy.where(numpy.isfinite(z), z, numpy.NAN)
355
355
356 noise = dataOut.noise/factor
356 noise = dataOut.noise/factor
357
357
358 zdB = 10*numpy.log10(z)
358 zdB = 10*numpy.log10(z)
359 noisedB = 10*numpy.log10(noise)
359 noisedB = 10*numpy.log10(noise)
360
360
361 if coh_min == None:
361 if coh_min == None:
362 coh_min = 0.0
362 coh_min = 0.0
363 if coh_max == None:
363 if coh_max == None:
364 coh_max = 1.0
364 coh_max = 1.0
365
365
366 if phase_min == None:
366 if phase_min == None:
367 phase_min = -180
367 phase_min = -180
368 if phase_max == None:
368 if phase_max == None:
369 phase_max = 180
369 phase_max = 180
370
370
371 #thisDatetime = dataOut.datatime
371 #thisDatetime = dataOut.datatime
372 thisDatetime = datetime.datetime.utcfromtimestamp(dataOut.getTimeRange()[0])
372 thisDatetime = datetime.datetime.utcfromtimestamp(dataOut.getTimeRange()[0])
373 title = wintitle + " Cross-Spectra: %s" %(thisDatetime.strftime("%d-%b-%Y %H:%M:%S"))
373 title = wintitle + " Cross-Spectra: %s" %(thisDatetime.strftime("%d-%b-%Y %H:%M:%S"))
374 # xlabel = "Velocity (m/s)"
374 # xlabel = "Velocity (m/s)"
375 ylabel = "Range (Km)"
375 ylabel = "Range (Km)"
376
376
377 if xaxis == "frequency":
377 if xaxis == "frequency":
378 x = dataOut.getFreqRange(1)/1000.
378 x = dataOut.getFreqRange(1)/1000.
379 xlabel = "Frequency (kHz)"
379 xlabel = "Frequency (kHz)"
380
380
381 elif xaxis == "time":
381 elif xaxis == "time":
382 x = dataOut.getAcfRange(1)
382 x = dataOut.getAcfRange(1)
383 xlabel = "Time (ms)"
383 xlabel = "Time (ms)"
384
384
385 else:
385 else:
386 x = dataOut.getVelRange(1)
386 x = dataOut.getVelRange(1)
387 xlabel = "Velocity (m/s)"
387 xlabel = "Velocity (m/s)"
388
388
389 if not self.isConfig:
389 if not self.isConfig:
390
390
391 nplots = len(pairsIndexList)
391 nplots = len(pairsIndexList)
392
392
393 self.setup(id=id,
393 self.setup(id=id,
394 nplots=nplots,
394 nplots=nplots,
395 wintitle=wintitle,
395 wintitle=wintitle,
396 showprofile=False,
396 showprofile=False,
397 show=show)
397 show=show)
398
398
399 avg = numpy.abs(numpy.average(z, axis=1))
399 avg = numpy.abs(numpy.average(z, axis=1))
400 avgdB = 10*numpy.log10(avg)
400 avgdB = 10*numpy.log10(avg)
401
401
402 if xmin == None: xmin = numpy.nanmin(x)
402 if xmin == None: xmin = numpy.nanmin(x)
403 if xmax == None: xmax = numpy.nanmax(x)
403 if xmax == None: xmax = numpy.nanmax(x)
404 if ymin == None: ymin = numpy.nanmin(y)
404 if ymin == None: ymin = numpy.nanmin(y)
405 if ymax == None: ymax = numpy.nanmax(y)
405 if ymax == None: ymax = numpy.nanmax(y)
406 if zmin == None: zmin = numpy.floor(numpy.nanmin(noisedB)) - 3
406 if zmin == None: zmin = numpy.floor(numpy.nanmin(noisedB)) - 3
407 if zmax == None: zmax = numpy.ceil(numpy.nanmax(avgdB)) + 3
407 if zmax == None: zmax = numpy.ceil(numpy.nanmax(avgdB)) + 3
408
408
409 self.FTP_WEI = ftp_wei
409 self.FTP_WEI = ftp_wei
410 self.EXP_CODE = exp_code
410 self.EXP_CODE = exp_code
411 self.SUB_EXP_CODE = sub_exp_code
411 self.SUB_EXP_CODE = sub_exp_code
412 self.PLOT_POS = plot_pos
412 self.PLOT_POS = plot_pos
413
413
414 self.isConfig = True
414 self.isConfig = True
415
415
416 self.setWinTitle(title)
416 self.setWinTitle(title)
417
417
418
418
419 for i in range(self.nplots):
419 for i in range(self.nplots):
420 pair = dataOut.pairsList[pairsIndexList[i]]
420 pair = dataOut.pairsList[pairsIndexList[i]]
421
421
422 chan_index0 = dataOut.channelList.index(pair[0])
422 chan_index0 = dataOut.channelList.index(pair[0])
423 chan_index1 = dataOut.channelList.index(pair[1])
423 chan_index1 = dataOut.channelList.index(pair[1])
424
424
425 str_datetime = '%s %s'%(thisDatetime.strftime("%Y/%m/%d"),thisDatetime.strftime("%H:%M:%S"))
425 str_datetime = '%s %s'%(thisDatetime.strftime("%Y/%m/%d"),thisDatetime.strftime("%H:%M:%S"))
426 title = "Ch%d: %4.2fdB: %s" %(pair[0], noisedB[chan_index0], str_datetime)
426 title = "Ch%d: %4.2fdB: %s" %(pair[0], noisedB[chan_index0], str_datetime)
427 zdB = 10.*numpy.log10(dataOut.data_spc[chan_index0,:,:]/factor)
427 zdB = 10.*numpy.log10(dataOut.data_spc[chan_index0,:,:]/factor)
428 axes0 = self.axesList[i*self.__nsubplots]
428 axes0 = self.axesList[i*self.__nsubplots]
429 axes0.pcolor(x, y, zdB,
429 axes0.pcolor(x, y, zdB,
430 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax, zmin=zmin, zmax=zmax,
430 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax, zmin=zmin, zmax=zmax,
431 xlabel=xlabel, ylabel=ylabel, title=title,
431 xlabel=xlabel, ylabel=ylabel, title=title,
432 ticksize=9, colormap=power_cmap, cblabel='')
432 ticksize=9, colormap=power_cmap, cblabel='')
433
433
434 title = "Ch%d: %4.2fdB: %s" %(pair[1], noisedB[chan_index1], str_datetime)
434 title = "Ch%d: %4.2fdB: %s" %(pair[1], noisedB[chan_index1], str_datetime)
435 zdB = 10.*numpy.log10(dataOut.data_spc[chan_index1,:,:]/factor)
435 zdB = 10.*numpy.log10(dataOut.data_spc[chan_index1,:,:]/factor)
436 axes0 = self.axesList[i*self.__nsubplots+1]
436 axes0 = self.axesList[i*self.__nsubplots+1]
437 axes0.pcolor(x, y, zdB,
437 axes0.pcolor(x, y, zdB,
438 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax, zmin=zmin, zmax=zmax,
438 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax, zmin=zmin, zmax=zmax,
439 xlabel=xlabel, ylabel=ylabel, title=title,
439 xlabel=xlabel, ylabel=ylabel, title=title,
440 ticksize=9, colormap=power_cmap, cblabel='')
440 ticksize=9, colormap=power_cmap, cblabel='')
441
441
442 coherenceComplex = dataOut.data_cspc[pairsIndexList[i],:,:] / numpy.sqrt( dataOut.data_spc[chan_index0,:,:]*dataOut.data_spc[chan_index1,:,:] )
442 coherenceComplex = dataOut.data_cspc[pairsIndexList[i],:,:] / numpy.sqrt( dataOut.data_spc[chan_index0,:,:]*dataOut.data_spc[chan_index1,:,:] )
443 coherence = numpy.abs(coherenceComplex)
443 coherence = numpy.abs(coherenceComplex)
444 # phase = numpy.arctan(-1*coherenceComplex.imag/coherenceComplex.real)*180/numpy.pi
444 # phase = numpy.arctan(-1*coherenceComplex.imag/coherenceComplex.real)*180/numpy.pi
445 phase = numpy.arctan2(coherenceComplex.imag, coherenceComplex.real)*180/numpy.pi
445 phase = numpy.arctan2(coherenceComplex.imag, coherenceComplex.real)*180/numpy.pi
446
446
447
447
448
448
449
449
450 # #print 'FASE', numpy.shape(phase), y[25]
450 # #print 'FASE', numpy.shape(phase), y[25]
451 # fig = plt.figure(10+self.indice)
451 # fig = plt.figure(10+self.indice)
452 # #plt.plot( x[0:256],coherence[:,25] )
452 # #plt.plot( x[0:256],coherence[:,25] )
453 # cohAv = numpy.average(coherence,1)
453 # cohAv = numpy.average(coherence,1)
454 #
454 #
455 # plt.plot( x[0:256],cohAv )
455 # plt.plot( x[0:256],cohAv )
456 # #plt.axis([-12, 12, 15, 50])
456 # #plt.axis([-12, 12, 15, 50])
457 # plt.title("%s" %( '%s %s, Channel %s'%(thisDatetime.strftime("%Y/%m/%d"),thisDatetime.strftime("%H:%M:%S") , i)))
457 # plt.title("%s" %( '%s %s, Channel %s'%(thisDatetime.strftime("%Y/%m/%d"),thisDatetime.strftime("%H:%M:%S") , i)))
458 # plt.ylabel('Desfase [grados]')
458 # plt.ylabel('Desfase [grados]')
459 # plt.xlabel('Velocidad [m/s]')
459 # plt.xlabel('Velocidad [m/s]')
460 # fig.savefig('/home/erick/Documents/Pics/to{}.png'.format(self.indice))
460 # fig.savefig('/home/erick/Documents/Pics/to{}.png'.format(self.indice))
461 #
461 #
462 # plt.show()
462 # plt.show()
463 # self.indice=self.indice+1
463 # self.indice=self.indice+1
464
464
465
465
466 # print 'FASE', numpy.shape(phase), y[25]
466 # print 'FASE', numpy.shape(phase), y[25]
467 # fig = plt.figure(10+self.indice)
467 # fig = plt.figure(10+self.indice)
468 # plt.plot( x[0:256],phase[:,25] )
468 # plt.plot( x[0:256],phase[:,25] )
469 # #plt.axis([-12, 12, 15, 50])
469 # #plt.axis([-12, 12, 15, 50])
470 # plt.title("%s" %( '%s %s, Channel %s'%(thisDatetime.strftime("%Y/%m/%d"),thisDatetime.strftime("%H:%M:%S") , i)))
470 # plt.title("%s" %( '%s %s, Channel %s'%(thisDatetime.strftime("%Y/%m/%d"),thisDatetime.strftime("%H:%M:%S") , i)))
471 # plt.ylabel('Desfase [grados]')
471 # plt.ylabel('Desfase [grados]')
472 # plt.xlabel('Velocidad [m/s]')
472 # plt.xlabel('Velocidad [m/s]')
473 # fig.savefig('/home/erick/Documents/Pics/to{}.png'.format(self.indice))
473 # fig.savefig('/home/erick/Documents/Pics/to{}.png'.format(self.indice))
474 #
474 #
475 # plt.show()
475 # plt.show()
476 # self.indice=self.indice+1
476 # self.indice=self.indice+1
477
477
478
478
479
479
480
480
481 title = "Coherence Ch%d * Ch%d" %(pair[0], pair[1])
481 title = "Coherence Ch%d * Ch%d" %(pair[0], pair[1])
482 axes0 = self.axesList[i*self.__nsubplots+2]
482 axes0 = self.axesList[i*self.__nsubplots+2]
483 axes0.pcolor(x, y, coherence,
483 axes0.pcolor(x, y, coherence,
484 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax, zmin=coh_min, zmax=coh_max,
484 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax, zmin=coh_min, zmax=coh_max,
485 xlabel=xlabel, ylabel=ylabel, title=title,
485 xlabel=xlabel, ylabel=ylabel, title=title,
486 ticksize=9, colormap=coherence_cmap, cblabel='')
486 ticksize=9, colormap=coherence_cmap, cblabel='')
487
487
488 title = "Phase Ch%d * Ch%d" %(pair[0], pair[1])
488 title = "Phase Ch%d * Ch%d" %(pair[0], pair[1])
489 axes0 = self.axesList[i*self.__nsubplots+3]
489 axes0 = self.axesList[i*self.__nsubplots+3]
490 axes0.pcolor(x, y, phase,
490 axes0.pcolor(x, y, phase,
491 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax, zmin=phase_min, zmax=phase_max,
491 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax, zmin=phase_min, zmax=phase_max,
492 xlabel=xlabel, ylabel=ylabel, title=title,
492 xlabel=xlabel, ylabel=ylabel, title=title,
493 ticksize=9, colormap=phase_cmap, cblabel='')
493 ticksize=9, colormap=phase_cmap, cblabel='')
494
494
495
495
496
496
497 self.draw()
497 self.draw()
498
498
499 self.save(figpath=figpath,
499 self.save(figpath=figpath,
500 figfile=figfile,
500 figfile=figfile,
501 save=save,
501 save=save,
502 ftp=ftp,
502 ftp=ftp,
503 wr_period=wr_period,
503 wr_period=wr_period,
504 thisDatetime=thisDatetime)
504 thisDatetime=thisDatetime)
505
505
506
506
507 class RTIPlot(Figure):
507 class RTIPlot(Figure):
508
508
509 __isConfig = None
509 __isConfig = None
510 __nsubplots = None
510 __nsubplots = None
511
511
512 WIDTHPROF = None
512 WIDTHPROF = None
513 HEIGHTPROF = None
513 HEIGHTPROF = None
514 PREFIX = 'rti'
514 PREFIX = 'rti'
515
515
516 def __init__(self, **kwargs):
516 def __init__(self, **kwargs):
517
517
518 Figure.__init__(self, **kwargs)
518 Figure.__init__(self, **kwargs)
519 self.timerange = None
519 self.timerange = None
520 self.isConfig = False
520 self.isConfig = False
521 self.__nsubplots = 1
521 self.__nsubplots = 1
522
522
523 self.WIDTH = 800
523 self.WIDTH = 800
524 self.HEIGHT = 250
524 self.HEIGHT = 250
525 self.WIDTHPROF = 120
525 self.WIDTHPROF = 120
526 self.HEIGHTPROF = 0
526 self.HEIGHTPROF = 0
527 self.counter_imagwr = 0
527 self.counter_imagwr = 0
528
528
529 self.PLOT_CODE = RTI_CODE
529 self.PLOT_CODE = RTI_CODE
530
530
531 self.FTP_WEI = None
531 self.FTP_WEI = None
532 self.EXP_CODE = None
532 self.EXP_CODE = None
533 self.SUB_EXP_CODE = None
533 self.SUB_EXP_CODE = None
534 self.PLOT_POS = None
534 self.PLOT_POS = None
535 self.tmin = None
535 self.tmin = None
536 self.tmax = None
536 self.tmax = None
537
537
538 self.xmin = None
538 self.xmin = None
539 self.xmax = None
539 self.xmax = None
540
540
541 self.figfile = None
541 self.figfile = None
542
542
543 def getSubplots(self):
543 def getSubplots(self):
544
544
545 ncol = 1
545 ncol = 1
546 nrow = self.nplots
546 nrow = self.nplots
547
547
548 return nrow, ncol
548 return nrow, ncol
549
549
550 def setup(self, id, nplots, wintitle, showprofile=True, show=True):
550 def setup(self, id, nplots, wintitle, showprofile=True, show=True):
551
551
552 self.__showprofile = showprofile
552 self.__showprofile = showprofile
553 self.nplots = nplots
553 self.nplots = nplots
554
554
555 ncolspan = 1
555 ncolspan = 1
556 colspan = 1
556 colspan = 1
557 if showprofile:
557 if showprofile:
558 ncolspan = 7
558 ncolspan = 7
559 colspan = 6
559 colspan = 6
560 self.__nsubplots = 2
560 self.__nsubplots = 2
561
561
562 self.createFigure(id = id,
562 self.createFigure(id = id,
563 wintitle = wintitle,
563 wintitle = wintitle,
564 widthplot = self.WIDTH + self.WIDTHPROF,
564 widthplot = self.WIDTH + self.WIDTHPROF,
565 heightplot = self.HEIGHT + self.HEIGHTPROF,
565 heightplot = self.HEIGHT + self.HEIGHTPROF,
566 show=show)
566 show=show)
567
567
568 nrow, ncol = self.getSubplots()
568 nrow, ncol = self.getSubplots()
569
569
570 counter = 0
570 counter = 0
571 for y in range(nrow):
571 for y in range(nrow):
572 for x in range(ncol):
572 for x in range(ncol):
573
573
574 if counter >= self.nplots:
574 if counter >= self.nplots:
575 break
575 break
576
576
577 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan, colspan, 1)
577 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan, colspan, 1)
578
578
579 if showprofile:
579 if showprofile:
580 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan+colspan, 1, 1)
580 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan+colspan, 1, 1)
581
581
582 counter += 1
582 counter += 1
583
583
584 def run(self, dataOut, id, wintitle="", channelList=None, showprofile='True',
584 def run(self, dataOut, id, wintitle="", channelList=None, showprofile='True',
585 xmin=None, xmax=None, ymin=None, ymax=None, zmin=None, zmax=None,
585 xmin=None, xmax=None, ymin=None, ymax=None, zmin=None, zmax=None,
586 timerange=None, colormap='jet',
586 timerange=None, colormap='jet',
587 save=False, figpath='./', lastone=0,figfile=None, ftp=False, wr_period=1, show=True,
587 save=False, figpath='./', lastone=0,figfile=None, ftp=False, wr_period=1, show=True,
588 server=None, folder=None, username=None, password=None,
588 server=None, folder=None, username=None, password=None,
589 ftp_wei=0, exp_code=0, sub_exp_code=0, plot_pos=0, normFactor=None, HEIGHT=None):
589 ftp_wei=0, exp_code=0, sub_exp_code=0, plot_pos=0, normFactor=None, HEIGHT=None):
590
590
591 """
591 """
592
592
593 Input:
593 Input:
594 dataOut :
594 dataOut :
595 id :
595 id :
596 wintitle :
596 wintitle :
597 channelList :
597 channelList :
598 showProfile :
598 showProfile :
599 xmin : None,
599 xmin : None,
600 xmax : None,
600 xmax : None,
601 ymin : None,
601 ymin : None,
602 ymax : None,
602 ymax : None,
603 zmin : None,
603 zmin : None,
604 zmax : None
604 zmax : None
605 """
605 """
606
606
607 #colormap = kwargs.get('colormap', 'jet')
607 #colormap = kwargs.get('colormap', 'jet')
608 if HEIGHT is not None:
608 if HEIGHT is not None:
609 self.HEIGHT = HEIGHT
609 self.HEIGHT = HEIGHT
610
610
611 if not isTimeInHourRange(dataOut.datatime, xmin, xmax):
611 if not isTimeInHourRange(dataOut.datatime, xmin, xmax):
612 return
612 return
613
613
614 if channelList == None:
614 if channelList == None:
615 channelIndexList = dataOut.channelIndexList
615 channelIndexList = dataOut.channelIndexList
616 else:
616 else:
617 channelIndexList = []
617 channelIndexList = []
618 for channel in channelList:
618 for channel in channelList:
619 if channel not in dataOut.channelList:
619 if channel not in dataOut.channelList:
620 raise ValueError, "Channel %d is not in dataOut.channelList"
620 raise ValueError, "Channel %d is not in dataOut.channelList"
621 channelIndexList.append(dataOut.channelList.index(channel))
621 channelIndexList.append(dataOut.channelList.index(channel))
622
622
623 if normFactor is None:
623 if normFactor is None:
624 factor = dataOut.normFactor
624 factor = dataOut.normFactor
625 else:
625 else:
626 factor = normFactor
626 factor = normFactor
627
627
628 # factor = dataOut.normFactor
628 # factor = dataOut.normFactor
629 x = dataOut.getTimeRange()
629 x = dataOut.getTimeRange()
630 y = dataOut.getHeiRange()
630 y = dataOut.getHeiRange()
631
631
632 z = dataOut.data_spc/factor
632 z = dataOut.data_spc/factor
633 z = numpy.where(numpy.isfinite(z), z, numpy.NAN)
633 z = numpy.where(numpy.isfinite(z), z, numpy.NAN)
634 avg = numpy.average(z, axis=1)
634 avg = numpy.average(z, axis=1)
635 avgdB = 10.*numpy.log10(avg)
635 avgdB = 10.*numpy.log10(avg)
636 # avgdB = dataOut.getPower()
636 # avgdB = dataOut.getPower()
637
637
638
638
639 thisDatetime = dataOut.datatime
639 thisDatetime = dataOut.datatime
640 # thisDatetime = datetime.datetime.utcfromtimestamp(dataOut.getTimeRange()[0])
640 # thisDatetime = datetime.datetime.utcfromtimestamp(dataOut.getTimeRange()[0])
641 title = wintitle + " RTI" #: %s" %(thisDatetime.strftime("%d-%b-%Y"))
641 title = wintitle + " RTI" #: %s" %(thisDatetime.strftime("%d-%b-%Y"))
642 xlabel = ""
642 xlabel = ""
643 ylabel = "Range (Km)"
643 ylabel = "Range (Km)"
644
644
645 update_figfile = False
645 update_figfile = False
646
646
647 if dataOut.ltctime >= self.xmax:
647 if dataOut.ltctime >= self.xmax:
648 self.counter_imagwr = wr_period
648 self.counter_imagwr = wr_period
649 self.isConfig = False
649 self.isConfig = False
650 update_figfile = True
650 update_figfile = True
651
651
652 if not self.isConfig:
652 if not self.isConfig:
653
653
654 nplots = len(channelIndexList)
654 nplots = len(channelIndexList)
655
655
656 self.setup(id=id,
656 self.setup(id=id,
657 nplots=nplots,
657 nplots=nplots,
658 wintitle=wintitle,
658 wintitle=wintitle,
659 showprofile=showprofile,
659 showprofile=showprofile,
660 show=show)
660 show=show)
661
661
662 if timerange != None:
662 if timerange != None:
663 self.timerange = timerange
663 self.timerange = timerange
664
664
665 self.xmin, self.xmax = self.getTimeLim(x, xmin, xmax, timerange)
665 self.xmin, self.xmax = self.getTimeLim(x, xmin, xmax, timerange)
666
666
667 noise = dataOut.noise/factor
667 noise = dataOut.noise/factor
668 noisedB = 10*numpy.log10(noise)
668 noisedB = 10*numpy.log10(noise)
669
669
670 if ymin == None: ymin = numpy.nanmin(y)
670 if ymin == None: ymin = numpy.nanmin(y)
671 if ymax == None: ymax = numpy.nanmax(y)
671 if ymax == None: ymax = numpy.nanmax(y)
672 if zmin == None: zmin = numpy.floor(numpy.nanmin(noisedB)) - 3
672 if zmin == None: zmin = numpy.floor(numpy.nanmin(noisedB)) - 3
673 if zmax == None: zmax = numpy.ceil(numpy.nanmax(avgdB)) + 3
673 if zmax == None: zmax = numpy.ceil(numpy.nanmax(avgdB)) + 3
674
674
675 self.FTP_WEI = ftp_wei
675 self.FTP_WEI = ftp_wei
676 self.EXP_CODE = exp_code
676 self.EXP_CODE = exp_code
677 self.SUB_EXP_CODE = sub_exp_code
677 self.SUB_EXP_CODE = sub_exp_code
678 self.PLOT_POS = plot_pos
678 self.PLOT_POS = plot_pos
679
679
680 self.name = thisDatetime.strftime("%Y%m%d_%H%M%S")
680 self.name = thisDatetime.strftime("%Y%m%d_%H%M%S")
681 self.isConfig = True
681 self.isConfig = True
682 self.figfile = figfile
682 self.figfile = figfile
683 update_figfile = True
683 update_figfile = True
684
684
685 self.setWinTitle(title)
685 self.setWinTitle(title)
686
686
687 for i in range(self.nplots):
687 for i in range(self.nplots):
688 index = channelIndexList[i]
688 index = channelIndexList[i]
689 title = "Channel %d: %s" %(dataOut.channelList[index], thisDatetime.strftime("%Y/%m/%d %H:%M:%S"))
689 title = "Channel %d: %s" %(dataOut.channelList[index], thisDatetime.strftime("%Y/%m/%d %H:%M:%S"))
690 if ((dataOut.azimuth!=None) and (dataOut.zenith!=None)):
690 if ((dataOut.azimuth!=None) and (dataOut.zenith!=None)):
691 title = title + '_' + 'azimuth,zenith=%2.2f,%2.2f'%(dataOut.azimuth, dataOut.zenith)
691 title = title + '_' + 'azimuth,zenith=%2.2f,%2.2f'%(dataOut.azimuth, dataOut.zenith)
692 axes = self.axesList[i*self.__nsubplots]
692 axes = self.axesList[i*self.__nsubplots]
693 zdB = avgdB[index].reshape((1,-1))
693 zdB = avgdB[index].reshape((1,-1))
694 axes.pcolorbuffer(x, y, zdB,
694 axes.pcolorbuffer(x, y, zdB,
695 xmin=self.xmin, xmax=self.xmax, ymin=ymin, ymax=ymax, zmin=zmin, zmax=zmax,
695 xmin=self.xmin, xmax=self.xmax, ymin=ymin, ymax=ymax, zmin=zmin, zmax=zmax,
696 xlabel=xlabel, ylabel=ylabel, title=title, rti=True, XAxisAsTime=True,
696 xlabel=xlabel, ylabel=ylabel, title=title, rti=True, XAxisAsTime=True,
697 ticksize=9, cblabel='', cbsize="1%", colormap=colormap)
697 ticksize=9, cblabel='', cbsize="1%", colormap=colormap)
698
698
699 if self.__showprofile:
699 if self.__showprofile:
700 axes = self.axesList[i*self.__nsubplots +1]
700 axes = self.axesList[i*self.__nsubplots +1]
701 axes.pline(avgdB[index], y,
701 axes.pline(avgdB[index], y,
702 xmin=zmin, xmax=zmax, ymin=ymin, ymax=ymax,
702 xmin=zmin, xmax=zmax, ymin=ymin, ymax=ymax,
703 xlabel='dB', ylabel='', title='',
703 xlabel='dB', ylabel='', title='',
704 ytick_visible=False,
704 ytick_visible=False,
705 grid='x')
705 grid='x')
706
706
707 self.draw()
707 self.draw()
708
708
709 self.save(figpath=figpath,
709 self.save(figpath=figpath,
710 figfile=figfile,
710 figfile=figfile,
711 save=save,
711 save=save,
712 ftp=ftp,
712 ftp=ftp,
713 wr_period=wr_period,
713 wr_period=wr_period,
714 thisDatetime=thisDatetime,
714 thisDatetime=thisDatetime,
715 update_figfile=update_figfile)
715 update_figfile=update_figfile)
716
716
717 class CoherenceMap(Figure):
717 class CoherenceMap(Figure):
718 isConfig = None
718 isConfig = None
719 __nsubplots = None
719 __nsubplots = None
720
720
721 WIDTHPROF = None
721 WIDTHPROF = None
722 HEIGHTPROF = None
722 HEIGHTPROF = None
723 PREFIX = 'cmap'
723 PREFIX = 'cmap'
724
724
725 def __init__(self, **kwargs):
725 def __init__(self, **kwargs):
726 Figure.__init__(self, **kwargs)
726 Figure.__init__(self, **kwargs)
727 self.timerange = 2*60*60
727 self.timerange = 2*60*60
728 self.isConfig = False
728 self.isConfig = False
729 self.__nsubplots = 1
729 self.__nsubplots = 1
730
730
731 self.WIDTH = 800
731 self.WIDTH = 800
732 self.HEIGHT = 180
732 self.HEIGHT = 180
733 self.WIDTHPROF = 120
733 self.WIDTHPROF = 120
734 self.HEIGHTPROF = 0
734 self.HEIGHTPROF = 0
735 self.counter_imagwr = 0
735 self.counter_imagwr = 0
736
736
737 self.PLOT_CODE = COH_CODE
737 self.PLOT_CODE = COH_CODE
738
738
739 self.FTP_WEI = None
739 self.FTP_WEI = None
740 self.EXP_CODE = None
740 self.EXP_CODE = None
741 self.SUB_EXP_CODE = None
741 self.SUB_EXP_CODE = None
742 self.PLOT_POS = None
742 self.PLOT_POS = None
743 self.counter_imagwr = 0
743 self.counter_imagwr = 0
744
744
745 self.xmin = None
745 self.xmin = None
746 self.xmax = None
746 self.xmax = None
747
747
748 def getSubplots(self):
748 def getSubplots(self):
749 ncol = 1
749 ncol = 1
750 nrow = self.nplots*2
750 nrow = self.nplots*2
751
751
752 return nrow, ncol
752 return nrow, ncol
753
753
754 def setup(self, id, nplots, wintitle, showprofile=True, show=True):
754 def setup(self, id, nplots, wintitle, showprofile=True, show=True):
755 self.__showprofile = showprofile
755 self.__showprofile = showprofile
756 self.nplots = nplots
756 self.nplots = nplots
757
757
758 ncolspan = 1
758 ncolspan = 1
759 colspan = 1
759 colspan = 1
760 if showprofile:
760 if showprofile:
761 ncolspan = 7
761 ncolspan = 7
762 colspan = 6
762 colspan = 6
763 self.__nsubplots = 2
763 self.__nsubplots = 2
764
764
765 self.createFigure(id = id,
765 self.createFigure(id = id,
766 wintitle = wintitle,
766 wintitle = wintitle,
767 widthplot = self.WIDTH + self.WIDTHPROF,
767 widthplot = self.WIDTH + self.WIDTHPROF,
768 heightplot = self.HEIGHT + self.HEIGHTPROF,
768 heightplot = self.HEIGHT + self.HEIGHTPROF,
769 show=True)
769 show=True)
770
770
771 nrow, ncol = self.getSubplots()
771 nrow, ncol = self.getSubplots()
772
772
773 for y in range(nrow):
773 for y in range(nrow):
774 for x in range(ncol):
774 for x in range(ncol):
775
775
776 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan, colspan, 1)
776 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan, colspan, 1)
777
777
778 if showprofile:
778 if showprofile:
779 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan+colspan, 1, 1)
779 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan+colspan, 1, 1)
780
780
781 def run(self, dataOut, id, wintitle="", pairsList=None, showprofile='True',
781 def run(self, dataOut, id, wintitle="", pairsList=None, showprofile='True',
782 xmin=None, xmax=None, ymin=None, ymax=None, zmin=None, zmax=None,
782 xmin=None, xmax=None, ymin=None, ymax=None, zmin=None, zmax=None,
783 timerange=None, phase_min=None, phase_max=None,
783 timerange=None, phase_min=None, phase_max=None,
784 save=False, figpath='./', figfile=None, ftp=False, wr_period=1,
784 save=False, figpath='./', figfile=None, ftp=False, wr_period=1,
785 coherence_cmap='jet', phase_cmap='RdBu_r', show=True,
785 coherence_cmap='jet', phase_cmap='RdBu_r', show=True,
786 server=None, folder=None, username=None, password=None,
786 server=None, folder=None, username=None, password=None,
787 ftp_wei=0, exp_code=0, sub_exp_code=0, plot_pos=0):
787 ftp_wei=0, exp_code=0, sub_exp_code=0, plot_pos=0):
788
788
789 if not isTimeInHourRange(dataOut.datatime, xmin, xmax):
789 if not isTimeInHourRange(dataOut.datatime, xmin, xmax):
790 return
790 return
791
791
792 if pairsList == None:
792 if pairsList == None:
793 pairsIndexList = dataOut.pairsIndexList
793 pairsIndexList = dataOut.pairsIndexList
794 else:
794 else:
795 pairsIndexList = []
795 pairsIndexList = []
796 for pair in pairsList:
796 for pair in pairsList:
797 if pair not in dataOut.pairsList:
797 if pair not in dataOut.pairsList:
798 raise ValueError, "Pair %s is not in dataOut.pairsList" %(pair)
798 raise ValueError, "Pair %s is not in dataOut.pairsList" %(pair)
799 pairsIndexList.append(dataOut.pairsList.index(pair))
799 pairsIndexList.append(dataOut.pairsList.index(pair))
800
800
801 if pairsIndexList == []:
801 if pairsIndexList == []:
802 return
802 return
803
803
804 if len(pairsIndexList) > 4:
804 if len(pairsIndexList) > 4:
805 pairsIndexList = pairsIndexList[0:4]
805 pairsIndexList = pairsIndexList[0:4]
806
806
807 if phase_min == None:
807 if phase_min == None:
808 phase_min = -180
808 phase_min = -180
809 if phase_max == None:
809 if phase_max == None:
810 phase_max = 180
810 phase_max = 180
811
811
812 x = dataOut.getTimeRange()
812 x = dataOut.getTimeRange()
813 y = dataOut.getHeiRange()
813 y = dataOut.getHeiRange()
814
814
815 thisDatetime = dataOut.datatime
815 thisDatetime = dataOut.datatime
816
816
817 title = wintitle + " CoherenceMap" #: %s" %(thisDatetime.strftime("%d-%b-%Y"))
817 title = wintitle + " CoherenceMap" #: %s" %(thisDatetime.strftime("%d-%b-%Y"))
818 xlabel = ""
818 xlabel = ""
819 ylabel = "Range (Km)"
819 ylabel = "Range (Km)"
820 update_figfile = False
820 update_figfile = False
821
821
822 if not self.isConfig:
822 if not self.isConfig:
823 nplots = len(pairsIndexList)
823 nplots = len(pairsIndexList)
824 self.setup(id=id,
824 self.setup(id=id,
825 nplots=nplots,
825 nplots=nplots,
826 wintitle=wintitle,
826 wintitle=wintitle,
827 showprofile=showprofile,
827 showprofile=showprofile,
828 show=show)
828 show=show)
829
829
830 if timerange != None:
830 if timerange != None:
831 self.timerange = timerange
831 self.timerange = timerange
832
832
833 self.xmin, self.xmax = self.getTimeLim(x, xmin, xmax, timerange)
833 self.xmin, self.xmax = self.getTimeLim(x, xmin, xmax, timerange)
834
834
835 if ymin == None: ymin = numpy.nanmin(y)
835 if ymin == None: ymin = numpy.nanmin(y)
836 if ymax == None: ymax = numpy.nanmax(y)
836 if ymax == None: ymax = numpy.nanmax(y)
837 if zmin == None: zmin = 0.
837 if zmin == None: zmin = 0.
838 if zmax == None: zmax = 1.
838 if zmax == None: zmax = 1.
839
839
840 self.FTP_WEI = ftp_wei
840 self.FTP_WEI = ftp_wei
841 self.EXP_CODE = exp_code
841 self.EXP_CODE = exp_code
842 self.SUB_EXP_CODE = sub_exp_code
842 self.SUB_EXP_CODE = sub_exp_code
843 self.PLOT_POS = plot_pos
843 self.PLOT_POS = plot_pos
844
844
845 self.name = thisDatetime.strftime("%Y%m%d_%H%M%S")
845 self.name = thisDatetime.strftime("%Y%m%d_%H%M%S")
846
846
847 self.isConfig = True
847 self.isConfig = True
848 update_figfile = True
848 update_figfile = True
849
849
850 self.setWinTitle(title)
850 self.setWinTitle(title)
851
851
852 for i in range(self.nplots):
852 for i in range(self.nplots):
853
853
854 pair = dataOut.pairsList[pairsIndexList[i]]
854 pair = dataOut.pairsList[pairsIndexList[i]]
855
855
856 ccf = numpy.average(dataOut.data_cspc[pairsIndexList[i],:,:],axis=0)
856 ccf = numpy.average(dataOut.data_cspc[pairsIndexList[i],:,:],axis=0)
857 powa = numpy.average(dataOut.data_spc[pair[0],:,:],axis=0)
857 powa = numpy.average(dataOut.data_spc[pair[0],:,:],axis=0)
858 powb = numpy.average(dataOut.data_spc[pair[1],:,:],axis=0)
858 powb = numpy.average(dataOut.data_spc[pair[1],:,:],axis=0)
859
859
860
860
861 avgcoherenceComplex = ccf/numpy.sqrt(powa*powb)
861 avgcoherenceComplex = ccf/numpy.sqrt(powa*powb)
862 coherence = numpy.abs(avgcoherenceComplex)
862 coherence = numpy.abs(avgcoherenceComplex)
863
863
864 z = coherence.reshape((1,-1))
864 z = coherence.reshape((1,-1))
865
865
866 counter = 0
866 counter = 0
867
867
868 title = "Coherence Ch%d * Ch%d: %s" %(pair[0], pair[1], thisDatetime.strftime("%d-%b-%Y %H:%M:%S"))
868 title = "Coherence Ch%d * Ch%d: %s" %(pair[0], pair[1], thisDatetime.strftime("%d-%b-%Y %H:%M:%S"))
869 axes = self.axesList[i*self.__nsubplots*2]
869 axes = self.axesList[i*self.__nsubplots*2]
870 axes.pcolorbuffer(x, y, z,
870 axes.pcolorbuffer(x, y, z,
871 xmin=self.xmin, xmax=self.xmax, ymin=ymin, ymax=ymax, zmin=zmin, zmax=zmax,
871 xmin=self.xmin, xmax=self.xmax, ymin=ymin, ymax=ymax, zmin=zmin, zmax=zmax,
872 xlabel=xlabel, ylabel=ylabel, title=title, rti=True, XAxisAsTime=True,
872 xlabel=xlabel, ylabel=ylabel, title=title, rti=True, XAxisAsTime=True,
873 ticksize=9, cblabel='', colormap=coherence_cmap, cbsize="1%")
873 ticksize=9, cblabel='', colormap=coherence_cmap, cbsize="1%")
874
874
875 if self.__showprofile:
875 if self.__showprofile:
876 counter += 1
876 counter += 1
877 axes = self.axesList[i*self.__nsubplots*2 + counter]
877 axes = self.axesList[i*self.__nsubplots*2 + counter]
878 axes.pline(coherence, y,
878 axes.pline(coherence, y,
879 xmin=zmin, xmax=zmax, ymin=ymin, ymax=ymax,
879 xmin=zmin, xmax=zmax, ymin=ymin, ymax=ymax,
880 xlabel='', ylabel='', title='', ticksize=7,
880 xlabel='', ylabel='', title='', ticksize=7,
881 ytick_visible=False, nxticks=5,
881 ytick_visible=False, nxticks=5,
882 grid='x')
882 grid='x')
883
883
884 counter += 1
884 counter += 1
885
885
886 phase = numpy.arctan2(avgcoherenceComplex.imag, avgcoherenceComplex.real)*180/numpy.pi
886 phase = numpy.arctan2(avgcoherenceComplex.imag, avgcoherenceComplex.real)*180/numpy.pi
887
887
888 z = phase.reshape((1,-1))
888 z = phase.reshape((1,-1))
889
889
890 title = "Phase Ch%d * Ch%d: %s" %(pair[0], pair[1], thisDatetime.strftime("%d-%b-%Y %H:%M:%S"))
890 title = "Phase Ch%d * Ch%d: %s" %(pair[0], pair[1], thisDatetime.strftime("%d-%b-%Y %H:%M:%S"))
891 axes = self.axesList[i*self.__nsubplots*2 + counter]
891 axes = self.axesList[i*self.__nsubplots*2 + counter]
892 axes.pcolorbuffer(x, y, z,
892 axes.pcolorbuffer(x, y, z,
893 xmin=self.xmin, xmax=self.xmax, ymin=ymin, ymax=ymax, zmin=phase_min, zmax=phase_max,
893 xmin=self.xmin, xmax=self.xmax, ymin=ymin, ymax=ymax, zmin=phase_min, zmax=phase_max,
894 xlabel=xlabel, ylabel=ylabel, title=title, rti=True, XAxisAsTime=True,
894 xlabel=xlabel, ylabel=ylabel, title=title, rti=True, XAxisAsTime=True,
895 ticksize=9, cblabel='', colormap=phase_cmap, cbsize="1%")
895 ticksize=9, cblabel='', colormap=phase_cmap, cbsize="1%")
896
896
897 if self.__showprofile:
897 if self.__showprofile:
898 counter += 1
898 counter += 1
899 axes = self.axesList[i*self.__nsubplots*2 + counter]
899 axes = self.axesList[i*self.__nsubplots*2 + counter]
900 axes.pline(phase, y,
900 axes.pline(phase, y,
901 xmin=phase_min, xmax=phase_max, ymin=ymin, ymax=ymax,
901 xmin=phase_min, xmax=phase_max, ymin=ymin, ymax=ymax,
902 xlabel='', ylabel='', title='', ticksize=7,
902 xlabel='', ylabel='', title='', ticksize=7,
903 ytick_visible=False, nxticks=4,
903 ytick_visible=False, nxticks=4,
904 grid='x')
904 grid='x')
905
905
906 self.draw()
906 self.draw()
907
907
908 if dataOut.ltctime >= self.xmax:
908 if dataOut.ltctime >= self.xmax:
909 self.counter_imagwr = wr_period
909 self.counter_imagwr = wr_period
910 self.isConfig = False
910 self.isConfig = False
911 update_figfile = True
911 update_figfile = True
912
912
913 self.save(figpath=figpath,
913 self.save(figpath=figpath,
914 figfile=figfile,
914 figfile=figfile,
915 save=save,
915 save=save,
916 ftp=ftp,
916 ftp=ftp,
917 wr_period=wr_period,
917 wr_period=wr_period,
918 thisDatetime=thisDatetime,
918 thisDatetime=thisDatetime,
919 update_figfile=update_figfile)
919 update_figfile=update_figfile)
920
920
921 class PowerProfilePlot(Figure):
921 class PowerProfilePlot(Figure):
922
922
923 isConfig = None
923 isConfig = None
924 __nsubplots = None
924 __nsubplots = None
925
925
926 WIDTHPROF = None
926 WIDTHPROF = None
927 HEIGHTPROF = None
927 HEIGHTPROF = None
928 PREFIX = 'spcprofile'
928 PREFIX = 'spcprofile'
929
929
930 def __init__(self, **kwargs):
930 def __init__(self, **kwargs):
931 Figure.__init__(self, **kwargs)
931 Figure.__init__(self, **kwargs)
932 self.isConfig = False
932 self.isConfig = False
933 self.__nsubplots = 1
933 self.__nsubplots = 1
934
934
935 self.PLOT_CODE = POWER_CODE
935 self.PLOT_CODE = POWER_CODE
936
936
937 self.WIDTH = 300
937 self.WIDTH = 300
938 self.HEIGHT = 500
938 self.HEIGHT = 500
939 self.counter_imagwr = 0
939 self.counter_imagwr = 0
940
940
941 def getSubplots(self):
941 def getSubplots(self):
942 ncol = 1
942 ncol = 1
943 nrow = 1
943 nrow = 1
944
944
945 return nrow, ncol
945 return nrow, ncol
946
946
947 def setup(self, id, nplots, wintitle, show):
947 def setup(self, id, nplots, wintitle, show):
948
948
949 self.nplots = nplots
949 self.nplots = nplots
950
950
951 ncolspan = 1
951 ncolspan = 1
952 colspan = 1
952 colspan = 1
953
953
954 self.createFigure(id = id,
954 self.createFigure(id = id,
955 wintitle = wintitle,
955 wintitle = wintitle,
956 widthplot = self.WIDTH,
956 widthplot = self.WIDTH,
957 heightplot = self.HEIGHT,
957 heightplot = self.HEIGHT,
958 show=show)
958 show=show)
959
959
960 nrow, ncol = self.getSubplots()
960 nrow, ncol = self.getSubplots()
961
961
962 counter = 0
962 counter = 0
963 for y in range(nrow):
963 for y in range(nrow):
964 for x in range(ncol):
964 for x in range(ncol):
965 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan, colspan, 1)
965 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan, colspan, 1)
966
966
967 def run(self, dataOut, id, wintitle="", channelList=None,
967 def run(self, dataOut, id, wintitle="", channelList=None,
968 xmin=None, xmax=None, ymin=None, ymax=None,
968 xmin=None, xmax=None, ymin=None, ymax=None,
969 save=False, figpath='./', figfile=None, show=True,
969 save=False, figpath='./', figfile=None, show=True,
970 ftp=False, wr_period=1, server=None,
970 ftp=False, wr_period=1, server=None,
971 folder=None, username=None, password=None):
971 folder=None, username=None, password=None):
972
972
973
973
974 if channelList == None:
974 if channelList == None:
975 channelIndexList = dataOut.channelIndexList
975 channelIndexList = dataOut.channelIndexList
976 channelList = dataOut.channelList
976 channelList = dataOut.channelList
977 else:
977 else:
978 channelIndexList = []
978 channelIndexList = []
979 for channel in channelList:
979 for channel in channelList:
980 if channel not in dataOut.channelList:
980 if channel not in dataOut.channelList:
981 raise ValueError, "Channel %d is not in dataOut.channelList"
981 raise ValueError, "Channel %d is not in dataOut.channelList"
982 channelIndexList.append(dataOut.channelList.index(channel))
982 channelIndexList.append(dataOut.channelList.index(channel))
983
983
984 factor = dataOut.normFactor
984 factor = dataOut.normFactor
985
985
986 y = dataOut.getHeiRange()
986 y = dataOut.getHeiRange()
987
987
988 #for voltage
988 #for voltage
989 if dataOut.type == 'Voltage':
989 if dataOut.type == 'Voltage':
990 x = dataOut.data[channelIndexList,:] * numpy.conjugate(dataOut.data[channelIndexList,:])
990 x = dataOut.data[channelIndexList,:] * numpy.conjugate(dataOut.data[channelIndexList,:])
991 x = x.real
991 x = x.real
992 x = numpy.where(numpy.isfinite(x), x, numpy.NAN)
992 x = numpy.where(numpy.isfinite(x), x, numpy.NAN)
993
993
994 #for spectra
994 #for spectra
995 if dataOut.type == 'Spectra':
995 if dataOut.type == 'Spectra':
996 x = dataOut.data_spc[channelIndexList,:,:]/factor
996 x = dataOut.data_spc[channelIndexList,:,:]/factor
997 x = numpy.where(numpy.isfinite(x), x, numpy.NAN)
997 x = numpy.where(numpy.isfinite(x), x, numpy.NAN)
998 x = numpy.average(x, axis=1)
998 x = numpy.average(x, axis=1)
999
999
1000
1000
1001 xdB = 10*numpy.log10(x)
1001 xdB = 10*numpy.log10(x)
1002
1002
1003 thisDatetime = datetime.datetime.utcfromtimestamp(dataOut.getTimeRange()[0])
1003 thisDatetime = datetime.datetime.utcfromtimestamp(dataOut.getTimeRange()[0])
1004 title = wintitle + " Power Profile %s" %(thisDatetime.strftime("%d-%b-%Y"))
1004 title = wintitle + " Power Profile %s" %(thisDatetime.strftime("%d-%b-%Y"))
1005 xlabel = "dB"
1005 xlabel = "dB"
1006 ylabel = "Range (Km)"
1006 ylabel = "Range (Km)"
1007
1007
1008 if not self.isConfig:
1008 if not self.isConfig:
1009
1009
1010 nplots = 1
1010 nplots = 1
1011
1011
1012 self.setup(id=id,
1012 self.setup(id=id,
1013 nplots=nplots,
1013 nplots=nplots,
1014 wintitle=wintitle,
1014 wintitle=wintitle,
1015 show=show)
1015 show=show)
1016
1016
1017 if ymin == None: ymin = numpy.nanmin(y)
1017 if ymin == None: ymin = numpy.nanmin(y)
1018 if ymax == None: ymax = numpy.nanmax(y)
1018 if ymax == None: ymax = numpy.nanmax(y)
1019 if xmin == None: xmin = numpy.nanmin(xdB)*0.9
1019 if xmin == None: xmin = numpy.nanmin(xdB)*0.9
1020 if xmax == None: xmax = numpy.nanmax(xdB)*1.1
1020 if xmax == None: xmax = numpy.nanmax(xdB)*1.1
1021
1021
1022 self.isConfig = True
1022 self.isConfig = True
1023
1023
1024 self.setWinTitle(title)
1024 self.setWinTitle(title)
1025
1025
1026 title = "Power Profile: %s" %(thisDatetime.strftime("%d-%b-%Y %H:%M:%S"))
1026 title = "Power Profile: %s" %(thisDatetime.strftime("%d-%b-%Y %H:%M:%S"))
1027 axes = self.axesList[0]
1027 axes = self.axesList[0]
1028
1028
1029 legendlabels = ["channel %d"%x for x in channelList]
1029 legendlabels = ["channel %d"%x for x in channelList]
1030 axes.pmultiline(xdB, y,
1030 axes.pmultiline(xdB, y,
1031 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax,
1031 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax,
1032 xlabel=xlabel, ylabel=ylabel, title=title, legendlabels=legendlabels,
1032 xlabel=xlabel, ylabel=ylabel, title=title, legendlabels=legendlabels,
1033 ytick_visible=True, nxticks=5,
1033 ytick_visible=True, nxticks=5,
1034 grid='x')
1034 grid='x')
1035
1035
1036 self.draw()
1036 self.draw()
1037
1037
1038 self.save(figpath=figpath,
1038 self.save(figpath=figpath,
1039 figfile=figfile,
1039 figfile=figfile,
1040 save=save,
1040 save=save,
1041 ftp=ftp,
1041 ftp=ftp,
1042 wr_period=wr_period,
1042 wr_period=wr_period,
1043 thisDatetime=thisDatetime)
1043 thisDatetime=thisDatetime)
1044
1044
1045 class SpectraCutPlot(Figure):
1045 class SpectraCutPlot(Figure):
1046
1046
1047 isConfig = None
1047 isConfig = None
1048 __nsubplots = None
1048 __nsubplots = None
1049
1049
1050 WIDTHPROF = None
1050 WIDTHPROF = None
1051 HEIGHTPROF = None
1051 HEIGHTPROF = None
1052 PREFIX = 'spc_cut'
1052 PREFIX = 'spc_cut'
1053
1053
1054 def __init__(self, **kwargs):
1054 def __init__(self, **kwargs):
1055 Figure.__init__(self, **kwargs)
1055 Figure.__init__(self, **kwargs)
1056 self.isConfig = False
1056 self.isConfig = False
1057 self.__nsubplots = 1
1057 self.__nsubplots = 1
1058
1058
1059 self.PLOT_CODE = POWER_CODE
1059 self.PLOT_CODE = POWER_CODE
1060
1060
1061 self.WIDTH = 700
1061 self.WIDTH = 700
1062 self.HEIGHT = 500
1062 self.HEIGHT = 500
1063 self.counter_imagwr = 0
1063 self.counter_imagwr = 0
1064
1064
1065 def getSubplots(self):
1065 def getSubplots(self):
1066 ncol = 1
1066 ncol = 1
1067 nrow = 1
1067 nrow = 1
1068
1068
1069 return nrow, ncol
1069 return nrow, ncol
1070
1070
1071 def setup(self, id, nplots, wintitle, show):
1071 def setup(self, id, nplots, wintitle, show):
1072
1072
1073 self.nplots = nplots
1073 self.nplots = nplots
1074
1074
1075 ncolspan = 1
1075 ncolspan = 1
1076 colspan = 1
1076 colspan = 1
1077
1077
1078 self.createFigure(id = id,
1078 self.createFigure(id = id,
1079 wintitle = wintitle,
1079 wintitle = wintitle,
1080 widthplot = self.WIDTH,
1080 widthplot = self.WIDTH,
1081 heightplot = self.HEIGHT,
1081 heightplot = self.HEIGHT,
1082 show=show)
1082 show=show)
1083
1083
1084 nrow, ncol = self.getSubplots()
1084 nrow, ncol = self.getSubplots()
1085
1085
1086 counter = 0
1086 counter = 0
1087 for y in range(nrow):
1087 for y in range(nrow):
1088 for x in range(ncol):
1088 for x in range(ncol):
1089 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan, colspan, 1)
1089 self.addAxes(nrow, ncol*ncolspan, y, x*ncolspan, colspan, 1)
1090
1090
1091 def run(self, dataOut, id, wintitle="", channelList=None,
1091 def run(self, dataOut, id, wintitle="", channelList=None,
1092 xmin=None, xmax=None, ymin=None, ymax=None,
1092 xmin=None, xmax=None, ymin=None, ymax=None,
1093 save=False, figpath='./', figfile=None, show=True,
1093 save=False, figpath='./', figfile=None, show=True,
1094 ftp=False, wr_period=1, server=None,
1094 ftp=False, wr_period=1, server=None,
1095 folder=None, username=None, password=None,
1095 folder=None, username=None, password=None,
1096 xaxis="frequency"):
1096 xaxis="frequency"):
1097
1097
1098
1098
1099 if channelList == None:
1099 if channelList == None:
1100 channelIndexList = dataOut.channelIndexList
1100 channelIndexList = dataOut.channelIndexList
1101 channelList = dataOut.channelList
1101 channelList = dataOut.channelList
1102 else:
1102 else:
1103 channelIndexList = []
1103 channelIndexList = []
1104 for channel in channelList:
1104 for channel in channelList:
1105 if channel not in dataOut.channelList:
1105 if channel not in dataOut.channelList:
1106 raise ValueError, "Channel %d is not in dataOut.channelList"
1106 raise ValueError, "Channel %d is not in dataOut.channelList"
1107 channelIndexList.append(dataOut.channelList.index(channel))
1107 channelIndexList.append(dataOut.channelList.index(channel))
1108
1108
1109 factor = dataOut.normFactor
1109 factor = dataOut.normFactor
1110
1110
1111 y = dataOut.getHeiRange()
1111 y = dataOut.getHeiRange()
1112
1112
1113 z = dataOut.data_spc/factor
1113 z = dataOut.data_spc/factor
1114 z = numpy.where(numpy.isfinite(z), z, numpy.NAN)
1114 z = numpy.where(numpy.isfinite(z), z, numpy.NAN)
1115
1115
1116 hei_index = numpy.arange(25)*3 + 20
1116 hei_index = numpy.arange(25)*3 + 20
1117
1117
1118 if xaxis == "frequency":
1118 if xaxis == "frequency":
1119 x = dataOut.getFreqRange()/1000.
1119 x = dataOut.getFreqRange()/1000.
1120 zdB = 10*numpy.log10(z[0,:,hei_index])
1120 zdB = 10*numpy.log10(z[0,:,hei_index])
1121 xlabel = "Frequency (kHz)"
1121 xlabel = "Frequency (kHz)"
1122 ylabel = "Power (dB)"
1122 ylabel = "Power (dB)"
1123
1123
1124 elif xaxis == "time":
1124 elif xaxis == "time":
1125 x = dataOut.getAcfRange()
1125 x = dataOut.getAcfRange()
1126 zdB = z[0,:,hei_index]
1126 zdB = z[0,:,hei_index]
1127 xlabel = "Time (ms)"
1127 xlabel = "Time (ms)"
1128 ylabel = "ACF"
1128 ylabel = "ACF"
1129
1129
1130 else:
1130 else:
1131 x = dataOut.getVelRange()
1131 x = dataOut.getVelRange()
1132 zdB = 10*numpy.log10(z[0,:,hei_index])
1132 zdB = 10*numpy.log10(z[0,:,hei_index])
1133 xlabel = "Velocity (m/s)"
1133 xlabel = "Velocity (m/s)"
1134 ylabel = "Power (dB)"
1134 ylabel = "Power (dB)"
1135
1135
1136 thisDatetime = datetime.datetime.utcfromtimestamp(dataOut.getTimeRange()[0])
1136 thisDatetime = datetime.datetime.utcfromtimestamp(dataOut.getTimeRange()[0])
1137 title = wintitle + " Range Cuts %s" %(thisDatetime.strftime("%d-%b-%Y"))
1137 title = wintitle + " Range Cuts %s" %(thisDatetime.strftime("%d-%b-%Y"))
1138
1138
1139 if not self.isConfig:
1139 if not self.isConfig:
1140
1140
1141 nplots = 1
1141 nplots = 1
1142
1142
1143 self.setup(id=id,
1143 self.setup(id=id,
1144 nplots=nplots,
1144 nplots=nplots,
1145 wintitle=wintitle,
1145 wintitle=wintitle,
1146 show=show)
1146 show=show)
1147
1147
1148 if xmin == None: xmin = numpy.nanmin(x)*0.9
1148 if xmin == None: xmin = numpy.nanmin(x)*0.9
1149 if xmax == None: xmax = numpy.nanmax(x)*1.1
1149 if xmax == None: xmax = numpy.nanmax(x)*1.1
1150 if ymin == None: ymin = numpy.nanmin(zdB)
1150 if ymin == None: ymin = numpy.nanmin(zdB)
1151 if ymax == None: ymax = numpy.nanmax(zdB)
1151 if ymax == None: ymax = numpy.nanmax(zdB)
1152
1152
1153 self.isConfig = True
1153 self.isConfig = True
1154
1154
1155 self.setWinTitle(title)
1155 self.setWinTitle(title)
1156
1156
1157 title = "Spectra Cuts: %s" %(thisDatetime.strftime("%d-%b-%Y %H:%M:%S"))
1157 title = "Spectra Cuts: %s" %(thisDatetime.strftime("%d-%b-%Y %H:%M:%S"))
1158 axes = self.axesList[0]
1158 axes = self.axesList[0]
1159
1159
1160 legendlabels = ["Range = %dKm" %y[i] for i in hei_index]
1160 legendlabels = ["Range = %dKm" %y[i] for i in hei_index]
1161
1161
1162 axes.pmultilineyaxis( x, zdB,
1162 axes.pmultilineyaxis( x, zdB,
1163 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax,
1163 xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax,
1164 xlabel=xlabel, ylabel=ylabel, title=title, legendlabels=legendlabels,
1164 xlabel=xlabel, ylabel=ylabel, title=title, legendlabels=legendlabels,
1165 ytick_visible=True, nxticks=5,
1165 ytick_visible=True, nxticks=5,
1166 grid='x')
1166 grid='x')
1167
1167
1168 self.draw()
1168 self.draw()
1169
1169
1170 self.save(figpath=figpath,
1170 self.save(figpath=figpath,
1171 figfile=figfile,
1171 figfile=figfile,
1172 save=save,
1172 save=save,
1173 ftp=ftp,
1173 ftp=ftp,
1174 wr_period=wr_period,
1174 wr_period=wr_period,
1175 thisDatetime=thisDatetime)
1175 thisDatetime=thisDatetime)
1176
1176
1177 class Noise(Figure):
1177 class Noise(Figure):
1178
1178
1179 isConfig = None
1179 isConfig = None
1180 __nsubplots = None
1180 __nsubplots = None
1181
1181
1182 PREFIX = 'noise'
1182 PREFIX = 'noise'
1183
1183
1184
1184
1185 def __init__(self, **kwargs):
1185 def __init__(self, **kwargs):
1186 Figure.__init__(self, **kwargs)
1186 Figure.__init__(self, **kwargs)
1187 self.timerange = 24*60*60
1187 self.timerange = 24*60*60
1188 self.isConfig = False
1188 self.isConfig = False
1189 self.__nsubplots = 1
1189 self.__nsubplots = 1
1190 self.counter_imagwr = 0
1190 self.counter_imagwr = 0
1191 self.WIDTH = 800
1191 self.WIDTH = 800
1192 self.HEIGHT = 400
1192 self.HEIGHT = 400
1193 self.WIDTHPROF = 120
1193 self.WIDTHPROF = 120
1194 self.HEIGHTPROF = 0
1194 self.HEIGHTPROF = 0
1195 self.xdata = None
1195 self.xdata = None
1196 self.ydata = None
1196 self.ydata = None
1197
1197
1198 self.PLOT_CODE = NOISE_CODE
1198 self.PLOT_CODE = NOISE_CODE
1199
1199
1200 self.FTP_WEI = None
1200 self.FTP_WEI = None
1201 self.EXP_CODE = None
1201 self.EXP_CODE = None
1202 self.SUB_EXP_CODE = None
1202 self.SUB_EXP_CODE = None
1203 self.PLOT_POS = None
1203 self.PLOT_POS = None
1204 self.figfile = None
1204 self.figfile = None
1205
1205
1206 self.xmin = None
1206 self.xmin = None
1207 self.xmax = None
1207 self.xmax = None
1208
1208
1209 def getSubplots(self):
1209 def getSubplots(self):
1210
1210
1211 ncol = 1
1211 ncol = 1
1212 nrow = 1
1212 nrow = 1
1213
1213
1214 return nrow, ncol
1214 return nrow, ncol
1215
1215
1216 def openfile(self, filename):
1216 def openfile(self, filename):
1217 dirname = os.path.dirname(filename)
1217 dirname = os.path.dirname(filename)
1218
1218
1219 if not os.path.exists(dirname):
1219 if not os.path.exists(dirname):
1220 os.mkdir(dirname)
1220 os.mkdir(dirname)
1221
1221
1222 f = open(filename,'w+')
1222 f = open(filename,'w+')
1223 f.write('\n\n')
1223 f.write('\n\n')
1224 f.write('JICAMARCA RADIO OBSERVATORY - Noise \n')
1224 f.write('JICAMARCA RADIO OBSERVATORY - Noise \n')
1225 f.write('DD MM YYYY HH MM SS Channel0 Channel1 Channel2 Channel3\n\n' )
1225 f.write('DD MM YYYY HH MM SS Channel0 Channel1 Channel2 Channel3\n\n' )
1226 f.close()
1226 f.close()
1227
1227
1228 def save_data(self, filename_phase, data, data_datetime):
1228 def save_data(self, filename_phase, data, data_datetime):
1229
1229
1230 f=open(filename_phase,'a')
1230 f=open(filename_phase,'a')
1231
1231
1232 timetuple_data = data_datetime.timetuple()
1232 timetuple_data = data_datetime.timetuple()
1233 day = str(timetuple_data.tm_mday)
1233 day = str(timetuple_data.tm_mday)
1234 month = str(timetuple_data.tm_mon)
1234 month = str(timetuple_data.tm_mon)
1235 year = str(timetuple_data.tm_year)
1235 year = str(timetuple_data.tm_year)
1236 hour = str(timetuple_data.tm_hour)
1236 hour = str(timetuple_data.tm_hour)
1237 minute = str(timetuple_data.tm_min)
1237 minute = str(timetuple_data.tm_min)
1238 second = str(timetuple_data.tm_sec)
1238 second = str(timetuple_data.tm_sec)
1239
1239
1240 data_msg = ''
1240 data_msg = ''
1241 for i in range(len(data)):
1241 for i in range(len(data)):
1242 data_msg += str(data[i]) + ' '
1242 data_msg += str(data[i]) + ' '
1243
1243
1244 f.write(day+' '+month+' '+year+' '+hour+' '+minute+' '+second+' ' + data_msg + '\n')
1244 f.write(day+' '+month+' '+year+' '+hour+' '+minute+' '+second+' ' + data_msg + '\n')
1245 f.close()
1245 f.close()
1246
1246
1247
1247
1248 def setup(self, id, nplots, wintitle, showprofile=True, show=True):
1248 def setup(self, id, nplots, wintitle, showprofile=True, show=True):
1249
1249
1250 self.__showprofile = showprofile
1250 self.__showprofile = showprofile
1251 self.nplots = nplots
1251 self.nplots = nplots
1252
1252
1253 ncolspan = 7
1253 ncolspan = 7
1254 colspan = 6
1254 colspan = 6
1255 self.__nsubplots = 2
1255 self.__nsubplots = 2
1256
1256
1257 self.createFigure(id = id,
1257 self.createFigure(id = id,
1258 wintitle = wintitle,
1258 wintitle = wintitle,
1259 widthplot = self.WIDTH+self.WIDTHPROF,
1259 widthplot = self.WIDTH+self.WIDTHPROF,
1260 heightplot = self.HEIGHT+self.HEIGHTPROF,
1260 heightplot = self.HEIGHT+self.HEIGHTPROF,
1261 show=show)
1261 show=show)
1262
1262
1263 nrow, ncol = self.getSubplots()
1263 nrow, ncol = self.getSubplots()
1264
1264
1265 self.addAxes(nrow, ncol*ncolspan, 0, 0, colspan, 1)
1265 self.addAxes(nrow, ncol*ncolspan, 0, 0, colspan, 1)
1266
1266
1267
1267
1268 def run(self, dataOut, id, wintitle="", channelList=None, showprofile='True',
1268 def run(self, dataOut, id, wintitle="", channelList=None, showprofile='True',
1269 xmin=None, xmax=None, ymin=None, ymax=None,
1269 xmin=None, xmax=None, ymin=None, ymax=None,
1270 timerange=None,
1270 timerange=None,
1271 save=False, figpath='./', figfile=None, show=True, ftp=False, wr_period=1,
1271 save=False, figpath='./', figfile=None, show=True, ftp=False, wr_period=1,
1272 server=None, folder=None, username=None, password=None,
1272 server=None, folder=None, username=None, password=None,
1273 ftp_wei=0, exp_code=0, sub_exp_code=0, plot_pos=0):
1273 ftp_wei=0, exp_code=0, sub_exp_code=0, plot_pos=0):
1274
1274
1275 if not isTimeInHourRange(dataOut.datatime, xmin, xmax):
1275 if not isTimeInHourRange(dataOut.datatime, xmin, xmax):
1276 return
1276 return
1277
1277
1278 if channelList == None:
1278 if channelList == None:
1279 channelIndexList = dataOut.channelIndexList
1279 channelIndexList = dataOut.channelIndexList
1280 channelList = dataOut.channelList
1280 channelList = dataOut.channelList
1281 else:
1281 else:
1282 channelIndexList = []
1282 channelIndexList = []
1283 for channel in channelList:
1283 for channel in channelList:
1284 if channel not in dataOut.channelList:
1284 if channel not in dataOut.channelList:
1285 raise ValueError, "Channel %d is not in dataOut.channelList"
1285 raise ValueError, "Channel %d is not in dataOut.channelList"
1286 channelIndexList.append(dataOut.channelList.index(channel))
1286 channelIndexList.append(dataOut.channelList.index(channel))
1287
1287
1288 x = dataOut.getTimeRange()
1288 x = dataOut.getTimeRange()
1289 #y = dataOut.getHeiRange()
1289 #y = dataOut.getHeiRange()
1290 factor = dataOut.normFactor
1290 factor = dataOut.normFactor
1291 noise = dataOut.noise[channelIndexList]/factor
1291 noise = dataOut.noise[channelIndexList]/factor
1292 noisedB = 10*numpy.log10(noise)
1292 noisedB = 10*numpy.log10(noise)
1293
1293
1294 thisDatetime = dataOut.datatime
1294 thisDatetime = dataOut.datatime
1295
1295
1296 title = wintitle + " Noise" # : %s" %(thisDatetime.strftime("%d-%b-%Y"))
1296 title = wintitle + " Noise" # : %s" %(thisDatetime.strftime("%d-%b-%Y"))
1297 xlabel = ""
1297 xlabel = ""
1298 ylabel = "Intensity (dB)"
1298 ylabel = "Intensity (dB)"
1299 update_figfile = False
1299 update_figfile = False
1300
1300
1301 if not self.isConfig:
1301 if not self.isConfig:
1302
1302
1303 nplots = 1
1303 nplots = 1
1304
1304
1305 self.setup(id=id,
1305 self.setup(id=id,
1306 nplots=nplots,
1306 nplots=nplots,
1307 wintitle=wintitle,
1307 wintitle=wintitle,
1308 showprofile=showprofile,
1308 showprofile=showprofile,
1309 show=show)
1309 show=show)
1310
1310
1311 if timerange != None:
1311 if timerange != None:
1312 self.timerange = timerange
1312 self.timerange = timerange
1313
1313
1314 self.xmin, self.xmax = self.getTimeLim(x, xmin, xmax, timerange)
1314 self.xmin, self.xmax = self.getTimeLim(x, xmin, xmax, timerange)
1315
1315
1316 if ymin == None: ymin = numpy.floor(numpy.nanmin(noisedB)) - 10.0
1316 if ymin == None: ymin = numpy.floor(numpy.nanmin(noisedB)) - 10.0
1317 if ymax == None: ymax = numpy.nanmax(noisedB) + 10.0
1317 if ymax == None: ymax = numpy.nanmax(noisedB) + 10.0
1318
1318
1319 self.FTP_WEI = ftp_wei
1319 self.FTP_WEI = ftp_wei
1320 self.EXP_CODE = exp_code
1320 self.EXP_CODE = exp_code
1321 self.SUB_EXP_CODE = sub_exp_code
1321 self.SUB_EXP_CODE = sub_exp_code
1322 self.PLOT_POS = plot_pos
1322 self.PLOT_POS = plot_pos
1323
1323
1324
1324
1325 self.name = thisDatetime.strftime("%Y%m%d_%H%M%S")
1325 self.name = thisDatetime.strftime("%Y%m%d_%H%M%S")
1326 self.isConfig = True
1326 self.isConfig = True
1327 self.figfile = figfile
1327 self.figfile = figfile
1328 self.xdata = numpy.array([])
1328 self.xdata = numpy.array([])
1329 self.ydata = numpy.array([])
1329 self.ydata = numpy.array([])
1330
1330
1331 update_figfile = True
1331 update_figfile = True
1332
1332
1333 #open file beacon phase
1333 #open file beacon phase
1334 path = '%s%03d' %(self.PREFIX, self.id)
1334 path = '%s%03d' %(self.PREFIX, self.id)
1335 noise_file = os.path.join(path,'%s.txt'%self.name)
1335 noise_file = os.path.join(path,'%s.txt'%self.name)
1336 self.filename_noise = os.path.join(figpath,noise_file)
1336 self.filename_noise = os.path.join(figpath,noise_file)
1337
1337
1338 self.setWinTitle(title)
1338 self.setWinTitle(title)
1339
1339
1340 title = "Noise %s" %(thisDatetime.strftime("%Y/%m/%d %H:%M:%S"))
1340 title = "Noise %s" %(thisDatetime.strftime("%Y/%m/%d %H:%M:%S"))
1341
1341
1342 legendlabels = ["channel %d"%(idchannel) for idchannel in channelList]
1342 legendlabels = ["channel %d"%(idchannel) for idchannel in channelList]
1343 axes = self.axesList[0]
1343 axes = self.axesList[0]
1344
1344
1345 self.xdata = numpy.hstack((self.xdata, x[0:1]))
1345 self.xdata = numpy.hstack((self.xdata, x[0:1]))
1346
1346
1347 if len(self.ydata)==0:
1347 if len(self.ydata)==0:
1348 self.ydata = noisedB.reshape(-1,1)
1348 self.ydata = noisedB.reshape(-1,1)
1349 else:
1349 else:
1350 self.ydata = numpy.hstack((self.ydata, noisedB.reshape(-1,1)))
1350 self.ydata = numpy.hstack((self.ydata, noisedB.reshape(-1,1)))
1351
1351
1352
1352
1353 axes.pmultilineyaxis(x=self.xdata, y=self.ydata,
1353 axes.pmultilineyaxis(x=self.xdata, y=self.ydata,
1354 xmin=self.xmin, xmax=self.xmax, ymin=ymin, ymax=ymax,
1354 xmin=self.xmin, xmax=self.xmax, ymin=ymin, ymax=ymax,
1355 xlabel=xlabel, ylabel=ylabel, title=title, legendlabels=legendlabels, marker='x', markersize=8, linestyle="solid",
1355 xlabel=xlabel, ylabel=ylabel, title=title, legendlabels=legendlabels, marker='x', markersize=8, linestyle="solid",
1356 XAxisAsTime=True, grid='both'
1356 XAxisAsTime=True, grid='both'
1357 )
1357 )
1358
1358
1359 self.draw()
1359 self.draw()
1360
1360
1361 if dataOut.ltctime >= self.xmax:
1361 if dataOut.ltctime >= self.xmax:
1362 self.counter_imagwr = wr_period
1362 self.counter_imagwr = wr_period
1363 self.isConfig = False
1363 self.isConfig = False
1364 update_figfile = True
1364 update_figfile = True
1365
1365
1366 self.save(figpath=figpath,
1366 self.save(figpath=figpath,
1367 figfile=figfile,
1367 figfile=figfile,
1368 save=save,
1368 save=save,
1369 ftp=ftp,
1369 ftp=ftp,
1370 wr_period=wr_period,
1370 wr_period=wr_period,
1371 thisDatetime=thisDatetime,
1371 thisDatetime=thisDatetime,
1372 update_figfile=update_figfile)
1372 update_figfile=update_figfile)
1373
1373
1374 #store data beacon phase
1374 #store data beacon phase
1375 if save:
1375 if save:
1376 self.save_data(self.filename_noise, noisedB, thisDatetime)
1376 self.save_data(self.filename_noise, noisedB, thisDatetime)
1377
1377
1378 class BeaconPhase(Figure):
1378 class BeaconPhase(Figure):
1379
1379
1380 __isConfig = None
1380 __isConfig = None
1381 __nsubplots = None
1381 __nsubplots = None
1382
1382
1383 PREFIX = 'beacon_phase'
1383 PREFIX = 'beacon_phase'
1384
1384
1385 def __init__(self, **kwargs):
1385 def __init__(self, **kwargs):
1386 Figure.__init__(self, **kwargs)
1386 Figure.__init__(self, **kwargs)
1387 self.timerange = 24*60*60
1387 self.timerange = 24*60*60
1388 self.isConfig = False
1388 self.isConfig = False
1389 self.__nsubplots = 1
1389 self.__nsubplots = 1
1390 self.counter_imagwr = 0
1390 self.counter_imagwr = 0
1391 self.WIDTH = 800
1391 self.WIDTH = 800
1392 self.HEIGHT = 400
1392 self.HEIGHT = 400
1393 self.WIDTHPROF = 120
1393 self.WIDTHPROF = 120
1394 self.HEIGHTPROF = 0
1394 self.HEIGHTPROF = 0
1395 self.xdata = None
1395 self.xdata = None
1396 self.ydata = None
1396 self.ydata = None
1397
1397
1398 self.PLOT_CODE = BEACON_CODE
1398 self.PLOT_CODE = BEACON_CODE
1399
1399
1400 self.FTP_WEI = None
1400 self.FTP_WEI = None
1401 self.EXP_CODE = None
1401 self.EXP_CODE = None
1402 self.SUB_EXP_CODE = None
1402 self.SUB_EXP_CODE = None
1403 self.PLOT_POS = None
1403 self.PLOT_POS = None
1404
1404
1405 self.filename_phase = None
1405 self.filename_phase = None
1406
1406
1407 self.figfile = None
1407 self.figfile = None
1408
1408
1409 self.xmin = None
1409 self.xmin = None
1410 self.xmax = None
1410 self.xmax = None
1411
1411
1412 def getSubplots(self):
1412 def getSubplots(self):
1413
1413
1414 ncol = 1
1414 ncol = 1
1415 nrow = 1
1415 nrow = 1
1416
1416
1417 return nrow, ncol
1417 return nrow, ncol
1418
1418
1419 def setup(self, id, nplots, wintitle, showprofile=True, show=True):
1419 def setup(self, id, nplots, wintitle, showprofile=True, show=True):
1420
1420
1421 self.__showprofile = showprofile
1421 self.__showprofile = showprofile
1422 self.nplots = nplots
1422 self.nplots = nplots
1423
1423
1424 ncolspan = 7
1424 ncolspan = 7
1425 colspan = 6
1425 colspan = 6
1426 self.__nsubplots = 2
1426 self.__nsubplots = 2
1427
1427
1428 self.createFigure(id = id,
1428 self.createFigure(id = id,
1429 wintitle = wintitle,
1429 wintitle = wintitle,
1430 widthplot = self.WIDTH+self.WIDTHPROF,
1430 widthplot = self.WIDTH+self.WIDTHPROF,
1431 heightplot = self.HEIGHT+self.HEIGHTPROF,
1431 heightplot = self.HEIGHT+self.HEIGHTPROF,
1432 show=show)
1432 show=show)
1433
1433
1434 nrow, ncol = self.getSubplots()
1434 nrow, ncol = self.getSubplots()
1435
1435
1436 self.addAxes(nrow, ncol*ncolspan, 0, 0, colspan, 1)
1436 self.addAxes(nrow, ncol*ncolspan, 0, 0, colspan, 1)
1437
1437
1438 def save_phase(self, filename_phase):
1438 def save_phase(self, filename_phase):
1439 f = open(filename_phase,'w+')
1439 f = open(filename_phase,'w+')
1440 f.write('\n\n')
1440 f.write('\n\n')
1441 f.write('JICAMARCA RADIO OBSERVATORY - Beacon Phase \n')
1441 f.write('JICAMARCA RADIO OBSERVATORY - Beacon Phase \n')
1442 f.write('DD MM YYYY HH MM SS pair(2,0) pair(2,1) pair(2,3) pair(2,4)\n\n' )
1442 f.write('DD MM YYYY HH MM SS pair(2,0) pair(2,1) pair(2,3) pair(2,4)\n\n' )
1443 f.close()
1443 f.close()
1444
1444
1445 def save_data(self, filename_phase, data, data_datetime):
1445 def save_data(self, filename_phase, data, data_datetime):
1446 f=open(filename_phase,'a')
1446 f=open(filename_phase,'a')
1447 timetuple_data = data_datetime.timetuple()
1447 timetuple_data = data_datetime.timetuple()
1448 day = str(timetuple_data.tm_mday)
1448 day = str(timetuple_data.tm_mday)
1449 month = str(timetuple_data.tm_mon)
1449 month = str(timetuple_data.tm_mon)
1450 year = str(timetuple_data.tm_year)
1450 year = str(timetuple_data.tm_year)
1451 hour = str(timetuple_data.tm_hour)
1451 hour = str(timetuple_data.tm_hour)
1452 minute = str(timetuple_data.tm_min)
1452 minute = str(timetuple_data.tm_min)
1453 second = str(timetuple_data.tm_sec)
1453 second = str(timetuple_data.tm_sec)
1454 f.write(day+' '+month+' '+year+' '+hour+' '+minute+' '+second+' '+str(data[0])+' '+str(data[1])+' '+str(data[2])+' '+str(data[3])+'\n')
1454 f.write(day+' '+month+' '+year+' '+hour+' '+minute+' '+second+' '+str(data[0])+' '+str(data[1])+' '+str(data[2])+' '+str(data[3])+'\n')
1455 f.close()
1455 f.close()
1456
1456
1457
1457
1458 def run(self, dataOut, id, wintitle="", pairsList=None, showprofile='True',
1458 def run(self, dataOut, id, wintitle="", pairsList=None, showprofile='True',
1459 xmin=None, xmax=None, ymin=None, ymax=None, hmin=None, hmax=None,
1459 xmin=None, xmax=None, ymin=None, ymax=None, hmin=None, hmax=None,
1460 timerange=None,
1460 timerange=None,
1461 save=False, figpath='./', figfile=None, show=True, ftp=False, wr_period=1,
1461 save=False, figpath='./', figfile=None, show=True, ftp=False, wr_period=1,
1462 server=None, folder=None, username=None, password=None,
1462 server=None, folder=None, username=None, password=None,
1463 ftp_wei=0, exp_code=0, sub_exp_code=0, plot_pos=0):
1463 ftp_wei=0, exp_code=0, sub_exp_code=0, plot_pos=0):
1464
1464
1465 if not isTimeInHourRange(dataOut.datatime, xmin, xmax):
1465 if not isTimeInHourRange(dataOut.datatime, xmin, xmax):
1466 return
1466 return
1467
1467
1468 if pairsList == None:
1468 if pairsList == None:
1469 pairsIndexList = dataOut.pairsIndexList[:10]
1469 pairsIndexList = dataOut.pairsIndexList[:10]
1470 else:
1470 else:
1471 pairsIndexList = []
1471 pairsIndexList = []
1472 for pair in pairsList:
1472 for pair in pairsList:
1473 if pair not in dataOut.pairsList:
1473 if pair not in dataOut.pairsList:
1474 raise ValueError, "Pair %s is not in dataOut.pairsList" %(pair)
1474 raise ValueError, "Pair %s is not in dataOut.pairsList" %(pair)
1475 pairsIndexList.append(dataOut.pairsList.index(pair))
1475 pairsIndexList.append(dataOut.pairsList.index(pair))
1476
1476
1477 if pairsIndexList == []:
1477 if pairsIndexList == []:
1478 return
1478 return
1479
1479
1480 # if len(pairsIndexList) > 4:
1480 # if len(pairsIndexList) > 4:
1481 # pairsIndexList = pairsIndexList[0:4]
1481 # pairsIndexList = pairsIndexList[0:4]
1482
1482
1483 hmin_index = None
1483 hmin_index = None
1484 hmax_index = None
1484 hmax_index = None
1485
1485
1486 if hmin != None and hmax != None:
1486 if hmin != None and hmax != None:
1487 indexes = numpy.arange(dataOut.nHeights)
1487 indexes = numpy.arange(dataOut.nHeights)
1488 hmin_list = indexes[dataOut.heightList >= hmin]
1488 hmin_list = indexes[dataOut.heightList >= hmin]
1489 hmax_list = indexes[dataOut.heightList <= hmax]
1489 hmax_list = indexes[dataOut.heightList <= hmax]
1490
1490
1491 if hmin_list.any():
1491 if hmin_list.any():
1492 hmin_index = hmin_list[0]
1492 hmin_index = hmin_list[0]
1493
1493
1494 if hmax_list.any():
1494 if hmax_list.any():
1495 hmax_index = hmax_list[-1]+1
1495 hmax_index = hmax_list[-1]+1
1496
1496
1497 x = dataOut.getTimeRange()
1497 x = dataOut.getTimeRange()
1498 #y = dataOut.getHeiRange()
1498 #y = dataOut.getHeiRange()
1499
1499
1500
1500
1501 thisDatetime = dataOut.datatime
1501 thisDatetime = dataOut.datatime
1502
1502
1503 title = wintitle + " Signal Phase" # : %s" %(thisDatetime.strftime("%d-%b-%Y"))
1503 title = wintitle + " Signal Phase" # : %s" %(thisDatetime.strftime("%d-%b-%Y"))
1504 xlabel = "Local Time"
1504 xlabel = "Local Time"
1505 ylabel = "Phase (degrees)"
1505 ylabel = "Phase (degrees)"
1506
1506
1507 update_figfile = False
1507 update_figfile = False
1508
1508
1509 nplots = len(pairsIndexList)
1509 nplots = len(pairsIndexList)
1510 #phase = numpy.zeros((len(pairsIndexList),len(dataOut.beacon_heiIndexList)))
1510 #phase = numpy.zeros((len(pairsIndexList),len(dataOut.beacon_heiIndexList)))
1511 phase_beacon = numpy.zeros(len(pairsIndexList))
1511 phase_beacon = numpy.zeros(len(pairsIndexList))
1512 for i in range(nplots):
1512 for i in range(nplots):
1513 pair = dataOut.pairsList[pairsIndexList[i]]
1513 pair = dataOut.pairsList[pairsIndexList[i]]
1514 ccf = numpy.average(dataOut.data_cspc[pairsIndexList[i], :, hmin_index:hmax_index], axis=0)
1514 ccf = numpy.average(dataOut.data_cspc[pairsIndexList[i], :, hmin_index:hmax_index], axis=0)
1515 powa = numpy.average(dataOut.data_spc[pair[0], :, hmin_index:hmax_index], axis=0)
1515 powa = numpy.average(dataOut.data_spc[pair[0], :, hmin_index:hmax_index], axis=0)
1516 powb = numpy.average(dataOut.data_spc[pair[1], :, hmin_index:hmax_index], axis=0)
1516 powb = numpy.average(dataOut.data_spc[pair[1], :, hmin_index:hmax_index], axis=0)
1517 avgcoherenceComplex = ccf/numpy.sqrt(powa*powb)
1517 avgcoherenceComplex = ccf/numpy.sqrt(powa*powb)
1518 phase = numpy.arctan2(avgcoherenceComplex.imag, avgcoherenceComplex.real)*180/numpy.pi
1518 phase = numpy.arctan2(avgcoherenceComplex.imag, avgcoherenceComplex.real)*180/numpy.pi
1519
1519
1520 #print "Phase %d%d" %(pair[0], pair[1])
1520 #print "Phase %d%d" %(pair[0], pair[1])
1521 #print phase[dataOut.beacon_heiIndexList]
1521 #print phase[dataOut.beacon_heiIndexList]
1522
1522
1523 if dataOut.beacon_heiIndexList:
1523 if dataOut.beacon_heiIndexList:
1524 phase_beacon[i] = numpy.average(phase[dataOut.beacon_heiIndexList])
1524 phase_beacon[i] = numpy.average(phase[dataOut.beacon_heiIndexList])
1525 else:
1525 else:
1526 phase_beacon[i] = numpy.average(phase)
1526 phase_beacon[i] = numpy.average(phase)
1527
1527
1528 if not self.isConfig:
1528 if not self.isConfig:
1529
1529
1530 nplots = len(pairsIndexList)
1530 nplots = len(pairsIndexList)
1531
1531
1532 self.setup(id=id,
1532 self.setup(id=id,
1533 nplots=nplots,
1533 nplots=nplots,
1534 wintitle=wintitle,
1534 wintitle=wintitle,
1535 showprofile=showprofile,
1535 showprofile=showprofile,
1536 show=show)
1536 show=show)
1537
1537
1538 if timerange != None:
1538 if timerange != None:
1539 self.timerange = timerange
1539 self.timerange = timerange
1540
1540
1541 self.xmin, self.xmax = self.getTimeLim(x, xmin, xmax, timerange)
1541 self.xmin, self.xmax = self.getTimeLim(x, xmin, xmax, timerange)
1542
1542
1543 if ymin == None: ymin = 0
1543 if ymin == None: ymin = 0
1544 if ymax == None: ymax = 360
1544 if ymax == None: ymax = 360
1545
1545
1546 self.FTP_WEI = ftp_wei
1546 self.FTP_WEI = ftp_wei
1547 self.EXP_CODE = exp_code
1547 self.EXP_CODE = exp_code
1548 self.SUB_EXP_CODE = sub_exp_code
1548 self.SUB_EXP_CODE = sub_exp_code
1549 self.PLOT_POS = plot_pos
1549 self.PLOT_POS = plot_pos
1550
1550
1551 self.name = thisDatetime.strftime("%Y%m%d_%H%M%S")
1551 self.name = thisDatetime.strftime("%Y%m%d_%H%M%S")
1552 self.isConfig = True
1552 self.isConfig = True
1553 self.figfile = figfile
1553 self.figfile = figfile
1554 self.xdata = numpy.array([])
1554 self.xdata = numpy.array([])
1555 self.ydata = numpy.array([])
1555 self.ydata = numpy.array([])
1556
1556
1557 update_figfile = True
1557 update_figfile = True
1558
1558
1559 #open file beacon phase
1559 #open file beacon phase
1560 path = '%s%03d' %(self.PREFIX, self.id)
1560 path = '%s%03d' %(self.PREFIX, self.id)
1561 beacon_file = os.path.join(path,'%s.txt'%self.name)
1561 beacon_file = os.path.join(path,'%s.txt'%self.name)
1562 self.filename_phase = os.path.join(figpath,beacon_file)
1562 self.filename_phase = os.path.join(figpath,beacon_file)
1563 #self.save_phase(self.filename_phase)
1563 #self.save_phase(self.filename_phase)
1564
1564
1565
1565
1566 #store data beacon phase
1566 #store data beacon phase
1567 #self.save_data(self.filename_phase, phase_beacon, thisDatetime)
1567 #self.save_data(self.filename_phase, phase_beacon, thisDatetime)
1568
1568
1569 self.setWinTitle(title)
1569 self.setWinTitle(title)
1570
1570
1571
1571
1572 title = "Phase Plot %s" %(thisDatetime.strftime("%Y/%m/%d %H:%M:%S"))
1572 title = "Phase Plot %s" %(thisDatetime.strftime("%Y/%m/%d %H:%M:%S"))
1573
1573
1574 legendlabels = ["Pair (%d,%d)"%(pair[0], pair[1]) for pair in dataOut.pairsList]
1574 legendlabels = ["Pair (%d,%d)"%(pair[0], pair[1]) for pair in dataOut.pairsList]
1575
1575
1576 axes = self.axesList[0]
1576 axes = self.axesList[0]
1577
1577
1578 self.xdata = numpy.hstack((self.xdata, x[0:1]))
1578 self.xdata = numpy.hstack((self.xdata, x[0:1]))
1579
1579
1580 if len(self.ydata)==0:
1580 if len(self.ydata)==0:
1581 self.ydata = phase_beacon.reshape(-1,1)
1581 self.ydata = phase_beacon.reshape(-1,1)
1582 else:
1582 else:
1583 self.ydata = numpy.hstack((self.ydata, phase_beacon.reshape(-1,1)))
1583 self.ydata = numpy.hstack((self.ydata, phase_beacon.reshape(-1,1)))
1584
1584
1585
1585
1586 axes.pmultilineyaxis(x=self.xdata, y=self.ydata,
1586 axes.pmultilineyaxis(x=self.xdata, y=self.ydata,
1587 xmin=self.xmin, xmax=self.xmax, ymin=ymin, ymax=ymax,
1587 xmin=self.xmin, xmax=self.xmax, ymin=ymin, ymax=ymax,
1588 xlabel=xlabel, ylabel=ylabel, title=title, legendlabels=legendlabels, marker='x', markersize=8, linestyle="solid",
1588 xlabel=xlabel, ylabel=ylabel, title=title, legendlabels=legendlabels, marker='x', markersize=8, linestyle="solid",
1589 XAxisAsTime=True, grid='both'
1589 XAxisAsTime=True, grid='both'
1590 )
1590 )
1591
1591
1592 self.draw()
1592 self.draw()
1593
1593
1594 if dataOut.ltctime >= self.xmax:
1594 if dataOut.ltctime >= self.xmax:
1595 self.counter_imagwr = wr_period
1595 self.counter_imagwr = wr_period
1596 self.isConfig = False
1596 self.isConfig = False
1597 update_figfile = True
1597 update_figfile = True
1598
1598
1599 self.save(figpath=figpath,
1599 self.save(figpath=figpath,
1600 figfile=figfile,
1600 figfile=figfile,
1601 save=save,
1601 save=save,
1602 ftp=ftp,
1602 ftp=ftp,
1603 wr_period=wr_period,
1603 wr_period=wr_period,
1604 thisDatetime=thisDatetime,
1604 thisDatetime=thisDatetime,
1605 update_figfile=update_figfile)
1605 update_figfile=update_figfile)
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
@@ -1,1 +1,1
1 <Project description="Segundo Test" id="191" name="test01"><ReadUnit datatype="SpectraReader" id="1911" inputId="0" name="SpectraReader"><Operation id="19111" name="run" priority="1" type="self"><Parameter format="str" id="191111" name="datatype" value="SpectraReader" /><Parameter format="str" id="191112" name="path" value="/media/erick/6F60F7113095A154/CLAIRE/CLAIRE_WINDS_2MHZ/DATA/pdataCLAIRE/Extra" /><Parameter format="date" id="191113" name="startDate" value="2018/02/01" /><Parameter format="date" id="191114" name="endDate" value="2018/02/01" /><Parameter format="time" id="191115" name="startTime" value="17:00:00" /><Parameter format="time" id="191116" name="endTime" value="20:00:00" /><Parameter format="int" id="191118" name="online" value="0" /><Parameter format="int" id="191119" name="walk" value="1" /></Operation><Operation id="19112" name="printInfo" priority="2" type="self" /><Operation id="19113" name="printNumberOfBlock" priority="3" type="self" /></ReadUnit><ProcUnit datatype="Parameters" id="1913" inputId="1912" name="ParametersProc"><Operation id="19131" name="run" priority="1" type="self" /><Operation id="19132" name="SpectralFilters" priority="2" type="other"><Parameter format="float" id="191321" name="Wind_Velocity_Limit" value="2.5" /><Parameter format="float" id="191322" name="Rain_Velocity_Limit" value="1.5" /></Operation><Operation id="19133" name="FullSpectralAnalysis" priority="3" type="other"><Parameter format="float" id="191331" name="SNRlimit" value="-16" /><Parameter format="float" id="191332" name="E01" value="1.500" /><Parameter format="float" id="191333" name="E02" value="1.500" /><Parameter format="float" id="191334" name="E12" value="0" /><Parameter format="float" id="191335" name="N01" value="0.875" /><Parameter format="float" id="191336" name="N02" value="-0.875" /><Parameter format="float" id="191337" name="N12" value="-1.750" /></Operation><Operation id="19134" name="WindProfilerPlot" priority="4" type="other"><Parameter format="int" id="191341" name="id" value="4" /><Parameter format="str" id="191342" name="wintitle" value="Wind Profiler" /><Parameter format="float" id="191343" name="xmin" value="17" /><Parameter format="float" id="191344" name="xmax" value="20" /><Parameter format="float" id="191345" name="ymin" value="0" /><Parameter format="int" id="191346" name="ymax" value="8" /><Parameter format="float" id="191347" name="zmin" value="-20" /><Parameter format="float" id="191348" name="zmax" value="20" /><Parameter format="float" id="191349" name="SNRmin" value="-20" /><Parameter format="float" id="191350" name="SNRmax" value="20" /><Parameter format="float" id="191351" name="zmin_ver" value="-200" /><Parameter format="float" id="191352" name="zmax_ver" value="200" /><Parameter format="float" id="191353" name="SNRthresh" value="-20" /><Parameter format="int" id="191354" name="save" value="1" /><Parameter format="str" id="191355" name="figpath" value="/media/erick/6F60F7113095A154/CLAIRE/CLAIRE_WINDS_2MHZ/DATA/pdataCLAIRE/Extra" /></Operation><Operation id="19135" name="PrecipitationProc" priority="5" type="other" /><Operation id="19136" name="ParametersPlot" priority="6" type="other"><Parameter format="int" id="191361" name="id" value="10" /><Parameter format="str" id="191362" name="wintitle" value="First_gg" /><Parameter format="int" id="191363" name="zmin" value="-20" /><Parameter format="int" id="191364" name="zmax" value="60" /><Parameter format="int" id="191365" name="ymin" value="0" /><Parameter format="int" id="191366" name="ymax" value="8" /><Parameter format="int" id="191367" name="xmin" value="17" /><Parameter format="int" id="191368" name="xmax" value="20" /><Parameter format="int" id="191369" name="save" value="1" /><Parameter format="str" id="191370" name="figpath" value="/media/erick/6F60F7113095A154/CLAIRE/CLAIRE_WINDS_2MHZ/DATA/pdataCLAIRE/Extra" /></Operation><Operation id="19137" name="ParamWriter" priority="7" type="other"><Parameter format="str" id="191371" name="path" value="/media/erick/6F60F7113095A154/CLAIRE/CLAIRE_WINDS_2MHZ/DATA/pdatatest/test1024" /><Parameter format="int" id="191372" name="blocksPerFile" value="100" /><Parameter format="list" id="191373" name="metadataList" value="heightList,timeZone,paramInterval" /><Parameter format="list" id="191374" name="dataList" value="data_output,data_SNR,utctime,utctimeInit" /></Operation></ProcUnit><ProcUnit datatype="SpectraProc" id="1912" inputId="1911" name="SpectraProc"><Operation id="19121" name="run" priority="1" type="self" /><Operation id="19122" name="setRadarFrequency" priority="2" type="self"><Parameter format="float" id="191221" name="frequency" value="445.09e6" /></Operation></ProcUnit></Project> No newline at end of file
1 <Project description="Segundo Test" id="191" name="test01"><ReadUnit datatype="SpectraReader" id="1911" inputId="0" name="SpectraReader"><Operation id="19111" name="run" priority="1" type="self"><Parameter format="str" id="191111" name="datatype" value="SpectraReader" /><Parameter format="str" id="191112" name="path" value="/media/erick/6F60F7113095A154/CLAIRE/CLAIRE_WINDS_2MHZ/DATA/pdataCLAIRE/Extra" /><Parameter format="date" id="191113" name="startDate" value="2018/02/01" /><Parameter format="date" id="191114" name="endDate" value="2018/02/01" /><Parameter format="time" id="191115" name="startTime" value="17:00:00" /><Parameter format="time" id="191116" name="endTime" value="20:00:00" /><Parameter format="int" id="191118" name="online" value="0" /><Parameter format="int" id="191119" name="walk" value="1" /></Operation><Operation id="19112" name="printInfo" priority="2" type="self" /><Operation id="19113" name="printNumberOfBlock" priority="3" type="self" /></ReadUnit><ProcUnit datatype="Parameters" id="1913" inputId="1912" name="ParametersProc"><Operation id="19131" name="run" priority="1" type="self" /><Operation id="19132" name="SpectralFilters" priority="2" type="other"><Parameter format="float" id="191321" name="PositiveLimit" value="1.5" /><Parameter format="float" id="191322" name="NegativeLimit" value="3.5" /></Operation><Operation id="19133" name="FullSpectralAnalysis" priority="3" type="other"><Parameter format="float" id="191331" name="SNRlimit" value="-16" /><Parameter format="float" id="191332" name="E01" value="1.500" /><Parameter format="float" id="191333" name="E02" value="1.500" /><Parameter format="float" id="191334" name="E12" value="0" /><Parameter format="float" id="191335" name="N01" value="0.875" /><Parameter format="float" id="191336" name="N02" value="-0.875" /><Parameter format="float" id="191337" name="N12" value="-1.750" /></Operation><Operation id="19134" name="WindProfilerPlot" priority="4" type="other"><Parameter format="int" id="191341" name="id" value="4" /><Parameter format="str" id="191342" name="wintitle" value="Wind Profiler" /><Parameter format="float" id="191343" name="xmin" value="17" /><Parameter format="float" id="191344" name="xmax" value="20" /><Parameter format="float" id="191345" name="ymin" value="0" /><Parameter format="int" id="191346" name="ymax" value="11" /><Parameter format="float" id="191347" name="zmin" value="-20" /><Parameter format="float" id="191348" name="zmax" value="20" /><Parameter format="float" id="191349" name="SNRmin" value="-20" /><Parameter format="float" id="191350" name="SNRmax" value="20" /><Parameter format="float" id="191351" name="zmin_ver" value="-200" /><Parameter format="float" id="191352" name="zmax_ver" value="200" /><Parameter format="float" id="191353" name="SNRthresh" value="-20" /><Parameter format="int" id="191354" name="save" value="1" /><Parameter format="str" id="191355" name="figpath" value="/media/erick/6F60F7113095A154/CLAIRE/CLAIRE_WINDS_2MHZ/DATA/pdataCLAIRE/Extra" /></Operation><Operation id="19135" name="PrecipitationProc" priority="5" type="other" /><Operation id="19136" name="ParametersPlot" priority="6" type="other"><Parameter format="int" id="191361" name="id" value="10" /><Parameter format="str" id="191362" name="wintitle" value="First_gg" /><Parameter format="str" id="191363" name="colormap" value="ocean_r" /><Parameter format="int" id="191364" name="zmin" value="50" /><Parameter format="int" id="191365" name="zmax" value="100" /><Parameter format="int" id="191366" name="ymin" value="0" /><Parameter format="int" id="191367" name="ymax" value="11" /><Parameter format="int" id="191368" name="xmin" value="17" /><Parameter format="int" id="191369" name="xmax" value="20" /><Parameter format="int" id="191370" name="save" value="1" /><Parameter format="str" id="191371" name="figpath" value="/media/erick/6F60F7113095A154/CLAIRE/CLAIRE_WINDS_2MHZ/DATA/pdataCLAIRE/Extra" /></Operation><Operation id="19137" name="SpcParamPlot" priority="7" type="other"><Parameter format="int" id="191371" name="id" value="21" /><Parameter format="str" id="191372" name="wintitle" value="Primer eco removido" /><Parameter format="str" id="191373" name="xaxis" value="velocity" /><Parameter format="int" id="191374" name="showprofile" value="1" /><Parameter format="int" id="191375" name="zmin" value="10" /><Parameter format="int" id="191376" name="zmax" value="40" /><Parameter format="int" id="191377" name="Selector" value="1" /></Operation><Operation id="19138" name="ParamWriter" priority="8" type="other"><Parameter format="str" id="191381" name="path" value="/media/erick/6F60F7113095A154/CLAIRE/CLAIRE_WINDS_2MHZ/DATA/pdatatest/test1024" /><Parameter format="int" id="191382" name="blocksPerFile" value="100" /><Parameter format="list" id="191383" name="metadataList" value="heightList,timeZone,paramInterval" /><Parameter format="list" id="191384" name="dataList" value="data_output,data_SNR,utctime,utctimeInit" /></Operation></ProcUnit><ProcUnit datatype="SpectraProc" id="1912" inputId="1911" name="SpectraProc"><Operation id="19121" name="run" priority="1" type="self" /><Operation id="19122" name="setRadarFrequency" priority="2" type="self"><Parameter format="float" id="191221" name="frequency" value="445.09e6" /></Operation></ProcUnit></Project> No newline at end of file
General Comments 0
You need to be logged in to leave comments. Login now