kjappelbaum / mofchecker

Basic sanity checks for MOFs.
https://mofchecker.readthedocs.io/en/latest/background.html
MIT License
22 stars 4 forks source link

definition of metal differs from CSD #100

Closed ltalirz closed 3 years ago

ltalirz commented 3 years ago

While I did not find the CSD definition of a "metal" in the MOF subset paper [1], the MOF subset contains several structures with metalloids like Antimony (e.g. AXUVUL) and Germanium (e.g. DIPROL ), for which the mofchecker complains that the structure does not contain metals.

The is_metalloid property of pymatgen includes

    @property
    def is_metalloid(self) -> bool:
        """
        True if element is a metalloid.
        """
        return self.symbol in ("B", "Si", "Ge", "As", "Sb", "Te", "Po")

which is likely too broad - e.g. frameworks with boron centers are typically considered COFs (e.g. BP-COF-4).

While the definition of what is a metal is rather clear-cut for an elemental crystal (vanishing electronic band gap - to include semimetals), I'm not sure whether transferring this criterion to individual metal atoms in MOFs is very meaningful (strictly speaking, one might then also include carbon as the element in the graphene semi-metal ;-) ). Perhaps a more appropriate criterion would look at the bond strength or other characteristics of the bonds (to distinguish from COFs).

Perhaps a practical fix for the moment would be to also include is_metalloid but print a warning. Since the mofchecker currently excepts if there is no metal in the structure, it might be better to be a bit more lenient (unless any of the other checks would break down for these elements)

[1] They write

[ ...] the restriction to transition metals is limiting and excludes all other metals that are effectively synthesized in some MOF structures. These metals are alkalis, rare earths and metalloids, among others.

but I could not find which elements they do consider to be metals.

ltalirz commented 3 years ago

adding our own is_metal stand-alone function (that reuses pymatgen's is_metal, and is_metalloid with warning) would also allow to fix https://github.com/kjappelbaum/mofchecker/pull/99