123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- import tools.GetCSVs;
- % import tools.GetSubjects;
- pathdir = uigetdir(); % TODO: can this be passed along in SEB3R?
- files = dir(pathdir);
- nfiles = length(files);
- % TODO: replace with GetSubjects?
- for i=1:nfiles
- if files(i).isdir
- numFrames = files(i).name;
- if ~isnan(str2double(numFrames))
- Assign(pathdir, numFrames);
- end
- end
- end
- function FrequenciesModules = Assign(pathdir, subject)
- set(0,'DefaultFigureVisible','off');
- %This step assigns the final BM to each frame, animal-by-animal.
- %The output prints CSV files containing BM assigned at any given frame of
- %the original CSV files plus a summary table of BMs frequency for each test
- %trial.
- % Get the ModulesAssigned.CSV file and create a new matrix with it.
- ModulesAssigned = readmatrix(fullfile(pathdir, 'ModulesAssigned.csv'));
- clusterPathdir = fullfile(pathdir, subject, 'Clusters');
- modulePathdir = fullfile(pathdir, subject, 'Modules');
- subjectAsNum = str2double(subject);
- mkdir(modulePathdir);
- [phaseLabels, phaseCSVs] = GetCSVs(clusterPathdir, 'Clustered');
- disp(clusterPathdir);
- disp(phaseCSVs);
- clusteredPhases = LoadCSVsAsMatrix(clusterPathdir, phaseCSVs);
- numPhases = length(phaseLabels);
- numModules = max(ModulesAssigned(:,3)); % Maximum cluster number
- % TODO: explain what 8 and 9 and 3 are.
- modulesMean = zeros(numPhases, numModules, 8);
- % Reassign clusters to modules
- for phase=(1:numPhases)
- singlePhaseCluster = squeeze(clusteredPhases(phase, :, :));
- for index=(1:length(ModulesAssigned))
- for i = (1:length(singlePhaseCluster(:, 8)))
- if ModulesAssigned(index,1) == subjectAsNum && singlePhaseCluster(i,8)==ModulesAssigned(index,2);
- clusteredPhases(phase, i, 9)=(ModulesAssigned(index,3));
- end
- end
- end
- % Reload, just in case Matlab keeps an old version
- singlePhaseCluster = squeeze(clusteredPhases(phase, :, :));
- phaseName = phaseLabels{phase};
- phasePath = fullfile(modulePathdir, ['Mouse' phaseName '.csv'] );
- writematrix(singlePhaseCluster, phasePath);
- title = [phaseName 'poses overtime'];
- fig = figure ('Name', title);
- scatter(singlePhaseCluster(:,1), singlePhaseCluster(:,9));
- saveas(fig, fullfile(modulePathdir, [phaseName '_over_time.png']));
- % Calculate per-BM frequency distribution
- for Module2Explore=1:numModules
- numFrames=length(singlePhaseCluster);
- % ... WHY ARE WE DOING THIS???
- Cluster(1:9)=zeros;
- ClusterIndex=0;
- for frame=1:numFrames
- if singlePhaseCluster(frame,9)==Module2Explore
- % There are better ways to do this actually...
- ClusterIndex=(ClusterIndex+1);
- Cluster(ClusterIndex,1:9)=squeeze(singlePhaseCluster(frame,1:9));
- end
- end
- disp(size(Cluster));
- ClusterFrequency=length(Cluster)
- if Cluster==0
- ClusterFrequency=0;
- end
- ClusterMean(1:6)=[mean(Cluster(:,2:7))];
- disp(size(Cluster(:, 2:7)));
- disp(size(mean(Cluster(:, 2:7))));
- disp(size(Cluster));
- ClusterRecap=[Module2Explore ClusterMean ClusterFrequency];
- ClusterIndex=(ClusterIndex+1);
- modulesMean(phase, Module2Explore,:)=[ClusterRecap];
- clear Cluster
- end
- end
-
- %clear Module2Explore ClusterFrequency ClusterIndex ClusterMean frame numFrames ClusterRecap
- %Generate Matrix containing the frame frequencies for each modules in each
- %trial
-
- FrequenciesModules = [];
- FrequenciesMatrix = [];
- for i = 1:numPhases
- FrequenciesModules = [FrequenciesModules modulesMean(i, :, :)];
- FrequenciesMatrix = [FrequenciesMatrix; modulesMean(i, :, 8)];
- end
- FrequenciesMatrix = FrequenciesMatrix.';
- writematrix(FrequenciesModules, fullfile(modulePathdir, ...
- sprintf('FrequenciesModules.csv', subject)));
- writematrix(FrequenciesMatrix, fullfile(modulePathdir, ...
- sprintf('Frequencies.csv', subject)));
- %The output also plot BM distribution over the time of the test on a
- %scatter plot
- fig = figure('Name','Modules Heatmap');
- heatmap(FrequenciesMatrix);
- colormap(jet);
- saveas(fig, fullfile(modulePathdir, sprintf("Reassigned.png", subject)));
- set(0,'DefaultFigureVisible','on');
- end
|