##// END OF EJS Templates
Block360Update
rflores -
r1439:14a3ab7942a7
parent child
Show More
This diff has been collapsed as it changes many lines, (513 lines changed) Show them Hide them
@@ -1,6 +1,7
1 import os
1 import os
2 import datetime
2 import datetime
3 import numpy
3 import numpy
4 from mpl_toolkits.axisartist.grid_finder import FixedLocator, DictFormatter
4
5
5 from schainpy.model.graphics.jroplot_base import Plot, plt
6 from schainpy.model.graphics.jroplot_base import Plot, plt
6 from schainpy.model.graphics.jroplot_spectra import SpectraPlot, RTIPlot, CoherencePlot, SpectraCutPlot
7 from schainpy.model.graphics.jroplot_spectra import SpectraPlot, RTIPlot, CoherencePlot, SpectraCutPlot
@@ -1863,3 +1864,515 class WeatherRHI_vRF_Plot(Plot):
1863 plt.text(1.0, 1.05, 'Elevacion '+str(thisDatetime)+" Step "+str(self.ini)+ " Azi: "+str(round(self.res_azi,2)), transform=caax.transAxes, va='bottom',ha='right')
1864 plt.text(1.0, 1.05, 'Elevacion '+str(thisDatetime)+" Step "+str(self.ini)+ " Azi: "+str(round(self.res_azi,2)), transform=caax.transAxes, va='bottom',ha='right')
1864 print("***************************self.ini****************************",self.ini)
1865 print("***************************self.ini****************************",self.ini)
1865 self.ini= self.ini+1
1866 self.ini= self.ini+1
1867
1868 class WeatherRHI_vRF3_Plot(Plot):
1869 CODE = 'weather'
1870 plot_name = 'weather'
1871 plot_type = 'rhistyle'
1872 buffering = False
1873 data_ele_tmp = None
1874
1875 def setup(self):
1876 print("********************")
1877 print("********************")
1878 print("********************")
1879 print("SETUP WEATHER PLOT")
1880 self.ncols = 1
1881 self.nrows = 1
1882 self.nplots= 1
1883 self.ylabel= 'Range [Km]'
1884 self.titles= ['Weather']
1885 if self.channels is not None:
1886 self.nplots = len(self.channels)
1887 self.nrows = len(self.channels)
1888 else:
1889 self.nplots = self.data.shape(self.CODE)[0]
1890 self.nrows = self.nplots
1891 self.channels = list(range(self.nplots))
1892 print("channels",self.channels)
1893 print("que saldra", self.data.shape(self.CODE)[0])
1894 self.titles = ['{} Channel {}'.format(self.CODE.upper(), x) for x in range(self.nrows)]
1895 print("self.titles",self.titles)
1896 self.colorbar=False
1897 self.width =8
1898 self.height =8
1899 self.ini =0
1900 self.len_azi =0
1901 self.buffer_ini = None
1902 self.buffer_ele = None
1903 self.plots_adjust.update({'wspace': 0.4, 'hspace':0.4, 'left': 0.1, 'right': 0.9, 'bottom': 0.08})
1904 self.flag =0
1905 self.indicador= 0
1906 self.last_data_ele = None
1907 self.val_mean = None
1908
1909 def update(self, dataOut):
1910
1911 data = {}
1912 meta = {}
1913 if hasattr(dataOut, 'dataPP_POWER'):
1914 factor = 1
1915 if hasattr(dataOut, 'nFFTPoints'):
1916 factor = dataOut.normFactor
1917 print("dataOut",dataOut.data_360.shape)
1918 #
1919 data['weather'] = 10*numpy.log10(dataOut.data_360/(factor))
1920 #
1921 #data['weather'] = 10*numpy.log10(dataOut.data_360[1]/(factor))
1922 data['azi'] = dataOut.data_azi
1923 data['ele'] = dataOut.data_ele
1924 #data['case_flag'] = dataOut.case_flag
1925 #print("UPDATE")
1926 #print("data[weather]",data['weather'].shape)
1927 #print("data[azi]",data['azi'])
1928 return data, meta
1929
1930 def get2List(self,angulos):
1931 list1=[]
1932 list2=[]
1933 for i in reversed(range(len(angulos))):
1934 if not i==0:#el caso de i=0 evalula el primero de la lista con el ultimo y no es relevante
1935 diff_ = angulos[i]-angulos[i-1]
1936 if abs(diff_) >1.5:
1937 list1.append(i-1)
1938 list2.append(diff_)
1939 return list(reversed(list1)),list(reversed(list2))
1940
1941 def fixData90(self,list_,ang_):
1942 if list_[0]==-1:
1943 vec = numpy.where(ang_<ang_[0])
1944 ang_[vec] = ang_[vec]+90
1945 return ang_
1946 return ang_
1947
1948 def fixData90HL(self,angulos):
1949 vec = numpy.where(angulos>=90)
1950 angulos[vec]=angulos[vec]-90
1951 return angulos
1952
1953
1954 def search_pos(self,pos,list_):
1955 for i in range(len(list_)):
1956 if pos == list_[i]:
1957 return True,i
1958 i=None
1959 return False,i
1960
1961 def fixDataComp(self,ang_,list1_,list2_,tipo_case):
1962 size = len(ang_)
1963 size2 = 0
1964 for i in range(len(list2_)):
1965 size2=size2+round(abs(list2_[i]))-1
1966 new_size= size+size2
1967 ang_new = numpy.zeros(new_size)
1968 ang_new2 = numpy.zeros(new_size)
1969
1970 tmp = 0
1971 c = 0
1972 for i in range(len(ang_)):
1973 ang_new[tmp +c] = ang_[i]
1974 ang_new2[tmp+c] = ang_[i]
1975 condition , value = self.search_pos(i,list1_)
1976 if condition:
1977 pos = tmp + c + 1
1978 for k in range(round(abs(list2_[value]))-1):
1979 if tipo_case==0 or tipo_case==3:#subida
1980 ang_new[pos+k] = ang_new[pos+k-1]+1
1981 ang_new2[pos+k] = numpy.nan
1982 elif tipo_case==1 or tipo_case==2:#bajada
1983 ang_new[pos+k] = ang_new[pos+k-1]-1
1984 ang_new2[pos+k] = numpy.nan
1985
1986 tmp = pos +k
1987 c = 0
1988 c=c+1
1989 return ang_new,ang_new2
1990
1991 def globalCheckPED(self,angulos,tipo_case):
1992 l1,l2 = self.get2List(angulos)
1993 ##print("l1",l1)
1994 ##print("l2",l2)
1995 if len(l1)>0:
1996 #angulos2 = self.fixData90(list_=l1,ang_=angulos)
1997 #l1,l2 = self.get2List(angulos2)
1998 ang1_,ang2_ = self.fixDataComp(ang_=angulos,list1_=l1,list2_=l2,tipo_case=tipo_case)
1999 #ang1_ = self.fixData90HL(ang1_)
2000 #ang2_ = self.fixData90HL(ang2_)
2001 else:
2002 ang1_= angulos
2003 ang2_= angulos
2004 return ang1_,ang2_
2005
2006
2007 def replaceNAN(self,data_weather,data_ele,val):
2008 data= data_ele
2009 data_T= data_weather
2010
2011 if data.shape[0]> data_T.shape[0]:
2012 print("IF")
2013 data_N = numpy.ones( [data.shape[0],data_T.shape[1]])
2014 c = 0
2015 for i in range(len(data)):
2016 if numpy.isnan(data[i]):
2017 data_N[i,:]=numpy.ones(data_T.shape[1])*numpy.nan
2018 else:
2019 data_N[i,:]=data_T[c,:]
2020 c=c+1
2021 return data_N
2022 else:
2023 print("else")
2024 for i in range(len(data)):
2025 if numpy.isnan(data[i]):
2026 data_T[i,:]=numpy.ones(data_T.shape[1])*numpy.nan
2027 return data_T
2028
2029 def check_case(self,data_ele,ang_max,ang_min):
2030 start = data_ele[0]
2031 end = data_ele[-1]
2032 number = (end-start)
2033 len_ang=len(data_ele)
2034 print("start",start)
2035 print("end",end)
2036 print("number",number)
2037
2038 print("len_ang",len_ang)
2039
2040 #exit(1)
2041
2042 if start<end and (round(abs(number)+1)>=len_ang or (numpy.argmin(data_ele)==0)):#caso subida
2043 return 0
2044 #elif start>end and (round(abs(number)+1)>=len_ang or(numpy.argmax(data_ele)==0)):#caso bajada
2045 # return 1
2046 elif round(abs(number)+1)>=len_ang and (start>end or(numpy.argmax(data_ele)==0)):#caso bajada
2047 return 1
2048 elif round(abs(number)+1)<len_ang and data_ele[-2]>data_ele[-1]:# caso BAJADA CAMBIO ANG MAX
2049 return 2
2050 elif round(abs(number)+1)<len_ang and data_ele[-2]<data_ele[-1] :# caso SUBIDA CAMBIO ANG MIN
2051 return 3
2052
2053
2054 def const_ploteo(self,val_ch,data_weather,data_ele,step,res,ang_max,ang_min,case_flag):
2055 ang_max= ang_max
2056 ang_min= ang_min
2057 data_weather=data_weather
2058 val_ch=val_ch
2059 ##print("*********************DATA WEATHER**************************************")
2060 ##print(data_weather)
2061 if self.ini==0:
2062
2063 #--------------------- new -------------------------
2064 data_ele_new ,data_ele_old= self.globalCheckPED(data_ele,tipo_case)
2065
2066 #-------------------------CAMBIOS RHI---------------------------------
2067 start= ang_min
2068 end = ang_max
2069 n= (ang_max-ang_min)/res
2070 #------ new
2071 self.start_data_ele = data_ele_new[0]
2072 self.end_data_ele = data_ele_new[-1]
2073 if tipo_case==0 or tipo_case==3: # SUBIDA
2074 n1= round(self.start_data_ele)- start
2075 n2= end - round(self.end_data_ele)
2076 print(self.start_data_ele)
2077 print(self.end_data_ele)
2078 if n1>0:
2079 ele1= numpy.linspace(ang_min+1,self.start_data_ele-1,n1)
2080 ele1_nan= numpy.ones(n1)*numpy.nan
2081 data_ele = numpy.hstack((ele1,data_ele_new))
2082 print("ele1_nan",ele1_nan.shape)
2083 print("data_ele_old",data_ele_old.shape)
2084 data_ele_old = numpy.hstack((ele1_nan,data_ele_old))
2085 if n2>0:
2086 ele2= numpy.linspace(self.end_data_ele+1,end,n2)
2087 ele2_nan= numpy.ones(n2)*numpy.nan
2088 data_ele = numpy.hstack((data_ele,ele2))
2089 print("ele2_nan",ele2_nan.shape)
2090 print("data_ele_old",data_ele_old.shape)
2091 data_ele_old = numpy.hstack((data_ele_old,ele2_nan))
2092
2093 if tipo_case==1 or tipo_case==2: # BAJADA
2094 data_ele_new = data_ele_new[::-1] # reversa
2095 data_ele_old = data_ele_old[::-1]# reversa
2096 data_weather = data_weather[::-1,:]# reversa
2097 vec= numpy.where(data_ele_new<ang_max)
2098 data_ele_new = data_ele_new[vec]
2099 data_ele_old = data_ele_old[vec]
2100 data_weather = data_weather[vec[0]]
2101 vec2= numpy.where(0<data_ele_new)
2102 data_ele_new = data_ele_new[vec2]
2103 data_ele_old = data_ele_old[vec2]
2104 data_weather = data_weather[vec2[0]]
2105 self.start_data_ele = data_ele_new[0]
2106 self.end_data_ele = data_ele_new[-1]
2107
2108 n1= round(self.start_data_ele)- start
2109 n2= end - round(self.end_data_ele)-1
2110 print(self.start_data_ele)
2111 print(self.end_data_ele)
2112 if n1>0:
2113 ele1= numpy.linspace(ang_min+1,self.start_data_ele-1,n1)
2114 ele1_nan= numpy.ones(n1)*numpy.nan
2115 data_ele = numpy.hstack((ele1,data_ele_new))
2116 data_ele_old = numpy.hstack((ele1_nan,data_ele_old))
2117 if n2>0:
2118 ele2= numpy.linspace(self.end_data_ele+1,end,n2)
2119 ele2_nan= numpy.ones(n2)*numpy.nan
2120 data_ele = numpy.hstack((data_ele,ele2))
2121 data_ele_old = numpy.hstack((data_ele_old,ele2_nan))
2122 # RADAR
2123 # NOTA data_ele y data_weather es la variable que retorna
2124 val_mean = numpy.mean(data_weather[:,-1])
2125 self.val_mean = val_mean
2126 data_weather = self.replaceNAN(data_weather=data_weather,data_ele=data_ele_old,val=self.val_mean)
2127 print("eleold",data_ele_old)
2128 print(self.data_ele_tmp[val_ch])
2129 print(data_ele_old.shape[0])
2130 print(self.data_ele_tmp[val_ch].shape[0])
2131 if (data_ele_old.shape[0]==91 or self.data_ele_tmp[val_ch].shape[0]==91):
2132 import sys
2133 print("EXIT",self.ini)
2134
2135 sys.exit(1)
2136 self.data_ele_tmp[val_ch]= data_ele_old
2137 else:
2138 #print("**********************************************")
2139 #print("****************VARIABLE**********************")
2140 #-------------------------CAMBIOS RHI---------------------------------
2141 #---------------------------------------------------------------------
2142 ##print("INPUT data_ele",data_ele)
2143 flag=0
2144 start_ele = self.res_ele[0]
2145 #tipo_case = self.check_case(data_ele,ang_max,ang_min)
2146 tipo_case = case_flag[-1]
2147 #print("TIPO DE DATA",tipo_case)
2148 #-----------new------------
2149 data_ele ,data_ele_old = self.globalCheckPED(data_ele,tipo_case)
2150 data_weather = self.replaceNAN(data_weather=data_weather,data_ele=data_ele_old,val=self.val_mean)
2151
2152 #-------------------------------NEW RHI ITERATIVO-------------------------
2153
2154 if tipo_case==0 : # SUBIDA
2155 vec = numpy.where(data_ele<ang_max)
2156 data_ele = data_ele[vec]
2157 data_ele_old = data_ele_old[vec]
2158 data_weather = data_weather[vec[0]]
2159
2160 vec2 = numpy.where(0<data_ele)
2161 data_ele= data_ele[vec2]
2162 data_ele_old= data_ele_old[vec2]
2163 ##print(data_ele_new)
2164 data_weather= data_weather[vec2[0]]
2165
2166 new_i_ele = int(round(data_ele[0]))
2167 new_f_ele = int(round(data_ele[-1]))
2168 #print(new_i_ele)
2169 #print(new_f_ele)
2170 #print(data_ele,len(data_ele))
2171 #print(data_ele_old,len(data_ele_old))
2172 if new_i_ele< 2:
2173 self.data_ele_tmp[val_ch] = numpy.ones(ang_max-ang_min)*numpy.nan
2174 self.res_weather[val_ch] = self.replaceNAN(data_weather=self.res_weather[val_ch],data_ele=self.data_ele_tmp[val_ch],val=self.val_mean)
2175 self.data_ele_tmp[val_ch][new_i_ele:new_i_ele+len(data_ele)]=data_ele_old
2176 self.res_ele[new_i_ele:new_i_ele+len(data_ele)]= data_ele
2177 self.res_weather[val_ch][new_i_ele:new_i_ele+len(data_ele),:]= data_weather
2178 data_ele = self.res_ele
2179 data_weather = self.res_weather[val_ch]
2180
2181 elif tipo_case==1 : #BAJADA
2182 data_ele = data_ele[::-1] # reversa
2183 data_ele_old = data_ele_old[::-1]# reversa
2184 data_weather = data_weather[::-1,:]# reversa
2185 vec= numpy.where(data_ele<ang_max)
2186 data_ele = data_ele[vec]
2187 data_ele_old = data_ele_old[vec]
2188 data_weather = data_weather[vec[0]]
2189 vec2= numpy.where(0<data_ele)
2190 data_ele = data_ele[vec2]
2191 data_ele_old = data_ele_old[vec2]
2192 data_weather = data_weather[vec2[0]]
2193
2194
2195 new_i_ele = int(round(data_ele[0]))
2196 new_f_ele = int(round(data_ele[-1]))
2197 #print(data_ele)
2198 #print(ang_max)
2199 #print(data_ele_old)
2200 if new_i_ele <= 1:
2201 new_i_ele = 1
2202 if round(data_ele[-1])>=ang_max-1:
2203 self.data_ele_tmp[val_ch] = numpy.ones(ang_max-ang_min)*numpy.nan
2204 self.res_weather[val_ch] = self.replaceNAN(data_weather=self.res_weather[val_ch],data_ele=self.data_ele_tmp[val_ch],val=self.val_mean)
2205 self.data_ele_tmp[val_ch][new_i_ele-1:new_i_ele+len(data_ele)-1]=data_ele_old
2206 self.res_ele[new_i_ele-1:new_i_ele+len(data_ele)-1]= data_ele
2207 self.res_weather[val_ch][new_i_ele-1:new_i_ele+len(data_ele)-1,:]= data_weather
2208 data_ele = self.res_ele
2209 data_weather = self.res_weather[val_ch]
2210
2211 elif tipo_case==2: #bajada
2212 vec = numpy.where(data_ele<ang_max)
2213 data_ele = data_ele[vec]
2214 data_weather= data_weather[vec[0]]
2215
2216 len_vec = len(vec)
2217 data_ele_new = data_ele[::-1] # reversa
2218 data_weather = data_weather[::-1,:]
2219 new_i_ele = int(data_ele_new[0])
2220 new_f_ele = int(data_ele_new[-1])
2221
2222 n1= new_i_ele- ang_min
2223 n2= ang_max - new_f_ele-1
2224 if n1>0:
2225 ele1= numpy.linspace(ang_min+1,new_i_ele-1,n1)
2226 ele1_nan= numpy.ones(n1)*numpy.nan
2227 data_ele = numpy.hstack((ele1,data_ele_new))
2228 data_ele_old = numpy.hstack((ele1_nan,data_ele_new))
2229 if n2>0:
2230 ele2= numpy.linspace(new_f_ele+1,ang_max,n2)
2231 ele2_nan= numpy.ones(n2)*numpy.nan
2232 data_ele = numpy.hstack((data_ele,ele2))
2233 data_ele_old = numpy.hstack((data_ele_old,ele2_nan))
2234
2235 self.data_ele_tmp[val_ch] = data_ele_old
2236 self.res_ele = data_ele
2237 self.res_weather[val_ch] = self.replaceNAN(data_weather=data_weather,data_ele=data_ele_old,val=self.val_mean)
2238 data_ele = self.res_ele
2239 data_weather = self.res_weather[val_ch]
2240
2241 elif tipo_case==3:#subida
2242 vec = numpy.where(0<data_ele)
2243 data_ele= data_ele[vec]
2244 data_ele_new = data_ele
2245 data_ele_old= data_ele_old[vec]
2246 data_weather= data_weather[vec[0]]
2247 pos_ini = numpy.argmin(data_ele)
2248 if pos_ini>0:
2249 len_vec= len(data_ele)
2250 vec3 = numpy.linspace(pos_ini,len_vec-1,len_vec-pos_ini).astype(int)
2251 #print(vec3)
2252 data_ele= data_ele[vec3]
2253 data_ele_new = data_ele
2254 data_ele_old= data_ele_old[vec3]
2255 data_weather= data_weather[vec3]
2256
2257 new_i_ele = int(data_ele_new[0])
2258 new_f_ele = int(data_ele_new[-1])
2259 n1= new_i_ele- ang_min
2260 n2= ang_max - new_f_ele-1
2261 if n1>0:
2262 ele1= numpy.linspace(ang_min+1,new_i_ele-1,n1)
2263 ele1_nan= numpy.ones(n1)*numpy.nan
2264 data_ele = numpy.hstack((ele1,data_ele_new))
2265 data_ele_old = numpy.hstack((ele1_nan,data_ele_new))
2266 if n2>0:
2267 ele2= numpy.linspace(new_f_ele+1,ang_max,n2)
2268 ele2_nan= numpy.ones(n2)*numpy.nan
2269 data_ele = numpy.hstack((data_ele,ele2))
2270 data_ele_old = numpy.hstack((data_ele_old,ele2_nan))
2271
2272 self.data_ele_tmp[val_ch] = data_ele_old
2273 self.res_ele = data_ele
2274 self.res_weather[val_ch] = self.replaceNAN(data_weather=data_weather,data_ele=data_ele_old,val=self.val_mean)
2275 data_ele = self.res_ele
2276 data_weather = self.res_weather[val_ch]
2277 #print("self.data_ele_tmp",self.data_ele_tmp)
2278 return data_weather,data_ele
2279
2280 def const_ploteo_vRF(self,val_ch,data_weather,data_ele,res,ang_max,ang_min):
2281
2282 data_ele_new ,data_ele_old= self.globalCheckPED(data_ele,1)
2283
2284 data_ele = data_ele_old.copy()
2285
2286 diff_1 = ang_max - data_ele[0]
2287 angles_1_nan = numpy.linspace(ang_max,data_ele[0]+1,int(diff_1)-1)#*numpy.nan
2288
2289 diff_2 = data_ele[-1]-ang_min
2290 angles_2_nan = numpy.linspace(data_ele[-1]-1,ang_min,int(diff_2)-1)#*numpy.nan
2291
2292 angles_filled = numpy.concatenate((angles_1_nan,data_ele,angles_2_nan))
2293
2294 print(angles_filled)
2295
2296 data_1_nan = numpy.ones([angles_1_nan.shape[0],len(self.r_mask)])*numpy.nan
2297 data_2_nan = numpy.ones([angles_2_nan.shape[0],len(self.r_mask)])*numpy.nan
2298
2299 data_filled = numpy.concatenate((data_1_nan,data_weather,data_2_nan),axis=0)
2300 #val_mean = numpy.mean(data_weather[:,-1])
2301 #self.val_mean = val_mean
2302 print(data_filled)
2303 data_filled = self.replaceNAN(data_weather=data_filled,data_ele=angles_filled,val=numpy.nan)
2304
2305 print(data_filled)
2306 print(data_filled.shape)
2307 print(angles_filled.shape)
2308
2309 return data_filled,angles_filled
2310
2311 def plot(self):
2312 thisDatetime = datetime.datetime.utcfromtimestamp(self.data.times[-1]).strftime('%Y-%m-%d %H:%M:%S')
2313 data = self.data[-1]
2314 r = self.data.yrange
2315 delta_height = r[1]-r[0]
2316 r_mask = numpy.where(r>=0)[0]
2317 self.r_mask =r_mask
2318 ##print("delta_height",delta_height)
2319 #print("r_mask",r_mask,len(r_mask))
2320 r = numpy.arange(len(r_mask))*delta_height
2321 self.y = 2*r
2322 res = 1
2323 ###print("data['weather'].shape[0]",data['weather'].shape[0])
2324 ang_max = self.ang_max
2325 ang_min = self.ang_min
2326 var_ang =ang_max - ang_min
2327 step = (int(var_ang)/(res*data['weather'].shape[0]))
2328 ###print("step",step)
2329 #--------------------------------------------------------
2330 ##print('weather',data['weather'].shape)
2331 ##print('ele',data['ele'].shape)
2332
2333 ###self.res_weather, self.res_ele = self.const_ploteo(data_weather=data['weather'][:,r_mask],data_ele=data['ele'],step=step,res=res,ang_max=ang_max,ang_min=ang_min)
2334 ###self.res_azi = numpy.mean(data['azi'])
2335 ###print("self.res_ele",self.res_ele)
2336
2337 plt.clf()
2338 subplots = [121, 122]
2339 #if self.ini==0:
2340 #self.res_weather= numpy.ones([self.nplots,int(var_ang),len(r_mask)])*numpy.nan
2341 #print("SHAPE",self.data_ele_tmp.shape)
2342
2343 for i,ax in enumerate(self.axes):
2344 res_weather, self.res_ele = self.const_ploteo_vRF(val_ch=i, data_weather=data['weather'][i][:,r_mask],data_ele=data['ele'],res=res,ang_max=ang_max,ang_min=ang_min)
2345 self.res_azi = numpy.mean(data['azi'])
2346
2347 if ax.firsttime:
2348 #plt.clf()
2349 print("Frist Plot")
2350 print(data['weather'][i][:,r_mask].shape)
2351 print(data['ele'].shape)
2352 cgax, pm = wrl.vis.plot_rhi(res_weather,r=r,th=self.res_ele,ax=subplots[i], proj='cg',vmin=20, vmax=80)
2353 #cgax, pm = wrl.vis.plot_rhi(data['weather'][i][:,r_mask],r=r,th=data['ele'],ax=subplots[i], proj='cg',vmin=20, vmax=80)
2354 gh = cgax.get_grid_helper()
2355 locs = numpy.linspace(ang_min,ang_max,var_ang+1)
2356 gh.grid_finder.grid_locator1 = FixedLocator(locs)
2357 gh.grid_finder.tick_formatter1 = DictFormatter(dict([(i, r"${0:.0f}^\circ$".format(i)) for i in locs]))
2358
2359
2360 #fig=self.figures[0]
2361 else:
2362 #plt.clf()
2363 print("ELSE PLOT")
2364 cgax, pm = wrl.vis.plot_rhi(res_weather,r=r,th=self.res_ele,ax=subplots[i], proj='cg',vmin=20, vmax=80)
2365 #cgax, pm = wrl.vis.plot_rhi(data['weather'][i][:,r_mask],r=r,th=data['ele'],ax=subplots[i], proj='cg',vmin=20, vmax=80)
2366 gh = cgax.get_grid_helper()
2367 locs = numpy.linspace(ang_min,ang_max,var_ang+1)
2368 gh.grid_finder.grid_locator1 = FixedLocator(locs)
2369 gh.grid_finder.tick_formatter1 = DictFormatter(dict([(i, r"${0:.0f}^\circ$".format(i)) for i in locs]))
2370
2371 caax = cgax.parasites[0]
2372 paax = cgax.parasites[1]
2373 cbar = plt.gcf().colorbar(pm, pad=0.075)
2374 caax.set_xlabel('x_range [km]')
2375 caax.set_ylabel('y_range [km]')
2376 plt.text(1.0, 1.05, 'Elevacion '+str(thisDatetime)+" Step "+str(self.ini)+ " Azi: "+str(round(self.res_azi,2)), transform=caax.transAxes, va='bottom',ha='right')
2377 print("***************************self.ini****************************",self.ini)
2378 self.ini= self.ini+1
@@ -4620,3 +4620,214 class Block360_vRF(Operation):
4620
4620
4621 #dataOut.flagNoData = False
4621 #dataOut.flagNoData = False
4622 return dataOut
4622 return dataOut
4623
4624 class Block360_vRF2(Operation):
4625 '''
4626 '''
4627 isConfig = False
4628 __profIndex = 0
4629 __initime = None
4630 __lastdatatime = None
4631 __buffer = None
4632 __dataReady = False
4633 n = None
4634 __nch = 0
4635 __nHeis = 0
4636 index = 0
4637 mode = 0
4638
4639 def __init__(self,**kwargs):
4640 Operation.__init__(self,**kwargs)
4641
4642 def setup(self, dataOut, n = None, mode = None):
4643 '''
4644 n= Numero de PRF's de entrada
4645 '''
4646 self.__initime = None
4647 self.__lastdatatime = 0
4648 self.__dataReady = False
4649 self.__buffer = 0
4650 self.__buffer_1D = 0
4651 #self.__profIndex = 0
4652 self.index = 0
4653 self.__nch = dataOut.nChannels
4654 self.__nHeis = dataOut.nHeights
4655
4656 self.mode = mode
4657 #print("self.mode",self.mode)
4658 #print("nHeights")
4659 self.__buffer = []
4660 self.__buffer2 = []
4661 self.__buffer3 = []
4662
4663 def putData(self,data,mode):
4664 '''
4665 Add a profile to he __buffer and increase in one the __profiel Index
4666 '''
4667 #print("line 4049",data.dataPP_POW.shape,data.dataPP_POW[:10])
4668 #print("line 4049",data.azimuth.shape,data.azimuth)
4669 if self.mode==0:
4670 self.__buffer.append(data.dataPP_POWER)# PRIMER MOMENTO
4671 if self.mode==1:
4672 self.__buffer.append(data.data_pow)
4673 #print("me casi",self.index,data.azimuth[self.index])
4674 #print(self.__profIndex, self.index , data.azimuth[self.index] )
4675 #print("magic",data.profileIndex)
4676 #print(data.azimuth[self.index])
4677 #print("index",self.index)
4678
4679 #####self.__buffer2[self.__profIndex] = data.azimuth[self.index]
4680 self.__buffer2.append(data.azimuth)
4681 self.__buffer3.append(data.elevation)
4682 self.__profIndex += 1
4683 #print("q pasa")
4684 return numpy.array(self.__buffer3) #Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β· Remove DCΒ·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·
4685
4686 def pushData(self,data):
4687 '''
4688 Return the PULSEPAIR and the profiles used in the operation
4689 Affected : self.__profileIndex
4690 '''
4691 #print("pushData")
4692
4693 data_360 = numpy.array(self.__buffer).transpose(1,0,2)
4694 data_p = numpy.array(self.__buffer2)
4695 data_e = numpy.array(self.__buffer3)
4696 n = self.__profIndex
4697
4698 self.__buffer = []
4699 self.__buffer2 = []
4700 self.__buffer3 = []
4701 self.__profIndex = 0
4702 #print("pushData")
4703 return data_360,n,data_p,data_e
4704
4705
4706 def byProfiles(self,dataOut):
4707
4708 self.__dataReady = False
4709 data_360 = None
4710 data_p = None
4711 data_e = None
4712 #print("dataOu",dataOut.dataPP_POW)
4713
4714 elevations = self.putData(data=dataOut,mode = self.mode)
4715 ##### print("profIndex",self.__profIndex)
4716
4717
4718 if self.__profIndex > 1:
4719 case_flag = self.checkcase(elevations)
4720
4721 if case_flag == 0: #Subida
4722 #Se borra el dato anterior para liberar buffer y comparar el dato actual con el siguiente
4723 if len(self.__buffer) == 2: #Cuando estΓ‘ de subida
4724 self.__buffer.pop(0) #Erase first data
4725 self.__buffer2.pop(0)
4726 self.__buffer3.pop(0)
4727 self.__profIndex -= 1
4728 else: #Cuando ha estado de bajada y ha vuelto a subir
4729 #print("else",self.__buffer3)
4730 self.__buffer.pop() #Erase last data
4731 self.__buffer2.pop()
4732 self.__buffer3.pop()
4733 data_360,n,data_p,data_e = self.pushData(data=dataOut)
4734 #print(data_360.shape)
4735 #print(data_e.shape)
4736 #exit(1)
4737 self.__dataReady = True
4738 '''
4739 elif elevations[-1]<0.:
4740 if len(self.__buffer) == 2:
4741 self.__buffer.pop(0) #Erase first data
4742 self.__buffer2.pop(0)
4743 self.__buffer3.pop(0)
4744 self.__profIndex -= 1
4745 else:
4746 self.__buffer.pop() #Erase last data
4747 self.__buffer2.pop()
4748 self.__buffer3.pop()
4749 data_360,n,data_p,data_e = self.pushData(data=dataOut)
4750 self.__dataReady = True
4751 '''
4752
4753
4754 '''
4755 if self.__profIndex == self.n:
4756 data_360,n,data_p,data_e = self.pushData(data=dataOut)
4757 self.__dataReady = True
4758 '''
4759
4760 return data_360,data_p,data_e
4761
4762
4763 def blockOp(self, dataOut, datatime= None):
4764 if self.__initime == None:
4765 self.__initime = datatime
4766 data_360,data_p,data_e = self.byProfiles(dataOut)
4767 self.__lastdatatime = datatime
4768
4769 if data_360 is None:
4770 return None, None,None,None
4771
4772
4773 avgdatatime = self.__initime
4774 if self.n==1:
4775 avgdatatime = datatime
4776 deltatime = datatime - self.__lastdatatime
4777 self.__initime = datatime
4778 #print(data_360.shape,avgdatatime,data_p.shape)
4779 return data_360,avgdatatime,data_p,data_e
4780
4781 def checkcase(self,data_ele):
4782 print(data_ele)
4783 start = data_ele[-2]
4784 end = data_ele[-1]
4785 diff_angle = (end-start)
4786 len_ang=len(data_ele)
4787
4788 if diff_angle > 0: #Subida
4789 return 0
4790
4791 def run(self, dataOut,n = None,mode=None,**kwargs):
4792 #print("BLOCK 360 HERE WE GO MOMENTOS")
4793 print("Block 360")
4794
4795 #exit(1)
4796 if not self.isConfig:
4797
4798 print(n)
4799 self.setup(dataOut = dataOut ,mode= mode ,**kwargs)
4800 ####self.index = 0
4801 #print("comova",self.isConfig)
4802 self.isConfig = True
4803 ####if self.index==dataOut.azimuth.shape[0]:
4804 #### self.index=0
4805
4806 data_360, avgdatatime,data_p,data_e = self.blockOp(dataOut, dataOut.utctime)
4807
4808
4809
4810
4811 dataOut.flagNoData = True
4812
4813 if self.__dataReady:
4814 dataOut.data_360 = data_360 # S
4815 #print("DATA 360")
4816 #print(dataOut.data_360)
4817 #print("---------------------------------------------------------------------------------")
4818 print("---------------------------DATAREADY---------------------------------------------")
4819 #print("---------------------------------------------------------------------------------")
4820 #print("data_360",dataOut.data_360.shape)
4821 print(data_e)
4822 #exit(1)
4823 dataOut.data_azi = data_p
4824 dataOut.data_ele = data_e
4825 ###print("azi: ",dataOut.data_azi)
4826 #print("ele: ",dataOut.data_ele)
4827 #print("jroproc_parameters",data_p[0],data_p[-1])#,data_360.shape,avgdatatime)
4828 dataOut.utctime = avgdatatime
4829
4830
4831
4832 dataOut.flagNoData = False
4833 return dataOut
General Comments 0
You need to be logged in to leave comments. Login now