-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpreparseGPR.m
40 lines (39 loc) · 1.79 KB
/
preparseGPR.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
function [preParsedGrRules,genes] = preparseGPR(grRules)
% preparse model.grRules before parsing the remaining part
% and transforming model.grRules into model.rules
%
% USAGE:
%
% preParsedGrRules = preparseGPR(grRules)
%
% INPUT:
% grRules: grRules cell or single grRule
%
% OUTPUT:
% preParsedGrRules: preparsed grRules cell or single grRule
%
% .. Author: - Laurent Heirendt - December 2017
%using regexprep all cells must be char row vectors.
if iscell(grRules)
glt=length(grRules);
for g=1:glt
if ~ischar(grRules{g})
if iscell(grRules{g})
tmp=grRules{g};
grRules{g}=tmp{1};
else
error(['grRules ' int2str(g) ' is not a character array'])
end
end
end
end
preParsedGrRules = regexprep(grRules, '[\]\}]',')'); %replace other brackets by parenthesis.
preParsedGrRules = regexprep(preParsedGrRules, '[\[\{]','('); %replace other brackets by parenthesis.
preParsedGrRules = regexprep(preParsedGrRules,'([\(])\s*','$1'); %replace all spaces after opening parenthesis
preParsedGrRules = regexprep(preParsedGrRules,'\s*([\)])','$1'); %replace all spaces before closing paranthesis.
preParsedGrRules = regexprep(preParsedGrRules, '([\)]\s?|\s)\s*(?i)(and)\s*?(\s?[\(]|\s)\s*', '$1&$3'); %Replace all ands
preParsedGrRules = regexprep(preParsedGrRules, '([\)]\s?|\s)\s*(?i)(or)\s*?(\s?[\(]|\s)\s*', '$1|$3'); %replace all ors
preParsedGrRules = regexprep(preParsedGrRules, '[\s]?&[\s]?', ' & '); %introduce spaces around ands
preParsedGrRules = regexprep(preParsedGrRules, '[\s]?\|[\s]?', ' | '); %introduce spaces around ors.
genes = cellfun(@unique,regexp(preParsedGrRules,'([^\(\)\|\&\s]+)','match'),'Uniform',0); %Get all genes for each reaction.
end