Source code for MDMC.exporters.configurations.packmol_input

"""A module for a class to export a packmol input file"""
from __future__ import annotations

from copy import copy
from typing import TYPE_CHECKING

from MDMC.exporters.exporter import Exporter

if TYPE_CHECKING:
    from MDMC.MD.packmol.packmol_setup import PackmolSetup

#pylint: disable=arguments-differ, too-few-public-methods

[docs] class PackmolInputExporter(Exporter): """A class to export `PackmolSetup` objects into packmol input files""" INDENT = " "
[docs] def write(self, setup: PackmolSetup, structure_file_names: dict, output_name: str = "output_file.pdb", **settings: dict) -> None: """ Write the data contained in a `PackmolSetup` object to a packmol input file Parameters ---------- setup: PackmolSetup A `PackmolSetup` object which contains the molecules and constraints for the setup. output_name: str The filename of the output file. structure_file_names: dict A dictionary mapping structures in the system to corresponding file names. """ system_settings, mol_settings = setup.get_settings() tol = system_settings["tolerance"] self.file.writelines(["# Created by MDMC\n", f"tolerance {tol}\n", "filetype pdb\n", f"output {output_name}\n"]) self.file.write("\n") for molecule_setting in mol_settings: # Get structure file name struct_file_name = structure_file_names[molecule_setting["structure"]] if not struct_file_name.endswith(".pdb"): struct_file_name += ".pdb" self.file.write(f"structure {struct_file_name}\n") # Write each setting that is relevant to the structure constraint_settings = copy(molecule_setting) constraint_settings.pop("structure") for setting, value in constraint_settings.items(): self.file.writelines(self.INDENT+f"{setting} {value}\n") self.file.write("end structure\n") self.file.write("\n")