jroplot_voltage.py
302 lines
| 9.6 KiB
| text/x-python
|
PythonLexer
|
r487 | ''' | ||
|
r568 | Created on Jul 9, 2014 | ||
|
r487 | |||
|
r568 | @author: roj-idl71 | ||
''' | ||||
import os | ||||
|
r487 | import datetime | ||
import numpy | ||||
|
r1285 | from schainpy.model.graphics.jroplot_base import Plot, plt | ||
|
r1173 | |||
|
r1285 | |||
class ScopePlot(Plot): | ||||
''' | ||||
Plot for Scope | ||||
r1296 | ''' | |||
|
r1285 | |||
CODE = 'scope' | ||||
plot_type = 'scatter' | ||||
r1296 | ||||
|
r1285 | def setup(self): | ||
self.xaxis = 'Range (Km)' | ||||
self.ncols = 1 | ||||
self.nrows = 1 | ||||
self.nplots = 1 | ||||
self.ylabel = 'Intensity [dB]' | ||||
self.titles = ['Scope'] | ||||
self.colorbar = False | ||||
self.width = 6 | ||||
self.height = 4 | ||||
r1343 | def update(self, dataOut): | |||
data = {} | ||||
meta = { | ||||
'nProfiles': dataOut.nProfiles, | ||||
'flagDataAsBlock': dataOut.flagDataAsBlock, | ||||
'profileIndex': dataOut.profileIndex, | ||||
} | ||||
if self.CODE == 'scope': | ||||
data[self.CODE] = dataOut.data | ||||
elif self.CODE == 'pp_power': | ||||
data[self.CODE] = dataOut.dataPP_POWER | ||||
elif self.CODE == 'pp_signal': | ||||
data[self.CODE] = dataOut.dataPP_POW | ||||
elif self.CODE == 'pp_velocity': | ||||
data[self.CODE] = dataOut.dataPP_DOP | ||||
elif self.CODE == 'pp_specwidth': | ||||
data[self.CODE] = dataOut.dataPP_WIDTH | ||||
return data, meta | ||||
|
r1285 | def plot_iq(self, x, y, channelIndexList, thisDatetime, wintitle): | ||
r1296 | ||||
r1396 | yreal = y[channelIndexList, :].real | |||
yimag = y[channelIndexList, :].imag | ||||
title = wintitle + " Scope: %s" % (thisDatetime.strftime("%d-%b-%Y")) | ||||
|
r1285 | self.xlabel = "Range (Km)" | ||
self.ylabel = "Intensity - IQ" | ||||
r1296 | ||||
|
r1285 | self.y = yreal | ||
self.x = x | ||||
r1296 | ||||
self.titles[0] = title | ||||
|
r487 | |||
r1396 | for i, ax in enumerate(self.axes): | |||
title = "Channel %d" % (i) | ||||
|
r1285 | if ax.firsttime: | ||
r1343 | self.xmin = min(x) | |||
self.xmax = max(x) | ||||
r1396 | ax.plt_r = ax.plot(x, yreal[i, :], color='b')[0] | |||
ax.plt_i = ax.plot(x, yimag[i, :], color='r')[0] | ||||
|
r1285 | else: | ||
r1396 | ax.plt_r.set_data(x, yreal[i, :]) | |||
ax.plt_i.set_data(x, yimag[i, :]) | ||||
r1296 | ||||
|
r1285 | def plot_power(self, x, y, channelIndexList, thisDatetime, wintitle): | ||
r1396 | y = y[channelIndexList, :] * numpy.conjugate(y[channelIndexList, :]) | |||
|
r487 | yreal = y.real | ||
r1396 | yreal = 10 * numpy.log10(yreal) | |||
|
r1285 | self.y = yreal | ||
r1396 | title = wintitle + " Power: %s" % (thisDatetime.strftime("%d-%b-%Y")) | |||
|
r1285 | self.xlabel = "Range (Km)" | ||
r1343 | self.ylabel = "Intensity [dB]" | |||
r1296 | ||||
|
r1285 | self.titles[0] = title | ||
r1396 | for i, ax in enumerate(self.axes): | |||
title = "Channel %d" % (i) | ||||
ychannel = yreal[i, :] | ||||
r1296 | ||||
if ax.firsttime: | ||||
r1343 | self.xmin = min(x) | |||
self.xmax = max(x) | ||||
|
r1285 | ax.plt_r = ax.plot(x, ychannel)[0] | ||
else: | ||||
ax.plt_r.set_data(x, ychannel) | ||||
r1296 | ||||
def plot_weatherpower(self, x, y, channelIndexList, thisDatetime, wintitle): | ||||
r1396 | y = y[channelIndexList, :] | |||
yreal = y.real | ||||
yreal = 10 * numpy.log10(yreal) | ||||
r1296 | self.y = yreal | |||
r1396 | title = wintitle + " Scope: %s" % (thisDatetime.strftime("%d-%b-%Y %H:%M:%S")) | |||
r1296 | self.xlabel = "Range (Km)" | |||
self.ylabel = "Intensity" | ||||
r1396 | self.xmin = min(x) | |||
self.xmax = max(x) | ||||
r1296 | ||||
r1396 | self.titles[0] = title | |||
for i, ax in enumerate(self.axes): | ||||
title = "Channel %d" % (i) | ||||
r1296 | ||||
r1396 | ychannel = yreal[i, :] | |||
r1296 | ||||
if ax.firsttime: | ||||
ax.plt_r = ax.plot(x, ychannel)[0] | ||||
else: | ||||
r1396 | # pass | |||
r1296 | ax.plt_r.set_data(x, ychannel) | |||
def plot_weathervelocity(self, x, y, channelIndexList, thisDatetime, wintitle): | ||||
r1396 | x = x[channelIndexList, :] | |||
yreal = y | ||||
r1296 | self.y = yreal | |||
r1396 | title = wintitle + " Scope: %s" % (thisDatetime.strftime("%d-%b-%Y %H:%M:%S")) | |||
r1296 | self.xlabel = "Velocity (m/s)" | |||
self.ylabel = "Range (Km)" | ||||
r1396 | self.xmin = numpy.min(x) | |||
self.xmax = numpy.max(x) | ||||
self.titles[0] = title | ||||
for i, ax in enumerate(self.axes): | ||||
title = "Channel %d" % (i) | ||||
xchannel = x[i, :] | ||||
r1296 | if ax.firsttime: | |||
ax.plt_r = ax.plot(xchannel, yreal)[0] | ||||
else: | ||||
r1396 | # pass | |||
r1296 | ax.plt_r.set_data(xchannel, yreal) | |||
|
r487 | |||
r1305 | def plot_weatherspecwidth(self, x, y, channelIndexList, thisDatetime, wintitle): | |||
r1396 | x = x[channelIndexList, :] | |||
yreal = y | ||||
r1305 | self.y = yreal | |||
r1396 | title = wintitle + " Scope: %s" % (thisDatetime.strftime("%d-%b-%Y %H:%M:%S")) | |||
r1305 | self.xlabel = "width " | |||
self.ylabel = "Range (Km)" | ||||
r1396 | self.xmin = numpy.min(x) | |||
self.xmax = numpy.max(x) | ||||
self.titles[0] = title | ||||
for i, ax in enumerate(self.axes): | ||||
title = "Channel %d" % (i) | ||||
xchannel = x[i, :] | ||||
r1305 | if ax.firsttime: | |||
ax.plt_r = ax.plot(xchannel, yreal)[0] | ||||
else: | ||||
r1396 | # pass | |||
r1305 | ax.plt_r.set_data(xchannel, yreal) | |||
|
r1285 | def plot(self): | ||
if self.channels: | ||||
channels = self.channels | ||||
|
r487 | else: | ||
|
r1285 | channels = self.data.channels | ||
thisDatetime = datetime.datetime.utcfromtimestamp(self.data.times[-1]) | ||||
r1343 | ||||
scope = self.data[-1][self.CODE] | ||||
r1296 | ||||
|
r1285 | if self.data.flagDataAsBlock: | ||
r1296 | ||||
|
r1285 | for i in range(self.data.nProfiles): | ||
r1396 | wintitle1 = " [Profile = %d] " % i | |||
if self.CODE == "scope": | ||||
r1296 | if self.type == "power": | |||
r1343 | self.plot_power(self.data.yrange, | |||
r1396 | scope[:, i, :], | |||
r1296 | channels, | |||
thisDatetime, | ||||
wintitle1 | ||||
) | ||||
if self.type == "iq": | ||||
r1343 | self.plot_iq(self.data.yrange, | |||
r1396 | scope[:, i, :], | |||
r1296 | channels, | |||
thisDatetime, | ||||
wintitle1 | ||||
|
r1285 | ) | ||
r1396 | if self.CODE == "pp_power": | |||
r1343 | self.plot_weatherpower(self.data.yrange, | |||
r1396 | scope[:, i, :], | |||
r1296 | channels, | |||
thisDatetime, | ||||
wintitle | ||||
) | ||||
r1396 | if self.CODE == "pp_signal": | |||
r1343 | self.plot_weatherpower(self.data.yrange, | |||
r1396 | scope[:, i, :], | |||
r1312 | channels, | |||
thisDatetime, | ||||
wintitle | ||||
) | ||||
r1396 | if self.CODE == "pp_velocity": | |||
self.plot_weathervelocity(scope[:, i, :], | ||||
r1343 | self.data.yrange, | |||
r1296 | channels, | |||
thisDatetime, | ||||
wintitle | ||||
) | ||||
r1396 | if self.CODE == "pp_spcwidth": | |||
self.plot_weatherspecwidth(scope[:, i, :], | ||||
r1343 | self.data.yrange, | |||
r1305 | channels, | |||
thisDatetime, | ||||
wintitle | ||||
) | ||||
r1296 | else: | |||
r1396 | wintitle = " [Profile = %d] " % self.data.profileIndex | |||
if self.CODE == "scope": | ||||
r1296 | if self.type == "power": | |||
r1343 | self.plot_power(self.data.yrange, | |||
r1296 | scope, | |||
channels, | ||||
thisDatetime, | ||||
wintitle | ||||
) | ||||
|
r1285 | |||
if self.type == "iq": | ||||
r1343 | self.plot_iq(self.data.yrange, | |||
r1296 | scope, | |||
channels, | ||||
thisDatetime, | ||||
wintitle | ||||
|
r1285 | ) | ||
r1396 | if self.CODE == "pp_power": | |||
r1343 | self.plot_weatherpower(self.data.yrange, | |||
r1296 | scope, | |||
channels, | ||||
thisDatetime, | ||||
wintitle | ||||
) | ||||
r1396 | if self.CODE == "pp_signal": | |||
r1343 | self.plot_weatherpower(self.data.yrange, | |||
r1312 | scope, | |||
channels, | ||||
thisDatetime, | ||||
wintitle | ||||
) | ||||
r1396 | if self.CODE == "pp_velocity": | |||
r1296 | self.plot_weathervelocity(scope, | |||
r1343 | self.data.yrange, | |||
r1296 | channels, | |||
thisDatetime, | ||||
wintitle | ||||
) | ||||
r1396 | if self.CODE == "pp_specwidth": | |||
r1305 | self.plot_weatherspecwidth(scope, | |||
r1343 | self.data.yrange, | |||
r1305 | channels, | |||
thisDatetime, | ||||
wintitle | ||||
) | ||||
r1296 | ||||
class PulsepairPowerPlot(ScopePlot): | ||||
''' | ||||
r1312 | Plot for P= S+N | |||
r1296 | ''' | |||
CODE = 'pp_power' | ||||
plot_type = 'scatter' | ||||
class PulsepairVelocityPlot(ScopePlot): | ||||
''' | ||||
r1312 | Plot for VELOCITY | |||
r1296 | ''' | |||
CODE = 'pp_velocity' | ||||
plot_type = 'scatter' | ||||
r1305 | ||||
class PulsepairSpecwidthPlot(ScopePlot): | ||||
''' | ||||
r1312 | Plot for WIDTH | |||
r1305 | ''' | |||
CODE = 'pp_specwidth' | ||||
plot_type = 'scatter' | ||||
r1312 | ||||
class PulsepairSignalPlot(ScopePlot): | ||||
''' | ||||
Plot for S | ||||
''' | ||||
CODE = 'pp_signal' | ||||
plot_type = 'scatter' | ||||