From 2fdda99ece032ec388868ffd7a4f0d0fa913f28d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20G=C3=B3mez?= Date: Mon, 26 Dec 2022 13:07:34 +0100 Subject: [PATCH 1/2] Added some convenience functions and updated test --- paseos/paseos.py | 9 +++++++++ paseos/tests/operations_monitor_test.py | 3 +++ paseos/utils/operations_monitor.py | 26 +++++++++++++++++++++++++ 3 files changed, 38 insertions(+) diff --git a/paseos/paseos.py b/paseos/paseos.py index 0bdb91c9..3a59ca4e 100644 --- a/paseos/paseos.py +++ b/paseos/paseos.py @@ -137,6 +137,15 @@ def add_known_actor(self, actor: BaseActor): # Else add self._known_actors[actor.name] = actor + @property + def monitor(self): + """Access paseos operations monitor which tracks local actor attributes such as temperature or state of charge. + + Returns: + OperationsMonitor: Monitor object. + """ + return self._operations_monitor + @property def is_running_activity(self): """Allows checking whether there is currently an activity running. diff --git a/paseos/tests/operations_monitor_test.py b/paseos/tests/operations_monitor_test.py index d1397f1e..a09ca3f9 100644 --- a/paseos/tests/operations_monitor_test.py +++ b/paseos/tests/operations_monitor_test.py @@ -56,4 +56,7 @@ async def func2(args): sim.perform_activity("Activity_2") await wait_for_activity(sim) + # Try out item function + sim.monitor["state_of_charge"] + sim.monitor.plot("state_of_charge") sim.save_status_log_csv("test.csv") diff --git a/paseos/utils/operations_monitor.py b/paseos/utils/operations_monitor.py index c294090f..b407916f 100644 --- a/paseos/utils/operations_monitor.py +++ b/paseos/utils/operations_monitor.py @@ -3,6 +3,7 @@ from loguru import logger from dotmap import DotMap import pykep as pk +import matplotlib.pyplot as plt from paseos.actors.base_actor import BaseActor from paseos.actors.spacecraft_actor import SpacecraftActor @@ -28,6 +29,31 @@ def __init__(self, actor_name): self._log.position = [] self._log.velocity = [] + def __getitem__(self, item): + """Get a logged attributes values. + + Args: + item (str): Name of item. Available are "timesteps","current_activity","state_of_charge", + "is_in_eclipse","known_actors","position","velocity","temperature" + """ + assert item in self._log.keys(), ( + 'Untracked quantity. Available are "timesteps","current_activity","state_of_charge",' + + '"is_in_eclipse","known_actors","position","velocity","temperature"' + ) + return self._log[item] + + def plot(self, item): + assert item in self._log.keys(), ( + 'Untracked quantity. Available are "timesteps","current_activity","state_of_charge",' + + '"is_in_eclipse","known_actors","position","velocity","temperature"' + ) + values = self._log[item] + plt.Figure(figsize=(6, 2), dpi=150) + t = self._log.timesteps + plt.plot(t, values) + plt.xlabel("Time [s]") + plt.ylabel(item) + def log( self, local_actor: BaseActor, From 6c3d361b56704818fa5a6c5ab2748e27e7bc616c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20G=C3=B3mez?= Date: Mon, 26 Dec 2022 13:11:33 +0100 Subject: [PATCH 2/2] Minor fixes --- paseos/tests/operations_monitor_test.py | 1 + paseos/utils/operations_monitor.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/paseos/tests/operations_monitor_test.py b/paseos/tests/operations_monitor_test.py index a09ca3f9..1b5b15b9 100644 --- a/paseos/tests/operations_monitor_test.py +++ b/paseos/tests/operations_monitor_test.py @@ -59,4 +59,5 @@ async def func2(args): # Try out item function sim.monitor["state_of_charge"] sim.monitor.plot("state_of_charge") + sim.save_status_log_csv("test.csv") diff --git a/paseos/utils/operations_monitor.py b/paseos/utils/operations_monitor.py index 1ac21af4..5479c380 100644 --- a/paseos/utils/operations_monitor.py +++ b/paseos/utils/operations_monitor.py @@ -53,7 +53,7 @@ def plot(self, item): t = self._log.timesteps plt.plot(t, values) plt.xlabel("Time [s]") - plt.ylabel(item) + plt.ylabel(item.replace("_", " ")) def log( self,