view listeningTest/pairComp/pairComp.m @ 15:24be5e9ce25b tip

Update README
author Brecht De Man <brecht.deman@bcu.ac.uk>
date Thu, 20 Sep 2018 12:23:20 +0200
parents 5e72201496c8
children
line wrap: on
line source
function pairComp(sesDat)
% a pair comparison test with various possible quesions (preference e.g.) and comments
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% copy useful variables
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

UIControl_FontSize_bak = get(0, 'DefaultUIControlFontSize'); 
set(0, 'DefaultUIControlFontSize', 28);

reREAD=sesDat.reREAD;
noTst=sesDat.noTst;
nbTst=sesDat.nbTst;
if reREAD
   rsl=sesDat.tstDat{noTst}.rsl;
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% read the test file
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
test=readPairComp(sesDat.tstDat{noTst}.tstFile);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Set the test screen
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


hf=figure;		
set(hf,'units','normalized');
%set(hf,'position',[0 .5 1 .4]);
set(hf,'position',[0 .05 .55 .75]);
set(hf,'closereq','');     %%%
set(hf,'numbertitle','off');
set(hf,'menubar','none');
set(hf,'name',sprintf('pair #1/%d',test.nbComb));
set(gca,'position',[0 0 1 1]);
axis([0 1 0 1]);
set(gca,'yticklabel','');
set(gca,'xticklabel','');
grid off;
hp=gca;

butCol=[.6 .9 .6]; 				% by default pale green
set(hp,'color',[.7 .7 .7]);     % gray background

% Figure-event properties

set(gcf,'KeyPressFcn','pairKey')

% Create the 3 frames

% set the upper frame

y1=.76;
y2=.75;
y3=.31;
y4=.3;
x1=0;
x2=.8;
x3=.81;

hold on

% sound frame
fill([x1 x1 1 1],[y1 1 1 y1],[.8 .8 1]);
% questions frames
fill([x1 x1 1 1],[y3 y2 y2 y3],[.7 .7 1]);
% comments and "finished" button frame
fill([x1 x1 1 1],[0 y4 y4 0],[.9 .9 .1]);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% PUSH BUTTONS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

y=(1-y1);
yy=y/20;
h=y-2*yy;

x=(1-x1);
xx=(1-x1)/8;

wab=3*xx;
wstop=2*xx;
xa=xx/2;
xb=9/2*xx;
xstop=3*xx;

posA=[xa y1+yy wab h];
posB=[xb y1+yy wab h];
posStop=[xstop y1+yy wstop h];

ha=uicontrol('style','pushbutton','string','A','units','normalized','position',posA, 'FontSize', 56);
set(ha,'backgroundcolor',butCol);
set(ha,'callback',sprintf('PCpush(%d,1)',hf.Number));

if strcmp(computer,'PCWIN')
   hStop=uicontrol('style','pushbutton','string','STOP','units','normalized','position',posStop, 'FontSize', 56);
   set(hStop,'callback',sprintf('PCpush(%d,2)',hf.Number));
else
   hStop='';
end

hb=uicontrol('style','pushbutton','string','B','units','normalized','position',posB, 'FontSize', 56);
set(hb,'backgroundcolor',butCol);
set(hb,'callback',sprintf('PCpush(%d,3)',hf.Number));

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% questions and scales
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if ~isfield(test,'nbScale')
   test.nbScale=0;
   test.scale='';
end
if ~isfield(test,'nbQuest')
   test.nbQuest=0;
   test.quest='';
end

test.hScale='';
test.hQuest='';

nbGUI=2*test.nbScale+test.nbQuest;

y=(y2-y3);
h=y/nbGUI;
hh=h/20;

x=(1-x1);
xx=(1-x1)/8;

noGUI=1;
% SCALES
for noScale=1:test.nbScale
   s=test.scale(noScale);  
   Y1=y2-((2*noGUI-1)*h-hh);
   %display text
   ho='horizontalAlignment';
   ve='verticalAlignment';
   text((1-x1)/2,Y1,s.name,ho,'center',ve,'bottom');	% Scale name
   % Level names
   text(x1+xx,Y1,s.level{1},ho,'left',ve,'bottom');	
   text(1-xx,Y1,s.level{3},ho,'right',ve,'bottom');
   
   Y2=Y1-h+hh;
   posG=[xx Y2 x-2*xx h-2*hh];   
   hScale(noScale)=uicontrol('style','slider','units','normalized','position',posG,'min',s.minn,'max',s.maxx,'value',s.minn);
   if reREAD
      set(hScale(noScale),'value',rsl.scale(1,noScale));
   end
   noGUI=noGUI+1;
end

% QUESTIONS check boxes
for noQuest=1:test.nbQuest
   noGUI=2*test.nbScale+noQuest;
   posG=[xx y2-(noGUI*h-hh) x-2*xx h];
   hQuest(noQuest)=uicontrol('style','checkbox','string',test.quest{noQuest},'units','normalized','position',posG,'min',0,'max',1);
   set(hQuest(noQuest),'callback',sprintf('PCcheck(%d,%d)',hf.Number,noQuest));   
   if reREAD
      set(hQuest(noQuest),'value',rsl.quest(1,noQuest));
   end
   noGUI=noGUI+1;
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% "Comments" field
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

if test.COM
   if reREAD
      stri=rsl.com{1};
   else
      stri='Write comments here.';
   end
   posCom=[x1 0 x2-x1 y4];
   hCom=uicontrol('style','edit','max',2,'string',stri,'units','normalized','position',posCom);
   dat.com=stri;
else
   hCom='';
   dat.com='';
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% "Submit" button
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
posFin=[x3 y4/3 1-x3 y4/3];
hFin=uicontrol('style','pushbutton','string','Submit','units','normalized','position',posFin);
set(hFin,'callback',sprintf('endPairComp(%d)',hf.Number));


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Test timer
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
dat.t0=clock;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Send useful datas
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% sounds and combination
dat.noComb=1;
dat.nbComb=test.nbComb;
dat.comb=test.comb;
dat.quest=test.quest;
dat.nbQuest=test.nbQuest;
dat.scale=test.scale;
dat.nbScale=test.nbScale;
dat.stri=stri;
dat.COM=test.COM;

% handles
dat.hf=hf;
dat.butCol=butCol;

dat.ha=ha;
dat.hb=hb;
dat.hStop=hStop;
dat.hQuest=hQuest;
%dat.hScale=hScale; % errors when uncommented
dat.hFin=hFin;
dat.hCom=hCom;

% global datas
dat.test=test;
dat.sesDat=sesDat;
if reREAD
   dat.rsl=rsl;
else
	dat.rsl='';
end

set(hf,'userdata',dat);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% clean up
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all;