##// END OF EJS Templates
Merge branch 'v3.0-WR' of http://intranet.igp.gob.pe:8082/schain into v3.0-WR
Juan C. Espinoza -
r1480:ab3389190ff4 merge
parent child
Show More
@@ -0,0 +1,362
1 #!python
2 '''
3 '''
4
5 import os, sys
6 import datetime
7 import time
8
9 #path = os.path.dirname(os.getcwd())
10 #path = os.path.dirname(path)
11 #sys.path.insert(0, path)
12
13 from schainpy.controller import Project
14
15 desc = "USRP_test"
16 filename = "USRP_processing.xml"
17 controllerObj = Project()
18 controllerObj.setup(id = '191', name='Test_USRP', description=desc)
19
20 ############## USED TO PLOT IQ VOLTAGE, POWER AND SPECTRA #############
21
22 #######################################################################
23 ######PATH DE LECTURA, ESCRITURA, GRAFICOS Y ENVIO WEB#################
24 #######################################################################
25 #path = '/media/data/data/vientos/57.2063km/echoes/NCO_Woodman'
26 #path = '/DATA_RM/TEST_INTEGRACION'
27 #path = '/DATA_RM/PRUEBA_USRP_RP'
28 #path = '/DATA_RM/PRUEBA_USRP_RP'
29
30 path = '/DATA_RM/TEST_2M'
31 path = '/DATA_RM/TEST_2M_UD'
32 path = '/DATA_RM/2MHZ17022022'
33 path = '/DATA_RM/10MHZTEST/'
34 path = '/DATA_RM/10MHZDRONE/'
35
36
37 path= '/home/soporte/TEST_500mVPP'
38 path= '/home/soporte/TEST_1VPP+500mVDC'
39 path = '/home/soporte/TEST_500mVPP+500mVDC'
40 path = '/home/soporte/TEST_1.5VPP'
41 path = '/home/soporte/TEST_2VPP'
42 path= '/home/soporte/TEST_1VPP'
43 path = '/home/soporte/Documents/HUANCAYO/TEST_HYO_PM@2022-05-14T11-28-19/rawdata'
44
45 #HYO_PM@2022-05-28T00-00-17
46 path = '/DATA_RM/DATA/HYO_PM@2022-05-28T00-00-17/rawdata'
47
48 #figpath = '/home/soporte/Pictures/TEST_RP_0001'
49 #figpath = '/home/soporte/Pictures/TEST_RP_6000'
50 figpath = '/home/soporte/Pictures/USRP_TEST_2M'
51 figpath = '/home/soporte/Pictures/USRP_TEST_2M_UD'
52 figpath = '/home/soporte/Pictures/10MHZDRONE'
53 figpath = '/home/soporte/Pictures/500mVPP'
54 figpath = '/home/soporte/Pictures/1VPP+500mVDC'
55 figpath = '/home/soporte/Pictures/TEST_500mVPP+500mVDC'
56 figpath = '/home/soporte/Pictures/TEST_1.5VPP'
57 figpath = '/home/soporte/Pictures/TEST_2VPP'
58 figpath = '/home/soporte/Pictures/TEST_1VPP'
59
60
61
62
63 #remotefolder = "/home/wmaster/graficos"
64 #######################################################################
65 ################# RANGO DE PLOTEO######################################
66 #######################################################################
67 dBmin = '-60'#'-20'
68 dBmax = '-5'#'-85'
69 xmin = '0'
70 xmax ='24'
71 ymin = '0'
72 ymax = '10'
73 #######################################################################
74 ########################FECHA##########################################
75 #######################################################################
76 str = datetime.date.today()
77 today = str.strftime("%Y/%m/%d")
78 str2 = str - datetime.timedelta(days=1)
79 yesterday = str2.strftime("%Y/%m/%d")
80 #######################################################################
81 ######################## UNIDAD DE LECTURA#############################
82 #######################################################################
83 readUnitConfObj = controllerObj.addReadUnit(datatype='DigitalRFReader',
84 path=path,
85 startDate="2022/05/28",#today,
86 endDate="2022/05/28",#today,
87 startTime='00:00:00',# inicio libre
88 #startTime='00:00:00',
89 endTime='23:59:59',
90 delay=0,
91 #set=0,
92 online=0,
93 walk=1,
94 ippKm = 60)
95
96 opObj11 = readUnitConfObj.addOperation(name='printInfo')
97 #opObj11 = readUnitConfObj.addOperation(name='printNumberOfBlock')
98 #######################################################################
99 ################ OPERACIONES DOMINIO DEL TIEMPO########################
100 #######################################################################
101
102 procUnitConfObjA = controllerObj.addProcUnit(datatype='VoltageProc', inputId=readUnitConfObj.getId())
103
104 op3 = procUnitConfObjA.addOperation(name='ProfileSelector', optype='other')
105 op3.addParameter(name='profileRangeList', value='1,123')
106
107
108 code=[[1]]
109
110 opObj11 = procUnitConfObjA.addOperation(name='Decoder', optype='other')
111 opObj11.addParameter(name='code', value=code)
112 opObj11.addParameter(name='nCode', value='1', format='int')
113 opObj11.addParameter(name='nBaud', value='1', format='int')
114
115
116 '''
117 op3 = procUnitConfObjA.addOperation(name='ProfileSelector', optype='other')
118 op3.addParameter(name='profileRangeList', value='122,249')
119 code8=[[1,1,1,0,1,1,0,1],[1,1,1,0,0,0,1,0]]
120
121 opObj11 = procUnitConfObjA.addOperation(name='Decoder', optype='other')
122 opObj11.addParameter(name='code', value=code8)
123 opObj11.addParameter(name='nCode', value='2', format='int')
124 opObj11.addParameter(name='nBaud', value='8', format='int')
125 '''
126 op = procUnitConfObjA.addOperation(name='CohInt', optype='other') #Minimo integrar 2 perfiles por ser codigo complementario
127 op.addParameter(name='n', value=2, format='int')
128
129
130 '''
131
132 # OJO SCOPE
133 opObj10 = procUnitConfObjA.addOperation(name='ScopePlot', optype='external')
134 opObj10.addParameter(name='id', value='10', format='int')
135 opObj10.addParameter(name='xmin', value='0', format='int')
136 opObj10.addParameter(name='xmax', value='60', format='int')
137 opObj10.addParameter(name='type', value='iq')
138 #opObj10.addParameter(name='ymin', value='-0.20000', format='int')
139 #opObj10.addParameter(name='ymax', value='0.20000', format='int')
140 opObj10.addParameter(name='save', value=figpath, format='str')
141 opObj10.addParameter(name='save_period', value=1, format='int')
142 '''
143 '''
144 opObj11 = procUnitConfObjA.addOperation(name='selectHeights')
145 opObj11.addParameter(name='minIndex', value='1', format='int')
146 # opObj11.addParameter(name='maxIndex', value='10000', format='int')
147 opObj11.addParameter(name='maxIndex', value='200', format='int')
148 '''
149 #
150 # codigo64='1,1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,1,1,1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,0,0,0,1,0,'+\
151 # '1,1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,1,0,0,0,1,0,0,1,0,0,0,0,1,1,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,1'
152
153 #opObj11 = procUnitConfObjA.addOperation(name='setRadarFrequency')
154 #opObj11.addParameter(name='frequency', value='49920000')
155
156 '''
157 opObj11 = procUnitConfObjA.addOperation(name='PulsePair', optype='other')
158 opObj11.addParameter(name='n', value='625', format='int')#10
159 opObj11.addParameter(name='removeDC', value=1, format='int')
160 '''
161
162 # Ploteo TEST
163 '''
164 opObj11 = procUnitConfObjA.addOperation(name='PulsepairPowerPlot', optype='other')
165 opObj11 = procUnitConfObjA.addOperation(name='PulsepairSignalPlot', optype='other')
166 opObj11 = procUnitConfObjA.addOperation(name='PulsepairVelocityPlot', optype='other')
167 #opObj11.addParameter(name='xmax', value=8)
168 opObj11 = procUnitConfObjA.addOperation(name='PulsepairSpecwidthPlot', optype='other')
169 '''
170 # OJO SCOPE
171 #opObj10 = procUnitConfObjA.addOperation(name='ScopePlot', optype='external')
172 #opObj10.addParameter(name='id', value='10', format='int')
173 ##opObj10.addParameter(name='xmin', value='0', format='int')
174 ##opObj10.addParameter(name='xmax', value='50', format='int')
175 #opObj10.addParameter(name='type', value='iq')
176 ##opObj10.addParameter(name='ymin', value='-5000', format='int')
177 ##opObj10.addParameter(name='ymax', value='8500', format='int')
178 #opObj11.addParameter(name='save', value=figpath, format='str')
179 #opObj11.addParameter(name='save_period', value=10, format='int')
180
181 #opObj10 = procUnitConfObjA.addOperation(name='setH0')
182 #opObj10.addParameter(name='h0', value='-5000', format='float')
183
184 #opObj11 = procUnitConfObjA.addOperation(name='filterByHeights')
185 #opObj11.addParameter(name='window', value='1', format='int')
186
187 #codigo='1,1,-1,1,1,-1,1,-1,-1,1,-1,-1,-1,1,-1,-1,-1,1,-1,-1,-1,1,1,1,1,-1,-1,-1'
188 #opObj11 = procUnitConfObjSousy.addOperation(name='Decoder', optype='other')
189 #opObj11.addParameter(name='code', value=codigo, format='floatlist')
190 #opObj11.addParameter(name='nCode', value='1', format='int')
191 #opObj11.addParameter(name='nBaud', value='28', format='int')
192
193 #opObj11 = procUnitConfObjA.addOperation(name='CohInt', optype='other')
194 #opObj11.addParameter(name='n', value='100', format='int')
195
196 #######################################################################
197 ########## OPERACIONES ParametersProc########################
198 #######################################################################
199 ###procUnitConfObjB= controllerObj.addProcUnit(datatype='ParametersProc',inputId=procUnitConfObjA.getId())
200 '''
201
202 opObj11 = procUnitConfObjA.addOperation(name='PedestalInformation')
203 opObj11.addParameter(name='path_ped', value=path_ped)
204 opObj11.addParameter(name='path_adq', value=path_adq)
205 opObj11.addParameter(name='t_Interval_p', value='0.01', format='float')
206 opObj11.addParameter(name='n_Muestras_p', value='100', format='float')
207 opObj11.addParameter(name='blocksPerfile', value='100', format='int')
208 opObj11.addParameter(name='f_a_p', value='25', format='int')
209 opObj11.addParameter(name='online', value='0', format='int')
210
211 opObj11 = procUnitConfObjA.addOperation(name='Block360')
212 opObj11.addParameter(name='n', value='40', format='int')
213
214 opObj11= procUnitConfObjA.addOperation(name='WeatherPlot',optype='other')
215 opObj11.addParameter(name='save', value=figpath)
216 opObj11.addParameter(name='save_period', value=1)
217
218 8
219 '''
220
221
222 '''
223 opObj11 = procUnitConfObjA.addOperation(name='CohInt', optype='other')
224 opObj11.addParameter(name='n', value='250', format='int')
225 '''
226 #######################################################################
227 ########## OPERACIONES DOMINIO DE LA FRECUENCIA########################
228 #######################################################################
229 '''
230 procUnitConfObjB = controllerObj.addProcUnit(datatype='SpectraProc', inputId=procUnitConfObjA.getId())
231 procUnitConfObjB.addParameter(name='nFFTPoints', value='64', format='int')
232 procUnitConfObjB.addParameter(name='nProfiles', value='64', format='int')
233 '''
234
235 procUnitConfObjB = controllerObj.addProcUnit(datatype='SpectraProc', inputId=procUnitConfObjA.getId())
236 procUnitConfObjB.addParameter(name='nFFTPoints', value='61', format='int')
237 procUnitConfObjB.addParameter(name='nProfiles', value='61', format='int')
238
239 '''
240 procUnitConfObjC = controllerObj.addProcUnit(datatype='SpectraHeisProc', inputId=procUnitConfObjA.getId())
241 #procUnitConfObjB.addParameter(name='nFFTPoints', value='64', format='int')
242 #procUnitConfObjB.addParameter(name='nProfiles', value='64', format='int')
243 opObj11 = procUnitConfObjC.addOperation(name='IncohInt4SpectraHeis', optype='other')
244 #opObj11.addParameter(name='timeInterval', value='4', format='int')
245 opObj11.addParameter(name='n', value='100', format='int')
246
247 #procUnitConfObjB.addParameter(name='pairsList', value='(0,0),(1,1),(0,1)', format='pairsList')
248
249 #opObj13 = procUnitConfObjB.addOperation(name='removeDC')
250 #opObj13.addParameter(name='mode', value='2', format='int')
251
252 #opObj11 = procUnitConfObjB.addOperation(name='IncohInt', optype='other')
253 #opObj11.addParameter(name='n', value='8', format='float')
254 #######################################################################
255 ########## PLOTEO DOMINIO DE LA FRECUENCIA#############################
256 #######################################################################
257 #----
258 '''
259 '''
260 opObj11 = procUnitConfObjC.addOperation(name='SpectraHeisPlot')
261 opObj11.addParameter(name='id', value='10', format='int')
262 opObj11.addParameter(name='wintitle', value='Spectra_Alturas', format='str')
263 #opObj11.addParameter(name='xmin', value=-100000, format='float')
264 #opObj11.addParameter(name='xmax', value=100000, format='float')
265 opObj11.addParameter(name='oneFigure', value=False,format='bool')
266 #opObj11.addParameter(name='zmin', value=-10, format='int')
267 #opObj11.addParameter(name='zmax', value=40, format='int')
268 opObj11.addParameter(name='ymin', value=10, format='int')
269 opObj11.addParameter(name='ymax', value=55, format='int')
270 opObj11.addParameter(name='grid', value=True, format
271 [Reading] 2022-05-23 12:27:32.732775: 21333 samples <> 0.010667 sec
272 ='bool')
273 #opObj11.addParameter(name='showprofile', value='1', format='int')
274 opObj11.addParameter(name='save', value=figpath, format='str')
275 #opObj11.addParameter(name='save_period', value=10, format='int')
276 '''
277 '''
278 opObj11 = procUnitConfObjC.addOperation(name='RTIHeisPlot')
279 opObj11.addParameter(name='id', value='10', format='int')
280 opObj11.addParameter(name='wintitle', value='RTI_Alturas', format='str')
281 opObj11.addParameter(name='xmin', value=11.0, format='float')
282 opObj11.addParameter(name='xmax', value=18.0, format='float')
283 opObj11.addParameter(name='zmin', value=10, format='int')
284 opObj11.addParameter(name='zmax', value=30, format='int')
285 opObj11.addParameter(name='ymin', value=5, format='int')
286 opObj11.addParameter(name='ymax', value=28, format='int')
287 opObj11.addParameter(name='showprofile', value='1', format='int')
288 opObj11.addParameter(name='save', value=figpath, format='str')
289 opObj11.addParameter(name='save_period', value=10, format='int')
290 '''
291
292 #SpectraPlot
293
294 opObj11 = procUnitConfObjB.addOperation(name='SpectraPlot', optype='external')
295 opObj11.addParameter(name='id', value='1', format='int')
296 opObj11.addParameter(name='wintitle', value='Spectra', format='str')
297 #opObj11.addParameter(name='xmin', value=-0.01, format='float')
298 #opObj11.addParameter(name='xmax', value=0.01, format='float')
299 opObj11.addParameter(name='zmin', value=dBmin, format='int')
300 opObj11.addParameter(name='zmax', value=dBmax, format='int')
301 opObj11.addParameter(name='ymin', value=ymin, format='int')
302 opObj11.addParameter(name='ymax', value=ymax, format='int')
303 opObj11.addParameter(name='showprofile', value='1', format='int')
304 opObj11.addParameter(name='save', value=figpath, format='str')
305 opObj11.addParameter(name='save_period', value=10, format='int')
306
307
308 #RTIPLOT
309 '''
310 opObj11 = procUnitConfObjB.addOperation(name='RTIPlot', optype='external')
311 opObj11.addParameter(name='id', value='2', format='int')
312 opObj11.addParameter(name='wintitle', value='RTIPlot', format='str')
313 opObj11.addParameter(name='zmin', value=dBmin, format='int')
314 opObj11.addParameter(name='zmax', value=dBmax, format='int')
315 #opObj11.addParameter(name='ymin', value=ymin, format='int')
316 #opObj11.addParameter(name='ymax', value=ymax, format='int')
317 #opObj11.addParameter(name='xmin', value=15, format='int')
318 #opObj11.addParameter(name='xmax', value=16, format='int')
319 opObj11.addParameter(name='zmin', value=dBmin, format='int')
320 opObj11.addParameter(name='zmax', value=dBmax, format='int')
321
322 opObj11.addParameter(name='showprofile', value='1', format='int')
323 opObj11.addParameter(name='save', value=figpath, format='str')
324 opObj11.addParameter(name='save_period', value=10, format='int')
325 '''
326 '''
327 # opObj11 = procUnitConfObjB.addOperation(name='CrossSpectraPlot', optype='other')
328 # opObj11.addParameter(name='id', value='3', format='int')
329 # opObj11.addParameter(name='wintitle', value='CrossSpectraPlot', format='str')
330 # opObj11.addParameter(name='ymin', value=ymin, format='int')
331 # opObj11.addParameter(name='ymax', value=ymax, format='int')
332 # opObj11.addParameter(name='phase_cmap', value='jet', format='str')
333 # opObj11.addParameter(name='zmin', value=dBmin, format='int')
334 # opObj11.addParameter(name='zmax', value=dBmax, format='int')
335 # opObj11.addParameter(name='figpath', value=figures_path, format='str')
336 # opObj11.addParameter(name='save', value=0, format='bool')
337 # opObj11.addParameter(name='pairsList', value='(0,1)', format='pairsList')
338 # #
339 # opObj11 = procUnitConfObjB.addOperation(name='CoherenceMap', optype='other')
340 # opObj11.addParameter(name='id', value='4', format='int')
341 # opObj11.addParameter(name='wintitle', value='Coherence', format='str')
342 # opObj11.addParameter(name='phase_cmap', value='jet', format='str')
343 # opObj11.addParameter(name='xmin', value=xmin, format='float')
344 # opObj11.addParameter(name='xmax', value=xmax, format='float')
345 # opObj11.addParameter(name='figpath', value=figures_path, format='str')
346 # opObj11.addParameter(name='save', value=0, format='bool')
347 # opObj11.addParameter(name='pairsList', value='(0,1)', format='pairsList')
348 #
349 '''
350 '''
351 #######################################################################
352 ############### UNIDAD DE ESCRITURA ###################################
353 #######################################################################
354 #opObj11 = procUnitConfObjB.addOperation(name='SpectraWriter', optype='other')
355 #opObj11.addParameter(name='path', value=wr_path)
356 #opObj11.addParameter(name='blocksPerFile', value='50', format='int')
357 print ("Escribiendo el archivo XML")
358 print ("Leyendo el archivo XML")
359 '''
360
361
362 controllerObj.start()
@@ -0,0 +1,378
1
2 # SOPHY PROC script
3 import os, sys, json, argparse
4 import datetime
5 import time
6
7 PATH = '/DATA_RM/DATA'
8 # PATH = '/Users/jespinoza/workspace/data/'
9 #PATH = '/home/soporte/Documents/HUANCAYO'
10 PARAM = {
11 'P': {'name': 'dataPP_POWER', 'zmin': -45, 'zmax': -25, 'colormap': 'jet', 'label': 'Power', 'wrname': 'Pow','cb_label': 'dB', 'ch':0},
12 'V': {'name': 'dataPP_DOP', 'zmin': -20, 'zmax': 20, 'colormap': 'seismic', 'label': 'Velocity', 'wrname': 'Vel', 'cb_label': 'm/s', 'ch':0},
13 'RH': {'name': 'RhoHV_R', 'zmin': 0, 'zmax': 1, 'colormap': 'jet', 'label': 'Coef.Correlacion', 'wrname':'R', 'cb_label': '*', 'ch':0},
14 'FD': {'name': 'PhiD_P', 'zmin': -180,'zmax': 180,'colormap': 'RdBu_r', 'label': 'Fase Diferencial', 'wrname':'P' , 'cb_label': 'ΒΊ', 'ch':0},
15 'ZD': {'name': 'Zdb_D', 'zmin': -20, 'zmax': 60, 'colormap': 'viridis','label': 'Reflect.Diferencial','wrname':'D' , 'cb_label': 'dBz','ch':0},
16 'Z': {'name': 'Zdb', 'zmin': -20, 'zmax': 70, 'colormap': 'gist_ncar','label': 'Reflectividad', 'wrname':'Z', 'cb_label': 'dBz','ch':1},
17 'W': {'name': 'Sigmav_W', 'zmin': 0, 'zmax':5, 'colormap': 'viridis','label': 'AnchoEspectral', 'wrname':'S', 'cb_label': 'hz', 'ch':1}
18 }
19
20 #
21 def max_index(r, sample_rate, ipp):
22
23 return int(sample_rate*ipp*1e6 * r / 60) + int(sample_rate*ipp*1e6 * 1.2 / 60)
24
25 def main(args):
26
27 experiment = args.experiment
28 fp = open(os.path.join(PATH, experiment, 'experiment.conf'))
29 conf = json.loads(fp.read())
30
31 ipp_km = conf['usrp_tx']['ipp']
32 ipp = ipp_km * 2 /300000
33 sample_rate = conf['usrp_rx']['sample_rate']
34 axis = ['0' if x=='elevation' else '1' for x in conf['pedestal']['axis']] # AZIMUTH 1 ELEVACION 0
35 speed_axis = conf['pedestal']['speed']
36 steeps = conf['pedestal']['table']
37 time_offset = args.time_offset
38 parameters = args.parameters
39 start_date = experiment.split('@')[1].split('T')[0].replace('-', '/')
40 end_date = start_date
41 start_time = experiment.split('@')[1].split('T')[1].replace('-', ':')
42 end_time = '23:59:59'
43 N = int(1/(speed_axis[0]*ipp)) # 1 GRADO DE RESOLUCION
44 path = os.path.join(PATH, experiment, 'rawdata')
45 path_ped = os.path.join(PATH, experiment, 'position')
46 path_plots = os.path.join(PATH, experiment, 'plots_ch0')
47 path_save = os.path.join(PATH, experiment, 'param')
48 RMIX = 20
49
50 from schainpy.controller import Project
51
52 project = Project()
53 project.setup(id='1', name='Sophy', description='sophy proc')
54
55 reader = project.addReadUnit(datatype='DigitalRFReader',
56 path=path,
57 startDate=start_date,
58 endDate=end_date,
59 startTime=start_time,
60 endTime=end_time,
61 delay=30,
62 channelList='0',
63 online=args.online,
64 walk=1,
65 ippKm = ipp_km,
66 getByBlock = 1,
67 nProfileBlocks = N,
68 )
69
70 if not conf['usrp_tx']['enable_2']: # One Pulse
71 voltage = project.addProcUnit(datatype='VoltageProc', inputId=reader.getId())
72
73 if conf['usrp_tx']['code_type_1']:
74 code = [c.split() for c in conf['usrp']['code_1']]
75 op = voltage.addOperation(name='Decoder', optype='other')
76 op.addParameter(name='code', value=code)
77 op.addParameter(name='nCode', value=len(code), format='int')
78 op.addParameter(name='nBaud', value=len(code[0]), format='int')
79
80 op = voltage.addOperation(name='setH0')
81 op.addParameter(name='h0', value='-1.2')
82
83 if args.range >= 0:
84 op = voltage.addOperation(name='selectHeights')
85 op.addParameter(name='minIndex', value='0', format='int')
86 op.addParameter(name='maxIndex', value=max_index(RMIX, sample_rate, ipp), format='int')
87
88 code=[[1]]
89 opObj11 = voltage.addOperation(name='Decoder', optype='other')
90 opObj11.addParameter(name='code', value=code)
91 opObj11.addParameter(name='nCode', value='1', format='int')
92 opObj11.addParameter(name='nBaud', value='1', format='int')
93
94 op = voltage2.addOperation(name='CohInt', optype='other') #Minimo integrar 2 perfiles por ser codigo complementario
95 op.addParameter(name='n', value=2*len(code), format='int')
96
97 #op = voltage.addOperation(name='PulsePair_vRF', optype='other')
98 #op.addParameter(name='n', value=int(N), format='int')
99
100 if args.range >= 0:
101 op = voltage.addOperation(name='selectHeights')
102 op.addParameter(name='minIndex', value='0', format='int')
103 op.addParameter(name='maxIndex', value=max_index(RMIX, sample_rate, ipp), format='int')
104
105
106 op = voltage.addOperation(name='PulsePair_vRF', optype='other')
107 op.addParameter(name='n', value=125, format='int')
108
109
110 proc = project.addProcUnit(datatype='ParametersProc', inputId=voltage.getId())
111 #procUnitConfObjB.addParameter(name='runNextUnit', value=True)
112
113 opObj10 = proc.addOperation(name="WeatherRadar")
114 opObj10.addParameter(name='variableList',value='Reflectividad,VelocidadRadial,AnchoEspectral')
115
116 # {"latitude": -12.0404828587, "longitude": -75.2147483647, "altitude": 3379.2147483647}
117
118 op = proc.addOperation(name='PedestalInformation')
119 op.addParameter(name='path', value=path_ped, format='str')
120 op.addParameter(name='interval', value='0.04')
121 op.addParameter(name='time_offset', value=time_offset)
122 op.addParameter(name='az_offset', value=-26.2)
123
124 for param in parameters:
125 op = proc.addOperation(name='Block360_vRF4')
126 #op.addParameter(name='axis', value=','.join(axis))
127 op.addParameter(name='attr_data', value=PARAM[param]['name'])
128 op.addParameter(name='runNextOp', value=True)
129
130 op= proc.addOperation(name='WeatherParamsPlot')
131 if args.save: op.addParameter(name='save', value=path_plots, format='str')
132 op.addParameter(name='save_period', value=-1)
133 op.addParameter(name='show', value=args.show)
134 op.addParameter(name='channels', value='0,')
135 op.addParameter(name='zmin', value=PARAM[param]['zmin'])
136 op.addParameter(name='zmax', value=PARAM[param]['zmax'])
137 op.addParameter(name='attr_data', value=PARAM[param]['name'], format='str')
138 op.addParameter(name='labels', value=[PARAM[param]['label']])
139 op.addParameter(name='save_code', value=param)
140 op.addParameter(name='cb_label', value=PARAM[param]['cb_label'])
141 op.addParameter(name='colormap', value=PARAM[param]['colormap'])
142
143 desc = {
144 'Data': {
145 PARAM[param]['name']: PARAM[param]['label'],
146 'utctime': 'time'
147 },
148 'Metadata': {
149 'heightList': 'range',
150 'data_azi': 'azimuth',
151 'data_ele': 'elevation',
152 }
153 }
154
155 if args.save:
156 opObj10 = proc.addOperation(name='HDFWriter')
157 opObj10.addParameter(name='path',value=path_save+'-{}'.format(param), format='str')
158 opObj10.addParameter(name='Reset',value=True)
159 opObj10.addParameter(name='setType',value='weather')
160 opObj10.addParameter(name='description',value='desc')
161 opObj10.addParameter(name='blocksPerFile',value='1',format='int')
162 opObj10.addParameter(name='metadataList',value='heightList,data_azi,data_ele')
163 opObj10.addParameter(name='dataList',value='{},utctime'.format(PARAM[param]['name']))
164
165 else: #Two pulses
166
167 voltage1 = project.addProcUnit(datatype='VoltageProc', inputId=reader.getId())
168
169 print("repetions",conf['usrp_tx']['repetitions_1'])
170
171 op = voltage1.addOperation(name='ProfileSelector')
172 op.addParameter(name='profileRangeList', value='0,{}'.format(conf['usrp_tx']['repetitions_1']-1))
173
174
175 #op3 = voltage1.addOperation(name='ProfileSelector', optype='other')
176 #op3.addParameter(name='profileRangeList', value='1,123')
177
178 '''
179 if conf['usrp_tx']['code_type_1'] != 'None':
180 code = [c.split() for c in conf['usrp_tx']['code_1']]
181 op = voltage1.addOperation(name='Decoder', optype='other')
182 op.addParameter(name='code', value=code)
183 op.addParameter(name='nCode', value=len(code), format='int')
184 op.addParameter(name='nBaud', value=len(code[0]), format='int')
185 '''
186
187 code=[[1]]
188
189 opObj11 = voltage1.addOperation(name='Decoder', optype='other')
190 opObj11.addParameter(name='code', value=code)
191 opObj11.addParameter(name='nCode', value='1', format='int')
192 opObj11.addParameter(name='nBaud', value='1', format='int')
193
194 op = voltage1.addOperation(name='setH0')
195 op.addParameter(name='h0', value='-1.2')
196
197 if args.range >= 0:
198 op = voltage1.addOperation(name='selectHeights')
199 op.addParameter(name='minIndex', value='0', format='int')
200 op.addParameter(name='maxIndex', value=max_index(RMIX, sample_rate, ipp), format='int')
201
202 op = voltage1.addOperation(name='CohInt', optype='other') #Minimo integrar 2 perfiles por ser codigo complementario
203 op.addParameter(name='n', value=2, format='int')
204
205 op = voltage1.addOperation(name='PulsePair_vRF', optype='other')
206 #op.addParameter(name='n', value=int(N), format='int')
207 op.addParameter(name='n', value=61, format='int')
208 #op.addParameter(name='removeDC',value=True)
209
210 '''
211 if args.range >= 0:
212 print("corto",max_index(RMIX, sample_rate, ipp))
213 op = voltage1.addOperation(name='selectHeights')
214 op.addParameter(name='minIndex', value='0', format='int')
215 op.addParameter(name='maxIndex', value=max_index(RMIX, sample_rate, ipp), format='int')
216 '''
217 proc1 = project.addProcUnit(datatype='ParametersProc', inputId=voltage1.getId())
218 proc1.addParameter(name='runNextUnit', value=True)
219
220 opObj10 = proc1.addOperation(name="WeatherRadar")
221 opObj10.addParameter(name='variableList',value='Reflectividad,VelocidadRadial,AnchoEspectral')
222 opObj10.addParameter(name='tauW',value=0.4*1e-6)
223 opObj10.addParameter(name='Pt',value=0.2)
224
225 # {"latitude": -12.0404828587, "longitude": -75.2147483647, "altitude": 3379.2147483647}
226
227 op = proc1.addOperation(name='PedestalInformation')
228 op.addParameter(name='path', value=path_ped, format='str')
229 op.addParameter(name='interval', value='0.04')
230 op.addParameter(name='time_offset', value=time_offset)
231 op.addParameter(name='az_offset', value=-26.2)
232
233 for param in parameters:
234 op = proc1.addOperation(name='Block360_vRF4')
235 op.addParameter(name='attr_data', value=PARAM[param]['name'])
236 op.addParameter(name='runNextOp', value=True)
237
238 voltage2 = project.addProcUnit(datatype='VoltageProc', inputId=reader.getId())
239
240 op = voltage2.addOperation(name='ProfileSelector')
241 op.addParameter(name='profileRangeList', value='{},{}'.format(conf['usrp_tx']['repetitions_1'], conf['usrp_tx']['repetitions_1']+conf['usrp_tx']['repetitions_2']-1))
242
243
244 if conf['usrp_tx']['code_type_2']:
245 print(conf['usrp_tx']['code_2'])
246 codes = [ c.strip() for c in conf['usrp_tx']['code_2'].split(',')]
247 code = []
248 for c in codes:
249 code.append([int(x) for x in c])
250 print(code)
251 print(code[0])
252 op = voltage2.addOperation(name='Decoder', optype='other')
253 op.addParameter(name='code', value=code)
254 op.addParameter(name='nCode', value=len(code), format='int')
255 op.addParameter(name='nBaud', value=len(code[0]), format='int')
256 import numpy
257 pwcode = numpy.sum(numpy.array(code[0])**2)
258 print("pwcode",pwcode)
259
260 op = voltage2.addOperation(name='CohInt', optype='other') #Minimo integrar 2 perfiles por ser codigo complementario
261 op.addParameter(name='n', value=len(code), format='int')
262 ncode = len(code)
263 else:
264 ncode = 1
265
266 op = voltage2.addOperation(name='setH0')
267 op.addParameter(name='h0', value='-1.2')
268
269 if args.range >= 0:
270 if args.range==0:
271 args.range= ipp_km
272 op = voltage2.addOperation(name='selectHeights')
273 op.addParameter(name='minIndex', value=max_index(RMIX, sample_rate, ipp), format='int')
274 op.addParameter(name='maxIndex', value=max_index(args.range, sample_rate, ipp), format='int')
275
276 #op = voltage2.addOperation(name='PulsePair_vRF', optype='other')
277 #op.addParameter(name='n', value=int(N)/ncode, format='int')
278 op = voltage2.addOperation(name='PulsePair_vRF', optype='other')
279 op.addParameter(name='n', value=64, format='int')
280 #op.addParameter(name='removeDC',value=True)
281
282 '''
283
284 if args.range >= 0:
285 if args.range==0:
286 args.range= ipp_km
287 op = voltage2.addOperation(name='selectHeights')
288 print("largo",max_index(RMIX, sample_rate, ipp))
289 print("largo2",max_index(args.range, sample_rate, ipp))
290
291 op.addParameter(name='minIndex', value=max_index(RMIX, sample_rate, ipp), format='int')
292 op.addParameter(name='maxIndex', value=max_index(args.range, sample_rate, ipp), format='int')
293 '''
294
295 proc2 = project.addProcUnit(datatype='ParametersProc', inputId=voltage2.getId())
296
297 opObj10 = proc2.addOperation(name="WeatherRadar")
298 opObj10.addParameter(name='variableList',value='Reflectividad,AnchoEspectral')
299 opObj10.addParameter(name='tauW',value=6.3*1e-6)
300 opObj10.addParameter(name='Pt',value=3.2)
301
302
303 # {"latitude": -12.0404828587, "longitude": -75.2147483647, "altitude": 3379.2147483647}
304
305 op = proc2.addOperation(name='PedestalInformation')
306 op.addParameter(name='path', value=path_ped, format='str')
307 op.addParameter(name='interval', value='0.04')
308 op.addParameter(name='time_offset', value=time_offset)
309 op.addParameter(name='az_offset', value=-26.2)
310
311 for param in parameters:
312 op = proc2.addOperation(name='Block360_vRF4')
313 #op.addParameter(name='axis', value=','.join(axis))
314 op.addParameter(name='attr_data', value=PARAM[param]['name'])
315 op.addParameter(name='runNextOp', value=True)
316
317 merge = project.addProcUnit(datatype='MergeProc', inputId=[proc1.getId(), proc2.getId()])
318 merge.addParameter(name='attr_data', value=PARAM[param]['name'])
319 merge.addParameter(name='mode', value='7') #RM
320
321 op= merge.addOperation(name='WeatherParamsPlot')
322 if args.save: op.addParameter(name='save', value=path_plots, format='str')
323 op.addParameter(name='save_period', value=-1)
324 op.addParameter(name='show', value=args.show)
325 op.addParameter(name='channels', value='0,')
326 op.addParameter(name='zmin', value=PARAM[param]['zmin'])
327 op.addParameter(name='zmax', value=PARAM[param]['zmax'])
328 op.addParameter(name='attr_data', value=PARAM[param]['name'], format='str')
329 op.addParameter(name='labels', value=[PARAM[param]['label']])
330 op.addParameter(name='save_code', value=param)
331 op.addParameter(name='cb_label', value=PARAM[param]['cb_label'])
332 op.addParameter(name='colormap', value=PARAM[param]['colormap'])
333
334 desc = {
335 'Data': {
336 PARAM[param]['name']: PARAM[param]['label'],
337 'utctime': 'time'
338 },
339 'Metadata': {
340 'heightList': 'range',
341 'data_azi': 'azimuth',
342 'data_ele': 'elevation',
343 }
344 }
345
346 if args.save:
347 opObj10 = merge.addOperation(name='HDFWriter')
348 opObj10.addParameter(name='path',value=path_save, format='str')
349 opObj10.addParameter(name='Reset',value=True)
350 opObj10.addParameter(name='setType',value='weather')
351 opObj10.addParameter(name='description',value='desc')
352 opObj10.addParameter(name='blocksPerFile',value='1',format='int')
353 opObj10.addParameter(name='metadataList',value='heightList,data_azi,data_ele')
354 opObj10.addParameter(name='dataList',value='{},utctime'.format(PARAM[param]['name']))
355
356 project.start()
357
358 if __name__ == '__main__':
359
360 parser = argparse.ArgumentParser(description='Script to process SOPHy data.')
361 parser.add_argument('experiment',
362 help='Experiment name')
363 parser.add_argument('--parameters', nargs='*', default=['P'],
364 help='Variables to process: P, Z, V')
365 parser.add_argument('--time_offset', default=0,
366 help='Fix time offset')
367 parser.add_argument('--range', default=0, type=float,
368 help='Max range to plot')
369 parser.add_argument('--save', action='store_true',
370 help='Create output files')
371 parser.add_argument('--show', action='store_true',
372 help='Show matplotlib plot.')
373 parser.add_argument('--online', action='store_true',
374 help='Set online mode.')
375
376 args = parser.parse_args()
377
378 main(args)
@@ -0,0 +1,376
1 # SOPHY PROC script
2 import os, sys, json, argparse
3 import datetime
4 import time
5
6 PATH = '/DATA_RM/DATA'
7 # PATH = '/Users/jespinoza/workspace/data/'
8 #PATH = '/home/soporte/Documents/HUANCAYO'
9 PARAM = {
10 'P': {'name': 'dataPP_POWER', 'zmin': -50, 'zmax': -15, 'colormap': 'jet', 'label': 'Power', 'wrname': 'Pow','cb_label': 'dB', 'ch':0},
11 'V': {'name': 'dataPP_DOP', 'zmin': -20, 'zmax': 20, 'colormap': 'seismic', 'label': 'Velocity', 'wrname': 'Vel', 'cb_label': 'm/s', 'ch':0},
12 'RH': {'name': 'RhoHV_R', 'zmin': 0, 'zmax': 1, 'colormap': 'jet', 'label': 'Coef.Correlacion', 'wrname':'R', 'cb_label': '*', 'ch':0},
13 'FD': {'name': 'PhiD_P', 'zmin': -180,'zmax': 180,'colormap': 'RdBu_r', 'label': 'Fase Diferencial', 'wrname':'P' , 'cb_label': 'ΒΊ', 'ch':0},
14 'ZD': {'name': 'Zdb_D', 'zmin': -20, 'zmax': 60, 'colormap': 'viridis','label': 'Reflect.Diferencial','wrname':'D' , 'cb_label': 'dBz','ch':0},
15 'Z': {'name': 'Zdb', 'zmin': -20, 'zmax': 70, 'colormap': 'gist_ncar','label': 'Reflectividad', 'wrname':'Z', 'cb_label': 'dBz','ch':1},
16 'W': {'name': 'Sigmav_W', 'zmin': 0, 'zmax':5, 'colormap': 'viridis','label': 'AnchoEspectral', 'wrname':'S', 'cb_label': 'hz', 'ch':1}
17 }
18
19 def max_index(r, sample_rate, ipp):
20
21 return int(sample_rate*ipp*1e6 * r / 60) + int(sample_rate*ipp*1e6 * 1.2 / 60)
22
23 def main(args):
24
25 experiment = args.experiment
26 fp = open(os.path.join(PATH, experiment, 'experiment.conf'))
27 conf = json.loads(fp.read())
28
29 ipp_km = conf['usrp_tx']['ipp']
30 ipp = ipp_km * 2 /300000
31 sample_rate = conf['usrp_rx']['sample_rate']
32 axis = ['0' if x=='elevation' else '1' for x in conf['pedestal']['axis']] # AZIMUTH 1 ELEVACION 0
33 speed_axis = conf['pedestal']['speed']
34 steeps = conf['pedestal']['table']
35 time_offset = args.time_offset
36 parameters = args.parameters
37 start_date = experiment.split('@')[1].split('T')[0].replace('-', '/')
38 end_date = start_date
39 start_time = experiment.split('@')[1].split('T')[1].replace('-', ':')
40 end_time = '23:59:59'
41 N = int(1/(speed_axis[0]*ipp)) # 1 GRADO DE RESOLUCION
42 path = os.path.join(PATH, experiment, 'rawdata')
43 path_ped = os.path.join(PATH, experiment, 'position')
44 path_plots = os.path.join(PATH, experiment, 'plots_ch1')
45 path_save = os.path.join(PATH, experiment, 'param')
46 RMIX = 2
47
48 from schainpy.controller import Project
49
50 project = Project()
51 project.setup(id='1', name='Sophy', description='sophy proc')
52
53 reader = project.addReadUnit(datatype='DigitalRFReader',
54 path=path,
55 startDate=start_date,
56 endDate=end_date,
57 startTime=start_time,
58 endTime=end_time,
59 delay=30,
60 channelList='0',
61 online=args.online,
62 walk=1,
63 ippKm = ipp_km,
64 getByBlock = 1,
65 nProfileBlocks = N,
66 )
67
68 if not conf['usrp_tx']['enable_2']: # One Pulse
69 voltage = project.addProcUnit(datatype='VoltageProc', inputId=reader.getId())
70
71 if conf['usrp_tx']['code_type_1']:
72 code = [c.split() for c in conf['usrp']['code_1']]
73 op = voltage.addOperation(name='Decoder', optype='other')
74 op.addParameter(name='code', value=code)
75 op.addParameter(name='nCode', value=len(code), format='int')
76 op.addParameter(name='nBaud', value=len(code[0]), format='int')
77
78 op = voltage.addOperation(name='setH0')
79 op.addParameter(name='h0', value='-1.2')
80
81 if args.range >= 0:
82 op = voltage.addOperation(name='selectHeights')
83 op.addParameter(name='minIndex', value='0', format='int')
84 op.addParameter(name='maxIndex', value=max_index(RMIX, sample_rate, ipp), format='int')
85
86 code=[[1]]
87 opObj11 = voltage.addOperation(name='Decoder', optype='other')
88 opObj11.addParameter(name='code', value=code)
89 opObj11.addParameter(name='nCode', value='1', format='int')
90 opObj11.addParameter(name='nBaud', value='1', format='int')
91
92 op = voltage2.addOperation(name='CohInt', optype='other') #Minimo integrar 2 perfiles por ser codigo complementario
93 op.addParameter(name='n', value=2*len(code), format='int')
94
95 #op = voltage.addOperation(name='PulsePair_vRF', optype='other')
96 #op.addParameter(name='n', value=int(N), format='int')
97
98 if args.range >= 0:
99 op = voltage.addOperation(name='selectHeights')
100 op.addParameter(name='minIndex', value='0', format='int')
101 op.addParameter(name='maxIndex', value=max_index(RMIX, sample_rate, ipp), format='int')
102
103
104 op = voltage.addOperation(name='PulsePair_vRF', optype='other')
105 op.addParameter(name='n', value=125, format='int')
106
107
108 proc = project.addProcUnit(datatype='ParametersProc', inputId=voltage.getId())
109 #procUnitConfObjB.addParameter(name='runNextUnit', value=True)
110
111 opObj10 = proc.addOperation(name="WeatherRadar")
112 opObj10.addParameter(name='variableList',value='Reflectividad,VelocidadRadial,AnchoEspectral')
113
114 # {"latitude": -12.0404828587, "longitude": -75.2147483647, "altitude": 3379.2147483647}
115
116 op = proc.addOperation(name='PedestalInformation')
117 op.addParameter(name='path', value=path_ped, format='str')
118 op.addParameter(name='interval', value='0.04')
119 op.addParameter(name='time_offset', value=time_offset)
120 op.addParameter(name='az_offset', value=-26.2)
121
122 for param in parameters:
123 op = proc.addOperation(name='Block360_vRF4')
124 #op.addParameter(name='axis', value=','.join(axis))
125 op.addParameter(name='attr_data', value=PARAM[param]['name'])
126 op.addParameter(name='runNextOp', value=True)
127
128 op= proc.addOperation(name='WeatherParamsPlot')
129 if args.save: op.addParameter(name='save', value=path_plots, format='str')
130 op.addParameter(name='save_period', value=-1)
131 op.addParameter(name='show', value=args.show)
132 op.addParameter(name='channels', value='1,')
133 op.addParameter(name='zmin', value=PARAM[param]['zmin'])
134 op.addParameter(name='zmax', value=PARAM[param]['zmax'])
135 op.addParameter(name='attr_data', value=PARAM[param]['name'], format='str')
136 op.addParameter(name='labels', value=[PARAM[param]['label']])
137 op.addParameter(name='save_code', value=param)
138 op.addParameter(name='cb_label', value=PARAM[param]['cb_label'])
139 op.addParameter(name='colormap', value=PARAM[param]['colormap'])
140
141 desc = {
142 'Data': {
143 PARAM[param]['name']: PARAM[param]['label'],
144 'utctime': 'time'
145 },
146 'Metadata': {
147 'heightList': 'range',
148 'data_azi': 'azimuth',
149 'data_ele': 'elevation',
150 }
151 }
152
153 if args.save:
154 opObj10 = proc.addOperation(name='HDFWriter')
155 opObj10.addParameter(name='path',value=path_save+'-{}'.format(param), format='str')
156 opObj10.addParameter(name='Reset',value=True)
157 opObj10.addParameter(name='setType',value='weather')
158 opObj10.addParameter(name='description',value='desc')
159 opObj10.addParameter(name='blocksPerFile',value='1',format='int')
160 opObj10.addParameter(name='metadataList',value='heightList,data_azi,data_ele')
161 opObj10.addParameter(name='dataList',value='{},utctime'.format(PARAM[param]['name']))
162
163 else: #Two pulses
164
165 voltage1 = project.addProcUnit(datatype='VoltageProc', inputId=reader.getId())
166
167 print("repetions",conf['usrp_tx']['repetitions_1'])
168
169 op = voltage1.addOperation(name='ProfileSelector')
170 op.addParameter(name='profileRangeList', value='0,{}'.format(conf['usrp_tx']['repetitions_1']-1))
171
172
173 #op3 = voltage1.addOperation(name='ProfileSelector', optype='other')
174 #op3.addParameter(name='profileRangeList', value='1,123')
175
176 '''
177 if conf['usrp_tx']['code_type_1'] != 'None':
178 code = [c.split() for c in conf['usrp_tx']['code_1']]
179 op = voltage1.addOperation(name='Decoder', optype='other')
180 op.addParameter(name='code', value=code)
181 op.addParameter(name='nCode', value=len(code), format='int')
182 op.addParameter(name='nBaud', value=len(code[0]), format='int')
183 '''
184
185 code=[[1]]
186
187 opObj11 = voltage1.addOperation(name='Decoder', optype='other')
188 opObj11.addParameter(name='code', value=code)
189 opObj11.addParameter(name='nCode', value='1', format='int')
190 opObj11.addParameter(name='nBaud', value='1', format='int')
191
192 op = voltage1.addOperation(name='setH0')
193 op.addParameter(name='h0', value='-1.2')
194
195 if args.range >= 0:
196 op = voltage1.addOperation(name='selectHeights')
197 op.addParameter(name='minIndex', value='0', format='int')
198 op.addParameter(name='maxIndex', value=max_index(RMIX, sample_rate, ipp), format='int')
199
200 op = voltage1.addOperation(name='CohInt', optype='other') #Minimo integrar 2 perfiles por ser codigo complementario
201 op.addParameter(name='n', value=2, format='int')
202
203 op = voltage1.addOperation(name='PulsePair_vRF', optype='other')
204 #op.addParameter(name='n', value=int(N), format='int')
205 op.addParameter(name='n', value=61, format='int')
206 #op.addParameter(name='removeDC',value=True)
207
208 '''
209 if args.range >= 0:
210 print("corto",max_index(RMIX, sample_rate, ipp))
211 op = voltage1.addOperation(name='selectHeights')
212 op.addParameter(name='minIndex', value='0', format='int')
213 op.addParameter(name='maxIndex', value=max_index(RMIX, sample_rate, ipp), format='int')
214 '''
215 proc1 = project.addProcUnit(datatype='ParametersProc', inputId=voltage1.getId())
216 proc1.addParameter(name='runNextUnit', value=True)
217
218 opObj10 = proc1.addOperation(name="WeatherRadar")
219 opObj10.addParameter(name='variableList',value='Reflectividad,VelocidadRadial,AnchoEspectral')
220 opObj10.addParameter(name='tauW',value=0.4*1e-6)
221 opObj10.addParameter(name='Pt',value=0.2)
222
223 # {"latitude": -12.0404828587, "longitude": -75.2147483647, "altitude": 3379.2147483647}
224
225 op = proc1.addOperation(name='PedestalInformation')
226 op.addParameter(name='path', value=path_ped, format='str')
227 op.addParameter(name='interval', value='0.04')
228 op.addParameter(name='time_offset', value=time_offset)
229 op.addParameter(name='az_offset', value=-26.2)
230
231 for param in parameters:
232 op = proc1.addOperation(name='Block360_vRF4')
233 op.addParameter(name='attr_data', value=PARAM[param]['name'])
234 op.addParameter(name='runNextOp', value=True)
235
236 voltage2 = project.addProcUnit(datatype='VoltageProc', inputId=reader.getId())
237
238 op = voltage2.addOperation(name='ProfileSelector')
239 op.addParameter(name='profileRangeList', value='{},{}'.format(conf['usrp_tx']['repetitions_1'], conf['usrp_tx']['repetitions_1']+conf['usrp_tx']['repetitions_2']-1))
240
241
242 if conf['usrp_tx']['code_type_2']:
243 print(conf['usrp_tx']['code_2'])
244 codes = [ c.strip() for c in conf['usrp_tx']['code_2'].split(',')]
245 code = []
246 for c in codes:
247 code.append([int(x) for x in c])
248 print(code)
249 print(code[0])
250 op = voltage2.addOperation(name='Decoder', optype='other')
251 op.addParameter(name='code', value=code)
252 op.addParameter(name='nCode', value=len(code), format='int')
253 op.addParameter(name='nBaud', value=len(code[0]), format='int')
254 import numpy
255 pwcode = numpy.sum(numpy.array(code[0])**2)
256 print("pwcode",pwcode)
257
258 op = voltage2.addOperation(name='CohInt', optype='other') #Minimo integrar 2 perfiles por ser codigo complementario
259 op.addParameter(name='n', value=len(code), format='int')
260 ncode = len(code)
261 else:
262 ncode = 1
263
264 op = voltage2.addOperation(name='setH0')
265 op.addParameter(name='h0', value='-1.2')
266
267 if args.range >= 0:
268 if args.range==0:
269 args.range= ipp_km
270 op = voltage2.addOperation(name='selectHeights')
271 op.addParameter(name='minIndex', value=max_index(RMIX, sample_rate, ipp), format='int')
272 op.addParameter(name='maxIndex', value=max_index(args.range, sample_rate, ipp), format='int')
273
274 #op = voltage2.addOperation(name='PulsePair_vRF', optype='other')
275 #op.addParameter(name='n', value=int(N)/ncode, format='int')
276 op = voltage2.addOperation(name='PulsePair_vRF', optype='other')
277 op.addParameter(name='n', value=64, format='int')
278 #op.addParameter(name='removeDC',value=True)
279
280 '''
281
282 if args.range >= 0:
283 if args.range==0:
284 args.range= ipp_km
285 op = voltage2.addOperation(name='selectHeights')
286 print("largo",max_index(RMIX, sample_rate, ipp))
287 print("largo2",max_index(args.range, sample_rate, ipp))
288
289 op.addParameter(name='minIndex', value=max_index(RMIX, sample_rate, ipp), format='int')
290 op.addParameter(name='maxIndex', value=max_index(args.range, sample_rate, ipp), format='int')
291 '''
292
293 proc2 = project.addProcUnit(datatype='ParametersProc', inputId=voltage2.getId())
294
295 opObj10 = proc2.addOperation(name="WeatherRadar")
296 opObj10.addParameter(name='variableList',value='Reflectividad,AnchoEspectral')
297 opObj10.addParameter(name='tauW',value=3.2*1e-6)
298 opObj10.addParameter(name='Pt',value=1.6)
299
300
301 # {"latitude": -12.0404828587, "longitude": -75.2147483647, "altitude": 3379.2147483647}
302
303 op = proc2.addOperation(name='PedestalInformation')
304 op.addParameter(name='path', value=path_ped, format='str')
305 op.addParameter(name='interval', value='0.04')
306 op.addParameter(name='time_offset', value=time_offset)
307 op.addParameter(name='az_offset', value=-26.2)
308
309 for param in parameters:
310 op = proc2.addOperation(name='Block360_vRF4')
311 #op.addParameter(name='axis', value=','.join(axis))
312 op.addParameter(name='attr_data', value=PARAM[param]['name'])
313 op.addParameter(name='runNextOp', value=True)
314
315 merge = project.addProcUnit(datatype='MergeProc', inputId=[proc1.getId(), proc2.getId()])
316 merge.addParameter(name='attr_data', value=PARAM[param]['name'])
317 merge.addParameter(name='mode', value='7') #RM
318
319 op= merge.addOperation(name='WeatherParamsPlot')
320 if args.save: op.addParameter(name='save', value=path_plots, format='str')
321 op.addParameter(name='save_period', value=-1)
322 op.addParameter(name='show', value=args.show)
323 op.addParameter(name='channels', value='1,')
324 op.addParameter(name='zmin', value=PARAM[param]['zmin'])
325 op.addParameter(name='zmax', value=PARAM[param]['zmax'])
326 op.addParameter(name='attr_data', value=PARAM[param]['name'], format='str')
327 op.addParameter(name='labels', value=[PARAM[param]['label']])
328 op.addParameter(name='save_code', value=param)
329 op.addParameter(name='cb_label', value=PARAM[param]['cb_label'])
330 op.addParameter(name='colormap', value=PARAM[param]['colormap'])
331
332 desc = {
333 'Data': {
334 PARAM[param]['name']: PARAM[param]['label'],
335 'utctime': 'time'
336 },
337 'Metadata': {
338 'heightList': 'range',
339 'data_azi': 'azimuth',
340 'data_ele': 'elevation',
341 }
342 }
343
344 if args.save:
345 opObj10 = merge.addOperation(name='HDFWriter')
346 opObj10.addParameter(name='path',value=path_save, format='str')
347 opObj10.addParameter(name='Reset',value=True)
348 opObj10.addParameter(name='setType',value='weather')
349 opObj10.addParameter(name='description',value='desc')
350 opObj10.addParameter(name='blocksPerFile',value='1',format='int')
351 opObj10.addParameter(name='metadataList',value='heightList,data_azi,data_ele')
352 opObj10.addParameter(name='dataList',value='{},utctime'.format(PARAM[param]['name']))
353
354 project.start()
355
356 if __name__ == '__main__':
357
358 parser = argparse.ArgumentParser(description='Script to process SOPHy data.')
359 parser.add_argument('experiment',
360 help='Experiment name')
361 parser.add_argument('--parameters', nargs='*', default=['P'],
362 help='Variables to process: P, Z, V')
363 parser.add_argument('--time_offset', default=0,
364 help='Fix time offset')
365 parser.add_argument('--range', default=0, type=float,
366 help='Max range to plot')
367 parser.add_argument('--save', action='store_true',
368 help='Create output files')
369 parser.add_argument('--show', action='store_true',
370 help='Show matplotlib plot.')
371 parser.add_argument('--online', action='store_true',
372 help='Set online mode.')
373
374 args = parser.parse_args()
375
376 main(args)
@@ -15,12 +15,12 import datetime
15 from collections import deque
15 from collections import deque
16 from functools import wraps
16 from functools import wraps
17 from threading import Thread
17 from threading import Thread
18 import matplotlib
18 import matplotlib,re
19
19
20 if 'BACKEND' in os.environ:
20 if 'BACKEND' in os.environ:
21 matplotlib.use(os.environ['BACKEND'])
21 matplotlib.use(os.environ['BACKEND'])
22 elif 'linux' in sys.platform:
22 elif 'linux' in sys.platform:
23 matplotlib.use("TkAgg")
23 matplotlib.use("Agg")#TkAgg
24 elif 'darwin' in sys.platform:
24 elif 'darwin' in sys.platform:
25 matplotlib.use('MacOSX')
25 matplotlib.use('MacOSX')
26 else:
26 else:
@@ -44,8 +44,11 ncmap = matplotlib.colors.LinearSegmentedColormap.from_list(
44 'jro', numpy.vstack((blu_values, jet_values)))
44 'jro', numpy.vstack((blu_values, jet_values)))
45 matplotlib.pyplot.register_cmap(cmap=ncmap)
45 matplotlib.pyplot.register_cmap(cmap=ncmap)
46
46
47 rwg=matplotlib.colors.LinearSegmentedColormap.from_list('rwg',["r", "w", "g"], N=256)
48 matplotlib.pyplot.register_cmap(cmap=rwg)
49
47 CMAPS = [plt.get_cmap(s) for s in ('jro', 'jet', 'viridis',
50 CMAPS = [plt.get_cmap(s) for s in ('jro', 'jet', 'viridis',
48 'plasma', 'inferno', 'Greys', 'seismic', 'bwr', 'coolwarm')]
51 'plasma', 'inferno', 'Greys', 'seismic', 'bwr', 'coolwarm','rwg')]
49
52
50 EARTH_RADIUS = 6.3710e3
53 EARTH_RADIUS = 6.3710e3
51
54
@@ -414,7 +417,7 class Plot(Operation):
414 for tick in self.pf_axes[n].get_yticklabels()]
417 for tick in self.pf_axes[n].get_yticklabels()]
415 if self.colorbar:
418 if self.colorbar:
416 ax.cbar = plt.colorbar(
419 ax.cbar = plt.colorbar(
417 ax.plt, ax=ax, fraction=0.05, pad=0.02, aspect=10)
420 ax.plt, ax=ax, fraction=0.05, pad=0.06, aspect=10)
418 ax.cbar.ax.tick_params(labelsize=8)
421 ax.cbar.ax.tick_params(labelsize=8)
419 ax.cbar.ax.press = None
422 ax.cbar.ax.press = None
420 if self.cb_label:
423 if self.cb_label:
@@ -445,7 +448,7 class Plot(Operation):
445 size=8)
448 size=8)
446 ax.set_ylim(0, self.ymax)
449 ax.set_ylim(0, self.ymax)
447 #ax.set_yticks(numpy.arange(0, self.ymax, 20))
450 #ax.set_yticks(numpy.arange(0, self.ymax, 20))
448 ax.yaxis.labelpad = 20
451 ax.yaxis.labelpad = 28
449
452
450 if self.firsttime:
453 if self.firsttime:
451 for n, fig in enumerate(self.figures):
454 for n, fig in enumerate(self.figures):
@@ -486,7 +489,10 class Plot(Operation):
486 figpause(0.01)
489 figpause(0.01)
487
490
488 if self.save:
491 if self.save:
489 self.save_figure(n)
492 if self.CODE=="PPI" or self.CODE=="RHI":
493 self.save_figure(n,stitle =self.titles)
494 else:
495 self.save_figure(n)
490
496
491 if self.server:
497 if self.server:
492 self.send_to_server()
498 self.send_to_server()
@@ -505,9 +511,13 class Plot(Operation):
505 metadata.update(meta)
511 metadata.update(meta)
506 self.data.update(data, timestamp, metadata)
512 self.data.update(data, timestamp, metadata)
507
513
508 def save_figure(self, n):
514 def save_figure(self, n,stitle=None):
509 '''
515 '''
510 '''
516 '''
517 if stitle is not None:
518 s_string = re.sub(r"[^A-Z0-9.]","",str(stitle))
519 new_string=s_string[:3]+"_"+"_"+s_string[4:6]+"_"+s_string[6:]
520
511 if self.oneFigure:
521 if self.oneFigure:
512 if (self.data.max_time - self.save_time) <= self.save_period:
522 if (self.data.max_time - self.save_time) <= self.save_period:
513 return
523 return
@@ -515,19 +525,32 class Plot(Operation):
515 self.save_time = self.data.max_time
525 self.save_time = self.data.max_time
516
526
517 fig = self.figures[n]
527 fig = self.figures[n]
518
528
519 if self.throttle == 0:
529 if self.throttle == 0:
520 if self.oneFigure:
530 if self.oneFigure:
521 figname = os.path.join(
531 if stitle is not None:
522 self.save,
532 figname = os.path.join(
523 self.save_code,
533 self.save,
524 '{}_{}.png'.format(
525 self.save_code,
534 self.save_code,
526 self.getDateTime(self.data.max_time).strftime(
535 '{}_{}_{}.png'.format(
527 '%Y%m%d_%H%M%S'
536 self.save_code,
528 ),
537 self.getDateTime(self.data.max_time).strftime(
538 '%Y%m%d_%H%M%S',
539 ),
540 new_string,
541 )
529 )
542 )
530 )
543 else:
544 figname = os.path.join(
545 self.save,
546 self.save_code,
547 '{}_{}.png'.format(
548 self.save_code,
549 self.getDateTime(self.data.max_time).strftime(
550 '%Y%m%d_%H%M%S'
551 ),
552 )
553 )
531 else:
554 else:
532 figname = os.path.join(
555 figname = os.path.join(
533 self.save,
556 self.save,
@@ -1826,7 +1826,7 class WeatherParamsPlot(Plot):
1826 self.len_azi =0
1826 self.len_azi =0
1827 self.buffer_ini = None
1827 self.buffer_ini = None
1828 self.buffer_ele = None
1828 self.buffer_ele = None
1829 self.plots_adjust.update({'wspace': 0.4, 'hspace':0.4, 'left': 0.08, 'right': 0.92, 'bottom': 0.01,'top':0.99})
1829 self.plots_adjust.update({'wspace': 0.4, 'hspace':0.4, 'left': 0.1, 'right': 0.9, 'bottom': 0.08})
1830 self.flag =0
1830 self.flag =0
1831 self.indicador= 0
1831 self.indicador= 0
1832 self.last_data_ele = None
1832 self.last_data_ele = None
@@ -3920,6 +3920,10 class WeatherRadar(Operation):
3920 Input:
3920 Input:
3921 Output:
3921 Output:
3922 Parameters affected:
3922 Parameters affected:
3923
3924 Conversion Watt
3925 Referencia
3926 https://www.tek.com/en/blog/calculating-rf-power-iq-samples
3923 '''
3927 '''
3924 isConfig = False
3928 isConfig = False
3925 variableList = None
3929 variableList = None
@@ -3950,6 +3954,7 class WeatherRadar(Operation):
3950 Numerator = ((4*numpy.pi)**3 * aL**2 * 16 *numpy.log(2)*(10**18))
3954 Numerator = ((4*numpy.pi)**3 * aL**2 * 16 *numpy.log(2)*(10**18))
3951 Denominator = (Pt *(10**(Gt/10.0))*(10**(Gr/10.0))*(10**(Glna/10.0))* lambda_**2 * SPEED_OF_LIGHT * tauW * numpy.pi*thetaT*thetaR)
3955 Denominator = (Pt *(10**(Gt/10.0))*(10**(Gr/10.0))*(10**(Glna/10.0))* lambda_**2 * SPEED_OF_LIGHT * tauW * numpy.pi*thetaT*thetaR)
3952 self.RadarConstant = Numerator/Denominator
3956 self.RadarConstant = Numerator/Denominator
3957 self.variableList = variableList
3953 if self.variableList== None:
3958 if self.variableList== None:
3954 self.variableList= ['Reflectividad','ReflectividadDiferencial','CoeficienteCorrelacion','FaseDiferencial','VelocidadRadial','AnchoEspectral']
3959 self.variableList= ['Reflectividad','ReflectividadDiferencial','CoeficienteCorrelacion','FaseDiferencial','VelocidadRadial','AnchoEspectral']
3955
3960
@@ -3961,7 +3966,7 class WeatherRadar(Operation):
3961 data_param = numpy.zeros((nCh,4,nHeis))
3966 data_param = numpy.zeros((nCh,4,nHeis))
3962 if type == "Voltage":
3967 if type == "Voltage":
3963 factor = 1
3968 factor = 1
3964 data_param[:,0,:] = dataOut.dataPP_POW/(factor)
3969 data_param[:,0,:] = dataOut.dataPP_POWER/(factor)
3965 data_param[:,1,:] = dataOut.dataPP_DOP
3970 data_param[:,1,:] = dataOut.dataPP_DOP
3966 data_param[:,2,:] = dataOut.dataPP_WIDTH
3971 data_param[:,2,:] = dataOut.dataPP_WIDTH
3967 data_param[:,3,:] = dataOut.dataPP_SNR
3972 data_param[:,3,:] = dataOut.dataPP_SNR
@@ -4010,18 +4015,36 class WeatherRadar(Operation):
4010 '''-----------------------------Potencia de Radar -Signal S-----------------------------'''
4015 '''-----------------------------Potencia de Radar -Signal S-----------------------------'''
4011
4016
4012 Pr = self.setMoments(dataOut,0)
4017 Pr = self.setMoments(dataOut,0)
4013
4018 '''---------------------------- Calculo de Noise y threshold para Reflectividad---------'''
4019 noise = numpy.zeros(self.nCh)
4020 for i in range(self.nCh):
4021 noise[i] = hildebrand_sekhon(Pr[i,:], 1)
4022 window = numpy.where(Pr[i,:]<1.3*noise[i])
4023 Pr[i,window]= 1e-10
4024 Pr = Pr/1000.0 # Conversion Watt
4014 '''-----------2 Reflectividad del Radar y Factor de Reflectividad------'''
4025 '''-----------2 Reflectividad del Radar y Factor de Reflectividad------'''
4015 self.n_radar = numpy.zeros((self.nCh,self.nHeis))
4026 self.n_radar = numpy.zeros((self.nCh,self.nHeis))
4016 self.Z_radar = numpy.zeros((self.nCh,self.nHeis))
4027 self.Z_radar = numpy.zeros((self.nCh,self.nHeis))
4028
4017 for R in range(self.nHeis):
4029 for R in range(self.nHeis):
4018 self.n_radar[:,R] = self.RadarConstant*Pr[:,R]* (self.Range[:,R])**2*(10**-10.246)
4030 self.n_radar[:,R] = self.RadarConstant*Pr[:,R]* (self.Range[:,R]*(10**3))**2
4019
4031
4020 self.Z_radar[:,R] = self.n_radar[:,R]* self.lambda_**4/( numpy.pi**5 * self.Km**2)
4032 self.Z_radar[:,R] = self.n_radar[:,R]* self.lambda_**4/( numpy.pi**5 * self.Km**2)
4021
4033
4022 '''----------- Factor de Reflectividad Equivalente lamda_ < 10 cm , lamda_= 3.2cm-------'''
4034 '''----------- Factor de Reflectividad Equivalente lamda_ < 10 cm , lamda_= 3.2cm-------'''
4023 Zeh = self.Z_radar
4035 Zeh = self.Z_radar
4024 dBZeh = 10*numpy.log10(Zeh)
4036 #print("---------------------------------------------------------------------")
4037 #print("RangedBz",10*numpy.log10((self.Range[0,-10:]*(10**3))**2))
4038 #print("CTE",10*numpy.log10(self.RadarConstant))
4039 #print("Pr first10",10*numpy.log10(Pr[0,:20]))
4040 #print("Pr last10",10*numpy.log10(Pr[0,-20:]))
4041 #print("LCTE",10*numpy.log10(self.lambda_**4/( numpy.pi**5 * self.Km**2)))
4042 if self.Pt<0.3:
4043 factor=-20.0
4044 else:
4045 factor=0
4046
4047 dBZeh = 10*numpy.log10(Zeh) + factor
4025 if type=='N':
4048 if type=='N':
4026 return dBZeh
4049 return dBZeh
4027 elif type=='D':
4050 elif type=='D':
General Comments 0
You need to be logged in to leave comments. Login now