diff Syncopation models/syncopation.py @ 40:6371e8f21f7d

updating the syncopation functions to fix a few problems
author christopherh <christopher.harte@eecs.qmul.ac.uk>
date Thu, 23 Apr 2015 15:46:58 +0100
parents cc38b3047ed9
children
line wrap: on
line diff
--- a/Syncopation models/syncopation.py	Mon Apr 13 23:06:49 2015 +0100
+++ b/Syncopation models/syncopation.py	Thu Apr 23 15:46:58 2015 +0100
@@ -10,7 +10,7 @@
 def sync_perbar_permodel (model, bar, parameters=None):
 	return model.get_syncopation(bar, parameters)
 
-def syncopation_barlist_permodel(model, source, parameters=None):
+def calculate_syncopation(model, source, parameters=None):
  	total = 0.0
  	barResults = []
  	numberOfNotes = 0
@@ -20,6 +20,9 @@
  	if isinstance(source, BarList):
  		barlist = source
  		sourceType = "bar list"
+ 	elif isinstance(source, Bar):
+ 		barlist = BarList().append(source)
+ 		sourceType = "single bar"
 	elif isinstance(source, basestring):
 		#treat source as a filename
 		sourceType = source
@@ -37,6 +40,8 @@
 		print "Error in syncopation_barlist_permodel(): unrecognised source type."
 	
 	barsDiscarded=0
+	discardedlist = []
+	includedlist = []
 
 	if barlist!=None:
 		for bar in barlist:
@@ -50,8 +55,10 @@
 			if barSyncopation != None:
 				total += barSyncopation
 				numberOfNotes += sum(bar.get_binary_sequence())
+				includedlist.append(barlist.index(bar))
 			else:
 				barsDiscarded += 1
+				discardedlist.append(barlist.index(bar))
 				print 'Model could not measure bar %d, returning None.' % barlist.index(bar)
 
 		import WNBD
@@ -60,7 +67,16 @@
 
 		average = total / (len(barResults)-barsDiscarded)
 
- 	return {"summed_syncopation":total, "average_syncopation_per_bar":average, "source":sourceType, "number_of_bars":len(barResults), "number_of_bars_not_measured":barsDiscarded, "syncopation_by_bar":barResults}
+ 	return {
+ 			"model_name":model.__name__ , 
+ 			"summed_syncopation":total, 
+ 			"mean_syncopation_per_bar":average, 
+ 			"source":sourceType, 
+ 			"number_of_bars":len(barResults), 
+ 			"number_of_bars_not_measured":barsDiscarded, 
+ 			"bars_with_valid_output":includedlist, 
+ 			"syncopation_by_bar":barResults
+ 			}