annotate Copy_of_multithreshold 1.46/printReport.m @ 28:02aa9826efe0

mainly multiThreshold
author Ray Meddis <rmeddis@essex.ac.uk>
date Fri, 01 Jul 2011 12:59:47 +0100
parents
children
rev   line source
rmeddis@28 1 function printReport(fileName, printTracks)
rmeddis@28 2
rmeddis@28 3 % End of run report (no args)
rmeddis@28 4 % *or*
rmeddis@28 5 % reprint previous report from file
rmeddis@28 6
rmeddis@28 7 global experiment stimulusParameters betweenRuns withinRuns statsModel audio
rmeddis@28 8 global LevittControl expGUIhandles
rmeddis@28 9
rmeddis@28 10
rmeddis@28 11 global inputStimulusParams OMEParams DRNLParams
rmeddis@28 12 global IHC_VResp_VivoParams IHCpreSynapseParams AN_IHCsynapseParams
rmeddis@28 13 global MacGregorParams MacGregorMultiParams filteredSACFParams
rmeddis@28 14 global experiment % used by calls from multiThreshold only
rmeddis@28 15 global IHC_cilia_RPParams
rmeddis@28 16
rmeddis@28 17
rmeddis@28 18 printReportGuide.structures=1;
rmeddis@28 19 printReportGuide.showPsychometric=0;
rmeddis@28 20 printReportGuide.HorizontalTracks=1;
rmeddis@28 21
rmeddis@28 22 if nargin==0
rmeddis@28 23 % print new report
rmeddis@28 24 printReportGuide.showTracks=experiment.printTracks;
rmeddis@28 25 printReportGuide.fileName=[];
rmeddis@28 26 if experiment.saveData
rmeddis@28 27 saveFileName=['savedData/' experiment.name '_' experiment.date '_' experiment.paradigm];
rmeddis@28 28 else
rmeddis@28 29 % save this data (just in case)
rmeddis@28 30 saveFileName=['savedData/mostRecentResults'];
rmeddis@28 31 end
rmeddis@28 32 experiment.minElapsed=etime(clock, betweenRuns.timeNow)/60;
rmeddis@28 33 save(saveFileName, 'experiment', 'stimulusParameters',...
rmeddis@28 34 'betweenRuns', 'withinRuns', 'statsModel', 'expGUIhandles')
rmeddis@28 35 disp(['data saved as: ' saveFileName]);
rmeddis@28 36
rmeddis@28 37 else
rmeddis@28 38 % reprint request (i.e print out old data)
rmeddis@28 39 printReportGuide.fileName=fileName;
rmeddis@28 40 load(printReportGuide.fileName)
rmeddis@28 41 saveFileName=printReportGuide.fileName;
rmeddis@28 42 if nargin>1
rmeddis@28 43 printReportGuide.showTracks=printTracks;
rmeddis@28 44 else
rmeddis@28 45 printReportGuide.showTracks=experiment.printTracks;
rmeddis@28 46 end
rmeddis@28 47 end
rmeddis@28 48
rmeddis@28 49 fprintf('******** multithreshold ')
rmeddis@28 50
rmeddis@28 51 x=pwd; disp(['version ' x(end-3:end)])
rmeddis@28 52 fprintf('\nName:\t%s ', experiment.name)
rmeddis@28 53 fprintf('\nparadigm:\t%s ', experiment.paradigm)
rmeddis@28 54 fprintf('\nEar:\t%s ', experiment.ear)
rmeddis@28 55
rmeddis@28 56 method=experiment.threshEstMethod;
rmeddis@28 57 if stimulusParameters.includeCue && ~strcmp(method(1:6),'2I2AFC')
rmeddis@28 58 method=[method '/ withCue'];
rmeddis@28 59 end
rmeddis@28 60 fprintf('\nmethod:\t%s ', method)
rmeddis@28 61 fprintf('\ndate:\t%s ', experiment.date)
rmeddis@28 62 fprintf('\n\n')
rmeddis@28 63
rmeddis@28 64 if isempty(betweenRuns.thresholds)
rmeddis@28 65 disp('no thresholds found')
rmeddis@28 66 end
rmeddis@28 67
rmeddis@28 68 % prepare results as matrices ready to print
rmeddis@28 69 % first sort the actual sequence into a more readable sequence
rmeddis@28 70 [idx1, idx2, var1values, var2values]=...
rmeddis@28 71 sortVariables(betweenRuns.variableList1, betweenRuns.variableList2,...
rmeddis@28 72 betweenRuns.var1Sequence, betweenRuns.var2Sequence);
rmeddis@28 73
rmeddis@28 74 header1=betweenRuns.variableName1;
rmeddis@28 75 header2=betweenRuns.variableName2;
rmeddis@28 76 header1 = strrep(header1, 'none', ' '); % none is not a useful header
rmeddis@28 77 header2 = strrep(header2, 'none', ' '); % none is not a useful header
rmeddis@28 78 headers=strvcat([header1 '/'], header2);
rmeddis@28 79
rmeddis@28 80 disp('thresholds')
rmeddis@28 81 msg=printTabTable(sortTablesForPrinting(idx1,idx2,...
rmeddis@28 82 var1values,var2values, betweenRuns.thresholds), headers);
rmeddis@28 83 addToMsg(msg,0)
rmeddis@28 84 fprintf('\n')
rmeddis@28 85
rmeddis@28 86 % sort tracks into the same order
rmeddis@28 87 betweenRuns.levelTracks=betweenRuns.levelTracks(idx1);
rmeddis@28 88 betweenRuns.responseTracks=betweenRuns.responseTracks(idx1);
rmeddis@28 89 betweenRuns.bestThresholdTracks=betweenRuns.bestThresholdTracks(idx1);
rmeddis@28 90 betweenRuns.levelTracks=betweenRuns.levelTracks(idx2);
rmeddis@28 91 betweenRuns.responseTracks=betweenRuns.responseTracks(idx2);
rmeddis@28 92 betweenRuns.bestThresholdTracks=betweenRuns.bestThresholdTracks(idx2);
rmeddis@28 93
rmeddis@28 94 if printReportGuide.structures
rmeddis@28 95 maxNoArrayValues=30;
rmeddis@28 96 showStructureSummary(stimulusParameters, 'stimulusParameters', maxNoArrayValues)
rmeddis@28 97 showStructureSummary(experiment, 'experiment',maxNoArrayValues)
rmeddis@28 98 showStructureSummary(betweenRuns, 'betweenRuns',maxNoArrayValues)
rmeddis@28 99 showStructureSummary(withinRuns, 'withinRuns')
rmeddis@28 100
rmeddis@28 101 switch experiment.threshEstMethod
rmeddis@28 102 case {'2I2AFC++', '2I2AFC+++'}
rmeddis@28 103 showStructureSummary(LevittControl, 'LevittControl', maxNoArrayValues)
rmeddis@28 104 end
rmeddis@28 105
rmeddis@28 106 switch experiment.ear
rmeddis@28 107 case {'statsModelLogistic','statsModelRareEvent'}
rmeddis@28 108 showStructureSummary(statsModel, 'statsModel', maxNoArrayValues)
rmeddis@28 109 end
rmeddis@28 110 end
rmeddis@28 111
rmeddis@28 112 if printReportGuide.showTracks
rmeddis@28 113 % NB this procedure can only be used if all the tracks are present and
rmeddis@28 114 % of equal length
rmeddis@28 115 bigTable=[]; header=[];
rmeddis@28 116 disp(' '); disp('Leveltracks starting from 1 response before the first reversal')
rmeddis@28 117 for i=1:length(betweenRuns.levelTracks)
rmeddis@28 118 if printReportGuide.HorizontalTracks
rmeddis@28 119 printTabTable(betweenRuns.levelTracks{i});
rmeddis@28 120 end
rmeddis@28 121 header=strvcat(header, 'level');
rmeddis@28 122 end
rmeddis@28 123
rmeddis@28 124 disp(' '); disp('Response tracks starting from 1 response before the first reversal')
rmeddis@28 125 for i=1:length(betweenRuns.responseTracks)
rmeddis@28 126 if printReportGuide.HorizontalTracks
rmeddis@28 127 printTabTable(betweenRuns.responseTracks{i});
rmeddis@28 128 end
rmeddis@28 129 header=strvcat(header, 'resp');
rmeddis@28 130 end
rmeddis@28 131
rmeddis@28 132 disp(' '); disp('threshold tracks starting from the first reversal')
rmeddis@28 133 for i=1:length(betweenRuns.bestThresholdTracks)
rmeddis@28 134 if printReportGuide.HorizontalTracks
rmeddis@28 135 end
rmeddis@28 136 printTabTable(betweenRuns.bestThresholdTracks{i});
rmeddis@28 137 header=strvcat(header, 'mean');
rmeddis@28 138 end
rmeddis@28 139
rmeddis@28 140 end
rmeddis@28 141
rmeddis@28 142 switch experiment.ear
rmeddis@28 143 case {'MAPmodelMultiCh', 'MAPmodelSingleCh'}
rmeddis@28 144 % show all parameters but do not compute the model
rmeddis@28 145 nm=UTIL_paramsList(whos);
rmeddis@28 146 for i=1:length(nm)
rmeddis@28 147 try
rmeddis@28 148 eval(['UTIL_showStruct(' nm{i} ', ''' nm{i} ''')'])
rmeddis@28 149 catch
rmeddis@28 150 end
rmeddis@28 151 end
rmeddis@28 152 end
rmeddis@28 153
rmeddis@28 154 if experiment.saveData
rmeddis@28 155 fprintf('\n')
rmeddis@28 156 disp('To reprint this report with tracks use:')
rmeddis@28 157 disp([ 'printReport(''' saveFileName ''',1)'])
rmeddis@28 158 end
rmeddis@28 159
rmeddis@28 160 % print final summary (repeat of above)
rmeddis@28 161 fprintf('\n')
rmeddis@28 162 fprintf('\n')
rmeddis@28 163 disp('thresholds')
rmeddis@28 164 msg=printTabTable(sortTablesForPrinting(idx1,idx2,var1values,var2values, betweenRuns.thresholds), headers);
rmeddis@28 165 addToMsg(msg,0)
rmeddis@28 166 fprintf('\n')
rmeddis@28 167
rmeddis@28 168 if length(var1values)==1 && length(var2values)==1 && experiment.maxTrials>49
rmeddis@28 169 [psy, levelsBinVector, binFrequencies, nNo, nYes]= ...
rmeddis@28 170 psychometricFunction(withinRuns.levelsPhaseTwo,withinRuns.responsesPhaseTwo, experiment.psyBinWidth);
rmeddis@28 171 disp('Psychometric function')
rmeddis@28 172 fprintf(' level \tfreq\tprob\n')
rmeddis@28 173 fprintf('%6.0f\t%6.2f\t%6.0f\n', [levelsBinVector; binFrequencies; psy])
rmeddis@28 174 fprintf('\n')
rmeddis@28 175 fprintf('k \t %6.2f\n',logistic.bestK)
rmeddis@28 176 fprintf('g \t%7.5f\n',rareEvent.bestGain)
rmeddis@28 177 fprintf('\n')
rmeddis@28 178
rmeddis@28 179 end
rmeddis@28 180
rmeddis@28 181 fprintf('\nparadigm:\t%s\n ', experiment.paradigm)
rmeddis@28 182
rmeddis@28 183 % ------------------------------------------------------- sortTablesForPrinting
rmeddis@28 184 function table= sortTablesForPrinting(idx1,idx2, var1values,var2values, x)
rmeddis@28 185 % table converts a vector to a table
rmeddis@28 186 % after sorting according to idx1 and idx2
rmeddis@28 187 % the table is completed by adding row and column values
rmeddis@28 188 x=x(idx1);
rmeddis@28 189 x=x(idx2);
rmeddis@28 190 xMatrix=reshape(x,length(var1values),length(var2values));
rmeddis@28 191
rmeddis@28 192 table=[[-1000 var2values]; [var1values' xMatrix]];
rmeddis@28 193
rmeddis@28 194 % ------------------------------------------------------- showStructureSummary
rmeddis@28 195 function showStructureSummary(structure, name, maxNoArrayValues)
rmeddis@28 196 % showStructureSummary prints out the values of a single structure
rmeddis@28 197 % The header is the structure name and each row is a field
rmeddis@28 198 % e.g. showStructureSummary(params,'params')
rmeddis@28 199 % This not the same as 'UTIL_showstruct'
rmeddis@28 200
rmeddis@28 201
rmeddis@28 202 if nargin<3
rmeddis@28 203 maxNoArrayValues=20;
rmeddis@28 204 end
rmeddis@28 205
rmeddis@28 206 fprintf('\n%s:', name)
rmeddis@28 207
rmeddis@28 208 fields=fieldnames(eval('structure'));
rmeddis@28 209 % for each field in the structure
rmeddis@28 210 for i=1:length(fields)
rmeddis@28 211 y=eval([ 'structure.' fields{i}]);
rmeddis@28 212 if isstr(y),
rmeddis@28 213 % strings
rmeddis@28 214 fprintf('\n%s=\t''%s''', fields{i},y)
rmeddis@28 215 elseif isnumeric(y)
rmeddis@28 216 % arrays
rmeddis@28 217 if length(y)>1
rmeddis@28 218 % vectors
rmeddis@28 219 [r c]=size(y);
rmeddis@28 220 if r>c, y=y'; end
rmeddis@28 221
rmeddis@28 222 [r c]=size(y);
rmeddis@28 223 if r>1
rmeddis@28 224 % fprintf('\n%s.%s=\t%g x %g matrix',name, fields{i}, r, c)
rmeddis@28 225 fprintf('\n%s=\t%g x %g matrix',fields{i}, r, c)
rmeddis@28 226
rmeddis@28 227 elseif c<maxNoArrayValues
rmeddis@28 228 % fprintf('\n%s=\t[%s]', fields{i},num2str(y))
rmeddis@28 229 fprintf('\n%s=', fields{i})
rmeddis@28 230 fprintf('\t%g',y)
rmeddis@28 231
rmeddis@28 232 else
rmeddis@28 233 fprintf('\n%s=\t %g... [%g element array]', fields{i}, y(1),c)
rmeddis@28 234 end
rmeddis@28 235 else
rmeddis@28 236 % single valued arrays
rmeddis@28 237 % fprintf('\n%s.%s=\t%s;', name, fields{i},num2str(y))
rmeddis@28 238 fprintf('\n%s=\t%s', fields{i},num2str(y))
rmeddis@28 239 end
rmeddis@28 240 elseif iscell(y)
rmeddis@28 241 fprintf('\n%s=\t cell array', fields{i})
rmeddis@28 242
rmeddis@28 243 elseif isstruct(y)
rmeddis@28 244 fprintf('\n%s=\t structure', fields{i})
rmeddis@28 245 end,
rmeddis@28 246
rmeddis@28 247 end,
rmeddis@28 248 fprintf('\n')
rmeddis@28 249
rmeddis@28 250
rmeddis@28 251 % ------------------------------------------------------- printTabTable
rmeddis@28 252 function strings= printTabTable(M, headers)
rmeddis@28 253 % printTabTable prints a matrix as a table with tabs
rmeddis@28 254 %headers are optional
rmeddis@28 255 %headers=strvcat('firstname', 'secondname')
rmeddis@28 256 % printTabTable([1 2; 3 4],strvcat('a1','a2'));
rmeddis@28 257 stringCount=1; strings{stringCount}=[];
rmeddis@28 258
rmeddis@28 259 if nargin>1
rmeddis@28 260 [r c]=size(headers);
rmeddis@28 261 for no=1:r
rmeddis@28 262 % print all headers in a row
rmeddis@28 263 fprintf('%s\t',headers(no,:))
rmeddis@28 264 strings{stringCount}=sprintf('%s\t',headers(no,:)); stringCount=stringCount+1;
rmeddis@28 265 end
rmeddis@28 266 fprintf('\n')
rmeddis@28 267 end
rmeddis@28 268
rmeddis@28 269 [r c]=size(M);
rmeddis@28 270
rmeddis@28 271 for row=1:r
rmeddis@28 272 string=[];
rmeddis@28 273 for col=1:c
rmeddis@28 274 if row==1 & col==1 & M(1,1)==-1000
rmeddis@28 275 % Print nothing (tab follows below)
rmeddis@28 276 else
rmeddis@28 277 fprintf('%s',num2str(M(row,col)))
rmeddis@28 278 string=[string ' ' sprintf('%s',num2str(M(row,col)))];
rmeddis@28 279 end
rmeddis@28 280 if col<c
rmeddis@28 281 fprintf('\t')
rmeddis@28 282 % strings{stringCount}=sprintf('\t'); stringCount=stringCount+1;
rmeddis@28 283 end
rmeddis@28 284 end % col
rmeddis@28 285 strings{stringCount}=string; stringCount=stringCount+1;
rmeddis@28 286 fprintf('\n')
rmeddis@28 287 end % row
rmeddis@28 288
rmeddis@28 289 % ------------------------------------------------------- sortVariables
rmeddis@28 290 function [idx1, idx2, var1values, var2values]= ...
rmeddis@28 291 sortVariables(var1values, var2values, var1Sequence, var2Sequence)
rmeddis@28 292
rmeddis@28 293 [x idx1]= sort(var1Sequence);
rmeddis@28 294 var1Sequence= x;
rmeddis@28 295 var2Sequence= var2Sequence(idx1);
rmeddis@28 296 depVarName= 'th';
rmeddis@28 297
rmeddis@28 298 [x idx2]=sort(var2Sequence);
rmeddis@28 299 var2Sequence=x;
rmeddis@28 300 var1Sequence=var1Sequence(idx2);
rmeddis@28 301
rmeddis@28 302 var1values=sort(var1values);
rmeddis@28 303 var2values=sort(var2values);