102 lines
3.6 KiB
C#
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));
|
|
}
|
|
}
|
|
}
|