##// END OF EJS Templates
Writing Unit for Madrigal decorated (just for python 2x)
Writing Unit for Madrigal decorated (just for python 2x)

File last commit:

r1167:1f521b07c958
r1206:59caf7a2130e
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