##// END OF EJS Templates
añadido FaradayIntegration para limpieza de datos, restringida la operación al funcionamiento con la pdata regular
añadido FaradayIntegration para limpieza de datos, restringida la operación al funcionamiento con la pdata regular

File last commit:

r1167:1f521b07c958
r1399:101813202a42
Show More
jroIO_matlab.py
272 lines | 8.3 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 = list(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