@@ -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 = |
|
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.i |
|
84 | self.index_amisr_sample = None | |
79 |
self.i |
|
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.i |
|
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 |
sele |
|
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 |
|
26 | print 'Number of Records by File: %d'%dataOut.nRecords | |
27 |
print 'Number of |
|
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 |
|
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/0 |
|
23 | startDate='2014/01/06', | |
23 |
endDate='2014/ |
|
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=' |
|
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=' |
|
65 | opObj11.addParameter(name='xmin', value='15', format='int') | |
62 |
opObj11.addParameter(name='xmax', value=' |
|
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