jroIO_amisr.py
691 lines
| 24.1 KiB
| text/x-python
|
PythonLexer
|
r491 | ''' | |
@author: Daniel Suarez | |||
''' | |||
import os | |||
import sys | |||
import glob | |||
import fnmatch | |||
import datetime | |||
|
r497 | import time | |
|
r491 | import re | |
import h5py | |||
import numpy | |||
|
r568 | from schainpy.model.proc.jroproc_base import ProcessingUnit, Operation | |
from schainpy.model.data.jroamisr import AMISR | |||
|
r491 | ||
|
r587 | try: | |
from gevent import sleep | |||
except: | |||
from time import sleep | |||
|
r491 | class RadacHeader(): | |
def __init__(self, fp): | |||
header = 'Raw11/Data/RadacHeader' | |||
self.beamCodeByPulse = fp.get(header+'/BeamCode') | |||
self.beamCode = fp.get('Raw11/Data/Beamcodes') | |||
self.code = fp.get(header+'/Code') | |||
self.frameCount = fp.get(header+'/FrameCount') | |||
self.modeGroup = fp.get(header+'/ModeGroup') | |||
self.nsamplesPulse = fp.get(header+'/NSamplesPulse') | |||
self.pulseCount = fp.get(header+'/PulseCount') | |||
self.radacTime = fp.get(header+'/RadacTime') | |||
self.timeCount = fp.get(header+'/TimeCount') | |||
self.timeStatus = fp.get(header+'/TimeStatus') | |||
self.nrecords = self.pulseCount.shape[0] #nblocks | |||
self.npulses = self.pulseCount.shape[1] #nprofile | |||
self.nsamples = self.nsamplesPulse[0,0] #ngates | |||
self.nbeams = self.beamCode.shape[1] | |||
|
r497 | ||
|
r491 | ||
def getIndexRangeToPulse(self, idrecord=0): | |||
|
r497 | #indexToZero = numpy.where(self.pulseCount.value[idrecord,:]==0) | |
#startPulseCountId = indexToZero[0][0] | |||
#endPulseCountId = startPulseCountId - 1 | |||
#range1 = numpy.arange(startPulseCountId,self.npulses,1) | |||
#range2 = numpy.arange(0,startPulseCountId,1) | |||
#return range1, range2 | |||
|
r508 | zero = 0 | |
npulse = max(self.pulseCount[0,:]+1)-1 | |||
looking_index = numpy.where(self.pulseCount.value[idrecord,:]==npulse)[0] | |||
getLastIndex = looking_index[-1] | |||
index_data = numpy.arange(0,getLastIndex+1,1) | |||
index_buffer = numpy.arange(getLastIndex+1,self.npulses,1) | |||
|
r497 | return index_data, index_buffer | |
|
r491 | ||
class AMISRReader(ProcessingUnit): | |||
path = None | |||
startDate = None | |||
endDate = None | |||
startTime = None | |||
endTime = None | |||
walk = None | |||
isConfig = False | |||
def __init__(self): | |||
self.set = None | |||
self.subset = None | |||
self.extension_file = '.h5' | |||
self.dtc_str = 'dtc' | |||
self.dtc_id = 0 | |||
self.status = True | |||
self.isConfig = False | |||
self.dirnameList = [] | |||
self.filenameList = [] | |||
self.fileIndex = None | |||
self.flagNoMoreFiles = False | |||
self.flagIsNewFile = 0 | |||
self.filename = '' | |||
self.amisrFilePointer = None | |||
self.radacHeaderObj = None | |||
self.dataOut = self.__createObjByDefault() | |||
self.datablock = None | |||
self.rest_datablock = None | |||
self.range = None | |||
self.idrecord_count = 0 | |||
self.profileIndex = 0 | |||
|
r497 | self.index_amisr_sample = None | |
self.index_amisr_buffer = None | |||
|
r491 | self.beamCodeByFrame = None | |
self.radacTimeByFrame = None | |||
#atributos originales tal y como esta en el archivo de datos | |||
self.beamCodesFromFile = None | |||
self.radacTimeFromFile = None | |||
self.rangeFromFile = None | |||
self.dataByFrame = None | |||
self.dataset = None | |||
self.beamCodeDict = {} | |||
self.beamRangeDict = {} | |||
#experiment cgf file | |||
self.npulsesint_fromfile = None | |||
self.recordsperfile_fromfile = None | |||
self.nbeamcodes_fromfile = None | |||
self.ngates_fromfile = None | |||
self.ippSeconds_fromfile = None | |||
self.frequency_h5file = None | |||
self.__firstFile = True | |||
self.buffer_radactime = None | |||
|
r497 | self.index4_schain_datablock = None | |
self.index4_buffer = None | |||
self.schain_datablock = None | |||
self.buffer = None | |||
self.linear_pulseCount = None | |||
self.npulseByFrame = None | |||
self.profileIndex_offset = None | |||
self.timezone = 'ut' | |||
|
r508 | ||
self.__waitForNewFile = 20 | |||
self.__filename_online = None | |||
|
r491 | def __createObjByDefault(self): | |
dataObj = AMISR() | |||
return dataObj | |||
|
r508 | def __setParameters(self,path='', startDate='',endDate='',startTime='', endTime='', walk=''): | |
|
r491 | self.path = path | |
self.startDate = startDate | |||
self.endDate = endDate | |||
self.startTime = startTime | |||
self.endTime = endTime | |||
self.walk = walk | |||
def __checkPath(self): | |||
if os.path.exists(self.path): | |||
self.status = 1 | |||
else: | |||
self.status = 0 | |||
|
r1167 | print('Path:%s does not exists'%self.path) | |
|
r491 | ||
return | |||
def __selDates(self, amisr_dirname_format): | |||
try: | |||
year = int(amisr_dirname_format[0:4]) | |||
month = int(amisr_dirname_format[4:6]) | |||
dom = int(amisr_dirname_format[6:8]) | |||
thisDate = datetime.date(year,month,dom) | |||
if (thisDate>=self.startDate and thisDate <= self.endDate): | |||
return amisr_dirname_format | |||
except: | |||
return None | |||
|
r508 | def __findDataForDates(self,online=False): | |
|
r491 | ||
if not(self.status): | |||
return None | |||
pat = '\d+.\d+' | |||
dirnameList = [re.search(pat,x) for x in os.listdir(self.path)] | |||
|
r1167 | dirnameList = [x for x in dirnameList if x!=None] | |
|
r491 | dirnameList = [x.string for x in dirnameList] | |
|
r508 | if not(online): | |
dirnameList = [self.__selDates(x) for x in dirnameList] | |||
|
r1167 | dirnameList = [x for x in dirnameList if x!=None] | |
|
r491 | if len(dirnameList)>0: | |
self.status = 1 | |||
self.dirnameList = dirnameList | |||
self.dirnameList.sort() | |||
else: | |||
self.status = 0 | |||
return None | |||
def __getTimeFromData(self): | |||
|
r499 | startDateTime_Reader = datetime.datetime.combine(self.startDate,self.startTime) | |
endDateTime_Reader = datetime.datetime.combine(self.endDate,self.endTime) | |||
|
r1167 | print('Filtering Files from %s to %s'%(startDateTime_Reader, endDateTime_Reader)) | |
print('........................................') | |||
|
r499 | filter_filenameList = [] | |
|
r504 | self.filenameList.sort() | |
|
r500 | for i in range(len(self.filenameList)-1): | |
filename = self.filenameList[i] | |||
|
r499 | fp = h5py.File(filename,'r') | |
time_str = fp.get('Time/RadacTimeString') | |||
startDateTimeStr_File = time_str[0][0].split('.')[0] | |||
junk = time.strptime(startDateTimeStr_File, '%Y-%m-%d %H:%M:%S') | |||
startDateTime_File = datetime.datetime(junk.tm_year,junk.tm_mon,junk.tm_mday,junk.tm_hour, junk.tm_min, junk.tm_sec) | |||
endDateTimeStr_File = time_str[-1][-1].split('.')[0] | |||
junk = time.strptime(endDateTimeStr_File, '%Y-%m-%d %H:%M:%S') | |||
endDateTime_File = datetime.datetime(junk.tm_year,junk.tm_mon,junk.tm_mday,junk.tm_hour, junk.tm_min, junk.tm_sec) | |||
fp.close() | |||
if self.timezone == 'lt': | |||
startDateTime_File = startDateTime_File - datetime.timedelta(minutes = 300) | |||
endDateTime_File = endDateTime_File - datetime.timedelta(minutes = 300) | |||
if (endDateTime_File>=startDateTime_Reader and endDateTime_File<endDateTime_Reader): | |||
#self.filenameList.remove(filename) | |||
filter_filenameList.append(filename) | |||
filter_filenameList.sort() | |||
self.filenameList = filter_filenameList | |||
return 1 | |||
|
r491 | ||
def __filterByGlob1(self, dirName): | |||
filter_files = glob.glob1(dirName, '*.*%s'%self.extension_file) | |||
filterDict = {} | |||
filterDict.setdefault(dirName) | |||
filterDict[dirName] = filter_files | |||
return filterDict | |||
def __getFilenameList(self, fileListInKeys, dirList): | |||
for value in fileListInKeys: | |||
|
r1167 | dirName = list(value.keys())[0] | |
|
r491 | for file in value[dirName]: | |
filename = os.path.join(dirName, file) | |||
self.filenameList.append(filename) | |||
|
r508 | def __selectDataForTimes(self, online=False): | |
|
r491 | #aun no esta implementado el filtro for tiempo | |
if not(self.status): | |||
return None | |||
dirList = [os.path.join(self.path,x) for x in self.dirnameList] | |||
fileListInKeys = [self.__filterByGlob1(x) for x in dirList] | |||
self.__getFilenameList(fileListInKeys, dirList) | |||
|
r508 | if not(online): | |
#filtro por tiempo | |||
if not(self.all): | |||
self.__getTimeFromData() | |||
|
r499 | ||
|
r508 | if len(self.filenameList)>0: | |
self.status = 1 | |||
self.filenameList.sort() | |||
else: | |||
self.status = 0 | |||
return None | |||
|
r510 | ||
|
r491 | else: | |
|
r508 | #get the last file - 1 | |
self.filenameList = [self.filenameList[-2]] | |||
|
r510 | ||
new_dirnameList = [] | |||
for dirname in self.dirnameList: | |||
junk = numpy.array([dirname in x for x in self.filenameList]) | |||
junk_sum = junk.sum() | |||
if junk_sum > 0: | |||
new_dirnameList.append(dirname) | |||
self.dirnameList = new_dirnameList | |||
return 1 | |||
|
r508 | ||
|
r1052 | def searchFilesOnLine(self, | |
|
r508 | path, | |
walk=True): | |||
startDate = datetime.datetime.utcnow().date() | |||
endDate = datetime.datetime.utcnow().date() | |||
self.__setParameters(path=path, startDate=startDate, endDate=endDate, walk=walk) | |||
self.__checkPath() | |||
self.__findDataForDates(online=True) | |||
self.dirnameList = [self.dirnameList[-1]] | |||
self.__selectDataForTimes(online=True) | |||
return | |||
|
r491 | ||
|
r1052 | def searchFilesOffLine(self, | |
|
r491 | path, | |
startDate, | |||
endDate, | |||
startTime=datetime.time(0,0,0), | |||
endTime=datetime.time(23,59,59), | |||
walk=True): | |||
self.__setParameters(path, startDate, endDate, startTime, endTime, walk) | |||
self.__checkPath() | |||
self.__findDataForDates() | |||
self.__selectDataForTimes() | |||
for i in range(len(self.filenameList)): | |||
|
r1167 | print("%s" %(self.filenameList[i])) | |
|
r491 | ||
return | |||
def __setNextFileOffline(self): | |||
idFile = self.fileIndex | |||
while (True): | |||
idFile += 1 | |||
if not(idFile < len(self.filenameList)): | |||
self.flagNoMoreFiles = 1 | |||
|
r1167 | print("No more Files") | |
|
r491 | return 0 | |
filename = self.filenameList[idFile] | |||
amisrFilePointer = h5py.File(filename,'r') | |||
break | |||
self.flagIsNewFile = 1 | |||
self.fileIndex = idFile | |||
self.filename = filename | |||
self.amisrFilePointer = amisrFilePointer | |||
|
r1167 | print("Setting the file: %s"%self.filename) | |
|
r491 | ||
return 1 | |||
|
r508 | ||
def __setNextFileOnline(self): | |||
filename = self.filenameList[0] | |||
if self.__filename_online != None: | |||
self.__selectDataForTimes(online=True) | |||
filename = self.filenameList[0] | |||
while self.__filename_online == filename: | |||
|
r1167 | print('waiting %d seconds to get a new file...'%(self.__waitForNewFile)) | |
|
r587 | sleep(self.__waitForNewFile) | |
|
r508 | self.__selectDataForTimes(online=True) | |
filename = self.filenameList[0] | |||
self.__filename_online = filename | |||
self.amisrFilePointer = h5py.File(filename,'r') | |||
self.flagIsNewFile = 1 | |||
self.filename = filename | |||
|
r1167 | print("Setting the file: %s"%self.filename) | |
|
r508 | return 1 | |
|
r491 | def __readHeader(self): | |
self.radacHeaderObj = RadacHeader(self.amisrFilePointer) | |||
#update values from experiment cfg file | |||
if self.radacHeaderObj.nrecords == self.recordsperfile_fromfile: | |||
self.radacHeaderObj.nrecords = self.recordsperfile_fromfile | |||
self.radacHeaderObj.nbeams = self.nbeamcodes_fromfile | |||
self.radacHeaderObj.npulses = self.npulsesint_fromfile | |||
self.radacHeaderObj.nsamples = self.ngates_fromfile | |||
|
r497 | #looking index list for data | |
start_index = self.radacHeaderObj.pulseCount[0,:][0] | |||
end_index = self.radacHeaderObj.npulses | |||
|
r1167 | range4data = list(range(start_index, end_index)) | |
|
r497 | self.index4_schain_datablock = numpy.array(range4data) | |
buffer_start_index = 0 | |||
buffer_end_index = self.radacHeaderObj.pulseCount[0,:][0] | |||
|
r1167 | range4buffer = list(range(buffer_start_index, buffer_end_index)) | |
|
r497 | self.index4_buffer = numpy.array(range4buffer) | |
self.linear_pulseCount = numpy.array(range4data + range4buffer) | |||
self.npulseByFrame = max(self.radacHeaderObj.pulseCount[0,:]+1) | |||
|
r491 | #get tuning frequency | |
frequency_h5file_dataset = self.amisrFilePointer.get('Rx'+'/TuningFrequency') | |||
self.frequency_h5file = frequency_h5file_dataset[0,0] | |||
self.flagIsNewFile = 1 | |||
def __getBeamCode(self): | |||
self.beamCodeDict = {} | |||
self.beamRangeDict = {} | |||
|
r499 | beamCodeMap = self.amisrFilePointer.get('Setup/BeamcodeMap') | |
|
r491 | for i in range(len(self.radacHeaderObj.beamCode[0,:])): | |
self.beamCodeDict.setdefault(i) | |||
self.beamRangeDict.setdefault(i) | |||
|
r499 | beamcodeValue = self.radacHeaderObj.beamCode[0,i] | |
beamcodeIndex = numpy.where(beamCodeMap[:,0] == beamcodeValue)[0][0] | |||
x = beamCodeMap[beamcodeIndex][1] | |||
y = beamCodeMap[beamcodeIndex][2] | |||
z = beamCodeMap[beamcodeIndex][3] | |||
self.beamCodeDict[i] = [beamcodeValue, x, y, z] | |||
|
r491 | ||
just4record0 = self.radacHeaderObj.beamCodeByPulse[0,:] | |||
|
r1167 | for i in range(len(list(self.beamCodeDict.values()))): | |
xx = numpy.where(just4record0==list(self.beamCodeDict.values())[i][0]) | |||
|
r504 | indexPulseByBeam = self.linear_pulseCount[xx[0]] | |
self.beamRangeDict[i] = indexPulseByBeam | |||
|
r491 | ||
def __getExpParameters(self): | |||
if not(self.status): | |||
return None | |||
experimentCfgPath = os.path.join(self.path, self.dirnameList[0], 'Setup') | |||
expFinder = glob.glob1(experimentCfgPath,'*.exp') | |||
if len(expFinder)== 0: | |||
self.status = 0 | |||
return None | |||
experimentFilename = os.path.join(experimentCfgPath,expFinder[0]) | |||
f = open(experimentFilename) | |||
lines = f.readlines() | |||
f.close() | |||
parmsList = ['npulsesint*','recordsperfile*','nbeamcodes*','ngates*'] | |||
filterList = [fnmatch.filter(lines, x) for x in parmsList] | |||
values = [re.sub(r'\D',"",x[0]) for x in filterList] | |||
self.npulsesint_fromfile = int(values[0]) | |||
self.recordsperfile_fromfile = int(values[1]) | |||
self.nbeamcodes_fromfile = int(values[2]) | |||
self.ngates_fromfile = int(values[3]) | |||
tufileFinder = fnmatch.filter(lines, 'tufile=*') | |||
tufile = tufileFinder[0].split('=')[1].split('\n')[0] | |||
|
r499 | tufile = tufile.split('\r')[0] | |
|
r491 | tufilename = os.path.join(experimentCfgPath,tufile) | |
f = open(tufilename) | |||
lines = f.readlines() | |||
f.close() | |||
self.ippSeconds_fromfile = float(lines[1].split()[2])/1E6 | |||
self.status = 1 | |||
def __setIdsAndArrays(self): | |||
self.dataByFrame = self.__setDataByFrame() | |||
self.beamCodeByFrame = self.amisrFilePointer.get('Raw11/Data/RadacHeader/BeamCode').value[0, :] | |||
self.readRanges() | |||
|
r497 | self.index_amisr_sample, self.index_amisr_buffer = self.radacHeaderObj.getIndexRangeToPulse(0) | |
|
r491 | self.radacTimeByFrame = numpy.zeros(self.radacHeaderObj.npulses) | |
|
r508 | if len(self.index_amisr_buffer) > 0: | |
self.buffer_radactime = numpy.zeros_like(self.radacTimeByFrame) | |||
|
r491 | ||
|
r508 | def __setNextFile(self,online=False): | |
|
r491 | ||
|
r508 | if not(online): | |
newFile = self.__setNextFileOffline() | |||
else: | |||
newFile = self.__setNextFileOnline() | |||
|
r491 | ||
if not(newFile): | |||
return 0 | |||
self.__readHeader() | |||
if self.__firstFile: | |||
self.__setIdsAndArrays() | |||
self.__firstFile = False | |||
self.__getBeamCode() | |||
self.readDataBlock() | |||
def setup(self,path=None, | |||
startDate=None, | |||
endDate=None, | |||
startTime=datetime.time(0,0,0), | |||
endTime=datetime.time(23,59,59), | |||
|
r497 | walk=True, | |
|
r499 | timezone='ut', | |
|
r508 | all=0, | |
online=False): | |||
|
r491 | ||
|
r497 | self.timezone = timezone | |
|
r499 | self.all = all | |
|
r508 | self.online = online | |
if not(online): | |||
#Busqueda de archivos offline | |||
|
r1052 | self.searchFilesOffLine(path, startDate, endDate, startTime, endTime, walk) | |
|
r508 | else: | |
|
r1052 | self.searchFilesOnLine(path, walk) | |
|
r491 | ||
if not(self.filenameList): | |||
|
r1167 | print("There is no files into the folder: %s"%(path)) | |
|
r491 | ||
sys.exit(-1) | |||
self.__getExpParameters() | |||
self.fileIndex = -1 | |||
|
r508 | self.__setNextFile(online) | |
|
r497 | ||
|
r504 | # first_beamcode = self.radacHeaderObj.beamCodeByPulse[0,0] | |
# index = numpy.where(self.radacHeaderObj.beamCodeByPulse[0,:]!=first_beamcode)[0][0] | |||
self.profileIndex_offset = self.radacHeaderObj.pulseCount[0,:][0] | |||
|
r497 | self.profileIndex = self.profileIndex_offset | |
|
r491 | ||
def readRanges(self): | |||
dataset = self.amisrFilePointer.get('Raw11/Data/Samples/Range') | |||
|
r504 | ||
|
r491 | self.rangeFromFile = numpy.reshape(dataset.value,(-1)) | |
|
r504 | return self.rangeFromFile | |
|
r491 | ||
def readRadacTime(self,idrecord, range1, range2): | |||
self.radacTimeFromFile = self.radacHeaderObj.radacTime.value | |||
radacTimeByFrame = numpy.zeros((self.radacHeaderObj.npulses)) | |||
#radacTimeByFrame = dataset[idrecord - 1,range1] | |||
#radacTimeByFrame = dataset[idrecord,range2] | |||
return radacTimeByFrame | |||
def readBeamCode(self, idrecord, range1, range2): | |||
dataset = self.amisrFilePointer.get('Raw11/Data/RadacHeader/BeamCode') | |||
beamcodeByFrame = numpy.zeros((self.radacHeaderObj.npulses)) | |||
self.beamCodesFromFile = dataset.value | |||
#beamcodeByFrame[range1] = dataset[idrecord - 1, range1] | |||
#beamcodeByFrame[range2] = dataset[idrecord, range2] | |||
beamcodeByFrame[range1] = dataset[idrecord, range1] | |||
beamcodeByFrame[range2] = dataset[idrecord, range2] | |||
return beamcodeByFrame | |||
def __setDataByFrame(self): | |||
ndata = 2 # porque es complejo | |||
dataByFrame = numpy.zeros((self.radacHeaderObj.npulses, self.radacHeaderObj.nsamples, ndata)) | |||
return dataByFrame | |||
def __readDataSet(self): | |||
dataset = self.amisrFilePointer.get('Raw11/Data/Samples/Data') | |||
return dataset | |||
def __setDataBlock(self,): | |||
real = self.dataByFrame[:,:,0] #asumo que 0 es real | |||
imag = self.dataByFrame[:,:,1] #asumo que 1 es imaginario | |||
datablock = real + imag*1j #armo el complejo | |||
return datablock | |||
def readSamples_version1(self,idrecord): | |||
#estas tres primeras lineas solo se deben ejecutar una vez | |||
if self.flagIsNewFile: | |||
#reading dataset | |||
self.dataset = self.__readDataSet() | |||
self.flagIsNewFile = 0 | |||
if idrecord == 0: | |||
|
r497 | self.dataByFrame[self.index4_schain_datablock, : ,:] = self.dataset[0, self.index_amisr_sample,:,:] | |
self.radacTimeByFrame[self.index4_schain_datablock] = self.radacHeaderObj.radacTime[0, self.index_amisr_sample] | |||
|
r491 | datablock = self.__setDataBlock() | |
|
r508 | if len(self.index_amisr_buffer) > 0: | |
self.buffer = self.dataset[0, self.index_amisr_buffer,:,:] | |||
self.buffer_radactime = self.radacHeaderObj.radacTime[0, self.index_amisr_buffer] | |||
|
r497 | ||
|
r491 | return datablock | |
|
r508 | if len(self.index_amisr_buffer) > 0: | |
self.dataByFrame[self.index4_buffer,:,:] = self.buffer.copy() | |||
self.radacTimeByFrame[self.index4_buffer] = self.buffer_radactime.copy() | |||
|
r497 | self.dataByFrame[self.index4_schain_datablock,:,:] = self.dataset[idrecord, self.index_amisr_sample,:,:] | |
self.radacTimeByFrame[self.index4_schain_datablock] = self.radacHeaderObj.radacTime[idrecord, self.index_amisr_sample] | |||
datablock = self.__setDataBlock() | |||
|
r508 | if len(self.index_amisr_buffer) > 0: | |
self.buffer = self.dataset[idrecord, self.index_amisr_buffer, :, :] | |||
self.buffer_radactime = self.radacHeaderObj.radacTime[idrecord, self.index_amisr_buffer] | |||
|
r491 | ||
return datablock | |||
def readSamples(self,idrecord): | |||
if self.flagIsNewFile: | |||
self.dataByFrame = self.__setDataByFrame() | |||
self.beamCodeByFrame = self.amisrFilePointer.get('Raw11/Data/RadacHeader/BeamCode').value[idrecord, :] | |||
#reading ranges | |||
self.readRanges() | |||
#reading dataset | |||
self.dataset = self.__readDataSet() | |||
self.flagIsNewFile = 0 | |||
self.radacTimeByFrame = self.radacHeaderObj.radacTime.value[idrecord, :] | |||
self.dataByFrame = self.dataset[idrecord, :, :, :] | |||
datablock = self.__setDataBlock() | |||
return datablock | |||
def readDataBlock(self): | |||
self.datablock = self.readSamples_version1(self.idrecord_count) | |||
#self.datablock = self.readSamples(self.idrecord_count) | |||
#print 'record:', self.idrecord_count | |||
self.idrecord_count += 1 | |||
self.profileIndex = 0 | |||
if self.idrecord_count >= self.radacHeaderObj.nrecords: | |||
self.idrecord_count = 0 | |||
self.flagIsNewFile = 1 | |||
def readNextBlock(self): | |||
self.readDataBlock() | |||
if self.flagIsNewFile: | |||
|
r508 | self.__setNextFile(self.online) | |
|
r491 | pass | |
def __hasNotDataInBuffer(self): | |||
#self.radacHeaderObj.npulses debe ser otra variable para considerar el numero de pulsos a tomar en el primer y ultimo record | |||
if self.profileIndex >= self.radacHeaderObj.npulses: | |||
return 1 | |||
return 0 | |||
def printUTC(self): | |||
|
r1167 | print(self.dataOut.utctime) | |
print('') | |||
|
r491 | ||
def setObjProperties(self): | |||
|
r527 | ||
|
r491 | self.dataOut.heightList = self.rangeFromFile/1000.0 #km | |
self.dataOut.nProfiles = self.radacHeaderObj.npulses | |||
self.dataOut.nRecords = self.radacHeaderObj.nrecords | |||
self.dataOut.nBeams = self.radacHeaderObj.nbeams | |||
self.dataOut.ippSeconds = self.ippSeconds_fromfile | |||
|
r527 | # self.dataOut.timeInterval = self.dataOut.ippSeconds * self.dataOut.nCohInt | |
|
r491 | self.dataOut.frequency = self.frequency_h5file | |
|
r497 | self.dataOut.npulseByFrame = self.npulseByFrame | |
|
r491 | self.dataOut.nBaud = None | |
self.dataOut.nCode = None | |||
self.dataOut.code = None | |||
self.dataOut.beamCodeDict = self.beamCodeDict | |||
self.dataOut.beamRangeDict = self.beamRangeDict | |||
|
r497 | ||
if self.timezone == 'lt': | |||
self.dataOut.timeZone = time.timezone / 60. #get the timezone in minutes | |||
else: | |||
self.dataOut.timeZone = 0 #by default time is UTC | |||
|
r491 | def getData(self): | |
if self.flagNoMoreFiles: | |||
self.dataOut.flagNoData = True | |||
|
r1167 | print('Process finished') | |
|
r491 | return 0 | |
if self.__hasNotDataInBuffer(): | |||
self.readNextBlock() | |||
|
r611 | if self.datablock is None: # setear esta condicion cuando no hayan datos por leers | |
|
r491 | self.dataOut.flagNoData = True | |
return 0 | |||
self.dataOut.data = numpy.reshape(self.datablock[self.profileIndex,:],(1,-1)) | |||
self.dataOut.utctime = self.radacTimeByFrame[self.profileIndex] | |||
|
r501 | self.dataOut.profileIndex = self.profileIndex | |
|
r491 | self.dataOut.flagNoData = False | |
self.profileIndex += 1 | |||
return self.dataOut.data | |||
def run(self, **kwargs): | |||
if not(self.isConfig): | |||
self.setup(**kwargs) | |||
self.setObjProperties() | |||
self.isConfig = True | |||
|
r1167 | self.getData() |