From d44610f96100377721d277bf3768aab660ca2f9e Mon Sep 17 00:00:00 2001
From: uhfpm_plewnia <uhfpm@student.kit.edu>
Date: Mon, 17 Jul 2023 06:13:54 +0200
Subject: [PATCH] added Information about scenes for experiments in
 ForgettingExperiments

---
 .../libraries/armem/core/MemoryID.cpp         |  1 +
 .../armem/server/ltm/CoreSegment.cpp          |  2 -
 .../libraries/armem/server/ltm/Memory.cpp     | 10 +++--
 .../server/test/ForgettingExperiments.cpp     | 45 ++++++++++++++++++-
 .../armem/server/test/ForgettingExperiments.h |  6 ++-
 5 files changed, 56 insertions(+), 8 deletions(-)

diff --git a/source/RobotAPI/libraries/armem/core/MemoryID.cpp b/source/RobotAPI/libraries/armem/core/MemoryID.cpp
index 7578dfefb..9cc021062 100644
--- a/source/RobotAPI/libraries/armem/core/MemoryID.cpp
+++ b/source/RobotAPI/libraries/armem/core/MemoryID.cpp
@@ -133,6 +133,7 @@ namespace armarx::armem
 
     MemoryID MemoryID::cleanID() const
     {
+
         //ARMARX_INFO << this->str();
         std::vector<std::string> allItems = this->getAllItems(true);
         //ARMARX_INFO << VAROUT(allItems);
diff --git a/source/RobotAPI/libraries/armem/server/ltm/CoreSegment.cpp b/source/RobotAPI/libraries/armem/server/ltm/CoreSegment.cpp
index e76184c79..71cc8baa0 100644
--- a/source/RobotAPI/libraries/armem/server/ltm/CoreSegment.cpp
+++ b/source/RobotAPI/libraries/armem/server/ltm/CoreSegment.cpp
@@ -120,8 +120,6 @@ namespace armarx::armem::server::ltm
         //ARMARX_INFO << VAROUT(e.id());
 
         //TODO: why does this not have any provider segments?
-
-
         //ARMARX_INFO << VAROUT(e.id().cleanID());
         /*
 
diff --git a/source/RobotAPI/libraries/armem/server/ltm/Memory.cpp b/source/RobotAPI/libraries/armem/server/ltm/Memory.cpp
index 4e2bf9b9f..544765d02 100644
--- a/source/RobotAPI/libraries/armem/server/ltm/Memory.cpp
+++ b/source/RobotAPI/libraries/armem/server/ltm/Memory.cpp
@@ -104,7 +104,9 @@ namespace armarx::armem::server::ltm
             {
 
                 std::string segmentName = util::fs::detail::unescapeName(subdirName);
-                //ARMARX_INFO << VAROUT(id());
+                ARMARX_INFO << "Name of segment " << segmentName;
+                ARMARX_INFO << "After getting segment name";
+                ARMARX_INFO << VAROUT(id().withCoreSegmentName(segmentName));
                 //ARMARX_INFO << VAROUT(id().getCoreSegmentID());
                 CoreSegment c(getMemoryBasePath(),
                               getSettings(),
@@ -145,8 +147,8 @@ namespace armarx::armem::server::ltm
         // legacy: check if segment is stored on hard drive without db
         if (fullPathExists())
         {
-            ARMARX_INFO << VAROUT(id());
-            ARMARX_INFO << VAROUT(id().getCoreSegmentID());
+            //ARMARX_INFO << VAROUT(id());
+            //ARMARX_INFO << VAROUT(id().getCoreSegmentID());
             auto c = CoreSegment(getMemoryBasePath(),
                                  getSettings(),
                                  getExportName(),
@@ -183,7 +185,7 @@ namespace armarx::armem::server::ltm
 
         m.id() = id().getMemoryID();
 
-        //ARMARX_INFO << VAROUT(m.id());
+        ARMARX_INFO << VAROUT(id());
 
         forEachCoreSegment(
             [&m](auto& x)
diff --git a/source/RobotAPI/libraries/armem/server/test/ForgettingExperiments.cpp b/source/RobotAPI/libraries/armem/server/test/ForgettingExperiments.cpp
index d6a3c7af0..eef5de181 100644
--- a/source/RobotAPI/libraries/armem/server/test/ForgettingExperiments.cpp
+++ b/source/RobotAPI/libraries/armem/server/test/ForgettingExperiments.cpp
@@ -8,7 +8,7 @@
 namespace armarx::armem::server::test
 {
 
-void save_statistics(std::map<std::string, ltm::processor::SnapshotFilter::FilterStatistics> stats, std::string memoryName)
+void save_statistics(std::map<std::string, ltm::processor::SnapshotFilter::FilterStatistics> stats, std::string memoryName, std::string sim_json_data, std::string object_memory_json_data)
 {
     //ARMARX_INFO << "Saving statistics";
     auto now = std::chrono::high_resolution_clock::now();
@@ -82,6 +82,16 @@ void save_statistics(std::map<std::string, ltm::processor::SnapshotFilter::Filte
     s << std::put_time(time, "%Y%m%d%H%M%S");
     std::string timeID = s.str();
     jsonData["Time "] = timeString;
+
+    if(sim_json_data.empty() || object_memory_json_data.empty()){
+        jsonData["Scene-Information for Simulation"] = load_scene_information("sim");
+        jsonData["Scene-Information for ObjectMemory"] = load_scene_information("om");
+        jsonData["Additional object in simulation"] = find_difference(jsonData["Scene-Information for ObjectMemory"], jsonData["Scene-Information for Simulation"]);
+    }else {
+        jsonData["Scene-Information for Simulation"] = sim_json_data;
+        jsonData["Scene-Information for ObjectMemory"] = object_memory_json_data;
+    }
+
     std::string path = d_p.string();
     path += "/tmp_wm_";
     path += timeID;
@@ -104,4 +114,37 @@ void save_statistics(std::map<std::string, ltm::processor::SnapshotFilter::Filte
     }
 }
 
+nlohmann::json load_scene_information(std::string om_or_sim)
+{
+    std::string home_dir = getenv("HOME");
+    if(home_dir.empty()){
+        ARMARX_WARNING << "Trying to open home directory but env variable HOME is not set";
+    }
+    std::filesystem::path path = home_dir;
+    path /= "code";
+    path /= "h2t" ;
+    path /= "PriorKnowledgeData";
+    path /= "data";
+    path /= "PriorKnowledgeData";
+    path /= "scenes";
+    std::string name_for_current_scene = "ARMAR-III-kitchen"; //this can be changed later, maybe to something that indicates better that these are the changed files
+    std::string file_name = name_for_current_scene + "_" + om_or_sim + ".json";
+    path /= file_name;
+
+    std::ifstream ifs(path);
+    nlohmann::json json_data = nlohmann::json::parse(ifs);
+
+    return json_data;
+
+}
+
+nlohmann::json find_difference(nlohmann::json om, nlohmann::json sim)
+{
+    //the new object is at the last position of sim at the moment
+    auto objects = sim.at("objects");
+    int num_elements = objects.size();
+    auto object = objects[num_elements - 1];
+    return object;
+}
+
 }
diff --git a/source/RobotAPI/libraries/armem/server/test/ForgettingExperiments.h b/source/RobotAPI/libraries/armem/server/test/ForgettingExperiments.h
index 8c2e7f7ba..0cc2a8de0 100644
--- a/source/RobotAPI/libraries/armem/server/test/ForgettingExperiments.h
+++ b/source/RobotAPI/libraries/armem/server/test/ForgettingExperiments.h
@@ -30,6 +30,10 @@
 
 namespace armarx::armem::server::test
 {
-    void save_statistics(std::map<std::string, ltm::processor::SnapshotFilter::FilterStatistics> stats, std::string memoryName = "");
+    void save_statistics(std::map<std::string, ltm::processor::SnapshotFilter::FilterStatistics> stats, std::string memoryName = "", std::string sim_json_data = "", std::string object_memory_json_data = "");
+
+    nlohmann::json load_scene_information(std::string om_or_sim);
+
+    nlohmann::json find_difference(nlohmann::json om, nlohmann::json sim);
 
 }
-- 
GitLab