structs.jl 4.31 KB
Newer Older
1

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
"""
Abstract type for all kinds of gene product associations
"""
abstract type GeneProductAssociation end

"""
Gene product reference in the association expression
"""
struct GPARef <: GeneProductAssociation
    gene_product::String
end

"""
Boolean binary "and" in the association expression
"""
struct GPAAnd <: GeneProductAssociation
    terms::Vector{GeneProductAssociation}
end

"""
Boolean binary "or" in the association expression
"""
struct GPAOr <: GeneProductAssociation
    terms::Vector{GeneProductAssociation}
end

28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
"""
A simplified representation of MathML-specified math AST
"""
abstract type Math end

"""
A literal value (usually a numeric constant) in mathematical expression
"""
struct MathVal{T} <: Math where {T}
    val::T
end

"""
An identifier (usually a variable name) in mathematical expression
"""
struct MathIdent <: Math
    id::String
end

47
48
49
50
51
52
53
54
"""
A constant identified by name (usually something like `pi`, `e` or `true`) in
mathematical expression
"""
struct MathConst <: Math
    id::String
end

55
56
57
58
59
60
61
62
"""
A special value representing the current time of the simulation, with a special
name.
"""
struct MathTime <: Math
    id::String
end

63
64
65
66
67
68
69
"""
Function application ("call by name", no tricks allowed) in mathematical expression
"""
struct MathApply <: Math
    fn::String
    args::Vector{Math}
end
70

71
72
73
74
75
76
77
78
"""
Function definition (aka "lambda") in mathematical expression
"""
struct MathLambda <: Math
    args::Vector{String}
    body::Math
end

79
80
81
82
83
84
85
86
87
88
89
90
91
92
"""
SBML Compartment with sizing information.
"""
struct Compartment
    name::Maybe{String}
    constant::Maybe{Bool}
    spatial_dimensions::Maybe{Int}
    size::Maybe{Float64}
    units::Maybe{String}
    notes::Maybe{String}
    annotation::Maybe{String}
    Compartment(na, c, sd, s, u, no = nothing, an = nothing) = new(na, c, sd, s, u, no, an)
end

Miroslav Kratochvil's avatar
Miroslav Kratochvil committed
93
94
"""
Reaction with stoichiometry that assigns reactants and products their relative
Miroslav Kratochvil's avatar
Miroslav Kratochvil committed
95
96
consumption/production rates (accessible in field `stoichiometry`), lower/upper
bounds (in tuples `lb` and `ub`, with unit names), and objective coefficient
Miroslav Kratochvil's avatar
Miroslav Kratochvil committed
97
(`oc`). Also may contains `notes` and `annotation`.
Miroslav Kratochvil's avatar
Miroslav Kratochvil committed
98
"""
99
100
101
102
103
struct Reaction
    stoichiometry::Dict{String,Float64}
    lb::Tuple{Float64,String}
    ub::Tuple{Float64,String}
    oc::Float64
104
    gene_product_association::Maybe{GeneProductAssociation}
105
    kinetic_math::Maybe{Math}
paulflang's avatar
paulflang committed
106
    reversible::Bool
107
    notes::Maybe{String}
108
    annotation::Maybe{String}
paulflang's avatar
paulflang committed
109
110
    Reaction(s, l, u, o, as, km, r, n = nothing, an = nothing) =
        new(s, l, u, o, as, km, r, n, an)
111
112
end

Miroslav Kratochvil's avatar
Miroslav Kratochvil committed
113
"""
Miroslav Kratochvil's avatar
Miroslav Kratochvil committed
114
115
Species metadata -- contains a human-readable `name`, a `compartment`
identifier, `formula`, `charge`, and additional `notes` and `annotation`.
Miroslav Kratochvil's avatar
Miroslav Kratochvil committed
116
"""
117
struct Species
118
    name::Maybe{String}
119
    compartment::String
120
    boundary_condition::Maybe{Bool}
121
    formula::Maybe{String}
122
    charge::Maybe{Int}
123
124
    initial_amount::Maybe{Tuple{Float64,Maybe{String}}}
    initial_concentration::Maybe{Tuple{Float64,Maybe{String}}}
125
    only_substance_units::Maybe{Bool}
126
    notes::Maybe{String}
127
    annotation::Maybe{String}
128
129
    Species(na, co, b, f, ch, ia, ic, osu, no = nothing, a = nothing) =
        new(na, co, b, f, ch, ia, ic, osu, no, a)
130
131
end

Miroslav Kratochvil's avatar
Miroslav Kratochvil committed
132
133
134
135
136
137
138
139
140
141
142
"""
Gene product metadata.
"""
struct GeneProduct
    name::Maybe{String}
    label::Maybe{String}
    notes::Maybe{String}
    annotation::Maybe{String}
    GeneProduct(na, l, no = nothing, a = nothing) = new(na, l, no, a)
end

143
144
145
146
147
148
149
150
151
152
153
"""
Custom function definition.
"""
struct FunctionDefinition
    name::Maybe{String}
    body::Maybe{Math}
    notes::Maybe{String}
    annotation::Maybe{String}
    FunctionDefinition(na, b, no = nothing, a = nothing) = new(na, b, no, a)
end

Miroslav Kratochvil's avatar
Miroslav Kratochvil committed
154
"""
Miroslav Kratochvil's avatar
Miroslav Kratochvil committed
155
156
157
158
159
Structure that collects the model-related data. Contains `parameters`, `units`,
`compartments`, `species` and `reactions` and `gene_products`, and additional
`notes` and `annotation` (also present internally in some of the data fields).
The contained dictionaries are indexed by identifiers of the corresponding
objects.
Miroslav Kratochvil's avatar
Miroslav Kratochvil committed
160
"""
161
struct Model
Miroslav Kratochvil's avatar
Miroslav Kratochvil committed
162
    parameters::Dict{String,Float64}
Mosè Giordano's avatar
Mosè Giordano committed
163
    units::Dict{String,Number}
164
    compartments::Dict{String,Compartment}
165
166
    species::Dict{String,Species}
    reactions::Dict{String,Reaction}
Miroslav Kratochvil's avatar
Miroslav Kratochvil committed
167
    gene_products::Dict{String,GeneProduct}
168
    function_definitions::Dict{String,FunctionDefinition}
169
    notes::Maybe{String}
170
    annotation::Maybe{String}
171
    Model(p, u, c, s, r, g, f, n = nothing, a = nothing) = new(p, u, c, s, r, g, f, n, a)
172
end