##// END OF EJS Templates
-Se ha cambiado la forma de calcular los segundos en tiempo local con el parametro Timezone tomado del archivo leido....
Miguel Valdez -
r344:ff2597a84a69
parent child
Show More
@@ -137,8 +137,16 class JROData:
137 137
138 138 flagTimeBlock = False
139 139
140 useLocalTime = False
141
140 142 utctime = None
141 143
144 timeZone = None
145
146 dstFlag = None
147
148 errorCount = None
149
142 150 blocksize = None
143 151
144 152 nCode = None
@@ -213,17 +221,24 class JROData:
213 221
214 222 return heis
215 223
224 def getltctime(self):
225
226 if self.useLocalTime:
227 return self.utctime - self.timeZone*60
228
229 return self.utctime
230
216 231 def getDatatime(self):
217 232
218 datatime = datetime.datetime.utcfromtimestamp(self.utctime)
233 datatime = datetime.datetime.utcfromtimestamp(self.ltctime)
219 234 return datatime
220 235
221 236 def getTimeRange(self):
222 237
223 238 datatime = []
224 239
225 datatime.append(self.utctime)
226 datatime.append(self.utctime + self.timeInterval)
240 datatime.append(self.ltctime)
241 datatime.append(self.ltctime + self.timeInterval)
227 242
228 243 datatime = numpy.array(datatime)
229 244
@@ -250,6 +265,7 class JROData:
250 265 nHeights = property(getNHeights, "I'm the 'nHeights' property.")
251 266 noise = property(getNoise, "I'm the 'nHeights' property.")
252 267 datatime = property(getDatatime, "I'm the 'datatime' property")
268 ltctime = property(getltctime, "I'm the 'ltctime' property")
253 269
254 270 class Voltage(JROData):
255 271
@@ -289,6 +305,12 class Voltage(JROData):
289 305
290 306 self.utctime = None
291 307
308 self.timeZone = None
309
310 self.dstFlag = None
311
312 self.errorCount = None
313
292 314 self.nCohInt = None
293 315
294 316 self.blocksize = None
@@ -10,13 +10,16 import time
10 10 import numpy
11 11 import fnmatch
12 12 import time, datetime
13 import pyfits
13 try:
14 import pyfits
15 except:
16 print "pyfits module has not been imported, it should be installed to save files in fits format"
14 17
15 18 from jrodata import *
16 19 from jroheaderIO import *
17 20 from jroprocessing import *
18 21
19 LOCALTIME = -18000
22 LOCALTIME = True #-18000
20 23
21 24 def isNumber(str):
22 25 """
@@ -328,6 +331,8 class JRODataReader(JRODataIO, ProcessingUnit):
328 331
329 332 __printInfo = True
330 333
334 profileIndex = None
335
331 336 def __init__(self):
332 337
333 338 """
@@ -921,6 +926,24 class JRODataReader(JRODataIO, ProcessingUnit):
921 926
922 927 return self.dataOut
923 928
929 def getBasicHeader(self):
930
931 self.dataOut.utctime = self.basicHeaderObj.utc + self.basicHeaderObj.miliSecond/1000. + self.profileIndex * self.ippSeconds
932
933 self.dataOut.flagTimeBlock = self.flagTimeBlock
934
935 self.dataOut.timeZone = self.basicHeaderObj.timeZone
936
937 self.dataOut.dstFlag = self.basicHeaderObj.dstFlag
938
939 self.dataOut.errorCount = self.basicHeaderObj.errorCount
940
941 self.dataOut.useLocalTime = self.basicHeaderObj.useLocalTime
942
943 def getFirstHeader(self):
944
945 raise ValueError, "This method has not been implemented"
946
924 947 def getData():
925 948
926 949 raise ValueError, "This method has not been implemented"
@@ -1011,7 +1034,23 class JRODataWriter(JRODataIO, Operation):
1011 1034 def putData(self):
1012 1035 raise ValueError, "No implemented"
1013 1036
1014 def getDataHeader(self):
1037
1038 def setBasicHeader(self):
1039
1040 self.basicHeaderObj.size = self.basicHeaderSize #bytes
1041 self.basicHeaderObj.version = self.versionFile
1042 self.basicHeaderObj.dataBlock = self.nTotalBlocks
1043
1044 utc = numpy.floor(self.dataOut.utctime)
1045 milisecond = (self.dataOut.utctime - utc)* 1000.0
1046
1047 self.basicHeaderObj.utc = utc
1048 self.basicHeaderObj.miliSecond = milisecond
1049 self.basicHeaderObj.timeZone = self.dataOut.timeZone
1050 self.basicHeaderObj.dstFlag = self.dataOut.dstFlag
1051 self.basicHeaderObj.errorCount = self.dataOut.errorCount
1052
1053 def setFirstHeader(self):
1015 1054 """
1016 1055 Obtiene una copia del First Header
1017 1056
@@ -1027,22 +1066,7 class JRODataWriter(JRODataIO, Operation):
1027 1066 """
1028 1067
1029 1068 raise ValueError, "No implemented"
1030
1031 def getBasicHeader(self):
1032
1033 self.basicHeaderObj.size = self.basicHeaderSize #bytes
1034 self.basicHeaderObj.version = self.versionFile
1035 self.basicHeaderObj.dataBlock = self.nTotalBlocks
1036
1037 utc = numpy.floor(self.dataOut.utctime)
1038 milisecond = (self.dataOut.utctime - utc)* 1000.0
1039
1040 self.basicHeaderObj.utc = utc
1041 self.basicHeaderObj.miliSecond = milisecond
1042 self.basicHeaderObj.timeZone = 0
1043 self.basicHeaderObj.dstFlag = 0
1044 self.basicHeaderObj.errorCount = 0
1045
1069
1046 1070 def __writeFirstHeader(self):
1047 1071 """
1048 1072 Escribe el primer header del file es decir el Basic header y el Long header (SystemHeader, RadarControllerHeader, ProcessingHeader)
@@ -1170,7 +1194,7 class JRODataWriter(JRODataIO, Operation):
1170 1194 self.setFile = setFile
1171 1195 self.flagIsNewFile = 1
1172 1196
1173 self.getDataHeader()
1197 self.setFirstHeader()
1174 1198
1175 1199 print 'Writing the file: %s'%self.filename
1176 1200
@@ -1441,6 +1465,43 class VoltageReader(JRODataReader):
1441 1465
1442 1466 return 1
1443 1467
1468 def getFirstHeader(self):
1469
1470 self.dataOut.dtype = self.dtype
1471
1472 self.dataOut.nProfiles = self.processingHeaderObj.profilesPerBlock
1473
1474 xf = self.processingHeaderObj.firstHeight + self.processingHeaderObj.nHeights*self.processingHeaderObj.deltaHeight
1475
1476 self.dataOut.heightList = numpy.arange(self.processingHeaderObj.firstHeight, xf, self.processingHeaderObj.deltaHeight)
1477
1478 self.dataOut.channelList = range(self.systemHeaderObj.nChannels)
1479
1480 self.dataOut.ippSeconds = self.ippSeconds
1481
1482 self.dataOut.timeInterval = self.ippSeconds * self.processingHeaderObj.nCohInt
1483
1484 self.dataOut.nCohInt = self.processingHeaderObj.nCohInt
1485
1486 self.dataOut.flagShiftFFT = False
1487
1488 if self.radarControllerHeaderObj.code != None:
1489
1490 self.dataOut.nCode = self.radarControllerHeaderObj.nCode
1491
1492 self.dataOut.nBaud = self.radarControllerHeaderObj.nBaud
1493
1494 self.dataOut.code = self.radarControllerHeaderObj.code
1495
1496 self.dataOut.systemHeaderObj = self.systemHeaderObj.copy()
1497
1498 self.dataOut.radarControllerHeaderObj = self.radarControllerHeaderObj.copy()
1499
1500 self.dataOut.flagDecodeData = False #asumo q la data no esta decodificada
1501
1502 self.dataOut.flagDeflipData = False #asumo q la data no esta sin flip
1503
1504 self.dataOut.flagShiftFFT = False
1444 1505
1445 1506 def getData(self):
1446 1507 """
@@ -1478,48 +1539,7 class VoltageReader(JRODataReader):
1478 1539 if not( self.readNextBlock() ):
1479 1540 return 0
1480 1541
1481 self.dataOut.dtype = self.dtype
1482
1483 self.dataOut.nProfiles = self.processingHeaderObj.profilesPerBlock
1484
1485 xf = self.processingHeaderObj.firstHeight + self.processingHeaderObj.nHeights*self.processingHeaderObj.deltaHeight
1486
1487 self.dataOut.heightList = numpy.arange(self.processingHeaderObj.firstHeight, xf, self.processingHeaderObj.deltaHeight)
1488
1489 self.dataOut.channelList = range(self.systemHeaderObj.nChannels)
1490
1491 self.dataOut.flagTimeBlock = self.flagTimeBlock
1492
1493 self.dataOut.ippSeconds = self.ippSeconds
1494
1495 self.dataOut.timeInterval = self.ippSeconds * self.processingHeaderObj.nCohInt
1496
1497 self.dataOut.nCohInt = self.processingHeaderObj.nCohInt
1498
1499 self.dataOut.flagShiftFFT = False
1500
1501 if self.radarControllerHeaderObj.code != None:
1502
1503 self.dataOut.nCode = self.radarControllerHeaderObj.nCode
1504
1505 self.dataOut.nBaud = self.radarControllerHeaderObj.nBaud
1506
1507 self.dataOut.code = self.radarControllerHeaderObj.code
1508
1509 self.dataOut.systemHeaderObj = self.systemHeaderObj.copy()
1510
1511 self.dataOut.radarControllerHeaderObj = self.radarControllerHeaderObj.copy()
1512
1513 self.dataOut.flagDecodeData = False #asumo q la data no esta decodificada
1514
1515 self.dataOut.flagDeflipData = False #asumo q la data no esta sin flip
1516
1517 self.dataOut.flagShiftFFT = False
1518
1519
1520 # self.updateDataHeader()
1521
1522 #data es un numpy array de 3 dmensiones (perfiles, alturas y canales)
1542 self.getFirstHeader()
1523 1543
1524 1544 if self.datablock == None:
1525 1545 self.dataOut.flagNoData = True
@@ -1527,16 +1547,11 class VoltageReader(JRODataReader):
1527 1547
1528 1548 self.dataOut.data = self.datablock[:,self.profileIndex,:]
1529 1549
1530 self.dataOut.utctime = self.basicHeaderObj.utc + self.basicHeaderObj.miliSecond/1000. + self.profileIndex * self.ippSeconds
1531
1532 self.profileIndex += 1
1533
1534 1550 self.dataOut.flagNoData = False
1535 1551
1536 # print self.profileIndex, self.dataOut.utctime
1537 # if self.profileIndex == 800:
1538 # a=1
1552 self.getBasicHeader()
1539 1553
1554 self.profileIndex += 1
1540 1555
1541 1556 return self.dataOut.data
1542 1557
@@ -1678,7 +1693,7 class VoltageWriter(JRODataWriter):
1678 1693 self.setNextFile()
1679 1694
1680 1695 if self.profileIndex == 0:
1681 self.getBasicHeader()
1696 self.setBasicHeader()
1682 1697
1683 1698 self.datablock[:,self.profileIndex,:] = self.dataOut.data
1684 1699
@@ -1687,7 +1702,7 class VoltageWriter(JRODataWriter):
1687 1702 if self.hasAllDataInBuffer():
1688 1703 #if self.flagIsNewFile:
1689 1704 self.writeNextBlock()
1690 # self.getDataHeader()
1705 # self.setFirstHeader()
1691 1706
1692 1707 return 1
1693 1708
@@ -1759,7 +1774,7 class VoltageWriter(JRODataWriter):
1759 1774
1760 1775 return blocksize
1761 1776
1762 def getDataHeader(self):
1777 def setFirstHeader(self):
1763 1778
1764 1779 """
1765 1780 Obtiene una copia del First Header
@@ -1777,7 +1792,7 class VoltageWriter(JRODataWriter):
1777 1792 self.systemHeaderObj.nChannels = self.dataOut.nChannels
1778 1793 self.radarControllerHeaderObj = self.dataOut.radarControllerHeaderObj.copy()
1779 1794
1780 self.getBasicHeader()
1795 self.setBasicHeader()
1781 1796
1782 1797 processingHeaderSize = 40 # bytes
1783 1798 self.processingHeaderObj.dtype = 0 # Voltage
@@ -1864,7 +1879,6 class SpectraReader(JRODataReader):
1864 1879 nRdPairs = None
1865 1880
1866 1881 rdPairList = []
1867
1868 1882
1869 1883 def __init__(self):
1870 1884 """
@@ -1963,6 +1977,8 class SpectraReader(JRODataReader):
1963 1977 self.blocksize = 0
1964 1978
1965 1979 self.dataOut = self.createObjByDefault()
1980
1981 self.profileIndex = 1 #Always
1966 1982
1967 1983
1968 1984 def createObjByDefault(self):
@@ -2088,7 +2104,52 class SpectraReader(JRODataReader):
2088 2104
2089 2105 return 1
2090 2106
2107 def getFirstHeader(self):
2108
2109 self.dataOut.dtype = self.dtype
2110
2111 self.dataOut.nPairs = self.nRdPairs
2112
2113 self.dataOut.pairsList = self.rdPairList
2114
2115 self.dataOut.nProfiles = self.processingHeaderObj.profilesPerBlock
2116
2117 self.dataOut.nFFTPoints = self.processingHeaderObj.profilesPerBlock
2118
2119 self.dataOut.nCohInt = self.processingHeaderObj.nCohInt
2120
2121 self.dataOut.nIncohInt = self.processingHeaderObj.nIncohInt
2122
2123 xf = self.processingHeaderObj.firstHeight + self.processingHeaderObj.nHeights*self.processingHeaderObj.deltaHeight
2091 2124
2125 self.dataOut.heightList = numpy.arange(self.processingHeaderObj.firstHeight, xf, self.processingHeaderObj.deltaHeight)
2126
2127 self.dataOut.channelList = range(self.systemHeaderObj.nChannels)
2128
2129 self.dataOut.ippSeconds = self.ippSeconds
2130
2131 self.dataOut.timeInterval = self.ippSeconds * self.processingHeaderObj.nCohInt * self.processingHeaderObj.nIncohInt * self.dataOut.nFFTPoints
2132
2133 self.dataOut.systemHeaderObj = self.systemHeaderObj.copy()
2134
2135 self.dataOut.radarControllerHeaderObj = self.radarControllerHeaderObj.copy()
2136
2137 self.dataOut.flagShiftFFT = self.processingHeaderObj.shif_fft
2138
2139 self.dataOut.flagDecodeData = False #asumo q la data no esta decodificada
2140
2141 self.dataOut.flagDeflipData = True #asumo q la data no esta sin flip
2142
2143 if self.processingHeaderObj.code != None:
2144
2145 self.dataOut.nCode = self.processingHeaderObj.nCode
2146
2147 self.dataOut.nBaud = self.processingHeaderObj.nBaud
2148
2149 self.dataOut.code = self.processingHeaderObj.code
2150
2151 self.dataOut.flagDecodeData = True
2152
2092 2153 def getData(self):
2093 2154 """
2094 2155 Copia el buffer de lectura a la clase "Spectra",
@@ -2118,80 +2179,26 class SpectraReader(JRODataReader):
2118 2179
2119 2180 if not( self.readNextBlock() ):
2120 2181 self.dataOut.flagNoData = True
2121 return 0
2122
2123 # self.updateDataHeader()
2182 return 0
2124 2183
2125 2184 #data es un numpy array de 3 dmensiones (perfiles, alturas y canales)
2126 2185
2127 2186 if self.data_dc == None:
2128 2187 self.dataOut.flagNoData = True
2129 2188 return 0
2189
2190 self.getBasicHeader()
2191
2192 self.getFirstHeader()
2130 2193
2131 2194 self.dataOut.data_spc = self.data_spc
2132 2195
2133 2196 self.dataOut.data_cspc = self.data_cspc
2134 2197
2135 2198 self.dataOut.data_dc = self.data_dc
2136
2137 self.dataOut.flagTimeBlock = self.flagTimeBlock
2138 2199
2139 2200 self.dataOut.flagNoData = False
2140
2141 self.dataOut.dtype = self.dtype
2142
2143 # self.dataOut.nChannels = self.nRdChannels
2144
2145 self.dataOut.nPairs = self.nRdPairs
2146
2147 self.dataOut.pairsList = self.rdPairList
2148
2149 # self.dataOut.nHeights = self.processingHeaderObj.nHeights
2150
2151 self.dataOut.nProfiles = self.processingHeaderObj.profilesPerBlock
2152
2153 self.dataOut.nFFTPoints = self.processingHeaderObj.profilesPerBlock
2154
2155 self.dataOut.nCohInt = self.processingHeaderObj.nCohInt
2156
2157 self.dataOut.nIncohInt = self.processingHeaderObj.nIncohInt
2158
2159 xf = self.processingHeaderObj.firstHeight + self.processingHeaderObj.nHeights*self.processingHeaderObj.deltaHeight
2160
2161 self.dataOut.heightList = numpy.arange(self.processingHeaderObj.firstHeight, xf, self.processingHeaderObj.deltaHeight)
2162
2163 self.dataOut.channelList = range(self.systemHeaderObj.nChannels)
2164 2201
2165 # self.dataOut.channelIndexList = range(self.systemHeaderObj.nChannels)
2166
2167 self.dataOut.utctime = self.basicHeaderObj.utc + self.basicHeaderObj.miliSecond/1000.#+ self.profileIndex * self.ippSeconds
2168
2169 self.dataOut.ippSeconds = self.ippSeconds
2170
2171 self.dataOut.timeInterval = self.ippSeconds * self.processingHeaderObj.nCohInt * self.processingHeaderObj.nIncohInt * self.dataOut.nFFTPoints
2172
2173 # self.profileIndex += 1
2174
2175 self.dataOut.systemHeaderObj = self.systemHeaderObj.copy()
2176
2177 self.dataOut.radarControllerHeaderObj = self.radarControllerHeaderObj.copy()
2178
2179 self.dataOut.flagShiftFFT = self.processingHeaderObj.shif_fft
2180
2181 self.dataOut.flagDecodeData = False #asumo q la data no esta decodificada
2182
2183 self.dataOut.flagDeflipData = True #asumo q la data no esta sin flip
2184
2185 if self.processingHeaderObj.code != None:
2186
2187 self.dataOut.nCode = self.processingHeaderObj.nCode
2188
2189 self.dataOut.nBaud = self.processingHeaderObj.nBaud
2190
2191 self.dataOut.code = self.processingHeaderObj.code
2192
2193 self.dataOut.flagDecodeData = True
2194
2195 2202 return self.dataOut.data_spc
2196 2203
2197 2204
@@ -2377,7 +2384,7 class SpectraWriter(JRODataWriter):
2377 2384 self.setNextFile()
2378 2385
2379 2386 if self.flagIsNewFile == 0:
2380 self.getBasicHeader()
2387 self.setBasicHeader()
2381 2388
2382 2389 self.data_spc = self.dataOut.data_spc.copy()
2383 2390 self.data_cspc = self.dataOut.data_cspc.copy()
@@ -2385,7 +2392,7 class SpectraWriter(JRODataWriter):
2385 2392
2386 2393 # #self.processingHeaderObj.dataBlocksPerFile)
2387 2394 if self.hasAllDataInBuffer():
2388 # self.getDataHeader()
2395 # self.setFirstHeader()
2389 2396 self.writeNextBlock()
2390 2397
2391 2398 return 1
@@ -2476,7 +2483,7 class SpectraWriter(JRODataWriter):
2476 2483
2477 2484 return blocksize
2478 2485
2479 def getDataHeader(self):
2486 def setFirstHeader(self):
2480 2487
2481 2488 """
2482 2489 Obtiene una copia del First Header
@@ -2494,7 +2501,7 class SpectraWriter(JRODataWriter):
2494 2501 self.systemHeaderObj.nChannels = self.dataOut.nChannels
2495 2502 self.radarControllerHeaderObj = self.dataOut.radarControllerHeaderObj.copy()
2496 2503
2497 self.getBasicHeader()
2504 self.setBasicHeader()
2498 2505
2499 2506 processingHeaderSize = 40 # bytes
2500 2507 self.processingHeaderObj.dtype = 1 # Spectra
@@ -2506,6 +2513,7 class SpectraWriter(JRODataWriter):
2506 2513 self.processingHeaderObj.nCohInt = self.dataOut.nCohInt# Se requiere para determinar el valor de timeInterval
2507 2514 self.processingHeaderObj.nIncohInt = self.dataOut.nIncohInt
2508 2515 self.processingHeaderObj.totalSpectra = self.dataOut.nPairs + self.dataOut.nChannels
2516 self.processingHeaderObj.shif_fft = self.dataOut.flagShiftFFT
2509 2517
2510 2518 if self.processingHeaderObj.totalSpectra > 0:
2511 2519 channelList = []
@@ -36,6 +36,7 class BasicHeader(Header):
36 36 version = None
37 37 dataBlock = None
38 38 utc = None
39 ltc = None
39 40 miliSecond = None
40 41 timeZone = None
41 42 dstFlag = None
@@ -45,7 +46,7 class BasicHeader(Header):
45 46
46 47 __LOCALTIME = None
47 48
48 def __init__(self, localtime=0):
49 def __init__(self, useLocalTime=True):
49 50
50 51 self.size = 0
51 52 self.version = 0
@@ -66,7 +67,7 class BasicHeader(Header):
66 67 ('nErrorCount','<u4')
67 68 ])
68 69
69 self.__LOCALTIME = localtime
70 self.useLocalTime = useLocalTime
70 71
71 72 def read(self, fp):
72 73 try:
@@ -80,9 +81,12 class BasicHeader(Header):
80 81 self.dstFlag = int(header['nDstflag'][0])
81 82 self.errorCount = int(header['nErrorCount'][0])
82 83
83 self.utc += self.__LOCALTIME
84 self.ltc = self.utc
84 85
85 self.datatime = datetime.datetime.utcfromtimestamp(self.utc)
86 if self.useLocalTime:
87 self.ltc -= self.timeZone*60
88
89 self.datatime = datetime.datetime.utcfromtimestamp(self.ltc)
86 90
87 91 except Exception, e:
88 92 print "BasicHeader: "
@@ -92,7 +96,7 class BasicHeader(Header):
92 96 return 1
93 97
94 98 def write(self, fp):
95 self.utc -= self.__LOCALTIME
99
96 100 headerTuple = (self.size,self.version,self.dataBlock,self.utc,self.miliSecond,self.timeZone,self.dstFlag,self.errorCount)
97 101 header = numpy.array(headerTuple,self.struct)
98 102 header.tofile(fp)
@@ -695,6 +695,11 class SpectraProc(ProcessingUnit):
695 695
696 696 def __updateObjFromInput(self):
697 697
698 self.dataOut.timeZone = self.dataIn.timeZone
699 self.dataOut.dstFlag = self.dataIn.dstFlag
700 self.dataOut.errorCount = self.dataIn.errorCount
701 self.dataOut.useLocalTime = self.dataIn.useLocalTime
702
698 703 self.dataOut.radarControllerHeaderObj = self.dataIn.radarControllerHeaderObj.copy()
699 704 self.dataOut.systemHeaderObj = self.dataIn.systemHeaderObj.copy()
700 705 self.dataOut.channelList = self.dataIn.channelList
@@ -759,6 +764,7 class SpectraProc(ProcessingUnit):
759 764 self.dataOut.data_cspc = cspc
760 765 self.dataOut.data_dc = dc
761 766 self.dataOut.blockSize = blocksize
767 self.dataOut.flagShiftFFT = True
762 768
763 769 def init(self, nFFTPoints=None, pairsList=None):
764 770
General Comments 0
You need to be logged in to leave comments. Login now