free_move_correlation.m 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. %% Freely Moving Kinetics
  2. clear;
  3. %% Import file and extract full signal
  4. [files, path] = uigetfile({'*.MotoTrak;*.ArdyMotor'},...
  5. 'Select Mototrak File', ...
  6. 'multiselect','on');
  7. try
  8. cd(path);
  9. catch err
  10. return
  11. end
  12. if ischar(files) %If only one file was selected...
  13. files = {files}; %Convert the string to a cell array.
  14. end
  15. for i = 1:length(files)
  16. D = dir(files{1,i});
  17. Bytes(i) = D.bytes;
  18. end
  19. [row, col] = find(Bytes>500);
  20. files = files(col);
  21. knob_data.trial_length = 500;
  22. knob_data.num_sessions = length(files);
  23. knob_data.combined_sessions_length = 0;
  24. knob_data.session_length = nan(1, length(files));
  25. knob_data.max_session_trials = 0;
  26. for s = 1:knob_data.num_sessions
  27. try %Try to read in the data file...
  28. [~,filename,ext] = fileparts(files{s});
  29. switch ext
  30. case '.ArdyMotor'
  31. data = ArdyMotorFileRead(files{s});
  32. case '.MotoTrak'
  33. data = MotoTrakFileRead(files{s});
  34. data = MotoTrak_to_ArdyMotor(data);
  35. data.rat = data.subject;
  36. end
  37. % temp = ArdyMotorFileRead(files{f}); %Read in the data from each file.
  38. catch err %If an error occurs...
  39. warning(['ERROR READING: ' files{s}]); %Show which file had a read problem...
  40. warning(err.message); %Show the actual error message.
  41. continue
  42. end
  43. % data = ArdyMotorFileRead(files{s});
  44. temp = length(data.trial);
  45. knob_data.combined_length = temp+knob_data.combined_sessions_length;
  46. knob_data.session_length(s) = temp;
  47. if knob_data.session_length(s) > knob_data.max_session_trials
  48. knob_data.max_session_trials = knob_data.session_length(s);
  49. end
  50. end
  51. knob_data.combined_trials = nan(knob_data.combined_length, 500);
  52. knob_data.trial = nan(knob_data.max_session_trials, 500, knob_data.num_sessions);
  53. % for t = 1:length(data.trial) %Step through each trial.
  54. % data.trial(t).timestamps = ...
  55. % double(data.trial(t).sample_times)/86400000 + ...
  56. % data.trial(t).starttime; %Convert the sample times to serial date numbers.
  57. % end
  58. %
  59. % time = vertcat(data.trial.timestamps);
  60. for i = 1:length(files)
  61. signal(:,i) = vertcat(data.trial.signal);
  62. end
  63. %% Find and classify peaks in the force signal
  64. lower = 15;
  65. upper = 18;
  66. three = 3;
  67. nine = 9;
  68. [pks, locs, widths] = findpeaks(signal, 'MinPeakHeight', three, 'MinPeakDistance', 8); %Finds peaks and their corresponding locations for pulls over 3 grams at least 0.4s apart
  69. peakTimes = locs;
  70. pks = pks(1: length(peakTimes));
  71. NumPeaks = length(pks);
  72. trial_start = 1:1:NumPeaks;
  73. trial_end = 1:1:NumPeaks;
  74. width_full = widths;
  75. avg_pull = mean(width_full);
  76. for i = 1:NumPeaks
  77. trial_start(1,i) = peakTimes(i,1) - avg_pull;
  78. trial_end(1,i) = peakTimes(i,1) + avg_pull;
  79. end
  80. R_trial_start = floor(trial_start);
  81. R_trial_end = ceil(trial_end);
  82. pullTimes = reshape([R_trial_start(:) R_trial_end(:)]', [1, 2* NumPeaks]);
  83. behavior = cell(1, NumPeaks);
  84. for j = 1:2:length(pullTimes)
  85. behavior{1,j} = signal(pullTimes(j) : pullTimes(j+1), 1);
  86. end
  87. behavior(cellfun('isempty',behavior)) = [];
  88. [pks, locs, widths] = findpeaks(signal, 'MinPeakHeight', lower, 'MinPeakDistance', 8);
  89. if pks > 0
  90. for i = 1:length(pks)
  91. if pks(i,:) > upper
  92. locs(i,:) = 1;
  93. widths(i,:) = 1;
  94. end
  95. end
  96. locs(locs == 1) = [];
  97. widths(widths == 1) = [];
  98. successPeaks = locs;
  99. end
  100. [~, index_successPeaks, index_peakTimes] = intersect(successPeaks,peakTimes,'rows');
  101. successloc = zeros(1, length(peakTimes));
  102. successloc(:,index_peakTimes) = 1;
  103. successloc(1,1) = 0;
  104. for j = 1:size(behavior,2) - 1
  105. temp = corrcoef(behavior{1,j}, behavior{1,j+1});
  106. pull_corr{1,j} = temp(1,2);
  107. end
  108. avg_pull_corr = mean(abs(cell2mat(pull_corr)));
  109. for i = 1:size(behavior,2) - 1
  110. if successloc(:,i) == 1
  111. temp = corrcoef(behavior{1,i}, behavior{1,i-1});
  112. suc_prevcorr{1,i} = temp(1,2);
  113. else
  114. temp = NaN;
  115. suc_prevcorr{1,i} = NaN;
  116. end
  117. end
  118. for i = 1:size(behavior,2) - 1
  119. if successloc(:,i) == 1
  120. temp = corrcoef(behavior{1,i}, behavior{1,i+1});
  121. suc_postcorr{1,i} = temp(1,2);
  122. else
  123. temp = NaN;
  124. suc_postcorr{1,i} = NaN;
  125. end
  126. end
  127. avg_presuccess_corr = nanmean(abs(cell2mat(suc_prevcorr)));
  128. avg_postsuccess_corr = nanmean(abs(cell2mat(suc_postcorr)));
  129. % %%
  130. % numNeurons = size(Cd_N,1);
  131. % activity = cell(numNeurons, length(pullTimes) / 2);
  132. %
  133. % for i = 1:numNeurons
  134. % for j = 1:2:length(pullTimes)
  135. % activity{i,j} = Cd_N(i, pullTimes(j) : pullTimes(j+1));
  136. % end
  137. % end
  138. %
  139. % activity(cellfun('isempty',activity)) = [];
  140. % activity = reshape(activity, [numNeurons, length(meanFrames)/2]);
  141. % activity2 = cell2mat(activity);