diff --git a/wetb/hawc2/htc_contents.py b/wetb/hawc2/htc_contents.py index 5d602962603fef5ba1ce21461320999dd6971849..bd40ea4e2b004e22c953d6b472d774a7e53ee865 100644 --- a/wetb/hawc2/htc_contents.py +++ b/wetb/hawc2/htc_contents.py @@ -49,7 +49,13 @@ class HTCContents(object): name_ = "" def __setitem__(self, key, value): - self.contents[key] = value + if isinstance(key, str): + self.contents[key] = value + elif isinstance(key, int): + self.values[key] = value + else: + raise NotImplementedError + def __getitem__(self, key): if isinstance(key, str): @@ -161,9 +167,9 @@ class HTCSection(HTCContents): return HTCLine.from_lines(lines) def __str__(self, level=0): - s = "%sbegin %s;%s\n" % (" "*level, self.name_, ("", "\t" + self.begin_comments)[bool(self.begin_comments.strip())]) + s = "%sbegin %s;%s\n" % (" "*level, self.name_, (("", "\t" + self.begin_comments)[bool(self.begin_comments.strip())]).replace("\t\n","\n")) s += "".join([c.__str__(level + 1) for c in self]) - s += "%send %s;%s\n" % (" "*level, self.name_, ("", "\t" + self.end_comments)[self.end_comments.strip() != ""]) + s += "%send %s;%s\n" % (" "*level, self.name_, (("", "\t" + self.end_comments)[self.end_comments.strip() != ""]).replace("\t\n","\n")) return s class HTCLine(HTCContents): @@ -276,7 +282,7 @@ class HTCSensor(HTCLine): self.type = type self.sensor = sensor self.values = values - self.comments = comments + self.comments = comments.strip(" \t") @staticmethod def from_lines(lines): diff --git a/wetb/hawc2/htc_file.py b/wetb/hawc2/htc_file.py index 287c33be0efc5e503566975fe6a880598e4f6e1e..2ae9e14518d7c0f06903f92904e35d594bdcdcb3 100644 --- a/wetb/hawc2/htc_file.py +++ b/wetb/hawc2/htc_file.py @@ -276,9 +276,9 @@ class HTCFile(HTCContents, HTCDefaults): ('new_htc_structure/struct_inertia_output_file_name', 0), ('new_htc_structure/body_eigenanalysis_file_name', 0), ('new_htc_structure/constraint_output_file_name', 0), - ('turb_export/filename_u', 0), - ('turb_export/filename_v', 0), - ('turb_export/filename_w', 0)]: + ('wind/turb_export/filename_u', 0), + ('wind/turb_export/filename_v', 0), + ('wind/turb_export/filename_w', 0)]: line = self.get(k) if line: files.append(line[index]) @@ -310,16 +310,17 @@ class HTCFile(HTCContents, HTCDefaults): def res_file_lst(self): self.contents # load if not loaded - if 'output' not in self: - return [] - dataformat = self.output.get('data_format', 'hawc_ascii') - res_filename = self.output.filename[0] - if dataformat[0] == "gtsdf" or dataformat[0] == "gtsdf64": - return [res_filename + ".hdf5"] - elif dataformat[0] == "flex_int": - return [res_filename + ".int", os.path.join(os.path.dirname(res_filename), 'sensor')] - else: - return [res_filename + ".sel", res_filename + ".dat"] + res = [] + for output in [self[k] for k in self.keys() if self[k].name_=="output"]: + dataformat = output.get('data_format', 'hawc_ascii') + res_filename = output.filename[0] + if dataformat[0] == "gtsdf" or dataformat[0] == "gtsdf64": + res.append(res_filename + ".hdf5") + elif dataformat[0] == "flex_int": + res.extend([res_filename + ".int", os.path.join(os.path.dirname(res_filename), 'sensor')]) + else: + res.extend([res_filename + ".sel", res_filename + ".dat"]) + return res def simulate(self, exe, skip_if_up_to_date=False): diff --git a/wetb/hawc2/tests/test_files/htcfiles/test_2xoutput.htc b/wetb/hawc2/tests/test_files/htcfiles/test_2xoutput.htc new file mode 100644 index 0000000000000000000000000000000000000000..4f1f951a1678e894433d2791e757cb94653492f7 --- /dev/null +++ b/wetb/hawc2/tests/test_files/htcfiles/test_2xoutput.htc @@ -0,0 +1,32 @@ +begin simulation; + time_stop 200; +end simulation; +begin dll; +; + begin type2_dll; + name risoe_controller; + begin output; + general time; [s] + constraint bearing1 shaft_rot 1 only 2; Drivetrain speed [rad/s] + end output; + end type2_dll; + begin type2_dll; + name risoe_controller2; + begin output; + general time; [s] + constraint bearing1 shaft_rot 1 only 2; Drivetrain speed [rad/s] + end output; + end type2_dll; +end dll; +begin output; + filename ./res/output1; + time 100 200; + general time; +end output; +begin output; + filename ./res/output2; + time 100 200; + general time; +end output; +exit; + diff --git a/wetb/hawc2/tests/test_htc_file.py b/wetb/hawc2/tests/test_htc_file.py index e2237df20bafbe650a5834d9083c68236fc7605f..8d2515f26998fb4fe134a7935f8d278c76a73d82 100644 --- a/wetb/hawc2/tests/test_htc_file.py +++ b/wetb/hawc2/tests/test_htc_file.py @@ -278,7 +278,18 @@ class TestHtcFile(unittest.TestCase): self.assertRaisesRegex(ValueError, "Modelpath cannot be autodetected", HTCFile, self.testfilepath + "test2.htc") - + def test_open_eq_save(self): + HTCFile(self.testfilepath + "test3.htc","../").save(self.testfilepath + "tmp.htc") + htcfile = HTCFile(self.testfilepath + "tmp.htc","../") + htcfile.save(self.testfilepath + "tmp.htc") + self.assertEqual(str(htcfile).count("\t"), str(HTCFile(self.testfilepath + "tmp.htc", "../")).count("\t")) + self.assertEqual(str(htcfile), str(HTCFile(self.testfilepath + "tmp.htc", "../"))) + + def test_2xoutput(self): + htc = HTCFile(self.testfilepath + "test_2xoutput.htc","../") + self.assertEqual(len(htc.res_file_lst()), 4) + + if __name__ == "__main__": #import sys;sys.argv = ['', 'Test.testName']