sciforge-hub 0.0.4

Central hub orchestrating Sciforge subsystems (api, engine, tools).
Documentation
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
//! Dispatch handler for immunology functions.

use super::super::params::*;
use crate::domain::biology as bio;
use crate::domain::common::errors::{HubError, HubResult};
use crate::engine::experience::runner::RunOutput;

pub(super) fn dispatch(func: &str, p: &Params) -> HubResult<RunOutput> {
    match func {
        "clonal_expansion" => Ok(RunOutput::Scalar(
            bio::immunology::adaptive::clonal_expansion(
                get_f(p, "n0")?,
                get_f(p, "proliferation_rate")?,
                get_f(p, "death_rate")?,
                get_f(p, "t")?,
            ),
        )),
        "clonal_selection_dynamics" => {
            let r = bio::immunology::adaptive::clonal_selection_dynamics(
                get_f(p, "naive")?,
                get_f(p, "effector")?,
                get_f(p, "memory")?,
                get_f(p, "antigen")?,
                get_f(p, "k_activation")?,
                get_f(p, "k_prolif")?,
                get_f(p, "k_death")?,
                get_f(p, "k_memory")?,
                get_f(p, "k_clear")?,
            );
            Ok(RunOutput::Vector(vec![r.0, r.1, r.2, r.3]))
        }
        "clonal_selection_simulate" => Ok(RunOutput::Matrix(
            bio::immunology::adaptive::clonal_selection_simulate(
                get_f(p, "naive0")?,
                get_f(p, "effector0")?,
                get_f(p, "memory0")?,
                get_f(p, "antigen0")?,
                get_f(p, "k_activation")?,
                get_f(p, "k_prolif")?,
                get_f(p, "k_death")?,
                get_f(p, "k_memory")?,
                get_f(p, "k_clear")?,
                get_f(p, "dt")?,
                get_u(p, "steps")?,
            )
            .into_iter()
            .map(|(a, b, c, d)| vec![a, b, c, d])
            .collect(),
        )),
        "tcell_activation_threshold" => Ok(RunOutput::Boolean(
            bio::immunology::adaptive::tcell_activation_threshold(
                get_f(p, "signal")?,
                get_f(p, "costimulation")?,
                get_f(p, "threshold")?,
            ),
        )),
        "cytokine_hill_response" => Ok(RunOutput::Scalar(
            bio::immunology::adaptive::cytokine_hill_response(
                get_f(p, "cytokine")?,
                get_f(p, "ec50")?,
                get_f(p, "n")?,
            ),
        )),
        "treg_suppression" => Ok(RunOutput::Scalar(
            bio::immunology::adaptive::treg_suppression(
                get_f(p, "effector_rate")?,
                get_f(p, "treg")?,
                get_f(p, "k_supp")?,
            ),
        )),
        "memory_recall_response" => Ok(RunOutput::Scalar(
            bio::immunology::adaptive::memory_recall_response(
                get_f(p, "memory")?,
                get_f(p, "antigen")?,
                get_f(p, "k_recall")?,
                get_f(p, "fold_expansion")?,
            ),
        )),
        "somatic_affinity_maturation" => Ok(RunOutput::Scalar(
            bio::immunology::antibodies::somatic_affinity_maturation(
                get_f(p, "initial_kd")?,
                get_u(p, "rounds")?,
                get_f(p, "improvement_per_round")?,
            ),
        )),
        "antibody_titer" => Ok(RunOutput::Scalar(
            bio::immunology::antibodies::antibody_titer(
                get_f(p, "dilution_factor")?,
                get_u(p, "endpoint_dilution")?,
            ),
        )),
        "isotype_switch_probability" => Ok(RunOutput::Scalar(
            bio::immunology::antibodies::isotype_switch_probability(
                get_f(p, "cytokine_signal")?,
                get_f(p, "switch_region_accessibility")?,
                get_f(p, "aid_activity")?,
            ),
        )),
        "somatic_hypermutation_rate" => Ok(RunOutput::Scalar(
            bio::immunology::antibodies::somatic_hypermutation_rate(
                get_f(p, "aid_expression")?,
                get_f(p, "base_rate")?,
                get_f(p, "hotspot_factor")?,
            ),
        )),
        "neutralization_potency" => Ok(RunOutput::Scalar(
            bio::immunology::antibodies::neutralization_potency(
                get_f(p, "ic50")?,
                get_f(p, "virus_titer")?,
            ),
        )),
        "opsonization_index" => Ok(RunOutput::Scalar(
            bio::immunology::antibodies::opsonization_index(
                get_f(p, "antibody_bound")?,
                get_f(p, "fc_receptor_density")?,
                get_f(p, "complement_coating")?,
            ),
        )),
        "adcc_killing_rate" => Ok(RunOutput::Scalar(
            bio::immunology::antibodies::adcc_killing_rate(
                get_f(p, "antibody_density")?,
                get_f(p, "nk_cell_count")?,
                get_f(p, "target_count")?,
                get_f(p, "k_sat")?,
            ),
        )),
        "complement_cascade_c3b" => Ok(RunOutput::Scalar(
            bio::immunology::antibodies::complement_cascade_c3b(
                get_f(p, "c3")?,
                get_f(p, "convertase_activity")?,
                get_f(p, "factor_h_inhibition")?,
            ),
        )),
        "multivalent_avidity" => Ok(RunOutput::Scalar(
            bio::immunology::antibodies::multivalent_avidity(
                get_f(p, "monovalent_kd")?,
                get_u(p, "valency")?,
                get_f(p, "cooperativity")?,
            ),
        )),
        "elisa_concentration" => Ok(RunOutput::Scalar(
            bio::immunology::antibodies::elisa_concentration(
                get_f(p, "od")?,
                get_f(p, "od_max")?,
                get_f(p, "ec50")?,
                get_f(p, "hill")?,
            ),
        )),
        "b_cell_germinal_center_selection" => Ok(RunOutput::Boolean(
            bio::immunology::antibodies::b_cell_germinal_center_selection(
                get_f(p, "affinity")?,
                get_f(p, "threshold")?,
                get_f(p, "t_cell_help")?,
            ),
        )),
        "cytokine_production_rate" => Ok(RunOutput::Scalar(
            bio::immunology::cytokines::cytokine_production_rate(
                get_f(p, "stimulus")?,
                get_f(p, "cell_count")?,
                get_f(p, "max_rate")?,
                get_f(p, "ec50")?,
            ),
        )),
        "cytokine_decay" => Ok(RunOutput::Scalar(
            bio::immunology::cytokines::cytokine_decay(
                get_f(p, "concentration")?,
                get_f(p, "half_life")?,
                get_f(p, "dt")?,
            ),
        )),
        "th1_th2_balance" => Ok(RunOutput::Scalar(
            bio::immunology::cytokines::th1_th2_balance(get_f(p, "ifn_gamma")?, get_f(p, "il4")?),
        )),
        "th17_regulatory_balance" => Ok(RunOutput::Scalar(
            bio::immunology::cytokines::th17_regulatory_balance(
                get_f(p, "il17")?,
                get_f(p, "il10")?,
                get_f(p, "tgf_beta")?,
            ),
        )),
        "cytokine_storm_severity" => Ok(RunOutput::Scalar(
            bio::immunology::cytokines::cytokine_storm_severity(
                get_f(p, "il6")?,
                get_f(p, "tnf")?,
                get_f(p, "il1b")?,
                get_f(p, "threshold_il6")?,
                get_f(p, "threshold_tnf")?,
                get_f(p, "threshold_il1b")?,
            ),
        )),
        "jak_stat_signaling" => Ok(RunOutput::Scalar(
            bio::immunology::cytokines::jak_stat_signaling(
                get_f(p, "cytokine")?,
                get_f(p, "receptor_density")?,
                get_f(p, "jak_activity")?,
                get_f(p, "socs_inhibition")?,
            ),
        )),
        "nfkb_activation" => Ok(RunOutput::Scalar(
            bio::immunology::cytokines::nfkb_activation(
                get_f(p, "stimulus")?,
                get_f(p, "ikk_activity")?,
                get_f(p, "ikb_level")?,
            ),
        )),
        "chemokine_gradient" => Ok(RunOutput::Scalar(
            bio::immunology::cytokines::chemokine_gradient(
                get_f(p, "source_conc")?,
                get_f(p, "distance")?,
                get_f(p, "diffusion_coeff")?,
                get_f(p, "decay_rate")?,
            ),
        )),
        "autocrine_loop" => Ok(RunOutput::Scalar(
            bio::immunology::cytokines::autocrine_loop(
                get_f(p, "production_rate")?,
                get_f(p, "receptor_sensitivity")?,
                get_f(p, "degradation")?,
            ),
        )),
        "paracrine_signaling" => Ok(RunOutput::Scalar(
            bio::immunology::cytokines::paracrine_signaling(
                get_f(p, "source_cells")?,
                get_f(p, "target_distance")?,
                get_f(p, "diffusion")?,
                get_f(p, "production")?,
                get_f(p, "decay")?,
            ),
        )),
        "nlrp3_inflammasome_activation" => Ok(RunOutput::Scalar(
            bio::immunology::cytokines::nlrp3_inflammasome_activation(
                get_f(p, "damp_signal")?,
                get_f(p, "nlrp3")?,
                get_f(p, "asc")?,
                get_f(p, "threshold")?,
            ),
        )),
        "sir_immune" => {
            let r = bio::immunology::dynamics::sir_immune(
                get_f(p, "s")?,
                get_f(p, "i")?,
                get_f(p, "r")?,
                get_f(p, "immune")?,
                get_f(p, "beta")?,
                get_f(p, "gamma")?,
                get_f(p, "k_immune")?,
                get_f(p, "k_decay")?,
            );
            Ok(RunOutput::Vector(vec![r.0, r.1, r.2, r.3]))
        }
        "sir_immune_simulate" => Ok(RunOutput::Matrix(
            bio::immunology::dynamics::sir_immune_simulate(
                get_f(p, "s0")?,
                get_f(p, "i0")?,
                get_f(p, "r0")?,
                get_f(p, "immune0")?,
                get_f(p, "beta")?,
                get_f(p, "gamma")?,
                get_f(p, "k_immune")?,
                get_f(p, "k_decay")?,
                get_f(p, "dt")?,
                get_u(p, "steps")?,
            )
            .into_iter()
            .map(|(a, b, c, d)| vec![a, b, c, d])
            .collect(),
        )),
        "vaccine_efficacy" => Ok(RunOutput::Scalar(
            bio::immunology::dynamics::vaccine_efficacy(
                get_f(p, "arr_vacc")?,
                get_f(p, "arr_placebo")?,
            ),
        )),
        "herd_immunity_fraction" => Ok(RunOutput::Scalar(
            bio::immunology::dynamics::herd_immunity_fraction(get_f(p, "r0")?),
        )),
        "antibody_decay" => Ok(RunOutput::Scalar(
            bio::immunology::dynamics::antibody_decay(
                get_f(p, "ab0")?,
                get_f(p, "half_life")?,
                get_f(p, "t")?,
            ),
        )),
        "booster_response" => Ok(RunOutput::Scalar(
            bio::immunology::dynamics::booster_response(
                get_f(p, "ab_pre")?,
                get_f(p, "fold_boost")?,
                get_f(p, "decay_rate")?,
                get_f(p, "t")?,
            ),
        )),
        "seroconversion_probability" => Ok(RunOutput::Scalar(
            bio::immunology::dynamics::seroconversion_probability(
                get_f(p, "dose")?,
                get_f(p, "ed50")?,
                get_f(p, "n")?,
            ),
        )),
        "waning_immunity" => Ok(RunOutput::Scalar(
            bio::immunology::dynamics::waning_immunity(
                get_f(p, "immune_fraction")?,
                get_f(p, "waning_rate")?,
                get_f(p, "t")?,
            ),
        )),
        "immuno_maternal_antibody_decay" => Ok(RunOutput::Scalar(
            bio::immunology::dynamics::maternal_antibody_decay(
                get_f(p, "ab0")?,
                get_f(p, "half_life")?,
                get_f(p, "t_months")?,
            ),
        )),
        "immuno_seir_step" => {
            let r = bio::immunology::dynamics::seir_step(
                get_f(p, "s")?,
                get_f(p, "e")?,
                get_f(p, "i")?,
                get_f(p, "r")?,
                get_f(p, "beta")?,
                get_f(p, "sigma")?,
                get_f(p, "gamma")?,
                get_f(p, "dt")?,
            );
            Ok(RunOutput::Vector(vec![r.0, r.1, r.2, r.3]))
        }
        "antigen_antibody_binding" => Ok(RunOutput::Scalar(
            bio::immunology::innate::antigen_antibody_binding(
                get_f(p, "ab")?,
                get_f(p, "ag")?,
                get_f(p, "ka")?,
            ),
        )),
        "affinity_maturation" => Ok(RunOutput::Vector(
            bio::immunology::innate::affinity_maturation(
                get_f(p, "kd_initial")?,
                get_f(p, "mutation_rate")?,
                get_u(p, "generations")?,
            ),
        )),
        "avidity" => Ok(RunOutput::Scalar(bio::immunology::innate::avidity(
            get_f(p, "kd_monovalent")?,
            get_u(p, "n_sites")?,
        ))),
        "neutralization_curve" => Ok(RunOutput::Scalar(
            bio::immunology::innate::neutralization_curve(
                get_f(p, "dose")?,
                get_f(p, "ic50")?,
                get_f(p, "n")?,
            ),
        )),
        "complement_cascade" => Ok(RunOutput::Scalar(
            bio::immunology::innate::complement_cascade(
                get_f(p, "c0")?,
                get_f(p, "rate")?,
                get_f(p, "t")?,
            ),
        )),
        "toll_like_receptor_activation" => Ok(RunOutput::Scalar(
            bio::immunology::innate::toll_like_receptor_activation(
                get_f(p, "pamp")?,
                get_f(p, "receptor_density")?,
                get_f(p, "kd")?,
            ),
        )),
        "phagocytosis_rate" => Ok(RunOutput::Scalar(
            bio::immunology::innate::phagocytosis_rate(
                get_f(p, "pathogen")?,
                get_f(p, "phagocyte")?,
                get_f(p, "k_phag")?,
                get_f(p, "saturation")?,
            ),
        )),
        "nk_cell_killing" => Ok(RunOutput::Scalar(bio::immunology::innate::nk_cell_killing(
            get_f(p, "target_mhc")?,
            get_f(p, "mhc_threshold")?,
            get_f(p, "activating_ligand")?,
            get_f(p, "kill_rate")?,
        ))),
        "cytokine_cascade" => Ok(RunOutput::Matrix(
            bio::immunology::innate::cytokine_cascade(
                get_v(p, "initial_cytokines")?,
                get_m(p, "amplification")?,
                get_u(p, "steps")?,
            ),
        )),
        "inflammasome_activation" => Ok(RunOutput::Scalar(
            bio::immunology::innate::inflammasome_activation(
                get_f(p, "damp")?,
                get_f(p, "signal2")?,
                get_f(p, "threshold")?,
                get_f(p, "nlrp3")?,
            ),
        )),
        "maternal_antibody_decay" => Ok(RunOutput::Scalar(
            bio::immunology::dynamics::maternal_antibody_decay(
                get_f(p, "ab0")?,
                get_f(p, "half_life")?,
                get_f(p, "t_months")?,
            ),
        )),
        _ => Err(HubError::InvalidInput(format!("unknown function: {func}"))),
    }
}