From 7a2e623de866c797b759ca8b91c8896d4e724e4b Mon Sep 17 00:00:00 2001 From: weisse02 <andreas.weissenbrunner@ptb.de> Date: Thu, 10 Nov 2022 16:36:28 +0100 Subject: [PATCH] make uncertainty calculation only for one case --- GUI_Elbow.py | 107 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 63 insertions(+), 44 deletions(-) diff --git a/GUI_Elbow.py b/GUI_Elbow.py index 9eb15ca..fc7c14c 100644 --- a/GUI_Elbow.py +++ b/GUI_Elbow.py @@ -622,50 +622,66 @@ class mainPanel(wx.Panel): # def OnClicked_btn_uncertainty(self,e): # calculate the uncertainty for the flow meter + # calculate for the whole dataset + calc_all = False + if self.pathint.any(): - if flow.case == "SingleElbow": - self.fm_mean = np.zeros((len(flow.Rk),len(flow.dist),len(flow.phi))) - self.fm_std = np.zeros((len(flow.Rk),len(flow.dist),len(flow.phi))) - for i,rc in enumerate(flow.Rk): - for j,dist in enumerate(flow.dist): - for k,phi in enumerate(flow.phi[:,0]): - self.fm_mean[i,j,k], self.fm_std[i,j,k] = self.get_uncertainty(rc,0,dist,phi) + if calc_all: + if flow.case == "SingleElbow": + self.fm_mean = np.zeros((len(flow.Rk),len(flow.dist),len(flow.phi))) + self.fm_std = np.zeros((len(flow.Rk),len(flow.dist),len(flow.phi))) + for i,rc in enumerate(flow.Rk): + for j,dist in enumerate(flow.dist): + for k,phi in enumerate(flow.phi[:,0]): + self.fm_mean[i,j,k], self.fm_std[i,j,k] = self.get_uncertainty(rc,0,dist,phi) + # # - # - print(rc) - # - self.regint_mean = interpol.RegularGridInterpolator((flow.Rk,flow.dist,flow.phi[:,0]),self.fm_mean,bounds_error = False,fill_value=None) - self.regint_std = interpol.RegularGridInterpolator((flow.Rk,flow.dist,flow.phi[:,0]),self.fm_std,bounds_error = False,fill_value=None) - else: - self.fm_mean = np.zeros((len(flow.Rk),len(flow.dl),len(flow.dist),len(flow.phi))) - self.fm_std = np.zeros((len(flow.Rk),len(flow.dl),len(flow.dist),len(flow.phi))) - for i,rc in enumerate(flow.Rk): - for j,dl in enumerate(flow.dl): - for k,dist in enumerate(flow.dist): - for p,phi in enumerate(flow.phi[:,0]): - self.fm_mean[i,j,k,p], self.fm_std[i,j,k,p] = self.get_uncertainty(rc,dl,dist,phi) + print(rc) + # end loops + self.regint_mean = interpol.RegularGridInterpolator((flow.Rk,flow.dist,flow.phi[:,0]),self.fm_mean,bounds_error = False,fill_value=None) + self.regint_std = interpol.RegularGridInterpolator((flow.Rk,flow.dist,flow.phi[:,0]),self.fm_std,bounds_error = False,fill_value=None) + else: + self.fm_mean = np.zeros((len(flow.Rk),len(flow.dl),len(flow.dist),len(flow.phi))) + self.fm_std = np.zeros((len(flow.Rk),len(flow.dl),len(flow.dist),len(flow.phi))) + for i,rc in enumerate(flow.Rk): + for j,dl in enumerate(flow.dl): + for k,dist in enumerate(flow.dist): + for p,phi in enumerate(flow.phi[:,0]): + self.fm_mean[i,j,k,p], self.fm_std[i,j,k,p] = self.get_uncertainty(rc,dl,dist,phi) + # # # - # - print(rc) + print(rc) + # end loops + self.regint_mean = interpol.RegularGridInterpolator((flow.Rk,flow.dl,flow.dist,flow.phi[:,0]),self.fm_mean,bounds_error = False,fill_value=None) + self.regint_std = interpol.RegularGridInterpolator((flow.Rk,flow.dl,flow.dist,flow.phi[:,0]),self.fm_std,bounds_error = False,fill_value=None) # - self.regint_mean = interpol.RegularGridInterpolator((flow.Rk,flow.dl,flow.dist,flow.phi[:,0]),self.fm_mean,bounds_error = False,fill_value=None) - self.regint_std = interpol.RegularGridInterpolator((flow.Rk,flow.dl,flow.dist,flow.phi[:,0]),self.fm_std,bounds_error = False,fill_value=None) - # + # the uncertainty is only calculated for the one case that is selected + else: + self.fm_mean = np.zeros((len(flow.dist),len(flow.phi))) + self.fm_std = np.zeros((len(flow.dist),len(flow.phi))) + print("calculating uncertainty for distance:") + for j,dist in enumerate(flow.dist): + print(dist) + for k,phi in enumerate(flow.phi[:,0]): + self.fm_mean[j,k], self.fm_std[j,k] = self.get_uncertainty(self.Rc,self.dl,dist,phi) + # + self.regint_mean = interpol.RegularGridInterpolator((flow.dist,flow.phi[:,0]),self.fm_mean,bounds_error = False,fill_value=None) + self.regint_std = interpol.RegularGridInterpolator((flow.dist,flow.phi[:,0]),self.fm_std,bounds_error = False,fill_value=None) self.draw_meter() # def interpol_meter(self,Rc,dl,dist,phi): y_u = np.zeros(0) if flow.case == "SingleElbow": if self.fm_mean.any(): - y = self.regint_mean((Rc,dist,phi)) - y_u = self.regint_std((Rc,dist,phi)) + y = self.regint_mean((dist,phi)) + y_u = self.regint_std((dist,phi)) else: y = self.regint_fm((Rc,dist,phi)) else: if self.fm_mean.any(): - y = self.regint_mean((Rc,dl,dist,phi)) - y_u = self.regint_std((Rc,dl,dist,phi)) + y = self.regint_mean((dist,phi)) + y_u = self.regint_std((dist,phi)) else: y = self.regint_fm((Rc,dl,dist,phi)) return y, y_u @@ -737,32 +753,35 @@ class mainPanel(wx.Panel): self.ax_meter.set_xlabel(xlabel) self.ax_meter.set_ylabel(ylabel) self.ax_meter.plot(x,y,'-') - - - + # + # get the y-limits of the plot ymin = self.ax_meter.get_ylim()[0] ymax = self.ax_meter.get_ylim()[1] - ydiff = ymax-ymin - #print(ydiff) - if ydiff < ylimiter: - ymin = self.ax_meter.get_ylim()[0]-(ylimiter-ydiff)/2 - ymax = self.ax_meter.get_ylim()[1]+(ylimiter-ydiff)/2 - # print("min") - # print(ymin) - # print("max") - # print(ymax) - self.ax_meter.set_ylim(ymin,ymax) # - # the line-plot of the selected parameter within the x axes - self.ax_meter.plot([x_selected,x_selected],[ymin,ymax],'r-',linewidth=1) if y_u.any(): self.ax_meter.fill_between(x, y - y_u, y + y_u, facecolor='green', alpha = 0.3, interpolate=True, label="std") + # if the axis zoom is too large set the axis limits to be larger + ymin = self.ax_meter.get_ylim()[0] + ymax = self.ax_meter.get_ylim()[1] self.ax_meter.text(x_selected, ymin, " " + str(np.round(np.interp(x_selected,x, y),2)) + " | " + str(np.round(np.interp(x_selected,x, y_u),2)), fontsize=14,color='r') + else: self.ax_meter.text(x_selected, ymin, " " + str(np.round(np.interp(x_selected,x, y),2)), fontsize=14,color='r') + # + # if the axis zoom is too large set the axis limits to be larger + ydiff = ymax -ymin + #print(ydiff) + if ydiff < ylimiter: + ymin = self.ax_meter.get_ylim()[0]-(ylimiter-ydiff)/2 + ymax = self.ax_meter.get_ylim()[1]+(ylimiter-ydiff)/2 + # set the axis limits of the y axis + self.ax_meter.set_ylim(ymin,ymax) + + # the line-plot of the selected parameter within the x axes + self.ax_meter.plot([x_selected,x_selected],[ymin,ymax],'r-',linewidth=1) self.ax_meter.grid("on") self.fig_meter.tight_layout() -- GitLab