diff --git a/schainpy/model/graphics/jroplot_base.py b/schainpy/model/graphics/jroplot_base.py index 9bf65f7..f692966 100644 --- a/schainpy/model/graphics/jroplot_base.py +++ b/schainpy/model/graphics/jroplot_base.py @@ -20,7 +20,7 @@ import matplotlib,re if 'BACKEND' in os.environ: matplotlib.use(os.environ['BACKEND']) elif 'linux' in sys.platform: - matplotlib.use("TkAgg") + matplotlib.use("Agg") elif 'darwin' in sys.platform: matplotlib.use('MacOSX') else: @@ -168,6 +168,7 @@ class Plot(Operation): bgcolor = 'white' buffering = True __missing = 1E30 + projection = None __attrs__ = ['show', 'save', 'ymin', 'ymax', 'zmin', 'zmax', 'title', 'showprofile'] @@ -252,7 +253,7 @@ class Plot(Operation): self.ang_max = kwargs.get('ang_max', None) self.mode = kwargs.get('mode', None) self.mask = kwargs.get('mask', False) - + self.shapes = kwargs.get('shapes', './') if self.server: if not self.server.startswith('tcp://'): @@ -277,8 +278,8 @@ class Plot(Operation): if self.width is None: self.width = 8 - self.figures = [] - self.axes = [] + self.figures = {'PPI':[], 'RHI':[]} + self.axes = {'PPI':[], 'RHI':[]} self.cb_axes = [] self.pf_axes = [] self.cmaps = [] @@ -289,18 +290,29 @@ class Plot(Operation): if self.oneFigure: if self.height is None: self.height = 1.4 * self.nrows + 1 - fig = plt.figure(figsize=(self.width, self.height), + fig_p = plt.figure(figsize=(self.width, self.height), edgecolor='k', facecolor='w') - self.figures.append(fig) - for n in range(self.nplots): - ax = fig.add_subplot(self.nrows, self.ncols, - n + 1, polar=self.polar) - ax.tick_params(labelsize=8) - ax.firsttime = True - ax.index = 0 - ax.press = None - self.axes.append(ax) + fig_r = plt.figure(figsize=(self.width, self.height), + edgecolor='k', + facecolor='w') + self.figures['PPI'].append(fig_p) + self.figures['RHI'].append(fig_r) + for n in range(self.nplots): + ax_p = fig_p.add_subplot(self.nrows, self.ncols, n+1, polar=self.polar, projection=self.projection) + ax_r = fig_r.add_subplot(self.nrows, self.ncols, n+1, polar=self.polar) + ax_p.tick_params(labelsize=8) + ax_p.firsttime = True + ax_p.index = 0 + ax_p.press = None + ax_r.tick_params(labelsize=8) + ax_r.firsttime = True + ax_r.index = 0 + ax_r.press = None + + self.axes['PPI'].append(ax_p) + self.axes['RHI'].append(ax_r) + if self.showprofile: cax = self.__add_axes(ax, size=size, pad=pad) cax.tick_params(labelsize=8) @@ -312,13 +324,19 @@ class Plot(Operation): fig = plt.figure(figsize=(self.width, self.height), edgecolor='k', facecolor='w') - ax = fig.add_subplot(1, 1, 1, polar=self.polar) - ax.tick_params(labelsize=8) - ax.firsttime = True - ax.index = 0 - ax.press = None + ax_p = fig.add_subplot(1, 1, 1, polar=self.polar, projection=self.projection) + ax_r = fig.add_subplot(1, 1, 1, polar=self.polar) + ax_p.tick_params(labelsize=8) + ax_p.firsttime = True + ax_p.index = 0 + ax_p.press = None + ax_r.tick_params(labelsize=8) + ax_r.firsttime = True + ax_r.index = 0 + ax_r.press = None self.figures.append(fig) - self.axes.append(ax) + self.axes['PPI'].append(ax_p) + self.axes['RHI'].append(ax_r) if self.showprofile: cax = self.__add_axes(ax, size=size, pad=pad) cax.tick_params(labelsize=8) @@ -378,7 +396,7 @@ class Plot(Operation): Set min and max values, labels, ticks and titles ''' - for n, ax in enumerate(self.axes): + for n, ax in enumerate(self.axes[self.mode]): if ax.firsttime: if self.xaxis != 'time': xmin = self.xmin @@ -390,7 +408,9 @@ class Plot(Operation): ax.xaxis.set_major_locator(LinearLocator(9)) ymin = self.ymin if self.ymin is not None else numpy.nanmin(self.y[numpy.isfinite(self.y)]) ymax = self.ymax if self.ymax is not None else numpy.nanmax(self.y[numpy.isfinite(self.y)]) + ax.set_facecolor(self.bgcolor) + if self.xscale: ax.xaxis.set_major_formatter(FuncFormatter( lambda x, pos: '{0:g}'.format(x*self.xscale))) @@ -407,7 +427,7 @@ class Plot(Operation): self.pf_axes[n].set_xlabel('dB') self.pf_axes[n].grid(b=True, axis='x') [tick.set_visible(False) - for tick in self.pf_axes[n].get_yticklabels()] + for tick in self.pf_axes[n].get_yticklabels()] if self.colorbar: ax.cbar = plt.colorbar( ax.plt, ax=ax, fraction=0.05, pad=0.06, aspect=10) @@ -419,8 +439,9 @@ class Plot(Operation): ax.cbar.set_label(self.cb_labels[n], size=8) else: ax.cbar = None - ax.set_xlim(xmin, xmax) - ax.set_ylim(ymin, ymax) + if self.mode == 'RHI': + ax.set_xlim(xmin, xmax) + ax.set_ylim(ymin, ymax) ax.firsttime = False if self.grid: ax.grid(True) @@ -447,7 +468,7 @@ class Plot(Operation): ax.xaxis.labelpad = 16 if self.firsttime: - for n, fig in enumerate(self.figures): + for fig in self.figures['PPI'] + self.figures['RHI']: fig.subplots_adjust(**self.plots_adjust) self.firsttime = False @@ -456,7 +477,9 @@ class Plot(Operation): Reset axes for redraw plots ''' - for ax in self.axes+self.pf_axes+self.cb_axes: + axes = self.pf_axes + self.cb_axes + self.axes[self.mode] + + for ax in axes: ax.clear() ax.firsttime = True if hasattr(ax, 'cbar') and ax.cbar: @@ -469,8 +492,8 @@ class Plot(Operation): self.plot() self.format() - - for n, fig in enumerate(self.figures): + figures = self.figures[self.mode] + for n, fig in enumerate(figures): if self.nrows == 0 or self.nplots == 0: log.warning('No data', self.name) fig.text(0.5, 0.5, 'No Data', fontsize='large', ha='center') @@ -511,8 +534,10 @@ class Plot(Operation): ''' if self.mode is not None: ang = 'AZ' if self.mode == 'RHI' else 'EL' - label = '_{}_{}_{}'.format(self.mode, ang, self.mode_value) + folder = '_{}_{}_{}'.format(self.mode, ang, self.mode_value) + label = '{}{}_{}'.format(ang[0], self.mode_value, self.save_code) else: + folder = '' label = '' if self.oneFigure: @@ -521,18 +546,19 @@ class Plot(Operation): self.save_time = self.data.max_time - fig = self.figures[n] + fig = self.figures[self.mode][n] if self.throttle == 0: if self.oneFigure: figname = os.path.join( self.save, - self.save_code + label, - '{}_{}.png'.format( - self.save_code + label, + self.save_code + folder, + '{}_{}_{}.png'.format( + 'SOPHY', self.getDateTime(self.data.max_time).strftime( '%Y%m%d_%H%M%S' ), + label ) ) else: diff --git a/schainpy/model/graphics/jroplot_parameters.py b/schainpy/model/graphics/jroplot_parameters.py index 93828e6..eabf3d4 100644 --- a/schainpy/model/graphics/jroplot_parameters.py +++ b/schainpy/model/graphics/jroplot_parameters.py @@ -3,6 +3,10 @@ import datetime import warnings import numpy from mpl_toolkits.axisartist.grid_finder import FixedLocator, DictFormatter +from matplotlib.patches import Circle +import cartopy.crs as ccrs +from cartopy.feature import ShapelyFeature +import cartopy.io.shapereader as shpreader from schainpy.model.graphics.jroplot_base import Plot, plt from schainpy.model.graphics.jroplot_spectra import SpectraPlot, RTIPlot, CoherencePlot, SpectraCutPlot @@ -514,6 +518,7 @@ class WeatherParamsPlot(Plot): #plot_name = 'RHI' plot_type = 'scattermap' buffering = False + projection = ccrs.PlateCarree() def setup(self): @@ -522,8 +527,7 @@ class WeatherParamsPlot(Plot): self.nplots= 1 self.ylabel= 'Range [km]' self.xlabel= 'Range [km]' - self.polar = True - self.grid = True + if self.channels is not None: self.nplots = len(self.channels) self.ncols = len(self.channels) @@ -537,7 +541,7 @@ class WeatherParamsPlot(Plot): self.width = 12 else: self.width =8 - self.height =8 + self.height =7 self.ini =0 self.len_azi =0 self.buffer_ini = None @@ -589,11 +593,12 @@ class WeatherParamsPlot(Plot): data['data'] = [0, 0] - #try: - data['data'][0] = tmp[0][:,valid] - data['data'][1] = tmp[1][:,valid] - #except: - # data['data'] = tmp[0][:,valid] + try: + data['data'][0] = tmp[0][:,valid] + data['data'][1] = tmp[1][:,valid] + except: + data['data'][0] = tmp[0][:,valid] + data['data'][1] = tmp[0][:,valid] if dataOut.mode_op == 'PPI': self.CODE = 'PPI' @@ -606,23 +611,6 @@ class WeatherParamsPlot(Plot): data['ele'] = dataOut.data_ele data['mode_op'] = dataOut.mode_op self.mode = dataOut.mode_op - var = data['data'][0].flatten() - r = numpy.tile(data['r'], data['data'][0].shape[0]) - az = numpy.repeat(data['azi'], data['data'][0].shape[1]) - el = numpy.repeat(data['ele'], data['data'][0].shape[1]) - - # lla = georef.spherical_to_proj(r, data['azi'], data['ele'], (-75.295893, -12.040436, 3379.2147)) - - latlon = antenna_to_geographic(r, az, el, (-75.295893, -12.040436)) - - if self.mask: - meta['lat'] = latlon[1][var.mask==False] - meta['lon'] = latlon[0][var.mask==False] - data['var'] = numpy.array([var[var.mask==False]]) - else: - meta['lat'] = latlon[1] - meta['lon'] = latlon[0] - data['var'] = numpy.array([var]) return data, meta @@ -641,45 +629,32 @@ class WeatherParamsPlot(Plot): data['mode_op'] = data['mode_op'].decode() if data['mode_op'] == 'RHI': - try: - if self.data['mode_op'][-2] == 'PPI': - self.ang_min = None - self.ang_max = None - except: - pass - self.ang_min = self.ang_min if self.ang_min else 0 - self.ang_max = self.ang_max if self.ang_max else 90 - r, theta = numpy.meshgrid(r, numpy.radians(data['ele']) ) - elif data['mode_op'] == 'PPI': - try: - if self.data['mode_op'][-2] == 'RHI': - self.ang_min = None - self.ang_max = None - except: - pass - self.ang_min = self.ang_min if self.ang_min else 0 - self.ang_max = self.ang_max if self.ang_max else 360 - r, theta = numpy.meshgrid(r, numpy.radians(data['azi']) ) + r, theta = numpy.meshgrid(r, numpy.radians(data['ele'])) + len_aux = int(data['azi'].shape[0]/4) + mean = numpy.mean(data['azi'][len_aux:-len_aux]) + x, y = r*numpy.cos(theta), r*numpy.sin(theta) + elif data['mode_op'] == 'PPI': + r, theta = numpy.meshgrid(r, -numpy.radians(data['azi'])+numpy.pi/2) + len_aux = int(data['ele'].shape[0]/4) + mean = numpy.mean(data['ele'][len_aux:-len_aux]) + x, y = r*numpy.cos(theta)*numpy.cos(numpy.radians(mean)), r*numpy.sin( + theta)*numpy.cos(numpy.radians(mean)) + x = km2deg(x) + -75.295893 + y = km2deg(y) + -12.040436 self.clear_figures() - for i,ax in enumerate(self.axes): - - if ax.firsttime: - ax.set_xlim(numpy.radians(self.ang_min),numpy.radians(self.ang_max)) - ax.plt = ax.pcolormesh(theta, r, z[i], cmap=self.colormap, vmin=self.zmin, vmax=self.zmax) - if data['mode_op'] == 'PPI': - ax.set_theta_direction(-1) - ax.set_theta_offset(numpy.pi/2) + if data['mode_op'] == 'PPI': + axes = self.axes['PPI'] + else: + axes = self.axes['RHI'] - else: - ax.set_xlim(numpy.radians(self.ang_min),numpy.radians(self.ang_max)) - ax.plt = ax.pcolormesh(theta, r, z[i], cmap=self.colormap, vmin=self.zmin, vmax=self.zmax) - if data['mode_op'] == 'PPI': - ax.set_theta_direction(-1) - ax.set_theta_offset(numpy.pi/2) + for i, ax in enumerate(axes): + if data['mode_op'] == 'PPI': + ax.set_extent([-75.745893, -74.845893, -12.490436, -11.590436]) + + ax.plt = ax.pcolormesh(x, y, z[i], cmap=self.colormap, vmin=self.zmin, vmax=self.zmax) - ax.grid(True) if data['mode_op'] == 'RHI': len_aux = int(data['azi'].shape[0]/4) mean = numpy.mean(data['azi'][len_aux:-len_aux]) @@ -694,4 +669,48 @@ class WeatherParamsPlot(Plot): self.titles = ['PPI {} at EL: {} CH {}'.format(self.labels[x], str(round(mean,1)), x) for x in self.channels] else: self.titles = ['PPI {} at EL: {} CH {}'.format(self.labels[0], str(round(mean,1)), self.channels[0])] - self.mode_value = round(mean,1) \ No newline at end of file + self.mode_value = round(mean,1) + + if data['mode_op'] == 'PPI': + gl = ax.gridlines(crs=ccrs.PlateCarree(), draw_labels=True, + linewidth=1, color='gray', alpha=0.5, linestyle='--') + gl.xlabel_style = {'size': 8} + gl.ylabel_style = {'size': 8} + gl.xlabels_top = False + gl.ylabels_right = False + shape_p = os.path.join(self.shapes,'PER_ADM2/PER_ADM2.shp') + shape_d = os.path.join(self.shapes,'PER_ADM1/PER_ADM1.shp') + capitales = os.path.join(self.shapes,'CAPITALES/cap_provincia.shp') + vias = os.path.join(self.shapes,'Carreteras/VIAS_NACIONAL_250000.shp') + reader_d = shpreader.BasicReader(shape_p, encoding='latin1') + reader_p = shpreader.BasicReader(shape_d, encoding='latin1') + reader_c = shpreader.BasicReader(capitales, encoding='latin1') + reader_v = shpreader.BasicReader(vias, encoding='latin1') + caps = [x for x in reader_c.records() if x.attributes["Departa"] in ("JUNIN", "LIMA", "AYACUCHO", "HUANCAVELICA")] + districts = [x for x in reader_d.records() if x.attributes["Name"] in ("JUNÍN", "CHANCHAMAYO", "CHUPACA", "CONCEPCIÓN", "HUANCAYO", "JAUJA", "SATIPO", "TARMA", "YAUYOS", "HUAROCHIRÍ", "CANTA", "HUANTA", "TAYACAJA")] + provs = [x for x in reader_p.records() if x.attributes["NAME"] in ("Junín", "Lima")] + vias = [x for x in reader_v.records() if x.attributes["DEP"] in ("JUNIN", "LIMA")] + + # Display Kenya's shape + shape_feature = ShapelyFeature([x.geometry for x in districts], ccrs.PlateCarree(), facecolor="none", edgecolor='grey', lw=0.5) + ax.add_feature(shape_feature) + shape_feature = ShapelyFeature([x.geometry for x in provs], ccrs.PlateCarree(), facecolor="none", edgecolor='white', lw=1) + ax.add_feature(shape_feature) + shape_feature = ShapelyFeature([x.geometry for x in vias], ccrs.PlateCarree(), facecolor="none", edgecolor='yellow', lw=1) + ax.add_feature(shape_feature) + + for cap in caps: + if cap.attributes['Nombre'] in ("LA OROYA", "CONCEPCIÓN", "HUANCAYO", "JAUJA", "CHUPACA", "YAUYOS", "HUANTA", "PAMPAS"): + ax.text(cap.attributes['X'], cap.attributes['Y'], cap.attributes['Nombre'].title(), size=7, color='white') + ax.text(-75.052003, -11.915552, 'Huaytapallana', size=7, color='cyan') + ax.plot(-75.052003, -11.915552, '*') + + for R in (10, 20, 30 , 40, 50): + circle = Circle((-75.295893, -12.040436), km2deg(R), facecolor='none', + edgecolor='skyblue', linewidth=1, alpha=0.5) + ax.add_patch(circle) + ax.text(km2deg(R)*numpy.cos(numpy.radians(45))-75.295893, + km2deg(R)*numpy.sin(numpy.radians(45))-12.040436, + '{}km'.format(R), color='skyblue', size=7) + elif data['mode_op'] == 'RHI': + ax.grid(color='grey', alpha=0.5, linestyle='--', linewidth=1) diff --git a/schainpy/model/io/jroIO_param.py b/schainpy/model/io/jroIO_param.py index d060669..9779219 100644 --- a/schainpy/model/io/jroIO_param.py +++ b/schainpy/model/io/jroIO_param.py @@ -505,6 +505,7 @@ class HDFWriter(Operation): if self.setType == 'weather': subfolder = dt.strftime('%Y-%m-%dT%H-00-00') + subfolder = '' else: subfolder = dt.strftime('d%Y%j') @@ -541,12 +542,14 @@ class HDFWriter(Operation): #SOPHY_20200505_140215_E10.0_Z.h5 #SOPHY_20200505_140215_A40.0_Z.h5 if self.dataOut.flagMode == 1: #'AZI' #PPI - ang_type = 'E' + ang_type = 'EL' + mode_type = 'PPI' len_aux = int(self.dataOut.data_ele.shape[0]/4) mean = numpy.mean(self.dataOut.data_ele[len_aux:-len_aux]) ang_ = round(mean,1) elif self.dataOut.flagMode == 0: #'ELE' #RHI - ang_type = 'A' + ang_type = 'AZ' + mode_type = 'RHI' len_aux = int(self.dataOut.data_azi.shape[0]/4) mean = numpy.mean(self.dataOut.data_azi[len_aux:-len_aux]) ang_ = round(mean,1) @@ -559,11 +562,14 @@ class HDFWriter(Operation): dt.hour, dt.minute, dt.second, - ang_type, + ang_type[0], ang_, self.weather_var, ext ) - + subfolder = '{}_{}_{}_{:2.1f}'.format(self.weather_var, mode_type, ang_type, ang_) + fullpath = os.path.join(path, subfolder) + if not os.path.exists(fullpath): + os.makedirs(fullpath) else: setFile = dt.hour*60+dt.minute file = '%s%4.4d%3.3d%04d%s' % (self.optchar, diff --git a/schainpy/model/proc/jroproc_parameters.py b/schainpy/model/proc/jroproc_parameters.py index 016f119..54f7706 100644 --- a/schainpy/model/proc/jroproc_parameters.py +++ b/schainpy/model/proc/jroproc_parameters.py @@ -4143,6 +4143,9 @@ class PedestalInformation(Operation): continue self.fp.close() self.fp = h5py.File(self.filename, 'r') + self.ele = self.fp['Data']['ele_pos'][:] + self.azi = self.fp['Data']['azi_pos'][:] + 26.27 + self.azi[self.azi>360] = self.azi[self.azi>360] - 360 log.log('Opening file: {}'.format(self.filename), self.name) ok = True break @@ -4162,25 +4165,25 @@ class PedestalInformation(Operation): raise IOError('No new position files found in {}'.format(path)) - def find_mode(self,index): + def find_mode(self, index): sample_max = 20 start = index - flag_mode = None - azi = self.fp['Data']['azi_pos'][:] - ele = self.fp['Data']['ele_pos'][:] + flag_mode = None while True: - if start+sample_max > numpy.shape(ele)[0]: - print("CANNOT KNOW IF MODE IS PPI OR RHI, ANALIZE NEXT FILE") - print("ele",ele[start-sample_max:start+sample_max]) - print("azi",azi[start-sample_max:start+sample_max]) + print(start, sample_max, numpy.shape(self.ele)) + if start+sample_max > numpy.shape(self.ele)[0]: if sample_max == 10: + print("CANNOT KNOW IF MODE IS PPI OR RHI, ANALIZE NEXT FILE") break else: sample_max = 10 continue - sigma_ele = numpy.nanstd(ele[start:start+sample_max]) - sigma_azi = numpy.nanstd(azi[start:start+sample_max]) + sigma_ele = numpy.nanstd(self.ele[start:start+sample_max]) + sigma_azi = numpy.nanstd(self.azi[start:start+sample_max]) + print("ele",self.ele[start-sample_max:start+sample_max]) + print("azi",self.azi[start-sample_max:start+sample_max]) + print(sigma_azi, sigma_ele) if sigma_ele<.5 and sigma_azi<.5: if sigma_ele360] = self.azi[self.azi>360] - 360 break except: log.warning('Waiting {}s for position file to be ready...'.format(self.delay), self.name) @@ -4258,12 +4271,13 @@ class PedestalInformation(Operation): self.find_next_file() az, el, scan = self.get_values() + dataOut.flagNoData = False if numpy.isnan(az) or numpy.isnan(el) : dataOut.flagNoData = True return dataOut - - dataOut.azimuth = round(az, 2) + + dataOut.azimuth = round(az, 2) dataOut.elevation = round(el, 2) dataOut.mode_op = scan @@ -4303,146 +4317,150 @@ class Block360(Operation): self.attr = attr self.__buffer = [] - self.__buffer2 = [] - self.__buffer3 = [] - self.__buffer4 = [] + self.azi = [] + self.ele = [] - def putData(self, data, attr, flagMode): + def putData(self, data, attr): ''' Add a profile to he __buffer and increase in one the __profiel Index ''' tmp= getattr(data, attr) self.__buffer.append(tmp) - self.__buffer2.append(data.azimuth) - self.__buffer3.append(data.elevation) + self.azi.append(data.azimuth) + self.ele.append(data.elevation) self.__profIndex += 1 - if flagMode == 1: #'AZI' - return numpy.array(self.__buffer2) - elif flagMode == 0: #'ELE' - return numpy.array(self.__buffer3) - - def pushData(self, data,flagMode,case_flag): + def pushData(self, data, case_flag): ''' - Return the PULSEPAIR and the profiles used in the operation - Affected : self.__profileIndex ''' data_360 = numpy.array(self.__buffer).transpose(1, 2, 0, 3) - data_p = numpy.array(self.__buffer2) - data_e = numpy.array(self.__buffer3) + data_p = numpy.array(self.azi) + data_e = numpy.array(self.ele) n = self.__profIndex self.__buffer = [] - self.__buffer2 = [] - self.__buffer3 = [] - self.__buffer4 = [] + self.azi = [] + self.ele = [] self.__profIndex = 0 - if flagMode == 1 and case_flag == 0: #'AZI' y ha girado - self.putData(data=data, attr = self.attr, flagMode=flagMode) + if case_flag in (0, 1, -1): + self.putData(data=data, attr = self.attr) return data_360, n, data_p, data_e - def byProfiles(self,dataOut,flagMode): + def byProfiles(self, dataOut): - self.__dataReady = False + self.__dataReady = False data_360 = [] - data_p = None - data_e = None + data_p = None + data_e = None - angles = self.putData(data=dataOut, attr = self.attr, flagMode=flagMode) - if self.__profIndex > 1: - case_flag = self.checkcase(angles,flagMode) + self.putData(data=dataOut, attr = self.attr) + + if self.__profIndex > 5: + case_flag = self.checkcase() - if flagMode == 1: #'AZI': + if self.flagMode == 1: #'AZI': if case_flag == 0: #Ya giró self.__buffer.pop() #Erase last data - self.__buffer2.pop() - self.__buffer3.pop() - data_360 ,n,data_p,data_e = self.pushData(data=dataOut,flagMode=flagMode,case_flag=case_flag) - self.__dataReady = True - - elif flagMode == 0: #'ELE' - - if case_flag == 0: #Subida - - if len(self.__buffer) == 2: #Cuando está de subida - #Se borra el dato anterior para liberar buffer y comparar el dato actual con el siguiente - self.__buffer.pop(0) #Erase first data - self.__buffer2.pop(0) - self.__buffer3.pop(0) - self.__profIndex -= 1 - else: #Cuando ha estado de bajada y ha vuelto a subir - #Se borra el último dato - self.__buffer.pop() #Erase last data - self.__buffer2.pop() - self.__buffer3.pop() - data_360, n, data_p, data_e = self.pushData(data=dataOut,flagMode=flagMode,case_flag=case_flag) + self.azi.pop() + self.ele.pop() + data_360 ,n,data_p,data_e = self.pushData(dataOut, case_flag) + if len(data_p)>350: self.__dataReady = True + elif self.flagMode == 0: #'ELE' + if case_flag == 1: #Bajada + self.__buffer.pop() #Erase last data + self.azi.pop() + self.ele.pop() + data_360, n, data_p, data_e = self.pushData(dataOut, case_flag) + self.__dataReady = True + if case_flag == -1: #Subida + self.__buffer.pop() #Erase last data + self.azi.pop() + self.ele.pop() + data_360, n, data_p, data_e = self.pushData(dataOut, case_flag) + #self.__dataReady = True return data_360, data_p, data_e - def blockOp(self, dataOut, flagMode, datatime= None): + def blockOp(self, dataOut, datatime= None): if self.__initime == None: self.__initime = datatime - data_360, data_p, data_e = self.byProfiles(dataOut,flagMode) - self.__lastdatatime = datatime + data_360, data_p, data_e = self.byProfiles(dataOut) + self.__lastdatatime = datatime - avgdatatime = self.__initime + avgdatatime = self.__initime if self.n==1: avgdatatime = datatime - deltatime = datatime - self.__lastdatatime + self.__initime = datatime return data_360, avgdatatime, data_p, data_e - def checkcase(self, angles, flagMode): + def checkcase(self): + + sigma_ele = numpy.nanstd(self.ele[-5:]) + sigma_azi = numpy.nanstd(self.azi[-5:]) - if flagMode == 1: #'AZI' - start = angles[-2] - end = angles[-1] + if sigma_ele<.5 and sigma_azi<.5: + if sigma_ele 0: #Subida - return 0 + if end < 0: + return 1 + elif (middle>start and end360] = dataOut.data_azi[dataOut.data_azi>360] - 360 + dataOut.data_azi = data_p dataOut.data_ele = data_e dataOut.utctime = avgdatatime - dataOut.flagNoData = False - dataOut.flagAskMode = True + dataOut.flagNoData = False + dataOut.flagMode = self.flagMode + dataOut.mode_op = self.mode_op return dataOut