##// 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 8 self.type = "AMISR"
9 9
10 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 12 self.dstFlag = 0#self.dataIn.dstFlag
13 13 self.errorCount = 0#self.dataIn.errorCount
14 14 self.useLocalTime = True#self.dataIn.useLocalTime
@@ -45,6 +45,8 class AMISR:
45 45 self.beamCodeDict = None
46 46 self.beamRangeDict = None
47 47
48 self.npulseByFrame = None
49
48 50 def copy(self, inputObj=None):
49 51
50 52 if inputObj == None:
@@ -2,7 +2,7 import os
2 2 import numpy
3 3 import time, datetime
4 4 import mpldriver
5 from customftp import *
5
6 6
7 7 import Queue
8 8 import threading
@@ -7,6 +7,7 import sys
7 7 import glob
8 8 import fnmatch
9 9 import datetime
10 import time
10 11 import re
11 12 import h5py
12 13 import numpy
@@ -32,16 +33,21 class RadacHeader():
32 33 self.npulses = self.pulseCount.shape[1] #nprofile
33 34 self.nsamples = self.nsamplesPulse[0,0] #ngates
34 35 self.nbeams = self.beamCode.shape[1]
35
36
36 37
37 38 def getIndexRangeToPulse(self, idrecord=0):
38 indexToZero = numpy.where(self.pulseCount.value[idrecord,:]==0)
39 startPulseCountId = indexToZero[0][0]
40 endPulseCountId = startPulseCountId - 1
41 range1 = numpy.arange(startPulseCountId,self.npulses,1)
42 range2 = numpy.arange(0,startPulseCountId,1)
43 return range1, range2
44
39 #indexToZero = numpy.where(self.pulseCount.value[idrecord,:]==0)
40 #startPulseCountId = indexToZero[0][0]
41 #endPulseCountId = startPulseCountId - 1
42 #range1 = numpy.arange(startPulseCountId,self.npulses,1)
43 #range2 = numpy.arange(0,startPulseCountId,1)
44 #return range1, range2
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 52 class AMISRReader(ProcessingUnit):
47 53
@@ -75,8 +81,8 class AMISRReader(ProcessingUnit):
75 81 self.range = None
76 82 self.idrecord_count = 0
77 83 self.profileIndex = 0
78 self.idpulse_range1 = None
79 self.idpulse_range2 = None
84 self.index_amisr_sample = None
85 self.index_amisr_buffer = None
80 86 self.beamCodeByFrame = None
81 87 self.radacTimeByFrame = None
82 88 #atributos originales tal y como esta en el archivo de datos
@@ -101,6 +107,15 class AMISRReader(ProcessingUnit):
101 107 self.__firstFile = True
102 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 119 def __createObjByDefault(self):
105 120
106 121 dataObj = AMISR()
@@ -251,6 +266,20 class AMISRReader(ProcessingUnit):
251 266 self.radacHeaderObj.npulses = self.npulsesint_fromfile
252 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 283 #get tuning frequency
255 284 frequency_h5file_dataset = self.amisrFilePointer.get('Rx'+'/TuningFrequency')
256 285 self.frequency_h5file = frequency_h5file_dataset[0,0]
@@ -317,7 +346,7 class AMISRReader(ProcessingUnit):
317 346 self.dataByFrame = self.__setDataByFrame()
318 347 self.beamCodeByFrame = self.amisrFilePointer.get('Raw11/Data/RadacHeader/BeamCode').value[0, :]
319 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 350 self.radacTimeByFrame = numpy.zeros(self.radacHeaderObj.npulses)
322 351 self.buffer_radactime = numpy.zeros_like(self.radacTimeByFrame)
323 352
@@ -344,8 +373,10 class AMISRReader(ProcessingUnit):
344 373 endDate=None,
345 374 startTime=datetime.time(0,0,0),
346 375 endTime=datetime.time(23,59,59),
347 walk=True):
376 walk=True,
377 timezone='ut',):
348 378
379 self.timezone = timezone
349 380 #Busqueda de archivos offline
350 381 self.__searchFilesOffline(path, startDate, endDate, startTime, endTime, walk)
351 382
@@ -359,6 +390,11 class AMISRReader(ProcessingUnit):
359 390 self.fileIndex = -1
360 391
361 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 399 def readRanges(self):
364 400 dataset = self.amisrFilePointer.get('Raw11/Data/Samples/Range')
@@ -412,34 +448,23 class AMISRReader(ProcessingUnit):
412 448 self.flagIsNewFile = 0
413 449
414 450 if idrecord == 0:
415 #if self.buffer_last_record == None:
416 selectorById = self.radacHeaderObj.pulseCount[0,self.idpulse_range2]
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
451 self.dataByFrame[self.index4_schain_datablock, : ,:] = self.dataset[0, self.index_amisr_sample,:,:]
452 self.radacTimeByFrame[self.index4_schain_datablock] = self.radacHeaderObj.radacTime[0, self.index_amisr_sample]
426 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 458 return datablock
429 459
430 selectorById = self.radacHeaderObj.pulseCount[idrecord-1,self.idpulse_range1]
431 self.dataByFrame[selectorById,:,:] = self.dataset[idrecord-1, self.idpulse_range1, :, :]
432 self.radacTimeByFrame[selectorById] = self.radacHeaderObj.radacTime[idrecord-1, self.idpulse_range1]
433
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
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()
460 self.dataByFrame[self.index4_buffer,:,:] = self.buffer.copy()
461 self.radacTimeByFrame[self.index4_buffer] = self.buffer_radactime.copy()
462 self.dataByFrame[self.index4_schain_datablock,:,:] = self.dataset[idrecord, self.index_amisr_sample,:,:]
463 self.radacTimeByFrame[self.index4_schain_datablock] = self.radacHeaderObj.radacTime[idrecord, self.index_amisr_sample]
464 datablock = self.__setDataBlock()
439 465
440 selectorById = self.radacHeaderObj.pulseCount[idrecord,self.idpulse_range1]
441 self.dataByFrame[selectorById,:,:] = self.dataset[idrecord, self.idpulse_range1, :, :]
442 self.buffer_radactime[selectorById] = self.radacHeaderObj.radacTime[idrecord, self.idpulse_range1]
466 self.buffer = self.dataset[idrecord, self.index_amisr_buffer, :, :]
467 self.buffer_radactime = self.radacHeaderObj.radacTime[idrecord, self.index_amisr_buffer]
443 468
444 469 return datablock
445 470
@@ -500,13 +525,19 class AMISRReader(ProcessingUnit):
500 525 self.dataOut.ippSeconds = self.ippSeconds_fromfile
501 526 self.dataOut.timeInterval = self.dataOut.ippSeconds * self.dataOut.nCohInt
502 527 self.dataOut.frequency = self.frequency_h5file
528 self.dataOut.npulseByFrame = self.npulseByFrame
503 529 self.dataOut.nBaud = None
504 530 self.dataOut.nCode = None
505 531 self.dataOut.code = None
506 532
507 533 self.dataOut.beamCodeDict = self.beamCodeDict
508 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 541 def getData(self):
511 542
512 543 if self.flagNoMoreFiles:
@@ -18,19 +18,24 class AMISRProc(ProcessingUnit):
18 18
19 19 class PrintInfo(Operation):
20 20 def __init__(self):
21 pass
21 self.__isPrinted = False
22 22
23 23 def run(self, dataOut):
24 24
25 print 'Number of Records by File: %d'%dataOut.nRecords
26 print 'Number of Pulses: %d'%dataOut.nProfiles
27 print 'Number of Samples by Pulse: %d'%len(dataOut.heightList)
28 print 'Ipp Seconds: %f'%dataOut.ippSeconds
29 print 'Number of Beams: %d'%dataOut.nBeams
30 print 'BeamCodes:'
31 beamStrList = ['Beam %d -> Code %d'%(k,v) for k,v in dataOut.beamCodeDict.items()]
32 for b in beamStrList:
33 print b
25 if not self.__isPrinted:
26 print 'Number of Records by File: %d'%dataOut.nRecords
27 print 'Number of Pulses: %d'%dataOut.nProfiles
28 print 'Number of Pulses by Frame: %d'%dataOut.npulseByFrame
29 print 'Number of Samples by Pulse: %d'%len(dataOut.heightList)
30 print 'Ipp Seconds: %f'%dataOut.ippSeconds
31 print 'Number of Beams: %d'%dataOut.nBeams
32 print 'BeamCodes:'
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 41 class BeamSelector(Operation):
@@ -13,21 +13,25 controllerObj = Project()
13 13
14 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 19 figpath = os.path.join(os.environ['HOME'],'Pictures/amisr')
19 20
20 21 readUnitConfObj = controllerObj.addReadUnit(datatype='AMISRReader',
21 22 path=path,
22 startDate='2014/08/18',
23 endDate='2014/08/18',
23 startDate='2014/01/06',
24 endDate='2014/12/06',
24 25 startTime='00:00:00',
25 26 endTime='23:59:59',
26 walk=1)
27 walk=1,
28 timezone='lt')
27 29
28 30 #AMISR Processing Unit
29 31 procUnitAMISRBeam0 = controllerObj.addProcUnit(datatype='AMISRProc', inputId=readUnitConfObj.getId())
30 32
33 opObj11 = procUnitAMISRBeam0.addOperation(name='PrintInfo', optype='other')
34
31 35 #Beam Selector
32 36 opObj11 = procUnitAMISRBeam0.addOperation(name='BeamSelector', optype='other')
33 37 opObj11.addParameter(name='beam', value='0', format='int')
@@ -44,7 +48,7 procUnitConfObjSpectraBeam0.addParameter(name='nProfiles', value=32, format='int
44 48 #Noise Estimation
45 49 opObj11 = procUnitConfObjSpectraBeam0.addOperation(name='getNoise')
46 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 53 #SpectraPlot
50 54 opObj11 = procUnitConfObjSpectraBeam0.addOperation(name='SpectraPlot', optype='other')
@@ -58,14 +62,14 opObj11.addParameter(name='id', value='200', format='int')
58 62 opObj11.addParameter(name='wintitle', value=title0, format='str')
59 63 opObj11.addParameter(name='showprofile', value='0', format='int')
60 64 #Setting RTI time using xmin,xmax
61 opObj11.addParameter(name='xmin', value='0', format='int')
62 opObj11.addParameter(name='xmax', value='18', format='int')
65 opObj11.addParameter(name='xmin', value='15', format='int')
66 opObj11.addParameter(name='xmax', value='23', format='int')
63 67 #Setting dB range with zmin, zmax
64 opObj11.addParameter(name='zmin', value='45', format='int')
65 opObj11.addParameter(name='zmax', value='70', format='int')
68 #opObj11.addParameter(name='zmin', value='45', format='int')
69 #opObj11.addParameter(name='zmax', value='70', format='int')
66 70 #Save RTI
67 figfile0 = 'amisr_rti_beam0.png'
68 opObj11.addParameter(name='figpath', value=figpath, format='str')
71 #figfile0 = 'amisr_rti_beam0.png'
72 #opObj11.addParameter(name='figpath', value=figpath, format='str')
69 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