MS_group_analysis.m 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359
  1. clear all;
  2. mainfolder='...' % select the main folder
  3. addpath(genpath([mainfolder '...'])) % add the path for the Circular Stats toolbox
  4. load([mainfolder '../good_partis.mat']) %list of participant with a good performance
  5. partis=good_partis';
  6. partis_sub=good_partis';
  7. %Folders of data to use
  8. config{1}.toloadfolder='/lindedomingo/Memoreye_DATA/eyelink_preprocessed/object_1_onset_11_seconds/';
  9. config{2}.toloadfolder='/lindedomingo/Memoreye_DATA/eyelink_preprocessed/object_1_onset_11_seconds/';
  10. config{3}.toloadfolder='/lindedomingo/Memoreye_DATA/eyelink_preprocessed/object_1_onset_11_seconds/';
  11. config{4}.toloadfolder='/lindedomingo/Memoreye_DATA/eyelink_preprocessed/object_1_onset_11_seconds/';
  12. config{5}.toloadfolder='/lindedomingo/Memoreye_DATA/eyelink_preprocessed/2nd_cue_onset_17_5__seconds/';
  13. config{6}.toloadfolder='/lindedomingo/Memoreye_DATA/eyelink_preprocessed/2nd_cue_onset_17_5__seconds/';
  14. config{1}.timofi= [300 1000];%[100 500]; %first object
  15. config{2}.timofi= [1300 2000]%; %second object
  16. config{3}.timofi= [2350 5850]%; %first delay
  17. config{4}.timofi= [2350 5850]%; %first delay
  18. config{5}.timofi= [650 2850]%[350 2850]; %second delay
  19. config{6}.timofi= [650 2850]%[350 2850]; %second delay
  20. config{1}.object=1;
  21. config{2}.object=2;
  22. config{3}.object=1;
  23. config{4}.object=2;
  24. config{5}.object=1;
  25. config{6}.object=2;
  26. config{1}.retrocue=0;
  27. config{2}.retrocue=0;
  28. config{3}.retrocue=1;
  29. config{4}.retrocue=2;
  30. config{5}.retrocue=2;
  31. config{6}.retrocue=1;
  32. %% Creating empty variables
  33. all_direction=[];
  34. all_direction_size=[];
  35. for rot=1:16
  36. for conf=1:6
  37. directionPerRot{conf,rot}=[];
  38. directionPerRotAve{conf,rot}=[];
  39. directionPerRotAll{conf}=[];
  40. RotationAll{conf}=[];
  41. sizePerRot{conf,rot}=[];
  42. end
  43. end
  44. for ppp=1:length(partis)
  45. for rot=1:16
  46. for conf=1:6
  47. directionPerRotPerPar{conf,rot,ppp}=[];
  48. sizePerRotPerPar{conf,rot,ppp}=[];
  49. RotationAllPerPar{conf,ppp}=[];
  50. directionPerRotAllPerPar{conf,ppp}=[];
  51. end
  52. end
  53. end
  54. for conf= 1:6 % for each possible configuration pattern
  55. for ppp=1:length(partis)
  56. toload =[mainfolder config{conf}.toloadfolder partis{ppp,:} '.mat'];
  57. load(toload)
  58. %Loading logfiles
  59. subtable=[];
  60. if strcmp( partis_sub{ppp,:},'p11')
  61. load([mainfolder 'lindedomingo/Memoreye_DATA/logfiles/resultfile_p11_table_repaired.mat']);
  62. subtable=sub;
  63. else
  64. sub = tdfread([mainfolder 'lindedomingo/Memoreye_DATA/logfiles/resultfile_' partis_sub{ppp,:} '.txt'],'tab'); %Logfile for this participant
  65. subtable=struct2table(sub);
  66. end
  67. %checking when is time window of interest
  68. tf1=find(data_epoch_recenter.time==config{conf}.timofi(1));
  69. tf2=find(data_epoch_recenter.time==config{conf}.timofi(2));
  70. time=(tf1:tf2);
  71. for ttt=1:size(data_epoch_recenter.eyedat,1)
  72. inputA=squeeze(data_epoch_recenter.eyedat(ttt,1:2,time));
  73. [num_shifts, shift_directions, sizeG] = detect_gaze_shifts_jld_size(inputA);
  74. % [shift_directions sizes] = detectMS_EK03_jld(inputA, 1);
  75. % shift_directions=deg2rad(shift_directions);%only when using MS_EK03
  76. all_direction=[all_direction shift_directions(:)']; %independently of the rotation
  77. all_direction_size = [all_direction_size, sizeG];
  78. end
  79. rotlist=unique(data_epoch_recenter.trialinfo.object_1_rot); %list of rotation
  80. for k =1:length(rotlist) % loop - rotations
  81. %trials of interest
  82. if config{conf}.object==1
  83. if config{conf}.retrocue==0;
  84. triales = find(data_epoch_recenter.trialinfo.object_1_rot==rotlist(k)...
  85. );%objlistid(i));
  86. else
  87. triales = find(data_epoch_recenter.trialinfo.object_1_rot==rotlist(k)...
  88. &data_epoch_recenter.trialinfo.retrocue==config{conf}.retrocue);%objlistid(i));
  89. end
  90. elseif config{conf}.object==2
  91. if config{conf}.retrocue==0;
  92. triales = find(data_epoch_recenter.trialinfo.object_2_rot==rotlist(k)...
  93. );%objlistid(i));
  94. else
  95. triales = find(data_epoch_recenter.trialinfo.object_2_rot==rotlist(k)...
  96. &data_epoch_recenter.trialinfo.retrocue==config{conf}.retrocue);%objlistid(i));
  97. end
  98. end
  99. forAve=[];
  100. for ttt=1:length(triales)
  101. inputA=squeeze(data_epoch_recenter.eyedat(triales(ttt),1:2,time));
  102. [num_shifts, shift_directions, sizeG] = detect_gaze_shifts_jld_size(inputA);
  103. % [shift_directions sizes] = detectMS_EK03_jld(inputA, 1);
  104. % shift_directions=deg2rad(shift_directions');%only when using MS_EK03
  105. directionPerRot{conf,k}=[directionPerRot{conf,k} shift_directions]; %independently of the rotation
  106. sizePerRot{conf,k}=[sizePerRot{conf,k} sizeG]; %independently of the rotation
  107. %Per participant
  108. directionPerRotPerPar{conf,k,ppp}=[directionPerRotPerPar{conf,k,ppp} shift_directions]; %independently of the rotation
  109. sizePerRotPerPar{conf,k,ppp}=[sizePerRotPerPar{conf,k,ppp} sizeG]; %independently of the rotation
  110. RotationAllPerPar{conf,ppp}=[RotationAllPerPar{conf,ppp} ones(size(shift_directions)).*rotlist(k)];
  111. directionPerRotAllPerPar{conf,ppp}=[directionPerRotAllPerPar{conf,ppp} shift_directions];
  112. forAve=[forAve circ_mean(shift_directions,[],2)];
  113. directionPerRotAll{conf}=[directionPerRotAll{conf} shift_directions];
  114. RotationAll{conf}=[RotationAll{conf} ones(size(shift_directions)).*rotlist(k)];
  115. end
  116. directionPerRotAve{conf,k}=[directionPerRotAve{conf,k} circ_mean(forAve,[],2)];
  117. end
  118. end
  119. end
  120. %%
  121. figure;
  122. polarhistogram(all_direction,50)
  123. %% Size of MS
  124. figure;
  125. histogram(all_direction_size.*0.0217)
  126. xlim([0,10])
  127. xlabel('° visual angle')
  128. ylabel('count')
  129. %% %% Combining orientations and cue 1 and 2 for both delays (MS size)
  130. for c=1:6; %Creating an empty variable
  131. sizePerRotCom{4}=[];
  132. end
  133. for i=1:16
  134. sizePerRotCom{1}=[sizePerRotCom{1} sizePerRot{1,i}];
  135. sizePerRotCom{2}=[sizePerRotCom{2} sizePerRot{2,i}];
  136. sizePerRotCom{3}=[sizePerRotCom{3} [sizePerRot{3,i} sizePerRot{4,i}]];
  137. sizePerRotCom{4}=[sizePerRotCom{4} [sizePerRot{5,i} sizePerRot{6,i}]];
  138. end
  139. %%
  140. listOfTil={'stim1','stim2','delay1','delay2'}
  141. figure;
  142. for cond =1:4;
  143. subplot(1,4,cond);
  144. histogram(sizePerRotCom{cond}.*0.0217,500)
  145. xlim([0,10])
  146. xlabel('° visual angle')
  147. ylabel('count')
  148. title([listOfTil{cond}])
  149. end
  150. %% Combining cue 1 and 2 for both delays
  151. for i=1:16
  152. directionPerRotCom{1,i}=directionPerRot{1,i};
  153. directionPerRotCom{2,i}=directionPerRot{2,i};
  154. directionPerRotCom{3,i}=[directionPerRot{3,i} directionPerRot{4,i}];
  155. directionPerRotCom{4,i}=[directionPerRot{5,i} directionPerRot{6,i}];
  156. end
  157. RotationAllCom{1}=RotationAll{1};
  158. RotationAllCom{2}=RotationAll{2};
  159. RotationAllCom{3}=[RotationAll{3} RotationAll{4}];
  160. RotationAllCom{4}=[RotationAll{5} RotationAll{6}];
  161. directionPerRotAllCom{1}=directionPerRotAll{1};
  162. directionPerRotAllCom{2}=directionPerRotAll{2};
  163. directionPerRotAllCom{3}=[directionPerRotAll{3} directionPerRotAll{4}];
  164. directionPerRotAllCom{4}=[directionPerRotAll{5} directionPerRotAll{6}];
  165. %% Same combining per participant
  166. for ppp = 1:length(partis)
  167. for i=1:16
  168. directionPerRotComPerPar{1,i,ppp}=directionPerRotPerPar{1,i,ppp};
  169. directionPerRotComPerPar{2,i,ppp}=directionPerRotPerPar{2,i,ppp};
  170. directionPerRotComPerPar{3,i,ppp}=[directionPerRotPerPar{3,i,ppp} directionPerRotPerPar{4,i,ppp}];
  171. directionPerRotComPerPar{4,i,ppp}=[directionPerRotPerPar{5,i,ppp} directionPerRotPerPar{6,i,ppp}];
  172. end
  173. end
  174. for ppp = 1:length(partis)
  175. RotationAllComPerPar{1,ppp}=RotationAllPerPar{1,ppp};
  176. RotationAllComPerPar{2,ppp}=RotationAllPerPar{2,ppp};
  177. RotationAllComPerPar{3,ppp}=[RotationAllPerPar{3,ppp} RotationAllPerPar{4,ppp}];
  178. RotationAllComPerPar{4,ppp}=[RotationAllPerPar{5,ppp} RotationAllPerPar{6,ppp}];
  179. directionPerRotAllComPerPar{1,ppp}=directionPerRotAllPerPar{1,ppp};
  180. directionPerRotAllComPerPar{2,ppp}=directionPerRotAllPerPar{2,ppp};
  181. directionPerRotAllComPerPar{3,ppp}=[directionPerRotAllPerPar{3,ppp} directionPerRotAllPerPar{4,ppp}];
  182. directionPerRotAllComPerPar{4,ppp}=[directionPerRotAllPerPar{5,ppp} directionPerRotAllPerPar{6,ppp}];
  183. end
  184. %% Plotting MS per condition
  185. colores=(colormap(hsv(16)));
  186. listOfTil={'stim1','stim2','delay1','delay2'}
  187. figure;
  188. for conf=1:4;
  189. subplot(1,4,conf);
  190. for i=1:16
  191. polarhistogram(directionPerRotCom{conf,i}+pi,40,'FaceColor',colores(i,:),'FaceAlpha',.5);hold on;
  192. end
  193. a=RotationAllCom{conf};
  194. b=directionPerRotAllCom{conf};
  195. [rho(conf) pval(conf)]=circ_corrcc(deg2rad(a),b);
  196. [rho180(conf) pval180(conf)]=circ_corrcc((deg2rad(a)+pi).*2,(b).*2)
  197. title([listOfTil{conf} ' pval360=' num2str(pval(conf)) ' pval180=' num2str(pval180(conf))])
  198. end
  199. %% Stats
  200. Stats180.rho=rho180'
  201. Stats180.pval=pval180'
  202. Stats180t=struct2table(Stats180)
  203. Stats360.rho=rho'
  204. Stats360.pval=pval'
  205. Stats360t=struct2table(Stats360)
  206. %% Group Rho vs. 0
  207. for ppp = 1:length(partis);
  208. for conf=1:4;
  209. a=RotationAllComPerPar{conf,ppp};
  210. b=directionPerRotAllComPerPar{conf,ppp};
  211. [rho(conf,ppp) pval(conf,ppp)]=circ_corrcc(deg2rad(a),b);
  212. [rho180(conf,ppp) pval180(conf,ppp)]=circ_corrcc((deg2rad(a)+pi).*2,(b).*2);
  213. end
  214. end
  215. [h,p,ci,stats] = ttest(rho', 0)
  216. [h,p,ci,stats] = ttest(rho180', 0)
  217. %% Re-rotated comb
  218. listOfTil={'stim1','stim2','delay1','delay2'}
  219. figure;
  220. for conf=1:4;
  221. subplot(1,4,conf);
  222. a=deg2rad(RotationAllCom{conf});
  223. b=directionPerRotAllCom{conf};
  224. c=angdiff(b,a)
  225. polarhistogram((c),40,'FaceColor',colores(i,:),'FaceAlpha',.5);hold on;
  226. [Rpval(conf) Rz(conf)] = circ_rtest((c))
  227. title([listOfTil{conf}, ' z=' num2str(Rz(conf)) ' p=' num2str(Rpval(conf))])
  228. end
  229. StatsR.z=Rz'
  230. StatsR.pval=Rpval'
  231. StatsRt=struct2table(StatsR)
  232. %% %% Group Rho vs. 0
  233. for ppp = 1:length(partis);
  234. for conf=1:4;
  235. a=RotationAllComPerPar{conf,ppp};
  236. b=directionPerRotAllComPerPar{conf,ppp};
  237. c=angdiff(b,a)
  238. [Rpval(conf,ppp) Rz(conf,ppp)] = circ_rtest((c))
  239. end
  240. end
  241. [h,p,ci,stats] = ttest(Rpval', 0)
  242. %% Re-rotated
  243. listOfTil={'stim1','stim2','delay1-cue1','delay1-cue2','delay2-cue1','delay2-cue2',}
  244. figure;
  245. for conf=1:6;
  246. subplot(3,2,conf);
  247. a=deg2rad(RotationAll{conf});
  248. b=(directionPerRotAll{conf});
  249. c=angdiff(b,a);
  250. polarhistogram((c),40,'FaceColor',colores(i,:),'FaceAlpha',.5);hold on;
  251. [pval z] = circ_rtest((c))
  252. degmean=rad2deg(circ_mean((c),[],2));
  253. title([listOfTil{conf}, ' z=' num2str(z) ' p=' num2str(pval) ' mean=' num2str(degmean)])
  254. end