diff --git a/schainpy/SOPHY_test0001.py b/schainpy/SOPHY_test0001.py new file mode 100644 index 0000000..84760a5 --- /dev/null +++ b/schainpy/SOPHY_test0001.py @@ -0,0 +1,41 @@ +# Ing. AVP +# 01/11/2021 +# ARCHIVO DE LECTURA +import os, sys +import datetime +import time +from schainpy.controller import Project +print("----[Setup]-RadarMeteorologico--------") +Vel = 6 +modo_proc = 1 +#-----------PATH DE DATOS-----------------------# +path = "/DATA_RM/10" +path_ped = "/DATA_RM/TEST_PEDESTAL/P20211111-173856" +print("----[OPCIONES]------------------------") +op_plot = 0 +op_integration = 0 +op_save = 0 +op_plot_spec = 0 + +########################SIGNAL CHAIN ################################## +desc = "USRP_test" +filename = "USRP_processing.xml" +controllerObj = Project() +controllerObj.setup(id = '191', name='Test_USRP', description=desc) +######################## UNIDAD DE LECTURA############################# +readUnitConfObj = controllerObj.addReadUnit(datatype='DigitalRFReader', + path=path, + startDate="2021/11/11",#today, + endDate="2021/12/30",#today, + startTime='17:39:25', + endTime='23:59:59', + delay=0, + #set=0, + online=0, + walk=1, + ippKm = 60) + +opObj11 = readUnitConfObj.addOperation(name='printInfo') + +procUnitConfObjA = controllerObj.addProcUnit(datatype='VoltageProc',inputId=readUnitConfObj.getId()) +controllerObj.start() diff --git a/schainpy/model/graphics/jroplot_parameters.py b/schainpy/model/graphics/jroplot_parameters.py index b524937..739676f 100644 --- a/schainpy/model/graphics/jroplot_parameters.py +++ b/schainpy/model/graphics/jroplot_parameters.py @@ -390,6 +390,8 @@ class WeatherPlot(Plot): self.plots_adjust.update({'wspace': 0.4, 'hspace':0.4, 'left': 0.1, 'right': 0.9, 'bottom': 0.08}) self.flag =0 self.indicador= 0 + self.last_data_azi = None + self.val_mean = None def update(self, dataOut): @@ -402,41 +404,115 @@ class WeatherPlot(Plot): factor = dataOut.normFactor ####print("factor",factor) - data['weather'] = 10*numpy.log10(dataOut.data_360[0]/(factor)) - print("weather",data['weather']) + data['weather'] = 10*numpy.log10(dataOut.data_360[1]/(factor)) + ####print("weather",data['weather']) data['azi'] = dataOut.data_azi return data, meta + def analizeDATA(self,data_azi): + list1 = [] + list2 = [] + dat = data_azi + for i in reversed(range(1,len(dat))): + if dat[i]>dat[i-1]: + diff = int(dat[i])-int(dat[i-1]) + else: + diff = 360+int(dat[i])-int(dat[i-1]) + if diff > 1: + list1.append(i-1) + list2.append(diff-1) + return list1,list2 + + def fixDATANEW(self,data_azi,data_weather): + list1,list2 = self.analizeDATA(data_azi) + if len(list1)== 0: + return data_azi,data_weather + else: + resize = 0 + for i in range(len(list2)): + resize= resize + list2[i] + new_data_azi = numpy.resize(data_azi,resize) + new_data_weather= numpy.resize(date_weather,resize) + + for i in range(len(list2)): + j=0 + position=list1[i]+1 + for j in range(list2[i]): + new_data_azi[position+j]=new_data_azi[position+j-1]+1 + + return new_data_azi + + def fixDATA(self,data_azi): + data=data_azi + for i in range(len(data)): + if numpy.isnan(data[i]): + data[i]=data[i-1]+1 + return data + + def replaceNAN(self,data_weather,data_azi,val): + print("----------------activeNEWFUNCTION") + data= data_azi + data_T= data_weather + print("data_azi",data_azi) + print("VAL:",val) + print("SHAPE",data_T.shape) + for i in range(len(data)): + if numpy.isnan(data[i]): + print("NAN") + data_T[i,:]=numpy.ones(data_T.shape[1])*val + #data_T[i,:]=numpy.ones(data_T.shape[1])*numpy.nan + return data_T + def const_ploteo(self,data_weather,data_azi,step,res): if self.ini==0: #------- AZIMUTH n = (360/res)-len(data_azi) - start = data_azi[-1] + res - end = data_azi[0] - res + ##### new + data_azi_old = data_azi + data_azi_new = self.fixDATA(data_azi) + #ata_azi_new = self.fixDATANEW(data_azi) + + start = data_azi_new[-1] + res + end = data_azi_new[0] - res + ##### new + self.last_data_azi = end if start>end: end = end + 360 azi_vacia = numpy.linspace(start,end,int(n)) azi_vacia = numpy.where(azi_vacia>360,azi_vacia-360,azi_vacia) - data_azi = numpy.hstack((data_azi,azi_vacia)) + data_azi = numpy.hstack((data_azi_new,azi_vacia)) # RADAR - val_mean = numpy.mean(data_weather[:,0]) + val_mean = numpy.mean(data_weather[:,-1]) + self.val_mean = val_mean data_weather_cmp = numpy.ones([(360-data_weather.shape[0]),data_weather.shape[1]])*val_mean + data_weather = self.replaceNAN(data_weather=data_weather,data_azi=data_azi_old,val=self.val_mean) data_weather = numpy.vstack((data_weather,data_weather_cmp)) else: # azimuth flag=0 start_azi = self.res_azi[0] + #### new + data_azi_old = data_azi + ### weather ### + data_weather = self.replaceNAN(data_weather=data_weather,data_azi=data_azi_old,val=self.val_mean) + + if numpy.isnan(data_azi[0]): + data_azi[0]=self.last_data_azi+1 + data_azi = self.fixDATA(data_azi) + #### + start = data_azi[0] end = data_azi[-1] - print("start",start) - print("end",end) + self.last_data_azi= end + ####print("start",start) + ####print("end",end) if start< start_azi: start = start +360 if end =0)[0] + r = numpy.arange(len(r_mask))*delta_height + #print("2",r) self.y = 2*r + ######self.y = self.data.yrange # RADAR #data_weather = data['weather'] # PEDESTAL @@ -491,27 +579,27 @@ class WeatherPlot(Plot): #print("shape wr_data", wr_data.shape) #print("shape wr_azi",wr_azi.shape) #print("step",step) - print("Time---->",self.data.times[-1],thisDatetime) - #print("alturas", len(self.y)) - self.res_weather, self.res_azi = self.const_ploteo(data_weather=data['weather'],data_azi=data['azi'],step=step,res=res) + ####print("Time---->",self.data.times[-1],thisDatetime) + #print("alturas", len(self.y))numpy.where(r>=0) + self.res_weather, self.res_azi = self.const_ploteo(data_weather=data['weather'][:,r_mask],data_azi=data['azi'],step=step,res=res) #numpy.set_printoptions(suppress=True) #print("resultado",self.res_azi) - ########################################################## + ###########################/DATA_RM/10_tmp/ch0############################### ################# PLOTEO ################### ########################################################## for i,ax in enumerate(self.axes): if ax.firsttime: plt.clf() - cgax, pm = wrl.vis.plot_ppi(self.res_weather,r=r,az=self.res_azi,fig=self.figures[0], proj='cg', vmin=1, vmax=60) + cgax, pm = wrl.vis.plot_ppi(self.res_weather,r=r,az=self.res_azi,fig=self.figures[0], proj='cg', vmin=8, vmax=35) else: plt.clf() - cgax, pm = wrl.vis.plot_ppi(self.res_weather,r=r,az=self.res_azi,fig=self.figures[0], proj='cg', vmin=1, vmax=60) + cgax, pm = wrl.vis.plot_ppi(self.res_weather,r=r,az=self.res_azi,fig=self.figures[0], proj='cg', vmin=8, vmax=35) caax = cgax.parasites[0] paax = cgax.parasites[1] cbar = plt.gcf().colorbar(pm, pad=0.075) caax.set_xlabel('x_range [km]') caax.set_ylabel('y_range [km]') - plt.text(1.0, 1.05, 'azimuth '+str(thisDatetime)+"step"+str(self.ini), transform=caax.transAxes, va='bottom',ha='right') + plt.text(1.0, 1.05, 'azimuth '+str(thisDatetime)+" step "+str(self.ini), transform=caax.transAxes, va='bottom',ha='right') self.ini= self.ini+1 diff --git a/schainpy/model/io/jroIO_digitalRF.py b/schainpy/model/io/jroIO_digitalRF.py index 913e167..28eba12 100644 --- a/schainpy/model/io/jroIO_digitalRF.py +++ b/schainpy/model/io/jroIO_digitalRF.py @@ -349,7 +349,7 @@ class DigitalRFReader(ProcessingUnit): start_index, end_index = self.digitalReadObj.get_bounds( channelNameList[channelList[0]]) - print("*****",start_index,end_index) + ##print("*****",start_index,end_index) if not startUTCSecond: startUTCSecond = start_index / self.__sample_rate diff --git a/schainpy/model/io/jroIO_param.py b/schainpy/model/io/jroIO_param.py index e52f2c2..16437da 100644 --- a/schainpy/model/io/jroIO_param.py +++ b/schainpy/model/io/jroIO_param.py @@ -17,7 +17,7 @@ class HDFReader(Reader, ProcessingUnit): This unit reads HDF5 files created with `HDFWriter` operation contains by default two groups Data and Metadata all variables would be saved as `dataOut` - attributes. + attributes. It is possible to read any HDF5 file by given the structure in the `description` parameter, also you can add extra values to metadata with the parameter `extras`. @@ -37,10 +37,10 @@ class HDFReader(Reader, ProcessingUnit): Dictionary with the description of the HDF5 file extras : dict, optional Dictionary with extra metadata to be be added to `dataOut` - + Examples -------- - + desc = { 'Data': { 'data_output': ['u', 'v', 'w'], @@ -64,7 +64,7 @@ class HDFReader(Reader, ProcessingUnit): extras = { 'timeZone': 300 } - + reader = project.addReadUnit( name='HDFReader', path='/path/to/files', @@ -99,42 +99,42 @@ class HDFReader(Reader, ProcessingUnit): self.set_kwargs(**kwargs) if not self.ext.startswith('.'): - self.ext = '.{}'.format(self.ext) + self.ext = '.{}'.format(self.ext) if self.online: log.log("Searching files in online mode...", self.name) for nTries in range(self.nTries): fullpath = self.searchFilesOnLine(self.path, self.startDate, - self.endDate, self.expLabel, self.ext, self.walk, + self.endDate, self.expLabel, self.ext, self.walk, self.filefmt, self.folderfmt) try: fullpath = next(fullpath) except: fullpath = None - + if fullpath: break log.warning( 'Waiting {} sec for a valid file in {}: try {} ...'.format( - self.delay, self.path, nTries + 1), + self.delay, self.path, nTries + 1), self.name) time.sleep(self.delay) if not(fullpath): raise schainpy.admin.SchainError( - 'There isn\'t any valid file in {}'.format(self.path)) + 'There isn\'t any valid file in {}'.format(self.path)) pathname, filename = os.path.split(fullpath) self.year = int(filename[1:5]) self.doy = int(filename[5:8]) - self.set = int(filename[8:11]) - 1 + self.set = int(filename[8:11]) - 1 else: log.log("Searching files in {}".format(self.path), self.name) - self.filenameList = self.searchFilesOffLine(self.path, self.startDate, + self.filenameList = self.searchFilesOffLine(self.path, self.startDate, self.endDate, self.expLabel, self.ext, self.walk, self.filefmt, self.folderfmt) - + self.setNextFile() return @@ -142,18 +142,18 @@ class HDFReader(Reader, ProcessingUnit): def readFirstHeader(self): '''Read metadata and data''' - self.__readMetadata() + self.__readMetadata() self.__readData() self.__setBlockList() - + if 'type' in self.meta: self.dataOut = eval(self.meta['type'])() - + for attr in self.meta: setattr(self.dataOut, attr, self.meta[attr]) - + self.blockIndex = 0 - + return def __setBlockList(self): @@ -211,7 +211,7 @@ class HDFReader(Reader, ProcessingUnit): def __readData(self): data = {} - + if self.description: for key, value in self.description['Data'].items(): if isinstance(value, str): @@ -239,7 +239,7 @@ class HDFReader(Reader, ProcessingUnit): array = numpy.array(array) else: log.warning('Unknown type: {}'.format(name)) - + if name in self.description: key = self.description[name] else: @@ -248,7 +248,7 @@ class HDFReader(Reader, ProcessingUnit): self.data = data return - + def getData(self): for attr in self.data: @@ -287,8 +287,8 @@ class HDFWriter(Operation): The HDF5 file contains by default two groups Data and Metadata where you can save any `dataOut` attribute specified by `dataList` and `metadataList` parameters, data attributes are normaly time dependent where the metadata - are not. - It is possible to customize the structure of the HDF5 file with the + are not. + It is possible to customize the structure of the HDF5 file with the optional description parameter see the examples. Parameters: @@ -305,10 +305,10 @@ class HDFWriter(Operation): If True the name of the files corresponds to the timestamp of the data description : dict, optional Dictionary with the desired description of the HDF5 file - + Examples -------- - + desc = { 'data_output': {'winds': ['z', 'w', 'v']}, 'utctime': 'timestamps', @@ -328,7 +328,7 @@ class HDFWriter(Operation): 'heightList': 'heights' } } - + writer = proc_unit.addOperation(name='HDFWriter') writer.addParameter(name='path', value='/path/to/file') writer.addParameter(name='blocksPerFile', value='32') @@ -354,12 +354,33 @@ class HDFWriter(Operation): metadataList = None currentDay = None lastTime = None + last_Azipos = None + last_Elepos = None + mode = None + + def __init__(self): - + Operation.__init__(self) return + def generalFlag(self): + print("GENERALFLAG") + if self.mode== "weather": + if self.last_Azipos == None: + tmp = self.dataOut.azimuth + print("ang azimuth writer",tmp) + self.last_Azipos = tmp + flag = False + return flag + print("ang_azimuth writer",self.dataOut.azimuth) + result = self.dataOut.azimuth - self.last_Azipos + self.last_Azipos = self.dataOut.azimuth + if result<0: + flag = True + return flag + def setup(self, path=None, blocksPerFile=10, metadataList=None, dataList=None, setType=None, description=None): self.path = path self.blocksPerFile = blocksPerFile @@ -392,7 +413,7 @@ class HDFWriter(Operation): dsDict['shape'] = dataAux.shape dsDict['dsNumber'] = dataAux.shape[0] dsDict['dtype'] = dataAux.dtype - + dsList.append(dsDict) self.dsList = dsList @@ -407,7 +428,7 @@ class HDFWriter(Operation): self.lastTime = currentTime self.currentDay = dataDay return False - + timeDiff = currentTime - self.lastTime #Si el dia es diferente o si la diferencia entre un dato y otro supera la hora @@ -422,11 +443,12 @@ class HDFWriter(Operation): return False def run(self, dataOut, path, blocksPerFile=10, metadataList=None, - dataList=[], setType=None, description={}): + dataList=[], setType=None, description={},mode= None): self.dataOut = dataOut + self.mode = mode if not(self.isConfig): - self.setup(path=path, blocksPerFile=blocksPerFile, + self.setup(path=path, blocksPerFile=blocksPerFile, metadataList=metadataList, dataList=dataList, setType=setType, description=description) @@ -435,9 +457,9 @@ class HDFWriter(Operation): self.putData() return - + def setNextFile(self): - + ext = self.ext path = self.path setFile = self.setFile @@ -522,7 +544,7 @@ class HDFWriter(Operation): return 'pair{:02d}'.format(x) else: return 'channel{:02d}'.format(x) - + def writeMetadata(self, fp): if self.description: @@ -547,7 +569,7 @@ class HDFWriter(Operation): return def writeData(self, fp): - + if self.description: if 'Data' in self.description: grp = fp.create_group('Data') @@ -558,13 +580,13 @@ class HDFWriter(Operation): dtsets = [] data = [] - + for dsInfo in self.dsList: if dsInfo['nDim'] == 0: ds = grp.create_dataset( - self.getLabel(dsInfo['variable']), + self.getLabel(dsInfo['variable']), (self.blocksPerFile, ), - chunks=True, + chunks=True, dtype=numpy.float64) dtsets.append(ds) data.append((dsInfo['variable'], -1)) @@ -576,7 +598,7 @@ class HDFWriter(Operation): sgrp = grp for i in range(dsInfo['dsNumber']): ds = sgrp.create_dataset( - self.getLabel(dsInfo['variable'], i), + self.getLabel(dsInfo['variable'], i), (self.blocksPerFile, ) + dsInfo['shape'][1:], chunks=True, dtype=dsInfo['dtype']) @@ -585,7 +607,7 @@ class HDFWriter(Operation): fp.flush() log.log('Creating file: {}'.format(fp.filename), self.name) - + self.ds = dtsets self.data = data self.firsttime = True @@ -593,8 +615,8 @@ class HDFWriter(Operation): return def putData(self): - - if (self.blockIndex == self.blocksPerFile) or self.timeFlag(): + print("**************************PUT DATA***************************************************") + if (self.blockIndex == self.blocksPerFile) or self.timeFlag() or self.generalFlag(): self.closeFile() self.setNextFile() diff --git a/schainpy/model/proc/jroproc_parameters.py b/schainpy/model/proc/jroproc_parameters.py index a86eb08..a56bcfb 100755 --- a/schainpy/model/proc/jroproc_parameters.py +++ b/schainpy/model/proc/jroproc_parameters.py @@ -23,6 +23,8 @@ from numpy import NaN from scipy.optimize.optimize import OptimizeWarning warnings.filterwarnings('ignore') +from time import sleep + import matplotlib.pyplot as plt SPEED_OF_LIGHT = 299792458 @@ -1323,8 +1325,8 @@ class SpectralMoments(Operation): if (ss1 > m): ss1 = m - valid = numpy.arange(int(m + bb0 - ss1 + 1)) + ss1 - #valid = numpy.arange(1,oldspec.shape[0])# valid perfil completo igual pulsepair + #valid = numpy.arange(int(m + bb0 - ss1 + 1)) + ss1 + valid = numpy.arange(1,oldspec.shape[0])# valid perfil completo igual pulsepair signal_power = ((spec2[valid] - n0) * fwindow[valid]).mean() # D. Scipión added with correct definition total_power = (spec2[valid] * fwindow[valid]).mean() # D. Scipión added with correct definition power = ((spec2[valid] - n0) * fwindow[valid]).sum() @@ -4003,6 +4005,39 @@ class PedestalInformation(Operation): def __init__(self): Operation.__init__(self) + + def getAnguloProfile(self,utc_adq,list_pedestal): + ##print("NEW-METHOD") + utc_adq = utc_adq + list_pedestal = list_pedestal + utc_ped_list = [] + + for i in range(len(list_pedestal)): + #print(i)# OJO IDENTIFICADOR DE SINCRONISMO + utc_ped_list.append(self.gettimeutcfromDirFilename(path=self.path_ped,file=list_pedestal[i])) + + nro_file,utc_ped,utc_ped_1 =self.getNROFile(utc_adq,utc_ped_list) + #print("utc_adq",utc_adq) + print("utc_ped",utc_ped) + print("DIFF",utc_adq-utc_ped) + print("nro_file",nro_file) + if nro_file < 0: + #print("-----------------------------------------------------------------") + #print("INSERTANDO ANGULO NAN") + return numpy.NaN + else: + nro_key_p = int((utc_adq-utc_ped)/self.t_Interval_p)-1 # ojito al -1 estimado alex + ff_pedestal = list_pedestal[nro_file] + #angulo = self.getDatavaluefromDirFilename(path=self.path_ped,file=ff_pedestal,value="azimuth") + angulo = self.getDatavaluefromDirFilename(path=self.path_ped,file=ff_pedestal,value="azi_pos") + if 99>=nro_key_p>0: + ##print("angulo_array :",angulo[nro_key_p]) + return angulo[nro_key_p] + else: + #print("-----------------------------------------------------------------") + return numpy.NaN + + def getfirstFilefromPath(self,path,meta,ext): validFilelist = [] #print("SEARH",path) @@ -4068,9 +4103,9 @@ class PedestalInformation(Operation): def getNROFile(self,utc_adq,utc_ped_list): c=0 - print("insidegetNROFile") - print(utc_adq) - print(len(utc_ped_list)) + #print("insidegetNROFile") + #print(utc_adq) + #print(len(utc_ped_list)) for i in range(len(utc_ped_list)): if utc_adq>utc_ped_list[i]: #print("mayor") @@ -4105,11 +4140,11 @@ class PedestalInformation(Operation): ###utc_adq = self.gettimeutcadqfromDirFilename(path=self.path_adq,file=self.list_adq[0]) print("dios existe donde esta") - #print("utc_ped_list",utc_ped_list) - ###print("utc_adq",utc_adq) + print("utc_ped_list",utc_ped_list) + #print("utc_adq",utc_adq) # utc_adq_dataOut utc_adq_dataOut =dataOut.utctime - print("Offline-utc_adq_dataout",utc_adq_dataOut) + print("OFFLINE-UTC_ADQ_dataout",utc_adq_dataOut) nro_file,utc_ped,utc_ped_1 = self.getNROFile(utc_adq=utc_adq_dataOut, utc_ped_list= utc_ped_list) @@ -4118,12 +4153,14 @@ class PedestalInformation(Operation): nro_key_p = int((utc_adq_dataOut-utc_ped)/self.t_Interval_p)-1 # ojito al -1 estimado alex print("nro_key_p",nro_key_p) - ff_pedestal = self.list_pedestal[nro_file] + ff_pedestal = self.list_ + pedestal[nro_file] #angulo = self.getDatavaluefromDirFilename(path=self.path_ped,file=ff_pedestal,value="azimuth") angulo = self.getDatavaluefromDirFilename(path=self.path_ped,file=ff_pedestal,value="azi_pos") print("utc_pedestal_init :",utc_ped+nro_key_p*self.t_Interval_p) - print("angulo_array :",angulo[nro_key_p]) + if nro_key_p>0: + print("angulo_array :",angulo[nro_key_p]) self.nro_file = nro_file self.nro_key_p = nro_key_p @@ -4160,6 +4197,7 @@ class PedestalInformation(Operation): self.t_Interval_p = t_Interval_p self.n_Muestras_p = n_Muestras_p self.blocksPerfile= blocksPerfile + #print("dasdadasdasda",self.blocksPerfile) self.f_a_p = f_a_p self.online = online self.angulo_adq = numpy.zeros(self.blocksPerfile) @@ -4172,14 +4210,14 @@ class PedestalInformation(Operation): print("LIST NEW", self.list_pedestal[:20]) #self.list_adq = self.getfirstFilefromPath(path=self.path_adq,meta="D",ext=".hdf5") print("*************Longitud list pedestal****************",len(self.list_pedestal)) - + ''' if self.online: print("Enable Online") self.setup_online(dataOut) else: #self.setup_offline(dataOut,list_pedestal=self.list_pedestal,list_adq=self.list_adq) self.setup_offline(dataOut,list_pedestal=self.list_pedestal) - + ''' def setNextFileP(self,dataOut): if self.online: @@ -4190,52 +4228,109 @@ class PedestalInformation(Operation): return data_pedestal + + def checkPedFile(self,path,nro_file): + try: + utc_pedestal_now = self.gettimeutcfromDirFilename(path=path,file=self.list_pedestal[nro_file]) + utc_pedestal_past = self.gettimeutcfromDirFilename(path=path,file=self.list_pedestal[nro_file-1]) + diff_utc = utc_pedestal_now - utc_pedestal_past + except: + diff_utc = -1 + return diff_utc + def setNextFileoffline(self,dataOut): - ##tmp=0 + print("error") + print("no entiendo") + flag_NOPedfile = False + cont_NOPedFile = 0 + if self.nro_file<0: + print("adq empieza antes") + return numpy.ones(self.blocksPerfile)*numpy.nan + print("INICIO-----------------------------------------") + sleep(3) for j in range(self.blocksPerfile): - ###print("NUMERO DEL BLOQUE---->",j) - ###print("nro_key_p",self.nro_key_p) + print(j) + iterador = self.nro_key_p + self.f_a_p*self.c_ped + self.c_ped = self.c_ped + 1 + print("Iterador-->", iterador) + if iterador < self.n_Muestras_p: + self.nro_file = self.nro_file + else: + if flag_NOPedfile==False: + ########################### + self.nro_file = self.nro_file +1 + ########################### + print("nro_file",self.nro_file) + diff_utc = self.checkPedFile(path=self.path_ped,nro_file=self.nro_file) + print("diff_utc",diff_utc) + if diff_utc==1: + utc_ped_setnext=self.gettimeutcfromDirFilename(path=self.path_ped,file=self.list_pedestal[self.nro_file]) + utc_adq_setnext=dataOut.utctime + print("utc_pedestal",utc_ped_setnext) + print("utc_adq",utc_adq_setnext) + print("self.c_ped",self.c_ped) + #dif = self.blocksPerfile-(self.nro_key_p+self.f_a_p*(self.c_ped-2)) + dif = self.n_Muestras_p-(self.nro_key_p+self.f_a_p*(self.c_ped-2)) + self.c_ped = 1 + ##tmp = j + ##print("tmp else",tmp) + self.nro_key_p= self.f_a_p-dif + iterador = self.nro_key_p + print("iterador else",iterador) + if diff_utc >1: + print("FALTAN DATOS DEL PEDESTAL AMIGO WAIT") + sleep(1) + #aqui no hay DATA pero creo el nro_key_p "como si existiera" y reinicio el c_ped + print("continua bro") + print("self.c_ped",self.c_ped) + dif = self.n_Muestras_p-(self.nro_key_p+self.f_a_p*(self.c_ped-2)) + self.c_ped = 1 + self.nro_key_p = self.f_a_p-dif + # + iterador = self.nro_key_p + print("iterador else",iterador) + # + utc_ped_nofile = self.gettimeutcfromDirFilename(path=self.path_ped,file=self.list_pedestal[self.nro_file-1])+1 + #iterador = self.nro_key_p #no hay iterador pero importa el nro_key_p + flag_NOPedfile= True + print("q paso") + + if diff_utc <0: + print("No hay mas archivos") + self.angulo_adq = numpy.ones(self.blocksPerfile)*numpy.nan + else: + print("NO EXISTE DATA - IMAGINA") + dif = self.n_Muestras_p-(self.nro_key_p+self.f_a_p*(self.c_ped-2)) + self.c_ped = 1 + ##tmp = j + ##print("tmp else",tmp) + self.nro_key_p= self.f_a_p-dif - #iterador = self.nro_key_p +self.f_a_p*(j-tmp) - iterador = self.nro_key_p +self.f_a_p*self.c_ped - self.c_ped = self.c_ped +1 - print("iterador------------->",iterador) - if iterador < self.n_Muestras_p: - self.nro_file = self.nro_file - else: - self.nro_file = self.nro_file+1 - print("PRUEBA-------------") - utc_ped_setnext=self.gettimeutcfromDirFilename(path=self.path_ped,file=self.list_pedestal[self.nro_file]) - utc_adq_setnext=dataOut.utctime - print("utc_pedestal",utc_ped_setnext) - print("utc_adq",utc_adq_setnext) - - print("self.c_ped",self.c_ped) - #dif = self.blocksPerfile-(self.nro_key_p+self.f_a_p*(self.c_ped-2)) - dif = self.n_Muestras_p-(self.nro_key_p+self.f_a_p*(self.c_ped-2)) - - self.c_ped = 1 - ##tmp = j - ##print("tmp else",tmp) - self.nro_key_p= self.f_a_p-dif - iterador = self.nro_key_p - print("iterador else",iterador) - #self.c_ped = self.c_ped +1 - print("nro_file",self.nro_file) - #print("tmp",tmp) - try: + + if flag_NOPedfile == False: + # AQUI NECESITO DOS COSAS "nro_file" y el "iterador" ff_pedestal = self.list_pedestal[self.nro_file] print("ff_pedestal",ff_pedestal) - except: - print("############# EXCEPCION ######################") - return numpy.ones(self.blocksPerfile)*numpy.nan + angulo = self.getDatavaluefromDirFilename(path=self.path_ped,file=ff_pedestal,value="azi_pos") + save_angulo = angulo[iterador] + self.angulo_adq[j]= angulo[iterador] + else: + print(" DATA SIMULADA------------------------------------",j) + self.angulo_adq[j]= numpy.nan + cont_NOPedFile = cont_NOPedFile + 1 + print("contador:",cont_NOPedFile) + sleep(2) + if cont_NOPedFile==self.f_a_p: + cont_NOPedFile = 0 + utc_ped_nofile = utc_ped_nofile+1 + utc_ped_setnext= self.gettimeutcfromDirFilename(path=self.path_ped,file=self.list_pedestal[self.nro_file]) + if utc_ped_setnext-utc_ped_nofile==1: + fladata_pg_NOPedfile=False + - #angulo = self.getDatavaluefromDirFilename(path=self.path_ped,file=ff_pedestal,value="azimuth") - angulo = self.getDatavaluefromDirFilename(path=self.path_ped,file=ff_pedestal,value="azi_pos") - self.angulo_adq[j]= angulo[iterador] return self.angulo_adq @@ -4298,32 +4393,68 @@ class PedestalInformation(Operation): #def run(self, dataOut,path_ped,path_adq,t_Interval_p,n_Muestras_p,blocksPerfile,f_a_p,online): def run(self, dataOut,path_ped,t_Interval_p,n_Muestras_p,blocksPerfile,f_a_p,online): + if not self.isConfig: + self.setup(dataOut, path_ped,t_Interval_p,n_Muestras_p,blocksPerfile,f_a_p,online) + self.__dataReady = True + self.isConfig = True + #print("config TRUE") + + utc_adq = dataOut.utctime + print("utc_adq---------------",utc_adq) + list_pedestal = self.list_pedestal + angulo = self.getAnguloProfile(utc_adq=utc_adq,list_pedestal=list_pedestal) + print("angulo**********",angulo) + dataOut.flagNoData = False + if numpy.isnan(angulo): + dataOut.flagNoData = True + return dataOut + dataOut.azimuth = angulo + return dataOut + ''' if not self.isConfig: print("######################SETUP#########################################") + print("CONFIG dataOut.utctime---",dataOut.utctime) #self.setup( dataOut, path_ped,path_adq,t_Interval_p,n_Muestras_p,blocksPerfile,f_a_p,online) self.setup( dataOut, path_ped,t_Interval_p,n_Muestras_p,blocksPerfile,f_a_p,online) - self.isConfig = True + print("aqui bro") + if self.nro_file>=0: + self.isConfig = True + else: + self.isConfig = False + print("RUN---dataOut.utctime---",dataOut.utctime) dataOut.flagNoData = True - ###print("profIndex",self.__profIndex) - + #sleep(0.5) + #print("--------------------------------------------------------------------------------") + #print("profIndex",self.__profIndex) + ''' + ''' if self.__profIndex==0: angulo_adq = self.setNextFileP(dataOut) dataOut.azimuth = angulo_adq - ######print("TIEMPO:",dataOut.utctime) - ##print("####################################################################") - ######print("angulos",dataOut.azimuth,len(dataOut.azimuth)) + print("TIEMPO--------:",dataOut.utctime) + print("####################################################################") + ####print("angulos",dataOut.azimuth,len(dataOut.azimuth)) self.__dataReady = True + ''' + ''' self.__profIndex += 1 ####print("TIEMPO_bucle:",dataOut.utctime) - ####print("profIndex",self.__profIndex) + #print("profIndex",self.__profIndex) if self.__profIndex== blocksPerfile: + self.__dataReady = True self.__profIndex = 0 if self.__dataReady: #print(self.__profIndex,dataOut.azimuth[:10]) + angulo_adq = self.setNextFileP(dataOut) + dataOut.azimuth = angulo_adq + print("TIEMPO--------:",dataOut.utctime) + print("####################################################################") + ####print("angulos",dataOut.azimuth,len(dataOut.azimuth)) dataOut.flagNoData = False - return dataOut + ''' + #return dataOut class Block360(Operation): @@ -4392,9 +4523,10 @@ class Block360(Operation): #print(data.azimuth[self.index]) #print("index",self.index) - self.__buffer2[self.__profIndex] = data.azimuth[self.index] + #####self.__buffer2[self.__profIndex] = data.azimuth[self.index] + self.__buffer2[self.__profIndex] = data.azimuth #print("q pasa") - self.index+=1 + #####self.index+=1 #print("index",self.index,data.azimuth[:10]) self.__profIndex += 1 return #················· Remove DC··································· @@ -4424,7 +4556,7 @@ class Block360(Operation): data_p = None #print("dataOu",dataOut.dataPP_POW) self.putData(data=dataOut,mode = self.mode) - #print("profIndex",self.__profIndex) + ##### print("profIndex",self.__profIndex) if self.__profIndex == self.n: data_360,n,data_p = self.pushData(data=dataOut) self.__dataReady = True @@ -4441,32 +4573,35 @@ class Block360(Operation): if data_360 is None: return None, None,None + avgdatatime = self.__initime + if self.n==1: + avgdatatime = datatime deltatime = datatime - self.__lastdatatime self.__initime = datatime #print(data_360.shape,avgdatatime,data_p.shape) return data_360,avgdatatime,data_p def run(self, dataOut,n = None,mode=None,**kwargs): - ####print("BLOCK 360 HERE WE GO MOMENTOS") + #print("BLOCK 360 HERE WE GO MOMENTOS") if not self.isConfig: self.setup(dataOut = dataOut, n = n ,mode= mode ,**kwargs) - self.index = 0 + ####self.index = 0 #print("comova",self.isConfig) self.isConfig = True - if self.index==dataOut.azimuth.shape[0]: - self.index=0 + ####if self.index==dataOut.azimuth.shape[0]: + #### self.index=0 data_360, avgdatatime,data_p = self.blockOp(dataOut, dataOut.utctime) dataOut.flagNoData = True if self.__dataReady: dataOut.data_360 = data_360 # S ##print("---------------------------------------------------------------------------------") - ##print("---------------------------DATAREADY---------------------------------------------") + #####print("---------------------------DATAREADY---------------------------------------------") ##print("---------------------------------------------------------------------------------") ##print("data_360",dataOut.data_360.shape) dataOut.data_azi = data_p - ##print("azi: ",dataOut.data_azi) + #####print("azi: ",dataOut.data_azi) #print("jroproc_parameters",data_p[0],data_p[-1])#,data_360.shape,avgdatatime) dataOut.utctime = avgdatatime dataOut.flagNoData = False diff --git a/schainpy/model/utils/scp.py b/schainpy/model/utils/scp.py index 734acb7..16fc7d7 100644 --- a/schainpy/model/utils/scp.py +++ b/schainpy/model/utils/scp.py @@ -461,4 +461,4 @@ class SCPClient(object): class SCPException(Exception): """SCP exception class""" - pass \ No newline at end of file + pass diff --git a/schainpy/scripts/IQ_digitalRF.py b/schainpy/scripts/IQ_digitalRF.py new file mode 100644 index 0000000..9925d06 --- /dev/null +++ b/schainpy/scripts/IQ_digitalRF.py @@ -0,0 +1,72 @@ +import os, sys +import datetime +import time +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 = '/home/alex/Downloads/test_rawdata' +path = '/DATA_RM/WR_POT_09_2' +figpath = '/home/alex/Downloads' +figpath_pp = "/home/soporte/Pictures/TEST_POT" +################# RANGO DE PLOTEO###################################### +dBmin = '30' +dBmax = '60' +xmin = '0' +xmax ='24' +ymin = '0' +ymax = '600' +########################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="2021/01/01", #"2020/01/01",#today, + endDate= "2021/12/01", #"2020/12/30",#today, + 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()) +''' +opObj11 = procUnitConfObjA.addOperation(name='PulsePairVoltage', optype='other') +opObj11.addParameter(name='n', value='256', format='int') +opObj11.addParameter(name='removeDC', value=1, format='int') +''' + +_type="iq" +opObj10 = procUnitConfObjA.addOperation(name='ScopePlot', optype='external') +#opObj10.addParameter(name='id', value='12') +opObj10.addParameter(name='wintitle', value=_type ) +opObj10.addParameter(name='type', value=_type) + + +''' +type="WeatherPower" +opObj10 = procUnitConfObjA.addOperation(name='PulsepairPowerPlot', optype='external') +#opObj10.addParameter(name='id', value='12') +opObj10.addParameter(name='wintitle', value=type ) + +opObj11 = procUnitConfObjA.addOperation(name='PulsepairVelocityPlot', optype='other') +opObj11.addParameter(name='xmax', value=8) +''' + +controllerObj.start() diff --git a/schainpy/scripts/SOPHY_test0001.py b/schainpy/scripts/SOPHY_test0001.py new file mode 100644 index 0000000..fb87c70 --- /dev/null +++ b/schainpy/scripts/SOPHY_test0001.py @@ -0,0 +1,118 @@ +# Ing. AVP +# 01/11/2021 +# ARCHIVO DE LECTURA +import os, sys +import datetime +import time +from schainpy.controller import Project +print("----[Setup]-RadarMeteorologico--------") +Vel = 10 +modo_proc = 0 # 0 Pulse Pair 1 Spectros +#-----------PATH DE DATOS-----------------------# +#------------VERIFICAR SIEMPRE LA FECHA DE LA DATA +path = "/DATA_RM/10" +path_ped = "/DATA_RM/TEST_PEDESTAL/P20211110-171003" +figpath_pp = "/home/soporte/Pictures/TEST_POT" +figpath_ppi_pp = "/home/soporte/Pictures/ppi_PP_30DIC_4" +#------------------------------------------------------------------- +print("----[OPCIONES]------------------------") +op_plot = 0 +op_integration = 1 +op_save = 1 +op_plot_spec = 0 +#------------------------------------- +################# RANGO DE PLOTEO###################################### +dBmin = '1' +dBmax = '85' +xmin = '17.1' +xmax = '17.25' +ymin = '0' +ymax = '600' +#-------------------NRO Perfiles PROCESAMIENTO -------------------- +V=Vel +IPP=400*1e-6 +n= int(1/(V*IPP)) +print("* n - NRO Perfiles Proc:", n ) +time.sleep(3) + +#------------------------SIGNAL CHAIN ------------------------------ +desc = "USRP_test" +filename = "USRP_processing.xml" +controllerObj = Project() +controllerObj.setup(id = '191', name='Test_USRP', description=desc) +######################## UNIDAD DE LECTURA############################# +readUnitConfObj = controllerObj.addReadUnit(datatype = 'DigitalRFReader', + path = path, + startDate= "2021/11/10",#today, + endDate = "2021/12/30",#today, + startTime= '00:00:25', + endTime = '23:59:59', + delay = 0, + online = 0, + walk = 1, + ippKm = 60) + +opObj11 = readUnitConfObj.addOperation(name='printInfo') +procUnitConfObjA = controllerObj.addProcUnit(datatype='VoltageProc',inputId=readUnitConfObj.getId()) + +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='400', format='int') + +if modo_proc ==0: + #----------------------------------------PULSE PAIR --------------------------------------------------# + opObj11 = procUnitConfObjA.addOperation(name='PulsePair', optype='other') + opObj11.addParameter(name='n', value=int(n), format='int')#10 VOY A USAR 250 DADO QUE LA VELOCIDAD ES 10 GRADOS + #opObj11.addParameter(name='removeDC', value=1, format='int') + #------------------------ METODO Parametros ----------------------------------------------------------- + procUnitConfObjB= controllerObj.addProcUnit(datatype='ParametersProc',inputId=procUnitConfObjA.getId()) + if op_plot==1: + opObj11 = procUnitConfObjB.addOperation(name='GenericRTIPlot',optype='external') + opObj11.addParameter(name='attr_data', value='dataPP_POW') + opObj11.addParameter(name='colormap', value='jet') + #opObj11.addParameter(name='xmin', value=xmin) + #opObj11.addParameter(name='xmax', value=xmax) + opObj11.addParameter(name='zmin', value=dBmin) + opObj11.addParameter(name='zmax', value=dBmax) + opObj11.addParameter(name='save', value=figpath_pp) + opObj11.addParameter(name='showprofile', value=0) + opObj11.addParameter(name='save_period', value=50) + + ####################### METODO ESCRITURA ####################################################################### + + if op_integration==1: + V=V + blocksPerfile=100 + print("* Velocidad del Pedestal:",V) + tmp_blocksPerfile = 100 + f_a_p= int(tmp_blocksPerfile/V) + + opObj11 = procUnitConfObjB.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='blocksPerfile', value=blocksPerfile, format='int') + opObj11.addParameter(name='n_Muestras_p', value='100', format='float') + opObj11.addParameter(name='f_a_p', value=f_a_p, format='int') + opObj11.addParameter(name='online', value='0', format='int') + + opObj11 = procUnitConfObjB.addOperation(name='Block360') + opObj11.addParameter(name='n', value='10', format='int') + opObj11.addParameter(name='mode', value=modo_proc, format='int') + + # este bloque funciona bien con divisores de 360 no olvidar 0 10 20 30 40 60 90 120 180 + + opObj11= procUnitConfObjB.addOperation(name='WeatherPlot',optype='other') + opObj11.addParameter(name='save', value=figpath_ppi_pp) + opObj11.addParameter(name='save_period', value=1) + + if op_save==1: + opObj10 = procUnitConfObjB.addOperation(name='HDFWriter') + opObj10.addParameter(name='path',value=figpath_ppi_pp) + #opObj10.addParameter(name='mode',value=0) + opObj10.addParameter(name='blocksPerFile',value='100',format='int') + opObj10.addParameter(name='metadataList',value='utctimeInit,timeZone,paramInterval,profileIndex,channelList,heightList,flagDataAsBlock',format='list') + opObj10.addParameter(name='dataList',value='dataPP_POW,dataPP_DOP,azimuth,utctime',format='list')#,format='list' + +controllerObj.start() diff --git a/schainpy/scripts/avp_001.py b/schainpy/scripts/avp_001.py new file mode 100644 index 0000000..f121c2b --- /dev/null +++ b/schainpy/scripts/avp_001.py @@ -0,0 +1,14 @@ +import numpy +a= numpy.array([0,1,2,3,4,5,10,11,12,18,19,20,21,22,23,24,25,26,27,28]) +print(a) +list=[] +list2=[] +for i in reversed(range(1,len(a))): + dif=int(a[i])-int(a[i-1]) + print(i,a[i],dif ) + if dif>1: + list.append(i-1) + list2.append(dif-1) +print("result") +print(list) +print(list2) diff --git a/schainpy/scripts/basic_proc00001.py b/schainpy/scripts/basic_proc00001.py index 152b483..5c43321 100644 --- a/schainpy/scripts/basic_proc00001.py +++ b/schainpy/scripts/basic_proc00001.py @@ -22,19 +22,38 @@ from schainpy.controller import Project ######## n = 1/(V*IPP) ############################# ######## VELOCIDAD DEL PEDESTAL ###################### print("SETUP- RADAR METEOROLOGICO") -V = 10 +V = 6 mode = 1 -#path = '/DATA_RM/23/6v' -####path = '/DATA_RM/TEST_INTEGRACION_2M' -#path = '/DATA_RM/TEST_19OCTUBRE/10MHZ' -path = '/DATA_RM/WR_20_OCT' +#--------------------------PATH ----------------------------- +# path = '/DATA_RM/23/6v' +# path = '/DATA_RM/TEST_INTEGRACION_2M' +# path = '/DATA_RM/TEST_19OCTUBRE/10MHZ' +# path = '/DATA_RM/WR_20_OCT' #### path_ped='/DATA_RM/TEST_PEDESTAL/P20211012-082745' ####path_ped='/DATA_RM/TEST_PEDESTAL/P20211019-192244' -figpath_pp = "/home/soporte/Pictures/TEST_PP" -figpath_spec = "/home/soporte/Pictures/TEST_MOM" +#path = '/DATA_RM/WR_POT_09_1' +#path = '/DATA_RM/WR_POT_09_2' +#path ="/DATA_RM/10" +#path ="/DATA_RM/11" +#path ="/DATA_RM/DRONE/2MHZ_6V" +path ="/DATA_RM/DRONE/2MHZ_10V_ELEVACION" +path ="/DATA_RM/DRONE/2MHZ_6V_AZIMUTH" +#-------------------------PATH-PLOTEO------------------------------------ +#figpath_pp = "/home/soporte/Pictures/TEST_PP" +#figpath_spec = "/home/soporte/Pictures/TEST_MOM_15" +#figpath_spec = "/home/soporte/Pictures/11_" +figpath_spec = "/home/soporte/Pictures/23NOV" +figpath_spec = "/home/soporte/Pictures/23NOV_TEST_AZI" +figpath_pp = "/home/soporte/Pictures/TEST_POT" +figpath_pp = "/home/soporte/Pictures/TEST_POT_10_" + + +#--------------------------OPCIONES----------------------------------- plot = 0 -integration = 1 +integration = 0 save = 0 +plot_spec = 1 +#------------------------------------------------------------------------- if save == 1: if mode==0: path_save = '/DATA_RM/TEST_HDF5_PP_23/6v' @@ -68,16 +87,16 @@ if save ==1: print("* Integracion de datos :",integration) -time.sleep(15) +time.sleep(3) #remotefolder = "/home/wmaster/graficos" ####################################################################### ################# RANGO DE PLOTEO###################################### -dBmin = '1' -dBmax = '65' -xmin = '13.2' -xmax = '13.5' -ymin = '0' -ymax = '60' +dBmin = '8' +dBmax = '35' +xmin = '12.1'#17.1,17.5 +xmax = '12.2'#17.2,17.8 +ymin = '0'#### PONER A 0 +ymax = '8'#### PONER A 8 ####################################################################### ########################FECHA########################################## str = datetime.date.today() @@ -96,13 +115,13 @@ controllerObj.setup(id = '191', name='Test_USRP', description=desc) ####################################################################### readUnitConfObj = controllerObj.addReadUnit(datatype='DigitalRFReader', path=path, - startDate="2021/01/01",#today, - endDate="2021/12/30",#today, - startTime='00:00:00', - endTime='23:59:59', + startDate="2021/11/23",#today, + endDate="2021/12/23",#today, + startTime='15:00:00',#'17:39:25', + endTime='16:00:59',#23:59:59', delay=0, #set=0, - online=0, + online=1, walk=1, ippKm = 60) @@ -110,6 +129,22 @@ opObj11 = readUnitConfObj.addOperation(name='printInfo') procUnitConfObjA = controllerObj.addProcUnit(datatype='VoltageProc', inputId=readUnitConfObj.getId()) +opObj11 = procUnitConfObjA.addOperation(name='setH0') +opObj11.addParameter(name='h0', value='-3.3', format='float') +#-2.8 5MHZ +#-3.3 2MHZ + +###opObj11 = procUnitConfObjA.addOperation(name='selectChannels') +###opObj11.addParameter(name='channelList', value='[1]',format='intList') + + +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='160', format='int') +## 400 PARA 5MHZ 12KM 2000 +## 160 ṔARA 2MHZ 12KM 800 + if mode ==0: ####################### METODO PULSE PAIR ###################################################################### opObj11 = procUnitConfObjA.addOperation(name='PulsePair', optype='other') @@ -123,6 +158,8 @@ if mode ==0: opObj11.addParameter(name='colormap', value='jet') opObj11.addParameter(name='xmin', value=xmin) opObj11.addParameter(name='xmax', value=xmax) + #opObj11.addParameter(name='ymin', value=ymin) + #opObj11.addParameter(name='ymax', value=ymax) opObj11.addParameter(name='zmin', value=dBmin) opObj11.addParameter(name='zmax', value=dBmax) opObj11.addParameter(name='save', value=figpath_pp) @@ -167,20 +204,49 @@ else: procUnitConfObjB = controllerObj.addProcUnit(datatype='SpectraProc', inputId=procUnitConfObjA.getId()) procUnitConfObjB.addParameter(name='nFFTPoints', value=n, format='int') procUnitConfObjB.addParameter(name='nProfiles' , value=n, format='int') + if plot_spec==1: + ''' + opObj11 = procUnitConfObjB.addOperation(name='SpectraPlot', optype='external') + #.addParameter(name='id', value='2', format='int') + opObj11.addParameter(name='wintitle', value='SpectraPlot', format='str') + opObj11.addParameter(name='channelList', value='1', format='intlist') + #opObj11.addParameter(name='xmin', value=xmin) + #opObj11.addParameter(name='xmax', value=xmax) + opObj11.addParameter(name='ymin', value=ymin) + opObj11.addParameter(name='ymax', value=ymax) + opObj11.addParameter(name='zmin', value=dBmin, format='int') + opObj11.addParameter(name='zmax', value=dBmax, format='int') + opObj11.addParameter(name='save', value=figpath_spec) + opObj11.addParameter(name='showprofile', value=0) + opObj11.addParameter(name='save_period', value=1) + ''' + opObj11 = procUnitConfObjB.addOperation(name='RTIPlot', optype='external') + #.addParameter(name='id', value='2', format='int') + opObj11.addParameter(name='wintitle', value='RTIPlot', format='str') + opObj11.addParameter(name='channelList', value='1', format='intlist') + opObj11.addParameter(name='xmin', value=xmin) + opObj11.addParameter(name='xmax', value=xmax) + opObj11.addParameter(name='ymin', value=ymin) + opObj11.addParameter(name='ymax', value=ymax) + opObj11.addParameter(name='zmin', value=dBmin, format='int') + opObj11.addParameter(name='zmax', value=dBmax, format='int') + opObj11.addParameter(name='save', value=figpath_spec) + opObj11.addParameter(name='showprofile', value=0) + opObj11.addParameter(name='save_period', value=1) procUnitConfObjC = controllerObj.addProcUnit(datatype='ParametersProc',inputId=procUnitConfObjB.getId()) procUnitConfObjC.addOperation(name='SpectralMoments') if plot==1: - dBmin = '1' - dBmax = '65' opObj11 = procUnitConfObjC.addOperation(name='PowerPlot',optype='external') opObj11.addParameter(name='xmin', value=xmin) opObj11.addParameter(name='xmax', value=xmax) + opObj11.addParameter(name='ymin', value=ymin) + opObj11.addParameter(name='ymax', value=ymax) opObj11.addParameter(name='zmin', value=dBmin) opObj11.addParameter(name='zmax', value=dBmax) opObj11.addParameter(name='save', value=figpath_spec) opObj11.addParameter(name='showprofile', value=0) - opObj11.addParameter(name='save_period', value=10) + opObj11.addParameter(name='save_period', value=1) if save==1: opObj10 = procUnitConfObjC.addOperation(name='HDFWriter') diff --git a/schainpy/scripts/basic_proc00002.py b/schainpy/scripts/basic_proc00002.py index 31e650c..1299842 100644 --- a/schainpy/scripts/basic_proc00002.py +++ b/schainpy/scripts/basic_proc00002.py @@ -22,27 +22,53 @@ from schainpy.controller import Project ######## n = 1/(V*IPP) ############################# ######## VELOCIDAD DEL PEDESTAL ###################### print("SETUP- RADAR METEOROLOGICO") +V = 6 V = 10 -mode = 0 -#path = '/DATA_RM/23/6v' -#path = '/DATA_RM/TEST_INTEGRACION_2M' -path = '/DATA_RM/WR_20_OCT' +mode = 1 +#--------------------------PATH ----------------------------- +# path = '/DATA_RM/23/6v' +# path = '/DATA_RM/TEST_INTEGRACION_2M' +# path = '/DATA_RM/TEST_19OCTUBRE/10MHZ' +# path = '/DATA_RM/WR_20_OCT' +#### path_ped='/DATA_RM/TEST_PEDESTAL/P20211012-082745' +####path_ped='/DATA_RM/TEST_PEDESTAL/P20211019-192244' +path ="/DATA_RM/10" +# path = '/DATA_RM/WR_POT_09_1' +#path ="/DATA_RM/11" +#path ="/DATA_RM/11" +#-------------------------PATH-PLOTEO------------------------------------ +#figpath_pp = "/home/soporte/Pictures/TEST_PP" +#figpath_spec = "/home/soporte/Pictures/TEST_MOM" +figpath_spec = "/home/soporte/Pictures/ppi" +figpath_ppi = "/home/soporte/Pictures/ppi_SPEC_10DIC" +figpath_ppi_pp = "/home/soporte/Pictures/ppi_2_10" +figpath_pp = "/home/soporte/Pictures/TEST_POT" +figpath_pp = "/home/soporte/Pictures/TEST_POT2" #path_ped='/DATA_RM/TEST_PEDESTAL/P20211012-082745' -path_ped='/DATA_RM/TEST_PEDESTAL/P20211020-131248' +#path_ped='/DATA_RM/TEST_PEDESTAL/P20211020-131248' +#path_ped='/DATA_RM/TEST_PEDESTAL/P20211110-171003' +#path_ped='/DATA_RM/TEST_PEDESTAL/P20211111-173856' +path_ped = "/DATA_RM/TEST_PEDESTAL/P20211110-171003" -figpath_pp = "/home/soporte/Pictures/TEST_PP" + +figpath_pp = "/home/soporte/Pictures/25TEST_PP" figpath_mom = "/home/soporte/Pictures/TEST_MOM" +#--------------------------OPCIONES----------------------------------- plot = 0 integration = 1 -save = 0 +save = 1 if save == 1: if mode==0: path_save = '/DATA_RM/TEST_HDF5_PP_23/6v' path_save = '/DATA_RM/TEST_HDF5_PP' path_save = '/DATA_RM/TEST_HDF5_PP_100' + path_save = '/DATA_RM/TEST_EMPTHY' else: path_save = '/DATA_RM/TEST_HDF5_SPEC_23_V2/6v' + path_save = '/DATA_RM/TEST_EMPTHY_SPEC' + path_save = '/DATA_RM/LAST_TEST_16_VACIO3' + path_save = '/DATA_RM/LAST_TEST_30_360' print("* PATH data ADQ :", path) print("* Velocidad Pedestal :",V,"°/seg") @@ -69,14 +95,14 @@ if save ==1: print("* Integracion de datos :",integration) -time.sleep(5) +time.sleep(3) #remotefolder = "/home/wmaster/graficos" ####################################################################### ################# RANGO DE PLOTEO###################################### dBmin = '1' dBmax = '85' -xmin = '15' -xmax = '15.25' +xmin = '17' +xmax = '17.25' ymin = '0' ymax = '600' ####################################################################### @@ -97,9 +123,9 @@ controllerObj.setup(id = '191', name='Test_USRP', description=desc) ####################################################################### readUnitConfObj = controllerObj.addReadUnit(datatype='DigitalRFReader', path=path, - startDate="2021/01/01",#today, + startDate="2021/11/10",#today, endDate="2021/12/30",#today, - startTime='00:00:00', + startTime='17:10:25', endTime='23:59:59', delay=0, #set=0, @@ -109,7 +135,16 @@ readUnitConfObj = controllerObj.addReadUnit(datatype='DigitalRFReader', opObj11 = readUnitConfObj.addOperation(name='printInfo') -procUnitConfObjA = controllerObj.addProcUnit(datatype='VoltageProc', inputId=readUnitConfObj.getId()) +procUnitConfObjA = controllerObj.addProcUnit(datatype='VoltageProc',inputId=readUnitConfObj.getId()) + + +#opObj11 = procUnitConfObjA.addOperation(name='setH0') +#opObj11.addParameter(name='h0', value='-2.8', format='float') + +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='400', format='int') if mode ==0: ####################### METODO PULSE PAIR ###################################################################### @@ -131,16 +166,10 @@ if mode ==0: opObj11.addParameter(name='save_period', value=50) ####################### METODO ESCRITURA ####################################################################### - if save==1: - opObj10 = procUnitConfObjB.addOperation(name='HDFWriter') - opObj10.addParameter(name='path',value=path_save) - #opObj10.addParameter(name='mode',value=0) - opObj10.addParameter(name='blocksPerFile',value='100',format='int') - opObj10.addParameter(name='metadataList',value='utctimeInit,timeZone,paramInterval,profileIndex,channelList,heightList,flagDataAsBlock',format='list') - opObj10.addParameter(name='dataList',value='dataPP_POW,dataPP_DOP,utctime',format='list')#,format='list' + if integration==1: - V=10 - blocksPerfile=360 + V=V + blocksPerfile=100 print("* Velocidad del Pedestal:",V) tmp_blocksPerfile = 100 f_a_p= int(tmp_blocksPerfile/V) @@ -153,15 +182,24 @@ if mode ==0: opObj11.addParameter(name='n_Muestras_p', value='100', format='float') opObj11.addParameter(name='f_a_p', value=f_a_p, format='int') opObj11.addParameter(name='online', value='0', format='int') - + ''' opObj11 = procUnitConfObjB.addOperation(name='Block360') opObj11.addParameter(name='n', value='10', format='int') opObj11.addParameter(name='mode', value=mode, format='int') - + ''' # este bloque funciona bien con divisores de 360 no olvidar 0 10 20 30 40 60 90 120 180 - + ''' opObj11= procUnitConfObjB.addOperation(name='WeatherPlot',optype='other') - + opObj11.addParameter(name='save', value=figpath_ppi_pp) + opObj11.addParameter(name='save_period', value=1) + ''' + if save==1: + opObj10 = procUnitConfObjB.addOperation(name='HDFWriter') + opObj10.addParameter(name='path',value=path_save) + #opObj10.addParameter(name='mode',value=0) + opObj10.addParameter(name='blocksPerFile',value='100',format='int') + opObj10.addParameter(name='metadataList',value='utctimeInit,timeZone,paramInterval,profileIndex,channelList,heightList,flagDataAsBlock',format='list') + opObj10.addParameter(name='dataList',value='dataPP_POW,dataPP_DOP,azimuth,utctime',format='list')#,format='list' else: ####################### METODO SPECTROS ###################################################################### @@ -183,18 +221,10 @@ else: opObj11.addParameter(name='showprofile', value=0) opObj11.addParameter(name='save_period', value=100) - if save==1: - opObj10 = procUnitConfObjC.addOperation(name='HDFWriter') - opObj10.addParameter(name='path',value=path_save) - #opObj10.addParameter(name='mode',value=0) - opObj10.addParameter(name='blocksPerFile',value='360',format='int') - #opObj10.addParameter(name='metadataList',value='utctimeInit,heightList,nIncohInt,nCohInt,nProfiles,channelList',format='list')#profileIndex - opObj10.addParameter(name='metadataList',value='utctimeInit,heightList,nIncohInt,nCohInt,nProfiles,channelList',format='list')#profileIndex - opObj10.addParameter(name='dataList',value='data_pow,data_dop,utctime',format='list')#,format='list' if integration==1: - V=10 - blocksPerfile=360 + V=V + blocksPerfile=100 print("* Velocidad del Pedestal:",V) tmp_blocksPerfile = 100 f_a_p= int(tmp_blocksPerfile/V) @@ -209,9 +239,31 @@ else: opObj11.addParameter(name='online', value='0', format='int') opObj11 = procUnitConfObjC.addOperation(name='Block360') - opObj11.addParameter(name='n', value='10', format='int') + opObj11.addParameter(name='n', value='1', format='int') opObj11.addParameter(name='mode', value=mode, format='int') + ''' + # este bloque funciona bien con divisores de 360 no olvidar 0 10 20 30 40 60 90 120 180 + opObj11= procUnitConfObjC.addOperation(name='WeatherPlot',optype='other') + opObj11.addParameter(name='save', value=figpath_ppi) + opObj11.addParameter(name='save_period', value=1) + ''' + + if save==1: + opObj10 = procUnitConfObjC.addOperation(name='HDFWriter') + opObj10.addParameter(name='path',value=path_save) + opObj10.addParameter(name='mode',value='weather') + opObj10.addParameter(name='blocksPerFile',value='360',format='int') + #opObj10.addParameter(name='metadataList',value='utctimeInit,heightList,nIncohInt,nCohInt,nProfiles,channelList',format='list')#profileIndex + opObj10.addParameter(name='metadataList',value='utctimeInit,heightList,nIncohInt,nCohInt,nProfiles,channelList',format='list')#profileIndex + #opObj10.addParameter(name='dataList',value='data_pow,data_dop,azimuth,utctime',format='list')#,format='list' + opObj10.addParameter(name='dataList',value='data_360,data_azi,utctime',format='list')#,format='list' + + + ''' # este bloque funciona bien con divisores de 360 no olvidar 0 10 20 30 40 60 90 120 180 opObj11= procUnitConfObjC.addOperation(name='WeatherPlot',optype='other') + opObj11.addParameter(name='save', value=figpath_ppi) + opObj11.addParameter(name='save_period', value=1) + ''' controllerObj.start() diff --git a/schainpy/scripts/check_pedestal.py b/schainpy/scripts/check_pedestal.py index 25fc88a..a9bb9b2 100644 --- a/schainpy/scripts/check_pedestal.py +++ b/schainpy/scripts/check_pedestal.py @@ -13,6 +13,9 @@ import matplotlib.pyplot as plt #path_ped = '/DATA_RM/TEST_PEDESTAL/P20211012-082745' path_ped = '/DATA_RM/TEST_PEDESTAL/P20211020-131248' +path_ped = '/DATA_RM/TEST_PEDESTAL/P20211110-171003' +path_ped = '/DATA_RM/TEST_PEDESTAL/P20211111-173856' +#path_ped = '/DATA_RM/TEST_PEDESTAL/P20211111-173409' # Metodo para verificar numero def isNumber(str): try: @@ -108,7 +111,7 @@ t=numpy.arange(len(ele_pos))*0.01/60.0 plt.plot(t,ele_pos,label='ELEVATION_POS',color='red')#*10 #ax.set_xlim(0, 9) -ax.set_ylim(-5, 400) +ax.set_ylim(-5, 20) plt.ylabel("Azimuth Position") plt.xlabel("Muestra") plt.title('Azimuth Position vs Muestra ', fontsize=20) diff --git a/schainpy/scripts/pp__proc.py b/schainpy/scripts/pp__proc.py new file mode 100644 index 0000000..3c652f0 --- /dev/null +++ b/schainpy/scripts/pp__proc.py @@ -0,0 +1,147 @@ +#!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/TEST_ONLINE' +#path = '/DATA_RM/TEST_INTEGRACION/ADQ_OFFLINE/' +# ULTIMO TEST 22 DE SEPTIEMBRE +path = '/DATA_RM/USRP_22' +#path_pp = '/DATA_RM/TEST_HDF5' +# UTIMO TEST 22 DE SEPTIEMBRE +path_pp = '/DATA_RM/TEST_HDF5_PP_22' +###################################################### +##### OJO TENER EN CUENTA EL n= para el Pulse Pair ### +###################################################### +######## BUSCAMOS EL numero de IPP equivalente 1°##### +######## Sea V la velocidad del Pedestal en °/seg##### +######## 1° sera Recorrido en un tiempo de 1/V ###### +######## IPP del Radar 400 useg --> 60 Km ############ +######## n = 1/(V*IPP) , NUMERO DE IPP ############# +######## n = 1/(V*IPP) ############################# +V=2 +IPP=400*1e-6 +n= 1/(V*IPP) +print("n numero de Perfiles a procesar con Pulse Pair: ", n) + + + + +figpath = '/home/soporte/Pictures/TEST_INTEGRACION_IMG' +#remotefolder = "/home/wmaster/graficos" +####################################################################### +################# RANGO DE PLOTEO###################################### +####################################################################### +dBmin = '-5' +dBmax = '20' +xmin = '0' +xmax ='24' +ymin = '0' +ymax = '600' +####################################################################### +########################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="2021/01/01",#today, + endDate="2021/12/30",#today, + 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()) + +# +# 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='70312500') +opObj11 = procUnitConfObjA.addOperation(name='PulsePair', optype='other') +opObj11.addParameter(name='n', value=int(n), format='int')#10 VOY A USAR 250 DADO QUE LA VELOCIDAD ES 10 GRADOS +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, formatyesterday='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()) +opObj10 = procUnitConfObjB.addOperation(name='HDFWriter') +opObj10.addParameter(name='path',value=path_pp) +#opObj10.addParameter(name='mode',value=0) +opObj10.addParameter(name='blocksPerFile',value='100',format='int') +opObj10.addParameter(name='metadataList',value='utctimeInit,timeZone,paramInterval,profileIndex,channelList,heightList,flagDataAsBlock',format='list') +opObj10.addParameter(name='dataList',value='dataPP_POW,dataPP_DOP,utctime',format='list')#,format='list' + +controllerObj.start() diff --git a/schainpy/scripts/pp_proc.py b/schainpy/scripts/pp_proc.py new file mode 100644 index 0000000..c84ca0a --- /dev/null +++ b/schainpy/scripts/pp_proc.py @@ -0,0 +1,115 @@ +#!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/TEST_ONLINE' +#path = '/DATA_RM/TEST_INTEGRACION/ADQ_OFFLINE/' +# ULTIMO TEST 22 DE SEPTIEMBRE +path = '/DATA_RM/USRP_22' +#path_pp = '/DATA_RM/TEST_HDF5' +# UTIMO TEST 22 DE SEPTIEMBRE +path_pp = '/DATA_RM/TEST_HDF5_PP_22' +###################################################### +##### OJO TENER EN CUENTA EL n= para el Pulse Pair ### +###################################################### +######## BUSCAMOS EL numero de IPP equivalente 1°##### +######## Sea V la velocidad del Pedestal en °/seg##### +######## 1° sera Recorrido en un tiempo de 1/V ###### +######## IPP del Radar 400 useg --> 60 Km ############ +######## n = 1/(V*IPP) , NUMERO DE IPP ############# +######## n = 1/(V*IPP) ############################# +V=2 +IPP=400*1e-6 +n= 1/(V*IPP) +print("n numero de Perfiles a procesar con Pulse Pair: ", n) + + + + +figpath = '/home/soporte/Pictures/TEST_INTEGRACION_IMG' +#remotefolder = "/home/wmaster/graficos" +####################################################################### +################# RANGO DE PLOTEO###################################### +####################################################################### +dBmin = '-5' +dBmax = '20' +xmin = '0' +xmax ='24' +ymin = '0' +ymax = '600' +####################################################################### +########################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="2021/01/01",#today, + endDate="2021/12/30",#today, + 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()) + +# +# 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='70312500') +opObj11 = procUnitConfObjA.addOperation(name='PulsePair', optype='other') +opObj11.addParameter(name='n', value=int(n), format='int')#10 VOY A USAR 250 DADO QUE LA VELOCIDAD ES 10 GRADOS +opObj11.addParameter(name='removeDC', value=1, format='int') + + +####################################################################### +########## OPERACIONES ParametersProc######################## +####################################################################### + +procUnitConfObjB= controllerObj.addProcUnit(datatype='ParametersProc',inputId=procUnitConfObjA.getId()) +opObj10 = procUnitConfObjB.addOperation(name='HDFWriter') +opObj10.addParameter(name='path',value=path_pp) +#opObj10.addParameter(name='mode',value=0) +opObj10.addParameter(name='blocksPerFile',value='100',format='int') +opObj10.addParameter(name='metadataList',value='utctimeInit,timeZone,paramInterval,profileIndex,channelList,heightList,flagDataAsBlock',format='list') +opObj10.addParameter(name='dataList',value='dataPP_POW,dataPP_DOP,utctime',format='list')#,format='list' + +controllerObj.start() diff --git a/schainpy/scripts/spec_momentos_proc.py b/schainpy/scripts/spec_momentos_proc.py new file mode 100644 index 0000000..df4fa76 --- /dev/null +++ b/schainpy/scripts/spec_momentos_proc.py @@ -0,0 +1,88 @@ +#!python + +import os, sys +import datetime +import time + +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 = '/DATA_RM/TEST_19OCTUBRE/10MHZ' +#path_pp = '/DATA_RM/TEST_HDF5' +path_pp = '/DATA_RM/TEST_HDF5_19OCT' + +####################################################################### +################# RANGO DE PLOTEO###################################### +####################################################################### +dBmin = '-5' +dBmax = '20' +xmin = '0' +xmax ='24' +ymin = '0' +ymax = '600' +####################################################################### +########################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="2021/01/01",#today, + endDate="2021/12/30",#today, + 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######################## +####################################################################### +V=10 # aca se coloca la velocidad +IPP=400*1e-6 +n= int(1/(V*IPP)) +print("n numero de Perfiles a procesar con nFFTPoints ", n) + +procUnitConfObjA = controllerObj.addProcUnit(datatype='VoltageProc', inputId=readUnitConfObj.getId()) + +procUnitConfObjB = controllerObj.addProcUnit(datatype='SpectraProc', inputId=procUnitConfObjA.getId()) +procUnitConfObjB.addParameter(name='nFFTPoints', value=n, format='int') +procUnitConfObjB.addParameter(name='nProfiles' , value=n, format='int') + +####################################################################### +########## OPERACIONES ParametersProc######################## +####################################################################### + +procUnitConfObjC= controllerObj.addProcUnit(datatype='ParametersProc',inputId=procUnitConfObjB.getId()) + +procUnitConfObjC.addOperation(name='SpectralMoments') + +opObj10 = procUnitConfObjC.addOperation(name='HDFWriter') +opObj10.addParameter(name='path',value=path_pp) +#opObj10.addParameter(name='mode',value=0) +opObj10.addParameter(name='blocksPerFile',value='100',format='int') +#opObj10.addParameter(name='metadataList',value='utctimeInit,heightList,nIncohInt,nCohInt,nProfiles,channelList',format='list')#profileIndex +opObj10.addParameter(name='metadataList',value='utctimeInit,heightList,nIncohInt,nCohInt,nProfiles,channelList',format='list')#profileIndex + +opObj10.addParameter(name='dataList',value='data_pow,data_dop,utctime',format='list')#,format='list' + +controllerObj.start() diff --git a/schainpy/scripts/test_wradlib.py b/schainpy/scripts/test_wradlib.py new file mode 100644 index 0000000..bd8057b --- /dev/null +++ b/schainpy/scripts/test_wradlib.py @@ -0,0 +1,36 @@ +import numpy as np +import matplotlib.pyplot as pl +import wradlib +import warnings +#export WRADLIB_DATA=/path/to/wradlib-data +warnings.filterwarnings('ignore') +''' +try: + get_ipython().magic('matplotlib inline') +except: + pl.ion() +''' +filename = wradlib.util.get_wradlib_data_file("/home/soporte/Downloads/raa00-dx_10908-0806021735-fbg---bin.gz") +img, meta = wradlib.io.read_dx(filename) +print("Shape of polar array: %r\n" % (img.shape,)) +print("Some meta data of the DX file:") +print("\tdatetime: %r" % (meta["datetime"],)) +print("\tRadar ID: %s" % (meta["radarid"],)) + +img[200:250,:]= np.ones([50,img.shape[1]])*np.nan + +img[300:360,:]= np.ones([60,img.shape[1]])*np.nan + +cgax, pm= wradlib.vis.plot_ppi(img) +txt = pl.title('Simple PPI') +print("coordenada angular",img[:,0],len(img[:,0])) +print("COORDENADA 0",img[0],len(img[0])) +cbar = pl.gcf().colorbar(pm, pad=0.075) + +#r = np.arange(40, 80) +#az = np.arange(200, 250) +#ax, pm = wradlib.vis.plot_ppi(img[200:250, 40:80], r, az, autoext=False) +#ax, pm = wradlib.vis.plot_ppi(img[200:250, 40:80], r, az) + +#txt = pl.title('Sector PPI') +pl.show() diff --git a/schainpy/sophy_test0001.py b/schainpy/sophy_test0001.py new file mode 100644 index 0000000..2e23e84 --- /dev/null +++ b/schainpy/sophy_test0001.py @@ -0,0 +1,17 @@ +# Ing. AVP +# 01/11/2021 +# ARCHIVO DE LECTURA +import os, sys +import datetime +import time +from schainpy.controller import Project +print("----[Setup]-RadarMeteorologico--------") +Vel = 6 +modo_proc = 1 +path = "/DATA_RM/10" +path_ped = "/DATA_RM/TEST_PEDESTAL/P20211111-173856" +print("----[OPCIONES]------------------------") +op_plot = 0 +op_integration = 0 +op_save = 0 +op_plot_spec = 0