using BaseCellSimulation.Enzyms; using BaseCellSimulation.Enzyms.Cytosol; using BaseCellSimulation.Enzyms.Cytosol.Ribosomen; namespace BaseCellSimulation { /// /// Cellliquid builds ATP and NADH out of Glucosis /// /// /// /// public class Cytosol : Organell { public readonly List enzyms = new List(); double ROS_base_rate = 1e-6; private readonly string name; private double rosProduction; private double vOx; public Cytosol() : this("Cytosol") { } public Cytosol(string cellname) { name = cellname; enzyms.Add(new Aldolase()); enzyms.Add(new AdenylateKinase()); enzyms.Add(new Enolase()); enzyms.Add(new GAPDH()); enzyms.Add(new Hexokinasis()); enzyms.Add(new Lactat_Dehydrogenase()); enzyms.Add(new PhosphoFructokinase()); enzyms.Add(new Phosphoglucose_Isomerase()); enzyms.Add(new Phosphoglycerat_Kinase()); enzyms.Add(new Phosphoglycerat_Mutase()); enzyms.Add(new Pyruvat_Kinase()); enzyms.Add(new Pyrophosphatase()); enzyms.Add(new Methionin_Adenosyltransferase()); enzyms.Add(new AHCY()); enzyms.Add(new Methioninsynthase()); enzyms.Add(new Ribosome()); enzyms.Add(new AminoacylTRNASynthetase()); enzyms.Add(new PeptidylTransferase()); enzyms.Add(new NucleosideDiphosphateKinase()); } //Todo split in compute Rate and apply changes // Stoichiometrie: 1 Glu -> 2 ATP + 2 NADH (simplyfied) public void applyChanges(CellRessources Resources, double dt) { foreach (InternalEnzym enzym in enzyms) { enzym.ApplyChanges(Resources, dt); } // Wenn O2 vorhanden: Pyruvat->CO2 + NADH via PDH/ TCA(vereinfacht) // Simpler oxidativer Pfad (nur wenn genug O2) double oxUsage = Math.Min(Resources.Res.Carbon.Pyruvate, vOx * dt); // skaliert mit O2 Resources.Res.Carbon.Pyruvate -= oxUsage; Resources.Res.Carbon.CO2 += oxUsage; // CO2 als Waste Resources.Res.Oxygen -= 6.0 * oxUsage; // oxidativer Stoffwechsel erzeugt NADH (vereinfachung) und ATP (nicht durch Glykolyse) Resources.TransferNADH(3.0 * oxUsage, false); // Beispielzahl Resources.RegenerateATP(12.0 * oxUsage); // sehr grobe Näherung für oxidative Phosphorylierung //ROS - Produktion: steigt mit hohem NADH/ NAD Verhältnis und mittlerem / hohem O2 Resources.Res.Ions.ROS += rosProduction * dt; } public string getName() { return name; } public void calculateRate(CellRessources res) { foreach (InternalEnzym enzym in enzyms) { enzym.ComputeRate(res.Res); } double oxscaled = res.Res.Oxygen * 1000; vOx = (oxscaled > 1e-3 && res.Res.Carbon.Pyruvate > 0) ? 0.5 * (oxscaled / (oxscaled + 5.0)) : 0.0; if (oxscaled > 1e-3 && res.Res.Carbon.Pyruvate > 0) { } double redoxRatio = (res.Res.Energy.NADH + 1e-12) / Math.Max(1e-12, res.Res.Energy.NAD); rosProduction = ROS_base_rate * redoxRatio * (oxscaled / (oxscaled + 5.0)); } } }