1 /* 2 * ref_aligner.cpp 3 */ 4 5 /** 6 * Maps an octet representing the XOR of two two-bit-per-base-encoded 7 * DNA sequences to the number of bases that mismatch between the two. 8 * 9 * Generated with this perl: 10 * 11 * print "const unsigned char u8toMms[] = {\n"; 12 * for(my $i = 0; $i < 256; $i++) { 13 * if(($i & 7) == 0) { 14 * print "\t"; 15 * } 16 * my $c = $i; 17 * my $mms = 0; 18 * for(my $j = 0; $j < 4; $j++) { 19 * if(($c & 3) != 0) { 20 * $mms++; 21 * } 22 * $c >>= 2; 23 * } 24 * print "$mms, "; 25 * if(($i & 7) == 7) { 26 * print "\n"; 27 * } 28 * } 29 * print "};\n"; 30 * 31 */ 32 unsigned char u8toMms[] = { 33 0, 1, 1, 1, 1, 2, 2, 2, 34 1, 2, 2, 2, 1, 2, 2, 2, 35 1, 2, 2, 2, 2, 3, 3, 3, 36 2, 3, 3, 3, 2, 3, 3, 3, 37 1, 2, 2, 2, 2, 3, 3, 3, 38 2, 3, 3, 3, 2, 3, 3, 3, 39 1, 2, 2, 2, 2, 3, 3, 3, 40 2, 3, 3, 3, 2, 3, 3, 3, 41 1, 2, 2, 2, 2, 3, 3, 3, 42 2, 3, 3, 3, 2, 3, 3, 3, 43 2, 3, 3, 3, 3, 4, 4, 4, 44 3, 4, 4, 4, 3, 4, 4, 4, 45 2, 3, 3, 3, 3, 4, 4, 4, 46 3, 4, 4, 4, 3, 4, 4, 4, 47 2, 3, 3, 3, 3, 4, 4, 4, 48 3, 4, 4, 4, 3, 4, 4, 4, 49 1, 2, 2, 2, 2, 3, 3, 3, 50 2, 3, 3, 3, 2, 3, 3, 3, 51 2, 3, 3, 3, 3, 4, 4, 4, 52 3, 4, 4, 4, 3, 4, 4, 4, 53 2, 3, 3, 3, 3, 4, 4, 4, 54 3, 4, 4, 4, 3, 4, 4, 4, 55 2, 3, 3, 3, 3, 4, 4, 4, 56 3, 4, 4, 4, 3, 4, 4, 4, 57 1, 2, 2, 2, 2, 3, 3, 3, 58 2, 3, 3, 3, 2, 3, 3, 3, 59 2, 3, 3, 3, 3, 4, 4, 4, 60 3, 4, 4, 4, 3, 4, 4, 4, 61 2, 3, 3, 3, 3, 4, 4, 4, 62 3, 4, 4, 4, 3, 4, 4, 4, 63 2, 3, 3, 3, 3, 4, 4, 4, 64 3, 4, 4, 4, 3, 4, 4, 4, 65 }; 66