AssignModulesAndQuantify.m 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. import tools.GetCSVs;
  2. % import tools.GetSubjects;
  3. pathdir = uigetdir(); % TODO: can this be passed along in SEB3R?
  4. files = dir(pathdir);
  5. nfiles = length(files);
  6. % TODO: replace with GetSubjects?
  7. for i=1:nfiles
  8. if files(i).isdir
  9. numFrames = files(i).name;
  10. if ~isnan(str2double(numFrames))
  11. Assign(pathdir, numFrames);
  12. end
  13. end
  14. end
  15. function FrequenciesModules = Assign(pathdir, subject)
  16. set(0,'DefaultFigureVisible','off');
  17. %This step assigns the final BM to each frame, animal-by-animal.
  18. %The output prints CSV files containing BM assigned at any given frame of
  19. %the original CSV files plus a summary table of BMs frequency for each test
  20. %trial.
  21. % Get the ModulesAssigned.CSV file and create a new matrix with it.
  22. ModulesAssigned = readmatrix(fullfile(pathdir, 'ModulesAssigned.csv'));
  23. clusterPathdir = fullfile(pathdir, subject, 'Clusters');
  24. modulePathdir = fullfile(pathdir, subject, 'Modules');
  25. subjectAsNum = str2double(subject);
  26. mkdir(modulePathdir);
  27. [phaseLabels, phaseCSVs] = GetCSVs(clusterPathdir, 'Clustered');
  28. disp(clusterPathdir);
  29. disp(phaseCSVs);
  30. clusteredPhases = LoadCSVsAsMatrix(clusterPathdir, phaseCSVs);
  31. numPhases = length(phaseLabels);
  32. numModules = max(ModulesAssigned(:,3)); % Maximum cluster number
  33. % TODO: explain what 8 and 9 and 3 are.
  34. modulesMean = zeros(numPhases, numModules, 8);
  35. % Reassign clusters to modules
  36. for phase=(1:numPhases)
  37. singlePhaseCluster = squeeze(clusteredPhases(phase, :, :));
  38. for index=(1:length(ModulesAssigned))
  39. for i = (1:length(singlePhaseCluster(:, 8)))
  40. if ModulesAssigned(index,1) == subjectAsNum && singlePhaseCluster(i,8)==ModulesAssigned(index,2);
  41. clusteredPhases(phase, i, 9)=(ModulesAssigned(index,3));
  42. end
  43. end
  44. end
  45. % Reload, just in case Matlab keeps an old version
  46. singlePhaseCluster = squeeze(clusteredPhases(phase, :, :));
  47. phaseName = phaseLabels{phase};
  48. phasePath = fullfile(modulePathdir, ['Mouse' phaseName '.csv'] );
  49. writematrix(singlePhaseCluster, phasePath);
  50. title = [phaseName 'poses overtime'];
  51. fig = figure ('Name', title);
  52. scatter(singlePhaseCluster(:,1), singlePhaseCluster(:,9));
  53. saveas(fig, fullfile(modulePathdir, [phaseName '_over_time.png']));
  54. % Calculate per-BM frequency distribution
  55. for Module2Explore=1:numModules
  56. numFrames=length(singlePhaseCluster);
  57. % ... WHY ARE WE DOING THIS???
  58. Cluster(1:9)=zeros;
  59. ClusterIndex=0;
  60. for frame=1:numFrames
  61. if singlePhaseCluster(frame,9)==Module2Explore
  62. % There are better ways to do this actually...
  63. ClusterIndex=(ClusterIndex+1);
  64. Cluster(ClusterIndex,1:9)=squeeze(singlePhaseCluster(frame,1:9));
  65. end
  66. end
  67. disp(size(Cluster));
  68. ClusterFrequency=length(Cluster)
  69. if Cluster==0
  70. ClusterFrequency=0;
  71. end
  72. ClusterMean(1:6)=[mean(Cluster(:,2:7))];
  73. disp(size(Cluster(:, 2:7)));
  74. disp(size(mean(Cluster(:, 2:7))));
  75. disp(size(Cluster));
  76. ClusterRecap=[Module2Explore ClusterMean ClusterFrequency];
  77. ClusterIndex=(ClusterIndex+1);
  78. modulesMean(phase, Module2Explore,:)=[ClusterRecap];
  79. clear Cluster
  80. end
  81. end
  82. %clear Module2Explore ClusterFrequency ClusterIndex ClusterMean frame numFrames ClusterRecap
  83. %Generate Matrix containing the frame frequencies for each modules in each
  84. %trial
  85. FrequenciesModules = [];
  86. FrequenciesMatrix = [];
  87. for i = 1:numPhases
  88. FrequenciesModules = [FrequenciesModules modulesMean(i, :, :)];
  89. FrequenciesMatrix = [FrequenciesMatrix; modulesMean(i, :, 8)];
  90. end
  91. FrequenciesMatrix = FrequenciesMatrix.';
  92. writematrix(FrequenciesModules, fullfile(modulePathdir, ...
  93. sprintf('FrequenciesModules.csv', subject)));
  94. writematrix(FrequenciesMatrix, fullfile(modulePathdir, ...
  95. sprintf('Frequencies.csv', subject)));
  96. %The output also plot BM distribution over the time of the test on a
  97. %scatter plot
  98. fig = figure('Name','Modules Heatmap');
  99. heatmap(FrequenciesMatrix);
  100. colormap(jet);
  101. saveas(fig, fullfile(modulePathdir, sprintf("Reassigned.png", subject)));
  102. set(0,'DefaultFigureVisible','on');
  103. end