changeset 2279:17b7ab4f93f2

generate_report compatible with Python 2.7 and 3.x: print ... --> print(...); minor updates
author Brecht De Man <b.deman@qmul.ac.uk>
date Wed, 20 Apr 2016 21:19:54 +0200
parents df459c20946e
children 334b11f2b418 185232d01324
files python/generate_report.py
diffstat 1 files changed, 46 insertions(+), 46 deletions(-) [+]
line wrap: on
line diff
--- a/python/generate_report.py	Wed Apr 20 20:36:47 2016 +0200
+++ b/python/generate_report.py	Wed Apr 20 21:19:54 2016 +0200
@@ -19,8 +19,8 @@
 # XML results files location
 if len(sys.argv) == 1:
     folder_name = "../saves/"    # Looks in 'saves/' folder from 'scripts/' folder
-    print "Use: python generate_report.py [results_folder] [no_render | -nr]"
-    print "Using default path: " + folder_name
+    print("Use: python generate_report.py [results_folder] [no_render | -nr]")
+    print("Using default path: " + folder_name)
 elif len(sys.argv) == 2:
     folder_name = sys.argv[1]   # First command line argument is folder
 elif len(sys.argv) == 3:
@@ -54,7 +54,7 @@
 # arrays initialisation
 page_names       = []
 real_page_names  = [] # regardless of differing numbers of fragments
-subject_count    = [] # subjects per audioholder name
+subject_count    = [] # subjects per page name
 page_count       = []
 duration_page    = []      # duration of experiment in function of page content
 duration_order   = []      # duration of experiment in function of page number
@@ -150,11 +150,11 @@
         #TODO add plot of age
                 
         # get list of all page names
-        for audioholder in root.findall("./page"):   # iterate over pages
-            page_name = audioholder.get('id')               # get page name
+        for page in root.findall("./page"):   # iterate over pages
+            page_name = page.get('ref')               # get page name
             
             if page_name is None: # ignore 'empty' audio_holders
-                print "WARNING: " + file + " contains empty audio holder. (evaluation_stats.py)"
+                print("WARNING: " + file + " contains empty audio holder. (evaluation_stats.py)")
                 break # move on to next
             
             number_of_comments = 0 # for this page
@@ -162,9 +162,9 @@
             not_played = [] # for this page
             not_moved = [] # for this page
             
-            if audioholder.find("./metric/metricresult[@id='testTime']") is not None: # check if time is included
-                # 'testTime' keeps total duration: subtract time so far for duration of this audioholder
-                duration = float(audioholder.find("./metric/metricresult[@id='testTime']").text) - total_duration
+            if page.find("./metric/metricresult[@id='testTime']") is not None: # check if time is included
+                # 'testTime' keeps total duration: subtract time so far for duration of this page
+                duration = float(page.find("./metric/metricresult[@id='testTime']").text)# - total_duration
             
                 # total duration of test
                 total_duration += duration
@@ -173,22 +173,22 @@
                 total_duration = float('nan')
             
             # number of audio elements
-            audioelements = audioholder.findall("./audioelement") # get audioelements
+            audioelements = page.findall("./audioelement") # get audioelements
             number_of_fragments += len(audioelements) # add length of this list to total
             
             # number of comments (interesting if comments not mandatory)
             for audioelement in audioelements:
                 response = audioelement.find("./comment/response")
-                was_played = audioelement.find("./metric/metricresult/[@name='elementFlagListenedTo']")
-                was_moved = audioelement.find("./metric/metricresult/[@name='elementFlagMoved']")
-                if response.text is not None and len(response.text) > 1: 
+                was_played = audioelement.find("./metric/metricResult/[@name='elementFlagListenedTo']")
+                was_moved = audioelement.find("./metric/metricResult/[@name='elementFlagMoved']")
+                if response is not None and response.text is not None and len(response.text) > 1: 
                     number_of_comments += 1
                 else: 
                     number_of_missing_comments += 1
                 if was_played is not None and was_played.text == 'false': 
-                    not_played.append(audioelement.get('id'))
+                    not_played.append(audioelement.get('name'))
                 if was_moved is not None and was_moved.text == 'false': 
-                    not_moved.append(audioelement.get('id'))
+                    not_moved.append(audioelement.get('name'))
             
             # update global counters
             total_empty_comments += number_of_missing_comments
@@ -220,7 +220,7 @@
                                 str(number_of_comments+number_of_missing_comments)+'&'+\
                                 seconds2timestr(duration)+'\\\\\n'
             
-            # get timeline for this audioholder
+            # get timeline for this page
             img_path = 'timelines_movement/'+file[:-4]+'-'+page_name+'.pdf'
             
             # check if available
@@ -235,9 +235,9 @@
             else:
                 duration_order.append([duration])
             
-            # keep list of audioholder ids and count how many times each audioholder id
+            # keep list of page ids and count how many times each page id
             # was tested, how long it took, and how many fragments there were 
-            # (if number of fragments is different, store as different audioholder id)
+            # (if number of fragments is different, store as different page id)
             if page_name in page_names: 
                 page_index = page_names.index(page_name) # get index
                 # check if number of audioelements the same
@@ -261,7 +261,7 @@
                 duration_page.append([duration])
                 fragments_per_page.append(len(audioelements))
             
-            # number of subjects per audioholder regardless of differing numbers of 
+            # number of subjects per page regardless of differing numbers of 
             # fragments (for inclusion in box plots)
             if page_name in real_page_names:
                 page_index = real_page_names.index(page_name) # get index
@@ -354,15 +354,15 @@
 
 # Show average duration for all songs
 body += r'''\vspace{.5cm}
-                Average duration per audioholder (see also Figure \ref{fig:avgtimeperaudioholder}): \\
+                Average duration per page (see also Figure \ref{fig:avgtimeperpage}): \\
                 \begin{tabular}{llll}
                         \textbf{Audioholder} & \textbf{Duration} & \textbf{\# subjects} & \textbf{\# fragments} \\'''
-audioholder_names_ordered = []
-average_duration_audioholder_ordered = []
+page_names_ordered = []
+average_duration_page_ordered = []
 number_of_subjects = []
 for page_index in range(len(page_names)):
-    audioholder_names_ordered.append(combined_list[page_index][0])
-    average_duration_audioholder_ordered.append(combined_list[page_index][1])
+    page_names_ordered.append(combined_list[page_index][0])
+    average_duration_page_ordered.append(combined_list[page_index][1])
     number_of_subjects.append(combined_list[page_index][3])
     body +=  '\n\t\t\t'+combined_list[page_index][0] + "&" +\
              seconds2timestr(combined_list[page_index][1]) + "&" +\
@@ -371,25 +371,25 @@
 body += '\n\t\t\\end{tabular}\n'
 
 # SHOW bar plot of average time per page
-plt.bar(range(1,len(audioholder_names_ordered)+1), np.array(average_duration_audioholder_ordered)/60)
+plt.bar(range(1,len(page_names_ordered)+1), np.array(average_duration_page_ordered)/60)
 plt.xlabel('Audioholder')
-plt.xlim(.8, len(audioholder_names_ordered)+1)
-plt.xticks(np.arange(1,len(audioholder_names_ordered)+1)+.4, audioholder_names_ordered, rotation=90)
+plt.xlim(.8, len(page_names_ordered)+1)
+plt.xticks(np.arange(1,len(page_names_ordered)+1)+.4, page_names_ordered, rotation=90)
 plt.ylabel('Average time [minutes]')
-plt.savefig(folder_name+"time_per_audioholder.pdf", bbox_inches='tight')
+plt.savefig(folder_name+"time_per_page.pdf", bbox_inches='tight')
 plt.close()
 
 # SHOW bar plot of average time per page
-plt.bar(range(1,len(audioholder_names_ordered)+1), number_of_subjects)
+plt.bar(range(1,len(page_names_ordered)+1), number_of_subjects)
 plt.xlabel('Audioholder')
-plt.xlim(.8, len(audioholder_names_ordered)+1)
-plt.xticks(np.arange(1,len(audioholder_names_ordered)+1)+.4, audioholder_names_ordered, rotation=90)
+plt.xlim(.8, len(page_names_ordered)+1)
+plt.xticks(np.arange(1,len(page_names_ordered)+1)+.4, page_names_ordered, rotation=90)
 plt.ylabel('Number of subjects')
 ax = plt.gca()
 ylims = ax.get_ylim()
 yint = np.arange(int(np.floor(ylims[0])), int(np.ceil(ylims[1]))+1)
 plt.yticks(yint)
-plt.savefig(folder_name+"subjects_per_audioholder.pdf", bbox_inches='tight')
+plt.savefig(folder_name+"subjects_per_page.pdf", bbox_inches='tight')
 plt.close()
 
 # SHOW both figures
@@ -408,10 +408,10 @@
 body += r'''\begin{figure}[htbp]
          \begin{center}
          \includegraphics[width=.65\textwidth]{'''+\
-         folder_name+'time_per_audioholder.pdf'+\
+         folder_name+'time_per_page.pdf'+\
         r'''}
-        \caption{Average time spent per audioholder.}
-        \label{fig:avgtimeperaudioholder}
+        \caption{Average time spent per page.}
+        \label{fig:avgtimeperpage}
          \end{center}
          \end{figure}
          
@@ -419,10 +419,10 @@
 body += r'''\begin{figure}[htbp]
          \begin{center}
          \includegraphics[width=.65\textwidth]{'''+\
-         folder_name+'subjects_per_audioholder.pdf'+\
+         folder_name+'subjects_per_page.pdf'+\
         r'''}
-        \caption{Number of subjects per audioholder.}
-        \label{fig:subjectsperaudioholder}
+        \caption{Number of subjects per page.}
+        \label{fig:subjectsperpage}
          \end{center}
          \end{figure}
          
@@ -430,20 +430,20 @@
 #TODO add error bars
 #TODO layout of figures
 
-# SHOW boxplot per audioholder
+# SHOW boxplot per page
 #TODO order in decreasing order of participants
-for audioholder_name in page_names: # get each name
+for page_name in page_names: # get each name
     # plot boxplot if exists (not so for the 'alt' names)
-    if os.path.isfile(folder_name+'ratings/'+audioholder_name+'-ratings-box.pdf'):
+    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/"+audioholder_name+'-ratings-box.pdf'+\
+             folder_name+"ratings/"+page_name+'-ratings-box.pdf'+\
             r'''}
-            \caption{Box plot of ratings for audioholder '''+\
-            audioholder_name+' ('+str(subject_count[real_page_names.index(audioholder_name)])+\
+            \caption{Box plot of ratings for page '''+\
+            page_name+' ('+str(subject_count[real_page_names.index(page_name)])+\
             ''' participants).}
-            \label{fig:boxplot'''+audioholder_name.replace(" ", "")+'''}
+            \label{fig:boxplot'''+page_name.replace(" ", "")+'''}
              \end{center}
              \end{figure}
              
@@ -509,7 +509,7 @@
 
 texfile = header+body+footer # add bits together
 
-print 'pdflatex -output-directory="'+folder_name+'"" "'+ folder_name + 'Report.tex"' # DEBUG
+# print('pdflatex -output-directory="'+folder_name+'"" "'+ folder_name + 'Report.tex"')# DEBUG
 
 # write TeX file
 with open(folder_name + 'Report.tex','w') as f: