diff options
-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 |