def extract_lattice_description_info(self, file_name: str) -> None:
        """
        Reads the xml that summarizes serialized simulation files
        :param file_name:{str} xml metadata file name
        :return: None
        """
        # lattice data simulation file
        lds_file = os.path.abspath(file_name)
        lds_reader = LatticeDataSummaryReader(lds_file=lds_file)

        self.ldsDir = lds_reader.lds_dir
        self.fieldDim = lds_reader.field_dim
        self.ldsCoreFileName = lds_reader.lds_core_file_name
        self.frequency = lds_reader.frequency
        self.numberOfSteps = lds_reader.number_of_steps
        self.latticeType = lds_reader.lattice_type
        self.typeIdTypeNameDict = lds_reader.type_id_type_name_dict
        self.typeIdTypeNameCppMap = lds_reader.type_id_type_name_cpp_map
        self.ldsFileList = lds_reader.lds_file_list
        self.fieldsUsed = lds_reader.fields_used

        for field_name, custom_vis_script in lds_reader.custom_vis_scripts.items():
            self.customVis = CompuCellSetup.createCustomVisPy(field_name)
            self.customVis.registerVisCallbackFunction(CompuCellSetup.vtkScriptCallback)

            self.customVis.addActor(field_name, "vtkActor")
            # we'll piggyback off the actorsDict
            self.customVis.addActor("customVTKScript", custom_vis_script)
Exemple #2
0
    def extract_lattice_description_info(self, file_name: str) -> None:
        """
        Reads the xml that summarizes serialized simulation files
        :param file_name:{str} xml metadata file name
        :return: None
        """

        # lattice data simulation file
        lds_file = os.path.abspath(file_name)
        self.ldsDir = os.path.dirname(lds_file)

        xml2_obj_converter = XMLUtils.Xml2Obj()
        root_element = xml2_obj_converter.Parse(lds_file)
        dim_element = root_element.getFirstElement("Dimensions")
        self.fieldDim = CompuCell.Dim3D()
        self.fieldDim.x = int(dim_element.getAttribute("x"))
        self.fieldDim.y = int(dim_element.getAttribute("y"))
        self.fieldDim.z = int(dim_element.getAttribute("z"))
        output_element = root_element.getFirstElement("Output")
        self.ldsCoreFileName = output_element.getAttribute("CoreFileName")
        self.frequency = int(output_element.getAttribute("Frequency"))
        self.numberOfSteps = int(output_element.getAttribute("NumberOfSteps"))

        # obtaining list of files in the ldsDir
        lattice_element = root_element.getFirstElement("Lattice")
        self.latticeType = lattice_element.getAttribute("Type")

        # getting information about cell type names and cell ids.
        # It is necessary during generation of the PIF files from VTK output
        cell_types_elements = root_element.getElements("CellType")
        list_cell_type_elements = CC3DXMLListPy(cell_types_elements)
        for cell_type_element in list_cell_type_elements:
            type_name = cell_type_element.getAttribute("TypeName")
            type_id = cell_type_element.getAttributeAsInt("TypeId")
            self.typeIdTypeNameDict[type_id] = type_name

        # now will convert python dictionary into C++ map<int, string>

        self.typeIdTypeNameCppMap = CC3DXML.MapIntStr()
        for type_id in list(self.typeIdTypeNameDict.keys()):
            self.typeIdTypeNameCppMap[int(
                type_id)] = self.typeIdTypeNameDict[type_id]

        lds_file_list = os.listdir(self.ldsDir)

        for fName in lds_file_list:
            if re.match(".*\.vtk$", fName):
                self.ldsFileList.append(fName)

        self.ldsFileList.sort()

        # extracting information about fields in the lds file
        fields_element = root_element.getFirstElement("Fields")
        if fields_element:
            field_list = XMLUtils.CC3DXMLListPy(
                fields_element.getElements("Field"))

            for field_elem in field_list:

                field_name = field_elem.getAttribute("Name")
                self.fieldsUsed[field_elem.getAttribute(
                    "Name")] = field_elem.getAttribute("Type")
                if field_elem.findAttribute(
                        "Script"):  # True or False if present
                    # ToDo:  if a "CustomVis" Type was provided,
                    #  require that a "Script" was also provided; else warn user
                    custom_vis_script = field_elem.getAttribute("Script")

                    self.customVis = CompuCellSetup.createCustomVisPy(
                        field_name)
                    self.customVis.registerVisCallbackFunction(
                        CompuCellSetup.vtkScriptCallback)

                    self.customVis.addActor(field_name, "vtkActor")
                    # we'll piggyback off the actorsDict
                    self.customVis.addActor("customVTKScript",
                                            custom_vis_script)