diff --git a/controller/controller/DataFrameCreator.py b/controller/controller/DataFrameCreator.py
new file mode 100644
index 0000000000000000000000000000000000000000..1bcd4f5164b7aa9e693539a6b051b2840e5cc6e1
--- /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 0000000000000000000000000000000000000000..4fe138cd1bcb1fdc634a639ea35a674ec8f0e77a
--- /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 0000000000000000000000000000000000000000..5ed1dc82626c49e9d49bb0e4ffef56cb633626e2
--- /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 0000000000000000000000000000000000000000..9ede88c1ff138a236710809fd16dd6837c9fe7ff
--- /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()