|
@@
-4,6
+4,13
Created on Jul 3, 2014
|
|
4
|
|
|
4
|
|
|
5
|
@author: roj-idl71
|
|
5
|
@author: roj-idl71
|
|
6
|
'''
|
|
6
|
'''
|
|
|
|
|
7
|
# SUBCHANNELS EN VEZ DE CHANNELS
|
|
|
|
|
8
|
# BENCHMARKS -> PROBLEMAS CON ARCHIVOS GRANDES -> INCONSTANTE EN EL TIEMPO
|
|
|
|
|
9
|
# ACTUALIZACION DE VERSION
|
|
|
|
|
10
|
# HEADERS
|
|
|
|
|
11
|
# MODULO DE ESCRITURA
|
|
|
|
|
12
|
# METADATA
|
|
|
|
|
13
|
|
|
7
|
import os
|
|
14
|
import os
|
|
8
|
import datetime
|
|
15
|
import datetime
|
|
9
|
import numpy
|
|
16
|
import numpy
|
|
@@
-49,6
+56,10
class DigitalRFReader(ProcessingUnit):
|
|
49
|
self.__nBaud = None
|
|
56
|
self.__nBaud = None
|
|
50
|
self.__code = None
|
|
57
|
self.__code = None
|
|
51
|
|
|
58
|
|
|
|
|
|
59
|
def close(self):
|
|
|
|
|
60
|
print 'Average of writing to digital rf format is ', self.oldAverage * 1000
|
|
|
|
|
61
|
return
|
|
|
|
|
62
|
|
|
52
|
def __getCurrentSecond(self):
|
|
63
|
def __getCurrentSecond(self):
|
|
53
|
|
|
64
|
|
|
54
|
return self.__thisUnixSample/self.__sample_rate
|
|
65
|
return self.__thisUnixSample/self.__sample_rate
|
|
@@
-367,7
+378,9
class DigitalRFReader(ProcessingUnit):
|
|
367
|
print "[Reading] Starting process from %s to %s" %(datetime.datetime.utcfromtimestamp(startUTCSecond - self.__timezone),
|
|
378
|
print "[Reading] Starting process from %s to %s" %(datetime.datetime.utcfromtimestamp(startUTCSecond - self.__timezone),
|
|
368
|
datetime.datetime.utcfromtimestamp(endUTCSecond - self.__timezone)
|
|
379
|
datetime.datetime.utcfromtimestamp(endUTCSecond - self.__timezone)
|
|
369
|
)
|
|
380
|
)
|
|
370
|
|
|
381
|
self.oldAverage = None
|
|
|
|
|
382
|
self.count = 0
|
|
|
|
|
383
|
self.executionTime = 0
|
|
371
|
def __reload(self):
|
|
384
|
def __reload(self):
|
|
372
|
# print
|
|
385
|
# print
|
|
373
|
# print "%s not in range [%s, %s]" %(
|
|
386
|
# print "%s not in range [%s, %s]" %(
|
|
@@
-399,6
+412,15
class DigitalRFReader(ProcessingUnit):
|
|
399
|
|
|
412
|
|
|
400
|
return False
|
|
413
|
return False
|
|
401
|
|
|
414
|
|
|
|
|
|
415
|
def timeit(self, toExecute):
|
|
|
|
|
416
|
t0 = time()
|
|
|
|
|
417
|
toExecute()
|
|
|
|
|
418
|
self.executionTime = time() - t0
|
|
|
|
|
419
|
if self.oldAverage is None: self.oldAverage = self.executionTime
|
|
|
|
|
420
|
self.oldAverage = (self.executionTime + self.count*self.oldAverage) / (self.count + 1.0)
|
|
|
|
|
421
|
self.count = self.count + 1.0
|
|
|
|
|
422
|
return
|
|
|
|
|
423
|
|
|
402
|
def __readNextBlock(self, seconds=30, volt_scale = 1):
|
|
424
|
def __readNextBlock(self, seconds=30, volt_scale = 1):
|
|
403
|
'''
|
|
425
|
'''
|
|
404
|
'''
|
|
426
|
'''
|
|
@@
-424,9
+446,15
class DigitalRFReader(ProcessingUnit):
|
|
424
|
for thisChannelName in self.__channelNameList: ##TODO VARIOS CHANNELS?
|
|
446
|
for thisChannelName in self.__channelNameList: ##TODO VARIOS CHANNELS?
|
|
425
|
for indexSubchannel in range(self.__num_subchannels):
|
|
447
|
for indexSubchannel in range(self.__num_subchannels):
|
|
426
|
try:
|
|
448
|
try:
|
|
|
|
|
449
|
t0 = time()
|
|
427
|
result = self.digitalReadObj.read_vector_c81d(self.__thisUnixSample,
|
|
450
|
result = self.digitalReadObj.read_vector_c81d(self.__thisUnixSample,
|
|
428
|
self.__samples_to_read,
|
|
451
|
self.__samples_to_read,
|
|
429
|
thisChannelName, sub_channel=indexSubchannel)
|
|
452
|
thisChannelName, sub_channel=indexSubchannel)
|
|
|
|
|
453
|
self.executionTime = time() - t0
|
|
|
|
|
454
|
if self.oldAverage is None: self.oldAverage = self.executionTime
|
|
|
|
|
455
|
self.oldAverage = (self.executionTime + self.count*self.oldAverage) / (self.count + 1.0)
|
|
|
|
|
456
|
self.count = self.count + 1.0
|
|
|
|
|
457
|
|
|
430
|
except IOError, e:
|
|
458
|
except IOError, e:
|
|
431
|
#read next profile
|
|
459
|
#read next profile
|
|
432
|
self.__flagDiscontinuousBlock = True
|
|
460
|
self.__flagDiscontinuousBlock = True
|
|
@@
-561,30
+589,32
class DigitalRFWriter(Operation):
|
|
561
|
'''
|
|
589
|
'''
|
|
562
|
Operation.__init__(self, **kwargs)
|
|
590
|
Operation.__init__(self, **kwargs)
|
|
563
|
self.metadata_dict = {}
|
|
591
|
self.metadata_dict = {}
|
|
564
|
self.dataOut = None
|
|
592
|
self.dataOut = None
|
|
565
|
|
|
593
|
|
|
566
|
def setHeader(self, dataOut):
|
|
594
|
def setHeader(self):
|
|
|
|
|
595
|
|
|
|
|
|
596
|
self.metadata_dict['frequency'] = self.dataOut.frequency
|
|
|
|
|
597
|
self.metadata_dict['timezone'] = self.dataOut.timeZone
|
|
|
|
|
598
|
self.metadata_dict['dtype'] = cPickle.dumps(self.dataOut.dtype)
|
|
|
|
|
599
|
self.metadata_dict['nProfiles'] = self.dataOut.nProfiles
|
|
|
|
|
600
|
self.metadata_dict['heightList'] = self.dataOut.heightList
|
|
|
|
|
601
|
self.metadata_dict['channelList'] = self.dataOut.channelList
|
|
|
|
|
602
|
self.metadata_dict['flagDecodeData'] = self.dataOut.flagDecodeData
|
|
|
|
|
603
|
self.metadata_dict['flagDeflipData'] = self.dataOut.flagDeflipData
|
|
|
|
|
604
|
self.metadata_dict['flagShiftFFT'] = self.dataOut.flagShiftFFT
|
|
|
|
|
605
|
self.metadata_dict['flagDataAsBlock'] = self.dataOut.flagDataAsBlock
|
|
|
|
|
606
|
self.metadata_dict['useLocalTime'] = self.dataOut.useLocalTime
|
|
|
|
|
607
|
self.metadata_dict['nCohInt'] = self.dataOut.nCohInt
|
|
|
|
|
608
|
|
|
567
|
return
|
|
609
|
return
|
|
568
|
|
|
610
|
|
|
569
|
def setup(self, dataOut, path, frequency, set=0, metadataFile='metadata', ext='.h5'):
|
|
611
|
def setup(self, dataOut, path, frequency, fileCadence, dirCadence, metadataCadence, set=0, metadataFile='metadata', ext='.h5'):
|
|
570
|
'''
|
|
612
|
'''
|
|
571
|
In this method we should set all initial parameters.
|
|
613
|
In this method we should set all initial parameters.
|
|
572
|
Input:
|
|
614
|
Input:
|
|
573
|
dataOut: Input data will also be outputa data
|
|
615
|
dataOut: Input data will also be outputa data
|
|
574
|
'''
|
|
616
|
'''
|
|
575
|
self.metadata_dict['frequency'] = dataOut.frequency
|
|
617
|
self.setHeader()
|
|
576
|
self.metadata_dict['timezone'] = dataOut.timeZone
|
|
|
|
|
577
|
self.metadata_dict['dtype'] = cPickle.dumps(dataOut.dtype)
|
|
|
|
|
578
|
self.metadata_dict['nProfiles'] = dataOut.nProfiles
|
|
|
|
|
579
|
self.metadata_dict['heightList'] = dataOut.heightList
|
|
|
|
|
580
|
self.metadata_dict['channelList'] = dataOut.channelList
|
|
|
|
|
581
|
self.metadata_dict['flagDecodeData'] = dataOut.flagDecodeData
|
|
|
|
|
582
|
self.metadata_dict['flagDeflipData'] = dataOut.flagDeflipData
|
|
|
|
|
583
|
self.metadata_dict['flagShiftFFT'] = dataOut.flagShiftFFT
|
|
|
|
|
584
|
self.metadata_dict['flagDataAsBlock'] = dataOut.flagDataAsBlock
|
|
|
|
|
585
|
self.metadata_dict['useLocalTime'] = dataOut.useLocalTime
|
|
|
|
|
586
|
self.metadata_dict['nCohInt'] = dataOut.nCohInt
|
|
|
|
|
587
|
|
|
|
|
|
588
|
self.__ippSeconds = dataOut.ippSeconds
|
|
618
|
self.__ippSeconds = dataOut.ippSeconds
|
|
589
|
self.__deltaH = dataOut.getDeltaH()
|
|
619
|
self.__deltaH = dataOut.getDeltaH()
|
|
590
|
self.__sample_rate = 1e6*0.15/self.__deltaH
|
|
620
|
self.__sample_rate = 1e6*0.15/self.__deltaH
|
|
@@
-599,9
+629,6
class DigitalRFWriter(Operation):
|
|
599
|
file_cadence_millisecs = long(1.0 * self.__blocks_per_file * self.__nProfiles * self.__nSamples / self.__sample_rate) * 1000
|
|
629
|
file_cadence_millisecs = long(1.0 * self.__blocks_per_file * self.__nProfiles * self.__nSamples / self.__sample_rate) * 1000
|
|
600
|
sub_cadence_secs = file_cadence_millisecs / 500
|
|
630
|
sub_cadence_secs = file_cadence_millisecs / 500
|
|
601
|
|
|
631
|
|
|
602
|
print file_cadence_millisecs
|
|
|
|
|
603
|
print sub_cadence_secs
|
|
|
|
|
604
|
|
|
|
|
|
605
|
sample_rate_fraction = Fraction(self.__sample_rate).limit_denominator()
|
|
632
|
sample_rate_fraction = Fraction(self.__sample_rate).limit_denominator()
|
|
606
|
sample_rate_numerator = long(sample_rate_fraction.numerator)
|
|
633
|
sample_rate_numerator = long(sample_rate_fraction.numerator)
|
|
607
|
sample_rate_denominator = long(sample_rate_fraction.denominator)
|
|
634
|
sample_rate_denominator = long(sample_rate_fraction.denominator)
|
|
@@
-615,15
+642,15
class DigitalRFWriter(Operation):
|
|
615
|
is_continuous = True
|
|
642
|
is_continuous = True
|
|
616
|
marching_periods = False
|
|
643
|
marching_periods = False
|
|
617
|
|
|
644
|
|
|
618
|
self.digitalWriteObj = digital_rf.DigitalRFWriter(path, self.__dtype, 100,
|
|
645
|
self.digitalWriteObj = digital_rf.DigitalRFWriter(path, self.__dtype, dirCadence,
|
|
619
|
100, start_global_index,
|
|
646
|
fileCadence, start_global_index,
|
|
620
|
sample_rate_numerator, sample_rate_denominator, uuid, compression_level, checksum,
|
|
647
|
sample_rate_numerator, sample_rate_denominator, uuid, compression_level, checksum,
|
|
621
|
is_complex, num_subchannels, is_continuous, marching_periods)
|
|
648
|
is_complex, num_subchannels, is_continuous, marching_periods)
|
|
622
|
|
|
649
|
|
|
623
|
metadata_dir = os.path.join(path, 'metadata')
|
|
650
|
metadata_dir = os.path.join(path, 'metadata')
|
|
624
|
os.system('mkdir %s' % (metadata_dir))
|
|
651
|
os.system('mkdir %s' % (metadata_dir))
|
|
625
|
|
|
652
|
|
|
626
|
self.digitalMetadataWriteObj = digital_rf.DigitalMetadataWriter(metadata_dir, 100, 1, ##236, file_cadence_millisecs / 1000
|
|
653
|
self.digitalMetadataWriteObj = digital_rf.DigitalMetadataWriter(metadata_dir, dirCadence, 1, ##236, file_cadence_millisecs / 1000
|
|
627
|
sample_rate_numerator, sample_rate_denominator,
|
|
654
|
sample_rate_numerator, sample_rate_denominator,
|
|
628
|
metadataFile)
|
|
655
|
metadataFile)
|
|
629
|
|
|
656
|
|
|
@@
-645,22
+672,28
class DigitalRFWriter(Operation):
|
|
645
|
return
|
|
672
|
return
|
|
646
|
|
|
673
|
|
|
647
|
|
|
674
|
|
|
648
|
def writeData(self):
|
|
675
|
def timeit(self, toExecute):
|
|
649
|
for i in range(self.dataOut.systemHeaderObj.nSamples):
|
|
|
|
|
650
|
for channel in self.dataOut.channelList:
|
|
|
|
|
651
|
self.arr_data[i][channel]['r'] = self.dataOut.data[channel][i].real
|
|
|
|
|
652
|
self.arr_data[i][channel]['i'] = self.dataOut.data[channel][i].imag
|
|
|
|
|
653
|
t0 = time()
|
|
676
|
t0 = time()
|
|
654
|
self.digitalWriteObj.rf_write(self.arr_data)
|
|
677
|
toExecute()
|
|
655
|
self.executionTime = time() - t0
|
|
678
|
self.executionTime = time() - t0
|
|
656
|
if self.oldAverage is None: self.oldAverage = self.executionTime
|
|
679
|
if self.oldAverage is None: self.oldAverage = self.executionTime
|
|
657
|
self.oldAverage = (self.executionTime + self.count*self.oldAverage) / (self.count + 1.0)
|
|
680
|
self.oldAverage = (self.executionTime + self.count*self.oldAverage) / (self.count + 1.0)
|
|
658
|
self.count = self.count + 1.0
|
|
681
|
self.count = self.count + 1.0
|
|
659
|
if self.oldAverage is None: self.oldAverage = self.executionTime
|
|
682
|
return
|
|
|
|
|
683
|
|
|
|
|
|
684
|
|
|
|
|
|
685
|
def writeData(self):
|
|
|
|
|
686
|
for i in range(self.dataOut.systemHeaderObj.nSamples):
|
|
|
|
|
687
|
for channel in self.dataOut.channelList:
|
|
|
|
|
688
|
self.arr_data[i][channel]['r'] = self.dataOut.data[channel][i].real
|
|
|
|
|
689
|
self.arr_data[i][channel]['i'] = self.dataOut.data[channel][i].imag
|
|
|
|
|
690
|
|
|
|
|
|
691
|
def f(): return self.digitalWriteObj.rf_write(self.arr_data)
|
|
|
|
|
692
|
self.timeit(f)
|
|
660
|
|
|
693
|
|
|
661
|
return
|
|
694
|
return
|
|
662
|
|
|
695
|
|
|
663
|
def run(self, dataOut, frequency=49.92e6, path=None, **kwargs):
|
|
696
|
def run(self, dataOut, frequency=49.92e6, path=None, fileCadence=1000, dirCadence=100, metadataCadence=1, **kwargs):
|
|
664
|
'''
|
|
697
|
'''
|
|
665
|
This method will be called many times so here you should put all your code
|
|
698
|
This method will be called many times so here you should put all your code
|
|
666
|
Inputs:
|
|
699
|
Inputs:
|
|
@@
-669,7
+702,7
class DigitalRFWriter(Operation):
|
|
669
|
# print dataOut.__dict__
|
|
702
|
# print dataOut.__dict__
|
|
670
|
self.dataOut = dataOut
|
|
703
|
self.dataOut = dataOut
|
|
671
|
if not self.isConfig:
|
|
704
|
if not self.isConfig:
|
|
672
|
self.setup(dataOut, path, frequency, **kwargs)
|
|
705
|
self.setup(dataOut, path, frequency, fileCadence, dirCadence, metadataCadence, **kwargs)
|
|
673
|
|
|
706
|
|
|
674
|
self.writeData()
|
|
707
|
self.writeData()
|
|
675
|
|
|
708
|
|