Mercurial > hg > ape
view listeningTest/pairComp/readPairComp.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 tstDat=readPairComp(testFile) % pair comparison specifications % % NAME % pair comparison test #1 % % NBSOUNDS: 3 % RANDOM?: 0 % REPETITIONS?: 0 % % NBCOMBINATIONS: 3 % COMBINATIONS % 2 3 % 2 1 % 3 1 % % NBSCALES: 1 % SCALES % SCALE: % Global difference % LEVEL % min 1 A & B are the same % max 7 A & B are very different % step 1 % % NBQUESTIONS: 2 % QUESTIONS % 2 I prefer A % 1 I prefer B % 0 I think they are both very annoying % the index in front show if the questions are linked to others (mutually exclusive) % % COMMENTS?: 1 % ask if a comment field should be displayed (1=yes 0=no) % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Initialization %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % file parsing %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% tstDat.name=[]; tstDat.COM=1; tstDat.RAN=0; tstDat.REP=0; tstDat.scale=[]; fid=fopen(testFile,'r'); while ~feof(fid) lin=fgetl(fid); [word1,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin,'%s',1); if (~COUNT || ~strcmp(word1,'%')) switch upper(word1) case 'NAME' tstDat.name=fgetl(fid); case 'NBSOUNDS:' [nbSnd,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin(NEXTINDEX:end),'%d',1); tstDat.nbSnd=nbSnd; % only if specific combinations need to be tested (as opposed to % all possible combinations) % case 'NBCOMBINATIONS:' % [nbComb,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin(NEXTINDEX:end),'%d',1); % tstDat.nbComb=nbComb; % % case 'COMBINATIONS' % for noComb=1:nbComb % lin=fgetl(fid); % if ~isempty(lin) % if lin(1)~='%' % [comb,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin,'%d',2); % tstDat.comb(noComb,:)=comb; % end % end % end case 'NBSCALES:' [nbScale,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin(NEXTINDEX:end),'%d',1); tstDat.nbScale=nbScale; case 'SCALES' for noScale=1:nbScale while ~feof(fid) lin=fgetl(fid); [header,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin,'%s',1); switch firstWord(header) case 'SCALE:' name=fgetl(fid); case 'min' lin=lin(NEXTINDEX:end); [minn,COUNT,ERRMSG,NEXTINDEX]=sscanf(lin,'%d',1); %% level{1}=lin(NEXTINDEX:end); %% case 'max' lin=lin(NEXTINDEX:end); [maxx,COUNT,ERRMSG,NEXTINDEX]=sscanf(lin,'%d',1); %% level{3}=lin(NEXTINDEX:end); %% case 'step' lin=lin(NEXTINDEX:end); [stepp,COUNT,ERRMSG,NEXTINDEX]=sscanf(lin,'%d',1); %% level{2}=lin(NEXTINDEX:end); %% break end end tstDat.scale(noScale).name=name; tstDat.scale(noScale).maxx=maxx; tstDat.scale(noScale).minn=minn; tstDat.scale(noScale).stepp=stepp; tstDat.scale(noScale).level=level; end case 'NBQUESTIONS:' [nbQuest,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin(NEXTINDEX:end),'%d',1); tstDat.nbQuest=nbQuest; case 'QUESTIONS' for noQuest=1:nbQuest lin=fgetl(fid); [tstDat.link(noQuest),COUNT,ERRMSG,NEXTINDEX] = sscanf(lin,'%d',1); tstDat.quest{noQuest}=lin(NEXTINDEX:end); end case 'COMMENTS?:' [COM,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin(NEXTINDEX:end),'%d',1); tstDat.COM=COM; % assume random order is desired for now % case 'RANDOM?:' % [RAN,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin(NEXTINDEX:end),'%d',1); % tstDat.RAN=RAN; case 'REPETITIONS?:' % number of times samples should be repeated [REP,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin(NEXTINDEX:end),'%d',1); tstDat.REP=REP; end end end comb = combnk(1:nbSnd,2); nbComb = length(comb(:,1)); % repeat comparisons a number of times throughout test if REP comb = repmat(comb,tstDat.REP+1,1); end % randomise order comb = comb(randperm(nbComb),:); % randomly flip left and right column numbers flipsides = ceil(2*rand(nbComb,1))-1; % random string of nbComb 0's and 1's comb = [comb((1:nbComb)'+ flipsides*nbComb) comb((1:nbComb)' + nbComb - flipsides*nbComb)]; %save('lastComb','comb'); % TO DO: Add recall in case of crash/interruption. tstDat.comb = comb; tstDat.nbComb = nbComb; fclose(fid); function word=firstWord(word) if ~isempty(word) if word(1)=='%' word=''; end else word=''; end