changeset 2488:f377350e7259

Merge branch 'master' of https://github.com/BrechtDeMan/WebAudioEvaluationTool
author www-data <www-data@sucuk.dcs.qmul.ac.uk>
date Mon, 08 Aug 2016 12:20:51 +0100
parents 83c1352ce756 (current diff) b0ef31a58ec5 (diff)
children 41346c364ac1
files
diffstat 2 files changed, 92 insertions(+), 57 deletions(-) [+]
line wrap: on
line diff
--- a/python/generate_report.py	Thu Aug 04 12:20:54 2016 +0100
+++ b/python/generate_report.py	Mon Aug 08 12:20:51 2016 +0100
@@ -72,16 +72,20 @@
     else:
         user = ''
 
+# Months
+month_array = ['January', 'February', 'March', 'April', 'May', 'June', \
+                'July', 'August', 'September', 'October', 'November', 'December']
 
 # begin LaTeX document
 header = r'''\documentclass[11pt, oneside]{article} 
           \usepackage{geometry}
           \geometry{a4paper}
           \usepackage[parfill]{parskip} % empty line instead of indent
-          \usepackage{graphicx}    % figures
-          \usepackage[space]{grffile} % include figures with spaces in paths
-          \usepackage{hyperref}
-          \usepackage{tikz}           % pie charts
+          \usepackage{graphicx}         % figures
+          \usepackage[space]{grffile}   % include figures with spaces in paths
+          \usepackage[pdfpagelabels]{hyperref}
+          \usepackage{tikz}             % pie charts
+          \usepackage{float}            % place figures 'here'
           \title{Report}
           \author{'''+\
           user+\
@@ -94,12 +98,12 @@
           \maketitle
           This is an automatically generated report using the `generate\_report.py' Python script 
           included with the Web Audio Evaluation Tool \cite{WAET} distribution which can be found 
-          at \texttt{code.soundsoftware.ac.uk/projects/webaudioevaluationtool}.
+          at \texttt{\href{https://github.com/BrechtDeMan/WebAudioEvaluationTool}{github.com/BrechtDeMan/WebAudioEvaluationTool}}.
           \tableofcontents
           
           '''
           
-footer = '\n\t\t'+r'''\begin{thebibliography}{9}
+footer = '\n\t\t'+r'''\begin{thebibliography}{1}
          \bibitem{WAET} % reference to accompanying publication
         Nicholas Jillings, Brecht De Man, David Moffat and Joshua D. Reiss, 
         ``Web Audio Evaluation Tool: A browser-based listening test environment,'' 
@@ -107,8 +111,6 @@
         \end{thebibliography}
         \end{document}'''
 
-body = ''
-
 # make sure folder_name ends in '/'
 folder_name = os.path.join(folder_name, '')
 
@@ -118,6 +120,10 @@
     subprocess.call("python score_parser.py '"+folder_name+"'", shell=True)
     subprocess.call("python score_plot.py '"+folder_name+"ratings/'", shell=True)
 
+# make array of text and array of dates
+body_array = []
+date_array = []
+
 # get every XML file in folder
 files_list = os.listdir(folder_name)
 for file in files_list: # iterate over all files in files_list
@@ -126,9 +132,28 @@
         tree = ET.parse(folder_name + file)
         root = tree.getroot()
         
-        # PRINT name as section
-        body+= '\n\section{'+file[:-4].capitalize()+'}\n' # make section header from name without extension
+        # get date
+          # <datetime>
+          #   <date year="2016" month="7" day="12"/>
+          #   <time hour="14" minute="12" secs="6"/>
+          # </datetime>
+        date_node = root.find("./datetime/date")
+        time_node = root.find("./datetime/time")
+        year   = date_node.get("year")
+        month  = date_node.get("month")
+        day    = date_node.get("day")
+        hour   = time_node.get("hour")
+        minute = time_node.get("minute")
+        second = time_node.get("secs")
+        date_array.append((int(year),int(month),int(day),\
+            int(hour),int(minute),int(second)))
         
+        # date as section title
+        body = '\n\section{'+day+' '+month_array[int(month)]+' '+year+' '+hour+':'+minute+':'+second+'}\n'
+
+        # file name
+        body += '\t\tFile: '+file[:-4]+'\\\\ \n'
+
         # reset for new subject
         total_duration = 0
         page_number = 0
@@ -138,16 +163,21 @@
         
         # DEMO survey stats
         # get gender
-        this_subjects_gender = root.find("./posttest/radio/[@id='gender']")
+        post_survey = root.find("./survey/[@location='post']")
+        this_subjects_gender = post_survey.find("./surveyresult/[@ref='gender']/response")
         if this_subjects_gender is not None:
             gender.append(this_subjects_gender.get("name"))
         else:
             gender.append('UNAVAILABLE')
         # get age
-        this_subjects_age = root.find("./posttest/number/[@id='age']")
+        this_subjects_age = post_survey.find("./surveyresult/[@ref='age']/response")
         if this_subjects_age is not None:
             age.append(this_subjects_age.text)
-        #TODO add plot of age
+        if this_subjects_gender is not None:
+            body += 'Details: '+this_subjects_gender.get("name")
+            if this_subjects_age is not None:
+                body += ', ' + this_subjects_age.text
+            body += '\\\\ \n'
                 
         # get list of all page names
         for page in root.findall("./page"):   # iterate over pages
@@ -289,7 +319,13 @@
                   
                   '''
         # PRINT timeline plots
-        body += timeline_plots
+        body += timeline_plots+'\n'
+
+        body_array.append(body)
+
+# put sections in order according to date
+body_array_ordered = [b for d,b in sorted(zip(date_array,body_array))]
+body = ''.join(body_array_ordered)
 
 # join to footer
 footer = body + footer
@@ -313,10 +349,10 @@
 body += r'Number of unmoved markers: &' + str(total_not_moved) +\
       " (" + str(round(100.0*total_not_moved/number_of_fragments,2)) + r"\%)\\"+'\n\t\t\t'
 body += r'Average time per page: &' + seconds2timestr(time_per_page_accum/number_of_pages) + r"\\"+'\n\t\t'
-body += '\\end{tabular} \\vspace{1.5cm} \\\\ \n'
+body += '\\end{tabular} \\\\ \n'
 
 # Average duration for first, second, ... page
-body += "\t\t\\vspace{.5cm} \n\n\t\tAverage duration per page (see also Figure \\ref{fig:avgtimeperpage}): \\\\ \n\t\t"
+body += "\n\n\t\t\\subsection*{Average duration per ordered page}\n See also Figure \\ref{fig:avgtimeperorder}. \\\\ \n\t\t"
 body += r'''\begin{tabular}{lll}
                     \textbf{Page} & \textbf{Duration} & \textbf{\# subjects}\\'''
 tpp_averages = [] # store average time per page
@@ -334,7 +370,7 @@
 plt.xlim(.8, len(duration_order)+1)
 plt.xticks(np.arange(1,len(duration_order)+1)+.4, range(1,len(duration_order)+1))
 plt.ylabel('Average time [minutes]')
-plt.savefig(folder_name+"time_per_page.pdf", bbox_inches='tight')
+plt.savefig(folder_name+"time_per_order.pdf", bbox_inches='tight')
 plt.close()
 #TODO add error bars
 
@@ -353,8 +389,8 @@
 combined_list = sorted(zip(*combined_list), key=operator.itemgetter(1, 2)) # sort
 
 # Show average duration for all songs
-body += r'''\vspace{.5cm}
-                Average duration per page (see also Figure \ref{fig:avgtimeperpage}): \\
+body += '\n\n\t\t'+r'''\subsection*{Average duration per page}
+                See also Figure \ref{fig:avgtimeperpage}. \\ 
                 \begin{tabular}{llll}
                         \textbf{Audioholder} & \textbf{Duration} & \textbf{\# subjects} & \textbf{\# fragments} \\'''
 page_names_ordered = []
@@ -394,59 +430,59 @@
 
 # SHOW both figures
 body += r'''
-         \begin{figure}[htbp]
-         \begin{center}
-         \includegraphics[width=.65\textwidth]{'''+\
-         folder_name+'time_per_page.pdf'+\
+        \begin{figure}[htbp]
+        \begin{center}
+        \includegraphics[width=.65\textwidth]{'''+\
+         folder_name+'time_per_order.pdf'+\
         r'''}
-        \caption{Average time spent per page.}
-        \label{fig:avgtimeperpage}
-         \end{center}
-         \end{figure}
+        \caption{Average time spent per page (order).}
+        \label{fig:avgtimeperorder}
+        \end{center}
+        \end{figure}
          
          '''
 body += r'''\begin{figure}[htbp]
-         \begin{center}
-         \includegraphics[width=.65\textwidth]{'''+\
+        \begin{center}
+        \includegraphics[width=.65\textwidth]{'''+\
          folder_name+'time_per_page.pdf'+\
         r'''}
-        \caption{Average time spent per page.}
+        \caption{Average time spent per page (content).}
         \label{fig:avgtimeperpage}
-         \end{center}
-         \end{figure}
+        \end{center}
+        \end{figure}
          
          '''
 body += r'''\begin{figure}[htbp]
-         \begin{center}
-         \includegraphics[width=.65\textwidth]{'''+\
+        \begin{center}
+        \includegraphics[width=.65\textwidth]{'''+\
          folder_name+'subjects_per_page.pdf'+\
         r'''}
         \caption{Number of subjects per page.}
         \label{fig:subjectsperpage}
-         \end{center}
-         \end{figure}
-         
+        \end{center}
+        \end{figure}
+
          '''
 #TODO add error bars
 #TODO layout of figures
 
-# SHOW boxplot per page
-#TODO order in decreasing order of participants
-for page_name in page_names: # get each name
+# SHOW boxplot per page (in alphabetical order of page name)
+body += '\t\t\\clearpage \n\t\\subsection*{Ratings per page}\n'
+for page_name in sorted(page_names): # get each name
     # plot boxplot if exists (not so for the 'alt' names)
     if os.path.isfile(folder_name+'ratings/'+page_name+'-ratings-box.pdf'):
-        body += r'''\begin{figure}[htbp]
-             \begin{center}
-             \includegraphics[width=.65\textwidth]{'''+\
-             folder_name+"ratings/"+page_name+'-ratings-box.pdf'+\
-            r'''}
-            \caption{Box plot of ratings for page '''+\
-            page_name+' ('+str(subject_count[real_page_names.index(page_name)])+\
-            ''' participants).}
-            \label{fig:boxplot'''+page_name.replace(" ", "")+'''}
-             \end{center}
-             \end{figure}
-             
+        body += r'''\begin{figure}[H]
+        \begin{center}
+        \includegraphics[width=.65\textwidth]{'''+\
+         folder_name+"ratings/"+page_name+'-ratings-box.pdf'+\
+        r'''}
+        \caption{Box plot of ratings for page '''+\
+        page_name+' ('+str(subject_count[real_page_names.index(page_name)])+\
+        ''' participants).}
+        \label{fig:boxplot'''+page_name.replace(" ", "")+'''}
+        \end{center}
+        \end{figure}
+        
              '''
 
 # DEMO pie chart of gender distribution among subjects
--- a/python/timeline_view_movement.py	Thu Aug 04 12:20:54 2016 +0100
+++ b/python/timeline_view_movement.py	Mon Aug 08 12:20:51 2016 +0100
@@ -62,7 +62,7 @@
         subject_id = file[:-4] # drop '.xml'
         
         previous_page_time = 0 # time spent before current page
-        time_offset = 0 # test starts at zero
+        #time_offset = 0 # test starts at zero
         
         # ONE TIMELINE PER PAGE - make new plot per page
 
@@ -125,8 +125,8 @@
                     listen_events = audioelement.findall("./metric/metricresult/[@name='elementListenTracker']/event")
                     for event in listen_events:
                         # get testtime: start and stop
-                        start_times_global.append(float(event.find('testtime').get('start'))-time_offset)
-                        stop_times_global.append(float(event.find('testtime').get('stop'))-time_offset)
+                        start_times_global.append(float(event.find('testtime').get('start')))#-time_offset)
+                        stop_times_global.append(float(event.find('testtime').get('stop')))#-time_offset)
                     
                     # display fragment name at start
                     plt.text(0,initial_position+0.02,audio_id,color=colormap[increment%len(colormap)]) #,rotation=45
@@ -279,7 +279,7 @@
                 increment+=1 # to next audioelement
             
             last_page_duration = page_time #-time_offset
-            time_offset = page_time
+            #time_offset = page_time
             
             if not plot_empty: # if plot is not empty, show and/or store
                 # set plot parameters
@@ -298,4 +298,3 @@
             
                 plt.savefig(timeline_folder+subject_id+"-"+page_name+".pdf", bbox_inches='tight')
                 plt.close()
-