Skip to main content

A tissue stress and cell pressure inference package with dynamical information

Project description

DOI PyPI version PyPI - Downloads codecov Documentation Status

ForSys

ForSys: a non-invasive open-source analysis software to infer stress from microscopic time series


What is ForSys ?

ForSys can infer membrane stress and cell pressure from a skeletonized microscopy image or a time series.

Documentation:

Available at https://forsys.readthedocs.io/en/latest/


Installation

To install, just run

pip install forsys

Usage

Static ForSys: Inferring on a single frame

After importing ForSys, the segmented image needs to be parsed into the Skeleton class

import forsys as fsys
skeleton = fsys.skeleton.Skeleton("path/to/segmented/image.tif")
vertices, edges, cells = skeleton.create_lattice()

Then, the skeleton should be meshed to the desired amount of vertices per edge (in order to account for the curved edges) in this example, the number is set to 6, using the ne keyworded argument.

vertices, edges, cells, _ = fsys.virtual_edges.generate_mesh(vertices, edges, cells, ne=6)

Next, we create a Frame object with our vertices, edges and cells. Finally creating the forsys object

frames[0] = fsys.frames.Frame(0, vertices, edges, cells, time=0)
forsys = fsys.ForSys(frames)

Now, we can create the matrix representation of the system for the stress or the pressures and solve it to get the inferred values. This is done for the stress as

fsys.build_force_matrix(when=0)
fsys.solve_stress(when=0, allow_negatives=False)

and similarly for the pressure

fsys.build_pressure_matrix(when=0)
fsys.solve_pressure(when=0, method="lagrange_pressure")

Dynamical ForSys: Inferring on a time-series

The main difference in this context is the necessity to create more than one frame. We followed the same steps as before to create generate each frame's mesh, but now create a different frame for each image in the time-series. Now, each frame will have a frame_number and a time. The first number works as an ID of the frame and tells the order of the frames, while the second one, time, is used to calculate the dynamical variables, such as velocity.

import forsys as fsys

for frame_id, frames in enumerate(images_path):
    real_time = 5 * frame_id # Image every 5 seconds
    skeleton = fsys.skeleton.Skeleton(frames)
    vertices, edges, cells = skeleton.create_lattice()
    vertices, edges, cells, _ = fsys.virtual_edges.generate_mesh(vertices, edges, cells, ne=6)
    frames[frame_id] = fsys.frames.Frame(frame_id,
                                         vertices,
                                         edges, 
                                         cells,
                                         time=real_time)
forsys = fsys.ForSys(frames, cm=False)

Then, after all frames have been created we again use the fsys.ForSys() class to create the mesh. If there is more than one element in the frames it will automatically try to track the vertices during the series. Creation of the matrices and its solution is done identically, but we have to specify at which time we want to do it

fsys.build_force_matrix(when=frame_number_to_solve)
fsys.solve_stress(when=frame_number_to_solve, 
                    allow_negatives=False,
                    b_matrix="velocity")

fsys.build_pressure_matrix(when=frame_number_to_solve)
fsys.solve_pressure(when=frame_number_to_solve, method="lagrange_pressure")

Importantly, the b_matrix parameter indicates ForSys to use the vertex velocity in the right hand side of the equation (please refer to the Materials and Methods section of th paper for the details).

Plotting the results

For plotting the results, the main function to use is forsys.plot.plot_inference() and then specify whether to include the pressure or not. If the system was already solved,

fsys.plot.plot_inference(forsys.frames[0],
                       step="file_name_to_write",
                       folder="path/to/save/folder",
                       pressure=True,
                       normalized="max",
                       mirror_y=True,
                       colorbar=True)

By default, the membrane tension is always plotted, the pressure=True parameter plots the inferred pressures as the color filling the cells.

How to cite us

Our tool's manuscriptt is available at bioRxiv To cite the tool, you can use:

ForSys: non-invasive stress inference from time-lapse microscopy Augusto Borges, Jerónimo R. Miranda-Rodríguez, Alberto Sebastián Ceccarelli, Guilherme Ventura, Jakub Sedzinski, Hernán López-Schier, Osvaldo Chara. bioRxiv 2024.05.28.595800; doi: https://doi.org/10.1101/2024.05.28.595800

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

forsys-1.1.2rc0.tar.gz (63.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

forsys-1.1.2rc0-py3-none-any.whl (63.6 kB view details)

Uploaded Python 3

File details

Details for the file forsys-1.1.2rc0.tar.gz.

File metadata

  • Download URL: forsys-1.1.2rc0.tar.gz
  • Upload date:
  • Size: 63.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for forsys-1.1.2rc0.tar.gz
Algorithm Hash digest
SHA256 3e7949c0a1dde4bf8e2184ab030bbce73e412b8168ff229a549edb1668b01e2d
MD5 03b6572977fa5ba7c9d05b9cfcaa1ff5
BLAKE2b-256 50c3e672224418f7b0ee1786ff03a8752d0fe54b768a4f1cd99e3b83b23e6b72

See more details on using hashes here.

File details

Details for the file forsys-1.1.2rc0-py3-none-any.whl.

File metadata

  • Download URL: forsys-1.1.2rc0-py3-none-any.whl
  • Upload date:
  • Size: 63.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for forsys-1.1.2rc0-py3-none-any.whl
Algorithm Hash digest
SHA256 53234f9b120a1418e48d89e5b53677228974856c9536045e9c8f6a409e8bb2a1
MD5 144f1eb1886bc00592e9005b92562c2e
BLAKE2b-256 7a455965757e9f66e45fa06218185a8cd13335470cbb16333263e9ac1055b51c

See more details on using hashes here.

Supported by

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