reviewTimeEffects.m 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435
  1. %% Analyse potential time effects on the three main criteria
  2. % This script offers multiple options to analyse difference of the first
  3. % and last trial. The three main features interneuron spike amplitude, T
  4. % cell respose to a -2 nA stimulus and the latency of the interneuron
  5. % respose to a T cell spike can be analysed.
  6. % The first part offers curve sets for the T cell amplitudes and the spike
  7. % triggered average as well as trend curves for the interneuron spike
  8. % amplitude and the T cell amplitudes.
  9. % The second part shows the 3D scatter plots of the three criteria. Each
  10. % scatter plot is available three times: for the first trial, for the last
  11. % trial and for the average over all trials.
  12. % The third part offers a table that is printed to the command window
  13. % giving the differences between the first and the last trial stated as
  14. % numeric differences of the three criteria.
  15. % All single appraoches can be used to estimate changes over the trials and
  16. % to spot abnormalties, which then can be reviewed further.
  17. % -------------------------------------------------------------------------
  18. % Program by: Bjarne Schultze [last modified: 10.03.2022]
  19. % -------------------------------------------------------------------------
  20. %% Analyse time effects with curve sets
  21. % check the curvesets for the amplitudes (brighter colors indicate later
  22. % trials)
  23. ampAtStim_curveset(1:62, 'StimCell', 'INT')
  24. % check the curvesets for the spike triggered average of the postsynaptic
  25. % response
  26. spikeTrigAvg_postsyn_curveset(41:62)
  27. %% Analyse time effects with trend curves
  28. % check the variability of the spike amplitude (and/or its measurement)
  29. % for all trials together: measured spike height plotted against its index
  30. intSpikeHeight_trend(1:62)
  31. % create a trend curve for the measured amplitudes for the T cell during
  32. % the -2 and the 1.5 nA stimulus
  33. % obtain the necessary data
  34. amps = ampAtStim(1:62, 'Stimuli', [-2,1.5], 'StimCell', 'INT');
  35. % plot the data in one figure per trial
  36. for i = 1:62
  37. figure();
  38. stimINT = setdiff((1:size(amps{i}.AmplitudeT,2)),amps{i}.stimulatedT);
  39. xData = 1:length(stimINT);
  40. yData2nA = amps{i}.AmplitudeT(1,stimINT);
  41. yData15nA = amps{i}.AmplitudeT(2,stimINT);
  42. % create plot and labels
  43. plot(xData, yData2nA, 'o', 'Color', [0,0.34,0.64], ...
  44. 'MarkerFaceColor',[0,0.34,0.64])
  45. hold on; plot(xData, yData15nA, 'o', 'Color', [1,0.7,0], ...
  46. 'MarkerFaceColor', [1,0.7,0]); hold off
  47. xlabel("trial"); ylabel("T cell amplitude [mV]");
  48. title(sprintf("T cell response over time - File: %g",i))
  49. legend("response to -2 nA stimulus", "response to 1.5 nA stimulus")
  50. end
  51. %% Compare the three main features for the first and the last trial
  52. % calculate the amplitudes for the T cell during int stimulation (-2 and
  53. % 1.5 nA stimuli)
  54. if ~exist('amps','var')
  55. amps = ampAtStim(1:62, 'Stimuli', [-2,1.5], 'StimCell', 'INT');
  56. end
  57. % pre-allocate vectors for data gathering
  58. spikeHeights_firstTrial = zeros(62,1);
  59. spikeHeights_lastTrial = zeros(62,1);
  60. latencies_firstTrial = zeros(62,1);
  61. latencies_lastTrial = zeros(62,1);
  62. amp_m2nAStim_firstTrial = zeros(62,1);
  63. amp_1_5nAStim_firstTrial = zeros(62,1);
  64. amp_m2nAStim_lastTrial = zeros(62,1);
  65. amp_1_5nAStim_lastTrial = zeros(62,1);
  66. for i = 1:62
  67. % obtain the numbers of the first and the last trial
  68. stimT = amps{i}.stimulatedT;
  69. trials = 1:size(amps{i}.AmplitudeT,2);
  70. stimINT = setdiff(trials,stimT);
  71. firstTrialINT = min(stimINT);
  72. lastTrialINT = max(stimINT);
  73. firstTrialT = min(stimT);
  74. lastTrialT = max(stimT);
  75. % get the latencies for the int response in first and last trial
  76. latencies_firstTrial(i,1) = spikeTrigAvg_postsyn(i,firstTrialT);
  77. latencies_lastTrial(i,1) = spikeTrigAvg_postsyn(i, lastTrialT);
  78. % get the spike amplitudes for first and last trial
  79. spikeHeights_firstTrial(i,1) = intSpikeHeight(i,firstTrialINT);
  80. spikeHeights_lastTrial(i,1) = intSpikeHeight(i,lastTrialINT);
  81. % gather the T cell amplitudes for -2 and 1.5 nA stimuli
  82. amp_m2nAStim_firstTrial(i,1) = amps{i,1}.AmplitudeT(1,firstTrialINT);
  83. amp_1_5nAStim_firstTrial(i,1) = amps{i,1}.AmplitudeT(2,firstTrialINT);
  84. amp_m2nAStim_lastTrial(i,1) = amps{i,1}.AmplitudeT(1,lastTrialINT);
  85. amp_1_5nAStim_lastTrial(i,1) = amps{i,1}.AmplitudeT(2,lastTrialINT);
  86. end
  87. % correct the values for the non-spiking cells
  88. spikeHeights_firstTrial([5,10,26,36,38,40]) = -10;
  89. spikeHeights_lastTrial([5,10,26,36,38,40]) = -10;
  90. latencies_lastTrial(isnan(latencies_lastTrial)) = 60;
  91. latencies_firstTrial(isnan(latencies_firstTrial)) = 60;
  92. % load additional files
  93. load("../AdditionalFiles/decisionData.mat")
  94. load("../AdditionalFiles/deanonymization.mat")
  95. % get the numbers of the cells in each package
  96. pack_1_3 = find(eq(deanonymization.package(:,1),13));
  97. pack_2 = find(eq(deanonymization.package(:,1),2));
  98. pack_4_6 = find(eq(deanonymization.package(:,1),46));
  99. pack_5 = find(eq(deanonymization.package(:,1),5));
  100. % take the assigned cell types into account
  101. int218 = find(eq(deanonymization.cellType(:,1),218));
  102. int162 = find(eq(deanonymization.cellType(:,1),162));
  103. int264 = find(eq(deanonymization.cellType(:,1),264));
  104. int212 = find(eq(deanonymization.cellType(:,1),212));
  105. int201203 = find(eq(deanonymization.cellType(:,1),201203));
  106. int159 = find(eq(deanonymization.cellType(:,1),159));
  107. int157 = find(eq(deanonymization.cellType(:,1),157));
  108. int6061 = find(eq(deanonymization.cellType(:,1),6061));
  109. %% Analyse time effects by comparing the 3D scatter plots
  110. % ---- scatter plots for all packages together ----------------------------
  111. fig10 = figure();
  112. tiledlayout(1,3)
  113. fontSze = 11;
  114. nexttile
  115. scatter3(spike_heights(pack_1_3),amp_minus2nA_stim(pack_1_3), ...
  116. latencies(pack_1_3), 'MarkerEdgeColor',[0,0,0], 'MarkerFaceColor', ...
  117. [0.2,0.6,1])
  118. hold on;
  119. scatter3(spike_heights(pack_2),amp_minus2nA_stim(pack_2),latencies(pack_2), ...
  120. 'MarkerEdgeColor',[0,0,0], 'MarkerFaceColor',[1,0.6,0.2])
  121. scatter3(spike_heights(pack_4_6),amp_minus2nA_stim(pack_4_6), ...
  122. latencies(pack_4_6), 'MarkerEdgeColor',[0,0,0], 'MarkerFaceColor', ...
  123. [0.6,0.8,0.2])
  124. scatter3(spike_heights(pack_5),amp_minus2nA_stim(pack_5),latencies(pack_5), ...
  125. 'MarkerEdgeColor',[0,0,0], 'MarkerFaceColor',[0.6,0.2,0.6])
  126. hold off;
  127. % labelling
  128. xlabel("spike amplitude [mV]");
  129. ylabel("T cell amplitude [mV]");
  130. zlabel("latency [ms]");
  131. title("all trials")
  132. legend("Packages 1 & 3", "Package 2", "Packages 4 & 6", ...
  133. "Packages 5", 'FontSize', fontSze);
  134. nexttile
  135. scatter3(spikeHeights_firstTrial(pack_1_3),...
  136. amp_m2nAStim_firstTrial(pack_1_3), latencies_firstTrial(pack_1_3), ...
  137. 'MarkerEdgeColor',[0,0,0], 'MarkerFaceColor', ...
  138. [0.2,0.6,1])
  139. hold on;
  140. scatter3(spikeHeights_firstTrial(pack_2), ...
  141. amp_m2nAStim_firstTrial(pack_2),latencies_firstTrial(pack_2), ...
  142. 'MarkerEdgeColor',[0,0,0], 'MarkerFaceColor',[1,0.6,0.2])
  143. scatter3(spikeHeights_firstTrial(pack_4_6),amp_minus2nA_stim(pack_4_6), ...
  144. latencies_firstTrial(pack_4_6), 'MarkerEdgeColor',[0,0,0], ...
  145. 'MarkerFaceColor', ...
  146. [0.6,0.8,0.2])
  147. scatter3(spikeHeights_firstTrial(pack_5), ...
  148. amp_m2nAStim_firstTrial(pack_5),latencies_firstTrial(pack_5), ...
  149. 'MarkerEdgeColor',[0,0,0], 'MarkerFaceColor',[0.6,0.2,0.6])
  150. hold off;
  151. % labelling
  152. xlabel("spike amplitude [mV]");
  153. ylabel("T cell amplitude [mV]");
  154. zlabel("latency [ms]");
  155. title("first trial")
  156. nexttile
  157. scatter3(spikeHeights_lastTrial(pack_1_3), ...
  158. amp_m2nAStim_lastTrial(pack_1_3), latencies_lastTrial(pack_1_3), ...
  159. 'MarkerEdgeColor',[0,0,0], 'MarkerFaceColor', ...
  160. [0.2,0.6,1])
  161. hold on;
  162. scatter3(spikeHeights_lastTrial(pack_2), ...
  163. amp_m2nAStim_lastTrial(pack_2),latencies_lastTrial(pack_2), ...
  164. 'MarkerEdgeColor',[0,0,0], 'MarkerFaceColor',[1,0.6,0.2])
  165. scatter3(spikeHeights_lastTrial(pack_4_6), ...
  166. amp_m2nAStim_lastTrial(pack_4_6), latencies_lastTrial(pack_4_6), ...
  167. 'MarkerEdgeColor',[0,0,0], 'MarkerFaceColor', ...
  168. [0.6,0.8,0.2])
  169. scatter3(spikeHeights_lastTrial(pack_5), ...
  170. amp_m2nAStim_lastTrial(pack_5),latencies_lastTrial(pack_5), ...
  171. 'MarkerEdgeColor',[0,0,0], 'MarkerFaceColor',[0.6,0.2,0.6])
  172. hold off;
  173. % labelling
  174. xlabel("spike amplitude [mV]");
  175. ylabel("T cell amplitude [mV]");
  176. zlabel("latency [ms]");
  177. title("last trial")
  178. % ---- scatter plots for packages 4 to 5 ----------------------------------
  179. % set up the figure
  180. fig11 = figure;
  181. tiledlayout(2,3)
  182. % plot the data
  183. nexttile % packages 4 and 6 (interneurons 60-61)
  184. scatter3(spike_heights(int6061),amp_minus2nA_stim(int6061),...
  185. latencies(int6061), 'MarkerEdgeColor',[0,0,0], ...
  186. 'MarkerFaceColor',[0.87,0.87,0.23]);
  187. title("all trials")
  188. % labelling
  189. xlabel("spike amplitude [mV]");
  190. ylabel("T cell amplitude [mV]");
  191. zlabel("latency [ms]");
  192. legend("int 60-61")
  193. nexttile % packages 4 and 6 (interneurons 60-61)
  194. scatter3(spikeHeights_firstTrial(int6061),amp_m2nAStim_firstTrial(int6061),...
  195. latencies_firstTrial(int6061), 'MarkerEdgeColor',[0,0,0], ...
  196. 'MarkerFaceColor',[0.87,0.87,0.23]);
  197. title("first trial")
  198. % labelling
  199. xlabel("spike amplitude [mV]");
  200. ylabel("T cell amplitude [mV]");
  201. zlabel("latency [ms]");
  202. legend("int 60-61")
  203. nexttile
  204. scatter3(spikeHeights_lastTrial(int6061),amp_m2nAStim_lastTrial(int6061),...
  205. latencies_lastTrial(int6061), 'MarkerEdgeColor',[0,0,0], ...
  206. 'MarkerFaceColor',[0.87,0.87,0.23]);
  207. title("last trial")
  208. % labelling
  209. xlabel("spike amplitude [mV]");
  210. ylabel("T cell amplitude [mV]");
  211. zlabel("latency [ms]");
  212. legend("int 60-61")
  213. nexttile % package 5 (interneuron 264)
  214. scatter3(spike_heights(int264),amp_minus2nA_stim(int264),...
  215. latencies(int264), 'MarkerEdgeColor',[0,0,0], ...
  216. 'MarkerFaceColor',[0,0.4,0.7]);
  217. title("all trials")
  218. % labelling
  219. xlabel("spike amplitude [mV]");
  220. ylabel("T cell amplitude [mV]");
  221. zlabel("latency [ms]");
  222. legend("int 264")
  223. nexttile % package 5 (interneuron 264)
  224. scatter3(spikeHeights_firstTrial(int264),amp_m2nAStim_firstTrial(int264),...
  225. latencies_firstTrial(int264),'MarkerEdgeColor',[0,0,0], ...
  226. 'MarkerFaceColor',[0,0.4,0.7]);
  227. title("first trial")
  228. % labelling
  229. xlabel("spike amplitude [mV]");
  230. ylabel("T cell amplitude [mV]");
  231. zlabel("latency [ms]");
  232. legend("int 264")
  233. nexttile % package 5 (interneuron 264)
  234. scatter3(spikeHeights_lastTrial(int264),amp_m2nAStim_lastTrial(int264),...
  235. latencies_lastTrial(int264),'MarkerEdgeColor',[0,0,0], ...
  236. 'MarkerFaceColor',[0,0.4,0.7]);
  237. title("last trial")
  238. % labelling
  239. xlabel("spike amplitude [mV]");
  240. ylabel("T cell amplitude [mV]");
  241. zlabel("latency [ms]");
  242. legend("int 264")
  243. % adjust axes
  244. ax = fig11.Children.Children;
  245. ax(2).XLim = [-10,60]; ax(2).YLim = [-10,0]; ax(2).ZLim = [0,60];
  246. ax(4).XLim = [-10,60]; ax(4).YLim = [-10,0]; ax(4).ZLim = [0,60];
  247. ax(6).XLim = [-10,60]; ax(6).YLim = [-10,0]; ax(6).ZLim = [0,60];
  248. ax(8).XLim = [-10,60]; ax(8).YLim = [-10,0]; ax(8).ZLim = [0,60];
  249. ax(10).XLim = [-10,60]; ax(12).YLim = [-10,0]; ax(12).ZLim = [0,60];
  250. ax(12).XLim = [-10,60]; ax(12).YLim = [-10,0]; ax(12).ZLim = [0,60];
  251. % ---- scatter plot for packge 2 ------------------------------------------
  252. % plot the data
  253. fig12 = figure;
  254. tiledlayout(1,3)
  255. nexttile
  256. scatter3(spike_heights(int218), amp_minus2nA_stim(int218), ...
  257. latencies(int218),'MarkerEdgeColor',[0,0,0], ...
  258. 'MarkerFaceColor',[0.4,0.8,0.8])
  259. hold on;
  260. scatter3(spike_heights(int212), amp_minus2nA_stim(int212), ...
  261. latencies(int212),'MarkerEdgeColor',[0,0,0], ...
  262. 'MarkerFaceColor',[0.8,0.2,0.1])
  263. scatter3(spike_heights(int201203),amp_minus2nA_stim(int201203),...
  264. latencies(int201203), 'MarkerEdgeColor',[0,0,0],...
  265. 'MarkerFaceColor', [0.4,0.7,0.1])
  266. hold off;
  267. % labelling
  268. xlabel("spike amplitude [mV]");
  269. ylabel("T cell amplitude [mV]");
  270. zlabel("latency [ms]");
  271. legend("int 218","int 212", "int 201-203")
  272. title("all trials")
  273. nexttile
  274. scatter3(spikeHeights_firstTrial(int218), amp_m2nAStim_firstTrial(int218), ...
  275. latencies_firstTrial(int218),'MarkerEdgeColor',[0,0,0], ...
  276. 'MarkerFaceColor',[0.4,0.8,0.8])
  277. hold on;
  278. scatter3(spikeHeights_firstTrial(int212), amp_m2nAStim_firstTrial(int212), ...
  279. latencies_firstTrial(int212),'MarkerEdgeColor',[0,0,0], ...
  280. 'MarkerFaceColor',[0.8,0.2,0.1])
  281. scatter3(spikeHeights_firstTrial(int201203), ...
  282. amp_m2nAStim_firstTrial(int201203), latencies_firstTrial(int201203), ...
  283. 'MarkerEdgeColor',[0,0,0],'MarkerFaceColor', [0.4,0.7,0.1])
  284. hold off;
  285. % labelling
  286. xlabel("spike amplitude [mV]");
  287. ylabel("T cell amplitude [mV]");
  288. zlabel("latency [ms]");
  289. title("first trial")
  290. nexttile
  291. scatter3(spikeHeights_lastTrial(int218), amp_m2nAStim_lastTrial(int218), ...
  292. latencies_lastTrial(int218),'MarkerEdgeColor',[0,0,0], ...
  293. 'MarkerFaceColor',[0.4,0.8,0.8])
  294. hold on;
  295. scatter3(spikeHeights_lastTrial(int212), amp_m2nAStim_lastTrial(int212), ...
  296. latencies_lastTrial(int212),'MarkerEdgeColor',[0,0,0], ...
  297. 'MarkerFaceColor',[0.8,0.2,0.1])
  298. scatter3(spikeHeights_lastTrial(int201203), ...
  299. amp_m2nAStim_lastTrial(int201203), latencies_lastTrial(int201203), ...
  300. 'MarkerEdgeColor',[0,0,0],'MarkerFaceColor', [0.4,0.7,0.1])
  301. hold off;
  302. % labelling
  303. xlabel("spike amplitude [mV]");
  304. ylabel("T cell amplitude [mV]");
  305. zlabel("latency [ms]");
  306. title("last trial")
  307. % adjust axes
  308. ax = fig12.Children.Children;
  309. ax(1).XLim = [-10,60]; ax(1).YLim = [-10,0]; ax(1).ZLim = [0,60];
  310. ax(2).XLim = [-10,60]; ax(2).YLim = [-10,0]; ax(2).ZLim = [0,60];
  311. ax(4).XLim = [-10,60]; ax(4).YLim = [-10,0]; ax(4).ZLim = [0,60];
  312. % ---- scatter plots for packages 1 and 3 ---------------------------------
  313. % plot the data
  314. fig13 = figure;
  315. tiledlayout(1,3)
  316. nexttile
  317. scatter3(spike_heights(int159), amp_minus2nA_stim(int159), ...
  318. latencies(int159),'MarkerEdgeColor',[0,0,0], ...
  319. 'MarkerFaceColor',[0.1,0.8,0.2])
  320. hold on;
  321. scatter3(spike_heights(int157), amp_minus2nA_stim(int157), ...
  322. latencies(int157),'MarkerEdgeColor',[0,0,0], ...
  323. 'MarkerFaceColor',[1,0.75,0])
  324. scatter3(spike_heights(int162), amp_minus2nA_stim(int162), ...
  325. latencies(int162),'MarkerEdgeColor',[0,0,0], ...
  326. 'MarkerFaceColor',[0.7,0.7,0.4])
  327. hold off;
  328. % labelling
  329. xlabel("spike amplitude [mV]");
  330. ylabel("T cell amplitude [mV]");
  331. zlabel("latency [ms]");
  332. legend("int 159","int 157", "int 162")
  333. nexttile
  334. scatter3(spikeHeights_firstTrial(int159), amp_m2nAStim_firstTrial(int159), ...
  335. latencies_firstTrial(int159),'MarkerEdgeColor',[0,0,0], ...
  336. 'MarkerFaceColor',[0.1,0.8,0.2])
  337. hold on;
  338. scatter3(spikeHeights_firstTrial(int157), amp_m2nAStim_firstTrial(int157), ...
  339. latencies_firstTrial(int157),'MarkerEdgeColor',[0,0,0], ...
  340. 'MarkerFaceColor',[1,0.75,0])
  341. scatter3(spikeHeights_firstTrial(int162), amp_m2nAStim_firstTrial(int162), ...
  342. latencies_firstTrial(int162),'MarkerEdgeColor',[0,0,0], ...
  343. 'MarkerFaceColor',[0.7,0.7,0.4])
  344. hold off;
  345. % labelling
  346. xlabel("spike amplitude [mV]");
  347. ylabel("T cell amplitude [mV]");
  348. zlabel("latency [ms]");
  349. title("first trial")
  350. nexttile
  351. scatter3(spikeHeights_lastTrial(int159), amp_m2nAStim_lastTrial(int159), ...
  352. latencies_lastTrial(int159),'MarkerEdgeColor',[0,0,0], ...
  353. 'MarkerFaceColor',[0.1,0.8,0.2])
  354. hold on;
  355. scatter3(spikeHeights_lastTrial(int157), amp_m2nAStim_lastTrial(int157), ...
  356. latencies_lastTrial(int157),'MarkerEdgeColor',[0,0,0], ...
  357. 'MarkerFaceColor',[1,0.75,0])
  358. scatter3(spikeHeights_lastTrial(int162), amp_m2nAStim_lastTrial(int162), ...
  359. latencies_lastTrial(int162),'MarkerEdgeColor',[0,0,0], ...
  360. 'MarkerFaceColor',[0.7,0.7,0.4])
  361. hold off;
  362. % labelling
  363. xlabel("spike amplitude [mV]");
  364. ylabel("T cell amplitude [mV]");
  365. zlabel("latency [ms]");
  366. title("last trial")
  367. % adjust the axes
  368. ax = fig13.Children.Children;
  369. ax(1).XLim = [-10,60]; ax(1).YLim = [-10,0]; ax(1).ZLim = [0,60];
  370. ax(2).XLim = [-10,60]; ax(2).YLim = [-10,0]; ax(2).ZLim = [0,60];
  371. ax(4).XLim = [-10,60]; ax(4).YLim = [-10,0]; ax(4).ZLim = [0,60];
  372. %% Analyse time effect by the variation of the values, comparison table
  373. % calculate the differences for first and last trial
  374. diff_spikeAmps = abs(spikeHeights_firstTrial-spikeHeights_lastTrial);
  375. diff_amp2nAStim = abs(amp_m2nAStim_firstTrial-amp_m2nAStim_lastTrial);
  376. diff_latencies = abs(latencies_firstTrial-latencies_lastTrial);
  377. % create a header for the output
  378. feature_list(1,1) = sprintf("\nComparison of the main features " + ...
  379. "regarding their difference from first to last trial\n" + ...
  380. "---------------------------------------------\n" + ...
  381. "Cell \t\x0394 spike \t\x0394 amp -2 nA \t\x0394 latency\n" + ...
  382. "number \tamplitude\tstimulus \n" + ...
  383. "\t\t[mV] \t\t[mV] \t\t\t[ms] \n" + ...
  384. "---------------------------------------------\n");
  385. % write the difference values into seperate lines with a nice layout
  386. for i = 1:62
  387. feature_list(i+1,1) = sprintf("%02.f | \t%05.2f \t\t%04.2f " + ...
  388. "\t\t\t%04.1f\n", ...
  389. i, diff_spikeAmps(i,1), diff_amp2nAStim(i,1), ...
  390. diff_latencies(i,1));
  391. end
  392. % add an endline for the output table
  393. feature_list(64,1) = ...
  394. sprintf("---------------------------------------------\n");
  395. % print the table to the command window
  396. fprintf("%s", feature_list)