@@ -8,7 +8,7 class AMISR: | |||
|
8 | 8 | self.type = "AMISR" |
|
9 | 9 | |
|
10 | 10 | #propiedades para compatibilidad con Voltages |
|
11 |
self.timeZone = |
|
|
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.i |
|
|
79 |
self.i |
|
|
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.i |
|
|
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 |
sele |
|
|
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 |
|
|
27 |
print 'Number of |
|
|
28 | print 'Ipp Seconds: %f'%dataOut.ippSeconds | |
|
29 |
print 'Number of |
|
|
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/0 |
|
|
23 |
endDate='2014/ |
|
|
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=' |
|
|
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=' |
|
|
62 |
opObj11.addParameter(name='xmax', value=' |
|
|
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