Enrico "erolm_a" Trombetta 9 месяцев назад
Родитель
Сommit
05ec1bca85
100 измененных файлов с 450767 добавлено и 0 удалено
  1. 25 0
      +tools/GetCSVs.m
  2. 23 0
      +tools/GetSubjects.m
  3. 22 0
      +tools/LoadCSVsAsMatrix.m
  4. 180 0
      +tools/PoseExtractionSingle.m
  5. 129 0
      AssignModulesAndQuantify.m
  6. 29 0
      ConcatenateFrequencies.m
  7. 74 0
      ModulesExtraction.m
  8. 18 0
      PoseExtraction.m
  9. 10 0
      SEB3r.m
  10. 23 0
      SelectRange.m
  11. 94 0
      SequenceDuration.m
  12. 4504 0
      WN results/058/058_OF_DLC_3D.csv
  13. 4504 0
      WN results/058/058_SHAM_DLC_3D.csv
  14. 4504 0
      WN results/058/058_T1_DLC_3D.csv
  15. 4504 0
      WN results/058/058_T2_DLC_3D.csv
  16. 4504 0
      WN results/058/058_T3_DLC_3D.csv
  17. 2749 0
      WN results/058/Clusters/C1.csv
  18. 3335 0
      WN results/058/Clusters/C2.csv
  19. 1744 0
      WN results/058/Clusters/C3.csv
  20. 2261 0
      WN results/058/Clusters/C4.csv
  21. 3155 0
      WN results/058/Clusters/C5.csv
  22. 2488 0
      WN results/058/Clusters/C6.csv
  23. 2265 0
      WN results/058/Clusters/C7.csv
  24. 2064 0
      WN results/058/Clusters/C8.csv
  25. 2439 0
      WN results/058/Clusters/C9.csv
  26. 4500 0
      WN results/058/Clusters/ClusteredOF.csv
  27. 4500 0
      WN results/058/Clusters/ClusteredSham.csv
  28. 4500 0
      WN results/058/Clusters/ClusteredT1.csv
  29. 4500 0
      WN results/058/Clusters/ClusteredT2.csv
  30. 4500 0
      WN results/058/Clusters/ClusteredT3.csv
  31. 22500 0
      WN results/058/Summary/Clustered058Data.csv
  32. 22500 0
      WN results/058/Summary/Clustered058Dist.csv
  33. 22500 0
      WN results/058/Summary/Mouse058Clustered.csv
  34. 9 0
      WN results/058/Summary/Mouse058CoordMeans.csv
  35. 9 0
      WN results/058/Summary/Mouse058DistMeans.csv
  36. 4504 0
      WN results/060/060_OF_DLC_3D.csv
  37. 4504 0
      WN results/060/060_SHAM_DLC_3D.csv
  38. 4504 0
      WN results/060/060_T1_DLC_3D.csv
  39. 4504 0
      WN results/060/060_T2_DLC_3D.csv
  40. 4504 0
      WN results/060/060_T3_DLC_3D.csv
  41. 2753 0
      WN results/060/Clusters/C1.csv
  42. 2492 0
      WN results/060/Clusters/C10.csv
  43. 138 0
      WN results/060/Clusters/C2.csv
  44. 1806 0
      WN results/060/Clusters/C3.csv
  45. 1843 0
      WN results/060/Clusters/C4.csv
  46. 1842 0
      WN results/060/Clusters/C5.csv
  47. 1694 0
      WN results/060/Clusters/C6.csv
  48. 3497 0
      WN results/060/Clusters/C7.csv
  49. 2979 0
      WN results/060/Clusters/C8.csv
  50. 3456 0
      WN results/060/Clusters/C9.csv
  51. 4500 0
      WN results/060/Clusters/ClusteredOF.csv
  52. 4500 0
      WN results/060/Clusters/ClusteredSham.csv
  53. 4500 0
      WN results/060/Clusters/ClusteredT1.csv
  54. 4500 0
      WN results/060/Clusters/ClusteredT2.csv
  55. 4500 0
      WN results/060/Clusters/ClusteredT3.csv
  56. 22500 0
      WN results/060/Summary/Clustered060Data.csv
  57. 22500 0
      WN results/060/Summary/Clustered060Dist.csv
  58. 22500 0
      WN results/060/Summary/Mouse060Clustered.csv
  59. 10 0
      WN results/060/Summary/Mouse060CoordMeans.csv
  60. 10 0
      WN results/060/Summary/Mouse060DistMeans.csv
  61. 4504 0
      WN results/088/088_OF_DLC_3D.csv
  62. 4504 0
      WN results/088/088_SHAM_DLC_3D.csv
  63. 4504 0
      WN results/088/088_T1_DLC_3D.csv
  64. 4504 0
      WN results/088/088_T2_DLC_3D.csv
  65. 4504 0
      WN results/088/088_T3_DLC_3D.csv
  66. 1901 0
      WN results/088/Clusters/C1.csv
  67. 1421 0
      WN results/088/Clusters/C10.csv
  68. 1472 0
      WN results/088/Clusters/C11.csv
  69. 1997 0
      WN results/088/Clusters/C2.csv
  70. 2124 0
      WN results/088/Clusters/C3.csv
  71. 2319 0
      WN results/088/Clusters/C4.csv
  72. 2630 0
      WN results/088/Clusters/C5.csv
  73. 2062 0
      WN results/088/Clusters/C6.csv
  74. 2105 0
      WN results/088/Clusters/C7.csv
  75. 2098 0
      WN results/088/Clusters/C8.csv
  76. 2371 0
      WN results/088/Clusters/C9.csv
  77. 4500 0
      WN results/088/Clusters/ClusteredOF.csv
  78. 4500 0
      WN results/088/Clusters/ClusteredSham.csv
  79. 4500 0
      WN results/088/Clusters/ClusteredT1.csv
  80. 4500 0
      WN results/088/Clusters/ClusteredT2.csv
  81. 4500 0
      WN results/088/Clusters/ClusteredT3.csv
  82. 22500 0
      WN results/088/Summary/Clustered088Data.csv
  83. 22500 0
      WN results/088/Summary/Clustered088Dist.csv
  84. 22500 0
      WN results/088/Summary/Mouse088Clustered.csv
  85. 11 0
      WN results/088/Summary/Mouse088CoordMeans.csv
  86. 11 0
      WN results/088/Summary/Mouse088DistMeans.csv
  87. 4504 0
      WN results/089/089_OF_DLC_3D.csv
  88. 4504 0
      WN results/089/089_SHAM_DLC_3D.csv
  89. 4504 0
      WN results/089/089_T1_DLC_3D.csv
  90. 4504 0
      WN results/089/089_T2_DLC_3D.csv
  91. 4504 0
      WN results/089/089_T3_DLC_3D.csv
  92. 4343 0
      WN results/089/Clusters/C1.csv
  93. 1726 0
      WN results/089/Clusters/C2.csv
  94. 3229 0
      WN results/089/Clusters/C3.csv
  95. 2471 0
      WN results/089/Clusters/C4.csv
  96. 3960 0
      WN results/089/Clusters/C5.csv
  97. 2946 0
      WN results/089/Clusters/C6.csv
  98. 1793 0
      WN results/089/Clusters/C7.csv
  99. 2032 0
      WN results/089/Clusters/C8.csv
  100. 0 0
      WN results/089/Clusters/ClusteredOF.csv

+ 25 - 0
+tools/GetCSVs.m

@@ -0,0 +1,25 @@
+function [labels, fileList]=GetCSVs(pathdir, prefixToStrip)
+    % Detect all CSVs in a folder. It works by extracting all
+    % files that match the following regex: (prefix)(label)(suffix)
+    % Arguments:
+    % - pathdir: the working directory
+    % - prefixStrip: the expected prefix for each csv file
+
+    files = dir(pathdir);
+    nfiles = size(files);
+    fileList = {};
+    labels = {};
+    if isstring(prefixToStrip)
+        prefixToStrip = prefixToStrip.char;
+    end
+    suffixToStrip = '.csv';
+    for i = 1:nfiles
+        filename = files(i).name;
+        if endsWith(filename, suffixToStrip) && startsWith(filename, prefixToStrip);
+            stripped = filename(length(prefixToStrip)+1:end-length(suffixToStrip));
+            labels{end+1} = stripped;
+            fileList{end+1} = filename;
+        end
+    end
+end
+

+ 23 - 0
+tools/GetSubjects.m

@@ -0,0 +1,23 @@
+function subjects=GetSubjects(pathdir)
+    % Get the list of subjects as a cell array of strings.
+    % Arguments:
+    % - expPath: the experiment path
+
+    files = dir(pathdir);
+    nfiles = size(files);
+    disp(size(nfiles));
+
+    subjects = {};
+    subjectsCounter = 0;
+
+    % Take the first viable subject, then extract the conditions
+    oldVersion = false;
+
+    for i=1:nfiles[1];
+        num = files(i).name;
+        if files(i).isdir && ~isnan(str2double(num));
+            subjectsCounter = subjectsCounter + 1;
+            subjects{subjectsCounter} = num;
+        end
+    end
+end

+ 22 - 0
+tools/LoadCSVsAsMatrix.m

@@ -0,0 +1,22 @@
+function out=LoadCSVsAsMatrix(mousePathdir, csvs)
+    % Load all csvs in a matrix. The resulting matrix is N x F x C
+    % with N being the number of subjects (ie. the number of csvs),
+    % F being the number of frames (ie. each csv's number of rows),
+    % C is the number of columns
+
+    % Parameters:
+    % - mousePathdir (string): the path of the mouse subject
+    % - csvs: the list of csvs without any parent folder to load in our final matrix
+
+    % First, we need to know how big any of these matrices are
+    testMatrix = readmatrix(fullfile(mousePathdir, csvs{1}));
+    [frames, columns] = size(testMatrix);
+    
+    out = zeros(1, frames, columns);
+
+    for i=1:length(csvs)
+        csv = csvs{i};
+        matrix = readmatrix(fullfile(mousePathdir,  csv));
+        out(i, :, :) = matrix(1:frames, :);
+    end
+end

+ 180 - 0
+tools/PoseExtractionSingle.m

@@ -0,0 +1,180 @@
+function PoseExtractionSingle(pathdir, Mouse)
+    import tools.GetCSVs;
+    import tools.LoadCSVsAsMatrix;
+
+    set(0, 'DefaultFigureVisible', 'off');
+
+    % Import data from CSV file. Copy full path and file name
+    meanDistancesPathdir = [pathdir '/Mean Distances/'];
+    pathdir = [pathdir '/' Mouse];
+    [labels, csvs] = GetCSVs(pathdir, Mouse);
+    matrix = LoadCSVsAsMatrix(pathdir, csvs);
+
+    mkdir meanDistancesPathdir;
+ 
+    [nSubjs, frames, cols] = size(matrix);
+
+    % Take all subjects and concat them in our matrix.
+    % The reason this looks ugly is that:
+    % - cat cannot concatenate a *single* matrix along an axis
+    % - reshape does not work as it will first pick the ith row of each subject
+    %   before going to the next row, rather than iterating by subject first,
+    %   and rows seconds.
+    % The latter is due to the fact matlab is column-major rather than row-major,
+    % thus values are spilled by the first dimension (subjects) rather than
+    % the one-but-last (frames);
+    % This wouldn't be a problem hadn't it been that COLUMN MAJOR MAKES NO
+    % FREAKING SENSE WITH TENSORS!!!
+
+    ThisMouse = zeros(nSubjs*frames, cols);
+    for i=0:nSubjs-1
+        ThisMouse(frames*i+1:frames*(i+1), :) = matrix(i+1, :, :);
+    end
+
+    % Replace the gaps (NaN cells) with closest value in the column
+    ThisMouseY = fillmissing(ThisMouse(:, 3:3:end), 'previous');
+
+    FramesThisMouse = repmat((1:frames)', nSubjs, 1);
+
+    % Makes each id start from 1 for our convenience
+    ThisMouse(:, 1) = ThisMouse(:, 1) + 1;
+
+    % Calculate Body-parts distances for the Y coordinates
+    % by enumerating all body-part pairs
+
+    DistMatrix = [];
+    [yframes, bodyparts] = size(ThisMouseY);
+
+    for i=(1:bodyparts)
+        for j=(i+1:bodyparts)
+            DistMatrix(end+1, :) = ThisMouseY(:, i) - ThisMouseY(:, j);
+        end
+    end
+
+    DistMatrix = DistMatrix.';
+
+    % TIME FOR CLUSTERING
+    % FIXME the number of clusters should/could be fixed
+    Elbow=kmeans_opt(DistMatrix);  %K-mean clustering using Elbow method to determine optilan number (UNSUPERVISED)
+    Clusters=unique(Elbow);
+    for i=1:length(Clusters)
+        counts(i)=sum(Elbow==Clusters(i));
+    end
+
+    clear i
+
+    %POSTURE DETERMINATION
+    %Now that the clustering is done, assign each original observation to a
+    %cluster
+    ClusterSummary=[Clusters, counts'];                  %Recall number of Frames per Cluster
+   
+    ClusteredDist=[FramesThisMouse,DistMatrix,Elbow];    %Distance matrix with Frames and Clusters
+    ClusteredYData=[FramesThisMouse,ThisMouseY,Elbow];   %Original Coordinates with Clusters assigned
+    ThisMouseClustered=[ThisMouse,Elbow];     %Original DLC output with Clusters assigned
+
+    for subjId=0:nSubjs-1
+        label = labels{subjId+1};
+        clustered = ClusteredYData(frames*subjId+1:frames*(subjId+1), :);
+        title = [label ' poses overtime'];
+        fig = figure ('Name', title);
+        scatter(clustered(:, 1), clustered(:, 8));
+        saveas(fig, [pathdir '/' label '_over_time.png']);
+    end
+
+    
+    % clear counts  FramesThisMouse i SHAMy T1y T2y T3y DistMatrix FindSHAM FindT1 FindT2 FindT3
+
+    %Starting From the ClusteredData matrix extract each single cluster and plot
+    %the corresponding posture on a scatter plot
+    disp(pathdir)
+    mkdir([pathdir '/Clusters/']);
+
+    for Cluster2Explore=1:length(ClusterSummary)
+        num=length(ClusteredYData);
+        ClusterIndex=0;
+
+        for ind=1:num
+            if ClusteredYData(ind,8)==Cluster2Explore
+                ClusterIndex=(ClusterIndex+1);
+                Cluster(ClusterIndex,1:8)=ClusteredYData(ind,1:8);
+
+            end
+        end
+
+        NameCluster=num2str(Cluster2Explore);
+        %assignin('base',NameCluster,Cluster);
+
+        writematrix(Cluster, [pathdir '/Clusters/C' num2str(Cluster2Explore) '.csv']);
+        ClusterMean=[mean(Cluster(:,2:7))];
+
+        %Create a Representative Scatter Plot for the Cluster just analyzed
+        fig = figure('Name',NameCluster);
+        Ycoord=[ClusterMean/-1];
+        Xcoord=[1:6];
+        plot(Xcoord,Ycoord,'-x');
+        saveas(fig, [pathdir '/Clusters/C' label '_rep.png']);
+
+        ClusterIndex=(ClusterIndex+1);
+        saveas(gcf, [pathdir '/Clusters/' num2str(ind) '-' num2str(Cluster2Explore) '.png']);
+        AllClustersMean(Cluster2Explore,:)=mean(Cluster(:,2:end));
+
+        clear Cluster
+    end
+
+    %Average the ClusteredDist Matrix for future analysis
+    for DistIndex=1:length(ClusterSummary)
+        [Dist2Avg]=find(ClusteredDist(:,17)==DistIndex);
+        toAVG=[ClusteredDist(Dist2Avg,2:16)];
+        ClusteredDistMeans(DistIndex,:)=[mean(toAVG),DistIndex];
+    end
+
+    %Create a string vetor with the Animal Code to include with the Cluster
+    %Mean Summary
+    code=strings(length(ClusterSummary), 1);
+    code(:)=Mouse;
+
+    %Generate Cluster Mean Summary for both Ycoordinates and Distances
+    AllClustersMean=[code,AllClustersMean,ClusterSummary(:,2:end)];
+    ClusteredDistMeans=[code,ClusteredDistMeans];
+
+    AllClustersMean(1:end,1:1)=Mouse;    %Assign the Mouse Identity to the first column of the matrix
+    ClusteredDistMeans(1:end,1:1)=Mouse;
+
+
+    ClusterDir = [pathdir '/Clusters/'];
+    SummaryDir = [pathdir '/Summary/'];
+    mkdir(ClusterDir);
+    mkdir(SummaryDir);
+
+    %Print Outcome and cluster in CSV files
+    writematrix(AllClustersMean, [SummaryDir 'Mouse' Mouse 'CoordMeans.csv']);
+    writematrix(ClusteredDistMeans, [meanDistancesPathdir 'Mouse' Mouse 'DistMeans.csv']);
+    writematrix(ClusteredYData, [SummaryDir 'Clustered' Mouse 'Data.csv']);
+    writematrix(ClusteredDist, [SummaryDir 'Clustered' Mouse 'Dist.csv']);
+    writematrix(ThisMouseClustered, [SummaryDir 'Mouse' Mouse 'Clustered.csv']);
+
+    for subjId=0:nSubjs-1
+        label = labels{subjId+1};
+        clustered = [ClusteredYData(frames*subjId+1:frames*(subjId+1), :)];
+        writematrix(clustered, [ClusterDir 'Clustered' label '.csv']);
+    end
+
+    set(0, 'DefaultFigureVisible', 'on');
+end
+
+function [labels, fileList]=GetCSVs(pathdir, mouse)
+    % Detect all CSVs in our file
+    files = dir(pathdir);
+    nfiles = size(files);
+    fileList = {};
+    labels = {};
+    for i = 1:nfiles
+        filename = files(i).name;
+        if endsWith(filename, ".csv")
+            suffixToStrip = '_DLC_3D.csv'; % FIXME
+            stripped = filename(length(mouse)+2:end-length(suffixToStrip));
+            labels{end+1} = stripped;
+            fileList{end+1} = filename;
+        end
+    end
+end

+ 129 - 0
AssignModulesAndQuantify.m

@@ -0,0 +1,129 @@
+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
+

+ 29 - 0
ConcatenateFrequencies.m

@@ -0,0 +1,29 @@
+path = uigetdir();
+res = Concatenate(path);
+outputPath = fullfile(path, "CombinedFrequencies.csv");
+writematrix(res, outputPath);
+
+
+function res = Concatenate(path)
+    import tools.GetSubjects;
+    subjects = GetSubjects(path);
+
+    
+    for subjId = 1:length(subjects);
+        subject = subjects{subjId};
+        modulePath = fullfile(path, subject, "Modules", "Frequencies.csv");
+        subjFreqs = readmatrix(modulePath);
+        [nModules, nTasks] = size(subjFreqs);
+        subjAsNum = str2num(subject);
+
+        % Append id to frequency
+        subjFreqs = [repelem(subjAsNum, nModules, 1) (1:nModules)' subjFreqs];
+
+        if exist('res', 'var')
+            res = [res; subjFreqs];
+        else
+            res = subjFreqs;
+        end
+    end
+end
+

+ 74 - 0
ModulesExtraction.m

@@ -0,0 +1,74 @@
+%Starting For a Combined Matrix containing the average coordinates for each animals and relative postures
+%Extract Behavioral Modules by clustering accross different animals
+%CRITICAL! you'll need to assign a number to the variable nBM. This way you
+%can chose te number of BM to identify among all the posture extracted per
+%every single mouse. The choice of BM might result in an iterative process
+%where the user decides the number that better describes each subject. It
+%is reccomended to start with a number to N+/-1 respect to the lower number of
+%postures identified in one single subject
+%EXAMPLE: if in your cohort the lowest number of posture observed is 10
+%(in one or more subject), chose something between 9 and 11 to avoid data
+%distorsion where some subjects are overrepresented in one BM and other are not
+%present.
+
+% TODO needs rewriting
+
+nBMStr = inputdlg("Choose the number of BM you want.");
+nBM = str2num(nBMStr{1});
+[pathdir, subjdir, ExpClusters] = CombineData(17);
+Clusters=ExpClusters(:,17);
+
+% Run the clustering
+Modules=kmeans(ExpClusters(:,2:16),nBM);
+
+PrevModules=[ExpClusters,Modules];
+N=max(Modules);
+
+ModulesSummary=1:18;             
+
+for Cluster2Explore=1:N;
+   num=length(PrevModules);
+   ClusterIndex=0;
+
+   for ind=1:num;
+      if PrevModules(ind,18)==Cluster2Explore;
+         ClusterIndex=(ClusterIndex+1);
+         Module(ClusterIndex,1:18)=PrevModules(ind,1:18);
+      end
+   end
+   ClusterIndex=(ClusterIndex+1);
+   ModulesSummary=[ModulesSummary;Module];
+   clear Module
+end
+
+ModulesSummary(1,:)=[];
+PostureModulesAssigned=[ModulesSummary(:,1),ModulesSummary(:,17),ModulesSummary(:,18)];
+summaryPath = fullfile(subjdir, 'ModulesSummary.csv');
+posturePath = fullfile(subjdir, 'ModulesAssigned.csv');
+writematrix(ModulesSummary, summaryPath);
+writematrix(PostureModulesAssigned, posturePath);
+
+function [pathdir, subjdir, CombinedFile]=CombineData(column)
+    % TODO rewrite docstring
+    %input (required); number of colums of the table to combine (all table MUST
+    %be same size)
+    % output: pathdir and combined mean dir
+
+    pathdir = uigetdir();
+    subjdir = fullfile(pathdir, '..');
+    FindMeans = dir(pathdir);
+
+    disp(column);
+    disp(subjdir);
+    CombinedFile=zeros(1,column);
+    for ind=1:length(FindMeans);
+        file = FindMeans(ind);
+        if ~file.isdir
+            ThisPose=readmatrix(fullfile(pathdir, file.name));
+            disp(size(CombinedFile))
+            disp(size(ThisPose))
+            CombinedFile=vertcat(CombinedFile,ThisPose);
+        end
+    end
+    CombinedFile(1:1,:)=[];
+end

+ 18 - 0
PoseExtraction.m

@@ -0,0 +1,18 @@
+% This entry point will perform all analyses on your mice data.
+% You will be prompted to provide a folder that contains your DLC results
+
+import tools.PoseExtractionSingle;
+
+pathdir = uigetdir();
+files = dir(pathdir);
+nfiles = size(files);
+disp(size(nfiles));
+
+for i=1:nfiles[1]
+    if files(i).isdir
+        num = files(i).name;
+        if ~isnan(str2double(num))
+            PoseExtractionSingle(pathdir, num);
+        end
+    end
+end

+ 10 - 0
SEB3r.m

@@ -0,0 +1,10 @@
+% The entry point of SEB3R can be summarised in the steps below.
+% These steps are a bit interactive: this is to force you into giving
+% sensible numbers for the ModulesExtraction and AssignModulesAndQuantify
+% step. Check the individual scripts for details.
+
+PoseExtraction
+ModulesExtraction
+AssignModulesAndQuantify
+SequenceDuration
+

+ 23 - 0
SelectRange.m

@@ -0,0 +1,23 @@
+% Inspect a subject and extract a range of interest
+
+import tools.GetCSVs;
+subjectPath = uigetdir("Please choose a subject");
+modulesPath = fullfile(subjectPath, 'Modules');
+times = inputdlg({'Begin time (in seconds, first second is 1)', 'End time (in seconds, first second is 1)'}, 'Time frame inspector');
+
+start = str2num(times{1});
+stop = str2num(times{2});
+
+[modules csvs]= GetCSVs(modulesPath, "Mouse");
+
+for i=1:length(modules)
+    data = readmatrix(fullfile(modulesPath, csvs{i}));
+    out = data(start:stop, :)
+    if i == 1
+        filteredPath = fullfile(modulesPath, sprintf("Filtered-%d-%d", start, stop));
+        disp(filteredPath);
+        mkdir(filteredPath);
+    end
+    outPath = fullfile(filteredPath, string(modules{i}) + ".csv");
+    writematrix(out, outPath);
+end

+ 94 - 0
SequenceDuration.m

@@ -0,0 +1,94 @@
+import tools.GetCSVs;
+
+pathdir = uigetdir();
+files = dir(pathdir);
+nfiles = size(files);
+disp(size(nfiles));
+
+
+% Take the first viable subject, then extract the conditions
+oldVersion = false;
+
+for i=1:nfiles[1];
+    num = files(i).name;
+    if files(i).isdir && ~isnan(str2double(num));
+        subjPath = fullfile(pathdir, num, "Modules");
+        conditions = GetCSVs(subjPath, "Mouse");
+
+        % The old version used different names for the modules.
+        if length(conditions) == 0;
+            disp("Warning: this dataset was obtained from an old version of SEB3R.");
+            conditions = GetCSVs(subjPath, "MouseX");
+        end
+        break
+    end
+end
+
+nconditions = length(conditions);
+
+% Perform sequencing. This will result in a folder "Sequenced" containing
+% $nconditions folders, each
+for icond = 1:nconditions;
+    clear FullSeqs;
+    condition = conditions{icond};
+    TotalFrames = 0;
+    
+
+    for i = 1:nfiles(1)
+        if files(i).isdir()
+            num = files(i).name;
+            if ~isnan(str2double(num));
+                subj = num;
+                out=SingleSubjectCount(pathdir, subj, condition, oldVersion);
+                [nmodules, cols] = size(out);
+                FullSeqs(TotalFrames+1:TotalFrames+nmodules, :) = out;
+                TotalFrames = TotalFrames + nmodules;
+            end
+        end
+    end
+    outdir = fullfile(pathdir, "Sequenced");
+    mkdir(outdir);
+    writematrix(FullSeqs, fullfile(outdir, condition + ".csv"));
+end
+
+function frameCount = SingleSubjectCount(pathdir, subject, condition, oldVersion)
+    parentPath = fullfile(pathdir, subject, "Modules");
+
+    % this is pretty ugly
+    mouseStr = 'Mouse';
+    if oldVersion;
+        mouseStr = 'MouseX';
+    end
+
+    path = fullfile(parentPath, [mouseStr condition '.csv']);
+    frameData = readmatrix(path);
+    [rows, cols] = size(frameData);
+    frameModules = frameData(:, cols); % last column = BM
+    frameCount = CountFrames(frameModules);
+    outPath = fullfile(parentPath, "Sequenced" + condition + ".csv");
+
+    %writematrix(frameCount, outPath);
+end
+
+function out=CountFrames(frames)
+    if length(frames) == 0;
+        error("Expecting non-empty numerical array, found an empty array. Is your subject data complete?");
+    end
+
+    lastSeen = frames(1);
+    counter = 1;
+    foundSeqs = 1;
+    for i=2:length(frames)
+        if frames(i) == lastSeen;
+            counter = counter + 1;
+        else
+            out(foundSeqs, :) = [lastSeen, counter];
+            lastSeen = frames(i);
+            counter = 1;
+            foundSeqs = foundSeqs + 1;
+        end
+    end
+
+    % The last iteration is always left out
+    out(foundSeqs, :) = [lastSeen, counter];
+end

Разница между файлами не показана из-за своего большого размера
+ 4504 - 0
WN results/058/058_OF_DLC_3D.csv


Разница между файлами не показана из-за своего большого размера
+ 4504 - 0
WN results/058/058_SHAM_DLC_3D.csv


Разница между файлами не показана из-за своего большого размера
+ 4504 - 0
WN results/058/058_T1_DLC_3D.csv


Разница между файлами не показана из-за своего большого размера
+ 4504 - 0
WN results/058/058_T2_DLC_3D.csv


Разница между файлами не показана из-за своего большого размера
+ 4504 - 0
WN results/058/058_T3_DLC_3D.csv


Разница между файлами не показана из-за своего большого размера
+ 2749 - 0
WN results/058/Clusters/C1.csv


Разница между файлами не показана из-за своего большого размера
+ 3335 - 0
WN results/058/Clusters/C2.csv


Разница между файлами не показана из-за своего большого размера
+ 1744 - 0
WN results/058/Clusters/C3.csv


Разница между файлами не показана из-за своего большого размера
+ 2261 - 0
WN results/058/Clusters/C4.csv


Разница между файлами не показана из-за своего большого размера
+ 3155 - 0
WN results/058/Clusters/C5.csv


Разница между файлами не показана из-за своего большого размера
+ 2488 - 0
WN results/058/Clusters/C6.csv


Разница между файлами не показана из-за своего большого размера
+ 2265 - 0
WN results/058/Clusters/C7.csv


Разница между файлами не показана из-за своего большого размера
+ 2064 - 0
WN results/058/Clusters/C8.csv


Разница между файлами не показана из-за своего большого размера
+ 2439 - 0
WN results/058/Clusters/C9.csv


Разница между файлами не показана из-за своего большого размера
+ 4500 - 0
WN results/058/Clusters/ClusteredOF.csv


Разница между файлами не показана из-за своего большого размера
+ 4500 - 0
WN results/058/Clusters/ClusteredSham.csv


Разница между файлами не показана из-за своего большого размера
+ 4500 - 0
WN results/058/Clusters/ClusteredT1.csv


Разница между файлами не показана из-за своего большого размера
+ 4500 - 0
WN results/058/Clusters/ClusteredT2.csv


Разница между файлами не показана из-за своего большого размера
+ 4500 - 0
WN results/058/Clusters/ClusteredT3.csv


Разница между файлами не показана из-за своего большого размера
+ 22500 - 0
WN results/058/Summary/Clustered058Data.csv


Разница между файлами не показана из-за своего большого размера
+ 22500 - 0
WN results/058/Summary/Clustered058Dist.csv


Разница между файлами не показана из-за своего большого размера
+ 22500 - 0
WN results/058/Summary/Mouse058Clustered.csv


+ 9 - 0
WN results/058/Summary/Mouse058CoordMeans.csv

@@ -0,0 +1,9 @@
+058,-1.1258,-0.94445,-0.48537,-0.027527,0.56806,1.1589,1,2749
+058,1.451,1.1205,0.83429,0.67501,0.74017,1.0511,2,3335
+058,0.38668,0.29532,0.36941,0.32581,0.63596,1.1016,3,1744
+058,0.84449,0.53927,0.44647,0.50215,1.04,1.5466,4,2261
+058,1.4406,1.0976,0.76802,0.57547,0.81038,1.2559,5,3155
+058,-0.37809,-0.33412,0.001129,0.33834,0.85573,1.3677,6,2488
+058,1.2491,0.93569,0.66041,0.54837,0.9568,1.4702,7,2265
+058,0.20964,0.12741,0.30004,0.45846,0.95009,1.4344,8,2064
+058,1.0617,0.8306,0.69929,0.5956,0.79298,1.1574,9,2439

+ 9 - 0
WN results/058/Summary/Mouse058DistMeans.csv

@@ -0,0 +1,9 @@
+058,-0.18131,-0.64038,-1.0982,-1.6938,-2.2846,-0.45908,-0.91692,-1.5125,-2.1033,-0.45785,-1.0534,-1.6443,-0.59558,-1.1864,-0.59084,1
+058,0.33053,0.6167,0.77598,0.71082,0.39989,0.28617,0.44545,0.38029,0.069359,0.15928,0.09412,-0.21681,-0.06516,-0.37609,-0.31093,2
+058,0.091364,0.017266,0.060868,-0.24928,-0.71487,-0.074097,-0.030495,-0.34065,-0.80623,0.043602,-0.26655,-0.73214,-0.31015,-0.77574,-0.46559,3
+058,0.30523,0.39802,0.34235,-0.19553,-0.70208,0.092799,0.037122,-0.50075,-1.0073,-0.055677,-0.59355,-1.1001,-0.53787,-1.0444,-0.50655,4
+058,0.34302,0.67259,0.86514,0.63023,0.18474,0.32956,0.52212,0.2872,-0.15828,0.19256,-0.042361,-0.48785,-0.23492,-0.6804,-0.44549,5
+058,-0.043975,-0.37922,-0.71643,-1.2338,-1.7458,-0.33525,-0.67245,-1.1898,-1.7018,-0.33721,-0.8546,-1.3666,-0.51739,-1.0294,-0.51197,6
+058,0.31337,0.58865,0.70069,0.29227,-0.22114,0.27528,0.38732,-0.021107,-0.53451,0.11204,-0.29638,-0.80979,-0.40843,-0.92183,-0.51341,7
+058,0.082232,-0.090407,-0.24882,-0.74046,-1.2248,-0.17264,-0.33105,-0.82269,-1.307,-0.15841,-0.65005,-1.1344,-0.49164,-0.97595,-0.48431,8
+058,0.2311,0.36241,0.4661,0.26873,-0.095706,0.13131,0.23501,0.037629,-0.3268,0.1037,-0.093682,-0.45811,-0.19738,-0.56181,-0.36443,9

Разница между файлами не показана из-за своего большого размера
+ 4504 - 0
WN results/060/060_OF_DLC_3D.csv


Разница между файлами не показана из-за своего большого размера
+ 4504 - 0
WN results/060/060_SHAM_DLC_3D.csv


Разница между файлами не показана из-за своего большого размера
+ 4504 - 0
WN results/060/060_T1_DLC_3D.csv


Разница между файлами не показана из-за своего большого размера
+ 4504 - 0
WN results/060/060_T2_DLC_3D.csv


Разница между файлами не показана из-за своего большого размера
+ 4504 - 0
WN results/060/060_T3_DLC_3D.csv


Разница между файлами не показана из-за своего большого размера
+ 2753 - 0
WN results/060/Clusters/C1.csv


Разница между файлами не показана из-за своего большого размера
+ 2492 - 0
WN results/060/Clusters/C10.csv


+ 138 - 0
WN results/060/Clusters/C2.csv

@@ -0,0 +1,138 @@
+356,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+357,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+358,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+359,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+360,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+361,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+362,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+363,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+364,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+365,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+366,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+367,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+368,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+369,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+370,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+371,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+372,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+373,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+374,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+375,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+376,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+377,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+378,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+379,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+380,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+381,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+382,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+383,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+384,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+385,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+386,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+387,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+388,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+389,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+390,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+391,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+392,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+393,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+394,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+395,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+396,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+397,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+398,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+399,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+400,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+401,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+402,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+403,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+404,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+405,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+406,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+407,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+408,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+409,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+410,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+411,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+412,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+413,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+414,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+415,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+416,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+417,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+418,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+419,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+420,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+421,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+422,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+423,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+424,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+425,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+426,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+427,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+428,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+429,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+430,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+431,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+432,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+433,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+434,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+435,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+436,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+437,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+438,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+439,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+440,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+441,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+442,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+443,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+444,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+445,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+446,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+447,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+448,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+449,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+450,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+451,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+452,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+453,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+454,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+455,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+456,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+457,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+458,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+459,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+460,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+461,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+462,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+463,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+464,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+465,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+466,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+467,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+468,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+469,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+470,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+471,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+472,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+473,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+474,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+475,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+476,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+477,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+478,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+479,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+480,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+481,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+482,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+483,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+484,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+485,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+486,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+487,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+488,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+489,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+490,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+491,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+492,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2
+493,-1.48612559904244,-1.25380002223091,-0.883530783392782,-3.28138517634676,-2.63211255344757,-1.86615201100142,2

Разница между файлами не показана из-за своего большого размера
+ 1806 - 0
WN results/060/Clusters/C3.csv


Разница между файлами не показана из-за своего большого размера
+ 1843 - 0
WN results/060/Clusters/C4.csv


Разница между файлами не показана из-за своего большого размера
+ 1842 - 0
WN results/060/Clusters/C5.csv


Разница между файлами не показана из-за своего большого размера
+ 1694 - 0
WN results/060/Clusters/C6.csv


Разница между файлами не показана из-за своего большого размера
+ 3497 - 0
WN results/060/Clusters/C7.csv


Разница между файлами не показана из-за своего большого размера
+ 2979 - 0
WN results/060/Clusters/C8.csv


Разница между файлами не показана из-за своего большого размера
+ 3456 - 0
WN results/060/Clusters/C9.csv


Разница между файлами не показана из-за своего большого размера
+ 4500 - 0
WN results/060/Clusters/ClusteredOF.csv


Разница между файлами не показана из-за своего большого размера
+ 4500 - 0
WN results/060/Clusters/ClusteredSham.csv


Разница между файлами не показана из-за своего большого размера
+ 4500 - 0
WN results/060/Clusters/ClusteredT1.csv


Разница между файлами не показана из-за своего большого размера
+ 4500 - 0
WN results/060/Clusters/ClusteredT2.csv


Разница между файлами не показана из-за своего большого размера
+ 4500 - 0
WN results/060/Clusters/ClusteredT3.csv


Разница между файлами не показана из-за своего большого размера
+ 22500 - 0
WN results/060/Summary/Clustered060Data.csv


Разница между файлами не показана из-за своего большого размера
+ 22500 - 0
WN results/060/Summary/Clustered060Dist.csv


Разница между файлами не показана из-за своего большого размера
+ 22500 - 0
WN results/060/Summary/Mouse060Clustered.csv


+ 10 - 0
WN results/060/Summary/Mouse060CoordMeans.csv

@@ -0,0 +1,10 @@
+060,0.83096,0.5534,0.45754,0.5038,1.02,1.5074,1,2753
+060,-1.4861,-1.2538,-0.88353,-3.2814,-2.6321,-1.8662,2,138
+060,-1.163,-0.95799,-0.49483,-0.043094,0.53364,1.1252,3,1806
+060,0.20002,0.17572,0.38711,0.51407,0.97168,1.4602,4,1843
+060,-0.40338,-0.31578,0.038643,0.35012,0.85457,1.3676,5,1842
+060,0.59725,0.49931,0.5733,0.56884,0.91904,1.3759,6,1694
+060,1.442,1.1161,0.81872,0.64249,0.88448,1.3396,7,3497
+060,1.1602,0.84138,0.5708,0.4996,0.97144,1.4844,8,2979
+060,1.4834,1.1605,0.8784,0.71535,0.7809,1.12,9,3456
+060,1.0212,0.79234,0.67908,0.58893,0.85836,1.277,10,2492

+ 10 - 0
WN results/060/Summary/Mouse060DistMeans.csv

@@ -0,0 +1,10 @@
+060,0.27756,0.37342,0.32716,-0.18906,-0.67642,0.095861,0.049602,-0.46661,-0.95397,-0.046259,-0.56247,-1.0498,-0.51622,-1.0036,-0.48736,1
+060,-0.23233,-0.60259,1.7953,1.146,0.38003,-0.37027,2.0276,1.3783,0.61235,2.3979,1.7486,0.98262,-0.64927,-1.4152,-0.76596,2
+060,-0.205,-0.66816,-1.1199,-1.6966,-2.2882,-0.46316,-0.91489,-1.4916,-2.0832,-0.45173,-1.0285,-1.62,-0.57674,-1.1683,-0.59156,3
+060,0.024299,-0.18709,-0.31404,-0.77166,-1.2602,-0.21139,-0.33834,-0.79596,-1.2845,-0.12696,-0.58457,-1.0731,-0.45762,-0.94614,-0.48853,4
+060,-0.087604,-0.44202,-0.7535,-1.2579,-1.771,-0.35442,-0.66589,-1.1703,-1.6834,-0.31147,-0.81593,-1.329,-0.50445,-1.0175,-0.51307,5
+060,0.097939,0.023946,0.028412,-0.3218,-0.77867,-0.073993,-0.069527,-0.41974,-0.87661,0.0044658,-0.34574,-0.80262,-0.35021,-0.80708,-0.45687,6
+060,0.32595,0.62331,0.79953,0.55754,0.10243,0.29736,0.47358,0.23159,-0.22352,0.17622,-0.065765,-0.52087,-0.24199,-0.6971,-0.45511,7
+060,0.3188,0.58938,0.66058,0.18875,-0.32418,0.27058,0.34178,-0.13006,-0.64298,0.0712,-0.40064,-0.91356,-0.47184,-0.98476,-0.51292,8
+060,0.32288,0.60496,0.768,0.70246,0.36335,0.28208,0.44513,0.37958,0.040475,0.16305,0.097499,-0.24161,-0.065549,-0.40465,-0.3391,9
+060,0.22889,0.34215,0.43231,0.16288,-0.25582,0.11326,0.20342,-0.066015,-0.48471,0.090155,-0.17928,-0.59797,-0.26943,-0.68812,-0.41869,10

Разница между файлами не показана из-за своего большого размера
+ 4504 - 0
WN results/088/088_OF_DLC_3D.csv


Разница между файлами не показана из-за своего большого размера
+ 4504 - 0
WN results/088/088_SHAM_DLC_3D.csv


Разница между файлами не показана из-за своего большого размера
+ 4504 - 0
WN results/088/088_T1_DLC_3D.csv


Разница между файлами не показана из-за своего большого размера
+ 4504 - 0
WN results/088/088_T2_DLC_3D.csv


Разница между файлами не показана из-за своего большого размера
+ 4504 - 0
WN results/088/088_T3_DLC_3D.csv


Разница между файлами не показана из-за своего большого размера
+ 1901 - 0
WN results/088/Clusters/C1.csv


Разница между файлами не показана из-за своего большого размера
+ 1421 - 0
WN results/088/Clusters/C10.csv


Разница между файлами не показана из-за своего большого размера
+ 1472 - 0
WN results/088/Clusters/C11.csv


Разница между файлами не показана из-за своего большого размера
+ 1997 - 0
WN results/088/Clusters/C2.csv


Разница между файлами не показана из-за своего большого размера
+ 2124 - 0
WN results/088/Clusters/C3.csv


Разница между файлами не показана из-за своего большого размера
+ 2319 - 0
WN results/088/Clusters/C4.csv


Разница между файлами не показана из-за своего большого размера
+ 2630 - 0
WN results/088/Clusters/C5.csv


Разница между файлами не показана из-за своего большого размера
+ 2062 - 0
WN results/088/Clusters/C6.csv


Разница между файлами не показана из-за своего большого размера
+ 2105 - 0
WN results/088/Clusters/C7.csv


Разница между файлами не показана из-за своего большого размера
+ 2098 - 0
WN results/088/Clusters/C8.csv


Разница между файлами не показана из-за своего большого размера
+ 2371 - 0
WN results/088/Clusters/C9.csv


Разница между файлами не показана из-за своего большого размера
+ 4500 - 0
WN results/088/Clusters/ClusteredOF.csv


Разница между файлами не показана из-за своего большого размера
+ 4500 - 0
WN results/088/Clusters/ClusteredSham.csv


Разница между файлами не показана из-за своего большого размера
+ 4500 - 0
WN results/088/Clusters/ClusteredT1.csv


Разница между файлами не показана из-за своего большого размера
+ 4500 - 0
WN results/088/Clusters/ClusteredT2.csv


Разница между файлами не показана из-за своего большого размера
+ 4500 - 0
WN results/088/Clusters/ClusteredT3.csv


Разница между файлами не показана из-за своего большого размера
+ 22500 - 0
WN results/088/Summary/Clustered088Data.csv


Разница между файлами не показана из-за своего большого размера
+ 22500 - 0
WN results/088/Summary/Clustered088Dist.csv


Разница между файлами не показана из-за своего большого размера
+ 22500 - 0
WN results/088/Summary/Mouse088Clustered.csv


+ 11 - 0
WN results/088/Summary/Mouse088CoordMeans.csv

@@ -0,0 +1,11 @@
+088,-1.15674,-0.939767,-0.459823,-0.0276534,0.551953,1.13845,1,1901
+088,1.39027,1.09698,0.860939,0.706763,0.836518,1.18528,2,1997
+088,0.613639,0.445566,0.508718,0.582744,1.04133,1.48517,3,2124
+088,1.14651,0.850429,0.612142,0.554397,0.997386,1.46107,4,2319
+088,0.903464,0.646165,0.554234,0.57713,1.02907,1.46617,5,2630
+088,0.0906641,0.083791,0.352085,0.546879,1.00525,1.4578,6,2062
+088,-0.472003,-0.366725,0.0207863,0.370486,0.872229,1.37557,7,2105
+088,1.39407,1.08395,0.809755,0.64504,0.898565,1.34405,8,2098
+088,0.926816,0.75407,0.704721,0.64495,0.923425,1.31908,9,2371
+088,0.385545,0.384671,0.569106,0.609943,0.974792,1.40844,10,1421
+088,1.3347,1.04974,0.65122,0.466314,0.896117,1.40603,11,1472

+ 11 - 0
WN results/088/Summary/Mouse088DistMeans.csv

@@ -0,0 +1,11 @@
+088,-0.216977,-0.69692,-1.12909,-1.7087,-2.29519,-0.479944,-0.912114,-1.49172,-2.07821,-0.43217,-1.01178,-1.59827,-0.579606,-1.1661,-0.586494,1
+088,0.293299,0.529336,0.683512,0.553756,0.204994,0.236037,0.390213,0.260458,-0.0883043,0.154176,0.0244208,-0.324341,-0.129755,-0.478517,-0.348762,2
+088,0.168073,0.104921,0.030895,-0.427687,-0.871527,-0.0631522,-0.137178,-0.59576,-1.0396,-0.0740257,-0.532608,-0.976448,-0.458582,-0.902422,-0.44384,3
+088,0.296077,0.534364,0.592109,0.14912,-0.314563,0.238287,0.296032,-0.146958,-0.610641,0.0577452,-0.385244,-0.848928,-0.442989,-0.906673,-0.463683,4
+088,0.257299,0.349231,0.326334,-0.12561,-0.562705,0.0919318,0.0690351,-0.382909,-0.820004,-0.0228967,-0.474841,-0.911936,-0.451944,-0.889039,-0.437095,5
+088,0.00687308,-0.261421,-0.456215,-0.914583,-1.36714,-0.268294,-0.463088,-0.921457,-1.37401,-0.194794,-0.653163,-1.10572,-0.458368,-0.910924,-0.452556,6
+088,-0.105277,-0.492789,-0.842489,-1.34423,-1.84757,-0.387512,-0.737212,-1.23895,-1.74229,-0.3497,-0.851442,-1.35478,-0.501742,-1.00508,-0.50334,7
+088,0.310117,0.584313,0.749027,0.495502,0.0500206,0.274195,0.43891,0.185385,-0.260097,0.164715,-0.0888106,-0.534292,-0.253525,-0.699007,-0.445481,8
+088,0.172746,0.222095,0.281866,0.00339167,-0.392267,0.0493486,0.10912,-0.169355,-0.565014,0.0597713,-0.218703,-0.614362,-0.278475,-0.674134,-0.395659,9
+088,0.000874447,-0.183561,-0.224398,-0.589247,-1.0229,-0.184435,-0.225272,-0.590121,-1.02377,-0.0408369,-0.405686,-0.839339,-0.364849,-0.798502,-0.433653,10
+088,0.28496,0.683482,0.868388,0.438585,-0.0713256,0.398522,0.583428,0.153625,-0.356285,0.184906,-0.244897,-0.754807,-0.429803,-0.939714,-0.509911,11

Разница между файлами не показана из-за своего большого размера
+ 4504 - 0
WN results/089/089_OF_DLC_3D.csv


Разница между файлами не показана из-за своего большого размера
+ 4504 - 0
WN results/089/089_SHAM_DLC_3D.csv


Разница между файлами не показана из-за своего большого размера
+ 4504 - 0
WN results/089/089_T1_DLC_3D.csv


Разница между файлами не показана из-за своего большого размера
+ 4504 - 0
WN results/089/089_T2_DLC_3D.csv


Разница между файлами не показана из-за своего большого размера
+ 4504 - 0
WN results/089/089_T3_DLC_3D.csv


Разница между файлами не показана из-за своего большого размера
+ 4343 - 0
WN results/089/Clusters/C1.csv


Разница между файлами не показана из-за своего большого размера
+ 1726 - 0
WN results/089/Clusters/C2.csv


Разница между файлами не показана из-за своего большого размера
+ 3229 - 0
WN results/089/Clusters/C3.csv


Разница между файлами не показана из-за своего большого размера
+ 2471 - 0
WN results/089/Clusters/C4.csv


Разница между файлами не показана из-за своего большого размера
+ 3960 - 0
WN results/089/Clusters/C5.csv


Разница между файлами не показана из-за своего большого размера
+ 2946 - 0
WN results/089/Clusters/C6.csv


Разница между файлами не показана из-за своего большого размера
+ 1793 - 0
WN results/089/Clusters/C7.csv


Разница между файлами не показана из-за своего большого размера
+ 2032 - 0
WN results/089/Clusters/C8.csv


+ 0 - 0
WN results/089/Clusters/ClusteredOF.csv


Некоторые файлы не были показаны из-за большого количества измененных файлов