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