##// 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 11 objReader = VoltageReader.VoltageReader()
12 12
13 13 path = '/Users/danielangelsuarezmunoz/Documents/Projects'
14 startDateTime = datetime.datetime(2007,1,1,16,0,0)
15 endDateTime = datetime.datetime(2007,12,1,17,1,0)
14 startDateTime = datetime.datetime(2007,5,1,0,0,0)
15 endDateTime = datetime.datetime(2007,5,1,23,59,0)
16 16 set = None
17 17 expLabel = ''
18 18 ext = '*.r'
@@ -25,7 +25,7 print time.time() - t0
25 25 while(not(objReader.noMoreFiles)):
26 26
27 27 objReader.getData()
28 #print objReader.objStructShortHeader.dataBlock
28 print objReader.objBasicHeader.dataBlock
29 29 #print time.localtime(objReader.objStructShortHeader.universalTime)
30 30
31 31 No newline at end of file
@@ -50,7 +50,7 class PROCFLAG:
50 50 DATAARRANGE_MASK = numpy.uint32(0x00007000)
51 51 ACQ_SYS_MASK = numpy.uint32(0x001C0000)
52 52
53 class StructShortHeader():
53 class BasicHeader():
54 54
55 55 size = 0
56 56 version = 0
@@ -88,7 +88,7 class StructShortHeader():
88 88
89 89 return 1
90 90
91 class StructSystemHeader():
91 class SystemHeader():
92 92 size = 0
93 93 numSamples = 0
94 94 numProfiles = 0
@@ -108,11 +108,18 class StructSystemHeader():
108 108 pass
109 109
110 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 120 return 1
114 121
115 class StructRadarController():
122 class RadarControllerHeader():
116 123 size = 0
117 124 expType = 0
118 125 nTx = 0
@@ -155,10 +162,31 class StructRadarController():
155 162 pass
156 163
157 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 187 return 1
160 188
161 class StructProcessing():
189 class ProcessingHeader():
162 190 size = 0
163 191 dataType = 0
164 192 blockSize = 0
@@ -196,6 +224,28 class StructProcessing():
196 224 pass
197 225
198 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 250 return 1
201 251
@@ -215,12 +265,10 class VoltageReader(DataReader):
215 265
216 266 __sizeOfFileByHeader = 0
217 267
218 __listOfPath = []
268 __pathList = []
219 269
220 270 filenameList = []
221 271
222 __flagReadShortHeader = 0
223
224 272 __lastUTTime = 0
225 273
226 274 __maxTimeStep = 5
@@ -241,13 +289,13 class VoltageReader(DataReader):
241 289
242 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 300 __buffer = 0
253 301
@@ -256,61 +304,24 class VoltageReader(DataReader):
256 304 def __init__(self):
257 305 pass
258 306
259 def __rdSystemHeader(self):
260 header = numpy.fromfile(self.__fp,self.objStructSystemHeader.struct,1)
261 self.objStructSystemHeader.size = header['nSize'][0]
262 self.objStructSystemHeader.numSamples = header['nNumSamples'][0]
263 self.objStructSystemHeader.numProfiles = header['nNumProfiles'][0]
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)
307 def __rdSystemHeader(self,fp=None):
308 if fp == None:
309 fp = self.__fp
310
311 self.objSystemHeader.read(fp)
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 325 def __searchFiles(self,path, startDateTime, endDateTime, set=None, expLabel = "", ext = "*.r"):
315 326
316 327 startUtSeconds = time.mktime(startDateTime.timetuple())
@@ -345,7 +356,7 class VoltageReader(DataReader):
345 356 #folders.append(os.path.join(path,thisPath))
346 357 folders.append(thisPath)
347 358
348 listOfPath = []
359 pathList = []
349 360 dicOfPath = {}
350 361 for year in rangeOfYears:
351 362 for doy in doyList:
@@ -353,17 +364,17 class VoltageReader(DataReader):
353 364 if len(tmp) == 0:
354 365 continue
355 366 if expLabel == '':
356 listOfPath.append(os.path.join(path,tmp[0]))
367 pathList.append(os.path.join(path,tmp[0]))
357 368 dicOfPath.setdefault(os.path.join(path,tmp[0]))
358 369 dicOfPath[os.path.join(path,tmp[0])] = []
359 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 372 dicOfPath.setdefault(os.path.join(path,os.path.join(tmp[0],expLabel)))
362 373 dicOfPath[os.path.join(path,os.path.join(tmp[0],expLabel))] = []
363 374
364 375
365 376 filenameList = []
366 for thisPath in listOfPath:
377 for thisPath in pathList:
367 378 fileList = glob.glob1(thisPath, ext)
368 379 #dicOfPath[thisPath].append(fileList)
369 380 fileList.sort()
@@ -374,8 +385,7 class VoltageReader(DataReader):
374 385
375 386 self.filenameList = filenameList
376 387
377 return listOfPath, filenameList
378
388 return pathList, filenameList
379 389
380 390 def isThisFileinRange(self, filename, startUTSeconds=None, endUTSeconds=None):
381 391
@@ -390,12 +400,14 class VoltageReader(DataReader):
390 400 if endUTSeconds==None:
391 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 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 411 return 0
400 412
401 413 return 1
@@ -405,18 +417,17 class VoltageReader(DataReader):
405 417 if fp == None:
406 418 fp = self.__fp
407 419
408 self.objStructShortHeader.read(fp)
420 self.objBasicHeader.read(fp)
409 421
410
411 422 def __readFirstHeader(self):
412 423
413 424 self.__readBasicHeader()
414 425 self.__rdSystemHeader()
415 426 self.__rdRadarControllerHeader()
416 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 431 if data_type == 0:
421 432 tmp=numpy.dtype([('real','<i1'),('imag','<i1')])
422 433 elif data_type == 1:
@@ -435,9 +446,7 class VoltageReader(DataReader):
435 446
436 447 self.__flagIsNewFile = 0
437 448 self.__dataType = tmp
438 self.__sizeOfFileByHeader = self.objStructProcessing.dataBlocksPerFile * self.objStructProcessing.blockSize + self.firstHeaderSize + self.basicHeaderSize*(self.objStructProcessing.dataBlocksPerFile - 1)
439
440
449 self.__sizeOfFileByHeader = self.objProcessingHeader.dataBlocksPerFile * self.objProcessingHeader.blockSize + self.firstHeaderSize + self.basicHeaderSize*(self.objProcessingHeader.dataBlocksPerFile - 1)
441 450
442 451 def __setNextFileOnline(self):
443 452 return 0
@@ -458,7 +467,7 class VoltageReader(DataReader):
458 467 fp = open(filename,'rb')
459 468
460 469 currentSize = fileSize - fp.tell()
461 neededSize = self.objStructProcessing.blockSize + self.firstHeaderSize
470 neededSize = self.objProcessingHeader.blockSize + self.firstHeaderSize
462 471
463 472 if (currentSize < neededSize):
464 473 continue
@@ -485,7 +494,7 class VoltageReader(DataReader):
485 494 def __setNewBlock(self):
486 495
487 496 currentSize = self.fileSize - self.__fp.tell()
488 neededSize = self.objStructProcessing.blockSize + self.basicHeaderSize
497 neededSize = self.objProcessingHeader.blockSize + self.basicHeaderSize
489 498
490 499 # Bloque Completo
491 500 if (currentSize >= neededSize):
@@ -495,7 +504,7 class VoltageReader(DataReader):
495 504 self.__setNextFile()
496 505 self.__readFirstHeader()
497 506
498 deltaTime = self.objStructShortHeader.utc - self.__lastUTTime # check this
507 deltaTime = self.objBasicHeader.utc - self.__lastUTTime # check this
499 508 if deltaTime > self.__maxTimeStep:
500 509 self.__flagResetProcessing = 1
501 510
@@ -508,11 +517,11 class VoltageReader(DataReader):
508 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 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 526 self.__buffer = data
518 527
@@ -524,10 +533,10 class VoltageReader(DataReader):
524 533
525 534 self.__readBlock()
526 535
527 self.__lastUTTime = self.objStructShortHeader.utc
536 self.__lastUTTime = self.objBasicHeader.utc
528 537
529 538 def __hasNotDataInBuffer(self):
530 if self.__buffer_id >= self.objStructProcessing.profilesPerBlock:
539 if self.__buffer_id >= self.objProcessingHeader.profilesPerBlock:
531 540 return 1
532 541
533 542 return 0
@@ -587,6 +596,6 class VoltageReader(DataReader):
587 596 self.endDoy = endDateTime.timetuple().tm_yday
588 597 #call fillHeaderValues() - to Data Object
589 598
590 self.__listOfPath = pathList
599 self.__pathList = pathList
591 600 self.filenameList = filenameList
592 601 self.online = online
General Comments 0
You need to be logged in to leave comments. Login now