diff --git a/Makefile b/Makefile index 96a0768..cb00a3e 100644 --- a/Makefile +++ b/Makefile @@ -44,13 +44,18 @@ OBITOOLS_DIRS:=$(sort $(patsubst %/,%,$(dir $(OBITOOLS_SRC)))) OBITOOLS:=$(notdir $(OBITOOLS_DIRS)) +# Name of the target of a package: its path under pkg/, so that two packages of +# the same name in different directories (pkg/obialign and +# pkg/obitools/obialign) do not share a target. +pkgname=$(subst /,-,$(patsubst pkg/%,%,$(1))) + define MAKE_PKG_RULE -pkg-$(notdir $(1)): $(1) pkg/obioptions/version.go - @echo -n - Building package $(notdir $(1))... +pkg-$(call pkgname,$(1)): $(1) pkg/obioptions/version.go + @echo -n - Building package $(call pkgname,$(1))... @$(GOBUILD) ./$(1) \ - 2> pkg-$(notdir $(1)).log \ - || cat pkg-$(notdir $(1)).log - @rm -f pkg-$(notdir $(1)).log + 2> pkg-$(call pkgname,$(1)).log \ + || cat pkg-$(call pkgname,$(1)).log + @rm -f pkg-$(call pkgname,$(1)).log @echo Done. endef diff --git a/OBIPRIMERS_NOTES.md b/OBIPRIMERS_NOTES.md new file mode 100644 index 0000000..196f647 --- /dev/null +++ b/OBIPRIMERS_NOTES.md @@ -0,0 +1,183 @@ +# obiprimers — notes de travail + +Ré-implémentation d'ecoPrimers dans obitools4. Ce fichier garde l'état des recherches, +des mesures et de l'avancement. Dernière mise à jour : 2026-11-03. + +Sources de référence : +- Article : `~/Sync/travail/__MOI__/ecoprimers/Documents/Riaz et al. 2011 ... .pdf` (NAR 39:e145) +- Code C : `~/Sync/travail/__MOI__/ecoprimers/src/` (binaire : `/usr/local/bin/ecoprimers`) +- Tutoriel et données : `~/Documents/Enseignement/DNA metabarcoding spring school/ecoPrimers-Fish/` + (`fish-primers.qmd`, `vertebrata.*` au format ecoPCR, `mito.vert.fasta.gz`, + `ncbitaxo_20250211.tgz`, sorties de référence `Teleostei.ecoprimers`, `Cyprinidae.ecoprimers`) + +## 1. Algorithme d'ecoPrimers (lu dans le code) + +1. **Mots stricts** (`strictprimers.c`, `filtering.c`) : mots de longueur `lp` (18 par défaut, <= 31) + encodés 2 bits/base, forme canonique `min(D,R)`, dédupliqués par séquence, présents sans + erreur dans >= 70 % des séquences exemples (`-q`). Pré-filtre : table de comptage des 13-mers + (4^13 entrées) qui écarte la plupart des mots avant la fusion triée (smoothsort + merge). +2. **Recherche approchée** (`aproxpattern.c`, `apat_search.c`) : chaque mot strict est cherché sur + les 2 brins, <= `e` substitutions (Manber/agrep bit-parallèle), dans toutes les séquences + (exemples et contre-exemples). Une amorce est « good » si elle touche >= 90 % des exemples + (`-s`) et <= 10 % des contre-exemples (`-x`). Les amorces seulement « conservées » restent + utilisables : une paire n'a besoin que d'une amorce « good ». `omask` vaut 0 dans cette + recherche : l'option `-3` est vérifiée plus tard, au niveau de la paire. +3. **Appariement** (`pairs.c`) : par séquence, occurrences triées par position ; paires de + distance dans (`lmin`, `lmax`) avec au moins une amorce « good » ; clé de paire canonique, + stockage dans un arbre (`tsearch`) avec un amplicon par occurrence. +4. **Indices** (`taxstats.c`) : Bc = taxons exemples amplifiés / taxons exemples (au rang `-t`, + espèce par défaut) ; Bs = taxons dont l'amplicon n'est partagé avec aucun autre taxon / + taxons exemples ; yule = in/|E| - out/|C| ; tri sur yule x Bs ; seuil `-T` sur Bs (0,6). +5. **Tm** (`libthermo`) : plus proches voisins, sel SantaLucia ou Owczarzy ; Tm exact et pire cas. + +Faiblesses relevées (à ne pas reproduire) : +- Recherche approchée mot par mot sur toutes les séquences : c'est le goulot en temps. +- Un amplicon stocké par occurrence et par paire : c'est le goulot en mémoire. +- `taxonomycoverage` et `taxonomyspecificity` rebalayent toute la base à chaque paire. +- Mots <= 31 bases ; sortie en tableau figé de 21 colonnes. + +Non lus (à vérifier avant de les porter ou de les écarter) : `merge.c`, `smothsort.c`, +`ahocorasick.c`, `thermostats.c`, `nnparams.c`, `PrimerSets.c` (sets d'amorces, désactivé dans le +`main` : l'option `-p` est commentée). + +## 2. Briques obitools4 réutilisables + +| Besoin | Brique | +|---|---| +| Lecture, formats, batch, parallélisme | `obiformats`, `obiiter`, `obidefault` | +| Taxonomie, rangs, sous-clades | `obitax`, `obiseq/taxonomy_*`, options `--taxonomy`, `--restrict-to-taxon`, `--ignore-taxon` | +| K-mers canoniques (k <= 31) | `obikmer.EncodeCanonicalKmers`, `IterCanonicalKmers`, `ReverseComplement` | +| Comptage par partition, quorum, différence | `obikmer.KmerSetGroupBuilder`, `QuorumAtLeast/AtMost`, `Difference` | +| Contraintes sur amorces (GC, runs, IUPAC) | `obikmer.KmerConstraints` | +| Recherche approchée (indels, 2 brins) | `obiapat.ApatPattern` (cgo) | +| Distances entre mots | `obikmer.HammingDistance`, `KmerLCSBatch` (SIMD) | +| Alignement borné | `obialign.BandedLCS` | +| Patterns de CLI | `obipcr`, `obioligotag`, `obiclust` | + +**Aucun calcul de Tm n'existe** dans obitools4 (grep santalucia / nearest-neighbor / meltingtemp : +rien). D'où le nouveau paquet générique `pkg/obithermo`. + +SIMD : opt-in (`GOEXPERIMENT=simd`), repli scalaire portable. Même règle pour tout nouveau noyau. + +## 3. Mesures de référence d'ecoPrimers (cette machine) + +Commande : `ecoprimers -d vertebrata -e 3 -3 2 -l 30 -L 150 -c -r `, deux processus +lancés en parallèle, un cœur chacun. Sorties dans `/tmp/ecoprimers-bench/` (temporaire). + +| Jeu | Séquences | Paires totales | Paires retenues | Temps CPU | Mémoire max | +|---|---|---|---|---|---| +| Cyprinidae (`-r 7953`) | 325 | 42 682 | 3 448 | 134 s | 1,86 Go | +| Teleostei (`-r 32443`) | 3 909 | 9 407 | 407 | 350 s | 2,11 Go | + +Les sorties sont **identiques** (diff sur les lignes hors commentaires) à +`Cyprinidae.ecoprimers` et `Teleostei.ecoprimers` du tutoriel. Ce sont les cibles de non-régression du +mode A. + +Observation : Cyprinidae a 12 fois moins de séquences mais 4,5 fois plus de paires que +Teleostei, pour une mémoire comparable. Le goulot mémoire est donc le nombre de paires et le +stockage des amplicons, pas la taille de la base. + +## 4. Sémantique de `-r`, `-i`, `-E` (testée, cas Salmo, taxid 8028) + +`readdnadb.c` ne garde que les séquences qui sont exemples ou contre-exemples. + +| Options | Exemples | Contre-exemples | +|---|---|---| +| `-r 8028` | 7 (6 espèces) | 0 : tout le reste est **supprimé** | +| `-r 8028 -i 7742` | 7 | 7 815 (7 697 espèces) : tous les autres vertébrés | +| `-r 8028 -i 8015` | 7 | 76 (69 espèces) : les autres Salmonidae | +| `-r 8015 -E 8028` | 76 | 7 : sens inverse, Salmo devient contre-exemple | + +Avec `-r 8028 -i 8015` : 15 534 mots stricts (quorum 4/7 sur 7 séquences seulement), et un quorum +de contre-exemples de 7/76 (le défaut `-x 0,1` laisse passer 9 % du groupe proche, trop peu +exigeant pour une amorce spécifique). Les runs *Salmo* n'ont pas été menés jusqu'au bout (arrêtés +après l'en-tête). + +Pièges de la base : *Salmostoma bacalia* est un cyprinidé (nom en « Salmo », taxid différent) : filtrer +par taxid, jamais par nom. Le tutoriel annonce 7 823 génomes ; `mito.vert.fasta.gz` en contient 7 822. + +## 5. Plan d'implémentation + +Paquets prévus : +- `pkg/obithermo` : plus proches voisins, corrections de sel, Tm exact et pire cas. Générique. +- `pkg/obiprimer` : cœur (`words.go`, `match.go`, `pairs.go`, `score.go`, `types.go`). +- `pkg/obitools/obiprimers` : `options.go`, `obiprimers.go`, `output.go`. +- `cmd/obitools/obiprimers/main.go`. + +Deux modes : +- **A, conservé** (ecoPrimers) : k-mers présents dans >= q séquences exemples, via les partitions + disque d'obikmer (remplace tri en place, smoothsort, table 4^13) ; recherche approchée par + `obiapat` d'abord (version fidèle), optimisation par index seulement si elle est mesurée plus + rapide. +- **B, spécifique** (une espèce ou quelques espèces proches) : ancres = k-mers de T absents de C + (`Difference`) plus k-mers à distance de Hamming >= d de tout k-mer de C (mismatches en 3' + plus discriminants) ; paires entre ancres spécifiques, ou ancre spécifique + amorce conservée. + Le critère « good » est inversé. Définition précise de « spécifique » à valider avant le code. + Cas de test : *Salmo* (cible) contre le reste des Salmonidae. + +Sortie : **CSV** comme tous les obitools, ordre des colonnes d'ecoPrimers, en-têtes nommés. +Génomes circulaires (`-c`) gérés de bout en bout. Validation aval : `obipcr -e 5` sur chaque +paire, comme dans le tutoriel. + +Ordre : +1. `obithermo` (tests contre `CalculTM.xls` et colonnes Tm de `Teleostei.ecoprimers`) +2. Mode A, mots stricts sur `KmerSetGroup` (liste identique à ecoPrimers) +3. Recherche approchée (`obiapat`, puis index si mesuré utile) +4. Appariement + indices (index taxon -> séquences calculé une fois) +5. CLI et sortie CSV +6. Mode B (spécification validée d'abord) +7. Parallélisme (`Split()`, `obidefault.ParallelWorkers()`) +8. Hors v1 : sets d'amorces (`PrimerSets.c`), options `-b/-M/-k`. + +Règles du projet à respecter : fichiers < 500 lignes, pas de commit sans demande, pas de +matérialisation complète en mémoire quand le flux suffit, pas de réimplémentation de l'existant. + +## 6. Avancement + +- [x] Lecture de l'article et des sources C principales +- [x] Inventaire des briques obitools4 +- [x] Mesures de référence ecoPrimers (Cyprinidae, Teleostei) : identiques aux références +- [x] Sémantique `-r/-i/-E` testée sur *Salmo* +- [x] `obithermo` (`pkg/obithermo`) : terminé, tests verts, voir section 8 +- [ ] Mode A +- [ ] Mode B + +## 7. Questions ouvertes + +- Mode B : critère « spécifique » strict (T contre C) ou score continu (distance minimale en 3' à C) ? +- Mode B : valeur par défaut de `-x` (0,1 d'ecoPrimers trop permissive pour une cible étroite) ? +- Recherche approchée : l'index par voisinage bat-il agrep ? À mesurer, pas à supposer. + +## 8. `pkg/obithermo` (étape 1, terminée) + +Fichiers : `model.go` (modèle, ~230 lignes), `nn_table.go` (112 paramètres, **généré** depuis +`nnparams.c` par un script jetable hors dépôt : `/tmp/obithermo-gen/gen.py`), `model_test.go`, +`testdata/c_reference.tsv` (400 cas calculés par la vraie libthermo C compilée), +`testdata/ecoprimers_tm.tsv` (13 amorces et Tm imprimés par ecoPrimers sur Teleostei). + +API : `NewModel(primerConc, targetConc, salt, method)`, `DefaultModel()`, `(*Model).SelfTm(primer)`, +`(*Model).Tm(primer, site)` (site = segment de la cible lu dans l'orientation de l'amorce), +`GCCount(seq)`. Retour en degrés Celsius, `NaN` si le modèle ne prédit aucun duplex stable. +Modèle immuable, sans allocation (17,7 ns par appel `Tm`, M3 Max), sûr en concurrence. + +Validation : +- 400 cas aléatoires (amorces de 12 à 25 b, 0 à n mismatches, deux jeux de conditions) : + écart maximal avec le C ~5e-6 K. Cause vérifiée : le C écrit ses constantes en `float` + (`-21.3f`, `1.987f`, `-5.9f`). En émulant ces arrondis en float32, l'écart tombe à 7e-13 K. + Le port est donc fidèle ; il utilise des constantes décimales exactes. Tolérance de test : 1e-4 K. +- Les 13 Tm imprimés par ecoPrimers sont retrouvés à +/- 0,05 °C près. + +Écarts volontaires avec ecoPrimers (à confirmer) : +1. **273,15 au lieu de 273,0** : ecoPrimers calcule `Tm(K) - 273.0`. Les Tm de `obithermo` sont donc + 0,15 °C plus bas que ceux d'ecoPrimers (le test tient compte du décalage). Une constante, + facile à inverser si la compatibilité exacte des colonnes Tm prime. +2. **Owczarzy corrigé** : dans ecoPrimers, `gcContent` n'est jamais affecté (grep sur tout `src/`), + donc `-m 2` lit de la mémoire non initialisée (`CNNParams` est sur la pile dans `main`). + `obithermo` utilise la fraction GC de l'amorce. Non comparable au C ; testé par invariants + (les deux corrections s'annulent à 1 M, le sel augmente la Tm). +3. **Pas de gaps, bulges ni extrémités pendantes** : jamais atteints par `SelfTM`/`TwoTM` (les + séquences sont nettoyées en ACGT). Bases non ACGT : erreur, alors que le C lit hors tableau. +4. Tm minimale d'un modèle en échec : `NaN`, là où le C renvoie 0 K (soit -273 °C affiché). + +Pour plus tard : les k-mers d'obikmer sont codés A,C,G,T = 0..3, comme les tables de `obithermo` ; +une variante `TmCode(uint64, k)` évitera le décodage quand le cœur appellera Tm par paire. diff --git a/cmd/obitools/obialign/main.go b/cmd/obitools/obialign/main.go new file mode 100644 index 0000000..77d18bb --- /dev/null +++ b/cmd/obitools/obialign/main.go @@ -0,0 +1,26 @@ +package main + +import ( + "os" + + "git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obioptions" + "git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obitools/obialign" + "git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obitools/obiconvert" + "git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obiutils" +) + +func main() { + optionParser := obioptions.GenerateOptionParser( + "obialign", + "pairwise similarity of nucleotide sequences, as a CSV table (the principle of sumatra)", + obialign.OptionSet) + + _, args := optionParser(os.Args) + + fs, err := obiconvert.CLIReadBioSequences(args...) + obiconvert.OpenSequenceDataErrorMessage(args, err) + + obialign.CLIWriteTable(obialign.CLIOBIAlign(fs)) + + obiutils.WaitForLastPipe() +} diff --git a/obitests/obitools/obialign/test.sh b/obitests/obitools/obialign/test.sh new file mode 100755 index 0000000..aa2b556 --- /dev/null +++ b/obitests/obitools/obialign/test.sh @@ -0,0 +1,206 @@ +#!/bin/bash + +# +# Here give the name of the test serie +# + +TEST_NAME=obialign +CMD=obialign + +###### +# +# 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 of similar sequences, a +# sequence identical to another one, and a sequence with an ambiguous +# nucleotide that is discarded. +# +cat > "${TMPDIR}/data.fasta" <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 + +cat > "${TMPDIR}/ref.fasta" <r1 +acgtacgtacgtaacctagcctagcctagggatcgatcgatcgatcgaatcg +>r2 +ttgcatgcatgctagctagctagcatgcatcgatcgatgctagctagtagct +>r3 +ggggccccggggccccggggccccggggccccggggccccggggcccc +DATA + +((ntest++)) +if $CMD --max-cpu 2 "${TMPDIR}/data.fasta" > "${TMPDIR}/all.csv" 2> /dev/null && + [ "$(head -n 1 "${TMPDIR}/all.csv")" = "id1,id2,score" ] && + [ "$(tail -n +2 "${TMPDIR}/all.csv" | wc -l | tr -d ' ')" = "10" ] +then + log "$MCMD: without threshold all the pairs of the 5 usable sequences are written OK" + ((success++)) +else + log "$MCMD: the table without threshold is wrong" + ((failed++)) +fi + +((ntest++)) +if $CMD --max-cpu 2 -t 0.95 "${TMPDIR}/data.fasta" > "${TMPDIR}/t95.csv" 2> /dev/null && + [ "$(tail -n +2 "${TMPDIR}/t95.csv" | cut -d, -f1,2 | tr '\n' ' ')" = "a1,a2 a1,a3 a2,a3 b1,b2 " ] && + grep -q '^a1,a3,1$' "${TMPDIR}/t95.csv" +then + log "$MCMD: only the pairs reaching the threshold are written, in order OK" + ((success++)) +else + log "$MCMD: the table with a threshold is wrong" + ((failed++)) +fi + +((ntest++)) +if $CMD --max-cpu 2 -t 0.95 -x "${TMPDIR}/data.fasta" 2> /dev/null | head -n 2 | tail -n 1 | grep -q '^a1,a2,[0-9.]*,20,3,52,52$' +then + log "$MCMD: extra columns OK" + ((success++)) +else + log "$MCMD: extra columns failed" + ((failed++)) +fi + +((ntest++)) +if $CMD --max-cpu 2 -g -t 0.9 "${TMPDIR}/data.fasta" 2> /dev/null | grep -q '^b1,x1,' +then + log "$MCMD: a sequence with an IUPAC letter is kept with --accept-ambiguous OK" + ((success++)) +else + log "$MCMD: --accept-ambiguous failed" + ((failed++)) +fi + +((ntest++)) +if $CMD --max-cpu 2 -R "${TMPDIR}/ref.fasta" -t 0.95 "${TMPDIR}/data.fasta" 2> /dev/null | tail -n +2 | cut -d, -f1,2 | tr '\n' ' ' > "${TMPDIR}/two.txt" && + [ "$(cat "${TMPDIR}/two.txt")" = "a1,r1 a2,r1 a3,r1 b1,r2 b2,r2 " ] +then + log "$MCMD: comparison with a reference file OK" + ((success++)) +else + log "$MCMD: comparison with a reference file failed" + ((failed++)) +fi + +((ntest++)) +if $CMD --max-cpu 1 "${TMPDIR}/data.fasta" 2> /dev/null > "${TMPDIR}/cpu1.csv" && + $CMD --max-cpu 8 "${TMPDIR}/data.fasta" 2> /dev/null > "${TMPDIR}/cpu8.csv" && + cmp -s "${TMPDIR}/cpu1.csv" "${TMPDIR}/cpu8.csv" +then + log "$MCMD: the table does not depend on the number of threads OK" + ((success++)) +else + log "$MCMD: the table depends on the number of threads" + ((failed++)) +fi + + +######################################### +# +# At the end of the tests +# the cleanup function is called +# +######################################### + +cleanup diff --git a/pkg/obialign/lcsmin.go b/pkg/obialign/lcsmin.go index 93f00f9..409e8df 100644 --- a/pkg/obialign/lcsmin.go +++ b/pkg/obialign/lcsmin.go @@ -62,8 +62,9 @@ func bandedLCSAtLeast(a, b []byte, minLCS int, ws *bandedLCSWorkspace, useSIMD b } // 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 { + // alignment: the latter is only computed when the pair reaches minLCS. With + // no minimum there is nothing to reject, and the pass would be wasted. + if minLCS > 0 && lcsScoreSIMD(a, b, kmin, kmax, minLCS, ws) < minLCS { return -1, -1 } encodeBases(ws, a, b) diff --git a/pkg/obiformats/batch_of_files_reader.go b/pkg/obiformats/batch_of_files_reader.go index ff464fb..4278a8f 100644 --- a/pkg/obiformats/batch_of_files_reader.go +++ b/pkg/obiformats/batch_of_files_reader.go @@ -48,6 +48,14 @@ func ReadSequencesBatchFromFiles(filenames []string, log.Printf("Start reading of file : %s", filename) + // The batches of a file reach us in any order (parallel parsing + // of the headers). They are numbered here in arrival order, so + // the order of the file must be restored first, unless the + // order of the data is not wanted (several concurrent readers). + if concurrent_readers == 1 { + iter = iter.SortBatches() + } + for iter.Next() { batch := iter.Get() batchiter.Push(batch.Reorder(nextCounter())) diff --git a/pkg/obiformats/batch_of_files_reader_test.go b/pkg/obiformats/batch_of_files_reader_test.go new file mode 100644 index 0000000..0ddfd5b --- /dev/null +++ b/pkg/obiformats/batch_of_files_reader_test.go @@ -0,0 +1,38 @@ +package obiformats + +import ( + "fmt" + "os" + "path/filepath" + "strings" + "testing" +) + +// With a single reader, the sequences of several files must come out in the +// order of the files, whatever the order in which the batches are parsed. +func TestReadSequencesBatchFromFilesKeepsOrder(t *testing.T) { + dir := t.TempDir() + var names []string + for _, prefix := range []string{"a", "b"} { + var sb strings.Builder + for i := 0; i < 25000; i++ { + fmt.Fprintf(&sb, ">%s%07d {\"k\":%d}\n%s\n", prefix, i, i, strings.Repeat("acgt", 40)) + } + name := filepath.Join(dir, prefix+".fasta") + if err := os.WriteFile(name, []byte(sb.String()), 0o600); err != nil { + t.Fatal(err) + } + names = append(names, name) + } + + it := ReadSequencesBatchFromFiles(names, nil, 1) + _, db := it.Load() + if len(db) != 50000 { + t.Fatalf("expected 50000 sequences, got %d", len(db)) + } + for i := 1; i < len(db); i++ { + if db[i-1].Id() >= db[i].Id() { + t.Fatalf("out of order at %d: %s then %s", i, db[i-1].Id(), db[i].Id()) + } + } +} diff --git a/pkg/obitools/obiclust/block.go b/pkg/obisimilarity/block.go similarity index 66% rename from pkg/obitools/obiclust/block.go rename to pkg/obisimilarity/block.go index 487b5a5..ca86ea3 100644 --- a/pkg/obitools/obiclust/block.go +++ b/pkg/obisimilarity/block.go @@ -1,10 +1,10 @@ -package obiclust +package obisimilarity -// A block stores the 4-mer tables of a few centers, transposed: the counter +// A block stores the 4-mer tables of a few sequences, 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 +// handles the same word for all the sequences 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. +// to be visited to compare it with all the sequences of the block. type tableBlock struct { data []uint8 } @@ -14,9 +14,9 @@ func newTableBlock(width int) tableBlock { } // 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] +func (b *tableBlock) set(width, lane int, t *Table4) { + for w := range t.Count { + b.data[w*width+lane] = t.Count[w] } } @@ -26,14 +26,14 @@ 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 +// 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 { +func SparseWords(t *Table4) []uint16 { words := make([]uint16, 0, 128) mass := 0 - for w, c := range t.count { + for w, c := range t.Count { if c > 0 { words = append(words, uint16(w)<<8|uint16(c)) mass += int(c) diff --git a/pkg/obitools/obiclust/block_nosimd.go b/pkg/obisimilarity/block_nosimd.go similarity index 69% rename from pkg/obitools/obiclust/block_nosimd.go rename to pkg/obisimilarity/block_nosimd.go index 7353d29..fe49231 100644 --- a/pkg/obitools/obiclust/block_nosimd.go +++ b/pkg/obisimilarity/block_nosimd.go @@ -1,10 +1,10 @@ //go:build !goexperiment.simd -package obiclust +package obisimilarity // 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") + panic("obisimilarity: blocks of tables require GOEXPERIMENT=simd") } diff --git a/pkg/obitools/obiclust/block_simd.go b/pkg/obisimilarity/block_simd.go similarity index 80% rename from pkg/obitools/obiclust/block_simd.go rename to pkg/obisimilarity/block_simd.go index b462de0..7247cce 100644 --- a/pkg/obitools/obiclust/block_simd.go +++ b/pkg/obisimilarity/block_simd.go @@ -1,10 +1,10 @@ //go:build goexperiment.simd -package obiclust +package obisimilarity import "simd" -// simdBlockWidth is the number of centers in a block: one per lane of a +// simdBlockWidth is the number of sequences in a block: one per lane of a // vector of bytes. func simdBlockWidth() int { var probe simd.Uint8s @@ -14,7 +14,7 @@ func simdBlockWidth() int { // 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. +// 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 { diff --git a/pkg/obisimilarity/entry.go b/pkg/obisimilarity/entry.go new file mode 100644 index 0000000..d032640 --- /dev/null +++ b/pkg/obisimilarity/entry.go @@ -0,0 +1,95 @@ +package obisimilarity + +import ( + "sync" + "sync/atomic" +) + +// Entry is a distinct sequence of a dataset, with what the comparisons need. +type Entry struct { + Seq []byte + Length int + Count int // count of the sequence (cumulated for 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 the filter does not apply to them. + Ambiguous bool +} + +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 tells if a sequence (in lower case) can be compared. It returns +// ok=false for an empty sequence and for a sequence with anything else than +// IUPAC letters; IUPAC letters other than a, c, g and t are only accepted if +// acceptAmbiguous is set, and then ambiguous is true. +func Classify(s []byte, acceptAmbiguous bool) (ok, ambiguous bool) { + if len(s) == 0 { + return false, false + } + for _, c := range s { + switch nucleotideClass[c] { + case notNucleotide: + return false, false + case ambiguousNucleotide: + if !acceptAmbiguous { + return false, false + } + ambiguous = true + } + } + return true, ambiguous +} + +// BuildEntries describes n sequences, their 4-mer tables being computed in +// parallel. get returns the sequence i, its count, and whether it is +// ambiguous. The tables are stored contiguously. +func BuildEntries(n int, get func(i int) (seq []byte, count int, ambiguous bool), workers int) []Entry { + entries := make([]Entry, n) + tables := make([]Table4, n) + + 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 { + i := int(next.Add(1)) - 1 + if i >= n { + return + } + seq, count, ambiguous := get(i) + var sparse []uint16 + if !ambiguous { + tables[i].Fill(seq) + sparse = SparseWords(&tables[i]) + } + entries[i] = Entry{ + Seq: seq, + Length: len(seq), + Count: count, + Table: &tables[i], + Sparse: sparse, + Ambiguous: ambiguous, + } + } + }() + } + wg.Wait() + return entries +} diff --git a/pkg/obisimilarity/index.go b/pkg/obisimilarity/index.go new file mode 100644 index 0000000..25f41b1 --- /dev/null +++ b/pkg/obisimilarity/index.go @@ -0,0 +1,106 @@ +package obisimilarity + +import "sort" + +// Member is a copy of the entry of a sequence in an Index, with its own table. +type Member struct { + Entry + ID int // identifier given by the caller + Rank int // rank in the order of insertion +} + +const tabChunk = 1024 + +// A Bucket holds the members of one length, in the order of insertion, and +// their tables by blocks (see tableBlock). +type Bucket struct { + Members []Member + blocks []tableBlock + width int +} + +// Commons caches the result of the filter on one block of a bucket. +type Commons struct { + v [64]uint8 + blk int +} + +// Reset must be called when changing of bucket. +func (c *Commons) Reset() { c.blk = -1 } + +// Common returns the sum of the minima of the 4-mer counters of the sequence +// whose Sparse words are given and of the member k of the bucket (without the +// overflow term), or -1 if it is not available, in which case PairScore +// computes it. +func (b *Bucket) Common(k int, sparse []uint16, c *Commons) int { + if b.width == 0 || sparse == nil { + return -1 + } + if blk := k / b.width; blk != c.blk { + b.blocks[blk].common(b.width, sparse, c.v[:]) + c.blk = blk + } + return int(c.v[k%b.width]) +} + +// Index stores sequences by length. A sequence can only be similar to the ones +// whose length is compatible with its own (see Scoring.LengthCompatible), so +// it only visits the buckets of these lengths, instead of all the sequences, +// and the filter works on blocks of sequences at once. +// +// An Index can grow, but not while it is read. +type Index struct { + width int // sequences 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 members + n int +} + +// NewIndex returns an empty index. +func NewIndex() *Index { + return &Index{width: simdBlockWidth(), byLen: make(map[int]*Bucket)} +} + +// Len is the number of sequences in the index. +func (x *Index) Len() int { return x.n } + +// Lengths returns the lengths that have a bucket, in increasing order. +func (x *Index) Lengths() []int { return x.lens } + +// Bucket returns the bucket of the sequences of the given length. +func (x *Index) Bucket(length int) *Bucket { return x.byLen[length] } + +// Add stores a copy of the entry e as the next member of the index, with the +// identifier id, and returns it. +func (x *Index) Add(e Entry, id int) Member { + if x.n%tabChunk == 0 { + x.tabs = append(x.tabs, make([]Table4, tabChunk)) + } + tab := &x.tabs[len(x.tabs)-1][x.n%tabChunk] + if e.Table != nil { + *tab = *e.Table + } + e.Table = tab + + b := x.byLen[e.Length] + if b == nil { + b = &Bucket{width: x.width} + x.byLen[e.Length] = b + x.lens = append(x.lens, e.Length) + sort.Ints(x.lens) + } + if w := x.width; w > 0 && !e.Ambiguous { + if len(b.Members)%w == 0 { + b.blocks = append(b.blocks, newTableBlock(w)) + } + b.blocks[len(b.blocks)-1].set(w, len(b.Members)%w, tab) + } else if w > 0 && len(b.Members)%w == 0 { + b.blocks = append(b.blocks, newTableBlock(w)) + } + + m := Member{Entry: e, ID: id, Rank: x.n} + b.Members = append(b.Members, m) + x.n++ + return m +} diff --git a/pkg/obisimilarity/obisimilarity_test.go b/pkg/obisimilarity/obisimilarity_test.go new file mode 100644 index 0000000..dcfc1a2 --- /dev/null +++ b/pkg/obisimilarity/obisimilarity_test.go @@ -0,0 +1,233 @@ +package obisimilarity + +import ( + "math/rand" + "testing" + + "git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obialign" +) + +func randomSeq(rng *rand.Rand, n int, alpha string) []byte { + s := make([]byte, n) + for i := range s { + s[i] = alpha[rng.Intn(len(alpha))] + } + return s +} + +// 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)) + for it := 0; it < 3000; it++ { + alpha := []string{"acgt", "ac", "a"}[it%3] + t1 := NewTable4(randomSeq(rng, rng.Intn(1200), alpha)) + t2 := NewTable4(randomSeq(rng, rng.Intn(1200), alpha)) + if got, want := commonWords(t1, t2), commonWordsRef(t1, t2); got != want { + t.Fatalf("commonWords = %d, want %d", got, want) + } + } +} + +// TestNewTable4 checks the table against the 4-mers counted the long way, +// including the saturation of the counters. +func TestNewTable4(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] + s := randomSeq(rng, rng.Intn(900), alpha) + var counts [256]int + for i := 0; i+4 <= len(s); i++ { + w := 0 + for _, c := range s[i : i+4] { + w = w<<2 | code[c] + } + counts[w]++ + } + tab := NewTable4(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) + } + } +} + +// 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)) + 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] = NewTable4(randomSeq(rng, rng.Intn(600), alpha)) + block.set(width, j, tabs[j]) + } + q := NewTable4(randomSeq(rng, 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) + } + } + } +} + +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 { + kept, amb := Classify([]byte(c.in), c.accept) + if kept != c.kept || amb != c.ambiguous { + t.Errorf("Classify(%q, %v) = (%v, %v), want kept=%v ambiguous=%v", c.in, c.accept, kept, amb, c.kept, c.ambiguous) + } + } +} + +func randomEntries(rng *rand.Rand, n int) []Entry { + return BuildEntries(n, func(int) ([]byte, int, bool) { + return randomSeq(rng, 8+rng.Intn(80), "acgt"), 1 + rng.Intn(20), false + }, 2) +} + +// 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)) + // sequences made of the same few roots, so that many pairs are similar + roots := [][]byte{randomSeq(rng, 70, "acgt"), randomSeq(rng, 55, "acgt")} + entries := BuildEntries(120, func(i int) ([]byte, int, bool) { + var s []byte + for _, c := range roots[i%2] { + switch r := rng.Intn(30); { + case r == 0: + s = append(s, "acgt"[rng.Intn(4)]) + case r == 1: + default: + s = append(s, c) + } + } + if i < 20 { // very short sequences skip the filter + s = s[:8+rng.Intn(10)] + } + return s, 1 + rng.Intn(20), false + }, 2) + + var buf obialign.BandedLCSBuffer + for _, ref := range []Reference{RefAlignment, RefLongest, RefShortest} { + for _, p := range []Params{ + {Threshold: 0.9, Normalized: true}, + {Threshold: 0.8, Normalized: true, Distance: true}, + {Threshold: 30}, + {Threshold: 6, Distance: true}, + {Normalized: true}, // no threshold + } { + p.Reference, p.Ratio = ref, 3 + table, err := NewScoring(p, entries) + if err != nil { + t.Fatal(err) + } + direct := *table + direct.byLength = nil // forces the direct computation + if (ref == RefShortest) != (table.byLength == nil) { + t.Fatalf("ref %v: table presence is wrong", ref) + } + for i := range entries { + for j := range entries { + a, aok := direct.PairScore(&entries[i], &entries[j], -1, &buf) + b, bok := table.PairScore(&entries[i], &entries[j], -1, &buf) + if a != b || aok != bok { + t.Fatalf("ref %v params %+v pair %d,%d: (%v,%v) with the table, (%v,%v) directly", ref, p, i, j, b, bok, a, aok) + } + } + } + } + } +} + +// TestIndexCommon checks that the filter computed by blocks gives the same +// scores as the direct computation, for every pair, whatever the order the +// members are read in. +func TestIndexCommon(t *testing.T) { + rng := rand.New(rand.NewSource(7)) + entries := randomEntries(rng, 150) + sc, err := NewScoring(Params{Threshold: 0.6, Normalized: true, Reference: RefAlignment, Ratio: 100}, entries) + if err != nil { + t.Fatal(err) + } + index := NewIndex() + for i := range entries { + index.Add(entries[i], i) + } + if index.Len() != len(entries) { + t.Fatalf("Len = %d", index.Len()) + } + + var buf obialign.BandedLCSBuffer + var commons Commons + for i := range entries { + q := &entries[i] + for _, length := range index.Lengths() { + b := index.Bucket(length) + commons.Reset() + for k := len(b.Members) - 1; k >= 0; k-- { // backwards: blocks are not read in order + m := &b.Members[k] + got, gok := sc.PairScore(q, &m.Entry, b.Common(k, q.Sparse, &commons), &buf) + want, wok := sc.PairScore(q, &entries[m.ID], -1, &buf) + if got != want || gok != wok { + t.Fatalf("pair %d,%d: (%v,%v) with the blocks, (%v,%v) directly", i, m.ID, got, gok, want, wok) + } + } + } + } +} + +func TestNewScoringChecks(t *testing.T) { + for _, p := range []Params{{Threshold: -1}, {Threshold: 1.5, Normalized: true}} { + if _, err := NewScoring(p, nil); err == nil { + t.Errorf("%+v must be rejected", p) + } + } + if _, err := NewScoring(Params{Threshold: 12}, nil); err != nil { + t.Errorf("a raw threshold above 1 is valid: %v", err) + } +} diff --git a/pkg/obisimilarity/scoring.go b/pkg/obisimilarity/scoring.go new file mode 100644 index 0000000..4aefbe8 --- /dev/null +++ b/pkg/obisimilarity/scoring.go @@ -0,0 +1,284 @@ +package obisimilarity + +import ( + "errors" + "math" + + "git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obialign" + log "github.com/sirupsen/logrus" +) + +// 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 ( + RefAlignment Reference = iota + RefLongest + RefShortest +) + +// Params describe how a pair of sequences is scored and compared to a threshold. +type Params struct { + // Threshold: with a normalized similarity an identity (0.95 for 95%), with + // a normalized distance 1 - identity, with a raw similarity the length of + // the LCS, with a raw distance the number of differences with the + // reference length. 0 means no threshold: all the pairs are reported. + Threshold float64 + Normalized bool // the score is divided by the reference length + Distance bool // the score is a distance, not a similarity + Reference Reference + // Ratio is the maximum ratio between the counts of a sequence and of the + // one it is compared to (clustering only): a larger ratio gives no match. + Ratio float64 +} + +// Scoring scores the pairs of sequences and decides whether they pass the +// threshold. It must not be modified once built. +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 does not pass + all bool // no threshold: every pair is reported + + // 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 +} + +// NewScoring builds the scoring of the sequences `entries`, which are the +// ones to be compared (the longest of them is needed for a raw distance). +func NewScoring(p Params, entries []Entry) (*Scoring, error) { + if p.Threshold < 0 || (p.Normalized && p.Threshold > 1.0) { + return nil, errors.New("the threshold must not be negative, and must be at most 1 when scores are normalized") + } + + sc := &Scoring{ + normalize: p.Normalized, + lcsmode: !p.Distance, + ref: p.Reference, + ratio: p.Ratio, + } + sc.threshold = p.Threshold + sc.all = p.Threshold == 0 + if !sc.lcsmode && sc.normalize && p.Threshold > 0 { + sc.threshold = 1.0 - p.Threshold + } + + lmax := 0 + for i := range entries { + lmax = max(lmax, entries[i].Length) + } + if !sc.similarityLike() { + sc.worst = float64(lmax) + } + + if sc.ref != RefShortest { + 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))} + } + } + return sc, nil +} + +// Worst is the score of a pair that does not pass the threshold. +func (sc *Scoring) Worst() float64 { return sc.worst } + +// Threshold is the threshold the scores are compared to. +func (sc *Scoring) Threshold() float64 { return sc.threshold } + +// SimilarityLike tells if the comparison with the threshold is "score >= threshold". +func (sc *Scoring) SimilarityLike() bool { return sc.similarityLike() } + +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. +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. +func (sc *Scoring) minCommon(l1, l2 int) int { + if sc.all { + return 0 // no threshold, no filter + } + 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) +} + +// 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) +} + +// PairScore scores the pair (q, c). ok is false when the pair is known not to +// reach the threshold, in which case no score is given. +// +// 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 (see Index). +func (sc *Scoring) PairScore(q, c *Entry, common int, buf *obialign.BandedLCSBuffer) (score float64, ok bool) { + // 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 0, false + } + + 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 0, false + } + // 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 0, false + } + } + + // 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 0, false + } + + 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, true +} + +// Passes tells if the score s of a pair reaches the threshold. +func (sc *Scoring) Passes(s float64) bool { + if sc.all { + return true + } + if sc.similarityLike() { + return s >= sc.threshold + } + return s <= sc.threshold +} + +// 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 +} + +// SelfScore is the score of a sequence with itself. +func (sc *Scoring) SelfScore(length int) float64 { + switch { + case sc.normalize && sc.lcsmode: + return 1.0 + case !sc.lcsmode: + return 0.0 + default: + return float64(length) + } +} + +// Reported is the score to report for a pair whose score is s: a normalized +// distance is computed as a similarity against the converted threshold. +func (sc *Scoring) Reported(s float64) float64 { + if !sc.lcsmode && sc.normalize { + return 1.0 - s + } + return s +} diff --git a/pkg/obisimilarity/table4.go b/pkg/obisimilarity/table4.go new file mode 100644 index 0000000..6b8dcfc --- /dev/null +++ b/pkg/obisimilarity/table4.go @@ -0,0 +1,54 @@ +// Package obisimilarity holds what the tools that compare nucleotide sequences +// by the length of their longest common subsequence (obiclust, obialign) have +// in common: the scoring of a pair against a threshold, with the lossless +// 4-mer filter that avoids most of the alignments, and the index that finds +// the sequences a given one can be similar to. +// +// The scoring follows the arithmetic of sumaclust and sumatra (integer +// truncations, floating point comparisons) so that the same pairs are +// accepted with the same scores. +package obisimilarity + +// Table4 is the 4-mer occurrence table of a sequence: 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 +} + +// NewTable4 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. +func NewTable4(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. +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) +} diff --git a/pkg/obisimilarity/table4_nosimd.go b/pkg/obisimilarity/table4_nosimd.go new file mode 100644 index 0000000..7596e0d --- /dev/null +++ b/pkg/obisimilarity/table4_nosimd.go @@ -0,0 +1,14 @@ +//go:build !goexperiment.simd + +package obisimilarity + +// commonWords is the upper bound used 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) +} diff --git a/pkg/obitools/obiclust/kmer4_simd.go b/pkg/obisimilarity/table4_simd.go similarity index 65% rename from pkg/obitools/obiclust/kmer4_simd.go rename to pkg/obisimilarity/table4_simd.go index 96da178..b912804 100644 --- a/pkg/obitools/obiclust/kmer4_simd.go +++ b/pkg/obisimilarity/table4_simd.go @@ -1,24 +1,24 @@ //go:build goexperiment.simd -package obiclust +package obisimilarity 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. +// commonWords is the upper bound used 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 { +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() + 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)) } @@ -31,5 +31,5 @@ func commonWords(t1, t2 *table4) int { for _, v := range lanes[:sums.Len()] { total += int(v) } - return total + min(t1.overflow, t2.overflow) + return total + min(t1.Overflow, t2.Overflow) } diff --git a/pkg/obithermo/model.go b/pkg/obithermo/model.go new file mode 100644 index 0000000..22c8299 --- /dev/null +++ b/pkg/obithermo/model.go @@ -0,0 +1,222 @@ +// Package obithermo computes DNA duplex melting temperatures with the +// nearest-neighbor model used by ecoPrimers (SantaLucia 1998 parameters, with +// the SantaLucia or Owczarzy 2008 salt corrections). +// +// Only the situations ecoPrimers actually evaluates are supported: a primer +// against its perfect complement (SelfTm), and a primer against a genomic site +// of the same length that may carry mismatches (Tm). Gaps, bulges and dangling +// ends are not modeled. +package obithermo + +import ( + "fmt" + "math" +) + +// SaltMethod selects the monovalent salt correction. +type SaltMethod int + +const ( + // SantaLucia applies a per-step entropy correction 0.368*ln[Na+]. + SantaLucia SaltMethod = 1 + // Owczarzy applies the GC-dependent correction of Owczarzy et al. 2008. + Owczarzy SaltMethod = 2 +) + +// Default experimental conditions, those of ecoPrimers. +const ( + DefaultPrimerConc = 8e-7 // total primer strand concentration (M) + DefaultTargetConc = 0.0 // target strand concentration (M) + DefaultSalt = 0.05 // monovalent cation concentration (M) +) + +const ( + gasConstant = 1.987 // cal/mol/K + initEntropy = -5.9 // duplex initiation, cal/mol/K + kelvinOffset = 273.15 // ecoPrimers subtracts 273.0 (see package notes) + owczarzyGCSlope = 4.29e-5 // (4.29*fGC - 3.95)e-5 * ln[Na] + owczarzyOffset = 3.95e-5 + owczarzyQuadratic = 9.40e-6 // 9.4e-6 * ln[Na]^2 +) + +// Model holds the thermodynamic tables and the experimental conditions. +// A Model is immutable after NewModel and safe for concurrent use. +type Model struct { + method SaltMethod + rlogc float64 // R*ln(Ct factor), included in the initial entropy + logNa float64 // ln[Na+] + + // Indexed by (top0<<6 | top1<<4 | bot0<<2 | bot1) with A,C,G,T = 0..3. + // dS already includes the SantaLucia salt term when that method is selected. + dH [256]float64 + dS [256]float64 +} + +// NewModel builds a Model for the given strand concentrations (M), monovalent +// salt concentration (M) and salt correction method. +func NewModel(primerConc, targetConc, salt float64, method SaltMethod) (*Model, error) { + if method != SantaLucia && method != Owczarzy { + return nil, fmt.Errorf("obithermo: unknown salt method %d", method) + } + if salt <= 0 { + return nil, fmt.Errorf("obithermo: salt concentration must be positive, got %g", salt) + } + + // Effective strand concentration, as in nparam_InitParams. + var ctFactor float64 + switch { + case primerConc == targetConc: + ctFactor = primerConc / 2 + case primerConc > targetConc: + ctFactor = primerConc - targetConc/2 + default: + ctFactor = targetConc - primerConc/2 + } + if ctFactor <= 0 { + return nil, fmt.Errorf("obithermo: strand concentrations must be positive (primer %g, target %g)", + primerConc, targetConc) + } + + m := &Model{ + method: method, + rlogc: gasConstant * math.Log(ctFactor), + logNa: math.Log(salt), + } + m.fillTables() + return m, nil +} + +// DefaultModel returns a Model with the ecoPrimers default conditions and the +// SantaLucia salt correction. +func DefaultModel() *Model { + m, err := NewModel(DefaultPrimerConc, DefaultTargetConc, DefaultSalt, SantaLucia) + if err != nil { + panic(err) // the defaults are valid + } + return m +} + +var baseCode = func() (t [256]int8) { + for i := range t { + t[i] = -1 + } + for i, c := range "ACGT" { + t[c] = int8(i) + t[c+'a'-'A'] = int8(i) + } + return +}() + +func stepIndex(t0, t1, b0, b1 int) int { return t0<<6 | t1<<4 | b0<<2 | b1 } + +func (m *Model) fillTables() { + // Double mismatches (no Watson-Crick pair at either end of the step) are + // treated as interior-loop expansions. Complement of code c is 3-c. + const loopH, loopS = 0.0, -0.97 + for x := range 4 { + for y := range 4 { + for a := range 4 { + for b := range 4 { + if x+a != 3 && y+b != 3 { + i := stepIndex(x, y, a, b) + m.dH[i], m.dS[i] = loopH, loopS + } + } + } + } + } + + // Explicit parameters override the defaults (Watson-Crick and single mismatches). + for _, e := range nnEntries { + i := stepIndex(int(baseCode[e.top[0]]), int(baseCode[e.top[1]]), + int(baseCode[e.bottom[0]]), int(baseCode[e.bottom[1]])) + m.dH[i], m.dS[i] = e.dH, e.dS + } + + // SantaLucia salt correction: 0.5*kfac per side of each step, i.e. kfac. + if m.method == SantaLucia { + kfac := 0.368 * m.logNa + for i := range m.dS { + m.dS[i] += kfac + } + } +} + +// GCCount returns the number of G and C (upper or lower case) in seq. +func GCCount(seq []byte) int { + n := 0 + for _, c := range seq { + switch c { + case 'G', 'C', 'g', 'c': + n++ + } + } + return n +} + +// SelfTm returns the melting temperature (degrees Celsius) of primer against +// its perfect complement. It returns NaN when the model predicts no stable duplex. +func (m *Model) SelfTm(primer []byte) (float64, error) { + return m.duplex(primer, primer, true) +} + +// Tm returns the melting temperature (degrees Celsius) of primer against the +// site, a stretch of the target read in the same orientation as the primer +// (primer and site have the same length; mismatches are primer[i] != site[i]). +// It returns NaN when the model predicts no stable duplex. +func (m *Model) Tm(primer, site []byte) (float64, error) { + if len(site) != len(primer) { + return 0, fmt.Errorf("obithermo: primer (%d) and site (%d) lengths differ", len(primer), len(site)) + } + return m.duplex(primer, site, false) +} + +func (m *Model) duplex(primer, site []byte, perfect bool) (float64, error) { + n := len(primer) + if n < 2 { + return 0, fmt.Errorf("obithermo: primer too short (%d), need at least 2 bases", n) + } + + dH := 0.0 + dS := initEntropy + m.rlogc + + p0 := int(baseCode[primer[0]]) + s0 := p0 + if !perfect { + s0 = int(baseCode[site[0]]) + } + if p0 < 0 || s0 < 0 { + return 0, fmt.Errorf("obithermo: non-ACGT base at position 0") + } + + for i := 1; i < n; i++ { + p1 := int(baseCode[primer[i]]) + s1 := p1 + if !perfect { + s1 = int(baseCode[site[i]]) + } + if p1 < 0 || s1 < 0 { + return 0, fmt.Errorf("obithermo: non-ACGT base at position %d", i) + } + // The partner strand carries the complement of the site. + idx := stepIndex(p0, p1, 3-s0, 3-s1) + dH += m.dH[idx] + dS += m.dS[idx] + p0, s0 = p1, s1 + } + + if m.method == Owczarzy { + fgc := float64(GCCount(primer)) / float64(n) + dS += dH * ((owczarzyGCSlope*fgc-owczarzyOffset)*m.logNa + owczarzyQuadratic*m.logNa*m.logNa) + } + + // One-state transition, as nparam_CalcTM: valid only for dS < 0 and Tm >= 0. + if dS >= 0 { + return math.NaN(), nil + } + tm := dH / dS + if tm < 0 { + return math.NaN(), nil + } + return tm - kelvinOffset, nil +} diff --git a/pkg/obithermo/model_test.go b/pkg/obithermo/model_test.go new file mode 100644 index 0000000..b8b342d --- /dev/null +++ b/pkg/obithermo/model_test.go @@ -0,0 +1,203 @@ +package obithermo + +import ( + "bufio" + "math" + "os" + "strconv" + "strings" + "testing" +) + +func readTSV(t *testing.T, path string) [][]string { + t.Helper() + f, err := os.Open(path) + if err != nil { + t.Fatal(err) + } + defer f.Close() + var rows [][]string + sc := bufio.NewScanner(f) + for sc.Scan() { + if line := strings.TrimSpace(sc.Text()); line != "" { + rows = append(rows, strings.Split(line, "\t")) + } + } + if err := sc.Err(); err != nil { + t.Fatal(err) + } + return rows +} + +func mustFloat(t *testing.T, s string) float64 { + t.Helper() + v, err := strconv.ParseFloat(s, 64) + if err != nil { + t.Fatal(err) + } + return v +} + +// checkAgainstC compares one Go result (Celsius) with the raw Kelvin value +// returned by the C library. The C code returns 0 when the model fails. +// +// The tolerance (1e-4 K) covers the single-precision literals of the C source +// (-21.3f, 1.987f, -5.9f ...): emulating them in float32 brings the gap down +// to 1e-12 K, so the Go port uses the same model with exact decimal constants. +func checkAgainstC(t *testing.T, what string, got float64, cKelvin float64) { + t.Helper() + if cKelvin <= 0 { + if !math.IsNaN(got) { + t.Errorf("%s: C model failed, Go returned %g", what, got) + } + return + } + if math.IsNaN(got) { + t.Errorf("%s: Go model failed, C returned %g K", what, cKelvin) + return + } + if d := math.Abs(got + 273.15 - cKelvin); d > 1e-4 { + t.Errorf("%s: Go %.9f C %.9f K (diff %g)", what, got+273.15, cKelvin, d) + } +} + +// testdata/c_reference.tsv was produced by calling nparam_CalcSelfTM and +// nparam_CalcTwoTM of ecoPrimers' libthermo on random primers and sites with +// 0..n mismatches: primer, site, self Tm, two Tm (default conditions), and +// two Tm with 1e-6 M / 2e-7 M strands and 0.2 M salt. +func TestAgainstEcoPrimersC(t *testing.T) { + def := DefaultModel() + alt, err := NewModel(1e-6, 2e-7, 0.2, SantaLucia) + if err != nil { + t.Fatal(err) + } + + rows := readTSV(t, "testdata/c_reference.tsv") + if len(rows) < 100 { + t.Fatalf("reference file too short: %d", len(rows)) + } + for _, r := range rows { + primer, site := []byte(r[0]), []byte(r[1]) + + got, err := def.SelfTm(primer) + if err != nil { + t.Fatal(err) + } + checkAgainstC(t, "self "+r[0], got, mustFloat(t, r[2])) + + got, err = def.Tm(primer, site) + if err != nil { + t.Fatal(err) + } + checkAgainstC(t, "two "+r[0]+"/"+r[1], got, mustFloat(t, r[3])) + + got, err = alt.Tm(primer, site) + if err != nil { + t.Fatal(err) + } + checkAgainstC(t, "alt "+r[0]+"/"+r[1], got, mustFloat(t, r[4])) + } +} + +// ecoPrimers prints Tm as (Kelvin - 273.0) with one decimal; obithermo uses the +// exact 273.15 offset, so the printed value is our result + 0.15. +func TestAgainstTutorialOutput(t *testing.T) { + m := DefaultModel() + rows := readTSV(t, "testdata/ecoprimers_tm.tsv") + if len(rows) == 0 { + t.Fatal("empty fixture") + } + for _, r := range rows { + got, err := m.SelfTm([]byte(r[0])) + if err != nil { + t.Fatal(err) + } + want := mustFloat(t, r[1]) + if d := math.Abs(got + 0.15 - want); d > 0.0501 { + t.Errorf("%s: printed %.1f, got %.3f (+0.15 = %.3f)", r[0], want, got, got+0.15) + } + } +} + +func TestSaltMethodsAgreeAtOneMolar(t *testing.T) { + sl, _ := NewModel(DefaultPrimerConc, DefaultTargetConc, 1.0, SantaLucia) + ow, _ := NewModel(DefaultPrimerConc, DefaultTargetConc, 1.0, Owczarzy) + p := []byte("ACACCGCCCGTCACTCTC") + a, _ := sl.SelfTm(p) + b, _ := ow.SelfTm(p) + if math.Abs(a-b) > 1e-9 { + t.Errorf("at 1 M both corrections vanish: %g vs %g", a, b) + } +} + +func TestSaltRaisesTm(t *testing.T) { + p := []byte("ACACCGCCCGTCACTCTC") + for _, method := range []SaltMethod{SantaLucia, Owczarzy} { + low, _ := NewModel(DefaultPrimerConc, DefaultTargetConc, 0.02, method) + high, _ := NewModel(DefaultPrimerConc, DefaultTargetConc, 0.5, method) + a, _ := low.SelfTm(p) + b, _ := high.SelfTm(p) + if !(b > a) { + t.Errorf("method %d: Tm should grow with salt, got %g then %g", method, a, b) + } + } +} + +func TestMismatchLowersTm(t *testing.T) { + m := DefaultModel() + p := []byte("ACACCGCCCGTCACTCTC") + perfect, _ := m.Tm(p, p) + mm, _ := m.Tm(p, []byte("ACACCGCCCGTGACTCTC")) + if !(mm < perfect) { + t.Errorf("a mismatch must lower Tm: perfect %g, mismatch %g", perfect, mm) + } +} + +func TestInputErrors(t *testing.T) { + m := DefaultModel() + if _, err := m.SelfTm([]byte("A")); err == nil { + t.Error("expected error for a 1-base primer") + } + if _, err := m.SelfTm([]byte("ACGNT")); err == nil { + t.Error("expected error for a non-ACGT base") + } + if _, err := m.Tm([]byte("ACGT"), []byte("ACG")); err == nil { + t.Error("expected error for different lengths") + } + if _, err := NewModel(0, 0, 0.05, SantaLucia); err == nil { + t.Error("expected error for zero strand concentration") + } + if _, err := NewModel(1e-6, 0, -1, SantaLucia); err == nil { + t.Error("expected error for negative salt") + } + if _, err := NewModel(1e-6, 0, 0.05, SaltMethod(9)); err == nil { + t.Error("expected error for unknown salt method") + } +} + +func TestLowerCaseAccepted(t *testing.T) { + m := DefaultModel() + a, _ := m.SelfTm([]byte("ACACCGCCCGTCACTCTC")) + b, _ := m.SelfTm([]byte("acaccgcccgtcactctc")) + if a != b { + t.Errorf("case must not matter: %g vs %g", a, b) + } +} + +func TestGCCount(t *testing.T) { + if n := GCCount([]byte("ACgtCCaT")); n != 4 { + t.Errorf("GCCount = %d, want 4", n) + } +} + +func BenchmarkTm(b *testing.B) { + m := DefaultModel() + p := []byte("ACACCGCCCGTCACTCTC") + s := []byte("ACACCGCCCGTGACTCTC") + b.ReportAllocs() + for b.Loop() { + if _, err := m.Tm(p, s); err != nil { + b.Fatal(err) + } + } +} diff --git a/pkg/obithermo/nn_table.go b/pkg/obithermo/nn_table.go new file mode 100644 index 0000000..373602f --- /dev/null +++ b/pkg/obithermo/nn_table.go @@ -0,0 +1,126 @@ +// Code generated from ecoPrimers libthermo/nnparams.c (nparam_InitParams); DO NOT EDIT. + +package obithermo + +// nnEntry is one explicit nearest-neighbor parameter: the 5'->3' dinucleotide of +// the top strand, the 3'->5' dinucleotide facing it, enthalpy (cal/mol) and +// entropy (cal/mol/K). +type nnEntry struct { + top, bottom string + dH, dS float64 +} + +var nnEntries = [...]nnEntry{ + {"AA", "TT", -7600.0, -21.3}, // AA/TT + {"AC", "TG", -8400.0, -22.4}, // AC/TG + {"AG", "TC", -7800.0, -21.0}, // AG/TC + {"AT", "TA", -7200.0, -20.4}, // AT/TA + {"CA", "GT", -8500.0, -22.7}, // CA/GT + {"CC", "GG", -8000.0, -19.9}, // CC/GG + {"CG", "GC", -10600.0, -27.2}, // CG/GC + {"CT", "GA", -7800.0, -21.0}, // CT/GA + {"GA", "CT", -8200.0, -22.2}, // GA/CT + {"GC", "CG", -9800.0, -24.4}, // GC/CG + {"GG", "CC", -8000.0, -19.9}, // GG/CC + {"GT", "CA", -8400.0, -22.4}, // GT/CA + {"TA", "AT", -7200.0, -21.3}, // TA/AT + {"TC", "AG", -8200.0, -22.2}, // TC/AG + {"TG", "AC", -8500.0, -22.7}, // TG/AC + {"TT", "AA", -7600.0, -21.3}, // TT/AA + {"AA", "CT", 7600.0, 20.2}, // AA/CT + {"AA", "TC", 2300.0, 4.6}, // AA/TC + {"AC", "CG", -700.0, -3.8}, // AC/CG + {"AC", "TA", 5300.0, 14.6}, // AC/TA + {"AG", "CC", 600.0, -0.6}, // AG/CC + {"AT", "CA", 5300.0, 14.6}, // AT/CA + {"CA", "AT", 3400.0, 8.0}, // CA/AT + {"CA", "GC", 1900.0, 3.7}, // CA/GC + {"CC", "AG", 5200.0, 14.2}, // CC/AG + {"CC", "GA", 600.0, -0.6}, // CC/GA + {"CG", "AC", 1900.0, 3.7}, // CG/AC + {"CT", "AA", 2300.0, 4.6}, // CT/AA + {"GA", "CC", 5200.0, 14.2}, // GA/CC + {"GC", "CA", -700.0, -3.8}, // GC/CA + {"TA", "AC", 3400.0, 8.0}, // TA/AC + {"TC", "AA", 7600.0, 20.2}, // TC/AA + {"AC", "TT", 700.0, 0.2}, // AC/TT + {"AT", "TC", -1200.0, -6.2}, // AT/TC + {"CA", "TT", 1000.0, 0.7}, // CA/TT + {"CC", "GT", -800.0, -4.5}, // CC/GT + {"CC", "TG", 5200.0, 13.5}, // CC/TG + {"CG", "TC", -1500.0, -6.1}, // CG/TC + {"CT", "GC", -1500.0, -6.1}, // CT/GC + {"CT", "TA", -1200.0, -6.2}, // CT/TA + {"GC", "CT", 2300.0, 5.4}, // GC/CT + {"GT", "CC", 5200.0, 13.5}, // GT/CC + {"TA", "CT", 1200.0, 0.7}, // TA/CT + {"TC", "CG", 2300.0, 5.4}, // TC/CG + {"TC", "AT", 1200.0, 0.7}, // TC/AT + {"TG", "CC", -800.0, -4.5}, // TG/CC + {"TT", "CA", 700.0, 0.2}, // TT/CA + {"TT", "AC", 1000.0, 0.7}, // TT/AC + {"AA", "GT", 3000.0, 7.4}, // AA/GT + {"AA", "TG", -600.0, -2.3}, // AA/TG + {"AC", "GG", 500.0, 3.2}, // AC/GG + {"AG", "GC", -4000.0, -13.2}, // AG/GC + {"AG", "TA", -700.0, -2.3}, // AG/TA + {"AT", "GA", -700.0, -2.3}, // AT/GA + {"CA", "GG", -700.0, -2.3}, // CA/GG + {"CG", "GA", -4000.0, -13.2}, // CG/GA + {"GA", "AT", 700.0, 0.7}, // GA/AT + {"GA", "CG", -600.0, -1.0}, // GA/CG + {"GC", "AG", -600.0, -1.0}, // GC/AG + {"GG", "AC", -700.0, -2.3}, // GG/AC + {"GG", "CA", 500.0, 3.2}, // GG/CA + {"GT", "AA", -600.0, -2.3}, // GT/AA + {"TA", "AG", 700.0, 0.7}, // TA/AG + {"TG", "AA", 3000.0, 7.4}, // TG/AA + {"AG", "TT", 1000.0, 0.9}, // AG/TT + {"AT", "TG", -2500.0, -8.3}, // AT/TG + {"CG", "GT", -4100.0, -11.7}, // CG/GT + {"CT", "GG", -2800.0, -8.0}, // CT/GG + {"GA", "TT", -1300.0, -5.3}, // GA/TT + {"GC", "TG", -4400.0, -12.3}, // GC/TG + {"GG", "CT", 3300.0, 10.4}, // GG/CT + {"GG", "TC", -2800.0, -8.0}, // GG/TC + {"GT", "CG", -4400.0, -12.3}, // GT/CG + {"GT", "TA", -2500.0, -8.3}, // GT/TA + {"TA", "GT", -100.0, -1.7}, // TA/GT + {"TC", "GG", 3300.0, 10.4}, // TC/GG + {"TG", "AT", -100.0, -1.7}, // TG/AT + {"TG", "GC", -4100.0, -11.7}, // TG/GC + {"TT", "AG", -1300.0, -5.3}, // TT/AG + {"TT", "GA", 1000.0, 0.9}, // TT/GA + {"AA", "AT", 4700.0, 12.9}, // AA/AT + {"AA", "TA", 1200.0, 1.7}, // AA/TA + {"AC", "AG", -2900.0, -9.8}, // AC/AG + {"AG", "AC", -900.0, -4.2}, // AG/AC + {"AT", "AA", 1200.0, 1.7}, // AT/AA + {"CA", "GA", -900.0, -4.2}, // CA/GA + {"GA", "CA", -2900.0, -9.8}, // GA/CA + {"TA", "AA", 4700.0, 12.9}, // TA/AA + {"AC", "TC", 0.0, -4.4}, // AC/TC + {"CA", "CT", 6100.0, 16.4}, // CA/CT + {"CC", "CG", 3600.0, 8.9}, // CC/CG + {"CC", "GC", -1500.0, -7.2}, // CC/GC + {"CG", "CC", -1500.0, -7.2}, // CG/CC + {"CT", "CA", 0.0, -4.4}, // CT/CA + {"GC", "CC", 3600.0, 8.9}, // GC/CC + {"TC", "AC", 6100.0, 16.4}, // TC/AC + {"AG", "TG", -3100.0, -9.5}, // AG/TG + {"CG", "GG", -4900.0, -15.3}, // CG/GG + {"GA", "GT", 1600.0, 3.6}, // GA/GT + {"GC", "GG", -6000.0, -15.8}, // GC/GG + {"GG", "CG", -6000.0, -15.8}, // GG/CG + {"GG", "GC", -4900.0, -15.3}, // GG/GC + {"GT", "GA", -3100.0, -9.5}, // GT/GA + {"TG", "AG", 1600.0, 3.6}, // TG/AG + {"AT", "TT", -2700.0, -10.8}, // AT/TT + {"CT", "GT", -5000.0, -15.8}, // CT/GT + {"GT", "CT", -2200.0, -8.4}, // GT/CT + {"TA", "TT", 200.0, -1.5}, // TA/TT + {"TC", "TG", -2200.0, -8.4}, // TC/TG + {"TG", "TC", -5000.0, -15.8}, // TG/TC + {"TT", "AT", 200.0, -1.5}, // TT/AT + {"TT", "TA", -2700.0, -10.8}, // TT/TA +} diff --git a/pkg/obithermo/testdata/c_reference.tsv b/pkg/obithermo/testdata/c_reference.tsv new file mode 100644 index 0000000..53123fc --- /dev/null +++ b/pkg/obithermo/testdata/c_reference.tsv @@ -0,0 +1,400 @@ +GATTCAAATGACGGCAGC GATTCAAATGACGGCAGC 328.590295502325 328.590295502325 335.520082032693 +GCCGGGAGTCCCTGAGAG GCCGGGGGTCCCTTAGTG 335.202600908825 307.571309416976 317.582817372006 +CCGGAAATGTGCCATCTGCGTGCGA CCGGAAATGTGCCATCTGCGTGCGA 341.857354066828 341.857354066828 349.067971091170 +GCAGCGTAAGAGGAGGGC GCCGAGTGAGAGGACGGC 334.238236820572 292.689122005507 302.959373794547 +ATCGGGATCTCAAAACCATC ATCCGGATCCCAAAACTATC 328.374164082672 303.012377993885 311.743534784977 +TTTACTTCTCTCAAGGCC TTTACTTCGCTCACGGCC 324.870543621461 310.322643307651 318.434500513589 +GATATTATCCGG TTCCTCATTAGG 306.633848409535 131.298936687567 140.958918657051 +ACCAGATTCACCGTTAAA ACCAGATTCACCGTTAAA 324.666065281835 324.666065281835 331.625141334598 +GCAGAAGGAATTCGTCTTAAAGTTT GCAGAAGGAATTCGTCTTAAAGTTT 330.221644057193 330.221644057193 337.429293354313 +GTTACGCCCGTGGACAGA GTTACGCCCGTGGACAGA 333.152006826526 333.152006826526 340.131722535940 +TACTGGCCAAGTGTTTCGGGCTACC TACTGGACAAGGGTTTCGAGCTACC 338.543873371072 317.159669988483 326.737809053749 +CGGGCGAAAGACCTAACTCGTC GCCCATGTTTAAACGGTTCAAC 335.961664387167 99.726835837839 110.941608232133 +ACCACAGAAGAGCCTCAG ACCACAGAAGAGCCTCAG 329.675966490972 329.675966490972 336.774887202068 +TCCGTATCCGTGTGCTAT TCCGTATCCGTGTGCTAT 328.758681136274 328.758681136274 335.670742367360 +AGCACAACCATCTTGCCA AACCAGCAATTGGGCAAC 330.726812945211 0.000000000000 0.000000000000 +AAATCCGCGGTTACTTAG AAATCCCCGGATACTTAG 325.912290117405 310.432539561454 317.816914468819 +TGGTTGCGGAATGGCGACACGCTAG TGGTTGCGGAATGGCGACACGCTAG 341.368691736083 341.368691736083 348.576311955777 +CCACAAGGCACACCGAGGGCCCAAC CCACAAGGCACACCGAGGGCCCAAC 343.836245623632 343.836245623632 351.324029371624 +TACCTTTGGTTAACCGCG TACCTTTGGTTGACCGCG 328.806445188317 321.784293018138 329.972272766148 +ACCGCCAAACGGTAGTCCTT ACCGCCAAACGTTATTCCTT 334.638358155254 325.067933219113 333.495286023143 +GGAATCACCGAATTC GGAATCACCAAATTC 319.872552670165 310.456121372350 317.724729105623 +CGCTGGCGGGGACGCTTA CGCTGGCGGGGACGCTTA 338.850878426355 338.850878426355 345.870729715750 +CCCAGAACCGAGTGCTGA CCCAGAACCTAGTGCTGA 332.759551850704 324.515696448123 332.085468128098 +AGGACTATAGCC AGGACTATAGCC 311.340568942550 311.340568942550 317.961816433927 +AAGTAAGCCAAACTC AAGTAAGCCAAACTC 318.374897033808 318.374897033808 325.174916603994 +GGCAAACAGTGGCGTCTCTA GGCAAACATTGGCGTCTCGA 333.444435842161 322.587904260466 330.767259471616 +GCGGGCTGGGCGACGCCT GCGGGCTGGGCGACGCCT 344.353158968164 344.353158968164 351.458901919666 +AAAACCCGTTCTTGAGAA ATAACCCGTTCTTGAGAA 325.196643716015 318.373852240644 326.309549286768 +TCTACGGGCAGG TCTACGGGCAGG 320.684836039138 320.684836039138 327.333083788784 +CTGTATCATTCAAGACCTTGTG CTGGATCATTCATGACCTTCTA 327.587191928324 300.073898600295 309.615050320053 +GAGACCTCGTTTATATGTGCCG GAGATCTCCTTTATATGTTCCG 331.709967011022 307.489712436204 316.778347789381 +GATGCCATGCAACGCGGTCGAAATA GATGCCAAGCAACGCCGTCGAAATA 338.385858507321 328.510784583696 335.857144351146 +CACCCATGGGTCGAGGAA CCTTCATGGGTCAAGGAA 332.434732686040 303.559662982167 313.037414209458 +AACTTTACCACTTTGTCGGA AACTTTACCACTGTGTCGAA 327.854258269700 313.748415282978 322.159067997528 +CTCCCAAGAATAAGGCCA CTCCCAAGAATAAGGCTA 327.279305268693 315.945719545119 323.849648970559 +CTGCTCCCGACCTGCCGTTG CTGCTCCCGACCTGCAGTTG 339.148624544930 330.290260008245 337.867535931326 +TTAGGAGACTCTTCAGCCTCCTTGT TTAGGACACTATTAAGCCTCCTTGT 334.398890499698 315.037835993209 323.891875192977 +TGGACGATTGCG AGAATTGCGGCC 320.244905957781 146.501396490593 156.665817684297 +ATTGTCAACTGTAGGTCA ATTGTCTAGTGTAGGTCA 323.939323737395 300.681567922172 308.863167608541 +ACAATGTATTTTCTCGGG ACAATGTATTTTCTCGGG 323.362512238862 323.362512238862 330.327169046076 +CGTGTGAGTGGCCCGAGTTGTCTCT CGTGCGAGTGGCCCGAGTTGTCTTT 340.130848609675 332.245514068114 340.636316881815 +TATCAGACGTGGCAATGC TATCAGACTTGACAATGT 328.992885301719 304.405743905969 312.701350705029 +CGTCGTCCCTCTCAGCCG CGTCGTCCCTCTCAGCCG 336.200821936899 336.200821936899 343.186897048375 +TAAGGCTAGCCAGAACCACG TGAGGCTAGCCAGAACCACG 332.598253740841 326.985556902569 335.280653989150 +GTTCAGGGGAATGAGAGATA TTACAACTGCCAACTTCGCT 326.722966616537 109.952678878773 121.594862151643 +CCCAGCGCGAATTTGTCA CCCATCGCGAACTCGGCC 332.540722470730 292.630570524742 303.511783076339 +TGTCGTCGCTACCAGTTA TGCCTTCCCTACCAGTTA 328.953316297354 307.160700342629 315.442693299698 +CATGCACCGTGAGTCTGC CGTTCACCGGGAGTCCGC 332.846939286468 291.434652139556 302.526073291148 +GAGAGTTGCTGTTGATTA TAGAGTTGCTGTTGATTA 323.031379731052 319.294880722061 326.526947280607 +GCTCGGTCCTACGCCGACGT GCCTGATCTAAATATGCCTG 339.747877109584 158.568208002892 173.058219990461 +TCTTTGAGCTTCCCATCT TATTTGAGGTTCCCATCT 326.307771557426 300.329179385918 308.617669678883 +GTTTCCTCGGGT ATGTCCCCGGTC 317.903207078845 250.921863687541 262.030341678318 +AGTCTGCATCCAGGATAGTGTTCAA AGTCTGCGTCCAGGATAGTGTTCAA 333.474575396610 328.822975749317 336.887405627890 +CTAGGGCACCAACGCACG CTAGGTCACCAACGCACG 335.143347846422 329.701891848980 337.431099508189 +GATTGCTGGACCCGACAAAC ATCGACTGCGTCAATCTGAT 332.811424650986 125.989102558259 139.175967010614 +TTATTTCTCCGAGATCCA TTATTGCTCCGGGATCGA 323.096708880271 281.710374029821 291.583720089868 +AACCTCCGCTCAGCCCAT AACCTCCGCTCAGCCCAT 334.559812073966 334.559812073966 341.720616471431 +ACATGCGGAGACGATAGA GAGCATCTTCGTGTCCCC 328.777637355840 13.663795446228 15.557079997899 +GCGATCCGGCCCGAAGGACGGTTAC GCGATCCGGCCCGAAGGACGGTTAC 343.160858693872 343.160858693872 350.466895660629 +TAGGCGCTACCAAAGAGACC TACGCGATACCAAAGAGACC 332.314713425979 316.910949741281 324.757961637335 +GCTTGACGGAGGGATTGCATACGTC GCTTGACGGAGGGCTTGCATAGGTC 337.905459739261 327.298908614928 335.399197844049 +CTTACGGTTTTGTGG CTTACGGTTTTGTGG 320.490499863910 320.490499863910 327.265086426630 +AGAATGCTTTGCACGGGAAAAAGAC AGAATGCTTTGCCCGGGAACAACAC 334.833702111547 324.032364174889 333.126901145695 +CCATCCGGGACCGTGTTA GTGGTGGACAGAAAGCAC 332.523437582445 67.486926898379 75.000548050396 +AGCAAATATTTAAAACTG AGCAAATATTTAAAACTG 316.766614411011 316.766614411011 323.642414073658 +ACTGACAAAAGGGACCTTTAGA CCCGAACAAAGGGACCTTGAGG 329.363491007070 296.438968024933 307.489562539207 +ATAGGACTCGGACGAAAG ATAGGACTCGGACGAAAG 326.913461392949 326.913461392949 333.867158802657 +TATAAGCTAGTTGAG TACCAGCTACTCGAG 312.936278497921 279.566780789215 288.458312256098 +AAAGCTGCCGTG GTCGATTGTCGG 320.846677260689 11.139130534401 12.281612095844 +AAAACTGGCACG AAAACTGGCACG 317.241607884236 317.241607884236 323.710646130150 +ATTCAGATAATGAAGGAC ATTAAGATAATGAACGAC 319.569864618292 300.532814450507 308.266203286509 +ACTCCGCCAGTAAAGAGCGATC ACGCCGCCAGTAAAGATCGATC 334.956435857922 324.130818124085 332.402089448274 +AAACAGGTGGTGCTTCTGGT AAGCAGGTGGCGCTTCCGGT 332.663618849926 317.895372912569 326.451852134041 +ACGTAAACTAGCGATCCTAC ACGCAAAACAGCGATCCTTC 327.648394671924 306.841804464239 316.109126582555 +ACTCTTCTGTAGTAATTT ACTCTTCTGTATTAATTT 318.111014934586 311.385476013207 318.854355601485 +GCCTGGATGAAA CCTCGCATTATA 314.875733564946 135.466989302349 145.485320466877 +ACAAACATCTTT ATAATTATCTTT 306.751127645023 230.133355279539 240.007445742650 +TTTATGTTGCACCCG GCCCTCCTGCAAGGG 322.725425600228 198.227797952416 210.186099128768 +CTCTGTGATTGC CTCTGTGATTAC 313.233837007613 299.818390981614 306.829729109027 +CAGGGGGTGTCTTCTTGCCA CACGGGGTGCCTTCTTACTA 335.170765818115 304.025892909583 313.686365730924 +ATAAACTTAAGCGGGGCT ATAAACTTAAGCGGGGCT 327.141275752020 327.141275752020 334.197558650535 +GTGGTACGTCTCGCACCGTATT GTGGTACGTCTCGCACCGTGTT 335.183465966560 331.876024565197 339.826055532683 +AGCCCCTACCGTGAGGTATGAA AGCCCCTACCGTGAGCAATGAA 334.930026765640 329.325029384246 337.230038559345 +CTACGTTTGGACTTTCAG TCCAATTCATGTACACCA 324.309529994597 130.265141330095 141.767454087853 +GGAGGCGTCGTCTAATGTGGCTGCA GGAGGCGTCGTCTAATGTGGCTGCA 340.715437268799 340.715437268799 347.974364433377 +TCACGCCCGTTACCATGC TCGCGCCAGTTACCATTC 334.223290685080 301.060585660525 310.242722525263 +GTGTGGAATAAC GTGTGGAACAAT 308.856970626568 289.055396946314 297.087438077958 +AACTAGGCACAGCGGAAGTGTTACA AACTACGCACAGCGGAATGGTTACA 336.064499532413 324.487528333723 332.510759640255 +AGTTGGGACCGCGGACCTCAGACGA ACTTGGGACCGCGGACCTCAGACGA 342.586917960981 339.716507068413 347.297152857653 +CGCAGGCCGCCCTATCCG GTGGGCAACCGTGATTAT 339.659476639126 111.730621568890 122.520566332669 +ACTCGGTTAAAGAAGTAGCGGG ACTCGGTTAAAGAAGTAGCGGG 332.661444291378 332.661444291378 339.831677127033 +GTCGCACTCACGCCAAGG GGCGCACTCACGCCAAGG 335.434179979611 327.968420416066 335.946784667129 +TTATGTGCCGTC TTATGTGCCGTC 315.550568136423 315.550568136423 321.978396903837 +ATACACTCCCTC ATACACTCCCTC 311.742937528520 311.742937528520 318.358302050000 +ATATATAAAACGCTT ATATATAAAACGCTT 310.835103721529 310.835103721529 317.439661067059 +TTGACCCAGCTCTGACAA TTGACCCAGCTCTGACCA 329.300611062468 323.357283025809 331.214889354503 +TCACCAAGGACATCGGTGAA CACTAATCTCTAGGCTACTG 331.893316827967 0.000000000000 0.000000000000 +AAATACTAATATCACGAGGCCT AAATACTAATATCACGAGGCCT 326.991443235419 326.991443235419 334.132256945596 +CATCTAAGGTTCCCCACG CTCCTAAGGTTCCCCCTA 328.386823878643 301.442125171364 311.286145433228 +TCAGGCAAGGCTAAAGAT TCATGCAAGGCTGAACCT 326.725811212726 296.261200224359 306.662120559413 +ACCGGTGTCTGACGAAGA CCCGGAGTCTGACGAAGA 331.461574428762 323.233483550268 330.841087730303 +TGCCATAACAGT TGCCATAACAGT 313.107834134787 313.107834134787 319.615154304331 +ATAACTCTGCTCTATAAA ATAACTCTGCTCTATAAA 317.633729090723 317.633729090723 324.531712635958 +TCCTGCGCAAATTACTAGAACCTAA GTCTCAGCGAGAACTCTATTAGGAT 332.050504643625 0.000000000000 0.000000000000 +GTATCGAGGTCGAGGAAAGCGCTGT GTATCAAGGTCGAGGAAAGCGCTGT 338.362288220608 334.066037941649 341.579718818818 +CAGCCTTTCAGG CAGACTTTCAGG 316.248469201820 292.111362062705 300.080584403201 +CTTGCGGTACATCGCAGTGTGAATA CTTGCGGTACATCGCAGTGTGAATA 335.474585471307 335.474585471307 342.613324305508 +TAAGAACTAGCACGCATAAG TTAGAACCAGTACGAAGAAT 326.081723019865 254.023237958651 266.323327012842 +TACATGTACATTTCGGCC TACATGTACATTTCGGCC 325.896662787897 325.896662787897 332.832044747960 +TAGCATGCGATTCCCTAAGAAG TATCATGCGATTCCCTAGGAAG 330.590797080638 318.020175239024 326.375059746915 +CGGTGTTGTACGCCGACC CAGTGGTGTATGGAGTCC 335.122388615945 245.504228310044 257.618564855382 +ACTTTACGCCCGTAG ACTTTACGCCCGTAG 324.104530886916 324.104530886916 330.841602836160 +GGTCTTGGTGGACAGATG AGTCTTGGTGTACAGATC 328.628141921468 313.674320134018 322.206848229767 +GTTCGGTCATGC GTTCGGTCATGC 317.988264837295 317.988264837295 324.445499068321 +CTCACGCTTCTCATTATT CTCACGCTTCTTTTTATT 323.247552234877 309.106689004420 317.389249379550 +TGCGAGCGTGAT TGTGAGCGTGAT 322.408515345848 302.521839005369 309.729023044907 +AGATAGGGGGCCCTCGAACCGCCCG AGATAGGGGGCCCTCGAACCGCCCG 345.102909485864 345.102909485864 352.627470314597 +AACCTACACAGG AACCTACACAGG 313.161040203465 313.161040203465 319.768122899840 +TCCGCCCGCCAC TCCGCCCGCCTC 330.719187584648 320.094784422350 327.317364425992 +ATATCGTGAGCCGTGTACCCGG ATAGCGCGATCCGTATACCCGC 336.660788072052 313.231213020956 322.468970039473 +GGAAGCGTTGACACCGAC GGAAGCGTTGACACCGAC 332.770993213501 332.770993213501 339.705211527389 +CGAGGCAAGGGATACGCAGCTCAGT CGAGACAAGGGATACGCAGCTCACT 340.305756168638 332.795008096728 340.846081667398 +CTACCGGCGTAGATATGC CTACCGGCGTAGATGGGA 328.520812530739 311.151850739834 319.645074203379 +GACTTAAGCGACTAC ACGGCTTAGCGTGGC 318.887440179040 10.664421060955 12.014569510602 +CTTAGGATTCTGGCTAATTTACGGT CTTAGGTTTCTGGCTAATTTACGGT 330.595304320228 326.378730172844 334.038450345878 +ATCCGCACGGAC TTACCGGACCCC 323.089768931227 0.000000000000 0.000000000000 +TCCCAGCTTTTGCAGTGGGATT TCCTAGCTTTTGCAGTGGGATC 335.062847253676 324.545742095465 332.720886054794 +TGGCTTCACGGC TGGCTTCACGGC 323.785812253507 323.785812253507 330.353929757972 +TAGGTTATTCCGACCATA ATGCGGGACACTGCCATG 322.422210409371 192.368508212637 205.559476403263 +AGCCTTTCGACTGAC AGCCTTTCGATTGAC 324.335884950598 312.595672426393 320.534233002808 +CGTGCAGCTTTCATG CGTGCAGCGTTCTTG 324.919682340793 305.582789800617 313.597104921942 +TCTACGTGGCGGGGACCGGG TCTACGCGGCTGTGAGCCGG 341.347076387025 299.430239048585 309.018341106927 +TCAAATTAAAGTTGGACTGACA TCAAATTAAAGTTGGACTGACA 326.350254889911 326.350254889911 333.467128526408 +CGGGGGCCGTGGTCACTGCTTTCAG CGGGAGCCCTGGTCACTGTTTTGAG 343.571008380319 318.537337281338 328.795128334431 +ACATTGCAGTCA TACAAATATGCA 314.282094430945 54.422588938214 59.864081596928 +GTTCCATAAGACTTA GTTCCATATGATTTA 313.492331047121 283.603344310509 292.314146114969 +TATTTGAAAGACATAGGGGCGT CGGTACACTGGTGCCGGAGGCA 329.927702442206 21.671006660567 25.185742081802 +AATGGCAATTGCGTA AATGGCAATTGCGTA 322.153531008784 322.153531008784 328.861389966064 +TGACCTCACAAATACGGGGTCG TGACCTCACAAATAAGGGGTCG 334.840837473162 327.359477549248 335.051513807130 +CTCTGAAAGAACCGGGCA CTTTGAAAGAACCGGGCA 330.717616406698 321.166071332522 329.380562417680 +TCCCCGATGCTTAAGACACGCGTGT TTCCCAAGGCTTAATACACTCGTGT 339.959965745411 305.790225053607 316.153725711522 +TGCACTTCGAGG TGCACTTCGAGG 318.856723935199 318.856723935199 325.349637181717 +AAGGGTCACCAGAAA AATAAGGTTCCTGCT 322.240165848681 53.802401211576 60.076587053449 +TAATAAGTCGTG TTATAAGTGTTG 306.473400984667 233.666269447857 244.153793035378 +CATGATGCCTAGTATGAT CATGATGCCTAGTAAGAT 321.893431646493 315.240330549201 322.344428969018 +TATGCGCGAACCTAC TATGCGCGAACCTCC 324.777133033446 320.584177151486 328.154789861490 +TGGCAACTCCCGCACATGCCCT TAGCAACTCCCGCCCCTGCCCT 341.428702525130 330.240007837364 339.446160220950 +AACGGTCCATAGTGT TTACTGCCTCTATCA 322.301936674505 92.184229884404 101.375195399772 +CTGGTTAGCGACTAGGGCGA CTGGTTAGCGACCAGGACGA 334.491616458730 325.265096818567 333.491322070668 +CTACGTGACATGGCCCCT CTACGTGACATGGCCCCT 332.520578697054 332.520578697054 339.639446777780 +CCCTCCTGGAAGAATCCATAGTATC TCCTCCTGGAAGAATGCATAGTATA 331.837538166233 315.597835592823 324.711900293230 +TCCGCGGTGCGGCGTCTA TCCGCGGTGCGGCGTCTA 340.070741817013 340.070741817013 346.961988197618 +TGAGGGCGGCTCGAAAGAGATAGGC TGAAGGCGGCTCGAAAGAGATAGGC 339.908445380864 335.397387022299 343.087954453266 +AGGATTGAATGCGGATTCACAATGA AGGATTGAATGCGGATTCACCATGA 333.075743741665 329.267518388258 337.096639984117 +CTGGCACGTGAAAGTGTA CTGGCACGTGAAAGTGTA 328.758681136274 328.758681136274 335.670742367360 +TATGAGCTCGCATTGACGAT TATCAGCTCGCATTGACGTT 330.199735252295 317.575655447674 325.732088199432 +CTCCGATACGCCCAACGTTCCT CTCATATACGCCCAACGATCCT 337.111273784768 319.264148345607 327.480755860446 +CTTGTAAGGAACCGATCGTGAAACT ATAAGATATATTTGTTAAATAGGAG 333.190199559369 0.000000000000 0.000000000000 +CGATCGGGGTTCGGTGCTAAGG CGATCGGGGTTCGGTGCTAAGG 337.958135639451 337.958135639451 345.185613424927 +GTGTCACTTAGTGGC GTGTCACTTAGGGGC 322.599730343108 309.940994981687 317.650231320028 +GTAAGGTGCTACGTGGGA GTAAGGTGGTACGTGGGA 329.791738219571 317.210999985374 324.885748886244 +GGGGACCACGGAGCGCTT GGACACCACGGAGCGCTT 338.493908487715 328.075398097466 336.508505160201 +ATGATTCGGCTGATGTTG ATAATCCGACTGACGTTA 326.617373214063 284.388619463998 294.654772560060 +CGTTGCACCTGTGCAGAC GGATGGACCTGTGGAAAC 333.382064119484 257.494983943418 268.960440677818 +GGGTATGGAACCGAGCTT GGGTATGGAACCGAGCTT 330.144774353530 330.144774353530 337.264117120300 +CCGTTTAGTACTTGAGCT TCGTTTAGTTATTGAGCT 325.101412938739 306.110310829587 314.815405000962 +TGCTCGCCGTTGATG TGCTCGCCGTTGATG 328.982207099090 328.982207099090 335.675432532816 +GCGGTATCCTGTTTAATAGCAC GCGGTATCCTGTTTAATAGCAC 330.022926941214 330.022926941214 337.146106169306 +ATTGCGTTGCCCAACGGGAAAC CTTCTAGATCTCGTGTTCTGTC 337.501498070251 30.100236916645 34.669973146917 +GAAGCGTACTAC TAATCGTACTAC 312.135520730872 290.578334792837 298.230744679790 +TCGCTTAAGTTGGACCCG TCGCTTAAGTTGGACCCG 330.825518413055 330.825518413055 337.820664158968 +TCAAAATATCGACGATCGGGTA TCAAAATATCGACTATCGGGAA 329.618484688871 316.847687836049 324.679351875168 +CTGTAAGTGCGT CTGTAAATGCTT 315.552108712421 284.478519286229 292.079870838245 +ATCCGTTGTCTGTAT TCCTATCTTGTCTCA 319.236231890115 0.000000000000 0.000000000000 +GCTGACGATCACCACTGAGT GCTGACGATCACCACTGAGT 332.887137941413 332.887137941413 339.934427106782 +GGGACCGTCTTGCCTGAA GGGACCGTCTTGCCTGAA 333.069804290103 333.069804290103 340.197004324922 +GACACTTCATGTTGAAGGAA GAGACATCAGGCTGAAGGAA 326.623921634303 290.160218586875 299.116365655134 +AAAGTTAATACT AAAGTTAATGGC 300.439776727757 274.074904518474 281.916563483524 +TTCACTCAGGCCGGGACT TTCACTCAGGCCGGGACT 333.775772265987 333.775772265987 340.923230531829 +TGAGGTGTACCTTCGATAACCCCTG TGAGGTGTACCTTCGATAACCCCTG 335.429777164410 335.429777164410 342.806589346267 +GGCGTTAGACTGGGACTCAT GGCGTTAGACTGGGACTCAT 332.314063072189 332.314063072189 339.465122151725 +GCGGAAAATTCCTCCTGGAGGC GCGGAAAATTCCTCCTGGAGGC 336.555274112350 336.555274112350 343.900546225317 +ACCCGCCGGGTTATG AACCGCCTGGTTATG 330.420331626846 303.591907390707 312.104888476139 +GTGAATCTGTGCCATGTAAGGAGTA GTGAATCTGTGCCATGTAAGGAGTA 332.502726598592 332.502726598592 339.772881635043 +TGTGCATATGCGAAGCAGCA TCTGCATATCCGAATCAGAA 333.922832979848 300.308875168811 310.038091502733 +TTCCGGGAGAGTCATTCAAGCGATT AAGCGAGGGGAGACCCTTCTTTACG 335.964252182230 0.000000000000 0.000000000000 +TATCACTTACTCCCCGGA TATCACTTACTCCCCGGA 327.110291836484 327.110291836484 334.201971889462 +ACGCATTAGTCTACCGTCTTGC ACGCATAAGTCTACCGTCATGC 333.304407097527 323.852674403909 331.529871399707 +ATAATAGATGAT ATAATAGATGAT 298.724754718266 298.724754718266 305.105559067848 +ACTTCATTGGCCTCTTTC GGGATAGGCCATTAGAAA 325.919067175754 0.000000000000 0.000000000000 +ATTTGCGTTAAGGAGACTCA ATTTGCGTTAAGGAGACTCA 327.736465255252 327.736465255252 334.763124999138 +GGGAGCCACGTCCCGCACTT TGGGTCTGTTCTACGGGTCC 340.351804998615 66.406913767236 75.840004728444 +AATGGTAGCTTGGAACAACT AATGGTATCTTGGAACAACG 327.871691250641 318.316542767859 326.227958663349 +ATACAATACCAA GTAAAACCCTAA 304.232095602747 144.099149360347 153.765346779177 +TTCTAGCGTCCCGGTACT TTCTAGCGTCCCGGTACT 330.589206350792 330.589206350792 337.589326383339 +TGGCCTTTTTTTAAGTAAAT TGGCCTTTTTTTAAGTAAAT 321.872839855264 321.872839855264 328.960538235470 +ATGCCTCCTTGTAATACAGCTAGGG ATGCCTCCTTGTAATACAGCTAGGG 333.823387389837 333.823387389837 341.214372867702 +GAGATAACACGCCAGGTTAA GGGATAACACGTCAGGTTAA 328.361333311021 307.593342393239 316.302295915689 +CACGGGCATCAAATG CACGGGCATCAAATG 324.403592056034 324.403592056034 331.200512200928 +TTAACTGTCGGTACTCTT TTAACTGTTGTTATTCTT 323.363845103162 280.866882856653 291.385325188001 +CACGATAGTCGTTGA TTCAAAGGTGAGTAA 321.130711058809 128.711478226556 138.526211474293 +GCCGGCCTAAGGACG GCCGGCCTAAGGACG 331.645745178000 331.645745178000 338.559056448220 +ACGCAAAAAGCGCAT ACGCACAAAGCGCAT 327.022026932331 320.836952659324 328.322467858379 +AGTCTTAAACGTTTATTG AGTCTTAATCGTTTATCG 318.625758737664 304.665747911265 312.350081264934 +CTGATCCGAGTTTGGCAGCT CTGAACCGAGTTTGGCAGCC 333.515248215999 325.848131196554 333.400292317441 +AATCCCCCTGCGCGGTGG AATCTCCCATCGCGGTGG 338.914827359853 316.871536337894 325.825478445471 +CCTATTGCGAGTGGAGTTTTTC CCTATTGCGAGTGGAGTTTTTC 330.398722345826 330.398722345826 337.555411082006 +TTTGTAGCACTCTCTAAG TTGGCACCGCTCTCGAGG 321.958335092061 240.192027201542 251.110839474907 +TATAAATCCAAACCG TATAAATCCAAACCG 314.941565560136 314.941565560136 321.679961211234 +TCTGGTCTACGGACCAGA TCAGGAATGCGGACCAGA 329.776739773812 300.216331414806 308.948988559444 +GCGATTCTGGAAATT GCGATTCTGGAAATT 319.582046008775 319.582046008775 326.323905265890 +AACTTATTGTAAGTGGCT ATCTTATTGTAAGTGGCT 321.893436025311 314.515961362535 321.963655827352 +AGTAGATCCACGCTC GGTGACGGTATAAGT 322.922652409125 0.000000000000 0.000000000000 +AGACAGCCAATTTGGACC AGACAGCCAATTTGGACC 328.624785345222 328.624785345222 335.740638937702 +TCTCCCCATCTGGTTGTGACAC CCTCCCCAACTGGCTGTGACAC 334.475047649994 322.522934177182 331.074093710435 +GTCCGGAGGGAAATT GTCCGGAGGGAAATT 323.695895292588 323.695895292588 330.657945722303 +GCATTGGTGTCTGAGAGACATC GCATTGGTGTCTGAGAGACATC 331.823924496399 331.823924496399 338.987388491055 +TACTCTTCGTTG TACTCTTCGTTG 310.392977904224 310.392977904224 316.757886088883 +ACCTACTACAAT ACCTACTACAAT 306.714175636802 306.714175636802 313.206330066357 +CCTTACACTATGCACCCG CCTTACACTATGCACCCG 328.839039592404 328.839039592404 335.870639509527 +ACCTGTAAGATCGAGTGATATCGGA ACCTGTAATATCGAGTGATATTGGC 332.453410863819 317.742424213661 326.757759926067 +ACCCGGAATCAC ACCCGGAATCCC 318.062682068531 309.456479129025 317.168301011525 +TTGCATCTAAACATTAAAGCAGAAG TTATGAGCCTTCCTAATCCCGCAGC 328.558653084235 92.581987798659 103.905955829058 +CCGCGCCAATAT ATCACAAAGGAA 320.315607213397 0.000000000000 0.000000000000 +ACCAGCCTAACTTTTGTT GCCAGCCTAACTGTTTTT 325.132735655685 301.134269729448 310.106656597025 +GCTTAATGCTGGCTACGC GCTTAATGCTGGCTATGC 330.692022417212 320.449633481302 328.448263187090 +TGGTCCGAACGGCAACAC TGGTCCGAACGGCAACAC 334.376696093757 334.376696093757 341.354168304032 +ACCCGGCCAGGG ACCCGGCCAGGG 328.950241125024 328.950241125024 335.887941031174 +ATACCATCGCCTAAGATTGGCC ATACCATAGCCTAAAATTAGCC 332.848856616901 309.476145134398 318.241854893043 +AAACCGGCAGTA AATCCGGCAGTA 317.201144426162 305.365706144159 312.555666368026 +CACAACAACGTTCAA CACAACAACGTTCAA 320.677535999798 320.677535999798 327.306012831155 +TGGGTCGCGTCCCAG CAGTACCCAACCCCG 333.123346113342 246.742853521647 257.809384715704 +CTCCTAAACATGAAGAACCAGAAAT CTCCTAAACATGAAGAACTAGAAAT 329.191307133388 321.504803533715 329.322148156357 +TACTATTTCGTTTGC TACTATTTCGACCTC 316.071427737447 286.990612725496 295.372324621468 +TCCCTGGCAGCAGGGTAGTTTTGAA TGGGCCAACGCTAACTGGTGCCTTG 337.792849188337 121.771136708049 135.395255297683 +GCTACATTACCGGCTCTC GCTACATTACCGGCTGCC 328.627216292430 317.865179052925 326.512498741613 +TGAGGCGGGTTATGCGTTAATG TGAGGCGGGTTATGCGTTAATT 333.877486753212 330.936597263706 338.449826872471 +CACTTATCCCGCAATAAT AACTTATAACGCAAGAAT 323.209491396864 285.261497168294 294.371363704620 +CGCGCCCGACGATCCACT CCCGCCTGACGTTCCACC 338.845192827705 310.574091806929 319.266524881313 +AGGCTCCTCTATGAA AGTCTCCTCTATAAA 320.534065615391 298.120651463631 306.645491242189 +TGGTAATTGCCTGAG TGGTAATTGCCTGAG 320.915868643696 320.915868643696 327.776118922002 +GTTCATTCTCTGGAGGGC AAGCCGGTACCTGCGGGG 328.693062285185 175.795089391355 189.885811626097 +GAACGCTGGTCGTCACAT GAACGCTGGTCGTCACAT 331.556430142525 331.556430142525 338.434764177077 +ATTGGGTGATCGTAAGTAAG ATTGGGTGATCGTAAGTAAG 325.612525475036 325.612525475036 332.668318324958 +AAGATATGTTTGTAGGCCGAAC AAGATATGTTTGTAGGCCGAAC 329.104322856711 329.104322856711 336.238620405649 +GTGTGGGTGCCC GTGTGGGTGCCC 324.309319433451 324.309319433451 331.095278789318 +GGCGTCCAGAAT GGCGTCCAGAAT 318.801851843066 318.801851843066 325.371455269089 +TGGCTCTGGATAGCTCCCCC AAGGACTATACAAAGCCAGT 336.053481241646 140.181856955550 152.924856339728 +GTAATCTACCATATG GGAATCTACCATATG 311.238267655019 297.565035184391 305.303043725135 +TAGAGACGTTTCCTCGCCTTTATCG CTTAGACACTCAGGTGTTGTTGGCA 334.313541801127 188.908254593789 203.829299320958 +TGCCAGCTTGTGGCGAGTAT TGCCAGCTTGTGGCGAGTAT 335.045486995831 335.045486995831 342.139981881034 +TTCCGAGCCTGCCGAACAGG TTCCGAGCCTGCACACCCGG 337.981474268738 315.139472928922 324.695198064855 +TAGGCGACGGCTAACTGG ATTAACACAGAATGTAAC 332.611090573720 117.192190429110 129.003910625976 +CTATCAAGCCTCAGGTATCGCT CTATCAAGCCACAGGTATCGCT 332.013904222950 327.008869759689 334.361264460119 +GCGTTGAACAGTGCGTACGT GCGTTGAACAGTGCGTACGG 334.922740354371 331.487402480161 338.817709417777 +ATGACCTGTACGCTG TCACACCCTCGGTCG 324.096877104678 76.811640858322 84.402210669196 +TAGTTATCTTCTACCTGATGTAAGC TAATTATCTTCTACCAGATGTTAGT 327.657446380070 306.418404503197 315.329248976153 +CGGTGCAGTGCAAAATGCGAGTAGT CGGTGCAGTGCAAAGTGCGCGTAGT 338.234766348875 331.605213173016 339.892622743888 +TTGTTGCCATGTAAA TTGTTGCCATGTAAA 318.513544450161 318.513544450161 325.252135026214 +GTGAAACGTTTGCTGTGG GTGAAACGTTTGCTGTGG 328.992886751469 328.992886751469 335.904977195626 +GTTGGAATTGCGGCAAAG GTTGGAATTGCGGCAAAG 329.419693351400 329.419693351400 336.405013425441 +ATTTCCCGCAGCTTCGAC AGTTCCTGCAGCGTTGAC 331.921604125857 275.704268703669 286.426092962088 +GGGCTTCAACTCTGCAGA AACTTCCGATAGTACCCG 330.715768712068 0.000000000000 0.000000000000 +GTAGTACGTCACTTAGGGTATA GTAGTACGTCACTTAGGGTCTA 326.370618283308 323.603568352225 331.248373111091 +GTGATATTTTCACTGCTAGG GTGATATGTTCACTGCTAGG 324.660738933852 318.097303613935 325.739236970914 +TTAGAGCCTAGATATCGC TGAGAGCCTACATATCGC 323.737203572163 308.667021683076 316.877776506437 +GGCCGGTTTGAT GGCCGGTTTGAT 319.628239742093 319.628239742093 326.261640206404 +CGATAGTGGAAG CGTTTGTGGAAG 311.281036639251 282.148143916626 290.555750610531 +TTTATAGACGGTCCA TTAATAGAGGGTCCA 318.271295635730 289.396103709646 297.309467179028 +CTGGTGTAAATTTTTATT CTGGTGTAAATTTTTATT 316.242691168716 316.242691168716 323.159373336702 +CACGCAAAGACGAGTCGAGA CGCGCTAAGACGAGTCGAGC 333.509565254824 317.485155999984 326.212807278748 +GCCCCTGTCCGGACG GCCCCTGTCCGGGAG 334.323987481155 318.296185453565 326.861053252518 +AAGCCGGCACTA TAGCCGGCACTA 320.841087637638 315.681196183552 323.022375994306 +CCCCCTTGTTCT CCCACTGGTTCT 316.846355213233 271.731156926471 280.431509587266 +TTTGGGTCCGATACGTTA TTTGGGTCCGACAGGTTC 326.526907539640 304.936001347139 313.235900619784 +CTAGTAAGGTATAGAACT CTAGTAAGGTATAGAAAT 317.080850733325 306.909216639793 314.322636687809 +ACACTGCAACATGCAAGGCA TCTCTGCACCATACTAAGCA 334.279193488462 287.410425546330 298.337166942414 +CGGATACGTGAGCTGACCGTCACTG AGGGTTCATGAGCTGACCGTCACTG 339.003807135660 321.603408699629 331.135793238806 +CACAATCCTTTCATAGGTCTGATGT CACAAACCTAACATATGTCTGGTGT 330.769444740710 302.850977615703 312.757796843091 +ATAGGTGTATTACTTCCC ATAAGTGCATTACTTCCC 320.813390192036 307.309069291562 315.330380672069 +TGCCCGTGCTAATTTCGG TGCCCGTGCGAATTTCGA 331.916704163337 321.788326255281 329.840680268581 +CATACCTCCCGTGTGACC CAGACCTCCTGTCTGAGC 330.790040366578 275.685519938138 285.797334919463 +CATGCGAATGAACGTGGTCAAC CATGCGAATGAACGTGGTCAAC 333.744727353783 333.744727353783 340.783101574584 +GGTCCAGCCAGC GGGCCGGCCAGA 323.997990076396 258.335190180963 269.085542668344 +TCAGCCTCTTACTACGAA TCAGCCTCTTACTACGAA 325.504908314887 325.504908314887 332.433608839830 +TTCCACTCGGTA TTTAACTCGTCA 315.163712062905 240.754025130773 251.279252359821 +GTACCCATCCGTTAACCACATT GTACCCATCAGTTAACCACATT 330.965975035173 322.116695925385 329.685541486863 +TCGGATTTGTGG TCGTATATGCGT 315.144792522878 261.302945400146 270.745105924733 +CAGGGGTTTGTAGCTTGCAT AAAAGGTCGACATGAAACTC 331.592676687332 178.298382734095 192.121517719714 +GTATGTTTAGATTCCGGT GTATGTTCACATTCCGGT 322.407865448171 309.819055451666 317.927267476480 +ATTTGAAGGTTGTTCATT ATTTGAAGGTTGTTTATT 320.745098479303 308.460034775676 316.604473343016 +ACGGTGGCCGGCGACCTCAGCCGCA TCGGTCTCCGGCGAGCTCAGTCGCA 349.319476545950 322.805970408218 332.569513311728 +GGTGAAACATGGGTGGTATGATAAT GGTGAAACATGGGTGATATGATAAT 331.043479784795 326.332708138854 334.184817037240 +AAGTGTAATCGACTA AAGTGTAATCGACTA 315.631885291475 315.631885291475 322.265747968200 +GAAGAAAATCCGTTTAGT GAAGAAATTTCGATTAAT 320.919322767873 264.519341261783 274.695121470457 +GTATACCTACCGCCAGGCGTAA GTATACCTACCGCCAGGCGTAA 334.199822075507 334.199822075507 341.373552239777 +GGGCTTGCAAATGCACTAGT GGGCTCGCAAACGCACATGT 332.244946736482 316.459896257268 324.959991904042 +AGTAACATTACCCCTCTT AGTAACATTACCCCTCTT 322.762790159849 322.762790159849 329.855166947719 +ATCGTTCCAGATTCA ATAGTTCCACATTGA 319.593588349254 263.703483135864 273.889968541208 +ATCTAGACAAAT CTCTAGACAAAT 303.769798710798 299.975537128382 306.767744251403 +GACTCGTGCCCAAAGGCG GACTCGGGCCTAAACGCG 335.453032103533 305.944507861049 314.863300937474 +ATACCTGAAAGATACATAGGGAGGG ATACCCTAACGATACATAGGGAGGG 330.838488925824 319.951646252133 328.421632500441 +CTCCTTCTATATCTTTACGC CTCCTTCTATATCTTTACGC 323.614245457101 323.614245457101 330.629799804542 +GGAACGACAGCGGAC GGAGCGACATCGGAG 329.215799373567 299.203726696696 307.870410467643 +AATTAAACTTCACTTGCTGCTA AATTAAACCGCACTTGCTGCTA 326.774684409898 319.760152873130 327.648310708541 +CGGGGTGGTTTTAACGCCTT CGGGGTGGTTTTAACGCCTT 334.293634381856 334.293634381856 341.479503422465 +TTACAAGTGTAC TTACAAGTGTAC 306.490429220235 306.490429220235 312.860219905519 +GGTTTTACGCACTCGTTT GGTTGTACGCACCCGTTT 327.475666665468 315.253671257952 323.597273287183 +GCGACCGGGATATTCGTG GCGACTGTGATATTCGTG 332.081729064974 312.612274551236 320.900746018201 +AAATCATAGATGTTTGTGTG AAATCTTAGACGTTTGTGTG 322.490478539460 311.233326719324 319.056840527317 +CCGCGGCTGGCCAGTGCG CCGGGGCTGGTCAGTGCG 343.595298549215 320.692138927062 329.428906251676 +TTAGCGCCCCCT TTAGAGGCCCGT 323.638703533546 223.193289824279 232.649538093037 +CGACTCCTTGCG CAACTCGTTGCG 321.093094443631 287.627523199553 294.941907978827 +CAAATAGGGGAGAAATAGGGATGAT CAAATAGGGGAGACATAGGGATGAT 329.829565362939 326.229605874518 334.271529764424 +TTATGACTCTAT TTATGACTCTAT 302.351970012031 302.351970012031 308.749474038831 +CTTCGCACGGCTCTGAGGTG CTTCGCACGGCTCTGAGGTG 336.758970783676 336.758970783676 343.832413942225 +GGTAGATCGTCTAACACA GGTGGATAGTCTAGCACA 324.183145729044 288.591703366550 297.757637466896 +TCCGAAGTTATTTGT TCCGAAGTTATTCGC 317.020120014950 307.809184902247 315.094442186122 +ACGCTATAGGTATCCAATGTGC TGAGGGGTTGCCTCGCGCGAGA 330.668816473345 168.517116213496 182.239452513402 +ATCCCGGTGTTT CTCGCGTTCTTT 316.963839881018 238.291774003272 248.409713749044 +TGTAAATATTGAGAACAT CTACTTGTAAAAATTATC 316.552099039474 4.196619607978 4.793908669173 +TAAGATGGCGGTGCTAAGGT TAAGATGGCGGTGCTAAGCT 331.748855931570 328.095422595895 335.422537658975 +CAGAGAATCGTATTG TAGAGAATCGTATTG 316.058437382107 309.336246420051 316.478881368674 +ACACTATCGCAT ACACTATTGCAT 313.287559156327 289.002177419194 296.901322522936 +TTTGCAACAAACTGCGGG TTTGCAACAAACTGCGGG 330.987598215230 330.987598215230 337.964638501570 +TGCGCATTGACCGTATGA TGAGCATTGCAAATATGA 330.724505651688 291.707022981886 301.075127848151 +CTGCAACGTGGCTGACGTGG CTGCAACGAGGCTGACGTGG 337.828829590951 332.158127068020 339.396841315526 +AATCTAGGTATTCTGTGCACACTAG AATCTAGGTATTCGGTAGACACTAG 330.093652788304 312.242546896813 320.851841260874 +ACGGCGAAACTGTCCCGT ACGGCGAAACTGTCCCGT 335.434181438533 335.434181438533 342.388102607306 +AACGAGTACTCTTTGCACGCGC AACGAGTACTCTTTGCAAGCGC 336.704192051484 329.670890289599 337.116780737979 +ACGGCCACCCGCGTAAGCCAGT ACGACCACCCGCGCTAGCCAGT 343.225833795195 335.051197281573 343.935168403898 +AGGTGGAAACACCTCTTTATAG AGGTGGAAACACCTCTTTATAG 327.767855921026 327.767855921026 335.018188736768 +GATGCACCTCTTCCTTGT GATGCACCTAGTCCTTGT 328.015528597840 315.813502381439 323.875578738504 +CACACGTTAAATCAGCCGTGAC CACACGTTAAATCAGCCGTGAC 333.178564800892 333.178564800892 340.213130099053 +GTGAAAAACGCTAAAACT GAGAAAAACGCTGAAACT 322.651310853696 305.102360687419 313.386535231522 +CCTCTAAGCGTAAACTGGCGTA CCTCTAAGCGTAAACTGGCGTA 332.731489287653 332.731489287653 339.833318025496 +CTTAACGGATCAGGTGCC CTTAACGGATGAGGTACC 329.145552153189 309.298607409059 318.329957990940 +ACCAGCGCGGGTCCAAGCCGGG AACAGCGCGGGTCAAAGCCCGG 346.277068986675 323.989295670246 332.757718044482 +GGTCGCCCTTGGTTG GGTCGCCCTTGGTTG 329.378530415267 329.378530415267 336.338999066477 +GGTCTTTCCTGATAG GGTCTTTCCTGCTAG 317.502443546558 312.248143518990 319.891057909696 +ATGGGGTCCCTTGGATAA ATGGGCTCACTTGGAGAA 327.935969186382 299.834873075580 308.768543906097 +AGACTTTATCTGCGTTAG CGACTTAATCTGCATTGG 322.530698528657 290.771157085417 299.660782150129 +TTCTAGCCTGTGCCATTCATTCGCG TGTCTTTAATCATTCACTGCATTTT 337.662752230513 0.000000000000 0.000000000000 +GTGGCGTGATCCGCCTATGATG GTGGCGTGATACGCCTATGATG 336.412147017699 328.612405834565 336.461928234461 +ATTATCCTGCAGAGCAGTGA ATTATCCTGCAGAGCAGTGA 329.338095898179 329.338095898179 336.434344794516 +TGGGGTCACGCATGGCACCG TCGTTTCCGCGTAGACACAT 340.932042495783 219.946305376159 234.105527008232 +GATCAGTCATGCCGGGCA TCGCTCACTGGGAGCTTT 333.615526310877 70.980108149928 78.760105051004 +GAGAAACTACCAACCACC GAGAAACTACCAACCACC 326.141893376412 326.141893376412 333.228102476867 +ATTGACTAGCCTGGAGGC ATTGACTCGCCTGGAGGC 329.814592678115 325.021169884577 332.608693895943 +ACGGAGTCTATTGTC AAGGAGTCTATTGTC 319.985406470302 306.562131243465 313.933774764732 +TGGCTGATTGGCCATTATTC TGGGTGATTGGCCATTATTC 329.296931346104 317.833565606159 325.604567901985 +TGTTACGGACGGACG TGTCAGGGACGCACG 327.360275144725 294.262459737383 302.641243348176 +AACGCTCCTTCTGACGCTCTGTACC AACTCTCCTGCTGACGCTCTGCACC 338.281645508427 324.671859746526 333.350952165099 +CTTTCTACAAGCTTCCTCAGCCGAT CTTTCTACAAGCTTCCTCAGCCGAT 334.726254329200 334.726254329200 342.014376175497 +CTGGGAGCGTGT CTGGGAGCGTGT 322.225101677135 322.225101677135 328.814148322577 +GCAAGTGCTCCATACGTCAGGA GCAAGTGCTCCATACGTCAGGA 335.151235041562 335.151235041562 342.311691193007 +TTGAACTCGAAGTCATTCCAGCCCA TTGTACTTGAAGCCATTCCAGCCCA 336.086839523526 320.167401115734 329.871603131488 +CGCGAGTGTTAATTTTCATC CGCGAGTGTTAATTTTCATC 326.706848503872 326.706848503872 333.607112791387 +CTCGAAATCAGCCTA CAGGCAGATCCGATA 320.433152901209 106.785241479223 115.721577071620 +CCCACGTTGGATCCCTCA CACACCCAGCGTTCCCCT 332.434732686040 168.247008949882 182.904021311056 +TCTTCCCGAAGGCAACTA TTGCTAGCCACCGCTACC 328.742342595200 0.000000000000 0.000000000000 +TCGGTCGCCCGGCCA TCGGTCGCCCGGCCA 338.280658715332 338.280658715332 345.187830452143 +TTCCGGTCTAGAGAT GTCCCGTCTAGAGAT 320.290802240471 304.664615132156 311.959714415134 +TGCCACGTTTGG TTCCACCTTTGG 320.673142294482 289.947588641272 298.070057172917 +CTGAGAACATGG GTTAAGTTAAAA 311.861058614240 0.000000000000 0.000000000000 +TTCCCATTTGCAACG TTCCCATTTGCAACG 323.462465099785 323.462465099785 330.249305701134 +AAGAGTTACTGGATTACC ATTACATGTTGAGCTAAC 321.460730667492 45.295339819983 50.838550888654 +AAAACTCATTACCGTCAATGTGCCG AAAACTCATTACCGTCAATGTGCCG 334.427238998430 334.427238998430 341.612309670089 +CGGGAAATCATGCACTTC CGGGAAATCATGCAGTTC 327.837268831791 315.451695083719 322.783155312403 +TCTTGTCCATCAGACAGA ACTTGTCGACCAGACAGA 325.674390994389 302.134938899268 310.971599041593 +TAACTTTGCCGTGCGTTC TTGCATAGCATGCAATTT 330.185153783687 164.313401929230 176.255433198370 +GAGATTGACGACTAACCT GAGATTGACGACTAACCT 324.455556483854 324.455556483854 331.390094199272 +CCGCGAGTCCACGGCGTAAG CCGCGAGTCCACGGCGTAAG 339.144645429285 339.144645429285 346.143799055883 +TGACGGCGAGTGAGTTTT GGATTAGTCATCATCGCG 330.479181965474 47.596928980319 53.756086430128 +AGCAACGTCTAAACTCGATT AGCAACGTCTAAACTCGATT 328.165361220407 328.165361220407 335.096430259205 +GACTGCTAGCTGGCT GAATTATCACGTTCC 326.800285243793 145.119103179615 155.884495817015 +ACCCTCGTAATTATTCCG GCCTCGCTAGAGAGGGAA 324.895708998494 137.294573703070 148.579615770821 +AGCGGGCCGGCGCCCACGGTTAAAT AGCGGGACGGCTCCCACGGATAAAT 346.469332548688 327.821835178262 336.666611815380 +ATACACCAGTCTCCACTGTGTCAGC ATACACCAGTCTCCACTGTGTCAGC 336.084026510573 336.084026510573 343.378799103379 +AGGCAACGGTGTTTTTAGTTTCAAG AGGCAACGGTGCTTTTAGTTTCAAG 332.791413039949 329.450267766259 337.042137604359 +CATAGTATGGTTCATAATTTAA CAAAGACGGGATTATCGGACTT 319.805110852434 183.915523269303 197.052684250500 +ACGCCCCCCGGATTCGGC ACGCCCCGCGGATTCGGC 341.276243356091 331.161466849465 338.916726408046 +TTGTCTTTCGAGCGG TTGTGTGTCCAACCA 325.282149224729 222.156190895896 232.598751363606 +CTCCCGGGCGCCAGATGG CTCCCGGGCGCCAGATGG 339.311369482363 339.311369482363 346.533954436015 +GCACACTTTGTCGGTAAGTGAGGAC GCACACTTTGTCGATAGCTGAGGAC 336.007697297418 324.718456248143 333.231550897913 +ATATAGTCTCCGTGT ATATAGTCTCCGTGT 317.670914323835 317.670914323835 324.391677867921 +ATTCGAGGCGGCTCTGAGGT GTTCGAGGCGGCTCCGTGGT 336.308093587336 324.901517012421 333.408982676338 +CGCTAGCTCTCAGCATAA CGCTAGCTCTCAGCTTAA 327.750384254086 320.869735908381 328.340764122397 +TACTCACTCTAATTCAAC TACTAACTCCAATTGATC 319.232623419269 263.254120288054 273.886368603122 +CTTGGAATCTTGTTCCGC CTTGGAATCTTGTTCCGC 327.748687917447 327.748687917447 334.748570070981 +TCTCTCTCTACTGAAGATGT TCTCTCTCTACTGAAGATGT 324.955441779254 324.955441779254 332.010856900828 +AGATAGCTAAACTATGGTATTT AGATAGCTAAACTATTGTATTT 322.379524984208 314.920600083519 322.617736532767 +TCCAGTAGGCCTGCACACCC TCCTGTAGGCCTGCACACCC 337.082762403533 331.065336200951 338.847431016473 +CCGGTCGGTTAA CCGAGCGGTCAA 318.298891942113 278.422489888824 287.988343096102 +TGCGGTATTACACAGTAC TGCGGTACTAGACCGGAC 325.257155822510 277.211655556984 287.317024862518 +TAGGTTGAGATGTTCGGGCG TAGGTTGAGATGTGCGGGCG 332.954776706522 326.896199598776 334.681687928661 +TCGAACCTCTAA TCGAACCTCTAA 311.195901304215 311.195901304215 317.645142918670 +GGCCGTTGGGTGAGATGT GGCCGTTGGGTGAGATGT 333.461534051827 333.461534051827 340.580014223162 +TTACGATTAGTAGAC TTACGATTAGTAGAC 313.227722774298 313.227722774298 319.837422500332 +GCTGGCAGACTTCCGGGA GCAGGTAGACTGGCGGGA 335.491766864185 300.268242946003 309.735154150044 diff --git a/pkg/obithermo/testdata/ecoprimers_tm.tsv b/pkg/obithermo/testdata/ecoprimers_tm.tsv new file mode 100644 index 0000000..55229e4 --- /dev/null +++ b/pkg/obithermo/testdata/ecoprimers_tm.tsv @@ -0,0 +1,13 @@ +AAACTGGGATTAGATACC 48.5 +ACACCTCGACCTGACGTT 58.8 +ACTTACCATGTTACGACT 50.8 +CAAACTGGGATTAGATAC 47.5 +CCAAGTGCACCTTCCGGT 60.7 +CCTGTTCTAGAACCGATA 50.8 +CTACACCTCGACCTGACG 57.5 +CTTTTGCCACAGAGACGG 57.0 +GCCAAGTCCTTTGGGTTT 56.2 +GGGATTAGATACCCCACT 52.6 +GTTCTAGAACAGGCTCCT 53.6 +TCGTACCTTTTGCATCAT 52.2 +TTCTAGAACAGGCTCCTC 53.3 diff --git a/pkg/obitools/obialign/obialign.go b/pkg/obitools/obialign/obialign.go new file mode 100644 index 0000000..7d79db0 --- /dev/null +++ b/pkg/obitools/obialign/obialign.go @@ -0,0 +1,340 @@ +package obialign + +import ( + "os" + "slices" + "sort" + "sync" + "sync/atomic" + + align "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/obiitercsv" + "git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obiseq" + sim "git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obisimilarity" + "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" +) + +// Params are the parameters of the comparison. +type Params struct { + Threshold float64 // 0: no threshold + Normalized bool + Distance bool + Reference sim.Reference + AcceptAmbiguous bool + ExtraColumns bool + Workers int +} + +// ParamsFromCLI collects the parameters from the command line options. +func ParamsFromCLI() Params { + return Params{ + Threshold: CLIThreshold(), + Normalized: CLINormalized(), + Distance: CLIDistance(), + Reference: CLIReference(), + AcceptAmbiguous: CLIAcceptAmbiguous(), + ExtraColumns: CLIExtraColumns(), + Workers: obidefault.ParallelWorkers(), + } +} + +// dataset is a set of usable sequences with their description. +type dataset struct { + seqs obiseq.BioSequenceSlice + entries []sim.Entry +} + +// readDataset keeps the sequences that can be compared. +func readDataset(db obiseq.BioSequenceSlice, name string, p Params) dataset { + var d dataset + ambiguous := make([]bool, 0, len(db)) + for _, s := range db { + ok, amb := sim.Classify(s.Sequence(), p.AcceptAmbiguous) + if !ok { + continue + } + d.seqs = append(d.seqs, s) + ambiguous = append(ambiguous, amb) + } + if discarded := len(db) - len(d.seqs); discarded > 0 { + log.Warnf("Discarded %d sequences of %s that did not contain only IUPAC nucleotides (or only 'acgt' without --accept-ambiguous)", + discarded, name) + } + if len(d.seqs) == 0 { + log.Fatalf("No valid sequences in %s.", name) + } + d.entries = sim.BuildEntries(len(d.seqs), func(i int) ([]byte, int, bool) { + return d.seqs[i].Sequence(), d.seqs[i].Count(), ambiguous[i] + }, p.Workers) + for i := range d.entries { + if d.entries[i].Length > align.MaxBandedLCSLength { + log.Fatalf("The sequence %s is too long (%d bp, maximum %d bp)", + d.seqs[i].Id(), d.entries[i].Length, align.MaxBandedLCSLength) + } + } + return d +} + +// pair is a pair of sequences that reaches the threshold: the index of the +// second one, and the score. +type pair struct { + j int + score float64 +} + +// aligner compares the sequences of a dataset with the ones of an index. +type aligner struct { + queries []sim.Entry + index *sim.Index + self bool // the index holds the queries: only the pairs i < j are reported + sc *sim.Scoring +} + +// row finds the sequences of the index that reach the threshold with the +// query i, and appends them to out in the order of the index. +// +// Only the buckets of compatible lengths are visited, and the 4-mer filter +// works on blocks of sequences. +func (a *aligner) row(i int, buf *align.BandedLCSBuffer, commons *sim.Commons, out []pair) []pair { + q := &a.queries[i] + out = out[:0] + for _, length := range a.index.Lengths() { + if !a.sc.LengthCompatible(q.Length, length) { + continue + } + b := a.index.Bucket(length) + commons.Reset() + start := 0 + if a.self { + // the members are in the order of the dataset + start = sort.Search(len(b.Members), func(k int) bool { return b.Members[k].ID > i }) + } + for k := start; k < len(b.Members); k++ { + m := &b.Members[k] + if s, ok := a.sc.PairScore(q, &m.Entry, b.Common(k, q.Sparse, commons), buf); ok && a.sc.Passes(s) { + out = append(out, pair{m.ID, a.sc.Reported(s)}) + } + } + } + slices.SortFunc(out, func(x, y pair) int { return x.j - y.j }) + return out +} + +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("[Comparing sequences]"), + ) +} + +// maxPairsWithoutThreshold is the number of pairs above which a missing +// threshold is reported, the table having then as many rows. +const maxPairsWithoutThreshold = 1e8 + +// maxRowsPerRun is the number of rows of the table that a run is expected to +// produce at most when every pair is reported. +const maxRowsPerRun = 100000 + +// runShape chooses how many sequences a run covers, and how many runs a +// worker may be ahead of the oldest unfinished one. Without threshold every +// pair is a row of the table, so the runs are shortened to keep their size +// reasonable; otherwise many pairs are rejected and the runs are longer, to +// reduce the synchronizations. +func runShape(n, targets int, noThreshold bool, workers int) (rowsPerRun, window int) { + rowsPerRun = min(max(n/(workers*32), 1), 256) + if noThreshold { + rowsPerRun = min(rowsPerRun, max(maxRowsPerRun/max(targets, 1), 1)) + } + return rowsPerRun, 4 * workers +} + +// Compare compares every sequence of db1 with every sequence of db2, or with +// the following ones of db1 if db2 is nil, and returns the pairs that reach the +// threshold as a table with the columns id1, id2 and score (and count1, +// count2, length1 and length2 if p.ExtraColumns). +// +// The rows are in the order of the sequences of db1, then of the ones of +// db2, whatever the number of workers. +// +// The workers take runs of rows of the matrix of the pairs, as in sumatra, +// but each run is sent to the writer with its rank: the writer puts them back +// in order, so that the output neither depends on the timing nor needs a lock +// on the output. +func Compare(db1, db2 obiseq.BioSequenceSlice, source string, p Params, onProgress func(done int)) *obiitercsv.ICSVRecord { + d1 := readDataset(db1, "the input", p) + d2 := d1 + self := db2 == nil + if !self { + d2 = readDataset(db2, "the reference file", p) + } + log.Infof("%d sequences", len(d1.entries)) + if !self { + log.Infof("%d reference sequences", len(d2.entries)) + } + + all := d1.entries + if !self { + all = append(slices.Clone(d1.entries), d2.entries...) + } + sc, err := sim.NewScoring(sim.Params{ + Threshold: p.Threshold, + Normalized: p.Normalized, + Distance: p.Distance, + Reference: p.Reference, + Ratio: 1e300, // no limit on the counts + }, all) + if err != nil { + log.Fatalf("Wrong threshold: %v", err) + } + + index := sim.NewIndex() + for j := range d2.entries { + index.Add(d2.entries[j], j) + } + a := &aligner{queries: d1.entries, index: index, self: self, sc: sc} + + iterator := obiitercsv.NewICSVRecord() + for _, f := range []string{"id1", "id2", "score"} { + iterator.AppendField(f) + } + if p.ExtraColumns { + for _, f := range []string{"count1", "count2", "length1", "length2"} { + iterator.AppendField(f) + } + } + + n := len(d1.entries) + workers := max(p.Workers, 1) + + pairs := float64(n) * float64(len(d2.entries)) + if self { + pairs = float64(n) * float64(n-1) / 2 + } + log.Infof("%.0f pairs of sequences to compare", pairs) + if p.Threshold == 0 && pairs > maxPairsWithoutThreshold { + log.Warnf("No threshold has been given: the table will have %.0f rows, "+ + "use the option --threshold to keep only the similar pairs", pairs) + } + + rowsPerRun, window := runShape(n, len(d2.entries), p.Threshold == 0, workers) + runs := (n + rowsPerRun - 1) / rowsPerRun + + iterator.Add(workers) + go func() { + iterator.WaitAndClose() + }() + + // The runs are sent to the writer with their rank, and the writer holds + // those that arrive before the previous ones. To bound that memory, a + // worker does not start a run more than `window` runs after the oldest run + // that is not finished. + var ( + lock sync.Mutex + progress = sync.NewCond(&lock) + finished = make([]bool, runs) + oldest int + rows int + ) + var next atomic.Int64 + var wg sync.WaitGroup + for w := 0; w < workers; w++ { + wg.Add(1) + go func() { + defer wg.Done() + defer iterator.Done() + var buf align.BandedLCSBuffer + var commons sim.Commons + var pairs []pair + for { + run := int(next.Add(1)) - 1 + if run >= runs { + return + } + lock.Lock() + for run-oldest >= window { + progress.Wait() + } + lock.Unlock() + + from, to := run*rowsPerRun, min((run+1)*rowsPerRun, n) + batch := make([]obiitercsv.CSVRecord, 0, to-from) + for i := from; i < to; i++ { + pairs = a.row(i, &buf, &commons, pairs) + for _, pr := range pairs { + rec := obiitercsv.CSVRecord{ + "id1": d1.seqs[i].Id(), + "id2": d2.seqs[pr.j].Id(), + "score": pr.score, + } + if p.ExtraColumns { + rec["count1"], rec["count2"] = d1.entries[i].Count, d2.entries[pr.j].Count + rec["length1"], rec["length2"] = d1.entries[i].Length, d2.entries[pr.j].Length + } + batch = append(batch, rec) + } + } + iterator.Push(obiitercsv.MakeCSVRecordBatch(source, run, batch)) + + lock.Lock() + finished[run] = true + for oldest < runs && finished[oldest] { + oldest++ + } + rows += to - from + done := rows + progress.Broadcast() + lock.Unlock() + if onProgress != nil { + onProgress(done) + } + } + }() + } + return iterator +} + +// CLIOBIAlign compares the sequences as the command line asks, and returns the table of the pairs. +func CLIOBIAlign(iterator obiiter.IBioSequence) *obiitercsv.ICSVRecord { + source, db := iterator.Load() + log.Infof("Sequence dataset of %d sequences loaded", len(db)) + + var db2 obiseq.BioSequenceSlice + if CLIHasReferenceDB() { + db2 = CLIReferenceDB() + if db2 == nil { + db2 = obiseq.BioSequenceSlice{} + } + } + + var bar *progressbar.ProgressBar + barChecked := false // the bar is created once, even when it is disabled + last := int64(0) + var lock sync.Mutex + return Compare(db, db2, source, ParamsFromCLI(), func(done int) { + lock.Lock() + defer lock.Unlock() + if !barChecked { + bar, barChecked = progressBar(len(db)), true + } + if bar != nil { + bar.Add(int(int64(done) - last)) + } + last = int64(done) + }) +} + +// CLIWriteTable writes the table to the output file given by --out, or to the standard output. +func CLIWriteTable(table *obiitercsv.ICSVRecord) { + obicsv.CLICSVWriter(table, true) +} diff --git a/pkg/obitools/obialign/obialign_test.go b/pkg/obitools/obialign/obialign_test.go new file mode 100644 index 0000000..679a086 --- /dev/null +++ b/pkg/obitools/obialign/obialign_test.go @@ -0,0 +1,271 @@ +package obialign + +import ( + "bufio" + "fmt" + "math/rand" + "os" + "path/filepath" + "sort" + "strconv" + "strings" + "testing" + + align "git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obialign" + "git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obiitercsv" + "git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obiseq" + sim "git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obisimilarity" +) + +// readTestFasta reads a fasta file whose headers are "id count=N; ...". +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) + for sc.Scan() { + if line := sc.Text(); strings.HasPrefix(line, ">") { + flush() + header = line[1:] + } else { + seq.WriteString(strings.TrimSpace(line)) + } + } + flush() + return db +} + +// collect reads the whole table, whatever the order the batches arrive in, +// and returns its rows in the order of the output file. +func collect(it *obiitercsv.ICSVRecord) []obiitercsv.CSVRecord { + batches := map[int][]obiitercsv.CSVRecord{} + for it.Next() { + b := it.Get() + batches[b.Order()] = b.Slice() + } + orders := make([]int, 0, len(batches)) + for o := range batches { + orders = append(orders, o) + } + sort.Ints(orders) + var rows []obiitercsv.CSVRecord + for k, o := range orders { + if o != k { + panic(fmt.Sprintf("batch %d is missing", k)) + } + rows = append(rows, batches[o]...) + } + return rows +} + +// sumatraParams translates the options of sumatra. +func sumatraParams(t testing.TB, args []string) Params { + t.Helper() + p := Params{Normalized: true, 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 "-l": + p.Reference = sim.RefShortest + case "-L": + p.Reference = sim.RefLongest + case "-d": + p.Distance = true + case "-r": + p.Normalized = false + case "-x": + p.ExtraColumns = true + default: + t.Fatalf("unknown option %s", args[i]) + } + if err != nil { + t.Fatal(err) + } + } + return p +} + +// TestSumatraResults compares the tables with the outputs of sumatra 1.0.36 +// (testdata/*.expected), except that the identical sequences obey the +// threshold of a raw similarity, which sumatra does not check. +func TestSumatraResults(t *testing.T) { + cases, err := os.ReadFile(filepath.Join("testdata", "cases.txt")) + if err != nil { + t.Fatal(err) + } + a := readTestFasta(t, filepath.Join("testdata", "a.fasta")) + b := readTestFasta(t, filepath.Join("testdata", "b.fasta")) + + for _, line := range strings.Split(strings.TrimSpace(string(cases)), "\n") { + parts := strings.Split(line, "\t") + kind, name, opts := parts[0], parts[1], strings.Fields(parts[2]) + t.Run(kind+"/"+name, func(t *testing.T) { + var db2 obiseq.BioSequenceSlice + if kind == "two" { + db2 = b + } + p := sumatraParams(t, opts) + rows := collect(Compare(a, db2, "test", p, nil)) + + expected, err := os.ReadFile(filepath.Join("testdata", kind+"_"+name+".expected")) + if err != nil { + t.Fatal(err) + } + want := strings.Split(strings.TrimSuffix(string(expected), "\n"), "\n") + if len(expected) == 0 { + want = nil + } + if len(rows) != len(want) { + t.Fatalf("%d rows, want %d", len(rows), len(want)) + } + for i, r := range rows { + got := fmt.Sprintf("%s\t%s\t%f", r["id1"], r["id2"], r["score"]) + if p.ExtraColumns { + got += fmt.Sprintf("\t%d\t%d\t%d\t%d", r["count1"], r["count2"], r["length1"], r["length2"]) + } + if got != want[i] { + t.Fatalf("row %d:\n got %s\nwant %s", i, got, want[i]) + } + } + }) + } +} + +func randomDataset(rng *rand.Rand, n int, ambiguousRate float64) obiseq.BioSequenceSlice { + var roots [][]byte + db := make(obiseq.BioSequenceSlice, 0, n) + for len(db) < n { + var s []byte + if len(roots) == 0 || rng.Intn(4) == 0 { + s = make([]byte, 30+rng.Intn(60)) + for i := range s { + s[i] = "acgt"[rng.Intn(4)] + } + roots = append(roots, s) + } else { + for _, c := range roots[rng.Intn(len(roots))] { + switch r := rng.Intn(30); { + case r == 0: + s = append(s, "acgt"[rng.Intn(4)]) + case r == 1: + default: + s = append(s, c) + } + } + } + if rng.Float64() < ambiguousRate && len(s) > 3 { + s[rng.Intn(len(s))] = "nrykm"[rng.Intn(5)] + } + seq := obiseq.NewBioSequence(fmt.Sprintf("s%d", len(db)), s, "") + seq.SetAttribute("count", 1+rng.Intn(9)) + db = append(db, seq) + } + return db +} + +// naive compares every pair one by one, with the scoring and no index. +func naive(db1, db2 obiseq.BioSequenceSlice, p Params) []string { + self := db2 == nil + if self { + db2 = db1 + } + d1, d2 := readDataset(db1, "1", p), readDataset(db2, "2", p) + all := append(append([]sim.Entry{}, d1.entries...), d2.entries...) + sc, err := sim.NewScoring(sim.Params{Threshold: p.Threshold, Normalized: p.Normalized, Distance: p.Distance, + Reference: p.Reference, Ratio: 1e300}, all) + if err != nil { + panic(err) + } + var buf align.BandedLCSBuffer + var out []string + for i := range d1.entries { + for j := range d2.entries { + if self && j <= i { + continue + } + if s, ok := sc.PairScore(&d1.entries[i], &d2.entries[j], -1, &buf); ok && sc.Passes(s) { + out = append(out, fmt.Sprintf("%s\t%s\t%f", d1.seqs[i].Id(), d2.seqs[j].Id(), sc.Reported(s))) + } + } + } + return out +} + +// TestCompareMatchesNaive checks the scan by length and by blocks against the +// comparison of all the pairs, in every mode, with and without ambiguous +// sequences, whatever the number of workers. +func TestCompareMatchesNaive(t *testing.T) { + rng := rand.New(rand.NewSource(11)) + for _, ambiguous := range []float64{0, 0.2} { + db1 := randomDataset(rng, 90, ambiguous) + db2 := randomDataset(rng, 40, ambiguous) + for _, ref := range []sim.Reference{sim.RefAlignment, sim.RefLongest, sim.RefShortest} { + for _, base := range []Params{ + {Threshold: 0.9, Normalized: true}, + {Threshold: 0.7, Normalized: true, Distance: true}, + {Threshold: 30}, + {Threshold: 6, Distance: true}, + {Normalized: true}, + {Distance: true}, + } { + base.Reference, base.AcceptAmbiguous = ref, ambiguous > 0 + for _, second := range []obiseq.BioSequenceSlice{nil, db2} { + want := naive(db1, second, base) + for _, workers := range []int{1, 3, 8} { + p := base + p.Workers = workers + rows := collect(Compare(db1, second, "test", p, nil)) + if len(rows) != len(want) { + t.Fatalf("%+v two=%v workers=%d: %d rows, want %d", base, second != nil, workers, len(rows), len(want)) + } + for i, r := range rows { + if got := fmt.Sprintf("%s\t%s\t%f", r["id1"], r["id2"], r["score"]); got != want[i] { + t.Fatalf("%+v two=%v workers=%d row %d: %s, want %s", base, second != nil, workers, i, got, want[i]) + } + } + } + } + } + } + } +} + +func TestRunShape(t *testing.T) { + // with a threshold, the runs are long + if rows, window := runShape(40000, 40000, false, 16); rows != 78 || window != 64 { + t.Errorf("with a threshold: %d rows, window %d", rows, window) + } + // without threshold, a run produces at most about maxRowsPerRun rows + if rows, _ := runShape(40000, 40000, true, 16); rows*40000 > 3*maxRowsPerRun { + t.Errorf("without threshold: %d rows per run give too large a table", rows) + } + if rows, _ := runShape(10, 10, true, 4); rows < 1 { + t.Errorf("a run must cover one sequence at least, got %d", rows) + } +} diff --git a/pkg/obitools/obialign/options.go b/pkg/obitools/obialign/options.go new file mode 100644 index 0000000..5f2037c --- /dev/null +++ b/pkg/obitools/obialign/options.go @@ -0,0 +1,132 @@ +package obialign + +import ( + "git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obiseq" + sim "git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obisimilarity" + "git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obitools/obiconvert" + "github.com/DavidGamba/go-getoptions" + log "github.com/sirupsen/logrus" +) + +var _threshold = 0.0 +var _refShortest = false +var _refLongest = false +var _refAlignment = false +var _normalized = false +var _raw = false +var _distance = false +var _acceptAmbiguous = false +var _referenceDB = "" +var _extraColumns = false + +func ObialignOptionSet(options *getoptions.GetOpt) { + options.Float64Var(&_threshold, "threshold", _threshold, + options.Alias("t"), + options.ArgName("THRESHOLD"), + options.Description("Score threshold: only the pairs of sequences whose score reaches it are reported "+ + "(default: no threshold, all the pairs are reported). 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.BoolVar(&_refShortest, "shortest", _refShortest, + options.Alias("l"), + options.Description("Reference sequence length is the shortest.")) + + options.BoolVar(&_refLongest, "longest", _refLongest, + options.Alias("L"), + options.Description("Reference sequence length is the longest.")) + + options.BoolVar(&_refAlignment, "alignment", _refAlignment, + options.Alias("a"), + options.Description("Reference sequence length is the alignment length (default).")) + + options.BoolVar(&_normalized, "normalized", _normalized, + options.Alias("n"), + options.Description("Score is normalized by the reference sequence length (default).")) + + options.BoolVar(&_raw, "raw", _raw, + options.Alias("r"), + options.Description("Raw score, not normalized.")) + + options.BoolVar(&_distance, "distance", _distance, + options.Alias("d"), + options.Description("Score is expressed in distance (default: score is expressed in similarity).")) + + options.BoolVar(&_acceptAmbiguous, "accept-ambiguous", _acceptAmbiguous, + options.Alias("g"), + options.Description("Accept the sequences containing IUPAC letters other than a, c, g and t; "+ + "the alignment handles the IUPAC codes (default: these sequences are discarded).")) + + options.StringVar(&_referenceDB, "reference-db", _referenceDB, + options.Alias("R"), + options.ArgName("FILENAME"), + options.Description("Compare every sequence of the input with every sequence of this file "+ + "(default: compare the sequences of the input with each other).")) + + options.BoolVar(&_extraColumns, "extra-columns", _extraColumns, + options.Alias("x"), + options.Description("Add the columns count1, count2, length1 and length2 to the table.")) +} + +func OptionSet(options *getoptions.GetOpt) { + obiconvert.InputOptionSet(options) + obiconvert.OutputModeOptionSet(options, true) + ObialignOptionSet(options) +} + +// CLIThreshold returns the score threshold, 0 if there is none. +func CLIThreshold() float64 { return _threshold } + +// 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 +} + +// CLIDistance returns true when the score is expressed in distance. +func CLIDistance() bool { return _distance } + +// CLIReference returns the length used as reference to normalize the score. +func CLIReference() sim.Reference { + n := 0 + ref := sim.RefAlignment + if _refShortest { + n++ + ref = sim.RefShortest + } + if _refLongest { + n++ + ref = sim.RefLongest + } + if _refAlignment { + n++ + } + if n > 1 { + log.Fatal("The options --shortest, --longest and --alignment are exclusive") + } + return ref +} + +// CLIAcceptAmbiguous returns true when the sequences with IUPAC letters other than acgt are kept. +func CLIAcceptAmbiguous() bool { return _acceptAmbiguous } + +// CLIExtraColumns returns true when the counts and the lengths must be written. +func CLIExtraColumns() bool { return _extraColumns } + +// CLIHasReferenceDB returns true when a second dataset has been given. +func CLIHasReferenceDB() bool { return _referenceDB != "" } + +// CLIReferenceDB reads the second dataset. +func CLIReferenceDB() obiseq.BioSequenceSlice { + // Read as the main input is, with the same input options. + iterator, err := obiconvert.CLIReadBioSequences(_referenceDB) + if err != nil { + log.Fatalf("Cannot open the reference file %s: %v", _referenceDB, err) + } + _, db := iterator.Load() + return db +} diff --git a/pkg/obitools/obialign/testdata/cases.txt b/pkg/obitools/obialign/testdata/cases.txt new file mode 100644 index 0000000..8cbf6a1 --- /dev/null +++ b/pkg/obitools/obialign/testdata/cases.txt @@ -0,0 +1,24 @@ +one all -x +one default -t 0.9 -x +one low -t 0.6 +one shortest -t 0.9 -l +one longest -t 0.85 -L +one distance -t 0.1 -d +one rawdist -t 4 -r -d +one rawlcs -t 40 -r +one rawlcs_shortest -t 45 -r -l +one alldist -d -r +one allraw -r +one allshortest -l +two all -x +two default -t 0.9 -x +two low -t 0.6 +two shortest -t 0.9 -l +two longest -t 0.85 -L +two distance -t 0.1 -d +two rawdist -t 4 -r -d +two rawlcs -t 40 -r +two rawlcs_shortest -t 45 -r -l +two alldist -d -r +two allraw -r +two allshortest -l diff --git a/pkg/obitools/obialign/testdata/one_all.expected b/pkg/obitools/obialign/testdata/one_all.expected new file mode 100644 index 0000000..632772a --- /dev/null +++ b/pkg/obitools/obialign/testdata/one_all.expected @@ -0,0 +1,903 @@ +f3v10s35 f3v5s30 0.865672 87579 39802 65 63 +f3v10s35 f1v8s15 0.521127 87579 66109 65 57 +f3v10s35 f2v1s23 0.500000 87579 35696 65 58 +f3v10s35 f4v2s42 0.506667 87579 17302 65 61 +f3v10s35 f0v4s4 0.500000 87579 86916 65 69 +f3v10s35 f1v6s13 0.528571 87579 80246 65 56 +f3v10s35 f3v8s33 0.910448 87579 88635 65 66 +f3v10s35 f1v1s8 0.527027 87579 17651 65 60 +f3v10s35 f1v14s21 0.506667 87579 85030 65 56 +f3v10s35 f0v1s1 0.500000 87579 43883 65 69 +f3v10s35 f1v5s12 0.506667 87579 1410 65 60 +f3v10s35 f1v4s11 0.500000 87579 74527 65 58 +f3v10s35 f1v9s16 0.506494 87579 65777 65 60 +f3v10s35 f1v10s17 0.520000 87579 98659 65 60 +f3v10s35 f1v0s7 0.500000 87579 84420 65 58 +f3v10s35 f3v9s34 0.910448 87579 40677 65 65 +f3v10s35 f4v0s40 0.500000 87579 75843 65 60 +f3v10s35 f1v7s14 0.500000 87579 42277 65 58 +f3v10s35 f3v2s27 0.910448 87579 74030 65 65 +f3v10s35 f4v1s41 0.493506 87579 45686 65 61 +f3v10s35 f2v0s22 0.506329 87579 43219 65 69 +f3v10s35 f1v2s9 0.500000 87579 99108 65 69 +f3v10s35 f1v3s10 0.500000 87579 43230 65 58 +f3v10s35 f3v0s25 0.925373 87579 62755 65 66 +f3v10s35 f3v3s28 0.897059 87579 66465 65 66 +f3v10s35 f3v13s38 0.898551 87579 26948 65 68 +f3v10s35 f3v7s32 0.910448 87579 53710 65 65 +f3v10s35 f3v1s26 0.910448 87579 41283 65 65 +f3v10s35 f3v6s31 0.910448 87579 94783 65 65 +f3v10s35 f1v13s20 0.493333 87579 80913 65 56 +f3v10s35 f2v2s24 0.500000 87579 68414 65 49 +f3v10s35 f3v11s36 0.867647 87579 91927 65 65 +f3v10s35 f0v5s5 0.500000 87579 2668 65 69 +f3v10s35 f1v11s18 0.500000 87579 51814 65 58 +f3v10s35 f0v6s6 0.475000 87579 16273 65 69 +f3v10s35 f3v4s29 0.884058 87579 94356 65 68 +f3v10s35 f0v2s2 0.506329 87579 10896 65 69 +f3v10s35 f3v12s37 0.897059 87579 74202 65 67 +f3v10s35 f0v3s3 0.500000 87579 73040 65 67 +f3v10s35 f3v14s39 0.925373 87579 55015 65 66 +f3v10s35 f0v0s0 0.506329 87579 1332 65 69 +f3v10s35 f1v12s19 0.513889 87579 58178 65 57 +f3v5s30 f1v8s15 0.520548 39802 66109 63 57 +f3v5s30 f2v1s23 0.513514 39802 35696 63 58 +f3v5s30 f4v2s42 0.513889 39802 17302 63 61 +f3v5s30 f0v4s4 0.493671 39802 86916 63 69 +f3v5s30 f1v6s13 0.520000 39802 80246 63 56 +f3v5s30 f3v8s33 0.924242 39802 88635 63 66 +f3v5s30 f1v1s8 0.513158 39802 17651 63 60 +f3v5s30 f1v14s21 0.521127 39802 85030 63 56 +f3v5s30 f0v1s1 0.493671 39802 43883 63 69 +f3v5s30 f1v5s12 0.500000 39802 1410 63 60 +f3v5s30 f1v4s11 0.513514 39802 74527 63 58 +f3v5s30 f1v9s16 0.506667 39802 65777 63 60 +f3v5s30 f1v10s17 0.506494 39802 98659 63 60 +f3v5s30 f1v0s7 0.513514 39802 84420 63 58 +f3v5s30 f3v9s34 0.909091 39802 40677 63 65 +f3v5s30 f4v0s40 0.521127 39802 75843 63 60 +f3v5s30 f1v7s14 0.513514 39802 42277 63 58 +f3v5s30 f3v2s27 0.924242 39802 74030 63 65 +f3v5s30 f4v1s41 0.513889 39802 45686 63 61 +f3v5s30 f2v0s22 0.506329 39802 43219 63 69 +f3v5s30 f1v2s9 0.493671 39802 99108 63 69 +f3v5s30 f1v3s10 0.513514 39802 43230 63 58 +f3v5s30 f3v0s25 0.939394 39802 62755 63 66 +f3v5s30 f3v3s28 0.910448 39802 66465 63 66 +f3v5s30 f3v13s38 0.911765 39802 26948 63 68 +f3v5s30 f3v7s32 0.909091 39802 53710 63 65 +f3v5s30 f3v1s26 0.910448 39802 41283 63 65 +f3v5s30 f3v6s31 0.909091 39802 94783 63 65 +f3v5s30 f1v13s20 0.513514 39802 80913 63 56 +f3v5s30 f2v2s24 0.515152 39802 68414 63 49 +f3v5s30 f3v11s36 0.893939 39802 91927 63 65 +f3v5s30 f0v5s5 0.500000 39802 2668 63 69 +f3v5s30 f1v11s18 0.513514 39802 51814 63 58 +f3v5s30 f0v6s6 0.506173 39802 16273 63 69 +f3v5s30 f3v4s29 0.897059 39802 94356 63 68 +f3v5s30 f0v2s2 0.506329 39802 10896 63 69 +f3v5s30 f3v12s37 0.910448 39802 74202 63 67 +f3v5s30 f0v3s3 0.506329 39802 73040 63 67 +f3v5s30 f3v14s39 0.939394 39802 55015 63 66 +f3v5s30 f0v0s0 0.506329 39802 1332 63 69 +f3v5s30 f1v12s19 0.506849 39802 58178 63 57 +f1v8s15 f2v1s23 0.982759 66109 35696 57 58 +f1v8s15 f4v2s42 0.478873 66109 17302 57 61 +f1v8s15 f0v4s4 0.487179 66109 86916 57 69 +f1v8s15 f1v6s13 0.947368 66109 80246 57 56 +f1v8s15 f3v8s33 0.541667 66109 88635 57 66 +f1v8s15 f1v1s8 0.916667 66109 17651 57 60 +f1v8s15 f1v14s21 0.931034 66109 85030 57 56 +f1v8s15 f0v1s1 0.487179 66109 43883 57 69 +f1v8s15 f1v5s12 0.916667 66109 1410 57 60 +f1v8s15 f1v4s11 0.982759 66109 74527 57 58 +f1v8s15 f1v9s16 0.933333 66109 65777 57 60 +f1v8s15 f1v10s17 0.916667 66109 98659 57 60 +f1v8s15 f1v0s7 0.982759 66109 84420 57 58 +f1v8s15 f3v9s34 0.547945 66109 40677 57 65 +f1v8s15 f4v0s40 0.486111 66109 75843 57 60 +f1v8s15 f1v7s14 0.982759 66109 42277 57 58 +f1v8s15 f3v2s27 0.541667 66109 74030 57 65 +f1v8s15 f4v1s41 0.479452 66109 45686 57 61 +f1v8s15 f2v0s22 0.493671 66109 43219 57 69 +f1v8s15 f1v2s9 0.487179 66109 99108 57 69 +f1v8s15 f1v3s10 0.982759 66109 43230 57 58 +f1v8s15 f3v0s25 0.534247 66109 62755 57 66 +f1v8s15 f3v3s28 0.527027 66109 66465 57 66 +f1v8s15 f3v13s38 0.506329 66109 26948 57 68 +f1v8s15 f3v7s32 0.547945 66109 53710 57 65 +f1v8s15 f3v1s26 0.541667 66109 41283 57 65 +f1v8s15 f3v6s31 0.547945 66109 94783 57 65 +f1v8s15 f1v13s20 0.948276 66109 80913 57 56 +f1v8s15 f2v2s24 0.515152 66109 68414 57 49 +f1v8s15 f3v11s36 0.527027 66109 91927 57 65 +f1v8s15 f0v5s5 0.493671 66109 2668 57 69 +f1v8s15 f1v11s18 0.965517 66109 51814 57 58 +f1v8s15 f0v6s6 0.481013 66109 16273 57 69 +f1v8s15 f3v4s29 0.533333 66109 94356 57 68 +f1v8s15 f0v2s2 0.493671 66109 10896 57 69 +f1v8s15 f3v12s37 0.540541 66109 74202 57 67 +f1v8s15 f0v3s3 0.506494 66109 73040 57 67 +f1v8s15 f3v14s39 0.534247 66109 55015 57 66 +f1v8s15 f0v0s0 0.493671 66109 1332 57 69 +f1v8s15 f1v12s19 0.948276 66109 58178 57 57 +f2v1s23 f4v2s42 0.492754 35696 17302 58 61 +f2v1s23 f0v4s4 0.481013 35696 86916 58 69 +f2v1s23 f1v6s13 0.931034 35696 80246 58 56 +f2v1s23 f3v8s33 0.534247 35696 88635 58 66 +f2v1s23 f1v1s8 0.933333 35696 17651 58 60 +f2v1s23 f1v14s21 0.948276 35696 85030 58 56 +f2v1s23 f0v1s1 0.481013 35696 43883 58 69 +f2v1s23 f1v5s12 0.933333 35696 1410 58 60 +f2v1s23 f1v4s11 1.000000 35696 74527 58 58 +f2v1s23 f1v9s16 0.950000 35696 65777 58 60 +f2v1s23 f1v10s17 0.933333 35696 98659 58 60 +f2v1s23 f1v0s7 1.000000 35696 84420 58 58 +f2v1s23 f3v9s34 0.540541 35696 40677 58 65 +f2v1s23 f4v0s40 0.486111 35696 75843 58 60 +f2v1s23 f1v7s14 1.000000 35696 42277 58 58 +f2v1s23 f3v2s27 0.534247 35696 74030 58 65 +f2v1s23 f4v1s41 0.507246 35696 45686 58 61 +f2v1s23 f2v0s22 0.487500 35696 43219 58 69 +f2v1s23 f1v2s9 0.481013 35696 99108 58 69 +f2v1s23 f1v3s10 1.000000 35696 43230 58 58 +f2v1s23 f3v0s25 0.527027 35696 62755 58 66 +f2v1s23 f3v3s28 0.520000 35696 66465 58 66 +f2v1s23 f3v13s38 0.506329 35696 26948 58 68 +f2v1s23 f3v7s32 0.540541 35696 53710 58 65 +f2v1s23 f3v1s26 0.534247 35696 41283 58 65 +f2v1s23 f3v6s31 0.540541 35696 94783 58 65 +f2v1s23 f1v13s20 0.965517 35696 80913 58 56 +f2v1s23 f2v2s24 0.507463 35696 68414 58 49 +f2v1s23 f3v11s36 0.520000 35696 91927 58 65 +f2v1s23 f0v5s5 0.487500 35696 2668 58 69 +f2v1s23 f1v11s18 0.982759 35696 51814 58 58 +f2v1s23 f0v6s6 0.475000 35696 16273 58 69 +f2v1s23 f3v4s29 0.526316 35696 94356 58 68 +f2v1s23 f0v2s2 0.487500 35696 10896 58 69 +f2v1s23 f3v12s37 0.533333 35696 74202 58 67 +f2v1s23 f0v3s3 0.500000 35696 73040 58 67 +f2v1s23 f3v14s39 0.527027 35696 55015 58 66 +f2v1s23 f0v0s0 0.487500 35696 1332 58 69 +f2v1s23 f1v12s19 0.965517 35696 58178 58 57 +f4v2s42 f0v4s4 0.520000 17302 86916 61 69 +f4v2s42 f1v6s13 0.478261 17302 80246 61 56 +f4v2s42 f3v8s33 0.500000 17302 88635 61 66 +f4v2s42 f1v1s8 0.480000 17302 17651 61 60 +f4v2s42 f1v14s21 0.500000 17302 85030 61 56 +f4v2s42 f0v1s1 0.520000 17302 43883 61 69 +f4v2s42 f1v5s12 0.485714 17302 1410 61 60 +f4v2s42 f1v4s11 0.492754 17302 74527 61 58 +f4v2s42 f1v9s16 0.493151 17302 65777 61 60 +f4v2s42 f1v10s17 0.466667 17302 98659 61 60 +f4v2s42 f1v0s7 0.492754 17302 84420 61 58 +f4v2s42 f3v9s34 0.472973 17302 40677 61 65 +f4v2s42 f4v0s40 0.967213 17302 75843 61 60 +f4v2s42 f1v7s14 0.492754 17302 42277 61 58 +f4v2s42 f3v2s27 0.493151 17302 74030 61 65 +f4v2s42 f4v1s41 0.951613 17302 45686 61 61 +f4v2s42 f2v0s22 0.546667 17302 43219 61 69 +f4v2s42 f1v2s9 0.520000 17302 99108 61 69 +f4v2s42 f1v3s10 0.492754 17302 43230 61 58 +f4v2s42 f3v0s25 0.486486 17302 62755 61 66 +f4v2s42 f3v3s28 0.486486 17302 66465 61 66 +f4v2s42 f3v13s38 0.474359 17302 26948 61 68 +f4v2s42 f3v7s32 0.472973 17302 53710 61 65 +f4v2s42 f3v1s26 0.493151 17302 41283 61 65 +f4v2s42 f3v6s31 0.472973 17302 94783 61 65 +f4v2s42 f1v13s20 0.492537 17302 80913 61 56 +f4v2s42 f2v2s24 0.530303 17302 68414 61 49 +f4v2s42 f3v11s36 0.493151 17302 91927 61 65 +f4v2s42 f0v5s5 0.526316 17302 2668 61 69 +f4v2s42 f1v11s18 0.478873 17302 51814 61 58 +f4v2s42 f0v6s6 0.539474 17302 16273 61 69 +f4v2s42 f3v4s29 0.481013 17302 94356 61 68 +f4v2s42 f0v2s2 0.546667 17302 10896 61 69 +f4v2s42 f3v12s37 0.486842 17302 74202 61 67 +f4v2s42 f0v3s3 0.527027 17302 73040 61 67 +f4v2s42 f3v14s39 0.486486 17302 55015 61 66 +f4v2s42 f0v0s0 0.533333 17302 1332 61 69 +f4v2s42 f1v12s19 0.492537 17302 58178 61 57 +f0v4s4 f1v6s13 0.493333 86916 80246 69 56 +f0v4s4 f3v8s33 0.506173 86916 88635 69 66 +f0v4s4 f1v1s8 0.481013 86916 17651 69 60 +f0v4s4 f1v14s21 0.493506 86916 85030 69 56 +f0v4s4 f0v1s1 1.000000 86916 43883 69 69 +f0v4s4 f1v5s12 0.475610 86916 1410 69 60 +f0v4s4 f1v4s11 0.481013 86916 74527 69 58 +f0v4s4 f1v9s16 0.493671 86916 65777 69 60 +f0v4s4 f1v10s17 0.481481 86916 98659 69 60 +f0v4s4 f1v0s7 0.481013 86916 84420 69 58 +f0v4s4 f3v9s34 0.500000 86916 40677 69 65 +f0v4s4 f4v0s40 0.481013 86916 75843 69 60 +f0v4s4 f1v7s14 0.481013 86916 42277 69 58 +f0v4s4 f3v2s27 0.500000 86916 74030 69 65 +f0v4s4 f4v1s41 0.475000 86916 45686 69 61 +f0v4s4 f2v0s22 0.943662 86916 43219 69 69 +f0v4s4 f1v2s9 1.000000 86916 99108 69 69 +f0v4s4 f1v3s10 0.481013 86916 43230 69 58 +f0v4s4 f3v0s25 0.493827 86916 62755 69 66 +f0v4s4 f3v3s28 0.500000 86916 66465 69 66 +f0v4s4 f3v13s38 0.493827 86916 26948 69 68 +f0v4s4 f3v7s32 0.500000 86916 53710 69 65 +f0v4s4 f3v1s26 0.481481 86916 41283 69 65 +f0v4s4 f3v6s31 0.500000 86916 94783 69 65 +f0v4s4 f1v13s20 0.480519 86916 80913 69 56 +f0v4s4 f2v2s24 0.486111 86916 68414 69 49 +f0v4s4 f3v11s36 0.468354 86916 91927 69 65 +f0v4s4 f0v5s5 0.943662 86916 2668 69 69 +f0v4s4 f1v11s18 0.493506 86916 51814 69 58 +f0v4s4 f0v6s6 0.901408 86916 16273 69 69 +f0v4s4 f3v4s29 0.525000 86916 94356 69 68 +f0v4s4 f0v2s2 0.943662 86916 10896 69 69 +f0v4s4 f3v12s37 0.493827 86916 74202 69 67 +f0v4s4 f0v3s3 0.915493 86916 73040 69 67 +f0v4s4 f3v14s39 0.493827 86916 55015 69 66 +f0v4s4 f0v0s0 0.971429 86916 1332 69 69 +f0v4s4 f1v12s19 0.457831 86916 58178 69 57 +f1v6s13 f3v8s33 0.541667 80246 88635 56 66 +f1v6s13 f1v1s8 0.866667 80246 17651 56 60 +f1v6s13 f1v14s21 0.879310 80246 85030 56 56 +f1v6s13 f0v1s1 0.493333 80246 43883 56 69 +f1v6s13 f1v5s12 0.866667 80246 1410 56 60 +f1v6s13 f1v4s11 0.931034 80246 74527 56 58 +f1v6s13 f1v9s16 0.883333 80246 65777 56 60 +f1v6s13 f1v10s17 0.883333 80246 98659 56 60 +f1v6s13 f1v0s7 0.931034 80246 84420 56 58 +f1v6s13 f3v9s34 0.541667 80246 40677 56 65 +f1v6s13 f4v0s40 0.472222 80246 75843 56 60 +f1v6s13 f1v7s14 0.931034 80246 42277 56 58 +f1v6s13 f3v2s27 0.549296 80246 74030 56 65 +f1v6s13 f4v1s41 0.465753 80246 45686 56 61 +f1v6s13 f2v0s22 0.493506 80246 43219 56 69 +f1v6s13 f1v2s9 0.493333 80246 99108 56 69 +f1v6s13 f1v3s10 0.931034 80246 43230 56 58 +f1v6s13 f3v0s25 0.541667 80246 62755 56 66 +f1v6s13 f3v3s28 0.534247 80246 66465 56 66 +f1v6s13 f3v13s38 0.527027 80246 26948 56 68 +f1v6s13 f3v7s32 0.541667 80246 53710 56 65 +f1v6s13 f3v1s26 0.549296 80246 41283 56 65 +f1v6s13 f3v6s31 0.541667 80246 94783 56 65 +f1v6s13 f1v13s20 0.896552 80246 80913 56 56 +f1v6s13 f2v2s24 0.507692 80246 68414 56 49 +f1v6s13 f3v11s36 0.534247 80246 91927 56 65 +f1v6s13 f0v5s5 0.500000 80246 2668 56 69 +f1v6s13 f1v11s18 0.913793 80246 51814 56 58 +f1v6s13 f0v6s6 0.493506 80246 16273 56 69 +f1v6s13 f3v4s29 0.540541 80246 94356 56 68 +f1v6s13 f0v2s2 0.493506 80246 10896 56 69 +f1v6s13 f3v12s37 0.547945 80246 74202 56 67 +f1v6s13 f0v3s3 0.506849 80246 73040 56 67 +f1v6s13 f3v14s39 0.541667 80246 55015 56 66 +f1v6s13 f0v0s0 0.500000 80246 1332 56 69 +f1v6s13 f1v12s19 0.896552 80246 58178 56 57 +f3v8s33 f1v1s8 0.547945 88635 17651 66 60 +f3v8s33 f1v14s21 0.535211 88635 85030 66 56 +f3v8s33 f0v1s1 0.506173 88635 43883 66 69 +f3v8s33 f1v5s12 0.527027 88635 1410 66 60 +f3v8s33 f1v4s11 0.534247 88635 74527 66 58 +f3v8s33 f1v9s16 0.506494 88635 65777 66 60 +f3v8s33 f1v10s17 0.555556 88635 98659 66 60 +f3v8s33 f1v0s7 0.534247 88635 84420 66 58 +f3v8s33 f3v9s34 0.954545 88635 40677 66 65 +f3v8s33 f4v0s40 0.468354 88635 75843 66 60 +f3v8s33 f1v7s14 0.534247 88635 42277 66 58 +f3v8s33 f3v2s27 0.969697 88635 74030 66 65 +f3v8s33 f4v1s41 0.462500 88635 45686 66 61 +f3v8s33 f2v0s22 0.525000 88635 43219 66 69 +f3v8s33 f1v2s9 0.506173 88635 99108 66 69 +f3v8s33 f1v3s10 0.534247 88635 43230 66 58 +f3v8s33 f3v0s25 0.984848 88635 62755 66 66 +f3v8s33 f3v3s28 0.955224 88635 66465 66 66 +f3v8s33 f3v13s38 0.955882 88635 26948 66 68 +f3v8s33 f3v7s32 0.954545 88635 53710 66 65 +f3v8s33 f3v1s26 0.954545 88635 41283 66 65 +f3v8s33 f3v6s31 0.954545 88635 94783 66 65 +f3v8s33 f1v13s20 0.527778 88635 80913 66 56 +f3v8s33 f2v2s24 0.500000 88635 68414 66 49 +f3v8s33 f3v11s36 0.925373 88635 91927 66 65 +f3v8s33 f0v5s5 0.512500 88635 2668 66 69 +f3v8s33 f1v11s18 0.534247 88635 51814 66 58 +f3v8s33 f0v6s6 0.488095 88635 16273 66 69 +f3v8s33 f3v4s29 0.941176 88635 94356 66 68 +f3v8s33 f0v2s2 0.525000 88635 10896 66 69 +f3v8s33 f3v12s37 0.955224 88635 74202 66 67 +f3v8s33 f0v3s3 0.518987 88635 73040 66 67 +f3v8s33 f3v14s39 0.984848 88635 55015 66 66 +f3v8s33 f0v0s0 0.525000 88635 1332 66 69 +f3v8s33 f1v12s19 0.527778 88635 58178 66 57 +f1v1s8 f1v14s21 0.916667 17651 85030 60 56 +f1v1s8 f0v1s1 0.481013 17651 43883 60 69 +f1v1s8 f1v5s12 0.870968 17651 1410 60 60 +f1v1s8 f1v4s11 0.933333 17651 74527 60 58 +f1v1s8 f1v9s16 0.887097 17651 65777 60 60 +f1v1s8 f1v10s17 0.870968 17651 98659 60 60 +f1v1s8 f1v0s7 0.933333 17651 84420 60 58 +f1v1s8 f3v9s34 0.561644 17651 40677 60 65 +f1v1s8 f4v0s40 0.493151 17651 75843 60 60 +f1v1s8 f1v7s14 0.933333 17651 42277 60 58 +f1v1s8 f3v2s27 0.555556 17651 74030 60 65 +f1v1s8 f4v1s41 0.486486 17651 45686 60 61 +f1v1s8 f2v0s22 0.481481 17651 43219 60 69 +f1v1s8 f1v2s9 0.481013 17651 99108 60 69 +f1v1s8 f1v3s10 0.933333 17651 43230 60 58 +f1v1s8 f3v0s25 0.547945 17651 62755 60 66 +f1v1s8 f3v3s28 0.540541 17651 66465 60 66 +f1v1s8 f3v13s38 0.546667 17651 26948 60 68 +f1v1s8 f3v7s32 0.561644 17651 53710 60 65 +f1v1s8 f3v1s26 0.563380 17651 41283 60 65 +f1v1s8 f3v6s31 0.561644 17651 94783 60 65 +f1v1s8 f1v13s20 0.900000 17651 80913 60 56 +f1v1s8 f2v2s24 0.478261 17651 68414 60 49 +f1v1s8 f3v11s36 0.534247 17651 91927 60 65 +f1v1s8 f0v5s5 0.481481 17651 2668 60 69 +f1v1s8 f1v11s18 0.916667 17651 51814 60 58 +f1v1s8 f0v6s6 0.493506 17651 16273 60 69 +f1v1s8 f3v4s29 0.554054 17651 94356 60 68 +f1v1s8 f0v2s2 0.481481 17651 10896 60 69 +f1v1s8 f3v12s37 0.546667 17651 74202 60 67 +f1v1s8 f0v3s3 0.493671 17651 73040 60 67 +f1v1s8 f3v14s39 0.547945 17651 55015 60 66 +f1v1s8 f0v0s0 0.487500 17651 1332 60 69 +f1v1s8 f1v12s19 0.916667 17651 58178 60 57 +f1v14s21 f0v1s1 0.493506 85030 43883 56 69 +f1v14s21 f1v5s12 0.883333 85030 1410 56 60 +f1v14s21 f1v4s11 0.948276 85030 74527 56 58 +f1v14s21 f1v9s16 0.900000 85030 65777 56 60 +f1v14s21 f1v10s17 0.883333 85030 98659 56 60 +f1v14s21 f1v0s7 0.948276 85030 84420 56 58 +f1v14s21 f3v9s34 0.549296 85030 40677 56 65 +f1v14s21 f4v0s40 0.500000 85030 75843 56 60 +f1v14s21 f1v7s14 0.948276 85030 42277 56 58 +f1v14s21 f3v2s27 0.542857 85030 74030 56 65 +f1v14s21 f4v1s41 0.507463 85030 45686 56 61 +f1v14s21 f2v0s22 0.493671 85030 43219 56 69 +f1v14s21 f1v2s9 0.493506 85030 99108 56 69 +f1v14s21 f1v3s10 0.948276 85030 43230 56 58 +f1v14s21 f3v0s25 0.535211 85030 62755 56 66 +f1v14s21 f3v3s28 0.527778 85030 66465 56 66 +f1v14s21 f3v13s38 0.520548 85030 26948 56 68 +f1v14s21 f3v7s32 0.549296 85030 53710 56 65 +f1v14s21 f3v1s26 0.550725 85030 41283 56 65 +f1v14s21 f3v6s31 0.549296 85030 94783 56 65 +f1v14s21 f1v13s20 0.913793 85030 80913 56 56 +f1v14s21 f2v2s24 0.523077 85030 68414 56 49 +f1v14s21 f3v11s36 0.513514 85030 91927 56 65 +f1v14s21 f0v5s5 0.500000 85030 2668 56 69 +f1v14s21 f1v11s18 0.931034 85030 51814 56 58 +f1v14s21 f0v6s6 0.506667 85030 16273 56 69 +f1v14s21 f3v4s29 0.534247 85030 94356 56 68 +f1v14s21 f0v2s2 0.493671 85030 10896 56 69 +f1v14s21 f3v12s37 0.534247 85030 74202 56 67 +f1v14s21 f0v3s3 0.513158 85030 73040 56 67 +f1v14s21 f3v14s39 0.535211 85030 55015 56 66 +f1v14s21 f0v0s0 0.500000 85030 1332 56 69 +f1v14s21 f1v12s19 0.913793 85030 58178 56 57 +f0v1s1 f1v5s12 0.475610 43883 1410 69 60 +f0v1s1 f1v4s11 0.481013 43883 74527 69 58 +f0v1s1 f1v9s16 0.493671 43883 65777 69 60 +f0v1s1 f1v10s17 0.481481 43883 98659 69 60 +f0v1s1 f1v0s7 0.481013 43883 84420 69 58 +f0v1s1 f3v9s34 0.500000 43883 40677 69 65 +f0v1s1 f4v0s40 0.481013 43883 75843 69 60 +f0v1s1 f1v7s14 0.481013 43883 42277 69 58 +f0v1s1 f3v2s27 0.500000 43883 74030 69 65 +f0v1s1 f4v1s41 0.475000 43883 45686 69 61 +f0v1s1 f2v0s22 0.943662 43883 43219 69 69 +f0v1s1 f1v2s9 1.000000 43883 99108 69 69 +f0v1s1 f1v3s10 0.481013 43883 43230 69 58 +f0v1s1 f3v0s25 0.493827 43883 62755 69 66 +f0v1s1 f3v3s28 0.500000 43883 66465 69 66 +f0v1s1 f3v13s38 0.493827 43883 26948 69 68 +f0v1s1 f3v7s32 0.500000 43883 53710 69 65 +f0v1s1 f3v1s26 0.481481 43883 41283 69 65 +f0v1s1 f3v6s31 0.500000 43883 94783 69 65 +f0v1s1 f1v13s20 0.480519 43883 80913 69 56 +f0v1s1 f2v2s24 0.486111 43883 68414 69 49 +f0v1s1 f3v11s36 0.468354 43883 91927 69 65 +f0v1s1 f0v5s5 0.943662 43883 2668 69 69 +f0v1s1 f1v11s18 0.493506 43883 51814 69 58 +f0v1s1 f0v6s6 0.901408 43883 16273 69 69 +f0v1s1 f3v4s29 0.525000 43883 94356 69 68 +f0v1s1 f0v2s2 0.943662 43883 10896 69 69 +f0v1s1 f3v12s37 0.493827 43883 74202 69 67 +f0v1s1 f0v3s3 0.915493 43883 73040 69 67 +f0v1s1 f3v14s39 0.493827 43883 55015 69 66 +f0v1s1 f0v0s0 0.971429 43883 1332 69 69 +f0v1s1 f1v12s19 0.457831 43883 58178 69 57 +f1v5s12 f1v4s11 0.933333 1410 74527 60 58 +f1v5s12 f1v9s16 0.887097 1410 65777 60 60 +f1v5s12 f1v10s17 0.887097 1410 98659 60 60 +f1v5s12 f1v0s7 0.933333 1410 84420 60 58 +f1v5s12 f3v9s34 0.533333 1410 40677 60 65 +f1v5s12 f4v0s40 0.486111 1410 75843 60 60 +f1v5s12 f1v7s14 0.933333 1410 42277 60 58 +f1v5s12 f3v2s27 0.527027 1410 74030 60 65 +f1v5s12 f4v1s41 0.479452 1410 45686 60 61 +f1v5s12 f2v0s22 0.481928 1410 43219 60 69 +f1v5s12 f1v2s9 0.475610 1410 99108 60 69 +f1v5s12 f1v3s10 0.933333 1410 43230 60 58 +f1v5s12 f3v0s25 0.520000 1410 62755 60 66 +f1v5s12 f3v3s28 0.506667 1410 66465 60 66 +f1v5s12 f3v13s38 0.512821 1410 26948 60 68 +f1v5s12 f3v7s32 0.533333 1410 53710 60 65 +f1v5s12 f3v1s26 0.520548 1410 41283 60 65 +f1v5s12 f3v6s31 0.533333 1410 94783 60 65 +f1v5s12 f1v13s20 0.900000 1410 80913 60 56 +f1v5s12 f2v2s24 0.470588 1410 68414 60 49 +f1v5s12 f3v11s36 0.527027 1410 91927 60 65 +f1v5s12 f0v5s5 0.487500 1410 2668 60 69 +f1v5s12 f1v11s18 0.916667 1410 51814 60 58 +f1v5s12 f0v6s6 0.475610 1410 16273 60 69 +f1v5s12 f3v4s29 0.512821 1410 94356 60 68 +f1v5s12 f0v2s2 0.481928 1410 10896 60 69 +f1v5s12 f3v12s37 0.533333 1410 74202 60 67 +f1v5s12 f0v3s3 0.493671 1410 73040 60 67 +f1v5s12 f3v14s39 0.520000 1410 55015 60 66 +f1v5s12 f0v0s0 0.481928 1410 1332 60 69 +f1v5s12 f1v12s19 0.916667 1410 58178 60 57 +f1v4s11 f1v9s16 0.950000 74527 65777 58 60 +f1v4s11 f1v10s17 0.933333 74527 98659 58 60 +f1v4s11 f1v0s7 1.000000 74527 84420 58 58 +f1v4s11 f3v9s34 0.540541 74527 40677 58 65 +f1v4s11 f4v0s40 0.486111 74527 75843 58 60 +f1v4s11 f1v7s14 1.000000 74527 42277 58 58 +f1v4s11 f3v2s27 0.534247 74527 74030 58 65 +f1v4s11 f4v1s41 0.507246 74527 45686 58 61 +f1v4s11 f2v0s22 0.487500 74527 43219 58 69 +f1v4s11 f1v2s9 0.481013 74527 99108 58 69 +f1v4s11 f1v3s10 1.000000 74527 43230 58 58 +f1v4s11 f3v0s25 0.527027 74527 62755 58 66 +f1v4s11 f3v3s28 0.520000 74527 66465 58 66 +f1v4s11 f3v13s38 0.506329 74527 26948 58 68 +f1v4s11 f3v7s32 0.540541 74527 53710 58 65 +f1v4s11 f3v1s26 0.534247 74527 41283 58 65 +f1v4s11 f3v6s31 0.540541 74527 94783 58 65 +f1v4s11 f1v13s20 0.965517 74527 80913 58 56 +f1v4s11 f2v2s24 0.507463 74527 68414 58 49 +f1v4s11 f3v11s36 0.520000 74527 91927 58 65 +f1v4s11 f0v5s5 0.487500 74527 2668 58 69 +f1v4s11 f1v11s18 0.982759 74527 51814 58 58 +f1v4s11 f0v6s6 0.475000 74527 16273 58 69 +f1v4s11 f3v4s29 0.526316 74527 94356 58 68 +f1v4s11 f0v2s2 0.487500 74527 10896 58 69 +f1v4s11 f3v12s37 0.533333 74527 74202 58 67 +f1v4s11 f0v3s3 0.500000 74527 73040 58 67 +f1v4s11 f3v14s39 0.527027 74527 55015 58 66 +f1v4s11 f0v0s0 0.487500 74527 1332 58 69 +f1v4s11 f1v12s19 0.965517 74527 58178 58 57 +f1v9s16 f1v10s17 0.887097 65777 98659 60 60 +f1v9s16 f1v0s7 0.950000 65777 84420 60 58 +f1v9s16 f3v9s34 0.527027 65777 40677 60 65 +f1v9s16 f4v0s40 0.493151 65777 75843 60 60 +f1v9s16 f1v7s14 0.950000 65777 42277 60 58 +f1v9s16 f3v2s27 0.513158 65777 74030 60 65 +f1v9s16 f4v1s41 0.514286 65777 45686 60 61 +f1v9s16 f2v0s22 0.493827 65777 43219 60 69 +f1v9s16 f1v2s9 0.493671 65777 99108 60 69 +f1v9s16 f1v3s10 0.950000 65777 43230 60 58 +f1v9s16 f3v0s25 0.506494 65777 62755 60 66 +f1v9s16 f3v3s28 0.500000 65777 66465 60 66 +f1v9s16 f3v13s38 0.506329 65777 26948 60 68 +f1v9s16 f3v7s32 0.527027 65777 53710 60 65 +f1v9s16 f3v1s26 0.520548 65777 41283 60 65 +f1v9s16 f3v6s31 0.527027 65777 94783 60 65 +f1v9s16 f1v13s20 0.916667 65777 80913 60 56 +f1v9s16 f2v2s24 0.500000 65777 68414 60 49 +f1v9s16 f3v11s36 0.500000 65777 91927 60 65 +f1v9s16 f0v5s5 0.500000 65777 2668 60 69 +f1v9s16 f1v11s18 0.933333 65777 51814 60 58 +f1v9s16 f0v6s6 0.481481 65777 16273 60 69 +f1v9s16 f3v4s29 0.512821 65777 94356 60 68 +f1v9s16 f0v2s2 0.493827 65777 10896 60 69 +f1v9s16 f3v12s37 0.506329 65777 74202 60 67 +f1v9s16 f0v3s3 0.518987 65777 73040 60 67 +f1v9s16 f3v14s39 0.506494 65777 55015 60 66 +f1v9s16 f0v0s0 0.500000 65777 1332 60 69 +f1v9s16 f1v12s19 0.916667 65777 58178 60 57 +f1v10s17 f1v0s7 0.933333 98659 84420 60 58 +f1v10s17 f3v9s34 0.561644 98659 40677 60 65 +f1v10s17 f4v0s40 0.472973 98659 75843 60 60 +f1v10s17 f1v7s14 0.933333 98659 42277 60 58 +f1v10s17 f3v2s27 0.555556 98659 74030 60 65 +f1v10s17 f4v1s41 0.473684 98659 45686 60 61 +f1v10s17 f2v0s22 0.475610 98659 43219 60 69 +f1v10s17 f1v2s9 0.481481 98659 99108 60 69 +f1v10s17 f1v3s10 0.933333 98659 43230 60 58 +f1v10s17 f3v0s25 0.547945 98659 62755 60 66 +f1v10s17 f3v3s28 0.519481 98659 66465 60 66 +f1v10s17 f3v13s38 0.518987 98659 26948 60 68 +f1v10s17 f3v7s32 0.561644 98659 53710 60 65 +f1v10s17 f3v1s26 0.541667 98659 41283 60 65 +f1v10s17 f3v6s31 0.561644 98659 94783 60 65 +f1v10s17 f1v13s20 0.900000 98659 80913 60 56 +f1v10s17 f2v2s24 0.492537 98659 68414 60 49 +f1v10s17 f3v11s36 0.539474 98659 91927 60 65 +f1v10s17 f0v5s5 0.481481 98659 2668 60 69 +f1v10s17 f1v11s18 0.916667 98659 51814 60 58 +f1v10s17 f0v6s6 0.464286 98659 16273 60 69 +f1v10s17 f3v4s29 0.533333 98659 94356 60 68 +f1v10s17 f0v2s2 0.475610 98659 10896 60 69 +f1v10s17 f3v12s37 0.561644 98659 74202 60 67 +f1v10s17 f0v3s3 0.500000 98659 73040 60 67 +f1v10s17 f3v14s39 0.547945 98659 55015 60 66 +f1v10s17 f0v0s0 0.487805 98659 1332 60 69 +f1v10s17 f1v12s19 0.916667 98659 58178 60 57 +f1v0s7 f3v9s34 0.540541 84420 40677 58 65 +f1v0s7 f4v0s40 0.486111 84420 75843 58 60 +f1v0s7 f1v7s14 1.000000 84420 42277 58 58 +f1v0s7 f3v2s27 0.534247 84420 74030 58 65 +f1v0s7 f4v1s41 0.507246 84420 45686 58 61 +f1v0s7 f2v0s22 0.487500 84420 43219 58 69 +f1v0s7 f1v2s9 0.481013 84420 99108 58 69 +f1v0s7 f1v3s10 1.000000 84420 43230 58 58 +f1v0s7 f3v0s25 0.527027 84420 62755 58 66 +f1v0s7 f3v3s28 0.520000 84420 66465 58 66 +f1v0s7 f3v13s38 0.506329 84420 26948 58 68 +f1v0s7 f3v7s32 0.540541 84420 53710 58 65 +f1v0s7 f3v1s26 0.534247 84420 41283 58 65 +f1v0s7 f3v6s31 0.540541 84420 94783 58 65 +f1v0s7 f1v13s20 0.965517 84420 80913 58 56 +f1v0s7 f2v2s24 0.507463 84420 68414 58 49 +f1v0s7 f3v11s36 0.520000 84420 91927 58 65 +f1v0s7 f0v5s5 0.487500 84420 2668 58 69 +f1v0s7 f1v11s18 0.982759 84420 51814 58 58 +f1v0s7 f0v6s6 0.475000 84420 16273 58 69 +f1v0s7 f3v4s29 0.526316 84420 94356 58 68 +f1v0s7 f0v2s2 0.487500 84420 10896 58 69 +f1v0s7 f3v12s37 0.533333 84420 74202 58 67 +f1v0s7 f0v3s3 0.500000 84420 73040 58 67 +f1v0s7 f3v14s39 0.527027 84420 55015 58 66 +f1v0s7 f0v0s0 0.487500 84420 1332 58 69 +f1v0s7 f1v12s19 0.965517 84420 58178 58 57 +f3v9s34 f4v0s40 0.472973 40677 75843 65 60 +f3v9s34 f1v7s14 0.540541 40677 42277 65 58 +f3v9s34 f3v2s27 0.954545 40677 74030 65 65 +f3v9s34 f4v1s41 0.479452 40677 45686 65 61 +f3v9s34 f2v0s22 0.512821 40677 43219 65 69 +f3v9s34 f1v2s9 0.500000 40677 99108 65 69 +f3v9s34 f1v3s10 0.540541 40677 43230 65 58 +f3v9s34 f3v0s25 0.969697 40677 62755 65 66 +f3v9s34 f3v3s28 0.940299 40677 66465 65 66 +f3v9s34 f3v13s38 0.941176 40677 26948 65 68 +f3v9s34 f3v7s32 1.000000 40677 53710 65 65 +f3v9s34 f3v1s26 0.939394 40677 41283 65 65 +f3v9s34 f3v6s31 1.000000 40677 94783 65 65 +f3v9s34 f1v13s20 0.534247 40677 80913 65 56 +f3v9s34 f2v2s24 0.507463 40677 68414 65 49 +f3v9s34 f3v11s36 0.910448 40677 91927 65 65 +f3v9s34 f0v5s5 0.512821 40677 2668 65 69 +f3v9s34 f1v11s18 0.540541 40677 51814 65 58 +f3v9s34 f0v6s6 0.487500 40677 16273 65 69 +f3v9s34 f3v4s29 0.926471 40677 94356 65 68 +f3v9s34 f0v2s2 0.512821 40677 10896 65 69 +f3v9s34 f3v12s37 0.940299 40677 74202 65 67 +f3v9s34 f0v3s3 0.512500 40677 73040 65 67 +f3v9s34 f3v14s39 0.969697 40677 55015 65 66 +f3v9s34 f0v0s0 0.518987 40677 1332 65 69 +f3v9s34 f1v12s19 0.534247 40677 58178 65 57 +f4v0s40 f1v7s14 0.486111 75843 42277 60 58 +f4v0s40 f3v2s27 0.493151 75843 74030 60 65 +f4v0s40 f4v1s41 0.983607 75843 45686 60 61 +f4v0s40 f2v0s22 0.520000 75843 43219 60 69 +f4v0s40 f1v2s9 0.481013 75843 99108 60 69 +f4v0s40 f1v3s10 0.486111 75843 43230 60 58 +f4v0s40 f3v0s25 0.486486 75843 62755 60 66 +f4v0s40 f3v3s28 0.486486 75843 66465 60 66 +f4v0s40 f3v13s38 0.474359 75843 26948 60 68 +f4v0s40 f3v7s32 0.472973 75843 53710 60 65 +f4v0s40 f3v1s26 0.493151 75843 41283 60 65 +f4v0s40 f3v6s31 0.472973 75843 94783 60 65 +f4v0s40 f1v13s20 0.492754 75843 80913 60 56 +f4v0s40 f2v2s24 0.515152 75843 68414 60 49 +f4v0s40 f3v11s36 0.493151 75843 91927 60 65 +f4v0s40 f0v5s5 0.506667 75843 2668 60 69 +f4v0s40 f1v11s18 0.472973 75843 51814 60 58 +f4v0s40 f0v6s6 0.520000 75843 16273 60 69 +f4v0s40 f3v4s29 0.475000 75843 94356 60 68 +f4v0s40 f0v2s2 0.520000 75843 10896 60 69 +f4v0s40 f3v12s37 0.486842 75843 74202 60 67 +f4v0s40 f0v3s3 0.506849 75843 73040 60 67 +f4v0s40 f3v14s39 0.486486 75843 55015 60 66 +f4v0s40 f0v0s0 0.513514 75843 1332 60 69 +f4v0s40 f1v12s19 0.492537 75843 58178 60 57 +f1v7s14 f3v2s27 0.534247 42277 74030 58 65 +f1v7s14 f4v1s41 0.507246 42277 45686 58 61 +f1v7s14 f2v0s22 0.487500 42277 43219 58 69 +f1v7s14 f1v2s9 0.481013 42277 99108 58 69 +f1v7s14 f1v3s10 1.000000 42277 43230 58 58 +f1v7s14 f3v0s25 0.527027 42277 62755 58 66 +f1v7s14 f3v3s28 0.520000 42277 66465 58 66 +f1v7s14 f3v13s38 0.506329 42277 26948 58 68 +f1v7s14 f3v7s32 0.540541 42277 53710 58 65 +f1v7s14 f3v1s26 0.534247 42277 41283 58 65 +f1v7s14 f3v6s31 0.540541 42277 94783 58 65 +f1v7s14 f1v13s20 0.965517 42277 80913 58 56 +f1v7s14 f2v2s24 0.507463 42277 68414 58 49 +f1v7s14 f3v11s36 0.520000 42277 91927 58 65 +f1v7s14 f0v5s5 0.487500 42277 2668 58 69 +f1v7s14 f1v11s18 0.982759 42277 51814 58 58 +f1v7s14 f0v6s6 0.475000 42277 16273 58 69 +f1v7s14 f3v4s29 0.526316 42277 94356 58 68 +f1v7s14 f0v2s2 0.487500 42277 10896 58 69 +f1v7s14 f3v12s37 0.533333 42277 74202 58 67 +f1v7s14 f0v3s3 0.500000 42277 73040 58 67 +f1v7s14 f3v14s39 0.527027 42277 55015 58 66 +f1v7s14 f0v0s0 0.487500 42277 1332 58 69 +f1v7s14 f1v12s19 0.965517 42277 58178 58 57 +f3v2s27 f4v1s41 0.486486 74030 45686 65 61 +f3v2s27 f2v0s22 0.525641 74030 43219 65 69 +f3v2s27 f1v2s9 0.500000 74030 99108 65 69 +f3v2s27 f1v3s10 0.534247 74030 43230 65 58 +f3v2s27 f3v0s25 0.984848 74030 62755 65 66 +f3v2s27 f3v3s28 0.955224 74030 66465 65 66 +f3v2s27 f3v13s38 0.955882 74030 26948 65 68 +f3v2s27 f3v7s32 0.954545 74030 53710 65 65 +f3v2s27 f3v1s26 0.969231 74030 41283 65 65 +f3v2s27 f3v6s31 0.954545 74030 94783 65 65 +f3v2s27 f1v13s20 0.527778 74030 80913 65 56 +f3v2s27 f2v2s24 0.507246 74030 68414 65 49 +f3v2s27 f3v11s36 0.925373 74030 91927 65 65 +f3v2s27 f0v5s5 0.512821 74030 2668 65 69 +f3v2s27 f1v11s18 0.534247 74030 51814 65 58 +f3v2s27 f0v6s6 0.487805 74030 16273 65 69 +f3v2s27 f3v4s29 0.941176 74030 94356 65 68 +f3v2s27 f0v2s2 0.525641 74030 10896 65 69 +f3v2s27 f3v12s37 0.955224 74030 74202 65 67 +f3v2s27 f0v3s3 0.512500 74030 73040 65 67 +f3v2s27 f3v14s39 0.984848 74030 55015 65 66 +f3v2s27 f0v0s0 0.518987 74030 1332 65 69 +f3v2s27 f1v12s19 0.527778 74030 58178 65 57 +f4v1s41 f2v0s22 0.513158 45686 43219 61 69 +f4v1s41 f1v2s9 0.475000 45686 99108 61 69 +f4v1s41 f1v3s10 0.507246 45686 43230 61 58 +f4v1s41 f3v0s25 0.480000 45686 62755 61 66 +f4v1s41 f3v3s28 0.480000 45686 66465 61 66 +f4v1s41 f3v13s38 0.468354 45686 26948 61 68 +f4v1s41 f3v7s32 0.479452 45686 53710 61 65 +f4v1s41 f3v1s26 0.486486 45686 41283 61 65 +f4v1s41 f3v6s31 0.479452 45686 94783 61 65 +f4v1s41 f1v13s20 0.507463 45686 80913 61 56 +f4v1s41 f2v2s24 0.507463 45686 68414 61 49 +f4v1s41 f3v11s36 0.493151 45686 91927 61 65 +f4v1s41 f0v5s5 0.500000 45686 2668 61 69 +f4v1s41 f1v11s18 0.492958 45686 51814 61 58 +f4v1s41 f0v6s6 0.513158 45686 16273 61 69 +f4v1s41 f3v4s29 0.469136 45686 94356 61 68 +f4v1s41 f0v2s2 0.513158 45686 10896 61 69 +f4v1s41 f3v12s37 0.480519 45686 74202 61 67 +f4v1s41 f0v3s3 0.500000 45686 73040 61 67 +f4v1s41 f3v14s39 0.480000 45686 55015 61 66 +f4v1s41 f0v0s0 0.506667 45686 1332 61 69 +f4v1s41 f1v12s19 0.492537 45686 58178 61 57 +f2v0s22 f1v2s9 0.943662 43219 99108 69 69 +f2v0s22 f1v3s10 0.487500 43219 43230 69 58 +f2v0s22 f3v0s25 0.518987 43219 62755 69 66 +f2v0s22 f3v3s28 0.525641 43219 66465 69 66 +f2v0s22 f3v13s38 0.512500 43219 26948 69 68 +f2v0s22 f3v7s32 0.512821 43219 53710 69 65 +f2v0s22 f3v1s26 0.506329 43219 41283 69 65 +f2v0s22 f3v6s31 0.512821 43219 94783 69 65 +f2v0s22 f1v13s20 0.487179 43219 80913 69 56 +f2v0s22 f2v2s24 0.486111 43219 68414 69 49 +f2v0s22 f3v11s36 0.487179 43219 91927 69 65 +f2v0s22 f0v5s5 0.943662 43219 2668 69 69 +f2v0s22 f1v11s18 0.500000 43219 51814 69 58 +f2v0s22 f0v6s6 0.901408 43219 16273 69 69 +f2v0s22 f3v4s29 0.551282 43219 94356 69 68 +f2v0s22 f0v2s2 1.000000 43219 10896 69 69 +f2v0s22 f3v12s37 0.525000 43219 74202 69 67 +f2v0s22 f0v3s3 0.915493 43219 73040 69 67 +f2v0s22 f3v14s39 0.518987 43219 55015 69 66 +f2v0s22 f0v0s0 0.971429 43219 1332 69 69 +f2v0s22 f1v12s19 0.487500 43219 58178 69 57 +f1v2s9 f1v3s10 0.481013 99108 43230 69 58 +f1v2s9 f3v0s25 0.493827 99108 62755 69 66 +f1v2s9 f3v3s28 0.500000 99108 66465 69 66 +f1v2s9 f3v13s38 0.493827 99108 26948 69 68 +f1v2s9 f3v7s32 0.500000 99108 53710 69 65 +f1v2s9 f3v1s26 0.481481 99108 41283 69 65 +f1v2s9 f3v6s31 0.500000 99108 94783 69 65 +f1v2s9 f1v13s20 0.480519 99108 80913 69 56 +f1v2s9 f2v2s24 0.486111 99108 68414 69 49 +f1v2s9 f3v11s36 0.468354 99108 91927 69 65 +f1v2s9 f0v5s5 0.943662 99108 2668 69 69 +f1v2s9 f1v11s18 0.493506 99108 51814 69 58 +f1v2s9 f0v6s6 0.901408 99108 16273 69 69 +f1v2s9 f3v4s29 0.525000 99108 94356 69 68 +f1v2s9 f0v2s2 0.943662 99108 10896 69 69 +f1v2s9 f3v12s37 0.493827 99108 74202 69 67 +f1v2s9 f0v3s3 0.915493 99108 73040 69 67 +f1v2s9 f3v14s39 0.493827 99108 55015 69 66 +f1v2s9 f0v0s0 0.971429 99108 1332 69 69 +f1v2s9 f1v12s19 0.457831 99108 58178 69 57 +f1v3s10 f3v0s25 0.527027 43230 62755 58 66 +f1v3s10 f3v3s28 0.520000 43230 66465 58 66 +f1v3s10 f3v13s38 0.506329 43230 26948 58 68 +f1v3s10 f3v7s32 0.540541 43230 53710 58 65 +f1v3s10 f3v1s26 0.534247 43230 41283 58 65 +f1v3s10 f3v6s31 0.540541 43230 94783 58 65 +f1v3s10 f1v13s20 0.965517 43230 80913 58 56 +f1v3s10 f2v2s24 0.507463 43230 68414 58 49 +f1v3s10 f3v11s36 0.520000 43230 91927 58 65 +f1v3s10 f0v5s5 0.487500 43230 2668 58 69 +f1v3s10 f1v11s18 0.982759 43230 51814 58 58 +f1v3s10 f0v6s6 0.475000 43230 16273 58 69 +f1v3s10 f3v4s29 0.526316 43230 94356 58 68 +f1v3s10 f0v2s2 0.487500 43230 10896 58 69 +f1v3s10 f3v12s37 0.533333 43230 74202 58 67 +f1v3s10 f0v3s3 0.500000 43230 73040 58 67 +f1v3s10 f3v14s39 0.527027 43230 55015 58 66 +f1v3s10 f0v0s0 0.487500 43230 1332 58 69 +f1v3s10 f1v12s19 0.965517 43230 58178 58 57 +f3v0s25 f3v3s28 0.970149 62755 66465 66 66 +f3v0s25 f3v13s38 0.970588 62755 26948 66 68 +f3v0s25 f3v7s32 0.969697 62755 53710 66 65 +f3v0s25 f3v1s26 0.969697 62755 41283 66 65 +f3v0s25 f3v6s31 0.969697 62755 94783 66 65 +f3v0s25 f1v13s20 0.520548 62755 80913 66 56 +f3v0s25 f2v2s24 0.514706 62755 68414 66 49 +f3v0s25 f3v11s36 0.940299 62755 91927 66 65 +f3v0s25 f0v5s5 0.506329 62755 2668 66 69 +f3v0s25 f1v11s18 0.527027 62755 51814 66 58 +f3v0s25 f0v6s6 0.481928 62755 16273 66 69 +f3v0s25 f3v4s29 0.955882 62755 94356 66 68 +f3v0s25 f0v2s2 0.518987 62755 10896 66 69 +f3v0s25 f3v12s37 0.970149 62755 74202 66 67 +f3v0s25 f0v3s3 0.506173 62755 73040 66 67 +f3v0s25 f3v14s39 1.000000 62755 55015 66 66 +f3v0s25 f0v0s0 0.512500 62755 1332 66 69 +f3v0s25 f1v12s19 0.520548 62755 58178 66 57 +f3v3s28 f3v13s38 0.955882 66465 26948 66 68 +f3v3s28 f3v7s32 0.940299 66465 53710 66 65 +f3v3s28 f3v1s26 0.940299 66465 41283 66 65 +f3v3s28 f3v6s31 0.940299 66465 94783 66 65 +f3v3s28 f1v13s20 0.513514 66465 80913 66 56 +f3v3s28 f2v2s24 0.521739 66465 68414 66 49 +f3v3s28 f3v11s36 0.911765 66465 91927 66 65 +f3v3s28 f0v5s5 0.506329 66465 2668 66 69 +f3v3s28 f1v11s18 0.506494 66465 51814 66 58 +f3v3s28 f0v6s6 0.487805 66465 16273 66 69 +f3v3s28 f3v4s29 0.941176 66465 94356 66 68 +f3v3s28 f0v2s2 0.525641 66465 10896 66 69 +f3v3s28 f3v12s37 0.941176 66465 74202 66 67 +f3v3s28 f0v3s3 0.512500 66465 73040 66 67 +f3v3s28 f3v14s39 0.970149 66465 55015 66 66 +f3v3s28 f0v0s0 0.518987 66465 1332 66 69 +f3v3s28 f1v12s19 0.500000 66465 58178 66 57 +f3v13s38 f3v7s32 0.941176 26948 53710 68 65 +f3v13s38 f3v1s26 0.941176 26948 41283 68 65 +f3v13s38 f3v6s31 0.941176 26948 94783 68 65 +f3v13s38 f1v13s20 0.500000 26948 80913 68 56 +f3v13s38 f2v2s24 0.514286 26948 68414 68 49 +f3v13s38 f3v11s36 0.913043 26948 91927 68 65 +f3v13s38 f0v5s5 0.506329 26948 2668 68 69 +f3v13s38 f1v11s18 0.506329 26948 51814 68 58 +f3v13s38 f0v6s6 0.481928 26948 16273 68 69 +f3v13s38 f3v4s29 0.942029 26948 94356 68 68 +f3v13s38 f0v2s2 0.512500 26948 10896 68 69 +f3v13s38 f3v12s37 0.942029 26948 74202 68 67 +f3v13s38 f0v3s3 0.506173 26948 73040 68 67 +f3v13s38 f3v14s39 0.970588 26948 55015 68 66 +f3v13s38 f0v0s0 0.512500 26948 1332 68 69 +f3v13s38 f1v12s19 0.527027 26948 58178 68 57 +f3v7s32 f3v1s26 0.939394 53710 41283 65 65 +f3v7s32 f3v6s31 1.000000 53710 94783 65 65 +f3v7s32 f1v13s20 0.534247 53710 80913 65 56 +f3v7s32 f2v2s24 0.507463 53710 68414 65 49 +f3v7s32 f3v11s36 0.910448 53710 91927 65 65 +f3v7s32 f0v5s5 0.512821 53710 2668 65 69 +f3v7s32 f1v11s18 0.540541 53710 51814 65 58 +f3v7s32 f0v6s6 0.487500 53710 16273 65 69 +f3v7s32 f3v4s29 0.926471 53710 94356 65 68 +f3v7s32 f0v2s2 0.512821 53710 10896 65 69 +f3v7s32 f3v12s37 0.940299 53710 74202 65 67 +f3v7s32 f0v3s3 0.512500 53710 73040 65 67 +f3v7s32 f3v14s39 0.969697 53710 55015 65 66 +f3v7s32 f0v0s0 0.518987 53710 1332 65 69 +f3v7s32 f1v12s19 0.534247 53710 58178 65 57 +f3v1s26 f3v6s31 0.939394 41283 94783 65 65 +f3v1s26 f1v13s20 0.527778 41283 80913 65 56 +f3v1s26 f2v2s24 0.514706 41283 68414 65 49 +f3v1s26 f3v11s36 0.910448 41283 91927 65 65 +f3v1s26 f0v5s5 0.493671 41283 2668 65 69 +f3v1s26 f1v11s18 0.513158 41283 51814 65 58 +f3v1s26 f0v6s6 0.469880 41283 16273 65 69 +f3v1s26 f3v4s29 0.926471 41283 94356 65 68 +f3v1s26 f0v2s2 0.506329 41283 10896 65 69 +f3v1s26 f3v12s37 0.940299 41283 74202 65 67 +f3v1s26 f0v3s3 0.506329 41283 73040 65 67 +f3v1s26 f3v14s39 0.969697 41283 55015 65 66 +f3v1s26 f0v0s0 0.500000 41283 1332 65 69 +f3v1s26 f1v12s19 0.527778 41283 58178 65 57 +f3v6s31 f1v13s20 0.534247 94783 80913 65 56 +f3v6s31 f2v2s24 0.507463 94783 68414 65 49 +f3v6s31 f3v11s36 0.910448 94783 91927 65 65 +f3v6s31 f0v5s5 0.512821 94783 2668 65 69 +f3v6s31 f1v11s18 0.540541 94783 51814 65 58 +f3v6s31 f0v6s6 0.487500 94783 16273 65 69 +f3v6s31 f3v4s29 0.926471 94783 94356 65 68 +f3v6s31 f0v2s2 0.512821 94783 10896 65 69 +f3v6s31 f3v12s37 0.940299 94783 74202 65 67 +f3v6s31 f0v3s3 0.512500 94783 73040 65 67 +f3v6s31 f3v14s39 0.969697 94783 55015 65 66 +f3v6s31 f0v0s0 0.518987 94783 1332 65 69 +f3v6s31 f1v12s19 0.534247 94783 58178 65 57 +f1v13s20 f2v2s24 0.523077 80913 68414 56 49 +f1v13s20 f3v11s36 0.513514 80913 91927 56 65 +f1v13s20 f0v5s5 0.500000 80913 2668 56 69 +f1v13s20 f1v11s18 0.948276 80913 51814 56 58 +f1v13s20 f0v6s6 0.474359 80913 16273 56 69 +f1v13s20 f3v4s29 0.520000 80913 94356 56 68 +f1v13s20 f0v2s2 0.487179 80913 10896 56 69 +f1v13s20 f3v12s37 0.527027 80913 74202 56 67 +f1v13s20 f0v3s3 0.500000 80913 73040 56 67 +f1v13s20 f3v14s39 0.520548 80913 55015 56 66 +f1v13s20 f0v0s0 0.487179 80913 1332 56 69 +f1v13s20 f1v12s19 0.931034 80913 58178 56 57 +f2v2s24 f3v11s36 0.507463 68414 91927 49 65 +f2v2s24 f0v5s5 0.460526 68414 2668 49 69 +f2v2s24 f1v11s18 0.507463 68414 51814 49 58 +f2v2s24 f0v6s6 0.479452 68414 16273 49 69 +f2v2s24 f3v4s29 0.514286 68414 94356 49 68 +f2v2s24 f0v2s2 0.486111 68414 10896 49 69 +f2v2s24 f3v12s37 0.521739 68414 74202 49 67 +f2v2s24 f0v3s3 0.492754 68414 73040 49 67 +f2v2s24 f3v14s39 0.514706 68414 55015 49 66 +f2v2s24 f0v0s0 0.486111 68414 1332 49 69 +f2v2s24 f1v12s19 0.500000 68414 58178 49 57 +f3v11s36 f0v5s5 0.469136 91927 2668 65 69 +f3v11s36 f1v11s18 0.520000 91927 51814 65 58 +f3v11s36 f0v6s6 0.463415 91927 16273 65 69 +f3v11s36 f3v4s29 0.898551 91927 94356 65 68 +f3v11s36 f0v2s2 0.487179 91927 10896 65 69 +f3v11s36 f3v12s37 0.911765 91927 74202 65 67 +f3v11s36 f0v3s3 0.481013 91927 73040 65 67 +f3v11s36 f3v14s39 0.940299 91927 55015 65 66 +f3v11s36 f0v0s0 0.487179 91927 1332 65 69 +f3v11s36 f1v12s19 0.513514 91927 58178 65 57 +f0v5s5 f1v11s18 0.500000 2668 51814 69 58 +f0v5s5 f0v6s6 0.901408 2668 16273 69 69 +f0v5s5 f3v4s29 0.538462 2668 94356 69 68 +f0v5s5 f0v2s2 0.943662 2668 10896 69 69 +f0v5s5 f3v12s37 0.500000 2668 74202 69 67 +f0v5s5 f0v3s3 0.915493 2668 73040 69 67 +f0v5s5 f3v14s39 0.506329 2668 55015 69 66 +f0v5s5 f0v0s0 0.971429 2668 1332 69 69 +f0v5s5 f1v12s19 0.475000 2668 58178 69 57 +f1v11s18 f0v6s6 0.493506 51814 16273 58 69 +f1v11s18 f3v4s29 0.526316 51814 94356 58 68 +f1v11s18 f0v2s2 0.500000 51814 10896 58 69 +f1v11s18 f3v12s37 0.533333 51814 74202 58 67 +f1v11s18 f0v3s3 0.513158 51814 73040 58 67 +f1v11s18 f3v14s39 0.527027 51814 55015 58 66 +f1v11s18 f0v0s0 0.500000 51814 1332 58 69 +f1v11s18 f1v12s19 0.948276 51814 58178 58 57 +f0v6s6 f3v4s29 0.512195 16273 94356 69 68 +f0v6s6 f0v2s2 0.901408 16273 10896 69 69 +f0v6s6 f3v12s37 0.476190 16273 74202 69 67 +f0v6s6 f0v3s3 0.873239 16273 73040 69 67 +f0v6s6 f3v14s39 0.481928 16273 55015 69 66 +f0v6s6 f0v0s0 0.928571 16273 1332 69 69 +f0v6s6 f1v12s19 0.457831 16273 58178 69 57 +f3v4s29 f0v2s2 0.551282 94356 10896 68 69 +f3v4s29 f3v12s37 0.927536 94356 74202 68 67 +f3v4s29 f0v3s3 0.530864 94356 73040 68 67 +f3v4s29 f3v14s39 0.955882 94356 55015 68 66 +f3v4s29 f0v0s0 0.544304 94356 1332 68 69 +f3v4s29 f1v12s19 0.520000 94356 58178 68 57 +f0v2s2 f3v12s37 0.525000 10896 74202 69 67 +f0v2s2 f0v3s3 0.915493 10896 73040 69 67 +f0v2s2 f3v14s39 0.518987 10896 55015 69 66 +f0v2s2 f0v0s0 0.971429 10896 1332 69 69 +f0v2s2 f1v12s19 0.487500 10896 58178 69 57 +f3v12s37 f0v3s3 0.500000 74202 73040 67 67 +f3v12s37 f3v14s39 0.970149 74202 55015 67 66 +f3v12s37 f0v0s0 0.512500 74202 1332 67 69 +f3v12s37 f1v12s19 0.527027 74202 58178 67 57 +f0v3s3 f3v14s39 0.506173 73040 55015 67 66 +f0v3s3 f0v0s0 0.942857 73040 1332 67 69 +f0v3s3 f1v12s19 0.487179 73040 58178 67 57 +f3v14s39 f0v0s0 0.512500 55015 1332 66 69 +f3v14s39 f1v12s19 0.520548 55015 58178 66 57 +f0v0s0 f1v12s19 0.464286 1332 58178 69 57 diff --git a/pkg/obitools/obialign/testdata/one_alldist.expected b/pkg/obitools/obialign/testdata/one_alldist.expected new file mode 100644 index 0000000..5a38a2b --- /dev/null +++ b/pkg/obitools/obialign/testdata/one_alldist.expected @@ -0,0 +1,903 @@ +f3v10s35 f3v5s30 9.000000 +f3v10s35 f1v8s15 34.000000 +f3v10s35 f2v1s23 38.000000 +f3v10s35 f4v2s42 37.000000 +f3v10s35 f0v4s4 40.000000 +f3v10s35 f1v6s13 33.000000 +f3v10s35 f3v8s33 6.000000 +f3v10s35 f1v1s8 35.000000 +f3v10s35 f1v14s21 37.000000 +f3v10s35 f0v1s1 40.000000 +f3v10s35 f1v5s12 37.000000 +f3v10s35 f1v4s11 38.000000 +f3v10s35 f1v9s16 38.000000 +f3v10s35 f1v10s17 36.000000 +f3v10s35 f1v0s7 38.000000 +f3v10s35 f3v9s34 6.000000 +f3v10s35 f4v0s40 38.000000 +f3v10s35 f1v7s14 38.000000 +f3v10s35 f3v2s27 6.000000 +f3v10s35 f4v1s41 39.000000 +f3v10s35 f2v0s22 39.000000 +f3v10s35 f1v2s9 40.000000 +f3v10s35 f1v3s10 38.000000 +f3v10s35 f3v0s25 5.000000 +f3v10s35 f3v3s28 7.000000 +f3v10s35 f3v13s38 7.000000 +f3v10s35 f3v7s32 6.000000 +f3v10s35 f3v1s26 6.000000 +f3v10s35 f3v6s31 6.000000 +f3v10s35 f1v13s20 38.000000 +f3v10s35 f2v2s24 35.000000 +f3v10s35 f3v11s36 9.000000 +f3v10s35 f0v5s5 39.000000 +f3v10s35 f1v11s18 38.000000 +f3v10s35 f0v6s6 42.000000 +f3v10s35 f3v4s29 8.000000 +f3v10s35 f0v2s2 39.000000 +f3v10s35 f3v12s37 7.000000 +f3v10s35 f0v3s3 40.000000 +f3v10s35 f3v14s39 5.000000 +f3v10s35 f0v0s0 39.000000 +f3v10s35 f1v12s19 35.000000 +f3v5s30 f1v8s15 35.000000 +f3v5s30 f2v1s23 36.000000 +f3v5s30 f4v2s42 35.000000 +f3v5s30 f0v4s4 40.000000 +f3v5s30 f1v6s13 36.000000 +f3v5s30 f3v8s33 5.000000 +f3v5s30 f1v1s8 37.000000 +f3v5s30 f1v14s21 34.000000 +f3v5s30 f0v1s1 40.000000 +f3v5s30 f1v5s12 38.000000 +f3v5s30 f1v4s11 36.000000 +f3v5s30 f1v9s16 37.000000 +f3v5s30 f1v10s17 38.000000 +f3v5s30 f1v0s7 36.000000 +f3v5s30 f3v9s34 6.000000 +f3v5s30 f4v0s40 34.000000 +f3v5s30 f1v7s14 36.000000 +f3v5s30 f3v2s27 5.000000 +f3v5s30 f4v1s41 35.000000 +f3v5s30 f2v0s22 39.000000 +f3v5s30 f1v2s9 40.000000 +f3v5s30 f1v3s10 36.000000 +f3v5s30 f3v0s25 4.000000 +f3v5s30 f3v3s28 6.000000 +f3v5s30 f3v13s38 6.000000 +f3v5s30 f3v7s32 6.000000 +f3v5s30 f3v1s26 6.000000 +f3v5s30 f3v6s31 6.000000 +f3v5s30 f1v13s20 36.000000 +f3v5s30 f2v2s24 32.000000 +f3v5s30 f3v11s36 7.000000 +f3v5s30 f0v5s5 39.000000 +f3v5s30 f1v11s18 36.000000 +f3v5s30 f0v6s6 40.000000 +f3v5s30 f3v4s29 7.000000 +f3v5s30 f0v2s2 39.000000 +f3v5s30 f3v12s37 6.000000 +f3v5s30 f0v3s3 39.000000 +f3v5s30 f3v14s39 4.000000 +f3v5s30 f0v0s0 39.000000 +f3v5s30 f1v12s19 36.000000 +f1v8s15 f2v1s23 1.000000 +f1v8s15 f4v2s42 37.000000 +f1v8s15 f0v4s4 40.000000 +f1v8s15 f1v6s13 3.000000 +f1v8s15 f3v8s33 33.000000 +f1v8s15 f1v1s8 5.000000 +f1v8s15 f1v14s21 4.000000 +f1v8s15 f0v1s1 40.000000 +f1v8s15 f1v5s12 5.000000 +f1v8s15 f1v4s11 1.000000 +f1v8s15 f1v9s16 4.000000 +f1v8s15 f1v10s17 5.000000 +f1v8s15 f1v0s7 1.000000 +f1v8s15 f3v9s34 33.000000 +f1v8s15 f4v0s40 37.000000 +f1v8s15 f1v7s14 1.000000 +f1v8s15 f3v2s27 33.000000 +f1v8s15 f4v1s41 38.000000 +f1v8s15 f2v0s22 40.000000 +f1v8s15 f1v2s9 40.000000 +f1v8s15 f1v3s10 1.000000 +f1v8s15 f3v0s25 34.000000 +f1v8s15 f3v3s28 35.000000 +f1v8s15 f3v13s38 39.000000 +f1v8s15 f3v7s32 33.000000 +f1v8s15 f3v1s26 33.000000 +f1v8s15 f3v6s31 33.000000 +f1v8s15 f1v13s20 3.000000 +f1v8s15 f2v2s24 32.000000 +f1v8s15 f3v11s36 35.000000 +f1v8s15 f0v5s5 40.000000 +f1v8s15 f1v11s18 2.000000 +f1v8s15 f0v6s6 41.000000 +f1v8s15 f3v4s29 35.000000 +f1v8s15 f0v2s2 40.000000 +f1v8s15 f3v12s37 34.000000 +f1v8s15 f0v3s3 38.000000 +f1v8s15 f3v14s39 34.000000 +f1v8s15 f0v0s0 40.000000 +f1v8s15 f1v12s19 3.000000 +f2v1s23 f4v2s42 35.000000 +f2v1s23 f0v4s4 41.000000 +f2v1s23 f1v6s13 4.000000 +f2v1s23 f3v8s33 34.000000 +f2v1s23 f1v1s8 4.000000 +f2v1s23 f1v14s21 3.000000 +f2v1s23 f0v1s1 41.000000 +f2v1s23 f1v5s12 4.000000 +f2v1s23 f1v4s11 0.000000 +f2v1s23 f1v9s16 3.000000 +f2v1s23 f1v10s17 4.000000 +f2v1s23 f1v0s7 0.000000 +f2v1s23 f3v9s34 34.000000 +f2v1s23 f4v0s40 37.000000 +f2v1s23 f1v7s14 0.000000 +f2v1s23 f3v2s27 34.000000 +f2v1s23 f4v1s41 34.000000 +f2v1s23 f2v0s22 41.000000 +f2v1s23 f1v2s9 41.000000 +f2v1s23 f1v3s10 0.000000 +f2v1s23 f3v0s25 35.000000 +f2v1s23 f3v3s28 36.000000 +f2v1s23 f3v13s38 39.000000 +f2v1s23 f3v7s32 34.000000 +f2v1s23 f3v1s26 34.000000 +f2v1s23 f3v6s31 34.000000 +f2v1s23 f1v13s20 2.000000 +f2v1s23 f2v2s24 33.000000 +f2v1s23 f3v11s36 36.000000 +f2v1s23 f0v5s5 41.000000 +f2v1s23 f1v11s18 1.000000 +f2v1s23 f0v6s6 42.000000 +f2v1s23 f3v4s29 36.000000 +f2v1s23 f0v2s2 41.000000 +f2v1s23 f3v12s37 35.000000 +f2v1s23 f0v3s3 39.000000 +f2v1s23 f3v14s39 35.000000 +f2v1s23 f0v0s0 41.000000 +f2v1s23 f1v12s19 2.000000 +f4v2s42 f0v4s4 36.000000 +f4v2s42 f1v6s13 36.000000 +f4v2s42 f3v8s33 37.000000 +f4v2s42 f1v1s8 39.000000 +f4v2s42 f1v14s21 33.000000 +f4v2s42 f0v1s1 36.000000 +f4v2s42 f1v5s12 36.000000 +f4v2s42 f1v4s11 35.000000 +f4v2s42 f1v9s16 37.000000 +f4v2s42 f1v10s17 40.000000 +f4v2s42 f1v0s7 35.000000 +f4v2s42 f3v9s34 39.000000 +f4v2s42 f4v0s40 2.000000 +f4v2s42 f1v7s14 35.000000 +f4v2s42 f3v2s27 37.000000 +f4v2s42 f4v1s41 3.000000 +f4v2s42 f2v0s22 34.000000 +f4v2s42 f1v2s9 36.000000 +f4v2s42 f1v3s10 35.000000 +f4v2s42 f3v0s25 38.000000 +f4v2s42 f3v3s28 38.000000 +f4v2s42 f3v13s38 41.000000 +f4v2s42 f3v7s32 39.000000 +f4v2s42 f3v1s26 37.000000 +f4v2s42 f3v6s31 39.000000 +f4v2s42 f1v13s20 34.000000 +f4v2s42 f2v2s24 31.000000 +f4v2s42 f3v11s36 37.000000 +f4v2s42 f0v5s5 36.000000 +f4v2s42 f1v11s18 37.000000 +f4v2s42 f0v6s6 35.000000 +f4v2s42 f3v4s29 41.000000 +f4v2s42 f0v2s2 34.000000 +f4v2s42 f3v12s37 39.000000 +f4v2s42 f0v3s3 35.000000 +f4v2s42 f3v14s39 38.000000 +f4v2s42 f0v0s0 35.000000 +f4v2s42 f1v12s19 34.000000 +f0v4s4 f1v6s13 38.000000 +f0v4s4 f3v8s33 40.000000 +f0v4s4 f1v1s8 41.000000 +f0v4s4 f1v14s21 39.000000 +f0v4s4 f0v1s1 0.000000 +f0v4s4 f1v5s12 43.000000 +f0v4s4 f1v4s11 41.000000 +f0v4s4 f1v9s16 40.000000 +f0v4s4 f1v10s17 42.000000 +f0v4s4 f1v0s7 41.000000 +f0v4s4 f3v9s34 40.000000 +f0v4s4 f4v0s40 41.000000 +f0v4s4 f1v7s14 41.000000 +f0v4s4 f3v2s27 40.000000 +f0v4s4 f4v1s41 42.000000 +f0v4s4 f2v0s22 4.000000 +f0v4s4 f1v2s9 0.000000 +f0v4s4 f1v3s10 41.000000 +f0v4s4 f3v0s25 41.000000 +f0v4s4 f3v3s28 40.000000 +f0v4s4 f3v13s38 41.000000 +f0v4s4 f3v7s32 40.000000 +f0v4s4 f3v1s26 42.000000 +f0v4s4 f3v6s31 40.000000 +f0v4s4 f1v13s20 40.000000 +f0v4s4 f2v2s24 37.000000 +f0v4s4 f3v11s36 42.000000 +f0v4s4 f0v5s5 4.000000 +f0v4s4 f1v11s18 39.000000 +f0v4s4 f0v6s6 7.000000 +f0v4s4 f3v4s29 38.000000 +f0v4s4 f0v2s2 4.000000 +f0v4s4 f3v12s37 41.000000 +f0v4s4 f0v3s3 6.000000 +f0v4s4 f3v14s39 41.000000 +f0v4s4 f0v0s0 2.000000 +f0v4s4 f1v12s19 45.000000 +f1v6s13 f3v8s33 33.000000 +f1v6s13 f1v1s8 8.000000 +f1v6s13 f1v14s21 7.000000 +f1v6s13 f0v1s1 38.000000 +f1v6s13 f1v5s12 8.000000 +f1v6s13 f1v4s11 4.000000 +f1v6s13 f1v9s16 7.000000 +f1v6s13 f1v10s17 7.000000 +f1v6s13 f1v0s7 4.000000 +f1v6s13 f3v9s34 33.000000 +f1v6s13 f4v0s40 38.000000 +f1v6s13 f1v7s14 4.000000 +f1v6s13 f3v2s27 32.000000 +f1v6s13 f4v1s41 39.000000 +f1v6s13 f2v0s22 39.000000 +f1v6s13 f1v2s9 38.000000 +f1v6s13 f1v3s10 4.000000 +f1v6s13 f3v0s25 33.000000 +f1v6s13 f3v3s28 34.000000 +f1v6s13 f3v13s38 35.000000 +f1v6s13 f3v7s32 33.000000 +f1v6s13 f3v1s26 32.000000 +f1v6s13 f3v6s31 33.000000 +f1v6s13 f1v13s20 6.000000 +f1v6s13 f2v2s24 32.000000 +f1v6s13 f3v11s36 34.000000 +f1v6s13 f0v5s5 38.000000 +f1v6s13 f1v11s18 5.000000 +f1v6s13 f0v6s6 39.000000 +f1v6s13 f3v4s29 34.000000 +f1v6s13 f0v2s2 39.000000 +f1v6s13 f3v12s37 33.000000 +f1v6s13 f0v3s3 36.000000 +f1v6s13 f3v14s39 33.000000 +f1v6s13 f0v0s0 38.000000 +f1v6s13 f1v12s19 6.000000 +f3v8s33 f1v1s8 33.000000 +f3v8s33 f1v14s21 33.000000 +f3v8s33 f0v1s1 40.000000 +f3v8s33 f1v5s12 35.000000 +f3v8s33 f1v4s11 34.000000 +f3v8s33 f1v9s16 38.000000 +f3v8s33 f1v10s17 32.000000 +f3v8s33 f1v0s7 34.000000 +f3v8s33 f3v9s34 3.000000 +f3v8s33 f4v0s40 42.000000 +f3v8s33 f1v7s14 34.000000 +f3v8s33 f3v2s27 2.000000 +f3v8s33 f4v1s41 43.000000 +f3v8s33 f2v0s22 38.000000 +f3v8s33 f1v2s9 40.000000 +f3v8s33 f1v3s10 34.000000 +f3v8s33 f3v0s25 1.000000 +f3v8s33 f3v3s28 3.000000 +f3v8s33 f3v13s38 3.000000 +f3v8s33 f3v7s32 3.000000 +f3v8s33 f3v1s26 3.000000 +f3v8s33 f3v6s31 3.000000 +f3v8s33 f1v13s20 34.000000 +f3v8s33 f2v2s24 34.000000 +f3v8s33 f3v11s36 5.000000 +f3v8s33 f0v5s5 39.000000 +f3v8s33 f1v11s18 34.000000 +f3v8s33 f0v6s6 43.000000 +f3v8s33 f3v4s29 4.000000 +f3v8s33 f0v2s2 38.000000 +f3v8s33 f3v12s37 3.000000 +f3v8s33 f0v3s3 38.000000 +f3v8s33 f3v14s39 1.000000 +f3v8s33 f0v0s0 38.000000 +f3v8s33 f1v12s19 34.000000 +f1v1s8 f1v14s21 5.000000 +f1v1s8 f0v1s1 41.000000 +f1v1s8 f1v5s12 8.000000 +f1v1s8 f1v4s11 4.000000 +f1v1s8 f1v9s16 7.000000 +f1v1s8 f1v10s17 8.000000 +f1v1s8 f1v0s7 4.000000 +f1v1s8 f3v9s34 32.000000 +f1v1s8 f4v0s40 37.000000 +f1v1s8 f1v7s14 4.000000 +f1v1s8 f3v2s27 32.000000 +f1v1s8 f4v1s41 38.000000 +f1v1s8 f2v0s22 42.000000 +f1v1s8 f1v2s9 41.000000 +f1v1s8 f1v3s10 4.000000 +f1v1s8 f3v0s25 33.000000 +f1v1s8 f3v3s28 34.000000 +f1v1s8 f3v13s38 34.000000 +f1v1s8 f3v7s32 32.000000 +f1v1s8 f3v1s26 31.000000 +f1v1s8 f3v6s31 32.000000 +f1v1s8 f1v13s20 6.000000 +f1v1s8 f2v2s24 36.000000 +f1v1s8 f3v11s36 34.000000 +f1v1s8 f0v5s5 42.000000 +f1v1s8 f1v11s18 5.000000 +f1v1s8 f0v6s6 39.000000 +f1v1s8 f3v4s29 33.000000 +f1v1s8 f0v2s2 42.000000 +f1v1s8 f3v12s37 34.000000 +f1v1s8 f0v3s3 40.000000 +f1v1s8 f3v14s39 33.000000 +f1v1s8 f0v0s0 41.000000 +f1v1s8 f1v12s19 5.000000 +f1v14s21 f0v1s1 39.000000 +f1v14s21 f1v5s12 7.000000 +f1v14s21 f1v4s11 3.000000 +f1v14s21 f1v9s16 6.000000 +f1v14s21 f1v10s17 7.000000 +f1v14s21 f1v0s7 3.000000 +f1v14s21 f3v9s34 32.000000 +f1v14s21 f4v0s40 33.000000 +f1v14s21 f1v7s14 3.000000 +f1v14s21 f3v2s27 32.000000 +f1v14s21 f4v1s41 33.000000 +f1v14s21 f2v0s22 40.000000 +f1v14s21 f1v2s9 39.000000 +f1v14s21 f1v3s10 3.000000 +f1v14s21 f3v0s25 33.000000 +f1v14s21 f3v3s28 34.000000 +f1v14s21 f3v13s38 35.000000 +f1v14s21 f3v7s32 32.000000 +f1v14s21 f3v1s26 31.000000 +f1v14s21 f3v6s31 32.000000 +f1v14s21 f1v13s20 5.000000 +f1v14s21 f2v2s24 31.000000 +f1v14s21 f3v11s36 36.000000 +f1v14s21 f0v5s5 39.000000 +f1v14s21 f1v11s18 4.000000 +f1v14s21 f0v6s6 37.000000 +f1v14s21 f3v4s29 34.000000 +f1v14s21 f0v2s2 40.000000 +f1v14s21 f3v12s37 34.000000 +f1v14s21 f0v3s3 37.000000 +f1v14s21 f3v14s39 33.000000 +f1v14s21 f0v0s0 39.000000 +f1v14s21 f1v12s19 5.000000 +f0v1s1 f1v5s12 43.000000 +f0v1s1 f1v4s11 41.000000 +f0v1s1 f1v9s16 40.000000 +f0v1s1 f1v10s17 42.000000 +f0v1s1 f1v0s7 41.000000 +f0v1s1 f3v9s34 40.000000 +f0v1s1 f4v0s40 41.000000 +f0v1s1 f1v7s14 41.000000 +f0v1s1 f3v2s27 40.000000 +f0v1s1 f4v1s41 42.000000 +f0v1s1 f2v0s22 4.000000 +f0v1s1 f1v2s9 0.000000 +f0v1s1 f1v3s10 41.000000 +f0v1s1 f3v0s25 41.000000 +f0v1s1 f3v3s28 40.000000 +f0v1s1 f3v13s38 41.000000 +f0v1s1 f3v7s32 40.000000 +f0v1s1 f3v1s26 42.000000 +f0v1s1 f3v6s31 40.000000 +f0v1s1 f1v13s20 40.000000 +f0v1s1 f2v2s24 37.000000 +f0v1s1 f3v11s36 42.000000 +f0v1s1 f0v5s5 4.000000 +f0v1s1 f1v11s18 39.000000 +f0v1s1 f0v6s6 7.000000 +f0v1s1 f3v4s29 38.000000 +f0v1s1 f0v2s2 4.000000 +f0v1s1 f3v12s37 41.000000 +f0v1s1 f0v3s3 6.000000 +f0v1s1 f3v14s39 41.000000 +f0v1s1 f0v0s0 2.000000 +f0v1s1 f1v12s19 45.000000 +f1v5s12 f1v4s11 4.000000 +f1v5s12 f1v9s16 7.000000 +f1v5s12 f1v10s17 7.000000 +f1v5s12 f1v0s7 4.000000 +f1v5s12 f3v9s34 35.000000 +f1v5s12 f4v0s40 37.000000 +f1v5s12 f1v7s14 4.000000 +f1v5s12 f3v2s27 35.000000 +f1v5s12 f4v1s41 38.000000 +f1v5s12 f2v0s22 43.000000 +f1v5s12 f1v2s9 43.000000 +f1v5s12 f1v3s10 4.000000 +f1v5s12 f3v0s25 36.000000 +f1v5s12 f3v3s28 37.000000 +f1v5s12 f3v13s38 38.000000 +f1v5s12 f3v7s32 35.000000 +f1v5s12 f3v1s26 35.000000 +f1v5s12 f3v6s31 35.000000 +f1v5s12 f1v13s20 6.000000 +f1v5s12 f2v2s24 36.000000 +f1v5s12 f3v11s36 35.000000 +f1v5s12 f0v5s5 41.000000 +f1v5s12 f1v11s18 5.000000 +f1v5s12 f0v6s6 43.000000 +f1v5s12 f3v4s29 38.000000 +f1v5s12 f0v2s2 43.000000 +f1v5s12 f3v12s37 35.000000 +f1v5s12 f0v3s3 40.000000 +f1v5s12 f3v14s39 36.000000 +f1v5s12 f0v0s0 43.000000 +f1v5s12 f1v12s19 5.000000 +f1v4s11 f1v9s16 3.000000 +f1v4s11 f1v10s17 4.000000 +f1v4s11 f1v0s7 0.000000 +f1v4s11 f3v9s34 34.000000 +f1v4s11 f4v0s40 37.000000 +f1v4s11 f1v7s14 0.000000 +f1v4s11 f3v2s27 34.000000 +f1v4s11 f4v1s41 34.000000 +f1v4s11 f2v0s22 41.000000 +f1v4s11 f1v2s9 41.000000 +f1v4s11 f1v3s10 0.000000 +f1v4s11 f3v0s25 35.000000 +f1v4s11 f3v3s28 36.000000 +f1v4s11 f3v13s38 39.000000 +f1v4s11 f3v7s32 34.000000 +f1v4s11 f3v1s26 34.000000 +f1v4s11 f3v6s31 34.000000 +f1v4s11 f1v13s20 2.000000 +f1v4s11 f2v2s24 33.000000 +f1v4s11 f3v11s36 36.000000 +f1v4s11 f0v5s5 41.000000 +f1v4s11 f1v11s18 1.000000 +f1v4s11 f0v6s6 42.000000 +f1v4s11 f3v4s29 36.000000 +f1v4s11 f0v2s2 41.000000 +f1v4s11 f3v12s37 35.000000 +f1v4s11 f0v3s3 39.000000 +f1v4s11 f3v14s39 35.000000 +f1v4s11 f0v0s0 41.000000 +f1v4s11 f1v12s19 2.000000 +f1v9s16 f1v10s17 7.000000 +f1v9s16 f1v0s7 3.000000 +f1v9s16 f3v9s34 35.000000 +f1v9s16 f4v0s40 37.000000 +f1v9s16 f1v7s14 3.000000 +f1v9s16 f3v2s27 37.000000 +f1v9s16 f4v1s41 34.000000 +f1v9s16 f2v0s22 41.000000 +f1v9s16 f1v2s9 40.000000 +f1v9s16 f1v3s10 3.000000 +f1v9s16 f3v0s25 38.000000 +f1v9s16 f3v3s28 39.000000 +f1v9s16 f3v13s38 39.000000 +f1v9s16 f3v7s32 35.000000 +f1v9s16 f3v1s26 35.000000 +f1v9s16 f3v6s31 35.000000 +f1v9s16 f1v13s20 5.000000 +f1v9s16 f2v2s24 35.000000 +f1v9s16 f3v11s36 39.000000 +f1v9s16 f0v5s5 40.000000 +f1v9s16 f1v11s18 4.000000 +f1v9s16 f0v6s6 42.000000 +f1v9s16 f3v4s29 38.000000 +f1v9s16 f0v2s2 41.000000 +f1v9s16 f3v12s37 39.000000 +f1v9s16 f0v3s3 38.000000 +f1v9s16 f3v14s39 38.000000 +f1v9s16 f0v0s0 40.000000 +f1v9s16 f1v12s19 5.000000 +f1v10s17 f1v0s7 4.000000 +f1v10s17 f3v9s34 32.000000 +f1v10s17 f4v0s40 39.000000 +f1v10s17 f1v7s14 4.000000 +f1v10s17 f3v2s27 32.000000 +f1v10s17 f4v1s41 40.000000 +f1v10s17 f2v0s22 43.000000 +f1v10s17 f1v2s9 42.000000 +f1v10s17 f1v3s10 4.000000 +f1v10s17 f3v0s25 33.000000 +f1v10s17 f3v3s28 37.000000 +f1v10s17 f3v13s38 38.000000 +f1v10s17 f3v7s32 32.000000 +f1v10s17 f3v1s26 33.000000 +f1v10s17 f3v6s31 32.000000 +f1v10s17 f1v13s20 6.000000 +f1v10s17 f2v2s24 34.000000 +f1v10s17 f3v11s36 35.000000 +f1v10s17 f0v5s5 42.000000 +f1v10s17 f1v11s18 5.000000 +f1v10s17 f0v6s6 45.000000 +f1v10s17 f3v4s29 35.000000 +f1v10s17 f0v2s2 43.000000 +f1v10s17 f3v12s37 32.000000 +f1v10s17 f0v3s3 40.000000 +f1v10s17 f3v14s39 33.000000 +f1v10s17 f0v0s0 42.000000 +f1v10s17 f1v12s19 5.000000 +f1v0s7 f3v9s34 34.000000 +f1v0s7 f4v0s40 37.000000 +f1v0s7 f1v7s14 0.000000 +f1v0s7 f3v2s27 34.000000 +f1v0s7 f4v1s41 34.000000 +f1v0s7 f2v0s22 41.000000 +f1v0s7 f1v2s9 41.000000 +f1v0s7 f1v3s10 0.000000 +f1v0s7 f3v0s25 35.000000 +f1v0s7 f3v3s28 36.000000 +f1v0s7 f3v13s38 39.000000 +f1v0s7 f3v7s32 34.000000 +f1v0s7 f3v1s26 34.000000 +f1v0s7 f3v6s31 34.000000 +f1v0s7 f1v13s20 2.000000 +f1v0s7 f2v2s24 33.000000 +f1v0s7 f3v11s36 36.000000 +f1v0s7 f0v5s5 41.000000 +f1v0s7 f1v11s18 1.000000 +f1v0s7 f0v6s6 42.000000 +f1v0s7 f3v4s29 36.000000 +f1v0s7 f0v2s2 41.000000 +f1v0s7 f3v12s37 35.000000 +f1v0s7 f0v3s3 39.000000 +f1v0s7 f3v14s39 35.000000 +f1v0s7 f0v0s0 41.000000 +f1v0s7 f1v12s19 2.000000 +f3v9s34 f4v0s40 39.000000 +f3v9s34 f1v7s14 34.000000 +f3v9s34 f3v2s27 3.000000 +f3v9s34 f4v1s41 38.000000 +f3v9s34 f2v0s22 38.000000 +f3v9s34 f1v2s9 40.000000 +f3v9s34 f1v3s10 34.000000 +f3v9s34 f3v0s25 2.000000 +f3v9s34 f3v3s28 4.000000 +f3v9s34 f3v13s38 4.000000 +f3v9s34 f3v7s32 0.000000 +f3v9s34 f3v1s26 4.000000 +f3v9s34 f3v6s31 0.000000 +f3v9s34 f1v13s20 34.000000 +f3v9s34 f2v2s24 33.000000 +f3v9s34 f3v11s36 6.000000 +f3v9s34 f0v5s5 38.000000 +f3v9s34 f1v11s18 34.000000 +f3v9s34 f0v6s6 41.000000 +f3v9s34 f3v4s29 5.000000 +f3v9s34 f0v2s2 38.000000 +f3v9s34 f3v12s37 4.000000 +f3v9s34 f0v3s3 39.000000 +f3v9s34 f3v14s39 2.000000 +f3v9s34 f0v0s0 38.000000 +f3v9s34 f1v12s19 34.000000 +f4v0s40 f1v7s14 37.000000 +f4v0s40 f3v2s27 37.000000 +f4v0s40 f4v1s41 1.000000 +f4v0s40 f2v0s22 36.000000 +f4v0s40 f1v2s9 41.000000 +f4v0s40 f1v3s10 37.000000 +f4v0s40 f3v0s25 38.000000 +f4v0s40 f3v3s28 38.000000 +f4v0s40 f3v13s38 41.000000 +f4v0s40 f3v7s32 39.000000 +f4v0s40 f3v1s26 37.000000 +f4v0s40 f3v6s31 39.000000 +f4v0s40 f1v13s20 35.000000 +f4v0s40 f2v2s24 32.000000 +f4v0s40 f3v11s36 37.000000 +f4v0s40 f0v5s5 37.000000 +f4v0s40 f1v11s18 39.000000 +f4v0s40 f0v6s6 36.000000 +f4v0s40 f3v4s29 42.000000 +f4v0s40 f0v2s2 36.000000 +f4v0s40 f3v12s37 39.000000 +f4v0s40 f0v3s3 36.000000 +f4v0s40 f3v14s39 38.000000 +f4v0s40 f0v0s0 36.000000 +f4v0s40 f1v12s19 34.000000 +f1v7s14 f3v2s27 34.000000 +f1v7s14 f4v1s41 34.000000 +f1v7s14 f2v0s22 41.000000 +f1v7s14 f1v2s9 41.000000 +f1v7s14 f1v3s10 0.000000 +f1v7s14 f3v0s25 35.000000 +f1v7s14 f3v3s28 36.000000 +f1v7s14 f3v13s38 39.000000 +f1v7s14 f3v7s32 34.000000 +f1v7s14 f3v1s26 34.000000 +f1v7s14 f3v6s31 34.000000 +f1v7s14 f1v13s20 2.000000 +f1v7s14 f2v2s24 33.000000 +f1v7s14 f3v11s36 36.000000 +f1v7s14 f0v5s5 41.000000 +f1v7s14 f1v11s18 1.000000 +f1v7s14 f0v6s6 42.000000 +f1v7s14 f3v4s29 36.000000 +f1v7s14 f0v2s2 41.000000 +f1v7s14 f3v12s37 35.000000 +f1v7s14 f0v3s3 39.000000 +f1v7s14 f3v14s39 35.000000 +f1v7s14 f0v0s0 41.000000 +f1v7s14 f1v12s19 2.000000 +f3v2s27 f4v1s41 38.000000 +f3v2s27 f2v0s22 37.000000 +f3v2s27 f1v2s9 40.000000 +f3v2s27 f1v3s10 34.000000 +f3v2s27 f3v0s25 1.000000 +f3v2s27 f3v3s28 3.000000 +f3v2s27 f3v13s38 3.000000 +f3v2s27 f3v7s32 3.000000 +f3v2s27 f3v1s26 2.000000 +f3v2s27 f3v6s31 3.000000 +f3v2s27 f1v13s20 34.000000 +f3v2s27 f2v2s24 34.000000 +f3v2s27 f3v11s36 5.000000 +f3v2s27 f0v5s5 38.000000 +f3v2s27 f1v11s18 34.000000 +f3v2s27 f0v6s6 42.000000 +f3v2s27 f3v4s29 4.000000 +f3v2s27 f0v2s2 37.000000 +f3v2s27 f3v12s37 3.000000 +f3v2s27 f0v3s3 39.000000 +f3v2s27 f3v14s39 1.000000 +f3v2s27 f0v0s0 38.000000 +f3v2s27 f1v12s19 34.000000 +f4v1s41 f2v0s22 37.000000 +f4v1s41 f1v2s9 42.000000 +f4v1s41 f1v3s10 34.000000 +f4v1s41 f3v0s25 39.000000 +f4v1s41 f3v3s28 39.000000 +f4v1s41 f3v13s38 42.000000 +f4v1s41 f3v7s32 38.000000 +f4v1s41 f3v1s26 38.000000 +f4v1s41 f3v6s31 38.000000 +f4v1s41 f1v13s20 33.000000 +f4v1s41 f2v2s24 33.000000 +f4v1s41 f3v11s36 37.000000 +f4v1s41 f0v5s5 38.000000 +f4v1s41 f1v11s18 36.000000 +f4v1s41 f0v6s6 37.000000 +f4v1s41 f3v4s29 43.000000 +f4v1s41 f0v2s2 37.000000 +f4v1s41 f3v12s37 40.000000 +f4v1s41 f0v3s3 37.000000 +f4v1s41 f3v14s39 39.000000 +f4v1s41 f0v0s0 37.000000 +f4v1s41 f1v12s19 34.000000 +f2v0s22 f1v2s9 4.000000 +f2v0s22 f1v3s10 41.000000 +f2v0s22 f3v0s25 38.000000 +f2v0s22 f3v3s28 37.000000 +f2v0s22 f3v13s38 39.000000 +f2v0s22 f3v7s32 38.000000 +f2v0s22 f3v1s26 39.000000 +f2v0s22 f3v6s31 38.000000 +f2v0s22 f1v13s20 40.000000 +f2v0s22 f2v2s24 37.000000 +f2v0s22 f3v11s36 40.000000 +f2v0s22 f0v5s5 4.000000 +f2v0s22 f1v11s18 39.000000 +f2v0s22 f0v6s6 7.000000 +f2v0s22 f3v4s29 35.000000 +f2v0s22 f0v2s2 0.000000 +f2v0s22 f3v12s37 38.000000 +f2v0s22 f0v3s3 6.000000 +f2v0s22 f3v14s39 38.000000 +f2v0s22 f0v0s0 2.000000 +f2v0s22 f1v12s19 41.000000 +f1v2s9 f1v3s10 41.000000 +f1v2s9 f3v0s25 41.000000 +f1v2s9 f3v3s28 40.000000 +f1v2s9 f3v13s38 41.000000 +f1v2s9 f3v7s32 40.000000 +f1v2s9 f3v1s26 42.000000 +f1v2s9 f3v6s31 40.000000 +f1v2s9 f1v13s20 40.000000 +f1v2s9 f2v2s24 37.000000 +f1v2s9 f3v11s36 42.000000 +f1v2s9 f0v5s5 4.000000 +f1v2s9 f1v11s18 39.000000 +f1v2s9 f0v6s6 7.000000 +f1v2s9 f3v4s29 38.000000 +f1v2s9 f0v2s2 4.000000 +f1v2s9 f3v12s37 41.000000 +f1v2s9 f0v3s3 6.000000 +f1v2s9 f3v14s39 41.000000 +f1v2s9 f0v0s0 2.000000 +f1v2s9 f1v12s19 45.000000 +f1v3s10 f3v0s25 35.000000 +f1v3s10 f3v3s28 36.000000 +f1v3s10 f3v13s38 39.000000 +f1v3s10 f3v7s32 34.000000 +f1v3s10 f3v1s26 34.000000 +f1v3s10 f3v6s31 34.000000 +f1v3s10 f1v13s20 2.000000 +f1v3s10 f2v2s24 33.000000 +f1v3s10 f3v11s36 36.000000 +f1v3s10 f0v5s5 41.000000 +f1v3s10 f1v11s18 1.000000 +f1v3s10 f0v6s6 42.000000 +f1v3s10 f3v4s29 36.000000 +f1v3s10 f0v2s2 41.000000 +f1v3s10 f3v12s37 35.000000 +f1v3s10 f0v3s3 39.000000 +f1v3s10 f3v14s39 35.000000 +f1v3s10 f0v0s0 41.000000 +f1v3s10 f1v12s19 2.000000 +f3v0s25 f3v3s28 2.000000 +f3v0s25 f3v13s38 2.000000 +f3v0s25 f3v7s32 2.000000 +f3v0s25 f3v1s26 2.000000 +f3v0s25 f3v6s31 2.000000 +f3v0s25 f1v13s20 35.000000 +f3v0s25 f2v2s24 33.000000 +f3v0s25 f3v11s36 4.000000 +f3v0s25 f0v5s5 39.000000 +f3v0s25 f1v11s18 35.000000 +f3v0s25 f0v6s6 43.000000 +f3v0s25 f3v4s29 3.000000 +f3v0s25 f0v2s2 38.000000 +f3v0s25 f3v12s37 2.000000 +f3v0s25 f0v3s3 40.000000 +f3v0s25 f3v14s39 0.000000 +f3v0s25 f0v0s0 39.000000 +f3v0s25 f1v12s19 35.000000 +f3v3s28 f3v13s38 3.000000 +f3v3s28 f3v7s32 4.000000 +f3v3s28 f3v1s26 4.000000 +f3v3s28 f3v6s31 4.000000 +f3v3s28 f1v13s20 36.000000 +f3v3s28 f2v2s24 33.000000 +f3v3s28 f3v11s36 6.000000 +f3v3s28 f0v5s5 39.000000 +f3v3s28 f1v11s18 38.000000 +f3v3s28 f0v6s6 42.000000 +f3v3s28 f3v4s29 4.000000 +f3v3s28 f0v2s2 37.000000 +f3v3s28 f3v12s37 4.000000 +f3v3s28 f0v3s3 39.000000 +f3v3s28 f3v14s39 2.000000 +f3v3s28 f0v0s0 38.000000 +f3v3s28 f1v12s19 38.000000 +f3v13s38 f3v7s32 4.000000 +f3v13s38 f3v1s26 4.000000 +f3v13s38 f3v6s31 4.000000 +f3v13s38 f1v13s20 39.000000 +f3v13s38 f2v2s24 34.000000 +f3v13s38 f3v11s36 6.000000 +f3v13s38 f0v5s5 39.000000 +f3v13s38 f1v11s18 39.000000 +f3v13s38 f0v6s6 43.000000 +f3v13s38 f3v4s29 4.000000 +f3v13s38 f0v2s2 39.000000 +f3v13s38 f3v12s37 4.000000 +f3v13s38 f0v3s3 40.000000 +f3v13s38 f3v14s39 2.000000 +f3v13s38 f0v0s0 39.000000 +f3v13s38 f1v12s19 35.000000 +f3v7s32 f3v1s26 4.000000 +f3v7s32 f3v6s31 0.000000 +f3v7s32 f1v13s20 34.000000 +f3v7s32 f2v2s24 33.000000 +f3v7s32 f3v11s36 6.000000 +f3v7s32 f0v5s5 38.000000 +f3v7s32 f1v11s18 34.000000 +f3v7s32 f0v6s6 41.000000 +f3v7s32 f3v4s29 5.000000 +f3v7s32 f0v2s2 38.000000 +f3v7s32 f3v12s37 4.000000 +f3v7s32 f0v3s3 39.000000 +f3v7s32 f3v14s39 2.000000 +f3v7s32 f0v0s0 38.000000 +f3v7s32 f1v12s19 34.000000 +f3v1s26 f3v6s31 4.000000 +f3v1s26 f1v13s20 34.000000 +f3v1s26 f2v2s24 33.000000 +f3v1s26 f3v11s36 6.000000 +f3v1s26 f0v5s5 40.000000 +f3v1s26 f1v11s18 37.000000 +f3v1s26 f0v6s6 44.000000 +f3v1s26 f3v4s29 5.000000 +f3v1s26 f0v2s2 39.000000 +f3v1s26 f3v12s37 4.000000 +f3v1s26 f0v3s3 39.000000 +f3v1s26 f3v14s39 2.000000 +f3v1s26 f0v0s0 40.000000 +f3v1s26 f1v12s19 34.000000 +f3v6s31 f1v13s20 34.000000 +f3v6s31 f2v2s24 33.000000 +f3v6s31 f3v11s36 6.000000 +f3v6s31 f0v5s5 38.000000 +f3v6s31 f1v11s18 34.000000 +f3v6s31 f0v6s6 41.000000 +f3v6s31 f3v4s29 5.000000 +f3v6s31 f0v2s2 38.000000 +f3v6s31 f3v12s37 4.000000 +f3v6s31 f0v3s3 39.000000 +f3v6s31 f3v14s39 2.000000 +f3v6s31 f0v0s0 38.000000 +f3v6s31 f1v12s19 34.000000 +f1v13s20 f2v2s24 31.000000 +f1v13s20 f3v11s36 36.000000 +f1v13s20 f0v5s5 39.000000 +f1v13s20 f1v11s18 3.000000 +f1v13s20 f0v6s6 41.000000 +f1v13s20 f3v4s29 36.000000 +f1v13s20 f0v2s2 40.000000 +f1v13s20 f3v12s37 35.000000 +f1v13s20 f0v3s3 38.000000 +f1v13s20 f3v14s39 35.000000 +f1v13s20 f0v0s0 40.000000 +f1v13s20 f1v12s19 4.000000 +f2v2s24 f3v11s36 33.000000 +f2v2s24 f0v5s5 41.000000 +f2v2s24 f1v11s18 33.000000 +f2v2s24 f0v6s6 38.000000 +f2v2s24 f3v4s29 34.000000 +f2v2s24 f0v2s2 37.000000 +f2v2s24 f3v12s37 33.000000 +f2v2s24 f0v3s3 35.000000 +f2v2s24 f3v14s39 33.000000 +f2v2s24 f0v0s0 37.000000 +f2v2s24 f1v12s19 33.000000 +f3v11s36 f0v5s5 43.000000 +f3v11s36 f1v11s18 36.000000 +f3v11s36 f0v6s6 44.000000 +f3v11s36 f3v4s29 7.000000 +f3v11s36 f0v2s2 40.000000 +f3v11s36 f3v12s37 6.000000 +f3v11s36 f0v3s3 41.000000 +f3v11s36 f3v14s39 4.000000 +f3v11s36 f0v0s0 40.000000 +f3v11s36 f1v12s19 36.000000 +f0v5s5 f1v11s18 40.000000 +f0v5s5 f0v6s6 7.000000 +f0v5s5 f3v4s29 36.000000 +f0v5s5 f0v2s2 4.000000 +f0v5s5 f3v12s37 40.000000 +f0v5s5 f0v3s3 6.000000 +f0v5s5 f3v14s39 39.000000 +f0v5s5 f0v0s0 2.000000 +f0v5s5 f1v12s19 42.000000 +f1v11s18 f0v6s6 39.000000 +f1v11s18 f3v4s29 36.000000 +f1v11s18 f0v2s2 39.000000 +f1v11s18 f3v12s37 35.000000 +f1v11s18 f0v3s3 37.000000 +f1v11s18 f3v14s39 35.000000 +f1v11s18 f0v0s0 39.000000 +f1v11s18 f1v12s19 3.000000 +f0v6s6 f3v4s29 40.000000 +f0v6s6 f0v2s2 7.000000 +f0v6s6 f3v12s37 44.000000 +f0v6s6 f0v3s3 9.000000 +f0v6s6 f3v14s39 43.000000 +f0v6s6 f0v0s0 5.000000 +f0v6s6 f1v12s19 45.000000 +f3v4s29 f0v2s2 35.000000 +f3v4s29 f3v12s37 5.000000 +f3v4s29 f0v3s3 38.000000 +f3v4s29 f3v14s39 3.000000 +f3v4s29 f0v0s0 36.000000 +f3v4s29 f1v12s19 36.000000 +f0v2s2 f3v12s37 38.000000 +f0v2s2 f0v3s3 6.000000 +f0v2s2 f3v14s39 38.000000 +f0v2s2 f0v0s0 2.000000 +f0v2s2 f1v12s19 41.000000 +f3v12s37 f0v3s3 41.000000 +f3v12s37 f3v14s39 2.000000 +f3v12s37 f0v0s0 39.000000 +f3v12s37 f1v12s19 35.000000 +f0v3s3 f3v14s39 40.000000 +f0v3s3 f0v0s0 4.000000 +f0v3s3 f1v12s19 40.000000 +f3v14s39 f0v0s0 39.000000 +f3v14s39 f1v12s19 35.000000 +f0v0s0 f1v12s19 45.000000 diff --git a/pkg/obitools/obialign/testdata/one_allraw.expected b/pkg/obitools/obialign/testdata/one_allraw.expected new file mode 100644 index 0000000..56b344d --- /dev/null +++ b/pkg/obitools/obialign/testdata/one_allraw.expected @@ -0,0 +1,903 @@ +f3v10s35 f3v5s30 58.000000 +f3v10s35 f1v8s15 37.000000 +f3v10s35 f2v1s23 38.000000 +f3v10s35 f4v2s42 38.000000 +f3v10s35 f0v4s4 40.000000 +f3v10s35 f1v6s13 37.000000 +f3v10s35 f3v8s33 61.000000 +f3v10s35 f1v1s8 39.000000 +f3v10s35 f1v14s21 38.000000 +f3v10s35 f0v1s1 40.000000 +f3v10s35 f1v5s12 38.000000 +f3v10s35 f1v4s11 38.000000 +f3v10s35 f1v9s16 39.000000 +f3v10s35 f1v10s17 39.000000 +f3v10s35 f1v0s7 38.000000 +f3v10s35 f3v9s34 61.000000 +f3v10s35 f4v0s40 38.000000 +f3v10s35 f1v7s14 38.000000 +f3v10s35 f3v2s27 61.000000 +f3v10s35 f4v1s41 38.000000 +f3v10s35 f2v0s22 40.000000 +f3v10s35 f1v2s9 40.000000 +f3v10s35 f1v3s10 38.000000 +f3v10s35 f3v0s25 62.000000 +f3v10s35 f3v3s28 61.000000 +f3v10s35 f3v13s38 62.000000 +f3v10s35 f3v7s32 61.000000 +f3v10s35 f3v1s26 61.000000 +f3v10s35 f3v6s31 61.000000 +f3v10s35 f1v13s20 37.000000 +f3v10s35 f2v2s24 35.000000 +f3v10s35 f3v11s36 59.000000 +f3v10s35 f0v5s5 39.000000 +f3v10s35 f1v11s18 38.000000 +f3v10s35 f0v6s6 38.000000 +f3v10s35 f3v4s29 61.000000 +f3v10s35 f0v2s2 40.000000 +f3v10s35 f3v12s37 61.000000 +f3v10s35 f0v3s3 40.000000 +f3v10s35 f3v14s39 62.000000 +f3v10s35 f0v0s0 40.000000 +f3v10s35 f1v12s19 37.000000 +f3v5s30 f1v8s15 38.000000 +f3v5s30 f2v1s23 38.000000 +f3v5s30 f4v2s42 37.000000 +f3v5s30 f0v4s4 39.000000 +f3v5s30 f1v6s13 39.000000 +f3v5s30 f3v8s33 61.000000 +f3v5s30 f1v1s8 39.000000 +f3v5s30 f1v14s21 37.000000 +f3v5s30 f0v1s1 39.000000 +f3v5s30 f1v5s12 38.000000 +f3v5s30 f1v4s11 38.000000 +f3v5s30 f1v9s16 38.000000 +f3v5s30 f1v10s17 39.000000 +f3v5s30 f1v0s7 38.000000 +f3v5s30 f3v9s34 60.000000 +f3v5s30 f4v0s40 37.000000 +f3v5s30 f1v7s14 38.000000 +f3v5s30 f3v2s27 61.000000 +f3v5s30 f4v1s41 37.000000 +f3v5s30 f2v0s22 40.000000 +f3v5s30 f1v2s9 39.000000 +f3v5s30 f1v3s10 38.000000 +f3v5s30 f3v0s25 62.000000 +f3v5s30 f3v3s28 61.000000 +f3v5s30 f3v13s38 62.000000 +f3v5s30 f3v7s32 60.000000 +f3v5s30 f3v1s26 61.000000 +f3v5s30 f3v6s31 60.000000 +f3v5s30 f1v13s20 38.000000 +f3v5s30 f2v2s24 34.000000 +f3v5s30 f3v11s36 59.000000 +f3v5s30 f0v5s5 39.000000 +f3v5s30 f1v11s18 38.000000 +f3v5s30 f0v6s6 41.000000 +f3v5s30 f3v4s29 61.000000 +f3v5s30 f0v2s2 40.000000 +f3v5s30 f3v12s37 61.000000 +f3v5s30 f0v3s3 40.000000 +f3v5s30 f3v14s39 62.000000 +f3v5s30 f0v0s0 40.000000 +f3v5s30 f1v12s19 37.000000 +f1v8s15 f2v1s23 57.000000 +f1v8s15 f4v2s42 34.000000 +f1v8s15 f0v4s4 38.000000 +f1v8s15 f1v6s13 54.000000 +f1v8s15 f3v8s33 39.000000 +f1v8s15 f1v1s8 55.000000 +f1v8s15 f1v14s21 54.000000 +f1v8s15 f0v1s1 38.000000 +f1v8s15 f1v5s12 55.000000 +f1v8s15 f1v4s11 57.000000 +f1v8s15 f1v9s16 56.000000 +f1v8s15 f1v10s17 55.000000 +f1v8s15 f1v0s7 57.000000 +f1v8s15 f3v9s34 40.000000 +f1v8s15 f4v0s40 35.000000 +f1v8s15 f1v7s14 57.000000 +f1v8s15 f3v2s27 39.000000 +f1v8s15 f4v1s41 35.000000 +f1v8s15 f2v0s22 39.000000 +f1v8s15 f1v2s9 38.000000 +f1v8s15 f1v3s10 57.000000 +f1v8s15 f3v0s25 39.000000 +f1v8s15 f3v3s28 39.000000 +f1v8s15 f3v13s38 40.000000 +f1v8s15 f3v7s32 40.000000 +f1v8s15 f3v1s26 39.000000 +f1v8s15 f3v6s31 40.000000 +f1v8s15 f1v13s20 55.000000 +f1v8s15 f2v2s24 34.000000 +f1v8s15 f3v11s36 39.000000 +f1v8s15 f0v5s5 39.000000 +f1v8s15 f1v11s18 56.000000 +f1v8s15 f0v6s6 38.000000 +f1v8s15 f3v4s29 40.000000 +f1v8s15 f0v2s2 39.000000 +f1v8s15 f3v12s37 40.000000 +f1v8s15 f0v3s3 39.000000 +f1v8s15 f3v14s39 39.000000 +f1v8s15 f0v0s0 39.000000 +f1v8s15 f1v12s19 55.000000 +f2v1s23 f4v2s42 34.000000 +f2v1s23 f0v4s4 38.000000 +f2v1s23 f1v6s13 54.000000 +f2v1s23 f3v8s33 39.000000 +f2v1s23 f1v1s8 56.000000 +f2v1s23 f1v14s21 55.000000 +f2v1s23 f0v1s1 38.000000 +f2v1s23 f1v5s12 56.000000 +f2v1s23 f1v4s11 58.000000 +f2v1s23 f1v9s16 57.000000 +f2v1s23 f1v10s17 56.000000 +f2v1s23 f1v0s7 58.000000 +f2v1s23 f3v9s34 40.000000 +f2v1s23 f4v0s40 35.000000 +f2v1s23 f1v7s14 58.000000 +f2v1s23 f3v2s27 39.000000 +f2v1s23 f4v1s41 35.000000 +f2v1s23 f2v0s22 39.000000 +f2v1s23 f1v2s9 38.000000 +f2v1s23 f1v3s10 58.000000 +f2v1s23 f3v0s25 39.000000 +f2v1s23 f3v3s28 39.000000 +f2v1s23 f3v13s38 40.000000 +f2v1s23 f3v7s32 40.000000 +f2v1s23 f3v1s26 39.000000 +f2v1s23 f3v6s31 40.000000 +f2v1s23 f1v13s20 56.000000 +f2v1s23 f2v2s24 34.000000 +f2v1s23 f3v11s36 39.000000 +f2v1s23 f0v5s5 39.000000 +f2v1s23 f1v11s18 57.000000 +f2v1s23 f0v6s6 38.000000 +f2v1s23 f3v4s29 40.000000 +f2v1s23 f0v2s2 39.000000 +f2v1s23 f3v12s37 40.000000 +f2v1s23 f0v3s3 39.000000 +f2v1s23 f3v14s39 39.000000 +f2v1s23 f0v0s0 39.000000 +f2v1s23 f1v12s19 56.000000 +f4v2s42 f0v4s4 39.000000 +f4v2s42 f1v6s13 33.000000 +f4v2s42 f3v8s33 37.000000 +f4v2s42 f1v1s8 36.000000 +f4v2s42 f1v14s21 33.000000 +f4v2s42 f0v1s1 39.000000 +f4v2s42 f1v5s12 34.000000 +f4v2s42 f1v4s11 34.000000 +f4v2s42 f1v9s16 36.000000 +f4v2s42 f1v10s17 35.000000 +f4v2s42 f1v0s7 34.000000 +f4v2s42 f3v9s34 35.000000 +f4v2s42 f4v0s40 59.000000 +f4v2s42 f1v7s14 34.000000 +f4v2s42 f3v2s27 36.000000 +f4v2s42 f4v1s41 59.000000 +f4v2s42 f2v0s22 41.000000 +f4v2s42 f1v2s9 39.000000 +f4v2s42 f1v3s10 34.000000 +f4v2s42 f3v0s25 36.000000 +f4v2s42 f3v3s28 36.000000 +f4v2s42 f3v13s38 37.000000 +f4v2s42 f3v7s32 35.000000 +f4v2s42 f3v1s26 36.000000 +f4v2s42 f3v6s31 35.000000 +f4v2s42 f1v13s20 33.000000 +f4v2s42 f2v2s24 35.000000 +f4v2s42 f3v11s36 36.000000 +f4v2s42 f0v5s5 40.000000 +f4v2s42 f1v11s18 34.000000 +f4v2s42 f0v6s6 41.000000 +f4v2s42 f3v4s29 38.000000 +f4v2s42 f0v2s2 41.000000 +f4v2s42 f3v12s37 37.000000 +f4v2s42 f0v3s3 39.000000 +f4v2s42 f3v14s39 36.000000 +f4v2s42 f0v0s0 40.000000 +f4v2s42 f1v12s19 33.000000 +f0v4s4 f1v6s13 37.000000 +f0v4s4 f3v8s33 41.000000 +f0v4s4 f1v1s8 38.000000 +f0v4s4 f1v14s21 38.000000 +f0v4s4 f0v1s1 69.000000 +f0v4s4 f1v5s12 39.000000 +f0v4s4 f1v4s11 38.000000 +f0v4s4 f1v9s16 39.000000 +f0v4s4 f1v10s17 39.000000 +f0v4s4 f1v0s7 38.000000 +f0v4s4 f3v9s34 40.000000 +f0v4s4 f4v0s40 38.000000 +f0v4s4 f1v7s14 38.000000 +f0v4s4 f3v2s27 40.000000 +f0v4s4 f4v1s41 38.000000 +f0v4s4 f2v0s22 67.000000 +f0v4s4 f1v2s9 69.000000 +f0v4s4 f1v3s10 38.000000 +f0v4s4 f3v0s25 40.000000 +f0v4s4 f3v3s28 40.000000 +f0v4s4 f3v13s38 40.000000 +f0v4s4 f3v7s32 40.000000 +f0v4s4 f3v1s26 39.000000 +f0v4s4 f3v6s31 40.000000 +f0v4s4 f1v13s20 37.000000 +f0v4s4 f2v2s24 35.000000 +f0v4s4 f3v11s36 37.000000 +f0v4s4 f0v5s5 67.000000 +f0v4s4 f1v11s18 38.000000 +f0v4s4 f0v6s6 64.000000 +f0v4s4 f3v4s29 42.000000 +f0v4s4 f0v2s2 67.000000 +f0v4s4 f3v12s37 40.000000 +f0v4s4 f0v3s3 65.000000 +f0v4s4 f3v14s39 40.000000 +f0v4s4 f0v0s0 68.000000 +f0v4s4 f1v12s19 38.000000 +f1v6s13 f3v8s33 39.000000 +f1v6s13 f1v1s8 52.000000 +f1v6s13 f1v14s21 51.000000 +f1v6s13 f0v1s1 37.000000 +f1v6s13 f1v5s12 52.000000 +f1v6s13 f1v4s11 54.000000 +f1v6s13 f1v9s16 53.000000 +f1v6s13 f1v10s17 53.000000 +f1v6s13 f1v0s7 54.000000 +f1v6s13 f3v9s34 39.000000 +f1v6s13 f4v0s40 34.000000 +f1v6s13 f1v7s14 54.000000 +f1v6s13 f3v2s27 39.000000 +f1v6s13 f4v1s41 34.000000 +f1v6s13 f2v0s22 38.000000 +f1v6s13 f1v2s9 37.000000 +f1v6s13 f1v3s10 54.000000 +f1v6s13 f3v0s25 39.000000 +f1v6s13 f3v3s28 39.000000 +f1v6s13 f3v13s38 39.000000 +f1v6s13 f3v7s32 39.000000 +f1v6s13 f3v1s26 39.000000 +f1v6s13 f3v6s31 39.000000 +f1v6s13 f1v13s20 52.000000 +f1v6s13 f2v2s24 33.000000 +f1v6s13 f3v11s36 39.000000 +f1v6s13 f0v5s5 38.000000 +f1v6s13 f1v11s18 53.000000 +f1v6s13 f0v6s6 38.000000 +f1v6s13 f3v4s29 40.000000 +f1v6s13 f0v2s2 38.000000 +f1v6s13 f3v12s37 40.000000 +f1v6s13 f0v3s3 37.000000 +f1v6s13 f3v14s39 39.000000 +f1v6s13 f0v0s0 38.000000 +f1v6s13 f1v12s19 52.000000 +f3v8s33 f1v1s8 40.000000 +f3v8s33 f1v14s21 38.000000 +f3v8s33 f0v1s1 41.000000 +f3v8s33 f1v5s12 39.000000 +f3v8s33 f1v4s11 39.000000 +f3v8s33 f1v9s16 39.000000 +f3v8s33 f1v10s17 40.000000 +f3v8s33 f1v0s7 39.000000 +f3v8s33 f3v9s34 63.000000 +f3v8s33 f4v0s40 37.000000 +f3v8s33 f1v7s14 39.000000 +f3v8s33 f3v2s27 64.000000 +f3v8s33 f4v1s41 37.000000 +f3v8s33 f2v0s22 42.000000 +f3v8s33 f1v2s9 41.000000 +f3v8s33 f1v3s10 39.000000 +f3v8s33 f3v0s25 65.000000 +f3v8s33 f3v3s28 64.000000 +f3v8s33 f3v13s38 65.000000 +f3v8s33 f3v7s32 63.000000 +f3v8s33 f3v1s26 63.000000 +f3v8s33 f3v6s31 63.000000 +f3v8s33 f1v13s20 38.000000 +f3v8s33 f2v2s24 34.000000 +f3v8s33 f3v11s36 62.000000 +f3v8s33 f0v5s5 41.000000 +f3v8s33 f1v11s18 39.000000 +f3v8s33 f0v6s6 41.000000 +f3v8s33 f3v4s29 64.000000 +f3v8s33 f0v2s2 42.000000 +f3v8s33 f3v12s37 64.000000 +f3v8s33 f0v3s3 41.000000 +f3v8s33 f3v14s39 65.000000 +f3v8s33 f0v0s0 42.000000 +f3v8s33 f1v12s19 38.000000 +f1v1s8 f1v14s21 55.000000 +f1v1s8 f0v1s1 38.000000 +f1v1s8 f1v5s12 54.000000 +f1v1s8 f1v4s11 56.000000 +f1v1s8 f1v9s16 55.000000 +f1v1s8 f1v10s17 54.000000 +f1v1s8 f1v0s7 56.000000 +f1v1s8 f3v9s34 41.000000 +f1v1s8 f4v0s40 36.000000 +f1v1s8 f1v7s14 56.000000 +f1v1s8 f3v2s27 40.000000 +f1v1s8 f4v1s41 36.000000 +f1v1s8 f2v0s22 39.000000 +f1v1s8 f1v2s9 38.000000 +f1v1s8 f1v3s10 56.000000 +f1v1s8 f3v0s25 40.000000 +f1v1s8 f3v3s28 40.000000 +f1v1s8 f3v13s38 41.000000 +f1v1s8 f3v7s32 41.000000 +f1v1s8 f3v1s26 40.000000 +f1v1s8 f3v6s31 41.000000 +f1v1s8 f1v13s20 54.000000 +f1v1s8 f2v2s24 33.000000 +f1v1s8 f3v11s36 39.000000 +f1v1s8 f0v5s5 39.000000 +f1v1s8 f1v11s18 55.000000 +f1v1s8 f0v6s6 38.000000 +f1v1s8 f3v4s29 41.000000 +f1v1s8 f0v2s2 39.000000 +f1v1s8 f3v12s37 41.000000 +f1v1s8 f0v3s3 39.000000 +f1v1s8 f3v14s39 40.000000 +f1v1s8 f0v0s0 39.000000 +f1v1s8 f1v12s19 55.000000 +f1v14s21 f0v1s1 38.000000 +f1v14s21 f1v5s12 53.000000 +f1v14s21 f1v4s11 55.000000 +f1v14s21 f1v9s16 54.000000 +f1v14s21 f1v10s17 53.000000 +f1v14s21 f1v0s7 55.000000 +f1v14s21 f3v9s34 39.000000 +f1v14s21 f4v0s40 33.000000 +f1v14s21 f1v7s14 55.000000 +f1v14s21 f3v2s27 38.000000 +f1v14s21 f4v1s41 34.000000 +f1v14s21 f2v0s22 39.000000 +f1v14s21 f1v2s9 38.000000 +f1v14s21 f1v3s10 55.000000 +f1v14s21 f3v0s25 38.000000 +f1v14s21 f3v3s28 38.000000 +f1v14s21 f3v13s38 38.000000 +f1v14s21 f3v7s32 39.000000 +f1v14s21 f3v1s26 38.000000 +f1v14s21 f3v6s31 39.000000 +f1v14s21 f1v13s20 53.000000 +f1v14s21 f2v2s24 34.000000 +f1v14s21 f3v11s36 38.000000 +f1v14s21 f0v5s5 39.000000 +f1v14s21 f1v11s18 54.000000 +f1v14s21 f0v6s6 38.000000 +f1v14s21 f3v4s29 39.000000 +f1v14s21 f0v2s2 39.000000 +f1v14s21 f3v12s37 39.000000 +f1v14s21 f0v3s3 39.000000 +f1v14s21 f3v14s39 38.000000 +f1v14s21 f0v0s0 39.000000 +f1v14s21 f1v12s19 53.000000 +f0v1s1 f1v5s12 39.000000 +f0v1s1 f1v4s11 38.000000 +f0v1s1 f1v9s16 39.000000 +f0v1s1 f1v10s17 39.000000 +f0v1s1 f1v0s7 38.000000 +f0v1s1 f3v9s34 40.000000 +f0v1s1 f4v0s40 38.000000 +f0v1s1 f1v7s14 38.000000 +f0v1s1 f3v2s27 40.000000 +f0v1s1 f4v1s41 38.000000 +f0v1s1 f2v0s22 67.000000 +f0v1s1 f1v2s9 69.000000 +f0v1s1 f1v3s10 38.000000 +f0v1s1 f3v0s25 40.000000 +f0v1s1 f3v3s28 40.000000 +f0v1s1 f3v13s38 40.000000 +f0v1s1 f3v7s32 40.000000 +f0v1s1 f3v1s26 39.000000 +f0v1s1 f3v6s31 40.000000 +f0v1s1 f1v13s20 37.000000 +f0v1s1 f2v2s24 35.000000 +f0v1s1 f3v11s36 37.000000 +f0v1s1 f0v5s5 67.000000 +f0v1s1 f1v11s18 38.000000 +f0v1s1 f0v6s6 64.000000 +f0v1s1 f3v4s29 42.000000 +f0v1s1 f0v2s2 67.000000 +f0v1s1 f3v12s37 40.000000 +f0v1s1 f0v3s3 65.000000 +f0v1s1 f3v14s39 40.000000 +f0v1s1 f0v0s0 68.000000 +f0v1s1 f1v12s19 38.000000 +f1v5s12 f1v4s11 56.000000 +f1v5s12 f1v9s16 55.000000 +f1v5s12 f1v10s17 55.000000 +f1v5s12 f1v0s7 56.000000 +f1v5s12 f3v9s34 40.000000 +f1v5s12 f4v0s40 35.000000 +f1v5s12 f1v7s14 56.000000 +f1v5s12 f3v2s27 39.000000 +f1v5s12 f4v1s41 35.000000 +f1v5s12 f2v0s22 40.000000 +f1v5s12 f1v2s9 39.000000 +f1v5s12 f1v3s10 56.000000 +f1v5s12 f3v0s25 39.000000 +f1v5s12 f3v3s28 38.000000 +f1v5s12 f3v13s38 40.000000 +f1v5s12 f3v7s32 40.000000 +f1v5s12 f3v1s26 38.000000 +f1v5s12 f3v6s31 40.000000 +f1v5s12 f1v13s20 54.000000 +f1v5s12 f2v2s24 32.000000 +f1v5s12 f3v11s36 39.000000 +f1v5s12 f0v5s5 39.000000 +f1v5s12 f1v11s18 55.000000 +f1v5s12 f0v6s6 39.000000 +f1v5s12 f3v4s29 40.000000 +f1v5s12 f0v2s2 40.000000 +f1v5s12 f3v12s37 40.000000 +f1v5s12 f0v3s3 39.000000 +f1v5s12 f3v14s39 39.000000 +f1v5s12 f0v0s0 40.000000 +f1v5s12 f1v12s19 55.000000 +f1v4s11 f1v9s16 57.000000 +f1v4s11 f1v10s17 56.000000 +f1v4s11 f1v0s7 58.000000 +f1v4s11 f3v9s34 40.000000 +f1v4s11 f4v0s40 35.000000 +f1v4s11 f1v7s14 58.000000 +f1v4s11 f3v2s27 39.000000 +f1v4s11 f4v1s41 35.000000 +f1v4s11 f2v0s22 39.000000 +f1v4s11 f1v2s9 38.000000 +f1v4s11 f1v3s10 58.000000 +f1v4s11 f3v0s25 39.000000 +f1v4s11 f3v3s28 39.000000 +f1v4s11 f3v13s38 40.000000 +f1v4s11 f3v7s32 40.000000 +f1v4s11 f3v1s26 39.000000 +f1v4s11 f3v6s31 40.000000 +f1v4s11 f1v13s20 56.000000 +f1v4s11 f2v2s24 34.000000 +f1v4s11 f3v11s36 39.000000 +f1v4s11 f0v5s5 39.000000 +f1v4s11 f1v11s18 57.000000 +f1v4s11 f0v6s6 38.000000 +f1v4s11 f3v4s29 40.000000 +f1v4s11 f0v2s2 39.000000 +f1v4s11 f3v12s37 40.000000 +f1v4s11 f0v3s3 39.000000 +f1v4s11 f3v14s39 39.000000 +f1v4s11 f0v0s0 39.000000 +f1v4s11 f1v12s19 56.000000 +f1v9s16 f1v10s17 55.000000 +f1v9s16 f1v0s7 57.000000 +f1v9s16 f3v9s34 39.000000 +f1v9s16 f4v0s40 36.000000 +f1v9s16 f1v7s14 57.000000 +f1v9s16 f3v2s27 39.000000 +f1v9s16 f4v1s41 36.000000 +f1v9s16 f2v0s22 40.000000 +f1v9s16 f1v2s9 39.000000 +f1v9s16 f1v3s10 57.000000 +f1v9s16 f3v0s25 39.000000 +f1v9s16 f3v3s28 39.000000 +f1v9s16 f3v13s38 40.000000 +f1v9s16 f3v7s32 39.000000 +f1v9s16 f3v1s26 38.000000 +f1v9s16 f3v6s31 39.000000 +f1v9s16 f1v13s20 55.000000 +f1v9s16 f2v2s24 35.000000 +f1v9s16 f3v11s36 39.000000 +f1v9s16 f0v5s5 40.000000 +f1v9s16 f1v11s18 56.000000 +f1v9s16 f0v6s6 39.000000 +f1v9s16 f3v4s29 40.000000 +f1v9s16 f0v2s2 40.000000 +f1v9s16 f3v12s37 40.000000 +f1v9s16 f0v3s3 41.000000 +f1v9s16 f3v14s39 39.000000 +f1v9s16 f0v0s0 40.000000 +f1v9s16 f1v12s19 55.000000 +f1v10s17 f1v0s7 56.000000 +f1v10s17 f3v9s34 41.000000 +f1v10s17 f4v0s40 35.000000 +f1v10s17 f1v7s14 56.000000 +f1v10s17 f3v2s27 40.000000 +f1v10s17 f4v1s41 36.000000 +f1v10s17 f2v0s22 39.000000 +f1v10s17 f1v2s9 39.000000 +f1v10s17 f1v3s10 56.000000 +f1v10s17 f3v0s25 40.000000 +f1v10s17 f3v3s28 40.000000 +f1v10s17 f3v13s38 41.000000 +f1v10s17 f3v7s32 41.000000 +f1v10s17 f3v1s26 39.000000 +f1v10s17 f3v6s31 41.000000 +f1v10s17 f1v13s20 54.000000 +f1v10s17 f2v2s24 33.000000 +f1v10s17 f3v11s36 41.000000 +f1v10s17 f0v5s5 39.000000 +f1v10s17 f1v11s18 55.000000 +f1v10s17 f0v6s6 39.000000 +f1v10s17 f3v4s29 40.000000 +f1v10s17 f0v2s2 39.000000 +f1v10s17 f3v12s37 41.000000 +f1v10s17 f0v3s3 40.000000 +f1v10s17 f3v14s39 40.000000 +f1v10s17 f0v0s0 40.000000 +f1v10s17 f1v12s19 55.000000 +f1v0s7 f3v9s34 40.000000 +f1v0s7 f4v0s40 35.000000 +f1v0s7 f1v7s14 58.000000 +f1v0s7 f3v2s27 39.000000 +f1v0s7 f4v1s41 35.000000 +f1v0s7 f2v0s22 39.000000 +f1v0s7 f1v2s9 38.000000 +f1v0s7 f1v3s10 58.000000 +f1v0s7 f3v0s25 39.000000 +f1v0s7 f3v3s28 39.000000 +f1v0s7 f3v13s38 40.000000 +f1v0s7 f3v7s32 40.000000 +f1v0s7 f3v1s26 39.000000 +f1v0s7 f3v6s31 40.000000 +f1v0s7 f1v13s20 56.000000 +f1v0s7 f2v2s24 34.000000 +f1v0s7 f3v11s36 39.000000 +f1v0s7 f0v5s5 39.000000 +f1v0s7 f1v11s18 57.000000 +f1v0s7 f0v6s6 38.000000 +f1v0s7 f3v4s29 40.000000 +f1v0s7 f0v2s2 39.000000 +f1v0s7 f3v12s37 40.000000 +f1v0s7 f0v3s3 39.000000 +f1v0s7 f3v14s39 39.000000 +f1v0s7 f0v0s0 39.000000 +f1v0s7 f1v12s19 56.000000 +f3v9s34 f4v0s40 35.000000 +f3v9s34 f1v7s14 40.000000 +f3v9s34 f3v2s27 63.000000 +f3v9s34 f4v1s41 35.000000 +f3v9s34 f2v0s22 40.000000 +f3v9s34 f1v2s9 40.000000 +f3v9s34 f1v3s10 40.000000 +f3v9s34 f3v0s25 64.000000 +f3v9s34 f3v3s28 63.000000 +f3v9s34 f3v13s38 64.000000 +f3v9s34 f3v7s32 65.000000 +f3v9s34 f3v1s26 62.000000 +f3v9s34 f3v6s31 65.000000 +f3v9s34 f1v13s20 39.000000 +f3v9s34 f2v2s24 34.000000 +f3v9s34 f3v11s36 61.000000 +f3v9s34 f0v5s5 40.000000 +f3v9s34 f1v11s18 40.000000 +f3v9s34 f0v6s6 39.000000 +f3v9s34 f3v4s29 63.000000 +f3v9s34 f0v2s2 40.000000 +f3v9s34 f3v12s37 63.000000 +f3v9s34 f0v3s3 41.000000 +f3v9s34 f3v14s39 64.000000 +f3v9s34 f0v0s0 41.000000 +f3v9s34 f1v12s19 39.000000 +f4v0s40 f1v7s14 35.000000 +f4v0s40 f3v2s27 36.000000 +f4v0s40 f4v1s41 60.000000 +f4v0s40 f2v0s22 39.000000 +f4v0s40 f1v2s9 38.000000 +f4v0s40 f1v3s10 35.000000 +f4v0s40 f3v0s25 36.000000 +f4v0s40 f3v3s28 36.000000 +f4v0s40 f3v13s38 37.000000 +f4v0s40 f3v7s32 35.000000 +f4v0s40 f3v1s26 36.000000 +f4v0s40 f3v6s31 35.000000 +f4v0s40 f1v13s20 34.000000 +f4v0s40 f2v2s24 34.000000 +f4v0s40 f3v11s36 36.000000 +f4v0s40 f0v5s5 38.000000 +f4v0s40 f1v11s18 35.000000 +f4v0s40 f0v6s6 39.000000 +f4v0s40 f3v4s29 38.000000 +f4v0s40 f0v2s2 39.000000 +f4v0s40 f3v12s37 37.000000 +f4v0s40 f0v3s3 37.000000 +f4v0s40 f3v14s39 36.000000 +f4v0s40 f0v0s0 38.000000 +f4v0s40 f1v12s19 33.000000 +f1v7s14 f3v2s27 39.000000 +f1v7s14 f4v1s41 35.000000 +f1v7s14 f2v0s22 39.000000 +f1v7s14 f1v2s9 38.000000 +f1v7s14 f1v3s10 58.000000 +f1v7s14 f3v0s25 39.000000 +f1v7s14 f3v3s28 39.000000 +f1v7s14 f3v13s38 40.000000 +f1v7s14 f3v7s32 40.000000 +f1v7s14 f3v1s26 39.000000 +f1v7s14 f3v6s31 40.000000 +f1v7s14 f1v13s20 56.000000 +f1v7s14 f2v2s24 34.000000 +f1v7s14 f3v11s36 39.000000 +f1v7s14 f0v5s5 39.000000 +f1v7s14 f1v11s18 57.000000 +f1v7s14 f0v6s6 38.000000 +f1v7s14 f3v4s29 40.000000 +f1v7s14 f0v2s2 39.000000 +f1v7s14 f3v12s37 40.000000 +f1v7s14 f0v3s3 39.000000 +f1v7s14 f3v14s39 39.000000 +f1v7s14 f0v0s0 39.000000 +f1v7s14 f1v12s19 56.000000 +f3v2s27 f4v1s41 36.000000 +f3v2s27 f2v0s22 41.000000 +f3v2s27 f1v2s9 40.000000 +f3v2s27 f1v3s10 39.000000 +f3v2s27 f3v0s25 65.000000 +f3v2s27 f3v3s28 64.000000 +f3v2s27 f3v13s38 65.000000 +f3v2s27 f3v7s32 63.000000 +f3v2s27 f3v1s26 63.000000 +f3v2s27 f3v6s31 63.000000 +f3v2s27 f1v13s20 38.000000 +f3v2s27 f2v2s24 35.000000 +f3v2s27 f3v11s36 62.000000 +f3v2s27 f0v5s5 40.000000 +f3v2s27 f1v11s18 39.000000 +f3v2s27 f0v6s6 40.000000 +f3v2s27 f3v4s29 64.000000 +f3v2s27 f0v2s2 41.000000 +f3v2s27 f3v12s37 64.000000 +f3v2s27 f0v3s3 41.000000 +f3v2s27 f3v14s39 65.000000 +f3v2s27 f0v0s0 41.000000 +f3v2s27 f1v12s19 38.000000 +f4v1s41 f2v0s22 39.000000 +f4v1s41 f1v2s9 38.000000 +f4v1s41 f1v3s10 35.000000 +f4v1s41 f3v0s25 36.000000 +f4v1s41 f3v3s28 36.000000 +f4v1s41 f3v13s38 37.000000 +f4v1s41 f3v7s32 35.000000 +f4v1s41 f3v1s26 36.000000 +f4v1s41 f3v6s31 35.000000 +f4v1s41 f1v13s20 34.000000 +f4v1s41 f2v2s24 34.000000 +f4v1s41 f3v11s36 36.000000 +f4v1s41 f0v5s5 38.000000 +f4v1s41 f1v11s18 35.000000 +f4v1s41 f0v6s6 39.000000 +f4v1s41 f3v4s29 38.000000 +f4v1s41 f0v2s2 39.000000 +f4v1s41 f3v12s37 37.000000 +f4v1s41 f0v3s3 37.000000 +f4v1s41 f3v14s39 36.000000 +f4v1s41 f0v0s0 38.000000 +f4v1s41 f1v12s19 33.000000 +f2v0s22 f1v2s9 67.000000 +f2v0s22 f1v3s10 39.000000 +f2v0s22 f3v0s25 41.000000 +f2v0s22 f3v3s28 41.000000 +f2v0s22 f3v13s38 41.000000 +f2v0s22 f3v7s32 40.000000 +f2v0s22 f3v1s26 40.000000 +f2v0s22 f3v6s31 40.000000 +f2v0s22 f1v13s20 38.000000 +f2v0s22 f2v2s24 35.000000 +f2v0s22 f3v11s36 38.000000 +f2v0s22 f0v5s5 67.000000 +f2v0s22 f1v11s18 39.000000 +f2v0s22 f0v6s6 64.000000 +f2v0s22 f3v4s29 43.000000 +f2v0s22 f0v2s2 69.000000 +f2v0s22 f3v12s37 42.000000 +f2v0s22 f0v3s3 65.000000 +f2v0s22 f3v14s39 41.000000 +f2v0s22 f0v0s0 68.000000 +f2v0s22 f1v12s19 39.000000 +f1v2s9 f1v3s10 38.000000 +f1v2s9 f3v0s25 40.000000 +f1v2s9 f3v3s28 40.000000 +f1v2s9 f3v13s38 40.000000 +f1v2s9 f3v7s32 40.000000 +f1v2s9 f3v1s26 39.000000 +f1v2s9 f3v6s31 40.000000 +f1v2s9 f1v13s20 37.000000 +f1v2s9 f2v2s24 35.000000 +f1v2s9 f3v11s36 37.000000 +f1v2s9 f0v5s5 67.000000 +f1v2s9 f1v11s18 38.000000 +f1v2s9 f0v6s6 64.000000 +f1v2s9 f3v4s29 42.000000 +f1v2s9 f0v2s2 67.000000 +f1v2s9 f3v12s37 40.000000 +f1v2s9 f0v3s3 65.000000 +f1v2s9 f3v14s39 40.000000 +f1v2s9 f0v0s0 68.000000 +f1v2s9 f1v12s19 38.000000 +f1v3s10 f3v0s25 39.000000 +f1v3s10 f3v3s28 39.000000 +f1v3s10 f3v13s38 40.000000 +f1v3s10 f3v7s32 40.000000 +f1v3s10 f3v1s26 39.000000 +f1v3s10 f3v6s31 40.000000 +f1v3s10 f1v13s20 56.000000 +f1v3s10 f2v2s24 34.000000 +f1v3s10 f3v11s36 39.000000 +f1v3s10 f0v5s5 39.000000 +f1v3s10 f1v11s18 57.000000 +f1v3s10 f0v6s6 38.000000 +f1v3s10 f3v4s29 40.000000 +f1v3s10 f0v2s2 39.000000 +f1v3s10 f3v12s37 40.000000 +f1v3s10 f0v3s3 39.000000 +f1v3s10 f3v14s39 39.000000 +f1v3s10 f0v0s0 39.000000 +f1v3s10 f1v12s19 56.000000 +f3v0s25 f3v3s28 65.000000 +f3v0s25 f3v13s38 66.000000 +f3v0s25 f3v7s32 64.000000 +f3v0s25 f3v1s26 64.000000 +f3v0s25 f3v6s31 64.000000 +f3v0s25 f1v13s20 38.000000 +f3v0s25 f2v2s24 35.000000 +f3v0s25 f3v11s36 63.000000 +f3v0s25 f0v5s5 40.000000 +f3v0s25 f1v11s18 39.000000 +f3v0s25 f0v6s6 40.000000 +f3v0s25 f3v4s29 65.000000 +f3v0s25 f0v2s2 41.000000 +f3v0s25 f3v12s37 65.000000 +f3v0s25 f0v3s3 41.000000 +f3v0s25 f3v14s39 66.000000 +f3v0s25 f0v0s0 41.000000 +f3v0s25 f1v12s19 38.000000 +f3v3s28 f3v13s38 65.000000 +f3v3s28 f3v7s32 63.000000 +f3v3s28 f3v1s26 63.000000 +f3v3s28 f3v6s31 63.000000 +f3v3s28 f1v13s20 38.000000 +f3v3s28 f2v2s24 36.000000 +f3v3s28 f3v11s36 62.000000 +f3v3s28 f0v5s5 40.000000 +f3v3s28 f1v11s18 39.000000 +f3v3s28 f0v6s6 40.000000 +f3v3s28 f3v4s29 64.000000 +f3v3s28 f0v2s2 41.000000 +f3v3s28 f3v12s37 64.000000 +f3v3s28 f0v3s3 41.000000 +f3v3s28 f3v14s39 65.000000 +f3v3s28 f0v0s0 41.000000 +f3v3s28 f1v12s19 38.000000 +f3v13s38 f3v7s32 64.000000 +f3v13s38 f3v1s26 64.000000 +f3v13s38 f3v6s31 64.000000 +f3v13s38 f1v13s20 39.000000 +f3v13s38 f2v2s24 36.000000 +f3v13s38 f3v11s36 63.000000 +f3v13s38 f0v5s5 40.000000 +f3v13s38 f1v11s18 40.000000 +f3v13s38 f0v6s6 40.000000 +f3v13s38 f3v4s29 65.000000 +f3v13s38 f0v2s2 41.000000 +f3v13s38 f3v12s37 65.000000 +f3v13s38 f0v3s3 41.000000 +f3v13s38 f3v14s39 66.000000 +f3v13s38 f0v0s0 41.000000 +f3v13s38 f1v12s19 39.000000 +f3v7s32 f3v1s26 62.000000 +f3v7s32 f3v6s31 65.000000 +f3v7s32 f1v13s20 39.000000 +f3v7s32 f2v2s24 34.000000 +f3v7s32 f3v11s36 61.000000 +f3v7s32 f0v5s5 40.000000 +f3v7s32 f1v11s18 40.000000 +f3v7s32 f0v6s6 39.000000 +f3v7s32 f3v4s29 63.000000 +f3v7s32 f0v2s2 40.000000 +f3v7s32 f3v12s37 63.000000 +f3v7s32 f0v3s3 41.000000 +f3v7s32 f3v14s39 64.000000 +f3v7s32 f0v0s0 41.000000 +f3v7s32 f1v12s19 39.000000 +f3v1s26 f3v6s31 62.000000 +f3v1s26 f1v13s20 38.000000 +f3v1s26 f2v2s24 35.000000 +f3v1s26 f3v11s36 61.000000 +f3v1s26 f0v5s5 39.000000 +f3v1s26 f1v11s18 39.000000 +f3v1s26 f0v6s6 39.000000 +f3v1s26 f3v4s29 63.000000 +f3v1s26 f0v2s2 40.000000 +f3v1s26 f3v12s37 63.000000 +f3v1s26 f0v3s3 40.000000 +f3v1s26 f3v14s39 64.000000 +f3v1s26 f0v0s0 40.000000 +f3v1s26 f1v12s19 38.000000 +f3v6s31 f1v13s20 39.000000 +f3v6s31 f2v2s24 34.000000 +f3v6s31 f3v11s36 61.000000 +f3v6s31 f0v5s5 40.000000 +f3v6s31 f1v11s18 40.000000 +f3v6s31 f0v6s6 39.000000 +f3v6s31 f3v4s29 63.000000 +f3v6s31 f0v2s2 40.000000 +f3v6s31 f3v12s37 63.000000 +f3v6s31 f0v3s3 41.000000 +f3v6s31 f3v14s39 64.000000 +f3v6s31 f0v0s0 41.000000 +f3v6s31 f1v12s19 39.000000 +f1v13s20 f2v2s24 34.000000 +f1v13s20 f3v11s36 38.000000 +f1v13s20 f0v5s5 39.000000 +f1v13s20 f1v11s18 55.000000 +f1v13s20 f0v6s6 37.000000 +f1v13s20 f3v4s29 39.000000 +f1v13s20 f0v2s2 38.000000 +f1v13s20 f3v12s37 39.000000 +f1v13s20 f0v3s3 38.000000 +f1v13s20 f3v14s39 38.000000 +f1v13s20 f0v0s0 38.000000 +f1v13s20 f1v12s19 54.000000 +f2v2s24 f3v11s36 34.000000 +f2v2s24 f0v5s5 35.000000 +f2v2s24 f1v11s18 34.000000 +f2v2s24 f0v6s6 35.000000 +f2v2s24 f3v4s29 36.000000 +f2v2s24 f0v2s2 35.000000 +f2v2s24 f3v12s37 36.000000 +f2v2s24 f0v3s3 34.000000 +f2v2s24 f3v14s39 35.000000 +f2v2s24 f0v0s0 35.000000 +f2v2s24 f1v12s19 33.000000 +f3v11s36 f0v5s5 38.000000 +f3v11s36 f1v11s18 39.000000 +f3v11s36 f0v6s6 38.000000 +f3v11s36 f3v4s29 62.000000 +f3v11s36 f0v2s2 38.000000 +f3v11s36 f3v12s37 62.000000 +f3v11s36 f0v3s3 38.000000 +f3v11s36 f3v14s39 63.000000 +f3v11s36 f0v0s0 38.000000 +f3v11s36 f1v12s19 38.000000 +f0v5s5 f1v11s18 40.000000 +f0v5s5 f0v6s6 64.000000 +f0v5s5 f3v4s29 42.000000 +f0v5s5 f0v2s2 67.000000 +f0v5s5 f3v12s37 40.000000 +f0v5s5 f0v3s3 65.000000 +f0v5s5 f3v14s39 40.000000 +f0v5s5 f0v0s0 68.000000 +f0v5s5 f1v12s19 38.000000 +f1v11s18 f0v6s6 38.000000 +f1v11s18 f3v4s29 40.000000 +f1v11s18 f0v2s2 39.000000 +f1v11s18 f3v12s37 40.000000 +f1v11s18 f0v3s3 39.000000 +f1v11s18 f3v14s39 39.000000 +f1v11s18 f0v0s0 39.000000 +f1v11s18 f1v12s19 55.000000 +f0v6s6 f3v4s29 42.000000 +f0v6s6 f0v2s2 64.000000 +f0v6s6 f3v12s37 40.000000 +f0v6s6 f0v3s3 62.000000 +f0v6s6 f3v14s39 40.000000 +f0v6s6 f0v0s0 65.000000 +f0v6s6 f1v12s19 38.000000 +f3v4s29 f0v2s2 43.000000 +f3v4s29 f3v12s37 64.000000 +f3v4s29 f0v3s3 43.000000 +f3v4s29 f3v14s39 65.000000 +f3v4s29 f0v0s0 43.000000 +f3v4s29 f1v12s19 39.000000 +f0v2s2 f3v12s37 42.000000 +f0v2s2 f0v3s3 65.000000 +f0v2s2 f3v14s39 41.000000 +f0v2s2 f0v0s0 68.000000 +f0v2s2 f1v12s19 39.000000 +f3v12s37 f0v3s3 41.000000 +f3v12s37 f3v14s39 65.000000 +f3v12s37 f0v0s0 41.000000 +f3v12s37 f1v12s19 39.000000 +f0v3s3 f3v14s39 41.000000 +f0v3s3 f0v0s0 66.000000 +f0v3s3 f1v12s19 38.000000 +f3v14s39 f0v0s0 41.000000 +f3v14s39 f1v12s19 38.000000 +f0v0s0 f1v12s19 39.000000 diff --git a/pkg/obitools/obialign/testdata/one_allshortest.expected b/pkg/obitools/obialign/testdata/one_allshortest.expected new file mode 100644 index 0000000..11cba2c --- /dev/null +++ b/pkg/obitools/obialign/testdata/one_allshortest.expected @@ -0,0 +1,903 @@ +f3v10s35 f3v5s30 0.920635 +f3v10s35 f1v8s15 0.649123 +f3v10s35 f2v1s23 0.655172 +f3v10s35 f4v2s42 0.622951 +f3v10s35 f0v4s4 0.615385 +f3v10s35 f1v6s13 0.660714 +f3v10s35 f3v8s33 0.938462 +f3v10s35 f1v1s8 0.650000 +f3v10s35 f1v14s21 0.678571 +f3v10s35 f0v1s1 0.615385 +f3v10s35 f1v5s12 0.633333 +f3v10s35 f1v4s11 0.655172 +f3v10s35 f1v9s16 0.650000 +f3v10s35 f1v10s17 0.650000 +f3v10s35 f1v0s7 0.655172 +f3v10s35 f3v9s34 0.938462 +f3v10s35 f4v0s40 0.633333 +f3v10s35 f1v7s14 0.655172 +f3v10s35 f3v2s27 0.938462 +f3v10s35 f4v1s41 0.622951 +f3v10s35 f2v0s22 0.615385 +f3v10s35 f1v2s9 0.615385 +f3v10s35 f1v3s10 0.655172 +f3v10s35 f3v0s25 0.953846 +f3v10s35 f3v3s28 0.938462 +f3v10s35 f3v13s38 0.953846 +f3v10s35 f3v7s32 0.938462 +f3v10s35 f3v1s26 0.938462 +f3v10s35 f3v6s31 0.938462 +f3v10s35 f1v13s20 0.660714 +f3v10s35 f2v2s24 0.714286 +f3v10s35 f3v11s36 0.907692 +f3v10s35 f0v5s5 0.600000 +f3v10s35 f1v11s18 0.655172 +f3v10s35 f0v6s6 0.584615 +f3v10s35 f3v4s29 0.938462 +f3v10s35 f0v2s2 0.615385 +f3v10s35 f3v12s37 0.938462 +f3v10s35 f0v3s3 0.615385 +f3v10s35 f3v14s39 0.953846 +f3v10s35 f0v0s0 0.615385 +f3v10s35 f1v12s19 0.649123 +f3v5s30 f1v8s15 0.666667 +f3v5s30 f2v1s23 0.655172 +f3v5s30 f4v2s42 0.606557 +f3v5s30 f0v4s4 0.619048 +f3v5s30 f1v6s13 0.696429 +f3v5s30 f3v8s33 0.968254 +f3v5s30 f1v1s8 0.650000 +f3v5s30 f1v14s21 0.660714 +f3v5s30 f0v1s1 0.619048 +f3v5s30 f1v5s12 0.633333 +f3v5s30 f1v4s11 0.655172 +f3v5s30 f1v9s16 0.633333 +f3v5s30 f1v10s17 0.650000 +f3v5s30 f1v0s7 0.655172 +f3v5s30 f3v9s34 0.952381 +f3v5s30 f4v0s40 0.616667 +f3v5s30 f1v7s14 0.655172 +f3v5s30 f3v2s27 0.968254 +f3v5s30 f4v1s41 0.606557 +f3v5s30 f2v0s22 0.634921 +f3v5s30 f1v2s9 0.619048 +f3v5s30 f1v3s10 0.655172 +f3v5s30 f3v0s25 0.984127 +f3v5s30 f3v3s28 0.968254 +f3v5s30 f3v13s38 0.984127 +f3v5s30 f3v7s32 0.952381 +f3v5s30 f3v1s26 0.968254 +f3v5s30 f3v6s31 0.952381 +f3v5s30 f1v13s20 0.678571 +f3v5s30 f2v2s24 0.693878 +f3v5s30 f3v11s36 0.936508 +f3v5s30 f0v5s5 0.619048 +f3v5s30 f1v11s18 0.655172 +f3v5s30 f0v6s6 0.650794 +f3v5s30 f3v4s29 0.968254 +f3v5s30 f0v2s2 0.634921 +f3v5s30 f3v12s37 0.968254 +f3v5s30 f0v3s3 0.634921 +f3v5s30 f3v14s39 0.984127 +f3v5s30 f0v0s0 0.634921 +f3v5s30 f1v12s19 0.649123 +f1v8s15 f2v1s23 1.000000 +f1v8s15 f4v2s42 0.596491 +f1v8s15 f0v4s4 0.666667 +f1v8s15 f1v6s13 0.964286 +f1v8s15 f3v8s33 0.684211 +f1v8s15 f1v1s8 0.964912 +f1v8s15 f1v14s21 0.964286 +f1v8s15 f0v1s1 0.666667 +f1v8s15 f1v5s12 0.964912 +f1v8s15 f1v4s11 1.000000 +f1v8s15 f1v9s16 0.982456 +f1v8s15 f1v10s17 0.964912 +f1v8s15 f1v0s7 1.000000 +f1v8s15 f3v9s34 0.701754 +f1v8s15 f4v0s40 0.614035 +f1v8s15 f1v7s14 1.000000 +f1v8s15 f3v2s27 0.684211 +f1v8s15 f4v1s41 0.614035 +f1v8s15 f2v0s22 0.684211 +f1v8s15 f1v2s9 0.666667 +f1v8s15 f1v3s10 1.000000 +f1v8s15 f3v0s25 0.684211 +f1v8s15 f3v3s28 0.684211 +f1v8s15 f3v13s38 0.701754 +f1v8s15 f3v7s32 0.701754 +f1v8s15 f3v1s26 0.684211 +f1v8s15 f3v6s31 0.701754 +f1v8s15 f1v13s20 0.982143 +f1v8s15 f2v2s24 0.693878 +f1v8s15 f3v11s36 0.684211 +f1v8s15 f0v5s5 0.684211 +f1v8s15 f1v11s18 0.982456 +f1v8s15 f0v6s6 0.666667 +f1v8s15 f3v4s29 0.701754 +f1v8s15 f0v2s2 0.684211 +f1v8s15 f3v12s37 0.701754 +f1v8s15 f0v3s3 0.684211 +f1v8s15 f3v14s39 0.684211 +f1v8s15 f0v0s0 0.684211 +f1v8s15 f1v12s19 0.964912 +f2v1s23 f4v2s42 0.586207 +f2v1s23 f0v4s4 0.655172 +f2v1s23 f1v6s13 0.964286 +f2v1s23 f3v8s33 0.672414 +f2v1s23 f1v1s8 0.965517 +f2v1s23 f1v14s21 0.982143 +f2v1s23 f0v1s1 0.655172 +f2v1s23 f1v5s12 0.965517 +f2v1s23 f1v4s11 1.000000 +f2v1s23 f1v9s16 0.982759 +f2v1s23 f1v10s17 0.965517 +f2v1s23 f1v0s7 1.000000 +f2v1s23 f3v9s34 0.689655 +f2v1s23 f4v0s40 0.603448 +f2v1s23 f1v7s14 1.000000 +f2v1s23 f3v2s27 0.672414 +f2v1s23 f4v1s41 0.603448 +f2v1s23 f2v0s22 0.672414 +f2v1s23 f1v2s9 0.655172 +f2v1s23 f1v3s10 1.000000 +f2v1s23 f3v0s25 0.672414 +f2v1s23 f3v3s28 0.672414 +f2v1s23 f3v13s38 0.689655 +f2v1s23 f3v7s32 0.689655 +f2v1s23 f3v1s26 0.672414 +f2v1s23 f3v6s31 0.689655 +f2v1s23 f1v13s20 1.000000 +f2v1s23 f2v2s24 0.693878 +f2v1s23 f3v11s36 0.672414 +f2v1s23 f0v5s5 0.672414 +f2v1s23 f1v11s18 0.982759 +f2v1s23 f0v6s6 0.655172 +f2v1s23 f3v4s29 0.689655 +f2v1s23 f0v2s2 0.672414 +f2v1s23 f3v12s37 0.689655 +f2v1s23 f0v3s3 0.672414 +f2v1s23 f3v14s39 0.672414 +f2v1s23 f0v0s0 0.672414 +f2v1s23 f1v12s19 0.982456 +f4v2s42 f0v4s4 0.639344 +f4v2s42 f1v6s13 0.589286 +f4v2s42 f3v8s33 0.606557 +f4v2s42 f1v1s8 0.600000 +f4v2s42 f1v14s21 0.589286 +f4v2s42 f0v1s1 0.639344 +f4v2s42 f1v5s12 0.566667 +f4v2s42 f1v4s11 0.586207 +f4v2s42 f1v9s16 0.600000 +f4v2s42 f1v10s17 0.583333 +f4v2s42 f1v0s7 0.586207 +f4v2s42 f3v9s34 0.573770 +f4v2s42 f4v0s40 0.983333 +f4v2s42 f1v7s14 0.586207 +f4v2s42 f3v2s27 0.590164 +f4v2s42 f4v1s41 0.967213 +f4v2s42 f2v0s22 0.672131 +f4v2s42 f1v2s9 0.639344 +f4v2s42 f1v3s10 0.586207 +f4v2s42 f3v0s25 0.590164 +f4v2s42 f3v3s28 0.590164 +f4v2s42 f3v13s38 0.606557 +f4v2s42 f3v7s32 0.573770 +f4v2s42 f3v1s26 0.590164 +f4v2s42 f3v6s31 0.573770 +f4v2s42 f1v13s20 0.589286 +f4v2s42 f2v2s24 0.714286 +f4v2s42 f3v11s36 0.590164 +f4v2s42 f0v5s5 0.655738 +f4v2s42 f1v11s18 0.586207 +f4v2s42 f0v6s6 0.672131 +f4v2s42 f3v4s29 0.622951 +f4v2s42 f0v2s2 0.672131 +f4v2s42 f3v12s37 0.606557 +f4v2s42 f0v3s3 0.639344 +f4v2s42 f3v14s39 0.590164 +f4v2s42 f0v0s0 0.655738 +f4v2s42 f1v12s19 0.578947 +f0v4s4 f1v6s13 0.660714 +f0v4s4 f3v8s33 0.621212 +f0v4s4 f1v1s8 0.633333 +f0v4s4 f1v14s21 0.678571 +f0v4s4 f0v1s1 1.000000 +f0v4s4 f1v5s12 0.650000 +f0v4s4 f1v4s11 0.655172 +f0v4s4 f1v9s16 0.650000 +f0v4s4 f1v10s17 0.650000 +f0v4s4 f1v0s7 0.655172 +f0v4s4 f3v9s34 0.615385 +f0v4s4 f4v0s40 0.633333 +f0v4s4 f1v7s14 0.655172 +f0v4s4 f3v2s27 0.615385 +f0v4s4 f4v1s41 0.622951 +f0v4s4 f2v0s22 0.971014 +f0v4s4 f1v2s9 1.000000 +f0v4s4 f1v3s10 0.655172 +f0v4s4 f3v0s25 0.606061 +f0v4s4 f3v3s28 0.606061 +f0v4s4 f3v13s38 0.588235 +f0v4s4 f3v7s32 0.615385 +f0v4s4 f3v1s26 0.600000 +f0v4s4 f3v6s31 0.615385 +f0v4s4 f1v13s20 0.660714 +f0v4s4 f2v2s24 0.714286 +f0v4s4 f3v11s36 0.569231 +f0v4s4 f0v5s5 0.971014 +f0v4s4 f1v11s18 0.655172 +f0v4s4 f0v6s6 0.927536 +f0v4s4 f3v4s29 0.617647 +f0v4s4 f0v2s2 0.971014 +f0v4s4 f3v12s37 0.597015 +f0v4s4 f0v3s3 0.970149 +f0v4s4 f3v14s39 0.606061 +f0v4s4 f0v0s0 0.985507 +f0v4s4 f1v12s19 0.666667 +f1v6s13 f3v8s33 0.696429 +f1v6s13 f1v1s8 0.928571 +f1v6s13 f1v14s21 0.910714 +f1v6s13 f0v1s1 0.660714 +f1v6s13 f1v5s12 0.928571 +f1v6s13 f1v4s11 0.964286 +f1v6s13 f1v9s16 0.946429 +f1v6s13 f1v10s17 0.946429 +f1v6s13 f1v0s7 0.964286 +f1v6s13 f3v9s34 0.696429 +f1v6s13 f4v0s40 0.607143 +f1v6s13 f1v7s14 0.964286 +f1v6s13 f3v2s27 0.696429 +f1v6s13 f4v1s41 0.607143 +f1v6s13 f2v0s22 0.678571 +f1v6s13 f1v2s9 0.660714 +f1v6s13 f1v3s10 0.964286 +f1v6s13 f3v0s25 0.696429 +f1v6s13 f3v3s28 0.696429 +f1v6s13 f3v13s38 0.696429 +f1v6s13 f3v7s32 0.696429 +f1v6s13 f3v1s26 0.696429 +f1v6s13 f3v6s31 0.696429 +f1v6s13 f1v13s20 0.928571 +f1v6s13 f2v2s24 0.673469 +f1v6s13 f3v11s36 0.696429 +f1v6s13 f0v5s5 0.678571 +f1v6s13 f1v11s18 0.946429 +f1v6s13 f0v6s6 0.678571 +f1v6s13 f3v4s29 0.714286 +f1v6s13 f0v2s2 0.678571 +f1v6s13 f3v12s37 0.714286 +f1v6s13 f0v3s3 0.660714 +f1v6s13 f3v14s39 0.696429 +f1v6s13 f0v0s0 0.678571 +f1v6s13 f1v12s19 0.928571 +f3v8s33 f1v1s8 0.666667 +f3v8s33 f1v14s21 0.678571 +f3v8s33 f0v1s1 0.621212 +f3v8s33 f1v5s12 0.650000 +f3v8s33 f1v4s11 0.672414 +f3v8s33 f1v9s16 0.650000 +f3v8s33 f1v10s17 0.666667 +f3v8s33 f1v0s7 0.672414 +f3v8s33 f3v9s34 0.969231 +f3v8s33 f4v0s40 0.616667 +f3v8s33 f1v7s14 0.672414 +f3v8s33 f3v2s27 0.984615 +f3v8s33 f4v1s41 0.606557 +f3v8s33 f2v0s22 0.636364 +f3v8s33 f1v2s9 0.621212 +f3v8s33 f1v3s10 0.672414 +f3v8s33 f3v0s25 0.984848 +f3v8s33 f3v3s28 0.969697 +f3v8s33 f3v13s38 0.984848 +f3v8s33 f3v7s32 0.969231 +f3v8s33 f3v1s26 0.969231 +f3v8s33 f3v6s31 0.969231 +f3v8s33 f1v13s20 0.678571 +f3v8s33 f2v2s24 0.693878 +f3v8s33 f3v11s36 0.953846 +f3v8s33 f0v5s5 0.621212 +f3v8s33 f1v11s18 0.672414 +f3v8s33 f0v6s6 0.621212 +f3v8s33 f3v4s29 0.969697 +f3v8s33 f0v2s2 0.636364 +f3v8s33 f3v12s37 0.969697 +f3v8s33 f0v3s3 0.621212 +f3v8s33 f3v14s39 0.984848 +f3v8s33 f0v0s0 0.636364 +f3v8s33 f1v12s19 0.666667 +f1v1s8 f1v14s21 0.982143 +f1v1s8 f0v1s1 0.633333 +f1v1s8 f1v5s12 0.900000 +f1v1s8 f1v4s11 0.965517 +f1v1s8 f1v9s16 0.916667 +f1v1s8 f1v10s17 0.900000 +f1v1s8 f1v0s7 0.965517 +f1v1s8 f3v9s34 0.683333 +f1v1s8 f4v0s40 0.600000 +f1v1s8 f1v7s14 0.965517 +f1v1s8 f3v2s27 0.666667 +f1v1s8 f4v1s41 0.600000 +f1v1s8 f2v0s22 0.650000 +f1v1s8 f1v2s9 0.633333 +f1v1s8 f1v3s10 0.965517 +f1v1s8 f3v0s25 0.666667 +f1v1s8 f3v3s28 0.666667 +f1v1s8 f3v13s38 0.683333 +f1v1s8 f3v7s32 0.683333 +f1v1s8 f3v1s26 0.666667 +f1v1s8 f3v6s31 0.683333 +f1v1s8 f1v13s20 0.964286 +f1v1s8 f2v2s24 0.673469 +f1v1s8 f3v11s36 0.650000 +f1v1s8 f0v5s5 0.650000 +f1v1s8 f1v11s18 0.948276 +f1v1s8 f0v6s6 0.633333 +f1v1s8 f3v4s29 0.683333 +f1v1s8 f0v2s2 0.650000 +f1v1s8 f3v12s37 0.683333 +f1v1s8 f0v3s3 0.650000 +f1v1s8 f3v14s39 0.666667 +f1v1s8 f0v0s0 0.650000 +f1v1s8 f1v12s19 0.964912 +f1v14s21 f0v1s1 0.678571 +f1v14s21 f1v5s12 0.946429 +f1v14s21 f1v4s11 0.982143 +f1v14s21 f1v9s16 0.964286 +f1v14s21 f1v10s17 0.946429 +f1v14s21 f1v0s7 0.982143 +f1v14s21 f3v9s34 0.696429 +f1v14s21 f4v0s40 0.589286 +f1v14s21 f1v7s14 0.982143 +f1v14s21 f3v2s27 0.678571 +f1v14s21 f4v1s41 0.607143 +f1v14s21 f2v0s22 0.696429 +f1v14s21 f1v2s9 0.678571 +f1v14s21 f1v3s10 0.982143 +f1v14s21 f3v0s25 0.678571 +f1v14s21 f3v3s28 0.678571 +f1v14s21 f3v13s38 0.678571 +f1v14s21 f3v7s32 0.696429 +f1v14s21 f3v1s26 0.678571 +f1v14s21 f3v6s31 0.696429 +f1v14s21 f1v13s20 0.946429 +f1v14s21 f2v2s24 0.693878 +f1v14s21 f3v11s36 0.678571 +f1v14s21 f0v5s5 0.696429 +f1v14s21 f1v11s18 0.964286 +f1v14s21 f0v6s6 0.678571 +f1v14s21 f3v4s29 0.696429 +f1v14s21 f0v2s2 0.696429 +f1v14s21 f3v12s37 0.696429 +f1v14s21 f0v3s3 0.696429 +f1v14s21 f3v14s39 0.678571 +f1v14s21 f0v0s0 0.696429 +f1v14s21 f1v12s19 0.946429 +f0v1s1 f1v5s12 0.650000 +f0v1s1 f1v4s11 0.655172 +f0v1s1 f1v9s16 0.650000 +f0v1s1 f1v10s17 0.650000 +f0v1s1 f1v0s7 0.655172 +f0v1s1 f3v9s34 0.615385 +f0v1s1 f4v0s40 0.633333 +f0v1s1 f1v7s14 0.655172 +f0v1s1 f3v2s27 0.615385 +f0v1s1 f4v1s41 0.622951 +f0v1s1 f2v0s22 0.971014 +f0v1s1 f1v2s9 1.000000 +f0v1s1 f1v3s10 0.655172 +f0v1s1 f3v0s25 0.606061 +f0v1s1 f3v3s28 0.606061 +f0v1s1 f3v13s38 0.588235 +f0v1s1 f3v7s32 0.615385 +f0v1s1 f3v1s26 0.600000 +f0v1s1 f3v6s31 0.615385 +f0v1s1 f1v13s20 0.660714 +f0v1s1 f2v2s24 0.714286 +f0v1s1 f3v11s36 0.569231 +f0v1s1 f0v5s5 0.971014 +f0v1s1 f1v11s18 0.655172 +f0v1s1 f0v6s6 0.927536 +f0v1s1 f3v4s29 0.617647 +f0v1s1 f0v2s2 0.971014 +f0v1s1 f3v12s37 0.597015 +f0v1s1 f0v3s3 0.970149 +f0v1s1 f3v14s39 0.606061 +f0v1s1 f0v0s0 0.985507 +f0v1s1 f1v12s19 0.666667 +f1v5s12 f1v4s11 0.965517 +f1v5s12 f1v9s16 0.916667 +f1v5s12 f1v10s17 0.916667 +f1v5s12 f1v0s7 0.965517 +f1v5s12 f3v9s34 0.666667 +f1v5s12 f4v0s40 0.583333 +f1v5s12 f1v7s14 0.965517 +f1v5s12 f3v2s27 0.650000 +f1v5s12 f4v1s41 0.583333 +f1v5s12 f2v0s22 0.666667 +f1v5s12 f1v2s9 0.650000 +f1v5s12 f1v3s10 0.965517 +f1v5s12 f3v0s25 0.650000 +f1v5s12 f3v3s28 0.633333 +f1v5s12 f3v13s38 0.666667 +f1v5s12 f3v7s32 0.666667 +f1v5s12 f3v1s26 0.633333 +f1v5s12 f3v6s31 0.666667 +f1v5s12 f1v13s20 0.964286 +f1v5s12 f2v2s24 0.653061 +f1v5s12 f3v11s36 0.650000 +f1v5s12 f0v5s5 0.650000 +f1v5s12 f1v11s18 0.948276 +f1v5s12 f0v6s6 0.650000 +f1v5s12 f3v4s29 0.666667 +f1v5s12 f0v2s2 0.666667 +f1v5s12 f3v12s37 0.666667 +f1v5s12 f0v3s3 0.650000 +f1v5s12 f3v14s39 0.650000 +f1v5s12 f0v0s0 0.666667 +f1v5s12 f1v12s19 0.964912 +f1v4s11 f1v9s16 0.982759 +f1v4s11 f1v10s17 0.965517 +f1v4s11 f1v0s7 1.000000 +f1v4s11 f3v9s34 0.689655 +f1v4s11 f4v0s40 0.603448 +f1v4s11 f1v7s14 1.000000 +f1v4s11 f3v2s27 0.672414 +f1v4s11 f4v1s41 0.603448 +f1v4s11 f2v0s22 0.672414 +f1v4s11 f1v2s9 0.655172 +f1v4s11 f1v3s10 1.000000 +f1v4s11 f3v0s25 0.672414 +f1v4s11 f3v3s28 0.672414 +f1v4s11 f3v13s38 0.689655 +f1v4s11 f3v7s32 0.689655 +f1v4s11 f3v1s26 0.672414 +f1v4s11 f3v6s31 0.689655 +f1v4s11 f1v13s20 1.000000 +f1v4s11 f2v2s24 0.693878 +f1v4s11 f3v11s36 0.672414 +f1v4s11 f0v5s5 0.672414 +f1v4s11 f1v11s18 0.982759 +f1v4s11 f0v6s6 0.655172 +f1v4s11 f3v4s29 0.689655 +f1v4s11 f0v2s2 0.672414 +f1v4s11 f3v12s37 0.689655 +f1v4s11 f0v3s3 0.672414 +f1v4s11 f3v14s39 0.672414 +f1v4s11 f0v0s0 0.672414 +f1v4s11 f1v12s19 0.982456 +f1v9s16 f1v10s17 0.916667 +f1v9s16 f1v0s7 0.982759 +f1v9s16 f3v9s34 0.650000 +f1v9s16 f4v0s40 0.600000 +f1v9s16 f1v7s14 0.982759 +f1v9s16 f3v2s27 0.650000 +f1v9s16 f4v1s41 0.600000 +f1v9s16 f2v0s22 0.666667 +f1v9s16 f1v2s9 0.650000 +f1v9s16 f1v3s10 0.982759 +f1v9s16 f3v0s25 0.650000 +f1v9s16 f3v3s28 0.650000 +f1v9s16 f3v13s38 0.666667 +f1v9s16 f3v7s32 0.650000 +f1v9s16 f3v1s26 0.633333 +f1v9s16 f3v6s31 0.650000 +f1v9s16 f1v13s20 0.982143 +f1v9s16 f2v2s24 0.714286 +f1v9s16 f3v11s36 0.650000 +f1v9s16 f0v5s5 0.666667 +f1v9s16 f1v11s18 0.965517 +f1v9s16 f0v6s6 0.650000 +f1v9s16 f3v4s29 0.666667 +f1v9s16 f0v2s2 0.666667 +f1v9s16 f3v12s37 0.666667 +f1v9s16 f0v3s3 0.683333 +f1v9s16 f3v14s39 0.650000 +f1v9s16 f0v0s0 0.666667 +f1v9s16 f1v12s19 0.964912 +f1v10s17 f1v0s7 0.965517 +f1v10s17 f3v9s34 0.683333 +f1v10s17 f4v0s40 0.583333 +f1v10s17 f1v7s14 0.965517 +f1v10s17 f3v2s27 0.666667 +f1v10s17 f4v1s41 0.600000 +f1v10s17 f2v0s22 0.650000 +f1v10s17 f1v2s9 0.650000 +f1v10s17 f1v3s10 0.965517 +f1v10s17 f3v0s25 0.666667 +f1v10s17 f3v3s28 0.666667 +f1v10s17 f3v13s38 0.683333 +f1v10s17 f3v7s32 0.683333 +f1v10s17 f3v1s26 0.650000 +f1v10s17 f3v6s31 0.683333 +f1v10s17 f1v13s20 0.964286 +f1v10s17 f2v2s24 0.673469 +f1v10s17 f3v11s36 0.683333 +f1v10s17 f0v5s5 0.650000 +f1v10s17 f1v11s18 0.948276 +f1v10s17 f0v6s6 0.650000 +f1v10s17 f3v4s29 0.666667 +f1v10s17 f0v2s2 0.650000 +f1v10s17 f3v12s37 0.683333 +f1v10s17 f0v3s3 0.666667 +f1v10s17 f3v14s39 0.666667 +f1v10s17 f0v0s0 0.666667 +f1v10s17 f1v12s19 0.964912 +f1v0s7 f3v9s34 0.689655 +f1v0s7 f4v0s40 0.603448 +f1v0s7 f1v7s14 1.000000 +f1v0s7 f3v2s27 0.672414 +f1v0s7 f4v1s41 0.603448 +f1v0s7 f2v0s22 0.672414 +f1v0s7 f1v2s9 0.655172 +f1v0s7 f1v3s10 1.000000 +f1v0s7 f3v0s25 0.672414 +f1v0s7 f3v3s28 0.672414 +f1v0s7 f3v13s38 0.689655 +f1v0s7 f3v7s32 0.689655 +f1v0s7 f3v1s26 0.672414 +f1v0s7 f3v6s31 0.689655 +f1v0s7 f1v13s20 1.000000 +f1v0s7 f2v2s24 0.693878 +f1v0s7 f3v11s36 0.672414 +f1v0s7 f0v5s5 0.672414 +f1v0s7 f1v11s18 0.982759 +f1v0s7 f0v6s6 0.655172 +f1v0s7 f3v4s29 0.689655 +f1v0s7 f0v2s2 0.672414 +f1v0s7 f3v12s37 0.689655 +f1v0s7 f0v3s3 0.672414 +f1v0s7 f3v14s39 0.672414 +f1v0s7 f0v0s0 0.672414 +f1v0s7 f1v12s19 0.982456 +f3v9s34 f4v0s40 0.583333 +f3v9s34 f1v7s14 0.689655 +f3v9s34 f3v2s27 0.969231 +f3v9s34 f4v1s41 0.573770 +f3v9s34 f2v0s22 0.615385 +f3v9s34 f1v2s9 0.615385 +f3v9s34 f1v3s10 0.689655 +f3v9s34 f3v0s25 0.984615 +f3v9s34 f3v3s28 0.969231 +f3v9s34 f3v13s38 0.984615 +f3v9s34 f3v7s32 1.000000 +f3v9s34 f3v1s26 0.953846 +f3v9s34 f3v6s31 1.000000 +f3v9s34 f1v13s20 0.696429 +f3v9s34 f2v2s24 0.693878 +f3v9s34 f3v11s36 0.938462 +f3v9s34 f0v5s5 0.615385 +f3v9s34 f1v11s18 0.689655 +f3v9s34 f0v6s6 0.600000 +f3v9s34 f3v4s29 0.969231 +f3v9s34 f0v2s2 0.615385 +f3v9s34 f3v12s37 0.969231 +f3v9s34 f0v3s3 0.630769 +f3v9s34 f3v14s39 0.984615 +f3v9s34 f0v0s0 0.630769 +f3v9s34 f1v12s19 0.684211 +f4v0s40 f1v7s14 0.603448 +f4v0s40 f3v2s27 0.600000 +f4v0s40 f4v1s41 1.000000 +f4v0s40 f2v0s22 0.650000 +f4v0s40 f1v2s9 0.633333 +f4v0s40 f1v3s10 0.603448 +f4v0s40 f3v0s25 0.600000 +f4v0s40 f3v3s28 0.600000 +f4v0s40 f3v13s38 0.616667 +f4v0s40 f3v7s32 0.583333 +f4v0s40 f3v1s26 0.600000 +f4v0s40 f3v6s31 0.583333 +f4v0s40 f1v13s20 0.607143 +f4v0s40 f2v2s24 0.693878 +f4v0s40 f3v11s36 0.600000 +f4v0s40 f0v5s5 0.633333 +f4v0s40 f1v11s18 0.603448 +f4v0s40 f0v6s6 0.650000 +f4v0s40 f3v4s29 0.633333 +f4v0s40 f0v2s2 0.650000 +f4v0s40 f3v12s37 0.616667 +f4v0s40 f0v3s3 0.616667 +f4v0s40 f3v14s39 0.600000 +f4v0s40 f0v0s0 0.633333 +f4v0s40 f1v12s19 0.578947 +f1v7s14 f3v2s27 0.672414 +f1v7s14 f4v1s41 0.603448 +f1v7s14 f2v0s22 0.672414 +f1v7s14 f1v2s9 0.655172 +f1v7s14 f1v3s10 1.000000 +f1v7s14 f3v0s25 0.672414 +f1v7s14 f3v3s28 0.672414 +f1v7s14 f3v13s38 0.689655 +f1v7s14 f3v7s32 0.689655 +f1v7s14 f3v1s26 0.672414 +f1v7s14 f3v6s31 0.689655 +f1v7s14 f1v13s20 1.000000 +f1v7s14 f2v2s24 0.693878 +f1v7s14 f3v11s36 0.672414 +f1v7s14 f0v5s5 0.672414 +f1v7s14 f1v11s18 0.982759 +f1v7s14 f0v6s6 0.655172 +f1v7s14 f3v4s29 0.689655 +f1v7s14 f0v2s2 0.672414 +f1v7s14 f3v12s37 0.689655 +f1v7s14 f0v3s3 0.672414 +f1v7s14 f3v14s39 0.672414 +f1v7s14 f0v0s0 0.672414 +f1v7s14 f1v12s19 0.982456 +f3v2s27 f4v1s41 0.590164 +f3v2s27 f2v0s22 0.630769 +f3v2s27 f1v2s9 0.615385 +f3v2s27 f1v3s10 0.672414 +f3v2s27 f3v0s25 1.000000 +f3v2s27 f3v3s28 0.984615 +f3v2s27 f3v13s38 1.000000 +f3v2s27 f3v7s32 0.969231 +f3v2s27 f3v1s26 0.969231 +f3v2s27 f3v6s31 0.969231 +f3v2s27 f1v13s20 0.678571 +f3v2s27 f2v2s24 0.714286 +f3v2s27 f3v11s36 0.953846 +f3v2s27 f0v5s5 0.615385 +f3v2s27 f1v11s18 0.672414 +f3v2s27 f0v6s6 0.615385 +f3v2s27 f3v4s29 0.984615 +f3v2s27 f0v2s2 0.630769 +f3v2s27 f3v12s37 0.984615 +f3v2s27 f0v3s3 0.630769 +f3v2s27 f3v14s39 1.000000 +f3v2s27 f0v0s0 0.630769 +f3v2s27 f1v12s19 0.666667 +f4v1s41 f2v0s22 0.639344 +f4v1s41 f1v2s9 0.622951 +f4v1s41 f1v3s10 0.603448 +f4v1s41 f3v0s25 0.590164 +f4v1s41 f3v3s28 0.590164 +f4v1s41 f3v13s38 0.606557 +f4v1s41 f3v7s32 0.573770 +f4v1s41 f3v1s26 0.590164 +f4v1s41 f3v6s31 0.573770 +f4v1s41 f1v13s20 0.607143 +f4v1s41 f2v2s24 0.693878 +f4v1s41 f3v11s36 0.590164 +f4v1s41 f0v5s5 0.622951 +f4v1s41 f1v11s18 0.603448 +f4v1s41 f0v6s6 0.639344 +f4v1s41 f3v4s29 0.622951 +f4v1s41 f0v2s2 0.639344 +f4v1s41 f3v12s37 0.606557 +f4v1s41 f0v3s3 0.606557 +f4v1s41 f3v14s39 0.590164 +f4v1s41 f0v0s0 0.622951 +f4v1s41 f1v12s19 0.578947 +f2v0s22 f1v2s9 0.971014 +f2v0s22 f1v3s10 0.672414 +f2v0s22 f3v0s25 0.621212 +f2v0s22 f3v3s28 0.621212 +f2v0s22 f3v13s38 0.602941 +f2v0s22 f3v7s32 0.615385 +f2v0s22 f3v1s26 0.615385 +f2v0s22 f3v6s31 0.615385 +f2v0s22 f1v13s20 0.678571 +f2v0s22 f2v2s24 0.714286 +f2v0s22 f3v11s36 0.584615 +f2v0s22 f0v5s5 0.971014 +f2v0s22 f1v11s18 0.672414 +f2v0s22 f0v6s6 0.927536 +f2v0s22 f3v4s29 0.632353 +f2v0s22 f0v2s2 1.000000 +f2v0s22 f3v12s37 0.626866 +f2v0s22 f0v3s3 0.970149 +f2v0s22 f3v14s39 0.621212 +f2v0s22 f0v0s0 0.985507 +f2v0s22 f1v12s19 0.684211 +f1v2s9 f1v3s10 0.655172 +f1v2s9 f3v0s25 0.606061 +f1v2s9 f3v3s28 0.606061 +f1v2s9 f3v13s38 0.588235 +f1v2s9 f3v7s32 0.615385 +f1v2s9 f3v1s26 0.600000 +f1v2s9 f3v6s31 0.615385 +f1v2s9 f1v13s20 0.660714 +f1v2s9 f2v2s24 0.714286 +f1v2s9 f3v11s36 0.569231 +f1v2s9 f0v5s5 0.971014 +f1v2s9 f1v11s18 0.655172 +f1v2s9 f0v6s6 0.927536 +f1v2s9 f3v4s29 0.617647 +f1v2s9 f0v2s2 0.971014 +f1v2s9 f3v12s37 0.597015 +f1v2s9 f0v3s3 0.970149 +f1v2s9 f3v14s39 0.606061 +f1v2s9 f0v0s0 0.985507 +f1v2s9 f1v12s19 0.666667 +f1v3s10 f3v0s25 0.672414 +f1v3s10 f3v3s28 0.672414 +f1v3s10 f3v13s38 0.689655 +f1v3s10 f3v7s32 0.689655 +f1v3s10 f3v1s26 0.672414 +f1v3s10 f3v6s31 0.689655 +f1v3s10 f1v13s20 1.000000 +f1v3s10 f2v2s24 0.693878 +f1v3s10 f3v11s36 0.672414 +f1v3s10 f0v5s5 0.672414 +f1v3s10 f1v11s18 0.982759 +f1v3s10 f0v6s6 0.655172 +f1v3s10 f3v4s29 0.689655 +f1v3s10 f0v2s2 0.672414 +f1v3s10 f3v12s37 0.689655 +f1v3s10 f0v3s3 0.672414 +f1v3s10 f3v14s39 0.672414 +f1v3s10 f0v0s0 0.672414 +f1v3s10 f1v12s19 0.982456 +f3v0s25 f3v3s28 0.984848 +f3v0s25 f3v13s38 1.000000 +f3v0s25 f3v7s32 0.984615 +f3v0s25 f3v1s26 0.984615 +f3v0s25 f3v6s31 0.984615 +f3v0s25 f1v13s20 0.678571 +f3v0s25 f2v2s24 0.714286 +f3v0s25 f3v11s36 0.969231 +f3v0s25 f0v5s5 0.606061 +f3v0s25 f1v11s18 0.672414 +f3v0s25 f0v6s6 0.606061 +f3v0s25 f3v4s29 0.984848 +f3v0s25 f0v2s2 0.621212 +f3v0s25 f3v12s37 0.984848 +f3v0s25 f0v3s3 0.621212 +f3v0s25 f3v14s39 1.000000 +f3v0s25 f0v0s0 0.621212 +f3v0s25 f1v12s19 0.666667 +f3v3s28 f3v13s38 0.984848 +f3v3s28 f3v7s32 0.969231 +f3v3s28 f3v1s26 0.969231 +f3v3s28 f3v6s31 0.969231 +f3v3s28 f1v13s20 0.678571 +f3v3s28 f2v2s24 0.734694 +f3v3s28 f3v11s36 0.953846 +f3v3s28 f0v5s5 0.606061 +f3v3s28 f1v11s18 0.672414 +f3v3s28 f0v6s6 0.606061 +f3v3s28 f3v4s29 0.969697 +f3v3s28 f0v2s2 0.621212 +f3v3s28 f3v12s37 0.969697 +f3v3s28 f0v3s3 0.621212 +f3v3s28 f3v14s39 0.984848 +f3v3s28 f0v0s0 0.621212 +f3v3s28 f1v12s19 0.666667 +f3v13s38 f3v7s32 0.984615 +f3v13s38 f3v1s26 0.984615 +f3v13s38 f3v6s31 0.984615 +f3v13s38 f1v13s20 0.696429 +f3v13s38 f2v2s24 0.734694 +f3v13s38 f3v11s36 0.969231 +f3v13s38 f0v5s5 0.588235 +f3v13s38 f1v11s18 0.689655 +f3v13s38 f0v6s6 0.588235 +f3v13s38 f3v4s29 0.955882 +f3v13s38 f0v2s2 0.602941 +f3v13s38 f3v12s37 0.970149 +f3v13s38 f0v3s3 0.611940 +f3v13s38 f3v14s39 1.000000 +f3v13s38 f0v0s0 0.602941 +f3v13s38 f1v12s19 0.684211 +f3v7s32 f3v1s26 0.953846 +f3v7s32 f3v6s31 1.000000 +f3v7s32 f1v13s20 0.696429 +f3v7s32 f2v2s24 0.693878 +f3v7s32 f3v11s36 0.938462 +f3v7s32 f0v5s5 0.615385 +f3v7s32 f1v11s18 0.689655 +f3v7s32 f0v6s6 0.600000 +f3v7s32 f3v4s29 0.969231 +f3v7s32 f0v2s2 0.615385 +f3v7s32 f3v12s37 0.969231 +f3v7s32 f0v3s3 0.630769 +f3v7s32 f3v14s39 0.984615 +f3v7s32 f0v0s0 0.630769 +f3v7s32 f1v12s19 0.684211 +f3v1s26 f3v6s31 0.953846 +f3v1s26 f1v13s20 0.678571 +f3v1s26 f2v2s24 0.714286 +f3v1s26 f3v11s36 0.938462 +f3v1s26 f0v5s5 0.600000 +f3v1s26 f1v11s18 0.672414 +f3v1s26 f0v6s6 0.600000 +f3v1s26 f3v4s29 0.969231 +f3v1s26 f0v2s2 0.615385 +f3v1s26 f3v12s37 0.969231 +f3v1s26 f0v3s3 0.615385 +f3v1s26 f3v14s39 0.984615 +f3v1s26 f0v0s0 0.615385 +f3v1s26 f1v12s19 0.666667 +f3v6s31 f1v13s20 0.696429 +f3v6s31 f2v2s24 0.693878 +f3v6s31 f3v11s36 0.938462 +f3v6s31 f0v5s5 0.615385 +f3v6s31 f1v11s18 0.689655 +f3v6s31 f0v6s6 0.600000 +f3v6s31 f3v4s29 0.969231 +f3v6s31 f0v2s2 0.615385 +f3v6s31 f3v12s37 0.969231 +f3v6s31 f0v3s3 0.630769 +f3v6s31 f3v14s39 0.984615 +f3v6s31 f0v0s0 0.630769 +f3v6s31 f1v12s19 0.684211 +f1v13s20 f2v2s24 0.693878 +f1v13s20 f3v11s36 0.678571 +f1v13s20 f0v5s5 0.696429 +f1v13s20 f1v11s18 0.982143 +f1v13s20 f0v6s6 0.660714 +f1v13s20 f3v4s29 0.696429 +f1v13s20 f0v2s2 0.678571 +f1v13s20 f3v12s37 0.696429 +f1v13s20 f0v3s3 0.678571 +f1v13s20 f3v14s39 0.678571 +f1v13s20 f0v0s0 0.678571 +f1v13s20 f1v12s19 0.964286 +f2v2s24 f3v11s36 0.693878 +f2v2s24 f0v5s5 0.714286 +f2v2s24 f1v11s18 0.693878 +f2v2s24 f0v6s6 0.714286 +f2v2s24 f3v4s29 0.734694 +f2v2s24 f0v2s2 0.714286 +f2v2s24 f3v12s37 0.734694 +f2v2s24 f0v3s3 0.693878 +f2v2s24 f3v14s39 0.714286 +f2v2s24 f0v0s0 0.714286 +f2v2s24 f1v12s19 0.673469 +f3v11s36 f0v5s5 0.584615 +f3v11s36 f1v11s18 0.672414 +f3v11s36 f0v6s6 0.584615 +f3v11s36 f3v4s29 0.953846 +f3v11s36 f0v2s2 0.584615 +f3v11s36 f3v12s37 0.953846 +f3v11s36 f0v3s3 0.584615 +f3v11s36 f3v14s39 0.969231 +f3v11s36 f0v0s0 0.584615 +f3v11s36 f1v12s19 0.666667 +f0v5s5 f1v11s18 0.689655 +f0v5s5 f0v6s6 0.927536 +f0v5s5 f3v4s29 0.617647 +f0v5s5 f0v2s2 0.971014 +f0v5s5 f3v12s37 0.597015 +f0v5s5 f0v3s3 0.970149 +f0v5s5 f3v14s39 0.606061 +f0v5s5 f0v0s0 0.985507 +f0v5s5 f1v12s19 0.666667 +f1v11s18 f0v6s6 0.655172 +f1v11s18 f3v4s29 0.689655 +f1v11s18 f0v2s2 0.672414 +f1v11s18 f3v12s37 0.689655 +f1v11s18 f0v3s3 0.672414 +f1v11s18 f3v14s39 0.672414 +f1v11s18 f0v0s0 0.672414 +f1v11s18 f1v12s19 0.964912 +f0v6s6 f3v4s29 0.617647 +f0v6s6 f0v2s2 0.927536 +f0v6s6 f3v12s37 0.597015 +f0v6s6 f0v3s3 0.925373 +f0v6s6 f3v14s39 0.606061 +f0v6s6 f0v0s0 0.942029 +f0v6s6 f1v12s19 0.666667 +f3v4s29 f0v2s2 0.632353 +f3v4s29 f3v12s37 0.955224 +f3v4s29 f0v3s3 0.641791 +f3v4s29 f3v14s39 0.984848 +f3v4s29 f0v0s0 0.632353 +f3v4s29 f1v12s19 0.684211 +f0v2s2 f3v12s37 0.626866 +f0v2s2 f0v3s3 0.970149 +f0v2s2 f3v14s39 0.621212 +f0v2s2 f0v0s0 0.985507 +f0v2s2 f1v12s19 0.684211 +f3v12s37 f0v3s3 0.611940 +f3v12s37 f3v14s39 0.984848 +f3v12s37 f0v0s0 0.611940 +f3v12s37 f1v12s19 0.684211 +f0v3s3 f3v14s39 0.621212 +f0v3s3 f0v0s0 0.985075 +f0v3s3 f1v12s19 0.666667 +f3v14s39 f0v0s0 0.621212 +f3v14s39 f1v12s19 0.666667 +f0v0s0 f1v12s19 0.684211 diff --git a/pkg/obitools/obialign/testdata/one_default.expected b/pkg/obitools/obialign/testdata/one_default.expected new file mode 100644 index 0000000..d4e3979 --- /dev/null +++ b/pkg/obitools/obialign/testdata/one_default.expected @@ -0,0 +1,224 @@ +f3v10s35 f3v8s33 0.910448 87579 88635 65 66 +f3v10s35 f3v9s34 0.910448 87579 40677 65 65 +f3v10s35 f3v2s27 0.910448 87579 74030 65 65 +f3v10s35 f3v0s25 0.925373 87579 62755 65 66 +f3v10s35 f3v7s32 0.910448 87579 53710 65 65 +f3v10s35 f3v1s26 0.910448 87579 41283 65 65 +f3v10s35 f3v6s31 0.910448 87579 94783 65 65 +f3v10s35 f3v14s39 0.925373 87579 55015 65 66 +f3v5s30 f3v8s33 0.924242 39802 88635 63 66 +f3v5s30 f3v9s34 0.909091 39802 40677 63 65 +f3v5s30 f3v2s27 0.924242 39802 74030 63 65 +f3v5s30 f3v0s25 0.939394 39802 62755 63 66 +f3v5s30 f3v3s28 0.910448 39802 66465 63 66 +f3v5s30 f3v13s38 0.911765 39802 26948 63 68 +f3v5s30 f3v7s32 0.909091 39802 53710 63 65 +f3v5s30 f3v1s26 0.910448 39802 41283 63 65 +f3v5s30 f3v6s31 0.909091 39802 94783 63 65 +f3v5s30 f3v12s37 0.910448 39802 74202 63 67 +f3v5s30 f3v14s39 0.939394 39802 55015 63 66 +f1v8s15 f2v1s23 0.982759 66109 35696 57 58 +f1v8s15 f1v6s13 0.947368 66109 80246 57 56 +f1v8s15 f1v1s8 0.916667 66109 17651 57 60 +f1v8s15 f1v14s21 0.931034 66109 85030 57 56 +f1v8s15 f1v5s12 0.916667 66109 1410 57 60 +f1v8s15 f1v4s11 0.982759 66109 74527 57 58 +f1v8s15 f1v9s16 0.933333 66109 65777 57 60 +f1v8s15 f1v10s17 0.916667 66109 98659 57 60 +f1v8s15 f1v0s7 0.982759 66109 84420 57 58 +f1v8s15 f1v7s14 0.982759 66109 42277 57 58 +f1v8s15 f1v3s10 0.982759 66109 43230 57 58 +f1v8s15 f1v13s20 0.948276 66109 80913 57 56 +f1v8s15 f1v11s18 0.965517 66109 51814 57 58 +f1v8s15 f1v12s19 0.948276 66109 58178 57 57 +f2v1s23 f1v6s13 0.931034 35696 80246 58 56 +f2v1s23 f1v1s8 0.933333 35696 17651 58 60 +f2v1s23 f1v14s21 0.948276 35696 85030 58 56 +f2v1s23 f1v5s12 0.933333 35696 1410 58 60 +f2v1s23 f1v4s11 1.000000 35696 74527 58 58 +f2v1s23 f1v9s16 0.950000 35696 65777 58 60 +f2v1s23 f1v10s17 0.933333 35696 98659 58 60 +f2v1s23 f1v0s7 1.000000 35696 84420 58 58 +f2v1s23 f1v7s14 1.000000 35696 42277 58 58 +f2v1s23 f1v3s10 1.000000 35696 43230 58 58 +f2v1s23 f1v13s20 0.965517 35696 80913 58 56 +f2v1s23 f1v11s18 0.982759 35696 51814 58 58 +f2v1s23 f1v12s19 0.965517 35696 58178 58 57 +f4v2s42 f4v0s40 0.967213 17302 75843 61 60 +f4v2s42 f4v1s41 0.951613 17302 45686 61 61 +f0v4s4 f0v1s1 1.000000 86916 43883 69 69 +f0v4s4 f2v0s22 0.943662 86916 43219 69 69 +f0v4s4 f1v2s9 1.000000 86916 99108 69 69 +f0v4s4 f0v5s5 0.943662 86916 2668 69 69 +f0v4s4 f0v6s6 0.901408 86916 16273 69 69 +f0v4s4 f0v2s2 0.943662 86916 10896 69 69 +f0v4s4 f0v3s3 0.915493 86916 73040 69 67 +f0v4s4 f0v0s0 0.971429 86916 1332 69 69 +f1v6s13 f1v4s11 0.931034 80246 74527 56 58 +f1v6s13 f1v0s7 0.931034 80246 84420 56 58 +f1v6s13 f1v7s14 0.931034 80246 42277 56 58 +f1v6s13 f1v3s10 0.931034 80246 43230 56 58 +f1v6s13 f1v11s18 0.913793 80246 51814 56 58 +f3v8s33 f3v9s34 0.954545 88635 40677 66 65 +f3v8s33 f3v2s27 0.969697 88635 74030 66 65 +f3v8s33 f3v0s25 0.984848 88635 62755 66 66 +f3v8s33 f3v3s28 0.955224 88635 66465 66 66 +f3v8s33 f3v13s38 0.955882 88635 26948 66 68 +f3v8s33 f3v7s32 0.954545 88635 53710 66 65 +f3v8s33 f3v1s26 0.954545 88635 41283 66 65 +f3v8s33 f3v6s31 0.954545 88635 94783 66 65 +f3v8s33 f3v11s36 0.925373 88635 91927 66 65 +f3v8s33 f3v4s29 0.941176 88635 94356 66 68 +f3v8s33 f3v12s37 0.955224 88635 74202 66 67 +f3v8s33 f3v14s39 0.984848 88635 55015 66 66 +f1v1s8 f1v14s21 0.916667 17651 85030 60 56 +f1v1s8 f1v4s11 0.933333 17651 74527 60 58 +f1v1s8 f1v0s7 0.933333 17651 84420 60 58 +f1v1s8 f1v7s14 0.933333 17651 42277 60 58 +f1v1s8 f1v3s10 0.933333 17651 43230 60 58 +f1v1s8 f1v13s20 0.900000 17651 80913 60 56 +f1v1s8 f1v11s18 0.916667 17651 51814 60 58 +f1v1s8 f1v12s19 0.916667 17651 58178 60 57 +f1v14s21 f1v4s11 0.948276 85030 74527 56 58 +f1v14s21 f1v9s16 0.900000 85030 65777 56 60 +f1v14s21 f1v0s7 0.948276 85030 84420 56 58 +f1v14s21 f1v7s14 0.948276 85030 42277 56 58 +f1v14s21 f1v3s10 0.948276 85030 43230 56 58 +f1v14s21 f1v13s20 0.913793 85030 80913 56 56 +f1v14s21 f1v11s18 0.931034 85030 51814 56 58 +f1v14s21 f1v12s19 0.913793 85030 58178 56 57 +f0v1s1 f2v0s22 0.943662 43883 43219 69 69 +f0v1s1 f1v2s9 1.000000 43883 99108 69 69 +f0v1s1 f0v5s5 0.943662 43883 2668 69 69 +f0v1s1 f0v6s6 0.901408 43883 16273 69 69 +f0v1s1 f0v2s2 0.943662 43883 10896 69 69 +f0v1s1 f0v3s3 0.915493 43883 73040 69 67 +f0v1s1 f0v0s0 0.971429 43883 1332 69 69 +f1v5s12 f1v4s11 0.933333 1410 74527 60 58 +f1v5s12 f1v0s7 0.933333 1410 84420 60 58 +f1v5s12 f1v7s14 0.933333 1410 42277 60 58 +f1v5s12 f1v3s10 0.933333 1410 43230 60 58 +f1v5s12 f1v13s20 0.900000 1410 80913 60 56 +f1v5s12 f1v11s18 0.916667 1410 51814 60 58 +f1v5s12 f1v12s19 0.916667 1410 58178 60 57 +f1v4s11 f1v9s16 0.950000 74527 65777 58 60 +f1v4s11 f1v10s17 0.933333 74527 98659 58 60 +f1v4s11 f1v0s7 1.000000 74527 84420 58 58 +f1v4s11 f1v7s14 1.000000 74527 42277 58 58 +f1v4s11 f1v3s10 1.000000 74527 43230 58 58 +f1v4s11 f1v13s20 0.965517 74527 80913 58 56 +f1v4s11 f1v11s18 0.982759 74527 51814 58 58 +f1v4s11 f1v12s19 0.965517 74527 58178 58 57 +f1v9s16 f1v0s7 0.950000 65777 84420 60 58 +f1v9s16 f1v7s14 0.950000 65777 42277 60 58 +f1v9s16 f1v3s10 0.950000 65777 43230 60 58 +f1v9s16 f1v13s20 0.916667 65777 80913 60 56 +f1v9s16 f1v11s18 0.933333 65777 51814 60 58 +f1v9s16 f1v12s19 0.916667 65777 58178 60 57 +f1v10s17 f1v0s7 0.933333 98659 84420 60 58 +f1v10s17 f1v7s14 0.933333 98659 42277 60 58 +f1v10s17 f1v3s10 0.933333 98659 43230 60 58 +f1v10s17 f1v13s20 0.900000 98659 80913 60 56 +f1v10s17 f1v11s18 0.916667 98659 51814 60 58 +f1v10s17 f1v12s19 0.916667 98659 58178 60 57 +f1v0s7 f1v7s14 1.000000 84420 42277 58 58 +f1v0s7 f1v3s10 1.000000 84420 43230 58 58 +f1v0s7 f1v13s20 0.965517 84420 80913 58 56 +f1v0s7 f1v11s18 0.982759 84420 51814 58 58 +f1v0s7 f1v12s19 0.965517 84420 58178 58 57 +f3v9s34 f3v2s27 0.954545 40677 74030 65 65 +f3v9s34 f3v0s25 0.969697 40677 62755 65 66 +f3v9s34 f3v3s28 0.940299 40677 66465 65 66 +f3v9s34 f3v13s38 0.941176 40677 26948 65 68 +f3v9s34 f3v7s32 1.000000 40677 53710 65 65 +f3v9s34 f3v1s26 0.939394 40677 41283 65 65 +f3v9s34 f3v6s31 1.000000 40677 94783 65 65 +f3v9s34 f3v11s36 0.910448 40677 91927 65 65 +f3v9s34 f3v4s29 0.926471 40677 94356 65 68 +f3v9s34 f3v12s37 0.940299 40677 74202 65 67 +f3v9s34 f3v14s39 0.969697 40677 55015 65 66 +f4v0s40 f4v1s41 0.983607 75843 45686 60 61 +f1v7s14 f1v3s10 1.000000 42277 43230 58 58 +f1v7s14 f1v13s20 0.965517 42277 80913 58 56 +f1v7s14 f1v11s18 0.982759 42277 51814 58 58 +f1v7s14 f1v12s19 0.965517 42277 58178 58 57 +f3v2s27 f3v0s25 0.984848 74030 62755 65 66 +f3v2s27 f3v3s28 0.955224 74030 66465 65 66 +f3v2s27 f3v13s38 0.955882 74030 26948 65 68 +f3v2s27 f3v7s32 0.954545 74030 53710 65 65 +f3v2s27 f3v1s26 0.969231 74030 41283 65 65 +f3v2s27 f3v6s31 0.954545 74030 94783 65 65 +f3v2s27 f3v11s36 0.925373 74030 91927 65 65 +f3v2s27 f3v4s29 0.941176 74030 94356 65 68 +f3v2s27 f3v12s37 0.955224 74030 74202 65 67 +f3v2s27 f3v14s39 0.984848 74030 55015 65 66 +f2v0s22 f1v2s9 0.943662 43219 99108 69 69 +f2v0s22 f0v5s5 0.943662 43219 2668 69 69 +f2v0s22 f0v6s6 0.901408 43219 16273 69 69 +f2v0s22 f0v2s2 1.000000 43219 10896 69 69 +f2v0s22 f0v3s3 0.915493 43219 73040 69 67 +f2v0s22 f0v0s0 0.971429 43219 1332 69 69 +f1v2s9 f0v5s5 0.943662 99108 2668 69 69 +f1v2s9 f0v6s6 0.901408 99108 16273 69 69 +f1v2s9 f0v2s2 0.943662 99108 10896 69 69 +f1v2s9 f0v3s3 0.915493 99108 73040 69 67 +f1v2s9 f0v0s0 0.971429 99108 1332 69 69 +f1v3s10 f1v13s20 0.965517 43230 80913 58 56 +f1v3s10 f1v11s18 0.982759 43230 51814 58 58 +f1v3s10 f1v12s19 0.965517 43230 58178 58 57 +f3v0s25 f3v3s28 0.970149 62755 66465 66 66 +f3v0s25 f3v13s38 0.970588 62755 26948 66 68 +f3v0s25 f3v7s32 0.969697 62755 53710 66 65 +f3v0s25 f3v1s26 0.969697 62755 41283 66 65 +f3v0s25 f3v6s31 0.969697 62755 94783 66 65 +f3v0s25 f3v11s36 0.940299 62755 91927 66 65 +f3v0s25 f3v4s29 0.955882 62755 94356 66 68 +f3v0s25 f3v12s37 0.970149 62755 74202 66 67 +f3v0s25 f3v14s39 1.000000 62755 55015 66 66 +f3v3s28 f3v13s38 0.955882 66465 26948 66 68 +f3v3s28 f3v7s32 0.940299 66465 53710 66 65 +f3v3s28 f3v1s26 0.940299 66465 41283 66 65 +f3v3s28 f3v6s31 0.940299 66465 94783 66 65 +f3v3s28 f3v11s36 0.911765 66465 91927 66 65 +f3v3s28 f3v4s29 0.941176 66465 94356 66 68 +f3v3s28 f3v12s37 0.941176 66465 74202 66 67 +f3v3s28 f3v14s39 0.970149 66465 55015 66 66 +f3v13s38 f3v7s32 0.941176 26948 53710 68 65 +f3v13s38 f3v1s26 0.941176 26948 41283 68 65 +f3v13s38 f3v6s31 0.941176 26948 94783 68 65 +f3v13s38 f3v11s36 0.913043 26948 91927 68 65 +f3v13s38 f3v4s29 0.942029 26948 94356 68 68 +f3v13s38 f3v12s37 0.942029 26948 74202 68 67 +f3v13s38 f3v14s39 0.970588 26948 55015 68 66 +f3v7s32 f3v1s26 0.939394 53710 41283 65 65 +f3v7s32 f3v6s31 1.000000 53710 94783 65 65 +f3v7s32 f3v11s36 0.910448 53710 91927 65 65 +f3v7s32 f3v4s29 0.926471 53710 94356 65 68 +f3v7s32 f3v12s37 0.940299 53710 74202 65 67 +f3v7s32 f3v14s39 0.969697 53710 55015 65 66 +f3v1s26 f3v6s31 0.939394 41283 94783 65 65 +f3v1s26 f3v11s36 0.910448 41283 91927 65 65 +f3v1s26 f3v4s29 0.926471 41283 94356 65 68 +f3v1s26 f3v12s37 0.940299 41283 74202 65 67 +f3v1s26 f3v14s39 0.969697 41283 55015 65 66 +f3v6s31 f3v11s36 0.910448 94783 91927 65 65 +f3v6s31 f3v4s29 0.926471 94783 94356 65 68 +f3v6s31 f3v12s37 0.940299 94783 74202 65 67 +f3v6s31 f3v14s39 0.969697 94783 55015 65 66 +f1v13s20 f1v11s18 0.948276 80913 51814 56 58 +f1v13s20 f1v12s19 0.931034 80913 58178 56 57 +f3v11s36 f3v12s37 0.911765 91927 74202 65 67 +f3v11s36 f3v14s39 0.940299 91927 55015 65 66 +f0v5s5 f0v6s6 0.901408 2668 16273 69 69 +f0v5s5 f0v2s2 0.943662 2668 10896 69 69 +f0v5s5 f0v3s3 0.915493 2668 73040 69 67 +f0v5s5 f0v0s0 0.971429 2668 1332 69 69 +f1v11s18 f1v12s19 0.948276 51814 58178 58 57 +f0v6s6 f0v2s2 0.901408 16273 10896 69 69 +f0v6s6 f0v0s0 0.928571 16273 1332 69 69 +f3v4s29 f3v12s37 0.927536 94356 74202 68 67 +f3v4s29 f3v14s39 0.955882 94356 55015 68 66 +f0v2s2 f0v3s3 0.915493 10896 73040 69 67 +f0v2s2 f0v0s0 0.971429 10896 1332 69 69 +f3v12s37 f3v14s39 0.970149 74202 55015 67 66 +f0v3s3 f0v0s0 0.942857 73040 1332 67 69 diff --git a/pkg/obitools/obialign/testdata/one_distance.expected b/pkg/obitools/obialign/testdata/one_distance.expected new file mode 100644 index 0000000..dc8cc1b --- /dev/null +++ b/pkg/obitools/obialign/testdata/one_distance.expected @@ -0,0 +1,224 @@ +f3v10s35 f3v8s33 0.089552 +f3v10s35 f3v9s34 0.089552 +f3v10s35 f3v2s27 0.089552 +f3v10s35 f3v0s25 0.074627 +f3v10s35 f3v7s32 0.089552 +f3v10s35 f3v1s26 0.089552 +f3v10s35 f3v6s31 0.089552 +f3v10s35 f3v14s39 0.074627 +f3v5s30 f3v8s33 0.075758 +f3v5s30 f3v9s34 0.090909 +f3v5s30 f3v2s27 0.075758 +f3v5s30 f3v0s25 0.060606 +f3v5s30 f3v3s28 0.089552 +f3v5s30 f3v13s38 0.088235 +f3v5s30 f3v7s32 0.090909 +f3v5s30 f3v1s26 0.089552 +f3v5s30 f3v6s31 0.090909 +f3v5s30 f3v12s37 0.089552 +f3v5s30 f3v14s39 0.060606 +f1v8s15 f2v1s23 0.017241 +f1v8s15 f1v6s13 0.052632 +f1v8s15 f1v1s8 0.083333 +f1v8s15 f1v14s21 0.068966 +f1v8s15 f1v5s12 0.083333 +f1v8s15 f1v4s11 0.017241 +f1v8s15 f1v9s16 0.066667 +f1v8s15 f1v10s17 0.083333 +f1v8s15 f1v0s7 0.017241 +f1v8s15 f1v7s14 0.017241 +f1v8s15 f1v3s10 0.017241 +f1v8s15 f1v13s20 0.051724 +f1v8s15 f1v11s18 0.034483 +f1v8s15 f1v12s19 0.051724 +f2v1s23 f1v6s13 0.068966 +f2v1s23 f1v1s8 0.066667 +f2v1s23 f1v14s21 0.051724 +f2v1s23 f1v5s12 0.066667 +f2v1s23 f1v4s11 0.000000 +f2v1s23 f1v9s16 0.050000 +f2v1s23 f1v10s17 0.066667 +f2v1s23 f1v0s7 0.000000 +f2v1s23 f1v7s14 0.000000 +f2v1s23 f1v3s10 0.000000 +f2v1s23 f1v13s20 0.034483 +f2v1s23 f1v11s18 0.017241 +f2v1s23 f1v12s19 0.034483 +f4v2s42 f4v0s40 0.032787 +f4v2s42 f4v1s41 0.048387 +f0v4s4 f0v1s1 0.000000 +f0v4s4 f2v0s22 0.056338 +f0v4s4 f1v2s9 0.000000 +f0v4s4 f0v5s5 0.056338 +f0v4s4 f0v6s6 0.098592 +f0v4s4 f0v2s2 0.056338 +f0v4s4 f0v3s3 0.084507 +f0v4s4 f0v0s0 0.028571 +f1v6s13 f1v4s11 0.068966 +f1v6s13 f1v0s7 0.068966 +f1v6s13 f1v7s14 0.068966 +f1v6s13 f1v3s10 0.068966 +f1v6s13 f1v11s18 0.086207 +f3v8s33 f3v9s34 0.045455 +f3v8s33 f3v2s27 0.030303 +f3v8s33 f3v0s25 0.015152 +f3v8s33 f3v3s28 0.044776 +f3v8s33 f3v13s38 0.044118 +f3v8s33 f3v7s32 0.045455 +f3v8s33 f3v1s26 0.045455 +f3v8s33 f3v6s31 0.045455 +f3v8s33 f3v11s36 0.074627 +f3v8s33 f3v4s29 0.058824 +f3v8s33 f3v12s37 0.044776 +f3v8s33 f3v14s39 0.015152 +f1v1s8 f1v14s21 0.083333 +f1v1s8 f1v4s11 0.066667 +f1v1s8 f1v0s7 0.066667 +f1v1s8 f1v7s14 0.066667 +f1v1s8 f1v3s10 0.066667 +f1v1s8 f1v13s20 0.100000 +f1v1s8 f1v11s18 0.083333 +f1v1s8 f1v12s19 0.083333 +f1v14s21 f1v4s11 0.051724 +f1v14s21 f1v9s16 0.100000 +f1v14s21 f1v0s7 0.051724 +f1v14s21 f1v7s14 0.051724 +f1v14s21 f1v3s10 0.051724 +f1v14s21 f1v13s20 0.086207 +f1v14s21 f1v11s18 0.068966 +f1v14s21 f1v12s19 0.086207 +f0v1s1 f2v0s22 0.056338 +f0v1s1 f1v2s9 0.000000 +f0v1s1 f0v5s5 0.056338 +f0v1s1 f0v6s6 0.098592 +f0v1s1 f0v2s2 0.056338 +f0v1s1 f0v3s3 0.084507 +f0v1s1 f0v0s0 0.028571 +f1v5s12 f1v4s11 0.066667 +f1v5s12 f1v0s7 0.066667 +f1v5s12 f1v7s14 0.066667 +f1v5s12 f1v3s10 0.066667 +f1v5s12 f1v13s20 0.100000 +f1v5s12 f1v11s18 0.083333 +f1v5s12 f1v12s19 0.083333 +f1v4s11 f1v9s16 0.050000 +f1v4s11 f1v10s17 0.066667 +f1v4s11 f1v0s7 0.000000 +f1v4s11 f1v7s14 0.000000 +f1v4s11 f1v3s10 0.000000 +f1v4s11 f1v13s20 0.034483 +f1v4s11 f1v11s18 0.017241 +f1v4s11 f1v12s19 0.034483 +f1v9s16 f1v0s7 0.050000 +f1v9s16 f1v7s14 0.050000 +f1v9s16 f1v3s10 0.050000 +f1v9s16 f1v13s20 0.083333 +f1v9s16 f1v11s18 0.066667 +f1v9s16 f1v12s19 0.083333 +f1v10s17 f1v0s7 0.066667 +f1v10s17 f1v7s14 0.066667 +f1v10s17 f1v3s10 0.066667 +f1v10s17 f1v13s20 0.100000 +f1v10s17 f1v11s18 0.083333 +f1v10s17 f1v12s19 0.083333 +f1v0s7 f1v7s14 0.000000 +f1v0s7 f1v3s10 0.000000 +f1v0s7 f1v13s20 0.034483 +f1v0s7 f1v11s18 0.017241 +f1v0s7 f1v12s19 0.034483 +f3v9s34 f3v2s27 0.045455 +f3v9s34 f3v0s25 0.030303 +f3v9s34 f3v3s28 0.059701 +f3v9s34 f3v13s38 0.058824 +f3v9s34 f3v7s32 0.000000 +f3v9s34 f3v1s26 0.060606 +f3v9s34 f3v6s31 0.000000 +f3v9s34 f3v11s36 0.089552 +f3v9s34 f3v4s29 0.073529 +f3v9s34 f3v12s37 0.059701 +f3v9s34 f3v14s39 0.030303 +f4v0s40 f4v1s41 0.016393 +f1v7s14 f1v3s10 0.000000 +f1v7s14 f1v13s20 0.034483 +f1v7s14 f1v11s18 0.017241 +f1v7s14 f1v12s19 0.034483 +f3v2s27 f3v0s25 0.015152 +f3v2s27 f3v3s28 0.044776 +f3v2s27 f3v13s38 0.044118 +f3v2s27 f3v7s32 0.045455 +f3v2s27 f3v1s26 0.030769 +f3v2s27 f3v6s31 0.045455 +f3v2s27 f3v11s36 0.074627 +f3v2s27 f3v4s29 0.058824 +f3v2s27 f3v12s37 0.044776 +f3v2s27 f3v14s39 0.015152 +f2v0s22 f1v2s9 0.056338 +f2v0s22 f0v5s5 0.056338 +f2v0s22 f0v6s6 0.098592 +f2v0s22 f0v2s2 0.000000 +f2v0s22 f0v3s3 0.084507 +f2v0s22 f0v0s0 0.028571 +f1v2s9 f0v5s5 0.056338 +f1v2s9 f0v6s6 0.098592 +f1v2s9 f0v2s2 0.056338 +f1v2s9 f0v3s3 0.084507 +f1v2s9 f0v0s0 0.028571 +f1v3s10 f1v13s20 0.034483 +f1v3s10 f1v11s18 0.017241 +f1v3s10 f1v12s19 0.034483 +f3v0s25 f3v3s28 0.029851 +f3v0s25 f3v13s38 0.029412 +f3v0s25 f3v7s32 0.030303 +f3v0s25 f3v1s26 0.030303 +f3v0s25 f3v6s31 0.030303 +f3v0s25 f3v11s36 0.059701 +f3v0s25 f3v4s29 0.044118 +f3v0s25 f3v12s37 0.029851 +f3v0s25 f3v14s39 0.000000 +f3v3s28 f3v13s38 0.044118 +f3v3s28 f3v7s32 0.059701 +f3v3s28 f3v1s26 0.059701 +f3v3s28 f3v6s31 0.059701 +f3v3s28 f3v11s36 0.088235 +f3v3s28 f3v4s29 0.058824 +f3v3s28 f3v12s37 0.058824 +f3v3s28 f3v14s39 0.029851 +f3v13s38 f3v7s32 0.058824 +f3v13s38 f3v1s26 0.058824 +f3v13s38 f3v6s31 0.058824 +f3v13s38 f3v11s36 0.086957 +f3v13s38 f3v4s29 0.057971 +f3v13s38 f3v12s37 0.057971 +f3v13s38 f3v14s39 0.029412 +f3v7s32 f3v1s26 0.060606 +f3v7s32 f3v6s31 0.000000 +f3v7s32 f3v11s36 0.089552 +f3v7s32 f3v4s29 0.073529 +f3v7s32 f3v12s37 0.059701 +f3v7s32 f3v14s39 0.030303 +f3v1s26 f3v6s31 0.060606 +f3v1s26 f3v11s36 0.089552 +f3v1s26 f3v4s29 0.073529 +f3v1s26 f3v12s37 0.059701 +f3v1s26 f3v14s39 0.030303 +f3v6s31 f3v11s36 0.089552 +f3v6s31 f3v4s29 0.073529 +f3v6s31 f3v12s37 0.059701 +f3v6s31 f3v14s39 0.030303 +f1v13s20 f1v11s18 0.051724 +f1v13s20 f1v12s19 0.068966 +f3v11s36 f3v12s37 0.088235 +f3v11s36 f3v14s39 0.059701 +f0v5s5 f0v6s6 0.098592 +f0v5s5 f0v2s2 0.056338 +f0v5s5 f0v3s3 0.084507 +f0v5s5 f0v0s0 0.028571 +f1v11s18 f1v12s19 0.051724 +f0v6s6 f0v2s2 0.098592 +f0v6s6 f0v0s0 0.071429 +f3v4s29 f3v12s37 0.072464 +f3v4s29 f3v14s39 0.044118 +f0v2s2 f0v3s3 0.084507 +f0v2s2 f0v0s0 0.028571 +f3v12s37 f3v14s39 0.029851 +f0v3s3 f0v0s0 0.057143 diff --git a/pkg/obitools/obialign/testdata/one_longest.expected b/pkg/obitools/obialign/testdata/one_longest.expected new file mode 100644 index 0000000..50b988e --- /dev/null +++ b/pkg/obitools/obialign/testdata/one_longest.expected @@ -0,0 +1,249 @@ +f3v10s35 f3v5s30 0.892308 +f3v10s35 f3v8s33 0.924242 +f3v10s35 f3v9s34 0.938462 +f3v10s35 f3v2s27 0.938462 +f3v10s35 f3v0s25 0.939394 +f3v10s35 f3v3s28 0.924242 +f3v10s35 f3v13s38 0.911765 +f3v10s35 f3v7s32 0.938462 +f3v10s35 f3v1s26 0.938462 +f3v10s35 f3v6s31 0.938462 +f3v10s35 f3v11s36 0.907692 +f3v10s35 f3v4s29 0.897059 +f3v10s35 f3v12s37 0.910448 +f3v10s35 f3v14s39 0.939394 +f3v5s30 f3v8s33 0.924242 +f3v5s30 f3v9s34 0.923077 +f3v5s30 f3v2s27 0.938462 +f3v5s30 f3v0s25 0.939394 +f3v5s30 f3v3s28 0.924242 +f3v5s30 f3v13s38 0.911765 +f3v5s30 f3v7s32 0.923077 +f3v5s30 f3v1s26 0.938462 +f3v5s30 f3v6s31 0.923077 +f3v5s30 f3v11s36 0.907692 +f3v5s30 f3v4s29 0.897059 +f3v5s30 f3v12s37 0.910448 +f3v5s30 f3v14s39 0.939394 +f1v8s15 f2v1s23 0.982759 +f1v8s15 f1v6s13 0.947368 +f1v8s15 f1v1s8 0.916667 +f1v8s15 f1v14s21 0.947368 +f1v8s15 f1v5s12 0.916667 +f1v8s15 f1v4s11 0.982759 +f1v8s15 f1v9s16 0.933333 +f1v8s15 f1v10s17 0.916667 +f1v8s15 f1v0s7 0.982759 +f1v8s15 f1v7s14 0.982759 +f1v8s15 f1v3s10 0.982759 +f1v8s15 f1v13s20 0.964912 +f1v8s15 f1v11s18 0.965517 +f1v8s15 f1v12s19 0.964912 +f2v1s23 f1v6s13 0.931034 +f2v1s23 f1v1s8 0.933333 +f2v1s23 f1v14s21 0.948276 +f2v1s23 f1v5s12 0.933333 +f2v1s23 f1v4s11 1.000000 +f2v1s23 f1v9s16 0.950000 +f2v1s23 f1v10s17 0.933333 +f2v1s23 f1v0s7 1.000000 +f2v1s23 f1v7s14 1.000000 +f2v1s23 f1v3s10 1.000000 +f2v1s23 f1v13s20 0.965517 +f2v1s23 f1v11s18 0.982759 +f2v1s23 f1v12s19 0.965517 +f4v2s42 f4v0s40 0.967213 +f4v2s42 f4v1s41 0.967213 +f0v4s4 f0v1s1 1.000000 +f0v4s4 f2v0s22 0.971014 +f0v4s4 f1v2s9 1.000000 +f0v4s4 f0v5s5 0.971014 +f0v4s4 f0v6s6 0.927536 +f0v4s4 f0v2s2 0.971014 +f0v4s4 f0v3s3 0.942029 +f0v4s4 f0v0s0 0.985507 +f1v6s13 f1v1s8 0.866667 +f1v6s13 f1v14s21 0.910714 +f1v6s13 f1v5s12 0.866667 +f1v6s13 f1v4s11 0.931034 +f1v6s13 f1v9s16 0.883333 +f1v6s13 f1v10s17 0.883333 +f1v6s13 f1v0s7 0.931034 +f1v6s13 f1v7s14 0.931034 +f1v6s13 f1v3s10 0.931034 +f1v6s13 f1v13s20 0.928571 +f1v6s13 f1v11s18 0.913793 +f1v6s13 f1v12s19 0.912281 +f3v8s33 f3v9s34 0.954545 +f3v8s33 f3v2s27 0.969697 +f3v8s33 f3v0s25 0.984848 +f3v8s33 f3v3s28 0.969697 +f3v8s33 f3v13s38 0.955882 +f3v8s33 f3v7s32 0.954545 +f3v8s33 f3v1s26 0.954545 +f3v8s33 f3v6s31 0.954545 +f3v8s33 f3v11s36 0.939394 +f3v8s33 f3v4s29 0.941176 +f3v8s33 f3v12s37 0.955224 +f3v8s33 f3v14s39 0.984848 +f1v1s8 f1v14s21 0.916667 +f1v1s8 f1v5s12 0.900000 +f1v1s8 f1v4s11 0.933333 +f1v1s8 f1v9s16 0.916667 +f1v1s8 f1v10s17 0.900000 +f1v1s8 f1v0s7 0.933333 +f1v1s8 f1v7s14 0.933333 +f1v1s8 f1v3s10 0.933333 +f1v1s8 f1v13s20 0.900000 +f1v1s8 f1v11s18 0.916667 +f1v1s8 f1v12s19 0.916667 +f1v14s21 f1v5s12 0.883333 +f1v14s21 f1v4s11 0.948276 +f1v14s21 f1v9s16 0.900000 +f1v14s21 f1v10s17 0.883333 +f1v14s21 f1v0s7 0.948276 +f1v14s21 f1v7s14 0.948276 +f1v14s21 f1v3s10 0.948276 +f1v14s21 f1v13s20 0.946429 +f1v14s21 f1v11s18 0.931034 +f1v14s21 f1v12s19 0.929825 +f0v1s1 f2v0s22 0.971014 +f0v1s1 f1v2s9 1.000000 +f0v1s1 f0v5s5 0.971014 +f0v1s1 f0v6s6 0.927536 +f0v1s1 f0v2s2 0.971014 +f0v1s1 f0v3s3 0.942029 +f0v1s1 f0v0s0 0.985507 +f1v5s12 f1v4s11 0.933333 +f1v5s12 f1v9s16 0.916667 +f1v5s12 f1v10s17 0.916667 +f1v5s12 f1v0s7 0.933333 +f1v5s12 f1v7s14 0.933333 +f1v5s12 f1v3s10 0.933333 +f1v5s12 f1v13s20 0.900000 +f1v5s12 f1v11s18 0.916667 +f1v5s12 f1v12s19 0.916667 +f1v4s11 f1v9s16 0.950000 +f1v4s11 f1v10s17 0.933333 +f1v4s11 f1v0s7 1.000000 +f1v4s11 f1v7s14 1.000000 +f1v4s11 f1v3s10 1.000000 +f1v4s11 f1v13s20 0.965517 +f1v4s11 f1v11s18 0.982759 +f1v4s11 f1v12s19 0.965517 +f1v9s16 f1v10s17 0.916667 +f1v9s16 f1v0s7 0.950000 +f1v9s16 f1v7s14 0.950000 +f1v9s16 f1v3s10 0.950000 +f1v9s16 f1v13s20 0.916667 +f1v9s16 f1v11s18 0.933333 +f1v9s16 f1v12s19 0.916667 +f1v10s17 f1v0s7 0.933333 +f1v10s17 f1v7s14 0.933333 +f1v10s17 f1v3s10 0.933333 +f1v10s17 f1v13s20 0.900000 +f1v10s17 f1v11s18 0.916667 +f1v10s17 f1v12s19 0.916667 +f1v0s7 f1v7s14 1.000000 +f1v0s7 f1v3s10 1.000000 +f1v0s7 f1v13s20 0.965517 +f1v0s7 f1v11s18 0.982759 +f1v0s7 f1v12s19 0.965517 +f3v9s34 f3v2s27 0.969231 +f3v9s34 f3v0s25 0.969697 +f3v9s34 f3v3s28 0.954545 +f3v9s34 f3v13s38 0.941176 +f3v9s34 f3v7s32 1.000000 +f3v9s34 f3v1s26 0.953846 +f3v9s34 f3v6s31 1.000000 +f3v9s34 f3v11s36 0.938462 +f3v9s34 f3v4s29 0.926471 +f3v9s34 f3v12s37 0.940299 +f3v9s34 f3v14s39 0.969697 +f4v0s40 f4v1s41 0.983607 +f1v7s14 f1v3s10 1.000000 +f1v7s14 f1v13s20 0.965517 +f1v7s14 f1v11s18 0.982759 +f1v7s14 f1v12s19 0.965517 +f3v2s27 f3v0s25 0.984848 +f3v2s27 f3v3s28 0.969697 +f3v2s27 f3v13s38 0.955882 +f3v2s27 f3v7s32 0.969231 +f3v2s27 f3v1s26 0.969231 +f3v2s27 f3v6s31 0.969231 +f3v2s27 f3v11s36 0.953846 +f3v2s27 f3v4s29 0.941176 +f3v2s27 f3v12s37 0.955224 +f3v2s27 f3v14s39 0.984848 +f2v0s22 f1v2s9 0.971014 +f2v0s22 f0v5s5 0.971014 +f2v0s22 f0v6s6 0.927536 +f2v0s22 f0v2s2 1.000000 +f2v0s22 f0v3s3 0.942029 +f2v0s22 f0v0s0 0.985507 +f1v2s9 f0v5s5 0.971014 +f1v2s9 f0v6s6 0.927536 +f1v2s9 f0v2s2 0.971014 +f1v2s9 f0v3s3 0.942029 +f1v2s9 f0v0s0 0.985507 +f1v3s10 f1v13s20 0.965517 +f1v3s10 f1v11s18 0.982759 +f1v3s10 f1v12s19 0.965517 +f3v0s25 f3v3s28 0.984848 +f3v0s25 f3v13s38 0.970588 +f3v0s25 f3v7s32 0.969697 +f3v0s25 f3v1s26 0.969697 +f3v0s25 f3v6s31 0.969697 +f3v0s25 f3v11s36 0.954545 +f3v0s25 f3v4s29 0.955882 +f3v0s25 f3v12s37 0.970149 +f3v0s25 f3v14s39 1.000000 +f3v3s28 f3v13s38 0.955882 +f3v3s28 f3v7s32 0.954545 +f3v3s28 f3v1s26 0.954545 +f3v3s28 f3v6s31 0.954545 +f3v3s28 f3v11s36 0.939394 +f3v3s28 f3v4s29 0.941176 +f3v3s28 f3v12s37 0.955224 +f3v3s28 f3v14s39 0.984848 +f3v13s38 f3v7s32 0.941176 +f3v13s38 f3v1s26 0.941176 +f3v13s38 f3v6s31 0.941176 +f3v13s38 f3v11s36 0.926471 +f3v13s38 f3v4s29 0.955882 +f3v13s38 f3v12s37 0.955882 +f3v13s38 f3v14s39 0.970588 +f3v7s32 f3v1s26 0.953846 +f3v7s32 f3v6s31 1.000000 +f3v7s32 f3v11s36 0.938462 +f3v7s32 f3v4s29 0.926471 +f3v7s32 f3v12s37 0.940299 +f3v7s32 f3v14s39 0.969697 +f3v1s26 f3v6s31 0.953846 +f3v1s26 f3v11s36 0.938462 +f3v1s26 f3v4s29 0.926471 +f3v1s26 f3v12s37 0.940299 +f3v1s26 f3v14s39 0.969697 +f3v6s31 f3v11s36 0.938462 +f3v6s31 f3v4s29 0.926471 +f3v6s31 f3v12s37 0.940299 +f3v6s31 f3v14s39 0.969697 +f1v13s20 f1v11s18 0.948276 +f1v13s20 f1v12s19 0.947368 +f3v11s36 f3v4s29 0.911765 +f3v11s36 f3v12s37 0.925373 +f3v11s36 f3v14s39 0.954545 +f0v5s5 f0v6s6 0.927536 +f0v5s5 f0v2s2 0.971014 +f0v5s5 f0v3s3 0.942029 +f0v5s5 f0v0s0 0.985507 +f1v11s18 f1v12s19 0.948276 +f0v6s6 f0v2s2 0.927536 +f0v6s6 f0v3s3 0.898551 +f0v6s6 f0v0s0 0.942029 +f3v4s29 f3v12s37 0.941176 +f3v4s29 f3v14s39 0.955882 +f0v2s2 f0v3s3 0.942029 +f0v2s2 f0v0s0 0.985507 +f3v12s37 f3v14s39 0.970149 +f0v3s3 f0v0s0 0.956522 diff --git a/pkg/obitools/obialign/testdata/one_low.expected b/pkg/obitools/obialign/testdata/one_low.expected new file mode 100644 index 0000000..ec98d5c --- /dev/null +++ b/pkg/obitools/obialign/testdata/one_low.expected @@ -0,0 +1,249 @@ +f3v10s35 f3v5s30 0.865672 +f3v10s35 f3v8s33 0.910448 +f3v10s35 f3v9s34 0.910448 +f3v10s35 f3v2s27 0.910448 +f3v10s35 f3v0s25 0.925373 +f3v10s35 f3v3s28 0.897059 +f3v10s35 f3v13s38 0.898551 +f3v10s35 f3v7s32 0.910448 +f3v10s35 f3v1s26 0.910448 +f3v10s35 f3v6s31 0.910448 +f3v10s35 f3v11s36 0.867647 +f3v10s35 f3v4s29 0.884058 +f3v10s35 f3v12s37 0.897059 +f3v10s35 f3v14s39 0.925373 +f3v5s30 f3v8s33 0.924242 +f3v5s30 f3v9s34 0.909091 +f3v5s30 f3v2s27 0.924242 +f3v5s30 f3v0s25 0.939394 +f3v5s30 f3v3s28 0.910448 +f3v5s30 f3v13s38 0.911765 +f3v5s30 f3v7s32 0.909091 +f3v5s30 f3v1s26 0.910448 +f3v5s30 f3v6s31 0.909091 +f3v5s30 f3v11s36 0.893939 +f3v5s30 f3v4s29 0.897059 +f3v5s30 f3v12s37 0.910448 +f3v5s30 f3v14s39 0.939394 +f1v8s15 f2v1s23 0.982759 +f1v8s15 f1v6s13 0.947368 +f1v8s15 f1v1s8 0.916667 +f1v8s15 f1v14s21 0.931034 +f1v8s15 f1v5s12 0.916667 +f1v8s15 f1v4s11 0.982759 +f1v8s15 f1v9s16 0.933333 +f1v8s15 f1v10s17 0.916667 +f1v8s15 f1v0s7 0.982759 +f1v8s15 f1v7s14 0.982759 +f1v8s15 f1v3s10 0.982759 +f1v8s15 f1v13s20 0.948276 +f1v8s15 f1v11s18 0.965517 +f1v8s15 f1v12s19 0.948276 +f2v1s23 f1v6s13 0.931034 +f2v1s23 f1v1s8 0.933333 +f2v1s23 f1v14s21 0.948276 +f2v1s23 f1v5s12 0.933333 +f2v1s23 f1v4s11 1.000000 +f2v1s23 f1v9s16 0.950000 +f2v1s23 f1v10s17 0.933333 +f2v1s23 f1v0s7 1.000000 +f2v1s23 f1v7s14 1.000000 +f2v1s23 f1v3s10 1.000000 +f2v1s23 f1v13s20 0.965517 +f2v1s23 f1v11s18 0.982759 +f2v1s23 f1v12s19 0.965517 +f4v2s42 f4v0s40 0.967213 +f4v2s42 f4v1s41 0.951613 +f0v4s4 f0v1s1 1.000000 +f0v4s4 f2v0s22 0.943662 +f0v4s4 f1v2s9 1.000000 +f0v4s4 f0v5s5 0.943662 +f0v4s4 f0v6s6 0.901408 +f0v4s4 f0v2s2 0.943662 +f0v4s4 f0v3s3 0.915493 +f0v4s4 f0v0s0 0.971429 +f1v6s13 f1v1s8 0.866667 +f1v6s13 f1v14s21 0.879310 +f1v6s13 f1v5s12 0.866667 +f1v6s13 f1v4s11 0.931034 +f1v6s13 f1v9s16 0.883333 +f1v6s13 f1v10s17 0.883333 +f1v6s13 f1v0s7 0.931034 +f1v6s13 f1v7s14 0.931034 +f1v6s13 f1v3s10 0.931034 +f1v6s13 f1v13s20 0.896552 +f1v6s13 f1v11s18 0.913793 +f1v6s13 f1v12s19 0.896552 +f3v8s33 f3v9s34 0.954545 +f3v8s33 f3v2s27 0.969697 +f3v8s33 f3v0s25 0.984848 +f3v8s33 f3v3s28 0.955224 +f3v8s33 f3v13s38 0.955882 +f3v8s33 f3v7s32 0.954545 +f3v8s33 f3v1s26 0.954545 +f3v8s33 f3v6s31 0.954545 +f3v8s33 f3v11s36 0.925373 +f3v8s33 f3v4s29 0.941176 +f3v8s33 f3v12s37 0.955224 +f3v8s33 f3v14s39 0.984848 +f1v1s8 f1v14s21 0.916667 +f1v1s8 f1v5s12 0.870968 +f1v1s8 f1v4s11 0.933333 +f1v1s8 f1v9s16 0.887097 +f1v1s8 f1v10s17 0.870968 +f1v1s8 f1v0s7 0.933333 +f1v1s8 f1v7s14 0.933333 +f1v1s8 f1v3s10 0.933333 +f1v1s8 f1v13s20 0.900000 +f1v1s8 f1v11s18 0.916667 +f1v1s8 f1v12s19 0.916667 +f1v14s21 f1v5s12 0.883333 +f1v14s21 f1v4s11 0.948276 +f1v14s21 f1v9s16 0.900000 +f1v14s21 f1v10s17 0.883333 +f1v14s21 f1v0s7 0.948276 +f1v14s21 f1v7s14 0.948276 +f1v14s21 f1v3s10 0.948276 +f1v14s21 f1v13s20 0.913793 +f1v14s21 f1v11s18 0.931034 +f1v14s21 f1v12s19 0.913793 +f0v1s1 f2v0s22 0.943662 +f0v1s1 f1v2s9 1.000000 +f0v1s1 f0v5s5 0.943662 +f0v1s1 f0v6s6 0.901408 +f0v1s1 f0v2s2 0.943662 +f0v1s1 f0v3s3 0.915493 +f0v1s1 f0v0s0 0.971429 +f1v5s12 f1v4s11 0.933333 +f1v5s12 f1v9s16 0.887097 +f1v5s12 f1v10s17 0.887097 +f1v5s12 f1v0s7 0.933333 +f1v5s12 f1v7s14 0.933333 +f1v5s12 f1v3s10 0.933333 +f1v5s12 f1v13s20 0.900000 +f1v5s12 f1v11s18 0.916667 +f1v5s12 f1v12s19 0.916667 +f1v4s11 f1v9s16 0.950000 +f1v4s11 f1v10s17 0.933333 +f1v4s11 f1v0s7 1.000000 +f1v4s11 f1v7s14 1.000000 +f1v4s11 f1v3s10 1.000000 +f1v4s11 f1v13s20 0.965517 +f1v4s11 f1v11s18 0.982759 +f1v4s11 f1v12s19 0.965517 +f1v9s16 f1v10s17 0.887097 +f1v9s16 f1v0s7 0.950000 +f1v9s16 f1v7s14 0.950000 +f1v9s16 f1v3s10 0.950000 +f1v9s16 f1v13s20 0.916667 +f1v9s16 f1v11s18 0.933333 +f1v9s16 f1v12s19 0.916667 +f1v10s17 f1v0s7 0.933333 +f1v10s17 f1v7s14 0.933333 +f1v10s17 f1v3s10 0.933333 +f1v10s17 f1v13s20 0.900000 +f1v10s17 f1v11s18 0.916667 +f1v10s17 f1v12s19 0.916667 +f1v0s7 f1v7s14 1.000000 +f1v0s7 f1v3s10 1.000000 +f1v0s7 f1v13s20 0.965517 +f1v0s7 f1v11s18 0.982759 +f1v0s7 f1v12s19 0.965517 +f3v9s34 f3v2s27 0.954545 +f3v9s34 f3v0s25 0.969697 +f3v9s34 f3v3s28 0.940299 +f3v9s34 f3v13s38 0.941176 +f3v9s34 f3v7s32 1.000000 +f3v9s34 f3v1s26 0.939394 +f3v9s34 f3v6s31 1.000000 +f3v9s34 f3v11s36 0.910448 +f3v9s34 f3v4s29 0.926471 +f3v9s34 f3v12s37 0.940299 +f3v9s34 f3v14s39 0.969697 +f4v0s40 f4v1s41 0.983607 +f1v7s14 f1v3s10 1.000000 +f1v7s14 f1v13s20 0.965517 +f1v7s14 f1v11s18 0.982759 +f1v7s14 f1v12s19 0.965517 +f3v2s27 f3v0s25 0.984848 +f3v2s27 f3v3s28 0.955224 +f3v2s27 f3v13s38 0.955882 +f3v2s27 f3v7s32 0.954545 +f3v2s27 f3v1s26 0.969231 +f3v2s27 f3v6s31 0.954545 +f3v2s27 f3v11s36 0.925373 +f3v2s27 f3v4s29 0.941176 +f3v2s27 f3v12s37 0.955224 +f3v2s27 f3v14s39 0.984848 +f2v0s22 f1v2s9 0.943662 +f2v0s22 f0v5s5 0.943662 +f2v0s22 f0v6s6 0.901408 +f2v0s22 f0v2s2 1.000000 +f2v0s22 f0v3s3 0.915493 +f2v0s22 f0v0s0 0.971429 +f1v2s9 f0v5s5 0.943662 +f1v2s9 f0v6s6 0.901408 +f1v2s9 f0v2s2 0.943662 +f1v2s9 f0v3s3 0.915493 +f1v2s9 f0v0s0 0.971429 +f1v3s10 f1v13s20 0.965517 +f1v3s10 f1v11s18 0.982759 +f1v3s10 f1v12s19 0.965517 +f3v0s25 f3v3s28 0.970149 +f3v0s25 f3v13s38 0.970588 +f3v0s25 f3v7s32 0.969697 +f3v0s25 f3v1s26 0.969697 +f3v0s25 f3v6s31 0.969697 +f3v0s25 f3v11s36 0.940299 +f3v0s25 f3v4s29 0.955882 +f3v0s25 f3v12s37 0.970149 +f3v0s25 f3v14s39 1.000000 +f3v3s28 f3v13s38 0.955882 +f3v3s28 f3v7s32 0.940299 +f3v3s28 f3v1s26 0.940299 +f3v3s28 f3v6s31 0.940299 +f3v3s28 f3v11s36 0.911765 +f3v3s28 f3v4s29 0.941176 +f3v3s28 f3v12s37 0.941176 +f3v3s28 f3v14s39 0.970149 +f3v13s38 f3v7s32 0.941176 +f3v13s38 f3v1s26 0.941176 +f3v13s38 f3v6s31 0.941176 +f3v13s38 f3v11s36 0.913043 +f3v13s38 f3v4s29 0.942029 +f3v13s38 f3v12s37 0.942029 +f3v13s38 f3v14s39 0.970588 +f3v7s32 f3v1s26 0.939394 +f3v7s32 f3v6s31 1.000000 +f3v7s32 f3v11s36 0.910448 +f3v7s32 f3v4s29 0.926471 +f3v7s32 f3v12s37 0.940299 +f3v7s32 f3v14s39 0.969697 +f3v1s26 f3v6s31 0.939394 +f3v1s26 f3v11s36 0.910448 +f3v1s26 f3v4s29 0.926471 +f3v1s26 f3v12s37 0.940299 +f3v1s26 f3v14s39 0.969697 +f3v6s31 f3v11s36 0.910448 +f3v6s31 f3v4s29 0.926471 +f3v6s31 f3v12s37 0.940299 +f3v6s31 f3v14s39 0.969697 +f1v13s20 f1v11s18 0.948276 +f1v13s20 f1v12s19 0.931034 +f3v11s36 f3v4s29 0.898551 +f3v11s36 f3v12s37 0.911765 +f3v11s36 f3v14s39 0.940299 +f0v5s5 f0v6s6 0.901408 +f0v5s5 f0v2s2 0.943662 +f0v5s5 f0v3s3 0.915493 +f0v5s5 f0v0s0 0.971429 +f1v11s18 f1v12s19 0.948276 +f0v6s6 f0v2s2 0.901408 +f0v6s6 f0v3s3 0.873239 +f0v6s6 f0v0s0 0.928571 +f3v4s29 f3v12s37 0.927536 +f3v4s29 f3v14s39 0.955882 +f0v2s2 f0v3s3 0.915493 +f0v2s2 f0v0s0 0.971429 +f3v12s37 f3v14s39 0.970149 +f0v3s3 f0v0s0 0.942857 diff --git a/pkg/obitools/obialign/testdata/one_rawdist.expected b/pkg/obitools/obialign/testdata/one_rawdist.expected new file mode 100644 index 0000000..982fb6e --- /dev/null +++ b/pkg/obitools/obialign/testdata/one_rawdist.expected @@ -0,0 +1,161 @@ +f3v5s30 f3v0s25 4.000000 +f3v5s30 f3v14s39 4.000000 +f1v8s15 f2v1s23 1.000000 +f1v8s15 f1v6s13 3.000000 +f1v8s15 f1v14s21 4.000000 +f1v8s15 f1v4s11 1.000000 +f1v8s15 f1v9s16 4.000000 +f1v8s15 f1v0s7 1.000000 +f1v8s15 f1v7s14 1.000000 +f1v8s15 f1v3s10 1.000000 +f1v8s15 f1v13s20 3.000000 +f1v8s15 f1v11s18 2.000000 +f1v8s15 f1v12s19 3.000000 +f2v1s23 f1v6s13 4.000000 +f2v1s23 f1v1s8 4.000000 +f2v1s23 f1v14s21 3.000000 +f2v1s23 f1v5s12 4.000000 +f2v1s23 f1v4s11 0.000000 +f2v1s23 f1v9s16 3.000000 +f2v1s23 f1v10s17 4.000000 +f2v1s23 f1v0s7 0.000000 +f2v1s23 f1v7s14 0.000000 +f2v1s23 f1v3s10 0.000000 +f2v1s23 f1v13s20 2.000000 +f2v1s23 f1v11s18 1.000000 +f2v1s23 f1v12s19 2.000000 +f4v2s42 f4v0s40 2.000000 +f4v2s42 f4v1s41 3.000000 +f0v4s4 f0v1s1 0.000000 +f0v4s4 f2v0s22 4.000000 +f0v4s4 f1v2s9 0.000000 +f0v4s4 f0v5s5 4.000000 +f0v4s4 f0v2s2 4.000000 +f0v4s4 f0v0s0 2.000000 +f1v6s13 f1v4s11 4.000000 +f1v6s13 f1v0s7 4.000000 +f1v6s13 f1v7s14 4.000000 +f1v6s13 f1v3s10 4.000000 +f3v8s33 f3v9s34 3.000000 +f3v8s33 f3v2s27 2.000000 +f3v8s33 f3v0s25 1.000000 +f3v8s33 f3v3s28 3.000000 +f3v8s33 f3v13s38 3.000000 +f3v8s33 f3v7s32 3.000000 +f3v8s33 f3v1s26 3.000000 +f3v8s33 f3v6s31 3.000000 +f3v8s33 f3v4s29 4.000000 +f3v8s33 f3v12s37 3.000000 +f3v8s33 f3v14s39 1.000000 +f1v1s8 f1v4s11 4.000000 +f1v1s8 f1v0s7 4.000000 +f1v1s8 f1v7s14 4.000000 +f1v1s8 f1v3s10 4.000000 +f1v14s21 f1v4s11 3.000000 +f1v14s21 f1v0s7 3.000000 +f1v14s21 f1v7s14 3.000000 +f1v14s21 f1v3s10 3.000000 +f1v14s21 f1v11s18 4.000000 +f0v1s1 f2v0s22 4.000000 +f0v1s1 f1v2s9 0.000000 +f0v1s1 f0v5s5 4.000000 +f0v1s1 f0v2s2 4.000000 +f0v1s1 f0v0s0 2.000000 +f1v5s12 f1v4s11 4.000000 +f1v5s12 f1v0s7 4.000000 +f1v5s12 f1v7s14 4.000000 +f1v5s12 f1v3s10 4.000000 +f1v4s11 f1v9s16 3.000000 +f1v4s11 f1v10s17 4.000000 +f1v4s11 f1v0s7 0.000000 +f1v4s11 f1v7s14 0.000000 +f1v4s11 f1v3s10 0.000000 +f1v4s11 f1v13s20 2.000000 +f1v4s11 f1v11s18 1.000000 +f1v4s11 f1v12s19 2.000000 +f1v9s16 f1v0s7 3.000000 +f1v9s16 f1v7s14 3.000000 +f1v9s16 f1v3s10 3.000000 +f1v9s16 f1v11s18 4.000000 +f1v10s17 f1v0s7 4.000000 +f1v10s17 f1v7s14 4.000000 +f1v10s17 f1v3s10 4.000000 +f1v0s7 f1v7s14 0.000000 +f1v0s7 f1v3s10 0.000000 +f1v0s7 f1v13s20 2.000000 +f1v0s7 f1v11s18 1.000000 +f1v0s7 f1v12s19 2.000000 +f3v9s34 f3v2s27 3.000000 +f3v9s34 f3v0s25 2.000000 +f3v9s34 f3v3s28 4.000000 +f3v9s34 f3v13s38 4.000000 +f3v9s34 f3v7s32 0.000000 +f3v9s34 f3v1s26 4.000000 +f3v9s34 f3v6s31 0.000000 +f3v9s34 f3v12s37 4.000000 +f3v9s34 f3v14s39 2.000000 +f4v0s40 f4v1s41 1.000000 +f1v7s14 f1v3s10 0.000000 +f1v7s14 f1v13s20 2.000000 +f1v7s14 f1v11s18 1.000000 +f1v7s14 f1v12s19 2.000000 +f3v2s27 f3v0s25 1.000000 +f3v2s27 f3v3s28 3.000000 +f3v2s27 f3v13s38 3.000000 +f3v2s27 f3v7s32 3.000000 +f3v2s27 f3v1s26 2.000000 +f3v2s27 f3v6s31 3.000000 +f3v2s27 f3v4s29 4.000000 +f3v2s27 f3v12s37 3.000000 +f3v2s27 f3v14s39 1.000000 +f2v0s22 f1v2s9 4.000000 +f2v0s22 f0v5s5 4.000000 +f2v0s22 f0v2s2 0.000000 +f2v0s22 f0v0s0 2.000000 +f1v2s9 f0v5s5 4.000000 +f1v2s9 f0v2s2 4.000000 +f1v2s9 f0v0s0 2.000000 +f1v3s10 f1v13s20 2.000000 +f1v3s10 f1v11s18 1.000000 +f1v3s10 f1v12s19 2.000000 +f3v0s25 f3v3s28 2.000000 +f3v0s25 f3v13s38 2.000000 +f3v0s25 f3v7s32 2.000000 +f3v0s25 f3v1s26 2.000000 +f3v0s25 f3v6s31 2.000000 +f3v0s25 f3v11s36 4.000000 +f3v0s25 f3v4s29 3.000000 +f3v0s25 f3v12s37 2.000000 +f3v0s25 f3v14s39 0.000000 +f3v3s28 f3v13s38 3.000000 +f3v3s28 f3v7s32 4.000000 +f3v3s28 f3v1s26 4.000000 +f3v3s28 f3v6s31 4.000000 +f3v3s28 f3v4s29 4.000000 +f3v3s28 f3v12s37 4.000000 +f3v3s28 f3v14s39 2.000000 +f3v13s38 f3v7s32 4.000000 +f3v13s38 f3v1s26 4.000000 +f3v13s38 f3v6s31 4.000000 +f3v13s38 f3v4s29 4.000000 +f3v13s38 f3v12s37 4.000000 +f3v13s38 f3v14s39 2.000000 +f3v7s32 f3v1s26 4.000000 +f3v7s32 f3v6s31 0.000000 +f3v7s32 f3v12s37 4.000000 +f3v7s32 f3v14s39 2.000000 +f3v1s26 f3v6s31 4.000000 +f3v1s26 f3v12s37 4.000000 +f3v1s26 f3v14s39 2.000000 +f3v6s31 f3v12s37 4.000000 +f3v6s31 f3v14s39 2.000000 +f1v13s20 f1v11s18 3.000000 +f1v13s20 f1v12s19 4.000000 +f3v11s36 f3v14s39 4.000000 +f0v5s5 f0v2s2 4.000000 +f0v5s5 f0v0s0 2.000000 +f1v11s18 f1v12s19 3.000000 +f3v4s29 f3v14s39 3.000000 +f0v2s2 f0v0s0 2.000000 +f3v12s37 f3v14s39 2.000000 +f0v3s3 f0v0s0 4.000000 diff --git a/pkg/obitools/obialign/testdata/one_rawlcs.expected b/pkg/obitools/obialign/testdata/one_rawlcs.expected new file mode 100644 index 0000000..dee5231 --- /dev/null +++ b/pkg/obitools/obialign/testdata/one_rawlcs.expected @@ -0,0 +1,454 @@ +f3v10s35 f3v5s30 58.000000 +f3v10s35 f0v4s4 40.000000 +f3v10s35 f3v8s33 61.000000 +f3v10s35 f0v1s1 40.000000 +f3v10s35 f3v9s34 61.000000 +f3v10s35 f3v2s27 61.000000 +f3v10s35 f2v0s22 40.000000 +f3v10s35 f1v2s9 40.000000 +f3v10s35 f3v0s25 62.000000 +f3v10s35 f3v3s28 61.000000 +f3v10s35 f3v13s38 62.000000 +f3v10s35 f3v7s32 61.000000 +f3v10s35 f3v1s26 61.000000 +f3v10s35 f3v6s31 61.000000 +f3v10s35 f3v11s36 59.000000 +f3v10s35 f3v4s29 61.000000 +f3v10s35 f0v2s2 40.000000 +f3v10s35 f3v12s37 61.000000 +f3v10s35 f0v3s3 40.000000 +f3v10s35 f3v14s39 62.000000 +f3v10s35 f0v0s0 40.000000 +f3v5s30 f3v8s33 61.000000 +f3v5s30 f3v9s34 60.000000 +f3v5s30 f3v2s27 61.000000 +f3v5s30 f2v0s22 40.000000 +f3v5s30 f3v0s25 62.000000 +f3v5s30 f3v3s28 61.000000 +f3v5s30 f3v13s38 62.000000 +f3v5s30 f3v7s32 60.000000 +f3v5s30 f3v1s26 61.000000 +f3v5s30 f3v6s31 60.000000 +f3v5s30 f3v11s36 59.000000 +f3v5s30 f0v6s6 41.000000 +f3v5s30 f3v4s29 61.000000 +f3v5s30 f0v2s2 40.000000 +f3v5s30 f3v12s37 61.000000 +f3v5s30 f0v3s3 40.000000 +f3v5s30 f3v14s39 62.000000 +f3v5s30 f0v0s0 40.000000 +f1v8s15 f2v1s23 57.000000 +f1v8s15 f1v6s13 54.000000 +f1v8s15 f1v1s8 55.000000 +f1v8s15 f1v14s21 54.000000 +f1v8s15 f1v5s12 55.000000 +f1v8s15 f1v4s11 57.000000 +f1v8s15 f1v9s16 56.000000 +f1v8s15 f1v10s17 55.000000 +f1v8s15 f1v0s7 57.000000 +f1v8s15 f3v9s34 40.000000 +f1v8s15 f1v7s14 57.000000 +f1v8s15 f1v3s10 57.000000 +f1v8s15 f3v13s38 40.000000 +f1v8s15 f3v7s32 40.000000 +f1v8s15 f3v6s31 40.000000 +f1v8s15 f1v13s20 55.000000 +f1v8s15 f1v11s18 56.000000 +f1v8s15 f3v4s29 40.000000 +f1v8s15 f3v12s37 40.000000 +f1v8s15 f1v12s19 55.000000 +f2v1s23 f1v6s13 54.000000 +f2v1s23 f1v1s8 56.000000 +f2v1s23 f1v14s21 55.000000 +f2v1s23 f1v5s12 56.000000 +f2v1s23 f1v4s11 58.000000 +f2v1s23 f1v9s16 57.000000 +f2v1s23 f1v10s17 56.000000 +f2v1s23 f1v0s7 58.000000 +f2v1s23 f3v9s34 40.000000 +f2v1s23 f1v7s14 58.000000 +f2v1s23 f1v3s10 58.000000 +f2v1s23 f3v13s38 40.000000 +f2v1s23 f3v7s32 40.000000 +f2v1s23 f3v6s31 40.000000 +f2v1s23 f1v13s20 56.000000 +f2v1s23 f1v11s18 57.000000 +f2v1s23 f3v4s29 40.000000 +f2v1s23 f3v12s37 40.000000 +f2v1s23 f1v12s19 56.000000 +f4v2s42 f4v0s40 59.000000 +f4v2s42 f4v1s41 59.000000 +f4v2s42 f2v0s22 41.000000 +f4v2s42 f0v5s5 40.000000 +f4v2s42 f0v6s6 41.000000 +f4v2s42 f0v2s2 41.000000 +f4v2s42 f0v0s0 40.000000 +f0v4s4 f3v8s33 41.000000 +f0v4s4 f0v1s1 69.000000 +f0v4s4 f3v9s34 40.000000 +f0v4s4 f3v2s27 40.000000 +f0v4s4 f2v0s22 67.000000 +f0v4s4 f1v2s9 69.000000 +f0v4s4 f3v0s25 40.000000 +f0v4s4 f3v3s28 40.000000 +f0v4s4 f3v13s38 40.000000 +f0v4s4 f3v7s32 40.000000 +f0v4s4 f3v6s31 40.000000 +f0v4s4 f0v5s5 67.000000 +f0v4s4 f0v6s6 64.000000 +f0v4s4 f3v4s29 42.000000 +f0v4s4 f0v2s2 67.000000 +f0v4s4 f3v12s37 40.000000 +f0v4s4 f0v3s3 65.000000 +f0v4s4 f3v14s39 40.000000 +f0v4s4 f0v0s0 68.000000 +f1v6s13 f1v1s8 52.000000 +f1v6s13 f1v14s21 51.000000 +f1v6s13 f1v5s12 52.000000 +f1v6s13 f1v4s11 54.000000 +f1v6s13 f1v9s16 53.000000 +f1v6s13 f1v10s17 53.000000 +f1v6s13 f1v0s7 54.000000 +f1v6s13 f1v7s14 54.000000 +f1v6s13 f1v3s10 54.000000 +f1v6s13 f1v13s20 52.000000 +f1v6s13 f1v11s18 53.000000 +f1v6s13 f3v4s29 40.000000 +f1v6s13 f3v12s37 40.000000 +f1v6s13 f1v12s19 52.000000 +f3v8s33 f1v1s8 40.000000 +f3v8s33 f0v1s1 41.000000 +f3v8s33 f1v10s17 40.000000 +f3v8s33 f3v9s34 63.000000 +f3v8s33 f3v2s27 64.000000 +f3v8s33 f2v0s22 42.000000 +f3v8s33 f1v2s9 41.000000 +f3v8s33 f3v0s25 65.000000 +f3v8s33 f3v3s28 64.000000 +f3v8s33 f3v13s38 65.000000 +f3v8s33 f3v7s32 63.000000 +f3v8s33 f3v1s26 63.000000 +f3v8s33 f3v6s31 63.000000 +f3v8s33 f3v11s36 62.000000 +f3v8s33 f0v5s5 41.000000 +f3v8s33 f0v6s6 41.000000 +f3v8s33 f3v4s29 64.000000 +f3v8s33 f0v2s2 42.000000 +f3v8s33 f3v12s37 64.000000 +f3v8s33 f0v3s3 41.000000 +f3v8s33 f3v14s39 65.000000 +f3v8s33 f0v0s0 42.000000 +f1v1s8 f1v14s21 55.000000 +f1v1s8 f1v5s12 54.000000 +f1v1s8 f1v4s11 56.000000 +f1v1s8 f1v9s16 55.000000 +f1v1s8 f1v10s17 54.000000 +f1v1s8 f1v0s7 56.000000 +f1v1s8 f3v9s34 41.000000 +f1v1s8 f1v7s14 56.000000 +f1v1s8 f3v2s27 40.000000 +f1v1s8 f1v3s10 56.000000 +f1v1s8 f3v0s25 40.000000 +f1v1s8 f3v3s28 40.000000 +f1v1s8 f3v13s38 41.000000 +f1v1s8 f3v7s32 41.000000 +f1v1s8 f3v1s26 40.000000 +f1v1s8 f3v6s31 41.000000 +f1v1s8 f1v13s20 54.000000 +f1v1s8 f1v11s18 55.000000 +f1v1s8 f3v4s29 41.000000 +f1v1s8 f3v12s37 41.000000 +f1v1s8 f3v14s39 40.000000 +f1v1s8 f1v12s19 55.000000 +f1v14s21 f1v5s12 53.000000 +f1v14s21 f1v4s11 55.000000 +f1v14s21 f1v9s16 54.000000 +f1v14s21 f1v10s17 53.000000 +f1v14s21 f1v0s7 55.000000 +f1v14s21 f1v7s14 55.000000 +f1v14s21 f1v3s10 55.000000 +f1v14s21 f1v13s20 53.000000 +f1v14s21 f1v11s18 54.000000 +f1v14s21 f1v12s19 53.000000 +f0v1s1 f3v9s34 40.000000 +f0v1s1 f3v2s27 40.000000 +f0v1s1 f2v0s22 67.000000 +f0v1s1 f1v2s9 69.000000 +f0v1s1 f3v0s25 40.000000 +f0v1s1 f3v3s28 40.000000 +f0v1s1 f3v13s38 40.000000 +f0v1s1 f3v7s32 40.000000 +f0v1s1 f3v6s31 40.000000 +f0v1s1 f0v5s5 67.000000 +f0v1s1 f0v6s6 64.000000 +f0v1s1 f3v4s29 42.000000 +f0v1s1 f0v2s2 67.000000 +f0v1s1 f3v12s37 40.000000 +f0v1s1 f0v3s3 65.000000 +f0v1s1 f3v14s39 40.000000 +f0v1s1 f0v0s0 68.000000 +f1v5s12 f1v4s11 56.000000 +f1v5s12 f1v9s16 55.000000 +f1v5s12 f1v10s17 55.000000 +f1v5s12 f1v0s7 56.000000 +f1v5s12 f3v9s34 40.000000 +f1v5s12 f1v7s14 56.000000 +f1v5s12 f2v0s22 40.000000 +f1v5s12 f1v3s10 56.000000 +f1v5s12 f3v13s38 40.000000 +f1v5s12 f3v7s32 40.000000 +f1v5s12 f3v6s31 40.000000 +f1v5s12 f1v13s20 54.000000 +f1v5s12 f1v11s18 55.000000 +f1v5s12 f3v4s29 40.000000 +f1v5s12 f0v2s2 40.000000 +f1v5s12 f3v12s37 40.000000 +f1v5s12 f0v0s0 40.000000 +f1v5s12 f1v12s19 55.000000 +f1v4s11 f1v9s16 57.000000 +f1v4s11 f1v10s17 56.000000 +f1v4s11 f1v0s7 58.000000 +f1v4s11 f3v9s34 40.000000 +f1v4s11 f1v7s14 58.000000 +f1v4s11 f1v3s10 58.000000 +f1v4s11 f3v13s38 40.000000 +f1v4s11 f3v7s32 40.000000 +f1v4s11 f3v6s31 40.000000 +f1v4s11 f1v13s20 56.000000 +f1v4s11 f1v11s18 57.000000 +f1v4s11 f3v4s29 40.000000 +f1v4s11 f3v12s37 40.000000 +f1v4s11 f1v12s19 56.000000 +f1v9s16 f1v10s17 55.000000 +f1v9s16 f1v0s7 57.000000 +f1v9s16 f1v7s14 57.000000 +f1v9s16 f2v0s22 40.000000 +f1v9s16 f1v3s10 57.000000 +f1v9s16 f3v13s38 40.000000 +f1v9s16 f1v13s20 55.000000 +f1v9s16 f0v5s5 40.000000 +f1v9s16 f1v11s18 56.000000 +f1v9s16 f3v4s29 40.000000 +f1v9s16 f0v2s2 40.000000 +f1v9s16 f3v12s37 40.000000 +f1v9s16 f0v3s3 41.000000 +f1v9s16 f0v0s0 40.000000 +f1v9s16 f1v12s19 55.000000 +f1v10s17 f1v0s7 56.000000 +f1v10s17 f3v9s34 41.000000 +f1v10s17 f1v7s14 56.000000 +f1v10s17 f3v2s27 40.000000 +f1v10s17 f1v3s10 56.000000 +f1v10s17 f3v0s25 40.000000 +f1v10s17 f3v3s28 40.000000 +f1v10s17 f3v13s38 41.000000 +f1v10s17 f3v7s32 41.000000 +f1v10s17 f3v6s31 41.000000 +f1v10s17 f1v13s20 54.000000 +f1v10s17 f3v11s36 41.000000 +f1v10s17 f1v11s18 55.000000 +f1v10s17 f3v4s29 40.000000 +f1v10s17 f3v12s37 41.000000 +f1v10s17 f0v3s3 40.000000 +f1v10s17 f3v14s39 40.000000 +f1v10s17 f0v0s0 40.000000 +f1v10s17 f1v12s19 55.000000 +f1v0s7 f3v9s34 40.000000 +f1v0s7 f1v7s14 58.000000 +f1v0s7 f1v3s10 58.000000 +f1v0s7 f3v13s38 40.000000 +f1v0s7 f3v7s32 40.000000 +f1v0s7 f3v6s31 40.000000 +f1v0s7 f1v13s20 56.000000 +f1v0s7 f1v11s18 57.000000 +f1v0s7 f3v4s29 40.000000 +f1v0s7 f3v12s37 40.000000 +f1v0s7 f1v12s19 56.000000 +f3v9s34 f1v7s14 40.000000 +f3v9s34 f3v2s27 63.000000 +f3v9s34 f2v0s22 40.000000 +f3v9s34 f1v2s9 40.000000 +f3v9s34 f1v3s10 40.000000 +f3v9s34 f3v0s25 64.000000 +f3v9s34 f3v3s28 63.000000 +f3v9s34 f3v13s38 64.000000 +f3v9s34 f3v7s32 65.000000 +f3v9s34 f3v1s26 62.000000 +f3v9s34 f3v6s31 65.000000 +f3v9s34 f3v11s36 61.000000 +f3v9s34 f0v5s5 40.000000 +f3v9s34 f1v11s18 40.000000 +f3v9s34 f3v4s29 63.000000 +f3v9s34 f0v2s2 40.000000 +f3v9s34 f3v12s37 63.000000 +f3v9s34 f0v3s3 41.000000 +f3v9s34 f3v14s39 64.000000 +f3v9s34 f0v0s0 41.000000 +f4v0s40 f4v1s41 60.000000 +f1v7s14 f1v3s10 58.000000 +f1v7s14 f3v13s38 40.000000 +f1v7s14 f3v7s32 40.000000 +f1v7s14 f3v6s31 40.000000 +f1v7s14 f1v13s20 56.000000 +f1v7s14 f1v11s18 57.000000 +f1v7s14 f3v4s29 40.000000 +f1v7s14 f3v12s37 40.000000 +f1v7s14 f1v12s19 56.000000 +f3v2s27 f2v0s22 41.000000 +f3v2s27 f1v2s9 40.000000 +f3v2s27 f3v0s25 65.000000 +f3v2s27 f3v3s28 64.000000 +f3v2s27 f3v13s38 65.000000 +f3v2s27 f3v7s32 63.000000 +f3v2s27 f3v1s26 63.000000 +f3v2s27 f3v6s31 63.000000 +f3v2s27 f3v11s36 62.000000 +f3v2s27 f0v5s5 40.000000 +f3v2s27 f0v6s6 40.000000 +f3v2s27 f3v4s29 64.000000 +f3v2s27 f0v2s2 41.000000 +f3v2s27 f3v12s37 64.000000 +f3v2s27 f0v3s3 41.000000 +f3v2s27 f3v14s39 65.000000 +f3v2s27 f0v0s0 41.000000 +f2v0s22 f1v2s9 67.000000 +f2v0s22 f3v0s25 41.000000 +f2v0s22 f3v3s28 41.000000 +f2v0s22 f3v13s38 41.000000 +f2v0s22 f3v7s32 40.000000 +f2v0s22 f3v1s26 40.000000 +f2v0s22 f3v6s31 40.000000 +f2v0s22 f0v5s5 67.000000 +f2v0s22 f0v6s6 64.000000 +f2v0s22 f3v4s29 43.000000 +f2v0s22 f0v2s2 69.000000 +f2v0s22 f3v12s37 42.000000 +f2v0s22 f0v3s3 65.000000 +f2v0s22 f3v14s39 41.000000 +f2v0s22 f0v0s0 68.000000 +f1v2s9 f3v0s25 40.000000 +f1v2s9 f3v3s28 40.000000 +f1v2s9 f3v13s38 40.000000 +f1v2s9 f3v7s32 40.000000 +f1v2s9 f3v6s31 40.000000 +f1v2s9 f0v5s5 67.000000 +f1v2s9 f0v6s6 64.000000 +f1v2s9 f3v4s29 42.000000 +f1v2s9 f0v2s2 67.000000 +f1v2s9 f3v12s37 40.000000 +f1v2s9 f0v3s3 65.000000 +f1v2s9 f3v14s39 40.000000 +f1v2s9 f0v0s0 68.000000 +f1v3s10 f3v13s38 40.000000 +f1v3s10 f3v7s32 40.000000 +f1v3s10 f3v6s31 40.000000 +f1v3s10 f1v13s20 56.000000 +f1v3s10 f1v11s18 57.000000 +f1v3s10 f3v4s29 40.000000 +f1v3s10 f3v12s37 40.000000 +f1v3s10 f1v12s19 56.000000 +f3v0s25 f3v3s28 65.000000 +f3v0s25 f3v13s38 66.000000 +f3v0s25 f3v7s32 64.000000 +f3v0s25 f3v1s26 64.000000 +f3v0s25 f3v6s31 64.000000 +f3v0s25 f3v11s36 63.000000 +f3v0s25 f0v5s5 40.000000 +f3v0s25 f0v6s6 40.000000 +f3v0s25 f3v4s29 65.000000 +f3v0s25 f0v2s2 41.000000 +f3v0s25 f3v12s37 65.000000 +f3v0s25 f0v3s3 41.000000 +f3v0s25 f3v14s39 66.000000 +f3v0s25 f0v0s0 41.000000 +f3v3s28 f3v13s38 65.000000 +f3v3s28 f3v7s32 63.000000 +f3v3s28 f3v1s26 63.000000 +f3v3s28 f3v6s31 63.000000 +f3v3s28 f3v11s36 62.000000 +f3v3s28 f0v5s5 40.000000 +f3v3s28 f0v6s6 40.000000 +f3v3s28 f3v4s29 64.000000 +f3v3s28 f0v2s2 41.000000 +f3v3s28 f3v12s37 64.000000 +f3v3s28 f0v3s3 41.000000 +f3v3s28 f3v14s39 65.000000 +f3v3s28 f0v0s0 41.000000 +f3v13s38 f3v7s32 64.000000 +f3v13s38 f3v1s26 64.000000 +f3v13s38 f3v6s31 64.000000 +f3v13s38 f3v11s36 63.000000 +f3v13s38 f0v5s5 40.000000 +f3v13s38 f1v11s18 40.000000 +f3v13s38 f0v6s6 40.000000 +f3v13s38 f3v4s29 65.000000 +f3v13s38 f0v2s2 41.000000 +f3v13s38 f3v12s37 65.000000 +f3v13s38 f0v3s3 41.000000 +f3v13s38 f3v14s39 66.000000 +f3v13s38 f0v0s0 41.000000 +f3v7s32 f3v1s26 62.000000 +f3v7s32 f3v6s31 65.000000 +f3v7s32 f3v11s36 61.000000 +f3v7s32 f0v5s5 40.000000 +f3v7s32 f1v11s18 40.000000 +f3v7s32 f3v4s29 63.000000 +f3v7s32 f0v2s2 40.000000 +f3v7s32 f3v12s37 63.000000 +f3v7s32 f0v3s3 41.000000 +f3v7s32 f3v14s39 64.000000 +f3v7s32 f0v0s0 41.000000 +f3v1s26 f3v6s31 62.000000 +f3v1s26 f3v11s36 61.000000 +f3v1s26 f3v4s29 63.000000 +f3v1s26 f0v2s2 40.000000 +f3v1s26 f3v12s37 63.000000 +f3v1s26 f0v3s3 40.000000 +f3v1s26 f3v14s39 64.000000 +f3v1s26 f0v0s0 40.000000 +f3v6s31 f3v11s36 61.000000 +f3v6s31 f0v5s5 40.000000 +f3v6s31 f1v11s18 40.000000 +f3v6s31 f3v4s29 63.000000 +f3v6s31 f0v2s2 40.000000 +f3v6s31 f3v12s37 63.000000 +f3v6s31 f0v3s3 41.000000 +f3v6s31 f3v14s39 64.000000 +f3v6s31 f0v0s0 41.000000 +f1v13s20 f1v11s18 55.000000 +f1v13s20 f1v12s19 54.000000 +f3v11s36 f3v4s29 62.000000 +f3v11s36 f3v12s37 62.000000 +f3v11s36 f3v14s39 63.000000 +f0v5s5 f1v11s18 40.000000 +f0v5s5 f0v6s6 64.000000 +f0v5s5 f3v4s29 42.000000 +f0v5s5 f0v2s2 67.000000 +f0v5s5 f3v12s37 40.000000 +f0v5s5 f0v3s3 65.000000 +f0v5s5 f3v14s39 40.000000 +f0v5s5 f0v0s0 68.000000 +f1v11s18 f3v4s29 40.000000 +f1v11s18 f3v12s37 40.000000 +f1v11s18 f1v12s19 55.000000 +f0v6s6 f3v4s29 42.000000 +f0v6s6 f0v2s2 64.000000 +f0v6s6 f3v12s37 40.000000 +f0v6s6 f0v3s3 62.000000 +f0v6s6 f3v14s39 40.000000 +f0v6s6 f0v0s0 65.000000 +f3v4s29 f0v2s2 43.000000 +f3v4s29 f3v12s37 64.000000 +f3v4s29 f0v3s3 43.000000 +f3v4s29 f3v14s39 65.000000 +f3v4s29 f0v0s0 43.000000 +f0v2s2 f3v12s37 42.000000 +f0v2s2 f0v3s3 65.000000 +f0v2s2 f3v14s39 41.000000 +f0v2s2 f0v0s0 68.000000 +f3v12s37 f0v3s3 41.000000 +f3v12s37 f3v14s39 65.000000 +f3v12s37 f0v0s0 41.000000 +f0v3s3 f3v14s39 41.000000 +f0v3s3 f0v0s0 66.000000 +f3v14s39 f0v0s0 41.000000 diff --git a/pkg/obitools/obialign/testdata/one_rawlcs_shortest.expected b/pkg/obitools/obialign/testdata/one_rawlcs_shortest.expected new file mode 100644 index 0000000..5922e93 --- /dev/null +++ b/pkg/obitools/obialign/testdata/one_rawlcs_shortest.expected @@ -0,0 +1,249 @@ +f3v10s35 f3v5s30 58.000000 +f3v10s35 f3v8s33 61.000000 +f3v10s35 f3v9s34 61.000000 +f3v10s35 f3v2s27 61.000000 +f3v10s35 f3v0s25 62.000000 +f3v10s35 f3v3s28 61.000000 +f3v10s35 f3v13s38 62.000000 +f3v10s35 f3v7s32 61.000000 +f3v10s35 f3v1s26 61.000000 +f3v10s35 f3v6s31 61.000000 +f3v10s35 f3v11s36 59.000000 +f3v10s35 f3v4s29 61.000000 +f3v10s35 f3v12s37 61.000000 +f3v10s35 f3v14s39 62.000000 +f3v5s30 f3v8s33 61.000000 +f3v5s30 f3v9s34 60.000000 +f3v5s30 f3v2s27 61.000000 +f3v5s30 f3v0s25 62.000000 +f3v5s30 f3v3s28 61.000000 +f3v5s30 f3v13s38 62.000000 +f3v5s30 f3v7s32 60.000000 +f3v5s30 f3v1s26 61.000000 +f3v5s30 f3v6s31 60.000000 +f3v5s30 f3v11s36 59.000000 +f3v5s30 f3v4s29 61.000000 +f3v5s30 f3v12s37 61.000000 +f3v5s30 f3v14s39 62.000000 +f1v8s15 f2v1s23 57.000000 +f1v8s15 f1v6s13 54.000000 +f1v8s15 f1v1s8 55.000000 +f1v8s15 f1v14s21 54.000000 +f1v8s15 f1v5s12 55.000000 +f1v8s15 f1v4s11 57.000000 +f1v8s15 f1v9s16 56.000000 +f1v8s15 f1v10s17 55.000000 +f1v8s15 f1v0s7 57.000000 +f1v8s15 f1v7s14 57.000000 +f1v8s15 f1v3s10 57.000000 +f1v8s15 f1v13s20 55.000000 +f1v8s15 f1v11s18 56.000000 +f1v8s15 f1v12s19 55.000000 +f2v1s23 f1v6s13 54.000000 +f2v1s23 f1v1s8 56.000000 +f2v1s23 f1v14s21 55.000000 +f2v1s23 f1v5s12 56.000000 +f2v1s23 f1v4s11 58.000000 +f2v1s23 f1v9s16 57.000000 +f2v1s23 f1v10s17 56.000000 +f2v1s23 f1v0s7 58.000000 +f2v1s23 f1v7s14 58.000000 +f2v1s23 f1v3s10 58.000000 +f2v1s23 f1v13s20 56.000000 +f2v1s23 f1v11s18 57.000000 +f2v1s23 f1v12s19 56.000000 +f4v2s42 f4v0s40 59.000000 +f4v2s42 f4v1s41 59.000000 +f0v4s4 f0v1s1 69.000000 +f0v4s4 f2v0s22 67.000000 +f0v4s4 f1v2s9 69.000000 +f0v4s4 f0v5s5 67.000000 +f0v4s4 f0v6s6 64.000000 +f0v4s4 f0v2s2 67.000000 +f0v4s4 f0v3s3 65.000000 +f0v4s4 f0v0s0 68.000000 +f1v6s13 f1v1s8 52.000000 +f1v6s13 f1v14s21 51.000000 +f1v6s13 f1v5s12 52.000000 +f1v6s13 f1v4s11 54.000000 +f1v6s13 f1v9s16 53.000000 +f1v6s13 f1v10s17 53.000000 +f1v6s13 f1v0s7 54.000000 +f1v6s13 f1v7s14 54.000000 +f1v6s13 f1v3s10 54.000000 +f1v6s13 f1v13s20 52.000000 +f1v6s13 f1v11s18 53.000000 +f1v6s13 f1v12s19 52.000000 +f3v8s33 f3v9s34 63.000000 +f3v8s33 f3v2s27 64.000000 +f3v8s33 f3v0s25 65.000000 +f3v8s33 f3v3s28 64.000000 +f3v8s33 f3v13s38 65.000000 +f3v8s33 f3v7s32 63.000000 +f3v8s33 f3v1s26 63.000000 +f3v8s33 f3v6s31 63.000000 +f3v8s33 f3v11s36 62.000000 +f3v8s33 f3v4s29 64.000000 +f3v8s33 f3v12s37 64.000000 +f3v8s33 f3v14s39 65.000000 +f1v1s8 f1v14s21 55.000000 +f1v1s8 f1v5s12 54.000000 +f1v1s8 f1v4s11 56.000000 +f1v1s8 f1v9s16 55.000000 +f1v1s8 f1v10s17 54.000000 +f1v1s8 f1v0s7 56.000000 +f1v1s8 f1v7s14 56.000000 +f1v1s8 f1v3s10 56.000000 +f1v1s8 f1v13s20 54.000000 +f1v1s8 f1v11s18 55.000000 +f1v1s8 f1v12s19 55.000000 +f1v14s21 f1v5s12 53.000000 +f1v14s21 f1v4s11 55.000000 +f1v14s21 f1v9s16 54.000000 +f1v14s21 f1v10s17 53.000000 +f1v14s21 f1v0s7 55.000000 +f1v14s21 f1v7s14 55.000000 +f1v14s21 f1v3s10 55.000000 +f1v14s21 f1v13s20 53.000000 +f1v14s21 f1v11s18 54.000000 +f1v14s21 f1v12s19 53.000000 +f0v1s1 f2v0s22 67.000000 +f0v1s1 f1v2s9 69.000000 +f0v1s1 f0v5s5 67.000000 +f0v1s1 f0v6s6 64.000000 +f0v1s1 f0v2s2 67.000000 +f0v1s1 f0v3s3 65.000000 +f0v1s1 f0v0s0 68.000000 +f1v5s12 f1v4s11 56.000000 +f1v5s12 f1v9s16 55.000000 +f1v5s12 f1v10s17 55.000000 +f1v5s12 f1v0s7 56.000000 +f1v5s12 f1v7s14 56.000000 +f1v5s12 f1v3s10 56.000000 +f1v5s12 f1v13s20 54.000000 +f1v5s12 f1v11s18 55.000000 +f1v5s12 f1v12s19 55.000000 +f1v4s11 f1v9s16 57.000000 +f1v4s11 f1v10s17 56.000000 +f1v4s11 f1v0s7 58.000000 +f1v4s11 f1v7s14 58.000000 +f1v4s11 f1v3s10 58.000000 +f1v4s11 f1v13s20 56.000000 +f1v4s11 f1v11s18 57.000000 +f1v4s11 f1v12s19 56.000000 +f1v9s16 f1v10s17 55.000000 +f1v9s16 f1v0s7 57.000000 +f1v9s16 f1v7s14 57.000000 +f1v9s16 f1v3s10 57.000000 +f1v9s16 f1v13s20 55.000000 +f1v9s16 f1v11s18 56.000000 +f1v9s16 f1v12s19 55.000000 +f1v10s17 f1v0s7 56.000000 +f1v10s17 f1v7s14 56.000000 +f1v10s17 f1v3s10 56.000000 +f1v10s17 f1v13s20 54.000000 +f1v10s17 f1v11s18 55.000000 +f1v10s17 f1v12s19 55.000000 +f1v0s7 f1v7s14 58.000000 +f1v0s7 f1v3s10 58.000000 +f1v0s7 f1v13s20 56.000000 +f1v0s7 f1v11s18 57.000000 +f1v0s7 f1v12s19 56.000000 +f3v9s34 f3v2s27 63.000000 +f3v9s34 f3v0s25 64.000000 +f3v9s34 f3v3s28 63.000000 +f3v9s34 f3v13s38 64.000000 +f3v9s34 f3v7s32 65.000000 +f3v9s34 f3v1s26 62.000000 +f3v9s34 f3v6s31 65.000000 +f3v9s34 f3v11s36 61.000000 +f3v9s34 f3v4s29 63.000000 +f3v9s34 f3v12s37 63.000000 +f3v9s34 f3v14s39 64.000000 +f4v0s40 f4v1s41 60.000000 +f1v7s14 f1v3s10 58.000000 +f1v7s14 f1v13s20 56.000000 +f1v7s14 f1v11s18 57.000000 +f1v7s14 f1v12s19 56.000000 +f3v2s27 f3v0s25 65.000000 +f3v2s27 f3v3s28 64.000000 +f3v2s27 f3v13s38 65.000000 +f3v2s27 f3v7s32 63.000000 +f3v2s27 f3v1s26 63.000000 +f3v2s27 f3v6s31 63.000000 +f3v2s27 f3v11s36 62.000000 +f3v2s27 f3v4s29 64.000000 +f3v2s27 f3v12s37 64.000000 +f3v2s27 f3v14s39 65.000000 +f2v0s22 f1v2s9 67.000000 +f2v0s22 f0v5s5 67.000000 +f2v0s22 f0v6s6 64.000000 +f2v0s22 f0v2s2 69.000000 +f2v0s22 f0v3s3 65.000000 +f2v0s22 f0v0s0 68.000000 +f1v2s9 f0v5s5 67.000000 +f1v2s9 f0v6s6 64.000000 +f1v2s9 f0v2s2 67.000000 +f1v2s9 f0v3s3 65.000000 +f1v2s9 f0v0s0 68.000000 +f1v3s10 f1v13s20 56.000000 +f1v3s10 f1v11s18 57.000000 +f1v3s10 f1v12s19 56.000000 +f3v0s25 f3v3s28 65.000000 +f3v0s25 f3v13s38 66.000000 +f3v0s25 f3v7s32 64.000000 +f3v0s25 f3v1s26 64.000000 +f3v0s25 f3v6s31 64.000000 +f3v0s25 f3v11s36 63.000000 +f3v0s25 f3v4s29 65.000000 +f3v0s25 f3v12s37 65.000000 +f3v0s25 f3v14s39 66.000000 +f3v3s28 f3v13s38 65.000000 +f3v3s28 f3v7s32 63.000000 +f3v3s28 f3v1s26 63.000000 +f3v3s28 f3v6s31 63.000000 +f3v3s28 f3v11s36 62.000000 +f3v3s28 f3v4s29 64.000000 +f3v3s28 f3v12s37 64.000000 +f3v3s28 f3v14s39 65.000000 +f3v13s38 f3v7s32 64.000000 +f3v13s38 f3v1s26 64.000000 +f3v13s38 f3v6s31 64.000000 +f3v13s38 f3v11s36 63.000000 +f3v13s38 f3v4s29 65.000000 +f3v13s38 f3v12s37 65.000000 +f3v13s38 f3v14s39 66.000000 +f3v7s32 f3v1s26 62.000000 +f3v7s32 f3v6s31 65.000000 +f3v7s32 f3v11s36 61.000000 +f3v7s32 f3v4s29 63.000000 +f3v7s32 f3v12s37 63.000000 +f3v7s32 f3v14s39 64.000000 +f3v1s26 f3v6s31 62.000000 +f3v1s26 f3v11s36 61.000000 +f3v1s26 f3v4s29 63.000000 +f3v1s26 f3v12s37 63.000000 +f3v1s26 f3v14s39 64.000000 +f3v6s31 f3v11s36 61.000000 +f3v6s31 f3v4s29 63.000000 +f3v6s31 f3v12s37 63.000000 +f3v6s31 f3v14s39 64.000000 +f1v13s20 f1v11s18 55.000000 +f1v13s20 f1v12s19 54.000000 +f3v11s36 f3v4s29 62.000000 +f3v11s36 f3v12s37 62.000000 +f3v11s36 f3v14s39 63.000000 +f0v5s5 f0v6s6 64.000000 +f0v5s5 f0v2s2 67.000000 +f0v5s5 f0v3s3 65.000000 +f0v5s5 f0v0s0 68.000000 +f1v11s18 f1v12s19 55.000000 +f0v6s6 f0v2s2 64.000000 +f0v6s6 f0v3s3 62.000000 +f0v6s6 f0v0s0 65.000000 +f3v4s29 f3v12s37 64.000000 +f3v4s29 f3v14s39 65.000000 +f0v2s2 f0v3s3 65.000000 +f0v2s2 f0v0s0 68.000000 +f3v12s37 f3v14s39 65.000000 +f0v3s3 f0v0s0 66.000000 diff --git a/pkg/obitools/obialign/testdata/one_shortest.expected b/pkg/obitools/obialign/testdata/one_shortest.expected new file mode 100644 index 0000000..7d22af3 --- /dev/null +++ b/pkg/obitools/obialign/testdata/one_shortest.expected @@ -0,0 +1,249 @@ +f3v10s35 f3v5s30 0.920635 +f3v10s35 f3v8s33 0.938462 +f3v10s35 f3v9s34 0.938462 +f3v10s35 f3v2s27 0.938462 +f3v10s35 f3v0s25 0.953846 +f3v10s35 f3v3s28 0.938462 +f3v10s35 f3v13s38 0.953846 +f3v10s35 f3v7s32 0.938462 +f3v10s35 f3v1s26 0.938462 +f3v10s35 f3v6s31 0.938462 +f3v10s35 f3v11s36 0.907692 +f3v10s35 f3v4s29 0.938462 +f3v10s35 f3v12s37 0.938462 +f3v10s35 f3v14s39 0.953846 +f3v5s30 f3v8s33 0.968254 +f3v5s30 f3v9s34 0.952381 +f3v5s30 f3v2s27 0.968254 +f3v5s30 f3v0s25 0.984127 +f3v5s30 f3v3s28 0.968254 +f3v5s30 f3v13s38 0.984127 +f3v5s30 f3v7s32 0.952381 +f3v5s30 f3v1s26 0.968254 +f3v5s30 f3v6s31 0.952381 +f3v5s30 f3v11s36 0.936508 +f3v5s30 f3v4s29 0.968254 +f3v5s30 f3v12s37 0.968254 +f3v5s30 f3v14s39 0.984127 +f1v8s15 f2v1s23 1.000000 +f1v8s15 f1v6s13 0.964286 +f1v8s15 f1v1s8 0.964912 +f1v8s15 f1v14s21 0.964286 +f1v8s15 f1v5s12 0.964912 +f1v8s15 f1v4s11 1.000000 +f1v8s15 f1v9s16 0.982456 +f1v8s15 f1v10s17 0.964912 +f1v8s15 f1v0s7 1.000000 +f1v8s15 f1v7s14 1.000000 +f1v8s15 f1v3s10 1.000000 +f1v8s15 f1v13s20 0.982143 +f1v8s15 f1v11s18 0.982456 +f1v8s15 f1v12s19 0.964912 +f2v1s23 f1v6s13 0.964286 +f2v1s23 f1v1s8 0.965517 +f2v1s23 f1v14s21 0.982143 +f2v1s23 f1v5s12 0.965517 +f2v1s23 f1v4s11 1.000000 +f2v1s23 f1v9s16 0.982759 +f2v1s23 f1v10s17 0.965517 +f2v1s23 f1v0s7 1.000000 +f2v1s23 f1v7s14 1.000000 +f2v1s23 f1v3s10 1.000000 +f2v1s23 f1v13s20 1.000000 +f2v1s23 f1v11s18 0.982759 +f2v1s23 f1v12s19 0.982456 +f4v2s42 f4v0s40 0.983333 +f4v2s42 f4v1s41 0.967213 +f0v4s4 f0v1s1 1.000000 +f0v4s4 f2v0s22 0.971014 +f0v4s4 f1v2s9 1.000000 +f0v4s4 f0v5s5 0.971014 +f0v4s4 f0v6s6 0.927536 +f0v4s4 f0v2s2 0.971014 +f0v4s4 f0v3s3 0.970149 +f0v4s4 f0v0s0 0.985507 +f1v6s13 f1v1s8 0.928571 +f1v6s13 f1v14s21 0.910714 +f1v6s13 f1v5s12 0.928571 +f1v6s13 f1v4s11 0.964286 +f1v6s13 f1v9s16 0.946429 +f1v6s13 f1v10s17 0.946429 +f1v6s13 f1v0s7 0.964286 +f1v6s13 f1v7s14 0.964286 +f1v6s13 f1v3s10 0.964286 +f1v6s13 f1v13s20 0.928571 +f1v6s13 f1v11s18 0.946429 +f1v6s13 f1v12s19 0.928571 +f3v8s33 f3v9s34 0.969231 +f3v8s33 f3v2s27 0.984615 +f3v8s33 f3v0s25 0.984848 +f3v8s33 f3v3s28 0.969697 +f3v8s33 f3v13s38 0.984848 +f3v8s33 f3v7s32 0.969231 +f3v8s33 f3v1s26 0.969231 +f3v8s33 f3v6s31 0.969231 +f3v8s33 f3v11s36 0.953846 +f3v8s33 f3v4s29 0.969697 +f3v8s33 f3v12s37 0.969697 +f3v8s33 f3v14s39 0.984848 +f1v1s8 f1v14s21 0.982143 +f1v1s8 f1v5s12 0.900000 +f1v1s8 f1v4s11 0.965517 +f1v1s8 f1v9s16 0.916667 +f1v1s8 f1v10s17 0.900000 +f1v1s8 f1v0s7 0.965517 +f1v1s8 f1v7s14 0.965517 +f1v1s8 f1v3s10 0.965517 +f1v1s8 f1v13s20 0.964286 +f1v1s8 f1v11s18 0.948276 +f1v1s8 f1v12s19 0.964912 +f1v14s21 f1v5s12 0.946429 +f1v14s21 f1v4s11 0.982143 +f1v14s21 f1v9s16 0.964286 +f1v14s21 f1v10s17 0.946429 +f1v14s21 f1v0s7 0.982143 +f1v14s21 f1v7s14 0.982143 +f1v14s21 f1v3s10 0.982143 +f1v14s21 f1v13s20 0.946429 +f1v14s21 f1v11s18 0.964286 +f1v14s21 f1v12s19 0.946429 +f0v1s1 f2v0s22 0.971014 +f0v1s1 f1v2s9 1.000000 +f0v1s1 f0v5s5 0.971014 +f0v1s1 f0v6s6 0.927536 +f0v1s1 f0v2s2 0.971014 +f0v1s1 f0v3s3 0.970149 +f0v1s1 f0v0s0 0.985507 +f1v5s12 f1v4s11 0.965517 +f1v5s12 f1v9s16 0.916667 +f1v5s12 f1v10s17 0.916667 +f1v5s12 f1v0s7 0.965517 +f1v5s12 f1v7s14 0.965517 +f1v5s12 f1v3s10 0.965517 +f1v5s12 f1v13s20 0.964286 +f1v5s12 f1v11s18 0.948276 +f1v5s12 f1v12s19 0.964912 +f1v4s11 f1v9s16 0.982759 +f1v4s11 f1v10s17 0.965517 +f1v4s11 f1v0s7 1.000000 +f1v4s11 f1v7s14 1.000000 +f1v4s11 f1v3s10 1.000000 +f1v4s11 f1v13s20 1.000000 +f1v4s11 f1v11s18 0.982759 +f1v4s11 f1v12s19 0.982456 +f1v9s16 f1v10s17 0.916667 +f1v9s16 f1v0s7 0.982759 +f1v9s16 f1v7s14 0.982759 +f1v9s16 f1v3s10 0.982759 +f1v9s16 f1v13s20 0.982143 +f1v9s16 f1v11s18 0.965517 +f1v9s16 f1v12s19 0.964912 +f1v10s17 f1v0s7 0.965517 +f1v10s17 f1v7s14 0.965517 +f1v10s17 f1v3s10 0.965517 +f1v10s17 f1v13s20 0.964286 +f1v10s17 f1v11s18 0.948276 +f1v10s17 f1v12s19 0.964912 +f1v0s7 f1v7s14 1.000000 +f1v0s7 f1v3s10 1.000000 +f1v0s7 f1v13s20 1.000000 +f1v0s7 f1v11s18 0.982759 +f1v0s7 f1v12s19 0.982456 +f3v9s34 f3v2s27 0.969231 +f3v9s34 f3v0s25 0.984615 +f3v9s34 f3v3s28 0.969231 +f3v9s34 f3v13s38 0.984615 +f3v9s34 f3v7s32 1.000000 +f3v9s34 f3v1s26 0.953846 +f3v9s34 f3v6s31 1.000000 +f3v9s34 f3v11s36 0.938462 +f3v9s34 f3v4s29 0.969231 +f3v9s34 f3v12s37 0.969231 +f3v9s34 f3v14s39 0.984615 +f4v0s40 f4v1s41 1.000000 +f1v7s14 f1v3s10 1.000000 +f1v7s14 f1v13s20 1.000000 +f1v7s14 f1v11s18 0.982759 +f1v7s14 f1v12s19 0.982456 +f3v2s27 f3v0s25 1.000000 +f3v2s27 f3v3s28 0.984615 +f3v2s27 f3v13s38 1.000000 +f3v2s27 f3v7s32 0.969231 +f3v2s27 f3v1s26 0.969231 +f3v2s27 f3v6s31 0.969231 +f3v2s27 f3v11s36 0.953846 +f3v2s27 f3v4s29 0.984615 +f3v2s27 f3v12s37 0.984615 +f3v2s27 f3v14s39 1.000000 +f2v0s22 f1v2s9 0.971014 +f2v0s22 f0v5s5 0.971014 +f2v0s22 f0v6s6 0.927536 +f2v0s22 f0v2s2 1.000000 +f2v0s22 f0v3s3 0.970149 +f2v0s22 f0v0s0 0.985507 +f1v2s9 f0v5s5 0.971014 +f1v2s9 f0v6s6 0.927536 +f1v2s9 f0v2s2 0.971014 +f1v2s9 f0v3s3 0.970149 +f1v2s9 f0v0s0 0.985507 +f1v3s10 f1v13s20 1.000000 +f1v3s10 f1v11s18 0.982759 +f1v3s10 f1v12s19 0.982456 +f3v0s25 f3v3s28 0.984848 +f3v0s25 f3v13s38 1.000000 +f3v0s25 f3v7s32 0.984615 +f3v0s25 f3v1s26 0.984615 +f3v0s25 f3v6s31 0.984615 +f3v0s25 f3v11s36 0.969231 +f3v0s25 f3v4s29 0.984848 +f3v0s25 f3v12s37 0.984848 +f3v0s25 f3v14s39 1.000000 +f3v3s28 f3v13s38 0.984848 +f3v3s28 f3v7s32 0.969231 +f3v3s28 f3v1s26 0.969231 +f3v3s28 f3v6s31 0.969231 +f3v3s28 f3v11s36 0.953846 +f3v3s28 f3v4s29 0.969697 +f3v3s28 f3v12s37 0.969697 +f3v3s28 f3v14s39 0.984848 +f3v13s38 f3v7s32 0.984615 +f3v13s38 f3v1s26 0.984615 +f3v13s38 f3v6s31 0.984615 +f3v13s38 f3v11s36 0.969231 +f3v13s38 f3v4s29 0.955882 +f3v13s38 f3v12s37 0.970149 +f3v13s38 f3v14s39 1.000000 +f3v7s32 f3v1s26 0.953846 +f3v7s32 f3v6s31 1.000000 +f3v7s32 f3v11s36 0.938462 +f3v7s32 f3v4s29 0.969231 +f3v7s32 f3v12s37 0.969231 +f3v7s32 f3v14s39 0.984615 +f3v1s26 f3v6s31 0.953846 +f3v1s26 f3v11s36 0.938462 +f3v1s26 f3v4s29 0.969231 +f3v1s26 f3v12s37 0.969231 +f3v1s26 f3v14s39 0.984615 +f3v6s31 f3v11s36 0.938462 +f3v6s31 f3v4s29 0.969231 +f3v6s31 f3v12s37 0.969231 +f3v6s31 f3v14s39 0.984615 +f1v13s20 f1v11s18 0.982143 +f1v13s20 f1v12s19 0.964286 +f3v11s36 f3v4s29 0.953846 +f3v11s36 f3v12s37 0.953846 +f3v11s36 f3v14s39 0.969231 +f0v5s5 f0v6s6 0.927536 +f0v5s5 f0v2s2 0.971014 +f0v5s5 f0v3s3 0.970149 +f0v5s5 f0v0s0 0.985507 +f1v11s18 f1v12s19 0.964912 +f0v6s6 f0v2s2 0.927536 +f0v6s6 f0v3s3 0.925373 +f0v6s6 f0v0s0 0.942029 +f3v4s29 f3v12s37 0.955224 +f3v4s29 f3v14s39 0.984848 +f0v2s2 f0v3s3 0.970149 +f0v2s2 f0v0s0 0.985507 +f3v12s37 f3v14s39 0.984848 +f0v3s3 f0v0s0 0.985075 diff --git a/pkg/obitools/obialign/testdata/two_all.expected b/pkg/obitools/obialign/testdata/two_all.expected new file mode 100644 index 0000000..fec3278 --- /dev/null +++ b/pkg/obitools/obialign/testdata/two_all.expected @@ -0,0 +1,1075 @@ +f3v10s35 f2v9s19 0.487805 87579 6506 65 67 +f3v10s35 f2v12s22 0.465116 87579 93800 65 67 +f3v10s35 f0v0s0 0.469880 87579 63627 65 68 +f3v10s35 f1v6s8 0.469880 87579 97064 65 68 +f3v10s35 f2v13s23 0.487500 87579 70974 65 66 +f3v10s35 f2v4s14 0.487179 87579 13384 65 63 +f3v10s35 f2v3s13 0.475610 87579 15798 65 67 +f3v10s35 f2v2s12 0.493671 87579 95647 65 65 +f3v10s35 f2v6s16 0.493827 87579 64696 65 65 +f3v10s35 f2v7s17 0.487500 87579 14079 65 66 +f3v10s35 f1v3s5 0.426667 87579 42963 65 48 +f3v10s35 f2v10s20 0.487500 87579 31703 65 66 +f3v10s35 f2v1s11 0.506329 87579 2372 65 65 +f3v10s35 f0v1s1 0.469880 87579 77580 65 68 +f3v10s35 f2v8s18 0.458824 87579 3218 65 64 +f3v10s35 f2v0s10 0.487500 87579 77079 65 66 +f3v10s35 f1v2s4 0.424658 87579 24865 65 48 +f3v10s35 f2v5s15 0.493506 87579 34483 65 64 +f3v10s35 f1v7s9 0.438356 87579 84209 65 50 +f3v10s35 f1v5s7 0.438356 87579 34528 65 49 +f3v10s35 f1v0s2 0.432432 87579 16977 65 51 +f3v10s35 f2v11s21 0.493827 87579 82250 65 65 +f3v10s35 f1v4s6 0.452055 87579 15749 65 53 +f3v10s35 f1v1s3 0.432432 87579 53350 65 51 +f3v10s35 f2v14s24 0.500000 87579 27352 65 66 +f3v5s30 f2v9s19 0.469136 39802 6506 63 67 +f3v5s30 f2v12s22 0.452381 39802 93800 63 67 +f3v5s30 f0v0s0 0.441860 39802 63627 63 68 +f3v5s30 f1v6s8 0.441860 39802 97064 63 68 +f3v5s30 f2v13s23 0.468354 39802 70974 63 66 +f3v5s30 f2v4s14 0.473684 39802 13384 63 63 +f3v5s30 f2v3s13 0.462500 39802 15798 63 67 +f3v5s30 f2v2s12 0.474359 39802 95647 63 65 +f3v5s30 f2v6s16 0.487179 39802 64696 63 65 +f3v5s30 f2v7s17 0.468354 39802 14079 63 66 +f3v5s30 f1v3s5 0.424658 39802 42963 63 48 +f3v5s30 f2v10s20 0.468354 39802 31703 63 66 +f3v5s30 f2v1s11 0.468354 39802 2372 63 65 +f3v5s30 f0v1s1 0.441860 39802 77580 63 68 +f3v5s30 f2v8s18 0.444444 39802 3218 63 64 +f3v5s30 f2v0s10 0.468354 39802 77079 63 66 +f3v5s30 f1v2s4 0.450704 39802 24865 63 48 +f3v5s30 f2v5s15 0.493333 39802 34483 63 64 +f3v5s30 f1v7s9 0.463768 39802 84209 63 50 +f3v5s30 f1v5s7 0.455882 39802 34528 63 49 +f3v5s30 f1v0s2 0.438356 39802 16977 63 51 +f3v5s30 f2v11s21 0.487179 39802 82250 63 65 +f3v5s30 f1v4s6 0.470588 39802 15749 63 53 +f3v5s30 f1v1s3 0.438356 39802 53350 63 51 +f3v5s30 f2v14s24 0.480519 39802 27352 63 66 +f1v8s15 f2v9s19 0.513514 66109 6506 57 67 +f1v8s15 f2v12s22 0.506667 66109 93800 57 67 +f1v8s15 f0v0s0 0.541667 66109 63627 57 68 +f1v8s15 f1v6s8 0.541667 66109 97064 57 68 +f1v8s15 f2v13s23 0.520548 66109 70974 57 66 +f1v8s15 f2v4s14 0.513889 66109 13384 57 63 +f1v8s15 f2v3s13 0.500000 66109 15798 57 67 +f1v8s15 f2v2s12 0.527778 66109 95647 57 65 +f1v8s15 f2v6s16 0.541667 66109 64696 57 65 +f1v8s15 f2v7s17 0.520548 66109 14079 57 66 +f1v8s15 f1v3s5 0.515625 66109 42963 57 48 +f1v8s15 f2v10s20 0.520548 66109 31703 57 66 +f1v8s15 f2v1s11 0.520548 66109 2372 57 65 +f1v8s15 f0v1s1 0.541667 66109 77580 57 68 +f1v8s15 f2v8s18 0.520548 66109 3218 57 64 +f1v8s15 f2v0s10 0.520548 66109 77079 57 66 +f1v8s15 f1v2s4 0.515625 66109 24865 57 48 +f1v8s15 f2v5s15 0.541667 66109 34483 57 64 +f1v8s15 f1v7s9 0.538462 66109 84209 57 50 +f1v8s15 f1v5s7 0.515625 66109 34528 57 49 +f1v8s15 f1v0s2 0.523077 66109 16977 57 51 +f1v8s15 f2v11s21 0.541667 66109 82250 57 65 +f1v8s15 f1v4s6 0.507463 66109 15749 57 53 +f1v8s15 f1v1s3 0.523077 66109 53350 57 51 +f1v8s15 f2v14s24 0.520548 66109 27352 57 66 +f2v1s23 f2v9s19 0.520000 35696 6506 58 67 +f2v1s23 f2v12s22 0.513158 35696 93800 58 67 +f2v1s23 f0v0s0 0.547945 35696 63627 58 68 +f2v1s23 f1v6s8 0.547945 35696 97064 58 68 +f2v1s23 f2v13s23 0.527027 35696 70974 58 66 +f2v1s23 f2v4s14 0.520548 35696 13384 58 63 +f2v1s23 f2v3s13 0.506667 35696 15798 58 67 +f2v1s23 f2v2s12 0.534247 35696 95647 58 65 +f2v1s23 f2v6s16 0.547945 35696 64696 58 65 +f2v1s23 f2v7s17 0.527027 35696 14079 58 66 +f2v1s23 f1v3s5 0.523077 35696 42963 58 48 +f2v1s23 f2v10s20 0.527027 35696 31703 58 66 +f2v1s23 f2v1s11 0.520548 35696 2372 58 65 +f2v1s23 f0v1s1 0.547945 35696 77580 58 68 +f2v1s23 f2v8s18 0.520548 35696 3218 58 64 +f2v1s23 f2v0s10 0.527027 35696 77079 58 66 +f2v1s23 f1v2s4 0.523077 35696 24865 58 48 +f2v1s23 f2v5s15 0.547945 35696 34483 58 64 +f2v1s23 f1v7s9 0.545455 35696 84209 58 50 +f2v1s23 f1v5s7 0.523077 35696 34528 58 49 +f2v1s23 f1v0s2 0.530303 35696 16977 58 51 +f2v1s23 f2v11s21 0.547945 35696 82250 58 65 +f2v1s23 f1v4s6 0.514706 35696 15749 58 53 +f2v1s23 f1v1s3 0.530303 35696 53350 58 51 +f2v1s23 f2v14s24 0.527027 35696 27352 58 66 +f4v2s42 f2v9s19 0.506329 17302 6506 61 67 +f4v2s42 f2v12s22 0.506329 17302 93800 61 67 +f4v2s42 f0v0s0 0.518072 17302 63627 61 68 +f4v2s42 f1v6s8 0.518072 17302 97064 61 68 +f4v2s42 f2v13s23 0.512821 17302 70974 61 66 +f4v2s42 f2v4s14 0.513158 17302 13384 61 63 +f4v2s42 f2v3s13 0.487500 17302 15798 61 67 +f4v2s42 f2v2s12 0.506494 17302 95647 61 65 +f4v2s42 f2v6s16 0.500000 17302 64696 61 65 +f4v2s42 f2v7s17 0.512821 17302 14079 61 66 +f4v2s42 f1v3s5 0.522388 17302 42963 61 48 +f4v2s42 f2v10s20 0.512821 17302 31703 61 66 +f4v2s42 f2v1s11 0.506494 17302 2372 61 65 +f4v2s42 f0v1s1 0.518072 17302 77580 61 68 +f4v2s42 f2v8s18 0.500000 17302 3218 61 64 +f4v2s42 f2v0s10 0.512821 17302 77079 61 66 +f4v2s42 f1v2s4 0.485294 17302 24865 61 48 +f4v2s42 f2v5s15 0.500000 17302 34483 61 64 +f4v2s42 f1v7s9 0.478261 17302 84209 61 50 +f4v2s42 f1v5s7 0.522388 17302 34528 61 49 +f4v2s42 f1v0s2 0.514706 17302 16977 61 51 +f4v2s42 f2v11s21 0.500000 17302 82250 61 65 +f4v2s42 f1v4s6 0.521739 17302 15749 61 53 +f4v2s42 f1v1s3 0.514706 17302 53350 61 51 +f4v2s42 f2v14s24 0.518987 17302 27352 61 66 +f0v4s4 f2v9s19 0.481928 86916 6506 69 67 +f0v4s4 f2v12s22 0.481928 86916 93800 69 67 +f0v4s4 f0v0s0 0.505747 86916 63627 69 68 +f0v4s4 f1v6s8 0.505747 86916 97064 69 68 +f0v4s4 f2v13s23 0.487805 86916 70974 69 66 +f0v4s4 f2v4s14 0.469880 86916 13384 69 63 +f0v4s4 f2v3s13 0.487805 86916 15798 69 67 +f0v4s4 f2v2s12 0.476190 86916 95647 69 65 +f0v4s4 f2v6s16 0.470588 86916 64696 69 65 +f0v4s4 f2v7s17 0.487805 86916 14079 69 66 +f0v4s4 f1v3s5 0.465753 86916 42963 69 48 +f0v4s4 f2v10s20 0.487805 86916 31703 69 66 +f0v4s4 f2v1s11 0.482353 86916 2372 69 65 +f0v4s4 f0v1s1 0.505747 86916 77580 69 68 +f0v4s4 f2v8s18 0.481481 86916 3218 69 64 +f0v4s4 f2v0s10 0.487805 86916 77079 69 66 +f0v4s4 f1v2s4 0.441558 86916 24865 69 48 +f0v4s4 f2v5s15 0.458824 86916 34483 69 64 +f0v4s4 f1v7s9 0.459459 86916 84209 69 50 +f0v4s4 f1v5s7 0.486111 86916 34528 69 49 +f0v4s4 f1v0s2 0.472973 86916 16977 69 51 +f0v4s4 f2v11s21 0.470588 86916 82250 69 65 +f0v4s4 f1v4s6 0.466667 86916 15749 69 53 +f0v4s4 f1v1s3 0.472973 86916 53350 69 51 +f0v4s4 f2v14s24 0.482353 86916 27352 69 66 +f1v6s13 f2v9s19 0.486111 80246 6506 56 67 +f1v6s13 f2v12s22 0.479452 80246 93800 56 67 +f1v6s13 f0v0s0 0.534247 80246 63627 56 68 +f1v6s13 f1v6s8 0.534247 80246 97064 56 68 +f1v6s13 f2v13s23 0.492958 80246 70974 56 66 +f1v6s13 f2v4s14 0.492754 80246 13384 56 63 +f1v6s13 f2v3s13 0.478873 80246 15798 56 67 +f1v6s13 f2v2s12 0.500000 80246 95647 56 65 +f1v6s13 f2v6s16 0.521127 80246 64696 56 65 +f1v6s13 f2v7s17 0.492958 80246 14079 56 66 +f1v6s13 f1v3s5 0.548387 80246 42963 56 48 +f1v6s13 f2v10s20 0.492958 80246 31703 56 66 +f1v6s13 f2v1s11 0.492958 80246 2372 56 65 +f1v6s13 f0v1s1 0.534247 80246 77580 56 68 +f1v6s13 f2v8s18 0.500000 80246 3218 56 64 +f1v6s13 f2v0s10 0.492958 80246 77079 56 66 +f1v6s13 f1v2s4 0.548387 80246 24865 56 48 +f1v6s13 f2v5s15 0.507042 80246 34483 56 64 +f1v6s13 f1v7s9 0.571429 80246 84209 56 50 +f1v6s13 f1v5s7 0.540984 80246 34528 56 49 +f1v6s13 f1v0s2 0.555556 80246 16977 56 51 +f1v6s13 f2v11s21 0.521127 80246 82250 56 65 +f1v6s13 f1v4s6 0.538462 80246 15749 56 53 +f1v6s13 f1v1s3 0.555556 80246 53350 56 51 +f1v6s13 f2v14s24 0.493151 80246 27352 56 66 +f3v8s33 f2v9s19 0.458824 88635 6506 66 67 +f3v8s33 f2v12s22 0.438202 88635 93800 66 67 +f3v8s33 f0v0s0 0.481013 88635 63627 66 68 +f3v8s33 f1v6s8 0.481013 88635 97064 66 68 +f3v8s33 f2v13s23 0.457831 88635 70974 66 66 +f3v8s33 f2v4s14 0.456790 88635 13384 66 63 +f3v8s33 f2v3s13 0.452381 88635 15798 66 67 +f3v8s33 f2v2s12 0.457831 88635 95647 66 65 +f3v8s33 f2v6s16 0.469136 88635 64696 66 65 +f3v8s33 f2v7s17 0.457831 88635 14079 66 66 +f3v8s33 f1v3s5 0.445946 88635 42963 66 48 +f3v8s33 f2v10s20 0.457831 88635 31703 66 66 +f3v8s33 f2v1s11 0.475000 88635 2372 66 65 +f3v8s33 f0v1s1 0.481013 88635 77580 66 68 +f3v8s33 f2v8s18 0.445783 88635 3218 66 64 +f3v8s33 f2v0s10 0.457831 88635 77079 66 66 +f3v8s33 f1v2s4 0.452055 88635 24865 66 48 +f3v8s33 f2v5s15 0.475000 88635 34483 66 64 +f3v8s33 f1v7s9 0.459459 88635 84209 66 50 +f3v8s33 f1v5s7 0.465753 88635 34528 66 49 +f3v8s33 f1v0s2 0.459459 88635 16977 66 51 +f3v8s33 f2v11s21 0.469136 88635 82250 66 65 +f3v8s33 f1v4s6 0.447368 88635 15749 66 53 +f3v8s33 f1v1s3 0.459459 88635 53350 66 51 +f3v8s33 f2v14s24 0.481481 88635 27352 66 66 +f1v1s8 f2v9s19 0.526316 17651 6506 60 67 +f1v1s8 f2v12s22 0.519481 17651 93800 60 67 +f1v1s8 f0v0s0 0.526316 17651 63627 60 68 +f1v1s8 f1v6s8 0.526316 17651 97064 60 68 +f1v1s8 f2v13s23 0.533333 17651 70974 60 66 +f1v1s8 f2v4s14 0.527027 17651 13384 60 63 +f1v1s8 f2v3s13 0.506494 17651 15798 60 67 +f1v1s8 f2v2s12 0.540541 17651 95647 60 65 +f1v1s8 f2v6s16 0.554054 17651 64696 60 65 +f1v1s8 f2v7s17 0.533333 17651 14079 60 66 +f1v1s8 f1v3s5 0.523077 17651 42963 60 48 +f1v1s8 f2v10s20 0.533333 17651 31703 60 66 +f1v1s8 f2v1s11 0.506667 17651 2372 60 65 +f1v1s8 f0v1s1 0.526316 17651 77580 60 68 +f1v1s8 f2v8s18 0.520000 17651 3218 60 64 +f1v1s8 f2v0s10 0.533333 17651 77079 60 66 +f1v1s8 f1v2s4 0.523077 17651 24865 60 48 +f1v1s8 f2v5s15 0.561644 17651 34483 60 64 +f1v1s8 f1v7s9 0.529412 17651 84209 60 50 +f1v1s8 f1v5s7 0.531250 17651 34528 60 49 +f1v1s8 f1v0s2 0.522388 17651 16977 60 51 +f1v1s8 f2v11s21 0.554054 17651 82250 60 65 +f1v1s8 f1v4s6 0.522388 17651 15749 60 53 +f1v1s8 f1v1s3 0.522388 17651 53350 60 51 +f1v1s8 f2v14s24 0.533333 17651 27352 60 66 +f1v14s21 f2v9s19 0.493333 85030 6506 56 67 +f1v14s21 f2v12s22 0.486842 85030 93800 56 67 +f1v14s21 f0v0s0 0.555556 85030 63627 56 68 +f1v14s21 f1v6s8 0.555556 85030 97064 56 68 +f1v14s21 f2v13s23 0.500000 85030 70974 56 66 +f1v14s21 f2v4s14 0.506849 85030 13384 56 63 +f1v14s21 f2v3s13 0.480000 85030 15798 56 67 +f1v14s21 f2v2s12 0.506849 85030 95647 56 65 +f1v14s21 f2v6s16 0.520548 85030 64696 56 65 +f1v14s21 f2v7s17 0.500000 85030 14079 56 66 +f1v14s21 f1v3s5 0.500000 85030 42963 56 48 +f1v14s21 f2v10s20 0.500000 85030 31703 56 66 +f1v14s21 f2v1s11 0.493151 85030 2372 56 65 +f1v14s21 f0v1s1 0.555556 85030 77580 56 68 +f1v14s21 f2v8s18 0.500000 85030 3218 56 64 +f1v14s21 f2v0s10 0.500000 85030 77079 56 66 +f1v14s21 f1v2s4 0.515625 85030 24865 56 48 +f1v14s21 f2v5s15 0.527778 85030 34483 56 64 +f1v14s21 f1v7s9 0.523077 85030 84209 56 50 +f1v14s21 f1v5s7 0.507692 85030 34528 56 49 +f1v14s21 f1v0s2 0.507692 85030 16977 56 51 +f1v14s21 f2v11s21 0.520548 85030 82250 56 65 +f1v14s21 f1v4s6 0.507692 85030 15749 56 53 +f1v14s21 f1v1s3 0.507692 85030 53350 56 51 +f1v14s21 f2v14s24 0.500000 85030 27352 56 66 +f0v1s1 f2v9s19 0.481928 43883 6506 69 67 +f0v1s1 f2v12s22 0.481928 43883 93800 69 67 +f0v1s1 f0v0s0 0.505747 43883 63627 69 68 +f0v1s1 f1v6s8 0.505747 43883 97064 69 68 +f0v1s1 f2v13s23 0.487805 43883 70974 69 66 +f0v1s1 f2v4s14 0.469880 43883 13384 69 63 +f0v1s1 f2v3s13 0.487805 43883 15798 69 67 +f0v1s1 f2v2s12 0.476190 43883 95647 69 65 +f0v1s1 f2v6s16 0.470588 43883 64696 69 65 +f0v1s1 f2v7s17 0.487805 43883 14079 69 66 +f0v1s1 f1v3s5 0.465753 43883 42963 69 48 +f0v1s1 f2v10s20 0.487805 43883 31703 69 66 +f0v1s1 f2v1s11 0.482353 43883 2372 69 65 +f0v1s1 f0v1s1 0.505747 43883 77580 69 68 +f0v1s1 f2v8s18 0.481481 43883 3218 69 64 +f0v1s1 f2v0s10 0.487805 43883 77079 69 66 +f0v1s1 f1v2s4 0.441558 43883 24865 69 48 +f0v1s1 f2v5s15 0.458824 43883 34483 69 64 +f0v1s1 f1v7s9 0.459459 43883 84209 69 50 +f0v1s1 f1v5s7 0.486111 43883 34528 69 49 +f0v1s1 f1v0s2 0.472973 43883 16977 69 51 +f0v1s1 f2v11s21 0.470588 43883 82250 69 65 +f0v1s1 f1v4s6 0.466667 43883 15749 69 53 +f0v1s1 f1v1s3 0.472973 43883 53350 69 51 +f0v1s1 f2v14s24 0.482353 43883 27352 69 66 +f1v5s12 f2v9s19 0.487500 1410 6506 60 67 +f1v5s12 f2v12s22 0.513158 1410 93800 60 67 +f1v5s12 f0v0s0 0.533333 1410 63627 60 68 +f1v5s12 f1v6s8 0.533333 1410 97064 60 68 +f1v5s12 f2v13s23 0.493671 1410 70974 60 66 +f1v5s12 f2v4s14 0.520000 1410 13384 60 63 +f1v5s12 f2v3s13 0.493671 1410 15798 60 67 +f1v5s12 f2v2s12 0.493671 1410 95647 60 65 +f1v5s12 f2v6s16 0.520548 1410 64696 60 65 +f1v5s12 f2v7s17 0.493671 1410 14079 60 66 +f1v5s12 f1v3s5 0.530303 1410 42963 60 48 +f1v5s12 f2v10s20 0.493671 1410 31703 60 66 +f1v5s12 f2v1s11 0.481013 1410 2372 60 65 +f1v5s12 f0v1s1 0.533333 1410 77580 60 68 +f1v5s12 f2v8s18 0.500000 1410 3218 60 64 +f1v5s12 f2v0s10 0.493671 1410 77079 60 66 +f1v5s12 f1v2s4 0.522388 1410 24865 60 48 +f1v5s12 f2v5s15 0.527027 1410 34483 60 64 +f1v5s12 f1v7s9 0.537313 1410 84209 60 50 +f1v5s12 f1v5s7 0.515152 1410 34528 60 49 +f1v5s12 f1v0s2 0.529412 1410 16977 60 51 +f1v5s12 f2v11s21 0.520548 1410 82250 60 65 +f1v5s12 f1v4s6 0.545455 1410 15749 60 53 +f1v5s12 f1v1s3 0.529412 1410 53350 60 51 +f1v5s12 f2v14s24 0.513514 1410 27352 60 66 +f1v4s11 f2v9s19 0.520000 74527 6506 58 67 +f1v4s11 f2v12s22 0.513158 74527 93800 58 67 +f1v4s11 f0v0s0 0.547945 74527 63627 58 68 +f1v4s11 f1v6s8 0.547945 74527 97064 58 68 +f1v4s11 f2v13s23 0.527027 74527 70974 58 66 +f1v4s11 f2v4s14 0.520548 74527 13384 58 63 +f1v4s11 f2v3s13 0.506667 74527 15798 58 67 +f1v4s11 f2v2s12 0.534247 74527 95647 58 65 +f1v4s11 f2v6s16 0.547945 74527 64696 58 65 +f1v4s11 f2v7s17 0.527027 74527 14079 58 66 +f1v4s11 f1v3s5 0.523077 74527 42963 58 48 +f1v4s11 f2v10s20 0.527027 74527 31703 58 66 +f1v4s11 f2v1s11 0.520548 74527 2372 58 65 +f1v4s11 f0v1s1 0.547945 74527 77580 58 68 +f1v4s11 f2v8s18 0.520548 74527 3218 58 64 +f1v4s11 f2v0s10 0.527027 74527 77079 58 66 +f1v4s11 f1v2s4 0.523077 74527 24865 58 48 +f1v4s11 f2v5s15 0.547945 74527 34483 58 64 +f1v4s11 f1v7s9 0.545455 74527 84209 58 50 +f1v4s11 f1v5s7 0.523077 74527 34528 58 49 +f1v4s11 f1v0s2 0.530303 74527 16977 58 51 +f1v4s11 f2v11s21 0.547945 74527 82250 58 65 +f1v4s11 f1v4s6 0.514706 74527 15749 58 53 +f1v4s11 f1v1s3 0.530303 74527 53350 58 51 +f1v4s11 f2v14s24 0.527027 74527 27352 58 66 +f1v9s16 f2v9s19 0.519481 65777 6506 60 67 +f1v9s16 f2v12s22 0.519481 65777 93800 60 67 +f1v9s16 f0v0s0 0.560000 65777 63627 60 68 +f1v9s16 f1v6s8 0.560000 65777 97064 60 68 +f1v9s16 f2v13s23 0.526316 65777 70974 60 66 +f1v9s16 f2v4s14 0.520000 65777 13384 60 63 +f1v9s16 f2v3s13 0.506494 65777 15798 60 67 +f1v9s16 f2v2s12 0.533333 65777 95647 60 65 +f1v9s16 f2v6s16 0.533333 65777 64696 60 65 +f1v9s16 f2v7s17 0.526316 65777 14079 60 66 +f1v9s16 f1v3s5 0.522388 65777 42963 60 48 +f1v9s16 f2v10s20 0.526316 65777 31703 60 66 +f1v9s16 f2v1s11 0.520000 65777 2372 60 65 +f1v9s16 f0v1s1 0.560000 65777 77580 60 68 +f1v9s16 f2v8s18 0.506667 65777 3218 60 64 +f1v9s16 f2v0s10 0.526316 65777 77079 60 66 +f1v9s16 f1v2s4 0.522388 65777 24865 60 48 +f1v9s16 f2v5s15 0.546667 65777 34483 60 64 +f1v9s16 f1v7s9 0.536232 65777 84209 60 50 +f1v9s16 f1v5s7 0.514706 65777 34528 60 49 +f1v9s16 f1v0s2 0.529412 65777 16977 60 51 +f1v9s16 f2v11s21 0.533333 65777 82250 60 65 +f1v9s16 f1v4s6 0.514286 65777 15749 60 53 +f1v9s16 f1v1s3 0.529412 65777 53350 60 51 +f1v9s16 f2v14s24 0.526316 65777 27352 60 66 +f1v10s17 f2v9s19 0.480519 98659 6506 60 67 +f1v10s17 f2v12s22 0.474359 98659 93800 60 67 +f1v10s17 f0v0s0 0.560000 98659 63627 60 68 +f1v10s17 f1v6s8 0.560000 98659 97064 60 68 +f1v10s17 f2v13s23 0.486842 98659 70974 60 66 +f1v10s17 f2v4s14 0.480000 98659 13384 60 63 +f1v10s17 f2v3s13 0.430233 98659 15798 60 67 +f1v10s17 f2v2s12 0.493333 98659 95647 60 65 +f1v10s17 f2v6s16 0.506667 98659 64696 60 65 +f1v10s17 f2v7s17 0.486842 98659 14079 60 66 +f1v10s17 f1v3s5 0.545455 98659 42963 60 48 +f1v10s17 f2v10s20 0.486842 98659 31703 60 66 +f1v10s17 f2v1s11 0.480000 98659 2372 60 65 +f1v10s17 f0v1s1 0.560000 98659 77580 60 68 +f1v10s17 f2v8s18 0.480000 98659 3218 60 64 +f1v10s17 f2v0s10 0.486842 98659 77079 60 66 +f1v10s17 f1v2s4 0.530303 98659 24865 60 48 +f1v10s17 f2v5s15 0.506667 98659 34483 60 64 +f1v10s17 f1v7s9 0.560606 98659 84209 60 50 +f1v10s17 f1v5s7 0.529412 98659 34528 60 49 +f1v10s17 f1v0s2 0.552239 98659 16977 60 51 +f1v10s17 f2v11s21 0.506667 98659 82250 60 65 +f1v10s17 f1v4s6 0.536232 98659 15749 60 53 +f1v10s17 f1v1s3 0.552239 98659 53350 60 51 +f1v10s17 f2v14s24 0.486842 98659 27352 60 66 +f1v0s7 f2v9s19 0.520000 84420 6506 58 67 +f1v0s7 f2v12s22 0.513158 84420 93800 58 67 +f1v0s7 f0v0s0 0.547945 84420 63627 58 68 +f1v0s7 f1v6s8 0.547945 84420 97064 58 68 +f1v0s7 f2v13s23 0.527027 84420 70974 58 66 +f1v0s7 f2v4s14 0.520548 84420 13384 58 63 +f1v0s7 f2v3s13 0.506667 84420 15798 58 67 +f1v0s7 f2v2s12 0.534247 84420 95647 58 65 +f1v0s7 f2v6s16 0.547945 84420 64696 58 65 +f1v0s7 f2v7s17 0.527027 84420 14079 58 66 +f1v0s7 f1v3s5 0.523077 84420 42963 58 48 +f1v0s7 f2v10s20 0.527027 84420 31703 58 66 +f1v0s7 f2v1s11 0.520548 84420 2372 58 65 +f1v0s7 f0v1s1 0.547945 84420 77580 58 68 +f1v0s7 f2v8s18 0.520548 84420 3218 58 64 +f1v0s7 f2v0s10 0.527027 84420 77079 58 66 +f1v0s7 f1v2s4 0.523077 84420 24865 58 48 +f1v0s7 f2v5s15 0.547945 84420 34483 58 64 +f1v0s7 f1v7s9 0.545455 84420 84209 58 50 +f1v0s7 f1v5s7 0.523077 84420 34528 58 49 +f1v0s7 f1v0s2 0.530303 84420 16977 58 51 +f1v0s7 f2v11s21 0.547945 84420 82250 58 65 +f1v0s7 f1v4s6 0.514706 84420 15749 58 53 +f1v0s7 f1v1s3 0.530303 84420 53350 58 51 +f1v0s7 f2v14s24 0.527027 84420 27352 58 66 +f3v9s34 f2v9s19 0.464286 40677 6506 65 67 +f3v9s34 f2v12s22 0.469136 40677 93800 65 67 +f3v9s34 f0v0s0 0.500000 40677 63627 65 68 +f3v9s34 f1v6s8 0.500000 40677 97064 65 68 +f3v9s34 f2v13s23 0.463415 40677 70974 65 66 +f3v9s34 f2v4s14 0.469136 40677 13384 65 63 +f3v9s34 f2v3s13 0.457831 40677 15798 65 67 +f3v9s34 f2v2s12 0.463415 40677 95647 65 65 +f3v9s34 f2v6s16 0.462500 40677 64696 65 65 +f3v9s34 f2v7s17 0.463415 40677 14079 65 66 +f3v9s34 f1v3s5 0.452055 40677 42963 65 48 +f3v9s34 f2v10s20 0.463415 40677 31703 65 66 +f3v9s34 f2v1s11 0.469136 40677 2372 65 65 +f3v9s34 f0v1s1 0.500000 40677 77580 65 68 +f3v9s34 f2v8s18 0.445783 40677 3218 65 64 +f3v9s34 f2v0s10 0.463415 40677 77079 65 66 +f3v9s34 f1v2s4 0.428571 40677 24865 65 48 +f3v9s34 f2v5s15 0.469136 40677 34483 65 64 +f3v9s34 f1v7s9 0.441558 40677 84209 65 50 +f3v9s34 f1v5s7 0.447368 40677 34528 65 49 +f3v9s34 f1v0s2 0.435897 40677 16977 65 51 +f3v9s34 f2v11s21 0.462500 40677 82250 65 65 +f3v9s34 f1v4s6 0.447368 40677 15749 65 53 +f3v9s34 f1v1s3 0.435897 40677 53350 65 51 +f3v9s34 f2v14s24 0.475610 40677 27352 65 66 +f4v0s40 f2v9s19 0.506329 75843 6506 60 67 +f4v0s40 f2v12s22 0.513158 75843 93800 60 67 +f4v0s40 f0v0s0 0.512195 75843 63627 60 68 +f4v0s40 f1v6s8 0.512195 75843 97064 60 68 +f4v0s40 f2v13s23 0.512821 75843 70974 60 66 +f4v0s40 f2v4s14 0.513514 75843 13384 60 63 +f4v0s40 f2v3s13 0.487500 75843 15798 60 67 +f4v0s40 f2v2s12 0.506494 75843 95647 60 65 +f4v0s40 f2v6s16 0.513158 75843 64696 60 65 +f4v0s40 f2v7s17 0.512821 75843 14079 60 66 +f4v0s40 f1v3s5 0.530303 75843 42963 60 48 +f4v0s40 f2v10s20 0.512821 75843 31703 60 66 +f4v0s40 f2v1s11 0.500000 75843 2372 60 65 +f4v0s40 f0v1s1 0.512195 75843 77580 60 68 +f4v0s40 f2v8s18 0.500000 75843 3218 60 64 +f4v0s40 f2v0s10 0.512821 75843 77079 60 66 +f4v0s40 f1v2s4 0.492537 75843 24865 60 48 +f4v0s40 f2v5s15 0.513514 75843 34483 60 64 +f4v0s40 f1v7s9 0.485294 75843 84209 60 50 +f4v0s40 f1v5s7 0.530303 75843 34528 60 49 +f4v0s40 f1v0s2 0.522388 75843 16977 60 51 +f4v0s40 f2v11s21 0.513158 75843 82250 60 65 +f4v0s40 f1v4s6 0.529412 75843 15749 60 53 +f4v0s40 f1v1s3 0.522388 75843 53350 60 51 +f4v0s40 f2v14s24 0.513158 75843 27352 60 66 +f1v7s14 f2v9s19 0.520000 42277 6506 58 67 +f1v7s14 f2v12s22 0.513158 42277 93800 58 67 +f1v7s14 f0v0s0 0.547945 42277 63627 58 68 +f1v7s14 f1v6s8 0.547945 42277 97064 58 68 +f1v7s14 f2v13s23 0.527027 42277 70974 58 66 +f1v7s14 f2v4s14 0.520548 42277 13384 58 63 +f1v7s14 f2v3s13 0.506667 42277 15798 58 67 +f1v7s14 f2v2s12 0.534247 42277 95647 58 65 +f1v7s14 f2v6s16 0.547945 42277 64696 58 65 +f1v7s14 f2v7s17 0.527027 42277 14079 58 66 +f1v7s14 f1v3s5 0.523077 42277 42963 58 48 +f1v7s14 f2v10s20 0.527027 42277 31703 58 66 +f1v7s14 f2v1s11 0.520548 42277 2372 58 65 +f1v7s14 f0v1s1 0.547945 42277 77580 58 68 +f1v7s14 f2v8s18 0.520548 42277 3218 58 64 +f1v7s14 f2v0s10 0.527027 42277 77079 58 66 +f1v7s14 f1v2s4 0.523077 42277 24865 58 48 +f1v7s14 f2v5s15 0.547945 42277 34483 58 64 +f1v7s14 f1v7s9 0.545455 42277 84209 58 50 +f1v7s14 f1v5s7 0.523077 42277 34528 58 49 +f1v7s14 f1v0s2 0.530303 42277 16977 58 51 +f1v7s14 f2v11s21 0.547945 42277 82250 58 65 +f1v7s14 f1v4s6 0.514706 42277 15749 58 53 +f1v7s14 f1v1s3 0.530303 42277 53350 58 51 +f1v7s14 f2v14s24 0.527027 42277 27352 58 66 +f3v2s27 f2v9s19 0.458824 74030 6506 65 67 +f3v2s27 f2v12s22 0.443182 74030 93800 65 67 +f3v2s27 f0v0s0 0.487179 74030 63627 65 68 +f3v2s27 f1v6s8 0.487179 74030 97064 65 68 +f3v2s27 f2v13s23 0.457831 74030 70974 65 66 +f3v2s27 f2v4s14 0.469136 74030 13384 65 63 +f3v2s27 f2v3s13 0.452381 74030 15798 65 67 +f3v2s27 f2v2s12 0.463415 74030 95647 65 65 +f3v2s27 f2v6s16 0.475000 74030 64696 65 65 +f3v2s27 f2v7s17 0.457831 74030 14079 65 66 +f3v2s27 f1v3s5 0.444444 74030 42963 65 48 +f3v2s27 f2v10s20 0.457831 74030 31703 65 66 +f3v2s27 f2v1s11 0.475000 74030 2372 65 65 +f3v2s27 f0v1s1 0.487179 74030 77580 65 68 +f3v2s27 f2v8s18 0.452381 74030 3218 65 64 +f3v2s27 f2v0s10 0.457831 74030 77079 65 66 +f3v2s27 f1v2s4 0.444444 74030 24865 65 48 +f3v2s27 f2v5s15 0.487179 74030 34483 65 64 +f3v2s27 f1v7s9 0.465753 74030 84209 65 50 +f3v2s27 f1v5s7 0.458333 74030 34528 65 49 +f3v2s27 f1v0s2 0.452055 74030 16977 65 51 +f3v2s27 f2v11s21 0.475000 74030 82250 65 65 +f3v2s27 f1v4s6 0.458333 74030 15749 65 53 +f3v2s27 f1v1s3 0.452055 74030 53350 65 51 +f3v2s27 f2v14s24 0.487500 74030 27352 65 66 +f4v1s41 f2v9s19 0.506329 45686 6506 61 67 +f4v1s41 f2v12s22 0.513158 45686 93800 61 67 +f4v1s41 f0v0s0 0.512195 45686 63627 61 68 +f4v1s41 f1v6s8 0.512195 45686 97064 61 68 +f4v1s41 f2v13s23 0.512821 45686 70974 61 66 +f4v1s41 f2v4s14 0.527027 45686 13384 61 63 +f4v1s41 f2v3s13 0.487500 45686 15798 61 67 +f4v1s41 f2v2s12 0.506494 45686 95647 61 65 +f4v1s41 f2v6s16 0.512821 45686 64696 61 65 +f4v1s41 f2v7s17 0.512821 45686 14079 61 66 +f4v1s41 f1v3s5 0.530303 45686 42963 61 48 +f4v1s41 f2v10s20 0.512821 45686 31703 61 66 +f4v1s41 f2v1s11 0.500000 45686 2372 61 65 +f4v1s41 f0v1s1 0.512195 45686 77580 61 68 +f4v1s41 f2v8s18 0.506494 45686 3218 61 64 +f4v1s41 f2v0s10 0.512821 45686 77079 61 66 +f4v1s41 f1v2s4 0.492537 45686 24865 61 48 +f4v1s41 f2v5s15 0.520000 45686 34483 61 64 +f4v1s41 f1v7s9 0.485714 45686 84209 61 50 +f4v1s41 f1v5s7 0.530303 45686 34528 61 49 +f4v1s41 f1v0s2 0.522388 45686 16977 61 51 +f4v1s41 f2v11s21 0.512821 45686 82250 61 65 +f4v1s41 f1v4s6 0.529412 45686 15749 61 53 +f4v1s41 f1v1s3 0.522388 45686 53350 61 51 +f4v1s41 f2v14s24 0.513158 45686 27352 61 66 +f2v0s22 f2v9s19 0.506173 43219 6506 69 67 +f2v0s22 f2v12s22 0.512500 43219 93800 69 67 +f2v0s22 f0v0s0 0.500000 43219 63627 69 68 +f2v0s22 f1v6s8 0.500000 43219 97064 69 68 +f2v0s22 f2v13s23 0.512500 43219 70974 69 66 +f2v0s22 f2v4s14 0.487805 43219 13384 69 63 +f2v0s22 f2v3s13 0.506329 43219 15798 69 67 +f2v0s22 f2v2s12 0.512821 43219 95647 69 65 +f2v0s22 f2v6s16 0.506329 43219 64696 69 65 +f2v0s22 f2v7s17 0.512500 43219 14079 69 66 +f2v0s22 f1v3s5 0.464789 43219 42963 69 48 +f2v0s22 f2v10s20 0.512500 43219 31703 69 66 +f2v0s22 f2v1s11 0.518987 43219 2372 69 65 +f2v0s22 f0v1s1 0.500000 43219 77580 69 68 +f2v0s22 f2v8s18 0.500000 43219 3218 69 64 +f2v0s22 f2v0s10 0.512500 43219 77079 69 66 +f2v0s22 f1v2s4 0.428571 43219 24865 69 48 +f2v0s22 f2v5s15 0.476190 43219 34483 69 64 +f2v0s22 f1v7s9 0.417722 43219 84209 69 50 +f2v0s22 f1v5s7 0.435897 43219 34528 69 49 +f2v0s22 f1v0s2 0.430380 43219 16977 69 51 +f2v0s22 f2v11s21 0.506329 43219 82250 69 65 +f2v0s22 f1v4s6 0.419753 43219 15749 69 53 +f2v0s22 f1v1s3 0.430380 43219 53350 69 51 +f2v0s22 f2v14s24 0.471264 43219 27352 69 66 +f1v2s9 f2v9s19 0.481928 99108 6506 69 67 +f1v2s9 f2v12s22 0.481928 99108 93800 69 67 +f1v2s9 f0v0s0 0.505747 99108 63627 69 68 +f1v2s9 f1v6s8 0.505747 99108 97064 69 68 +f1v2s9 f2v13s23 0.487805 99108 70974 69 66 +f1v2s9 f2v4s14 0.469880 99108 13384 69 63 +f1v2s9 f2v3s13 0.487805 99108 15798 69 67 +f1v2s9 f2v2s12 0.476190 99108 95647 69 65 +f1v2s9 f2v6s16 0.470588 99108 64696 69 65 +f1v2s9 f2v7s17 0.487805 99108 14079 69 66 +f1v2s9 f1v3s5 0.465753 99108 42963 69 48 +f1v2s9 f2v10s20 0.487805 99108 31703 69 66 +f1v2s9 f2v1s11 0.482353 99108 2372 69 65 +f1v2s9 f0v1s1 0.505747 99108 77580 69 68 +f1v2s9 f2v8s18 0.481481 99108 3218 69 64 +f1v2s9 f2v0s10 0.487805 99108 77079 69 66 +f1v2s9 f1v2s4 0.441558 99108 24865 69 48 +f1v2s9 f2v5s15 0.458824 99108 34483 69 64 +f1v2s9 f1v7s9 0.459459 99108 84209 69 50 +f1v2s9 f1v5s7 0.486111 99108 34528 69 49 +f1v2s9 f1v0s2 0.472973 99108 16977 69 51 +f1v2s9 f2v11s21 0.470588 99108 82250 69 65 +f1v2s9 f1v4s6 0.466667 99108 15749 69 53 +f1v2s9 f1v1s3 0.472973 99108 53350 69 51 +f1v2s9 f2v14s24 0.482353 99108 27352 69 66 +f1v3s10 f2v9s19 0.520000 43230 6506 58 67 +f1v3s10 f2v12s22 0.513158 43230 93800 58 67 +f1v3s10 f0v0s0 0.547945 43230 63627 58 68 +f1v3s10 f1v6s8 0.547945 43230 97064 58 68 +f1v3s10 f2v13s23 0.527027 43230 70974 58 66 +f1v3s10 f2v4s14 0.520548 43230 13384 58 63 +f1v3s10 f2v3s13 0.506667 43230 15798 58 67 +f1v3s10 f2v2s12 0.534247 43230 95647 58 65 +f1v3s10 f2v6s16 0.547945 43230 64696 58 65 +f1v3s10 f2v7s17 0.527027 43230 14079 58 66 +f1v3s10 f1v3s5 0.523077 43230 42963 58 48 +f1v3s10 f2v10s20 0.527027 43230 31703 58 66 +f1v3s10 f2v1s11 0.520548 43230 2372 58 65 +f1v3s10 f0v1s1 0.547945 43230 77580 58 68 +f1v3s10 f2v8s18 0.520548 43230 3218 58 64 +f1v3s10 f2v0s10 0.527027 43230 77079 58 66 +f1v3s10 f1v2s4 0.523077 43230 24865 58 48 +f1v3s10 f2v5s15 0.547945 43230 34483 58 64 +f1v3s10 f1v7s9 0.545455 43230 84209 58 50 +f1v3s10 f1v5s7 0.523077 43230 34528 58 49 +f1v3s10 f1v0s2 0.530303 43230 16977 58 51 +f1v3s10 f2v11s21 0.547945 43230 82250 58 65 +f1v3s10 f1v4s6 0.514706 43230 15749 58 53 +f1v3s10 f1v1s3 0.530303 43230 53350 58 51 +f1v3s10 f2v14s24 0.527027 43230 27352 58 66 +f3v0s25 f2v9s19 0.458824 62755 6506 66 67 +f3v0s25 f2v12s22 0.438202 62755 93800 66 67 +f3v0s25 f0v0s0 0.493671 62755 63627 66 68 +f3v0s25 f1v6s8 0.493671 62755 97064 66 68 +f3v0s25 f2v13s23 0.457831 62755 70974 66 66 +f3v0s25 f2v4s14 0.463415 62755 13384 66 63 +f3v0s25 f2v3s13 0.452381 62755 15798 66 67 +f3v0s25 f2v2s12 0.457831 62755 95647 66 65 +f3v0s25 f2v6s16 0.469136 62755 64696 66 65 +f3v0s25 f2v7s17 0.457831 62755 14079 66 66 +f3v0s25 f1v3s5 0.445946 62755 42963 66 48 +f3v0s25 f2v10s20 0.457831 62755 31703 66 66 +f3v0s25 f2v1s11 0.475000 62755 2372 66 65 +f3v0s25 f0v1s1 0.493671 62755 77580 66 68 +f3v0s25 f2v8s18 0.447059 62755 3218 66 64 +f3v0s25 f2v0s10 0.457831 62755 77079 66 66 +f3v0s25 f1v2s4 0.452055 62755 24865 66 48 +f3v0s25 f2v5s15 0.481013 62755 34483 66 64 +f3v0s25 f1v7s9 0.459459 62755 84209 66 50 +f3v0s25 f1v5s7 0.465753 62755 34528 66 49 +f3v0s25 f1v0s2 0.459459 62755 16977 66 51 +f3v0s25 f2v11s21 0.469136 62755 82250 66 65 +f3v0s25 f1v4s6 0.465753 62755 15749 66 53 +f3v0s25 f1v1s3 0.459459 62755 53350 66 51 +f3v0s25 f2v14s24 0.481481 62755 27352 66 66 +f3v3s28 f2v9s19 0.469136 66465 6506 66 67 +f3v3s28 f2v12s22 0.447059 66465 93800 66 67 +f3v3s28 f0v0s0 0.493671 66465 63627 66 68 +f3v3s28 f1v6s8 0.493671 66465 97064 66 68 +f3v3s28 f2v13s23 0.468354 66465 70974 66 66 +f3v3s28 f2v4s14 0.445783 66465 13384 66 63 +f3v3s28 f2v3s13 0.456790 66465 15798 66 67 +f3v3s28 f2v2s12 0.474359 66465 95647 66 65 +f3v3s28 f2v6s16 0.475000 66465 64696 66 65 +f3v3s28 f2v7s17 0.468354 66465 14079 66 66 +f3v3s28 f1v3s5 0.445946 66465 42963 66 48 +f3v3s28 f2v10s20 0.468354 66465 31703 66 66 +f3v3s28 f2v1s11 0.475000 66465 2372 66 65 +f3v3s28 f0v1s1 0.493671 66465 77580 66 68 +f3v3s28 f2v8s18 0.435294 66465 3218 66 64 +f3v3s28 f2v0s10 0.468354 66465 77079 66 66 +f3v3s28 f1v2s4 0.459459 66465 24865 66 48 +f3v3s28 f2v5s15 0.452381 66465 34483 66 64 +f3v3s28 f1v7s9 0.478873 66465 84209 66 50 +f3v3s28 f1v5s7 0.472973 66465 34528 66 49 +f3v3s28 f1v0s2 0.466667 66465 16977 66 51 +f3v3s28 f2v11s21 0.475000 66465 82250 66 65 +f3v3s28 f1v4s6 0.479452 66465 15749 66 53 +f3v3s28 f1v1s3 0.466667 66465 53350 66 51 +f3v3s28 f2v14s24 0.487500 66465 27352 66 66 +f3v13s38 f2v9s19 0.449438 26948 6506 68 67 +f3v13s38 f2v12s22 0.453488 26948 93800 68 67 +f3v13s38 f0v0s0 0.493671 26948 63627 68 68 +f3v13s38 f1v6s8 0.493671 26948 97064 68 68 +f3v13s38 f2v13s23 0.448276 26948 70974 68 66 +f3v13s38 f2v4s14 0.452381 26948 13384 68 63 +f3v13s38 f2v3s13 0.448276 26948 15798 68 67 +f3v13s38 f2v2s12 0.448276 26948 95647 68 65 +f3v13s38 f2v6s16 0.475610 26948 64696 68 65 +f3v13s38 f2v7s17 0.448276 26948 14079 68 66 +f3v13s38 f1v3s5 0.453333 26948 42963 68 48 +f3v13s38 f2v10s20 0.448276 26948 31703 68 66 +f3v13s38 f2v1s11 0.469136 26948 2372 68 65 +f3v13s38 f0v1s1 0.493671 26948 77580 68 68 +f3v13s38 f2v8s18 0.436782 26948 3218 68 64 +f3v13s38 f2v0s10 0.448276 26948 77079 68 66 +f3v13s38 f1v2s4 0.453333 26948 24865 68 48 +f3v13s38 f2v5s15 0.475000 26948 34483 68 64 +f3v13s38 f1v7s9 0.466667 26948 84209 68 50 +f3v13s38 f1v5s7 0.466667 26948 34528 68 49 +f3v13s38 f1v0s2 0.460526 26948 16977 68 51 +f3v13s38 f2v11s21 0.475610 26948 82250 68 65 +f3v13s38 f1v4s6 0.480000 26948 15749 68 53 +f3v13s38 f1v1s3 0.460526 26948 53350 68 51 +f3v13s38 f2v14s24 0.487805 26948 27352 68 66 +f3v7s32 f2v9s19 0.464286 53710 6506 65 67 +f3v7s32 f2v12s22 0.469136 53710 93800 65 67 +f3v7s32 f0v0s0 0.500000 53710 63627 65 68 +f3v7s32 f1v6s8 0.500000 53710 97064 65 68 +f3v7s32 f2v13s23 0.463415 53710 70974 65 66 +f3v7s32 f2v4s14 0.469136 53710 13384 65 63 +f3v7s32 f2v3s13 0.457831 53710 15798 65 67 +f3v7s32 f2v2s12 0.463415 53710 95647 65 65 +f3v7s32 f2v6s16 0.462500 53710 64696 65 65 +f3v7s32 f2v7s17 0.463415 53710 14079 65 66 +f3v7s32 f1v3s5 0.452055 53710 42963 65 48 +f3v7s32 f2v10s20 0.463415 53710 31703 65 66 +f3v7s32 f2v1s11 0.469136 53710 2372 65 65 +f3v7s32 f0v1s1 0.500000 53710 77580 65 68 +f3v7s32 f2v8s18 0.445783 53710 3218 65 64 +f3v7s32 f2v0s10 0.463415 53710 77079 65 66 +f3v7s32 f1v2s4 0.428571 53710 24865 65 48 +f3v7s32 f2v5s15 0.469136 53710 34483 65 64 +f3v7s32 f1v7s9 0.441558 53710 84209 65 50 +f3v7s32 f1v5s7 0.447368 53710 34528 65 49 +f3v7s32 f1v0s2 0.435897 53710 16977 65 51 +f3v7s32 f2v11s21 0.462500 53710 82250 65 65 +f3v7s32 f1v4s6 0.447368 53710 15749 65 53 +f3v7s32 f1v1s3 0.435897 53710 53350 65 51 +f3v7s32 f2v14s24 0.475610 53710 27352 65 66 +f3v1s26 f2v9s19 0.469136 41283 6506 65 67 +f3v1s26 f2v12s22 0.441860 41283 93800 65 67 +f3v1s26 f0v0s0 0.481013 41283 63627 65 68 +f3v1s26 f1v6s8 0.481013 41283 97064 65 68 +f3v1s26 f2v13s23 0.468354 41283 70974 65 66 +f3v1s26 f2v4s14 0.456790 41283 13384 65 63 +f3v1s26 f2v3s13 0.451220 41283 15798 65 67 +f3v1s26 f2v2s12 0.474359 41283 95647 65 65 +f3v1s26 f2v6s16 0.475000 41283 64696 65 65 +f3v1s26 f2v7s17 0.468354 41283 14079 65 66 +f3v1s26 f1v3s5 0.436620 41283 42963 65 48 +f3v1s26 f2v10s20 0.468354 41283 31703 65 66 +f3v1s26 f2v1s11 0.481013 41283 2372 65 65 +f3v1s26 f0v1s1 0.481013 41283 77580 65 68 +f3v1s26 f2v8s18 0.440476 41283 3218 65 64 +f3v1s26 f2v0s10 0.468354 41283 77079 65 66 +f3v1s26 f1v2s4 0.442857 41283 24865 65 48 +f3v1s26 f2v5s15 0.474359 41283 34483 65 64 +f3v1s26 f1v7s9 0.450704 41283 84209 65 50 +f3v1s26 f1v5s7 0.450704 41283 34528 65 49 +f3v1s26 f1v0s2 0.444444 41283 16977 65 51 +f3v1s26 f2v11s21 0.475000 41283 82250 65 65 +f3v1s26 f1v4s6 0.458333 41283 15749 65 53 +f3v1s26 f1v1s3 0.444444 41283 53350 65 51 +f3v1s26 f2v14s24 0.487500 41283 27352 65 66 +f3v6s31 f2v9s19 0.464286 94783 6506 65 67 +f3v6s31 f2v12s22 0.469136 94783 93800 65 67 +f3v6s31 f0v0s0 0.500000 94783 63627 65 68 +f3v6s31 f1v6s8 0.500000 94783 97064 65 68 +f3v6s31 f2v13s23 0.463415 94783 70974 65 66 +f3v6s31 f2v4s14 0.469136 94783 13384 65 63 +f3v6s31 f2v3s13 0.457831 94783 15798 65 67 +f3v6s31 f2v2s12 0.463415 94783 95647 65 65 +f3v6s31 f2v6s16 0.462500 94783 64696 65 65 +f3v6s31 f2v7s17 0.463415 94783 14079 65 66 +f3v6s31 f1v3s5 0.452055 94783 42963 65 48 +f3v6s31 f2v10s20 0.463415 94783 31703 65 66 +f3v6s31 f2v1s11 0.469136 94783 2372 65 65 +f3v6s31 f0v1s1 0.500000 94783 77580 65 68 +f3v6s31 f2v8s18 0.445783 94783 3218 65 64 +f3v6s31 f2v0s10 0.463415 94783 77079 65 66 +f3v6s31 f1v2s4 0.428571 94783 24865 65 48 +f3v6s31 f2v5s15 0.469136 94783 34483 65 64 +f3v6s31 f1v7s9 0.441558 94783 84209 65 50 +f3v6s31 f1v5s7 0.447368 94783 34528 65 49 +f3v6s31 f1v0s2 0.435897 94783 16977 65 51 +f3v6s31 f2v11s21 0.462500 94783 82250 65 65 +f3v6s31 f1v4s6 0.447368 94783 15749 65 53 +f3v6s31 f1v1s3 0.435897 94783 53350 65 51 +f3v6s31 f2v14s24 0.475610 94783 27352 65 66 +f1v13s20 f2v9s19 0.535211 80913 6506 56 67 +f1v13s20 f2v12s22 0.527778 80913 93800 56 67 +f1v13s20 f0v0s0 0.534247 80913 63627 56 68 +f1v13s20 f1v6s8 0.534247 80913 97064 56 68 +f1v13s20 f2v13s23 0.542857 80913 70974 56 66 +f1v13s20 f2v4s14 0.536232 80913 13384 56 63 +f1v13s20 f2v3s13 0.513889 80913 15798 56 67 +f1v13s20 f2v2s12 0.550725 80913 95647 56 65 +f1v13s20 f2v6s16 0.563380 80913 64696 56 65 +f1v13s20 f2v7s17 0.542857 80913 14079 56 66 +f1v13s20 f1v3s5 0.531250 80913 42963 56 48 +f1v13s20 f2v10s20 0.542857 80913 31703 56 66 +f1v13s20 f2v1s11 0.528571 80913 2372 56 65 +f1v13s20 f0v1s1 0.534247 80913 77580 56 68 +f1v13s20 f2v8s18 0.528571 80913 3218 56 64 +f1v13s20 f2v0s10 0.542857 80913 77079 56 66 +f1v13s20 f1v2s4 0.531250 80913 24865 56 48 +f1v13s20 f2v5s15 0.557143 80913 34483 56 64 +f1v13s20 f1v7s9 0.553846 80913 84209 56 50 +f1v13s20 f1v5s7 0.531250 80913 34528 56 49 +f1v13s20 f1v0s2 0.538462 80913 16977 56 51 +f1v13s20 f2v11s21 0.563380 80913 82250 56 65 +f1v13s20 f1v4s6 0.522388 80913 15749 56 53 +f1v13s20 f1v1s3 0.538462 80913 53350 56 51 +f1v13s20 f2v14s24 0.535211 80913 27352 56 66 +f2v2s24 f2v9s19 0.507042 68414 6506 49 67 +f2v2s24 f2v12s22 0.521127 68414 93800 49 67 +f2v2s24 f0v0s0 0.500000 68414 63627 49 68 +f2v2s24 f1v6s8 0.500000 68414 97064 49 68 +f2v2s24 f2v13s23 0.514286 68414 70974 49 66 +f2v2s24 f2v4s14 0.530303 68414 13384 49 63 +f2v2s24 f2v3s13 0.513889 68414 15798 49 67 +f2v2s24 f2v2s12 0.521739 68414 95647 49 65 +f2v2s24 f2v6s16 0.536232 68414 64696 49 65 +f2v2s24 f2v7s17 0.514286 68414 14079 49 66 +f2v2s24 f1v3s5 0.500000 68414 42963 49 48 +f2v2s24 f2v10s20 0.514286 68414 31703 49 66 +f2v2s24 f2v1s11 0.528571 68414 2372 49 65 +f2v2s24 f0v1s1 0.500000 68414 77580 49 68 +f2v2s24 f2v8s18 0.514706 68414 3218 49 64 +f2v2s24 f2v0s10 0.514286 68414 77079 49 66 +f2v2s24 f1v2s4 0.491228 68414 24865 49 48 +f2v2s24 f2v5s15 0.544118 68414 34483 49 64 +f2v2s24 f1v7s9 0.491228 68414 84209 49 50 +f2v2s24 f1v5s7 0.526316 68414 34528 49 49 +f2v2s24 f1v0s2 0.517241 68414 16977 49 51 +f2v2s24 f2v11s21 0.536232 68414 82250 49 65 +f2v2s24 f1v4s6 0.491525 68414 15749 49 53 +f2v2s24 f1v1s3 0.517241 68414 53350 49 51 +f2v2s24 f2v14s24 0.521739 68414 27352 49 66 +f3v11s36 f2v9s19 0.453488 91927 6506 65 67 +f3v11s36 f2v12s22 0.452381 91927 93800 65 67 +f3v11s36 f0v0s0 0.500000 91927 63627 65 68 +f3v11s36 f1v6s8 0.500000 91927 97064 65 68 +f3v11s36 f2v13s23 0.452381 91927 70974 65 66 +f3v11s36 f2v4s14 0.463415 91927 13384 65 63 +f3v11s36 f2v3s13 0.447059 91927 15798 65 67 +f3v11s36 f2v2s12 0.457831 91927 95647 65 65 +f3v11s36 f2v6s16 0.474359 91927 64696 65 65 +f3v11s36 f2v7s17 0.452381 91927 14079 65 66 +f3v11s36 f1v3s5 0.442857 91927 42963 65 48 +f3v11s36 f2v10s20 0.452381 91927 31703 65 66 +f3v11s36 f2v1s11 0.447059 91927 2372 65 65 +f3v11s36 f0v1s1 0.500000 91927 77580 65 68 +f3v11s36 f2v8s18 0.451220 91927 3218 65 64 +f3v11s36 f2v0s10 0.452381 91927 77079 65 66 +f3v11s36 f1v2s4 0.444444 91927 24865 65 48 +f3v11s36 f2v5s15 0.481013 91927 34483 65 64 +f3v11s36 f1v7s9 0.464789 91927 84209 65 50 +f3v11s36 f1v5s7 0.450704 91927 34528 65 49 +f3v11s36 f1v0s2 0.444444 91927 16977 65 51 +f3v11s36 f2v11s21 0.474359 91927 82250 65 65 +f3v11s36 f1v4s6 0.465753 91927 15749 65 53 +f3v11s36 f1v1s3 0.444444 91927 53350 65 51 +f3v11s36 f2v14s24 0.462500 91927 27352 65 66 +f0v5s5 f2v9s19 0.493827 2668 6506 69 67 +f0v5s5 f2v12s22 0.500000 2668 93800 69 67 +f0v5s5 f0v0s0 0.494253 2668 63627 69 68 +f0v5s5 f1v6s8 0.494253 2668 97064 69 68 +f0v5s5 f2v13s23 0.500000 2668 70974 69 66 +f0v5s5 f2v4s14 0.481481 2668 13384 69 63 +f0v5s5 f2v3s13 0.493827 2668 15798 69 67 +f0v5s5 f2v2s12 0.500000 2668 95647 69 65 +f0v5s5 f2v6s16 0.493671 2668 64696 69 65 +f0v5s5 f2v7s17 0.500000 2668 14079 69 66 +f0v5s5 f1v3s5 0.452055 2668 42963 69 48 +f0v5s5 f2v10s20 0.500000 2668 31703 69 66 +f0v5s5 f2v1s11 0.506329 2668 2372 69 65 +f0v5s5 f0v1s1 0.494253 2668 77580 69 68 +f0v5s5 f2v8s18 0.487500 2668 3218 69 64 +f0v5s5 f2v0s10 0.500000 2668 77079 69 66 +f0v5s5 f1v2s4 0.441558 2668 24865 69 48 +f0v5s5 f2v5s15 0.469880 2668 34483 69 64 +f0v5s5 f1v7s9 0.430380 2668 84209 69 50 +f0v5s5 f1v5s7 0.448718 2668 34528 69 49 +f0v5s5 f1v0s2 0.443038 2668 16977 69 51 +f0v5s5 f2v11s21 0.493671 2668 82250 69 65 +f0v5s5 f1v4s6 0.432099 2668 15749 69 53 +f0v5s5 f1v1s3 0.443038 2668 53350 69 51 +f0v5s5 f2v14s24 0.455556 2668 27352 69 66 +f1v11s18 f2v9s19 0.520000 51814 6506 58 67 +f1v11s18 f2v12s22 0.513158 51814 93800 58 67 +f1v11s18 f0v0s0 0.554054 51814 63627 58 68 +f1v11s18 f1v6s8 0.554054 51814 97064 58 68 +f1v11s18 f2v13s23 0.527027 51814 70974 58 66 +f1v11s18 f2v4s14 0.520548 51814 13384 58 63 +f1v11s18 f2v3s13 0.506667 51814 15798 58 67 +f1v11s18 f2v2s12 0.534247 51814 95647 58 65 +f1v11s18 f2v6s16 0.540541 51814 64696 58 65 +f1v11s18 f2v7s17 0.527027 51814 14079 58 66 +f1v11s18 f1v3s5 0.531250 51814 42963 58 48 +f1v11s18 f2v10s20 0.527027 51814 31703 58 66 +f1v11s18 f2v1s11 0.520548 51814 2372 58 65 +f1v11s18 f0v1s1 0.554054 51814 77580 58 68 +f1v11s18 f2v8s18 0.520548 51814 3218 58 64 +f1v11s18 f2v0s10 0.527027 51814 77079 58 66 +f1v11s18 f1v2s4 0.523077 51814 24865 58 48 +f1v11s18 f2v5s15 0.547945 51814 34483 58 64 +f1v11s18 f1v7s9 0.553846 51814 84209 58 50 +f1v11s18 f1v5s7 0.531250 51814 34528 58 49 +f1v11s18 f1v0s2 0.538462 51814 16977 58 51 +f1v11s18 f2v11s21 0.540541 51814 82250 58 65 +f1v11s18 f1v4s6 0.522388 51814 15749 58 53 +f1v11s18 f1v1s3 0.538462 51814 53350 58 51 +f1v11s18 f2v14s24 0.520000 51814 27352 58 66 +f0v6s6 f2v9s19 0.512821 16273 6506 69 67 +f0v6s6 f2v12s22 0.487805 16273 93800 69 67 +f0v6s6 f0v0s0 0.524390 16273 63627 69 68 +f0v6s6 f1v6s8 0.524390 16273 97064 69 68 +f0v6s6 f2v13s23 0.519481 16273 70974 69 66 +f0v6s6 f2v4s14 0.481481 16273 13384 69 63 +f0v6s6 f2v3s13 0.459770 16273 15798 69 67 +f0v6s6 f2v2s12 0.470588 16273 95647 69 65 +f0v6s6 f2v6s16 0.487805 16273 64696 69 65 +f0v6s6 f2v7s17 0.519481 16273 14079 69 66 +f0v6s6 f1v3s5 0.452055 16273 42963 69 48 +f0v6s6 f2v10s20 0.519481 16273 31703 69 66 +f0v6s6 f2v1s11 0.532468 16273 2372 69 65 +f0v6s6 f0v1s1 0.524390 16273 77580 69 68 +f0v6s6 f2v8s18 0.506494 16273 3218 69 64 +f0v6s6 f2v0s10 0.519481 16273 77079 69 66 +f0v6s6 f1v2s4 0.438356 16273 24865 69 48 +f0v6s6 f2v5s15 0.469880 16273 34483 69 64 +f0v6s6 f1v7s9 0.417722 16273 84209 69 50 +f0v6s6 f1v5s7 0.452055 16273 34528 69 49 +f0v6s6 f1v0s2 0.445946 16273 16977 69 51 +f0v6s6 f2v11s21 0.487805 16273 82250 69 65 +f0v6s6 f1v4s6 0.459459 16273 15749 69 53 +f0v6s6 f1v1s3 0.445946 16273 53350 69 51 +f0v6s6 f2v14s24 0.482759 16273 27352 69 66 +f3v4s29 f2v9s19 0.453488 94356 6506 68 67 +f3v4s29 f2v12s22 0.434783 94356 93800 68 67 +f3v4s29 f0v0s0 0.506329 94356 63627 68 68 +f3v4s29 f1v6s8 0.506329 94356 97064 68 68 +f3v4s29 f2v13s23 0.458824 94356 70974 68 66 +f3v4s29 f2v4s14 0.464286 94356 13384 68 63 +f3v4s29 f2v3s13 0.458824 94356 15798 68 67 +f3v4s29 f2v2s12 0.458824 94356 95647 68 65 +f3v4s29 f2v6s16 0.464286 94356 64696 68 65 +f3v4s29 f2v7s17 0.458824 94356 14079 68 66 +f3v4s29 f1v3s5 0.434211 94356 42963 68 48 +f3v4s29 f2v10s20 0.458824 94356 31703 68 66 +f3v4s29 f2v1s11 0.469136 94356 2372 68 65 +f3v4s29 f0v1s1 0.506329 94356 77580 68 68 +f3v4s29 f2v8s18 0.453488 94356 3218 68 64 +f3v4s29 f2v0s10 0.458824 94356 77079 68 66 +f3v4s29 f1v2s4 0.452055 94356 24865 68 48 +f3v4s29 f2v5s15 0.475000 94356 34483 68 64 +f3v4s29 f1v7s9 0.447368 94356 84209 68 50 +f3v4s29 f1v5s7 0.465753 94356 34528 68 49 +f3v4s29 f1v0s2 0.465753 94356 16977 68 51 +f3v4s29 f2v11s21 0.464286 94356 82250 68 65 +f3v4s29 f1v4s6 0.453333 94356 15749 68 53 +f3v4s29 f1v1s3 0.465753 94356 53350 68 51 +f3v4s29 f2v14s24 0.475610 94356 27352 68 66 +f0v2s2 f2v9s19 0.506173 10896 6506 69 67 +f0v2s2 f2v12s22 0.512500 10896 93800 69 67 +f0v2s2 f0v0s0 0.500000 10896 63627 69 68 +f0v2s2 f1v6s8 0.500000 10896 97064 69 68 +f0v2s2 f2v13s23 0.512500 10896 70974 69 66 +f0v2s2 f2v4s14 0.487805 10896 13384 69 63 +f0v2s2 f2v3s13 0.506329 10896 15798 69 67 +f0v2s2 f2v2s12 0.512821 10896 95647 69 65 +f0v2s2 f2v6s16 0.506329 10896 64696 69 65 +f0v2s2 f2v7s17 0.512500 10896 14079 69 66 +f0v2s2 f1v3s5 0.464789 10896 42963 69 48 +f0v2s2 f2v10s20 0.512500 10896 31703 69 66 +f0v2s2 f2v1s11 0.518987 10896 2372 69 65 +f0v2s2 f0v1s1 0.500000 10896 77580 69 68 +f0v2s2 f2v8s18 0.500000 10896 3218 69 64 +f0v2s2 f2v0s10 0.512500 10896 77079 69 66 +f0v2s2 f1v2s4 0.428571 10896 24865 69 48 +f0v2s2 f2v5s15 0.476190 10896 34483 69 64 +f0v2s2 f1v7s9 0.417722 10896 84209 69 50 +f0v2s2 f1v5s7 0.435897 10896 34528 69 49 +f0v2s2 f1v0s2 0.430380 10896 16977 69 51 +f0v2s2 f2v11s21 0.506329 10896 82250 69 65 +f0v2s2 f1v4s6 0.419753 10896 15749 69 53 +f0v2s2 f1v1s3 0.430380 10896 53350 69 51 +f0v2s2 f2v14s24 0.471264 10896 27352 69 66 +f3v12s37 f2v9s19 0.471264 74202 6506 67 67 +f3v12s37 f2v12s22 0.470588 74202 93800 67 67 +f3v12s37 f0v0s0 0.500000 74202 63627 67 68 +f3v12s37 f1v6s8 0.500000 74202 97064 67 68 +f3v12s37 f2v13s23 0.470588 74202 70974 67 66 +f3v12s37 f2v4s14 0.481928 74202 13384 67 63 +f3v12s37 f2v3s13 0.465116 74202 15798 67 67 +f3v12s37 f2v2s12 0.476190 74202 95647 67 65 +f3v12s37 f2v6s16 0.469880 74202 64696 67 65 +f3v12s37 f2v7s17 0.470588 74202 14079 67 66 +f3v12s37 f1v3s5 0.440000 74202 42963 67 48 +f3v12s37 f2v10s20 0.470588 74202 31703 67 66 +f3v12s37 f2v1s11 0.458824 74202 2372 67 65 +f3v12s37 f0v1s1 0.500000 74202 77580 67 68 +f3v12s37 f2v8s18 0.465116 74202 3218 67 64 +f3v12s37 f2v0s10 0.470588 74202 77079 67 66 +f3v12s37 f1v2s4 0.430380 74202 24865 67 48 +f3v12s37 f2v5s15 0.464286 74202 34483 67 64 +f3v12s37 f1v7s9 0.443038 74202 84209 67 50 +f3v12s37 f1v5s7 0.448718 74202 34528 67 49 +f3v12s37 f1v0s2 0.437500 74202 16977 67 51 +f3v12s37 f2v11s21 0.469880 74202 82250 67 65 +f3v12s37 f1v4s6 0.426829 74202 15749 67 53 +f3v12s37 f1v1s3 0.437500 74202 53350 67 51 +f3v12s37 f2v14s24 0.470588 74202 27352 67 66 +f0v3s3 f2v9s19 0.506329 73040 6506 67 67 +f0v3s3 f2v12s22 0.512821 73040 93800 67 67 +f0v3s3 f0v0s0 0.494118 73040 63627 67 68 +f0v3s3 f1v6s8 0.494118 73040 97064 67 68 +f0v3s3 f2v13s23 0.512821 73040 70974 67 66 +f0v3s3 f2v4s14 0.448276 73040 13384 67 63 +f0v3s3 f2v3s13 0.506494 73040 15798 67 67 +f0v3s3 f2v2s12 0.506494 73040 95647 67 65 +f0v3s3 f2v6s16 0.506494 73040 64696 67 65 +f0v3s3 f2v7s17 0.512821 73040 14079 67 66 +f0v3s3 f1v3s5 0.478873 73040 42963 67 48 +f0v3s3 f2v10s20 0.512821 73040 31703 67 66 +f0v3s3 f2v1s11 0.512821 73040 2372 67 65 +f0v3s3 f0v1s1 0.494118 73040 77580 67 68 +f0v3s3 f2v8s18 0.500000 73040 3218 67 64 +f0v3s3 f2v0s10 0.512821 73040 77079 67 66 +f0v3s3 f1v2s4 0.453333 73040 24865 67 48 +f0v3s3 f2v5s15 0.469880 73040 34483 67 64 +f0v3s3 f1v7s9 0.435897 73040 84209 67 50 +f0v3s3 f1v5s7 0.441558 73040 34528 67 49 +f0v3s3 f1v0s2 0.441558 73040 16977 67 51 +f0v3s3 f2v11s21 0.506494 73040 82250 67 65 +f0v3s3 f1v4s6 0.430380 73040 15749 67 53 +f0v3s3 f1v1s3 0.441558 73040 53350 67 51 +f0v3s3 f2v14s24 0.470588 73040 27352 67 66 +f3v14s39 f2v9s19 0.458824 55015 6506 66 67 +f3v14s39 f2v12s22 0.438202 55015 93800 66 67 +f3v14s39 f0v0s0 0.493671 55015 63627 66 68 +f3v14s39 f1v6s8 0.493671 55015 97064 66 68 +f3v14s39 f2v13s23 0.457831 55015 70974 66 66 +f3v14s39 f2v4s14 0.463415 55015 13384 66 63 +f3v14s39 f2v3s13 0.452381 55015 15798 66 67 +f3v14s39 f2v2s12 0.457831 55015 95647 66 65 +f3v14s39 f2v6s16 0.469136 55015 64696 66 65 +f3v14s39 f2v7s17 0.457831 55015 14079 66 66 +f3v14s39 f1v3s5 0.445946 55015 42963 66 48 +f3v14s39 f2v10s20 0.457831 55015 31703 66 66 +f3v14s39 f2v1s11 0.475000 55015 2372 66 65 +f3v14s39 f0v1s1 0.493671 55015 77580 66 68 +f3v14s39 f2v8s18 0.447059 55015 3218 66 64 +f3v14s39 f2v0s10 0.457831 55015 77079 66 66 +f3v14s39 f1v2s4 0.452055 55015 24865 66 48 +f3v14s39 f2v5s15 0.481013 55015 34483 66 64 +f3v14s39 f1v7s9 0.459459 55015 84209 66 50 +f3v14s39 f1v5s7 0.465753 55015 34528 66 49 +f3v14s39 f1v0s2 0.459459 55015 16977 66 51 +f3v14s39 f2v11s21 0.469136 55015 82250 66 65 +f3v14s39 f1v4s6 0.465753 55015 15749 66 53 +f3v14s39 f1v1s3 0.459459 55015 53350 66 51 +f3v14s39 f2v14s24 0.481481 55015 27352 66 66 +f0v0s0 f2v9s19 0.493827 1332 6506 69 67 +f0v0s0 f2v12s22 0.500000 1332 93800 69 67 +f0v0s0 f0v0s0 0.505747 1332 63627 69 68 +f0v0s0 f1v6s8 0.505747 1332 97064 69 68 +f0v0s0 f2v13s23 0.500000 1332 70974 69 66 +f0v0s0 f2v4s14 0.481481 1332 13384 69 63 +f0v0s0 f2v3s13 0.500000 1332 15798 69 67 +f0v0s0 f2v2s12 0.454545 1332 95647 69 65 +f0v0s0 f2v6s16 0.459770 1332 64696 69 65 +f0v0s0 f2v7s17 0.500000 1332 14079 69 66 +f0v0s0 f1v3s5 0.465753 1332 42963 69 48 +f0v0s0 f2v10s20 0.500000 1332 31703 69 66 +f0v0s0 f2v1s11 0.465909 1332 2372 69 65 +f0v0s0 f0v1s1 0.505747 1332 77580 69 68 +f0v0s0 f2v8s18 0.487500 1332 3218 69 64 +f0v0s0 f2v0s10 0.500000 1332 77079 69 66 +f0v0s0 f1v2s4 0.441558 1332 24865 69 48 +f0v0s0 f2v5s15 0.458824 1332 34483 69 64 +f0v0s0 f1v7s9 0.430380 1332 84209 69 50 +f0v0s0 f1v5s7 0.448718 1332 34528 69 49 +f0v0s0 f1v0s2 0.443038 1332 16977 69 51 +f0v0s0 f2v11s21 0.459770 1332 82250 69 65 +f0v0s0 f1v4s6 0.432099 1332 15749 69 53 +f0v0s0 f1v1s3 0.443038 1332 53350 69 51 +f0v0s0 f2v14s24 0.476744 1332 27352 69 66 +f1v12s19 f2v9s19 0.513514 58178 6506 57 67 +f1v12s19 f2v12s22 0.506667 58178 93800 57 67 +f1v12s19 f0v0s0 0.547945 58178 63627 57 68 +f1v12s19 f1v6s8 0.547945 58178 97064 57 68 +f1v12s19 f2v13s23 0.520548 58178 70974 57 66 +f1v12s19 f2v4s14 0.513889 58178 13384 57 63 +f1v12s19 f2v3s13 0.500000 58178 15798 57 67 +f1v12s19 f2v2s12 0.527778 58178 95647 57 65 +f1v12s19 f2v6s16 0.541667 58178 64696 57 65 +f1v12s19 f2v7s17 0.520548 58178 14079 57 66 +f1v12s19 f1v3s5 0.507692 58178 42963 57 48 +f1v12s19 f2v10s20 0.520548 58178 31703 57 66 +f1v12s19 f2v1s11 0.513889 58178 2372 57 65 +f1v12s19 f0v1s1 0.547945 58178 77580 57 68 +f1v12s19 f2v8s18 0.513889 58178 3218 57 64 +f1v12s19 f2v0s10 0.520548 58178 77079 57 66 +f1v12s19 f1v2s4 0.515625 58178 24865 57 48 +f1v12s19 f2v5s15 0.541667 58178 34483 57 64 +f1v12s19 f1v7s9 0.530303 58178 84209 57 50 +f1v12s19 f1v5s7 0.500000 58178 34528 57 49 +f1v12s19 f1v0s2 0.515152 58178 16977 57 51 +f1v12s19 f2v11s21 0.541667 58178 82250 57 65 +f1v12s19 f1v4s6 0.500000 58178 15749 57 53 +f1v12s19 f1v1s3 0.515152 58178 53350 57 51 +f1v12s19 f2v14s24 0.520548 58178 27352 57 66 diff --git a/pkg/obitools/obialign/testdata/two_alldist.expected b/pkg/obitools/obialign/testdata/two_alldist.expected new file mode 100644 index 0000000..8ac25bf --- /dev/null +++ b/pkg/obitools/obialign/testdata/two_alldist.expected @@ -0,0 +1,1075 @@ +f3v10s35 f2v9s19 42.000000 +f3v10s35 f2v12s22 46.000000 +f3v10s35 f0v0s0 44.000000 +f3v10s35 f1v6s8 44.000000 +f3v10s35 f2v13s23 41.000000 +f3v10s35 f2v4s14 40.000000 +f3v10s35 f2v3s13 43.000000 +f3v10s35 f2v2s12 40.000000 +f3v10s35 f2v6s16 41.000000 +f3v10s35 f2v7s17 41.000000 +f3v10s35 f1v3s5 43.000000 +f3v10s35 f2v10s20 41.000000 +f3v10s35 f2v1s11 39.000000 +f3v10s35 f0v1s1 44.000000 +f3v10s35 f2v8s18 46.000000 +f3v10s35 f2v0s10 41.000000 +f3v10s35 f1v2s4 42.000000 +f3v10s35 f2v5s15 39.000000 +f3v10s35 f1v7s9 41.000000 +f3v10s35 f1v5s7 41.000000 +f3v10s35 f1v0s2 42.000000 +f3v10s35 f2v11s21 41.000000 +f3v10s35 f1v4s6 40.000000 +f3v10s35 f1v1s3 42.000000 +f3v10s35 f2v14s24 40.000000 +f3v5s30 f2v9s19 43.000000 +f3v5s30 f2v12s22 46.000000 +f3v5s30 f0v0s0 48.000000 +f3v5s30 f1v6s8 48.000000 +f3v5s30 f2v13s23 42.000000 +f3v5s30 f2v4s14 40.000000 +f3v5s30 f2v3s13 43.000000 +f3v5s30 f2v2s12 41.000000 +f3v5s30 f2v6s16 40.000000 +f3v5s30 f2v7s17 42.000000 +f3v5s30 f1v3s5 42.000000 +f3v5s30 f2v10s20 42.000000 +f3v5s30 f2v1s11 42.000000 +f3v5s30 f0v1s1 48.000000 +f3v5s30 f2v8s18 45.000000 +f3v5s30 f2v0s10 42.000000 +f3v5s30 f1v2s4 39.000000 +f3v5s30 f2v5s15 38.000000 +f3v5s30 f1v7s9 37.000000 +f3v5s30 f1v5s7 37.000000 +f3v5s30 f1v0s2 41.000000 +f3v5s30 f2v11s21 40.000000 +f3v5s30 f1v4s6 36.000000 +f3v5s30 f1v1s3 41.000000 +f3v5s30 f2v14s24 40.000000 +f1v8s15 f2v9s19 36.000000 +f1v8s15 f2v12s22 37.000000 +f1v8s15 f0v0s0 33.000000 +f1v8s15 f1v6s8 33.000000 +f1v8s15 f2v13s23 35.000000 +f1v8s15 f2v4s14 35.000000 +f1v8s15 f2v3s13 37.000000 +f1v8s15 f2v2s12 34.000000 +f1v8s15 f2v6s16 33.000000 +f1v8s15 f2v7s17 35.000000 +f1v8s15 f1v3s5 31.000000 +f1v8s15 f2v10s20 35.000000 +f1v8s15 f2v1s11 35.000000 +f1v8s15 f0v1s1 33.000000 +f1v8s15 f2v8s18 35.000000 +f1v8s15 f2v0s10 35.000000 +f1v8s15 f1v2s4 31.000000 +f1v8s15 f2v5s15 33.000000 +f1v8s15 f1v7s9 30.000000 +f1v8s15 f1v5s7 31.000000 +f1v8s15 f1v0s2 31.000000 +f1v8s15 f2v11s21 33.000000 +f1v8s15 f1v4s6 33.000000 +f1v8s15 f1v1s3 31.000000 +f1v8s15 f2v14s24 35.000000 +f2v1s23 f2v9s19 36.000000 +f2v1s23 f2v12s22 37.000000 +f2v1s23 f0v0s0 33.000000 +f2v1s23 f1v6s8 33.000000 +f2v1s23 f2v13s23 35.000000 +f2v1s23 f2v4s14 35.000000 +f2v1s23 f2v3s13 37.000000 +f2v1s23 f2v2s12 34.000000 +f2v1s23 f2v6s16 33.000000 +f2v1s23 f2v7s17 35.000000 +f2v1s23 f1v3s5 31.000000 +f2v1s23 f2v10s20 35.000000 +f2v1s23 f2v1s11 35.000000 +f2v1s23 f0v1s1 33.000000 +f2v1s23 f2v8s18 35.000000 +f2v1s23 f2v0s10 35.000000 +f2v1s23 f1v2s4 31.000000 +f2v1s23 f2v5s15 33.000000 +f2v1s23 f1v7s9 30.000000 +f2v1s23 f1v5s7 31.000000 +f2v1s23 f1v0s2 31.000000 +f2v1s23 f2v11s21 33.000000 +f2v1s23 f1v4s6 33.000000 +f2v1s23 f1v1s3 31.000000 +f2v1s23 f2v14s24 35.000000 +f4v2s42 f2v9s19 39.000000 +f4v2s42 f2v12s22 39.000000 +f4v2s42 f0v0s0 40.000000 +f4v2s42 f1v6s8 40.000000 +f4v2s42 f2v13s23 38.000000 +f4v2s42 f2v4s14 37.000000 +f4v2s42 f2v3s13 41.000000 +f4v2s42 f2v2s12 38.000000 +f4v2s42 f2v6s16 39.000000 +f4v2s42 f2v7s17 38.000000 +f4v2s42 f1v3s5 32.000000 +f4v2s42 f2v10s20 38.000000 +f4v2s42 f2v1s11 38.000000 +f4v2s42 f0v1s1 40.000000 +f4v2s42 f2v8s18 38.000000 +f4v2s42 f2v0s10 38.000000 +f4v2s42 f1v2s4 35.000000 +f4v2s42 f2v5s15 39.000000 +f4v2s42 f1v7s9 36.000000 +f4v2s42 f1v5s7 32.000000 +f4v2s42 f1v0s2 33.000000 +f4v2s42 f2v11s21 39.000000 +f4v2s42 f1v4s6 33.000000 +f4v2s42 f1v1s3 33.000000 +f4v2s42 f2v14s24 38.000000 +f0v4s4 f2v9s19 43.000000 +f0v4s4 f2v12s22 43.000000 +f0v4s4 f0v0s0 43.000000 +f0v4s4 f1v6s8 43.000000 +f0v4s4 f2v13s23 42.000000 +f0v4s4 f2v4s14 44.000000 +f0v4s4 f2v3s13 42.000000 +f0v4s4 f2v2s12 44.000000 +f0v4s4 f2v6s16 45.000000 +f0v4s4 f2v7s17 42.000000 +f0v4s4 f1v3s5 39.000000 +f0v4s4 f2v10s20 42.000000 +f0v4s4 f2v1s11 44.000000 +f0v4s4 f0v1s1 43.000000 +f0v4s4 f2v8s18 42.000000 +f0v4s4 f2v0s10 42.000000 +f0v4s4 f1v2s4 43.000000 +f0v4s4 f2v5s15 46.000000 +f0v4s4 f1v7s9 40.000000 +f0v4s4 f1v5s7 37.000000 +f0v4s4 f1v0s2 39.000000 +f0v4s4 f2v11s21 45.000000 +f0v4s4 f1v4s6 40.000000 +f0v4s4 f1v1s3 39.000000 +f0v4s4 f2v14s24 44.000000 +f1v6s13 f2v9s19 37.000000 +f1v6s13 f2v12s22 38.000000 +f1v6s13 f0v0s0 34.000000 +f1v6s13 f1v6s8 34.000000 +f1v6s13 f2v13s23 36.000000 +f1v6s13 f2v4s14 35.000000 +f1v6s13 f2v3s13 37.000000 +f1v6s13 f2v2s12 35.000000 +f1v6s13 f2v6s16 34.000000 +f1v6s13 f2v7s17 36.000000 +f1v6s13 f1v3s5 28.000000 +f1v6s13 f2v10s20 36.000000 +f1v6s13 f2v1s11 36.000000 +f1v6s13 f0v1s1 34.000000 +f1v6s13 f2v8s18 35.000000 +f1v6s13 f2v0s10 36.000000 +f1v6s13 f1v2s4 28.000000 +f1v6s13 f2v5s15 35.000000 +f1v6s13 f1v7s9 27.000000 +f1v6s13 f1v5s7 28.000000 +f1v6s13 f1v0s2 28.000000 +f1v6s13 f2v11s21 34.000000 +f1v6s13 f1v4s6 30.000000 +f1v6s13 f1v1s3 28.000000 +f1v6s13 f2v14s24 37.000000 +f3v8s33 f2v9s19 46.000000 +f3v8s33 f2v12s22 50.000000 +f3v8s33 f0v0s0 41.000000 +f3v8s33 f1v6s8 41.000000 +f3v8s33 f2v13s23 45.000000 +f3v8s33 f2v4s14 44.000000 +f3v8s33 f2v3s13 46.000000 +f3v8s33 f2v2s12 45.000000 +f3v8s33 f2v6s16 43.000000 +f3v8s33 f2v7s17 45.000000 +f3v8s33 f1v3s5 41.000000 +f3v8s33 f2v10s20 45.000000 +f3v8s33 f2v1s11 42.000000 +f3v8s33 f0v1s1 41.000000 +f3v8s33 f2v8s18 46.000000 +f3v8s33 f2v0s10 45.000000 +f3v8s33 f1v2s4 40.000000 +f3v8s33 f2v5s15 42.000000 +f3v8s33 f1v7s9 40.000000 +f3v8s33 f1v5s7 39.000000 +f3v8s33 f1v0s2 40.000000 +f3v8s33 f2v11s21 43.000000 +f3v8s33 f1v4s6 42.000000 +f3v8s33 f1v1s3 40.000000 +f3v8s33 f2v14s24 42.000000 +f1v1s8 f2v9s19 36.000000 +f1v1s8 f2v12s22 37.000000 +f1v1s8 f0v0s0 36.000000 +f1v1s8 f1v6s8 36.000000 +f1v1s8 f2v13s23 35.000000 +f1v1s8 f2v4s14 35.000000 +f1v1s8 f2v3s13 38.000000 +f1v1s8 f2v2s12 34.000000 +f1v1s8 f2v6s16 33.000000 +f1v1s8 f2v7s17 35.000000 +f1v1s8 f1v3s5 31.000000 +f1v1s8 f2v10s20 35.000000 +f1v1s8 f2v1s11 37.000000 +f1v1s8 f0v1s1 36.000000 +f1v1s8 f2v8s18 36.000000 +f1v1s8 f2v0s10 35.000000 +f1v1s8 f1v2s4 31.000000 +f1v1s8 f2v5s15 32.000000 +f1v1s8 f1v7s9 32.000000 +f1v1s8 f1v5s7 30.000000 +f1v1s8 f1v0s2 32.000000 +f1v1s8 f2v11s21 33.000000 +f1v1s8 f1v4s6 32.000000 +f1v1s8 f1v1s3 32.000000 +f1v1s8 f2v14s24 35.000000 +f1v14s21 f2v9s19 38.000000 +f1v14s21 f2v12s22 39.000000 +f1v14s21 f0v0s0 32.000000 +f1v14s21 f1v6s8 32.000000 +f1v14s21 f2v13s23 37.000000 +f1v14s21 f2v4s14 36.000000 +f1v14s21 f2v3s13 39.000000 +f1v14s21 f2v2s12 36.000000 +f1v14s21 f2v6s16 35.000000 +f1v14s21 f2v7s17 37.000000 +f1v14s21 f1v3s5 32.000000 +f1v14s21 f2v10s20 37.000000 +f1v14s21 f2v1s11 37.000000 +f1v14s21 f0v1s1 32.000000 +f1v14s21 f2v8s18 36.000000 +f1v14s21 f2v0s10 37.000000 +f1v14s21 f1v2s4 31.000000 +f1v14s21 f2v5s15 34.000000 +f1v14s21 f1v7s9 31.000000 +f1v14s21 f1v5s7 32.000000 +f1v14s21 f1v0s2 32.000000 +f1v14s21 f2v11s21 35.000000 +f1v14s21 f1v4s6 32.000000 +f1v14s21 f1v1s3 32.000000 +f1v14s21 f2v14s24 37.000000 +f0v1s1 f2v9s19 43.000000 +f0v1s1 f2v12s22 43.000000 +f0v1s1 f0v0s0 43.000000 +f0v1s1 f1v6s8 43.000000 +f0v1s1 f2v13s23 42.000000 +f0v1s1 f2v4s14 44.000000 +f0v1s1 f2v3s13 42.000000 +f0v1s1 f2v2s12 44.000000 +f0v1s1 f2v6s16 45.000000 +f0v1s1 f2v7s17 42.000000 +f0v1s1 f1v3s5 39.000000 +f0v1s1 f2v10s20 42.000000 +f0v1s1 f2v1s11 44.000000 +f0v1s1 f0v1s1 43.000000 +f0v1s1 f2v8s18 42.000000 +f0v1s1 f2v0s10 42.000000 +f0v1s1 f1v2s4 43.000000 +f0v1s1 f2v5s15 46.000000 +f0v1s1 f1v7s9 40.000000 +f0v1s1 f1v5s7 37.000000 +f0v1s1 f1v0s2 39.000000 +f0v1s1 f2v11s21 45.000000 +f0v1s1 f1v4s6 40.000000 +f0v1s1 f1v1s3 39.000000 +f0v1s1 f2v14s24 44.000000 +f1v5s12 f2v9s19 41.000000 +f1v5s12 f2v12s22 37.000000 +f1v5s12 f0v0s0 35.000000 +f1v5s12 f1v6s8 35.000000 +f1v5s12 f2v13s23 40.000000 +f1v5s12 f2v4s14 36.000000 +f1v5s12 f2v3s13 40.000000 +f1v5s12 f2v2s12 40.000000 +f1v5s12 f2v6s16 35.000000 +f1v5s12 f2v7s17 40.000000 +f1v5s12 f1v3s5 31.000000 +f1v5s12 f2v10s20 40.000000 +f1v5s12 f2v1s11 41.000000 +f1v5s12 f0v1s1 35.000000 +f1v5s12 f2v8s18 37.000000 +f1v5s12 f2v0s10 40.000000 +f1v5s12 f1v2s4 32.000000 +f1v5s12 f2v5s15 35.000000 +f1v5s12 f1v7s9 31.000000 +f1v5s12 f1v5s7 32.000000 +f1v5s12 f1v0s2 32.000000 +f1v5s12 f2v11s21 35.000000 +f1v5s12 f1v4s6 30.000000 +f1v5s12 f1v1s3 32.000000 +f1v5s12 f2v14s24 36.000000 +f1v4s11 f2v9s19 36.000000 +f1v4s11 f2v12s22 37.000000 +f1v4s11 f0v0s0 33.000000 +f1v4s11 f1v6s8 33.000000 +f1v4s11 f2v13s23 35.000000 +f1v4s11 f2v4s14 35.000000 +f1v4s11 f2v3s13 37.000000 +f1v4s11 f2v2s12 34.000000 +f1v4s11 f2v6s16 33.000000 +f1v4s11 f2v7s17 35.000000 +f1v4s11 f1v3s5 31.000000 +f1v4s11 f2v10s20 35.000000 +f1v4s11 f2v1s11 35.000000 +f1v4s11 f0v1s1 33.000000 +f1v4s11 f2v8s18 35.000000 +f1v4s11 f2v0s10 35.000000 +f1v4s11 f1v2s4 31.000000 +f1v4s11 f2v5s15 33.000000 +f1v4s11 f1v7s9 30.000000 +f1v4s11 f1v5s7 31.000000 +f1v4s11 f1v0s2 31.000000 +f1v4s11 f2v11s21 33.000000 +f1v4s11 f1v4s6 33.000000 +f1v4s11 f1v1s3 31.000000 +f1v4s11 f2v14s24 35.000000 +f1v9s16 f2v9s19 37.000000 +f1v9s16 f2v12s22 37.000000 +f1v9s16 f0v0s0 33.000000 +f1v9s16 f1v6s8 33.000000 +f1v9s16 f2v13s23 36.000000 +f1v9s16 f2v4s14 36.000000 +f1v9s16 f2v3s13 38.000000 +f1v9s16 f2v2s12 35.000000 +f1v9s16 f2v6s16 35.000000 +f1v9s16 f2v7s17 36.000000 +f1v9s16 f1v3s5 32.000000 +f1v9s16 f2v10s20 36.000000 +f1v9s16 f2v1s11 36.000000 +f1v9s16 f0v1s1 33.000000 +f1v9s16 f2v8s18 37.000000 +f1v9s16 f2v0s10 36.000000 +f1v9s16 f1v2s4 32.000000 +f1v9s16 f2v5s15 34.000000 +f1v9s16 f1v7s9 32.000000 +f1v9s16 f1v5s7 33.000000 +f1v9s16 f1v0s2 32.000000 +f1v9s16 f2v11s21 35.000000 +f1v9s16 f1v4s6 34.000000 +f1v9s16 f1v1s3 32.000000 +f1v9s16 f2v14s24 36.000000 +f1v10s17 f2v9s19 40.000000 +f1v10s17 f2v12s22 41.000000 +f1v10s17 f0v0s0 33.000000 +f1v10s17 f1v6s8 33.000000 +f1v10s17 f2v13s23 39.000000 +f1v10s17 f2v4s14 39.000000 +f1v10s17 f2v3s13 49.000000 +f1v10s17 f2v2s12 38.000000 +f1v10s17 f2v6s16 37.000000 +f1v10s17 f2v7s17 39.000000 +f1v10s17 f1v3s5 30.000000 +f1v10s17 f2v10s20 39.000000 +f1v10s17 f2v1s11 39.000000 +f1v10s17 f0v1s1 33.000000 +f1v10s17 f2v8s18 39.000000 +f1v10s17 f2v0s10 39.000000 +f1v10s17 f1v2s4 31.000000 +f1v10s17 f2v5s15 37.000000 +f1v10s17 f1v7s9 29.000000 +f1v10s17 f1v5s7 32.000000 +f1v10s17 f1v0s2 30.000000 +f1v10s17 f2v11s21 37.000000 +f1v10s17 f1v4s6 32.000000 +f1v10s17 f1v1s3 30.000000 +f1v10s17 f2v14s24 39.000000 +f1v0s7 f2v9s19 36.000000 +f1v0s7 f2v12s22 37.000000 +f1v0s7 f0v0s0 33.000000 +f1v0s7 f1v6s8 33.000000 +f1v0s7 f2v13s23 35.000000 +f1v0s7 f2v4s14 35.000000 +f1v0s7 f2v3s13 37.000000 +f1v0s7 f2v2s12 34.000000 +f1v0s7 f2v6s16 33.000000 +f1v0s7 f2v7s17 35.000000 +f1v0s7 f1v3s5 31.000000 +f1v0s7 f2v10s20 35.000000 +f1v0s7 f2v1s11 35.000000 +f1v0s7 f0v1s1 33.000000 +f1v0s7 f2v8s18 35.000000 +f1v0s7 f2v0s10 35.000000 +f1v0s7 f1v2s4 31.000000 +f1v0s7 f2v5s15 33.000000 +f1v0s7 f1v7s9 30.000000 +f1v0s7 f1v5s7 31.000000 +f1v0s7 f1v0s2 31.000000 +f1v0s7 f2v11s21 33.000000 +f1v0s7 f1v4s6 33.000000 +f1v0s7 f1v1s3 31.000000 +f1v0s7 f2v14s24 35.000000 +f3v9s34 f2v9s19 45.000000 +f3v9s34 f2v12s22 43.000000 +f3v9s34 f0v0s0 39.000000 +f3v9s34 f1v6s8 39.000000 +f3v9s34 f2v13s23 44.000000 +f3v9s34 f2v4s14 43.000000 +f3v9s34 f2v3s13 45.000000 +f3v9s34 f2v2s12 44.000000 +f3v9s34 f2v6s16 43.000000 +f3v9s34 f2v7s17 44.000000 +f3v9s34 f1v3s5 40.000000 +f3v9s34 f2v10s20 44.000000 +f3v9s34 f2v1s11 43.000000 +f3v9s34 f0v1s1 39.000000 +f3v9s34 f2v8s18 46.000000 +f3v9s34 f2v0s10 44.000000 +f3v9s34 f1v2s4 44.000000 +f3v9s34 f2v5s15 43.000000 +f3v9s34 f1v7s9 43.000000 +f3v9s34 f1v5s7 42.000000 +f3v9s34 f1v0s2 44.000000 +f3v9s34 f2v11s21 43.000000 +f3v9s34 f1v4s6 42.000000 +f3v9s34 f1v1s3 44.000000 +f3v9s34 f2v14s24 43.000000 +f4v0s40 f2v9s19 39.000000 +f4v0s40 f2v12s22 37.000000 +f4v0s40 f0v0s0 40.000000 +f4v0s40 f1v6s8 40.000000 +f4v0s40 f2v13s23 38.000000 +f4v0s40 f2v4s14 36.000000 +f4v0s40 f2v3s13 41.000000 +f4v0s40 f2v2s12 38.000000 +f4v0s40 f2v6s16 37.000000 +f4v0s40 f2v7s17 38.000000 +f4v0s40 f1v3s5 31.000000 +f4v0s40 f2v10s20 38.000000 +f4v0s40 f2v1s11 39.000000 +f4v0s40 f0v1s1 40.000000 +f4v0s40 f2v8s18 38.000000 +f4v0s40 f2v0s10 38.000000 +f4v0s40 f1v2s4 34.000000 +f4v0s40 f2v5s15 36.000000 +f4v0s40 f1v7s9 35.000000 +f4v0s40 f1v5s7 31.000000 +f4v0s40 f1v0s2 32.000000 +f4v0s40 f2v11s21 37.000000 +f4v0s40 f1v4s6 32.000000 +f4v0s40 f1v1s3 32.000000 +f4v0s40 f2v14s24 37.000000 +f1v7s14 f2v9s19 36.000000 +f1v7s14 f2v12s22 37.000000 +f1v7s14 f0v0s0 33.000000 +f1v7s14 f1v6s8 33.000000 +f1v7s14 f2v13s23 35.000000 +f1v7s14 f2v4s14 35.000000 +f1v7s14 f2v3s13 37.000000 +f1v7s14 f2v2s12 34.000000 +f1v7s14 f2v6s16 33.000000 +f1v7s14 f2v7s17 35.000000 +f1v7s14 f1v3s5 31.000000 +f1v7s14 f2v10s20 35.000000 +f1v7s14 f2v1s11 35.000000 +f1v7s14 f0v1s1 33.000000 +f1v7s14 f2v8s18 35.000000 +f1v7s14 f2v0s10 35.000000 +f1v7s14 f1v2s4 31.000000 +f1v7s14 f2v5s15 33.000000 +f1v7s14 f1v7s9 30.000000 +f1v7s14 f1v5s7 31.000000 +f1v7s14 f1v0s2 31.000000 +f1v7s14 f2v11s21 33.000000 +f1v7s14 f1v4s6 33.000000 +f1v7s14 f1v1s3 31.000000 +f1v7s14 f2v14s24 35.000000 +f3v2s27 f2v9s19 46.000000 +f3v2s27 f2v12s22 49.000000 +f3v2s27 f0v0s0 40.000000 +f3v2s27 f1v6s8 40.000000 +f3v2s27 f2v13s23 45.000000 +f3v2s27 f2v4s14 43.000000 +f3v2s27 f2v3s13 46.000000 +f3v2s27 f2v2s12 44.000000 +f3v2s27 f2v6s16 42.000000 +f3v2s27 f2v7s17 45.000000 +f3v2s27 f1v3s5 40.000000 +f3v2s27 f2v10s20 45.000000 +f3v2s27 f2v1s11 42.000000 +f3v2s27 f0v1s1 40.000000 +f3v2s27 f2v8s18 46.000000 +f3v2s27 f2v0s10 45.000000 +f3v2s27 f1v2s4 40.000000 +f3v2s27 f2v5s15 40.000000 +f3v2s27 f1v7s9 39.000000 +f3v2s27 f1v5s7 39.000000 +f3v2s27 f1v0s2 40.000000 +f3v2s27 f2v11s21 42.000000 +f3v2s27 f1v4s6 39.000000 +f3v2s27 f1v1s3 40.000000 +f3v2s27 f2v14s24 41.000000 +f4v1s41 f2v9s19 39.000000 +f4v1s41 f2v12s22 37.000000 +f4v1s41 f0v0s0 40.000000 +f4v1s41 f1v6s8 40.000000 +f4v1s41 f2v13s23 38.000000 +f4v1s41 f2v4s14 35.000000 +f4v1s41 f2v3s13 41.000000 +f4v1s41 f2v2s12 38.000000 +f4v1s41 f2v6s16 38.000000 +f4v1s41 f2v7s17 38.000000 +f4v1s41 f1v3s5 31.000000 +f4v1s41 f2v10s20 38.000000 +f4v1s41 f2v1s11 39.000000 +f4v1s41 f0v1s1 40.000000 +f4v1s41 f2v8s18 38.000000 +f4v1s41 f2v0s10 38.000000 +f4v1s41 f1v2s4 34.000000 +f4v1s41 f2v5s15 36.000000 +f4v1s41 f1v7s9 36.000000 +f4v1s41 f1v5s7 31.000000 +f4v1s41 f1v0s2 32.000000 +f4v1s41 f2v11s21 38.000000 +f4v1s41 f1v4s6 32.000000 +f4v1s41 f1v1s3 32.000000 +f4v1s41 f2v14s24 37.000000 +f2v0s22 f2v9s19 40.000000 +f2v0s22 f2v12s22 39.000000 +f2v0s22 f0v0s0 44.000000 +f2v0s22 f1v6s8 44.000000 +f2v0s22 f2v13s23 39.000000 +f2v0s22 f2v4s14 42.000000 +f2v0s22 f2v3s13 39.000000 +f2v0s22 f2v2s12 38.000000 +f2v0s22 f2v6s16 39.000000 +f2v0s22 f2v7s17 39.000000 +f2v0s22 f1v3s5 38.000000 +f2v0s22 f2v10s20 39.000000 +f2v0s22 f2v1s11 38.000000 +f2v0s22 f0v1s1 44.000000 +f2v0s22 f2v8s18 40.000000 +f2v0s22 f2v0s10 39.000000 +f2v0s22 f1v2s4 44.000000 +f2v0s22 f2v5s15 44.000000 +f2v0s22 f1v7s9 46.000000 +f2v0s22 f1v5s7 44.000000 +f2v0s22 f1v0s2 45.000000 +f2v0s22 f2v11s21 39.000000 +f2v0s22 f1v4s6 47.000000 +f2v0s22 f1v1s3 45.000000 +f2v0s22 f2v14s24 46.000000 +f1v2s9 f2v9s19 43.000000 +f1v2s9 f2v12s22 43.000000 +f1v2s9 f0v0s0 43.000000 +f1v2s9 f1v6s8 43.000000 +f1v2s9 f2v13s23 42.000000 +f1v2s9 f2v4s14 44.000000 +f1v2s9 f2v3s13 42.000000 +f1v2s9 f2v2s12 44.000000 +f1v2s9 f2v6s16 45.000000 +f1v2s9 f2v7s17 42.000000 +f1v2s9 f1v3s5 39.000000 +f1v2s9 f2v10s20 42.000000 +f1v2s9 f2v1s11 44.000000 +f1v2s9 f0v1s1 43.000000 +f1v2s9 f2v8s18 42.000000 +f1v2s9 f2v0s10 42.000000 +f1v2s9 f1v2s4 43.000000 +f1v2s9 f2v5s15 46.000000 +f1v2s9 f1v7s9 40.000000 +f1v2s9 f1v5s7 37.000000 +f1v2s9 f1v0s2 39.000000 +f1v2s9 f2v11s21 45.000000 +f1v2s9 f1v4s6 40.000000 +f1v2s9 f1v1s3 39.000000 +f1v2s9 f2v14s24 44.000000 +f1v3s10 f2v9s19 36.000000 +f1v3s10 f2v12s22 37.000000 +f1v3s10 f0v0s0 33.000000 +f1v3s10 f1v6s8 33.000000 +f1v3s10 f2v13s23 35.000000 +f1v3s10 f2v4s14 35.000000 +f1v3s10 f2v3s13 37.000000 +f1v3s10 f2v2s12 34.000000 +f1v3s10 f2v6s16 33.000000 +f1v3s10 f2v7s17 35.000000 +f1v3s10 f1v3s5 31.000000 +f1v3s10 f2v10s20 35.000000 +f1v3s10 f2v1s11 35.000000 +f1v3s10 f0v1s1 33.000000 +f1v3s10 f2v8s18 35.000000 +f1v3s10 f2v0s10 35.000000 +f1v3s10 f1v2s4 31.000000 +f1v3s10 f2v5s15 33.000000 +f1v3s10 f1v7s9 30.000000 +f1v3s10 f1v5s7 31.000000 +f1v3s10 f1v0s2 31.000000 +f1v3s10 f2v11s21 33.000000 +f1v3s10 f1v4s6 33.000000 +f1v3s10 f1v1s3 31.000000 +f1v3s10 f2v14s24 35.000000 +f3v0s25 f2v9s19 46.000000 +f3v0s25 f2v12s22 50.000000 +f3v0s25 f0v0s0 40.000000 +f3v0s25 f1v6s8 40.000000 +f3v0s25 f2v13s23 45.000000 +f3v0s25 f2v4s14 44.000000 +f3v0s25 f2v3s13 46.000000 +f3v0s25 f2v2s12 45.000000 +f3v0s25 f2v6s16 43.000000 +f3v0s25 f2v7s17 45.000000 +f3v0s25 f1v3s5 41.000000 +f3v0s25 f2v10s20 45.000000 +f3v0s25 f2v1s11 42.000000 +f3v0s25 f0v1s1 40.000000 +f3v0s25 f2v8s18 47.000000 +f3v0s25 f2v0s10 45.000000 +f3v0s25 f1v2s4 40.000000 +f3v0s25 f2v5s15 41.000000 +f3v0s25 f1v7s9 40.000000 +f3v0s25 f1v5s7 39.000000 +f3v0s25 f1v0s2 40.000000 +f3v0s25 f2v11s21 43.000000 +f3v0s25 f1v4s6 39.000000 +f3v0s25 f1v1s3 40.000000 +f3v0s25 f2v14s24 42.000000 +f3v3s28 f2v9s19 43.000000 +f3v3s28 f2v12s22 47.000000 +f3v3s28 f0v0s0 40.000000 +f3v3s28 f1v6s8 40.000000 +f3v3s28 f2v13s23 42.000000 +f3v3s28 f2v4s14 46.000000 +f3v3s28 f2v3s13 44.000000 +f3v3s28 f2v2s12 41.000000 +f3v3s28 f2v6s16 42.000000 +f3v3s28 f2v7s17 42.000000 +f3v3s28 f1v3s5 41.000000 +f3v3s28 f2v10s20 42.000000 +f3v3s28 f2v1s11 42.000000 +f3v3s28 f0v1s1 40.000000 +f3v3s28 f2v8s18 48.000000 +f3v3s28 f2v0s10 42.000000 +f3v3s28 f1v2s4 40.000000 +f3v3s28 f2v5s15 46.000000 +f3v3s28 f1v7s9 37.000000 +f3v3s28 f1v5s7 39.000000 +f3v3s28 f1v0s2 40.000000 +f3v3s28 f2v11s21 42.000000 +f3v3s28 f1v4s6 38.000000 +f3v3s28 f1v1s3 40.000000 +f3v3s28 f2v14s24 41.000000 +f3v13s38 f2v9s19 49.000000 +f3v13s38 f2v12s22 47.000000 +f3v13s38 f0v0s0 40.000000 +f3v13s38 f1v6s8 40.000000 +f3v13s38 f2v13s23 48.000000 +f3v13s38 f2v4s14 46.000000 +f3v13s38 f2v3s13 48.000000 +f3v13s38 f2v2s12 48.000000 +f3v13s38 f2v6s16 43.000000 +f3v13s38 f2v7s17 48.000000 +f3v13s38 f1v3s5 41.000000 +f3v13s38 f2v10s20 48.000000 +f3v13s38 f2v1s11 43.000000 +f3v13s38 f0v1s1 40.000000 +f3v13s38 f2v8s18 49.000000 +f3v13s38 f2v0s10 48.000000 +f3v13s38 f1v2s4 41.000000 +f3v13s38 f2v5s15 42.000000 +f3v13s38 f1v7s9 40.000000 +f3v13s38 f1v5s7 40.000000 +f3v13s38 f1v0s2 41.000000 +f3v13s38 f2v11s21 43.000000 +f3v13s38 f1v4s6 39.000000 +f3v13s38 f1v1s3 41.000000 +f3v13s38 f2v14s24 42.000000 +f3v7s32 f2v9s19 45.000000 +f3v7s32 f2v12s22 43.000000 +f3v7s32 f0v0s0 39.000000 +f3v7s32 f1v6s8 39.000000 +f3v7s32 f2v13s23 44.000000 +f3v7s32 f2v4s14 43.000000 +f3v7s32 f2v3s13 45.000000 +f3v7s32 f2v2s12 44.000000 +f3v7s32 f2v6s16 43.000000 +f3v7s32 f2v7s17 44.000000 +f3v7s32 f1v3s5 40.000000 +f3v7s32 f2v10s20 44.000000 +f3v7s32 f2v1s11 43.000000 +f3v7s32 f0v1s1 39.000000 +f3v7s32 f2v8s18 46.000000 +f3v7s32 f2v0s10 44.000000 +f3v7s32 f1v2s4 44.000000 +f3v7s32 f2v5s15 43.000000 +f3v7s32 f1v7s9 43.000000 +f3v7s32 f1v5s7 42.000000 +f3v7s32 f1v0s2 44.000000 +f3v7s32 f2v11s21 43.000000 +f3v7s32 f1v4s6 42.000000 +f3v7s32 f1v1s3 44.000000 +f3v7s32 f2v14s24 43.000000 +f3v1s26 f2v9s19 43.000000 +f3v1s26 f2v12s22 48.000000 +f3v1s26 f0v0s0 41.000000 +f3v1s26 f1v6s8 41.000000 +f3v1s26 f2v13s23 42.000000 +f3v1s26 f2v4s14 44.000000 +f3v1s26 f2v3s13 45.000000 +f3v1s26 f2v2s12 41.000000 +f3v1s26 f2v6s16 42.000000 +f3v1s26 f2v7s17 42.000000 +f3v1s26 f1v3s5 40.000000 +f3v1s26 f2v10s20 42.000000 +f3v1s26 f2v1s11 41.000000 +f3v1s26 f0v1s1 41.000000 +f3v1s26 f2v8s18 47.000000 +f3v1s26 f2v0s10 42.000000 +f3v1s26 f1v2s4 39.000000 +f3v1s26 f2v5s15 41.000000 +f3v1s26 f1v7s9 39.000000 +f3v1s26 f1v5s7 39.000000 +f3v1s26 f1v0s2 40.000000 +f3v1s26 f2v11s21 42.000000 +f3v1s26 f1v4s6 39.000000 +f3v1s26 f1v1s3 40.000000 +f3v1s26 f2v14s24 41.000000 +f3v6s31 f2v9s19 45.000000 +f3v6s31 f2v12s22 43.000000 +f3v6s31 f0v0s0 39.000000 +f3v6s31 f1v6s8 39.000000 +f3v6s31 f2v13s23 44.000000 +f3v6s31 f2v4s14 43.000000 +f3v6s31 f2v3s13 45.000000 +f3v6s31 f2v2s12 44.000000 +f3v6s31 f2v6s16 43.000000 +f3v6s31 f2v7s17 44.000000 +f3v6s31 f1v3s5 40.000000 +f3v6s31 f2v10s20 44.000000 +f3v6s31 f2v1s11 43.000000 +f3v6s31 f0v1s1 39.000000 +f3v6s31 f2v8s18 46.000000 +f3v6s31 f2v0s10 44.000000 +f3v6s31 f1v2s4 44.000000 +f3v6s31 f2v5s15 43.000000 +f3v6s31 f1v7s9 43.000000 +f3v6s31 f1v5s7 42.000000 +f3v6s31 f1v0s2 44.000000 +f3v6s31 f2v11s21 43.000000 +f3v6s31 f1v4s6 42.000000 +f3v6s31 f1v1s3 44.000000 +f3v6s31 f2v14s24 43.000000 +f1v13s20 f2v9s19 33.000000 +f1v13s20 f2v12s22 34.000000 +f1v13s20 f0v0s0 34.000000 +f1v13s20 f1v6s8 34.000000 +f1v13s20 f2v13s23 32.000000 +f1v13s20 f2v4s14 32.000000 +f1v13s20 f2v3s13 35.000000 +f1v13s20 f2v2s12 31.000000 +f1v13s20 f2v6s16 31.000000 +f1v13s20 f2v7s17 32.000000 +f1v13s20 f1v3s5 30.000000 +f1v13s20 f2v10s20 32.000000 +f1v13s20 f2v1s11 33.000000 +f1v13s20 f0v1s1 34.000000 +f1v13s20 f2v8s18 33.000000 +f1v13s20 f2v0s10 32.000000 +f1v13s20 f1v2s4 30.000000 +f1v13s20 f2v5s15 31.000000 +f1v13s20 f1v7s9 29.000000 +f1v13s20 f1v5s7 30.000000 +f1v13s20 f1v0s2 30.000000 +f1v13s20 f2v11s21 31.000000 +f1v13s20 f1v4s6 32.000000 +f1v13s20 f1v1s3 30.000000 +f1v13s20 f2v14s24 33.000000 +f2v2s24 f2v9s19 35.000000 +f2v2s24 f2v12s22 34.000000 +f2v2s24 f0v0s0 37.000000 +f2v2s24 f1v6s8 37.000000 +f2v2s24 f2v13s23 34.000000 +f2v2s24 f2v4s14 31.000000 +f2v2s24 f2v3s13 35.000000 +f2v2s24 f2v2s12 33.000000 +f2v2s24 f2v6s16 32.000000 +f2v2s24 f2v7s17 34.000000 +f2v2s24 f1v3s5 29.000000 +f2v2s24 f2v10s20 34.000000 +f2v2s24 f2v1s11 33.000000 +f2v2s24 f0v1s1 37.000000 +f2v2s24 f2v8s18 33.000000 +f2v2s24 f2v0s10 34.000000 +f2v2s24 f1v2s4 29.000000 +f2v2s24 f2v5s15 31.000000 +f2v2s24 f1v7s9 29.000000 +f2v2s24 f1v5s7 27.000000 +f2v2s24 f1v0s2 28.000000 +f2v2s24 f2v11s21 32.000000 +f2v2s24 f1v4s6 30.000000 +f2v2s24 f1v1s3 28.000000 +f2v2s24 f2v14s24 33.000000 +f3v11s36 f2v9s19 47.000000 +f3v11s36 f2v12s22 46.000000 +f3v11s36 f0v0s0 39.000000 +f3v11s36 f1v6s8 39.000000 +f3v11s36 f2v13s23 46.000000 +f3v11s36 f2v4s14 44.000000 +f3v11s36 f2v3s13 47.000000 +f3v11s36 f2v2s12 45.000000 +f3v11s36 f2v6s16 41.000000 +f3v11s36 f2v7s17 46.000000 +f3v11s36 f1v3s5 39.000000 +f3v11s36 f2v10s20 46.000000 +f3v11s36 f2v1s11 47.000000 +f3v11s36 f0v1s1 39.000000 +f3v11s36 f2v8s18 45.000000 +f3v11s36 f2v0s10 46.000000 +f3v11s36 f1v2s4 40.000000 +f3v11s36 f2v5s15 41.000000 +f3v11s36 f1v7s9 38.000000 +f3v11s36 f1v5s7 39.000000 +f3v11s36 f1v0s2 40.000000 +f3v11s36 f2v11s21 41.000000 +f3v11s36 f1v4s6 39.000000 +f3v11s36 f1v1s3 40.000000 +f3v11s36 f2v14s24 43.000000 +f0v5s5 f2v9s19 41.000000 +f0v5s5 f2v12s22 40.000000 +f0v5s5 f0v0s0 44.000000 +f0v5s5 f1v6s8 44.000000 +f0v5s5 f2v13s23 40.000000 +f0v5s5 f2v4s14 42.000000 +f0v5s5 f2v3s13 41.000000 +f0v5s5 f2v2s12 39.000000 +f0v5s5 f2v6s16 40.000000 +f0v5s5 f2v7s17 40.000000 +f0v5s5 f1v3s5 40.000000 +f0v5s5 f2v10s20 40.000000 +f0v5s5 f2v1s11 39.000000 +f0v5s5 f0v1s1 44.000000 +f0v5s5 f2v8s18 41.000000 +f0v5s5 f2v0s10 40.000000 +f0v5s5 f1v2s4 43.000000 +f0v5s5 f2v5s15 44.000000 +f0v5s5 f1v7s9 45.000000 +f0v5s5 f1v5s7 43.000000 +f0v5s5 f1v0s2 44.000000 +f0v5s5 f2v11s21 40.000000 +f0v5s5 f1v4s6 46.000000 +f0v5s5 f1v1s3 44.000000 +f0v5s5 f2v14s24 49.000000 +f1v11s18 f2v9s19 36.000000 +f1v11s18 f2v12s22 37.000000 +f1v11s18 f0v0s0 33.000000 +f1v11s18 f1v6s8 33.000000 +f1v11s18 f2v13s23 35.000000 +f1v11s18 f2v4s14 35.000000 +f1v11s18 f2v3s13 37.000000 +f1v11s18 f2v2s12 34.000000 +f1v11s18 f2v6s16 34.000000 +f1v11s18 f2v7s17 35.000000 +f1v11s18 f1v3s5 30.000000 +f1v11s18 f2v10s20 35.000000 +f1v11s18 f2v1s11 35.000000 +f1v11s18 f0v1s1 33.000000 +f1v11s18 f2v8s18 35.000000 +f1v11s18 f2v0s10 35.000000 +f1v11s18 f1v2s4 31.000000 +f1v11s18 f2v5s15 33.000000 +f1v11s18 f1v7s9 29.000000 +f1v11s18 f1v5s7 30.000000 +f1v11s18 f1v0s2 30.000000 +f1v11s18 f2v11s21 34.000000 +f1v11s18 f1v4s6 32.000000 +f1v11s18 f1v1s3 30.000000 +f1v11s18 f2v14s24 36.000000 +f0v6s6 f2v9s19 38.000000 +f0v6s6 f2v12s22 42.000000 +f0v6s6 f0v0s0 39.000000 +f0v6s6 f1v6s8 39.000000 +f0v6s6 f2v13s23 37.000000 +f0v6s6 f2v4s14 42.000000 +f0v6s6 f2v3s13 47.000000 +f0v6s6 f2v2s12 45.000000 +f0v6s6 f2v6s16 42.000000 +f0v6s6 f2v7s17 37.000000 +f0v6s6 f1v3s5 40.000000 +f0v6s6 f2v10s20 37.000000 +f0v6s6 f2v1s11 36.000000 +f0v6s6 f0v1s1 39.000000 +f0v6s6 f2v8s18 38.000000 +f0v6s6 f2v0s10 37.000000 +f0v6s6 f1v2s4 41.000000 +f0v6s6 f2v5s15 44.000000 +f0v6s6 f1v7s9 46.000000 +f0v6s6 f1v5s7 40.000000 +f0v6s6 f1v0s2 41.000000 +f0v6s6 f2v11s21 42.000000 +f0v6s6 f1v4s6 40.000000 +f0v6s6 f1v1s3 41.000000 +f0v6s6 f2v14s24 45.000000 +f3v4s29 f2v9s19 47.000000 +f3v4s29 f2v12s22 52.000000 +f3v4s29 f0v0s0 39.000000 +f3v4s29 f1v6s8 39.000000 +f3v4s29 f2v13s23 46.000000 +f3v4s29 f2v4s14 45.000000 +f3v4s29 f2v3s13 46.000000 +f3v4s29 f2v2s12 46.000000 +f3v4s29 f2v6s16 45.000000 +f3v4s29 f2v7s17 46.000000 +f3v4s29 f1v3s5 43.000000 +f3v4s29 f2v10s20 46.000000 +f3v4s29 f2v1s11 43.000000 +f3v4s29 f0v1s1 39.000000 +f3v4s29 f2v8s18 47.000000 +f3v4s29 f2v0s10 46.000000 +f3v4s29 f1v2s4 40.000000 +f3v4s29 f2v5s15 42.000000 +f3v4s29 f1v7s9 42.000000 +f3v4s29 f1v5s7 39.000000 +f3v4s29 f1v0s2 39.000000 +f3v4s29 f2v11s21 45.000000 +f3v4s29 f1v4s6 41.000000 +f3v4s29 f1v1s3 39.000000 +f3v4s29 f2v14s24 43.000000 +f0v2s2 f2v9s19 40.000000 +f0v2s2 f2v12s22 39.000000 +f0v2s2 f0v0s0 44.000000 +f0v2s2 f1v6s8 44.000000 +f0v2s2 f2v13s23 39.000000 +f0v2s2 f2v4s14 42.000000 +f0v2s2 f2v3s13 39.000000 +f0v2s2 f2v2s12 38.000000 +f0v2s2 f2v6s16 39.000000 +f0v2s2 f2v7s17 39.000000 +f0v2s2 f1v3s5 38.000000 +f0v2s2 f2v10s20 39.000000 +f0v2s2 f2v1s11 38.000000 +f0v2s2 f0v1s1 44.000000 +f0v2s2 f2v8s18 40.000000 +f0v2s2 f2v0s10 39.000000 +f0v2s2 f1v2s4 44.000000 +f0v2s2 f2v5s15 44.000000 +f0v2s2 f1v7s9 46.000000 +f0v2s2 f1v5s7 44.000000 +f0v2s2 f1v0s2 45.000000 +f0v2s2 f2v11s21 39.000000 +f0v2s2 f1v4s6 47.000000 +f0v2s2 f1v1s3 45.000000 +f0v2s2 f2v14s24 46.000000 +f3v12s37 f2v9s19 46.000000 +f3v12s37 f2v12s22 45.000000 +f3v12s37 f0v0s0 40.000000 +f3v12s37 f1v6s8 40.000000 +f3v12s37 f2v13s23 45.000000 +f3v12s37 f2v4s14 43.000000 +f3v12s37 f2v3s13 46.000000 +f3v12s37 f2v2s12 44.000000 +f3v12s37 f2v6s16 44.000000 +f3v12s37 f2v7s17 45.000000 +f3v12s37 f1v3s5 42.000000 +f3v12s37 f2v10s20 45.000000 +f3v12s37 f2v1s11 46.000000 +f3v12s37 f0v1s1 40.000000 +f3v12s37 f2v8s18 46.000000 +f3v12s37 f2v0s10 45.000000 +f3v12s37 f1v2s4 45.000000 +f3v12s37 f2v5s15 45.000000 +f3v12s37 f1v7s9 44.000000 +f3v12s37 f1v5s7 43.000000 +f3v12s37 f1v0s2 45.000000 +f3v12s37 f2v11s21 44.000000 +f3v12s37 f1v4s6 47.000000 +f3v12s37 f1v1s3 45.000000 +f3v12s37 f2v14s24 45.000000 +f0v3s3 f2v9s19 39.000000 +f0v3s3 f2v12s22 38.000000 +f0v3s3 f0v0s0 43.000000 +f0v3s3 f1v6s8 43.000000 +f0v3s3 f2v13s23 38.000000 +f0v3s3 f2v4s14 48.000000 +f0v3s3 f2v3s13 38.000000 +f0v3s3 f2v2s12 38.000000 +f0v3s3 f2v6s16 38.000000 +f0v3s3 f2v7s17 38.000000 +f0v3s3 f1v3s5 37.000000 +f0v3s3 f2v10s20 38.000000 +f0v3s3 f2v1s11 38.000000 +f0v3s3 f0v1s1 43.000000 +f0v3s3 f2v8s18 39.000000 +f0v3s3 f2v0s10 38.000000 +f0v3s3 f1v2s4 41.000000 +f0v3s3 f2v5s15 44.000000 +f0v3s3 f1v7s9 44.000000 +f0v3s3 f1v5s7 43.000000 +f0v3s3 f1v0s2 43.000000 +f0v3s3 f2v11s21 38.000000 +f0v3s3 f1v4s6 45.000000 +f0v3s3 f1v1s3 43.000000 +f0v3s3 f2v14s24 45.000000 +f3v14s39 f2v9s19 46.000000 +f3v14s39 f2v12s22 50.000000 +f3v14s39 f0v0s0 40.000000 +f3v14s39 f1v6s8 40.000000 +f3v14s39 f2v13s23 45.000000 +f3v14s39 f2v4s14 44.000000 +f3v14s39 f2v3s13 46.000000 +f3v14s39 f2v2s12 45.000000 +f3v14s39 f2v6s16 43.000000 +f3v14s39 f2v7s17 45.000000 +f3v14s39 f1v3s5 41.000000 +f3v14s39 f2v10s20 45.000000 +f3v14s39 f2v1s11 42.000000 +f3v14s39 f0v1s1 40.000000 +f3v14s39 f2v8s18 47.000000 +f3v14s39 f2v0s10 45.000000 +f3v14s39 f1v2s4 40.000000 +f3v14s39 f2v5s15 41.000000 +f3v14s39 f1v7s9 40.000000 +f3v14s39 f1v5s7 39.000000 +f3v14s39 f1v0s2 40.000000 +f3v14s39 f2v11s21 43.000000 +f3v14s39 f1v4s6 39.000000 +f3v14s39 f1v1s3 40.000000 +f3v14s39 f2v14s24 42.000000 +f0v0s0 f2v9s19 41.000000 +f0v0s0 f2v12s22 40.000000 +f0v0s0 f0v0s0 43.000000 +f0v0s0 f1v6s8 43.000000 +f0v0s0 f2v13s23 40.000000 +f0v0s0 f2v4s14 42.000000 +f0v0s0 f2v3s13 39.000000 +f0v0s0 f2v2s12 48.000000 +f0v0s0 f2v6s16 47.000000 +f0v0s0 f2v7s17 40.000000 +f0v0s0 f1v3s5 39.000000 +f0v0s0 f2v10s20 40.000000 +f0v0s0 f2v1s11 47.000000 +f0v0s0 f0v1s1 43.000000 +f0v0s0 f2v8s18 41.000000 +f0v0s0 f2v0s10 40.000000 +f0v0s0 f1v2s4 43.000000 +f0v0s0 f2v5s15 46.000000 +f0v0s0 f1v7s9 45.000000 +f0v0s0 f1v5s7 43.000000 +f0v0s0 f1v0s2 44.000000 +f0v0s0 f2v11s21 47.000000 +f0v0s0 f1v4s6 46.000000 +f0v0s0 f1v1s3 44.000000 +f0v0s0 f2v14s24 45.000000 +f1v12s19 f2v9s19 36.000000 +f1v12s19 f2v12s22 37.000000 +f1v12s19 f0v0s0 33.000000 +f1v12s19 f1v6s8 33.000000 +f1v12s19 f2v13s23 35.000000 +f1v12s19 f2v4s14 35.000000 +f1v12s19 f2v3s13 37.000000 +f1v12s19 f2v2s12 34.000000 +f1v12s19 f2v6s16 33.000000 +f1v12s19 f2v7s17 35.000000 +f1v12s19 f1v3s5 32.000000 +f1v12s19 f2v10s20 35.000000 +f1v12s19 f2v1s11 35.000000 +f1v12s19 f0v1s1 33.000000 +f1v12s19 f2v8s18 35.000000 +f1v12s19 f2v0s10 35.000000 +f1v12s19 f1v2s4 31.000000 +f1v12s19 f2v5s15 33.000000 +f1v12s19 f1v7s9 31.000000 +f1v12s19 f1v5s7 33.000000 +f1v12s19 f1v0s2 32.000000 +f1v12s19 f2v11s21 33.000000 +f1v12s19 f1v4s6 34.000000 +f1v12s19 f1v1s3 32.000000 +f1v12s19 f2v14s24 35.000000 diff --git a/pkg/obitools/obialign/testdata/two_allraw.expected b/pkg/obitools/obialign/testdata/two_allraw.expected new file mode 100644 index 0000000..91d197b --- /dev/null +++ b/pkg/obitools/obialign/testdata/two_allraw.expected @@ -0,0 +1,1075 @@ +f3v10s35 f2v9s19 40.000000 +f3v10s35 f2v12s22 40.000000 +f3v10s35 f0v0s0 39.000000 +f3v10s35 f1v6s8 39.000000 +f3v10s35 f2v13s23 39.000000 +f3v10s35 f2v4s14 38.000000 +f3v10s35 f2v3s13 39.000000 +f3v10s35 f2v2s12 39.000000 +f3v10s35 f2v6s16 40.000000 +f3v10s35 f2v7s17 39.000000 +f3v10s35 f1v3s5 32.000000 +f3v10s35 f2v10s20 39.000000 +f3v10s35 f2v1s11 40.000000 +f3v10s35 f0v1s1 39.000000 +f3v10s35 f2v8s18 39.000000 +f3v10s35 f2v0s10 39.000000 +f3v10s35 f1v2s4 31.000000 +f3v10s35 f2v5s15 38.000000 +f3v10s35 f1v7s9 32.000000 +f3v10s35 f1v5s7 32.000000 +f3v10s35 f1v0s2 32.000000 +f3v10s35 f2v11s21 40.000000 +f3v10s35 f1v4s6 33.000000 +f3v10s35 f1v1s3 32.000000 +f3v10s35 f2v14s24 40.000000 +f3v5s30 f2v9s19 38.000000 +f3v5s30 f2v12s22 38.000000 +f3v5s30 f0v0s0 38.000000 +f3v5s30 f1v6s8 38.000000 +f3v5s30 f2v13s23 37.000000 +f3v5s30 f2v4s14 36.000000 +f3v5s30 f2v3s13 37.000000 +f3v5s30 f2v2s12 37.000000 +f3v5s30 f2v6s16 38.000000 +f3v5s30 f2v7s17 37.000000 +f3v5s30 f1v3s5 31.000000 +f3v5s30 f2v10s20 37.000000 +f3v5s30 f2v1s11 37.000000 +f3v5s30 f0v1s1 38.000000 +f3v5s30 f2v8s18 36.000000 +f3v5s30 f2v0s10 37.000000 +f3v5s30 f1v2s4 32.000000 +f3v5s30 f2v5s15 37.000000 +f3v5s30 f1v7s9 32.000000 +f3v5s30 f1v5s7 31.000000 +f3v5s30 f1v0s2 32.000000 +f3v5s30 f2v11s21 38.000000 +f3v5s30 f1v4s6 32.000000 +f3v5s30 f1v1s3 32.000000 +f3v5s30 f2v14s24 37.000000 +f1v8s15 f2v9s19 38.000000 +f1v8s15 f2v12s22 38.000000 +f1v8s15 f0v0s0 39.000000 +f1v8s15 f1v6s8 39.000000 +f1v8s15 f2v13s23 38.000000 +f1v8s15 f2v4s14 37.000000 +f1v8s15 f2v3s13 37.000000 +f1v8s15 f2v2s12 38.000000 +f1v8s15 f2v6s16 39.000000 +f1v8s15 f2v7s17 38.000000 +f1v8s15 f1v3s5 33.000000 +f1v8s15 f2v10s20 38.000000 +f1v8s15 f2v1s11 38.000000 +f1v8s15 f0v1s1 39.000000 +f1v8s15 f2v8s18 38.000000 +f1v8s15 f2v0s10 38.000000 +f1v8s15 f1v2s4 33.000000 +f1v8s15 f2v5s15 39.000000 +f1v8s15 f1v7s9 35.000000 +f1v8s15 f1v5s7 33.000000 +f1v8s15 f1v0s2 34.000000 +f1v8s15 f2v11s21 39.000000 +f1v8s15 f1v4s6 34.000000 +f1v8s15 f1v1s3 34.000000 +f1v8s15 f2v14s24 38.000000 +f2v1s23 f2v9s19 39.000000 +f2v1s23 f2v12s22 39.000000 +f2v1s23 f0v0s0 40.000000 +f2v1s23 f1v6s8 40.000000 +f2v1s23 f2v13s23 39.000000 +f2v1s23 f2v4s14 38.000000 +f2v1s23 f2v3s13 38.000000 +f2v1s23 f2v2s12 39.000000 +f2v1s23 f2v6s16 40.000000 +f2v1s23 f2v7s17 39.000000 +f2v1s23 f1v3s5 34.000000 +f2v1s23 f2v10s20 39.000000 +f2v1s23 f2v1s11 38.000000 +f2v1s23 f0v1s1 40.000000 +f2v1s23 f2v8s18 38.000000 +f2v1s23 f2v0s10 39.000000 +f2v1s23 f1v2s4 34.000000 +f2v1s23 f2v5s15 40.000000 +f2v1s23 f1v7s9 36.000000 +f2v1s23 f1v5s7 34.000000 +f2v1s23 f1v0s2 35.000000 +f2v1s23 f2v11s21 40.000000 +f2v1s23 f1v4s6 35.000000 +f2v1s23 f1v1s3 35.000000 +f2v1s23 f2v14s24 39.000000 +f4v2s42 f2v9s19 40.000000 +f4v2s42 f2v12s22 40.000000 +f4v2s42 f0v0s0 43.000000 +f4v2s42 f1v6s8 43.000000 +f4v2s42 f2v13s23 40.000000 +f4v2s42 f2v4s14 39.000000 +f4v2s42 f2v3s13 39.000000 +f4v2s42 f2v2s12 39.000000 +f4v2s42 f2v6s16 39.000000 +f4v2s42 f2v7s17 40.000000 +f4v2s42 f1v3s5 35.000000 +f4v2s42 f2v10s20 40.000000 +f4v2s42 f2v1s11 39.000000 +f4v2s42 f0v1s1 43.000000 +f4v2s42 f2v8s18 38.000000 +f4v2s42 f2v0s10 40.000000 +f4v2s42 f1v2s4 33.000000 +f4v2s42 f2v5s15 39.000000 +f4v2s42 f1v7s9 33.000000 +f4v2s42 f1v5s7 35.000000 +f4v2s42 f1v0s2 35.000000 +f4v2s42 f2v11s21 39.000000 +f4v2s42 f1v4s6 36.000000 +f4v2s42 f1v1s3 35.000000 +f4v2s42 f2v14s24 41.000000 +f0v4s4 f2v9s19 40.000000 +f0v4s4 f2v12s22 40.000000 +f0v4s4 f0v0s0 44.000000 +f0v4s4 f1v6s8 44.000000 +f0v4s4 f2v13s23 40.000000 +f0v4s4 f2v4s14 39.000000 +f0v4s4 f2v3s13 40.000000 +f0v4s4 f2v2s12 40.000000 +f0v4s4 f2v6s16 40.000000 +f0v4s4 f2v7s17 40.000000 +f0v4s4 f1v3s5 34.000000 +f0v4s4 f2v10s20 40.000000 +f0v4s4 f2v1s11 41.000000 +f0v4s4 f0v1s1 44.000000 +f0v4s4 f2v8s18 39.000000 +f0v4s4 f2v0s10 40.000000 +f0v4s4 f1v2s4 34.000000 +f0v4s4 f2v5s15 39.000000 +f0v4s4 f1v7s9 34.000000 +f0v4s4 f1v5s7 35.000000 +f0v4s4 f1v0s2 35.000000 +f0v4s4 f2v11s21 40.000000 +f0v4s4 f1v4s6 35.000000 +f0v4s4 f1v1s3 35.000000 +f0v4s4 f2v14s24 41.000000 +f1v6s13 f2v9s19 35.000000 +f1v6s13 f2v12s22 35.000000 +f1v6s13 f0v0s0 39.000000 +f1v6s13 f1v6s8 39.000000 +f1v6s13 f2v13s23 35.000000 +f1v6s13 f2v4s14 34.000000 +f1v6s13 f2v3s13 34.000000 +f1v6s13 f2v2s12 35.000000 +f1v6s13 f2v6s16 37.000000 +f1v6s13 f2v7s17 35.000000 +f1v6s13 f1v3s5 34.000000 +f1v6s13 f2v10s20 35.000000 +f1v6s13 f2v1s11 35.000000 +f1v6s13 f0v1s1 39.000000 +f1v6s13 f2v8s18 35.000000 +f1v6s13 f2v0s10 35.000000 +f1v6s13 f1v2s4 34.000000 +f1v6s13 f2v5s15 36.000000 +f1v6s13 f1v7s9 36.000000 +f1v6s13 f1v5s7 33.000000 +f1v6s13 f1v0s2 35.000000 +f1v6s13 f2v11s21 37.000000 +f1v6s13 f1v4s6 35.000000 +f1v6s13 f1v1s3 35.000000 +f1v6s13 f2v14s24 36.000000 +f3v8s33 f2v9s19 39.000000 +f3v8s33 f2v12s22 39.000000 +f3v8s33 f0v0s0 38.000000 +f3v8s33 f1v6s8 38.000000 +f3v8s33 f2v13s23 38.000000 +f3v8s33 f2v4s14 37.000000 +f3v8s33 f2v3s13 38.000000 +f3v8s33 f2v2s12 38.000000 +f3v8s33 f2v6s16 38.000000 +f3v8s33 f2v7s17 38.000000 +f3v8s33 f1v3s5 33.000000 +f3v8s33 f2v10s20 38.000000 +f3v8s33 f2v1s11 38.000000 +f3v8s33 f0v1s1 38.000000 +f3v8s33 f2v8s18 37.000000 +f3v8s33 f2v0s10 38.000000 +f3v8s33 f1v2s4 33.000000 +f3v8s33 f2v5s15 38.000000 +f3v8s33 f1v7s9 34.000000 +f3v8s33 f1v5s7 34.000000 +f3v8s33 f1v0s2 34.000000 +f3v8s33 f2v11s21 38.000000 +f3v8s33 f1v4s6 34.000000 +f3v8s33 f1v1s3 34.000000 +f3v8s33 f2v14s24 39.000000 +f1v1s8 f2v9s19 40.000000 +f1v1s8 f2v12s22 40.000000 +f1v1s8 f0v0s0 40.000000 +f1v1s8 f1v6s8 40.000000 +f1v1s8 f2v13s23 40.000000 +f1v1s8 f2v4s14 39.000000 +f1v1s8 f2v3s13 39.000000 +f1v1s8 f2v2s12 40.000000 +f1v1s8 f2v6s16 41.000000 +f1v1s8 f2v7s17 40.000000 +f1v1s8 f1v3s5 34.000000 +f1v1s8 f2v10s20 40.000000 +f1v1s8 f2v1s11 38.000000 +f1v1s8 f0v1s1 40.000000 +f1v1s8 f2v8s18 39.000000 +f1v1s8 f2v0s10 40.000000 +f1v1s8 f1v2s4 34.000000 +f1v1s8 f2v5s15 41.000000 +f1v1s8 f1v7s9 36.000000 +f1v1s8 f1v5s7 34.000000 +f1v1s8 f1v0s2 35.000000 +f1v1s8 f2v11s21 41.000000 +f1v1s8 f1v4s6 35.000000 +f1v1s8 f1v1s3 35.000000 +f1v1s8 f2v14s24 40.000000 +f1v14s21 f2v9s19 37.000000 +f1v14s21 f2v12s22 37.000000 +f1v14s21 f0v0s0 40.000000 +f1v14s21 f1v6s8 40.000000 +f1v14s21 f2v13s23 37.000000 +f1v14s21 f2v4s14 37.000000 +f1v14s21 f2v3s13 36.000000 +f1v14s21 f2v2s12 37.000000 +f1v14s21 f2v6s16 38.000000 +f1v14s21 f2v7s17 37.000000 +f1v14s21 f1v3s5 32.000000 +f1v14s21 f2v10s20 37.000000 +f1v14s21 f2v1s11 36.000000 +f1v14s21 f0v1s1 40.000000 +f1v14s21 f2v8s18 36.000000 +f1v14s21 f2v0s10 37.000000 +f1v14s21 f1v2s4 33.000000 +f1v14s21 f2v5s15 38.000000 +f1v14s21 f1v7s9 34.000000 +f1v14s21 f1v5s7 33.000000 +f1v14s21 f1v0s2 33.000000 +f1v14s21 f2v11s21 38.000000 +f1v14s21 f1v4s6 33.000000 +f1v14s21 f1v1s3 33.000000 +f1v14s21 f2v14s24 37.000000 +f0v1s1 f2v9s19 40.000000 +f0v1s1 f2v12s22 40.000000 +f0v1s1 f0v0s0 44.000000 +f0v1s1 f1v6s8 44.000000 +f0v1s1 f2v13s23 40.000000 +f0v1s1 f2v4s14 39.000000 +f0v1s1 f2v3s13 40.000000 +f0v1s1 f2v2s12 40.000000 +f0v1s1 f2v6s16 40.000000 +f0v1s1 f2v7s17 40.000000 +f0v1s1 f1v3s5 34.000000 +f0v1s1 f2v10s20 40.000000 +f0v1s1 f2v1s11 41.000000 +f0v1s1 f0v1s1 44.000000 +f0v1s1 f2v8s18 39.000000 +f0v1s1 f2v0s10 40.000000 +f0v1s1 f1v2s4 34.000000 +f0v1s1 f2v5s15 39.000000 +f0v1s1 f1v7s9 34.000000 +f0v1s1 f1v5s7 35.000000 +f0v1s1 f1v0s2 35.000000 +f0v1s1 f2v11s21 40.000000 +f0v1s1 f1v4s6 35.000000 +f0v1s1 f1v1s3 35.000000 +f0v1s1 f2v14s24 41.000000 +f1v5s12 f2v9s19 39.000000 +f1v5s12 f2v12s22 39.000000 +f1v5s12 f0v0s0 40.000000 +f1v5s12 f1v6s8 40.000000 +f1v5s12 f2v13s23 39.000000 +f1v5s12 f2v4s14 39.000000 +f1v5s12 f2v3s13 39.000000 +f1v5s12 f2v2s12 39.000000 +f1v5s12 f2v6s16 38.000000 +f1v5s12 f2v7s17 39.000000 +f1v5s12 f1v3s5 35.000000 +f1v5s12 f2v10s20 39.000000 +f1v5s12 f2v1s11 38.000000 +f1v5s12 f0v1s1 40.000000 +f1v5s12 f2v8s18 37.000000 +f1v5s12 f2v0s10 39.000000 +f1v5s12 f1v2s4 35.000000 +f1v5s12 f2v5s15 39.000000 +f1v5s12 f1v7s9 36.000000 +f1v5s12 f1v5s7 34.000000 +f1v5s12 f1v0s2 36.000000 +f1v5s12 f2v11s21 38.000000 +f1v5s12 f1v4s6 36.000000 +f1v5s12 f1v1s3 36.000000 +f1v5s12 f2v14s24 38.000000 +f1v4s11 f2v9s19 39.000000 +f1v4s11 f2v12s22 39.000000 +f1v4s11 f0v0s0 40.000000 +f1v4s11 f1v6s8 40.000000 +f1v4s11 f2v13s23 39.000000 +f1v4s11 f2v4s14 38.000000 +f1v4s11 f2v3s13 38.000000 +f1v4s11 f2v2s12 39.000000 +f1v4s11 f2v6s16 40.000000 +f1v4s11 f2v7s17 39.000000 +f1v4s11 f1v3s5 34.000000 +f1v4s11 f2v10s20 39.000000 +f1v4s11 f2v1s11 38.000000 +f1v4s11 f0v1s1 40.000000 +f1v4s11 f2v8s18 38.000000 +f1v4s11 f2v0s10 39.000000 +f1v4s11 f1v2s4 34.000000 +f1v4s11 f2v5s15 40.000000 +f1v4s11 f1v7s9 36.000000 +f1v4s11 f1v5s7 34.000000 +f1v4s11 f1v0s2 35.000000 +f1v4s11 f2v11s21 40.000000 +f1v4s11 f1v4s6 35.000000 +f1v4s11 f1v1s3 35.000000 +f1v4s11 f2v14s24 39.000000 +f1v9s16 f2v9s19 40.000000 +f1v9s16 f2v12s22 40.000000 +f1v9s16 f0v0s0 42.000000 +f1v9s16 f1v6s8 42.000000 +f1v9s16 f2v13s23 40.000000 +f1v9s16 f2v4s14 39.000000 +f1v9s16 f2v3s13 39.000000 +f1v9s16 f2v2s12 40.000000 +f1v9s16 f2v6s16 40.000000 +f1v9s16 f2v7s17 40.000000 +f1v9s16 f1v3s5 35.000000 +f1v9s16 f2v10s20 40.000000 +f1v9s16 f2v1s11 39.000000 +f1v9s16 f0v1s1 42.000000 +f1v9s16 f2v8s18 38.000000 +f1v9s16 f2v0s10 40.000000 +f1v9s16 f1v2s4 35.000000 +f1v9s16 f2v5s15 41.000000 +f1v9s16 f1v7s9 37.000000 +f1v9s16 f1v5s7 35.000000 +f1v9s16 f1v0s2 36.000000 +f1v9s16 f2v11s21 40.000000 +f1v9s16 f1v4s6 36.000000 +f1v9s16 f1v1s3 36.000000 +f1v9s16 f2v14s24 40.000000 +f1v10s17 f2v9s19 37.000000 +f1v10s17 f2v12s22 37.000000 +f1v10s17 f0v0s0 42.000000 +f1v10s17 f1v6s8 42.000000 +f1v10s17 f2v13s23 37.000000 +f1v10s17 f2v4s14 36.000000 +f1v10s17 f2v3s13 37.000000 +f1v10s17 f2v2s12 37.000000 +f1v10s17 f2v6s16 38.000000 +f1v10s17 f2v7s17 37.000000 +f1v10s17 f1v3s5 36.000000 +f1v10s17 f2v10s20 37.000000 +f1v10s17 f2v1s11 36.000000 +f1v10s17 f0v1s1 42.000000 +f1v10s17 f2v8s18 36.000000 +f1v10s17 f2v0s10 37.000000 +f1v10s17 f1v2s4 35.000000 +f1v10s17 f2v5s15 38.000000 +f1v10s17 f1v7s9 37.000000 +f1v10s17 f1v5s7 36.000000 +f1v10s17 f1v0s2 37.000000 +f1v10s17 f2v11s21 38.000000 +f1v10s17 f1v4s6 37.000000 +f1v10s17 f1v1s3 37.000000 +f1v10s17 f2v14s24 37.000000 +f1v0s7 f2v9s19 39.000000 +f1v0s7 f2v12s22 39.000000 +f1v0s7 f0v0s0 40.000000 +f1v0s7 f1v6s8 40.000000 +f1v0s7 f2v13s23 39.000000 +f1v0s7 f2v4s14 38.000000 +f1v0s7 f2v3s13 38.000000 +f1v0s7 f2v2s12 39.000000 +f1v0s7 f2v6s16 40.000000 +f1v0s7 f2v7s17 39.000000 +f1v0s7 f1v3s5 34.000000 +f1v0s7 f2v10s20 39.000000 +f1v0s7 f2v1s11 38.000000 +f1v0s7 f0v1s1 40.000000 +f1v0s7 f2v8s18 38.000000 +f1v0s7 f2v0s10 39.000000 +f1v0s7 f1v2s4 34.000000 +f1v0s7 f2v5s15 40.000000 +f1v0s7 f1v7s9 36.000000 +f1v0s7 f1v5s7 34.000000 +f1v0s7 f1v0s2 35.000000 +f1v0s7 f2v11s21 40.000000 +f1v0s7 f1v4s6 35.000000 +f1v0s7 f1v1s3 35.000000 +f1v0s7 f2v14s24 39.000000 +f3v9s34 f2v9s19 39.000000 +f3v9s34 f2v12s22 38.000000 +f3v9s34 f0v0s0 39.000000 +f3v9s34 f1v6s8 39.000000 +f3v9s34 f2v13s23 38.000000 +f3v9s34 f2v4s14 38.000000 +f3v9s34 f2v3s13 38.000000 +f3v9s34 f2v2s12 38.000000 +f3v9s34 f2v6s16 37.000000 +f3v9s34 f2v7s17 38.000000 +f3v9s34 f1v3s5 33.000000 +f3v9s34 f2v10s20 38.000000 +f3v9s34 f2v1s11 38.000000 +f3v9s34 f0v1s1 39.000000 +f3v9s34 f2v8s18 37.000000 +f3v9s34 f2v0s10 38.000000 +f3v9s34 f1v2s4 33.000000 +f3v9s34 f2v5s15 38.000000 +f3v9s34 f1v7s9 34.000000 +f3v9s34 f1v5s7 34.000000 +f3v9s34 f1v0s2 34.000000 +f3v9s34 f2v11s21 37.000000 +f3v9s34 f1v4s6 34.000000 +f3v9s34 f1v1s3 34.000000 +f3v9s34 f2v14s24 39.000000 +f4v0s40 f2v9s19 40.000000 +f4v0s40 f2v12s22 39.000000 +f4v0s40 f0v0s0 42.000000 +f4v0s40 f1v6s8 42.000000 +f4v0s40 f2v13s23 40.000000 +f4v0s40 f2v4s14 38.000000 +f4v0s40 f2v3s13 39.000000 +f4v0s40 f2v2s12 39.000000 +f4v0s40 f2v6s16 39.000000 +f4v0s40 f2v7s17 40.000000 +f4v0s40 f1v3s5 35.000000 +f4v0s40 f2v10s20 40.000000 +f4v0s40 f2v1s11 39.000000 +f4v0s40 f0v1s1 42.000000 +f4v0s40 f2v8s18 38.000000 +f4v0s40 f2v0s10 40.000000 +f4v0s40 f1v2s4 33.000000 +f4v0s40 f2v5s15 38.000000 +f4v0s40 f1v7s9 33.000000 +f4v0s40 f1v5s7 35.000000 +f4v0s40 f1v0s2 35.000000 +f4v0s40 f2v11s21 39.000000 +f4v0s40 f1v4s6 36.000000 +f4v0s40 f1v1s3 35.000000 +f4v0s40 f2v14s24 39.000000 +f1v7s14 f2v9s19 39.000000 +f1v7s14 f2v12s22 39.000000 +f1v7s14 f0v0s0 40.000000 +f1v7s14 f1v6s8 40.000000 +f1v7s14 f2v13s23 39.000000 +f1v7s14 f2v4s14 38.000000 +f1v7s14 f2v3s13 38.000000 +f1v7s14 f2v2s12 39.000000 +f1v7s14 f2v6s16 40.000000 +f1v7s14 f2v7s17 39.000000 +f1v7s14 f1v3s5 34.000000 +f1v7s14 f2v10s20 39.000000 +f1v7s14 f2v1s11 38.000000 +f1v7s14 f0v1s1 40.000000 +f1v7s14 f2v8s18 38.000000 +f1v7s14 f2v0s10 39.000000 +f1v7s14 f1v2s4 34.000000 +f1v7s14 f2v5s15 40.000000 +f1v7s14 f1v7s9 36.000000 +f1v7s14 f1v5s7 34.000000 +f1v7s14 f1v0s2 35.000000 +f1v7s14 f2v11s21 40.000000 +f1v7s14 f1v4s6 35.000000 +f1v7s14 f1v1s3 35.000000 +f1v7s14 f2v14s24 39.000000 +f3v2s27 f2v9s19 39.000000 +f3v2s27 f2v12s22 39.000000 +f3v2s27 f0v0s0 38.000000 +f3v2s27 f1v6s8 38.000000 +f3v2s27 f2v13s23 38.000000 +f3v2s27 f2v4s14 38.000000 +f3v2s27 f2v3s13 38.000000 +f3v2s27 f2v2s12 38.000000 +f3v2s27 f2v6s16 38.000000 +f3v2s27 f2v7s17 38.000000 +f3v2s27 f1v3s5 32.000000 +f3v2s27 f2v10s20 38.000000 +f3v2s27 f2v1s11 38.000000 +f3v2s27 f0v1s1 38.000000 +f3v2s27 f2v8s18 38.000000 +f3v2s27 f2v0s10 38.000000 +f3v2s27 f1v2s4 32.000000 +f3v2s27 f2v5s15 38.000000 +f3v2s27 f1v7s9 34.000000 +f3v2s27 f1v5s7 33.000000 +f3v2s27 f1v0s2 33.000000 +f3v2s27 f2v11s21 38.000000 +f3v2s27 f1v4s6 33.000000 +f3v2s27 f1v1s3 33.000000 +f3v2s27 f2v14s24 39.000000 +f4v1s41 f2v9s19 40.000000 +f4v1s41 f2v12s22 39.000000 +f4v1s41 f0v0s0 42.000000 +f4v1s41 f1v6s8 42.000000 +f4v1s41 f2v13s23 40.000000 +f4v1s41 f2v4s14 39.000000 +f4v1s41 f2v3s13 39.000000 +f4v1s41 f2v2s12 39.000000 +f4v1s41 f2v6s16 40.000000 +f4v1s41 f2v7s17 40.000000 +f4v1s41 f1v3s5 35.000000 +f4v1s41 f2v10s20 40.000000 +f4v1s41 f2v1s11 39.000000 +f4v1s41 f0v1s1 42.000000 +f4v1s41 f2v8s18 39.000000 +f4v1s41 f2v0s10 40.000000 +f4v1s41 f1v2s4 33.000000 +f4v1s41 f2v5s15 39.000000 +f4v1s41 f1v7s9 34.000000 +f4v1s41 f1v5s7 35.000000 +f4v1s41 f1v0s2 35.000000 +f4v1s41 f2v11s21 40.000000 +f4v1s41 f1v4s6 36.000000 +f4v1s41 f1v1s3 35.000000 +f4v1s41 f2v14s24 39.000000 +f2v0s22 f2v9s19 41.000000 +f2v0s22 f2v12s22 41.000000 +f2v0s22 f0v0s0 44.000000 +f2v0s22 f1v6s8 44.000000 +f2v0s22 f2v13s23 41.000000 +f2v0s22 f2v4s14 40.000000 +f2v0s22 f2v3s13 40.000000 +f2v0s22 f2v2s12 40.000000 +f2v0s22 f2v6s16 40.000000 +f2v0s22 f2v7s17 41.000000 +f2v0s22 f1v3s5 33.000000 +f2v0s22 f2v10s20 41.000000 +f2v0s22 f2v1s11 41.000000 +f2v0s22 f0v1s1 44.000000 +f2v0s22 f2v8s18 40.000000 +f2v0s22 f2v0s10 41.000000 +f2v0s22 f1v2s4 33.000000 +f2v0s22 f2v5s15 40.000000 +f2v0s22 f1v7s9 33.000000 +f2v0s22 f1v5s7 34.000000 +f2v0s22 f1v0s2 34.000000 +f2v0s22 f2v11s21 40.000000 +f2v0s22 f1v4s6 34.000000 +f2v0s22 f1v1s3 34.000000 +f2v0s22 f2v14s24 41.000000 +f1v2s9 f2v9s19 40.000000 +f1v2s9 f2v12s22 40.000000 +f1v2s9 f0v0s0 44.000000 +f1v2s9 f1v6s8 44.000000 +f1v2s9 f2v13s23 40.000000 +f1v2s9 f2v4s14 39.000000 +f1v2s9 f2v3s13 40.000000 +f1v2s9 f2v2s12 40.000000 +f1v2s9 f2v6s16 40.000000 +f1v2s9 f2v7s17 40.000000 +f1v2s9 f1v3s5 34.000000 +f1v2s9 f2v10s20 40.000000 +f1v2s9 f2v1s11 41.000000 +f1v2s9 f0v1s1 44.000000 +f1v2s9 f2v8s18 39.000000 +f1v2s9 f2v0s10 40.000000 +f1v2s9 f1v2s4 34.000000 +f1v2s9 f2v5s15 39.000000 +f1v2s9 f1v7s9 34.000000 +f1v2s9 f1v5s7 35.000000 +f1v2s9 f1v0s2 35.000000 +f1v2s9 f2v11s21 40.000000 +f1v2s9 f1v4s6 35.000000 +f1v2s9 f1v1s3 35.000000 +f1v2s9 f2v14s24 41.000000 +f1v3s10 f2v9s19 39.000000 +f1v3s10 f2v12s22 39.000000 +f1v3s10 f0v0s0 40.000000 +f1v3s10 f1v6s8 40.000000 +f1v3s10 f2v13s23 39.000000 +f1v3s10 f2v4s14 38.000000 +f1v3s10 f2v3s13 38.000000 +f1v3s10 f2v2s12 39.000000 +f1v3s10 f2v6s16 40.000000 +f1v3s10 f2v7s17 39.000000 +f1v3s10 f1v3s5 34.000000 +f1v3s10 f2v10s20 39.000000 +f1v3s10 f2v1s11 38.000000 +f1v3s10 f0v1s1 40.000000 +f1v3s10 f2v8s18 38.000000 +f1v3s10 f2v0s10 39.000000 +f1v3s10 f1v2s4 34.000000 +f1v3s10 f2v5s15 40.000000 +f1v3s10 f1v7s9 36.000000 +f1v3s10 f1v5s7 34.000000 +f1v3s10 f1v0s2 35.000000 +f1v3s10 f2v11s21 40.000000 +f1v3s10 f1v4s6 35.000000 +f1v3s10 f1v1s3 35.000000 +f1v3s10 f2v14s24 39.000000 +f3v0s25 f2v9s19 39.000000 +f3v0s25 f2v12s22 39.000000 +f3v0s25 f0v0s0 39.000000 +f3v0s25 f1v6s8 39.000000 +f3v0s25 f2v13s23 38.000000 +f3v0s25 f2v4s14 38.000000 +f3v0s25 f2v3s13 38.000000 +f3v0s25 f2v2s12 38.000000 +f3v0s25 f2v6s16 38.000000 +f3v0s25 f2v7s17 38.000000 +f3v0s25 f1v3s5 33.000000 +f3v0s25 f2v10s20 38.000000 +f3v0s25 f2v1s11 38.000000 +f3v0s25 f0v1s1 39.000000 +f3v0s25 f2v8s18 38.000000 +f3v0s25 f2v0s10 38.000000 +f3v0s25 f1v2s4 33.000000 +f3v0s25 f2v5s15 38.000000 +f3v0s25 f1v7s9 34.000000 +f3v0s25 f1v5s7 34.000000 +f3v0s25 f1v0s2 34.000000 +f3v0s25 f2v11s21 38.000000 +f3v0s25 f1v4s6 34.000000 +f3v0s25 f1v1s3 34.000000 +f3v0s25 f2v14s24 39.000000 +f3v3s28 f2v9s19 38.000000 +f3v3s28 f2v12s22 38.000000 +f3v3s28 f0v0s0 39.000000 +f3v3s28 f1v6s8 39.000000 +f3v3s28 f2v13s23 37.000000 +f3v3s28 f2v4s14 37.000000 +f3v3s28 f2v3s13 37.000000 +f3v3s28 f2v2s12 37.000000 +f3v3s28 f2v6s16 38.000000 +f3v3s28 f2v7s17 37.000000 +f3v3s28 f1v3s5 33.000000 +f3v3s28 f2v10s20 37.000000 +f3v3s28 f2v1s11 38.000000 +f3v3s28 f0v1s1 39.000000 +f3v3s28 f2v8s18 37.000000 +f3v3s28 f2v0s10 37.000000 +f3v3s28 f1v2s4 34.000000 +f3v3s28 f2v5s15 38.000000 +f3v3s28 f1v7s9 34.000000 +f3v3s28 f1v5s7 35.000000 +f3v3s28 f1v0s2 35.000000 +f3v3s28 f2v11s21 38.000000 +f3v3s28 f1v4s6 35.000000 +f3v3s28 f1v1s3 35.000000 +f3v3s28 f2v14s24 39.000000 +f3v13s38 f2v9s19 40.000000 +f3v13s38 f2v12s22 39.000000 +f3v13s38 f0v0s0 39.000000 +f3v13s38 f1v6s8 39.000000 +f3v13s38 f2v13s23 39.000000 +f3v13s38 f2v4s14 38.000000 +f3v13s38 f2v3s13 39.000000 +f3v13s38 f2v2s12 39.000000 +f3v13s38 f2v6s16 39.000000 +f3v13s38 f2v7s17 39.000000 +f3v13s38 f1v3s5 34.000000 +f3v13s38 f2v10s20 39.000000 +f3v13s38 f2v1s11 38.000000 +f3v13s38 f0v1s1 39.000000 +f3v13s38 f2v8s18 38.000000 +f3v13s38 f2v0s10 39.000000 +f3v13s38 f1v2s4 34.000000 +f3v13s38 f2v5s15 38.000000 +f3v13s38 f1v7s9 35.000000 +f3v13s38 f1v5s7 35.000000 +f3v13s38 f1v0s2 35.000000 +f3v13s38 f2v11s21 39.000000 +f3v13s38 f1v4s6 36.000000 +f3v13s38 f1v1s3 35.000000 +f3v13s38 f2v14s24 40.000000 +f3v7s32 f2v9s19 39.000000 +f3v7s32 f2v12s22 38.000000 +f3v7s32 f0v0s0 39.000000 +f3v7s32 f1v6s8 39.000000 +f3v7s32 f2v13s23 38.000000 +f3v7s32 f2v4s14 38.000000 +f3v7s32 f2v3s13 38.000000 +f3v7s32 f2v2s12 38.000000 +f3v7s32 f2v6s16 37.000000 +f3v7s32 f2v7s17 38.000000 +f3v7s32 f1v3s5 33.000000 +f3v7s32 f2v10s20 38.000000 +f3v7s32 f2v1s11 38.000000 +f3v7s32 f0v1s1 39.000000 +f3v7s32 f2v8s18 37.000000 +f3v7s32 f2v0s10 38.000000 +f3v7s32 f1v2s4 33.000000 +f3v7s32 f2v5s15 38.000000 +f3v7s32 f1v7s9 34.000000 +f3v7s32 f1v5s7 34.000000 +f3v7s32 f1v0s2 34.000000 +f3v7s32 f2v11s21 37.000000 +f3v7s32 f1v4s6 34.000000 +f3v7s32 f1v1s3 34.000000 +f3v7s32 f2v14s24 39.000000 +f3v1s26 f2v9s19 38.000000 +f3v1s26 f2v12s22 38.000000 +f3v1s26 f0v0s0 38.000000 +f3v1s26 f1v6s8 38.000000 +f3v1s26 f2v13s23 37.000000 +f3v1s26 f2v4s14 37.000000 +f3v1s26 f2v3s13 37.000000 +f3v1s26 f2v2s12 37.000000 +f3v1s26 f2v6s16 38.000000 +f3v1s26 f2v7s17 37.000000 +f3v1s26 f1v3s5 31.000000 +f3v1s26 f2v10s20 37.000000 +f3v1s26 f2v1s11 38.000000 +f3v1s26 f0v1s1 38.000000 +f3v1s26 f2v8s18 37.000000 +f3v1s26 f2v0s10 37.000000 +f3v1s26 f1v2s4 31.000000 +f3v1s26 f2v5s15 37.000000 +f3v1s26 f1v7s9 32.000000 +f3v1s26 f1v5s7 32.000000 +f3v1s26 f1v0s2 32.000000 +f3v1s26 f2v11s21 38.000000 +f3v1s26 f1v4s6 33.000000 +f3v1s26 f1v1s3 32.000000 +f3v1s26 f2v14s24 39.000000 +f3v6s31 f2v9s19 39.000000 +f3v6s31 f2v12s22 38.000000 +f3v6s31 f0v0s0 39.000000 +f3v6s31 f1v6s8 39.000000 +f3v6s31 f2v13s23 38.000000 +f3v6s31 f2v4s14 38.000000 +f3v6s31 f2v3s13 38.000000 +f3v6s31 f2v2s12 38.000000 +f3v6s31 f2v6s16 37.000000 +f3v6s31 f2v7s17 38.000000 +f3v6s31 f1v3s5 33.000000 +f3v6s31 f2v10s20 38.000000 +f3v6s31 f2v1s11 38.000000 +f3v6s31 f0v1s1 39.000000 +f3v6s31 f2v8s18 37.000000 +f3v6s31 f2v0s10 38.000000 +f3v6s31 f1v2s4 33.000000 +f3v6s31 f2v5s15 38.000000 +f3v6s31 f1v7s9 34.000000 +f3v6s31 f1v5s7 34.000000 +f3v6s31 f1v0s2 34.000000 +f3v6s31 f2v11s21 37.000000 +f3v6s31 f1v4s6 34.000000 +f3v6s31 f1v1s3 34.000000 +f3v6s31 f2v14s24 39.000000 +f1v13s20 f2v9s19 38.000000 +f1v13s20 f2v12s22 38.000000 +f1v13s20 f0v0s0 39.000000 +f1v13s20 f1v6s8 39.000000 +f1v13s20 f2v13s23 38.000000 +f1v13s20 f2v4s14 37.000000 +f1v13s20 f2v3s13 37.000000 +f1v13s20 f2v2s12 38.000000 +f1v13s20 f2v6s16 40.000000 +f1v13s20 f2v7s17 38.000000 +f1v13s20 f1v3s5 34.000000 +f1v13s20 f2v10s20 38.000000 +f1v13s20 f2v1s11 37.000000 +f1v13s20 f0v1s1 39.000000 +f1v13s20 f2v8s18 37.000000 +f1v13s20 f2v0s10 38.000000 +f1v13s20 f1v2s4 34.000000 +f1v13s20 f2v5s15 39.000000 +f1v13s20 f1v7s9 36.000000 +f1v13s20 f1v5s7 34.000000 +f1v13s20 f1v0s2 35.000000 +f1v13s20 f2v11s21 40.000000 +f1v13s20 f1v4s6 35.000000 +f1v13s20 f1v1s3 35.000000 +f1v13s20 f2v14s24 38.000000 +f2v2s24 f2v9s19 36.000000 +f2v2s24 f2v12s22 37.000000 +f2v2s24 f0v0s0 37.000000 +f2v2s24 f1v6s8 37.000000 +f2v2s24 f2v13s23 36.000000 +f2v2s24 f2v4s14 35.000000 +f2v2s24 f2v3s13 37.000000 +f2v2s24 f2v2s12 36.000000 +f2v2s24 f2v6s16 37.000000 +f2v2s24 f2v7s17 36.000000 +f2v2s24 f1v3s5 29.000000 +f2v2s24 f2v10s20 36.000000 +f2v2s24 f2v1s11 37.000000 +f2v2s24 f0v1s1 37.000000 +f2v2s24 f2v8s18 35.000000 +f2v2s24 f2v0s10 36.000000 +f2v2s24 f1v2s4 28.000000 +f2v2s24 f2v5s15 37.000000 +f2v2s24 f1v7s9 28.000000 +f2v2s24 f1v5s7 30.000000 +f2v2s24 f1v0s2 30.000000 +f2v2s24 f2v11s21 37.000000 +f2v2s24 f1v4s6 29.000000 +f2v2s24 f1v1s3 30.000000 +f2v2s24 f2v14s24 36.000000 +f3v11s36 f2v9s19 39.000000 +f3v11s36 f2v12s22 38.000000 +f3v11s36 f0v0s0 39.000000 +f3v11s36 f1v6s8 39.000000 +f3v11s36 f2v13s23 38.000000 +f3v11s36 f2v4s14 38.000000 +f3v11s36 f2v3s13 38.000000 +f3v11s36 f2v2s12 38.000000 +f3v11s36 f2v6s16 37.000000 +f3v11s36 f2v7s17 38.000000 +f3v11s36 f1v3s5 31.000000 +f3v11s36 f2v10s20 38.000000 +f3v11s36 f2v1s11 38.000000 +f3v11s36 f0v1s1 39.000000 +f3v11s36 f2v8s18 37.000000 +f3v11s36 f2v0s10 38.000000 +f3v11s36 f1v2s4 32.000000 +f3v11s36 f2v5s15 38.000000 +f3v11s36 f1v7s9 33.000000 +f3v11s36 f1v5s7 32.000000 +f3v11s36 f1v0s2 32.000000 +f3v11s36 f2v11s21 37.000000 +f3v11s36 f1v4s6 34.000000 +f3v11s36 f1v1s3 32.000000 +f3v11s36 f2v14s24 37.000000 +f0v5s5 f2v9s19 40.000000 +f0v5s5 f2v12s22 40.000000 +f0v5s5 f0v0s0 43.000000 +f0v5s5 f1v6s8 43.000000 +f0v5s5 f2v13s23 40.000000 +f0v5s5 f2v4s14 39.000000 +f0v5s5 f2v3s13 40.000000 +f0v5s5 f2v2s12 39.000000 +f0v5s5 f2v6s16 39.000000 +f0v5s5 f2v7s17 40.000000 +f0v5s5 f1v3s5 33.000000 +f0v5s5 f2v10s20 40.000000 +f0v5s5 f2v1s11 40.000000 +f0v5s5 f0v1s1 43.000000 +f0v5s5 f2v8s18 39.000000 +f0v5s5 f2v0s10 40.000000 +f0v5s5 f1v2s4 34.000000 +f0v5s5 f2v5s15 39.000000 +f0v5s5 f1v7s9 34.000000 +f0v5s5 f1v5s7 35.000000 +f0v5s5 f1v0s2 35.000000 +f0v5s5 f2v11s21 39.000000 +f0v5s5 f1v4s6 35.000000 +f0v5s5 f1v1s3 35.000000 +f0v5s5 f2v14s24 41.000000 +f1v11s18 f2v9s19 39.000000 +f1v11s18 f2v12s22 39.000000 +f1v11s18 f0v0s0 41.000000 +f1v11s18 f1v6s8 41.000000 +f1v11s18 f2v13s23 39.000000 +f1v11s18 f2v4s14 38.000000 +f1v11s18 f2v3s13 38.000000 +f1v11s18 f2v2s12 39.000000 +f1v11s18 f2v6s16 40.000000 +f1v11s18 f2v7s17 39.000000 +f1v11s18 f1v3s5 34.000000 +f1v11s18 f2v10s20 39.000000 +f1v11s18 f2v1s11 38.000000 +f1v11s18 f0v1s1 41.000000 +f1v11s18 f2v8s18 38.000000 +f1v11s18 f2v0s10 39.000000 +f1v11s18 f1v2s4 34.000000 +f1v11s18 f2v5s15 40.000000 +f1v11s18 f1v7s9 36.000000 +f1v11s18 f1v5s7 34.000000 +f1v11s18 f1v0s2 35.000000 +f1v11s18 f2v11s21 40.000000 +f1v11s18 f1v4s6 35.000000 +f1v11s18 f1v1s3 35.000000 +f1v11s18 f2v14s24 39.000000 +f0v6s6 f2v9s19 40.000000 +f0v6s6 f2v12s22 40.000000 +f0v6s6 f0v0s0 43.000000 +f0v6s6 f1v6s8 43.000000 +f0v6s6 f2v13s23 40.000000 +f0v6s6 f2v4s14 39.000000 +f0v6s6 f2v3s13 40.000000 +f0v6s6 f2v2s12 40.000000 +f0v6s6 f2v6s16 40.000000 +f0v6s6 f2v7s17 40.000000 +f0v6s6 f1v3s5 33.000000 +f0v6s6 f2v10s20 40.000000 +f0v6s6 f2v1s11 41.000000 +f0v6s6 f0v1s1 43.000000 +f0v6s6 f2v8s18 39.000000 +f0v6s6 f2v0s10 40.000000 +f0v6s6 f1v2s4 32.000000 +f0v6s6 f2v5s15 39.000000 +f0v6s6 f1v7s9 33.000000 +f0v6s6 f1v5s7 33.000000 +f0v6s6 f1v0s2 33.000000 +f0v6s6 f2v11s21 40.000000 +f0v6s6 f1v4s6 34.000000 +f0v6s6 f1v1s3 33.000000 +f0v6s6 f2v14s24 42.000000 +f3v4s29 f2v9s19 39.000000 +f3v4s29 f2v12s22 40.000000 +f3v4s29 f0v0s0 40.000000 +f3v4s29 f1v6s8 40.000000 +f3v4s29 f2v13s23 39.000000 +f3v4s29 f2v4s14 39.000000 +f3v4s29 f2v3s13 39.000000 +f3v4s29 f2v2s12 39.000000 +f3v4s29 f2v6s16 39.000000 +f3v4s29 f2v7s17 39.000000 +f3v4s29 f1v3s5 33.000000 +f3v4s29 f2v10s20 39.000000 +f3v4s29 f2v1s11 38.000000 +f3v4s29 f0v1s1 40.000000 +f3v4s29 f2v8s18 39.000000 +f3v4s29 f2v0s10 39.000000 +f3v4s29 f1v2s4 33.000000 +f3v4s29 f2v5s15 38.000000 +f3v4s29 f1v7s9 34.000000 +f3v4s29 f1v5s7 34.000000 +f3v4s29 f1v0s2 34.000000 +f3v4s29 f2v11s21 39.000000 +f3v4s29 f1v4s6 34.000000 +f3v4s29 f1v1s3 34.000000 +f3v4s29 f2v14s24 39.000000 +f0v2s2 f2v9s19 41.000000 +f0v2s2 f2v12s22 41.000000 +f0v2s2 f0v0s0 44.000000 +f0v2s2 f1v6s8 44.000000 +f0v2s2 f2v13s23 41.000000 +f0v2s2 f2v4s14 40.000000 +f0v2s2 f2v3s13 40.000000 +f0v2s2 f2v2s12 40.000000 +f0v2s2 f2v6s16 40.000000 +f0v2s2 f2v7s17 41.000000 +f0v2s2 f1v3s5 33.000000 +f0v2s2 f2v10s20 41.000000 +f0v2s2 f2v1s11 41.000000 +f0v2s2 f0v1s1 44.000000 +f0v2s2 f2v8s18 40.000000 +f0v2s2 f2v0s10 41.000000 +f0v2s2 f1v2s4 33.000000 +f0v2s2 f2v5s15 40.000000 +f0v2s2 f1v7s9 33.000000 +f0v2s2 f1v5s7 34.000000 +f0v2s2 f1v0s2 34.000000 +f0v2s2 f2v11s21 40.000000 +f0v2s2 f1v4s6 34.000000 +f0v2s2 f1v1s3 34.000000 +f0v2s2 f2v14s24 41.000000 +f3v12s37 f2v9s19 41.000000 +f3v12s37 f2v12s22 40.000000 +f3v12s37 f0v0s0 40.000000 +f3v12s37 f1v6s8 40.000000 +f3v12s37 f2v13s23 40.000000 +f3v12s37 f2v4s14 40.000000 +f3v12s37 f2v3s13 40.000000 +f3v12s37 f2v2s12 40.000000 +f3v12s37 f2v6s16 39.000000 +f3v12s37 f2v7s17 40.000000 +f3v12s37 f1v3s5 33.000000 +f3v12s37 f2v10s20 40.000000 +f3v12s37 f2v1s11 39.000000 +f3v12s37 f0v1s1 40.000000 +f3v12s37 f2v8s18 40.000000 +f3v12s37 f2v0s10 40.000000 +f3v12s37 f1v2s4 34.000000 +f3v12s37 f2v5s15 39.000000 +f3v12s37 f1v7s9 35.000000 +f3v12s37 f1v5s7 35.000000 +f3v12s37 f1v0s2 35.000000 +f3v12s37 f2v11s21 39.000000 +f3v12s37 f1v4s6 35.000000 +f3v12s37 f1v1s3 35.000000 +f3v12s37 f2v14s24 40.000000 +f0v3s3 f2v9s19 40.000000 +f0v3s3 f2v12s22 40.000000 +f0v3s3 f0v0s0 42.000000 +f0v3s3 f1v6s8 42.000000 +f0v3s3 f2v13s23 40.000000 +f0v3s3 f2v4s14 39.000000 +f0v3s3 f2v3s13 39.000000 +f0v3s3 f2v2s12 39.000000 +f0v3s3 f2v6s16 39.000000 +f0v3s3 f2v7s17 40.000000 +f0v3s3 f1v3s5 34.000000 +f0v3s3 f2v10s20 40.000000 +f0v3s3 f2v1s11 40.000000 +f0v3s3 f0v1s1 42.000000 +f0v3s3 f2v8s18 39.000000 +f0v3s3 f2v0s10 40.000000 +f0v3s3 f1v2s4 34.000000 +f0v3s3 f2v5s15 39.000000 +f0v3s3 f1v7s9 34.000000 +f0v3s3 f1v5s7 34.000000 +f0v3s3 f1v0s2 34.000000 +f0v3s3 f2v11s21 39.000000 +f0v3s3 f1v4s6 34.000000 +f0v3s3 f1v1s3 34.000000 +f0v3s3 f2v14s24 40.000000 +f3v14s39 f2v9s19 39.000000 +f3v14s39 f2v12s22 39.000000 +f3v14s39 f0v0s0 39.000000 +f3v14s39 f1v6s8 39.000000 +f3v14s39 f2v13s23 38.000000 +f3v14s39 f2v4s14 38.000000 +f3v14s39 f2v3s13 38.000000 +f3v14s39 f2v2s12 38.000000 +f3v14s39 f2v6s16 38.000000 +f3v14s39 f2v7s17 38.000000 +f3v14s39 f1v3s5 33.000000 +f3v14s39 f2v10s20 38.000000 +f3v14s39 f2v1s11 38.000000 +f3v14s39 f0v1s1 39.000000 +f3v14s39 f2v8s18 38.000000 +f3v14s39 f2v0s10 38.000000 +f3v14s39 f1v2s4 33.000000 +f3v14s39 f2v5s15 38.000000 +f3v14s39 f1v7s9 34.000000 +f3v14s39 f1v5s7 34.000000 +f3v14s39 f1v0s2 34.000000 +f3v14s39 f2v11s21 38.000000 +f3v14s39 f1v4s6 34.000000 +f3v14s39 f1v1s3 34.000000 +f3v14s39 f2v14s24 39.000000 +f0v0s0 f2v9s19 40.000000 +f0v0s0 f2v12s22 40.000000 +f0v0s0 f0v0s0 44.000000 +f0v0s0 f1v6s8 44.000000 +f0v0s0 f2v13s23 40.000000 +f0v0s0 f2v4s14 39.000000 +f0v0s0 f2v3s13 39.000000 +f0v0s0 f2v2s12 40.000000 +f0v0s0 f2v6s16 40.000000 +f0v0s0 f2v7s17 40.000000 +f0v0s0 f1v3s5 34.000000 +f0v0s0 f2v10s20 40.000000 +f0v0s0 f2v1s11 41.000000 +f0v0s0 f0v1s1 44.000000 +f0v0s0 f2v8s18 39.000000 +f0v0s0 f2v0s10 40.000000 +f0v0s0 f1v2s4 34.000000 +f0v0s0 f2v5s15 39.000000 +f0v0s0 f1v7s9 34.000000 +f0v0s0 f1v5s7 35.000000 +f0v0s0 f1v0s2 35.000000 +f0v0s0 f2v11s21 40.000000 +f0v0s0 f1v4s6 35.000000 +f0v0s0 f1v1s3 35.000000 +f0v0s0 f2v14s24 41.000000 +f1v12s19 f2v9s19 38.000000 +f1v12s19 f2v12s22 38.000000 +f1v12s19 f0v0s0 40.000000 +f1v12s19 f1v6s8 40.000000 +f1v12s19 f2v13s23 38.000000 +f1v12s19 f2v4s14 37.000000 +f1v12s19 f2v3s13 37.000000 +f1v12s19 f2v2s12 38.000000 +f1v12s19 f2v6s16 39.000000 +f1v12s19 f2v7s17 38.000000 +f1v12s19 f1v3s5 33.000000 +f1v12s19 f2v10s20 38.000000 +f1v12s19 f2v1s11 37.000000 +f1v12s19 f0v1s1 40.000000 +f1v12s19 f2v8s18 37.000000 +f1v12s19 f2v0s10 38.000000 +f1v12s19 f1v2s4 33.000000 +f1v12s19 f2v5s15 39.000000 +f1v12s19 f1v7s9 35.000000 +f1v12s19 f1v5s7 33.000000 +f1v12s19 f1v0s2 34.000000 +f1v12s19 f2v11s21 39.000000 +f1v12s19 f1v4s6 34.000000 +f1v12s19 f1v1s3 34.000000 +f1v12s19 f2v14s24 38.000000 diff --git a/pkg/obitools/obialign/testdata/two_allshortest.expected b/pkg/obitools/obialign/testdata/two_allshortest.expected new file mode 100644 index 0000000..e52af63 --- /dev/null +++ b/pkg/obitools/obialign/testdata/two_allshortest.expected @@ -0,0 +1,1075 @@ +f3v10s35 f2v9s19 0.615385 +f3v10s35 f2v12s22 0.615385 +f3v10s35 f0v0s0 0.600000 +f3v10s35 f1v6s8 0.600000 +f3v10s35 f2v13s23 0.600000 +f3v10s35 f2v4s14 0.603175 +f3v10s35 f2v3s13 0.600000 +f3v10s35 f2v2s12 0.600000 +f3v10s35 f2v6s16 0.615385 +f3v10s35 f2v7s17 0.600000 +f3v10s35 f1v3s5 0.666667 +f3v10s35 f2v10s20 0.600000 +f3v10s35 f2v1s11 0.615385 +f3v10s35 f0v1s1 0.600000 +f3v10s35 f2v8s18 0.609375 +f3v10s35 f2v0s10 0.600000 +f3v10s35 f1v2s4 0.645833 +f3v10s35 f2v5s15 0.593750 +f3v10s35 f1v7s9 0.640000 +f3v10s35 f1v5s7 0.653061 +f3v10s35 f1v0s2 0.627451 +f3v10s35 f2v11s21 0.615385 +f3v10s35 f1v4s6 0.622642 +f3v10s35 f1v1s3 0.627451 +f3v10s35 f2v14s24 0.615385 +f3v5s30 f2v9s19 0.603175 +f3v5s30 f2v12s22 0.603175 +f3v5s30 f0v0s0 0.603175 +f3v5s30 f1v6s8 0.603175 +f3v5s30 f2v13s23 0.587302 +f3v5s30 f2v4s14 0.571429 +f3v5s30 f2v3s13 0.587302 +f3v5s30 f2v2s12 0.587302 +f3v5s30 f2v6s16 0.603175 +f3v5s30 f2v7s17 0.587302 +f3v5s30 f1v3s5 0.645833 +f3v5s30 f2v10s20 0.587302 +f3v5s30 f2v1s11 0.587302 +f3v5s30 f0v1s1 0.603175 +f3v5s30 f2v8s18 0.571429 +f3v5s30 f2v0s10 0.587302 +f3v5s30 f1v2s4 0.666667 +f3v5s30 f2v5s15 0.587302 +f3v5s30 f1v7s9 0.640000 +f3v5s30 f1v5s7 0.632653 +f3v5s30 f1v0s2 0.627451 +f3v5s30 f2v11s21 0.603175 +f3v5s30 f1v4s6 0.603774 +f3v5s30 f1v1s3 0.627451 +f3v5s30 f2v14s24 0.587302 +f1v8s15 f2v9s19 0.666667 +f1v8s15 f2v12s22 0.666667 +f1v8s15 f0v0s0 0.684211 +f1v8s15 f1v6s8 0.684211 +f1v8s15 f2v13s23 0.666667 +f1v8s15 f2v4s14 0.649123 +f1v8s15 f2v3s13 0.649123 +f1v8s15 f2v2s12 0.666667 +f1v8s15 f2v6s16 0.684211 +f1v8s15 f2v7s17 0.666667 +f1v8s15 f1v3s5 0.687500 +f1v8s15 f2v10s20 0.666667 +f1v8s15 f2v1s11 0.666667 +f1v8s15 f0v1s1 0.684211 +f1v8s15 f2v8s18 0.666667 +f1v8s15 f2v0s10 0.666667 +f1v8s15 f1v2s4 0.687500 +f1v8s15 f2v5s15 0.684211 +f1v8s15 f1v7s9 0.700000 +f1v8s15 f1v5s7 0.673469 +f1v8s15 f1v0s2 0.666667 +f1v8s15 f2v11s21 0.684211 +f1v8s15 f1v4s6 0.641509 +f1v8s15 f1v1s3 0.666667 +f1v8s15 f2v14s24 0.666667 +f2v1s23 f2v9s19 0.672414 +f2v1s23 f2v12s22 0.672414 +f2v1s23 f0v0s0 0.689655 +f2v1s23 f1v6s8 0.689655 +f2v1s23 f2v13s23 0.672414 +f2v1s23 f2v4s14 0.655172 +f2v1s23 f2v3s13 0.655172 +f2v1s23 f2v2s12 0.672414 +f2v1s23 f2v6s16 0.689655 +f2v1s23 f2v7s17 0.672414 +f2v1s23 f1v3s5 0.708333 +f2v1s23 f2v10s20 0.672414 +f2v1s23 f2v1s11 0.655172 +f2v1s23 f0v1s1 0.689655 +f2v1s23 f2v8s18 0.655172 +f2v1s23 f2v0s10 0.672414 +f2v1s23 f1v2s4 0.708333 +f2v1s23 f2v5s15 0.689655 +f2v1s23 f1v7s9 0.720000 +f2v1s23 f1v5s7 0.693878 +f2v1s23 f1v0s2 0.686275 +f2v1s23 f2v11s21 0.689655 +f2v1s23 f1v4s6 0.660377 +f2v1s23 f1v1s3 0.686275 +f2v1s23 f2v14s24 0.672414 +f4v2s42 f2v9s19 0.655738 +f4v2s42 f2v12s22 0.655738 +f4v2s42 f0v0s0 0.704918 +f4v2s42 f1v6s8 0.704918 +f4v2s42 f2v13s23 0.655738 +f4v2s42 f2v4s14 0.639344 +f4v2s42 f2v3s13 0.639344 +f4v2s42 f2v2s12 0.639344 +f4v2s42 f2v6s16 0.639344 +f4v2s42 f2v7s17 0.655738 +f4v2s42 f1v3s5 0.729167 +f4v2s42 f2v10s20 0.655738 +f4v2s42 f2v1s11 0.639344 +f4v2s42 f0v1s1 0.704918 +f4v2s42 f2v8s18 0.622951 +f4v2s42 f2v0s10 0.655738 +f4v2s42 f1v2s4 0.687500 +f4v2s42 f2v5s15 0.639344 +f4v2s42 f1v7s9 0.660000 +f4v2s42 f1v5s7 0.714286 +f4v2s42 f1v0s2 0.686275 +f4v2s42 f2v11s21 0.639344 +f4v2s42 f1v4s6 0.679245 +f4v2s42 f1v1s3 0.686275 +f4v2s42 f2v14s24 0.672131 +f0v4s4 f2v9s19 0.597015 +f0v4s4 f2v12s22 0.597015 +f0v4s4 f0v0s0 0.647059 +f0v4s4 f1v6s8 0.647059 +f0v4s4 f2v13s23 0.606061 +f0v4s4 f2v4s14 0.619048 +f0v4s4 f2v3s13 0.597015 +f0v4s4 f2v2s12 0.615385 +f0v4s4 f2v6s16 0.615385 +f0v4s4 f2v7s17 0.606061 +f0v4s4 f1v3s5 0.708333 +f0v4s4 f2v10s20 0.606061 +f0v4s4 f2v1s11 0.630769 +f0v4s4 f0v1s1 0.647059 +f0v4s4 f2v8s18 0.609375 +f0v4s4 f2v0s10 0.606061 +f0v4s4 f1v2s4 0.708333 +f0v4s4 f2v5s15 0.609375 +f0v4s4 f1v7s9 0.680000 +f0v4s4 f1v5s7 0.714286 +f0v4s4 f1v0s2 0.686275 +f0v4s4 f2v11s21 0.615385 +f0v4s4 f1v4s6 0.660377 +f0v4s4 f1v1s3 0.686275 +f0v4s4 f2v14s24 0.621212 +f1v6s13 f2v9s19 0.625000 +f1v6s13 f2v12s22 0.625000 +f1v6s13 f0v0s0 0.696429 +f1v6s13 f1v6s8 0.696429 +f1v6s13 f2v13s23 0.625000 +f1v6s13 f2v4s14 0.607143 +f1v6s13 f2v3s13 0.607143 +f1v6s13 f2v2s12 0.625000 +f1v6s13 f2v6s16 0.660714 +f1v6s13 f2v7s17 0.625000 +f1v6s13 f1v3s5 0.708333 +f1v6s13 f2v10s20 0.625000 +f1v6s13 f2v1s11 0.625000 +f1v6s13 f0v1s1 0.696429 +f1v6s13 f2v8s18 0.625000 +f1v6s13 f2v0s10 0.625000 +f1v6s13 f1v2s4 0.708333 +f1v6s13 f2v5s15 0.642857 +f1v6s13 f1v7s9 0.720000 +f1v6s13 f1v5s7 0.673469 +f1v6s13 f1v0s2 0.686275 +f1v6s13 f2v11s21 0.660714 +f1v6s13 f1v4s6 0.660377 +f1v6s13 f1v1s3 0.686275 +f1v6s13 f2v14s24 0.642857 +f3v8s33 f2v9s19 0.590909 +f3v8s33 f2v12s22 0.590909 +f3v8s33 f0v0s0 0.575758 +f3v8s33 f1v6s8 0.575758 +f3v8s33 f2v13s23 0.575758 +f3v8s33 f2v4s14 0.587302 +f3v8s33 f2v3s13 0.575758 +f3v8s33 f2v2s12 0.584615 +f3v8s33 f2v6s16 0.584615 +f3v8s33 f2v7s17 0.575758 +f3v8s33 f1v3s5 0.687500 +f3v8s33 f2v10s20 0.575758 +f3v8s33 f2v1s11 0.584615 +f3v8s33 f0v1s1 0.575758 +f3v8s33 f2v8s18 0.578125 +f3v8s33 f2v0s10 0.575758 +f3v8s33 f1v2s4 0.687500 +f3v8s33 f2v5s15 0.593750 +f3v8s33 f1v7s9 0.680000 +f3v8s33 f1v5s7 0.693878 +f3v8s33 f1v0s2 0.666667 +f3v8s33 f2v11s21 0.584615 +f3v8s33 f1v4s6 0.641509 +f3v8s33 f1v1s3 0.666667 +f3v8s33 f2v14s24 0.590909 +f1v1s8 f2v9s19 0.666667 +f1v1s8 f2v12s22 0.666667 +f1v1s8 f0v0s0 0.666667 +f1v1s8 f1v6s8 0.666667 +f1v1s8 f2v13s23 0.666667 +f1v1s8 f2v4s14 0.650000 +f1v1s8 f2v3s13 0.650000 +f1v1s8 f2v2s12 0.666667 +f1v1s8 f2v6s16 0.683333 +f1v1s8 f2v7s17 0.666667 +f1v1s8 f1v3s5 0.708333 +f1v1s8 f2v10s20 0.666667 +f1v1s8 f2v1s11 0.633333 +f1v1s8 f0v1s1 0.666667 +f1v1s8 f2v8s18 0.650000 +f1v1s8 f2v0s10 0.666667 +f1v1s8 f1v2s4 0.708333 +f1v1s8 f2v5s15 0.683333 +f1v1s8 f1v7s9 0.720000 +f1v1s8 f1v5s7 0.693878 +f1v1s8 f1v0s2 0.686275 +f1v1s8 f2v11s21 0.683333 +f1v1s8 f1v4s6 0.660377 +f1v1s8 f1v1s3 0.686275 +f1v1s8 f2v14s24 0.666667 +f1v14s21 f2v9s19 0.660714 +f1v14s21 f2v12s22 0.660714 +f1v14s21 f0v0s0 0.714286 +f1v14s21 f1v6s8 0.714286 +f1v14s21 f2v13s23 0.660714 +f1v14s21 f2v4s14 0.660714 +f1v14s21 f2v3s13 0.642857 +f1v14s21 f2v2s12 0.660714 +f1v14s21 f2v6s16 0.678571 +f1v14s21 f2v7s17 0.660714 +f1v14s21 f1v3s5 0.666667 +f1v14s21 f2v10s20 0.660714 +f1v14s21 f2v1s11 0.642857 +f1v14s21 f0v1s1 0.714286 +f1v14s21 f2v8s18 0.642857 +f1v14s21 f2v0s10 0.660714 +f1v14s21 f1v2s4 0.687500 +f1v14s21 f2v5s15 0.678571 +f1v14s21 f1v7s9 0.680000 +f1v14s21 f1v5s7 0.673469 +f1v14s21 f1v0s2 0.647059 +f1v14s21 f2v11s21 0.678571 +f1v14s21 f1v4s6 0.622642 +f1v14s21 f1v1s3 0.647059 +f1v14s21 f2v14s24 0.660714 +f0v1s1 f2v9s19 0.597015 +f0v1s1 f2v12s22 0.597015 +f0v1s1 f0v0s0 0.647059 +f0v1s1 f1v6s8 0.647059 +f0v1s1 f2v13s23 0.606061 +f0v1s1 f2v4s14 0.619048 +f0v1s1 f2v3s13 0.597015 +f0v1s1 f2v2s12 0.615385 +f0v1s1 f2v6s16 0.615385 +f0v1s1 f2v7s17 0.606061 +f0v1s1 f1v3s5 0.708333 +f0v1s1 f2v10s20 0.606061 +f0v1s1 f2v1s11 0.630769 +f0v1s1 f0v1s1 0.647059 +f0v1s1 f2v8s18 0.609375 +f0v1s1 f2v0s10 0.606061 +f0v1s1 f1v2s4 0.708333 +f0v1s1 f2v5s15 0.609375 +f0v1s1 f1v7s9 0.680000 +f0v1s1 f1v5s7 0.714286 +f0v1s1 f1v0s2 0.686275 +f0v1s1 f2v11s21 0.615385 +f0v1s1 f1v4s6 0.660377 +f0v1s1 f1v1s3 0.686275 +f0v1s1 f2v14s24 0.621212 +f1v5s12 f2v9s19 0.650000 +f1v5s12 f2v12s22 0.650000 +f1v5s12 f0v0s0 0.666667 +f1v5s12 f1v6s8 0.666667 +f1v5s12 f2v13s23 0.650000 +f1v5s12 f2v4s14 0.650000 +f1v5s12 f2v3s13 0.650000 +f1v5s12 f2v2s12 0.650000 +f1v5s12 f2v6s16 0.633333 +f1v5s12 f2v7s17 0.650000 +f1v5s12 f1v3s5 0.729167 +f1v5s12 f2v10s20 0.650000 +f1v5s12 f2v1s11 0.633333 +f1v5s12 f0v1s1 0.666667 +f1v5s12 f2v8s18 0.616667 +f1v5s12 f2v0s10 0.650000 +f1v5s12 f1v2s4 0.729167 +f1v5s12 f2v5s15 0.650000 +f1v5s12 f1v7s9 0.720000 +f1v5s12 f1v5s7 0.693878 +f1v5s12 f1v0s2 0.705882 +f1v5s12 f2v11s21 0.633333 +f1v5s12 f1v4s6 0.679245 +f1v5s12 f1v1s3 0.705882 +f1v5s12 f2v14s24 0.633333 +f1v4s11 f2v9s19 0.672414 +f1v4s11 f2v12s22 0.672414 +f1v4s11 f0v0s0 0.689655 +f1v4s11 f1v6s8 0.689655 +f1v4s11 f2v13s23 0.672414 +f1v4s11 f2v4s14 0.655172 +f1v4s11 f2v3s13 0.655172 +f1v4s11 f2v2s12 0.672414 +f1v4s11 f2v6s16 0.689655 +f1v4s11 f2v7s17 0.672414 +f1v4s11 f1v3s5 0.708333 +f1v4s11 f2v10s20 0.672414 +f1v4s11 f2v1s11 0.655172 +f1v4s11 f0v1s1 0.689655 +f1v4s11 f2v8s18 0.655172 +f1v4s11 f2v0s10 0.672414 +f1v4s11 f1v2s4 0.708333 +f1v4s11 f2v5s15 0.689655 +f1v4s11 f1v7s9 0.720000 +f1v4s11 f1v5s7 0.693878 +f1v4s11 f1v0s2 0.686275 +f1v4s11 f2v11s21 0.689655 +f1v4s11 f1v4s6 0.660377 +f1v4s11 f1v1s3 0.686275 +f1v4s11 f2v14s24 0.672414 +f1v9s16 f2v9s19 0.666667 +f1v9s16 f2v12s22 0.666667 +f1v9s16 f0v0s0 0.700000 +f1v9s16 f1v6s8 0.700000 +f1v9s16 f2v13s23 0.666667 +f1v9s16 f2v4s14 0.650000 +f1v9s16 f2v3s13 0.650000 +f1v9s16 f2v2s12 0.666667 +f1v9s16 f2v6s16 0.666667 +f1v9s16 f2v7s17 0.666667 +f1v9s16 f1v3s5 0.729167 +f1v9s16 f2v10s20 0.666667 +f1v9s16 f2v1s11 0.650000 +f1v9s16 f0v1s1 0.700000 +f1v9s16 f2v8s18 0.633333 +f1v9s16 f2v0s10 0.666667 +f1v9s16 f1v2s4 0.729167 +f1v9s16 f2v5s15 0.683333 +f1v9s16 f1v7s9 0.740000 +f1v9s16 f1v5s7 0.714286 +f1v9s16 f1v0s2 0.705882 +f1v9s16 f2v11s21 0.666667 +f1v9s16 f1v4s6 0.679245 +f1v9s16 f1v1s3 0.705882 +f1v9s16 f2v14s24 0.666667 +f1v10s17 f2v9s19 0.616667 +f1v10s17 f2v12s22 0.616667 +f1v10s17 f0v0s0 0.700000 +f1v10s17 f1v6s8 0.700000 +f1v10s17 f2v13s23 0.616667 +f1v10s17 f2v4s14 0.600000 +f1v10s17 f2v3s13 0.616667 +f1v10s17 f2v2s12 0.616667 +f1v10s17 f2v6s16 0.633333 +f1v10s17 f2v7s17 0.616667 +f1v10s17 f1v3s5 0.750000 +f1v10s17 f2v10s20 0.616667 +f1v10s17 f2v1s11 0.600000 +f1v10s17 f0v1s1 0.700000 +f1v10s17 f2v8s18 0.600000 +f1v10s17 f2v0s10 0.616667 +f1v10s17 f1v2s4 0.729167 +f1v10s17 f2v5s15 0.633333 +f1v10s17 f1v7s9 0.740000 +f1v10s17 f1v5s7 0.734694 +f1v10s17 f1v0s2 0.725490 +f1v10s17 f2v11s21 0.633333 +f1v10s17 f1v4s6 0.698113 +f1v10s17 f1v1s3 0.725490 +f1v10s17 f2v14s24 0.616667 +f1v0s7 f2v9s19 0.672414 +f1v0s7 f2v12s22 0.672414 +f1v0s7 f0v0s0 0.689655 +f1v0s7 f1v6s8 0.689655 +f1v0s7 f2v13s23 0.672414 +f1v0s7 f2v4s14 0.655172 +f1v0s7 f2v3s13 0.655172 +f1v0s7 f2v2s12 0.672414 +f1v0s7 f2v6s16 0.689655 +f1v0s7 f2v7s17 0.672414 +f1v0s7 f1v3s5 0.708333 +f1v0s7 f2v10s20 0.672414 +f1v0s7 f2v1s11 0.655172 +f1v0s7 f0v1s1 0.689655 +f1v0s7 f2v8s18 0.655172 +f1v0s7 f2v0s10 0.672414 +f1v0s7 f1v2s4 0.708333 +f1v0s7 f2v5s15 0.689655 +f1v0s7 f1v7s9 0.720000 +f1v0s7 f1v5s7 0.693878 +f1v0s7 f1v0s2 0.686275 +f1v0s7 f2v11s21 0.689655 +f1v0s7 f1v4s6 0.660377 +f1v0s7 f1v1s3 0.686275 +f1v0s7 f2v14s24 0.672414 +f3v9s34 f2v9s19 0.600000 +f3v9s34 f2v12s22 0.584615 +f3v9s34 f0v0s0 0.600000 +f3v9s34 f1v6s8 0.600000 +f3v9s34 f2v13s23 0.584615 +f3v9s34 f2v4s14 0.603175 +f3v9s34 f2v3s13 0.584615 +f3v9s34 f2v2s12 0.584615 +f3v9s34 f2v6s16 0.569231 +f3v9s34 f2v7s17 0.584615 +f3v9s34 f1v3s5 0.687500 +f3v9s34 f2v10s20 0.584615 +f3v9s34 f2v1s11 0.584615 +f3v9s34 f0v1s1 0.600000 +f3v9s34 f2v8s18 0.578125 +f3v9s34 f2v0s10 0.584615 +f3v9s34 f1v2s4 0.687500 +f3v9s34 f2v5s15 0.593750 +f3v9s34 f1v7s9 0.680000 +f3v9s34 f1v5s7 0.693878 +f3v9s34 f1v0s2 0.666667 +f3v9s34 f2v11s21 0.569231 +f3v9s34 f1v4s6 0.641509 +f3v9s34 f1v1s3 0.666667 +f3v9s34 f2v14s24 0.600000 +f4v0s40 f2v9s19 0.666667 +f4v0s40 f2v12s22 0.650000 +f4v0s40 f0v0s0 0.700000 +f4v0s40 f1v6s8 0.700000 +f4v0s40 f2v13s23 0.666667 +f4v0s40 f2v4s14 0.633333 +f4v0s40 f2v3s13 0.650000 +f4v0s40 f2v2s12 0.650000 +f4v0s40 f2v6s16 0.650000 +f4v0s40 f2v7s17 0.666667 +f4v0s40 f1v3s5 0.729167 +f4v0s40 f2v10s20 0.666667 +f4v0s40 f2v1s11 0.650000 +f4v0s40 f0v1s1 0.700000 +f4v0s40 f2v8s18 0.633333 +f4v0s40 f2v0s10 0.666667 +f4v0s40 f1v2s4 0.687500 +f4v0s40 f2v5s15 0.633333 +f4v0s40 f1v7s9 0.660000 +f4v0s40 f1v5s7 0.714286 +f4v0s40 f1v0s2 0.686275 +f4v0s40 f2v11s21 0.650000 +f4v0s40 f1v4s6 0.679245 +f4v0s40 f1v1s3 0.686275 +f4v0s40 f2v14s24 0.650000 +f1v7s14 f2v9s19 0.672414 +f1v7s14 f2v12s22 0.672414 +f1v7s14 f0v0s0 0.689655 +f1v7s14 f1v6s8 0.689655 +f1v7s14 f2v13s23 0.672414 +f1v7s14 f2v4s14 0.655172 +f1v7s14 f2v3s13 0.655172 +f1v7s14 f2v2s12 0.672414 +f1v7s14 f2v6s16 0.689655 +f1v7s14 f2v7s17 0.672414 +f1v7s14 f1v3s5 0.708333 +f1v7s14 f2v10s20 0.672414 +f1v7s14 f2v1s11 0.655172 +f1v7s14 f0v1s1 0.689655 +f1v7s14 f2v8s18 0.655172 +f1v7s14 f2v0s10 0.672414 +f1v7s14 f1v2s4 0.708333 +f1v7s14 f2v5s15 0.689655 +f1v7s14 f1v7s9 0.720000 +f1v7s14 f1v5s7 0.693878 +f1v7s14 f1v0s2 0.686275 +f1v7s14 f2v11s21 0.689655 +f1v7s14 f1v4s6 0.660377 +f1v7s14 f1v1s3 0.686275 +f1v7s14 f2v14s24 0.672414 +f3v2s27 f2v9s19 0.600000 +f3v2s27 f2v12s22 0.600000 +f3v2s27 f0v0s0 0.584615 +f3v2s27 f1v6s8 0.584615 +f3v2s27 f2v13s23 0.584615 +f3v2s27 f2v4s14 0.603175 +f3v2s27 f2v3s13 0.584615 +f3v2s27 f2v2s12 0.584615 +f3v2s27 f2v6s16 0.584615 +f3v2s27 f2v7s17 0.584615 +f3v2s27 f1v3s5 0.666667 +f3v2s27 f2v10s20 0.584615 +f3v2s27 f2v1s11 0.584615 +f3v2s27 f0v1s1 0.584615 +f3v2s27 f2v8s18 0.593750 +f3v2s27 f2v0s10 0.584615 +f3v2s27 f1v2s4 0.666667 +f3v2s27 f2v5s15 0.593750 +f3v2s27 f1v7s9 0.680000 +f3v2s27 f1v5s7 0.673469 +f3v2s27 f1v0s2 0.647059 +f3v2s27 f2v11s21 0.584615 +f3v2s27 f1v4s6 0.622642 +f3v2s27 f1v1s3 0.647059 +f3v2s27 f2v14s24 0.600000 +f4v1s41 f2v9s19 0.655738 +f4v1s41 f2v12s22 0.639344 +f4v1s41 f0v0s0 0.688525 +f4v1s41 f1v6s8 0.688525 +f4v1s41 f2v13s23 0.655738 +f4v1s41 f2v4s14 0.639344 +f4v1s41 f2v3s13 0.639344 +f4v1s41 f2v2s12 0.639344 +f4v1s41 f2v6s16 0.655738 +f4v1s41 f2v7s17 0.655738 +f4v1s41 f1v3s5 0.729167 +f4v1s41 f2v10s20 0.655738 +f4v1s41 f2v1s11 0.639344 +f4v1s41 f0v1s1 0.688525 +f4v1s41 f2v8s18 0.639344 +f4v1s41 f2v0s10 0.655738 +f4v1s41 f1v2s4 0.687500 +f4v1s41 f2v5s15 0.639344 +f4v1s41 f1v7s9 0.680000 +f4v1s41 f1v5s7 0.714286 +f4v1s41 f1v0s2 0.686275 +f4v1s41 f2v11s21 0.655738 +f4v1s41 f1v4s6 0.679245 +f4v1s41 f1v1s3 0.686275 +f4v1s41 f2v14s24 0.639344 +f2v0s22 f2v9s19 0.611940 +f2v0s22 f2v12s22 0.611940 +f2v0s22 f0v0s0 0.647059 +f2v0s22 f1v6s8 0.647059 +f2v0s22 f2v13s23 0.621212 +f2v0s22 f2v4s14 0.634921 +f2v0s22 f2v3s13 0.597015 +f2v0s22 f2v2s12 0.615385 +f2v0s22 f2v6s16 0.615385 +f2v0s22 f2v7s17 0.621212 +f2v0s22 f1v3s5 0.687500 +f2v0s22 f2v10s20 0.621212 +f2v0s22 f2v1s11 0.630769 +f2v0s22 f0v1s1 0.647059 +f2v0s22 f2v8s18 0.625000 +f2v0s22 f2v0s10 0.621212 +f2v0s22 f1v2s4 0.687500 +f2v0s22 f2v5s15 0.625000 +f2v0s22 f1v7s9 0.660000 +f2v0s22 f1v5s7 0.693878 +f2v0s22 f1v0s2 0.666667 +f2v0s22 f2v11s21 0.615385 +f2v0s22 f1v4s6 0.641509 +f2v0s22 f1v1s3 0.666667 +f2v0s22 f2v14s24 0.621212 +f1v2s9 f2v9s19 0.597015 +f1v2s9 f2v12s22 0.597015 +f1v2s9 f0v0s0 0.647059 +f1v2s9 f1v6s8 0.647059 +f1v2s9 f2v13s23 0.606061 +f1v2s9 f2v4s14 0.619048 +f1v2s9 f2v3s13 0.597015 +f1v2s9 f2v2s12 0.615385 +f1v2s9 f2v6s16 0.615385 +f1v2s9 f2v7s17 0.606061 +f1v2s9 f1v3s5 0.708333 +f1v2s9 f2v10s20 0.606061 +f1v2s9 f2v1s11 0.630769 +f1v2s9 f0v1s1 0.647059 +f1v2s9 f2v8s18 0.609375 +f1v2s9 f2v0s10 0.606061 +f1v2s9 f1v2s4 0.708333 +f1v2s9 f2v5s15 0.609375 +f1v2s9 f1v7s9 0.680000 +f1v2s9 f1v5s7 0.714286 +f1v2s9 f1v0s2 0.686275 +f1v2s9 f2v11s21 0.615385 +f1v2s9 f1v4s6 0.660377 +f1v2s9 f1v1s3 0.686275 +f1v2s9 f2v14s24 0.621212 +f1v3s10 f2v9s19 0.672414 +f1v3s10 f2v12s22 0.672414 +f1v3s10 f0v0s0 0.689655 +f1v3s10 f1v6s8 0.689655 +f1v3s10 f2v13s23 0.672414 +f1v3s10 f2v4s14 0.655172 +f1v3s10 f2v3s13 0.655172 +f1v3s10 f2v2s12 0.672414 +f1v3s10 f2v6s16 0.689655 +f1v3s10 f2v7s17 0.672414 +f1v3s10 f1v3s5 0.708333 +f1v3s10 f2v10s20 0.672414 +f1v3s10 f2v1s11 0.655172 +f1v3s10 f0v1s1 0.689655 +f1v3s10 f2v8s18 0.655172 +f1v3s10 f2v0s10 0.672414 +f1v3s10 f1v2s4 0.708333 +f1v3s10 f2v5s15 0.689655 +f1v3s10 f1v7s9 0.720000 +f1v3s10 f1v5s7 0.693878 +f1v3s10 f1v0s2 0.686275 +f1v3s10 f2v11s21 0.689655 +f1v3s10 f1v4s6 0.660377 +f1v3s10 f1v1s3 0.686275 +f1v3s10 f2v14s24 0.672414 +f3v0s25 f2v9s19 0.590909 +f3v0s25 f2v12s22 0.590909 +f3v0s25 f0v0s0 0.590909 +f3v0s25 f1v6s8 0.590909 +f3v0s25 f2v13s23 0.575758 +f3v0s25 f2v4s14 0.603175 +f3v0s25 f2v3s13 0.575758 +f3v0s25 f2v2s12 0.584615 +f3v0s25 f2v6s16 0.584615 +f3v0s25 f2v7s17 0.575758 +f3v0s25 f1v3s5 0.687500 +f3v0s25 f2v10s20 0.575758 +f3v0s25 f2v1s11 0.584615 +f3v0s25 f0v1s1 0.590909 +f3v0s25 f2v8s18 0.593750 +f3v0s25 f2v0s10 0.575758 +f3v0s25 f1v2s4 0.687500 +f3v0s25 f2v5s15 0.593750 +f3v0s25 f1v7s9 0.680000 +f3v0s25 f1v5s7 0.693878 +f3v0s25 f1v0s2 0.666667 +f3v0s25 f2v11s21 0.584615 +f3v0s25 f1v4s6 0.641509 +f3v0s25 f1v1s3 0.666667 +f3v0s25 f2v14s24 0.590909 +f3v3s28 f2v9s19 0.575758 +f3v3s28 f2v12s22 0.575758 +f3v3s28 f0v0s0 0.590909 +f3v3s28 f1v6s8 0.590909 +f3v3s28 f2v13s23 0.560606 +f3v3s28 f2v4s14 0.587302 +f3v3s28 f2v3s13 0.560606 +f3v3s28 f2v2s12 0.569231 +f3v3s28 f2v6s16 0.584615 +f3v3s28 f2v7s17 0.560606 +f3v3s28 f1v3s5 0.687500 +f3v3s28 f2v10s20 0.560606 +f3v3s28 f2v1s11 0.584615 +f3v3s28 f0v1s1 0.590909 +f3v3s28 f2v8s18 0.578125 +f3v3s28 f2v0s10 0.560606 +f3v3s28 f1v2s4 0.708333 +f3v3s28 f2v5s15 0.593750 +f3v3s28 f1v7s9 0.680000 +f3v3s28 f1v5s7 0.714286 +f3v3s28 f1v0s2 0.686275 +f3v3s28 f2v11s21 0.584615 +f3v3s28 f1v4s6 0.660377 +f3v3s28 f1v1s3 0.686275 +f3v3s28 f2v14s24 0.590909 +f3v13s38 f2v9s19 0.597015 +f3v13s38 f2v12s22 0.582090 +f3v13s38 f0v0s0 0.573529 +f3v13s38 f1v6s8 0.573529 +f3v13s38 f2v13s23 0.590909 +f3v13s38 f2v4s14 0.603175 +f3v13s38 f2v3s13 0.582090 +f3v13s38 f2v2s12 0.600000 +f3v13s38 f2v6s16 0.600000 +f3v13s38 f2v7s17 0.590909 +f3v13s38 f1v3s5 0.708333 +f3v13s38 f2v10s20 0.590909 +f3v13s38 f2v1s11 0.584615 +f3v13s38 f0v1s1 0.573529 +f3v13s38 f2v8s18 0.593750 +f3v13s38 f2v0s10 0.590909 +f3v13s38 f1v2s4 0.708333 +f3v13s38 f2v5s15 0.593750 +f3v13s38 f1v7s9 0.700000 +f3v13s38 f1v5s7 0.714286 +f3v13s38 f1v0s2 0.686275 +f3v13s38 f2v11s21 0.600000 +f3v13s38 f1v4s6 0.679245 +f3v13s38 f1v1s3 0.686275 +f3v13s38 f2v14s24 0.606061 +f3v7s32 f2v9s19 0.600000 +f3v7s32 f2v12s22 0.584615 +f3v7s32 f0v0s0 0.600000 +f3v7s32 f1v6s8 0.600000 +f3v7s32 f2v13s23 0.584615 +f3v7s32 f2v4s14 0.603175 +f3v7s32 f2v3s13 0.584615 +f3v7s32 f2v2s12 0.584615 +f3v7s32 f2v6s16 0.569231 +f3v7s32 f2v7s17 0.584615 +f3v7s32 f1v3s5 0.687500 +f3v7s32 f2v10s20 0.584615 +f3v7s32 f2v1s11 0.584615 +f3v7s32 f0v1s1 0.600000 +f3v7s32 f2v8s18 0.578125 +f3v7s32 f2v0s10 0.584615 +f3v7s32 f1v2s4 0.687500 +f3v7s32 f2v5s15 0.593750 +f3v7s32 f1v7s9 0.680000 +f3v7s32 f1v5s7 0.693878 +f3v7s32 f1v0s2 0.666667 +f3v7s32 f2v11s21 0.569231 +f3v7s32 f1v4s6 0.641509 +f3v7s32 f1v1s3 0.666667 +f3v7s32 f2v14s24 0.600000 +f3v1s26 f2v9s19 0.584615 +f3v1s26 f2v12s22 0.584615 +f3v1s26 f0v0s0 0.584615 +f3v1s26 f1v6s8 0.584615 +f3v1s26 f2v13s23 0.569231 +f3v1s26 f2v4s14 0.587302 +f3v1s26 f2v3s13 0.569231 +f3v1s26 f2v2s12 0.569231 +f3v1s26 f2v6s16 0.584615 +f3v1s26 f2v7s17 0.569231 +f3v1s26 f1v3s5 0.645833 +f3v1s26 f2v10s20 0.569231 +f3v1s26 f2v1s11 0.584615 +f3v1s26 f0v1s1 0.584615 +f3v1s26 f2v8s18 0.578125 +f3v1s26 f2v0s10 0.569231 +f3v1s26 f1v2s4 0.645833 +f3v1s26 f2v5s15 0.578125 +f3v1s26 f1v7s9 0.640000 +f3v1s26 f1v5s7 0.653061 +f3v1s26 f1v0s2 0.627451 +f3v1s26 f2v11s21 0.584615 +f3v1s26 f1v4s6 0.622642 +f3v1s26 f1v1s3 0.627451 +f3v1s26 f2v14s24 0.600000 +f3v6s31 f2v9s19 0.600000 +f3v6s31 f2v12s22 0.584615 +f3v6s31 f0v0s0 0.600000 +f3v6s31 f1v6s8 0.600000 +f3v6s31 f2v13s23 0.584615 +f3v6s31 f2v4s14 0.603175 +f3v6s31 f2v3s13 0.584615 +f3v6s31 f2v2s12 0.584615 +f3v6s31 f2v6s16 0.569231 +f3v6s31 f2v7s17 0.584615 +f3v6s31 f1v3s5 0.687500 +f3v6s31 f2v10s20 0.584615 +f3v6s31 f2v1s11 0.584615 +f3v6s31 f0v1s1 0.600000 +f3v6s31 f2v8s18 0.578125 +f3v6s31 f2v0s10 0.584615 +f3v6s31 f1v2s4 0.687500 +f3v6s31 f2v5s15 0.593750 +f3v6s31 f1v7s9 0.680000 +f3v6s31 f1v5s7 0.693878 +f3v6s31 f1v0s2 0.666667 +f3v6s31 f2v11s21 0.569231 +f3v6s31 f1v4s6 0.641509 +f3v6s31 f1v1s3 0.666667 +f3v6s31 f2v14s24 0.600000 +f1v13s20 f2v9s19 0.678571 +f1v13s20 f2v12s22 0.678571 +f1v13s20 f0v0s0 0.696429 +f1v13s20 f1v6s8 0.696429 +f1v13s20 f2v13s23 0.678571 +f1v13s20 f2v4s14 0.660714 +f1v13s20 f2v3s13 0.660714 +f1v13s20 f2v2s12 0.678571 +f1v13s20 f2v6s16 0.714286 +f1v13s20 f2v7s17 0.678571 +f1v13s20 f1v3s5 0.708333 +f1v13s20 f2v10s20 0.678571 +f1v13s20 f2v1s11 0.660714 +f1v13s20 f0v1s1 0.696429 +f1v13s20 f2v8s18 0.660714 +f1v13s20 f2v0s10 0.678571 +f1v13s20 f1v2s4 0.708333 +f1v13s20 f2v5s15 0.696429 +f1v13s20 f1v7s9 0.720000 +f1v13s20 f1v5s7 0.693878 +f1v13s20 f1v0s2 0.686275 +f1v13s20 f2v11s21 0.714286 +f1v13s20 f1v4s6 0.660377 +f1v13s20 f1v1s3 0.686275 +f1v13s20 f2v14s24 0.678571 +f2v2s24 f2v9s19 0.734694 +f2v2s24 f2v12s22 0.755102 +f2v2s24 f0v0s0 0.755102 +f2v2s24 f1v6s8 0.755102 +f2v2s24 f2v13s23 0.734694 +f2v2s24 f2v4s14 0.714286 +f2v2s24 f2v3s13 0.755102 +f2v2s24 f2v2s12 0.734694 +f2v2s24 f2v6s16 0.755102 +f2v2s24 f2v7s17 0.734694 +f2v2s24 f1v3s5 0.604167 +f2v2s24 f2v10s20 0.734694 +f2v2s24 f2v1s11 0.755102 +f2v2s24 f0v1s1 0.755102 +f2v2s24 f2v8s18 0.714286 +f2v2s24 f2v0s10 0.734694 +f2v2s24 f1v2s4 0.583333 +f2v2s24 f2v5s15 0.755102 +f2v2s24 f1v7s9 0.571429 +f2v2s24 f1v5s7 0.612245 +f2v2s24 f1v0s2 0.612245 +f2v2s24 f2v11s21 0.755102 +f2v2s24 f1v4s6 0.591837 +f2v2s24 f1v1s3 0.612245 +f2v2s24 f2v14s24 0.734694 +f3v11s36 f2v9s19 0.600000 +f3v11s36 f2v12s22 0.584615 +f3v11s36 f0v0s0 0.600000 +f3v11s36 f1v6s8 0.600000 +f3v11s36 f2v13s23 0.584615 +f3v11s36 f2v4s14 0.603175 +f3v11s36 f2v3s13 0.584615 +f3v11s36 f2v2s12 0.584615 +f3v11s36 f2v6s16 0.569231 +f3v11s36 f2v7s17 0.584615 +f3v11s36 f1v3s5 0.645833 +f3v11s36 f2v10s20 0.584615 +f3v11s36 f2v1s11 0.584615 +f3v11s36 f0v1s1 0.600000 +f3v11s36 f2v8s18 0.578125 +f3v11s36 f2v0s10 0.584615 +f3v11s36 f1v2s4 0.666667 +f3v11s36 f2v5s15 0.593750 +f3v11s36 f1v7s9 0.660000 +f3v11s36 f1v5s7 0.653061 +f3v11s36 f1v0s2 0.627451 +f3v11s36 f2v11s21 0.569231 +f3v11s36 f1v4s6 0.641509 +f3v11s36 f1v1s3 0.627451 +f3v11s36 f2v14s24 0.569231 +f0v5s5 f2v9s19 0.597015 +f0v5s5 f2v12s22 0.597015 +f0v5s5 f0v0s0 0.632353 +f0v5s5 f1v6s8 0.632353 +f0v5s5 f2v13s23 0.606061 +f0v5s5 f2v4s14 0.619048 +f0v5s5 f2v3s13 0.597015 +f0v5s5 f2v2s12 0.600000 +f0v5s5 f2v6s16 0.600000 +f0v5s5 f2v7s17 0.606061 +f0v5s5 f1v3s5 0.687500 +f0v5s5 f2v10s20 0.606061 +f0v5s5 f2v1s11 0.615385 +f0v5s5 f0v1s1 0.632353 +f0v5s5 f2v8s18 0.609375 +f0v5s5 f2v0s10 0.606061 +f0v5s5 f1v2s4 0.708333 +f0v5s5 f2v5s15 0.609375 +f0v5s5 f1v7s9 0.680000 +f0v5s5 f1v5s7 0.714286 +f0v5s5 f1v0s2 0.686275 +f0v5s5 f2v11s21 0.600000 +f0v5s5 f1v4s6 0.660377 +f0v5s5 f1v1s3 0.686275 +f0v5s5 f2v14s24 0.621212 +f1v11s18 f2v9s19 0.672414 +f1v11s18 f2v12s22 0.672414 +f1v11s18 f0v0s0 0.706897 +f1v11s18 f1v6s8 0.706897 +f1v11s18 f2v13s23 0.672414 +f1v11s18 f2v4s14 0.655172 +f1v11s18 f2v3s13 0.655172 +f1v11s18 f2v2s12 0.672414 +f1v11s18 f2v6s16 0.689655 +f1v11s18 f2v7s17 0.672414 +f1v11s18 f1v3s5 0.708333 +f1v11s18 f2v10s20 0.672414 +f1v11s18 f2v1s11 0.655172 +f1v11s18 f0v1s1 0.706897 +f1v11s18 f2v8s18 0.655172 +f1v11s18 f2v0s10 0.672414 +f1v11s18 f1v2s4 0.708333 +f1v11s18 f2v5s15 0.689655 +f1v11s18 f1v7s9 0.720000 +f1v11s18 f1v5s7 0.693878 +f1v11s18 f1v0s2 0.686275 +f1v11s18 f2v11s21 0.689655 +f1v11s18 f1v4s6 0.660377 +f1v11s18 f1v1s3 0.686275 +f1v11s18 f2v14s24 0.672414 +f0v6s6 f2v9s19 0.597015 +f0v6s6 f2v12s22 0.597015 +f0v6s6 f0v0s0 0.632353 +f0v6s6 f1v6s8 0.632353 +f0v6s6 f2v13s23 0.606061 +f0v6s6 f2v4s14 0.619048 +f0v6s6 f2v3s13 0.597015 +f0v6s6 f2v2s12 0.615385 +f0v6s6 f2v6s16 0.615385 +f0v6s6 f2v7s17 0.606061 +f0v6s6 f1v3s5 0.687500 +f0v6s6 f2v10s20 0.606061 +f0v6s6 f2v1s11 0.630769 +f0v6s6 f0v1s1 0.632353 +f0v6s6 f2v8s18 0.609375 +f0v6s6 f2v0s10 0.606061 +f0v6s6 f1v2s4 0.666667 +f0v6s6 f2v5s15 0.609375 +f0v6s6 f1v7s9 0.660000 +f0v6s6 f1v5s7 0.673469 +f0v6s6 f1v0s2 0.647059 +f0v6s6 f2v11s21 0.615385 +f0v6s6 f1v4s6 0.641509 +f0v6s6 f1v1s3 0.647059 +f0v6s6 f2v14s24 0.636364 +f3v4s29 f2v9s19 0.582090 +f3v4s29 f2v12s22 0.597015 +f3v4s29 f0v0s0 0.588235 +f3v4s29 f1v6s8 0.588235 +f3v4s29 f2v13s23 0.590909 +f3v4s29 f2v4s14 0.619048 +f3v4s29 f2v3s13 0.582090 +f3v4s29 f2v2s12 0.600000 +f3v4s29 f2v6s16 0.600000 +f3v4s29 f2v7s17 0.590909 +f3v4s29 f1v3s5 0.687500 +f3v4s29 f2v10s20 0.590909 +f3v4s29 f2v1s11 0.584615 +f3v4s29 f0v1s1 0.588235 +f3v4s29 f2v8s18 0.609375 +f3v4s29 f2v0s10 0.590909 +f3v4s29 f1v2s4 0.687500 +f3v4s29 f2v5s15 0.593750 +f3v4s29 f1v7s9 0.680000 +f3v4s29 f1v5s7 0.693878 +f3v4s29 f1v0s2 0.666667 +f3v4s29 f2v11s21 0.600000 +f3v4s29 f1v4s6 0.641509 +f3v4s29 f1v1s3 0.666667 +f3v4s29 f2v14s24 0.590909 +f0v2s2 f2v9s19 0.611940 +f0v2s2 f2v12s22 0.611940 +f0v2s2 f0v0s0 0.647059 +f0v2s2 f1v6s8 0.647059 +f0v2s2 f2v13s23 0.621212 +f0v2s2 f2v4s14 0.634921 +f0v2s2 f2v3s13 0.597015 +f0v2s2 f2v2s12 0.615385 +f0v2s2 f2v6s16 0.615385 +f0v2s2 f2v7s17 0.621212 +f0v2s2 f1v3s5 0.687500 +f0v2s2 f2v10s20 0.621212 +f0v2s2 f2v1s11 0.630769 +f0v2s2 f0v1s1 0.647059 +f0v2s2 f2v8s18 0.625000 +f0v2s2 f2v0s10 0.621212 +f0v2s2 f1v2s4 0.687500 +f0v2s2 f2v5s15 0.625000 +f0v2s2 f1v7s9 0.660000 +f0v2s2 f1v5s7 0.693878 +f0v2s2 f1v0s2 0.666667 +f0v2s2 f2v11s21 0.615385 +f0v2s2 f1v4s6 0.641509 +f0v2s2 f1v1s3 0.666667 +f0v2s2 f2v14s24 0.621212 +f3v12s37 f2v9s19 0.611940 +f3v12s37 f2v12s22 0.597015 +f3v12s37 f0v0s0 0.597015 +f3v12s37 f1v6s8 0.597015 +f3v12s37 f2v13s23 0.606061 +f3v12s37 f2v4s14 0.634921 +f3v12s37 f2v3s13 0.597015 +f3v12s37 f2v2s12 0.615385 +f3v12s37 f2v6s16 0.600000 +f3v12s37 f2v7s17 0.606061 +f3v12s37 f1v3s5 0.687500 +f3v12s37 f2v10s20 0.606061 +f3v12s37 f2v1s11 0.600000 +f3v12s37 f0v1s1 0.597015 +f3v12s37 f2v8s18 0.625000 +f3v12s37 f2v0s10 0.606061 +f3v12s37 f1v2s4 0.708333 +f3v12s37 f2v5s15 0.609375 +f3v12s37 f1v7s9 0.700000 +f3v12s37 f1v5s7 0.714286 +f3v12s37 f1v0s2 0.686275 +f3v12s37 f2v11s21 0.600000 +f3v12s37 f1v4s6 0.660377 +f3v12s37 f1v1s3 0.686275 +f3v12s37 f2v14s24 0.606061 +f0v3s3 f2v9s19 0.597015 +f0v3s3 f2v12s22 0.597015 +f0v3s3 f0v0s0 0.626866 +f0v3s3 f1v6s8 0.626866 +f0v3s3 f2v13s23 0.606061 +f0v3s3 f2v4s14 0.619048 +f0v3s3 f2v3s13 0.582090 +f0v3s3 f2v2s12 0.600000 +f0v3s3 f2v6s16 0.600000 +f0v3s3 f2v7s17 0.606061 +f0v3s3 f1v3s5 0.708333 +f0v3s3 f2v10s20 0.606061 +f0v3s3 f2v1s11 0.615385 +f0v3s3 f0v1s1 0.626866 +f0v3s3 f2v8s18 0.609375 +f0v3s3 f2v0s10 0.606061 +f0v3s3 f1v2s4 0.708333 +f0v3s3 f2v5s15 0.609375 +f0v3s3 f1v7s9 0.680000 +f0v3s3 f1v5s7 0.693878 +f0v3s3 f1v0s2 0.666667 +f0v3s3 f2v11s21 0.600000 +f0v3s3 f1v4s6 0.641509 +f0v3s3 f1v1s3 0.666667 +f0v3s3 f2v14s24 0.606061 +f3v14s39 f2v9s19 0.590909 +f3v14s39 f2v12s22 0.590909 +f3v14s39 f0v0s0 0.590909 +f3v14s39 f1v6s8 0.590909 +f3v14s39 f2v13s23 0.575758 +f3v14s39 f2v4s14 0.603175 +f3v14s39 f2v3s13 0.575758 +f3v14s39 f2v2s12 0.584615 +f3v14s39 f2v6s16 0.584615 +f3v14s39 f2v7s17 0.575758 +f3v14s39 f1v3s5 0.687500 +f3v14s39 f2v10s20 0.575758 +f3v14s39 f2v1s11 0.584615 +f3v14s39 f0v1s1 0.590909 +f3v14s39 f2v8s18 0.593750 +f3v14s39 f2v0s10 0.575758 +f3v14s39 f1v2s4 0.687500 +f3v14s39 f2v5s15 0.593750 +f3v14s39 f1v7s9 0.680000 +f3v14s39 f1v5s7 0.693878 +f3v14s39 f1v0s2 0.666667 +f3v14s39 f2v11s21 0.584615 +f3v14s39 f1v4s6 0.641509 +f3v14s39 f1v1s3 0.666667 +f3v14s39 f2v14s24 0.590909 +f0v0s0 f2v9s19 0.597015 +f0v0s0 f2v12s22 0.597015 +f0v0s0 f0v0s0 0.647059 +f0v0s0 f1v6s8 0.647059 +f0v0s0 f2v13s23 0.606061 +f0v0s0 f2v4s14 0.619048 +f0v0s0 f2v3s13 0.582090 +f0v0s0 f2v2s12 0.615385 +f0v0s0 f2v6s16 0.615385 +f0v0s0 f2v7s17 0.606061 +f0v0s0 f1v3s5 0.708333 +f0v0s0 f2v10s20 0.606061 +f0v0s0 f2v1s11 0.630769 +f0v0s0 f0v1s1 0.647059 +f0v0s0 f2v8s18 0.609375 +f0v0s0 f2v0s10 0.606061 +f0v0s0 f1v2s4 0.708333 +f0v0s0 f2v5s15 0.609375 +f0v0s0 f1v7s9 0.680000 +f0v0s0 f1v5s7 0.714286 +f0v0s0 f1v0s2 0.686275 +f0v0s0 f2v11s21 0.615385 +f0v0s0 f1v4s6 0.660377 +f0v0s0 f1v1s3 0.686275 +f0v0s0 f2v14s24 0.621212 +f1v12s19 f2v9s19 0.666667 +f1v12s19 f2v12s22 0.666667 +f1v12s19 f0v0s0 0.701754 +f1v12s19 f1v6s8 0.701754 +f1v12s19 f2v13s23 0.666667 +f1v12s19 f2v4s14 0.649123 +f1v12s19 f2v3s13 0.649123 +f1v12s19 f2v2s12 0.666667 +f1v12s19 f2v6s16 0.684211 +f1v12s19 f2v7s17 0.666667 +f1v12s19 f1v3s5 0.687500 +f1v12s19 f2v10s20 0.666667 +f1v12s19 f2v1s11 0.649123 +f1v12s19 f0v1s1 0.701754 +f1v12s19 f2v8s18 0.649123 +f1v12s19 f2v0s10 0.666667 +f1v12s19 f1v2s4 0.687500 +f1v12s19 f2v5s15 0.684211 +f1v12s19 f1v7s9 0.700000 +f1v12s19 f1v5s7 0.673469 +f1v12s19 f1v0s2 0.666667 +f1v12s19 f2v11s21 0.684211 +f1v12s19 f1v4s6 0.641509 +f1v12s19 f1v1s3 0.666667 +f1v12s19 f2v14s24 0.666667 diff --git a/pkg/obitools/obialign/testdata/two_default.expected b/pkg/obitools/obialign/testdata/two_default.expected new file mode 100644 index 0000000..e69de29 diff --git a/pkg/obitools/obialign/testdata/two_distance.expected b/pkg/obitools/obialign/testdata/two_distance.expected new file mode 100644 index 0000000..e69de29 diff --git a/pkg/obitools/obialign/testdata/two_longest.expected b/pkg/obitools/obialign/testdata/two_longest.expected new file mode 100644 index 0000000..e69de29 diff --git a/pkg/obitools/obialign/testdata/two_low.expected b/pkg/obitools/obialign/testdata/two_low.expected new file mode 100644 index 0000000..e69de29 diff --git a/pkg/obitools/obialign/testdata/two_rawdist.expected b/pkg/obitools/obialign/testdata/two_rawdist.expected new file mode 100644 index 0000000..e69de29 diff --git a/pkg/obitools/obialign/testdata/two_rawlcs.expected b/pkg/obitools/obialign/testdata/two_rawlcs.expected new file mode 100644 index 0000000..76ec3d5 --- /dev/null +++ b/pkg/obitools/obialign/testdata/two_rawlcs.expected @@ -0,0 +1,265 @@ +f3v10s35 f2v9s19 40.000000 +f3v10s35 f2v12s22 40.000000 +f3v10s35 f2v6s16 40.000000 +f3v10s35 f2v1s11 40.000000 +f3v10s35 f2v11s21 40.000000 +f3v10s35 f2v14s24 40.000000 +f2v1s23 f0v0s0 40.000000 +f2v1s23 f1v6s8 40.000000 +f2v1s23 f2v6s16 40.000000 +f2v1s23 f0v1s1 40.000000 +f2v1s23 f2v5s15 40.000000 +f2v1s23 f2v11s21 40.000000 +f4v2s42 f2v9s19 40.000000 +f4v2s42 f2v12s22 40.000000 +f4v2s42 f0v0s0 43.000000 +f4v2s42 f1v6s8 43.000000 +f4v2s42 f2v13s23 40.000000 +f4v2s42 f2v7s17 40.000000 +f4v2s42 f2v10s20 40.000000 +f4v2s42 f0v1s1 43.000000 +f4v2s42 f2v0s10 40.000000 +f4v2s42 f2v14s24 41.000000 +f0v4s4 f2v9s19 40.000000 +f0v4s4 f2v12s22 40.000000 +f0v4s4 f0v0s0 44.000000 +f0v4s4 f1v6s8 44.000000 +f0v4s4 f2v13s23 40.000000 +f0v4s4 f2v3s13 40.000000 +f0v4s4 f2v2s12 40.000000 +f0v4s4 f2v6s16 40.000000 +f0v4s4 f2v7s17 40.000000 +f0v4s4 f2v10s20 40.000000 +f0v4s4 f2v1s11 41.000000 +f0v4s4 f0v1s1 44.000000 +f0v4s4 f2v0s10 40.000000 +f0v4s4 f2v11s21 40.000000 +f0v4s4 f2v14s24 41.000000 +f1v1s8 f2v9s19 40.000000 +f1v1s8 f2v12s22 40.000000 +f1v1s8 f0v0s0 40.000000 +f1v1s8 f1v6s8 40.000000 +f1v1s8 f2v13s23 40.000000 +f1v1s8 f2v2s12 40.000000 +f1v1s8 f2v6s16 41.000000 +f1v1s8 f2v7s17 40.000000 +f1v1s8 f2v10s20 40.000000 +f1v1s8 f0v1s1 40.000000 +f1v1s8 f2v0s10 40.000000 +f1v1s8 f2v5s15 41.000000 +f1v1s8 f2v11s21 41.000000 +f1v1s8 f2v14s24 40.000000 +f1v14s21 f0v0s0 40.000000 +f1v14s21 f1v6s8 40.000000 +f1v14s21 f0v1s1 40.000000 +f0v1s1 f2v9s19 40.000000 +f0v1s1 f2v12s22 40.000000 +f0v1s1 f0v0s0 44.000000 +f0v1s1 f1v6s8 44.000000 +f0v1s1 f2v13s23 40.000000 +f0v1s1 f2v3s13 40.000000 +f0v1s1 f2v2s12 40.000000 +f0v1s1 f2v6s16 40.000000 +f0v1s1 f2v7s17 40.000000 +f0v1s1 f2v10s20 40.000000 +f0v1s1 f2v1s11 41.000000 +f0v1s1 f0v1s1 44.000000 +f0v1s1 f2v0s10 40.000000 +f0v1s1 f2v11s21 40.000000 +f0v1s1 f2v14s24 41.000000 +f1v5s12 f0v0s0 40.000000 +f1v5s12 f1v6s8 40.000000 +f1v5s12 f0v1s1 40.000000 +f1v4s11 f0v0s0 40.000000 +f1v4s11 f1v6s8 40.000000 +f1v4s11 f2v6s16 40.000000 +f1v4s11 f0v1s1 40.000000 +f1v4s11 f2v5s15 40.000000 +f1v4s11 f2v11s21 40.000000 +f1v9s16 f2v9s19 40.000000 +f1v9s16 f2v12s22 40.000000 +f1v9s16 f0v0s0 42.000000 +f1v9s16 f1v6s8 42.000000 +f1v9s16 f2v13s23 40.000000 +f1v9s16 f2v2s12 40.000000 +f1v9s16 f2v6s16 40.000000 +f1v9s16 f2v7s17 40.000000 +f1v9s16 f2v10s20 40.000000 +f1v9s16 f0v1s1 42.000000 +f1v9s16 f2v0s10 40.000000 +f1v9s16 f2v5s15 41.000000 +f1v9s16 f2v11s21 40.000000 +f1v9s16 f2v14s24 40.000000 +f1v10s17 f0v0s0 42.000000 +f1v10s17 f1v6s8 42.000000 +f1v10s17 f0v1s1 42.000000 +f1v0s7 f0v0s0 40.000000 +f1v0s7 f1v6s8 40.000000 +f1v0s7 f2v6s16 40.000000 +f1v0s7 f0v1s1 40.000000 +f1v0s7 f2v5s15 40.000000 +f1v0s7 f2v11s21 40.000000 +f4v0s40 f2v9s19 40.000000 +f4v0s40 f0v0s0 42.000000 +f4v0s40 f1v6s8 42.000000 +f4v0s40 f2v13s23 40.000000 +f4v0s40 f2v7s17 40.000000 +f4v0s40 f2v10s20 40.000000 +f4v0s40 f0v1s1 42.000000 +f4v0s40 f2v0s10 40.000000 +f1v7s14 f0v0s0 40.000000 +f1v7s14 f1v6s8 40.000000 +f1v7s14 f2v6s16 40.000000 +f1v7s14 f0v1s1 40.000000 +f1v7s14 f2v5s15 40.000000 +f1v7s14 f2v11s21 40.000000 +f4v1s41 f2v9s19 40.000000 +f4v1s41 f0v0s0 42.000000 +f4v1s41 f1v6s8 42.000000 +f4v1s41 f2v13s23 40.000000 +f4v1s41 f2v6s16 40.000000 +f4v1s41 f2v7s17 40.000000 +f4v1s41 f2v10s20 40.000000 +f4v1s41 f0v1s1 42.000000 +f4v1s41 f2v0s10 40.000000 +f4v1s41 f2v11s21 40.000000 +f2v0s22 f2v9s19 41.000000 +f2v0s22 f2v12s22 41.000000 +f2v0s22 f0v0s0 44.000000 +f2v0s22 f1v6s8 44.000000 +f2v0s22 f2v13s23 41.000000 +f2v0s22 f2v4s14 40.000000 +f2v0s22 f2v3s13 40.000000 +f2v0s22 f2v2s12 40.000000 +f2v0s22 f2v6s16 40.000000 +f2v0s22 f2v7s17 41.000000 +f2v0s22 f2v10s20 41.000000 +f2v0s22 f2v1s11 41.000000 +f2v0s22 f0v1s1 44.000000 +f2v0s22 f2v8s18 40.000000 +f2v0s22 f2v0s10 41.000000 +f2v0s22 f2v5s15 40.000000 +f2v0s22 f2v11s21 40.000000 +f2v0s22 f2v14s24 41.000000 +f1v2s9 f2v9s19 40.000000 +f1v2s9 f2v12s22 40.000000 +f1v2s9 f0v0s0 44.000000 +f1v2s9 f1v6s8 44.000000 +f1v2s9 f2v13s23 40.000000 +f1v2s9 f2v3s13 40.000000 +f1v2s9 f2v2s12 40.000000 +f1v2s9 f2v6s16 40.000000 +f1v2s9 f2v7s17 40.000000 +f1v2s9 f2v10s20 40.000000 +f1v2s9 f2v1s11 41.000000 +f1v2s9 f0v1s1 44.000000 +f1v2s9 f2v0s10 40.000000 +f1v2s9 f2v11s21 40.000000 +f1v2s9 f2v14s24 41.000000 +f1v3s10 f0v0s0 40.000000 +f1v3s10 f1v6s8 40.000000 +f1v3s10 f2v6s16 40.000000 +f1v3s10 f0v1s1 40.000000 +f1v3s10 f2v5s15 40.000000 +f1v3s10 f2v11s21 40.000000 +f3v13s38 f2v9s19 40.000000 +f3v13s38 f2v14s24 40.000000 +f1v13s20 f2v6s16 40.000000 +f1v13s20 f2v11s21 40.000000 +f0v5s5 f2v9s19 40.000000 +f0v5s5 f2v12s22 40.000000 +f0v5s5 f0v0s0 43.000000 +f0v5s5 f1v6s8 43.000000 +f0v5s5 f2v13s23 40.000000 +f0v5s5 f2v3s13 40.000000 +f0v5s5 f2v7s17 40.000000 +f0v5s5 f2v10s20 40.000000 +f0v5s5 f2v1s11 40.000000 +f0v5s5 f0v1s1 43.000000 +f0v5s5 f2v0s10 40.000000 +f0v5s5 f2v14s24 41.000000 +f1v11s18 f0v0s0 41.000000 +f1v11s18 f1v6s8 41.000000 +f1v11s18 f2v6s16 40.000000 +f1v11s18 f0v1s1 41.000000 +f1v11s18 f2v5s15 40.000000 +f1v11s18 f2v11s21 40.000000 +f0v6s6 f2v9s19 40.000000 +f0v6s6 f2v12s22 40.000000 +f0v6s6 f0v0s0 43.000000 +f0v6s6 f1v6s8 43.000000 +f0v6s6 f2v13s23 40.000000 +f0v6s6 f2v3s13 40.000000 +f0v6s6 f2v2s12 40.000000 +f0v6s6 f2v6s16 40.000000 +f0v6s6 f2v7s17 40.000000 +f0v6s6 f2v10s20 40.000000 +f0v6s6 f2v1s11 41.000000 +f0v6s6 f0v1s1 43.000000 +f0v6s6 f2v0s10 40.000000 +f0v6s6 f2v11s21 40.000000 +f0v6s6 f2v14s24 42.000000 +f3v4s29 f2v12s22 40.000000 +f3v4s29 f0v0s0 40.000000 +f3v4s29 f1v6s8 40.000000 +f3v4s29 f0v1s1 40.000000 +f0v2s2 f2v9s19 41.000000 +f0v2s2 f2v12s22 41.000000 +f0v2s2 f0v0s0 44.000000 +f0v2s2 f1v6s8 44.000000 +f0v2s2 f2v13s23 41.000000 +f0v2s2 f2v4s14 40.000000 +f0v2s2 f2v3s13 40.000000 +f0v2s2 f2v2s12 40.000000 +f0v2s2 f2v6s16 40.000000 +f0v2s2 f2v7s17 41.000000 +f0v2s2 f2v10s20 41.000000 +f0v2s2 f2v1s11 41.000000 +f0v2s2 f0v1s1 44.000000 +f0v2s2 f2v8s18 40.000000 +f0v2s2 f2v0s10 41.000000 +f0v2s2 f2v5s15 40.000000 +f0v2s2 f2v11s21 40.000000 +f0v2s2 f2v14s24 41.000000 +f3v12s37 f2v9s19 41.000000 +f3v12s37 f2v12s22 40.000000 +f3v12s37 f0v0s0 40.000000 +f3v12s37 f1v6s8 40.000000 +f3v12s37 f2v13s23 40.000000 +f3v12s37 f2v4s14 40.000000 +f3v12s37 f2v3s13 40.000000 +f3v12s37 f2v2s12 40.000000 +f3v12s37 f2v7s17 40.000000 +f3v12s37 f2v10s20 40.000000 +f3v12s37 f0v1s1 40.000000 +f3v12s37 f2v8s18 40.000000 +f3v12s37 f2v0s10 40.000000 +f3v12s37 f2v14s24 40.000000 +f0v3s3 f2v9s19 40.000000 +f0v3s3 f2v12s22 40.000000 +f0v3s3 f0v0s0 42.000000 +f0v3s3 f1v6s8 42.000000 +f0v3s3 f2v13s23 40.000000 +f0v3s3 f2v7s17 40.000000 +f0v3s3 f2v10s20 40.000000 +f0v3s3 f2v1s11 40.000000 +f0v3s3 f0v1s1 42.000000 +f0v3s3 f2v0s10 40.000000 +f0v3s3 f2v14s24 40.000000 +f0v0s0 f2v9s19 40.000000 +f0v0s0 f2v12s22 40.000000 +f0v0s0 f0v0s0 44.000000 +f0v0s0 f1v6s8 44.000000 +f0v0s0 f2v13s23 40.000000 +f0v0s0 f2v2s12 40.000000 +f0v0s0 f2v6s16 40.000000 +f0v0s0 f2v7s17 40.000000 +f0v0s0 f2v10s20 40.000000 +f0v0s0 f2v1s11 41.000000 +f0v0s0 f0v1s1 44.000000 +f0v0s0 f2v0s10 40.000000 +f0v0s0 f2v11s21 40.000000 +f0v0s0 f2v14s24 41.000000 +f1v12s19 f0v0s0 40.000000 +f1v12s19 f1v6s8 40.000000 +f1v12s19 f0v1s1 40.000000 diff --git a/pkg/obitools/obialign/testdata/two_rawlcs_shortest.expected b/pkg/obitools/obialign/testdata/two_rawlcs_shortest.expected new file mode 100644 index 0000000..e69de29 diff --git a/pkg/obitools/obialign/testdata/two_shortest.expected b/pkg/obitools/obialign/testdata/two_shortest.expected new file mode 100644 index 0000000..e69de29 diff --git a/pkg/obitools/obiclust/centers.go b/pkg/obitools/obiclust/centers.go deleted file mode 100644 index c88cf83..0000000 --- a/pkg/obitools/obiclust/centers.go +++ /dev/null @@ -1,136 +0,0 @@ -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 -} diff --git a/pkg/obitools/obiclust/cluster.go b/pkg/obitools/obiclust/cluster.go index 2e8835e..7f3c7ae 100644 --- a/pkg/obitools/obiclust/cluster.go +++ b/pkg/obitools/obiclust/cluster.go @@ -6,6 +6,7 @@ import ( "sync/atomic" "git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obialign" + sim "git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obisimilarity" ) // clustering is the state of the star clustering of the distinct sequences, @@ -32,16 +33,16 @@ import ( // 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 + entries []sim.Entry + sc *sim.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 + index *sim.Index + fresh []sim.Member // 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 @@ -54,7 +55,7 @@ type attachment struct { score float64 } -func newClustering(entries []entry, sc *scoring, fast bool, workers int) *clustering { +func newClustering(entries []sim.Entry, sc *sim.Scoring, fast bool, workers int) *clustering { c := &clustering{ entries: entries, sc: sc, @@ -67,26 +68,32 @@ func newClustering(entries []entry, sc *scoring, fast bool, workers int) *cluste for i := range c.center { c.center[i] = -1 } - c.set = newCenterSet(simdBlockWidth()) + c.index = sim.NewIndex() return c } func (c *clustering) addCenter(i int) { - c.fresh = append(c.fresh, c.set.add(c.entries[i], i)) + c.fresh = append(c.fresh, c.index.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) + c.score[i] = c.sc.SelfScore(c.entries[i].Length) +} + +// selects tells if a pair of score s, ok telling that it was scored, must +// replace the best attachment found so far. +func (c *clustering) selects(s float64, ok bool, best attachment) bool { + return ok && c.sc.Passes(s) && (best.center < 0 || c.sc.Beats(s, best.score)) } // 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 { +func (c *clustering) compare(i int, cents []sim.Member, 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} + s, ok := c.sc.PairScore(&c.entries[i], ¢s[k].Entry, -1, buf) + if c.selects(s, ok, best) { + best = attachment{cents[k].ID, s} if c.fast { break } @@ -162,7 +169,7 @@ func (c *clustering) run(progress func(done int)) { } unmatched++ *a = c.compare(i, c.fresh, *a, &c.bufs[0]) - if a.center < 0 && !c.entries[i].ambiguous { + if a.center < 0 && !c.entries[i].Ambiguous { newCenters = append(newCenters, i) c.addCenter(i) } @@ -181,7 +188,7 @@ func (c *clustering) run(progress func(done int)) { 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) + c.score[i] = c.sc.Reported(a.score) } } diff --git a/pkg/obitools/obiclust/kmer4.go b/pkg/obitools/obiclust/kmer4.go deleted file mode 100644 index 71db5bd..0000000 --- a/pkg/obitools/obiclust/kmer4.go +++ /dev/null @@ -1,47 +0,0 @@ -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) -} diff --git a/pkg/obitools/obiclust/kmer4_nosimd.go b/pkg/obitools/obiclust/kmer4_nosimd.go deleted file mode 100644 index 01e32a4..0000000 --- a/pkg/obitools/obiclust/kmer4_nosimd.go +++ /dev/null @@ -1,14 +0,0 @@ -//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) -} diff --git a/pkg/obitools/obiclust/kmer4_test.go b/pkg/obitools/obiclust/kmer4_test.go deleted file mode 100644 index 66e8f34..0000000 --- a/pkg/obitools/obiclust/kmer4_test.go +++ /dev/null @@ -1,71 +0,0 @@ -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) - } - } -} diff --git a/pkg/obitools/obiclust/obiclust.go b/pkg/obitools/obiclust/obiclust.go index 1342db5..298454c 100644 --- a/pkg/obitools/obiclust/obiclust.go +++ b/pkg/obitools/obiclust/obiclust.go @@ -2,57 +2,18 @@ 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" + sim "git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obisimilarity" "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 @@ -60,7 +21,7 @@ type Params struct { 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 + Reference sim.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) @@ -84,34 +45,20 @@ func ParamsFromCLI() Params { } // 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) { +func newScoring(p Params, entries []sim.Entry) *sim.Scoring { + if p.Threshold <= 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, + sc, err := sim.NewScoring(sim.Params{ + Threshold: p.Threshold, + Normalized: p.Normalized, + Distance: p.Distance, + Reference: p.Reference, + Ratio: p.Ratio, + }, entries) + if err != nil { + log.Fatalf("Please specify a threshold > 0, and < 1 when scores are normalized: %v", err) } - 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 } @@ -153,19 +100,22 @@ func Cluster(db obiseq.BioSequenceSlice, p Params, progress func(done, total int } log.Infof("%d distinct sequences", len(groups)) - entries := buildEntries(recs, groups, p.Workers) + entries := sim.BuildEntries(len(groups), func(g int) ([]byte, int, bool) { + head := &recs[groups[g].start] + return head.clean, groups[g].count, head.ambiguous + }, p.Workers) for i := range entries { - if entries[i].length > obialign.MaxBandedLCSLength { + 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) + 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) + if sc.SimilarityLike() { + log.Infof("Clustering sequences when similarity >= %f", sc.Threshold()) } else { - log.Infof("Clustering sequences when distance <= %f", sc.threshold) + log.Infof("Clustering sequences when distance <= %f", sc.Threshold()) } cl := newClustering(entries, sc, !p.Exact, p.Workers) @@ -185,10 +135,11 @@ func CLIOBIClust(iterator obiiter.IBioSequence) obiiter.IBioSequence { log.Infof("Sequence dataset of %d sequences loaded", len(db)) var bar *progressbar.ProgressBar + barChecked := false // the bar is created once, even when it is disabled last := 0 res := Cluster(db, ParamsFromCLI(), func(done, total int) { - if bar == nil { - bar = progressBar(total) + if !barChecked { + bar, barChecked = progressBar(total), true } if bar != nil { bar.Add(done - last) diff --git a/pkg/obitools/obiclust/obiclust_test.go b/pkg/obitools/obiclust/obiclust_test.go index fff004e..d5a61ff 100644 --- a/pkg/obitools/obiclust/obiclust_test.go +++ b/pkg/obitools/obiclust/obiclust_test.go @@ -12,6 +12,7 @@ import ( "git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obialign" "git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obiseq" + sim "git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obisimilarity" ) // readTestFasta reads a fasta file whose headers are "id count=N; key=V;". @@ -75,11 +76,11 @@ func paramsFromSumaclust(t testing.TB, args []string) Params { case "-e": p.Exact = true case "-l": - p.Reference = refShortest + p.Reference = sim.RefShortest case "-L": - p.Reference = refLongest + p.Reference = sim.RefLongest case "-a": - p.Reference = refAlignment + p.Reference = sim.RefAlignment case "-d": p.Distance = true case "-r": @@ -138,37 +139,37 @@ func TestSumaclustResults(t *testing.T) { } // referenceCluster transcribes the sequential algorithm of sumaclust. -func referenceCluster(entries []entry, sc *scoring, fast bool) (center []int, score []float64) { +func referenceCluster(entries []sim.Entry, sc *sim.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 + best, bestScore := -1, 0.0 for _, c := range centers { - s := sc.pairScore(&entries[i], &entries[c], -1, &buf) - if sc.selects(s, scoremax) { - scoremax, best = s, c + s, ok := sc.PairScore(&entries[i], &entries[c], -1, &buf) + if ok && sc.Passes(s) && (best < 0 || sc.Beats(s, bestScore)) { + best, bestScore = c, s if fast { break } } } if best >= 0 { - center[i], score[i] = best, sc.memberScore(scoremax) - } else if entries[i].ambiguous { + center[i], score[i] = best, sc.Reported(bestScore) + } else if entries[i].Ambiguous { center[i] = -1 } else { - center[i], score[i] = i, sc.centerScore(entries[i].length) + center[i], score[i] = i, sc.SelfScore(entries[i].Length) centers = append(centers, i) } } return center, score } -func randomEntries(rng *rand.Rand, n int) []entry { +func randomEntries(rng *rand.Rand, n int) []sim.Entry { var roots [][]byte - entries := make([]entry, 0, n) + entries := make([]sim.Entry, 0, n) for len(entries) < n { var s []byte if len(roots) == 0 || rng.Intn(5) == 0 { @@ -191,8 +192,8 @@ func randomEntries(rng *rand.Rand, n int) []entry { } } } - tab := buildTable4(s) - entries = append(entries, entry{seq: s, length: len(s), count: 1 + rng.Intn(20), table: tab, sparse: sparseWords(tab)}) + tab := sim.NewTable4(s) + entries = append(entries, sim.Entry{Seq: s, Length: len(s), Count: 1 + rng.Intn(20), Table: tab, Sparse: sim.SparseWords(tab)}) } return entries } @@ -202,22 +203,25 @@ func randomEntries(rng *rand.Rand, n int) []entry { // 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}, + scorings := []sim.Params{ + {Threshold: 0.9, Normalized: true, Reference: sim.RefAlignment, Ratio: 1}, + {Threshold: 0.85, Normalized: true, Reference: sim.RefShortest, Ratio: 2}, + {Threshold: 0.9, Normalized: true, Distance: true, Reference: sim.RefLongest, Ratio: 1}, + {Threshold: 35, Reference: sim.RefAlignment, Ratio: 1}, + {Threshold: 5, Distance: true, Reference: sim.RefAlignment, Ratio: 1}, } for round := 0; round < 4; round++ { entries := randomEntries(rng, 300) for si := range scorings { - sc := scorings[si] + sc, err := sim.NewScoring(scorings[si], entries) + if err != nil { + t.Fatal(err) + } for _, fast := range []bool{true, false} { - wantCenter, wantScore := referenceCluster(entries, &sc, fast) + 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 := newClustering(entries, sc, fast, workers) cl.blockMin, cl.blockMax = blocks[0], blocks[1] cl.run(func(int) {}) for i := range entries { @@ -233,28 +237,6 @@ func TestParallelClusteringIsSequential(t *testing.T) { } } -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) @@ -353,82 +335,3 @@ func TestAmbiguousSequences(t *testing.T) { } } } - -// 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) - } - } - } -} diff --git a/pkg/obitools/obiclust/options.go b/pkg/obitools/obiclust/options.go index 00a4217..5cf7ae2 100644 --- a/pkg/obitools/obiclust/options.go +++ b/pkg/obitools/obiclust/options.go @@ -1,21 +1,12 @@ package obiclust import ( + sim "git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obisimilarity" "git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obitools/obiconvert" "github.com/DavidGamba/go-getoptions" log "github.com/sirupsen/logrus" ) -// 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 ( - refAlignment reference = iota - refLongest - refShortest -) - var _threshold = 0.97 var _ratio = 1.0 var _exact = false @@ -76,7 +67,7 @@ func ObiclustOptionSet(options *getoptions.GetOpt) { 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).")) + "can be considered as a variant of the more abundant one.")) options.StringVar(&_sortKey, "sort", _sortKey, options.Alias("s"), @@ -133,16 +124,16 @@ func CLINormalized() bool { } // CLIReference returns the length used as reference to normalize the score. -func CLIReference() reference { +func CLIReference() sim.Reference { n := 0 - ref := refAlignment + ref := sim.RefAlignment if _refShortest { n++ - ref = refShortest + ref = sim.RefShortest } if _refLongest { n++ - ref = refLongest + ref = sim.RefLongest } if _refAlignment { n++ diff --git a/pkg/obitools/obiclust/prepare.go b/pkg/obitools/obiclust/prepare.go index 73a0f7a..c40f9a8 100644 --- a/pkg/obitools/obiclust/prepare.go +++ b/pkg/obitools/obiclust/prepare.go @@ -7,6 +7,7 @@ import ( "strings" "git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obiseq" + sim "git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obisimilarity" "git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obiutils" log "github.com/sirupsen/logrus" ) @@ -30,45 +31,6 @@ type group struct { 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 { @@ -120,12 +82,12 @@ func prepare(db obiseq.BioSequenceSlice, key string, ascending, acceptAmbiguous discarded := 0 for pos, s := range db { - clean, ambiguous := classify(s.Sequence(), acceptAmbiguous) - if clean == nil { + ok, ambiguous := sim.Classify(s.Sequence(), acceptAmbiguous) + if !ok { discarded++ continue } - r := record{seq: s, pos: pos, clean: clean, count: s.Count(), ambiguous: ambiguous} + r := record{seq: s, pos: pos, clean: s.Sequence(), count: s.Count(), ambiguous: ambiguous} if key != "None" { r.key = sortKeyOf(s, key) } diff --git a/pkg/obitools/obiclust/scan.go b/pkg/obitools/obiclust/scan.go new file mode 100644 index 0000000..e92c450 --- /dev/null +++ b/pkg/obitools/obiclust/scan.go @@ -0,0 +1,63 @@ +package obiclust + +import ( + "math" + + "git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obialign" + sim "git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obisimilarity" +) + +// scan compares entry i with all the centers of the index, 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 +// not match. In each bucket the first match is the one of lowest rank, so the +// first match of the whole index 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] + + best := attachment{-1, 0} + bestRank := math.MaxInt + var commons sim.Commons + + for _, length := range c.index.Lengths() { + if !c.sc.LengthCompatible(q.Length, length) { + continue + } + b := c.index.Bucket(length) + commons.Reset() + local := attachment{-1, 0} + localRank := 0 + + for k := range b.Members { + m := &b.Members[k] + if c.fast && m.Rank > bestRank { + break // a center of lower rank has been found in another bucket + } + s, ok := c.sc.PairScore(q, &m.Entry, b.Common(k, q.Sparse, &commons), buf) + if c.selects(s, ok, local) { + local, localRank = attachment{m.ID, s}, m.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 +} diff --git a/pkg/obitools/obiclust/score.go b/pkg/obitools/obiclust/score.go deleted file mode 100644 index 5d13a08..0000000 --- a/pkg/obitools/obiclust/score.go +++ /dev/null @@ -1,233 +0,0 @@ -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 -}