Skip to main content

Python utilities for the processing and quantification of chromatograms from High Performance Liquid Chromatography (HPLC).

Project description

License: GPL v3 Run tests codecov PyPI version DOI

About

High-Performance Liquid Chromatography (HPLC) is an analytical technique which allows for quantitative characterization of the chemical components of a mixture. While many of the technical details of HPLC are now automated, the programmatic cleaning and processing of the resulting data often requires extensive manual labor. This package was developed to alleviate some of this burden, making the actual running of the HPLC the most time-consuming part of the quantification.

Installation

You can install hplc-py on pip:

$ pip install --upgrade hplc-py

Usage

Hplc-py has extensive documentation available with a quickstart, example calibration curve, step-by-step description of the algorithm, and API documentation.

The meat of hplc-py is in its Chromatogram class which performs all peak detection and fitting steps. There is an additional load_chromatogram function which makes it easy to read in chromatograms from a long-form tidy .csv file.

Loading and Viewing Chromatograms

For example, say you have a chromatogram file example.csv with columns of time and signal that looks like this:

time,signal
0, 0
0.00833, 0
0.01667, -1
...
12.77500,668
12.78333,746
12.79167,830
12.80000,919
12.80833,1015
12.81667,1118
12.82500,1228
12.83333,1345
12.84167,1471
...

Using hplc-py, this can be read from the file and loaded as a Chromatogram object as

In[1]: from hplc.io import load_chromatogram
In[2]: from hplc.quant import Chromatogram
In[3]: example = load_chromatogram('example.csv', cols=['time', 'signal'])
In[4]: chrom = Chromatogram(example)

The chromatogram is now loaded as an hplc-py Chromatogram object, which has a variety of methods annotated in the documentation. The chromatogram can be viewed by calling the show() method

In[5]: chrom.show()
Out[5]: [<Figure size 1280x960 with 1 Axes>, <Axes: xlabel='time', ylabel='signal'>]

yielding:

Quantifying Peaks

Peaks can be automatically detected and fit in a chromatogram by calling the fit_peaks method of a Chromatogram object. Doing so on our example chromatogram yields a pandas DataFrame with the peaks and their properties

In[6]: peaks = chrom.fit_peaks()
Performing baseline correction: 100%|████████| 299/299 [00:01<00:00, 167.06it/s]
Deconvolving mixture: 100%|███████████████████████| 3/3 [00:13<00:00,  4.66s/it]

In[7]: peaks.head()
Out[7]:   
retention_time	   scale	    skew	   amplitude	        area	signal_maximum	peak_id
	 10.90	0.158768	0.691961	23380.386403	2.805646e+06	66064.361454	1
	 13.17	0.592828	3.889788	43048.461053	5.165815e+06	50331.167860	2
	 14.45	0.350139       -2.997977	34791.996875	4.175040e+06	65352.588796	3
	 15.53	0.308900	1.567356	14938.309504	1.792597e+06	26723.707626	4
	 16.55	0.272283	1.261303	9512.727882	1.141527e+06	18121.299375	5

The resulting chromatogram reconstruction can be seen by again calling the show() method, this time restricting the plotted time region between 10 and 20 minutes.

In[8]: chrom.show()
Out[8]:[<Figure size 640x480 with 1 Axes>,
 <Axes: xlabel='time', ylabel='signal (baseline corrected)'>]

Citation

If you use hplc-py in your research please cite the version of the software you use along with our descriptive paper in JOSS:

@article{chure2024,
	author = {Chure, Griffin and Cremer, Jonas},
	title = {hplc-py: A Python Utility For Rapid Quantification of Complex Chemical Chromatograms},
	volume = 9,
    number = 94,
	url = {https://joss.theoj.org/papers/10.21105/joss.06270},
	doi = {10.21105/joss.06270},
	number = {94},
	urldate = {2024-02-16},
	journal = {Journal of Open Source Software},
	year = {2024}
   }

Contributing

Development of hplc-py occurs on various feature branches which are merged and released upon approval by Griffin Chure (@gchure), the primary maintainer of the software.

Please submit issues and bug reports using the issue tracker. When filing an issue, provide a reproducible example that demonstrates the bug or problem. Feature requests can also be made through the issue tracker, though it is up to the discretion of the maintainers what is worth implementing.

For help with troubleshooting fitting of your chromatograms, please open an issue giving an explanation of what's giving you trouble and provide a minimal working example of the problem. You can also tag your issue with the troubleshooting flag.

License

This software is released under the GNU General Public License version 3 (GPLv3). The complete license is provided as LICENSE.txt, but a brief description is as follows:

hplc-py
Copyright (C) 2024, Griffin Chure & Jonas Cremer

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hplc_py-0.2.7.tar.gz (39.5 kB view details)

Uploaded Source

Built Distribution

hplc_py-0.2.7-py3-none-any.whl (32.9 kB view details)

Uploaded Python 3

File details

Details for the file hplc_py-0.2.7.tar.gz.

File metadata

  • Download URL: hplc_py-0.2.7.tar.gz
  • Upload date:
  • Size: 39.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.5

File hashes

Hashes for hplc_py-0.2.7.tar.gz
Algorithm Hash digest
SHA256 ddc8a0f5db810ee5018dad3acc865f7484c203345411231f15df47a8af1afc65
MD5 186395305f1a9acac012723b55e4c22e
BLAKE2b-256 933433e38980d63747bf3c9463c4332df4d5346048946b6c7f56a028765e6d45

See more details on using hashes here.

File details

Details for the file hplc_py-0.2.7-py3-none-any.whl.

File metadata

  • Download URL: hplc_py-0.2.7-py3-none-any.whl
  • Upload date:
  • Size: 32.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.5

File hashes

Hashes for hplc_py-0.2.7-py3-none-any.whl
Algorithm Hash digest
SHA256 02029ceb86f179080e0232e5c830e6c61ecb1901254bd3a85bf2468969a8bfeb
MD5 c1523db1e9527d83f47a23674877d7d4
BLAKE2b-256 a5e9bd0e151662946d3466b8246cb6d8629f295b00c8c7a181f635ff1dacaee3

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page