mirror of
https://github.com/metabarcoding/obitools4.git
synced 2026-11-09 09:24:41 +00:00
Implement core clustering logic and scoring features
This update introduces the core clustering algorithm, including parallel execution, dynamic block sizing, and SIMD-accelerated scoring methods. It also adds robust sequence preparation, k-mer analysis, and comprehensive test data fixtures for validation.
This commit is contained in:
1 parent
75bb635a6c
commit
49225030ca
32 files changed
+3404
-119
No files matched your search
@@ -0,0 +1,28 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"os"
|
||||
|
||||
"git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obioptions"
|
||||
"git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obitools/obiclust"
|
||||
"git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obitools/obiconvert"
|
||||
"git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obiutils"
|
||||
)
|
||||
|
||||
func main() {
|
||||
optionParser := obioptions.GenerateOptionParser(
|
||||
"obiclust",
|
||||
"star clustering of sequences (the algorithm of sumaclust, UCLUST and CD-HIT)",
|
||||
obiclust.OptionSet)
|
||||
|
||||
_, args := optionParser(os.Args)
|
||||
|
||||
fs, err := obiconvert.CLIReadBioSequences(args...)
|
||||
obiconvert.OpenSequenceDataErrorMessage(args, err)
|
||||
|
||||
clustered := obiclust.CLIOBIClust(fs)
|
||||
|
||||
obiconvert.CLIWriteBioSequences(clustered, true)
|
||||
|
||||
obiutils.WaitForLastPipe()
|
||||
}
|
||||
Executable
+188
@@ -0,0 +1,188 @@
|
||||
#!/bin/bash
|
||||
|
||||
#
|
||||
# Here give the name of the test serie
|
||||
#
|
||||
|
||||
TEST_NAME=obiclust
|
||||
CMD=obiclust
|
||||
|
||||
######
|
||||
#
|
||||
# Some variable and function definitions: please don't change them
|
||||
#
|
||||
######
|
||||
TEST_DIR="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"
|
||||
OBITOOLS_DIR="${TEST_DIR/obitest*/}build"
|
||||
export PATH="${OBITOOLS_DIR}:${PATH}"
|
||||
|
||||
MCMD="$(echo "${CMD:0:4}" | tr '[:lower:]' '[:upper:]')$(echo "${CMD:4}" | tr '[:upper:]' '[:lower:]')"
|
||||
|
||||
TMPDIR="$(mktemp -d)"
|
||||
ntest=0
|
||||
success=0
|
||||
failed=0
|
||||
|
||||
cleanup() {
|
||||
echo "========================================" 1>&2
|
||||
echo "## Results of the $TEST_NAME tests:" 1>&2
|
||||
|
||||
echo 1>&2
|
||||
echo "- $ntest tests run" 1>&2
|
||||
echo "- $success successfully completed" 1>&2
|
||||
echo "- $failed failed tests" 1>&2
|
||||
echo 1>&2
|
||||
echo "Cleaning up the temporary directory..." 1>&2
|
||||
echo 1>&2
|
||||
echo "========================================" 1>&2
|
||||
|
||||
rm -rf "$TMPDIR" # Suppress the temporary directory
|
||||
|
||||
if [ $failed -gt 0 ]; then
|
||||
log "$TEST_NAME tests failed"
|
||||
log
|
||||
log
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log
|
||||
log
|
||||
|
||||
exit 0
|
||||
}
|
||||
|
||||
log() {
|
||||
echo -e "[$TEST_NAME @ $(date)] $*" 1>&2
|
||||
}
|
||||
|
||||
log "Testing $TEST_NAME..."
|
||||
log "Test directory is $TEST_DIR"
|
||||
log "obitools directory is $OBITOOLS_DIR"
|
||||
log "Temporary directory is $TMPDIR"
|
||||
log "files: $(find $TEST_DIR | awk -F'/' '{print $NF}' | tail -n +2)"
|
||||
|
||||
######################################################################
|
||||
####
|
||||
#### Below are the tests
|
||||
####
|
||||
#### Before each test :
|
||||
#### - increment the variable ntest
|
||||
####
|
||||
#### Run the command as the condition of an if / then /else
|
||||
#### - The command must return 0 on success
|
||||
#### - The command must return an exit code different from 0 on failure
|
||||
#### - The datafiles are stored in the same directory than the test script
|
||||
#### - The test script directory is stored in the TEST_DIR variable
|
||||
#### - If result files have to be produced they must be stored
|
||||
#### in the temporary directory (TMPDIR variable)
|
||||
####
|
||||
#### then clause is executed on success of the command
|
||||
#### - Write a success message using the log function
|
||||
#### - increment the variable success
|
||||
####
|
||||
#### else clause is executed on failure of the command
|
||||
#### - Write a failure message using the log function
|
||||
#### - increment the variable failed
|
||||
####
|
||||
######################################################################
|
||||
|
||||
|
||||
|
||||
((ntest++))
|
||||
if $CMD -h > "${TMPDIR}/help.txt" 2>&1
|
||||
then
|
||||
log "$MCMD: printing help OK"
|
||||
((success++))
|
||||
else
|
||||
log "$MCMD: printing help failed"
|
||||
((failed++))
|
||||
fi
|
||||
|
||||
|
||||
#
|
||||
# Dataset used by the following tests: two families with a rare variant each,
|
||||
# a duplicate, and a sequence with an ambiguous nucleotide that is discarded.
|
||||
#
|
||||
cat > "${TMPDIR}/data.fasta" <<DATA
|
||||
>a1 count=20;
|
||||
acgtacgtacgtaacctagcctagcctagggatcgatcgatcgatcgaatcg
|
||||
>a2 count=3;
|
||||
acgtacgtacgtaacctagcctagcctagggatcgatcgatcgttcgaatcg
|
||||
>a3 count=2;
|
||||
acgtacgtacgtaacctagcctagcctagggatcgatcgatcgatcgaatcg
|
||||
>b1 count=15;
|
||||
ttgcatgcatgctagctagctagcatgcatcgatcgatgctagctagtagct
|
||||
>b2 count=1;
|
||||
ttgcatgcatgctagctagctagcatgcatcgatcgatgctagctagtaact
|
||||
>x1 count=4;
|
||||
ttgcatgcatgctangctagctagcatgcatcgatcgatgctagctagtagc
|
||||
DATA
|
||||
|
||||
((ntest++))
|
||||
if $CMD --max-cpu 2 -O -t 0.95 "${TMPDIR}/data.fasta" > "${TMPDIR}/clusters.fasta" 2> "${TMPDIR}/clusters.log"
|
||||
then
|
||||
log "$MCMD: clustering runs OK"
|
||||
((success++))
|
||||
else
|
||||
log "$MCMD: clustering failed"
|
||||
((failed++))
|
||||
fi
|
||||
|
||||
((ntest++))
|
||||
if [ "$(grep -c '^>' "${TMPDIR}/clusters.fasta")" = "5" ]
|
||||
then
|
||||
log "$MCMD: the sequence with an ambiguous nucleotide is discarded OK"
|
||||
((success++))
|
||||
else
|
||||
log "$MCMD: wrong number of sequences in the output"
|
||||
((failed++))
|
||||
fi
|
||||
|
||||
((ntest++))
|
||||
if [ "$(grep '^>a[23] ' "${TMPDIR}/clusters.fasta" | grep -c 'cluster=a1;')" = "2" ] &&
|
||||
[ "$(grep '^>b2 ' "${TMPDIR}/clusters.fasta" | grep -c 'cluster=b1;')" = "1" ] &&
|
||||
grep '^>b1 ' "${TMPDIR}/clusters.fasta" | grep -q 'cluster_center=true;' &&
|
||||
grep '^>a1 ' "${TMPDIR}/clusters.fasta" | grep -q 'cluster_weight=25;'
|
||||
then
|
||||
log "$MCMD: sequences are attached to the right center OK"
|
||||
((success++))
|
||||
else
|
||||
log "$MCMD: sequences are not attached to the right center"
|
||||
((failed++))
|
||||
fi
|
||||
|
||||
((ntest++))
|
||||
if $CMD --max-cpu 2 -t 0.95 --otu-map "${TMPDIR}/otu.csv" --no-sequence-output "${TMPDIR}/data.fasta" > "${TMPDIR}/none.fasta" 2> /dev/null &&
|
||||
[ ! -s "${TMPDIR}/none.fasta" ] &&
|
||||
[ "$(head -n 1 "${TMPDIR}/otu.csv")" = "id,cluster,cluster_center,cluster_score,count" ] &&
|
||||
[ "$(sed -n 2,4p "${TMPDIR}/otu.csv" | cut -d, -f1,2 | tr '\n' ' ')" = "a1,a1 a3,a1 a2,a1 " ] &&
|
||||
[ "$(grep -c ',true,' "${TMPDIR}/otu.csv")" = "2" ]
|
||||
then
|
||||
log "$MCMD: CSV table of the clusters OK"
|
||||
((success++))
|
||||
else
|
||||
log "$MCMD: CSV table of the clusters failed"
|
||||
((failed++))
|
||||
fi
|
||||
|
||||
((ntest++))
|
||||
if $CMD --max-cpu 1 -O -t 0.95 "${TMPDIR}/data.fasta" 2> /dev/null | grep '^>' | sed 's/ .*//' > "${TMPDIR}/order1.txt" &&
|
||||
$CMD --max-cpu 8 -O -t 0.95 "${TMPDIR}/data.fasta" 2> /dev/null | grep '^>' | sed 's/ .*//' > "${TMPDIR}/order8.txt" &&
|
||||
cmp -s "${TMPDIR}/order1.txt" "${TMPDIR}/order8.txt"
|
||||
then
|
||||
log "$MCMD: the result does not depend on the number of threads OK"
|
||||
((success++))
|
||||
else
|
||||
log "$MCMD: the result depends on the number of threads"
|
||||
((failed++))
|
||||
fi
|
||||
|
||||
|
||||
#########################################
|
||||
#
|
||||
# At the end of the tests
|
||||
# the cleanup function is called
|
||||
#
|
||||
#########################################
|
||||
|
||||
cleanup
|
||||
+18
-8
@@ -40,7 +40,10 @@ const (
|
||||
type bandedLCSWorkspace struct {
|
||||
aRev, bCode []uint32 // encoded bases (aRev is reversed), SIMD kernel only
|
||||
rows [3][]uint32 // antidiagonal (SIMD) or row (scalar) buffers
|
||||
widened int // number of alignments that needed a second pass
|
||||
aRev16 []uint16 // 16-bit encoded bases of the score-only kernel
|
||||
bCode16 []uint16
|
||||
rows16 [3][]uint16
|
||||
widened int // number of alignments that needed a second pass
|
||||
}
|
||||
|
||||
var bandedLCSPool = sync.Pool{New: func() any { return new(bandedLCSWorkspace) }}
|
||||
@@ -146,13 +149,7 @@ func bandedLCS(a, b []byte, maxError int, ws *bandedLCSWorkspace, useSIMD bool)
|
||||
}
|
||||
run := func(g int) (int, int) {
|
||||
kmin, kmax := bandOffsets(lA, lB, g)
|
||||
var key uint32
|
||||
if simdOK {
|
||||
key = bandedLCSSIMD(lA, lB, kmin, kmax, ws)
|
||||
} else {
|
||||
key = bandedLCSScalar(a, b, kmin, kmax, ws)
|
||||
}
|
||||
return int(key >> 16), int(lcsLenBase - key&0xFFFF)
|
||||
return ws.align(a, b, kmin, kmax, simdOK)
|
||||
}
|
||||
|
||||
if maxError < 0 {
|
||||
@@ -173,3 +170,16 @@ func bandedLCS(a, b []byte, maxError int, ws *bandedLCSWorkspace, useSIMD bool)
|
||||
}
|
||||
return lcs, alilen
|
||||
}
|
||||
|
||||
// align runs the banded DP on the offsets [kmin, kmax] (kmin <= 0 <= kmax) and
|
||||
// returns the best (lcs, alilen) of the band. The bases must have been encoded
|
||||
// with encodeBases when simdOK is set.
|
||||
func (ws *bandedLCSWorkspace) align(a, b []byte, kmin, kmax int, simdOK bool) (int, int) {
|
||||
var key uint32
|
||||
if simdOK {
|
||||
key = bandedLCSSIMD(len(a), len(b), kmin, kmax, ws)
|
||||
} else {
|
||||
key = bandedLCSScalar(a, b, kmin, kmax, ws)
|
||||
}
|
||||
return int(key >> 16), int(lcsLenBase - key&0xFFFF)
|
||||
}
|
||||
@@ -11,3 +11,7 @@ func encodeBases(ws *bandedLCSWorkspace, a, b []byte) {}
|
||||
func bandedLCSSIMD(lA, lB, kmin, kmax int, ws *bandedLCSWorkspace) uint32 {
|
||||
return 0
|
||||
}
|
||||
|
||||
func lcsScoreSIMD(a, b []byte, kmin, kmax, minLCS int, ws *bandedLCSWorkspace) int {
|
||||
return -1
|
||||
}
|
||||
@@ -286,3 +286,75 @@ func TestFastLCSScoreWrapper(t *testing.T) {
|
||||
t.Errorf("got (%d,%d), want (-1,-1)", s, l)
|
||||
}
|
||||
}
|
||||
|
||||
// TestBandedLCSAtLeast checks the exactness of the bound expressed on the
|
||||
// score: the optimum when it reaches minLCS, (-1,-1) otherwise.
|
||||
func TestBandedLCSAtLeast(t *testing.T) {
|
||||
rng := rand.New(rand.NewSource(13))
|
||||
var buf BandedLCSBuffer
|
||||
for _, alpha := range testAlphabets {
|
||||
for it := 0; it < 1500; it++ {
|
||||
a := randomFrom(rng, alpha.letters, 1+rng.Intn(100))
|
||||
b := mutateFrom(rng, alpha.letters, a, rng.Float64()*0.5)
|
||||
if len(b) == 0 {
|
||||
continue
|
||||
}
|
||||
os, ol := fullDP(a, b)
|
||||
for _, minLCS := range []int{-3, 0, 1, os - 1, os, os + 1, len(b) / 2, len(b), len(b) + 1} {
|
||||
ws, wl := os, ol
|
||||
if os < minLCS {
|
||||
ws, wl = -1, -1
|
||||
}
|
||||
for _, got := range [][2]int{func() [2]int { s, l, _ := buf.AtLeast(a, b, minLCS); return [2]int{s, l} }(),
|
||||
func() [2]int { s, l, _ := BandedLCSAtLeast(b, a, minLCS); return [2]int{s, l} }()} {
|
||||
if got[0] != ws || got[1] != wl {
|
||||
t.Fatalf("%s minLCS=%d a=%q b=%q: got (%d,%d), want (%d,%d)",
|
||||
alpha.name, minLCS, a, b, got[0], got[1], ws, wl)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if _, _, err := buf.AtLeast(make([]byte, MaxBandedLCSLength+1), []byte("a"), 0); err != ErrSequenceTooLong {
|
||||
t.Errorf("too long: err = %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
// TestBandedLCSScoreAtLeast checks the score-only entry point, with sequences
|
||||
// long enough for the early stop of the kernel to be exercised.
|
||||
func TestBandedLCSScoreAtLeast(t *testing.T) {
|
||||
rng := rand.New(rand.NewSource(17))
|
||||
var buf BandedLCSBuffer
|
||||
check := func(name string, a, b []byte) {
|
||||
os, _ := fullDP(a, b)
|
||||
for _, minLCS := range []int{-1, 0, os - 3, os - 1, os, os + 1, os + 5, len(b) - 1, len(b), (len(b) * 9) / 10, len(b) + 1} {
|
||||
want := os
|
||||
if os < minLCS {
|
||||
want = -1
|
||||
}
|
||||
got, err := buf.ScoreAtLeast(a, b, minLCS)
|
||||
if err != nil || got != want {
|
||||
t.Fatalf("%s minLCS=%d a=%q b=%q: got %d (%v), want %d", name, minLCS, a, b, got, err, want)
|
||||
}
|
||||
}
|
||||
}
|
||||
for _, alpha := range testAlphabets {
|
||||
for it := 0; it < 800; it++ {
|
||||
a := randomFrom(rng, alpha.letters, 1+rng.Intn(60))
|
||||
b := mutateFrom(rng, alpha.letters, a, rng.Float64()*0.6)
|
||||
if len(b) > 0 {
|
||||
check(alpha.name, a, b)
|
||||
}
|
||||
}
|
||||
}
|
||||
for it := 0; it < 150; it++ {
|
||||
a := randomFrom(rng, "ACGT", 100+rng.Intn(400))
|
||||
b := mutateFrom(rng, "ACGT", a, rng.Float64()*0.3)
|
||||
if it%3 == 0 {
|
||||
b = randomFrom(rng, "ACGT", 50+rng.Intn(300))
|
||||
}
|
||||
if len(b) > 0 {
|
||||
check("long", a, b)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,102 @@
|
||||
package obialign
|
||||
|
||||
// BandedLCSBuffer is a working memory that can be reused from one alignment to
|
||||
// the next to avoid any allocation. It must not be shared between goroutines.
|
||||
type BandedLCSBuffer struct {
|
||||
ws bandedLCSWorkspace
|
||||
}
|
||||
|
||||
// AtLeast is BandedLCSAtLeast on the buffer.
|
||||
func (b *BandedLCSBuffer) AtLeast(seqA, seqB []byte, minLCS int) (lcs, alilen int, err error) {
|
||||
return atLeast(seqA, seqB, minLCS, &b.ws)
|
||||
}
|
||||
|
||||
func atLeast(seqA, seqB []byte, minLCS int, ws *bandedLCSWorkspace) (lcs, alilen int, err error) {
|
||||
if len(seqA) > MaxBandedLCSLength || len(seqB) > MaxBandedLCSLength {
|
||||
return -1, -1, ErrSequenceTooLong
|
||||
}
|
||||
if len(seqA) < len(seqB) {
|
||||
seqA, seqB = seqB, seqA
|
||||
}
|
||||
lcs, alilen = bandedLCSAtLeast(seqA, seqB, minLCS, ws, haveSIMD)
|
||||
return lcs, alilen, nil
|
||||
}
|
||||
|
||||
// BandedLCSAtLeast computes the LCS score of two nucleotide sequences and the
|
||||
// length of the shortest alignment achieving it, as BandedLCS does, but with
|
||||
// the bound expressed on the score: the result is the exact optimum when its
|
||||
// score is at least minLCS, and (-1, -1) otherwise.
|
||||
//
|
||||
// The DP only visits the diagonals an alignment of score minLCS can use (one
|
||||
// whose path makes at most lB-minLCS gaps on one side and lA-minLCS on the
|
||||
// other), so the cost decreases as minLCS grows. This is exact: every alignment
|
||||
// of score >= minLCS lies in that band, hence so does the optimum when it
|
||||
// reaches minLCS, and when the best path of the band is below minLCS so is
|
||||
// the global optimum.
|
||||
func BandedLCSAtLeast(seqA, seqB []byte, minLCS int) (lcs, alilen int, err error) {
|
||||
ws := bandedLCSPool.Get().(*bandedLCSWorkspace)
|
||||
lcs, alilen, err = atLeast(seqA, seqB, minLCS, ws)
|
||||
bandedLCSPool.Put(ws)
|
||||
return lcs, alilen, err
|
||||
}
|
||||
|
||||
// bandedLCSAtLeast expects len(a) >= len(b), both within MaxBandedLCSLength.
|
||||
func bandedLCSAtLeast(a, b []byte, minLCS int, ws *bandedLCSWorkspace, useSIMD bool) (int, int) {
|
||||
lA, lB := len(a), len(b)
|
||||
minLCS = max(minLCS, 0)
|
||||
if minLCS > lB {
|
||||
return -1, -1
|
||||
}
|
||||
if lB == 0 {
|
||||
return 0, lA
|
||||
}
|
||||
simdOK := useSIMD && allRegularIUPAC(a) && allRegularIUPAC(b)
|
||||
kmin, kmax := -(lB - minLCS), lA-minLCS
|
||||
|
||||
if !simdOK {
|
||||
lcs, alilen := ws.align(a, b, kmin, kmax, false)
|
||||
if lcs < minLCS {
|
||||
return -1, -1
|
||||
}
|
||||
return lcs, alilen
|
||||
}
|
||||
|
||||
// The score alone is much cheaper than the score with the length of the
|
||||
// alignment: the latter is only computed when the pair reaches minLCS.
|
||||
if lcsScoreSIMD(a, b, kmin, kmax, minLCS, ws) < minLCS {
|
||||
return -1, -1
|
||||
}
|
||||
encodeBases(ws, a, b)
|
||||
return ws.align(a, b, kmin, kmax, true)
|
||||
}
|
||||
|
||||
// ScoreAtLeast computes the LCS score of two nucleotide sequences when it is
|
||||
// at least minLCS, and returns -1 otherwise. It is much cheaper than AtLeast,
|
||||
// which also computes the length of the shortest alignment.
|
||||
func (b *BandedLCSBuffer) ScoreAtLeast(seqA, seqB []byte, minLCS int) (int, error) {
|
||||
if len(seqA) > MaxBandedLCSLength || len(seqB) > MaxBandedLCSLength {
|
||||
return -1, ErrSequenceTooLong
|
||||
}
|
||||
if len(seqA) < len(seqB) {
|
||||
seqA, seqB = seqB, seqA
|
||||
}
|
||||
lA, lB := len(seqA), len(seqB)
|
||||
minLCS = max(minLCS, 0)
|
||||
if minLCS > lB {
|
||||
return -1, nil
|
||||
}
|
||||
if lB == 0 {
|
||||
return 0, nil
|
||||
}
|
||||
kmin, kmax := -(lB - minLCS), lA-minLCS
|
||||
var lcs int
|
||||
if haveSIMD && allRegularIUPAC(seqA) && allRegularIUPAC(seqB) {
|
||||
lcs = lcsScoreSIMD(seqA, seqB, kmin, kmax, minLCS, &b.ws)
|
||||
} else {
|
||||
lcs, _ = b.ws.align(seqA, seqB, kmin, kmax, false)
|
||||
}
|
||||
if lcs < minLCS {
|
||||
return -1, nil
|
||||
}
|
||||
return lcs, nil
|
||||
}
|
||||
@@ -0,0 +1,156 @@
|
||||
//go:build goexperiment.simd
|
||||
|
||||
package obialign
|
||||
|
||||
import "simd"
|
||||
|
||||
func simdLanes16() int {
|
||||
var probe simd.Uint16s
|
||||
return probe.Len()
|
||||
}
|
||||
|
||||
func growUint16(s []uint16, n int) []uint16 {
|
||||
if cap(s) < n {
|
||||
return make([]uint16, n)
|
||||
}
|
||||
return s[:n]
|
||||
}
|
||||
|
||||
func encodeIUPAC16(dst []uint16, s []byte, rev bool) {
|
||||
n := len(s)
|
||||
clear(dst)
|
||||
if rev {
|
||||
for x, c := range s {
|
||||
dst[n-1-x] = uint16(iupacMask[c])
|
||||
}
|
||||
return
|
||||
}
|
||||
for x, c := range s {
|
||||
dst[x] = uint16(iupacMask[c])
|
||||
}
|
||||
}
|
||||
|
||||
// pruneEvery is the number of antidiagonals between two tests of the upper
|
||||
// bound that stops a hopeless alignment.
|
||||
const pruneEvery = 8
|
||||
|
||||
// lcsScoreSIMD runs the same banded DP as bandedLCSSIMD on the score only,
|
||||
// with 16-bit lanes (twice the cells per instruction):
|
||||
//
|
||||
// cell(i,j) = max(diag + match, up, left)
|
||||
//
|
||||
// A cell outside the band is 0, which never beats a real cell. The score of a
|
||||
// path ending at the cell (i, j) of an antidiagonal cannot exceed the score of
|
||||
// the cell plus min(lB-i, lA-j), the characters left to pair. Every path
|
||||
// crosses each antidiagonal inside the window, so when the best score of the
|
||||
// window plus the largest of these remainders is under minLCS the final score
|
||||
// is under minLCS: -1 is returned without computing the rest of the matrix.
|
||||
//
|
||||
// Requires lA >= lB >= 1, kmin <= 0 <= kmax, and bases with non-zero masks.
|
||||
// Returns the best score of the band, or -1 if it is proven to be under
|
||||
// minLCS.
|
||||
func lcsScoreSIMD(a, b []byte, kmin, kmax, minLCS int, ws *bandedLCSWorkspace) int {
|
||||
lA, lB := len(a), len(b)
|
||||
vl := simdLanes16()
|
||||
|
||||
ws.aRev16 = growUint16(ws.aRev16, lA+vl)
|
||||
ws.bCode16 = growUint16(ws.bCode16, lB+vl)
|
||||
encodeIUPAC16(ws.aRev16, a, true)
|
||||
encodeIUPAC16(ws.bCode16, b, false)
|
||||
aRev, bCode := ws.aRev16, ws.bCode16
|
||||
|
||||
size := lB + 2*vl + 2
|
||||
for r := range ws.rows16 {
|
||||
ws.rows16[r] = growUint16(ws.rows16[r], size)
|
||||
clear(ws.rows16[r])
|
||||
}
|
||||
p2, p1, cur := ws.rows16[0], ws.rows16[1], ws.rows16[2]
|
||||
|
||||
// the first row and the first column hold a score of 0: nothing to set
|
||||
|
||||
zero := simd.BroadcastUint16s(0)
|
||||
one := simd.BroadcastUint16s(1)
|
||||
|
||||
for t := 2; t <= lA+lB; t++ {
|
||||
lo := max(1, t-lA, (t-kmax+1)>>1)
|
||||
hi := min(lB, t-1, (t-kmin)>>1)
|
||||
|
||||
for i := lo; i <= hi; i += vl {
|
||||
ca := simd.LoadUint16s(aRev[lA-t+i:])
|
||||
cb := simd.LoadUint16s(bCode[i-1:])
|
||||
inc := one.Masked(ca.And(cb).NotEqual(zero))
|
||||
d := simd.LoadUint16s(p2[i-1:]).Add(inc)
|
||||
u := simd.LoadUint16s(p1[i-1:])
|
||||
l := simd.LoadUint16s(p1[i:])
|
||||
d.Max(u).Max(l).Store(cur[i:])
|
||||
}
|
||||
|
||||
zero.Store(cur[hi+1:])
|
||||
if lo > 1 {
|
||||
cur[lo-1] = 0
|
||||
}
|
||||
|
||||
// A diagonal move skips an antidiagonal, but a path always visits
|
||||
// one of two consecutive antidiagonals.
|
||||
if t%pruneEvery == 0 && minLCS > 0 &&
|
||||
scoreBound(p1, t-1, lA, lB, kmin, kmax) < minLCS &&
|
||||
scoreBound(cur, t, lA, lB, kmin, kmax) < minLCS {
|
||||
return -1
|
||||
}
|
||||
|
||||
p2, p1, cur = p1, cur, p2
|
||||
}
|
||||
return int(p1[lB])
|
||||
}
|
||||
|
||||
// iota16 is 0, 1, 2... to build the row index of the lanes.
|
||||
var iota16 = func() (t [64]uint16) {
|
||||
for i := range t {
|
||||
t[i] = uint16(i)
|
||||
}
|
||||
return t
|
||||
}()
|
||||
|
||||
// scoreBound is an upper bound of the final score of the paths going through
|
||||
// the antidiagonal t, whose scores are in row. A path through the cell (i, j)
|
||||
// scores at most the score of the cell plus min(lB-i, lA-j), the characters
|
||||
// left to pair, so the bound is the maximum of this sum on the cells of the
|
||||
// window. The sum is computed by vectors on the full chunks of the window.
|
||||
func scoreBound(row []uint16, t, lA, lB, kmin, kmax int) int {
|
||||
lo := max(1, t-lA, (t-kmax+1)>>1)
|
||||
hi := min(lB, t-1, (t-kmin)>>1)
|
||||
|
||||
bound := 0
|
||||
i := lo
|
||||
if hi-lo >= simdLanes16() {
|
||||
vl := simdLanes16()
|
||||
idx := simd.LoadUint16s(iota16[:]).Add(simd.BroadcastUint16s(uint16(lo)))
|
||||
step := simd.BroadcastUint16s(uint16(vl))
|
||||
remB := simd.BroadcastUint16s(uint16(lB))
|
||||
// lA-t+i is not negative on the window; the 16-bit arithmetic is modular
|
||||
offA := simd.BroadcastUint16s(uint16(lA - t))
|
||||
acc := simd.BroadcastUint16s(0)
|
||||
for ; i+vl-1 <= hi; i += vl {
|
||||
left := remB.Sub(idx).Min(idx.Add(offA))
|
||||
acc = acc.Max(simd.LoadUint16s(row[i:]).Add(left))
|
||||
idx = idx.Add(step)
|
||||
}
|
||||
var lanes [64]uint16
|
||||
acc.Store(lanes[:])
|
||||
for _, v := range lanes[:vl] {
|
||||
bound = max(bound, int(v))
|
||||
}
|
||||
}
|
||||
for ; i <= hi; i++ {
|
||||
bound = max(bound, int(row[i])+min(lB-i, lA-t+i))
|
||||
}
|
||||
|
||||
// the paths running along the first row or the first column have a score of 0
|
||||
if t <= lA && t <= kmax {
|
||||
bound = max(bound, min(lB, lA-t))
|
||||
}
|
||||
if t <= lB && -t >= kmin {
|
||||
bound = max(bound, min(lB-t, lA))
|
||||
}
|
||||
return bound
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
package obiclust
|
||||
|
||||
// A block stores the 4-mer tables of a few centers, transposed: the counter
|
||||
// of the word w for the lane j is data[w*width+j]. A vector instruction then
|
||||
// handles the same word for all the centers of the block, and only the words
|
||||
// that a sequence contains (a hundred for a short amplicon, out of 256) need
|
||||
// to be visited to compare it with all the centers of the block.
|
||||
type tableBlock struct {
|
||||
data []uint8
|
||||
}
|
||||
|
||||
func newTableBlock(width int) tableBlock {
|
||||
return tableBlock{data: make([]uint8, 256*width)}
|
||||
}
|
||||
|
||||
// set stores the table t as the lane `lane` of the block.
|
||||
func (b *tableBlock) set(width, lane int, t *table4) {
|
||||
for w := range t.count {
|
||||
b.data[w*width+lane] = t.count[w]
|
||||
}
|
||||
}
|
||||
|
||||
// common computes the sums of the minima of the counters of the sequence
|
||||
// given by its words with every lane of the block (see blockCommon).
|
||||
func (b *tableBlock) common(width int, words []uint16, out []uint8) {
|
||||
blockCommon(b.data, width, words, out)
|
||||
}
|
||||
|
||||
// sparseWords lists the words of a table as w<<8|count, so that the visit of
|
||||
// a block only goes through the words present in the sequence. nil is
|
||||
// returned when the counters add up to more than 255, which would overflow the
|
||||
// 8-bit sums of the blocks.
|
||||
func sparseWords(t *table4) []uint16 {
|
||||
words := make([]uint16, 0, 128)
|
||||
mass := 0
|
||||
for w, c := range t.count {
|
||||
if c > 0 {
|
||||
words = append(words, uint16(w)<<8|uint16(c))
|
||||
mass += int(c)
|
||||
}
|
||||
}
|
||||
if mass > 255 {
|
||||
return nil
|
||||
}
|
||||
return words
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
//go:build !goexperiment.simd
|
||||
|
||||
package obiclust
|
||||
|
||||
// simdBlockWidth is 0 without SIMD: the blocks are not used.
|
||||
func simdBlockWidth() int { return 0 }
|
||||
|
||||
func blockCommon(data []uint8, width int, words []uint16, out []uint8) {
|
||||
panic("obiclust: blocks of tables require GOEXPERIMENT=simd")
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
//go:build goexperiment.simd
|
||||
|
||||
package obiclust
|
||||
|
||||
import "simd"
|
||||
|
||||
// simdBlockWidth is the number of centers in a block: one per lane of a
|
||||
// vector of bytes.
|
||||
func simdBlockWidth() int {
|
||||
var probe simd.Uint8s
|
||||
return min(probe.Len(), 64)
|
||||
}
|
||||
|
||||
// blockCommon computes, for the sequence whose words are given, the sum of
|
||||
// the minima of the counters with every lane of the block. It is the value of
|
||||
// commonWords without the overflow term, as the sums fit in 8 bits (see
|
||||
// sparseWords). out must hold at least `width` bytes.
|
||||
func blockCommon(data []uint8, width int, words []uint16, out []uint8) {
|
||||
acc := simd.BroadcastUint8s(0)
|
||||
for _, e := range words {
|
||||
w := simd.LoadUint8s(data[int(e>>8)*width:])
|
||||
acc = acc.Add(w.Min(simd.BroadcastUint8s(uint8(e))))
|
||||
}
|
||||
acc.Store(out)
|
||||
}
|
||||
@@ -0,0 +1,136 @@
|
||||
package obiclust
|
||||
|
||||
import (
|
||||
"math"
|
||||
"sort"
|
||||
|
||||
"git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obialign"
|
||||
)
|
||||
|
||||
// center is a copy of the entry of a center, with its own table: scanning
|
||||
// the centers of a list then reads contiguous memory.
|
||||
type center struct {
|
||||
entry
|
||||
idx int // index of the entry in the dataset
|
||||
rank int // rank of the center in the order of creation
|
||||
}
|
||||
|
||||
const tabChunk = 1024
|
||||
|
||||
// A bucket holds the centers of one length, in the order of creation, and
|
||||
// their tables by blocks (see tableBlock).
|
||||
type bucket struct {
|
||||
cents []center
|
||||
blocks []tableBlock
|
||||
}
|
||||
|
||||
// centerSet stores the centers by length. A sequence can only be attached to a
|
||||
// center whose length is compatible with its own (see lengthCompatible), so
|
||||
// it only visits the buckets of these lengths, instead of all the centers.
|
||||
type centerSet struct {
|
||||
width int // centers per block of transposed tables, 0 if unused
|
||||
byLen map[int]*bucket
|
||||
lens []int // lengths that have a bucket, increasing
|
||||
tabs [][]table4 // chunks holding the tables of the centers
|
||||
n int
|
||||
}
|
||||
|
||||
func newCenterSet(width int) *centerSet {
|
||||
return ¢erSet{width: width, byLen: make(map[int]*bucket)}
|
||||
}
|
||||
|
||||
// add stores a copy of the entry e, which is the entry idx of the dataset, as
|
||||
// the next center, and returns it.
|
||||
func (s *centerSet) add(e entry, idx int) center {
|
||||
if s.n%tabChunk == 0 {
|
||||
s.tabs = append(s.tabs, make([]table4, tabChunk))
|
||||
}
|
||||
tab := &s.tabs[len(s.tabs)-1][s.n%tabChunk]
|
||||
if e.table != nil {
|
||||
*tab = *e.table
|
||||
}
|
||||
e.table = tab
|
||||
|
||||
b := s.byLen[e.length]
|
||||
if b == nil {
|
||||
b = new(bucket)
|
||||
s.byLen[e.length] = b
|
||||
s.lens = append(s.lens, e.length)
|
||||
sort.Ints(s.lens)
|
||||
}
|
||||
if w := s.width; w > 0 && e.table != nil {
|
||||
if len(b.cents)%w == 0 {
|
||||
b.blocks = append(b.blocks, newTableBlock(w))
|
||||
}
|
||||
b.blocks[len(b.blocks)-1].set(w, len(b.cents)%w, tab)
|
||||
}
|
||||
|
||||
ctr := center{entry: e, idx: idx, rank: s.n}
|
||||
b.cents = append(b.cents, ctr)
|
||||
s.n++
|
||||
return ctr
|
||||
}
|
||||
|
||||
// scan compares entry i with all the centers of the set, and returns the
|
||||
// first one it matches (in fast mode) or the best one (in exact mode, the
|
||||
// first of them in case of tie), exactly as compare would on the list of the
|
||||
// centers in the order of creation.
|
||||
//
|
||||
// Only the buckets of compatible lengths are visited: the other centers would
|
||||
// give the worst score. In each bucket the first match is the one of lowest
|
||||
// rank, so the first match of the whole set is the one of lowest rank among
|
||||
// the buckets. In exact mode, the best of each bucket is compared, ties going
|
||||
// to the lowest rank.
|
||||
func (c *clustering) scan(i int, buf *obialign.BandedLCSBuffer) attachment {
|
||||
q := &c.entries[i]
|
||||
set := c.set
|
||||
width := set.width
|
||||
useBlocks := width > 0 && q.sparse != nil
|
||||
|
||||
best := attachment{-1, c.sc.worst}
|
||||
bestRank := math.MaxInt
|
||||
var common [64]uint8
|
||||
|
||||
for _, length := range set.lens {
|
||||
if !c.sc.lengthCompatible(q.length, length) {
|
||||
continue
|
||||
}
|
||||
b := set.byLen[length]
|
||||
local := attachment{-1, c.sc.worst}
|
||||
localRank := 0
|
||||
|
||||
for k := range b.cents {
|
||||
ctr := &b.cents[k]
|
||||
if c.fast && ctr.rank > bestRank {
|
||||
break // a center of lower rank has been found in another bucket
|
||||
}
|
||||
cw := -1
|
||||
if useBlocks {
|
||||
if k%width == 0 {
|
||||
b.blocks[k/width].common(width, q.sparse, common[:])
|
||||
}
|
||||
cw = int(common[k%width])
|
||||
}
|
||||
s := c.sc.pairScore(q, &ctr.entry, cw, buf)
|
||||
if c.sc.selects(s, local.score) {
|
||||
local, localRank = attachment{ctr.idx, s}, ctr.rank
|
||||
if c.fast {
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if local.center < 0 {
|
||||
continue
|
||||
}
|
||||
if c.fast {
|
||||
if localRank < bestRank {
|
||||
best, bestRank = local, localRank
|
||||
}
|
||||
} else if best.center < 0 || c.sc.beats(local.score, best.score) ||
|
||||
(local.score == best.score && localRank < bestRank) {
|
||||
best, bestRank = local, localRank
|
||||
}
|
||||
}
|
||||
return best
|
||||
}
|
||||
@@ -0,0 +1,202 @@
|
||||
package obiclust
|
||||
|
||||
import (
|
||||
"sort"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
|
||||
"git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obialign"
|
||||
)
|
||||
|
||||
// clustering is the state of the star clustering of the distinct sequences,
|
||||
// taken in their sorted order.
|
||||
//
|
||||
// The reference algorithm is sequential: each sequence is compared with the
|
||||
// centers created so far, in the order of their creation, and is attached to
|
||||
// the first one it matches (or to the best one in exact mode), or becomes a
|
||||
// new center. Its result is reproduced exactly while the comparisons are run
|
||||
// in parallel, by processing the sequences by blocks:
|
||||
//
|
||||
// - phase A (parallel): every sequence of the block is compared with the
|
||||
// centers existing when the block starts. This is independent from one
|
||||
// sequence to the other, a sequence of the block cannot change the centers;
|
||||
// - phase B (sequential): the sequences matching no center are then taken
|
||||
// in their order. Each one is compared with the centers created earlier in
|
||||
// the block, and becomes a new center if it still matches nothing. The
|
||||
// new centers come after the old ones in the order of the centers, so
|
||||
// the result is the one of the sequential algorithm;
|
||||
// - phase C (parallel, exact mode only): the sequences attached in phase A
|
||||
// are compared with the new centers that precede them, the best score of
|
||||
// the whole list of centers being searched for.
|
||||
//
|
||||
// The result does not depend on the size of the blocks, which only trades the
|
||||
// sequential work of phase B against the synchronizations.
|
||||
type clustering struct {
|
||||
entries []entry
|
||||
sc *scoring
|
||||
fast bool
|
||||
workers int
|
||||
// bounds of the size of the blocks, 0 for the defaults (tests only)
|
||||
blockMin, blockMax int
|
||||
|
||||
centers []int // indices of the centers, in the order of creation
|
||||
set *centerSet
|
||||
fresh []center // the centers created in the current block
|
||||
|
||||
center []int // for each entry, the index of its center, -1 if it has none
|
||||
score []float64 // for each entry, the score with its center
|
||||
bufs []obialign.BandedLCSBuffer
|
||||
}
|
||||
|
||||
// result of the comparison of one entry with the list of centers
|
||||
type attachment struct {
|
||||
center int // index of the center, -1 if none
|
||||
score float64
|
||||
}
|
||||
|
||||
func newClustering(entries []entry, sc *scoring, fast bool, workers int) *clustering {
|
||||
c := &clustering{
|
||||
entries: entries,
|
||||
sc: sc,
|
||||
fast: fast,
|
||||
workers: max(workers, 1),
|
||||
center: make([]int, len(entries)),
|
||||
score: make([]float64, len(entries)),
|
||||
bufs: make([]obialign.BandedLCSBuffer, max(workers, 1)),
|
||||
}
|
||||
for i := range c.center {
|
||||
c.center[i] = -1
|
||||
}
|
||||
c.set = newCenterSet(simdBlockWidth())
|
||||
return c
|
||||
}
|
||||
|
||||
func (c *clustering) addCenter(i int) {
|
||||
c.fresh = append(c.fresh, c.set.add(c.entries[i], i))
|
||||
c.centers = append(c.centers, i)
|
||||
c.center[i] = i
|
||||
c.score[i] = c.sc.centerScore(c.entries[i].length)
|
||||
}
|
||||
|
||||
// compare looks for the best center of entry i among the given ones. The
|
||||
// attachment `from` is the best one already known. The search stops at the
|
||||
// first match in fast mode.
|
||||
func (c *clustering) compare(i int, cents []center, from attachment, buf *obialign.BandedLCSBuffer) attachment {
|
||||
best := from
|
||||
for k := range cents {
|
||||
s := c.sc.pairScore(&c.entries[i], ¢s[k].entry, -1, buf)
|
||||
if c.sc.selects(s, best.score) {
|
||||
best = attachment{cents[k].idx, s}
|
||||
if c.fast {
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
return best
|
||||
}
|
||||
|
||||
// parallelFor runs f(i, buf) for i in [from, to) on the workers.
|
||||
func (c *clustering) parallelFor(from, to int, f func(i int, buf *obialign.BandedLCSBuffer)) {
|
||||
n := to - from
|
||||
if c.workers == 1 || n == 1 {
|
||||
for i := from; i < to; i++ {
|
||||
f(i, &c.bufs[0])
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
var next atomic.Int64
|
||||
next.Store(int64(from))
|
||||
var wg sync.WaitGroup
|
||||
for w := 0; w < min(c.workers, n); w++ {
|
||||
wg.Add(1)
|
||||
go func(buf *obialign.BandedLCSBuffer) {
|
||||
defer wg.Done()
|
||||
for {
|
||||
i := int(next.Add(1)) - 1
|
||||
if i >= to {
|
||||
return
|
||||
}
|
||||
f(i, buf)
|
||||
}
|
||||
}(&c.bufs[w])
|
||||
}
|
||||
wg.Wait()
|
||||
}
|
||||
|
||||
// run clusters all the entries. progress is called with the number of
|
||||
// entries processed.
|
||||
func (c *clustering) run(progress func(done int)) {
|
||||
n := len(c.entries)
|
||||
if n == 0 {
|
||||
return
|
||||
}
|
||||
|
||||
minBlock, maxBlock := 2*c.workers, 256*c.workers
|
||||
if c.blockMax > 0 {
|
||||
minBlock, maxBlock = c.blockMin, c.blockMax
|
||||
}
|
||||
block := minBlock
|
||||
att := make([]attachment, maxBlock)
|
||||
inA := make([]bool, maxBlock) // attached to a center existing before the block
|
||||
var newCenters []int // indices of the centers created in the block
|
||||
|
||||
for pos := 0; pos < n; {
|
||||
end := min(n, pos+block)
|
||||
c.fresh = c.fresh[:0]
|
||||
att, inA := att[:end-pos], inA[:end-pos]
|
||||
|
||||
// phase A
|
||||
c.parallelFor(pos, end, func(i int, buf *obialign.BandedLCSBuffer) {
|
||||
att[i-pos] = c.scan(i, buf)
|
||||
inA[i-pos] = att[i-pos].center >= 0
|
||||
})
|
||||
|
||||
// phase B
|
||||
unmatched := 0
|
||||
newCenters = newCenters[:0]
|
||||
for i := pos; i < end; i++ {
|
||||
a := &att[i-pos]
|
||||
if inA[i-pos] {
|
||||
continue
|
||||
}
|
||||
unmatched++
|
||||
*a = c.compare(i, c.fresh, *a, &c.bufs[0])
|
||||
if a.center < 0 && !c.entries[i].ambiguous {
|
||||
newCenters = append(newCenters, i)
|
||||
c.addCenter(i)
|
||||
}
|
||||
}
|
||||
|
||||
// phase C
|
||||
if !c.fast && len(newCenters) > 0 {
|
||||
c.parallelFor(pos, end, func(i int, buf *obialign.BandedLCSBuffer) {
|
||||
if inA[i-pos] {
|
||||
before := c.fresh[:sort.SearchInts(newCenters, i)]
|
||||
att[i-pos] = c.compare(i, before, att[i-pos], buf)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
for i := pos; i < end; i++ {
|
||||
if a := att[i-pos]; a.center >= 0 {
|
||||
c.center[i] = a.center
|
||||
c.score[i] = c.sc.memberScore(a.score)
|
||||
}
|
||||
}
|
||||
|
||||
// Size of the next block. Phase B is sequential: for a block of b
|
||||
// sequences of which a fraction u matches no old center and a fraction
|
||||
// n becomes new centers, it makes about b*u*b*n/2 comparisons, against
|
||||
// b*K/workers in the time of phase A (K old centers). The block is
|
||||
// sized so that phase B stays around a tenth of phase A.
|
||||
if fu, fn := float64(unmatched)/float64(end-pos), float64(len(newCenters))/float64(end-pos); fu*fn > 0 {
|
||||
target := 0.2 * float64(len(c.centers)) / (float64(c.workers) * fu * fn)
|
||||
block = int(min(float64(maxBlock), max(float64(minBlock), target)))
|
||||
} else {
|
||||
block = maxBlock
|
||||
}
|
||||
pos = end
|
||||
progress(pos)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
package obiclust
|
||||
|
||||
// table4 is the 4-mer occurrence table of a sequence, as sumaclust builds it:
|
||||
// one saturating counter per word, and the number of occurrences that did
|
||||
// not fit in the counters.
|
||||
type table4 struct {
|
||||
count [256]uint8
|
||||
overflow int
|
||||
}
|
||||
|
||||
// buildTable4 counts the 4-mers of a sequence made of the letters a, c, g
|
||||
// and t. The 2-bit code of a base is (letter>>1)&3, i.e. a=0, c=1, t=2, g=3,
|
||||
// which is the encoding of sumaclust.
|
||||
func buildTable4(seq []byte) *table4 {
|
||||
t := new(table4)
|
||||
t.fill(seq)
|
||||
return t
|
||||
}
|
||||
|
||||
// fill counts the 4-mers of seq in a zeroed table.
|
||||
func (t *table4) fill(seq []byte) {
|
||||
if len(seq) < 4 {
|
||||
return
|
||||
}
|
||||
w := uint(0)
|
||||
for i, c := range seq {
|
||||
w = (w<<2 | uint(c>>1)&3) & 0xFF
|
||||
if i < 3 {
|
||||
continue
|
||||
}
|
||||
if t.count[w] < 255 {
|
||||
t.count[w]++
|
||||
} else {
|
||||
t.overflow++
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// minCommonWords is the minimum number of 4-mers that two sequences must
|
||||
// share when the longest has length reflen and they have a common
|
||||
// subsequence of length lcs (integer arithmetic of sumaclust, thresholdLCS4).
|
||||
func minCommonWords(reflen, lcs int) int {
|
||||
nbfrag := (reflen-lcs)*2 + 1
|
||||
smin := lcs / nbfrag
|
||||
r := lcs - smin*nbfrag
|
||||
return max(smin-2, 0)*r + max(smin-3, 0)*(nbfrag-r)
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
//go:build !goexperiment.simd
|
||||
|
||||
package obiclust
|
||||
|
||||
// commonWords is the upper bound sumaclust uses for the number of 4-mers
|
||||
// shared by two sequences: the sum of the minima of the counters, plus the
|
||||
// minimum of the two overflows.
|
||||
func commonWords(t1, t2 *table4) int {
|
||||
total := 0
|
||||
for i := range t1.count {
|
||||
total += int(min(t1.count[i], t2.count[i]))
|
||||
}
|
||||
return total + min(t1.overflow, t2.overflow)
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
//go:build goexperiment.simd
|
||||
|
||||
package obiclust
|
||||
|
||||
import "simd"
|
||||
|
||||
// commonWords is the upper bound sumaclust uses for the number of 4-mers
|
||||
// shared by two sequences: the sum of the minima of the counters, plus the
|
||||
// minimum of the two overflows.
|
||||
//
|
||||
// The minima of the 256 counters are computed by vectors of bytes, and summed
|
||||
// in 16-bit lanes (at most 256*255 spread over the lanes, the lanes being at
|
||||
// least 8 in number, so that none of them overflows).
|
||||
func commonWords(t1, t2 *table4) int {
|
||||
var probe simd.Uint8s
|
||||
vl := probe.Len()
|
||||
|
||||
acc := simd.BroadcastUint16s(0)
|
||||
low := simd.BroadcastUint16s(0x00FF)
|
||||
for i := 0; i < len(t1.count); i += vl {
|
||||
m := simd.LoadUint8s(t1.count[i:]).Min(simd.LoadUint8s(t2.count[i:])).ReshapeToUint16s()
|
||||
acc = acc.Add(m.And(low)).Add(m.ShiftAllRight(8))
|
||||
}
|
||||
|
||||
// sum the pairs of 16-bit lanes into 32-bit lanes, then add those up
|
||||
wide := acc.ReshapeToUint32s()
|
||||
sums := wide.And(simd.BroadcastUint32s(0xFFFF)).Add(wide.ShiftAllRight(16))
|
||||
var lanes [32]uint32
|
||||
sums.Store(lanes[:])
|
||||
total := 0
|
||||
for _, v := range lanes[:sums.Len()] {
|
||||
total += int(v)
|
||||
}
|
||||
return total + min(t1.overflow, t2.overflow)
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
package obiclust
|
||||
|
||||
import (
|
||||
"math/rand"
|
||||
"testing"
|
||||
)
|
||||
|
||||
// commonWordsRef is the definition of commonWords, spelled out.
|
||||
func commonWordsRef(t1, t2 *table4) int {
|
||||
total := 0
|
||||
for i := range t1.count {
|
||||
total += int(min(t1.count[i], t2.count[i]))
|
||||
}
|
||||
return total + min(t1.overflow, t2.overflow)
|
||||
}
|
||||
|
||||
func TestCommonWords(t *testing.T) {
|
||||
rng := rand.New(rand.NewSource(3))
|
||||
seq := func(n int, alpha string) []byte {
|
||||
s := make([]byte, n)
|
||||
for i := range s {
|
||||
s[i] = alpha[rng.Intn(len(alpha))]
|
||||
}
|
||||
return s
|
||||
}
|
||||
for it := 0; it < 3000; it++ {
|
||||
alpha := []string{"acgt", "ac", "a"}[it%3]
|
||||
t1 := buildTable4(seq(rng.Intn(1200), alpha))
|
||||
t2 := buildTable4(seq(rng.Intn(1200), alpha))
|
||||
if got, want := commonWords(t1, t2), commonWordsRef(t1, t2); got != want {
|
||||
t.Fatalf("commonWords = %d, want %d", got, want)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TestBuildTable4 checks the table against the 4-mers counted the long way,
|
||||
// including the saturation of the counters.
|
||||
func TestBuildTable4(t *testing.T) {
|
||||
code := map[byte]int{'a': 0, 'c': 1, 't': 2, 'g': 3}
|
||||
rng := rand.New(rand.NewSource(4))
|
||||
for it := 0; it < 500; it++ {
|
||||
alpha := []string{"acgt", "a", "ac"}[it%3]
|
||||
n := rng.Intn(900)
|
||||
s := make([]byte, n)
|
||||
for i := range s {
|
||||
s[i] = alpha[rng.Intn(len(alpha))]
|
||||
}
|
||||
var counts [256]int
|
||||
for i := 0; i+4 <= n; i++ {
|
||||
w := 0
|
||||
for _, c := range s[i : i+4] {
|
||||
w = w<<2 | code[c]
|
||||
}
|
||||
counts[w]++
|
||||
}
|
||||
tab := buildTable4(s)
|
||||
over := 0
|
||||
for w, c := range counts {
|
||||
if c > 255 {
|
||||
over += c - 255
|
||||
c = 255
|
||||
}
|
||||
if int(tab.count[w]) != c {
|
||||
t.Fatalf("word %d: got %d, want %d", w, tab.count[w], c)
|
||||
}
|
||||
}
|
||||
if tab.overflow != over {
|
||||
t.Fatalf("overflow = %d, want %d", tab.overflow, over)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1 +1,225 @@
|
||||
package obiclust
|
||||
|
||||
import (
|
||||
"os"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
|
||||
"git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obialign"
|
||||
"git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obidefault"
|
||||
"git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obiiter"
|
||||
"git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obiseq"
|
||||
"git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obitools/obiconvert"
|
||||
"git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obitools/obicsv"
|
||||
"github.com/schollz/progressbar/v3"
|
||||
log "github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
// buildEntries describes the distinct sequences of the groups, the 4-mer
|
||||
// tables being computed in parallel.
|
||||
func buildEntries(recs []record, groups []group, workers int) []entry {
|
||||
entries := make([]entry, len(groups))
|
||||
tables := make([]table4, len(groups)) // contiguous, in the order the centers are scanned
|
||||
|
||||
var next atomic.Int64
|
||||
var wg sync.WaitGroup
|
||||
for w := 0; w < max(workers, 1); w++ {
|
||||
wg.Add(1)
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
for {
|
||||
g := int(next.Add(1)) - 1
|
||||
if g >= len(groups) {
|
||||
return
|
||||
}
|
||||
head := &recs[groups[g].start]
|
||||
var sparse []uint16
|
||||
if !head.ambiguous {
|
||||
tables[g].fill(head.clean)
|
||||
sparse = sparseWords(&tables[g])
|
||||
}
|
||||
entries[g] = entry{
|
||||
seq: head.clean,
|
||||
length: len(head.clean),
|
||||
count: groups[g].count,
|
||||
table: &tables[g],
|
||||
sparse: sparse,
|
||||
ambiguous: head.ambiguous,
|
||||
}
|
||||
}
|
||||
}()
|
||||
}
|
||||
wg.Wait()
|
||||
return entries
|
||||
}
|
||||
|
||||
// Params are the parameters of the clustering.
|
||||
type Params struct {
|
||||
Threshold float64
|
||||
Ratio float64
|
||||
Exact bool // attach a sequence to the best center, not to the first matching one
|
||||
Distance bool // the score is a distance, not a similarity
|
||||
Normalized bool // the score is normalized by the reference length
|
||||
Reference reference
|
||||
SortKey string // "count", "None", or an attribute
|
||||
Ascending bool
|
||||
AcceptAmbiguous bool // keep the sequences with IUPAC letters other than acgt (they cannot be centers)
|
||||
Workers int
|
||||
}
|
||||
|
||||
// ParamsFromCLI collects the parameters from the command line options.
|
||||
func ParamsFromCLI() Params {
|
||||
return Params{
|
||||
Threshold: CLIThreshold(),
|
||||
Ratio: CLIRatio(),
|
||||
Exact: CLIExact(),
|
||||
Distance: CLIDistance(),
|
||||
Normalized: CLINormalized(),
|
||||
Reference: CLIReference(),
|
||||
SortKey: CLISortKey(),
|
||||
Ascending: CLIAscending(),
|
||||
AcceptAmbiguous: CLIAcceptAmbiguous(),
|
||||
Workers: obidefault.ParallelWorkers(),
|
||||
}
|
||||
}
|
||||
|
||||
// newScoring builds the scoring from the parameters, checking them as sumaclust does.
|
||||
func newScoring(p Params, entries []entry) *scoring {
|
||||
threshold := p.Threshold
|
||||
|
||||
if threshold <= 0 || (p.Normalized && threshold > 1.0) {
|
||||
log.Fatal("Please specify a threshold > 0, and < 1 when scores are normalized.")
|
||||
}
|
||||
|
||||
sc := &scoring{
|
||||
normalize: p.Normalized,
|
||||
lcsmode: !p.Distance,
|
||||
ref: p.Reference,
|
||||
ratio: p.Ratio,
|
||||
}
|
||||
if !sc.lcsmode && sc.normalize {
|
||||
threshold = 1.0 - threshold
|
||||
}
|
||||
sc.threshold = threshold
|
||||
|
||||
lmax := 0
|
||||
for i := range entries {
|
||||
lmax = max(lmax, entries[i].length)
|
||||
}
|
||||
if sc.similarityLike() {
|
||||
sc.worst = 0.0
|
||||
} else {
|
||||
sc.worst = float64(lmax)
|
||||
}
|
||||
sc.prepareLengths(lmax)
|
||||
return sc
|
||||
}
|
||||
|
||||
func progressBar(n int) *progressbar.ProgressBar {
|
||||
if !obiconvert.CLIProgressBar() {
|
||||
return nil
|
||||
}
|
||||
return progressbar.NewOptions(n,
|
||||
progressbar.OptionSetWriter(os.Stderr),
|
||||
progressbar.OptionSetWidth(15),
|
||||
progressbar.OptionShowIts(),
|
||||
progressbar.OptionSetPredictTime(true),
|
||||
progressbar.OptionSetDescription("[Clustering sequences]"),
|
||||
)
|
||||
}
|
||||
|
||||
// Result is a clustering of a dataset.
|
||||
type Result struct {
|
||||
recs []record
|
||||
groups []group
|
||||
clustered *clustering
|
||||
Discarded int // number of sequences that were not usable
|
||||
}
|
||||
|
||||
// Clusters returns the number of clusters.
|
||||
func (r *Result) Clusters() int { return len(r.clustered.centers) }
|
||||
|
||||
// Cluster clusters the sequences with the star clustering algorithm of
|
||||
// sumaclust (the same as UCLUST and CD-HIT). progress, if not nil, is called
|
||||
// with the number of distinct sequences processed.
|
||||
func Cluster(db obiseq.BioSequenceSlice, p Params, progress func(done, total int)) *Result {
|
||||
recs, groups, discarded := prepare(db, p.SortKey, p.Ascending, p.AcceptAmbiguous)
|
||||
|
||||
if discarded > 0 {
|
||||
log.Warnf("Discarded %d sequences that did not contain only IUPAC nucleotides (or only 'acgt' without --accept-ambiguous)", discarded)
|
||||
}
|
||||
if len(groups) == 0 {
|
||||
log.Fatal("No valid sequences.")
|
||||
}
|
||||
log.Infof("%d distinct sequences", len(groups))
|
||||
|
||||
entries := buildEntries(recs, groups, p.Workers)
|
||||
for i := range entries {
|
||||
if entries[i].length > obialign.MaxBandedLCSLength {
|
||||
log.Fatalf("The sequence %s is too long (%d bp, maximum %d bp)",
|
||||
recs[groups[i].start].seq.Id(), entries[i].length, obialign.MaxBandedLCSLength)
|
||||
}
|
||||
}
|
||||
|
||||
sc := newScoring(p, entries)
|
||||
if sc.similarityLike() {
|
||||
log.Infof("Clustering sequences when similarity >= %f", sc.threshold)
|
||||
} else {
|
||||
log.Infof("Clustering sequences when distance <= %f", sc.threshold)
|
||||
}
|
||||
|
||||
cl := newClustering(entries, sc, !p.Exact, p.Workers)
|
||||
cl.run(func(done int) {
|
||||
if progress != nil {
|
||||
progress(done, len(entries))
|
||||
}
|
||||
})
|
||||
log.Infof("%d clusters created", len(cl.centers))
|
||||
|
||||
return &Result{recs: recs, groups: groups, clustered: cl, Discarded: discarded}
|
||||
}
|
||||
|
||||
// CLIOBIClust clusters the sequences and returns them annotated.
|
||||
func CLIOBIClust(iterator obiiter.IBioSequence) obiiter.IBioSequence {
|
||||
source, db := iterator.Load()
|
||||
log.Infof("Sequence dataset of %d sequences loaded", len(db))
|
||||
|
||||
var bar *progressbar.ProgressBar
|
||||
last := 0
|
||||
res := Cluster(db, ParamsFromCLI(), func(done, total int) {
|
||||
if bar == nil {
|
||||
bar = progressBar(total)
|
||||
}
|
||||
if bar != nil {
|
||||
bar.Add(done - last)
|
||||
}
|
||||
last = done
|
||||
})
|
||||
|
||||
if CLIOTUMap() != "" {
|
||||
table, err := obicsv.WriteCSVToFile(
|
||||
res.OTUMapIterator(source, obidefault.BatchSize()),
|
||||
CLIOTUMap(),
|
||||
obicsv.OptionsCompressed(obidefault.CompressOutput()))
|
||||
if err != nil {
|
||||
log.Fatalf("Cannot write the OTU map %s: %v", CLIOTUMap(), err)
|
||||
}
|
||||
table.Consume()
|
||||
}
|
||||
|
||||
if CLINoSequenceOutput() {
|
||||
return emptyIterator()
|
||||
}
|
||||
return obiiter.IBatchOver(source, res.Annotate(), obidefault.BatchSize())
|
||||
}
|
||||
|
||||
// emptyIterator returns an iterator that is already exhausted.
|
||||
func emptyIterator() obiiter.IBioSequence {
|
||||
iterator := obiiter.MakeIBioSequence()
|
||||
iterator.Add(1)
|
||||
go func() {
|
||||
iterator.WaitAndClose()
|
||||
}()
|
||||
iterator.Done()
|
||||
return iterator
|
||||
}
|
||||
@@ -0,0 +1,434 @@
|
||||
package obiclust
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obialign"
|
||||
"git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obiseq"
|
||||
)
|
||||
|
||||
// readTestFasta reads a fasta file whose headers are "id count=N; key=V;".
|
||||
func readTestFasta(t testing.TB, filename string) obiseq.BioSequenceSlice {
|
||||
t.Helper()
|
||||
f, err := os.Open(filename)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
var db obiseq.BioSequenceSlice
|
||||
var header string
|
||||
var seq strings.Builder
|
||||
flush := func() {
|
||||
if header == "" {
|
||||
return
|
||||
}
|
||||
fields := strings.Fields(header)
|
||||
s := obiseq.NewBioSequence(fields[0], []byte(seq.String()), "")
|
||||
for _, f := range fields[1:] {
|
||||
if k, v, ok := strings.Cut(strings.TrimSuffix(f, ";"), "="); ok {
|
||||
if n, err := strconv.Atoi(v); err == nil {
|
||||
s.SetAttribute(k, n)
|
||||
}
|
||||
}
|
||||
}
|
||||
db = append(db, s)
|
||||
seq.Reset()
|
||||
}
|
||||
sc := bufio.NewScanner(f)
|
||||
sc.Buffer(make([]byte, 1<<20), 1<<20)
|
||||
for sc.Scan() {
|
||||
if line := sc.Text(); strings.HasPrefix(line, ">") {
|
||||
flush()
|
||||
header = line[1:]
|
||||
} else {
|
||||
seq.WriteString(strings.TrimSpace(line))
|
||||
}
|
||||
}
|
||||
flush()
|
||||
return db
|
||||
}
|
||||
|
||||
// paramsFromSumaclust translates the options of sumaclust.
|
||||
func paramsFromSumaclust(t testing.TB, args []string) Params {
|
||||
t.Helper()
|
||||
p := Params{Threshold: 0.97, Ratio: 1.0, Normalized: true, SortKey: "count", Workers: 4}
|
||||
for i := 0; i < len(args); i++ {
|
||||
var err error
|
||||
switch args[i] {
|
||||
case "-t":
|
||||
i++
|
||||
p.Threshold, err = strconv.ParseFloat(args[i], 64)
|
||||
case "-R":
|
||||
i++
|
||||
p.Ratio, err = strconv.ParseFloat(args[i], 64)
|
||||
case "-s":
|
||||
i++
|
||||
p.SortKey = args[i]
|
||||
case "-e":
|
||||
p.Exact = true
|
||||
case "-l":
|
||||
p.Reference = refShortest
|
||||
case "-L":
|
||||
p.Reference = refLongest
|
||||
case "-a":
|
||||
p.Reference = refAlignment
|
||||
case "-d":
|
||||
p.Distance = true
|
||||
case "-r":
|
||||
p.Normalized = false
|
||||
case "-o":
|
||||
p.Ascending = true
|
||||
case "-g":
|
||||
p.AcceptAmbiguous = true
|
||||
default:
|
||||
t.Fatalf("unknown option %s", args[i])
|
||||
}
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
return p
|
||||
}
|
||||
|
||||
// TestSumaclustResults compares the clusterings with the outputs of
|
||||
// sumaclust 1.0.36 (testdata/*.expected: id, cluster, score, center, weight
|
||||
// and sequence of every record, in the order sumaclust writes them).
|
||||
func TestSumaclustResults(t *testing.T) {
|
||||
cases, err := os.ReadFile(filepath.Join("testdata", "cases.txt"))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
for _, line := range strings.Split(strings.TrimSpace(string(cases)), "\n") {
|
||||
parts := strings.Split(line, "\t")
|
||||
data, name, opts := parts[0], parts[1], strings.Fields(parts[2])
|
||||
t.Run(data+"/"+name, func(t *testing.T) {
|
||||
db := readTestFasta(t, filepath.Join("testdata", data+".fasta"))
|
||||
res := Cluster(db, paramsFromSumaclust(t, opts), nil)
|
||||
|
||||
expected, err := os.ReadFile(filepath.Join("testdata", data+"_"+name+".expected"))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
want := strings.Split(strings.TrimSpace(string(expected)), "\n")
|
||||
got := res.Annotate()
|
||||
if len(got) != len(want) {
|
||||
t.Fatalf("%d records, want %d", len(got), len(want))
|
||||
}
|
||||
for i, s := range got {
|
||||
score, _ := s.GetFloatAttribute("cluster_score")
|
||||
center, _ := s.GetBoolAttribute("cluster_center")
|
||||
c := map[bool]string{true: "T", false: "F"}[center]
|
||||
cluster, _ := s.GetStringAttribute("cluster")
|
||||
weight, _ := s.GetIntAttribute("cluster_weight")
|
||||
line := fmt.Sprintf("%s\t%s\t%f\t%s\t%d\t%s", s.Id(), cluster, score, c, weight, s.String())
|
||||
if line != want[i] {
|
||||
t.Fatalf("record %d:\n got %s\nwant %s", i, line, want[i])
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// referenceCluster transcribes the sequential algorithm of sumaclust.
|
||||
func referenceCluster(entries []entry, sc *scoring, fast bool) (center []int, score []float64) {
|
||||
n := len(entries)
|
||||
center, score = make([]int, n), make([]float64, n)
|
||||
var centers []int
|
||||
var buf obialign.BandedLCSBuffer
|
||||
for i := range entries {
|
||||
scoremax, best := sc.worst, -1
|
||||
for _, c := range centers {
|
||||
s := sc.pairScore(&entries[i], &entries[c], -1, &buf)
|
||||
if sc.selects(s, scoremax) {
|
||||
scoremax, best = s, c
|
||||
if fast {
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
if best >= 0 {
|
||||
center[i], score[i] = best, sc.memberScore(scoremax)
|
||||
} else if entries[i].ambiguous {
|
||||
center[i] = -1
|
||||
} else {
|
||||
center[i], score[i] = i, sc.centerScore(entries[i].length)
|
||||
centers = append(centers, i)
|
||||
}
|
||||
}
|
||||
return center, score
|
||||
}
|
||||
|
||||
func randomEntries(rng *rand.Rand, n int) []entry {
|
||||
var roots [][]byte
|
||||
entries := make([]entry, 0, n)
|
||||
for len(entries) < n {
|
||||
var s []byte
|
||||
if len(roots) == 0 || rng.Intn(5) == 0 {
|
||||
s = make([]byte, 30+rng.Intn(50))
|
||||
for i := range s {
|
||||
s[i] = "acgt"[rng.Intn(4)]
|
||||
}
|
||||
roots = append(roots, s)
|
||||
} else {
|
||||
root := roots[rng.Intn(len(roots))]
|
||||
for _, c := range root {
|
||||
switch r := rng.Intn(40); {
|
||||
case r == 0:
|
||||
s = append(s, "acgt"[rng.Intn(4)])
|
||||
case r == 1:
|
||||
case r == 2:
|
||||
s = append(s, c, "acgt"[rng.Intn(4)])
|
||||
default:
|
||||
s = append(s, c)
|
||||
}
|
||||
}
|
||||
}
|
||||
tab := buildTable4(s)
|
||||
entries = append(entries, entry{seq: s, length: len(s), count: 1 + rng.Intn(20), table: tab, sparse: sparseWords(tab)})
|
||||
}
|
||||
return entries
|
||||
}
|
||||
|
||||
// TestParallelClusteringIsSequential checks that the clustering by blocks
|
||||
// gives, whatever the number of workers and the size of the blocks, the
|
||||
// result of the sequential algorithm.
|
||||
func TestParallelClusteringIsSequential(t *testing.T) {
|
||||
rng := rand.New(rand.NewSource(21))
|
||||
scorings := []scoring{
|
||||
{threshold: 0.9, normalize: true, lcsmode: true, ref: refAlignment, ratio: 1, worst: 0},
|
||||
{threshold: 0.85, normalize: true, lcsmode: true, ref: refShortest, ratio: 2, worst: 0},
|
||||
{threshold: 0.9, normalize: true, lcsmode: false, ref: refLongest, ratio: 1, worst: 0},
|
||||
{threshold: 35, normalize: false, lcsmode: true, ref: refAlignment, ratio: 1, worst: 0},
|
||||
{threshold: 5, normalize: false, lcsmode: false, ref: refAlignment, ratio: 1, worst: 80},
|
||||
}
|
||||
for round := 0; round < 4; round++ {
|
||||
entries := randomEntries(rng, 300)
|
||||
for si := range scorings {
|
||||
sc := scorings[si]
|
||||
for _, fast := range []bool{true, false} {
|
||||
wantCenter, wantScore := referenceCluster(entries, &sc, fast)
|
||||
for _, workers := range []int{1, 3, 8} {
|
||||
for _, blocks := range [][2]int{{0, 0}, {1, 1}, {2, 5}, {7, 7}, {50, 300}} {
|
||||
cl := newClustering(entries, &sc, fast, workers)
|
||||
cl.blockMin, cl.blockMax = blocks[0], blocks[1]
|
||||
cl.run(func(int) {})
|
||||
for i := range entries {
|
||||
if cl.center[i] != wantCenter[i] || cl.score[i] != wantScore[i] {
|
||||
t.Fatalf("scoring %d fast=%v workers=%d blocks=%v: entry %d is (%d, %v), want (%d, %v)",
|
||||
si, fast, workers, blocks, i, cl.center[i], cl.score[i], wantCenter[i], wantScore[i])
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestClassify(t *testing.T) {
|
||||
cases := []struct {
|
||||
in string
|
||||
accept bool
|
||||
kept bool
|
||||
ambiguous bool
|
||||
}{
|
||||
{"acgt", false, true, false}, {"acgt", true, true, false},
|
||||
{"acgtn", false, false, false}, {"acgtn", true, true, true},
|
||||
{"acgtx", true, false, false}, {"nacgt", false, false, false},
|
||||
{"acgt-", true, false, false}, {"acgu", true, true, true},
|
||||
{"ACGT", true, false, false}, {"", true, false, false},
|
||||
{"rykmswbdhvn", true, true, true}, {"rykmswbdhvn", false, false, false},
|
||||
}
|
||||
for _, c := range cases {
|
||||
got, amb := classify([]byte(c.in), c.accept)
|
||||
if (got != nil) != c.kept || amb != c.ambiguous {
|
||||
t.Errorf("classify(%q, %v) = (%q, %v), want kept=%v ambiguous=%v", c.in, c.accept, got, amb, c.kept, c.ambiguous)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func makeSeq(id, seq string, count int, key float64) *obiseq.BioSequence {
|
||||
s := obiseq.NewBioSequence(id, []byte(seq), "")
|
||||
s.SetAttribute("count", count)
|
||||
s.SetAttribute("key", key)
|
||||
return s
|
||||
}
|
||||
|
||||
func ids(groups []group, recs []record) string {
|
||||
var out []string
|
||||
for _, g := range groups {
|
||||
out = append(out, recs[g.start].seq.Id())
|
||||
}
|
||||
return strings.Join(out, " ")
|
||||
}
|
||||
|
||||
// TestPrepareOrder checks the order of the sequences, which does not depend
|
||||
// on the stability of a sort: decreasing count, then position; the head of a
|
||||
// group of identical sequences is the one with the extreme key, then the
|
||||
// first one.
|
||||
func TestPrepareOrder(t *testing.T) {
|
||||
db := obiseq.BioSequenceSlice{
|
||||
makeSeq("a", "aaaacccc", 5, 1),
|
||||
makeSeq("b", "gggg", 9, 2),
|
||||
makeSeq("c", "aaaacccc", 5, 3), // same sequence as a, same count: a is the head
|
||||
makeSeq("d", "tttt", 10, 4),
|
||||
makeSeq("e", "cccc", 10, 5), // same cumulated count as d: after d, which comes first
|
||||
makeSeq("f", "aaaacccc", 7, 6),
|
||||
makeSeq("g", "nnnn", 3, 7), // discarded
|
||||
makeSeq("h", "ccgg", 2, 8),
|
||||
}
|
||||
|
||||
check := func(key string, ascending bool, want string) {
|
||||
recs, groups, discarded := prepare(db, key, ascending, false)
|
||||
if discarded != 1 {
|
||||
t.Errorf("discarded = %d, want 1", discarded)
|
||||
}
|
||||
if got := ids(groups, recs); got != want {
|
||||
t.Errorf("key=%s ascending=%v: got %s, want %s", key, ascending, got, want)
|
||||
}
|
||||
}
|
||||
// a, c and f are one group of count 17, headed by f (count 7)
|
||||
check("count", false, "f d e b h")
|
||||
check("count", true, "h b d e a") // the head of a group is then the record with the smallest count
|
||||
// on the key attribute, the groups are ranked on the key of their head, the record with the largest key
|
||||
check("key", false, "h f e d b")
|
||||
check("key", true, "a b d e h")
|
||||
// no sorting: first occurrence of each sequence
|
||||
check("None", false, "a b d e h")
|
||||
|
||||
// the identical sequences follow their head, with the largest count first
|
||||
recs, groups, _ := prepare(db, "count", false, false)
|
||||
var members []string
|
||||
for r := groups[0].start; r < groups[0].end; r++ {
|
||||
members = append(members, recs[r].seq.Id())
|
||||
}
|
||||
if got := strings.Join(members, " "); got != "f a c" {
|
||||
t.Errorf("group of f: %s, want f a c", got)
|
||||
}
|
||||
}
|
||||
|
||||
// TestAmbiguousSequences checks that a sequence with IUPAC letters is attached
|
||||
// to a cluster when it matches a center, and is left without cluster otherwise.
|
||||
func TestAmbiguousSequences(t *testing.T) {
|
||||
root := "acgtacgtaccgtagctagcatcgatcgatcgtagctagctagcatcg"
|
||||
db := obiseq.BioSequenceSlice{
|
||||
makeSeq("center", root, 10, 0),
|
||||
makeSeq("amb", root[:20]+"n"+root[21:], 5, 0), // matches the center
|
||||
makeSeq("far", "ttttgggggccccaaaaattttgggggccccaaaaattttggggg", 4, 0),
|
||||
makeSeq("ambfar", "nnnnttttggggcccccaaaa", 3, 0), // matches nothing, cannot be a center
|
||||
}
|
||||
p := Params{Threshold: 0.9, Ratio: 1, Normalized: true, SortKey: "count", AcceptAmbiguous: true, Workers: 2}
|
||||
res := Cluster(db, p, nil)
|
||||
out := res.Annotate()
|
||||
got := map[string]string{}
|
||||
for _, s := range out {
|
||||
c, ok := s.GetStringAttribute("cluster")
|
||||
if !ok {
|
||||
c = "-"
|
||||
}
|
||||
got[s.Id()] = c
|
||||
}
|
||||
want := map[string]string{"center": "center", "amb": "center", "far": "far", "ambfar": "-"}
|
||||
for id, w := range want {
|
||||
if got[id] != w {
|
||||
t.Errorf("%s: cluster %q, want %q", id, got[id], w)
|
||||
}
|
||||
}
|
||||
if res.Clusters() != 2 {
|
||||
t.Errorf("%d clusters, want 2", res.Clusters())
|
||||
}
|
||||
for _, s := range out {
|
||||
if s.Id() == "ambfar" {
|
||||
if center, _ := s.GetBoolAttribute("cluster_center"); center || s.HasAttribute("cluster_weight") {
|
||||
t.Error("ambfar must have cluster_center=false and no weight")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TestLengthTable checks that the values precomputed by length give the
|
||||
// scores of the direct computation, in every mode.
|
||||
func TestLengthTable(t *testing.T) {
|
||||
rng := rand.New(rand.NewSource(33))
|
||||
entries := randomEntries(rng, 120)
|
||||
for i := 0; i < 20; i++ { // some very short sequences, which skip the filter
|
||||
s := entries[i].seq[:8+rng.Intn(10)]
|
||||
entries[i] = entry{seq: s, length: len(s), count: 1, table: buildTable4(s)}
|
||||
}
|
||||
lmax := 0
|
||||
for i := range entries {
|
||||
lmax = max(lmax, entries[i].length)
|
||||
}
|
||||
var buf obialign.BandedLCSBuffer
|
||||
for _, ref := range []reference{refAlignment, refLongest, refShortest} {
|
||||
for _, mode := range []scoring{
|
||||
{threshold: 0.9, normalize: true, lcsmode: true},
|
||||
{threshold: 0.8, normalize: true, lcsmode: false},
|
||||
{threshold: 30, normalize: false, lcsmode: true},
|
||||
{threshold: 6, normalize: false, lcsmode: false},
|
||||
} {
|
||||
direct := mode
|
||||
direct.ref, direct.ratio = ref, 3
|
||||
table := direct
|
||||
table.prepareLengths(lmax)
|
||||
if (ref == refShortest) != (table.byLength == nil) {
|
||||
t.Fatalf("ref %v: table presence is wrong", ref)
|
||||
}
|
||||
for i := range entries {
|
||||
for j := range entries {
|
||||
a, b := direct.pairScore(&entries[i], &entries[j], -1, &buf), table.pairScore(&entries[i], &entries[j], -1, &buf)
|
||||
if a != b {
|
||||
t.Fatalf("ref %v mode %+v pair %d,%d: %v with the table, %v directly", ref, mode, i, j, b, a)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TestBlockCommon checks the sums of a block of transposed tables against
|
||||
// commonWords.
|
||||
func TestBlockCommon(t *testing.T) {
|
||||
width := simdBlockWidth()
|
||||
if width == 0 {
|
||||
t.Skip("blocks of tables are used with GOEXPERIMENT=simd only")
|
||||
}
|
||||
rng := rand.New(rand.NewSource(8))
|
||||
seq := func(n int, alpha string) []byte {
|
||||
s := make([]byte, n)
|
||||
for i := range s {
|
||||
s[i] = alpha[rng.Intn(len(alpha))]
|
||||
}
|
||||
return s
|
||||
}
|
||||
for it := 0; it < 200; it++ {
|
||||
alpha := []string{"acgt", "ac", "a"}[it%3]
|
||||
block := newTableBlock(width)
|
||||
tabs := make([]*table4, width)
|
||||
for j := range tabs {
|
||||
tabs[j] = buildTable4(seq(rng.Intn(600), alpha))
|
||||
block.set(width, j, tabs[j])
|
||||
}
|
||||
q := buildTable4(seq(rng.Intn(260), alpha))
|
||||
words := sparseWords(q)
|
||||
if words == nil {
|
||||
continue
|
||||
}
|
||||
out := make([]uint8, 64)
|
||||
block.common(width, words, out)
|
||||
for j, tab := range tabs {
|
||||
want := commonWordsRef(q, tab) - min(q.overflow, tab.overflow)
|
||||
if int(out[j]) != want {
|
||||
t.Fatalf("lane %d: %d, want %d", j, out[j], want)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+135
-111
@@ -3,102 +3,107 @@ package obiclust
|
||||
import (
|
||||
"git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obitools/obiconvert"
|
||||
"github.com/DavidGamba/go-getoptions"
|
||||
log "github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
type ScoreNormalizationMode int
|
||||
// reference is the length used to normalize a score (or to express a raw
|
||||
// distance): the alignment length, the longest or the shortest sequence.
|
||||
type reference int
|
||||
|
||||
const (
|
||||
NoNormalization ScoreNormalizationMode = iota
|
||||
NormalizedByShortest
|
||||
NormalizedByLongest
|
||||
NormalizedByAlignment
|
||||
refAlignment reference = iota
|
||||
refLongest
|
||||
refShortest
|
||||
)
|
||||
|
||||
var _sampleAttribute = "sample"
|
||||
var _threshold = 3.0
|
||||
var _shortReference = false
|
||||
var _longReference = false
|
||||
var _alignReference = true
|
||||
var _normalizedScore = false
|
||||
var _distanceMode = false
|
||||
var _exactMode = false
|
||||
var _ratioMax = 1.0
|
||||
var _sorted_by_length = false
|
||||
var _sorted_by_abundance = true
|
||||
var _sortingAscending = false
|
||||
var _onlyHead = false
|
||||
var _saveGraph = "__@@NOSAVE@@__"
|
||||
var _saveRatio = "__@@NOSAVE@@__"
|
||||
var _minSample = 1
|
||||
var _threshold = 0.97
|
||||
var _ratio = 1.0
|
||||
var _exact = false
|
||||
var _distance = false
|
||||
var _raw = false
|
||||
var _normalized = false
|
||||
var _refShortest = false
|
||||
var _refLongest = false
|
||||
var _refAlignment = false
|
||||
var _sortKey = "count"
|
||||
var _ascending = false
|
||||
var _acceptAmbiguous = false
|
||||
var _otuMap = ""
|
||||
var _noSequenceOutput = false
|
||||
|
||||
func ObiclustOptionSet(options *getoptions.GetOpt) {
|
||||
options.StringVar(&_sampleAttribute, "sample", _sampleAttribute,
|
||||
options.Alias("s"),
|
||||
options.Description("Attribute containing sample descriptions (default %s)."))
|
||||
|
||||
options.Float64Var(&_threshold, "distance", _threshold,
|
||||
options.Alias("--threshold"),
|
||||
options.Description("Threshold to merge sequences into the same cluster (default: %d)."))
|
||||
|
||||
options.Float64Var(&_ratioMax, "ratio", _ratioMax,
|
||||
options.Alias("r"),
|
||||
options.Description("Threshold ratio between counts (rare/abundant counts)"+
|
||||
" of two sequence records so that the less abundant one is a variant of "+
|
||||
"the more abundant (default: %3.2f)."))
|
||||
|
||||
options.BoolVar(&_onlyHead, "head", _onlyHead,
|
||||
options.Alias("H"),
|
||||
options.Description("Select only sequences with the head status in at least one sample."),
|
||||
options.Float64Var(&_threshold, "threshold", _threshold,
|
||||
options.Alias("t"),
|
||||
options.ArgName("THRESHOLD"),
|
||||
options.Description("Score threshold for clustering. If the score is normalized and expressed in similarity (default), "+
|
||||
"it is an identity, e.g. 0.95 for an identity of 95%. If the score is normalized and expressed in distance, "+
|
||||
"it is (1.0 - identity), e.g. 0.05 for an identity of 95%. If the score is not normalized and expressed in similarity, "+
|
||||
"it is the length of the Longest Common Subsequence. If the score is not normalized and expressed in distance, "+
|
||||
"it is (reference length - LCS length)."),
|
||||
)
|
||||
|
||||
options.StringVar(&_saveGraph, "save-graph", _saveGraph,
|
||||
options.Description("Creates a directory containing the set of DAG used by the obiclean clustering algorithm. "+
|
||||
"The graph files follow the graphml format."),
|
||||
)
|
||||
options.BoolVar(&_refShortest, "shortest", _refShortest,
|
||||
options.Alias("l"),
|
||||
options.Description("Reference sequence length is the shortest."))
|
||||
|
||||
options.StringVar(&_saveRatio, "save-ratio", _saveRatio,
|
||||
options.Description("Creates a file containing the set of abundance ratio on the graph edge. "+
|
||||
"The ratio file follows the csv format."),
|
||||
)
|
||||
options.BoolVar(&_refLongest, "longest", _refLongest,
|
||||
options.Alias("L"),
|
||||
options.Description("Reference sequence length is the longest."))
|
||||
|
||||
options.IntVar(&_minSample, "min-sample-count", _minSample,
|
||||
options.Description("Minimum number of samples a sequence must be present in to be considered in the analysis."),
|
||||
)
|
||||
options.BoolVar(&_refAlignment, "alignment", _refAlignment,
|
||||
options.Alias("a"),
|
||||
options.Description("Reference sequence length is the alignment length (default)."))
|
||||
|
||||
options.BoolVar(&_normalizedScore, "normalized-score", _normalizedScore,
|
||||
options.BoolVar(&_normalized, "normalized", _normalized,
|
||||
options.Alias("n"),
|
||||
options.Description("Use alignment score normalized by length"),
|
||||
)
|
||||
options.Description("Score is normalized by the reference sequence length (default)."))
|
||||
|
||||
options.BoolVar(&_shortReference, "shortest", _shortReference,
|
||||
options.Description("Use length of the shortest sequence to normalize alignment score."),
|
||||
)
|
||||
options.BoolVar(&_raw, "raw", _raw,
|
||||
options.Alias("r"),
|
||||
options.Description("Raw score, not normalized."))
|
||||
|
||||
options.BoolVar(&_longReference, "longest", _longReference,
|
||||
options.Description("Use length of the longest sequence to normalize alignment score."),
|
||||
)
|
||||
options.BoolVar(&_distance, "distance", _distance,
|
||||
options.Alias("d"),
|
||||
options.Description("Score is expressed in distance (default: score is expressed in similarity)."))
|
||||
|
||||
options.BoolVar(&_alignReference, "alignment", _alignReference,
|
||||
options.Description("Use alignment length to normalize alignment score."),
|
||||
)
|
||||
options.BoolVar(&_exact, "exact", _exact,
|
||||
options.Alias("e"),
|
||||
options.Description("A sequence is assigned to the cluster whose center presents the highest score "+
|
||||
"above the threshold, as opposed to the default 'fast' mode where it is assigned to the first "+
|
||||
"cluster found whose center presents a score above the threshold."))
|
||||
|
||||
options.BoolVar(&_distanceMode, "distance", _distanceMode,
|
||||
options.Description("Use alignment distance instead of similarity score."),
|
||||
)
|
||||
options.Float64Var(&_ratio, "ratio", _ratio,
|
||||
options.Alias("R"),
|
||||
options.ArgName("RATIO"),
|
||||
options.Description("Maximum ratio between the counts of two sequences so that the less abundant one "+
|
||||
"can be considered as a variant of the more abundant one (default: %3.2f)."))
|
||||
|
||||
options.BoolVar(&_exactMode, "exact", _exactMode,
|
||||
options.Description("Use exact clustering algorithm (default is greedy)."),
|
||||
)
|
||||
options.StringVar(&_sortKey, "sort", _sortKey,
|
||||
options.Alias("s"),
|
||||
options.ArgName("KEY"),
|
||||
options.Description("Sort the sequences on KEY before clustering. KEY must be 'None' for no sorting, "+
|
||||
"or an attribute of the sequences, except for the count that can be computed (default: sorting on count). "+
|
||||
"The sequences are sorted in decreasing order (see --ascending), ties being ordered "+
|
||||
"as in the input."))
|
||||
|
||||
options.BoolVar(&_sorted_by_length, "length-ordered", _sorted_by_length,
|
||||
options.Description("Sort sequence by length before clustering."),
|
||||
)
|
||||
options.BoolVar(&_sorted_by_abundance, "abundance-ordered", _sorted_by_abundance,
|
||||
options.Description("Sort sequence by read counts (abundance) before clustering."),
|
||||
)
|
||||
options.BoolVar(&_sortingAscending, "ascending-sorting", _sortingAscending,
|
||||
options.Description("Sort order is ascending (default is descending)."),
|
||||
)
|
||||
options.BoolVar(&_ascending, "ascending", _ascending,
|
||||
options.Description("Sorting is in ascending order (default: descending)."))
|
||||
|
||||
options.BoolVar(&_acceptAmbiguous, "accept-ambiguous", _acceptAmbiguous,
|
||||
options.Alias("g"),
|
||||
options.Description("Accept the sequences containing IUPAC letters other than a, c, g and t. "+
|
||||
"Such a sequence can be attached to a cluster (the alignment handles the IUPAC codes), "+
|
||||
"but cannot be the center of a cluster, and is left without cluster if it matches no center "+
|
||||
"(default: these sequences are discarded)."))
|
||||
|
||||
options.StringVar(&_otuMap, "otu-map", _otuMap,
|
||||
options.ArgName("FILENAME"),
|
||||
options.Description("Write the clusters to FILENAME as a CSV table, one row per sequence "+
|
||||
"(id, cluster, cluster_center, cluster_score, count), grouped by cluster."))
|
||||
|
||||
options.BoolVar(&_noSequenceOutput, "no-sequence-output", _noSequenceOutput,
|
||||
options.Alias("f"),
|
||||
options.Description("Do not write the sequences on the standard output."))
|
||||
}
|
||||
|
||||
func OptionSet(options *getoptions.GetOpt) {
|
||||
@@ -107,44 +112,63 @@ func OptionSet(options *getoptions.GetOpt) {
|
||||
ObiclustOptionSet(options)
|
||||
}
|
||||
|
||||
// It returns the name of the attibute used to store sample name
|
||||
func CLISampleAttribute() string {
|
||||
return _sampleAttribute
|
||||
}
|
||||
// CLIThreshold returns the clustering threshold as given on the command line.
|
||||
func CLIThreshold() float64 { return _threshold }
|
||||
|
||||
func CLIThreshold() float64 {
|
||||
return _threshold
|
||||
}
|
||||
// CLIRatio returns the maximum abundance ratio between a sequence and the center it is attached to.
|
||||
func CLIRatio() float64 { return _ratio }
|
||||
|
||||
// Returns true it the obliclean graphs must be saved
|
||||
func CLISaveGraphToFiles() bool {
|
||||
return _saveGraph != "__@@NOSAVE@@__"
|
||||
}
|
||||
// CLIExact returns true when a sequence must be attached to the best center and not to the first matching one.
|
||||
func CLIExact() bool { return _exact }
|
||||
|
||||
// It returns the directory where the graph files are saved
|
||||
func CLIGraphFilesDirectory() string {
|
||||
return _saveGraph
|
||||
}
|
||||
// CLIDistance returns true when the score is expressed in distance.
|
||||
func CLIDistance() bool { return _distance }
|
||||
|
||||
// Returns true it the table of ratio must be saved
|
||||
func CLIIsSaveRatioTable() bool {
|
||||
return _saveRatio != "__@@NOSAVE@@__"
|
||||
}
|
||||
|
||||
// It returns the filename of the file that stores the ratio table
|
||||
func CLIRatioTableFilename() string {
|
||||
return _saveRatio
|
||||
}
|
||||
|
||||
func CLINormalizationMode() ScoreNormalizationMode {
|
||||
switch {
|
||||
case _alignReference:
|
||||
return NormalizedByAlignment
|
||||
case _longReference:
|
||||
return NormalizedByLongest
|
||||
case _shortReference:
|
||||
return NormalizedByShortest
|
||||
default:
|
||||
return NoNormalization
|
||||
// CLINormalized returns true when the score is normalized by the reference length.
|
||||
func CLINormalized() bool {
|
||||
if _raw && _normalized {
|
||||
log.Fatal("The options --raw and --normalized are exclusive")
|
||||
}
|
||||
return !_raw
|
||||
}
|
||||
|
||||
// CLIReference returns the length used as reference to normalize the score.
|
||||
func CLIReference() reference {
|
||||
n := 0
|
||||
ref := refAlignment
|
||||
if _refShortest {
|
||||
n++
|
||||
ref = refShortest
|
||||
}
|
||||
if _refLongest {
|
||||
n++
|
||||
ref = refLongest
|
||||
}
|
||||
if _refAlignment {
|
||||
n++
|
||||
}
|
||||
if n > 1 {
|
||||
log.Fatal("The options --shortest, --longest and --alignment are exclusive")
|
||||
}
|
||||
return ref
|
||||
}
|
||||
|
||||
// CLISortKey returns the key used to sort the sequences, or "None".
|
||||
func CLISortKey() string {
|
||||
if _sortKey == "none" {
|
||||
return "None"
|
||||
}
|
||||
return _sortKey
|
||||
}
|
||||
|
||||
// CLIAscending returns true when the sort must be in ascending order.
|
||||
func CLIAscending() bool { return _ascending }
|
||||
|
||||
// CLIAcceptAmbiguous returns true when the sequences with IUPAC letters other than acgt are kept.
|
||||
func CLIAcceptAmbiguous() bool { return _acceptAmbiguous }
|
||||
|
||||
// CLIOTUMap returns the name of the OTU map file, empty if none is requested.
|
||||
func CLIOTUMap() string { return _otuMap }
|
||||
|
||||
// CLINoSequenceOutput returns true when the sequences must not be written.
|
||||
func CLINoSequenceOutput() bool { return _noSequenceOutput }
|
||||
@@ -0,0 +1,128 @@
|
||||
package obiclust
|
||||
|
||||
import (
|
||||
"git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obiitercsv"
|
||||
"git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obiseq"
|
||||
)
|
||||
|
||||
// Annotate writes the result of the clustering on the sequences and returns
|
||||
// them in the order sumaclust writes them: the groups of identical sequences
|
||||
// in their sorted order, each group beginning with its head.
|
||||
//
|
||||
// Every sequence receives
|
||||
// - cluster: the identifier of the center of its cluster;
|
||||
// - cluster_score: the score with this center;
|
||||
// - cluster_center: true for the center only;
|
||||
// - cluster_weight: the cumulated count of the sequences of the cluster.
|
||||
//
|
||||
// A sequence with IUPAC letters that matches no center belongs to no cluster:
|
||||
// it only gets cluster_center=false.
|
||||
func (res *Result) Annotate() obiseq.BioSequenceSlice {
|
||||
recs, groups, cl := res.recs, res.groups, res.clustered
|
||||
weight := make([]int, len(groups))
|
||||
for g := range groups {
|
||||
if cl.center[g] >= 0 {
|
||||
weight[cl.center[g]] += groups[g].count
|
||||
}
|
||||
}
|
||||
|
||||
out := make(obiseq.BioSequenceSlice, 0, len(recs))
|
||||
for g, grp := range groups {
|
||||
ctr := cl.center[g]
|
||||
|
||||
for r := grp.start; r < grp.end; r++ {
|
||||
s := recs[r].seq
|
||||
if ctr < 0 {
|
||||
// a sequence with IUPAC letters that matches no center
|
||||
s.RemoveAttribute("cluster")
|
||||
s.RemoveAttribute("cluster_score")
|
||||
s.RemoveAttribute("cluster_weight")
|
||||
s.SetAttribute("cluster_center", false)
|
||||
out = append(out, s)
|
||||
continue
|
||||
}
|
||||
centerID := recs[groups[ctr].start].seq.Id()
|
||||
s.SetAttribute("cluster", centerID)
|
||||
s.SetAttribute("cluster_score", cl.score[g])
|
||||
s.SetAttribute("cluster_center", ctr == g && r == grp.start)
|
||||
s.SetAttribute("cluster_weight", weight[ctr])
|
||||
out = append(out, s)
|
||||
}
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
// OTUMapIterator describes the clusters as a CSV table, one row per sequence:
|
||||
// - id: the identifier of the sequence;
|
||||
// - cluster: the identifier of the center of its cluster;
|
||||
// - cluster_center: true for the center only;
|
||||
// - cluster_score: the score with this center;
|
||||
// - count: the count of the sequence.
|
||||
//
|
||||
// The rows are grouped by cluster, in the order the clusters were created. In
|
||||
// a cluster, the center comes first, followed by the sequences identical to
|
||||
// it, then by the other members, each followed by its identical sequences.
|
||||
// The sequences without cluster (see Annotate) come last, with no cluster nor
|
||||
// score.
|
||||
func (res *Result) OTUMapIterator(source string, batchSize int) *obiitercsv.ICSVRecord {
|
||||
recs, groups, cl := res.recs, res.groups, res.clustered
|
||||
|
||||
iterator := obiitercsv.NewICSVRecord()
|
||||
iterator.Add(1)
|
||||
for _, field := range []string{"id", "cluster", "cluster_center", "cluster_score", "count"} {
|
||||
iterator.AppendField(field)
|
||||
}
|
||||
|
||||
members := make(map[int][]int, len(cl.centers))
|
||||
var orphans []int
|
||||
for g := range groups {
|
||||
if ctr := cl.center[g]; ctr >= 0 {
|
||||
members[ctr] = append(members[ctr], g)
|
||||
} else {
|
||||
orphans = append(orphans, g)
|
||||
}
|
||||
}
|
||||
|
||||
go func() {
|
||||
iterator.WaitAndClose()
|
||||
}()
|
||||
|
||||
go func() {
|
||||
order := 0
|
||||
batch := make([]obiitercsv.CSVRecord, 0, batchSize)
|
||||
add := func(g int) {
|
||||
ctr := cl.center[g]
|
||||
for r := groups[g].start; r < groups[g].end; r++ {
|
||||
row := obiitercsv.CSVRecord{
|
||||
"id": recs[r].seq.Id(),
|
||||
"cluster_center": ctr == g && r == groups[g].start,
|
||||
"count": recs[r].count,
|
||||
}
|
||||
if ctr >= 0 {
|
||||
row["cluster"] = recs[groups[ctr].start].seq.Id()
|
||||
row["cluster_score"] = cl.score[g]
|
||||
}
|
||||
batch = append(batch, row)
|
||||
if len(batch) == batchSize {
|
||||
iterator.Push(obiitercsv.MakeCSVRecordBatch(source, order, batch))
|
||||
order++
|
||||
batch = make([]obiitercsv.CSVRecord, 0, batchSize)
|
||||
}
|
||||
}
|
||||
}
|
||||
for _, ctr := range cl.centers {
|
||||
for _, g := range members[ctr] {
|
||||
add(g)
|
||||
}
|
||||
}
|
||||
for _, g := range orphans {
|
||||
add(g)
|
||||
}
|
||||
if len(batch) > 0 || order == 0 {
|
||||
iterator.Push(obiitercsv.MakeCSVRecordBatch(source, order, batch))
|
||||
}
|
||||
iterator.Done()
|
||||
}()
|
||||
|
||||
return iterator
|
||||
}
|
||||
@@ -0,0 +1,178 @@
|
||||
package obiclust
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obiseq"
|
||||
"git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obiutils"
|
||||
log "github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
// record is a sequence of the dataset.
|
||||
type record struct {
|
||||
seq *obiseq.BioSequence
|
||||
pos int // position in the dataset
|
||||
clean []byte // the nucleotides of the sequence, in lower case
|
||||
count int
|
||||
key float64 // value of the sorting key
|
||||
ambiguous bool // contains IUPAC letters other than a, c, g and t
|
||||
}
|
||||
|
||||
// group is a run of identical sequences: recs[start] is its head, the
|
||||
// following ones are the duplicates. count is the cumulated count, key the
|
||||
// value of the sorting key of the head.
|
||||
type group struct {
|
||||
start, end int
|
||||
count int
|
||||
key float64
|
||||
}
|
||||
|
||||
// nucleotide classes of a byte
|
||||
const (
|
||||
notNucleotide = iota
|
||||
plainNucleotide
|
||||
ambiguousNucleotide
|
||||
)
|
||||
|
||||
var nucleotideClass = func() (t [256]uint8) {
|
||||
for _, c := range "acgt" {
|
||||
t[c] = plainNucleotide
|
||||
}
|
||||
for _, c := range "umrwsykvhdbn" {
|
||||
t[c] = ambiguousNucleotide
|
||||
}
|
||||
return t
|
||||
}()
|
||||
|
||||
// classify returns the nucleotides of a sequence and tells if it contains
|
||||
// IUPAC letters other than a, c, g and t. nil is returned if the sequence is
|
||||
// empty, or contains anything else than IUPAC letters (and also IUPAC letters
|
||||
// other than a, c, g and t unless ambiguous ones are accepted).
|
||||
func classify(s []byte, acceptAmbiguous bool) (clean []byte, ambiguous bool) {
|
||||
if len(s) == 0 {
|
||||
return nil, false
|
||||
}
|
||||
for _, c := range s {
|
||||
switch nucleotideClass[c] {
|
||||
case notNucleotide:
|
||||
return nil, false
|
||||
case ambiguousNucleotide:
|
||||
if !acceptAmbiguous {
|
||||
return nil, false
|
||||
}
|
||||
ambiguous = true
|
||||
}
|
||||
}
|
||||
return s, ambiguous
|
||||
}
|
||||
|
||||
// atof reads the leading number of a string as C atof does.
|
||||
func atof(v interface{}) float64 {
|
||||
if s, ok := v.(string); ok {
|
||||
s = strings.TrimSpace(s)
|
||||
for n := len(s); n > 0; n-- {
|
||||
if f, err := strconv.ParseFloat(s[:n], 64); err == nil {
|
||||
return f
|
||||
}
|
||||
}
|
||||
return 0
|
||||
}
|
||||
f, err := obiutils.InterfaceToFloat64(v)
|
||||
if err != nil {
|
||||
return 0
|
||||
}
|
||||
return f
|
||||
}
|
||||
|
||||
// sortKeyOf returns the value of the sorting key of a sequence.
|
||||
func sortKeyOf(s *obiseq.BioSequence, key string) float64 {
|
||||
if key == "count" {
|
||||
return float64(s.Count())
|
||||
}
|
||||
v, ok := s.GetAttribute(key)
|
||||
if !ok {
|
||||
log.Fatalf("'%s' is not an attribute of the sequence %s", key, s.Id())
|
||||
}
|
||||
return atof(v)
|
||||
}
|
||||
|
||||
// prepare reads the sequences, groups the identical ones and orders them.
|
||||
//
|
||||
// The order is fully determined, whatever the sorting algorithm:
|
||||
//
|
||||
// 1. the records of a group of identical sequences are ordered on the
|
||||
// sorting key (decreasing, increasing if ascending), then on their
|
||||
// position in the dataset; the first one is the head of the group, whose
|
||||
// identifier names the cluster if it is a center;
|
||||
// 2. the groups are ordered on the sorting key of their head (the count of
|
||||
// the whole group if the key is "count"), then on the position of the
|
||||
// head in the dataset. With the key "None" they are in the order of the
|
||||
// first occurrence of their sequence.
|
||||
//
|
||||
// The sequences containing anything else than a, c, g and t are discarded,
|
||||
// except if acceptAmbiguous is set and they only contain IUPAC letters: they
|
||||
// are then kept, but cannot be the center of a cluster.
|
||||
func prepare(db obiseq.BioSequenceSlice, key string, ascending, acceptAmbiguous bool) ([]record, []group, int) {
|
||||
recs := make([]record, 0, len(db))
|
||||
discarded := 0
|
||||
|
||||
for pos, s := range db {
|
||||
clean, ambiguous := classify(s.Sequence(), acceptAmbiguous)
|
||||
if clean == nil {
|
||||
discarded++
|
||||
continue
|
||||
}
|
||||
r := record{seq: s, pos: pos, clean: clean, count: s.Count(), ambiguous: ambiguous}
|
||||
if key != "None" {
|
||||
r.key = sortKeyOf(s, key)
|
||||
}
|
||||
recs = append(recs, r)
|
||||
}
|
||||
|
||||
// before reports whether a is ranked before b by the sorting key
|
||||
before := func(a, b float64) bool {
|
||||
if ascending {
|
||||
return a < b
|
||||
}
|
||||
return a > b
|
||||
}
|
||||
|
||||
sort.Slice(recs, func(i, j int) bool {
|
||||
a, b := &recs[i], &recs[j]
|
||||
if c := bytes.Compare(a.clean, b.clean); c != 0 {
|
||||
return c < 0
|
||||
}
|
||||
if a.key != b.key && key != "None" {
|
||||
return before(a.key, b.key)
|
||||
}
|
||||
return a.pos < b.pos
|
||||
})
|
||||
|
||||
groups := make([]group, 0, len(recs))
|
||||
for i := 0; i < len(recs); {
|
||||
j, count := i+1, recs[i].count
|
||||
for j < len(recs) && bytes.Equal(recs[j].clean, recs[i].clean) {
|
||||
count += recs[j].count
|
||||
j++
|
||||
}
|
||||
g := group{start: i, end: j, count: count, key: recs[i].key}
|
||||
if key == "count" {
|
||||
g.key = float64(count)
|
||||
}
|
||||
groups = append(groups, g)
|
||||
i = j
|
||||
}
|
||||
|
||||
sort.Slice(groups, func(i, j int) bool {
|
||||
a, b := &groups[i], &groups[j]
|
||||
if key != "None" && a.key != b.key {
|
||||
return before(a.key, b.key)
|
||||
}
|
||||
return recs[a.start].pos < recs[b.start].pos
|
||||
})
|
||||
|
||||
return recs, groups, discarded
|
||||
}
|
||||
@@ -0,0 +1,233 @@
|
||||
package obiclust
|
||||
|
||||
import (
|
||||
"math"
|
||||
|
||||
"git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obialign"
|
||||
log "github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
// entry is a distinct sequence of the dataset with what the clustering needs.
|
||||
type entry struct {
|
||||
seq []byte
|
||||
length int
|
||||
count int // cumulated count of the identical sequences
|
||||
table *table4
|
||||
sparse []uint16 // words of the table (see sparseWords), nil if unusable
|
||||
// ambiguous sequences contain IUPAC letters other than a, c, g and t:
|
||||
// they have no 4-mer table, and cannot be the center of a cluster
|
||||
ambiguous bool
|
||||
}
|
||||
|
||||
// scoring holds the way sumaclust scores a pair of sequences and decides
|
||||
// whether it passes the threshold. It reproduces the arithmetic of the
|
||||
// reference implementation (integer truncations, floating point
|
||||
// comparisons) so that the same pairs are accepted with the same scores.
|
||||
type scoring struct {
|
||||
threshold float64 // threshold as used for the comparison (1 - t for a normalized distance)
|
||||
normalize bool
|
||||
lcsmode bool // true: score is a similarity, false: it is a distance
|
||||
ref reference
|
||||
ratio float64
|
||||
worst float64 // score of a pair that cannot be attached
|
||||
|
||||
// byLength gives, for the pairs whose longest sequence has a length l,
|
||||
// the values that depend on l only. It is built when the reference is not
|
||||
// the shortest sequence, otherwise those values depend on both lengths.
|
||||
byLength []lengthInfo
|
||||
}
|
||||
|
||||
type lengthInfo struct {
|
||||
lcsMin int32 // see lcsMin
|
||||
minCommon int32 // see minCommon
|
||||
}
|
||||
|
||||
// prepareLengths fills byLength for the lengths up to lmax.
|
||||
func (sc *scoring) prepareLengths(lmax int) {
|
||||
if sc.ref == refShortest {
|
||||
return
|
||||
}
|
||||
sc.byLength = make([]lengthInfo, lmax+1)
|
||||
for l := range sc.byLength {
|
||||
sc.byLength[l] = lengthInfo{int32(sc.lcsMin(l, l)), int32(sc.minCommon(l, l))}
|
||||
}
|
||||
}
|
||||
|
||||
// similarityLike tells if the comparison with the threshold is "score >= threshold".
|
||||
func (sc *scoring) similarityLike() bool { return sc.lcsmode || sc.normalize }
|
||||
|
||||
// lcsMin is the smallest LCS score that a pair of lengths l1 >= l2 can have
|
||||
// and still pass the threshold (calculateLCSmin of sumaclust).
|
||||
func (sc *scoring) lcsMin(l1, l2 int) int {
|
||||
switch {
|
||||
case sc.threshold <= 0:
|
||||
return 0
|
||||
case sc.normalize:
|
||||
if sc.ref == refShortest {
|
||||
return int(sc.threshold * float64(l2))
|
||||
}
|
||||
return int(sc.threshold * float64(l1))
|
||||
case sc.lcsmode:
|
||||
return int(sc.threshold)
|
||||
case sc.ref == refShortest:
|
||||
return int(float64(l2) - sc.threshold)
|
||||
default:
|
||||
return int(float64(l1) - sc.threshold)
|
||||
}
|
||||
}
|
||||
|
||||
// minCommon is the number of 4-mers that two sequences of lengths l1 >= l2
|
||||
// must share to be possibly similar enough (isPossibleSumathings).
|
||||
func (sc *scoring) minCommon(l1, l2 int) int {
|
||||
reflen := l2
|
||||
if sc.ref == refAlignment || sc.ref == refLongest {
|
||||
reflen = l1
|
||||
}
|
||||
var lcs int
|
||||
if sc.normalize {
|
||||
lcs = int(math.Ceil(float64(reflen) * sc.threshold))
|
||||
} else {
|
||||
th := sc.threshold
|
||||
if !sc.lcsmode {
|
||||
th = float64(reflen) - th
|
||||
}
|
||||
lcs = int(th)
|
||||
}
|
||||
return minCommonWords(l1, lcs)
|
||||
}
|
||||
|
||||
// pairScore returns the score of a query sequence against a center, or the
|
||||
// worst score when the pair cannot be attached.
|
||||
//
|
||||
// common, if not negative, is the sum of the minima of the 4-mer counters of
|
||||
// the two sequences, already computed by a block of tables.
|
||||
func (sc *scoring) pairScore(q, c *entry, common int, buf *obialign.BandedLCSBuffer) float64 {
|
||||
// The quotient of two counts is not above 1 when the first is not above
|
||||
// the second, which spares the division in the usual case.
|
||||
if !(sc.ratio >= 1 && q.count <= c.count) && float64(q.count)/float64(c.count) > sc.ratio {
|
||||
return sc.worst
|
||||
}
|
||||
|
||||
l1, l2 := q.length, c.length
|
||||
long, short := q, c
|
||||
if l1 < l2 {
|
||||
l1, l2 = l2, l1
|
||||
long, short = c, q
|
||||
}
|
||||
var lcsMin, minCommon int
|
||||
if sc.byLength != nil {
|
||||
info := sc.byLength[l1]
|
||||
lcsMin, minCommon = int(info.lcsMin), int(info.minCommon)
|
||||
} else {
|
||||
lcsMin, minCommon = sc.lcsMin(l1, l2), sc.minCommon(l1, l2)
|
||||
}
|
||||
if l2 < lcsMin {
|
||||
return sc.worst
|
||||
}
|
||||
// The 4-mer filter counts identical words: it does not hold when IUPAC
|
||||
// codes can match different letters. It lets short sequences pass.
|
||||
if l1 >= 12 && l2 >= 12 && !long.ambiguous && !short.ambiguous {
|
||||
if common >= 0 {
|
||||
common += min(long.table.overflow, short.table.overflow)
|
||||
} else {
|
||||
common = commonWords(long.table, short.table)
|
||||
}
|
||||
if common < minCommon {
|
||||
return sc.worst
|
||||
}
|
||||
}
|
||||
|
||||
// The length of the alignment is needed only to normalize by it, or to
|
||||
// express a distance with it; the score alone is much cheaper.
|
||||
var lcs, alilen int
|
||||
var err error
|
||||
if sc.ref == refAlignment && (sc.normalize || !sc.lcsmode) {
|
||||
lcs, alilen, err = buf.AtLeast(q.seq, c.seq, lcsMin)
|
||||
} else {
|
||||
lcs, err = buf.ScoreAtLeast(q.seq, c.seq, lcsMin)
|
||||
}
|
||||
if err != nil {
|
||||
log.Fatalf("Cannot align two sequences: %v", err)
|
||||
}
|
||||
if lcs < 0 {
|
||||
// The best alignment has a score under lcsMin: the pair cannot pass.
|
||||
return sc.worst
|
||||
}
|
||||
|
||||
id := float64(lcs)
|
||||
if !sc.lcsmode && !sc.normalize {
|
||||
switch sc.ref {
|
||||
case refAlignment:
|
||||
id = float64(alilen) - id
|
||||
case refLongest:
|
||||
id = float64(l1) - id
|
||||
case refShortest:
|
||||
id = float64(l2) - id
|
||||
}
|
||||
}
|
||||
if sc.normalize {
|
||||
switch sc.ref {
|
||||
case refAlignment:
|
||||
id /= float64(alilen)
|
||||
case refLongest:
|
||||
id /= float64(l1)
|
||||
case refShortest:
|
||||
id /= float64(l2)
|
||||
}
|
||||
}
|
||||
return id
|
||||
}
|
||||
|
||||
// beats tells if the score s is better than the score best (without any
|
||||
// threshold).
|
||||
func (sc *scoring) beats(s, best float64) bool {
|
||||
if sc.similarityLike() {
|
||||
return s > best
|
||||
}
|
||||
return s < best
|
||||
}
|
||||
|
||||
// lcsMinFor is lcsMin for sequences of lengths l1 >= l2, from the table when it exists.
|
||||
func (sc *scoring) lcsMinFor(l1, l2 int) int {
|
||||
if sc.byLength != nil {
|
||||
return int(sc.byLength[l1].lcsMin)
|
||||
}
|
||||
return sc.lcsMin(l1, l2)
|
||||
}
|
||||
|
||||
// lengthCompatible tells if two sequences of these lengths may be similar enough:
|
||||
// the shortest cannot be shorter than the minimum LCS score of the pair.
|
||||
func (sc *scoring) lengthCompatible(la, lb int) bool {
|
||||
l1, l2 := max(la, lb), min(la, lb)
|
||||
return l2 >= sc.lcsMinFor(l1, l2)
|
||||
}
|
||||
|
||||
// selects tells if a pair of score s must replace the best pair found so far,
|
||||
// of score best.
|
||||
func (sc *scoring) selects(s, best float64) bool {
|
||||
if sc.similarityLike() {
|
||||
return s >= sc.threshold && s > best
|
||||
}
|
||||
return s <= sc.threshold && s < best
|
||||
}
|
||||
|
||||
// centerScore is the score of a sequence with itself.
|
||||
func (sc *scoring) centerScore(length int) float64 {
|
||||
switch {
|
||||
case sc.normalize && sc.lcsmode:
|
||||
return 1.0
|
||||
case !sc.lcsmode:
|
||||
return 0.0
|
||||
default:
|
||||
return float64(length)
|
||||
}
|
||||
}
|
||||
|
||||
// memberScore is the score reported for a sequence attached to a center
|
||||
// with the score s.
|
||||
func (sc *scoring) memberScore(s float64) float64 {
|
||||
if !sc.lcsmode && sc.normalize {
|
||||
return 1.0 - s
|
||||
}
|
||||
return s
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
families default -t 0.9
|
||||
families exact -t 0.9 -e
|
||||
families shortest -t 0.9 -l -e
|
||||
families longest -t 0.85 -L
|
||||
families distance -t 0.1 -d
|
||||
families rawdist -t 4 -r -d -e
|
||||
families rawlcs -t 40 -r
|
||||
families ratio -t 0.9 -R 0.5
|
||||
families ascending -t 0.9 -o
|
||||
@@ -0,0 +1,101 @@
|
||||
f5v2s55 f5v2s55 1.000000 T 666 cggcatcgcaccataagatggtaatcactaaaaaaatcggcctaacctgtccatatcgccact
|
||||
f1v6s15 f1v6s15 1.000000 T 3070 gaatcagcttctaaccaagcgttgcagaaccggctactttaagcatgatgaatgcgtcgtaagtgatactcgacgattc
|
||||
f7v2s66 f7v2s66 1.000000 T 3988 gcttcgtgggaaccagaacaaccgacatattccgaaccaccggacatacgatccttaaacc
|
||||
f4v7s51 f4v7s51 1.000000 T 8599 cgtttattcgtaggatctactacgcatcaaagtatcccacttttgtaccccactaagagcaga
|
||||
f5v1s54 f5v1s54 1.000000 T 9091 cggaacgcaccataagatggtaatcactaaaaaaatcggcctaacctgtccatatcgccactt
|
||||
f7v1s65 f7v1s65 1.000000 T 11279 gcttcggggaaccagagacaaccgacatatttcgaaccaccgacatacgatcctttaaacc
|
||||
f3v8s39 f3v8s39 1.000000 T 13623 cgaaaaaggtgaatgaaaggcctgggacgctcctggttggggcgctctaggtgtgtggcttgaacgttagacct
|
||||
f4v4s48 f4v4s48 1.000000 T 15906 ctgtattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaagagaaa
|
||||
f3v11s42 f3v11s42 1.000000 T 18309 cgaaaaaggtgaatgaaagtctgggacgctcctggtttgggacgctctaggtgttgtggcttgaacgttagcacct
|
||||
f6v3s63 f6v3s63 1.000000 T 19024 catgtcaagagactggaaccccggtgatgtgaaaaaaggttttgggtcacgtctccatggctacg
|
||||
f11v3s94 f11v3s94 1.000000 T 21189 agcgttagcaaagagcctggttaatcgccgtcgaaggatcggtggtgatcagagatgcgggcatccgtttc
|
||||
f2v6s24 f2v6s24 1.000000 T 21984 tggactagtagacgtgtgcctcatcgacgcgtgagacactttgatttcttatacggcgtctcag
|
||||
f0v8s8 f0v8s8 1.000000 T 24872 ggatcacagtcctacactgctcactccaaccccggccctgagtccgaggagagggtgcttcagagtatgtataccactg
|
||||
f7v3s67 f7v3s67 1.000000 T 26251 gcttcgtgggaccagagacaaccgacatatttcgaaccaccgacatacgatccttaaacc
|
||||
f2v9s27 f2v9s27 1.000000 T 26719 tggactagtagaccgtgtgcctaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f4v5s49 f4v5s49 1.000000 T 26933 ctatattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaagagaagca
|
||||
f11v9s100 f11v9s100 1.000000 T 27405 agcgttagcaaaggagcctggttaatcgccctcgaggatcggtggtgatcagagatgcgggcatccgtttc
|
||||
f2v12s30 f2v12s30 1.000000 T 27908 tggactagtagaccgtgtgccacaatcgacgctgaggacacgttgatttttatacggcgtctcag
|
||||
f9v0s76 f9v0s76 1.000000 T 29993 gggatcgtggcaagcaacccttgccgcctcgactgcggctaaagacgcatgttccagtaataccta
|
||||
f4v6s50 f4v6s50 1.000000 T 30723 ctgtattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaagacgaagag
|
||||
f6v2s62 f6v2s62 1.000000 T 33001 catgtcgagagactggaaccccggtgatgtgaaaaaaggtcttgggtacgtcccatggctac
|
||||
f11v5s96 f11v5s96 1.000000 T 33026 agcgttagcaaagagcctggttaatggccctcgaggatcggtggctgaccagagatgcgggcatccgtttc
|
||||
f8v1s69 f8v1s69 1.000000 T 33813 aagaccttgaacacctctaagcgaaaattggatatcgagtcagggaacataaccacgggtgcgt
|
||||
f11v4s95 f11v4s95 1.000000 T 34530 agcgttagcaaagagcctggttaatcccctcgagatcgggtggtgatcagagatgcgggcatccgtttc
|
||||
f3v9s40 f3v9s40 1.000000 T 35203 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggggttgtggcttgaacgttagcacct
|
||||
f11v2s93 f11v2s93 1.000000 T 35758 agcgttagcaaagagcctggttaatcgccctcggaggatcggtggtgatcagagatgcgggcatccgttc
|
||||
f10v6s83 f10v6s83 1.000000 T 36011 ttccggacactcgcaatcttccaagcagaggtccagctaacacacagcaggcatttagtcctgatgggtagc
|
||||
f3v7s38 f3v7s38 1.000000 T 36703 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttcgtgcttgaacgttagcacct
|
||||
f3v10s41 f3v10s41 1.000000 T 37492 cgaaaataaggtgaatgaaagggtgggacgctcctagtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f5v4s57 f5v4s57 1.000000 T 38613 cggcaacgcaccataagatggtaatcactaaaaaaatcggcctaacctgtccatatcgccactat
|
||||
f10v1s78 f10v1s78 1.000000 T 43528 ttgccggacactcgcaatcctccaagcagaggtccagctaacacacagcaggcatttagtcccgatgaggtagc
|
||||
f10v8s85 f10v8s85 1.000000 T 46704 ttgccggacactcgaatcttccaagcagaggtccagctaacacacagcaggcatactagtcccgatgggtagc
|
||||
f6v0s60 f6v0s60 1.000000 T 48958 catgtcaagagactggaaccccggtgatgtgaaaaaaggtcttgggtacgtcccatggctacg
|
||||
f8v6s74 f8v6s74 1.000000 T 49062 aagacccttgaacacctctaagcgaaaattggattcgagtcagggaacataaccacgggtgccgt
|
||||
f1v0s9 f1v0s9 1.000000 T 49791 gaatcagcttctaaccaagcgatgcagaaccggctactttaagcattgatgaatgcgtcgtaagtgatactcgacgattc
|
||||
f5v5s58 f5v5s58 1.000000 T 49852 cgcaacgcaccattaagatggtaatcactaaaaaaatcggcctaacctgtccaatcgccactt
|
||||
f0v5s5 f0v5s5 1.000000 T 54120 ggatcacagtctacactgctcactcccccccggcccctgagtccgaggagagggtgcttcaaagtatgtataccactg
|
||||
f4v1s45 f4v1s45 1.000000 T 55908 ctgtatttcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactatagagaaga
|
||||
f11v6s97 f11v6s97 1.000000 T 58908 agcgttagcaaagaacctggttaatcgccctcgaggatcggtggtggatcggagatgcgggcatcgcgtttc
|
||||
f3v4s35 f3v4s35 1.000000 T 59170 cgaaaaaggtgaagaaaggctgggacgctcctggttggcgcgctctaggtgttgtggcttgaacgttagcaccta
|
||||
f3v1s32 f3v1s32 1.000000 T 59632 cgaaaaagagtgaatgaaatggctgggacgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f8v4s72 f8v4s72 1.000000 T 59724 aagacttgaacacctctaagcgaaaattggattcgagtcagggaacataaccacgggtgcgt
|
||||
f8v5s73 f8v5s73 1.000000 T 64084 aagaccttgtacacctctaagcgataaattggattcgagtcagggaacataaccacggatgcgt
|
||||
f11v0s91 f11v0s91 1.000000 T 66160 agcgttagcaaagagcctggttaatcgccctcgaggatcggtggtgatcagagatgcgggcatccgtttc
|
||||
f10v10s87 f10v10s87 1.000000 T 66794 tctgccggacactcgcaatcttccaagcagaggtccagctaacacacgcaggcatttatccgatgggtagc
|
||||
f4v3s47 f4v3s47 1.000000 T 69396 ctgtattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaaagaaga
|
||||
f8v3s71 f8v3s71 1.000000 T 70497 aagaccttgaacacctctaagcgaaattggattcgagtcagcgaacataacacgggtgcgt
|
||||
f3v2s33 f3v2s33 1.000000 T 70860 cgaaaaaaggtaatgaaaggctgggatgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcact
|
||||
f11v1s92 f11v1s92 1.000000 T 71853 agcgttagcaaagagcctggttcatcgccctcgaggatcggtggtgatcaagagatgcggcatccgtttc
|
||||
f7v0s64 f7v0s64 1.000000 T 72498 gcttcgtgggaaccagagacaaccgacatatttcgaaccaccgacatacgatccttaaacc
|
||||
f11v8s99 f11v8s99 1.000000 T 72674 agcgttagcaaagagcctggttaatctgccctcgaggatcggtggtgatcagagatgcgggcatccgtttc
|
||||
f8v2s70 f8v2s70 1.000000 T 74088 aagaccttgaacaacctctaagccgaaattggaattcgagtcagggaacataaccacgggtgcgat
|
||||
f4v2s46 f4v2s46 1.000000 T 74433 ctgtattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaagagaaga
|
||||
f10v12s89 f10v12s89 1.000000 T 74438 ttgccggacactcgcaatcttccaagcagaggtccagctaacacacacgcaggcatttagacccgatgggtagc
|
||||
f8v7s75 f8v7s75 1.000000 T 75803 aagaccttgaacacctctaagcgaaaattggattccagtcagggaaccataaccacgggtgcgt
|
||||
f3v5s36 f3v5s36 1.000000 T 76948 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttatggcttgaaagttagcacct
|
||||
f10v11s88 f10v11s88 1.000000 T 78894 ttgccggacactcgcaatcttccaagcagaggtccagctaactcacagccaggcatttagtcccgatgggtagc
|
||||
f1v8s17 f1v8s17 1.000000 T 79492 gaatcaggttcttccaagcgctgcagaaccggctactttaagcattgatgaatgcgtcagtaagtgatacccgacgattc
|
||||
f2v1s19 f1v8s17 1.000000 F 79492 gaatcaggttcttccaagcgctgcagaaccggctactttaagcattgatgaatgcgtcagtaagtgatacccgacgattc
|
||||
f8v0s68 f8v0s68 1.000000 T 80207 aagaccttgaacacctctaagcgaaaattggattcgagtcagggaacataaccacgggtgcgt
|
||||
f3v12s43 f3v12s43 1.000000 T 80835 cgaaaaaggtgaatgaaagactgggacgcctcctggtttgggacgctctaggtggttgtggcttgaacgttagcacct
|
||||
f2v5s23 f2v5s23 1.000000 T 81657 gaatcagcttcaaccaagcgatgcagaaccgctgctttaagcatgatgaatcgtcgtaagtgatactcgacgattc
|
||||
f1v7s16 f2v5s23 1.000000 F 81657 gaatcagcttcaaccaagcgatgcagaaccgctgctttaagcatgatgaatcgtcgtaagtgatactcgacgattc
|
||||
f0v2s2 f0v2s2 1.000000 T 83299 ggatcacagtctacactgctcactccaaccccggcccctgagtccgaggagagggtgcttcagagtatgtataccactg
|
||||
f0v0s0 f0v2s2 1.000000 F 83299 ggatcacagtctacactgctcactccaaccccggcccctgagtccgaggagagggtgcttcagagtatgtataccactg
|
||||
f1v3s12 f1v3s12 1.000000 T 84418 ggatcacagtctacactgctccctccaaccccggcccctggtccgaggagagggtgcttcagagtattataccactg
|
||||
f0v6s6 f1v3s12 1.000000 F 84418 ggatcacagtctacactgctccctccaaccccggcccctggtccgaggagagggtgcttcagagtattataccactg
|
||||
f2v11s29 f2v11s29 1.000000 T 85592 tggactgtagaaccgtgtgcctcaatccacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f4v8s52 f4v8s52 1.000000 T 86639 ctgatattcgtattgatctactacgtatcaaagtatcccacttttgtgaccccactaagagaaga
|
||||
f10v5s82 f10v5s82 1.000000 T 87843 ttgccggacactcgcaatcttccaagcagaggtccagctaacacatagcaggcatttagtcccgatgggtagc
|
||||
f10v4s81 f10v4s81 1.000000 T 88973 ttgccggacactggcaatcttccatagcagaggtccagctaacacacagcaggcatttagtcccgatgggtagc
|
||||
f1v4s13 f1v4s13 1.000000 T 90139 gaatcagcttctcaaccaagcgatgcagaaccggctactttaagcattgatgaatgcgtcgtaagtgatactggacgattc
|
||||
f10v13s90 f10v13s90 1.000000 T 92493 tgccggacactcgcaatctccaagcagagagtccaagctaacacacagcaggcatttgtcccgatgggtagc
|
||||
f10v2s79 f10v2s79 1.000000 T 93964 ttgccggtcactcgcaatcttaccaaccagaggtccagctaacacacagcaggcatttagtcccgatgggtagc
|
||||
f5v3s56 f5v3s56 1.000000 T 94426 ccgcaacgcaccataagatgtaatcactaagaaaaatcggcctaacctgtcatatcgccactt
|
||||
f0v3s3 f0v3s3 1.000000 T 95466 ggatcacagtctacactgctcactccagaccccgcccctgagtccgaggagagggtgcttcagagtatgttaccactg
|
||||
f0v1s1 f0v3s3 1.000000 F 95466 ggatcacagtctacactgctcactccagaccccgcccctgagtccgaggagagggtgcttcagagtatgttaccactg
|
||||
f0v4s4 f0v3s3 1.000000 F 95466 ggatcacagtctacactgctcactccagaccccgcccctgagtccgaggagagggtgcttcagagtatgttaccactg
|
||||
f1v5s14 f0v3s3 1.000000 F 95466 ggatcacagtctacactgctcactccagaccccgcccctgagtccgaggagagggtgcttcagagtatgttaccactg
|
||||
f2v10s28 f2v10s28 1.000000 T 97350 ggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f5v6s59 f2v10s28 1.000000 F 97350 ggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f10v0s77 f10v0s77 1.000000 T 97674 ttgccggacactcgcaatcttccaagcagaggtccagctaacacacagcaggcatttagtcccgatgggtagc
|
||||
f10v7s84 f10v7s84 1.000000 T 98678 gtgccggacactcgcaatcttcacaagcagaggtccagctaacacacagcagcatttagtcccgatgggtagc
|
||||
f2v4s22 f2v4s22 1.000000 T 99661 tggactagtagaccgtgtcgcctcaatcgacgcgtgaggacacgttgattcttatacggcgtctcag
|
||||
f11v7s98 f11v7s98 1.000000 T 167833 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgtctctaggttgttgtggctgaacgtagcact
|
||||
f5v0s53 f11v7s98 1.000000 F 167833 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgtctctaggttgttgtggctgaacgtagcact
|
||||
f3v6s37 f11v7s98 1.000000 F 167833 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgtctctaggttgttgtggctgaacgtagcact
|
||||
f1v1s10 f1v1s10 1.000000 T 173457 ggatcacacgtctatcactgctcactccaaccccggcccttgacgtccgaggagagggtgcttctgagtatgtatacccaactg
|
||||
f1v2s11 f1v1s10 1.000000 F 173457 ggatcacacgtctatcactgctcactccaaccccggcccttgacgtccgaggagagggtgcttctgagtatgtatacccaactg
|
||||
f0v7s7 f1v1s10 1.000000 F 173457 ggatcacacgtctatcactgctcactccaaccccggcccttgacgtccgaggagagggtgcttctgagtatgtatacccaactg
|
||||
f3v0s31 f3v0s31 1.000000 T 182106 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f4v0s44 f3v0s31 1.000000 F 182106 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f3v3s34 f3v0s31 1.000000 F 182106 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f2v2s20 f2v2s20 1.000000 T 243753 tggactagtagaccgtgtgcctcaatcgacgcggaggacacgttgatttcttatacggcgtctcag
|
||||
f6v1s61 f2v2s20 1.000000 F 243753 tggactagtagaccgtgtgcctcaatcgacgcggaggacacgttgatttcttatacggcgtctcag
|
||||
f2v3s21 f2v2s20 1.000000 F 243753 tggactagtagaccgtgtgcctcaatcgacgcggaggacacgttgatttcttatacggcgtctcag
|
||||
f10v9s86 f10v9s86 1.000000 T 260688 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f2v7s25 f10v9s86 1.000000 F 260688 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f2v0s18 f10v9s86 1.000000 F 260688 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f10v3s80 f10v9s86 1.000000 F 260688 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f2v8s26 f10v9s86 1.000000 F 260688 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
@@ -0,0 +1,101 @@
|
||||
f2v8s26 f2v8s26 1.000000 T 863655 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f10v3s80 f2v8s26 1.000000 F 863655 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f2v0s18 f2v8s26 1.000000 F 863655 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f2v7s25 f2v8s26 1.000000 F 863655 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f10v9s86 f2v8s26 1.000000 F 863655 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f2v3s21 f2v8s26 0.985075 F 863655 tggactagtagaccgtgtgcctcaatcgacgcggaggacacgttgatttcttatacggcgtctcag
|
||||
f6v1s61 f2v8s26 0.985075 F 863655 tggactagtagaccgtgtgcctcaatcgacgcggaggacacgttgatttcttatacggcgtctcag
|
||||
f2v2s20 f2v8s26 0.985075 F 863655 tggactagtagaccgtgtgcctcaatcgacgcggaggacacgttgatttcttatacggcgtctcag
|
||||
f3v3s34 f3v3s34 1.000000 T 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f4v0s44 f3v3s34 1.000000 F 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f3v0s31 f3v3s34 1.000000 F 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f0v7s7 f0v7s7 1.000000 T 281628 ggatcacacgtctatcactgctcactccaaccccggcccttgacgtccgaggagagggtgcttctgagtatgtatacccaactg
|
||||
f1v2s11 f0v7s7 1.000000 F 281628 ggatcacacgtctatcactgctcactccaaccccggcccttgacgtccgaggagagggtgcttctgagtatgtatacccaactg
|
||||
f1v1s10 f0v7s7 1.000000 F 281628 ggatcacacgtctatcactgctcactccaaccccggcccttgacgtccgaggagagggtgcttctgagtatgtatacccaactg
|
||||
f3v6s37 f3v3s34 0.935897 F 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgtctctaggttgttgtggctgaacgtagcact
|
||||
f5v0s53 f3v3s34 0.935897 F 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgtctctaggttgttgtggctgaacgtagcact
|
||||
f11v7s98 f3v3s34 0.935897 F 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgtctctaggttgttgtggctgaacgtagcact
|
||||
f2v4s22 f2v8s26 0.970588 F 863655 tggactagtagaccgtgtcgcctcaatcgacgcgtgaggacacgttgattcttatacggcgtctcag
|
||||
f10v7s84 f10v7s84 1.000000 T 905994 gtgccggacactcgcaatcttcacaagcagaggtccagctaacacacagcagcatttagtcccgatgggtagc
|
||||
f10v0s77 f10v7s84 0.959459 F 905994 ttgccggacactcgcaatcttccaagcagaggtccagctaacacacagcaggcatttagtcccgatgggtagc
|
||||
f5v6s59 f2v8s26 0.985075 F 863655 ggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f2v10s28 f2v8s26 0.985075 F 863655 ggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f1v5s14 f1v5s14 1.000000 T 234004 ggatcacagtctacactgctcactccagaccccgcccctgagtccgaggagagggtgcttcagagtatgttaccactg
|
||||
f0v4s4 f1v5s14 1.000000 F 234004 ggatcacagtctacactgctcactccagaccccgcccctgagtccgaggagagggtgcttcagagtatgttaccactg
|
||||
f0v1s1 f1v5s14 1.000000 F 234004 ggatcacagtctacactgctcactccagaccccgcccctgagtccgaggagagggtgcttcagagtatgttaccactg
|
||||
f0v3s3 f1v5s14 1.000000 F 234004 ggatcacagtctacactgctcactccagaccccgcccctgagtccgaggagagggtgcttcagagtatgttaccactg
|
||||
f5v3s56 f5v3s56 1.000000 T 192648 ccgcaacgcaccataagatgtaatcactaagaaaaatcggcctaacctgtcatatcgccactt
|
||||
f10v2s79 f10v7s84 0.920000 F 905994 ttgccggtcactcgcaatcttaccaaccagaggtccagctaacacacagcaggcatttagtcccgatgggtagc
|
||||
f10v13s90 f10v7s84 0.907895 F 905994 tgccggacactcgcaatctccaagcagagagtccaagctaacacacagcaggcatttgtcccgatgggtagc
|
||||
f1v4s13 f1v4s13 1.000000 T 304149 gaatcagcttctcaaccaagcgatgcagaaccggctactttaagcattgatgaatgcgtcgtaagtgatactggacgattc
|
||||
f10v4s81 f10v7s84 0.933333 F 905994 ttgccggacactggcaatcttccatagcagaggtccagctaacacacagcaggcatttagtcccgatgggtagc
|
||||
f10v5s82 f10v7s84 0.945946 F 905994 ttgccggacactcgcaatcttccaagcagaggtccagctaacacatagcaggcatttagtcccgatgggtagc
|
||||
f4v8s52 f4v8s52 1.000000 T 359938 ctgatattcgtattgatctactacgtatcaaagtatcccacttttgtgaccccactaagagaaga
|
||||
f2v11s29 f2v8s26 0.955882 F 863655 tggactgtagaaccgtgtgcctcaatccacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f0v6s6 f1v5s14 0.925000 F 234004 ggatcacagtctacactgctccctccaaccccggcccctggtccgaggagagggtgcttcagagtattataccactg
|
||||
f1v3s12 f1v5s14 0.925000 F 234004 ggatcacagtctacactgctccctccaaccccggcccctggtccgaggagagggtgcttcagagtattataccactg
|
||||
f0v0s0 f0v7s7 0.916667 F 281628 ggatcacagtctacactgctcactccaaccccggcccctgagtccgaggagagggtgcttcagagtatgtataccactg
|
||||
f0v2s2 f0v7s7 0.916667 F 281628 ggatcacagtctacactgctcactccaaccccggcccctgagtccgaggagagggtgcttcagagtatgtataccactg
|
||||
f1v7s16 f1v4s13 0.913580 F 304149 gaatcagcttcaaccaagcgatgcagaaccgctgctttaagcatgatgaatcgtcgtaagtgatactcgacgattc
|
||||
f2v5s23 f1v4s13 0.913580 F 304149 gaatcagcttcaaccaagcgatgcagaaccgctgctttaagcatgatgaatcgtcgtaagtgatactcgacgattc
|
||||
f3v12s43 f3v3s34 0.948718 F 838714 cgaaaaaggtgaatgaaagactgggacgcctcctggtttgggacgctctaggtggttgtggcttgaacgttagcacct
|
||||
f8v0s68 f8v0s68 1.000000 T 507278 aagaccttgaacacctctaagcgaaaattggattcgagtcagggaacataaccacgggtgcgt
|
||||
f2v1s19 f1v4s13 0.902439 F 304149 gaatcaggttcttccaagcgctgcagaaccggctactttaagcattgatgaatgcgtcagtaagtgatacccgacgattc
|
||||
f1v8s17 f1v4s13 0.902439 F 304149 gaatcaggttcttccaagcgctgcagaaccggctactttaagcattgatgaatgcgtcagtaagtgatacccgacgattc
|
||||
f10v11s88 f10v7s84 0.933333 F 905994 ttgccggacactcgcaatcttccaagcagaggtccagctaactcacagccaggcatttagtcccgatgggtagc
|
||||
f3v5s36 f3v3s34 0.973684 F 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttatggcttgaaagttagcacct
|
||||
f8v7s75 f8v0s68 0.968750 F 507278 aagaccttgaacacctctaagcgaaaattggattccagtcagggaaccataaccacgggtgcgt
|
||||
f10v12s89 f10v7s84 0.933333 F 905994 ttgccggacactcgcaatcttccaagcagaggtccagctaacacacacgcaggcatttagacccgatgggtagc
|
||||
f4v2s46 f4v8s52 0.938462 F 359938 ctgtattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaagagaaga
|
||||
f8v2s70 f8v0s68 0.925373 F 507278 aagaccttgaacaacctctaagccgaaattggaattcgagtcagggaacataaccacgggtgcgat
|
||||
f11v8s99 f11v8s99 1.000000 T 421503 agcgttagcaaagagcctggttaatctgccctcgaggatcggtggtgatcagagatgcgggcatccgtttc
|
||||
f7v0s64 f7v0s64 1.000000 T 114016 gcttcgtgggaaccagagacaaccgacatatttcgaaccaccgacatacgatccttaaacc
|
||||
f11v1s92 f11v8s99 0.944444 F 421503 agcgttagcaaagagcctggttcatcgccctcgaggatcggtggtgatcaagagatgcggcatccgtttc
|
||||
f3v2s33 f3v3s34 0.948052 F 838714 cgaaaaaaggtaatgaaaggctgggatgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcact
|
||||
f8v3s71 f8v0s68 0.952381 F 507278 aagaccttgaacacctctaagcgaaattggattcgagtcagcgaacataacacgggtgcgt
|
||||
f4v3s47 f4v8s52 0.923077 F 359938 ctgtattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaaagaaga
|
||||
f10v10s87 f10v7s84 0.906667 F 905994 tctgccggacactcgcaatcttccaagcagaggtccagctaacacacgcaggcatttatccgatgggtagc
|
||||
f11v0s91 f11v8s99 0.985915 F 421503 agcgttagcaaagagcctggttaatcgccctcgaggatcggtggtgatcagagatgcgggcatccgtttc
|
||||
f8v5s73 f8v0s68 0.953125 F 507278 aagaccttgtacacctctaagcgataaattggattcgagtcagggaacataaccacggatgcgt
|
||||
f8v4s72 f8v0s68 0.984127 F 507278 aagacttgaacacctctaagcgaaaattggattcgagtcagggaacataaccacgggtgcgt
|
||||
f3v1s32 f3v3s34 0.974359 F 838714 cgaaaaagagtgaatgaaatggctgggacgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f3v4s35 f3v3s34 0.948052 F 838714 cgaaaaaggtgaagaaaggctgggacgctcctggttggcgcgctctaggtgttgtggcttgaacgttagcaccta
|
||||
f11v6s97 f11v8s99 0.931507 F 421503 agcgttagcaaagaacctggttaatcgccctcgaggatcggtggtggatcggagatgcgggcatcgcgtttc
|
||||
f4v1s45 f4v8s52 0.910448 F 359938 ctgtatttcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactatagagaaga
|
||||
f0v5s5 f1v5s14 0.925000 F 234004 ggatcacagtctacactgctcactcccccccggcccctgagtccgaggagagggtgcttcaaagtatgtataccactg
|
||||
f5v5s58 f5v3s56 0.909091 F 192648 cgcaacgcaccattaagatggtaatcactaaaaaaatcggcctaacctgtccaatcgccactt
|
||||
f1v0s9 f1v4s13 0.975309 F 304149 gaatcagcttctaaccaagcgatgcagaaccggctactttaagcattgatgaatgcgtcgtaagtgatactcgacgattc
|
||||
f8v6s74 f8v0s68 0.969231 F 507278 aagacccttgaacacctctaagcgaaaattggattcgagtcagggaacataaccacgggtgccgt
|
||||
f6v0s60 f6v0s60 1.000000 T 100983 catgtcaagagactggaaccccggtgatgtgaaaaaaggtcttgggtacgtcccatggctacg
|
||||
f10v8s85 f10v7s84 0.920000 F 905994 ttgccggacactcgaatcttccaagcagaggtccagctaacacacagcaggcatactagtcccgatgggtagc
|
||||
f10v1s78 f10v7s84 0.933333 F 905994 ttgccggacactcgcaatcctccaagcagaggtccagctaacacacagcaggcatttagtcccgatgaggtagc
|
||||
f5v4s57 f5v3s56 0.924242 F 192648 cggcaacgcaccataagatggtaatcactaaaaaaatcggcctaacctgtccatatcgccactat
|
||||
f3v10s41 f3v3s34 0.948718 F 838714 cgaaaataaggtgaatgaaagggtgggacgctcctagtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f3v7s38 f3v3s34 0.974026 F 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttcgtgcttgaacgttagcacct
|
||||
f10v6s83 f10v7s84 0.932432 F 905994 ttccggacactcgcaatcttccaagcagaggtccagctaacacacagcaggcatttagtcctgatgggtagc
|
||||
f11v2s93 f11v8s99 0.958333 F 421503 agcgttagcaaagagcctggttaatcgccctcggaggatcggtggtgatcagagatgcgggcatccgttc
|
||||
f3v9s40 f3v3s34 0.986842 F 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggggttgtggcttgaacgttagcacct
|
||||
f11v4s95 f11v8s99 0.944444 F 421503 agcgttagcaaagagcctggttaatcccctcgagatcgggtggtgatcagagatgcgggcatccgtttc
|
||||
f8v1s69 f8v0s68 0.984375 F 507278 aagaccttgaacacctctaagcgaaaattggatatcgagtcagggaacataaccacgggtgcgt
|
||||
f11v5s96 f11v8s99 0.944444 F 421503 agcgttagcaaagagcctggttaatggccctcgaggatcggtggctgaccagagatgcgggcatccgtttc
|
||||
f6v2s62 f6v0s60 0.968254 F 100983 catgtcgagagactggaaccccggtgatgtgaaaaaaggtcttgggtacgtcccatggctac
|
||||
f4v6s50 f4v8s52 0.910448 F 359938 ctgtattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaagacgaagag
|
||||
f9v0s76 f9v0s76 1.000000 T 29993 gggatcgtggcaagcaacccttgccgcctcgactgcggctaaagacgcatgttccagtaataccta
|
||||
f2v12s30 f2v8s26 0.955224 F 863655 tggactagtagaccgtgtgccacaatcgacgctgaggacacgttgatttttatacggcgtctcag
|
||||
f11v9s100 f11v8s99 0.972222 F 421503 agcgttagcaaaggagcctggttaatcgccctcgaggatcggtggtgatcagagatgcgggcatccgtttc
|
||||
f4v5s49 f4v8s52 0.924242 F 359938 ctatattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaagagaagca
|
||||
f2v9s27 f2v8s26 0.985075 F 863655 tggactagtagaccgtgtgcctaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f7v3s67 f7v0s64 0.983607 F 114016 gcttcgtgggaccagagacaaccgacatatttcgaaccaccgacatacgatccttaaacc
|
||||
f0v8s8 f0v7s7 0.905882 F 281628 ggatcacagtcctacactgctcactccaaccccggccctgagtccgaggagagggtgcttcagagtatgtataccactg
|
||||
f2v6s24 f2v8s26 0.940299 F 863655 tggactagtagacgtgtgcctcatcgacgcgtgagacactttgatttcttatacggcgtctcag
|
||||
f11v3s94 f11v8s99 0.958333 F 421503 agcgttagcaaagagcctggttaatcgccgtcgaaggatcggtggtgatcagagatgcgggcatccgtttc
|
||||
f6v3s63 f6v0s60 0.953846 F 100983 catgtcaagagactggaaccccggtgatgtgaaaaaaggttttgggtcacgtctccatggctacg
|
||||
f3v11s42 f3v3s34 0.973684 F 838714 cgaaaaaggtgaatgaaagtctgggacgctcctggtttgggacgctctaggtgttgtggcttgaacgttagcacct
|
||||
f4v4s48 f4v8s52 0.923077 F 359938 ctgtattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaagagaaa
|
||||
f3v8s39 f3v3s34 0.948052 F 838714 cgaaaaaggtgaatgaaaggcctgggacgctcctggttggggcgctctaggtgtgtggcttgaacgttagacct
|
||||
f7v1s65 f7v0s64 0.967742 F 114016 gcttcggggaaccagagacaaccgacatatttcgaaccaccgacatacgatcctttaaacc
|
||||
f5v1s54 f5v3s56 0.923077 F 192648 cggaacgcaccataagatggtaatcactaaaaaaatcggcctaacctgtccatatcgccactt
|
||||
f4v7s51 f4v7s51 1.000000 T 8599 cgtttattcgtaggatctactacgcatcaaagtatcccacttttgtaccccactaagagcaga
|
||||
f7v2s66 f7v0s64 0.951613 F 114016 gcttcgtgggaaccagaacaaccgacatattccgaaccaccggacatacgatccttaaacc
|
||||
f1v6s15 f1v4s13 0.950617 F 304149 gaatcagcttctaaccaagcgttgcagaaccggctactttaagcatgatgaatgcgtcgtaagtgatactcgacgattc
|
||||
f5v2s55 f5v3s56 0.907692 F 192648 cggcatcgcaccataagatggtaatcactaaaaaaatcggcctaacctgtccatatcgccact
|
||||
@@ -0,0 +1,101 @@
|
||||
f2v8s26 f2v8s26 0.000000 T 863655 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f10v3s80 f2v8s26 0.000000 F 863655 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f2v0s18 f2v8s26 0.000000 F 863655 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f2v7s25 f2v8s26 0.000000 F 863655 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f10v9s86 f2v8s26 0.000000 F 863655 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f2v3s21 f2v8s26 0.014925 F 863655 tggactagtagaccgtgtgcctcaatcgacgcggaggacacgttgatttcttatacggcgtctcag
|
||||
f6v1s61 f2v8s26 0.014925 F 863655 tggactagtagaccgtgtgcctcaatcgacgcggaggacacgttgatttcttatacggcgtctcag
|
||||
f2v2s20 f2v8s26 0.014925 F 863655 tggactagtagaccgtgtgcctcaatcgacgcggaggacacgttgatttcttatacggcgtctcag
|
||||
f3v3s34 f3v3s34 0.000000 T 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f4v0s44 f3v3s34 0.000000 F 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f3v0s31 f3v3s34 0.000000 F 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f0v7s7 f0v7s7 0.000000 T 281628 ggatcacacgtctatcactgctcactccaaccccggcccttgacgtccgaggagagggtgcttctgagtatgtatacccaactg
|
||||
f1v2s11 f0v7s7 0.000000 F 281628 ggatcacacgtctatcactgctcactccaaccccggcccttgacgtccgaggagagggtgcttctgagtatgtatacccaactg
|
||||
f1v1s10 f0v7s7 0.000000 F 281628 ggatcacacgtctatcactgctcactccaaccccggcccttgacgtccgaggagagggtgcttctgagtatgtatacccaactg
|
||||
f3v6s37 f3v3s34 0.064103 F 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgtctctaggttgttgtggctgaacgtagcact
|
||||
f5v0s53 f3v3s34 0.064103 F 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgtctctaggttgttgtggctgaacgtagcact
|
||||
f11v7s98 f3v3s34 0.064103 F 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgtctctaggttgttgtggctgaacgtagcact
|
||||
f2v4s22 f2v8s26 0.029412 F 863655 tggactagtagaccgtgtcgcctcaatcgacgcgtgaggacacgttgattcttatacggcgtctcag
|
||||
f10v7s84 f10v7s84 0.000000 T 905994 gtgccggacactcgcaatcttcacaagcagaggtccagctaacacacagcagcatttagtcccgatgggtagc
|
||||
f10v0s77 f10v7s84 0.040541 F 905994 ttgccggacactcgcaatcttccaagcagaggtccagctaacacacagcaggcatttagtcccgatgggtagc
|
||||
f5v6s59 f2v8s26 0.014925 F 863655 ggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f2v10s28 f2v8s26 0.014925 F 863655 ggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f1v5s14 f1v5s14 0.000000 T 234004 ggatcacagtctacactgctcactccagaccccgcccctgagtccgaggagagggtgcttcagagtatgttaccactg
|
||||
f0v4s4 f1v5s14 0.000000 F 234004 ggatcacagtctacactgctcactccagaccccgcccctgagtccgaggagagggtgcttcagagtatgttaccactg
|
||||
f0v1s1 f1v5s14 0.000000 F 234004 ggatcacagtctacactgctcactccagaccccgcccctgagtccgaggagagggtgcttcagagtatgttaccactg
|
||||
f0v3s3 f1v5s14 0.000000 F 234004 ggatcacagtctacactgctcactccagaccccgcccctgagtccgaggagagggtgcttcagagtatgttaccactg
|
||||
f5v3s56 f5v3s56 0.000000 T 192648 ccgcaacgcaccataagatgtaatcactaagaaaaatcggcctaacctgtcatatcgccactt
|
||||
f10v2s79 f10v7s84 0.080000 F 905994 ttgccggtcactcgcaatcttaccaaccagaggtccagctaacacacagcaggcatttagtcccgatgggtagc
|
||||
f10v13s90 f10v7s84 0.092105 F 905994 tgccggacactcgcaatctccaagcagagagtccaagctaacacacagcaggcatttgtcccgatgggtagc
|
||||
f1v4s13 f1v4s13 0.000000 T 304149 gaatcagcttctcaaccaagcgatgcagaaccggctactttaagcattgatgaatgcgtcgtaagtgatactggacgattc
|
||||
f10v4s81 f10v7s84 0.066667 F 905994 ttgccggacactggcaatcttccatagcagaggtccagctaacacacagcaggcatttagtcccgatgggtagc
|
||||
f10v5s82 f10v7s84 0.054054 F 905994 ttgccggacactcgcaatcttccaagcagaggtccagctaacacatagcaggcatttagtcccgatgggtagc
|
||||
f4v8s52 f4v8s52 0.000000 T 359938 ctgatattcgtattgatctactacgtatcaaagtatcccacttttgtgaccccactaagagaaga
|
||||
f2v11s29 f2v8s26 0.044118 F 863655 tggactgtagaaccgtgtgcctcaatccacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f0v6s6 f1v5s14 0.075000 F 234004 ggatcacagtctacactgctccctccaaccccggcccctggtccgaggagagggtgcttcagagtattataccactg
|
||||
f1v3s12 f1v5s14 0.075000 F 234004 ggatcacagtctacactgctccctccaaccccggcccctggtccgaggagagggtgcttcagagtattataccactg
|
||||
f0v0s0 f0v7s7 0.083333 F 281628 ggatcacagtctacactgctcactccaaccccggcccctgagtccgaggagagggtgcttcagagtatgtataccactg
|
||||
f0v2s2 f0v7s7 0.083333 F 281628 ggatcacagtctacactgctcactccaaccccggcccctgagtccgaggagagggtgcttcagagtatgtataccactg
|
||||
f1v7s16 f1v4s13 0.086420 F 304149 gaatcagcttcaaccaagcgatgcagaaccgctgctttaagcatgatgaatcgtcgtaagtgatactcgacgattc
|
||||
f2v5s23 f1v4s13 0.086420 F 304149 gaatcagcttcaaccaagcgatgcagaaccgctgctttaagcatgatgaatcgtcgtaagtgatactcgacgattc
|
||||
f3v12s43 f3v3s34 0.051282 F 838714 cgaaaaaggtgaatgaaagactgggacgcctcctggtttgggacgctctaggtggttgtggcttgaacgttagcacct
|
||||
f8v0s68 f8v0s68 0.000000 T 507278 aagaccttgaacacctctaagcgaaaattggattcgagtcagggaacataaccacgggtgcgt
|
||||
f2v1s19 f1v4s13 0.097561 F 304149 gaatcaggttcttccaagcgctgcagaaccggctactttaagcattgatgaatgcgtcagtaagtgatacccgacgattc
|
||||
f1v8s17 f1v4s13 0.097561 F 304149 gaatcaggttcttccaagcgctgcagaaccggctactttaagcattgatgaatgcgtcagtaagtgatacccgacgattc
|
||||
f10v11s88 f10v7s84 0.066667 F 905994 ttgccggacactcgcaatcttccaagcagaggtccagctaactcacagccaggcatttagtcccgatgggtagc
|
||||
f3v5s36 f3v3s34 0.026316 F 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttatggcttgaaagttagcacct
|
||||
f8v7s75 f8v0s68 0.031250 F 507278 aagaccttgaacacctctaagcgaaaattggattccagtcagggaaccataaccacgggtgcgt
|
||||
f10v12s89 f10v7s84 0.066667 F 905994 ttgccggacactcgcaatcttccaagcagaggtccagctaacacacacgcaggcatttagacccgatgggtagc
|
||||
f4v2s46 f4v8s52 0.061538 F 359938 ctgtattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaagagaaga
|
||||
f8v2s70 f8v0s68 0.074627 F 507278 aagaccttgaacaacctctaagccgaaattggaattcgagtcagggaacataaccacgggtgcgat
|
||||
f11v8s99 f11v8s99 0.000000 T 421503 agcgttagcaaagagcctggttaatctgccctcgaggatcggtggtgatcagagatgcgggcatccgtttc
|
||||
f7v0s64 f7v0s64 0.000000 T 114016 gcttcgtgggaaccagagacaaccgacatatttcgaaccaccgacatacgatccttaaacc
|
||||
f11v1s92 f11v8s99 0.055556 F 421503 agcgttagcaaagagcctggttcatcgccctcgaggatcggtggtgatcaagagatgcggcatccgtttc
|
||||
f3v2s33 f3v3s34 0.051948 F 838714 cgaaaaaaggtaatgaaaggctgggatgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcact
|
||||
f8v3s71 f8v0s68 0.047619 F 507278 aagaccttgaacacctctaagcgaaattggattcgagtcagcgaacataacacgggtgcgt
|
||||
f4v3s47 f4v8s52 0.076923 F 359938 ctgtattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaaagaaga
|
||||
f10v10s87 f10v7s84 0.093333 F 905994 tctgccggacactcgcaatcttccaagcagaggtccagctaacacacgcaggcatttatccgatgggtagc
|
||||
f11v0s91 f11v8s99 0.014085 F 421503 agcgttagcaaagagcctggttaatcgccctcgaggatcggtggtgatcagagatgcgggcatccgtttc
|
||||
f8v5s73 f8v0s68 0.046875 F 507278 aagaccttgtacacctctaagcgataaattggattcgagtcagggaacataaccacggatgcgt
|
||||
f8v4s72 f8v0s68 0.015873 F 507278 aagacttgaacacctctaagcgaaaattggattcgagtcagggaacataaccacgggtgcgt
|
||||
f3v1s32 f3v3s34 0.025641 F 838714 cgaaaaagagtgaatgaaatggctgggacgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f3v4s35 f3v3s34 0.051948 F 838714 cgaaaaaggtgaagaaaggctgggacgctcctggttggcgcgctctaggtgttgtggcttgaacgttagcaccta
|
||||
f11v6s97 f11v8s99 0.068493 F 421503 agcgttagcaaagaacctggttaatcgccctcgaggatcggtggtggatcggagatgcgggcatcgcgtttc
|
||||
f4v1s45 f4v8s52 0.089552 F 359938 ctgtatttcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactatagagaaga
|
||||
f0v5s5 f1v5s14 0.075000 F 234004 ggatcacagtctacactgctcactcccccccggcccctgagtccgaggagagggtgcttcaaagtatgtataccactg
|
||||
f5v5s58 f5v3s56 0.090909 F 192648 cgcaacgcaccattaagatggtaatcactaaaaaaatcggcctaacctgtccaatcgccactt
|
||||
f1v0s9 f1v4s13 0.024691 F 304149 gaatcagcttctaaccaagcgatgcagaaccggctactttaagcattgatgaatgcgtcgtaagtgatactcgacgattc
|
||||
f8v6s74 f8v0s68 0.030769 F 507278 aagacccttgaacacctctaagcgaaaattggattcgagtcagggaacataaccacgggtgccgt
|
||||
f6v0s60 f6v0s60 0.000000 T 100983 catgtcaagagactggaaccccggtgatgtgaaaaaaggtcttgggtacgtcccatggctacg
|
||||
f10v8s85 f10v7s84 0.080000 F 905994 ttgccggacactcgaatcttccaagcagaggtccagctaacacacagcaggcatactagtcccgatgggtagc
|
||||
f10v1s78 f10v7s84 0.066667 F 905994 ttgccggacactcgcaatcctccaagcagaggtccagctaacacacagcaggcatttagtcccgatgaggtagc
|
||||
f5v4s57 f5v3s56 0.075758 F 192648 cggcaacgcaccataagatggtaatcactaaaaaaatcggcctaacctgtccatatcgccactat
|
||||
f3v10s41 f3v3s34 0.051282 F 838714 cgaaaataaggtgaatgaaagggtgggacgctcctagtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f3v7s38 f3v3s34 0.025974 F 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttcgtgcttgaacgttagcacct
|
||||
f10v6s83 f10v7s84 0.067568 F 905994 ttccggacactcgcaatcttccaagcagaggtccagctaacacacagcaggcatttagtcctgatgggtagc
|
||||
f11v2s93 f11v8s99 0.041667 F 421503 agcgttagcaaagagcctggttaatcgccctcggaggatcggtggtgatcagagatgcgggcatccgttc
|
||||
f3v9s40 f3v3s34 0.013158 F 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggggttgtggcttgaacgttagcacct
|
||||
f11v4s95 f11v8s99 0.055556 F 421503 agcgttagcaaagagcctggttaatcccctcgagatcgggtggtgatcagagatgcgggcatccgtttc
|
||||
f8v1s69 f8v0s68 0.015625 F 507278 aagaccttgaacacctctaagcgaaaattggatatcgagtcagggaacataaccacgggtgcgt
|
||||
f11v5s96 f11v8s99 0.055556 F 421503 agcgttagcaaagagcctggttaatggccctcgaggatcggtggctgaccagagatgcgggcatccgtttc
|
||||
f6v2s62 f6v0s60 0.031746 F 100983 catgtcgagagactggaaccccggtgatgtgaaaaaaggtcttgggtacgtcccatggctac
|
||||
f4v6s50 f4v8s52 0.089552 F 359938 ctgtattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaagacgaagag
|
||||
f9v0s76 f9v0s76 0.000000 T 29993 gggatcgtggcaagcaacccttgccgcctcgactgcggctaaagacgcatgttccagtaataccta
|
||||
f2v12s30 f2v8s26 0.044776 F 863655 tggactagtagaccgtgtgccacaatcgacgctgaggacacgttgatttttatacggcgtctcag
|
||||
f11v9s100 f11v8s99 0.027778 F 421503 agcgttagcaaaggagcctggttaatcgccctcgaggatcggtggtgatcagagatgcgggcatccgtttc
|
||||
f4v5s49 f4v8s52 0.075758 F 359938 ctatattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaagagaagca
|
||||
f2v9s27 f2v8s26 0.014925 F 863655 tggactagtagaccgtgtgcctaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f7v3s67 f7v0s64 0.016393 F 114016 gcttcgtgggaccagagacaaccgacatatttcgaaccaccgacatacgatccttaaacc
|
||||
f0v8s8 f0v7s7 0.094118 F 281628 ggatcacagtcctacactgctcactccaaccccggccctgagtccgaggagagggtgcttcagagtatgtataccactg
|
||||
f2v6s24 f2v8s26 0.059701 F 863655 tggactagtagacgtgtgcctcatcgacgcgtgagacactttgatttcttatacggcgtctcag
|
||||
f11v3s94 f11v8s99 0.041667 F 421503 agcgttagcaaagagcctggttaatcgccgtcgaaggatcggtggtgatcagagatgcgggcatccgtttc
|
||||
f6v3s63 f6v0s60 0.046154 F 100983 catgtcaagagactggaaccccggtgatgtgaaaaaaggttttgggtcacgtctccatggctacg
|
||||
f3v11s42 f3v3s34 0.026316 F 838714 cgaaaaaggtgaatgaaagtctgggacgctcctggtttgggacgctctaggtgttgtggcttgaacgttagcacct
|
||||
f4v4s48 f4v8s52 0.076923 F 359938 ctgtattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaagagaaa
|
||||
f3v8s39 f3v3s34 0.051948 F 838714 cgaaaaaggtgaatgaaaggcctgggacgctcctggttggggcgctctaggtgtgtggcttgaacgttagacct
|
||||
f7v1s65 f7v0s64 0.032258 F 114016 gcttcggggaaccagagacaaccgacatatttcgaaccaccgacatacgatcctttaaacc
|
||||
f5v1s54 f5v3s56 0.076923 F 192648 cggaacgcaccataagatggtaatcactaaaaaaatcggcctaacctgtccatatcgccactt
|
||||
f4v7s51 f4v7s51 0.000000 T 8599 cgtttattcgtaggatctactacgcatcaaagtatcccacttttgtaccccactaagagcaga
|
||||
f7v2s66 f7v0s64 0.048387 F 114016 gcttcgtgggaaccagaacaaccgacatattccgaaccaccggacatacgatccttaaacc
|
||||
f1v6s15 f1v4s13 0.049383 F 304149 gaatcagcttctaaccaagcgttgcagaaccggctactttaagcatgatgaatgcgtcgtaagtgatactcgacgattc
|
||||
f5v2s55 f5v3s56 0.092308 F 192648 cggcatcgcaccataagatggtaatcactaaaaaaatcggcctaacctgtccatatcgccact
|
||||
@@ -0,0 +1,101 @@
|
||||
f2v8s26 f2v8s26 1.000000 T 863655 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f10v3s80 f2v8s26 1.000000 F 863655 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f2v0s18 f2v8s26 1.000000 F 863655 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f2v7s25 f2v8s26 1.000000 F 863655 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f10v9s86 f2v8s26 1.000000 F 863655 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f2v3s21 f2v8s26 0.985075 F 863655 tggactagtagaccgtgtgcctcaatcgacgcggaggacacgttgatttcttatacggcgtctcag
|
||||
f6v1s61 f2v8s26 0.985075 F 863655 tggactagtagaccgtgtgcctcaatcgacgcggaggacacgttgatttcttatacggcgtctcag
|
||||
f2v2s20 f2v8s26 0.985075 F 863655 tggactagtagaccgtgtgcctcaatcgacgcggaggacacgttgatttcttatacggcgtctcag
|
||||
f3v3s34 f3v3s34 1.000000 T 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f4v0s44 f3v3s34 1.000000 F 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f3v0s31 f3v3s34 1.000000 F 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f0v7s7 f0v7s7 1.000000 T 173457 ggatcacacgtctatcactgctcactccaaccccggcccttgacgtccgaggagagggtgcttctgagtatgtatacccaactg
|
||||
f1v2s11 f0v7s7 1.000000 F 173457 ggatcacacgtctatcactgctcactccaaccccggcccttgacgtccgaggagagggtgcttctgagtatgtatacccaactg
|
||||
f1v1s10 f0v7s7 1.000000 F 173457 ggatcacacgtctatcactgctcactccaaccccggcccttgacgtccgaggagagggtgcttctgagtatgtatacccaactg
|
||||
f3v6s37 f3v3s34 0.935897 F 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgtctctaggttgttgtggctgaacgtagcact
|
||||
f5v0s53 f3v3s34 0.935897 F 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgtctctaggttgttgtggctgaacgtagcact
|
||||
f11v7s98 f3v3s34 0.935897 F 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgtctctaggttgttgtggctgaacgtagcact
|
||||
f2v4s22 f2v8s26 0.970588 F 863655 tggactagtagaccgtgtcgcctcaatcgacgcgtgaggacacgttgattcttatacggcgtctcag
|
||||
f10v7s84 f10v7s84 1.000000 T 905994 gtgccggacactcgcaatcttcacaagcagaggtccagctaacacacagcagcatttagtcccgatgggtagc
|
||||
f10v0s77 f10v7s84 0.959459 F 905994 ttgccggacactcgcaatcttccaagcagaggtccagctaacacacagcaggcatttagtcccgatgggtagc
|
||||
f5v6s59 f2v8s26 0.985075 F 863655 ggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f2v10s28 f2v8s26 0.985075 F 863655 ggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f1v5s14 f1v5s14 1.000000 T 342175 ggatcacagtctacactgctcactccagaccccgcccctgagtccgaggagagggtgcttcagagtatgttaccactg
|
||||
f0v4s4 f1v5s14 1.000000 F 342175 ggatcacagtctacactgctcactccagaccccgcccctgagtccgaggagagggtgcttcagagtatgttaccactg
|
||||
f0v1s1 f1v5s14 1.000000 F 342175 ggatcacagtctacactgctcactccagaccccgcccctgagtccgaggagagggtgcttcagagtatgttaccactg
|
||||
f0v3s3 f1v5s14 1.000000 F 342175 ggatcacagtctacactgctcactccagaccccgcccctgagtccgaggagagggtgcttcagagtatgttaccactg
|
||||
f5v3s56 f5v3s56 1.000000 T 192648 ccgcaacgcaccataagatgtaatcactaagaaaaatcggcctaacctgtcatatcgccactt
|
||||
f10v2s79 f10v7s84 0.920000 F 905994 ttgccggtcactcgcaatcttaccaaccagaggtccagctaacacacagcaggcatttagtcccgatgggtagc
|
||||
f10v13s90 f10v7s84 0.907895 F 905994 tgccggacactcgcaatctccaagcagagagtccaagctaacacacagcaggcatttgtcccgatgggtagc
|
||||
f1v4s13 f1v4s13 1.000000 T 304149 gaatcagcttctcaaccaagcgatgcagaaccggctactttaagcattgatgaatgcgtcgtaagtgatactggacgattc
|
||||
f10v4s81 f10v7s84 0.933333 F 905994 ttgccggacactggcaatcttccatagcagaggtccagctaacacacagcaggcatttagtcccgatgggtagc
|
||||
f10v5s82 f10v7s84 0.945946 F 905994 ttgccggacactcgcaatcttccaagcagaggtccagctaacacatagcaggcatttagtcccgatgggtagc
|
||||
f4v8s52 f4v8s52 1.000000 T 359938 ctgatattcgtattgatctactacgtatcaaagtatcccacttttgtgaccccactaagagaaga
|
||||
f2v11s29 f2v8s26 0.955882 F 863655 tggactgtagaaccgtgtgcctcaatccacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f0v6s6 f1v5s14 0.925000 F 342175 ggatcacagtctacactgctccctccaaccccggcccctggtccgaggagagggtgcttcagagtattataccactg
|
||||
f1v3s12 f1v5s14 0.925000 F 342175 ggatcacagtctacactgctccctccaaccccggcccctggtccgaggagagggtgcttcagagtattataccactg
|
||||
f0v0s0 f1v5s14 0.962500 F 342175 ggatcacagtctacactgctcactccaaccccggcccctgagtccgaggagagggtgcttcagagtatgtataccactg
|
||||
f0v2s2 f1v5s14 0.962500 F 342175 ggatcacagtctacactgctcactccaaccccggcccctgagtccgaggagagggtgcttcagagtatgtataccactg
|
||||
f1v7s16 f1v4s13 0.913580 F 304149 gaatcagcttcaaccaagcgatgcagaaccgctgctttaagcatgatgaatcgtcgtaagtgatactcgacgattc
|
||||
f2v5s23 f1v4s13 0.913580 F 304149 gaatcagcttcaaccaagcgatgcagaaccgctgctttaagcatgatgaatcgtcgtaagtgatactcgacgattc
|
||||
f3v12s43 f3v3s34 0.948718 F 838714 cgaaaaaggtgaatgaaagactgggacgcctcctggtttgggacgctctaggtggttgtggcttgaacgttagcacct
|
||||
f8v0s68 f8v0s68 1.000000 T 507278 aagaccttgaacacctctaagcgaaaattggattcgagtcagggaacataaccacgggtgcgt
|
||||
f2v1s19 f1v4s13 0.902439 F 304149 gaatcaggttcttccaagcgctgcagaaccggctactttaagcattgatgaatgcgtcagtaagtgatacccgacgattc
|
||||
f1v8s17 f1v4s13 0.902439 F 304149 gaatcaggttcttccaagcgctgcagaaccggctactttaagcattgatgaatgcgtcagtaagtgatacccgacgattc
|
||||
f10v11s88 f10v7s84 0.933333 F 905994 ttgccggacactcgcaatcttccaagcagaggtccagctaactcacagccaggcatttagtcccgatgggtagc
|
||||
f3v5s36 f3v3s34 0.973684 F 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttatggcttgaaagttagcacct
|
||||
f8v7s75 f8v0s68 0.968750 F 507278 aagaccttgaacacctctaagcgaaaattggattccagtcagggaaccataaccacgggtgcgt
|
||||
f10v12s89 f10v7s84 0.933333 F 905994 ttgccggacactcgcaatcttccaagcagaggtccagctaacacacacgcaggcatttagacccgatgggtagc
|
||||
f4v2s46 f4v8s52 0.938462 F 359938 ctgtattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaagagaaga
|
||||
f8v2s70 f8v0s68 0.925373 F 507278 aagaccttgaacaacctctaagccgaaattggaattcgagtcagggaacataaccacgggtgcgat
|
||||
f11v8s99 f11v8s99 1.000000 T 421503 agcgttagcaaagagcctggttaatctgccctcgaggatcggtggtgatcagagatgcgggcatccgtttc
|
||||
f7v0s64 f7v0s64 1.000000 T 114016 gcttcgtgggaaccagagacaaccgacatatttcgaaccaccgacatacgatccttaaacc
|
||||
f11v1s92 f11v8s99 0.944444 F 421503 agcgttagcaaagagcctggttcatcgccctcgaggatcggtggtgatcaagagatgcggcatccgtttc
|
||||
f3v2s33 f3v3s34 0.948052 F 838714 cgaaaaaaggtaatgaaaggctgggatgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcact
|
||||
f8v3s71 f8v0s68 0.952381 F 507278 aagaccttgaacacctctaagcgaaattggattcgagtcagcgaacataacacgggtgcgt
|
||||
f4v3s47 f4v8s52 0.923077 F 359938 ctgtattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaaagaaga
|
||||
f10v10s87 f10v7s84 0.906667 F 905994 tctgccggacactcgcaatcttccaagcagaggtccagctaacacacgcaggcatttatccgatgggtagc
|
||||
f11v0s91 f11v8s99 0.985915 F 421503 agcgttagcaaagagcctggttaatcgccctcgaggatcggtggtgatcagagatgcgggcatccgtttc
|
||||
f8v5s73 f8v0s68 0.953125 F 507278 aagaccttgtacacctctaagcgataaattggattcgagtcagggaacataaccacggatgcgt
|
||||
f8v4s72 f8v0s68 0.984127 F 507278 aagacttgaacacctctaagcgaaaattggattcgagtcagggaacataaccacgggtgcgt
|
||||
f3v1s32 f3v3s34 0.974359 F 838714 cgaaaaagagtgaatgaaatggctgggacgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f3v4s35 f3v3s34 0.948052 F 838714 cgaaaaaggtgaagaaaggctgggacgctcctggttggcgcgctctaggtgttgtggcttgaacgttagcaccta
|
||||
f11v6s97 f11v8s99 0.931507 F 421503 agcgttagcaaagaacctggttaatcgccctcgaggatcggtggtggatcggagatgcgggcatcgcgtttc
|
||||
f4v1s45 f4v8s52 0.910448 F 359938 ctgtatttcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactatagagaaga
|
||||
f0v5s5 f1v5s14 0.925000 F 342175 ggatcacagtctacactgctcactcccccccggcccctgagtccgaggagagggtgcttcaaagtatgtataccactg
|
||||
f5v5s58 f5v3s56 0.909091 F 192648 cgcaacgcaccattaagatggtaatcactaaaaaaatcggcctaacctgtccaatcgccactt
|
||||
f1v0s9 f1v4s13 0.975309 F 304149 gaatcagcttctaaccaagcgatgcagaaccggctactttaagcattgatgaatgcgtcgtaagtgatactcgacgattc
|
||||
f8v6s74 f8v0s68 0.969231 F 507278 aagacccttgaacacctctaagcgaaaattggattcgagtcagggaacataaccacgggtgccgt
|
||||
f6v0s60 f6v0s60 1.000000 T 100983 catgtcaagagactggaaccccggtgatgtgaaaaaaggtcttgggtacgtcccatggctacg
|
||||
f10v8s85 f10v7s84 0.920000 F 905994 ttgccggacactcgaatcttccaagcagaggtccagctaacacacagcaggcatactagtcccgatgggtagc
|
||||
f10v1s78 f10v7s84 0.933333 F 905994 ttgccggacactcgcaatcctccaagcagaggtccagctaacacacagcaggcatttagtcccgatgaggtagc
|
||||
f5v4s57 f5v3s56 0.924242 F 192648 cggcaacgcaccataagatggtaatcactaaaaaaatcggcctaacctgtccatatcgccactat
|
||||
f3v10s41 f3v3s34 0.948718 F 838714 cgaaaataaggtgaatgaaagggtgggacgctcctagtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f3v7s38 f3v3s34 0.974026 F 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttcgtgcttgaacgttagcacct
|
||||
f10v6s83 f10v7s84 0.932432 F 905994 ttccggacactcgcaatcttccaagcagaggtccagctaacacacagcaggcatttagtcctgatgggtagc
|
||||
f11v2s93 f11v8s99 0.958333 F 421503 agcgttagcaaagagcctggttaatcgccctcggaggatcggtggtgatcagagatgcgggcatccgttc
|
||||
f3v9s40 f3v3s34 0.986842 F 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggggttgtggcttgaacgttagcacct
|
||||
f11v4s95 f11v8s99 0.944444 F 421503 agcgttagcaaagagcctggttaatcccctcgagatcgggtggtgatcagagatgcgggcatccgtttc
|
||||
f8v1s69 f8v0s68 0.984375 F 507278 aagaccttgaacacctctaagcgaaaattggatatcgagtcagggaacataaccacgggtgcgt
|
||||
f11v5s96 f11v8s99 0.944444 F 421503 agcgttagcaaagagcctggttaatggccctcgaggatcggtggctgaccagagatgcgggcatccgtttc
|
||||
f6v2s62 f6v0s60 0.968254 F 100983 catgtcgagagactggaaccccggtgatgtgaaaaaaggtcttgggtacgtcccatggctac
|
||||
f4v6s50 f4v8s52 0.910448 F 359938 ctgtattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaagacgaagag
|
||||
f9v0s76 f9v0s76 1.000000 T 29993 gggatcgtggcaagcaacccttgccgcctcgactgcggctaaagacgcatgttccagtaataccta
|
||||
f2v12s30 f2v8s26 0.955224 F 863655 tggactagtagaccgtgtgccacaatcgacgctgaggacacgttgatttttatacggcgtctcag
|
||||
f11v9s100 f11v8s99 0.972222 F 421503 agcgttagcaaaggagcctggttaatcgccctcgaggatcggtggtgatcagagatgcgggcatccgtttc
|
||||
f4v5s49 f4v8s52 0.924242 F 359938 ctatattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaagagaagca
|
||||
f2v9s27 f2v8s26 0.985075 F 863655 tggactagtagaccgtgtgcctaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f7v3s67 f7v0s64 0.983607 F 114016 gcttcgtgggaccagagacaaccgacatatttcgaaccaccgacatacgatccttaaacc
|
||||
f0v8s8 f1v5s14 0.950000 F 342175 ggatcacagtcctacactgctcactccaaccccggccctgagtccgaggagagggtgcttcagagtatgtataccactg
|
||||
f2v6s24 f2v8s26 0.940299 F 863655 tggactagtagacgtgtgcctcatcgacgcgtgagacactttgatttcttatacggcgtctcag
|
||||
f11v3s94 f11v8s99 0.958333 F 421503 agcgttagcaaagagcctggttaatcgccgtcgaaggatcggtggtgatcagagatgcgggcatccgtttc
|
||||
f6v3s63 f6v0s60 0.953846 F 100983 catgtcaagagactggaaccccggtgatgtgaaaaaaggttttgggtcacgtctccatggctacg
|
||||
f3v11s42 f3v3s34 0.973684 F 838714 cgaaaaaggtgaatgaaagtctgggacgctcctggtttgggacgctctaggtgttgtggcttgaacgttagcacct
|
||||
f4v4s48 f4v8s52 0.923077 F 359938 ctgtattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaagagaaa
|
||||
f3v8s39 f3v3s34 0.948052 F 838714 cgaaaaaggtgaatgaaaggcctgggacgctcctggttggggcgctctaggtgtgtggcttgaacgttagacct
|
||||
f7v1s65 f7v0s64 0.967742 F 114016 gcttcggggaaccagagacaaccgacatatttcgaaccaccgacatacgatcctttaaacc
|
||||
f5v1s54 f5v3s56 0.923077 F 192648 cggaacgcaccataagatggtaatcactaaaaaaatcggcctaacctgtccatatcgccactt
|
||||
f4v7s51 f4v7s51 1.000000 T 8599 cgtttattcgtaggatctactacgcatcaaagtatcccacttttgtaccccactaagagcaga
|
||||
f7v2s66 f7v0s64 0.951613 F 114016 gcttcgtgggaaccagaacaaccgacatattccgaaccaccggacatacgatccttaaacc
|
||||
f1v6s15 f1v4s13 0.950617 F 304149 gaatcagcttctaaccaagcgttgcagaaccggctactttaagcatgatgaatgcgtcgtaagtgatactcgacgattc
|
||||
f5v2s55 f5v3s56 0.907692 F 192648 cggcatcgcaccataagatggtaatcactaaaaaaatcggcctaacctgtccatatcgccact
|
||||
@@ -0,0 +1,101 @@
|
||||
f2v8s26 f2v8s26 1.000000 T 863655 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f10v3s80 f2v8s26 1.000000 F 863655 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f2v0s18 f2v8s26 1.000000 F 863655 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f2v7s25 f2v8s26 1.000000 F 863655 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f10v9s86 f2v8s26 1.000000 F 863655 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f2v3s21 f2v8s26 0.985075 F 863655 tggactagtagaccgtgtgcctcaatcgacgcggaggacacgttgatttcttatacggcgtctcag
|
||||
f6v1s61 f2v8s26 0.985075 F 863655 tggactagtagaccgtgtgcctcaatcgacgcggaggacacgttgatttcttatacggcgtctcag
|
||||
f2v2s20 f2v8s26 0.985075 F 863655 tggactagtagaccgtgtgcctcaatcgacgcggaggacacgttgatttcttatacggcgtctcag
|
||||
f3v3s34 f3v3s34 1.000000 T 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f4v0s44 f3v3s34 1.000000 F 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f3v0s31 f3v3s34 1.000000 F 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f0v7s7 f0v7s7 1.000000 T 515632 ggatcacacgtctatcactgctcactccaaccccggcccttgacgtccgaggagagggtgcttctgagtatgtatacccaactg
|
||||
f1v2s11 f0v7s7 1.000000 F 515632 ggatcacacgtctatcactgctcactccaaccccggcccttgacgtccgaggagagggtgcttctgagtatgtatacccaactg
|
||||
f1v1s10 f0v7s7 1.000000 F 515632 ggatcacacgtctatcactgctcactccaaccccggcccttgacgtccgaggagagggtgcttctgagtatgtatacccaactg
|
||||
f3v6s37 f3v3s34 0.960526 F 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgtctctaggttgttgtggctgaacgtagcact
|
||||
f5v0s53 f3v3s34 0.960526 F 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgtctctaggttgttgtggctgaacgtagcact
|
||||
f11v7s98 f3v3s34 0.960526 F 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgtctctaggttgttgtggctgaacgtagcact
|
||||
f2v4s22 f2v8s26 0.985075 F 863655 tggactagtagaccgtgtcgcctcaatcgacgcgtgaggacacgttgattcttatacggcgtctcag
|
||||
f10v7s84 f10v7s84 1.000000 T 905994 gtgccggacactcgcaatcttcacaagcagaggtccagctaacacacagcagcatttagtcccgatgggtagc
|
||||
f10v0s77 f10v7s84 0.972603 F 905994 ttgccggacactcgcaatcttccaagcagaggtccagctaacacacagcaggcatttagtcccgatgggtagc
|
||||
f5v6s59 f2v8s26 0.985075 F 863655 ggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f2v10s28 f2v8s26 0.985075 F 863655 ggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f1v5s14 f0v7s7 0.892857 F 515632 ggatcacagtctacactgctcactccagaccccgcccctgagtccgaggagagggtgcttcagagtatgttaccactg
|
||||
f0v4s4 f0v7s7 0.892857 F 515632 ggatcacagtctacactgctcactccagaccccgcccctgagtccgaggagagggtgcttcagagtatgttaccactg
|
||||
f0v1s1 f0v7s7 0.892857 F 515632 ggatcacagtctacactgctcactccagaccccgcccctgagtccgaggagagggtgcttcagagtatgttaccactg
|
||||
f0v3s3 f0v7s7 0.892857 F 515632 ggatcacagtctacactgctcactccagaccccgcccctgagtccgaggagagggtgcttcagagtatgttaccactg
|
||||
f5v3s56 f5v3s56 1.000000 T 192648 ccgcaacgcaccataagatgtaatcactaagaaaaatcggcctaacctgtcatatcgccactt
|
||||
f10v2s79 f10v7s84 0.932432 F 905994 ttgccggtcactcgcaatcttaccaaccagaggtccagctaacacacagcaggcatttagtcccgatgggtagc
|
||||
f10v13s90 f10v7s84 0.945205 F 905994 tgccggacactcgcaatctccaagcagagagtccaagctaacacacagcaggcatttgtcccgatgggtagc
|
||||
f1v4s13 f1v4s13 1.000000 T 304149 gaatcagcttctcaaccaagcgatgcagaaccggctactttaagcattgatgaatgcgtcgtaagtgatactggacgattc
|
||||
f10v4s81 f10v7s84 0.945946 F 905994 ttgccggacactggcaatcttccatagcagaggtccagctaacacacagcaggcatttagtcccgatgggtagc
|
||||
f10v5s82 f10v7s84 0.958904 F 905994 ttgccggacactcgcaatcttccaagcagaggtccagctaacacatagcaggcatttagtcccgatgggtagc
|
||||
f4v8s52 f4v8s52 1.000000 T 368537 ctgatattcgtattgatctactacgtatcaaagtatcccacttttgtgaccccactaagagaaga
|
||||
f2v11s29 f2v8s26 0.970149 F 863655 tggactgtagaaccgtgtgcctcaatccacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f0v6s6 f0v7s7 0.880952 F 515632 ggatcacagtctacactgctccctccaaccccggcccctggtccgaggagagggtgcttcagagtattataccactg
|
||||
f1v3s12 f0v7s7 0.880952 F 515632 ggatcacagtctacactgctccctccaaccccggcccctggtccgaggagagggtgcttcagagtattataccactg
|
||||
f0v0s0 f0v7s7 0.916667 F 515632 ggatcacagtctacactgctcactccaaccccggcccctgagtccgaggagagggtgcttcagagtatgtataccactg
|
||||
f0v2s2 f0v7s7 0.916667 F 515632 ggatcacagtctacactgctcactccaaccccggcccctgagtccgaggagagggtgcttcagagtatgtataccactg
|
||||
f1v7s16 f1v4s13 0.913580 F 304149 gaatcagcttcaaccaagcgatgcagaaccgctgctttaagcatgatgaatcgtcgtaagtgatactcgacgattc
|
||||
f2v5s23 f1v4s13 0.913580 F 304149 gaatcagcttcaaccaagcgatgcagaaccgctgctttaagcatgatgaatcgtcgtaagtgatactcgacgattc
|
||||
f3v12s43 f3v3s34 0.948718 F 838714 cgaaaaaggtgaatgaaagactgggacgcctcctggtttgggacgctctaggtggttgtggcttgaacgttagcacct
|
||||
f8v0s68 f8v0s68 1.000000 T 507278 aagaccttgaacacctctaagcgaaaattggattcgagtcagggaacataaccacgggtgcgt
|
||||
f2v1s19 f1v4s13 0.913580 F 304149 gaatcaggttcttccaagcgctgcagaaccggctactttaagcattgatgaatgcgtcagtaagtgatacccgacgattc
|
||||
f1v8s17 f1v4s13 0.913580 F 304149 gaatcaggttcttccaagcgctgcagaaccggctactttaagcattgatgaatgcgtcagtaagtgatacccgacgattc
|
||||
f10v11s88 f10v7s84 0.945946 F 905994 ttgccggacactcgcaatcttccaagcagaggtccagctaactcacagccaggcatttagtcccgatgggtagc
|
||||
f3v5s36 f3v3s34 0.973684 F 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttatggcttgaaagttagcacct
|
||||
f8v7s75 f8v0s68 0.968750 F 507278 aagaccttgaacacctctaagcgaaaattggattccagtcagggaaccataaccacgggtgcgt
|
||||
f10v12s89 f10v7s84 0.945946 F 905994 ttgccggacactcgcaatcttccaagcagaggtccagctaacacacacgcaggcatttagacccgatgggtagc
|
||||
f4v2s46 f4v8s52 0.938462 F 368537 ctgtattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaagagaaga
|
||||
f8v2s70 f8v0s68 0.939394 F 507278 aagaccttgaacaacctctaagccgaaattggaattcgagtcagggaacataaccacgggtgcgat
|
||||
f11v8s99 f11v8s99 1.000000 T 421503 agcgttagcaaagagcctggttaatctgccctcgaggatcggtggtgatcagagatgcgggcatccgtttc
|
||||
f7v0s64 f7v0s64 1.000000 T 114016 gcttcgtgggaaccagagacaaccgacatatttcgaaccaccgacatacgatccttaaacc
|
||||
f11v1s92 f11v8s99 0.957746 F 421503 agcgttagcaaagagcctggttcatcgccctcgaggatcggtggtgatcaagagatgcggcatccgtttc
|
||||
f3v2s33 f3v3s34 0.960526 F 838714 cgaaaaaaggtaatgaaaggctgggatgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcact
|
||||
f8v3s71 f8v0s68 0.952381 F 507278 aagaccttgaacacctctaagcgaaattggattcgagtcagcgaacataacacgggtgcgt
|
||||
f4v3s47 f4v8s52 0.923077 F 368537 ctgtattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaaagaaga
|
||||
f10v10s87 f10v7s84 0.931507 F 905994 tctgccggacactcgcaatcttccaagcagaggtccagctaacacacgcaggcatttatccgatgggtagc
|
||||
f11v0s91 f11v8s99 0.985915 F 421503 agcgttagcaaagagcctggttaatcgccctcgaggatcggtggtgatcagagatgcgggcatccgtttc
|
||||
f8v5s73 f8v0s68 0.953125 F 507278 aagaccttgtacacctctaagcgataaattggattcgagtcagggaacataaccacggatgcgt
|
||||
f8v4s72 f8v0s68 0.984127 F 507278 aagacttgaacacctctaagcgaaaattggattcgagtcagggaacataaccacgggtgcgt
|
||||
f3v1s32 f3v3s34 0.974359 F 838714 cgaaaaagagtgaatgaaatggctgggacgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f3v4s35 f3v3s34 0.960526 F 838714 cgaaaaaggtgaagaaaggctgggacgctcctggttggcgcgctctaggtgttgtggcttgaacgttagcaccta
|
||||
f11v6s97 f11v8s99 0.944444 F 421503 agcgttagcaaagaacctggttaatcgccctcgaggatcggtggtggatcggagatgcgggcatcgcgtttc
|
||||
f4v1s45 f4v8s52 0.938462 F 368537 ctgtatttcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactatagagaaga
|
||||
f0v5s5 f0v7s7 0.880952 F 515632 ggatcacagtctacactgctcactcccccccggcccctgagtccgaggagagggtgcttcaaagtatgtataccactg
|
||||
f5v5s58 f5v3s56 0.952381 F 192648 cgcaacgcaccattaagatggtaatcactaaaaaaatcggcctaacctgtccaatcgccactt
|
||||
f1v0s9 f1v4s13 0.975309 F 304149 gaatcagcttctaaccaagcgatgcagaaccggctactttaagcattgatgaatgcgtcgtaagtgatactcgacgattc
|
||||
f8v6s74 f8v0s68 0.969231 F 507278 aagacccttgaacacctctaagcgaaaattggattcgagtcagggaacataaccacgggtgccgt
|
||||
f6v0s60 f6v0s60 1.000000 T 100983 catgtcaagagactggaaccccggtgatgtgaaaaaaggtcttgggtacgtcccatggctacg
|
||||
f10v8s85 f10v7s84 0.945205 F 905994 ttgccggacactcgaatcttccaagcagaggtccagctaacacacagcaggcatactagtcccgatgggtagc
|
||||
f10v1s78 f10v7s84 0.945946 F 905994 ttgccggacactcgcaatcctccaagcagaggtccagctaacacacagcaggcatttagtcccgatgaggtagc
|
||||
f5v4s57 f5v3s56 0.938462 F 192648 cggcaacgcaccataagatggtaatcactaaaaaaatcggcctaacctgtccatatcgccactat
|
||||
f3v10s41 f3v3s34 0.948718 F 838714 cgaaaataaggtgaatgaaagggtgggacgctcctagtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f3v7s38 f3v3s34 0.986842 F 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttcgtgcttgaacgttagcacct
|
||||
f10v6s83 f10v7s84 0.945205 F 905994 ttccggacactcgcaatcttccaagcagaggtccagctaacacacagcaggcatttagtcctgatgggtagc
|
||||
f11v2s93 f11v8s99 0.971831 F 421503 agcgttagcaaagagcctggttaatcgccctcggaggatcggtggtgatcagagatgcgggcatccgttc
|
||||
f3v9s40 f3v3s34 0.986842 F 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggggttgtggcttgaacgttagcacct
|
||||
f11v4s95 f11v8s99 0.957746 F 421503 agcgttagcaaagagcctggttaatcccctcgagatcgggtggtgatcagagatgcgggcatccgtttc
|
||||
f8v1s69 f8v0s68 0.984375 F 507278 aagaccttgaacacctctaagcgaaaattggatatcgagtcagggaacataaccacgggtgcgt
|
||||
f11v5s96 f11v8s99 0.957746 F 421503 agcgttagcaaagagcctggttaatggccctcgaggatcggtggctgaccagagatgcgggcatccgtttc
|
||||
f6v2s62 f6v0s60 0.968254 F 100983 catgtcgagagactggaaccccggtgatgtgaaaaaaggtcttgggtacgtcccatggctac
|
||||
f4v6s50 f4v8s52 0.938462 F 368537 ctgtattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaagacgaagag
|
||||
f9v0s76 f9v0s76 1.000000 T 29993 gggatcgtggcaagcaacccttgccgcctcgactgcggctaaagacgcatgttccagtaataccta
|
||||
f2v12s30 f2v8s26 0.955224 F 863655 tggactagtagaccgtgtgccacaatcgacgctgaggacacgttgatttttatacggcgtctcag
|
||||
f11v9s100 f11v8s99 0.985915 F 421503 agcgttagcaaaggagcctggttaatcgccctcgaggatcggtggtgatcagagatgcgggcatccgtttc
|
||||
f4v5s49 f4v8s52 0.938462 F 368537 ctatattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaagagaagca
|
||||
f2v9s27 f2v8s26 0.985075 F 863655 tggactagtagaccgtgtgcctaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f7v3s67 f7v0s64 0.983607 F 114016 gcttcgtgggaccagagacaaccgacatatttcgaaccaccgacatacgatccttaaacc
|
||||
f0v8s8 f0v7s7 0.916667 F 515632 ggatcacagtcctacactgctcactccaaccccggccctgagtccgaggagagggtgcttcagagtatgtataccactg
|
||||
f2v6s24 f2v8s26 0.940299 F 863655 tggactagtagacgtgtgcctcatcgacgcgtgagacactttgatttcttatacggcgtctcag
|
||||
f11v3s94 f11v8s99 0.971831 F 421503 agcgttagcaaagagcctggttaatcgccgtcgaaggatcggtggtgatcagagatgcgggcatccgtttc
|
||||
f6v3s63 f6v0s60 0.953846 F 100983 catgtcaagagactggaaccccggtgatgtgaaaaaaggttttgggtcacgtctccatggctacg
|
||||
f3v11s42 f3v3s34 0.973684 F 838714 cgaaaaaggtgaatgaaagtctgggacgctcctggtttgggacgctctaggtgttgtggcttgaacgttagcacct
|
||||
f4v4s48 f4v8s52 0.923077 F 368537 ctgtattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaagagaaa
|
||||
f3v8s39 f3v3s34 0.960526 F 838714 cgaaaaaggtgaatgaaaggcctgggacgctcctggttggggcgctctaggtgtgtggcttgaacgttagacct
|
||||
f7v1s65 f7v0s64 0.983607 F 114016 gcttcggggaaccagagacaaccgacatatttcgaaccaccgacatacgatcctttaaacc
|
||||
f5v1s54 f5v3s56 0.952381 F 192648 cggaacgcaccataagatggtaatcactaaaaaaatcggcctaacctgtccatatcgccactt
|
||||
f4v7s51 f4v8s52 0.892308 F 368537 cgtttattcgtaggatctactacgcatcaaagtatcccacttttgtaccccactaagagcaga
|
||||
f7v2s66 f7v0s64 0.967213 F 114016 gcttcgtgggaaccagaacaaccgacatattccgaaccaccggacatacgatccttaaacc
|
||||
f1v6s15 f1v4s13 0.950617 F 304149 gaatcagcttctaaccaagcgttgcagaaccggctactttaagcatgatgaatgcgtcgtaagtgatactcgacgattc
|
||||
f5v2s55 f5v3s56 0.936508 F 192648 cggcatcgcaccataagatggtaatcactaaaaaaatcggcctaacctgtccatatcgccact
|
||||
@@ -0,0 +1,101 @@
|
||||
f2v8s26 f2v8s26 1.000000 T 619902 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f10v3s80 f2v8s26 1.000000 F 619902 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f2v0s18 f2v8s26 1.000000 F 619902 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f2v7s25 f2v8s26 1.000000 F 619902 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f10v9s86 f2v8s26 1.000000 F 619902 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f2v3s21 f2v3s21 1.000000 T 243753 tggactagtagaccgtgtgcctcaatcgacgcggaggacacgttgatttcttatacggcgtctcag
|
||||
f6v1s61 f2v3s21 1.000000 F 243753 tggactagtagaccgtgtgcctcaatcgacgcggaggacacgttgatttcttatacggcgtctcag
|
||||
f2v2s20 f2v3s21 1.000000 F 243753 tggactagtagaccgtgtgcctcaatcgacgcggaggacacgttgatttcttatacggcgtctcag
|
||||
f3v3s34 f3v3s34 1.000000 T 670881 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f4v0s44 f3v3s34 1.000000 F 670881 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f3v0s31 f3v3s34 1.000000 F 670881 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f0v7s7 f0v7s7 1.000000 T 281628 ggatcacacgtctatcactgctcactccaaccccggcccttgacgtccgaggagagggtgcttctgagtatgtatacccaactg
|
||||
f1v2s11 f0v7s7 1.000000 F 281628 ggatcacacgtctatcactgctcactccaaccccggcccttgacgtccgaggagagggtgcttctgagtatgtatacccaactg
|
||||
f1v1s10 f0v7s7 1.000000 F 281628 ggatcacacgtctatcactgctcactccaaccccggcccttgacgtccgaggagagggtgcttctgagtatgtatacccaactg
|
||||
f3v6s37 f3v6s37 1.000000 T 167833 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgtctctaggttgttgtggctgaacgtagcact
|
||||
f5v0s53 f3v6s37 1.000000 F 167833 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgtctctaggttgttgtggctgaacgtagcact
|
||||
f11v7s98 f3v6s37 1.000000 F 167833 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgtctctaggttgttgtggctgaacgtagcact
|
||||
f2v4s22 f2v8s26 0.970588 F 619902 tggactagtagaccgtgtcgcctcaatcgacgcgtgaggacacgttgattcttatacggcgtctcag
|
||||
f10v7s84 f10v7s84 1.000000 T 224921 gtgccggacactcgcaatcttcacaagcagaggtccagctaacacacagcagcatttagtcccgatgggtagc
|
||||
f10v0s77 f10v0s77 1.000000 T 97674 ttgccggacactcgcaatcttccaagcagaggtccagctaacacacagcaggcatttagtcccgatgggtagc
|
||||
f5v6s59 f2v8s26 0.985075 F 619902 ggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f2v10s28 f2v8s26 0.985075 F 619902 ggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f1v5s14 f1v5s14 1.000000 T 95466 ggatcacagtctacactgctcactccagaccccgcccctgagtccgaggagagggtgcttcagagtatgttaccactg
|
||||
f0v4s4 f1v5s14 1.000000 F 95466 ggatcacagtctacactgctcactccagaccccgcccctgagtccgaggagagggtgcttcagagtatgttaccactg
|
||||
f0v1s1 f1v5s14 1.000000 F 95466 ggatcacagtctacactgctcactccagaccccgcccctgagtccgaggagagggtgcttcagagtatgttaccactg
|
||||
f0v3s3 f1v5s14 1.000000 F 95466 ggatcacagtctacactgctcactccagaccccgcccctgagtccgaggagagggtgcttcagagtatgttaccactg
|
||||
f5v3s56 f5v3s56 1.000000 T 142796 ccgcaacgcaccataagatgtaatcactaagaaaaatcggcctaacctgtcatatcgccactt
|
||||
f10v2s79 f10v2s79 1.000000 T 93964 ttgccggtcactcgcaatcttaccaaccagaggtccagctaacacacagcaggcatttagtcccgatgggtagc
|
||||
f10v13s90 f10v13s90 1.000000 T 92493 tgccggacactcgcaatctccaagcagagagtccaagctaacacacagcaggcatttgtcccgatgggtagc
|
||||
f1v4s13 f1v4s13 1.000000 T 93209 gaatcagcttctcaaccaagcgatgcagaaccggctactttaagcattgatgaatgcgtcgtaagtgatactggacgattc
|
||||
f10v4s81 f10v4s81 1.000000 T 88973 ttgccggacactggcaatcttccatagcagaggtccagctaacacacagcaggcatttagtcccgatgggtagc
|
||||
f10v5s82 f10v5s82 1.000000 T 87843 ttgccggacactcgcaatcttccaagcagaggtccagctaacacatagcaggcatttagtcccgatgggtagc
|
||||
f4v8s52 f4v8s52 1.000000 T 160201 ctgatattcgtattgatctactacgtatcaaagtatcccacttttgtgaccccactaagagaaga
|
||||
f2v11s29 f2v8s26 0.955882 F 619902 tggactgtagaaccgtgtgcctcaatccacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f0v6s6 f0v6s6 1.000000 T 84418 ggatcacagtctacactgctccctccaaccccggcccctggtccgaggagagggtgcttcagagtattataccactg
|
||||
f1v3s12 f0v6s6 1.000000 F 84418 ggatcacagtctacactgctccctccaaccccggcccctggtccgaggagagggtgcttcagagtattataccactg
|
||||
f0v0s0 f0v7s7 0.916667 F 281628 ggatcacagtctacactgctcactccaaccccggcccctgagtccgaggagagggtgcttcagagtatgtataccactg
|
||||
f0v2s2 f0v7s7 0.916667 F 281628 ggatcacagtctacactgctcactccaaccccggcccctgagtccgaggagagggtgcttcagagtatgtataccactg
|
||||
f1v7s16 f1v7s16 1.000000 T 81657 gaatcagcttcaaccaagcgatgcagaaccgctgctttaagcatgatgaatcgtcgtaagtgatactcgacgattc
|
||||
f2v5s23 f1v7s16 1.000000 F 81657 gaatcagcttcaaccaagcgatgcagaaccgctgctttaagcatgatgaatcgtcgtaagtgatactcgacgattc
|
||||
f3v12s43 f3v3s34 0.948718 F 670881 cgaaaaaggtgaatgaaagactgggacgcctcctggtttgggacgctctaggtggttgtggcttgaacgttagcacct
|
||||
f8v0s68 f8v0s68 1.000000 T 114020 aagaccttgaacacctctaagcgaaaattggattcgagtcagggaacataaccacgggtgcgt
|
||||
f2v1s19 f2v1s19 1.000000 T 79492 gaatcaggttcttccaagcgctgcagaaccggctactttaagcattgatgaatgcgtcagtaagtgatacccgacgattc
|
||||
f1v8s17 f2v1s19 1.000000 F 79492 gaatcaggttcttccaagcgctgcagaaccggctactttaagcattgatgaatgcgtcagtaagtgatacccgacgattc
|
||||
f10v11s88 f10v11s88 1.000000 T 78894 ttgccggacactcgcaatcttccaagcagaggtccagctaactcacagccaggcatttagtcccgatgggtagc
|
||||
f3v5s36 f3v3s34 0.973684 F 670881 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttatggcttgaaagttagcacct
|
||||
f8v7s75 f8v7s75 1.000000 T 75803 aagaccttgaacacctctaagcgaaaattggattccagtcagggaaccataaccacgggtgcgt
|
||||
f10v12s89 f10v12s89 1.000000 T 74438 ttgccggacactcgcaatcttccaagcagaggtccagctaacacacacgcaggcatttagacccgatgggtagc
|
||||
f4v2s46 f4v2s46 1.000000 T 83032 ctgtattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaagagaaga
|
||||
f8v2s70 f8v2s70 1.000000 T 74088 aagaccttgaacaacctctaagccgaaattggaattcgagtcagggaacataaccacgggtgcgat
|
||||
f11v8s99 f11v8s99 1.000000 T 224582 agcgttagcaaagagcctggttaatctgccctcgaggatcggtggtgatcagagatgcgggcatccgtttc
|
||||
f7v0s64 f7v0s64 1.000000 T 114016 gcttcgtgggaaccagagacaaccgacatatttcgaaccaccgacatacgatccttaaacc
|
||||
f11v1s92 f11v1s92 1.000000 T 71853 agcgttagcaaagagcctggttcatcgccctcgaggatcggtggtgatcaagagatgcggcatccgtttc
|
||||
f3v2s33 f3v3s34 0.948052 F 670881 cgaaaaaaggtaatgaaaggctgggatgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcact
|
||||
f8v3s71 f8v3s71 1.000000 T 70497 aagaccttgaacacctctaagcgaaattggattcgagtcagcgaacataacacgggtgcgt
|
||||
f4v3s47 f4v3s47 1.000000 T 69396 ctgtattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaaagaaga
|
||||
f10v10s87 f10v10s87 1.000000 T 66794 tctgccggacactcgcaatcttccaagcagaggtccagctaacacacgcaggcatttatccgatgggtagc
|
||||
f11v0s91 f11v0s91 1.000000 T 66160 agcgttagcaaagagcctggttaatcgccctcgaggatcggtggtgatcagagatgcgggcatccgtttc
|
||||
f8v5s73 f8v5s73 1.000000 T 64084 aagaccttgtacacctctaagcgataaattggattcgagtcagggaacataaccacggatgcgt
|
||||
f8v4s72 f8v4s72 1.000000 T 59724 aagacttgaacacctctaagcgaaaattggattcgagtcagggaacataaccacgggtgcgt
|
||||
f3v1s32 f3v3s34 0.974359 F 670881 cgaaaaagagtgaatgaaatggctgggacgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f3v4s35 f3v3s34 0.948052 F 670881 cgaaaaaggtgaagaaaggctgggacgctcctggttggcgcgctctaggtgttgtggcttgaacgttagcaccta
|
||||
f11v6s97 f11v6s97 1.000000 T 58908 agcgttagcaaagaacctggttaatcgccctcgaggatcggtggtggatcggagatgcgggcatcgcgtttc
|
||||
f4v1s45 f4v1s45 1.000000 T 55908 ctgtatttcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactatagagaaga
|
||||
f0v5s5 f0v5s5 1.000000 T 54120 ggatcacagtctacactgctcactcccccccggcccctgagtccgaggagagggtgcttcaaagtatgtataccactg
|
||||
f5v5s58 f5v5s58 1.000000 T 49852 cgcaacgcaccattaagatggtaatcactaaaaaaatcggcctaacctgtccaatcgccactt
|
||||
f1v0s9 f1v0s9 1.000000 T 49791 gaatcagcttctaaccaagcgatgcagaaccggctactttaagcattgatgaatgcgtcgtaagtgatactcgacgattc
|
||||
f8v6s74 f8v6s74 1.000000 T 49062 aagacccttgaacacctctaagcgaaaattggattcgagtcagggaacataaccacgggtgccgt
|
||||
f6v0s60 f6v0s60 1.000000 T 67982 catgtcaagagactggaaccccggtgatgtgaaaaaaggtcttgggtacgtcccatggctacg
|
||||
f10v8s85 f10v7s84 0.920000 F 224921 ttgccggacactcgaatcttccaagcagaggtccagctaacacacagcaggcatactagtcccgatgggtagc
|
||||
f10v1s78 f10v7s84 0.933333 F 224921 ttgccggacactcgcaatcctccaagcagaggtccagctaacacacagcaggcatttagtcccgatgaggtagc
|
||||
f5v4s57 f5v3s56 0.924242 F 142796 cggcaacgcaccataagatggtaatcactaaaaaaatcggcctaacctgtccatatcgccactat
|
||||
f3v10s41 f3v3s34 0.948718 F 670881 cgaaaataaggtgaatgaaagggtgggacgctcctagtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f3v7s38 f3v3s34 0.974026 F 670881 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttcgtgcttgaacgttagcacct
|
||||
f10v6s83 f10v7s84 0.932432 F 224921 ttccggacactcgcaatcttccaagcagaggtccagctaacacacagcaggcatttagtcctgatgggtagc
|
||||
f11v2s93 f11v8s99 0.958333 F 224582 agcgttagcaaagagcctggttaatcgccctcggaggatcggtggtgatcagagatgcgggcatccgttc
|
||||
f3v9s40 f3v3s34 0.986842 F 670881 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggggttgtggcttgaacgttagcacct
|
||||
f11v4s95 f11v8s99 0.944444 F 224582 agcgttagcaaagagcctggttaatcccctcgagatcgggtggtgatcagagatgcgggcatccgtttc
|
||||
f8v1s69 f8v0s68 0.984375 F 114020 aagaccttgaacacctctaagcgaaaattggatatcgagtcagggaacataaccacgggtgcgt
|
||||
f11v5s96 f11v8s99 0.944444 F 224582 agcgttagcaaagagcctggttaatggccctcgaggatcggtggctgaccagagatgcgggcatccgtttc
|
||||
f6v2s62 f6v2s62 1.000000 T 33001 catgtcgagagactggaaccccggtgatgtgaaaaaaggtcttgggtacgtcccatggctac
|
||||
f4v6s50 f4v8s52 0.910448 F 160201 ctgtattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaagacgaagag
|
||||
f9v0s76 f9v0s76 1.000000 T 29993 gggatcgtggcaagcaacccttgccgcctcgactgcggctaaagacgcatgttccagtaataccta
|
||||
f2v12s30 f2v8s26 0.955224 F 619902 tggactagtagaccgtgtgccacaatcgacgctgaggacacgttgatttttatacggcgtctcag
|
||||
f11v9s100 f11v8s99 0.972222 F 224582 agcgttagcaaaggagcctggttaatcgccctcgaggatcggtggtgatcagagatgcgggcatccgtttc
|
||||
f4v5s49 f4v8s52 0.924242 F 160201 ctatattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaagagaagca
|
||||
f2v9s27 f2v8s26 0.985075 F 619902 tggactagtagaccgtgtgcctaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f7v3s67 f7v0s64 0.983607 F 114016 gcttcgtgggaccagagacaaccgacatatttcgaaccaccgacatacgatccttaaacc
|
||||
f0v8s8 f0v7s7 0.905882 F 281628 ggatcacagtcctacactgctcactccaaccccggccctgagtccgaggagagggtgcttcagagtatgtataccactg
|
||||
f2v6s24 f2v8s26 0.940299 F 619902 tggactagtagacgtgtgcctcatcgacgcgtgagacactttgatttcttatacggcgtctcag
|
||||
f11v3s94 f11v8s99 0.958333 F 224582 agcgttagcaaagagcctggttaatcgccgtcgaaggatcggtggtgatcagagatgcgggcatccgtttc
|
||||
f6v3s63 f6v0s60 0.953846 F 67982 catgtcaagagactggaaccccggtgatgtgaaaaaaggttttgggtcacgtctccatggctacg
|
||||
f3v11s42 f3v3s34 0.973684 F 670881 cgaaaaaggtgaatgaaagtctgggacgctcctggtttgggacgctctaggtgttgtggcttgaacgttagcacct
|
||||
f4v4s48 f4v8s52 0.923077 F 160201 ctgtattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaagagaaa
|
||||
f3v8s39 f3v3s34 0.948052 F 670881 cgaaaaaggtgaatgaaaggcctgggacgctcctggttggggcgctctaggtgtgtggcttgaacgttagacct
|
||||
f7v1s65 f7v0s64 0.967742 F 114016 gcttcggggaaccagagacaaccgacatatttcgaaccaccgacatacgatcctttaaacc
|
||||
f5v1s54 f5v3s56 0.923077 F 142796 cggaacgcaccataagatggtaatcactaaaaaaatcggcctaacctgtccatatcgccactt
|
||||
f4v7s51 f4v2s46 0.937500 F 83032 cgtttattcgtaggatctactacgcatcaaagtatcccacttttgtaccccactaagagcaga
|
||||
f7v2s66 f7v0s64 0.951613 F 114016 gcttcgtgggaaccagaacaaccgacatattccgaaccaccggacatacgatccttaaacc
|
||||
f1v6s15 f1v4s13 0.950617 F 93209 gaatcagcttctaaccaagcgttgcagaaccggctactttaagcatgatgaatgcgtcgtaagtgatactcgacgattc
|
||||
f5v2s55 f5v3s56 0.907692 F 142796 cggcatcgcaccataagatggtaatcactaaaaaaatcggcctaacctgtccatatcgccact
|
||||
@@ -0,0 +1,101 @@
|
||||
f2v8s26 f2v8s26 0.000000 T 863655 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f10v3s80 f2v8s26 0.000000 F 863655 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f2v0s18 f2v8s26 0.000000 F 863655 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f2v7s25 f2v8s26 0.000000 F 863655 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f10v9s86 f2v8s26 0.000000 F 863655 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f2v3s21 f2v8s26 1.000000 F 863655 tggactagtagaccgtgtgcctcaatcgacgcggaggacacgttgatttcttatacggcgtctcag
|
||||
f6v1s61 f2v8s26 1.000000 F 863655 tggactagtagaccgtgtgcctcaatcgacgcggaggacacgttgatttcttatacggcgtctcag
|
||||
f2v2s20 f2v8s26 1.000000 F 863655 tggactagtagaccgtgtgcctcaatcgacgcggaggacacgttgatttcttatacggcgtctcag
|
||||
f3v3s34 f3v3s34 0.000000 T 670881 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f4v0s44 f3v3s34 0.000000 F 670881 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f3v0s31 f3v3s34 0.000000 F 670881 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f0v7s7 f0v7s7 0.000000 T 173457 ggatcacacgtctatcactgctcactccaaccccggcccttgacgtccgaggagagggtgcttctgagtatgtatacccaactg
|
||||
f1v2s11 f0v7s7 0.000000 F 173457 ggatcacacgtctatcactgctcactccaaccccggcccttgacgtccgaggagagggtgcttctgagtatgtatacccaactg
|
||||
f1v1s10 f0v7s7 0.000000 F 173457 ggatcacacgtctatcactgctcactccaaccccggcccttgacgtccgaggagagggtgcttctgagtatgtatacccaactg
|
||||
f3v6s37 f3v6s37 0.000000 T 167833 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgtctctaggttgttgtggctgaacgtagcact
|
||||
f5v0s53 f3v6s37 0.000000 F 167833 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgtctctaggttgttgtggctgaacgtagcact
|
||||
f11v7s98 f3v6s37 0.000000 F 167833 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgtctctaggttgttgtggctgaacgtagcact
|
||||
f2v4s22 f2v8s26 2.000000 F 863655 tggactagtagaccgtgtcgcctcaatcgacgcgtgaggacacgttgattcttatacggcgtctcag
|
||||
f10v7s84 f10v7s84 0.000000 T 196352 gtgccggacactcgcaatcttcacaagcagaggtccagctaacacacagcagcatttagtcccgatgggtagc
|
||||
f10v0s77 f10v7s84 3.000000 F 196352 ttgccggacactcgcaatcttccaagcagaggtccagctaacacacagcaggcatttagtcccgatgggtagc
|
||||
f5v6s59 f2v8s26 1.000000 F 863655 ggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f2v10s28 f2v8s26 1.000000 F 863655 ggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f1v5s14 f1v5s14 0.000000 T 203637 ggatcacagtctacactgctcactccagaccccgcccctgagtccgaggagagggtgcttcagagtatgttaccactg
|
||||
f0v4s4 f1v5s14 0.000000 F 203637 ggatcacagtctacactgctcactccagaccccgcccctgagtccgaggagagggtgcttcagagtatgttaccactg
|
||||
f0v1s1 f1v5s14 0.000000 F 203637 ggatcacagtctacactgctcactccagaccccgcccctgagtccgaggagagggtgcttcagagtatgttaccactg
|
||||
f0v3s3 f1v5s14 0.000000 F 203637 ggatcacagtctacactgctcactccagaccccgcccctgagtccgaggagagggtgcttcagagtatgttaccactg
|
||||
f5v3s56 f5v3s56 0.000000 T 94426 ccgcaacgcaccataagatgtaatcactaagaaaaatcggcctaacctgtcatatcgccactt
|
||||
f10v2s79 f10v2s79 0.000000 T 93964 ttgccggtcactcgcaatcttaccaaccagaggtccagctaacacacagcaggcatttagtcccgatgggtagc
|
||||
f10v13s90 f10v13s90 0.000000 T 92493 tgccggacactcgcaatctccaagcagagagtccaagctaacacacagcaggcatttgtcccgatgggtagc
|
||||
f1v4s13 f1v4s13 0.000000 T 143000 gaatcagcttctcaaccaagcgatgcagaaccggctactttaagcattgatgaatgcgtcgtaagtgatactggacgattc
|
||||
f10v4s81 f10v4s81 0.000000 T 409687 ttgccggacactggcaatcttccatagcagaggtccagctaacacacagcaggcatttagtcccgatgggtagc
|
||||
f10v5s82 f10v4s81 3.000000 F 409687 ttgccggacactcgcaatcttccaagcagaggtccagctaacacatagcaggcatttagtcccgatgggtagc
|
||||
f4v8s52 f4v8s52 0.000000 T 161072 ctgatattcgtattgatctactacgtatcaaagtatcccacttttgtgaccccactaagagaaga
|
||||
f2v11s29 f2v8s26 3.000000 F 863655 tggactgtagaaccgtgtgcctcaatccacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f0v6s6 f0v6s6 0.000000 T 84418 ggatcacagtctacactgctccctccaaccccggcccctggtccgaggagagggtgcttcagagtattataccactg
|
||||
f1v3s12 f0v6s6 0.000000 F 84418 ggatcacagtctacactgctccctccaaccccggcccctggtccgaggagagggtgcttcagagtattataccactg
|
||||
f0v0s0 f1v5s14 3.000000 F 203637 ggatcacagtctacactgctcactccaaccccggcccctgagtccgaggagagggtgcttcagagtatgtataccactg
|
||||
f0v2s2 f1v5s14 3.000000 F 203637 ggatcacagtctacactgctcactccaaccccggcccctgagtccgaggagagggtgcttcagagtatgtataccactg
|
||||
f1v7s16 f1v7s16 0.000000 T 81657 gaatcagcttcaaccaagcgatgcagaaccgctgctttaagcatgatgaatcgtcgtaagtgatactcgacgattc
|
||||
f2v5s23 f1v7s16 0.000000 F 81657 gaatcagcttcaaccaagcgatgcagaaccgctgctttaagcatgatgaatcgtcgtaagtgatactcgacgattc
|
||||
f3v12s43 f3v3s34 4.000000 F 670881 cgaaaaaggtgaatgaaagactgggacgcctcctggtttgggacgctctaggtggttgtggcttgaacgttagcacct
|
||||
f8v0s68 f8v0s68 0.000000 T 433190 aagaccttgaacacctctaagcgaaaattggattcgagtcagggaacataaccacgggtgcgt
|
||||
f2v1s19 f2v1s19 0.000000 T 79492 gaatcaggttcttccaagcgctgcagaaccggctactttaagcattgatgaatgcgtcagtaagtgatacccgacgattc
|
||||
f1v8s17 f2v1s19 0.000000 F 79492 gaatcaggttcttccaagcgctgcagaaccggctactttaagcattgatgaatgcgtcagtaagtgatacccgacgattc
|
||||
f10v11s88 f10v4s81 4.000000 F 409687 ttgccggacactcgcaatcttccaagcagaggtccagctaactcacagccaggcatttagtcccgatgggtagc
|
||||
f3v5s36 f3v3s34 2.000000 F 670881 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttatggcttgaaagttagcacct
|
||||
f8v7s75 f8v0s68 2.000000 F 433190 aagaccttgaacacctctaagcgaaaattggattccagtcagggaaccataaccacgggtgcgt
|
||||
f10v12s89 f10v4s81 4.000000 F 409687 ttgccggacactcgcaatcttccaagcagaggtccagctaacacacacgcaggcatttagacccgatgggtagc
|
||||
f4v2s46 f4v8s52 4.000000 F 161072 ctgtattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaagagaaga
|
||||
f8v2s70 f8v2s70 0.000000 T 74088 aagaccttgaacaacctctaagccgaaattggaattcgagtcagggaacataaccacgggtgcgat
|
||||
f11v8s99 f11v8s99 0.000000 T 362595 agcgttagcaaagagcctggttaatctgccctcgaggatcggtggtgatcagagatgcgggcatccgtttc
|
||||
f7v0s64 f7v0s64 0.000000 T 114016 gcttcgtgggaaccagagacaaccgacatatttcgaaccaccgacatacgatccttaaacc
|
||||
f11v1s92 f11v8s99 4.000000 F 362595 agcgttagcaaagagcctggttcatcgccctcgaggatcggtggtgatcaagagatgcggcatccgtttc
|
||||
f3v2s33 f3v3s34 4.000000 F 670881 cgaaaaaaggtaatgaaaggctgggatgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcact
|
||||
f8v3s71 f8v0s68 3.000000 F 433190 aagaccttgaacacctctaagcgaaattggattcgagtcagcgaacataacacgggtgcgt
|
||||
f4v3s47 f4v3s47 0.000000 T 198866 ctgtattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaaagaaga
|
||||
f10v10s87 f10v10s87 0.000000 T 66794 tctgccggacactcgcaatcttccaagcagaggtccagctaacacacgcaggcatttatccgatgggtagc
|
||||
f11v0s91 f11v8s99 1.000000 F 362595 agcgttagcaaagagcctggttaatcgccctcgaggatcggtggtgatcagagatgcgggcatccgtttc
|
||||
f8v5s73 f8v0s68 3.000000 F 433190 aagaccttgtacacctctaagcgataaattggattcgagtcagggaacataaccacggatgcgt
|
||||
f8v4s72 f8v0s68 1.000000 F 433190 aagacttgaacacctctaagcgaaaattggattcgagtcagggaacataaccacgggtgcgt
|
||||
f3v1s32 f3v3s34 2.000000 F 670881 cgaaaaagagtgaatgaaatggctgggacgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f3v4s35 f3v3s34 4.000000 F 670881 cgaaaaaggtgaagaaaggctgggacgctcctggttggcgcgctctaggtgttgtggcttgaacgttagcaccta
|
||||
f11v6s97 f11v6s97 0.000000 T 58908 agcgttagcaaagaacctggttaatcgccctcgaggatcggtggtggatcggagatgcgggcatcgcgtttc
|
||||
f4v1s45 f4v3s47 3.000000 F 198866 ctgtatttcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactatagagaaga
|
||||
f0v5s5 f0v5s5 0.000000 T 54120 ggatcacagtctacactgctcactcccccccggcccctgagtccgaggagagggtgcttcaaagtatgtataccactg
|
||||
f5v5s58 f5v5s58 0.000000 T 97556 cgcaacgcaccattaagatggtaatcactaaaaaaatcggcctaacctgtccaatcgccactt
|
||||
f1v0s9 f1v4s13 2.000000 F 143000 gaatcagcttctaaccaagcgatgcagaaccggctactttaagcattgatgaatgcgtcgtaagtgatactcgacgattc
|
||||
f8v6s74 f8v0s68 2.000000 F 433190 aagacccttgaacacctctaagcgaaaattggattcgagtcagggaacataaccacgggtgccgt
|
||||
f6v0s60 f6v0s60 0.000000 T 100983 catgtcaagagactggaaccccggtgatgtgaaaaaaggtcttgggtacgtcccatggctacg
|
||||
f10v8s85 f10v8s85 0.000000 T 46704 ttgccggacactcgaatcttccaagcagaggtccagctaacacacagcaggcatactagtcccgatgggtagc
|
||||
f10v1s78 f10v4s81 4.000000 F 409687 ttgccggacactcgcaatcctccaagcagaggtccagctaacacacagcaggcatttagtcccgatgaggtagc
|
||||
f5v4s57 f5v5s58 4.000000 F 97556 cggcaacgcaccataagatggtaatcactaaaaaaatcggcctaacctgtccatatcgccactat
|
||||
f3v10s41 f3v3s34 4.000000 F 670881 cgaaaataaggtgaatgaaagggtgggacgctcctagtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f3v7s38 f3v3s34 2.000000 F 670881 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttcgtgcttgaacgttagcacct
|
||||
f10v6s83 f10v4s81 4.000000 F 409687 ttccggacactcgcaatcttccaagcagaggtccagctaacacacagcaggcatttagtcctgatgggtagc
|
||||
f11v2s93 f11v8s99 3.000000 F 362595 agcgttagcaaagagcctggttaatcgccctcggaggatcggtggtgatcagagatgcgggcatccgttc
|
||||
f3v9s40 f3v3s34 1.000000 F 670881 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggggttgtggcttgaacgttagcacct
|
||||
f11v4s95 f11v8s99 4.000000 F 362595 agcgttagcaaagagcctggttaatcccctcgagatcgggtggtgatcagagatgcgggcatccgtttc
|
||||
f8v1s69 f8v0s68 1.000000 F 433190 aagaccttgaacacctctaagcgaaaattggatatcgagtcagggaacataaccacgggtgcgt
|
||||
f11v5s96 f11v8s99 4.000000 F 362595 agcgttagcaaagagcctggttaatggccctcgaggatcggtggctgaccagagatgcgggcatccgtttc
|
||||
f6v2s62 f6v0s60 2.000000 F 100983 catgtcgagagactggaaccccggtgatgtgaaaaaaggtcttgggtacgtcccatggctac
|
||||
f4v6s50 f4v3s47 3.000000 F 198866 ctgtattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaagacgaagag
|
||||
f9v0s76 f9v0s76 0.000000 T 29993 gggatcgtggcaagcaacccttgccgcctcgactgcggctaaagacgcatgttccagtaataccta
|
||||
f2v12s30 f2v8s26 3.000000 F 863655 tggactagtagaccgtgtgccacaatcgacgctgaggacacgttgatttttatacggcgtctcag
|
||||
f11v9s100 f11v8s99 2.000000 F 362595 agcgttagcaaaggagcctggttaatcgccctcgaggatcggtggtgatcagagatgcgggcatccgtttc
|
||||
f4v5s49 f4v3s47 3.000000 F 198866 ctatattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaagagaagca
|
||||
f2v9s27 f2v8s26 1.000000 F 863655 tggactagtagaccgtgtgcctaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f7v3s67 f7v0s64 1.000000 F 114016 gcttcgtgggaccagagacaaccgacatatttcgaaccaccgacatacgatccttaaacc
|
||||
f0v8s8 f1v5s14 4.000000 F 203637 ggatcacagtcctacactgctcactccaaccccggccctgagtccgaggagagggtgcttcagagtatgtataccactg
|
||||
f2v6s24 f2v8s26 4.000000 F 863655 tggactagtagacgtgtgcctcatcgacgcgtgagacactttgatttcttatacggcgtctcag
|
||||
f11v3s94 f11v8s99 3.000000 F 362595 agcgttagcaaagagcctggttaatcgccgtcgaaggatcggtggtgatcagagatgcgggcatccgtttc
|
||||
f6v3s63 f6v0s60 3.000000 F 100983 catgtcaagagactggaaccccggtgatgtgaaaaaaggttttgggtcacgtctccatggctacg
|
||||
f3v11s42 f3v3s34 2.000000 F 670881 cgaaaaaggtgaatgaaagtctgggacgctcctggtttgggacgctctaggtgttgtggcttgaacgttagcacct
|
||||
f4v4s48 f4v3s47 2.000000 F 198866 ctgtattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaagagaaa
|
||||
f3v8s39 f3v3s34 4.000000 F 670881 cgaaaaaggtgaatgaaaggcctgggacgctcctggttggggcgctctaggtgtgtggcttgaacgttagacct
|
||||
f7v1s65 f7v0s64 2.000000 F 114016 gcttcggggaaccagagacaaccgacatatttcgaaccaccgacatacgatcctttaaacc
|
||||
f5v1s54 f5v5s58 3.000000 F 97556 cggaacgcaccataagatggtaatcactaaaaaaatcggcctaacctgtccatatcgccactt
|
||||
f4v7s51 f4v7s51 0.000000 T 8599 cgtttattcgtaggatctactacgcatcaaagtatcccacttttgtaccccactaagagcaga
|
||||
f7v2s66 f7v0s64 3.000000 F 114016 gcttcgtgggaaccagaacaaccgacatattccgaaccaccggacatacgatccttaaacc
|
||||
f1v6s15 f1v4s13 4.000000 F 143000 gaatcagcttctaaccaagcgttgcagaaccggctactttaagcatgatgaatgcgtcgtaagtgatactcgacgattc
|
||||
f5v2s55 f5v2s55 0.000000 T 666 cggcatcgcaccataagatggtaatcactaaaaaaatcggcctaacctgtccatatcgccact
|
||||
@@ -0,0 +1,101 @@
|
||||
f2v8s26 f2v8s26 67.000000 T 4505217 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f10v3s80 f2v8s26 67.000000 F 4505217 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f2v0s18 f2v8s26 67.000000 F 4505217 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f2v7s25 f2v8s26 67.000000 F 4505217 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f10v9s86 f2v8s26 67.000000 F 4505217 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f2v3s21 f2v8s26 66.000000 F 4505217 tggactagtagaccgtgtgcctcaatcgacgcggaggacacgttgatttcttatacggcgtctcag
|
||||
f6v1s61 f2v8s26 66.000000 F 4505217 tggactagtagaccgtgtgcctcaatcgacgcggaggacacgttgatttcttatacggcgtctcag
|
||||
f2v2s20 f2v8s26 66.000000 F 4505217 tggactagtagaccgtgtgcctcaatcgacgcggaggacacgttgatttcttatacggcgtctcag
|
||||
f3v3s34 f2v8s26 42.000000 F 4505217 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f4v0s44 f2v8s26 42.000000 F 4505217 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f3v0s31 f2v8s26 42.000000 F 4505217 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f0v7s7 f2v8s26 48.000000 F 4505217 ggatcacacgtctatcactgctcactccaaccccggcccttgacgtccgaggagagggtgcttctgagtatgtatacccaactg
|
||||
f1v2s11 f2v8s26 48.000000 F 4505217 ggatcacacgtctatcactgctcactccaaccccggcccttgacgtccgaggagagggtgcttctgagtatgtatacccaactg
|
||||
f1v1s10 f2v8s26 48.000000 F 4505217 ggatcacacgtctatcactgctcactccaaccccggcccttgacgtccgaggagagggtgcttctgagtatgtatacccaactg
|
||||
f3v6s37 f2v8s26 43.000000 F 4505217 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgtctctaggttgttgtggctgaacgtagcact
|
||||
f5v0s53 f2v8s26 43.000000 F 4505217 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgtctctaggttgttgtggctgaacgtagcact
|
||||
f11v7s98 f2v8s26 43.000000 F 4505217 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgtctctaggttgttgtggctgaacgtagcact
|
||||
f2v4s22 f2v8s26 66.000000 F 4505217 tggactagtagaccgtgtcgcctcaatcgacgcgtgaggacacgttgattcttatacggcgtctcag
|
||||
f10v7s84 f2v8s26 43.000000 F 4505217 gtgccggacactcgcaatcttcacaagcagaggtccagctaacacacagcagcatttagtcccgatgggtagc
|
||||
f10v0s77 f2v8s26 43.000000 F 4505217 ttgccggacactcgcaatcttccaagcagaggtccagctaacacacagcaggcatttagtcccgatgggtagc
|
||||
f5v6s59 f2v8s26 66.000000 F 4505217 ggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f2v10s28 f2v8s26 66.000000 F 4505217 ggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f1v5s14 f2v8s26 46.000000 F 4505217 ggatcacagtctacactgctcactccagaccccgcccctgagtccgaggagagggtgcttcagagtatgttaccactg
|
||||
f0v4s4 f2v8s26 46.000000 F 4505217 ggatcacagtctacactgctcactccagaccccgcccctgagtccgaggagagggtgcttcagagtatgttaccactg
|
||||
f0v1s1 f2v8s26 46.000000 F 4505217 ggatcacagtctacactgctcactccagaccccgcccctgagtccgaggagagggtgcttcagagtatgttaccactg
|
||||
f0v3s3 f2v8s26 46.000000 F 4505217 ggatcacagtctacactgctcactccagaccccgcccctgagtccgaggagagggtgcttcagagtatgttaccactg
|
||||
f5v3s56 f5v3s56 63.000000 T 229172 ccgcaacgcaccataagatgtaatcactaagaaaaatcggcctaacctgtcatatcgccactt
|
||||
f10v2s79 f2v8s26 43.000000 F 4505217 ttgccggtcactcgcaatcttaccaaccagaggtccagctaacacacagcaggcatttagtcccgatgggtagc
|
||||
f10v13s90 f2v8s26 43.000000 F 4505217 tgccggacactcgcaatctccaagcagagagtccaagctaacacacagcaggcatttgtcccgatgggtagc
|
||||
f1v4s13 f2v8s26 49.000000 F 4505217 gaatcagcttctcaaccaagcgatgcagaaccggctactttaagcattgatgaatgcgtcgtaagtgatactggacgattc
|
||||
f10v4s81 f2v8s26 44.000000 F 4505217 ttgccggacactggcaatcttccatagcagaggtccagctaacacacagcaggcatttagtcccgatgggtagc
|
||||
f10v5s82 f2v8s26 43.000000 F 4505217 ttgccggacactcgcaatcttccaagcagaggtccagctaacacatagcaggcatttagtcccgatgggtagc
|
||||
f4v8s52 f4v8s52 65.000000 T 254973 ctgatattcgtattgatctactacgtatcaaagtatcccacttttgtgaccccactaagagaaga
|
||||
f2v11s29 f2v8s26 65.000000 F 4505217 tggactgtagaaccgtgtgcctcaatccacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f0v6s6 f2v8s26 47.000000 F 4505217 ggatcacagtctacactgctccctccaaccccggcccctggtccgaggagagggtgcttcagagtattataccactg
|
||||
f1v3s12 f2v8s26 47.000000 F 4505217 ggatcacagtctacactgctccctccaaccccggcccctggtccgaggagagggtgcttcagagtattataccactg
|
||||
f0v0s0 f2v8s26 47.000000 F 4505217 ggatcacagtctacactgctcactccaaccccggcccctgagtccgaggagagggtgcttcagagtatgtataccactg
|
||||
f0v2s2 f2v8s26 47.000000 F 4505217 ggatcacagtctacactgctcactccaaccccggcccctgagtccgaggagagggtgcttcagagtatgtataccactg
|
||||
f1v7s16 f2v8s26 46.000000 F 4505217 gaatcagcttcaaccaagcgatgcagaaccgctgctttaagcatgatgaatcgtcgtaagtgatactcgacgattc
|
||||
f2v5s23 f2v8s26 46.000000 F 4505217 gaatcagcttcaaccaagcgatgcagaaccgctgctttaagcatgatgaatcgtcgtaagtgatactcgacgattc
|
||||
f3v12s43 f2v8s26 44.000000 F 4505217 cgaaaaaggtgaatgaaagactgggacgcctcctggtttgggacgctctaggtggttgtggcttgaacgttagcacct
|
||||
f8v0s68 f2v8s26 40.000000 F 4505217 aagaccttgaacacctctaagcgaaaattggattcgagtcagggaacataaccacgggtgcgt
|
||||
f2v1s19 f2v8s26 47.000000 F 4505217 gaatcaggttcttccaagcgctgcagaaccggctactttaagcattgatgaatgcgtcagtaagtgatacccgacgattc
|
||||
f1v8s17 f2v8s26 47.000000 F 4505217 gaatcaggttcttccaagcgctgcagaaccggctactttaagcattgatgaatgcgtcagtaagtgatacccgacgattc
|
||||
f10v11s88 f2v8s26 43.000000 F 4505217 ttgccggacactcgcaatcttccaagcagaggtccagctaactcacagccaggcatttagtcccgatgggtagc
|
||||
f3v5s36 f2v8s26 43.000000 F 4505217 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttatggcttgaaagttagcacct
|
||||
f8v7s75 f5v3s56 41.000000 F 229172 aagaccttgaacacctctaagcgaaaattggattccagtcagggaaccataaccacgggtgcgt
|
||||
f10v12s89 f2v8s26 43.000000 F 4505217 ttgccggacactcgcaatcttccaagcagaggtccagctaacacacacgcaggcatttagacccgatgggtagc
|
||||
f4v2s46 f4v8s52 61.000000 F 254973 ctgtattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaagagaaga
|
||||
f8v2s70 f2v8s26 40.000000 F 4505217 aagaccttgaacaacctctaagccgaaattggaattcgagtcagggaacataaccacgggtgcgat
|
||||
f11v8s99 f2v8s26 45.000000 F 4505217 agcgttagcaaagagcctggttaatctgccctcgaggatcggtggtgatcagagatgcgggcatccgtttc
|
||||
f7v0s64 f7v0s64 61.000000 T 114016 gcttcgtgggaaccagagacaaccgacatatttcgaaccaccgacatacgatccttaaacc
|
||||
f11v1s92 f2v8s26 45.000000 F 4505217 agcgttagcaaagagcctggttcatcgccctcgaggatcggtggtgatcaagagatgcggcatccgtttc
|
||||
f3v2s33 f2v8s26 42.000000 F 4505217 cgaaaaaaggtaatgaaaggctgggatgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcact
|
||||
f8v3s71 f2v8s26 40.000000 F 4505217 aagaccttgaacacctctaagcgaaattggattcgagtcagcgaacataacacgggtgcgt
|
||||
f4v3s47 f4v8s52 60.000000 F 254973 ctgtattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaaagaaga
|
||||
f10v10s87 f2v8s26 43.000000 F 4505217 tctgccggacactcgcaatcttccaagcagaggtccagctaacacacgcaggcatttatccgatgggtagc
|
||||
f11v0s91 f2v8s26 45.000000 F 4505217 agcgttagcaaagagcctggttaatcgccctcgaggatcggtggtgatcagagatgcgggcatccgtttc
|
||||
f8v5s73 f2v8s26 40.000000 F 4505217 aagaccttgtacacctctaagcgataaattggattcgagtcagggaacataaccacggatgcgt
|
||||
f8v4s72 f8v4s72 62.000000 T 59724 aagacttgaacacctctaagcgaaaattggattcgagtcagggaacataaccacgggtgcgt
|
||||
f3v1s32 f2v8s26 44.000000 F 4505217 cgaaaaagagtgaatgaaatggctgggacgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f3v4s35 f2v8s26 43.000000 F 4505217 cgaaaaaggtgaagaaaggctgggacgctcctggttggcgcgctctaggtgttgtggcttgaacgttagcaccta
|
||||
f11v6s97 f2v8s26 45.000000 F 4505217 agcgttagcaaagaacctggttaatcgccctcgaggatcggtggtggatcggagatgcgggcatcgcgtttc
|
||||
f4v1s45 f2v8s26 40.000000 F 4505217 ctgtatttcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactatagagaaga
|
||||
f0v5s5 f2v8s26 45.000000 F 4505217 ggatcacagtctacactgctcactcccccccggcccctgagtccgaggagagggtgcttcaaagtatgtataccactg
|
||||
f5v5s58 f5v3s56 60.000000 F 229172 cgcaacgcaccattaagatggtaatcactaaaaaaatcggcctaacctgtccaatcgccactt
|
||||
f1v0s9 f2v8s26 47.000000 F 4505217 gaatcagcttctaaccaagcgatgcagaaccggctactttaagcattgatgaatgcgtcgtaagtgatactcgacgattc
|
||||
f8v6s74 f2v8s26 41.000000 F 4505217 aagacccttgaacacctctaagcgaaaattggattcgagtcagggaacataaccacgggtgccgt
|
||||
f6v0s60 f2v8s26 41.000000 F 4505217 catgtcaagagactggaaccccggtgatgtgaaaaaaggtcttgggtacgtcccatggctacg
|
||||
f10v8s85 f2v8s26 43.000000 F 4505217 ttgccggacactcgaatcttccaagcagaggtccagctaacacacagcaggcatactagtcccgatgggtagc
|
||||
f10v1s78 f2v8s26 44.000000 F 4505217 ttgccggacactcgcaatcctccaagcagaggtccagctaacacacagcaggcatttagtcccgatgaggtagc
|
||||
f5v4s57 f2v8s26 41.000000 F 4505217 cggcaacgcaccataagatggtaatcactaaaaaaatcggcctaacctgtccatatcgccactat
|
||||
f3v10s41 f2v8s26 43.000000 F 4505217 cgaaaataaggtgaatgaaagggtgggacgctcctagtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f3v7s38 f2v8s26 43.000000 F 4505217 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttcgtgcttgaacgttagcacct
|
||||
f10v6s83 f2v8s26 44.000000 F 4505217 ttccggacactcgcaatcttccaagcagaggtccagctaacacacagcaggcatttagtcctgatgggtagc
|
||||
f11v2s93 f2v8s26 45.000000 F 4505217 agcgttagcaaagagcctggttaatcgccctcggaggatcggtggtgatcagagatgcgggcatccgttc
|
||||
f3v9s40 f2v8s26 42.000000 F 4505217 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggggttgtggcttgaacgttagcacct
|
||||
f11v4s95 f2v8s26 44.000000 F 4505217 agcgttagcaaagagcctggttaatcccctcgagatcgggtggtgatcagagatgcgggcatccgtttc
|
||||
f8v1s69 f2v8s26 40.000000 F 4505217 aagaccttgaacacctctaagcgaaaattggatatcgagtcagggaacataaccacgggtgcgt
|
||||
f11v5s96 f2v8s26 44.000000 F 4505217 agcgttagcaaagagcctggttaatggccctcgaggatcggtggctgaccagagatgcgggcatccgtttc
|
||||
f6v2s62 f2v8s26 40.000000 F 4505217 catgtcgagagactggaaccccggtgatgtgaaaaaaggtcttgggtacgtcccatggctac
|
||||
f4v6s50 f2v8s26 40.000000 F 4505217 ctgtattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaagacgaagag
|
||||
f9v0s76 f2v8s26 44.000000 F 4505217 gggatcgtggcaagcaacccttgccgcctcgactgcggctaaagacgcatgttccagtaataccta
|
||||
f2v12s30 f2v8s26 64.000000 F 4505217 tggactagtagaccgtgtgccacaatcgacgctgaggacacgttgatttttatacggcgtctcag
|
||||
f11v9s100 f2v8s26 45.000000 F 4505217 agcgttagcaaaggagcctggttaatcgccctcgaggatcggtggtgatcagagatgcgggcatccgtttc
|
||||
f4v5s49 f2v8s26 40.000000 F 4505217 ctatattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaagagaagca
|
||||
f2v9s27 f2v8s26 66.000000 F 4505217 tggactagtagaccgtgtgcctaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f7v3s67 f7v0s64 60.000000 F 114016 gcttcgtgggaccagagacaaccgacatatttcgaaccaccgacatacgatccttaaacc
|
||||
f0v8s8 f2v8s26 47.000000 F 4505217 ggatcacagtcctacactgctcactccaaccccggccctgagtccgaggagagggtgcttcagagtatgtataccactg
|
||||
f2v6s24 f2v8s26 63.000000 F 4505217 tggactagtagacgtgtgcctcatcgacgcgtgagacactttgatttcttatacggcgtctcag
|
||||
f11v3s94 f2v8s26 46.000000 F 4505217 agcgttagcaaagagcctggttaatcgccgtcgaaggatcggtggtgatcagagatgcgggcatccgtttc
|
||||
f6v3s63 f2v8s26 42.000000 F 4505217 catgtcaagagactggaaccccggtgatgtgaaaaaaggttttgggtcacgtctccatggctacg
|
||||
f3v11s42 f2v8s26 44.000000 F 4505217 cgaaaaaggtgaatgaaagtctgggacgctcctggtttgggacgctctaggtgttgtggcttgaacgttagcacct
|
||||
f4v4s48 f4v8s52 60.000000 F 254973 ctgtattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaagagaaa
|
||||
f3v8s39 f2v8s26 43.000000 F 4505217 cgaaaaaggtgaatgaaaggcctgggacgctcctggttggggcgctctaggtgtgtggcttgaacgttagacct
|
||||
f7v1s65 f7v0s64 60.000000 F 114016 gcttcggggaaccagagacaaccgacatatttcgaaccaccgacatacgatcctttaaacc
|
||||
f5v1s54 f5v3s56 60.000000 F 229172 cggaacgcaccataagatggtaatcactaaaaaaatcggcctaacctgtccatatcgccactt
|
||||
f4v7s51 f4v8s52 58.000000 F 254973 cgtttattcgtaggatctactacgcatcaaagtatcccacttttgtaccccactaagagcaga
|
||||
f7v2s66 f7v0s64 59.000000 F 114016 gcttcgtgggaaccagaacaaccgacatattccgaaccaccggacatacgatccttaaacc
|
||||
f1v6s15 f2v8s26 46.000000 F 4505217 gaatcagcttctaaccaagcgttgcagaaccggctactttaagcatgatgaatgcgtcgtaagtgatactcgacgattc
|
||||
f5v2s55 f2v8s26 40.000000 F 4505217 cggcatcgcaccataagatggtaatcactaaaaaaatcggcctaacctgtccatatcgccact
|
||||
@@ -0,0 +1,101 @@
|
||||
f2v8s26 f2v8s26 1.000000 T 863655 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f10v3s80 f2v8s26 1.000000 F 863655 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f2v0s18 f2v8s26 1.000000 F 863655 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f2v7s25 f2v8s26 1.000000 F 863655 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f10v9s86 f2v8s26 1.000000 F 863655 tggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f2v3s21 f2v8s26 1.000000 F 863655 tggactagtagaccgtgtgcctcaatcgacgcggaggacacgttgatttcttatacggcgtctcag
|
||||
f6v1s61 f2v8s26 1.000000 F 863655 tggactagtagaccgtgtgcctcaatcgacgcggaggacacgttgatttcttatacggcgtctcag
|
||||
f2v2s20 f2v8s26 1.000000 F 863655 tggactagtagaccgtgtgcctcaatcgacgcggaggacacgttgatttcttatacggcgtctcag
|
||||
f3v3s34 f3v3s34 1.000000 T 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f4v0s44 f3v3s34 1.000000 F 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f3v0s31 f3v3s34 1.000000 F 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f0v7s7 f0v7s7 1.000000 T 515632 ggatcacacgtctatcactgctcactccaaccccggcccttgacgtccgaggagagggtgcttctgagtatgtatacccaactg
|
||||
f1v2s11 f0v7s7 1.000000 F 515632 ggatcacacgtctatcactgctcactccaaccccggcccttgacgtccgaggagagggtgcttctgagtatgtatacccaactg
|
||||
f1v1s10 f0v7s7 1.000000 F 515632 ggatcacacgtctatcactgctcactccaaccccggcccttgacgtccgaggagagggtgcttctgagtatgtatacccaactg
|
||||
f3v6s37 f3v3s34 0.973333 F 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgtctctaggttgttgtggctgaacgtagcact
|
||||
f5v0s53 f3v3s34 0.973333 F 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgtctctaggttgttgtggctgaacgtagcact
|
||||
f11v7s98 f3v3s34 0.973333 F 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgtctctaggttgttgtggctgaacgtagcact
|
||||
f2v4s22 f2v8s26 0.985075 F 863655 tggactagtagaccgtgtcgcctcaatcgacgcgtgaggacacgttgattcttatacggcgtctcag
|
||||
f10v7s84 f10v7s84 1.000000 T 905994 gtgccggacactcgcaatcttcacaagcagaggtccagctaacacacagcagcatttagtcccgatgggtagc
|
||||
f10v0s77 f10v7s84 0.972603 F 905994 ttgccggacactcgcaatcttccaagcagaggtccagctaacacacagcaggcatttagtcccgatgggtagc
|
||||
f5v6s59 f2v8s26 1.000000 F 863655 ggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f2v10s28 f2v8s26 1.000000 F 863655 ggactagtagaccgtgtgcctcaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f1v5s14 f0v7s7 0.961538 F 515632 ggatcacagtctacactgctcactccagaccccgcccctgagtccgaggagagggtgcttcagagtatgttaccactg
|
||||
f0v4s4 f0v7s7 0.961538 F 515632 ggatcacagtctacactgctcactccagaccccgcccctgagtccgaggagagggtgcttcagagtatgttaccactg
|
||||
f0v1s1 f0v7s7 0.961538 F 515632 ggatcacagtctacactgctcactccagaccccgcccctgagtccgaggagagggtgcttcagagtatgttaccactg
|
||||
f0v3s3 f0v7s7 0.961538 F 515632 ggatcacagtctacactgctcactccagaccccgcccctgagtccgaggagagggtgcttcagagtatgttaccactg
|
||||
f5v3s56 f5v3s56 1.000000 T 192648 ccgcaacgcaccataagatgtaatcactaagaaaaatcggcctaacctgtcatatcgccactt
|
||||
f10v2s79 f10v7s84 0.945205 F 905994 ttgccggtcactcgcaatcttaccaaccagaggtccagctaacacacagcaggcatttagtcccgatgggtagc
|
||||
f10v13s90 f10v7s84 0.958333 F 905994 tgccggacactcgcaatctccaagcagagagtccaagctaacacacagcaggcatttgtcccgatgggtagc
|
||||
f1v4s13 f1v4s13 1.000000 T 304149 gaatcagcttctcaaccaagcgatgcagaaccggctactttaagcattgatgaatgcgtcgtaagtgatactggacgattc
|
||||
f10v4s81 f10v7s84 0.958904 F 905994 ttgccggacactggcaatcttccatagcagaggtccagctaacacacagcaggcatttagtcccgatgggtagc
|
||||
f10v5s82 f10v7s84 0.958904 F 905994 ttgccggacactcgcaatcttccaagcagaggtccagctaacacatagcaggcatttagtcccgatgggtagc
|
||||
f4v8s52 f4v8s52 1.000000 T 368537 ctgatattcgtattgatctactacgtatcaaagtatcccacttttgtgaccccactaagagaaga
|
||||
f2v11s29 f2v8s26 0.970149 F 863655 tggactgtagaaccgtgtgcctcaatccacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f0v6s6 f0v7s7 0.961039 F 515632 ggatcacagtctacactgctccctccaaccccggcccctggtccgaggagagggtgcttcagagtattataccactg
|
||||
f1v3s12 f0v7s7 0.961039 F 515632 ggatcacagtctacactgctccctccaaccccggcccctggtccgaggagagggtgcttcagagtattataccactg
|
||||
f0v0s0 f0v7s7 0.974684 F 515632 ggatcacagtctacactgctcactccaaccccggcccctgagtccgaggagagggtgcttcagagtatgtataccactg
|
||||
f0v2s2 f0v7s7 0.974684 F 515632 ggatcacagtctacactgctcactccaaccccggcccctgagtccgaggagagggtgcttcagagtatgtataccactg
|
||||
f1v7s16 f1v4s13 0.973684 F 304149 gaatcagcttcaaccaagcgatgcagaaccgctgctttaagcatgatgaatcgtcgtaagtgatactcgacgattc
|
||||
f2v5s23 f1v4s13 0.973684 F 304149 gaatcagcttcaaccaagcgatgcagaaccgctgctttaagcatgatgaatcgtcgtaagtgatactcgacgattc
|
||||
f3v12s43 f3v3s34 0.973684 F 838714 cgaaaaaggtgaatgaaagactgggacgcctcctggtttgggacgctctaggtggttgtggcttgaacgttagcacct
|
||||
f8v0s68 f8v0s68 1.000000 T 507278 aagaccttgaacacctctaagcgaaaattggattcgagtcagggaacataaccacgggtgcgt
|
||||
f2v1s19 f1v4s13 0.925000 F 304149 gaatcaggttcttccaagcgctgcagaaccggctactttaagcattgatgaatgcgtcagtaagtgatacccgacgattc
|
||||
f1v8s17 f1v4s13 0.925000 F 304149 gaatcaggttcttccaagcgctgcagaaccggctactttaagcattgatgaatgcgtcagtaagtgatacccgacgattc
|
||||
f10v11s88 f10v7s84 0.958904 F 905994 ttgccggacactcgcaatcttccaagcagaggtccagctaactcacagccaggcatttagtcccgatgggtagc
|
||||
f3v5s36 f3v3s34 0.973684 F 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttatggcttgaaagttagcacct
|
||||
f8v7s75 f8v0s68 0.984127 F 507278 aagaccttgaacacctctaagcgaaaattggattccagtcagggaaccataaccacgggtgcgt
|
||||
f10v12s89 f10v7s84 0.958904 F 905994 ttgccggacactcgcaatcttccaagcagaggtccagctaacacacacgcaggcatttagacccgatgggtagc
|
||||
f4v2s46 f4v8s52 0.968254 F 368537 ctgtattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaagagaaga
|
||||
f8v2s70 f8v0s68 0.984127 F 507278 aagaccttgaacaacctctaagccgaaattggaattcgagtcagggaacataaccacgggtgcgat
|
||||
f11v8s99 f11v8s99 1.000000 T 421503 agcgttagcaaagagcctggttaatctgccctcgaggatcggtggtgatcagagatgcgggcatccgtttc
|
||||
f7v0s64 f7v0s64 1.000000 T 114016 gcttcgtgggaaccagagacaaccgacatatttcgaaccaccgacatacgatccttaaacc
|
||||
f11v1s92 f11v8s99 0.971429 F 421503 agcgttagcaaagagcctggttcatcgccctcgaggatcggtggtgatcaagagatgcggcatccgtttc
|
||||
f3v2s33 f3v3s34 0.973333 F 838714 cgaaaaaaggtaatgaaaggctgggatgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcact
|
||||
f8v3s71 f8v0s68 0.983607 F 507278 aagaccttgaacacctctaagcgaaattggattcgagtcagcgaacataacacgggtgcgt
|
||||
f4v3s47 f4v8s52 0.967742 F 368537 ctgtattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaaagaaga
|
||||
f10v10s87 f10v7s84 0.957746 F 905994 tctgccggacactcgcaatcttccaagcagaggtccagctaacacacgcaggcatttatccgatgggtagc
|
||||
f11v0s91 f11v8s99 1.000000 F 421503 agcgttagcaaagagcctggttaatcgccctcgaggatcggtggtgatcagagatgcgggcatccgtttc
|
||||
f8v5s73 f8v0s68 0.968254 F 507278 aagaccttgtacacctctaagcgataaattggattcgagtcagggaacataaccacggatgcgt
|
||||
f8v4s72 f8v0s68 1.000000 F 507278 aagacttgaacacctctaagcgaaaattggattcgagtcagggaacataaccacgggtgcgt
|
||||
f3v1s32 f3v3s34 1.000000 F 838714 cgaaaaagagtgaatgaaatggctgggacgctcctggtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f3v4s35 f3v3s34 0.973333 F 838714 cgaaaaaggtgaagaaaggctgggacgctcctggttggcgcgctctaggtgttgtggcttgaacgttagcaccta
|
||||
f11v6s97 f11v8s99 0.957746 F 421503 agcgttagcaaagaacctggttaatcgccctcgaggatcggtggtggatcggagatgcgggcatcgcgtttc
|
||||
f4v1s45 f4v8s52 0.938462 F 368537 ctgtatttcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactatagagaaga
|
||||
f0v5s5 f0v7s7 0.948718 F 515632 ggatcacagtctacactgctcactcccccccggcccctgagtccgaggagagggtgcttcaaagtatgtataccactg
|
||||
f5v5s58 f5v3s56 0.952381 F 192648 cgcaacgcaccattaagatggtaatcactaaaaaaatcggcctaacctgtccaatcgccactt
|
||||
f1v0s9 f1v4s13 0.987500 F 304149 gaatcagcttctaaccaagcgatgcagaaccggctactttaagcattgatgaatgcgtcgtaagtgatactcgacgattc
|
||||
f8v6s74 f8v0s68 1.000000 F 507278 aagacccttgaacacctctaagcgaaaattggattcgagtcagggaacataaccacgggtgccgt
|
||||
f6v0s60 f6v0s60 1.000000 T 100983 catgtcaagagactggaaccccggtgatgtgaaaaaaggtcttgggtacgtcccatggctacg
|
||||
f10v8s85 f10v7s84 0.945205 F 905994 ttgccggacactcgaatcttccaagcagaggtccagctaacacacagcaggcatactagtcccgatgggtagc
|
||||
f10v1s78 f10v7s84 0.958904 F 905994 ttgccggacactcgcaatcctccaagcagaggtccagctaacacacagcaggcatttagtcccgatgaggtagc
|
||||
f5v4s57 f5v3s56 0.968254 F 192648 cggcaacgcaccataagatggtaatcactaaaaaaatcggcctaacctgtccatatcgccactat
|
||||
f3v10s41 f3v3s34 0.973684 F 838714 cgaaaataaggtgaatgaaagggtgggacgctcctagtttggggcgctctaggtgttgtggcttgaacgttagcacct
|
||||
f3v7s38 f3v3s34 0.986842 F 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggtgttcgtgcttgaacgttagcacct
|
||||
f10v6s83 f10v7s84 0.958333 F 905994 ttccggacactcgcaatcttccaagcagaggtccagctaacacacagcaggcatttagtcctgatgggtagc
|
||||
f11v2s93 f11v8s99 0.985714 F 421503 agcgttagcaaagagcctggttaatcgccctcggaggatcggtggtgatcagagatgcgggcatccgttc
|
||||
f3v9s40 f3v3s34 0.986842 F 838714 cgaaaaaggtgaatgaaaggctgggacgctcctggtttggggcgctctaggggttgtggcttgaacgttagcacct
|
||||
f11v4s95 f11v8s99 0.985507 F 421503 agcgttagcaaagagcctggttaatcccctcgagatcgggtggtgatcagagatgcgggcatccgtttc
|
||||
f8v1s69 f8v0s68 1.000000 F 507278 aagaccttgaacacctctaagcgaaaattggatatcgagtcagggaacataaccacgggtgcgt
|
||||
f11v5s96 f11v8s99 0.957746 F 421503 agcgttagcaaagagcctggttaatggccctcgaggatcggtggctgaccagagatgcgggcatccgtttc
|
||||
f6v2s62 f6v0s60 0.983871 F 100983 catgtcgagagactggaaccccggtgatgtgaaaaaaggtcttgggtacgtcccatggctac
|
||||
f4v6s50 f4v8s52 0.938462 F 368537 ctgtattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaagacgaagag
|
||||
f9v0s76 f9v0s76 1.000000 T 29993 gggatcgtggcaagcaacccttgccgcctcgactgcggctaaagacgcatgttccagtaataccta
|
||||
f2v12s30 f2v8s26 0.984615 F 863655 tggactagtagaccgtgtgccacaatcgacgctgaggacacgttgatttttatacggcgtctcag
|
||||
f11v9s100 f11v8s99 0.985915 F 421503 agcgttagcaaaggagcctggttaatcgccctcgaggatcggtggtgatcagagatgcgggcatccgtttc
|
||||
f4v5s49 f4v8s52 0.953125 F 368537 ctatattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaagagaagca
|
||||
f2v9s27 f2v8s26 1.000000 F 863655 tggactagtagaccgtgtgcctaatcgacgcgtgaggacacgttgatttcttatacggcgtctcag
|
||||
f7v3s67 f7v0s64 1.000000 F 114016 gcttcgtgggaccagagacaaccgacatatttcgaaccaccgacatacgatccttaaacc
|
||||
f0v8s8 f0v7s7 0.974684 F 515632 ggatcacagtcctacactgctcactccaaccccggccctgagtccgaggagagggtgcttcagagtatgtataccactg
|
||||
f2v6s24 f2v8s26 0.984375 F 863655 tggactagtagacgtgtgcctcatcgacgcgtgagacactttgatttcttatacggcgtctcag
|
||||
f11v3s94 f11v8s99 0.971831 F 421503 agcgttagcaaagagcctggttaatcgccgtcgaaggatcggtggtgatcagagatgcgggcatccgtttc
|
||||
f6v3s63 f6v0s60 0.984127 F 100983 catgtcaagagactggaaccccggtgatgtgaaaaaaggttttgggtcacgtctccatggctacg
|
||||
f3v11s42 f3v3s34 0.973684 F 838714 cgaaaaaggtgaatgaaagtctgggacgctcctggtttgggacgctctaggtgttgtggcttgaacgttagcacct
|
||||
f4v4s48 f4v8s52 0.967742 F 368537 ctgtattcgtagtgatctactacgcatcaaagtatcccacttttgtaccccactaagagaaa
|
||||
f3v8s39 f3v3s34 0.986486 F 838714 cgaaaaaggtgaatgaaaggcctgggacgctcctggttggggcgctctaggtgtgtggcttgaacgttagacct
|
||||
f7v1s65 f7v0s64 0.983607 F 114016 gcttcggggaaccagagacaaccgacatatttcgaaccaccgacatacgatcctttaaacc
|
||||
f5v1s54 f5v3s56 0.952381 F 192648 cggaacgcaccataagatggtaatcactaaaaaaatcggcctaacctgtccatatcgccactt
|
||||
f4v7s51 f4v8s52 0.920635 F 368537 cgtttattcgtaggatctactacgcatcaaagtatcccacttttgtaccccactaagagcaga
|
||||
f7v2s66 f7v0s64 0.967213 F 114016 gcttcgtgggaaccagaacaaccgacatattccgaaccaccggacatacgatccttaaacc
|
||||
f1v6s15 f1v4s13 0.974684 F 304149 gaatcagcttctaaccaagcgttgcagaaccggctactttaagcatgatgaatgcgtcgtaagtgatactcgacgattc
|
||||
f5v2s55 f5v3s56 0.936508 F 192648 cggcatcgcaccataagatggtaatcactaaaaaaatcggcctaacctgtccatatcgccact
|
||||
Reference in new issue
Block a user