예제 #1
0
def preprocess_forcefield_files(forcefield_files=None, backend="gmso"):
    """Pre-process foyer Forcefield XML files."""
    if forcefield_files is None:
        return None

    tmp_processed_files = list()
    if backend == "gmso":
        # Run through the forcefield XML conversion
        from gmso.external.convert_foyer_xml import from_foyer_xml

        for idx, file in enumerate(forcefield_files):
            _, suffix = os.path.split(file)
            tempfile = NamedTemporaryFile(suffix=suffix, delete=False)
            try:
                Validator(ff_file_name=file, debug=False)
                from_foyer_xml(
                    foyer_xml=str(file),
                    gmso_xml=str(tempfile.name),
                    overwrite=True,
                )
            except:
                warnings.warn(f"Could not convert {str(file)} as a foyer XML,"
                              f"attempt to read in as a GMSO XML.")
                shutil.copyfile(file, tempfile.name)
            tmp_processed_files.append(tempfile.name)
    else:
        raise FoyerError("Backend not supported." 'Supports backend: "gmso".')

    return tmp_processed_files
예제 #2
0
 def test_from_foyer_validate_foyer(self, ff):
     from_foyer_xml(
         get_fn(ff),
         f"{ff}-gmso-converted.xml",
         overwrite=True,
         validate_foyer=True,
     )
예제 #3
0
    def foyer_periodic(self):
        if has_foyer:
            import foyer
            from foyer.tests.utils import get_fn
        from_foyer_xml(get_fn("oplsaa-periodic.xml"), overwrite=True)
        gmso_ff = ForceField("oplsaa-periodic_gmso.xml")

        return gmso_ff
예제 #4
0
    def foyer_fullerene(self):
        if has_foyer:
            import foyer
            from foyer.tests.utils import get_fn
        from_foyer_xml(get_fn("fullerene.xml"), overwrite=True)
        gmso_ff = ForceField("fullerene_gmso.xml")

        return gmso_ff
예제 #5
0
    def foyer_urey_bradley(self):
        if has_foyer:
            import foyer
            from foyer.tests.utils import get_fn
            from_foyer_xml(get_fn("charmm36_cooh.xml"), overwrite=True)
            gmso_ff = ForceField("charmm36_cooh_gmso.xml")

            return gmso_ff
예제 #6
0
    def foyer_rb_torsion(self):
        if has_foyer:
            import foyer
            from foyer.tests.utils import get_fn
            from_foyer_xml(get_fn("refs-multi.xml"),
                           overwrite=True,
                           validate_foyer=True)
            gmso_ff = ForceField("refs-multi_gmso.xml")

            return gmso_ff
예제 #7
0
 def test_foyer_file_not_found(self):
     file_path = "dummy_name.xml"
     with pytest.raises(FileNotFoundError):
         from_foyer_xml(file_path, overwrite=True)
예제 #8
0
 def test_foyer_pathlib(self, ff):
     file_path = Path(get_fn(ff))
     from_foyer_xml(file_path, overwrite=True)
예제 #9
0
 def test_from_foyer_different_name(self, ff):
     from_foyer_xml(get_fn(ff), f"{ff}-gmso-converted.xml", overwrite=True)
예제 #10
0
 def test_from_foyer_overwrite_false(self, ff):
     from_foyer_xml(get_fn(ff), overwrite=False)
     with pytest.raises(FileExistsError):
         from_foyer_xml(get_fn(ff), overwrite=False)
예제 #11
0
 def test_from_foyer(self, ff):
     from_foyer_xml(get_fn(ff), overwrite=True)
예제 #12
0
 def test_empty_foyer_atomtype(self):
     with pytest.raises(ForceFieldParseError):
         from_foyer_xml(get_path("empty_foyer.xml"))