##// END OF EJS Templates
En esta version se corrigieron los bugs de lectura, la lectura se ha implementado para modo offline, el script TestReader.py es un ejemplo que muestra como debe hacerse la lectura de rawdata usando estas librerias.
Daniel Valdez -
r8:cd80c0608691
parent child
Show More
@@ -1,235 +1,237
1 import numpy
2
1 class PROCFLAG:
3 class PROCFLAG:
2 COHERENT_INTEGRATION = numpy.uint32(0x00000001)
4 COHERENT_INTEGRATION = numpy.uint32(0x00000001)
3 DECODE_DATA = numpy.uint32(0x00000002)
5 DECODE_DATA = numpy.uint32(0x00000002)
4 SPECTRA_CALC = numpy.uint32(0x00000004)
6 SPECTRA_CALC = numpy.uint32(0x00000004)
5 INCOHERENT_INTEGRATION = numpy.uint32(0x00000008)
7 INCOHERENT_INTEGRATION = numpy.uint32(0x00000008)
6 POST_COHERENT_INTEGRATION = numpy.uint32(0x00000010)
8 POST_COHERENT_INTEGRATION = numpy.uint32(0x00000010)
7 SHIFT_FFT_DATA = numpy.uint32(0x00000020)
9 SHIFT_FFT_DATA = numpy.uint32(0x00000020)
8
10
9 DATATYPE_CHAR = numpy.uint32(0x00000040)
11 DATATYPE_CHAR = numpy.uint32(0x00000040)
10 DATATYPE_SHORT = numpy.uint32(0x00000080)
12 DATATYPE_SHORT = numpy.uint32(0x00000080)
11 DATATYPE_LONG = numpy.uint32(0x00000100)
13 DATATYPE_LONG = numpy.uint32(0x00000100)
12 DATATYPE_INT64 = numpy.uint32(0x00000200)
14 DATATYPE_INT64 = numpy.uint32(0x00000200)
13 DATATYPE_FLOAT = numpy.uint32(0x00000400)
15 DATATYPE_FLOAT = numpy.uint32(0x00000400)
14 DATATYPE_DOUBLE = numpy.uint32(0x00000800)
16 DATATYPE_DOUBLE = numpy.uint32(0x00000800)
15
17
16 DATAARRANGE_CONTIGUOUS_CH = numpy.uint32(0x00001000)
18 DATAARRANGE_CONTIGUOUS_CH = numpy.uint32(0x00001000)
17 DATAARRANGE_CONTIGUOUS_H = numpy.uint32(0x00002000)
19 DATAARRANGE_CONTIGUOUS_H = numpy.uint32(0x00002000)
18 DATAARRANGE_CONTIGUOUS_P = numpy.uint32(0x00004000)
20 DATAARRANGE_CONTIGUOUS_P = numpy.uint32(0x00004000)
19
21
20 SAVE_CHANNELS_DC = numpy.uint32(0x00008000)
22 SAVE_CHANNELS_DC = numpy.uint32(0x00008000)
21 DEFLIP_DATA = numpy.uint32(0x00010000)
23 DEFLIP_DATA = numpy.uint32(0x00010000)
22 DEFINE_PROCESS_CODE = numpy.uint32(0x00020000)
24 DEFINE_PROCESS_CODE = numpy.uint32(0x00020000)
23
25
24 ACQ_SYS_NATALIA = numpy.uint32(0x00040000)
26 ACQ_SYS_NATALIA = numpy.uint32(0x00040000)
25 ACQ_SYS_ECHOTEK = numpy.uint32(0x00080000)
27 ACQ_SYS_ECHOTEK = numpy.uint32(0x00080000)
26 ACQ_SYS_ADRXD = numpy.uint32(0x000C0000)
28 ACQ_SYS_ADRXD = numpy.uint32(0x000C0000)
27 ACQ_SYS_JULIA = numpy.uint32(0x00100000)
29 ACQ_SYS_JULIA = numpy.uint32(0x00100000)
28 ACQ_SYS_XXXXXX = numpy.uint32(0x00140000)
30 ACQ_SYS_XXXXXX = numpy.uint32(0x00140000)
29
31
30 EXP_NAME_ESP = numpy.uint32(0x00200000)
32 EXP_NAME_ESP = numpy.uint32(0x00200000)
31 CHANNEL_NAMES_ESP = numpy.uint32(0x00400000)
33 CHANNEL_NAMES_ESP = numpy.uint32(0x00400000)
32
34
33 OPERATION_MASK = numpy.uint32(0x0000003F)
35 OPERATION_MASK = numpy.uint32(0x0000003F)
34 DATATYPE_MASK = numpy.uint32(0x00000FC0)
36 DATATYPE_MASK = numpy.uint32(0x00000FC0)
35 DATAARRANGE_MASK = numpy.uint32(0x00007000)
37 DATAARRANGE_MASK = numpy.uint32(0x00007000)
36 ACQ_SYS_MASK = numpy.uint32(0x001C0000)
38 ACQ_SYS_MASK = numpy.uint32(0x001C0000)
37
39
38 class BasicHeader:
40 class BasicHeader:
39
41
40 size = 0
42 size = 0
41 version = 0
43 version = 0
42 dataBlock = 0
44 dataBlock = 0
43 utc = 0
45 utc = 0
44 miliSecond = 0
46 miliSecond = 0
45 timeZone = 0
47 timeZone = 0
46 dstFlag = 0
48 dstFlag = 0
47 errorCount = 0
49 errorCount = 0
48 struct = numpy.dtype([
50 struct = numpy.dtype([
49 ('nSize','<u4'),
51 ('nSize','<u4'),
50 ('nVersion','<u2'),
52 ('nVersion','<u2'),
51 ('nDataBlockId','<u4'),
53 ('nDataBlockId','<u4'),
52 ('nUtime','<u4'),
54 ('nUtime','<u4'),
53 ('nMilsec','<u2'),
55 ('nMilsec','<u2'),
54 ('nTimezone','<i2'),
56 ('nTimezone','<i2'),
55 ('nDstflag','<i2'),
57 ('nDstflag','<i2'),
56 ('nErrorCount','<u4')
58 ('nErrorCount','<u4')
57 ])
59 ])
58
60
59 def __init__(self):
61 def __init__(self):
60 pass
62 pass
61
63
62 def read(self, fp):
64 def read(self, fp):
63
65
64 header = numpy.fromfile(fp, self.struct,1)
66 header = numpy.fromfile(fp, self.struct,1)
65 self.size = header['nSize'][0]
67 self.size = header['nSize'][0]
66 self.version = header['nVersion'][0]
68 self.version = header['nVersion'][0]
67 self.dataBlock = header['nDataBlockId'][0]
69 self.dataBlock = header['nDataBlockId'][0]
68 self.utc = header['nUtime'][0]
70 self.utc = header['nUtime'][0]
69 self.miliSecond = header['nMilsec'][0]
71 self.miliSecond = header['nMilsec'][0]
70 self.timeZone = header['nTimezone'][0]
72 self.timeZone = header['nTimezone'][0]
71 self.dstFlag = header['nDstflag'][0]
73 self.dstFlag = header['nDstflag'][0]
72 self.errorCount = header['nErrorCount'][0]
74 self.errorCount = header['nErrorCount'][0]
73
75
74 return 1
76 return 1
75
77
76 class SystemHeader:
78 class SystemHeader:
77 size = 0
79 size = 0
78 numSamples = 0
80 numSamples = 0
79 numProfiles = 0
81 numProfiles = 0
80 numChannels = 0
82 numChannels = 0
81 adcResolution = 0
83 adcResolution = 0
82 pciDioBusWidth = 0
84 pciDioBusWidth = 0
83 struct = numpy.dtype([
85 struct = numpy.dtype([
84 ('nSize','<u4'),
86 ('nSize','<u4'),
85 ('nNumSamples','<u4'),
87 ('nNumSamples','<u4'),
86 ('nNumProfiles','<u4'),
88 ('nNumProfiles','<u4'),
87 ('nNumChannels','<u4'),
89 ('nNumChannels','<u4'),
88 ('nADCResolution','<u4'),
90 ('nADCResolution','<u4'),
89 ('nPCDIOBusWidth','<u4'),
91 ('nPCDIOBusWidth','<u4'),
90 ])
92 ])
91
93
92 def __init__(self):
94 def __init__(self):
93 pass
95 pass
94
96
95 def read(self, fp):
97 def read(self, fp):
96 header = numpy.fromfile(fp,self.struct,1)
98 header = numpy.fromfile(fp,self.struct,1)
97 self.size = header['nSize'][0]
99 self.size = header['nSize'][0]
98 self.numSamples = header['nNumSamples'][0]
100 self.numSamples = header['nNumSamples'][0]
99 self.numProfiles = header['nNumProfiles'][0]
101 self.numProfiles = header['nNumProfiles'][0]
100 self.numChannels = header['nNumChannels'][0]
102 self.numChannels = header['nNumChannels'][0]
101 self.adcResolution = header['nADCResolution'][0]
103 self.adcResolution = header['nADCResolution'][0]
102 self.pciDioBusWidth = header['nPCDIOBusWidth'][0]
104 self.pciDioBusWidth = header['nPCDIOBusWidth'][0]
103
105
104
106
105 return 1
107 return 1
106
108
107 class RadarControllerHeader:
109 class RadarControllerHeader:
108 size = 0
110 size = 0
109 expType = 0
111 expType = 0
110 nTx = 0
112 nTx = 0
111 ipp = 0
113 ipp = 0
112 txA = 0
114 txA = 0
113 txB = 0
115 txB = 0
114 numWindows = 0
116 numWindows = 0
115 numTaus = 0
117 numTaus = 0
116 codeType = 0
118 codeType = 0
117 line6Function = 0
119 line6Function = 0
118 line5Fuction = 0
120 line5Fuction = 0
119 fClock = 0
121 fClock = 0
120 prePulseBefore = 0
122 prePulseBefore = 0
121 prePulserAfter = 0
123 prePulserAfter = 0
122 rangeIpp = 0
124 rangeIpp = 0
123 rangeTxA = 0
125 rangeTxA = 0
124 rangeTxB = 0
126 rangeTxB = 0
125 struct = numpy.dtype([
127 struct = numpy.dtype([
126 ('nSize','<u4'),
128 ('nSize','<u4'),
127 ('nExpType','<u4'),
129 ('nExpType','<u4'),
128 ('nNTx','<u4'),
130 ('nNTx','<u4'),
129 ('fIpp','<f4'),
131 ('fIpp','<f4'),
130 ('fTxA','<f4'),
132 ('fTxA','<f4'),
131 ('fTxB','<f4'),
133 ('fTxB','<f4'),
132 ('nNumWindows','<u4'),
134 ('nNumWindows','<u4'),
133 ('nNumTaus','<u4'),
135 ('nNumTaus','<u4'),
134 ('nCodeType','<u4'),
136 ('nCodeType','<u4'),
135 ('nLine6Function','<u4'),
137 ('nLine6Function','<u4'),
136 ('nLine5Function','<u4'),
138 ('nLine5Function','<u4'),
137 ('fClock','<f4'),
139 ('fClock','<f4'),
138 ('nPrePulseBefore','<u4'),
140 ('nPrePulseBefore','<u4'),
139 ('nPrePulseAfter','<u4'),
141 ('nPrePulseAfter','<u4'),
140 ('sRangeIPP','<a20'),
142 ('sRangeIPP','<a20'),
141 ('sRangeTxA','<a20'),
143 ('sRangeTxA','<a20'),
142 ('sRangeTxB','<a20'),
144 ('sRangeTxB','<a20'),
143 ])
145 ])
144
146
145
147
146 def __init__(self):
148 def __init__(self):
147 pass
149 pass
148
150
149 def read(self, fp):
151 def read(self, fp):
150 header = numpy.fromfile(fp,self.struct,1)
152 header = numpy.fromfile(fp,self.struct,1)
151 self.size = header['nSize'][0]
153 self.size = header['nSize'][0]
152 self.expType = header['nExpType'][0]
154 self.expType = header['nExpType'][0]
153 self.nTx = header['nNTx'][0]
155 self.nTx = header['nNTx'][0]
154 self.ipp = header['fIpp'][0]
156 self.ipp = header['fIpp'][0]
155 self.txA = header['fTxA'][0]
157 self.txA = header['fTxA'][0]
156 self.txB = header['fTxB'][0]
158 self.txB = header['fTxB'][0]
157 self.numWindows = header['nNumWindows'][0]
159 self.numWindows = header['nNumWindows'][0]
158 self.numTaus = header['nNumTaus'][0]
160 self.numTaus = header['nNumTaus'][0]
159 self.codeType = header['nCodeType'][0]
161 self.codeType = header['nCodeType'][0]
160 self.line6Function = header['nLine6Function'][0]
162 self.line6Function = header['nLine6Function'][0]
161 self.line5Fuction = header['nLine5Function'][0]
163 self.line5Fuction = header['nLine5Function'][0]
162 self.fClock = header['fClock'][0]
164 self.fClock = header['fClock'][0]
163 self.prePulseBefore = header['nPrePulseBefore'][0]
165 self.prePulseBefore = header['nPrePulseBefore'][0]
164 self.prePulserAfter = header['nPrePulseAfter'][0]
166 self.prePulserAfter = header['nPrePulseAfter'][0]
165 self.rangeIpp = header['sRangeIPP'][0]
167 self.rangeIpp = header['sRangeIPP'][0]
166 self.rangeTxA = header['sRangeTxA'][0]
168 self.rangeTxA = header['sRangeTxA'][0]
167 self.rangeTxB = header['sRangeTxB'][0]
169 self.rangeTxB = header['sRangeTxB'][0]
168 # jump Dynamic Radar Controller Header
170 # jump Dynamic Radar Controller Header
169 jumpHeader = self.size - 116
171 jumpHeader = self.size - 116
170 fp.seek(fp.tell() + jumpHeader)
172 fp.seek(fp.tell() + jumpHeader)
171
173
172 return 1
174 return 1
173
175
174 class ProcessingHeader:
176 class ProcessingHeader:
175 size = 0
177 size = 0
176 dataType = 0
178 dataType = 0
177 blockSize = 0
179 blockSize = 0
178 profilesPerBlock = 0
180 profilesPerBlock = 0
179 dataBlocksPerFile = 0
181 dataBlocksPerFile = 0
180 numWindows = 0
182 numWindows = 0
181 processFlags = 0
183 processFlags = 0
182 coherentInt = 0
184 coherentInt = 0
183 incoherentInt = 0
185 incoherentInt = 0
184 totalSpectra = 0
186 totalSpectra = 0
185 struct = numpy.dtype([
187 struct = numpy.dtype([
186 ('nSize','<u4'),
188 ('nSize','<u4'),
187 ('nDataType','<u4'),
189 ('nDataType','<u4'),
188 ('nSizeOfDataBlock','<u4'),
190 ('nSizeOfDataBlock','<u4'),
189 ('nProfilesperBlock','<u4'),
191 ('nProfilesperBlock','<u4'),
190 ('nDataBlocksperFile','<u4'),
192 ('nDataBlocksperFile','<u4'),
191 ('nNumWindows','<u4'),
193 ('nNumWindows','<u4'),
192 ('nProcessFlags','<u4'),
194 ('nProcessFlags','<u4'),
193 ('nCoherentIntegrations','<u4'),
195 ('nCoherentIntegrations','<u4'),
194 ('nIncoherentIntegrations','<u4'),
196 ('nIncoherentIntegrations','<u4'),
195 ('nTotalSpectra','<u4')
197 ('nTotalSpectra','<u4')
196 ])
198 ])
197 samplingWindow = 0
199 samplingWindow = 0
198 structSamplingWindow = numpy.dtype([('h0','<f4'),('dh','<f4'),('nsa','<u4')])
200 structSamplingWindow = numpy.dtype([('h0','<f4'),('dh','<f4'),('nsa','<u4')])
199 numHeights = 0
201 numHeights = 0
200 firstHeight = 0
202 firstHeight = 0
201 deltaHeight = 0
203 deltaHeight = 0
202 samplesWin = 0
204 samplesWin = 0
203 spectraComb = 0
205 spectraComb = 0
204 numCode = 0
206 numCode = 0
205 codes = 0
207 codes = 0
206 numBaud = 0
208 numBaud = 0
207
209
208 def __init__(self):
210 def __init__(self):
209 pass
211 pass
210
212
211 def read(self, fp):
213 def read(self, fp):
212 header = numpy.fromfile(fp,self.struct,1)
214 header = numpy.fromfile(fp,self.struct,1)
213 self.size = header['nSize'][0]
215 self.size = header['nSize'][0]
214 self.dataType = header['nDataType'][0]
216 self.dataType = header['nDataType'][0]
215 self.blockSize = header['nSizeOfDataBlock'][0]
217 self.blockSize = header['nSizeOfDataBlock'][0]
216 self.profilesPerBlock = header['nProfilesperBlock'][0]
218 self.profilesPerBlock = header['nProfilesperBlock'][0]
217 self.dataBlocksPerFile = header['nDataBlocksperFile'][0]
219 self.dataBlocksPerFile = header['nDataBlocksperFile'][0]
218 self.numWindows = header['nNumWindows'][0]
220 self.numWindows = header['nNumWindows'][0]
219 self.processFlags = header['nProcessFlags']
221 self.processFlags = header['nProcessFlags']
220 self.coherentInt = header['nCoherentIntegrations'][0]
222 self.coherentInt = header['nCoherentIntegrations'][0]
221 self.incoherentInt = header['nIncoherentIntegrations'][0]
223 self.incoherentInt = header['nIncoherentIntegrations'][0]
222 self.totalSpectra = header['nTotalSpectra'][0]
224 self.totalSpectra = header['nTotalSpectra'][0]
223 self.samplingWindow = numpy.fromfile(fp,self.structSamplingWindow,self.numWindows)
225 self.samplingWindow = numpy.fromfile(fp,self.structSamplingWindow,self.numWindows)
224 self.numHeights = numpy.sum(self.samplingWindow['nsa'])
226 self.numHeights = numpy.sum(self.samplingWindow['nsa'])
225 self.firstHeight = self.samplingWindow['h0']
227 self.firstHeight = self.samplingWindow['h0']
226 self.deltaHeight = self.samplingWindow['dh']
228 self.deltaHeight = self.samplingWindow['dh']
227 self.samplesWin = self.samplingWindow['nsa']
229 self.samplesWin = self.samplingWindow['nsa']
228 self.spectraComb = numpy.fromfile(fp,'u1',2*self.totalSpectra)
230 self.spectraComb = numpy.fromfile(fp,'u1',2*self.totalSpectra)
229 if self.processFlags & PROCFLAG.DEFINE_PROCESS_CODE == PROCFLAG.DEFINE_PROCESS_CODE:
231 if self.processFlags & PROCFLAG.DEFINE_PROCESS_CODE == PROCFLAG.DEFINE_PROCESS_CODE:
230 self.numCode = numpy.fromfile(fp,'<u4',1)
232 self.numCode = numpy.fromfile(fp,'<u4',1)
231 self.numBaud = numpy.fromfile(fp,'<u4',1)
233 self.numBaud = numpy.fromfile(fp,'<u4',1)
232 self.codes = numpy.fromfile(fp,'<f4',self.numCode*self.numBaud).reshape(self.numBaud,self.numCode)
234 self.codes = numpy.fromfile(fp,'<f4',self.numCode*self.numBaud).reshape(self.numBaud,self.numCode)
233
235
234
236
235 return 1 No newline at end of file
237 return 1
@@ -1,375 +1,385
1 '''
1 '''
2 Created on 23/01/2012
2 Created on 23/01/2012
3
3
4 @author: danielangelsuarezmunoz
4 @author: danielangelsuarezmunoz
5 '''
5 '''
6
6
7 import numpy
7 import numpy
8 import os.path
8 import os.path
9 import glob
9 import glob
10 import fnmatch
10 import fnmatch
11 import time
11 import time
12 import datetime
12 import datetime
13
13
14 from Header import *
14 from Header import *
15 from Data import DataReader
15 from Data import DataReader
16 from Data import DataWriter
16 from Data import DataWriter
17
17
18 class VoltageReader(DataReader):
18 class VoltageReader(DataReader):
19 # Este flag indica que la data leida no es continua
20 __jumpDataFlag = False
21
19
22 __idFile = 0
20 __idFile = 0
23
21
24 __fp = 0
22 __fp = 0
25
23
26 __startDateTime = 0
24 __startDateTime = 0
27
25
28 __endDateTime = 0
26 __endDateTime = 0
29
27
30 __dataType = 0
28 __dataType = 0
31
29
32 __sizeOfFileByHeader = 0
30 __sizeOfFileByHeader = 0
33
31
34 __pathList = []
32 __pathList = []
35
33
36 filenameList = []
34 filenameList = []
37
35
38 __lastUTTime = 0
36 __lastUTTime = 0
39
37
40 __maxTimeStep = 5
38 __maxTimeStep = 5
41
39
42 __flagResetProcessing = 0
40 flagResetProcessing = 0
43
41
44 __flagIsNewFile = 0
42 __flagIsNewFile = 0
45
43
46 noMoreFiles = 0
44 noMoreFiles = 0
47
45
48 online = 0
46 online = 0
49
47
50 filename = ''
48 filename = ''
51
49
52 fileSize = 0
50 fileSize = 0
53
51
54 firstHeaderSize = 0
52 firstHeaderSize = 0
55
53
56 basicHeaderSize = 24
54 basicHeaderSize = 24
57
55
58 objBasicHeader = BasicHeader()
56 basicHeaderObj = BasicHeader()
59
57
60 objSystemHeader = SystemHeader()
58 systemHeaderObj = SystemHeader()
61
59
62 objRadarControllerHeader = RadarControllerHeader()
60 radarControllerHeaderObj = RadarControllerHeader()
63
61
64 objProcessingHeader = ProcessingHeader()
62 processingHeaderObj = ProcessingHeader()
65
63
66 __buffer = 0
64 __buffer = 0
67
65
68 __buffer_id = 9999
66 __buffer_id = 9999
69 m_Voltage= Voltage()
67 #m_Voltage= Voltage()
70
68
71
69
72 def __init__(self):
70 def __init__(self):
73 pass
71 pass
74
72
75 def __rdSystemHeader(self,fp=None):
73 def __rdSystemHeader(self,fp=None):
76 if fp == None:
74 if fp == None:
77 fp = self.__fp
75 fp = self.__fp
78
76
79 self.objSystemHeader.read(fp)
77 self.systemHeaderObj.read(fp)
80
78
81 def __rdRadarControllerHeader(self,fp=None):
79 def __rdRadarControllerHeader(self,fp=None):
82 if fp == None:
80 if fp == None:
83 fp = self.__fp
81 fp = self.__fp
84
82
85 self.objRadarControllerHeader.read(fp)
83 self.radarControllerHeaderObj.read(fp)
86
84
87 def __rdProcessingHeader(self,fp=None):
85 def __rdProcessingHeader(self,fp=None):
88 if fp == None:
86 if fp == None:
89 fp = self.__fp
87 fp = self.__fp
90
88
91 self.objProcessingHeader.read(fp)
89 self.processingHeaderObj.read(fp)
92
90
93 def __searchFiles(self,path, startDateTime, endDateTime, set=None, expLabel = "", ext = "*.r"):
91 def __searchFiles(self,path, startDateTime, endDateTime, set=None, expLabel = "", ext = "*.r"):
94
92
95 startUtSeconds = time.mktime(startDateTime.timetuple())
93 startUtSeconds = time.mktime(startDateTime.timetuple())
96 endUtSeconds = time.mktime(endDateTime.timetuple())
94 endUtSeconds = time.mktime(endDateTime.timetuple())
97
95
98 startYear = startDateTime.timetuple().tm_year
96 startYear = startDateTime.timetuple().tm_year
99 endYear = endDateTime.timetuple().tm_year
97 endYear = endDateTime.timetuple().tm_year
100
98
101 startDoy = startDateTime.timetuple().tm_yday
99 startDoy = startDateTime.timetuple().tm_yday
102 endDoy = endDateTime.timetuple().tm_yday
100 endDoy = endDateTime.timetuple().tm_yday
103
101
104 rangeOfYears = range(startYear,endYear+1)
102 rangeOfYears = range(startYear,endYear+1)
105
103
106 listOfListDoys = []
104 listOfListDoys = []
107 if startYear == endYear:
105 if startYear == endYear:
108 doyList = range(startDoy,endDoy+1)
106 doyList = range(startDoy,endDoy+1)
109 else:
107 else:
110 for year in rangeOfYears:
108 for year in rangeOfYears:
111 if (year == startYear):
109 if (year == startYear):
112 listOfListDoys.append(range(startDoy,365+1))
110 listOfListDoys.append(range(startDoy,365+1))
113 elif (year == endYear):
111 elif (year == endYear):
114 listOfListDoys.append(range(1,endDoy+1))
112 listOfListDoys.append(range(1,endDoy+1))
115 else:
113 else:
116 listOfListDoys.append(range(1,365+1))
114 listOfListDoys.append(range(1,365+1))
117 doyList = []
115 doyList = []
118 for list in listOfListDoys:
116 for list in listOfListDoys:
119 doyList = doyList + list
117 doyList = doyList + list
120
118
121 folders = []
119 folders = []
122 for thisPath in os.listdir(path):
120 for thisPath in os.listdir(path):
123 if os.path.isdir(os.path.join(path,thisPath)):
121 if os.path.isdir(os.path.join(path,thisPath)):
124 #folders.append(os.path.join(path,thisPath))
122 #folders.append(os.path.join(path,thisPath))
125 folders.append(thisPath)
123 folders.append(thisPath)
126
124
127 pathList = []
125 pathList = []
128 dicOfPath = {}
126 dicOfPath = {}
129 for year in rangeOfYears:
127 for year in rangeOfYears:
130 for doy in doyList:
128 for doy in doyList:
131 tmp = fnmatch.filter(folders, 'D' + '%4.4d%3.3d' % (year,doy))
129 tmp = fnmatch.filter(folders, 'D' + '%4.4d%3.3d' % (year,doy))
132 if len(tmp) == 0:
130 if len(tmp) == 0:
133 continue
131 continue
134 if expLabel == '':
132 if expLabel == '':
135 pathList.append(os.path.join(path,tmp[0]))
133 pathList.append(os.path.join(path,tmp[0]))
136 dicOfPath.setdefault(os.path.join(path,tmp[0]))
134 dicOfPath.setdefault(os.path.join(path,tmp[0]))
137 dicOfPath[os.path.join(path,tmp[0])] = []
135 dicOfPath[os.path.join(path,tmp[0])] = []
138 else:
136 else:
139 pathList.append(os.path.join(path,os.path.join(tmp[0],expLabel)))
137 pathList.append(os.path.join(path,os.path.join(tmp[0],expLabel)))
140 dicOfPath.setdefault(os.path.join(path,os.path.join(tmp[0],expLabel)))
138 dicOfPath.setdefault(os.path.join(path,os.path.join(tmp[0],expLabel)))
141 dicOfPath[os.path.join(path,os.path.join(tmp[0],expLabel))] = []
139 dicOfPath[os.path.join(path,os.path.join(tmp[0],expLabel))] = []
142
140
143
141
144 filenameList = []
142 filenameList = []
145 for thisPath in pathList:
143 for thisPath in pathList:
146 fileList = glob.glob1(thisPath, ext)
144 fileList = glob.glob1(thisPath, ext)
147 #dicOfPath[thisPath].append(fileList)
145 #dicOfPath[thisPath].append(fileList)
148 fileList.sort()
146 fileList.sort()
149 for file in fileList:
147 for file in fileList:
150 filename = os.path.join(thisPath,file)
148 filename = os.path.join(thisPath,file)
151 if self.isThisFileinRange(filename, startUtSeconds, endUtSeconds):
149 if self.isThisFileinRange(filename, startUtSeconds, endUtSeconds):
152 filenameList.append(filename)
150 filenameList.append(filename)
153
151
154 self.filenameList = filenameList
152 self.filenameList = filenameList
155
153
156 return pathList, filenameList
154 return pathList, filenameList
157
155
158 def isThisFileinRange(self, filename, startUTSeconds=None, endUTSeconds=None):
156 def isThisFileinRange(self, filename, startUTSeconds=None, endUTSeconds=None):
159
157
160 try:
158 try:
161 fp = open(filename,'rb')
159 fp = open(filename,'rb')
162 except:
160 except:
163 raise IOError, "The file %s can't be opened" %(filename)
161 raise IOError, "The file %s can't be opened" %(filename)
164
162
165 if startUTSeconds==None:
163 if startUTSeconds==None:
166 startUTSeconds = self.startUTCSeconds
164 startUTSeconds = self.startUTCSeconds
167
165
168 if endUTSeconds==None:
166 if endUTSeconds==None:
169 endUTSeconds = self.endUTCSeconds
167 endUTSeconds = self.endUTCSeconds
170
168
171 objBasicHeader = BasicHeader()
169 basicHeaderObj = BasicHeader()
172
170
173 if not(objBasicHeader.read(fp)):
171 if not(basicHeaderObj.read(fp)):
174 return 0
172 return 0
175
173
176 fp.close()
174 fp.close()
177
175
178 if not ((startUTSeconds <= objBasicHeader.utc) and (endUTSeconds >= objBasicHeader.utc)):
176 if not ((startUTSeconds <= basicHeaderObj.utc) and (endUTSeconds >= basicHeaderObj.utc)):
179 return 0
177 return 0
180
178
181 return 1
179 return 1
182
180
183 def __readBasicHeader(self, fp=None):
181 def __readBasicHeader(self, fp=None):
184
182
185 if fp == None:
183 if fp == None:
186 fp = self.__fp
184 fp = self.__fp
187
185
188 self.objBasicHeader.read(fp)
186 self.basicHeaderObj.read(fp)
189
187
190 def __readFirstHeader(self):
188 def __readFirstHeader(self):
191
189
192 self.__readBasicHeader()
190 self.__readBasicHeader()
193 self.__rdSystemHeader()
191 self.__rdSystemHeader()
194 self.__rdRadarControllerHeader()
192 self.__rdRadarControllerHeader()
195 self.__rdProcessingHeader()
193 self.__rdProcessingHeader()
196 self.firstHeaderSize = self.objBasicHeader.size
194 self.firstHeaderSize = self.basicHeaderObj.size
197
195
198 data_type=int(numpy.log2((self.objProcessingHeader.processFlags & PROCFLAG.DATATYPE_MASK))-numpy.log2(PROCFLAG.DATATYPE_CHAR))
196 data_type=int(numpy.log2((self.processingHeaderObj.processFlags & PROCFLAG.DATATYPE_MASK))-numpy.log2(PROCFLAG.DATATYPE_CHAR))
199 if data_type == 0:
197 if data_type == 0:
200 tmp=numpy.dtype([('real','<i1'),('imag','<i1')])
198 tmp=numpy.dtype([('real','<i1'),('imag','<i1')])
201 elif data_type == 1:
199 elif data_type == 1:
202 tmp=numpy.dtype([('real','<i2'),('imag','<i2')])
200 tmp=numpy.dtype([('real','<i2'),('imag','<i2')])
203 elif data_type == 2:
201 elif data_type == 2:
204 tmp=numpy.dtype([('real','<i4'),('imag','<i4')])
202 tmp=numpy.dtype([('real','<i4'),('imag','<i4')])
205 elif data_type == 3:
203 elif data_type == 3:
206 tmp=numpy.dtype([('real','<i8'),('imag','<i8')])
204 tmp=numpy.dtype([('real','<i8'),('imag','<i8')])
207 elif data_type == 4:
205 elif data_type == 4:
208 tmp=numpy.dtype([('real','<f4'),('imag','<f4')])
206 tmp=numpy.dtype([('real','<f4'),('imag','<f4')])
209 elif data_type == 5:
207 elif data_type == 5:
210 tmp=numpy.dtype([('real','<f8'),('imag','<f8')])
208 tmp=numpy.dtype([('real','<f8'),('imag','<f8')])
211 else:
209 else:
212 print 'no define data type'
210 print 'no define data type'
213 tmp = 0
211 tmp = 0
214
212
215 self.__flagIsNewFile = 0
216 self.__dataType = tmp
213 self.__dataType = tmp
217 self.__sizeOfFileByHeader = self.objProcessingHeader.dataBlocksPerFile * self.objProcessingHeader.blockSize + self.firstHeaderSize + self.basicHeaderSize*(self.objProcessingHeader.dataBlocksPerFile - 1)
214 self.__sizeOfFileByHeader = self.processingHeaderObj.dataBlocksPerFile * self.processingHeaderObj.blockSize + self.firstHeaderSize + self.basicHeaderSize*(self.processingHeaderObj.dataBlocksPerFile - 1)
218
215
219 def __setNextFileOnline(self):
216 def __setNextFileOnline(self):
220 return 0
217 return 0
221
218
222 def __setNextFileOffline(self):
219 def __setNextFileOffline(self):
223
220
224 idFile = self.__idFile
221 idFile = self.__idFile
225 while(True):
222 while(True):
226
223
227 idFile += 1
224 idFile += 1
228
225
229 if not(idFile < len(self.filenameList)):
226 if not(idFile < len(self.filenameList)):
230 self.noMoreFiles = 1
227 self.noMoreFiles = 1
231 return 0
228 return 0
232
229
233 filename = self.filenameList[idFile]
230 filename = self.filenameList[idFile]
234 fileSize = os.path.getsize(filename)
231 fileSize = os.path.getsize(filename)
235 fp = open(filename,'rb')
232 fp = open(filename,'rb')
236
233
237 currentSize = fileSize - fp.tell()
234 currentSize = fileSize - fp.tell()
238 neededSize = self.objProcessingHeader.blockSize + self.firstHeaderSize
235 neededSize = self.processingHeaderObj.blockSize + self.firstHeaderSize
239
236
240 if (currentSize < neededSize):
237 if (currentSize < neededSize):
241 continue
238 continue
242
239
243 break
240 break
244
241
245 self.__flagIsNewFile = 1
242 self.__flagIsNewFile = 1
246 self.__idFile = idFile
243 self.__idFile = idFile
247 self.filename = filename
244 self.filename = filename
248 self.fileSize = fileSize
245 self.fileSize = fileSize
249 self.__fp = fp
246 self.__fp = fp
250
247
251 print 'Setting the file: %s'%self.filename
248 print 'Setting the file: %s'%self.filename
252
249
253 return 1
250 return 1
254
251
255 def __setNextFile(self):
252 def __setNextFile(self):
256
253
257 if self.online:
254 if self.online:
258 return self.__setNextFileOnline()
255 return self.__setNextFileOnline()
259 else:
256 else:
260 return self.__setNextFileOffline()
257 return self.__setNextFileOffline()
261
258
262 def __setNewBlock(self):
259 def __setNewBlock(self):
263
260
261 if self.__flagIsNewFile:
262 return 1
263
264 currentSize = self.fileSize - self.__fp.tell()
264 currentSize = self.fileSize - self.__fp.tell()
265 neededSize = self.objProcessingHeader.blockSize + self.basicHeaderSize
265 neededSize = self.processingHeaderObj.blockSize + self.basicHeaderSize
266
266
267 # Bloque Completo
267 # Bloque Completo
268 if (currentSize >= neededSize):
268 if (currentSize >= neededSize):
269 self.__readBasicHeader()
269 self.__readBasicHeader()
270 return 1
270 return 1
271
271
272 self.__setNextFile()
272 if not(self.__setNextFile()):
273 return 0
274
273 self.__readFirstHeader()
275 self.__readFirstHeader()
274
276
275 deltaTime = self.objBasicHeader.utc - self.__lastUTTime # check this
277 deltaTime = self.basicHeaderObj.utc - self.__lastUTTime # check this
278
279 self.flagResetProcessing = 0
276 if deltaTime > self.__maxTimeStep:
280 if deltaTime > self.__maxTimeStep:
277 self.__flagResetProcessing = 1
281 self.flagResetProcessing = 1
278
282
279 return 1
283 return 1
280
284
281 def __readBlock(self):
285 def __readBlock(self):
282 """Lee el bloque de datos desde la posicion actual del puntero del archivo y
286 """Lee el bloque de datos desde la posicion actual del puntero del archivo y
283 actualiza todos los parametros relacionados al bloque de datos (data, time,
287 actualiza todos los parametros relacionados al bloque de datos (data, time,
284 etc). La data leida es almacenada en el buffer y el contador de datos leidos es
288 etc). La data leida es almacenada en el buffer y el contador de datos leidos es
285 seteado a 0
289 seteado a 0
286 """
290 """
287
291
288 pts2read = self.objProcessingHeader.profilesPerBlock*self.objProcessingHeader.numHeights*self.objSystemHeader.numChannels
292 pts2read = self.processingHeaderObj.profilesPerBlock*self.processingHeaderObj.numHeights*self.systemHeaderObj.numChannels
289
293
290 data = numpy.fromfile(self.__fp,self.__dataType,pts2read)
294 data = numpy.fromfile(self.__fp,self.__dataType,pts2read)
291
295
292 data = data.reshape((self.objProcessingHeader.profilesPerBlock, self.objProcessingHeader.numHeights, self.objSystemHeader.numChannels))
296 data = data.reshape((self.processingHeaderObj.profilesPerBlock, self.processingHeaderObj.numHeights, self.systemHeaderObj.numChannels))
297
298 self.__flagIsNewFile = 0
293
299
294 self.__buffer = data
300 self.__buffer = data
295
301
296 self.__buffer_id = 0
302 self.__buffer_id = 0
297
303
298 def readNextBlock(self):
304 def readNextBlock(self):
299
305
300 self.__setNewBlock()
306 if not(self.__setNewBlock()):
307 return 0
301
308
302 self.__readBlock()
309 self.__readBlock()
303
310
304 self.__lastUTTime = self.objBasicHeader.utc
311 self.__lastUTTime = self.basicHeaderObj.utc
312
313 return 1
305
314
306 def __hasNotDataInBuffer(self):
315 def __hasNotDataInBuffer(self):
307 if self.__buffer_id >= self.objProcessingHeader.profilesPerBlock:
316 if self.__buffer_id >= self.processingHeaderObj.profilesPerBlock:
308 return 1
317 return 1
309
318
310 return 0
319 return 0
311
320
312 def getData(self):
321 def getData(self):
313 """Obtiene un unidad de datos del buffer de lectura y es copiada a la clase "Data"
322 """Obtiene un unidad de datos del buffer de lectura y es copiada a la clase "Data"
314 con todos los parametros asociados a este. cuando no hay datos en el buffer de
323 con todos los parametros asociados a este. cuando no hay datos en el buffer de
315 lectura es necesario hacer una nueva lectura de los bloques de datos
324 lectura es necesario hacer una nueva lectura de los bloques de datos
316 "__readBlock"
325 "__readBlock"
317 """
326 """
327 self.flagResetProcessing = 0
318
328
319 if self.__hasNotDataInBuffer():
329 if self.__hasNotDataInBuffer():
320 self.readNextBlock()
330 self.readNextBlock()
321
331
322 if self.noMoreFiles == 1:
332 if self.noMoreFiles == 1:
323 print 'read finished'
333 print 'read finished'
324 return None
334 return None
325
335
326 data = self.__buffer[self.__buffer_id,:,:]
336 data = self.__buffer[self.__buffer_id,:,:]
327
337 #time = timeblock + n*ipp
328 #print self.__buffer_id
338 #print self.__buffer_id
329
339
330 self.__buffer_id += 1
340 self.__buffer_id += 1
331
341
332 #call setData - to Data Object
342 #call setData - to Data Object
333
343
334 return data
344 return data
335
345
336
346
337 def setup(self, path, startDateTime, endDateTime, set=None, expLabel = "", ext = ".r", online = 0):
347 def setup(self, path, startDateTime, endDateTime, set=None, expLabel = "", ext = ".r", online = 0):
338
348
339 if online == 0:
349 if online == 0:
340 pathList, filenameList = self.__searchFiles(path, startDateTime, endDateTime, set, expLabel, ext)
350 pathList, filenameList = self.__searchFiles(path, startDateTime, endDateTime, set, expLabel, ext)
341
351
342 if len(filenameList) == 0:
352 if len(filenameList) == 0:
343 print 'Do not exist files in range: %s - %s'%(startDateTime.ctime(), endDateTime.ctime())
353 print 'Do not exist files in range: %s - %s'%(startDateTime.ctime(), endDateTime.ctime())
344 return 0
354 return 0
345
355
346 # for thisFile in filenameList:
356 # for thisFile in filenameList:
347 # print thisFile
357 # print thisFile
348
358
349 self.__idFile = -1
359 self.__idFile = -1
350
360
351 if not(self.__setNextFile()):
361 if not(self.__setNextFile()):
352 print "No more files"
362 print "No more files"
353 return 0
363 return 0
354
364
355 self.__readFirstHeader()
365 self.__readFirstHeader()
356
366
357 self.startUTCSeconds = time.mktime(startDateTime.timetuple())
367 self.startUTCSeconds = time.mktime(startDateTime.timetuple())
358 self.endUTCSeconds = time.mktime(endDateTime.timetuple())
368 self.endUTCSeconds = time.mktime(endDateTime.timetuple())
359
369
360 self.startYear = startDateTime.timetuple().tm_year
370 self.startYear = startDateTime.timetuple().tm_year
361 self.endYear = endDateTime.timetuple().tm_year
371 self.endYear = endDateTime.timetuple().tm_year
362
372
363 self.startDoy = startDateTime.timetuple().tm_yday
373 self.startDoy = startDateTime.timetuple().tm_yday
364 self.endDoy = endDateTime.timetuple().tm_yday
374 self.endDoy = endDateTime.timetuple().tm_yday
365 #call fillHeaderValues() - to Data Object
375 #call fillHeaderValues() - to Data Object
366
376
367 self.__pathList = pathList
377 self.__pathList = pathList
368 self.filenameList = filenameList
378 self.filenameList = filenameList
369 self.online = online
379 self.online = online
370
380
371 class VoltageWriter(DataWriter):
381 class VoltageWriter(DataWriter):
372
382
373 def __init__(self):
383 def __init__(self):
374 pass
384 pass
375 No newline at end of file
385
General Comments 0
You need to be logged in to leave comments. Login now