From 55af464bbd1231d858b6fce3634eefd7746503cd Mon Sep 17 00:00:00 2001
From: Michael Reuscher <michael.reuscher@desy.de>
Date: Mon, 24 Jul 2023 15:28:17 +0200
Subject: [PATCH] new plot for long

---
 simrunner/data_config.json                |  4 +-
 visualizer/visualizer/DataFrameCreator.py | 74 +++++++++++++++--------
 visualizer/visualizer/SeabornPlotter.py   | 36 +++++++----
 visualizer/visualizer/main.py             | 18 ++++--
 4 files changed, 88 insertions(+), 44 deletions(-)

diff --git a/simrunner/data_config.json b/simrunner/data_config.json
index e8bedd8..2ceb794 100644
--- a/simrunner/data_config.json
+++ b/simrunner/data_config.json
@@ -4,8 +4,8 @@
     "-i": "0.1s",
     "-N": "4"},
   "data_config_long":{
-    "-s": "4096",
-    "-n": "200",
+    "-s": "32",
+    "-n": "5000",
     "-i": "0.1s",
     "-N": "4"},
   "data_config_help":{
diff --git a/visualizer/visualizer/DataFrameCreator.py b/visualizer/visualizer/DataFrameCreator.py
index 38d09a1..ce372d2 100644
--- a/visualizer/visualizer/DataFrameCreator.py
+++ b/visualizer/visualizer/DataFrameCreator.py
@@ -5,6 +5,8 @@ import pandas as pd
 class DataFrameCreator:
     def __init__(self, f_path):
         self.folder_path = f_path
+        self.v_dfs = {}
+        self.l_dfs = {}
 
     @staticmethod
     def _merge_dataframes(dfs):
@@ -15,6 +17,48 @@ class DataFrameCreator:
             merged_dfs[outer_key] = merged_dataframe_sorted
         return merged_dfs
 
+    def read_various_data(self, root, folder):
+        for filename in folder:
+            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 self.v_dfs:
+                    inner_dict = self.v_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:
+                    self.v_dfs[dataframe_type] = {
+                        dataframe_name: dataframe
+                    }
+
+    def read_long_data(self, root, folder):
+        for filename in folder:
+            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 self.l_dfs:
+                    inner_dict = self.l_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:
+                    self.l_dfs[dataframe_type] = {
+                        dataframe_name: dataframe
+                    }
+
     def create(self):
         dfs = {}
         for root, _, folder in os.walk(self.folder_path):
@@ -22,31 +66,13 @@ class DataFrameCreator:
                 print("this was statistic")
                 continue
             elif os.path.basename(root) == "Data_Set_Long":
-                print("this was long")
-                continue
-            for filename in folder:
-                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
-                        }
+                self.read_long_data(root, folder)
+            else:
+                self.read_various_data(root, folder)
 
-        merged_dfs = self._merge_dataframes(dfs)
-
-        return merged_dfs
+        various_dfs = self._merge_dataframes(self.v_dfs)
+        long_dfs = self._merge_dataframes(self.l_dfs)
+        return various_dfs, long_dfs
 
 
 
diff --git a/visualizer/visualizer/SeabornPlotter.py b/visualizer/visualizer/SeabornPlotter.py
index cb9e077..3c370ee 100644
--- a/visualizer/visualizer/SeabornPlotter.py
+++ b/visualizer/visualizer/SeabornPlotter.py
@@ -12,7 +12,6 @@ class SeabornPlotter:
     def __init__(self, dataframe, name):
         self.dataframe = dataframe
         self.name = name
-        self.current_plot = None
 
     @staticmethod
     def _add_logo(logo_path, logo_size, logo_x, logo_y):
@@ -33,10 +32,15 @@ class SeabornPlotter:
         bins_y = np.logspace(-6, 0, num=101)
         return bins_x, bins_y
 
-    @staticmethod
-    def plot_histogram_various(x, y, title, bins_x, bins_y):
+    def plot_histogram_various(self):
+        df = self.dataframe
+        x = df['size']
+        y = df['duration']
+        title = "Procedure: {}".format(self.name)
+        bins_x, bins_y = self._prepare_bins(df)
         f, ax = plt.subplots(figsize=(16, 9))
         sns.histplot(x=x, y=y, color="blue", bins=[bins_x, bins_y])
+        self._add_logo("desy_logo.png", logo_size=0.15, logo_x=1.065, logo_y=1.04)
         ax.set_xscale('log')
         ax.set_yscale('log')
         ax.set_xlabel("Data size [Bytes]")
@@ -44,21 +48,24 @@ class SeabornPlotter:
         plt.title(title)
         plt.grid(True)
         plt.xticks(rotation=45)
+        plt.savefig(title + ".svg", format='svg')
+        plt.show()
 
-    def plot(self):
+    def plot_histogram_long(self):
         df = self.dataframe
-
-        # if self.name
-        x = df['size']
+        x = df['start']
         y = df['duration']
         title = "Procedure: {}".format(self.name)
-
-        bins_x, bins_y = self._prepare_bins(df)
-        self.plot_histogram_various(x, y, title, bins_x, bins_y)
-
+        f, ax = plt.subplots(figsize=(16, 9))
+        sns.lineplot(x=x, y=y, hue=list(self.dataframe.index.get_level_values(0)), color="blue")
         self._add_logo("desy_logo.png", logo_size=0.15, logo_x=1.065, logo_y=1.04)
-
-        # Save and View
+        ax.set_xscale('log')
+        ax.set_yscale('log')
+        ax.set_xlabel("Data size [Bytes]")
+        ax.set_ylabel("Time/Event [s]")
+        plt.title(title)
+        plt.grid(True)
+        plt.xticks(rotation=45)
         plt.savefig(title + ".svg", format='svg')
         plt.show()
 
@@ -70,3 +77,6 @@ class SeabornPlotter:
 
 
 
+
+
+
diff --git a/visualizer/visualizer/main.py b/visualizer/visualizer/main.py
index 56dde96..2647010 100644
--- a/visualizer/visualizer/main.py
+++ b/visualizer/visualizer/main.py
@@ -16,16 +16,24 @@ def main():
 
     # Import Data
     creator = DataFrameCreator(data_path)
-    dataframes = creator.create()
+    v_dataframes, l_dataframes = creator.create()
+    for frame in v_dataframes.keys():
+        if not v_dataframes[frame].empty:
+            # Setup Plotter
+            frame_name = frame
+            v_plotter = SeabornPlotter(v_dataframes[frame], frame_name)
+
+            # Plotter run
+            v_plotter.plot_histogram_various()
 
-    for frame in dataframes.keys():
-        if not dataframes[frame].empty:
+    for frame in l_dataframes.keys():
+        if not v_dataframes[frame].empty:
             # Setup Plotter
             frame_name = frame
-            plotter = SeabornPlotter(dataframes[frame], frame_name)
+            l_plotter = SeabornPlotter(l_dataframes[frame], frame_name)
 
             # Plotter run
-            plotter.plot()
+            l_plotter.plot_histogram_long()
 
 
 if __name__ == "__main__":
-- 
GitLab