preProcessV4MS.m 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. function V4MS = preProcessV4MS(V4MS,EffectWindow)
  2. % excitatoryWindow = [0 0.05];
  3. % supressionWindow = [0.25 2];
  4. excitatoryWindow = EffectWindow.exc;
  5. supressionWindow = EffectWindow.sup;
  6. nMaxs = 10;
  7. THRS = [];
  8. DIFFS = nan(3,length(V4MS.iCH), 19);
  9. for soa = 1:length(V4MS.META.SOAS)
  10. iTIME = V4MS.TIME > (V4MS.META.SOAS(soa)) & V4MS.TIME < (V4MS.META.SOAS(soa)+0.025);
  11. iTIMEplot = V4MS.TIME > (V4MS.META.SOAS(soa)-0.01) & V4MS.TIME < (V4MS.META.SOAS(soa)+0.025+0.01);
  12. plotDIFF = squeeze(V4MS.ALLCHS(:,iTIMEplot,soa+1)-V4MS.ALLCHS(:,iTIMEplot,1));
  13. DIFFS(soa,:,:) = squeeze(V4MS.ALLCHS(:,iTIME,soa+1)-V4MS.ALLCHS(:,iTIME,1));
  14. end
  15. %%
  16. DIFF = squeeze(nanmean(DIFFS,1));
  17. MEANS = nan(1,size(DIFF,1));
  18. for ch = 1:size(DIFF,1)
  19. temp = sort(squeeze(DIFF(ch,:)));
  20. MEANS(ch) = nanmean(temp(end-(nMaxs-1):end));
  21. end
  22. temp = sort(MEANS);temp = temp(~isnan(temp));ind = round(0.75*length(temp));
  23. THRS = temp(ind);
  24. indS = MEANS < THRS;
  25. %%
  26. % Remove Channels below the threshold
  27. for chu = 1:size(V4MS.CHUNKS,2)
  28. sign = V4MS.CHUNKS(chu).DATA;
  29. for bl = 1:size(sign,1)
  30. for ch = 1:size(sign,3)
  31. diffs = nan(3,19);
  32. for soa = 1:length(V4MS.META.SOAS)
  33. iTIME = V4MS.TIME > (V4MS.META.SOAS(soa)) & V4MS.TIME < (V4MS.META.SOAS(soa)+0.025);
  34. diffs(soa,:) = squeeze(sign(bl,iTIME,ch,soa+1)-sign(bl,iTIME,ch,1));
  35. end
  36. % keyboard
  37. diff = sort(squeeze(nanmean(diffs,1))); %CHANGED 2015-07-06, before diff = sort(squeeze(nanmean(diffs,1)));
  38. MAX = nanmean(diff(end-(nMaxs-1):end));
  39. if MAX > THRS
  40. sign(bl,:,ch,:) = nan;
  41. end
  42. end
  43. end
  44. V4MS.CHUNKS(chu).DATA = sign;
  45. end
  46. %%
  47. % Now procced to average for every chunk. Then take every electrode as a unit.
  48. for chu = 1:size(V4MS.CHUNKS,2)
  49. sign = V4MS.CHUNKS(chu).DATA;
  50. V4MS.CHUNKS(chu).AVE = squeeze(nanmean(sign,1));
  51. end
  52. % Make a copy and check whther each electrode should or suoldn't be included.
  53. for chu = 1:size(V4MS.CHUNKS,2)
  54. V4MS.CHUNKS(chu).CLEAN.AVE = V4MS.CHUNKS(chu).AVE;
  55. V4MS.CHUNKS(chu).CLEAN.IND = nan(size(V4MS.CHUNKS(chu).MESBL,1),1);
  56. for ch = 1:size(V4MS.CHUNKS(chu).MESBL,1)
  57. tempSIGNIF = zeros(3,1);
  58. for soa = 1:3
  59. tempSIGNIF(soa) = ttest2(squeeze(V4MS.CHUNKS(chu).MESBL(ch,soa,:)),squeeze(V4MS.CHUNKS(chu).MESMS(ch,soa,:)));
  60. end
  61. if ~isnan(sum(tempSIGNIF)) && sum(tempSIGNIF)~= 0 && ~isnan(nanmean(nanmean(V4MS.CHUNKS(chu).AVE(:,ch,:))))
  62. V4MS.CHUNKS(chu).CLEAN.IND(ch) = 1;
  63. elseif isnan(sum(tempSIGNIF)) || isnan(nanmean(nanmean(V4MS.CHUNKS(chu).AVE(:,ch,:))))
  64. V4MS.CHUNKS(chu).CLEAN.IND(ch) = nan;
  65. else
  66. V4MS.CHUNKS(chu).CLEAN.IND(ch) = 0;
  67. V4MS.CHUNKS(chu).CLEAN.AVE(:,ch,:) = nan;
  68. end
  69. end
  70. end
  71. % Concatenate all elctrodes together
  72. V4MS.UNITS = [];
  73. V4MS.CLEAN.UNITS = [];
  74. V4MS.CLEAN.UNITSIND = [];
  75. V4MS.MONKEY = [];
  76. V4MS.RFDATA = [];
  77. V4MS.PERF = [];
  78. V4MS.PERF_MONKEY = [];
  79. for chu = 1:size(V4MS.CHUNKS,2)
  80. V4MS.UNITS = cat(2,V4MS.UNITS,V4MS.CHUNKS(chu).AVE);
  81. V4MS.CLEAN.UNITS = cat(2,V4MS.CLEAN.UNITS,V4MS.CHUNKS(chu).CLEAN.AVE);
  82. V4MS.CLEAN.UNITSIND = [V4MS.CLEAN.UNITSIND; V4MS.CHUNKS(chu).CLEAN.IND];
  83. V4MS.MONKEY = cat(2,V4MS.MONKEY,V4MS.CHUNKS(chu).INFO.MONKEY);
  84. V4MS.RFDATA = cat(1,V4MS.RFDATA,V4MS.CHUNKS(chu).INFO.RFDATA);
  85. if nansum(V4MS.CHUNKS(chu).CLEAN.IND)
  86. V4MS.PERF = cat(1,V4MS.PERF,V4MS.CHUNKS(chu).PERF);
  87. V4MS.PERF_MONKEY= [V4MS.PERF_MONKEY ones(1,size(V4MS.CHUNKS(chu).PERF,1))*(strcmp(V4MS.CHUNKS(chu).INFO.MONKEY{1},'C')+1)];
  88. end
  89. end
  90. for m = 1:length(V4MS.MONKEY)
  91. if isempty(V4MS.MONKEY{m})
  92. V4MS.MONKEY{m} = 'B';
  93. end
  94. end
  95. V4MS.CLEAN.UNITSIND(isnan(V4MS.CLEAN.UNITSIND)) = 0;
  96. %%
  97. % compute average accross channels
  98. V4MS.AVE = squeeze(nanmean(V4MS.UNITS,2));
  99. V4MS.AVE_NON_SIG = squeeze(nanmean(V4MS.UNITS(:,~V4MS.CLEAN.UNITSIND,:),2));
  100. % compute average accross channels with an effect
  101. V4MS.CLEAN.AVE = squeeze(nanmean(V4MS.CLEAN.UNITS,2));
  102. % Effect for all channels
  103. EFFECT = nan(3,size(V4MS.UNITS,2));
  104. S = 10;
  105. BINS = 40;
  106. for soa = 1:3
  107. for ch = 1:size(V4MS.UNITS,2);
  108. iT = V4MS.TIME > (V4MS.META.SOAS(soa)+supressionWindow(1)) & V4MS.TIME < (V4MS.META.SOAS(soa)+supressionWindow(2));
  109. EFFECT(soa,ch) = nanmean(1*squeeze(V4MS.UNITS(iT,ch,soa+1) - V4MS.UNITS(iT,ch,1)));
  110. end
  111. end
  112. V4MS.EFFECT = EFFECT;
  113. % Effect for significative channels
  114. EFFECT = nan(3,size(V4MS.CLEAN.UNITS,2));
  115. S = 10;
  116. BINS = 40;
  117. for soa = 1:3
  118. for ch = 1:size(V4MS.CLEAN.UNITS,2);
  119. iT = V4MS.TIME > (V4MS.META.SOAS(soa)+supressionWindow(1)) & V4MS.TIME < (V4MS.META.SOAS(soa)+supressionWindow(2));
  120. EFFECT(soa,ch) = nanmean(1*squeeze(V4MS.CLEAN.UNITS(iT,ch,soa+1) - V4MS.CLEAN.UNITS(iT,ch,1)));
  121. end
  122. end
  123. V4MS.CLEAN.EFFECT = EFFECT;
  124. % Excitatory Effect for all channels
  125. EXCIT_EFFECT = nan(3,size(V4MS.UNITS,2));
  126. S = 10;
  127. BINS = 40;
  128. for soa = 1:3
  129. for ch = 1:size(V4MS.UNITS,2);
  130. iT = V4MS.TIME > (V4MS.META.SOAS(soa)+excitatoryWindow(1)) & V4MS.TIME < (V4MS.META.SOAS(soa)+excitatoryWindow(2));
  131. EXCIT_EFFECT(soa,ch) = nanmean(1*squeeze(V4MS.UNITS(iT,ch,soa+1) - V4MS.UNITS(iT,ch,1)));
  132. end
  133. end
  134. V4MS.EXCIT_EFFECT = EXCIT_EFFECT;
  135. % Effect for significative channels
  136. EXCIT_EFFECT = nan(3,size(V4MS.CLEAN.UNITS,2));
  137. S = 10;
  138. BINS = 40;
  139. for soa = 1:3
  140. for ch = 1:size(V4MS.CLEAN.UNITS,2);
  141. iT = V4MS.TIME > (V4MS.META.SOAS(soa)+excitatoryWindow(1)) & V4MS.TIME < (V4MS.META.SOAS(soa)+excitatoryWindow(2));
  142. EXCIT_EFFECT(soa,ch) = nanmean(1*squeeze(V4MS.CLEAN.UNITS(iT,ch,soa+1) - V4MS.CLEAN.UNITS(iT,ch,1)));
  143. end
  144. end
  145. V4MS.CLEAN.EXCIT_EFFECT = EXCIT_EFFECT;
  146. end