|
58 | 58 | %% ======================================================================== |
59 | 59 | % Look for all proton symport/antiport reactions and make sure that they |
60 | 60 | % only enter the cell. |
61 | | -HcytIdx = getIndexes(model,'s_0794','mets'); % H+[c] |
62 | | -HextIdx = getIndexes(model,'s_0796','mets'); % H+[e] |
63 | | - |
64 | | -symporterIDs = find(model.S(HcytIdx,:) & model.S(HextIdx,:)); |
65 | | -for i = 1:length(symporterIDs) |
66 | | - if strcmp(model.rxns(symporterIDs(i)), 'r_1258') |
67 | | - % Ignore the sodium transporter, without it, the model does not work |
68 | | - continue |
69 | | - end |
70 | | - if model.S(HextIdx,symporterIDs(i))<0 |
71 | | - model.lb(symporterIDs(i))=0; |
72 | | - else |
73 | | - model.ub(symporterIDs(i))=0; |
74 | | - end |
75 | | -end |
| 61 | +% HcytIdx = getIndexes(model,'s_0794','mets'); % H+[c] |
| 62 | +% HextIdx = getIndexes(model,'s_0796','mets'); % H+[e] |
| 63 | +% |
| 64 | +% symporterIDs = find(model.S(HcytIdx,:) & model.S(HextIdx,:)); |
| 65 | +% for i = 1:length(symporterIDs) |
| 66 | +% if strcmp(model.rxns(symporterIDs(i)), 'r_1258') |
| 67 | +% % Ignore the sodium transporter, without it, the model does not work |
| 68 | +% continue |
| 69 | +% end |
| 70 | +% if model.S(HextIdx,symporterIDs(i))<0 % If defined H+[e] => H+[c] |
| 71 | +% model.lb(symporterIDs(i))=0; |
| 72 | +% else % If defined H+[c] => H+[e] |
| 73 | +% model.ub(symporterIDs(i))=0; |
| 74 | +% end |
| 75 | +% end |
76 | 76 |
|
77 | 77 | %% ======================================================================== |
78 | 78 | % This section balances reactions and ensures that a correct molecular |
|
97 | 97 | model.metCharges(strcmp(model.mets,'s_3775'))=1; |
98 | 98 |
|
99 | 99 | % Balance the charge of all biomass component pseudo reactions by adding the required amount of H+ |
100 | | -Hidx = find(strcmp(model.mets,'s_0794')); |
101 | | -% Protein |
102 | | -rxnIdx = strcmp(model.rxns,'r_4047'); |
103 | | -metsStoch = model.S(:,rxnIdx); |
104 | | -metsStoch(Hidx) = 0; |
105 | | -model.S(Hidx,rxnIdx) = -sum(metsStoch.*model.metCharges,'omitnan'); |
106 | | -% RNA |
107 | | -rxnIdx = strcmp(model.rxns,'r_4049'); |
108 | | -metsStoch = model.S(:,rxnIdx); |
109 | | -metsStoch(Hidx) = 0; |
110 | | -model.S(Hidx,rxnIdx) = -sum(metsStoch.*model.metCharges,'omitnan'); |
111 | | -% DNA |
112 | | -rxnIdx = strcmp(model.rxns,'r_4050'); |
113 | | -metsStoch = model.S(:,rxnIdx); |
114 | | -metsStoch(Hidx) = 0; |
115 | | -model.S(Hidx,rxnIdx) = -sum(metsStoch.*model.metCharges,'omitnan'); |
116 | | -% Cofactor |
117 | | -rxnIdx = strcmp(model.rxns,'r_4598'); |
118 | | -metsStoch = model.S(:,rxnIdx); |
119 | | -metsStoch(Hidx) = 0; |
120 | | -model.S(Hidx,rxnIdx) = -sum(metsStoch.*model.metCharges,'omitnan'); |
121 | | -% Ion |
122 | | -rxnIdx = strcmp(model.rxns,'r_4599'); |
123 | | -metsStoch = model.S(:,rxnIdx); |
124 | | -metsStoch(Hidx) = 0; |
125 | | -model.S(Hidx,rxnIdx) = -sum(metsStoch.*model.metCharges,'omitnan'); |
| 100 | +model.S(find(strcmp(model.mets,'s_0794')),strcmp(model.rxns,'r_4047')) = -sum(model.S(:,strcmp(model.rxns,'r_4047')).*model.metCharges,'omitnan'); % Protein |
| 101 | +model.S(find(strcmp(model.mets,'s_0794')),strcmp(model.rxns,'r_4049')) = -sum(model.S(:,strcmp(model.rxns,'r_4049')).*model.metCharges,'omitnan'); % RNA |
| 102 | +model.S(find(strcmp(model.mets,'s_0794')),strcmp(model.rxns,'r_4050')) = -sum(model.S(:,strcmp(model.rxns,'r_4050')).*model.metCharges,'omitnan'); % DNA |
| 103 | +model.S(find(strcmp(model.mets,'s_0794')),strcmp(model.rxns,'r_4598')) = -sum(model.S(:,strcmp(model.rxns,'r_4598')).*model.metCharges,'omitnan'); % Cofactor |
| 104 | +model.S(find(strcmp(model.mets,'s_0794')),strcmp(model.rxns,'r_4599')) = -sum(model.S(:,strcmp(model.rxns,'r_4599')).*model.metCharges,'omitnan'); % Ion |
126 | 105 |
|
127 | 106 | % Special case for SLIME rxns |
128 | 107 | model.metCharges(find(contains(model.metNames,'chain')+contains(model.metNames,'backbone'))) = 0; |
|
165 | 144 | % This section focuses on individual reactions that have the wrong |
166 | 145 | % reversibility/direction/cofactor or should be completley removed |
167 | 146 |
|
| 147 | +% Make GCY1 irreversible. Has a positive DeltaGo' (+20.9) and is part of a |
| 148 | +% transhydrogenase cycle (NADH -> NADPH) at the cost of one ATP. High |
| 149 | +% cytosolic NADPH/NADP ratio makes it thermodynamically infeasible that it |
| 150 | +% runs in reverse direction. |
| 151 | +model = setParam(model,'ub','r_0487',0); |
| 152 | + |
168 | 153 | % The mitochondrial ATP synthase is able to run in reverse, which occurs |
169 | 154 | % in anaerobic conditions |
170 | 155 | model = setParam(model,'lb','r_0226',-1000); |
|
197 | 182 | model = setParam(model,'lb',{'r_4723','r_4724','r_4725'},0); |
198 | 183 | model = setParam(model,'lb','r_4460',0); |
199 | 184 |
|
| 185 | +% While r_0013 was elementary balanced, it was not charged balanced. The |
| 186 | +% reaction mechanism was incorrect. Corrected to mimic a combination of |
| 187 | +% MetaCyc rxns: R83-RXN and R147-RXN; or KEGG rxns: R07364 and R07395. |
| 188 | +model = changeRxns(model,'r_0013','5-(methylsulfanyl)-2,3-dioxopentyl phosphate[c] + H2O[c] + oxygen[c] => 4-methylthio-2-oxobutanoate[c] + formate[c] + 2 H+[c] + phosphate[c]',3); |
| 189 | + |
| 190 | +% Represent ACP with formula "RHS" |
| 191 | +model.metFormulas(getIndexes(model,'s_1845','mets')) = {'RHS'}; |
| 192 | + |
| 193 | +% [~,metFormulae] = computeMetFormulae(model,'metMwRange','s_0338','fillMets','none') |
| 194 | +% model.metFormulas(getIndexes(model,'s_0329','mets')) = {'C17H28NO17P'}; |
| 195 | +% model.metFormulas(getIndexes(model,'s_0330','mets')) = {'C33H58NO18P'}; |
| 196 | +% model.metFormulas(getIndexes(model,'s_0331','mets')) = {'C19H30NO18P'}; |
| 197 | +% model.metFormulas(getIndexes(model,'s_0334','mets')) = {'C39H68NO23P'}; |
| 198 | +% model.metFormulas(getIndexes(model,'s_0337','mets')) = {'C44H78N2O27P2'}; |
| 199 | +% model.metFormulas(getIndexes(model,'s_0338','mets')) = {'C41H38N2O41P3'}; |
| 200 | +% model.metFormulas(getIndexes(model,'s_0339','mets')) = {'C50H88N2O32P2'}; |
| 201 | + |
| 202 | +% Copy annotations between same metabolites in separate compartments |
| 203 | +model.metFormulas(getIndexes(model,'s_4211','mets')) = model.metFormulas(getIndexes(model,'s_2885','mets')); |
| 204 | +model.metCharges(getIndexes(model,'s_4211','mets')) = model.metCharges(getIndexes(model,'s_2885','mets')); |
| 205 | +model.metFormulas(getIndexes(model,'s_4209','mets')) = model.metFormulas(getIndexes(model,'s_3826','mets')); |
| 206 | +model.metCharges(getIndexes(model,'s_4209','mets')) = model.metCharges(getIndexes(model,'s_3826','mets')); |
| 207 | +model.metMiriams(getIndexes(model,'s_4209','mets')) = model.metMiriams(getIndexes(model,'s_3826','mets')); |
| 208 | + |
| 209 | +% r_4323 is an less precise half-reaction of r_4324 and will be removed |
| 210 | +model = removeReactions(model,'r_4323',true,true,true); |
| 211 | + |
| 212 | +% r_4325 represents scaffolding during [Fe-S]-cluster synthesis, not a |
| 213 | +% metabolic process, and will therefore be removed |
| 214 | +model = removeReactions(model,'r_4325',true,true,true); |
| 215 | + |
| 216 | +% r_0229 |
| 217 | +%model = changeRxns(model,'r_0229','dethiobiotin[c] + polysulphur[c] <=> biotin[c] + 2 H+[c]',2) |
| 218 | +%dethiobiotin[c] + hydrogen sulfide[c] + 2 S-adenosyl-L-methionine[c] + 2 H+[c] <=> biotin[c] + 2 L-methionine[c] + 2 5'-Deoxyadenosine |
200 | 219 | %% ======================================================================== |
201 | 220 | % Condition-specific gene expression. These can be enabled with scripts |
202 | 221 | % Glycine cleavage only active when glycine is used as nitrogen source |
|
214 | 233 | model = setParam(model,'eq',{'r_0252'},0); |
215 | 234 | model.rxnNotes(ismember(model.rxns,{'r_0252'})) = {'Only active if growth medium contains carnitine'}; |
216 | 235 |
|
| 236 | +%% Rescale protein fraction so that biomass sums up to 1 g/gDCW |
| 237 | +% Protein is the largest fraction, so increasing |
| 238 | +[X,P] = sumBioMass(model, false); |
| 239 | +fprintf('Current biomass adds up to %.4f g/g. Protein fraction is scaled from %.4f to %.4f g/g to reach 1 g/g total biomass.\n', X, P, (1-X)+P) |
| 240 | +model = scaleBioMass(model,'biomass',1,'protein'); |
| 241 | + |
| 242 | +%% Degree of reduction of biomass |
| 243 | +% To align the degree of reduction of S. cerevisiae biomass to the |
| 244 | +% published value of 4.2 /Cmol (Lange and Heijnen, 2001, 10.1002/bit.10054) |
| 245 | + |
| 246 | +DR = 75; % 3mmol (g CDW)−1s |
| 247 | +metIdx = getIndexes(model,{'s_1212','s_1207','s_0794'},'mets'); % NADPH[c], NADP[c], H+[c] |
| 248 | +bioIdx = getIndexes(model,'r_4041','rxns'); |
| 249 | + |
| 250 | +currCoeff = full(model.S(metIdx,bioIdx)); % Gather the current coefficients |
| 251 | +model.S(metIdx,bioIdx) = currCoeff + [-DR; +DR; -DR]; |
| 252 | + |
217 | 253 | %% ======================================================================== |
218 | 254 |
|
219 | 255 | %% DO NOT CHANGE OR REMOVE THE CODE BELOW THIS LINE. |
|
0 commit comments