Metadata-Version: 2.1
Name: clophfit
Version: 0.4.2
Summary: Cli for fitting macromolecule pH titration or binding assays data e.g. fluorescence spectra.
Project-URL: Homepage, https://github.com/darosio/ClopHfit
Project-URL: Bug Tracker, https://github.com/darosio/ClopHfit/issues
Project-URL: Discussions, https://github.com/darosio/ClopHfit/discussions
Project-URL: Changelog, https://darosio.github.io/ClopHfit/misc/CHANGELOG.html
Project-URL: Github releases, https://github.com/darosio/ClopHfit/releases
Project-URL: Documentation, https://clophfit.readthedocs.io
Author-email: daniele arosio <daniele.arosio@cnr.it>
License-Expression: BSD-3-Clause
License-File: LICENSE.txt
Keywords: ClopHensor,data fitting,macromolecule binding,pH,svd
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: Console
Classifier: Intended Audience :: Science/Research
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Unix Shell
Classifier: Topic :: Scientific/Engineering
Requires-Python: <3.12,>=3.8
Requires-Dist: click<8.1.4
Requires-Dist: corner<2.2.2
Requires-Dist: emcee<3.1.5
Requires-Dist: lmfit<1.1.1
Requires-Dist: matplotlib<3.6.4
Requires-Dist: numpy<1.24.2
Requires-Dist: openpyxl<3.1.1
Requires-Dist: pandas<1.5.4
Requires-Dist: rpy2<3.5.8
Requires-Dist: scipy<1.10.1
Requires-Dist: seaborn<0.12.3
Requires-Dist: sympy<1.11.2
Requires-Dist: tqdm<4.64.2
Requires-Dist: xlrd<2.0.2
Provides-Extra: dev
Requires-Dist: commitizen<2.40.1; extra == 'dev'
Requires-Dist: ipykernel<6.20.3; extra == 'dev'
Requires-Dist: ipython<8.9.1; extra == 'dev'
Requires-Dist: jupyter<1.0.1; extra == 'dev'
Provides-Extra: docs
Requires-Dist: autodocsumm<0.2.11; extra == 'docs'
Requires-Dist: myst-parser<0.18.2; extra == 'docs'
Requires-Dist: nbsphinx<0.8.13; extra == 'docs'
Requires-Dist: pydata-sphinx-theme<0.12.1; extra == 'docs'
Requires-Dist: sphinx-autodoc-typehints<1.22.1; extra == 'docs'
Requires-Dist: sphinx-click<4.4.1; extra == 'docs'
Requires-Dist: sphinx<5.3.1; extra == 'docs'
Requires-Dist: sphinxcontrib-plantuml<0.24.2; extra == 'docs'
Provides-Extra: tests
Requires-Dist: coverage[toml]<7.1.1; extra == 'tests'
Requires-Dist: mypy<0.992; extra == 'tests'
Requires-Dist: pandas-stubs==1.5.2.230105; extra == 'tests'
Requires-Dist: pygments<2.14.1; extra == 'tests'
Requires-Dist: pytest==7.2.1; extra == 'tests'
Requires-Dist: typeguard<2.13.4; extra == 'tests'
Requires-Dist: xdoctest<1.1.2; extra == 'tests'
Description-Content-Type: text/markdown

[![PyPI](https://img.shields.io/pypi/v/ClopHfit.svg)](https://pypi.org/project/ClopHfit/)
[![CI](https://github.com/darosio/ClopHfit/actions/workflows/ci.yml/badge.svg)](https://github.com/darosio/ClopHfit/actions/workflows/ci.yml)
[![codecov](https://codecov.io/gh/darosio/ClopHfit/branch/main/graph/badge.svg?token=OU6F9VFUQ6)](https://codecov.io/gh/darosio/ClopHfit)
[![RtD](https://readthedocs.org/projects/clophfit/badge/)](https://clophfit.readthedocs.io/)
[![zenodo](https://zenodo.org/badge/DOI/10.5281/zenodo.6354112.svg)](https://doi.org/10.5281/zenodo.6354112)

# ClopHfit

Cli for fitting macromolecule pH titration or binding assay data, e.g.
fluorescence spectra.

- Version: "0.4.2"

## Features

- Plate Reader data Parser.
- Perform non-linear least square fitting.
- Extract and fit pH and chloride titrations of GFP libraries.
  - For 2 labelblocks (e.g. 400, 485 nm) fit data separately and globally.
  - Estimate uncertainty using bootstrap.
  - Subtract buffer for each titration point.
  - Report controls e.g. S202N, E2 and V224Q.
  - Correct for dilution of titration additions.
  - Plot data when fitting fails and save txt file anyway.

## Usage

- Extract and fit titrations from a list of tecan files collected at various pH
  or chloride concentrations:

      clop prtecan --help

  For example:

      clop prtecan list.pH -k ph --scheme ../scheme.txt --dil additions.pH --norm --out prova2 --Klim 6.8,8.4 --sel 7.6,20

  To reproduce older pr.tecan add `--no-weight` option:

      clop prtecan list.pH -k ph --scheme ../scheme.txt --no-bg --no-weight --out 4old --Klim 6.8,8.4 --sel 7.6,20

- Predict chloride dissociation constant `K_d` at given pH:

      clop eq1 --help

To use clophfit in your python:

    from clophfit import prtecan, binding

## Installation

    pipx install clophfit

You can get the library directly from
[PyPI](https://pypi.org/project/ClopHfit/):

    pip install clophfit

## Development

You need the following requirements:

- `hatch` for test automation and package dependency managements. If you don't
  have hatch, you can use `pipx run hatch` to run it without installing, or
  `pipx install hatch`. Dependencies are locked thanks to
  [pip-deepfreeze](https://pypi.org/project/pip-deepfreeze/). You can run
  `hatch env show` to list available environments and scripts.
  ```bash
  hatch run init  # init repo with pre-commit hooks
  hatch run sync  # sync venv with deepfreeze
  # other examples
  hatch run lint:run
  hatch run tests.py3.10:all
  ```
  Hatch handles everything for you, including setting up an temporary virtual
  environment for each run.
- `pre-commit` for all style and consistency checking. While you can run it with
  nox, this is such an important tool that it deserves to be installed on its
  own. If pre-commit fails during pushing upstream then stage changes, Commit
  Extend (into previous commit), and repeat pushing.

`pip`, `pip-deepfreeze` and `hatch` are pinned in
.github/workflows/constraints.txt for consistency with CI/CD.

```bash
pipx install pre-commit
pipx install hatch
pipx runpip hatch install hatch-pip-deepfreeze
```

### Setting up a development with direnv

```bash
echo "layout hatch" > .envrc
hatch run init
```

### Setting up a development environment manually

You can set up a development environment by running:

```bash
python3 -m venv .venv
source ./.venv/bin/activate
pip install -v -e .[dev,tests,docs]
```

With direnv for using [Jupyter](https://jupyter.org/) during development:

    jupiter notebook

And only in case you need a system wide easy accessible kernel:

    python -m ipykernel install --user --name="cloph-310"

### Testing and coverage

Use pytest to run the unit checks:

    pytest

Use `coverage` to generate coverage reports:

    coverage run --parallel -m pytest

Or use hatch:

    hatch run tests:all
    hatch run coverage:combine
    hatch run coverage:report

### Building docs

You can build the docs using:

    hatch run docs:sync
    hatch run docs:build

You can see a preview with:

    hatch run docs:serve

When needed (e.g. API updates):

    sphinx-apidoc -f -o docs/api/ src/clophfit/

### Bump and releasing

To bump version and upload build to test.pypi using:

    hatch run bump

Usually after:

    gh pr create --fill
    gh pr merge --squash --delete-branch [-t “fix|ci|feat: msg”]

To update only changelog:

    gatch run ch

Alternatively:

    pipx run --spec commitizen cz bump --changelog-to-stdout --files-only (--prerelease alpha) --increment MINOR

### Configuration files

Manually updated pinned dependencies for CI/CD:

- .github/workflows/constraints.txt (testing dependabot)

Configuration files:

- pre-commit configured in .pre-commit-config.yaml;
- flake8 (for rst-docstrings and bandit) configured in .flake8 (pinned in
  pre-commit);
- black configured in pyproject.toml (pinned in pre-commit);
- ruff configured in pyproject.toml (pinned in pre-commit);
- darglint configured in .darglint (pinned in pre-commit);
- codespell configured in .codespellrc (pinned in pre-commit);
- coverage configured in pyproject.toml (tests deps);
- mypy configured in pyproject.toml (tests deps);
- commitizen in pyproject.toml (dev deps and pinned in pre-commit).

pip-df generates requirements[-dev,docs,tests].txt.

## TODO

- Print sorted output.
- Add info to results report:
  - Brightness;
  - flatness (SA - SB)/SA - fluorescence is constant? GREAT;
  - presence of isosbestic (the fitting line cross / SA1 < SB1 and SA2 > SB2
    sometime they do not cross anyway).
- Robust fit considering sigma pH.
- check metadata and report the diff REMEMBER 8.8 (2013-05-29); metadata
  rescaled; dataframe groupby per meta_pre, ma anche enspire

- development
  - readthedocs or ghpages?
    <https://www.docslikecode.com/articles/github-pages-python-sphinx/>
