def sonority_from_fts(self, seg):
        """Given a segment as features, returns the sonority on a scale of 1
           to 9.

        Args:
            seg (list): collection of (value, feature) pairs representing
                        a segment (vowel or consonant)

        Returns:
           int: sonority of `seg` between 1 and 9
        """

        def match(m):
            return self.fm.match(fts(m), seg)

        minusHi = BoolTree(match('-hi'), 9, 8)
        minusNas = BoolTree(match('-nas'), 6, 5)
        plusVoi1 = BoolTree(match('+voi'), 4, 3)
        plusVoi2 = BoolTree(match('+voi'), 2, 1)
        plusCont = BoolTree(match('+cont'), plusVoi1, plusVoi2)
        plusSon = BoolTree(match('+son'), minusNas, plusCont)
        minusCons = BoolTree(match('-cons'), 7, plusSon)
        plusSyl = BoolTree(match('+syl'), minusHi, minusCons)
        return plusSyl.get_value()
Given a segment as features, returns the sonority on a scale of 1
           to 9.

        Args:
            seg (list): collection of (value, feature) pairs representing
                        a segment (vowel or consonant)

        Returns:
           int: sonority of `seg` between 1 and 9