##// END OF EJS Templates
merge jroio voltage
José Chávez -
r1056:7432ffb24da8
parent child
Show More
@@ -10,9 +10,6 from jroIO_base import LOCALTIME, JRODataReader, JRODataWriter
10 10 from schainpy.model.proc.jroproc_base import ProcessingUnit, Operation
11 11 from schainpy.model.data.jroheaderIO import PROCFLAG, BasicHeader, SystemHeader, RadarControllerHeader, ProcessingHeader
12 12 from schainpy.model.data.jrodata import Voltage
13 import zmq
14 import tempfile
15 from StringIO import StringIO
16 13 # from _sha import blocksize
17 14
18 15 class VoltageReader(JRODataReader, ProcessingUnit):
@@ -61,7 +58,7 class VoltageReader(JRODataReader, ProcessingUnit):
61 58 optchar = "D"
62 59 dataOut = None
63 60
64 def __init__(self, **kwargs):
61 def __init__(self):
65 62 """
66 63 Inicializador de la clase VoltageReader para la lectura de datos de voltage.
67 64
@@ -80,8 +77,8 class VoltageReader(JRODataReader, ProcessingUnit):
80 77 None
81 78 """
82 79
83 ProcessingUnit.__init__(self, **kwargs)
84 self.i = 0
80 ProcessingUnit.__init__(self)
81
85 82 self.isConfig = False
86 83
87 84 self.datablock = None
@@ -192,7 +189,6 class VoltageReader(JRODataReader, ProcessingUnit):
192 189 self.blocksize = pts2read
193 190
194 191
195
196 192 def readBlock(self):
197 193 """
198 194 readBlock lee el bloque de datos desde la posicion actual del puntero del archivo
@@ -216,16 +212,6 class VoltageReader(JRODataReader, ProcessingUnit):
216 212 Exceptions:
217 213 Si un bloque leido no es un bloque valido
218 214 """
219
220 # if self.server is not None:
221 # self.zBlock = self.receiver.recv()
222 # self.zHeader = self.zBlock[:24]
223 # self.zDataBlock = self.zBlock[24:]
224 # junk = numpy.fromstring(self.zDataBlock, numpy.dtype([('real','<i4'),('imag','<i4')]))
225 # self.processingHeaderObj.profilesPerBlock = 240
226 # self.processingHeaderObj.nHeights = 248
227 # self.systemHeaderObj.nChannels
228 # else:
229 215 current_pointer_location = self.fp.tell()
230 216 junk = numpy.fromfile( self.fp, self.dtype, self.blocksize )
231 217
@@ -262,8 +248,6 class VoltageReader(JRODataReader, ProcessingUnit):
262 248
263 249 self.dataOut.radarControllerHeaderObj = self.radarControllerHeaderObj.copy()
264 250
265 self.dataOut.processingHeaderObj = self.processingHeaderObj.copy()
266
267 251 if self.nTxs > 1:
268 252 self.dataOut.radarControllerHeaderObj.ippSeconds = self.radarControllerHeaderObj.ippSeconds/self.nTxs
269 253
@@ -317,97 +301,6 class VoltageReader(JRODataReader, ProcessingUnit):
317 301
318 302 return
319 303
320 def readFirstHeaderFromServer(self):
321
322 self.getFirstHeader()
323
324 self.firstHeaderSize = self.basicHeaderObj.size
325
326 datatype = int(numpy.log2((self.processingHeaderObj.processFlags & PROCFLAG.DATATYPE_MASK))-numpy.log2(PROCFLAG.DATATYPE_CHAR))
327 if datatype == 0:
328 datatype_str = numpy.dtype([('real','<i1'),('imag','<i1')])
329 elif datatype == 1:
330 datatype_str = numpy.dtype([('real','<i2'),('imag','<i2')])
331 elif datatype == 2:
332 datatype_str = numpy.dtype([('real','<i4'),('imag','<i4')])
333 elif datatype == 3:
334 datatype_str = numpy.dtype([('real','<i8'),('imag','<i8')])
335 elif datatype == 4:
336 datatype_str = numpy.dtype([('real','<f4'),('imag','<f4')])
337 elif datatype == 5:
338 datatype_str = numpy.dtype([('real','<f8'),('imag','<f8')])
339 else:
340 raise ValueError, 'Data type was not defined'
341
342 self.dtype = datatype_str
343 #self.ippSeconds = 2 * 1000 * self.radarControllerHeaderObj.ipp / self.c
344 self.fileSizeByHeader = self.processingHeaderObj.dataBlocksPerFile * self.processingHeaderObj.blockSize + self.firstHeaderSize + self.basicHeaderSize*(self.processingHeaderObj.dataBlocksPerFile - 1)
345 # self.dataOut.channelList = numpy.arange(self.systemHeaderObj.numChannels)
346 # self.dataOut.channelIndexList = numpy.arange(self.systemHeaderObj.numChannels)
347 self.getBlockDimension()
348
349
350 def getFromServer(self):
351 self.flagDiscontinuousBlock = 0
352 self.profileIndex = 0
353 self.flagIsNewBlock = 1
354 self.dataOut.flagNoData = False
355 self.nTotalBlocks += 1
356 self.nReadBlocks += 1
357 self.blockPointer = 0
358
359 block = self.receiver.recv()
360
361 self.basicHeaderObj.read(block[self.blockPointer:])
362 self.blockPointer += self.basicHeaderObj.length
363 self.systemHeaderObj.read(block[self.blockPointer:])
364 self.blockPointer += self.systemHeaderObj.length
365 self.radarControllerHeaderObj.read(block[self.blockPointer:])
366 self.blockPointer += self.radarControllerHeaderObj.length
367 self.processingHeaderObj.read(block[self.blockPointer:])
368 self.blockPointer += self.processingHeaderObj.length
369 self.readFirstHeaderFromServer()
370
371 timestamp = self.basicHeaderObj.get_datatime()
372 print '[Reading] - Block {} - {}'.format(self.nTotalBlocks, timestamp)
373 current_pointer_location = self.blockPointer
374 junk = numpy.fromstring( block[self.blockPointer:], self.dtype, self.blocksize )
375
376 try:
377 junk = junk.reshape( (self.processingHeaderObj.profilesPerBlock, self.processingHeaderObj.nHeights, self.systemHeaderObj.nChannels) )
378 except:
379 #print "The read block (%3d) has not enough data" %self.nReadBlocks
380 if self.waitDataBlock(pointer_location=current_pointer_location):
381 junk = numpy.fromstring( block[self.blockPointer:], self.dtype, self.blocksize )
382 junk = junk.reshape( (self.processingHeaderObj.profilesPerBlock, self.processingHeaderObj.nHeights, self.systemHeaderObj.nChannels) )
383 # return 0
384
385 #Dimensions : nChannels, nProfiles, nSamples
386
387 junk = numpy.transpose(junk, (2,0,1))
388 self.datablock = junk['real'] + junk['imag'] * 1j
389 self.profileIndex = 0
390 if self.selBlocksize == None: self.selBlocksize = self.dataOut.nProfiles
391 if self.selBlocktime != None:
392 if self.dataOut.nCohInt is not None:
393 nCohInt = self.dataOut.nCohInt
394 else:
395 nCohInt = 1
396 self.selBlocksize = int(self.dataOut.nProfiles*round(self.selBlocktime/(nCohInt*self.dataOut.ippSeconds*self.dataOut.nProfiles)))
397 self.dataOut.data = self.datablock[:,self.profileIndex:self.profileIndex+self.selBlocksize,:]
398 datasize = self.dataOut.data.shape[1]
399 if datasize < self.selBlocksize:
400 buffer = numpy.zeros((self.dataOut.data.shape[0], self.selBlocksize, self.dataOut.data.shape[2]), dtype = 'complex')
401 buffer[:,:datasize,:] = self.dataOut.data
402 self.dataOut.data = buffer
403 self.profileIndex = blockIndex
404
405 self.dataOut.flagDataAsBlock = True
406 self.flagIsNewBlock = 1
407 self.dataOut.realtime = self.online
408
409 return self.dataOut.data
410
411 304 def getData(self):
412 305 """
413 306 getData obtiene una unidad de datos del buffer de lectura, un perfil, y la copia al objeto self.dataOut
@@ -444,19 +337,24 class VoltageReader(JRODataReader, ProcessingUnit):
444 337 self.flagDiscontinuousBlock
445 338 self.flagIsNewBlock
446 339 """
340
447 341 if self.flagNoMoreFiles:
448 342 self.dataOut.flagNoData = True
449 343 print 'Process finished'
450 344 return 0
345
451 346 self.flagDiscontinuousBlock = 0
452 347 self.flagIsNewBlock = 0
348
453 349 if self.__hasNotDataInBuffer():
350
454 351 if not( self.readNextBlock() ):
455 352 return 0
456 353
457 354 self.getFirstHeader()
458 355
459 356 self.reshapeData()
357
460 358 if self.datablock is None:
461 359 self.dataOut.flagNoData = True
462 360 return 0
@@ -547,7 +445,7 class VoltageWriter(JRODataWriter, Operation):
547 445 shapeBuffer = None
548 446
549 447
550 def __init__(self, **kwargs):
448 def __init__(self):
551 449 """
552 450 Inicializador de la clase VoltageWriter para la escritura de datos de espectros.
553 451
@@ -556,7 +454,7 class VoltageWriter(JRODataWriter, Operation):
556 454
557 455 Return: None
558 456 """
559 Operation.__init__(self, **kwargs)
457 Operation.__init__(self)
560 458
561 459 self.nTotalBlocks = 0
562 460
General Comments 0
You need to be logged in to leave comments. Login now