changeset 0:76ce27beba95

Have uploaded the syncopation dataset and audio wavefies.
author Chunyang Song <csong@eecs.qmul.ac.uk>
date Fri, 21 Mar 2014 15:49:46 +0000
parents
children b2da092dc2e0
files Raw rating data/Ratings for entire stimuli.xls Rhythm stimuli audio/ab.wav Rhythm stimuli audio/abab.wav Rhythm stimuli audio/ac.wav Rhythm stimuli audio/ad.wav Rhythm stimuli audio/adad.wav Rhythm stimuli audio/af.wav Rhythm stimuli audio/ag.wav Rhythm stimuli audio/ah.wav Rhythm stimuli audio/aj.wav Rhythm stimuli audio/ak.wav Rhythm stimuli audio/al.wav Rhythm stimuli audio/ba.wav Rhythm stimuli audio/baba.wav Rhythm stimuli audio/bb.wav Rhythm stimuli audio/bbbb.wav Rhythm stimuli audio/bc.wav Rhythm stimuli audio/bcbc.wav Rhythm stimuli audio/bd.wav Rhythm stimuli audio/bdbd.wav Rhythm stimuli audio/bf.wav Rhythm stimuli audio/bg.wav Rhythm stimuli audio/bh.wav Rhythm stimuli audio/bj.wav Rhythm stimuli audio/bk.wav Rhythm stimuli audio/bl.wav Rhythm stimuli audio/ca.wav Rhythm stimuli audio/cb.wav Rhythm stimuli audio/cbcb.wav Rhythm stimuli audio/cc.wav Rhythm stimuli audio/cd.wav Rhythm stimuli audio/cdcd.wav Rhythm stimuli audio/cf.wav Rhythm stimuli audio/cg.wav Rhythm stimuli audio/ch.wav Rhythm stimuli audio/cj.wav Rhythm stimuli audio/ck.wav Rhythm stimuli audio/cl.wav Rhythm stimuli audio/da.wav Rhythm stimuli audio/dada.wav Rhythm stimuli audio/db.wav Rhythm stimuli audio/dbdb.wav Rhythm stimuli audio/dc.wav Rhythm stimuli audio/dcdc.wav Rhythm stimuli audio/dd.wav Rhythm stimuli audio/dddd.wav Rhythm stimuli audio/df.wav Rhythm stimuli audio/dg.wav Rhythm stimuli audio/dh.wav Rhythm stimuli audio/dj.wav Rhythm stimuli audio/dk.wav Rhythm stimuli audio/dl.wav Rhythm stimuli audio/fa.wav Rhythm stimuli audio/fb.wav Rhythm stimuli audio/fc.wav Rhythm stimuli audio/fd.wav Rhythm stimuli audio/ff.wav Rhythm stimuli audio/fg.wav Rhythm stimuli audio/fh.wav Rhythm stimuli audio/fj.wav Rhythm stimuli audio/fk.wav Rhythm stimuli audio/fl.wav Rhythm stimuli audio/ga.wav Rhythm stimuli audio/gb.wav Rhythm stimuli audio/gc.wav Rhythm stimuli audio/gd.wav Rhythm stimuli audio/gf.wav Rhythm stimuli audio/gg.wav Rhythm stimuli audio/gh.wav Rhythm stimuli audio/gj.wav Rhythm stimuli audio/gk.wav Rhythm stimuli audio/gl.wav Rhythm stimuli audio/ha.wav Rhythm stimuli audio/hb.wav Rhythm stimuli audio/hc.wav Rhythm stimuli audio/hd.wav Rhythm stimuli audio/hf.wav Rhythm stimuli audio/hg.wav Rhythm stimuli audio/hh.wav Rhythm stimuli audio/hj.wav Rhythm stimuli audio/hk.wav Rhythm stimuli audio/hl.wav Rhythm stimuli audio/ja.wav Rhythm stimuli audio/jb.wav Rhythm stimuli audio/jc.wav Rhythm stimuli audio/jd.wav Rhythm stimuli audio/jf.wav Rhythm stimuli audio/jg.wav Rhythm stimuli audio/jh.wav Rhythm stimuli audio/jj.wav Rhythm stimuli audio/jk.wav Rhythm stimuli audio/jl.wav Rhythm stimuli audio/ka.wav Rhythm stimuli audio/kb.wav Rhythm stimuli audio/kc.wav Rhythm stimuli audio/kd.wav Rhythm stimuli audio/kf.wav Rhythm stimuli audio/kg.wav Rhythm stimuli audio/kh.wav Rhythm stimuli audio/kj.wav Rhythm stimuli audio/kk.wav Rhythm stimuli audio/kl.wav Rhythm stimuli audio/la.wav Rhythm stimuli audio/lb.wav Rhythm stimuli audio/lc.wav Rhythm stimuli audio/ld.wav Rhythm stimuli audio/lf.wav Rhythm stimuli audio/lg.wav Rhythm stimuli audio/lh.wav Rhythm stimuli audio/lj.wav Rhythm stimuli audio/lk.wav Rhythm stimuli audio/ll.wav Syncopation models/Keith.py Syncopation models/LHL.py Syncopation models/MeterStructure.py Syncopation models/MeterStructure.pyc Syncopation models/PRS.py Syncopation models/SG.py Syncopation models/TMC.py Syncopation models/TOB_ts.py Syncopation models/TOB_v2.py Syncopation models/WNBD.py Syncopation models/clave.txt Syncopation models/stimuli.txt Syncopation models/stimuli_34only.txt
diffstat 125 files changed, 1379 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
Binary file Raw rating data/Ratings for entire stimuli.xls has changed
Binary file Rhythm stimuli audio/ab.wav has changed
Binary file Rhythm stimuli audio/abab.wav has changed
Binary file Rhythm stimuli audio/ac.wav has changed
Binary file Rhythm stimuli audio/ad.wav has changed
Binary file Rhythm stimuli audio/adad.wav has changed
Binary file Rhythm stimuli audio/af.wav has changed
Binary file Rhythm stimuli audio/ag.wav has changed
Binary file Rhythm stimuli audio/ah.wav has changed
Binary file Rhythm stimuli audio/aj.wav has changed
Binary file Rhythm stimuli audio/ak.wav has changed
Binary file Rhythm stimuli audio/al.wav has changed
Binary file Rhythm stimuli audio/ba.wav has changed
Binary file Rhythm stimuli audio/baba.wav has changed
Binary file Rhythm stimuli audio/bb.wav has changed
Binary file Rhythm stimuli audio/bbbb.wav has changed
Binary file Rhythm stimuli audio/bc.wav has changed
Binary file Rhythm stimuli audio/bcbc.wav has changed
Binary file Rhythm stimuli audio/bd.wav has changed
Binary file Rhythm stimuli audio/bdbd.wav has changed
Binary file Rhythm stimuli audio/bf.wav has changed
Binary file Rhythm stimuli audio/bg.wav has changed
Binary file Rhythm stimuli audio/bh.wav has changed
Binary file Rhythm stimuli audio/bj.wav has changed
Binary file Rhythm stimuli audio/bk.wav has changed
Binary file Rhythm stimuli audio/bl.wav has changed
Binary file Rhythm stimuli audio/ca.wav has changed
Binary file Rhythm stimuli audio/cb.wav has changed
Binary file Rhythm stimuli audio/cbcb.wav has changed
Binary file Rhythm stimuli audio/cc.wav has changed
Binary file Rhythm stimuli audio/cd.wav has changed
Binary file Rhythm stimuli audio/cdcd.wav has changed
Binary file Rhythm stimuli audio/cf.wav has changed
Binary file Rhythm stimuli audio/cg.wav has changed
Binary file Rhythm stimuli audio/ch.wav has changed
Binary file Rhythm stimuli audio/cj.wav has changed
Binary file Rhythm stimuli audio/ck.wav has changed
Binary file Rhythm stimuli audio/cl.wav has changed
Binary file Rhythm stimuli audio/da.wav has changed
Binary file Rhythm stimuli audio/dada.wav has changed
Binary file Rhythm stimuli audio/db.wav has changed
Binary file Rhythm stimuli audio/dbdb.wav has changed
Binary file Rhythm stimuli audio/dc.wav has changed
Binary file Rhythm stimuli audio/dcdc.wav has changed
Binary file Rhythm stimuli audio/dd.wav has changed
Binary file Rhythm stimuli audio/dddd.wav has changed
Binary file Rhythm stimuli audio/df.wav has changed
Binary file Rhythm stimuli audio/dg.wav has changed
Binary file Rhythm stimuli audio/dh.wav has changed
Binary file Rhythm stimuli audio/dj.wav has changed
Binary file Rhythm stimuli audio/dk.wav has changed
Binary file Rhythm stimuli audio/dl.wav has changed
Binary file Rhythm stimuli audio/fa.wav has changed
Binary file Rhythm stimuli audio/fb.wav has changed
Binary file Rhythm stimuli audio/fc.wav has changed
Binary file Rhythm stimuli audio/fd.wav has changed
Binary file Rhythm stimuli audio/ff.wav has changed
Binary file Rhythm stimuli audio/fg.wav has changed
Binary file Rhythm stimuli audio/fh.wav has changed
Binary file Rhythm stimuli audio/fj.wav has changed
Binary file Rhythm stimuli audio/fk.wav has changed
Binary file Rhythm stimuli audio/fl.wav has changed
Binary file Rhythm stimuli audio/ga.wav has changed
Binary file Rhythm stimuli audio/gb.wav has changed
Binary file Rhythm stimuli audio/gc.wav has changed
Binary file Rhythm stimuli audio/gd.wav has changed
Binary file Rhythm stimuli audio/gf.wav has changed
Binary file Rhythm stimuli audio/gg.wav has changed
Binary file Rhythm stimuli audio/gh.wav has changed
Binary file Rhythm stimuli audio/gj.wav has changed
Binary file Rhythm stimuli audio/gk.wav has changed
Binary file Rhythm stimuli audio/gl.wav has changed
Binary file Rhythm stimuli audio/ha.wav has changed
Binary file Rhythm stimuli audio/hb.wav has changed
Binary file Rhythm stimuli audio/hc.wav has changed
Binary file Rhythm stimuli audio/hd.wav has changed
Binary file Rhythm stimuli audio/hf.wav has changed
Binary file Rhythm stimuli audio/hg.wav has changed
Binary file Rhythm stimuli audio/hh.wav has changed
Binary file Rhythm stimuli audio/hj.wav has changed
Binary file Rhythm stimuli audio/hk.wav has changed
Binary file Rhythm stimuli audio/hl.wav has changed
Binary file Rhythm stimuli audio/ja.wav has changed
Binary file Rhythm stimuli audio/jb.wav has changed
Binary file Rhythm stimuli audio/jc.wav has changed
Binary file Rhythm stimuli audio/jd.wav has changed
Binary file Rhythm stimuli audio/jf.wav has changed
Binary file Rhythm stimuli audio/jg.wav has changed
Binary file Rhythm stimuli audio/jh.wav has changed
Binary file Rhythm stimuli audio/jj.wav has changed
Binary file Rhythm stimuli audio/jk.wav has changed
Binary file Rhythm stimuli audio/jl.wav has changed
Binary file Rhythm stimuli audio/ka.wav has changed
Binary file Rhythm stimuli audio/kb.wav has changed
Binary file Rhythm stimuli audio/kc.wav has changed
Binary file Rhythm stimuli audio/kd.wav has changed
Binary file Rhythm stimuli audio/kf.wav has changed
Binary file Rhythm stimuli audio/kg.wav has changed
Binary file Rhythm stimuli audio/kh.wav has changed
Binary file Rhythm stimuli audio/kj.wav has changed
Binary file Rhythm stimuli audio/kk.wav has changed
Binary file Rhythm stimuli audio/kl.wav has changed
Binary file Rhythm stimuli audio/la.wav has changed
Binary file Rhythm stimuli audio/lb.wav has changed
Binary file Rhythm stimuli audio/lc.wav has changed
Binary file Rhythm stimuli audio/ld.wav has changed
Binary file Rhythm stimuli audio/lf.wav has changed
Binary file Rhythm stimuli audio/lg.wav has changed
Binary file Rhythm stimuli audio/lh.wav has changed
Binary file Rhythm stimuli audio/lj.wav has changed
Binary file Rhythm stimuli audio/lk.wav has changed
Binary file Rhythm stimuli audio/ll.wav has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Syncopation models/Keith.py	Fri Mar 21 15:49:46 2014 +0000
@@ -0,0 +1,110 @@
+'''
+Author: Chunyang Song
+Institution: Centre for Digital Music, Queen Mary University of London
+
+** Keith Model **
+
+Algorithm:
+
+Only applicable to binary meter (the number of beats is a power of 2).
+
+Calculate the duration (IOI) of each note, d;
+Round the d down to the nearest power of 2, D;
+Check if the start and the end of note are on-beat (whether divisible by D);
+If both on-beat, measure = 0;
+If start on-beat but end off-beat, measure = 1;
+If start off-beat but end on-beat, measure = 2;
+If start and end off-beat, measure = 3;
+Syncopation is the sum of measures of all notes.
+
+'''
+
+from MeterStructure import MeterStructure
+
+def roundDownPower2(input):
+	lower = 0
+	if input >=0:
+		i = 0
+		lower = pow(2,i)
+
+		while True:
+			upper = pow(2,i+1)
+			if lower <= input < upper:
+				break
+			else:
+				lower = upper
+				i = i+1
+	else:
+		print 'Invalid input: input is negative'
+	return lower
+	
+def keith(rhythm, time_sig, category, bar):
+	ms = MeterStructure(time_sig)
+	circle = ms.getCircle(bar)
+	l = len(circle)
+	# mTemplate represents all the metrical positions for bar number of bars and the downbeat position of the following bar. 
+	#For example, the mTemplate for one bar in 4/4 rhythm with lowest level 16th note, mTemplate = [0:16]
+	mTemplate = range(l+1)
+	
+	if len(mTemplate)!=0:
+
+		onsetPos = []
+		measures = []
+		
+		'''
+		Note that mTemplate is encoded by 8*bar+1- or 16*bar+1-long digits, rhythm is encoded by 48*bar-long digits,
+		therefore we need to normalize the IOI of onsets to the mTemplate scale, by (pos/len(rhythm))*len(mTemplate)
+		'''
+
+		# Locate all the onset, store the position of each note into onsetPos
+		l = len(rhythm) 
+		for i in range(l):	
+			if rhythm[i] == 1:    # onset detected
+				onsetPos.append(i)
+			
+		#Calculate the duration of each onset and round it down to nearest power of 2, store into D
+		# Then check if the start and end of each onset is on-beat, calculate measures
+		n = len(onsetPos)
+		for i in range(n):
+			start = (onsetPos[i]/ float(l) )* (len(mTemplate)-1)
+			if i == n-1: 
+				end = mTemplate[-1]	# The duration of the last note is the its distance to the first beat in next bar
+			else:
+				end = (onsetPos[i+1]/ float (l) ) * (len(mTemplate)-1)	# the duration of note is its distance to the next note
+
+			d = end - start
+			D = roundDownPower2(d)
+			if start % D ==0 and end % D ==0:
+				measures.append(0)
+			elif start % D ==0 and end % D != 0:
+				measures.append(1)
+			elif start % D != 0 and end % D == 0:
+				measures.append(2)
+			else:
+				measures.append(3)
+
+		syncopation = sum(measures)
+		return syncopation
+	
+	else:
+		return -1
+
+
+# Retrieve the stimuli
+f = file('stimuli.txt')
+
+#Calculate syncopation for each rhythm pattern
+while True:
+	line = f.readline().split(';')
+	if len(line) == 1:
+		 break
+	else:
+		sti_name = line[0]
+		rhythmString = line[1].split()
+		time_sig = line[2]
+		category = line[3]
+		bar = int(line[4])
+		
+		rhythm = map(int,rhythmString[0].split(','))
+
+		print sti_name, keith(rhythm, time_sig, category, bar)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Syncopation models/LHL.py	Fri Mar 21 15:49:46 2014 +0000
@@ -0,0 +1,218 @@
+'''
+Author: Chunyang Song
+Institution: Centre for Digital Music, Queen Mary University of London
+
+** Longuet-Higgins and Lee's Model (LHL) **
+
+Algorithm:
+
+Only applicable to simple rhtyhms.
+
+Generate tree structure:
+1) Time_signature decides sequence of subdivisions: 4/4 - [2,2,2,...2], 3/4 - [3,2,2,...2], 6/8 - [2,3,2,2...2]; 
+2) If after subdivision, a node has at least one branch that is full rest or one note, then it cannot be subdivided;
+3) Weight of node, initialized as 0, decrease by 1 with increasing depth of the tree.
+
+Assign each node in the tree three attributes - weight, pos, event;
+Search for Note-Rest pairs that Note's weight is no more than Rest's weight;
+Syncopation for such a pair is the difference in weights; 
+Total Syncopation value for non-syncopation rhythms is -1; for syncopated rhythms is the sum of syncopation of all notes.
+
+In order to evaluate LHL models with the others, re-scale LHL's measures to non-negative.
+Apart from the immeasuable rhythms, add 1 to each syncopation value. 
+
+'''
+from MeterStructure import MeterStructure
+
+class Node:
+	def __init__(self, pos, event):
+		self.pos = pos
+		self.event = event
+
+	def assignWeight(self, time_sig):
+		ms = MeterStructure(time_sig)
+		# Retrieve the LHL meter hierarchy in one bar;
+		#(e.g. weight = [0, -4, -3, -4, -2, -4, -3, -4, -1, -4, -3, -4, -2, -4, -3, -4] in 4/4 meter)
+		weights = ms.getLHLWeights(1)	
+		
+		# find the metrical weight of the note that locates at certain position(self.pos)
+		# index is the corresponding position of "self.pos" in the "weights" list
+		index = int(((abs(self.pos)%48)/48.0)*len(weights))		
+		self.weight = weights[index]
+
+class Tree:
+	def __init__(self):
+		self.nodes = []
+
+	def add(self, Node):
+		self.nodes.append (Node)
+
+	def getWeight(self, time_sig):
+		for n in self.nodes:
+			n.assignWeight(time_sig)
+
+	def display(self):
+		print 'Pos, Event, Weight'
+		for n in self.nodes:
+			print '%02d    %s      %02d' % (n.pos, n.event, n.weight)
+
+
+def subdivide(sequence, segments_num):
+	subSeq = []
+	if len(sequence) % segments_num != 0:
+		print 'Error: rhythm segment cannot be equally subdivided.'
+	else:
+		n = len(sequence) / segments_num
+		start , end = 0, n
+		for i in range(segments_num):
+			subSeq.append(sequence[start : end])
+			start = end
+			end = end + n
+	
+	return subSeq
+
+
+def eventType (sequence):
+	if not(1 in sequence):	
+		event = 'R'  # Full rest
+	elif sequence[0] == 1 and not(1 in sequence[1:]): 
+		event = 'N'  # Only one on-beat note
+	else:
+		event = 'D'  # Divisable
+
+	return event
+
+def splitInto2 (sequence, tree, pos, isRecursive):
+	
+	subs = subdivide(sequence, 2)
+	
+	for s in subs:
+		if eventType(s) == 'R' or eventType(s) == 'N':
+			#print 'test', s, eventType(s), pos
+			tree.add( Node(pos, eventType(s)) )
+		else:
+			if isRecursive:
+				#print 'test', s, eventType(s), pos
+				splitInto2 (s, tree, pos, True)
+			else:
+				splitInto3 (s, tree, pos)
+
+		pos = pos + len(sequence) / 2
+	
+	return tree
+
+def splitInto3 (sequence, tree, pos):
+
+	subs = subdivide(sequence, 3)
+
+	for s in subs:
+		if eventType(s) == 'R' or eventType(s) == 'N':
+			#print 'test', s, eventType(s), pos
+			tree.add( Node(pos, eventType(s)) )
+	
+		else:
+			splitInto2 (s, tree, pos, True)			
+		
+		pos = pos + len(sequence) / 3
+
+	return tree
+
+
+def createTree(rhythm, time_sig, bar):
+	t = Tree()
+	# The root is the rhtyhm in a entire bar, has weight 0, at position 0
+	weight, pos, event = 0 , 0, eventType(rhythm)
+	root = Node (pos, event)
+	if '2/4' in time_sig:
+		t.add ( Node(-24, 'N') )  # Treat the last metronome beat in the previous bar as a sounded note
+	
+		if event == 'D':
+			t = splitInto2(rhythm, t, pos, True)
+		else:
+			t.add (root)
+
+	elif '4/4' in time_sig:
+		t.add ( Node(-12, 'N') )  # Treat the last metronome beat in the previous bar as a sounded note
+	
+		if event == 'D':
+			t = splitInto2(rhythm, t, pos, True)
+		else:
+			t.add (root)
+
+	elif '3/4' in time_sig:
+		t.add ( Node(-8, 'N') )  # Treat the last metronome beat in the previous bar as a sounded note
+
+		segments = subdivide (rhythm, bar)
+
+		for s in segments:
+			if eventType(s) == 'D':
+				t = splitInto3(s, t, pos)
+			pos = pos + len(rhythm)/bar
+
+
+	elif '6/8' in time_sig:
+		t.add ( Node(-8, 'N') )  # Treat the last metronome beat in the previous bar as a sounded note
+		
+		segments = subdivide (rhythm, bar)
+
+		for s in segments:
+			if eventType(s) == 'D': 
+				t = splitInto2(s, t, pos, False)
+			pos = pos + len(rhythm)/bar
+
+	else:
+		print 'This time signature is not defined. Choose between 4/4, 3/4 or 6/8'
+
+	return t
+
+
+def lhl(rhythm, time_sig, category, bar):
+	measures = []
+
+	if 'poly' in category:
+		return -1
+	else:
+		tree = createTree(rhythm, time_sig, bar)	
+		tree.getWeight(time_sig)
+		#tree.display()
+
+		# find NR-pair that N's weight <= R's weight, add difference in weight to measures[] 
+		N_weight = tree.nodes[0].weight
+		size = len(tree.nodes)
+
+		for i in range(1, size):
+		
+			if tree.nodes[i].event == 'N':
+				N_weight = tree.nodes[i].weight
+
+			if tree.nodes[i].event == 'R' and tree.nodes[i].weight >= N_weight:
+				measures.append(tree.nodes[i].weight - N_weight )
+
+		# Calculate syncopation
+		if len(measures) == 0: # syncopation of non-syncopated rhythm is -1
+			syncopation = -1
+		else:
+			syncopation = sum(measures)  # syncopation of syncopated rhythm is the sum of measures[]
+		
+		return syncopation + 1 # For evaluation purpose, scale up by 1 to make scores above 0 
+
+
+# Retrieve the stimuli
+#f = file('stimuli.txt')
+f = file('stimuli_34only.txt')
+
+#Calculate syncopation for each rhythm pattern
+while True:
+	line = f.readline().split(';')
+	if len(line) == 1:
+		 break
+	else:
+		sti_name = line[0]
+		rhythmString = line[1].split()
+		time_sig = line[2]
+		category = line[3]
+		bar = int(line[4])
+		
+		rhythm = map(int,rhythmString[0].split(','))
+
+		print sti_name, lhl(rhythm, time_sig, category, bar)
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Syncopation models/MeterStructure.py	Fri Mar 21 15:49:46 2014 +0000
@@ -0,0 +1,82 @@
+'''
+Author: Chunyang Song
+Institution: Centre for Digital Music, Queen Mary University of London
+
+** Meter Structure **
+
+This class defines metrical hierarchy for a few common-used time-signature, including 2/4, 4/4, 3/4, 6/8.
+All methods return results to represent corresponding information for defined number of bars.
+The getLJWeights() adopts Lerdahl and Jackendoff metrical hierarchy. The lowest level is the 16th-note level, whose weight is 1. The highest level is bar level. 
+The getLHLWeights() adopts Louguet-Higgins and Lee metrical hierarchy, which is basically the same as L&J but in negative scale. The highest level is weighted as 0.
+The getStrongBeat() is to select the locations of the beats. For example, in 4/4, "strong" beats are all quarter-notes.
+
+**** To be added in: getPKWeights()
+
+'''
+class MeterStructure:
+
+	def __init__(self,time_sig): # meter hierarchy for 1 bar
+		self.ts = time_sig
+	
+	def getLJWeights(self,bar):	
+		self.lj = []
+		if '2/4' in self.ts:
+			self.lj = [4,1,2,1,3,1,2,1]*bar
+		elif '4/4' in self.ts:
+			self.lj = [5,1,2,1,3,1,2,1,4,1,2,1,3,1,2,1]*bar
+		elif '3/4' in self.ts:
+			self.lj = [4,1,2,1,3,1,2,1,3,1,2,1]*bar
+		elif '6/8' in self.ts:
+			self.lj = [4,1,2,1,2,1,3,1,2,1,2,1]*bar
+		else:
+			print 'The range of time-signature is limited within {2/4, 4/4, 3/4, 6/8}'
+		return self.lj
+
+	def getLHLWeights(self,bar):
+		self.lhl = []
+		# lhl weights are the same numbers moved from the 
+		lj = self.getLJWeights(bar)
+		if len(lj) !=0:
+			downbeat = max(lj)
+			for i in lj:
+				self.lhl.append(i-downbeat)
+		else:
+			print 'The range of time-signature is limited within {2/4, 4/4, 3/4, 6/8}'
+		return self.lhl
+
+	def getPKWeights(self,bar):
+		self.pk = []
+		'''
+			...
+		'''
+		return self.pk
+
+	def getBeats(self,bar):     
+		self.Beats = []		
+		if '2/4' in self.ts:            # Strong beats in one bar in 2/4 are every quarter-note [0,24]
+			for i in range(2*bar):
+				self.Beats.append(i*24)
+		elif '4/4' in self.ts:          # Strong beats in one bar 4/4 are every quarter-note [0,12,24,36]
+			for i in range(4*bar):
+				self.Beats.append(i*12)
+		elif '3/4'in self.ts:			# Strong beats in one bar in 3/4 are every quarter-note [0,16,32]
+			for i in range(3*bar):
+				self.Beats.append(i*16)
+		elif '6/8' in self.ts:			# Strong beats in one bar in 6/8 are every three eighth-note [0,24]
+			for i in range(2*bar):
+				self.Beats.append(i*24)
+		else:
+			print 'The range of time-signature is limited within {2/4, 4/4, 3/4, 6/8}'
+		return self.Beats
+
+	def getCircle(self,bar):
+		self.circle = []
+		if '2/4' in self.ts:
+			self.circle = range(8)*bar             # 2/4 meter can be represented by 8-unit-circle (in one bar)
+		elif '4/4' in self.ts:
+			self.circle = range(16)*bar            # 4/4 meter can be represented by 16-unit-circle (in one bar)
+		elif '3/4' or '6/8' in self.ts:
+			self.circle = range(12)*bar            # 3/4 or 6/8 meter can be represented by 12-unit-circle (in one bar)
+		else:
+			print 'The range of time-signature is limited within {2/4, 4/4, 3/4, 6/8}'
+		return self.circle
Binary file Syncopation models/MeterStructure.pyc has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Syncopation models/PRS.py	Fri Mar 21 15:49:46 2014 +0000
@@ -0,0 +1,316 @@
+'''
+Author: Chunyang Song
+Institution: Centre for Digital Music, Queen Mary University of London
+
+** Pressing's model **
+
+Algorithm:
+
+Only applicable to simple rhtyhms.
+
+Generate hierarchical metrical structure for rhythms, they way as same as LHL model;
+
+
+'''
+
+def subdivide(sequence, segments_num):
+	subSeq = []
+	if len(sequence) % segments_num != 0:
+		print 'Error: rhythm segment cannot be equally subdivided '
+	else:
+		n = len(sequence) / segments_num
+		start , end = 0, n
+		for i in range(segments_num):
+			subSeq.append(sequence[start : end])
+			start = end
+			end = end + n
+	
+	return subSeq
+
+# To check whether there is a need to continue subdividing and measuring
+def checkContinue(sequence, division):
+	isContinue = False
+	if len(sequence) % division == 0:
+		subs = subdivide (sequence, division)
+		
+		for s in subs:
+			if 1 in s[1:]:	# If there are still onsets in-between the divisions
+				isContinue = True
+	else:
+		print 'Error: the sequence cannot be equally subdivided!'
+	return isContinue
+
+def timeSpanTranscribe(sequence):
+	l = len(sequence)
+	transcribe = []
+
+	if not (1 in sequence):  # Full rest
+		transcribe = [0]
+	else:
+		divisor = 1
+		while True:
+			if l%divisor != 0:
+				divisor = divisor + 1
+			else:
+				sampleStep = l/divisor # how many digits in each segment, divisor also represents the number of segments
+				template = (([1] + [0]*(sampleStep-1) ) * divisor )
+
+				sampled = []
+				for i in range(l):
+					sampled.append(sequence[i] and template[i])
+
+				if sequence == sampled:
+					break
+				else:
+					divisor = divisor + 1
+
+		subs = subdivide(sequence, divisor)
+		for s in subs:
+			transcribe.append(s[0])
+
+	return transcribe
+
+# Identify the type of rhythm sequence : 0- null; 1-filled; 2-run; 3-upbeat; 5-syncopated
+def syncType (sequence, followed_event):
+	
+	# Null is full rest or only one single on-beat note, therefore no 0 in sequence[1:]
+	if not(1 in sequence[1:]) : 
+		syncType = 0 
+
+	else:
+		ts = timeSpanTranscribe(sequence)
+
+		# Filled is equally spaced onsets, therefore all 1s in the time span transcribe of the sequence
+		if not(0 in ts ):
+			syncType = 1  
+		# Run is either starting with 1 and end with 0 in time span, or starting with 1 if next bar starts with 0
+		elif ts[0] == 1 and ts[-1] == 0:
+			syncType = 2		
+		elif followed_event ==0 and ts[0] == 1:
+			syncType = 2
+		# Upbeat requires next bars starting with 1 and at least the last event in time span is 1
+		elif followed_event == 1 and ts[-1] == 1: 
+			syncType = 3
+		# Syncopated start and end off-beat		
+		elif sequence[0] == 0:
+			syncType = 5
+		else:
+			print 'Error: un-recognizable syncopation type ', sequence
+			syncType = None
+
+	return syncType
+
+def createHierarchy(rhythm, time_sig, bar):
+	h = [] # A list of lists to record syncopation type(s) in each hierarchy level across bars
+	s_bar = subdivide (rhythm, bar)
+	
+	if '4/4' in time_sig:
+		 
+		for i in range(bar):
+			bar_level = s_bar[i]
+
+			if i == bar -1:
+				followed_event = s_bar[0][0]
+			else:
+				followed_event = s_bar[i+1][0]
+			
+			h. append ( [syncType(bar_level, followed_event)] )  # Indentify syncopation type at bar level 
+
+		if checkContinue(rhythm, 2*bar):
+
+			for i in range(bar):
+				s_halfBar = subdivide (s_bar[i], 2)
+				halfBar_h = []
+
+				for j in range(2):
+					halfBar_level = s_halfBar[j]
+
+					if j == 1:
+						followed_event = s_halfBar[0][0]
+					else:
+						followed_event = s_halfBar[j+1][0]
+
+					halfBar_h.append (syncType (halfBar_level , followed_event))
+
+				h.append(halfBar_h)
+
+			if checkContinue(rhythm, 4*bar):
+			
+				for i in range(bar):
+					s_quarter = subdivide (s_bar[i], 4)
+					quarter_h = []
+
+					for j in range(4):			
+						quarter_level = s_quarter [j]
+
+						if j == 3:
+							followed_event = s_quarter[0][0]
+						else:
+							followed_event = s_quarter[j+1][0]
+
+						quarter_h. append ( syncType (quarter_level , followed_event) )	# quarter note level
+
+					h.append(quarter_h)
+
+				if checkContinue( rhythm, 8*bar):
+					
+					for i in range(bar):
+						s_eighth = subdivide (s_bar[i], 8)
+						eighth_h = []
+
+						for j in range(8):
+							eighth_level = s_eighth [j]
+
+							if j == 7:
+								followed_event = eighth_level[0][0]
+							else:
+								followed_event = eighth_level[j+1][0]
+
+							eighth_h.append (syncType (eighth_level, followed_event) )
+					
+						h.append(eighth_h)
+
+
+	elif '3/4' in time_sig:	
+		size_bar = len(s_bar)
+		for i in range(size_bar):
+			bar_level = s_bar[i]
+
+			quarter_h = []
+			eighth_h = []
+			
+			if i == size_bar -1:
+				followed_event = s_bar[0][0]
+			else:
+				followed_event = s_bar[i+1][0]
+			
+			h. append ( [syncType(bar_level, followed_event)] )  # Indentify syncopation type at bar level 
+
+			if checkContinue(bar_level, 3):
+				s_quarter = subdivide (bar_level, 3)
+				size_quarter = len(s_quarter)
+				
+				for j in range(size_quarter):
+					quarter_level = s_quarter [j]
+
+					if j == size_quarter -1:
+						followed_event = s_quarter[0][0]
+					else:
+						followed_event = s_quarter[j+1][0]
+
+					quarter_h. append ( syncType (quarter_level , followed_event) )	# quarter note level
+
+					if checkContinue( quarter_level, 2):
+						s_eighth = subdivide (quarter_level, 2)	# eighth note level
+						size_eighth = len(s_eighth)
+
+						for k in range(size_eighth):
+							eighth_level = s_eighth [k]
+
+							if k == size_eighth - 1:
+								followed_event = eighth_level[0][0]
+							else:
+								followed_event = eighth_level[k+1][0]
+
+							eighth_h.append (syncType (eighth_level, followed_event) )
+						h.append(eighth_h)
+
+				h.append(quarter_h)
+		
+
+	elif '6/8' in time_sig:		
+		for i in range(bar):
+			bar_level = s_bar[i]
+			
+			if i == bar -1:
+				followed_event = s_bar[0][0]
+			else:
+				followed_event = s_bar[i+1][0]
+			
+			h. append ( [syncType(bar_level, followed_event)] )  # Indentify syncopation type at bar level 
+			
+		if checkContinue(rhythm, 2*bar):
+			
+			for i in range(bar):
+				s_halfBar = subdivide (s_bar[i], 2)
+				halfBar_h = []
+
+				for j in range(2):
+					halfBar_level = s_halfBar [j]
+					
+					if j == 1:
+						followed_event = s_halfBar[0][0]
+					else:
+						followed_event = s_halfBar[j+1][0]
+
+					halfBar_h. append ( syncType (halfBar_level , followed_event) )	
+
+				h.append(halfBar_h)
+
+			if checkContinue( rhythm, 6*bar):
+				
+				for i in range(bar):	
+					s_eighth = subdivide (s_bar[i], 6)	# eighth note level
+					eighth_h = []
+					
+					for j in range(6):
+						eighth_level = s_eighth [j]
+
+						if j == 5:
+							followed_event = eighth_level[0][0]
+						else:
+							followed_event = eighth_level[j+1][0]
+
+						eighth_h.append (syncType (eighth_level, followed_event) )
+					
+					h.append(eighth_h)
+
+	else:
+		print 'This time signature is not defined. Choose between 4/4, 3/4 or 6/8'
+
+	return h
+
+
+def pressing(rhythm, time_sig, category, bar):
+	sync_oneLevel = []
+
+	if 'poly' in category:
+		return -1
+
+	else:
+		hierarchy = createHierarchy(rhythm, time_sig, bar)
+		# print 'h', hierarchy
+
+		if len(hierarchy) != 0:
+			for h in hierarchy:
+				sync_oneLevel.append (sum(h) / float(len(h)) )
+			
+			# Syncopation is the sum of averaged syncopation values of each level
+			syncopation = sum (sync_oneLevel)
+			
+		else:
+			syncopation = 0
+
+		return syncopation 
+
+
+# Retrieve the stimuli
+# f = file('stimuli.txt')
+f = file('stimuli_34only.txt')
+
+#Calculate syncopation for each rhythm pattern
+while True:
+	line = f.readline().split(';')
+	if len(line) == 1:
+		 break
+	else:
+		sti_name = line[0]
+		rhythmString = line[1].split()
+		time_sig = line[2]
+		category = line[3]
+		bar = int([4])
+		
+		rhythm = map(int,rhythmString[0].split(','))
+
+		print sti_name, pressing(rhythm, time_sig, category, bar)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Syncopation models/SG.py	Fri Mar 21 15:49:46 2014 +0000
@@ -0,0 +1,126 @@
+'''
+Author: Chunyang Song
+Institution: Centre for Digital Music, Queen Mary University of London
+
+** Sioros and Guedes's Model **
+
+Algorithm:
+
+Only applicable to monorhythms.
+
+This version of implementation follows the description in authors' 2011 ISMIR paper and assumes each bar of rhythm is looped.
+Therefore each bar is calculated seperatedly in a loop-mode and summed up in the end as the total syncopation. 
+
+'''
+
+from MeterStructure import MeterStructure
+from math import pow
+
+def subdivide(sequence, segments_num):
+	subSeq = []
+	if len(sequence) % segments_num != 0:
+		print 'Error: rhythm segment cannot be equally subdivided '
+	else:
+		n = len(sequence) / segments_num
+		start , end = 0, n
+		for i in range(segments_num):
+			subSeq.append(sequence[start : end])
+			start = end
+			end = end + n
+	
+	return subSeq
+
+
+def sgModel(rhythm, time_sig, category, bar):
+	ms = MeterStructure(time_sig)
+	mWeights = ms.getLHLWeights(1)
+	#print "hierarchy", mWeights
+	num_onsets = 0
+	h_min = min(mWeights)
+
+	syncAbsolute = 0
+	syncNormM = 0
+	syncNormE = 0
+	
+	if 'poly' in category:
+		syncAbsolute = -1
+	else:
+		# segment rhythm into bars
+		rhythm_byBar = subdivide (rhythm, bar)
+
+		def measurePerBar(rhythm):
+			syncopation = 0
+			
+			def aveNeighbours(index, h):
+				averages = []
+				parameter_k = 0.8
+				
+				def findPre(h_hat):
+					pre_index = index - 1
+					while(mWeights[pre_index] < h_hat):
+						pre_index = (pre_index - 1)%len(mWeights)
+					#print "h_hat and pre", h_hat, pre_index
+					return pre_index
+
+				def findPost(h_hat):
+					post_index = (index + 1)%len(mWeights)
+					while(mWeights[post_index] < h_hat):
+						post_index = (post_index + 1)%len(mWeights)
+					#print "h_hat and post", h_hat, post_index
+					return post_index
+				
+				def dif(index1,index2):
+					parameter_beta = 0.5
+					pos1 = int(float(index1)/len(mWeights)*48)
+					pos2 = int(float(index2)/len(mWeights)*48)
+					dif_v = rhythm[pos1]-rhythm[pos2]
+					dif_h = abs(mWeights[index1]-mWeights[index2])
+					dif = dif_v*(parameter_beta*dif_h/4+1-parameter_beta)
+					#print 'dif', dif
+					return dif
+
+				for h_hat in range(h_min,h+1):
+					ave = ( parameter_k*dif(index,findPre(h_hat))+dif(index,findPost(h_hat)) )/(1+parameter_k)
+					#print 'ave', ave
+					averages.append(ave)
+
+				return averages
+
+			for pos in range(len(rhythm)):
+				if rhythm[pos] != 0: # Onset detected
+					#num_onsets += 1
+					i = int((pos/48.0*len(mWeights)))
+					h = mWeights[i]
+					potential = 1 - pow(0.5,(-h))
+					#print "intermediate", min(aveNeighbours(i,h))
+					syncopation += min(aveNeighbours(i, h))*potential
+
+			return syncopation
+
+		for r in rhythm_byBar:
+			syncAbsolute = syncAbsolute + measurePerBar(r)
+		#syncAbsolute /= 2.0
+
+	return syncAbsolute
+
+# Retrieve the stimuli
+#f = file('stimuli.txt')
+#f = file('stimuli_34only.txt')
+f = file('clave.txt')
+
+
+#Calculate syncopation for each rhythm pattern
+#while True:
+for i in range(1):
+	line = f.readline().split(';')
+	if len(line) == 1:
+		break
+	else:
+		sti_name = line[0]
+		rhythmString = line[1].split()
+		time_sig = line[2]
+		category = line[3]
+		bar = int(line[4])
+		
+		rhythm = map(int,rhythmString[0].split(','))
+		print sti_name, sgModel(rhythm, time_sig, category, bar)
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Syncopation models/TMC.py	Fri Mar 21 15:49:46 2014 +0000
@@ -0,0 +1,72 @@
+'''
+Author: Chunyang Song
+Institution: Centre for Digital Music, Queen Mary University of London
+
+** Toussaint's Metric Complexity Model **
+
+Algorithm:
+
+Only applicable to monorhythms.
+
+Define metrical hierarchy by given time signature;
+Calculate how many onsets and determine Maximum Metricality Max_Metric;
+Calculate the Metrical Simplicity - the weights of all onsets;
+Syncopation = Max_Metric - Metric_simplicity.
+Output the predicted syncopation score; -1 indicates non-applicable
+
+'''
+
+from MeterStructure import MeterStructure
+
+def metricalModel(rhythm, time_sig, category, bar):
+	ms = MeterStructure(time_sig)
+	meter = ms.getLJWeights(bar)
+	if len(meter) !=0:
+		
+		metricalSimplicity = 0  # sum of weights of onsets per bar
+		maxMetrical = 0 	 # maximum metricity per bar
+		onsetCount = 0		 # The number of onsets per bar
+	
+		if 'poly' in category:  # not applicable to polyrhythms
+			return -1
+	
+		# Calculate metricalSimplicity
+		else:
+			l = len(rhythm)
+			for i in range(l):
+				if rhythm[i] == 1: # onset detected
+					pos = int((float(i)/l) *len(meter)) # looking for the metrical position where this note locates
+					metricalSimplicity = metricalSimplicity+meter[pos]
+					onsetCount = onsetCount+1
+		
+			# Calculate max metricity
+			meter.sort(reverse=True)
+			for i in range(0,onsetCount):
+				maxMetrical = maxMetrical+meter[i]
+			
+			#print 'test', onsetCount, maxMetrical, metricalSimplicity
+			syncopation = (maxMetrical - metricalSimplicity)
+	
+			return syncopation	
+	else:
+		return -1
+
+# Retrieve the stimuli
+f = file('stimuli.txt')
+#f = file('stimuli_34only.txt')
+
+#Calculate syncopation for each rhythm pattern
+while True:
+	line = f.readline().split(';')
+	if len(line) == 1:
+		 break
+	else:
+		sti_name = line[0]
+		rhythmString = line[1].split()
+		time_sig = line[2]
+		category = line[3]
+		bar = int(line[4])
+		
+		rhythm = map(int,rhythmString[0].split(','))
+
+		print sti_name, metricalModel(rhythm, time_sig, category, bar)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Syncopation models/TOB_ts.py	Fri Mar 21 15:49:46 2014 +0000
@@ -0,0 +1,136 @@
+'''
+Author: Chunyang Song
+Institution: Centre for Digital Music, Queen Mary University of London
+
+** Offbeat-ness Model - adopt time-span **
+
+Algorithm:
+
+Calculate the representation of timeSpan for each rhythm:
+1) Count both onset and metronome as events, and generate new binary digits (24-bit per bar) representing combined events;
+2) Among all divisors of 24 - [1,2,3,4,6,8,12,24], Find the minimum divisor N to divide a bar into (24/N) segments, 
+	so that all onsets are on the first digit of any segement; 
+	Take rhythm 100010001000100010000000 for example, divisor 6 gives 4-digit a segment (1000-1000-1000-1000-1000-0000), 
+	all onsets fall on the first digit of segment 1,2,3,4,5;
+3) Represent the rhythm sequence in timeSpan format (e.g. the rhythm above becomes 11112)
+4) Create N-unit metrical circle. 
+
+The rest is the same as the implemention version 1:
+Calculate on-beat positions in the metrical circle: positions can divide the circle equally with divisor(s), 1< divisor < N
+Define the onset not locating the on-beat positions the off-beat note;
+Syncopation is the total number of off-beat onsets.
+
+'''
+
+from MeterStructure import MeterStructure
+
+# To transcribe rhythm into time span representation and then calcualte the length of circle
+def timeSpan(rhythm, time_sig, bar):
+	ms = MeterStructure(time_sig)
+	beatPos = ms.getBeats(bar)
+	metronome = [0]*len(rhythm)
+	if len(beatPos) !=0:
+		for b in beatPos:
+			metronome[b] = 1
+
+	event = [] # To combine onsets and metronome events, 1 - event, 0 - no event
+	for i in range(len(rhythm)):
+		event.append(rhythm[i] or metronome[i]) # logic 'or' is to do combination: 1 or 0 = 1, 1 or 1 = 1, 0 or 0 = 0.
+
+	# To find out how many digits are big enough to represent the note with the shorted duration.
+	length = 0
+	divisors = [] # all the divisors of the length of the rhythm in one bar
+	l = len(rhythm)/bar
+	for i in range(1,l):
+		if l%i ==0:
+			divisors.append(i)
+
+	for d in divisors:
+		sampleStep = (len(rhythm)/bar)/d
+		template = (([1] + [0]*(sampleStep-1) )*d )*bar
+
+		sampled = []
+		for i in range(len(event)):
+			sampled.append(event[i] and template[i])
+
+		if event == sampled:
+			length = d
+			break
+
+	return length
+
+def metricalCircle(length):
+	circle = []
+	if length != 0:
+		circle = range(length)
+	else:
+		print 'Invalid length of metrical circle'
+	return circle
+
+def onBeatPos(circle):
+	l = len(circle)
+	divisors = []
+	for i in range(2,l):
+		if l%i ==0:
+			divisors.append(i)
+
+	onBeat = []
+	for d in divisors:
+		for pos in circle:
+			if pos%d == 0:
+				onBeat.append(pos)
+
+	return onBeat
+
+
+def offBeatNess(rhythm, time_sig, category, bar):
+	N = timeSpan(rhythm, time_sig, bar)
+
+	circle = metricalCircle(N) * bar
+
+	if len(circle)!=0:
+		
+		# Calculate on-beat positions within one bar
+		onBeat = onBeatPos(metricalCircle(N))
+		
+		onBeat.sort() # sort the on-beat positions. This list will have duplicate numbers, but it doesn't affect the following algorithm
+		
+		# Calculate how many onsets are off-beat, which represent syncopation
+		syncopation = 0
+		
+		l = len(rhythm) 
+		for i in range(l):
+			if rhythm[i] == 1: # onset detected
+				pos = (float(i)/l)*len(circle) # looking for the metrical position where this note locates
+				if pos >= len(circle)/2:
+					pos = pos- len(circle)/2
+
+				if pos in onBeat:
+					continue
+				else:             # if the onset is not on-beat, then syncopation increase by 1
+					syncopation = syncopation + 1 
+				
+		return syncopation	
+	else:
+		return -1
+
+
+# Retrieve the stimuli
+#f = file('stimuli.txt')
+f = file('stimuli_34only.txt')
+
+#Calculate syncopation for each rhythm pattern
+while True:
+	line = f.readline().split(';')
+	if len(line) == 1:
+		 break
+	else:
+		sti_name = line[0]
+		rhythmString = line[1].split()
+		time_sig = line[2]
+		category = line[3]
+		bar = int(line[4])
+		
+		rhythm = map(int,rhythmString[0].split(','))
+
+		print sti_name, offBeatNess(rhythm, time_sig, category, bar)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Syncopation models/TOB_v2.py	Fri Mar 21 15:49:46 2014 +0000
@@ -0,0 +1,81 @@
+'''
+Author: Chunyang Song
+Institution: Centre for Digital Music, Queen Mary University of London
+
+** Offbeat-ness Model - Version 2, not adopting time span **
+
+Algorithm:
+
+Fix the 4/4 rhythm to 16-unit circle, 6/8 or 3/4 rhythm to 12-unit circle.
+
+Calculate on-beat positions in the metrical circle: positions can divide the circle equally with divisor(s), 1< divisor < N
+Define the onset not locating the on-beat positions the off-beat note;
+Syncopation is the total number of off-beat onsets.
+
+'''
+
+from MeterStructure import MeterStructure
+
+def onBeatPos(circle):
+	l = len(circle)
+	divisors = []
+	for i in range(2,l):
+		if l%i ==0:
+			divisors.append(i)
+
+	onBeat = []
+	for d in divisors:
+		for pos in circle:
+			if pos%d == 0:
+				onBeat.append(pos)
+
+	return onBeat	
+
+def offBeatNess(rhythm, time_sig, category, bar):
+	ms = MeterStructure(time_sig)
+	circle = ms.getCircle(bar)
+
+	if len(circle)!=0:
+		# Calculate on-beat positions within one bar
+		onBeat = onBeatPos(ms.getCircle())
+		
+		onBeat.sort() # sort the on-beat positions. This list will have duplicate numbers, but it doesn't affect the following algorithm
+		
+		# Calculate how many onsets are off-beat, which represent syncopation
+		syncopation = 0
+		
+		l = len(rhythm) 
+		for i in range(l):
+			if rhythm[i] == 1: # onset detected
+				pos = (float(i)/l)*len(circle) # looking for the metrical position where this note locates
+				if pos >= len(circle)/2:
+					pos = pos- len(circle)/2
+				if pos in onBeat:
+					continue
+				else:
+					syncopation = syncopation + 1 
+				
+		return syncopation	
+	else:
+		return -1
+
+
+# Retrieve the stimuli
+#f = file('stimuli.txt')
+f = file('stimuli_34only.txt')
+
+#Calculate syncopation for each rhythm pattern
+while True:
+	line = f.readline().split(';')
+	if len(line) == 1:
+		 break
+	else:
+		sti_name = line[0]
+		rhythmString = line[1].split()
+		time_sig = line[2]
+		category = line[3]
+		bar = int(line[4])
+		
+		rhythm = map(int,rhythmString[0].split(','))
+
+		print sti_name, offBeatNess(rhythm, time_sig, category, bar)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Syncopation models/WNBD.py	Fri Mar 21 15:49:46 2014 +0000
@@ -0,0 +1,90 @@
+'''
+Author: Chunyang Song
+Institution: Centre for Digital Music, Queen Mary University of London
+
+** Weighted Note-to-Beat Distance Model (WNBD) **
+
+Algorithm:
+
+Calculate the distance (d) of onset to the nearest strong beat;
+Calculate the WNBD measure (w) of each onset;
+Syncopation is the sum of WNBD measures divided by the number of onsets.
+
+'''
+
+from MeterStructure import MeterStructure
+
+def WNBD(rhythm, time_sig, category, bar):
+
+	ms = MeterStructure(time_sig)
+	beat = ms.getBeats(bar) + [len(rhythm)] # the "beat" array include all "strong-beat" positions across all bars, and the downbeat position of the following bar 
+	if len(beat)!=0:
+		unit = beat[1]-beat[0]  # how many digits to represent the length of one beat
+
+		onsetPos = []		# The onset positions
+		d = []				# The distances of each onset to its nearest strong beat
+		beatToLeft = []		# The beat indexes of the beats that are to the left of or coincide with each onset
+		wnbdMeasures = []   # the un-normalized measures of wnbd
+		
+		# Calculate the distance of each onset to the nearest strong beat
+		l = len(rhythm) 
+		for i in range(l):
+			if rhythm[i] == 1:    # onset detected
+				onsetPos.append(i)
+				
+				# find its distance to the nearest strong beat
+				for j in range(len(beat)-1):
+					if beat[j]<= i < beat[j+1]:
+						d1 = abs(i-beat[j])
+						d2 = abs(i-beat[j+1])
+						d.append( min(d1,d2)/float(unit) ) # Normalize the distance to beat-level
+						beatToLeft.append(j)
+					else:
+						continue
+		
+		#Calculate the WNBD measure of each onset
+		n = len(onsetPos)
+		for i in range(n):
+			if d[i] ==0:	# If on-beat, measure is 0
+				wnbdMeasures.append(0)
+			else:
+				if i == n-1: # The last note, then 
+					if beatToLeft[i] == beat[-3]/unit:	# if the last note has more than 1- but less than 2-beat distance to the next bar
+						wnbdMeasures.append(2.0/d[i])	# measure is 2/d, else 1/d
+					else:
+						wnbdMeasures.append(1.0/d[i])	
+
+				else:        # if its not the last note
+					if beatToLeft[i+1] == beatToLeft[i] or (beatToLeft[i+1]-beatToLeft[i]==1 and d[i+1]==0): # if this note is no more than 1-beat distance away from the next note
+						wnbdMeasures.append(1.0/d[i])
+					elif beatToLeft[i+1] - beatToLeft[i] == 1 or (beatToLeft[i+1]-beatToLeft[i]==2 and d[i+1]==0):  # if this note is no more than 2-beat distance away from the next
+						wnbdMeasures.append(2.0/d[i])
+					else:								# if the note is more than 2-beat distance away from the next note
+						wnbdMeasures.append(1.0/d[i])
+
+		syncopation = sum(wnbdMeasures)/float(n)
+		return syncopation
+	
+	else:
+		return -1
+
+
+# Retrieve the stimuli
+f = file('stimuli.txt')
+#f = file('stimuli_34only.txt')
+
+#Calculate syncopation for each rhythm pattern
+while True:
+	line = f.readline().split(';')
+	if len(line) == 1:
+		 break
+	else:
+		sti_name = line[0]
+		rhythmString = line[1].split()
+		time_sig = line[2]
+		category = line[3]
+		bar = int(line[4])
+		
+		rhythm = map(int,rhythmString[0].split(','))
+
+		print sti_name, WNBD(rhythm, time_sig, category, bar)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Syncopation models/clave.txt	Fri Mar 21 15:49:46 2014 +0000
@@ -0,0 +1,1 @@
+son; 1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0; 4/4; mono; 2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Syncopation models/stimuli.txt	Fri Mar 21 15:49:46 2014 +0000
@@ -0,0 +1,111 @@
+ab; 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0; 4/4; mono; 2
+ac; 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 4/4; mono; 2
+ad; 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0; 4/4; mono; 2
+af; 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 4/4; poly; 2
+ag; 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 4/4; poly; 2
+ah; 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 4/4; poly; 2
+aj; 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 4/4; poly; 2
+ak; 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 4/4; poly; 2
+al; 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 4/4; poly; 2
+ba; 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 4/4; mono; 2
+bb; 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0; 4/4; mono; 2
+bc; 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 4/4; mono; 2
+bd; 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0; 4/4; mono; 2
+bf; 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 4/4; poly; 2
+bg; 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 4/4; poly; 2
+bh; 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 4/4; poly; 2
+bj; 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 4/4; poly; 2
+bk; 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 4/4; poly; 2
+bl; 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 4/4; poly; 2
+ca; 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 4/4; mono; 2
+cb; 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0; 4/4; mono; 2
+cc; 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 4/4; mono; 2
+cd; 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0; 4/4; mono; 2
+cf; 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 4/4; poly; 2
+cg; 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 4/4; poly; 2
+ch; 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 4/4; poly; 2
+cj; 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 4/4; poly; 2
+ck; 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 4/4; poly; 2
+cl; 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 4/4; poly; 2
+da; 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 4/4; mono; 2
+db; 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0; 4/4; mono; 2
+dc; 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 4/4; mono; 2
+dd; 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0; 4/4; mono; 2
+df; 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 4/4; poly; 2
+dg; 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 4/4; poly; 2
+dh; 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 4/4; poly; 2
+dj; 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 4/4; poly; 2
+dk; 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 4/4; poly; 2
+dl; 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 4/4; poly; 2
+fa; 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 4/4; poly; 2
+fb; 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0; 4/4; poly; 2
+fc; 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 4/4; poly; 2
+fd; 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0; 4/4; poly; 2
+ff; 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 6/8; mono; 2
+fg; 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 6/8; mono; 2
+fh; 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 6/8; mono; 2
+fj; 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 6/8; mono; 2
+fk; 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 6/8; mono; 2
+fl; 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 6/8; mono; 2
+ga; 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 4/4; poly; 2
+gb; 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0; 4/4; poly; 2
+gc; 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 4/4; poly; 2
+gd; 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0; 4/4; poly; 2
+gf; 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 6/8; mono; 2
+gg; 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 6/8; mono; 2
+gh; 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 6/8; mono; 2
+gj; 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 6/8; mono; 2
+gk; 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 6/8; mono; 2
+gl; 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 6/8; mono; 2
+ha; 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 4/4; poly; 2
+hb; 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0; 4/4; poly; 2
+hc; 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 4/4; poly; 2
+hd; 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0; 4/4; poly; 2
+hf; 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 6/8; mono; 2
+hg; 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 6/8; mono; 2
+hh; 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 6/8; mono; 2
+hj; 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 6/8; mono; 2
+hk; 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 6/8; mono; 2
+hl; 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 6/8; mono; 2
+ja; 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 4/4; poly; 2
+jb; 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0; 4/4; poly; 2
+jc; 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 4/4; poly; 2
+jd; 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0; 4/4; poly; 2
+jf; 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 6/8; mono; 2
+jg; 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 6/8; mono; 2
+jh; 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 6/8; mono; 2
+jj; 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 6/8; mono; 2
+jk; 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 6/8; mono; 2
+jl; 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 6/8; mono; 2
+ka; 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 4/4; poly; 2
+kb; 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0; 4/4; poly; 2
+kc; 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 4/4; poly; 2
+kd; 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0; 4/4; poly; 2
+kf; 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 6/8; mono; 2
+kg; 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 6/8; mono; 2
+kh; 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 6/8; mono; 2
+kj; 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 6/8; mono; 2
+kk; 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 6/8; mono; 2
+kl; 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 6/8; mono; 2
+la; 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 4/4; poly; 2
+lb; 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0; 4/4; poly; 2
+lc; 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 4/4; poly; 2
+ld; 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0; 4/4; poly; 2
+lf; 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 6/8; mono; 2
+lg; 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 6/8; mono; 2
+lh; 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 6/8; mono; 2
+lj; 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 6/8; mono; 2
+lk; 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 6/8; mono; 2
+ll; 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 6/8; mono; 2
+abab; 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0; 4/4; mono; 2
+adad; 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0; 4/4; mono; 2
+baba; 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 4/4; mono; 2
+bbbb; 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0; 4/4; mono; 2
+bcbc; 0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0; 4/4; mono; 2
+bdbd; 0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0; 4/4; mono; 2
+cbcb; 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0; 4/4; mono; 2
+cdcd; 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0; 4/4; mono; 2
+dada; 1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 4/4; mono; 2
+dbdb; 1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0; 4/4; mono; 2
+dcdc; 1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0; 4/4; mono; 2
+dddd; 1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0; 4/4; mono; 2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Syncopation models/stimuli_34only.txt	Fri Mar 21 15:49:46 2014 +0000
@@ -0,0 +1,36 @@
+ff; 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 3/4; mono; 2
+fg; 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 3/4; mono; 2
+fh; 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 3/4; mono; 2
+fj; 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 3/4; mono; 2
+fk; 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 3/4; mono; 2
+fl; 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 3/4; mono; 2
+gf; 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 3/4; mono; 2
+gg; 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 3/4; mono; 2
+gh; 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 3/4; mono; 2
+gj; 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 3/4; mono; 2
+gk; 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 3/4; mono; 2
+gl; 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 3/4; mono; 2
+hf; 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 3/4; mono; 2
+hg; 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 3/4; mono; 2
+hh; 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 3/4; mono; 2
+hj; 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 3/4; mono; 2
+hk; 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 3/4; mono; 2
+hl; 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 3/4; mono; 2
+jf; 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 3/4; mono; 2
+jg; 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 3/4; mono; 2
+jh; 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 3/4; mono; 2
+jj; 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 3/4; mono; 2
+jk; 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 3/4; mono; 2
+jl; 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 3/4; mono; 2
+kf; 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 3/4; mono; 2
+kg; 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 3/4; mono; 2
+kh; 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 3/4; mono; 2
+kj; 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 3/4; mono; 2
+kk; 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 3/4; mono; 2
+kl; 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 3/4; mono; 2
+lf; 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 3/4; mono; 2
+lg; 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 3/4; mono; 2
+lh; 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 3/4; mono; 2
+lj; 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 3/4; mono; 2
+lk; 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; 3/4; mono; 2
+ll; 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0; 3/4; mono; 2