diff --git a/schainpy/model/jrodata.py b/schainpy/model/jrodata.py index 16d4438..1ec4b96 100644 --- a/schainpy/model/jrodata.py +++ b/schainpy/model/jrodata.py @@ -653,7 +653,7 @@ class AMISR: self.type = "AMISR" #propiedades para compatibilidad con Voltages - self.timeZone = 300#timezone like jroheader, difference in minutes between UTC and localtime + self.timeZone = 0#timezone like jroheader, difference in minutes between UTC and localtime self.dstFlag = 0#self.dataIn.dstFlag self.errorCount = 0#self.dataIn.errorCount self.useLocalTime = True#self.dataIn.useLocalTime @@ -684,6 +684,18 @@ class AMISR: self.nCode = None#self.dataIn.nCode self.code = None#self.dataIn.code + #consideracion para los Beams + self.beamCodeDict = None + self.beamRangeDict = None + + def copy(self, inputObj=None): + + if inputObj == None: + return copy.deepcopy(self) + + for key in inputObj.__dict__.keys(): + self.__dict__[key] = inputObj.__dict__[key] + def isEmpty(self): diff --git a/schainpy/model/jrodataIO.py b/schainpy/model/jrodataIO.py index 31ebc3d..087fecf 100644 --- a/schainpy/model/jrodataIO.py +++ b/schainpy/model/jrodataIO.py @@ -3425,7 +3425,8 @@ class FitsReader(ProcessingUnit): class RadacHeader(): def __init__(self, fp): header = 'Raw11/Data/RadacHeader' - self.beamCode = fp.get(header+'/BeamCode') + 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') @@ -3438,6 +3439,7 @@ class RadacHeader(): self.nrecords = self.pulseCount.shape[0] #numero de bloques self.npulses = self.pulseCount.shape[1] #numero de perfiles self.nsamples = self.nsamplesPulse[0,0] #numero de alturas + self.nbeams = self.beamCode.shape[1] #numero de beams def getIndexRangeToPulse(self, idrecord=0): @@ -3492,6 +3494,9 @@ class AMISRReader(ProcessingUnit): self.dataByFrame = None self.dataset = None + self.beamCodeDict = {} + self.beamRangeDict = {} + def __createObjByDefault(self): @@ -3631,7 +3636,22 @@ class AMISRReader(ProcessingUnit): def __readHeader(self): self.radacHeaderObj = RadacHeader(self.amisrFilePointer) self.flagIsNewFile = 1 + + def __getBeamCode(self): + self.beamCodeDict = {} + self.beamRangeDict = {} + + for i in range(len(self.radacHeaderObj.beamCode[0,:])): + self.beamCodeDict.setdefault(i) + self.beamRangeDict.setdefault(i) + self.beamCodeDict[i] = self.radacHeaderObj.beamCode[0,i] + + just4record0 = self.radacHeaderObj.beamCodeByPulse[0,:] + + for i in range(len(self.beamCodeDict.values())): + xx = numpy.where(just4record0==self.beamCodeDict.values()[i]) + self.beamRangeDict[i] = xx[0] def __setNextFile(self): @@ -3642,7 +3662,7 @@ class AMISRReader(ProcessingUnit): return 0 self.__readHeader() - + self.__getBeamCode() self.readDataBlock() @@ -3791,6 +3811,10 @@ class AMISRReader(ProcessingUnit): return 1 return 0 + def printUTC(self): + print self.dataOut.utctime + print '' + def setObjProperties(self): self.dataOut.heightList = self.rangeFromFile/1000.0 #km self.dataOut.nProfiles = self.radacHeaderObj.npulses @@ -3798,6 +3822,9 @@ class AMISRReader(ProcessingUnit): self.dataOut.nBaud = None self.dataOut.nCode = None self.dataOut.code = None + + self.dataOut.beamCodeDict = self.beamCodeDict + self.dataOut.beamRangeDict = self.beamRangeDict def getData(self): diff --git a/schainpy/model/jroprocessing.py b/schainpy/model/jroprocessing.py index 01c8af0..14fb59e 100644 --- a/schainpy/model/jroprocessing.py +++ b/schainpy/model/jroprocessing.py @@ -1707,7 +1707,7 @@ class ProfileSelector(Operation): return True - def run(self, dataOut, profileList=None, profileRangeList=None): + def run(self, dataOut, profileList=None, profileRangeList=None, beam=None): dataOut.flagNoData = True self.nProfiles = dataOut.nProfiles @@ -1728,6 +1728,12 @@ class ProfileSelector(Operation): self.incIndex() return 1 + elif beam != None: + if self.isProfileInList(dataOut.beamRangeDict[beam]): + dataOut.flagNoData = False + + self.incIndex() + return 1 else: raise ValueError, "ProfileSelector needs profileList or profileRangeList" @@ -2067,4 +2073,60 @@ class IncohInt4SpectraHeis(Operation): - \ No newline at end of file +class AMISRProc(ProcessingUnit): + def __init__(self): + self.objectDict = {} + self.dataOut = AMISR() + + def init(self): + if self.dataIn.type == 'AMISR': + self.dataOut.copy(self.dataIn) + +class BeamSelector(Operation): + profileIndex = None + # Tamanho total de los perfiles + nProfiles = None + + def __init__(self): + + self.profileIndex = 0 + + def incIndex(self): + self.profileIndex += 1 + + if self.profileIndex >= self.nProfiles: + self.profileIndex = 0 + + def isProfileInRange(self, minIndex, maxIndex): + + if self.profileIndex < minIndex: + return False + + if self.profileIndex > maxIndex: + return False + + return True + + def isProfileInList(self, profileList): + + if self.profileIndex not in profileList: + return False + + return True + + def run(self, dataOut, beam=None): + + dataOut.flagNoData = True + self.nProfiles = dataOut.nProfiles + + if beam != None: + if self.isProfileInList(dataOut.beamRangeDict[beam]): + dataOut.flagNoData = False + + self.incIndex() + return 1 + + else: + raise ValueError, "BeamSelector needs beam value" + + return 0 \ No newline at end of file