@@ -3944,12 +3944,13 class WeatherRadar(Operation): | |||||
3944 | Operation.__init__(self) |
|
3944 | Operation.__init__(self) | |
3945 |
|
3945 | |||
3946 | def setup(self,dataOut,variableList= None,Pt=0,Gt=0,Gr=0,Glna=0,lambda_=0, aL=0, |
|
3946 | def setup(self,dataOut,variableList= None,Pt=0,Gt=0,Gr=0,Glna=0,lambda_=0, aL=0, | |
3947 | tauW= 0,thetaT=0,thetaR=0,Km =0): |
|
3947 | tauW= 0,thetaT=0,thetaR=0,Km =0,CR_Flag=False,min_index=0): | |
3948 |
|
3948 | |||
3949 | self.nCh = dataOut.nChannels |
|
3949 | self.nCh = dataOut.nChannels | |
3950 | self.nHeis = dataOut.nHeights |
|
3950 | self.nHeis = dataOut.nHeights | |
|
3951 | self.min_index= min_index | |||
3951 | deltaHeight = dataOut.heightList[1] - dataOut.heightList[0] |
|
3952 | deltaHeight = dataOut.heightList[1] - dataOut.heightList[0] | |
3952 | self.Range = numpy.arange(dataOut.nHeights)*deltaHeight + dataOut.heightList[0] |
|
3953 | self.Range = numpy.arange(dataOut.nHeights)*deltaHeight + dataOut.heightList[0]+min_index*deltaHeight | |
3953 | self.Range = self.Range.reshape(1,self.nHeis) |
|
3954 | self.Range = self.Range.reshape(1,self.nHeis) | |
3954 | self.Range = numpy.tile(self.Range,[self.nCh,1]) |
|
3955 | self.Range = numpy.tile(self.Range,[self.nCh,1]) | |
3955 | '''-----------1 Constante del Radar----------''' |
|
3956 | '''-----------1 Constante del Radar----------''' | |
@@ -3963,6 +3964,7 class WeatherRadar(Operation): | |||||
3963 | self.thetaT = thetaT # 1.8ΒΊ -- 0.0314 rad |
|
3964 | self.thetaT = thetaT # 1.8ΒΊ -- 0.0314 rad | |
3964 | self.thetaR = thetaR # 1.8Βͺ --0.0314 rad |
|
3965 | self.thetaR = thetaR # 1.8Βͺ --0.0314 rad | |
3965 | self.Km = Km |
|
3966 | self.Km = Km | |
|
3967 | self.CR_Flag = CR_Flag | |||
3966 | Numerator = ((4*numpy.pi)**3 * aL**2 * 16 *numpy.log(2)*(10**18)) |
|
3968 | Numerator = ((4*numpy.pi)**3 * aL**2 * 16 *numpy.log(2)*(10**18)) | |
3967 | Denominator = (Pt *(10**(Gt/10.0))*(10**(Gr/10.0))*(10**(Glna/10.0))* lambda_**2 * SPEED_OF_LIGHT * tauW * numpy.pi*thetaT*thetaR) |
|
3969 | Denominator = (Pt *(10**(Gt/10.0))*(10**(Gr/10.0))*(10**(Glna/10.0))* lambda_**2 * SPEED_OF_LIGHT * tauW * numpy.pi*thetaT*thetaR) | |
3968 | self.RadarConstant = Numerator/Denominator |
|
3970 | self.RadarConstant = Numerator/Denominator | |
@@ -4028,25 +4030,34 class WeatherRadar(Operation): | |||||
4028 | Pr = dataOut.data_param[:,0,:] |
|
4030 | Pr = dataOut.data_param[:,0,:] | |
4029 | '''---------------------------- Calculo de Noise y threshold para Reflectividad---------''' |
|
4031 | '''---------------------------- Calculo de Noise y threshold para Reflectividad---------''' | |
4030 |
|
4032 | |||
4031 |
Pr = Pr/100 |
|
4033 | Pr = Pr/100.0 # Conversion Watt | |
4032 | '''-----------2 Reflectividad del Radar y Factor de Reflectividad------''' |
|
4034 | '''-----------2 Reflectividad del Radar y Factor de Reflectividad------''' | |
4033 | self.n_radar = numpy.zeros((self.nCh,self.nHeis)) |
|
4035 | if not self.CR_Flag: | |
4034 |
self. |
|
4036 | self.n_radar = numpy.zeros((self.nCh,self.nHeis)) | |
|
4037 | self.Z_radar = numpy.zeros((self.nCh,self.nHeis)) | |||
4035 |
|
4038 | |||
4036 | for R in range(self.nHeis): |
|
4039 | for R in range(self.nHeis): | |
4037 | self.n_radar[:,R] = self.RadarConstant*Pr[:,R]* (self.Range[:,R]*(10**3))**2 |
|
4040 | self.n_radar[:,R] = self.RadarConstant*Pr[:,R]* (self.Range[:,R]*(10**3))**2 | |
4038 |
|
4041 | |||
4039 | self.Z_radar[:,R] = self.n_radar[:,R]* self.lambda_**4/( numpy.pi**5 * self.Km**2) |
|
4042 | self.Z_radar[:,R] = self.n_radar[:,R]* self.lambda_**4/( numpy.pi**5 * self.Km**2) | |
4040 |
|
4043 | |||
4041 | '''----------- Factor de Reflectividad Equivalente lamda_ < 10 cm , lamda_= 3.2cm-------''' |
|
4044 | '''----------- Factor de Reflectividad Equivalente lamda_ < 10 cm , lamda_= 3.2cm-------''' | |
4042 | Zeh = self.Z_radar |
|
4045 | Zeh = self.Z_radar | |
4043 |
|
4046 | |||
4044 | if self.Pt<0.3: |
|
4047 | if self.Pt<0.3: | |
4045 |
factor=1 |
|
4048 | factor=1 | |
|
4049 | else: | |||
|
4050 | factor=28#23.072 | |||
|
4051 | ||||
|
4052 | dBZeh = 10*numpy.log10(Zeh) + factor | |||
4046 | else: |
|
4053 | else: | |
4047 | factor=23.072 |
|
4054 | self.Z_radar = numpy.zeros((self.nCh,self.nHeis)) | |
|
4055 | ||||
|
4056 | for R in range(self.nHeis): | |||
|
4057 | self.Z_radar[0,R]= 10*numpy.log10(Pr[0,R])+20*numpy.log10(self.Range[0,R]*10**3)+62.17-10*numpy.log10(self.Pt)-59-10*numpy.log10(self.tauW) | |||
|
4058 | self.Z_radar[1,R]= 10*numpy.log10(Pr[1,R])+20*numpy.log10(self.Range[1,R]*10**3)+55.6-10*numpy.log10(self.Pt)-59-10*numpy.log10(self.tauW) | |||
|
4059 | dBZeh= self.Z_radar | |||
4048 |
|
4060 | |||
4049 | dBZeh = 10*numpy.log10(Zeh) + factor |
|
|||
4050 | if type=='N': |
|
4061 | if type=='N': | |
4051 | return dBZeh |
|
4062 | return dBZeh | |
4052 | elif type=='D': |
|
4063 | elif type=='D': | |
@@ -4062,12 +4073,11 class WeatherRadar(Operation): | |||||
4062 | return Sigmav_W |
|
4073 | return Sigmav_W | |
4063 |
|
4074 | |||
4064 |
|
4075 | |||
4065 |
def run(self,dataOut,variableList=None,Pt=1.58,Gt=38.5,Gr=38.5,Glna= |
|
4076 | def run(self,dataOut,variableList=None,Pt=1.58,Gt=38.5,Gr=38.5,Glna=59.0,lambda_=0.032, aL=1, | |
4066 | tauW= 0.2,thetaT=0.0314,thetaR=0.0314,Km =0.93): |
|
4077 | tauW= 0.2,thetaT=0.0314,thetaR=0.0314,Km =0.93,CR_Flag=0,min_index=0): | |
4067 |
|
||||
4068 | if not self.isConfig: |
|
4078 | if not self.isConfig: | |
4069 | self.setup(dataOut= dataOut, variableList=variableList,Pt=Pt,Gt=Gt,Gr=Gr,Glna=Glna,lambda_=lambda_, aL=aL, |
|
4079 | self.setup(dataOut= dataOut, variableList=variableList,Pt=Pt,Gt=Gt,Gr=Gr,Glna=Glna,lambda_=lambda_, aL=aL, | |
4070 | tauW= tauW,thetaT=thetaT,thetaR=thetaR,Km =Km) |
|
4080 | tauW= tauW,thetaT=thetaT,thetaR=thetaR,Km =Km,CR_Flag=CR_Flag,min_index=min_index) | |
4071 | self.isConfig = True |
|
4081 | self.isConfig = True | |
4072 |
|
4082 | |||
4073 | dataOut.data_param = self.setMoments(dataOut) |
|
4083 | dataOut.data_param = self.setMoments(dataOut) | |
@@ -4098,7 +4108,7 class PedestalInformation(Operation): | |||||
4098 |
|
4108 | |||
4099 | dt = datetime.datetime.utcfromtimestamp(timestamp) |
|
4109 | dt = datetime.datetime.utcfromtimestamp(timestamp) | |
4100 | path = os.path.join(self.path, dt.strftime('%Y-%m-%dT%H-00-00')) |
|
4110 | path = os.path.join(self.path, dt.strftime('%Y-%m-%dT%H-00-00')) | |
4101 |
|
4111 | |||
4102 | if not os.path.exists(path): |
|
4112 | if not os.path.exists(path): | |
4103 | return False |
|
4113 | return False | |
4104 | fileList = glob.glob(os.path.join(path, '*.h5')) |
|
4114 | fileList = glob.glob(os.path.join(path, '*.h5')) | |
@@ -4176,12 +4186,12 class PedestalInformation(Operation): | |||||
4176 | if mode is None: |
|
4186 | if mode is None: | |
4177 | self.flagAskMode = True |
|
4187 | self.flagAskMode = True | |
4178 | N = 0 |
|
4188 | N = 0 | |
4179 |
while True: |
|
4189 | while True: | |
4180 | if N == self.nTries+1: |
|
4190 | if N == self.nTries+1: | |
4181 | log.error('No position files found in {}'.format(path), self.name) |
|
4191 | log.error('No position files found in {}'.format(path), self.name) | |
4182 | raise IOError('No position files found in {}'.format(path)) |
|
4192 | raise IOError('No position files found in {}'.format(path)) | |
4183 | filelist = self.find_file(dataOut.utctime) |
|
4193 | filelist = self.find_file(dataOut.utctime) | |
4184 |
|
4194 | |||
4185 | if filelist == 0: |
|
4195 | if filelist == 0: | |
4186 | N += 1 |
|
4196 | N += 1 | |
4187 | log.warning('Waiting {}s for position files...'.format(self.delay), self.name) |
|
4197 | log.warning('Waiting {}s for position files...'.format(self.delay), self.name) | |
@@ -4211,12 +4221,12 class PedestalInformation(Operation): | |||||
4211 | self.find_next_file() |
|
4221 | self.find_next_file() | |
4212 |
|
4222 | |||
4213 | az, el, scan = self.get_values() |
|
4223 | az, el, scan = self.get_values() | |
4214 |
|
4224 | |||
4215 | dataOut.flagNoData = False |
|
4225 | dataOut.flagNoData = False | |
4216 | if numpy.isnan(az) or numpy.isnan(el) : |
|
4226 | if numpy.isnan(az) or numpy.isnan(el) : | |
4217 | dataOut.flagNoData = True |
|
4227 | dataOut.flagNoData = True | |
4218 | return dataOut |
|
4228 | return dataOut | |
4219 |
|
4229 | |||
4220 | dataOut.azimuth = round(az, 2) |
|
4230 | dataOut.azimuth = round(az, 2) | |
4221 | dataOut.elevation = round(el, 2) |
|
4231 | dataOut.elevation = round(el, 2) | |
4222 | dataOut.mode_op = scan |
|
4232 | dataOut.mode_op = scan | |
@@ -4252,7 +4262,7 class Block360(Operation): | |||||
4252 | self.attr = attr |
|
4262 | self.attr = attr | |
4253 | self.__buffer = [] |
|
4263 | self.__buffer = [] | |
4254 | self.azi = [] |
|
4264 | self.azi = [] | |
4255 |
self.ele = [] |
|
4265 | self.ele = [] | |
4256 |
|
4266 | |||
4257 | def putData(self, data, attr): |
|
4267 | def putData(self, data, attr): | |
4258 | ''' |
|
4268 | ''' | |
@@ -4275,7 +4285,7 class Block360(Operation): | |||||
4275 |
|
4285 | |||
4276 | self.__buffer = [] |
|
4286 | self.__buffer = [] | |
4277 | self.azi = [] |
|
4287 | self.azi = [] | |
4278 |
self.ele = [] |
|
4288 | self.ele = [] | |
4279 | self.__profIndex = 0 |
|
4289 | self.__profIndex = 0 | |
4280 |
|
4290 | |||
4281 | if case_flag in (0, 1, -1): |
|
4291 | if case_flag in (0, 1, -1): | |
@@ -4291,7 +4301,7 class Block360(Operation): | |||||
4291 | data_e = None |
|
4301 | data_e = None | |
4292 |
|
4302 | |||
4293 | self.putData(data=dataOut, attr = self.attr) |
|
4303 | self.putData(data=dataOut, attr = self.attr) | |
4294 |
|
4304 | |||
4295 | if self.__profIndex > 5: |
|
4305 | if self.__profIndex > 5: | |
4296 | case_flag = self.checkcase() |
|
4306 | case_flag = self.checkcase() | |
4297 |
|
4307 | |||
@@ -4308,13 +4318,13 class Block360(Operation): | |||||
4308 | self.__buffer.pop() #Erase last data |
|
4318 | self.__buffer.pop() #Erase last data | |
4309 | self.azi.pop() |
|
4319 | self.azi.pop() | |
4310 | self.ele.pop() |
|
4320 | self.ele.pop() | |
4311 |
data_360, n, data_p, data_e = self.pushData(dataOut, case_flag) |
|
4321 | data_360, n, data_p, data_e = self.pushData(dataOut, case_flag) | |
4312 | self.__dataReady = True |
|
4322 | self.__dataReady = True | |
4313 | if case_flag == -1: #Subida |
|
4323 | if case_flag == -1: #Subida | |
4314 | self.__buffer.pop() #Erase last data |
|
4324 | self.__buffer.pop() #Erase last data | |
4315 | self.azi.pop() |
|
4325 | self.azi.pop() | |
4316 | self.ele.pop() |
|
4326 | self.ele.pop() | |
4317 |
data_360, n, data_p, data_e = self.pushData(dataOut, case_flag) |
|
4327 | data_360, n, data_p, data_e = self.pushData(dataOut, case_flag) | |
4318 | #self.__dataReady = True |
|
4328 | #self.__dataReady = True | |
4319 |
|
4329 | |||
4320 | return data_360, data_p, data_e |
|
4330 | return data_360, data_p, data_e | |
@@ -4353,8 +4363,8 class Block360(Operation): | |||||
4353 | self.mode_op = 'RHI' |
|
4363 | self.mode_op = 'RHI' | |
4354 | else: |
|
4364 | else: | |
4355 | self.flagMode = None |
|
4365 | self.flagMode = None | |
4356 |
self.mode_op = 'None' |
|
4366 | self.mode_op = 'None' | |
4357 |
|
4367 | |||
4358 | if self.flagMode == 1: #'AZI' |
|
4368 | if self.flagMode == 1: #'AZI' | |
4359 | start = self.azi[-2] |
|
4369 | start = self.azi[-2] | |
4360 | end = self.azi[-1] |
|
4370 | end = self.azi[-1] | |
@@ -4367,7 +4377,7 class Block360(Operation): | |||||
4367 |
|
4377 | |||
4368 | start = self.ele[-3] |
|
4378 | start = self.ele[-3] | |
4369 | middle = self.ele[-2] |
|
4379 | middle = self.ele[-2] | |
4370 |
end = self.ele[-1] |
|
4380 | end = self.ele[-1] | |
4371 |
|
4381 | |||
4372 | if end < 0: |
|
4382 | if end < 0: | |
4373 | return 1 |
|
4383 | return 1 | |
@@ -4392,7 +4402,7 class Block360(Operation): | |||||
4392 | dataOut.data_azi = data_p |
|
4402 | dataOut.data_azi = data_p | |
4393 | dataOut.data_ele = data_e |
|
4403 | dataOut.data_ele = data_e | |
4394 | dataOut.utctime = avgdatatime |
|
4404 | dataOut.utctime = avgdatatime | |
4395 |
dataOut.flagNoData = False |
|
4405 | dataOut.flagNoData = False | |
4396 | dataOut.flagMode = self.flagMode |
|
4406 | dataOut.flagMode = self.flagMode | |
4397 | dataOut.mode_op = self.mode_op |
|
4407 | dataOut.mode_op = self.mode_op | |
4398 |
|
4408 | |||
@@ -4472,7 +4482,6 class MergeProc(ProcessingUnit): | |||||
4472 | g = [getattr(data, attr_data) for data in data_inputs][1] |
|
4482 | g = [getattr(data, attr_data) for data in data_inputs][1] | |
4473 | data = numpy.concatenate((f,g),axis=3) |
|
4483 | data = numpy.concatenate((f,g),axis=3) | |
4474 | setattr(self.dataOut, attr_data, data) |
|
4484 | setattr(self.dataOut, attr_data, data) | |
4475 |
|
||||
4476 | # snr |
|
4485 | # snr | |
4477 | # self.dataOut.data_snr = numpy.concatenate((data_inputs[0].data_snr, data_inputs[1].data_snr), axis=2) |
|
4486 | # self.dataOut.data_snr = numpy.concatenate((data_inputs[0].data_snr, data_inputs[1].data_snr), axis=2) | |
4478 |
|
4487 |
General Comments 0
You need to be logged in to leave comments.
Login now