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

Fixed dgf bug #463

Merged
merged 10 commits into from
Apr 10, 2024
4 changes: 2 additions & 2 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ repos:
- id: check-merge-conflict
- id: detect-private-key
- repo: https://github.com/psf/black
rev: 22.10.0
rev: 24.3.0
hooks:
- id: black
- repo: https://github.com/pycqa/isort
Expand All @@ -19,6 +19,6 @@ repos:
name: isort (python)
- repo: https://github.com/astral-sh/ruff-pre-commit
# Ruff version.
rev: v0.0.278
rev: v0.3.4
hooks:
- id: ruff
Empty file.
Empty file.
Empty file.
Empty file.
24 changes: 24 additions & 0 deletions maud/data/example_inputs/linear_multidgf/config.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
name = "linear_multidgf"
kinetic_model_file = "kinetic_model.toml"
priors_file = "priors.toml"
experiments_file = "experiments.toml"
likelihood = true
steady_state_threshold_abs = 1e-6

[cmdstanpy_config]
refresh = 1
iter_warmup = 300
iter_sampling = 300
chains = 4
save_warmup = true
seed = 1234

[ode_solver_config]
abs_tol = 1e-4
rel_tol = 1e-6
max_num_steps = 1e6

[algebra_solver_config]
abs_tol = 1e-4
rel_tol = 1e-6
max_num_steps = 1e6
32 changes: 32 additions & 0 deletions maud/data/example_inputs/linear_multidgf/experiments.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
[[experiment]]
id = "condition1"
is_train = true
is_test = true
temperature = 299.0
measurements = [
{target_type = "mic", metabolite = "M1", compartment = "c", value = 0.59, error_scale = 0.1},
{target_type = "mic", metabolite = "M1", compartment = "e", value = 1.09, error_scale = 0.05},
{target_type = "mic", metabolite = "M2", compartment = "e", value = 1.05, error_scale = 0.05},
{target_type = "flux", reaction = "r3", value = 0.19, error_scale = 0.1},
{target_type = "enzyme", enzyme = "r1", value = 1.5, error_scale = 0.1},
{target_type = "enzyme", enzyme = "r2", value = 1.5, error_scale = 0.1},
{target_type = "enzyme", enzyme = "r3", value = 1.5, error_scale = 0.1},
]
initial_state = [
{metabolite = "M2", compartment = "c", value = 0.38},
]

[[experiment]]
id = "condition2"
is_train = true
is_test = true
measurements = [
{target_type = "mic", metabolite = "M1", compartment = "c", value = 0.54, error_scale = 0.1},
{target_type = "mic", metabolite = "M2", compartment = "c", value = 0.38, error_scale = 0.1},
{target_type = "mic", metabolite = "M1", compartment = "e", value = 1.12, error_scale = 0.05},
{target_type = "mic", metabolite = "M2", compartment = "e", value = 1.14, error_scale = 0.05},
{target_type = "flux", reaction = "r3", value = 0.39, error_scale = 0.1},
{target_type = "enzyme", enzyme = "r1", value = 1.5, error_scale = 0.1},
{target_type = "enzyme", enzyme = "r2", value = 1.5, error_scale = 0.1},
{target_type = "enzyme", enzyme = "r3", value = 1.5, error_scale = 0.1},
]
66 changes: 66 additions & 0 deletions maud/data/example_inputs/linear_multidgf/kinetic_model.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
name = "Example kinetic model"

compartment = [
{id = 'c', name = 'cytosol', volume = 1},
{id = 'e', name = 'external', volume = 1},
]

metabolite = [
{id = "M1", name = "Metabolite number 1"},
{id = "M2", name = "Metabolite number 2"},
]

enzyme = [
{id = "r1", name = "r1ase", subunits = 1},
{id = "r2", name = "r2ase", subunits = 1},
{id = "r3", name = "r3ase", subunits = 1},
]

metabolite_in_compartment = [
{metabolite_id = "M1", compartment_id = "e", balanced = false},
{metabolite_id = "M1", compartment_id = "c", balanced = true},
{metabolite_id = "M2", compartment_id = "c", balanced = true},
{metabolite_id = "M2", compartment_id = "e", balanced = false},
]
enzyme_reaction = [
{enzyme_id = "r1", reaction_id = "r1"},
{enzyme_id = "r2", reaction_id = "r2"},
{enzyme_id = "r3", reaction_id = "r3"},
]

[[reaction]]
id = "r1"
name = "Reaction number 1"
mechanism = "reversible_michaelis_menten"
stoichiometry = { M1_e = -1, M1_c = 1}

[[reaction]]
id = "r2"
name = "Reaction number 2"
mechanism = "irreversible_michaelis_menten"
stoichiometry = { M1_c = -1, M2_c = 1}

[[reaction]]
id = "r3"
name = "Reaction number 3"
mechanism = "reversible_michaelis_menten"
stoichiometry = { M2_c = -1, M2_e = 1}
transported_charge = 1

[[allostery]]
enzyme_id = "r1"
metabolite_id = "M2"
compartment_id = "c"
modification_type = "activation"

[[allostery]]
enzyme_id = "r2"
metabolite_id = "M1"
compartment_id = "c"
modification_type = "inhibition"

[[competitive_inhibition]]
enzyme_id = "r2"
reaction_id = "r2"
metabolite_id = "M1"
compartment_id = "c"
42 changes: 42 additions & 0 deletions maud/data/example_inputs/linear_multidgf/parameters.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
kcat = [
{exploc = 1, scale = 0.6, reaction = "r1", enzyme = "r1"},
{exploc = 1, scale = 0.6, reaction = "r2", enzyme = "r2"},
{exploc = 1, scale = 0.6, reaction = "r3", enzyme = "r3"},
]

km = [
{exploc = 1, scale = 0.6, metabolite = "M1", compartment = "e", enzyme = "r1"},
{exploc = 1, scale = 0.6, metabolite = "M1", compartment = "c", enzyme = "r1"},
{exploc = 1, scale = 0.6, metabolite = "M1", compartment = "c", enzyme = "r2"},
{exploc = 1, scale = 0.6, metabolite = "M2", compartment = "c", enzyme = "r3"},
{exploc = 1, scale = 0.6, metabolite = "M2", compartment = "e", enzyme = "r3"},
]

transfer_constant = [
{exploc = 1, scale = 0.6, enzyme = "r1"},
{exploc = 1, scale = 0.6, enzyme = "r2"},
]

dissociation_constant = [
{exploc = 1, scale = 0.6, enzyme = "r1", metabolite = "M2", compartment = "c", modification_type = "activation"},
{exploc = 1, scale = 0.6, enzyme = "r2", metabolite = "M1", compartment = "c", modification_type = "inhibition"},
]

# dgf = [
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe we can remove the commented data.

# {location = -1, metabolite = "M1", scale = 0.05},
# {location = -2, metabolite = "M2", scale = 0.05},
# ]

psi = [
{location = -0.95, scale = 0.2, experiment = "condition1"},
{location = -0.95, scale = 0.2, experiment = "condition2"},
]

ki = [
{exploc = 1, scale = 0.6, enzyme = "r2", reaction = "r2", metabolite = "M1", compartment = "c"},
]

[dgf]
ids = [ "M1", "M2" ]
mean_vector = [-1, -2]
covariance_matrix = [ [0.5, 0.5], [0.5, 0.5] ]
42 changes: 42 additions & 0 deletions maud/data/example_inputs/linear_multidgf/priors.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
kcat = [
{exploc = 1, scale = 0.6, reaction = "r1", enzyme = "r1"},
{exploc = 1, scale = 0.6, reaction = "r2", enzyme = "r2"},
{exploc = 1, scale = 0.6, reaction = "r3", enzyme = "r3"},
]

km = [
{exploc = 1, scale = 0.6, metabolite = "M1", compartment = "e", enzyme = "r1"},
{exploc = 1, scale = 0.6, metabolite = "M1", compartment = "c", enzyme = "r1"},
{exploc = 1, scale = 0.6, metabolite = "M1", compartment = "c", enzyme = "r2"},
{exploc = 1, scale = 0.6, metabolite = "M2", compartment = "c", enzyme = "r3"},
{exploc = 1, scale = 0.6, metabolite = "M2", compartment = "e", enzyme = "r3"},
]

transfer_constant = [
{exploc = 1, scale = 0.6, enzyme = "r1"},
{exploc = 1, scale = 0.6, enzyme = "r2"},
]

dissociation_constant = [
{exploc = 1, scale = 0.6, enzyme = "r1", metabolite = "M2", compartment = "c", modification_type = "activation"},
{exploc = 1, scale = 0.6, enzyme = "r2", metabolite = "M1", compartment = "c", modification_type = "inhibition"},
]

# dgf = [
# {location = -1, metabolite = "M1", scale = 0.05, fixed_value = -1},
# {location = -2, metabolite = "M2", scale = 0.05},
# ]

psi = [
{location = -0.95, scale = 0.2, experiment = "condition1"},
{location = -0.95, scale = 0.2, experiment = "condition2"},
]

ki = [
{exploc = 1, scale = 0.6, enzyme = "r2", reaction = "r2", metabolite = "M1", compartment = "c"},
]

[dgf]
ids = [ "M1", "M2" ]
mean_vector = [ -10, -32]
covariance_matrix = [ [5,2], [2,4] ]
Empty file.
2 changes: 2 additions & 0 deletions maud/data_model/maud_input.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,4 +82,6 @@ def inits_dict(self) -> Dict:
for met, init in met_to_init.items()
if met not in param.fixed_ids[0]
]
elif param.fixable:
inits_dict[param.name + "_free"] = param.inits.inits_unscaled
return inits_dict
6 changes: 4 additions & 2 deletions maud/data_model/maud_parameter.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,13 @@ class MaudParameter(BaseModel):
init_input: Optional[List[InitAtomInput]]
ids: List[List[str]]
split_ids: List[List[List[str]]]
fixable: bool = False
measurements: Optional[List[Measurement]] = None

@computed_field
def fixed_ids(self) -> Optional[List[List[str]]]:
"""Set the fixed_ids field."""
if self.name != "dgf":
if not self.fixable:
return None
elif self.user_input is None:
return None
Expand All @@ -60,7 +61,7 @@ def fixed_ids(self) -> Optional[List[List[str]]]:
@computed_field
def fixed_values(self) -> Optional[List[List[float]]]:
"""Set the fixed_values field."""
if self.name != "dgf":
if not self.fixable:
return None
elif self.user_input is None:
return None
Expand Down Expand Up @@ -244,6 +245,7 @@ class Dgf(MaudParameter):
default_scale: float = 10
prior_in_test_model: bool = False
prior_in_train_model: bool = True
fixable: bool = True


class DissociationConstant(MaudParameter):
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ packages = [
"maud.data.example_inputs.example_ode",
"maud.data.example_inputs.linear",
"maud.data.example_inputs.methionine",
"maud.data.example_inputs.linear_multidgf",
"maud.data.example_outputs",
"maud.data.example_outputs.linear",
"maud.data.example_outputs.linear.user_input",
Expand All @@ -85,7 +86,6 @@ packages = [

[tool.black]
line-length = 80
python-version = ['py38', 'py39']
exclude = '''
(
__init__.py
Expand Down
11 changes: 9 additions & 2 deletions tests/test_unit/test_load_maud_input.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import numpy as np
from numpy.testing import assert_equal

from maud.data.example_inputs import linear
from maud.data.example_inputs import linear, linear_multidgf
from maud.loading_maud_inputs import load_maud_input


Expand All @@ -22,7 +22,7 @@ def test_load_maud_input():
"dissociation_constant": [["r1_M2_c_activation", "r2_M1_c_inhibition"]],
}
linear_files = importlib_resources.files(linear)
mi = load_maud_input(data_path=linear_files._paths[0]) # path 0 is package
mi = load_maud_input(data_path=str(linear_files)) # path 0 is package
r1 = next(r for r in mi.kinetic_model.reactions if r.id == "r1")
assert r1.stoichiometry == {"M1_e": -1, "M1_c": 1}
assert "r1_r1" in mi.parameters.kcat.ids[0]
Expand All @@ -36,3 +36,10 @@ def test_load_maud_input():
actual = v.tolist() if isinstance(v, np.ndarray) else v
expected = expected_stan_input[k]
assert_equal(actual, expected, err_msg=f"{k} different from expected.")


def test_load_multidgf():
"""Test that the multidgf input loads correctly."""
files = importlib_resources.files(linear_multidgf)
mi = load_maud_input(data_path=str(files)) # path 0 is package
assert mi.inits_dict["dgf_free"] == [-10.0, -32.0]
Loading