Skip to main content

Introduction

StrainPycon is a Python 3 package that can be used to disambiguate multiple strains in mixed samples of DNA. Mathematically, StrainPycon can solve binary blind source separation problems and compute certain high-dimensional integrals involving binary variables. The connection between these mathematical concepts and strain identification is discussed in the following journal article:

L. Mustonen, X. Gao, A. Santana, R.M. Mitchell, Y. Vigfusson, and L. Ruthotto,
A Bayesian framework for molecular strain identification from mixed diagnostic samples,
Inverse Problems 34(10), 105009, 2018,
https://doi.org/10.1088/1361-6420/aad7cd

StrainPycon builds on the StrainRecon.jl package written in Julia: https://github.com/lruthotto/StrainRecon.jl

Motivation

As a motivating example, suppose you have a blood sample infected by multiple Plasmodium falciparum malaria parasites. Assuming you have done PCR on chosen SNP sites, the number of calls that differ from the reference genome are indicative of what proportion of the strains have mutated at that SNP. StrainPycon is an approach for identifying the strains in the sample through disambiguation (deconvolution) without requiring any prior knowledge about the sample or the parasite. The process can also help assess the multiplicity of infection in the sample, which can aid malaria surveillance efforts, for instance.

Citation

If you use StrainPycon in your project, please cite the journal article above.

Full documentation

Please refer to the full documentation of StrainPycon at: https://www.ymsir.com/strainpycon/

Requirements

StrainPycon was tested in the following environment:

  • 64-bit Linux
  • Python 3.6.5 with NumPy 1.14.3

Basic usage

Usually, the user only wants to access a few methods from the StrainRecon class:

import strainpycon
S = strainpycon.StrainRecon()

Let us generate synthetic measurement data with three strains and 24 SNP sites and solve the inverse problem:

(measurements, strains, freq) = S.random_data(24, 3)
(strains_recon, freq_recon) = S.compute(measurements, 3)

Here, strains_recon should equal strains and freq_recon should equal freq.

Next, let us draw another random measurement, now with Gaussian additive noise. We compute the misfit, or negative log-likelihood, when the number of strains in the reconstruction varies from one to seven. Moreover, we compute posterior statistics to quantify uncertainty:

gamma = 0.1 # standard deviation of Gaussian noise
(measurements, strains, freq) = S.random_data(18, 4, gamma=gamma)
misfits = S.misfits(measurements, range(1,8))
(strains_mean, freq_mean, strains_dev, freq_dev) = S.posterior_stats(measurements, 4, gamma)

A complete description of the methods and detailed examples can be found on: See https://www.ymsir.com/strainpycon/

Known issues

StrainPycon does not support multi-threading yet.

Contacts

Please direct questions to: Ymir Vigfusson, Emory University, ymir.vigfusson@emory.edu

Metadata

Release files for strainpycon 1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for strainpycon 1.0
File Size Uploaded
strainpycon-1.0.tar.gz 14.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for strainpycon 1.0
File Interpreter ABI Platform
strainpycon-1.0-py2-none-any.whl Python 2 none any Details

Total release size: 31.8 kB

Release files / strainpycon-1.0.tar.gz

Download URL strainpycon-1.0.tar.gz
Size 14.2 kB
Tags Source
SHA-256 checksum
How to use checksums
5bbd9426aa658e75e3f2f3ba65175f52fe196ab8e14c8fc895272dda5d2246ba
BLAKE2b-256 checksum
How to use checksums
3662308f8c7ff04ca6d7493463314ea9270d0485ad7ca0f531d2089d352eee55
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/40.4.1 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/2.7.6

Release files / strainpycon-1.0-py2-none-any.whl

Download URL strainpycon-1.0-py2-none-any.whl
Size 17.6 kB
Tags Python 2
SHA-256 checksum
How to use checksums
1984c98cee78019d68be295b2e3d8c6529dd7be9c45dd0eed7e44f4102a0b96b
BLAKE2b-256 checksum
How to use checksums
6e2d9a10887a1912ff3c3a1ce57a2004e98b5173a28720d5a40119ede2f62d64
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/40.4.1 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/2.7.6

Release history Release notifications | RSS feed

This release

1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page