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