Skip to content
Snippets Groups Projects
Commit 76c7e102 authored by Yu-Jin Schröer's avatar Yu-Jin Schröer
Browse files

Upload New File

parent 1e7168ed
No related branches found
No related tags found
No related merge requests found
%% Cell type:markdown id:078f613d tags:
### Import of Libraries
%% Cell type:code id:bcb5a389 tags:
``` python
import pandas as pd
import numpy as np
from mikeio1d.res1d import Res1D, QueryDataStructure, QueryDataNode
from pathlib import Path
import logging
from warnings import warn
import matplotlib.pyplot as plt
```
%% Cell type:code id:4a74aef9 tags:
``` python
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
```
%% Cell type:markdown id:143e4183 tags:
### Input data
%% Cell type:code id:831e72da tags:
``` python
folder = Path(r"R:\M_883_Entfrachten\Durchführung\Daten\2_Algorithmen und Steuerungsziele\Read Overflow")
res_files = list(folder.glob("Results/*.res1d"))
events_file = folder / "Events.xlsx"
storages_file = folder / "Retention-storage.xlsx"
```
%% Cell type:code id:0f4282cd tags:
``` python
events = pd.read_excel(events_file)
events
```
%% Output
gid Start_Time End_Time \
0 359 2022-04-24 21:00:00 2022-04-25 06:00:00
1 366 2022-05-23 13:55:00 2022-05-24 10:00:00
2 371 2022-06-05 09:30:00 2022-06-06 02:00:00
3 378 2022-06-23 23:05:00 2022-06-24 22:30:00
4 385 2022-07-20 21:35:00 2022-07-21 17:30:00
5 393 2022-09-06 21:15:00 2022-09-07 06:00:00
6 400 2022-09-18 04:30:00 2022-09-19 01:00:00
7 428 2022-11-18 17:40:00 2022-11-19 12:30:00
8 481 2023-02-05 00:30:00 2023-02-05 18:00:00
9 502 2023-03-25 01:45:00 2023-03-26 18:30:00
10 532 2023-05-21 15:55:00 2023-05-22 00:00:00
11 568 2023-08-25 04:15:00 2023-08-25 23:00:00
File
0 359BaseDefault_Network_HD.res1d
1 366BaseDefault_Network_HD.res1d
2 371BaseDefault_Network_HD.res1d
3 378BaseDefault_Network_HD.res1d
4 385BaseDefault_Network_HD.res1d
5 393BaseDefault_Network_HD.res1d
6 400BaseDefault_Network_HD.res1d
7 428BaseDefault_Network_HD.res1d
8 481BaseDefault_Network_HD.res1d
9 502BaseDefault_Network_HD.res1d
10 532BaseDefault_Network_HD.res1d
11 568BaseDefault_Network_HD.res1d
%% Cell type:code id:73dbdd78 tags:
``` python
storages = pd.read_excel(storages_file, sheet_name="simplified", index_col=0, dtype={
"weir crest level": float,
"weir crest level 2": float,
"max retention storage": float,
"max level if no weir": float,
})
storages["max level"] = storages[["weir crest level", "weir crest level 2", "max level if no weir"]].min(axis="columns")
storages
```
%% Output
Type Node Bottom level \
ID Bauwerk
RKB 0337 Retention tank S0000763 45.83
RUEBKrade Retention sewer S0003529 47.02
RUB 0901 Retention tank + sewer S0051890 43.79
SKU 0216 Retention tank + sewer S0033803 45.03
SKU 0222 Retention sewer S0115403_ 43.61
SKU 0228 Retention sewer S0017545 42.79
SKU 0225 Retention sewer S0024291 44.13
RRK 0301 Retention sewer S0150758 42.26
RRB 0301 I Retention tank RRB0301_I 40.72
RRB 0301 II Retention tank RRB0301_II 40.75
RUE 0139/MWP 0112 Retention tank S0145156 40.69
MWE 0145 Retention sewer S0029838 42.13
MWP_0142 Retention tank + sewer S0025581 39.62
W_SKU0148 Retention tank + sewer S0027792 41.70
W_SKU0133_1 Retention sewer S0023122 41.45
MWP 0932 Retention tank S0058295 40.57
MWP 0314 Retention tank S0064461 39.68
RWP 0302 Retention tank S0152138 41.55
Inflow Outflow \
ID Bauwerk
RKB 0337 H0062724 H0052270
RUEBKrade H0029240 H0006389
RUB 0901 H0069212 H0064707
SKU 0216 H0070324 H0070328
SKU 0222 H0136665_ H0136358
SKU 0228 H0046422,H0000205 H0070149
SKU 0225 H0010621 H0059805
RRK 0301 H0010820 H0185969
RRB 0301 I W_RRB0301 Zulauf_MWP0301_I,RRB0301_I_Entl
RRB 0301 II W_RRB0301_BÜ RRB0301_II_Entl,Zulauf_MWP0301_II
RUE 0139/MWP 0112 H0176026,H0175401 H0061164
MWE 0145 H0001696,H0015435 H0050959
MWP_0142 H0048354,H0070185 MWP_0142
W_SKU0148 H0055349 Link_SKU0148_DN800Stz,H0056886
W_SKU0133_1 H0005604 H0055351
MWP 0932 H0048460 MWP_0932_I,MWP_0932_II
MWP 0314 H0015334,H0069570 MWP_0314_I,MWP_0314_II,MWP_0314_III
RWP 0302 H0186613 MWP_0302_I,MWP_0302_II
Weir weir crest level Weir 2 \
ID Bauwerk
RKB 0337 W_RKB0337 48.830 NaN
RUEBKrade W1_RUEBKrade 50.250 W2_RUEBKrade
RUB 0901 W_SKU0901_Ü 48.060 W_SKU0901_1
SKU 0216 W_SKU0216 46.285 NaN
SKU 0222 W_SKU0222 45.270 NaN
SKU 0228 W_SKU0228_BÜ 44.160 NaN
SKU 0225 W_SKU0225 45.220 NaN
RRK 0301 NaN NaN NaN
RRB 0301 I NaN NaN NaN
RRB 0301 II NaN NaN NaN
RUE 0139/MWP 0112 W_RUE0139 41.225 NaN
MWE 0145 W_MWE0145 43.340 NaN
MWP_0142 W_SKU0147 42.245 NaN
W_SKU0148 W_SKU0148 43.040 NaN
W_SKU0133_1 W_SKU0133_1 43.000 NaN
MWP 0932 NaN NaN NaN
MWP 0314 NaN NaN NaN
RWP 0302 NaN NaN NaN
weir crest level 2 max retention storage \
ID Bauwerk
RKB 0337 NaN 7018.0
RUEBKrade 50.25 NaN
RUB 0901 47.94 1662.0
SKU 0216 NaN 319.0
SKU 0222 NaN 1271.0
SKU 0228 NaN 1330.0
SKU 0225 NaN 190.0
RRK 0301 NaN 15300.0
RRB 0301 I NaN 8850.0
RRB 0301 II NaN 8850.0
RUE 0139/MWP 0112 NaN 817.0
MWE 0145 NaN 939.0
MWP_0142 NaN 334.0
W_SKU0148 NaN 1016.0
W_SKU0133_1 NaN 5885.0
MWP 0932 NaN 54.0
MWP 0314 NaN 1484.0
RWP 0302 NaN 30.0
comment max level if no weir \
ID Bauwerk
RKB 0337 NaN NaN
RUEBKrade NaN NaN
RUB 0901 NaN NaN
SKU 0216 NaN NaN
SKU 0222 NaN NaN
SKU 0228 NaN NaN
SKU 0225 NaN NaN
RRK 0301 max level is the hub 0301 at 45.54
RRB 0301 I Staulevel nach Beschreibung 45.54
RRB 0301 II Staulevel nach Beschreibung 45.54
RUE 0139/MWP 0112 NaN NaN
MWE 0145 NaN NaN
MWP_0142 NaN NaN
W_SKU0148 NaN NaN
W_SKU0133_1 NaN NaN
MWP 0932 no max level from a weir 45.04
MWP 0314 no max level from a weir 41.69
RWP 0302 no max level from a weir 43.56
AFS concentration
ID Bauwerk
RKB 0337 4.0
RUEBKrade 4.0
RUB 0901 4.0
SKU 0216 4.0
SKU 0222 4.0
SKU 0228 4.0
SKU 0225 4.0
RRK 0301 NaN
RRB 0301 I NaN
RRB 0301 II NaN
RUE 0139/MWP 0112 4.0
MWE 0145 4.0
MWP_0142 4.0
W_SKU0148 4.0
W_SKU0133_1 4.0
MWP 0932 NaN
MWP 0314 NaN
RWP 0302 NaN
%% Cell type:markdown id:b9b19ed4 tags:
### Functions for evaluation of result files
%% Cell type:code id:49e9c648 tags:
``` python
def read_reach_discharge(reach, chainage_mode):
if chainage_mode not in ["start", "end", "sum"]:
raise ValueError("chainage_mode can only be 'start', 'end', or 'sum'.")
if chainage_mode == "start":
return pd.Series(r1d.get_reach_start_values(reach, "Discharge"), index=r1d.time_index)
if chainage_mode == "end":
return pd.Series(r1d.get_reach_end_values(reach, "Discharge"), index=r1d.time_index)
if chainage_mode == "sum":
return pd.Series(r1d.get_reach_sum_values(reach, "Discharge"), index=r1d.time_index)
```
%% Cell type:code id:9e6b5871 tags:
``` python
def calculate_overflow(event, storages, r1d):
""" Berechnet den Überlauf nur für das aktuelle Event """
extended_event = event.copy()
weirs = storages["Weir"].dropna().to_list() + storages["Weir 2"].dropna().to_list()
for w in weirs:
try:
reach_name = f"Weir:{w}"
if reach_name in r1d.reaches:
# Berechne Überlauf für das aktuelle Event-Zeitfenster
overflow_sum = read_reach_discharge(reach_name, "sum")
start_time = event["Start_Time"]
end_time = event["End_Time"]
mask = (overflow_sum.index >= start_time) & (overflow_sum.index <= end_time)
period_data = overflow_sum[mask]
if not period_data.empty:
# Zeitgewichtete Integration für den Überlauf
period_duration = (end_time - start_time).total_seconds()
if period_duration > 0:
time_deltas = period_data.index.to_series().diff().dt.total_seconds().fillna(0)
total_overflow = (period_data * time_deltas).sum()
else:
total_overflow = 0
else:
total_overflow = 0
# Speichere das berechnete Ergebnis für das Weir
extended_event[w] = total_overflow
else:
warn(f"{reach_name} nicht in den vorhandenen Reaches")
except Exception as ex:
print(f"Fehler bei der Verarbeitung von Weir '{w}': {ex}")
return extended_event
```
%% Cell type:markdown id:289d44dd tags:
### Analysis of data and saving in excel
%% Cell type:code id:304394db tags:
``` python
all_results = []
for _, event in events.iterrows():
event_file = event["File"]
if isinstance(event_file, str):
res_file = folder / "Results" / event_file
if res_file.exists():
logging.info(f"Verarbeite Datei: {res_file.name}")
try:
r1d = Res1D(str(res_file))
overflow_data = calculate_overflow(event, storages, r1d)
overflow_data["res_file"] = res_file.name
all_results.append(overflow_data)
except Exception as e:
logging.error(f"Fehler bei der Verarbeitung von {res_file.name}: {e}")
else:
logging.warning(f"Res1D-Datei {event_file} für Event {event['gid']} existiert nicht.")
else:
logging.warning(f"Ungültiger Wert in der 'File'-Spalte für Event {event['gid']}: {event_file}")
if all_results:
results_df = pd.DataFrame(all_results)
output_file = folder / "Overflow_Results.xlsx"
results_df.to_excel(output_file, index=False)
logging.info(f"Ergebnisse gespeichert in {output_file}")
else:
logging.warning("Keine Ergebnisse zum Speichern.")
```
%% Output
2025-03-21 13:39:59,981 - INFO - Verarbeite Datei: 359BaseDefault_Network_HD.res1d
2025-03-21 13:40:10,134 - INFO - Verarbeite Datei: 366BaseDefault_Network_HD.res1d
2025-03-21 13:40:21,532 - INFO - Verarbeite Datei: 371BaseDefault_Network_HD.res1d
2025-03-21 13:40:32,308 - INFO - Verarbeite Datei: 378BaseDefault_Network_HD.res1d
2025-03-21 13:40:44,051 - INFO - Verarbeite Datei: 385BaseDefault_Network_HD.res1d
2025-03-21 13:40:58,589 - INFO - Verarbeite Datei: 393BaseDefault_Network_HD.res1d
2025-03-21 13:41:08,790 - INFO - Verarbeite Datei: 400BaseDefault_Network_HD.res1d
2025-03-21 13:41:22,692 - INFO - Verarbeite Datei: 428BaseDefault_Network_HD.res1d
2025-03-21 13:41:34,692 - INFO - Verarbeite Datei: 481BaseDefault_Network_HD.res1d
2025-03-21 13:41:45,987 - INFO - Verarbeite Datei: 502BaseDefault_Network_HD.res1d
2025-03-21 13:42:03,538 - INFO - Verarbeite Datei: 532BaseDefault_Network_HD.res1d
2025-03-21 13:42:13,544 - INFO - Verarbeite Datei: 568BaseDefault_Network_HD.res1d
2025-03-21 13:42:26,644 - INFO - Ergebnisse gespeichert in R:\M_883_Entfrachten\Durchführung\Daten\2_Algorithmen und Steuerungsziele\Read Overflow\Overflow_Results.xlsx
%% Cell type:markdown id:12583bbf tags:
### Figures
%% Cell type:code id:326beb0e tags:
``` python
df = pd.read_excel(folder / "Overflow_Results.xlsx")
structure_columns = df.columns[4:18]
discharge_sums = df[structure_columns].sum()
total_sum = discharge_sums.sum()
plt.figure(figsize=((16/2.54), (8/2.54)))
plt.bar(discharge_sums.index, discharge_sums.values, color="#004899")
plt.bar('Total', total_sum, color="#65B22E")
plt.text('Total', total_sum, round(total_sum),ha='center', fontsize=9)
plt.xlabel('Structures', fontsize = 9)
plt.ylabel('Discharge [m$^3$]', fontsize = 9)
plt.title('Discharge per Structure', fontsize = 11)
plt.xticks(rotation=90)
output_file = folder / 'Overflow_Results.png'
plt.savefig(output_file, dpi=600, transparent=False)
plt.show()
```
%% Output
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment