Files
CellSimulation/BaseCellSimulation/Cytosol.cs
T
WyanMueller d2e409d10f InitalCommit
2025-11-16 10:30:26 +01:00

102 lines
3.6 KiB
C#

using BaseCellSimulation.Enzyms;
using BaseCellSimulation.Enzyms.Cytosol;
using BaseCellSimulation.Enzyms.Cytosol.Ribosomen;
namespace BaseCellSimulation
{
/// <summary>
/// Cellliquid builds ATP and NADH out of Glucosis
/// </summary>
/// <param name="cellname"></param>
/// <param name="vmax"></param>
/// <param name="km"></param>
public class Cytosol : Organell
{
public readonly List<InternalEnzym> enzyms = new List<InternalEnzym>();
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));
}
}
}