annotate multithreshold 1.46/MAPmodel.m @ 0:f233164f4c86

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