##// END OF EJS Templates
Se realizar la lectura en modo online llamando al metodo digitalRFReader(self.path) en reemplazo del metodo reload(), grabando previamente el path de lectura o directorio superior donde se almacena la data. Adicionalmente, se ha definido un tiempo de espera de 3 segundos para dar tiempo suficiente al programa de adquisicion de generar archivos. ...
Se realizar la lectura en modo online llamando al metodo digitalRFReader(self.path) en reemplazo del metodo reload(), grabando previamente el path de lectura o directorio superior donde se almacena la data. Adicionalmente, se ha definido un tiempo de espera de 3 segundos para dar tiempo suficiente al programa de adquisicion de generar archivos. El archivo jroIO_digitalRF.py utiliza la libreria digital_rf cuya version actual es la 2.62( 2017 ) ,esta libreria no tiene definido el metodo o clase reload, este metodo existe en la version 2.0(2014), si uno revisa el archivo jroIO_usrp.py, esta unidad de lectura trabaja con la version 2.0 llamada digital_rf_hdf5, para hacer uso de esta unidad de lectura se instalan los programas correspondiente pero el formato y la informacion difiere un poco de la version actual. Se infiere entonces que al desarrollar del archivo jroIO_digitalRF.py, esperaba que la libreria aun tenga incluido el metodo reload con el update de las versiones pero este ya no es parte del desarrollo, Se realizo la consulta al desarrollador actual de digitalRF Ryan Voltz si se iba a incluir a futuro pero indico que no era necesario.

File last commit:

r602:92234dd29577
r1234:b6a76136b1f3
Show More
jroIO_matlab.py
272 lines | 8.2 KiB | text/x-python | PythonLexer
from schainpy.model.data.jrodata import *
from schainpy.model.proc.jroproc_base import ProcessingUnit, Operation
from schainpy.model.io.jroIO_base import *
import scipy.io as sio
import pprint
import numpy as np
from os import listdir
from os.path import isfile, join
import datetime
import cmath
class matoffReader(ProcessingUnit):
index=None
list=None
firsttime=True
utccounter=None
utcfiletime=None
utcmatcounter=0
utcfirst=None
utclist=None
def __init__(self):
self.dataOut = Spectra()
self.online = False
return
def __setHeader(self, datastuff):
self.dataOut.pairsList=[(0,1)]
self.dataOut.channelList = range(np.array(datastuff.get('power')).shape[1])
self.dataOut.nProfiles = len(np.array(datastuff.get('vel')).flatten()) #this!
self.dataOut.nIncohInt = 20
self.dataOut.nCohInt = 1 #this!
self.dataOut.ippSeconds = 0.004 #this!
self.dataOut.nFFTPoints = len(np.array(datastuff.get('vel')).flatten())
self.dataOut.timeZone = 0
self.dataOut.heightList = np.array(datastuff.get('hts')).flatten()
def __readFile(self, currentfile):
print "Reading from this file:" + currentfile
#filesplit=currentfile.split("\\")
filesplit=currentfile.split("/")
newsplit=filesplit[-2]
newnewsplit=newsplit.split(".")
newnewsplit=[int(i) for i in newnewsplit]
gooblist=datetime.datetime(newnewsplit[0],newnewsplit[1],newnewsplit[2],newnewsplit[3],newnewsplit[4],newnewsplit[5])
self.utcfirst=(gooblist-datetime.datetime(1970,1,1)).total_seconds()
newsplit=filesplit[-1]
newnewsplit=newsplit.split(".")
goobnum=newnewsplit[0]
goobnum=int(goobnum)
self.utcfirst=self.utcfirst+goobnum*2
# if (currentfile[43:]=='0.mat'):
# self.utcmatcounter=0
# self.utcfirst=self.utclist[self.index]
# if (self.utcmatcounter>60):
# self.utcmatcounter=0
# print self.utcmatcounter
print self.utcfirst
try:
datastuff=sio.loadmat(currentfile)
except:
return None, None
dataphase=datastuff.get('phase')
data3=datastuff.get('doppler0')
data4=datastuff.get('doppler1')
data3= np.array(data3)
data4 = np.array(data4)
datacoh=datastuff.get('coherence2')
datacohphase=datacoh*np.exp(-dataphase*1j)
# data31 = np.fliplr(data3)
# data41 = np.fliplr(data4)
data31 = data3.reshape((1,data3.shape[0],data3.shape[1]))
data41 = data4.reshape((1,data4.shape[0],data4.shape[1]))
datacohphase1 = datacohphase.reshape((1,datacoh.shape[0],datacoh.shape[1]))
datastack = np.vstack((data31,data41))
self.__setHeader(datastuff)
spc = datastack
cspc = datacohphase1
return spc, cspc
def __findFiles(self, path, startDate=None, endDate=None,startTime=datetime.time(0,0,0), endTime=datetime.time(23,59,59)):
if startDate == None:
startDate = datetime.date(1970,1,1)
if endDate == None:
endDate = datetime.date(2050,1,1)
startsearch1=datetime.datetime.combine(startDate,startTime)
startsearch2=(startsearch1-datetime.datetime(1970,1,1)).total_seconds()
endsearch1=datetime.datetime.combine(endDate,endTime)
endsearch2=(endsearch1-datetime.datetime(1970,1,1)).total_seconds()
dirList = listdir(path)
dirList = sorted(dirList)
dirListFiltered=[]
fileListFiltered=[]
utclist=[]
if not dirList:
print "No directories found"
return []
#if self.online:
# dirList= [dirList[-1]]
if self.online:
currentdate = datetime.datetime.now()
strsplit1=currentdate.strftime('%Y.%m.%d')
dirList = fnmatch.filter(dirList,strsplit1+'*')
for thisDir in dirList:
if not os.path.isdir(os.path.join(path, thisDir)):
continue
strsplit=thisDir.split('.')
timeints=[int(i) for i in strsplit]
timelist=datetime.datetime(timeints[0],timeints[1],timeints[2],timeints[3],timeints[4],timeints[5])
utctime=(timelist-datetime.datetime(1970,1,1)).total_seconds()
if not self.online:
if (utctime > endsearch2):
continue
if (utctime < startsearch2):
continue
dirListFiltered.append(thisDir)
utclist.append(utctime)
if not dirListFiltered:
print "filtro"
return []
for thisDir in dirListFiltered:
pathFile = os.path.join(self.path, thisDir)
fileList = os.listdir(pathFile)
if not fileList:
continue
for k in range(len(fileList)):
thisFile = str(k)+'.mat'
if not os.path.isfile(os.path.join(pathFile, thisFile)):
continue
fileListFiltered.append(os.path.join(pathFile, thisFile))
return fileListFiltered
def __getNextOnlineFile(self, seconds = 40):
filename = self.__getNextOfflineFile()
if filename:
return filename
ncurrentfiles = len(self.fileList)
nTries = 0
while (True):
filelist = self.__findFiles(self.path)
if len(filelist) > ncurrentfiles:
break
nTries += 1
if nTries > 3:
break
print "Waiting %d seconds ..." %seconds
time.sleep(40)
if not (len(filelist) > ncurrentfiles):
return None
self.fileList = filelist
filename = self.__getNextOfflineFile()
return filename
def __getNextOfflineFile(self):
if self.index >= len(self.fileList):
return None
filename=self.fileList[self.index]
self.index += 1
return filename
def __getNextFile(self):
if self.online:
filename = self.__getNextOnlineFile()
else:
filename = self.__getNextOfflineFile()
return filename
def setup(self, path, startDate=None, endDate=None,startTime=datetime.time(0,0,0), endTime=datetime.time(23,59,59)):
fileList = self.__findFiles(path, startDate, endDate, startTime, endTime)
if self.online:
self.index = len(fileList) -1
else:
self.index = 0
self.fileList = fileList
print "fin setup"
def run(self,path=None,startDate=None, endDate=None,
startTime=datetime.time(0,0,0),
endTime=datetime.time(23,59,59),
walk=True,timezone='ut',
all=0,online=False,ext=None,**kwargs):
self.path=path
self.ext=ext
self.startDate=startDate
self.endDate=endDate
self.startTime=startTime
self.endTime=endTime
self.online = online
self.dataOut.flagNoData = True
if (self.firsttime==True):
self.setup(path, startDate, endDate, startTime, endTime)
self.firsttime=False
if not self.fileList:
self.dataOut.flagNoData = True
print "lista vacia"
return
currentfile = self.__getNextFile()
if not currentfile:
"no file"
return
spc, cspc = self.__readFile(currentfile)
if spc!=None:
self.dataOut.data_spc = spc
self.dataOut.data_cspc = cspc
self.dataOut.utctime = self.utcfirst
self.dataOut.flagNoData = False
return 1