in-silico-cancer-cell 0.1.0__tar.gz → 0.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/.github/workflows/main.yml +12 -1
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/Cargo.lock +2 -2
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/Cargo.toml +1 -1
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/PKG-INFO +3 -1
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/README.md +2 -0
- in_silico_cancer_cell-0.2.0/figures/results/data-vs-simulation.pdf +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/main.py +4 -1
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/poetry.lock +43 -1
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/pyproject.toml +2 -1
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/python/in_silico_cancer_cell/_in_rusty_silico.pyi +2 -2
- in_silico_cancer_cell-0.2.0/python/in_silico_cancer_cell/plot.py +53 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/src/cell.rs +19 -27
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/src/channels/base.rs +5 -1
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/src/channels/clc2.rs +1 -1
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/src/channels/crac1.rs +1 -1
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/src/channels/kca11.rs +3 -2
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/src/channels/kca31.rs +2 -1
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/src/channels/kv13.rs +1 -1
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/src/channels/kv31.rs +1 -1
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/src/channels/kv34.rs +1 -1
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/src/channels/kv71.rs +1 -1
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/src/channels/task1.rs +1 -1
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/src/channels/trpc6.rs +1 -1
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/src/channels/trpv3.rs +3 -3
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/src/constants.rs +5 -3
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/src/main.rs +1 -1
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/src/optimisation.rs +3 -4
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/src/patchclampdata.rs +6 -2
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/src/utils.rs +4 -1
- in_silico_cancer_cell-0.1.0/python/in_silico_cancer_cell/plot.py +0 -20
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/.editorconfig +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/.github/workflows/maturin.yml +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/.gitignore +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/.pre-commit-config.yaml +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/.rustfmt.toml +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/.vscode/extensions.json +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/.vscode/launch.json +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/astro.config.mjs +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/data/experimental/mG0_1.mat +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/data/experimental/mG0_10.mat +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/data/experimental/mG0_11.mat +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/data/experimental/mG0_2.mat +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/data/experimental/mG0_3.mat +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/data/experimental/mG0_4.mat +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/data/experimental/mG0_5.mat +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/data/experimental/mG0_6.mat +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/data/experimental/mG0_7.mat +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/data/experimental/mG0_8.mat +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/data/experimental/mG0_9.mat +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/data/experimental/mG1_1.mat +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/data/experimental/mG1_2.mat +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/data/experimental/mG1_3.mat +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/data/experimental/mG1_4.mat +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/data/experimental/mG1_5.mat +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/data/experimental/patch_clamp_data.mat +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/data/experimental/time_vector_measure.mat +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/data/provision/patch_clamp_data_activation.mat +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/data/provision/patch_clamp_data_deactivation.mat +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/data/provision/patch_clamp_data_ramp.mat +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/literature/1998-potassium-channel.pdf +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/literature/2021-A549-model.pdf +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/literature/sources.bib +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/matlab/A549 in-silico main.m +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/matlab/CLC_2.m +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/matlab/CRAC1.m +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/matlab/KCa_1_1.m +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/matlab/KCa_3_1.m +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/matlab/Kv_1_3.m +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/matlab/Kv_3_1.m +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/matlab/Kv_3_4.m +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/matlab/Kv_7_1.m +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/matlab/P_CRAC1.m +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/matlab/TASK1.m +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/matlab/TRPV_3.m +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/matlab/load_patch_clamp_data.m +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/matlab/model_evaluation.m +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/matlab/optimization.m +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/matlab/simulate_pulse_protocol.m +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/matlab/simulate_pulse_protocol_TRPC.m +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/matlab/simulate_pulse_protocol_TRPV.m +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/package.json +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/public/favicon.svg +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/python/in_silico_cancer_cell/__init__.py +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/python/in_silico_cancer_cell/py.typed +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/python/tests/test_all.py +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/report/.gitignore +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/report/graphics/sample-figure1.png +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/report/logos/Open_Access.eps +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/report/logos/Open_Access.pdf +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/report/logos/by.eps +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/report/logos/by.pdf +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/report/logos/dg-degruyter.eps +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/report/logos/dg-degruyter.pdf +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/report/report.pdf +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/report/report.tex +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/rust-toolchain.toml +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/src/channels/mod.rs +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/src/lib.rs +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/src/pulseprotocol.rs +0 -0
- {in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/yarn.lock +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
name: Build Main and
|
|
1
|
+
name: Build Main, Frontend and Deploy
|
|
2
2
|
on:
|
|
3
3
|
push:
|
|
4
4
|
env:
|
|
@@ -28,3 +28,14 @@ jobs:
|
|
|
28
28
|
- run: yarn run wasm-pack build frontend --release
|
|
29
29
|
- run: cargo run --release --target=${{ matrix.target }} save-patch-clamp-data 225
|
|
30
30
|
- run: yarn run build
|
|
31
|
+
|
|
32
|
+
# deploy
|
|
33
|
+
- uses: jsmrcaga/action-netlify-deploy@master
|
|
34
|
+
with:
|
|
35
|
+
NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }}
|
|
36
|
+
NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }}
|
|
37
|
+
NETLIFY_DEPLOY_MESSAGE: "Production deploy v${{ github.ref }}"
|
|
38
|
+
NETLIFY_DEPLOY_TO_PROD: true
|
|
39
|
+
install_command: "echo Skipping..."
|
|
40
|
+
build_command: "echo Skipping..."
|
|
41
|
+
build_directory: dist/
|
|
@@ -302,7 +302,7 @@ dependencies = [
|
|
|
302
302
|
|
|
303
303
|
[[package]]
|
|
304
304
|
name = "frontend"
|
|
305
|
-
version = "0.
|
|
305
|
+
version = "0.2.0"
|
|
306
306
|
dependencies = [
|
|
307
307
|
"console_error_panic_hook",
|
|
308
308
|
"futures",
|
|
@@ -443,7 +443,7 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
|
|
|
443
443
|
|
|
444
444
|
[[package]]
|
|
445
445
|
name = "in_silico_cancer_cell"
|
|
446
|
-
version = "0.
|
|
446
|
+
version = "0.2.0"
|
|
447
447
|
dependencies = [
|
|
448
448
|
"argmin",
|
|
449
449
|
"argmin-math",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: in_silico_cancer_cell
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.0
|
|
4
4
|
Classifier: Programming Language :: Rust
|
|
5
5
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
6
6
|
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
@@ -9,6 +9,8 @@ Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
|
|
|
9
9
|
|
|
10
10
|
# Electrophysiological Cancer Cell Model
|
|
11
11
|
|
|
12
|
+

|
|
13
|
+
|
|
12
14
|
Attempt to model an A549 cancer cell's ion channels using an HMM (Hidden Markov Model) and simulation of voltage + current development accross the membrane of the cell.
|
|
13
15
|
|
|
14
16
|
This software comes in three flavours:
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# Electrophysiological Cancer Cell Model
|
|
2
2
|
|
|
3
|
+

|
|
4
|
+
|
|
3
5
|
Attempt to model an A549 cancer cell's ion channels using an HMM (Hidden Markov Model) and simulation of voltage + current development accross the membrane of the cell.
|
|
4
6
|
|
|
5
7
|
This software comes in three flavours:
|
|
Binary file
|
|
@@ -1,10 +1,13 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
1
2
|
import pathlib
|
|
2
3
|
|
|
3
4
|
import in_silico_cancer_cell.plot as insilico_plot
|
|
5
|
+
import matplotlib.pyplot as plt
|
|
4
6
|
|
|
5
7
|
RESULTS = pathlib.Path(__file__).resolve().parent / "figures" / "results"
|
|
6
8
|
|
|
7
9
|
|
|
8
10
|
if __name__ == "__main__":
|
|
9
11
|
insilico_plot.set_results_folder(RESULTS)
|
|
10
|
-
insilico_plot.
|
|
12
|
+
insilico_plot.plot_full_comparison()
|
|
13
|
+
plt.show()
|
|
@@ -744,6 +744,48 @@ files = [
|
|
|
744
744
|
[package.dependencies]
|
|
745
745
|
six = ">=1.5"
|
|
746
746
|
|
|
747
|
+
[[package]]
|
|
748
|
+
name = "scipy"
|
|
749
|
+
version = "1.13.1"
|
|
750
|
+
description = "Fundamental algorithms for scientific computing in Python"
|
|
751
|
+
optional = false
|
|
752
|
+
python-versions = ">=3.9"
|
|
753
|
+
files = [
|
|
754
|
+
{file = "scipy-1.13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:20335853b85e9a49ff7572ab453794298bcf0354d8068c5f6775a0eabf350aca"},
|
|
755
|
+
{file = "scipy-1.13.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d605e9c23906d1994f55ace80e0125c587f96c020037ea6aa98d01b4bd2e222f"},
|
|
756
|
+
{file = "scipy-1.13.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfa31f1def5c819b19ecc3a8b52d28ffdcc7ed52bb20c9a7589669dd3c250989"},
|
|
757
|
+
{file = "scipy-1.13.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26264b282b9da0952a024ae34710c2aff7d27480ee91a2e82b7b7073c24722f"},
|
|
758
|
+
{file = "scipy-1.13.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:eccfa1906eacc02de42d70ef4aecea45415f5be17e72b61bafcfd329bdc52e94"},
|
|
759
|
+
{file = "scipy-1.13.1-cp310-cp310-win_amd64.whl", hash = "sha256:2831f0dc9c5ea9edd6e51e6e769b655f08ec6db6e2e10f86ef39bd32eb11da54"},
|
|
760
|
+
{file = "scipy-1.13.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:27e52b09c0d3a1d5b63e1105f24177e544a222b43611aaf5bc44d4a0979e32f9"},
|
|
761
|
+
{file = "scipy-1.13.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:54f430b00f0133e2224c3ba42b805bfd0086fe488835effa33fa291561932326"},
|
|
762
|
+
{file = "scipy-1.13.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e89369d27f9e7b0884ae559a3a956e77c02114cc60a6058b4e5011572eea9299"},
|
|
763
|
+
{file = "scipy-1.13.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a78b4b3345f1b6f68a763c6e25c0c9a23a9fd0f39f5f3d200efe8feda560a5fa"},
|
|
764
|
+
{file = "scipy-1.13.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:45484bee6d65633752c490404513b9ef02475b4284c4cfab0ef946def50b3f59"},
|
|
765
|
+
{file = "scipy-1.13.1-cp311-cp311-win_amd64.whl", hash = "sha256:5713f62f781eebd8d597eb3f88b8bf9274e79eeabf63afb4a737abc6c84ad37b"},
|
|
766
|
+
{file = "scipy-1.13.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5d72782f39716b2b3509cd7c33cdc08c96f2f4d2b06d51e52fb45a19ca0c86a1"},
|
|
767
|
+
{file = "scipy-1.13.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:017367484ce5498445aade74b1d5ab377acdc65e27095155e448c88497755a5d"},
|
|
768
|
+
{file = "scipy-1.13.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:949ae67db5fa78a86e8fa644b9a6b07252f449dcf74247108c50e1d20d2b4627"},
|
|
769
|
+
{file = "scipy-1.13.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de3ade0e53bc1f21358aa74ff4830235d716211d7d077e340c7349bc3542e884"},
|
|
770
|
+
{file = "scipy-1.13.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2ac65fb503dad64218c228e2dc2d0a0193f7904747db43014645ae139c8fad16"},
|
|
771
|
+
{file = "scipy-1.13.1-cp312-cp312-win_amd64.whl", hash = "sha256:cdd7dacfb95fea358916410ec61bbc20440f7860333aee6d882bb8046264e949"},
|
|
772
|
+
{file = "scipy-1.13.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:436bbb42a94a8aeef855d755ce5a465479c721e9d684de76bf61a62e7c2b81d5"},
|
|
773
|
+
{file = "scipy-1.13.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:8335549ebbca860c52bf3d02f80784e91a004b71b059e3eea9678ba994796a24"},
|
|
774
|
+
{file = "scipy-1.13.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d533654b7d221a6a97304ab63c41c96473ff04459e404b83275b60aa8f4b7004"},
|
|
775
|
+
{file = "scipy-1.13.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637e98dcf185ba7f8e663e122ebf908c4702420477ae52a04f9908707456ba4d"},
|
|
776
|
+
{file = "scipy-1.13.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a014c2b3697bde71724244f63de2476925596c24285c7a637364761f8710891c"},
|
|
777
|
+
{file = "scipy-1.13.1-cp39-cp39-win_amd64.whl", hash = "sha256:392e4ec766654852c25ebad4f64e4e584cf19820b980bc04960bca0b0cd6eaa2"},
|
|
778
|
+
{file = "scipy-1.13.1.tar.gz", hash = "sha256:095a87a0312b08dfd6a6155cbbd310a8c51800fc931b8c0b84003014b874ed3c"},
|
|
779
|
+
]
|
|
780
|
+
|
|
781
|
+
[package.dependencies]
|
|
782
|
+
numpy = ">=1.22.4,<2.3"
|
|
783
|
+
|
|
784
|
+
[package.extras]
|
|
785
|
+
dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"]
|
|
786
|
+
doc = ["jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.12.0)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0)", "sphinx-design (>=0.4.0)"]
|
|
787
|
+
test = ["array-api-strict", "asv", "gmpy2", "hypothesis (>=6.30)", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"]
|
|
788
|
+
|
|
747
789
|
[[package]]
|
|
748
790
|
name = "six"
|
|
749
791
|
version = "1.16.0"
|
|
@@ -825,4 +867,4 @@ files = [
|
|
|
825
867
|
[metadata]
|
|
826
868
|
lock-version = "2.0"
|
|
827
869
|
python-versions = "^3.10"
|
|
828
|
-
content-hash = "
|
|
870
|
+
content-hash = "9fe98bea4425784508fb9457af032039a3b0c241311d7a20dc44b4cb06014293"
|
|
@@ -19,7 +19,7 @@ features = ["pyo3/extension-module"]
|
|
|
19
19
|
|
|
20
20
|
[tool.poetry]
|
|
21
21
|
name = "in_silico_cancer_cell"
|
|
22
|
-
version = "0.
|
|
22
|
+
version = "0.2.0"
|
|
23
23
|
description = "Electrophysiological model of an A549 cancer cell"
|
|
24
24
|
authors = ["MrP01 <peter@waldert.at>"]
|
|
25
25
|
license = "MIT"
|
|
@@ -33,6 +33,7 @@ numpy = "^1.26.4"
|
|
|
33
33
|
[tool.poetry.group.dev.dependencies]
|
|
34
34
|
ipython = "^8.23.0"
|
|
35
35
|
pytest = "^8.1.1"
|
|
36
|
+
scipy = "^1.13.1"
|
|
36
37
|
|
|
37
38
|
[tool.ruff]
|
|
38
39
|
line-length = 120
|
|
@@ -21,10 +21,8 @@ class ChannelCountsProblem:
|
|
|
21
21
|
@staticmethod
|
|
22
22
|
def new(data: PatchClampData) -> ChannelCountsProblem:
|
|
23
23
|
pass
|
|
24
|
-
|
|
25
24
|
def precompute_single_channel_currents(self):
|
|
26
25
|
pass
|
|
27
|
-
|
|
28
26
|
def get_current_basis(self) -> list[list[float]]:
|
|
29
27
|
pass
|
|
30
28
|
|
|
@@ -38,6 +36,8 @@ class PatchClampData:
|
|
|
38
36
|
@staticmethod
|
|
39
37
|
def pyload(protocol: PatchClampProtocol, phase: CellPhase) -> PatchClampData:
|
|
40
38
|
pass
|
|
39
|
+
def to_list(self) -> list[float]:
|
|
40
|
+
pass
|
|
41
41
|
|
|
42
42
|
def find_best_fit_for(data: PatchClampData, using: InSilicoMethod) -> list[float]:
|
|
43
43
|
pass
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import pathlib
|
|
2
|
+
|
|
3
|
+
import matplotlib.axes
|
|
4
|
+
import matplotlib.pyplot as plt
|
|
5
|
+
import numpy as np
|
|
6
|
+
import scipy.optimize
|
|
7
|
+
|
|
8
|
+
from in_silico_cancer_cell import CellPhase, ChannelCountsProblem, PatchClampData, PatchClampProtocol, setup_logging
|
|
9
|
+
|
|
10
|
+
RESULTS = pathlib.Path.cwd()
|
|
11
|
+
setup_logging()
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def plot_measurement():
|
|
15
|
+
fig = plt.figure()
|
|
16
|
+
axes: matplotlib.axes.Axes = fig.add_subplot(1, 1, 1)
|
|
17
|
+
axes.plot()
|
|
18
|
+
axes.set_xlabel("")
|
|
19
|
+
axes.set_ylabel("")
|
|
20
|
+
axes.legend()
|
|
21
|
+
fig.savefig(str(RESULTS / "plot.pdf"))
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def plot_full_comparison(method="langthaler"):
|
|
25
|
+
measurements = PatchClampData.pyload(PatchClampProtocol.Activation, CellPhase.G0)
|
|
26
|
+
data = np.array(measurements.to_list()) + 22
|
|
27
|
+
problem = ChannelCountsProblem.new(measurements)
|
|
28
|
+
problem.precompute_single_channel_currents()
|
|
29
|
+
single_channels = np.array(problem.get_current_basis())
|
|
30
|
+
# single_channels = np.array(problem.get_current_basis())[:, (3,)]
|
|
31
|
+
# single_channels = np.concatenate([single_channels, np.ones((single_channels.shape[0], 1))], axis=1)
|
|
32
|
+
if method == "lstsq":
|
|
33
|
+
channel_counts, res, rank, s = np.linalg.lstsq(single_channels[: len(data), :], data, rcond=None)
|
|
34
|
+
elif method == "nnls":
|
|
35
|
+
channel_counts, rnorm = scipy.optimize.nnls(single_channels[: len(data), :], data)
|
|
36
|
+
elif method == "langthaler":
|
|
37
|
+
channel_counts = np.array([22, 78, 5, 1350, 40, 77, 19, 200, 17, 12, 13])
|
|
38
|
+
channel_counts = channel_counts.astype(int)
|
|
39
|
+
time = np.linspace(0, 9.901, single_channels.shape[0])
|
|
40
|
+
print(f"Best fit: {channel_counts}")
|
|
41
|
+
|
|
42
|
+
fig = plt.figure()
|
|
43
|
+
axes: matplotlib.axes.Axes = fig.add_subplot(1, 1, 1)
|
|
44
|
+
axes.plot(time[: len(data)], data)
|
|
45
|
+
axes.plot(time, (single_channels * channel_counts).sum(axis=1))
|
|
46
|
+
axes.set_xlabel("Time $t$ / s")
|
|
47
|
+
axes.set_ylabel("Current $I$ / nA")
|
|
48
|
+
fig.savefig(str(RESULTS / "data-vs-simulation.pdf"))
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def set_results_folder(path: pathlib.Path):
|
|
52
|
+
global RESULTS
|
|
53
|
+
RESULTS = path
|
|
@@ -43,48 +43,48 @@ pub type ChannelCounts = [u32; N_CHANNEL_TYPES];
|
|
|
43
43
|
|
|
44
44
|
#[cfg_attr(feature = "pyo3", pyo3::pyclass)]
|
|
45
45
|
pub struct A549CancerCell {
|
|
46
|
-
crac1_channel: channels::crac1::CRAC1IonChannelCat,
|
|
47
|
-
trpc6_channel: channels::trpc6::TRPC6IonChannelCat,
|
|
48
|
-
trpv3_channel: channels::trpv3::TRPV3IonChannelCat,
|
|
49
46
|
kv13_channel: channels::kv13::KV13IonChannelCat,
|
|
50
47
|
kv31_channel: channels::kv31::KV31IonChannelCat,
|
|
51
48
|
kv34_channel: channels::kv34::KV34IonChannelCat,
|
|
52
49
|
kv71_channel: channels::kv71::KV71IonChannelCat,
|
|
53
50
|
kca11_channel: channels::kca11::KCa11IonChannelCat,
|
|
54
51
|
kca31_channel: channels::kca31::KCa31IonChannelCat,
|
|
55
|
-
clc2_channel: channels::clc2::CLC2IonChannelCat,
|
|
56
52
|
task1_channel: channels::task1::Task1IonChannelCat,
|
|
53
|
+
crac1_channel: channels::crac1::CRAC1IonChannelCat,
|
|
54
|
+
trpc6_channel: channels::trpc6::TRPC6IonChannelCat,
|
|
55
|
+
trpv3_channel: channels::trpv3::TRPV3IonChannelCat,
|
|
56
|
+
clc2_channel: channels::clc2::CLC2IonChannelCat,
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
impl A549CancerCell {
|
|
60
60
|
pub fn channels(&self) -> Vec<&dyn IsChannel> {
|
|
61
61
|
vec![
|
|
62
|
-
&self.crac1_channel,
|
|
63
|
-
&self.trpc6_channel,
|
|
64
|
-
&self.trpv3_channel,
|
|
65
62
|
&self.kv13_channel,
|
|
66
63
|
&self.kv31_channel,
|
|
67
64
|
&self.kv34_channel,
|
|
68
65
|
&self.kv71_channel,
|
|
69
66
|
&self.kca11_channel,
|
|
70
67
|
&self.kca31_channel,
|
|
71
|
-
&self.clc2_channel,
|
|
72
68
|
&self.task1_channel,
|
|
69
|
+
&self.crac1_channel,
|
|
70
|
+
&self.trpc6_channel,
|
|
71
|
+
&self.trpv3_channel,
|
|
72
|
+
&self.clc2_channel,
|
|
73
73
|
]
|
|
74
74
|
}
|
|
75
75
|
pub fn channels_mut(&mut self) -> Vec<&mut dyn IsChannel> {
|
|
76
76
|
vec![
|
|
77
|
-
&mut self.crac1_channel,
|
|
78
|
-
&mut self.trpc6_channel,
|
|
79
|
-
&mut self.trpv3_channel,
|
|
80
77
|
&mut self.kv13_channel,
|
|
81
78
|
&mut self.kv31_channel,
|
|
82
79
|
&mut self.kv34_channel,
|
|
83
80
|
&mut self.kv71_channel,
|
|
84
81
|
&mut self.kca11_channel,
|
|
85
82
|
&mut self.kca31_channel,
|
|
86
|
-
&mut self.clc2_channel,
|
|
87
83
|
&mut self.task1_channel,
|
|
84
|
+
&mut self.crac1_channel,
|
|
85
|
+
&mut self.trpc6_channel,
|
|
86
|
+
&mut self.trpv3_channel,
|
|
87
|
+
&mut self.clc2_channel,
|
|
88
88
|
]
|
|
89
89
|
}
|
|
90
90
|
|
|
@@ -190,32 +190,24 @@ impl A549CancerCell {
|
|
|
190
190
|
#[cfg_attr(feature = "pyo3", staticmethod)]
|
|
191
191
|
pub fn new() -> A549CancerCell {
|
|
192
192
|
A549CancerCell {
|
|
193
|
-
crac1_channel: channels::crac1::CRAC1IonChannelCat::new(),
|
|
194
|
-
trpc6_channel: channels::trpc6::TRPC6IonChannelCat::new(),
|
|
195
|
-
trpv3_channel: channels::trpv3::TRPV3IonChannelCat::new(),
|
|
196
193
|
kv13_channel: channels::kv13::KV13IonChannelCat::new(),
|
|
197
194
|
kv31_channel: channels::kv31::KV31IonChannelCat::new(),
|
|
198
195
|
kv34_channel: channels::kv34::KV34IonChannelCat::new(),
|
|
199
196
|
kv71_channel: channels::kv71::KV71IonChannelCat::new(),
|
|
200
197
|
kca11_channel: channels::kca11::KCa11IonChannelCat::new(),
|
|
201
198
|
kca31_channel: channels::kca31::KCa31IonChannelCat::new(),
|
|
202
|
-
clc2_channel: channels::clc2::CLC2IonChannelCat::new(),
|
|
203
199
|
task1_channel: channels::task1::Task1IonChannelCat::new(),
|
|
200
|
+
crac1_channel: channels::crac1::CRAC1IonChannelCat::new(),
|
|
201
|
+
trpc6_channel: channels::trpc6::TRPC6IonChannelCat::new(),
|
|
202
|
+
trpv3_channel: channels::trpv3::TRPV3IonChannelCat::new(),
|
|
203
|
+
clc2_channel: channels::clc2::CLC2IonChannelCat::new(),
|
|
204
204
|
}
|
|
205
205
|
}
|
|
206
206
|
|
|
207
207
|
pub fn set_channel_counts(&mut self, counts: ChannelCounts) {
|
|
208
|
-
self.
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
self.kv71_channel.n_channels = counts[3];
|
|
212
|
-
self.kca11_channel.n_channels = counts[4];
|
|
213
|
-
self.kca31_channel.n_channels = counts[5];
|
|
214
|
-
self.task1_channel.n_channels = counts[6];
|
|
215
|
-
self.crac1_channel.n_channels = counts[7];
|
|
216
|
-
self.trpc6_channel.n_channels = counts[8];
|
|
217
|
-
self.trpv3_channel.n_channels = counts[9];
|
|
218
|
-
self.clc2_channel.n_channels = counts[10];
|
|
208
|
+
for (channel, count) in self.channels_mut().iter_mut().zip(counts) {
|
|
209
|
+
channel.set_n_channels(count);
|
|
210
|
+
}
|
|
219
211
|
}
|
|
220
212
|
|
|
221
213
|
pub fn set_langthaler_et_al_channel_counts(&mut self, phase: CellPhase) {
|
|
@@ -21,6 +21,7 @@ pub trait IsChannel {
|
|
|
21
21
|
fn display_name(&self) -> String;
|
|
22
22
|
fn display_me(&self) -> String;
|
|
23
23
|
fn metadata(&self) -> ChannelMetadata;
|
|
24
|
+
fn set_n_channels(&mut self, n_channels: u32);
|
|
24
25
|
}
|
|
25
26
|
|
|
26
27
|
#[macro_export]
|
|
@@ -71,10 +72,13 @@ macro_rules! define_ion_channel {
|
|
|
71
72
|
fn reset_state(&mut self) {
|
|
72
73
|
self.state = Self::initial_state();
|
|
73
74
|
}
|
|
75
|
+
fn set_n_channels(&mut self, n_channels: u32) {
|
|
76
|
+
self.n_channels = n_channels;
|
|
77
|
+
}
|
|
74
78
|
fn single_channel_current(&self, voltage: f64) -> f64 {
|
|
75
79
|
let mut open = 0.0;
|
|
76
80
|
$(open += self.state[$states_responsible_for_current];)+
|
|
77
|
-
Self::conductance * open * (
|
|
81
|
+
Self::conductance * open * (voltage - $crate::constants::reversal_potential($iontype))
|
|
78
82
|
}
|
|
79
83
|
fn current(&self, voltage: f64) -> f64 {
|
|
80
84
|
(self.n_channels as f64) * self.single_channel_current(voltage)
|
|
@@ -6,12 +6,13 @@ use crate::{
|
|
|
6
6
|
|
|
7
7
|
pub type Matrix10<T> = nalgebra::Matrix<T, nalgebra::U10, nalgebra::U10, nalgebra::ArrayStorage<T, 10, 10>>;
|
|
8
8
|
|
|
9
|
+
// TODO: channel current does not match paper
|
|
9
10
|
define_ion_channel!(
|
|
10
11
|
KCa11IonChannelCat,
|
|
11
12
|
"KCa11",
|
|
12
13
|
10, // number of states
|
|
13
14
|
IonType::Kalium, // ion type
|
|
14
|
-
|
|
15
|
+
250.0, // conductance (pS)
|
|
15
16
|
(5, 6, 7, 8, 9) // states which count towards the current
|
|
16
17
|
);
|
|
17
18
|
|
|
@@ -67,7 +68,7 @@ impl HasTransitionMatrix<10> for KCa11IonChannelCat {
|
|
|
67
68
|
|
|
68
69
|
#[rustfmt::skip]
|
|
69
70
|
return Matrix10::from_row_slice(&[
|
|
70
|
-
1.0-4.0 * ca_i_dt - b, kc, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, a,
|
|
71
|
+
1.0 - 4.0 * ca_i_dt - b, kc, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, a,
|
|
71
72
|
4.0 * ca_i_dt, 1.0- kc -3.0 * ca_i_dt - d, 2.0 * kc, 0.0, 0.0, 0.0, 0.0, 0.0, c, 0.0,
|
|
72
73
|
0.0, 3.0 * ca_i_dt, 1.0-2.0 * kc -2.0 * ca_i_dt - f, 3.0 * kc, 0.0, 0.0, 0.0, e, 0.0, 0.0,
|
|
73
74
|
0.0, 0.0, 2.0 * ca_i_dt, 1.0-3.0 * kc - ca_i_dt - h, 4.0 * kc, 0.0, g, 0.0, 0.0, 0.0,
|
|
@@ -6,12 +6,13 @@ use crate::{
|
|
|
6
6
|
define_ion_channel,
|
|
7
7
|
};
|
|
8
8
|
|
|
9
|
+
// TODO: channel current does not match paper
|
|
9
10
|
define_ion_channel!(
|
|
10
11
|
KCa31IonChannelCat,
|
|
11
12
|
"KCa31",
|
|
12
13
|
4, // number of states
|
|
13
14
|
IonType::Kalium, // ion type
|
|
14
|
-
|
|
15
|
+
11.0, // conductance (pS)
|
|
15
16
|
(3) // states which count towards the current
|
|
16
17
|
);
|
|
17
18
|
|
|
@@ -6,10 +6,10 @@ use crate::{constants::IonType, define_ion_channel};
|
|
|
6
6
|
define_ion_channel!(
|
|
7
7
|
TRPV3IonChannelCat,
|
|
8
8
|
"TRPV3",
|
|
9
|
-
1,
|
|
9
|
+
1, // number of states
|
|
10
10
|
IonType::Calcium, // ion type
|
|
11
|
-
|
|
12
|
-
(0)
|
|
11
|
+
48.0, // conductance (pS)
|
|
12
|
+
(0) // states which count towards the current
|
|
13
13
|
);
|
|
14
14
|
|
|
15
15
|
impl HasTransitionMatrix<1> for TRPV3IonChannelCat {
|
|
@@ -3,14 +3,15 @@
|
|
|
3
3
|
pub const slowest_dt: f64 = 5e-7; // initial timestep
|
|
4
4
|
pub const delta_tolerance: f64 = 1e-6; // how much of a change in \Delta state the system is aiming for (squared)
|
|
5
5
|
pub const Ca_i: f64 = 0.0647e-6; // initial calcium concentration
|
|
6
|
-
pub const F: f64 = 96485.3329; // As/mol
|
|
7
|
-
pub const R: f64 = 8.3144598; // kgm^2/s^2molK
|
|
8
|
-
pub const T: f64 = 293.0; // K, TODO: 20°C good?
|
|
6
|
+
pub const F: f64 = 96485.3329; // Faraday-Constant [F] = As/mol
|
|
7
|
+
pub const R: f64 = 8.3144598; // Gas-Constant [R] = kgm^2/s^2molK
|
|
8
|
+
pub const T: f64 = 293.0; // Temperature [T] = K, TODO: 20°C good?
|
|
9
9
|
|
|
10
10
|
pub enum IonType {
|
|
11
11
|
Kalium,
|
|
12
12
|
Calcium,
|
|
13
13
|
Chlorine,
|
|
14
|
+
Sodium,
|
|
14
15
|
}
|
|
15
16
|
|
|
16
17
|
pub fn reversal_potential(ion: IonType) -> f64 {
|
|
@@ -18,5 +19,6 @@ pub fn reversal_potential(ion: IonType) -> f64 {
|
|
|
18
19
|
IonType::Kalium => -77.4e-3, // reversal potential K,
|
|
19
20
|
IonType::Calcium => 95.6e-3, // reversal potential Ca,
|
|
20
21
|
IonType::Chlorine => -7.9e-3, // reversal potential Cl,
|
|
22
|
+
IonType::Sodium => -5000.0, // TODO: reversal potential Na,
|
|
21
23
|
}
|
|
22
24
|
}
|
|
@@ -57,7 +57,7 @@ fn save_to_json(measurements: PatchClampData, subsampling: Option<usize>) {
|
|
|
57
57
|
#[command(
|
|
58
58
|
about = "In-Silico Cancer Cell Model Simulator",
|
|
59
59
|
author = "Peter Waldert <peter@waldert.at>",
|
|
60
|
-
version = "0.
|
|
60
|
+
version = "0.2.0"
|
|
61
61
|
)]
|
|
62
62
|
struct Cli {
|
|
63
63
|
/// Turn debugging information on
|
|
@@ -96,9 +96,8 @@ impl ChannelCountsProblem {
|
|
|
96
96
|
}
|
|
97
97
|
|
|
98
98
|
#[cfg(feature = "pyo3")]
|
|
99
|
-
fn get_current_basis(
|
|
100
|
-
|
|
101
|
-
let matrix = slf.current_basis.clone().unwrap();
|
|
99
|
+
fn get_current_basis(&self) -> Vec<Vec<f64>> {
|
|
100
|
+
let matrix = self.current_basis.clone().unwrap();
|
|
102
101
|
let mut list_of_lists = Vec::new();
|
|
103
102
|
for row in matrix.row_iter() {
|
|
104
103
|
let mut row_vector = Vec::new();
|
|
@@ -107,7 +106,7 @@ impl ChannelCountsProblem {
|
|
|
107
106
|
}
|
|
108
107
|
list_of_lists.push(row_vector);
|
|
109
108
|
}
|
|
110
|
-
list_of_lists
|
|
109
|
+
list_of_lists
|
|
111
110
|
}
|
|
112
111
|
|
|
113
112
|
fn solve_through_projection(&self) -> ChannelCounts {
|
|
@@ -84,9 +84,9 @@ impl PatchClampData {
|
|
|
84
84
|
current = Some(current.unwrap() / (raw_data.len() as f64));
|
|
85
85
|
match (&phase, &protocol) {
|
|
86
86
|
(CellPhase::G0, PatchClampProtocol::Activation) => {
|
|
87
|
-
let scaled = current.unwrap() *
|
|
87
|
+
let scaled = current.unwrap() * 1e12; // in pico-Ampere
|
|
88
88
|
current = Some(DVector::from_vec(
|
|
89
|
-
scaled.iter().cloned().map(|x| x.max(-
|
|
89
|
+
scaled.iter().cloned().map(|x| x.max(-240.0)).collect::<Vec<f64>>(),
|
|
90
90
|
));
|
|
91
91
|
}
|
|
92
92
|
_ => {}
|
|
@@ -114,6 +114,10 @@ impl PatchClampData {
|
|
|
114
114
|
}
|
|
115
115
|
}
|
|
116
116
|
|
|
117
|
+
pub fn to_list(&self) -> Vec<f64> {
|
|
118
|
+
self.current.iter().cloned().collect::<Vec<f64>>()
|
|
119
|
+
}
|
|
120
|
+
|
|
117
121
|
#[cfg_attr(feature = "pyo3", staticmethod)]
|
|
118
122
|
pub fn demo() -> PatchClampData {
|
|
119
123
|
let mut c = DVector::zeros(100);
|
|
@@ -17,10 +17,13 @@ fn get_log_level() -> log::LevelFilter {
|
|
|
17
17
|
#[cfg_attr(feature = "pyo3", pyo3::pyfunction)]
|
|
18
18
|
pub fn setup_logging() {
|
|
19
19
|
let log_level = get_log_level();
|
|
20
|
+
let mut config_builder = simplelog::ConfigBuilder::new();
|
|
21
|
+
#[cfg(target_arch = "wasm32")]
|
|
22
|
+
config_builder.set_time_level(simplelog::LevelFilter::Off);
|
|
20
23
|
simplelog::CombinedLogger::init(vec![
|
|
21
24
|
simplelog::TermLogger::new(
|
|
22
25
|
log_level,
|
|
23
|
-
|
|
26
|
+
config_builder.build(),
|
|
24
27
|
simplelog::TerminalMode::Mixed,
|
|
25
28
|
simplelog::ColorChoice::Auto,
|
|
26
29
|
),
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import matplotlib.axes
|
|
2
|
-
import matplotlib.pyplot as plt
|
|
3
|
-
import pathlib
|
|
4
|
-
|
|
5
|
-
RESULTS = pathlib.Path.cwd()
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
def plot_measurement():
|
|
9
|
-
fig = plt.figure()
|
|
10
|
-
axes: matplotlib.axes.Axes = fig.add_subplot(1, 1, 1)
|
|
11
|
-
axes.plot()
|
|
12
|
-
axes.set_xlabel("")
|
|
13
|
-
axes.set_ylabel("")
|
|
14
|
-
axes.legend()
|
|
15
|
-
fig.savefig(str(RESULTS / "plot.pdf"))
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
def set_results_folder(path: pathlib.Path):
|
|
19
|
-
global RESULTS
|
|
20
|
-
RESULTS = path
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/data/experimental/patch_clamp_data.mat
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/data/provision/patch_clamp_data_ramp.mat
RENAMED
|
File without changes
|
{in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/literature/1998-potassium-channel.pdf
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/matlab/simulate_pulse_protocol.m
RENAMED
|
File without changes
|
{in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/matlab/simulate_pulse_protocol_TRPC.m
RENAMED
|
File without changes
|
{in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/matlab/simulate_pulse_protocol_TRPV.m
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/python/in_silico_cancer_cell/__init__.py
RENAMED
|
File without changes
|
{in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/python/in_silico_cancer_cell/py.typed
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{in_silico_cancer_cell-0.1.0 → in_silico_cancer_cell-0.2.0}/report/graphics/sample-figure1.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|