From da0bad61c46ff6750102e609a712587e73a4bf5a Mon Sep 17 00:00:00 2001 From: Bichen Li <libichen94@gmail.com> Date: Wed, 6 Jun 2018 10:54:21 +0200 Subject: [PATCH] change the name of validationtool.py --- Assert_Results.py | 2 +- dataprocessing/Validationtools.py | 121 ------------------------------ 2 files changed, 1 insertion(+), 122 deletions(-) delete mode 100644 dataprocessing/Validationtools.py diff --git a/Assert_Results.py b/Assert_Results.py index 3da257b..5162cbe 100644 --- a/Assert_Results.py +++ b/Assert_Results.py @@ -2,7 +2,7 @@ import re import os import sys -from dataprocessing.Validationtools import * +from dataprocessing.validationtools import * from dataprocessing.readtools import * print("Test Start") # We need to extract all the result files from git now diff --git a/dataprocessing/Validationtools.py b/dataprocessing/Validationtools.py deleted file mode 100644 index 1f0b1cb..0000000 --- a/dataprocessing/Validationtools.py +++ /dev/null @@ -1,121 +0,0 @@ -#!/usr/bin/python -# -*- coding: UTF-8 -*- -import os -from dataprocessing.readtools import * - -def mapping_modcelica_neplan(neplan_timeseries): - """ - Mapping the variable names between modelica and neplan - - Voltage: change *.U and *.ANGLEU to *.V and *.Vangle - - Current: remove unnecessary current variables - :param neplan_timeseries: result of neplan in timeseries - :return: a mapped neplan_timeseries - """ - line_del = [] - # remove all the line current - - # Find current of the same component, which means the current needn't to be validated - for check in range(len(neplan_timeseries)): - if neplan_timeseries[check].values[0] == '#': - line_del.append(check) - if '.P' in neplan_timeseries[check].name: - line_del.append(check) - if '.Q' in neplan_timeseries[check].name: - line_del.append(check) - for i in range(check + 1, len(neplan_timeseries)): - if neplan_timeseries[check].name == neplan_timeseries[i].name: - line_del.append(check) # delete list of the unnecessary data - line_del.append(i) - line_del = sorted(set(line_del)) - for num_to_del in range(len(line_del)): - del neplan_timeseries[line_del[len(line_del) - num_to_del - 1]] - - # Change the unit of variables to keep consistent with those in modelica - for i in range(len(neplan_timeseries)): - if 'ANGLE' in neplan_timeseries[i].name: - neplan_timeseries[i].values = neplan_timeseries[i].values / 180 * cmath.pi # unification of the unit - elif '.U' in neplan_timeseries[i].name or '.I' in neplan_timeseries[i].name: - neplan_timeseries[i].values = neplan_timeseries[i].values * 1000 - - # Change the name of variables to keep consistent with those in modelica - for i in range(len(neplan_timeseries)): - neplan_timeseries[i].name = neplan_timeseries[i].name.replace(' ', '') - neplan_timeseries[i].name = neplan_timeseries[i].name.replace('.ANGLEU', '.Vangle') - neplan_timeseries[i].name = neplan_timeseries[i].name.replace('.U', '.Vpp') - neplan_timeseries[i].name = neplan_timeseries[i].name.replace('.ANGLEI', '.Iangle') - - return neplan_timeseries - - -def compare_modelica_neplan(modelica_res, neplan_res): # compare the result file from NEPLAN and Modelica - """ - Compare Results from modelic and neplan, the name of the components should be kept consistent. - :param modelica_res: the path of the modelica result file, whose suffix should be .mat - :param neplan_res: the path of the neplan result file, whose suffix should be .rlf - :return: - """ - # Read in original neplan result file - file_Neplan = os.path.abspath(neplan_res) - # Read in original Modelica result file - file_Modelica = os.path.abspath(modelica_res) - result_neplan = mapping_modcelica_neplan(read_timeseries_NEPLAN_loadflow(file_Neplan)) - result_modelica = read_timeseries_Modelica(file_Modelica) - - # Unification of the variable names and units of the voltage and current - for i in range(len(result_neplan)): - result_neplan[i].name = result_neplan[i].name.upper() - if 'ANGLE' in result_neplan[i].name: - result_neplan[i].values = result_neplan[i].values / cmath.pi * 180 # transfer the angle unit to degree - # Unification of the units of the angle - for i in range(len(result_modelica)): - result_modelica[i].name = result_modelica[i].name.upper() - if 'ANGLE' in result_modelica[i].name: - result_modelica[i].values = result_modelica[i].values / cmath.pi * 180 # transfer the angle unit to degree - - timeseries_names = [] # list for names of components - timeseries_error = [] # list for error - len_limit = len(result_modelica) - - # Match the components in result files, and compare them - for i in range(len(result_neplan)): - flag_not_found = False - for j in range(len_limit): - if result_neplan[i].name == result_modelica[j].name: # Find the same variable - timeseries_names.append(result_neplan[i].name) - timeseries_error.append(TimeSeries.rmse(result_modelica[j], result_neplan[i])) - flag_not_found = True - if flag_not_found is False: - # No such variable in Modelica model, set the error to -1 - timeseries_error.append(-1) - return dict(zip(timeseries_names, timeseries_error)) - -def assert_modelia_neplan_results(net_name, modelica_res, neplan_res): # Assert the model using the function above - """ - Assert the result in Modelica according to the results from neplan - :param net_name: The name of the net should be clarified manually - :param modelica_res: the path of the modelica result file, whose suffix should be .mat - :param neplan_res: the path of the neplan result file, whose suffix should be .rlf - :return: - """ - fail_list = [] # List for all the failed test - error = compare_modelica_neplan(modelica_res, neplan_res) - # the limitations are set to 0.5 - for name in error.keys(): - if abs(error[name]) > 0.5: - fail_list.append(name) - else: - print("Test on %s Passed" % name) - - # fail_list is 0, which means all the tests are passed - if len(fail_list) is 0: - print("\033[1;36;40mModel %s Passed\033[0m" % net_name) - else: - for name in fail_list: - print("\033[1;31;40mTest on %s of %s Failed\033[0m" % (name, net_name)) - raise ValueError('Test on %s is not passed!' % net_name) - - - - - - -- GitLab