@@ -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,8 +4030,9 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------''' | |
|
4035 | if not self.CR_Flag: | |||
4033 | self.n_radar = numpy.zeros((self.nCh,self.nHeis)) |
|
4036 | self.n_radar = numpy.zeros((self.nCh,self.nHeis)) | |
4034 | self.Z_radar = numpy.zeros((self.nCh,self.nHeis)) |
|
4037 | self.Z_radar = numpy.zeros((self.nCh,self.nHeis)) | |
4035 |
|
4038 | |||
@@ -4042,11 +4045,19 class WeatherRadar(Operation): | |||||
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 | |
4046 | else: |
|
4049 | else: | |
4047 | factor=23.072 |
|
4050 | factor=28#23.072 | |
4048 |
|
4051 | |||
4049 | dBZeh = 10*numpy.log10(Zeh) + factor |
|
4052 | dBZeh = 10*numpy.log10(Zeh) + factor | |
|
4053 | else: | |||
|
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 | |||
|
4060 | ||||
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) | |
@@ -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