123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- function V4MS = preProcessV4MS(V4MS,EffectWindow)
- % excitatoryWindow = [0 0.05];
- % supressionWindow = [0.25 2];
- excitatoryWindow = EffectWindow.exc;
- supressionWindow = EffectWindow.sup;
- nMaxs = 10;
- THRS = [];
- DIFFS = nan(3,length(V4MS.iCH), 19);
- for soa = 1:length(V4MS.META.SOAS)
- iTIME = V4MS.TIME > (V4MS.META.SOAS(soa)) & V4MS.TIME < (V4MS.META.SOAS(soa)+0.025);
- iTIMEplot = V4MS.TIME > (V4MS.META.SOAS(soa)-0.01) & V4MS.TIME < (V4MS.META.SOAS(soa)+0.025+0.01);
- plotDIFF = squeeze(V4MS.ALLCHS(:,iTIMEplot,soa+1)-V4MS.ALLCHS(:,iTIMEplot,1));
- DIFFS(soa,:,:) = squeeze(V4MS.ALLCHS(:,iTIME,soa+1)-V4MS.ALLCHS(:,iTIME,1));
- end
- %%
- DIFF = squeeze(nanmean(DIFFS,1));
- MEANS = nan(1,size(DIFF,1));
- for ch = 1:size(DIFF,1)
- temp = sort(squeeze(DIFF(ch,:)));
- MEANS(ch) = nanmean(temp(end-(nMaxs-1):end));
- end
- temp = sort(MEANS);temp = temp(~isnan(temp));ind = round(0.75*length(temp));
- THRS = temp(ind);
- indS = MEANS < THRS;
- %%
- % Remove Channels below the threshold
- for chu = 1:size(V4MS.CHUNKS,2)
- sign = V4MS.CHUNKS(chu).DATA;
- for bl = 1:size(sign,1)
- for ch = 1:size(sign,3)
- diffs = nan(3,19);
- for soa = 1:length(V4MS.META.SOAS)
- iTIME = V4MS.TIME > (V4MS.META.SOAS(soa)) & V4MS.TIME < (V4MS.META.SOAS(soa)+0.025);
- diffs(soa,:) = squeeze(sign(bl,iTIME,ch,soa+1)-sign(bl,iTIME,ch,1));
- end
- % keyboard
- diff = sort(squeeze(nanmean(diffs,1))); %CHANGED 2015-07-06, before diff = sort(squeeze(nanmean(diffs,1)));
- MAX = nanmean(diff(end-(nMaxs-1):end));
- if MAX > THRS
- sign(bl,:,ch,:) = nan;
- end
- end
- end
- V4MS.CHUNKS(chu).DATA = sign;
- end
- %%
- % Now procced to average for every chunk. Then take every electrode as a unit.
- for chu = 1:size(V4MS.CHUNKS,2)
- sign = V4MS.CHUNKS(chu).DATA;
- V4MS.CHUNKS(chu).AVE = squeeze(nanmean(sign,1));
- end
- % Make a copy and check whther each electrode should or suoldn't be included.
- for chu = 1:size(V4MS.CHUNKS,2)
- V4MS.CHUNKS(chu).CLEAN.AVE = V4MS.CHUNKS(chu).AVE;
- V4MS.CHUNKS(chu).CLEAN.IND = nan(size(V4MS.CHUNKS(chu).MESBL,1),1);
- for ch = 1:size(V4MS.CHUNKS(chu).MESBL,1)
- tempSIGNIF = zeros(3,1);
- for soa = 1:3
- tempSIGNIF(soa) = ttest2(squeeze(V4MS.CHUNKS(chu).MESBL(ch,soa,:)),squeeze(V4MS.CHUNKS(chu).MESMS(ch,soa,:)));
- end
- if ~isnan(sum(tempSIGNIF)) && sum(tempSIGNIF)~= 0 && ~isnan(nanmean(nanmean(V4MS.CHUNKS(chu).AVE(:,ch,:))))
- V4MS.CHUNKS(chu).CLEAN.IND(ch) = 1;
- elseif isnan(sum(tempSIGNIF)) || isnan(nanmean(nanmean(V4MS.CHUNKS(chu).AVE(:,ch,:))))
- V4MS.CHUNKS(chu).CLEAN.IND(ch) = nan;
- else
- V4MS.CHUNKS(chu).CLEAN.IND(ch) = 0;
- V4MS.CHUNKS(chu).CLEAN.AVE(:,ch,:) = nan;
- end
- end
- end
- % Concatenate all elctrodes together
- V4MS.UNITS = [];
- V4MS.CLEAN.UNITS = [];
- V4MS.CLEAN.UNITSIND = [];
- V4MS.MONKEY = [];
- V4MS.RFDATA = [];
- V4MS.PERF = [];
- V4MS.PERF_MONKEY = [];
- for chu = 1:size(V4MS.CHUNKS,2)
- V4MS.UNITS = cat(2,V4MS.UNITS,V4MS.CHUNKS(chu).AVE);
- V4MS.CLEAN.UNITS = cat(2,V4MS.CLEAN.UNITS,V4MS.CHUNKS(chu).CLEAN.AVE);
- V4MS.CLEAN.UNITSIND = [V4MS.CLEAN.UNITSIND; V4MS.CHUNKS(chu).CLEAN.IND];
- V4MS.MONKEY = cat(2,V4MS.MONKEY,V4MS.CHUNKS(chu).INFO.MONKEY);
- V4MS.RFDATA = cat(1,V4MS.RFDATA,V4MS.CHUNKS(chu).INFO.RFDATA);
- if nansum(V4MS.CHUNKS(chu).CLEAN.IND)
- V4MS.PERF = cat(1,V4MS.PERF,V4MS.CHUNKS(chu).PERF);
- V4MS.PERF_MONKEY= [V4MS.PERF_MONKEY ones(1,size(V4MS.CHUNKS(chu).PERF,1))*(strcmp(V4MS.CHUNKS(chu).INFO.MONKEY{1},'C')+1)];
- end
- end
- for m = 1:length(V4MS.MONKEY)
- if isempty(V4MS.MONKEY{m})
- V4MS.MONKEY{m} = 'B';
- end
- end
- V4MS.CLEAN.UNITSIND(isnan(V4MS.CLEAN.UNITSIND)) = 0;
- %%
- % compute average accross channels
- V4MS.AVE = squeeze(nanmean(V4MS.UNITS,2));
- V4MS.AVE_NON_SIG = squeeze(nanmean(V4MS.UNITS(:,~V4MS.CLEAN.UNITSIND,:),2));
- % compute average accross channels with an effect
- V4MS.CLEAN.AVE = squeeze(nanmean(V4MS.CLEAN.UNITS,2));
- % Effect for all channels
- EFFECT = nan(3,size(V4MS.UNITS,2));
- S = 10;
- BINS = 40;
- for soa = 1:3
- for ch = 1:size(V4MS.UNITS,2);
- iT = V4MS.TIME > (V4MS.META.SOAS(soa)+supressionWindow(1)) & V4MS.TIME < (V4MS.META.SOAS(soa)+supressionWindow(2));
- EFFECT(soa,ch) = nanmean(1*squeeze(V4MS.UNITS(iT,ch,soa+1) - V4MS.UNITS(iT,ch,1)));
- end
- end
- V4MS.EFFECT = EFFECT;
- % Effect for significative channels
- EFFECT = nan(3,size(V4MS.CLEAN.UNITS,2));
- S = 10;
- BINS = 40;
- for soa = 1:3
- for ch = 1:size(V4MS.CLEAN.UNITS,2);
- iT = V4MS.TIME > (V4MS.META.SOAS(soa)+supressionWindow(1)) & V4MS.TIME < (V4MS.META.SOAS(soa)+supressionWindow(2));
- EFFECT(soa,ch) = nanmean(1*squeeze(V4MS.CLEAN.UNITS(iT,ch,soa+1) - V4MS.CLEAN.UNITS(iT,ch,1)));
- end
- end
- V4MS.CLEAN.EFFECT = EFFECT;
-
-
- % Excitatory Effect for all channels
- EXCIT_EFFECT = nan(3,size(V4MS.UNITS,2));
- S = 10;
- BINS = 40;
- for soa = 1:3
- for ch = 1:size(V4MS.UNITS,2);
- iT = V4MS.TIME > (V4MS.META.SOAS(soa)+excitatoryWindow(1)) & V4MS.TIME < (V4MS.META.SOAS(soa)+excitatoryWindow(2));
- EXCIT_EFFECT(soa,ch) = nanmean(1*squeeze(V4MS.UNITS(iT,ch,soa+1) - V4MS.UNITS(iT,ch,1)));
- end
- end
- V4MS.EXCIT_EFFECT = EXCIT_EFFECT;
- % Effect for significative channels
- EXCIT_EFFECT = nan(3,size(V4MS.CLEAN.UNITS,2));
- S = 10;
- BINS = 40;
- for soa = 1:3
- for ch = 1:size(V4MS.CLEAN.UNITS,2);
- iT = V4MS.TIME > (V4MS.META.SOAS(soa)+excitatoryWindow(1)) & V4MS.TIME < (V4MS.META.SOAS(soa)+excitatoryWindow(2));
- EXCIT_EFFECT(soa,ch) = nanmean(1*squeeze(V4MS.CLEAN.UNITS(iT,ch,soa+1) - V4MS.CLEAN.UNITS(iT,ch,1)));
- end
- end
- V4MS.CLEAN.EXCIT_EFFECT = EXCIT_EFFECT;
- end
|