annotate multithreshold 1.46/old files/MAPmodel.m @ 38:c2204b18f4a2 tip

End nov big change
author Ray Meddis <rmeddis@essex.ac.uk>
date Mon, 28 Nov 2011 13:34:28 +0000
parents b51bf546ca3f
children
rev   line source
rmeddis@9 1 function [modelResponse, MacGregorResponse]=MAPmodel( MAPplot, method)
rmeddis@9 2
rmeddis@9 3 global experiment stimulusParameters audio withinRuns
rmeddis@9 4 global outerMiddleEarParams DRNLParams AN_IHCsynapseParams
rmeddis@9 5
rmeddis@9 6 savePath=path;
rmeddis@29 7 addpath(['..' filesep 'MAP'], ['..' filesep 'utilities'])
rmeddis@9 8 modelResponse=[];
rmeddis@9 9 MacGregorResponse=[];
rmeddis@9 10
rmeddis@9 11 % mono only (column vector)
rmeddis@9 12 audio=audio(:,1)';
rmeddis@9 13
rmeddis@9 14 % if stop button pressed earlier
rmeddis@9 15 if experiment.stop, return, end
rmeddis@9 16
rmeddis@9 17 % -------------------------------------------------------------- run Model
rmeddis@9 18 MAPparamsName=experiment.name;
rmeddis@9 19 showPlotsAndDetails=experiment.MAPplot;
rmeddis@9 20 AN_spikesOrProbability='spikes';
rmeddis@9 21
rmeddis@9 22 % [response, method]=MAPsequenceSeg(audio, method, 1:8);
rmeddis@38 23 global ICoutput dtSpikes
rmeddis@9 24 MAP1_14(audio, 1/method.dt, method.nonlinCF,...
rmeddis@9 25 MAPparamsName, AN_spikesOrProbability);
rmeddis@9 26
rmeddis@9 27 if showPlotsAndDetails
rmeddis@29 28 options.printModelParameters=0;
rmeddis@9 29 options.showModelOutput=1;
rmeddis@9 30 options.printFiringRates=1;
rmeddis@9 31 options.showACF=0;
rmeddis@38 32 options.showEfferent=0;
rmeddis@29 33 UTIL_showMAP(options)
rmeddis@9 34 end
rmeddis@9 35
rmeddis@9 36 % No response, probably caused by hitting 'stop' button
rmeddis@9 37 if isempty(ICoutput), return, end
rmeddis@9 38
rmeddis@9 39 % MacGregor response is the sum total of all final stage spiking
rmeddis@9 40 MacGregorResponse= sum(ICoutput,1); % use IC
rmeddis@9 41
rmeddis@9 42 % ---------------------------------------------------------- end model run
rmeddis@9 43
rmeddis@38 44 dt=dtSpikes;
rmeddis@9 45 time=dt:dt:dt*length(MacGregorResponse);
rmeddis@9 46
rmeddis@9 47 % group delay on unit response
rmeddis@9 48 MacGonsetDelay= 0.004;
rmeddis@9 49 MacGoffsetDelay= 0.022;
rmeddis@9 50
rmeddis@9 51 % now find the response of the MacGregor model during the target presentation + group delay
rmeddis@9 52 switch experiment.threshEstMethod
rmeddis@9 53 case {'2I2AFC++', '2I2AFC+++'}
rmeddis@9 54 idx= time>stimulusParameters.testTargetBegins+MacGonsetDelay ...
rmeddis@9 55 & time<stimulusParameters.testTargetEnds+MacGoffsetDelay;
rmeddis@9 56 nSpikesTrueWindow=sum(MacGregorResponse(:,idx));
rmeddis@9 57 idx=find(time>stimulusParameters.testNonTargetBegins+MacGonsetDelay ...
rmeddis@9 58 & time<stimulusParameters.testNonTargetEnds+MacGoffsetDelay);
rmeddis@9 59 nSpikesFalseWindow=sum(MacGregorResponse(:,idx));
rmeddis@9 60 % nSpikesDuringTarget is +ve when more spikes are found
rmeddis@9 61 % in the target window
rmeddis@9 62 difference= nSpikesTrueWindow-nSpikesFalseWindow;
rmeddis@9 63
rmeddis@9 64 if difference>0
rmeddis@9 65 % hit
rmeddis@9 66 nSpikesDuringTarget=experiment.MacGThreshold+1;
rmeddis@9 67 elseif difference<0
rmeddis@9 68 % miss (wrong choice)
rmeddis@9 69 nSpikesDuringTarget=experiment.MacGThreshold-1;
rmeddis@9 70 else
rmeddis@9 71 if rand>0.5
rmeddis@9 72 % hit (random choice)
rmeddis@9 73 nSpikesDuringTarget=experiment.MacGThreshold+1;
rmeddis@9 74 else
rmeddis@9 75 % miss (random choice)
rmeddis@9 76 nSpikesDuringTarget=experiment.MacGThreshold-1;
rmeddis@9 77 end
rmeddis@9 78 end
rmeddis@9 79 disp(['level target dummy decision: ' ...
rmeddis@9 80 num2str([withinRuns.variableValue nSpikesTrueWindow ...
rmeddis@9 81 nSpikesFalseWindow nSpikesDuringTarget], '%4.0f') ] )
rmeddis@9 82
rmeddis@9 83 otherwise
rmeddis@9 84 % idx=find(time>stimulusParameters.testTargetBegins+MacGonsetDelay ...
rmeddis@9 85 % & time<stimulusParameters.testTargetEnds+MacGoffsetDelay);
rmeddis@9 86 % no delay at onset
rmeddis@9 87 idx=find(time>stimulusParameters.testTargetBegins +MacGonsetDelay...
rmeddis@9 88 & time<stimulusParameters.testTargetEnds+MacGoffsetDelay);
rmeddis@9 89 nSpikesDuringTarget=sum(MacGregorResponse(:,idx));
rmeddis@9 90
rmeddis@9 91 % find(MacGregorResponse)*dt-stimulusParameters.stimulusDelay
rmeddis@9 92 timeX=time(idx);
rmeddis@9 93 end
rmeddis@9 94
rmeddis@9 95 % now find the response of the MacGregor model at the end of the masker
rmeddis@9 96 idx2=find(time>stimulusParameters.testTargetBegins-0.02 ...
rmeddis@9 97 & time<stimulusParameters.testTargetBegins);
rmeddis@9 98 if ~isempty(idx2)
rmeddis@9 99 maskerRate=mean(mean(MacGregorResponse(idx2)));
rmeddis@9 100 else
rmeddis@9 101 %e.g. no masker
rmeddis@9 102 maskerRate=0;
rmeddis@9 103 end
rmeddis@9 104
rmeddis@9 105 if experiment.MAPplot
rmeddis@9 106 % add vertical lines to indicate target region
rmeddis@9 107 figure(99), subplot(6,1,6)
rmeddis@9 108 hold on
rmeddis@9 109 yL=get(gca,'YLim');
rmeddis@9 110 plot([stimulusParameters.testTargetBegins + MacGonsetDelay ...
rmeddis@9 111 stimulusParameters.testTargetBegins + MacGonsetDelay],yL,'r')
rmeddis@9 112 plot([stimulusParameters.testTargetEnds + MacGoffsetDelay ...
rmeddis@9 113 stimulusParameters.testTargetEnds + MacGoffsetDelay],yL,'r')
rmeddis@9 114 end
rmeddis@9 115
rmeddis@9 116 % specify unambiguous response
rmeddis@9 117 switch experiment.paradigm
rmeddis@9 118 case 'gapDetection'
rmeddis@9 119 gapResponse=(maskerRate-nSpikesDuringTarget)/maskerRate;
rmeddis@9 120 if gapResponse>0.2
rmeddis@9 121 modelResponse=2; % gap detected
rmeddis@9 122 else
rmeddis@9 123 modelResponse=1; % gap not detected
rmeddis@9 124 end
rmeddis@9 125 [nSpikesDuringTarget maskerRate gapResponse modelResponse]
rmeddis@9 126 figure(22), plot(timeX,earObject(idx))
rmeddis@9 127 otherwise
rmeddis@9 128 if nSpikesDuringTarget>experiment.MacGThreshold
rmeddis@9 129 modelResponse=2; % stimulus detected
rmeddis@9 130 else
rmeddis@9 131 modelResponse=1; % nothing heard (default)
rmeddis@9 132 end
rmeddis@9 133 end
rmeddis@9 134
rmeddis@9 135
rmeddis@23 136 path(savePath)