diff --git a/schainpy/scripts/sophy_proc_rev000.py b/schainpy/scripts/sophy_proc_rev000.py new file mode 100644 index 0000000..9c2e617 --- /dev/null +++ b/schainpy/scripts/sophy_proc_rev000.py @@ -0,0 +1,343 @@ +# SOPHY PROC script +import os, sys, json, argparse +import datetime +import time + +PATH = '/DATA_RM/DATA' +#PATH = '/media/jespinoza/Elements' +#PATH = '/media/jespinoza/data/SOPHY' +PATH = '/home/soporte/Documents/HUANCAYO' + +PARAM = { + 'S': {'name': 'dataPP_POWER', 'zmin': -45, 'zmax': -15, 'colormap': 'jet', 'label': 'Power', 'wrname': 'power','cb_label': 'dBm', 'ch':0}, + 'V': {'name': 'dataPP_DOP', 'zmin': -10, 'zmax': 10, 'colormap': 'RdYlGn', 'label': 'Velocity', 'wrname': 'velocity', 'cb_label': 'm/s', 'ch':0}, + 'R': {'name': 'RhoHV_R', 'zmin': 0, 'zmax': 1, 'colormap': 'jet', 'label': 'RhoHV', 'wrname':'rhoHV', 'cb_label': '*', 'ch':0}, + 'P': {'name': 'PhiD_P', 'zmin': -180,'zmax': 180,'colormap': 'RdBu_r', 'label': 'PhiDP', 'wrname':'phiDP' , 'cb_label': 'º', 'ch':0}, + 'D': {'name': 'Zdb_D', 'zmin': -20, 'zmax': 80, 'colormap': 'gist_ncar','label': 'ZDR','wrname':'differential_reflectivity' , 'cb_label': 'dBz','ch':0}, + 'Z': {'name': 'Zdb', 'zmin': -20, 'zmax': 60, 'colormap': 'gist_ncar','label': 'Reflectivity', 'wrname':'reflectivity', 'cb_label': 'dBz','ch':1}, + 'W': {'name': 'Sigmav_W', 'zmin': -20, 'zmax': 60, 'colormap': 'viridis','label': 'Spectral Width', 'wrname':'spectral_width', 'cb_label': 'hz', 'ch':1} + } + +def max_index(r, sample_rate, ipp): + + return int(sample_rate*ipp*1e6 * r / 60) + int(sample_rate*ipp*1e6 * 1.2 / 60) + +def main(args): + + experiment = args.experiment + fp = open(os.path.join(PATH, experiment, 'experiment.conf')) + conf = json.loads(fp.read()) + + ipp_km = conf['usrp_tx']['ipp'] + ipp = ipp_km * 2 /300000 + sample_rate = conf['usrp_rx']['sample_rate'] + axis = ['0' if x=='elevation' else '1' for x in conf['pedestal']['axis']] # AZIMUTH 1 ELEVACION 0 + speed_axis = conf['pedestal']['speed'] + steps = conf['pedestal']['table'] + time_offset = args.time_offset + parameters = args.parameters + start_date = experiment.split('@')[1].split('T')[0].replace('-', '/') + end_date = start_date + if args.start_time: + start_time = args.start_time + else: + start_time = experiment.split('@')[1].split('T')[1].replace('-', ':') + #start_time = '13:00:00' + end_time = '23:59:59' + N = int(1/(speed_axis[0]*ipp)) # 1 GRADO DE RESOLUCION + path = os.path.join(PATH, experiment, 'rawdata') + path_ped = os.path.join(PATH, experiment, 'position') + path_plots = os.path.join(PATH, experiment, 'plots') + path_save = os.path.join(PATH, experiment, 'param') + RMIX = 1 + + from schainpy.controller import Project + + project = Project() + project.setup(id='1', name='Sophy', description='sophy proc') + + reader = project.addReadUnit(datatype='DigitalRFReader', + path=path, + startDate=start_date, + endDate=end_date, + start_time=start_time, + endTime=end_time, + delay=30, + online=args.online, + walk=1, + ippKm = ipp_km, + getByBlock = 1, + nProfileBlocks = N, + ) + + if not conf['usrp_tx']['enable_2']: # One Pulse + voltage = project.addProcUnit(datatype='VoltageProc', inputId=reader.getId()) + + if conf['usrp_tx']['code_type_1'] != 'None': + codes = [ c.strip() for c in conf['usrp_tx']['code_1'].split(',')] + code = [] + for c in codes: + code.append([int(x) for x in c]) + op = voltage.addOperation(name='Decoder', optype='other') + op.addParameter(name='code', value=code) + op.addParameter(name='nCode', value=len(code), format='int') + op.addParameter(name='nBaud', value=len(code[0]), format='int') + + op = voltage.addOperation(name='setH0') + op.addParameter(name='h0', value='-1.2') + + if args.range > 0: + op = voltage.addOperation(name='selectHeights') + op.addParameter(name='minIndex', value='0', format='int') + op.addParameter(name='maxIndex', value=max_index(args.range, sample_rate, ipp), format='int') + + op = voltage.addOperation(name='PulsePair_vRF', optype='other') + op.addParameter(name='n', value=int(N), format='int') + + proc = project.addProcUnit(datatype='ParametersProc', inputId=voltage.getId()) + + opObj10 = proc.addOperation(name="WeatherRadar") + opObj10.addParameter(name='variableList',value='Reflectividad,VelocidadRadial,AnchoEspectral') + + # {"latitude": -12.0404828587, "longitude": -75.2147483647, "altitude": 3379.2147483647} + + op = proc.addOperation(name='PedestalInformation') + op.addParameter(name='path', value=path_ped, format='str') + op.addParameter(name='interval', value='0.04') + op.addParameter(name='time_offset', value=time_offset) + #op.addParameter(name='az_offset', value=-26.2) + op.addParameter(name='mode', value='PPI') + + for param in parameters: + op = proc.addOperation(name='Block360_vRF4') + op.addParameter(name='attr_data', value=PARAM[param]['name']) + op.addParameter(name='runNextOp', value=True) + + op= proc.addOperation(name='WeatherParamsPlot') + if args.save: op.addParameter(name='save', value=path_plots, format='str') + op.addParameter(name='save_period', value=-1) + op.addParameter(name='show', value=args.show) + op.addParameter(name='channels', value='1,') + op.addParameter(name='zmin', value=PARAM[param]['zmin']) + op.addParameter(name='zmax', value=PARAM[param]['zmax']) + op.addParameter(name='attr_data', value=PARAM[param]['name'], format='str') + op.addParameter(name='labels', value=[PARAM[param]['label']]) + op.addParameter(name='save_code', value=param) + op.addParameter(name='cb_label', value=PARAM[param]['cb_label']) + op.addParameter(name='colormap', value=PARAM[param]['colormap']) + + desc = { + 'Data': { + PARAM[param]['name']: PARAM[param]['wrname'], + 'utctime': 'time' + }, + 'Metadata': { + 'heightList': 'range', + 'data_azi': 'azimuth', + 'data_ele': 'elevation', + } + } + + if args.save: + opObj10 = proc.addOperation(name='HDFWriter') + opObj10.addParameter(name='path', value=path_save, format='str') + opObj10.addParameter(name='Reset', value=True) + opObj10.addParameter(name='setType', value='weather') + opObj10.addParameter(name='description', value=json.dumps(desc)) + opObj10.addParameter(name='blocksPerFile', value='1',format='int') + opObj10.addParameter(name='metadataList', value='heightList,data_azi,data_ele') + opObj10.addParameter(name='dataList', value='{},utctime'.format(PARAM[param]['name'])) + + else: #Two pulses + + voltage1 = project.addProcUnit(datatype='VoltageProc', inputId=reader.getId()) + + op = voltage1.addOperation(name='ProfileSelector') + op.addParameter(name='profileRangeList', value='0,{}'.format(conf['usrp_tx']['repetitions_1']-1)) + + if conf['usrp_tx']['code_type_1'] != 'None': + codes = [ c.strip() for c in conf['usrp_tx']['code_1'].split(',')] + code = [] + for c in codes: + code.append([int(x) for x in c]) + op = voltage1.addOperation(name='Decoder', optype='other') + op.addParameter(name='code', value=code) + op.addParameter(name='nCode', value=len(code), format='int') + op.addParameter(name='nBaud', value=len(code[0]), format='int') + else: + code=[[1]] + + + op = voltage1.addOperation(name='CohInt', optype='other') #Minimo integrar 2 perfiles por ser codigo complementario + op.addParameter(name='n', value=2, format='int') + + op = voltage1.addOperation(name='setH0') + op.addParameter(name='h0', value='-1.6') + + if args.range > 0: + op = voltage1.addOperation(name='selectHeights') + op.addParameter(name='minIndex', value='0', format='int') + op.addParameter(name='maxIndex', value=max_index(RMIX, sample_rate, ipp), format='int') + + op = voltage1.addOperation(name='PulsePair_vRF', optype='other') + op.addParameter(name='n', value=int(conf['usrp_tx']['repetitions_1'])/2, format='int') + + proc1 = project.addProcUnit(datatype='ParametersProc', inputId=voltage1.getId()) + proc1.addParameter(name='runNextUnit', value=True) + + opObj10 = proc1.addOperation(name="WeatherRadar") + opObj10.addParameter(name='variableList',value='Reflectividad,VelocidadRadial,AnchoEspectral') + print("sample_rate",sample_rate) + print("tauw1",(1e-6/sample_rate)*len(code[0])) + print("Pt1",((1e-6/sample_rate)*len(code[0])/ipp)*200) + opObj10.addParameter(name='tauW',value=(1e-6/sample_rate)*len(code[0])) + opObj10.addParameter(name='Pt',value=((1e-6/sample_rate)*len(code[0])/ipp)*200) + + + # {"latitude": -12.0404828587, "longitude": -75.2147483647, "altitude": 3379.2147483647} + + op = proc1.addOperation(name='PedestalInformation') + op.addParameter(name='path', value=path_ped, format='str') + op.addParameter(name='interval', value='0.04') + op.addParameter(name='time_offset', value=time_offset) + op.addParameter(name='az_offset', value=-26.2) + op.addParameter(name='mode', value='PPI') + + for param in parameters: + op = proc1.addOperation(name='Block360_vRF4') + op.addParameter(name='attr_data', value=PARAM[param]['name']) + op.addParameter(name='runNextOp', value=True) + + voltage2 = project.addProcUnit(datatype='VoltageProc', inputId=reader.getId()) + + op = voltage2.addOperation(name='ProfileSelector') + op.addParameter(name='profileRangeList', value='{},{}'.format(conf['usrp_tx']['repetitions_1'], conf['usrp_tx']['repetitions_1']+conf['usrp_tx']['repetitions_2']-1)) + + + if conf['usrp_tx']['code_type_2']: + codes = [ c.strip() for c in conf['usrp_tx']['code_2'].split(',')] + code = [] + for c in codes: + code.append([int(x) for x in c]) + op = voltage2.addOperation(name='Decoder', optype='other') + op.addParameter(name='code', value=code) + op.addParameter(name='nCode', value=len(code), format='int') + op.addParameter(name='nBaud', value=len(code[0]), format='int') + + op = voltage2.addOperation(name='CohInt', optype='other') #Minimo integrar 2 perfiles por ser codigo complementario + op.addParameter(name='n', value=len(code), format='int') + ncode = len(code) + else: + ncode = 1 + + op = voltage2.addOperation(name='setH0') + op.addParameter(name='h0', value='-1.6') + + if args.range > 0: + op = voltage2.addOperation(name='selectHeights') + op.addParameter(name='minIndex', value=max_index(RMIX, sample_rate, ipp), format='int') + op.addParameter(name='maxIndex', value=max_index(args.range, sample_rate, ipp), format='int') + + op = voltage2.addOperation(name='PulsePair_vRF', optype='other') + op.addParameter(name='n', value=int(conf['usrp_tx']['repetitions_2'])/ncode, format='int') + + proc2 = project.addProcUnit(datatype='ParametersProc', inputId=voltage2.getId()) + + opObj10 = proc2.addOperation(name="WeatherRadar") + opObj10.addParameter(name='variableList',value='Reflectividad,AnchoEspectral') + print("tauw2",(1e-6/sample_rate)*len(code[0])) + print("Pt2",((1e-6/sample_rate)*len(code[0])/ipp)*200) + opObj10.addParameter(name='tauW',value=(1e-6/sample_rate)*len(code[0])) + opObj10.addParameter(name='Pt',value=((1e-6/sample_rate)*len(code[0])/ipp)*200) + # {"latitude": -12.0404828587, "longitude": -75.2147483647, "altitude": 3379.2147483647} + + op = proc2.addOperation(name='PedestalInformation') + op.addParameter(name='path', value=path_ped, format='str') + op.addParameter(name='interval', value='0.04') + op.addParameter(name='time_offset', value=time_offset) + op.addParameter(name='az_offset', value=-26.2) + op.addParameter(name='mode', value='PPI') + + for param in parameters: + op = proc2.addOperation(name='Block360_vRF4') + #op.addParameter(name='axis', value=','.join(axis)) + op.addParameter(name='attr_data', value=PARAM[param]['name']) + op.addParameter(name='runNextOp', value=True) + + merge = project.addProcUnit(datatype='MergeProc', inputId=[proc1.getId(), proc2.getId()]) + merge.addParameter(name='attr_data', value=PARAM[param]['name']) + merge.addParameter(name='mode', value='7') #RM + + op= merge.addOperation(name='WeatherParamsPlot') + if args.save: op.addParameter(name='save', value=path_plots, format='str') + op.addParameter(name='save_period', value=-1) + op.addParameter(name='show', value=args.show) + op.addParameter(name='channels', value='0,') + op.addParameter(name='zmin', value=PARAM[param]['zmin']) + op.addParameter(name='zmax', value=PARAM[param]['zmax']) + op.addParameter(name='attr_data', value=PARAM[param]['name'], format='str') + op.addParameter(name='labels', value=[PARAM[param]['label']]) + op.addParameter(name='save_code', value=param) + op.addParameter(name='cb_label', value=PARAM[param]['cb_label']) + op.addParameter(name='colormap', value=PARAM[param]['colormap']) + + desc = { + 'Data': { + PARAM[param]['name']: {PARAM[param]['wrname']: ['H', 'V']}, + 'utctime': 'time' + }, + 'Metadata': { + 'heightList': 'range', + 'data_azi': 'azimuth', + 'data_ele': 'elevation', + 'mode_op': 'scan_type', + 'h0': 'range_correction', + } + } + + if args.save: + writer = merge.addOperation(name='HDFWriter') + writer.addParameter(name='path', value=path_save, format='str') + writer.addParameter(name='Reset', value=True) + writer.addParameter(name='setType', value='weather') + writer.addParameter(name='description', value=json.dumps(desc)) + writer.addParameter(name='blocksPerFile', value='1',format='int') + writer.addParameter(name='metadataList', value='heightList,data_azi,data_ele,mode_op,latitude,longitude,altitude,heading,radar_name,institution,contact,h0,range_unit') + writer.addParameter(name='dataList', value='{},utctime'.format(PARAM[param]['name'])) + # meta + writer.addParameter(name='latitude', value='-12.0404828587') + writer.addParameter(name='longitude', value='-75.2147483647') + writer.addParameter(name='altitude', value='3379.2147483647') + writer.addParameter(name='heading', value='0') + writer.addParameter(name='radar_name', value='SOPHy') + writer.addParameter(name='institution', value='IGP') + writer.addParameter(name='contact', value='dscipion@igp.gob.pe') + writer.addParameter(name='created_by', value='Signal Chain (https://pypi.org/project/schainpy/)') + writer.addParameter(name='range_unit', value='km') + + project.start() + +if __name__ == '__main__': + + parser = argparse.ArgumentParser(description='Script to process SOPHy data.') + parser.add_argument('experiment', + help='Experiment name') + parser.add_argument('--parameters', nargs='*', default=['S'], + help='Variables to process: P, Z, V') + parser.add_argument('--time_offset', default=0, + help='Fix time offset') + parser.add_argument('--range', default=0, type=float, + help='Max range to plot') + parser.add_argument('--save', action='store_true', + help='Create output files') + parser.add_argument('--show', action='store_true', + help='Show matplotlib plot.') + parser.add_argument('--online', action='store_true', + help='Set online mode.') + parser.add_argument('--start_time', default='', + help='Set start time.') + + + args = parser.parse_args() + + main(args) diff --git a/schainpy/scripts/sophy_proc_rev001.py b/schainpy/scripts/sophy_proc_rev001.py new file mode 100644 index 0000000..4053b3e --- /dev/null +++ b/schainpy/scripts/sophy_proc_rev001.py @@ -0,0 +1,362 @@ +#!python +''' +''' + +import os, sys +import datetime +import time + +#path = os.path.dirname(os.getcwd()) +#path = os.path.dirname(path) +#sys.path.insert(0, path) + +from schainpy.controller import Project + +desc = "USRP_test" +filename = "USRP_processing.xml" +controllerObj = Project() +controllerObj.setup(id = '191', name='Test_USRP', description=desc) + +############## USED TO PLOT IQ VOLTAGE, POWER AND SPECTRA ############# + +####################################################################### +######PATH DE LECTURA, ESCRITURA, GRAFICOS Y ENVIO WEB################# +####################################################################### +#path = '/media/data/data/vientos/57.2063km/echoes/NCO_Woodman' +#path = '/DATA_RM/TEST_INTEGRACION' +#path = '/DATA_RM/PRUEBA_USRP_RP' +#path = '/DATA_RM/PRUEBA_USRP_RP' + +path = '/DATA_RM/TEST_2M' +path = '/DATA_RM/TEST_2M_UD' +path = '/DATA_RM/2MHZ17022022' +path = '/DATA_RM/10MHZTEST/' +path = '/DATA_RM/10MHZDRONE/' + + +path= '/home/soporte/TEST_500mVPP' +path= '/home/soporte/TEST_1VPP+500mVDC' +path = '/home/soporte/TEST_500mVPP+500mVDC' +path = '/home/soporte/TEST_1.5VPP' +path = '/home/soporte/TEST_2VPP' +path= '/home/soporte/TEST_1VPP' +path = '/home/soporte/Documents/HUANCAYO/TEST_HYO_PM@2022-05-14T11-28-19/rawdata' + +#HYO_PM@2022-05-28T00-00-17 +path = '/DATA_RM/DATA/HYO_PM@2022-05-28T00-00-17/rawdata' + +#figpath = '/home/soporte/Pictures/TEST_RP_0001' +#figpath = '/home/soporte/Pictures/TEST_RP_6000' +figpath = '/home/soporte/Pictures/USRP_TEST_2M' +figpath = '/home/soporte/Pictures/USRP_TEST_2M_UD' +figpath = '/home/soporte/Pictures/10MHZDRONE' +figpath = '/home/soporte/Pictures/500mVPP' +figpath = '/home/soporte/Pictures/1VPP+500mVDC' +figpath = '/home/soporte/Pictures/TEST_500mVPP+500mVDC' +figpath = '/home/soporte/Pictures/TEST_1.5VPP' +figpath = '/home/soporte/Pictures/TEST_2VPP' +figpath = '/home/soporte/Pictures/TEST_1VPP' + + + + +#remotefolder = "/home/wmaster/graficos" +####################################################################### +################# RANGO DE PLOTEO###################################### +####################################################################### +dBmin = '-60'#'-20' +dBmax = '-5'#'-85' +xmin = '0' +xmax ='24' +ymin = '0' +ymax = '10' +####################################################################### +########################FECHA########################################## +####################################################################### +str = datetime.date.today() +today = str.strftime("%Y/%m/%d") +str2 = str - datetime.timedelta(days=1) +yesterday = str2.strftime("%Y/%m/%d") +####################################################################### +######################## UNIDAD DE LECTURA############################# +####################################################################### +readUnitConfObj = controllerObj.addReadUnit(datatype='DigitalRFReader', + path=path, + startDate="2022/05/28",#today, + endDate="2022/05/28",#today, + startTime='00:00:00',# inicio libre + #startTime='00:00:00', + endTime='23:59:59', + delay=0, + #set=0, + online=0, + walk=1, + ippKm = 60) + +opObj11 = readUnitConfObj.addOperation(name='printInfo') +#opObj11 = readUnitConfObj.addOperation(name='printNumberOfBlock') +####################################################################### +################ OPERACIONES DOMINIO DEL TIEMPO######################## +####################################################################### + +procUnitConfObjA = controllerObj.addProcUnit(datatype='VoltageProc', inputId=readUnitConfObj.getId()) + +op3 = procUnitConfObjA.addOperation(name='ProfileSelector', optype='other') +op3.addParameter(name='profileRangeList', value='1,123') + + +code=[[1]] + +opObj11 = procUnitConfObjA.addOperation(name='Decoder', optype='other') +opObj11.addParameter(name='code', value=code) +opObj11.addParameter(name='nCode', value='1', format='int') +opObj11.addParameter(name='nBaud', value='1', format='int') + + +''' +op3 = procUnitConfObjA.addOperation(name='ProfileSelector', optype='other') +op3.addParameter(name='profileRangeList', value='122,249') +code8=[[1,1,1,0,1,1,0,1],[1,1,1,0,0,0,1,0]] + +opObj11 = procUnitConfObjA.addOperation(name='Decoder', optype='other') +opObj11.addParameter(name='code', value=code8) +opObj11.addParameter(name='nCode', value='2', format='int') +opObj11.addParameter(name='nBaud', value='8', format='int') +''' +op = procUnitConfObjA.addOperation(name='CohInt', optype='other') #Minimo integrar 2 perfiles por ser codigo complementario +op.addParameter(name='n', value=2, format='int') + + +''' + +# OJO SCOPE +opObj10 = procUnitConfObjA.addOperation(name='ScopePlot', optype='external') +opObj10.addParameter(name='id', value='10', format='int') +opObj10.addParameter(name='xmin', value='0', format='int') +opObj10.addParameter(name='xmax', value='60', format='int') +opObj10.addParameter(name='type', value='iq') +#opObj10.addParameter(name='ymin', value='-0.20000', format='int') +#opObj10.addParameter(name='ymax', value='0.20000', format='int') +opObj10.addParameter(name='save', value=figpath, format='str') +opObj10.addParameter(name='save_period', value=1, format='int') +''' +''' +opObj11 = procUnitConfObjA.addOperation(name='selectHeights') +opObj11.addParameter(name='minIndex', value='1', format='int') +# opObj11.addParameter(name='maxIndex', value='10000', format='int') +opObj11.addParameter(name='maxIndex', value='200', format='int') +''' +# +# 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,'+\ +# '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' + +#opObj11 = procUnitConfObjA.addOperation(name='setRadarFrequency') +#opObj11.addParameter(name='frequency', value='49920000') + +''' +opObj11 = procUnitConfObjA.addOperation(name='PulsePair', optype='other') +opObj11.addParameter(name='n', value='625', format='int')#10 +opObj11.addParameter(name='removeDC', value=1, format='int') +''' + +# Ploteo TEST +''' +opObj11 = procUnitConfObjA.addOperation(name='PulsepairPowerPlot', optype='other') +opObj11 = procUnitConfObjA.addOperation(name='PulsepairSignalPlot', optype='other') +opObj11 = procUnitConfObjA.addOperation(name='PulsepairVelocityPlot', optype='other') +#opObj11.addParameter(name='xmax', value=8) +opObj11 = procUnitConfObjA.addOperation(name='PulsepairSpecwidthPlot', optype='other') +''' +# OJO SCOPE +#opObj10 = procUnitConfObjA.addOperation(name='ScopePlot', optype='external') +#opObj10.addParameter(name='id', value='10', format='int') +##opObj10.addParameter(name='xmin', value='0', format='int') +##opObj10.addParameter(name='xmax', value='50', format='int') +#opObj10.addParameter(name='type', value='iq') +##opObj10.addParameter(name='ymin', value='-5000', format='int') +##opObj10.addParameter(name='ymax', value='8500', format='int') +#opObj11.addParameter(name='save', value=figpath, format='str') +#opObj11.addParameter(name='save_period', value=10, format='int') + +#opObj10 = procUnitConfObjA.addOperation(name='setH0') +#opObj10.addParameter(name='h0', value='-5000', format='float') + +#opObj11 = procUnitConfObjA.addOperation(name='filterByHeights') +#opObj11.addParameter(name='window', value='1', format='int') + +#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' +#opObj11 = procUnitConfObjSousy.addOperation(name='Decoder', optype='other') +#opObj11.addParameter(name='code', value=codigo, format='floatlist') +#opObj11.addParameter(name='nCode', value='1', format='int') +#opObj11.addParameter(name='nBaud', value='28', format='int') + +#opObj11 = procUnitConfObjA.addOperation(name='CohInt', optype='other') +#opObj11.addParameter(name='n', value='100', format='int') + +####################################################################### +########## OPERACIONES ParametersProc######################## +####################################################################### +###procUnitConfObjB= controllerObj.addProcUnit(datatype='ParametersProc',inputId=procUnitConfObjA.getId()) +''' + +opObj11 = procUnitConfObjA.addOperation(name='PedestalInformation') +opObj11.addParameter(name='path_ped', value=path_ped) +opObj11.addParameter(name='path_adq', value=path_adq) +opObj11.addParameter(name='t_Interval_p', value='0.01', format='float') +opObj11.addParameter(name='n_Muestras_p', value='100', format='float') +opObj11.addParameter(name='blocksPerfile', value='100', format='int') +opObj11.addParameter(name='f_a_p', value='25', format='int') +opObj11.addParameter(name='online', value='0', format='int') + +opObj11 = procUnitConfObjA.addOperation(name='Block360') +opObj11.addParameter(name='n', value='40', format='int') + +opObj11= procUnitConfObjA.addOperation(name='WeatherPlot',optype='other') +opObj11.addParameter(name='save', value=figpath) +opObj11.addParameter(name='save_period', value=1) + +8 +''' + + +''' +opObj11 = procUnitConfObjA.addOperation(name='CohInt', optype='other') +opObj11.addParameter(name='n', value='250', format='int') +''' +####################################################################### +########## OPERACIONES DOMINIO DE LA FRECUENCIA######################## +####################################################################### +''' +procUnitConfObjB = controllerObj.addProcUnit(datatype='SpectraProc', inputId=procUnitConfObjA.getId()) +procUnitConfObjB.addParameter(name='nFFTPoints', value='64', format='int') +procUnitConfObjB.addParameter(name='nProfiles', value='64', format='int') +''' + +procUnitConfObjB = controllerObj.addProcUnit(datatype='SpectraProc', inputId=procUnitConfObjA.getId()) +procUnitConfObjB.addParameter(name='nFFTPoints', value='61', format='int') +procUnitConfObjB.addParameter(name='nProfiles', value='61', format='int') + +''' +procUnitConfObjC = controllerObj.addProcUnit(datatype='SpectraHeisProc', inputId=procUnitConfObjA.getId()) +#procUnitConfObjB.addParameter(name='nFFTPoints', value='64', format='int') +#procUnitConfObjB.addParameter(name='nProfiles', value='64', format='int') +opObj11 = procUnitConfObjC.addOperation(name='IncohInt4SpectraHeis', optype='other') +#opObj11.addParameter(name='timeInterval', value='4', format='int') +opObj11.addParameter(name='n', value='100', format='int') + +#procUnitConfObjB.addParameter(name='pairsList', value='(0,0),(1,1),(0,1)', format='pairsList') + +#opObj13 = procUnitConfObjB.addOperation(name='removeDC') +#opObj13.addParameter(name='mode', value='2', format='int') + +#opObj11 = procUnitConfObjB.addOperation(name='IncohInt', optype='other') +#opObj11.addParameter(name='n', value='8', format='float') +####################################################################### +########## PLOTEO DOMINIO DE LA FRECUENCIA############################# +####################################################################### +#---- +''' +''' +opObj11 = procUnitConfObjC.addOperation(name='SpectraHeisPlot') +opObj11.addParameter(name='id', value='10', format='int') +opObj11.addParameter(name='wintitle', value='Spectra_Alturas', format='str') +#opObj11.addParameter(name='xmin', value=-100000, format='float') +#opObj11.addParameter(name='xmax', value=100000, format='float') +opObj11.addParameter(name='oneFigure', value=False,format='bool') +#opObj11.addParameter(name='zmin', value=-10, format='int') +#opObj11.addParameter(name='zmax', value=40, format='int') +opObj11.addParameter(name='ymin', value=10, format='int') +opObj11.addParameter(name='ymax', value=55, format='int') +opObj11.addParameter(name='grid', value=True, format +[Reading] 2022-05-23 12:27:32.732775: 21333 samples <> 0.010667 sec +='bool') +#opObj11.addParameter(name='showprofile', value='1', format='int') +opObj11.addParameter(name='save', value=figpath, format='str') +#opObj11.addParameter(name='save_period', value=10, format='int') +''' +''' +opObj11 = procUnitConfObjC.addOperation(name='RTIHeisPlot') +opObj11.addParameter(name='id', value='10', format='int') +opObj11.addParameter(name='wintitle', value='RTI_Alturas', format='str') +opObj11.addParameter(name='xmin', value=11.0, format='float') +opObj11.addParameter(name='xmax', value=18.0, format='float') +opObj11.addParameter(name='zmin', value=10, format='int') +opObj11.addParameter(name='zmax', value=30, format='int') +opObj11.addParameter(name='ymin', value=5, format='int') +opObj11.addParameter(name='ymax', value=28, format='int') +opObj11.addParameter(name='showprofile', value='1', format='int') +opObj11.addParameter(name='save', value=figpath, format='str') +opObj11.addParameter(name='save_period', value=10, format='int') +''' + +#SpectraPlot + +opObj11 = procUnitConfObjB.addOperation(name='SpectraPlot', optype='external') +opObj11.addParameter(name='id', value='1', format='int') +opObj11.addParameter(name='wintitle', value='Spectra', format='str') +#opObj11.addParameter(name='xmin', value=-0.01, format='float') +#opObj11.addParameter(name='xmax', value=0.01, format='float') +opObj11.addParameter(name='zmin', value=dBmin, format='int') +opObj11.addParameter(name='zmax', value=dBmax, format='int') +opObj11.addParameter(name='ymin', value=ymin, format='int') +opObj11.addParameter(name='ymax', value=ymax, format='int') +opObj11.addParameter(name='showprofile', value='1', format='int') +opObj11.addParameter(name='save', value=figpath, format='str') +opObj11.addParameter(name='save_period', value=10, format='int') + + +#RTIPLOT +''' +opObj11 = procUnitConfObjB.addOperation(name='RTIPlot', optype='external') +opObj11.addParameter(name='id', value='2', format='int') +opObj11.addParameter(name='wintitle', value='RTIPlot', format='str') +opObj11.addParameter(name='zmin', value=dBmin, format='int') +opObj11.addParameter(name='zmax', value=dBmax, format='int') +#opObj11.addParameter(name='ymin', value=ymin, format='int') +#opObj11.addParameter(name='ymax', value=ymax, format='int') +#opObj11.addParameter(name='xmin', value=15, format='int') +#opObj11.addParameter(name='xmax', value=16, format='int') +opObj11.addParameter(name='zmin', value=dBmin, format='int') +opObj11.addParameter(name='zmax', value=dBmax, format='int') + +opObj11.addParameter(name='showprofile', value='1', format='int') +opObj11.addParameter(name='save', value=figpath, format='str') +opObj11.addParameter(name='save_period', value=10, format='int') +''' +''' +# opObj11 = procUnitConfObjB.addOperation(name='CrossSpectraPlot', optype='other') +# opObj11.addParameter(name='id', value='3', format='int') +# opObj11.addParameter(name='wintitle', value='CrossSpectraPlot', format='str') +# opObj11.addParameter(name='ymin', value=ymin, format='int') +# opObj11.addParameter(name='ymax', value=ymax, format='int') +# opObj11.addParameter(name='phase_cmap', value='jet', format='str') +# opObj11.addParameter(name='zmin', value=dBmin, format='int') +# opObj11.addParameter(name='zmax', value=dBmax, format='int') +# opObj11.addParameter(name='figpath', value=figures_path, format='str') +# opObj11.addParameter(name='save', value=0, format='bool') +# opObj11.addParameter(name='pairsList', value='(0,1)', format='pairsList') +# # +# opObj11 = procUnitConfObjB.addOperation(name='CoherenceMap', optype='other') +# opObj11.addParameter(name='id', value='4', format='int') +# opObj11.addParameter(name='wintitle', value='Coherence', format='str') +# opObj11.addParameter(name='phase_cmap', value='jet', format='str') +# opObj11.addParameter(name='xmin', value=xmin, format='float') +# opObj11.addParameter(name='xmax', value=xmax, format='float') +# opObj11.addParameter(name='figpath', value=figures_path, format='str') +# opObj11.addParameter(name='save', value=0, format='bool') +# opObj11.addParameter(name='pairsList', value='(0,1)', format='pairsList') +# +''' +''' +####################################################################### +############### UNIDAD DE ESCRITURA ################################### +####################################################################### +#opObj11 = procUnitConfObjB.addOperation(name='SpectraWriter', optype='other') +#opObj11.addParameter(name='path', value=wr_path) +#opObj11.addParameter(name='blocksPerFile', value='50', format='int') +print ("Escribiendo el archivo XML") +print ("Leyendo el archivo XML") +''' + + +controllerObj.start() diff --git a/schainpy/scripts/sophy_proc_rev002.py b/schainpy/scripts/sophy_proc_rev002.py new file mode 100644 index 0000000..2fc8b55 --- /dev/null +++ b/schainpy/scripts/sophy_proc_rev002.py @@ -0,0 +1,378 @@ + +# SOPHY PROC script +import os, sys, json, argparse +import datetime +import time + +PATH = '/DATA_RM/DATA' +# PATH = '/Users/jespinoza/workspace/data/' +#PATH = '/home/soporte/Documents/HUANCAYO' +PARAM = { + 'P': {'name': 'dataPP_POWER', 'zmin': -45, 'zmax': -25, 'colormap': 'jet', 'label': 'Power', 'wrname': 'Pow','cb_label': 'dB', 'ch':0}, + 'V': {'name': 'dataPP_DOP', 'zmin': -20, 'zmax': 20, 'colormap': 'seismic', 'label': 'Velocity', 'wrname': 'Vel', 'cb_label': 'm/s', 'ch':0}, + 'RH': {'name': 'RhoHV_R', 'zmin': 0, 'zmax': 1, 'colormap': 'jet', 'label': 'Coef.Correlacion', 'wrname':'R', 'cb_label': '*', 'ch':0}, + 'FD': {'name': 'PhiD_P', 'zmin': -180,'zmax': 180,'colormap': 'RdBu_r', 'label': 'Fase Diferencial', 'wrname':'P' , 'cb_label': 'º', 'ch':0}, + 'ZD': {'name': 'Zdb_D', 'zmin': -20, 'zmax': 60, 'colormap': 'viridis','label': 'Reflect.Diferencial','wrname':'D' , 'cb_label': 'dBz','ch':0}, + 'Z': {'name': 'Zdb', 'zmin': -20, 'zmax': 70, 'colormap': 'gist_ncar','label': 'Reflectividad', 'wrname':'Z', 'cb_label': 'dBz','ch':1}, + 'W': {'name': 'Sigmav_W', 'zmin': 0, 'zmax':5, 'colormap': 'viridis','label': 'AnchoEspectral', 'wrname':'S', 'cb_label': 'hz', 'ch':1} + } + +# +def max_index(r, sample_rate, ipp): + + return int(sample_rate*ipp*1e6 * r / 60) + int(sample_rate*ipp*1e6 * 1.2 / 60) + +def main(args): + + experiment = args.experiment + fp = open(os.path.join(PATH, experiment, 'experiment.conf')) + conf = json.loads(fp.read()) + + ipp_km = conf['usrp_tx']['ipp'] + ipp = ipp_km * 2 /300000 + sample_rate = conf['usrp_rx']['sample_rate'] + axis = ['0' if x=='elevation' else '1' for x in conf['pedestal']['axis']] # AZIMUTH 1 ELEVACION 0 + speed_axis = conf['pedestal']['speed'] + steeps = conf['pedestal']['table'] + time_offset = args.time_offset + parameters = args.parameters + start_date = experiment.split('@')[1].split('T')[0].replace('-', '/') + end_date = start_date + start_time = experiment.split('@')[1].split('T')[1].replace('-', ':') + end_time = '23:59:59' + N = int(1/(speed_axis[0]*ipp)) # 1 GRADO DE RESOLUCION + path = os.path.join(PATH, experiment, 'rawdata') + path_ped = os.path.join(PATH, experiment, 'position') + path_plots = os.path.join(PATH, experiment, 'plots_ch0') + path_save = os.path.join(PATH, experiment, 'param') + RMIX = 20 + + from schainpy.controller import Project + + project = Project() + project.setup(id='1', name='Sophy', description='sophy proc') + + reader = project.addReadUnit(datatype='DigitalRFReader', + path=path, + startDate=start_date, + endDate=end_date, + startTime=start_time, + endTime=end_time, + delay=30, + channelList='0', + online=args.online, + walk=1, + ippKm = ipp_km, + getByBlock = 1, + nProfileBlocks = N, + ) + + if not conf['usrp_tx']['enable_2']: # One Pulse + voltage = project.addProcUnit(datatype='VoltageProc', inputId=reader.getId()) + + if conf['usrp_tx']['code_type_1']: + code = [c.split() for c in conf['usrp']['code_1']] + op = voltage.addOperation(name='Decoder', optype='other') + op.addParameter(name='code', value=code) + op.addParameter(name='nCode', value=len(code), format='int') + op.addParameter(name='nBaud', value=len(code[0]), format='int') + + op = voltage.addOperation(name='setH0') + op.addParameter(name='h0', value='-1.2') + + if args.range >= 0: + op = voltage.addOperation(name='selectHeights') + op.addParameter(name='minIndex', value='0', format='int') + op.addParameter(name='maxIndex', value=max_index(RMIX, sample_rate, ipp), format='int') + + code=[[1]] + opObj11 = voltage.addOperation(name='Decoder', optype='other') + opObj11.addParameter(name='code', value=code) + opObj11.addParameter(name='nCode', value='1', format='int') + opObj11.addParameter(name='nBaud', value='1', format='int') + + op = voltage2.addOperation(name='CohInt', optype='other') #Minimo integrar 2 perfiles por ser codigo complementario + op.addParameter(name='n', value=2*len(code), format='int') + + #op = voltage.addOperation(name='PulsePair_vRF', optype='other') + #op.addParameter(name='n', value=int(N), format='int') + + if args.range >= 0: + op = voltage.addOperation(name='selectHeights') + op.addParameter(name='minIndex', value='0', format='int') + op.addParameter(name='maxIndex', value=max_index(RMIX, sample_rate, ipp), format='int') + + + op = voltage.addOperation(name='PulsePair_vRF', optype='other') + op.addParameter(name='n', value=125, format='int') + + + proc = project.addProcUnit(datatype='ParametersProc', inputId=voltage.getId()) + #procUnitConfObjB.addParameter(name='runNextUnit', value=True) + + opObj10 = proc.addOperation(name="WeatherRadar") + opObj10.addParameter(name='variableList',value='Reflectividad,VelocidadRadial,AnchoEspectral') + + # {"latitude": -12.0404828587, "longitude": -75.2147483647, "altitude": 3379.2147483647} + + op = proc.addOperation(name='PedestalInformation') + op.addParameter(name='path', value=path_ped, format='str') + op.addParameter(name='interval', value='0.04') + op.addParameter(name='time_offset', value=time_offset) + op.addParameter(name='az_offset', value=-26.2) + + for param in parameters: + op = proc.addOperation(name='Block360_vRF4') + #op.addParameter(name='axis', value=','.join(axis)) + op.addParameter(name='attr_data', value=PARAM[param]['name']) + op.addParameter(name='runNextOp', value=True) + + op= proc.addOperation(name='WeatherParamsPlot') + if args.save: op.addParameter(name='save', value=path_plots, format='str') + op.addParameter(name='save_period', value=-1) + op.addParameter(name='show', value=args.show) + op.addParameter(name='channels', value='0,') + op.addParameter(name='zmin', value=PARAM[param]['zmin']) + op.addParameter(name='zmax', value=PARAM[param]['zmax']) + op.addParameter(name='attr_data', value=PARAM[param]['name'], format='str') + op.addParameter(name='labels', value=[PARAM[param]['label']]) + op.addParameter(name='save_code', value=param) + op.addParameter(name='cb_label', value=PARAM[param]['cb_label']) + op.addParameter(name='colormap', value=PARAM[param]['colormap']) + + desc = { + 'Data': { + PARAM[param]['name']: PARAM[param]['label'], + 'utctime': 'time' + }, + 'Metadata': { + 'heightList': 'range', + 'data_azi': 'azimuth', + 'data_ele': 'elevation', + } + } + + if args.save: + opObj10 = proc.addOperation(name='HDFWriter') + opObj10.addParameter(name='path',value=path_save+'-{}'.format(param), format='str') + opObj10.addParameter(name='Reset',value=True) + opObj10.addParameter(name='setType',value='weather') + opObj10.addParameter(name='description',value='desc') + opObj10.addParameter(name='blocksPerFile',value='1',format='int') + opObj10.addParameter(name='metadataList',value='heightList,data_azi,data_ele') + opObj10.addParameter(name='dataList',value='{},utctime'.format(PARAM[param]['name'])) + + else: #Two pulses + + voltage1 = project.addProcUnit(datatype='VoltageProc', inputId=reader.getId()) + + print("repetions",conf['usrp_tx']['repetitions_1']) + + op = voltage1.addOperation(name='ProfileSelector') + op.addParameter(name='profileRangeList', value='0,{}'.format(conf['usrp_tx']['repetitions_1']-1)) + + + #op3 = voltage1.addOperation(name='ProfileSelector', optype='other') + #op3.addParameter(name='profileRangeList', value='1,123') + + ''' + if conf['usrp_tx']['code_type_1'] != 'None': + code = [c.split() for c in conf['usrp_tx']['code_1']] + op = voltage1.addOperation(name='Decoder', optype='other') + op.addParameter(name='code', value=code) + op.addParameter(name='nCode', value=len(code), format='int') + op.addParameter(name='nBaud', value=len(code[0]), format='int') + ''' + + code=[[1]] + + opObj11 = voltage1.addOperation(name='Decoder', optype='other') + opObj11.addParameter(name='code', value=code) + opObj11.addParameter(name='nCode', value='1', format='int') + opObj11.addParameter(name='nBaud', value='1', format='int') + + op = voltage1.addOperation(name='setH0') + op.addParameter(name='h0', value='-1.2') + + if args.range >= 0: + op = voltage1.addOperation(name='selectHeights') + op.addParameter(name='minIndex', value='0', format='int') + op.addParameter(name='maxIndex', value=max_index(RMIX, sample_rate, ipp), format='int') + + op = voltage1.addOperation(name='CohInt', optype='other') #Minimo integrar 2 perfiles por ser codigo complementario + op.addParameter(name='n', value=2, format='int') + + op = voltage1.addOperation(name='PulsePair_vRF', optype='other') + #op.addParameter(name='n', value=int(N), format='int') + op.addParameter(name='n', value=61, format='int') + #op.addParameter(name='removeDC',value=True) + + ''' + if args.range >= 0: + print("corto",max_index(RMIX, sample_rate, ipp)) + op = voltage1.addOperation(name='selectHeights') + op.addParameter(name='minIndex', value='0', format='int') + op.addParameter(name='maxIndex', value=max_index(RMIX, sample_rate, ipp), format='int') + ''' + proc1 = project.addProcUnit(datatype='ParametersProc', inputId=voltage1.getId()) + proc1.addParameter(name='runNextUnit', value=True) + + opObj10 = proc1.addOperation(name="WeatherRadar") + opObj10.addParameter(name='variableList',value='Reflectividad,VelocidadRadial,AnchoEspectral') + opObj10.addParameter(name='tauW',value=0.4*1e-6) + opObj10.addParameter(name='Pt',value=0.2) + + # {"latitude": -12.0404828587, "longitude": -75.2147483647, "altitude": 3379.2147483647} + + op = proc1.addOperation(name='PedestalInformation') + op.addParameter(name='path', value=path_ped, format='str') + op.addParameter(name='interval', value='0.04') + op.addParameter(name='time_offset', value=time_offset) + op.addParameter(name='az_offset', value=-26.2) + + for param in parameters: + op = proc1.addOperation(name='Block360_vRF4') + op.addParameter(name='attr_data', value=PARAM[param]['name']) + op.addParameter(name='runNextOp', value=True) + + voltage2 = project.addProcUnit(datatype='VoltageProc', inputId=reader.getId()) + + op = voltage2.addOperation(name='ProfileSelector') + op.addParameter(name='profileRangeList', value='{},{}'.format(conf['usrp_tx']['repetitions_1'], conf['usrp_tx']['repetitions_1']+conf['usrp_tx']['repetitions_2']-1)) + + + if conf['usrp_tx']['code_type_2']: + print(conf['usrp_tx']['code_2']) + codes = [ c.strip() for c in conf['usrp_tx']['code_2'].split(',')] + code = [] + for c in codes: + code.append([int(x) for x in c]) + print(code) + print(code[0]) + op = voltage2.addOperation(name='Decoder', optype='other') + op.addParameter(name='code', value=code) + op.addParameter(name='nCode', value=len(code), format='int') + op.addParameter(name='nBaud', value=len(code[0]), format='int') + import numpy + pwcode = numpy.sum(numpy.array(code[0])**2) + print("pwcode",pwcode) + + op = voltage2.addOperation(name='CohInt', optype='other') #Minimo integrar 2 perfiles por ser codigo complementario + op.addParameter(name='n', value=len(code), format='int') + ncode = len(code) + else: + ncode = 1 + + op = voltage2.addOperation(name='setH0') + op.addParameter(name='h0', value='-1.2') + + if args.range >= 0: + if args.range==0: + args.range= ipp_km + op = voltage2.addOperation(name='selectHeights') + op.addParameter(name='minIndex', value=max_index(RMIX, sample_rate, ipp), format='int') + op.addParameter(name='maxIndex', value=max_index(args.range, sample_rate, ipp), format='int') + + #op = voltage2.addOperation(name='PulsePair_vRF', optype='other') + #op.addParameter(name='n', value=int(N)/ncode, format='int') + op = voltage2.addOperation(name='PulsePair_vRF', optype='other') + op.addParameter(name='n', value=64, format='int') + #op.addParameter(name='removeDC',value=True) + + ''' + + if args.range >= 0: + if args.range==0: + args.range= ipp_km + op = voltage2.addOperation(name='selectHeights') + print("largo",max_index(RMIX, sample_rate, ipp)) + print("largo2",max_index(args.range, sample_rate, ipp)) + + op.addParameter(name='minIndex', value=max_index(RMIX, sample_rate, ipp), format='int') + op.addParameter(name='maxIndex', value=max_index(args.range, sample_rate, ipp), format='int') + ''' + + proc2 = project.addProcUnit(datatype='ParametersProc', inputId=voltage2.getId()) + + opObj10 = proc2.addOperation(name="WeatherRadar") + opObj10.addParameter(name='variableList',value='Reflectividad,AnchoEspectral') + opObj10.addParameter(name='tauW',value=6.3*1e-6) + opObj10.addParameter(name='Pt',value=3.2) + + + # {"latitude": -12.0404828587, "longitude": -75.2147483647, "altitude": 3379.2147483647} + + op = proc2.addOperation(name='PedestalInformation') + op.addParameter(name='path', value=path_ped, format='str') + op.addParameter(name='interval', value='0.04') + op.addParameter(name='time_offset', value=time_offset) + op.addParameter(name='az_offset', value=-26.2) + + for param in parameters: + op = proc2.addOperation(name='Block360_vRF4') + #op.addParameter(name='axis', value=','.join(axis)) + op.addParameter(name='attr_data', value=PARAM[param]['name']) + op.addParameter(name='runNextOp', value=True) + + merge = project.addProcUnit(datatype='MergeProc', inputId=[proc1.getId(), proc2.getId()]) + merge.addParameter(name='attr_data', value=PARAM[param]['name']) + merge.addParameter(name='mode', value='7') #RM + + op= merge.addOperation(name='WeatherParamsPlot') + if args.save: op.addParameter(name='save', value=path_plots, format='str') + op.addParameter(name='save_period', value=-1) + op.addParameter(name='show', value=args.show) + op.addParameter(name='channels', value='0,') + op.addParameter(name='zmin', value=PARAM[param]['zmin']) + op.addParameter(name='zmax', value=PARAM[param]['zmax']) + op.addParameter(name='attr_data', value=PARAM[param]['name'], format='str') + op.addParameter(name='labels', value=[PARAM[param]['label']]) + op.addParameter(name='save_code', value=param) + op.addParameter(name='cb_label', value=PARAM[param]['cb_label']) + op.addParameter(name='colormap', value=PARAM[param]['colormap']) + + desc = { + 'Data': { + PARAM[param]['name']: PARAM[param]['label'], + 'utctime': 'time' + }, + 'Metadata': { + 'heightList': 'range', + 'data_azi': 'azimuth', + 'data_ele': 'elevation', + } + } + + if args.save: + opObj10 = merge.addOperation(name='HDFWriter') + opObj10.addParameter(name='path',value=path_save, format='str') + opObj10.addParameter(name='Reset',value=True) + opObj10.addParameter(name='setType',value='weather') + opObj10.addParameter(name='description',value='desc') + opObj10.addParameter(name='blocksPerFile',value='1',format='int') + opObj10.addParameter(name='metadataList',value='heightList,data_azi,data_ele') + opObj10.addParameter(name='dataList',value='{},utctime'.format(PARAM[param]['name'])) + + project.start() + +if __name__ == '__main__': + + parser = argparse.ArgumentParser(description='Script to process SOPHy data.') + parser.add_argument('experiment', + help='Experiment name') + parser.add_argument('--parameters', nargs='*', default=['P'], + help='Variables to process: P, Z, V') + parser.add_argument('--time_offset', default=0, + help='Fix time offset') + parser.add_argument('--range', default=0, type=float, + help='Max range to plot') + parser.add_argument('--save', action='store_true', + help='Create output files') + parser.add_argument('--show', action='store_true', + help='Show matplotlib plot.') + parser.add_argument('--online', action='store_true', + help='Set online mode.') + + args = parser.parse_args() + + main(args)