89 lines
3.1 KiB
C#
89 lines
3.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace BaseCellSimulation.Enzyms.Lysosome
|
|
{
|
|
public class GenericLysosomalEnzyme : InternalEnzym
|
|
{
|
|
public GenericLysosomalEnzyme()
|
|
{
|
|
Vmax = 0.2;
|
|
Km = 0.1;
|
|
}
|
|
|
|
double redoxRatio = 0.0;
|
|
|
|
public override void ComputeRate(Resources res)
|
|
{
|
|
// --- Grundrate basierend auf Protein-Waste ---
|
|
rate = Michaelis_Menten(res.Protein.Waste, Vmax, Km);
|
|
|
|
// --- Energieabhängigkeit ---
|
|
double energyCharge = (res.Energy.ATP + 0.5 * res.Energy.ADP) /
|
|
(res.Energy.ATP + res.Energy.ADP + res.Energy.AMP + 1e-9);
|
|
rate *= Math.Clamp(energyCharge, 0.0, 1.0);
|
|
|
|
// --- Redoxabhängigkeit ---
|
|
redoxRatio = res.Energy.NAD / (res.Energy.NAD + res.Energy.NADH + 1e-9);
|
|
rate *= Math.Clamp(redoxRatio, 0.0, 1.0);
|
|
|
|
// --- pH-Abhängigkeit ---
|
|
double acidFactor = 1.0 - 0.5 * Math.Clamp(res.Ions.Protons / 1.0, 0.0, 1.0);
|
|
rate *= acidFactor;
|
|
|
|
// --- Stressfaktor bei hohen ROS ---
|
|
double stressPenalty = res.Ions.ROS > 1.0 ? 0.5 : 1.0;
|
|
rate *= stressPenalty;
|
|
}
|
|
|
|
public override void ApplyChanges(CellRessources Resources, double dt)
|
|
{
|
|
var res = Resources.Res;
|
|
var ca = Resources.Res.Ca;
|
|
|
|
ComputeRate(res);
|
|
|
|
double degraded = Math.Min(res.Protein.Waste, rate * dt);
|
|
if (degraded <= 0.0)
|
|
return;
|
|
|
|
// --- Protein-Abbau ---
|
|
res.Protein.Waste -= degraded;
|
|
|
|
// --- Energieverbrauch & minimale Rückgewinnung ---
|
|
double atpUsed = degraded * 0.15;
|
|
double atpRecovered = degraded * 0.03 * ((res.Energy.ATP + 0.5 * res.Energy.ADP) /
|
|
(res.Energy.ATP + res.Energy.ADP + res.Energy.AMP + 1e-9));
|
|
Resources.ConsumeATP(atpUsed);
|
|
res.Energy.ATP += atpRecovered;
|
|
|
|
// --- NAD+ → NADH Redoxreaktion ---
|
|
double nadUsed = degraded * 0.08;
|
|
double actualNadUsed = Math.Min(nadUsed, res.Energy.NAD);
|
|
res.Energy.NAD -= actualNadUsed;
|
|
res.Energy.NADH += actualNadUsed;
|
|
|
|
// --- Aminosäuren-Recycling ---
|
|
double recyclingEfficiency = 0.4 + 0.3 * ((res.Energy.ATP + 0.5 * res.Energy.ADP) /
|
|
(res.Energy.ATP + res.Energy.ADP + res.Energy.AMP + 1e-9));
|
|
res.Protein.AminoAcids += degraded * recyclingEfficiency;
|
|
|
|
// --- Sekundäre Effekte: ROS, Heat, Protonen ---
|
|
res.Ions.ROS += degraded * (1.0 - redoxRatio) * 0.01;
|
|
res.Heat += degraded * 0.05;
|
|
res.Ions.Protons += degraded * 0.005;
|
|
|
|
// --- Kalziumleckage als Stresssignal ---
|
|
ca.CytosolicCa += degraded * 0.00002;
|
|
|
|
// --- Lysosomenaktivität für Feedback ---
|
|
ca.LysosomeActivity = Math.Clamp(rate / Vmax, 0.0, 1.0);
|
|
}
|
|
}
|
|
|
|
|
|
}
|