diff --git a/main_delfland.py b/main_delfland.py
deleted file mode 100644
index d901468..0000000
--- a/main_delfland.py
+++ /dev/null
@@ -1,519 +0,0 @@
-# Imports
-import os.path
-from pathlib import Path
-import pandas as pd
-import numpy as np
-import plotly.graph_objects as go
-from plotly.subplots import make_subplots
-from pv_tool_logic.imports.import_data import Dbase
-
-# Import Dbase
-dbase = Dbase()
-dbase_dir = Path(r"C:\Users\deenekat7271\ARCADIS\30242510 - Proevenverzameling - Project\05 Project execution\Proevenverzameling_v3\Delfland2026_PVtool5_0_v2.xlsx")
-export_dir = Path(r"C:\Users\deenekat7271\Downloads")
-dbase.import_data(source="Dbase", source_dir=dbase_dir)
-
-df = dbase.dbase_df
-
-#%%
-
-print(df.index)
-
-print(df['ALG__BORING_MONSTERNR_ID'])
-
-#%%
-export_loc = dbase_dir.parent
-export_name = dbase_dir.name
-print(export_loc)
-print(export_name)
-
-dbase.export_dbase_to_template(export_dir=export_loc, export_name=export_name)
-
-#%% Klaarzetten data in df voor plots
-index_list = []
-boring_ref_list = []
-boring_nr_list = []
-boring_pos_list = []
-monster_list = []
-diepte_list = []
-volumegewicht_list = []
-ocr_list = []
-ocr_aangenomen_list = []
-grens_list = []
-grens_reken_list = []
-pop_list = []
-pop_gem_list = []
-
-for index, row in df.iterrows():
- boring_ref = row['ALG_REFERENTIE']
- boring_nr = row['BORING_NUMMER']
- boring_pos = row['BORING_POSITIE']
- grensspanning_proef = row['ANA_GRENSSPANNING_PROEF']
- grensspanning_voorstel = row['ANA_GRENSSPANNING_VOORSTEL']
- grensspanning_reken = row['ANA_GRENSSPANNING_REKEN']
- pop_veld = row['ANA_POP_VELD']
- pop_veld_gem = row['ANA_POP_VELD_GEMIDDELD']
- ocr_txt_val = row.get('OCR_TXT')
- ocr_dss_val = row.get('OCR_DSS')
- ocr_rij = ocr_txt_val if pd.notna(ocr_txt_val) else (ocr_dss_val if pd.notna(ocr_dss_val) else None)
-
- for proef, diepte_col, volw_col, ocr_col in [
- ('CLAS', 'CLAS_MONSTERNIVEAU', 'CLAS_VOLUMEGEWICHT_NAT', None),
- ('CRS', 'CRS_MONSTERNIVEAU', 'CRS_VOLUMEGEWICHT_NAT', None),
- ('SD', 'SD_MONSTERNIVEAU', 'SD_VOLUMEGEWICHT_NAT', None),
- ('DSS', 'DSS_MONSTERNIVEAU', 'DSS_VOLUMEGEWICHT_NAT', 'OCR_DSS'),
- ('TXT', 'TXT_SS_MONSTERNIVEAU', 'TXT_SS_VOLUMEGEWICHT_NAT', 'OCR_TXT'),
- ]:
- if pd.notna(row[diepte_col]) and row[diepte_col] != '':
- if pd.isna(row[volw_col]) and row[volw_col] != '':
- continue
- index_list.append(index)
- boring_ref_list.append(boring_ref)
- boring_nr_list.append(boring_nr)
- boring_pos_list.append(boring_pos)
- monster_list.append(proef)
- diepte_list.append(row[diepte_col])
- volumegewicht_list.append(row[volw_col])
- # OCR
- if proef == 'CLAS':
- ocr_list.append(None)
- ocr_aangenomen_list.append(None)
- elif pd.notna(grensspanning_proef):
- ocr_list.append(ocr_rij)
- ocr_aangenomen_list.append(None)
- else:
- ocr_list.append(None)
- ocr_aangenomen_list.append(ocr_rij)
-
- # Grensspanning
- if proef == 'CLAS':
- grens_list.append(None)
- grens_reken_list.append(None)
- pop_list.append(None)
- pop_gem_list.append(None)
- elif proef in ['CRS', 'SD']:
- grens_list.append(grensspanning_proef)
- grens_reken_list.append(None)
- pop_list.append(pop_veld)
- pop_gem_list.append(None)
- else: # TXT, DSS
- grens_list.append(grensspanning_reken if pd.notna(grensspanning_proef) else None)
- grens_reken_list.append(grensspanning_voorstel if pd.isna(grensspanning_proef) else None)
- pop_list.append(pop_veld if pd.notna(grensspanning_proef) else None)
- pop_gem_list.append(pop_veld_gem if pd.isna(grensspanning_proef) else None)
-
-vg_df = pd.DataFrame({
- 'ALG__BORING_MONSTERNR_ID': index_list,
- 'ALG_REFERENTIE': boring_ref_list,
- 'BORING_NUMMER': boring_nr_list,
- 'boring_pos': boring_pos_list,
- 'monster': monster_list,
- 'diepte': diepte_list,
- "volumegewicht": volumegewicht_list,
- "grensspanning": grens_list,
- "grensspanning_reken": grens_reken_list,
- 'ocr': ocr_list,
- 'ocr_aangenomen': ocr_aangenomen_list,
- 'pop': pop_list,
- 'pop_gem': pop_gem_list,
-})
-
-vg_df = pd.DataFrame({'ALG__BORING_MONSTERNR_ID': index_list, 'ALG_REFERENTIE': boring_ref_list,
- 'BORING_NUMMER': boring_nr_list, 'BORING_POSITIE': boring_pos_list,
- 'monster': monster_list, 'diepte': diepte_list,
- "volumegewicht": volumegewicht_list, "grensspanning": grens_list,
- "grensspanning_reken": grens_reken_list,
- 'ocr': ocr_list, 'ocr_aangenomen': ocr_aangenomen_list,
- 'pop': pop_list, 'pop_gem': pop_gem_list})
-print(vg_df)
-
-#%% plots
-# loop_column = 'BORING_NUMMER'
-loop_column = 'ALG_REFERENTIE'
-# loop_column = 'BORING_POSITIE'
-
-count = 0
-max_grensspanning = vg_df['grensspanning'].max()
-min_ocr = vg_df['ocr'].min()
-max_ocr = vg_df['ocr'].max()
-min_pop = vg_df['pop'].min()
-max_pop = vg_df['pop'].max()
-for boring_nr in vg_df[loop_column].unique():
- subset_vg = vg_df[vg_df[loop_column] == boring_nr]
-
- # Data voor volumegewicht
- vol_data = subset_vg[subset_vg['monster'].isin(['CLAS', 'SD', 'CRS', 'TXT', 'DSS'])][
- ['diepte', 'volumegewicht', 'monster', 'ALG__BORING_MONSTERNR_ID']]
- vol_data = vol_data[vol_data['volumegewicht'].notna() & (vol_data['volumegewicht'] != '')]
- # print(vol_data)
-
- # Data voor Grensspanning
- grens_data = subset_vg[subset_vg['monster'].isin(['SD', 'CRS', 'TXT', 'DSS'])][
- ['diepte', 'grensspanning', 'monster', 'ALG__BORING_MONSTERNR_ID']]
- grens_data = grens_data[grens_data['grensspanning'].notna() & (grens_data['grensspanning'] != '')]
- # print(grens_data)
- # Grensspanning_reken (aangenomen) indien geen grensspanning
- reken_grens_data = subset_vg[
- (subset_vg['monster'].isin(['TXT', 'DSS'])) &
- ((subset_vg['grensspanning'].isna()) | (subset_vg['grensspanning'] == '')) &
- (subset_vg['grensspanning_reken'].notna()) & (subset_vg['grensspanning_reken'] != '')
- ][['diepte', 'grensspanning_reken', 'monster', 'ALG__BORING_MONSTERNR_ID']]
- print(reken_grens_data)
-
- # Data voor OCR
- ocr_data = subset_vg[subset_vg['monster'].isin(['SD', 'CRS', 'TXT', 'DSS'])][
- ['diepte', 'ocr', 'monster', 'ALG__BORING_MONSTERNR_ID']]
- ocr_data = ocr_data[ocr_data['ocr'].notna() & (ocr_data['ocr'] != '')]
- # print(ocr_data)
-
- # Data voor POP
- pop_data = subset_vg[subset_vg['monster'].isin(['SD', 'CRS', 'TXT', 'DSS'])][
- ['diepte', 'pop', 'monster', 'ALG__BORING_MONSTERNR_ID']]
- pop_data = pop_data[pop_data['pop'].notna() & (pop_data['pop'] != '')]
- print(pop_data)
- # POP_gem (aangenomen) indien geen POP
- pop_gem_data = subset_vg[
- (subset_vg['monster'].isin(['SD', 'CRS', 'TXT', 'DSS'])) &
- ((subset_vg['pop'].isna()) | (subset_vg['pop'] == '')) &
- (subset_vg['pop_gem'].notna()) & (subset_vg['pop_gem'] != '')
- ][['diepte', 'pop_gem', 'monster', 'ALG__BORING_MONSTERNR_ID']]
- print(pop_gem_data)
-
- # --- Subplots opzetten ---
- fig = make_subplots(
- rows=1, cols=4,
- shared_yaxes=True
- )
- marker_dict = {
- 'CLAS': {'color': 'black', 'symbol': 'circle'},
- 'CRS': {'color': 'orange', 'symbol': 'square'},
- 'SD': {'color': 'green', 'symbol': 'square'},
- 'DSS': {'color': 'red', 'symbol': 'diamond'},
- 'TXT': {'color': 'blue', 'symbol': 'diamond'},
- }
- marker_dict2 = {
- 'CLAS': {'color': 'black', 'symbol': 'circle-open'},
- 'CRS': {'color': 'orange', 'symbol': 'square-open'},
- 'SD': {'color': 'green', 'symbol': 'square-open'},
- 'DSS': {'color': 'red', 'symbol': 'diamond-open'},
- 'TXT': {'color': 'blue', 'symbol': 'diamond-open'},
- }
-
- # Voeg CLAS toe als aan legenda
- fig.add_trace(
- go.Scatter(
- x=[None], y=[None],
- mode='markers',
- marker={**marker_dict['CLAS'], 'size': 8},
- name='CLAS',
- showlegend=True,
- legendgroup='CLAS'
- ),
- row=1, col=1
- )
-
- # Voeg een subkopje toe aan legenda voor samendrukkingsproeven
- fig.add_trace(
- go.Scatter(
- x=[None], y=[None],
- mode='markers',
- marker=dict(color='rgba(0,0,0,0)'),
- name='--- Samendrukkingsproeven ---',
- showlegend=True,
- legendgroup='samendrukkingsproeven'
- ),
- row=1, col=1
- )
-
- # Voeg SD toe aan legenda
- fig.add_trace(
- go.Scatter(
- x=[None], y=[None],
- mode='markers',
- marker={**marker_dict['SD'], 'size': 8},
- name='SD',
- showlegend=True,
- legendgroup='SD'
- ),
- row=1, col=1
- )
-
- # Voeg CRS toe aan legenda
- fig.add_trace(
- go.Scatter(
- x=[None], y=[None],
- mode='markers',
- marker={**marker_dict['CRS'], 'size': 8},
- name='CRS',
- showlegend=True,
- legendgroup='CRS'
- ),
- row=1, col=1
- )
-
- # Voeg een subkopje toe aan legenda voor sterkteproeven
- fig.add_trace(
- go.Scatter(
- x=[None], y=[None],
- mode='markers',
- marker=dict(color='rgba(0,0,0,0)'),
- name='--- Sterkteproeven ---',
- showlegend=True,
- legendgroup='sterkteproeven'
- ),
- row=1, col=1
- )
- # Voeg DSS toe aan legenda
- fig.add_trace(
- go.Scatter(
- x=[None], y=[None],
- mode='markers',
- marker={**marker_dict['DSS'], 'size': 8},
- name='DSS',
- showlegend=True,
- legendgroup='DSS'
- ),
- row=1, col=1
- )
-
- # Voeg TXT toe aan legenda
- fig.add_trace(
- go.Scatter(
- x=[None], y=[None],
- mode='markers',
- marker={**marker_dict['TXT'], 'size': 8},
- name='TXT',
- showlegend=True,
- legendgroup='TXT'
- ),
- row=1, col=1
- )
-
- legend_shown = dict()
-
- # Functie om te controleren of er data is voor een subplot
- def add_empty_if_needed(fig, col, x_label):
- # Voeg een onzichtbare dummy trace toe als deze kolom nog geen data heeft
- if len(fig['data']) == 0 or not any([t for t in fig['data'] if t['xaxis'] == f'x{col}']):
- fig.add_trace(
- go.Scatter(
- x=[np.nan], y=[np.nan], mode='markers',
- showlegend=False, marker=dict(color='rgba(0,0,0,0)') # Transparant
- ),
- row=1, col=col
- )
-
- # Volumegewicht subplot
- for proef in vol_data['monster'].unique():
- data = vol_data[vol_data['monster'] == proef].copy()
- if not data.empty:
- showlegend = not legend_shown.get(proef, False)
- fig.add_trace(
- go.Scatter(
- x=data['volumegewicht'],
- y=data['diepte'],
- mode='markers',
- name=proef,
- marker={**marker_dict.get(proef, {'color': 'grey', 'symbol': 'circle'}), 'size': 8},
- legendgroup=proef,
- showlegend=False,
- hovertemplate=(
- f"Proef: {proef}
Diepte: %{{y}}
Volumegewicht: %{{x}}
ALG__BORING_MONSTERNR_ID: %{{customdata}}"
- ),
- customdata=data['ALG__BORING_MONSTERNR_ID']
- ),
- row=1, col=1
- )
- if showlegend:
- legend_shown[proef] = True
- add_empty_if_needed(fig, 1, "Nat volumegewicht [kN/m³]")
-
- # Grensspanning subplot
- for proef in grens_data['monster'].unique():
- data = grens_data[grens_data['monster'] == proef].copy()
- if not data.empty:
- # showlegend = proef not in legend_shown
- showlegend = not legend_shown.get(proef, False)
- fig.add_trace(
- go.Scatter(
- x=data['grensspanning'],
- y=data['diepte'],
- mode='markers',
- name=proef,
- marker={**marker_dict.get(proef, {'color': 'grey', 'symbol': 'circle'}), 'size': 8},
- legendgroup=proef,
- showlegend=False,
- hovertemplate=(
- f"Proef: {proef}
Diepte: %{{y}}
Grensspanning: %{{x}}
ALG__BORING_MONSTERNR_ID: %{{customdata}}"
- ),
- customdata=data['ALG__BORING_MONSTERNR_ID']
- ),
- row=1, col=2
- )
- if showlegend:
- legend_shown[proef] = True
- for proef in reken_grens_data['monster'].unique():
- data = reken_grens_data[reken_grens_data['monster'] == proef].copy()
- if not data.empty:
- showlegend = not legend_shown.get(f"{proef}_open", False)
- fig.add_trace(
- go.Scatter(
- x=data['grensspanning_reken'],
- y=data['diepte'],
- mode='markers',
- name=f"{proef} (aangenomen)",
- marker={**marker_dict2.get(proef, {'color': 'grey', 'symbol': 'circle-open'}), 'size': 8},
- legendgroup=proef,
- showlegend=showlegend,
- hovertemplate=(
- f"Proef: {proef}
Diepte: %{{y}}
Grensspanning: %{{x}}
ALG__BORING_MONSTERNR_ID: %{{customdata}}"
- ),
- customdata=data['ALG__BORING_MONSTERNR_ID']
- ),
- row=1, col=2
- )
- if showlegend:
- legend_shown[f"{proef}_open"] = True
- add_empty_if_needed(fig, 3, "Grensspanning [kPa]")
-
- # OCR subplot
- for proef in ocr_data['monster'].unique():
- data = ocr_data[ocr_data['monster'] == proef].copy()
- if not data.empty:
- showlegend = not legend_shown.get(proef, False)
- fig.add_trace(
- go.Scatter(
- x=data['ocr'],
- y=data['diepte'],
- mode='markers',
- name=proef,
- marker={**marker_dict.get(proef, {'color': 'grey', 'symbol': 'circle'}), 'size': 8},
- legendgroup=proef,
- showlegend=False,
- hovertemplate=(
- f"Proef: {proef}
Diepte: %{{y}}
OCR: %{{x}}
ALG__BORING_MONSTERNR_ID: %{{customdata}}"
- ),
- customdata=data['ALG__BORING_MONSTERNR_ID']
- ),
- row=1, col=3
- )
- if showlegend:
- legend_shown[proef] = True
- # OCR aangenomen
- ocr_aang_data = subset_vg[subset_vg['monster'].isin(['SD', 'CRS', 'TXT', 'DSS'])][
- ['diepte', 'ocr_aangenomen', 'monster', 'ALG__BORING_MONSTERNR_ID']]
- ocr_aang_data = ocr_aang_data[ocr_aang_data['ocr_aangenomen'].notna() & (ocr_aang_data['ocr_aangenomen'] != '')]
-
- for proef in ocr_aang_data['monster'].unique():
- data = ocr_aang_data[ocr_aang_data['monster'] == proef].copy()
- if not data.empty:
- showlegend = not legend_shown.get(f"{proef}_open", False)
- fig.add_trace(
- go.Scatter(
- x=data['ocr_aangenomen'],
- y=data['diepte'],
- mode='markers',
- name=f"{proef} (aangenomen)",
- marker={**marker_dict2.get(proef, {'color': 'grey', 'symbol': 'circle-open'}), 'size': 8},
- legendgroup=proef,
- showlegend=showlegend,
- hovertemplate=(
- f"Proef: {proef}
Diepte: %{{y}}
OCR: %{{x}}
ALG__BORING_MONSTERNR_ID: %{{customdata}}"
- ),
- customdata=data['ALG__BORING_MONSTERNR_ID']
- ),
- row=1, col=3
- )
- if showlegend:
- legend_shown[f"{proef}_open"] = True
-
- add_empty_if_needed(fig, 2, "OCR [-]")
-
- # POP subplot
- for proef in pop_data['monster'].unique():
- data = pop_data[pop_data['monster'] == proef].copy()
- if not data.empty:
- showlegend = not legend_shown.get(proef, False)
- fig.add_trace(
- go.Scatter(
- x=data['pop'],
- y=data['diepte'],
- mode='markers',
- name=proef,
- marker={**marker_dict.get(proef, {'color': 'grey', 'symbol': 'circle'}), 'size': 8},
- legendgroup=proef,
- showlegend=False,
- hovertemplate=(
- f"Proef: {proef}
Diepte: %{{y}}
POP: %{{x}}
ALG__BORING_MONSTERNR_ID: %{{customdata}}"
- ),
- customdata=data['ALG__BORING_MONSTERNR_ID']
- ),
- row=1, col=4
- )
- if showlegend:
- legend_shown[proef] = True
- for proef in pop_gem_data['monster'].unique():
- data = pop_gem_data[pop_gem_data['monster'] == proef].copy()
- if not data.empty:
- showlegend = not legend_shown.get(f"{proef}_open", False)
- fig.add_trace(
- go.Scatter(
- x=data['pop_gem'],
- y=data['diepte'],
- mode='markers',
- name=f"{proef} (aangenomen)",
- marker={**marker_dict2.get(proef, {'color': 'grey', 'symbol': 'circle-open'}), 'size': 8},
- legendgroup=proef,
- showlegend=showlegend,
- hovertemplate=(
- f"Proef: {proef}
Diepte: %{{y}}
POP: %{{x}}
ALG__BORING_MONSTERNR_ID: %{{customdata}}"
- ),
- customdata=data['ALG__BORING_MONSTERNR_ID']
- ),
- row=1, col=4
- )
- if showlegend:
- legend_shown[f"{proef}_open"] = True
-
- add_empty_if_needed(fig, 4, "POP [kPa]")
-
- # As-titels en layout
- fig.update_xaxes(title_text="Nat volumegewicht [kN/m³]", row=1, col=1, range=[8, 22])
- fig.update_xaxes(title_text="Grensspanning [kPa]", row=1, col=2, range=[0, max_grensspanning])
- fig.update_xaxes(title_text="OCR [-]", row=1, col=3, range=[min_ocr, max_ocr])
- fig.update_xaxes(title_text="POP [kPa]", row=1, col=4, range=[min_pop, max_pop])
- fig.update_yaxes(title_text="Diepte [NAP m]", row=1, col=1)
- fig.update_layout(
- title_text=f"{loop_column}: {boring_nr}",
- legend_title_text="Legenda",
- width=1200,
- height=800
- )
-
- # Achtergrond blokken toevoegen aan volumegewicht plot
- fig.add_vrect(x0=9.5, x1=11, fillcolor="rgba(235,120,120,0.5)", layer="below", line_width=0, row=1,
- col=1)
- fig.add_vrect(x0=11, x1=13, fillcolor="rgba(255,160,70,0.5)", layer="below", line_width=0, row=1,
- col=1)
- fig.add_vrect(x0=13, x1=14, fillcolor="rgba(230,200,100,0.5)", layer="below", line_width=0, row=1,
- col=1)
- fig.add_vrect(x0=14, x1=16, fillcolor="rgba(120,220,120,0.5)", layer="below", line_width=0, row=1,
- col=1)
- fig.add_vrect(x0=16, x1=17.5, fillcolor="rgba(80,150,255,0.5)", layer="below", line_width=0, row=1,
- col=1)
- fig.add_vrect(x0=17.5, x1=21, fillcolor="rgba(255,255,120,0.5)", layer="below", line_width=0, row=1,
- col=1)
-
-
- fig.show()
-
- # export plots
- html_filename = f"{loop_column}_{boring_nr}.html"
- html_filepath = os.path.join(export_dir, html_filename)
- fig.write_html(html_filepath)
-
- count += 1
- # if count == 3:
- # break
-
-##