@@ -577,7 +577,9 class HDF5Writer(Operation): | |||||
577 |
|
577 | |||
578 | metadataList = None |
|
578 | metadataList = None | |
579 |
|
579 | |||
580 | arrayDim = None |
|
580 | # arrayDim = None | |
|
581 | ||||
|
582 | dsList = None #List of dictionaries | |||
581 |
|
583 | |||
582 | tableDim = None |
|
584 | tableDim = None | |
583 |
|
585 | |||
@@ -611,9 +613,7 class HDF5Writer(Operation): | |||||
611 | self.blocksPerFile = 10 |
|
613 | self.blocksPerFile = 10 | |
612 |
|
614 | |||
613 | self.metadataList = kwargs['metadataList'] |
|
615 | self.metadataList = kwargs['metadataList'] | |
614 |
|
||||
615 | self.dataList = kwargs['dataList'] |
|
616 | self.dataList = kwargs['dataList'] | |
616 |
|
||||
617 | self.dataOut = dataOut |
|
617 | self.dataOut = dataOut | |
618 |
|
618 | |||
619 | if kwargs.has_key('mode'): |
|
619 | if kwargs.has_key('mode'): | |
@@ -629,57 +629,91 class HDF5Writer(Operation): | |||||
629 | arrayDim = numpy.zeros((len(self.dataList),5)) |
|
629 | arrayDim = numpy.zeros((len(self.dataList),5)) | |
630 |
|
630 | |||
631 | #Table dimensions |
|
631 | #Table dimensions | |
632 |
|
||||
633 | dtype0 = self.dtype |
|
632 | dtype0 = self.dtype | |
634 |
|
||||
635 | tableList = [] |
|
633 | tableList = [] | |
636 |
|
634 | |||
637 | for i in range(len(self.dataList)): |
|
635 | #Dictionary and list of tables | |
|
636 | dsList = [] | |||
638 |
|
|
637 | ||
|
638 | for i in range(len(self.dataList)): | |||
|
639 | dsDict = {} | |||
639 | dataAux = getattr(self.dataOut, self.dataList[i]) |
|
640 | dataAux = getattr(self.dataOut, self.dataList[i]) | |
640 |
|
641 | dsDict['variable'] = self.dataList[i] | ||
641 | #--------------------- Conditionals ------------------------ |
|
642 | #--------------------- Conditionals ------------------------ | |
642 | #There is no data |
|
643 | #There is no data | |
643 | if dataAux == None: |
|
644 | if dataAux == None: | |
644 | return 0 |
|
645 | return 0 | |
645 |
|
646 | |||
646 | #Not array, just a number |
|
647 | #Not array, just a number | |
|
648 | #Mode 0 | |||
647 |
if type(dataAux)==float or type(dataAux)==int: |
|
649 | if type(dataAux)==float or type(dataAux)==int: | |
|
650 | dsDict['mode'] = 0 | |||
|
651 | dsDict['nDim'] = 0 | |||
648 | arrayDim[i,0] = 1 |
|
652 | arrayDim[i,0] = 1 | |
649 | mode[i] = 0 |
|
653 | dsList.append(dsDict) | |
650 |
|
654 | |||
651 | #Mode meteors |
|
655 | #Mode 2: meteors | |
652 |
elif mode[i] == 2: |
|
656 | elif mode[i] == 2: | |
|
657 | # dsDict['nDim'] = 0 | |||
|
658 | dsDict['dsName'] = 'table0' | |||
|
659 | dsDict['mode'] = 2 # Mode meteors | |||
|
660 | dsDict['shape'] = dataAux.shape[-1] | |||
|
661 | dsDict['nDim'] = 0 | |||
|
662 | ||||
653 | arrayDim[i,3] = dataAux.shape[-1] |
|
663 | arrayDim[i,3] = dataAux.shape[-1] | |
654 | arrayDim[i,4] = mode[i] #Mode the data was stored |
|
664 | arrayDim[i,4] = mode[i] #Mode the data was stored | |
655 |
|
665 | |||
656 | #All the rest |
|
666 | dsList.append(dsDict) | |
|
667 | ||||
|
668 | #Mode 1 | |||
657 | else: |
|
669 | else: | |
658 | arrayDim0 = dataAux.shape #Data dimensions |
|
670 | arrayDim0 = dataAux.shape #Data dimensions | |
659 | arrayDim[i,0] = len(arrayDim0) #Number of array dimensions |
|
671 | arrayDim[i,0] = len(arrayDim0) #Number of array dimensions | |
660 | arrayDim[i,4] = mode[i] #Mode the data was stored |
|
672 | arrayDim[i,4] = mode[i] #Mode the data was stored | |
661 |
|
673 | |||
|
674 | strtable = 'table' | |||
|
675 | dsDict['mode'] = 1 # Mode parameters | |||
|
676 | ||||
662 | # Three-dimension arrays |
|
677 | # Three-dimension arrays | |
663 | if len(arrayDim0) == 3: |
|
678 | if len(arrayDim0) == 3: | |
664 | arrayDim[i,1:-1] = numpy.array(arrayDim0) |
|
679 | arrayDim[i,1:-1] = numpy.array(arrayDim0) | |
|
680 | nTables = int(arrayDim[i,2]) | |||
|
681 | dsDict['dsNumber'] = nTables | |||
|
682 | dsDict['shape'] = arrayDim[i,2:4] | |||
|
683 | dsDict['nDim'] = 3 | |||
|
684 | ||||
|
685 | for j in range(nTables): | |||
|
686 | dsDict = dsDict.copy() | |||
|
687 | dsDict['dsName'] = strtable + str(j) | |||
|
688 | dsList.append(dsDict) | |||
665 |
|
689 | |||
666 | # Two-dimension arrays |
|
690 | # Two-dimension arrays | |
667 | elif len(arrayDim0) == 2: |
|
691 | elif len(arrayDim0) == 2: | |
668 | arrayDim[i,2:-1] = numpy.array(arrayDim0) |
|
692 | arrayDim[i,2:-1] = numpy.array(arrayDim0) | |
|
693 | nTables = int(arrayDim[i,2]) | |||
|
694 | dsDict['dsNumber'] = nTables | |||
|
695 | dsDict['shape'] = arrayDim[i,3] | |||
|
696 | dsDict['nDim'] = 2 | |||
|
697 | ||||
|
698 | for j in range(nTables): | |||
|
699 | dsDict = dsDict.copy() | |||
|
700 | dsDict['dsName'] = strtable + str(j) | |||
|
701 | dsList.append(dsDict) | |||
669 |
|
702 | |||
670 | # One-dimension arrays |
|
703 | # One-dimension arrays | |
671 | elif len(arrayDim0) == 1: |
|
704 | elif len(arrayDim0) == 1: | |
672 | arrayDim[i,3] = arrayDim0 |
|
705 | arrayDim[i,3] = arrayDim0[0] | |
673 |
|
706 | dsDict['shape'] = arrayDim0[0] | ||
674 | # No array, just a number |
|
707 | dsDict['dsNumber'] = 1 | |
675 | elif len(arrayDim0) == 0: |
|
708 | dsDict['dsName'] = strtable + str(0) | |
676 |
|
|
709 | dsDict['nDim'] = 1 | |
677 | arrayDim[i,3] = 1 |
|
710 | dsList.append(dsDict) | |
678 |
|
711 | |||
679 | table = numpy.array((self.dataList[i],) + tuple(arrayDim[i,:]),dtype = dtype0) |
|
712 | table = numpy.array((self.dataList[i],) + tuple(arrayDim[i,:]),dtype = dtype0) | |
680 | tableList.append(table) |
|
713 | tableList.append(table) | |
681 |
|
714 | |||
682 |
self.arrayDim = arrayDim |
|
715 | # self.arrayDim = arrayDim | |
|
716 | self.dsList = dsList | |||
683 | self.tableDim = numpy.array(tableList, dtype = dtype0) |
|
717 | self.tableDim = numpy.array(tableList, dtype = dtype0) | |
684 | self.blockIndex = 0 |
|
718 | self.blockIndex = 0 | |
685 |
|
719 | |||
@@ -809,6 +843,117 class HDF5Writer(Operation): | |||||
809 |
|
843 | |||
810 | #Setting HDF5 File |
|
844 | #Setting HDF5 File | |
811 | fp = h5py.File(filename,'w') |
|
845 | fp = h5py.File(filename,'w') | |
|
846 | #write metadata | |||
|
847 | self.writeMetadata(fp) | |||
|
848 | #Write data | |||
|
849 | grp = fp.create_group("Data") | |||
|
850 | # grp.attrs['metadata'] = self.metaFile | |||
|
851 | ||||
|
852 | # grp.attrs['blocksPerFile'] = 0 | |||
|
853 | ds = [] | |||
|
854 | data = [] | |||
|
855 | dsList = self.dsList | |||
|
856 | i = 0 | |||
|
857 | while i < len(dsList): | |||
|
858 | dsInfo = dsList[i] | |||
|
859 | #One-dimension data | |||
|
860 | if dsInfo['mode'] == 0: | |||
|
861 | # ds0 = grp.create_dataset(self.dataList[i], (1,1), maxshape=(1,self.blocksPerFile) , chunks = True, dtype='S20') | |||
|
862 | ds0 = grp.create_dataset(dsInfo['variable'], (1,1), maxshape=(1,self.blocksPerFile) , chunks = True, dtype=numpy.float64) | |||
|
863 | ds.append(ds0) | |||
|
864 | data.append([]) | |||
|
865 | i += 1 | |||
|
866 | continue | |||
|
867 | # nDimsForDs.append(nDims[i]) | |||
|
868 | ||||
|
869 | elif dsInfo['mode'] == 2: | |||
|
870 | grp0 = grp.create_group(dsInfo['variable']) | |||
|
871 | ds0 = grp0.create_dataset(dsInfo['dsName'], (1,dsInfo['shape']), data = numpy.zeros((1,dsInfo['shape'])) , maxshape=(None,dsInfo['shape']), chunks=True) | |||
|
872 | ds.append(ds0) | |||
|
873 | data.append([]) | |||
|
874 | i += 1 | |||
|
875 | continue | |||
|
876 | ||||
|
877 | elif dsInfo['mode'] == 1: | |||
|
878 | grp0 = grp.create_group(dsInfo['variable']) | |||
|
879 | ||||
|
880 | for j in range(dsInfo['dsNumber']): | |||
|
881 | dsInfo = dsList[i] | |||
|
882 | tableName = dsInfo['dsName'] | |||
|
883 | shape = dsInfo['shape'] | |||
|
884 | ||||
|
885 | if dsInfo['nDim'] == 3: | |||
|
886 | ds0 = grp0.create_dataset(tableName, (shape[0],shape[1],1) , data = numpy.zeros((shape[0],shape[1],1)), maxshape = (None,shape[1],None), chunks=True) | |||
|
887 | else: | |||
|
888 | ds0 = grp0.create_dataset(tableName, (1,shape), data = numpy.zeros((1,shape)) , maxshape=(None,shape), chunks=True) | |||
|
889 | ||||
|
890 | ds.append(ds0) | |||
|
891 | data.append([]) | |||
|
892 | i += 1 | |||
|
893 | # nDimsForDs.append(nDims[i]) | |||
|
894 | ||||
|
895 | fp.flush() | |||
|
896 | fp.close() | |||
|
897 | ||||
|
898 | # self.nDatas = nDatas | |||
|
899 | # self.nDims = nDims | |||
|
900 | # self.nDimsForDs = nDimsForDs | |||
|
901 | #Saving variables | |||
|
902 | print 'Writing the file: %s'%filename | |||
|
903 | self.filename = filename | |||
|
904 | # self.fp = fp | |||
|
905 | # self.grp = grp | |||
|
906 | # self.grp.attrs.modify('nRecords', 1) | |||
|
907 | self.ds = ds | |||
|
908 | self.data = data | |||
|
909 | # self.setFile = setFile | |||
|
910 | self.firsttime = True | |||
|
911 | self.blockIndex = 0 | |||
|
912 | return | |||
|
913 | ||||
|
914 | def setNextFile1(self): | |||
|
915 | ||||
|
916 | ext = self.ext | |||
|
917 | path = self.path | |||
|
918 | setFile = self.setFile | |||
|
919 | mode = self.mode | |||
|
920 | ||||
|
921 | timeTuple = time.localtime(self.dataOut.utctime) | |||
|
922 | subfolder = 'd%4.4d%3.3d' % (timeTuple.tm_year,timeTuple.tm_yday) | |||
|
923 | ||||
|
924 | fullpath = os.path.join( path, subfolder ) | |||
|
925 | ||||
|
926 | if os.path.exists(fullpath): | |||
|
927 | filesList = os.listdir( fullpath ) | |||
|
928 | filesList = [k for k in filesList if 'D' in k] | |||
|
929 | if len( filesList ) > 0: | |||
|
930 | filesList = sorted( filesList, key=str.lower ) | |||
|
931 | filen = filesList[-1] | |||
|
932 | # el filename debera tener el siguiente formato | |||
|
933 | # 0 1234 567 89A BCDE (hex) | |||
|
934 | # x YYYY DDD SSS .ext | |||
|
935 | if isNumber( filen[8:11] ): | |||
|
936 | setFile = int( filen[8:11] ) #inicializo mi contador de seteo al seteo del ultimo file | |||
|
937 | else: | |||
|
938 | setFile = -1 | |||
|
939 | else: | |||
|
940 | setFile = -1 #inicializo mi contador de seteo | |||
|
941 | else: | |||
|
942 | os.mkdir(fullpath) | |||
|
943 | setFile = -1 #inicializo mi contador de seteo | |||
|
944 | ||||
|
945 | setFile += 1 | |||
|
946 | ||||
|
947 | file = '%s%4.4d%3.3d%3.3d%s' % (self.optchar, | |||
|
948 | timeTuple.tm_year, | |||
|
949 | timeTuple.tm_yday, | |||
|
950 | setFile, | |||
|
951 | ext ) | |||
|
952 | ||||
|
953 | filename = os.path.join( path, subfolder, file ) | |||
|
954 | ||||
|
955 | #Setting HDF5 File | |||
|
956 | fp = h5py.File(filename,'w') | |||
812 |
|
957 | |||
813 | #writemetadata |
|
958 | #writemetadata | |
814 | self.writeMetadata(fp) |
|
959 | self.writeMetadata(fp) | |
@@ -914,6 +1059,7 class HDF5Writer(Operation): | |||||
914 |
|
1059 | |||
915 | self.data |
|
1060 | self.data | |
916 | ''' |
|
1061 | ''' | |
|
1062 | dsList = self.dsList | |||
917 | ds = self.ds |
|
1063 | ds = self.ds | |
918 | #Setting HDF5 File |
|
1064 | #Setting HDF5 File | |
919 | fp = h5py.File(self.filename,'r+') |
|
1065 | fp = h5py.File(self.filename,'r+') | |
@@ -921,25 +1067,20 class HDF5Writer(Operation): | |||||
921 | ind = 0 |
|
1067 | ind = 0 | |
922 |
|
1068 | |||
923 | # grp.attrs['blocksPerFile'] = 0 |
|
1069 | # grp.attrs['blocksPerFile'] = 0 | |
924 |
|
|
1070 | while ind < len(dsList): | |
|
1071 | dsInfo = dsList[ind] | |||
925 |
|
1072 | |||
926 |
if |
|
1073 | if dsInfo['mode'] == 0: | |
927 |
ds0 = grp[ |
|
1074 | ds0 = grp[dsInfo['variable']] | |
928 | ds[ind] = ds0 |
|
1075 | ds[ind] = ds0 | |
929 | ind += 1 |
|
1076 | ind += 1 | |
930 | else: |
|
1077 | else: | |
931 | # if self.mode[i] == 0: |
|
|||
932 | # strMode = "channel" |
|
|||
933 | if self.mode[i] == 1: |
|
|||
934 | strMode = "param" |
|
|||
935 | elif self.mode[i] == 2: |
|
|||
936 | strMode = "table" |
|
|||
937 |
|
1078 | |||
938 |
grp0 = grp[ |
|
1079 | grp0 = grp[dsInfo['variable']] | |
939 |
|
1080 | |||
940 |
for j in range( |
|
1081 | for j in range(dsInfo['dsNumber']): | |
941 | tableName = strMode + str(j) |
|
1082 | dsInfo = dsList[ind] | |
942 |
ds0 = grp0[ |
|
1083 | ds0 = grp0[dsInfo['dsName']] | |
943 | ds[ind] = ds0 |
|
1084 | ds[ind] = ds0 | |
944 | ind += 1 |
|
1085 | ind += 1 | |
945 |
|
1086 | |||
@@ -957,30 +1098,29 class HDF5Writer(Operation): | |||||
957 | self.data |
|
1098 | self.data | |
958 | ''' |
|
1099 | ''' | |
959 | #Creating Arrays |
|
1100 | #Creating Arrays | |
|
1101 | dsList = self.dsList | |||
960 | data = self.data |
|
1102 | data = self.data | |
961 | nDatas = self.nDatas |
|
|||
962 | nDims = self.nDims |
|
|||
963 | mode = self.mode |
|
|||
964 | ind = 0 |
|
1103 | ind = 0 | |
965 |
|
1104 | |||
966 | for i in range(len(self.dataList)): |
|
1105 | while ind < len(dsList): | |
967 | dataAux = getattr(self.dataOut,self.dataList[i]) |
|
1106 | dsInfo = dsList[ind] | |
|
1107 | dataAux = getattr(self.dataOut, dsInfo['variable']) | |||
|
1108 | ||||
|
1109 | mode = dsInfo['mode'] | |||
|
1110 | nDim = dsInfo['nDim'] | |||
968 |
|
1111 | |||
969 |
if nDim |
|
1112 | if mode == 0 or mode == 2 or nDim == 1: | |
970 | data[ind] = dataAux |
|
1113 | data[ind] = dataAux | |
971 | ind += 1 |
|
1114 | ind += 1 | |
972 |
|
|
1115 | # elif nDim == 1: | |
973 | elif nDims[i] == 2: |
|
1116 | # data[ind] = numpy.reshape(dataAux,(numpy.size(dataAux),1)) | |
974 | for j in range(int(nDatas[i])): |
|
1117 | # ind += 1 | |
|
1118 | elif nDim == 2: | |||
|
1119 | for j in range(dsInfo['dsNumber']): | |||
975 | data[ind] = dataAux[j,:] |
|
1120 | data[ind] = dataAux[j,:] | |
976 | ind += 1 |
|
1121 | ind += 1 | |
977 |
|
|
1122 | elif nDim == 3: | |
978 | elif nDims[i] == 3: |
|
1123 | for j in range(dsInfo['dsNumber']): | |
979 | for j in range(int(nDatas[i])): |
|
|||
980 | # Extinct mode 0 |
|
|||
981 | # if (mode[i] == 0): |
|
|||
982 | # data[ind] = dataAux[j,:,:] |
|
|||
983 | # else: |
|
|||
984 | data[ind] = dataAux[:,j,:] |
|
1124 | data[ind] = dataAux[:,j,:] | |
985 | ind += 1 |
|
1125 | ind += 1 | |
986 |
|
1126 | |||
@@ -991,18 +1131,21 class HDF5Writer(Operation): | |||||
991 | ''' |
|
1131 | ''' | |
992 | Saves the block in the HDF5 file |
|
1132 | Saves the block in the HDF5 file | |
993 | ''' |
|
1133 | ''' | |
|
1134 | dsList = self.dsList | |||
|
1135 | ||||
994 | for i in range(len(self.ds)): |
|
1136 | for i in range(len(self.ds)): | |
|
1137 | dsInfo = dsList[i] | |||
|
1138 | nDim = dsInfo['nDim'] | |||
|
1139 | mode = dsInfo['mode'] | |||
995 |
|
1140 | |||
996 | # First time |
|
1141 | # First time | |
997 | if self.firsttime: |
|
1142 | if self.firsttime: | |
998 | # self.ds[i].resize(self.data[i].shape) |
|
1143 | # self.ds[i].resize(self.data[i].shape) | |
999 | # self.ds[i][self.blockIndex,:] = self.data[i] |
|
1144 | # self.ds[i][self.blockIndex,:] = self.data[i] | |
1000 | if type(self.data[i]) == numpy.ndarray: |
|
1145 | if type(self.data[i]) == numpy.ndarray: | |
1001 | nDims1 = len(self.ds[i].shape) |
|
|||
1002 |
|
1146 | |||
1003 |
if nDim |
|
1147 | if nDim == 3: | |
1004 | self.data[i] = self.data[i].reshape((self.data[i].shape[0],self.data[i].shape[1],1)) |
|
1148 | self.data[i] = self.data[i].reshape((self.data[i].shape[0],self.data[i].shape[1],1)) | |
1005 |
|
||||
1006 | self.ds[i].resize(self.data[i].shape) |
|
1149 | self.ds[i].resize(self.data[i].shape) | |
1007 |
|
1150 | |||
1008 | self.ds[i][:] = self.data[i] |
|
1151 | self.ds[i][:] = self.data[i] | |
@@ -1010,21 +1153,25 class HDF5Writer(Operation): | |||||
1010 |
|
1153 | |||
1011 | # From second time |
|
1154 | # From second time | |
1012 | # Meteors! |
|
1155 | # Meteors! | |
1013 |
if |
|
1156 | if mode == 2: | |
1014 | dataShape = self.data[i].shape |
|
1157 | dataShape = self.data[i].shape | |
1015 | dsShape = self.ds[i].shape |
|
1158 | dsShape = self.ds[i].shape | |
1016 | self.ds[i].resize((self.ds[i].shape[0] + dataShape[0],self.ds[i].shape[1])) |
|
1159 | self.ds[i].resize((self.ds[i].shape[0] + dataShape[0],self.ds[i].shape[1])) | |
1017 | self.ds[i][dsShape[0]:,:] = self.data[i] |
|
1160 | self.ds[i][dsShape[0]:,:] = self.data[i] | |
1018 |
# |
|
1161 | # No dimension | |
1019 |
elif |
|
1162 | elif mode == 0: | |
1020 | self.ds[i].resize((self.ds[i].shape[0], self.ds[i].shape[1] + 1)) |
|
1163 | self.ds[i].resize((self.ds[i].shape[0], self.ds[i].shape[1] + 1)) | |
1021 | self.ds[i][0,-1] = self.data[i] |
|
1164 | self.ds[i][0,-1] = self.data[i] | |
|
1165 | # One dimension | |||
|
1166 | elif nDim == 1: | |||
|
1167 | self.ds[i].resize((self.ds[i].shape[0] + 1, self.ds[i].shape[1])) | |||
|
1168 | self.ds[i][-1,:] = self.data[i] | |||
1022 | # Two dimension |
|
1169 | # Two dimension | |
1023 |
elif |
|
1170 | elif nDim == 2: | |
1024 | self.ds[i].resize((self.ds[i].shape[0] + 1,self.ds[i].shape[1])) |
|
1171 | self.ds[i].resize((self.ds[i].shape[0] + 1,self.ds[i].shape[1])) | |
1025 | self.ds[i][self.blockIndex,:] = self.data[i] |
|
1172 | self.ds[i][self.blockIndex,:] = self.data[i] | |
1026 | # Three dimensions |
|
1173 | # Three dimensions | |
1027 |
elif |
|
1174 | elif nDim == 3: | |
1028 | self.ds[i].resize((self.ds[i].shape[0],self.ds[i].shape[1],self.ds[i].shape[2]+1)) |
|
1175 | self.ds[i].resize((self.ds[i].shape[0],self.ds[i].shape[1],self.ds[i].shape[2]+1)) | |
1029 | self.ds[i][:,:,-1] = self.data[i] |
|
1176 | self.ds[i][:,:,-1] = self.data[i] | |
1030 |
|
1177 |
General Comments 0
You need to be logged in to leave comments.
Login now