Ejemplo n.º 1
0
// Match generates a penalty matrix for a.
// Perfect matches have penalty match.
// Gaps have penalty gap.
// Everything else has penalty mismatch.
// For example, Match(alphabet.DNA, 0, 1, -1) generates the original Needleman-Wunsch penalty matrix.
func Match(a alphabet.Alphabet, gap, match, mismatch int) [][]int {
	l := a.Len()
	arr := make([]int, l*l)
	g := a.IndexOf(a.Gap())
	for i := 0; i < l; i++ {
		for j := 0; j < l; j++ {
			score := mismatch
			switch {
			case i == g, j == g:
				score = gap
			case i == j:
				score = match
			}
			arr[i*l+j] = score
		}
	}
	x := make([][]int, l)
	for i := 0; i < l; i++ {
		x[i] = arr[i*l : (i+1)*l]
	}
	return x
}