From 0af92db61d073c1afa2298547c45587fc374bca3 Mon Sep 17 00:00:00 2001
From: Michael Reuscher <michael.reuscher@desy.de>
Date: Mon, 10 Jul 2023 15:42:57 +0200
Subject: [PATCH] Install Skript 1.01

---
 controller/controller/DataFrameCreator.py | 38 +++++++++++++++++++++++
 controller/controller/SeabornPlotter.py   | 31 ++++++++++++++++++
 controller/controller/UtilityClasses.py   |  7 +++++
 controller/controller/main.py             | 25 +++++++++++++++
 4 files changed, 101 insertions(+)
 create mode 100644 controller/controller/DataFrameCreator.py
 create mode 100644 controller/controller/SeabornPlotter.py
 create mode 100644 controller/controller/UtilityClasses.py
 create mode 100644 controller/controller/main.py

diff --git a/controller/controller/DataFrameCreator.py b/controller/controller/DataFrameCreator.py
new file mode 100644
index 0000000..1bcd4f5
--- /dev/null
+++ b/controller/controller/DataFrameCreator.py
@@ -0,0 +1,38 @@
+import os
+import pandas as pd
+
+
+class DataFrameCreator:
+    def __init__(self, f_path):
+        self.folder_path = f_path
+
+    def create_dataframes(self):
+        dfs = {}
+
+        for root, _, files in os.walk(self.folder_path):
+            for filename in files:
+                if filename.endswith('.dat'):
+                    file_path = os.path.join(root, filename)
+                    dataframe_name = os.path.splitext(filename)[0]
+                    dataframe_type = dataframe_name.split('-')[1]
+                    dataframe = pd.read_csv(file_path, delimiter=" ", header=0)
+
+                    if dataframe_type in dfs:
+                        inner_dict = dfs[dataframe_type]
+                        if dataframe_name in inner_dict:
+                            # DataFrame hinzufügen
+                            inner_dict[dataframe_name] = pd.concat([inner_dict[dataframe_name], dataframe], ignore_index=True)
+                        else:
+                            inner_dict[dataframe_name] = dataframe
+                    else:
+                        dfs[dataframe_type] = {
+                            dataframe_name: dataframe
+                        }
+
+        merged_dfs = {}
+        for outer_key in dfs:
+            merged_dataframe = pd.concat(dfs[outer_key].values(), keys=dfs[outer_key].keys())
+            merged_dataframe_sorted = merged_dataframe.sort_index()
+            merged_dfs[outer_key] = merged_dataframe_sorted
+
+        return merged_dfs
diff --git a/controller/controller/SeabornPlotter.py b/controller/controller/SeabornPlotter.py
new file mode 100644
index 0000000..4fe138c
--- /dev/null
+++ b/controller/controller/SeabornPlotter.py
@@ -0,0 +1,31 @@
+import numpy as np
+import matplotlib.pyplot as plt
+import seaborn as sns
+
+
+class SeabornPlotter:
+    def __init__(self, dataframe):
+        self.dataframe = dataframe
+        self.current_plot = None
+
+    def plot(self):
+        df = self.dataframe
+        x = df['size']
+        y = df['duration']
+        x_start = df['size'].min() / 2
+        y_start = 0.001
+        x_end = df['size'].max() * 2
+        y_end = df['duration'].max()
+        x_num_points = 100
+        y_step = 0.001
+        x_bins = np.logspace(np.log10(x_start), np.log10(x_end), num=x_num_points).tolist()
+        y_bins = [y_start + (y_step * i) for i in range(int((y_end - y_start) / y_step) + 1)]
+
+        f, ax = plt.subplots(figsize=(16, 20))
+        sns.scatterplot(x=x, y=y, s=5, color=".15", hue=list(self.dataframe.index.get_level_values(0)))
+        sns.histplot(x=x, y=y, bins=[x_bins, y_bins], pthresh=.1, cmap="coolwarm")
+        ax.set_xscale('log')
+        ax.set_yscale('log')
+
+        plt.tight_layout()
+        plt.show()
diff --git a/controller/controller/UtilityClasses.py b/controller/controller/UtilityClasses.py
new file mode 100644
index 0000000..5ed1dc8
--- /dev/null
+++ b/controller/controller/UtilityClasses.py
@@ -0,0 +1,7 @@
+import datetime
+
+
+class DataConvert:
+    @staticmethod
+    def convert_unix(timestamp):
+        return datetime.datetime.fromtimestamp(timestamp)
\ No newline at end of file
diff --git a/controller/controller/main.py b/controller/controller/main.py
new file mode 100644
index 0000000..9ede88c
--- /dev/null
+++ b/controller/controller/main.py
@@ -0,0 +1,25 @@
+import os
+import numpy as np
+import pandas as pd
+import datetime
+import matplotlib
+import matplotlib.pyplot as plt
+import seaborn as sns
+from .SeabornPlotter import SeabornPlotter
+from .DataFrameCreator import DataFrameCreator
+matplotlib.use('TkAgg')
+
+
+# --------------Main------------
+def main():
+    folder_path = '/home/user/C++/detectorwritesim/output'
+    creator = DataFrameCreator(folder_path)
+    dataframes = creator.create_dataframes()
+    plotter = SeabornPlotter(dataframes['write'])
+
+    # Plot erstellen
+    plotter.plot()
+
+
+if __name__ == "__main__":
+    main()
-- 
GitLab