annotate listeningTest/multiComp/readMultiComp.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 4fd284285159
children
rev   line source
b@0 1 function tstDat=readMultiComp(testFile)
b@0 2
b@0 3 % multiple comparison 1D specifications
b@0 4 %
b@0 5 % NAME:
b@0 6 % multicomp test #1
b@0 7 %
b@0 8 % nbSCALES: 1
b@0 9 % nbSOUNDS: 3
b@0 10 %
b@0 11 % COMBINATIONS
b@0 12 % 1 (random position)
b@0 13 % 2 reference position 1
b@0 14 % 3 position 3
b@0 15 %
b@0 16 % SCALES
b@0 17 %
b@0 18 % SCALE:
b@0 19 % 1st scale
b@0 20 % MIN: 0 no amount
b@0 21 % MAX: 10 max amount
b@0 22 % STEP: 1 in between
b@0 23 %
b@0 24 % COMMENTS? 1 % ask if a comment field should be displayed (1=yes 0=no)
b@0 25
b@0 26 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
b@0 27 %
b@0 28 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
b@0 29
b@0 30 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
b@0 31 %Initialization
b@0 32 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
b@0 33
b@0 34 tstDat.sndRef=[];
b@0 35 tstDat.posComb=[];
b@0 36
b@0 37 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
b@0 38 % file parsing
b@0 39 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
b@0 40
b@0 41 fid=fopen(testFile,'r');
b@0 42 while ~feof(fid)
b@0 43 lin=fgetl(fid);
b@0 44
b@0 45 [word1,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin,'%s',1);
b@0 46
b@0 47 if (~COUNT | ~strcmp(word1,'%'))
b@0 48 switch upper(word1)
b@0 49 case 'NAME'
b@0 50 tstDat.name=fgetl(fid);
b@0 51
b@0 52 case 'NBSOUNDS:'
b@0 53 [nbComb,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin(NEXTINDEX:end),'%d',1);
b@0 54 tstDat.nbComb=nbComb;
b@0 55
b@0 56 case 'NBSCALES:'
b@0 57 [nbScale,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin(NEXTINDEX:end),'%d',1);
b@0 58 tstDat.nbScale=nbScale;
b@0 59
b@0 60 case 'COMBINATIONS'
b@0 61 for noComb=1:nbComb
b@0 62 lin=fgetl(fid);
b@0 63 if ~isempty(lin)
b@0 64 if lin(1)~='%'
b@0 65 [comb,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin,'%d',1);
b@0 66 tstDat.comb(noComb,:)=comb;
b@0 67 % Read the reference DATA
b@0 68 lin=lin(NEXTINDEX:end);
b@0 69 [stri,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin,'%s',1);
b@0 70 if findstr(lower(stri),'ref')
b@0 71 tstDat.sndRef(end+1)=comb(1);
b@0 72 lin=lin(NEXTINDEX:end);
b@0 73 [stri,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin,'%s',1);
b@0 74 end
b@0 75 % read the sounds default position
b@0 76 if findstr(lower(stri),'pos')
b@0 77 lin=lin(NEXTINDEX:end);
b@0 78 end
b@0 79 [posComb,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin,'%f',inf);
b@0 80 if ~isempty(posComb) % if it IS empty: set randomly!
b@0 81 tstDat.posComb(noComb,:)=posComb;
b@0 82 else
b@0 83 tstDat.posComb(noComb,:)=100*rand(1, tstDat.nbScale); % added by Brecht to allow for random placing
b@0 84
b@0 85 end
b@0 86 end
b@0 87 end
b@0 88 end
b@0 89 %eol(fid); %BDM???
b@0 90 case 'SCALES'
b@0 91 % check posRef length
b@0 92 nbRef=length(tstDat.sndRef);
b@0 93 for noRef=1:nbRef
b@0 94 if (length(tstDat.posComb(tstDat.sndRef(noRef),:))~=nbScale)
b@0 95 fprintf(1,'Watch out, the position of reference %d are not specified for all scale',noRef);
b@0 96 end
b@0 97 end
b@0 98 for noScale=1:nbScale
b@0 99
b@0 100 while ~feof(fid)
b@0 101 lin=fgetl(fid);
b@0 102 [header,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin,'%s',1);
b@0 103 switch firstWord(header)
b@0 104 case 'SCALE:'
b@0 105 name=fgetl(fid);
b@0 106 case 'min'
b@0 107 lin=lin(NEXTINDEX:end);
b@0 108 [minn,COUNT,ERRMSG,NEXTINDEX]=sscanf(lin,'%d',1); %%
b@0 109 level{1}=lin(NEXTINDEX:end); %%
b@0 110 case 'max'
b@0 111 lin=lin(NEXTINDEX:end);
b@0 112 [maxx,COUNT,ERRMSG,NEXTINDEX]=sscanf(lin,'%d',1); %%
b@0 113 level{3}=lin(NEXTINDEX:end); %%
b@0 114 case 'step'
b@0 115 lin=lin(NEXTINDEX:end);
b@0 116 [stepp,COUNT,ERRMSG,NEXTINDEX]=sscanf(lin,'%d',1); %%
b@0 117 level{2}=lin(NEXTINDEX:end); %%
b@0 118 break
b@0 119 end
b@0 120
b@0 121 end
b@0 122 tstDat.scale(noScale).name=name;
b@0 123 tstDat.scale(noScale).maxx=maxx;
b@0 124 tstDat.scale(noScale).minn=minn;
b@0 125 tstDat.scale(noScale).stepp=stepp;
b@0 126 tstDat.scale(noScale).level=level;
b@0 127 end
b@0 128 case 'COMMENTS?:'
b@0 129 [COM,COUNT,ERRMSG,NEXTINDEX] = sscanf(lin(NEXTINDEX:end),'%d',1);
b@0 130 tstDat.COM=COM;
b@0 131 end
b@0 132 end
b@0 133 end
b@0 134
b@0 135 fclose(fid);
b@0 136
b@0 137
b@0 138 function word=firstWord(word)
b@0 139
b@0 140 if ~isempty(word)
b@0 141 if word(1)=='%'
b@0 142 word='';
b@0 143 end
b@0 144 else
b@0 145 word='';
b@0 146 end