##// END OF EJS Templates
Cambios realizados a la Clase VoltageReader: se ordenaron los metodos y atributos. Esta version contiene un bug en la lectura de datos
Daniel Valdez -
r5:9c86bf89cb54
parent child
Show More
@@ -11,8 +11,8 import time
11 objReader = VoltageReader.VoltageReader()
11 objReader = VoltageReader.VoltageReader()
12
12
13 path = '/Users/danielangelsuarezmunoz/Documents/Projects'
13 path = '/Users/danielangelsuarezmunoz/Documents/Projects'
14 startDateTime = datetime.datetime(2007,1,1,16,0,0)
14 startDateTime = datetime.datetime(2007,5,1,0,0,0)
15 endDateTime = datetime.datetime(2007,12,1,17,1,0)
15 endDateTime = datetime.datetime(2007,5,1,23,59,0)
16 set = None
16 set = None
17 expLabel = ''
17 expLabel = ''
18 ext = '*.r'
18 ext = '*.r'
@@ -25,7 +25,7 print time.time() - t0
25 while(not(objReader.noMoreFiles)):
25 while(not(objReader.noMoreFiles)):
26
26
27 objReader.getData()
27 objReader.getData()
28 #print objReader.objStructShortHeader.dataBlock
28 print objReader.objBasicHeader.dataBlock
29 #print time.localtime(objReader.objStructShortHeader.universalTime)
29 #print time.localtime(objReader.objStructShortHeader.universalTime)
30
30
31 No newline at end of file
31
@@ -50,7 +50,7 class PROCFLAG:
50 DATAARRANGE_MASK = numpy.uint32(0x00007000)
50 DATAARRANGE_MASK = numpy.uint32(0x00007000)
51 ACQ_SYS_MASK = numpy.uint32(0x001C0000)
51 ACQ_SYS_MASK = numpy.uint32(0x001C0000)
52
52
53 class StructShortHeader():
53 class BasicHeader():
54
54
55 size = 0
55 size = 0
56 version = 0
56 version = 0
@@ -88,7 +88,7 class StructShortHeader():
88
88
89 return 1
89 return 1
90
90
91 class StructSystemHeader():
91 class SystemHeader():
92 size = 0
92 size = 0
93 numSamples = 0
93 numSamples = 0
94 numProfiles = 0
94 numProfiles = 0
@@ -108,11 +108,18 class StructSystemHeader():
108 pass
108 pass
109
109
110 def read(self, fp):
110 def read(self, fp):
111 header = numpy.fromfile(fp,self.struct,1)
112 self.size = header['nSize'][0]
113 self.numSamples = header['nNumSamples'][0]
114 self.numProfiles = header['nNumProfiles'][0]
115 self.numChannels = header['nNumChannels'][0]
116 self.adcResolution = header['nADCResolution'][0]
117 self.pciDioBusWidth = header['nPCDIOBusWidth'][0]
111
118
112
119
113 return 1
120 return 1
114
121
115 class StructRadarController():
122 class RadarControllerHeader():
116 size = 0
123 size = 0
117 expType = 0
124 expType = 0
118 nTx = 0
125 nTx = 0
@@ -155,10 +162,31 class StructRadarController():
155 pass
162 pass
156
163
157 def read(self, fp):
164 def read(self, fp):
165 header = numpy.fromfile(fp,self.struct,1)
166 self.size = header['nSize'][0]
167 self.expType = header['nExpType'][0]
168 self.nTx = header['nNTx'][0]
169 self.ipp = header['fIpp'][0]
170 self.txA = header['fTxA'][0]
171 self.txB = header['fTxB'][0]
172 self.numWindows = header['nNumWindows'][0]
173 self.numTaus = header['nNumTaus'][0]
174 self.codeType = header['nCodeType'][0]
175 self.line6Function = header['nLine6Function'][0]
176 self.line5Fuction = header['nLine5Function'][0]
177 self.fClock = header['fClock'][0]
178 self.prePulseBefore = header['nPrePulseBefore'][0]
179 self.prePulserAfter = header['nPrePulseAfter'][0]
180 self.rangeIpp = header['sRangeIPP'][0]
181 self.rangeTxA = header['sRangeTxA'][0]
182 self.rangeTxB = header['sRangeTxB'][0]
183 # jump Dynamic Radar Controller Header
184 jumpHeader = self.size - 116
185 fp.seek(fp.tell() + jumpHeader)
158
186
159 return 1
187 return 1
160
188
161 class StructProcessing():
189 class ProcessingHeader():
162 size = 0
190 size = 0
163 dataType = 0
191 dataType = 0
164 blockSize = 0
192 blockSize = 0
@@ -196,6 +224,28 class StructProcessing():
196 pass
224 pass
197
225
198 def read(self, fp):
226 def read(self, fp):
227 header = numpy.fromfile(fp,self.struct,1)
228 self.size = header['nSize'][0]
229 self.dataType = header['nDataType'][0]
230 self.blockSize = header['nSizeOfDataBlock'][0]
231 self.profilesPerBlock = header['nProfilesperBlock'][0]
232 self.dataBlocksPerFile = header['nDataBlocksperFile'][0]
233 self.numWindows = header['nNumWindows'][0]
234 self.processFlags = header['nProcessFlags']
235 self.coherentInt = header['nCoherentIntegrations'][0]
236 self.incoherentInt = header['nIncoherentIntegrations'][0]
237 self.totalSpectra = header['nTotalSpectra'][0]
238 self.samplingWindow = numpy.fromfile(fp,self.structSamplingWindow,self.numWindows)
239 self.numHeights = numpy.sum(self.samplingWindow['nsa'])
240 self.firstHeight = self.samplingWindow['h0']
241 self.deltaHeight = self.samplingWindow['dh']
242 self.samplesWin = self.samplingWindow['nsa']
243 self.spectraComb = numpy.fromfile(fp,'u1',2*self.totalSpectra)
244 if self.processFlags & PROCFLAG.DEFINE_PROCESS_CODE == PROCFLAG.DEFINE_PROCESS_CODE:
245 self.numCode = numpy.fromfile(fp,'<u4',1)
246 self.numBaud = numpy.fromfile(fp,'<u4',1)
247 self.codes = numpy.fromfile(fp,'<f4',self.numCode*self.numBaud).reshape(self.numBaud,self.numCode)
248
199
249
200 return 1
250 return 1
201
251
@@ -215,12 +265,10 class VoltageReader(DataReader):
215
265
216 __sizeOfFileByHeader = 0
266 __sizeOfFileByHeader = 0
217
267
218 __listOfPath = []
268 __pathList = []
219
269
220 filenameList = []
270 filenameList = []
221
271
222 __flagReadShortHeader = 0
223
224 __lastUTTime = 0
272 __lastUTTime = 0
225
273
226 __maxTimeStep = 5
274 __maxTimeStep = 5
@@ -241,13 +289,13 class VoltageReader(DataReader):
241
289
242 basicHeaderSize = 24
290 basicHeaderSize = 24
243
291
244 objStructShortHeader = StructShortHeader()
292 objBasicHeader = BasicHeader()
245
293
246 objStructSystemHeader = StructSystemHeader()
294 objSystemHeader = SystemHeader()
247
295
248 objStructRadarController = StructRadarController()
296 objRadarControllerHeader = RadarControllerHeader()
249
297
250 objStructProcessing = StructProcessing()
298 objProcessingHeader = ProcessingHeader()
251
299
252 __buffer = 0
300 __buffer = 0
253
301
@@ -256,61 +304,24 class VoltageReader(DataReader):
256 def __init__(self):
304 def __init__(self):
257 pass
305 pass
258
306
259 def __rdSystemHeader(self):
307 def __rdSystemHeader(self,fp=None):
260 header = numpy.fromfile(self.__fp,self.objStructSystemHeader.struct,1)
308 if fp == None:
261 self.objStructSystemHeader.size = header['nSize'][0]
309 fp = self.__fp
262 self.objStructSystemHeader.numSamples = header['nNumSamples'][0]
310
263 self.objStructSystemHeader.numProfiles = header['nNumProfiles'][0]
311 self.objSystemHeader.read(fp)
264 self.objStructSystemHeader.numChannels = header['nNumChannels'][0]
265 self.objStructSystemHeader.adcResolution = header['nADCResolution'][0]
266 self.objStructSystemHeader.pciDioBusWidth = header['nPCDIOBusWidth'][0]
267
268 def __rdRadarControllerHeader(self):
269 header = numpy.fromfile(self.__fp,self.objStructRadarController.struct,1)
270 self.objStructRadarController.size = header['nSize'][0]
271 self.objStructRadarController.expType = header['nExpType'][0]
272 self.objStructRadarController.nTx = header['nNTx'][0]
273 self.objStructRadarController.ipp = header['fIpp'][0]
274 self.objStructRadarController.txA = header['fTxA'][0]
275 self.objStructRadarController.txB = header['fTxB'][0]
276 self.objStructRadarController.numWindows = header['nNumWindows'][0]
277 self.objStructRadarController.numTaus = header['nNumTaus'][0]
278 self.objStructRadarController.codeType = header['nCodeType'][0]
279 self.objStructRadarController.line6Function = header['nLine6Function'][0]
280 self.objStructRadarController.line5Fuction = header['nLine5Function'][0]
281 self.objStructRadarController.fClock = header['fClock'][0]
282 self.objStructRadarController.prePulseBefore = header['nPrePulseBefore'][0]
283 self.objStructRadarController.prePulserAfter = header['nPrePulseAfter'][0]
284 self.objStructRadarController.rangeIpp = header['sRangeIPP'][0]
285 self.objStructRadarController.rangeTxA = header['sRangeTxA'][0]
286 self.objStructRadarController.rangeTxB = header['sRangeTxB'][0]
287 # jump Dynamic Radar Controller Header
288 jumpHeader = self.objStructRadarController.size - 116
289 self.__fp.seek(self.__fp.tell() + jumpHeader)
290
291 def __rdProcessingHeader(self):
292 header = numpy.fromfile(self.__fp,self.objStructProcessing.struct,1)
293 self.objStructProcessing.size = header['nSize'][0]
294 self.objStructProcessing.dataType = header['nDataType'][0]
295 self.objStructProcessing.blockSize = header['nSizeOfDataBlock'][0]
296 self.objStructProcessing.profilesPerBlock = header['nProfilesperBlock'][0]
297 self.objStructProcessing.dataBlocksPerFile = header['nDataBlocksperFile'][0]
298 self.objStructProcessing.numWindows = header['nNumWindows'][0]
299 self.objStructProcessing.processFlags = header['nProcessFlags']
300 self.objStructProcessing.coherentInt = header['nCoherentIntegrations'][0]
301 self.objStructProcessing.incoherentInt = header['nIncoherentIntegrations'][0]
302 self.objStructProcessing.totalSpectra = header['nTotalSpectra'][0]
303 self.objStructProcessing.samplingWindow = numpy.fromfile(self.__fp,self.objStructProcessing.structSamplingWindow,self.objStructProcessing.numWindows)
304 self.objStructProcessing.numHeights = numpy.sum(self.objStructProcessing.samplingWindow['nsa'])
305 self.objStructProcessing.firstHeight = self.objStructProcessing.samplingWindow['h0']
306 self.objStructProcessing.deltaHeight = self.objStructProcessing.samplingWindow['dh']
307 self.objStructProcessing.samplesWin = self.objStructProcessing.samplingWindow['nsa']
308 self.objStructProcessing.spectraComb = numpy.fromfile(self.__fp,'u1',2*self.objStructProcessing.totalSpectra)
309 if self.objStructProcessing.processFlags & PROCFLAG.DEFINE_PROCESS_CODE == PROCFLAG.DEFINE_PROCESS_CODE:
310 self.objStructProcessing.numCode = numpy.fromfile(self.__fp,'<u4',1)
311 self.objStructProcessing.numBaud = numpy.fromfile(self.__fp,'<u4',1)
312 self.objStructProcessing.codes = numpy.fromfile(self.__fp,'<f4',self.objStructProcessing.numCode*self.objStructProcessing.numBaud).reshape(self.objStructProcessing.numBaud,self.objStructProcessing.numCode)
313
312
313 def __rdRadarControllerHeader(self,fp=None):
314 if fp == None:
315 fp = self.__fp
316
317 self.objRadarControllerHeader.read(fp)
318
319 def __rdProcessingHeader(self,fp=None):
320 if fp == None:
321 fp = self.__fp
322
323 self.objProcessingHeader.read(fp)
324
314 def __searchFiles(self,path, startDateTime, endDateTime, set=None, expLabel = "", ext = "*.r"):
325 def __searchFiles(self,path, startDateTime, endDateTime, set=None, expLabel = "", ext = "*.r"):
315
326
316 startUtSeconds = time.mktime(startDateTime.timetuple())
327 startUtSeconds = time.mktime(startDateTime.timetuple())
@@ -345,7 +356,7 class VoltageReader(DataReader):
345 #folders.append(os.path.join(path,thisPath))
356 #folders.append(os.path.join(path,thisPath))
346 folders.append(thisPath)
357 folders.append(thisPath)
347
358
348 listOfPath = []
359 pathList = []
349 dicOfPath = {}
360 dicOfPath = {}
350 for year in rangeOfYears:
361 for year in rangeOfYears:
351 for doy in doyList:
362 for doy in doyList:
@@ -353,17 +364,17 class VoltageReader(DataReader):
353 if len(tmp) == 0:
364 if len(tmp) == 0:
354 continue
365 continue
355 if expLabel == '':
366 if expLabel == '':
356 listOfPath.append(os.path.join(path,tmp[0]))
367 pathList.append(os.path.join(path,tmp[0]))
357 dicOfPath.setdefault(os.path.join(path,tmp[0]))
368 dicOfPath.setdefault(os.path.join(path,tmp[0]))
358 dicOfPath[os.path.join(path,tmp[0])] = []
369 dicOfPath[os.path.join(path,tmp[0])] = []
359 else:
370 else:
360 listOfPath.append(os.path.join(path,os.path.join(tmp[0],expLabel)))
371 pathList.append(os.path.join(path,os.path.join(tmp[0],expLabel)))
361 dicOfPath.setdefault(os.path.join(path,os.path.join(tmp[0],expLabel)))
372 dicOfPath.setdefault(os.path.join(path,os.path.join(tmp[0],expLabel)))
362 dicOfPath[os.path.join(path,os.path.join(tmp[0],expLabel))] = []
373 dicOfPath[os.path.join(path,os.path.join(tmp[0],expLabel))] = []
363
374
364
375
365 filenameList = []
376 filenameList = []
366 for thisPath in listOfPath:
377 for thisPath in pathList:
367 fileList = glob.glob1(thisPath, ext)
378 fileList = glob.glob1(thisPath, ext)
368 #dicOfPath[thisPath].append(fileList)
379 #dicOfPath[thisPath].append(fileList)
369 fileList.sort()
380 fileList.sort()
@@ -374,8 +385,7 class VoltageReader(DataReader):
374
385
375 self.filenameList = filenameList
386 self.filenameList = filenameList
376
387
377 return listOfPath, filenameList
388 return pathList, filenameList
378
379
389
380 def isThisFileinRange(self, filename, startUTSeconds=None, endUTSeconds=None):
390 def isThisFileinRange(self, filename, startUTSeconds=None, endUTSeconds=None):
381
391
@@ -390,12 +400,14 class VoltageReader(DataReader):
390 if endUTSeconds==None:
400 if endUTSeconds==None:
391 endUTSeconds = self.endUTCSeconds
401 endUTSeconds = self.endUTCSeconds
392
402
393 objShortHeader = StructShortHeader()
403 objBasicHeader = BasicHeader()
394
404
395 if not(objShortHeader.read(fp)):
405 if not(objBasicHeader.read(fp)):
396 return 0
406 return 0
397
407
398 if not ((startUTSeconds <= objShortHeader.utc) and (endUTSeconds >= objShortHeader.utc)):
408 fp.close()
409
410 if not ((startUTSeconds <= objBasicHeader.utc) and (endUTSeconds >= objBasicHeader.utc)):
399 return 0
411 return 0
400
412
401 return 1
413 return 1
@@ -405,18 +417,17 class VoltageReader(DataReader):
405 if fp == None:
417 if fp == None:
406 fp = self.__fp
418 fp = self.__fp
407
419
408 self.objStructShortHeader.read(fp)
420 self.objBasicHeader.read(fp)
409
421
410
411 def __readFirstHeader(self):
422 def __readFirstHeader(self):
412
423
413 self.__readBasicHeader()
424 self.__readBasicHeader()
414 self.__rdSystemHeader()
425 self.__rdSystemHeader()
415 self.__rdRadarControllerHeader()
426 self.__rdRadarControllerHeader()
416 self.__rdProcessingHeader()
427 self.__rdProcessingHeader()
417 self.firstHeaderSize = self.objStructShortHeader.size
428 self.firstHeaderSize = self.objBasicHeader.size
418
429
419 data_type=int(numpy.log2((self.objStructProcessing.processFlags & PROCFLAG.DATATYPE_MASK))-numpy.log2(PROCFLAG.DATATYPE_CHAR))
430 data_type=int(numpy.log2((self.objProcessingHeader.processFlags & PROCFLAG.DATATYPE_MASK))-numpy.log2(PROCFLAG.DATATYPE_CHAR))
420 if data_type == 0:
431 if data_type == 0:
421 tmp=numpy.dtype([('real','<i1'),('imag','<i1')])
432 tmp=numpy.dtype([('real','<i1'),('imag','<i1')])
422 elif data_type == 1:
433 elif data_type == 1:
@@ -435,9 +446,7 class VoltageReader(DataReader):
435
446
436 self.__flagIsNewFile = 0
447 self.__flagIsNewFile = 0
437 self.__dataType = tmp
448 self.__dataType = tmp
438 self.__sizeOfFileByHeader = self.objStructProcessing.dataBlocksPerFile * self.objStructProcessing.blockSize + self.firstHeaderSize + self.basicHeaderSize*(self.objStructProcessing.dataBlocksPerFile - 1)
449 self.__sizeOfFileByHeader = self.objProcessingHeader.dataBlocksPerFile * self.objProcessingHeader.blockSize + self.firstHeaderSize + self.basicHeaderSize*(self.objProcessingHeader.dataBlocksPerFile - 1)
439
440
441
450
442 def __setNextFileOnline(self):
451 def __setNextFileOnline(self):
443 return 0
452 return 0
@@ -458,7 +467,7 class VoltageReader(DataReader):
458 fp = open(filename,'rb')
467 fp = open(filename,'rb')
459
468
460 currentSize = fileSize - fp.tell()
469 currentSize = fileSize - fp.tell()
461 neededSize = self.objStructProcessing.blockSize + self.firstHeaderSize
470 neededSize = self.objProcessingHeader.blockSize + self.firstHeaderSize
462
471
463 if (currentSize < neededSize):
472 if (currentSize < neededSize):
464 continue
473 continue
@@ -485,7 +494,7 class VoltageReader(DataReader):
485 def __setNewBlock(self):
494 def __setNewBlock(self):
486
495
487 currentSize = self.fileSize - self.__fp.tell()
496 currentSize = self.fileSize - self.__fp.tell()
488 neededSize = self.objStructProcessing.blockSize + self.basicHeaderSize
497 neededSize = self.objProcessingHeader.blockSize + self.basicHeaderSize
489
498
490 # Bloque Completo
499 # Bloque Completo
491 if (currentSize >= neededSize):
500 if (currentSize >= neededSize):
@@ -495,7 +504,7 class VoltageReader(DataReader):
495 self.__setNextFile()
504 self.__setNextFile()
496 self.__readFirstHeader()
505 self.__readFirstHeader()
497
506
498 deltaTime = self.objStructShortHeader.utc - self.__lastUTTime # check this
507 deltaTime = self.objBasicHeader.utc - self.__lastUTTime # check this
499 if deltaTime > self.__maxTimeStep:
508 if deltaTime > self.__maxTimeStep:
500 self.__flagResetProcessing = 1
509 self.__flagResetProcessing = 1
501
510
@@ -508,11 +517,11 class VoltageReader(DataReader):
508 seteado a 0
517 seteado a 0
509 """
518 """
510
519
511 pts2read = self.objStructProcessing.profilesPerBlock*self.objStructProcessing.numHeights*self.objStructSystemHeader.numChannels
520 pts2read = self.objProcessingHeader.profilesPerBlock*self.objProcessingHeader.numHeights*self.objSystemHeader.numChannels
512
521
513 data = numpy.fromfile(self.__fp,self.__dataType,pts2read)
522 data = numpy.fromfile(self.__fp,self.__dataType,pts2read)
514
523
515 data = data.reshape((self.objStructProcessing.profilesPerBlock, self.objStructProcessing.numHeights, self.objStructSystemHeader.numChannels))
524 data = data.reshape((self.objProcessingHeader.profilesPerBlock, self.objProcessingHeader.numHeights, self.objSystemHeader.numChannels))
516
525
517 self.__buffer = data
526 self.__buffer = data
518
527
@@ -524,10 +533,10 class VoltageReader(DataReader):
524
533
525 self.__readBlock()
534 self.__readBlock()
526
535
527 self.__lastUTTime = self.objStructShortHeader.utc
536 self.__lastUTTime = self.objBasicHeader.utc
528
537
529 def __hasNotDataInBuffer(self):
538 def __hasNotDataInBuffer(self):
530 if self.__buffer_id >= self.objStructProcessing.profilesPerBlock:
539 if self.__buffer_id >= self.objProcessingHeader.profilesPerBlock:
531 return 1
540 return 1
532
541
533 return 0
542 return 0
@@ -587,6 +596,6 class VoltageReader(DataReader):
587 self.endDoy = endDateTime.timetuple().tm_yday
596 self.endDoy = endDateTime.timetuple().tm_yday
588 #call fillHeaderValues() - to Data Object
597 #call fillHeaderValues() - to Data Object
589
598
590 self.__listOfPath = pathList
599 self.__pathList = pathList
591 self.filenameList = filenameList
600 self.filenameList = filenameList
592 self.online = online
601 self.online = online
General Comments 0
You need to be logged in to leave comments. Login now