Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0487824e63 |
@@ -6,4 +6,15 @@
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Update="EnzymData\enzymes.schema.json">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="EnzymData\Enzyms.json">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
|
||||
<ProjectExtensions><VisualStudio><UserProperties enzymdata_4enzymes_1schema_1json__JsonSchema="https://json-schema.org/draft-07/schema" /></VisualStudio></ProjectExtensions>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
{
|
||||
"$schema": "cellRessources.schema.json",
|
||||
"BasicCell": {
|
||||
"energy": {
|
||||
"ATP": 2.5,
|
||||
"ADP": 0.8,
|
||||
"AMP": 0.1,
|
||||
"NAD+": 1.0,
|
||||
"NADH": 0.3,
|
||||
"GTP": 0.5,
|
||||
"GDP": 0.2
|
||||
},
|
||||
"Pi": 5.0,
|
||||
"PPi": 0.1,
|
||||
|
||||
"glucose": 5.0,
|
||||
"G6P": 0.5,
|
||||
"F6P": 0.3,
|
||||
"F1,6BP": 0.2,
|
||||
"GA3P": 0.2,
|
||||
"1,3BPG": 0.1,
|
||||
"3PG": 0.4,
|
||||
"2PG": 0.3,
|
||||
"PEP": 0.2,
|
||||
"Pyruvate": 1.0,
|
||||
"Lactate": 1.5,
|
||||
|
||||
"CO2": 10.0,
|
||||
"AcCoA": 0.2,
|
||||
|
||||
"AminoAcids": 5.0,
|
||||
"NucleicAcids": 1.0,
|
||||
"Nucleotides": 2.0,
|
||||
"NTP": 0.5,
|
||||
"dNTP": 0.1,
|
||||
|
||||
"mRNA": 0.5,
|
||||
"DNA_damage": 0.0,
|
||||
|
||||
"SAM": 0.05,
|
||||
"MET": 0.5,
|
||||
"SAH": 0.02,
|
||||
"Homocysteine": 0.01,
|
||||
"Adenosin": 0.1,
|
||||
|
||||
"tRNA": 1.0,
|
||||
"Aminocylated_tRNA": 0.3,
|
||||
|
||||
"H+": 0.00004,
|
||||
"Na+": 10.0,
|
||||
"K+": 140.0,
|
||||
|
||||
"H2O2": 0.001,
|
||||
|
||||
"B12": 0.01,
|
||||
"THF": 0.1,
|
||||
"MethylTHF": 0.1,
|
||||
|
||||
"CytoSolCA": 0.0001,
|
||||
"rERCa": 0.3,
|
||||
"sERCa": 0.6
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,241 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-04/schema",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"energy": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"ATP": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "Adenosine-triphosphate"
|
||||
},
|
||||
"ADP": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "Adenosine-diphosphate"
|
||||
},
|
||||
"AMP": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "Adenosine-monophosphate"
|
||||
},
|
||||
"NAD+": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "Nicotinamide adenine dinucleotide (oxidized form)"
|
||||
},
|
||||
"NADH": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "Nicotinamide adenine dinucleotide (reduced form)"
|
||||
},
|
||||
"GTP": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "Guanosine-triphosphate"
|
||||
},
|
||||
"GDP": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "Guanosine-diphosphate"
|
||||
},
|
||||
"Pi": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "Inorganic phosphate"
|
||||
},
|
||||
"PPi": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "Inorganic pyrophosphate"
|
||||
}
|
||||
}
|
||||
},
|
||||
"glucose": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "Glucose concentration"
|
||||
},
|
||||
"G6P": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "Glucose-6-phosphate concentration"
|
||||
},
|
||||
"F6P": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "Fructose-6-phosphate concentration"
|
||||
},
|
||||
"F1,6BP": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "Fructose-1,6-bisphosphate concentration"
|
||||
},
|
||||
"GA3P": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "Glyceraldehyde-3-phosphate concentration"
|
||||
},
|
||||
"1,3BPG": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "1,3-Bisphosphoglycerate concentration"
|
||||
},
|
||||
"3PG": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "3-Phosphoglycerate concentration"
|
||||
},
|
||||
"2PG": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "2-Phosphoglycerate concentration"
|
||||
},
|
||||
"PEP": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "Phosphoenolpyruvate concentration"
|
||||
},
|
||||
"Pyruvate": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "Pyruvate concentration"
|
||||
},
|
||||
"Lactate": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "Lactate concentration"
|
||||
},
|
||||
"CO2": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "Carbon dioxide concentration"
|
||||
},
|
||||
"AcCoA": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "Acetyl-Coenzyme A concentration"
|
||||
},
|
||||
"AminoAcids": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "Total amino acids concentration"
|
||||
},
|
||||
"NucleicAcids": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "Total nucleic acids concentration"
|
||||
},
|
||||
"Nucleotides": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "Total nucleotides concentration"
|
||||
},
|
||||
"NTP": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "Total nucleoside triphosphates concentration"
|
||||
},
|
||||
"dNTP": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "Total deoxynucleoside triphosphates concentration"
|
||||
},
|
||||
"mRNA": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "Total messenger RNA concentration"
|
||||
},
|
||||
"DNA_damage": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "Amount of DNA damage"
|
||||
},
|
||||
"SAM": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "S-Adenosyl methionine concentration"
|
||||
},
|
||||
"MET": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "Methionine concentration"
|
||||
},
|
||||
"SAH": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "S-Adenosyl homocysteine concentration"
|
||||
},
|
||||
"Homocysteine": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "Homocysteine concentration"
|
||||
},
|
||||
"Adenosin": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "Adenosine concentration"
|
||||
},
|
||||
"tRNA": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "Total transfer RNA concentration"
|
||||
},
|
||||
"Aminocylated_tRNA": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "Total aminoacylated tRNA concentration"
|
||||
},
|
||||
"H+": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "Proton concentration"
|
||||
},
|
||||
"Na+": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "Sodium ion concentration"
|
||||
},
|
||||
"K+": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "Potassium ion concentration"
|
||||
},
|
||||
"H2O2": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "Hydrogen peroxide concentration"
|
||||
},
|
||||
"B12": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "Vitamin B12 concentration"
|
||||
},
|
||||
"THF": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "Tetrahydrofolate concentration"
|
||||
},
|
||||
"MethylTHF": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "5-Methyltetrahydrofolate concentration"
|
||||
},
|
||||
"CytoSolCA": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "Cytosolic calcium concentration"
|
||||
},
|
||||
"rERCa": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "Rough endoplasmic reticulum calcium concentration"
|
||||
},
|
||||
"sERCa": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"description": "Smooth endoplasmic reticulum calcium concentration"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
{
|
||||
"$schema": "enzymes.schema.json",
|
||||
"Cytosolic": [
|
||||
{
|
||||
"Name": "HexokinaseI",
|
||||
"Km": {
|
||||
"Value": 0.05,
|
||||
"Min": 0.02,
|
||||
"Max": 0.1
|
||||
},
|
||||
"Vmax": {
|
||||
"Value": 2.5,
|
||||
"Min": 0.5,
|
||||
"Max": 2.5
|
||||
},
|
||||
"Type": "MichelisMenten",
|
||||
"Description": "Phosphorylates glucose to form glucose-6-phosphate."
|
||||
},
|
||||
{
|
||||
"Name": "HexokinaseII",
|
||||
"Km": {
|
||||
"Value": 0.1,
|
||||
"Min": 0.05,
|
||||
"Max": 0.15
|
||||
},
|
||||
"Vmax": {
|
||||
"Value": 5,
|
||||
"Min": 1,
|
||||
"Max": 10
|
||||
},
|
||||
"Type": "MichelisMenten",
|
||||
"Description": "Phosphorylates glucose to form glucose-6-phosphate."
|
||||
},
|
||||
{
|
||||
"Name": "HexokinaseIII",
|
||||
"Km": {
|
||||
"Value": 0.05,
|
||||
"Min": 0.01,
|
||||
"Max": 0.1
|
||||
},
|
||||
"Vmax": {
|
||||
"Value": 1,
|
||||
"Min": 0.1,
|
||||
"Max": 2
|
||||
},
|
||||
"Type": "MichelisMenten",
|
||||
"Description": "Phosphorylates glucose to form glucose-6-phosphate."
|
||||
},
|
||||
{
|
||||
"Name": "HexokinaseIV_Gluko",
|
||||
"Km": {
|
||||
"Value": 8.5,
|
||||
"Min": 7,
|
||||
"Max": 10
|
||||
},
|
||||
"Vmax": {
|
||||
"Value": 5,
|
||||
"Min": 1,
|
||||
"Max": 10
|
||||
},
|
||||
"Hill": {
|
||||
"Value": 1.7,
|
||||
"Min": 1.6,
|
||||
"Max": 1.9
|
||||
},
|
||||
"Type": "Hill",
|
||||
"Description": "Phosphorylates glucose to form glucose-6-phosphate."
|
||||
},
|
||||
{
|
||||
"Name": "Phosphofructokinase",
|
||||
"K0_5": 0.1,
|
||||
"Hill": 2.0,
|
||||
"Vmax": 80.0,
|
||||
"Type": "Hill",
|
||||
"Description": "Catalyzes the phosphorylation of fructose-6-phosphate to fructose-1,6-bisphosphate."
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,136 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft-07/schema",
|
||||
"title": "Enzyme Parameter Schema",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"Name": {
|
||||
"type": "string"
|
||||
},
|
||||
"Vmax": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"Value": {
|
||||
"type": "number",
|
||||
"minimum": 0
|
||||
},
|
||||
"Min": {
|
||||
"type": "number",
|
||||
"minimum": 0
|
||||
},
|
||||
"Max": {
|
||||
"type": "number",
|
||||
"minimum": 0
|
||||
}
|
||||
}
|
||||
},
|
||||
"Type": {
|
||||
"type": "string",
|
||||
"enum": [ "Hill", "MichelisMenten", "Linear" ]
|
||||
},
|
||||
"Substrates": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"Name": { "type": "string" },
|
||||
"Amount": {
|
||||
"type": "number",
|
||||
"minimum": 0
|
||||
},
|
||||
"Km": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"Value": {
|
||||
"type": "number",
|
||||
"minimum": 0
|
||||
},
|
||||
"Min": {
|
||||
"type": "number",
|
||||
"minimum": 0
|
||||
},
|
||||
"Max": {
|
||||
"type": "number",
|
||||
"minimum": 0
|
||||
}
|
||||
}
|
||||
},
|
||||
"Hill": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"Value": {
|
||||
"type": "number",
|
||||
"minimum": 0
|
||||
},
|
||||
"Min": {
|
||||
"type": "number",
|
||||
"minimum": 0
|
||||
},
|
||||
"Max": {
|
||||
"type": "number",
|
||||
"minimum": 0
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"oneOf": [
|
||||
{ "required": [ "Km" ] },
|
||||
{ "required": [ "Hill" ] }
|
||||
]
|
||||
}
|
||||
},
|
||||
"Products": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"Name": { "type": "string" },
|
||||
"Amount": {
|
||||
"type": "number",
|
||||
"minimum": 0
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"ConsumATPtoADP": {
|
||||
"type": "number",
|
||||
"minimum": 0
|
||||
},
|
||||
"ProduceATPfromADP": {
|
||||
"type": "number",
|
||||
"minimum": 0
|
||||
},
|
||||
"ConsumATPtoAMP": {
|
||||
"type": "number",
|
||||
"minimum": 0
|
||||
},
|
||||
"ProduceATPfromAMP": {
|
||||
"type": "number",
|
||||
"minimum": 0
|
||||
},
|
||||
"ConsumeNADtoNADH": {
|
||||
"type": "number",
|
||||
"minimum": 0
|
||||
},
|
||||
"ProduceNADfromNADH": {
|
||||
"type": "number",
|
||||
"minimum": 0
|
||||
},
|
||||
"ConsumeGDPtoGTP": {
|
||||
"type": "number",
|
||||
"minimum": 0
|
||||
},
|
||||
"ProduceGDPfromGTP": {
|
||||
"type": "number",
|
||||
"minimum": 0
|
||||
},
|
||||
"Description": { "type": "string" }
|
||||
},
|
||||
"required": [ "Vmax", "Type", "Name", "Substrates", "Products" ],
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -19,14 +19,14 @@ namespace BaseCellSimulation.Enzyms.Cytosol
|
||||
|
||||
public override void ApplyChanges(CellRessources res, double dt)
|
||||
{
|
||||
double used = Math.Min(rate * dt, res.Res.Carbon.FBP);
|
||||
res.Res.Carbon.FBP -= used;
|
||||
res.Res.Carbon.GAP += 2 * used;
|
||||
double used = Math.Min(rate * dt, res.Res.Carbon.F1_6BP);
|
||||
res.Res.Carbon.F1_6BP -= used;
|
||||
res.Res.Carbon.GA3P += 2 * used;
|
||||
}
|
||||
|
||||
public override void ComputeRate(Resources res)
|
||||
{
|
||||
Michaelis_Menten(res.Carbon.FBP);
|
||||
Michaelis_Menten(res.Carbon.F1_6BP);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,8 +25,8 @@ namespace BaseCellSimulation.Enzyms.Cytosol
|
||||
|
||||
public override void ApplyChanges(CellRessources res, double dt)
|
||||
{
|
||||
double used = Math.Min(rate * dt, Math.Min(res.Res.Carbon.GAP, res.Res.Energy.NAD));
|
||||
res.Res.Carbon.GAP -= used;
|
||||
double used = Math.Min(rate * dt, Math.Min(res.Res.Carbon.GA3P, res.Res.Energy.NAD));
|
||||
res.Res.Carbon.GA3P -= used;
|
||||
res.Res.Carbon.PBG13 += used;
|
||||
res.TransferNADH(used, false);
|
||||
res.Res.Ions.Protons += 1.0 * used;
|
||||
@@ -34,7 +34,7 @@ namespace BaseCellSimulation.Enzyms.Cytosol
|
||||
|
||||
public override void ComputeRate(Resources res)
|
||||
{
|
||||
rate = Vmax * (res.Carbon.GAP / (Km + res.Carbon.GAP)) * (res.Energy.NAD / (Km_NAD + res.Energy.NAD));
|
||||
rate = Vmax * (res.Carbon.GA3P / (Km + res.Carbon.GA3P)) * (res.Energy.NAD / (Km_NAD + res.Energy.NAD));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BaseCellSimulation.Enzyms.Cytosol.Hexokinasen
|
||||
{
|
||||
public class HK1 : Hexokinasis
|
||||
{
|
||||
public HK1() : base()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BaseCellSimulation.Enzyms.Cytosol.Hexokinasen
|
||||
{
|
||||
internal class HK2
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BaseCellSimulation.Enzyms.Cytosol.Hexokinasen
|
||||
{
|
||||
internal class HK3
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BaseCellSimulation.Enzyms.Cytosol.Hexokinasen
|
||||
{
|
||||
internal class HK4_GK
|
||||
{
|
||||
}
|
||||
}
|
||||
+4
-2
@@ -4,14 +4,16 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BaseCellSimulation.Enzyms.Cytosol
|
||||
namespace BaseCellSimulation.Enzyms.Cytosol.Hexokinasen
|
||||
{
|
||||
public class Hexokinasis : InternalEnzym
|
||||
public abstract class Hexokinasis : InternalEnzym
|
||||
{
|
||||
public Hexokinasis() {
|
||||
Km = 0.05;
|
||||
Vmax = 5;
|
||||
|
||||
Type = EnzymType.MichelisMenten;
|
||||
|
||||
KmRange = new(0.01, 0.1);
|
||||
VmaxRange = new(0.5, 20);
|
||||
}
|
||||
@@ -27,7 +27,7 @@ namespace BaseCellSimulation.Enzyms.Cytosol
|
||||
{
|
||||
double used = Math.Min(rate * dt, Math.Min(res.Res.Energy.ATP, res.Res.Carbon.F6P));
|
||||
res.Res.Carbon.F6P -= used;
|
||||
res.Res.Carbon.FBP += used;
|
||||
res.Res.Carbon.F1_6BP += used;
|
||||
res.ConsumeATP(used);
|
||||
res.Res.Ions.Protons += used;
|
||||
}
|
||||
|
||||
@@ -3,37 +3,173 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace BaseCellSimulation.Enzyms
|
||||
{
|
||||
public abstract class Enzym
|
||||
public enum EnzymType
|
||||
{
|
||||
/// <summary>
|
||||
/// mM/S
|
||||
/// </summary>
|
||||
public double Vmax { get; set; }
|
||||
Hill,
|
||||
MichelisMenten,
|
||||
Linear
|
||||
}
|
||||
|
||||
public struct Substrate
|
||||
{
|
||||
public string Name { get; set; }
|
||||
public double Amount { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// mM
|
||||
/// </summary>
|
||||
public double Km { get; set; }
|
||||
[JsonPropertyName("Km")]
|
||||
public ValueRange Km { get; set; }
|
||||
|
||||
public ValueRange VmaxRange { get; protected set; }
|
||||
[JsonPropertyName("Hill")]
|
||||
public ValueRange n_Hill { get; set; }
|
||||
}
|
||||
|
||||
public ValueRange KmRange { get; protected set; }
|
||||
public struct Product
|
||||
{
|
||||
public string Name { get; set; }
|
||||
public double Amount { get; set; }
|
||||
}
|
||||
|
||||
public class Enzym
|
||||
{
|
||||
[JsonPropertyName("Name")]
|
||||
public string Name { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// mM/S
|
||||
/// </summary>
|
||||
[JsonPropertyName("Vmax")]
|
||||
public ValueRange Vmax { get; set; }
|
||||
|
||||
[JsonPropertyName("Type")]
|
||||
public EnzymType Type { get; set; }
|
||||
|
||||
[JsonPropertyName("ConsumATPtoADP")]
|
||||
public double ConsumATPtoADP { get; set; }
|
||||
[JsonPropertyName("ProduceATPfromADP")]
|
||||
public double ProduceATPfromADP { get; set; }
|
||||
[JsonPropertyName("ConsumATPtoAMP")]
|
||||
public double ConsumATPtoAMP { get; set; }
|
||||
[JsonPropertyName("ProduceATPfromAMP")]
|
||||
public double ProduceATPfromAMP { get; set; }
|
||||
[JsonPropertyName("ConsumeNADtoNADH")]
|
||||
public double ConsumeNADtoNADH { get; set; }
|
||||
[JsonPropertyName("ProduceNADfromNADH")]
|
||||
public double ProduceNADfromNADH { get; set; }
|
||||
[JsonPropertyName("ConsumeGDPtoGTP")]
|
||||
public double ConsumeGDPtoGTP { get; set; }
|
||||
[JsonPropertyName("ProduceGDPfromGTP")]
|
||||
public double ProduceGDPfromGTP { get; set; }
|
||||
|
||||
[JsonPropertyName("Substrates")]
|
||||
public List<Substrate> Substrates { get; set; } = new List<Substrate>();
|
||||
|
||||
[JsonPropertyName("Products")]
|
||||
public List<Product> Products { get; set; } = new List<Product>();
|
||||
|
||||
protected double rate;
|
||||
|
||||
protected void Michaelis_Menten(double ressource)
|
||||
|
||||
protected double Michaelis_Menten(CellRessources res)
|
||||
{
|
||||
rate = Michaelis_Menten(ressource, Vmax, Km);
|
||||
double retVar = Vmax.Value;
|
||||
foreach (Substrate substrate in Substrates)
|
||||
{
|
||||
if (!res.Resources.TryGetValue(substrate.Name, out double ResAmount))
|
||||
return 0.0;
|
||||
if (ResAmount <= 0.0)
|
||||
return 0.0;
|
||||
|
||||
retVar *= ResAmount / (substrate.Km.Value + ResAmount);
|
||||
}
|
||||
|
||||
protected double Michaelis_Menten(double consumable,double vmax, double km)
|
||||
{
|
||||
return (vmax * consumable) / (km + consumable);
|
||||
return retVar;
|
||||
}
|
||||
|
||||
public abstract void ApplyChanges(CellRessources res, double dt);
|
||||
protected double HillEquation(CellRessources res)
|
||||
{
|
||||
double retVar = Vmax.Value;
|
||||
foreach (Substrate substrate in Substrates)
|
||||
{
|
||||
if (!res.Resources.TryGetValue(substrate.Name, out double ResAmount))
|
||||
return 0.0;
|
||||
if (ResAmount <= 0.0)
|
||||
return 0.0;
|
||||
|
||||
|
||||
retVar *= Math.Pow(ResAmount, substrate.n_Hill.Value) / (Math.Pow(substrate.Km.Value, substrate.n_Hill.Value) + Math.Pow(ResAmount, substrate.n_Hill.Value));
|
||||
}
|
||||
|
||||
return retVar;
|
||||
}
|
||||
|
||||
public void ApplyChanges(CellRessources res, double dt)
|
||||
{
|
||||
double delta = rate * dt;
|
||||
foreach (Substrate substrate in Substrates)
|
||||
{
|
||||
if (res.Resources.TryGetValue(substrate.Name, out double oldVal))
|
||||
{
|
||||
delta = Math.Min(delta, oldVal / substrate.Amount);
|
||||
}
|
||||
}
|
||||
foreach (Substrate substrate in Substrates)
|
||||
{
|
||||
if (res.Resources.TryGetValue(substrate.Name, out double oldVal))
|
||||
{
|
||||
res.Resources[substrate.Name] = oldVal - substrate.Amount * delta;
|
||||
}
|
||||
}
|
||||
foreach (Product product in Products)
|
||||
{
|
||||
if (res.Resources.ContainsKey(product.Name))
|
||||
{
|
||||
res.Resources[product.Name] += product.Amount * delta;
|
||||
}
|
||||
else
|
||||
{
|
||||
res.Resources[product.Name] = product.Amount * delta;
|
||||
}
|
||||
}
|
||||
|
||||
if(ConsumATPtoADP > 0.0)
|
||||
res.ConsumeATP(ConsumATPtoADP * delta, false);
|
||||
if(ProduceATPfromADP > 0.0)
|
||||
res.RegenerateATP(ProduceATPfromADP * delta, false);
|
||||
if(ConsumATPtoAMP > 0.0)
|
||||
res.ConsumeATP(ConsumATPtoAMP * delta, true);
|
||||
if(ProduceATPfromAMP > 0.0)
|
||||
res.RegenerateATP(ProduceATPfromAMP * delta, true);
|
||||
if(ConsumeNADtoNADH > 0.0)
|
||||
res.TransferNADH(ConsumeNADtoNADH * delta, true);
|
||||
if(ProduceNADfromNADH > 0.0)
|
||||
res.TransferNADH(ProduceNADfromNADH * delta, false);
|
||||
if(ConsumeGDPtoGTP > 0.0)
|
||||
res.TransferGTP(ConsumeGDPtoGTP * delta, true);
|
||||
if(ProduceGDPfromGTP > 0.0)
|
||||
res.TransferGTP(ProduceGDPfromGTP * delta, false);
|
||||
}
|
||||
|
||||
public void ComputeRate(CellRessources res)
|
||||
{
|
||||
switch (Type)
|
||||
{
|
||||
case EnzymType.Hill:
|
||||
rate = HillEquation(res);
|
||||
break;
|
||||
case EnzymType.MichelisMenten:
|
||||
rate = Michaelis_Menten(res);
|
||||
break;
|
||||
case EnzymType.Linear:
|
||||
rate = Vmax.Value * res.Resources[Substrates[0].Name];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public abstract class InternalEnzym : Enzym
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
using System;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace BaseCellSimulation
|
||||
{
|
||||
@@ -9,6 +11,43 @@ namespace BaseCellSimulation
|
||||
{
|
||||
public Resources Res;
|
||||
public EnviromentState Env = new();
|
||||
[JsonPropertyName("energy")]
|
||||
public EnergyPool energyPool;
|
||||
public Dictionary<string, double> Resources => new Dictionary<string, double>();
|
||||
|
||||
public static CellRessources LoadRessources(string jsonPath)
|
||||
{
|
||||
string json = File.ReadAllText(jsonPath);
|
||||
using var doc = JsonDocument.Parse(json);
|
||||
var root = doc.RootElement;
|
||||
var result = new CellRessources();
|
||||
|
||||
// deserialice energy
|
||||
if (root.TryGetProperty("energy", out JsonElement energyElement))
|
||||
{
|
||||
result.energyPool = JsonSerializer.Deserialize<EnergyPool>(energyElement.GetRawText());
|
||||
}
|
||||
|
||||
foreach(var property in root.EnumerateObject())
|
||||
{
|
||||
if (property.NameEquals("energy"))
|
||||
continue; // already handled
|
||||
|
||||
if (property.Value.ValueKind == JsonValueKind.Number)
|
||||
{
|
||||
result.Resources[property.Name] = property.Value.GetDouble();
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static void SaveRessources(CellRessources ressources, string jsonPath)
|
||||
{
|
||||
var options = new JsonSerializerOptions { WriteIndented = true };
|
||||
string json = JsonSerializer.Serialize(ressources, options);
|
||||
File.WriteAllText(jsonPath, json);
|
||||
}
|
||||
|
||||
// pH in mM-basiertem Hilfsformat (vereinfachte Umrechnung):
|
||||
public double pH_in => 3.0 - Math.Log10(Res.Ions.Protons + 1e-12);
|
||||
@@ -117,6 +156,22 @@ namespace BaseCellSimulation
|
||||
}
|
||||
}
|
||||
|
||||
public void TransferGTP(double amount, bool toGDP)
|
||||
{
|
||||
if (toGDP)
|
||||
{
|
||||
if (Res.Energy.GTP < amount) amount = Res.Energy.GTP;
|
||||
Res.Energy.GTP -= amount;
|
||||
Res.Energy.GDP += amount;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (Res.Energy.GDP < amount) amount = Res.Energy.GDP;
|
||||
Res.Energy.GDP -= amount;
|
||||
Res.Energy.GTP += amount;
|
||||
}
|
||||
}
|
||||
|
||||
// --- Initialisierung mit plausiblen Startwerten ---
|
||||
/// <summary>
|
||||
/// Erzeugt eine CellRessources-Instanz mit vernünftigen Startwerten (grobe physiologische Annahmen).
|
||||
@@ -143,8 +198,8 @@ namespace BaseCellSimulation
|
||||
cr.Res.Carbon.Glucose = 1.0; // mM intrazellulär (abhängig von Aufnahme)
|
||||
cr.Res.Carbon.G6P = 0.05;
|
||||
cr.Res.Carbon.F6P = 0.02;
|
||||
cr.Res.Carbon.FBP = 0.005;
|
||||
cr.Res.Carbon.GAP = 0.01;
|
||||
cr.Res.Carbon.F1_6BP = 0.005;
|
||||
cr.Res.Carbon.GA3P = 0.01;
|
||||
cr.Res.Carbon.PBG13 = 0.005;
|
||||
cr.Res.Carbon.PG3 = 0.02;
|
||||
cr.Res.Carbon.PG2 = 0.01;
|
||||
@@ -229,34 +284,114 @@ namespace BaseCellSimulation
|
||||
/// <summary>Energiemengen: ATP/ADP/AMP + NAD/NADH + GTP/GDP</summary>
|
||||
public struct EnergyPool
|
||||
{
|
||||
/// <summary>
|
||||
/// Adenosine-triphosphate
|
||||
/// </summary>
|
||||
public double ATP;
|
||||
/// <summary>
|
||||
/// Adenosine diphosphate
|
||||
/// </summary>
|
||||
public double ADP;
|
||||
/// <summary>
|
||||
/// Adenosine monophosphat
|
||||
/// </summary>
|
||||
public double AMP;
|
||||
|
||||
/// <summary>
|
||||
/// Nicotinamide adenine dinucleotide
|
||||
/// </summary>
|
||||
public double NAD;
|
||||
|
||||
/// <summary>
|
||||
/// Nicotinamide adenine dinucleotide
|
||||
/// </summary>
|
||||
public double NADH;
|
||||
|
||||
/// <summary>
|
||||
/// Nicotinamide adenine dinucleotide phosphate
|
||||
/// </summary>
|
||||
public double NADPH;
|
||||
|
||||
/// <summary>
|
||||
/// Guanosintriphosphat
|
||||
/// </summary>
|
||||
public double GTP;
|
||||
public double GDP { get; internal set; }
|
||||
|
||||
/// <summary>
|
||||
/// Guanosindiphosphat
|
||||
/// </summary>
|
||||
public double GDP;
|
||||
|
||||
/// <summary>
|
||||
/// inorganic phosphate
|
||||
/// </summary>
|
||||
public double Pi;
|
||||
|
||||
/// <summary>
|
||||
/// Pyrophosphat
|
||||
/// </summary>
|
||||
public double PPi;
|
||||
}
|
||||
|
||||
/// <summary>Inorganische Phosphate</summary>
|
||||
public struct Phosphate
|
||||
{
|
||||
public double Pi; // anorganisches Phosphat
|
||||
public double PPi; // Pyrophosphat
|
||||
/// <summary>
|
||||
/// inorganic phosphate
|
||||
/// </summary>
|
||||
public double Pi;
|
||||
|
||||
/// <summary>
|
||||
/// Pyrophosphat
|
||||
/// </summary>
|
||||
public double PPi;
|
||||
}
|
||||
|
||||
/// <summary>Kohlenstoff- / Glykolyse-Intermediaten</summary>
|
||||
public struct CarbonPool
|
||||
{
|
||||
public double Glucose;
|
||||
|
||||
/// <summary>
|
||||
/// Glucose-6-phosphate
|
||||
/// </summary>
|
||||
public double G6P;
|
||||
|
||||
/// <summary>
|
||||
/// Fructose-6-phosphate
|
||||
/// </summary>
|
||||
public double F6P;
|
||||
public double FBP;
|
||||
public double GAP;
|
||||
|
||||
/// <summary>
|
||||
/// Fructose 1,6-bisphosphate
|
||||
/// </summary>
|
||||
public double F1_6BP;
|
||||
|
||||
/// <summary>
|
||||
/// Glycerinaldehyd-3-phosphat
|
||||
/// </summary>
|
||||
public double GA3P;
|
||||
|
||||
/// <summary>
|
||||
/// 1,3-Bisphosphoglycerat
|
||||
/// </summary>
|
||||
public double PBG13;
|
||||
|
||||
/// <summary>
|
||||
/// 3-Phosphoglycerat
|
||||
/// </summary>
|
||||
public double PG3;
|
||||
|
||||
/// <summary>
|
||||
/// 2-Phosphoglycerat
|
||||
/// </summary>
|
||||
public double PG2;
|
||||
|
||||
/// <summary>
|
||||
/// Phosphoenolpyruvat
|
||||
/// </summary>
|
||||
public double PEP;
|
||||
|
||||
public double Pyruvate;
|
||||
public double Lactate;
|
||||
public double CO2;
|
||||
@@ -271,14 +406,35 @@ namespace BaseCellSimulation
|
||||
public double Waste;
|
||||
public double NucleicAcids;
|
||||
public double Nucleotides;
|
||||
|
||||
/// <summary>
|
||||
/// Nukleosidtriphosphate
|
||||
/// </summary>
|
||||
public double NTP;
|
||||
|
||||
/// <summary>
|
||||
/// Desoxyribonukleotidtriphosphate
|
||||
/// </summary>
|
||||
public double dNTP;
|
||||
public double mRNA;
|
||||
public double DNA_damage;
|
||||
public double AcetylCoA;
|
||||
|
||||
/// <summary>
|
||||
/// S-Adenosylmethionin
|
||||
/// </summary>
|
||||
public double SAM;
|
||||
|
||||
/// <summary>
|
||||
/// Methionine
|
||||
/// </summary>
|
||||
public double MET;
|
||||
|
||||
/// <summary>
|
||||
/// S-Adenosylhomocystein
|
||||
/// </summary>
|
||||
public double SAH;
|
||||
|
||||
public double Homocystein;
|
||||
public double Adenosin;
|
||||
internal double tRNA;
|
||||
@@ -289,9 +445,22 @@ namespace BaseCellSimulation
|
||||
public struct IonPool
|
||||
{
|
||||
public double Protons; // H+ (vereinfachte Einheit mM)
|
||||
public double ROS; // reactive oxygen species
|
||||
|
||||
/// <summary>
|
||||
/// reactive oxygen species
|
||||
/// </summary>
|
||||
public double ROS;
|
||||
|
||||
/// <summary>
|
||||
/// NAtrium-Ionen
|
||||
/// </summary>
|
||||
public double Na;
|
||||
|
||||
/// <summary>
|
||||
/// Kalium-Ionen
|
||||
/// </summary>
|
||||
public double K;
|
||||
|
||||
public double H2O2;
|
||||
}
|
||||
|
||||
@@ -302,6 +471,9 @@ namespace BaseCellSimulation
|
||||
|
||||
public struct Folates
|
||||
{
|
||||
/// <summary>
|
||||
/// Tetrahydrofolsäure
|
||||
/// </summary>
|
||||
public double THF { get; internal set; }
|
||||
public double MethylTHF { get; internal set; }
|
||||
}
|
||||
|
||||
@@ -3,18 +3,23 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace BaseCellSimulation
|
||||
{
|
||||
public struct ValueRange
|
||||
{
|
||||
public double Start;
|
||||
public double End;
|
||||
[JsonPropertyName("Value")]
|
||||
public double Value;
|
||||
[JsonPropertyName("Min")]
|
||||
public double Min;
|
||||
[JsonPropertyName("Max")]
|
||||
public double Max;
|
||||
|
||||
public ValueRange(double start, double end)
|
||||
{
|
||||
Start = start;
|
||||
End = end;
|
||||
Min = start;
|
||||
Max = end;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user