changeset 2523:dc8deb5db7fb

Merge branch 'master' of https://github.com/BrechtDeMan/WebAudioEvaluationTool
author www-data <www-data@sucuk.dcs.qmul.ac.uk>
date Mon, 07 Nov 2016 11:22:12 +0000
parents e60c729ba622 (current diff) eddd3766970c (diff)
children f686ffc8b3f0
files tests/examples/project.xml
diffstat 4 files changed, 261 insertions(+), 145 deletions(-) [+]
line wrap: on
line diff
--- a/python/generate_report.py	Thu Nov 03 11:27:50 2016 +0000
+++ b/python/generate_report.py	Mon Nov 07 11:22:12 2016 +0000
@@ -64,6 +64,10 @@
 gender = []
 age    = []
 
+# diagnostics
+browser  = []
+platform = []
+
 # get username if available
 for name in ('LOGNAME', 'USER', 'LNAME', 'USERNAME'):
     user = os.environ.get(name)
@@ -161,6 +165,20 @@
         individual_table = '\n' # table with stats for this individual test file
         timeline_plots = '' # plots of timeline (movements and plays)
         
+        # diagnostics: browser
+        vendor = root.find("./navigator/vendor")
+        if vendor is not None and vendor.text is not None:
+            browser.append(vendor.text.replace(',',''))
+        else:
+            browser.append('UNAVAILABLE')
+
+        # diagnostics: platform
+        platform_tag = root.find("./navigator/platform")
+        if platform_tag is not None and platform_tag.text is not None:
+            platform.append(platform_tag.text.replace('_','\_'))
+        else:
+            platform_tag.append('UNAVAILABLE')
+
         # DEMO survey stats
         # get gender
         post_survey = root.find("./survey/[@location='post']")
@@ -534,6 +552,104 @@
         '''
 # problem: some people entered twice? 
 
+
+# pie chart of browser usage
+browsers = ['Google Inc.', 'Apple Computer Inc.', 'UNAVAILABLE']
+# TODO: get the above automatically
+browser_distribution = ''
+for item in browsers:
+    number = browser.count(item)
+    if number>0:
+        browser_distribution += str("{:.2f}".format((100.0*number)/len(browser)))+\
+                               '/'+item.capitalize()+' ('+str(number)+'),\n'
+
+body += r'''
+        % Pie chart of browser distribution
+        \def\angle{0}
+        \def\radius{3}
+        \def\cyclelist{{"orange","blue","red","green"}}
+        \newcount\cyclecount \cyclecount=-1
+        \newcount\ind \ind=-1
+        \begin{figure}[htbp]
+        \begin{center}\begin{tikzpicture}[nodes = {font=\sffamily}]
+        \foreach \percent/\name in {'''+\
+        browser_distribution+\
+        r'''} {\ifx\percent\empty\else               % If \percent is empty, do nothing
+        \global\advance\cyclecount by 1     % Advance cyclecount
+        \global\advance\ind by 1            % Advance list index
+        \ifnum6<\cyclecount                 % If cyclecount is larger than list
+          \global\cyclecount=0              %   reset cyclecount and
+          \global\ind=0                     %   reset list index
+        \fi
+        \pgfmathparse{\cyclelist[\the\ind]} % Get color from cycle list
+        \edef\color{\pgfmathresult}         %   and store as \color
+        % Draw angle and set labels
+        \draw[fill={\color!50},draw={\color}] (0,0) -- (\angle:\radius)
+          arc (\angle:\angle+\percent*3.6:\radius) -- cycle;
+        \node at (\angle+0.5*\percent*3.6:0.7*\radius) {\percent\,\%};
+        \node[pin=\angle+0.5*\percent*3.6:\name]
+          at (\angle+0.5*\percent*3.6:\radius) {};
+        \pgfmathparse{\angle+\percent*3.6}  % Advance angle
+        \xdef\angle{\pgfmathresult}         %   and store in \angle
+        \fi
+        };
+        \end{tikzpicture}
+        \caption{Representation of browsers across subjects}
+        \label{default}
+        \end{center}
+        \end{figure}
+        
+        '''
+
+# pie chart of platform usage
+platforms = ['Win32', 'Win64', 'MacIntel', 'Linux i686', 'Linux x86\_64', 'UNAVAILABLE']
+# TODO: get the above automatically # order alphabetically
+platform_distribution = ''
+for item in platforms:
+    number = platform.count(item)
+    if number>0:
+        platform_distribution += str("{:.2f}".format((100.0*number)/len(platform)))+\
+                               '/'+item.capitalize()+' ('+str(number)+'),\n'
+
+body += r'''
+        % Pie chart of browser distribution
+        \def\angle{0}
+        \def\radius{3}
+        \def\cyclelist{{"orange","blue","red","green","cyan"}}
+        \newcount\cyclecount \cyclecount=-1
+        \newcount\ind \ind=-1
+        \begin{figure}[htbp]
+        \begin{center}\begin{tikzpicture}[nodes = {font=\sffamily}]
+        \foreach \percent/\name in {'''+\
+        platform_distribution+\
+        r'''} {\ifx\percent\empty\else               % If \percent is empty, do nothing
+        \global\advance\cyclecount by 1     % Advance cyclecount
+        \global\advance\ind by 1            % Advance list index
+        \ifnum6<\cyclecount                 % If cyclecount is larger than list
+          \global\cyclecount=0              %   reset cyclecount and
+          \global\ind=0                     %   reset list index
+        \fi
+        \pgfmathparse{\cyclelist[\the\ind]} % Get color from cycle list
+        \edef\color{\pgfmathresult}         %   and store as \color
+        % Draw angle and set labels
+        \draw[fill={\color!50},draw={\color}] (0,0) -- (\angle:\radius)
+          arc (\angle:\angle+\percent*3.6:\radius) -- cycle;
+        \node at (\angle+0.5*\percent*3.6:0.7*\radius) {\percent\,\%};
+        \node[pin=\angle+0.5*\percent*3.6:\name]
+          at (\angle+0.5*\percent*3.6:\radius) {};
+        \pgfmathparse{\angle+\percent*3.6}  % Advance angle
+        \xdef\angle{\pgfmathresult}         %   and store in \angle
+        \fi
+        };
+        \end{tikzpicture}
+        \caption{Representation of platforms across subjects}
+        \label{default}
+        \end{center}
+        \end{figure}
+        
+        '''
+
+
 #TODO
 # time per page in function of number of fragments (plot)
 # time per participant in function of number of pages
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/examples/APE_example.xml	Mon Nov 07 11:22:12 2016 +0000
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="utf-8"?>
+<waet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="test-schema.xsd">
+	<setup interface="APE" projectReturn="save.php" randomiseOrder='true' poolSize="2" loudness="-23" calibration="true">
+		<survey location="before">
+			<surveyentry type="question" id="sessionId" mandatory="true">
+				<statement>Please enter your name.</statement>
+                <conditional check="equals" value="John" jumpToOnPass="test-intro" jumpToOnFail="checkboxtest"/>
+			</surveyentry>
+			<surveyentry type="checkbox" id="checkboxtest" mandatory="true">
+				<statement>Please select with which activities you have any experience (example checkbox question)</statement>
+				<option name="musician">Playing a musical instrument</option>
+				<option name="soundengineer">Recording or mixing audio</option>
+				<option name="developer">Developing audio software</option>
+				<option name="hwdesigner">Designing or building audio hardware</option>
+				<option name="researcher">Research in the field of audio</option>
+			</surveyentry>
+            <surveyentry type="question" id="instrument" mandatory="false">
+                <statement>What instrument did you play</statement>
+            </surveyentry>
+			<surveyentry type="statement" id="test-intro">
+				<statement>This is an example of an 'APE'-style test, with two pages, using the test stimuli in 'example_eval/'.</statement>
+			</surveyentry>
+		</survey>
+		<survey location="after">
+			<surveyentry type="question" id="location" mandatory="true" boxsize="large">
+				<statement>Please enter your location. (example mandatory text question)</statement>
+			</surveyentry>
+			<surveyentry type="number" id="age" min="0">
+				<statement>Please enter your age (example non-mandatory number question)</statement>
+			</surveyentry>
+			<surveyentry type="radio" id="rating">
+				<statement>Please rate this interface (example radio button question)</statement>
+				<option name="bad">Bad</option>
+				<option name="poor">Poor</option>
+				<option name="good">Good</option>
+				<option name="great">Great</option>
+			</surveyentry>
+			<surveyentry type="statement" id="thankyou">
+				<statement>Thank you for taking this listening test. Please click 'submit' and your results will appear in the 'saves/' folder.</statement>
+			</surveyentry>
+		</survey>
+		<metric>
+			<metricenable>testTimer</metricenable>
+			<metricenable>elementTimer</metricenable>
+			<metricenable>elementInitialPosition</metricenable>
+			<metricenable>elementTracker</metricenable>
+			<metricenable>elementFlagListenedTo</metricenable>
+			<metricenable>elementFlagMoved</metricenable>
+			<metricenable>elementListenTracker</metricenable>
+		</metric>
+		<interface>
+			<interfaceoption type="check" name="fragmentMoved"/>
+            <interfaceoption type="check" name="fragmentPlayed"/>
+			<interfaceoption type="check" name="scalerange" min="25" max="75"/>
+			<interfaceoption type="show" name='playhead'/>
+			<interfaceoption type="show" name="page-count"/>
+            <interfaceoption type="show" name="comments"/>
+		</interface>
+	</setup>
+	<page id='test-0' hostURL="media/example/" randomiseOrder='true' repeatCount='0' loop='true' loudness="-12">
+		<commentboxprefix>Comment on fragment</commentboxprefix>
+		<interface name="preference">
+            <title>Preference</title>
+			<scales>
+				<scalelabel position="0">Min</scalelabel>
+				<scalelabel position="100">Max</scalelabel>
+				<scalelabel position="50">Middle</scalelabel>
+				<scalelabel position="20">20</scalelabel>
+			</scales>
+		</interface>
+		<interface name="depth">
+			<title>Depth</title>
+			<scales>
+				<scalelabel position="0">Low</scalelabel>
+				<scalelabel position="100">High</scalelabel>
+				<scalelabel position="50">Middle</scalelabel>
+				<scalelabel position="50">Middle</scalelabel>
+			</scales>
+		</interface>
+		<audioelement url="0.wav" id="track-0" type="anchor"/>
+		<audioelement url="1.wav" id="track-1"/>
+		<audioelement url="2.wav" id="track-2"/>
+		<audioelement url="3.wav" id="track-3"/>
+		<audioelement url="4.wav" id="track-4"/>
+		<survey location="before">
+			<surveyentry type="statement" id="test-0-intro">
+				<statement>Example of an 'APE' style interface with hidden anchor 'zero' (which needs to be below 20%), looping of the samples, randomisation of marker labels, mandatory moving of every sample, and a forced scale usage of at least 25%-75%.</statement>
+			</surveyentry>
+		</survey>
+		<survey location="after">
+			<surveyentry type="question" id="genre-0" mandatory="true">
+				<statement>Please enter the genre.</statement>
+			</surveyentry>
+		</survey>
+	</page>
+	<page id='test-1' hostURL="media/example/" randomiseOrder='true' repeatCount='0' loop='false' label="letter">
+        <commentboxprefix>Comment on fragment</commentboxprefix>
+		<interface name="preference">
+			<title>Example Test Question</title>
+			<scales>
+				<scalelabel position="0">Min</scalelabel>
+				<scalelabel position="100">Max</scalelabel>
+				<scalelabel position="50">Middle</scalelabel>
+				<scalelabel position="20">20</scalelabel>
+			</scales>
+		</interface>
+		<audioelement url="0.wav" gain="-6" id="track-5" type="anchor" marker="20"/>
+		<audioelement url="1.wav" gain="0.0" id="track-6" type="reference" marker="80"/>
+		<audioelement url="2.wav" gain="0.0" id="track-7"/>
+		<audioelement url="3.wav" gain="0.0" id="track-8"/>
+		<audioelement url="4.wav" gain="0.0" id="track-9"/>
+		<audioelement url="5.wav" gain="0.0" id="track-10"/>
+		<audioelement url="6.wav" gain="0.0" id="track-11" type="outside-reference"/>
+		<commentquestion id='mixingExperience' type="question">
+			<statement>What is your general experience with numbers?</statement>
+		</commentquestion>
+		<commentquestion id="preference" type="radio">
+			<statement>Please enter your overall preference</statement>
+			<option name="worst">Very Bad</option>
+			<option name="bad"></option>
+			<option name="OK">OK</option>
+			<option name="Good"></option>
+			<option name="Great">Great</option>
+		</commentquestion>
+		<commentquestion id="character" type="checkbox">
+			<statement>Please describe the overall character</statement>
+			<option name="funky">Funky</option>
+			<option name="mellow">Mellow</option>
+			<option name="laidback">Laid back</option>
+			<option name="heavy">Heavy</option>
+		</commentquestion>
+		<survey location="before">
+			<surveyentry type="statement" id="test-1-intro">
+				<statement>Example of an 'APE' style interface with hidden anchor 'zero' (which needs to be below 20%), looping of the samples, randomisation of marker labels, mandatory moving of every sample, and a forced scale usage of at least 25%-75%.</statement>
+			</surveyentry>
+		</survey>
+		<survey location="after">
+			<surveyentry type="question" id="genre-1" mandatory="true">
+				<statement>Please enter the genre.</statement>
+			</surveyentry>
+		</survey>
+	</page>
+</waet>
\ No newline at end of file
--- a/tests/examples/mushra_example.xml	Thu Nov 03 11:27:50 2016 +0000
+++ b/tests/examples/mushra_example.xml	Mon Nov 07 11:22:12 2016 +0000
@@ -94,13 +94,13 @@
 				<scalelabel position="20">20</scalelabel>
 			</scales>
 		</interface>
-		<audioelement url="0.wav" gain="-6" id="track-5" type="anchor" marker="20"/>
+		<audioelement url="0.wav" gain="-6.0" id="track-5" type="anchor" marker="20"/>
 		<audioelement url="1.wav" gain="0.0" id="track-6" type="reference" marker="80"/>
 		<audioelement url="2.wav" gain="0.0" id="track-7"/>
 		<audioelement url="3.wav" gain="0.0" id="track-8"/>
 		<audioelement url="4.wav" gain="0.0" id="track-9"/>
 		<audioelement url="5.wav" gain="0.0" id="track-10"/>
-		<audioelement url="6.wav" gain="0.0" id="track-11" type="outside-reference"/>
+		<audioelement url="1.wav" gain="0.0" id="track-11" type="outside-reference"/>
 		<commentquestion id='mixingExperience' type="question">
 			<statement>What is your general experience with numbers?</statement>
 		</commentquestion>
--- a/tests/examples/project.xml	Thu Nov 03 11:27:50 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,143 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<waet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="test-schema.xsd">
-	<setup interface="APE" projectReturn="save.php" randomiseOrder='true' poolSize="2" loudness="-23" calibration="true">
-		<survey location="before">
-			<surveyentry type="question" id="sessionId" mandatory="true">
-				<statement>Please enter your name.</statement>
-                <conditional check="equals" value="John" jumpToOnPass="test-intro" jumpToOnFail="checkboxtest"/>
-			</surveyentry>
-			<surveyentry type="checkbox" id="checkboxtest" mandatory="true">
-				<statement>Please select with which activities you have any experience (example checkbox question)</statement>
-				<option name="musician">Playing a musical instrument</option>
-				<option name="soundengineer">Recording or mixing audio</option>
-				<option name="developer">Developing audio software</option>
-				<option name="hwdesigner">Designing or building audio hardware</option>
-				<option name="researcher">Research in the field of audio</option>
-			</surveyentry>
-            <surveyentry type="question" id="instrument" mandatory="false">
-                <statement>What instrument did you play</statement>
-            </surveyentry>
-			<surveyentry type="statement" id="test-intro">
-				<statement>This is an example of an 'APE'-style test, with two pages, using the test stimuli in 'example_eval/'.</statement>
-			</surveyentry>
-		</survey>
-		<survey location="after">
-			<surveyentry type="question" id="location" mandatory="true" boxsize="large">
-				<statement>Please enter your location. (example mandatory text question)</statement>
-			</surveyentry>
-			<surveyentry type="number" id="age" min="0">
-				<statement>Please enter your age (example non-mandatory number question)</statement>
-			</surveyentry>
-			<surveyentry type="radio" id="rating">
-				<statement>Please rate this interface (example radio button question)</statement>
-				<option name="bad">Bad</option>
-				<option name="poor">Poor</option>
-				<option name="good">Good</option>
-				<option name="great">Great</option>
-			</surveyentry>
-			<surveyentry type="statement" id="thankyou">
-				<statement>Thank you for taking this listening test. Please click 'submit' and your results will appear in the 'saves/' folder.</statement>
-			</surveyentry>
-		</survey>
-		<metric>
-			<metricenable>testTimer</metricenable>
-			<metricenable>elementTimer</metricenable>
-			<metricenable>elementInitialPosition</metricenable>
-			<metricenable>elementTracker</metricenable>
-			<metricenable>elementFlagListenedTo</metricenable>
-			<metricenable>elementFlagMoved</metricenable>
-			<metricenable>elementListenTracker</metricenable>
-		</metric>
-		<interface>
-			<interfaceoption type="check" name="fragmentMoved"/>
-            <interfaceoption type="check" name="fragmentPlayed"/>
-			<interfaceoption type="check" name="scalerange" min="25" max="75"/>
-			<interfaceoption type="show" name='playhead'/>
-			<interfaceoption type="show" name="page-count"/>
-            <interfaceoption type="show" name="comments"/>
-		</interface>
-	</setup>
-	<page id='test-0' hostURL="media/example/" randomiseOrder='true' repeatCount='0' loop='true' loudness="-12">
-		<commentboxprefix>Comment on fragment</commentboxprefix>
-		<interface name="preference">
-            <title>Preference</title>
-			<scales>
-				<scalelabel position="0">Min</scalelabel>
-				<scalelabel position="100">Max</scalelabel>
-				<scalelabel position="50">Middle</scalelabel>
-				<scalelabel position="20">20</scalelabel>
-			</scales>
-		</interface>
-		<interface name="depth">
-			<title>Depth</title>
-			<scales>
-				<scalelabel position="0">Low</scalelabel>
-				<scalelabel position="100">High</scalelabel>
-				<scalelabel position="50">Middle</scalelabel>
-				<scalelabel position="50">Middle</scalelabel>
-			</scales>
-		</interface>
-		<audioelement url="0.wav" id="track-0" type="anchor"/>
-		<audioelement url="1.wav" id="track-1"/>
-		<audioelement url="2.wav" id="track-2"/>
-		<audioelement url="3.wav" id="track-3"/>
-		<audioelement url="4.wav" id="track-4"/>
-		<survey location="before">
-			<surveyentry type="statement" id="test-0-intro">
-				<statement>Example of an 'APE' style interface with hidden anchor 'zero' (which needs to be below 20%), looping of the samples, randomisation of marker labels, mandatory moving of every sample, and a forced scale usage of at least 25%-75%.</statement>
-			</surveyentry>
-		</survey>
-		<survey location="after">
-			<surveyentry type="question" id="genre-0" mandatory="true">
-				<statement>Please enter the genre.</statement>
-			</surveyentry>
-		</survey>
-	</page>
-	<page id='test-1' hostURL="media/example/" randomiseOrder='true' repeatCount='0' loop='false' label="letter">
-        <commentboxprefix>Comment on fragment</commentboxprefix>
-		<interface name="preference">
-			<title>Example Test Question</title>
-			<scales>
-				<scalelabel position="0">Min</scalelabel>
-				<scalelabel position="100">Max</scalelabel>
-				<scalelabel position="50">Middle</scalelabel>
-				<scalelabel position="20">20</scalelabel>
-			</scales>
-		</interface>
-		<audioelement url="0.wav" gain="-6" id="track-5" type="anchor" marker="20"/>
-		<audioelement url="1.wav" gain="0.0" id="track-6" type="reference" marker="80"/>
-		<audioelement url="2.wav" gain="0.0" id="track-7"/>
-		<audioelement url="3.wav" gain="0.0" id="track-8"/>
-		<audioelement url="4.wav" gain="0.0" id="track-9"/>
-		<audioelement url="5.wav" gain="0.0" id="track-10"/>
-		<audioelement url="6.wav" gain="0.0" id="track-11" type="outside-reference"/>
-		<commentquestion id='mixingExperience' type="question">
-			<statement>What is your general experience with numbers?</statement>
-		</commentquestion>
-		<commentquestion id="preference" type="radio">
-			<statement>Please enter your overall preference</statement>
-			<option name="worst">Very Bad</option>
-			<option name="bad"></option>
-			<option name="OK">OK</option>
-			<option name="Good"></option>
-			<option name="Great">Great</option>
-		</commentquestion>
-		<commentquestion id="character" type="checkbox">
-			<statement>Please describe the overall character</statement>
-			<option name="funky">Funky</option>
-			<option name="mellow">Mellow</option>
-			<option name="laidback">Laid back</option>
-			<option name="heavy">Heavy</option>
-		</commentquestion>
-		<survey location="before">
-			<surveyentry type="statement" id="test-1-intro">
-				<statement>Example of an 'APE' style interface with hidden anchor 'zero' (which needs to be below 20%), looping of the samples, randomisation of marker labels, mandatory moving of every sample, and a forced scale usage of at least 25%-75%.</statement>
-			</surveyentry>
-		</survey>
-		<survey location="after">
-			<surveyentry type="question" id="genre-1" mandatory="true">
-				<statement>Please enter the genre.</statement>
-			</surveyentry>
-		</survey>
-	</page>
-</waet>
\ No newline at end of file