Jelajahi Sumber

Upload files to 'RawData'

Evangelos Paraskevopoulos 3 bulan lalu
induk
melakukan
80f182c6df

+ 111 - 0
RawData/MIWithinBetweenBandsAllSubjectsAllTimesAllConditions2.m

@@ -0,0 +1,111 @@
+%This is a script estimating time-delayed phase MI for a series of trials and provides an average 
+%MI table for all trials of each condition, each timepoint, and each subject. The
+%folder is expected to have a sub-directory with the files needed for the
+%script to run called 'FilesNeeded', another one in which the output data will be saved called 'MusicPlast_WithinBetweenMI',
+%the script it self, and the timeseries to be analyzed.
+%Theoretically once the folder is the current directory of matlab, you may
+%just run it with no further input needed. Just hit the green button and
+%wait.... a lot!
+
+%Add necessary toolbox GCMI to the path!! it is supposed to be in a sub-folder of the current directory called FilesNeeded
+% addpath('./FilesNeeded/GCMI');
+% create a list with all the files to be processed
+filelist=dir('*_Hilbert.mat');
+
+% Get lists of subjects, times and conditions to classify the files
+filedetails = getdetails(filelist); %This calls a function placed at the end of the script that generates a table with the files' subject names, condition1, condition2.
+
+%Load lists of files characteristics to be used for classifying the files
+load('./FilesNeeded/Subjects.mat'); % A file (string array) with the subject names. It is supposed to be in a sub-folder of the current directory called FilesNeeded
+load('./FilesNeeded/Times.mat');  % A file (string array) with the times [Variable1]. It is supposed to be in a sub-folder of the current directory called FilesNeeded
+load('./FilesNeeded/Conditions.mat'); % A file (string array) with the conditions [Variable2]. It is supposed to be in a sub-folder of the current directory called FilesNeeded
+
+%Define the saving folder
+savingFolder = './MusicPlast_WithinBetween_MI/'; % change accordingly
+
+%Select files on the basis of subject
+for s=1:length(Subjects)   
+subjectName = Subjects(s);
+%Select files on the basis of condition 1
+for t=1:length(Times) 
+TimeName = Times(t);    
+%Select files on the basis of condition 2
+for c=1:length(Conditions)
+conditionName = Conditions(c);
+%Select all files satisfying condition1 condition2 subject selection 
+selectedfiles = filedetails.Filename(filedetails.Subject == subjectName & filedetails.Condition == conditionName & filedetails.Time == TimeName);
+%Select each of the files, one by one...
+for f=1%:length(selectedfiles)
+WorkFile = importdata(selectedfiles(f));
+   
+%Start MI estimation
+WorkVariable = WorkFile.TF; % Name of the variable to work with
+
+%Define parameters.
+numSamples = 4001; %Number of samples in your trial
+minDelay = 16; %Minimum delay for MI
+maxDelay = 16; %Max delay for MI
+numberOfFreqBands = 4; %How many bands are you interested in?
+numSources = 360; %Number of sournces in your atlas
+
+%Caclulate initial tables based on the parameters defined above
+numSamplesMinusMinDelay = numSamples-minDelay; 
+mi=zeros(1,numSamples);
+miAtlasSingleSource=zeros(1,numSources);
+miAtlasAllSources=zeros(numSources,numSources);
+miAtlasAllPhaseBands=zeros((numSources*numberOfFreqBands),(numSources*numberOfFreqBands));
+atlasLength=[1:numSources:(numSources*(numberOfFreqBands+1))];atlasLength(numberOfFreqBands+1)=(numSources*(numberOfFreqBands));
+
+%Estimate Within and Between Bands Time delayed Mutual Info Of Phase
+for pOne=1:numberOfFreqBands%for all phase bands
+    for pTwo=1:numberOfFreqBands
+        for k=1:numSources%for all sources as 1st part of comparison
+            for i=1:numSources%for all sources as 2nd part of comparison
+                %search mutual information of phase
+                for d=minDelay:maxDelay%minDelay:numSamplesMinusMinDelay %search across all delays (from minDelay+)// or Choose 16ms based on https://doi.org/10.1016/j.neuroimage.2013.11.047
+                    mi(1,d)=mi_gg((copnorm(((circshift((WorkVariable(k,:,pOne)),d,2))'))), (copnorm(((WorkVariable(i,:,pTwo)))')));
+                  %  mi(1,1:minDelay)=0; mi(1,numSamplesMinusMinDelay:numSamples)=0; %zero out 1st and last
+                    miMax=max(mi);%take the max of all delays
+                end
+                miAtlasSingleSource(1,i)=miMax;
+            end
+            miAtlasAllSources(k,:)=miAtlasSingleSource;
+            miAtlasAllSourcesNorm = normalize(miAtlasAllSources);
+        end
+        miAtlasAllPhaseBands(atlasLength(pOne):((atlasLength(pOne)+(numSources-1))),atlasLength(pTwo):((atlasLength(pTwo)+(numSources-1))))=miAtlasAllSourcesNorm;
+    end
+end
+
+%Create the outcome table for this file (trial)
+trialHypernetwork = miAtlasAllPhaseBands;
+
+% End MI estimation - Add each trial to a subject matrix.
+SubjectTimeConditionTrialMatrix=zeros((numSources*numberOfFreqBands),(numSources*numberOfFreqBands),f);
+SubjectTimeConditionTrialMatrix(:,:,f)= trialHypernetwork;
+
+end
+% Average MI files of each trial to create one hypernetwork
+SubjectTimeConditionMatrix= mean(SubjectTimeConditionTrialMatrix,3);
+
+
+%Save output file for subect-condition1-condition2
+combinedStr = strcat(subjectName,'_',TimeName,'_',conditionName); %replace name!!!
+combinedStr2 = strcat(savingFolder,combinedStr);
+save(combinedStr2,'SubjectTimeConditionMatrix');   
+end
+end
+end
+
+
+% Function to be used for finding the correct files. It creates a table
+% that has the characteristics of the file names [subject names, condition1, condition2, complete file name]
+function filedetails = getdetails(filelist) %filelist: a structure array generated in the begining of the script
+    filenames = vertcat(filelist.name); %convert the list of filename into a char array
+    %temporary variables to create the table. Using string to make comparison easier
+    Subject = string(filenames(:, 1:5)); % Subject names
+    Time = string(filenames(:, 7:10)); % Post or Prex
+    Condition = string(filenames(:, 12:17)); % Standx / AudDev / AvDevx / VisDev
+    Filename = string({filelist.name}'); %complete file name
+    %create the table
+    filedetails = table(Subject, Time, Condition, Filename);
+end