diff --git a/schainpy/model/proc/jroproc_parameters.py b/schainpy/model/proc/jroproc_parameters.py index 8b401e1..be60287 100755 --- a/schainpy/model/proc/jroproc_parameters.py +++ b/schainpy/model/proc/jroproc_parameters.py @@ -4006,6 +4006,92 @@ class SMOperations(): # # return heights, error + +class WeatherRadar(Operation): + ''' + Function tat implements Weather Radar operations- + Input: + Output: + Parameters affected: + ''' + isConfig = False + + def __init__(self): + Operation.__init__(self) + + def setup(self,dataOut,Pt=0,Gt=0,Gr=0,lambda_=0, aL=0, + tauW= 0,thetaT=0,thetaR=0,Km =0): + self.nCh = dataOut.nChannels + self.nHeis = dataOut.nHeights + deltaHeight = dataOut.heightList[1] - dataOut.heightList[0] + self.Range = numpy.arange(dataOut.nHeights)*deltaHeight + dataOut.heightList[0] + self.Range = self.Range.reshape(1,self.nHeis) + self.Range = numpy.tile(self.Range,[self.nCh,1]) + '''-----------1 Constante del Radar----------''' + self.Pt = Pt + self.Gt = Gt + self.Gr = Gr + self.lambda_ = lambda_ + self.aL = aL + self.tauW = tauW + self.thetaT = thetaT + self.thetaR = thetaR + self.Km = Km + Numerator = ((4*numpy.pi)**3 * aL**2 * 16 *numpy.log(2)) + Denominator = (Pt * Gt * Gr * lambda_**2 * SPEED_OF_LIGHT * tauW * numpy.pi*thetaT*thetaR) + self.RadarConstant = Numerator/Denominator + '''-----------2 Reflectividad del Radar y Factor de Reflectividad------''' + self.n_radar = numpy.zeros((self.nCh,self.nHeis)) + self.Z_radar = numpy.zeros((self.nCh,self.nHeis)) + + def setMoments(self,dataOut,i): + + type = dataOut.inputUnit + nCh = dataOut.nChannels + nHeis= dataOut.nHeights + data_param = numpy.zeros((nCh,4,nHeis)) + if type == "Voltage": + data_param[:,0,:] = dataOut.dataPP_POW/(dataOut.nCohInt**2) + data_param[:,1,:] = dataOut.dataPP_DOP + data_param[:,2,:] = dataOut.dataPP_WIDTH + data_param[:,3,:] = dataOut.dataPP_SNR + if type == "Spectra": + data_param[:,0,:] = dataOut.data_POW + data_param[:,1,:] = dataOut.data_DOP + data_param[:,2,:] = dataOut.data_WIDTH + data_param[:,3,:] = dataOut.data_SNR + + return data_param[:,i,:] + + + def run(self,dataOut,Pt=25,Gt=200.0,Gr=50.0,lambda_=0.32, aL=2.5118, + tauW= 4.0e-6,thetaT=0.165,thetaR=0.367,Km =0.93): + + if not self.isConfig: + self.setup(dataOut= dataOut,Pt=25,Gt=200.0,Gr=50.0,lambda_=0.32, aL=2.5118, + tauW= 4.0e-6,thetaT=0.165,thetaR=0.367,Km =0.93) + self.isConfig = True + '''-----------------------------Potencia de Radar -Signal S-----------------------------''' + Pr = self.setMoments(dataOut,0) + + for R in range(self.nHeis): + self.n_radar[:,R] = self.RadarConstant*Pr[:,R]* (self.Range[:,R])**2 + + self.Z_radar[:,R] = self.n_radar[:,R]* self.lambda_**4/( numpy.pi**5 * self.Km**2) + + '''----------- Factor de Reflectividad Equivalente lamda_ < 10 cm , lamda_= 3.2cm-------''' + Zeh = self.Z_radar + dBZeh = 10*numpy.log10(Zeh) + dataOut.factor_Zeh= dBZeh + self.n_radar = numpy.zeros((self.nCh,self.nHeis)) + self.Z_radar = numpy.zeros((self.nCh,self.nHeis)) + + return dataOut + + + + + class Block360(Operation): ''' ''' diff --git a/schainpy/scripts/test_sim00013.py b/schainpy/scripts/test_sim00013.py new file mode 100644 index 0000000..47d299a --- /dev/null +++ b/schainpy/scripts/test_sim00013.py @@ -0,0 +1,50 @@ +import os,sys +import datetime +import time +from schainpy.controller import Project +path = '/home/developer/Downloads/hdf5_testPP3' +figpath = path +desc = "Simulator Test" + +controllerObj = Project() + +controllerObj.setup(id='10',name='Test Simulator',description=desc) + +readUnitConfObj = controllerObj.addReadUnit(datatype='SimulatorReader', + frequency=9.345e9, + FixRCP_IPP= 60, + Tau_0 = 30, + AcqH0_0=0, + samples=330, + AcqDH_0=0.15, + FixRCP_TXA=0.15, + FixRCP_TXB=0.15, + Fdoppler=600.0, + Hdoppler=36, + Adoppler=300,#300 + delay=0, + online=0, + walk=0, + profilesPerBlock=625, + dataBlocksPerFile=360)#,#nTotalReadFiles=2) + +### opObj11 = readUnitConfObj.addOperation(name='printInfo') + +procUnitConfObjA = controllerObj.addProcUnit(datatype='VoltageProc', inputId=readUnitConfObj.getId()) + +opObj11 = procUnitConfObjA.addOperation(name='PulsePair', optype='other') +opObj11.addParameter(name='n', value='625', format='int')#10 +opObj11.addParameter(name='removeDC', value=1, format='int') + +procUnitConfObjB= controllerObj.addProcUnit(datatype='ParametersProc',inputId=procUnitConfObjA.getId()) + +opObj10 = procUnitConfObjB.addOperation(name="WeatherRadar") + +opObj10 = procUnitConfObjB.addOperation(name='HDFWriter') +opObj10.addParameter(name='path',value=figpath) +#opObj10.addParameter(name='mode',value=0) +opObj10.addParameter(name='blocksPerFile',value='100',format='int') +opObj10.addParameter(name='metadataList',value='utctimeInit,timeInterval',format='list') +opObj10.addParameter(name='dataList',value='dataPP_POW,dataPP_DOP,dataPP_SNR,dataPP_WIDTH,factor_Zeh,utctime')#,format='list' + +controllerObj.start()