Skip to main content

A package for flow-cytometry simulations.

Project description

FlowCyPy Logo

Meta

Python version

Documentation Status

FlowCyPy on Google colab

Testing

Unittest Status

Unittest coverage

PyPi

PyPi

PyPi download statistics

Overview

FlowCyPy is a robust Python package designed to simulate the behavior of a flow cytometer. By simulating realistic Forward Scatter (FSC) and Side Scatter (SSC) signals—complete with noise, baseline shifts, and signal saturation—FlowCyPy provides a detailed model of flow cytometry experiments. Ideal for researchers and engineers, it offers an intuitive and configurable platform for studying scattering phenomena and detector responses in flow cytometry setups.

Features

  • Particle Event Simulation: Generate realistic FSC and SSC signals with configurable parameters.

  • Noise & Baseline Shift Modeling: Add Gaussian noise and baseline shifts to simulate real-world experimental conditions.

  • Signal Saturation: Simulate detector saturation to reflect real-life limitations.

  • Signal Digitization: Discretize continuous signals into specified bins for deeper analysis.

  • Advanced Plotting: Customize signal visualization with multi-channel plot support.

  • Fully Configurable: Customize particle size distributions, flow parameters, and detector setups.

Installation

You can easily install FlowCyPy via pip:

pip install FlowCyPy

Requirements

FlowCyPy requires Python 3.10 or higher and the following dependencies:

  • numpy

  • scipy

  • pint

  • tabulate

  • seaborn

  • MPSPlots

  • PyMieSim

  • pydantic>=2.6.3

Quick Start Example

Below is an example of how to simulate particle events and generate flow cytometry signals using FlowCyPy:

import numpy as np
from FlowCyPy import FlowCytometer, Scatterer, Analyzer, Detector, Source, FlowCell
from FlowCyPy import distribution
from FlowCyPy import peak_finder
from FlowCyPy.units import particle, milliliter, nanometer, RIU, second, micrometer, millisecond, meter

np.random.seed(3)

flow_cell = FlowCell(
    flow_speed=7.56 * meter / second,
    flow_area=(10 * micrometer) ** 2,
    run_time=0.1 * millisecond
)

scatterer = Scatterer(medium_refractive_index=1.33 * RIU)

scatterer.add_population(
    name='EV',
    concentration=2e+9 * particle / milliliter / 10,
    size=distribution.RosinRammler(
        characteristic_size=50 * nanometer,
        spread=10.5
    ),
    refractive_index=distribution.Normal(
        mean=1.45 * RIU,
        std_dev=0.02 * RIU
    )
)

scatterer.initialize(flow_cell=flow_cell)

scatterer.print_properties()
scatterer.plot()

from FlowCyPy.units import milliwatt, AU
source = Source(
    numerical_aperture=0.3 * AU,
    wavelength=800 * nanometer,
    optical_power=100 * milliwatt
)

source.print_properties()  # Print the laser source properties

# Step 5: Configure Detectors
# Side scatter detector
from FlowCyPy.units import degree, watt, ampere, millivolt, ohm, kelvin, milliampere, megahertz
detector_0 = Detector(
    name='side',
    phi_angle=90 * degree,
    numerical_aperture=1.2 * AU,
    responsitivity=1 * ampere / watt,
    sampling_freq=60 * megahertz,
    saturation_level=1 * millivolt,
    n_bins='16bit',
    resistance=50 * ohm,
    dark_current=0.1 * milliampere,
    temperature=300 * kelvin
)

# Forward scatter detector
detector_1 = Detector(
    name='forward',
    phi_angle=0 * degree,
    numerical_aperture=1.2 * AU,
    responsitivity=1 * ampere / watt,
    sampling_freq=60 * megahertz,
    saturation_level=1 * millivolt,
    n_bins='16bit',
    resistance=50 * ohm,
    dark_current=0.1 * milliampere,
    temperature=300 * kelvin
)

detector_1.print_properties()

cytometer = FlowCytometer(
    coupling_mechanism='mie',
    source=source,
    scatterer=scatterer,
    detectors=[detector_0, detector_1]
)

cytometer.simulate_pulse()

cytometer.plot()

The plot produced will resemble the following:

example_3

Developer Guide

For developers or contributors who want to work on FlowCyPy, follow the steps below to install the package locally, run tests, and build the documentation.

### 1. Clone the Repository

First, clone the repository:

git clone https://github.com/MartinPdeS/FlowCyPy.git
cd FlowCyPy

### 2. Install Locally

Install the package in editable mode along with the testing and documentation dependencies:

pip install -e .[testing,documentation]

### 3. Running Tests

To run the tests, use pytest with coverage:

pytest

This will generate a coverage report in htmlcov/index.html.

### 4. Building Documentation

To build the documentation locally using Sphinx, follow these steps:

cd docs
make html

Once completed, the HTML documentation will be available in the docs/_build/html directory.

Additional Examples

Explore a variety of use cases and configurations in the Examples section of the documentation, including:

Density Plots for Large and Small Scatterers

example_0

Raw Signal as measured from the detector

example_1

Peak finder analysis

example_2

Scatter Density Plot

example_3

Contributions

FlowCyPy is under active development, and contributions are highly encouraged! Feel free to reach out for collaboration opportunities or to provide feedback.

Contact Information

As of 2024, the project is still under development. If you want to collaborate, it would be a pleasure! I encourage you to contact me.

FlowCell was written by Martin Poinsinet de Sivry-Houle .

Email:martin.poinsinet.de.sivry@gmail.ca .

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

flowcypy-0.2.9.1.tar.gz (3.6 MB view details)

Uploaded Source

Built Distribution

FlowCyPy-0.2.9.1-py3-none-any.whl (51.7 kB view details)

Uploaded Python 3

File details

Details for the file flowcypy-0.2.9.1.tar.gz.

File metadata

  • Download URL: flowcypy-0.2.9.1.tar.gz
  • Upload date:
  • Size: 3.6 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.20

File hashes

Hashes for flowcypy-0.2.9.1.tar.gz
Algorithm Hash digest
SHA256 62ee361fe6711100b29f22b7e6feb27756889adb6219a464eddc6fd5bc66ab61
MD5 2e3ff62534f70a1f48f54e5d269964b4
BLAKE2b-256 6efdaabb46d9d5b63464fc666cc2b6059f7697099474579f27ee9f4fd56b25aa

See more details on using hashes here.

File details

Details for the file FlowCyPy-0.2.9.1-py3-none-any.whl.

File metadata

  • Download URL: FlowCyPy-0.2.9.1-py3-none-any.whl
  • Upload date:
  • Size: 51.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.20

File hashes

Hashes for FlowCyPy-0.2.9.1-py3-none-any.whl
Algorithm Hash digest
SHA256 fb06efb96b28f0566b99b32ce5032827e4dbd129c9dade286226fc4b4f65b291
MD5 091bfbca6212cd02d7f9b52884902900
BLAKE2b-256 3d7a45b3d2a3be40de7543ab08e38cd4c606d59d3030cdd6a6e47e48f36aa833

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