diff options
author | Daniel Friesel <daniel.friesel@uos.de> | 2021-02-24 12:43:37 +0100 |
---|---|---|
committer | Daniel Friesel <daniel.friesel@uos.de> | 2021-02-24 12:43:37 +0100 |
commit | 7f2c042b5b5b460b93bd7dfbb783a8d807e218d0 (patch) | |
tree | 3c1cb91d69a92e91938ced260dcd184a6d1ca711 | |
parent | e09189307bb6bf33000839582adc3bdbbc0a8eeb (diff) |
treat last sub state as tail / default state
use application-provided total state duration instead of model to determine
duration of last sub-state in get_fitted_sub
-rwxr-xr-x | bin/analyze-archive.py | 3 | ||||
-rw-r--r-- | lib/model.py | 23 |
2 files changed, 18 insertions, 8 deletions
diff --git a/bin/analyze-archive.py b/bin/analyze-archive.py index a2ccf43..3427ce1 100755 --- a/bin/analyze-archive.py +++ b/bin/analyze-archive.py @@ -822,7 +822,8 @@ if __name__ == "__main__": if args.with_substates: sub_model, sub_info = model.get_fitted_sub( - safe_functions_enabled=safe_functions_enabled + safe_functions_enabled=safe_functions_enabled, + state_duration=raw_data.setup_by_fileno[0]["state_duration"] * 1e3, ) # substate_model = model.get_substates() diff --git a/lib/model.py b/lib/model.py index 2eb28d6..3488982 100644 --- a/lib/model.py +++ b/lib/model.py @@ -827,7 +827,9 @@ class PTAModel(AnalyticModel): for key in elem["attributes"]: elem[key] = np.array(elem[key]) - def get_fitted_sub(self, use_mean=False, safe_functions_enabled=False): + def get_fitted_sub( + self, use_mean=False, safe_functions_enabled=False, state_duration=None + ): param_model_getter, param_info_getter = self.get_fitted( use_mean=use_mean, safe_functions_enabled=safe_functions_enabled @@ -847,12 +849,19 @@ class PTAModel(AnalyticModel): cumulative_energy = 0 total_duration = 0 substate_model, _ = self.submodel_by_name[name].get_fitted() - for i in range(substate_count): - sub_name = f"{name}.{i+1}({substate_count})" - cumulative_energy += substate_model( - sub_name, "duration", **kwargs - ) * substate_model(sub_name, "power", **kwargs) - total_duration += substate_model(sub_name, "duration", **kwargs) + for i in range(1, substate_count + 1): + sub_name = f"{name}.{i}({substate_count})" + sub_duration = substate_model(sub_name, "duration", **kwargs) + sub_power = substate_model(sub_name, "power", **kwargs) + + if i == substate_count: + if state_duration is not None: + sub_duration = state_duration - total_duration + elif "duration" in kwargs: + sub_duration = kwargs["duration"] - total_duration + + cumulative_energy += sub_power * sub_duration + total_duration += sub_duration return cumulative_energy / total_duration |