diff --git a/schainpy/model/jrodata.py b/schainpy/model/jrodata.py index 9892c7a..037d57c 100644 --- a/schainpy/model/jrodata.py +++ b/schainpy/model/jrodata.py @@ -577,22 +577,77 @@ class SpectraHeis(JROData): class Fits: + heightList = None + + channelList = None + + flagNoData = True + + flagTimeBlock = False + + useLocalTime = False + + utctime = None + + timeZone = None + + ippSeconds = None + + timeInterval = None + + nCohInt = None + + nIncohInt = None + + noise = None + + windowOfFilter = 1 + + #Speed of ligth + C = 3e8 + + frequency = 49.92e6 + + realtime = False + + def __init__(self): - self.useLocalTime = False + + self.type = "Fits" + + self.nProfiles = None + + self.heightList = None + + self.channelList = None + +# self.channelIndexList = None + + self.flagNoData = True + self.utctime = None - self.timeZone = None - self.ltctime = None - self.timeInterval = None - self.header = None - self.data_header = None - self.data = None - self.datatime = None - self.flagNoData = False - self.expName = '' - self.nChannels = None - self.nSamples = None - self.dataBlocksPerFile = None - self.comments = '' + + self.nCohInt = None + + self.nIncohInt = None + + self.useLocalTime = True + +# self.utctime = None +# self.timeZone = None +# self.ltctime = None +# self.timeInterval = None +# self.header = None +# self.data_header = None +# self.data = None +# self.datatime = None +# self.flagNoData = False +# self.expName = '' +# self.nChannels = None +# self.nSamples = None +# self.dataBlocksPerFile = None +# self.comments = '' +# def getltctime(self): @@ -618,9 +673,49 @@ class Fits: return datatime + def getHeiRange(self): + + heis = self.heightList + + return heis + def isEmpty(self): return self.flagNoData + def getNHeights(self): + + return len(self.heightList) + + def getNChannels(self): + + return len(self.channelList) + + def getChannelIndexList(self): + + return range(self.nChannels) + + def getNoise(self, type = 1): + + self.noise = numpy.zeros(self.nChannels) + + if type == 1: + noise = self.getNoisebyHildebrand() + + if type == 2: + noise = self.getNoisebySort() + + if type == 3: + noise = self.getNoisebyWindow() + + return noise + datatime = property(getDatatime, "I'm the 'datatime' property") + nHeights = property(getNHeights, "I'm the 'nHeights' property.") + nChannels = property(getNChannels, "I'm the 'nChannel' property.") + channelIndexList = property(getChannelIndexList, "I'm the 'channelIndexList' property.") + noise = property(getNoise, "I'm the 'nHeights' property.") + datatime = property(getDatatime, "I'm the 'datatime' property") + ltctime = property(getltctime, "I'm the 'ltctime' property") + ltctime = property(getltctime, "I'm the 'ltctime' property") \ No newline at end of file diff --git a/schainpy/model/jrodataIO.py b/schainpy/model/jrodataIO.py index 4430557..d3540e8 100644 --- a/schainpy/model/jrodataIO.py +++ b/schainpy/model/jrodataIO.py @@ -2883,23 +2883,36 @@ class FitsWriter(Operation): parm_name = parameter.name parm_value = parameter.value - if parm_value == 'fromdatadatetime': - value = time.strftime("%b %d %Y %H:%M:%S", dataOut.datatime.timetuple()) - elif parm_value == 'fromdataheights': - value = dataOut.nHeights - elif parm_value == 'fromdatachannel': - value = dataOut.nChannels - elif parm_value == 'fromdatasamples': - value = dataOut.nFFTPoints - else: - value = parm_value +# if parm_value == 'fromdatadatetime': +# value = time.strftime("%b %d %Y %H:%M:%S", dataOut.datatime.timetuple()) +# elif parm_value == 'fromdataheights': +# value = dataOut.nHeights +# elif parm_value == 'fromdatachannel': +# value = dataOut.nChannels +# elif parm_value == 'fromdatasamples': +# value = dataOut.nFFTPoints +# else: +# value = parm_value - header_data.header[parm_name] = value + header_data.header[parm_name] = parm_value + + header_data.header['DATETIME'] = time.strftime("%b %d %Y %H:%M:%S", dataOut.datatime.timetuple()) + header_data.header['CHANNELLIST'] = str(dataOut.channelList) + header_data.header['NCHANNELS'] = dataOut.nChannels + #header_data.header['HEIGHTS'] = dataOut.heightList + header_data.header['NHEIGHTS'] = dataOut.nHeights + + header_data.header['IPPSECONDS'] = dataOut.ippSeconds + header_data.header['NCOHINT'] = dataOut.nCohInt + header_data.header['NINCOHINT'] = dataOut.nIncohInt + header_data.header['TIMEZONE'] = dataOut.timeZone header_data.header['NBLOCK'] = self.blockIndex header_data.writeto(self.filename) + self.addExtension(dataOut.heightList,'HEIGHTLIST') + def setup(self, dataOut, path, dataBlocksPerFile, metadatafile): @@ -2912,9 +2925,16 @@ class FitsWriter(Operation): self.fitsObj = pyfits.open(self.filename, mode='update') + def addExtension(self, data, tagname): + self.open() + extension = pyfits.ImageHDU(data=data, name=tagname) + #extension.header['TAG'] = tagname + self.fitsObj.append(extension) + self.write() + def addData(self, data): self.open() - extension = pyfits.ImageHDU(data=data, name=self.fitsObj[0].header['DATA']) + extension = pyfits.ImageHDU(data=data, name=self.fitsObj[0].header['DATATYPE']) extension.header['UTCTIME'] = self.dataOut.utctime self.fitsObj.append(extension) self.blockIndex += 1 @@ -3013,7 +3033,7 @@ class FitsWriter(Operation): class FitsReader(ProcessingUnit): - __TIMEZONE = time.timezone +# __TIMEZONE = time.timezone expName = None datetimestr = None @@ -3038,6 +3058,7 @@ class FitsReader(ProcessingUnit): self.filename = None self.fileSize = None self.fitsObj = None + self.timeZone = None self.nReadBlocks = 0 self.nTotalBlocks = 0 self.dataOut = self.createObjByDefault() @@ -3098,7 +3119,7 @@ class FitsReader(ProcessingUnit): self.filename = filename self.fileSize = fileSize self.fitsObj = fitsObj - + self.blockIndex = 0 print "Setting the file: %s"%self.filename return 1 @@ -3107,15 +3128,39 @@ class FitsReader(ProcessingUnit): headerObj = self.fitsObj[0] self.header_dict = headerObj.header - self.expName = headerObj.header['EXPNAME'] + if 'EXPNAME' in headerObj.header.keys(): + self.expName = headerObj.header['EXPNAME'] + + if 'DATATYPE' in headerObj.header.keys(): + self.dataType = headerObj.header['DATATYPE'] + self.datetimestr = headerObj.header['DATETIME'] - struct_time = time.strptime(headerObj.header['DATETIME'], "%b %d %Y %H:%M:%S") -# self.utc = time.mktime(struct_time) - self.__TIMEZONE - self.nChannels = headerObj.header['NCHANNEL'] - self.nSamples = headerObj.header['NSAMPLE'] + self.channelList = headerObj.header['CHANNELLIST'] + self.nChannels = headerObj.header['NCHANNELS'] + self.nHeights = headerObj.header['NHEIGHTS'] + self.ippSeconds = headerObj.header['IPPSECONDS'] + self.nCohInt = headerObj.header['NCOHINT'] + self.nIncohInt = headerObj.header['NINCOHINT'] self.dataBlocksPerFile = headerObj.header['NBLOCK'] - self.comments = headerObj.header['COMMENT'] + self.timeZone = headerObj.header['TIMEZONE'] + + self.timeInterval = self.ippSeconds * self.nCohInt * self.nIncohInt + + if 'COMMENT' in headerObj.header.keys(): + self.comments = headerObj.header['COMMENT'] + self.readHeightList() + + def readHeightList(self): + self.blockIndex = self.blockIndex + 1 + obj = self.fitsObj[self.blockIndex] + self.heightList = obj.data + self.blockIndex = self.blockIndex + 1 + + def readExtension(self): + obj = self.fitsObj[self.blockIndex] + self.heightList = obj.data + self.blockIndex = self.blockIndex + 1 def setNextFile(self): @@ -3130,7 +3175,7 @@ class FitsReader(ProcessingUnit): self.readHeader() self.nReadBlocks = 0 - self.blockIndex = 1 +# self.blockIndex = 1 return 1 def __searchFilesOffLine(self, @@ -3298,7 +3343,7 @@ class FitsReader(ProcessingUnit): if not self.online: return 0 - if (self.nReadBlocks >= self.processingHeaderObj.dataBlocksPerFile): + if (self.nReadBlocks >= self.dataBlocksPerFile): return 0 currentPointer = self.fp.tell() @@ -3388,10 +3433,12 @@ class FitsReader(ProcessingUnit): self.dataOut.header = self.header_dict self.dataOut.expName = self.expName self.dataOut.nChannels = self.nChannels - self.dataOut.nSamples = self.nSamples + self.dataOut.timeZone = self.timeZone self.dataOut.dataBlocksPerFile = self.dataBlocksPerFile self.dataOut.comments = self.comments - + self.dataOut.timeInterval = self.timeInterval + self.dataOut.channelList = self.channelList + self.dataOut.heightList = self.heightList self.dataOut.flagNoData = False return self.dataOut.data diff --git a/schainpy/model/jroplot.py b/schainpy/model/jroplot.py index 4c9c5f1..6f0fd46 100644 --- a/schainpy/model/jroplot.py +++ b/schainpy/model/jroplot.py @@ -1487,9 +1487,9 @@ class RTIfromSpectraHeis(Figure): # title = "RTI %s" %(thisDatetime.strftime("%d-%b-%Y")) - title = "RTI-Noise - %s" %(thisDatetime.strftime("%d-%b-%Y %H:%M:%S")) + title = "RTI - %s" %(thisDatetime.strftime("%d-%b-%Y %H:%M:%S")) - legendlabels = ["channel %d"%idchannel for idchannel in channelList] + legendlabels = ["channel %d"%idchannel for idchannel in channelIndexList] axes = self.axesList[0] self.xdata = numpy.hstack((self.xdata, x[0:1])) diff --git a/schainpy/model/jroprocessing.py b/schainpy/model/jroprocessing.py index 7b3fa9e..4e436a2 100644 --- a/schainpy/model/jroprocessing.py +++ b/schainpy/model/jroprocessing.py @@ -1430,6 +1430,19 @@ class SpectraHeisProc(ProcessingUnit): # self.dataOut.deltaHeight=self.dataIn.deltaHeight + def __updateObjFromFits(self): + self.dataOut.utctime = self.dataIn.utctime + self.dataOut.channelIndexList = self.dataIn.channelIndexList + + self.dataOut.channelList = self.dataIn.channelList + self.dataOut.heightList = self.dataIn.heightList + self.dataOut.data_spc = self.dataIn.data + self.dataOut.timeInterval = self.dataIn.timeInterval + self.dataOut.timeZone = self.dataIn.timeZone + self.dataOut.useLocalTime = True +# self.dataOut. +# self.dataOut. + def __getFft(self): fft_volt = numpy.fft.fft(self.dataIn.data, axis=1) @@ -1441,6 +1454,11 @@ class SpectraHeisProc(ProcessingUnit): self.dataOut.flagNoData = True + if self.dataIn.type == "Fits": + self.__updateObjFromFits() + self.dataOut.flagNoData = False + return + if self.dataIn.type == "SpectraHeis": self.dataOut.copy(self.dataIn) return