Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Structural Identifiability Extension #709

Closed
wants to merge 81 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
81 commits
Select commit Hold shift + click to select a range
9d774bd
init
TorkelE Dec 27, 2023
2b2f099
Update docs/src/introduction_to_catalyst/catalyst_for_new_julia_users.md
TorkelE Dec 27, 2023
81b34d7
Update docs/src/introduction_to_catalyst/catalyst_for_new_julia_users.md
TorkelE Dec 27, 2023
2a5928c
up
TorkelE Dec 29, 2023
3d36751
update to `Symbolics = "5.14"` in Projec.toml
TorkelE Dec 29, 2023
b9387c6
up Symbolics in docs/Prokject.toml as well
TorkelE Dec 29, 2023
6d74f5f
Update Doc Project.toml
isaacsas Dec 29, 2023
3708455
update doc deps
isaacsas Dec 29, 2023
3b91168
doc project.toml update
TorkelE Dec 30, 2023
9048c6c
Change history from v13.5 to v13.6
TorkelE Jan 24, 2024
235ad85
Merge pull request #768 from SciML/doc_updates
TorkelE Jan 24, 2024
17998d8
init
TorkelE Nov 7, 2023
12359c7
add tests
TorkelE Nov 7, 2023
665a6e7
partial progress
TorkelE Nov 14, 2023
749916b
up
TorkelE Nov 14, 2023
ad76316
init
TorkelE Oct 31, 2023
6c466af
update
TorkelE Oct 31, 2023
3511c29
save progress
TorkelE Nov 1, 2023
1da978e
update
TorkelE Nov 1, 2023
29a6cbe
some updates
TorkelE Nov 6, 2023
44606d7
improve docs
TorkelE Nov 6, 2023
9157d3e
finish documentation
TorkelE Nov 7, 2023
10d647b
add tests and change docs
TorkelE Nov 8, 2023
ad44887
update
TorkelE Nov 8, 2023
d310175
add sasha's tests
TorkelE Nov 9, 2023
5376770
up
TorkelE Nov 9, 2023
9610c92
MTK itnernal remake, causes problems though
TorkelE Nov 9, 2023
2f2be40
up
TorkelE Nov 14, 2023
5fcdd06
update
TorkelE Nov 14, 2023
b612799
enable conserved quantitites handling
TorkelE Nov 15, 2023
cc0f3c8
exponent param variable doc update
TorkelE Nov 15, 2023
176ff3c
doc project update
TorkelE Nov 15, 2023
b0db36f
remove logging
TorkelE Nov 15, 2023
964fcc1
history file update
TorkelE Nov 15, 2023
03310a9
rebase update
TorkelE Dec 4, 2023
2828662
up
TorkelE Dec 4, 2023
29a7795
rebase fix
TorkelE Dec 4, 2023
aa86f88
test up
TorkelE Dec 4, 2023
7a46960
up
TorkelE Dec 4, 2023
23ad15d
compat up
TorkelE Dec 5, 2023
d77af34
Update HISTORY.md
TorkelE Dec 5, 2023
71295b4
Update HISTORY.md
TorkelE Dec 5, 2023
1ce79c7
Update ext/CatalystStructuralIdentifiabilityExtension/structural_iden…
TorkelE Dec 5, 2023
2db2e24
Update ext/CatalystStructuralIdentifiabilityExtension/structural_iden…
TorkelE Dec 5, 2023
37d594e
Update ext/CatalystStructuralIdentifiabilityExtension/structural_iden…
TorkelE Dec 5, 2023
e1a5811
Update test/extensions/structural_identifiability.jl
TorkelE Dec 5, 2023
2222f90
Auto stash before merge of "structuralidentifiabilityextension" and "…
TorkelE Dec 5, 2023
b92002c
up
TorkelE Dec 5, 2023
81ec37c
up
TorkelE Dec 5, 2023
fcd91dc
Update docs/src/inverse_problems/structural_identifiability.md
TorkelE Dec 6, 2023
74983af
Update docs/src/inverse_problems/structural_identifiability.md
TorkelE Dec 6, 2023
93fce3c
Update docs/src/inverse_problems/structural_identifiability.md
TorkelE Dec 6, 2023
43952d1
Update docs/src/inverse_problems/structural_identifiability.md
TorkelE Dec 6, 2023
32f82b4
Update docs/src/inverse_problems/structural_identifiability.md
TorkelE Dec 6, 2023
ba59056
Update docs/src/inverse_problems/structural_identifiability.md
TorkelE Dec 6, 2023
b1a02b9
Update docs/src/inverse_problems/structural_identifiability.md
TorkelE Dec 6, 2023
0504f9c
Update docs/src/inverse_problems/structural_identifiability.md
TorkelE Dec 6, 2023
be76763
up
TorkelE Dec 6, 2023
f766ee9
up
TorkelE Dec 6, 2023
42a11c5
Update ext/CatalystStructuralIdentifiabilityExtension/structural_iden…
TorkelE Dec 30, 2023
4c08e8a
Update ext/CatalystStructuralIdentifiabilityExtension/structural_iden…
TorkelE Dec 30, 2023
20c2fd8
Update ext/CatalystStructuralIdentifiabilityExtension/structural_iden…
TorkelE Dec 30, 2023
9b5b19c
Update docs/src/inverse_problems/structural_identifiability.md
TorkelE Dec 30, 2023
b0f012b
Update docs/src/inverse_problems/structural_identifiability.md
TorkelE Dec 30, 2023
6575136
Update docs/src/inverse_problems/structural_identifiability.md
TorkelE Dec 30, 2023
7cc24b4
Update docs/src/inverse_problems/structural_identifiability.md
TorkelE Dec 30, 2023
bafc451
Update docs/src/inverse_problems/structural_identifiability.md
TorkelE Dec 30, 2023
c32484b
Update ext/CatalystStructuralIdentifiabilityExtension/structural_iden…
TorkelE Dec 30, 2023
120177c
Update ext/CatalystStructuralIdentifiabilityExtension/structural_iden…
TorkelE Dec 30, 2023
35c1bb1
Update docs/src/inverse_problems/structural_identifiability.md
TorkelE Dec 30, 2023
97590de
Update docs/src/inverse_problems/structural_identifiability.md
TorkelE Dec 30, 2023
521673a
Update docs/src/inverse_problems/structural_identifiability.md
TorkelE Dec 30, 2023
d3d0282
Update docs/src/inverse_problems/structural_identifiability.md
TorkelE Dec 30, 2023
aa2fc77
Update docs/src/inverse_problems/structural_identifiability.md
TorkelE Dec 30, 2023
8619447
Update docs/src/inverse_problems/structural_identifiability.md
TorkelE Dec 30, 2023
bef5302
Update docs/src/inverse_problems/structural_identifiability.md
TorkelE Dec 30, 2023
a792559
Update docs/src/inverse_problems/structural_identifiability.md
TorkelE Dec 30, 2023
283b0cd
up
TorkelE Dec 30, 2023
22a8ae4
test update
TorkelE Dec 30, 2023
165fb8c
use prob_thres
TorkelE Dec 30, 2023
90ab89e
test up
TorkelE Dec 30, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 15 additions & 1 deletion HISTORY.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,21 @@
# Breaking updates and feature summaries across releases

## Catalyst unreleased (master branch)

## Catalyst 14.0
- Added CatalystStructuralIdentifiabilityExtension, which permits StructuralIdentifiability.jl function to be applied directly to Catalyst systems. E.g. use
TorkelE marked this conversation as resolved.
Show resolved Hide resolved
```julia
using Catalyst, StructuralIdentifiability
goodwind_oscillator = @reaction_network begin
(mmr(P,pₘ,1), dₘ), 0 <--> M
(pₑ*M,dₑ), 0 <--> E
(pₚ*E,dₚ), 0 <--> P
end
assess_identifiability(goodwind_oscillator; measured_quantities=[:M])
TorkelE marked this conversation as resolved.
Show resolved Hide resolved
```
to assess (global) structural identifiability for all parameters and variables of the `goodwind_oscillator` model (under the presumption that we can measure `M` only).
- Automatically handles conservation laws for structural identifiability problems (eliminates these internally to speed up computations).
- Adds a tutorial to illustrate the use of the extension.
- Simulation of spatial ODEs now supported. For full details, please see https://github.com/SciML/Catalyst.jl/pull/644 and upcoming documentation. Note that these methods are currently considered alpha, with the interface and approach changing even in non-breaking Catalyst releases.
- LatticeReactionSystem structure represents a spatial reaction network:
```julia
Expand Down Expand Up @@ -35,7 +50,6 @@ wilhelm_2009_model = @reaction_network begin
k5, 0 --> X
end


using BifurcationKit
bif_par = :k1
u_guess = [:X => 5.0, :Y => 2.0]
Expand Down
8 changes: 6 additions & 2 deletions Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,12 @@ Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d"
[weakdeps]
BifurcationKit = "0f109fa4-8a5d-4b75-95aa-f515264e7665"
HomotopyContinuation = "f213a82b-91d6-5c5d-acf7-10f1c761b327"
StructuralIdentifiability = "220ca800-aa68-49bb-acd8-6037fa93a544"

[extensions]
CatalystBifurcationKitExtension = "BifurcationKit"
CatalystHomotopyContinuationExtension = "HomotopyContinuation"
CatalystStructuralIdentifiabilityExtension = "StructuralIdentifiability"

[compat]
BifurcationKit = "0.3"
Expand All @@ -48,8 +50,9 @@ Reexport = "0.2, 1.0"
Requires = "1.0"
RuntimeGeneratedFunctions = "0.5.12"
Setfield = "1"
StructuralIdentifiability = "0.5.1"
SymbolicUtils = "1.0.3"
Symbolics = "5.0.3"
Symbolics = "5.14"
Unitful = "1.12.4"
julia = "1.9"

Expand All @@ -69,8 +72,9 @@ StableRNGs = "860ef19b-820b-49d6-a774-d7a799459cd3"
Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
SteadyStateDiffEq = "9672c7b4-1e72-59bd-8a11-6ac3964bc41f"
StochasticDiffEq = "789caeaf-c7a9-5a7d-9973-96adeb23e2a0"
StructuralIdentifiability = "220ca800-aa68-49bb-acd8-6037fa93a544"
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d"

[targets]
test = ["BifurcationKit", "DomainSets", "Graphviz_jll", "HomotopyContinuation", "NonlinearSolve", "OrdinaryDiffEq", "Random", "SafeTestsets", "SciMLBase", "SciMLNLSolve", "StableRNGs", "Statistics", "SteadyStateDiffEq", "StochasticDiffEq", "Test", "Unitful"]
test = ["BifurcationKit", "DomainSets", "Graphviz_jll", "HomotopyContinuation", "NonlinearSolve", "OrdinaryDiffEq", "Random", "SafeTestsets", "SciMLBase", "SciMLNLSolve", "StableRNGs", "Statistics", "SteadyStateDiffEq", "StochasticDiffEq", "StructuralIdentifiability", "Test", "Unitful"]
9 changes: 5 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,7 @@ etc).

## Breaking changes and new features

**NOTE:** version 13 is a breaking release, with changes to simplify the DSL
notation while also adding more features, changes to how chemical species are
specified symbolically when directly building `ReactionSystem`s, and changes that
simplify how to include ODE or algebraic constraint equation.
**NOTE:** version 14 is a breaking release, prompted by the release of ModelingToolkit.jl version 9. This caused several breaking changes in how Catalyst models are represented and interfaced with.

Breaking changes and new functionality are summarized in the
[HISTORY.md](HISTORY.md) file.
Expand All @@ -48,6 +45,8 @@ the current master branch.

Several Youtube video tutorials and overviews are also available, but note these use older
Catalyst versions with slightly different notation (for example, in building reaction networks):
- From JuliaCon 2023: A short 15 minute overview of Catalyst as of version 13 is
available in the talk [Catalyst.jl, Modeling Chemical Reaction Networks](https://www.youtube.com/watch?v=yreW94n98eM&ab_channel=TheJuliaProgrammingLanguage).
- From JuliaCon 2022: A three hour tutorial workshop overviewing how to use
Catalyst and its more advanced features as of version 12.1. [Workshop
video](https://youtu.be/tVfxT09AtWQ), [Workshop Pluto.jl
Expand All @@ -60,6 +59,8 @@ Catalyst.jl](https://www.youtube.com/watch?v=5p1PJE5A5Jw).
Modelling of Biochemical Reaction
Networks](https://www.youtube.com/watch?v=s1e72k5XD6s)

Finally, an overview of the package and its features (as of version 13) can also be found in its corresponding research paper, [Catalyst: Fast and flexible modeling of reaction networks](https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1011530).

## Features

- A DSL provides a simple and readable format for manually specifying chemical
Expand Down
11 changes: 7 additions & 4 deletions docs/Project.toml
TorkelE marked this conversation as resolved.
Show resolved Hide resolved
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f"
Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4"
HomotopyContinuation = "f213a82b-91d6-5c5d-acf7-10f1c761b327"
Latexify = "23fbe1c1-3f47-55db-b15f-69d7ec21a316"
Logging = "56ddb016-857b-54e1-b83d-db4d58db5568"
TorkelE marked this conversation as resolved.
Show resolved Hide resolved
ModelingToolkit = "961ee093-0014-501f-94e3-6117800e7a78"
NonlinearSolve = "8913a72c-1f9b-4ce2-8d82-65094dcecaec"
Optim = "429524aa-4258-5aef-a3af-852621145aeb"
Expand All @@ -22,6 +23,7 @@ Setfield = "efcf1570-3423-57d1-acb7-fd33fddbac46"
SpecialFunctions = "276daf66-3868-5448-9aa4-cd146d93841b"
SteadyStateDiffEq = "9672c7b4-1e72-59bd-8a11-6ac3964bc41f"
StochasticDiffEq = "789caeaf-c7a9-5a7d-9973-96adeb23e2a0"
StructuralIdentifiability = "220ca800-aa68-49bb-acd8-6037fa93a544"
Symbolics = "0c5d862f-8b57-4792-8d23-62f2024744c7"

[compat]
Expand All @@ -34,17 +36,18 @@ Documenter = "0.27"
HomotopyContinuation = "2.6"
Latexify = "0.15, 0.16"
ModelingToolkit = "8.47"
NonlinearSolve = "1.6.0, 2"
NonlinearSolve = "3.4.0"
Optim = "1"
Optimization = "3.19"
OptimizationOptimisers = "0.1.1"
OrdinaryDiffEq = "6"
PEtab = "2"
Plots = "1.36"
SciMLBase = "~2.5"
SciMLBase = "2.13"
SciMLSensitivity = "7.19"
Setfield = "1.1"
SpecialFunctions = "2.1"
SteadyStateDiffEq = "1"
SteadyStateDiffEq = "2.0.1"
StochasticDiffEq = "6"
Symbolics = "5.0.3"
StructuralIdentifiability = "0.5.1"
Symbolics = "5.14"
3 changes: 2 additions & 1 deletion docs/pages.jl
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ pages = Any["Home" => "index.md",
"catalyst_applications/nonlinear_solve.md",
"catalyst_applications/bifurcation_diagrams.md"],
"Inverse Problems" => Any["inverse_problems/parameter_estimation.md",
"inverse_problems/petab_ode_param_fitting.md"],
"inverse_problems/petab_ode_param_fitting.md",
"inverse_problems/structural_identifiability.md"],
"FAQs" => "faqs.md",
"API" => "api/catalyst_api.md"]
2 changes: 1 addition & 1 deletion docs/src/catalyst_applications/bifurcation_diagrams.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# [Bifurcation Diagrams](@id bifurcation_diagrams)

Bifurcation diagrams describe how, for a dynamical system, the quantity and type of its steady states change as a parameter is varied[^1]. When using Catalyst-generated models, these can be computed with the [BifurcationKit.jl](https://github.com/bifurcationkit/BifurcationKit.jl) package. Catalyst provides a simple interface for creating BifurcationKit compatible `BifurcationProblem`s from `ReactionSystem`s. If you use this feature in your research, please [cite the BifurcationKit.jl](@ref bifurcation_kit_citation) and [Catalyst.jl](@ref catalyst_citation) publications.
Bifurcation diagrams describe how, for a dynamical system, the quantity and type of its steady states change as a parameter is varied[^1]. When using Catalyst-generated models, these can be computed with the [BifurcationKit.jl](https://github.com/bifurcationkit/BifurcationKit.jl) package. Catalyst provides a simple interface for creating BifurcationKit compatible `BifurcationProblem`s from `ReactionSystem`s.

This tutorial briefly introduces how to use Catalyst with BifurcationKit through basic examples, with BifurcationKit.jl providing [a more extensive documentation](https://bifurcationkit.github.io/BifurcationKitDocs.jl/stable/). Especially for more complicated systems, where careful tuning of algorithm options might be required, reading the BifurcationKit documentation is recommended. Finally, BifurcationKit provides many additional features not described here, including [computation of periodic orbits](https://bifurcationkit.github.io/BifurcationKitDocs.jl/stable/periodicOrbit/), [tracking of bifurcation points along secondary parameters](https://bifurcationkit.github.io/BifurcationKitDocs.jl/dev/branchswitching/), and [bifurcation computations for PDEs](https://bifurcationkit.github.io/BifurcationKitDocs.jl/dev/tutorials/tutorials/#PDEs:-bifurcations-of-equilibria).

Expand Down
2 changes: 1 addition & 1 deletion docs/src/catalyst_applications/homotopy_continuation.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ integer Hill exponents). The roots of these can reliably be found through a
*homotopy continuation* algorithm. This is implemented in Julia through the
[HomotopyContinuation.jl](https://www.juliahomotopycontinuation.org/) package.

Catalyst contains a special homotopy continuation extension that is loaded whenever HomotopyContinuation.jl is. This exports a single function, `hc_steady_states`, that can be used to find the steady states of any `ReactionSystem` structure. If you use this in your research, please [cite the HomotopyContinuation.jl](@ref homotopy_continuation_citation) and [Catalyst.jl](@ref catalyst_citation) publications.
Catalyst contains a special homotopy continuation extension that is loaded whenever HomotopyContinuation.jl is. This exports a single function, `hc_steady_states`, that can be used to find the steady states of any `ReactionSystem` structure.

## Basic example
For this tutorial, we will use a model from Wilhelm (2009)[^1] (which
Expand Down
2 changes: 1 addition & 1 deletion docs/src/catalyst_applications/nonlinear_solve.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ We have previously described how `ReactionSystem` steady states can be found thr

However, if all (or multiple) steady states are sought, using homotopy continuation is better.

This tutorial describes how to create `NonlinearProblem`s from Catalyst's `ReactionSystemn`s, and how to solve them using NonlinearSolve. More extensive descriptions of available solvers and options can be found in [NonlinearSolve's documentation](https://docs.sciml.ai/NonlinearSolve/stable/). If you use this in your research, please [cite the NonlinearSolve.jl](@ref nonlinear_solve_citation) and [Catalyst.jl](@ref catalyst_citation) publications.
This tutorial describes how to create `NonlinearProblem`s from Catalyst's `ReactionSystemn`s, and how to solve them using NonlinearSolve. More extensive descriptions of available solvers and options can be found in [NonlinearSolve's documentation](https://docs.sciml.ai/NonlinearSolve/stable/).

## Basic example
Let us consider a simple dimerisation network, where a protein ($P$) can exist in a monomer and a dimer form. The protein is produced at a constant rate from its mRNA, which is also produced at a constant rate.
Expand Down
Loading
Loading