@@ -122,6 +122,8 class JROData: | |||
|
122 | 122 | frequency = 49.92e6 |
|
123 | 123 | |
|
124 | 124 | realtime = False |
|
125 | ||
|
126 | beacon_heiIndexList = None | |
|
125 | 127 | |
|
126 | 128 | def __init__(self): |
|
127 | 129 | |
@@ -369,6 +371,9 class Spectra(JROData): | |||
|
369 | 371 | self.ippFactor = 1 |
|
370 | 372 | |
|
371 | 373 | self.noise = None |
|
374 | ||
|
375 | self.beacon_heiIndexList = [] | |
|
376 | ||
|
372 | 377 | |
|
373 | 378 | def getNoisebyHildebrand(self): |
|
374 | 379 | """ |
@@ -1030,6 +1030,166 class CoherenceMap(Figure): | |||
|
1030 | 1030 | if x[1] + (x[1]-x[0]) >= self.axesList[0].xmax: |
|
1031 | 1031 | self.__isConfig = False |
|
1032 | 1032 | |
|
1033 | class BeaconPhase(Figure): | |
|
1034 | ||
|
1035 | __isConfig = None | |
|
1036 | __nsubplots = None | |
|
1037 | ||
|
1038 | PREFIX = 'beacon_phase' | |
|
1039 | ||
|
1040 | def __init__(self): | |
|
1041 | ||
|
1042 | self.timerange = 24*60*60 | |
|
1043 | self.__isConfig = False | |
|
1044 | self.__nsubplots = 1 | |
|
1045 | self.counter_imagwr = 0 | |
|
1046 | self.WIDTH = 600 | |
|
1047 | self.HEIGHT = 300 | |
|
1048 | self.WIDTHPROF = 120 | |
|
1049 | self.HEIGHTPROF = 0 | |
|
1050 | self.xdata = None | |
|
1051 | self.ydata = None | |
|
1052 | ||
|
1053 | self.PLOT_CODE = 999999 | |
|
1054 | self.FTP_WEI = None | |
|
1055 | self.EXP_CODE = None | |
|
1056 | self.SUB_EXP_CODE = None | |
|
1057 | self.PLOT_POS = None | |
|
1058 | ||
|
1059 | def getSubplots(self): | |
|
1060 | ||
|
1061 | ncol = 1 | |
|
1062 | nrow = 1 | |
|
1063 | ||
|
1064 | return nrow, ncol | |
|
1065 | ||
|
1066 | def setup(self, id, nplots, wintitle, showprofile=True, show=True): | |
|
1067 | ||
|
1068 | self.__showprofile = showprofile | |
|
1069 | self.nplots = nplots | |
|
1070 | ||
|
1071 | ncolspan = 7 | |
|
1072 | colspan = 6 | |
|
1073 | self.__nsubplots = 2 | |
|
1074 | ||
|
1075 | self.createFigure(id = id, | |
|
1076 | wintitle = wintitle, | |
|
1077 | widthplot = self.WIDTH+self.WIDTHPROF, | |
|
1078 | heightplot = self.HEIGHT+self.HEIGHTPROF, | |
|
1079 | show=show) | |
|
1080 | ||
|
1081 | nrow, ncol = self.getSubplots() | |
|
1082 | ||
|
1083 | self.addAxes(nrow, ncol*ncolspan, 0, 0, colspan, 1) | |
|
1084 | ||
|
1085 | ||
|
1086 | def run(self, dataOut, id, wintitle="", pairsList=None, showprofile='True', | |
|
1087 | xmin=None, xmax=None, ymin=None, ymax=None, | |
|
1088 | timerange=None, | |
|
1089 | save=False, figpath='./', figfile=None, show=True, ftp=False, wr_period=1, | |
|
1090 | server=None, folder=None, username=None, password=None, | |
|
1091 | ftp_wei=0, exp_code=0, sub_exp_code=0, plot_pos=0): | |
|
1092 | ||
|
1093 | if pairsList == None: | |
|
1094 | pairsIndexList = dataOut.pairsIndexList | |
|
1095 | else: | |
|
1096 | pairsIndexList = [] | |
|
1097 | for pair in pairsList: | |
|
1098 | if pair not in dataOut.pairsList: | |
|
1099 | raise ValueError, "Pair %s is not in dataOut.pairsList" %(pair) | |
|
1100 | pairsIndexList.append(dataOut.pairsList.index(pair)) | |
|
1101 | ||
|
1102 | if pairsIndexList == []: | |
|
1103 | return | |
|
1104 | ||
|
1105 | if len(pairsIndexList) > 4: | |
|
1106 | pairsIndexList = pairsIndexList[0:4] | |
|
1107 | ||
|
1108 | if timerange != None: | |
|
1109 | self.timerange = timerange | |
|
1110 | ||
|
1111 | tmin = None | |
|
1112 | tmax = None | |
|
1113 | x = dataOut.getTimeRange() | |
|
1114 | y = dataOut.getHeiRange() | |
|
1115 | ||
|
1116 | ||
|
1117 | #thisDatetime = dataOut.datatime | |
|
1118 | thisDatetime = datetime.datetime.utcfromtimestamp(dataOut.getTimeRange()[1]) | |
|
1119 | title = wintitle + " Phase of Beacon Signal" # : %s" %(thisDatetime.strftime("%d-%b-%Y")) | |
|
1120 | xlabel = "Local Time" | |
|
1121 | ylabel = "Phase" | |
|
1122 | ||
|
1123 | nplots = len(pairsIndexList) | |
|
1124 | #phase = numpy.zeros((len(pairsIndexList),len(dataOut.beacon_heiIndexList))) | |
|
1125 | phase_beacon = numpy.zeros(len(pairsIndexList)) | |
|
1126 | for i in range(nplots): | |
|
1127 | pair = dataOut.pairsList[pairsIndexList[i]] | |
|
1128 | ccf = numpy.average(dataOut.data_cspc[pairsIndexList[i],:,:],axis=0) | |
|
1129 | powa = numpy.average(dataOut.data_spc[pair[0],:,:],axis=0) | |
|
1130 | powb = numpy.average(dataOut.data_spc[pair[1],:,:],axis=0) | |
|
1131 | avgcoherenceComplex = ccf/numpy.sqrt(powa*powb) | |
|
1132 | phase = numpy.arctan2(avgcoherenceComplex.imag, avgcoherenceComplex.real)*180/numpy.pi | |
|
1133 | ||
|
1134 | #print "Phase %d%d" %(pair[0], pair[1]) | |
|
1135 | #print phase[dataOut.beacon_heiIndexList] | |
|
1136 | ||
|
1137 | phase_beacon[i] = numpy.average(phase[dataOut.beacon_heiIndexList]) | |
|
1138 | ||
|
1139 | if not self.__isConfig: | |
|
1140 | ||
|
1141 | nplots = len(pairsIndexList) | |
|
1142 | ||
|
1143 | self.setup(id=id, | |
|
1144 | nplots=nplots, | |
|
1145 | wintitle=wintitle, | |
|
1146 | showprofile=showprofile, | |
|
1147 | show=show) | |
|
1148 | ||
|
1149 | tmin, tmax = self.getTimeLim(x, xmin, xmax) | |
|
1150 | if ymin == None: ymin = numpy.nanmin(phase_beacon) - 10.0 | |
|
1151 | if ymax == None: ymax = numpy.nanmax(phase_beacon) + 10.0 | |
|
1152 | ||
|
1153 | self.FTP_WEI = ftp_wei | |
|
1154 | self.EXP_CODE = exp_code | |
|
1155 | self.SUB_EXP_CODE = sub_exp_code | |
|
1156 | self.PLOT_POS = plot_pos | |
|
1157 | ||
|
1158 | self.name = thisDatetime.strftime("%Y%m%d_%H%M%S") | |
|
1159 | ||
|
1160 | ||
|
1161 | self.name = thisDatetime.strftime("%Y%m%d_%H%M%S") | |
|
1162 | self.__isConfig = True | |
|
1163 | ||
|
1164 | self.xdata = numpy.array([]) | |
|
1165 | self.ydata = numpy.array([]) | |
|
1166 | ||
|
1167 | self.setWinTitle(title) | |
|
1168 | ||
|
1169 | ||
|
1170 | title = "Beacon Signal %s" %(thisDatetime.strftime("%Y/%m/%d %H:%M:%S")) | |
|
1171 | ||
|
1172 | legendlabels = ["pairs %d%d"%(pair[0], pair[1]) for pair in dataOut.pairsList] | |
|
1173 | ||
|
1174 | axes = self.axesList[0] | |
|
1175 | ||
|
1176 | self.xdata = numpy.hstack((self.xdata, x[0:1])) | |
|
1177 | ||
|
1178 | if len(self.ydata)==0: | |
|
1179 | self.ydata = phase_beacon.reshape(-1,1) | |
|
1180 | else: | |
|
1181 | self.ydata = numpy.hstack((self.ydata, phase_beacon.reshape(-1,1))) | |
|
1182 | ||
|
1183 | ||
|
1184 | axes.pmultilineyaxis(x=self.xdata, y=self.ydata, | |
|
1185 | xmin=tmin, xmax=tmax, ymin=ymin, ymax=ymax, | |
|
1186 | xlabel=xlabel, ylabel=ylabel, title=title, legendlabels=legendlabels, marker='x', markersize=8, linestyle="solid", | |
|
1187 | XAxisAsTime=True, grid='both' | |
|
1188 | ) | |
|
1189 | ||
|
1190 | self.draw() | |
|
1191 | ||
|
1192 | ||
|
1033 | 1193 | class Noise(Figure): |
|
1034 | 1194 | |
|
1035 | 1195 | __isConfig = None |
@@ -918,6 +918,41 class SpectraProc(ProcessingUnit): | |||
|
918 | 918 | |
|
919 | 919 | return 1 |
|
920 | 920 | |
|
921 | def getBeaconSignal(self, tauindex = 0, channelindex = 0): | |
|
922 | newheis = numpy.where(self.dataOut.heightList>self.dataOut.radarControllerHeaderObj.Taus[tauindex]) | |
|
923 | minIndex = min(newheis[0]) | |
|
924 | maxIndex = max(newheis[0]) | |
|
925 | data_spc = self.dataOut.data_spc[:,:,minIndex:maxIndex+1] | |
|
926 | heightList = self.dataOut.heightList[minIndex:maxIndex+1] | |
|
927 | ||
|
928 | # determina indices | |
|
929 | nheis = int(self.dataOut.radarControllerHeaderObj.txB/(self.dataOut.heightList[1]-self.dataOut.heightList[0])) | |
|
930 | avg_dB = 10*numpy.log10(numpy.sum(data_spc[channelindex,:,:],axis=0)) | |
|
931 | beacon_dB = numpy.sort(avg_dB)[-nheis:] | |
|
932 | beacon_heiIndexList = [] | |
|
933 | for val in avg_dB.tolist(): | |
|
934 | if val >= beacon_dB[0]: | |
|
935 | beacon_heiIndexList.append(avg_dB.tolist().index(val)) | |
|
936 | ||
|
937 | #data_spc = data_spc[:,:,beacon_heiIndexList] | |
|
938 | data_cspc = None | |
|
939 | if self.dataOut.data_cspc != None: | |
|
940 | data_cspc = self.dataOut.data_cspc[:,:,minIndex:maxIndex+1] | |
|
941 | #data_cspc = data_cspc[:,:,beacon_heiIndexList] | |
|
942 | ||
|
943 | data_dc = None | |
|
944 | if self.dataOut.data_dc != None: | |
|
945 | data_dc = self.dataOut.data_dc[:,minIndex:maxIndex+1] | |
|
946 | #data_dc = data_dc[:,beacon_heiIndexList] | |
|
947 | ||
|
948 | self.dataOut.data_spc = data_spc | |
|
949 | self.dataOut.data_cspc = data_cspc | |
|
950 | self.dataOut.data_dc = data_dc | |
|
951 | self.dataOut.heightList = heightList | |
|
952 | self.dataOut.beacon_heiIndexList = beacon_heiIndexList | |
|
953 | ||
|
954 | return 1 | |
|
955 | ||
|
921 | 956 | |
|
922 | 957 | def selectHeightsByIndex(self, minIndex, maxIndex): |
|
923 | 958 | """ |
General Comments 0
You need to be logged in to leave comments.
Login now