Metadata-Version: 2.4
Name: ttc-nccrp
Version: 0.1.1
Summary: A simple python implementation of the Kroes TTC workflow
Author-email: Grace Patlewicz <grace@comptoxscience.com>
License: MIT
Requires-Python: >=3.13
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: numpy>=2.3.1
Requires-Dist: pandas>=2.3.1
Requires-Dist: rdkit>=2025.3.3
Provides-Extra: dev
Requires-Dist: ipykernel>=6.29.5; extra == "dev"
Requires-Dist: jupyter>=1.1.1; extra == "dev"
Requires-Dist: matplotlib>=3.10.3; extra == "dev"
Requires-Dist: seaborn>=0.13.2; extra == "dev"
Requires-Dist: scikit-learn>=1.7.0; extra == "dev"
Requires-Dist: openpyxl>=3.1.5; extra == "dev"
Requires-Dist: pyarrow>=20.0.0; extra == "dev"
Provides-Extra: docs
Requires-Dist: mkdocs>=1.6.1; extra == "docs"
Dynamic: license-file

# Python Kroes workflow implementation (ttc_nccrp) 
==============================

[![Powered by RDKit](https://img.shields.io/badge/Powered%20by-RDKit-3838ff.svg?logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAFVBMVEXc3NwUFP8UPP9kZP+MjP+0tP////9ZXZotAAAAAXRSTlMAQObYZgAAAAFiS0dEBmFmuH0AAAAHdElNRQfmAwsPGi+MyC9RAAAAQElEQVQI12NgQABGQUEBMENISUkRLKBsbGwEEhIyBgJFsICLC0iIUdnExcUZwnANQWfApKCK4doRBsKtQFgKAQC5Ww1JEHSEkAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMi0wMy0xMVQxNToyNjo0NyswMDowMDzr2J4AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjItMDMtMTFUMTU6MjY6NDcrMDA6MDBNtmAiAAAAAElFTkSuQmCC)](https://www.rdkit.org/)


The foundation is taken from `https://github.com/g-patlewicz/ttc_exclusions` but relying on alerts described in Benigni et al (2008) `https://publications.jrc.ec.europa.eu/repository/bitstream/JRC43157/eur%20report%20benigni%20130208%20final.pdf` 

An updated workflow to facilitate assigning of substances through the Kroes et al workflow. Substances are assigned as inorganics, out of scope of TTC due to their TCDD like features, steroid moiety, high potency genotoxic carcinogens, presenting a genotoxicity alert and organophosphates/carbamates. A new optional offramp exists for PFAS substances. 

Specific Updates:

17-May-2026
- Adjusted simple aldehyde to cover formaldehyde
- Added new vinyl halides from Bailey et al Regul. Toxicol. Pharmacol. 2005; 42 (2) 225-35 
- Adjusted hydrazine and nitroso patterns
- Added additional patterns for a number of other alerts
- Re-figured the logic for inorganics to capture alerting fragments for organic fragments when using SaltRemover.SaltRemover()

19-May-2026

- Added offramp for PFAS
- Created validation set to evaluate initial performance and refine all alerts that were resulting in discrepancies

## Installation

This package requires RDKit. Dependencies are captured in the pyproject.toml file.

`uv add ttc_nccrp`

## Licensing

This implementation is licensed under **MIT**.

## Citation

Please cite Patlewicz and Mihalchik (2026) Revisiting the Threshold of Toxicological Concern: a computational framework for structural classification, cross-scheme comparison and opportunities for refinement. *Computational Toxicology* *under review* 

## Acknowledgements

A handful of SMARTS patterns and ring detection logic were developed with assistance from Claude Haiku (Anthropic), with subsequent code review to verify correctness.

