@@ -0,0 +1,48 | |||
|
1 | ||
|
2 | import copy | |
|
3 | import numpy | |
|
4 | from JROHeader import BasicHeader, SystemHeader, RadarControllerHeader, ProcessingHeader | |
|
5 | ||
|
6 | class Data: | |
|
7 | def __init__(self): | |
|
8 | pass | |
|
9 | ||
|
10 | def copy(self, inputObj=None): | |
|
11 | if inputObj == None: | |
|
12 | return copy.deepcopy(self) | |
|
13 | ||
|
14 | for key in inputObj.__dict__.keys(): | |
|
15 | self.__dict__[key] = inputObj.__dict__[key] | |
|
16 | ||
|
17 | def deepcopy(self): | |
|
18 | return copy.deepcopy(self) | |
|
19 | ||
|
20 | class JROData(Data): | |
|
21 | data = None | |
|
22 | # m_BasicHeader = BasicHeader() | |
|
23 | # m_SystemHeader = SystemHeader() | |
|
24 | # m_RadarControllerHeader = RadarControllerHeader() | |
|
25 | # m_ProcessingHeader = ProcessingHeader() | |
|
26 | type = None | |
|
27 | dataType = None | |
|
28 | heightList = None | |
|
29 | channelIndexList = None | |
|
30 | channelList = None | |
|
31 | nHeights = None | |
|
32 | nProfiles = None | |
|
33 | nBlocksPerFile = None | |
|
34 | nChannels = None | |
|
35 | flagNoData = False | |
|
36 | flagResetProcessing = False | |
|
37 | ||
|
38 | def __init__(self): | |
|
39 | raise ValueError, "This class has not been implemented" | |
|
40 | ||
|
41 | # def updateHeaderFromObj(self): | |
|
42 | # pass | |
|
43 | # | |
|
44 | # | |
|
45 | # def updateObjFromHeader(self): | |
|
46 | # pass | |
|
47 | ||
|
48 |
@@ -0,0 +1,27 | |||
|
1 | import numpy | |
|
2 | from JROData import JROData | |
|
3 | # No deberia importar los Headers | |
|
4 | class Voltage(JROData): | |
|
5 | data = None | |
|
6 | nCohInt = None | |
|
7 | ||
|
8 | def __init__(self): | |
|
9 | self.type = "Voltage" | |
|
10 | ||
|
11 | def updateObjFromHeader(self): | |
|
12 | xi = self.m_ProcessingHeader.firstHeight | |
|
13 | step = self.m_ProcessingHeader.deltaHeight | |
|
14 | xf = xi + self.m_ProcessingHeader.numHeights*step | |
|
15 | ||
|
16 | self.heightList = numpy.arange(xi, xf, step) | |
|
17 | self.channelIndexList = numpy.arange(self.m_SystemHeader.numChannels) | |
|
18 | self.channelList = numpy.arange(self.m_SystemHeader.numChannels) | |
|
19 | ||
|
20 | self.nHeights = len(self.heightList) | |
|
21 | self.nChannels = len(self.channelList) | |
|
22 | self.nProfiles = self.m_ProcessingHeader.profilesPerBlock | |
|
23 | self.nBlocksPerFile = self.m_ProcessingHeader.dataBlocksPerFile | |
|
24 | self.nCohInt = self.m_ProcessingHeader.coherentInt | |
|
25 | ||
|
26 | def updateHeaderFromObj(self): | |
|
27 | pass No newline at end of file |
|
1 | NO CONTENT: new file 100644 |
@@ -0,0 +1,378 | |||
|
1 | import os, sys | |
|
2 | import glob | |
|
3 | import time | |
|
4 | import numpy | |
|
5 | import fnmatch | |
|
6 | import time, datetime | |
|
7 | ||
|
8 | path = os.path.split(os.getcwd())[0] | |
|
9 | sys.path.append(path) | |
|
10 | ||
|
11 | from Model.JROHeader import * | |
|
12 | from Model.JROData import JROData | |
|
13 | ||
|
14 | def isThisFileinRange(filename, startUTSeconds, endUTSeconds): | |
|
15 | """ | |
|
16 | Esta funcion determina si un archivo de datos se encuentra o no dentro del rango de fecha especificado. | |
|
17 | ||
|
18 | Inputs: | |
|
19 | filename : nombre completo del archivo de datos en formato Jicamarca (.r) | |
|
20 | ||
|
21 | startUTSeconds : fecha inicial del rango seleccionado. La fecha esta dada en | |
|
22 | segundos contados desde 01/01/1970. | |
|
23 | endUTSeconds : fecha final del rango seleccionado. La fecha esta dada en | |
|
24 | segundos contados desde 01/01/1970. | |
|
25 | ||
|
26 | Return: | |
|
27 | Boolean : Retorna True si el archivo de datos contiene datos en el rango de | |
|
28 | fecha especificado, de lo contrario retorna False. | |
|
29 | ||
|
30 | Excepciones: | |
|
31 | Si el archivo no existe o no puede ser abierto | |
|
32 | Si la cabecera no puede ser leida. | |
|
33 | ||
|
34 | """ | |
|
35 | m_BasicHeader = BasicHeader() | |
|
36 | ||
|
37 | try: | |
|
38 | fp = open(filename,'rb') | |
|
39 | except: | |
|
40 | raise IOError, "The file %s can't be opened" %(filename) | |
|
41 | ||
|
42 | sts = m_BasicHeader.read(fp) | |
|
43 | fp.close() | |
|
44 | ||
|
45 | if not(sts): | |
|
46 | print "Skipping the file %s because it has not a valid header" %(filename) | |
|
47 | return 0 | |
|
48 | ||
|
49 | if not ((startUTSeconds <= m_BasicHeader.utc) and (endUTSeconds > m_BasicHeader.utc)): | |
|
50 | return 0 | |
|
51 | ||
|
52 | return 1 | |
|
53 | ||
|
54 | ||
|
55 | ||
|
56 | ||
|
57 | class JRODataIO: | |
|
58 | c = 3E8 | |
|
59 | m_BasicHeader = BasicHeader() | |
|
60 | m_SystemHeader = SystemHeader() | |
|
61 | m_RadarControllerHeader = RadarControllerHeader() | |
|
62 | m_ProcessingHeader = ProcessingHeader() | |
|
63 | online = 0 | |
|
64 | dataType = None | |
|
65 | pathList = [] | |
|
66 | filenameList = [] | |
|
67 | filename = None | |
|
68 | ext = None | |
|
69 | fileIndex = None | |
|
70 | flagNoMoreFiles = 0 | |
|
71 | flagIsNewFile = 1 | |
|
72 | flagResetProcessing = 0 | |
|
73 | flagIsNewBlock = 0 | |
|
74 | fp = None | |
|
75 | firstHeaderSize = 0 | |
|
76 | basicHeaderSize = 24 | |
|
77 | fileSize = None | |
|
78 | ippSeconds = None | |
|
79 | fileSizeByHeader = None | |
|
80 | def __init__(self): | |
|
81 | pass | |
|
82 | ||
|
83 | class JRODataReader(JRODataIO): | |
|
84 | def __init__(self): | |
|
85 | pass | |
|
86 | ||
|
87 | def createObjByDefault(self): | |
|
88 | """ | |
|
89 | ||
|
90 | """ | |
|
91 | raise ValueError, "This method has not been implemented" | |
|
92 | ||
|
93 | def getBlockDimension(self): | |
|
94 | ||
|
95 | raise ValueError, "No implemented" | |
|
96 | ||
|
97 | def __searchFilesOffLine(self, | |
|
98 | path, | |
|
99 | startDate, | |
|
100 | endDate, | |
|
101 | startTime=datetime.time(0,0,0), | |
|
102 | endTime=datetime.time(23,59,59), | |
|
103 | set=None, | |
|
104 | expLabel="", | |
|
105 | ext=".r"): | |
|
106 | dirList = [] | |
|
107 | for thisPath in os.listdir(path): | |
|
108 | if os.path.isdir(os.path.join(path,thisPath)): | |
|
109 | dirList.append(thisPath) | |
|
110 | ||
|
111 | if not(dirList): | |
|
112 | return None, None | |
|
113 | ||
|
114 | pathList = [] | |
|
115 | dateList = [] | |
|
116 | ||
|
117 | thisDate = startDate | |
|
118 | ||
|
119 | while(thisDate <= endDate): | |
|
120 | year = thisDate.timetuple().tm_year | |
|
121 | doy = thisDate.timetuple().tm_yday | |
|
122 | ||
|
123 | match = fnmatch.filter(dirList, '?' + '%4.4d%3.3d' % (year,doy)) | |
|
124 | if len(match) == 0: | |
|
125 | thisDate += datetime.timedelta(1) | |
|
126 | continue | |
|
127 | ||
|
128 | pathList.append(os.path.join(path,match[0],expLabel)) | |
|
129 | dateList.append(thisDate) | |
|
130 | thisDate += datetime.timedelta(1) | |
|
131 | ||
|
132 | filenameList = [] | |
|
133 | for index in range(len(pathList)): | |
|
134 | ||
|
135 | thisPath = pathList[index] | |
|
136 | fileList = glob.glob1(thisPath, "*%s" %ext) | |
|
137 | fileList.sort() | |
|
138 | ||
|
139 | #Busqueda de datos en el rango de horas indicados | |
|
140 | thisDate = dateList[index] | |
|
141 | startDT = datetime.datetime.combine(thisDate, startTime) | |
|
142 | endDT = datetime.datetime.combine(thisDate, endTime) | |
|
143 | ||
|
144 | startUtSeconds = time.mktime(startDT.timetuple()) | |
|
145 | endUtSeconds = time.mktime(endDT.timetuple()) | |
|
146 | ||
|
147 | for file in fileList: | |
|
148 | ||
|
149 | filename = os.path.join(thisPath,file) | |
|
150 | ||
|
151 | if isThisFileinRange(filename, startUtSeconds, endUtSeconds): | |
|
152 | filenameList.append(filename) | |
|
153 | ||
|
154 | if not(filenameList): | |
|
155 | return None, None | |
|
156 | ||
|
157 | self.filenameList = filenameList | |
|
158 | ||
|
159 | return pathList, filenameList | |
|
160 | ||
|
161 | def setup(self,dataOutObj=None, | |
|
162 | path=None,startDate=None, | |
|
163 | endDate=None, | |
|
164 | startTime=datetime.time(0,0,0), | |
|
165 | endTime=datetime.time(23,59,59), | |
|
166 | set=0, | |
|
167 | expLabel = "", | |
|
168 | ext = None, | |
|
169 | online = 0): | |
|
170 | ||
|
171 | if path == None: | |
|
172 | raise ValueError, "The path is not valid" | |
|
173 | ||
|
174 | if ext == None: | |
|
175 | ext = self.ext | |
|
176 | ||
|
177 | if dataOutObj == None: | |
|
178 | dataOutObj = self.createObjByDefault() | |
|
179 | ||
|
180 | self.dataOutObj = dataOutObj | |
|
181 | ||
|
182 | if online: | |
|
183 | pass | |
|
184 | ||
|
185 | else: | |
|
186 | print "Searching file in offline mode" | |
|
187 | pathList, filenameList = self.__searchFilesOffLine(path, startDate, endDate, startTime, endTime, set, expLabel, ext) | |
|
188 | if not(pathList): | |
|
189 | print "No files in range: %s - %s"%(datetime.datetime.combine(startDate,startTime).ctime(), datetime.datetime.combine(endDate,endTime).ctime()) | |
|
190 | return None | |
|
191 | self.fileIndex = -1 | |
|
192 | self.pathList = pathList | |
|
193 | self.filenameList = filenameList | |
|
194 | ||
|
195 | self.online = online | |
|
196 | ext = ext.lower() | |
|
197 | self.ext = ext | |
|
198 | ||
|
199 | if not(self.setNextFile()): | |
|
200 | if (startDate!=None) and (endDate!=None): | |
|
201 | print "No files in range: %s - %s" %(datetime.datetime.combine(startDate,startTime).ctime(), datetime.datetime.combine(endDate,endTime).ctime()) | |
|
202 | elif startDate != None: | |
|
203 | print "No files in range: %s" %(datetime.datetime.combine(startDate,startTime).ctime()) | |
|
204 | else: | |
|
205 | print "No files" | |
|
206 | ||
|
207 | return None | |
|
208 | ||
|
209 | self.updateDataHeader() | |
|
210 | ||
|
211 | return self.dataOutObj | |
|
212 | ||
|
213 | def __setNextFileOffline(self): | |
|
214 | idFile = self.fileIndex | |
|
215 | ||
|
216 | while (True): | |
|
217 | idFile += 1 | |
|
218 | if not(idFile < len(self.filenameList)): | |
|
219 | self.flagNoMoreFiles = 1 | |
|
220 | print "No more Files" | |
|
221 | return 0 | |
|
222 | ||
|
223 | filename = self.filenameList[idFile] | |
|
224 | ||
|
225 | if not(self.__verifyFile(filename)): | |
|
226 | continue | |
|
227 | ||
|
228 | fileSize = os.path.getsize(filename) | |
|
229 | fp = open(filename,'rb') | |
|
230 | break | |
|
231 | ||
|
232 | self.flagIsNewFile = 1 | |
|
233 | self.fileIndex = idFile | |
|
234 | self.filename = filename | |
|
235 | self.fileSize = fileSize | |
|
236 | self.fp = fp | |
|
237 | ||
|
238 | print "Setting the file: %s"%self.filename | |
|
239 | ||
|
240 | return 1 | |
|
241 | ||
|
242 | ||
|
243 | ||
|
244 | def setNextFile(self): | |
|
245 | if self.fp != None: | |
|
246 | self.fp.close() | |
|
247 | ||
|
248 | if self.online: | |
|
249 | newFile = self.__setNextFileOnline() | |
|
250 | else: | |
|
251 | newFile = self.__setNextFileOffline() | |
|
252 | ||
|
253 | if not(newFile): | |
|
254 | return 0 | |
|
255 | ||
|
256 | self.__readFirstHeader() | |
|
257 | self.nReadBlocks = 0 | |
|
258 | return 1 | |
|
259 | ||
|
260 | def __rdProcessingHeader(self, fp=None): | |
|
261 | if fp == None: | |
|
262 | fp = self.fp | |
|
263 | ||
|
264 | self.m_ProcessingHeader.read(fp) | |
|
265 | ||
|
266 | def __rdRadarControllerHeader(self, fp=None): | |
|
267 | if fp == None: | |
|
268 | fp = self.fp | |
|
269 | ||
|
270 | self.m_RadarControllerHeader.read(fp) | |
|
271 | ||
|
272 | def __rdSystemHeader(self, fp=None): | |
|
273 | if fp == None: | |
|
274 | fp = self.fp | |
|
275 | ||
|
276 | self.m_SystemHeader.read(fp) | |
|
277 | ||
|
278 | def __rdBasicHeader(self, fp=None): | |
|
279 | if fp == None: | |
|
280 | fp = self.fp | |
|
281 | ||
|
282 | self.m_BasicHeader.read(fp) | |
|
283 | ||
|
284 | ||
|
285 | def __readFirstHeader(self): | |
|
286 | self.__rdBasicHeader() | |
|
287 | self.__rdSystemHeader() | |
|
288 | self.__rdRadarControllerHeader() | |
|
289 | self.__rdProcessingHeader() | |
|
290 | ||
|
291 | self.firstHeaderSize = self.m_BasicHeader.size | |
|
292 | ||
|
293 | datatype = int(numpy.log2((self.m_ProcessingHeader.processFlags & PROCFLAG.DATATYPE_MASK))-numpy.log2(PROCFLAG.DATATYPE_CHAR)) | |
|
294 | if datatype == 0: | |
|
295 | datatype_str = numpy.dtype([('real','<i1'),('imag','<i1')]) | |
|
296 | elif datatype == 1: | |
|
297 | datatype_str = numpy.dtype([('real','<i2'),('imag','<i2')]) | |
|
298 | elif datatype == 2: | |
|
299 | datatype_str = numpy.dtype([('real','<i4'),('imag','<i4')]) | |
|
300 | elif datatype == 3: | |
|
301 | datatype_str = numpy.dtype([('real','<i8'),('imag','<i8')]) | |
|
302 | elif datatype == 4: | |
|
303 | datatype_str = numpy.dtype([('real','<f4'),('imag','<f4')]) | |
|
304 | elif datatype == 5: | |
|
305 | datatype_str = numpy.dtype([('real','<f8'),('imag','<f8')]) | |
|
306 | else: | |
|
307 | raise ValueError, 'Data type was not defined' | |
|
308 | ||
|
309 | self.dataType = datatype_str | |
|
310 | self.ippSeconds = 2 * 1000 * self.m_RadarControllerHeader.ipp / self.c | |
|
311 | self.fileSizeByHeader = self.m_ProcessingHeader.dataBlocksPerFile * self.m_ProcessingHeader.blockSize + self.firstHeaderSize + self.basicHeaderSize*(self.m_ProcessingHeader.dataBlocksPerFile - 1) | |
|
312 | # self.dataOutObj.channelList = numpy.arange(self.m_SystemHeader.numChannels) | |
|
313 | # self.dataOutObj.channelIndexList = numpy.arange(self.m_SystemHeader.numChannels) | |
|
314 | self.getBlockDimension() | |
|
315 | ||
|
316 | ||
|
317 | def __verifyFile(self, filename, msgFlag=True): | |
|
318 | msg = None | |
|
319 | try: | |
|
320 | fp = open(filename, 'rb') | |
|
321 | currentPosition = fp.tell() | |
|
322 | except: | |
|
323 | if msgFlag: | |
|
324 | print "The file %s can't be opened" % (filename) | |
|
325 | return False | |
|
326 | ||
|
327 | neededSize = self.m_ProcessingHeader.blockSize + self.firstHeaderSize | |
|
328 | ||
|
329 | if neededSize == 0: | |
|
330 | m_BasicHeader = BasicHeader() | |
|
331 | m_SystemHeader = SystemHeader() | |
|
332 | m_RadarControllerHeader = RadarControllerHeader() | |
|
333 | m_ProcessingHeader = ProcessingHeader() | |
|
334 | ||
|
335 | try: | |
|
336 | if not( m_BasicHeader.read(fp) ): raise ValueError | |
|
337 | if not( m_SystemHeader.read(fp) ): raise ValueError | |
|
338 | if not( m_RadarControllerHeader.read(fp) ): raise ValueError | |
|
339 | if not( m_ProcessingHeader.read(fp) ): raise ValueError | |
|
340 | data_type = int(numpy.log2((m_ProcessingHeader.processFlags & PROCFLAG.DATATYPE_MASK))-numpy.log2(PROCFLAG.DATATYPE_CHAR)) | |
|
341 | ||
|
342 | neededSize = m_ProcessingHeader.blockSize + m_BasicHeader.size | |
|
343 | ||
|
344 | except: | |
|
345 | if msgFlag: | |
|
346 | print "\tThe file %s is empty or it hasn't enough data" % filename | |
|
347 | ||
|
348 | fp.close() | |
|
349 | return False | |
|
350 | else: | |
|
351 | msg = "\tSkipping the file %s due to it hasn't enough data" %filename | |
|
352 | ||
|
353 | fp.close() | |
|
354 | fileSize = os.path.getsize(filename) | |
|
355 | currentSize = fileSize - currentPosition | |
|
356 | if currentSize < neededSize: | |
|
357 | if msgFlag and (msg != None): | |
|
358 | print msg #print"\tSkipping the file %s due to it hasn't enough data" %filename | |
|
359 | return False | |
|
360 | ||
|
361 | return True | |
|
362 | ||
|
363 | ||
|
364 | ||
|
365 | def updateDataHeader(self): | |
|
366 | self.dataOutObj.m_BasicHeader = self.m_BasicHeader.copy() | |
|
367 | self.dataOutObj.m_ProcessingHeader = self.m_ProcessingHeader.copy() | |
|
368 | self.dataOutObj.m_RadarControllerHeader = self.m_RadarControllerHeader.copy() | |
|
369 | self.dataOutObj.m_SystemHeader = self.m_SystemHeader.copy() | |
|
370 | self.dataOutObj.dataType = self.dataType | |
|
371 | self.dataOutObj.updateObjFromHeader() # actualiza los atributos del objeto de salida de la clase JROData | |
|
372 | ||
|
373 | ||
|
374 | ||
|
375 | ||
|
376 | ||
|
377 | ||
|
378 |
This diff has been collapsed as it changes many lines, (505 lines changed) Show them Hide them | |||
@@ -0,0 +1,505 | |||
|
1 | ''' | |
|
2 | Created on 23/01/2012 | |
|
3 | ||
|
4 | @author $Author: vsarmiento $ | |
|
5 | @version $Id: HeaderIO.py 37 2012-03-26 22:55:13Z vsarmiento $ | |
|
6 | ''' | |
|
7 | ||
|
8 | import numpy | |
|
9 | import copy | |
|
10 | ||
|
11 | class Header: | |
|
12 | ||
|
13 | def __init__(self): | |
|
14 | raise | |
|
15 | ||
|
16 | def copy(self): | |
|
17 | return copy.deepcopy(self) | |
|
18 | ||
|
19 | def read(): | |
|
20 | pass | |
|
21 | ||
|
22 | def write(): | |
|
23 | pass | |
|
24 | ||
|
25 | class BasicHeader(Header): | |
|
26 | ||
|
27 | size = None | |
|
28 | version = None | |
|
29 | dataBlock = None | |
|
30 | utc = None | |
|
31 | miliSecond = None | |
|
32 | timeZone = None | |
|
33 | dstFlag = None | |
|
34 | errorCount = None | |
|
35 | struct = None | |
|
36 | ||
|
37 | def __init__(self): | |
|
38 | self.size = 0 | |
|
39 | self.version = 0 | |
|
40 | self.dataBlock = 0 | |
|
41 | self.utc = 0 | |
|
42 | self.miliSecond = 0 | |
|
43 | self.timeZone = 0 | |
|
44 | self.dstFlag = 0 | |
|
45 | self.errorCount = 0 | |
|
46 | self.struct = numpy.dtype([ | |
|
47 | ('nSize','<u4'), | |
|
48 | ('nVersion','<u2'), | |
|
49 | ('nDataBlockId','<u4'), | |
|
50 | ('nUtime','<u4'), | |
|
51 | ('nMilsec','<u2'), | |
|
52 | ('nTimezone','<i2'), | |
|
53 | ('nDstflag','<i2'), | |
|
54 | ('nErrorCount','<u4') | |
|
55 | ]) | |
|
56 | ||
|
57 | ||
|
58 | def read(self, fp): | |
|
59 | try: | |
|
60 | header = numpy.fromfile(fp, self.struct,1) | |
|
61 | self.size = header['nSize'][0] | |
|
62 | self.version = header['nVersion'][0] | |
|
63 | self.dataBlock = header['nDataBlockId'][0] | |
|
64 | self.utc = header['nUtime'][0] | |
|
65 | self.miliSecond = header['nMilsec'][0] | |
|
66 | self.timeZone = header['nTimezone'][0] | |
|
67 | self.dstFlag = header['nDstflag'][0] | |
|
68 | self.errorCount = header['nErrorCount'][0] | |
|
69 | except: | |
|
70 | return 0 | |
|
71 | ||
|
72 | return 1 | |
|
73 | ||
|
74 | def write(self, fp): | |
|
75 | headerTuple = (self.size,self.version,self.dataBlock,self.utc,self.miliSecond,self.timeZone,self.dstFlag,self.errorCount) | |
|
76 | header = numpy.array(headerTuple,self.struct) | |
|
77 | header.tofile(fp) | |
|
78 | ||
|
79 | return 1 | |
|
80 | ||
|
81 | class SystemHeader(Header): | |
|
82 | ||
|
83 | size = None | |
|
84 | numSamples = None | |
|
85 | numProfiles = None | |
|
86 | numChannels = None | |
|
87 | adcResolution = None | |
|
88 | pciDioBusWidth = None | |
|
89 | struct = None | |
|
90 | ||
|
91 | def __init__(self): | |
|
92 | self.size = 0 | |
|
93 | self.numSamples = 0 | |
|
94 | self.numProfiles = 0 | |
|
95 | self.numChannels = 0 | |
|
96 | self.adcResolution = 0 | |
|
97 | self.pciDioBusWidth = 0 | |
|
98 | self.struct = numpy.dtype([ | |
|
99 | ('nSize','<u4'), | |
|
100 | ('nNumSamples','<u4'), | |
|
101 | ('nNumProfiles','<u4'), | |
|
102 | ('nNumChannels','<u4'), | |
|
103 | ('nADCResolution','<u4'), | |
|
104 | ('nPCDIOBusWidth','<u4'), | |
|
105 | ]) | |
|
106 | ||
|
107 | ||
|
108 | def read(self, fp): | |
|
109 | try: | |
|
110 | header = numpy.fromfile(fp,self.struct,1) | |
|
111 | self.size = header['nSize'][0] | |
|
112 | self.numSamples = header['nNumSamples'][0] | |
|
113 | self.numProfiles = header['nNumProfiles'][0] | |
|
114 | self.numChannels = header['nNumChannels'][0] | |
|
115 | self.adcResolution = header['nADCResolution'][0] | |
|
116 | self.pciDioBusWidth = header['nPCDIOBusWidth'][0] | |
|
117 | except: | |
|
118 | return 0 | |
|
119 | ||
|
120 | return 1 | |
|
121 | ||
|
122 | def write(self, fp): | |
|
123 | headerTuple = (self.size,self.numSamples,self.numProfiles,self.numChannels,self.adcResolution,self.pciDioBusWidth) | |
|
124 | header = numpy.array(headerTuple,self.struct) | |
|
125 | header.tofile(fp) | |
|
126 | ||
|
127 | return 1 | |
|
128 | ||
|
129 | class RadarControllerHeader(Header): | |
|
130 | ||
|
131 | size = None | |
|
132 | expType = None | |
|
133 | nTx = None | |
|
134 | ipp = None | |
|
135 | txA = None | |
|
136 | txB = None | |
|
137 | numWindows = None | |
|
138 | numTaus = None | |
|
139 | codeType = None | |
|
140 | line6Function = None | |
|
141 | line5Function = None | |
|
142 | fClock = None | |
|
143 | prePulseBefore = None | |
|
144 | prePulserAfter = None | |
|
145 | rangeIpp = None | |
|
146 | rangeTxA = None | |
|
147 | rangeTxB = None | |
|
148 | struct = None | |
|
149 | ||
|
150 | def __init__(self): | |
|
151 | self.size = 0 | |
|
152 | self.expType = 0 | |
|
153 | self.nTx = 0 | |
|
154 | self.ipp = 0 | |
|
155 | self.txA = 0 | |
|
156 | self.txB = 0 | |
|
157 | self.numWindows = 0 | |
|
158 | self.numTaus = 0 | |
|
159 | self.codeType = 0 | |
|
160 | self.line6Function = 0 | |
|
161 | self.line5Function = 0 | |
|
162 | self.fClock = 0 | |
|
163 | self.prePulseBefore = 0 | |
|
164 | self.prePulserAfter = 0 | |
|
165 | self.rangeIpp = 0 | |
|
166 | self.rangeTxA = 0 | |
|
167 | self.rangeTxB = 0 | |
|
168 | self.struct = numpy.dtype([ | |
|
169 | ('nSize','<u4'), | |
|
170 | ('nExpType','<u4'), | |
|
171 | ('nNTx','<u4'), | |
|
172 | ('fIpp','<f4'), | |
|
173 | ('fTxA','<f4'), | |
|
174 | ('fTxB','<f4'), | |
|
175 | ('nNumWindows','<u4'), | |
|
176 | ('nNumTaus','<u4'), | |
|
177 | ('nCodeType','<u4'), | |
|
178 | ('nLine6Function','<u4'), | |
|
179 | ('nLine5Function','<u4'), | |
|
180 | ('fClock','<f4'), | |
|
181 | ('nPrePulseBefore','<u4'), | |
|
182 | ('nPrePulseAfter','<u4'), | |
|
183 | ('sRangeIPP','<a20'), | |
|
184 | ('sRangeTxA','<a20'), | |
|
185 | ('sRangeTxB','<a20'), | |
|
186 | ]) | |
|
187 | ||
|
188 | self.samplingWindowStruct = numpy.dtype([('h0','<f4'),('dh','<f4'),('nsa','<u4')]) | |
|
189 | ||
|
190 | self.samplingWindow = None | |
|
191 | self.numHeights = None | |
|
192 | self.firstHeight = None | |
|
193 | self.deltaHeight = None | |
|
194 | self.samplesWin = None | |
|
195 | ||
|
196 | self.numCode = None | |
|
197 | self.numBaud = None | |
|
198 | self.code = None | |
|
199 | self.flip1 = None | |
|
200 | self.flip2 = None | |
|
201 | ||
|
202 | self.dynamic = numpy.array([],numpy.dtype('byte')) | |
|
203 | ||
|
204 | ||
|
205 | def read(self, fp): | |
|
206 | try: | |
|
207 | startFp = fp.tell() | |
|
208 | header = numpy.fromfile(fp,self.struct,1) | |
|
209 | self.size = header['nSize'][0] | |
|
210 | self.expType = header['nExpType'][0] | |
|
211 | self.nTx = header['nNTx'][0] | |
|
212 | self.ipp = header['fIpp'][0] | |
|
213 | self.txA = header['fTxA'][0] | |
|
214 | self.txB = header['fTxB'][0] | |
|
215 | self.numWindows = header['nNumWindows'][0] | |
|
216 | self.numTaus = header['nNumTaus'][0] | |
|
217 | self.codeType = header['nCodeType'][0] | |
|
218 | self.line6Function = header['nLine6Function'][0] | |
|
219 | self.line5Function = header['nLine5Function'][0] | |
|
220 | self.fClock = header['fClock'][0] | |
|
221 | self.prePulseBefore = header['nPrePulseBefore'][0] | |
|
222 | self.prePulserAfter = header['nPrePulseAfter'][0] | |
|
223 | self.rangeIpp = header['sRangeIPP'][0] | |
|
224 | self.rangeTxA = header['sRangeTxA'][0] | |
|
225 | self.rangeTxB = header['sRangeTxB'][0] | |
|
226 | # jump Dynamic Radar Controller Header | |
|
227 | jumpFp = self.size - 116 | |
|
228 | self.dynamic = numpy.fromfile(fp,numpy.dtype('byte'),jumpFp) | |
|
229 | #pointer backward to dynamic header and read | |
|
230 | backFp = fp.tell() - jumpFp | |
|
231 | fp.seek(backFp) | |
|
232 | ||
|
233 | self.samplingWindow = numpy.fromfile(fp,self.samplingWindowStruct,self.numWindows) | |
|
234 | self.numHeights = numpy.sum(self.samplingWindow['nsa']) | |
|
235 | self.firstHeight = self.samplingWindow['h0'] | |
|
236 | self.deltaHeight = self.samplingWindow['dh'] | |
|
237 | self.samplesWin = self.samplingWindow['nsa'] | |
|
238 | ||
|
239 | self.Taus = numpy.fromfile(fp,'<f4',self.numTaus) | |
|
240 | ||
|
241 | if self.codeType != 0: | |
|
242 | self.numCode = numpy.fromfile(fp,'<u4',1) | |
|
243 | self.numBaud = numpy.fromfile(fp,'<u4',1) | |
|
244 | self.code = numpy.empty([self.numCode,self.numBaud],dtype='u1') | |
|
245 | tempList = [] | |
|
246 | for ic in range(self.numCode): | |
|
247 | temp = numpy.fromfile(fp,'u1',4*numpy.ceil(self.numBaud/32.)) | |
|
248 | tempList.append(temp) | |
|
249 | self.code[ic] = numpy.unpackbits(temp[::-1])[-1*self.numBaud:] | |
|
250 | self.code = 2.0*self.code - 1.0 | |
|
251 | ||
|
252 | if self.line5Function == RCfunction.FLIP: | |
|
253 | self.flip1 = numpy.fromfile(fp,'<u4',1) | |
|
254 | ||
|
255 | if self.line6Function == RCfunction.FLIP: | |
|
256 | self.flip2 = numpy.fromfile(fp,'<u4',1) | |
|
257 | ||
|
258 | endFp = self.size + startFp | |
|
259 | jumpFp = endFp - fp.tell() | |
|
260 | if jumpFp > 0: | |
|
261 | fp.seek(jumpFp) | |
|
262 | ||
|
263 | except: | |
|
264 | return 0 | |
|
265 | ||
|
266 | return 1 | |
|
267 | ||
|
268 | def write(self, fp): | |
|
269 | headerTuple = (self.size, | |
|
270 | self.expType, | |
|
271 | self.nTx, | |
|
272 | self.ipp, | |
|
273 | self.txA, | |
|
274 | self.txB, | |
|
275 | self.numWindows, | |
|
276 | self.numTaus, | |
|
277 | self.codeType, | |
|
278 | self.line6Function, | |
|
279 | self.line5Function, | |
|
280 | self.fClock, | |
|
281 | self.prePulseBefore, | |
|
282 | self.prePulserAfter, | |
|
283 | self.rangeIpp, | |
|
284 | self.rangeTxA, | |
|
285 | self.rangeTxB) | |
|
286 | ||
|
287 | header = numpy.array(headerTuple,self.struct) | |
|
288 | header.tofile(fp) | |
|
289 | ||
|
290 | dynamic = self.dynamic | |
|
291 | dynamic.tofile(fp) | |
|
292 | ||
|
293 | return 1 | |
|
294 | ||
|
295 | ||
|
296 | ||
|
297 | class ProcessingHeader(Header): | |
|
298 | ||
|
299 | size = None | |
|
300 | dataType = None | |
|
301 | blockSize = None | |
|
302 | profilesPerBlock = None | |
|
303 | dataBlocksPerFile = None | |
|
304 | numWindows = None | |
|
305 | processFlags = None | |
|
306 | coherentInt = None | |
|
307 | incoherentInt = None | |
|
308 | totalSpectra = None | |
|
309 | struct = None | |
|
310 | flag_dc = None | |
|
311 | flag_cspc = None | |
|
312 | ||
|
313 | def __init__(self): | |
|
314 | self.size = 0 | |
|
315 | self.dataType = 0 | |
|
316 | self.blockSize = 0 | |
|
317 | self.profilesPerBlock = 0 | |
|
318 | self.dataBlocksPerFile = 0 | |
|
319 | self.numWindows = 0 | |
|
320 | self.processFlags = 0 | |
|
321 | self.coherentInt = 0 | |
|
322 | self.incoherentInt = 0 | |
|
323 | self.totalSpectra = 0 | |
|
324 | self.struct = numpy.dtype([ | |
|
325 | ('nSize','<u4'), | |
|
326 | ('nDataType','<u4'), | |
|
327 | ('nSizeOfDataBlock','<u4'), | |
|
328 | ('nProfilesperBlock','<u4'), | |
|
329 | ('nDataBlocksperFile','<u4'), | |
|
330 | ('nNumWindows','<u4'), | |
|
331 | ('nProcessFlags','<u4'), | |
|
332 | ('nCoherentIntegrations','<u4'), | |
|
333 | ('nIncoherentIntegrations','<u4'), | |
|
334 | ('nTotalSpectra','<u4') | |
|
335 | ]) | |
|
336 | self.samplingWindow = 0 | |
|
337 | self.structSamplingWindow = numpy.dtype([('h0','<f4'),('dh','<f4'),('nsa','<u4')]) | |
|
338 | self.numHeights = 0 | |
|
339 | self.firstHeight = 0 | |
|
340 | self.deltaHeight = 0 | |
|
341 | self.samplesWin = 0 | |
|
342 | self.spectraComb = 0 | |
|
343 | self.numCode = 0 | |
|
344 | self.code = 0 | |
|
345 | self.numBaud = 0 | |
|
346 | self.shif_fft = False | |
|
347 | self.flag_dc = False | |
|
348 | self.flag_cspc = False | |
|
349 | ||
|
350 | def read(self, fp): | |
|
351 | try: | |
|
352 | header = numpy.fromfile(fp,self.struct,1) | |
|
353 | self.size = header['nSize'][0] | |
|
354 | self.dataType = header['nDataType'][0] | |
|
355 | self.blockSize = header['nSizeOfDataBlock'][0] | |
|
356 | self.profilesPerBlock = header['nProfilesperBlock'][0] | |
|
357 | self.dataBlocksPerFile = header['nDataBlocksperFile'][0] | |
|
358 | self.numWindows = header['nNumWindows'][0] | |
|
359 | self.processFlags = header['nProcessFlags'] | |
|
360 | self.coherentInt = header['nCoherentIntegrations'][0] | |
|
361 | self.incoherentInt = header['nIncoherentIntegrations'][0] | |
|
362 | self.totalSpectra = header['nTotalSpectra'][0] | |
|
363 | self.samplingWindow = numpy.fromfile(fp,self.structSamplingWindow,self.numWindows) | |
|
364 | self.numHeights = numpy.sum(self.samplingWindow['nsa']) | |
|
365 | self.firstHeight = self.samplingWindow['h0'] | |
|
366 | self.deltaHeight = self.samplingWindow['dh'] | |
|
367 | self.samplesWin = self.samplingWindow['nsa'] | |
|
368 | self.spectraComb = numpy.fromfile(fp,'u1',2*self.totalSpectra) | |
|
369 | ||
|
370 | if ((self.processFlags & PROCFLAG.DEFINE_PROCESS_CODE) == PROCFLAG.DEFINE_PROCESS_CODE): | |
|
371 | self.numCode = numpy.fromfile(fp,'<u4',1) | |
|
372 | self.numBaud = numpy.fromfile(fp,'<u4',1) | |
|
373 | self.code = numpy.fromfile(fp,'<f4',self.numCode*self.numBaud).reshape(self.numBaud,self.numCode) | |
|
374 | ||
|
375 | if ((self.processFlags & PROCFLAG.SHIFT_FFT_DATA) == PROCFLAG.SHIFT_FFT_DATA): | |
|
376 | self.shif_fft = True | |
|
377 | else: | |
|
378 | self.shif_fft = False | |
|
379 | ||
|
380 | if ((self.processFlags & PROCFLAG.SAVE_CHANNELS_DC) == PROCFLAG.SAVE_CHANNELS_DC): | |
|
381 | self.flag_dc = True | |
|
382 | ||
|
383 | nChannels = 0 | |
|
384 | nPairs = 0 | |
|
385 | pairList = [] | |
|
386 | ||
|
387 | for i in range( 0, self.totalSpectra*2, 2 ): | |
|
388 | if self.spectraComb[i] == self.spectraComb[i+1]: | |
|
389 | nChannels = nChannels + 1 #par de canales iguales | |
|
390 | else: | |
|
391 | nPairs = nPairs + 1 #par de canales diferentes | |
|
392 | pairList.append( (self.spectraComb[i], self.spectraComb[i+1]) ) | |
|
393 | ||
|
394 | self.flag_cspc = False | |
|
395 | if nPairs > 0: | |
|
396 | self.flag_cspc = True | |
|
397 | ||
|
398 | except: | |
|
399 | return 0 | |
|
400 | ||
|
401 | return 1 | |
|
402 | ||
|
403 | def write(self, fp): | |
|
404 | headerTuple = (self.size, | |
|
405 | self.dataType, | |
|
406 | self.blockSize, | |
|
407 | self.profilesPerBlock, | |
|
408 | self.dataBlocksPerFile, | |
|
409 | self.numWindows, | |
|
410 | self.processFlags, | |
|
411 | self.coherentInt, | |
|
412 | self.incoherentInt, | |
|
413 | self.totalSpectra) | |
|
414 | ||
|
415 | header = numpy.array(headerTuple,self.struct) | |
|
416 | header.tofile(fp) | |
|
417 | ||
|
418 | if self.numWindows != 0: | |
|
419 | sampleWindowTuple = (self.firstHeight,self.deltaHeight,self.samplesWin) | |
|
420 | samplingWindow = numpy.array(sampleWindowTuple,self.structSamplingWindow) | |
|
421 | samplingWindow.tofile(fp) | |
|
422 | ||
|
423 | ||
|
424 | if self.totalSpectra != 0: | |
|
425 | spectraComb = numpy.array([],numpy.dtype('u1')) | |
|
426 | spectraComb = self.spectraComb | |
|
427 | spectraComb.tofile(fp) | |
|
428 | ||
|
429 | ||
|
430 | if self.processFlags & PROCFLAG.DEFINE_PROCESS_CODE == PROCFLAG.DEFINE_PROCESS_CODE: | |
|
431 | numCode = self.numCode | |
|
432 | numCode.tofile(fp) | |
|
433 | ||
|
434 | numBaud = self.numBaud | |
|
435 | numBaud.tofile(fp) | |
|
436 | ||
|
437 | code = self.code.reshape(numCode*numBaud) | |
|
438 | code.tofile(fp) | |
|
439 | ||
|
440 | return 1 | |
|
441 | ||
|
442 | class RCfunction: | |
|
443 | NONE=0 | |
|
444 | FLIP=1 | |
|
445 | CODE=2 | |
|
446 | SAMPLING=3 | |
|
447 | LIN6DIV256=4 | |
|
448 | SYNCHRO=5 | |
|
449 | ||
|
450 | class nCodeType: | |
|
451 | NONE=0 | |
|
452 | USERDEFINE=1 | |
|
453 | BARKER2=2 | |
|
454 | BARKER3=3 | |
|
455 | BARKER4=4 | |
|
456 | BARKER5=5 | |
|
457 | BARKER7=6 | |
|
458 | BARKER11=7 | |
|
459 | BARKER13=8 | |
|
460 | AC128=9 | |
|
461 | COMPLEMENTARYCODE2=10 | |
|
462 | COMPLEMENTARYCODE4=11 | |
|
463 | COMPLEMENTARYCODE8=12 | |
|
464 | COMPLEMENTARYCODE16=13 | |
|
465 | COMPLEMENTARYCODE32=14 | |
|
466 | COMPLEMENTARYCODE64=15 | |
|
467 | COMPLEMENTARYCODE128=16 | |
|
468 | CODE_BINARY28=17 | |
|
469 | ||
|
470 | class PROCFLAG: | |
|
471 | COHERENT_INTEGRATION = numpy.uint32(0x00000001) | |
|
472 | DECODE_DATA = numpy.uint32(0x00000002) | |
|
473 | SPECTRA_CALC = numpy.uint32(0x00000004) | |
|
474 | INCOHERENT_INTEGRATION = numpy.uint32(0x00000008) | |
|
475 | POST_COHERENT_INTEGRATION = numpy.uint32(0x00000010) | |
|
476 | SHIFT_FFT_DATA = numpy.uint32(0x00000020) | |
|
477 | ||
|
478 | DATATYPE_CHAR = numpy.uint32(0x00000040) | |
|
479 | DATATYPE_SHORT = numpy.uint32(0x00000080) | |
|
480 | DATATYPE_LONG = numpy.uint32(0x00000100) | |
|
481 | DATATYPE_INT64 = numpy.uint32(0x00000200) | |
|
482 | DATATYPE_FLOAT = numpy.uint32(0x00000400) | |
|
483 | DATATYPE_DOUBLE = numpy.uint32(0x00000800) | |
|
484 | ||
|
485 | DATAARRANGE_CONTIGUOUS_CH = numpy.uint32(0x00001000) | |
|
486 | DATAARRANGE_CONTIGUOUS_H = numpy.uint32(0x00002000) | |
|
487 | DATAARRANGE_CONTIGUOUS_P = numpy.uint32(0x00004000) | |
|
488 | ||
|
489 | SAVE_CHANNELS_DC = numpy.uint32(0x00008000) | |
|
490 | DEFLIP_DATA = numpy.uint32(0x00010000) | |
|
491 | DEFINE_PROCESS_CODE = numpy.uint32(0x00020000) | |
|
492 | ||
|
493 | ACQ_SYS_NATALIA = numpy.uint32(0x00040000) | |
|
494 | ACQ_SYS_ECHOTEK = numpy.uint32(0x00080000) | |
|
495 | ACQ_SYS_ADRXD = numpy.uint32(0x000C0000) | |
|
496 | ACQ_SYS_JULIA = numpy.uint32(0x00100000) | |
|
497 | ACQ_SYS_XXXXXX = numpy.uint32(0x00140000) | |
|
498 | ||
|
499 | EXP_NAME_ESP = numpy.uint32(0x00200000) | |
|
500 | CHANNEL_NAMES_ESP = numpy.uint32(0x00400000) | |
|
501 | ||
|
502 | OPERATION_MASK = numpy.uint32(0x0000003F) | |
|
503 | DATATYPE_MASK = numpy.uint32(0x00000FC0) | |
|
504 | DATAARRANGE_MASK = numpy.uint32(0x00007000) | |
|
505 | ACQ_SYS_MASK = numpy.uint32(0x001C0000) No newline at end of file |
@@ -0,0 +1,41 | |||
|
1 | ||
|
2 | import os, sys | |
|
3 | import numpy | |
|
4 | import glob | |
|
5 | import fnmatch | |
|
6 | import time, datetime | |
|
7 | ||
|
8 | path = os.path.split(os.getcwd())[0] | |
|
9 | sys.path.append(path) | |
|
10 | ||
|
11 | from Model.JROHeader import * | |
|
12 | from Model.Voltage import Voltage | |
|
13 | ||
|
14 | from IO.JRODataIO import JRODataReader | |
|
15 | ||
|
16 | ||
|
17 | class VoltageReader(JRODataReader): | |
|
18 | dataOutObj = None | |
|
19 | datablock = None | |
|
20 | ext = ".r" | |
|
21 | optchar = "D" | |
|
22 | ||
|
23 | def __init__(self, dataOutObj=None): | |
|
24 | self.datablock = None | |
|
25 | #Por herencia no necesito instanciar nuevamente estos objetos | |
|
26 | #self.m_BasicHeader = BasicHeader() | |
|
27 | #self.m_SystemHeader = SystemHeader() | |
|
28 | #self.m_RadarControllerHeader = RadarControllerHeader() | |
|
29 | #self.m_ProcessingHeader = ProcessingHeader() | |
|
30 | self.online = 0 | |
|
31 | ||
|
32 | def createObjByDefault(self): | |
|
33 | dataObj = Voltage() | |
|
34 | ||
|
35 | return dataObj | |
|
36 | ||
|
37 | def getBlockDimension(self): | |
|
38 | pts2read = self.m_ProcessingHeader.profilesPerBlock * self.m_ProcessingHeader.numHeights * self.m_SystemHeader.numChannels | |
|
39 | self.blocksize = pts2read | |
|
40 | ||
|
41 |
|
1 | NO CONTENT: new file 100644 |
@@ -0,0 +1,133 | |||
|
1 | import os | |
|
2 | import sys | |
|
3 | import numpy | |
|
4 | ||
|
5 | path = os.path.split(os.getcwd())[0] | |
|
6 | sys.path.append(path) | |
|
7 | ||
|
8 | from Model.Voltage import Voltage | |
|
9 | ||
|
10 | ||
|
11 | class VoltageProcessor: | |
|
12 | dataInObj = None | |
|
13 | dataOutObj = None | |
|
14 | integratorObjIndex = None | |
|
15 | writerObjIndex = None | |
|
16 | integratorObjList = None | |
|
17 | writerObjList = None | |
|
18 | ||
|
19 | def __init__(self): | |
|
20 | self.integratorObjIndex = None | |
|
21 | self.writerObjIndex = None | |
|
22 | self.integratorObjList = [] | |
|
23 | self.writerObjList = [] | |
|
24 | ||
|
25 | def setup(self,dataInObj=None,dataOutObj=None): | |
|
26 | self.dataInObj = dataInObj | |
|
27 | ||
|
28 | if self.dataOutObj == None: | |
|
29 | dataOutObj = Voltage() | |
|
30 | ||
|
31 | self.dataOutObj = dataOutObj | |
|
32 | ||
|
33 | return self.dataOutObj | |
|
34 | ||
|
35 | def init(self): | |
|
36 | self.integratorObjIndex = 0 | |
|
37 | self.writerObjIndex = 0 | |
|
38 | # No necesita copiar en cada init() los atributos de dataInObj | |
|
39 | # la copia deberia hacerse por cada nuevo bloque de datos | |
|
40 | ||
|
41 | def addIntegrator(self,N,timeInterval): | |
|
42 | objCohInt = CoherentIntegrator(N,timeInterval) | |
|
43 | self.integratorObjList.append(objCohInt) | |
|
44 | ||
|
45 | def addWriter(self): | |
|
46 | pass | |
|
47 | ||
|
48 | def integrator(self, N=None, timeInterval=None): | |
|
49 | if self.dataOutObj.flagNoData: | |
|
50 | return 0 | |
|
51 | if len(self.integratorObjList) <= self.integratorObjIndex: | |
|
52 | self.addIntegrator(N,timeInterval) | |
|
53 | ||
|
54 | myCohIntObj = self.integratorObjList[self.integratorObjIndex] | |
|
55 | myCohIntObj.exe(data=self.dataOutObj.data,timeOfData=None) | |
|
56 | ||
|
57 | pass | |
|
58 | ||
|
59 | def writeData(self): | |
|
60 | pass | |
|
61 | ||
|
62 | class CoherentIntegrator: | |
|
63 | ||
|
64 | integ_counter = None | |
|
65 | data = None | |
|
66 | navg = None | |
|
67 | buffer = None | |
|
68 | nCohInt = None | |
|
69 | ||
|
70 | def __init__(self, N=None,timeInterval=None): | |
|
71 | ||
|
72 | self.data = None | |
|
73 | self.navg = None | |
|
74 | self.buffer = None | |
|
75 | self.timeOut = None | |
|
76 | self.exitCondition = False | |
|
77 | self.isReady = False | |
|
78 | self.nCohInt = N | |
|
79 | self.integ_counter = 0 | |
|
80 | if timeInterval!=None: | |
|
81 | self.timeIntervalInSeconds = timeInterval * 60. #if (type(timeInterval)!=integer) -> change this line | |
|
82 | ||
|
83 | if ((timeInterval==None) and (N==None)): | |
|
84 | raise ValueError, "N = None ; timeInterval = None" | |
|
85 | ||
|
86 | if timeInterval == None: | |
|
87 | self.timeFlag = False | |
|
88 | else: | |
|
89 | self.timeFlag = True | |
|
90 | ||
|
91 | def exe(self, data, timeOfData): | |
|
92 | ||
|
93 | if self.timeFlag: | |
|
94 | if self.timeOut == None: | |
|
95 | self.timeOut = timeOfData + self.timeIntervalInSeconds | |
|
96 | ||
|
97 | if timeOfData < self.timeOut: | |
|
98 | if self.buffer == None: | |
|
99 | self.buffer = data | |
|
100 | else: | |
|
101 | self.buffer = self.buffer + data | |
|
102 | self.integ_counter += 1 | |
|
103 | else: | |
|
104 | self.exitCondition = True | |
|
105 | ||
|
106 | else: | |
|
107 | if self.integ_counter < self.nCohInt: | |
|
108 | if self.buffer == None: | |
|
109 | self.buffer = data | |
|
110 | else: | |
|
111 | self.buffer = self.buffer + data | |
|
112 | ||
|
113 | self.integ_counter += 1 | |
|
114 | ||
|
115 | if self.integ_counter == self.nCohInt: | |
|
116 | self.exitCondition = True | |
|
117 | ||
|
118 | if self.exitCondition: | |
|
119 | self.data = self.buffer | |
|
120 | self.navg = self.integ_counter | |
|
121 | self.isReady = True | |
|
122 | self.buffer = None | |
|
123 | self.timeOut = None | |
|
124 | self.integ_counter = 0 | |
|
125 | self.exitCondition = False | |
|
126 | ||
|
127 | if self.timeFlag: | |
|
128 | self.buffer = data | |
|
129 | self.timeOut = timeOfData + self.timeIntervalInSeconds | |
|
130 | else: | |
|
131 | self.isReady = False | |
|
132 | ||
|
133 |
|
1 | NO CONTENT: new file 100644 |
@@ -0,0 +1,64 | |||
|
1 | ||
|
2 | import os, sys | |
|
3 | import time, datetime | |
|
4 | ||
|
5 | path = os.path.split(os.getcwd())[0] | |
|
6 | sys.path.append(path) | |
|
7 | ||
|
8 | from Data.Voltage import Voltage | |
|
9 | from IO.VoltageIO import * | |
|
10 | ||
|
11 | from Processing.VoltageProcessor import * | |
|
12 | ||
|
13 | ||
|
14 | ||
|
15 | class TestSChain(): | |
|
16 | ||
|
17 | def __init__(self): | |
|
18 | self.setValues() | |
|
19 | self.createObjects() | |
|
20 | self.testSChain() | |
|
21 | ||
|
22 | def setValues(self): | |
|
23 | self.path = "/Users/jro/Documents/RadarData/MST_ISR/MST" | |
|
24 | ||
|
25 | self.wrpath = "/Users/jro/Documents/RadarData/wr_data" | |
|
26 | ||
|
27 | self.startDate = datetime.date(2009,1,17) | |
|
28 | self.endDate = datetime.date(2009,1,17) | |
|
29 | ||
|
30 | self.startTime = datetime.time(0,0,0) | |
|
31 | self.endTime = datetime.time(14,1,1) | |
|
32 | ||
|
33 | def createObjects(self): | |
|
34 | self.readerObj = VoltageReader() | |
|
35 | self.voltProcObj = VoltageProcessor() | |
|
36 | ||
|
37 | self.voltObj1 = self.readerObj.setup( | |
|
38 | path = self.path, | |
|
39 | startDate = self.startDate, | |
|
40 | endDate = self.endDate, | |
|
41 | startTime = self.startTime, | |
|
42 | endTime = self.endTime, | |
|
43 | expLabel = '', | |
|
44 | online = 0) | |
|
45 | ||
|
46 | ||
|
47 | ||
|
48 | def testSChain(self): | |
|
49 | ||
|
50 | ini = time.time() | |
|
51 | ||
|
52 | while(True): | |
|
53 | self.readerObj.getData() | |
|
54 | ||
|
55 | if self.readerObj.flagNoMoreFiles: | |
|
56 | break | |
|
57 | ||
|
58 | if self.readerObj.flagIsNewBlock: | |
|
59 | print 'Block No %04d, Time: %s' %(self.readerObj.nTotalBlocks, | |
|
60 | datetime.datetime.fromtimestamp(self.readerObj.m_BasicHeader.utc),) | |
|
61 | ||
|
62 | ||
|
63 | if __name__ == '__main__': | |
|
64 | TestSChain() No newline at end of file |
General Comments 0
You need to be logged in to leave comments.
Login now