0001 function plotSampleHist(rxnNames,samples,models,nBins,perScreen)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037 if (nargin < 5)
0038 perScreen = 1e5;
0039 end
0040
0041 if (nargin < 4 || isempty(nBins))
0042 [tmp,nSamples] = size(samples{1});
0043 nBins = round(nSamples/25);
0044 end
0045
0046 if (~iscell(samples))
0047 singleDataFlag = true;
0048 samplesTmp = samples;
0049 clear samples;
0050 samples{1} = samplesTmp;
0051 end
0052
0053 if (~iscell(models))
0054 commonModelFlag = true;
0055 else
0056 commonModelFlag = false;
0057 end
0058
0059 if (~iscell(rxnNames))
0060 rxnNameList{1} = rxnNames;
0061 else
0062 rxnNameList = rxnNames;
0063 end
0064
0065 nRxns = length(rxnNameList);
0066
0067 for i = 1:nRxns
0068 if (commonModelFlag)
0069 keepRxn(i) = ismember(rxnNameList{i},models.rxns);
0070 else
0071 for j = 1:length(models)
0072 isIn(j) = ismember(rxnNameList{i},models{j}.rxns);
0073 end
0074 if (all(isIn))
0075 keepRxn(i) = true;
0076 else
0077 keepRxn(i) = false;
0078 end
0079 end
0080 end
0081
0082 rxnNameList = rxnNameList(keepRxn');
0083 nRxns = length(rxnNameList);
0084 if length(perScreen) ==2
0085 nX = perScreen(2);
0086 nY = perScreen(1);
0087 perScreen = nX*nY;
0088 else
0089 nX = ceil(sqrt(min(nRxns, perScreen)));
0090 nY = ceil(min(nRxns, perScreen)/nX);
0091 end
0092
0093 j=1;
0094 flagQuit = false;
0095 fig=figure;
0096 while ~flagQuit
0097 clear counts;
0098 currLB = 1e6;
0099 currUB = -1e6;
0100 for i = 1:length(samples)
0101 if (commonModelFlag)
0102 id = findRxnIDs(models,rxnNameList{j});
0103 else
0104 id = findRxnIDs(models{i},rxnNameList{j});
0105 end
0106 if (isempty(id))
0107 if (commonModelFlag)
0108 id = findRxnIDs(models,[rxnNameList{j} '_r']);
0109 else
0110 id = findRxnIDs(models{i},[rxnNameList{j} '_r']);
0111 end
0112 if (isempty(id))
0113 warning('Reaction does not exist');
0114 end
0115 end
0116 currLB = min(currLB,min(samples{i}(id,:)'));
0117 currUB = max(currUB,max(samples{i}(id,:)'));
0118 end
0119
0120 if currUB-currLB < 8*eps*abs(mean([currUB, currLB]))
0121 av = abs(mean([currUB, currLB]));
0122 currUB = currUB+8*eps*av;
0123 currLB = currLB-8*eps*av;
0124 end
0125 bins = linspace(currLB,currUB,nBins);
0126
0127 for i = 1:length(samples)
0128 sampleSign = 1;
0129 if (commonModelFlag)
0130 id = findRxnIDs(models,rxnNameList{j});
0131 else
0132 id = findRxnIDs(models{i},rxnNameList{j});
0133 end
0134 if (isempty(id))
0135 if (commonModelFlag)
0136 id = findRxnIDs(models,[rxnNameList{j} '_r']);
0137 else
0138 id = findRxnIDs(models{i},[rxnNameList{j} '_r']);
0139 end
0140 sampleSign = -1;
0141 end
0142 n = hist(sampleSign*samples{i}(id,:),bins);
0143 counts(:,i) = smooth(bins,n');
0144 end
0145 freq = counts./repmat(sum(counts),size(counts,1),1);
0146
0147 subplot(nY,nX, mod(j-1, perScreen)+1);
0148 plot(bins,freq,'-');
0149 axis([currLB-.0001 currUB+.0001 0 max(max(freq))]);
0150 h = text((currUB+currLB)/2,max(max(freq))*1.1,strrep(rxnNameList{j},'_','-'));
0151 set(h,'HorizontalAlignment','center');
0152
0153 user_input = 'f';
0154 if j>=nRxns
0155 if nRxns<=perScreen, return; end
0156 user_input = input('End of sampples; reverse (r) or quit (q): ','s');
0157 while isempty(user_input)|| ~(ismember(user_input(1),{'b','r','q','e'}))
0158 user_input = input('End of sampples; reverse (r) or quit (q)): ','s');
0159 end
0160 clear fig
0161 elseif mod(j, perScreen) ==0
0162 user_input = input('Move forward (f), reverse (r) or quit (q): ','s');
0163 if isempty(user_input), user_input='f'; end
0164 clear fig
0165 end
0166 if user_input(1)=='r' || user_input(1)=='b'
0167 j=j-perScreen*2+1;
0168 if j<0, j=1; end
0169 elseif user_input(1)=='q'|| user_input(1)=='e'
0170 flagQuit=true;
0171 elseif user_input(1)=='f'
0172 j=j+1;
0173 end
0174 end
0175