Guest User

Untitled

a guest
Jul 18th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.52 KB | None | 0 0
  1. % This EXP is to replace green dot with digital '5'.
  2. % This is the way to make this EXP as a control condition.
  3. % ��ժ̶��Ǭ�1�ɡA1/5/9�b�e��
  4. % ��ժ̶��Ǭ�2�ɡA'5'�b�e��
  5.  
  6. %�ʧO
  7. %1���k�͡A2���k��
  8. %�ܼ� number_is_prestimulus = 1�ɡA�Ʀr�b�e�C�o��
  9.  
  10. % 1.0 - Acer2010/12/21_16:09
  11. %% <�e�m
  12. clc;clear all;
  13. addpath('FunctionBox');
  14. exp_time = datestr(now,'yyyy/mm/dd HH:MM:SS');
  15. %% ��ƿ�J
  16. subject_num = input('Subject ID : ');
  17. gender_index = input('Gender : ');
  18. switch gender_index
  19. case 1
  20. disp('Gender OK!');
  21. case 2
  22. disp('Gender OK!');
  23. otherwise
  24. error('�S���~�P�H');
  25. end
  26.  
  27. stage_num = input('Stage : ');
  28. switch stage_num
  29. case 1
  30. disp('Stage OK!');
  31. case 2
  32. disp('Stage OK!');
  33. otherwise
  34. error('�S�����s�b�����q');
  35. end
  36.  
  37. %% �ѼƳ]�m
  38. screen_lag = 0.01;
  39.  
  40. duration_list = [0.3 0.5 0.7];
  41. % duration_list = [0.01 0.01 0.01];
  42. digit_list = {'1' '9' '5'};
  43.  
  44. rep_time = 20;
  45. fontsize = 50;
  46. font_type = 'Arial';
  47.  
  48. break_time_trial = 18; %�`�N�@�U
  49.  
  50. %% < �Ѽƭp��
  51.  
  52. % �p���ժ̹��綶�DzŸ� 14 ��(1) 23�f(0)
  53. switch rem(subject_num,4)
  54. case {1,0}
  55. subject_order = 1;
  56. case {2,3}
  57. subject_order = 0;
  58. end
  59.  
  60. % �����ӹ���
  61. if subject_order == 1
  62. if stage_num == 1
  63. number_is_prestimulus = 1;
  64. else
  65. number_is_prestimulus = 0;
  66. end
  67. else
  68. if stage_num == 1
  69. number_is_prestimulus = 0;
  70. else
  71. number_is_prestimulus = 1;
  72. end
  73. end
  74.  
  75. %�p������E�զX
  76. stimuli_list = [];
  77. for i = 1:rep_time
  78. comb = ConditionCombination2(duration_list,digit_list);
  79. rand_comb = comb(randperm(size(comb,1)),:);
  80. stimuli_list = [stimuli_list;rand_comb];
  81. end
  82.  
  83. total_block = ceil(size(stimuli_list,1)/break_time_trial);
  84. %<�M��
  85. %clear ;
  86. %�M��>
  87. %% �Ѽƭp�� >
  88.  
  89. try %///////////////////////////////////////////////////////////////// try
  90.  
  91. %% < psychtoolbox �ѼƳ]�m
  92. AssertOpenGL; %�ˬd��Ҫ��T��
  93. oldVisualDebugLevel = Screen('Preference','VisualDebugLevel',3);
  94. oldSupressAllWarnings = Screen('Preference','SuppressAllWarnings',1);
  95. % [windowPtr rect]=Screen('openwindow',0,[0 0 0], [50 50 550 550]);
  96. [windowPtr rect]=Screen('openwindow',0,[0 0 0]);
  97. HideCursor;
  98. xcenter=rect(3)/2;
  99. ycenter=rect(4)/2;
  100. Screen('TextSize',windowPtr,fontsize);
  101. Screen('TextFont',windowPtr,font_type);
  102. %% psychtoolbox �ѼƳ]�m >
  103.  
  104.  
  105. %=============================================================================================================================����}�l
  106. for trial = 1:size(stimuli_list,1)
  107. %% < �𮧵e��
  108. if rem(trial,break_time_trial) == 1
  109. Screen('TextSize',windowPtr,16);
  110.  
  111. if trial == 1
  112. [nx, ny, textbounds] = DrawFormattedText(windowPtr,['Formal Stage ' num2str(stage_num) ' !!!\n\n\n' ...
  113. 'Remains = ' num2str(total_block) ' blocks\n\n' ...
  114. 'Click space bar to start'],'center','center',[255 255 255]);
  115. else
  116. [nx, ny, textbounds] = DrawFormattedText(windowPtr,[...
  117. 'Remains = ' num2str(total_block) ' blocks\n\n' ...
  118. 'Click space bar to start'],'center','center',[255 255 255]);
  119. end
  120. Screen('flip',windowPtr);
  121. while 1
  122. [Kb_temp1 Kb_temp2 Kb_temp3] = KbCheck;
  123. if Kb_temp3(32) %��space�~��
  124. break;
  125. end
  126. end
  127. Screen(windowPtr,'FillRect',[0 0 0]);
  128. Screen('flip',windowPtr);
  129. WaitSecs(3);
  130.  
  131. total_block = total_block - 1;
  132. Screen('TextSize',windowPtr,fontsize);
  133. end
  134. %% �𮧵e�� >
  135.  
  136. %% < fix cross 200ms
  137. Screen('DrawLine',windowPtr,[255 255 255],xcenter-30/2,ycenter+10,xcenter+30/2,ycenter+10,3);
  138. Screen('DrawLine',windowPtr,[255 255 255],xcenter,ycenter-30/2+10,xcenter,ycenter+30/2+10,3);
  139. data(trial).fix_cross = Screen(windowPtr,'Flip');
  140. QuitPsych;
  141. %<���e
  142. Screen(windowPtr,'FillRect',[0 0 0]);
  143. %���e>
  144. while GetSecs < data(trial).fix_cross + 0.2
  145. end
  146. %% fix cross>
  147.  
  148. %% < blank 800ms
  149. data(trial).blank1_time = Screen('flip',windowPtr);
  150. %<���e
  151. Screen('TextSize',windowPtr,fontsize);
  152. if number_is_prestimulus
  153. DrawFormattedText(windowPtr,stimuli_list{trial,2},'center','center',[200 200 200]);
  154. else
  155. DrawFormattedText(windowPtr, '5', 'center','center',[200 200 200]);
  156. end
  157. %���e>
  158. while GetSecs < data(trial).blank1_time + 0.8
  159. end
  160. %% blank >
  161.  
  162. %% < s1
  163. data(trial).s1_time = Screen('Flip',windowPtr);
  164. %<���e
  165. Screen(windowPtr,'FillRect',[0 0 0]);
  166. %���e>
  167. while GetSecs < data(trial).s1_time + stimuli_list{trial,1} - screen_lag
  168. end
  169. %% s1>
  170.  
  171. %% < blank2 1000ms
  172. data(trial).blank2_time = Screen('flip',windowPtr);
  173. %<���e
  174. % DrawFormattedText(windowPtr,num2str(test_time_list(trial,5)),'center','center',[200 200 200]);
  175. Screen('TextSize',windowPtr,30);
  176. [nx, ny, textbounds] = DrawFormattedText(windowPtr,'NOW!','center','center',[200 200 200]);
  177. Screen('TextSize',windowPtr,fontsize);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% check�@�U
  178. %���e>
  179. while GetSecs < data(trial).blank2_time + 1
  180. end
  181. %% blank2>
  182.  
  183. %% < now
  184. Kb_temp1 = KbCheck;%�d�ݦ��S�����
  185. data(trial).text_now = Screen('Flip',windowPtr);
  186. %<���e
  187. Screen('TextSize',windowPtr,fontsize);
  188. if ~number_is_prestimulus
  189. DrawFormattedText(windowPtr,stimuli_list{trial,2},'center','center',[200 200 200]);
  190. else
  191. DrawFormattedText(windowPtr, '5', 'center','center',[200 200 200]);
  192. end
  193. %���e>
  194. %% now>
  195.  
  196. %% < keypress
  197. if Kb_temp1 %�p�G���׭n���}
  198. KbWait([],1);
  199. end
  200. [data(trial).kb_press key_name_temp]= KbWait;
  201. %% keypress>
  202.  
  203. %% < s2
  204. data(trial).s2_start = Screen('Flip',windowPtr);
  205. %<���e
  206. Screen(windowPtr,'FillRect',[0 0 0]);
  207. %���e>
  208. %% < s2
  209.  
  210. %% < keyrelease
  211. data(trial).kb_release = KbWait([],1);
  212. %% keyrelease>
  213.  
  214. %% < blank3 1000ms
  215. data(trial).blank3_time = Screen('flip',windowPtr);
  216. WaitSecs(1);
  217. %% blank3>
  218.  
  219. %% <data processing for trial
  220. data(trial).Date = exp_time;
  221. data(trial).subject_num = subject_num;
  222. data(trial).subject_order = subject_order;
  223. data(trial).gender = gender_index;
  224. data(trial).stage = stage_num;
  225. data(trial).number_is_prestimulus = number_is_prestimulus;
  226. data(trial).trial = trial;
  227. data(trial).standard_dura = stimuli_list{trial,1};
  228. data(trial).s1_time_real = data(trial).blank2_time - data(trial).s1_time;
  229.  
  230. if number_is_prestimulus
  231. data(trial).s1 = stimuli_list{trial,2};
  232. data(trial).s2 = 'dot';
  233. else
  234. data(trial).s1 = 'dot';
  235. data(trial).s2 = stimuli_list{trial,2};
  236. end
  237. data(trial).condition = [data(trial).s1 '_' data(trial).s2];
  238.  
  239. data(trial).reproduction_time = data(trial).kb_release - data(trial).kb_press;
  240. data(trial).s2_time_real = data(trial).blank3_time - data(trial).s2_start;
  241.  
  242. key_name_temp2 = KbName(key_name_temp);
  243. if iscell(key_name_temp2)
  244. key_name_temp2 = key_name_temp2{1};
  245. end
  246. data(trial).Key = key_name_temp2; %#ok<AGROW>
  247.  
  248. data(trial).RT = data(trial).kb_press - data(trial).text_now;
  249. %% >
  250. end
  251.  
  252. catch %///////////////////////////////////////////////////////////////// catch
  253. Screen('CloseAll');
  254. err = lasterror;
  255. err.stack
  256. err.message
  257. ShowCursor;
  258.  
  259. save(['dataError_' num2str(subject_num) '_stage' num2str(stage_num) '.mat']);
  260. Struct2File(['dataError_' num2str(subject_num) '_stage' num2str(stage_num) '.txt'],data,'\t');
  261. end %/////////////////////////////////////////////////////////////////// end
  262.  
  263. %% block ����s��
  264. save(['data_' num2str(subject_num) '_stage' num2str(stage_num) '.mat']);
  265. Struct2File(['data_' num2str(subject_num) '_stage' num2str(stage_num) '.txt'],data,'\t');
  266. ShowCursor;
  267. Screen('CloseAll');
  268.  
  269. %% ��������s��
  270. if exist(['data_' num2str(subject_num) '_stage1.mat'],'file');
  271. if exist(['data_' num2str(subject_num) '_stage2.mat'],'file');
  272. end_message = msgbox('����ש󵲧�F');
  273. uiwait(end_message);
  274. if strcmp('Yes',questdlg('�n�Ĥl�A�n�X���ɮ׶�'));
  275. clear data;
  276. load(['data_' num2str(subject_num) '_stage1.mat']);
  277. data1 = data;
  278. clear data;
  279.  
  280. load(['data_' num2str(subject_num) '_stage2.mat']);
  281. data2 = data;
  282. clear data;
  283.  
  284. data = [data1 data2];
  285. save(['data_all_' num2str(subject_num) '.mat'],'data');
  286. Struct2File(['data_all_' num2str(subject_num) '.txt'],data,'\t');
  287. end
  288. end
  289. end
Add Comment
Please, Sign In to add comment