@@ -101,4 +101,8 ENV/ | |||||
101 | .project |
|
101 | .project | |
102 | .pydevproject |
|
102 | .pydevproject | |
103 |
|
103 | |||
|
104 | # vscode | |||
|
105 | ||||
|
106 | .vscode | |||
|
107 | ||||
104 | schainpy/scripts/ No newline at end of file |
|
108 | schainpy/scripts/ |
@@ -1,3 +1,4 | |||||
1 | { |
|
1 | { | |
2 | "python.linting.pylintEnabled": true |
|
2 | "python.linting.pylintEnabled": true, | |
|
3 | "git.ignoreLimitWarning": true | |||
3 | } No newline at end of file |
|
4 | } |
@@ -132,18 +132,17 class BasicHeader(Header): | |||||
132 |
|
132 | |||
133 | def read(self, fp): |
|
133 | def read(self, fp): | |
134 |
|
134 | |||
|
135 | self.length = 0 | |||
135 | try: |
|
136 | try: | |
136 | if hasattr(fp, 'read'): |
|
137 | if hasattr(fp, 'read'): | |
137 | print 'fromfile' |
|
|||
138 | header = numpy.fromfile(fp, BASIC_STRUCTURE,1) |
|
138 | header = numpy.fromfile(fp, BASIC_STRUCTURE,1) | |
139 | else: |
|
139 | else: | |
140 | print 'fromstring' |
|
|||
141 | header = numpy.fromstring(fp, BASIC_STRUCTURE,1) |
|
140 | header = numpy.fromstring(fp, BASIC_STRUCTURE,1) | |
142 | except Exception, e: |
|
141 | except Exception, e: | |
143 | print "BasicHeader: " |
|
142 | print "BasicHeader: " | |
144 | print e |
|
143 | print e | |
145 | return 0 |
|
144 | return 0 | |
146 |
|
145 | |||
147 | self.size = int(header['nSize'][0]) |
|
146 | self.size = int(header['nSize'][0]) | |
148 | self.version = int(header['nVersion'][0]) |
|
147 | self.version = int(header['nVersion'][0]) | |
149 | self.dataBlock = int(header['nDataBlockId'][0]) |
|
148 | self.dataBlock = int(header['nDataBlockId'][0]) | |
@@ -155,7 +154,8 class BasicHeader(Header): | |||||
155 |
|
154 | |||
156 | if self.size < 24: |
|
155 | if self.size < 24: | |
157 | return 0 |
|
156 | return 0 | |
158 |
|
157 | |||
|
158 | self.length = header.nbytes | |||
159 | return 1 |
|
159 | return 1 | |
160 |
|
160 | |||
161 | def write(self, fp): |
|
161 | def write(self, fp): | |
@@ -200,13 +200,20 class SystemHeader(Header): | |||||
200 | self.pciDioBusWidth = pciDioBusWith |
|
200 | self.pciDioBusWidth = pciDioBusWith | |
201 |
|
201 | |||
202 | def read(self, fp): |
|
202 | def read(self, fp): | |
203 |
|
203 | self.length = 0 | ||
204 | startFp = fp.tell() |
|
|||
205 |
|
||||
206 | try: |
|
204 | try: | |
207 | header = numpy.fromfile(fp,SYSTEM_STRUCTURE,1) |
|
205 | startFp = fp.tell() | |
208 | except Exception, e: |
|
206 | except Exception, e: | |
209 | print "System Header: " + e |
|
207 | startFp = None | |
|
208 | pass | |||
|
209 | ||||
|
210 | try: | |||
|
211 | if hasattr(fp, 'read'): | |||
|
212 | header = numpy.fromfile(fp, SYSTEM_STRUCTURE,1) | |||
|
213 | else: | |||
|
214 | header = numpy.fromstring(fp, SYSTEM_STRUCTURE,1) | |||
|
215 | except Exception, e: | |||
|
216 | print "System Header: " + str(e) | |||
210 | return 0 |
|
217 | return 0 | |
211 |
|
218 | |||
212 | self.size = header['nSize'][0] |
|
219 | self.size = header['nSize'][0] | |
@@ -216,16 +223,19 class SystemHeader(Header): | |||||
216 | self.adcResolution = header['nADCResolution'][0] |
|
223 | self.adcResolution = header['nADCResolution'][0] | |
217 | self.pciDioBusWidth = header['nPCDIOBusWidth'][0] |
|
224 | self.pciDioBusWidth = header['nPCDIOBusWidth'][0] | |
218 |
|
225 | |||
219 | endFp = self.size + startFp |
|
|||
220 |
|
226 | |||
221 | if fp.tell() > endFp: |
|
227 | if startFp is not None: | |
222 | sys.stderr.write("Warning %s: Size value read from System Header is lower than it has to be\n" %fp.name) |
|
228 | endFp = self.size + startFp | |
223 | return 0 |
|
|||
224 |
|
229 | |||
225 |
if fp.tell() |
|
230 | if fp.tell() > endFp: | |
226 |
sys.stderr.write("Warning %s: Size value read from System Header |
|
231 | sys.stderr.write("Warning %s: Size value read from System Header is lower than it has to be\n" %fp.name) | |
227 | return 0 |
|
232 | return 0 | |
|
233 | ||||
|
234 | if fp.tell() < endFp: | |||
|
235 | sys.stderr.write("Warning %s: Size value read from System Header size is greater than it has to be\n" %fp.name) | |||
|
236 | return 0 | |||
228 |
|
237 | |||
|
238 | self.length = header.nbytes | |||
229 | return 1 |
|
239 | return 1 | |
230 |
|
240 | |||
231 | def write(self, fp): |
|
241 | def write(self, fp): | |
@@ -302,13 +312,21 class RadarControllerHeader(Header): | |||||
302 | self.fClock = 0.15/(deltaHeight*1e-6) #0.15Km / (height * 1u) |
|
312 | self.fClock = 0.15/(deltaHeight*1e-6) #0.15Km / (height * 1u) | |
303 |
|
313 | |||
304 | def read(self, fp): |
|
314 | def read(self, fp): | |
305 |
|
315 | self.length = 0 | ||
306 |
|
||||
307 | startFp = fp.tell() |
|
|||
308 | try: |
|
316 | try: | |
309 | header = numpy.fromfile(fp,RADAR_STRUCTURE,1) |
|
317 | startFp = fp.tell() | |
310 | except Exception, e: |
|
318 | except Exception, e: | |
311 | print "RadarControllerHeader: " + e |
|
319 | startFp = None | |
|
320 | pass | |||
|
321 | ||||
|
322 | try: | |||
|
323 | if hasattr(fp, 'read'): | |||
|
324 | header = numpy.fromfile(fp, RADAR_STRUCTURE,1) | |||
|
325 | else: | |||
|
326 | header = numpy.fromstring(fp, RADAR_STRUCTURE,1) | |||
|
327 | self.length += header.nbytes | |||
|
328 | except Exception, e: | |||
|
329 | print "RadarControllerHeader: " + str(e) | |||
312 | return 0 |
|
330 | return 0 | |
313 |
|
331 | |||
314 | size = int(header['nSize'][0]) |
|
332 | size = int(header['nSize'][0]) | |
@@ -329,23 +347,64 class RadarControllerHeader(Header): | |||||
329 | self.rangeTxA = header['sRangeTxA'][0] |
|
347 | self.rangeTxA = header['sRangeTxA'][0] | |
330 | self.rangeTxB = header['sRangeTxB'][0] |
|
348 | self.rangeTxB = header['sRangeTxB'][0] | |
331 |
|
349 | |||
332 | samplingWindow = numpy.fromfile(fp,SAMPLING_STRUCTURE,self.nWindows) |
|
350 | try: | |
333 |
|
351 | if hasattr(fp, 'read'): | ||
|
352 | samplingWindow = numpy.fromfile(fp, SAMPLING_STRUCTURE, self.nWindows) | |||
|
353 | else: | |||
|
354 | samplingWindow = numpy.fromstring(fp[self.length:], SAMPLING_STRUCTURE, self.nWindows) | |||
|
355 | self.length += samplingWindow.nbytes | |||
|
356 | except Exception, e: | |||
|
357 | print "RadarControllerHeader: " + str(e) | |||
|
358 | return 0 | |||
334 | self.nHeights = int(numpy.sum(samplingWindow['nsa'])) |
|
359 | self.nHeights = int(numpy.sum(samplingWindow['nsa'])) | |
335 | self.firstHeight = samplingWindow['h0'] |
|
360 | self.firstHeight = samplingWindow['h0'] | |
336 | self.deltaHeight = samplingWindow['dh'] |
|
361 | self.deltaHeight = samplingWindow['dh'] | |
337 | self.samplesWin = samplingWindow['nsa'] |
|
362 | self.samplesWin = samplingWindow['nsa'] | |
|
363 | ||||
|
364 | ||||
|
365 | ||||
|
366 | try: | |||
|
367 | if hasattr(fp, 'read'): | |||
|
368 | self.Taus = numpy.fromfile(fp, '<f4', self.numTaus) | |||
|
369 | else: | |||
|
370 | self.Taus = numpy.fromstring(fp[self.length:], '<f4', self.numTaus) | |||
|
371 | self.length += self.Taus.nbytes | |||
|
372 | except Exception, e: | |||
|
373 | print "RadarControllerHeader: " + str(e) | |||
|
374 | return 0 | |||
|
375 | ||||
338 |
|
376 | |||
339 | self.Taus = numpy.fromfile(fp,'<f4',self.numTaus) |
|
|||
340 |
|
377 | |||
341 | self.code_size = 0 |
|
378 | self.code_size = 0 | |
342 | if self.codeType != 0: |
|
379 | if self.codeType != 0: | |
343 | self.nCode = int(numpy.fromfile(fp,'<u4',1)) |
|
|||
344 | self.nBaud = int(numpy.fromfile(fp,'<u4',1)) |
|
|||
345 |
|
380 | |||
|
381 | try: | |||
|
382 | if hasattr(fp, 'read'): | |||
|
383 | self.nCode = numpy.fromfile(fp, '<u4', 1) | |||
|
384 | self.length += self.nCode.nbytes | |||
|
385 | self.nBaud = numpy.fromfile(fp, '<u4', 1) | |||
|
386 | self.length += self.nBaud.nbytes | |||
|
387 | else: | |||
|
388 | self.nCode = numpy.fromstring(fp[self.length:], '<u4', 1)[0] | |||
|
389 | self.length += self.nCode.nbytes | |||
|
390 | self.nBaud = numpy.fromstring(fp[self.length:], '<u4', 1)[0] | |||
|
391 | self.length += self.nBaud.nbytes | |||
|
392 | except Exception, e: | |||
|
393 | print "RadarControllerHeader: " + str(e) | |||
|
394 | return 0 | |||
346 | code = numpy.empty([self.nCode,self.nBaud],dtype='i1') |
|
395 | code = numpy.empty([self.nCode,self.nBaud],dtype='i1') | |
|
396 | ||||
347 | for ic in range(self.nCode): |
|
397 | for ic in range(self.nCode): | |
348 | temp = numpy.fromfile(fp,'u4',int(numpy.ceil(self.nBaud/32.))) |
|
398 | try: | |
|
399 | if hasattr(fp, 'read'): | |||
|
400 | temp = numpy.fromfile(fp,'u4', int(numpy.ceil(self.nBaud/32.))) | |||
|
401 | else: | |||
|
402 | temp = numpy.fromstring(fp,'u4', int(numpy.ceil(self.nBaud/32.))) | |||
|
403 | self.length += temp.nbytes | |||
|
404 | except Exception, e: | |||
|
405 | print "RadarControllerHeader: " + str(e) | |||
|
406 | return 0 | |||
|
407 | ||||
349 | for ib in range(self.nBaud-1,-1,-1): |
|
408 | for ib in range(self.nBaud-1,-1,-1): | |
350 | code[ic,ib] = temp[ib/32]%2 |
|
409 | code[ic,ib] = temp[ib/32]%2 | |
351 | temp[ib/32] = temp[ib/32]/2 |
|
410 | temp[ib/32] = temp[ib/32]/2 | |
@@ -358,22 +417,22 class RadarControllerHeader(Header): | |||||
358 | # |
|
417 | # | |
359 | # if self.line6Function == RCfunction.FLIP: |
|
418 | # if self.line6Function == RCfunction.FLIP: | |
360 | # self.flip2 = numpy.fromfile(fp,'<u4',1) |
|
419 | # self.flip2 = numpy.fromfile(fp,'<u4',1) | |
361 |
|
420 | if startFp is not None: | ||
362 | endFp = size + startFp |
|
421 | endFp = size + startFp | |
363 |
|
||||
364 | if fp.tell() != endFp: |
|
|||
365 | # fp.seek(endFp) |
|
|||
366 | print "%s: Radar Controller Header size is not consistent: from data [%d] != from header field [%d]" %(fp.name, fp.tell()-startFp, size) |
|
|||
367 | # return 0 |
|
|||
368 |
|
||||
369 | if fp.tell() > endFp: |
|
|||
370 | sys.stderr.write("Warning %s: Size value read from Radar Controller header is lower than it has to be\n" %fp.name) |
|
|||
371 | # return 0 |
|
|||
372 |
|
||||
373 | if fp.tell() < endFp: |
|
|||
374 | sys.stderr.write("Warning %s: Size value read from Radar Controller header is greater than it has to be\n" %fp.name) |
|
|||
375 |
|
422 | |||
|
423 | if fp.tell() != endFp: | |||
|
424 | # fp.seek(endFp) | |||
|
425 | print "%s: Radar Controller Header size is not consistent: from data [%d] != from header field [%d]" %(fp.name, fp.tell()-startFp, size) | |||
|
426 | # return 0 | |||
|
427 | ||||
|
428 | if fp.tell() > endFp: | |||
|
429 | sys.stderr.write("Warning %s: Size value read from Radar Controller header is lower than it has to be\n" %fp.name) | |||
|
430 | # return 0 | |||
|
431 | ||||
|
432 | if fp.tell() < endFp: | |||
|
433 | sys.stderr.write("Warning %s: Size value read from Radar Controller header is greater than it has to be\n" %fp.name) | |||
376 |
|
434 | |||
|
435 | ||||
377 | return 1 |
|
436 | return 1 | |
378 |
|
437 | |||
379 | def write(self, fp): |
|
438 | def write(self, fp): | |
@@ -512,15 +571,23 class ProcessingHeader(Header): | |||||
512 | self.flag_cspc = False |
|
571 | self.flag_cspc = False | |
513 | self.flag_decode = False |
|
572 | self.flag_decode = False | |
514 | self.flag_deflip = False |
|
573 | self.flag_deflip = False | |
515 |
|
574 | self.length = 0 | ||
516 | def read(self, fp): |
|
575 | def read(self, fp): | |
517 |
|
576 | self.length = 0 | ||
518 | startFp = fp.tell() |
|
577 | try: | |
|
578 | startFp = fp.tell() | |||
|
579 | except Exception, e: | |||
|
580 | startFp = None | |||
|
581 | pass | |||
519 |
|
582 | |||
520 | try: |
|
583 | try: | |
521 | header = numpy.fromfile(fp,PROCESSING_STRUCTURE,1) |
|
584 | if hasattr(fp, 'read'): | |
|
585 | header = numpy.fromfile(fp, PROCESSING_STRUCTURE, 1) | |||
|
586 | else: | |||
|
587 | header = numpy.fromstring(fp, PROCESSING_STRUCTURE, 1) | |||
|
588 | self.length += header.nbytes | |||
522 | except Exception, e: |
|
589 | except Exception, e: | |
523 | print "ProcessingHeader: " + e |
|
590 | print "ProcessingHeader: " + str(e) | |
524 | return 0 |
|
591 | return 0 | |
525 |
|
592 | |||
526 | size = int(header['nSize'][0]) |
|
593 | size = int(header['nSize'][0]) | |
@@ -534,14 +601,31 class ProcessingHeader(Header): | |||||
534 | self.nIncohInt = int(header['nIncoherentIntegrations'][0]) |
|
601 | self.nIncohInt = int(header['nIncoherentIntegrations'][0]) | |
535 | self.totalSpectra = int(header['nTotalSpectra'][0]) |
|
602 | self.totalSpectra = int(header['nTotalSpectra'][0]) | |
536 |
|
603 | |||
537 | samplingWindow = numpy.fromfile(fp,SAMPLING_STRUCTURE,self.nWindows) |
|
604 | try: | |
|
605 | if hasattr(fp, 'read'): | |||
|
606 | samplingWindow = numpy.fromfile(fp, SAMPLING_STRUCTURE, self.nWindows) | |||
|
607 | else: | |||
|
608 | samplingWindow = numpy.fromstring(fp[self.length:], SAMPLING_STRUCTURE, self.nWindows) | |||
|
609 | self.length += samplingWindow.nbytes | |||
|
610 | except Exception, e: | |||
|
611 | print "ProcessingHeader: " + str(e) | |||
|
612 | return 0 | |||
538 |
|
613 | |||
539 | self.nHeights = int(numpy.sum(samplingWindow['nsa'])) |
|
614 | self.nHeights = int(numpy.sum(samplingWindow['nsa'])) | |
540 | self.firstHeight = float(samplingWindow['h0'][0]) |
|
615 | self.firstHeight = float(samplingWindow['h0'][0]) | |
541 | self.deltaHeight = float(samplingWindow['dh'][0]) |
|
616 | self.deltaHeight = float(samplingWindow['dh'][0]) | |
542 | self.samplesWin = samplingWindow['nsa'][0] |
|
617 | self.samplesWin = samplingWindow['nsa'][0] | |
543 |
|
618 | |||
544 | self.spectraComb = numpy.fromfile(fp,'u1',2*self.totalSpectra) |
|
619 | ||
|
620 | try: | |||
|
621 | if hasattr(fp, 'read'): | |||
|
622 | self.spectraComb = numpy.fromfile(fp, 'u1', 2*self.totalSpectra) | |||
|
623 | else: | |||
|
624 | self.spectraComb = numpy.fromstring(fp[self.length:], 'u1', 2*self.totalSpectra) | |||
|
625 | self.length += self.spectraComb.nbytes | |||
|
626 | except Exception, e: | |||
|
627 | print "ProcessingHeader: " + str(e) | |||
|
628 | return 0 | |||
545 |
|
629 | |||
546 | if ((self.processFlags & PROCFLAG.DEFINE_PROCESS_CODE) == PROCFLAG.DEFINE_PROCESS_CODE): |
|
630 | if ((self.processFlags & PROCFLAG.DEFINE_PROCESS_CODE) == PROCFLAG.DEFINE_PROCESS_CODE): | |
547 | self.nCode = int(numpy.fromfile(fp,'<u4',1)) |
|
631 | self.nCode = int(numpy.fromfile(fp,'<u4',1)) | |
@@ -587,14 +671,16 class ProcessingHeader(Header): | |||||
587 | if nPairs > 0: |
|
671 | if nPairs > 0: | |
588 | self.flag_cspc = True |
|
672 | self.flag_cspc = True | |
589 |
|
673 | |||
590 | endFp = size + startFp |
|
|||
591 |
|
674 | |||
592 | if fp.tell() > endFp: |
|
675 | ||
593 | sys.stderr.write("Warning: Processing header size is lower than it has to be") |
|
676 | if startFp is not None: | |
594 | return 0 |
|
677 | endFp = size + startFp | |
595 |
|
678 | if fp.tell() > endFp: | ||
596 | if fp.tell() < endFp: |
|
679 | sys.stderr.write("Warning: Processing header size is lower than it has to be") | |
597 | sys.stderr.write("Warning: Processing header size is greater than it is considered") |
|
680 | return 0 | |
|
681 | ||||
|
682 | if fp.tell() < endFp: | |||
|
683 | sys.stderr.write("Warning: Processing header size is greater than it is considered") | |||
598 |
|
684 | |||
599 | return 1 |
|
685 | return 1 | |
600 |
|
686 |
@@ -13,8 +13,8 class Scope(Figure): | |||||
13 |
|
13 | |||
14 | isConfig = None |
|
14 | isConfig = None | |
15 |
|
15 | |||
16 | def __init__(self): |
|
16 | def __init__(self, **kwargs): | |
17 |
|
17 | Figure.__init__(self, **kwargs) | ||
18 | self.isConfig = False |
|
18 | self.isConfig = False | |
19 | self.WIDTH = 300 |
|
19 | self.WIDTH = 300 | |
20 | self.HEIGHT = 200 |
|
20 | self.HEIGHT = 200 |
@@ -994,9 +994,9 class JRODataReader(JRODataIO): | |||||
994 | self.__isFirstTimeOnline = 0 |
|
994 | self.__isFirstTimeOnline = 0 | |
995 |
|
995 | |||
996 | def __setNewBlock(self): |
|
996 | def __setNewBlock(self): | |
997 | if self.server is None: |
|
997 | #if self.server is None: | |
998 |
|
|
998 | if self.fp == None: | |
999 |
|
|
999 | return 0 | |
1000 |
|
1000 | |||
1001 | # if self.online: |
|
1001 | # if self.online: | |
1002 | # self.__jumpToLastBlock() |
|
1002 | # self.__jumpToLastBlock() | |
@@ -1013,23 +1013,23 class JRODataReader(JRODataIO): | |||||
1013 | else: |
|
1013 | else: | |
1014 | return 1 |
|
1014 | return 1 | |
1015 | print 'xxxx' |
|
1015 | print 'xxxx' | |
1016 | if self.server is None: |
|
1016 | #if self.server is None: | |
1017 |
|
|
1017 | currentSize = self.fileSize - self.fp.tell() | |
1018 |
|
|
1018 | neededSize = self.processingHeaderObj.blockSize + self.basicHeaderSize | |
1019 |
|
|
1019 | if (currentSize >= neededSize): | |
1020 |
|
|
1020 | self.basicHeaderObj.read(self.fp) | |
1021 | self.lastUTTime = self.basicHeaderObj.utc |
|
|||
1022 | return 1 |
|
|||
1023 | else: |
|
|||
1024 | self.basicHeaderObj.read(self.zHeader) |
|
|||
1025 | self.lastUTTime = self.basicHeaderObj.utc |
|
1021 | self.lastUTTime = self.basicHeaderObj.utc | |
1026 | return 1 |
|
1022 | return 1 | |
|
1023 | # else: | |||
|
1024 | # self.basicHeaderObj.read(self.zHeader) | |||
|
1025 | # self.lastUTTime = self.basicHeaderObj.utc | |||
|
1026 | # return 1 | |||
1027 | if self.__waitNewBlock(): |
|
1027 | if self.__waitNewBlock(): | |
1028 | self.lastUTTime = self.basicHeaderObj.utc |
|
1028 | self.lastUTTime = self.basicHeaderObj.utc | |
1029 | return 1 |
|
1029 | return 1 | |
1030 | if self.server is None: |
|
1030 | #if self.server is None: | |
1031 |
|
|
1031 | if not(self.setNextFile()): | |
1032 |
|
|
1032 | return 0 | |
1033 |
|
1033 | |||
1034 | deltaTime = self.basicHeaderObj.utc - self.lastUTTime # |
|
1034 | deltaTime = self.basicHeaderObj.utc - self.lastUTTime # | |
1035 | self.lastUTTime = self.basicHeaderObj.utc |
|
1035 | self.lastUTTime = self.basicHeaderObj.utc | |
@@ -1290,7 +1290,7 class JRODataReader(JRODataIO): | |||||
1290 | self.server = address |
|
1290 | self.server = address | |
1291 | self.context = zmq.Context() |
|
1291 | self.context = zmq.Context() | |
1292 | self.receiver = self.context.socket(zmq.PULL) |
|
1292 | self.receiver = self.context.socket(zmq.PULL) | |
1293 |
self.receiver. |
|
1293 | self.receiver.connect(self.server) | |
1294 | time.sleep(0.5) |
|
1294 | time.sleep(0.5) | |
1295 | print '[Starting] ReceiverData from {}'.format(self.server) |
|
1295 | print '[Starting] ReceiverData from {}'.format(self.server) | |
1296 | else: |
|
1296 | else: | |
@@ -1503,8 +1503,10 class JRODataReader(JRODataIO): | |||||
1503 | server=server, |
|
1503 | server=server, | |
1504 | verbose=verbose) |
|
1504 | verbose=verbose) | |
1505 | self.isConfig = True |
|
1505 | self.isConfig = True | |
1506 | print 'hola' |
|
1506 | if server is None: | |
1507 | self.getData() |
|
1507 | self.getData() | |
|
1508 | else: | |||
|
1509 | self.getFromServer() | |||
1508 |
|
1510 | |||
1509 | class JRODataWriter(JRODataIO): |
|
1511 | class JRODataWriter(JRODataIO): | |
1510 |
|
1512 |
@@ -11,6 +11,8 from schainpy.model.proc.jroproc_base import ProcessingUnit, Operation | |||||
11 | from schainpy.model.data.jroheaderIO import PROCFLAG, BasicHeader, SystemHeader, RadarControllerHeader, ProcessingHeader |
|
11 | from schainpy.model.data.jroheaderIO import PROCFLAG, BasicHeader, SystemHeader, RadarControllerHeader, ProcessingHeader | |
12 | from schainpy.model.data.jrodata import Voltage |
|
12 | from schainpy.model.data.jrodata import Voltage | |
13 | import zmq |
|
13 | import zmq | |
|
14 | import tempfile | |||
|
15 | from StringIO import StringIO | |||
14 | # from _sha import blocksize |
|
16 | # from _sha import blocksize | |
15 |
|
17 | |||
16 | class VoltageReader(JRODataReader, ProcessingUnit): |
|
18 | class VoltageReader(JRODataReader, ProcessingUnit): | |
@@ -216,17 +218,17 class VoltageReader(JRODataReader, ProcessingUnit): | |||||
216 | """ |
|
218 | """ | |
217 |
|
219 | |||
218 | print 'READ BLOCK' |
|
220 | print 'READ BLOCK' | |
219 | if self.server is not None: |
|
221 | # if self.server is not None: | |
220 | self.zBlock = self.receiver.recv() |
|
222 | # self.zBlock = self.receiver.recv() | |
221 | self.zHeader = self.zBlock[:24] |
|
223 | # self.zHeader = self.zBlock[:24] | |
222 | self.zDataBlock = self.zBlock[24:] |
|
224 | # self.zDataBlock = self.zBlock[24:] | |
223 | junk = numpy.fromstring(self.zDataBlock, numpy.dtype([('real','<i4'),('imag','<i4')])) |
|
225 | # junk = numpy.fromstring(self.zDataBlock, numpy.dtype([('real','<i4'),('imag','<i4')])) | |
224 | self.processingHeaderObj.profilesPerBlock = 240 |
|
226 | # self.processingHeaderObj.profilesPerBlock = 240 | |
225 | self.processingHeaderObj.nHeights = 248 |
|
227 | # self.processingHeaderObj.nHeights = 248 | |
226 | self.systemHeaderObj.nChannels |
|
228 | # self.systemHeaderObj.nChannels | |
227 | else: |
|
229 | # else: | |
228 |
|
|
230 | current_pointer_location = self.fp.tell() | |
229 |
|
|
231 | junk = numpy.fromfile( self.fp, self.dtype, self.blocksize ) | |
230 |
|
232 | |||
231 | try: |
|
233 | try: | |
232 | junk = junk.reshape( (self.processingHeaderObj.profilesPerBlock, self.processingHeaderObj.nHeights, self.systemHeaderObj.nChannels) ) |
|
234 | junk = junk.reshape( (self.processingHeaderObj.profilesPerBlock, self.processingHeaderObj.nHeights, self.systemHeaderObj.nChannels) ) | |
@@ -315,6 +317,97 class VoltageReader(JRODataReader, ProcessingUnit): | |||||
315 |
|
317 | |||
316 | return |
|
318 | return | |
317 |
|
319 | |||
|
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 | ||||
318 | def getData(self): |
|
411 | def getData(self): | |
319 | """ |
|
412 | """ | |
320 | getData obtiene una unidad de datos del buffer de lectura, un perfil, y la copia al objeto self.dataOut |
|
413 | getData obtiene una unidad de datos del buffer de lectura, un perfil, y la copia al objeto self.dataOut | |
@@ -351,24 +444,19 class VoltageReader(JRODataReader, ProcessingUnit): | |||||
351 | self.flagDiscontinuousBlock |
|
444 | self.flagDiscontinuousBlock | |
352 | self.flagIsNewBlock |
|
445 | self.flagIsNewBlock | |
353 | """ |
|
446 | """ | |
354 | print 1 |
|
|||
355 | if self.flagNoMoreFiles: |
|
447 | if self.flagNoMoreFiles: | |
356 | self.dataOut.flagNoData = True |
|
448 | self.dataOut.flagNoData = True | |
357 | print 'Process finished' |
|
449 | print 'Process finished' | |
358 | return 0 |
|
450 | return 0 | |
359 | print 2 |
|
|||
360 | self.flagDiscontinuousBlock = 0 |
|
451 | self.flagDiscontinuousBlock = 0 | |
361 | self.flagIsNewBlock = 0 |
|
452 | self.flagIsNewBlock = 0 | |
362 | print 3 |
|
|||
363 | if self.__hasNotDataInBuffer(): |
|
453 | if self.__hasNotDataInBuffer(): | |
364 |
|
||||
365 | if not( self.readNextBlock() ): |
|
454 | if not( self.readNextBlock() ): | |
366 | return 0 |
|
455 | return 0 | |
367 |
|
456 | |||
368 | self.getFirstHeader() |
|
457 | self.getFirstHeader() | |
369 |
|
458 | |||
370 | self.reshapeData() |
|
459 | self.reshapeData() | |
371 | print 4 |
|
|||
372 | if self.datablock is None: |
|
460 | if self.datablock is None: | |
373 | self.dataOut.flagNoData = True |
|
461 | self.dataOut.flagNoData = True | |
374 | return 0 |
|
462 | return 0 |
@@ -513,10 +513,10 class CohInt(Operation): | |||||
513 | self.__dataReady = True |
|
513 | self.__dataReady = True | |
514 | return avgdata, avgdatatime |
|
514 | return avgdata, avgdatatime | |
515 |
|
515 | |||
516 | def run(self, dataOut, **kwargs): |
|
516 | ||
517 |
|
517 | def run(self, dataOut, n=None, timeInterval=None, overlapping=False, byblock=False, **kwargs): | ||
518 | if not self.isConfig: |
|
518 | if not self.isConfig: | |
519 | self.setup(**kwargs) |
|
519 | self.setup(n=n, timeInterval=timeInterval, overlapping=overlapping, byblock=byblock, **kwargs) | |
520 | self.isConfig = True |
|
520 | self.isConfig = True | |
521 |
|
521 | |||
522 | if dataOut.flagDataAsBlock: |
|
522 | if dataOut.flagDataAsBlock: |
@@ -1,1 +1,1 | |||||
1 | <Project description="test" id="191" name="john"><ReadUnit datatype="VoltageReader" id="1911" inputId="0" name="VoltageReader"><Operation id="19111" name="run" priority="1" type="self"><Parameter format="str" id="191111" name="server" value="john" /></Operation></ReadUnit><ProcUnit datatype="SpectraProc" id="1912" inputId="1911" name="SpectraProc"><Operation id="19121" name="run" priority="1" type="self"><Parameter format="int" id="191211" name="nFFTPoints" value="64" /></Operation><Operation id="19122" name="SpectraPlot" priority="2" type="other"><Parameter format="int" id="191221" name="id" value="500" /><Parameter format="str" id="191222" name="wintitle" value="Jicamarca Radio Observatory" /><Parameter format="int" id="191223" name="showprofile" value="0" /></Operation></ProcUnit></Project> No newline at end of file |
|
1 | <Project description="test" id="191" name="john"><ReadUnit datatype="VoltageReader" id="1911" inputId="0" name="VoltageReader"><Operation id="19111" name="run" priority="1" type="self"><Parameter format="str" id="191111" name="server" value="tcp://10.10.10.121:5555" /></Operation></ReadUnit><ProcUnit datatype="VoltageProc" id="1912" inputId="1911" name="VoltageProc"><Operation id="19121" name="run" priority="1" type="self" /></ProcUnit></Project> No newline at end of file |
General Comments 0
You need to be logged in to leave comments.
Login now