##// END OF EJS Templates
UPDATE calculo de reflectividad, parametros adiciones flag CR y valor de RMIX
avaldezp -
r1587:ed17c399a06f
parent child
Show More
@@ -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/1000.0 # Conversion Watt
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.Z_radar = numpy.zeros((self.nCh,self.nHeis))
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=10.072
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=70.0,lambda_=0.032, aL=1,
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