Mercurial > repos > iuc > hyphy_slac
changeset 40:e46726cd0c9e draft default tip
planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/main/tools/hyphy commit cee1ce4bd7d82088b9bf62403bc175c13223e020
| author | iuc |
|---|---|
| date | Wed, 11 Mar 2026 11:14:01 +0000 |
| parents | 307b6a9a520b |
| children | |
| files | macros.xml scripts/hyphy_summary.py scripts/infer_stasis_clusters.py test-data/bstill-in1.json |
| diffstat | 4 files changed, 2053 insertions(+), 681 deletions(-) [+] |
line wrap: on
line diff
--- a/macros.xml Wed Feb 25 20:56:08 2026 +0000 +++ b/macros.xml Wed Mar 11 11:14:01 2026 +0000 @@ -1,7 +1,7 @@ <?xml version="1.0"?> <macros> - <token name="@TOOL_VERSION@">2.5.93</token> - <token name="@VERSION_SUFFIX@">3</token> + <token name="@TOOL_VERSION@">2.5.96</token> + <token name="@VERSION_SUFFIX@">0</token> <token name="@PROFILE@">24.0</token> <token name="@SHELL_OPTIONS@">export TERM="vt100"; </token>
--- a/scripts/hyphy_summary.py Wed Feb 25 20:56:08 2026 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,679 +0,0 @@ -import argparse -import json -import re -from collections import defaultdict - -import BioExt -from Bio import SeqIO -from Bio.Seq import Seq -from Bio.SeqRecord import SeqRecord -from BioExt.uds import _align_par - - -class HyPhySummary(object): - - def __init__(self, arguments, summary_json=None, annotation_json=None): - self.arguments = arguments - self.ref_map = '' - self.summary_json = {} - self.annotation_json = {} - self.include_in_annotation = {} - self.test_map = {} - self.site_reports = {} - self.labels = {} - self.ref_seq_map = [] - self.cfel = {} - self.relax = {} - self.busted = {} - self.slac = {} - self.fel = {} - self.meme = {} - self.meme_full = {} - self.prime = {} - self.fade = {} - self.bgm = {} - self.ref_genes = [ - ['genome', 'ATTAAAGGTTTATACCTTCCCAGGTAACAAACCAACCAACTTTCGATCTCTTGTAGATCTGTTCTCTAAACGAACTTTAAAATCTGTGTGGCTGTCACTCGGCTGCATGCTTAGTGCACTCACGCAGTATAATTAATAACTAATTACTGTCGTTGACAGGACACGAGTAACTCGTCTATCTTCTGCAGGCTGCTTACGGTTTCGTCCGTGTTGCAGCCGATCATCAGCACATCTAGGTTTCGTCCGGGTGTGACCGAAAGGTAAGATGGAGAGCCTTGTCCCTGGTTTCAACGAGAAAACACACGTCCAACTCAGTTTGCCTGTTTTACAGGTTCGCGACGTGCTCGTACGTGGCTTTGGAGACTCCGTGGAGGAGGTCTTATCAGAGGCACGTCAACATCTTAAAGATGGCACTTGTGGCTTAGTAGAAGTTGAAAAAGGCGTTTTGCCTCAACTTGAACAGCCCTATGTGTTCATCAAACGTTCGGATGCTCGAACTGCACCTCATGGTCATGTTATGGTTGAGCTGGTAGCAGAACTCGAAGGCATTCAGTACGGTCGTAGTGGTGAGACACTTGGTGTCCTTGTCCCTCATGTGGGCGAAATACCAGTGGCTTACCGCAAGGTTCTTCTTCGTAAGAACGGTAATAAAGGAGCTGGTGGCCATAGTTACGGCGCCGATCTAAAGTCATTTGACTTAGGCGACGAGCTTGGCACTGATCCTTATGAAGATTTTCAAGAAAACTGGAACACTAAACATAGCAGTGGTGTTACCCGTGAACTCATGCGTGAGCTTAACGGAGGGGCATACACTCGCTATGTCGATAACAACTTCTGTGGCCCTGATGGCTACCCTCTTGAGTGCATTAAAGACCTTCTAGCACGTGCTGGTAAAGCTTCATGCACTTTGTCCGAACAACTGGACTTTATTGACACTAAGAGGGGTGTATACTGCTGCCGTGAACATGAGCATGAAATTGCTTGGTACACGGAACGTTCTGAAAAGAGCTATGAATTGCAGACACCTTTTGAAATTAAATTGGCAAAGAAATTTGACACCTTCAATGGGGAATGTCCAAATTTTGTATTTCCCTTAAATTCCATAATCAAGACTATTCAACCAAGGGTTGAAAAGAAAAAGCTTGATGGCTTTATGGGTAGAATTCGATCTGTCTATCCAGTTGCGTCACCAAATGAATGCAACCAAATGTGCCTTTCAACTCTCATGAAGTGTGATCATTGTGGTGAAACTTCATGGCAGACGGGCGATTTTGTTAAAGCCACTTGCGAATTTTGTGGCACTGAGAATTTGACTAAAGAAGGTGCCACTACTTGTGGTTACTTACCCCAAAATGCTGTTGTTAAAATTTATTGTCCAGCATGTCACAATTCAGAAGTAGGACCTGAGCATAGTCTTGCCGAATACCATAATGAATCTGGCTTGAAAACCATTCTTCGTAAGGGTGGTCGCACTATTGCCTTTGGAGGCTGTGTGTTCTCTTATGTTGGTTGCCATAACAAGTGTGCCTATTGGGTTCCACGTGCTAGCGCTAACATAGGTTGTAACCATACAGGTGTTGTTGGAGAAGGTTCCGAAGGTCTTAATGACAACCTTCTTGAAATACTCCAAAAAGAGAAAGTCAACATCAATATTGTTGGTGACTTTAAACTTAATGAAGAGATCGCCATTATTTTGGCATCTTTTTCTGCTTCCACAAGTGCTTTTGTGGAAACTGTGAAAGGTTTGGATTATAAAGCATTCAAACAAATTGTTGAATCCTGTGGTAATTTTAAAGTTACAAAAGGAAAAGCTAAAAAAGGTGCCTGGAATATTGGTGAACAGAAATCAATACTGAGTCCTCTTTATGCATTTGCATCAGAGGCTGCTCGTGTTGTACGATCAATTTTCTCCCGCACTCTTGAAACTGCTCAAAATTCTGTGCGTGTTTTACAGAAGGCCGCTATAACAATACTAGATGGAATTTCACAGTATTCACTGAGACTCATTGATGCTATGATGTTCACATCTGATTTGGCTACTAACAATCTAGTTGTAATGGCCTACATTACAGGTGGTGTTGTTCAGTTGACTTCGCAGTGGCTAACTAACATCTTTGGCACTGTTTATGAAAAACTCAAACCCGTCCTTGATTGGCTTGAAGAGAAGTTTAAGGAAGGTGTAGAGTTTCTTAGAGACGGTTGGGAAATTGTTAAATTTATCTCAACCTGTGCTTGTGAAATTGTCGGTGGACAAATTGTCACCTGTGCAAAGGAAATTAAGGAGAGTGTTCAGACATTCTTTAAGCTTGTAAATAAATTTTTGGCTTTGTGTGCTGACTCTATCATTATTGGTGGAGCTAAACTTAAAGCCTTGAATTTAGGTGAAACATTTGTCACGCACTCAAAGGGATTGTACAGAAAGTGTGTTAAATCCAGAGAAGAAACTGGCCTACTCATGCCTCTAAAAGCCCCAAAAGAAATTATCTTCTTAGAGGGAGAAACACTTCCCACAGAAGTGTTAACAGAGGAAGTTGTCTTGAAAACTGGTGATTTACAACCATTAGAACAACCTACTAGTGAAGCTGTTGAAGCTCCATTGGTTGGTACACCAGTTTGTATTAACGGGCTTATGTTGCTCGAAATCAAAGACACAGAAAAGTACTGTGCCCTTGCACCTAATATGATGGTAACAAACAATACCTTCACACTCAAAGGCGGTGCACCAACAAAGGTTACTTTTGGTGATGACACTGTGATAGAAGTGCAAGGTTACAAGAGTGTGAATATCACTTTTGAACTTGATGAAAGGATTGATAAAGTACTTAATGAGAAGTGCTCTGCCTATACAGTTGAACTCGGTACAGAAGTAAATGAGTTCGCCTGTGTTGTGGCAGATGCTGTCATAAAAACTTTGCAACCAGTATCTGAATTACTTACACCACTGGGCATTGATTTAGATGAGTGGAGTATGGCTACATACTACTTATTTGATGAGTCTGGTGAGTTTAAATTGGCTTCACATATGTATTGTTCTTTCTACCCTCCAGATGAGGATGAAGAAGAAGGTGATTGTGAAGAAGAAGAGTTTGAGCCATCAACTCAATATGAGTATGGTACTGAAGATGATTACCAAGGTAAACCTTTGGAATTTGGTGCCACTTCTGCTGCTCTTCAACCTGAAGAAGAGCAAGAAGAAGATTGGTTAGATGATGATAGTCAACAAACTGTTGGTCAACAAGACGGCAGTGAGGACAATCAGACAACTACTATTCAAACAATTGTTGAGGTTCAACCTCAATTAGAGATGGAACTTACACCAGTTGTTCAGACTATTGAAGTGAATAGTTTTAGTGGTTATTTAAAACTTACTGACAATGTATACATTAAAAATGCAGACATTGTGGAAGAAGCTAAAAAGGTAAAACCAACAGTGGTTGTTAATGCAGCCAATGTTTACCTTAAACATGGAGGAGGTGTTGCAGGAGCCTTAAATAAGGCTACTAACAATGCCATGCAAGTTGAATCTGATGATTACATAGCTACTAATGGACCACTTAAAGTGGGTGGTAGTTGTGTTTTAAGCGGACACAATCTTGCTAAACACTGTCTTCATGTTGTCGGCCCAAATGTTAACAAAGGTGAAGACATTCAACTTCTTAAGAGTGCTTATGAAAATTTTAATCAGCACGAAGTTCTACTTGCACCATTATTATCAGCTGGTATTTTTGGTGCTGACCCTATACATTCTTTAAGAGTTTGTGTAGATACTGTTCGCACAAATGTCTACTTAGCTGTCTTTGATAAAAATCTCTATGACAAACTTGTTTCAAGCTTTTTGGAAATGAAGAGTGAAAAGCAAGTTGAACAAAAGATCGCTGAGATTCCTAAAGAGGAAGTTAAGCCATTTATAACTGAAAGTAAACCTTCAGTTGAACAGAGAAAACAAGATGATAAGAAAATCAAAGCTTGTGTTGAAGAAGTTACAACAACTCTGGAAGAAACTAAGTTCCTCACAGAAAACTTGTTACTTTATATTGACATTAATGGCAATCTTCATCCAGATTCTGCCACTCTTGTTAGTGACATTGACATCACTTTCTTAAAGAAAGATGCTCCATATATAGTGGGTGATGTTGTTCAAGAGGGTGTTTTAACTGCTGTGGTTATACCTACTAAAAAGGCTGGTGGCACTACTGAAATGCTAGCGAAAGCTTTGAGAAAAGTGCCAACAGACAATTATATAACCACTTACCCGGGTCAGGGTTTAAATGGTTACACTGTAGAGGAGGCAAAGACAGTGCTTAAAAAGTGTAAAAGTGCCTTTTACATTCTACCATCTATTATCTCTAATGAGAAGCAAGAAATTCTTGGAACTGTTTCTTGGAATTTGCGAGAAATGCTTGCACATGCAGAAGAAACACGCAAATTAATGCCTGTCTGTGTGGAAACTAAAGCCATAGTTTCAACTATACAGCGTAAATATAAGGGTATTAAAATACAAGAGGGTGTGGTTGATTATGGTGCTAGATTTTACTTTTACACCAGTAAAACAACTGTAGCGTCACTTATCAACACACTTAACGATCTAAATGAAACTCTTGTTACAATGCCACTTGGCTATGTAACACATGGCTTAAATTTGGAAGAAGCTGCTCGGTATATGAGATCTCTCAAAGTGCCAGCTACAGTTTCTGTTTCTTCACCTGATGCTGTTACAGCGTATAATGGTTATCTTACTTCTTCTTCTAAAACACCTGAAGAACATTTTATTGAAACCATCTCACTTGCTGGTTCCTATAAAGATTGGTCCTATTCTGGACAATCTACACAACTAGGTATAGAATTTCTTAAGAGAGGTGATAAAAGTGTATATTACACTAGTAATCCTACCACATTCCACCTAGATGGTGAAGTTATCACCTTTGACAATCTTAAGACACTTCTTTCTTTGAGAGAAGTGAGGACTATTAAGGTGTTTACAACAGTAGACAACATTAACCTCCACACGCAAGTTGTGGACATGTCAATGACATATGGACAACAGTTTGGTCCAACTTATTTGGATGGAGCTGATGTTACTAAAATAAAACCTCATAATTCACATGAAGGTAAAACATTTTATGTTTTACCTAATGATGACACTCTACGTGTTGAGGCTTTTGAGTACTACCACACAACTGATCCTAGTTTTCTGGGTAGGTACATGTCAGCATTAAATCACACTAAAAAGTGGAAATACCCACAAGTTAATGGTTTAACTTCTATTAAATGGGCAGATAACAACTGTTATCTTGCCACTGCATTGTTAACACTCCAACAAATAGAGTTGAAGTTTAATCCACCTGCTCTACAAGATGCTTATTACAGAGCAAGGGCTGGTGAAGCTGCTAACTTTTGTGCACTTATCTTAGCCTACTGTAATAAGACAGTAGGTGAGTTAGGTGATGTTAGAGAAACAATGAGTTACTTGTTTCAACATGCCAATTTAGATTCTTGCAAAAGAGTCTTGAACGTGGTGTGTAAAACTTGTGGACAACAGCAGACAACCCTTAAGGGTGTAGAAGCTGTTATGTACATGGGCACACTTTCTTATGAACAATTTAAGAAAGGTGTTCAGATACCTTGTACGTGTGGTAAACAAGCTACAAAATATCTAGTACAACAGGAGTCACCTTTTGTTATGATGTCAGCACCACCTGCTCAGTATGAACTTAAGCATGGTACATTTACTTGTGCTAGTGAGTACACTGGTAATTACCAGTGTGGTCACTATAAACATATAACTTCTAAAGAAACTTTGTATTGCATAGACGGTGCTTTACTTACAAAGTCCTCAGAATACAAAGGTCCTATTACGGATGTTTTCTACAAAGAAAACAGTTACACAACAACCATAAAACCAGTTACTTATAAATTGGATGGTGTTGTTTGTACAGAAATTGACCCTAAGTTGGACAATTATTATAAGAAAGACAATTCTTATTTCACAGAGCAACCAATTGATCTTGTACCAAACCAACCATATCCAAACGCAAGCTTCGATAATTTTAAGTTTGTATGTGATAATATCAAATTTGCTGATGATTTAAACCAGTTAACTGGTTATAAGAAACCTGCTTCAAGAGAGCTTAAAGTTACATTTTTCCCTGACTTAAATGGTGATGTGGTGGCTATTGATTATAAACACTACACACCCTCTTTTAAGAAAGGAGCTAAATTGTTACATAAACCTATTGTTTGGCATGTTAACAATGCAACTAATAAAGCCACGTATAAACCAAATACCTGGTGTATACGTTGTCTTTGGAGCACAAAACCAGTTGAAACATCAAATTCGTTTGATGTACTGAAGTCAGAGGACGCGCAGGGAATGGATAATCTTGCCTGCGAAGATCTAAAACCAGTCTCTGAAGAAGTAGTGGAAAATCCTACCATACAGAAAGACGTTCTTGAGTGTAATGTGAAAACTACCGAAGTTGTAGGAGACATTATACTTAAACCAGCAAATAATAGTTTAAAAATTACAGAAGAGGTTGGCCACACAGATCTAATGGCTGCTTATGTAGACAATTCTAGTCTTACTATTAAGAAACCTAATGAATTATCTAGAGTATTAGGTTTGAAAACCCTTGCTACTCATGGTTTAGCTGCTGTTAATAGTGTCCCTTGGGATACTATAGCTAATTATGCTAAGCCTTTTCTTAACAAAGTTGTTAGTACAACTACTAACATAGTTACACGGTGTTTAAACCGTGTTTGTACTAATTATATGCCTTATTTCTTTACTTTATTGCTACAATTGTGTACTTTTACTAGAAGTACAAATTCTAGAATTAAAGCATCTATGCCGACTACTATAGCAAAGAATACTGTTAAGAGTGTCGGTAAATTTTGTCTAGAGGCTTCATTTAATTATTTGAAGTCACCTAATTTTTCTAAACTGATAAATATTATAATTTGGTTTTTACTATTAAGTGTTTGCCTAGGTTCTTTAATCTACTCAACCGCTGCTTTAGGTGTTTTAATGTCTAATTTAGGCATGCCTTCTTACTGTACTGGTTACAGAGAAGGCTATTTGAACTCTACTAATGTCACTATTGCAACCTACTGTACTGGTTCTATACCTTGTAGTGTTTGTCTTAGTGGTTTAGATTCTTTAGACACCTATCCTTCTTTAGAAACTATACAAATTACCATTTCATCTTTTAAATGGGATTTAACTGCTTTTGGCTTAGTTGCAGAGTGGTTTTTGGCATATATTCTTTTCACTAGGTTTTTCTATGTACTTGGATTGGCTGCAATCATGCAATTGTTTTTCAGCTATTTTGCAGTACATTTTATTAGTAATTCTTGGCTTATGTGGTTAATAATTAATCTTGTACAAATGGCCCCGATTTCAGCTATGGTTAGAATGTACATCTTCTTTGCATCATTTTATTATGTATGGAAAAGTTATGTGCATGTTGTAGACGGTTGTAATTCATCAACTTGTATGATGTGTTACAAACGTAATAGAGCAACAAGAGTCGAATGTACAACTATTGTTAATGGTGTTAGAAGGTCCTTTTATGTCTATGCTAATGGAGGTAAAGGCTTTTGCAAACTACACAATTGGAATTGTGTTAATTGTGATACATTCTGTGCTGGTAGTACATTTATTAGTGATGAAGTTGCGAGAGACTTGTCACTACAGTTTAAAAGACCAATAAATCCTACTGACCAGTCTTCTTACATCGTTGATAGTGTTACAGTGAAGAATGGTTCCATCCATCTTTACTTTGATAAAGCTGGTCAAAAGACTTATGAAAGACATTCTCTCTCTCATTTTGTTAACTTAGACAACCTGAGAGCTAATAACACTAAAGGTTCATTGCCTATTAATGTTATAGTTTTTGATGGTAAATCAAAATGTGAAGAATCATCTGCAAAATCAGCGTCTGTTTACTACAGTCAGCTTATGTGTCAACCTATACTGTTACTAGATCAGGCATTAGTGTCTGATGTTGGTGATAGTGCGGAAGTTGCAGTTAAAATGTTTGATGCTTACGTTAATACGTTTTCATCAACTTTTAACGTACCAATGGAAAAACTCAAAACACTAGTTGCAACTGCAGAAGCTGAACTTGCAAAGAATGTGTCCTTAGACAATGTCTTATCTACTTTTATTTCAGCAGCTCGGCAAGGGTTTGTTGATTCAGATGTAGAAACTAAAGATGTTGTTGAATGTCTTAAATTGTCACATCAATCTGACATAGAAGTTACTGGCGATAGTTGTAATAACTATATGCTCACCTATAACAAAGTTGAAAACATGACACCCCGTGACCTTGGTGCTTGTATTGACTGTAGTGCGCGTCATATTAATGCGCAGGTAGCAAAAAGTCACAACATTGCTTTGATATGGAACGTTAAAGATTTCATGTCATTGTCTGAACAACTACGAAAACAAATACGTAGTGCTGCTAAAAAGAATAACTTACCTTTTAAGTTGACATGTGCAACTACTAGACAAGTTGTTAATGTTGTAACAACAAAGATAGCACTTAAGGGTGGTAAAATTGTTAATAATTGGTTGAAGCAGTTAATTAAAGTTACACTTGTGTTCCTTTTTGTTGCTGCTATTTTCTATTTAATAACACCTGTTCATGTCATGTCTAAACATACTGACTTTTCAAGTGAAATCATAGGATACAAGGCTATTGATGGTGGTGTCACTCGTGACATAGCATCTACAGATACTTGTTTTGCTAACAAACATGCTGATTTTGACACATGGTTTAGCCAGCGTGGTGGTAGTTATACTAATGACAAAGCTTGCCCATTGATTGCTGCAGTCATAACAAGAGAAGTGGGTTTTGTCGTGCCTGGTTTGCCTGGCACGATATTACGCACAACTAATGGTGACTTTTTGCATTTCTTACCTAGAGTTTTTAGTGCAGTTGGTAACATCTGTTACACACCATCAAAACTTATAGAGTACACTGACTTTGCAACATCAGCTTGTGTTTTGGCTGCTGAATGTACAATTTTTAAAGATGCTTCTGGTAAGCCAGTACCATATTGTTATGATACCAATGTACTAGAAGGTTCTGTTGCTTATGAAAGTTTACGCCCTGACACACGTTATGTGCTCATGGATGGCTCTATTATTCAATTTCCTAACACCTACCTTGAAGGTTCTGTTAGAGTGGTAACAACTTTTGATTCTGAGTACTGTAGGCACGGCACTTGTGAAAGATCAGAAGCTGGTGTTTGTGTATCTACTAGTGGTAGATGGGTACTTAACAATGATTATTACAGATCTTTACCAGGAGTTTTCTGTGGTGTAGATGCTGTAAATTTACTTACTAATATGTTTACACCACTAATTCAACCTATTGGTGCTTTGGACATATCAGCATCTATAGTAGCTGGTGGTATTGTAGCTATCGTAGTAACATGCCTTGCCTACTATTTTATGAGGTTTAGAAGAGCTTTTGGTGAATACAGTCATGTAGTTGCCTTTAATACTTTACTATTCCTTATGTCATTCACTGTACTCTGTTTAACACCAGTTTACTCATTCTTACCTGGTGTTTATTCTGTTATTTACTTGTACTTGACATTTTATCTTACTAATGATGTTTCTTTTTTAGCACATATTCAGTGGATGGTTATGTTCACACCTTTAGTACCTTTCTGGATAACAATTGCTTATATCATTTGTATTTCCACAAAGCATTTCTATTGGTTCTTTAGTAATTACCTAAAGAGACGTGTAGTCTTTAATGGTGTTTCCTTTAGTACTTTTGAAGAAGCTGCGCTGTGCACCTTTTTGTTAAATAAAGAAATGTATCTAAAGTTGCGTAGTGATGTGCTATTACCTCTTACGCAATATAATAGATACTTAGCTCTTTATAATAAGTACAAGTATTTTAGTGGAGCAATGGATACAACTAGCTACAGAGAAGCTGCTTGTTGTCATCTCGCAAAGGCTCTCAATGACTTCAGTAACTCAGGTTCTGATGTTCTTTACCAACCACCACAAACCTCTATCACCTCAGCTGTTTTGCAGAGTGGTTTTAGAAAAATGGCATTCCCATCTGGTAAAGTTGAGGGTTGTATGGTACAAGTAACTTGTGGTACAACTACACTTAACGGTCTTTGGCTTGATGACGTAGTTTACTGTCCAAGACATGTGATCTGCACCTCTGAAGACATGCTTAACCCTAATTATGAAGATTTACTCATTCGTAAGTCTAATCATAATTTCTTGGTACAGGCTGGTAATGTTCAACTCAGGGTTATTGGACATTCTATGCAAAATTGTGTACTTAAGCTTAAGGTTGATACAGCCAATCCTAAGACACCTAAGTATAAGTTTGTTCGCATTCAACCAGGACAGACTTTTTCAGTGTTAGCTTGTTACAATGGTTCACCATCTGGTGTTTACCAATGTGCTATGAGGCCCAATTTCACTATTAAGGGTTCATTCCTTAATGGTTCATGTGGTAGTGTTGGTTTTAACATAGATTATGACTGTGTCTCTTTTTGTTACATGCACCATATGGAATTACCAACTGGAGTTCATGCTGGCACAGACTTAGAAGGTAACTTTTATGGACCTTTTGTTGACAGGCAAACAGCACAAGCAGCTGGTACGGACACAACTATTACAGTTAATGTTTTAGCTTGGTTGTACGCTGCTGTTATAAATGGAGACAGGTGGTTTCTCAATCGATTTACCACAACTCTTAATGACTTTAACCTTGTGGCTATGAAGTACAATTATGAACCTCTAACACAAGACCATGTTGACATACTAGGACCTCTTTCTGCTCAAACTGGAATTGCCGTTTTAGATATGTGTGCTTCATTAAAAGAATTACTGCAAAATGGTATGAATGGACGTACCATATTGGGTAGTGCTTTATTAGAAGATGAATTTACACCTTTTGATGTTGTTAGACAATGCTCAGGTGTTACTTTCCAAAGTGCAGTGAAAAGAACAATCAAGGGTACACACCACTGGTTGTTACTCACAATTTTGACTTCACTTTTAGTTTTAGTCCAGAGTACTCAATGGTCTTTGTTCTTTTTTTTGTATGAAAATGCCTTTTTACCTTTTGCTATGGGTATTATTGCTATGTCTGCTTTTGCAATGATGTTTGTCAAACATAAGCATGCATTTCTCTGTTTGTTTTTGTTACCTTCTCTTGCCACTGTAGCTTATTTTAATATGGTCTATATGCCTGCTAGTTGGGTGATGCGTATTATGACATGGTTGGATATGGTTGATACTAGTTTGTCTGGTTTTAAGCTAAAAGACTGTGTTATGTATGCATCAGCTGTAGTGTTACTAATCCTTATGACAGCAAGAACTGTGTATGATGATGGTGCTAGGAGAGTGTGGACACTTATGAATGTCTTGACACTCGTTTATAAAGTTTATTATGGTAATGCTTTAGATCAAGCCATTTCCATGTGGGCTCTTATAATCTCTGTTACTTCTAACTACTCAGGTGTAGTTACAACTGTCATGTTTTTGGCCAGAGGTATTGTTTTTATGTGTGTTGAGTATTGCCCTATTTTCTTCATAACTGGTAATACACTTCAGTGTATAATGCTAGTTTATTGTTTCTTAGGCTATTTTTGTACTTGTTACTTTGGCCTCTTTTGTTTACTCAACCGCTACTTTAGACTGACTCTTGGTGTTTATGATTACTTAGTTTCTACACAGGAGTTTAGATATATGAATTCACAGGGACTACTCCCACCCAAGAATAGCATAGATGCCTTCAAACTCAACATTAAATTGTTGGGTGTTGGTGGCAAACCTTGTATCAAAGTAGCCACTGTACAGTCTAAAATGTCAGATGTAAAGTGCACATCAGTAGTCTTACTCTCAGTTTTGCAACAACTCAGAGTAGAATCATCATCTAAATTGTGGGCTCAATGTGTCCAGTTACACAATGACATTCTCTTAGCTAAAGATACTACTGAAGCCTTTGAAAAAATGGTTTCACTACTTTCTGTTTTGCTTTCCATGCAGGGTGCTGTAGACATAAACAAGCTTTGTGAAGAAATGCTGGACAACAGGGCAACCTTACAAGCTATAGCCTCAGAGTTTAGTTCCCTTCCATCATATGCAGCTTTTGCTACTGCTCAAGAAGCTTATGAGCAGGCTGTTGCTAATGGTGATTCTGAAGTTGTTCTTAAAAAGTTGAAGAAGTCTTTGAATGTGGCTAAATCTGAATTTGACCGTGATGCAGCCATGCAACGTAAGTTGGAAAAGATGGCTGATCAAGCTATGACCCAAATGTATAAACAGGCTAGATCTGAGGACAAGAGGGCAAAAGTTACTAGTGCTATGCAGACAATGCTTTTCACTATGCTTAGAAAGTTGGATAATGATGCACTCAACAACATTATCAACAATGCAAGAGATGGTTGTGTTCCCTTGAACATAATACCTCTTACAACAGCAGCCAAACTAATGGTTGTCATACCAGACTATAACACATATAAAAATACGTGTGATGGTACAACATTTACTTATGCATCAGCATTGTGGGAAATCCAACAGGTTGTAGATGCAGATAGTAAAATTGTTCAACTTAGTGAAATTAGTATGGACAATTCACCTAATTTAGCATGGCCTCTTATTGTAACAGCTTTAAGGGCCAATTCTGCTGTCAAATTACAGAATAATGAGCTTAGTCCTGTTGCACTACGACAGATGTCTTGTGCTGCCGGTACTACACAAACTGCTTGCACTGATGACAATGCGTTAGCTTACTACAACACAACAAAGGGAGGTAGGTTTGTACTTGCACTGTTATCCGATTTACAGGATTTGAAATGGGCTAGATTCCCTAAGAGTGATGGAACTGGTACTATCTATACAGAACTGGAACCACCTTGTAGGTTTGTTACAGACACACCTAAAGGTCCTAAAGTGAAGTATTTATACTTTATTAAAGGATTAAACAACCTAAATAGAGGTATGGTACTTGGTAGTTTAGCTGCCACAGTACGTCTACAAGCTGGTAATGCAACAGAAGTGCCTGCCAATTCAACTGTATTATCTTTCTGTGCTTTTGCTGTAGATGCTGCTAAAGCTTACAAAGATTATCTAGCTAGTGGGGGACAACCAATCACTAATTGTGTTAAGATGTTGTGTACACACACTGGTACTGGTCAGGCAATAACAGTTACACCGGAAGCCAATATGGATCAAGAATCCTTTGGTGGTGCATCGTGTTGTCTGTACTGCCGTTGCCACATAGATCATCCAAATCCTAAAGGATTTTGTGACTTAAAAGGTAAGTATGTACAAATACCTACAACTTGTGCTAATGACCCTGTGGGTTTTACACTTAAAAACACAGTCTGTACCGTCTGCGGTATGTGGAAAGGTTATGGCTGTAGTTGTGATCAACTCCGCGAACCCATGCTTCAGTCAGCTGATGCACAATCGTTTTTAAACGGGTTTGCGGTGTAAGTGCAGCCCGTCTTACACCGTGCGGCACAGGCACTAGTACTGATGTCGTATACAGGGCTTTTGACATCTACAATGATAAAGTAGCTGGTTTTGCTAAATTCCTAAAAACTAATTGTTGTCGCTTCCAAGAAAAGGACGAAGATGACAATTTAATTGATTCTTACTTTGTAGTTAAGAGACACACTTTCTCTAACTACCAACATGAAGAAACAATTTATAATTTACTTAAGGATTGTCCAGCTGTTGCTAAACATGACTTCTTTAAGTTTAGAATAGACGGTGACATGGTACCACATATATCACGTCAACGTCTTACTAAATACACAATGGCAGACCTCGTCTATGCTTTAAGGCATTTTGATGAAGGTAATTGTGACACATTAAAAGAAATACTTGTCACATACAATTGTTGTGATGATGATTATTTCAATAAAAAGGACTGGTATGATTTTGTAGAAAACCCAGATATATTACGCGTATACGCCAACTTAGGTGAACGTGTACGCCAAGCTTTGTTAAAAACAGTACAATTCTGTGATGCCATGCGAAATGCTGGTATTGTTGGTGTACTGACATTAGATAATCAAGATCTCAATGGTAACTGGTATGATTTCGGTGATTTCATACAAACCACGCCAGGTAGTGGAGTTCCTGTTGTAGATTCTTATTATTCATTGTTAATGCCTATATTAACCTTGACCAGGGCTTTAACTGCAGAGTCACATGTTGACACTGACTTAACAAAGCCTTACATTAAGTGGGATTTGTTAAAATATGACTTCACGGAAGAGAGGTTAAAACTCTTTGACCGTTATTTTAAATATTGGGATCAGACATACCACCCAAATTGTGTTAACTGTTTGGATGACAGATGCATTCTGCATTGTGCAAACTTTAATGTTTTATTCTCTACAGTGTTCCCACCTACAAGTTTTGGACCACTAGTGAGAAAAATATTTGTTGATGGTGTTCCATTTGTAGTTTCAACTGGATACCACTTCAGAGAGCTAGGTGTTGTACATAATCAGGATGTAAACTTACATAGCTCTAGACTTAGTTTTAAGGAATTACTTGTGTATGCTGCTGACCCTGCTATGCACGCTGCTTCTGGTAATCTATTACTAGATAAACGCACTACGTGCTTTTCAGTAGCTGCACTTACTAACAATGTTGCTTTTCAAACTGTCAAACCCGGTAATTTTAACAAAGACTTCTATGACTTTGCTGTGTCTAAGGGTTTCTTTAAGGAAGGAAGTTCTGTTGAATTAAAACACTTCTTCTTTGCTCAGGATGGTAATGCTGCTATCAGCGATTATGACTACTATCGTTATAATCTACCAACAATGTGTGATATCAGACAACTACTATTTGTAGTTGAAGTTGTTGATAAGTACTTTGATTGTTACGATGGTGGCTGTATTAATGCTAACCAAGTCATCGTCAACAACCTAGACAAATCAGCTGGTTTTCCATTTAATAAATGGGGTAAGGCTAGACTTTATTATGATTCAATGAGTTATGAGGATCAAGATGCACTTTTCGCATATACAAAACGTAATGTCATCCCTACTATAACTCAAATGAATCTTAAGTATGCCATTAGTGCAAAGAATAGAGCTCGCACCGTAGCTGGTGTCTCTATCTGTAGTACTATGACCAATAGACAGTTTCATCAAAAATTATTGAAATCAATAGCCGCCACTAGAGGAGCTACTGTAGTAATTGGAACAAGCAAATTCTATGGTGGTTGGCACAACATGTTAAAAACTGTTTATAGTGATGTAGAAAACCCTCACCTTATGGGTTGGGATTATCCTAAATGTGATAGAGCCATGCCTAACATGCTTAGAATTATGGCCTCACTTGTTCTTGCTCGCAAACATACAACGTGTTGTAGCTTGTCACACCGTTTCTATAGATTAGCTAATGAGTGTGCTCAAGTATTGAGTGAAATGGTCATGTGTGGCGGTTCACTATATGTTAAACCAGGTGGAACCTCATCAGGAGATGCCACAACTGCTTATGCTAATAGTGTTTTTAACATTTGTCAAGCTGTCACGGCCAATGTTAATGCACTTTTATCTACTGATGGTAACAAAATTGCCGATAAGTATGTCCGCAATTTACAACACAGACTTTATGAGTGTCTCTATAGAAATAGAGATGTTGACACAGACTTTGTGAATGAGTTTTACGCATATTTGCGTAAACATTTCTCAATGATGATACTCTCTGACGATGCTGTTGTGTGTTTCAATAGCACTTATGCATCTCAAGGTCTAGTGGCTAGCATAAAGAACTTTAAGTCAGTTCTTTATTATCAAAACAATGTTTTTATGTCTGAAGCAAAATGTTGGACTGAGACTGACCTTACTAAAGGACCTCATGAATTTTGCTCTCAACATACAATGCTAGTTAAACAGGGTGATGATTATGTGTACCTTCCTTACCCAGATCCATCAAGAATCCTAGGGGCCGGCTGTTTTGTAGATGATATCGTAAAAACAGATGGTACACTTATGATTGAACGGTTCGTGTCTTTAGCTATAGATGCTTACCCACTTACTAAACATCCTAATCAGGAGTATGCTGATGTCTTTCATTTGTACTTACAATACATAAGAAAGCTACATGATGAGTTAACAGGACACATGTTAGACATGTATTCTGTTATGCTTACTAATGATAACACTTCAAGGTATTGGGAACCTGAGTTTTATGAGGCTATGTACACACCGCATACAGTCTTACAGGCTGTTGGGGCTTGTGTTCTTTGCAATTCACAGACTTCATTAAGATGTGGTGCTTGCATACGTAGACCATTCTTATGTTGTAAATGCTGTTACGACCATGTCATATCAACATCACATAAATTAGTCTTGTCTGTTAATCCGTATGTTTGCAATGCTCCAGGTTGTGATGTCACAGATGTGACTCAACTTTACTTAGGAGGTATGAGCTATTATTGTAAATCACATAAACCACCCATTAGTTTTCCATTGTGTGCTAATGGACAAGTTTTTGGTTTATATAAAAATACATGTGTTGGTAGCGATAATGTTACTGACTTTAATGCAATTGCAACATGTGACTGGACAAATGCTGGTGATTACATTTTAGCTAACACCTGTACTGAAAGACTCAAGCTTTTTGCAGCAGAAACGCTCAAAGCTACTGAGGAGACATTTAAACTGTCTTATGGTATTGCTACTGTACGTGAAGTGCTGTCTGACAGAGAATTACATCTTTCATGGGAAGTTGGTAAACCTAGACCACCACTTAACCGAAATTATGTCTTTACTGGTTATCGTGTAACTAAAAACAGTAAAGTACAAATAGGAGAGTACACCTTTGAAAAAGGTGACTATGGTGATGCTGTTGTTTACCGAGGTACAACAACTTACAAATTAAATGTTGGTGATTATTTTGTGCTGACATCACATACAGTAATGCCATTAAGTGCACCTACACTAGTGCCACAAGAGCACTATGTTAGAATTACTGGCTTATACCCAACACTCAATATCTCAGATGAGTTTTCTAGCAATGTTGCAAATTATCAAAAGGTTGGTATGCAAAAGTATTCTACACTCCAGGGACCACCTGGTACTGGTAAGAGTCATTTTGCTATTGGCCTAGCTCTCTACTACCCTTCTGCTCGCATAGTGTATACAGCTTGCTCTCATGCCGCTGTTGATGCACTATGTGAGAAGGCATTAAAATATTTGCCTATAGATAAATGTAGTAGAATTATACCTGCACGTGCTCGTGTAGAGTGTTTTGATAAATTCAAAGTGAATTCAACATTAGAACAGTATGTCTTTTGTACTGTAAATGCATTGCCTGAGACGACAGCAGATATAGTTGTCTTTGATGAAATTTCAATGGCCACAAATTATGATTTGAGTGTTGTCAATGCCAGATTACGTGCTAAGCACTATGTGTACATTGGCGACCCTGCTCAATTACCTGCACCACGCACATTGCTAACTAAGGGCACACTAGAACCAGAATATTTCAATTCAGTGTGTAGACTTATGAAAACTATAGGTCCAGACATGTTCCTCGGAACTTGTCGGCGTTGTCCTGCTGAAATTGTTGACACTGTGAGTGCTTTGGTTTATGATAATAAGCTTAAAGCACATAAAGACAAATCAGCTCAATGCTTTAAAATGTTTTATAAGGGTGTTATCACGCATGATGTTTCATCTGCAATTAACAGGCCACAAATAGGCGTGGTAAGAGAATTCCTTACACGTAACCCTGCTTGGAGAAAAGCTGTCTTTATTTCACCTTATAATTCACAGAATGCTGTAGCCTCAAAGATTTTGGGACTACCAACTCAAACTGTTGATTCATCACAGGGCTCAGAATATGACTATGTCATATTCACTCAAACCACTGAAACAGCTCACTCTTGTAATGTAAACAGATTTAATGTTGCTATTACCAGAGCAAAAGTAGGCATACTTTGCATAATGTCTGATAGAGACCTTTATGACAAGTTGCAATTTACAAGTCTTGAAATTCCACGTAGGAATGTGGCAACTTTACAAGCTGAAAATGTAACAGGACTCTTTAAAGATTGTAGTAAGGTAATCACTGGGTTACATCCTACACAGGCACCTACACACCTCAGTGTTGACACTAAATTCAAAACTGAAGGTTTATGTGTTGACATACCTGGCATACCTAAGGACATGACCTATAGAAGACTCATCTCTATGATGGGTTTTAAAATGAATTATCAAGTTAATGGTTACCCTAACATGTTTATCACCCGCGAAGAAGCTATAAGACATGTACGTGCATGGATTGGCTTCGATGTCGAGGGGTGTCATGCTACTAGAGAAGCTGTTGGTACCAATTTACCTTTACAGCTAGGTTTTTCTACAGGTGTTAACCTAGTTGCTGTACCTACAGGTTATGTTGATACACCTAATAATACAGATTTTTCCAGAGTTAGTGCTAAACCACCGCCTGGAGATCAATTTAAACACCTCATACCACTTATGTACAAAGGACTTCCTTGGAATGTAGTGCGTATAAAGATTGTACAAATGTTAAGTGACACACTTAAAAATCTCTCTGACAGAGTCGTATTTGTCTTATGGGCACATGGCTTTGAGTTGACATCTATGAAGTATTTTGTGAAAATAGGACCTGAGCGCACCTGTTGTCTATGTGATAGACGTGCCACATGCTTTTCCACTGCTTCAGACACTTATGCCTGTTGGCATCATTCTATTGGATTTGATTACGTCTATAATCCGTTTATGATTGATGTTCAACAATGGGGTTTTACAGGTAACCTACAAAGCAACCATGATCTGTATTGTCAAGTCCATGGTAATGCACATGTAGCTAGTTGTGATGCAATCATGACTAGGTGTCTAGCTGTCCACGAGTGCTTTGTTAAGCGTGTTGACTGGACTATTGAATATCCTATAATTGGTGATGAACTGAAGATTAATGCGGCTTGTAGAAAGGTTCAACACATGGTTGTTAAAGCTGCATTATTAGCAGACAAATTCCCAGTTCTTCACGACATTGGTAACCCTAAAGCTATTAAGTGTGTACCTCAAGCTGATGTAGAATGGAAGTTCTATGATGCACAGCCTTGTAGTGACAAAGCTTATAAAATAGAAGAATTATTCTATTCTTATGCCACACATTCTGACAAATTCACAGATGGTGTATGCCTATTTTGGAATTGCAATGTCGATAGATATCCTGCTAATTCCATTGTTTGTAGATTTGACACTAGAGTGCTATCTAACCTTAACTTGCCTGGTTGTGATGGTGGCAGTTTGTATGTAAATAAACATGCATTCCACACACCAGCTTTTGATAAAAGTGCTTTTGTTAATTTAAAACAATTACCATTTTTCTATTACTCTGACAGTCCATGTGAGTCTCATGGAAAACAAGTAGTGTCAGATATAGATTATGTACCACTAAAGTCTGCTACGTGTATAACACGTTGCAATTTAGGTGGTGCTGTCTGTAGACATCATGCTAATGAGTACAGATTGTATCTCGATGCTTATAACATGATGATCTCAGCTGGCTTTAGCTTGTGGGTTTACAAACAATTTGATACTTATAACCTCTGGAACACTTTTACAAGACTTCAGAGTTTAGAAAATGTGGCTTTTAATGTTGTAAATAAGGGACACTTTGATGGACAACAGGGTGAAGTACCAGTTTCTATCATTAATAACACTGTTTACACAAAAGTTGATGGTGTTGATGTAGAATTGTTTGAAAATAAAACAACATTACCTGTTAATGTAGCATTTGAGCTTTGGGCTAAGCGCAACATTAAACCAGTACCAGAGGTGAAAATACTCAATAATTTGGGTGTGGACATTGCTGCTAATACTGTGATCTGGGACTACAAAAGAGATGCTCCAGCACATATATCTACTATTGGTGTTTGTTCTATGACTGACATAGCCAAGAAACCAACTGAAACGATTTGTGCACCACTCACTGTCTTTTTTGATGGTAGAGTTGATGGTCAAGTAGACTTATTTAGAAATGCCCGTAATGGTGTTCTTATTACAGAAGGTAGTGTTAAAGGTTTACAACCATCTGTAGGTCCCAAACAAGCTAGTCTTAATGGAGTCACATTAATTGGAGAAGCCGTAAAAACACAGTTCAATTATTATAAGAAAGTTGATGGTGTTGTCCAACAATTACCTGAAACTTACTTTACTCAGAGTAGAAATTTACAAGAATTTAAACCCAGGAGTCAAATGGAAATTGATTTCTTAGAATTAGCTATGGATGAATTCATTGAACGGTATAAATTAGAAGGCTATGCCTTCGAACATATCGTTTATGGAGATTTTAGTCATAGTCAGTTAGGTGGTTTACATCTACTGATTGGACTAGCTAAACGTTTTAAGGAATCACCTTTTGAATTAGAAGATTTTATTCCTATGGACAGTACAGTTAAAAACTATTTCATAACAGATGCGCAAACAGGTTCATCTAAGTGTGTGTGTTCTGTTATTGATTTATTACTTGATGATTTTGTTGAAATAATAAAATCCCAAGATTTATCTGTAGTTTCTAAGGTTGTCAAAGTGACTATTGACTATACAGAAATTTCATTTATGCTTTGGTGTAAAGATGGCCATGTAGAAACATTTTACCCAAAATTACAATCTAGTCAAGCGTGGCAACCGGGTGTTGCTATGCCTAATCTTTACAAAATGCAAAGAATGCTATTAGAAAAGTGTGACCTTCAAAATTATGGTGATAGTGCAACATTACCTAAAGGCATAATGATGAATGTCGCAAAATATACTCAACTGTGTCAATATTTAAACACATTAACATTAGCTGTACCCTATAATATGAGAGTTATACATTTTGGTGCTGGTTCTGATAAAGGAGTTGCACCAGGTACAGCTGTTTTAAGACAGTGGTTGCCTACGGGTACGCTGCTTGTCGATTCAGATCTTAATGACTTTGTCTCTGATGCAGATTCAACTTTGATTGGTGATTGTGCAACTGTACATACAGCTAATAAATGGGATCTCATTATTAGTGATATGTACGACCCTAAGACTAAAAATGTTACAAAAGAAAATGACTCTAAAGAGGGTTTTTTCACTTACATTTGTGGGTTTATACAACAAAAGCTAGCTCTTGGAGGTTCCGTGGCTATAAAGATAACAGAACATTCTTGGAATGCTGATCTTTATAAGCTCATGGGACACTTCGCATGGTGGACAGCCTTTGTTACTAATGTGAATGCGTCATCATCTGAAGCATTTTTAATTGGATGTAATTATCTTGGCAAACCACGCGAACAAATAGATGGTTATGTCATGCATGCAAATTACATATTTTGGAGGAATACAAATCCAATTCAGTTGTCTTCCTATTCTTTATTTGACATGAGTAAATTTCCCCTTAAATTAAGGGGTACTGCTGTTATGTCTTTAAAAGAAGGTCAAATCAATGATATGATTTTATCTCTTCTTAGTAAAGGTAGACTTATAATTAGAGAAAACAACAGAGTTGTTATTTCTAGTGATGTTCTTGTTAACAACTAAACGAACAATGTTTGTTTTTCTTGTTTTATTGCCACTAGTCTCTAGTCAGTGTGTTAATCTTACAACCAGAACTCAATTACCCCCTGCATACACTAATTCTTTCACACGTGGTGTTTATTACCCTGACAAAGTTTTCAGATCCTCAGTTTTACATTCAACTCAGGACTTGTTCTTACCTTTCTTTTCCAATGTTACTTGGTTCCATGCTATACATGTCTCTGGGACCAATGGTACTAAGAGGTTTGATAACCCTGTCCTACCATTTAATGATGGTGTTTATTTTGCTTCCACTGAGAAGTCTAACATAATAAGAGGCTGGATTTTTGGTACTACTTTAGATTCGAAGACCCAGTCCCTACTTATTGTTAATAACGCTACTAATGTTGTTATTAAAGTCTGTGAATTTCAATTTTGTAATGATCCATTTTTGGGTGTTTATTACCACAAAAACAACAAAAGTTGGATGGAAAGTGAGTTCAGAGTTTATTCTAGTGCGAATAATTGCACTTTTGAATATGTCTCTCAGCCTTTTCTTATGGACCTTGAAGGAAAACAGGGTAATTTCAAAAATCTTAGGGAATTTGTGTTTAAGAATATTGATGGTTATTTTAAAATATATTCTAAGCACACGCCTATTAATTTAGTGCGTGATCTCCCTCAGGGTTTTTCGGCTTTAGAACCATTGGTAGATTTGCCAATAGGTATTAACATCACTAGGTTTCAAACTTTACTTGCTTTACATAGAAGTTATTTGACTCCTGGTGATTCTTCTTCAGGTTGGACAGCTGGTGCTGCAGCTTATTATGTGGGTTATCTTCAACCTAGGACTTTTCTATTAAAATATAATGAAAATGGAACCATTACAGATGCTGTAGACTGTGCACTTGACCCTCTCTCAGAAACAAAGTGTACGTTGAAATCCTTCACTGTAGAAAAAGGAATCTATCAAACTTCTAACTTTAGAGTCCAACCAACAGAATCTATTGTTAGATTTCCTAATATTACAAACTTGTGCCCTTTTGGTGAAGTTTTTAACGCCACCAGATTTGCATCTGTTTATGCTTGGAACAGGAAGAGAATCAGCAACTGTGTTGCTGATTATTCTGTCCTATATAATTCCGCATCATTTTCCACTTTTAAGTGTTATGGAGTGTCTCCTACTAAATTAAATGATCTCTGCTTTACTAATGTCTATGCAGATTCATTTGTAATTAGAGGTGATGAAGTCAGACAAATCGCTCCAGGGCAAACTGGAAAGATTGCTGATTATAATTATAAATTACCAGATGATTTTACAGGCTGCGTTATAGCTTGGAATTCTAACAATCTTGATTCTAAGGTTGGTGGTAATTATAATTACCTGTATAGATTGTTTAGGAAGTCTAATCTCAAACCTTTTGAGAGAGATATTTCAACTGAAATCTATCAGGCCGGTAGCACACCTTGTAATGGTGTTGAAGGTTTTAATTGTTACTTTCCTTTACAATCATATGGTTTCCAACCCACTAATGGTGTTGGTTACCAACCATACAGAGTAGTAGTACTTTCTTTTGAACTTCTACATGCACCAGCAACTGTTTGTGGACCTAAAAAGTCTACTAATTTGGTTAAAAACAAATGTGTCAATTTCAACTTCAATGGTTTAACAGGCACAGGTGTTCTTACTGAGTCTAACAAAAAGTTTCTGCCTTTCCAACAATTTGGCAGAGACATTGCTGACACTACTGATGCTGTCCGTGATCCACAGACACTTGAGATTCTTGACATTACACCATGTTCTTTTGGTGGTGTCAGTGTTATAACACCAGGAACAAATACTTCTAACCAGGTTGCTGTTCTTTATCAGGATGTTAACTGCACAGAAGTCCCTGTTGCTATTCATGCAGATCAACTTACTCCTACTTGGCGTGTTTATTCTACAGGTTCTAATGTTTTTCAAACACGTGCAGGCTGTTTAATAGGGGCTGAACATGTCAACAACTCATATGAGTGTGACATACCCATTGGTGCAGGTATATGCGCTAGTTATCAGACTCAGACTAATTCTCCTCGGCGGGCACGTAGTGTAGCTAGTCAATCCATCATTGCCTACACTATGTCACTTGGTGCAGAAAATTCAGTTGCTTACTCTAATAACTCTATTGCCATACCCACAAATTTTACTATTAGTGTTACCACAGAAATTCTACCAGTGTCTATGACCAAGACATCAGTAGATTGTACAATGTACATTTGTGGTGATTCAACTGAATGCAGCAATCTTTTGTTGCAATATGGCAGTTTTTGTACACAATTAAACCGTGCTTTAACTGGAATAGCTGTTGAACAAGACAAAAACACCCAAGAAGTTTTTGCACAAGTCAAACAAATTTACAAAACACCACCAATTAAAGATTTTGGTGGTTTTAATTTTTCACAAATATTACCAGATCCATCAAAACCAAGCAAGAGGTCATTTATTGAAGATCTACTTTTCAACAAAGTGACACTTGCAGATGCTGGCTTCATCAAACAATATGGTGATTGCCTTGGTGATATTGCTGCTAGAGACCTCATTTGTGCACAAAAGTTTAACGGCCTTACTGTTTTGCCACCTTTGCTCACAGATGAAATGATTGCTCAATACACTTCTGCACTGTTAGCGGGTACAATCACTTCTGGTTGGACCTTTGGTGCAGGTGCTGCATTACAAATACCATTTGCTATGCAAATGGCTTATAGGTTTAATGGTATTGGAGTTACACAGAATGTTCTCTATGAGAACCAAAAATTGATTGCCAACCAATTTAATAGTGCTATTGGCAAAATTCAAGACTCACTTTCTTCCACAGCAAGTGCACTTGGAAAACTTCAAGATGTGGTCAACCAAAATGCACAAGCTTTAAACACGCTTGTTAAACAACTTAGCTCCAATTTTGGTGCAATTTCAAGTGTTTTAAATGATATCCTTTCACGTCTTGACAAAGTTGAGGCTGAAGTGCAAATTGATAGGTTGATCACAGGCAGACTTCAAAGTTTGCAGACATATGTGACTCAACAATTAATTAGAGCTGCAGAAATCAGAGCTTCTGCTAATCTTGCTGCTACTAAAATGTCAGAGTGTGTACTTGGACAATCAAAAAGAGTTGATTTTTGTGGAAAGGGCTATCATCTTATGTCCTTCCCTCAGTCAGCACCTCATGGTGTAGTCTTCTTGCATGTGACTTATGTCCCTGCACAAGAAAAGAACTTCACAACTGCTCCTGCCATTTGTCATGATGGAAAAGCACACTTTCCTCGTGAAGGTGTCTTTGTTTCAAATGGCACACACTGGTTTGTAACACAAAGGAATTTTTATGAACCACAAATCATTACTACAGACAACACATTTGTGTCTGGTAACTGTGATGTTGTAATAGGAATTGTCAACAACACAGTTTATGATCCTTTGCAACCTGAATTAGACTCATTCAAGGAGGAGTTAGATAAATATTTTAAGAATCATACATCACCAGATGTTGATTTAGGTGACATCTCTGGCATTAATGCTTCAGTTGTAAACATTCAAAAAGAAATTGACCGCCTCAATGAGGTTGCCAAGAATTTAAATGAATCTCTCATCGATCTCCAAGAACTTGGAAAGTATGAGCAGTATATAAAATGGCCATGGTACATTTGGCTAGGTTTTATAGCTGGCTTGATTGCCATAGTAATGGTGACAATTATGCTTTGCTGTATGACCAGTTGCTGTAGTTGTCTCAAGGGCTGTTGTTCTTGTGGATCCTGCTGCAAATTTGATGAAGACGACTCTGAGCCAGTGCTCAAAGGAGTCAAATTACATTACACATAAACGAACTTATGGATTTGTTTATGAGAATCTTCACAATTGGAACTGTAACTTTGAAGCAAGGTGAAATCAAGGATGCTACTCCTTCAGATTTTGTTCGCGCTACTGCAACGATACCGATACAAGCCTCACTCCCTTTCGGATGGCTTATTGTTGGCGTTGCACTTCTTGCTGTTTTTCAGAGCGCTTCCAAAATCATAACCCTCAAAAAGAGATGGCAACTAGCACTCTCCAAGGGTGTTCACTTTGTTTGCAACTTGCTGTTGTTGTTTGTAACAGTTTACTCACACCTTTTGCTCGTTGCTGCTGGCCTTGAAGCCCCTTTTCTCTATCTTTATGCTTTAGTCTACTTCTTGCAGAGTATAAACTTTGTAAGAATAATAATGAGGCTTTGGCTTTGCTGGAAATGCCGTTCCAAAAACCCATTACTTTATGATGCCAACTATTTTCTTTGCTGGCATACTAATTGTTACGACTATTGTATACCTTACAATAGTGTAACTTCTTCAATTGTCATTACTTCAGGTGATGGCACAACAAGTCCTATTTCTGAACATGACTACCAGATTGGTGGTTATACTGAAAAATGGGAATCTGGAGTAAAAGACTGTGTTGTATTACACAGTTACTTCACTTCAGACTATTACCAGCTGTACTCAACTCAATTGAGTACAGACACTGGTGTTGAACATGTTACCTTCTTCATCTACAATAAAATTGTTGATGAGCCTGAAGAACATGTCCAAATTCACACAATCGACGGTTCATCCGGAGTTGTTAATCCAGTAATGGAACCAATTTATGATGAACCGACGACGACTACTAGCGTGCCTTTGTAAGCACAAGCTGATGAGTACGAACTTATGTACTCATTCGTTTCGGAAGAGACAGGTACGTTAATAGTTAATAGCGTACTTCTTTTTCTTGCTTTCGTGGTATTCTTGCTAGTTACACTAGCCATCCTTACTGCGCTTCGATTGTGTGCGTACTGCTGCAATATTGTTAACGTGAGTCTTGTAAAACCTTCTTTTTACGTTTACTCTCGTGTTAAAAATCTGAATTCTTCTAGAGTTCCTGATCTTCTGGTCTAAACGAACTAAATATTATATTAGTTTTTCTGTTTGGAACTTTAATTTTAGCCATGGCAGATTCCAACGGTACTATTACCGTTGAAGAGCTTAAAAAGCTCCTTGAACAATGGAACCTAGTAATAGGTTTCCTATTCCTTACATGGATTTGTCTTCTACAATTTGCCTATGCCAACAGGAATAGGTTTTTGTATATAATTAAGTTAATTTTCCTCTGGCTGTTATGGCCAGTAACTTTAGCTTGTTTTGTGCTTGCTGCTGTTTACAGAATAAATTGGATCACCGGTGGAATTGCTATCGCAATGGCTTGTCTTGTAGGCTTGATGTGGCTCAGCTACTTCATTGCTTCTTTCAGACTGTTTGCGCGTACGCGTTCCATGTGGTCATTCAATCCAGAAACTAACATTCTTCTCAACGTGCCACTCCATGGCACTATTCTGACCAGACCGCTTCTAGAAAGTGAACTCGTAATCGGAGCTGTGATCCTTCGTGGACATCTTCGTATTGCTGGACACCATCTAGGACGCTGTGACATCAAGGACCTGCCTAAAGAAATCACTGTTGCTACATCACGAACGCTTTCTTATTACAAATTGGGAGCTTCGCAGCGTGTAGCAGGTGACTCAGGTTTTGCTGCATACAGTCGCTACAGGATTGGCAACTATAAATTAAACACAGACCATTCCAGTAGCAGTGACAATATTGCTTTGCTTGTACAGTAAGTGACAACAGATGTTTCATCTCGTTGACTTTCAGGTTACTATAGCAGAGATATTACTAATTATTATGAGGACTTTTAAAGTTTCCATTTGGAATCTTGATTACATCATAAACCTCATAATTAAAAATTTATCTAAGTCACTAACTGAGAATAAATATTCTCAATTAGATGAAGAGCAACCAATGGAGATTGATTAAACGAACATGAAAATTATTCTTTTCTTGGCACTGATAACACTCGCTACTTGTGAGCTTTATCACTACCAAGAGTGTGTTAGAGGTACAACAGTACTTTTAAAAGAACCTTGCTCTTCTGGAACATACGAGGGCAATTCACCATTTCATCCTCTAGCTGATAACAAATTTGCACTGACTTGCTTTAGCACTCAATTTGCTTTTGCTTGTCCTGACGGCGTAAAACACGTCTATCAGTTACGTGCCAGATCAGTTTCACCTAAACTGTTCATCAGACAAGAGGAAGTTCAAGAACTTTACTCTCCAATTTTTCTTATTGTTGCGGCAATAGTGTTTATAACACTTTGCTTCACACTCAAAAGAAAGACAGAATGATTGAACTTTCATTAATTGACTTCTATTTGTGCTTTTTAGCCTTTCTGCTATTCCTTGTTTTAATTATGCTTATTATCTTTTGGTTCTCACTTGAACTGCAAGATCATAATGAAACTTGTCACGCCTAAACGAACATGAAATTTCTTGTTTTCTTAGGAATCATCACAACTGTAGCTGCATTTCACCAAGAATGTAGTTTACAGTCATGTACTCAACATCAACCATATGTAGTTGATGACCCGTGTCCTATTCACTTCTATTCTAAATGGTATATTAGAGTAGGAGCTAGAAAATCAGCACCTTTAATTGAATTGTGCGTGGATGAGGCTGGTTCTAAATCACCCATTCAGTACATCGATATCGGTAATTATACAGTTTCCTGTTTACCTTTTACAATTAATTGCCAGGAACCTAAATTGGGTAGTCTTGTAGTGCGTTGTTCGTTCTATGAAGACTTTTTAGAGTATCATGACGTTCGTGTTGTTTTAGATTTCATCTAAACGAACAAACTAAAATGTCTGATAATGGACCCCAAAATCAGCGAAATGCACCCCGCATTACGTTTGGTGGACCCTCAGATTCAACTGGCAGTAACCAGAATGGAGAACGCAGTGGGGCGCGATCAAAACAACGTCGGCCCCAAGGTTTACCCAATAATACTGCGTCTTGGTTCACCGCTCTCACTCAACATGGCAAGGAAGACCTTAAATTCCCTCGAGGACAAGGCGTTCCAATTAACACCAATAGCAGTCCAGATGACCAAATTGGCTACTACCGAAGAGCTACCAGACGAATTCGTGGTGGTGACGGTAAAATGAAAGATCTCAGTCCAAGATGGTATTTCTACTACCTAGGAACTGGGCCAGAAGCTGGACTTCCCTATGGTGCTAACAAAGACGGCATCATATGGGTTGCAACTGAGGGAGCCTTGAATACACCAAAAGATCACATTGGCACCCGCAATCCTGCTAACAATGCTGCAATCGTGCTACAACTTCCTCAAGGAACAACATTGCCAAAAGGCTTCTACGCAGAAGGGAGCAGAGGCGGCAGTCAAGCCTCTTCTCGTTCCTCATCACGTAGTCGCAACAGTTCAAGAAATTCAACTCCAGGCAGCAGTAGGGGAACTTCTCCTGCTAGAATGGCTGGCAATGGCGGTGATGCTGCTCTTGCTTTGCTGCTGCTTGACAGATTGAACCAGCTTGAGAGCAAAATGTCTGGTAAAGGCCAACAACAACAAGGCCAAACTGTCACTAAGAAATCTGCTGCTGAGGCTTCTAAGAAGCCTCGGCAAAAACGTACTGCCACTAAAGCATACAATGTAACACAAGCTTTCGGCAGACGTGGTCCAGAACAAACCCAAGGAAATTTTGGGGACCAGGAACTAATCAGACAAGGAACTGATTACAAACATTGGCCGCAAATTGCACAATTTGCCCCCAGCGCTTCAGCGTTCTTCGGAATGTCGCGCATTGGCATGGAAGTCACACCTTCGGGAACGTGGTTGACCTACACAGGTGCCATCAAATTGGATGACAAAGATCCAAATTTCAAAGATCAAGTCATTTTGCTGAATAAGCATATTGACGCATACAAAACATTCCCACCAACAGAGCCTAAAAAGGACAAAAAGAAGAAGGCTGATGAAACTCAAGCCTTACCGCAGAGACAGAAGAAACAGCAAACTGTGACTCTTCTTCCTGCTGCAGATTTGGATGATTTCTCCAAACAATTGCAACAATCCATGAGCAGTGCTGACTCAACTCAGGCCTAAACTCATGCAGACCACACAAGGCAGATGGGCTATATAAACGTTTTCGCTTTTCCGTTTACGATATATAGTCTACTCTTGTGCAGAATGAATTCTCGTAACTACATAGCACAAGTAGATGTAGTTAACTTTAATCTCACATAGCAATCTTTAATCAGTGTGTAACATTAGGGAGGACTTGAAAGAGCCACCACATTTTCACCGAGGCCACGCGGAGTACGATCGAGTGTACAGTGAACAATGCTAGGGAGAGCTGCCTATATGGAAGAGCCCTAATGTGTAAAATTAATTTTAGTAGTGCTATCCCCATGTGATTTTAATAGCTTCTTAGGAGAATGACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'] - ] - # 0-based gene coordinates - # from, to, name, within gene codon offset (to deal with ORF1a/b overlap) - self.gene_coordinates = [[265, 13482, 'ORF1a', 0], - [13467, 21554, 'ORF1b', -1], - [21562, 25383, 'S', 0], - [25392, 26219, 'ORF3a', 0], - [26244, 26471, 'E', 0], - [26522, 27190, 'M', 0], - [27201, 27386, 'ORF6', 0], - [27393, 27758, 'ORF7a', 0], - [27893, 28258, 'ORF8', 0], - [28273, 29532, 'N', 0], - [29557, 29673, 'ORF10', 0]] - self.score_matrix_ = BioExt.scorematrices.DNA95.load() - if summary_json is not None: - self.summary_json = summary_json - if annotation_json is not None: - self.annotation_json = annotation_json - try: - if arguments.summary_input: - with open(arguments.summary_input) as fh: - self.summary_json = json.load(fh) - except Exception: - pass - try: - if arguments.annotation_input: - with open(arguments.annotation_input) as fh: - self.annotation_json = json.load(fh) - except Exception: - pass - self.gene = self.arguments.gene - self._get_incoming_labels() - self._get_map() - - def summary(self): - try: - if self.summary_json is not None: - if self.gene not in self.summary_json: - self.summary_json[self.gene] = {} - if self.cfel is not None: - self.cfel_summary() - if self.relax is not None: - self.relax_summary() - if self.busted is not None: - self.busted_summary() - if self.slac is not None: - self.slac_summary() - if self.fel is not None: - self.fel_summary() - if self.meme is not None: - self.meme_summary() - if self.meme_full is not None: - self.meme_full_summary() - if self.prime is not None: - self.prime_summary() - if self.fade is not None: - self.fade_summary() - if self.bgm is not None: - self.bgm_summary() - except Exception: - if self.gene: - del self.summary_json[self.gene] - if self.gene in self.annotation_json: - del self.annotation_json[self.gene] - raise - return self.annotation_json, self.summary_json - - def cfel_summary(self): - self.cfel = self._load_json(self.arguments.cfel) - if self.cfel is None: - return - node_tags = {} - _ = newick_parser(self.cfel['input']['trees']['0'], False, node_tags, self.cfel, self.arguments, self.labels)['json'] - if self.summary_json is not None: - omegas = {} - T = {} - for k in [[k.split('*')[1], v[0][0]] for k, v in self.cfel['fits']['Global MG94xREV']['Rate Distributions'].items()]: - if k[0] != 'background': - self.test_map[k[0]] = 'Test' - else: - self.test_map[k[0]] = 'Reference' - omegas[k[0]] = k[1] - T[k[0]] = 0. - for branch, nt in (self.cfel['tested']['0']).items(): - if branch not in node_tags: - node_tags[branch] = [] - info = self.cfel['branch attributes']['0'][branch] - if nt != '': - T[nt] += info['Global MG94xREV'] - node_tags[branch].append(info['Global MG94xREV']) - self.summary_json[self.gene]['rates'] = {'mean-omega': omegas, 'T': T} - beta_indices = [] - p_indices = [] - subs = [] - for i, tag in enumerate(self.cfel['MLE']['headers']): - if tag[0].find('beta') == 0: - beta_indices.append([i, re.split(r'\(|\)', tag[0])[1]]) - elif tag[0].find('P-value') == 0: - p_indices.append([i, re.split(r'\(|\)|for ', tag[0])[1]]) - elif tag[0].find('subs') == 0: - subs.append([i, re.split(r'\(|\)', tag[0])[1]]) - for i, row in enumerate(self.cfel['MLE']['content']['0']): - if self.annotation_json is not None and len(self.ref_map): # if this is specified, write everything out - gs = self._get_genomic_annotation(i) - if gs[0] >= 0: - self.include_in_annotation[i] = gs[0] - self.annotation_json[gs[0]] = { - 'G': gs[1], - 'S': gs[2], - 'index': i, - 'bCFEL': { - 'p': row[4], - 'a': row[0], - 'b': self._make_report_dict(row, beta_indices), - 'pi': self._make_report_dict(row, p_indices), - 'pp': row[-2], - 's': self._make_report_dict(row, subs), - 'q': row[-3] - } - } - if row[-4] <= self.arguments.pvalue: - self.site_reports[i] = {'cfel': row} - - def relax_summary(self): - self.relax = self._load_json(self.arguments.relax) - if self.relax is None: - return - if self.summary_json is not None: - relax_d = {} - for r, rr in self.summary_json[self.gene]['rates']['mean-omega'].items(): - relax_d[r] = [] - for ignored, rd in self.relax['fits']['RELAX alternative']['Rate Distributions'][self.test_map[r]].items(): - relax_d[r].append(rd) - self.summary_json[self.gene]['rates']['relax'] = relax_d - self.summary_json[self.gene]['relax'] = { - 'p': self.relax['test results']['p-value'], - 'K': self.relax['test results']['relaxation or intensification parameter'] - } - - def busted_summary(self): - self.busted = self._load_json(self.arguments.busted) - if self.busted is None: - return - if self.summary_json is not None: - self.summary_json[self.gene]['rates']['busted'] = self.busted['fits']['Unconstrained model']['Rate Distributions'] - self.summary_json[self.gene]['busted'] = {'p': self.busted['test results']['p-value'], } - - def slac_summary(self): - self.slac = self._load_json(self.arguments.slac) - if self.slac is None: - return - - def def_value(): - return defaultdict(int) - compressed_subs = {} - node_tags = {} - the_tree = newick_parser(self.slac['input']['trees']['0'], False, node_tags, self.slac, self.arguments, self.labels) - root_node = None - if self.summary_json is not None: - for branch, info in self.slac['branch attributes']['0'].items(): - if branch in node_tags: - node_tags[branch].append(info['Global MG94xREV']) - else: - root_node = branch - self.summary_json[self.gene]['tree'] = self.slac['input']['trees']['0'] - self.summary_json[self.gene]['tree_tags'] = node_tags - if len(self.include_in_annotation): - for i in self.include_in_annotation: - report = self.annotation_json[self.include_in_annotation[i]] - counts_codon_site = {} - counts_aa_site = {} - gs = self._get_genomic_annotation(i) - if gs[0] >= 0: - self.labels[root_node] = self.slac['branch attributes']['0'][root_node]['codon'][0][i] - try: - traverse_tree_in_order(the_tree, self.labels, self.slac['branch attributes']['0'], i, None, root_node) - except Exception: - pass - compressed_subs[gs[0]] = self.labels - for k in set([k[0] for k in node_tags.values()]): - if len(k): - counts_codon_site[k] = defaultdict(int) - counts_aa_site[k] = defaultdict(int) - for branch, tag in node_tags.items(): - if len(tag[0]) > 0 and tag[1] is False: - codon = self.slac['branch attributes']['0'][branch]['codon'][0][i] - aa = self.slac['branch attributes']['0'][branch]['amino-acid'][0][i] - counts_codon_site[tag[0]][codon] += 1 - counts_aa_site[tag[0]][aa] += 1 - report['cdn'] = counts_codon_site - report['aa'] = counts_aa_site - self.summary_json[self.gene]['subs'] = compressed_subs - - def fel_summary(self): - self.fel = self._load_json(self.arguments.fel) - if None in [self.fel, self.cfel]: - return - for i, row in enumerate(self.fel['MLE']['content']['0']): - if i in self.include_in_annotation: - self.annotation_json[self.include_in_annotation[i]]['bFEL'] = {'a': row[0], 'b': row[1], 'p': row[4]} - if i in self.site_reports or row[4] <= self.arguments.pvalue and row[1] > row[0]: - if i in self.site_reports: - self.site_reports[i]['fel'] = row - else: - self.site_reports[i] = {'fel': row, - 'cfel': self.cfel['MLE']['content']['0'][i]} - - def meme_summary(self): - self.meme = self._load_json(self.arguments.meme) - if None in [self.fel, self.cfel, self.meme]: - return - for i, row in enumerate(self.meme['MLE']['content']['0']): - if i in self.include_in_annotation: - self.annotation_json[self.include_in_annotation[i]]['bMEME'] = { - 'p': row[6], - 'a': row[0], - 'b+': row[3], - 'w+': row[4], - 'b-': row[1], - 'w-': row[2], - 'br': row[7] - } - if i in self.site_reports or row[6] <= self.arguments.pvalue: - if i in self.site_reports: - self.site_reports[i]['meme'] = row - else: - self.site_reports[i] = {'meme': row, - 'fel': self.fel['MLE']['content']['0'][i], - 'cfel': self.cfel['MLE']['content']['0'][i]} - # annotate branches with EBF support - for n, info in self.meme['branch attributes']['0'].items(): - - if n in self.summary_json[self.gene]['tree_tags']: - sig_sites = [] - for tag, ebf in info.items(): - bits = tag.split(' ') - if len(bits) >= 4 and ebf >= 100: - sig_sites.append(self.include_in_annotation[int(bits[2]) - 1]) - self.summary_json[self.gene]['tree_tags'][n].append(sig_sites) - - def meme_full_summary(self): - self.meme_full = self._load_json(self.arguments.meme_full) - if None in [self.fel, self.cfel, self.meme, self.meme_full]: - return - for i, row in enumerate(self.meme_full['MLE']['content']['0']): - if i in self.include_in_annotation: - self.annotation_json[self.include_in_annotation[i]]['lMEME'] = { - 'p': row[6], - 'a': row[0], - 'b+': row[3], - 'w+': row[4], - 'b-': row[1], - 'w-': row[2], - 'br': row[7] - } - if i in self.site_reports or row[6] <= self.arguments.pvalue: - if i in self.site_reports: - self.site_reports[i]['full-meme'] = row - else: - self.site_reports[i] = {'full-meme': row, - 'meme': self.meme['MLE']['content']['0'][i], - 'fel': self.fel['MLE']['content']['0'][i], - 'cfel': self.cfel['MLE']['content']['0'][i]} - # annotate branches with EBF support - for n, info in self.meme_full['branch attributes']['0'].items(): - if n in self.summary_json[self.gene]['tree_tags']: - sig_sites = [] - for tag, ebf in info.items(): - bits = tag.split(' ') - if len(bits) >= 4 and ebf >= 100: - sig_sites.append(self.include_in_annotation[int(bits[2]) - 1]) - self.summary_json[self.gene]['tree_tags'][n].append(sig_sites) - - def prime_summary(self): - self.prime = self._load_json(self.arguments.prime) - if self.prime is None: - return - if self.summary_json is not None: - h = self.prime['MLE']['headers'] - self.summary_json[self.gene]['prime-properties'] = [h[k][1].replace('Importance for ', '') for k in range(6, len(h), 3)] - if len(self.include_in_annotation): - for i in self.include_in_annotation: - report = self.annotation_json[self.include_in_annotation[i]] - prime_info = self.prime['MLE']['content']['0'][i] - if prime_info: - report['prime'] = { - 'p': [prime_info[k] for k in ([5, ] + list(range(7, len(prime_info), 3)))], - 'lambda': [prime_info[k] for k in range(6, len(prime_info), 3)] - } - else: - report['prime'] = None # invariable - - def fade_summary(self): - self.fade = self._load_json(self.arguments.fade) - if self.fade is None: - return - if len(self.include_in_annotation): - for i in self.include_in_annotation: - report = self.annotation_json[self.include_in_annotation[i]] - report['fade'] = {} - for residue, info in self.fade['MLE']['content'].items(): - # Skip anything past the end of this section. - if i >= len(info['0']): - continue - if len(residue) == 1: - report['fade'][residue] = {'rate': info['0'][i][1], 'BF': info['0'][i][-1]} - - def bgm_summary(self): - self.bgm = self._load_json(self.arguments.bgm) - if self.bgm is None: - return - if self.summary_json is not None: - try: - self.summary_json[self.gene]['bgm'] = self.bgm['MLE']['content'] - except KeyError: - self.summary_json[self.gene]['bgm'] = [] - - def _load_json(self, filename): - if filename is None: - return None - try: - with open(filename, 'r') as fh: - return json.load(fh) - except Exception: - raise - - def _get_map(self): - for seq_record in SeqIO.parse(self.arguments.combined, 'fasta'): - seq_id = seq_record.description - ref_seq_re = re.compile(self.arguments.name) - if ref_seq_re.search(seq_id): - ref_seq = str(seq_record.seq).upper() - self.aligned_str = None - - def output_record(x): - listified_input = list(x) - if len(listified_input) == 1: - self.aligned_str = listified_input[0] - - def ignore_record(x): - pass - - for s in self.ref_genes: - _align_par(SeqRecord(Seq(s[1]), id=s[0]), [SeqRecord(Seq(ref_seq), id='ref')], - self.score_matrix_, False, False, 0.8, ignore_record, output_record) - if (self.aligned_str is not None): - break - - self.ref_map = self.aligned_str.seq.strip('-') - c = 0 - i = 0 - map_to_genome = [] - while i < len(self.ref_map): - if self.ref_map[i:i + 3] != '---': - map_to_genome.append(i) - i += 3 - i = 0 - c = 0 - while i < len(ref_seq): - if ref_seq[i:i + 3] != '---': - self.ref_seq_map.append(map_to_genome[c // 3] + self.aligned_str.annotations['position']) - c += 3 - else: - self.ref_seq_map.append(-1) - i += 3 - if self.summary_json is not None: - if self.gene not in self.summary_json: - self.summary_json[self.gene] = dict() - self.summary_json[self.gene]['map'] = self.ref_seq_map - - def _make_report_dict(self, row, indices): - result = {} - for i, t in indices: - result[t] = row[i] - return result - - def _get_genomic_annotation(self, site): - genomic_site_coord = -1 - gene_name = '' - gene_site = -1 - if len(self.ref_seq_map): - genomic_site_coord = self.ref_seq_map[site] - if genomic_site_coord < 0: - gene_site = 'Not in SC2 (deletion)' - else: - gene_name = None - for k in self.gene_coordinates: - if k[0] <= genomic_site_coord and k[1] > genomic_site_coord: - genomic_site = ((genomic_site_coord + k[3]) - k[0]) // 3 - gene_name = k[2] - gene_site = genomic_site + 1 - break - if gene_name is None: - gene_name = 'Not mapped' - else: - gene_name = 'N/A' - return (genomic_site_coord, gene_name, gene_site) - - def _get_incoming_labels(self): - json_data = self._load_json(self.arguments.labels) - self.incoming_labels = json_data - - -def traverse_tree_in_order(node, labels, slac_data, i, parent_tag, root): - node_tag = None - if 'name' not in node: - nn = root - else: - nn = root if node["name"] == 'root' else node["name"] - if nn in slac_data: - node_tag = slac_data[nn]["codon"][0][i] - if (parent_tag != node_tag): - labels[nn] = node_tag - labels[node["name"]] = node_tag - if "children" in node: - for c in node["children"]: - traverse_tree_in_order(c, labels, slac_data, i, node_tag, root) - - -def newick_parser(nwk_str, bootstrap_values, track_tags, json_map, import_settings, tags): - clade_stack = [] - automaton_state = 0 - current_node_name = "" - current_node_attribute = "" - current_node_annotation = "" - quote_delimiter = None - name_quotes = { - "'": 1, - '"': 1 - } - - def add_new_tree_level(): - new_level = { - "name": None - } - the_parent = clade_stack[len(clade_stack) - 1] - if "children" not in the_parent: - the_parent["children"] = [] - - clade_stack.append(new_level) - the_parent["children"].append(clade_stack[len(clade_stack) - 1]) - clade_stack[len(clade_stack) - 1]["original_child_order"] = len(the_parent["children"]) - - def finish_node_definition(): - nonlocal current_node_name - nonlocal current_node_annotation - nonlocal current_node_attribute - - this_node = clade_stack.pop() - if (bootstrap_values and "children" in this_node): - this_node["bootstrap_values"] = current_node_name - else: - this_node["name"] = current_node_name - - this_node["attribute"] = current_node_attribute - this_node["annotation"] = current_node_annotation - - try: - - if 'children' not in this_node: - node_tag = import_settings.default_tag - if json_map: - tn = json_map["branch attributes"]["0"][this_node["name"]] - else: - tn = this_node - nn = tn["original name"] if "original name" in tn else tn["name"] - for k, v in tags.items(): - if nn.find(k) >= 0: - node_tag = v - break - else: - counts = {} - node_tag = "" - for n in this_node['children']: - counts[n["tag"]] = 1 + (counts[n["tag"]] if n["tag"] in counts else 0) - if len(counts) == 1: - node_tag = list(counts.keys())[0] - - this_node["tag"] = node_tag - except Exception as e: - pass - print(e) - - if track_tags is not None: - track_tags[this_node["name"]] = [this_node["tag"], 'children' in this_node] - - current_node_name = "" - current_node_attribute = "" - current_node_annotation = "" - - def generate_error(location): - return { - 'json': None, - 'error': - "Unexpected '%s' in '%s[ERROR HERE]%s'" % (nwk_str[location], nwk_str[location - 20:location + 1], nwk_str[location + 1:location + 20]) - } - - tree_json = { - "name": "root" - } - - clade_stack.append(tree_json) - - space = re.compile(r"\s") - - for char_index in range(len(nwk_str)): - try: - current_char = nwk_str[char_index] - if automaton_state == 0: - # look for the first opening parenthesis - if (current_char == "("): - add_new_tree_level() - automaton_state = 1 - elif automaton_state == 1 or automaton_state == 3: - # case 1: // name - # case 3: { // branch length - # reading name - if (current_char == ":"): - automaton_state = 3 - elif current_char == "," or current_char == ")": - try: - finish_node_definition() - automaton_state = 1 - if (current_char == ","): - add_new_tree_level() - except Exception as e: - return generate_error(char_index) - print(e) - - elif (current_char == "("): - if len(current_node_name) > 0: - return generate_error(char_index) - else: - add_new_tree_level() - - elif (current_char in name_quotes): - if automaton_state == 1 and len(current_node_name) == 0 and len(current_node_attribute) == 0 and len(current_node_annotation) == 0: - automaton_state = 2 - quote_delimiter = current_char - continue - return generate_error(char_index) - else: - if (current_char == "["): - if len(current_node_annotation): - return generate_error(char_index) - else: - automaton_state = 4 - else: - if (automaton_state == 3): - current_node_attribute += current_char - else: - if (space.search(current_char)): - continue - if (current_char == ""): - char_index = len(nwk_str) - break - current_node_name += current_char - elif automaton_state == 2: - # inside a quoted expression - if (current_char == quote_delimiter): - if (char_index < len(nwk_str - 1)): - if (nwk_str[char_index + 1] == quote_delimiter): - char_index += 1 - current_node_name += quote_delimiter - continue - - quote_delimiter = 0 - automaton_state = 1 - continue - else: - current_node_name += current_char - elif automaton_state == 4: - # inside a comment / attribute - if (current_char == "]"): - automaton_state = 3 - else: - if (current_char == "["): - return generate_error(char_index) - current_node_annotation += current_char - except Exception as e: - return generate_error(char_index) - print(e) - - if (len(clade_stack) != 1): - return generate_error(len(nwk_str) - 1) - - if (len(current_node_name)): - tree_json['name'] = current_node_name - - return { - 'json': tree_json, - 'error': None - } - - -if __name__ == '__main__': - parser = argparse.ArgumentParser(description='Summarize selection analysis results.') - parser.add_argument('--combined', help='Combined reference and query alignment from TN-93', required=False, type=str) - parser.add_argument('--pvalue', help='p-value to use', required=False, type=float, default=0.05) - parser.add_argument('--gene', help='Name of the gene or sequence being analyzed', required=False, type=str) - parser.add_argument('--labels', help='JSON file with labels', required=False, type=str) - parser.add_argument('--annotation-output', help='Write a JSON file with site annotations', required=True, type=str) - parser.add_argument('--summary-output', help='Write a JSON file here segment annotations', required=True, type=str) - parser.add_argument('--annotation-inputs', help='Comma-separated list of site annotation files to merge', required=False, type=str) - parser.add_argument('--summary-inputs', help='Comma-separated list of segment annotation files to merge', required=False, type=str) - parser.add_argument('--default-tag', help='Default name for sequences that have no explicit label', required=False, type=str, default='Reference') - parser.add_argument('--name', help='The sequence ID to highlight', required=False, default='MN908947') - parser.add_argument('--mode', help='Operation mode, generate a summary or merge multiple summaries', type=str, choices=['summary', 'merge'], default='summary') - parser.add_argument('--relax', help='Path to RELAX.json file', required=False, type=str) - parser.add_argument('--busted', help='Path to BUSTED.json file', required=False, type=str) - parser.add_argument('--slac', help='Path to SLAC.json file', required=False, type=str) - parser.add_argument('--fel', help='Path to FEL.json file', required=False, type=str) - parser.add_argument('--cfel', help='Path to CFEL.json file', required=False, type=str) - parser.add_argument('--meme', help='Path to MEME.json file', required=False, type=str) - parser.add_argument('--meme-full', help='Path to MEME-full.json file', dest='meme_full', required=False, type=str) - parser.add_argument('--prime', help='Path to PRIME.json file', required=False, type=str) - parser.add_argument('--fade', help='Path to FADE.json file', required=False, type=str) - parser.add_argument('--bgm', help='Path to BGM.json file', required=False, type=str) - arguments = parser.parse_args() - if arguments.mode == 'summary': - analyzer = HyPhySummary(arguments) - annotation_json, summary_json = analyzer.summary() - if annotation_json is not None: - with open(arguments.annotation_output, 'w') as fh: - json.dump(annotation_json, fh, indent=1) - if summary_json is not None: - with open(arguments.summary_output, 'w') as fh: - json.dump(summary_json, fh, indent=1) - else: - summary = {} - annotation = {} - for filename in arguments.annotation_inputs.split(','): - with open(filename, 'r') as fh: - annotation.update(json.load(fh)) - for filename in arguments.summary_inputs.split(','): - with open(filename, 'r') as fh: - summary.update(json.load(fh)) - with open(arguments.annotation_output, 'w') as fh: - json.dump(annotation, fh, indent=1) - with open(arguments.summary_output, 'w') as fh: - json.dump(summary, fh, indent=1) - exit(0)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scripts/infer_stasis_clusters.py Wed Mar 11 11:14:01 2026 +0000 @@ -0,0 +1,171 @@ +#!/usr/bin/env python3 +""" +B-STILL Stasis Cluster Inference Tool +==================================== +Identifies regional footprints of extreme purifying selection (stasis) in B-STILL +JSON results using a FWER-controlled Hypergeometric Scan Statistic. + +Usage: + python3 infer_stasis_clusters.py input.json --ebf 10 --permutations 10000 --output results.json +""" + +import argparse +import json +import sys +import time + +import numpy as np +from scipy.stats import hypergeom + + +def get_sf_optimized(n, d, L, K, cache): + """Retrieves or computes Hypergeometric Survival Function value.""" + key = (n, d) + if key not in cache: + cache[key] = hypergeom.sf(n - 1, L, K, d) + return cache[key] + + +def scan_intervals(indices, L, K, max_size, sf_cache, threshold=None): + """ + Scans all possible intervals [i, j] anchored by stasis events. + Returns the minimum p-value if threshold is None, else returns all significant segments. + """ + best_p = 1.0 + segments = [] + num_events = len(indices) + + for n in range(3, min(max_size + 1, num_events + 1)): + for i in range(num_events - n + 1): + d = indices[i + n - 1] - indices[i] + 1 + p = get_sf_optimized(n, d, L, K, sf_cache) + + if threshold is None: + if p < best_p: + best_p = p + else: + if p <= threshold: + segments.append({ + "start": int(indices[i] + 1), + "end": int(indices[i + n - 1] + 1), + "p_value": p, + "k": n, + "d": int(d) + }) + + return best_p if threshold is None else segments + + +def merge_segments(segments, merge_dist=15): + """Merges overlapping or nearby significant segments.""" + if not segments: + return [] + segments.sort(key=lambda x: x['start']) + + merged = [] + curr = segments[0] + for next_s in segments[1:]: + if next_s['start'] <= curr['end'] + merge_dist: + curr['end'] = max(curr['end'], next_s['end']) + curr['p_value'] = min(curr['p_value'], next_s['p_value']) + curr['d'] = curr['end'] - curr['start'] + 1 + else: + merged.append(curr) + curr = next_s + merged.append(curr) + return merged + + +def main(): + parser = argparse.ArgumentParser(description="Infer stasis clusters from B-STILL JSON.") + parser.add_argument("input", help="Path to B-STILL JSON result file") + parser.add_argument("--ebf", type=float, default=10.0, help="EBF threshold for defining stasis sites (default: 10.0)") + parser.add_argument("--permutations", type=int, default=10000, help="Number of permutations for FWER control (default: 10000)") + parser.add_argument("--alpha", type=float, default=0.05, help="Family-wise error rate threshold (default: 0.05)") + parser.add_argument("--max-cluster", type=int, default=30, help="Maximum number of stasis sites per interval scan (default: 30)") + parser.add_argument("--merge", type=int, default=15, help="Distance in codons to merge adjacent clusters (default: 15)") + parser.add_argument("--output", help="Path to save results in JSON format") + + args = parser.parse_args() + + try: + with open(args.input, "r") as f: + data = json.load(f) + except Exception as e: + print("Error loading JSON: {0}".format(e)) + sys.exit(1) + + sites = data.get("MLE", {}).get("content", {}).get("0", []) + ebfs = [s[12] if (len(s) > 12 and isinstance(s[12], (int, float))) else 0 for s in sites] + L = len(ebfs) + + if L < 10: + print("Alignment too short for cluster analysis.") + sys.exit(0) + + stasis_indices = np.array([i for i, val in enumerate(ebfs) if val >= args.ebf]) + K = len(stasis_indices) + + print("--- B-STILL Cluster Inference ---") + print("Input: {0}".format(args.input)) + print("Gene Length (L): {0} codons".format(L)) + print("Stasis Sites (K): {0} (EBF >= {1})".format(K, args.ebf)) + + if K < 3: + print("Insufficient stasis sites to form clusters (minimum 3 required).") + sys.exit(0) + + print("Running {0} permutations for FWER control...".format(args.permutations)) + null_min_ps = [] + all_positions = np.arange(L) + sf_cache = {} + + start_time = time.time() + for i in range(args.permutations): + if i > 0 and i % 1000 == 0: + elapsed = time.time() - start_time + print(" Processed {0} permutations... ({1:.1f} per sec)".format(i, i / elapsed)) + shuffled = sorted(np.random.choice(all_positions, K, replace=False)) + min_p = scan_intervals(shuffled, L, K, args.max_cluster, sf_cache) + null_min_ps.append(min_p) + + crit_p = np.percentile(null_min_ps, args.alpha * 100) + print("Gene-specific Critical P-value (FWER {0}): {1:.2e}".format(args.alpha, crit_p)) + + print("Scanning observed sequence for significant clusters...") + raw_segments = scan_intervals(stasis_indices, L, K, args.max_cluster, sf_cache, threshold=crit_p) + + final_clusters = merge_segments(raw_segments, merge_dist=args.merge) + + for c in final_clusters: + c['k'] = sum(1 for idx in stasis_indices if c['start'] <= idx + 1 <= c['end']) + + print("\nFound {0} significant stasis clusters:".format(len(final_clusters))) + if final_clusters: + print("\nLegend:") + print(" k : Number of high-confidence stasis sites within the cluster") + print(" d : Total span of the cluster in codons") + print("\n{:<8} | {:<8} | {:<5} | {:<5} | {:<10}".format("Start", "End", "k", "d", "P-value")) + print("-" * 45) + for c in final_clusters: + print("{:<8} | {:<8} | {:<5} | {:<5} | {:.2e}".format(c['start'], c['end'], c['k'], c['d'], c['p_value'])) + + if args.output: + output_data = { + "input_file": args.input, + "parameters": vars(args), + "summary": { + "gene_length": L, + "total_stasis_sites": K, + "critical_p_value": float(crit_p), + "num_clusters": len(final_clusters) + }, + "clusters": final_clusters + } + with open(args.output, "w") as f: + json.dump(output_data, f, indent=4) + print("\nDetailed results saved to {0}".format(args.output)) + + +if __name__ == "__main__": + main()
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/bstill-in1.json Wed Mar 11 11:14:01 2026 +0000 @@ -0,0 +1,1880 @@ +{ + "MLE": { + "content": { + "0": [ + [ + 2.37190144157317, + 0.1886402906758332, + 0.003967400746549269, + 0.03170401941783556, + 0.1405070629863407, + 0.2478544806315437, + 0.155938987532467, + 0, + 0, + 1.668673069222721, + 0.9606238475229101, + 1.774898950889347, + 1.224638397608354 + ], + [ + 1.562666730096422, + 0.7176422560937019, + 0, + 9.089104346594827e-07, + 0, + 0.01450154962095004, + 0.2139088787662019, + 0, + 0, + 0, + 2.666666171615278e-05, + 0, + 0.05468540563699053 + ], + [ + 0.6841064654452979, + 0.6942845364725866, + 0, + 0.05269358336084695, + 0, + 0.07725223791333098, + 0.5503080822201034, + 0, + 0, + 0, + 1.631978457912503, + 0, + 0.311129391337898 + ], + [ + 1.603530309019734, + 0.7640979882187913, + 0, + 9.480689290490966e-08, + 0, + 0.0129282189776549, + 0.2196957351152485, + 0, + 0, + 0, + 2.781551610416608e-06, + 0, + 0.0486746608276061 + ], + [ + 0.7745431936738028, + 0.2481102774238383, + 0.005522827981575777, + 0.05017493786864266, + 0.1167934725144055, + 0.3301340073712549, + 0.2680133904625786, + 0, + 0, + 2.326512750426494, + 1.549852564474649, + 1.435734346731007, + 1.831535344411821 + ], + [ + 0.7291297549930137, + 0.2232251727035806, + 0.006100143264891383, + 0.05237454314416388, + 0.1226528460847873, + 0.3565428751858024, + 0.2618162231862851, + 0, + 0, + 2.57120169474055, + 1.62155131319508, + 1.51783284915089, + 2.059231243604498 + ], + [ + 0.5299477744525759, + 0.3199604238306135, + 0.006259406053599633, + 0.06427776426846346, + 0.09952410556612061, + 0.3591418826984177, + 0.3634880853401729, + 0, + 0, + 2.638753567868953, + 2.015398729009674, + 1.199979925906953, + 2.08265405394555 + ], + [ + 0.7850622182406316, + 0.208593049315937, + 0.006006859903783282, + 0.04987146289298329, + 0.1278017467009314, + 0.3521879280501232, + 0.2426664534291802, + 0, + 0, + 2.531645281107513, + 1.53998649735195, + 1.590887120603373, + 2.020404836198384 + ], + [ + 0.7353234573836737, + 0.7975030154821481, + 0, + 0.05027743242304463, + 0, + 0.06341157982977386, + 0.5594116332078475, + 0, + 0, + 0, + 1.55318611910382, + 0, + 0.2516128169853178 + ], + [ + 0.7745431936738028, + 0.2481102774238383, + 0.005522827981575777, + 0.05017493786864266, + 0.1167934725144055, + 0.3301340073712549, + 0.2680133904625786, + 0, + 0, + 2.326512750426494, + 1.549852564474649, + 1.435734346731007, + 1.831535344411821 + ], + [ + 1.368503706104576, + 1.018443324506961, + 0, + 0.0001254498320607177, + 0, + 0.01193786625873712, + 0.3202018713208712, + 0, + 0, + 0, + 0.003681050177071567, + 0, + 0.04490093906100618 + ], + [ + 1.891512511757744, + 0.6991376328075749, + 0, + 1.751923240630118e-08, + 0, + 0.01165814151829132, + 0.1681638544538555, + 0, + 0, + 0, + 5.139989704715699e-07, + 0, + 0.04383642254167481 + ], + [ + 2.431834329421355, + 1.009562872010422, + 0, + 1.221441266698392e-16, + 0, + 0.0006364569300359917, + 0.07920772759973152, + 0, + 0, + 0, + 3.583601884005705e-15, + 0, + 0.002366783255211392 + ], + [ + 1.806723917313566, + 0.2252028533994014, + 0, + 6.866469248832134e-08, + 0.1375988453962431, + 0.08154555935253366, + 0.05278784386842107, + 0, + 0, + 0, + 2.01456218134058e-06, + 1.732300574702625, + 0.3299557252356888 + ], + [ + 1.939176483317792, + 0.2458213387285422, + 0, + 1.738579826234006e-07, + 0.1335892393732069, + 0.07057009408407149, + 0.05344616718308724, + 0, + 0, + 0, + 5.100842090286179e-06, + 1.674038449258792, + 0.2821740194676092 + ], + [ + 1.701885160917155, + 0.6692312861959405, + 0, + 2.830595641477326e-15, + 0, + 0.01418461389805017, + 0.1813756977292657, + 0, + 0, + 0, + 8.304720128766762e-14, + 0, + 0.05347304277139552 + ], + [ + 0.8544431959352744, + 0.2818378160278725, + 0.004820440754868181, + 0.04684686890194468, + 0.1105717971506182, + 0.2963971057789578, + 0.2714045638740059, + 0, + 0, + 2.029196204717131, + 1.441999328126967, + 1.349743550722787, + 1.565522493629649 + ], + [ + 0.802168833121828, + 0.6918901075329866, + 0, + 0.04741696195675961, + 0, + 0.07124222775246358, + 0.5114463548262042, + 0, + 0, + 0, + 1.460420930116867, + 0, + 0.2850676929040508 + ], + [ + 1.802078345646651, + 0.2428033537468315, + 0, + 3.676167105058432e-12, + 0.1328849202578949, + 0.07926143754434137, + 0.05783115701254503, + 0, + 0, + 0, + 1.07855528733406e-10, + 1.663859881128573, + 0.3199179312039991 + ], + [ + 2.666449102656562, + 0.2117849019831195, + 0, + 3.476039444085693e-24, + 0.1526588335491243, + 0.01700226120839039, + 0.013658552843616, + 0, + 0, + 0, + 1.019839581347594e-22, + 1.956056623117781, + 0.06427870755262995 + ], + [ + 0.6973625851918384, + 0.6325643923885375, + 0, + 0.05200742974645888, + 0, + 0.0861883321503862, + 0.52575217072186, + 0, + 0, + 0, + 1.609561684072903, + 0, + 0.3505134991058557 + ], + [ + 0.7741835394458966, + 1.146286320796753, + 0, + 0.04869915748102294, + 0, + 0.01302668396730367, + 0.6537307097065768, + 0, + 0, + 0, + 1.501933603136475, + 0, + 0.04905027386912096 + ], + [ + 0.7838600108072267, + 0.2177045440618246, + 0.005876900197546548, + 0.04988407979012211, + 0.1250367284178624, + 0.3463996143460703, + 0.2485342821293646, + 0, + 0, + 2.476548794279335, + 1.540396551087343, + 1.551549257849819, + 1.969600159244391 + ], + [ + 1.842678711965785, + 0.6976549084016578, + 0, + 1.418250592402009e-06, + 0, + 0.01209147296000177, + 0.172682714205385, + 0, + 0, + 0, + 4.161029139660306e-05, + 0, + 0.04548575896277397 + ], + [ + 0.7850622182406316, + 0.208593049315937, + 0.006006859903783282, + 0.04987146289298329, + 0.1278017467009314, + 0.3521879280501232, + 0.2426664534291802, + 0, + 0, + 2.531645281107513, + 1.53998649735195, + 1.590887120603373, + 2.020404836198384 + ], + [ + 1.518810528461327, + 1.15704119275133, + 0, + 9.355347301586942e-06, + 0, + 0.00214817313201717, + 0.3490421587997192, + 0, + 0, + 0, + 0.0002744802781629473, + 0, + 0.008000482770602968 + ], + [ + 0.7466492801192616, + 0.2229949058866568, + 0.006004295077486124, + 0.05155161115996283, + 0.1229707778066775, + 0.3522231767152224, + 0.2584389561779671, + 0, + 0, + 2.530557782269002, + 1.594687931218979, + 1.522318919869294, + 2.020716999038191 + ], + [ + 0.6139914007138123, + 0.238876466960058, + 0.006615045328761058, + 0.05865196231920607, + 0.1167470913229019, + 0.3784886866734589, + 0.2961310976829272, + 0, + 0, + 2.789677407780307, + 1.828013896297988, + 1.435088822804982, + 2.263168213588175 + ], + [ + 0.4476616830922424, + 0.3241072423960543, + 0.006939558644388884, + 0.07159657532848238, + 0.09789353864112586, + 0.3848358560421425, + 0.3932581631825385, + 0, + 0, + 2.927486540793041, + 2.262573431258717, + 1.178186448483427, + 2.324863645020361 + ], + [ + 0.7814660152985883, + 0.238200977680139, + 0.00560985553702561, + 0.04990694536506451, + 0.1193550953169743, + 0.3342128304541691, + 0.2611540800502705, + 0, + 0, + 2.363380267818688, + 1.54113971832388, + 1.471492071131464, + 1.865523256569223 + ], + [ + 1.476650116625344, + 0.2703123511600233, + 0, + 1.397860067816162e-07, + 0.1217064452705068, + 0.1021912673393319, + 0.08332736710388504, + 0, + 0, + 0, + 4.101199795208635e-06, + 1.504498195898301, + 0.4230024964545591 + ], + [ + 3.395451872605245, + 0.1802416335163652, + 0, + 4.902100470609803e-33, + 0.1662849129692403, + 0.003316070030981503, + 0.002796760603587598, + 0, + 0, + 0, + 1.438233418259019e-31, + 2.165474010913182, + 0.01236457543139053 + ], + [ + 4.455583867197113, + 0.2071515544983714, + 0, + 7.386224401705199e-16, + 0.1528830504769916, + 0.001805610450918449, + 0.00204578335023782, + 0, + 0, + 0, + 2.167053660565055e-14, + 1.959448066014859, + 0.006722362159609571 + ], + [ + 0.8082270971081225, + 0.2360802264116395, + 0.005504755234448164, + 0.04878078963718297, + 0.1202806197865643, + 0.3293041998082092, + 0.2552815367696719, + 0, + 0, + 2.318857394603415, + 1.504580334973355, + 1.484462690300711, + 1.824671351249462 + ], + [ + 0.7466492801192616, + 0.2229949058866568, + 0.006004295077486124, + 0.05155161115996283, + 0.1229707778066775, + 0.3522231767152224, + 0.2584389561779671, + 0, + 0, + 2.530557782269002, + 1.594687931218979, + 1.522318919869294, + 2.020716999038191 + ], + [ + 1.710062789454872, + 0.2265806091128257, + 0, + 1.57301401366183e-06, + 0.1359933776590127, + 0.08856089401136846, + 0.05705170237250348, + 0, + 0, + 0, + 4.615092844656495e-05, + 1.708907194939115, + 0.3610998469075707 + ], + [ + 0.7450414035467594, + 0.2381698908886491, + 0.005802189368597009, + 0.05156486816033858, + 0.1188315581479944, + 0.3430366929203538, + 0.2678792383433989, + 0, + 0, + 2.444881618972961, + 1.595120316697923, + 1.464167106236557, + 1.940494577965652 + ], + [ + 0.7822339440816853, + 0.2312859667239698, + 0.005696644085214549, + 0.04989989253103572, + 0.1212016055119595, + 0.3382117577139476, + 0.2569760831420775, + 0, + 0, + 2.400152961653949, + 1.540910486283025, + 1.497396821847766, + 1.899252143268999 + ], + [ + 2.875222525745583, + 0.1882569692789736, + 0, + 3.812421317255523e-22, + 0.1604084057614074, + 0.01509030890649568, + 0.00978623643996823, + 0, + 0, + 0, + 1.118531081897201e-20, + 2.074325134459836, + 0.05693963646010022 + ], + [ + 1.554472823119486, + 0.2270550947208839, + 0, + 2.972748123383282e-09, + 0.1335162996303752, + 0.1024215571908797, + 0.06442788901329252, + 0, + 0, + 0, + 8.72178310799649e-08, + 1.672983582075318, + 0.4240645136084172 + ], + [ + 1.85017624830715, + 1.273789996797173, + 0, + 4.676358041323327e-06, + 0, + 0.001396369558983883, + 0.3013108639954526, + 0, + 0, + 0, + 0.0001372008979212347, + 0, + 0.005196610932115154 + ], + [ + 1.553307718629485, + 0.2290946099571537, + 0, + 7.420538129782893e-09, + 0.1329393385497678, + 0.1021242264821265, + 0.06516112627494447, + 0, + 0, + 0, + 2.177121024528259e-07, + 1.664645725366268, + 0.4226934295870697 + ], + [ + 2.116174676015694, + 0.2186793534126047, + 0, + 3.258965804066688e-07, + 0.1421909885424709, + 0.06539850500581773, + 0.0418103290277103, + 0, + 0, + 0, + 9.561523848810108e-06, + 1.799696442994069, + 0.2600484801098747 + ], + [ + 0.7451488685641325, + 0.2371710183518504, + 0.005815626574713075, + 0.05156396728831149, + 0.11910675842818, + 0.3436465303328639, + 0.2672538277116495, + 0, + 0, + 2.450576805897242, + 1.595090933802356, + 1.468016430062528, + 1.945750490573926 + ], + [ + 0.6780714428114981, + 0.2561413103860607, + 0.005954493713358088, + 0.0548575818395097, + 0.1135036290373067, + 0.3495533170064655, + 0.2918423147775195, + 0, + 0, + 2.509442873777838, + 1.702889911000609, + 1.390114503073194, + 1.997168441843091 + ], + [ + 1.455346893303986, + 0.706097412281154, + 0, + 4.768918100048611e-07, + 0, + 0.01629959420260205, + 0.2284255224375048, + 0, + 0, + 0, + 1.399159542418028e-05, + 0, + 0.06157818901580232 + ], + [ + 0.756045620202639, + 0.6938569709056955, + 0, + 0.04928890162466355, + 0, + 0.07327554655699671, + 0.525968012825515, + 0, + 0, + 0, + 1.521064897732399, + 0, + 0.2938471035629126 + ], + [ + 1.94164392082409, + 0.2031906900962181, + 0, + 1.178252414408678e-06, + 0.1455746306019786, + 0.07621532078940443, + 0.04246625927273106, + 0, + 0, + 0, + 3.4568936405487e-05, + 1.849819490059258, + 0.3066087165932058 + ], + [ + 1.993108977516711, + 1.554267095427792, + 0, + 2.72064549968883e-06, + 0, + 0.0009581318487046532, + 0.3184320920810634, + 0, + 0, + 0, + 7.982157742490731e-05, + 0, + 0.003564138384649247 + ], + [ + 1.852925055443927, + 1.244874321298211, + 0, + 1.287820008578644e-07, + 0, + 0.001444119583006403, + 0.2961694091055677, + 0, + 0, + 0, + 3.778351795670636e-06, + 0, + 0.00537457038049712 + ], + [ + 2.121982069300102, + 0.2091388920279718, + 0, + 3.31570030062405e-08, + 0.1450602807189847, + 0.06632247325351143, + 0.03944528626880474, + 0, + 0, + 0, + 9.727975107807743e-07, + 1.842174678137804, + 0.263983497359674 + ], + [ + 2.610370258395103, + 0.2130332292794007, + 0, + 8.962419276124675e-16, + 0.1521422247092281, + 0.01784461753340373, + 0.01440871876147212, + 0, + 0, + 0, + 2.629495455805672e-14, + 1.948249369118729, + 0.06752117848888889 + ], + [ + 1.806622685375836, + 0.2231835174273506, + 0, + 5.105586874988206e-16, + 0.138162814847147, + 0.08186544497788772, + 0.05222820684356491, + 0, + 0, + 0, + 1.497934550190732e-14, + 1.740538897622541, + 0.3313654805623549 + ], + [ + 1.896356773285718, + 0.7086811267589171, + 0, + 1.055705453511506e-06, + 0, + 0.01142111569600631, + 0.1698729826887296, + 0, + 0, + 0, + 3.097350768542371e-05, + 0, + 0.04293487192745708 + ], + [ + 0.7291297549930137, + 0.2232251727035806, + 0.006100143264891383, + 0.05237454314416388, + 0.1226528460847873, + 0.3565428751858024, + 0.2618162231862851, + 0, + 0, + 2.57120169474055, + 1.62155131319508, + 1.51783284915089, + 2.059231243604498 + ], + [ + 2.784723898369105, + 0.2104838044963939, + 0, + 3.194776303614133e-25, + 0.1532630753238199, + 0.01547131152035484, + 0.01241326607036699, + 0, + 0, + 0, + 9.373194350601072e-24, + 1.965200318114478, + 0.05839984922067492 + ], + [ + 1.668848865058064, + 0.2183473704994984, + 0, + 1.588230817709033e-07, + 0.1377431974729735, + 0.0934883467174995, + 0.05632189346552098, + 0, + 0, + 0, + 4.659731097769554e-06, + 1.734408207105024, + 0.383263144888717 + ], + [ + 2.420048530935313, + 1.01545224213953, + 0, + 1.681331521007675e-16, + 0, + 0.0006443576802555261, + 0.08097696222923502, + 0, + 0, + 0, + 4.932879681237327e-15, + 0, + 0.002396182605406917 + ], + [ + 1.821355299375191, + 0.2250120680865083, + 0, + 9.820459614298705e-10, + 0.1378235115037661, + 0.08055950147301365, + 0.05218772879546793, + 0, + 0, + 0, + 2.881236991876874e-08, + 1.735581148752612, + 0.325616280807679 + ], + [ + 0.6600131019549501, + 0.2912180645229273, + 0.005667975167947816, + 0.05574515672930364, + 0.1060655224709823, + 0.3357106340818104, + 0.3147117841837742, + 0, + 0, + 2.38800510389903, + 1.732068594877769, + 1.288209023860798, + 1.878108891409073 + ], + [ + 0.702796393792438, + 4.219555257118009, + 0, + 0.05639687885909338, + 0, + 1.262015000700071e-06, + 0.9036603950501021, + 0, + 0, + 0, + 1.753528660510518, + 0, + 4.690056081379463e-06 + ], + [ + 1.691179114177123, + 0.2456572441735711, + 0, + 6.888713677253765e-15, + 0.1307380233433877, + 0.08696007901160974, + 0.06353738779926375, + 0, + 0, + 0, + 2.021088363823751e-13, + 1.632935461427574, + 0.3539509885786877 + ], + [ + 0.7030050010216371, + 0.8248938146618999, + 0, + 0.05184824859638799, + 0, + 0.0627359475557803, + 0.5764272764716464, + 0, + 0, + 0, + 1.604365841064396, + 0, + 0.2487525102208104 + ], + [ + 0.7112683452842608, + 3.819893684629089, + 0, + 0.05540671242091885, + 0, + 1.221520523561991e-05, + 0.8877921163271038, + 0, + 0, + 0, + 1.720935899995331, + 0, + 4.539615225234597e-05 + ], + [ + 0.6811593783075932, + 0.6161466130849987, + 0, + 0.05281812700395628, + 0, + 0.09041517842364513, + 0.5254637356275006, + 0, + 0, + 0, + 1.636050805843772, + 0, + 0.3694120942004063 + ], + [ + 0.7887227185805217, + 1.603086922381313, + 0, + 0.04866954399596279, + 0, + 0.002209708494808728, + 0.729890685983207, + 0, + 0, + 0, + 1.500973567385813, + 0, + 0.008230167649811318 + ], + [ + 3.318889529458268, + 0.2024249325672899, + 0, + 5.290408460225072e-07, + 0.1487375910523945, + 0.04347385356967635, + 0.02518246190728167, + 0, + 0, + 0, + 1.552160408531956e-05, + 1.897033834066669, + 0.1689056833570038 + ], + [ + 1.93309646445491, + 0.2231899913210519, + 0, + 1.493020028609609e-08, + 0.1394926948643973, + 0.07382731899620482, + 0.04789742342532349, + 0, + 0, + 0, + 4.380390292304733e-07, + 1.760008203105529, + 0.2962361818705989 + ], + [ + 0.6743439144023577, + 4.30129291871795, + 0, + 0.05779207843878828, + 0, + 1.207847581727579e-06, + 0.9117898092006219, + 0, + 0, + 0, + 1.79956994002137, + 0, + 4.48875218287148e-06 + ], + [ + 0.7515110589320404, + 0.6270310051311504, + 0, + 0.04946828398575113, + 0, + 0.08376427789096541, + 0.5059106841242824, + 0, + 0, + 0, + 1.526888768474439, + 0, + 0.3397540164847605 + ], + [ + 0.7275882912854384, + 0.2383990707200944, + 0.00589461075699275, + 0.05238621059626656, + 0.1185202960835768, + 0.3472351157941612, + 0.2713311646386871, + 0, + 0, + 2.484056347600863, + 1.621932515136185, + 1.459816270064436, + 1.976877808055405 + ], + [ + 3.080019644858323, + 0.2083991841202883, + 0, + 6.695527143368801e-11, + 0.1538346902320613, + 0.01270068471860965, + 0.01016070376213695, + 0, + 0, + 0, + 1.964409123972975e-09, + 1.973862306967853, + 0.04780697561776954 + ], + [ + 2.588112052107538, + 1.599925027205681, + 0, + 2.989389622320505e-11, + 0, + 0.0001600243549282456, + 0.1688481574501781, + 0, + 0, + 0, + 8.770607785220995e-10, + 0, + 0.0005947967119833063 + ], + [ + 0.6780714428114981, + 0.2561413103860607, + 0.005954493713358088, + 0.0548575818395097, + 0.1135036290373067, + 0.3495533170064655, + 0.2918423147775195, + 0, + 0, + 2.509442873777838, + 1.702889911000609, + 1.390114503073194, + 1.997168441843091 + ], + [ + 1.745264853050264, + 1.304128937655899, + 0, + 3.659138281475959e-10, + 0, + 0.001460163924369411, + 0.3256907041636892, + 0, + 0, + 0, + 1.073559179769449e-08, + 0, + 0.005434369817498072 + ], + [ + 0.8100606931103369, + 0.2210483969428178, + 0.005694796448494577, + 0.04876214671049593, + 0.1244330796211904, + 0.3380346714064464, + 0.2461611392608926, + 0, + 0, + 2.399370042881849, + 1.50397584163019, + 1.542994199813493, + 1.89774988825283 + ], + [ + 2.854965276275905, + 0.1882757822109498, + 0, + 8.209366298324275e-22, + 0.1603980396162084, + 0.01531132180416759, + 0.00991951294883153, + 0, + 0, + 0, + 2.408556296176966e-20, + 2.074165475406119, + 0.05778654250750642 + ], + [ + 3.460944755463362, + 1.141529483133979, + 0, + 5.260308396021496e-10, + 0, + 0.0001638940551603185, + 0.07695701922899657, + 0, + 0, + 0, + 1.543328492519697e-08, + 0, + 0.0006091824113960658 + ], + [ + 4.443526386836507, + 0.2060932541208613, + 0, + 1.256096152825613e-16, + 0.1532695706607249, + 0.00181860104727017, + 0.002037550955365864, + 0, + 0, + 0, + 3.68527628997301e-15, + 1.965298679764369, + 0.006770814801494314 + ], + [ + 1.935575660741212, + 0.2231597401859894, + 0, + 3.712409081848069e-09, + 0.1395242610074968, + 0.07368993714076988, + 0.04781183424402703, + 0, + 0, + 0, + 1.089188370494513e-07, + 1.760471059340695, + 0.295641076321942 + ], + [ + 0.7451488685641325, + 0.2371710183518504, + 0.005815626574713075, + 0.05156396728831149, + 0.11910675842818, + 0.3436465303328639, + 0.2672538277116495, + 0, + 0, + 2.450576805897242, + 1.595090933802356, + 1.468016430062528, + 1.945750490573926 + ], + [ + 2.009519774740871, + 0.2994940718836886, + 0, + 2.086585335270213e-15, + 0.1263755472759568, + 0.03076666851899694, + 0.04090726151267173, + 0, + 0, + 0, + 6.121858940319745e-14, + 1.570565513428026, + 0.1179682405650535 + ], + [ + 1.179579779681573, + 0.2156520443033609, + 0.004477264777113072, + 0.03818584231965162, + 0.129977458660623, + 0.2778396627565591, + 0.1990003588468661, + 0, + 0, + 1.8840843179711, + 1.164818814781925, + 1.622016715610987, + 1.429794366341853 + ], + [ + 0.8100606931103369, + 0.2210483969428178, + 0.005694796448494577, + 0.04876214671049593, + 0.1244330796211904, + 0.3380346714064464, + 0.2461611392608926, + 0, + 0, + 2.399370042881849, + 1.50397584163019, + 1.542994199813493, + 1.89774988825283 + ], + [ + 2.79489290615793, + 0.1963935237886962, + 0, + 6.512859566772791e-22, + 0.157665201189306, + 0.01574023897703996, + 0.0110443984204106, + 0, + 0, + 0, + 1.910816053958878e-20, + 2.032211457612951, + 0.05943120856838233 + ], + [ + 0.5166616367041028, + 0.3233533722764604, + 0.006332203848538324, + 0.0653304024559289, + 0.09886006729552094, + 0.3618100305216869, + 0.3691834073238334, + 0, + 0, + 2.669638220256299, + 2.050710640121726, + 1.191095148079879, + 2.106898429016608 + ], + [ + 1.355405883058725, + 0.3099691422004031, + 0, + 6.509052173526622e-07, + 0.1121049439823004, + 0.10852061732293, + 0.1055080683557319, + 0, + 0, + 0, + 1.909700241102927e-05, + 1.370821531532695, + 0.4523909648113782 + ], + [ + 0.7476001203737511, + 0.2148678819973834, + 0.006120767311452857, + 0.05154297881663523, + 0.1253561837567407, + 0.3574163820444085, + 0.2531923941162151, + 0, + 0, + 2.57994823652838, + 1.594406388361896, + 1.556081435102351, + 2.067082334880825 + ], + [ + 3.020577582679845, + 0.1915523974315714, + 0, + 2.81533475495939e-12, + 0.1592506570999948, + 0.01358417755973306, + 0.009184901223337856, + 0, + 0, + 0, + 8.259946022029134e-11, + 2.056517859767093, + 0.05117835122106983 + ], + [ + 0.7275882912854384, + 0.2383990707200944, + 0.00589461075699275, + 0.05238621059626656, + 0.1185202960835768, + 0.3472351157941612, + 0.2713311646386871, + 0, + 0, + 2.484056347600863, + 1.621932515136185, + 1.459816270064436, + 1.976877808055405 + ], + [ + 2.780345523574176, + 1.390886491467611, + 0, + 4.286258480759726e-10, + 0, + 0.0001690691585432724, + 0.1293574644772065, + 0, + 0, + 0, + 1.257550763377201e-08, + 0, + 0.0006284211510164636 + ], + [ + 0.8087052652928001, + 0.2319510232768812, + 0.005554967290647722, + 0.04877609169960519, + 0.1213777688846107, + 0.3316338009908808, + 0.2528249901526476, + 0, + 0, + 2.340127187024993, + 1.504428003009994, + 1.499873912855815, + 1.843984562171594 + ], + [ + 0.8100606931103369, + 0.2210483969428178, + 0.005694796448494577, + 0.04876214671049593, + 0.1244330796211904, + 0.3380346714064464, + 0.2461611392608926, + 0, + 0, + 2.399370042881849, + 1.50397584163019, + 1.542994199813493, + 1.89774988825283 + ], + [ + 0.6627676494784243, + 1.457574856597744, + 0, + 0.05446053162455292, + 0, + 0.002948194984354313, + 0.7586858797062647, + 0, + 0, + 0, + 1.689854771403408, + 0, + 0.01098882986854586 + ], + [ + 1.844246022707493, + 0.7883513823128496, + 0, + 9.954149216112677e-07, + 0, + 0.01032502330375877, + 0.1930089887923725, + 0, + 0, + 0, + 2.920463256423553e-05, + 0, + 0.03877139449793326 + ], + [ + 2.044824742140833, + 0.8625018959425371, + 0, + 1.019778224610633e-06, + 0, + 0.008216114651538785, + 0.186963201661752, + 0, + 0, + 0, + 2.991943201348482e-05, + 0, + 0.03078664855927679 + ], + [ + 0.808349447170343, + 0.2350906748312896, + 0.005517393377413162, + 0.0487795399514531, + 0.1205567671544379, + 0.329883894585105, + 0.2546773151191671, + 0, + 0, + 2.324210700990352, + 1.504539813410912, + 1.488338002773054, + 1.829464674473086 + ], + [ + 0.6274242099994349, + 0.7026426678504653, + 0, + 0.05585842966521806, + 0, + 0.07979347056118838, + 0.5738766232797755, + 0, + 0, + 0, + 1.735796346635547, + 0, + 0.3222515499882964 + ], + [ + 3.56746472359402, + 1.161714037528714, + 0, + 1.073042838281155e-10, + 0, + 0.0001527280292547523, + 0.07569258820979197, + 0, + 0, + 0, + 3.148213870070041e-09, + 0, + 0.0005676727567759391 + ], + [ + 2.407902931385677, + 0.3189505593771069, + 0.003081480022752993, + 0.03193302199798217, + 0.1091318309663298, + 0.2031516150954192, + 0.2096783057782256, + 0, + 0, + 1.294906561177292, + 0.9677914516023093, + 1.330012703023553, + 0.9474527339639 + ], + [ + 1.934844750707982, + 0.202759314237974, + 0, + 1.810678154211758e-07, + 0.1456430652963479, + 0.07670420905824162, + 0.04254512434024967, + 0, + 0, + 0, + 5.312372355982809e-06, + 1.850837332691564, + 0.3087388704650218 + ], + [ + 0.7259638255888147, + 0.2569778156171333, + 0.005669517422140116, + 0.05239678503252603, + 0.1139944094613952, + 0.3367750292313865, + 0.282303404017389, + 0, + 0, + 2.388658584226088, + 1.62227801389694, + 1.396898593003307, + 1.887087265320347 + ], + [ + 1.9875855649525, + 0.2506012293177031, + 0, + 3.475843354098992e-07, + 0.1328577548169451, + 0.06752470021588143, + 0.05299069874129397, + 0, + 0, + 0, + 1.01978240472033e-05, + 1.66346762705324, + 0.2691152438269667 + ], + [ + 0.7274996316772561, + 0.2394222393703301, + 0.005882272824539831, + 0.05238677130700074, + 0.118272222806534, + 0.3466605757282492, + 0.2719345732123978, + 0, + 0, + 2.478826236906296, + 1.62195083505527, + 1.456350889518685, + 1.97187126861563 + ], + [ + 0.8605782724699829, + 0.2247184729058926, + 0.005409092684945906, + 0.04678279432265425, + 0.1240743594918608, + 0.3246221411064367, + 0.2403548330681676, + 0, + 0, + 2.278340747888811, + 1.43993024290323, + 1.53791591619888, + 1.786258422628224 + ], + [ + 3.468083271338649, + 0.2066173082208947, + 0, + 2.165841829519958e-17, + 0.157366794464489, + 0.003006975929322114, + 0.003431812796324661, + 0, + 0, + 0, + 6.354390564931369e-16, + 2.027646853859842, + 0.01120858533678603 + ], + [ + 3.014018554305045, + 0.1826085667310856, + 0, + 4.532829465427104e-12, + 0.162335011374932, + 0.01386121341230104, + 0.008517903163234072, + 0, + 0, + 0, + 1.3298925339376e-10, + 2.104067271107116, + 0.05223675376964913 + ], + [ + 0.8192997514001863, + 1.145547153718677, + 0, + 0.04690689964374897, + 0, + 0.01262315308806198, + 0.6390695775051611, + 0, + 0, + 0, + 1.44393808286918, + 0, + 0.04751140577999204 + ], + [ + 2.598882601641038, + 0.680634815486584, + 0, + 2.391632865972642e-17, + 0, + 0.002419142791274311, + 0.06111277873835638, + 0, + 0, + 0, + 7.016841724626171e-16, + 0, + 0.009012107581700636 + ], + [ + 0.7353245907385118, + 0.7975561963121701, + 0, + 0.05027742640756919, + 0, + 0.06340720159424293, + 0.559422975813991, + 0, + 0, + 0, + 1.553185923434107, + 0, + 0.2515942683273207 + ], + [ + 0.7850622182406316, + 0.208593049315937, + 0.006006859903783282, + 0.04987146289298329, + 0.1278017467009314, + 0.3521879280501232, + 0.2426664534291802, + 0, + 0, + 2.531645281107513, + 1.53998649735195, + 1.590887120603373, + 2.020404836198384 + ], + [ + 0.7316262003502513, + 0.6794756409336005, + 0, + 0.05037035497163603, + 0, + 0.07655595391329398, + 0.5295230120345745, + 0, + 0, + 0, + 1.55620897370794, + 0, + 0.3080926639932846 + ], + [ + 1.993233321205702, + 0.2167322809208545, + 0, + 1.004344541808659e-08, + 0.1418737956125924, + 0.07140192233581792, + 0.04447392907879896, + 0, + 0, + 0, + 2.946659103874186e-07, + 1.795018019637471, + 0.2857558267431315 + ], + [ + 0.7786226672064415, + 0.2686023741332054, + 0.005274302709848259, + 0.04993065195314273, + 0.1122158847959012, + 0.3183146890342138, + 0.2782736801146184, + 0, + 0, + 2.221265407529709, + 1.541910257583103, + 1.372349590548795, + 1.735344544927899 + ], + [ + 1.806925041423277, + 0.2241784346178917, + 0, + 2.539106164230744e-09, + 0.1378707515320769, + 0.08168231408748063, + 0.05249656677877327, + 0, + 0, + 0, + 7.449515506813414e-08, + 1.736271165105949, + 0.3305582914482377 + ], + [ + 0.8050319384914945, + 0.2682599928043122, + 0.005155925391265884, + 0.04880999591927179, + 0.1126585788508567, + 0.3127159047426134, + 0.2732570142747157, + 0, + 0, + 2.171152582944473, + 1.505527390740141, + 1.378450904234144, + 1.690933961726218 + ], + [ + 0.8100606931103369, + 0.2210483969428178, + 0.005694796448494577, + 0.04876214671049593, + 0.1244330796211904, + 0.3380346714064464, + 0.2461611392608926, + 0, + 0, + 2.399370042881849, + 1.50397584163019, + 1.542994199813493, + 1.89774988825283 + ], + [ + 1.554084381004414, + 0.2290821140077437, + 0, + 6.561632230126507e-08, + 0.132955754640726, + 0.1020493001503378, + 0.06511716942147001, + 0, + 0, + 0, + 1.925125653279631e-06, + 1.664882806391129, + 0.4223480642914518 + ], + [ + 0.6139190888340093, + 0.2398748397626799, + 0.006599648244035076, + 0.05865199674143606, + 0.1164753524659064, + 0.377812669283267, + 0.2967954502893046, + 0, + 0, + 2.78314105700088, + 1.828015035985376, + 1.431308178777515, + 2.256671396546136 + ], + [ + 0.8100606931103369, + 0.2210483969428178, + 0.005694796448494577, + 0.04876214671049593, + 0.1244330796211904, + 0.3380346714064464, + 0.2461611392608926, + 0, + 0, + 2.399370042881849, + 1.50397584163019, + 1.542994199813493, + 1.89774988825283 + ] + ] + }, + "headers": [ + [ + "alpha", + "Mean posterior synonymous substitution rate at a site" + ], + [ + "beta", + "Mean posterior non-synonymous substitution rate at a site" + ], + [ + "Prob[alpha=beta=0]", + "Posterior probability of alpha=beta=0" + ], + [ + "Prob[alpha=0]", + "Posterior probability of alpha=0" + ], + [ + "Prob[beta=0]", + "Posterior probability of beta=0" + ], + [ + "Prob[alpha,beta~0]", + "Posterior probability of alpha and beta within a radius of 0.5 of 0" + ], + [ + "Prob[alpha<beta]", + "Posterior probability of positive selection at a site" + ], + [ + "PSRF", + "Potential scale reduction factor - an MCMC mixing measure" + ], + [ + "Neff", + "Estimated effective sample site for Prob [alpha<beta]" + ], + [ + "EBF[alpha=beta=0]", + "Empirical Bayes Factor for alpha=beta=0" + ], + [ + "EBF[alpha=0]", + "Empirical Bayes Factor for alpha=0" + ], + [ + "EBF[beta=0]", + "Empirical Bayes Factor for beta=0" + ], + [ + "EBF[alpha,beta~0]", + "Empirical Bayes Factor for alpha and beta within a radius of 0.5 of 0" + ] + ] + }, + "analysis": { + "authors": "Sergei L Kosakovsky Pond", + "citation": "FUBAR: a fast, unconstrained bayesian approximation for inferring selection (2013), Mol Biol Evol. 30(5):1196-205", + "contact": "spond@temple.edu", + "info": "Perform a B-STILL (Bayesian Significance Test of Invariant Low Likelihoods) \n analysis to detect invariant sites (alpha=beta=0) and quantify their \n posterior probabilities and Empirical Bayes Factors. This is a modified \n version of the standard FUBAR analysis that uses a denser grid around \n zero and reports the probability of a site being effectively invariant.", + "requirements": "in-frame codon alignment (possibly partitioned) and a phylogenetic tree (one per partition)", + "version": "1.0 (B-STILL)" + }, + "input": { + "file name": "/home/danielle/Documents/veg/tools-iuc/tools/hyphy/test-data/fubar-in1.fa.gz", + "number of sequences": 163, + "number of sites": 566, + "partition count": 1, + "trees": { + "0": "(KF790010:0.001247,CY147300:0.000623,((CY168239:0.001872,(CY171039:0.001874,KF790389:0.000623)Node7:0.000624)Node5:1e-10,((CY141224:0.001247,(CY147305:1e-10,KF790037:0.000623)Node13:0.000623)Node11:1e-10,(((KF790403:0.000623,KF761507:0.001876)Node18:1e-10,KC526205:0.000623)Node17:1e-10,((CY169303:1e-10,(KF789585:0.000623,CY141202:0.000623)Node25:0.000623)Node23:0.000623,(((KJ667974:0.002501,KJ938675:0.001873)Node30:0.000623,CY134876:1e-10)Node29:0.000623,((KF790414:0.001248,(KF790384:0.001245,KF790408:0.00125)Node37:1e-10)Node35:1e-10,((KF886352:0.001882,(KF790438:0.000623,CY134996:0.001873)Node43:0.000623)Node41:0.001875,(KF789591:0.001879,((KF790049:0.001255,(CY134956:0.000624,CY183153:0.000624)Node51:0.000626)Node49:0.001249,((CY168407:0.004394,CY183065:0.003128)Node55:1e-10,(KF598733:0.002501,((KC892174:1e-10,(KF685747:0.000624,CY168471:0.000625)Node63:0.00375)Node61:0.000624,(((KC892685:0.000624,KC892641:1e-10)Node68:0.001874,KC893110:0.001249)Node67:1e-10,(KC892480:1e-10,(JX913043:0.001249,(KF551075:0.00125,((CY114509:1e-10,(KC892889:1e-10,KC893018:0.002498)Node81:0.005006)Node79:0.001877,(((KC892519:1e-10,KC892498:0.000624)Node86:0.002497,KC892266:0.000623)Node85:0.001026,((KC892156:0.003756,(JX978746:0.001256,KC892407:0.001883)Node93:0.001875)Node91:0.00355,((KC535402:0.000623,(KC882488:0.002498,KC535387:0.001247)Node99:0.001872)Node97:1e-10,(KC535363:0.000623,((KC535396:0.000623,(KC882883:1e-10,KC882867:0.000623)Node107:0.003124)Node105:1e-10,((KC535378:0.001872,KC535375:0.002498)Node111:1e-10,(GQ385891:0.001248,((EU779522:0.001251,(CY037727:1e-10,FJ179354:0.003124)Node119:1e-10)Node117:0.000623,((GQ385889:0.005007,(FJ686933:0.001243,FJ179356:0.003117)Node125:1e-10)Node123:0.000622,(CY173095:0.001245,(((CY173191:1e-10,CY037703:0.001247)Node132:0.000622,CY035062:0.00249)Node131:1e-10,((CY173255:0.001871,(CY044748:1e-10,GQ385846:0.001247)Node139:0.000623)Node137:1e-10,((CY027075:0.000623,(EU199367:1e-10,CY172823:0.000623)Node145:1e-10)Node143:0.000623,(((CY172847:0.000623,CY025643:1e-10)Node150:0.000623,CY172839:0.000623)Node149:0.001247,(((CY026251:0.002497,CY092241:0.00125)Node156:0.000624,CY026019:0.000623)Node155:1e-10,((CY025341:0.002502,(CY172775:0.001247,CY172903:0.000623)Node163:0.001248)Node161:0.000622,(EU199255:0.003134,(CY172431:0.000621,((CY172223:0.003127,(CY172191:0.001254,CY020069:0.000628)Node173:0.000621)Node171:1e-10,((CY092217:0.003119,(CY025485:0.001283,EU516019:0.00059)Node179:0.008843)Node177:0.001868,(CY002080:0.000622,((CY002064:0.001873,(CY002456:0.000626,CY002048:0.002491)Node187:0.001243)Node185:0.003763,(AB434109:0.006307,(((CY088198:0.001245,CY088475:0.000621)Node194:1e-10,CY000257:0.000621)Node193:0.002494,((CY112957:0.003135,CY006859:0.001253)Node199:0.000616,((CY000721:0.001243,(CY114493:1e-10,CY090885:0.002483)Node205:0.002488)Node203:1e-10,((CY001792:0.000621,(CY001600:0.00062,CY002368:0.001865)Node211:1e-10)Node209:1e-10,((CY002304:0.002489,(CY006163:0.001242,CY003632:0.00062)Node217:1e-10)Node215:0.00062,(CY001920:0.003739,(CY001912:0.002498,((CY001504:1e-10,CY006060:0.001241)Node225:0.00062,((CY001744:1e-10,CY002136:0.00124)Node229:0.00062,((CY114309:0.003746,(CY006899:0.001874,CY112901:0.001863)Node235:0.002496)Node233:0.000618,(((CY006579:0.001245,CY006283:0.000621)Node240:0.001244,CY007979:0.001864)Node239:1e-10,((CY006499:0.001241,(CY006491:0.001863,CY006635:0.00124)Node247:1e-10)Node245:0.00062,(((CY036847:0.002495,CY010004:0.001867)Node252:0.000621,CY012200:0.000621)Node251:1e-10,(((CY010028:0.001242,CY009732:0.001242)Node258:1e-10,CY010012:0.002484)Node257:0.001875,(((CY010020:0.002497,CY011416:0.001237)Node264:0.001252,CY009484:0.00062)Node263:0.005658,((CY010036:1e-10,(CY039879:0.002489,CY039880:0.000621)Node271:0.002487)Node269:0.003109,((CY010628:0.000619,(CY010716:0.002485,CY010516:0.001239)Node277:1e-10)Node275:0.000619,((CY012728:1e-10,CY013701:0.000621)Node281:0.001243,(((CY012760:0.001239,CY013200:0.001239)Node286:1e-10,CY011888:0.005614)Node285:1e-10,((CY013693:0.000619,(CY012184:0.002484,CY013669:0.00124)Node293:0.00124)Node291:1e-10,((CY112669:0.004353,(CY112556:0.001861,CY011896:0.000619)Node299:0.00186)Node297:1e-10,(CY112605:0.001243,(CY012224:0.006953,((CY012512:0.000619,(CY012896:0.00062,CY012232:0.00062)Node309:0.000621)Node307:1e-10,(CY011848:1e-10,(((CY011328:1e-10,CY114221:0.000619)Node316:0.001241,CY011560:0.00124)Node315:1e-10,((CY012456:0.000619,CY011824:0.00124)Node321:1e-10,CY017283:0.000619)Node320:1e-10)Node314:1e-10)Node312:1e-10)Node306:0.002439)Node304:0.008263)Node302:0.000618)Node296:1e-10)Node290:1e-10)Node284:0.000617)Node280:0.012609)Node274:0.000619)Node268:0.001215)Node262:0.003782)Node256:0.000613)Node250:0.006878)Node244:1e-10)Node238:0.001862)Node232:1e-10)Node228:1e-10)Node224:0.001863)Node222:0.001862)Node220:0.001245)Node214:1e-10)Node208:0.001241)Node202:0.021084)Node198:0.000623)Node192:0.00065)Node190:0.003713)Node184:0.002495)Node182:1e-10)Node176:0.005637)Node170:0.00313)Node168:0.002515)Node166:0.001876)Node160:1e-10)Node154:0.000623)Node148:1e-10)Node142:0.003749)Node136:1e-10)Node130:1e-10)Node128:0.000623)Node122:0.000623)Node116:0.001872)Node114:0.002503)Node110:1e-10)Node104:1e-10)Node102:0.000623)Node96:0.001468)Node90:0.00189)Node84:0.002721)Node78:0.002524)Node76:1e-10)Node74:0.000624)Node72:1e-10)Node66:1e-10)Node60:1e-10)Node58:0.000623)Node54:0.001248)Node48:0.001255)Node46:0.000619)Node40:1e-10)Node34:1e-10)Node28:1e-10)Node22:0.000623)Node16:1e-10)Node10:1e-10)Node4:1e-10)" + } + }, + "_comment": "Trimmed HyPhy B-STILL output (first 120 codon sites, first 13 metrics, removed posterior/grid/etc) to keep infer_stasis_clusters test input under planemo's 1MB lint limit." +}
