##// END OF EJS Templates
Update scritps
avaldezp -
r1505:8d720d40ced2
parent child
Show More
@@ -1,350 +1,350
1 1 # SOPHY PROC script
2 2 import os, sys, json, argparse
3 3 import datetime
4 4 import time
5 5
6 6 PATH = '/DATA_RM/DATA'
7 7 #PATH = '/media/jespinoza/Elements'
8 8 #PATH = '/media/jespinoza/data/SOPHY'
9 9 PATH = '/home/soporte/Documents/HUANCAYO'
10 10 PATH = '/home/soporte/Documents/EVENTO/'
11 11 #HYO_PM@2022-05-31T12-00-17
12 12
13 13 PARAM = {
14 14 'S': {'name': 'dataPP_POWER', 'zmin': -45, 'zmax': -15, 'colormap': 'jet', 'label': 'Power', 'wrname': 'power','cb_label': 'dBm', 'ch':0},
15 15 #'V': {'name': 'dataPP_DOP', 'zmin': -10, 'zmax': 10, 'colormap': 'sophy_v', 'label': 'Velocity', 'wrname': 'velocity', 'cb_label': 'm/s', 'ch':0},
16 16 'V': {'name': 'velRadial_V', 'zmin': -10, 'zmax': 10, 'colormap': 'sophy_v', 'label': 'Velocity', 'wrname': 'velocity', 'cb_label': 'm/s', 'ch':0},
17 17 'R': {'name': 'RhoHV_R', 'zmin': 0, 'zmax': 1, 'colormap': 'jet', 'label': 'RhoHV', 'wrname':'rhoHV', 'cb_label': '*', 'ch':0},
18 18 'P': {'name': 'PhiD_P', 'zmin': -180,'zmax': 180,'colormap': 'RdBu_r', 'label': 'PhiDP', 'wrname':'phiDP' , 'cb_label': 'ΒΊ', 'ch':0},
19 19 'D': {'name': 'Zdb_D', 'zmin': -20, 'zmax': 80, 'colormap': 'gist_ncar','label': 'ZDR','wrname':'differential_reflectivity' , 'cb_label': 'dBz','ch':0},
20 20 'Z': {'name': 'Zdb', 'zmin': -30, 'zmax': 80, 'colormap': 'sophy_r','label': 'Reflectivity', 'wrname':'reflectivity', 'cb_label': 'dBz','ch':1},
21 21 'W': {'name': 'Sigmav_W', 'zmin': -20, 'zmax': 60, 'colormap': 'sophy_w','label': 'Spectral Width', 'wrname':'spectral_width', 'cb_label': 'hz', 'ch':1}
22 22 }
23 23
24 24 def max_index(r, sample_rate, ipp):
25 25
26 26 return int(sample_rate*ipp*1e6 * r / 60) + int(sample_rate*ipp*1e6 * 1.2 / 60)
27 27
28 28 def main(args):
29 29
30 30 experiment = args.experiment
31 31 fp = open(os.path.join(PATH, experiment, 'experiment.conf'))
32 32 conf = json.loads(fp.read())
33 33
34 34 ipp_km = conf['usrp_tx']['ipp']
35 35 ipp = ipp_km * 2 /300000
36 36 sample_rate = conf['usrp_rx']['sample_rate']
37 37 axis = ['0' if x=='elevation' else '1' for x in conf['pedestal']['axis']] # AZIMUTH 1 ELEVACION 0
38 38 speed_axis = conf['pedestal']['speed']
39 39 steps = conf['pedestal']['table']
40 40 time_offset = args.time_offset
41 41 parameters = args.parameters
42 42 start_date = experiment.split('@')[1].split('T')[0].replace('-', '/')
43 43 end_date = start_date
44 44 if args.start_time:
45 45 start_time = args.start_time
46 46 else:
47 47 start_time = experiment.split('@')[1].split('T')[1].replace('-', ':')
48 48 #start_time = '16:15:00'
49 49 end_time = '23:59:59'
50 50 N = int(1/(speed_axis[0]*ipp)) # 1 GRADO DE RESOLUCION
51 51 path = os.path.join(PATH, experiment, 'rawdata')
52 52 path_ped = os.path.join(PATH, experiment, 'position')
53 path_plots = os.path.join(PATH, experiment, 'plots_R5km_M1.62km')
54 path_save = os.path.join(PATH, experiment, 'param')
53 path_plots = os.path.join(PATH, experiment, 'plotsC0_PM_R'+str(args.range)+'km')
54 path_save = os.path.join(PATH, experiment, 'paramC0_PM_R'+str(args.range)+'km_1.62km')
55 55 RMIX = 1.62
56 56
57 57 from schainpy.controller import Project
58 58
59 59 project = Project()
60 60 project.setup(id='1', name='Sophy', description='sophy proc')
61 61
62 62 reader = project.addReadUnit(datatype='DigitalRFReader',
63 63 path=path,
64 64 startDate=start_date,
65 65 endDate=end_date,
66 66 startTime=start_time,
67 67 endTime=end_time,
68 68 delay=30,
69 69 online=args.online,
70 70 walk=1,
71 71 ippKm = ipp_km,
72 72 getByBlock = 1,
73 73 nProfileBlocks = N,
74 74 )
75 75
76 76 if not conf['usrp_tx']['enable_2']: # One Pulse
77 77 voltage = project.addProcUnit(datatype='VoltageProc', inputId=reader.getId())
78 78
79 79 if conf['usrp_tx']['code_type_1'] != 'None':
80 80 codes = [ c.strip() for c in conf['usrp_tx']['code_1'].split(',')]
81 81 code = []
82 82 for c in codes:
83 83 code.append([int(x) for x in c])
84 84 op = voltage.addOperation(name='Decoder', optype='other')
85 85 op.addParameter(name='code', value=code)
86 86 op.addParameter(name='nCode', value=len(code), format='int')
87 87 op.addParameter(name='nBaud', value=len(code[0]), format='int')
88 88
89 89 op = voltage.addOperation(name='setH0')
90 90 op.addParameter(name='h0', value='-1.2')
91 91
92 92 if args.range > 0:
93 93 op = voltage.addOperation(name='selectHeights')
94 94 op.addParameter(name='minIndex', value='0', format='int')
95 95 op.addParameter(name='maxIndex', value=max_index(args.range, sample_rate, ipp), format='int')
96 96
97 97 op = voltage.addOperation(name='PulsePair_vRF', optype='other')
98 98 op.addParameter(name='n', value=int(N), format='int')
99 99
100 100 proc = project.addProcUnit(datatype='ParametersProc', inputId=voltage.getId())
101 101
102 102 opObj10 = proc.addOperation(name="WeatherRadar")
103 103 opObj10.addParameter(name='variableList',value='Reflectividad,VelocidadRadial,AnchoEspectral')
104 104
105 105 # {"latitude": -12.0404828587, "longitude": -75.2147483647, "altitude": 3379.2147483647}
106 106
107 107 op = proc.addOperation(name='PedestalInformation')
108 108 op.addParameter(name='path', value=path_ped, format='str')
109 109 op.addParameter(name='interval', value='0.04')
110 110 op.addParameter(name='time_offset', value=time_offset)
111 111 #op.addParameter(name='az_offset', value=-26.2)
112 112 op.addParameter(name='mode', value='PPI')
113 113
114 114 for param in parameters:
115 115 op = proc.addOperation(name='Block360')
116 116 op.addParameter(name='attr_data', value=PARAM[param]['name'])
117 117 op.addParameter(name='runNextOp', value=True)
118 118
119 119 op= proc.addOperation(name='WeatherParamsPlot')
120 120 if args.save: op.addParameter(name='save', value=path_plots, format='str')
121 121 op.addParameter(name='save_period', value=-1)
122 122 op.addParameter(name='show', value=args.show)
123 123 op.addParameter(name='channels', value='1,')
124 124 op.addParameter(name='zmin', value=PARAM[param]['zmin'])
125 125 op.addParameter(name='zmax', value=PARAM[param]['zmax'])
126 126 op.addParameter(name='attr_data', value=PARAM[param]['name'], format='str')
127 127 op.addParameter(name='labels', value=[PARAM[param]['label']])
128 128 op.addParameter(name='save_code', value=param)
129 129 op.addParameter(name='cb_label', value=PARAM[param]['cb_label'])
130 130 op.addParameter(name='colormap', value=PARAM[param]['colormap'])
131 131
132 132 desc = {
133 133 'Data': {
134 134 PARAM[param]['name']: PARAM[param]['wrname'],
135 135 'utctime': 'time'
136 136 },
137 137 'Metadata': {
138 138 'heightList': 'range',
139 139 'data_azi': 'azimuth',
140 140 'data_ele': 'elevation',
141 141 }
142 142 }
143 143
144 144 if args.save:
145 145 opObj10 = proc.addOperation(name='HDFWriter')
146 146 opObj10.addParameter(name='path', value=path_save, format='str')
147 147 opObj10.addParameter(name='Reset', value=True)
148 148 opObj10.addParameter(name='setType', value='weather')
149 149 opObj10.addParameter(name='description', value=json.dumps(desc))
150 150 opObj10.addParameter(name='blocksPerFile', value='1',format='int')
151 151 opObj10.addParameter(name='metadataList', value='heightList,data_azi,data_ele')
152 152 opObj10.addParameter(name='dataList', value='{},utctime'.format(PARAM[param]['name']))
153 153
154 154 else: #Two pulses
155 155
156 156 voltage1 = project.addProcUnit(datatype='VoltageProc', inputId=reader.getId())
157 157
158 158 op = voltage1.addOperation(name='ProfileSelector')
159 159 op.addParameter(name='profileRangeList', value='0,{}'.format(conf['usrp_tx']['repetitions_1']-1))
160 160
161 161 if conf['usrp_tx']['code_type_1'] != 'None':
162 162 codes = [ c.strip() for c in conf['usrp_tx']['code_1'].split(',')]
163 163 code = []
164 164 for c in codes:
165 165 code.append([int(x) for x in c])
166 166 op = voltage1.addOperation(name='Decoder', optype='other')
167 167 op.addParameter(name='code', value=code)
168 168 op.addParameter(name='nCode', value=len(code), format='int')
169 169 op.addParameter(name='nBaud', value=len(code[0]), format='int')
170 170 else:
171 171 code=[[1]]
172 172
173 173
174 174 op = voltage1.addOperation(name='CohInt', optype='other') #Minimo integrar 2 perfiles por ser codigo complementario
175 175 op.addParameter(name='n', value=2, format='int')
176 176
177 177 op = voltage1.addOperation(name='setH0')
178 178 op.addParameter(name='h0', value='-1.68')
179 179
180 180 if args.range > 0:
181 181 op = voltage1.addOperation(name='selectHeights')
182 182 op.addParameter(name='minIndex', value='0', format='int')
183 183 op.addParameter(name='maxIndex', value=max_index(RMIX, sample_rate, ipp), format='int')
184 184
185 185 op = voltage1.addOperation(name='PulsePair_vRF', optype='other')
186 186 op.addParameter(name='n', value=int(conf['usrp_tx']['repetitions_1'])/2, format='int')
187 187
188 188 proc1 = project.addProcUnit(datatype='ParametersProc', inputId=voltage1.getId())
189 189 proc1.addParameter(name='runNextUnit', value=True)
190 190
191 191 opObj10 = proc1.addOperation(name="WeatherRadar")
192 192 opObj10.addParameter(name='variableList',value='Reflectividad,VelocidadRadial,AnchoEspectral')
193 193 print("sample_rate",sample_rate)
194 194 print("tauw1",(1e-6/sample_rate)*len(code[0]))
195 195 print("Pt1",((1e-6/sample_rate)*len(code[0])/ipp)*200)
196 196 opObj10.addParameter(name='tauW',value=(1e-6/sample_rate)*len(code[0]))
197 197 opObj10.addParameter(name='Pt',value=((1e-6/sample_rate)*len(code[0])/ipp)*200)
198 198
199 199
200 200 # {"latitude": -12.0404828587, "longitude": -75.2147483647, "altitude": 3379.2147483647}
201 201
202 202 op = proc1.addOperation(name='PedestalInformation')
203 203 op.addParameter(name='path', value=path_ped, format='str')
204 204 op.addParameter(name='interval', value='0.04')
205 205 op.addParameter(name='time_offset', value=time_offset)
206 206 #op.addParameter(name='az_offset', value=-26.2)
207 207 op.addParameter(name='mode', value='PPI')
208 208
209 209 for param in parameters:
210 210 op = proc1.addOperation(name='Block360')
211 211 op.addParameter(name='attr_data', value=PARAM[param]['name'])
212 212 op.addParameter(name='runNextOp', value=True)
213 213
214 214 voltage2 = project.addProcUnit(datatype='VoltageProc', inputId=reader.getId())
215 215
216 216 op = voltage2.addOperation(name='ProfileSelector')
217 217 op.addParameter(name='profileRangeList', value='{},{}'.format(conf['usrp_tx']['repetitions_1'], conf['usrp_tx']['repetitions_1']+conf['usrp_tx']['repetitions_2']-1))
218 218
219 219
220 220 if conf['usrp_tx']['code_type_2']:
221 221 codes = [ c.strip() for c in conf['usrp_tx']['code_2'].split(',')]
222 222 code = []
223 223 for c in codes:
224 224 code.append([int(x) for x in c])
225 225 op = voltage2.addOperation(name='Decoder', optype='other')
226 226 op.addParameter(name='code', value=code)
227 227 op.addParameter(name='nCode', value=len(code), format='int')
228 228 op.addParameter(name='nBaud', value=len(code[0]), format='int')
229 229
230 230 op = voltage2.addOperation(name='CohInt', optype='other') #Minimo integrar 2 perfiles por ser codigo complementario
231 231 op.addParameter(name='n', value=len(code), format='int')
232 232 ncode = len(code)
233 233 else:
234 234 ncode = 1
235 235
236 236 op = voltage2.addOperation(name='setH0')
237 237 op.addParameter(name='h0', value='-1.68')
238 238
239 239 if args.range > 0:
240 240 op = voltage2.addOperation(name='selectHeights')
241 241 op.addParameter(name='minIndex', value=max_index(RMIX, sample_rate, ipp), format='int')
242 242 op.addParameter(name='maxIndex', value=max_index(args.range, sample_rate, ipp), format='int')
243 243
244 244 op = voltage2.addOperation(name='PulsePair_vRF', optype='other')
245 245 op.addParameter(name='n', value=int(conf['usrp_tx']['repetitions_2'])/ncode, format='int')
246 246
247 247 proc2 = project.addProcUnit(datatype='ParametersProc', inputId=voltage2.getId())
248 248
249 249 opObj10 = proc2.addOperation(name="WeatherRadar")
250 250 opObj10.addParameter(name='variableList',value='Reflectividad,VelocidadRadial,AnchoEspectral')
251 251 print("tauw2",(1e-6/sample_rate)*len(code[0]))
252 252 print("Pt2",((1e-6/sample_rate)*len(code[0])/ipp)*200)
253 253 opObj10.addParameter(name='tauW',value=(1e-6/sample_rate)*len(code[0]))
254 254 opObj10.addParameter(name='Pt',value=((1e-6/sample_rate)*len(code[0])/ipp)*200)
255 255 # {"latitude": -12.0404828587, "longitude": -75.2147483647, "altitude": 3379.2147483647}
256 256
257 257 op = proc2.addOperation(name='PedestalInformation')
258 258 op.addParameter(name='path', value=path_ped, format='str')
259 259 op.addParameter(name='interval', value='0.04')
260 260 op.addParameter(name='time_offset', value=time_offset)
261 261 #op.addParameter(name='az_offset', value=-26.2)
262 262 op.addParameter(name='mode', value='PPI')
263 263
264 264 for param in parameters:
265 265 op = proc2.addOperation(name='Block360')
266 266 #op.addParameter(name='axis', value=','.join(axis))
267 267 op.addParameter(name='attr_data', value=PARAM[param]['name'])
268 268 op.addParameter(name='runNextOp', value=True)
269 269
270 270 merge = project.addProcUnit(datatype='MergeProc', inputId=[proc1.getId(), proc2.getId()])
271 271 merge.addParameter(name='attr_data', value=PARAM[param]['name'])
272 272 merge.addParameter(name='mode', value='7') #RM
273 273
274 274 op= merge.addOperation(name='WeatherParamsPlot')
275 275 if args.save: op.addParameter(name='save', value=path_plots, format='str')
276 276 op.addParameter(name='save_period', value=-1)
277 277 op.addParameter(name='show', value=args.show)
278 278 op.addParameter(name='channels', value='0,')
279 279 op.addParameter(name='zmin', value=PARAM[param]['zmin'])
280 280 op.addParameter(name='zmax', value=PARAM[param]['zmax'])
281 281 op.addParameter(name='attr_data', value=PARAM[param]['name'], format='str')
282 282 op.addParameter(name='labels', value=[PARAM[param]['label']])
283 283 op.addParameter(name='save_code', value=param)
284 284 op.addParameter(name='cb_label', value=PARAM[param]['cb_label'])
285 285 op.addParameter(name='colormap', value=PARAM[param]['colormap'])
286 286 op.addParameter(name='bgcolor',value='black')
287 287 op.addParameter(name='snr_threshold',value=0.4)
288 288
289 289
290 290
291 291 desc = {
292 292 'Data': {
293 293 PARAM[param]['name']: {PARAM[param]['wrname']: ['H', 'V']},
294 294 'utctime': 'time'
295 295 },
296 296 'Metadata': {
297 297 'heightList': 'range',
298 298 'data_azi': 'azimuth',
299 299 'data_ele': 'elevation',
300 300 'mode_op': 'scan_type',
301 301 'h0': 'range_correction',
302 302 }
303 303 }
304 304
305 305 if args.save:
306 306 writer = merge.addOperation(name='HDFWriter')
307 307 writer.addParameter(name='path', value=path_save, format='str')
308 308 writer.addParameter(name='Reset', value=True)
309 309 writer.addParameter(name='setType', value='weather')
310 310 writer.addParameter(name='description', value=json.dumps(desc))
311 311 writer.addParameter(name='blocksPerFile', value='1',format='int')
312 312 writer.addParameter(name='metadataList', value='heightList,data_azi,data_ele,mode_op,latitude,longitude,altitude,heading,radar_name,institution,contact,h0,range_unit')
313 313 writer.addParameter(name='dataList', value='{},utctime'.format(PARAM[param]['name']))
314 314 # meta
315 315 writer.addParameter(name='latitude', value='-12.0404828587')
316 316 writer.addParameter(name='longitude', value='-75.2147483647')
317 317 writer.addParameter(name='altitude', value='3379.2147483647')
318 318 writer.addParameter(name='heading', value='0')
319 319 writer.addParameter(name='radar_name', value='SOPHy')
320 320 writer.addParameter(name='institution', value='IGP')
321 321 writer.addParameter(name='contact', value='dscipion@igp.gob.pe')
322 322 writer.addParameter(name='created_by', value='Signal Chain (https://pypi.org/project/schainpy/)')
323 323 writer.addParameter(name='range_unit', value='km')
324 324
325 325 project.start()
326 326
327 327 if __name__ == '__main__':
328 328
329 329 parser = argparse.ArgumentParser(description='Script to process SOPHy data.')
330 330 parser.add_argument('experiment',
331 331 help='Experiment name')
332 332 parser.add_argument('--parameters', nargs='*', default=['S'],
333 333 help='Variables to process: P, Z, V')
334 334 parser.add_argument('--time_offset', default=0,
335 335 help='Fix time offset')
336 336 parser.add_argument('--range', default=0, type=float,
337 337 help='Max range to plot')
338 338 parser.add_argument('--save', action='store_true',
339 339 help='Create output files')
340 340 parser.add_argument('--show', action='store_true',
341 341 help='Show matplotlib plot.')
342 342 parser.add_argument('--online', action='store_true',
343 343 help='Set online mode.')
344 344 parser.add_argument('--start_time', default='',
345 345 help='Set start time.')
346 346
347 347
348 348 args = parser.parse_args()
349 349
350 350 main(args)
@@ -1,293 +1,310
1 1
2 2 #!python
3 3 '''
4 4 '''
5 5
6 6 import os, sys
7 7 import datetime
8 8 import time,json
9 9
10 10 #path = os.path.dirname(os.getcwd())
11 11 #path = os.path.dirname(path)
12 12 #sys.path.insert(0, path)
13 13
14 14 from schainpy.controller import Project
15 15
16 16 desc = "USRP_test"
17 17 filename = "USRP_processing.xml"
18 18 controllerObj = Project()
19 19 controllerObj.setup(id = '191', name='Test_USRP', description=desc)
20 20
21 21 ############## USED TO PLOT IQ VOLTAGE, POWER AND SPECTRA #############
22 22
23 23 #######################################################################
24 24 ######PATH DE LECTURA, ESCRITURA, GRAFICOS Y ENVIO WEB#################
25 25 #######################################################################
26 26 path = '/home/soporte/Documents/EVENTO/HYO_PM@2022-05-31T12-00-17/rawdata'
27 27 figpath = '/home/soporte/Documents/EVENTO/Pictures'
28 28
29 29 PATH= '/home/soporte/Documents/EVENTO/'
30 30 experiment= 'HYO_PM@2022-05-31T12-00-17'
31 31 fp = open(os.path.join(PATH, experiment, 'experiment.conf'))
32 32 conf = json.loads(fp.read())
33 33 #######################################################################
34 34 ################# RANGO DE PLOTEO######################################
35 35 #######################################################################
36 dBmin = '-25'#'-20'
37 dBmax = '0'#'-85'
36 dBmin = '-55'#'-20'
37 dBmax = '-35'#'-85'
38 38 xmin = '0'
39 39 xmax ='24'
40 40 ymin = '0'
41 ymax = '2'
41 ymax = '15'
42 42 #######################################################################
43 43 ########################FECHA##########################################
44 44 #######################################################################
45 45 str = datetime.date.today()
46 46 today = str.strftime("%Y/%m/%d")
47 47 str2 = str - datetime.timedelta(days=1)
48 48 yesterday = str2.strftime("%Y/%m/%d")
49 49 #######################################################################
50 50 ######################## UNIDAD DE LECTURA#############################
51 51 #######################################################################
52 52 readUnitConfObj = controllerObj.addReadUnit(datatype='DigitalRFReader',
53 53 path=path,
54 54 startDate="2022/05/31",#today,
55 55 endDate="2022/05/31",#today,
56 startTime='00:00:00',# inicio libre
56 startTime='16:26:00',# inicio libre
57 57 #startTime='00:00:00',
58 58 endTime='23:59:59',
59 59 delay=0,
60 60 #set=0,
61 61 online=0,
62 62 walk=1,
63 63 ippKm = 60)
64 64
65 65 opObj11 = readUnitConfObj.addOperation(name='printInfo')
66 66 #opObj11 = readUnitConfObj.addOperation(name='printNumberOfBlock')
67 67 #######################################################################
68 68 ################ OPERACIONES DOMINIO DEL TIEMPO########################
69 69 #######################################################################
70 70 procUnitConfObjA = controllerObj.addProcUnit(datatype='VoltageProc', inputId=readUnitConfObj.getId())
71 71 #------------------------
72 72
73 73 op = procUnitConfObjA.addOperation(name='ProfileSelector')
74 74 op.addParameter(name='profileRangeList', value='{},{}'.format(conf['usrp_tx']['repetitions_1'], conf['usrp_tx']['repetitions_1']+conf['usrp_tx']['repetitions_2']-1))
75 75
76 76 if conf['usrp_tx']['code_type_2']:
77 77 codes = [ c.strip() for c in conf['usrp_tx']['code_2'].split(',')]
78 78 code = []
79 79 for c in codes:
80 80 code.append([int(x) for x in c])
81 81 op = procUnitConfObjA.addOperation(name='Decoder', optype='other')
82 82 op.addParameter(name='code', value=code)
83 83 op.addParameter(name='nCode', value=len(code), format='int')
84 84 op.addParameter(name='nBaud', value=len(code[0]), format='int')
85 85
86 86 op =procUnitConfObjA.addOperation(name='CohInt', optype='other') #Minimo integrar 2 perfiles por ser codigo complementario
87 87 op.addParameter(name='n', value=len(code), format='int')
88 88 ncode = len(code)
89 89 else:
90 90 ncode = 1
91 91
92 92 #------------------------
93 93
94 94 #op3 = procUnitConfObjA.addOperation(name='ProfileSelector', optype='other')
95 95 #op3.addParameter(name='profileRangeList', value='0,121')
96 96 #code=[[1]]
97 97 #opObj11 = procUnitConfObjA.addOperation(name='Decoder', optype='other')
98 98 #opObj11.addParameter(name='code', value=code)
99 99 #opObj11.addParameter(name='nCode', value='1', format='int')
100 100 #opObj11.addParameter(name='nBaud', value='1', format='int')
101 101
102 102 op = procUnitConfObjA.addOperation(name='setH0')
103 103 op.addParameter(name='h0', value='-1.62')
104 104
105 105 #op = procUnitConfObjA.addOperation(name='CohInt', optype='other') #Minimo integrar 2 perfiles por ser codigo complementario
106 106 #op.addParameter(name='n', value=2, format='int')
107 107
108 108
109 109 # OJO SCOPE
110 110 '''
111 111 opObj10 = procUnitConfObjA.addOperation(name='ScopePlot', optype='external')
112 112 opObj10.addParameter(name='id', value='10', format='int')
113 113 opObj10.addParameter(name='xmin', value='0', format='int')
114 114 opObj10.addParameter(name='xmax', value='10', format='int')
115 115 opObj10.addParameter(name='type', value='iq')
116 116 opObj10.addParameter(name='ymin', value='-4', format='int')
117 117 opObj10.addParameter(name='ymax', value='4', format='int')
118 118 opObj10.addParameter(name='save', value=figpath, format='str')
119 119 opObj10.addParameter(name='save_period', value=1, format='int')
120 120 '''
121 121 '''
122 122 opObj11 = procUnitConfObjA.addOperation(name='selectHeights')
123 123 opObj11.addParameter(name='minIndex', value='1', format='int')
124 124 # opObj11.addParameter(name='maxIndex', value='10000', format='int')
125 125 opObj11.addParameter(name='maxIndex', value='200', format='int')
126 126 '''
127 127
128 128 '''
129 129 opObj11 = procUnitConfObjA.addOperation(name='PulsePair', optype='other')
130 130 opObj11.addParameter(name='n', value='625', format='int')#10
131 131 opObj11.addParameter(name='removeDC', value=1, format='int')
132 132 '''
133 133
134 134 # Ploteo TEST
135 135 '''
136 136 opObj11 = procUnitConfObjA.addOperation(name='PulsepairPowerPlot', optype='other')
137 137 opObj11 = procUnitConfObjA.addOperation(name='PulsepairSignalPlot', optype='other')
138 138 opObj11 = procUnitConfObjA.addOperation(name='PulsepairVelocityPlot', optype='other')
139 139 #opObj11.addParameter(name='xmax', value=8)
140 140 opObj11 = procUnitConfObjA.addOperation(name='PulsepairSpecwidthPlot', optype='other')
141 141 '''
142 142 # OJO SCOPE
143 143 #opObj10 = procUnitConfObjA.addOperation(name='ScopePlot', optype='external')
144 144 #opObj10.addParameter(name='id', value='10', format='int')
145 145 ##opObj10.addParameter(name='xmin', value='0', format='int')
146 146 ##opObj10.addParameter(name='xmax', value='50', format='int')
147 147 #opObj10.addParameter(name='type', value='iq')
148 148 ##opObj10.addParameter(name='ymin', value='-5000', format='int')
149 149 ##opObj10.addParameter(name='ymax', value='8500', format='int')
150 150 #opObj11.addParameter(name='save', value=figpath, format='str')
151 151 #opObj11.addParameter(name='save_period', value=10, format='int')
152 152
153 153 #opObj10 = procUnitConfObjA.addOperation(name='setH0')
154 154 #opObj10.addParameter(name='h0', value='-5000', format='float')
155 155
156 156 #opObj11 = procUnitConfObjA.addOperation(name='filterByHeights')
157 157 #opObj11.addParameter(name='window', value='1', format='int')
158 158
159 159 #######################################################################
160 160 ########## OPERACIONES DOMINIO DE LA FRECUENCIA########################
161 161 #######################################################################
162 162
163 163 #procUnitConfObjB = controllerObj.addProcUnit(datatype='SpectraProc', inputId=procUnitConfObjA.getId())
164 164 #procUnitConfObjB.addParameter(name='nFFTPoints', value='64', format='int')
165 165 #procUnitConfObjB.addParameter(name='nProfiles', value='64', format='int')
166 166
167 167
168 168 procUnitConfObjB = controllerObj.addProcUnit(datatype='SpectraProc', inputId=procUnitConfObjA.getId())
169 169 procUnitConfObjB.addParameter(name='nFFTPoints', value='64', format='int')
170 170 procUnitConfObjB.addParameter(name='nProfiles', value='64', format='int')
171 171
172 172 '''
173 173 procUnitConfObjC = controllerObj.addProcUnit(datatype='SpectraHeisProc', inputId=procUnitConfObjA.getId())
174 174 #procUnitConfObjB.addParameter(name='nFFTPoints', value='64', format='int')
175 175 #procUnitConfObjB.addParameter(name='nProfiles', value='64', format='int')
176 176 opObj11 = procUnitConfObjC.addOperation(name='IncohInt4SpectraHeis', optype='other')
177 177 #opObj11.addParameter(name='timeInterval', value='4', format='int')
178 178 opObj11.addParameter(name='n', value='100', format='int')
179 179
180 180 #procUnitConfObjB.addParameter(name='pairsList', value='(0,0),(1,1),(0,1)', format='pairsList')
181 181
182 182 #opObj13 = procUnitConfObjB.addOperation(name='removeDC')
183 183 #opObj13.addParameter(name='mode', value='2', format='int')
184 184
185 185 #opObj11 = procUnitConfObjB.addOperation(name='IncohInt', optype='other')
186 186 #opObj11.addParameter(name='n', value='8', format='float')
187 187 #######################################################################
188 188 ########## PLOTEO DOMINIO DE LA FRECUENCIA#############################
189 189 #######################################################################
190 190 #----
191 191 '''
192 192 '''
193 193 opObj11 = procUnitConfObjC.addOperation(name='SpectraHeisPlot')
194 194 opObj11.addParameter(name='id', value='10', format='int')
195 195 opObj11.addParameter(name='wintitle', value='Spectra_Alturas', format='str')
196 196 #opObj11.addParameter(name='xmin', value=-100000, format='float')
197 197 #opObj11.addParameter(name='xmax', value=100000, format='float')
198 198 opObj11.addParameter(name='oneFigure', value=False,format='bool')
199 199 #opObj11.addParameter(name='zmin', value=-10, format='int')
200 200 #opObj11.addParameter(name='zmax', value=40, format='int')
201 201 opObj11.addParameter(name='ymin', value=10, format='int')
202 202 opObj11.addParameter(name='ymax', value=55, format='int')
203 203 opObj11.addParameter(name='grid', value=True, format
204 204 [Reading] 2022-05-23 12:27:32.732775: 21333 samples <> 0.010667 sec
205 205 ='bool')
206 206 #opObj11.addParameter(name='showprofile', value='1', format='int')
207 207 opObj11.addParameter(name='save', value=figpath, format='str')
208 208 #opObj11.addParameter(name='save_period', value=10, format='int')
209 209 '''
210 210 '''
211 211 opObj11 = procUnitConfObjC.addOperation(name='RTIHeisPlot')
212 212 opObj11.addParameter(name='id', value='10', format='int')
213 213 opObj11.addParameter(name='wintitle', value='RTI_Alturas', format='str')
214 214 opObj11.addParameter(name='xmin', value=11.0, format='float')
215 215 opObj11.addParameter(name='xmax', value=18.0, format='float')
216 216 opObj11.addParameter(name='zmin', value=10, format='int')
217 217 opObj11.addParameter(name='zmax', value=30, format='int')
218 218 opObj11.addParameter(name='ymin', value=5, format='int')
219 219 opObj11.addParameter(name='ymax', value=28, format='int')
220 220 opObj11.addParameter(name='showprofile', value='1', format='int')
221 221 opObj11.addParameter(name='save', value=figpath, format='str')
222 222 opObj11.addParameter(name='save_period', value=10, format='int')
223 223 '''
224 procUnitConfObjC= controllerObj.addProcUnit(datatype='ParametersProc',inputId=procUnitConfObjB.getId())
225 procUnitConfObjC.addOperation(name='SpectralMoments')
226 #opObj11 = procUnitConfObjC.addOperation(name='PowerPlot')
227
228 '''
229 opObj11 = procUnitConfObjC.addOperation(name='SpectralMomentsPlot')
230 #opObj11.addParameter(name='xmin', value=14)
231 #opObj11.addParameter(name='xmax', value=15)
232 opObj11.addParameter(name='save', value=figpath)
233 opObj11.addParameter(name='showprofile', value=1)
234 opObj11.addParameter(name='save_period', value=10)
235
236 '''
237 opObj11 = procUnitConfObjC.addOperation(name='SpectralWidthPlot')
238 opObj11.addParameter(name='showprofile', value=1)
224 239
225 #SpectraPlot
226 240
241
242 #SpectraPlot
243 '''
227 244 opObj11 = procUnitConfObjB.addOperation(name='SpectraPlot', optype='external')
228 245 opObj11.addParameter(name='id', value='1', format='int')
229 246 opObj11.addParameter(name='wintitle', value='Spectra', format='str')
230 247 #opObj11.addParameter(name='xmin', value=-0.01, format='float')
231 248 #opObj11.addParameter(name='xmax', value=0.01, format='float')
232 249 opObj11.addParameter(name='zmin', value=dBmin, format='int')
233 250 opObj11.addParameter(name='zmax', value=dBmax, format='int')
234 251 opObj11.addParameter(name='ymin', value=ymin, format='int')
235 252 opObj11.addParameter(name='ymax', value=ymax, format='int')
236 253 opObj11.addParameter(name='showprofile', value='1', format='int')
237 254 opObj11.addParameter(name='save', value=figpath, format='str')
238
255 '''
239 256 #RTIPLOT
240 257 '''
241 258 opObj11 = procUnitConfObjB.addOperation(name='RTIPlot', optype='external')
242 259 opObj11.addParameter(name='id', value='2', format='int')
243 260 opObj11.addParameter(name='wintitle', value='RTIPlot', format='str')
244 261 opObj11.addParameter(name='zmin', value=dBmin, format='int')
245 262 opObj11.addParameter(name='zmax', value=dBmax, format='int')
246 263 #opObj11.addParameter(name='ymin', value=ymin, format='int')
247 264 #opObj11.addParameter(name='ymax', value=ymax, format='int')
248 265 #opObj11.addParameter(name='xmin', value=15, format='int')
249 266 #opObj11.addParameter(name='xmax', value=16, format='int')
250 267 opObj11.addParameter(name='zmin', value=dBmin, format='int')
251 268 opObj11.addParameter(name='zmax', value=dBmax, format='int')
252 269
253 270 opObj11.addParameter(name='showprofile', value='1', format='int')
254 271 opObj11.addParameter(name='save', value=figpath, format='str')
255 272 opObj11.addParameter(name='save_period', value=10, format='int')
256 273 '''
257 274 '''
258 275 # opObj11 = procUnitConfObjB.addOperation(name='CrossSpectraPlot', optype='other')
259 276 # opObj11.addParameter(name='id', value='3', format='int')
260 277 # opObj11.addParameter(name='wintitle', value='CrossSpectraPlot', format='str')
261 278 # opObj11.addParameter(name='ymin', value=ymin, format='int')
262 279 # opObj11.addParameter(name='ymax', value=ymax, format='int')
263 280 # opObj11.addParameter(name='phase_cmap', value='jet', format='str')
264 281 # opObj11.addParameter(name='zmin', value=dBmin, format='int')
265 282 # opObj11.addParameter(name='zmax', value=dBmax, format='int')
266 283 # opObj11.addParameter(name='figpath', value=figures_path, format='str')
267 284 # opObj11.addParameter(name='save', value=0, format='bool')
268 285 # opObj11.addParameter(name='pairsList', value='(0,1)', format='pairsList')
269 286 # #
270 287 # opObj11 = procUnitConfObjB.addOperation(name='CoherenceMap', optype='other')
271 288 # opObj11.addParameter(name='id', value='4', format='int')
272 289 # opObj11.addParameter(name='wintitle', value='Coherence', format='str')
273 290 # opObj11.addParameter(name='phase_cmap', value='jet', format='str')
274 291 # opObj11.addParameter(name='xmin', value=xmin, format='float')
275 292 # opObj11.addParameter(name='xmax', value=xmax, format='float')
276 293 # opObj11.addParameter(name='figpath', value=figures_path, format='str')
277 294 # opObj11.addParameter(name='save', value=0, format='bool')
278 295 # opObj11.addParameter(name='pairsList', value='(0,1)', format='pairsList')
279 296 #
280 297 '''
281 298 '''
282 299 #######################################################################
283 300 ############### UNIDAD DE ESCRITURA ###################################
284 301 #######################################################################
285 302 #opObj11 = procUnitConfObjB.addOperation(name='SpectraWriter', optype='other')
286 303 #opObj11.addParameter(name='path', value=wr_path)
287 304 #opObj11.addParameter(name='blocksPerFile', value='50', format='int')
288 305 print ("Escribiendo el archivo XML")
289 306 print ("Leyendo el archivo XML")
290 307 '''
291 308
292 309
293 310 controllerObj.start()
@@ -1,194 +1,196
1 1 # SOPHY PROC script
2 2 import os, sys, json, argparse
3 3 import datetime
4 4 import time
5 5
6 6 PATH = '/DATA_RM/DATA'
7 7 # PATH = '/Users/jespinoza/workspace/data/'
8 8 #PATH = '/home/roberto/DATA/data_WR_RHI/RHI'
9 9 PATH = '/home/soporte/Downloads/data_WR_RHI'
10 10 PATH = '/home/soporte/Documents/EVENTO/'
11 11
12 12
13 13 PARAM = {
14 14 'S': {'name': 'dataPP_POWER', 'zmin': -45, 'zmax': -15, 'colormap': 'jet', 'label': 'Power', 'wrname': 'power','cb_label': 'dBm', 'ch':0},
15 15 #'V': {'name': 'dataPP_DOP', 'zmin': -10, 'zmax': 10, 'colormap': 'sophy_v', 'label': 'Velocity', 'wrname': 'velocity', 'cb_label': 'm/s', 'ch':0},
16 16 'V': {'name': 'velRadial_V', 'zmin': -10, 'zmax': 10, 'colormap': 'sophy_v', 'label': 'Velocity', 'wrname': 'velocity', 'cb_label': 'm/s', 'ch':0},
17 17 'R': {'name': 'RhoHV_R', 'zmin': 0, 'zmax': 1, 'colormap': 'jet', 'label': 'RhoHV', 'wrname':'rhoHV', 'cb_label': '*', 'ch':0},
18 18 'P': {'name': 'PhiD_P', 'zmin': -180,'zmax': 180,'colormap': 'RdBu_r', 'label': 'PhiDP', 'wrname':'phiDP' , 'cb_label': 'ΒΊ', 'ch':0},
19 19 'D': {'name': 'Zdb_D', 'zmin': -20, 'zmax': 80, 'colormap': 'gist_ncar','label': 'ZDR','wrname':'differential_reflectivity' , 'cb_label': 'dBz','ch':0},
20 20 'Z': {'name': 'Zdb', 'zmin': -30, 'zmax': 80, 'colormap': 'sophy_r','label': 'Reflectivity', 'wrname':'reflectivity', 'cb_label': 'dBz','ch':1},
21 21 'W': {'name': 'Sigmav_W', 'zmin': 0, 'zmax': 12, 'colormap': 'sophy_w','label': 'Spectral Width', 'wrname':'spectral_width', 'cb_label': 'hz', 'ch':1}
22 22 }
23 23
24 24 def max_index(r, sample_rate, ipp):
25 25
26 26 return int(sample_rate*ipp*1e6 * r / 60) + int(sample_rate*ipp*1e6 * 1.2 / 60)
27 27
28 28 def main(args):
29 29
30 30 experiment = args.experiment
31 31 fp = open(os.path.join(PATH, experiment, 'experiment.conf'))
32 32 conf = json.loads(fp.read())
33 33
34 34 ipp_km = conf['usrp_tx']['ipp']
35 35 ipp = ipp_km * 2 /300000
36 36 sample_rate = conf['usrp_rx']['sample_rate']
37 37 axis = ['0' if x=='elevation' else '1' for x in conf['pedestal']['axis']] # AZIMUTH 1 ELEVACION 0
38 38 speed_axis = conf['pedestal']['speed']
39 39 steps = conf['pedestal']['table']
40 40 time_offset = args.time_offset
41 41 parameters = args.parameters
42 42 start_date = experiment.split('@')[1].split('T')[0].replace('-', '/')
43 43 end_date = start_date
44 44 if args.start_time:
45 45 start_time = args.start_time
46 46 else:
47 47 start_time = experiment.split('@')[1].split('T')[1].replace('-', ':')
48 48 #start_time = '16:15:00'
49 49 end_time = '23:59:59'
50 50 N = int(1/(speed_axis[0]*ipp)) # 1 GRADO DE RESOLUCION
51 51 path = os.path.join(PATH, experiment, 'rawdata')
52 52 path_ped = os.path.join(PATH, experiment, 'position')
53 path_plots = os.path.join(PATH, experiment, 'plotsC0_PL_R'+str(args.range)+'km')
54 path_save = os.path.join(PATH, experiment, 'paramC0_PL_R'+str(args.range)+'km')
53 path_plots = os.path.join(PATH, experiment, 'plotsC0_PL_R'+str(args.range)+'km_removeDC')
54 path_save = os.path.join(PATH, experiment, 'paramC0_PL_R'+str(args.range)+'km_removeDC')
55 55 RMIX = 1.62
56 56
57 57 from schainpy.controller import Project
58 58
59 59 project = Project()
60 60 project.setup(id='1', name='Sophy', description='sophy proc')
61 61
62 62 reader = project.addReadUnit(datatype='DigitalRFReader',
63 63 path=path,
64 64 startDate=start_date,
65 65 endDate=end_date,
66 66 startTime=start_time,
67 67 endTime=end_time,
68 68 delay=30,
69 69 online=args.online,
70 70 walk=1,
71 71 ippKm = ipp_km,
72 72 getByBlock = 1,
73 73 nProfileBlocks = N,
74 74 )
75 75 voltage = project.addProcUnit(datatype='VoltageProc', inputId=reader.getId())
76 76
77 77 op = voltage.addOperation(name='ProfileSelector')
78 78 op.addParameter(name='profileRangeList', value='{},{}'.format(conf['usrp_tx']['repetitions_1'], conf['usrp_tx']['repetitions_1']+conf['usrp_tx']['repetitions_2']-1))
79 79
80 80
81 81
82 82
83 83 if conf['usrp_tx']['code_type_2']:
84 84 codes = [ c.strip() for c in conf['usrp_tx']['code_2'].split(',')]
85 85 code = []
86 86 for c in codes:
87 87 code.append([int(x) for x in c])
88 88 op = voltage.addOperation(name='Decoder', optype='other')
89 89 op.addParameter(name='code', value=code)
90 90 op.addParameter(name='nCode', value=len(code), format='int')
91 91 op.addParameter(name='nBaud', value=len(code[0]), format='int')
92 92
93 93 op = voltage.addOperation(name='CohInt', optype='other') #Minimo integrar 2 perfiles por ser codigo complementario
94 94 op.addParameter(name='n', value=len(code), format='int')
95 95 ncode = len(code)
96 96 else:
97 97 ncode = 1
98 98
99 99 op = voltage.addOperation(name='setH0')
100 100 op.addParameter(name='h0', value='-1.68')
101 101
102 102 if args.range > 0:
103 103 op = voltage.addOperation(name='selectHeights')
104 104 op.addParameter(name='minIndex', value='0', format='int')
105 105 op.addParameter(name='maxIndex', value=max_index(args.range, sample_rate, ipp), format='int')
106 106
107 107 op = voltage.addOperation(name='PulsePair_vRF', optype='other')
108 108 op.addParameter(name='n', value=int(conf['usrp_tx']['repetitions_1'])/2, format='int')
109 op.addParameter(name='removeDC', value=1, format='int')
110
109 111
110 112 proc = project.addProcUnit(datatype='ParametersProc', inputId=voltage.getId())
111 113
112 114 opObj10 = proc.addOperation(name="WeatherRadar")
113 115 opObj10.addParameter(name='variableList',value='Reflectividad,VelocidadRadial,AnchoEspectral')
114 116 opObj10.addParameter(name='tauW',value=(1e-6/sample_rate)*len(code[0]))
115 117 opObj10.addParameter(name='Pt',value=((1e-6/sample_rate)*len(code[0])/ipp)*200)
116 118
117 119 # {"latitude": -12.0404828587, "longitude": -75.2147483647, "altitude": 3379.2147483647}
118 120
119 121 op = proc.addOperation(name='PedestalInformation')
120 122 op.addParameter(name='path', value=path_ped, format='str')
121 123 op.addParameter(name='interval', value='0.04')
122 124 op.addParameter(name='time_offset', value=time_offset)
123 125 #op.addParameter(name='az_offset', value=-26.2)
124 126 op.addParameter(name='mode', value='PPI')
125 127
126 128 for param in parameters:
127 129 op = proc.addOperation(name='Block360')
128 130 op.addParameter(name='attr_data', value=PARAM[param]['name'])
129 131 op.addParameter(name='runNextOp', value=True)
130 132
131 133 op= proc.addOperation(name='WeatherParamsPlot')
132 134 if args.save: op.addParameter(name='save', value=path_plots, format='str')
133 135 op.addParameter(name='save_period', value=-1)
134 136 op.addParameter(name='show', value=args.show)
135 137 op.addParameter(name='channels', value='0,')
136 138 op.addParameter(name='zmin', value=PARAM[param]['zmin'])
137 139 op.addParameter(name='zmax', value=PARAM[param]['zmax'])
138 140 op.addParameter(name='attr_data', value=PARAM[param]['name'], format='str')
139 141 op.addParameter(name='labels', value=[PARAM[param]['label']])
140 142 op.addParameter(name='save_code', value=param)
141 143 op.addParameter(name='cb_label', value=PARAM[param]['cb_label'])
142 144 op.addParameter(name='colormap', value=PARAM[param]['colormap'])
143 145 op.addParameter(name='bgcolor',value='black')
144 146 op.addParameter(name='snr_threshold',value=0.4)
145 147
146 148 desc = {
147 149 'Data': {
148 150 PARAM[param]['name']: PARAM[param]['wrname'],
149 151 'utctime': 'time'
150 152 },
151 153 'Metadata': {
152 154 'heightList': 'range',
153 155 'data_azi': 'azimuth',
154 156 'data_ele': 'elevation',
155 157 }
156 158 }
157 159
158 160 if args.save:
159 161 opObj10 = proc.addOperation(name='HDFWriter')
160 162 opObj10.addParameter(name='path', value=path_save, format='str')
161 163 opObj10.addParameter(name='Reset', value=True)
162 164 opObj10.addParameter(name='setType', value='weather')
163 165 opObj10.addParameter(name=' description', value=json.dumps(desc))
164 166 opObj10.addParameter(name='blocksPerFile', value='1',format='int')
165 167 opObj10.addParameter(name='metadataList', value='heightList,data_azi,data_ele')
166 168 opObj10.addParameter(name='dataList', value='{},utctime'.format(PARAM[param]['name']))
167 169 project.start()
168 170
169 171
170 172
171 173 if __name__ == '__main__':
172 174
173 175 parser = argparse.ArgumentParser(description='Script to process SOPHy data.')
174 176 parser.add_argument('experiment',
175 177 help='Experiment name')
176 178 parser.add_argument('--parameters', nargs='*', default=['S'],
177 179 help='Variables to process: P, Z, V')
178 180 parser.add_argument('--time_offset', default=0,
179 181 help='Fix time offset')
180 182 parser.add_argument('--range', default=0, type=float,
181 183 help='Max range to plot')
182 184 parser.add_argument('--save', action='store_true',
183 185 help='Create output files')
184 186 parser.add_argument('--show', action='store_true',
185 187 help='Show matplotlib plot.')
186 188 parser.add_argument('--online', action='store_true',
187 189 help='Set online mode.')
188 190 parser.add_argument('--start_time', default='',
189 191 help='Set start time.')
190 192
191 193
192 194 args = parser.parse_args()
193 195
194 196 main(args)
General Comments 0
You need to be logged in to leave comments. Login now