diff --git a/las_outputs.py b/las_outputs.py index edfd6db..3260657 100644 --- a/las_outputs.py +++ b/las_outputs.py @@ -12,6 +12,7 @@ ########################### IMPORTS ########################################### import os import io +import re import subprocess import pandas as pd import numpy as np @@ -147,6 +148,42 @@ def plot_profiles(profile_name, survey_date, csv_output_dir, graph_loc, ch_limit plt.close() +def calculate_volumes(profile_name, survey_date, csv_output_dir, ch_limits, volume_output_dir): + csv_prof = profile_name + '.csv' + beach = re.search('.*(?=_\d)', profile_name).group() + profiles = pd.read_csv(os.path.join(csv_output_dir, csv_prof)) + + # Remove metadata, and extract profile coordinates + profiles = profiles.loc[:, 'Chainage':].set_index('Chainage') + + # Find landward limit of profile (behind beach) + ch_min = ch_limits.loc[profile_name, 'Landward Limit'] + + # Open volume spreadsheet + csv_vol = os.path.join(volume_output_dir, 'volumes.csv') + try: + volumes = pd.read_csv(csv_vol, index_col=0) + except FileNotFoundError: + volumes = pd.DataFrame() + + # Format dates + date_str = str(survey_date) + date = '{}-{}-{}'.format(date_str[:4], date_str[4:6], date_str[6:]) + + for current_date in profiles.columns: + # Get Nielsen erosion volumes + chainage = profiles.loc[:, current_date].dropna().index + elevation = profiles.loc[:, current_date].dropna().values + volume = neilson_volumes.volume_available(chainage, elevation, ch_min) + + # Update spreadsheet + volumes.loc[profile_name, date] = volume + + # Save updated volumes spreadsheet + volumes = volumes.sort_index() + volumes.to_csv(csv_vol) + + input_file = 'Parameter Files/las-manipulation-survey-2.xlsx' params_file=pd.read_excel(input_file, sheet_name="PARAMS") @@ -166,7 +203,7 @@ for i, row in params_file.iterrows(): profile_limit_file = row['PROFILE LIMIT FILE'] csv_output_dir = row['CSV OUTPUT FOLDER'] graph_loc = row['PNG OUTPUT FOLDER'] - volume_output = row['CSV VOLUMES FOLDER'] + volume_output_dir = row['CSV VOLUMES FOLDER'] tmp_dir = row['TMP FOLDER'] # Get base name of input las @@ -203,18 +240,18 @@ for i, row in params_file.iterrows(): beach, args=['-parse', 'sxyz', '-keep_class', '2'], verbose=False) + + # Update survey profiles update_survey_output(df, csv_output_dir) # Get landward limit of surveys ch_limits = pd.read_excel(profile_limit_file, index_col='Profile') - # Plot profiles of current beach + # Plot profiles, and save sand volumes for current beach profile_names = df['Profile'].unique() for profile_name in profile_names: plot_profiles(profile_name, survey_date, csv_output_dir, graph_loc, ch_limits) + calculate_volumes(profile_name, survey_date, csv_output_dir, ch_limits, volume_output_dir) # Remove temprary files remove_temp_files(tmp_dir) - -print("doing the volume analysis") -# test=profile_plots_volume(csv_output_dir, profile_limit_file, volume_output, graph_loc)