diff --git a/_unittest/example_models/ds_1d.tab b/_unittest/example_models/ds_1d.tab new file mode 100644 index 00000000000..facf3a8c18a --- /dev/null +++ b/_unittest/example_models/ds_1d.tab @@ -0,0 +1,4 @@ +"X [cel]" "Y" +1.5 2 +2 3.5 +2 5 diff --git a/_unittest/example_models/ds_3d.tab b/_unittest/example_models/ds_3d.tab new file mode 100644 index 00000000000..9d12018078d --- /dev/null +++ b/_unittest/example_models/ds_3d.tab @@ -0,0 +1,4 @@ +"X" "Y[GHz]" "Z" "Value[m_per_sec]" +1 2 3 5 +3 4 5 6 +4 6 7 8 diff --git a/_unittest/test_01_Design.py b/_unittest/test_01_Design.py index bae008cf408..abd1cb8cfec 100644 --- a/_unittest/test_01_Design.py +++ b/_unittest/test_01_Design.py @@ -188,6 +188,29 @@ def test_19_edit_existing_dataset(self): assert ds.add_point(300, 0.8) assert len(ds.x) == xl + 1 + def test_19_import_dataset1d(self): + filename = os.path.join(local_path, "example_models", "ds_1d.tab") + ds4 = self.aedtapp.import_dataset1d(filename) + assert ds4.name == "$ds_1d" + ds5 = self.aedtapp.import_dataset1d(filename, dsname="dataset_test", is_project_dataset=False) + assert ds5.name == "dataset_test" + ds6 = self.aedtapp.import_dataset1d(filename, dsname="$dataset_test2") + assert ds6.name == "$dataset_test2" + ds7 = self.aedtapp.import_dataset1d(filename) + assert not ds7 + assert ds4.delete() + assert self.aedtapp.import_dataset1d(filename) + + def test_19_import_dataset3d(self): + filename = os.path.join(local_path, "example_models", "ds_3d.tab") + ds8 = self.aedtapp.import_dataset3d(filename) + assert ds8.name == "$ds_3d" + ds9 = self.aedtapp.import_dataset3d(filename, dsname="dataset_test") + assert ds9.name == "$dataset_test" + assert ds9.delete() + ds10 = self.aedtapp.import_dataset3d(filename, dsname="$dataset_test") + assert ds10.vunit == "m_per_sec" + def test_20_get_3dComponents_properties(self): assert len(self.aedtapp.components3d) > 0 props = self.aedtapp.get_components3d_vars("Dipole_Antenna_DM") diff --git a/pyaedt/application/Design.py b/pyaedt/application/Design.py index 81bfd789db4..6c17d2d1755 100644 --- a/pyaedt/application/Design.py +++ b/pyaedt/application/Design.py @@ -2285,6 +2285,123 @@ def create_dataset3d(self, dsname, xlist, ylist, zlist=None, vlist=None, xunit=" vunit=vunit, ) + @pyaedt_function_handler() + def import_dataset1d(self, filename, dsname=None, is_project_dataset=True): + """Import a 1D dataset. + + Parameters + ---------- + filename : str + Full path and name for the TAB file. + dsname : str, optional + Name of the dataset. The default is the file name. + is_project_dataset : bool, optional + Whether it is a project data set. The default is ``True``. + + Returns + ------- + :class:`pyaedt.application.Variables.DataSet` + + References + ---------- + + >>> oProject.AddDataset + >>> oDesign.AddDataset + """ + with open(filename, "r") as f: + lines = f.read().splitlines() + header = lines[0] + points = lines[1:] + + header_list = header.split("\t") + units = ["", ""] + cont = 0 + for h in header_list: + result = re.search(r"\[([A-Za-z0-9_]+)\]", h) + if result: + units[cont] = result.group(1) + cont += 1 + + xlist = [] + ylist = [] + for item in points: + xlist.append(float(item.split()[0])) + ylist.append(float(item.split()[1])) + + if not dsname: + dsname = os.path.basename(os.path.splitext(filename)[0]) + + if dsname[0] == "$": + dsname = dsname[1:] + is_project_dataset = True + + return self.create_dataset( + dsname, xlist, ylist, is_project_dataset=is_project_dataset, xunit=units[0], yunit=units[1] + ) + + @pyaedt_function_handler() + def import_dataset3d(self, filename, dsname=None): + """Import a 3D dataset. + + Parameters + ---------- + filename : str + Full path and name for the TAB file. + dsname : str, optional + Name of the dataset. The default is the file name. + + Returns + ------- + :class:`pyaedt.application.Variables.DataSet` + + References + ---------- + + >>> oProject.AddDataset + """ + with open(filename, "r") as f: + lines = f.read().splitlines() + header = lines[0] + points = lines[1:] + + header_list = header.split("\t") + units = ["", "", "", ""] + cont = 0 + for h in header_list: + result = re.search(r"\[([A-Za-z0-9_]+)\]", h) + if result: + units[cont] = result.group(1) + cont += 1 + + xlist = [] + ylist = [] + zlist = [] + vlist = [] + for item in points: + xlist.append(float(item.split()[0])) + ylist.append(float(item.split()[1])) + zlist.append(float(item.split()[2])) + vlist.append(float(item.split()[3])) + + if not dsname: + dsname = os.path.basename(os.path.splitext(filename)[0]) + + if dsname[0] == "$": + dsname = dsname[1:] + + return self.create_dataset( + dsname, + xlist, + ylist, + zlist, + vlist, + is_project_dataset=True, + xunit=units[0], + yunit=units[1], + zunit=units[2], + vunit=units[3], + ) + @pyaedt_function_handler() def create_dataset( self, diff --git a/pyaedt/application/Variables.py b/pyaedt/application/Variables.py index 2065dd6a568..af75c38533a 100644 --- a/pyaedt/application/Variables.py +++ b/pyaedt/application/Variables.py @@ -1519,17 +1519,27 @@ def _args(self): x, y, z, v = (list(t) for t in zip(*sorted(zip(self.x, self.y, self.z, self.v), key=lambda e: float(e[0])))) else: x, y = (list(t) for t in zip(*sorted(zip(self.x, self.y), key=lambda e: float(e[0])))) + for i in range(len(x)): - arg3 = [] - arg3.append("NAME:Coordinate") - arg4 = ["NAME:CoordPoint"] - arg4.append(float(x[i])) - arg4.append(float(y[i])) - if self.z and self.name[0] == "$": - arg4.append(float(z[i])) - arg4.append(float(v[i])) - arg3.append(arg4) - arg2.append(arg3) + if self._app._aedt_version >= "2022.1": + arg3 = ["NAME:Point"] + arg3.append(float(x[i])) + arg3.append(float(y[i])) + if self.z and self.name[0] == "$": + arg3.append(float(z[i])) + arg3.append(float(v[i])) + arg2.append(arg3) + else: + arg3 = [] + arg3.append("NAME:Coordinate") + arg4 = ["NAME:CoordPoint"] + arg4.append(float(x[i])) + arg4.append(float(y[i])) + if self.z and self.name[0] == "$": + arg4.append(float(z[i])) + arg4.append(float(v[i])) + arg3.append(arg4) + arg2.append(arg3) arg.append(arg2) return arg