annotate Copy_of_multithreshold 1.46/old files/MAPmodel.m @ 30:1a502830d462

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