##// END OF EJS Templates
Modulo de Escritura de Voltage formato Jicamarca.
Daniel Valdez -
r22:3e193d11699b
parent child
Show More
@@ -58,6 +58,13 class BasicHeader:
58 58
59 59 return obj
60 60
61 def write(self, fp):
62 headerTuple = (self.size,self.version,self.dataBlock,self.utc,self.miliSecond,self.timeZone,self.dstFlag,self.errorCount)
63 header = numpy.array(headerTuple,self.struct)
64 header.tofile(fp)
65
66 return 1
67
61 68 class SystemHeader:
62 69
63 70 def __init__(self):
@@ -102,6 +109,13 class SystemHeader:
102 109
103 110 return obj
104 111
112 def write(self, fp):
113 headerTuple = (self.size,self.numSamples,self.numProfiles,self.numChannels,self.adcResolution,self.pciDioBusWidth)
114 header = numpy.array(headerTuple,self.struct)
115 header.tofile(fp)
116
117 return 1
118
105 119 class RadarControllerHeader:
106 120
107 121
@@ -116,7 +130,7 class RadarControllerHeader:
116 130 self.numTaus = 0
117 131 self.codeType = 0
118 132 self.line6Function = 0
119 self.line5Fuction = 0
133 self.line5Function = 0
120 134 self.fClock = 0
121 135 self.prePulseBefore = 0
122 136 self.prePulserAfter = 0
@@ -142,6 +156,7 class RadarControllerHeader:
142 156 ('sRangeTxA','<a20'),
143 157 ('sRangeTxB','<a20'),
144 158 ])
159 self.dynamic = numpy.array([],numpy.dtype('byte'))
145 160
146 161
147 162 def read(self, fp):
@@ -156,7 +171,7 class RadarControllerHeader:
156 171 self.numTaus = header['nNumTaus'][0]
157 172 self.codeType = header['nCodeType'][0]
158 173 self.line6Function = header['nLine6Function'][0]
159 self.line5Fuction = header['nLine5Function'][0]
174 self.line5Function = header['nLine5Function'][0]
160 175 self.fClock = header['fClock'][0]
161 176 self.prePulseBefore = header['nPrePulseBefore'][0]
162 177 self.prePulserAfter = header['nPrePulseAfter'][0]
@@ -165,7 +180,7 class RadarControllerHeader:
165 180 self.rangeTxB = header['sRangeTxB'][0]
166 181 # jump Dynamic Radar Controller Header
167 182 jumpHeader = self.size - 116
168 fp.seek(fp.tell() + jumpHeader)
183 self.dynamic = numpy.fromfile(fp,numpy.dtype('byte'),jumpHeader)
169 184
170 185 return 1
171 186
@@ -182,16 +197,46 class RadarControllerHeader:
182 197 obj.numTaus = self.numTaus
183 198 obj.codeType = self.codeType
184 199 obj.line6Function = self.line6Function
185 obj.line5Fuction = self.line5Fuction
200 obj.line5Function = self.line5Function
186 201 obj.fClock = self.fClock
187 202 obj.prePulseBefore = self.prePulseBefore
188 203 obj.prePulserAfter = self.prePulserAfter
189 204 obj.rangeIpp = self.rangeIpp
190 205 obj.rangeTxA = self.rangeTxA
191 206 obj.rangeTxB = self.rangeTxB
207 obj.dynamic = self.dynamic
192 208
193 209 return obj
194 210
211 def write(self, fp):
212 headerTuple = (self.size,
213 self.expType,
214 self.nTx,
215 self.ipp,
216 self.txA,
217 self.txB,
218 self.numWindows,
219 self.numTaus,
220 self.codeType,
221 self.line6Function,
222 self.line5Function,
223 self.fClock,
224 self.prePulseBefore,
225 self.prePulserAfter,
226 self.rangeIpp,
227 self.rangeTxA,
228 self.rangeTxB)
229
230 header = numpy.array(headerTuple,self.struct)
231 header.tofile(fp)
232
233 dynamic = self.dynamic
234 dynamic.tofile(fp)
235
236 return 1
237
238
239
195 240 class ProcessingHeader:
196 241
197 242 def __init__(self):
@@ -279,6 +324,46 class ProcessingHeader:
279 324
280 325 return obj
281 326
327 def write(self, fp):
328 headerTuple = (self.size,
329 self.dataType,
330 self.blockSize,
331 self.profilesPerBlock,
332 self.dataBlocksPerFile,
333 self.numWindows,
334 self.processFlags,
335 self.coherentInt,
336 self.incoherentInt,
337 self.totalSpectra)
338
339 header = numpy.array(headerTuple,self.struct)
340 header.tofile(fp)
341
342 if self.numWindows != 0:
343 sampleWindowTuple = (self.firstHeight,self.deltaHeight,self.samplesWin)
344 samplingWindow = numpy.array(sampleWindowTuple,self.structSamplingWindow)
345 samplingWindow.tofile(fp)
346
347
348 if self.totalSpectra != 0:
349 spectraComb = numpy.array([],numpy.dtype('u1'))
350 spectraComb = self.spectraComb
351 spectraComb.tofile(fp)
352
353
354 if self.processFlags & PROCFLAG.DEFINE_PROCESS_CODE == PROCFLAG.DEFINE_PROCESS_CODE:
355 numCode = self.numCode
356 numCode.tofile(fp)
357
358 numBaud = self.numBaud
359 numBaud.tofile(fp)
360
361 codes = self.codes.reshape(numCode*numBaud)
362 codes.tofile(fp)
363
364 return 1
365
366
282 367 class PROCFLAG:
283 368 COHERENT_INTEGRATION = numpy.uint32(0x00000001)
284 369 DECODE_DATA = numpy.uint32(0x00000002)
@@ -20,21 +20,26 class TestIO():
20 20 def setValues(self):
21 21
22 22
23 self.path = '/Users/danielangelsuarezmunoz/Documents/Projects'
23 self.path = '/Users/danielangelsuarezmunoz/Documents/Projects/testWR'
24 24 self.startDateTime = datetime.datetime(2007,5,1,17,49,0)
25 self.endDateTime = datetime.datetime(2007,5,1,18,10,0)
25 self.endDateTime = datetime.datetime(2007,5,1,18,15,0)
26 26
27 27 def createVoltageObjects(self):
28 28 path = os.path.split(os.getcwd())[0]
29 29 sys.path.append(path)
30 30
31 from IO.Voltage import VoltageReader
31 from IO.VoltageIO import VoltageReader
32 from IO.VoltageIO import VoltageWriter
32 33 from Model.Voltage import Voltage
33 34
34 35 self.voltageModelObj = Voltage()
35 36 self.voltageReaderObj = VoltageReader(self.voltageModelObj)
36 37 self.voltageReaderObj.setup(self.path, self.startDateTime, self.endDateTime)
37 38
39 # self.voltageWriterObj = VoltageWriter(self.voltageModelObj)
40 # self.voltageWriterObj.setup('/Users/danielangelsuarezmunoz/Documents/Projects/testWR')
41
42
38 43 def testReadVoltage(self):
39 44 while(not(self.voltageReaderObj.noMoreFiles)):
40 45
@@ -46,5 +51,7 class TestIO():
46 51 print 'Block No %04d, Time: %s'%(self.voltageReaderObj.nReadBlocks,
47 52 datetime.datetime.fromtimestamp(self.voltageReaderObj.m_BasicHeader.utc))
48 53
54 # self.voltageWriterObj.putData()
55
49 56 if __name__ == '__main__':
50 57 TestIO() No newline at end of file
@@ -531,7 +531,12 class VoltageReader(DataReader):
531 531
532 532 self.startDoy = startDateTime.timetuple().tm_yday
533 533 self.endDoy = endDateTime.timetuple().tm_yday
534 #call fillHeaderValues() - to Data Object
534
535 self.m_Voltage.m_BasicHeader = self.m_BasicHeader.copy()
536 self.m_Voltage.m_ProcessingHeader = self.m_ProcessingHeader.copy()
537 self.m_Voltage.m_RadarControllerHeader = self.m_RadarControllerHeader.copy()
538 self.m_Voltage.m_SystemHeader = self.m_SystemHeader.copy()
539 self.m_Voltage.dataType = self.__dataType
535 540
536 541 self.__pathList = pathList
537 542 self.filenameList = filenameList
@@ -597,6 +602,8 class VoltageReader(DataReader):
597 602 self.m_Voltage.m_SystemHeader = self.m_SystemHeader.copy()
598 603 self.m_Voltage.m_BasicHeader.utc = time
599 604 self.m_Voltage.data = data
605 self.m_Voltage.flagNoData = False
606 self.m_Voltage.flagResetProcessing = self.flagResetProcessing
600 607 self.m_Voltage.heights = self.__heights
601 608 self.m_Voltage.idProfile = self.idProfile
602 609 self.m_Voltage.dataType = self.__dataType
@@ -608,11 +615,8 class VoltageReader(DataReader):
608 615
609 616 return data
610 617
611
612
613
614 618 class VoltageWriter(DataWriter):
615
619 __configHeaderFile = 'wrSetHeadet.txt'
616 620
617 621 def __init__(self, m_Voltage = None):
618 622
@@ -621,13 +625,17 class VoltageWriter(DataWriter):
621 625
622 626 self.m_Voltage = m_Voltage
623 627
628 self.__path = None
629
624 630 self.__fp = None
625 631
632 self.__format = None
633
626 634 self.__blocksCounter = 0
627 635
628 636 self.__setFile = None
629 637
630 self.__flagIsNewFile = 0
638 self.__flagIsNewFile = 1
631 639
632 640 self.__buffer = 0
633 641
@@ -653,20 +661,53 class VoltageWriter(DataWriter):
653 661
654 662 self.m_ProcessingHeader = ProcessingHeader()
655 663
664
665 def __writeBasicHeader(self, fp=None):
666 if fp == None:
667 fp = self.__fp
668
669 self.m_BasicHeader.write(fp)
670
671 def __wrSystemHeader(self,fp=None):
672 if fp == None:
673 fp = self.__fp
674
675 self.m_SystemHeader.write(fp)
676
677 def __wrRadarControllerHeader(self,fp=None):
678 if fp == None:
679 fp = self.__fp
680
681 self.m_RadarControllerHeader.write(fp)
682
683 def __wrProcessingHeader(self,fp=None):
684 if fp == None:
685 fp = self.__fp
686
687 self.m_ProcessingHeader.write(fp)
688
689 def __writeFirstHeader(self):
690 self.__writeBasicHeader()
691 self.__wrSystemHeader()
692 self.__wrRadarControllerHeader()
693 self.__wrProcessingHeader()
694 self.__dataType = self.m_Voltage.dataType
695
696
656 697 def __setNextFile(self):
698
657 699 setFile = self.__setFile
658 700 ext = self.__ext
659 701 path = self.__path
660 702
661 703 setFile += 1
662 704
663 if not(self.__blocksCounter >= self.m_ProcessingHeader.dataBlocksPerFile):
705 if self.__fp != None:
664 706 self.__fp.close()
665 return 0
666 707
667 708 timeTuple = time.localtime(self.m_Voltage.m_BasicHeader.utc) # utc from m_Voltage
668 file = 'D%4.4d%3.3d%3.3d%s' % (timeTuple.tm_year,timeTuple.tm_doy,setFile,ext)
669 subfolder = 'D%4.4d%3.3d' % (timeTuple.tm_year,timeTuple.tm_doy)
709 file = 'D%4.4d%3.3d%3.3d%s' % (timeTuple.tm_year,timeTuple.tm_yday,setFile,ext)
710 subfolder = 'D%4.4d%3.3d' % (timeTuple.tm_year,timeTuple.tm_yday)
670 711 tmp = os.path.join(path,subfolder)
671 712 if not(os.path.exists(tmp)):
672 713 os.mkdir(tmp)
@@ -674,7 +715,7 class VoltageWriter(DataWriter):
674 715 filename = os.path.join(path,subfolder,file)
675 716 fp = open(filename,'wb')
676 717
677
718 self.__blocksCounter = 0
678 719
679 720 #guardando atributos
680 721 self.filename = filename
@@ -685,9 +726,9 class VoltageWriter(DataWriter):
685 726
686 727 print 'Writing the file: %s'%self.filename
687 728
688 return 1
689
729 self.__writeFirstHeader()
690 730
731 return 1
691 732
692 733 def __setNewBlock(self):
693 734 if self.__fp == None:
@@ -696,21 +737,18 class VoltageWriter(DataWriter):
696 737 if self.__flagIsNewFile:
697 738 return 1
698 739
699 #Bloques completados?
700 if self.__blocksCounter < self.m_ProcessingHeader.profilesPerBlock:
740 if self.__blocksCounter < self.m_ProcessingHeader.dataBlocksPerFile:
701 741 self.__writeBasicHeader()
702 742 return 1
703 743
704 744 if not(self.__setNextFile()):
705 745 return 0
706 746
707 self.__writeFirstHeader()
708
709 747 return 1
710 748
711 749 def __writeBlock(self):
712 750
713 numpy.save(self.__fp,self.__buffer)
751 self.__buffer.tofile(self.__fp)
714 752
715 753 self.__buffer = numpy.array([],self.__dataType)
716 754
@@ -724,7 +762,9 class VoltageWriter(DataWriter):
724 762
725 763 self.__blocksCounter += 1
726 764
765
727 766 def writeNextBlock(self):
767
728 768 if not(self.__setNewBlock()):
729 769 return 0
730 770
@@ -741,20 +781,29 class VoltageWriter(DataWriter):
741 781 def putData(self):
742 782 self.flagIsNewBlock = 0
743 783
744 if self.m_Voltage.noData:
784 if self.m_Voltage.flagNoData:
745 785 return None
746 786
787 if self.m_Voltage.flagResetProcessing:
788 self.__buffer = numpy.array([],self.__dataType)
789 self.__buffer_id = 0
790 self.__setNextFile()
791
792 self.__setHeaderByObj()
793
747 794 shape = self.m_Voltage.data.shape
748 795 data = numpy.zeros(shape,self.__dataType)
796
749 797 data['real'] = self.m_Voltage.data.real
750 798 data['imag'] = self.m_Voltage.data.imag
799
751 800 data = data.reshape((-1))
752 801
753 802 self.__buffer = numpy.hstack((self.__buffer,data))
754 803
755 804 self.__buffer_id += 1
756 805
757 if __hasAllDataInBuffer():
806 if self.__hasAllDataInBuffer():
758 807 self.writeNextBlock()
759 808
760 809
@@ -764,38 +813,117 class VoltageWriter(DataWriter):
764 813
765 814 return 1
766 815
816 def __setHeaderByObj(self):
817 self.m_BasicHeader = self.m_Voltage.m_BasicHeader.copy()
818 self.m_SystemHeader = self.m_Voltage.m_SystemHeader.copy()
819 self.m_RadarControllerHeader = self.m_Voltage.m_RadarControllerHeader.copy()
820 self.m_ProcessingHeader = self.m_Voltage.m_ProcessingHeader.copy()
821 self.__dataType = self.m_Voltage.dataType
822
823 def __setHeaderByFile(self):
824
825 format = self.__format
826 header = ['Basic','System','RadarController','Processing']
827
828 fmtFromFile = None
829 headerFromFile = None
830
831
832 fileTable = self.__configHeaderFile
833
834 if os.access(fileTable, os.R_OK):
835 import re, string
836
837 f = open(fileTable,'r')
838 lines = f.read()
839 f.close()
840
841 #Delete comments into expConfig
842 while 1:
843
844 startComment = string.find(lines.lower(),'#')
845 if startComment == -1:
846 break
847 endComment = string.find(lines.lower(),'\n',startComment)
848 lines = string.replace(lines,lines[startComment:endComment+1],'', 1)
849
850 while expFromFile == None:
767 851
768 def setup(self,path,set=None,format=None):
852 currFmt = string.find(lines.lower(),'format="%s"' %(expName))
853 nextFmt = string.find(lines.lower(),'format',currFmt+10)
854
855 if currFmt == -1:
856 break
857 if nextFmt == -1:
858 nextFmt = len(lines)-1
859
860 fmtTable = lines[currFmt:nextFmt]
861 lines = lines[nextFmt:]
862
863 fmtRead = self.__getValueFromArg(fmtTable,'format')
864 if fmtRead != format:
865 continue
866 fmtFromFile = fmtRead
867
868 lines2 = fmtTable
869
870 while headerFromFile == None:
871
872 currHeader = string.find(lines2.lower(),'header="%s"' %(header))
873 nextHeader = string.find(lines2.lower(),'header',currHeader+10)
874
875 if currHeader == -1:
876 break
877 if nextHeader == -1:
878 nextHeader = len(lines2)-1
879
880 headerTable = lines2[currHeader:nextHeader]
881 lines2 = lines2[nextHeader:]
882
883 headerRead = self.__getValueFromArg(headerTable,'site')
884 if not(headerRead in header):
885 continue
886 headerFromFile = headerRead
887
888 if headerRead == 'Basic':
889 self.m_BasicHeader.size = self.__getValueFromArg(headerTable,'size',lower=False)
890 self.m_BasicHeader.version = self.__getValueFromArg(headerTable,'version',lower=False)
891 self.m_BasicHeader.dataBlock = self.__getValueFromArg(headerTable,'dataBlock',lower=False)
892 self.m_BasicHeader.utc = self.__getValueFromArg(headerTable,'utc',lower=False)
893 self.m_BasicHeader.miliSecond = self.__getValueFromArg(headerTable,'miliSecond',lower=False)
894 self.m_BasicHeader.timeZone = self.__getValueFromArg(headerTable,'timeZone',lower=False)
895 self.m_BasicHeader.dstFlag = self.__getValueFromArg(headerTable,'dstFlag',lower=False)
896 self.m_BasicHeader.errorCount = self.__getValueFromArg(headerTable,'errorCount',lower=False)
769 897
770 if set == None:
771 set = -1
772 898 else:
773 set -= 1
899 print "file access denied:%s"%fileTable
900 sys.exit(0)
901
902 def setup(self,path,set=0,format='rawdata'):
903
774 904
775 905 if format == 'hdf5':
776 906 ext = '.hdf5'
907 format = 'hdf5'
777 908 print 'call hdf5 library'
778 909 return 0
779 910
780 911 if format == 'rawdata':
781 912 ext = '.r'
913 format = 'Jicamarca'
782 914
783 915 #call to config_headers
784
785 self.__setFile = set
916 #self.__setHeaderByFile()
917 self.__setHeaderByObj()
918 self.__path = path
919 self.__setFile = set - 1
920 self.__ext = ext
921 self.__format = format
922 self.__buffer = numpy.array([],self.__dataType)
786 923
787 924 if not(self.__setNextFile()):
788 print "zzzzzzzzzzzz"
789 925 return 0
790 926
791 self.__writeFirstHeader() # dentro de esta funcion se debe setear e __dataType
792
793 self.__buffer = numpy.array([],self.__dataType)
794 927
795 928
796 929
No newline at end of file
797 def __writeBasicHeader(self):
798 pass
799
800 def __writeFirstHeader(self):
801 pass No newline at end of file
@@ -35,7 +35,7 class Voltage(Data):
35 35
36 36 self.heights = None
37 37
38 self.noData = True
38 self.flagNoData = True
39 39
40 40 self.nProfiles = None
41 41
@@ -43,6 +43,8 class Voltage(Data):
43 43
44 44 self.dataType = None
45 45
46 self.flagResetProcessing = False
47
46 48 def copy(self):
47 49 obj = Voltage()
48 50 obj.m_BasicHeader = self.m_BasicHeader.copy()
@@ -52,10 +54,12 class Voltage(Data):
52 54
53 55 obj.data = self.data
54 56 obj.heights = self.heights
55 obj.noData = self.noData
57 obj.flagNoData = self.flagNoData
56 58
57 59 obj.nProfiles = self.nProfiles
58 60 obj.idProfile = self.idProfile
61 obj.dataType = self.dataType
62 obj.flagResetProcessing = self.flagResetProcessing
59 63
60 64 return obj
61 65 No newline at end of file
@@ -23,7 +23,7 class TestSChain():
23 23 def setValues(self):
24 24
25 25 self.path = '/home/roj-idl71/Data/RAWDATA/DP_Faraday/'
26 self.path = '/home/roj-idl71/Data/RAWDATA/IMAGING'
26 self.path = '/Users/danielangelsuarezmunoz/Documents/Projects/testWR'
27 27 #self.path = '/remote/puma/2004_11/DVD/'
28 28 self.startDateTime = datetime.datetime(2004,5,1,17,49,0)
29 29 self.endDateTime = datetime.datetime(2012,5,1,18,10,0)
General Comments 0
You need to be logged in to leave comments. Login now