Curate lipid pools - #130
Conversation
|
This PR should not be merged until after #123. |
|
Ok, after some small revisions and re-checking, this PR is now ready. |
proteins, prRules, rxnProtMat, priorCombiningGrRules
|
I completely agree to remove these four fields. But for the moment it might be better to keep this |
|
@Hao-Chalmers Ok, I have revised the |
haowang-bioinfo
left a comment
There was a problem hiding this comment.
Would be nice to specify the changes in PR description, now it’s too vague.
| % load new metabolite information from file | ||
| fid = fopen('../../ComplementaryData/modelCuration/lipidPools/newLipidPoolMets.tsv'); | ||
| metData = textscan(fid,'%s%s%s%s%d%s%s%s%s%s%s','Delimiter','\t','Headerlines',1); | ||
| fclose(fid); | ||
|
|
||
| % verify that none of the metabolite IDs (ignoring compartment) exist in the current model | ||
| if any(startsWith(ihuman.mets, regexprep(metData{1},'.$',''))) | ||
| error('One or more metabolite IDs to be added already exist in the model.'); | ||
| end | ||
|
|
||
| % add metabolites to the model | ||
| metsToAdd = {}; | ||
| metsToAdd.mets = metData{1}; | ||
| metsToAdd.metNames = metData{2}; | ||
| metsToAdd.compartments = metData{3}; | ||
| metsToAdd.metFormulas = metData{4}; | ||
| metsToAdd.metCharges = metData{5}; | ||
| ihuman = addMets(ihuman, metsToAdd); |
There was a problem hiding this comment.
This section can be encapsulated into a function and reused for similar cases. But we can do this later.
| %% Add new pool reactions | ||
|
|
||
| % load new reaction information from file | ||
| fid = fopen('../../ComplementaryData/modelCuration/lipidPools/newLipidPoolRxns.tsv'); | ||
| rxnData = textscan(fid,'%s%s%s%s','Delimiter','\t','Headerlines',1); | ||
| fclose(fid); | ||
|
|
||
| % verify that none of the reactions exist in the current model | ||
| if any(ismember(rxnData{1},ihuman.rxns)) | ||
| error('One or more reactions to be added already exist in the model.'); | ||
| end | ||
|
|
||
| % add reactions to the model | ||
| rxnsToAdd = {}; | ||
| rxnsToAdd.rxns = rxnData{1}; | ||
| rxnsToAdd.rxnNames = rxnData{2}; | ||
| rxnsToAdd.subSystems = cellfun(@(s) {{s}},rxnData{3}); | ||
| rxnsToAdd.equations = rxnData{4}; | ||
| ihuman = addRxns(ihuman, rxnsToAdd, 3); | ||
| ihuman.priorCombiningGrRules(end+1:end+numel(rxnsToAdd.rxns)) = {''}; |
There was a problem hiding this comment.
This appears as another reusable function.
A total of 23 pool mets (12 unique) become unused by replacing with newly added pool mets, and removed from the model. Here they are deleted from metAssoc structure.
Main improvements in this PR:
This PR implements changes in the way that HumanGEM handles many of its lipid pools, such as
fatty acid-LD-PC pool,1-acylglycerol-3P-LD-SM pool,acyl-CoA-LD-PS pool, etc.These pools are currently formulated in such a way that their composition differs, as described in the original HMR2 paper (specifically in Supplementary Data 4). The original motivation was to have the pool compositions reflect those from plasma and liver tissue measurements. In practice, this leads to stoichiometric inconsistencies, because the model incorrectly treats these pool metabolites have having equal mass.
To address this problem, the pool metabolites involved in the lipid pool formation and degradation reactions were simply renamed to a specific "liver" lipid pool, which will essentially disconnect them from other reactions in the model. New lipid pool formation/degradation reactions are then added, whose compositions represent an average fatty acid composition of these different pools.
These pool compositions now enable a more generic treatment of the pool metabolites, resulting in a more stoichiometrically consistent model that still utilizes experimental fatty acid composition data.
The changes are implemented in the
curateLipidPoolsscript, which updates HumanGEM and the metabolite and reaction annotation files accordingly.Other changes in this PR
The following three now-deprecated fields are removed from the
HumanGEMmodel structure in the samecurateLipidPoolsscript:The protein-related fields can simply be regenerated using the
translateGrRulesfunction.I hereby confirm that I have:
develas a target branch