@@ -0,0 +1,50 | |||||
|
1 | import os,sys | |||
|
2 | import datetime | |||
|
3 | import time | |||
|
4 | from schainpy.controller import Project | |||
|
5 | path = '/home/developer/Downloads/hdf5_testPP3' | |||
|
6 | figpath = path | |||
|
7 | desc = "Simulator Test" | |||
|
8 | ||||
|
9 | controllerObj = Project() | |||
|
10 | ||||
|
11 | controllerObj.setup(id='10',name='Test Simulator',description=desc) | |||
|
12 | ||||
|
13 | readUnitConfObj = controllerObj.addReadUnit(datatype='SimulatorReader', | |||
|
14 | frequency=9.345e9, | |||
|
15 | FixRCP_IPP= 60, | |||
|
16 | Tau_0 = 30, | |||
|
17 | AcqH0_0=0, | |||
|
18 | samples=330, | |||
|
19 | AcqDH_0=0.15, | |||
|
20 | FixRCP_TXA=0.15, | |||
|
21 | FixRCP_TXB=0.15, | |||
|
22 | Fdoppler=600.0, | |||
|
23 | Hdoppler=36, | |||
|
24 | Adoppler=300,#300 | |||
|
25 | delay=0, | |||
|
26 | online=0, | |||
|
27 | walk=0, | |||
|
28 | profilesPerBlock=625, | |||
|
29 | dataBlocksPerFile=360)#,#nTotalReadFiles=2) | |||
|
30 | ||||
|
31 | ### opObj11 = readUnitConfObj.addOperation(name='printInfo') | |||
|
32 | ||||
|
33 | procUnitConfObjA = controllerObj.addProcUnit(datatype='VoltageProc', inputId=readUnitConfObj.getId()) | |||
|
34 | ||||
|
35 | opObj11 = procUnitConfObjA.addOperation(name='PulsePair', optype='other') | |||
|
36 | opObj11.addParameter(name='n', value='625', format='int')#10 | |||
|
37 | opObj11.addParameter(name='removeDC', value=1, format='int') | |||
|
38 | ||||
|
39 | procUnitConfObjB= controllerObj.addProcUnit(datatype='ParametersProc',inputId=procUnitConfObjA.getId()) | |||
|
40 | ||||
|
41 | opObj10 = procUnitConfObjB.addOperation(name="WeatherRadar") | |||
|
42 | ||||
|
43 | opObj10 = procUnitConfObjB.addOperation(name='HDFWriter') | |||
|
44 | opObj10.addParameter(name='path',value=figpath) | |||
|
45 | #opObj10.addParameter(name='mode',value=0) | |||
|
46 | opObj10.addParameter(name='blocksPerFile',value='100',format='int') | |||
|
47 | opObj10.addParameter(name='metadataList',value='utctimeInit,timeInterval',format='list') | |||
|
48 | opObj10.addParameter(name='dataList',value='dataPP_POW,dataPP_DOP,dataPP_SNR,dataPP_WIDTH,factor_Zeh,utctime')#,format='list' | |||
|
49 | ||||
|
50 | controllerObj.start() |
@@ -4006,6 +4006,92 class SMOperations(): | |||||
4006 | # |
|
4006 | # | |
4007 | # return heights, error |
|
4007 | # return heights, error | |
4008 |
|
4008 | |||
|
4009 | ||||
|
4010 | class WeatherRadar(Operation): | |||
|
4011 | ''' | |||
|
4012 | Function tat implements Weather Radar operations- | |||
|
4013 | Input: | |||
|
4014 | Output: | |||
|
4015 | Parameters affected: | |||
|
4016 | ''' | |||
|
4017 | isConfig = False | |||
|
4018 | ||||
|
4019 | def __init__(self): | |||
|
4020 | Operation.__init__(self) | |||
|
4021 | ||||
|
4022 | def setup(self,dataOut,Pt=0,Gt=0,Gr=0,lambda_=0, aL=0, | |||
|
4023 | tauW= 0,thetaT=0,thetaR=0,Km =0): | |||
|
4024 | self.nCh = dataOut.nChannels | |||
|
4025 | self.nHeis = dataOut.nHeights | |||
|
4026 | deltaHeight = dataOut.heightList[1] - dataOut.heightList[0] | |||
|
4027 | self.Range = numpy.arange(dataOut.nHeights)*deltaHeight + dataOut.heightList[0] | |||
|
4028 | self.Range = self.Range.reshape(1,self.nHeis) | |||
|
4029 | self.Range = numpy.tile(self.Range,[self.nCh,1]) | |||
|
4030 | '''-----------1 Constante del Radar----------''' | |||
|
4031 | self.Pt = Pt | |||
|
4032 | self.Gt = Gt | |||
|
4033 | self.Gr = Gr | |||
|
4034 | self.lambda_ = lambda_ | |||
|
4035 | self.aL = aL | |||
|
4036 | self.tauW = tauW | |||
|
4037 | self.thetaT = thetaT | |||
|
4038 | self.thetaR = thetaR | |||
|
4039 | self.Km = Km | |||
|
4040 | Numerator = ((4*numpy.pi)**3 * aL**2 * 16 *numpy.log(2)) | |||
|
4041 | Denominator = (Pt * Gt * Gr * lambda_**2 * SPEED_OF_LIGHT * tauW * numpy.pi*thetaT*thetaR) | |||
|
4042 | self.RadarConstant = Numerator/Denominator | |||
|
4043 | '''-----------2 Reflectividad del Radar y Factor de Reflectividad------''' | |||
|
4044 | self.n_radar = numpy.zeros((self.nCh,self.nHeis)) | |||
|
4045 | self.Z_radar = numpy.zeros((self.nCh,self.nHeis)) | |||
|
4046 | ||||
|
4047 | def setMoments(self,dataOut,i): | |||
|
4048 | ||||
|
4049 | type = dataOut.inputUnit | |||
|
4050 | nCh = dataOut.nChannels | |||
|
4051 | nHeis= dataOut.nHeights | |||
|
4052 | data_param = numpy.zeros((nCh,4,nHeis)) | |||
|
4053 | if type == "Voltage": | |||
|
4054 | data_param[:,0,:] = dataOut.dataPP_POW/(dataOut.nCohInt**2) | |||
|
4055 | data_param[:,1,:] = dataOut.dataPP_DOP | |||
|
4056 | data_param[:,2,:] = dataOut.dataPP_WIDTH | |||
|
4057 | data_param[:,3,:] = dataOut.dataPP_SNR | |||
|
4058 | if type == "Spectra": | |||
|
4059 | data_param[:,0,:] = dataOut.data_POW | |||
|
4060 | data_param[:,1,:] = dataOut.data_DOP | |||
|
4061 | data_param[:,2,:] = dataOut.data_WIDTH | |||
|
4062 | data_param[:,3,:] = dataOut.data_SNR | |||
|
4063 | ||||
|
4064 | return data_param[:,i,:] | |||
|
4065 | ||||
|
4066 | ||||
|
4067 | def run(self,dataOut,Pt=25,Gt=200.0,Gr=50.0,lambda_=0.32, aL=2.5118, | |||
|
4068 | tauW= 4.0e-6,thetaT=0.165,thetaR=0.367,Km =0.93): | |||
|
4069 | ||||
|
4070 | if not self.isConfig: | |||
|
4071 | self.setup(dataOut= dataOut,Pt=25,Gt=200.0,Gr=50.0,lambda_=0.32, aL=2.5118, | |||
|
4072 | tauW= 4.0e-6,thetaT=0.165,thetaR=0.367,Km =0.93) | |||
|
4073 | self.isConfig = True | |||
|
4074 | '''-----------------------------Potencia de Radar -Signal S-----------------------------''' | |||
|
4075 | Pr = self.setMoments(dataOut,0) | |||
|
4076 | ||||
|
4077 | for R in range(self.nHeis): | |||
|
4078 | self.n_radar[:,R] = self.RadarConstant*Pr[:,R]* (self.Range[:,R])**2 | |||
|
4079 | ||||
|
4080 | self.Z_radar[:,R] = self.n_radar[:,R]* self.lambda_**4/( numpy.pi**5 * self.Km**2) | |||
|
4081 | ||||
|
4082 | '''----------- Factor de Reflectividad Equivalente lamda_ < 10 cm , lamda_= 3.2cm-------''' | |||
|
4083 | Zeh = self.Z_radar | |||
|
4084 | dBZeh = 10*numpy.log10(Zeh) | |||
|
4085 | dataOut.factor_Zeh= dBZeh | |||
|
4086 | self.n_radar = numpy.zeros((self.nCh,self.nHeis)) | |||
|
4087 | self.Z_radar = numpy.zeros((self.nCh,self.nHeis)) | |||
|
4088 | ||||
|
4089 | return dataOut | |||
|
4090 | ||||
|
4091 | ||||
|
4092 | ||||
|
4093 | ||||
|
4094 | ||||
4009 | class Block360(Operation): |
|
4095 | class Block360(Operation): | |
4010 | ''' |
|
4096 | ''' | |
4011 | ''' |
|
4097 | ''' |
General Comments 0
You need to be logged in to leave comments.
Login now