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