Name | forsys JSON |
Version |
1.0.1
JSON |
| download |
home_page | None |
Summary | A tissue stress and cell pressure inference package with dynamical information |
upload_time | 2024-06-26 05:06:47 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.8 |
license | None |
keywords |
systems biology
stress
pressure
inference
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.11282555.svg)](https://doi.org/10.5281/zenodo.11282555)
[![PyPI version](https://badge.fury.io/py/forsys.svg)](https://pypi.org/project/forsys/)
[![PyPI - Downloads](https://img.shields.io/pypi/dm/forsys)](https://pypi.org/project/forsys/)
[![codecov](https://codecov.io/gh/borgesaugusto/forsys/graph/badge.svg?token=09Z4YKV8IG)](https://codecov.io/gh/borgesaugusto/forsys)
[![Documentation Status](https://readthedocs.org/projects/forsys/badge/?version=latest)](https://forsys.readthedocs.io/en/latest/?badge=latest)
# 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
```bash
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
```python
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.
```python
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
```python
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
```python
fsys.build_force_matrix(when=0)
fsys.solve_stress(when=0, allow_negatives=False)
```
and similarly for the pressure
```python
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.
```python
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
```python
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,
```python
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](https://www.biorxiv.org/content/10.1101/2024.05.28.595800v1)
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
Raw data
{
"_id": null,
"home_page": null,
"name": "forsys",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "systems biology, stress, pressure, inference",
"author": null,
"author_email": "Augusto Borges <borges.augustoar@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/f2/49/a132dede410ae4b80ea4d5be2bb4b3d9a75d4b3143891d242b276d3f92fb/forsys-1.0.1.tar.gz",
"platform": null,
"description": "[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.11282555.svg)](https://doi.org/10.5281/zenodo.11282555)\n[![PyPI version](https://badge.fury.io/py/forsys.svg)](https://pypi.org/project/forsys/)\n[![PyPI - Downloads](https://img.shields.io/pypi/dm/forsys)](https://pypi.org/project/forsys/)\n[![codecov](https://codecov.io/gh/borgesaugusto/forsys/graph/badge.svg?token=09Z4YKV8IG)](https://codecov.io/gh/borgesaugusto/forsys)\n[![Documentation Status](https://readthedocs.org/projects/forsys/badge/?version=latest)](https://forsys.readthedocs.io/en/latest/?badge=latest)\n# ForSys\n#### ForSys: a non-invasive open-source analysis software to infer stress from microscopic time series \n\n---\n## What is ForSys ?\nForsys can infer membrane stress and cell pressure from a skeletonized microscopy image or a time series.\n\n## Documentation: \nAvailable at\nhttps://forsys.readthedocs.io/en/latest/\n\n---\n\n## Installation\nTo install, just run\n```bash\npip install forsys\n```\n---\n\n## Usage\n### Static ForSys: Inferring on a single frame\nAfter importing ForSys, the segmented image needs to be parsed into the *Skeleton* class\n```python\nimport forsys as fsys\nskeleton = fsys.skeleton.Skeleton(\"path/to/segmented/image.tif\")\nvertices, edges, cells = skeleton.create_lattice()\n```\nThen, the skeleton should be meshed to the desired amount of vertices per edge (in order to account for the curved edges)\nin this example, the number is set to 6, using the *ne* keyworded argument.\n```python\nvertices, edges, cells, _ = fsys.virtual_edges.generate_mesh(vertices, edges, cells, ne=6)\n```\n---\nNext, we create a *Frame* object with our vertices, edges and cells. Finally creating the *forsys* object\n```python\nframes[0] = fsys.frames.Frame(0, vertices, edges, cells, time=0)\nforsys = fsys.ForSys(frames)\n```\n\nNow, we can create the matrix representation of the system for the stress or the pressures and solve it to get the \ninferred values. This is done for the stress as\n```python\nfsys.build_force_matrix(when=0)\nfsys.solve_stress(when=0, allow_negatives=False)\n```\nand similarly for the pressure\n```python\nfsys.build_pressure_matrix(when=0)\nfsys.solve_pressure(when=0, method=\"lagrange_pressure\")\n```\n\n### Dynamical ForSys: Inferring on a time-series\nThe main difference in this context is the necessity to create more than one frame. We followed the same steps as before\nto create generate each frame's mesh, but now create a different frame for each image in the time-series. Now, each frame\nwill have a *frame_number* and a *time*. The first number works as an ID of the frame and tells the order of the frames,\nwhile the second one, time, is used to calculate the dynamical variables, such as velocity. \n```python\nimport forsys as fsys\n\nfor frame_id, frames in enumerate(images_path):\n real_time = 5 * frame_id # Image every 5 seconds\n skeleton = fsys.skeleton.Skeleton(frames)\n vertices, edges, cells = skeleton.create_lattice()\n vertices, edges, cells, _ = fsys.virtual_edges.generate_mesh(vertices, edges, cells, ne=6)\n frames[frame_id] = fsys.frames.Frame(frame_id,\n vertices,\n edges, \n cells,\n time=real_time)\nforsys = fsys.ForSys(frames, cm=False)\n```\nThen, after all frames have been created we again use the *fsys.ForSys()* class to create the mesh. If there is more than\none element in the *frames* it will automatically try to track the vertices during the series. Creation of the matrices \nand its solution is done identically, but we have to specify at which time we want to do it\n```python\nfsys.build_force_matrix(when=frame_number_to_solve)\nfsys.solve_stress(when=frame_number_to_solve, \n allow_negatives=False,\n b_matrix=\"velocity\")\n\nfsys.build_pressure_matrix(when=frame_number_to_solve)\nfsys.solve_pressure(when=frame_number_to_solve, method=\"lagrange_pressure\")\n```\nImportantly, the *b_matrix* parameter indicates ForSys to use the vertex velocity in the right hand side of the equation\n(please refer to the Materials and Methods section of th paper for the details).\n\n#### Plotting the results\nFor plotting the results, the main function to use is *forsys.plot.plot_inference()* and then specify whether to include\nthe pressure or not. If the system was already solved,\n```python\nfsys.plot.plot_inference(forsys.frames[0],\n step=\"file_name_to_write\",\n folder=\"path/to/save/folder\",\n pressure=True,\n normalized=\"max\",\n mirror_y=True,\n colorbar=True)\n```\nBy default, the membrane tension is always plotted, the pressure=True parameter plots the inferred pressures as the color \nfilling the cells. \n\n\n### How to cite us\nOur tool's manuscriptt is available at [bioRxiv](https://www.biorxiv.org/content/10.1101/2024.05.28.595800v1)\nTo cite the tool, you can use:\n\n**ForSys: non-invasive stress inference from time-lapse microscopy**\nAugusto Borges, Jer\u00f3nimo R. Miranda-Rodr\u00edguez, Alberto Sebasti\u00e1n Ceccarelli, Guilherme Ventura, Jakub Sedzinski, Hern\u00e1n L\u00f3pez-Schier, Osvaldo Chara\nbioRxiv 2024.05.28.595800; doi: https://doi.org/10.1101/2024.05.28.595800\n",
"bugtrack_url": null,
"license": null,
"summary": "A tissue stress and cell pressure inference package with dynamical information",
"version": "1.0.1",
"project_urls": {
"Homepage": "https://github.com/borgesaugusto/forsys/"
},
"split_keywords": [
"systems biology",
" stress",
" pressure",
" inference"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "0105db2863541cf4b7d8d6113039b06ed81e106e763929ee2bab1b07451b9a58",
"md5": "98c611ad4e83280295d9023e7f4e6bd7",
"sha256": "d29d4cdb4cc9e8d4cab37d68623dd0dd58c3021d9077a2885d40b02975a79e5d"
},
"downloads": -1,
"filename": "forsys-1.0.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "98c611ad4e83280295d9023e7f4e6bd7",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 57713,
"upload_time": "2024-06-26T05:06:45",
"upload_time_iso_8601": "2024-06-26T05:06:45.235794Z",
"url": "https://files.pythonhosted.org/packages/01/05/db2863541cf4b7d8d6113039b06ed81e106e763929ee2bab1b07451b9a58/forsys-1.0.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "f249a132dede410ae4b80ea4d5be2bb4b3d9a75d4b3143891d242b276d3f92fb",
"md5": "7b8da52748581ec159aacc89430a2c37",
"sha256": "d158a7981354ab6bb50132531427c600dffda0a1ed2e97d6ee66dc10fa89975e"
},
"downloads": -1,
"filename": "forsys-1.0.1.tar.gz",
"has_sig": false,
"md5_digest": "7b8da52748581ec159aacc89430a2c37",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 56622,
"upload_time": "2024-06-26T05:06:47",
"upload_time_iso_8601": "2024-06-26T05:06:47.158196Z",
"url": "https://files.pythonhosted.org/packages/f2/49/a132dede410ae4b80ea4d5be2bb4b3d9a75d4b3143891d242b276d3f92fb/forsys-1.0.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-06-26 05:06:47",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "borgesaugusto",
"github_project": "forsys",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "forsys"
}