PFAS Definitions

PFASGroups can classify molecules against five regulatory and scientific PFAS definitions. Pass include_PFAS_definitions=True to parse_smiles() to enable classification:

from PFASGroups import parse_smiles

smiles = ["CCCC(F)(F)F", "FC(F)(F)C(=O)O", "OCCOCCO"]

results = parse_smiles(smiles, include_PFAS_definitions=True)

for mol in results:
    names = [d.definition_name for d in mol.pfas_definition_matches]
    print(mol.smiles, "->", names if names else "(none)")

OECD 2021

Full name: OECD Reconciled PFAS Definition (2021)

Reference: OECD, 2021. Reconciling Terminology of the Universe of Per- and Polyfluoroalkyl Substances.

Rule: A substance is a PFAS if it contains at least one fully fluorinated methyl (CF₃–) or methylene (–CF₂–) group that is not part of a –CF₂–O– ether linkage.

This definition is implemented through the 28 OECD halogen groups bundled in the library. A molecule matches if it has at least one group with group_category == 'OECD'.

EU REACH

Reference: European Chemicals Agency (ECHA) REACH guidance.

Rule: Contains at least one perfluoroalkyl or polyfluoroalkyl moiety with a carbon chain length ≥ 4, and does not belong to any exempted polymer category.

OPPT 2023

Full name: US EPA Office of Pollution Prevention and Toxics PFAS Definition (2023)

Reference: US EPA PFAS Definition

Rule: Aliphatic fluorinated compounds containing ≥ 1 C–F bond that meets structural criteria for persistence or the ability to degrade to persistent PFAS moieties.

UK Environment Agency

Full name: UK Environment Agency Fluorinated Polymer Definition

Reference: UK EA Guidance on Fluorinated Polymers (2022).

Rule: Polymers or oligomers with a perfluorinated backbone or with perfluorinated side-chains.

PFASSTRUCTv5

Reference: Schymanski et al., PFASSTRUCTV5 annotated structure database

PFASSTRUCTv5 is a curated database of PFAS structures. PFASGroups ships an integrated classifier that reproduces the binary PFAS/non-PFAS label from this database for molecules whose structural motifs overlap with the library groups.

Retrieving definition objects

from PFASGroups import get_PFASDefinitions

definitions = get_PFASDefinitions()
for d in definitions:
    print(d.name, d.short_name)

Checking a single molecule

from PFASGroups import parse_smiles

result = parse_smiles(["CCCC(F)(F)F"], include_PFAS_definitions=True)[0]
for match in result.pfas_definition_matches:
    print(match.definition_name)
    print(match.rule_description)