##// END OF EJS Templates
Test general para merge de pulsos0
avaldezp -
r1495:12343fa21ce1
parent child
Show More
@@ -1,343 +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 PATH = '/home/soporte/Documents/EVENTO/'
11 #HYO_PM@2022-05-31T12-00-17
10 12
11 13 PARAM = {
12 14 'S': {'name': 'dataPP_POWER', 'zmin': -45, 'zmax': -15, 'colormap': 'jet', 'label': 'Power', 'wrname': 'power','cb_label': 'dBm', 'ch':0},
13 'V': {'name': 'dataPP_DOP', 'zmin': -10, 'zmax': 10, 'colormap': 'RdYlGn', 'label': 'Velocity', 'wrname': 'velocity', 'cb_label': 'm/s', 'ch':0},
15 #'V': {'name': 'dataPP_DOP', 'zmin': -10, 'zmax': 10, 'colormap': 'sophy_v', 'label': 'Velocity', 'wrname': 'velocity', 'cb_label': 'm/s', 'ch':0},
16 'V': {'name': 'velRadial_V', 'zmin': -10, 'zmax': 10, 'colormap': 'sophy_v', 'label': 'Velocity', 'wrname': 'velocity', 'cb_label': 'm/s', 'ch':0},
14 17 'R': {'name': 'RhoHV_R', 'zmin': 0, 'zmax': 1, 'colormap': 'jet', 'label': 'RhoHV', 'wrname':'rhoHV', 'cb_label': '*', 'ch':0},
15 18 'P': {'name': 'PhiD_P', 'zmin': -180,'zmax': 180,'colormap': 'RdBu_r', 'label': 'PhiDP', 'wrname':'phiDP' , 'cb_label': 'ΒΊ', 'ch':0},
16 19 'D': {'name': 'Zdb_D', 'zmin': -20, 'zmax': 80, 'colormap': 'gist_ncar','label': 'ZDR','wrname':'differential_reflectivity' , 'cb_label': 'dBz','ch':0},
17 'Z': {'name': 'Zdb', 'zmin': -20, 'zmax': 60, 'colormap': 'gist_ncar','label': 'Reflectivity', 'wrname':'reflectivity', 'cb_label': 'dBz','ch':1},
18 'W': {'name': 'Sigmav_W', 'zmin': -20, 'zmax': 60, 'colormap': 'viridis','label': 'Spectral Width', 'wrname':'spectral_width', 'cb_label': 'hz', 'ch':1}
20 'Z': {'name': 'Zdb', 'zmin': -30, 'zmax': 80, 'colormap': 'sophy_r','label': 'Reflectivity', 'wrname':'reflectivity', 'cb_label': 'dBz','ch':1},
21 'W': {'name': 'Sigmav_W', 'zmin': -20, 'zmax': 60, 'colormap': 'sophy_w','label': 'Spectral Width', 'wrname':'spectral_width', 'cb_label': 'hz', 'ch':1}
19 22 }
20 23
21 24 def max_index(r, sample_rate, ipp):
22 25
23 26 return int(sample_rate*ipp*1e6 * r / 60) + int(sample_rate*ipp*1e6 * 1.2 / 60)
24 27
25 28 def main(args):
26 29
27 30 experiment = args.experiment
28 31 fp = open(os.path.join(PATH, experiment, 'experiment.conf'))
29 32 conf = json.loads(fp.read())
30 33
31 34 ipp_km = conf['usrp_tx']['ipp']
32 35 ipp = ipp_km * 2 /300000
33 36 sample_rate = conf['usrp_rx']['sample_rate']
34 37 axis = ['0' if x=='elevation' else '1' for x in conf['pedestal']['axis']] # AZIMUTH 1 ELEVACION 0
35 38 speed_axis = conf['pedestal']['speed']
36 39 steps = conf['pedestal']['table']
37 40 time_offset = args.time_offset
38 41 parameters = args.parameters
39 42 start_date = experiment.split('@')[1].split('T')[0].replace('-', '/')
40 43 end_date = start_date
41 44 if args.start_time:
42 45 start_time = args.start_time
43 46 else:
44 47 start_time = experiment.split('@')[1].split('T')[1].replace('-', ':')
45 #start_time = '13:00:00'
48 #start_time = '16:15:00'
46 49 end_time = '23:59:59'
47 50 N = int(1/(speed_axis[0]*ipp)) # 1 GRADO DE RESOLUCION
48 51 path = os.path.join(PATH, experiment, 'rawdata')
49 52 path_ped = os.path.join(PATH, experiment, 'position')
50 path_plots = os.path.join(PATH, experiment, 'plots')
53 path_plots = os.path.join(PATH, experiment, 'plots_R5km_M1.62km')
51 54 path_save = os.path.join(PATH, experiment, 'param')
52 RMIX = 1
55 RMIX = 1.62
53 56
54 57 from schainpy.controller import Project
55 58
56 59 project = Project()
57 60 project.setup(id='1', name='Sophy', description='sophy proc')
58 61
59 62 reader = project.addReadUnit(datatype='DigitalRFReader',
60 63 path=path,
61 64 startDate=start_date,
62 65 endDate=end_date,
63 start_time=start_time,
66 startTime=start_time,
64 67 endTime=end_time,
65 68 delay=30,
66 69 online=args.online,
67 70 walk=1,
68 71 ippKm = ipp_km,
69 72 getByBlock = 1,
70 73 nProfileBlocks = N,
71 74 )
72 75
73 76 if not conf['usrp_tx']['enable_2']: # One Pulse
74 77 voltage = project.addProcUnit(datatype='VoltageProc', inputId=reader.getId())
75 78
76 79 if conf['usrp_tx']['code_type_1'] != 'None':
77 80 codes = [ c.strip() for c in conf['usrp_tx']['code_1'].split(',')]
78 81 code = []
79 82 for c in codes:
80 83 code.append([int(x) for x in c])
81 84 op = voltage.addOperation(name='Decoder', optype='other')
82 85 op.addParameter(name='code', value=code)
83 86 op.addParameter(name='nCode', value=len(code), format='int')
84 87 op.addParameter(name='nBaud', value=len(code[0]), format='int')
85 88
86 89 op = voltage.addOperation(name='setH0')
87 90 op.addParameter(name='h0', value='-1.2')
88 91
89 92 if args.range > 0:
90 93 op = voltage.addOperation(name='selectHeights')
91 94 op.addParameter(name='minIndex', value='0', format='int')
92 95 op.addParameter(name='maxIndex', value=max_index(args.range, sample_rate, ipp), format='int')
93 96
94 97 op = voltage.addOperation(name='PulsePair_vRF', optype='other')
95 98 op.addParameter(name='n', value=int(N), format='int')
96 99
97 100 proc = project.addProcUnit(datatype='ParametersProc', inputId=voltage.getId())
98 101
99 102 opObj10 = proc.addOperation(name="WeatherRadar")
100 103 opObj10.addParameter(name='variableList',value='Reflectividad,VelocidadRadial,AnchoEspectral')
101 104
102 105 # {"latitude": -12.0404828587, "longitude": -75.2147483647, "altitude": 3379.2147483647}
103 106
104 107 op = proc.addOperation(name='PedestalInformation')
105 108 op.addParameter(name='path', value=path_ped, format='str')
106 109 op.addParameter(name='interval', value='0.04')
107 110 op.addParameter(name='time_offset', value=time_offset)
108 111 #op.addParameter(name='az_offset', value=-26.2)
109 112 op.addParameter(name='mode', value='PPI')
110 113
111 114 for param in parameters:
112 op = proc.addOperation(name='Block360_vRF4')
115 op = proc.addOperation(name='Block360')
113 116 op.addParameter(name='attr_data', value=PARAM[param]['name'])
114 117 op.addParameter(name='runNextOp', value=True)
115 118
116 119 op= proc.addOperation(name='WeatherParamsPlot')
117 120 if args.save: op.addParameter(name='save', value=path_plots, format='str')
118 121 op.addParameter(name='save_period', value=-1)
119 122 op.addParameter(name='show', value=args.show)
120 123 op.addParameter(name='channels', value='1,')
121 124 op.addParameter(name='zmin', value=PARAM[param]['zmin'])
122 125 op.addParameter(name='zmax', value=PARAM[param]['zmax'])
123 126 op.addParameter(name='attr_data', value=PARAM[param]['name'], format='str')
124 127 op.addParameter(name='labels', value=[PARAM[param]['label']])
125 128 op.addParameter(name='save_code', value=param)
126 129 op.addParameter(name='cb_label', value=PARAM[param]['cb_label'])
127 130 op.addParameter(name='colormap', value=PARAM[param]['colormap'])
128 131
129 132 desc = {
130 133 'Data': {
131 134 PARAM[param]['name']: PARAM[param]['wrname'],
132 135 'utctime': 'time'
133 136 },
134 137 'Metadata': {
135 138 'heightList': 'range',
136 139 'data_azi': 'azimuth',
137 140 'data_ele': 'elevation',
138 141 }
139 142 }
140 143
141 144 if args.save:
142 145 opObj10 = proc.addOperation(name='HDFWriter')
143 146 opObj10.addParameter(name='path', value=path_save, format='str')
144 147 opObj10.addParameter(name='Reset', value=True)
145 148 opObj10.addParameter(name='setType', value='weather')
146 149 opObj10.addParameter(name='description', value=json.dumps(desc))
147 150 opObj10.addParameter(name='blocksPerFile', value='1',format='int')
148 151 opObj10.addParameter(name='metadataList', value='heightList,data_azi,data_ele')
149 152 opObj10.addParameter(name='dataList', value='{},utctime'.format(PARAM[param]['name']))
150 153
151 154 else: #Two pulses
152 155
153 156 voltage1 = project.addProcUnit(datatype='VoltageProc', inputId=reader.getId())
154 157
155 158 op = voltage1.addOperation(name='ProfileSelector')
156 159 op.addParameter(name='profileRangeList', value='0,{}'.format(conf['usrp_tx']['repetitions_1']-1))
157 160
158 161 if conf['usrp_tx']['code_type_1'] != 'None':
159 162 codes = [ c.strip() for c in conf['usrp_tx']['code_1'].split(',')]
160 163 code = []
161 164 for c in codes:
162 165 code.append([int(x) for x in c])
163 166 op = voltage1.addOperation(name='Decoder', optype='other')
164 167 op.addParameter(name='code', value=code)
165 168 op.addParameter(name='nCode', value=len(code), format='int')
166 169 op.addParameter(name='nBaud', value=len(code[0]), format='int')
167 170 else:
168 171 code=[[1]]
169 172
170 173
171 174 op = voltage1.addOperation(name='CohInt', optype='other') #Minimo integrar 2 perfiles por ser codigo complementario
172 175 op.addParameter(name='n', value=2, format='int')
173 176
174 177 op = voltage1.addOperation(name='setH0')
175 op.addParameter(name='h0', value='-1.6')
178 op.addParameter(name='h0', value='-1.68')
176 179
177 180 if args.range > 0:
178 181 op = voltage1.addOperation(name='selectHeights')
179 182 op.addParameter(name='minIndex', value='0', format='int')
180 183 op.addParameter(name='maxIndex', value=max_index(RMIX, sample_rate, ipp), format='int')
181 184
182 185 op = voltage1.addOperation(name='PulsePair_vRF', optype='other')
183 186 op.addParameter(name='n', value=int(conf['usrp_tx']['repetitions_1'])/2, format='int')
184 187
185 188 proc1 = project.addProcUnit(datatype='ParametersProc', inputId=voltage1.getId())
186 189 proc1.addParameter(name='runNextUnit', value=True)
187 190
188 191 opObj10 = proc1.addOperation(name="WeatherRadar")
189 192 opObj10.addParameter(name='variableList',value='Reflectividad,VelocidadRadial,AnchoEspectral')
190 193 print("sample_rate",sample_rate)
191 194 print("tauw1",(1e-6/sample_rate)*len(code[0]))
192 195 print("Pt1",((1e-6/sample_rate)*len(code[0])/ipp)*200)
193 196 opObj10.addParameter(name='tauW',value=(1e-6/sample_rate)*len(code[0]))
194 197 opObj10.addParameter(name='Pt',value=((1e-6/sample_rate)*len(code[0])/ipp)*200)
195 198
196 199
197 200 # {"latitude": -12.0404828587, "longitude": -75.2147483647, "altitude": 3379.2147483647}
198 201
199 202 op = proc1.addOperation(name='PedestalInformation')
200 203 op.addParameter(name='path', value=path_ped, format='str')
201 204 op.addParameter(name='interval', value='0.04')
202 205 op.addParameter(name='time_offset', value=time_offset)
203 op.addParameter(name='az_offset', value=-26.2)
206 #op.addParameter(name='az_offset', value=-26.2)
204 207 op.addParameter(name='mode', value='PPI')
205 208
206 209 for param in parameters:
207 op = proc1.addOperation(name='Block360_vRF4')
210 op = proc1.addOperation(name='Block360')
208 211 op.addParameter(name='attr_data', value=PARAM[param]['name'])
209 212 op.addParameter(name='runNextOp', value=True)
210 213
211 214 voltage2 = project.addProcUnit(datatype='VoltageProc', inputId=reader.getId())
212 215
213 216 op = voltage2.addOperation(name='ProfileSelector')
214 217 op.addParameter(name='profileRangeList', value='{},{}'.format(conf['usrp_tx']['repetitions_1'], conf['usrp_tx']['repetitions_1']+conf['usrp_tx']['repetitions_2']-1))
215 218
216 219
217 220 if conf['usrp_tx']['code_type_2']:
218 221 codes = [ c.strip() for c in conf['usrp_tx']['code_2'].split(',')]
219 222 code = []
220 223 for c in codes:
221 224 code.append([int(x) for x in c])
222 225 op = voltage2.addOperation(name='Decoder', optype='other')
223 226 op.addParameter(name='code', value=code)
224 227 op.addParameter(name='nCode', value=len(code), format='int')
225 228 op.addParameter(name='nBaud', value=len(code[0]), format='int')
226 229
227 230 op = voltage2.addOperation(name='CohInt', optype='other') #Minimo integrar 2 perfiles por ser codigo complementario
228 231 op.addParameter(name='n', value=len(code), format='int')
229 232 ncode = len(code)
230 233 else:
231 234 ncode = 1
232 235
233 236 op = voltage2.addOperation(name='setH0')
234 op.addParameter(name='h0', value='-1.6')
237 op.addParameter(name='h0', value='-1.68')
235 238
236 239 if args.range > 0:
237 240 op = voltage2.addOperation(name='selectHeights')
238 241 op.addParameter(name='minIndex', value=max_index(RMIX, sample_rate, ipp), format='int')
239 242 op.addParameter(name='maxIndex', value=max_index(args.range, sample_rate, ipp), format='int')
240 243
241 244 op = voltage2.addOperation(name='PulsePair_vRF', optype='other')
242 245 op.addParameter(name='n', value=int(conf['usrp_tx']['repetitions_2'])/ncode, format='int')
243 246
244 247 proc2 = project.addProcUnit(datatype='ParametersProc', inputId=voltage2.getId())
245 248
246 249 opObj10 = proc2.addOperation(name="WeatherRadar")
247 opObj10.addParameter(name='variableList',value='Reflectividad,AnchoEspectral')
250 opObj10.addParameter(name='variableList',value='Reflectividad,VelocidadRadial,AnchoEspectral')
248 251 print("tauw2",(1e-6/sample_rate)*len(code[0]))
249 252 print("Pt2",((1e-6/sample_rate)*len(code[0])/ipp)*200)
250 253 opObj10.addParameter(name='tauW',value=(1e-6/sample_rate)*len(code[0]))
251 254 opObj10.addParameter(name='Pt',value=((1e-6/sample_rate)*len(code[0])/ipp)*200)
252 255 # {"latitude": -12.0404828587, "longitude": -75.2147483647, "altitude": 3379.2147483647}
253 256
254 257 op = proc2.addOperation(name='PedestalInformation')
255 258 op.addParameter(name='path', value=path_ped, format='str')
256 259 op.addParameter(name='interval', value='0.04')
257 260 op.addParameter(name='time_offset', value=time_offset)
258 op.addParameter(name='az_offset', value=-26.2)
261 #op.addParameter(name='az_offset', value=-26.2)
259 262 op.addParameter(name='mode', value='PPI')
260 263
261 264 for param in parameters:
262 op = proc2.addOperation(name='Block360_vRF4')
265 op = proc2.addOperation(name='Block360')
263 266 #op.addParameter(name='axis', value=','.join(axis))
264 267 op.addParameter(name='attr_data', value=PARAM[param]['name'])
265 268 op.addParameter(name='runNextOp', value=True)
266 269
267 270 merge = project.addProcUnit(datatype='MergeProc', inputId=[proc1.getId(), proc2.getId()])
268 271 merge.addParameter(name='attr_data', value=PARAM[param]['name'])
269 272 merge.addParameter(name='mode', value='7') #RM
270 273
271 274 op= merge.addOperation(name='WeatherParamsPlot')
272 275 if args.save: op.addParameter(name='save', value=path_plots, format='str')
273 276 op.addParameter(name='save_period', value=-1)
274 277 op.addParameter(name='show', value=args.show)
275 278 op.addParameter(name='channels', value='0,')
276 279 op.addParameter(name='zmin', value=PARAM[param]['zmin'])
277 280 op.addParameter(name='zmax', value=PARAM[param]['zmax'])
278 281 op.addParameter(name='attr_data', value=PARAM[param]['name'], format='str')
279 282 op.addParameter(name='labels', value=[PARAM[param]['label']])
280 283 op.addParameter(name='save_code', value=param)
281 284 op.addParameter(name='cb_label', value=PARAM[param]['cb_label'])
282 285 op.addParameter(name='colormap', value=PARAM[param]['colormap'])
286 op.addParameter(name='bgcolor',value='black')
287 op.addParameter(name='snr_threshold',value=0.4)
288
289
283 290
284 291 desc = {
285 292 'Data': {
286 293 PARAM[param]['name']: {PARAM[param]['wrname']: ['H', 'V']},
287 294 'utctime': 'time'
288 295 },
289 296 'Metadata': {
290 297 'heightList': 'range',
291 298 'data_azi': 'azimuth',
292 299 'data_ele': 'elevation',
293 300 'mode_op': 'scan_type',
294 301 'h0': 'range_correction',
295 302 }
296 303 }
297 304
298 305 if args.save:
299 306 writer = merge.addOperation(name='HDFWriter')
300 307 writer.addParameter(name='path', value=path_save, format='str')
301 308 writer.addParameter(name='Reset', value=True)
302 309 writer.addParameter(name='setType', value='weather')
303 310 writer.addParameter(name='description', value=json.dumps(desc))
304 311 writer.addParameter(name='blocksPerFile', value='1',format='int')
305 312 writer.addParameter(name='metadataList', value='heightList,data_azi,data_ele,mode_op,latitude,longitude,altitude,heading,radar_name,institution,contact,h0,range_unit')
306 313 writer.addParameter(name='dataList', value='{},utctime'.format(PARAM[param]['name']))
307 314 # meta
308 315 writer.addParameter(name='latitude', value='-12.0404828587')
309 316 writer.addParameter(name='longitude', value='-75.2147483647')
310 317 writer.addParameter(name='altitude', value='3379.2147483647')
311 318 writer.addParameter(name='heading', value='0')
312 319 writer.addParameter(name='radar_name', value='SOPHy')
313 320 writer.addParameter(name='institution', value='IGP')
314 321 writer.addParameter(name='contact', value='dscipion@igp.gob.pe')
315 322 writer.addParameter(name='created_by', value='Signal Chain (https://pypi.org/project/schainpy/)')
316 323 writer.addParameter(name='range_unit', value='km')
317 324
318 325 project.start()
319 326
320 327 if __name__ == '__main__':
321 328
322 329 parser = argparse.ArgumentParser(description='Script to process SOPHy data.')
323 330 parser.add_argument('experiment',
324 331 help='Experiment name')
325 332 parser.add_argument('--parameters', nargs='*', default=['S'],
326 333 help='Variables to process: P, Z, V')
327 334 parser.add_argument('--time_offset', default=0,
328 335 help='Fix time offset')
329 336 parser.add_argument('--range', default=0, type=float,
330 337 help='Max range to plot')
331 338 parser.add_argument('--save', action='store_true',
332 339 help='Create output files')
333 340 parser.add_argument('--show', action='store_true',
334 341 help='Show matplotlib plot.')
335 342 parser.add_argument('--online', action='store_true',
336 343 help='Set online mode.')
337 344 parser.add_argument('--start_time', default='',
338 345 help='Set start time.')
339 346
340 347
341 348 args = parser.parse_args()
342 349
343 350 main(args)
General Comments 0
You need to be logged in to leave comments. Login now