##// END OF EJS Templates
Bug fixed: AMISR Reader filling with zeros at the begining of the processing....
Daniel Valdez -
r497:85140003652c
parent child
Show More
@@ -8,7 +8,7 class AMISR:
8 self.type = "AMISR"
8 self.type = "AMISR"
9
9
10 #propiedades para compatibilidad con Voltages
10 #propiedades para compatibilidad con Voltages
11 self.timeZone = 300#timezone like jroheader, difference in minutes between UTC and localtime
11 self.timeZone = 0#timezone like jroheader, difference in minutes between UTC and localtime
12 self.dstFlag = 0#self.dataIn.dstFlag
12 self.dstFlag = 0#self.dataIn.dstFlag
13 self.errorCount = 0#self.dataIn.errorCount
13 self.errorCount = 0#self.dataIn.errorCount
14 self.useLocalTime = True#self.dataIn.useLocalTime
14 self.useLocalTime = True#self.dataIn.useLocalTime
@@ -45,6 +45,8 class AMISR:
45 self.beamCodeDict = None
45 self.beamCodeDict = None
46 self.beamRangeDict = None
46 self.beamRangeDict = None
47
47
48 self.npulseByFrame = None
49
48 def copy(self, inputObj=None):
50 def copy(self, inputObj=None):
49
51
50 if inputObj == None:
52 if inputObj == None:
@@ -2,7 +2,7 import os
2 import numpy
2 import numpy
3 import time, datetime
3 import time, datetime
4 import mpldriver
4 import mpldriver
5 from customftp import *
5
6
6
7 import Queue
7 import Queue
8 import threading
8 import threading
@@ -7,6 +7,7 import sys
7 import glob
7 import glob
8 import fnmatch
8 import fnmatch
9 import datetime
9 import datetime
10 import time
10 import re
11 import re
11 import h5py
12 import h5py
12 import numpy
13 import numpy
@@ -32,16 +33,21 class RadacHeader():
32 self.npulses = self.pulseCount.shape[1] #nprofile
33 self.npulses = self.pulseCount.shape[1] #nprofile
33 self.nsamples = self.nsamplesPulse[0,0] #ngates
34 self.nsamples = self.nsamplesPulse[0,0] #ngates
34 self.nbeams = self.beamCode.shape[1]
35 self.nbeams = self.beamCode.shape[1]
35
36
36
37
37 def getIndexRangeToPulse(self, idrecord=0):
38 def getIndexRangeToPulse(self, idrecord=0):
38 indexToZero = numpy.where(self.pulseCount.value[idrecord,:]==0)
39 #indexToZero = numpy.where(self.pulseCount.value[idrecord,:]==0)
39 startPulseCountId = indexToZero[0][0]
40 #startPulseCountId = indexToZero[0][0]
40 endPulseCountId = startPulseCountId - 1
41 #endPulseCountId = startPulseCountId - 1
41 range1 = numpy.arange(startPulseCountId,self.npulses,1)
42 #range1 = numpy.arange(startPulseCountId,self.npulses,1)
42 range2 = numpy.arange(0,startPulseCountId,1)
43 #range2 = numpy.arange(0,startPulseCountId,1)
43 return range1, range2
44 #return range1, range2
44
45
46 looking_zeros_index = numpy.where(self.pulseCount.value[idrecord,:]==0)[0]
47 getLastIndexZero = looking_zeros_index[-1]
48 index_data = numpy.arange(0,getLastIndexZero,1)
49 index_buffer = numpy.arange(getLastIndexZero,self.npulses,1)
50 return index_data, index_buffer
45
51
46 class AMISRReader(ProcessingUnit):
52 class AMISRReader(ProcessingUnit):
47
53
@@ -75,8 +81,8 class AMISRReader(ProcessingUnit):
75 self.range = None
81 self.range = None
76 self.idrecord_count = 0
82 self.idrecord_count = 0
77 self.profileIndex = 0
83 self.profileIndex = 0
78 self.idpulse_range1 = None
84 self.index_amisr_sample = None
79 self.idpulse_range2 = None
85 self.index_amisr_buffer = None
80 self.beamCodeByFrame = None
86 self.beamCodeByFrame = None
81 self.radacTimeByFrame = None
87 self.radacTimeByFrame = None
82 #atributos originales tal y como esta en el archivo de datos
88 #atributos originales tal y como esta en el archivo de datos
@@ -101,6 +107,15 class AMISRReader(ProcessingUnit):
101 self.__firstFile = True
107 self.__firstFile = True
102 self.buffer_radactime = None
108 self.buffer_radactime = None
103
109
110 self.index4_schain_datablock = None
111 self.index4_buffer = None
112 self.schain_datablock = None
113 self.buffer = None
114 self.linear_pulseCount = None
115 self.npulseByFrame = None
116 self.profileIndex_offset = None
117 self.timezone = 'ut'
118
104 def __createObjByDefault(self):
119 def __createObjByDefault(self):
105
120
106 dataObj = AMISR()
121 dataObj = AMISR()
@@ -251,6 +266,20 class AMISRReader(ProcessingUnit):
251 self.radacHeaderObj.npulses = self.npulsesint_fromfile
266 self.radacHeaderObj.npulses = self.npulsesint_fromfile
252 self.radacHeaderObj.nsamples = self.ngates_fromfile
267 self.radacHeaderObj.nsamples = self.ngates_fromfile
253
268
269 #looking index list for data
270 start_index = self.radacHeaderObj.pulseCount[0,:][0]
271 end_index = self.radacHeaderObj.npulses
272 range4data = range(start_index, end_index)
273 self.index4_schain_datablock = numpy.array(range4data)
274
275 buffer_start_index = 0
276 buffer_end_index = self.radacHeaderObj.pulseCount[0,:][0]
277 range4buffer = range(buffer_start_index, buffer_end_index)
278 self.index4_buffer = numpy.array(range4buffer)
279
280 self.linear_pulseCount = numpy.array(range4data + range4buffer)
281 self.npulseByFrame = max(self.radacHeaderObj.pulseCount[0,:]+1)
282
254 #get tuning frequency
283 #get tuning frequency
255 frequency_h5file_dataset = self.amisrFilePointer.get('Rx'+'/TuningFrequency')
284 frequency_h5file_dataset = self.amisrFilePointer.get('Rx'+'/TuningFrequency')
256 self.frequency_h5file = frequency_h5file_dataset[0,0]
285 self.frequency_h5file = frequency_h5file_dataset[0,0]
@@ -317,7 +346,7 class AMISRReader(ProcessingUnit):
317 self.dataByFrame = self.__setDataByFrame()
346 self.dataByFrame = self.__setDataByFrame()
318 self.beamCodeByFrame = self.amisrFilePointer.get('Raw11/Data/RadacHeader/BeamCode').value[0, :]
347 self.beamCodeByFrame = self.amisrFilePointer.get('Raw11/Data/RadacHeader/BeamCode').value[0, :]
319 self.readRanges()
348 self.readRanges()
320 self.idpulse_range1, self.idpulse_range2 = self.radacHeaderObj.getIndexRangeToPulse(0)
349 self.index_amisr_sample, self.index_amisr_buffer = self.radacHeaderObj.getIndexRangeToPulse(0)
321 self.radacTimeByFrame = numpy.zeros(self.radacHeaderObj.npulses)
350 self.radacTimeByFrame = numpy.zeros(self.radacHeaderObj.npulses)
322 self.buffer_radactime = numpy.zeros_like(self.radacTimeByFrame)
351 self.buffer_radactime = numpy.zeros_like(self.radacTimeByFrame)
323
352
@@ -344,8 +373,10 class AMISRReader(ProcessingUnit):
344 endDate=None,
373 endDate=None,
345 startTime=datetime.time(0,0,0),
374 startTime=datetime.time(0,0,0),
346 endTime=datetime.time(23,59,59),
375 endTime=datetime.time(23,59,59),
347 walk=True):
376 walk=True,
377 timezone='ut',):
348
378
379 self.timezone = timezone
349 #Busqueda de archivos offline
380 #Busqueda de archivos offline
350 self.__searchFilesOffline(path, startDate, endDate, startTime, endTime, walk)
381 self.__searchFilesOffline(path, startDate, endDate, startTime, endTime, walk)
351
382
@@ -359,6 +390,11 class AMISRReader(ProcessingUnit):
359 self.fileIndex = -1
390 self.fileIndex = -1
360
391
361 self.__setNextFile()
392 self.__setNextFile()
393
394 first_beamcode = self.radacHeaderObj.beamCodeByPulse[0,0]
395 index = numpy.where(self.radacHeaderObj.beamCodeByPulse[0,:]!=first_beamcode)[0][0]
396 self.profileIndex_offset = self.radacHeaderObj.pulseCount[0,:][index]
397 self.profileIndex = self.profileIndex_offset
362
398
363 def readRanges(self):
399 def readRanges(self):
364 dataset = self.amisrFilePointer.get('Raw11/Data/Samples/Range')
400 dataset = self.amisrFilePointer.get('Raw11/Data/Samples/Range')
@@ -412,34 +448,23 class AMISRReader(ProcessingUnit):
412 self.flagIsNewFile = 0
448 self.flagIsNewFile = 0
413
449
414 if idrecord == 0:
450 if idrecord == 0:
415 #if self.buffer_last_record == None:
451 self.dataByFrame[self.index4_schain_datablock, : ,:] = self.dataset[0, self.index_amisr_sample,:,:]
416 selectorById = self.radacHeaderObj.pulseCount[0,self.idpulse_range2]
452 self.radacTimeByFrame[self.index4_schain_datablock] = self.radacHeaderObj.radacTime[0, self.index_amisr_sample]
417
418 self.dataByFrame[selectorById,:,:] = self.dataset[0, self.idpulse_range2,:,:]
419
420 self.radacTimeByFrame[selectorById] = self.radacHeaderObj.radacTime[0, self.idpulse_range2]
421
422 selectorById = self.radacHeaderObj.pulseCount[0,self.idpulse_range1]
423
424 self.radacTimeByFrame[selectorById] = self.buffer_radactime[selectorById]
425
426 datablock = self.__setDataBlock()
453 datablock = self.__setDataBlock()
427
454
455 self.buffer = self.dataset[0, self.index_amisr_buffer,:,:]
456 self.buffer_radactime = self.radacHeaderObj.radacTime[0, self.index_amisr_buffer]
457
428 return datablock
458 return datablock
429
459
430 selectorById = self.radacHeaderObj.pulseCount[idrecord-1,self.idpulse_range1]
460 self.dataByFrame[self.index4_buffer,:,:] = self.buffer.copy()
431 self.dataByFrame[selectorById,:,:] = self.dataset[idrecord-1, self.idpulse_range1, :, :]
461 self.radacTimeByFrame[self.index4_buffer] = self.buffer_radactime.copy()
432 self.radacTimeByFrame[selectorById] = self.radacHeaderObj.radacTime[idrecord-1, self.idpulse_range1]
462 self.dataByFrame[self.index4_schain_datablock,:,:] = self.dataset[idrecord, self.index_amisr_sample,:,:]
433
463 self.radacTimeByFrame[self.index4_schain_datablock] = self.radacHeaderObj.radacTime[idrecord, self.index_amisr_sample]
434 selectorById = self.radacHeaderObj.pulseCount[idrecord,self.idpulse_range2]#data incompleta ultimo archivo de carpeta, verifica el record real segun la dimension del arreglo de datos
464 datablock = self.__setDataBlock()
435 self.dataByFrame[selectorById,:,:] = self.dataset[idrecord, self.idpulse_range2, :, :]
436 self.radacTimeByFrame[selectorById] = self.radacHeaderObj.radacTime[idrecord, self.idpulse_range2]
437
438 datablock = self.__setDataBlock()
439
465
440 selectorById = self.radacHeaderObj.pulseCount[idrecord,self.idpulse_range1]
466 self.buffer = self.dataset[idrecord, self.index_amisr_buffer, :, :]
441 self.dataByFrame[selectorById,:,:] = self.dataset[idrecord, self.idpulse_range1, :, :]
467 self.buffer_radactime = self.radacHeaderObj.radacTime[idrecord, self.index_amisr_buffer]
442 self.buffer_radactime[selectorById] = self.radacHeaderObj.radacTime[idrecord, self.idpulse_range1]
443
468
444 return datablock
469 return datablock
445
470
@@ -500,13 +525,19 class AMISRReader(ProcessingUnit):
500 self.dataOut.ippSeconds = self.ippSeconds_fromfile
525 self.dataOut.ippSeconds = self.ippSeconds_fromfile
501 self.dataOut.timeInterval = self.dataOut.ippSeconds * self.dataOut.nCohInt
526 self.dataOut.timeInterval = self.dataOut.ippSeconds * self.dataOut.nCohInt
502 self.dataOut.frequency = self.frequency_h5file
527 self.dataOut.frequency = self.frequency_h5file
528 self.dataOut.npulseByFrame = self.npulseByFrame
503 self.dataOut.nBaud = None
529 self.dataOut.nBaud = None
504 self.dataOut.nCode = None
530 self.dataOut.nCode = None
505 self.dataOut.code = None
531 self.dataOut.code = None
506
532
507 self.dataOut.beamCodeDict = self.beamCodeDict
533 self.dataOut.beamCodeDict = self.beamCodeDict
508 self.dataOut.beamRangeDict = self.beamRangeDict
534 self.dataOut.beamRangeDict = self.beamRangeDict
509
535
536 if self.timezone == 'lt':
537 self.dataOut.timeZone = time.timezone / 60. #get the timezone in minutes
538 else:
539 self.dataOut.timeZone = 0 #by default time is UTC
540
510 def getData(self):
541 def getData(self):
511
542
512 if self.flagNoMoreFiles:
543 if self.flagNoMoreFiles:
@@ -18,19 +18,24 class AMISRProc(ProcessingUnit):
18
18
19 class PrintInfo(Operation):
19 class PrintInfo(Operation):
20 def __init__(self):
20 def __init__(self):
21 pass
21 self.__isPrinted = False
22
22
23 def run(self, dataOut):
23 def run(self, dataOut):
24
24
25 print 'Number of Records by File: %d'%dataOut.nRecords
25 if not self.__isPrinted:
26 print 'Number of Pulses: %d'%dataOut.nProfiles
26 print 'Number of Records by File: %d'%dataOut.nRecords
27 print 'Number of Samples by Pulse: %d'%len(dataOut.heightList)
27 print 'Number of Pulses: %d'%dataOut.nProfiles
28 print 'Ipp Seconds: %f'%dataOut.ippSeconds
28 print 'Number of Pulses by Frame: %d'%dataOut.npulseByFrame
29 print 'Number of Beams: %d'%dataOut.nBeams
29 print 'Number of Samples by Pulse: %d'%len(dataOut.heightList)
30 print 'BeamCodes:'
30 print 'Ipp Seconds: %f'%dataOut.ippSeconds
31 beamStrList = ['Beam %d -> Code %d'%(k,v) for k,v in dataOut.beamCodeDict.items()]
31 print 'Number of Beams: %d'%dataOut.nBeams
32 for b in beamStrList:
32 print 'BeamCodes:'
33 print b
33 beamStrList = ['Beam %d -> Code %d'%(k,v) for k,v in dataOut.beamCodeDict.items()]
34 for b in beamStrList:
35 print b
36 self.__isPrinted = True
37
38 return
34
39
35
40
36 class BeamSelector(Operation):
41 class BeamSelector(Operation):
@@ -13,21 +13,25 controllerObj = Project()
13
13
14 controllerObj.setup(id = '191', name='test01', description=desc)
14 controllerObj.setup(id = '191', name='test01', description=desc)
15
15
16 path = os.path.join(os.environ['HOME'],'Documents/amisr')
17
16
17 path = os.path.join(os.environ['HOME'],'Development/amisr/data')
18 #path = os.path.join(os.environ['HOME'],'Documents/amisr')
18 figpath = os.path.join(os.environ['HOME'],'Pictures/amisr')
19 figpath = os.path.join(os.environ['HOME'],'Pictures/amisr')
19
20
20 readUnitConfObj = controllerObj.addReadUnit(datatype='AMISRReader',
21 readUnitConfObj = controllerObj.addReadUnit(datatype='AMISRReader',
21 path=path,
22 path=path,
22 startDate='2014/08/18',
23 startDate='2014/01/06',
23 endDate='2014/08/18',
24 endDate='2014/12/06',
24 startTime='00:00:00',
25 startTime='00:00:00',
25 endTime='23:59:59',
26 endTime='23:59:59',
26 walk=1)
27 walk=1,
28 timezone='lt')
27
29
28 #AMISR Processing Unit
30 #AMISR Processing Unit
29 procUnitAMISRBeam0 = controllerObj.addProcUnit(datatype='AMISRProc', inputId=readUnitConfObj.getId())
31 procUnitAMISRBeam0 = controllerObj.addProcUnit(datatype='AMISRProc', inputId=readUnitConfObj.getId())
30
32
33 opObj11 = procUnitAMISRBeam0.addOperation(name='PrintInfo', optype='other')
34
31 #Beam Selector
35 #Beam Selector
32 opObj11 = procUnitAMISRBeam0.addOperation(name='BeamSelector', optype='other')
36 opObj11 = procUnitAMISRBeam0.addOperation(name='BeamSelector', optype='other')
33 opObj11.addParameter(name='beam', value='0', format='int')
37 opObj11.addParameter(name='beam', value='0', format='int')
@@ -44,7 +48,7 procUnitConfObjSpectraBeam0.addParameter(name='nProfiles', value=32, format='int
44 #Noise Estimation
48 #Noise Estimation
45 opObj11 = procUnitConfObjSpectraBeam0.addOperation(name='getNoise')
49 opObj11 = procUnitConfObjSpectraBeam0.addOperation(name='getNoise')
46 opObj11.addParameter(name='minHei', value='100', format='float')
50 opObj11.addParameter(name='minHei', value='100', format='float')
47 opObj11.addParameter(name='maxHei', value='450', format='float')
51 opObj11.addParameter(name='maxHei', value='300', format='float')
48
52
49 #SpectraPlot
53 #SpectraPlot
50 opObj11 = procUnitConfObjSpectraBeam0.addOperation(name='SpectraPlot', optype='other')
54 opObj11 = procUnitConfObjSpectraBeam0.addOperation(name='SpectraPlot', optype='other')
@@ -58,14 +62,14 opObj11.addParameter(name='id', value='200', format='int')
58 opObj11.addParameter(name='wintitle', value=title0, format='str')
62 opObj11.addParameter(name='wintitle', value=title0, format='str')
59 opObj11.addParameter(name='showprofile', value='0', format='int')
63 opObj11.addParameter(name='showprofile', value='0', format='int')
60 #Setting RTI time using xmin,xmax
64 #Setting RTI time using xmin,xmax
61 opObj11.addParameter(name='xmin', value='0', format='int')
65 opObj11.addParameter(name='xmin', value='15', format='int')
62 opObj11.addParameter(name='xmax', value='18', format='int')
66 opObj11.addParameter(name='xmax', value='23', format='int')
63 #Setting dB range with zmin, zmax
67 #Setting dB range with zmin, zmax
64 opObj11.addParameter(name='zmin', value='45', format='int')
68 #opObj11.addParameter(name='zmin', value='45', format='int')
65 opObj11.addParameter(name='zmax', value='70', format='int')
69 #opObj11.addParameter(name='zmax', value='70', format='int')
66 #Save RTI
70 #Save RTI
67 figfile0 = 'amisr_rti_beam0.png'
71 #figfile0 = 'amisr_rti_beam0.png'
68 opObj11.addParameter(name='figpath', value=figpath, format='str')
72 #opObj11.addParameter(name='figpath', value=figpath, format='str')
69 #opObj11.addParameter(name='figfile', value=figfile0, format='str')
73 #opObj11.addParameter(name='figfile', value=figfile0, format='str')
70
74
71
75
General Comments 0
You need to be logged in to leave comments. Login now