# Fibroblast/cytokine/effector-pool core, shared by every drug. See
# model-spec.md Section 6. No literature-precedent QSP model exists for TED
# (checked at project start) -- this structure is a first-principles
# proposal, not a lifted-from-literature model; calibration status is
# tracked in model-spec.md Section 8.

#' Turnover rate constant from a half-life in days.
koff_from_halflife <- function(halflife_days) log(2) / halflife_days

#' Derivatives for the four mechanism-core states, all normalized so that a
#' sustained effective drive of 1.0 (untreated, undecayed baseline) settles
#' at a steady-state value of 1.0 in each state.
mechanism_core_deriv <- function(Fib, GAG, Myo, Fat, eff_drive,
                                  kF_off, kG_off, kM_off, kA_off) {
  dFib <- kF_off * eff_drive - kF_off * Fib
  dGAG <- kG_off * Fib       - kG_off * GAG
  dMyo <- kM_off * Fib       - kM_off * Myo
  dFat <- kA_off * Fib       - kA_off * Fat
  list(dFib = dFib, dGAG = dGAG, dMyo = dMyo, dFat = dFat)
}
