getDSsinks.m 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. %plot CSD profiles of DS
  2. %show histogram of sinks
  3. %allows selection of sinks using mouse
  4. %2021 Dino Dvorak, New York University, neuraldino@gmail.com
  5. %Dentate spikes and external control of hippocampal function,
  6. %Cell Reports, Volume 36, Issue 5, 2021,109497,ISSN 2211-1247,
  7. %https://doi.org/10.1016/j.celrep.2021.109497
  8. clear; close all; clc;
  9. drCSD = 'DS_CSD/';
  10. %input LFP file (channels x samples)
  11. fnEEG = '2016_09_30_PP12_334_PRETRAIN_BASE_eeg.mat';
  12. load([drCSD fnEEG])
  13. figure('Position',[10 100 1000 800])
  14. plotAboveBelow = 1; %1=above,-1=below
  15. minmax = [-1e4 2e4]; %for CSD plot
  16. %minmax = [-3e4 4e4];
  17. %set sinks to nan for first run
  18. %sinks = nan(1,4);
  19. %edit sinks when you localize sink bands
  20. sinks = [104,118,177,190];
  21. subplot(1,6,1:3);
  22. imagesc(resultsCSD,minmax)
  23. colormap(jet);
  24. h = title(fnEEG);
  25. set(h,'Interpreter','none');
  26. maxes = [];
  27. mins = [];
  28. for i = 1:size(resultsCSD,2)
  29. x = resultsCSD(:,i)';
  30. %sources
  31. kMax = find((x > [x(1) x(1:(end-1))]) & (x >= [x(2:end) x(end)]));
  32. kMax = kMax(kMax > 1 & kMax < 200);
  33. xMax = x(kMax);
  34. %sinks
  35. kMin = find((x < [x(1) x(1:(end-1))]) & (x <= [x(2:end) x(end)]));
  36. kMin = kMin(kMin > 1 & kMin < 200);
  37. xMin = x(kMin);
  38. ma = cat(1,kMax,xMax); %concatenate
  39. mi = cat(1,kMin,xMin); %concatenate
  40. maxes = cat(2, maxes, ma);
  41. mins = cat(2, mins, mi);
  42. end
  43. edges = 0.5:1:200.5;
  44. hma = histc(maxes(1,:),edges); %hist of locations
  45. hmi = histc(mins(1,:),edges); %hist of locations
  46. subplot(1,6,4);
  47. hold on;
  48. %plot(hma,edges+0.5,'r');
  49. plot(hmi,edges+0.5,'b');
  50. for i = 1:length(sinks)
  51. x = sinks(i);
  52. if isnan(x); continue; end;
  53. plot(hmi(x),x,'r.','MarkerSize',20);
  54. end
  55. axis ij tight
  56. %CSD average based on top 2 sinks
  57. if ~isnan(sinks(1)) && ~isnan(sinks(2))
  58. kKeep = false(2,size(resultsCSD,2));
  59. for i = 1:size(resultsCSD,2)
  60. x = resultsCSD(:,i)';
  61. %sinks
  62. kMin = find((x < [x(1) x(1:(end-1))]) & (x <= [x(2:end) x(end)]));
  63. kMin = kMin(kMin > 1 & kMin < 200);
  64. if sum(kMin > sinks(1)-4 & kMin < sinks(1)+4) > 0 %DS1
  65. kKeep(1,i) = 1;
  66. end
  67. if sum(kMin > sinks(2)-4 & kMin < sinks(2)+4) > 0 %DS2
  68. kKeep(2,i) = 2;
  69. end
  70. end
  71. subplot(1,6,5); hold on;
  72. %DS1
  73. k = kKeep(1,:);
  74. csd = resultsCSD(:,k);
  75. csd = nanmean(csd,2);
  76. plot(csd,1:200,'r');
  77. %DS2
  78. k = kKeep(2,:);
  79. csd = resultsCSD(:,k);
  80. csd = nanmean(csd,2);
  81. plot(csd,1:200,'k');
  82. axis ij tight;
  83. end %top inks
  84. %CSD average based on bottom 2 sinks
  85. if ~isnan(sinks(3)) && ~isnan(sinks(4))
  86. kKeep = false(2,size(resultsCSD,2));
  87. for i = 1:size(resultsCSD,2)
  88. x = resultsCSD(:,i)';
  89. %sinks
  90. kMin = find((x < [x(1) x(1:(end-1))]) & (x <= [x(2:end) x(end)]));
  91. kMin = kMin(kMin > 1 & kMin < 200);
  92. if sum(kMin > sinks(3)-4 & kMin < sinks(3)+4) > 0 %DS1
  93. kKeep(1,i) = 1;
  94. end
  95. if sum(kMin > sinks(4)-4 & kMin < sinks(4)+4) > 0 %DS2
  96. kKeep(2,i) = 2;
  97. end
  98. end
  99. subplot(1,6,6); hold on;
  100. %DS1
  101. k = kKeep(2,:);
  102. csd = resultsCSD(:,k);
  103. csd = nanmean(csd,2);
  104. plot(csd,1:200,'r');
  105. %DS2
  106. k = kKeep(1,:);
  107. csd = resultsCSD(:,k);
  108. csd = nanmean(csd,2);
  109. plot(csd,1:200,'k');
  110. axis ij tight;
  111. end %top inks