|
19 | 19 | % %dataDir=fullfile(pwd(),'..','data','modelCuration','v9.1.0'); % No dataDir required for these curations |
20 | 20 | cd modelCuration |
21 | 21 |
|
22 | | -GAM = 55; |
23 | | - % P = 0.461; %Data from Nissen et al. 1997 |
24 | | - % NGAM = 1; |
25 | | - % |
26 | | - % model_an = changeGAM(model_an,GAM,NGAM); |
27 | | - |
28 | 22 | %% ======================================================================== |
29 | 23 | % We blocked MDH2 in anaerobic conditions (see details in the anerobicModel |
30 | 24 | % script) Experiments suggest that AKG needs to produced inside the |
|
64 | 58 | %% ======================================================================== |
65 | 59 | % Look for all proton symport/antiport reactions and make sure that they |
66 | 60 | % only enter the cell. |
67 | | -% HcytIdx = getIndexes(model,'s_0794','mets'); % H+[c] |
68 | | -% HextIdx = getIndexes(model,'s_0796','mets'); % H+[e] |
69 | | -% |
70 | | -% symporterIDs = transpose(find(model.S(HcytIdx,:) & model.S(HextIdx,:))); |
71 | | -% for i = 1:length(symporterIDs) |
72 | | -% if ismember(model.rxns(symporterIDs(i)), {'r_1258'}) |
73 | | -% % Ignore the sodium transporter, without it, the model does not work |
74 | | -% continue |
75 | | -% end |
76 | | -% if model.S(HextIdx,symporterIDs(i))<0 % If defined H+[e] => H+[c] |
77 | | -% model.lb(symporterIDs(i))=0; |
78 | | -% else % If defined H+[c] => H+[e] |
79 | | -% model.ub(symporterIDs(i))=0; |
80 | | -% end |
81 | | -% end |
| 61 | +HcytIdx = getIndexes(model,'s_0794','mets'); % H+[c] |
| 62 | +HextIdx = getIndexes(model,'s_0796','mets'); % H+[e] |
| 63 | + |
| 64 | +symporterIDs = transpose(find(model.S(HcytIdx,:) & model.S(HextIdx,:))); |
| 65 | +for i = 1:length(symporterIDs) |
| 66 | + if ismember(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 |
82 | 76 |
|
83 | 77 | %% ======================================================================== |
84 | 78 | % This section balances reactions and ensures that a correct molecular |
|
131 | 125 | model.metCharges(strcmp(model.mets,'s_3906'))=-1; |
132 | 126 | model.metCharges(strcmp(model.mets,'s_4263'))=-1; |
133 | 127 |
|
| 128 | +% Now manually balance some additional reactions |
| 129 | + |
134 | 130 | % Balance the reactions 'r_0774' and 'r_0775', 'NAPRtase' by removing H+ |
135 | 131 | % consumption and adding a H2O as a reactant |
136 | 132 | model.S(find(strcmp(model.mets,'s_0794')),strcmp(model.rxns,'r_0774'))=0; % Cytosolic |
|
154 | 150 | % by correcting H+ |
155 | 151 | model.S(find(strcmp(model.mets,'s_0801')),strcmp(model.rxns,'r_2232')) = 1; |
156 | 152 |
|
157 | | -% Correct product and reactant of r_2236 and r_2254, part of peroxisomal |
158 | | -% beta-oxidation, where the intermediate metabolite should be |
159 | | -% trans-but-2-enoyl-CoA, not but-2-enoyl-CoA |
160 | | -metsToAdd.metNames = 'trans-but-2-enoyl-CoA'; |
161 | | -metsToAdd.compartments = 'p'; |
162 | | -metsToAdd.metSmiles = 'C/C=C/C(=O)SCCNC(=O)CCNC(=O)[C@@H](C(C)(C)COP(=O)(O)OP(=O)(O)OC[C@@H]1[C@H]([C@H]([C@@H](O1)N2C=NC3=C(N=CN=C32)N)O)OP(=O)(O)O)O'; |
163 | | -metsToAdd.metFormulas = 'C25H36N7O17P3S'; |
164 | | -metsToAdd.metCharges = -4; |
165 | | -metsToAdd.metMiriams{1} = struct('name',{{'chebi';'metanetx.chemical'}},... |
166 | | - 'value',{{'CHEBI:50998';'MNXM1364409'}}); |
167 | | - |
168 | | -model = addMets(model,metsToAdd,false,'s_'); |
169 | | -model = removeMets(model, {'but-2-enoyl-CoA'}, true, true, true, true); |
170 | | -model.S(end,ismember(model.rxns,'r_2236')) = 1; |
171 | | -model.S(end,ismember(model.rxns,'r_2254')) = -1; |
172 | | -model.S(find(strcmp(model.mets,'s_0801')),ismember(model.rxns,'r_2236')) = 0; |
173 | | -model.S(find(strcmp(model.mets,'s_0801')),ismember(model.rxns,'r_2254')) = 0; |
174 | | -model.S(find(strcmp(model.mets,'s_0801')),ismember(model.rxns,'r_2284')) = +4; |
175 | | - |
176 | 153 | % Balance the reaction r_4629, 'alcohol acyltransferase (hexanoyl-CoA)' |
177 | 154 | % by adding a proton as product |
178 | 155 | model.S(find(strcmp(model.mets,'s_0799')),strcmp(model.rxns,'r_4629')) = +4; |
|
201 | 178 | % by adding a proton as product |
202 | 179 | model.S(find(strcmp(model.mets,'s_0794')),strcmp(model.rxns,'r_4707'))=1; |
203 | 180 |
|
204 | | - |
205 | 181 | %% ======================================================================== |
206 | 182 | % This section focuses on individual reactions that have the wrong |
207 | 183 | % reversibility/direction/cofactor or should be completley removed |
|
255 | 231 | % MetaCyc rxns: R83-RXN and R147-RXN; or KEGG rxns: R07364 and R07395. |
256 | 232 | 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); |
257 | 233 |
|
| 234 | +% Correct product and reactant of r_2236 and r_2254, part of peroxisomal |
| 235 | +% beta-oxidation, where the intermediate metabolite should be |
| 236 | +% trans-but-2-enoyl-CoA, not but-2-enoyl-CoA |
| 237 | +metsToAdd.metNames = 'trans-but-2-enoyl-CoA'; |
| 238 | +metsToAdd.compartments = 'p'; |
| 239 | +metsToAdd.metSmiles = 'C/C=C/C(=O)SCCNC(=O)CCNC(=O)[C@@H](C(C)(C)COP(=O)(O)OP(=O)(O)OC[C@@H]1[C@H]([C@H]([C@@H](O1)N2C=NC3=C(N=CN=C32)N)O)OP(=O)(O)O)O'; |
| 240 | +metsToAdd.metFormulas = 'C25H36N7O17P3S'; |
| 241 | +metsToAdd.metCharges = -4; |
| 242 | +metsToAdd.metMiriams{1} = struct('name',{{'chebi';'metanetx.chemical'}},... |
| 243 | + 'value',{{'CHEBI:50998';'MNXM1364409'}}); |
| 244 | + |
| 245 | +model = addMets(model,metsToAdd,false,'s_'); |
| 246 | +model = removeMets(model, {'but-2-enoyl-CoA'}, true, true, true, true); |
| 247 | +model.S(end,ismember(model.rxns,'r_2236')) = 1; |
| 248 | +model.S(end,ismember(model.rxns,'r_2254')) = -1; |
| 249 | +model.S(find(strcmp(model.mets,'s_0801')),ismember(model.rxns,'r_2236')) = 0; |
| 250 | +model.S(find(strcmp(model.mets,'s_0801')),ismember(model.rxns,'r_2254')) = 0; |
| 251 | +model.S(find(strcmp(model.mets,'s_0801')),ismember(model.rxns,'r_2284')) = +4; |
| 252 | + |
258 | 253 | % Represent ACP with formula "RHS" |
259 | 254 | model.metFormulas(getIndexes(model,'s_1845','mets')) = {'RHS'}; |
260 | 255 |
|
|
293 | 288 | % alkanesulfonate, with unbalanced r_4706 |
294 | 289 | model = removeReactions(model,{'r_4704','r_4706','r_4709'},true,true,true); |
295 | 290 |
|
296 | | -% r_0229 |
297 | | -%model = changeRxns(model,'r_0229','dethiobiotin[c] + polysulphur[c] <=> biotin[c] + 2 H+[c]',2) |
298 | | -%dethiobiotin[c] + hydrogen sulfide[c] + 2 S-adenosyl-L-methionine[c] + 2 H+[c] <=> biotin[c] + 2 L-methionine[c] + 2 5'-Deoxyadenosine |
299 | | - |
300 | 291 | %% ======================================================================== |
301 | 292 | % Condition-specific gene expression. These can be enabled with scripts |
302 | 293 | % Glycine cleavage only active when glycine is used as nitrogen source |
|
318 | 309 | % Protein is the largest fraction, so increasing |
319 | 310 | [X,P] = sumBioMass(model, false); |
320 | 311 | 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) |
321 | | -model = scaleBioMass(model,'biomass',1,'protein'); |
| 312 | +model = scaleBioMass(model,'protein',(1-X)+P); |
322 | 313 |
|
323 | 314 | %% Degree of reduction of biomass |
324 | 315 | % To align the degree of reduction of S. cerevisiae biomass to the |
|
0 commit comments