From e8045267b919666061202f9db9aac2b85d212ef0 Mon Sep 17 00:00:00 2001 From: Jessica Laible <jessica.laible@inrae.fr> Date: Tue, 26 Sep 2023 18:50:20 +0200 Subject: [PATCH] Alpha BD determination corrected --- Analysis_solid_gauging.py | 17 +- classes/SDC_fines_method.py | 31 +- classes/SDC_method.py | 154 ++---- classes/Sed_flux_big_bend.py | 74 +-- classes/Sed_flux_big_straight.py | 71 +-- classes/Sed_flux_small_bend.py | 63 +-- classes/Sed_flux_small_straight.py | 65 +-- classes/Sediment_flux_BD_single.py | 18 +- classes/Uncertainty_estimation.py | 451 +++++++----------- .../SDC_fines_method.cpython-38.pyc | Bin 17500 -> 17359 bytes classes/__pycache__/SDC_method.cpython-38.pyc | Bin 17281 -> 17304 bytes .../Sed_flux_big_bend.cpython-38.pyc | Bin 3784 -> 4616 bytes .../Sed_flux_big_straight.cpython-38.pyc | Bin 3743 -> 4718 bytes .../Sed_flux_small_bend.cpython-38.pyc | Bin 3773 -> 4657 bytes .../Sed_flux_small_straight.cpython-38.pyc | Bin 3770 -> 4704 bytes .../Sediment_flux_BD_single.cpython-38.pyc | Bin 2960 -> 2988 bytes .../Uncertainty_estimation.cpython-38.pyc | Bin 22208 -> 21419 bytes path_files.txt | 2 +- 18 files changed, 389 insertions(+), 557 deletions(-) diff --git a/Analysis_solid_gauging.py b/Analysis_solid_gauging.py index a4de37b..8792463 100644 --- a/Analysis_solid_gauging.py +++ b/Analysis_solid_gauging.py @@ -40,6 +40,7 @@ path_R = 'C:/Users/jessica.laible/AppData/Local/Programs/R/R-4.2.1/bin/x64/Rscri # vertical distance above the bottom (BD) position_diver = 0.12 # (m) HADCP_option = True # Choose if HADCP section or not +add_plots = False # Choose if additional plots should be made # Add paths to system cwd = os.getcwd() @@ -246,11 +247,11 @@ if choice[3] == 0: for i in range(len(analysis_data)): meas = analysis_data.iloc[i,:] if meas['Sampler'] == 'BD': - sand_flux_point_i = sediment_flux_BD(outpath_figures, meas, choice, unit) + sand_flux_point_i = sediment_flux_BD(outpath_figures, meas, choice, unit, add_plots) sand_flux_point.append(sand_flux_point_i) concentration_sand_point.append(np.nan) elif meas['Sampler'] == 'BD_C': - sand_flux_point_i = sediment_flux_BD_C(outpath_figures, meas, choice, unit) + sand_flux_point_i = sediment_flux_BD_C(outpath_figures, meas, choice, unit, add_plots) sand_flux_point.append(sand_flux_point_i) concentration_sand_point.append(np.nan) concentration_fines.append(np.nan) @@ -297,12 +298,12 @@ elif choice[3] == 1: for i in range(len(analysis_data)): meas = analysis_data.iloc[i,:] if meas['Sampler'] == 'BD': - sand_flux_point_i, c_sand_point_g_l_from_flux_i = sediment_flux_BD(outpath_figures, meas, choice, unit) - sand_flux_point.append(sand_flux_point_i) + sand_flux_point_i, c_sand_point_g_l_from_flux_i = sediment_flux_BD(outpath_figures, meas, choice, unit, add_plots) + sand_flux_point.append(sand_flux_point_i) concentration_sand_point.append(c_sand_point_g_l_from_flux_i) concentration_fines.append(np.nan) elif meas['Sampler'] == 'BD_C': - sand_flux_point_i, c_sand_point_g_l_from_flux_i = sediment_flux_BD_C(outpath_figures, meas, choice, unit) + sand_flux_point_i, c_sand_point_g_l_from_flux_i = sediment_flux_BD_C(outpath_figures, meas, choice, uni, add_plotst) sand_flux_point.append(sand_flux_point_i) concentration_sand_point.append(c_sand_point_g_l_from_flux_i) concentration_fines.append(np.nan) @@ -396,11 +397,11 @@ if choice[2] == 1 and choice[3] == 0 and number_gsd >= 2: # if no ADCP-data avai #%% Uncertainty estimation analysis_data, U_F, uncertainty, u_p, u_param, maxpost, maxpost_alpha, maxpost_lnCr = uncertainty_analysis(analysis_data, outpath, outpath_figures, sampling_date, - choice, v2_d_index, summary_ISO, summary_fine, map_data, cwd, path_R) + choice, v2_d_index, summary_ISO, summary_fine, map_data, cwd, path_R, add_plots) #%% SDC method analysis_data, summary_SDC, Conc_SDC_cell_export, sand_flux_SDC_kg_s_export = SDC_method(analysis_data, map_data, outpath, - outpath_figures, sampling_date, maxpost, maxpost_alpha, maxpost_lnCr) + outpath_figures, sampling_date, maxpost, maxpost_alpha, maxpost_lnCr, add_plots) #%% Compare results from different methods @@ -419,7 +420,7 @@ if choice[3] == 1: ax=ax, width=0.6, rot= 0 ) ax.set_xlim(-0.5,4.5) - ax.set_ylabel('$\mathregular{\overline{C}_{sand}}$ (g/l)', fontsize = 16, weight = 'bold') + ax.set_ylabel('$\mathregular{\overline{C_{sand}}}$ (g/l)', fontsize = 16, weight = 'bold') ax.set_xlabel('Method', fontsize = 16, weight = 'bold') ax.tick_params(axis='both', which='major', labelsize = 14) fig.tight_layout() diff --git a/classes/SDC_fines_method.py b/classes/SDC_fines_method.py index 632b9a7..ea5e12e 100644 --- a/classes/SDC_fines_method.py +++ b/classes/SDC_fines_method.py @@ -55,11 +55,11 @@ def SDC_fines_method(analysis_data, map_data, outpath, outpath_figures, sampling most_frequent_sampler= analysis_data['Sampler'].value_counts().idxmax() # Fontsizes - fontsize_axis = 14 - fontsize_legend = 14 - fontsize_legend_title = 14 - fontsize_text = 14 - fontsize_ticks = 12 + fontsize_axis = 16 + fontsize_legend = 16 + fontsize_legend_title = 16 + fontsize_text = 16 + fontsize_ticks = 14 #%% SDC_fines profile stats_SDC_fines_profile = [] @@ -272,16 +272,14 @@ def SDC_fines_method(analysis_data, map_data, outpath, outpath_figures, sampling # Add color bar and axis labels cb = fig.colorbar(c, pad=0.02, shrink=0.7, anchor=(0, 0.1)) cb.ax.set_ylabel(canvas.tr('$\mathregular{C_{fine}}$ (g/l)'), weight = 'bold') - cb.ax.yaxis.label.set_fontsize(12) - cb.ax.tick_params(labelsize=12) + cb.ax.yaxis.label.set_fontsize(16) + cb.ax.tick_params(labelsize=14) fig.ax.invert_yaxis() fig.ax.fill_between(x_fill, np.nanmax(track_depth)+2, depth_fill, color='w') # below bathy fig.ax.plot(track, track_depth, color='k', linewidth=1.5) # bathy - fig.ax.set_xlabel(canvas.tr('Distance (m)'), fontsize = fontsize_axis, weight = 'bold') - fig.ax.set_ylabel(canvas.tr('Depth (m)'), fontsize = fontsize_axis, weight = 'bold') - fig.ax.xaxis.label.set_fontsize(12) - fig.ax.yaxis.label.set_fontsize(12) + fig.ax.set_xlabel(canvas.tr('Distance (m)'), fontsize = fontsize_axis+6, weight = 'bold') + fig.ax.set_ylabel(canvas.tr('Depth (m)'), fontsize = fontsize_axis+6, weight = 'bold') fig.ax.tick_params(axis='both', direction='in', bottom=True, top=True, left=True, right=True) fig.ax.set_ylim(top=0, bottom=np.nanmax(track_depth)+0.3) lower_limit = track[0]-0.5 @@ -298,10 +296,10 @@ def SDC_fines_method(analysis_data, map_data, outpath, outpath_figures, sampling legend = fig.ax.legend(loc = 'upper right', fontsize=fontsize_legend, title = 'Sampler', bbox_to_anchor=(1.17, 1)) plt.setp(legend.get_title(), fontsize = fontsize_legend_title) - fig.ax.text(1.9, 0.12, '$\overline{C}_{fine}$ = ' + str(np.round(Conc_mean_SDC_fines,3)) + ' g/l', + fig.ax.text(2.2, 0.1, '$\overline{C_{\mathregular{fine}}}$ = ' + str(np.round(Conc_mean_SDC_fines,3)) + ' g/l', transform = ax.transAxes, fontsize = fontsize_text) - fig.ax.text(2.7, 0.12, '$\Phi_{total}$ = ' + str(np.round(total_fine_flux_SDC_kg_s,0)) + ' kg/s', transform = ax.transAxes, - fontsize = fontsize_text) + # fig.ax.text(2.7, 0.12, '$\Phi_{total}$ = ' + str(np.round(total_fine_flux_SDC_kg_s,0)) + ' kg/s', transform = ax.transAxes, + # fontsize = fontsize_text) canvas.draw() show_figure(fig) @@ -663,7 +661,6 @@ def SDC_fines_method(analysis_data, map_data, outpath, outpath_figures, sampling cb.ax.set_yticklabels(['0.01','0.1','0.2','0.4','0.6','0.8','1.2','2.0','3.0', '4.0', '5.0','6.0','7.0', '10.0'],ha='right') cb.ax.yaxis.set_tick_params(pad=35) cb.ax.set_ylabel(canvas.tr('$\mathregular{C_{fine}/C_{sand}}$'), fontsize = fontsize_axis, weight = 'bold') - cb.ax.yaxis.label.set_fontsize(12) cb.ax.tick_params(labelsize=12) fig.ax.invert_yaxis() fig.ax.fill_between(x_fill, np.nanmax(track_depth)+2, depth_fill, color='w') # below bathy @@ -671,8 +668,6 @@ def SDC_fines_method(analysis_data, map_data, outpath, outpath_figures, sampling fig.ax.set_xlabel(canvas.tr('Distance (m)'), fontsize = fontsize_axis, weight = 'bold') fig.ax.set_ylabel(canvas.tr('Depth (m)'), fontsize = fontsize_axis, weight = 'bold') - fig.ax.xaxis.label.set_fontsize(12) - fig.ax.yaxis.label.set_fontsize(12) fig.ax.tick_params(axis='both', direction='in', bottom=True, top=True, left=True, right=True) fig.ax.set_ylim(top=0, bottom=np.nanmax(track_depth)+0.3) lower_limit = track[0]-0.5 @@ -689,7 +684,7 @@ def SDC_fines_method(analysis_data, map_data, outpath, outpath_figures, sampling legend = fig.ax.legend(loc = 'upper right', fontsize=fontsize_legend, title = 'Sampler', bbox_to_anchor=(1.17, 1)) plt.setp(legend.get_title(), fontsize = fontsize_legend_title) - fig.ax.text(2, 0.12, '$\overline{C_{fine}/C_{sand}}$ = ' + str(np.round(mean_ratio,3)), + fig.ax.text(2, 0.1, '$\overline{C_{fine}/C_{sand}}$ = ' + str(np.round(mean_ratio,3)), transform = ax.transAxes, fontsize = fontsize_text) canvas.draw() diff --git a/classes/SDC_method.py b/classes/SDC_method.py index 272dcbe..5ebecbb 100644 --- a/classes/SDC_method.py +++ b/classes/SDC_method.py @@ -32,7 +32,7 @@ from Common_functions import show_figure import matplotlib.colors as colors -def SDC_method(analysis_data, map_data, outpath, outpath_figures, sampling_date, maxpost, maxpost_alpha, maxpost_lnCr): +def SDC_method(analysis_data, map_data, outpath, outpath_figures, sampling_date, maxpost, maxpost_alpha, maxpost_lnCr, add_plots): #%% abscissa_values = (analysis_data['Abscissa']).unique().tolist() @@ -167,130 +167,36 @@ def SDC_method(analysis_data, map_data, outpath, outpath_figures, sampling_date, figname = '_Conc_profiles_log_SDC_unc_article' + most_frequent_sampler fig.savefig(outpath_figures + sampling_date + figname + '.png', dpi = 400, bbox_inches='tight') - - - #%% Exponential profile - # stats_vertical_profile = [] - # x_ranges_vertical = [] - - # for i in range(len(abscissa_values)): - # x = np.array(analysis_data['z_h'][analysis_data['Abscissa'] == abscissa_values[i]]) - # Y = np.log(np.array(analysis_data['Concentration_sand_g_l'][analysis_data['Abscissa'] == abscissa_values[i]])) - # array_x_vertical = np.linspace(1, 0, num=100) - # x_ranges_vertical.append(array_x_vertical) - - # res = stats.linregress(x, Y) - # # correct slope (increasing C with depth) - # res = list(res) - # if res[0] >= 0: - # res[0] = -0.2 - # res[1] = np.max(Y) - # res[2] = np.nan - # print('Slope and intercept of the SDC sand profile corrected for vertical i = ' + str(i)) - # stats_vertical_profile.append(res) - - # x_ranges_vertical = pd.DataFrame(x_ranges_vertical) - # stats_vertical_profile = pd.DataFrame(stats_vertical_profile) - # stats_vertical_profile.columns = ['slope', 'intercept','rvalue', 'pvalue', 'stderr'] - # stats_vertical_profile['Cr_vertical'] = np.exp(stats_vertical_profile['intercept']) - # stats_vertical_profile['Crh_vertical'] = stats_vertical_profile['Cr_vertical']/depth_verticals - # stats_vertical_profile['alphah_vertical'] = -(stats_vertical_profile['slope']) - # stats_vertical_profile['alpha_vertical'] = stats_vertical_profile['alphah_vertical']/depth_verticals - # stats_vertical_profile['R2'] = stats_vertical_profile['rvalue']**2 - - # Conc_vertical_profile = pd.DataFrame([np.exp(stats_vertical_profile['intercept'][i])*np.exp(stats_vertical_profile['slope'][i]*x_ranges_vertical.iloc[i,:]) - # for i in range(len(stats_vertical_profile))]) - - -#%% Plot all vertical profiles in one graph - # fig, ax = plt.subplots(figsize=(10, 6), dpi = 100) - - # for i in range(len(abscissa_values)): - # ax.plot(Conc_vertical_profile.iloc[i,:], x_ranges_vertical.iloc[i,:], - # linestyle = '-', linewidth = 2, color = colorss[i], - # label = str(abscissa_values[i])) - - # ax.plot(analysis_data['Concentration_sand_g_l'][analysis_data['Abscissa']== abscissa_values[i]], - # analysis_data['z_h'][analysis_data['Abscissa']== abscissa_values[i]], - # color = colorss[i], linestyle = ' ', - # markersize = 9, marker = markerss[i], - # markeredgewidth = 0.2, markeredgecolor = 'black') - # # ax.text(0.02, 1, 'a)', fontsize = 14) - # legend = ax.legend(fontsize = fontsize_legend, title = 'Abscissa', - # loc = 'upper right', facecolor = 'white', framealpha = 1, bbox_to_anchor = (1.2,1)) - # plt.setp(legend.get_title(), fontsize=fontsize_legend_title) - - # ax.set_ylim(-0.05,1.05) - # ax.set_xlim(0) - # ax.set_ylabel('z/h (-)', fontsize = fontsize_axis, weight = 'bold') - # ax.set_xlabel('Concentration (g/l)', fontsize = fontsize_axis, weight = 'bold') - # ax.grid(linewidth = 0.2) - # ax.tick_params(axis='both', which='major', labelsize = fontsize_ticks) - # fig.tight_layout() - # figname = '_Conc_profiles_SDC' + most_frequent_sampler - # fig.savefig(outpath_figures + sampling_date + figname + '.png', dpi = 200, bbox_inches='tight') - - # # log-scale - # cmap = plt.cm.get_cmap('nipy_spectral') - # colorss = cmap(np.linspace(0,1,len(abscissa_values))) - - # fig, ax = plt.subplots(figsize=(10, 6), dpi = 100) - - # for i in range(len(abscissa_values)): - # ax.plot(Conc_vertical_profile.iloc[i,:], x_ranges_vertical.iloc[i,:], - # linestyle = '-', linewidth = 2, color = colorss[i], - # label = str(abscissa_values[i])) - - # ax.plot(analysis_data['Concentration_sand_g_l'][analysis_data['Abscissa']== abscissa_values[i]], - # analysis_data['z_h'][analysis_data['Abscissa']== abscissa_values[i]], - # color = colorss[i], linestyle = ' ', - # markersize = 9, marker = markerss[i], - # markeredgewidth = 0.2, markeredgecolor = 'black') - - # legend = ax.legend(fontsize = fontsize_legend, title = 'Abscissa', - # loc = 'upper right', facecolor = 'white', framealpha = 1, bbox_to_anchor = (1.2,1)) - # plt.setp(legend.get_title(), fontsize=fontsize_legend_title) - - # ax.set_xscale('log') - # ax.set_ylim(-0.05,1.05) - # #ax.set_xlim(0) - # ax.set_ylabel('z/h (-)', fontsize = fontsize_axis, weight = 'bold') - # ax.set_xlabel('Concentration (g/l)', fontsize = fontsize_axis, weight = 'bold') - # ax.grid(linewidth = 0.2) - # ax.tick_params(axis='both', which='major', labelsize = fontsize_ticks) - # fig.tight_layout() - # figname = '_Conc_profiles_log_SDC_' + most_frequent_sampler - # fig.savefig(outpath_figures + sampling_date + figname + '.png', dpi = 200, bbox_inches='tight') - #%% Plot vertical profiles for each abscissa - for i in range(len(abscissa_values)): - fig, ax = plt.subplots(figsize=(10, 6), dpi = 100) - ax.invert_yaxis() - ax.plot(maxpost_g_l.iloc[:,i], x_ranges_vertical[:], - linestyle = '-', linewidth = 2, color = colorss[i], label = 'Abscissa ' + str(i +1)) - - ax.plot(analysis_data['Concentration_sand_g_l'][analysis_data['Abscissa']== abscissa_values[i]], - analysis_data['z_h'][analysis_data['Abscissa']== abscissa_values[i]], - color = colorss[i], linestyle = ' ', - markersize = 9, marker = markerss[i], - markeredgewidth = 0.2, markeredgecolor = 'black') - - a = np.round(maxpost_alpha[i], 2) - b = np.round(maxpost_lnCr[i], 2) - # ax.text(0.75, 0.92, '$y=%3.7s*e^{%3.7sx}$'%(a, b), - # transform=ax.transAxes, fontsize = fontsize_text) - # ax.text(0.75, 0.85, '${R²}$ = ' + str(np.round(stats_vertical_profile['R2'][i], 2)), - # transform=ax.transAxes, fontsize = fontsize_text) - - ax.set_ylim(-0.05,1.05) - #ax.set_xlim(0) - ax.set_ylabel('z/h (-)', fontsize = 16, weight = 'bold') - ax.set_xlabel('Concentration (g/l)', fontsize = 16, weight = 'bold') - ax.grid(linewidth = 0.2) - ax.tick_params(axis='both', which='major', labelsize = 14) - fig.tight_layout() - figname = sampling_date + '_Conc_profiles_SDC_' - fig.savefig(outpath_figures + figname + str(abscissa_values[i]) + '_' + most_frequent_sampler + '.png', dpi = 200, bbox_inches='tight') + if add_plots == True: + for i in range(len(abscissa_values)): + fig, ax = plt.subplots(figsize=(10, 6), dpi = 100) + ax.invert_yaxis() + ax.plot(maxpost_g_l.iloc[:,i], x_ranges_vertical[:], + linestyle = '-', linewidth = 2, color = colorss[i], label = 'Abscissa ' + str(i +1)) + + ax.plot(analysis_data['Concentration_sand_g_l'][analysis_data['Abscissa']== abscissa_values[i]], + analysis_data['z_h'][analysis_data['Abscissa']== abscissa_values[i]], + color = colorss[i], linestyle = ' ', + markersize = 9, marker = markerss[i], + markeredgewidth = 0.2, markeredgecolor = 'black') + + a = np.round(maxpost_alpha[i], 2) + b = np.round(maxpost_lnCr[i], 2) + # ax.text(0.75, 0.92, '$y=%3.7s*e^{%3.7sx}$'%(a, b), + # transform=ax.transAxes, fontsize = fontsize_text) + # ax.text(0.75, 0.85, '${R²}$ = ' + str(np.round(stats_vertical_profile['R2'][i], 2)), + # transform=ax.transAxes, fontsize = fontsize_text) + + ax.set_ylim(-0.05,1.05) + #ax.set_xlim(0) + ax.set_ylabel('z/h (-)', fontsize = 16, weight = 'bold') + ax.set_xlabel('Concentration (g/l)', fontsize = 16, weight = 'bold') + ax.grid(linewidth = 0.2) + ax.tick_params(axis='both', which='major', labelsize = 14) + fig.tight_layout() + figname = sampling_date + '_Conc_profiles_SDC_' + fig.savefig(outpath_figures + figname + str(abscissa_values[i]) + '_' + most_frequent_sampler + '.png', dpi = 200, bbox_inches='tight') #%% # Define MAP grid cell_height = map_data.depth_cells_border[1][0]-map_data.depth_cells_border[0][0] diff --git a/classes/Sed_flux_big_bend.py b/classes/Sed_flux_big_bend.py index bfd946d..54a1cac 100644 --- a/classes/Sed_flux_big_bend.py +++ b/classes/Sed_flux_big_bend.py @@ -49,12 +49,12 @@ def sed_flux_big_bend(outpath_figures) : # Parametres BD_grain_size_steps = [75, 90, 100, 110, 130, 150, 210] name = '_big_bend' - title = name.replace('_', ' ') - title = title[1:].capitalize() + # title = name.replace('_', ' ') + # title = title[1:].capitalize() colors = ['tab:blue','tab:orange', 'tab:green', 'tab:red', 'tab:purple', 'tab:brown', 'tab:pink'] # Define and plot alpha - # plt.figure(figsize=(9,6)) + plt.figure(figsize=(9,6)) k = 0 for k in range(len(BD_grain_size_steps)) : x_range = np.arange(globals()['x_vel' + str(BD_grain_size_steps[k]) + str(name)][0], @@ -63,40 +63,56 @@ def sed_flux_big_bend(outpath_figures) : globals()['pars' + str(BD_grain_size_steps[k]) + str(name)], globals()['cov' + str(BD_grain_size_steps[k]) + str(name)] = curve_fit( f=exponential, xdata=globals()['x_vel' + str(BD_grain_size_steps[k]) + str(name)], ydata=globals()['y_alpha' + str(BD_grain_size_steps[k]) + str(name)], maxfev=5000) - # plt.plot(x_range_extrap, exponential(x_range_extrap, - # globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][0],globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][1], globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][2]), linestyle='--', - # color=colors[k]) - # plt.plot(x_range, exponential(x_range, - # globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][0],globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][1], globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][2]), linestyle='-', - # color=colors[k], label=f' {BD_grain_size_steps[k]}') - globals()['alpha' + str(BD_grain_size_steps[k]) + str(name)] = np.round(exponential(x_range, + plt.plot(x_range_extrap, exponential(x_range_extrap, + globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][0],globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][1], globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][2]), linestyle='--', + color=colors[k]) + plt.plot(x_range, exponential(x_range, + globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][0],globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][1], globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][2]), linestyle='-', + color=colors[k], label=f' {BD_grain_size_steps[k]}') + + extrapolate_values = np.round(exponential(x_range, globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][0],globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][1], globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][2]), 3) - # plt.plot([], [], linestyle='--', color='black', label='extrapolation') + + globals()['alpha' + str(BD_grain_size_steps[k]) + str(name)] = extrapolate_values + + plt.plot([], [], linestyle='--', color='black', label='extrapolation') - # plt.legend(title='$D_{50}$ (\u03BCm)') + plt.legend(title='$D_{50}$ (\u03BCm)', fontsize = 16, bbox_to_anchor = (1.05, 1)) # plt.grid(linewidth=0.2) - # plt.xlim(0.4, 1.8) - # plt.ylim(0.6, 2.5) - # plt.xlabel('Velocity m/s') - # plt.ylabel(r'$ \alpha $ (-)') + plt.xlim(0.4, 1.8) + plt.ylim(0.6, 2.5) + plt.xlabel('Velocity (m/s)', fontsize = 16, weight = 'bold') + plt.ylabel(r'$\mathregular{\alpha}$ (-)', fontsize = 16, weight = 'bold') # plt.title(str(title) + ' nozzle') - # figname = 'Big_bend' - # plt.savefig(outpath_figures + figname + '.png', dpi=400, bbox_inches='tight') + figname = 'Big_bend' + plt.savefig(outpath_figures + figname + '.png', dpi=400, bbox_inches='tight') # Define values out of lower range (velocity < 0.5 m/s) # Define values out of upper range (velocity > 2.4 m/s) # Small straight nozzle globals()['alpha' + str(name)] = [] + alpha_temp = [] k = 0 - for k in range(len(BD_grain_size_steps)) : - globals()['alpha' + str(BD_grain_size_steps[k]) + '_lower_outrange' + str(name)] = np.array( - [np.min(globals()['alpha' + str(BD_grain_size_steps[k]) + str(name)])] * 120) - globals()['alpha' + str(BD_grain_size_steps[k]) + '_upper_outrange' + str(name)] = np.array( - [np.max(globals()['alpha' + str(BD_grain_size_steps[k]) + str(name)])] * 120) - globals()['alpha' + str(BD_grain_size_steps[k]) + str(name)] = np.concatenate( - (globals()['alpha' + str(BD_grain_size_steps[k]) + '_lower_outrange' + str(name)], globals()['alpha' + str(BD_grain_size_steps[k]) + str(name)] - , globals()['alpha' + str(BD_grain_size_steps[k]) + '_upper_outrange' + str(name)])) - globals()['alpha' + str(name)].append(globals()['alpha' + str(BD_grain_size_steps[k]) + str(name)]) - - sed_flux_big_bend.alpha_big_bend = globals()['alpha' + str(name)] \ No newline at end of file + for k in range(len(BD_grain_size_steps)) : + x_range = np.arange(globals()['x_vel' + str(BD_grain_size_steps[k]) + str(name)][0], + globals()['x_vel' + str(BD_grain_size_steps[k]) + str(name)][-1], 0.01) + extrapolate_values = np.round(exponential(x_range, + globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][0],globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][1], globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][2]), 3) + + vel_possiblerange = np.round(np.arange(0.01, 4.01, 0.01), 3) + idx_start = np.where(vel_possiblerange == np.round(x_range[0], 2))[0] + idx_end = np.where(vel_possiblerange == np.round(x_range[-1], 2))[0] + + alpha_start = [extrapolate_values[0]] * (idx_start[0] - 1) + alpha_end = [extrapolate_values[-1]] * (len(vel_possiblerange) - idx_end[0]) + + alpha_k = np.concatenate([alpha_start, extrapolate_values, alpha_end]) + alpha_temp.append(alpha_k) + + + sed_flux_big_bend.alpha_big_bend = alpha_temp + # sed_flux_big_bend.alpha_big_bend = globals()['alpha' + str(name)] + + # test = pd.DataFrame([x_range, extrapolate_values]) + diff --git a/classes/Sed_flux_big_straight.py b/classes/Sed_flux_big_straight.py index 9e96754..80cedad 100644 --- a/classes/Sed_flux_big_straight.py +++ b/classes/Sed_flux_big_straight.py @@ -19,6 +19,7 @@ along with this program. If not, see <https://www.gnu.org/licenses/>. import numpy as np from scipy.optimize import curve_fit +import matplotlib.pyplot as plt ############################################# @@ -47,12 +48,12 @@ def sed_flux_big_straight(outpath_figures) : # Parametres BD_grain_size_steps = [75, 90, 100, 110, 130, 150, 210] name = '_big_straight' - title = name.replace('_', ' ') - title = title[1:].capitalize() - + # title = name.replace('_', ' ') + # title = title[1:].capitalize() + colors = ['tab:blue','tab:orange', 'tab:green', 'tab:red', 'tab:purple', 'tab:brown', 'tab:pink'] + # Define and plot alpha - - # plt.figure(figsize=(9,6)) + plt.figure(figsize=(9,6)) k = 0 for k in range(len(BD_grain_size_steps)) : x_range = np.arange(globals()['x_vel' + str(BD_grain_size_steps[k]) + str(name)][0], @@ -61,26 +62,26 @@ def sed_flux_big_straight(outpath_figures) : globals()['pars' + str(BD_grain_size_steps[k]) + str(name)], globals()['cov' + str(BD_grain_size_steps[k]) + str(name)] = curve_fit( f=exponential, xdata=globals()['x_vel' + str(BD_grain_size_steps[k]) + str(name)], ydata=globals()['y_alpha' + str(BD_grain_size_steps[k]) + str(name)], maxfev=5000) - # plt.plot(x_range_extrap, exponential(x_range_extrap, - # globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][0],globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][1], globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][2]), linestyle='--', - # color=colors[k]) - # plt.plot(x_range, exponential(x_range, - # globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][0],globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][1], globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][2]), linestyle='-', - # color=colors[k], label=f' {BD_grain_size_steps[k]}') + plt.plot(x_range_extrap, exponential(x_range_extrap, + globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][0],globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][1], globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][2]), linestyle='--', + color=colors[k]) + plt.plot(x_range, exponential(x_range, + globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][0],globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][1], globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][2]), linestyle='-', + color=colors[k], label=f' {BD_grain_size_steps[k]}') globals()['alpha' + str(BD_grain_size_steps[k]) + str(name)] = np.round(exponential(x_range, globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][0],globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][1], globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][2]), 3) - # plt.plot([], [], linestyle='--', color='black', label='extrapolation') + plt.plot([], [], linestyle='--', color='black', label='extrapolation') - # plt.legend(title='$D_{50}$ (\u03BCm)') + plt.legend(title='$D_{50}$ (\u03BCm)', fontsize = 16, bbox_to_anchor = (1.05, 1)) # plt.grid(linewidth=0.2) - # plt.xlim(0.4, 1.8) - # plt.ylim(0.6, 2.5) - # plt.xlabel('Velocity m/s') - # plt.ylabel(r'$ \alpha $ (-)') - # plt. title(str(title) + ' nozzle') + plt.xlim(0.4, 1.8) + plt.ylim(0.6, 2.5) + plt.xlabel('Velocity (m/s)', fontsize = 16, weight = 'bold') + plt.ylabel(r'$\mathregular{\alpha}$ (-)', fontsize = 16, weight = 'bold') + # plt.title(str(title) + ' nozzle') - # figname = 'Big_straight' - # # plt.savefig(outpath_figures + figname + '.png', dpi=400, bbox_inches='tight') + figname = 'Big_straight' + plt.savefig(outpath_figures + figname + '.png', dpi=400, bbox_inches='tight') # Define values out of lower range (velocity < 0.5 m/s) # x_lower_outrange_big = np.arange(0, 0.5, 0.01) @@ -88,15 +89,23 @@ def sed_flux_big_straight(outpath_figures) : # Define values out of upper range (velocity > 2.4 m/s) # Small straight nozzle globals()['alpha' + str(name)] = [] + alpha_temp = [] k = 0 - for k in range(len(BD_grain_size_steps)) : - globals()['alpha' + str(BD_grain_size_steps[k]) + '_lower_outrange' + str(name)] = np.array( - [np.min(globals()['alpha' + str(BD_grain_size_steps[k]) + str(name)])] * 120) - globals()['alpha' + str(BD_grain_size_steps[k]) + '_upper_outrange' + str(name)] = np.array( - [np.max(globals()['alpha' + str(BD_grain_size_steps[k]) + str(name)])] * 120) - globals()['alpha' + str(BD_grain_size_steps[k]) + str(name)] = np.concatenate( - (globals()['alpha' + str(BD_grain_size_steps[k]) + '_lower_outrange' + str(name)], globals()['alpha' + str(BD_grain_size_steps[k]) + str(name)] - , globals()['alpha' + str(BD_grain_size_steps[k]) + '_upper_outrange' + str(name)])) - globals()['alpha' + str(name)].append(globals()['alpha' + str(BD_grain_size_steps[k]) + str(name)]) - - sed_flux_big_straight.alpha_big_straight = globals()['alpha' + str(name)] + for k in range(len(BD_grain_size_steps)) : + x_range = np.arange(globals()['x_vel' + str(BD_grain_size_steps[k]) + str(name)][0], + globals()['x_vel' + str(BD_grain_size_steps[k]) + str(name)][-1], 0.01) + extrapolate_values = np.round(exponential(x_range, + globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][0],globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][1], globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][2]), 3) + + vel_possiblerange = np.round(np.arange(0.01, 4.01, 0.01), 3) + idx_start = np.where(vel_possiblerange == np.round(x_range[0], 2))[0] + idx_end = np.where(vel_possiblerange == np.round(x_range[-1], 2))[0] + + alpha_start = [extrapolate_values[0]] * (idx_start[0] - 1) + alpha_end = [extrapolate_values[-1]] * (len(vel_possiblerange) - idx_end[0]) + + alpha_k = np.concatenate([alpha_start, extrapolate_values, alpha_end]) + alpha_temp.append(alpha_k) + + + sed_flux_big_straight.alpha_big_straight = alpha_temp \ No newline at end of file diff --git a/classes/Sed_flux_small_bend.py b/classes/Sed_flux_small_bend.py index 327b00d..c6a98c6 100644 --- a/classes/Sed_flux_small_bend.py +++ b/classes/Sed_flux_small_bend.py @@ -50,13 +50,12 @@ def sed_flux_small_bend(outpath_figures) : # Parametres BD_grain_size_steps = [75, 90, 100, 110, 130, 150, 210] name = '_small_bend' - title = name.replace('_', ' ') - title = title[1:].capitalize() + # title = name.replace('_', ' ') + # title = title[1:].capitalize() colors = ['tab:blue','tab:orange', 'tab:green', 'tab:red', 'tab:purple', 'tab:brown', 'tab:pink'] # Define and plot alpha - - # plt.figure(figsize=(9,6)) + plt.figure(figsize=(9,6)) k = 0 for k in range(len(BD_grain_size_steps)) : x_range = np.arange(globals()['x_vel' + str(BD_grain_size_steps[k]) + str(name)][0], @@ -65,26 +64,24 @@ def sed_flux_small_bend(outpath_figures) : globals()['pars' + str(BD_grain_size_steps[k]) + str(name)], globals()['cov' + str(BD_grain_size_steps[k]) + str(name)] = curve_fit( f=exponential, xdata=globals()['x_vel' + str(BD_grain_size_steps[k]) + str(name)], ydata=globals()['y_alpha' + str(BD_grain_size_steps[k]) + str(name)], maxfev=5000) - # plt.plot(x_range_extrap, exponential(x_range_extrap, - # globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][0],globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][1], globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][2]), linestyle='--', - # color=colors[k]) - # plt.plot(x_range, exponential(x_range, - # globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][0],globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][1], globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][2]), linestyle='-', - # color=colors[k], label=f' {BD_grain_size_steps[k]}') + plt.plot(x_range_extrap, exponential(x_range_extrap, + globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][0],globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][1], globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][2]), linestyle='--', + color=colors[k]) + plt.plot(x_range, exponential(x_range, + globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][0],globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][1], globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][2]), linestyle='-', + color=colors[k], label=f' {BD_grain_size_steps[k]}') globals()['alpha' + str(BD_grain_size_steps[k]) + str(name)] = np.round(exponential(x_range, globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][0],globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][1], globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][2]), 3) - # plt.plot([], [], linestyle='--', color='black', label='extrapolation') + plt.plot([], [], linestyle='--', color='black', label='extrapolation') - # plt.legend(title='$D_{50}$ (\u03BCm)') - # plt.grid(linewidth=0.2) - # plt.xlim(0.4, 2.8) - # plt.ylim(0.6, 2.5) - # plt.xlabel('Velocity m/s') - # plt.ylabel(r'$ \alpha $ (-)') - # plt.title(str(title) + ' nozzle') + # plt.legend(title='$D_{50}$ (\u03BCm)', fontsize = 16, bbox_to_anchor = (1.219, 0.3)) + plt.xlim(0.4, 1.8) + plt.ylim(0.6, 2.5) + plt.xlabel('Velocity (m/s)', fontsize = 16, weight = 'bold') + plt.ylabel(r'$\mathregular{\alpha}$ (-)', fontsize = 16, weight = 'bold') - # figname = 'Small_bend' - # # plt.savefig(outpath_figures + figname + '.png', dpi=400, bbox_inches='tight') + figname = 'Small_bend' + plt.savefig(outpath_figures + figname + '.png', dpi=400, bbox_inches='tight') # Define values out of lower range (velocity < 0.6 m/s) x_lower_outrange_small = np.arange(0, 0.6, 0.01) @@ -94,12 +91,22 @@ def sed_flux_small_bend(outpath_figures) : # Small straight nozzle globals()['alpha' + str(name)] = [] k = 0 + alpha_temp= [] for k in range(len(BD_grain_size_steps)) : - globals()['alpha' + str(BD_grain_size_steps[k]) + '_upper_outrange' + str(name)] = np.array( - [np.max(globals()['alpha' + str(BD_grain_size_steps[k]) + str(name)])] * 120) - globals()['alpha' + str(BD_grain_size_steps[k]) + str(name)] = np.concatenate( - (alpha_lower_outrange_small, globals()['alpha' + str(BD_grain_size_steps[k]) + str(name)] - , globals()['alpha' + str(BD_grain_size_steps[k]) + '_upper_outrange' + str(name)])) - globals()['alpha' + str(name)].append(globals()['alpha' + str(BD_grain_size_steps[k]) + str(name)]) - - sed_flux_small_bend.alpha_small_bend = globals()['alpha' + str(name)] + x_range = np.arange(globals()['x_vel' + str(BD_grain_size_steps[k]) + str(name)][0], + globals()['x_vel' + str(BD_grain_size_steps[k]) + str(name)][-1], 0.01) + extrapolate_values = np.round(exponential(x_range, + globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][0],globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][1], globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][2]), 3) + + vel_possiblerange = np.round(np.arange(0.01, 4.01, 0.01), 3) + idx_start = np.where(vel_possiblerange == np.round(x_range[0], 2))[0] + idx_end = np.where(vel_possiblerange == np.round(x_range[-1], 2))[0] + + alpha_start = [extrapolate_values[0]] * (idx_start[0] - 1) + alpha_end = [extrapolate_values[-1]] * (len(vel_possiblerange) - idx_end[0]) + + alpha_k = np.concatenate([alpha_start, extrapolate_values, alpha_end]) + alpha_temp.append(alpha_k) + + + sed_flux_small_bend.alpha_small_bend = alpha_temp \ No newline at end of file diff --git a/classes/Sed_flux_small_straight.py b/classes/Sed_flux_small_straight.py index c81f40e..8319479 100644 --- a/classes/Sed_flux_small_straight.py +++ b/classes/Sed_flux_small_straight.py @@ -19,6 +19,7 @@ along with this program. If not, see <https://www.gnu.org/licenses/>. import numpy as np from scipy.optimize import curve_fit +import matplotlib.pyplot as plt ############################################# @@ -44,17 +45,15 @@ def exponential(x, a, b, c): return a*x**3+b*x**2+c def sed_flux_small_straight(outpath_figures) : - # Parametres BD_grain_size_steps = [75, 90, 100, 110, 130, 150, 210] name = '_small_straight' - title = name.replace('_', ' ') - title = title[1:].capitalize() + # title = name.replace('_', ' ') + # title = title[1:].capitalize() colors = ['tab:blue','tab:orange', 'tab:green', 'tab:red', 'tab:purple', 'tab:brown', 'tab:pink'] # Define and plot alpha - - # plt.figure(figsize=(9,6)) + plt.figure(figsize=(9,6)) k = 0 for k in range(len(BD_grain_size_steps)) : x_range = np.arange(globals()['x_vel' + str(BD_grain_size_steps[k]) + str(name)][0], @@ -63,26 +62,24 @@ def sed_flux_small_straight(outpath_figures) : globals()['pars' + str(BD_grain_size_steps[k]) + str(name)], globals()['cov' + str(BD_grain_size_steps[k]) + str(name)] = curve_fit( f=exponential, xdata=globals()['x_vel' + str(BD_grain_size_steps[k]) + str(name)], ydata=globals()['y_alpha' + str(BD_grain_size_steps[k]) + str(name)], maxfev=5000) - # plt.plot(x_range_extrap, exponential(x_range_extrap, - # globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][0],globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][1], globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][2]), linestyle='--', - # color=colors[k]) - # plt.plot(x_range, exponential(x_range, - # globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][0],globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][1], globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][2]), linestyle='-', - # color=colors[k], label=f' {BD_grain_size_steps[k]}') + plt.plot(x_range_extrap, exponential(x_range_extrap, + globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][0],globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][1], globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][2]), linestyle='--', + color=colors[k]) + plt.plot(x_range, exponential(x_range, + globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][0],globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][1], globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][2]), linestyle='-', + color=colors[k], label=f' {BD_grain_size_steps[k]}') globals()['alpha' + str(BD_grain_size_steps[k]) + str(name)] = np.round(exponential(x_range, globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][0],globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][1], globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][2]), 3) - # plt.plot([], [], linestyle='--', color='black', label='extrapolation') + plt.plot([], [], linestyle='--', color='black', label='extrapolation') - # plt.legend(title='$D_{50}$ (\u03BCm)') - # plt.grid(linewidth=0.2) - # plt.xlim(0.4, 2.8) - # plt.ylim(0.6, 2.5) - # plt.xlabel('Velocity m/s') - # plt.ylabel(r'$ \alpha $ (-)') - # plt.title(str(title) + ' nozzle') + # plt.legend(title='$D_{50}$ (\u03BCm)', fontsize = 16, bbox_to_anchor = (1.05, 1)) + plt.xlim(0.4, 1.8) + plt.ylim(0.6, 2.5) + plt.xlabel('Velocity (m/s)', fontsize = 16, weight = 'bold') + plt.ylabel(r'$\mathregular{\alpha}$ (-)', fontsize = 16, weight = 'bold') - # figname = 'Small_straight' - # # plt.savefig(outpath_figures + figname + '.png', dpi=400, bbox_inches='tight') + figname = 'Small_straight' + plt.savefig(outpath_figures + figname + '.png', dpi=400, bbox_inches='tight') # Define values out of lower range (velocity < 0.6 m/s) @@ -93,12 +90,22 @@ def sed_flux_small_straight(outpath_figures) : # Small straight nozzle globals()['alpha' + str(name)] = [] k = 0 + alpha_temp= [] for k in range(len(BD_grain_size_steps)) : - globals()['alpha' + str(BD_grain_size_steps[k]) + '_upper_outrange' + str(name)] = np.array( - [np.max(globals()['alpha' + str(BD_grain_size_steps[k]) + str(name)])] * 120) - globals()['alpha' + str(BD_grain_size_steps[k]) + str(name)] = np.concatenate( - (alpha_lower_outrange_small, globals()['alpha' + str(BD_grain_size_steps[k]) + str(name)] - , globals()['alpha' + str(BD_grain_size_steps[k]) + '_upper_outrange' + str(name)])) - globals()['alpha' + str(name)].append(globals()['alpha' + str(BD_grain_size_steps[k]) + str(name)]) - - sed_flux_small_straight.alpha_small_straight = globals()['alpha' + str(name)] + x_range = np.arange(globals()['x_vel' + str(BD_grain_size_steps[k]) + str(name)][0], + globals()['x_vel' + str(BD_grain_size_steps[k]) + str(name)][-1], 0.01) + extrapolate_values = np.round(exponential(x_range, + globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][0],globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][1], globals()['pars' + str(BD_grain_size_steps[k]) + str(name)][2]), 3) + + vel_possiblerange = np.round(np.arange(0.01, 4.01, 0.01), 3) + idx_start = np.where(vel_possiblerange == np.round(x_range[0], 2))[0] + idx_end = np.where(vel_possiblerange == np.round(x_range[-1], 2))[0] + + alpha_start = [extrapolate_values[0]] * (idx_start[0] - 1) + alpha_end = [extrapolate_values[-1]] * (len(vel_possiblerange) - idx_end[0]) + + alpha_k = np.concatenate([alpha_start, extrapolate_values, alpha_end]) + alpha_temp.append(alpha_k) + + + sed_flux_small_straight.alpha_small_straight = alpha_temp \ No newline at end of file diff --git a/classes/Sediment_flux_BD_single.py b/classes/Sediment_flux_BD_single.py index c9de9f1..2e82064 100644 --- a/classes/Sediment_flux_BD_single.py +++ b/classes/Sediment_flux_BD_single.py @@ -28,7 +28,7 @@ from Sed_flux_big_straight import sed_flux_big_straight from Sed_flux_big_bend import sed_flux_big_bend from Functions import find_nearest, get_sec -def sediment_flux_BD(outpath_figures, meas, choice, unit) : +def sediment_flux_BD(outpath_figures, meas, choice, unit, add_plots) : # %%################### Calculate sediment flux ########################### unit_mass = unit.unit_masses @@ -45,18 +45,18 @@ def sediment_flux_BD(outpath_figures, meas, choice, unit) : BD_grain_size_steps = [75, 90, 100, 110, 130, 150, 210] - # Create Alpha graphs + # Create Alpha relations sed_flux_small_straight(outpath_figures) + sed_flux_small_bend(outpath_figures) + sed_flux_big_straight(outpath_figures) + sed_flux_big_bend(outpath_figures) + alpha_small_straight = sed_flux_small_straight.alpha_small_straight - - sed_flux_small_bend(outpath_figures) alpha_small_bend = sed_flux_small_bend.alpha_small_bend - - sed_flux_big_straight(outpath_figures) alpha_big_straight = sed_flux_big_straight.alpha_big_straight - - sed_flux_big_bend(outpath_figures) alpha_big_bend = sed_flux_big_bend.alpha_big_bend + + # %%################### Determine alpha and nozzle surface for samples ######### @@ -90,7 +90,7 @@ def sediment_flux_BD(outpath_figures, meas, choice, unit) : if pd.isna(meas['Sampling_duration_s']): meas['Sampling_duration_s'] = meas['Filling_time_field'] - + print(alpha) # %%################### Calculate point solid flux ####################### if unit_mass == 'mg': sand_flux_point_i = alpha * meas['Dry_mass_sand'] * \ diff --git a/classes/Uncertainty_estimation.py b/classes/Uncertainty_estimation.py index 01bb71a..9f8d5f4 100644 --- a/classes/Uncertainty_estimation.py +++ b/classes/Uncertainty_estimation.py @@ -24,7 +24,7 @@ import os from scipy import stats def uncertainty_analysis(analysis_data, outpath, outpath_figures, sampling_date, - choice, v2_d_index, summary_ISO, summary_fine, map_data, cwd, path_R): + choice, v2_d_index, summary_ISO, summary_fine, map_data, cwd, path_R, add_plots): #%% @@ -159,48 +159,51 @@ def uncertainty_analysis(analysis_data, outpath, outpath_figures, sampling_date, for i in range(len(abscissa_values)): vv = analysis_data[analysis_data['Abscissa'] == abscissa_values[i]] # Measured parameters - if choice[2] == 1 and choice[3] == 1: - if np.count_nonzero(~np.isnan(np.array(vv['D50']))) >= 2: - d50_vertical = np.mean(vv['D50'])*1e-6 - d90_bed = 0.0004 - velocity_vert = vv['Mean_velocity_vertical'].iloc[0] - h = vv['max_depth_vertical'].iloc[0] - # roughness height - kst = 0.05 - ks = 2* d90_bed - # kinematic viscosity of water - nu = 0.000001 - # acceleration of the gravity - g = 9.81 - # relative density - rho = 2.65 - # sedimentological diameter - ds = d50_vertical*(g*(rho-1)/nu**2)**(1/3) # use mean d50 per vertical - # settling velocity - ws = (nu/d50_vertical)*((10.36**2 + 1.049 * ds**3)**0.5 - 10.36) - # Critical bed shear stress - theta_cr = 0.3/(1 + 1.2*ds) + 0.055*(1-np.exp(-0.02*ds)) - # van Karman constant - kappa = 0.41 - # skin friction coefficient - fc = 2*(kappa/(1+np.log(ks/30*h)))**2 - # Shields parameter - theta = 0.5*fc*velocity_vert**2/((rho-1)*d50_vertical*g) - #turbulant Schmidt number - sigma = 1 - # skin friction coefficient for total shear velocity - fc2 = 2*(kappa/(1+np.log(kst/30/h)))**2 - # Total shear velocity - shear_vel = velocity_vert*np.sqrt(fc2/2) + if choice[2] == 1 and choice[3] == 1: + alpha_est = stats_vertical_profile['slope'][i] + lnCr_est = stats_vertical_profile['intercept'][i] + # if np.count_nonzero(~np.isnan(np.array(vv['D50']))) >= 3: + # d50_vertical = np.mean(vv['D50'])*1e-6 + # d90_bed = 0.0006 + # velocity_vert = vv['Mean_velocity_vertical'].iloc[0] + # h = vv['max_depth_vertical'].iloc[0] + # # roughness height + # kst = 0.05 + # ks = 2* d90_bed + # # kinematic viscosity of water + # nu = 0.000001 + # # acceleration of the gravity + # g = 9.81 + # # relative density + # rho = 2.65 + # # sedimentological diameter + # ds = d50_vertical*(g*(rho-1)/nu**2)**(1/3) # use mean d50 per vertical + # # settling velocity + # ws = (nu/d50_vertical)*((10.36**2 + 1.049 * ds**3)**0.5 - 10.36) + # # Critical bed shear stress + # theta_cr = 0.3/(1 + 1.2*ds) + 0.055*(1-np.exp(-0.02*ds)) + # # van Karman constant + # kappa = 0.41 + # # skin friction coefficient + # fc = 2*(kappa/(1+np.log(ks/30*h)))**2 + # # Shields parameter + # theta = 0.5*fc*velocity_vert**2/((rho-1)*d50_vertical*g) + # #turbulant Schmidt number + # sigma = 1 + # # skin friction coefficient for total shear velocity + # fc2 = 2*(kappa/(1+np.log(kst/30/h)))**2 + # # Total shear velocity + # shear_vel = velocity_vert*np.sqrt(fc2/2) - # Estimated a priori parameters - alpha_est = -6*ws/(sigma*kappa*shear_vel*h) - Cr = 1.5*1000*theta*np.exp(-0.2*ds)*np.exp(-4.5*theta_cr/theta) # Reference concentration Cr - lnCr_est = np.log(Cr) + # # Estimated a priori parameters + # alpha_est = -6*ws/(sigma*kappa*shear_vel*h) + # Cr = 1.5*1000*theta*np.exp(-0.2*ds)*np.exp(-4.5*theta_cr/theta) # Reference concentration Cr + # lnCr_est = np.log(Cr) + # print(i, np.round(d50_vertical,5), np.round(ds,5), np.round(theta_cr,5),np.round(fc,5), np.round(theta,5)) - else: - alpha_est = stats_vertical_profile['slope'][i] - lnCr_est = stats_vertical_profile['intercept'][i] + # else: + # alpha_est = stats_vertical_profile['slope'][i] + # lnCr_est = stats_vertical_profile['intercept'][i] else: alpha_est = stats_vertical_profile['slope'][i] lnCr_est = stats_vertical_profile['intercept'][i] @@ -233,111 +236,7 @@ def uncertainty_analysis(analysis_data, outpath, outpath_figures, sampling_date, path_info = pd.DataFrame([outpath, sampling_date, most_frequent_sampler]) path_info.to_csv(cwd + '\\Info_BaM.csv', sep = ';', index = False) - - #%% 2. Uncertainty due to the vertical integration using BaM! (Renard et al. 2006; Mansanarez et al. 2019) - # # Estimate a priori parameters for the model - # a_priori_est = [] - # for i in range(len(abscissa_values)): - # vv = analysis_data[analysis_data['Abscissa'] == abscissa_values[i]] - # # Measured parameters - # if choice[2] == 1: - # if np.count_nonzero(~np.isnan(np.array(vv['D50']))) >= 2: - # d50_vertical = np.mean(vv['D50'])*1e-6 - # else: - # d50_vertical = 0.00013 - # else: - # d50_vertical = 0.00013 - # d90_bed = 0.0004 - # #u_d50_vertical = 0.2 - # # velocity per vertical - # if choice[3] == 1: - # velocity_vert = vv['Mean_velocity_vertical'].iloc[0] - # else: - # velocity_vert = 1 - # #u_velocity_vert = 0.05 - # # water depth - # if choice[3] == 1: - # h = vv['max_depth_vertical'].iloc[0] - # else: - # h = 1 - # u_h = 0.05 - # # roughness height - # kst = 0.05 - # #u_kst = 0.5*kst - # ks = 2* d90_bed - # #u_ks = 0.3 *ks - - - # # Fixed parameters (errors u are ±) - # # kinematic viscosity of water - # nu = 0.000001 - # #u_nu = 0.05 - # # acceleration of the gravity - # g = 9.81 - # #u_g = 0.01 - # # relative density - # rho = 2.65 - # #u_rho = 0.02 - # # sedimentological diameter - # ds = d50_vertical*(g*(rho-1)/nu**2)**(1/3) # use mean d50 per vertical - # #u_ds = ds*(1/9*((u_g/g)**2 + (u_rho/rho)**2+4*(u_nu/nu)**2)+ (u_d50_vertical/d50_vertical)**2) - # # settling velocity - # ws = (nu/d50_vertical)*((10.36**2 + 1.049 * ds**3)**0.5 - 10.36) - # u_ws = 0.05 - # # Critical bed shear stress - # theta_cr = 0.3/(1 + 1.2*ds) + 0.055*(1-np.exp(-0.02*ds)) - # #u_theta_cr = 0.1 - # # van Karman constant - # kappa = 0.41 - # u_kappa = 0 - # # skin friction coefficient - # fc = 2*(kappa/(1+np.log(ks/30*h)))**2 - # #u_fc = 0.05 - # # Shields parameter - # theta = 0.5*fc*velocity_vert**2/((rho-1)*d50_vertical*g) - # #u_theta = 0.05 - # #turbulant Schmidt number - # sigma = 1 - # u_sigma = 0.2 - # # skin friction coefficient for total shear velocity - # fc2 = 2*(kappa/(1+np.log(kst/30/h)))**2 - # #u_fc2 = 0.05 *fc2 - # # Reference concentration Cr - # Cr = 1.5*1000*theta*np.exp(-0.2*ds)*np.exp(-4.5*theta_cr/theta) - # # u_Cr = 0.3 * 1000 * Cr - - # # Total shear velocity - # shear_vel = velocity_vert*np.sqrt(fc2/2) - # u_shear_vel = 0.05 - - # # Estimated a priori parameters - # alpha_est = -6*ws/(sigma*kappa*shear_vel*h) - # #u_alpha_est = np.sqrt((u_ws**2/ws**2 + u_sigma**2/sigma**2 + u_kappa**2/kappa**2 + u_shear_vel**2/shear_vel**2 + u_h**2/h**2)*alpha_est**2) - # u_alpha_est = np.sqrt(u_ws**2 + u_sigma**2 + u_kappa**2 + u_shear_vel**2 + u_h**2) - - # lnCr_est = np.log(Cr) - # u_lnCr_est = 0.5 - - # # Prepare export data - # a_pri_est = pd.DataFrame([vv['Abscissa_Name'].iloc[0], alpha_est, u_alpha_est, lnCr_est, u_lnCr_est]).transpose() - # a_priori_est.append(a_pri_est) - - # # Export a priori parameters for RBaM simulation - # a_priori_est = pd.concat(a_priori_est) - # a_priori_est = a_priori_est.reset_index(drop = True) - # a_priori_inf = pd.Series([0]*len(a_priori_est)) - # a_priori_inf.loc[0] = sampling_date - # a_priori_inf.loc[1] = most_frequent_sampler - # # a_priori_inf.loc[2] = 2 # std for lnCr - # # a_priori_inf.loc[3] = 2 # std for alpha - # a_priori_est = pd.concat([(a_priori_inf), a_priori_est], axis = 1) - # a_priori_est.columns = ['Info','Abscissa_Name', 'alpha_est', 'u_alpha_est', 'lnCr_est', 'u_lnCr_est'] - # a_priori_est.to_csv(outpath + sampling_date + '_Estimated_a_priori_params_RBaM_' + most_frequent_sampler +'.csv', sep = ';', index=False) - - # path_info = pd.DataFrame([outpath, sampling_date, most_frequent_sampler]) - # path_info.to_csv(cwd + '\\Info_BaM.csv', sep = ';', index = False) - #%% Perform BaM simulations in R #### Run code in Rstudio @@ -423,17 +322,7 @@ def uncertainty_analysis(analysis_data, outpath, outpath_figures, sampling_date, # s = np.random.normal(mu, sigma, len(sampling_heights_interp)) s = np.random.normal(mu, sigma, len(results_cooking)) unc_sample.append(s) - unc_sample = pd.DataFrame(unc_sample).transpose() - - - # ## - # unc_sample = [] - # for i in range(len(results_cooking)): - # mu, sigma = 0, vv['ulnCs'][2] - # #mu, sigma = 0, results_cooking.iloc[i,2] - # s = np.random.normal(mu, sigma, len(sampling_heights_interp)) - # unc_sample.append(s) - # unc_sample = pd.DataFrame(unc_sample) + unc_sample = pd.DataFrame(unc_sample).transpose() # Calculate point concentration with error unc_sample = conc_sampl * unc_sample ## @@ -484,6 +373,8 @@ def uncertainty_analysis(analysis_data, outpath, outpath_figures, sampling_date, # u_rem - remnant uncertainty due to the vertical integration u_rem = [np.sqrt(u_p[i]**2 - u_param[i]**2) for i in range(len(u_param))] + import math + u_rem = [0 if math.isnan(x) else x for x in u_rem] u2_rem_final = np.sum([Q_j[j]**2/Q_total**2 *u_rem[j]**2 for j in range(len(abscissa_values))]) U2_rem = u2_rem_final*4 @@ -497,6 +388,8 @@ def uncertainty_analysis(analysis_data, outpath, outpath_figures, sampling_date, maxpost = pd.DataFrame(maxpost).transpose() maxpost.columns = abscissa_values + # maxpost = maxpost.iloc[::-1] + maxpost.reset_index(drop = True, inplace = True) #%% Plot profiles for param # plots only the last vertical @@ -548,17 +441,20 @@ def uncertainty_analysis(analysis_data, outpath, outpath_figures, sampling_date, elinewidth = 1, capsize = 2, marker = 'D', color = 'black', markersize = 7, lw = 0, label = 'Samples', zorder = 10) - # add maxpost - idx_max_post = np.argmax(results_cooking['logPost']) - max_post = [np.exp(results_cooking['lnCr'][idx_max_post]-results_cooking['alpha'][idx_max_post]*h[i]) - for i in range(len(h))] - ax.plot(max_post,h, + # # add maxpost + # idx_max_post = np.argmax(results_cooking['logPost']) + # max_post = [np.exp(results_cooking['lnCr'][idx_max_post]-results_cooking['alpha'][idx_max_post]*h[i]) + # for i in range(len(h))] + # ax.plot(max_post,h, + # color= 'darkorange', lw = 2, label = r'$\mathregular{C_{n_0}(z)}$') + + ax.plot(maxpost.iloc[:,l],h, color= 'darkorange', lw = 2, label = r'$\mathregular{C_{n_0}(z)}$') ax.legend(loc = 'upper right', fontsize = 18) ax.set_xlabel(r'C (mg l$^{\rm{-1}}$)', fontsize = 20, weight = 'bold') ax.set_ylabel('z (m)', fontsize = 20, weight = 'bold') - ax.set_xlim(0,200) + ax.set_xlim(0,2000) ax.set_ylim(0,h[-1]) ax.tick_params(axis='both', which='major', labelsize = 18) @@ -567,50 +463,49 @@ def uncertainty_analysis(analysis_data, outpath, outpath_figures, sampling_date, fig.savefig(outpath_figures + '\\' + str(sampling_date) + figname + most_frequent_sampler + '.png', dpi = 300, bbox_inches='tight') fig.savefig(outpath_figures + '\\' + str(sampling_date) + figname + most_frequent_sampler + '.eps', dpi = 300, bbox_inches='tight') - - # Plot overline(C(z)) - fig, ax = plt.subplots(figsize=(6, 8), dpi = 100) - - ax.hist(mean_c, bins = 50, color= 'teal') - ax.vlines(mean_conc, 0,50, - color = 'darkred', lw = 2, label = r'$\mathregular{\overline{C}}$') - - ax.legend(loc = 'upper right', fontsize = 18) - ax.set_xlabel(r'$\mathregular{\overline{C}}$ (mg/l)', fontsize = 20, weight = 'bold') - ax.set_ylabel('Frequency', fontsize = 20, weight = 'bold') - ax.tick_params(axis='both', which='major', labelsize = 18) - ax.set_xlim(0,200) - - fig.tight_layout() - figname = '_hist_overline_C_vertical_' + str(l+1) + '_' - fig.savefig(outpath_figures + '\\' + str(sampling_date) + figname + most_frequent_sampler + '.png', dpi = 300, bbox_inches='tight') - fig.savefig(outpath_figures + '\\' + str(sampling_date) + figname + most_frequent_sampler + '.eps', dpi = 300, bbox_inches='tight') - - - # Plot overline(lnC(z)) # c) - fig, ax = plt.subplots(figsize=(6, 8), dpi = 100) - - ax.hist(mean_c_log, bins = 50, alpha = 0.8, color= 'teal') - ax.vlines(mean_conc_log, 0,150, - color = 'darkred', lw = 2, label = r'$\mathregular{\overline{ln(\overline{C})}}$') - ax.vlines(mean_conc_log+ std_param, 0,150, - color = 'indigo', lw = 3,ls = '--', label = r'$\mathregular{\overline{ln(\overline{C})} \pm u_{p,param}}$') - ax.vlines(mean_conc_log-std_param, 0,150, - color = 'indigo', lw = 3,ls = '--') - - ax.legend(loc = 'upper right', fontsize = 18, framealpha = 1) - ax.set_xlabel(r'$\mathregular{ln(C)}$ (mg l$^{\rm{-1}}$)', fontsize = 20, weight = 'bold') - ax.set_ylabel('Frequency', fontsize = 20, weight = 'bold') - ax.tick_params(axis='both', which='major', labelsize = 18) - ax.set_xlim(1,5) - ax.set_ylim(0,38) + if add_plots == True: + # Plot overline(C(z)) + fig, ax = plt.subplots(figsize=(6, 8), dpi = 100) - fig.tight_layout() - figname = '_hist_ln_overline_C_vertical_' + str(l+1) + '_' - fig.savefig(outpath_figures + '\\' + str(sampling_date) + figname + most_frequent_sampler + '.png', dpi = 300, bbox_inches='tight') - fig.savefig(outpath_figures + '\\' + str(sampling_date) + figname + most_frequent_sampler + '.eps', dpi = 300, bbox_inches='tight') - - + ax.hist(mean_c, bins = 50, color= 'teal') + ax.vlines(mean_conc, 0,50, + color = 'darkred', lw = 2, label = r'$\mathregular{\overline{C}}$') + + ax.legend(loc = 'upper right', fontsize = 18) + ax.set_xlabel(r'$\mathregular{\overline{C}}$ (mg/l)', fontsize = 20, weight = 'bold') + ax.set_ylabel('Frequency', fontsize = 20, weight = 'bold') + ax.tick_params(axis='both', which='major', labelsize = 18) + ax.set_xlim(0,200) + + fig.tight_layout() + figname = '_hist_overline_C_vertical_' + str(l+1) + '_' + fig.savefig(outpath_figures + '\\' + str(sampling_date) + figname + most_frequent_sampler + '.png', dpi = 300, bbox_inches='tight') + fig.savefig(outpath_figures + '\\' + str(sampling_date) + figname + most_frequent_sampler + '.eps', dpi = 300, bbox_inches='tight') + + + # Plot overline(lnC(z)) # c) + fig, ax = plt.subplots(figsize=(6, 8), dpi = 100) + + ax.hist(mean_c_log, bins = 50, alpha = 0.8, color= 'teal') + ax.vlines(mean_conc_log, 0,150, + color = 'darkred', lw = 2, label = r'$\mathregular{\overline{ln(\overline{C})}}$') + ax.vlines(mean_conc_log+ std_param, 0,150, + color = 'indigo', lw = 3,ls = '--', label = r'$\mathregular{\overline{ln(\overline{C})} \pm u_{p,param}}$') + ax.vlines(mean_conc_log-std_param, 0,150, + color = 'indigo', lw = 3,ls = '--') + + ax.legend(loc = 'upper right', fontsize = 18, framealpha = 1) + ax.set_xlabel(r'$\mathregular{ln(C)}$ (mg l$^{\rm{-1}}$)', fontsize = 20, weight = 'bold') + ax.set_ylabel('Frequency', fontsize = 20, weight = 'bold') + ax.tick_params(axis='both', which='major', labelsize = 18) + ax.set_xlim(1,5) + ax.set_ylim(0,38) + + fig.tight_layout() + figname = '_hist_ln_overline_C_vertical_' + str(l+1) + '_' + fig.savefig(outpath_figures + '\\' + str(sampling_date) + figname + most_frequent_sampler + '.png', dpi = 300, bbox_inches='tight') + fig.savefig(outpath_figures + '\\' + str(sampling_date) + figname + most_frequent_sampler + '.eps', dpi = 300, bbox_inches='tight') + #%% Plot profiles for struc # plots only the last vertical @@ -653,7 +548,7 @@ def uncertainty_analysis(analysis_data, outpath, outpath_figures, sampling_date, fig.savefig(outpath_figures + '\\' + str(sampling_date) + figname + most_frequent_sampler + '.eps', dpi = 300, bbox_inches='tight') - #%% Plot mean C natural (depth-integrated) + # Plot mean C natural (depth-integrated) fig, ax = plt.subplots(figsize=(6, 8), dpi = 100) ax.vlines(mean_c_rem[0], 0,h[-1], color= 'darkgoldenrod', lw =0.5, alpha = 0.3, @@ -710,79 +605,77 @@ def uncertainty_analysis(analysis_data, outpath, outpath_figures, sampling_date, fig.savefig(outpath_figures + '\\' + str(sampling_date) + figname + most_frequent_sampler + '.eps', dpi = 300, bbox_inches='tight') + if add_plots == True: + # Plot mean lnC (depth-integrated) + fig, ax = plt.subplots(figsize=(6, 8), dpi = 100) + + ax.vlines(mean_c_rem_log[0], 0,h[-1], color= 'teal',lw = 1, alpha = 0.3, + label = r'$\mathregular{ln(\overline{C_{mod,n}})}$') + for i in range(len(mean_c_rem_log)): + ax.vlines(mean_c_rem_log[i], 0,h[-1], color= 'teal', lw = 1, alpha = 0.3) + ax.vlines(mean_conc_rem_log, 0,h[-1], + color = 'midnightblue', lw = 2, label = r'$\mathregular{ln(\overline{C_{mod}})}$') + ax.vlines(mean_conc_rem_log-std_conc_rem, 0,h[-1], + color = 'mediumorchid', lw = 2, ls = '--', label = r'$\mathregular{ln(\overline{C_{mod}}) \pm u_p}$') + ax.vlines(mean_conc_rem_log+std_conc_rem, 0,h[-1], + color = 'mediumorchid', lw = 2, ls = '--') + + ax.legend(loc = 'upper right', fontsize = 18, framealpha = 1) + ax.set_xlabel(r'$\mathregular{ln(C)}$ (mg/l)', fontsize = 20, weight = 'bold') + ax.set_ylabel('z (m)', fontsize = 20, weight = 'bold') + ax.tick_params(axis='both', which='major', labelsize = 18) + ax.set_ylim(0,h[-1]) + ax.set_xlim(1,5) + + fig.tight_layout() + figname = '_ln_overline_C_mod_vertical_' + str(l+1) + '_' + fig.savefig(outpath_figures + '\\' + str(sampling_date) + figname + most_frequent_sampler + '.png', dpi = 300, bbox_inches='tight') + fig.savefig(outpath_figures + '\\' + str(sampling_date) + figname + most_frequent_sampler + '.eps', dpi = 300, bbox_inches='tight') - # Plot mean lnC (depth-integrated) - fig, ax = plt.subplots(figsize=(6, 8), dpi = 100) - - ax.vlines(mean_c_rem_log[0], 0,h[-1], color= 'teal',lw = 1, alpha = 0.3, - label = r'$\mathregular{ln(\overline{C_{mod,n}})}$') - for i in range(len(mean_c_rem_log)): - ax.vlines(mean_c_rem_log[i], 0,h[-1], color= 'teal', lw = 1, alpha = 0.3) - ax.vlines(mean_conc_rem_log, 0,h[-1], - color = 'midnightblue', lw = 2, label = r'$\mathregular{ln(\overline{C_{mod}})}$') - ax.vlines(mean_conc_rem_log-std_conc_rem, 0,h[-1], - color = 'mediumorchid', lw = 2, ls = '--', label = r'$\mathregular{ln(\overline{C_{mod}}) \pm u_p}$') - ax.vlines(mean_conc_rem_log+std_conc_rem, 0,h[-1], - color = 'mediumorchid', lw = 2, ls = '--') - - ax.legend(loc = 'upper right', fontsize = 18, framealpha = 1) - ax.set_xlabel(r'$\mathregular{ln(C)}$ (mg/l)', fontsize = 20, weight = 'bold') - ax.set_ylabel('z (m)', fontsize = 20, weight = 'bold') - ax.tick_params(axis='both', which='major', labelsize = 18) - ax.set_ylim(0,h[-1]) - ax.set_xlim(1,5) - - fig.tight_layout() - figname = '_ln_overline_C_mod_vertical_' + str(l+1) + '_' - fig.savefig(outpath_figures + '\\' + str(sampling_date) + figname + most_frequent_sampler + '.png', dpi = 300, bbox_inches='tight') - fig.savefig(outpath_figures + '\\' + str(sampling_date) + figname + most_frequent_sampler + '.eps', dpi = 300, bbox_inches='tight') - - - # Plot overline(C(z)) - fig, ax = plt.subplots(figsize=(6, 6), dpi = 100) - - ax.hist(mean_c, bins = 50, color= 'teal') - ax.vlines(mean_conc, 0,170, - color = 'darkred', lw = 2, label = r'$\mathregular{\overline{C_{mod}}}$') - - ax.legend(loc = 'upper right', fontsize = 18) - ax.set_xlabel(r'C (mg l$^{\rm{-1}}$)', fontsize = 20, weight = 'bold') - ax.set_ylabel('Frequency', fontsize = 20, weight = 'bold') - ax.tick_params(axis='both', which='major', labelsize = 18) - ax.set_xlim(0,200) - ax.set_ylim(0,50) - - fig.tight_layout() - figname = '_hist_overline_C_mod_vertical_' + str(l+1) + '_' - fig.savefig(outpath_figures + '\\' + str(sampling_date) + figname + most_frequent_sampler + '.png', dpi = 300, bbox_inches='tight') - fig.savefig(outpath_figures + '\\' + str(sampling_date) + figname + most_frequent_sampler + '.eps', dpi = 300, bbox_inches='tight') - - - # Plot hist ln(overline(C(z))) # f) - fig, ax = plt.subplots(figsize=(6, 8), dpi = 100) - - ax.hist(mean_c_log, bins = 50, color= 'peru', alpha = 0.8) - ax.vlines(mean_conc_log, 0,150, - color = 'firebrick', lw = 2, label = r'$\mathregular{\overline{ln(\overline{C_{mod}})}}$') - ax.vlines(mean_conc_log+ std_conc_rem, 0,150, - color = 'mediumorchid', lw = 3,ls = '--', label = r'$\mathregular{\overline{ln(\overline{C_{mod}})} \pm u_p}$') - ax.vlines(mean_conc_log-std_conc_rem, 0,150, - color = 'mediumorchid', lw = 3,ls = '--') - - ax.legend(loc = 'upper right', fontsize = 18, framealpha = 1) - ax.set_xlabel(r'$\mathregular{ln(C)}$ (mg l$^{\rm{-1}}$)', fontsize = 20, weight = 'bold') - ax.set_ylabel('Frequency', fontsize = 20, weight = 'bold') - ax.tick_params(axis='both', which='major', labelsize = 18) - ax.set_xlim(1,5) - ax.set_ylim(0,37) - - fig.tight_layout() - figname = '_hist_ln_overline_C_mod_vertical_' + str(l+1) + '_' - fig.savefig(outpath_figures + '\\' + str(sampling_date) + figname + most_frequent_sampler + '.png', dpi = 300, bbox_inches='tight') - fig.savefig(outpath_figures + '\\' + str(sampling_date) + figname + most_frequent_sampler + '.eps', dpi = 300, bbox_inches='tight') - - + + # Plot overline(C(z)) + fig, ax = plt.subplots(figsize=(6, 6), dpi = 100) + ax.hist(mean_c, bins = 50, color= 'teal') + ax.vlines(mean_conc, 0,170, + color = 'darkred', lw = 2, label = r'$\mathregular{\overline{C_{mod}}}$') + + ax.legend(loc = 'upper right', fontsize = 18) + ax.set_xlabel(r'C (mg l$^{\rm{-1}}$)', fontsize = 20, weight = 'bold') + ax.set_ylabel('Frequency', fontsize = 20, weight = 'bold') + ax.tick_params(axis='both', which='major', labelsize = 18) + ax.set_xlim(0,200) + ax.set_ylim(0,50) + + fig.tight_layout() + figname = '_hist_overline_C_mod_vertical_' + str(l+1) + '_' + fig.savefig(outpath_figures + '\\' + str(sampling_date) + figname + most_frequent_sampler + '.png', dpi = 300, bbox_inches='tight') + fig.savefig(outpath_figures + '\\' + str(sampling_date) + figname + most_frequent_sampler + '.eps', dpi = 300, bbox_inches='tight') + + + # Plot hist ln(overline(C(z))) # f) + fig, ax = plt.subplots(figsize=(6, 8), dpi = 100) + + ax.hist(mean_c_log, bins = 50, color= 'peru', alpha = 0.8) + ax.vlines(mean_conc_log, 0,150, + color = 'firebrick', lw = 2, label = r'$\mathregular{\overline{ln(\overline{C_{mod}})}}$') + ax.vlines(mean_conc_log+ std_conc_rem, 0,150, + color = 'mediumorchid', lw = 3,ls = '--', label = r'$\mathregular{\overline{ln(\overline{C_{mod}})} \pm u_p}$') + ax.vlines(mean_conc_log-std_conc_rem, 0,150, + color = 'mediumorchid', lw = 3,ls = '--') + + ax.legend(loc = 'upper right', fontsize = 18, framealpha = 1) + ax.set_xlabel(r'$\mathregular{ln(C)}$ (mg l$^{\rm{-1}}$)', fontsize = 20, weight = 'bold') + ax.set_ylabel('Frequency', fontsize = 20, weight = 'bold') + ax.tick_params(axis='both', which='major', labelsize = 18) + ax.set_xlim(1,5) + ax.set_ylim(0,37) + + fig.tight_layout() + figname = '_hist_ln_overline_C_mod_vertical_' + str(l+1) + '_' + fig.savefig(outpath_figures + '\\' + str(sampling_date) + figname + most_frequent_sampler + '.png', dpi = 300, bbox_inches='tight') + fig.savefig(outpath_figures + '\\' + str(sampling_date) + figname + most_frequent_sampler + '.eps', dpi = 300, bbox_inches='tight') + #%% 3. Uncertainty u_m due to lateral integration # Based on nomograph (Guy & Norman 1970, based on Hubbell 1960) @@ -895,9 +788,7 @@ def uncertainty_analysis(analysis_data, outpath, outpath_figures, sampling_date, figname = '_Contribution_to_U_F_article' fig.savefig(outpath_figures + '\\' + str(sampling_date) + figname + most_frequent_sampler + '.png', dpi = 400, bbox_inches='tight') - #%% Export data - maxpost = maxpost.iloc[::-1] - maxpost.reset_index(drop = True, inplace = True) + #%% Export data uncertainty = pd.DataFrame([u_sys, u_m, np.sqrt(u2_p_final),np.sqrt(U2_param), np.sqrt(U2_rem), U_C_perc, U_Q, U_F]).transpose() uncertainty.columns = ['u\'_sys', 'u\'_m', 'u\'_p', 'u\'_p,param','u\'_p,struc', 'U\'_C', 'U\'_Q', 'U\'F'] diff --git a/classes/__pycache__/SDC_fines_method.cpython-38.pyc b/classes/__pycache__/SDC_fines_method.cpython-38.pyc index 5bac8b637606f61d3e9cd5bd8bacff5e10710f44..80a58e1e2853650abf28a69cad2bb56eb3e53327 100644 GIT binary patch delta 2464 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 delta 2596 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 KM^Ajj<Nh~wFB}>G diff --git a/classes/__pycache__/SDC_method.cpython-38.pyc b/classes/__pycache__/SDC_method.cpython-38.pyc index 88350a5e69c7e26f5c1a2845ba65b6656994b6f7..e21284ed46ad6d8d6d5e38799777e8bb6debdccd 100644 GIT binary patch literal 17304 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 U6z*^-f*0<LNd}Udk{|7V0WTn!i2wiq literal 17281 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 E1HcfDa{vGU diff --git a/classes/__pycache__/Sed_flux_big_bend.cpython-38.pyc b/classes/__pycache__/Sed_flux_big_bend.cpython-38.pyc index 5d43f5b1c76eb827b2e3056999c6ad1f2a63fb38..349b62f06455ff9a5dd8d3ddacd254475dea8b71 100644 GIT binary patch literal 4616 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 F{|n?zD0%<@ delta 1557 zcmah}TWb?R6rR~z?$_3~Yg?PviUuq;N?QuW7cVa&h*r>`F58?KBikh1ZnTw+s}#YP zg0O!ec~%hd5BR3|6ZRj7FXCfg;@L~KtJ&6F=FH?f-+brHIkR~?|7|*bH<gMLd|tk% z)h}b8(my#`GY_~&wD$QvKTQPzeX3yUf^H;nS)n%Bd!jho;1wL(Pgz2M0s|~?z=Hsh zTBJiE+F^92OCSdE9@AlU77{?-Fe2&F9_g@<gcPJ916jyH9(Qms(&05mV|BWR?^W`S zK754;*EM)e*ds8iMRcn3BH5$k1lNo`iv&hQa;*OZa>jaWM?k6nD#5tJjc8FVHc&Of z!aB~0BT^FK<UaR+aX6D<oHaM)sUv(`H?GBW!P|fB_;ZH_z%wVjx_Ex`Lv+IExjD^* z$K6`5xp~=sr@U)e-l49nJ6%a&Ig?I?p=u)O(He!qD9%31@cRd|hdsn%a9vw2<r970 zAdyfxp9OROsHKOM?1;vp+%VxdUoe139<zZn`AH1+d%g8*h&MjtMOz8&WRFt3>{|zZ zO5V-ZvQiGn9a21P{z}Y`m1ELIy(Vo`8(>lCfEHBz@Q68+ykWjh-n+@;50yh>@v_o- zBLCR2*BMD^KCh}$v#qIeqgF+r-D(AZV&00V)s`Yxs#d%rx9Xa#)L)pB>4ho#3%7W+ z*~Wmptg7;^#ctLcXyhGpKfOw$=GXKB&ueu}F@LAe6jk>>!%ie&n-ZD}IJR%2A#9#< zG)c2G&zT=H;`LaR76`t5hBEy^-uBw#Tz`%k*fomY{wa2uakPq)Rz#AZS&<}*Z?rdC zyXsl<R`wKcu`NY2x3jZ`dLAQ{vpdqWs<N`=7p$D$m7J;sF_*QvILr!SIY+Cs7@&=K zVt;`S&rnLGFk%q&1TTg0f}qD+3gZPqmv_+#vFzTD@*qPObwSncr&Gs3pPY^*%<s9& Fe*lrYefIzW diff --git a/classes/__pycache__/Sed_flux_big_straight.cpython-38.pyc b/classes/__pycache__/Sed_flux_big_straight.cpython-38.pyc index d0996c9e2e14e7d1e851ffbcc439097d75c6f1ad..a732de2f7bbee1ac7ba6fd66e7caac1a5eb158d1 100644 GIT binary patch literal 4718 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 delta 1481 zcmaJ>-HRJl6u)O??#v{aWRl%{?rxUdx^$bR3%k~~R-)nuB7)Fj3njD+)7)_y%x==j zM0X`=h1C~PaG5`#nMd_aeGq)~59niI{sM*SlTRX~=iYoamS(so=lp)>{LZ~+KK|Z% zSWewYCgTKu_kRTEm%?dkP5K8;&#$aI(tt9BQKmAD=`6<LEaB=Q)Kt!#wsTbDPLP89 z>3~vQpg*kA*cdI-xPYFNX<`Z)!rOx~O-``w6!+K$+r%y};nLX_`kRQv*t%<AM{|-( z)57}|>oZeqNqGN3IkU{pvh6QPEz8ca3jXJQ-jQN5xWOy5i8iF4piQb@uPS)n?@2|8 z;3xt+f;$n^Jq<xm3w~1l2RrC?Bs2uPB-%P~fBfTl2CjE-b#BUpFkljsC$n<3J}|v6 z^`rseQwycO+>=>?k*}l@89+$-GBf&$FZps0PVjn{d<VC`Ktvf(Up+y+WH8VRF{4C8 zD5B+5i7+#i`*fNn@Em5bv|v<U_hZwFyeixbN)-*Z{H=0J5<nJ#tX>^S=Xj9DKpDjS zSZ~yxXUw{fqQrPFA~N$Oa-y(8I8rQfk=Lr^-rMd-wdiX-=>!U-N}hAl>*AydY-xxM z@$&quA-KRwSrWnsL<#6A*av0UN`cHIv5*%hXT{fFSiHJWoO*GC@j=C|cAk?uCs!gL z%ai@`8LW(_Iz2z$Z*#WIGa&%p>U)1oRmG67VcN<t@)4=51!s+|m0Hre({Qbh@7WFa zt{;K*FKl@DppoD=V-;xd*m(VY6~l<y&GudU&m;6}rqyhH=6F`Ci*<*t6PZ@G-JSy~ zOOfU|?WSFKqIlhIH+;L<_&m6l+Fj$%ctpKc_mH8c=h?@Re9$;VV;=>-r``fBpysYh z{f6Ikf-C0Q_V{hVI*-2#-aeXLT%D_Eh`a;}7?7sHUuNmOm<}5Rub~9ea3jk(zRnHL zNE2HHWQXhWB}ph%@{wj)tW~$Hh#qzi+Q;5@@J+h-fp;F&YuO{~Q>S_P;xl8a<&P~f zjzxTweP!?2>>!;f6l*!5w7<7VzL_ab$^AvLHAh}pBp=R^7Z=G#GxFvC$qqB63;afi h3Czt`e3$r;BfWaiV%?_m2LBv&w$Lccdhp@W=2N6tbIAYz diff --git a/classes/__pycache__/Sed_flux_small_bend.cpython-38.pyc b/classes/__pycache__/Sed_flux_small_bend.cpython-38.pyc index e21ab33c99001233a000905bd44d9d36852de4f3..7083782b3d1303d6d3318af406eb9e43e1cbfca8 100644 GIT binary patch delta 2275 zcmcIm&2Jk;6rb4-uf5*gIF21VX`7nXl$he?t06+Pw1S8W5|^r|NU2t9&vxTx?RD3i z)DCNmlygwTp7@etapF`}NO0osK+Flapr{A#JrLgPIv<7@_0n0*?Azb`=FNM*c^doY z3r~yMT~(D4v}dsi^KSmBc16U0{;(`w#OGpweve85#chfWiYpXX-8g`5JaA&47Bn!c z7>1*k219}V9`x29LZC|d9!U_HB#A;)qLDF6>hd0Xh)If!?_!Kdx+{2`$NP8(o>jER z-Tw>_VPEuOJBUnpl8=313hm$=0-Iy+DOfdy{&zkDoNS-(ir(8V;EGI!<d_%t5~tk; ze@WS^xe+1c$<(f}#)bUph!f1kv-NXl@oykVTJ~dJ0y;}<uwrClqvp>K5<lAUNjzWi zd8QD#xGUgj8xgjN^c&^oNWW3@|J^26FAVm1B|4F>(YGAAv@61%!hZ5)?AW{9kK`?$ zE$O3GCaQ%jL}tjV<jNo#w6BoY$ZVfuYV50|L|%{VhZ?y`-XLXiZI=&~8Y6Qj-(<ck zfxncGd?|;>LJsxFB3UBWLo!qmNrNj^RB=dnoGe=y$~L}(GpLWd2`ef{7HU|eH^S1k zP*)x*Z+w64h0D7)y8ch<`z2_9RFuI_@iBG=-DG&eOoA+VlSx1rssNhy*_iY}9H_tx zeQty6V`g{Np;;F1=~>NBGM0sXHC%Z<k20t`1}HE?VU->1Yb3omg~F*6xSQ~S;HNAe z^d9%+{fs}}hbv@{f7JG6FRM=ybO)7If;qXU(xl$18@8=i%mxWI<PUNs?jQlz(gC~F zN|;IyYF4YZZ3aKe_j&?gE}Piq%H<MA6Lzg(w!DsQQnBjTj{6*!pW{M_cP}$$5e6#S zM#Z#UDYOl{xo%LgVjI;Bs+w)jHJXlXcr~YCef1@4zut01ww8y%f(}i%y{&y@+D^4s z^E!pu`dq7YkOG_v6~`tJM*M-(@K}&E_Smdh>)!TsajkB6>#k{S+J^hdTDWhwSePxB zsC?%*;ceksvtiZt;BKa($5w(jo-}JTS*bW}z1FC%o2@|@zun4N@-N>tZ_26Lr5xp( zwnt;2&ZZmOOO{vJB~OK>?RZploy`WJLffv@snB6#tR2cgW1Z+NwTvwj7E{r1U86(A z$LpqR2Hzxa;&ech<v>%4ai)F4sGGrpa=l08FbUl=>rI+Ik<Qe&413dT(eW+Q)|*bN zRjb&hYcwpACTgUuw>-o3sKiV-W15WIL}()VV7L^S8-pJ%$i`LK@IDOl2&GW#3$PHM z#sZ(_6&!r7O!asf7Z5y$9OiKB@7VA+QUHmcFb)e`239IKg;Sh>^Sp*L0{DX`jf=qJ z4h8NsU*IS444&a8@idph8XpEzI!7g4Cr(w@6I5($)|(x7C3vRHi0%>u7-;IH-n(GX zbXx~WR+djyIL&nQFwbE$V!kzh7IPS#2z@Th4^guNr^j&cL>0?)z+E_-I}8WEtC^4K pv7@D-H3LV>L*OxY7>>A$|MLE!mYZe;8VY#ogu_26YS7c(`3H67Pn-Y% delta 1399 zcma)6OK;Oa5Z>`4&eM6fF)3*%Q6Yj#Emc8Cr5xx5dO@N{D56+yHiQbdNnHn}C~1KR zZb+5(2heasoGQ-n5BLMVz!A>9A*3*N9*z5uSZmkonQy<D{btt(xv%HthoO+4VB7f& zr4J(q@}vmmFLUBJq(!uTB6-1rx&@jAs}>Xu35|xtDxRHe2&YBBq2FwtAoe@hw=z5n zNvYiiw@;{#`rBNSZ}2og$y-h#`_Lv$o(5@%$}~(PG)iM-sVUHSQ#3h~Z$Jy5MY0Dg zuh1gwi>9YVXu^~l&=3{Uf>DBV&VDO|#uajgf2j*dB50(|H$DGDMMoX1WO_~CFfIEb zC9kB;NI{|J-V2X82cPa@*tj?OeC#y*Ji$Etrmx`{#-F*Z9^VOnpttRQytX&B+wP_? zetOu=Wm^Cmr&(u<Ui=Es3uQpXy)8(PHZ*<Zu9h}~qwhTG>#oYmFQ+B}Tpe^aa1`yX zt1xXS1D&vGkHHW{FCLZ9(IeF8s@)@V)IK6Uwn8CKc{i)A_R=6}JYw?6nEfp&m=TaY zZgXsa=^Z6AtVSq#K=L_u7|5jx0d;F#({**Vv_UOU|3KCd@N~0WaEZMOKDuY$5yOLn zC2D&0nP%`fFJs5{^Y-sLzO1lXt5!>fTB(_awoxwSqn2cps=8JzS^lC{T{AU(?Ik-5 zO^w=D$`XxA4Wo&gVQAYHzpm98m2ZKceUzs}(Offi_FbN2f92VH?>gct!@hXNG!Ay( zx{m|lV<12fA`lbVx3IG4^Fo&3)8T;YWFs;p1RD{-ez`Nj36KHwbu#>Q&SA=@ElE{r zrKqZwxKUfLZX1`F8p((jU)4?aCNi;m6~h!_b@fF_zcDwYRUxshI)b>ZUF6N_(~xd! z+~J&=c0rRp(t$bc6sFJv&$z&BAv!YEcg?z710J`Ty^bcH6b8;Y*P3pOYwj3*tlMnZ RWporAs*m&I46?)M!ao?$UF!e< diff --git a/classes/__pycache__/Sed_flux_small_straight.cpython-38.pyc b/classes/__pycache__/Sed_flux_small_straight.cpython-38.pyc index a7cdf704a6c62245f3c3043161970dc4425af8f6..fd75831099edbb3c8bbcf23a4f984cbd877fdf50 100644 GIT binary patch literal 4704 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 RNi>Nd;CLv!d`IHS{{RsxPd5Mn delta 1853 zcma)6&5zqe6rbmh*!glkH(Bqd>2^1jSe8~@%7T!V_5fU{gg~?xi^^CT<3{Aeb(|_& zB^VSqB6a0|AQ1-+9J#@j8yC(#pgpoDI9FA}8^;N|B)h`VJipBE_kM5Yz44sXe!ikS zNT(A7pD%v|^S9EmQh{HO_cp60Hx{WtMH-_Lm1&$NXws4=pv4$+Y_Gi|El~<IM~hY* zNpgs#FnkRKO0<j;NtzF_cqs5v6%(OzqKe7+Oo};v1ynH|P3<Vmp{X-J6;;!;Y9%mF zW=_j4(O3vlLs~APiFxMuzk`}9&~3W&4bh6UMz7<0?WgDPH4m0Q5dVltSPw_?KZ`x_ z_R#HetU%zT(bj?a(ZdRt!tpMSZj~p50_7+_ubU+efyzT}z>Nv3;Dj6U10D-OzU5Rh zh6x$+xXLtDXohC7czKKvXkjS2oXZbj1S1dLBhTRBS2!h%MK?AgwCG9$7>FtvL7AY> zvA0TSK_!>sYse{0_+jk-C}GDKSMprhjbA1kV(S+yNu?X#37>KyXLA+jaJJ;i1(-1Y zIN`<zv5N)H?0aPb#FJ57BHYi$%U*RdTh!Ini67r*HKGN&6;?sUe@S}H0&I#rf+Cr~ zFmBD3&J@B99AXE~G!Far@XxSoNsLZ~J6L4%&bMv?7SL@bd!EKvbm!kDW3_~FdNAw9 zLhQWO<q9hKoX0F4J4Y)8qJ}JXg~wD`mYnZd#U%rI#yzeqIMHczGkTViPsncV!_#~C zb)0I<P-fbM_%D*#ik8v4Eu-1gyRKt2tVeDD`g7QF1SI)aQull>wF8>}ed>)5M4WPB zXadn_+K&teKQ&_Ez~|)dX&+yx*0XKX(K|hqYg^`SE|474ZW?tnNYo9x;Tp}xQ~&Su zjWYX=1JUX9+7tyH$2bc3meKbO<$Xx_KPWf$M7QBK%^+6qG&@c=fG;$uuZOal5;?lr z$3(W~L#B+&R5P2NGrKoX-C?(aa}y04-H*@^J`Vz<APad>fIQS-i*Qqcdkr|?NChf{ zdwC}=<1GHBI5*wODNqzxR2Ii8(``<GDj+tk@^5mX`fe$Zbe(qUx*mvLyVtUhoa>k? zP`dSoeRQ*9yNy=ksp+sA%y|`!R_g0d%;sAM|0%w<ex!%BT}EaRZ{NBoVvhJPvhfYA z9P01iTB7?`a~lV9cz+32qx}2Jkl)U&A7~50?WNc#=fM)-|B~C7FX{Ca!hhv9Z?n@7 h7V}K|!bY+l2J&I6Lwim04!ifeH8es&_V4De{R8ca$)^AS diff --git a/classes/__pycache__/Sediment_flux_BD_single.cpython-38.pyc b/classes/__pycache__/Sediment_flux_BD_single.cpython-38.pyc index 2bf8666b0d6313ba8499e4f30e6f8fec227cfa3d..4dd3580ea4f24ed20c83f5db5defc6376c03d905 100644 GIT binary patch delta 1063 zcmZ`&&rj4q6mF-#yW53ryR0iHU;;`EBzo|I7=zqAZb*!YX$n(HcT0COErc~w*MxY- z^kUQl+`V}Bt|zZ1lX&&)pWvHr0}|s*=FNNGd~d$j*Y>piscmgrmMOq^{?iUVezv~K zV}*y+Xu+<*dIBqbgam;~Jt0@Xin)qKjIe}dtY8&up_XeIqQZ$N3Yk>xa<wbfj(TdY zXHrkgjZE(8xtS?FBd=xV8DDj*V`Gf<a|xU0D6e0@HC)HF3bi;&MQn8h+yGXCYG+mk z7O<&~aDvXod<r;I)S`_(kEY>d8raP~BEP`5!FT#1Vbq|ILE$WKCUvTpky3`m59P*2 z?aHxv8C_m@Dv~wa%Iykq`v{Q7cqX@td+OXcvuTqzgetgG9=)SYpkD6?u7LH)qCC0H zky#;kpmK*gP_+X&vt`b=t2zJWBWzBd@)VH=rQ!<&t~?REkSkk9ZC3#NS|#gNVu-9= zvcZEU|HE{syN9|0b&5spSY*X}Z5!-wt?e>vi;TPjKTW;VPcRe16}Onx=bsV@z8@lU z!@n-(`tfkz_tFDDj=eM^eiZI!Z2E6>Cx8p=39=J~7p&rqzS$U(D9M<z7Z3bwrB!^_ zm&VNSG4_V>AWNBXm_%7w2h&UUXb>}JbIS`sDe=<iWdQdD!<5|MCEes^o|^?Q3>}YH z^C*bD;UG<;oj4$V5(aDrpuujGjQ|IA?>>&g2*m6p@JUdFhIN~1JS~F4m9lUqc3G2m z!rO}vkE^_h6(5WRalQCryq=3eP>@tnt=W<;mJ>n5r&c^Omn2a~#Vd35?gsEynoRRN zJlOR-rX+_4!x35J1*=1l@KdtPgLb#@<e6Ip{#AiF-JsH*w3;`yd>5?ME#AtmTD}uj S+^Ma$xB^+fY91E7+VUSTw-ze^ delta 1027 zcmZ`%zi-n(6!zKikJxdVIB84z10kVS%8(+EU_(M}g_u~XE?!Pf&vBhNPIPvvraBX( zN^D3$w=uP>urRQ*@ed%7EU_~42QcvLSS>~3r1$*3@80*`yYqcmov)gQrl||CUc5(c z_oMlxG%IDWSWWn<V0&QEBT*2T)EANxc$CNl5s^rwL}a26)l(BC7MXC4kPwS~DN*B6 zfl7Tj(PE`QN?%RNu~s0hUrzK`zc9cmL?h)H(Jm#TUy4aaEog&Oh*7YWjAe+JErC=a z%Vf%h8CRJC+)_(87cWs#g`6c;Vdfx1OR!Ue?D{~YKOwdtZVV7jnZ~Lufq^Qig%zge zNX{YuE^j{8Z)}&Z(RIN&qB~?csTWLhAOiD*tR!`QU)h+k5^3esoYf#@ttB)CqAiSN zqScI97ZM95wwMLeTA*3aHJ@*4{+llneQ~<ENO!I}{)X!Ot77fdn*xNlibjp1yhyhf z17+ht1lP&_&9qpfCmsmQ;%)U5+5DY)_{_GR`a$4_9*+H?i+jEskW?Icwz*HIc<4kC zj+~IB$ZI!JV-ostPP$P6PDa6G=u(kC*IEy$1n(-XIl=hY!O_qO0^D^&LbE5BS_``C zdpL@z<9o+3m0^Rw)^^oiFmmE{lmF1RW_J0ijjiP&G_f1I``80nh$H{Zg%a*KqHCb1 z>zUig+$OkGJe}J06F0!)Q55;zz@<*;x%LWBqa#0_0`G@0en5QBk0aX(U5C0+d{w-C z=Gtne_u<%bK6Hu>?0R+$xED-LivqsQKb7yG4*ynuxzUHtf}|kDup|vB;$J3ns&65Q zztubKdyv(xrz*x|bcAs#hm+xWN^fU#D`RNjMD#8IoBz@`;SW`fmSis<@HeHVlHa1u S_l?eSR)%(Nx*h(?*!}}Z9tyw! diff --git a/classes/__pycache__/Uncertainty_estimation.cpython-38.pyc b/classes/__pycache__/Uncertainty_estimation.cpython-38.pyc index d28a92c22b93675b2f981ff17ee60a4e38eebbe5..38ba114b8e76cf1fd8106e8c7ca91e5954b8f5e0 100644 GIT binary patch literal 21419 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 literal 22208 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 U(kf~eq<yPtBD50o;j#Gt0CYn!cmMzZ diff --git a/path_files.txt b/path_files.txt index 533de3e..5eeb523 100644 --- a/path_files.txt +++ b/path_files.txt @@ -1 +1 @@ -C:\Users\jessica.laible\Documents\Mesures\Manips&Sites\Grenoble_Campus\20230510_Campus \ No newline at end of file +C:\Users\jessica.laible\Documents\Mesures\Manips&Sites\Grenoble_Campus\20221129_Campus \ No newline at end of file -- GitLab