From: TZVanaalten Date: Mon, 21 Aug 2017 13:52:02 +0000 (+0100) Subject: Merge remote-tracking branch 'origin/releases/Release_2_10_2_Branch' into features... X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=9d33b5ee5b7c2973287147726e43f0c0486b4c0e;hp=bd4b233c00c314997cf16b094c50e1b08e8b1735;p=jalview.git Merge remote-tracking branch 'origin/releases/Release_2_10_2_Branch' into features/hmmer --- diff --git a/examples/uniref50_hmm b/examples/uniref50_hmm new file mode 100644 index 0000000..b07ec14 --- /dev/null +++ b/examples/uniref50_hmm @@ -0,0 +1,466 @@ +HMMER3/f [3.1b2 | February 2015] +NAME uniref50 +LENG 148 +ALPH amino + RF no +MM no +CONS yes +CS no +MAP yes +DATE Mon Jun 12 14:32:05 2017 +NSEQ 15 +EFFN 0.648193 +CKSUM 2563184735 +STATS LOCAL MSV -10.0682 0.70956 +STATS LOCAL VITERBI -10.7870 0.70956 +STATS LOCAL FORWARD -4.6837 0.70956 +HMM A C D E F G H I K L M N P Q R S T V W Y + m->m m->i m->d i->m i->i d->m d->d + COMPO 2.40816 3.71583 2.80837 2.63551 3.47092 2.77036 3.85028 2.88279 2.80267 2.53589 3.68425 3.22102 3.34428 3.14560 3.11474 2.53177 2.75990 2.58070 5.00144 3.51101 + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.10433 3.97705 2.52157 0.61958 0.77255 0.00000 * + 1 2.99317 4.53706 4.08224 3.67789 3.22093 3.85692 4.40592 2.39958 3.44433 1.81088 1.32037 3.95163 4.31759 3.82413 3.64608 3.34553 3.29902 2.40928 5.06591 3.83044 1 m - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03044 3.90315 4.62550 0.61958 0.77255 0.55549 0.85282 + 2 0.97044 4.20710 3.49350 3.28598 4.08269 3.03087 4.30444 3.21278 3.30302 3.09300 4.12129 3.42792 3.77296 3.64134 3.55157 2.55705 2.83652 2.86187 5.50678 4.31039 2 a - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.11955 3.90315 2.38048 0.61958 0.77255 0.55549 0.85282 + 3 1.74035 4.09199 3.34495 3.00819 4.05288 2.91638 4.05509 3.33461 3.01251 3.11462 3.97728 3.20348 3.62940 3.32849 3.32799 1.99191 1.99086 2.89563 5.42641 4.20726 3 a - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03323 3.81683 4.53917 0.61958 0.77255 0.62561 0.76558 + 4 2.37663 4.18625 3.55838 3.17855 3.75132 3.18264 4.13666 2.64341 3.07328 2.62344 3.69712 3.39774 3.83139 3.44405 3.35689 2.61052 1.64486 2.15973 5.30034 4.05468 4 t - - - + 2.68617 4.42230 2.77525 2.73129 3.46359 2.40511 3.72500 3.29359 2.67746 2.69350 4.24695 2.90352 2.73719 3.18152 2.89806 2.37885 2.77501 2.98524 4.58482 3.61508 + 0.33937 1.47682 2.82312 0.71438 0.67236 0.50642 0.92294 + 5 1.78828 4.31568 3.18846 2.75366 3.97645 3.11838 3.84000 3.34055 2.67250 3.02453 3.87541 3.10729 3.71676 3.06391 2.67828 2.15246 2.50645 2.96422 5.30410 4.05011 9 a - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03188 3.85742 4.57976 0.61958 0.77255 0.59400 0.80322 + 6 2.60146 4.34120 4.20318 3.64233 3.23200 4.03946 4.38229 1.91078 3.53317 1.46276 2.80385 3.95250 4.35454 3.78680 3.77614 3.34686 3.12310 1.90138 5.05979 3.90282 10 l - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03188 3.85742 4.57976 0.61958 0.77255 0.59400 0.80322 + 7 2.51618 4.38929 3.20785 2.68482 3.53842 3.39630 3.71025 2.97988 2.63127 2.66315 3.23915 3.11866 3.35060 2.98059 3.01133 2.11689 2.77574 2.72369 4.95633 3.10650 11 s - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03188 3.85742 4.57976 0.61958 0.77255 0.59400 0.80322 + 8 1.83112 4.12334 3.20156 2.95461 4.23963 1.79514 4.09699 3.64646 3.07597 3.33878 4.16582 3.16397 3.61350 3.35846 3.40724 1.96001 2.64648 3.10558 5.57497 4.34818 12 g - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.07518 3.85742 2.97012 0.61958 0.77255 0.59400 0.80322 + 9 2.02467 4.19921 3.47207 3.00878 3.03795 3.27081 3.95597 2.70270 2.96218 2.55248 3.54468 3.31239 3.83177 3.27950 3.28895 2.63385 2.09090 2.46488 5.06606 3.80489 13 a - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03327 3.81551 4.53786 0.61958 0.77255 0.56041 0.84624 + 10 2.25155 4.19461 3.85704 3.29295 2.92371 3.72128 4.04839 2.07964 3.20853 2.08962 2.71310 3.60847 4.09120 3.47607 3.47945 3.00735 2.74040 2.14097 4.86082 3.65928 14 i - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03170 3.86316 4.58551 0.61958 0.77255 0.53107 0.88667 + 11 2.97746 4.34766 4.53309 3.96552 2.78843 4.21079 4.53997 1.80103 3.85948 1.59494 2.57669 4.20401 4.48099 4.02954 4.02513 3.53069 3.20806 1.63119 5.03312 3.89134 15 l - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03044 3.90315 4.62550 0.61958 0.77255 0.55549 0.85282 + 12 2.01604 4.15364 3.23013 2.99255 4.26101 2.66741 4.12859 3.66796 3.09383 3.37186 4.20680 3.19709 3.64453 3.39377 3.41395 1.27425 2.68165 3.13093 5.59931 4.36607 16 s - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03044 3.90315 4.62550 0.61958 0.77255 0.55549 0.85282 + 13 2.41396 4.26265 3.40226 2.93569 3.72492 3.24366 3.92462 2.93397 2.83929 2.73560 3.16052 3.25846 3.81309 3.20648 3.16819 2.37913 1.73294 2.65776 5.16309 3.91530 17 t - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03044 3.90315 4.62550 0.61958 0.77255 0.55549 0.85282 + 14 2.06589 4.14828 3.30608 3.02868 4.20053 2.92394 4.12227 3.52677 3.06750 3.27902 4.13704 3.22373 3.65849 3.38850 3.37961 1.31011 2.40891 3.04032 5.55736 4.32788 18 s - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03044 3.90315 4.62550 0.61958 0.77255 0.55549 0.85282 + 15 2.74009 4.29274 3.92243 3.42912 1.74599 3.72053 3.90473 2.32427 3.32349 2.18956 3.31553 3.65797 4.14118 3.57919 3.55745 2.71376 3.01017 2.38146 4.46330 2.97696 19 f - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03044 3.90315 4.62550 0.61958 0.77255 0.55549 0.85282 + 16 2.76094 4.39380 4.31945 3.75589 3.18422 4.12530 4.45889 2.01307 3.63847 1.30728 2.59228 4.05575 4.41925 3.86957 3.85970 3.43754 3.19324 1.94550 5.06650 3.93230 20 l - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03044 3.90315 4.62550 0.61958 0.77255 0.55549 0.85282 + 17 2.70295 4.73637 3.16526 2.68917 4.18427 3.37581 3.71759 3.61851 2.27125 3.18722 4.06871 3.11427 2.39752 2.89725 1.66361 2.77186 2.98335 3.28411 5.34221 4.10051 21 r - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.07762 3.90315 2.90945 0.61958 0.77255 0.55549 0.85282 + 18 2.49055 4.81399 3.14505 2.59164 4.19520 3.44406 3.60132 3.55142 1.92611 3.12799 3.98038 3.04037 3.86298 2.75679 1.83484 2.76119 2.76042 3.23493 5.31169 4.06564 22 r - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.06501 3.85742 3.17445 0.61958 0.77255 0.59400 0.80322 + 19 2.43450 4.81939 2.81703 2.39298 4.15804 3.33308 3.59871 3.56807 2.06609 3.14527 3.97247 2.89702 3.36070 2.29211 2.66793 2.54254 2.87166 3.22778 5.35034 4.03520 23 k - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03294 3.82535 4.54770 0.61958 0.77255 0.61916 0.77305 + 20 2.61608 4.67386 2.79167 2.51004 4.07010 3.23635 3.73836 3.55025 2.48903 3.13320 4.04098 2.97430 2.02723 2.34075 2.83811 2.68076 2.93097 3.21608 5.34739 4.03735 24 p - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03294 3.82535 4.54770 0.61958 0.77255 0.51069 0.91649 + 21 1.83080 4.22890 3.60014 3.08598 3.61014 3.38577 4.01761 2.55536 3.00939 2.52819 3.20189 3.39791 3.91288 3.33215 3.33591 2.72706 2.41446 2.12040 5.12303 3.89826 25 a - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03044 3.90315 4.62550 0.61958 0.77255 0.55549 0.85282 + 22 2.43845 4.29437 3.39983 3.04145 3.80350 3.19872 4.06195 2.96220 2.98493 2.76612 3.80233 3.32666 1.71751 3.35496 3.29387 2.63325 2.83846 2.21304 5.28839 4.02321 26 p - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03044 3.90315 4.62550 0.61958 0.77255 0.55549 0.85282 + 23 2.55648 4.28453 3.47615 2.92649 3.45346 3.51308 3.86072 2.37030 2.85167 2.40896 2.93550 3.31525 2.97437 3.17776 3.19434 2.79032 2.33896 2.42929 4.94762 3.71651 27 t - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03044 3.90315 4.62550 0.61958 0.77255 0.55549 0.85282 + 24 2.23005 4.31546 3.25841 2.77512 3.78441 3.22479 3.82985 3.12652 2.73582 2.83244 3.03171 3.14960 3.26067 3.07830 3.10838 1.85715 2.73859 2.81468 5.16957 3.91289 28 s - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03044 3.90315 4.62550 0.61958 0.77255 0.55549 0.85282 + 25 2.72216 3.51794 4.14734 3.58168 3.26953 3.85722 4.23682 2.10046 3.47012 1.71220 2.91412 3.83361 4.22096 3.71804 3.68973 3.16541 2.79579 1.71693 4.93656 3.75086 29 l - - - + 2.68606 4.42227 2.77522 2.73126 3.46337 2.40515 3.72497 3.29356 2.67743 2.69357 4.24692 2.90349 2.73742 3.18149 2.89784 2.37889 2.77522 2.98521 4.58479 3.61506 + 0.31572 1.55442 2.82310 0.27619 1.42159 0.55549 0.85282 + 26 2.06718 4.47388 3.00085 2.59301 4.03403 3.18938 3.75234 3.40130 2.21691 3.06406 3.90876 3.01767 3.74194 2.94856 2.91976 2.09488 2.60568 3.04014 5.32541 4.04568 31 a - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03205 3.85226 4.57460 0.61958 0.77255 0.52495 0.89548 + 27 2.09937 4.25808 3.35967 2.86682 3.65405 3.28224 3.85971 2.93650 2.81278 2.15397 3.59474 3.22143 3.43624 3.14697 3.16235 2.43009 2.43628 2.66078 5.07593 3.83686 32 a - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03044 3.90315 4.62550 0.61958 0.77255 0.55549 0.85282 + 28 2.56380 4.32380 3.45039 2.92280 3.52453 3.48960 3.88793 2.33272 2.83649 2.29194 3.45598 3.31192 2.56007 3.18425 3.18050 2.78603 2.52825 2.43071 5.02605 3.78340 33 l - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03044 3.90315 4.62550 0.61958 0.77255 0.55549 0.85282 + 29 2.52137 4.41862 3.18708 2.64701 3.24265 3.41116 3.70401 2.99879 2.50849 2.54033 3.56040 3.09794 3.19241 2.94883 3.00442 2.32271 2.53579 2.73855 5.01724 3.74765 34 s - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03044 3.90315 4.62550 0.61958 0.77255 0.55549 0.85282 + 30 2.00013 4.58033 2.94855 2.53646 4.07584 3.24271 3.72285 3.46598 2.50253 3.10366 3.94143 2.28591 3.76727 2.90505 2.65085 2.58556 2.61842 3.10852 5.34830 4.05040 35 a - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03044 3.90315 4.62550 0.61958 0.77255 0.55549 0.85282 + 31 2.38233 4.27978 3.41241 2.86526 3.23400 3.48475 3.81694 2.67786 2.81404 2.37039 3.42629 2.84230 3.90072 3.13098 3.17039 2.75440 2.50322 2.16090 4.92926 3.68461 36 v - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03044 3.90315 4.62550 0.61958 0.77255 0.55549 0.85282 + 32 2.57741 4.71210 2.95136 2.48036 4.10354 2.51445 3.64563 3.50876 2.11219 3.10615 3.93363 2.96219 3.79067 2.80786 2.54902 2.50592 2.51289 3.16566 5.32824 4.02677 37 k - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03044 3.90315 4.62550 0.61958 0.77255 0.55549 0.85282 + 33 2.48649 4.79372 2.91636 2.20828 4.05411 3.38774 3.59403 3.46081 2.32653 3.05709 3.87988 2.78811 3.79502 2.48988 2.50461 2.63652 2.83744 2.71303 5.28703 3.96685 38 e - - - + 2.68619 4.42226 2.77520 2.73124 3.46338 2.40514 3.72495 3.29355 2.67742 2.69356 4.24691 2.90348 2.73732 3.18147 2.89802 2.37888 2.77520 2.98519 4.58478 3.61504 + 0.07101 2.83445 4.62550 0.63888 0.75053 0.55549 0.85282 + 34 1.61247 4.12982 3.30077 3.01153 4.23531 2.30721 4.11812 3.64225 3.09602 3.33089 4.15414 3.20546 3.63382 3.37908 3.42786 1.71494 2.65404 3.10635 5.57312 4.35188 41 a - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03044 3.90315 4.62550 0.61958 0.77255 0.55549 0.85282 + 35 2.72153 4.23229 3.98871 3.42694 2.97156 3.37228 4.12428 2.11066 3.32720 1.56866 3.14804 3.72158 4.17041 3.58506 3.57523 3.10753 2.96236 2.01957 4.85619 3.63474 42 l - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03044 3.90315 4.62550 0.61958 0.77255 0.55549 0.85282 + 36 2.59948 4.33296 4.13320 3.58598 1.90470 3.92561 4.14661 2.31847 3.46961 1.74381 2.73954 3.84829 4.26638 3.69996 3.68809 3.23462 3.08833 2.27549 4.71854 3.39100 43 l - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03044 3.90315 4.62550 0.61958 0.77255 0.55549 0.85282 + 37 2.58931 4.58161 2.85848 2.66250 4.27569 1.35942 3.92193 3.72667 2.37699 3.36968 4.25453 3.08080 3.80217 3.15095 3.05968 2.68693 2.97358 3.32002 5.50315 4.25822 44 g - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03044 3.90315 4.62550 0.61958 0.77255 0.55549 0.85282 + 38 2.65443 4.41996 3.43781 2.92526 3.49579 3.52457 3.83449 2.83057 2.64507 1.65492 3.47551 3.30970 3.36731 3.12885 2.65176 2.85231 2.91346 2.65496 4.98654 3.73087 45 l - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03044 3.90315 4.62550 0.61958 0.77255 0.55549 0.85282 + 39 2.72350 4.79628 3.09209 2.60253 4.10688 3.43694 3.64699 3.48037 1.53491 2.80300 3.97997 3.05455 3.87955 2.81812 2.48623 2.53142 2.96661 3.17965 5.30004 4.01932 46 k - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03044 3.90315 4.62550 0.61958 0.77255 0.55549 0.85282 + 40 1.82674 4.13179 3.37396 3.04098 4.15468 2.93287 4.10316 3.48191 3.05943 3.22685 4.07364 3.23234 3.65478 3.36800 3.38156 1.54612 2.23418 3.00585 5.51189 4.29184 47 s - - - + 2.68618 4.42225 2.77520 2.73124 3.46354 2.40513 3.72495 3.29354 2.67741 2.69355 4.24690 2.90347 2.73740 3.18147 2.89801 2.37887 2.77520 2.98508 4.58477 3.61503 + 0.07101 2.83445 4.62550 0.49418 0.94179 0.55549 0.85282 + 41 1.87334 4.14690 3.25058 2.97809 4.26468 2.12605 4.11046 3.68104 3.08263 3.36184 4.18261 3.18779 3.63442 3.36584 3.42015 1.58161 2.66271 3.13490 5.59481 4.36766 49 s - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.11955 3.90315 2.38048 0.61958 0.77255 0.55549 0.85282 + 42 2.21070 4.25592 3.22113 2.77420 3.85340 3.11965 3.84389 3.18555 2.74438 2.69874 3.77079 3.12117 3.16635 3.08826 3.10948 2.13243 2.17697 2.83916 5.22265 3.97074 50 s - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03323 3.81683 4.53917 0.61958 0.77255 0.62561 0.76558 + 43 2.34367 4.62113 3.10732 2.54725 3.88271 3.41056 3.61301 3.25335 2.12788 2.89080 3.32993 3.01581 3.81452 2.79680 2.35592 2.55841 2.82420 2.96607 5.15612 3.88260 51 k - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.07842 3.81683 2.92953 0.61958 0.77255 0.50642 0.92294 + 44 2.82371 4.84862 3.20218 2.72371 4.21308 3.44211 3.65714 3.71157 2.07944 3.25434 4.14899 2.84303 3.91564 2.83614 1.36807 2.87376 3.07618 3.38687 5.31229 4.06004 52 r - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.12129 3.86316 2.37274 0.61958 0.77255 0.58934 0.80899 + 45 2.50307 4.57358 2.77436 2.48515 4.13002 2.10145 3.72113 3.58708 2.48196 3.19739 4.04544 2.56817 3.72971 2.91621 2.54565 2.57756 2.84032 3.19983 5.38083 4.07634 53 g - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03462 3.77648 4.49883 0.61958 0.77255 0.55399 0.85485 + 46 2.68547 4.96255 2.09111 2.21584 4.36925 1.97687 3.70446 3.84410 2.62382 3.41713 4.25934 2.75900 3.76266 2.58919 3.12019 2.66938 2.98839 3.45462 5.60805 4.21173 54 g - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03205 3.85226 4.57460 0.61958 0.77255 0.52495 0.89548 + 47 2.70472 4.70735 3.22145 2.64799 3.96742 3.15410 3.63371 3.33902 2.12091 2.43520 3.82970 3.09240 3.88741 2.81708 1.91192 2.78290 2.92703 3.06076 5.19463 3.94224 55 r - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03044 3.90315 4.62550 0.61958 0.77255 0.55549 0.85282 + 48 2.39251 4.23853 3.75245 3.18839 3.35715 3.69117 4.01036 2.17738 3.07061 2.00722 3.28706 3.53429 4.07078 3.39072 3.07752 2.97399 2.89120 1.85844 4.92824 3.71532 56 v - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03044 3.90315 4.62550 0.61958 0.77255 0.55549 0.85282 + 49 2.56050 4.39105 3.34411 2.78319 3.60155 3.46480 3.77128 2.83822 2.62742 2.58594 3.21262 3.20237 3.88486 3.03059 2.56448 2.73642 2.19035 2.37832 5.02624 3.77891 57 t - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03044 3.90315 4.62550 0.61958 0.77255 0.55549 0.85282 + 50 1.37812 2.80072 3.83498 3.42070 3.87397 2.99921 4.24161 2.96530 3.32256 2.89459 3.81917 3.44880 3.71764 3.60422 3.56604 2.43360 2.40411 2.61888 5.33835 4.15246 58 a - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03044 3.90315 4.62550 0.61958 0.77255 0.55549 0.85282 + 51 2.74532 4.50724 3.42983 2.95244 3.42568 3.60626 3.88910 2.77026 2.70375 2.22807 1.95486 3.35569 4.02547 2.58121 2.99178 2.94186 2.99694 2.66631 5.01046 3.74777 59 m - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03044 3.90315 4.62550 0.61958 0.77255 0.44450 1.02483 + 52 0.87297 4.24657 3.57075 3.36786 4.15839 3.06811 4.37727 3.29971 3.38685 3.17640 4.19749 3.49040 3.81731 3.71861 3.62959 2.59634 2.88098 2.93600 5.57511 4.38724 60 a - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 53 1.96298 4.17134 3.43460 3.07855 4.14627 2.98936 4.12481 3.46945 3.08161 3.21642 4.06614 3.27556 3.70074 3.39215 3.40515 1.84467 1.63498 3.01250 5.50977 4.28998 61 t - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 54 3.40066 4.84720 3.99369 3.74344 2.30278 3.95279 3.67128 3.39553 3.59798 2.82228 4.05988 3.85394 4.42456 3.87882 3.75994 3.52665 3.68805 3.27113 3.95029 0.80817 62 y - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 55 2.86663 5.06853 2.87640 2.51952 4.45748 3.43879 3.66568 3.89866 1.33937 3.41664 4.27179 2.44223 3.91577 2.81805 2.46217 2.85914 3.10555 3.54515 5.50478 4.21799 63 k - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 56 2.89101 4.40561 4.26922 3.93641 3.62800 3.83108 4.72052 2.04974 3.80577 2.29743 3.57810 4.10920 4.38636 4.15841 4.00806 3.34183 3.25039 0.90272 5.42983 4.16757 64 v - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 57 2.78989 4.87427 3.10728 2.66228 4.33471 3.44160 3.70636 3.64306 1.30828 3.25641 4.14609 3.10047 3.92071 2.86764 2.46119 2.83588 2.59339 3.32217 5.44317 4.19498 65 k - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 58 3.28295 4.64373 4.65267 4.15432 2.12281 4.39226 4.40565 2.30868 4.01063 0.99404 2.96208 4.34589 4.63887 4.13687 4.14117 3.75853 3.51440 2.42033 4.68321 3.26182 66 l - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 59 3.08248 4.42168 4.72065 4.23378 3.50231 4.37831 4.95293 1.13074 4.10572 1.99571 3.31982 4.46032 4.70821 4.37869 4.30619 3.77127 3.35421 1.44848 5.47660 4.27063 67 i - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 60 2.47137 4.31634 3.52340 3.28135 4.06362 3.15188 4.29038 3.20358 3.22639 3.06334 4.10788 3.47324 3.86421 3.61618 3.47946 2.67390 1.00625 2.88730 5.49222 4.28053 68 t - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 61 2.89484 4.63395 3.51346 3.36817 4.35306 3.31558 4.43642 3.92611 3.43456 3.54133 4.59617 3.66397 0.65427 3.82016 3.66760 3.06578 3.34480 3.55944 5.51022 4.47541 69 P - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 62 2.83547 5.32344 1.90710 1.42799 4.63051 3.24198 3.71244 4.09996 2.65068 3.63347 4.46321 2.71732 3.81726 2.86723 3.20067 2.75440 2.81778 3.69487 5.81218 4.35094 70 e - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 63 2.79923 4.56350 3.49435 3.40744 4.54632 0.58454 4.52062 4.17205 3.60289 3.81287 4.79002 3.65874 3.95796 3.91884 3.82676 2.97427 3.28861 3.68020 5.61312 4.65200 71 G - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 64 2.69344 5.03834 2.59685 1.78499 4.35492 3.31996 3.63904 3.79867 2.33359 3.34661 4.15382 2.64678 2.71516 2.78054 2.89199 2.67010 2.77928 3.42501 5.53498 4.15652 72 e - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 65 2.70271 4.40317 3.56325 3.00957 3.45446 3.68235 3.94694 2.18180 2.88182 2.21283 3.37093 3.41883 4.05792 2.33611 3.21378 2.95204 2.94041 2.01647 5.02429 3.78732 73 v - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 66 3.04481 5.17464 2.53544 0.88540 4.53437 3.34332 3.94029 4.00914 2.83416 3.60986 4.58016 2.99593 3.95313 3.15433 3.25317 3.01711 3.35013 3.68253 5.68627 4.40959 74 e - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 67 3.05681 4.44153 4.54138 3.99838 1.97987 4.22221 4.40129 2.17878 3.87522 1.45215 3.02589 4.20160 4.50632 4.03401 4.02978 3.55251 3.29207 1.80812 4.80289 3.46847 75 l - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 68 2.82984 5.35567 1.99168 1.57663 4.64578 3.25717 3.68509 4.14274 2.58330 3.63869 4.45307 2.71724 3.81329 2.22362 3.11653 2.74299 3.09347 3.72626 5.79564 4.33600 76 e - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 69 2.50977 1.62448 4.23724 3.80750 3.60189 3.40590 4.45756 2.35254 3.63764 2.45765 3.57920 3.82230 4.04603 3.92585 3.81907 2.84633 2.91668 1.82275 5.24689 4.01880 77 c - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 70 2.77571 5.11398 2.10801 2.05696 4.45701 3.25620 3.72899 3.91339 2.64389 3.48166 4.32027 2.78446 1.86353 2.89484 3.15510 2.73789 3.05806 3.53410 5.67671 4.27030 78 p - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 71 2.91274 5.42662 1.24765 1.93231 4.73792 3.20738 3.76458 4.24169 2.78531 3.76893 4.62568 2.68636 3.83308 2.93581 3.37349 2.60161 3.20907 3.82383 5.94007 4.44265 79 d - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 72 2.93000 5.34144 1.08347 2.15883 4.66482 3.19912 3.82811 4.25255 2.88821 3.80850 4.69751 2.51974 3.85217 3.02158 3.46889 2.84580 3.25390 3.83179 5.90365 4.41772 80 d - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 73 2.89101 4.40561 4.26922 3.93641 3.62800 3.83108 4.72052 2.04974 3.80577 2.29743 3.57810 4.10920 4.38636 4.15841 4.00806 3.34183 3.25039 0.90272 5.42983 4.16757 81 v - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 74 3.40066 4.84720 3.99369 3.74344 2.30278 3.95279 3.67128 3.39553 3.59798 2.82228 4.05988 3.85394 4.42456 3.87882 3.75994 3.52665 3.68805 3.27113 3.95029 0.80817 82 y - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 75 3.08173 4.41570 4.73343 4.24332 3.51344 4.38931 4.96241 1.16063 4.11994 2.00857 3.32756 4.46929 4.71466 4.39012 4.32070 3.78014 3.35186 1.39369 5.48545 4.28088 83 i - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 76 3.27378 4.70553 4.35708 3.99825 3.17780 4.11433 4.62122 2.38848 3.76496 0.75643 3.16963 4.26355 4.53226 4.10824 3.92358 3.69863 3.56359 2.45281 5.09417 3.84135 84 l - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 77 3.10426 5.24570 0.77891 2.40498 4.63731 3.29196 4.02650 4.24977 3.13093 3.83985 4.82107 2.96628 3.95224 3.26642 3.66070 3.05541 3.44536 3.87811 5.78539 4.49402 85 d - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 78 2.10165 4.63153 3.04360 2.53313 3.37849 3.42468 3.14974 3.24484 2.48640 2.87927 3.73924 3.02051 3.83549 2.34761 2.89722 2.67591 2.83487 2.96227 5.11406 3.77860 86 a - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 79 0.87297 4.24657 3.57075 3.36786 4.15839 3.06811 4.37727 3.29971 3.38685 3.17640 4.19749 3.49040 3.81731 3.71861 3.62959 2.59634 2.88098 2.93600 5.57511 4.38724 87 a - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 80 3.04481 5.17464 2.53544 0.88540 4.53437 3.34332 3.94029 4.00914 2.83416 3.60986 4.58016 2.99593 3.95313 3.15433 3.25317 3.01711 3.35013 3.68253 5.68627 4.40959 88 e - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 81 3.04481 5.17464 2.53544 0.88540 4.53437 3.34332 3.94029 4.00914 2.83416 3.60986 4.58016 2.99593 3.95313 3.15433 3.25317 3.01711 3.35013 3.68253 5.68627 4.40959 89 e - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 82 2.02804 4.79412 2.56696 2.04470 4.09359 3.33689 3.67081 3.44631 2.51465 3.10781 3.94410 2.90500 3.80252 2.83547 2.98166 2.64658 2.87169 2.76307 5.37415 4.03168 90 a - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 83 2.79923 4.56350 3.49435 3.40744 4.54632 0.58454 4.52062 4.17205 3.60289 3.81287 4.79002 3.65874 3.95796 3.91884 3.82676 2.97427 3.28861 3.68020 5.61312 4.65200 91 G - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 84 2.73428 4.33692 3.73213 3.19478 3.16177 3.72868 2.92126 1.73180 3.00305 2.10225 3.32627 3.53324 4.10443 3.37488 3.27326 3.02489 2.97120 2.37844 4.75364 3.40581 92 i - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 85 2.98626 5.46880 1.08491 1.97249 4.77077 3.21550 3.81546 4.28421 2.87189 3.82944 4.72170 2.71026 3.86087 3.00007 3.46540 2.87647 3.29141 3.87860 5.96770 4.48798 93 d - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 86 3.27378 4.70553 4.35708 3.99825 3.17780 4.11433 4.62122 2.38848 3.76496 0.75643 3.16963 4.26355 4.53226 4.10824 3.92358 3.69863 3.56359 2.45281 5.09417 3.84135 94 l - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 87 2.89484 4.63395 3.51346 3.36817 4.35306 3.31558 4.43642 3.92611 3.43456 3.54133 4.59617 3.66397 0.65427 3.82016 3.66760 3.06578 3.34480 3.55944 5.51022 4.47541 95 P - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 88 3.48726 4.82741 4.35628 4.01269 1.82549 4.23514 3.48811 3.25093 3.87322 2.62544 3.87831 3.93991 4.57991 3.96204 3.99151 3.61127 3.72377 3.16284 3.67256 0.95290 96 y - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 89 2.36871 4.29005 3.29968 3.12112 4.18153 3.01810 4.22768 3.71868 3.20194 3.43114 4.34903 3.32859 3.76571 3.54324 3.48419 0.94365 2.85682 3.23083 5.54583 4.26583 97 s - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 90 2.70964 0.75093 4.25205 4.01610 3.98428 3.30982 4.64026 3.14621 3.84384 3.05665 4.18165 3.97525 4.02496 4.18572 3.94943 2.98138 3.18527 2.88356 5.37752 4.27103 98 c - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 91 3.12574 4.95602 3.62729 3.11760 4.33719 3.59265 3.90370 3.88680 2.28467 3.38377 4.38192 3.46899 4.09078 3.11945 0.82993 3.20529 3.38498 3.60641 5.37824 4.24257 99 r - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 92 0.87297 4.24657 3.57075 3.36786 4.15839 3.06811 4.37727 3.29971 3.38685 3.17640 4.19749 3.49040 3.81731 3.71861 3.62959 2.59634 2.88098 2.93600 5.57511 4.38724 100 a - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 93 2.79923 4.56350 3.49435 3.40744 4.54632 0.58454 4.52062 4.17205 3.60289 3.81287 4.79002 3.65874 3.95796 3.91884 3.82676 2.97427 3.28861 3.68020 5.61312 4.65200 101 G - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 94 2.36871 4.29005 3.29968 3.12112 4.18153 3.01810 4.22768 3.71868 3.20194 3.43114 4.34903 3.32859 3.76571 3.54324 3.48419 0.94365 2.85682 3.23083 5.54583 4.26583 102 s - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 95 2.70964 0.75093 4.25205 4.01610 3.98428 3.30982 4.64026 3.14621 3.84384 3.05665 4.18165 3.97525 4.02496 4.18572 3.94943 2.98138 3.18527 2.88356 5.37752 4.27103 103 c - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 96 2.36871 4.29005 3.29968 3.12112 4.18153 3.01810 4.22768 3.71868 3.20194 3.43114 4.34903 3.32859 3.76571 3.54324 3.48419 0.94365 2.85682 3.23083 5.54583 4.26583 104 s - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 97 2.36871 4.29005 3.29968 3.12112 4.18153 3.01810 4.22768 3.71868 3.20194 3.43114 4.34903 3.32859 3.76571 3.54324 3.48419 0.94365 2.85682 3.23083 5.54583 4.26583 105 s - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 98 2.70964 0.75093 4.25205 4.01610 3.98428 3.30982 4.64026 3.14621 3.84384 3.05665 4.18165 3.97525 4.02496 4.18572 3.94943 2.98138 3.18527 2.88356 5.37752 4.27103 106 c - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 99 0.87297 4.24657 3.57075 3.36786 4.15839 3.06811 4.37727 3.29971 3.38685 3.17640 4.19749 3.49040 3.81731 3.71861 3.62959 2.59634 2.88098 2.93600 5.57511 4.38724 107 a - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 100 2.79923 4.56350 3.49435 3.40744 4.54632 0.58454 4.52062 4.17205 3.60289 3.81287 4.79002 3.65874 3.95796 3.91884 3.82676 2.97427 3.28861 3.68020 5.61312 4.65200 108 G - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 101 3.06946 5.03551 3.25229 2.85531 4.44585 3.54670 3.82012 3.88188 0.90373 3.42461 4.38128 3.27486 4.04036 3.00629 2.45564 3.10509 3.31538 3.58407 5.45821 4.28639 109 k - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 102 3.06247 4.41039 4.65086 4.13598 3.48324 4.35915 4.85935 1.65561 4.00771 1.89605 3.31161 4.38665 4.67296 4.28428 4.22305 3.72759 3.32396 1.08186 5.42132 4.21018 110 v - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 103 2.33323 4.28075 3.53672 3.04537 3.62455 3.45748 3.98551 2.58410 2.72399 2.59228 3.55231 3.38781 3.95328 3.30102 3.25844 2.79290 2.46624 1.66085 5.10597 3.87716 111 v - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 104 2.09904 4.31904 3.13967 2.79512 4.23584 2.43802 3.97520 3.66080 2.88605 3.30435 4.12032 2.79615 3.70254 3.18983 3.27753 1.61859 2.49732 3.17574 5.54095 4.27688 112 s - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 105 2.79923 4.56350 3.49435 3.40744 4.54632 0.58454 4.52062 4.17205 3.60289 3.81287 4.79002 3.65874 3.95796 3.91884 3.82676 2.97427 3.28861 3.68020 5.61312 4.65200 113 G - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 106 2.34210 4.57052 2.98887 2.43186 3.63497 3.31233 3.71920 3.32573 2.57569 2.97882 3.82112 2.81207 3.79423 2.91349 3.00476 1.86229 2.69145 3.00524 5.25570 3.95436 114 s - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 107 3.05964 4.41092 4.64145 4.12759 3.48238 4.35054 4.85240 1.66963 3.99735 1.89738 3.31309 4.37857 4.66775 4.27653 4.21363 3.71953 3.32208 1.07763 5.41853 4.20516 115 v - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 108 2.91005 5.38045 1.25818 2.12941 4.69830 3.20228 3.78776 4.26304 2.81947 3.79137 4.65619 2.14323 3.83796 2.96707 3.40279 2.81725 3.21882 3.83565 5.91563 4.42054 116 d - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 109 2.96665 4.95377 2.97494 2.73211 4.13599 3.43683 3.89106 3.78353 2.54586 3.27542 4.30113 3.19246 3.99230 1.05904 2.82765 3.01035 3.26391 3.50694 5.38986 4.09082 117 q - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 110 2.64618 4.90499 2.31134 2.18942 4.30332 3.26131 3.70172 3.73572 2.57300 3.32434 4.14511 2.84177 3.78986 2.86174 3.06104 1.76618 2.63178 3.35922 5.54260 4.16860 118 s - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 111 3.10426 5.24570 0.77891 2.40498 4.63731 3.29196 4.02650 4.24977 3.13093 3.83985 4.82107 2.96628 3.95224 3.26642 3.66070 3.05541 3.44536 3.87811 5.78539 4.49402 119 d - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 112 2.73269 4.96873 2.61141 2.26957 4.35491 2.17303 3.70728 3.80016 2.46897 3.36392 4.20366 2.88233 3.83451 1.94009 2.87446 2.73151 3.00866 3.43365 5.54626 4.19876 120 q - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 113 2.56630 4.67539 2.76483 2.50324 4.25470 3.20379 3.80042 3.71196 2.47872 3.32135 4.15966 2.47516 3.79205 2.98884 3.00841 1.53662 2.90903 3.30833 5.51362 4.18451 121 s - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 114 3.45422 4.77029 4.46140 4.11213 1.01250 4.26302 3.55945 3.07075 3.96969 2.40922 3.69615 4.01237 4.59409 4.02617 4.05737 3.63979 3.68916 3.02613 3.73517 1.83750 122 f - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 115 3.27378 4.70553 4.35708 3.99825 3.17780 4.11433 4.62122 2.38848 3.76496 0.75643 3.16963 4.26355 4.53226 4.10824 3.92358 3.69863 3.56359 2.45281 5.09417 3.84135 123 l - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 116 2.92493 5.35887 1.12201 2.14550 4.68054 3.19834 3.81470 4.26138 2.86788 3.80711 4.68829 2.43062 3.84716 3.00361 3.45124 2.83676 3.24430 3.83759 5.91360 4.42201 124 d - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02824 3.97705 4.69940 0.61958 0.77255 0.48576 0.95510 + 117 2.99103 5.43832 1.04731 2.03422 4.75036 3.21916 3.83186 4.26509 2.89245 3.82288 4.72422 2.72815 3.86743 3.02108 3.48036 2.88767 3.30065 3.86474 5.95049 4.48470 125 d - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.05161 3.97705 3.45590 0.61958 0.77255 0.48576 0.95510 + 118 2.86997 5.43069 1.57180 1.74614 4.72729 2.80306 3.71453 4.23943 2.69618 3.73332 4.56237 2.43722 3.80910 2.87126 3.27991 2.76596 3.14983 3.81040 5.89719 4.40314 126 d - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02889 3.95434 4.67668 0.61958 0.77255 0.50828 0.92013 + 119 2.94701 4.93449 2.95833 2.71460 4.11381 3.42085 3.87354 3.75736 2.52981 3.25157 4.27740 3.17495 3.97565 1.09531 2.81227 2.99143 3.24405 3.48203 5.37148 4.07074 127 q - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02889 3.95434 4.67668 0.61958 0.77255 0.50828 0.92013 + 120 2.77849 4.28259 3.99549 3.02221 3.34513 3.89873 4.21017 1.60238 3.32583 1.96055 3.04166 3.76188 4.24121 3.61775 3.59603 3.18793 3.01465 1.89778 5.01613 3.81900 128 i - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02889 3.95434 4.67668 0.61958 0.77255 0.50828 0.92013 + 121 2.05663 4.99383 2.42035 1.95337 4.30142 3.11016 3.64379 3.74448 2.38547 3.30891 4.11909 2.80952 3.78509 2.79112 2.97996 2.54099 2.92358 3.37653 5.51637 4.13250 129 e - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02889 3.95434 4.67668 0.61958 0.77255 0.50828 0.92013 + 122 2.37074 5.20065 2.03752 1.62561 4.52764 2.94012 3.68254 3.99698 2.59389 3.53203 4.34713 2.73405 3.79399 2.83254 3.13133 2.70217 3.03318 3.59496 5.71621 4.27884 130 e - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02889 3.95434 4.67668 0.61958 0.77255 0.50828 0.92013 + 123 2.76891 4.53595 3.45942 3.36936 4.50963 0.61326 4.48439 4.12940 3.56175 3.77320 4.74981 3.62373 3.92970 3.87945 3.78857 2.94321 3.25651 3.64192 5.58291 4.61439 131 G - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02889 3.95434 4.67668 0.61958 0.77255 0.50828 0.92013 + 124 3.45280 4.72560 4.55948 4.18538 1.45983 4.27876 3.45556 3.19175 4.01502 2.56322 3.77632 3.99268 4.58568 4.02082 4.06587 3.62371 3.67122 3.09770 1.76510 1.80304 132 f - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02889 3.95434 4.67668 0.61958 0.77255 0.50828 0.92013 + 125 2.87283 4.39315 4.23821 3.90420 3.61058 3.80809 4.69198 2.04849 3.77322 2.28363 3.56364 4.08078 4.36427 4.12727 3.97777 3.31702 3.23254 0.92773 5.40873 4.14528 133 v - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02889 3.95434 4.67668 0.61958 0.77255 0.50828 0.92013 + 126 3.24760 4.68579 4.32075 3.96132 3.16793 4.08580 4.59138 2.37683 3.72825 0.78064 3.16594 4.22883 4.50730 4.07699 3.89079 3.66669 3.53825 2.43535 5.07658 3.81868 134 l - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02889 3.95434 4.67668 0.61958 0.77255 0.50828 0.92013 + 127 2.45786 4.30296 3.50186 3.25812 4.04222 3.13941 4.26905 3.17937 3.20271 3.03994 4.08552 3.45408 3.84975 3.59352 3.45722 2.66008 1.04037 2.86556 5.47283 4.25897 135 t - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02889 3.95434 4.67668 0.61958 0.77255 0.50828 0.92013 + 128 2.68154 0.78852 4.21932 3.97783 3.95068 3.28696 4.60693 3.10838 3.80528 3.02007 4.14415 3.94300 4.00035 4.14805 3.91507 2.95331 3.15521 2.84739 5.34926 4.23772 136 c - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02889 3.95434 4.67668 0.61958 0.77255 0.50828 0.92013 + 129 2.02617 4.29048 3.42265 2.94627 3.54036 3.40652 3.31257 2.77872 2.86355 2.59741 3.53948 3.30371 3.90044 3.21666 3.18816 2.73904 2.82169 1.86270 5.00831 3.74432 137 v - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02889 3.95434 4.67668 0.61958 0.77255 0.50828 0.92013 + 130 0.90195 4.23400 3.54659 3.34205 4.13472 3.05626 4.35430 3.27256 3.36043 3.15035 4.17350 3.47069 3.80326 3.69417 3.60509 2.58374 2.86679 2.91280 5.55371 4.36315 138 a - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02889 3.95434 4.67668 0.61958 0.77255 0.50828 0.92013 + 131 3.44381 4.80306 4.30117 3.95207 1.85364 4.19548 3.48537 3.22033 3.81418 2.60484 3.85318 3.90681 4.54641 3.92239 3.94488 3.57229 3.68268 3.12961 3.68006 0.97942 139 y - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02889 3.95434 4.67668 0.61958 0.77255 0.50828 0.92013 + 132 2.86235 4.60578 3.47842 3.32948 4.31715 3.28867 4.39999 3.88386 3.39382 3.50174 4.55528 3.62780 0.68858 3.78012 3.62986 3.03247 3.31042 3.51987 5.48103 4.43903 140 P - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02889 3.95434 4.67668 0.61958 0.77255 0.50828 0.92013 + 133 2.60256 4.60991 3.08123 2.59418 3.90705 3.39886 3.69738 3.25085 2.27951 2.91739 3.78849 3.05676 3.84470 2.63540 2.79735 2.69573 1.94572 2.76699 5.21418 3.93668 141 t - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02889 3.95434 4.67668 0.61958 0.77255 0.50828 0.92013 + 134 2.16968 3.47307 3.59233 3.22260 4.15866 2.47411 4.19438 3.56363 3.18625 3.27458 4.10858 3.32406 3.66022 3.48496 3.48055 1.23700 2.65371 3.05043 5.52336 4.31592 142 s - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02889 3.95434 4.67668 0.61958 0.77255 0.50828 0.92013 + 135 3.07859 5.21813 0.80740 2.38838 4.60638 3.27362 4.00471 4.21341 3.10456 3.80732 4.78755 2.94873 3.93224 3.24424 3.63163 3.03196 3.41903 3.84400 5.75900 4.46621 143 d - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02889 3.95434 4.67668 0.61958 0.77255 0.50828 0.92013 + 136 2.87283 4.39315 4.23821 3.90420 3.61058 3.80809 4.69198 2.04849 3.77322 2.28363 3.56364 4.08078 4.36427 4.12727 3.97777 3.31702 3.23254 0.92773 5.40873 4.14528 144 v - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02889 3.95434 4.67668 0.61958 0.77255 0.50828 0.92013 + 137 2.50102 4.23694 3.76525 3.33965 3.72246 3.37067 4.24809 2.46042 3.23911 2.55924 3.64161 3.56053 3.97799 3.58142 3.52035 2.77764 1.69802 1.75863 5.30971 4.08018 145 t - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02889 3.95434 4.67668 0.61958 0.77255 0.50828 0.92013 + 138 3.09498 4.49149 4.45102 4.07022 3.43002 4.15408 4.78347 0.98199 3.89992 1.99977 3.35310 4.30411 4.57779 4.24002 4.08717 3.65761 3.39284 1.85079 5.33749 4.08258 146 i - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02889 3.95434 4.67668 0.61958 0.77255 0.50828 0.92013 + 139 3.02382 5.15051 2.52384 0.91441 4.50717 3.32764 3.92196 3.97736 2.81286 3.58149 4.55225 2.98104 3.93620 3.13613 3.22992 2.99812 3.32879 3.65289 5.66334 4.38601 147 e - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02889 3.95434 4.67668 0.61958 0.77255 0.50828 0.92013 + 140 2.45786 4.30296 3.50186 3.25812 4.04222 3.13941 4.26905 3.17937 3.20271 3.03994 4.08552 3.45408 3.84975 3.59352 3.45722 2.66008 1.04037 2.86556 5.47283 4.25897 148 t - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02889 3.95434 4.67668 0.61958 0.77255 0.50828 0.92013 + 141 3.08695 4.88934 3.20791 2.97643 3.34377 3.51816 0.98092 3.80251 2.81733 3.28606 4.33566 3.38232 4.07539 3.34383 3.07797 3.15699 3.39324 3.53609 4.80769 3.29239 149 h - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02889 3.95434 4.67668 0.61958 0.77255 0.50828 0.92013 + 142 2.99214 5.06805 3.26268 2.74531 4.47846 3.57206 3.65342 3.86981 1.12103 3.36156 4.25702 3.16311 3.99796 2.80635 2.11223 3.00404 3.19554 3.55761 5.42835 4.23089 150 k - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02889 3.95434 4.67668 0.61958 0.77255 0.50828 0.92013 + 143 3.02382 5.15051 2.52384 0.91441 4.50717 3.32764 3.92196 3.97736 2.81286 3.58149 4.55225 2.98104 3.93620 3.13613 3.22992 2.99812 3.32879 3.65289 5.66334 4.38601 151 e - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02889 3.95434 4.67668 0.61958 0.77255 0.50828 0.92013 + 144 2.49167 5.21869 2.13891 1.38935 4.54510 3.23855 3.71342 3.98470 2.64038 3.55288 4.39217 2.73628 3.81159 2.87379 3.17028 2.74234 3.08340 3.59770 5.74876 4.31122 152 e - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02889 3.95434 4.67668 0.61958 0.77255 0.50828 0.92013 + 145 2.67924 5.36825 1.81597 1.42545 4.67130 3.22067 3.71949 4.14895 2.68617 3.67868 4.51726 2.69278 3.81366 2.87890 3.25116 2.76699 3.13943 3.73938 5.85528 4.37934 153 e - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02889 3.95434 4.67668 0.61958 0.77255 0.50828 0.92013 + 146 3.24708 4.60677 4.69416 4.13988 3.08947 4.47063 4.76500 1.92492 3.96672 0.95356 2.71915 4.43331 4.67883 4.15873 4.13317 3.81764 3.47493 2.15974 5.15578 4.04247 154 l - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02889 3.95434 4.67668 0.61958 0.77255 0.50828 0.92013 + 147 2.69781 4.29649 3.84369 3.29786 3.44437 3.73086 4.15124 2.24231 3.19336 2.10104 3.11890 3.63278 4.14347 3.51043 3.49251 3.03876 2.03846 1.78833 5.07714 3.86271 155 v - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.18495 3.95434 1.89921 0.61958 0.77255 0.50828 0.92013 + 148 1.44115 4.10304 3.22225 2.99375 4.15355 2.08176 4.10711 3.47540 3.09081 3.24183 4.11431 3.18864 3.61518 3.39097 3.39593 2.35434 2.65737 2.99565 5.50492 4.29375 156 a - - - + 2.68608 4.42226 2.77520 2.73124 3.46354 2.40513 3.72495 3.29355 2.67741 2.69355 4.24690 2.90347 2.73740 3.18147 2.89801 2.37887 2.77520 2.98519 4.58477 3.61504 + 0.08120 2.55114 * 0.46726 0.98542 0.00000 * +// diff --git a/resources/lang/Messages.properties b/resources/lang/Messages.properties index 162f10f..570c7e0 100644 --- a/resources/lang/Messages.properties +++ b/resources/lang/Messages.properties @@ -11,6 +11,7 @@ action.paste = Paste action.show_html_source = Show HTML Source action.print = Print... action.web_service = Web Service +action.hmmer = HMMER action.cancel_job = Cancel Job action.start_job = Start Job action.revert = Revert @@ -1142,6 +1143,9 @@ status.loading_cached_pdb_entries = Loading Cached PDB Entries status.searching_for_pdb_structures = Searching for PDB Structures status.opening_file_for = opening file for status.colouring_chimera = Colouring Chimera +status.running_hmmbuild = "Building hidden Markov model" +status.running_hmmalign = "Creating alignment with hidden Markov model" +status.running_hmmsearch = "Searching for matching sequences" label.font_doesnt_have_letters_defined = Font doesn't have letters defined\nso cannot be used\nwith alignment data label.font_too_small = Font size is too small label.error_loading_file_params = Error loading file {0} @@ -1311,3 +1315,32 @@ label.occupancy_descr = Number of aligned positions label.show_experimental = Enable experimental features label.show_experimental_tip = Enable any new and currently 'experimental' features (see Latest Release Notes for details) label.warning_hidden = Warning: {0} {1} is currently hidden +label.hmmalign = hmmalign +label.hmmbuild = hmmbuild +label.hmmbuild_group = Build HMM from Selected Group +label.group_hmmbuild = Build HMM from Group +label.hmmsearch = hmmsearch +label.change_hmmer_location = HMMER Binaries Installation Location +warn.null_hmm = Please ensure the alignment contains a hidden Markov model. +label.ignore_below_background_frequency = Ignore Below Background Frequency +label.information_description = Information content, measured in bits +label.enter_location = Please enter the path of your HMMER binaries folder. +label.invalid_hmmer_folder = The folder that you selected does not contain the necessary HMMER binaries. +warn.no_selected_hmm = Please select a hidden Markov model sequence. +label.select_hmm = Select HMM +warn.no_sequence_data = No sequence data found. +label.hmmer = HMMER +label.trim_termini = Trim Non-Matching Termini +label.no_of_sequences = Sequences Returned +label.freq_alignment = Use Alignment Background Frequencies +label.freq_uniprot = Use Uniprot Background Frequencies +label.hmmalign_label = hmmalign Options +label.hmmsearch_label = hmmsearch Options +label.hmmbuild_not_found = The hmmbuild binary was not found. +label.hmmalign_not_found = The hmmalign binary was not found. +label.hmmsearch_not_found = The hmmsearch binary was not found. +warn.hmmbuild_failed = hmmbuild was not found. +warn.align_failed = hmmalign was not found. +label.invalid_folder = Invalid Folder +label.folder_not_exists = HMMER binaries not found. \n Please enter the path to the HMMER binaries (if installed). +label.hmmer_installed = HMMER installed \ No newline at end of file diff --git a/src/jalview/analysis/AAFrequency.java b/src/jalview/analysis/AAFrequency.java index f8e8379..219794b 100755 --- a/src/jalview/analysis/AAFrequency.java +++ b/src/jalview/analysis/AAFrequency.java @@ -24,6 +24,7 @@ import jalview.datamodel.AlignedCodonFrame; import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.AlignmentI; import jalview.datamodel.Annotation; +import jalview.datamodel.HiddenMarkovModel; import jalview.datamodel.Profile; import jalview.datamodel.ProfileI; import jalview.datamodel.Profiles; @@ -32,6 +33,7 @@ import jalview.datamodel.ResidueCount; import jalview.datamodel.ResidueCount.SymbolCounts; import jalview.datamodel.SequenceI; import jalview.ext.android.SparseIntArray; +import jalview.schemes.ResidueProperties; import jalview.util.Comparison; import jalview.util.Format; import jalview.util.MappingUtils; @@ -55,6 +57,12 @@ public class AAFrequency { public static final String PROFILE = "P"; + private static final String AMINO = "amino"; + + private static final String DNA = "DNA"; + + private static final String RNA = "RNA"; + /* * Quick look-up of String value of char 'A' to 'Z' */ @@ -101,6 +109,8 @@ public class AAFrequency } } + + /** * Calculate the consensus symbol(s) for each column in the given range. * @@ -193,6 +203,57 @@ public class AAFrequency } /** + * Returns the full set of profiles for a hidden Markov model. The underlying + * data is the raw probabilities of a residue being emitted at each node, + * however the profiles returned by this function contain the percentage + * chance of a residue emission. + * + * @param hmm + * @param width + * The width of the Profile array (Profiles) to be returned. + * @param start + * The alignment column on which the first profile is based. + * @param end + * The alignment column on which the last profile is based. + * @param saveFullProfile + * Flag for saving the counts for each profile + * @param removeBelowBackground + * Flag for removing any characters with a match emission probability + * less than its background frequency + * @return + */ + public static ProfilesI calculateHMMProfiles(final HiddenMarkovModel hmm, + int width, int start, int end, boolean saveFullProfile, + boolean removeBelowBackground) + { + ProfileI[] result = new ProfileI[width]; + int symbolCount = hmm.getNumberOfSymbols(); + for (int column = start; column < end; column++) + { + ResidueCount counts = new ResidueCount(); + for (char symbol : hmm.getSymbols()) + { + int value = getAnalogueCount(hmm, column, symbol, + removeBelowBackground); + counts.put(symbol, value); + } + int maxCount = counts.getModalCount(); + String maxResidue = counts.getResiduesForCount(maxCount); + int gapCount = counts.getGapCount(); + ProfileI profile = new Profile(symbolCount, gapCount, maxCount, + maxResidue); + + if (saveFullProfile) + { + profile.setCounts(counts); + } + + result[column] = profile; + } + return new Profiles(result); + } + + /** * Make an estimate of the profile size we are going to compute i.e. how many * different characters may be present in it. Overestimating has a cost of * using more memory than necessary. Underestimating has a cost of needing to @@ -290,6 +351,82 @@ public class AAFrequency } /** + * Derive the information annotations to be added to the alignment for + * display. This does not recompute the raw data, but may be called on a + * change in display options, such as 'ignore below background frequency', + * which may in turn result in a change in the derived values. + * + * @param information + * the annotation row to add annotations to + * @param profiles + * the source information data + * @param startCol + * start column (inclusive) + * @param endCol + * end column (exclusive) + * @param ignoreGaps + * if true, normalise residue percentages + * @param showSequenceLogo + * if true include all information symbols, else just show modal + * residue + * @param nseq + * number of sequences + */ + public static void completeInformation(AlignmentAnnotation information, + ProfilesI profiles, int startCol, int endCol, + boolean ignoreBelowBackground, + boolean showSequenceLogo, long nseq) + { + // long now = System.currentTimeMillis(); + if (information == null || information.annotations == null + || information.annotations.length < endCol) + { + /* + * called with a bad alignment annotation row + * wait for it to be initialised properly + */ + return; + } + + Float max = 0f; + + for (int i = startCol; i < endCol; i++) + { + ProfileI profile = profiles.get(i); + if (profile == null) + { + /* + * happens if sequences calculated over were + * shorter than alignment width + */ + information.annotations[i] = null; + return; + } + + HiddenMarkovModel hmm; + + SequenceI hmmSeq = information.sequenceRef; + + hmm = hmmSeq.getHMM(); + + Float value = getInformationContent(i, hmm); + + if (value > max) + { + max = value; + } + + String description = value + " bits"; + information.annotations[i] = new Annotation( + Character.toString(hmm.getConsensusAtAlignColumn(i)), + description, ' ', value); + } + information.graphMax = max; + // long elapsed = System.currentTimeMillis() - now; + // System.out.println(-elapsed); + } + + /** * Derive the gap count annotation row. * * @param gaprow @@ -450,6 +587,7 @@ public class AAFrequency return result; } + /** * Extract a sorted extract of cDNA codon profile data. The returned array * contains @@ -532,7 +670,7 @@ public class AAFrequency for (int col = 0; col < cols; col++) { // todo would prefer a Java bean for consensus data - Hashtable columnHash = new Hashtable(); + Hashtable columnHash = new Hashtable<>(); // #seqs, #ungapped seqs, counts indexed by (codon encoded + 1) int[] codonCounts = new int[66]; codonCounts[0] = alignment.getSequences().size(); @@ -719,4 +857,130 @@ public class AAFrequency } return scale; } + + /** + * Returns the information content at a specified column. + * + * @param column + * Index of the column, starting from 0. + * @return + */ + public static float getInformationContent(int column, + HiddenMarkovModel hmm) + { + float informationContent = 0f; + + for (char symbol : hmm.getSymbols()) + { + float freq = 0f; + freq = ResidueProperties.backgroundFrequencies + .get(hmm.getAlphabetType()).get(symbol); + Double hmmProb = hmm.getMatchEmissionProbability(column, symbol); + float prob = hmmProb.floatValue(); + informationContent += prob * (Math.log(prob / freq) / Math.log(2)); + + } + + return informationContent; + } + + /** + * Produces a HMM profile for a column in an alignment + * + * @param aa + * Alignment annotation for which the profile is being calculated. + * @param column + * Column in the alignment the profile is being made for. + * @param removeBelowBackground + * Boolean indicating whether to ignore residues with probabilities + * less than their background frequencies. + * @return + */ + public static int[] extractHMMProfile(HiddenMarkovModel hmm, int column, + boolean removeBelowBackground) + { + + if (hmm != null) + { + int size = hmm.getNumberOfSymbols(); + char symbols[] = new char[size]; + int values[] = new int[size]; + List charList = hmm.getSymbols(); + Integer totalCount = 0; + + for (int i = 0; i < size; i++) + { + char symbol = charList.get(i); + symbols[i] = symbol; + int value = getAnalogueCount(hmm, column, symbol, + removeBelowBackground); + values[i] = value; + totalCount += value; + } + + QuickSort.sort(values, symbols); + + int[] profile = new int[3 + size * 2]; + + profile[0] = AlignmentAnnotation.SEQUENCE_PROFILE; + profile[1] = size; + profile[2] = 100; + + if (totalCount != 0) + { + int arrayPos = 3; + for (int k = size - 1; k >= 0; k--) + { + Float percentage; + Integer value = values[k]; + if (removeBelowBackground) + { + percentage = (value.floatValue() / totalCount.floatValue()) + * 100; + } + else + { + percentage = value.floatValue() / 100f; + } + int intPercent = Math.round(percentage); + profile[arrayPos] = symbols[k]; + profile[arrayPos + 1] = intPercent; + arrayPos += 2; + } + } + return profile; + } + return null; + } + + /** + * Converts the emission probability of a residue at a column in the alignment + * to a 'count' to allow for processing by the annotation renderer. + * + * @param hmm + * @param column + * @param removeBelowBackground + * When true, this method returns 0 for any symbols with a match + * emission probability less than the background frequency. + * @param symbol + * @return + */ + static int getAnalogueCount(HiddenMarkovModel hmm, int column, + char symbol, boolean removeBelowBackground) + { + Double value; + + value = hmm.getMatchEmissionProbability(column, symbol); + double freq; + + freq = ResidueProperties.backgroundFrequencies + .get(hmm.getAlphabetType()).get(symbol); + if (value < freq && removeBelowBackground) + { + return 0; + } + + value = value * 10000; + return Math.round(value.floatValue()); + } } diff --git a/src/jalview/analysis/SeqsetUtils.java b/src/jalview/analysis/SeqsetUtils.java index 2b21e5e..6f037e5 100755 --- a/src/jalview/analysis/SeqsetUtils.java +++ b/src/jalview/analysis/SeqsetUtils.java @@ -20,6 +20,7 @@ */ package jalview.analysis; +import jalview.datamodel.HiddenMarkovModel; import jalview.datamodel.PDBEntry; import jalview.datamodel.Sequence; import jalview.datamodel.SequenceFeature; @@ -34,7 +35,7 @@ public class SeqsetUtils /** * Store essential properties of a sequence in a hashtable for later recovery - * Keys are Name, Start, End, SeqFeatures, PdbId + * Keys are Name, Start, End, SeqFeatures, PdbId, HMM * * @param seq * SequenceI @@ -72,6 +73,10 @@ public class SeqsetUtils (seq.getDatasetSequence() != null) ? seq.getDatasetSequence() : new Sequence("THISISAPLACEHOLDER", "")); } + if (seq.isHMMConsensusSequence()) + { + sqinfo.put("HMM", seq.getHMM()); + } return sqinfo; } @@ -99,6 +104,7 @@ public class SeqsetUtils Vector pdbid = (Vector) sqinfo.get("PdbId"); String description = (String) sqinfo.get("Description"); Sequence seqds = (Sequence) sqinfo.get("datasetSequence"); + HiddenMarkovModel hmm = (HiddenMarkovModel) sqinfo.get("HMM"); if (oldname == null) { namePresent = false; @@ -142,6 +148,11 @@ public class SeqsetUtils sq.setDatasetSequence(seqds); } + if (hmm != null) + { + sq.setHMM(new HiddenMarkovModel(hmm)); + sq.setIsHMMConsensusSequence(true); + } return namePresent; } diff --git a/src/jalview/api/AlignViewportI.java b/src/jalview/api/AlignViewportI.java index 9e6d1c0..a35c2a4 100644 --- a/src/jalview/api/AlignViewportI.java +++ b/src/jalview/api/AlignViewportI.java @@ -86,6 +86,12 @@ public interface AlignViewportI extends ViewStyleI boolean isNormaliseSequenceLogo(); + boolean isShowInformationHistogram(); + + boolean isShowHMMSequenceLogo(); + + boolean isNormaliseHMMSequenceLogo(); + ColourSchemeI getGlobalColourScheme(); /** @@ -113,6 +119,8 @@ public interface AlignViewportI extends ViewStyleI boolean isIgnoreGapsConsensus(); + boolean isIgnoreBelowBackground(); + boolean isCalculationInProgress(AlignmentAnnotation alignmentAnnotation); AlignmentAnnotation getAlignmentQualityAnnot(); @@ -486,6 +494,7 @@ public interface AlignViewportI extends ViewStyleI * * @return */ + @Override boolean isProteinFontAsCdna(); /** @@ -493,5 +502,31 @@ public interface AlignViewportI extends ViewStyleI * * @return */ + @Override void setProteinFontAsCdna(boolean b); + + void setSequenceInformationHashes(List info); + + List getSequenceInformationHashes(); + + ProfilesI getSequenceInformationHash(int index); + + List getInformationAnnotations(); + + AlignmentAnnotation getInformationAnnotation(int index); + + void setSequenceInformationHash(ProfilesI info, int index); + + /** + * Initiates the information annotation for all uninitiated sequences. + */ + void initInformation(); + + /** + * Updates all information annotations. + * + * @param ap + */ + void updateInformation(AlignmentViewPanel ap); + } diff --git a/src/jalview/appletgui/AlignFrame.java b/src/jalview/appletgui/AlignFrame.java index b48dec9..e77dd2e 100644 --- a/src/jalview/appletgui/AlignFrame.java +++ b/src/jalview/appletgui/AlignFrame.java @@ -234,6 +234,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, alignPanel); viewport.updateConservation(alignPanel); viewport.updateConsensus(alignPanel); + viewport.updateInformation(alignPanel); displayNonconservedMenuItem.setState(viewport.getShowUnconserved()); followMouseOverFlag.setState(viewport.isFollowHighlight()); diff --git a/src/jalview/appletgui/AlignViewport.java b/src/jalview/appletgui/AlignViewport.java index b07666e..12129cf 100644 --- a/src/jalview/appletgui/AlignViewport.java +++ b/src/jalview/appletgui/AlignViewport.java @@ -433,4 +433,12 @@ public class AlignViewport extends AlignmentViewport // TODO implement for applet } + @Override + public boolean isNormaliseHMMSequenceLogo() + { + return normaliseHMMSequenceLogo; + } + + + } diff --git a/src/jalview/bin/Cache.java b/src/jalview/bin/Cache.java index dc50843..62eb7de 100755 --- a/src/jalview/bin/Cache.java +++ b/src/jalview/bin/Cache.java @@ -260,6 +260,8 @@ public class Cache private final static String DEFAULT_PDB_FILE_PARSER = StructureImportSettings.StructureParser.JMOL_PARSER .toString(); + private static String HMMER_PATH; + /* * a date formatter using a fixed (rather than the user's) locale; * this ensures that date properties can be written and re-read successfully @@ -281,7 +283,7 @@ public class Cache @Override public synchronized Enumeration keys() { - return Collections.enumeration(new TreeSet(super.keySet())); + return Collections.enumeration(new TreeSet<>(super.keySet())); } }; diff --git a/src/jalview/bin/Jalview.java b/src/jalview/bin/Jalview.java index 9ec0033..bc93c37 100755 --- a/src/jalview/bin/Jalview.java +++ b/src/jalview/bin/Jalview.java @@ -20,9 +20,6 @@ */ package jalview.bin; -import groovy.lang.Binding; -import groovy.util.GroovyScriptEngine; - import jalview.ext.so.SequenceOntology; import jalview.gui.AlignFrame; import jalview.gui.Desktop; @@ -66,6 +63,9 @@ import java.util.Vector; import javax.swing.UIManager; +import groovy.lang.Binding; +import groovy.util.GroovyScriptEngine; + /** * Main class for Jalview Application
*
@@ -175,6 +175,8 @@ public class Jalview * * @param args * open filename + * @throws InterruptedException + * @throws IOException */ public static void main(String[] args) { @@ -184,6 +186,8 @@ public class Jalview /** * @param args + * @throws InterruptedException + * @throws IOException */ void doMain(String[] args) { @@ -970,7 +974,7 @@ public class Jalview } try { - Map vbinding = new HashMap(); + Map vbinding = new HashMap<>(); vbinding.put("Jalview", this); if (af != null) { @@ -1036,7 +1040,7 @@ public class Jalview + nickname + "|" + url); if (source == null) { - source = new Vector(); + source = new Vector<>(); } source.addElement(nickname); } @@ -1054,7 +1058,7 @@ public class Jalview System.out.println("adding source '" + data + "'"); if (source == null) { - source = new Vector(); + source = new Vector<>(); } source.addElement(data); } diff --git a/src/jalview/datamodel/Alignment.java b/src/jalview/datamodel/Alignment.java index 5733719..40e3230 100755 --- a/src/jalview/datamodel/Alignment.java +++ b/src/jalview/datamodel/Alignment.java @@ -287,6 +287,32 @@ public class Alignment implements AlignmentI } /** + * Inserts a sequence at a point in the alignment. + * + * @param i + * the index of the position the sequence is to be inserted in. + */ + @Override + public void insertSequenceAt(int i, SequenceI snew) + { + synchronized (sequences) + { + if (sequences.size() > i) + { + sequences.add(i, snew); + return; + + } + else + { + sequences.add(snew); + hiddenSequences.adjustHeightSequenceAdded(); + } + return; + } + } + + /** * DOCUMENT ME! * * @return DOCUMENT ME! @@ -1920,4 +1946,47 @@ public class Alignment implements AlignmentI { hiddenCols = cols; } + + /** + * Returns all HMM consensus sequences. This will not return real sequences + * with HMMs. If remove is set to true, the consensus sequences will be + * removed from the alignment. + */ + @Override // TODO make this more efficient. + public List getHMMConsensusSequences(boolean remove) + { + List seqs = new ArrayList<>(); + int position = 0; + int seqsRemoved = 0; + boolean endReached = false; + + while (!endReached) + { + SequenceI seq = sequences.get(position); + if (seq.isHMMConsensusSequence()) + { + if (remove) + { + sequences.remove(position); + seqsRemoved++; + seq.setPreviousPosition(seqsRemoved + position - 1); + } + else + { + position++; + } + seqs.add(seq); + } + else + { + position++; + } + + if (position >= sequences.size()) + { + endReached = true; + } + } + return seqs; + } } diff --git a/src/jalview/datamodel/AlignmentAnnotation.java b/src/jalview/datamodel/AlignmentAnnotation.java index 6bbd566..7979a2d 100755 --- a/src/jalview/datamodel/AlignmentAnnotation.java +++ b/src/jalview/datamodel/AlignmentAnnotation.java @@ -687,7 +687,7 @@ public class AlignmentAnnotation this.calcId = annotation.calcId; if (annotation.properties != null) { - properties = new HashMap(); + properties = new HashMap<>(); for (Map.Entry val : annotation.properties.entrySet()) { properties.put(val.getKey(), val.getValue()); @@ -723,7 +723,7 @@ public class AlignmentAnnotation if (annotation.sequenceMapping != null) { Integer p = null; - sequenceMapping = new HashMap(); + sequenceMapping = new HashMap<>(); Iterator pos = annotation.sequenceMapping.keySet() .iterator(); while (pos.hasNext()) @@ -803,7 +803,7 @@ public class AlignmentAnnotation int epos = sequenceRef.findPosition(endRes); if (sequenceMapping != null) { - Map newmapping = new HashMap(); + Map newmapping = new HashMap<>(); Iterator e = sequenceMapping.keySet().iterator(); while (e.hasNext()) { @@ -930,7 +930,7 @@ public class AlignmentAnnotation { return; } - sequenceMapping = new HashMap(); + sequenceMapping = new HashMap<>(); int seqPos; @@ -1211,7 +1211,7 @@ public class AlignmentAnnotation /** * properties associated with the calcId */ - protected Map properties = new HashMap(); + protected Map properties = new HashMap<>(); /** * base colour for line graphs. If null, will be set automatically by @@ -1257,7 +1257,7 @@ public class AlignmentAnnotation : false; // TODO build a better annotation element map and get rid of annotations[] - Map mapForsq = new HashMap(); + Map mapForsq = new HashMap<>(); if (sequenceMapping != null) { if (sp2sq != null) @@ -1310,7 +1310,7 @@ public class AlignmentAnnotation if (mapping != null) { Map old = sequenceMapping; - Map remap = new HashMap(); + Map remap = new HashMap<>(); int index = -1; for (int mp[] : mapping.values()) { @@ -1368,7 +1368,7 @@ public class AlignmentAnnotation { if (properties == null) { - properties = new HashMap(); + properties = new HashMap<>(); } properties.put(property, value); } @@ -1493,4 +1493,5 @@ public class AlignmentAnnotation { return graphMin < graphMax; } + } diff --git a/src/jalview/datamodel/AlignmentI.java b/src/jalview/datamodel/AlignmentI.java index 1b5207f..dd58b31 100755 --- a/src/jalview/datamodel/AlignmentI.java +++ b/src/jalview/datamodel/AlignmentI.java @@ -581,5 +581,26 @@ public interface AlignmentI extends AnnotatedCollectionI AlignedCodonFrame getMapping(SequenceI mapFrom, SequenceI mapTo); public void setHiddenColumns(HiddenColumns cols); + + /** + * Returns all HMM consensus sequences. + * + * @param remove + * If true, remove all HMM consensus sequences from the alignment. + * @return + */ + public List getHMMConsensusSequences(boolean remove); + + /** + * Insert a sequence at a position in an alignment + * + * @param i + * The idnex of the position. + * @param snew + * The new sequence. + */ + void insertSequenceAt(int i, SequenceI snew); + + } diff --git a/src/jalview/datamodel/AlignmentOrder.java b/src/jalview/datamodel/AlignmentOrder.java index 6d09145..ef46d79 100755 --- a/src/jalview/datamodel/AlignmentOrder.java +++ b/src/jalview/datamodel/AlignmentOrder.java @@ -80,7 +80,7 @@ public class AlignmentOrder */ public AlignmentOrder(AlignmentI orderFrom) { - Order = new ArrayList(); + Order = new ArrayList<>(); for (SequenceI seq : orderFrom.getSequences()) { @@ -96,7 +96,7 @@ public class AlignmentOrder */ public AlignmentOrder(SequenceI[] orderFrom) { - Order = new ArrayList(Arrays.asList(orderFrom)); + Order = new ArrayList<>(Arrays.asList(orderFrom)); } /** diff --git a/src/jalview/datamodel/AnnotatedCollectionI.java b/src/jalview/datamodel/AnnotatedCollectionI.java index 2963fd5..927f3f4 100644 --- a/src/jalview/datamodel/AnnotatedCollectionI.java +++ b/src/jalview/datamodel/AnnotatedCollectionI.java @@ -61,4 +61,5 @@ public interface AnnotatedCollectionI extends SequenceCollectionI * alignment, parent group). */ AnnotatedCollectionI getContext(); + } diff --git a/src/jalview/datamodel/HMMNode.java b/src/jalview/datamodel/HMMNode.java new file mode 100644 index 0000000..04e335f --- /dev/null +++ b/src/jalview/datamodel/HMMNode.java @@ -0,0 +1,115 @@ +package jalview.datamodel; + +import java.util.ArrayList; +import java.util.List; + +/** + * stores data for each node in the hmm model + * @author TZVanaalten + * + */ +public class HMMNode +{ + //contains the match emissions for each symbol + List matchEmissions = new ArrayList<>(); + //contains the insert emissions for each symbol + List insertEmissions = new ArrayList<>(); + //contains the state transitions for each possible transition. These are bm, bi, bd, im, ii, dm and dd in order (0th position in + // the array indicates the probability of a bm transition) + List stateTransitions = new ArrayList<>(); + + //annotations + Integer alignmentColumn = null; + char consensusResidue; + char referenceAnnotation; + char maskValue; + char consensusStructure; + + public HMMNode() + { + } + + public HMMNode(HMMNode node) + { + matchEmissions = new ArrayList<>(node.getMatchEmissions()); + insertEmissions = new ArrayList<>(node.getInsertEmissions()); + stateTransitions = new ArrayList<>(node.getStateTransitions()); + alignmentColumn = new Integer(node.getAlignmentColumn()); + consensusResidue = node.getConsensusResidue(); + referenceAnnotation = node.getReferenceAnnotation(); + maskValue = node.getMaskValue(); + consensusStructure = node.getConsensusStructure(); + } + + public List getMatchEmissions() + { + return matchEmissions; + } + + public void setMatchEmissions(List matchEmissionsL) + { + this.matchEmissions = matchEmissionsL; + } + public List getInsertEmissions() + { + return insertEmissions; + } + + public void setInsertEmissions(List insertEmissionsL) + { + this.insertEmissions = insertEmissionsL; + } + + public List getStateTransitions() + { + return stateTransitions; + } + + public void setStateTransitions(List stateTransitionsM) + { + this.stateTransitions = stateTransitionsM; + } + + public Integer getAlignmentColumn() + { + return alignmentColumn; + } + public void setAlignmentColumn(int alignmentColumn) + { + this.alignmentColumn = alignmentColumn; + } + public char getConsensusResidue() + { + return consensusResidue; + } + public void setConsensusResidue(char consensusResidue) + { + this.consensusResidue = consensusResidue; + } + public char getReferenceAnnotation() + { + return referenceAnnotation; + } + public void setReferenceAnnotation(char referenceAnnotation) + { + this.referenceAnnotation = referenceAnnotation; + } + public char getMaskValue() + { + return maskValue; + } + public void setMaskValue(char maskValue) + { + this.maskValue = maskValue; + } + public char getConsensusStructure() + { + return consensusStructure; + } + public void setConsensusStructure(char consensusStructure) + { + this.consensusStructure = consensusStructure; + } +} + + diff --git a/src/jalview/datamodel/HiddenMarkovModel.java b/src/jalview/datamodel/HiddenMarkovModel.java new file mode 100644 index 0000000..086f5cd --- /dev/null +++ b/src/jalview/datamodel/HiddenMarkovModel.java @@ -0,0 +1,1021 @@ +package jalview.datamodel; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Data structure which stores a hidden Markov model. Currently contains file + * properties as well, not sure whether these should be transferred to the + * HMMFile class + * + * @author TZVanaalten + * + */ +public class HiddenMarkovModel +{ + + + // Stores file properties. Do not directly access this field as it contains + // only string value - use the getter methods. For example, to find the length + // of theHMM, use getModelLength()to return an int value + Map fileProperties = new HashMap<>(); + + // contains all of the symbols used in this model. The index of each symbol + // represents its lookup value + List symbols = new ArrayList<>(); + + // contains information for each node in the model. The begin node is at index + // 0. Node 0 contains average emission probabilities for each symbol + List nodes = new ArrayList<>(); + + // contains the HMM node for each alignment column, alignment columns start at + // index 0; + Map nodeLookup = new HashMap<>(); + + // contains the symbol index for each symbol + Map symbolIndexLookup = new HashMap<>(); + + final static String YES = "yes"; + + final static String NO = "no"; + + // keys for file properties hashmap + private final String NAME = "NAME"; + + private final String ACCESSION_NUMBER = "ACC"; + + private final String DESCRIPTION = "DESC"; + + private final String LENGTH = "LENG"; + + private final String MAX_LENGTH = "MAXL"; + + private final String ALPHABET = "ALPH"; + + private final String DATE = "DATE"; + + private final String COMMAND_LOG = "COM"; + + private final String NUMBER_OF_SEQUENCES = "NSEQ"; + + private final String EFF_NUMBER_OF_SEQUENCES = "EFFN"; + + private final String CHECK_SUM = "CKSUM"; + + private final String GATHERING_THRESHOLDS = "GA"; + + private final String TRUSTED_CUTOFFS = "TC"; + + private final String NOISE_CUTOFFS = "NC"; + + private final String STATISTICS = "STATS"; + + private final String COMPO = "COMPO"; + + private final String GATHERING_THRESHOLD = "GA"; + + private final String TRUSTED_CUTOFF = "TC"; + + private final String NOISE_CUTOFF = "NC"; + + private final String VITERBI = "VITERBI"; + + private final String MSV = "MSV"; + + private final String FORWARD = "FORWARD"; + + private final String MAP = "MAP"; + + private final String REFERENCE_ANNOTATION = "RF"; + + private final String CONSENSUS_RESIDUE = "CONS"; + + private final String CONSENSUS_STRUCTURE = "CS"; + + private final String MASKED_VALUE = "MM"; + + public static final int MATCHTOMATCH = 0; + + public static final int MATCHTOINSERT = 1; + + public static final int MATCHTODELETE = 2; + + public static final int INSERTTOMATCH = 3; + + public static final int INSERTTOINSERT = 4; + + public static final int DELETETOMATCH = 5; + + public static final int DELETETODELETE = 6; + + String fileHeader; + + public HiddenMarkovModel() + { + + } + + public HiddenMarkovModel(HiddenMarkovModel hmm) + { + super(); + this.fileProperties = new HashMap<>(hmm.fileProperties); + this.symbols = new ArrayList<>(hmm.symbols); + this.nodes = new ArrayList<>(hmm.nodes); + this.nodeLookup = new HashMap<>(hmm.nodeLookup); + this.symbolIndexLookup = new HashMap<>( + hmm.symbolIndexLookup); + this.fileHeader = new String(hmm.fileHeader); + } + + /** + * Gets the file header of the .hmm file this model came from. + * + * @return + */ + public String getFileHeader() + { + return fileHeader; + } + + /** + * Sets the file header of this model. + * + * @param header + */ + public void setFileHeader(String header) + { + fileHeader = header; + } + + /** + * Returns the map containing the matches between nodes and alignment column + * indexes. + * + * @return + * + */ + public Map getNodeLookup() + { + return nodeLookup; + } + + /** + * Returns the list of symbols used in this hidden Markov model. + * + * @return + */ + public List getSymbols() + { + return symbols; + } + + /** + * Returns the file properties. + * + * @return + */ + public Map getFileProperties() + { + return fileProperties; + } + + /** + * Gets the node in the hidden Markov model at the specified position. + * + * @param nodeIndex + * The index of the node requested. Node 0 optionally contains the + * average match emission probabilities across the entire model, and + * always contains the insert emission probabilities and state + * transition probabilities for the begin node. Node 1 contains the + * first node in the HMM that can correspond to a column in the + * alignment. + * @return + */ + public HMMNode getNode(int nodeIndex) + { + return getNodes().get(nodeIndex); + } + + /** + * Sets the list of symbols used in the hidden Markov model to the list + * specified. + * + * @param symbolsL + * The list of symbols to which the current list is to be changed. + * + */ + public void setSymbols(List symbolsL) + { + this.symbols = symbolsL; + } + + /** + * Returns the name of the sequence alignment on which the HMM is based. + * + * @return + */ + public String getName() + { + return fileProperties.get(NAME); + } + + /** + * Returns the accession number. + * @return + */ + public String getAccessionNumber() + { + return fileProperties.get(ACCESSION_NUMBER); + } + + /** + * Returns a description of the sequence alignment on which the hidden Markov + * model is based. + * + * @return + */ + public String getDescription() + { + return fileProperties.get(DESCRIPTION); + } + + /** + * Returns the length of the hidden Markov model. + * + * @return + */ + public Integer getLength() + { + if (fileProperties.get(LENGTH) == null) + { + return null; + } + return Integer.parseInt(fileProperties.get(LENGTH)); + } + + /** + * Returns the max instance length within the hidden Markov model. + * + * @return + */ + public Integer getMaxInstanceLength() + { + if (fileProperties.get(MAX_LENGTH) == null) + { + return null; + } + return Integer.parseInt(fileProperties.get(MAX_LENGTH)); + } + + /** + * Returns the type of symbol alphabet - "amino", "DNA", "RNA" are the + * options. Other alphabets may be added. + * + * @return + */ + public String getAlphabetType() + { + return fileProperties.get(ALPHABET); + } + + /** + * Returns the date as a String. + * + * @return + */ + public String getDate() + { + return fileProperties.get(DATE); + } + + /** + * Returns the command line log. + * + * @return + */ + public String getCommandLineLog() + { + return fileProperties.get(COMMAND_LOG); + } + + /** + * Returns the number of sequences on which the HMM was trained. + * + * @return + */ + public Integer getNumberOfSequences() + { + if (fileProperties.get(NUMBER_OF_SEQUENCES) == null) + { + return null; + } + return Integer.parseInt(fileProperties.get(NUMBER_OF_SEQUENCES)); + } + + /** + * Returns the effective number of sequences on which the HMM was based. + * + * @param value + */ + public Double getEffectiveNumberOfSequences() + { + if (fileProperties.get(LENGTH) == null) + { + return null; + } + return Double.parseDouble(fileProperties.get(EFF_NUMBER_OF_SEQUENCES)); + } + + /** + * Returns the checksum. + * + * @return + */ + public Long getCheckSum() + { + if (fileProperties.get(LENGTH) == null) + { + return null; + } + return Long.parseLong(fileProperties.get(CHECK_SUM)); + } + + /** + * Returns the list of nodes in this HMM. + * + * @return + */ + public List getNodes() + { + return nodes; + } + + /** + * Sets the list of nodes in this HMM to the given list. + * + * @param nodes + * The list of nodes to which the current list of nodes is being + * changed. + */ + public void setNodes(List nodes) + { + this.nodes = nodes; + } + + /** + * Gets the match emission probability for a given symbol at a column in the + * alignment. + * + * @param alignColumn + * The index of the alignment column, starting at index 0. Index 0 + * usually corresponds to index 1 in the HMM. + * @param symbol + * The symbol for which the desired probability is being requested. + * @return + * + */ + public Double getMatchEmissionProbability(int alignColumn, char symbol) + { + int symbolIndex; + int nodeIndex; + Double probability; + if (!symbolIndexLookup.containsKey(symbol)) + { + return 0d; + } + symbolIndex = symbolIndexLookup.get(symbol); + if (nodeLookup.containsKey(alignColumn)) + { + nodeIndex = nodeLookup.get(alignColumn); + probability = getNode(nodeIndex).getMatchEmissions().get(symbolIndex); + return probability; + } + else + { + return 0d; + } + + } + + /** + * Gets the insert emission probability for a given symbol at a column in the + * alignment. + * + * @param alignColumn + * The index of the alignment column, starting at index 0. Index 0 + * usually corresponds to index 1 in the HMM. + * @param symbol + * The symbol for which the desired probability is being requested. + * @return + * + */ + public Double getInsertEmissionProbability(int alignColumn, char symbol) + { + int symbolIndex; + int nodeIndex; + Double probability; + if (!symbolIndexLookup.containsKey(symbol)) + { + return 0d; + } + symbolIndex = symbolIndexLookup.get(symbol); + if (nodeLookup.containsKey(alignColumn)) + { + nodeIndex = nodeLookup.get(alignColumn); + probability = getNode(nodeIndex).getInsertEmissions() + .get(symbolIndex); + return probability; + } + else + { + return 0d; + } + + } + + /** + * Gets the state transition probability for a given symbol at a column in the + * alignment. + * + * @param alignColumn + * The index of the alignment column, starting at index 0. Index 0 + * usually corresponds to index 1 in the HMM. + * @param symbol + * The symbol for which the desired probability is being requested. + * @return + * + */ + public Double getStateTransitionProbability(int alignColumn, + int transition) + { + int nodeIndex; + Double probability; + if (nodeLookup.containsKey(alignColumn)) + { + nodeIndex = nodeLookup.get(alignColumn); + probability = getNode(nodeIndex).getStateTransitions() + .get(transition); + return probability; + } + else + { + return 0d; + } + + } + + /** + * Returns the alignment column linked to the node at the given index. + * + * @param nodeIndex + * The index of the node, starting from index 1. Index 0 is the begin + * node, which does not correspond to a column in the alignment. + * @return + */ + public Integer getNodeAlignmentColumn(int nodeIndex) + { + Integer value = nodes.get(nodeIndex).getAlignmentColumn(); + return value; + } + + /** + * Returns the consensus residue at the specified node. + * + * @param nodeIndex + * The index of the specified node. + * @return + */ + public char getConsensusResidue(int nodeIndex) + { + char value = nodes.get(nodeIndex).getConsensusResidue(); + return value; + } + + /** + * Returns the consensus at a given alignment column. If the character is + * lower case, its emission probability is less than 0.5. + * + * @param columnIndex + * The index of the column in the alignment for which the consensus + * is desired. The list of columns starts at index 0. + * @return + */ + public char getConsensusAtAlignColumn(int columnIndex) + { + char mostLikely = '-'; + if (consensusResidueIsActive()) + { + + Integer index = findNodeIndex(columnIndex); + if (index == null) + { + return '-'; + } + mostLikely = getNodes().get(index).getConsensusResidue(); + return mostLikely; + } + else + { + double highestProb = 0; + for (char character : symbols) + { + Double prob = getMatchEmissionProbability(columnIndex, character); + if (prob > highestProb) + { + highestProb = prob; + mostLikely = character; + } + } + if (highestProb < 0.5) + { + mostLikely = Character.toLowerCase(mostLikely); + } + return mostLikely; + } + + } + + /** + * Returns the reference annotation at the specified node. + * + * @param nodeIndex + * The index of the specified node. + * @return + */ + public char getReferenceAnnotation(int nodeIndex) + { + char value = nodes.get(nodeIndex).getReferenceAnnotation(); + return value; + } + + /** + * Returns the mask value at the specified node. + * + * @param nodeIndex + * The index of the specified node. + * @return + */ + public char getMaskedValue(int nodeIndex) + { + char value = nodes.get(nodeIndex).getMaskValue(); + return value; + } + + /** + * Returns the consensus structure at the specified node. + * + * @param nodeIndex + * The index of the specified node. + * @return + */ + public char getConsensusStructure(int nodeIndex) + { + char value = nodes.get(nodeIndex).getConsensusStructure(); + return value; + } + + /** + * Returns the average match emission probability for a given symbol + * + * @param symbolIndex + * The index of the symbol. + * @return + * + */ + public double getAverageMatchEmission(int symbolIndex) + { + double value = nodes.get(0).getMatchEmissions().get(symbolIndex); + return value; + } + + /** + * Returns the number of symbols in the alphabet used in this HMM. + * + * @return + */ + public int getNumberOfSymbols() + { + return symbols.size(); + } + + /** + * Adds a file property. + * + * @param key + * @param value + */ + public void addFileProperty(String key, String value) + { + fileProperties.put(key, value); + } + + /** + * Returns a boolean indicating whether the reference annotation is active. + * + * @return + */ + public boolean referenceAnnotationIsActive() + { + String status; + status = fileProperties.get(REFERENCE_ANNOTATION); + if (status == null) + { + return false; + } + switch (status) + { + case YES: + return true; + case NO: + return false; + default: + return false; + } + + } + + /** + * Returns a boolean indicating whether the mask value annotation is active. + * + * @return + */ + public boolean maskValueIsActive() + { + String status; + status = fileProperties.get(MASKED_VALUE); + if (status == null) + { + return false; + } + switch (status) + { + case YES: + return true; + case NO: + return false; + default: + return false; + } + + } + + /** + * Returns a boolean indicating whether the consensus residue annotation is + * active. + * + * @return + */ + public boolean consensusResidueIsActive() + { + String status; + status = fileProperties.get(CONSENSUS_RESIDUE); + if (status == null) + { + return false; + } + switch (status) + { + case YES: + return true; + case NO: + return false; + default: + return false; + } + + } + + /** + * Returns a boolean indicating whether the consensus structure annotation is + * active. + * + * @return + */ + public boolean consensusStructureIsActive() + { + String status; + status = fileProperties.get(CONSENSUS_STRUCTURE); + if (status == null) + { + return false; + } + switch (status) + { + case YES: + return true; + case NO: + return false; + default: + return false; + } + + } + + /** + * Returns a boolean indicating whether the MAP annotation is active. + * + * @return + */ + public boolean mapIsActive() + { + String status; + status = fileProperties.get(MAP); + if (status == null) + { + return false; + } + switch (status) + { + case YES: + return true; + case NO: + return false; + default: + return false; + } + + } + + /** + * Sets the alignment column of the specified node. + * + * @param nodeIndex + * + * @param column + * + */ + public void setAlignmentColumn(int nodeIndex, int column) + { + nodes.get(nodeIndex).setAlignmentColumn(column); + } + + /** + * Sets the reference annotation at a given node. + * + * @param nodeIndex + * @param value + */ + public void setReferenceAnnotation(int nodeIndex, char value) + { + nodes.get(nodeIndex).setReferenceAnnotation(value); + } + + /** + * Sets the consensus residue at a given node. + * + * @param nodeIndex + * @param value + */ + public void setConsensusResidue(int nodeIndex, char value) + { + nodes.get(nodeIndex).setConsensusResidue(value); + } + + /** + * Sets the consensus structure at a given node. + * + * @param nodeIndex + * @param value + */ + public void setConsensusStructure(int nodeIndex, char value) + { + nodes.get(nodeIndex).setConsensusStructure(value); + } + + /** + * Sets the mask value at a given node. + * + * @param nodeIndex + * @param value + */ + public void setMaskValue(int nodeIndex, char value) + { + nodes.get(nodeIndex).setMaskValue(value); + } + + /** + * Temporary implementation, should not be used. + * + * @return + */ + public String getGatheringThreshold() + { + String value; + value = fileProperties.get("GA"); + return value; + } + + /** + * Temporary implementation, should not be used. + * + * @return + */ + public String getNoiseCutoff() + { + String value; + value = fileProperties.get("NC"); + return value; + } + + /** + * Temporary implementation, should not be used. + * + * @return + */ + public String getTrustedCutoff() + { + String value; + value = fileProperties.get("TC"); + return value; + } + + /** + * Temporary implementation, should not be used. + * + * @return + */ + public String getViterbi() + { + String value; + value = fileProperties.get(VITERBI); + return value; + } + + /** + * Temporary implementation, should not be used. + * + * @return + */ + public String getMSV() + { + String value; + value = fileProperties.get(MSV); + return value; + } + + /** + * Temporary implementation, should not be used. + * + * @return + */ + public String getForward() + { + String value; + value = fileProperties.get(FORWARD); + return value; + } + + /** + * Sets the activation status of the MAP annotation. + * + * @param status + */ + public void setMAPStatus(boolean status) + { + fileProperties.put(MAP, status ? YES : NO); + } + + /** + * Sets the activation status of the reference annotation. + * + * @param status + */ + public void setReferenceAnnotationStatus(boolean status) + { + fileProperties.put(REFERENCE_ANNOTATION, status ? YES : NO); + } + + /** + * Sets the activation status of the mask value annotation. + * + * @param status + */ + public void setMaskedValueStatus(boolean status) + { + fileProperties.put(MASKED_VALUE, status ? YES : NO); + } + + /** + * Sets the activation status of the consensus residue annotation. + * + * @param status + */ + public void setConsensusResidueStatus(boolean status) + { + fileProperties.put(CONSENSUS_RESIDUE, status ? YES : NO); + } + + /** + * Sets the activation status of the consensus structure annotation. + * + * @param status + */ + public void setConsensusStructureStatus(boolean status) + { + fileProperties.put(CONSENSUS_STRUCTURE, status ? YES : NO); + } + + /** + * Finds the index of the node in a hidden Markov model based on the column in + * the alignment + * + * @param alignmentColumn + * The index of the column in the alignment, with the indexes + * starting from 0. + */ + + public Integer findNodeIndex(int alignmentColumn) + { + Integer index; + index = nodeLookup.get(alignmentColumn); + return index; + } + + /** + * Finds the String values of a boolean. "yes" for true and "no" for false. + * + * @param value + * @return + */ + public static String findStringFromBoolean(boolean value) + { + if (value) + { + return YES; + } + else + { + return NO; + } + } + + + + /** + * Returns the consensus sequence based on the most probable symbol at each + * position. The sequence is adjusted to match the length of the existing + * sequence alignment. Gap characters are used as padding. + * + * @param length + * The length of the longest sequence in the existing alignment. + * @return + */ + public Sequence getConsensusSequence() + { + int start; + int end; + int modelLength; + start = getNodeAlignmentColumn(1); + modelLength = getLength(); + end = getNodeAlignmentColumn(modelLength); + char[] sequence = new char[end + 1]; + for (int index = 0; index < end + 1; index++) + { + Character character; + + character = getConsensusAtAlignColumn(index); + + if (character == null || character == '-') + { + sequence[index] = '-'; + } + else + { + sequence[index] = Character.toUpperCase(character); + } + } + + + Sequence seq = new Sequence(getName() + "_HMM", sequence, start, + end); + return seq; + } + + + /** + * Initiates a HMM consensus sequence + * + * @return A new HMM consensus sequence + */ + public SequenceI initHMMSequence() + { + Sequence consensus = getConsensusSequence(); + consensus.setIsHMMConsensusSequence(true); + consensus.setHMM(this); + return consensus; + } + + public int getSymbolIndex(char c) + { + return symbolIndexLookup.get(c); + } + + public void setSymbolIndex(Character c, Integer i) + { + symbolIndexLookup.put(c, i); + } + +} + diff --git a/src/jalview/datamodel/Sequence.java b/src/jalview/datamodel/Sequence.java index 0103237..701ad7d 100755 --- a/src/jalview/datamodel/Sequence.java +++ b/src/jalview/datamodel/Sequence.java @@ -52,12 +52,20 @@ public class Sequence extends ASequence implements SequenceI private char[] sequence; + int previousPosition; + String description; int start; int end; + boolean hasInfo; + + HiddenMarkovModel hmm; + + boolean isHMMConsensusSequence = false; + Vector pdbIds; String vamsasId; @@ -293,6 +301,10 @@ public class Sequence extends ASequence implements SequenceI this.addPDBId(new PDBEntry(pdb)); } } + if (seq.getHMM() != null) + { + this.hmm = new HiddenMarkovModel(seq.getHMM()); + } } @Override @@ -420,7 +432,7 @@ public class Sequence extends ASequence implements SequenceI { if (pdbIds == null) { - pdbIds = new Vector(); + pdbIds = new Vector<>(); pdbIds.add(entry); return true; } @@ -791,7 +803,7 @@ public class Sequence extends ASequence implements SequenceI @Override public List getInsertions() { - ArrayList map = new ArrayList(); + ArrayList map = new ArrayList<>(); int lastj = -1, j = 0; int pos = start; int seqlen = sequence.length; @@ -1087,7 +1099,7 @@ public class Sequence extends ASequence implements SequenceI { if (this.annotation == null) { - this.annotation = new Vector(); + this.annotation = new Vector<>(); } if (!this.annotation.contains(annotation)) { @@ -1413,7 +1425,7 @@ public class Sequence extends ASequence implements SequenceI public List getAlignmentAnnotations(String calcId, String label) { - List result = new ArrayList(); + List result = new ArrayList<>(); if (this.annotation != null) { for (AlignmentAnnotation ann : annotation) @@ -1469,7 +1481,7 @@ public class Sequence extends ASequence implements SequenceI } synchronized (dbrefs) { - List primaries = new ArrayList(); + List primaries = new ArrayList<>(); DBRefEntry[] tmp = new DBRefEntry[1]; for (DBRefEntry ref : dbrefs) { @@ -1516,4 +1528,89 @@ public class Sequence extends ASequence implements SequenceI } } + @Override + public HiddenMarkovModel getHMM() + { + return hmm; + } + + @Override + public void setHMM(HiddenMarkovModel hmm) + { + this.hmm = hmm; + } + + @Override + public void updateHMMMapping() + { + int node = 1; + int column = 0; + for (char residue : sequence) + { + if (!Comparison.isGap(residue)) + { + hmm.setAlignmentColumn(node, column); + hmm.getNodeLookup().put(column, node); + node++; + } + else + { + hmm.getNodeLookup().remove(column); + } + column++; + } + + } + + @Override + public boolean isHMMConsensusSequence() + { + return isHMMConsensusSequence; + } + + @Override + public void setIsHMMConsensusSequence(boolean isHMMConsensusSequence) + { + this.isHMMConsensusSequence = isHMMConsensusSequence; + } + + @Override + public boolean hasHMMAnnotation() + { + return hasInfo; + /* + if (annotation == null) + { + return false; + } + + for (AlignmentAnnotation annot : annotation) + { + if (annot.label.contains("_HMM")) + { + return true; + } + } + return false; + */ + } + + @Override + public void setHasInfo(boolean status) + { + hasInfo = true; + } + + @Override + public int getPreviousPosition() + { + return previousPosition; + } + + @Override + public void setPreviousPosition(int previousPosition) + { + this.previousPosition = previousPosition; + } + } diff --git a/src/jalview/datamodel/SequenceGroup.java b/src/jalview/datamodel/SequenceGroup.java index 6964b53..179880e 100755 --- a/src/jalview/datamodel/SequenceGroup.java +++ b/src/jalview/datamodel/SequenceGroup.java @@ -100,6 +100,8 @@ public class SequenceGroup implements AnnotatedCollectionI */ private boolean ignoreGapsInConsensus = true; + private boolean ignoreBelowBackground = true; + /** * consensus calculation property */ @@ -124,10 +126,18 @@ public class SequenceGroup implements AnnotatedCollectionI AlignmentAnnotation conservation = null; + AlignmentAnnotation information = null; + private boolean showConsensusHistogram; private AnnotatedCollectionI context; + private boolean showHMMSequenceLogo; + + private boolean normaliseHMMSequenceLogo; + + private boolean showInformationHistogram; + /** * Creates a new SequenceGroup object. */ @@ -199,6 +209,9 @@ public class SequenceGroup implements AnnotatedCollectionI showSequenceLogo = seqsel.showSequenceLogo; normaliseSequenceLogo = seqsel.normaliseSequenceLogo; showConsensusHistogram = seqsel.showConsensusHistogram; + showHMMSequenceLogo = seqsel.showHMMSequenceLogo; + normaliseHMMSequenceLogo = seqsel.normaliseHMMSequenceLogo; + showInformationHistogram = seqsel.showInformationHistogram; idColour = seqsel.idColour; outlineColour = seqsel.outlineColour; seqrep = seqsel.seqrep; @@ -207,6 +220,7 @@ public class SequenceGroup implements AnnotatedCollectionI thresholdTextColour = seqsel.thresholdTextColour; width = seqsel.width; ignoreGapsInConsensus = seqsel.ignoreGapsInConsensus; + ignoreBelowBackground = seqsel.ignoreBelowBackground; if (seqsel.conserve != null) { recalcConservation(); // safer than @@ -548,7 +562,8 @@ public class SequenceGroup implements AnnotatedCollectionI */ public boolean recalcConservation(boolean defer) { - if (cs == null && consensus == null && conservation == null) + if (cs == null && consensus == null && conservation == null + && information == null) { return false; } @@ -559,6 +574,16 @@ public class SequenceGroup implements AnnotatedCollectionI { ProfilesI cnsns = AAFrequency.calculate(sequences, startRes, endRes + 1, showSequenceLogo); + if (information != null) + { + HiddenMarkovModel hmm = information.sequenceRef.getHMM(); + + ProfilesI info = AAFrequency.calculateHMMProfiles(hmm, + (endRes + 1) - startRes, startRes, endRes + 1, + showHMMSequenceLogo, ignoreBelowBackground); + _updateInformationRow(info, sequences.size()); + upd = true; + } if (consensus != null) { _updateConsensusRow(cnsns, sequences.size()); @@ -633,6 +658,8 @@ public class SequenceGroup implements AnnotatedCollectionI public ProfilesI consensusData = null; + public ProfilesI informationData = null; + private void _updateConsensusRow(ProfilesI cnsns, long nseq) { if (consensus == null) @@ -659,6 +686,38 @@ public class SequenceGroup implements AnnotatedCollectionI } /** + * Recalculates the information content on the HMM annotation. + * + * @param cnsns + * @param nseq + */ + private void _updateInformationRow(ProfilesI cnsns, long nseq) + { + if (information == null) + { + getInformation(); + } + information.label = "Information for " + getName(); + information.description = "Percent Identity"; + informationData = cnsns; + // preserve width if already set + int aWidth = (information.annotations != null) + ? (endRes < information.annotations.length + ? information.annotations.length : endRes + 1) + : endRes + 1; + information.annotations = null; + information.annotations = new Annotation[aWidth]; // should be alignment + // width + + AAFrequency.completeInformation(information, cnsns, startRes, + endRes + 1, ignoreBelowBackground, showSequenceLogo, nseq); // TODO: + // setting + // container + // for + // ignoreGapsInInformationCalculation); + } + + /** * @param s * sequence to either add or remove from group * @param recalc @@ -1106,6 +1165,34 @@ public class SequenceGroup implements AnnotatedCollectionI } /** + * + * @return information content annotation. + */ + public AlignmentAnnotation getInformation() + { + // TODO get or calculate and get information annotation row for this group + int aWidth = this.getWidth(); + // pointer + // possibility + // here. + if (aWidth < 0) + { + return null; + } + if (information == null) + { + information = new AlignmentAnnotation("", "", new Annotation[1], 0f, + 6.25f, AlignmentAnnotation.BAR_GRAPH); + information.hasText = true; + information.autoCalculated = false; + information.groupRef = this; + information.label = getName() + "_HMM"; + information.description = "Information content, measured in bits"; + } + return information; + } + + /** * set this alignmentAnnotation object as the one used to render consensus * annotation * @@ -1191,6 +1278,20 @@ public class SequenceGroup implements AnnotatedCollectionI return ignoreGapsInConsensus; } + public void setIgnoreBelowBackground(boolean state) + { + if (this.ignoreBelowBackground != state) + { + ignoreBelowBackground = state; + } + ignoreBelowBackground = state; + } + + public boolean getIgnoreBelowBackground() + { + return true; + } + /** * @param showSequenceLogo * indicates if a sequence logo is shown for consensus annotation @@ -1463,4 +1564,44 @@ public class SequenceGroup implements AnnotatedCollectionI { return (startRes <= apos && endRes >= apos) && sequences.contains(seq); } + + public boolean isShowInformationHistogram() + { + return showInformationHistogram; + } + + public void setShowInformationHistogram(boolean state) + { + if (showInformationHistogram != state && information != null) + { + this.showInformationHistogram = state; + // recalcConservation(); TODO don't know what to do here next + } + this.showInformationHistogram = state; + + } + + public boolean isShowHMMSequenceLogo() + { + // TODO Auto-generated method stub + return showHMMSequenceLogo; + } + + public void setshowHMMSequenceLogo(boolean state) + { + showHMMSequenceLogo = state; + + } + + public boolean isNormaliseHMMSequenceLogo() + { + // TODO Auto-generated method stub + return normaliseHMMSequenceLogo; + } + + public void setNormaliseHMMSequenceLogo(boolean state) + { + normaliseSequenceLogo = state; + } + } diff --git a/src/jalview/datamodel/SequenceI.java b/src/jalview/datamodel/SequenceI.java index 12ddf60..20362dd 100755 --- a/src/jalview/datamodel/SequenceI.java +++ b/src/jalview/datamodel/SequenceI.java @@ -42,6 +42,10 @@ public interface SequenceI extends ASequenceI */ public void setName(String name); + public HiddenMarkovModel getHMM(); + + public void setHMM(HiddenMarkovModel hmm); + /** * Get the display name */ @@ -478,6 +482,20 @@ public interface SequenceI extends ASequenceI */ public List getPrimaryDBRefs(); + public void updateHMMMapping(); + + boolean isHMMConsensusSequence(); + + void setIsHMMConsensusSequence(boolean isHMMConsensusSequence); + + boolean hasHMMAnnotation(); + + void setHasInfo(boolean status); + + int getPreviousPosition(); + + void setPreviousPosition(int previousPosition); + /** * * @return BitSet corresponding to index [0,length) where Comparison.isGap() diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index c78abdc..99124f8 100644 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -54,6 +54,7 @@ import jalview.datamodel.AlignmentOrder; import jalview.datamodel.AlignmentView; import jalview.datamodel.ColumnSelection; import jalview.datamodel.HiddenColumns; +import jalview.datamodel.HiddenMarkovModel; import jalview.datamodel.HiddenSequences; import jalview.datamodel.PDBEntry; import jalview.datamodel.SeqCigar; @@ -62,6 +63,8 @@ import jalview.datamodel.SequenceGroup; import jalview.datamodel.SequenceI; import jalview.gui.ColourMenuHelper.ColourChangeListener; import jalview.gui.ViewSelectionMenu.ViewSetProvider; +import jalview.hmmer.HMMAlignThread; +import jalview.hmmer.HMMBuildThread; import jalview.io.AlignmentProperties; import jalview.io.AnnotationFile; import jalview.io.BioJsHTMLOutput; @@ -123,14 +126,17 @@ import java.awt.print.PrinterJob; import java.beans.PropertyChangeEvent; import java.io.File; import java.io.FileWriter; +import java.io.IOException; import java.io.PrintWriter; import java.net.URL; import java.util.ArrayList; import java.util.Arrays; import java.util.Deque; import java.util.Enumeration; +import java.util.HashMap; import java.util.Hashtable; import java.util.List; +import java.util.Map; import java.util.Vector; import javax.swing.JCheckBoxMenuItem; @@ -139,6 +145,7 @@ import javax.swing.JInternalFrame; import javax.swing.JLayeredPane; import javax.swing.JMenu; import javax.swing.JMenuItem; +import javax.swing.JOptionPane; import javax.swing.JScrollPane; import javax.swing.SwingUtilities; @@ -152,10 +159,15 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, IProgressIndicator, AlignViewControllerGuiI, ColourChangeListener { + Map distribution = new HashMap<>(); // temporary + public static final int DEFAULT_WIDTH = 700; public static final int DEFAULT_HEIGHT = 500; + boolean autoAlignNewSequences; + + /* * The currently displayed panel (selected tabbed view if more than one) */ @@ -166,6 +178,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, ViewportRanges vpRanges; public AlignViewControllerI avc; + /* + * The selected HMM for this align frame + */ + HiddenMarkovModel selectedHMM = null; List alignPanels = new ArrayList<>(); @@ -179,6 +195,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, */ String fileName = null; + /** * Creates a new AlignFrame object with specific width and height. * @@ -376,6 +393,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } }); buildColourMenu(); + buildHMMERMenu(); if (Desktop.desktop != null) { @@ -483,6 +501,18 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } /** + * Adds all menu items to the HMMER menu + */ + private void buildHMMERMenu() + { + hmmerMenu.removeAll(); + + hmmerMenu.add(hmmAlign); + hmmerMenu.add(hmmBuild); + hmmerMenu.add(hmmSearch); + } + + /** * Change the filename and format for the alignment, and enable the 'reload' * button functionality. * @@ -763,6 +793,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, ap.av.updateConservation(ap); ap.av.updateConsensus(ap); ap.av.updateStrucConsensus(ap); + ap.av.updateInformation(ap); } } @@ -904,6 +935,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, showConsensusHistogram.setSelected(av.isShowConsensusHistogram()); showSequenceLogo.setSelected(av.isShowSequenceLogo()); normaliseSequenceLogo.setSelected(av.isNormaliseSequenceLogo()); + showInformationHistogram.setSelected(av.isShowInformationHistogram()); + showHMMSequenceLogo.setSelected(av.isShowHMMSequenceLogo()); + normaliseHMMSequenceLogo.setSelected(av.isNormaliseHMMSequenceLogo()); ColourMenuHelper.setColourSelected(colourMenu, av.getGlobalColourScheme()); @@ -995,6 +1029,44 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } @Override + public void hmmBuild_actionPerformed(ActionEvent e) + throws IOException, InterruptedException + { + new Thread(new HMMBuildThread(this)).start(); + alignPanel.repaint(); + + } + + @Override + public void hmmAlign_actionPerformed(ActionEvent e) + throws IOException, InterruptedException + { + new Thread(new HMMAlignThread(this, true)).start(); + alignPanel.repaint(); + } + + @Override + public void changeHMMERLocation_actionPerformed(ActionEvent e) + { + String location = JOptionPane.showInputDialog( + MessageManager.getString("label.enter_location")); + Cache.setProperty(Preferences.HMMER_PATH, location); + } + + @Override + public void autoAlignSeqs_actionPerformed(boolean autoAlignSeqs) + { + autoAlignNewSequences = autoAlignSeqs; + alignPanel.repaint(); + } + + @Override + public void hmmSearch_actionPerformed(ActionEvent e) + { + alignPanel.repaint(); + } + + @Override public void reload_actionPerformed(ActionEvent e) { if (fileName != null) @@ -1403,6 +1475,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, @Override public void associatedData_actionPerformed(ActionEvent e) + throws IOException, InterruptedException { // Pick the tree file JalviewFileChooser chooser = new JalviewFileChooser( @@ -1868,11 +1941,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, if (viewport.hasHiddenColumns()) { hiddenColumns = new ArrayList<>(); + int hiddenOffset = viewport.getSelectionGroup().getStartRes(); int hiddenCutoff = viewport.getSelectionGroup().getEndRes(); ArrayList hiddenRegions = viewport.getAlignment() .getHiddenColumns().getHiddenColumnsCopy(); for (int[] region : hiddenRegions) + { if (region[0] >= hiddenOffset && region[1] <= hiddenCutoff) { @@ -1895,9 +1970,12 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * * @param e * DOCUMENT ME! + * @throws InterruptedException + * @throws IOException */ @Override protected void pasteNew_actionPerformed(ActionEvent e) + throws IOException, InterruptedException { paste(true); } @@ -1907,9 +1985,12 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * * @param e * DOCUMENT ME! + * @throws InterruptedException + * @throws IOException */ @Override protected void pasteThis_actionPerformed(ActionEvent e) + throws IOException, InterruptedException { paste(false); } @@ -1919,8 +2000,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * * @param newAlignment * true to paste to a new alignment, otherwise add to this. + * @throws InterruptedException + * @throws IOException */ - void paste(boolean newAlignment) + void paste(boolean newAlignment) throws IOException, InterruptedException { boolean externalPaste = true; try @@ -2251,7 +2334,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, System.out.println("Exception whilst pasting: " + ex); // could be anything being pasted in here } - } @Override @@ -4540,6 +4622,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * * @param file * either a filename or a URL string. + * @throws InterruptedException + * @throws IOException */ public void loadJalviewDataFile(String file, DataSourceType sourceType, FileFormatI format, SequenceI assocSeq) @@ -4650,7 +4734,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } if (isAnnotation) { - alignPanel.adjustAnnotationHeight(); viewport.updateSequenceIdColours(); buildSortByAnnotationScoresMenu(); @@ -5249,6 +5332,30 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } @Override + protected void showInformationHistogram_actionPerformed(ActionEvent e) + { + viewport.setShowInformationHistogram( + showInformationHistogram.getState()); + alignPanel.updateAnnotation(applyAutoAnnotationSettings.getState()); + } + + @Override + protected void showHMMSequenceLogo_actionPerformed(ActionEvent e) + { + viewport.setShowHMMSequenceLogo(showHMMSequenceLogo.getState()); + alignPanel.updateAnnotation(applyAutoAnnotationSettings.getState()); + } + + @Override + protected void normaliseHMMSequenceLogo_actionPerformed(ActionEvent e) + { + showHMMSequenceLogo.setState(true); + viewport.setShowHMMSequenceLogo(true); + viewport.setNormaliseHMMSequenceLogo(normaliseSequenceLogo.getState()); + alignPanel.updateAnnotation(applyAutoAnnotationSettings.getState()); + } + + @Override protected void applyAutoAnnotationSettings_actionPerformed(ActionEvent e) { alignPanel.updateAnnotation(applyAutoAnnotationSettings.getState()); @@ -5573,6 +5680,57 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, new CalculationChooser(AlignFrame.this); } } + + /** + * Sets the status of the HMMER menu + * + * @param status + */ + public void updateHMMERStatus(boolean status) + { + hmmerMenu.setEnabled(status); + } + + /** + * Returns the selected hidden Markov model. + * + * @return + */ + public HiddenMarkovModel getSelectedHMM() + { + return selectedHMM; + } + + /** + * Sets the selected hidden Markov model + * + * @param selectedHMM + */ + public void setSelectedHMM(HiddenMarkovModel selectedHMM) + { + this.selectedHMM = selectedHMM; + hmmAlign.setText(MessageManager.getString("label.hmmalign") + " to " + + selectedHMM.getName() + "_HMM"); + hmmSearch.setText(MessageManager.getString("label.hmmsearch") + " with " + + selectedHMM.getName() + "_HMM"); + } + + @Override + public void hmmerMenu_actionPerformed(ActionEvent e) + { + SequenceGroup grp = getViewport().getSelectionGroup(); + if (grp != null) + { + hmmBuild.setText(MessageManager.getString("label.hmmbuild") + " from " + + grp.getName()); + } + else + { + hmmBuild.setText(MessageManager.getString("label.hmmbuild") + + " from Alignment"); + } + } + } class PrintThread extends Thread diff --git a/src/jalview/gui/AlignViewport.java b/src/jalview/gui/AlignViewport.java index c22a37d..70eae9d 100644 --- a/src/jalview/gui/AlignViewport.java +++ b/src/jalview/gui/AlignViewport.java @@ -284,6 +284,9 @@ public class AlignViewport extends AlignmentViewport showOccupancy = Cache.getDefault(Preferences.SHOW_OCCUPANCY, true); } initAutoAnnotation(); + initInformation(); + + String colourProperty = alignment.isNucleotide() ? Preferences.DEFAULT_COLOUR_NUC : Preferences.DEFAULT_COLOUR_PROT; @@ -614,10 +617,10 @@ public class AlignViewport extends AlignmentViewport */ public SequenceI[][] collateForPDB(PDBEntry[] pdbEntries) { - List seqvectors = new ArrayList(); + List seqvectors = new ArrayList<>(); for (PDBEntry pdb : pdbEntries) { - List choosenSeqs = new ArrayList(); + List choosenSeqs = new ArrayList<>(); for (SequenceI sq : alignment.getSequences()) { Vector pdbRefEntries = sq.getDatasetSequence() @@ -664,11 +667,17 @@ public class AlignViewport extends AlignmentViewport return normaliseSequenceLogo; } + public void setNormaliseSequenceLogo(boolean state) { normaliseSequenceLogo = state; } + public void setNormaliseHMMSequenceLogo(boolean state) + { + normaliseHMMSequenceLogo = state; + } + /** * * @return true if alignment characters should be displayed @@ -679,7 +688,7 @@ public class AlignViewport extends AlignmentViewport return validCharWidth; } - private Hashtable calcIdParams = new Hashtable(); + private Hashtable calcIdParams = new Hashtable<>(); public AutoCalcSetting getCalcIdSettingsFor(String calcId) { @@ -1111,4 +1120,12 @@ public class AlignViewport extends AlignmentViewport fr.setTransparency(featureSettings.getTransparency()); } + @Override + public boolean isNormaliseHMMSequenceLogo() + { + return normaliseHMMSequenceLogo; + } + + + } diff --git a/src/jalview/gui/AnnotationLabels.java b/src/jalview/gui/AnnotationLabels.java index d07cae2..f494a01 100755 --- a/src/jalview/gui/AnnotationLabels.java +++ b/src/jalview/gui/AnnotationLabels.java @@ -73,6 +73,7 @@ public class AnnotationLabels extends JPanel private static final Pattern LEFT_ANGLE_BRACKET_PATTERN = Pattern .compile("<"); + String TOGGLE_LABELSCALE = MessageManager .getString("label.scale_label_to_column"); @@ -421,7 +422,8 @@ public class AnnotationLabels extends JPanel if (selectedRow < aa.length) { final String label = aa[selectedRow].label; - if (!aa[selectedRow].autoCalculated) + if (!(aa[selectedRow].autoCalculated) + && !(label.indexOf("_HMM") > -1)) { if (aa[selectedRow].graph == AlignmentAnnotation.NO_GRAPH) { @@ -436,8 +438,11 @@ public class AnnotationLabels extends JPanel } else if (label.indexOf("Consensus") > -1) { + + pop.addSeparator(); // av and sequencegroup need to implement same interface for + final JCheckBoxMenuItem cbmi = new JCheckBoxMenuItem( MessageManager.getString("label.ignore_gaps_consensus"), (aa[selectedRow].groupRef != null) @@ -548,7 +553,6 @@ public class AnnotationLabels extends JPanel // can be // updated. av.setShowConsensusHistogram(chist.getState()); - ap.alignFrame.setMenusForViewport(); ap.repaint(); // ap.annotationPanel.paint(ap.annotationPanel.getGraphics()); } @@ -569,7 +573,6 @@ public class AnnotationLabels extends JPanel // can be // updated. av.setShowSequenceLogo(cprof.getState()); - ap.alignFrame.setMenusForViewport(); ap.repaint(); // ap.annotationPanel.paint(ap.annotationPanel.getGraphics()); } @@ -591,7 +594,6 @@ public class AnnotationLabels extends JPanel // updated. av.setShowSequenceLogo(true); av.setNormaliseSequenceLogo(cprofnorm.getState()); - ap.alignFrame.setMenusForViewport(); ap.repaint(); // ap.annotationPanel.paint(ap.annotationPanel.getGraphics()); } @@ -602,6 +604,174 @@ public class AnnotationLabels extends JPanel consclipbrd.addActionListener(this); pop.add(consclipbrd); } + else if (label.indexOf("_HMM") > -1) // TODO create labels + // in message resource + // for these + { + pop.addSeparator(); + final AlignmentAnnotation aaa = aa[selectedRow]; + + final JCheckBoxMenuItem cbmi = new JCheckBoxMenuItem( + MessageManager.getString( + "label.ignore_below_background_frequency"), + (aa[selectedRow].groupRef != null) + ? aa[selectedRow].groupRef + .getIgnoreBelowBackground() + : ap.av.isIgnoreBelowBackground()); + + cbmi.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + if (aaa.groupRef != null) + { + // TODO: pass on reference to ap so the view can be updated. + aaa.groupRef.setIgnoreBelowBackground(cbmi.getState()); + ap.getAnnotationPanel() + .paint(ap.getAnnotationPanel().getGraphics()); + } + else + { + ap.av.setIgnoreBelowBackground(cbmi.getState(), ap); + } + ap.alignmentChanged(); + } + }); + pop.add(cbmi); + if (aaa.groupRef != null) + { + final JCheckBoxMenuItem chist = new JCheckBoxMenuItem( + MessageManager.getString("label.show_group_histogram"), + aa[selectedRow].groupRef.isShowInformationHistogram()); + chist.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + // TODO: pass on reference + // to ap + // so the + // view + // can be + // updated. + aaa.groupRef.setShowInformationHistogram(chist.getState()); + ap.repaint(); + // ap.annotationPanel.paint(ap.annotationPanel.getGraphics()); + } + }); + pop.add(chist); + final JCheckBoxMenuItem cprofl = new JCheckBoxMenuItem( + MessageManager.getString("label.show_group_logo"), + aa[selectedRow].groupRef.isShowHMMSequenceLogo()); + cprofl.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + // TODO: pass on reference + // to ap + // so the + // view + // can be + // updated. + aaa.groupRef.setshowHMMSequenceLogo(cprofl.getState()); + ap.repaint(); + // ap.annotationPanel.paint(ap.annotationPanel.getGraphics()); + } + }); + pop.add(cprofl); + final JCheckBoxMenuItem cproflnorm = new JCheckBoxMenuItem( + MessageManager.getString("label.normalise_group_logo"), + aa[selectedRow].groupRef.isNormaliseHMMSequenceLogo()); + cproflnorm.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + + // TODO: pass on reference + // to ap + // so the + // view + // can be + // updated. + aaa.groupRef + .setNormaliseHMMSequenceLogo(cproflnorm.getState()); + // automatically enable logo display if we're clicked + aaa.groupRef.setshowHMMSequenceLogo(true); + ap.repaint(); + // ap.annotationPanel.paint(ap.annotationPanel.getGraphics()); + } + }); + pop.add(cproflnorm); + } + else + { + final JCheckBoxMenuItem chist = new JCheckBoxMenuItem( + MessageManager.getString("label.show_histogram"), + av.isShowInformationHistogram()); + chist.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + // TODO: pass on reference + // to ap + // so the + // view + // can be + // updated. + av.setShowInformationHistogram(chist.getState()); + ap.repaint(); + // ap.annotationPanel.paint(ap.annotationPanel.getGraphics()); + } + }); + pop.add(chist); + final JCheckBoxMenuItem cprof = new JCheckBoxMenuItem( + MessageManager.getString("label.show_logo"), + av.isShowHMMSequenceLogo()); + cprof.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + // TODO: pass on reference + // to ap + // so the + // view + // can be + // updated. + av.updateInformation(ap); + av.setShowHMMSequenceLogo(cprof.getState()); + ap.repaint(); + // ap.annotationPanel.paint(ap.annotationPanel.getGraphics()); + } + }); + pop.add(cprof); + final JCheckBoxMenuItem cprofnorm = new JCheckBoxMenuItem( + MessageManager.getString("label.normalise_logo"), + av.isNormaliseHMMSequenceLogo()); + cprofnorm.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + // TODO: pass on reference + // to ap + // so the + // view + // can be + // updated. + av.setShowHMMSequenceLogo(true); + av.setNormaliseHMMSequenceLogo(cprofnorm.getState()); + ap.repaint(); + // ap.annotationPanel.paint(ap.annotationPanel.getGraphics()); + } + }); + pop.add(cprofnorm); + } + } } pop.show(this, evt.getX(), evt.getY()); } @@ -966,8 +1136,10 @@ public class AnnotationLabels extends JPanel if (av.hasHiddenColumns()) { + hiddenColumns = av.getAlignment().getHiddenColumns() .getHiddenColumnsCopy(); + } Desktop.jalviewClipboard = new Object[] { seqs, ds, // what is the dataset diff --git a/src/jalview/gui/PopupMenu.java b/src/jalview/gui/PopupMenu.java index 3e2eba9..6ad1dd2 100644 --- a/src/jalview/gui/PopupMenu.java +++ b/src/jalview/gui/PopupMenu.java @@ -33,12 +33,15 @@ import jalview.datamodel.AlignmentI; import jalview.datamodel.Annotation; import jalview.datamodel.DBRefEntry; import jalview.datamodel.HiddenColumns; +import jalview.datamodel.HiddenMarkovModel; import jalview.datamodel.PDBEntry; import jalview.datamodel.Sequence; import jalview.datamodel.SequenceFeature; import jalview.datamodel.SequenceGroup; import jalview.datamodel.SequenceI; import jalview.gui.ColourMenuHelper.ColourChangeListener; +import jalview.hmmer.HMMAlignThread; +import jalview.hmmer.HMMBuildThread; import jalview.io.FileFormatI; import jalview.io.FileFormats; import jalview.io.FormatAdapter; @@ -158,6 +161,8 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener JMenuItem sequenceFeature = new JMenuItem(); + JMenuItem hmmBuildGroup = new JMenuItem(); + JMenuItem textColour = new JMenuItem(); JMenu jMenu1 = new JMenu(); @@ -227,8 +232,8 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener * currently selected sequence (if there is one): */ final List selectedSequence = (seq == null - ? Collections. emptyList() - : Arrays.asList(seq)); + ? Collections. emptyList() : Arrays.asList(seq)); + buildAnnotationTypesMenus(seqShowAnnotationsMenu, seqHideAnnotationsMenu, selectedSequence); configureReferenceAnnotationsMenu(seqAddReferenceAnnotations, @@ -353,6 +358,35 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener }); add(menuItem); + if (sequence.isHMMConsensusSequence()) + { + JMenuItem selectHMM = new JCheckBoxMenuItem(); + selectHMM.setText(MessageManager.getString("label.select_hmm")); + selectHMM.addActionListener(new ActionListener() + { + + @Override + public void actionPerformed(ActionEvent e) + { + selectHMM_actionPerformed(e); + } + }); + add(selectHMM); + + JMenuItem hmmAlign = new JCheckBoxMenuItem(); + hmmAlign.setText(MessageManager.getString("label.hmmalign")); + hmmAlign.addActionListener(new ActionListener() + { + + @Override + public void actionPerformed(ActionEvent e) + { + hmmAlign_actionPerformed(e); + } + }); + add(hmmAlign); + } + if (ap.av.getSelectionGroup() != null && ap.av.getSelectionGroup().getSize() > 1) { @@ -455,8 +489,8 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener buildGroupURLMenu(sg, groupLinks); } // Add a 'show all structures' for the current selection - Hashtable pdbe = new Hashtable(), - reppdb = new Hashtable(); + Hashtable pdbe = new Hashtable<>(), + reppdb = new Hashtable<>(); SequenceI sqass = null; for (SequenceI sq : ap.av.getSequenceSelection()) { @@ -523,7 +557,7 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener void addFeatureLinks(final SequenceI seq, List links) { JMenu linkMenu = new JMenu(MessageManager.getString("action.link")); - Map> linkset = new LinkedHashMap>(); + Map> linkset = new LinkedHashMap<>(); for (String link : links) { @@ -609,8 +643,8 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener * the insertion order, which is the order of the annotations on the * alignment. */ - Map>> shownTypes = new LinkedHashMap>>(); - Map>> hiddenTypes = new LinkedHashMap>>(); + Map>> shownTypes = new LinkedHashMap<>(); + Map>> hiddenTypes = new LinkedHashMap<>(); AlignmentAnnotationUtils.getShownHiddenTypes(shownTypes, hiddenTypes, AlignmentAnnotationUtils.asList(annotations), forSequences); @@ -716,7 +750,7 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener SequenceI[] seqs = ap.av.getSelectionAsNewSequence(); String[][] idandseqs = GroupUrlLink.formStrings(seqs); - Hashtable commonDbrefs = new Hashtable(); + Hashtable commonDbrefs = new Hashtable<>(); for (int sq = 0; sq < seqs.length; sq++) { @@ -1134,6 +1168,15 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener sequenceFeature_actionPerformed(); } }); + hmmBuildGroup.setText(MessageManager.getString("label.group_hmmbuild")); + hmmBuildGroup.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + hmmBuildGroup_actionPerformed(); + } + }); jMenu1.setText(MessageManager.getString("label.group")); pdbStructureDialog.setText( MessageManager.getString("label.show_pdbstruct_dialog")); @@ -1243,6 +1286,26 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener jMenu1.add(displayNonconserved); } + protected void hmmBuildGroup_actionPerformed() + { + new Thread(new HMMBuildThread(ap.alignFrame)).start(); + ap.repaint(); + + } + + protected void selectHMM_actionPerformed(ActionEvent e) + { + HiddenMarkovModel hmm = ap.av.getSequenceSelection()[0].getHMM(); + ap.alignFrame.setSelectedHMM(hmm); + } + + protected void hmmAlign_actionPerformed(ActionEvent e) + { + ap.alignFrame.setSelectedHMM(this.sequence.getHMM()); + new Thread(new HMMAlignThread(ap.alignFrame, true)).start(); + ap.repaint(); + } + /** * Constructs the entries for the colour menu */ @@ -1377,8 +1440,8 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener * Temporary store to hold distinct calcId / type pairs for the tooltip. * Using TreeMap means calcIds are shown in alphabetical order. */ - SortedMap tipEntries = new TreeMap(); - final Map> candidates = new LinkedHashMap>(); + SortedMap tipEntries = new TreeMap<>(); + final Map> candidates = new LinkedHashMap<>(); AlignmentI al = this.ap.av.getAlignment(); AlignmentUtils.findAddableReferenceAnnotations(forSequences, tipEntries, candidates, al); @@ -1929,8 +1992,8 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener return; } - List seqs = new ArrayList(); - List features = new ArrayList(); + List seqs = new ArrayList<>(); + List features = new ArrayList<>(); /* * assemble dataset sequences, and template new sequence features, diff --git a/src/jalview/gui/Preferences.java b/src/jalview/gui/Preferences.java index c3c9239..7af3abc 100755 --- a/src/jalview/gui/Preferences.java +++ b/src/jalview/gui/Preferences.java @@ -22,8 +22,14 @@ package jalview.gui; import jalview.analysis.AnnotationSorter.SequenceAnnotationOrder; import jalview.bin.Cache; +import jalview.datamodel.Alignment; +import jalview.datamodel.AlignmentI; +import jalview.datamodel.HiddenMarkovModel; +import jalview.datamodel.Sequence; +import jalview.datamodel.SequenceI; import jalview.gui.Help.HelpId; import jalview.gui.StructureViewer.ViewerType; +import jalview.hmmer.HMMBuildThread; import jalview.io.FileFormatI; import jalview.io.JalviewFileChooser; import jalview.io.JalviewFileView; @@ -52,6 +58,7 @@ import java.awt.event.MouseEvent; import java.io.File; import java.util.ArrayList; import java.util.List; +import java.util.Scanner; import javax.help.HelpSetException; import javax.swing.JColorChooser; @@ -102,6 +109,8 @@ public class Preferences extends GPreferences public static final String STRUCTURE_DISPLAY = "STRUCTURE_DISPLAY"; public static final String CHIMERA_PATH = "CHIMERA_PATH"; + + public static final String HMMER_PATH = "HMMER_PATH"; public static final String SORT_ANNOTATIONS = "SORT_ANNOTATIONS"; @@ -155,7 +164,7 @@ public class Preferences extends GPreferences * .properties file as '|' separated strings */ - groupURLLinks = new ArrayList(); + groupURLLinks = new ArrayList<>(); } JInternalFrame frame; @@ -199,6 +208,34 @@ public class Preferences extends GPreferences frame.setMinimumSize(new Dimension(width, height)); /* + * Set HMMER tab defaults + */ + trimTermini.setSelected(Cache.getDefault("TRIM_TERMINI", false)); + isHMMERInstalled + .setSelected(Cache.getDefault("HMMER_INSTALLED", false)); + if (Cache.getDefault("USE_UNIPROT", false)) + { + uniprot.setSelected(true); + } + else + { + alignment.setSelected(true); + } + numberOfSequencesToKeepField + .setText(Cache.getProperty("SEQUENCES_TO_KEEP")); + installationLocation.setEnabled(isHMMERInstalled.isSelected()); + hmmerPath.setEnabled(isHMMERInstalled.isSelected()); + hmmerPath.setText(Cache.getProperty(HMMER_PATH)); + hmmerPath.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + validateHMMERPath(); + } + }); + + /* * Set Visual tab defaults */ seqLimit.setSelected(Cache.getDefault("SHOW_JVSUFFIX", true)); @@ -221,6 +258,9 @@ public class Preferences extends GPreferences Cache.getDefault("SHOW_CONSENSUS_HISTOGRAM", true)); showConsensLogo .setSelected(Cache.getDefault("SHOW_CONSENSUS_LOGO", false)); + showInformationHistogram.setSelected( + Cache.getDefault("SHOW_INFORMATION_HISTOGRAM", true)); + showHMMLogo.setSelected(Cache.getDefault("SHOW_HMM_LOGO", false)); showNpTooltip .setSelected(Cache.getDefault("SHOW_NPFEATS_TOOLTIP", true)); showDbRefTooltip @@ -585,6 +625,10 @@ public class Preferences extends GPreferences Boolean.toString(showConsensHistogram.isSelected())); Cache.applicationProperties.setProperty("SHOW_CONSENSUS_LOGO", Boolean.toString(showConsensLogo.isSelected())); + Cache.applicationProperties.setProperty("SHOW_INFORMATION_HISTOGRAM", + Boolean.toString(showConsensHistogram.isSelected())); + Cache.applicationProperties.setProperty("SHOW_HMM_LOGO", + Boolean.toString(showHMMLogo.isSelected())); Cache.applicationProperties.setProperty("ANTI_ALIAS", Boolean.toString(smoothFont.isSelected())); Cache.applicationProperties.setProperty(SCALE_PROTEIN_TO_CDNA, @@ -631,6 +675,44 @@ public class Preferences extends GPreferences maxColour.getBackground()); /* + * Save HMMER settings + */ + Cache.applicationProperties.setProperty("TRIM_TERMINI", + Boolean.toString(trimTermini.isSelected())); + Cache.applicationProperties.setProperty("USE_UNIPROT", + Boolean.toString(uniprot.isSelected())); + Cache.applicationProperties.setProperty("SEQUENCES_TO_KEEP", + numberOfSequencesToKeepField.getText()); + Cache.applicationProperties.setProperty(HMMER_PATH, + hmmerPath.getText()); + boolean hmmerInstalled = isHMMERInstalled.isSelected(); + Cache.applicationProperties.setProperty("HMMER_INSTALLED", + Boolean.toString(hmmerInstalled)); + boolean hmmerFunctioning = validateHMMERPath(false); + Cache.applicationProperties.setProperty("HMMER_FUNCTIONING", + Boolean.toString(hmmerFunctioning)); + AlignFrame[] frames = Desktop.getAlignFrames(); + boolean hmmerStatus = hmmerFunctioning && hmmerInstalled ? true : false; + for (AlignFrame frame : frames) + { + frame.updateHMMERStatus(hmmerStatus); + } + + + trimTermini.setSelected(Cache.getDefault("TRIM_TERMINI", false)); + if (Cache.getDefault("USE_UNIPROT", false)) + { + uniprot.setSelected(true); + } + else + { + alignment.setSelected(true); + } + numberOfSequencesToKeepField + .setText(Cache.getProperty("SEQUENCES_TO_KEEP")); + hmmerPath.setText(Cache.getProperty(HMMER_PATH)); + + /* * Save Structure settings */ Cache.applicationProperties.setProperty(ADD_TEMPFACT_ANN, @@ -787,6 +869,14 @@ public class Preferences extends GPreferences structureTab.requestFocusInWindow(); return false; } + if (isHMMERInstalled.isSelected()) + { + if (!validateHMMER()) + { + hmmerTab.requestFocusInWindow(); + return false; + } + } return true; } @@ -797,6 +887,13 @@ public class Preferences extends GPreferences } + @Override + protected boolean validateHMMER() + { + return validateHMMERPath(); + + } + /** * DOCUMENT ME! */ @@ -863,6 +960,8 @@ public class Preferences extends GPreferences && (identity.isSelected() || showGroupConsensus.isSelected())); showConsensLogo.setEnabled(annotations.isSelected() && (identity.isSelected() || showGroupConsensus.isSelected())); + showInformationHistogram.setEnabled(annotations.isSelected()); + showHMMLogo.setEnabled(annotations.isSelected()); } @Override @@ -1087,6 +1186,171 @@ public class Preferences extends GPreferences } return true; } + + /** + * Returns true if hmmer path contains the necessary valid executables, else + * show an error dialog (if showing dialog). + */ + private boolean validateHMMERPath(boolean showDialog) + { + int missing = 0; + String message = ""; + String folder = hmmerPath.getText().trim(); + if (folder.length() > 0) + { + File f = new File(folder); + if (!f.exists()) + { + if (showDialog) + { + JvOptionPane.showInternalMessageDialog(Desktop.desktop, + MessageManager.getString("label.folder_not_exists"), + MessageManager.getString("label.invalid_folder"), + JvOptionPane.ERROR_MESSAGE); + } + return false; + } + AlignmentI alignment = new Alignment( + new SequenceI[] + { new Sequence("test", "WLWL", 0, 3) }); + if (canExecute(folder + "/hmmbuild")) + { + validateHMMBuild(alignment); + } + else + { + message += MessageManager.getString("label.hmmbuild_not_found") + + "\n"; + missing++; + } + + + if (canExecute(folder + "/hmmalign")) + { + + } + else + { + message += MessageManager.getString("label.hmmalign_not_found") + + "\n"; + missing++; + } + + + if (canExecute(folder + "/hmmsearch")) + { + + } + else + { + message += MessageManager.getString("label.hmmsearch_not_found") + + "\n"; + missing++; + } + } + + if (missing > 0) + { + if (missing < 3) + { + if (showDialog) + { + JvOptionPane.showInternalMessageDialog(Desktop.desktop, message, + MessageManager.getString("label.invalid_folder"), + JvOptionPane.ERROR_MESSAGE); + } + return false; + } + else + { + if (showDialog) + { + JvOptionPane.showInternalMessageDialog(Desktop.desktop, + MessageManager.getString("label.no_binaries"), + MessageManager.getString("label.invalid_folder"), + JvOptionPane.ERROR_MESSAGE); + } + + return false; + } + } + + return true; + } + + /** + * Checks if a file can be executed + * + * @param path + * the path to the file + * @return + */ + public boolean canExecute(String path) + { + File file = new File(path); + if (!file.canExecute()) + { + file = new File(path + ".exe"); + { + if (!file.canExecute()) + { + return false; + } + } + } + return true; + } + + /** + * Runs hmmbuild to check if it is working. While doing this it parses the + * version of HMMER. + * + * @param frame + * @return + */ + public boolean validateHMMBuild(AlignmentI alignment) + { + HMMBuildThread hmmbuild = new HMMBuildThread(alignment); + hmmbuild.hmmbuildWaitTillComplete(); + SequenceI hmmSeq = alignment.getSequenceAt(1); + HiddenMarkovModel hmm; + if (hmmSeq.isHMMConsensusSequence() && hmmSeq.getHMM() != null) + { + hmm = hmmSeq.getHMM(); + + if (hmm.getNumberOfSymbols() < 1) + { + return false; + } + } + else + { + return false; + } + + String header = hmm.getFileHeader(); + if (header == null) + { + return false; + } + else + { + Scanner scanner = new Scanner(header); + scanner.next(); + String string = scanner.next(); + String version = string.substring(1); + Cache.setProperty("HMMER_VERSION", version); + scanner.close(); + + } + return true; + } + + + private boolean validateHMMERPath() + { + return validateHMMERPath(true); + } /** * If Chimera is selected, check it can be found on default or user-specified diff --git a/src/jalview/hmmer/HMMAlignThread.java b/src/jalview/hmmer/HMMAlignThread.java new file mode 100644 index 0000000..1c2450c --- /dev/null +++ b/src/jalview/hmmer/HMMAlignThread.java @@ -0,0 +1,434 @@ +package jalview.hmmer; + +import jalview.bin.Cache; +import jalview.datamodel.Alignment; +import jalview.datamodel.AlignmentI; +import jalview.datamodel.AlignmentOrder; +import jalview.datamodel.AlignmentView; +import jalview.datamodel.HiddenColumns; +import jalview.datamodel.HiddenMarkovModel; +import jalview.datamodel.SequenceI; +import jalview.gui.AlignFrame; +import jalview.gui.Desktop; +import jalview.gui.JvOptionPane; +import jalview.gui.Preferences; +import jalview.gui.SplitFrame; +import jalview.io.DataSourceType; +import jalview.io.StockholmFile; +import jalview.util.MessageManager; +import jalview.viewmodel.seqfeatures.FeatureRendererSettings; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import javax.swing.JInternalFrame; +import javax.swing.JOptionPane; + +public class HMMAlignThread implements Runnable +{ + + /** + * feature settings from view that job was associated with + */ + protected FeatureRendererSettings featureSettings = null; + + /** + * Object containing frequently used commands. + */ + HMMERCommands cmds = new HMMERCommands(); + + AlignFrame af; + + AlignmentI alignment; + + AlignmentI dataset; + + List orders; + + AlignmentView msa; + + HiddenMarkovModel hmm; + + boolean newFrame; + + long barID; + + Map hmmSeqs; + + File hmmTemp = null; + + File outTemp = null; + + File inputTemp = null; + + List allOrders; + + SequenceI[][] allResults; + + /** + * Constructor for the HMMAlignThread. If create new frame is set to true, a + * new frame will be created. + * + * @param af + * @param createNewFrame + */ + public HMMAlignThread(AlignFrame af, boolean createNewFrame) + { + this.af = af; + alignment = af.getViewport().getAlignment(); + if (alignment.getDataset() != null) + { + dataset = alignment.getDataset(); + } + newFrame = createNewFrame; + featureSettings = af.getFeatureRenderer().getSettings(); + } + + /** + * Runs the HMMAlignThread: the data on the alignment or group is exported, + * then the command is executed in the command line and then the data is + * imported and displayed in a new frame (if true). The command is executed + * for each segemtn of the alignment. + */ + @Override + public void run() + { + if (af.getSelectedHMM() == null) + { + JOptionPane.showMessageDialog(af, + MessageManager.getString("warn.no_selected_hmm")); + return; + } + else + { + hmm = af.getSelectedHMM(); + } + barID = System.currentTimeMillis(); + af.setProgressBar(MessageManager.getString("status.running_hmmalign"), + barID); + cmds.HMMERFOLDER = Cache.getProperty(Preferences.HMMER_PATH); + + // if (!alignment.isAligned()) + // { + // alignment.padGaps(); + // } + prepareAlignment(); + SequenceI[][] subAlignments = msa.getVisibleContigs('-'); + allOrders = new ArrayList<>(); + allResults = new SequenceI[subAlignments.length][]; + int job = 0; + for (SequenceI[] seqs : subAlignments) + { + cmds.uniquifySequences(seqs); + try + { + createTemporaryFiles(); + } catch (IOException e2) + { + e2.printStackTrace(); + } + try + { + cmds.exportData(seqs, outTemp.getAbsoluteFile(), hmm, + hmmTemp.getAbsoluteFile()); + } catch (IOException e1) + { + e1.printStackTrace(); + } + try + { + boolean ran = runCommand(); + if (!ran) + { + JvOptionPane.showInternalMessageDialog(af, + MessageManager.getString("warn.hmmalign_failed")); + return; + } + } catch (IOException | InterruptedException e) + { + e.printStackTrace(); + } + try + { + importData(job); + } catch (IOException | InterruptedException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + job++; + } + + displayResults(newFrame); + + af.setProgressBar(MessageManager.getString("status.running_hmmalign"), + barID); + + } + + /** + * Creates temporary files for exporting and importing the data. + * + * @throws IOException + */ + private void createTemporaryFiles() throws IOException + { + hmmTemp = File.createTempFile("hmm", ".hmm"); + hmmTemp.deleteOnExit(); + outTemp = File.createTempFile("output", ".sto"); + outTemp.deleteOnExit(); + inputTemp = File.createTempFile("input", ".sto"); + inputTemp.deleteOnExit(); + } + + /** + * Executes the hmmalign command in the command line. + * + * @return + * @throws IOException + * @throws InterruptedException + */ + private boolean runCommand() throws IOException, InterruptedException + { + File file = new File(cmds.HMMERFOLDER + "/hmmalign"); + if (!file.canExecute()) + { + file = new File(cmds.HMMERFOLDER + "/hmmalign.exe"); + { + if (!file.canExecute()) + { + return false; + } + } + } + String command = cmds.HMMERFOLDER + cmds.HMMALIGN; + String version = Cache.getProperty("HMMER_VERSION"); + if (!"3.1b2".equals(version)) + { + command += cmds.ALLCOL; + } + boolean trim = true; + String bool = Cache.getProperty("TRIM_TERMINI"); + if ("false".equals(bool)) + { + trim = false; + } + if (trim) + { + command += cmds.TRIM; + } + command += " -o " + inputTemp.getAbsolutePath() + cmds.SPACE + + hmmTemp.getAbsolutePath() + cmds.SPACE + + outTemp.getAbsolutePath(); + return cmds.runCommand(command); + } + + /** + * Imports the data from the temporary file to which the output of hmmalign is + * directed. + * + * @param index + * The index of the 'job' (or region of an alignment). + * @throws IOException + * @throws InterruptedException + */ + private void importData(int index) + throws IOException, InterruptedException + { + StockholmFile file = new StockholmFile(inputTemp.getAbsolutePath(), + DataSourceType.FILE); + SequenceI[] result = file.getSeqsAsArray(); + AlignmentOrder msaorder = new AlignmentOrder(result); + jalview.analysis.AlignmentSorter.recoverOrder(result); + jalview.analysis.SeqsetUtils.deuniquify(cmds.hash, result); + allOrders.add(msaorder); + allResults[index] = result; + hmmTemp.delete(); + outTemp.delete(); + inputTemp.delete(); + } + + /** + * Gathers the sequences in preparation for the alignment. + */ + private void prepareAlignment() + { + // hmmSeqs = alignment.getHMMConsensusSequences(true); + msa = af.gatherSequencesForAlignment(); + } + + /** + * Displays the results of all 'jobs'. + * + * @param newFrame + */ + private void displayResults(boolean newFrame) + { + AlignmentOrder[] arrOrders = allOrders + .toArray(new AlignmentOrder[allOrders.size()]); + Object[] newview = msa.getUpdatedView(allResults, + arrOrders, '-'); + SequenceI[] alignment = (SequenceI[]) newview[0]; + HiddenColumns hidden = (HiddenColumns) newview[1]; + Alignment al = new Alignment(alignment); + al.setProperty("Alignment Program", "hmmalign"); + if (dataset != null) + { + al.setDataset(dataset); + } + + if (newFrame) + { + displayInNewFrame(al, allOrders, hidden); + } + } + + /** + * Displays the results in a new frame. + * + * @param al + * The alignment containing the results. + * @param alorders + * The order of the sequences in the alignment on which the jobs were + * run. + * @param hidden + * Hidden columns in the previous alignment. + */ + private void displayInNewFrame(AlignmentI al, + List alorders, HiddenColumns hidden) + { + AlignFrame af = new AlignFrame(al, hidden, AlignFrame.DEFAULT_WIDTH, + AlignFrame.DEFAULT_HEIGHT); + + // initialise with same renderer settings as in parent alignframe. + af.getFeatureRenderer().transferSettings(this.featureSettings); + + if (allOrders.size() > 0) + { + addSortByMenuItems(af, allOrders); + } + + // TODO: refactor retrieve and show as new splitFrame as Desktop method + + /* + * If alignment was requested from one half of a SplitFrame, show in a + * SplitFrame with the other pane similarly aligned. + */ + AlignFrame requestedBy = this.af; + if (requestedBy != null && requestedBy.getSplitViewContainer() != null + && requestedBy.getSplitViewContainer() + .getComplement(requestedBy) != null) + { + AlignmentI complement = requestedBy.getSplitViewContainer() + .getComplement(requestedBy); + String complementTitle = requestedBy.getSplitViewContainer() + .getComplementTitle(requestedBy); + // becomes null if the alignment window was closed before the alignment + // job finished. + AlignmentI copyComplement = new Alignment(complement); + // todo should this be done by copy constructor? + copyComplement.setGapCharacter(complement.getGapCharacter()); + // share the same dataset (and the mappings it holds) + copyComplement.setDataset(complement.getDataset()); + copyComplement.alignAs(al); + if (copyComplement.getHeight() > 0) + { + af.setTitle(this.af.getTitle()); + AlignFrame af2 = new AlignFrame(copyComplement, + AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT); + af2.setTitle(complementTitle); + String linkedTitle = MessageManager + .getString("label.linked_view_title"); + JInternalFrame splitFrame = new SplitFrame( + al.isNucleotide() ? af : af2, al.isNucleotide() ? af2 : af); + Desktop.addInternalFrame(splitFrame, linkedTitle, -1, -1); + return; + } + } + + /* + * Not from SplitFrame, or failed to created a complementary alignment + */ + Desktop.addInternalFrame(af, af.getTitle(), AlignFrame.DEFAULT_WIDTH, + AlignFrame.DEFAULT_HEIGHT); + } + + /** + * Add sort order options to the AlignFrame menus. + * + * @param af + * @param alorders + */ + protected void addSortByMenuItems(AlignFrame af, + List alorders) + { + // update orders + if (alorders.size() == 1) + { + af.addSortByOrderMenuItem("hmmalign" + " Ordering", alorders.get(0)); + } + else + { + // construct a non-redundant ordering set + List names = new ArrayList<>(); + for (int i = 0, l = alorders.size(); i < l; i++) + { + String orderName = " Region " + i; + int j = i + 1; + + while (j < l) + { + if (alorders.get(i).equals(alorders.get(j))) + { + alorders.remove(j); + l--; + orderName += "," + j; + } + else + { + j++; + } + } + + if (i == 0 && j == 1) + { + names.add(""); + } + else + { + names.add(orderName); + } + } + for (int i = 0, l = alorders.size(); i < l; i++) + { + af.addSortByOrderMenuItem("hmmalign" + (names.get(i)) + " Ordering", + alorders.get(i)); + } + } + } + + /** + * Runs hmmalign, and waits for the results to be imported before continuing + */ + public void hmmalignWaitTillComplete() + { + Thread loader = new Thread(this); + loader.start(); + + while (loader.isAlive()) + { + try + { + Thread.sleep(500); + } catch (Exception ex) + { + } + } + + } + } + + diff --git a/src/jalview/hmmer/HMMBuildThread.java b/src/jalview/hmmer/HMMBuildThread.java new file mode 100644 index 0000000..8bdb008 --- /dev/null +++ b/src/jalview/hmmer/HMMBuildThread.java @@ -0,0 +1,286 @@ +package jalview.hmmer; + + +import jalview.bin.Cache; +import jalview.datamodel.AlignmentI; +import jalview.datamodel.Sequence; +import jalview.datamodel.SequenceGroup; +import jalview.datamodel.SequenceI; +import jalview.gui.AlignFrame; +import jalview.gui.AlignViewport; +import jalview.gui.JvOptionPane; +import jalview.gui.Preferences; +import jalview.io.DataSourceType; +import jalview.io.FileFormat; +import jalview.io.FileLoader; +import jalview.io.FileParse; +import jalview.io.HMMFile; +import jalview.util.MessageManager; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.List; + +import javax.swing.JOptionPane; + +public class HMMBuildThread implements Runnable +{ + HMMERCommands cmds = new HMMERCommands(); + AlignFrame af; + + AlignViewport viewport; + AlignmentI alignment; + SequenceGroup group; + + + boolean forGroup = false; + + File hmmTemp = null; + + File stoTemp = null; + + long barID; + + /** + * This is used for validation purposes. Do not use! + * + * @param viewport + */ + public HMMBuildThread(AlignmentI alignment) + { + this.alignment = alignment; + forGroup = false; + } + + public HMMBuildThread(AlignFrame af) + { + this.af = af; + if (af.getViewport().getSelectionGroup() != null) + { + group = af.getViewport().getSelectionGroup(); + forGroup = true; + } + viewport = af.getViewport(); + alignment = viewport.getAlignment(); + + } + + /** + * Builds a HMM from an alignment, then imports and adds it to the alignment. + */ + @Override + public void run() + { + barID = System.currentTimeMillis(); + if (af != null) + { + af.setProgressBar(MessageManager.getString("status.running_hmmbuild"), + barID); + } + cmds.HMMERFOLDER = Cache.getProperty(Preferences.HMMER_PATH); + if (alignment == null && group == null) + { + JOptionPane.showMessageDialog(af, + MessageManager.getString("warn.no_sequence_data")); + return; + } + try + { + hmmTemp = File.createTempFile("hmm", ".hmm"); + hmmTemp.deleteOnExit(); + stoTemp = File.createTempFile("output", ".sto"); + stoTemp.deleteOnExit(); + } catch (IOException e1) + { + e1.printStackTrace(); + } + + try + { + try + { + SequenceI[] array; + List seqs = alignment + .getHMMConsensusSequences(true); + cmds.setHmmSeqs(seqs); + if (forGroup) + { + array = group.getSelectionAsNewSequences(alignment); + } + else + { + if (!alignment.isAligned()) + { + alignment.padGaps(); + } + array = alignment.getSequencesArray(); + } + if (array.length < 1) + { + if (af != null) + { + JOptionPane.showMessageDialog(af, + MessageManager.getString("warn.no_sequence_data")); + } + return; + } + SequenceI[] newArr = new SequenceI[array.length]; + int index = 0; + for (SequenceI seq : array) + { + newArr[index] = new Sequence(seq); + index++; + } + + cmds.uniquifySequences(newArr); + cmds.exportData(newArr, stoTemp, null, null); + jalview.analysis.SeqsetUtils.deuniquify(cmds.hash, array); + + } catch (FileNotFoundException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + + } + try + { + boolean ran = runCommand(); + if (!ran) + { + if (af != null) + { + JvOptionPane.showInternalMessageDialog(af, + MessageManager.getString("warn.hmmbuild_failed")); + } + return; + } + } catch (IOException | InterruptedException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + try + { + + importData(); + } catch (IOException | InterruptedException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } catch (Exception e) + { + e.printStackTrace(); + } finally + { + if (af != null) + { + af.setProgressBar( + MessageManager.getString("status.running_hmmbuild"), + barID); + } + } + } + + + + /** + * Executes the hmmbuild command in the command line. + * + * @return + * @throws IOException + * @throws InterruptedException + */ + private boolean runCommand() throws IOException, InterruptedException + { + File file = new File(cmds.HMMERFOLDER + "/hmmbuild"); + if (!file.canExecute()) + { + file = new File(cmds.HMMERFOLDER + "/hmmbuild.exe"); + { + if (!file.canExecute()) + { + return false; + } + } + } + String command = cmds.HMMERFOLDER + cmds.HMMBUILD + cmds.NAME; + if (forGroup) + { + command += group.getName(); + } + else + { + String name = null; + if (af != null) + { + name = af.getTitle(); + } + if (name == null || name == "" || name == " " || name == " ") + { + name = "Alignment"; + } + command += name; + } + command += cmds.SPACE; + if (!alignment.isNucleotide()) + { + command += cmds.FORCEAMINO; // TODO check for rna + } + else + { + command += cmds.FORCEDNA; + } + + command += hmmTemp.getAbsolutePath() + + cmds.SPACE + stoTemp.getAbsolutePath() + cmds.SPACE; + return cmds.runCommand(command); + } + + /** + * Imports the .hmm file produced by hmmbuild. + * + * @throws IOException + * @throws InterruptedException + */ + private void importData() throws IOException, InterruptedException + { + if (af != null) + { + cmds.addHMMConsensusSequences(af); + + FileLoader loader = new FileLoader(); + loader.LoadFileOntoAlignmentWaitTillLoaded(viewport, + hmmTemp.getAbsolutePath(), DataSourceType.FILE, + FileFormat.HMMER3); + } + else + { + HMMFile file = new HMMFile(new FileParse(hmmTemp.getAbsolutePath(), + DataSourceType.FILE)); + alignment.addSequence(file.getSeqsAsArray()[0]); + } + hmmTemp.delete(); + stoTemp.delete(); + } + + /** + * Runs hmmbuild, and waits for the results to be imported before continuing + */ + public void hmmbuildWaitTillComplete() + { + Thread loader = new Thread(this); + loader.start(); + + while (loader.isAlive()) + { + try + { + Thread.sleep(500); + } catch (Exception ex) + { + } + } + } +} diff --git a/src/jalview/hmmer/HMMERCommands.java b/src/jalview/hmmer/HMMERCommands.java new file mode 100644 index 0000000..6a538fc --- /dev/null +++ b/src/jalview/hmmer/HMMERCommands.java @@ -0,0 +1,193 @@ +package jalview.hmmer; + +import jalview.datamodel.Alignment; +import jalview.datamodel.AlignmentI; +import jalview.datamodel.HiddenMarkovModel; +import jalview.datamodel.SequenceI; +import jalview.gui.AlignFrame; +import jalview.io.HMMFile; +import jalview.io.StockholmFile; + +import java.io.BufferedReader; +import java.io.File; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.util.Hashtable; +import java.util.List; + +/** + * Contains multiple commands and methods frequently used to run hmmbuild, + * hmmalign and hmmsearch + * + * @author TZVanaalten + * + */ +public class HMMERCommands +{ + // Path of hmmer binaries directory + String HMMERFOLDER = "/Documents/"; + + public String JALVIEWDIRECTORY = System.getProperty("user.dir") + + "/"; + + public final String HMMALIGN = "/hmmalign "; + + public final String HMMBUILD = "/hmmbuild "; + + public final String HMMSEARCH = "/hmmsearch "; + + public String OUTPUTALIGNMENT; + + public final String NAME = "-n "; + + public final String SPACE = " "; + + public final String ALLCOL = "--allcol "; + + public final String TRIM = "--trim "; + + public final String FORCEAMINO = "--amino "; + + public final String FORCEDNA = "--dna "; + + public final String FORCERNA = "--rna "; + + Hashtable hash = new Hashtable(); + + List hmmSeqs; + + /** + * Uniquifies the sequences when exporting and stores their details in a + * hashtable. + * + * @param seqs + */ + public void uniquifySequences(SequenceI[] seqs) + { + hash = jalview.analysis.SeqsetUtils.uniquify(seqs, true); + } + + /** + * Recover the sequence data lost by uniquifying. + * + * @param seqs + */ + public void recoverSequenceNames(SequenceI[] seqs) + { + jalview.analysis.SeqsetUtils.deuniquify(hash, seqs); + } + + /** + * Runs a command in the command line. + * + * @param command + * @throws IOException + * @throws InterruptedException + */ + public boolean runCommand(String command) + throws IOException, InterruptedException + { + try + { + final Process p = Runtime.getRuntime().exec(command); + + new Thread(new Runnable() + { + @Override + public void run() + { + BufferedReader input = new BufferedReader( + new InputStreamReader(p.getInputStream())); + String line = null; + + try + { + while ((line = input.readLine()) != null) + { + System.out.println(line); + } + } catch (IOException e) + { + e.printStackTrace(); + } + } + }).start(); + + p.waitFor(); + } catch (Exception e) + { + e.printStackTrace(); + return false; + } + return true; + } + + /** + * Exports an alignment and/or HMM to the specified file. + * + * @param alignment + * @throws IOException + */ + public void exportData(SequenceI[] seqs, + File stoLocation, HiddenMarkovModel hmm, File hmmLocation) + throws IOException + { + if (seqs != null) + { + StockholmFile file = new StockholmFile(new Alignment(seqs)); + String output = file.print(seqs, false); + PrintWriter writer = new PrintWriter(stoLocation); + writer.println(output); + writer.close(); + } + + if (hmm != null) + { + HMMFile file = new HMMFile(hmm); + PrintWriter writer = new PrintWriter(hmmLocation); + writer.print(file.print()); + writer.close(); + } + } + + /** + * Adds any HMM sequences removed before submitting the alignment as a job + * back into the alignment. + * + * @param af + */ + public void addHMMConsensusSequences(AlignFrame af) + { + AlignmentI al = af.getViewport().getAlignment(); + for (SequenceI seq : hmmSeqs) + { + Integer position = seq.getPreviousPosition(); + al.getSequences().add(position, seq); + } + af.getViewport().setAlignment(al); + af.alignPanel.adjustAnnotationHeight(); + af.getViewport().updateSequenceIdColours(); + af.buildSortByAnnotationScoresMenu(); + } + + /** + * Returns the list of HMM sequences removed + * + * @return + */ + public List getHmmSeqs() + { + return hmmSeqs; + } + + /** + * Sets the list of removed HMM sequences + * + * @param hmmSeqs + */ + public void setHmmSeqs(List hmmSeqs) + { + this.hmmSeqs = hmmSeqs; + } +} diff --git a/src/jalview/io/AlignFile.java b/src/jalview/io/AlignFile.java index a603cca..52d781e 100755 --- a/src/jalview/io/AlignFile.java +++ b/src/jalview/io/AlignFile.java @@ -309,9 +309,9 @@ public abstract class AlignFile extends FileParse */ protected void initData() { - seqs = new Vector(); - annotations = new Vector(); - seqGroups = new ArrayList(); + seqs = new Vector<>(); + annotations = new Vector<>(); + seqGroups = new ArrayList<>(); parseCalled = false; } @@ -324,7 +324,7 @@ public abstract class AlignFile extends FileParse @Override public void setSeqs(SequenceI[] s) { - seqs = new Vector(); + seqs = new Vector<>(); for (int i = 0; i < s.length; i++) { @@ -395,7 +395,7 @@ public abstract class AlignFile extends FileParse { if (newickStrings == null) { - newickStrings = new Vector(); + newickStrings = new Vector<>(); } newickStrings.addElement(new String[] { treeName, newickString }); } @@ -419,4 +419,16 @@ public abstract class AlignFile extends FileParse { seqs.add(seq); } + + /** + * Used only for hmmer statistics, so should probably be removed at some + * point. TODO remove this + * + * @return + */ + public Vector getAnnotations() + { + return annotations; + } + } diff --git a/src/jalview/io/FileFormat.java b/src/jalview/io/FileFormat.java index 4b33dbf..6ff5461 100644 --- a/src/jalview/io/FileFormat.java +++ b/src/jalview/io/FileFormat.java @@ -373,8 +373,24 @@ public enum FileFormat implements FileFormatI { return false; } + }, + HMMER3("HMMER3", "hmm", true, true) + { + @Override + public AlignmentFileReaderI getReader(FileParse source) + throws IOException + { + return new HMMFile(source); + } + + @Override + public AlignmentFileWriterI getWriter(AlignmentI al) + { + return new HMMFile(); + } }; + private boolean writable; private boolean readable; diff --git a/src/jalview/io/FileLoader.java b/src/jalview/io/FileLoader.java index 26641b1..977cc12 100755 --- a/src/jalview/io/FileLoader.java +++ b/src/jalview/io/FileLoader.java @@ -29,6 +29,9 @@ import jalview.bin.Jalview; import jalview.datamodel.AlignmentI; import jalview.datamodel.HiddenColumns; import jalview.datamodel.PDBEntry; +import jalview.datamodel.Profile; +import jalview.datamodel.Profiles; +import jalview.datamodel.SequenceGroup; import jalview.datamodel.SequenceI; import jalview.gui.AlignFrame; import jalview.gui.AlignViewport; @@ -199,6 +202,32 @@ public class FileLoader implements Runnable return alignFrame; } + public void LoadFileOntoAlignmentWaitTillLoaded(AlignViewport viewport, + String file, DataSourceType sourceType, FileFormatI format) + { + this.viewport = viewport; + this.file = file; + this.protocol = sourceType; + this.format = format; + _LoadAlignmentFileWaitTillLoaded(); + } + + protected void _LoadAlignmentFileWaitTillLoaded() + { + Thread loader = new Thread(this); + loader.start(); + + while (loader.isAlive()) + { + try + { + Thread.sleep(500); + } catch (Exception ex) + { + } + } + } + public void updateRecentlyOpened() { Vector recent = new Vector(); @@ -394,6 +423,42 @@ public class FileLoader implements Runnable } // append to existing alignment viewport.addAlignment(al, title); + if (source instanceof HMMFile) + { + AlignmentI alignment = viewport.getAlignment(); + SequenceI seq = alignment + .getSequenceAt(alignment.getAbsoluteHeight() - 1); + alignment.deleteSequence(alignment.getAbsoluteHeight() - 1); + SequenceGroup sg = viewport.getSelectionGroup(); + if (sg != null) + { + seq.insertCharAt(0, sg.getStartRes(), '-'); + seq.insertCharAt(sg.getEndRes() + 1, + alignment.getWidth() - sg.getEndRes(), '-'); + SequenceI topSeq = sg.getSequencesInOrder(alignment)[0]; + int topIndex = alignment.findIndex(topSeq); + alignment.insertSequenceAt(topIndex, seq); + sg.setSeqrep(seq); + viewport.getSelectionGroup().addSequence(seq, false); + } + else + { + alignment.insertSequenceAt(0, seq); + } + viewport.initInformation(); + viewport.setSequenceInformationHash( + new Profiles(new Profile[1]), 0); + viewport.updateInformation(viewport.getAlignPanel()); + viewport.getAlignPanel().adjustAnnotationHeight(); + viewport.updateSequenceIdColours(); + if (viewport.getAlignPanel().alignFrame + .getSelectedHMM() == null) + { + viewport.getAlignPanel().alignFrame + .setSelectedHMM(seq.getHMM()); + } + + } } else { diff --git a/src/jalview/io/HMMFile.java b/src/jalview/io/HMMFile.java new file mode 100644 index 0000000..49d885c --- /dev/null +++ b/src/jalview/io/HMMFile.java @@ -0,0 +1,773 @@ +package jalview.io; + +import jalview.api.AlignExportSettingI; +import jalview.api.AlignmentViewPanel; +import jalview.datamodel.HMMNode; +import jalview.datamodel.HiddenMarkovModel; +import jalview.datamodel.SequenceI; + +import java.io.BufferedReader; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + + +/** + * Adds capability to read in and write out HMMER3 files. . + * + * + * @author TZVanaalten + * + */ +public class HMMFile extends AlignFile + implements AlignmentFileReaderI, AlignmentFileWriterI +{ + // HMM to store file data + private HiddenMarkovModel hmm; + + // number of possible transitions + private static final int NUMBER_OF_TRANSITIONS = 7; + + private String NL = "\n"; + + //number of symbols in the alphabet used in the hidden Markov model + int numberOfSymbols; + + private final String SPACE = " "; + + private final String COMPO = "COMPO"; + + private final String EMPTY = ""; + + //This is a line that needs to be added to each HMMER� file. It is purely for readability. + private static final String TRANSITIONTYPELINE = " m->m m->i m->d i->m i->i d->m d->d"; + + /** + * Parses immediately. + * + * @param inFile + * @param type + * @throws IOException + */ + public HMMFile(String inFile, DataSourceType type) throws IOException + { + super(inFile, type); + } + + /** + * Parses immediately. + * + * @param source + * @throws IOException + */ + public HMMFile(FileParse source) throws IOException + { + super(source); + } + + /** + * Default constructor, do not use! + */ + public HMMFile() + { + + } + + /** + * Constructor for HMMFile used for exporting. + * + * @param hmm + * @param exportImmediately + */ + public HMMFile(HiddenMarkovModel markov) + { + hmm = markov; + } + + /** + * For testing, do not use. + * + * @param br + */ + HMMFile(BufferedReader br) + { + dataIn = br; + } + + /** + * Returns the HMM produced by reading in a HMMER3 file. + * + * @return + */ + public HiddenMarkovModel getHMM() + { + return hmm; + } + + /** + * Sets the HMM used in this file. + * + * @param model + */ + public void setHMM(HiddenMarkovModel model) + { + this.hmm = model; + } + + /** + * Gets the name of the hidden Markov model. + * + * @return + */ + public String getName() + { + return hmm.getName(); + } + + /** + * Reads the data from HMM file into the HMM field on this object. + * + * @throws IOException + */ + @Override + public void parse() throws IOException + { + hmm = new HiddenMarkovModel(); + parseFileProperties(dataIn); + parseModel(dataIn); + } + + /** + * Reads the data from HMM file into the HMM field on this object. + * + * @throws IOException + */ + + public void parse(BufferedReader br) throws IOException + { + hmm = new HiddenMarkovModel(); + parseFileProperties(br); + parseModel(br); + } + + + + /** + * Imports the file properties from a HMMER3 file. + * + * @param input + * The buffered reader used to read in the file. + * @throws IOException + */ + void parseFileProperties(BufferedReader input) throws IOException + { + boolean readingFile = true; + hmm.setFileHeader(input.readLine()); + String line = input.readLine(); + while (readingFile) + { + if (line != null) + { + Scanner parser = new Scanner(line); + String next = parser.next(); + if ("HMM".equals(next)) // indicates start of HMM data (end of file + // properties) + { + readingFile = false; + fillSymbols(parser); + numberOfSymbols = hmm.getNumberOfSymbols(); + } + else if ("STATS".equals(next)) + { + parser.next(); + String key; + String value; + key = parser.next(); + value = parser.next() + SPACE + SPACE + parser.next(); + hmm.addFileProperty(key, value); + } + else + { + String key = next; + String value = parser.next(); + while (parser.hasNext()) + { + value = value + SPACE + parser.next(); + } + hmm.addFileProperty(key, value); + } + parser.close(); + } + line = input.readLine(); + if (line == null) + { + readingFile = false; + } + } + + } + + /** + * Parses the model data from the HMMER3 file + * + * @param input + * The buffered reader used to read the file. + * @throws IOException + */ + void parseModel(BufferedReader input) throws IOException + { + String line = input.readLine(); + int node = 0; + while (!"//".equals(line)) + { + hmm.getNodes().add(new HMMNode()); + String next; + Scanner matchReader = new Scanner(line); + next = matchReader.next(); + if (next.equals(COMPO) || node > 0) + { + // stores match emission line in list + List matches = new ArrayList<>(); + matches = fillList(matchReader, numberOfSymbols); + hmm.getNodes().get(node).setMatchEmissions(matches); + if (node > 0) + { + parseAnnotations(matchReader, node); + } + } + matchReader.close(); + // stores insert emission line in list + line = input.readLine(); + Scanner insertReader = new Scanner(line); + List inserts = new ArrayList<>(); + inserts = fillList(insertReader, numberOfSymbols); + hmm.getNodes().get(node).setInsertEmissions(inserts); + insertReader.close(); + + // stores state transition line in list + line = input.readLine(); + Scanner transitionReader = new Scanner(line); + List transitions = new ArrayList<>(); + transitions = fillList(transitionReader, NUMBER_OF_TRANSITIONS); + hmm.getNodes().get(node).setStateTransitions(transitions); + transitionReader.close(); + line = input.readLine(); + node++; + } + + } + + /** + * Parses the annotations on the match emission line. + * + * @param scanner + * The scanner which is processing match emission line. + * @param index + * The index of node which is being scanned. + */ + void parseAnnotations(Scanner scanner, int index) + { + if (hmm.mapIsActive() && scanner.hasNext()) + { + int column; + column = scanner.nextInt(); + hmm.getNodes().get(index).setAlignmentColumn(column - 1); + hmm.getNodeLookup().put(column - 1, index); + } + else + { + scanner.next(); + } + + if (scanner.hasNext()) + { + char consensusR; + consensusR = charValue(scanner.next()); + hmm.getNodes().get(index).setConsensusResidue(consensusR); + } + + if (scanner.hasNext()) + { + char reference; + reference = charValue(scanner.next()); + hmm.getNodes().get(index).setReferenceAnnotation(reference); + } + + if (scanner.hasNext()) + { + char value; + value = charValue(scanner.next()); + hmm.getNodes().get(index).setMaskValue(value); + } + if (scanner.hasNext()) + { + char consensusS; + consensusS = charValue(scanner.next()); + hmm.getNodes().get(index).setConsensusStructure(consensusS); + } + } + + + + /** + * Fills a list of doubles based on an input line. + * + * @param input + * The scanner for the line containing the data to be transferred to + * the list. + * @param numberOfElements + * The number of elements in the list to be filled. + * @return filled list Returns the list of doubles. + * @throws IOException + */ + static List fillList(Scanner input, + int numberOfElements) throws IOException + { + List list = new ArrayList<>(); + for (int i = 0; i < numberOfElements; i++) + { + + String next = input.next(); + if (next.contains("*")) // state transitions to or from delete states + // occasionally have values of -infinity. These + // values are represented by an * in the .hmm + // file. + { + list.add(Double.NEGATIVE_INFINITY); + } + else + { + double prob = Double.valueOf(next); + prob = Math.pow(Math.E, -prob); + list.add(prob); + } + } + if (list.size() < numberOfElements) + { + throw new IOException("Incomplete data"); + } + return list; + } + + /** + * Returns a string to be added to the StringBuilder containing the entire + * output String. + * + * @param initialColumnSeparation + * The initial whitespace separation between the left side of the + * file and first character. + * @param columnSeparation + * The separation between subsequent data entries. + * @param data + * The list fo data to be added to the String. + * @return + */ + String addData(int initialColumnSeparation, + int columnSeparation, List data) + { + String line = EMPTY; + int index = 0; + for (String value : data) + { + if (index == 0) + { + line += String.format("%" + initialColumnSeparation + "s", value); + } + else + { + line += String.format("%" + columnSeparation + "s", value); + } + index++; + } + return line; + } + + /** + * Converts list of characters into a list of Strings. + * + * @param list + * @return Returns the list of Strings. + */ + List charListToStringList(List list) + { + List strList = new ArrayList<>(); + for (char value : list) + { + String strValue = Character.toString(value); + strList.add(strValue); + } + return strList; + } + + /** + * Converts a list of doubles into a list of Strings, rounded to the nearest + * 5th decimal place. + * + * @param list + * @param noOfDecimals + * @return + */ + List doubleListToStringList(List list) + { + List strList = new ArrayList<>(); + for (double value : list) + { + String strValue; + if (value > 0) + { + strValue = String.format("%.5f", value); + + } + else if (value == -0.00000d) + { + strValue = "0.00000"; + } + else + { + strValue = "*"; + } + + strList.add(strValue); + } + return strList; + } + + /** + * Converts a primitive array of Strings to a list of Strings. + * + * @param array + * @return + */ + List stringArrayToStringList(String[] array) + { + List list = new ArrayList<>(); + for (String value : array) + { + list.add(value); + } + + return list; + } + + /** + * Returns a string containing the model data. + */ + String getModelAsString() + { + StringBuffer output = new StringBuffer(); + String symbolLine = "HMM"; + List charSymbols = hmm.getSymbols(); + List strSymbols; + strSymbols = charListToStringList(charSymbols); + symbolLine += addData(11, 9, strSymbols); + output.append(symbolLine); + output.append(NL + TRANSITIONTYPELINE); + + int length = hmm.getLength(); + + for (int node = 0; node <= length; node++) + { + String matchLine; + if (node == 0) + { + matchLine = String.format("%7s", "COMPO"); + } + else + { + matchLine = String.format("%7s", node); + } + + List strMatches; + List doubleMatches; + doubleMatches = convertListToLogSpace( + hmm.getNode(node).getMatchEmissions()); + strMatches = doubleListToStringList(doubleMatches); + matchLine += addData(10, 9, strMatches); + + + if (node != 0) + { + matchLine += SPACE + (hmm.getNodeAlignmentColumn(node) + 1); + matchLine += SPACE + hmm.getConsensusResidue(node); + matchLine += SPACE + hmm.getReferenceAnnotation(node); + if (hmm.getFileHeader().contains("HMMER3/f")) + { + matchLine += SPACE + hmm.getMaskedValue(node); + matchLine += SPACE + hmm.getConsensusStructure(node); + } + + } + + output.append(NL + matchLine); + + String insertLine = EMPTY; + List strInserts; + List doubleInserts; + doubleInserts = convertListToLogSpace( + hmm.getNode(node).getInsertEmissions()); + strInserts = doubleListToStringList(doubleInserts); + insertLine += addData(17, 9, strInserts); + + output.append(NL + insertLine); + + String transitionLine = EMPTY; + List strTransitions; + List doubleTransitions; + doubleTransitions = convertListToLogSpace( + hmm.getNode(node).getStateTransitions()); + strTransitions = doubleListToStringList(doubleTransitions); + transitionLine += addData(17, 9, strTransitions); + + output.append(NL + transitionLine); + } + return output.toString(); + } + + /** + * Returns a String containing the HMM file properties + */ + String getFilePropertiesAsString() + { + StringBuffer output = new StringBuffer(); + String line; + + output.append(hmm.getFileHeader()); + + line = String.format("%-5s %1s", "NAME", hmm.getName()); + output.append(NL + line); + + if (hmm.getAccessionNumber() != null) + { + line = String.format("%-5s %1s", "ACC", hmm.getAccessionNumber()); + output.append(NL + line); + } + + if (hmm.getDescription() != null) + { + line = String.format("%-5s %1s", "DESC", hmm.getDescription()); + output.append(NL + line); + } + line = String.format("%-5s %1s", "LENG", hmm.getLength()); + output.append(NL + line); + + if (hmm.getMaxInstanceLength() != null) + { + line = String.format("%-5s %1s", "MAXL", hmm.getMaxInstanceLength()); + output.append(NL + line); + } + line = String.format("%-5s %1s", "ALPH", hmm.getAlphabetType()); + output.append(NL + line); + + boolean status; + String statusStr; + + status = hmm.referenceAnnotationIsActive(); + statusStr = HiddenMarkovModel.findStringFromBoolean(status); + line = String.format("%-5s %1s", "RF", + statusStr); + output.append(NL + line); + + status = hmm.maskValueIsActive(); + statusStr = HiddenMarkovModel.findStringFromBoolean(status); + line = String.format("%-5s %1s", "MM", + statusStr); + output.append(NL + line); + + status = hmm.consensusResidueIsActive(); + statusStr = HiddenMarkovModel.findStringFromBoolean(status); + line = String.format("%-5s %1s", "CONS", + statusStr); + output.append(NL + line); + + status = hmm.consensusStructureIsActive(); + statusStr = HiddenMarkovModel.findStringFromBoolean(status); + line = String.format("%-5s %1s", "CS", + statusStr); + output.append(NL + line); + + status = hmm.mapIsActive(); + statusStr = HiddenMarkovModel.findStringFromBoolean(status); + line = String.format("%-5s %1s", "MAP", + statusStr); + output.append(NL + line); + + + if (hmm.getDate() != null) + { + line = String.format("%-5s %1s", "DATE", hmm.getDate()); + output.append(NL + line); + } + if (hmm.getNumberOfSequences() != null) + { + line = String.format("%-5s %1s", "NSEQ", hmm.getNumberOfSequences()); + output.append(NL + line); + } + if (hmm.getEffectiveNumberOfSequences() != null) + { + line = String.format("%-5s %1s", "EFFN", + hmm.getEffectiveNumberOfSequences()); + output.append(NL + line); + } + if (hmm.getCheckSum() != null) + { + line = String.format("%-5s %1s", "CKSUM", hmm.getCheckSum()); + output.append(NL + line); + } + if (hmm.getGatheringThreshold() != null) + { + line = String.format("%-5s %1s", "GA", hmm.getGatheringThreshold()); + output.append(NL + line); + } + + if (hmm.getTrustedCutoff() != null) + { + line = String.format("%-5s %1s", "TC", hmm.getTrustedCutoff()); + output.append(NL + line); + } + if (hmm.getNoiseCutoff() != null) + { + line = String.format("%-5s %1s", "NC", hmm.getNoiseCutoff()); + output.append(NL + line); + } + if (hmm.getMSV() != null) + { + line = String.format("%-19s %18s", "STATS LOCAL MSV", hmm.getMSV()); + output.append(NL + line); + + line = String.format("%-19s %18s", "STATS LOCAL VITERBI", + hmm.getViterbi()); + output.append(NL + line); + + line = String.format("%-19s %18s", "STATS LOCAL FORWARD", + hmm.getForward()); + output.append(NL + line); + } + return output.toString(); + } + + + /** + * Returns the char value of a single lettered String. + * + * @param string + * @return + */ + char charValue(String string) + { + char character; + character = string.charAt(0); + return character; + + } + + @Override + public String print(SequenceI[] seqs, boolean jvsuffix) + { + if (seqs[0].getHMM() != null) + { + hmm = seqs[0].getHMM(); + } + return print(); + } + + /** + * Prints the .hmm file to a String. + * + * @return + */ + public String print() + { + StringBuffer output = new StringBuffer(); + output.append(getFilePropertiesAsString()); + output.append(NL); + output.append(getModelAsString()); + output.append(NL + "//"); + return output.toString(); + } + + /** + * Converts the probabilities contained in a list into log space. + * + * @param list + */ + List convertListToLogSpace(List list) + { + + List convertedList = new ArrayList<>(); + for (int i = 0; i < list.size(); i++) + { + double prob = list.get(i); + double logProb = -1 * Math.log(prob); + + convertedList.add(logProb); + } + return convertedList; + + + } + + /** + * Returns the HMM sequence produced by reading a .hmm file. + */ + @Override + public SequenceI[] getSeqsAsArray() + { + SequenceI hmmSeq = hmm.initHMMSequence(); + SequenceI[] seq = new SequenceI[1]; + seq[0] = hmmSeq; + return seq; + + } + + /** + * Fills symbol array and adds each symbol to an index lookup + * + * @param parser + * The scanner scanning the symbol line in the file. + */ + public void fillSymbols(Scanner parser) + { + int i = 0; + while (parser.hasNext()) + { + String strSymbol = parser.next(); + char[] symbol = strSymbol.toCharArray(); + hmm.getSymbols().add(symbol[0]); + hmm.setSymbolIndex(symbol[0], i); + i++; + } + } + + @Override + public void setNewlineString(String newLine) + { + NL = newLine; + } + + @Override + public void setExportSettings(AlignExportSettingI exportSettings) + { + + } + + @Override + public void configureForView(AlignmentViewPanel viewpanel) + { + + } + + @Override + public boolean hasWarningMessage() + { + return false; + } + + @Override + public String getWarningMessage() + { + return "warning message"; + } + +} + diff --git a/src/jalview/io/IdentifyFile.java b/src/jalview/io/IdentifyFile.java index 7ad8fcd..7b306d0 100755 --- a/src/jalview/io/IdentifyFile.java +++ b/src/jalview/io/IdentifyFile.java @@ -150,6 +150,11 @@ public class IdentifyFile reply = FileFormat.ScoreMatrix; break; } + if (data.startsWith("HMMER3")) + { + reply = FileFormat.HMMER3; + break; + } if (data.startsWith("H ") && !aaIndexHeaderRead) { aaIndexHeaderRead = true; diff --git a/src/jalview/io/StockholmFile.java b/src/jalview/io/StockholmFile.java index e22ee0a..dc4fabd 100644 --- a/src/jalview/io/StockholmFile.java +++ b/src/jalview/io/StockholmFile.java @@ -195,7 +195,7 @@ public class StockholmFile extends AlignFile String version; // String id; Hashtable seqAnn = new Hashtable(); // Sequence related annotations - LinkedHashMap seqs = new LinkedHashMap(); + LinkedHashMap seqs = new LinkedHashMap<>(); Regex p, r, rend, s, x; // Temporary line for processing RNA annotation // String RNAannot = ""; @@ -656,7 +656,7 @@ public class StockholmFile extends AlignFile strucAnn = new Hashtable(); } - Vector newStruc = new Vector(); + Vector newStruc = new Vector<>(); parseAnnotationRow(newStruc, type, ns); for (AlignmentAnnotation alan : newStruc) { @@ -708,7 +708,7 @@ public class StockholmFile extends AlignFile private void guessDatabaseFor(Sequence seqO, String dbr, String dbsource) { DBRefEntry dbrf = null; - List dbrs = new ArrayList(); + List dbrs = new ArrayList<>(); String seqdb = "Unknown", sdbac = "" + dbr; int st = -1, en = -1, p; if ((st = sdbac.indexOf("/")) > -1) @@ -997,6 +997,7 @@ public class StockholmFile extends AlignFile } } + // output annotations while (i < s.length && s[i] != null) { @@ -1009,7 +1010,6 @@ public class StockholmFile extends AlignFile String key = type2id(alAnot[j].label); boolean isrna = alAnot[j].isValidStruc(); - if (isrna) { // hardwire to secondary structure if there is RNA secondary @@ -1030,7 +1030,8 @@ public class StockholmFile extends AlignFile for (int k = 0; k < ann.length; k++) { seq += outputCharacter(key, k, isrna, ann, s[i]); - } + + } out.append(seq); out.append(newline); } @@ -1090,6 +1091,8 @@ public class StockholmFile extends AlignFile out.append(newline); } } + + out.append("//"); out.append(newline); @@ -1154,7 +1157,7 @@ public class StockholmFile extends AlignFile out.append("# STOCKHOLM 1.0"); out.append(newline); print(getSeqsAsArray(), false); - + out.append("//"); out.append(newline); return out.toString(); diff --git a/src/jalview/jbgui/GAlignFrame.java b/src/jalview/jbgui/GAlignFrame.java index 86d0c85..eef6ee8 100755 --- a/src/jalview/jbgui/GAlignFrame.java +++ b/src/jalview/jbgui/GAlignFrame.java @@ -40,6 +40,7 @@ import java.awt.event.FocusEvent; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; +import java.io.IOException; import java.util.HashMap; import java.util.Map; @@ -67,6 +68,14 @@ public class GAlignFrame extends JInternalFrame protected JMenu webService = new JMenu(); + protected JMenu hmmerMenu = new JMenu(); + + protected JMenuItem hmmAlign = new JMenuItem(); + + protected JMenuItem hmmSearch = new JMenuItem(); + + protected JMenuItem hmmBuild = new JCheckBoxMenuItem(); + protected JMenuItem webServiceNoServices; protected JCheckBoxMenuItem viewBoxesMenuItem = new JCheckBoxMenuItem(); @@ -193,13 +202,19 @@ public class GAlignFrame extends JInternalFrame protected JCheckBoxMenuItem normaliseSequenceLogo = new JCheckBoxMenuItem(); + protected JCheckBoxMenuItem showInformationHistogram = new JCheckBoxMenuItem(); + + protected JCheckBoxMenuItem showHMMSequenceLogo = new JCheckBoxMenuItem(); + + protected JCheckBoxMenuItem normaliseHMMSequenceLogo = new JCheckBoxMenuItem(); + protected JCheckBoxMenuItem applyAutoAnnotationSettings = new JCheckBoxMenuItem(); private SequenceAnnotationOrder annotationSortOrder; private boolean showAutoCalculatedAbove = false; - private Map accelerators = new HashMap(); + private Map accelerators = new HashMap<>(); private SplitContainerI splitFrame; @@ -247,7 +262,8 @@ public class GAlignFrame extends JInternalFrame private void jbInit() throws Exception { initColourMenu(); - + initHMMERMenu(); + JMenuItem saveAs = new JMenuItem( MessageManager.getString("action.save_as")); ActionListener al = new ActionListener() @@ -258,14 +274,14 @@ public class GAlignFrame extends JInternalFrame saveAs_actionPerformed(e); } }; - + // FIXME getDefaultToolkit throws an exception in Headless mode KeyStroke keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_S, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask() | KeyEvent.SHIFT_MASK, false); addMenuActionAndAccelerator(keyStroke, saveAs, al); - + closeMenuItem.setText(MessageManager.getString("action.close")); keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_W, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), false); @@ -278,7 +294,7 @@ public class GAlignFrame extends JInternalFrame } }; addMenuActionAndAccelerator(keyStroke, closeMenuItem, al); - + JMenu editMenu = new JMenu(MessageManager.getString("action.edit")); JMenu viewMenu = new JMenu(MessageManager.getString("action.view")); JMenu annotationsMenu = new JMenu( @@ -288,6 +304,24 @@ public class GAlignFrame extends JInternalFrame JMenu calculateMenu = new JMenu( MessageManager.getString("action.calculate")); webService.setText(MessageManager.getString("action.web_service")); + hmmerMenu.setText(MessageManager.getString("action.hmmer")); + String status = Cache.getProperty("HMMER_FUNCTIONING"); + if ("false".equals(status) || status == null) + { + hmmerMenu.setEnabled(false); + } + else + { + hmmerMenu.setEnabled(true); + } + hmmerMenu.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + hmmerMenu_actionPerformed(e); + } + }); JMenuItem selectAllSequenceMenuItem = new JMenuItem( MessageManager.getString("action.select_all")); keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_A, @@ -301,7 +335,7 @@ public class GAlignFrame extends JInternalFrame } }; addMenuActionAndAccelerator(keyStroke, selectAllSequenceMenuItem, al); - + JMenuItem deselectAllSequenceMenuItem = new JMenuItem( MessageManager.getString("action.deselect_all")); keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0, false); @@ -314,7 +348,7 @@ public class GAlignFrame extends JInternalFrame } }; addMenuActionAndAccelerator(keyStroke, deselectAllSequenceMenuItem, al); - + JMenuItem invertSequenceMenuItem = new JMenuItem( MessageManager.getString("action.invert_sequence_selection")); keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_I, @@ -328,7 +362,7 @@ public class GAlignFrame extends JInternalFrame } }; addMenuActionAndAccelerator(keyStroke, invertSequenceMenuItem, al); - + JMenuItem grpsFromSelection = new JMenuItem( MessageManager.getString("action.make_groups_selection")); grpsFromSelection.addActionListener(new ActionListener() @@ -364,7 +398,7 @@ public class GAlignFrame extends JInternalFrame } }; addMenuActionAndAccelerator(keyStroke, remove2LeftMenuItem, al); - + JMenuItem remove2RightMenuItem = new JMenuItem( MessageManager.getString("action.remove_right")); keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_R, @@ -378,7 +412,7 @@ public class GAlignFrame extends JInternalFrame } }; addMenuActionAndAccelerator(keyStroke, remove2RightMenuItem, al); - + JMenuItem removeGappedColumnMenuItem = new JMenuItem( MessageManager.getString("action.remove_empty_columns")); keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_E, @@ -392,7 +426,7 @@ public class GAlignFrame extends JInternalFrame } }; addMenuActionAndAccelerator(keyStroke, removeGappedColumnMenuItem, al); - + JMenuItem removeAllGapsMenuItem = new JMenuItem( MessageManager.getString("action.remove_all_gaps")); keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_E, @@ -408,7 +442,7 @@ public class GAlignFrame extends JInternalFrame } }; addMenuActionAndAccelerator(keyStroke, removeAllGapsMenuItem, al); - + JMenuItem justifyLeftMenuItem = new JMenuItem( MessageManager.getString("action.left_justify_alignment")); justifyLeftMenuItem.addActionListener(new ActionListener() @@ -500,7 +534,7 @@ public class GAlignFrame extends JInternalFrame sortGroupMenuItem_actionPerformed(e); } }); - + JMenuItem removeRedundancyMenuItem = new JMenuItem( MessageManager.getString("action.remove_redundancy")); keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_D, @@ -514,7 +548,7 @@ public class GAlignFrame extends JInternalFrame } }; addMenuActionAndAccelerator(keyStroke, removeRedundancyMenuItem, al); - + JMenuItem pairwiseAlignmentMenuItem = new JMenuItem( MessageManager.getString("action.pairwise_alignment")); pairwiseAlignmentMenuItem.addActionListener(new ActionListener() @@ -525,16 +559,18 @@ public class GAlignFrame extends JInternalFrame pairwiseAlignmentMenuItem_actionPerformed(e); } }); - + this.getContentPane().setLayout(new BorderLayout()); alignFrameMenuBar.setFont(new java.awt.Font("Verdana", 0, 11)); statusBar.setBackground(Color.white); statusBar.setFont(new java.awt.Font("Verdana", 0, 11)); statusBar.setBorder(BorderFactory.createLineBorder(Color.black)); statusBar.setText(MessageManager.getString("label.status_bar")); + outputTextboxMenu .setText(MessageManager.getString("label.out_to_textbox")); + annotationPanelMenuItem.setActionCommand(""); annotationPanelMenuItem .setText(MessageManager.getString("label.show_annotations")); @@ -602,6 +638,7 @@ public class GAlignFrame extends JInternalFrame final JCheckBoxMenuItem sortAnnByLabel = new JCheckBoxMenuItem( MessageManager.getString("label.sort_annotations_by_label")); + sortAnnBySequence.setSelected( sortAnnotationsBy == SequenceAnnotationOrder.SEQUENCE_AND_LABEL); sortAnnBySequence.addActionListener(new ActionListener() @@ -642,7 +679,7 @@ public class GAlignFrame extends JInternalFrame colourTextMenuItem_actionPerformed(e); } }); - + JMenuItem htmlMenuItem = new JMenuItem( MessageManager.getString("label.html")); htmlMenuItem.addActionListener(new ActionListener() @@ -653,7 +690,7 @@ public class GAlignFrame extends JInternalFrame htmlMenuItem_actionPerformed(e); } }); - + JMenuItem createBioJS = new JMenuItem( MessageManager.getString("label.biojs_html_export")); createBioJS.addActionListener(new java.awt.event.ActionListener() @@ -664,7 +701,7 @@ public class GAlignFrame extends JInternalFrame bioJSMenuItem_actionPerformed(e); } }); - + JMenuItem overviewMenuItem = new JMenuItem( MessageManager.getString("label.overview_window")); overviewMenuItem.addActionListener(new ActionListener() @@ -675,7 +712,7 @@ public class GAlignFrame extends JInternalFrame overviewMenuItem_actionPerformed(e); } }); - + undoMenuItem.setEnabled(false); undoMenuItem.setText(MessageManager.getString("action.undo")); keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_Z, @@ -689,7 +726,7 @@ public class GAlignFrame extends JInternalFrame } }; addMenuActionAndAccelerator(keyStroke, undoMenuItem, al); - + redoMenuItem.setEnabled(false); redoMenuItem.setText(MessageManager.getString("action.redo")); keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_Y, @@ -703,7 +740,7 @@ public class GAlignFrame extends JInternalFrame } }; addMenuActionAndAccelerator(keyStroke, redoMenuItem, al); - + wrapMenuItem.setText(MessageManager.getString("label.wrap")); wrapMenuItem.addActionListener(new ActionListener() { @@ -713,7 +750,7 @@ public class GAlignFrame extends JInternalFrame wrapMenuItem_actionPerformed(e); } }); - + JMenuItem printMenuItem = new JMenuItem( MessageManager.getString("action.print")); keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_P, @@ -727,7 +764,7 @@ public class GAlignFrame extends JInternalFrame } }; addMenuActionAndAccelerator(keyStroke, printMenuItem, al); - + renderGapsMenuItem .setText(MessageManager.getString("action.show_gaps")); renderGapsMenuItem.setState(true); @@ -739,7 +776,7 @@ public class GAlignFrame extends JInternalFrame renderGapsMenuItem_actionPerformed(e); } }); - + JMenuItem findMenuItem = new JMenuItem( MessageManager.getString("action.find")); keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_F, @@ -758,6 +795,7 @@ public class GAlignFrame extends JInternalFrame showSeqFeatures.setText( MessageManager.getString("label.show_sequence_features")); + showSeqFeatures.addActionListener(new ActionListener() { @Override @@ -776,86 +814,86 @@ public class GAlignFrame extends JInternalFrame .setText(MessageManager.getString("label.show_database_refs")); showDbRefsMenuitem.addActionListener(new ActionListener() { - + @Override public void actionPerformed(ActionEvent e) { showDbRefs_actionPerformed(e); } - + }); showNpFeatsMenuitem.setText( MessageManager.getString("label.show_non_positional_features")); showNpFeatsMenuitem.addActionListener(new ActionListener() { - + @Override public void actionPerformed(ActionEvent e) { showNpFeats_actionPerformed(e); } - + }); showGroupConservation .setText(MessageManager.getString("label.group_conservation")); showGroupConservation.addActionListener(new ActionListener() { - + @Override public void actionPerformed(ActionEvent e) { showGroupConservation_actionPerformed(e); } - + }); showGroupConsensus .setText(MessageManager.getString("label.group_consensus")); showGroupConsensus.addActionListener(new ActionListener() { - + @Override public void actionPerformed(ActionEvent e) { showGroupConsensus_actionPerformed(e); } - + }); showConsensusHistogram.setText( MessageManager.getString("label.show_consensus_histogram")); showConsensusHistogram.addActionListener(new ActionListener() { - + @Override public void actionPerformed(ActionEvent e) { showConsensusHistogram_actionPerformed(e); } - + }); showSequenceLogo .setText(MessageManager.getString("label.show_consensus_logo")); showSequenceLogo.addActionListener(new ActionListener() { - + @Override public void actionPerformed(ActionEvent e) { showSequenceLogo_actionPerformed(e); } - + }); normaliseSequenceLogo .setText(MessageManager.getString("label.norm_consensus_logo")); normaliseSequenceLogo.addActionListener(new ActionListener() { - + @Override public void actionPerformed(ActionEvent e) { normaliseSequenceLogo_actionPerformed(e); } - + }); applyAutoAnnotationSettings .setText(MessageManager.getString("label.apply_all_groups")); @@ -869,7 +907,7 @@ public class GAlignFrame extends JInternalFrame applyAutoAnnotationSettings_actionPerformed(e); } }); - + ButtonGroup buttonGroup = new ButtonGroup(); final JRadioButtonMenuItem showAutoFirst = new JRadioButtonMenuItem( MessageManager.getString("label.show_first")); @@ -900,7 +938,7 @@ public class GAlignFrame extends JInternalFrame sortAnnotations_actionPerformed(); } }); - + JMenuItem deleteGroups = new JMenuItem( MessageManager.getString("action.undefine_groups")); keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_U, @@ -914,7 +952,7 @@ public class GAlignFrame extends JInternalFrame } }; addMenuActionAndAccelerator(keyStroke, deleteGroups, al); - + JMenuItem annotationColumn = new JMenuItem( MessageManager.getString("action.select_by_annotation")); annotationColumn.addActionListener(new ActionListener() @@ -925,7 +963,7 @@ public class GAlignFrame extends JInternalFrame annotationColumn_actionPerformed(e); } }); - + JMenuItem createGroup = new JMenuItem( MessageManager.getString("action.create_group")); keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_G, @@ -939,7 +977,7 @@ public class GAlignFrame extends JInternalFrame } }; addMenuActionAndAccelerator(keyStroke, createGroup, al); - + JMenuItem unGroup = new JMenuItem( MessageManager.getString("action.remove_group")); keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_G, @@ -955,7 +993,7 @@ public class GAlignFrame extends JInternalFrame } }; addMenuActionAndAccelerator(keyStroke, unGroup, al); - + copy.setText(MessageManager.getString("action.copy")); keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_C, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), false); @@ -969,7 +1007,7 @@ public class GAlignFrame extends JInternalFrame } }; addMenuActionAndAccelerator(keyStroke, copy, al); - + cut.setText(MessageManager.getString("action.cut")); keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_X, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), false); @@ -982,7 +1020,7 @@ public class GAlignFrame extends JInternalFrame } }; addMenuActionAndAccelerator(keyStroke, cut, al); - + JMenuItem delete = new JMenuItem( MessageManager.getString("action.delete")); delete.addActionListener(new ActionListener() @@ -993,7 +1031,7 @@ public class GAlignFrame extends JInternalFrame delete_actionPerformed(e); } }); - + pasteMenu.setText(MessageManager.getString("action.paste")); JMenuItem pasteNew = new JMenuItem( MessageManager.getString("label.to_new_alignment")); @@ -1006,11 +1044,18 @@ public class GAlignFrame extends JInternalFrame @Override public void actionPerformed(ActionEvent e) { - pasteNew_actionPerformed(e); + try + { + pasteNew_actionPerformed(e); + } catch (IOException | InterruptedException e1) + { + // TODO Auto-generated catch block + e1.printStackTrace(); + } } }; addMenuActionAndAccelerator(keyStroke, pasteNew, al); - + JMenuItem pasteThis = new JMenuItem( MessageManager.getString("label.to_this_alignment")); keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_V, @@ -1020,11 +1065,18 @@ public class GAlignFrame extends JInternalFrame @Override public void actionPerformed(ActionEvent e) { - pasteThis_actionPerformed(e); + try + { + pasteThis_actionPerformed(e); + } catch (IOException | InterruptedException e1) + { + // TODO Auto-generated catch block + e1.printStackTrace(); + } } }; addMenuActionAndAccelerator(keyStroke, pasteThis, al); - + JMenuItem createPNG = new JMenuItem("PNG"); createPNG.addActionListener(new ActionListener() { @@ -1036,7 +1088,6 @@ public class GAlignFrame extends JInternalFrame }); createPNG.setActionCommand( MessageManager.getString("label.save_png_image")); - JMenuItem font = new JMenuItem(MessageManager.getString("action.font")); font.addActionListener(new ActionListener() { @@ -1066,7 +1117,7 @@ public class GAlignFrame extends JInternalFrame createEPS(null); } }); - + JMenuItem createSVG = new JMenuItem("SVG"); createSVG.addActionListener(new ActionListener() { @@ -1076,7 +1127,7 @@ public class GAlignFrame extends JInternalFrame createSVG(null); } }); - + JMenuItem loadTreeMenuItem = new JMenuItem( MessageManager.getString("label.load_associated_tree")); loadTreeMenuItem.setActionCommand( @@ -1089,7 +1140,7 @@ public class GAlignFrame extends JInternalFrame loadTreeMenuItem_actionPerformed(e); } }); - + scaleAbove.setVisible(false); scaleAbove.setText(MessageManager.getString("action.scale_above")); scaleAbove.addActionListener(new ActionListener() @@ -1140,15 +1191,15 @@ public class GAlignFrame extends JInternalFrame .setText(MessageManager.getString("label.automatic_scrolling")); followHighlightMenuItem.addActionListener(new ActionListener() { - + @Override public void actionPerformed(ActionEvent e) { followHighlight_actionPerformed(); } - + }); - + sortByTreeMenu .setText(MessageManager.getString("action.by_tree_order")); sort.setText(MessageManager.getString("action.sort")); @@ -1159,12 +1210,12 @@ public class GAlignFrame extends JInternalFrame { buildTreeSortMenu(); } - + @Override public void menuDeselected(MenuEvent e) { } - + @Override public void menuCanceled(MenuEvent e) { @@ -1175,17 +1226,17 @@ public class GAlignFrame extends JInternalFrame sort.add(sortByAnnotScore); sort.addMenuListener(new javax.swing.event.MenuListener() { - + @Override public void menuCanceled(MenuEvent e) { } - + @Override public void menuDeselected(MenuEvent e) { } - + @Override public void menuSelected(MenuEvent e) { @@ -1248,7 +1299,7 @@ public class GAlignFrame extends JInternalFrame showReverse_actionPerformed(true); } }); - + JMenuItem extractScores = new JMenuItem( MessageManager.getString("label.extract_scores")); extractScores.addActionListener(new ActionListener() @@ -1261,10 +1312,10 @@ public class GAlignFrame extends JInternalFrame }); extractScores.setVisible(true); // JBPNote: TODO: make gui for regex based score extraction - + // for show products actions see AlignFrame.canShowProducts showProducts.setText(MessageManager.getString("label.get_cross_refs")); - + runGroovy.setText(MessageManager.getString("label.run_groovy")); runGroovy.setToolTipText( MessageManager.getString("label.run_groovy_tip")); @@ -1276,7 +1327,7 @@ public class GAlignFrame extends JInternalFrame runGroovy_actionPerformed(); } }); - + JMenuItem openFeatureSettings = new JMenuItem( MessageManager.getString("action.feature_settings")); openFeatureSettings.addActionListener(new ActionListener() @@ -1297,7 +1348,7 @@ public class GAlignFrame extends JInternalFrame fetchSequence_actionPerformed(e); } }); - + JMenuItem associatedData = new JMenuItem( MessageManager.getString("label.load_features_annotations")); associatedData.addActionListener(new ActionListener() @@ -1305,7 +1356,14 @@ public class GAlignFrame extends JInternalFrame @Override public void actionPerformed(ActionEvent e) { - associatedData_actionPerformed(e); + try + { + associatedData_actionPerformed(e); + } catch (IOException | InterruptedException e1) + { + // TODO Auto-generated catch block + e1.printStackTrace(); + } } }); autoCalculate.setText( @@ -1349,7 +1407,7 @@ public class GAlignFrame extends JInternalFrame listenToViewSelections_actionPerformed(e); } }); - + JMenu addSequenceMenu = new JMenu( MessageManager.getString("label.add_sequences")); JMenuItem addFromFile = new JMenuItem( @@ -1495,7 +1553,7 @@ public class GAlignFrame extends JInternalFrame hiddenMarkers_actionPerformed(e); } }); - + JMenuItem invertColSel = new JMenuItem( MessageManager.getString("action.invert_column_selection")); keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_I, @@ -1511,7 +1569,7 @@ public class GAlignFrame extends JInternalFrame } }; addMenuActionAndAccelerator(keyStroke, invertColSel, al); - + showComplementMenuItem.setVisible(false); showComplementMenuItem.addActionListener(new ActionListener() { @@ -1521,7 +1579,7 @@ public class GAlignFrame extends JInternalFrame showComplement_actionPerformed(showComplementMenuItem.getState()); } }); - + tabbedPane.addChangeListener(new javax.swing.event.ChangeListener() { @Override @@ -1542,7 +1600,7 @@ public class GAlignFrame extends JInternalFrame tabbedPane_mousePressed(e); } } - + @Override public void mouseReleased(MouseEvent e) { @@ -1560,7 +1618,7 @@ public class GAlignFrame extends JInternalFrame tabbedPane_focusGained(e); } }); - + JMenuItem save = new JMenuItem(MessageManager.getString("action.save")); keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_S, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), false); @@ -1573,7 +1631,7 @@ public class GAlignFrame extends JInternalFrame } }; addMenuActionAndAccelerator(keyStroke, save, al); - + reload.setEnabled(false); reload.setText(MessageManager.getString("action.reload")); reload.addActionListener(new ActionListener() @@ -1584,7 +1642,7 @@ public class GAlignFrame extends JInternalFrame reload_actionPerformed(e); } }); - + JMenuItem newView = new JMenuItem( MessageManager.getString("action.new_view")); keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_T, @@ -1598,11 +1656,11 @@ public class GAlignFrame extends JInternalFrame } }; addMenuActionAndAccelerator(keyStroke, newView, al); - + tabbedPane.setToolTipText("" + MessageManager.getString("label.rename_tab_eXpand_reGroup") + ""); - + formatMenu.setText(MessageManager.getString("action.format")); JMenu selectMenu = new JMenu(MessageManager.getString("action.select")); @@ -1616,7 +1674,7 @@ public class GAlignFrame extends JInternalFrame idRightAlign_actionPerformed(e); } }); - + gatherViews.setEnabled(false); gatherViews.setText(MessageManager.getString("action.gather_views")); keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_G, 0, false); @@ -1629,7 +1687,7 @@ public class GAlignFrame extends JInternalFrame } }; addMenuActionAndAccelerator(keyStroke, gatherViews, al); - + expandViews.setEnabled(false); expandViews.setText(MessageManager.getString("action.expand_views")); keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_X, 0, false); @@ -1642,7 +1700,7 @@ public class GAlignFrame extends JInternalFrame } }; addMenuActionAndAccelerator(keyStroke, expandViews, al); - + JMenuItem pageSetup = new JMenuItem( MessageManager.getString("action.page_setup")); pageSetup.addActionListener(new ActionListener() @@ -1675,12 +1733,56 @@ public class GAlignFrame extends JInternalFrame selectHighlightedColumns_actionPerformed(actionEvent); } }; + hmmBuild.setText(MessageManager.getString("label.hmmbuild")); + hmmBuild.addActionListener(new ActionListener() + { + + @Override + public void actionPerformed(ActionEvent e) + { + try + { + hmmBuild_actionPerformed(e); + } catch (IOException e1) + { + // TODO Auto-generated catch block + e1.printStackTrace(); + } catch (InterruptedException e1) + { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + } + + }); + hmmAlign.setText(MessageManager.getString("label.hmmalign")); + hmmAlign.addActionListener(new ActionListener() + { + + @Override + public void actionPerformed(ActionEvent e) + { + try + { + hmmAlign_actionPerformed(e); + } catch (IOException e1) + { + // TODO Auto-generated catch block + e1.printStackTrace(); + } catch (InterruptedException e1) + { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + } + + }); selectHighlighted.addActionListener(al); JMenu tooltipSettingsMenu = new JMenu( MessageManager.getString("label.sequence_id_tooltip")); JMenu autoAnnMenu = new JMenu( MessageManager.getString("label.autocalculated_annotation")); - + JMenu exportImageMenu = new JMenu( MessageManager.getString("label.export_image")); JMenu fileMenu = new JMenu(MessageManager.getString("action.file")); @@ -1693,7 +1795,8 @@ public class GAlignFrame extends JInternalFrame alignFrameMenuBar.add(colourMenu); alignFrameMenuBar.add(calculateMenu); alignFrameMenuBar.add(webService); - + alignFrameMenuBar.add(hmmerMenu); + fileMenu.add(fetchSequence); fileMenu.add(addSequenceMenu); fileMenu.add(reload); @@ -1712,7 +1815,7 @@ public class GAlignFrame extends JInternalFrame fileMenu.add(associatedData); fileMenu.addSeparator(); fileMenu.add(closeMenuItem); - + pasteMenu.add(pasteNew); pasteMenu.add(pasteThis); editMenu.add(undoMenuItem); @@ -1734,7 +1837,7 @@ public class GAlignFrame extends JInternalFrame // editMenu.add(justifyRightMenuItem); // editMenu.addSeparator(); editMenu.add(padGapsMenuitem); - + showMenu.add(showAllColumns); showMenu.add(showAllSeqs); showMenu.add(showAllhidden); @@ -1762,7 +1865,7 @@ public class GAlignFrame extends JInternalFrame viewMenu.add(alignmentProperties); viewMenu.addSeparator(); viewMenu.add(overviewMenuItem); - + annotationsMenu.add(annotationPanelMenuItem); annotationsMenu.addSeparator(); annotationsMenu.add(showAllAlAnnotations); @@ -1806,7 +1909,7 @@ public class GAlignFrame extends JInternalFrame calculateMenu.add(extractScores); calculateMenu.addSeparator(); calculateMenu.add(runGroovy); - + webServiceNoServices = new JMenuItem( MessageManager.getString("label.no_services")); webService.add(webServiceNoServices); @@ -1821,7 +1924,7 @@ public class GAlignFrame extends JInternalFrame this.getContentPane().add(statusPanel, java.awt.BorderLayout.SOUTH); statusPanel.add(statusBar, null); this.getContentPane().add(tabbedPane, java.awt.BorderLayout.CENTER); - + formatMenu.add(font); formatMenu.addSeparator(); formatMenu.add(wrapMenuItem); @@ -1855,6 +1958,21 @@ public class GAlignFrame extends JInternalFrame // selectMenu.add(listenToViewSelections); } + public void hmmerMenu_actionPerformed(ActionEvent e) + { + + } + + /** + * Constructs the entries on the HMMER menu (does not add them to the menu). + */ + protected void initHMMERMenu() + { + hmmAlign = new JMenuItem(MessageManager.getString("label.hmmalign")); + hmmBuild = new JMenuItem(MessageManager.getString("label.hmmbuild")); + hmmSearch = new JMenuItem(MessageManager.getString("label.hmmsearch")); + } + /** * Constructs the entries on the Colour menu (but does not add them to the * menu). @@ -2326,10 +2444,12 @@ public class GAlignFrame extends JInternalFrame } protected void pasteNew_actionPerformed(ActionEvent e) + throws IOException, InterruptedException { } protected void pasteThis_actionPerformed(ActionEvent e) + throws IOException, InterruptedException { } @@ -2337,6 +2457,28 @@ public class GAlignFrame extends JInternalFrame { } + protected void autoAlignSeqs_actionPerformed(boolean selected) + { + } + + protected void hmmAlign_actionPerformed(ActionEvent e) + throws IOException, InterruptedException + { + } + + protected void changeHMMERLocation_actionPerformed(ActionEvent e) + { + } + + protected void hmmBuild_actionPerformed(ActionEvent e) + throws IOException, InterruptedException + { + } + + protected void hmmSearch_actionPerformed(ActionEvent e) + { + } + public void createPNG(java.io.File f) { } @@ -2452,6 +2594,7 @@ public class GAlignFrame extends JInternalFrame } public void associatedData_actionPerformed(ActionEvent e) + throws IOException, InterruptedException { } @@ -2648,4 +2791,20 @@ public class GAlignFrame extends JInternalFrame protected void showComplement_actionPerformed(boolean complement) { } + + protected void showInformationHistogram_actionPerformed(ActionEvent e) + { + // TODO Auto-generated method stub + + } + + protected void showHMMSequenceLogo_actionPerformed(ActionEvent e) + { + + } + + protected void normaliseHMMSequenceLogo_actionPerformed(ActionEvent e) + { + + } } diff --git a/src/jalview/jbgui/GPreferences.java b/src/jalview/jbgui/GPreferences.java index 633d2b8..bb6f223 100755 --- a/src/jalview/jbgui/GPreferences.java +++ b/src/jalview/jbgui/GPreferences.java @@ -45,6 +45,7 @@ import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; +import javax.swing.AbstractButton; import javax.swing.AbstractCellEditor; import javax.swing.BorderFactory; import javax.swing.ButtonGroup; @@ -95,11 +96,11 @@ public class GPreferences extends JPanel protected JCheckBox rightAlign = new JCheckBox(); - protected JComboBox fontSizeCB = new JComboBox(); + protected JComboBox fontSizeCB = new JComboBox<>(); - protected JComboBox fontStyleCB = new JComboBox(); + protected JComboBox fontStyleCB = new JComboBox<>(); - protected JComboBox fontNameCB = new JComboBox(); + protected JComboBox fontNameCB = new JComboBox<>(); protected JCheckBox showOccupancy = new JCheckBox(); @@ -111,15 +112,15 @@ public class GPreferences extends JPanel protected JCheckBox scaleProteinToCdna = new JCheckBox(); - protected JComboBox gapSymbolCB = new JComboBox(); + protected JComboBox gapSymbolCB = new JComboBox<>(); protected JCheckBox wrap = new JCheckBox(); - protected JComboBox sortby = new JComboBox(); + protected JComboBox sortby = new JComboBox<>(); - protected JComboBox sortAnnBy = new JComboBox(); + protected JComboBox sortAnnBy = new JComboBox<>(); - protected JComboBox sortAutocalc = new JComboBox(); + protected JComboBox sortAutocalc = new JComboBox<>(); protected JCheckBox startupCheckbox = new JCheckBox(); @@ -142,10 +143,15 @@ public class GPreferences extends JPanel protected JCheckBox showConsensLogo = new JCheckBox(); + protected JCheckBox showInformationHistogram = new JCheckBox(); + + protected JCheckBox showHMMLogo = new JCheckBox(); + protected JCheckBox showDbRefTooltip = new JCheckBox(); protected JCheckBox showNpTooltip = new JCheckBox(); + /* * Structure tab and components */ @@ -159,7 +165,7 @@ public class GPreferences extends JPanel protected JCheckBox addTempFactor = new JCheckBox(); - protected JComboBox structViewer = new JComboBox(); + protected JComboBox structViewer = new JComboBox<>(); protected JTextField chimeraPath = new JTextField(); @@ -176,9 +182,9 @@ public class GPreferences extends JPanel protected JPanel maxColour = new JPanel(); - protected JComboBox protColour = new JComboBox(); + protected JComboBox protColour = new JComboBox<>(); - protected JComboBox nucColour = new JComboBox(); + protected JComboBox nucColour = new JComboBox<>(); /* * Connections tab components @@ -216,7 +222,7 @@ public class GPreferences extends JPanel /* * Output tab components */ - protected JComboBox epsRendering = new JComboBox(); + protected JComboBox epsRendering = new JComboBox<>(); protected JLabel userIdWidthlabel = new JLabel(); @@ -252,6 +258,33 @@ public class GPreferences extends JPanel protected JCheckBox sortByTree = new JCheckBox(); /* + * hmmer tab and components + */ + protected JPanel hmmerTab = new JPanel(); + + protected JCheckBox trimTermini = new JCheckBox(); + + protected ButtonGroup backgroundFreqSource = new ButtonGroup(); + + protected AbstractButton uniprot = new JCheckBox(); + + protected AbstractButton alignment = new JCheckBox(); + + protected JLabel sequencesToKeep = new JLabel(); + + protected JTextField numberOfSequencesToKeepField = new JTextField(); + + protected JLabel installationLocation = new JLabel(); + + protected JCheckBox isHMMERInstalled = new JCheckBox(); + + protected JTextField hmmerPath = new JTextField(); + + protected JLabel hmmsearch = new JLabel(); + + protected JLabel hmmalign = new JLabel(); + + /* * DAS Settings tab */ protected JPanel dasTab = new JPanel(); @@ -261,6 +294,8 @@ public class GPreferences extends JPanel */ protected JPanel wsTab = new JPanel(); + + /** * Creates a new GPreferences object. */ @@ -309,6 +344,8 @@ public class GPreferences extends JPanel tabbedPane.add(initEditingTab(), MessageManager.getString("label.editing")); + tabbedPane.add(initHMMERTab(), MessageManager.getString("label.hmmer")); + /* * See DasSourceBrowser for the real work of configuring this tab. */ @@ -341,6 +378,16 @@ public class GPreferences extends JPanel return; } } + else if (lastTab == hmmerTab + && tabbedPane.getSelectedComponent() != hmmerTab + && isHMMERInstalled.isSelected()) + { + if (!validateHMMER()) + { + tabbedPane.setSelectedComponent(hmmerTab); + } + return; + } lastTab = tabbedPane.getSelectedComponent(); } @@ -377,6 +424,95 @@ public class GPreferences extends JPanel } /** + * Initialises the hmmer tabbed panel. + * + * @return + */ + private JPanel initHMMERTab() + { + hmmerTab.setLayout(null); + + hmmalign.setFont(LABEL_FONT); + hmmalign.setText(MessageManager.getString("label.hmmalign_label")); + hmmalign.setBounds(new Rectangle(22, 10, 200, 23)); + + trimTermini.setFont(LABEL_FONT); + trimTermini.setText(MessageManager.getString("label.trim_termini")); + trimTermini.setBounds(new Rectangle(22, 30, 200, 23)); + + hmmsearch.setFont(LABEL_FONT); + hmmsearch.setText(MessageManager.getString("label.hmmsearch_label")); + hmmsearch.setBounds(new Rectangle(250, 10, 200, 23)); + + sequencesToKeep.setFont(LABEL_FONT); + sequencesToKeep + .setText(MessageManager.getString("label.no_of_sequences")); + sequencesToKeep.setBounds(new Rectangle(250, 30, 125, 23)); + numberOfSequencesToKeepField.setBounds(new Rectangle(375, 30, 40, 23)); + + isHMMERInstalled.setFont(LABEL_FONT); + isHMMERInstalled.setText( + MessageManager.getString("label.hmmer_installed")); + isHMMERInstalled.setBounds(new Rectangle(22, 180, 200, 23)); + isHMMERInstalled.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + boolean status = isHMMERInstalled.isSelected(); + installationLocation.setEnabled(status); + hmmerPath.setEnabled(status); + } + }); + installationLocation.setFont(LABEL_FONT); + installationLocation.setText( + MessageManager.getString("label.change_hmmer_location")); + installationLocation.setBounds(new Rectangle(22, 200, 200, 23)); + hmmerPath.setBounds(new Rectangle(22, 220, 200, 23)); + hmmerPath.addMouseListener(new MouseAdapter() + { + @Override + public void mouseClicked(MouseEvent e) + { + if (e.getClickCount() == 2) + { + String chosen = openFileChooser(true); + if (chosen != null) + { + hmmerPath.setText(chosen); + } + } + } + }); + + backgroundFreqSource.add(uniprot); + backgroundFreqSource.add(alignment); + backgroundFreqSource.setSelected(uniprot.getModel(), true); + + uniprot.setText(MessageManager.getString("label.freq_uniprot")); + uniprot.setFont(LABEL_FONT); + uniprot.setBounds(new Rectangle(22, 260, 255, 23)); + + alignment.setText(MessageManager.getString("label.freq_alignment")); + alignment.setFont(LABEL_FONT); + alignment.setBounds(new Rectangle(22, 280, 255, 23)); + + hmmerTab.add(uniprot); + hmmerTab.add(alignment); + hmmerTab.add(hmmalign); + hmmerTab.add(hmmsearch); + hmmerTab.add(installationLocation); + hmmerTab.add(hmmerPath); + hmmerTab.add(trimTermini); + hmmerTab.add(sequencesToKeep); + hmmerTab.add(sequencesToKeep); + hmmerTab.add(numberOfSequencesToKeepField); + hmmerTab.add(isHMMERInstalled); + + return hmmerTab; + } + + /** * Initialises the Output tabbed panel. * * @return @@ -1061,7 +1197,7 @@ public class GPreferences extends JPanel { if (e.getClickCount() == 2) { - String chosen = openFileChooser(); + String chosen = openFileChooser(false); if (chosen != null) { chimeraPath.setText(chosen); @@ -1116,10 +1252,14 @@ public class GPreferences extends JPanel * * @return */ - protected String openFileChooser() + protected String openFileChooser(boolean forFolder) { String choice = null; JFileChooser chooser = new JFileChooser(); + if (forFolder) + { + chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + } // chooser.setFileView(new JalviewFileView()); chooser.setDialogTitle( @@ -1150,11 +1290,31 @@ public class GPreferences extends JPanel return true; } + /** + * Validate the hmmer tab preferences; if invalid, set focus on this tab. + * + * @param e + */ + protected boolean validateHMMER(FocusEvent e) + { + if (!validateHMMER()) + { + e.getComponent().requestFocusInWindow(); + return false; + } + return true; + } + protected boolean validateStructure() { return false; } + protected boolean validateHMMER() + { + return false; + } + /** * Initialises the Visual tabbed panel. * @@ -1642,4 +1802,9 @@ public class GPreferences extends JPanel } } + + public void hmmerPath_actionPerformed(ActionEvent e) + { + + } } diff --git a/src/jalview/renderer/AnnotationRenderer.java b/src/jalview/renderer/AnnotationRenderer.java index 41772d4..d37eac1 100644 --- a/src/jalview/renderer/AnnotationRenderer.java +++ b/src/jalview/renderer/AnnotationRenderer.java @@ -29,6 +29,7 @@ import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.Annotation; import jalview.datamodel.ColumnSelection; import jalview.datamodel.HiddenColumns; +import jalview.datamodel.HiddenMarkovModel; import jalview.datamodel.ProfilesI; import jalview.schemes.ColourSchemeI; import jalview.schemes.NucleotideColourScheme; @@ -73,6 +74,9 @@ public class AnnotationRenderer boolean av_renderHistogram = true, av_renderProfile = true, av_normaliseProfile = false; + boolean av_renderInformationHistogram = true, av_renderHMMProfile = true, + av_normaliseHMMProfile = false; + ResidueShaderI profcolour = null; private ColumnSelection columnSelection; @@ -87,6 +91,8 @@ public class AnnotationRenderer private boolean av_ignoreGapsConsensus; + private boolean av_ignoreBelowBackground; + /** * attributes set from AwtRenderPanelI */ @@ -324,6 +330,9 @@ public class AnnotationRenderer av_renderHistogram = av.isShowConsensusHistogram(); av_renderProfile = av.isShowSequenceLogo(); av_normaliseProfile = av.isNormaliseSequenceLogo(); + av_renderInformationHistogram = av.isShowInformationHistogram(); + av_renderHMMProfile = av.isShowHMMSequenceLogo(); + av_normaliseHMMProfile = av.isNormaliseHMMSequenceLogo(); profcolour = av.getResidueShading(); if (profcolour == null || profcolour.getColourScheme() == null) { @@ -343,8 +352,11 @@ public class AnnotationRenderer complementConsensus = av.getComplementConsensusHash(); hStrucConsensus = av.getRnaStructureConsensusHash(); av_ignoreGapsConsensus = av.isIgnoreGapsConsensus(); + av_ignoreBelowBackground = av.isIgnoreBelowBackground(); } + + /** * Returns profile data; the first element is the profile type, the second is * the number of distinct values, the third the total count, and the remainder @@ -360,8 +372,16 @@ public class AnnotationRenderer // properties/rendering attributes as a global 'alignment group' which holds // all vis settings for the alignment as a whole rather than a subset // - if (aa.autoCalculated && (aa.label.startsWith("Consensus") - || aa.label.startsWith("cDNA Consensus"))) + if (aa.label.contains("_HMM")) + { + HiddenMarkovModel hmm = aa.sequenceRef.getHMM(); + return AAFrequency.extractHMMProfile(hmm, column, + av_ignoreBelowBackground); // TODO check if this follows standard + // pipeline + } + if (aa.autoCalculated + && (aa.label.startsWith("Consensus") || aa.label + .startsWith("cDNA Consensus"))) { boolean forComplement = aa.label.startsWith("cDNA Consensus"); if (aa.groupRef != null && aa.groupRef.consensusData != null @@ -503,6 +523,12 @@ public class AnnotationRenderer renderProfile = av_renderProfile; normaliseProfile = av_normaliseProfile; } + else if (row.label.contains("_HMM")) + { + renderHistogram = av_renderInformationHistogram; + renderProfile = av_renderHMMProfile; + normaliseProfile = av_normaliseHMMProfile; + } else { renderHistogram = true; diff --git a/src/jalview/renderer/ResidueShader.java b/src/jalview/renderer/ResidueShader.java index 7e4f211..fa7cf1f 100644 --- a/src/jalview/renderer/ResidueShader.java +++ b/src/jalview/renderer/ResidueShader.java @@ -408,4 +408,11 @@ public class ResidueShader implements ResidueShaderI { colourScheme = cs; } + + @Override + public void setInformation(ProfilesI info) + { + // TODO Auto-generated method stub + + } } diff --git a/src/jalview/renderer/ResidueShaderI.java b/src/jalview/renderer/ResidueShaderI.java index 4d97171..d0b25b6 100644 --- a/src/jalview/renderer/ResidueShaderI.java +++ b/src/jalview/renderer/ResidueShaderI.java @@ -35,6 +35,8 @@ public interface ResidueShaderI public abstract void setConsensus(ProfilesI cons); + public abstract void setInformation(ProfilesI info); + public abstract boolean conservationApplied(); public abstract void setConservationApplied(boolean conservationApplied); diff --git a/src/jalview/schemes/HMMERColourScheme.java b/src/jalview/schemes/HMMERColourScheme.java new file mode 100644 index 0000000..f3691f0 --- /dev/null +++ b/src/jalview/schemes/HMMERColourScheme.java @@ -0,0 +1,161 @@ +package jalview.schemes; + +import jalview.datamodel.AnnotatedCollectionI; +import jalview.datamodel.HiddenMarkovModel; +import jalview.datamodel.SequenceCollectionI; +import jalview.datamodel.SequenceI; +import jalview.util.ColorUtils; +import jalview.util.Comparison; + +import java.awt.Color; +import java.util.List; +import java.util.Map; + +public class HMMERColourScheme extends ResidueColourScheme +{ + + AnnotatedCollectionI alignment; + + HiddenMarkovModel hmm; + + boolean peptideSpecific; + + boolean nucleotideSpecific; + + public HMMERColourScheme(HiddenMarkovModel markov) + { + hmm = markov; + } + public HMMERColourScheme() + { + + } + + + @Override + public Color findColour(char symbol, int position, SequenceI seq, + String consensusResidue, float pid) + { + if (hmm ==null) + { + return Color.white; + } + return findColour(symbol, position); + } + + /** + * Returns the colour at a particular symbol at a column in the alignment. + * + * @param symbol + * @param position + * @return Red for an insertion, white for a gap, orange for a negative + * information content, white to blue for increasing information + * content. + */ + private Color findColour(char symbol, int position) + { + + if (Comparison.isGap(symbol)) + { + return Color.white; + } + if (Character.isLowerCase(symbol)) + { + return new Color(230, 0, 0); + } + Double prob; + prob = hmm.getMatchEmissionProbability(position, symbol); + double freq = 0; + String alpha = hmm.getAlphabetType(); + if (!ResidueProperties.backgroundFrequencies.get(alpha).containsKey(symbol)) + { + return Color.white; + } + else + { + freq = ResidueProperties.backgroundFrequencies.get(alpha).get(symbol); + } + if (prob == 0) + { + return new Color(230, 0, 0); + } + Double value = Math.log(prob / freq); + Color colour = null; + if (value > 0) + { + + colour = ColorUtils.getGraduatedColour(value.floatValue(), 0, + Color.WHITE, 4.52f, Color.blue); + } + else if (value < 0) + { + return Color.ORANGE; + + } + return colour; + + } + + + + + + + @Override + public void alignmentChanged(AnnotatedCollectionI collection, + Map hiddenReps) + { + List seqs = collection.getSequences(); + for (SequenceI seq : seqs) + { + if (seq.getHMM() != null) + { + hmm = seq.getHMM(); + break; + } + } + + } + + + + @Override + public ColourSchemeI getInstance(AnnotatedCollectionI sg, + Map hiddenRepSequences) + { + HiddenMarkovModel markov = null; + List seqs = sg.getSequences(); + for (SequenceI seq : seqs) + { + if (seq.getHMM() != null) + { + markov = seq.getHMM(); + break; + } + } + HMMERColourScheme colour = new HMMERColourScheme(markov); + return colour; + + } + + @Override + public boolean isApplicableTo(AnnotatedCollectionI ac) + { + return true; + + } + + @Override + public String getSchemeName() + { + + return JalviewColourScheme.HMMER.name(); + } + + @Override + public boolean isSimple() + { + return false; + } + +} diff --git a/src/jalview/schemes/JalviewColourScheme.java b/src/jalview/schemes/JalviewColourScheme.java index e1fc02d..e9778b4 100644 --- a/src/jalview/schemes/JalviewColourScheme.java +++ b/src/jalview/schemes/JalviewColourScheme.java @@ -42,7 +42,8 @@ public enum JalviewColourScheme Nucleotide("Nucleotide", NucleotideColourScheme.class), PurinePyrimidine("Purine/Pyrimidine", PurinePyrimidineColourScheme.class), RNAHelices("RNA Helices", RNAHelicesColour.class), - TCoffee("T-Coffee Scores", TCoffeeColourScheme.class); + TCoffee("T-Coffee Scores", TCoffeeColourScheme.class), + HMMER("HMMER", HMMERColourScheme.class); // RNAInteraction("RNA Interaction type", RNAInteractionColourScheme.class) private String name; diff --git a/src/jalview/schemes/ResidueProperties.java b/src/jalview/schemes/ResidueProperties.java index 55df1d1..8a86752 100755 --- a/src/jalview/schemes/ResidueProperties.java +++ b/src/jalview/schemes/ResidueProperties.java @@ -39,14 +39,17 @@ public class ResidueProperties public static final int[] purinepyrimidineIndex; - public static final Map aa3Hash = new HashMap(); + public static final Map aa3Hash = new HashMap<>(); - public static final Map aa2Triplet = new HashMap(); + public static final Map aa2Triplet = new HashMap<>(); - public static final Map nucleotideName = new HashMap(); + public static final Map nucleotideName = new HashMap<>(); // lookup from modified amino acid (e.g. MSE) to canonical form (e.g. MET) - public static final Map modifications = new HashMap(); + public static final Map modifications = new HashMap<>(); + + // residue background frequencies across different alphabets + public static final Map> backgroundFrequencies = new HashMap<>(); static { @@ -503,18 +506,18 @@ public class ResidueProperties /** * Nucleotide Ambiguity Codes */ - public static final Map ambiguityCodes = new Hashtable(); + public static final Map ambiguityCodes = new Hashtable<>(); /** * Codon triplets with additional symbols for unambiguous codons that include * ambiguity codes */ - public static final Hashtable codonHash2 = new Hashtable(); + public static final Hashtable codonHash2 = new Hashtable<>(); /** * all ambiguity codes for a given base */ - public final static Hashtable> _ambiguityCodes = new Hashtable>(); + public final static Hashtable> _ambiguityCodes = new Hashtable<>(); static { @@ -638,7 +641,7 @@ public class ResidueProperties List codesfor = _ambiguityCodes.get(r); if (codesfor == null) { - _ambiguityCodes.put(r, codesfor = new ArrayList()); + _ambiguityCodes.put(r, codesfor = new ArrayList<>()); } if (!codesfor.contains(acode.getKey())) { @@ -755,27 +758,27 @@ public class ResidueProperties } // Stores residue codes/names and colours and other things - public static Map> propHash = new Hashtable>(); + public static Map> propHash = new Hashtable<>(); - public static Map hydrophobic = new Hashtable(); + public static Map hydrophobic = new Hashtable<>(); - public static Map polar = new Hashtable(); + public static Map polar = new Hashtable<>(); - public static Map small = new Hashtable(); + public static Map small = new Hashtable<>(); - public static Map positive = new Hashtable(); + public static Map positive = new Hashtable<>(); - public static Map negative = new Hashtable(); + public static Map negative = new Hashtable<>(); - public static Map charged = new Hashtable(); + public static Map charged = new Hashtable<>(); - public static Map aromatic = new Hashtable(); + public static Map aromatic = new Hashtable<>(); - public static Map aliphatic = new Hashtable(); + public static Map aliphatic = new Hashtable<>(); - public static Map tiny = new Hashtable(); + public static Map tiny = new Hashtable<>(); - public static Map proline = new Hashtable(); + public static Map proline = new Hashtable<>(); static { @@ -1157,7 +1160,7 @@ public class ResidueProperties public static Hashtable toDssp3State; static { - toDssp3State = new Hashtable(); + toDssp3State = new Hashtable<>(); toDssp3State.put("H", "H"); toDssp3State.put("E", "E"); toDssp3State.put("C", " "); @@ -2515,6 +2518,57 @@ public class ResidueProperties } + static + { + Map amino = new HashMap<>(); + amino.put('A', 0.0826f); + amino.put('Q', 0.0393f); + amino.put('L', 0.0965f); + amino.put('S', 0.0661f); + amino.put('R', 0.0553f); + amino.put('E', 0.0674f); + amino.put('K', 0.0582f); + amino.put('T', 0.0535f); + amino.put('N', 0.0406f); + amino.put('G', 0.0708f); + amino.put('M', 0.0241f); + amino.put('W', 0.0109f); + amino.put('D', 0.0546f); + amino.put('H', 0.0227f); + amino.put('F', 0.0386f); + amino.put('Y', 0.0292f); + amino.put('C', 0.0137f); + amino.put('I', 0.0593f); + amino.put('P', 0.0472f); + amino.put('V', 0.0686f); + backgroundFrequencies.put("amino", amino); + + } + + // TODO get correct frequencies + + static + { + Map dna = new HashMap<>(); + dna.put('A', 0.25f); + dna.put('C', 0.25f); + dna.put('T', 0.25f); + dna.put('G', 0.25f); + backgroundFrequencies.put("DNA", dna); + + } + + static + { + Map rna = new HashMap<>(); + rna.put('A', 0.25f); + rna.put('C', 0.25f); + rna.put('T', 0.25f); + rna.put('G', 0.25f); + backgroundFrequencies.put("RNA", rna); + + } + public static String getCanonicalAminoAcid(String aA) { String canonical = modifications.get(aA); @@ -2525,7 +2579,7 @@ public class ResidueProperties // / cut here public static void main(String[] args) { - Hashtable> aaProps = new Hashtable>(); + Hashtable> aaProps = new Hashtable<>(); System.out.println("my %aa = {"); // invert property hashes for (String pname : propHash.keySet()) @@ -2536,7 +2590,7 @@ public class ResidueProperties Vector aprops = aaProps.get(rname); if (aprops == null) { - aprops = new Vector(); + aprops = new Vector<>(); aaProps.put(rname, aprops); } Integer hasprop = phash.get(rname); @@ -2578,7 +2632,7 @@ public class ResidueProperties public static List getResidues(boolean forNucleotide, boolean includeAmbiguous) { - List result = new ArrayList(); + List result = new ArrayList<>(); if (forNucleotide) { for (String nuc : nucleotideName.keySet()) diff --git a/src/jalview/util/HMMProbabilityDistributionAnalyser.java b/src/jalview/util/HMMProbabilityDistributionAnalyser.java new file mode 100644 index 0000000..c84b177 --- /dev/null +++ b/src/jalview/util/HMMProbabilityDistributionAnalyser.java @@ -0,0 +1,974 @@ +package jalview.util; + +import jalview.datamodel.AlignmentAnnotation; +import jalview.datamodel.HiddenMarkovModel; +import jalview.datamodel.SequenceI; +import jalview.io.DataSourceType; +import jalview.io.FileParse; +import jalview.io.HMMFile; +import jalview.io.StockholmFile; +import jalview.schemes.ResidueProperties; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.FileReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.Scanner; +import java.util.Vector; + +/** + * Processes probability data. The file indexes used in this program represent + * the index of the location of a family or hmm in their respective files, + * starting from 0. + * + * @author TZVanaalten + * + */ +public class HMMProbabilityDistributionAnalyser +{ + AlignmentAnnotation reference = null; + + Vector sequences; + + HiddenMarkovModel hmm; + + // contains the raw data produced + List> raw = new ArrayList<>(); + + // contains binned data + Map binned = new HashMap<>(); + + // location of the family file + String families = "/media/sf_Shared_Folder/PFAM/Family/SeedFamilies.seed"; + + // location of the file containing the family-clan links + final static String FAMILIESTOCLAN = "/media/sf_Shared_Folder/PFAM/Family/Clanlinks.dat"; + + // location of the HMM file + String hmms = "/media/sf_Shared_Folder/PFAM/HMMs/Pfam-A.hmm"; + + // suffix for raw file + final static String RAW = "/Raw.csv"; + + // suffix for binned file + final static String BINNED = "/Binned.csv"; + + // normalisation scale + final static double SCALE = 1; + + // current position in file + int currentFilePosition = 0; + + final static String NL = "\n"; + + Random generator = new Random(); + + // current directory + String currentFolder; + + boolean keepRaw = false; + + /** + * Sets the working directory. + * + * @param path + */ + public void setFolder(String path) + { + currentFolder = path; + } + + /** + * Moves a buffered reader forward in the file by a certain amount of entries. + * Each entry in the file is delimited by '//'. + * + * @param index + * The index of the location in the file. + * @param br + * @throws IOException + */ + public void moveLocationBy(int index, BufferedReader br) + throws IOException + { + for (int i = 0; i < index; i++) + { + String line = br.readLine(); + while (!"//".equals(line)) + { + line = br.readLine(); + + } + } + + } + + /** + * Analyses a specified number of families and then saves the data. Before + * analysing the data, the previous saved data will be imported and after + * analysing this, the data is exported back into the file. The file must be + * in flat file format. + * + * @param increments + * The number of families to read before saving. + * @throws IOException + */ + public void run(int increments, boolean keepRawData) throws IOException + { + keepRaw = keepRawData; + try + { + readPreviousData(currentFolder); + BufferedReader posReader = new BufferedReader( + new FileReader(currentFolder + "/CurrentPosition.txt")); + + String line = posReader.readLine(); + posReader.close(); + currentFilePosition = Integer.parseInt(line); + } catch (Exception e) + { + System.out.println("No previous data found"); + } + + + + BufferedReader inputSTO = new BufferedReader(new FileReader(families)); + BufferedReader inputHMM = new BufferedReader(new FileReader(hmms)); + + + + moveLocationBy(currentFilePosition, inputHMM); + moveLocationBy(currentFilePosition, inputSTO); + + int filesRead = 0; + int i = 0; + while (filesRead < increments) + { + + readStockholm(inputSTO); + + readHMM(inputHMM); + + int count = countValidResidues(); + processData(count); + filesRead++; + + currentFilePosition++; + System.out.println(i); + i++; + } + + PrintWriter p = new PrintWriter( + new File(currentFolder + "/CurrentPosition.txt")); + p.print(currentFilePosition); + p.close(); + exportData(currentFolder); + raw.clear(); + binned.clear(); + + } + + /** + * Analyses all families and then saves the data. Before analysing the data, + * the previous saved data will be imported and after analysing this, the data + * is exported back into the file. The file must be in flat file format. + * + * @param increments + * The number of families to read before saving. + * @throws IOException + */ + public void runToEnd(boolean keepRawData, boolean forClans) + throws IOException + { + keepRaw = keepRawData; + BufferedReader inputSTO = null; + BufferedReader inputHMM = null; + int size = 0; + int files = 1; + try + { + if (forClans) + { + files = 603; + } + int filesRead = 0; + for (int clan = 0; clan < files; clan++) + { + System.out.println(clan); + String clanPath = ""; + int numberOfFamilies = 0; + if (forClans) + { + clanPath = currentFolder + "/Clan" + clan; + if (!new File(clanPath).exists()) + { + continue; + } + BufferedReader famCountReader = new BufferedReader( + new FileReader(clanPath + "/NumberOfFamilies.txt")); + numberOfFamilies = Integer.parseInt(famCountReader.readLine()); + } + else + { + numberOfFamilies = 1; + } + + for (int fam = 0; fam < numberOfFamilies; fam++) + { + if (forClans) + { + families = clanPath + "/Families/Fam" + fam + ".sto"; + hmms = clanPath + "/HMMs/HMM" + fam + ".hmm"; + } + + inputSTO = new BufferedReader(new FileReader(families)); + inputHMM = new BufferedReader(new FileReader(hmms)); + + + int i = 0; + boolean endReached = atEnd(inputSTO); + while (!endReached) + { + readStockholm(inputSTO); + readHMM(inputHMM); + + int count = countValidResidues(); + processData(count); + filesRead++; + System.out.println(filesRead); + endReached = atEnd(inputSTO); + } + } + } + } catch (Exception e) + { + e.printStackTrace(); + } finally + { + exportData(currentFolder); + raw.clear(); + binned.clear(); + } + } + + /** + * Reads the previous data from both files + * + * @param source + * @throws IOException + */ + public void readPreviousData(String source) throws IOException + { + readBinned(source); + if (keepRaw) + { + readRaw(source); + } + } + + /** + * Reads the previous data from the binned file. + * + * @param source + * @throws IOException + */ + public void readBinned(String source) throws IOException + { + BufferedReader input = new BufferedReader( + new FileReader(source + BINNED)); + String line = input.readLine(); + binned = new HashMap<>(); + while (!("".equals(line) || line == null)) + { + Scanner scanner = new Scanner(line); + scanner.useDelimiter(","); + String key = scanner.next(); + String value = scanner.next(); + binned.put(key, Double.valueOf(value)); + scanner.close(); + line = input.readLine(); + } + + input.close(); + } + + /** + * Reads the previous data from the raw file. + * + * @param source + * @throws IOException + */ + public void readRaw(String source) throws IOException + { + BufferedReader input = new BufferedReader(new FileReader(source + RAW)); + String line = input.readLine(); + if (line == null) + { + input.close(); + return; + } + Scanner numberScanner = new Scanner(line); + numberScanner.useDelimiter(","); + raw = new ArrayList<>(); + while (numberScanner.hasNext()) + { + numberScanner.next(); + raw.add(new ArrayList()); + } + numberScanner.close(); + + line = input.readLine(); + while (!("".equals(line) || line == null)) + { + Scanner scanner = new Scanner(line); + scanner.useDelimiter(","); + + int i = 0; + while (scanner.hasNext()) + { + String value; + value = scanner.next(); + if (!value.equals("EMPTY")) + { + raw.get(i).add(Double.parseDouble(value)); + } + else + { + raw.get(i).add(null); + } + + i++; + } + scanner.close(); + line = input.readLine(); + } + + input.close(); + } + + /** + * Counts the number of valid residues in the sequence. + * + * @return + */ + public int countValidResidues() + { + int count = 0; + + for (int width = 0; width < sequences.size(); width++) + { + for (int length = 1; length < hmm.getLength() + 1; length++) + { + char symbol; + int alignPos; + alignPos = hmm.getNodeAlignmentColumn(length); + + symbol = sequences.get(width).getCharAt(alignPos); + if (ResidueProperties.backgroundFrequencies.get("amino") + .containsKey(symbol)) + { + count++; + } + } + } + + return count; + } + + /** + * Processes data, and stores it in both a raw and binned format. + * + * @param count + */ + public void processData(int count) + { + int rawPos = 0; + if (keepRaw) + { + raw.add(new ArrayList()); + rawPos = raw.size() - 1; + } + Double total = 0d; + for (int width = 0; width < sequences.size(); width++) + { + for (int length = 1; length < hmm.getLength() + 1; length++) + { + char symbol; + int alignPos; + alignPos = hmm.getNodeAlignmentColumn(length); + + symbol = sequences.get(width).getCharAt(alignPos); + if (ResidueProperties.backgroundFrequencies.get("amino") + .containsKey(symbol)) + { + Double prob; + Float bfreq; + Double llr; + prob = hmm.getMatchEmissionProbability(alignPos, symbol); + bfreq = ResidueProperties.backgroundFrequencies.get("amino") + .get(symbol); + if (prob == 0 || bfreq == 0) + { + System.out.println("error"); + } + llr = Math.log(prob / bfreq); + if (keepRaw) + { + raw.get(rawPos).add(llr); + } + + String output; + output = String.format("%.1f", llr); + total += Double.parseDouble(output); + if ("-0.0".equals(output)) + { + output = "0.0"; + } + if (binned.containsKey(output)) + { + double prev = binned.get(output); + prev += (SCALE / count); + binned.put(output, prev); + + } + else + { + binned.put(output, SCALE / count); + } + } + } + } + System.out.println(total / count); + } + + + /** + * Reads in the sequence data from a Stockholm file. + * + * @param source + * @throws IOException + */ + public void readStockholm(BufferedReader inputSTO) throws IOException + { + FileParse parserSTO = new FileParse(inputSTO, "", DataSourceType.FILE); + StockholmFile file = new StockholmFile(parserSTO); + Vector annots = file.getAnnotations(); + + for (AlignmentAnnotation annot : annots) + { + if (annot.label.contains("Reference")) + { + reference = annot; + } + } + sequences = file.getSeqs(); + } + + /** + * Reads in the HMM data from a HMMer file. + * + * @param source + * @throws IOException + */ + public void readHMM(BufferedReader inputHMM) throws IOException + { + FileParse parserHMM = new FileParse(inputHMM, "", DataSourceType.FILE); + HMMFile file = new HMMFile(parserHMM); + hmm = file.getHMM(); + + + } + + /** + * Exports both the binned and raw data into separate files. + * + * @param location + * @throws FileNotFoundException + */ + public void exportData(String location) throws FileNotFoundException + { + PrintWriter writerBin = new PrintWriter(new File(location + BINNED)); + for (Map.Entry entry : binned.entrySet()) + { + writerBin.println(entry.getKey() + "," + entry.getValue()); + } + writerBin.close(); + if (keepRaw) + { + + PrintWriter writerRaw = new PrintWriter(new File(location + RAW)); + + StringBuilder identifier = new StringBuilder(); + + for (int i = 1; i < raw.size() + 1; i++) + { + identifier.append("Fam " + i + ","); + } + + writerRaw.println(identifier); + + boolean rowIsEmpty = false; + int row = 0; + while (!rowIsEmpty) + { + rowIsEmpty = true; + StringBuilder string = new StringBuilder(); + for (int column = 0; column < raw.size(); column++) + { + if (raw.get(column).size() <= row) + { + string.append("EMPTY,"); + } + else + { + string.append(raw.get(column).get(row) + ","); + rowIsEmpty = false; + } + } + row++; + writerRaw.println(string); + } + writerRaw.close(); + + } + + } + + /** + * Prints the specified family on the console. + * + * @param index + * @throws IOException + */ + public void printFam(int index) throws IOException + { + BufferedReader br = new BufferedReader(new FileReader(families)); + + moveLocationBy(index, br); + + String line = br.readLine(); + + while (!"//".equals(line)) + { + System.out.println(line); + line = br.readLine(); + } + System.out.println(line); + br.close(); + + } + + /** + * Prints the specified HMM on the console. + * + * @param index + * @throws IOException + */ + public void printHMM(int index) throws IOException + { + BufferedReader br = new BufferedReader(new FileReader(hmms)); + + moveLocationBy(index, br); + + String line = br.readLine(); + + while (!"//".equals(line)) + { + System.out.println(line); + line = br.readLine(); + } + System.out.println(line); + br.close(); + + } + + /** + * Prints the specified family to a .sto file. + * + * @param index + * @throws IOException + */ + public void exportFam(int index, String location) throws IOException + { + BufferedReader br = new BufferedReader(new FileReader(families)); + + moveLocationBy(index, br); + + String line = br.readLine(); + PrintWriter writer = new PrintWriter( + new FileOutputStream(new File(location), true)); + while (!"//".equals(line)) + { + writer.println(line); + line = br.readLine(); + } + writer.println(line); + writer.close(); + br.close(); + + } + + public void exportFile(BufferedReader br, String location, boolean append) + throws IOException + { + String line = br.readLine(); + PrintWriter writer = new PrintWriter( + new FileOutputStream(location, append)); + while (!"//".equals(line)) + { + writer.println(line); + line = br.readLine(); + } + writer.println(line); + writer.close(); + + + } + + public String getHMMName(int index) throws IOException + { + String name; + + BufferedReader nameFinder = new BufferedReader(new FileReader(hmms)); + + moveLocationBy(index, nameFinder); + + nameFinder.readLine(); + + Scanner scanner = new Scanner(nameFinder.readLine()); + name = scanner.next(); + name = scanner.next(); + scanner.close(); + return name; + } + + public String getFamilyName(int index) throws IOException + { + String name; + + BufferedReader nameFinder = new BufferedReader( + new FileReader(families)); + + moveLocationBy(index, nameFinder); + + nameFinder.readLine(); + + Scanner scanner = new Scanner(nameFinder.readLine()); + name = scanner.next(); + name = scanner.next(); + name = scanner.next(); + scanner.close(); + return name; + } + + /** + * Prints the specified family to a .hmm file. + * + * @param index + * @throws IOException + */ + public void exportHMM(int index, String location) throws IOException + { + + + BufferedReader br = new BufferedReader(new FileReader(hmms)); + + moveLocationBy(index, br); + + String line = br.readLine(); + + PrintWriter writer = new PrintWriter( + new FileOutputStream(new File(location), true)); + while (!"//".equals(line)) + { + writer.println(line); + line = br.readLine(); + } + writer.println(line); + writer.close(); + br.close(); + + } + + /** + * Clears all raw, binned and current position data in the current directory. + * + * @throws FileNotFoundException + */ + public void clear() throws FileNotFoundException + { + PrintWriter pos = new PrintWriter( + currentFolder + "/CurrentPosition.txt"); + pos.println("0"); + + PrintWriter raw = new PrintWriter(currentFolder + RAW); + + PrintWriter bin = new PrintWriter(currentFolder + BINNED); + + pos.close(); + bin.close(); + raw.close(); + } + + public void sortIntoClans(String directory) throws IOException + { + BufferedReader clanFinder = new BufferedReader(new FileReader(FAMILIESTOCLAN)); + BufferedReader familyReader = new BufferedReader( + new FileReader(families)); + BufferedReader hmmReader = new BufferedReader(new FileReader(hmms)); + int families = 0; + // moveLocationBy(7000, familyReader); + // moveLocationBy(7000, clanFinder); + // moveLocationBy(7000, hmmReader); + HashMap clanIndexes = new HashMap<>(); + ArrayList familyCounts = new ArrayList<>(); + int filePos = 0; + int clanCount = 0; + String line; + line = clanFinder.readLine(); + + while (!"".equals(line) && !" ".equals(line) && line != null) + { + String clanName; + boolean inClan = false; + while (!(line.indexOf("//") > -1)) + { + + if (line.indexOf("#=GF CL") > -1) + { + families++; + System.out.println(families); + inClan = true; + Scanner scanner = new Scanner(line); + scanner.next(); + scanner.next(); + clanName = scanner.next(); + scanner.close(); + + if (!clanIndexes.containsKey(clanName)) + { + clanIndexes.put(clanName, clanCount); + clanCount++; + familyCounts.add(0); + } + + + Integer clanI = clanIndexes.get(clanName); + String clanPath = directory + "/Clan" + clanI.toString(); + createFolders(clanPath); + + int index = clanIndexes.get(clanName); + exportFile(familyReader, + clanPath + "/Families/Fam" + familyCounts.get(index) + + ".sto", + false); + exportFile(hmmReader, + clanPath + "/HMMs/HMM" + familyCounts.get(index) + ".hmm", + false); + + int count = familyCounts.get(index); + count++; + familyCounts.set(index, count); + } + line = clanFinder.readLine(); + + } + if (!inClan) + { + moveLocationBy(1, familyReader); + moveLocationBy(1, hmmReader); + } + filePos++; + // System.out.println(filePos + " files read."); + line = clanFinder.readLine(); + + } + clanFinder.close(); + + for (int clan = 0; clan < clanCount; clan++) + { + PrintWriter writer = new PrintWriter( + directory + "/Clan" + clan + "/NumberOfFamilies.txt"); + int count = familyCounts.get(clan); + writer.print(count); + writer.close(); + } + + } + + public String getFamilies() + { + return families; + } + + public void setFamilies(String families) + { + this.families = currentFolder + families; + } + + public String getHmms() + { + return hmms; + } + + public void setHmms(String hmms) + { + this.hmms = currentFolder + hmms; + } + + public void alignWithinClan(String exportLocation, String clansLocation) + throws IOException, InterruptedException + { + int alignmentsExported = 0; + for (int clan = 0; clan < 604; clan++) + { + System.out.println(clan); + int famCount = 0; + String clanPath = clansLocation + "/Clan" + clan; + int numberOfFamilies; + BufferedReader br = new BufferedReader( + new FileReader(clanPath + "/NumberOfFamilies.txt")); + String line = br.readLine(); + numberOfFamilies = Integer.parseInt(line); + br.close(); + if (numberOfFamilies == 1) + { + continue; + } + final String commandExportLocation = exportLocation + "/Clan" + clan; + createFolders(commandExportLocation); + for (int family = 0; family < numberOfFamilies; family++) + { + famCount++; + ArrayList indexes = new ArrayList<>(); + for (int i = 0; i < numberOfFamilies; i++) + { + if (i != family) + { + indexes.add(i); + } + } + + int hmmIndex = getRandom(indexes); + String famPath = clanPath + "/Families/Fam" + family + ".sto"; + String hmmPath = clanPath + "/HMMs/HMM" + hmmIndex + ".hmm"; + String command = "/media/sf_Shared_Folder/hmmer/binaries/hmmalign --mapali " + + clanPath + "/Families/Fam" + hmmIndex + ".sto" + + " --trim "; + command += hmmPath + " "; + command += famPath; + final int familyIndex = family; + final Process p = Runtime.getRuntime().exec(command); + + new Thread(new Runnable() + { + @Override + public void run() + { + BufferedReader input = new BufferedReader( + new InputStreamReader(p.getInputStream())); + String line = null; + + try + { + PrintWriter writer = new PrintWriter(commandExportLocation + + "/Families/Fam" + familyIndex + ".sto"); + String lastLine = ""; + boolean dataFound = false; + while ((line = input.readLine()) != null) + { + if (line.contains("#=GR") && !dataFound) + { + writer.println(lastLine); + dataFound = true; + } + if (line.contains("#") || dataFound || " ".equals(line) + || "".equals(line) || "//".equals(line)) + { + writer.println(line); + } + lastLine = line; + } + writer.close(); + } catch (IOException e) + { + e.printStackTrace(); + } + } + }).start(); + + p.waitFor(); + + BufferedReader hmmExporter = new BufferedReader( + new FileReader(hmmPath)); + + exportFile(hmmExporter, + commandExportLocation + "/HMMs/HMM" + family + ".hmm", + false); + + alignmentsExported++; + + + } + PrintWriter writer = new PrintWriter( + commandExportLocation + "/NumberOfFamilies.txt"); + writer.print(famCount); + writer.close(); + } + + } + + public boolean atEnd(BufferedReader br) throws IOException + { + boolean end = false; + br.mark(80); + String line = br.readLine(); + if ("".equals(line) || line == null) + { + end = true; + } + br.reset(); + return end; + } + + public int getRandom(ArrayList list) + { + if (!(list.size() > 0)) + { + System.out.println("Error - size = " + list.size()); + } + int index = generator.nextInt(list.size()); + int value = list.get(index); + list.remove(index); + return value; + } + + public void createFolders(String clanPath) + { + File clanFolder = new File(clanPath); + if (!clanFolder.exists()) + { + clanFolder.mkdir(); + } + + File famFolder = new File(clanPath + "/Families"); + File hmmFolder = new File(clanPath + "/HMMs"); + if (!famFolder.exists()) + { + famFolder.mkdir(); + hmmFolder.mkdir(); + } + } +} + + + + diff --git a/src/jalview/util/ProbabilityAnalyserKickstarter.java b/src/jalview/util/ProbabilityAnalyserKickstarter.java new file mode 100644 index 0000000..ade09b1 --- /dev/null +++ b/src/jalview/util/ProbabilityAnalyserKickstarter.java @@ -0,0 +1,219 @@ +package jalview.util; + +import java.io.IOException; +import java.util.Scanner; + +/** + * This class contains the brain of the analyser program, and contains a number + * of commands for the processing of data. + * + * @author TZVanaalten + * + */ + +public class ProbabilityAnalyserKickstarter +{ + + public static void main(String[] args) + throws IOException, InterruptedException + { + + // this does all of the processing + HMMProbabilityDistributionAnalyser analyser = new HMMProbabilityDistributionAnalyser(); + + boolean running = true; + System.out.println("ACTIVATED"); + while (running) + { + Scanner keyboard = new Scanner(System.in); + String command = keyboard.nextLine(); + + Scanner inputScanner = new Scanner(command); + // prints family to console. Syntax is printFam + if (command.indexOf("printFam") > -1) + { + try + { + inputScanner.next(); + int index = inputScanner.nextInt(); + analyser.printFam(index); + continue; + } catch (Exception e) + { + System.out.println("Command failed"); + } + + } + // prints HMM to console. Syntax is printHMM + if (command.indexOf("printHMM") > -1) + { + try + { + inputScanner.next(); + int index = inputScanner.nextInt(); + analyser.printHMM(index); + continue; + } catch (Exception e) + { + System.out.println("Command failed"); + } + } + // prints family to file in current folder. Syntax is exportFam . + if (command.indexOf("exportFam") > -1) + { + try + { + inputScanner.next(); + int index = inputScanner.nextInt(); + String location = inputScanner.next(); + analyser.exportFam(index, location); + continue; + } catch (Exception e) + { + System.out.println("Command failed"); + } + } + // prints HMM to file in current folder. Syntax is exportHMM . + if (command.indexOf("exportHMM") > -1) + { + try + { + inputScanner.next(); + int index = inputScanner.nextInt(); + String location = inputScanner.next(); + analyser.exportHMM(index, location); + continue; + } catch (Exception e) + { + System.out.println("Command failed"); + } + } + // Processes data. Syntax is run . The + // number loops specifies the number of increments the program will run. + // After each increment, the data stored currently in the program is + // exported and re-read back into the program. This is to ensure that the + // program can be terminated without losing a large quantity of data. The + // increment is the number of families read per 'save'. + if (command.indexOf("run") > -1 && !(command.indexOf("ToEnd") > -1)) + { + try + { + + inputScanner.next(); + + int loops = inputScanner.nextInt(); + int increments = inputScanner.nextInt(); + boolean keepRaw = inputScanner.nextBoolean(); + + for (int i = 0; i < loops; i++) + { + analyser.run(increments, keepRaw); + System.out.println("Saved"); + } + System.out.println("Task completed"); + continue; + } catch (Exception e) + { + System.out.println("Command failed"); + } + continue; + } + if ((command.indexOf("runToEnd") > -1)) + { + try + { + + inputScanner.next(); + boolean keepRaw = inputScanner.nextBoolean(); + boolean forClans = inputScanner.nextBoolean(); + analyser.runToEnd(keepRaw, forClans); + System.out.println("Task completed"); + } catch (Exception e) + { + System.out.println("Command failed"); + } + continue; + } + // terminates program. Syntax is terminate. + if (command.indexOf("terminate") > -1) + { + running = false; + continue; + } + // clears files in current directory (Only a specific set of files). + // Syntax is clear. + if (command.indexOf("clear") > -1) + { + analyser.clear(); + continue; + } + // changes current directory. Syntax is cd + if (command.indexOf("cd") > -1) + { + try + { + inputScanner.next(); + analyser.setFolder(inputScanner.next()); + } catch (Exception e) + { + System.out.println("Command failed"); + + } + continue; + } + + if (command.indexOf("getFamName") > -1) + { + try + { + inputScanner.next(); + System.out.println(analyser.getFamilyName(inputScanner.nextInt())); + + } catch (Exception e) + { + System.out.println("Command failed"); + } + continue; + } + if (command.indexOf("sortIntoClans") > -1) + { + inputScanner.next(); + analyser.sortIntoClans(inputScanner.next()); + continue; + + } + if (command.indexOf("setFamilies") > -1) + { + inputScanner.next(); + analyser.setFamilies(inputScanner.next()); + continue; + + } + + if (command.indexOf("setHMMs") > -1) + { + inputScanner.next(); + analyser.setHmms(inputScanner.next()); + continue; + + } + + if (command.indexOf("alignWithinClans") > -1) + { + inputScanner.next(); + String export = inputScanner.next(); + String clans = inputScanner.next(); + analyser.alignWithinClan(export, clans); + continue; + + } + + System.out.println("Unrecognised command"); + } + + + + + } + +} diff --git a/src/jalview/viewmodel/AlignmentViewport.java b/src/jalview/viewmodel/AlignmentViewport.java index 3702cd0..0ec07c0 100644 --- a/src/jalview/viewmodel/AlignmentViewport.java +++ b/src/jalview/viewmodel/AlignmentViewport.java @@ -37,6 +37,8 @@ import jalview.datamodel.CigarArray; import jalview.datamodel.ColumnSelection; import jalview.datamodel.HiddenColumns; import jalview.datamodel.HiddenSequences; +import jalview.datamodel.ProfileI; +import jalview.datamodel.Profiles; import jalview.datamodel.ProfilesI; import jalview.datamodel.SearchResultsI; import jalview.datamodel.Sequence; @@ -57,6 +59,7 @@ import jalview.viewmodel.styles.ViewStyle; import jalview.workers.AlignCalcManager; import jalview.workers.ComplementConsensusThread; import jalview.workers.ConsensusThread; +import jalview.workers.InformationThread; import jalview.workers.StrucConsensusThread; import java.awt.Color; @@ -96,6 +99,7 @@ public abstract class AlignmentViewport protected Deque redoList = new ArrayDeque<>(); + /** * alignment displayed in the viewport. Please use get/setter */ @@ -604,10 +608,14 @@ public abstract class AlignmentViewport public boolean autoCalculateConsensus = true; + public boolean autoCalculateInformation = true; + protected boolean autoCalculateStrucConsensus = true; protected boolean ignoreGapsInConsensusCalculation = false; + protected boolean ignoreBelowBackGroundFrequencyCalculation = false; + protected ResidueShaderI residueShading = new ResidueShader(); @Override @@ -699,12 +707,21 @@ public abstract class AlignmentViewport protected AlignmentAnnotation[] groupConservation; + protected List groupInformation = new ArrayList<>(); + + protected List information = new ArrayList<>(); + /** * results of alignment consensus analysis for visible portion of view */ protected ProfilesI hconsensus = null; /** + * results of information annotation analysis for the visible portion of view + */ + protected List hinformation = new ArrayList<>(); + + /** * results of cDNA complement consensus visible portion of view */ protected Hashtable[] hcomplementConsensus = null; @@ -754,6 +771,30 @@ public abstract class AlignmentViewport } @Override + public void setSequenceInformationHashes(List info) + { + hinformation = info; + } + + @Override + public void setSequenceInformationHash(ProfilesI info, int index) + { + hinformation.set(index, info); + } + + @Override + public List getSequenceInformationHashes() + { + return hinformation; + } + + @Override + public ProfilesI getSequenceInformationHash(int index) + { + return hinformation.get(index); + } + + @Override public Hashtable[] getComplementConsensusHash() { return hcomplementConsensus; @@ -791,6 +832,18 @@ public abstract class AlignmentViewport } @Override + public List getInformationAnnotations() + { + return information; + } + + @Override + public AlignmentAnnotation getInformationAnnotation(int index) + { + return information.get(index); + } + + @Override public AlignmentAnnotation getAlignmentGapAnnotation() { return gapcounts; @@ -882,6 +935,20 @@ public abstract class AlignmentViewport } } + /** + * trigger update of information annotation + */ + @Override + public void updateInformation(final AlignmentViewPanel ap) + { + if (calculator + .getRegisteredWorkersOfClass(InformationThread.class) == null) + { + calculator.registerWorker(new InformationThread(this, ap)); + } + + } + // --------START Structure Conservation public void updateStrucConsensus(final AlignmentViewPanel ap) { @@ -996,6 +1063,21 @@ public abstract class AlignmentViewport protected boolean showConsensusHistogram = true; /** + * should hmm profile be rendered by default + */ + protected boolean showHMMSequenceLogo = false; + + /** + * should hmm profile be rendered normalised to row height + */ + protected boolean normaliseHMMSequenceLogo = false; + + /** + * should information histograms be rendered by default + */ + protected boolean showInformationHistogram = true; + + /** * @return the showConsensusProfile */ @Override @@ -1005,6 +1087,15 @@ public abstract class AlignmentViewport } /** + * @return the showInformationProfile + */ + @Override + public boolean isShowHMMSequenceLogo() + { + return showHMMSequenceLogo; + } + + /** * @param showSequenceLogo * the new value */ @@ -1022,6 +1113,16 @@ public abstract class AlignmentViewport this.showSequenceLogo = showSequenceLogo; } + public void setShowHMMSequenceLogo(boolean showHMMSequenceLogo) + { + if (showHMMSequenceLogo != this.showHMMSequenceLogo) + { + this.showHMMSequenceLogo = showHMMSequenceLogo; + calculator.updateAnnotationFor(InformationThread.class); + } + this.showHMMSequenceLogo = showHMMSequenceLogo; + } + /** * @param showConsensusHistogram * the showConsensusHistogram to set @@ -1032,6 +1133,15 @@ public abstract class AlignmentViewport } /** + * @param showInformationHistogram + * the showInformationHistogram to set + */ + public void setShowInformationHistogram(boolean showInformationHistogram) + { + this.showInformationHistogram = showInformationHistogram; + } + + /** * @return the showGroupConservation */ public boolean isShowGroupConservation() @@ -1077,6 +1187,17 @@ public abstract class AlignmentViewport } /** + * + * @return flag to indicate if the information content histogram should be + * rendered by default + */ + @Override + public boolean isShowInformationHistogram() + { + return this.showInformationHistogram; + } + + /** * when set, updateAlignment will always ensure sequences are of equal length */ private boolean padGaps = false; @@ -1235,6 +1356,16 @@ public abstract class AlignmentViewport } + public void setIgnoreBelowBackground(boolean b, AlignmentViewPanel ap) + { + ignoreBelowBackGroundFrequencyCalculation = b; + if (ap != null) + { + updateInformation(ap); + } + + } + private long sgrouphash = -1, colselhash = -1; /** @@ -1289,6 +1420,12 @@ public abstract class AlignmentViewport return ignoreGapsInConsensusCalculation; } + @Override + public boolean isIgnoreBelowBackground() + { + return ignoreBelowBackGroundFrequencyCalculation; + } + // property change stuff // JBPNote Prolly only need this in the applet version. private PropertyChangeSupport changeSupport = new PropertyChangeSupport( @@ -1860,6 +1997,15 @@ public abstract class AlignmentViewport { updateStrucConsensus(ap); } + updateInformation(ap); + + List hmmSequences; + hmmSequences = alignment.getHMMConsensusSequences(false); + + for (SequenceI seq : hmmSequences) + { + seq.updateHMMMapping(); + } // Reset endRes of groups if beyond alignment width int alWidth = alignment.getWidth(); @@ -1935,6 +2081,7 @@ public abstract class AlignmentViewport MessageManager.getString("label.consensus_descr"), new Annotation[1], 0f, 100f, AlignmentAnnotation.BAR_GRAPH); initConsensus(consensus); + initGapCounts(); initComplementConsensus(); @@ -1992,6 +2139,35 @@ public abstract class AlignmentViewport } } + @Override + public void initInformation() + { + for (SequenceI seq : alignment.getHMMConsensusSequences(false)) + { + if (!seq.hasHMMAnnotation()) + { + AlignmentAnnotation information; + information = new AlignmentAnnotation(seq.getName(), + MessageManager.getString("label.information_description"), + new Annotation[1], 0f, 6.52f, + AlignmentAnnotation.BAR_GRAPH); + information.hasText = true; + information.autoCalculated = true; + information.hasText = true; + information.autoCalculated = false; + information.sequenceRef = seq; + information.setCalcId("HMM annotation"); + this.information.add(information); + hinformation.add(new Profiles(new ProfileI[1])); + alignment.addAnnotation(information); + seq.updateHMMMapping(); + seq.setHasInfo(true); + seq.addAlignmentAnnotation(information); + } + } + + } + // these should be extracted from the view model - style and settings for // derived annotation private void initGapCounts() @@ -2141,6 +2317,9 @@ public abstract class AlignmentViewport boolean showprf = isShowSequenceLogo(); boolean showConsHist = isShowConsensusHistogram(); boolean normLogo = isNormaliseSequenceLogo(); + boolean showHMMPrf = isShowHMMSequenceLogo(); + boolean showInfoHist = isShowInformationHistogram(); + boolean normHMMLogo = isNormaliseHMMSequenceLogo(); /** * TODO reorder the annotation rows according to group/sequence ordering on @@ -2178,6 +2357,9 @@ public abstract class AlignmentViewport sg.setshowSequenceLogo(showprf); sg.setShowConsensusHistogram(showConsHist); sg.setNormaliseSequenceLogo(normLogo); + sg.setshowHMMSequenceLogo(showHMMPrf); + sg.setShowInformationHistogram(showInfoHist); + sg.setNormaliseHMMSequenceLogo(normHMMLogo); } if (conv) { diff --git a/src/jalview/workers/AlignCalcManager.java b/src/jalview/workers/AlignCalcManager.java index 08ef3a2..6f0deab 100644 --- a/src/jalview/workers/AlignCalcManager.java +++ b/src/jalview/workers/AlignCalcManager.java @@ -74,7 +74,7 @@ public class AlignCalcManager implements AlignCalcManagerI .synchronizedList(new ArrayList()); updating = Collections.synchronizedMap( new Hashtable, List>()); - canUpdate = new HashSet(); + canUpdate = new HashSet<>(); } @Override @@ -285,7 +285,7 @@ public class AlignCalcManager implements AlignCalcManagerI public List getRegisteredWorkersOfClass( Class workerClass) { - List workingClass = new ArrayList(); + List workingClass = new ArrayList<>(); synchronized (canUpdate) { for (AlignCalcWorkerI worker : canUpdate) @@ -312,8 +312,8 @@ public class AlignCalcManager implements AlignCalcManagerI public void removeRegisteredWorkersOfClass( Class typeToRemove) { - List removable = new ArrayList(); - Set toremovannot = new HashSet(); + List removable = new ArrayList<>(); + Set toremovannot = new HashSet<>(); synchronized (restartable) { for (AlignCalcWorkerI worker : restartable) @@ -363,7 +363,7 @@ public class AlignCalcManager implements AlignCalcManagerI * first just find those to remove (to avoid * ConcurrentModificationException) */ - List toRemove = new ArrayList(); + List toRemove = new ArrayList<>(); for (AlignCalcWorkerI worker : restartable) { if (worker.involves(ann)) diff --git a/src/jalview/workers/InformationThread.java b/src/jalview/workers/InformationThread.java new file mode 100644 index 0000000..2c92879 --- /dev/null +++ b/src/jalview/workers/InformationThread.java @@ -0,0 +1,247 @@ +package jalview.workers; + +import jalview.analysis.AAFrequency; +import jalview.api.AlignViewportI; +import jalview.api.AlignmentViewPanel; +import jalview.datamodel.AlignmentAnnotation; +import jalview.datamodel.AlignmentI; +import jalview.datamodel.Annotation; +import jalview.datamodel.HiddenMarkovModel; +import jalview.datamodel.ProfilesI; +import jalview.datamodel.SequenceI; +import jalview.renderer.ResidueShaderI; + +import java.util.List; + +public class InformationThread extends AlignCalcWorker +{ + /** + * Constructor for information thread. + * + * @param alignViewport + * @param alignPanel + */ + public InformationThread(AlignViewportI alignViewport, + AlignmentViewPanel alignPanel) + { + super(alignViewport, alignPanel); + } + + @Override + public void run() + { + if (calcMan.isPending(this)) + { + return; + } + calcMan.notifyStart(this); + long started = System.currentTimeMillis(); + + List information = getInformationAnnotations(); + try + { + if ((information == null) || calcMan.isPending(this)) + { + calcMan.workerComplete(this); + return; + } + while (!calcMan.notifyWorking(this)) + { + // System.err.println("Thread + // (Information"+Thread.currentThread().getName()+") Waiting around."); + try + { + if (ap != null) + { + ap.paintAlignment(false); + } + Thread.sleep(200); + } catch (Exception ex) + { + ex.printStackTrace(); + } + } + if (alignViewport.isClosed()) + { + abortAndDestroy(); + return; + } + AlignmentI alignment = alignViewport.getAlignment(); + + int aWidth = -1; + + if (alignment == null || (aWidth = alignment.getWidth()) < 0) + { + calcMan.workerComplete(this); + return; + } + + eraseInformation(aWidth); + computeInformation(alignment); + updateResultAnnotation(true); + + if (ap != null) + { + ap.paintAlignment(true); + } + } catch (OutOfMemoryError error) + { + calcMan.disableWorker(this); + ap.raiseOOMWarning("calculating information", error); + } finally + { + calcMan.workerComplete(this); + } + + + + } + + /** + * Clear out any existing information annotations + * + * @param aWidth + * the width (number of columns) of the annotated alignment + */ + protected void eraseInformation(int aWidth) + { + + List information = getInformationAnnotations(); + for (AlignmentAnnotation info : information) + { + info.annotations = new Annotation[aWidth]; + } + } + + + /** + * Computes the profiles from a HMM for an alignment. + * + * @param alignment + */ + protected void computeInformation(AlignmentI alignment) + { + + int width = alignment.getWidth(); + List hmmSeqs = alignment.getHMMConsensusSequences(false); + int index = 0; + for (SequenceI seq : hmmSeqs) + { + HiddenMarkovModel hmm = seq.getHMM(); + ProfilesI hinformation = AAFrequency.calculateHMMProfiles(hmm, width, + 0, width, true, alignViewport.isIgnoreBelowBackground()); + alignViewport.setSequenceInformationHash(hinformation, index); + // setColourSchemeInformation(hinformation); + index++; + } + } + + /** + * gets the sequences on the alignment on the viewport. + * + * @return + */ + protected SequenceI[] getSequences() + { + return alignViewport.getAlignment().getSequencesArray(); + } + + protected void setColourSchemeInformation(ProfilesI information) + { + ResidueShaderI cs = alignViewport.getResidueShading(); + if (cs != null) + { + cs.setInformation(information); + } + } + + /** + * Get the Information annotation for the alignment + * + * @return + */ + protected List getInformationAnnotations() + { + return alignViewport.getInformationAnnotations(); + } + + /** + * Get the Gap annotation for the alignment + * + * @return + */ + protected AlignmentAnnotation getGapAnnotation() + { + return alignViewport.getAlignmentGapAnnotation(); + } + + /** + * update the information annotation from the sequence profile data using + * current visualization settings. + */ + @Override + public void updateAnnotation() + { + + updateResultAnnotation(false); + } + + /** + * Derives the information content for an information annotation. + * + * @param immediate + */ + public void updateResultAnnotation(boolean immediate) + { + List annots = getInformationAnnotations(); + int index = 0; + for (AlignmentAnnotation information : annots) + { + ProfilesI hinformation = (ProfilesI) getSequenceInformation(index); + if (immediate || !calcMan.isWorking(this) && information != null + && hinformation != null) + { + deriveInformation(information, hinformation); + } + index++; + } + } + + /** + * Convert the computed information data into the desired annotation for + * display. + * + * @param informationAnnotation + * the annotation to be populated + * @param hinformation + * the computed information data + */ + protected void deriveInformation( + AlignmentAnnotation informationAnnotation, ProfilesI hinformation) + { + + long nseq = getSequences().length; + AAFrequency.completeInformation(informationAnnotation, hinformation, + hinformation.getStartColumn(), hinformation.getEndColumn() + 1, + alignViewport.isIgnoreBelowBackground(), + alignViewport.isShowHMMSequenceLogo(), nseq); + } + + + + /** + * Get the information data stored on the viewport. + * + * @return + */ + protected Object getSequenceInformation(int index) + { + // TODO convert ComplementInformationThread to use Profile + return alignViewport.getSequenceInformationHash(index); + } + } + + + + + diff --git a/src/jalview/ws/jws2/MsaWSThread.java b/src/jalview/ws/jws2/MsaWSThread.java index db6e03f..c4fc66b 100644 --- a/src/jalview/ws/jws2/MsaWSThread.java +++ b/src/jalview/ws/jws2/MsaWSThread.java @@ -75,7 +75,7 @@ class MsaWSThread extends AWS2Thread implements WSClientI /** * input */ - ArrayList seqs = new ArrayList(); + ArrayList seqs = new ArrayList<>(); /** * output @@ -139,7 +139,6 @@ class MsaWSThread extends AWS2Thread implements WSClientI compbio.data.sequence.FastaSequence seq; for (int i = 0, n = 0; i < seqs.length; i++) { - String newname = jalview.analysis.SeqsetUtils.unique_name(i); // same // for // any @@ -379,7 +378,7 @@ class MsaWSThread extends AWS2Thread implements WSClientI public List getJabaArguments() { - List newargs = new ArrayList(); + List newargs = new ArrayList<>(); if (preset != null && preset instanceof JabaWsParamSet) { newargs.addAll(((JabaWsParamSet) preset).getjabaArguments()); @@ -931,7 +930,7 @@ class MsaWSThread extends AWS2Thread implements WSClientI void displayResults(boolean newFrame) { // view input or result data for each block - List alorders = new ArrayList(); + List alorders = new ArrayList<>(); SequenceI[][] results = new SequenceI[jobs.length][]; AlignmentOrder[] orders = new AlignmentOrder[jobs.length]; String lastProgram = null; @@ -981,7 +980,6 @@ class MsaWSThread extends AWS2Thread implements WSClientI if (newFrame) { displayInNewFrame(al, alorders, hidden); - } else { @@ -1077,7 +1075,7 @@ class MsaWSThread extends AWS2Thread implements WSClientI else { // construct a non-redundant ordering set - List names = new ArrayList(); + List names = new ArrayList<>(); for (int i = 0, l = alorders.size(); i < l; i++) { String orderName = " Region " + i; diff --git a/test/jalview/analysis/AAFrequencyTest.java b/test/jalview/analysis/AAFrequencyTest.java index 75fb39e..9a0b33f 100644 --- a/test/jalview/analysis/AAFrequencyTest.java +++ b/test/jalview/analysis/AAFrequencyTest.java @@ -25,11 +25,20 @@ import static org.testng.AssertJUnit.assertNull; import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.Annotation; +import jalview.datamodel.HiddenMarkovModel; +import jalview.datamodel.Profile; import jalview.datamodel.ProfileI; +import jalview.datamodel.Profiles; import jalview.datamodel.ProfilesI; import jalview.datamodel.Sequence; import jalview.datamodel.SequenceI; import jalview.gui.JvOptionPane; +import jalview.io.DataSourceType; +import jalview.io.FileParse; +import jalview.io.HMMFile; + +import java.io.IOException; +import java.net.MalformedURLException; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; @@ -37,6 +46,8 @@ import org.testng.annotations.Test; public class AAFrequencyTest { + HiddenMarkovModel hmm; + @BeforeClass(alwaysRun = true) public void setUpJvOptionPane() { @@ -232,4 +243,79 @@ public class AAFrequencyTest assertEquals("T 75%", ann.description); assertEquals("T", ann.displayCharacter); } + + + @Test(groups = { "Functional" }, priority = 1) + public void testExtractHMMProfile() + throws MalformedURLException, IOException + { + + HMMFile hmmFile = new HMMFile(new FileParse( + "test/jalview/io/test_MADE1_hmm.txt", DataSourceType.FILE)); + hmm = hmmFile.getHMM(); + int[] expected = { 0, 4, 100, 'T', 71, 'C', 12, 'G', 9, 'A', 9 }; + int[] actual = AAFrequency.extractHMMProfile(hmm, 17, false); + for (int i = 0; i < actual.length; i++) + { + if (i == 2) + { + assertEquals(actual[i], expected[i]); + } + else + { + assertEquals(actual[i], expected[i]); + } + } + + int[] expected2 = { 0, 4, 100, 'A', 85, 'C', 0, 'G', 0, 'T', 0 }; + int[] actual2 = AAFrequency.extractHMMProfile(hmm, 2, true); + for (int i = 0; i < actual2.length; i++) + { + if (i == 2) + { + assertEquals(actual[i], expected[i]); + } + else + { + assertEquals(actual[i], expected[i]); + } + } + + assertNull(AAFrequency.extractHMMProfile(null, 98978867, true)); + } + + @Test(groups = { "Functional" }, priority = 2) + public void testGetAnalogueCount() + { + int count; + count = AAFrequency.getAnalogueCount(hmm, 0, 'T', false); + assertEquals(7859, count); + count = AAFrequency.getAnalogueCount(hmm, 20, 'G', false); + assertEquals(7546, count); + count = AAFrequency.getAnalogueCount(hmm, 1077, 'G', true); + assertEquals(0, count); + } + + @Test(groups = { "Functional" }, priority = 3) + public void testCompleteInformation() + { + ProfileI prof1 = new Profile(1, 0, 100, "A"); + ProfileI prof2 = new Profile(1, 0, 100, "-"); + + ProfilesI profs = new Profiles(new ProfileI[] { prof1, prof2 }); + Annotation ann1 = new Annotation(6.5f); + Annotation ann2 = new Annotation(0f); + Annotation[] annots = new Annotation[] { ann1, ann2 }; + SequenceI seq = new Sequence("", "AA", 0, 0); + seq.setHMM(hmm); + AlignmentAnnotation annot = new AlignmentAnnotation("", "", annots); + annot.setSequenceRef(seq); + AAFrequency.completeInformation(annot, profs, 0, 1, false, true, 1); + float ic = annot.annotations[0].value; + assertEquals(0.91532f, ic, 0.0001f); + ic = annot.annotations[1].value; + assertEquals(0f, ic, 0.0001f); + int i = 0; + } + } diff --git a/test/jalview/datamodel/HiddenMarkovModelTest.java b/test/jalview/datamodel/HiddenMarkovModelTest.java new file mode 100644 index 0000000..069978d --- /dev/null +++ b/test/jalview/datamodel/HiddenMarkovModelTest.java @@ -0,0 +1,118 @@ +package jalview.datamodel; + +import static org.testng.Assert.assertEquals; + +import jalview.io.DataSourceType; +import jalview.io.FileParse; +import jalview.io.HMMFile; + +import java.io.IOException; +import java.net.MalformedURLException; + +import org.testng.annotations.Test; + +public class HiddenMarkovModelTest { + + HiddenMarkovModel hmm; + + @Test(priority = 0) + public void testGetMatchEmissionProbabilities() + throws MalformedURLException, IOException + { + HMMFile file = new HMMFile(new FileParse( + "test/jalview/io/test_PKinase_hmm.txt", DataSourceType.FILE)); + hmm = file.getHMM(); + + double[] actual = new double[4]; + actual[0] = hmm.getMatchEmissionProbability(0, 'R'); + actual[1] = hmm.getMatchEmissionProbability(19, 'W'); + actual[2] = hmm.getMatchEmissionProbability(160, 'G'); + actual[3] = hmm.getMatchEmissionProbability(475, 'A'); + + double[] expected = new double[4]; + expected[0] = 0.02537400637; + expected[1] = 0.00588228492; + expected[2] = 0; + expected[3] = 0.04995163708; + + for (int i = 0; i < 4; i++) + { + assertEquals(actual[i], expected[i], 0.001d); + } + } + + @Test(priority = 1) + public void testGetInsertEmissionProbabilities() + { + double[] actual = new double[4]; + actual[0] = hmm.getInsertEmissionProbability(2, 'A'); + actual[1] = hmm.getInsertEmissionProbability(5, 'T'); + actual[2] = hmm.getInsertEmissionProbability(161, 'K'); + actual[3] = hmm.getInsertEmissionProbability(472, 'L'); + + double[] expected = new double[4]; + expected[0] = 0.06841384927; + expected[1] = 0.06233763141; + expected[2] = 0; + expected[3] = 0.06764038926; + + for (int i = 0; i < 4; i++) + { + assertEquals(actual[i], expected[i], 0.001d); + } + } + + @Test(priority = 1) + public void testGetStateTransitionProbabilities() + { + double[] actual = new double[4]; + actual[0] = hmm.getStateTransitionProbability(475, hmm.MATCHTODELETE); + actual[1] = hmm.getStateTransitionProbability(8, hmm.MATCHTOINSERT); + actual[2] = hmm.getStateTransitionProbability(80, hmm.INSERTTOINSERT); + actual[3] = hmm.getStateTransitionProbability(475, hmm.DELETETOMATCH); + + double[] expected = new double[4]; + expected[0] = Double.NEGATIVE_INFINITY; + expected[1] = 0.00662894243; + expected[2] = 0.46183388908; + expected[3] = 1; + + for (int i = 0; i < 4; i++) + { + assertEquals(actual[i], expected[i], 0.001d); + } + } + + @Test(priority = 1) + public void testGetConsensusAtAlignColumn() + { + char[] cons = new char[4]; + cons[0] = hmm.getConsensusAtAlignColumn(10); + cons[1] = hmm.getConsensusAtAlignColumn(50); + hmm.setConsensusResidueStatus(false); + cons[2] = hmm.getConsensusAtAlignColumn(100); + cons[3] = hmm.getConsensusAtAlignColumn(400); + + char[] expected = new char[4]; + expected[0] = 's'; + expected[1] = 'k'; + expected[2] = 'l'; + expected[3] = 'k'; + + for (int i = 0; i < 4; i++) + { + assertEquals(cons[i], expected[i]); + } + + } + + @Test(priority = 1) + public void testGetConsensusSequence() + { + SequenceI seq = hmm.getConsensusSequence(); + String subStr = seq.getSequenceAsString().substring(0, 10); + assertEquals(subStr, "YELLEKLGSG"); + subStr = seq.getSequenceAsString().substring(150, 161); + assertEquals(subStr, "-DLLK------"); + } +} diff --git a/test/jalview/hmmer/HMMERTest.java b/test/jalview/hmmer/HMMERTest.java new file mode 100644 index 0000000..17ce2cf --- /dev/null +++ b/test/jalview/hmmer/HMMERTest.java @@ -0,0 +1,106 @@ +package jalview.hmmer; + +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNotEquals; +import static org.testng.Assert.fail; + +import jalview.bin.Jalview; +import jalview.datamodel.Alignment; +import jalview.datamodel.AlignmentI; +import jalview.datamodel.HiddenMarkovModel; +import jalview.datamodel.SequenceI; +import jalview.gui.AlignFrame; +import jalview.gui.Desktop; +import jalview.io.DataSourceType; +import jalview.io.FastaFile; +import jalview.io.FileParse; + +import java.io.IOException; +import java.net.MalformedURLException; +import java.util.List; + +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + + +public class HMMERTest { + + AlignFrame frame; + + @BeforeClass(alwaysRun = true) + public static void setUpBeforeClass() throws Exception + { + Jalview.main( + new String[] + { "-noquestionnaire", "-nonews", "-props", + "test/jalview/hmmer/testProps.jvprops" }); + } + + @AfterClass(alwaysRun = true) + public static void tearDownAfterClass() throws Exception + { + Desktop.instance.closeAll_actionPerformed(null); + } + + @Test(priority = 0) + public void testHMMBuild() throws MalformedURLException, IOException + { + FastaFile file = null; + try + { + file = new FastaFile( + new FileParse("examples/uniref50.fa", DataSourceType.FILE)); + } catch (IOException e) + { + e.printStackTrace(); + fail(); + } + SequenceI[] seqs = file.getSeqsAsArray(); + AlignmentI al = new Alignment(seqs); + frame = new AlignFrame(al, 150, 20); + + HMMBuildThread thread = new HMMBuildThread(frame); + thread.hmmbuildWaitTillComplete(); + + SequenceI seq = frame.getViewport().getAlignment().getSequenceAt(0); + HiddenMarkovModel hmm = seq.getHMM(); + if (hmm == null) + { + fail(); + } + + assertEquals(hmm.getLength().intValue(), 148); + assertEquals(hmm.getAlphabetType(), "amino"); + assertEquals(hmm.getName(), "Alignment"); + assertEquals(hmm.getEffectiveNumberOfSequences(), 0.648193, 0.0001); + assertEquals(hmm.getConsensusAtAlignColumn(15), 's'); + } + + @Test(priority = 1) + public void testHMMAlign() throws MalformedURLException, IOException + { + HMMAlignThread thread = new HMMAlignThread(frame, true); + try + { + thread.hmmalignWaitTillComplete(); + } catch (Exception e) + { + e.printStackTrace(); + fail(); + } + + if (Desktop.getAlignFrames() == null) + { + fail(); + } + + AlignFrame frame = Desktop.getAlignFrames()[0]; + AlignmentI al = frame.getViewport().getAlignment(); + assertNotEquals(al, null); + List hmmSeqs = al.getHMMConsensusSequences(false); + assertNotEquals(hmmSeqs, null); + + } +} + diff --git a/test/jalview/io/FileFormatsTest.java b/test/jalview/io/FileFormatsTest.java index 7810504..724bae0 100644 --- a/test/jalview/io/FileFormatsTest.java +++ b/test/jalview/io/FileFormatsTest.java @@ -55,7 +55,7 @@ public class FileFormatsTest @Test(groups = "Functional") public void testGetReadableFormats() { - String expected = "[Fasta, PFAM, Stockholm, PIR, BLC, AMSA, HTML, RNAML, JSON, PileUp, MSF, Clustal, PHYLIP, GFF or Jalview features, PDB, mmCIF, Jalview]"; + String expected = "[Fasta, PFAM, Stockholm, PIR, BLC, AMSA, HTML, RNAML, JSON, PileUp, MSF, Clustal, PHYLIP, GFF or Jalview features, PDB, mmCIF, Jalview, HMMER3]"; FileFormats formats = FileFormats.getInstance(); assertEquals(formats.getReadableFormats().toString(), expected); } @@ -63,25 +63,25 @@ public class FileFormatsTest @Test(groups = "Functional") public void testGetWritableFormats() { - String expected = "[Fasta, PFAM, Stockholm, PIR, BLC, AMSA, JSON, PileUp, MSF, Clustal, PHYLIP]"; + String expected = "[Fasta, PFAM, Stockholm, PIR, BLC, AMSA, JSON, PileUp, MSF, Clustal, PHYLIP, HMMER3]"; FileFormats formats = FileFormats.getInstance(); assertEquals(formats.getWritableFormats(true).toString(), expected); - expected = "[Fasta, PFAM, Stockholm, PIR, BLC, AMSA, JSON, PileUp, MSF, Clustal, PHYLIP, Jalview]"; + expected = "[Fasta, PFAM, Stockholm, PIR, BLC, AMSA, JSON, PileUp, MSF, Clustal, PHYLIP, Jalview, HMMER3]"; assertEquals(formats.getWritableFormats(false).toString(), expected); } @Test(groups = "Functional") public void testDeregisterFileFormat() { - String writable = "[Fasta, PFAM, Stockholm, PIR, BLC, AMSA, JSON, PileUp, MSF, Clustal, PHYLIP]"; - String readable = "[Fasta, PFAM, Stockholm, PIR, BLC, AMSA, HTML, RNAML, JSON, PileUp, MSF, Clustal, PHYLIP, GFF or Jalview features, PDB, mmCIF, Jalview]"; + String writable = "[Fasta, PFAM, Stockholm, PIR, BLC, AMSA, JSON, PileUp, MSF, Clustal, PHYLIP, HMMER3]"; + String readable = "[Fasta, PFAM, Stockholm, PIR, BLC, AMSA, HTML, RNAML, JSON, PileUp, MSF, Clustal, PHYLIP, GFF or Jalview features, PDB, mmCIF, Jalview, HMMER3]"; FileFormats formats = FileFormats.getInstance(); assertEquals(formats.getWritableFormats(true).toString(), writable); assertEquals(formats.getReadableFormats().toString(), readable); formats.deregisterFileFormat(FileFormat.Fasta.getName()); - writable = "[PFAM, Stockholm, PIR, BLC, AMSA, JSON, PileUp, MSF, Clustal, PHYLIP]"; - readable = "[PFAM, Stockholm, PIR, BLC, AMSA, HTML, RNAML, JSON, PileUp, MSF, Clustal, PHYLIP, GFF or Jalview features, PDB, mmCIF, Jalview]"; + writable = "[PFAM, Stockholm, PIR, BLC, AMSA, JSON, PileUp, MSF, Clustal, PHYLIP, HMMER3]"; + readable = "[PFAM, Stockholm, PIR, BLC, AMSA, HTML, RNAML, JSON, PileUp, MSF, Clustal, PHYLIP, GFF or Jalview features, PDB, mmCIF, Jalview, HMMER3]"; assertEquals(formats.getWritableFormats(true).toString(), writable); assertEquals(formats.getReadableFormats().toString(), readable); @@ -89,8 +89,8 @@ public class FileFormatsTest * re-register the format: it gets added to the end of the list */ formats.registerFileFormat(FileFormat.Fasta); - writable = "[PFAM, Stockholm, PIR, BLC, AMSA, JSON, PileUp, MSF, Clustal, PHYLIP, Fasta]"; - readable = "[PFAM, Stockholm, PIR, BLC, AMSA, HTML, RNAML, JSON, PileUp, MSF, Clustal, PHYLIP, GFF or Jalview features, PDB, mmCIF, Jalview, Fasta]"; + writable = "[PFAM, Stockholm, PIR, BLC, AMSA, JSON, PileUp, MSF, Clustal, PHYLIP, HMMER3, Fasta]"; + readable = "[PFAM, Stockholm, PIR, BLC, AMSA, HTML, RNAML, JSON, PileUp, MSF, Clustal, PHYLIP, GFF or Jalview features, PDB, mmCIF, Jalview, HMMER3, Fasta]"; assertEquals(formats.getWritableFormats(true).toString(), writable); assertEquals(formats.getReadableFormats().toString(), readable); } diff --git a/test/jalview/io/FormatAdapterTest.java b/test/jalview/io/FormatAdapterTest.java index b500266..0d0b5c8 100644 --- a/test/jalview/io/FormatAdapterTest.java +++ b/test/jalview/io/FormatAdapterTest.java @@ -56,8 +56,17 @@ public class FormatAdapterTest { try { - AlignmentI al = new FormatAdapter().readFile("examples/uniref50.fa", + AlignmentI al; + if (format == FileFormat.HMMER3) + { + al = new FormatAdapter().readFile("examples/uniref50_hmm.hmm", + DataSourceType.FILE, FileFormat.HMMER3); + } + else + { + al = new FormatAdapter().readFile("examples/uniref50.fa", DataSourceType.FILE, FileFormat.Fasta); + } /* * 'gap' is the gap character used in the alignment data file here, @@ -73,8 +82,9 @@ public class FormatAdapterTest AlignmentI reloaded = new FormatAdapter().readFile(formatted, DataSourceType.PASTE, format); List reread = reloaded.getSequences(); - assertEquals("Wrong number of reloaded sequences", seqs.length, - reread.size()); + assertEquals("Wrong number of reloaded sequences", seqs.length, + reread.size()); + int i = 0; for (SequenceI seq : reread) @@ -131,7 +141,7 @@ public class FormatAdapterTest @DataProvider(name = "formats") static Object[][] getFormats() { - List both = new ArrayList(); + List both = new ArrayList<>(); for (FileFormatI format : FileFormats.getInstance().getFormats()) { if (format.isReadable() && format.isWritable() diff --git a/test/jalview/io/HMMFileTest.java b/test/jalview/io/HMMFileTest.java new file mode 100644 index 0000000..be4178b --- /dev/null +++ b/test/jalview/io/HMMFileTest.java @@ -0,0 +1,536 @@ +package jalview.io; + +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNull; + +import jalview.datamodel.HMMNode; +import jalview.datamodel.HiddenMarkovModel; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + +import org.testng.annotations.Test; + +public class HMMFileTest { + + + + HMMFile fn3 = new HMMFile(new BufferedReader( + new FileReader(("test/jalview/io/test_fn3_hmm.txt")))); + + HMMFile pKinase = new HMMFile(new BufferedReader( + new FileReader(("test/jalview/io/test_PKinase_hmm.txt")))); + + HMMFile made1 = new HMMFile(new BufferedReader( + new FileReader(("test/jalview/io/test_MADE1_hmm.txt")))); + + HMMFileTest() throws IOException + { + + } + + + + + @Test + public void testParse() throws IOException + { + + pKinase.parse(); + HiddenMarkovModel hmm = pKinase.getHMM(); + assertEquals(hmm.getName(), "Pkinase"); + assertEquals(hmm.getAccessionNumber(), "PF00069.17"); + assertEquals(hmm.getDescription(), "Protein kinase domain"); + assertEquals(hmm.getLength().intValue(), 260); + assertNull(hmm.getMaxInstanceLength()); + assertEquals(hmm.getAlphabetType(), "amino"); + assertEquals(hmm.referenceAnnotationIsActive(), false); + assertEquals(hmm.maskValueIsActive(), false); + assertEquals(hmm.consensusResidueIsActive(), true); + assertEquals(hmm.consensusStructureIsActive(), + true); + assertEquals(hmm.mapIsActive(), true); + assertEquals(hmm.getDate(), "Thu Jun 16 11:44:06 2011"); + assertNull(hmm.getCommandLineLog()); + assertEquals(hmm.getNumberOfSequences().intValue(), 54); + assertEquals(hmm.getEffectiveNumberOfSequences(), 3.358521, 4d); + assertEquals(hmm.getCheckSum().longValue(), 3106786190l); + assertEquals(hmm.getGatheringThreshold(), "70.30 70.30"); + assertEquals(hmm.getTrustedCutoff(), "70.30 70.30"); + assertEquals(hmm.getNoiseCutoff(), "70.20 70.20"); + + List symbols = new ArrayList<>(); + symbols.add('A'); + symbols.add('C'); + symbols.add('D'); + symbols.add('E'); + symbols.add('F'); + symbols.add('G'); + symbols.add('H'); + symbols.add('I'); + symbols.add('K'); + symbols.add('L'); + symbols.add('M'); + symbols.add('N'); + symbols.add('P'); + symbols.add('Q'); + symbols.add('R'); + symbols.add('S'); + symbols.add('T'); + symbols.add('V'); + symbols.add('W'); + symbols.add('Y'); + + assertEquals(hmm.getSymbols(), symbols); + + assertEquals(hmm.getMatchEmissionProbability(0, 'Y'), 0.16102, 0.001d); + assertEquals(hmm.getMatchEmissionProbability(11, 'P'), 0.0130, 0.001d); + assertEquals(hmm.getMatchEmissionProbability(24, 'I'), 0.02583, 0.001d); + assertEquals(hmm.getMatchEmissionProbability(83, 'C'), 0.008549, + 0.001d); + assertEquals(hmm.getMatchEmissionProbability(332, 'E'), 0.07998, + 0.001d); + assertEquals(hmm.getMatchEmissionProbability(381, 'D'), 0.014465, + 0.001d); + assertEquals(hmm.getMatchEmissionProbability(475, 'Y'), 0.02213, + 0.001d); + + assertEquals(hmm.getInsertEmissionProbability(1, 'C'), 0.012, 0.001d); + assertEquals(hmm.getInsertEmissionProbability(14, 'H'), 0.02411, + 0.001d); + assertEquals(hmm.getInsertEmissionProbability(23, 'L'), 0.06764, + 0.001d); + assertEquals(hmm.getInsertEmissionProbability(90, 'D'), 0.0623, 0.001d); + assertEquals(hmm.getInsertEmissionProbability(374, 'T'), 0.0623, + 0.001d); + assertEquals(hmm.getInsertEmissionProbability(470, 'P'), 0.0647, + 0.001d); + + assertEquals(hmm.getStateTransitionProbability(2, 6), 0.3848, 0.001d); + assertEquals(hmm.getStateTransitionProbability(38, 3), 0.5382, 0.001d); + assertEquals(hmm.getStateTransitionProbability(305, 3), 0.2916, 0.001d); + assertEquals(hmm.getStateTransitionProbability(380, 0), 0.99, 0.001d); + assertEquals(hmm.getStateTransitionProbability(453, 1), 0.0066, 0.001d); + + assertEquals(hmm.getNodeAlignmentColumn(3).intValue(), 2); + assertEquals(hmm.getReferenceAnnotation(7), '-'); + assertEquals(hmm.getConsensusResidue(23), 't'); + assertEquals(hmm.getMaskedValue(30), '-'); + assertEquals(hmm.getConsensusStructure(56), 'S'); + + assertEquals(hmm.getNodeAlignmentColumn(78).intValue(), 135); + assertEquals(hmm.getReferenceAnnotation(93), '-'); + assertEquals(hmm.getConsensusResidue(145), 'a'); + assertEquals(hmm.getMaskedValue(183), '-'); + assertEquals(hmm.getConsensusStructure(240), 'H'); + + } + + @Test(priority = 0) + public void testParseFileProperties() throws IOException + { + FileReader fr = new FileReader( + new File("test/jalview/io/test_fn3_hmm.txt")); + BufferedReader br = new BufferedReader(fr); + fn3.setHMM(new HiddenMarkovModel()); + fn3.parseFileProperties(br); + fn3.parseModel(br); // this is for a later test + HiddenMarkovModel testHMM = new HiddenMarkovModel(); + testHMM = fn3.getHMM(); + br.close(); + fr.close(); + + assertEquals(testHMM.getName(), "fn3"); + assertEquals(testHMM.getAccessionNumber(), "PF00041.13"); + assertEquals(testHMM.getDescription(), + "Fibronectin type III domain"); + assertEquals(testHMM.getLength().intValue(), 86); + assertNull(testHMM.getMaxInstanceLength()); + assertEquals(testHMM.getAlphabetType(), "amino"); + assertEquals(testHMM.referenceAnnotationIsActive(), false); + assertEquals(testHMM.maskValueIsActive(), false); + assertEquals(testHMM.consensusResidueIsActive(), true); + assertEquals(testHMM.consensusStructureIsActive(), true); + assertEquals(testHMM.mapIsActive(), true); + assertEquals(testHMM.getDate(), "Fri Jun 20 08:22:31 2014"); + assertNull(testHMM.getCommandLineLog()); + assertEquals(testHMM.getNumberOfSequences().intValue(), 106); + assertEquals(testHMM.getEffectiveNumberOfSequences(), 11.415833, 4d); + assertEquals(testHMM.getCheckSum().longValue(), 3564431818l); + assertEquals(testHMM.getGatheringThreshold(), "8.00 7.20"); + assertEquals(testHMM.getTrustedCutoff(), "8.00 7.20"); + assertEquals(testHMM.getNoiseCutoff(), "7.90 7.90"); + assertEquals(testHMM.getViterbi(), "-9.7737 0.71847"); + assertEquals(testHMM.getMSV(), "-9.4043 0.71847"); + assertEquals(testHMM.getForward(), "-3.8341 0.71847"); + + + FileReader fr3 = new FileReader( + new File("test/jalview/io/test_MADE1_hmm.txt")); + BufferedReader br3 = new BufferedReader(fr3); + made1.setHMM(new HiddenMarkovModel()); + made1.parseFileProperties(br3); + testHMM = made1.getHMM(); + br3.close(); + fr3.close(); + + assertEquals(testHMM.getName(), "MADE1"); + assertEquals(testHMM.getAccessionNumber(), "DF0000629.2"); + assertEquals(testHMM.getDescription(), + "MADE1 (MAriner Derived Element 1), a TcMar-Mariner DNA transposon"); + assertEquals(testHMM.getLength().intValue(), 80); + assertEquals(testHMM.getMaxInstanceLength().intValue(), 426); + assertEquals(testHMM.getAlphabetType(), "DNA"); + assertEquals(testHMM.referenceAnnotationIsActive(), true); + assertEquals(testHMM.maskValueIsActive(), false); + assertEquals(testHMM.consensusResidueIsActive(), true); + assertEquals(testHMM.consensusStructureIsActive(), false); + assertEquals(testHMM.mapIsActive(), true); + assertEquals(testHMM.getDate(), "Tue Feb 19 20:33:41 2013"); + assertNull(testHMM.getCommandLineLog()); + assertEquals(testHMM.getNumberOfSequences().intValue(), 1997); + assertEquals(testHMM.getEffectiveNumberOfSequences(), 3.911818, 4d); + assertEquals(testHMM.getCheckSum().longValue(), 3015610723l); + assertEquals(testHMM.getGatheringThreshold(), "2.324 4.234"); + assertEquals(testHMM.getTrustedCutoff(), "2.343 1.212"); + assertEquals(testHMM.getNoiseCutoff(), "2.354 5.456"); + assertEquals(testHMM.getViterbi(), "-9.3632 0.71858"); + assertEquals(testHMM.getMSV(), "-8.5786 0.71858"); + assertEquals(testHMM.getForward(), "-3.4823 0.71858"); + + + } + + @Test + public void testFillList() throws IOException + { + Scanner scanner1 = new Scanner("1.3 2.4 5.3 3.9 9.8 4.7 4.3 2.3 6.9"); + ArrayList filledArray = new ArrayList<>(); + + filledArray.add(0.27253); + filledArray.add(0.0907); + filledArray.add(0.00499); + filledArray.add(0.02024); + filledArray.add(0.00005); + filledArray.add(0.00909); + filledArray.add(0.01357); + filledArray.add(0.10026); + filledArray.add(0.001); + + List testList = HMMFile.fillList(scanner1, 9); + + for (int i = 0; i < 9; i++) + { + assertEquals(testList.get(i), filledArray.get(i), 0.001d); + + } + + filledArray.clear(); + scanner1.close(); + + Scanner scanner2 = new Scanner( + "1.346 5.554 35.345 5.64 1.4"); + filledArray.add(0.2603); + filledArray.add(0.00387); + filledArray.add(0d); + filledArray.add(0.00355); + filledArray.add(0.2466); + + testList = HMMFile.fillList(scanner2, 5); + + for (int i = 0; i < 5; i++) + { + assertEquals(testList.get(i), filledArray.get(i), 0.001d); + } + + } + + @Test + public void testParseModel() throws IOException + { + FileReader fr = new FileReader( + new File("test/jalview/io/test_MADE1_hmm.txt")); + BufferedReader br = new BufferedReader(fr); + HiddenMarkovModel testHMM = new HiddenMarkovModel(); + for (int i = 0; i < 24; i++) + { + br.readLine(); + } + + made1.parseModel(br); + testHMM = made1.getHMM(); + + br.close(); + fr.close(); + + assertEquals(testHMM.getMatchEmissionProbability(1, 'C'), 0.09267, + 0.001d); + assertEquals(testHMM.getMatchEmissionProbability(25, 'G'), 0.07327, + 0.001d); + assertEquals(testHMM.getMatchEmissionProbability(1092, 'C'), 0.04184, + 0.001d); + assertEquals(testHMM.getMatchEmissionProbability(1107, 'G'), 0.07, + 0.001d); + + assertEquals(testHMM.getInsertEmissionProbability(0, 'G'), 0.25, + 0.001d); + assertEquals(testHMM.getInsertEmissionProbability(247, 'T'), 0.2776, + 0.001d); + assertEquals(testHMM.getInsertEmissionProbability(1096, 'T'), 0.25, + 0.001d); + assertEquals(testHMM.getInsertEmissionProbability(1111, 'T'), 0.25, + 0.001d); + + assertEquals(testHMM.getStateTransitionProbability(1, 0), 0.9634, + 0.001d); + assertEquals(testHMM.getStateTransitionProbability(5, 1), 0.0203, + 0.001d); + assertEquals(testHMM.getStateTransitionProbability(14, 3), 0.2515, + 0.001d); + assertEquals(testHMM.getStateTransitionProbability(65, 4), 0.78808, + 0.001d); + assertEquals(testHMM.getStateTransitionProbability(1080, 2), 0.01845, + 0.001d); + assertEquals(testHMM.getStateTransitionProbability(1111, 6), + Double.NEGATIVE_INFINITY); + + } + + @Test + public void testParseAnnotations() + { + HMMFile testFile = new HMMFile(); + testFile.setHMM(new HiddenMarkovModel()); + testFile.getHMM().getNodes().add(new HMMNode()); + testFile.getHMM().getNodes().add(new HMMNode()); + testFile.getHMM().getNodes().add(new HMMNode()); + + + testFile.getHMM().setConsensusResidueStatus(true); + testFile.getHMM().setMAPStatus(true); + testFile.getHMM().setReferenceAnnotationStatus(true); + testFile.getHMM().setConsensusStructureStatus(true); + testFile.getHMM().setMaskedValueStatus(true); + Scanner scanner = new Scanner("1345 t t t t"); + testFile.parseAnnotations(scanner, 1); + + testFile.getHMM().setConsensusResidueStatus(true); + testFile.getHMM().setMAPStatus(false); + testFile.getHMM().setReferenceAnnotationStatus(true); + testFile.getHMM().setConsensusStructureStatus(false); + testFile.getHMM().setMaskedValueStatus(false); + Scanner scanner2 = new Scanner("- y x - -"); + testFile.parseAnnotations(scanner2, 2); + + HiddenMarkovModel hmm = testFile.getHMM(); + + assertEquals(hmm.getNodeAlignmentColumn(1).intValue(), 1344); + assertEquals(hmm.getConsensusResidue(1), 't'); + assertEquals(hmm.getReferenceAnnotation(1), 't'); + assertEquals(hmm.getMaskedValue(1), 't'); + assertEquals(hmm.getConsensusStructure(1), 't'); + + assertEquals(hmm.findNodeIndex(1344).intValue(), 1); + + scanner.close(); + + } + + /** + * tests to see if file produced by the output matches the file from the input + * + * @throws IOException + */ + + + @Test(priority = 3) + public void testPrint() throws IOException + { + PrintWriter writer = new PrintWriter( + "test/jalview/io/test_export_hmm.txt"); + String output = pKinase.print(); + writer.print(output); + writer.close(); + HMMFile pKinaseClone = new HMMFile( + new FileParse("test/jalview/io/test_export_hmm.txt", + DataSourceType.FILE)); + HiddenMarkovModel pKinaseHMM = new HiddenMarkovModel(); + HiddenMarkovModel pKinaseCloneHMM = new HiddenMarkovModel(); + pKinaseHMM = pKinase.getHMM(); + pKinaseCloneHMM = pKinaseClone.getHMM(); + + for (int i = 0; i < pKinaseHMM.getLength(); i++) + { + List list1; + List list2; + boolean result; + + list1 = pKinaseHMM.getNode(i).getMatchEmissions(); + list2 = pKinaseCloneHMM.getNode(i).getMatchEmissions(); + + result = checkIfListsAreIdentical(list1, list2); + assertEquals(result, true); + + list1 = pKinaseHMM.getNode(i).getInsertEmissions(); + list2 = pKinaseCloneHMM.getNode(i).getInsertEmissions(); + + result = checkIfListsAreIdentical(list1, list2); + assertEquals(result, true); + + list1 = pKinaseHMM.getNode(i).getStateTransitions(); + list2 = pKinaseCloneHMM.getNode(i).getStateTransitions(); + + result = checkIfListsAreIdentical(list1, list2); + assertEquals(result, true); + + if (i > 0) + { + int alignColumn1; + int alignColumn2; + + alignColumn1 = pKinaseHMM.getNodeAlignmentColumn(i); + alignColumn2 = pKinaseCloneHMM.getNodeAlignmentColumn(i); + + assertEquals(alignColumn1, alignColumn2); + + char annotation1; + char annotation2; + + annotation1 = pKinaseHMM.getReferenceAnnotation(i); + annotation2 = pKinaseCloneHMM.getReferenceAnnotation(i); + + assertEquals(annotation1, annotation2); + + annotation1 = pKinaseHMM.getConsensusResidue(i); + annotation2 = pKinaseCloneHMM.getConsensusResidue(i); + + assertEquals(annotation1, annotation2); + } + + } + + } + + @Test(priority = 1) + public void testGetFilePropertiesAsString() throws FileNotFoundException + { + String string = fn3.getFilePropertiesAsString(); + + Scanner testScanner = new Scanner(string); + + String[] expected = new String[] { "HMMER3/f [3.1b1 | May 2013]", + "NAME fn3", "ACC PF00041.13", + "DESC Fibronectin type III domain", "LENG 86", "ALPH amino", + "RF no", "MM no", "CONS yes", "CS yes", "MAP yes", + "DATE Fri Jun 20 08:22:31 2014", "NSEQ 106", "EFFN 11.415833", + "CKSUM 3564431818", "GA 8.00 7.20", "TC 8.00 7.20", + "NC 7.90 7.90", "STATS LOCAL MSV -9.4043 0.71847", + "STATS LOCAL VITERBI -9.7737 0.71847", + "STATS LOCAL FORWARD -3.8341 0.71847" }; + + for (String value : expected) + { + assertEquals(testScanner.nextLine(), value); + } + + testScanner.close(); + } + + @Test(priority = 2) + public void testGetModelAsString() throws FileNotFoundException + { + String string = fn3.getModelAsString(); + + assertEquals(findValue(2, 2, 2, string), "4.42225"); + assertEquals(findValue(12, 14, 1, string), "2.79307"); + assertEquals(findValue(6, 24, 3, string), "0.48576"); + assertEquals(findValue(19, 33, 2, string), "4.58477"); + assertEquals(findValue(20, 64, 2, string), "3.61505"); + assertEquals(findValue(3, 72, 3, string), "6.81068"); + assertEquals(findValue(10, 80, 2, string), "2.69355"); + assertEquals(findValue(16, 65, 1, string), "2.81003"); + assertEquals(findValue(14, 3, 1, string), "2.69012"); + assertEquals(findValue(11, 32, 1, string), "4.34805"); + + } + + /** + * + * @param symbolIndex + * index of symbol being searched. First symbol has index 1. + * @param nodeIndex + * index of node being searched. Begin node has index 0. First node + * has index 1. + * @param line + * index of line being searched in node. First line has index 1. + * @param model + * string model being searched + * @return value at specified position + */ + + public String findValue(int symbolIndex, int nodeIndex, int line, + String model) + { + + String value = ""; + String current; + Scanner scanner = new Scanner(model); + current = scanner.nextLine(); + current = scanner.nextLine(); + + for (int lineIndex = 0; lineIndex < line - 1; lineIndex++) + { + current = scanner.nextLine(); + } + for (int node = 0; node < nodeIndex; node++) + { + current = scanner.nextLine(); + current = scanner.nextLine(); + current = scanner.nextLine(); + } + + for (int symbol = 0; symbol < symbolIndex; symbol++) + { + value = scanner.next(); + if ("COMPO".equals(value)) + { + current = scanner.next(); + } + else if (value.length() < 7) + { + current = scanner.next(); + } + + } + scanner.close(); + return value; + + } + + public boolean checkIfListsAreIdentical(List list1, + List list2) + { + boolean isDifferent = false; + for (int i = 0; i < list1.size(); i++) + { + Double entry1; + Double entry2; + entry1 = list1.get(i); + entry2 = list2.get(i); + if (!(entry1 == entry2)) + { + isDifferent = true; + } + } + return isDifferent; + } + +} + diff --git a/test/jalview/io/test_MADE1_hmm.txt b/test/jalview/io/test_MADE1_hmm.txt new file mode 100644 index 0000000..32231db --- /dev/null +++ b/test/jalview/io/test_MADE1_hmm.txt @@ -0,0 +1,268 @@ +HMMER3/f [3.1 | February 2013] +NAME MADE1 +ACC DF0000629.2 +DESC MADE1 (MAriner Derived Element 1), a TcMar-Mariner DNA transposon +LENG 80 +MAXL 426 +ALPH DNA +RF yes +MM no +CONS yes +CS no +MAP yes +DATE Tue Feb 19 20:33:41 2013 +NSEQ 1997 +EFFN 3.911818 +CKSUM 3015610723 +GA 2.324 4.234 +TC 2.343 1.212 +NC 2.354 5.456 +STATS LOCAL MSV -8.5786 0.71858 +STATS LOCAL VITERBI -9.3632 0.71858 +STATS LOCAL FORWARD -3.4823 0.71858 +HMM A C G T + m->m m->i m->d i->m i->i d->m d->d + COMPO 1.24257 1.59430 1.62906 1.16413 + 1.38629 1.38629 1.38629 1.38629 + 0.03960 3.94183 3.94183 1.46634 0.26236 0.00000 * + 1 2.69765 2.44396 2.81521 0.24089 1 t x - - + 1.38629 1.38629 1.38629 1.38629 + 0.03960 3.94183 3.94183 1.46634 0.26236 1.09861 0.40547 + 2 2.72939 2.37873 2.85832 0.24244 2 t x - - + 1.38629 1.38629 1.38629 1.38629 + 0.03725 4.00179 4.00179 1.46634 0.26236 1.09861 0.40547 + 3 0.16099 3.16370 2.87328 2.99734 3 a x - - + 1.38629 1.38629 1.38629 1.38629 + 0.03604 4.03416 4.03416 1.46634 0.26236 1.09861 0.40547 + 4 1.98862 2.42132 0.42649 2.10770 4 g x - - + 1.38629 1.38629 1.38629 1.38629 + 0.03539 4.05203 4.05203 1.46634 0.26236 1.09861 0.40547 + 5 1.96369 2.69532 0.36534 2.32099 5 g x - - + 1.38629 1.38629 1.38629 1.38629 + 0.03764 4.06427 3.92372 1.46634 0.26236 1.09861 0.40547 + 6 2.56994 2.11239 2.71946 0.30571 6 t x - - + 1.37159 1.41129 1.39124 1.37159 + 0.03806 3.89715 4.07214 1.50442 0.25122 1.00714 0.45454 + 7 2.58388 2.10353 2.64646 0.31253 12 t x - - + 1.38764 1.38524 1.38764 1.38465 + 0.03494 4.03864 4.09125 1.40070 0.28293 1.09237 0.40860 + 8 2.18552 2.70201 0.28821 2.64645 14 g x - - + 1.38629 1.38629 1.38629 1.38629 + 0.03628 4.09157 3.96779 1.46634 0.26236 1.09861 0.40547 + 9 2.16916 2.82142 0.28427 2.60854 15 g x - - + 1.38091 1.39033 1.38365 1.39033 + 0.03566 4.00237 4.08886 1.38021 0.28972 1.01958 0.44745 + 10 2.45517 2.15232 2.42886 0.34277 18 t x - - + 1.39065 1.39065 1.39065 1.37335 + 0.03536 4.01212 4.09576 1.39554 0.28462 1.09775 0.40589 + 11 2.10260 2.95484 0.28160 2.64222 21 g x - - + 1.36740 1.40555 1.40555 1.36740 + 0.03843 3.92069 4.02468 1.44733 0.26814 1.09856 0.40549 + 12 2.54740 0.30185 2.61355 2.21647 26 c x - - + 1.38748 1.38276 1.38748 1.38748 + 0.03457 4.05446 4.09623 1.40847 0.28040 1.05496 0.42803 + 13 0.28443 2.72003 2.32214 2.48149 28 a x - - + 1.38740 1.38740 1.38298 1.38740 + 0.03441 4.05976 4.10001 1.41198 0.27926 1.09780 0.40587 + 14 0.29412 2.55413 2.49679 2.35701 30 a x - - + 1.38194 1.39067 1.38194 1.39067 + 0.03505 4.02482 4.10005 1.39522 0.28473 1.09929 0.40512 + 15 0.18837 2.99710 2.82270 2.77556 33 a x - - + 1.39015 1.39472 1.37503 1.38539 + 0.03725 3.97815 4.02618 1.37955 0.28994 1.10102 0.40426 + 16 0.50816 2.05151 2.22111 1.82407 37 a x - - + 1.36727 1.38730 1.39683 1.39405 + 0.04830 3.89881 3.61610 1.29026 0.32186 1.05306 0.42905 + 17 2.11260 2.73141 0.29747 2.64152 41 g x - - + 1.36913 1.40376 1.40376 1.36913 + 0.03705 3.93681 4.08299 1.44872 0.26771 1.07479 0.41759 + 18 2.24459 1.90539 2.34054 0.43234 46 t x - - + 1.33632 1.42493 1.39937 1.38665 + 0.04427 3.64574 4.06297 1.70501 0.20061 1.21309 0.35279 + 19 0.44322 2.17202 2.18055 2.03175 57 a x - - + 1.41047 1.41471 1.36338 1.35797 + 0.03970 3.81957 4.07540 1.65588 0.21186 1.22788 0.34660 + 20 0.33340 2.42691 2.40824 2.25160 66 a x - - + 1.29389 1.44615 1.37917 1.43324 + 0.04223 3.70146 4.09459 1.55158 0.23815 1.05880 0.42598 + 21 2.50563 1.98543 2.69601 0.33746 74 t x - - + 1.39462 1.39462 1.42862 1.32990 + 0.04184 3.80216 3.98177 1.80466 0.17976 1.00279 0.45705 + 22 2.54484 1.97505 2.66483 0.33806 84 t x - - + 1.39134 1.39489 1.38662 1.37246 + 0.03877 3.97504 3.95038 1.37620 0.29107 1.13932 0.38572 + 23 2.10159 2.83856 0.29282 2.61635 88 g x - - + 1.39682 1.39682 1.35536 1.39682 + 0.05046 3.75402 3.65808 1.08330 0.41321 1.13019 0.39004 + 24 2.25298 0.61854 2.50691 1.29221 90 c x - - + 1.35803 1.49605 1.46737 1.24379 + 0.06091 3.28322 3.83564 1.89752 0.16245 1.28788 0.32276 + 25 1.27819 2.23285 0.76242 1.91259 106 g x - - + 1.29024 1.67349 1.68279 1.04597 + 0.05752 3.44263 3.73311 2.58671 0.07825 1.26818 0.33037 + 26 1.86925 2.58352 0.39466 2.33986 131 g x - - + 1.31084 1.49412 1.46666 1.29002 + 0.04698 3.54257 4.07715 2.25245 0.11109 0.86163 0.54900 + 27 2.38297 1.93394 2.39162 0.39800 151 t x - - + 1.33582 1.47359 1.44163 1.30411 + 0.04951 3.48445 4.03783 2.15951 0.12260 1.21681 0.35122 + 28 2.41717 2.17810 2.62774 0.32113 170 t x - - + 1.36805 1.48060 1.37439 1.32840 + 0.04849 3.50958 4.05014 2.58370 0.07850 1.22399 0.34822 + 29 2.57764 2.35132 2.56552 0.28512 194 t x - - + 1.43829 1.43458 1.24787 1.43829 + 0.04667 3.56670 4.05428 2.49706 0.08591 1.23744 0.34267 + 30 2.47248 2.07688 2.62257 0.33172 215 t x - - + 1.25120 1.52623 1.70635 1.15531 + 0.08932 3.31524 3.01336 2.81842 0.06156 1.22909 0.34610 + 31 2.25937 2.13157 2.02027 0.43957 248 t x - - + 1.18172 1.43522 1.72841 1.28150 + 0.07936 2.93117 3.77395 2.46269 0.08906 0.60457 0.79034 + 32 2.04508 2.84981 0.30490 2.58263 280 g x - - + 1.17665 1.66785 1.66218 1.16056 + 0.05998 3.23615 3.96853 2.83684 0.06040 1.01952 0.44749 + 33 2.45103 0.38098 2.56776 1.87147 317 c x - - + 1.24153 1.52524 1.60663 1.22783 + 0.05538 3.39046 3.90294 2.73920 0.06680 1.18729 0.36391 + 34 2.22082 0.36258 2.75077 2.02704 347 c x - - + 1.15008 1.62014 1.86511 1.10673 + 0.06086 3.18178 4.04341 2.94504 0.05403 1.25991 0.33363 + 35 0.27033 2.66664 2.52541 2.43767 388 a x - - + 1.24951 1.47565 1.41392 1.42074 + 0.07123 3.00373 3.95552 3.13655 0.04440 1.28173 0.32512 + 36 2.83107 2.41670 2.97197 0.22235 439 t x - - + 1.37071 1.57683 1.38637 1.23972 + 0.05293 3.45216 3.91807 2.54402 0.08181 1.14651 0.38235 + 37 2.52322 2.25084 2.45909 0.31611 465 t x - - + 1.26335 1.55077 1.59008 1.19965 + 0.07504 3.13329 3.55006 3.08962 0.04659 1.13108 0.38962 + 38 0.45807 2.30687 1.98940 2.03143 512 a x - - + 1.15472 1.67511 1.53797 1.26320 + 0.09820 3.13076 2.99876 2.79197 0.06326 1.39915 0.28343 + 39 2.37471 0.42180 2.44763 1.80427 550 c x - - + 1.23785 1.49058 1.48364 1.35502 + 0.06081 3.19472 4.01643 2.41851 0.09327 0.94671 0.49105 + 40 2.32826 1.95481 2.36781 0.40458 578 t x - - + 1.36586 1.46001 1.43000 1.29720 + 0.05257 3.39673 4.03256 1.84862 0.17133 1.40979 0.27997 + 41 2.68669 2.13935 2.81520 0.28200 592 t x - - + 1.34965 1.42793 1.45781 1.31633 + 0.04735 3.57826 3.99988 2.09424 0.13144 1.22129 0.34934 + 42 2.55904 2.16444 2.70859 0.29952 609 t x - - + 1.12072 1.61936 1.63578 1.26895 + 0.07346 3.25910 3.42962 2.85641 0.05919 1.38363 0.28857 + 43 1.99923 1.61027 2.26343 0.57851 646 t x - - + 1.32290 1.58747 1.61095 1.11018 + 0.06656 3.08568 3.97944 2.44774 0.09046 0.75593 0.63407 + 44 0.23887 2.79899 2.55209 2.60783 675 a x - - + 1.18557 1.50323 1.59070 1.31590 + 0.05597 3.38637 3.88222 2.46900 0.08847 1.27945 0.32599 + 45 0.29593 2.53488 2.53903 2.32335 701 a x - - + 1.08710 1.54222 1.59276 1.40430 + 0.07539 2.94521 3.91062 1.91623 0.15918 1.22327 0.34852 + 46 2.58352 2.40524 2.76700 0.25955 725 t x - - + 1.19685 1.58503 1.74852 1.14293 + 0.06124 3.18279 4.02089 2.82961 0.06085 1.05474 0.42814 + 47 2.13251 2.88788 0.29508 2.50964 764 g x - - + 1.20891 1.55463 1.68206 1.19000 + 0.06526 3.12574 3.94910 2.41448 0.09367 1.10396 0.40280 + 48 2.23841 2.99164 0.25118 2.72900 792 g x - - + 1.26330 1.55339 1.52606 1.24355 + 0.05464 3.34968 4.01313 2.78872 0.06347 1.15133 0.38012 + 49 2.57533 0.32900 2.64632 2.01501 824 c x - - + 1.35118 1.39828 1.40141 1.39516 + 0.04340 3.79297 3.91506 1.59549 0.22666 1.20075 0.35806 + 50 0.46433 2.04127 2.23437 2.00605 833 a x - - + 1.23062 1.36903 1.62282 1.36182 + 0.05764 3.31530 3.92762 2.28791 0.10700 1.07910 0.41536 + 51 0.27513 2.77017 2.28518 2.57549 853 a x - - + 1.27958 1.58726 1.46109 1.25394 + 0.05750 3.30072 3.96214 2.60776 0.07656 1.25708 0.33475 + 52 0.20149 2.86434 2.84551 2.69770 883 a x - - + 1.23645 1.62259 1.71174 1.10368 + 0.05756 3.26729 4.02702 2.54508 0.08172 1.27391 0.32814 + 53 0.26982 2.65833 2.50477 2.46835 911 a x - - + 1.36005 1.50358 1.48100 1.22550 + 0.06921 3.37553 3.42118 2.36646 0.09851 1.27560 0.32748 + 54 0.40022 2.19284 2.22687 2.20396 934 a x - - + 1.12070 1.60472 1.53213 1.35895 + 0.05523 3.36752 3.94966 2.42917 0.09224 0.84774 0.55928 + 55 2.11356 0.46400 2.46442 1.79955 960 c x - - + 1.23932 1.35913 1.50478 1.46331 + 0.05187 3.47055 3.94022 2.35854 0.09933 1.12102 0.39445 + 56 1.85868 0.79440 2.22069 1.25971 983 c x - - + 1.21951 1.50212 1.51138 1.34185 + 0.06404 3.29054 3.69705 1.75742 0.18933 1.18410 0.36532 + 57 1.33272 2.32720 0.71452 1.90215 999 g x - - + 1.12229 1.49343 1.56653 1.42255 + 0.04920 3.46654 4.08749 2.17995 0.11996 1.31769 0.31164 + 58 2.48337 0.43652 2.46331 1.68683 1017 c x - - + 1.34704 1.55461 1.38112 1.28222 + 0.04823 3.61532 3.90311 2.20911 0.11631 1.00864 0.45368 + 59 0.41659 2.44509 1.93972 2.20507 1034 a x - - + 1.38198 1.38198 1.39194 1.38932 + 0.03641 3.98130 4.06929 1.35873 0.29704 1.31330 0.31325 + 60 0.41612 2.39160 1.97116 2.21075 1037 a x - - + 1.03649 1.46430 1.57421 1.57557 + 0.04769 3.52580 4.06641 2.32461 0.10294 0.84329 0.56263 + 61 2.66264 2.12302 2.82746 0.28581 1056 t x - - + 1.36925 1.39635 1.38930 1.39048 + 0.04097 3.97400 3.84718 1.39433 0.28502 1.12205 0.39395 + 62 2.26510 2.13196 2.42551 0.37231 1060 t x - - + 1.37965 1.39147 1.39147 1.38264 + 0.04082 3.91610 3.90805 1.24613 0.33914 0.95192 0.48776 + 63 0.41244 2.25761 2.16787 2.12907 1062 a x - - + 1.34515 1.41203 1.41203 1.37753 + 0.04054 3.77835 4.08203 1.30483 0.31638 1.11819 0.39582 + 64 2.51464 0.37905 2.62296 1.82008 1068 c x - - + 1.39543 1.38753 1.39233 1.37008 + 0.03854 3.90584 4.03535 1.36573 0.29463 1.13682 0.38689 + 65 2.16380 2.11332 2.18714 0.42765 1073 t x - - + 1.38764 1.38471 1.38519 1.38764 + 0.03575 4.05376 4.03073 1.40080 0.28289 1.03825 0.43707 + 66 2.79349 2.39141 2.87271 0.23478 1075 t x - - + 1.37227 1.39101 1.39101 1.39101 + 0.03597 4.01447 4.05827 1.39017 0.28639 1.06429 0.42308 + 67 2.82488 2.47749 2.93179 0.21887 1078 t x - - + 1.38141 1.39112 1.38915 1.38353 + 0.03661 3.99477 4.04370 1.35958 0.29675 1.13439 0.38804 + 68 2.77679 2.30433 2.90694 0.24425 1081 t x - - + 1.37593 1.38989 1.45520 1.32825 + 0.04447 3.68736 3.99242 1.76176 0.18843 0.98580 0.46703 + 69 2.47698 3.17398 0.19595 2.95437 1093 g x - - + 1.38264 1.38264 1.39734 1.38264 + 0.05358 3.96553 3.40487 1.40348 0.28202 1.03112 0.44100 + 70 2.84327 0.27906 2.97336 2.00890 1097 c x - - + 1.38629 1.38629 1.38629 1.38629 + 0.03412 4.08811 4.08811 1.46634 0.26236 0.69006 0.69625 + 71 0.21870 2.83638 2.69251 2.65798 1098 a x - - + 1.37446 1.37942 1.39640 1.39509 + 0.03670 3.93983 4.09935 1.41905 0.27700 1.10002 0.40476 + 72 2.35233 0.46085 2.23804 1.78715 1103 c x - - + 1.38536 1.38781 1.38781 1.38421 + 0.03493 4.03822 4.09272 1.39310 0.28542 1.09638 0.40658 + 73 2.57111 0.32543 2.74124 1.98892 1105 c x - - + 1.38629 1.38629 1.38629 1.38629 + 0.03381 4.09688 4.09688 1.46634 0.26236 1.09626 0.40664 + 74 0.27014 2.61416 2.53262 2.47636 1106 a x - - + 1.38629 1.38629 1.38629 1.38629 + 0.03461 4.09267 4.05587 1.46634 0.26236 1.09748 0.40603 + 75 0.52873 2.16549 1.91736 1.90409 1107 a x - - + 1.38629 1.38629 1.38629 1.38629 + 0.03426 4.08396 4.08396 1.46634 0.26236 1.07423 0.41788 + 76 2.33134 0.38082 2.65861 1.90055 1108 c x - - + 1.38629 1.38629 1.38629 1.38629 + 0.03466 4.07266 4.07266 1.46634 0.26236 1.09861 0.40547 + 77 2.20588 0.45134 2.35553 1.84373 1109 c x - - + 1.38629 1.38629 1.38629 1.38629 + 0.03550 4.04912 4.04912 1.46634 0.26236 1.09861 0.40547 + 78 2.69018 2.22054 2.82311 0.26898 1110 t x - - + 1.38629 1.38629 1.38629 1.38629 + 0.03711 4.00561 4.00561 1.46634 0.26236 1.09861 0.40547 + 79 0.16248 3.15867 2.86159 2.98963 1111 a x - - + 1.38629 1.38629 1.38629 1.38629 + 0.04048 3.92018 3.92018 1.46634 0.26236 1.09861 0.40547 + 80 0.17484 3.04770 2.86638 2.88183 1112 a x - - + 1.38629 1.38629 1.38629 1.38629 + 0.02045 3.90014 * 1.46634 0.26236 0.00000 * +// diff --git a/test/jalview/io/test_PKinase_hmm.txt b/test/jalview/io/test_PKinase_hmm.txt new file mode 100644 index 0000000..e1ad9f9 --- /dev/null +++ b/test/jalview/io/test_PKinase_hmm.txt @@ -0,0 +1,806 @@ +HMMER3/e [3.0 | March 2010] +NAME Pkinase +ACC PF00069.17 +DESC Protein kinase domain +LENG 260 +ALPH amino +RF no +CONS yes +CS yes +MAP yes +DATE Thu Jun 16 11:44:06 2011 +NSEQ 54 +EFFN 3.358521 +CKSUM 3106786190 +GA 70.30 70.30 +TC 70.30 70.30 +NC 70.20 70.20 +STATS LOCAL MSV -10.7215 0.70254 +STATS LOCAL VITERBI -11.6541 0.70254 +STATS LOCAL FORWARD -5.2305 0.70254 +HMM A C D E F G H I K L M N P Q R S T V W Y + m->m m->i m->d i->m i->i d->m d->d + COMPO 2.60017 4.19886 2.94089 2.63789 3.35087 2.89119 3.48337 2.79435 2.60265 2.43454 3.62613 3.06133 3.41286 3.09693 2.94507 2.65650 2.87761 2.67871 4.54052 3.43274 + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.00000 * + 1 2.91704 4.31028 4.76351 3.63148 2.10912 3.47710 4.39734 2.27639 3.96619 1.99282 3.42844 4.19567 4.43771 4.11903 3.67403 3.22736 3.14918 2.35905 3.32515 1.82622 1 y - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 2 2.77204 4.20708 3.06476 1.97968 4.66603 3.66509 3.19858 3.37903 2.25347 3.34018 4.38833 2.97180 4.05804 2.36838 2.43173 2.67542 2.50268 2.83403 5.78758 4.38976 2 e - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 3 2.90076 4.04294 3.31590 2.80413 3.08157 3.87481 4.12616 2.18958 2.49735 1.97194 3.73714 3.32717 3.98753 3.23115 3.12315 2.99137 2.62008 2.29426 5.21478 3.75979 3 l - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 4 2.89383 4.85429 3.10311 2.63174 3.71383 2.56808 3.47232 2.82076 2.61844 1.98342 3.72320 3.05498 4.17347 3.05527 3.32194 2.85608 2.93671 2.18878 5.40057 3.87183 4 l - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 5 2.68261 5.39185 2.80437 1.87471 4.73638 2.79887 3.69591 4.22191 2.19487 3.69685 4.08896 3.12413 3.70490 2.48424 2.08916 2.53260 3.02309 3.43812 5.82480 4.41426 5 e - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 6 2.77253 4.06085 3.07881 2.53373 4.10647 3.71564 3.68370 2.64290 2.00036 2.72968 4.17370 3.24239 3.08607 2.77632 2.72820 2.69921 2.54335 2.71931 5.60386 4.26496 6 k - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 7 3.42930 4.74416 5.34765 4.76823 3.71832 4.71430 5.09461 1.33015 3.54417 1.12594 3.33523 4.84641 5.00427 4.73010 4.64986 4.05097 3.66327 1.83083 5.51142 4.37013 7 l - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 8 2.57460 4.94286 4.00732 3.93216 5.40516 0.41612 5.15134 4.86315 4.18766 4.52736 5.33508 4.05990 4.45245 3.74651 4.46171 3.15888 3.14590 4.15180 6.71159 5.52767 8 G - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 9 2.30218 5.38172 3.03799 2.02026 4.18991 3.65799 3.84554 3.67215 2.28945 3.68495 4.42365 2.84227 3.73039 2.44555 2.39428 2.00278 2.95859 3.63127 5.81726 4.40923 9 s - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 10 4.54226 6.07621 5.39207 5.44513 6.34643 0.07137 6.34600 6.33790 5.73770 5.76452 6.83374 5.56171 5.46536 5.98137 5.73783 4.76037 5.08470 5.67502 7.03864 6.52156 10 G - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 11 2.06444 5.37337 2.91595 2.40063 4.70969 2.61181 3.84889 4.18948 2.46835 3.67503 4.41668 2.62917 4.05392 2.88235 2.66711 2.00495 2.47288 3.39649 5.81159 4.40596 11 s - - T + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 12 2.90920 4.46494 4.12493 3.14570 1.52027 3.22992 4.24969 2.92840 3.46467 2.66529 3.12827 3.55640 4.33979 3.72214 3.72236 2.53517 2.98442 2.55125 5.06498 2.30159 12 f - - T + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 13 2.21104 4.80722 4.64199 4.55509 5.54982 0.52550 5.49025 5.04875 4.70671 4.72740 5.47955 4.30215 4.43233 4.84666 4.86038 1.95116 3.45005 4.17507 6.87595 5.79039 13 G - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 14 2.71551 3.46186 3.01248 2.27453 4.55840 3.55853 3.50842 3.55064 2.03335 3.34882 4.31847 3.17065 4.07218 2.83960 2.83653 2.25762 2.26864 2.61469 5.72841 4.35037 14 k - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 15 3.17885 3.97005 5.63014 5.16553 4.35293 4.89782 5.77682 2.09398 5.06494 2.94083 4.14496 5.20428 5.30924 5.30763 5.20260 4.32158 3.61414 0.44769 6.26043 5.04118 15 V - - E + 2.68625 4.42232 2.77526 2.73102 3.46361 2.40519 3.72501 3.29361 2.67747 2.69306 4.24696 2.90353 2.73746 3.18153 2.89807 2.37893 2.77526 2.98499 4.58484 3.61510 + 0.09563 2.43065 5.73865 0.67073 0.71608 0.48576 0.95510 + 16 2.91101 3.31342 4.36759 3.41772 2.45121 4.01227 4.31421 2.75922 2.81772 2.31733 3.50420 3.69862 4.38187 3.88257 3.14725 3.02772 3.14303 2.46483 3.37889 1.69905 18 y - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 17 2.88484 5.28431 3.03179 2.31849 4.58595 3.47769 3.54625 2.98124 1.69233 2.43413 4.04064 3.16353 4.06907 2.72555 2.58277 2.55274 3.04512 3.20501 5.74377 4.36100 19 k - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 18 1.57125 2.56460 3.38436 3.39201 3.66458 2.34190 4.20526 2.93932 3.32823 2.44127 3.26099 3.74334 4.30466 3.60817 3.63469 3.01628 2.92537 2.55308 5.13581 3.91882 20 a - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 19 2.89298 4.40558 3.44708 2.63051 3.77015 3.77747 2.87940 2.57515 2.33949 2.85128 3.20054 3.37379 4.16367 2.65910 2.52913 2.67954 2.59930 2.46709 5.42679 3.74337 21 k - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 20 2.88350 5.37811 2.42858 2.28192 4.71668 3.65945 2.35349 4.19788 2.20596 2.91798 4.42054 2.38258 4.05280 2.81490 2.60119 2.77457 3.11461 3.76528 3.43428 3.80493 22 k - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 21 2.59359 5.30144 3.00667 2.46268 4.60954 3.67285 3.22394 2.91749 2.13087 2.60378 4.35201 3.05590 3.51881 2.48537 2.35096 2.62551 3.00998 2.84793 5.75687 4.36947 23 k - - T + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 22 2.64500 5.38003 2.46961 2.36386 4.71962 2.36153 3.71093 3.77963 2.19342 3.27291 4.42213 2.49968 3.44456 2.94396 2.94770 2.23767 2.90215 3.58800 5.81601 3.79868 24 k - - T + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 23 2.71410 5.35453 2.26257 2.17828 4.68327 3.06138 3.85215 3.65600 2.51871 3.65284 4.39957 2.64619 4.05631 2.95399 2.98284 2.41102 1.94961 3.19379 5.79713 3.78693 25 t - - T + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03260 5.01631 3.67114 0.61958 0.77255 0.48576 0.95510 + 24 2.77509 4.50579 3.06414 2.40741 4.68877 2.10468 3.84020 4.16638 2.52713 3.65577 4.39945 2.31826 2.82304 2.55347 2.45557 2.51717 3.10489 3.55245 5.79545 3.68618 26 g - - T + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.13496 4.99383 2.12471 0.61958 0.77255 0.54753 0.86365 + 25 2.82390 4.23357 2.59579 2.09029 4.65095 3.47120 3.53571 3.50264 1.93281 3.24335 4.10745 2.98984 3.99409 2.41262 2.43858 2.60001 2.84781 3.57090 5.75206 3.98239 27 k - - E + 2.68634 4.42166 2.77510 2.73101 3.46370 2.40521 3.72473 3.29370 2.67713 2.69347 4.24706 2.90350 2.73742 3.18145 2.89817 2.37895 2.77536 2.98516 4.58493 3.61485 + 0.21086 2.33296 2.37401 1.37928 0.29003 0.81455 0.58490 + 26 2.79249 4.86773 3.27912 2.48247 3.81836 3.65430 3.86742 2.36980 2.31612 2.40000 3.66176 2.98804 3.52938 2.45192 2.80383 2.80149 2.71760 2.93241 5.39419 3.83742 36 k - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01259 4.77670 5.49905 0.61958 0.77255 0.27298 1.43175 + 27 2.94684 4.40681 4.93000 4.33270 2.14562 4.19543 4.43742 2.60780 4.12995 2.51432 3.32273 4.32339 4.55150 4.25562 4.15094 3.50804 3.26683 1.12964 4.39266 2.23526 37 v - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 28 0.67405 4.13502 4.78133 4.26234 4.00859 4.13420 4.88775 2.58668 4.14876 2.87877 3.59530 4.37511 4.66004 4.38446 4.34251 3.50924 3.44597 2.20111 5.62436 4.43519 38 A - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 29 2.77559 4.05359 4.82280 4.21814 3.45081 3.88127 4.46447 1.69887 3.29990 2.06046 2.92956 4.25618 4.49083 4.18293 4.07725 3.28739 3.19210 1.31639 4.98894 3.80930 39 v - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 30 4.13385 6.06880 4.58555 3.84767 5.73274 4.53840 4.41573 5.06650 0.32256 4.37802 5.30885 4.14872 4.92009 3.55775 2.54913 4.11741 4.25754 4.75872 6.25921 5.22828 40 K - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 31 2.53136 3.93442 3.55191 2.54113 3.59001 3.81267 3.67691 2.09853 2.22431 2.85063 3.63116 3.45300 4.19661 2.87681 2.71089 2.96116 2.67441 2.46338 5.34241 3.76111 41 i - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 32 2.80227 4.30542 4.81704 3.71619 2.31247 3.45194 4.41496 1.85614 4.00698 1.68898 3.06826 4.22398 4.44809 4.15126 4.03957 3.11345 3.01936 1.82478 4.92889 3.75130 42 l - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 33 2.72320 4.19698 2.89173 2.30854 4.21536 3.66470 3.63903 3.54937 1.81020 3.33297 4.38970 2.50126 3.12497 2.85129 2.61476 2.47307 2.93549 3.43057 4.63863 3.86554 43 k - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 34 2.73748 5.16363 3.24304 2.62749 4.42406 3.39882 3.64889 3.08793 1.75481 2.64054 4.22767 2.81684 3.49630 2.92572 2.69253 2.71691 2.78362 2.91622 5.65055 3.09244 44 k - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 35 2.82342 4.21564 2.57688 2.18304 4.09635 3.66104 3.29269 4.17416 2.24176 3.24419 4.40775 3.13331 3.02670 2.66210 2.30119 2.38622 2.91913 2.84969 5.80393 4.13733 45 e - - H + 2.68618 4.42225 2.77520 2.73124 3.46354 2.40513 3.72495 3.29354 2.67741 2.69355 4.24690 2.90347 2.73731 3.18147 2.89801 2.37887 2.77520 2.98519 4.58477 3.61503 + 0.02362 3.90596 5.73865 0.48782 0.95182 0.48576 0.95510 + 36 2.81479 5.38805 2.34307 2.08229 3.84722 3.00939 3.24618 4.21561 2.24819 3.24444 4.42924 2.80965 3.63231 2.74299 2.65208 2.41080 2.72103 3.26063 5.82196 4.16400 47 e - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 37 2.42659 5.32934 2.94543 1.98753 4.27035 3.66735 3.85733 2.97282 2.27697 3.20526 3.75542 2.69174 3.50027 2.79550 2.45131 2.66535 2.70832 3.28701 5.77800 4.07668 48 e - - C + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 38 2.82479 5.36482 2.46403 2.36491 4.23121 3.19666 3.53460 3.47934 2.01766 2.87145 4.06028 2.53791 3.88358 2.73438 2.79605 2.39315 2.94316 3.30320 5.80464 3.67777 49 k - - C + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 39 2.81259 3.82036 2.58997 2.16257 3.93187 3.50795 3.44913 3.32347 2.23760 3.42042 3.43188 3.03914 3.18139 2.98833 2.90722 1.97318 3.04237 3.44327 4.85883 4.01646 50 s - - C + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.04017 5.01631 3.41907 0.61958 0.77255 0.48576 0.95510 + 40 2.75150 4.68420 2.78864 2.20581 3.96394 3.14028 3.85474 3.62649 2.17804 2.84544 3.93254 2.66146 3.79370 2.72658 2.87564 2.43841 2.71937 3.23202 3.36778 4.34996 51 k - - C + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01020 4.98634 5.70869 0.61958 0.77255 0.56699 0.83755 + 41 2.52028 4.29421 2.93844 2.26593 3.28616 3.42961 3.89113 3.40312 1.92589 2.89626 3.59280 3.04537 4.08209 2.42956 3.02333 2.89065 2.87512 2.78376 5.62895 3.97726 52 k - - C + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.06456 4.98634 2.88790 0.61958 0.77255 0.56699 0.83755 + 42 2.52102 4.66200 2.60886 2.12080 3.90563 3.43164 3.41299 3.76759 2.19798 2.95231 4.37667 2.71584 3.31098 2.66775 2.46389 2.65499 2.89357 3.57073 4.74853 4.36793 53 e - - C + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.06881 4.93254 2.82535 0.61958 0.77255 0.69302 0.69327 + 43 2.65676 5.27743 2.81592 2.16715 4.59834 3.44096 3.79920 2.82354 2.10889 3.57233 3.78816 2.93522 4.00237 2.20078 2.58862 2.72374 2.99283 3.18643 5.72482 3.30249 54 k - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.04191 4.87514 3.39892 0.61958 0.77255 0.80592 0.59181 + 44 2.46416 5.14935 3.14274 2.35064 4.42785 3.46788 3.62138 3.06885 2.39724 2.90472 4.00413 2.77252 4.01153 2.56699 2.69346 2.37713 2.33258 3.34725 5.62407 3.30627 55 t - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.15381 4.84499 2.00472 0.61958 0.77255 0.85820 0.55151 + 45 2.15178 5.11690 2.80767 2.47016 4.06926 3.56450 3.25874 3.42510 2.38373 2.72748 4.17388 2.58132 3.95629 2.68997 2.59104 2.52019 2.89357 3.10461 5.58730 3.84420 56 a - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.06869 4.70471 2.85898 0.61958 0.77255 1.05523 0.42788 + 46 2.33893 4.38200 3.78128 3.08857 2.87706 3.76539 4.03303 2.50172 2.82237 2.26545 3.48958 3.56901 4.14175 3.13269 2.43377 3.02211 2.55318 2.18677 4.40164 3.75633 57 v - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.07407 4.65033 2.78326 0.61958 0.77255 1.03937 0.43646 + 47 2.66580 4.77769 3.25859 2.69691 3.69577 3.61140 3.56963 3.36841 2.45062 2.28390 3.86113 2.83101 3.99793 3.01640 2.00932 2.40384 2.97180 2.98514 3.81809 4.01106 58 r - - H + 2.68588 4.42292 2.77574 2.73101 3.46421 2.40561 3.72562 3.29362 2.67747 2.69305 4.24679 2.90348 2.73776 3.18179 2.89693 2.37874 2.77432 2.98554 4.58544 3.61510 + 0.56084 0.85690 5.33966 1.67148 0.20822 0.22069 1.61932 + 48 3.87852 6.35819 2.88185 0.33512 5.75300 3.98086 4.66680 5.41085 3.73193 4.87592 5.81368 3.19190 4.67406 3.86930 4.28895 3.74624 4.21685 4.94226 6.88673 5.40485 78 E - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 49 2.34469 4.06185 4.67394 3.74635 3.19070 3.72385 4.38165 1.69529 3.89930 1.68521 3.30505 3.88179 4.42519 3.50953 3.71087 3.12279 3.14596 1.99339 4.94125 3.41486 79 l - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 50 2.41611 3.92039 3.06862 2.24055 4.69692 3.38839 3.50460 4.17440 2.17094 3.43336 4.01855 2.84870 4.05421 2.22409 2.42800 2.49697 2.93959 3.48161 5.80403 3.10747 80 k - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 51 2.65097 4.31309 4.79937 4.19096 3.25102 4.08746 4.41763 1.57396 3.99634 1.77576 3.18772 3.58572 4.45127 4.14513 4.03729 2.91921 3.15786 1.73265 4.93848 3.33785 81 i - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 52 2.71474 4.35776 4.49839 3.90546 3.26558 3.60358 3.11363 2.58541 3.76519 1.24138 2.56017 3.78382 4.40165 3.77674 3.90460 2.91080 2.88501 2.43218 4.97232 3.44306 82 l - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 53 2.21717 5.37509 3.13954 2.36108 4.71254 3.44569 3.50643 4.19289 1.90576 2.89362 4.41783 2.84264 3.50886 2.51670 2.27883 2.73413 2.79427 3.37900 5.81221 4.40629 83 k - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 54 2.88332 4.76187 3.15794 2.34306 4.64959 3.18467 2.98724 4.11774 2.20976 2.84622 3.53657 2.69640 4.06011 2.81953 2.22587 2.26090 2.67755 3.39248 5.77872 3.89328 84 k - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 55 2.92075 3.71086 4.82119 4.21031 2.91851 4.08375 4.41406 2.48059 4.00923 1.14255 2.77088 4.22517 4.44739 4.15194 3.51737 2.79440 3.04088 2.14784 4.92583 3.58797 85 l - - H + 2.68619 4.42231 2.77526 2.73130 3.46360 2.40505 3.72501 3.29360 2.67737 2.69361 4.24696 2.90322 2.73746 3.18153 2.89797 2.37878 2.77526 2.98514 4.58483 3.61509 + 0.21093 1.81438 3.60337 0.15203 1.95873 0.48576 0.95510 + 56 2.87228 4.32697 2.43695 2.52023 4.72535 3.09966 3.42727 4.21076 2.24746 3.68599 4.14994 2.21640 3.70120 2.45856 2.42604 2.20075 2.84715 3.77128 5.81417 4.40372 87 s - - S + 2.68626 4.42233 2.77498 2.73131 3.46362 2.40515 3.72479 3.29362 2.67733 2.69363 4.24698 2.90355 2.73719 3.18141 2.89809 2.37895 2.77498 2.98527 4.58485 3.61511 + 0.08622 2.53438 5.71435 0.90816 0.51628 0.44628 1.02166 + 57 2.95437 4.05540 4.02453 3.66262 4.73022 3.00582 0.63840 4.27369 3.61156 3.92435 4.76053 3.90244 4.38221 3.97389 3.93213 2.36608 3.39859 3.79517 6.08861 4.80370 91 H - - S + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 58 2.74925 4.59154 2.64384 2.02057 4.69046 3.19970 3.85151 4.16644 2.39568 3.65893 3.99620 3.06676 1.73396 2.95270 2.98758 2.52836 2.96698 3.57815 5.80119 4.39902 92 p - - S + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 59 2.77600 3.63123 3.60742 3.04389 2.88763 3.83093 3.22852 3.27052 2.82124 2.96220 3.83761 1.44485 4.21384 3.33393 3.26463 3.06163 2.84916 2.86372 5.30436 2.85576 93 n - - S + 2.68619 4.42226 2.77521 2.73125 3.46355 2.40506 3.72496 3.29355 2.67742 2.69356 4.24691 2.90348 2.73741 3.18148 2.89802 2.37880 2.77521 2.98520 4.58478 3.61504 + 0.02736 3.73933 5.73865 0.64347 0.74542 0.48576 0.95510 + 60 3.43736 4.73250 5.40681 4.85032 3.21534 3.89737 5.21348 0.72821 4.70181 2.29095 3.77438 4.92025 5.08011 4.86610 4.77171 4.12622 3.68020 1.72131 5.65218 4.46593 96 i - - B + 2.68620 4.42119 2.77522 2.73126 3.46356 2.40515 3.72497 3.29356 2.67743 2.69357 4.24692 2.90349 2.73742 3.18149 2.89780 2.37889 2.77522 2.98521 4.58479 3.61505 + 0.04171 3.27988 5.73865 0.65380 0.73410 0.48576 0.95510 + 61 3.22247 3.52386 5.20134 4.62057 3.74032 4.49428 4.89197 1.38422 4.44333 2.03444 3.40884 4.64781 4.83078 4.60265 4.48778 3.55308 3.01459 1.16992 5.37248 4.18666 99 v - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 62 2.72238 4.59459 3.13585 2.30027 4.72566 3.17722 3.67251 4.20868 2.00822 3.53187 4.42604 2.97500 3.44674 2.41134 2.06447 2.53711 2.32763 3.77297 5.81907 4.41084 100 k - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 63 2.75790 4.02501 4.89076 4.27684 2.25991 4.10991 4.44304 2.31340 4.06541 1.38378 2.56521 4.26823 4.47075 4.19670 4.07763 3.42134 2.72551 2.21249 4.93572 3.01728 101 l - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 64 2.79378 4.36122 4.48297 3.70404 2.84684 4.03133 3.55103 1.94759 2.82835 1.82248 3.32801 4.05424 4.39941 3.70850 3.13439 3.15759 3.14407 2.41334 4.25902 2.30786 102 l - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 65 2.47264 4.33075 2.07830 2.03157 4.71750 2.27093 3.18950 4.19892 2.58523 3.68152 4.42156 3.04070 4.05295 2.84140 2.67254 2.59104 3.11515 3.76615 5.81569 3.60292 103 e - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 66 2.10377 4.03530 4.82986 4.21790 2.76136 4.07923 4.41023 2.08081 4.01359 2.30827 2.78821 4.22543 4.44340 4.15406 4.03913 2.38166 2.60707 1.97272 3.19782 3.33258 104 v - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 67 2.82605 3.67894 3.38070 3.01266 1.82001 3.97118 3.82789 2.76491 3.48734 2.34143 3.24926 3.10725 3.78017 3.42990 3.73647 2.98277 3.13977 2.32864 3.87637 2.72935 105 f - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.04987 5.01631 3.16967 0.61958 0.77255 0.48576 0.95510 + 68 2.55964 4.21441 3.10666 1.94329 4.49707 3.21758 3.46239 3.37098 2.39709 3.00488 3.51821 3.06808 4.06187 2.54621 2.66989 2.75991 2.68522 3.13970 5.68635 3.14043 106 e - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02094 4.97674 4.28127 0.61958 0.77255 0.42506 1.06054 + 69 2.80310 5.38415 2.22807 2.18295 4.72718 3.65266 3.36574 4.21171 2.46641 3.56699 4.42536 2.57848 3.46451 2.86899 2.36310 2.58224 2.17995 3.52075 5.81804 3.65548 107 t - - E + 2.68640 4.42162 2.77535 2.73147 3.46354 2.40551 3.72458 3.29233 2.67716 2.69348 4.24762 2.90375 2.73699 3.18187 2.89837 2.37858 2.77480 2.98522 4.58549 3.61548 + 0.36809 1.18844 5.72853 1.68950 0.20409 0.46837 0.98355 + 70 2.88244 5.39287 2.47300 2.29715 3.79460 2.82884 3.28660 4.22374 2.09832 3.69810 4.43357 2.45444 3.07035 2.85151 2.47539 2.34133 3.01376 3.78345 5.82560 4.10620 126 k - - T + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 71 2.57798 5.39101 2.06614 2.42374 4.73510 2.82383 3.84381 4.22040 2.28304 3.69587 4.43195 2.62257 3.38372 2.71683 2.73886 2.29050 2.66881 3.34289 5.82427 4.18691 127 d - - T + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 72 2.58231 5.35788 2.77781 2.22432 4.08337 3.66211 2.49021 4.16401 2.37240 3.16748 4.40241 2.52484 4.05523 2.76334 2.63486 2.49164 2.89823 3.30761 4.95167 3.05734 128 e - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 73 2.78575 3.74303 4.78141 4.17260 2.95491 4.07322 4.40160 1.89067 3.97854 1.60353 2.95383 3.71592 3.11906 4.12798 3.50390 3.07790 2.85145 2.24111 4.92509 2.91282 129 l - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 74 2.58399 2.76389 4.59675 3.99881 3.19843 4.04871 3.62339 2.65148 3.84111 2.12752 3.45456 3.62454 3.46238 4.02369 3.94739 2.79096 3.14543 2.42948 3.13888 1.74690 130 y - - E + 2.68624 4.42096 2.77500 2.73129 3.46360 2.40508 3.72501 3.29360 2.67747 2.69353 4.24696 2.90343 2.73746 3.18153 2.89807 2.37893 2.77510 2.98525 4.58483 3.61509 + 0.10354 2.49668 4.13492 0.66960 0.71726 0.48576 0.95510 + 75 3.07392 4.44555 4.97084 3.81418 2.87255 4.25097 4.57886 1.74564 4.16653 1.31678 2.12605 4.39109 4.59167 3.71495 4.19337 3.56380 3.30386 2.29390 5.05348 3.89648 133 l - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01003 5.00344 5.72579 0.61958 0.77255 0.52175 0.90012 + 76 2.86449 3.41378 5.01300 4.41506 3.07458 4.28568 4.64425 1.49634 4.22335 2.27773 3.54368 4.43380 4.63588 3.70581 4.25773 3.60458 3.30826 1.19505 5.13861 3.95920 134 v - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01003 5.00344 5.72579 0.61958 0.77255 0.46390 0.99109 + 77 2.91733 4.35063 4.55668 3.96112 2.40516 4.04680 4.36140 2.56068 3.81048 1.70108 1.79340 3.59899 4.41359 3.09405 3.93172 3.15547 2.48177 2.59902 4.96582 3.78095 135 l - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 78 2.76564 5.57030 2.50020 1.03018 4.90220 3.70297 3.44513 4.39514 2.75995 3.87044 4.62325 3.16505 3.19754 2.75935 3.27129 2.65802 3.28146 3.95557 6.00401 4.57374 136 e - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 79 2.81579 3.90369 4.68991 4.08721 2.27644 4.06399 3.63829 2.69790 3.58050 1.84024 3.31248 4.16081 4.42953 4.07816 3.60709 3.36667 3.01039 2.57256 4.40465 1.54393 137 y - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 80 2.45920 2.17262 4.69646 4.09287 3.22405 3.32199 3.21264 2.59887 3.91610 2.06244 2.25581 4.16309 3.61702 4.08102 3.98811 3.14866 3.14614 2.03766 4.93767 3.46778 138 v - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.04171 5.01631 3.37486 0.61958 0.77255 0.48576 0.95510 + 81 2.70314 5.37371 2.37994 1.91497 4.71601 2.93053 3.83161 4.20005 2.46492 3.55263 3.57885 2.58870 2.59223 2.74552 2.71928 2.69862 3.03649 3.29150 5.80804 4.39872 139 e - - T + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01022 4.98481 5.70716 0.61958 0.77255 0.57090 0.83245 + 82 2.41993 3.72287 3.12898 2.52046 4.44831 1.89639 3.49536 3.62837 2.38762 3.31281 3.53904 2.44913 3.42379 3.00780 3.12891 2.87912 2.75467 3.52812 5.65946 3.81984 140 g - - S + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.10979 4.98481 2.33166 0.61958 0.77255 0.57090 0.83245 + 83 2.77350 5.21303 2.43943 2.62703 4.54309 1.39496 3.89257 3.99092 2.60267 3.54085 4.32260 3.04209 4.06226 3.01831 3.03242 2.64588 2.77651 3.04353 5.73236 4.35922 141 g - - - + 2.68631 4.42210 2.77537 2.73126 3.46359 2.40522 3.72475 3.29338 2.67758 2.69250 4.24657 2.90377 2.73770 3.18148 2.89796 2.37902 2.77541 2.98478 4.58507 3.61496 + 0.21230 1.67338 5.60865 1.39945 0.28334 0.33567 1.25476 + 84 2.88583 5.39491 1.79381 2.06461 4.73890 3.24821 3.51210 4.22442 2.47141 3.51906 4.43601 2.95989 3.57031 2.79057 2.82788 2.02605 2.91163 3.62254 5.82805 4.41723 147 d - - B + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 85 2.90986 4.42406 3.70533 3.66371 3.02577 3.99009 3.90749 2.78363 3.56278 1.02082 3.24022 3.34355 4.36146 3.52102 3.78389 3.13807 2.95820 2.60948 5.03043 3.48016 148 l - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 86 2.57337 4.10245 3.03950 2.95233 2.09915 3.53742 3.15959 3.37138 2.66519 2.44003 3.54971 3.10382 3.71714 3.06888 3.13958 2.44794 3.05039 3.11306 4.61969 3.07664 149 f - - H + 2.68621 4.42228 2.77522 2.73126 3.46357 2.40516 3.72497 3.29357 2.67744 2.69358 4.24693 2.90350 2.73735 3.18149 2.89804 2.37890 2.77502 2.98521 4.58480 3.61458 + 0.24291 3.02648 1.78874 0.58545 0.81386 0.48576 0.95510 + 87 2.29362 5.30873 1.92419 2.32474 4.26868 3.43187 3.46788 4.12970 2.37357 3.61146 4.35100 2.92576 3.98105 2.69850 2.60197 2.47206 2.54407 3.69618 5.74493 3.96335 152 d - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01185 4.83724 5.55959 0.61958 0.77255 0.87096 0.54223 + 88 2.24696 4.24235 4.56569 3.96478 2.41045 3.97137 3.29432 2.27668 3.43922 2.04964 3.19406 4.05576 4.33743 3.97000 3.38896 3.27217 3.06100 2.23241 4.18296 2.20711 153 l - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01185 4.83724 5.55959 0.61958 0.77255 0.87096 0.54223 + 89 3.80243 5.01974 5.81731 5.27268 3.70245 5.26548 5.70409 1.30084 5.15744 0.98923 3.04180 5.42350 5.39649 5.16571 5.17462 4.65797 4.03105 1.75151 5.84473 4.80632 154 l - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01185 4.83724 5.55959 0.61958 0.77255 0.62617 0.76494 + 90 2.48275 5.13868 3.18520 2.44727 3.97540 3.65122 3.65677 3.36126 2.16734 3.30486 3.19390 3.06911 4.04233 2.41632 2.75033 2.25069 2.41675 3.09873 5.62108 3.69504 155 k - - H + 2.68595 4.42186 2.77509 2.73103 3.46377 2.40517 3.72421 3.29387 2.67761 2.69368 4.24695 2.90368 2.73754 3.18175 2.89730 2.37895 2.77536 2.98514 4.58473 3.61505 + 0.63487 1.25520 1.68753 1.39580 0.28453 0.74756 0.64154 + 91 2.43987 5.24839 2.75312 2.20207 4.11839 3.54175 3.72993 4.06095 2.07671 3.34429 3.98666 2.75679 3.72576 2.60349 2.28520 2.46158 2.79062 3.43756 5.68761 3.81452 172 k - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01352 4.70589 5.42824 0.61958 0.77255 0.34096 1.24163 + 92 2.56414 5.37054 2.84426 2.11401 4.71382 2.70860 2.88683 4.19851 2.19051 3.14492 4.41168 2.55924 4.03189 2.79129 2.63798 2.35762 3.09530 3.76022 5.80426 3.44686 173 e - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01035 4.97167 5.69402 0.61958 0.77255 0.60365 0.79145 + 93 2.86527 4.78061 2.95620 2.59670 4.27271 1.99448 3.84571 3.48713 2.08881 3.39073 4.33266 2.46895 3.64059 2.84730 2.63768 2.84659 2.50396 3.24160 5.73764 4.35043 174 g - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01035 4.97167 5.69402 0.61958 0.77255 0.46145 0.99524 + 94 2.57883 3.45102 3.31966 2.70191 4.02973 3.16828 3.76144 3.12068 2.26544 3.06289 4.10647 2.81108 2.70638 2.99156 2.57108 2.49596 2.68439 2.78596 4.48656 4.03099 175 k - - S + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01001 5.00539 5.72774 0.61958 0.77255 0.51640 0.90799 + 95 3.00846 4.37852 4.95050 4.33851 2.03946 4.18408 4.51243 2.07907 4.13124 1.32746 2.71567 3.86888 4.53472 4.25457 4.14405 3.49709 3.23945 2.15194 4.98866 3.35208 176 l - - T + 2.68632 4.42239 2.77534 2.73137 3.46298 2.40515 3.72509 3.29351 2.67755 2.69332 4.24641 2.90361 2.73734 3.18136 2.89815 2.37881 2.77519 2.98532 4.58491 3.61446 + 0.13280 2.11108 5.72774 1.00017 0.45858 0.46707 0.98573 + 96 2.55096 5.39506 2.51329 2.14467 4.73966 3.20813 3.84532 4.22553 2.37049 3.70015 4.43599 2.79265 3.16832 2.74582 2.82569 1.88822 2.42672 3.78548 5.82793 4.41687 180 s - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 97 2.55253 5.00371 2.91674 1.56530 3.77486 3.74196 3.71669 3.18678 2.77868 2.90828 3.00031 3.29724 3.28640 3.12328 3.07027 2.76413 2.89289 3.32236 3.74938 3.48354 181 e - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 98 2.59075 4.32000 2.44335 2.15201 3.95693 3.12347 3.34011 3.83572 2.30797 3.16698 3.93315 2.75363 3.60071 2.81660 2.61665 2.70578 2.85000 3.34465 3.67935 4.00275 182 e - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 99 2.65092 5.35978 2.44414 1.82235 4.69093 3.44711 3.03513 3.63938 2.46445 2.69072 4.40412 3.13476 3.87902 2.43027 2.99516 2.67955 2.75495 3.20344 5.80088 4.03299 183 e - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 100 1.86496 3.02665 4.71869 4.11439 3.41506 3.78632 4.39467 1.72869 3.93413 2.03606 3.25110 4.17623 4.43415 4.09606 3.42450 3.02051 2.94480 2.04904 4.94015 3.76003 184 i - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 101 2.66380 3.60669 3.09016 2.70629 3.97052 3.12773 3.91117 3.25572 1.80561 2.74214 4.19581 3.23071 4.10037 2.51557 2.19861 2.73033 3.11863 2.97558 5.62300 4.27841 185 k - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 102 2.65525 3.61780 2.73206 2.59880 2.91626 3.69337 3.17740 3.91061 2.06495 2.87551 3.62080 2.65252 4.08468 3.01717 2.55140 2.50072 2.84956 3.37543 5.67937 3.86408 186 k - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 103 2.78549 3.75825 4.89230 4.27707 2.37628 4.09576 4.42870 1.58181 4.06146 2.16353 2.83229 4.25917 4.45832 4.19107 4.06819 3.40747 3.15724 2.08428 3.94244 2.32199 187 i - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 104 1.91854 4.04767 4.83572 4.22341 2.21465 3.82491 4.41156 2.18264 4.01792 2.17430 2.43077 4.22827 4.44431 4.15736 4.04152 2.82624 2.88622 2.07903 4.25105 3.74133 188 a - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 105 2.59846 4.94560 3.39451 2.56515 3.67443 3.44440 3.79808 3.54150 2.22767 2.11264 4.02778 3.19297 4.14629 3.16161 2.51054 2.63727 2.68778 3.11215 4.13689 2.62651 189 l - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 106 2.71202 4.65478 2.93025 2.07602 4.70407 3.24619 3.70431 4.18261 2.58938 3.67040 4.10390 3.00747 4.05496 1.41184 3.00214 2.55548 2.74962 3.75459 5.80879 4.40428 190 q - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 107 3.40758 4.70636 5.39472 4.82751 3.82844 4.73217 5.15283 1.33187 4.66862 1.85779 2.55181 4.88258 5.03394 4.81634 4.72035 4.07618 2.46891 1.37416 5.58393 4.41648 191 i - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 108 2.29107 3.23763 4.81578 4.20571 3.00975 3.26830 4.41487 2.37700 4.00619 1.39060 3.28560 4.22330 4.44775 4.15070 4.03923 2.94875 3.15303 1.86969 4.92930 3.75166 192 l - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 109 2.62933 4.07203 2.95927 2.08969 4.71415 3.53463 3.84677 3.97436 2.17805 2.82549 4.41873 2.79932 4.05232 2.53645 2.16719 2.25459 2.86145 3.76301 5.81311 4.40656 193 e - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 110 1.17650 4.82606 4.24050 3.83461 4.98724 1.08848 4.85992 4.42183 3.81285 4.07900 4.88120 3.97861 4.34888 4.10941 3.49121 2.50205 3.18154 3.58125 6.30917 5.10145 194 g - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 111 3.90271 5.14012 5.90469 5.33230 3.41122 5.28833 5.65529 2.02087 5.19062 0.88043 2.65524 5.45552 5.42442 5.15469 5.16815 4.66249 4.12260 1.40813 5.79888 4.77647 195 l - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 112 2.18892 5.38966 2.64044 1.97751 4.73333 3.65659 3.60437 3.92129 2.10090 3.35469 4.43069 2.33847 4.05005 2.60616 2.77179 2.58383 3.11351 3.51057 5.82316 3.92131 196 e - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 113 2.81051 5.07767 4.77644 4.29954 2.03535 4.57845 2.23184 3.59557 4.18346 3.18325 4.21755 4.37554 4.93163 4.33627 4.35340 3.88728 3.48134 3.41897 4.49144 0.85916 197 y - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 114 3.22459 2.61128 5.38969 4.79509 3.58979 4.68737 5.03975 1.79213 4.61293 0.89179 2.61919 4.84389 4.96801 4.69100 4.62327 4.02095 3.66625 2.57847 5.40913 4.29402 198 l - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 115 4.50357 5.94639 4.67261 4.49457 2.97674 4.90740 0.35314 4.75553 4.20979 3.98991 5.25041 4.60971 5.36272 4.62490 4.36557 4.47961 4.76464 4.60938 4.62703 2.51319 199 H - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 116 2.59851 4.33805 2.68311 2.05797 4.71676 3.15802 3.59362 3.65569 2.43439 3.32473 4.42034 2.78736 4.05190 2.70193 2.69422 1.73897 3.11362 3.60918 5.81450 4.40740 200 s - - H + 2.68619 4.42226 2.77521 2.73118 3.46355 2.40514 3.72496 3.29355 2.67742 2.69356 4.24691 2.90348 2.73741 3.18131 2.89802 2.37888 2.77521 2.98510 4.58478 3.61505 + 0.04979 3.09322 5.73865 0.35009 1.21950 0.48576 0.95510 + 117 2.54785 4.42029 2.89622 2.25922 4.34868 3.66610 3.21799 3.71995 2.27125 3.07920 3.10189 2.25867 4.05899 2.34775 2.56766 2.85682 3.11428 3.36249 5.78309 3.93739 202 n - - T + 2.68634 4.42198 2.77524 2.73138 3.46344 2.40486 3.72467 3.29300 2.67713 2.69352 4.24714 2.90371 2.73709 3.18145 2.89825 2.37911 2.77527 2.98532 4.58501 3.61528 + 0.09842 2.40225 5.73865 1.69597 0.20263 0.48576 0.95510 + 118 2.53322 5.34393 2.95935 2.59629 3.94657 1.84501 3.63806 4.14023 2.18335 3.64044 4.39013 2.55576 3.77395 2.95784 2.71428 2.21077 3.11477 3.72355 4.68564 4.39095 213 g - - T + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 119 3.55513 4.24694 5.60079 5.05662 2.60993 4.96071 5.43324 0.97900 4.91818 2.09234 3.80321 5.12225 5.23216 5.06726 4.97588 4.32549 3.79818 1.34455 5.81250 4.64107 214 i - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 120 2.50668 3.55624 4.84676 4.23404 3.24346 4.08398 4.41611 1.66920 4.02684 2.01982 2.79518 4.23489 4.44784 4.16480 3.83668 2.91482 2.83994 1.71230 4.92013 3.32611 215 i - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 121 4.62495 5.94818 4.90176 4.71687 2.80207 5.05504 0.41821 4.71670 4.43975 3.92227 5.21366 4.70109 5.45885 4.74110 4.56151 4.57303 4.86606 4.59605 4.46431 2.05738 216 H - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 122 3.04282 4.16968 3.83274 3.22981 4.12386 3.92565 4.16387 3.45658 2.89535 2.79946 3.52962 3.63885 4.33284 3.40809 0.88367 3.03173 2.91452 3.20781 5.47983 4.24517 217 r - - S + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 123 4.66549 6.56867 0.13049 3.73947 6.20930 4.51726 5.46620 6.15252 4.80154 5.54790 6.65359 4.31602 5.22661 4.77980 5.35908 4.57977 5.04873 5.69924 7.06132 6.05090 218 D - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 124 4.11594 5.30633 6.13178 5.57769 3.73657 5.59693 5.98457 1.50133 5.46568 0.67788 3.07617 5.76705 5.63423 5.36401 5.43088 5.00606 4.33175 2.14525 5.97972 5.01356 219 L - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 125 4.55719 6.24846 4.80697 4.34215 5.94023 4.73956 5.02576 5.52333 0.17090 4.86848 5.87217 4.66859 5.24422 4.23030 3.41495 4.59394 4.77093 5.20290 6.57866 5.65826 220 K - - S + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 126 2.73388 4.87911 3.10327 2.90832 4.07991 3.41413 4.01646 3.20246 2.89177 2.38683 3.78561 3.39051 1.51394 3.22647 3.32105 2.31617 2.81372 3.19214 5.43675 4.15025 221 p - - G + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 127 2.30763 5.39894 2.49711 1.50775 4.74209 3.53358 3.60730 4.22742 2.31483 3.70337 3.89187 2.94609 4.05547 2.65035 3.08133 2.29509 3.12215 3.78862 5.83238 4.42137 222 e - - G + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 128 4.24075 6.04161 4.10323 4.13804 5.66046 4.44992 5.52992 5.77835 4.64675 5.26705 6.30900 0.15130 5.17553 4.91694 4.94682 4.32646 4.70552 5.25421 6.75952 5.61338 223 N - - G + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 129 3.55135 3.88080 5.58388 5.03211 3.05772 4.93598 5.38843 0.81084 4.88763 1.84199 3.74557 5.09695 5.20522 5.02095 4.93631 4.29650 3.79207 1.75582 5.75938 4.60163 224 i - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 130 4.26500 5.46000 6.21355 5.61602 2.31085 5.64571 5.88455 2.68862 5.47780 0.52109 2.36789 5.81754 5.61663 5.25881 5.37169 5.03996 4.45544 2.72136 5.81387 4.88779 225 L - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 131 3.14725 3.80930 5.11896 4.51210 2.75868 4.35237 4.69393 1.48763 4.30885 1.32733 3.15909 4.51494 4.68518 4.42027 4.31553 3.67228 3.37834 1.91515 5.14039 3.60311 226 l - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 132 2.83132 4.28838 2.02200 2.41335 4.70055 3.12743 3.31546 4.17875 2.06503 3.46693 4.09733 2.49326 4.05387 2.94892 3.07895 2.27711 2.89161 2.90947 5.80603 4.40188 227 d - - E + 2.68620 4.42227 2.77521 2.73125 3.46356 2.40515 3.72496 3.29356 2.67743 2.69346 4.24692 2.90348 2.73741 3.18137 2.89794 2.37889 2.77521 2.98513 4.58479 3.61505 + 0.19179 2.92011 2.11536 0.31959 1.29625 0.48576 0.95510 + 133 2.77846 5.34345 2.73873 2.12504 4.68884 3.31622 3.10327 4.17503 2.07146 3.64885 4.14408 2.35495 3.55373 2.53396 2.68259 2.30312 2.80970 3.73426 5.77591 4.07717 229 k - - T + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01122 4.89146 5.61380 0.61958 0.77255 0.46383 0.99121 + 134 2.76231 5.37627 2.40965 2.30431 4.72103 3.48860 3.46007 4.20680 2.15285 3.68141 4.41704 2.22463 3.54282 2.67483 2.66394 2.48608 2.48229 3.08661 5.80911 4.39830 230 k - - T + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01030 4.97674 5.69908 0.61958 0.77255 0.42506 1.06054 + 135 2.88621 4.31580 2.58861 2.52891 4.00821 1.80604 3.64216 3.70404 2.55848 3.01103 3.82083 2.93142 3.28125 2.96153 3.15140 2.63196 2.92652 3.07947 5.65563 3.39061 231 g - - T + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 136 2.74326 5.32913 2.62872 2.23118 4.20190 3.27586 3.01088 3.39612 2.54602 3.28443 3.99578 2.66732 4.06020 2.45230 2.82728 2.54748 2.65672 2.69485 5.77785 3.49295 232 e - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 137 2.61635 3.28525 4.16732 3.71739 2.98202 4.03403 4.34546 2.03775 3.50788 1.92540 3.47356 3.38535 3.11745 3.96570 3.52677 3.32696 2.46663 1.86856 4.97202 3.78516 233 v - - E + 2.68644 4.42087 2.77438 2.73125 3.46306 2.40580 3.72561 3.29182 2.67742 2.69394 4.24637 2.90298 2.73752 3.18209 2.89809 2.37898 2.77573 2.98487 4.58490 3.61464 + 0.36530 1.19470 5.73865 2.01193 0.14356 0.48576 0.95510 + 138 2.92386 3.12674 3.30583 2.50241 4.41812 3.73989 3.57074 3.83865 1.16713 3.42239 3.64701 3.25964 4.12762 3.06518 2.74407 2.94589 3.15200 3.22587 5.64420 3.71460 253 k - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 139 3.61791 5.07369 5.93139 5.42030 4.01697 5.40165 5.95563 1.06228 5.32659 1.08905 3.76387 5.56598 5.56723 5.42106 5.39317 4.81179 4.11011 1.74432 6.14737 5.05160 254 i - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 140 1.74479 2.79152 4.35686 3.77898 3.55350 2.78668 4.34505 2.08763 3.66685 2.55990 3.56128 3.98833 4.38080 3.89329 3.86150 2.46831 2.34811 2.41028 5.05799 3.86488 255 a - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 141 4.66549 6.56867 0.13049 3.73947 6.20930 4.51726 5.46620 6.15252 4.80154 5.54790 6.65359 4.31602 5.22661 4.77980 5.35908 4.57977 5.04873 5.69924 7.06132 6.05090 256 D - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 142 4.66482 5.73614 5.86239 5.64956 0.40883 5.43325 4.33355 3.86711 5.42110 2.16428 4.36705 5.11239 5.65371 5.16689 5.27011 4.83252 4.86624 3.98432 3.74189 2.69037 257 F - - G + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 143 3.93699 5.85566 3.02816 3.87037 6.00993 0.21285 5.44927 5.75466 4.70121 5.27717 6.21696 4.31536 4.99427 4.76567 5.12629 4.02226 4.42780 5.10478 6.99282 5.96830 258 G - - T + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 144 2.54355 3.67295 4.73868 4.13265 2.71576 4.06852 3.76754 2.37455 3.94756 1.20416 3.31174 3.74431 4.43365 4.10500 4.00521 2.64259 3.14725 2.29206 4.93223 3.75278 259 l - - T + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03189 5.01631 3.69859 0.61958 0.77255 0.48576 0.95510 + 145 0.77520 2.86695 4.81978 4.47036 4.95592 3.15951 5.20700 4.36343 4.38394 4.08078 4.90451 4.25075 4.38058 4.58838 4.56864 1.45304 3.34905 3.34992 6.35477 5.22001 260 a - - . + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.07711 4.99453 2.69658 0.61958 0.77255 0.54567 0.86620 + 146 2.54977 3.79925 3.16699 2.32606 4.48674 3.31547 3.84408 3.47518 1.75582 3.12339 4.25869 2.84258 4.04145 2.96441 2.18943 2.71334 2.91887 2.95414 5.67187 4.30075 261 k - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.13472 4.92824 2.13029 0.61958 0.77255 0.70219 0.68419 + 147 2.64685 3.78445 3.06669 2.61534 3.32325 3.67596 3.69246 3.14713 2.01231 2.43193 3.43451 3.16113 4.06301 2.47274 3.08778 2.74475 2.84906 2.65428 5.37440 4.07606 262 k - - . + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.29473 4.80574 1.39802 0.61958 0.77255 0.92027 0.50818 + 148 2.40579 4.15423 4.25399 3.66267 2.39272 3.57693 3.44550 2.33935 3.03827 1.86796 2.97007 3.83355 4.18573 3.73297 3.67827 3.10851 2.93289 2.21754 4.76738 2.96352 263 l - - . + 2.68635 4.42219 2.77489 2.73146 3.46367 2.40530 3.72500 3.29419 2.67720 2.69370 4.24630 2.90362 2.73727 3.18122 2.89818 2.37860 2.77478 2.98583 4.58472 3.61420 + 0.77167 0.63015 5.24955 1.50734 0.25038 0.20147 1.70117 + 149 2.68930 5.13793 2.99383 2.28756 4.12167 3.02811 3.40047 2.83046 2.53990 2.67433 3.91490 2.66806 3.85841 2.95123 3.08518 2.54554 2.43488 3.14237 4.83794 3.11842 281 e - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 150 2.67960 3.59834 3.08049 2.32634 4.00400 2.85568 3.65072 3.26198 2.22635 2.80014 3.89773 3.03566 3.90780 2.84131 2.77630 2.59674 2.54121 2.94346 4.66327 3.60288 282 k - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 151 2.78407 5.36932 2.80723 2.38070 3.95652 3.28210 3.31902 3.80407 2.38757 3.23090 4.41260 2.26860 2.87333 2.94776 2.55475 2.11230 2.82314 3.31603 5.80800 4.40313 283 s - - C + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 152 2.55066 5.37311 2.42428 2.58328 4.70981 2.65546 3.66067 3.46611 2.34139 3.39818 4.41598 2.44705 3.58966 2.48003 2.87086 2.30355 2.92043 3.58081 5.81084 3.32103 284 s - - S + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 153 2.61131 5.36709 3.05324 2.00706 4.70125 2.53001 3.45141 4.17959 2.46541 3.54879 4.41063 3.13225 3.27183 2.67970 2.77280 2.14590 2.62504 2.97295 5.80635 3.79465 285 e - - S + 2.68619 4.42226 2.77520 2.73124 3.46320 2.40514 3.72495 3.29355 2.67742 2.69356 4.24691 2.90348 2.73740 3.18147 2.89802 2.37888 2.77520 2.98519 4.58478 3.61504 + 0.03620 3.43177 5.73865 0.40966 1.09027 0.48576 0.95510 + 154 2.80870 4.76397 2.82688 2.35901 3.53520 3.31737 3.24083 3.53679 2.31494 2.98485 3.52265 2.69923 3.15465 2.90046 2.56489 2.40361 2.83318 3.04461 5.74293 3.76697 287 k - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 155 2.38638 3.55872 3.84850 3.27925 3.07902 3.89951 3.49984 3.07191 2.87600 2.13071 2.79826 2.94436 3.28103 3.24012 3.30127 2.77627 2.52689 2.66914 5.17020 2.84075 288 l - - C + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 156 2.88266 4.79637 2.63708 2.49106 4.69372 3.27452 3.02757 4.17056 2.31920 3.54781 3.84892 2.54158 3.83133 2.71114 2.83815 2.34796 2.07167 3.53868 4.84477 3.26548 289 t - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 157 2.55115 5.22307 2.81541 2.42597 3.84088 2.72211 3.45978 3.70939 2.65113 3.50012 4.03956 3.00145 3.26637 2.92366 3.12986 2.10982 2.09681 2.95270 4.42058 4.32902 290 t - - S + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 158 2.79383 4.53543 3.94528 3.00256 2.28876 3.25886 4.19260 2.53698 3.31063 2.13485 3.51266 3.25465 3.61933 3.02975 2.60672 3.04108 3.13630 2.22820 5.12884 3.03437 291 l - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 159 2.54133 2.27249 3.62507 3.14565 3.48798 3.47382 4.20805 2.87324 3.24770 2.61629 3.62417 3.76153 4.31084 3.45605 3.15192 3.19594 2.77273 1.44309 5.11140 3.89714 292 v - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 160 2.50560 4.02210 4.21483 3.69251 4.03927 0.87585 4.50859 3.18042 3.62456 3.12203 4.01557 3.91946 4.34666 3.89680 3.91281 2.66630 3.23503 2.52015 5.49804 3.97346 293 g - - S + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 161 2.98792 5.00679 3.18026 3.47531 5.09253 3.65988 4.75357 4.53531 3.72802 4.18133 4.99276 3.79669 4.37930 3.97717 4.12874 1.60941 0.74054 3.97784 6.39182 5.11951 294 t - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 162 2.69840 5.26022 3.00961 2.31122 4.20998 3.68086 3.63617 3.20701 2.41779 2.58849 4.31499 2.98486 2.62271 2.99075 2.13729 2.36313 3.11573 3.42385 5.72545 3.54571 295 r - - G + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 163 2.71301 5.29924 2.59488 2.14743 3.52695 3.04037 3.28275 4.06670 2.61594 3.34508 4.35002 2.84026 3.31113 2.97459 2.36266 2.86533 2.70674 3.41928 3.03699 3.23042 296 e - - G + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 164 4.65993 5.73598 5.69662 5.49898 1.97465 5.32012 3.31709 4.36240 5.29326 3.66395 4.92323 4.93743 5.59573 5.06816 5.17473 4.69695 3.41633 4.25844 2.61302 0.51590 297 Y - - G + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 165 2.46851 3.63596 4.34730 3.76113 3.49978 4.00900 4.30977 2.55613 3.41377 2.11254 1.89168 3.40620 4.37893 3.86942 2.23584 3.08926 3.14320 2.13937 5.00600 3.81292 298 m - - S + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 166 0.54633 4.79516 4.59072 4.34047 5.33605 3.22550 5.27451 4.80651 4.37656 4.47607 5.24769 4.21379 3.02084 4.58677 4.60871 1.81435 3.40538 4.05386 6.66459 5.53199 299 A - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 167 3.08666 5.02380 4.02349 3.92167 5.10908 3.73669 5.07487 4.62556 4.04836 4.33998 5.22795 3.34786 0.41351 4.38870 4.30726 3.26072 3.60085 3.40472 6.47905 5.20179 300 P - - H + 2.68622 4.42144 2.77523 2.73111 3.46358 2.40517 3.72498 3.29358 2.67745 2.69359 4.24694 2.90351 2.73743 3.18126 2.89786 2.37891 2.77523 2.98522 4.58481 3.61507 + 0.03484 3.47295 5.73865 0.99675 0.46057 0.48576 0.95510 + 168 3.66837 6.19086 2.84947 0.45189 5.55161 3.90523 4.43200 5.09782 3.30487 4.55035 5.42336 3.03786 4.53514 3.60153 3.37398 3.54999 3.95969 4.65772 6.64024 5.17650 305 E - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 169 2.79774 4.32598 4.68241 3.67608 3.42171 4.06471 4.38713 2.01470 3.90321 1.87174 3.44282 4.15860 4.43014 3.77035 3.25202 3.36713 2.95239 1.31877 3.77234 3.76466 306 v - - H + 2.68603 4.42242 2.77519 2.73104 3.46342 2.40506 3.72511 3.29371 2.67728 2.69322 4.24707 2.90364 2.73756 3.18163 2.89801 2.37893 2.77519 2.98535 4.58494 3.61520 + 0.12919 2.22240 4.35495 1.23224 0.34480 0.48576 0.95510 + 170 2.91184 3.76308 4.76588 4.15799 3.39752 4.06920 3.82796 1.60071 3.96642 1.39613 3.17824 3.65225 4.43387 4.11848 4.01348 2.94594 3.14403 2.21737 4.92444 3.43929 311 l - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00999 5.00664 5.72898 0.61958 0.77255 0.51297 0.91308 + 171 2.62785 5.06480 3.29796 2.67561 3.73804 3.41086 3.92577 3.21358 2.32640 2.15096 3.31180 2.55443 4.11004 2.47045 2.33927 2.70318 3.11578 3.12852 5.57146 4.24107 312 l - - C + 2.68631 4.42245 2.77511 2.73076 3.46350 2.40522 3.72547 3.29356 2.67765 2.69366 4.24573 2.90389 2.73738 3.18142 2.89826 2.37846 2.77520 2.98520 4.58530 3.61473 + 0.62427 1.87899 1.16602 1.98855 0.14722 0.46912 0.98231 + 172 2.60166 5.18307 2.62016 2.19793 3.35206 2.39740 3.57105 3.96340 2.18128 3.47543 4.23188 3.01161 3.92489 2.82990 2.86326 2.33987 2.67701 3.55746 5.63416 3.78538 327 k - - C + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01428 4.65191 5.37425 0.61958 0.77255 0.24611 1.52250 + 173 2.37600 3.94341 2.81761 2.45806 4.08381 2.38833 3.32666 4.15213 2.47322 3.64753 4.39446 2.71786 3.74359 2.39493 2.76163 2.38666 3.00597 3.01776 5.79219 3.82026 328 a - - S + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00998 5.00778 5.73012 0.61958 0.77255 0.47101 0.97916 + 174 2.81816 4.87774 2.88922 2.34131 3.91699 3.47934 3.84840 3.76601 2.22767 3.10881 4.41163 2.46519 2.75598 2.51039 2.43545 2.43680 2.76354 3.54179 5.80719 3.84984 329 k - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 175 2.74169 5.33416 2.58184 2.32653 3.61666 2.33545 3.50275 4.12419 2.36762 3.50261 3.56274 2.91332 3.07814 2.74477 2.96926 2.79421 2.92848 3.32496 5.78164 2.72284 330 e - - C + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 176 2.48397 4.72191 2.72922 2.94719 3.45604 3.83733 2.73484 2.72590 3.03376 2.94128 3.81928 3.51045 4.21965 3.13222 3.31573 2.84267 3.12967 2.71705 3.94971 1.76193 331 y - - T + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 177 2.88858 5.15756 2.48812 2.69267 3.68939 2.20273 3.90720 3.84889 2.69072 3.17648 4.22648 3.21985 3.19313 3.04303 3.16266 2.07644 2.02474 3.50391 5.64990 3.69862 332 t - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 178 2.44412 5.27089 3.18567 2.52594 4.01181 3.49400 3.20300 3.68711 2.26882 2.99802 4.32458 3.16791 2.73532 2.67304 2.47574 2.35896 2.41445 3.31659 5.73361 3.79657 333 k - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 179 2.27957 5.36842 3.14470 2.24142 4.70283 3.35867 3.70433 4.18054 1.84880 3.00297 4.41216 3.13478 2.50109 2.87247 2.49374 2.50485 2.88881 3.75338 5.80713 4.40386 334 k - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 180 2.25487 3.19836 3.67383 3.53894 3.58335 3.60706 4.24810 2.30247 3.45618 2.57768 3.58074 3.40343 4.33674 3.48890 3.71724 2.25302 2.94661 1.56396 5.07167 3.86608 335 v - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 181 3.32488 6.23611 0.30142 2.99559 5.85936 3.97225 4.81661 5.46625 4.07634 5.00781 5.98660 3.57219 4.70996 4.04099 4.76451 3.76774 4.26196 4.95940 7.04785 5.56474 336 D - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 182 2.97530 4.34655 4.92112 4.31006 3.42469 4.15298 4.48903 1.67409 4.10270 2.14170 2.44181 4.30839 4.51041 4.23558 4.11915 3.46567 2.80277 1.45020 3.28394 3.56694 337 v - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 183 4.60767 5.71652 5.61554 3.89031 2.18526 5.28181 4.15190 4.32304 5.18037 3.62888 4.88484 4.90634 5.56392 5.01906 5.10312 4.65700 4.81381 4.22147 0.60655 1.74323 338 W - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 184 1.30551 4.78823 4.65738 4.37945 5.36630 2.58206 5.28849 4.84019 4.38318 4.50739 5.27020 4.22569 4.39579 4.59600 4.61395 0.79404 2.89139 4.06528 6.68751 5.56026 339 s - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 185 2.44153 3.17932 4.87400 4.25972 2.53121 4.09082 4.42403 2.33144 4.04748 1.34403 2.92510 4.24940 4.45392 4.18053 4.05982 3.14600 3.15398 2.13810 4.92017 3.14864 340 l - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 186 2.22507 4.96728 4.63623 4.63233 5.66307 0.33314 5.62287 5.16416 4.86793 4.86816 5.66661 4.43512 4.57282 5.01497 4.99264 3.26151 3.63533 4.32703 6.92990 5.89905 341 G - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 187 2.93009 2.13614 4.95885 4.35253 3.48038 4.19799 4.54424 1.68794 4.14925 1.93394 3.18432 4.35359 4.55452 4.28834 4.17024 3.34008 3.23972 1.60527 5.03746 3.47367 342 v - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 188 3.21831 4.55127 5.17022 4.58630 3.70338 4.47717 4.86313 1.30610 4.40976 1.92114 2.79907 4.62299 4.81179 4.56490 4.45688 3.52794 2.67243 1.42404 5.34369 4.16408 343 i - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 189 2.77853 3.56970 4.91220 4.29933 2.66878 4.13468 4.46922 2.12981 4.08926 1.13811 3.14072 4.29275 4.49323 4.21981 4.10205 3.44689 2.88537 2.20246 4.95897 3.46211 344 l - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 190 2.08301 4.31008 4.80905 4.20025 2.66597 4.08391 3.54227 2.07553 4.00182 2.35024 3.19529 4.21899 4.44796 4.14611 4.03654 3.39206 3.15615 2.32332 2.91148 1.86433 345 y - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 191 2.65126 3.79080 3.03118 1.37895 4.54227 3.68257 3.87660 3.27048 2.56225 3.53374 4.30787 2.88399 4.07460 2.72714 3.11894 2.49943 2.86114 3.20681 5.71940 3.61825 346 e - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 192 2.75949 4.33120 4.86063 4.24972 2.93412 4.11800 4.44873 2.58063 4.04775 1.34098 1.86205 4.26240 4.47769 4.18564 4.07448 3.30982 2.87183 2.17494 4.95131 3.25026 347 l - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 193 2.13730 3.34433 4.84746 4.23449 2.67079 4.08305 4.41495 2.45417 4.02682 1.45586 2.95446 4.23448 4.44687 4.16424 3.65241 3.39295 2.78239 2.10310 4.91833 3.10946 348 l - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 194 2.61714 3.04119 3.51958 2.50105 3.16562 3.44068 4.02999 3.26384 2.78703 2.46125 3.90521 2.94061 4.18669 3.26384 2.94427 2.45451 1.92365 2.96026 5.36672 3.77569 349 t - - H + 2.68592 4.42131 2.77530 2.73134 3.46364 2.40523 3.72505 3.29364 2.67751 2.69365 4.24624 2.90357 2.73750 3.18157 2.89769 2.37886 2.77510 2.98507 4.58487 3.61513 + 0.08274 2.77459 4.07273 1.24373 0.34011 0.48576 0.95510 + 195 2.74009 5.38236 2.60734 2.58658 4.30151 1.49346 3.57775 4.19577 2.06867 3.68256 4.42710 2.84258 4.06100 2.86136 2.79826 2.78642 3.12785 3.76776 5.82019 4.41533 355 g - - S + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02515 5.00240 4.01100 0.61958 0.77255 0.52459 0.89600 + 196 2.87057 4.15783 2.81932 2.15097 3.67482 3.00161 3.44561 3.53712 2.01194 3.52030 4.39830 2.84675 4.04172 2.62971 2.18111 2.65254 2.90372 3.46034 5.79407 3.92999 356 k - - S + 2.68632 4.42239 2.77496 2.73101 3.46368 2.40527 3.72508 3.29339 2.67739 2.69369 4.24616 2.90361 2.73734 3.18160 2.89815 2.37901 2.77533 2.98486 4.58491 3.61430 + 0.06990 2.74572 5.70978 1.46974 0.26135 0.43968 1.03351 + 197 2.53761 4.57755 3.85895 3.05555 3.06219 3.90225 3.89097 2.90555 3.23603 1.98376 3.43681 3.14844 2.18635 3.28921 3.56902 2.76101 2.38583 2.48063 5.16546 3.65117 363 l - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 198 2.94035 4.49377 4.16973 3.59341 3.59928 3.99457 4.28692 2.57573 3.48228 2.11382 3.59630 3.88641 1.19333 3.75706 3.46613 3.08341 3.17527 2.51467 5.10025 3.66586 364 p - - T + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 199 2.95410 3.97958 4.76382 4.16399 1.23466 4.10162 4.38107 2.78567 3.65586 2.19089 3.46719 4.20671 3.78920 4.13156 4.03525 3.25126 3.18603 2.50296 2.73984 2.86766 365 f - - T + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 200 2.72297 4.82530 2.62940 2.35446 3.83755 3.31971 3.71413 4.17131 2.26174 3.54363 4.14174 3.02369 2.60946 2.49179 2.66057 2.21727 2.99115 3.74587 4.55596 3.10965 366 s - - S + 2.68620 4.42227 2.77522 2.73112 3.46340 2.40515 3.72496 3.29334 2.67743 2.69357 4.24692 2.90349 2.73742 3.18148 2.89803 2.37889 2.77522 2.98520 4.58479 3.61505 + 0.07731 2.84051 4.13492 0.30572 1.33404 0.48576 0.95510 + 201 2.63880 5.38435 2.63657 2.22720 4.72697 1.94780 3.15235 3.87964 2.57669 3.68860 4.42577 2.57921 3.16991 2.74291 2.86900 2.50219 2.85278 3.77370 5.81843 4.40865 368 g - - S + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01003 5.00344 5.72579 0.61958 0.77255 0.52175 0.90012 + 202 2.40102 4.71375 2.46996 2.13243 4.71840 3.11745 3.05416 3.48265 2.25142 3.16134 4.41932 2.93828 3.25177 2.60824 2.79040 2.58260 2.90071 3.38079 5.81277 4.40438 369 e - - S + 2.68658 4.42180 2.77453 2.73123 3.46394 2.40505 3.72421 3.29333 2.67765 2.69382 4.24730 2.90354 2.73686 3.18110 2.89829 2.37906 2.77522 2.98525 4.58428 3.61543 + 0.55463 1.48984 1.60791 1.39890 0.28351 0.52175 0.90012 + 203 2.69338 5.29005 2.51143 2.25105 4.62988 2.84270 3.49832 3.48405 2.27737 3.31427 4.33211 2.56706 3.20350 2.85310 2.67590 2.21378 2.73620 3.67787 5.72586 4.31806 375 s - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01250 4.78398 5.50633 0.61958 0.77255 0.95212 0.48763 + 204 2.65942 5.19894 2.69156 2.28179 3.77027 3.19251 3.77484 3.06173 2.43464 2.99400 3.94013 2.58274 3.44930 2.63512 2.62020 2.46578 2.71730 3.35179 5.65696 3.80565 376 e - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01250 4.78398 5.50633 0.61958 0.77255 0.77169 0.62033 + 205 2.38920 5.21254 2.73488 2.26876 4.51445 3.29559 3.03245 3.05648 2.42252 2.83088 3.97624 2.72691 3.66747 2.74292 2.65924 2.79642 2.87825 3.04317 5.67196 3.47007 377 e - - C + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01186 4.83615 5.55849 0.61958 0.77255 0.33713 1.25111 + 206 2.65422 4.48489 1.88534 2.29942 4.71042 3.12833 3.84224 3.67843 2.58000 3.67468 4.41498 2.22848 4.04754 2.86157 2.64414 2.33478 2.73698 3.75923 5.80928 4.40246 378 d - - C + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01003 5.00344 5.72579 0.61958 0.77255 0.52175 0.90012 + 207 2.52228 5.35256 2.79874 2.27245 4.68298 3.15080 3.25420 3.81263 2.42135 3.03021 2.98061 3.02733 3.41549 2.09266 2.89624 2.43800 3.03420 3.22791 5.79412 4.39217 379 q - - T + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01003 5.00344 5.72579 0.61958 0.77255 0.52175 0.90012 + 208 2.88352 5.03264 3.01718 2.64158 3.36791 3.41419 3.67586 2.82361 2.46533 2.06980 3.25199 2.87105 3.91016 2.67457 2.54739 2.67076 3.11488 3.35644 5.54543 3.24074 380 l - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01003 5.00344 5.72579 0.61958 0.77255 0.52175 0.90012 + 209 2.31106 5.21929 3.20358 2.11286 3.58411 3.54755 3.12693 3.74178 2.35878 3.37262 4.27754 3.18132 3.64073 2.21825 2.83044 2.63943 3.03559 2.71879 4.50670 3.34948 381 e - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01003 5.00344 5.72579 0.61958 0.77255 0.46390 0.99109 + 210 2.74907 4.02445 4.23598 3.43708 3.16042 3.98772 3.66116 2.29352 2.78065 1.91975 2.65717 3.64306 4.00461 3.79624 2.62994 3.12682 2.72367 2.05105 5.03295 3.83444 382 l - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 211 2.79706 4.32223 4.14412 4.07508 2.44930 4.05985 3.54709 1.67401 3.90204 2.17979 2.94629 3.31750 4.42562 4.07034 3.98057 2.91878 2.88141 2.01026 4.94063 2.95520 383 i - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 212 2.43063 3.51667 2.84063 2.33381 3.23751 3.53757 3.64461 3.61354 2.52297 3.04234 3.80037 3.02528 3.31294 2.77439 2.36706 2.71893 3.04140 2.71650 5.64517 3.47973 384 e - - S + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 213 2.54995 5.35768 3.14585 2.23433 4.68798 3.33616 3.38625 3.80986 2.09254 2.85705 3.68757 2.56176 4.05535 2.40160 2.38927 2.57618 3.04385 3.36418 5.79929 3.79887 385 k - - S + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 214 2.66499 5.02053 2.80345 2.59207 4.23983 3.19081 3.94632 1.95336 2.43621 2.96229 3.77095 2.92719 4.12615 3.11304 2.86357 2.94448 2.42822 2.54184 5.53679 4.21766 386 i - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 215 2.79062 4.84420 3.48859 2.83007 4.02200 3.06268 4.01637 2.98055 2.36084 1.68419 3.06982 3.40535 3.56488 2.89781 2.78978 2.64270 2.97298 2.81255 5.39215 4.11258 387 l - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 216 2.78422 4.40067 2.87114 2.38957 4.66317 2.42774 3.11725 3.68493 2.29738 3.11118 3.80555 3.07548 3.38861 2.66839 2.52841 2.36297 2.74889 3.71883 4.85618 3.72852 388 k - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.04975 5.01631 3.17248 0.61958 0.77255 0.48576 0.95510 + 217 2.55009 3.88585 3.08502 2.47179 4.52328 2.60499 3.86026 3.74333 2.31088 3.21633 3.94275 3.03087 2.50945 2.97834 2.41589 2.69163 2.38722 3.38360 5.70135 4.11095 389 k - - . + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01030 4.97686 5.69921 0.61958 0.77255 0.59090 0.80705 + 218 2.71816 5.35510 2.47492 2.28903 4.69101 3.44039 3.67059 2.92462 2.15295 3.03900 4.39818 2.98975 2.40750 2.74839 2.76016 2.49540 2.85213 3.74081 5.79327 4.38792 390 k - - . + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02103 4.97686 4.27462 0.61958 0.77255 0.59090 0.80705 + 219 2.59242 4.56547 3.37418 3.24570 3.28039 3.87349 3.78552 2.80260 2.91515 1.85640 3.67045 2.94464 3.03710 3.48913 3.31352 2.93163 2.57101 2.12270 4.60315 3.29903 391 l - - . + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01041 4.96623 5.68858 0.61958 0.77255 0.61678 0.77584 + 220 2.76552 5.35116 2.75065 2.09233 4.26840 3.39661 3.23930 3.45666 2.13782 2.93921 3.69074 2.78256 2.85112 2.85423 2.61182 2.41762 3.01864 3.73701 5.78920 4.16743 392 e - - . + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01041 4.96623 5.68858 0.61958 0.77255 0.61678 0.77584 + 221 2.56616 4.88573 3.26662 2.33696 2.41520 3.27403 3.41068 2.92250 2.70761 2.68623 3.97070 3.19787 3.38122 3.16656 2.79903 2.47364 2.99470 2.86843 4.82552 3.32054 393 e - - . + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01041 4.96623 5.68858 0.61958 0.77255 0.61678 0.77584 + 222 2.62567 5.35084 2.04845 2.35215 4.39252 3.47212 3.16243 3.98892 2.45186 3.65226 3.66396 2.66846 2.63580 2.82810 3.05661 2.22708 2.99549 3.54011 5.78899 3.92777 394 d - - . + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03667 4.96623 3.53930 0.61958 0.77255 0.61678 0.77584 + 223 2.86103 4.03193 3.18635 2.38909 3.31435 3.61153 3.49109 2.70908 2.69769 2.69388 3.88535 3.22191 3.67076 3.11276 2.73635 2.49324 3.00545 2.72730 2.94731 2.96802 395 e - - T + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01875 4.94025 4.47244 0.61958 0.77255 0.67631 0.71028 + 224 2.62521 5.12447 2.77972 2.44738 3.31605 3.53418 3.86652 3.33309 2.47319 3.03557 4.18886 3.10134 2.42408 2.60018 2.70100 2.64509 2.92363 3.22521 3.41935 3.46519 396 p - - T + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.05901 4.93227 2.99396 0.61958 0.77255 0.69360 0.69269 + 225 2.68343 5.20702 2.88582 2.22963 3.55567 3.45903 3.65367 3.49248 2.11994 2.97314 4.26172 2.80968 3.57686 2.44336 3.06162 2.53581 2.67303 3.18308 3.73101 3.66292 397 k - - S + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01130 4.88456 5.60691 0.61958 0.77255 0.78866 0.60597 + 226 2.68707 4.98468 2.82158 2.38405 3.75917 3.36024 3.65392 3.18317 2.38508 2.73942 3.76303 3.22111 3.36652 3.04584 2.96704 2.31757 2.64759 2.95752 3.21600 3.40268 398 s - - . + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.11345 4.88456 2.30573 0.61958 0.77255 0.78866 0.60597 + 227 2.79298 3.84213 2.48108 2.52210 3.99851 3.60747 3.12972 3.13545 2.48018 3.05991 4.13768 2.83211 3.54520 2.93964 2.41588 2.35619 2.76810 2.97839 5.56015 3.44494 399 s - - . + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02807 4.78362 3.94704 0.61958 0.77255 0.95264 0.48731 + 228 2.58191 4.56682 2.77742 2.37170 4.46635 3.58143 3.77449 3.50815 2.36445 2.67587 4.22448 2.86502 2.73607 2.80387 2.79297 2.07848 2.75446 3.53442 5.63386 3.74575 400 s - - . + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.14447 4.76826 2.07130 0.61958 0.77255 0.97412 0.47405 + 229 2.74120 5.02625 2.90214 2.38037 3.96892 2.81361 3.75340 3.09744 2.29181 2.85276 3.79351 2.85134 3.31773 2.88600 2.57247 2.48932 2.74923 2.81409 5.51153 4.15648 401 k - - . + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02950 4.63827 3.94280 0.61958 0.77255 1.12880 0.39071 + 230 2.65814 5.03703 2.72915 2.44094 4.30481 3.19996 3.74471 3.73960 2.51991 2.72378 3.12113 3.05398 2.98987 2.79382 2.49179 2.12708 2.96796 3.38544 5.51898 3.52938 402 s - - . + 2.68724 4.42293 2.77612 2.73159 3.46162 2.40699 3.72369 3.29398 2.67731 2.69321 4.24701 2.90285 2.73662 3.18257 2.89624 2.37860 2.77511 2.98573 4.58252 3.61251 + 0.60323 0.80254 5.34581 2.99471 0.05135 0.22221 1.61320 + 231 2.51767 5.38833 2.69504 1.91983 4.73145 3.65677 3.84405 3.51135 2.26714 3.33248 4.42951 2.74739 2.83044 2.63263 2.69535 2.26534 2.89575 3.77792 5.82218 4.12814 442 e - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 232 2.61324 5.33087 2.55247 1.71577 3.78905 3.51981 3.85697 4.11872 2.53837 3.37618 3.68276 2.71899 3.50504 2.96215 2.76975 2.43182 2.62759 3.19721 4.83386 4.08215 443 e - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 233 1.85315 2.66076 4.74963 4.14369 2.72361 2.76389 4.40211 2.66580 3.95769 1.60680 3.08425 4.19191 4.43908 4.11400 4.01342 3.37949 2.94810 2.35782 4.93743 3.75833 444 l - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 234 2.54113 3.93957 3.31567 2.58263 3.59686 3.36801 3.93655 2.84244 1.77469 2.55244 4.12290 3.02474 4.11900 2.54032 2.70090 2.93506 2.79964 3.23719 5.55956 3.97978 445 k - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 235 2.66035 5.38903 1.80529 2.16718 4.22724 3.25823 3.17680 4.00903 2.28647 3.50730 4.43018 2.97613 4.05032 2.48614 2.98498 2.31241 3.11375 3.77870 5.82277 3.97909 446 d - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 236 3.21254 4.56529 5.14365 4.53738 1.97526 4.40976 4.73239 2.19759 4.34073 1.04052 3.41232 4.55986 4.72994 4.44093 4.35221 3.72900 3.00622 2.20314 5.16040 3.53582 447 l - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 237 2.97518 4.05135 5.35921 4.78478 3.77817 4.66169 5.06989 1.35059 4.61468 1.50253 2.60400 4.82061 4.97178 4.75525 4.65269 4.00168 3.59517 1.52175 5.50364 4.33590 448 i - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 238 2.63113 4.16111 2.70523 2.01221 4.32546 2.89528 3.69801 3.91463 1.97992 3.37990 4.41866 2.72468 4.05215 2.88390 2.65380 2.44936 2.78930 3.52828 5.81309 3.68713 449 k - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 239 2.79532 4.56741 2.59886 2.26653 4.72524 2.97326 3.84498 4.20852 1.87988 3.68761 4.42563 2.67816 4.05093 2.72680 2.26697 2.39445 3.11354 3.44147 4.06926 3.70096 450 k - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 240 2.76031 1.91137 4.93344 4.32897 3.47342 4.21043 4.55379 2.12811 4.13437 1.60981 2.11111 4.35327 4.56463 4.27495 4.16872 3.52442 2.73881 2.49904 5.05160 3.88034 451 l - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 241 3.00579 3.43594 4.91160 4.30236 2.88535 4.17356 4.48924 2.41412 3.62991 0.97514 3.41700 4.31537 4.52645 4.23058 4.12367 3.48482 3.23680 2.59853 2.70167 3.78558 452 l - - T + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 242 2.51291 3.86266 2.42773 2.26878 4.71076 3.65927 3.14908 3.51790 2.32370 3.67561 4.41657 2.44903 4.05255 2.58104 2.64695 2.72413 2.48024 3.27065 5.81133 3.77060 453 e - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 243 2.89024 4.99098 3.22187 2.69841 3.16242 3.74556 3.43367 3.45008 2.12873 2.47972 3.65551 3.30484 3.00902 2.69329 2.47140 2.87653 2.77051 2.80352 4.74384 3.09104 454 k - - S + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 244 2.75442 4.59220 1.48443 2.55169 4.69407 3.66624 3.85987 4.16899 2.26580 3.66358 4.41104 2.16093 4.06270 2.96232 2.94350 2.69711 3.00639 3.21953 5.80766 4.40610 455 d - - S + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 245 2.53666 4.51809 3.31495 2.50094 3.81458 3.47863 3.66745 3.68842 2.74796 3.30408 3.76297 2.90283 1.45947 2.98944 2.97069 2.84711 3.12065 2.90248 5.56105 4.23506 456 p - - G + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 246 2.18867 5.36299 2.90524 2.21328 4.32931 3.53924 3.49382 3.97251 2.24621 3.14962 3.99253 2.78034 3.78478 2.54072 2.85251 2.30318 2.70173 3.25844 5.80328 3.47734 457 a - - G + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 247 2.48590 4.36945 2.67418 2.22639 4.72760 3.65776 3.84501 4.21118 1.68322 3.11616 4.42723 3.02530 4.05117 2.52411 2.40832 2.54354 2.78662 3.77464 5.82017 4.41136 458 k - - G + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 248 3.97870 5.88109 4.77637 3.79584 5.10245 4.51923 4.26030 4.68907 2.25479 4.07008 4.99673 4.06985 4.83329 3.42182 0.45649 3.98836 4.07883 4.42272 3.45519 4.78623 459 R - - S + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 249 2.59820 4.04607 4.60274 4.00452 3.26886 3.61184 4.36773 2.06089 3.84570 1.56372 3.45362 4.11687 2.06890 4.02734 3.95003 2.68390 3.14561 2.58630 4.40258 3.38622 460 l - - T + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.04987 5.01631 3.16967 0.61958 0.77255 0.48576 0.95510 + 250 2.79362 5.19179 3.01710 2.75300 4.64905 2.77281 4.01085 4.10036 2.79939 3.46822 4.43166 2.61914 4.12461 3.14023 3.27668 1.68833 1.53351 3.69065 5.84113 4.47617 461 t - - T + 2.68631 4.42192 2.77519 2.73130 3.46353 2.40482 3.72508 3.29367 2.67738 2.69360 4.24703 2.90360 2.73753 3.18148 2.89804 2.37867 2.77518 2.98532 4.58490 3.61498 + 0.12278 2.37863 3.77824 1.17468 0.36950 0.42506 1.06054 + 251 1.47902 3.78300 4.72209 4.11644 2.74562 3.65840 4.38345 2.02614 3.93274 2.07959 3.21794 4.17061 3.49702 4.09137 3.99270 2.98272 3.05871 2.38788 4.48487 3.74373 467 a - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01009 4.99737 5.71972 0.61958 0.77255 0.53813 0.87669 + 252 2.38222 4.71734 2.84513 2.05232 4.42547 3.25385 3.43556 4.19285 2.14440 3.09056 3.51596 2.80436 3.18490 2.67888 2.63294 2.69832 2.67125 3.58577 5.80764 4.40015 468 e - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01009 4.99737 5.71972 0.61958 0.77255 0.45436 1.00747 + 253 2.65797 4.06542 2.63237 1.57032 4.71890 3.65831 3.45654 4.20087 2.52289 3.68238 4.00276 3.00654 3.59507 2.12286 2.86428 2.58695 3.11362 3.45316 5.81563 3.91003 469 e - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 254 1.93383 3.77543 4.87213 4.26567 3.27005 3.35948 4.48352 1.60295 4.06924 1.71770 3.29328 4.28554 4.50523 4.21524 4.10410 3.45599 3.20183 2.00553 4.99383 3.81574 470 i - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 255 2.91099 3.35807 4.39311 3.80506 3.12662 3.41984 4.32058 2.74098 2.62412 1.35983 2.89439 3.70896 4.38574 3.55146 3.43970 3.02120 3.14303 2.30767 4.99433 3.18557 471 l - - H + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 256 2.62697 4.23577 2.94369 2.01671 4.73311 3.52212 3.12192 4.21804 1.98366 3.41966 4.43054 2.33684 4.05005 2.29561 2.80226 2.65814 2.90658 3.41449 5.82302 4.41298 472 k - - T + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 257 2.67425 5.24257 2.69003 2.64384 4.09422 3.68496 1.59772 3.97575 2.52719 3.06621 3.97630 3.17995 4.07682 2.88982 2.86815 2.31165 2.78826 3.60139 5.71188 4.10399 473 h - - S + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.18941 5.01631 1.79622 0.61958 0.77255 0.48576 0.95510 + 258 2.81850 5.23743 2.76502 2.35780 4.54654 3.39495 3.79640 3.57339 2.36240 3.35446 4.28834 3.08690 1.61434 2.83455 2.79066 2.56844 3.04975 3.37601 5.69198 4.30446 474 p - - G + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01183 4.83873 5.56107 0.61958 0.77255 0.86853 0.54398 + 259 3.22678 4.58175 4.94227 4.40609 1.73776 4.31983 4.20406 3.01156 4.21650 2.23279 3.33965 4.33985 4.66520 3.80636 4.24184 3.63704 3.45535 2.61441 1.69956 1.91736 475 w - - G + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01183 4.83873 5.56107 0.61958 0.77255 0.30436 1.33787 + 260 2.99670 4.36610 4.95290 4.33956 1.72799 3.71830 4.50360 1.92619 4.12878 1.69258 2.79907 4.33234 4.52551 4.25179 4.13733 3.48573 3.22794 1.98896 4.25850 3.81122 476 l - - G + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00667 5.01308 * 0.61958 0.77255 0.00000 * +// diff --git a/test/jalview/io/test_export_hmm.txt b/test/jalview/io/test_export_hmm.txt new file mode 100644 index 0000000..be9aa57 --- /dev/null +++ b/test/jalview/io/test_export_hmm.txt @@ -0,0 +1,807 @@ +HMMER3/e [3.0 | March 2010] +NAME Pkinase +ACC PF00069.17 +DESC Protein kinase domain +LENG 260 +ALPH amino +RF no +MM no +CONS yes +CS yes +MAP yes +DATE Thu Jun 16 11:44:06 2011 +NSEQ 54 +EFFN 3.358521 +CKSUM 3106786190 +GA 70.30 70.30 +TC 70.30 70.30 +NC 70.20 70.20 +STATS LOCAL MSV -10.7215 0.70254 +STATS LOCAL VITERBI -11.6541 0.70254 +STATS LOCAL FORWARD -5.2305 0.70254 +HMM A C D E F G H I K L M N P Q R S T V W Y + m->m m->i m->d i->m i->i d->m d->d + COMPO 2.60017 4.19886 2.94089 2.63789 3.35087 2.89119 3.48337 2.79435 2.60265 2.43454 3.62613 3.06133 3.41286 3.09693 2.94507 2.65650 2.87761 2.67871 4.54052 3.43274 + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.00000 * + 1 2.91704 4.31028 4.76351 3.63148 2.10912 3.47710 4.39734 2.27639 3.96619 1.99282 3.42844 4.19567 4.43771 4.11903 3.67403 3.22736 3.14918 2.35905 3.32515 1.82622 1 y - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 2 2.77204 4.20708 3.06476 1.97968 4.66603 3.66509 3.19858 3.37903 2.25347 3.34018 4.38833 2.97180 4.05804 2.36838 2.43173 2.67542 2.50268 2.83403 5.78758 4.38976 2 e - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 3 2.90076 4.04294 3.31590 2.80413 3.08157 3.87481 4.12616 2.18958 2.49735 1.97194 3.73714 3.32717 3.98753 3.23115 3.12315 2.99137 2.62008 2.29426 5.21478 3.75979 3 l - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 4 2.89383 4.85429 3.10311 2.63174 3.71383 2.56808 3.47232 2.82076 2.61844 1.98342 3.72320 3.05498 4.17347 3.05527 3.32194 2.85608 2.93671 2.18878 5.40057 3.87183 4 l - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 5 2.68261 5.39185 2.80437 1.87471 4.73638 2.79887 3.69591 4.22191 2.19487 3.69685 4.08896 3.12413 3.70490 2.48424 2.08916 2.53260 3.02309 3.43812 5.82480 4.41426 5 e - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 6 2.77253 4.06085 3.07881 2.53373 4.10647 3.71564 3.68370 2.64290 2.00036 2.72968 4.17370 3.24239 3.08607 2.77632 2.72820 2.69921 2.54335 2.71931 5.60386 4.26496 6 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 7 3.42930 4.74416 5.34765 4.76823 3.71832 4.71430 5.09461 1.33015 3.54417 1.12594 3.33523 4.84641 5.00427 4.73010 4.64986 4.05097 3.66327 1.83083 5.51142 4.37013 7 l - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 8 2.57460 4.94286 4.00732 3.93216 5.40516 0.41612 5.15134 4.86315 4.18766 4.52736 5.33508 4.05990 4.45245 3.74651 4.46171 3.15888 3.14590 4.15180 6.71159 5.52767 8 G - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 9 2.30218 5.38172 3.03799 2.02026 4.18991 3.65799 3.84554 3.67215 2.28945 3.68495 4.42365 2.84227 3.73039 2.44555 2.39428 2.00278 2.95859 3.63127 5.81726 4.40923 9 s - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 10 4.54226 6.07621 5.39207 5.44513 6.34643 0.07137 6.34600 6.33790 5.73770 5.76452 6.83374 5.56171 5.46536 5.98137 5.73783 4.76037 5.08470 5.67502 7.03864 6.52156 10 G - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 11 2.06444 5.37337 2.91595 2.40063 4.70969 2.61181 3.84889 4.18948 2.46835 3.67503 4.41668 2.62917 4.05392 2.88235 2.66711 2.00495 2.47288 3.39649 5.81159 4.40596 11 s - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 12 2.90920 4.46494 4.12493 3.14570 1.52027 3.22992 4.24969 2.92840 3.46467 2.66529 3.12827 3.55640 4.33979 3.72214 3.72236 2.53517 2.98442 2.55125 5.06498 2.30159 12 f - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 13 2.21104 4.80722 4.64199 4.55509 5.54982 0.52550 5.49025 5.04875 4.70671 4.72740 5.47955 4.30215 4.43233 4.84666 4.86038 1.95116 3.45005 4.17507 6.87595 5.79039 13 G - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 14 2.71551 3.46186 3.01248 2.27453 4.55840 3.55853 3.50842 3.55064 2.03335 3.34882 4.31847 3.17065 4.07218 2.83960 2.83653 2.25762 2.26864 2.61469 5.72841 4.35037 14 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 15 3.17885 3.97005 5.63014 5.16553 4.35293 4.89782 5.77682 2.09398 5.06494 2.94083 4.14496 5.20428 5.30924 5.30763 5.20260 4.32158 3.61414 0.44769 6.26043 5.04118 15 V - + 2.68625 4.42232 2.77526 2.73102 3.46361 2.40519 3.72501 3.29361 2.67747 2.69306 4.24696 2.90353 2.73746 3.18153 2.89807 2.37893 2.77526 2.98499 4.58484 3.61510 + 0.09563 2.43065 5.73865 0.67073 0.71608 0.48576 0.95510 + 16 2.91101 3.31342 4.36759 3.41772 2.45121 4.01227 4.31421 2.75922 2.81772 2.31733 3.50420 3.69862 4.38187 3.88257 3.14725 3.02772 3.14303 2.46483 3.37889 1.69905 18 y - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 17 2.88484 5.28431 3.03179 2.31849 4.58595 3.47769 3.54625 2.98124 1.69233 2.43413 4.04064 3.16353 4.06907 2.72555 2.58277 2.55274 3.04512 3.20501 5.74377 4.36100 19 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 18 1.57125 2.56460 3.38436 3.39201 3.66458 2.34190 4.20526 2.93932 3.32823 2.44127 3.26099 3.74334 4.30466 3.60817 3.63469 3.01628 2.92537 2.55308 5.13581 3.91882 20 a - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 19 2.89298 4.40558 3.44708 2.63051 3.77015 3.77747 2.87940 2.57515 2.33949 2.85128 3.20054 3.37379 4.16367 2.65910 2.52913 2.67954 2.59930 2.46709 5.42679 3.74337 21 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 20 2.88350 5.37811 2.42858 2.28192 4.71668 3.65945 2.35349 4.19788 2.20596 2.91798 4.42054 2.38258 4.05280 2.81490 2.60119 2.77457 3.11461 3.76528 3.43428 3.80493 22 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 21 2.59359 5.30144 3.00667 2.46268 4.60954 3.67285 3.22394 2.91749 2.13087 2.60378 4.35201 3.05590 3.51881 2.48537 2.35096 2.62551 3.00998 2.84793 5.75687 4.36947 23 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 22 2.64500 5.38003 2.46961 2.36386 4.71962 2.36153 3.71093 3.77963 2.19342 3.27291 4.42213 2.49968 3.44456 2.94396 2.94770 2.23767 2.90215 3.58800 5.81601 3.79868 24 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 23 2.71410 5.35453 2.26257 2.17828 4.68327 3.06138 3.85215 3.65600 2.51871 3.65284 4.39957 2.64619 4.05631 2.95399 2.98284 2.41102 1.94961 3.19379 5.79713 3.78693 25 t - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03260 5.01631 3.67114 0.61958 0.77255 0.48576 0.95510 + 24 2.77509 4.50579 3.06414 2.40741 4.68877 2.10468 3.84020 4.16638 2.52713 3.65577 4.39945 2.31826 2.82304 2.55347 2.45557 2.51717 3.10489 3.55245 5.79545 3.68618 26 g - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.13496 4.99383 2.12471 0.61958 0.77255 0.54753 0.86365 + 25 2.82390 4.23357 2.59579 2.09029 4.65095 3.47120 3.53571 3.50264 1.93281 3.24335 4.10745 2.98984 3.99409 2.41262 2.43858 2.60001 2.84781 3.57090 5.75206 3.98239 27 k - + 2.68634 4.42166 2.77510 2.73101 3.46370 2.40521 3.72473 3.29370 2.67713 2.69347 4.24706 2.90350 2.73742 3.18145 2.89817 2.37895 2.77536 2.98516 4.58493 3.61485 + 0.21086 2.33296 2.37401 1.37928 0.29003 0.81455 0.58490 + 26 2.79249 4.86773 3.27912 2.48247 3.81836 3.65430 3.86742 2.36980 2.31612 2.40000 3.66176 2.98804 3.52938 2.45192 2.80383 2.80149 2.71760 2.93241 5.39419 3.83742 36 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01259 4.77670 5.49905 0.61958 0.77255 0.27298 1.43175 + 27 2.94684 4.40681 4.93000 4.33270 2.14562 4.19543 4.43742 2.60780 4.12995 2.51432 3.32273 4.32339 4.55150 4.25562 4.15094 3.50804 3.26683 1.12964 4.39266 2.23526 37 v - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 28 0.67405 4.13502 4.78133 4.26234 4.00859 4.13420 4.88775 2.58668 4.14876 2.87877 3.59530 4.37511 4.66004 4.38446 4.34251 3.50924 3.44597 2.20111 5.62436 4.43519 38 A - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 29 2.77559 4.05359 4.82280 4.21814 3.45081 3.88127 4.46447 1.69887 3.29990 2.06046 2.92956 4.25618 4.49083 4.18293 4.07725 3.28739 3.19210 1.31639 4.98894 3.80930 39 v - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 30 4.13385 6.06880 4.58555 3.84767 5.73274 4.53840 4.41573 5.06650 0.32256 4.37802 5.30885 4.14872 4.92009 3.55775 2.54913 4.11741 4.25754 4.75872 6.25921 5.22828 40 K - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 31 2.53136 3.93442 3.55191 2.54113 3.59001 3.81267 3.67691 2.09853 2.22431 2.85063 3.63116 3.45300 4.19661 2.87681 2.71089 2.96116 2.67441 2.46338 5.34241 3.76111 41 i - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 32 2.80227 4.30542 4.81704 3.71619 2.31247 3.45194 4.41496 1.85614 4.00698 1.68898 3.06826 4.22398 4.44809 4.15126 4.03957 3.11345 3.01936 1.82478 4.92889 3.75130 42 l - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 33 2.72320 4.19698 2.89173 2.30854 4.21536 3.66470 3.63903 3.54937 1.81020 3.33297 4.38970 2.50126 3.12497 2.85129 2.61476 2.47307 2.93549 3.43057 4.63863 3.86554 43 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 34 2.73748 5.16363 3.24304 2.62749 4.42406 3.39882 3.64889 3.08793 1.75481 2.64054 4.22767 2.81684 3.49630 2.92572 2.69253 2.71691 2.78362 2.91622 5.65055 3.09244 44 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 35 2.82342 4.21564 2.57688 2.18304 4.09635 3.66104 3.29269 4.17416 2.24176 3.24419 4.40775 3.13331 3.02670 2.66210 2.30119 2.38622 2.91913 2.84969 5.80393 4.13733 45 e - + 2.68618 4.42225 2.77520 2.73124 3.46354 2.40513 3.72495 3.29354 2.67741 2.69355 4.24690 2.90347 2.73731 3.18147 2.89801 2.37887 2.77520 2.98519 4.58477 3.61503 + 0.02362 3.90596 5.73865 0.48782 0.95182 0.48576 0.95510 + 36 2.81479 5.38805 2.34307 2.08229 3.84722 3.00939 3.24618 4.21561 2.24819 3.24444 4.42924 2.80965 3.63231 2.74299 2.65208 2.41080 2.72103 3.26063 5.82196 4.16400 47 e - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 37 2.42659 5.32934 2.94543 1.98753 4.27035 3.66735 3.85733 2.97282 2.27697 3.20526 3.75542 2.69174 3.50027 2.79550 2.45131 2.66535 2.70832 3.28701 5.77800 4.07668 48 e - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 38 2.82479 5.36482 2.46403 2.36491 4.23121 3.19666 3.53460 3.47934 2.01766 2.87145 4.06028 2.53791 3.88358 2.73438 2.79605 2.39315 2.94316 3.30320 5.80464 3.67777 49 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 39 2.81259 3.82036 2.58997 2.16257 3.93187 3.50795 3.44913 3.32347 2.23760 3.42042 3.43188 3.03914 3.18139 2.98833 2.90722 1.97318 3.04237 3.44327 4.85883 4.01646 50 s - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.04017 5.01631 3.41907 0.61958 0.77255 0.48576 0.95510 + 40 2.75150 4.68420 2.78864 2.20581 3.96394 3.14028 3.85474 3.62649 2.17804 2.84544 3.93254 2.66146 3.79370 2.72658 2.87564 2.43841 2.71937 3.23202 3.36778 4.34996 51 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01020 4.98634 5.70869 0.61958 0.77255 0.56699 0.83755 + 41 2.52028 4.29421 2.93844 2.26593 3.28616 3.42961 3.89113 3.40312 1.92589 2.89626 3.59280 3.04537 4.08209 2.42956 3.02333 2.89065 2.87512 2.78376 5.62895 3.97726 52 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.06456 4.98634 2.88790 0.61958 0.77255 0.56699 0.83755 + 42 2.52102 4.66200 2.60886 2.12080 3.90563 3.43164 3.41299 3.76759 2.19798 2.95231 4.37667 2.71584 3.31098 2.66775 2.46389 2.65499 2.89357 3.57073 4.74853 4.36793 53 e - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.06881 4.93254 2.82535 0.61958 0.77255 0.69302 0.69327 + 43 2.65676 5.27743 2.81592 2.16715 4.59834 3.44096 3.79920 2.82354 2.10889 3.57233 3.78816 2.93522 4.00237 2.20078 2.58862 2.72374 2.99283 3.18643 5.72482 3.30249 54 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.04191 4.87514 3.39892 0.61958 0.77255 0.80592 0.59181 + 44 2.46416 5.14935 3.14274 2.35064 4.42785 3.46788 3.62138 3.06885 2.39724 2.90472 4.00413 2.77252 4.01153 2.56699 2.69346 2.37713 2.33258 3.34725 5.62407 3.30627 55 t - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.15381 4.84499 2.00472 0.61958 0.77255 0.85820 0.55151 + 45 2.15178 5.11690 2.80767 2.47016 4.06926 3.56450 3.25874 3.42510 2.38373 2.72748 4.17388 2.58132 3.95629 2.68997 2.59104 2.52019 2.89357 3.10461 5.58730 3.84420 56 a - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.06869 4.70471 2.85898 0.61958 0.77255 1.05523 0.42788 + 46 2.33893 4.38200 3.78128 3.08857 2.87706 3.76539 4.03303 2.50172 2.82237 2.26545 3.48958 3.56901 4.14175 3.13269 2.43377 3.02211 2.55318 2.18677 4.40164 3.75633 57 v - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.07407 4.65033 2.78326 0.61958 0.77255 1.03937 0.43646 + 47 2.66580 4.77769 3.25859 2.69691 3.69577 3.61140 3.56963 3.36841 2.45062 2.28390 3.86113 2.83101 3.99793 3.01640 2.00932 2.40384 2.97180 2.98514 3.81809 4.01106 58 r - + 2.68588 4.42292 2.77574 2.73101 3.46421 2.40561 3.72562 3.29362 2.67747 2.69305 4.24679 2.90348 2.73776 3.18179 2.89693 2.37874 2.77432 2.98554 4.58544 3.61510 + 0.56084 0.85690 5.33966 1.67148 0.20822 0.22069 1.61932 + 48 3.87852 6.35819 2.88185 0.33512 5.75300 3.98086 4.66680 5.41085 3.73193 4.87592 5.81368 3.19190 4.67406 3.86930 4.28895 3.74624 4.21685 4.94226 6.88673 5.40485 78 E - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 49 2.34469 4.06185 4.67394 3.74635 3.19070 3.72385 4.38165 1.69529 3.89930 1.68521 3.30505 3.88179 4.42519 3.50953 3.71087 3.12279 3.14596 1.99339 4.94125 3.41486 79 l - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 50 2.41611 3.92039 3.06862 2.24055 4.69692 3.38839 3.50460 4.17440 2.17094 3.43336 4.01855 2.84870 4.05421 2.22409 2.42800 2.49697 2.93959 3.48161 5.80403 3.10747 80 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 51 2.65097 4.31309 4.79937 4.19096 3.25102 4.08746 4.41763 1.57396 3.99634 1.77576 3.18772 3.58572 4.45127 4.14513 4.03729 2.91921 3.15786 1.73265 4.93848 3.33785 81 i - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 52 2.71474 4.35776 4.49839 3.90546 3.26558 3.60358 3.11363 2.58541 3.76519 1.24138 2.56017 3.78382 4.40165 3.77674 3.90460 2.91080 2.88501 2.43218 4.97232 3.44306 82 l - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 53 2.21717 5.37509 3.13954 2.36108 4.71254 3.44569 3.50643 4.19289 1.90576 2.89362 4.41783 2.84264 3.50886 2.51670 2.27883 2.73413 2.79427 3.37900 5.81221 4.40629 83 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 54 2.88332 4.76187 3.15794 2.34306 4.64959 3.18467 2.98724 4.11774 2.20976 2.84622 3.53657 2.69640 4.06011 2.81953 2.22587 2.26090 2.67755 3.39248 5.77872 3.89328 84 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 55 2.92075 3.71086 4.82119 4.21031 2.91851 4.08375 4.41406 2.48059 4.00923 1.14255 2.77088 4.22517 4.44739 4.15194 3.51737 2.79440 3.04088 2.14784 4.92583 3.58797 85 l - + 2.68619 4.42231 2.77526 2.73130 3.46360 2.40505 3.72501 3.29360 2.67737 2.69361 4.24696 2.90322 2.73746 3.18153 2.89797 2.37878 2.77526 2.98514 4.58483 3.61509 + 0.21093 1.81438 3.60337 0.15203 1.95873 0.48576 0.95510 + 56 2.87228 4.32697 2.43695 2.52023 4.72535 3.09966 3.42727 4.21076 2.24746 3.68599 4.14994 2.21640 3.70120 2.45856 2.42604 2.20075 2.84715 3.77128 5.81417 4.40372 87 s - + 2.68626 4.42233 2.77498 2.73131 3.46362 2.40515 3.72479 3.29362 2.67733 2.69363 4.24698 2.90355 2.73719 3.18141 2.89809 2.37895 2.77498 2.98527 4.58485 3.61511 + 0.08622 2.53438 5.71435 0.90816 0.51628 0.44628 1.02166 + 57 2.95437 4.05540 4.02453 3.66262 4.73022 3.00582 0.63840 4.27369 3.61156 3.92435 4.76053 3.90244 4.38221 3.97389 3.93213 2.36608 3.39859 3.79517 6.08861 4.80370 91 H - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 58 2.74925 4.59154 2.64384 2.02057 4.69046 3.19970 3.85151 4.16644 2.39568 3.65893 3.99620 3.06676 1.73396 2.95270 2.98758 2.52836 2.96698 3.57815 5.80119 4.39902 92 p - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 59 2.77600 3.63123 3.60742 3.04389 2.88763 3.83093 3.22852 3.27052 2.82124 2.96220 3.83761 1.44485 4.21384 3.33393 3.26463 3.06163 2.84916 2.86372 5.30436 2.85576 93 n - + 2.68619 4.42226 2.77521 2.73125 3.46355 2.40506 3.72496 3.29355 2.67742 2.69356 4.24691 2.90348 2.73741 3.18148 2.89802 2.37880 2.77521 2.98520 4.58478 3.61504 + 0.02736 3.73933 5.73865 0.64347 0.74542 0.48576 0.95510 + 60 3.43736 4.73250 5.40681 4.85032 3.21534 3.89737 5.21348 0.72821 4.70181 2.29095 3.77438 4.92025 5.08011 4.86610 4.77171 4.12622 3.68020 1.72131 5.65218 4.46593 96 i - + 2.68620 4.42119 2.77522 2.73126 3.46356 2.40515 3.72497 3.29356 2.67743 2.69357 4.24692 2.90349 2.73742 3.18149 2.89780 2.37889 2.77522 2.98521 4.58479 3.61505 + 0.04171 3.27988 5.73865 0.65380 0.73410 0.48576 0.95510 + 61 3.22247 3.52386 5.20134 4.62057 3.74032 4.49428 4.89197 1.38422 4.44333 2.03444 3.40884 4.64781 4.83078 4.60265 4.48778 3.55308 3.01459 1.16992 5.37248 4.18666 99 v - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 62 2.72238 4.59459 3.13585 2.30027 4.72566 3.17722 3.67251 4.20868 2.00822 3.53187 4.42604 2.97500 3.44674 2.41134 2.06447 2.53711 2.32763 3.77297 5.81907 4.41084 100 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 63 2.75790 4.02501 4.89076 4.27684 2.25991 4.10991 4.44304 2.31340 4.06541 1.38378 2.56521 4.26823 4.47075 4.19670 4.07763 3.42134 2.72551 2.21249 4.93572 3.01728 101 l - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 64 2.79378 4.36122 4.48297 3.70404 2.84684 4.03133 3.55103 1.94759 2.82835 1.82248 3.32801 4.05424 4.39941 3.70850 3.13439 3.15759 3.14407 2.41334 4.25902 2.30786 102 l - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 65 2.47264 4.33075 2.07830 2.03157 4.71750 2.27093 3.18950 4.19892 2.58523 3.68152 4.42156 3.04070 4.05295 2.84140 2.67254 2.59104 3.11515 3.76615 5.81569 3.60292 103 e - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 66 2.10377 4.03530 4.82986 4.21790 2.76136 4.07923 4.41023 2.08081 4.01359 2.30827 2.78821 4.22543 4.44340 4.15406 4.03913 2.38166 2.60707 1.97272 3.19782 3.33258 104 v - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 67 2.82605 3.67894 3.38070 3.01266 1.82001 3.97118 3.82789 2.76491 3.48734 2.34143 3.24926 3.10725 3.78017 3.42990 3.73647 2.98277 3.13977 2.32864 3.87637 2.72935 105 f - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.04987 5.01631 3.16967 0.61958 0.77255 0.48576 0.95510 + 68 2.55964 4.21441 3.10666 1.94329 4.49707 3.21758 3.46239 3.37098 2.39709 3.00488 3.51821 3.06808 4.06187 2.54621 2.66989 2.75991 2.68522 3.13970 5.68635 3.14043 106 e - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02094 4.97674 4.28127 0.61958 0.77255 0.42506 1.06054 + 69 2.80310 5.38415 2.22807 2.18295 4.72718 3.65266 3.36574 4.21171 2.46641 3.56699 4.42536 2.57848 3.46451 2.86899 2.36310 2.58224 2.17995 3.52075 5.81804 3.65548 107 t - + 2.68640 4.42162 2.77535 2.73147 3.46354 2.40551 3.72458 3.29233 2.67716 2.69348 4.24762 2.90375 2.73699 3.18187 2.89837 2.37858 2.77480 2.98522 4.58549 3.61548 + 0.36809 1.18844 5.72853 1.68950 0.20409 0.46837 0.98355 + 70 2.88244 5.39287 2.47300 2.29715 3.79460 2.82884 3.28660 4.22374 2.09832 3.69810 4.43357 2.45444 3.07035 2.85151 2.47539 2.34133 3.01376 3.78345 5.82560 4.10620 126 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 71 2.57798 5.39101 2.06614 2.42374 4.73510 2.82383 3.84381 4.22040 2.28304 3.69587 4.43195 2.62257 3.38372 2.71683 2.73886 2.29050 2.66881 3.34289 5.82427 4.18691 127 d - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 72 2.58231 5.35788 2.77781 2.22432 4.08337 3.66211 2.49021 4.16401 2.37240 3.16748 4.40241 2.52484 4.05523 2.76334 2.63486 2.49164 2.89823 3.30761 4.95167 3.05734 128 e - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 73 2.78575 3.74303 4.78141 4.17260 2.95491 4.07322 4.40160 1.89067 3.97854 1.60353 2.95383 3.71592 3.11906 4.12798 3.50390 3.07790 2.85145 2.24111 4.92509 2.91282 129 l - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 74 2.58399 2.76389 4.59675 3.99881 3.19843 4.04871 3.62339 2.65148 3.84111 2.12752 3.45456 3.62454 3.46238 4.02369 3.94739 2.79096 3.14543 2.42948 3.13888 1.74690 130 y - + 2.68624 4.42096 2.77500 2.73129 3.46360 2.40508 3.72501 3.29360 2.67747 2.69353 4.24696 2.90343 2.73746 3.18153 2.89807 2.37893 2.77510 2.98525 4.58483 3.61509 + 0.10354 2.49668 4.13492 0.66960 0.71726 0.48576 0.95510 + 75 3.07392 4.44555 4.97084 3.81418 2.87255 4.25097 4.57886 1.74564 4.16653 1.31678 2.12605 4.39109 4.59167 3.71495 4.19337 3.56380 3.30386 2.29390 5.05348 3.89648 133 l - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01003 5.00344 5.72579 0.61958 0.77255 0.52175 0.90012 + 76 2.86449 3.41378 5.01300 4.41506 3.07458 4.28568 4.64425 1.49634 4.22335 2.27773 3.54368 4.43380 4.63588 3.70581 4.25773 3.60458 3.30826 1.19505 5.13861 3.95920 134 v - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01003 5.00344 5.72579 0.61958 0.77255 0.46390 0.99109 + 77 2.91733 4.35063 4.55668 3.96112 2.40516 4.04680 4.36140 2.56068 3.81048 1.70108 1.79340 3.59899 4.41359 3.09405 3.93172 3.15547 2.48177 2.59902 4.96582 3.78095 135 l - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 78 2.76564 5.57030 2.50020 1.03018 4.90220 3.70297 3.44513 4.39514 2.75995 3.87044 4.62325 3.16505 3.19754 2.75935 3.27129 2.65802 3.28146 3.95557 6.00401 4.57374 136 e - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 79 2.81579 3.90369 4.68991 4.08721 2.27644 4.06399 3.63829 2.69790 3.58050 1.84024 3.31248 4.16081 4.42953 4.07816 3.60709 3.36667 3.01039 2.57256 4.40465 1.54393 137 y - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 80 2.45920 2.17262 4.69646 4.09287 3.22405 3.32199 3.21264 2.59887 3.91610 2.06244 2.25581 4.16309 3.61702 4.08102 3.98811 3.14866 3.14614 2.03766 4.93767 3.46778 138 v - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.04171 5.01631 3.37486 0.61958 0.77255 0.48576 0.95510 + 81 2.70314 5.37371 2.37994 1.91497 4.71601 2.93053 3.83161 4.20005 2.46492 3.55263 3.57885 2.58870 2.59223 2.74552 2.71928 2.69862 3.03649 3.29150 5.80804 4.39872 139 e - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01022 4.98481 5.70716 0.61958 0.77255 0.57090 0.83245 + 82 2.41993 3.72287 3.12898 2.52046 4.44831 1.89639 3.49536 3.62837 2.38762 3.31281 3.53904 2.44913 3.42379 3.00780 3.12891 2.87912 2.75467 3.52812 5.65946 3.81984 140 g - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.10979 4.98481 2.33166 0.61958 0.77255 0.57090 0.83245 + 83 2.77350 5.21303 2.43943 2.62703 4.54309 1.39496 3.89257 3.99092 2.60267 3.54085 4.32260 3.04209 4.06226 3.01831 3.03242 2.64588 2.77651 3.04353 5.73236 4.35922 141 g - + 2.68631 4.42210 2.77537 2.73126 3.46359 2.40522 3.72475 3.29338 2.67758 2.69250 4.24657 2.90377 2.73770 3.18148 2.89796 2.37902 2.77541 2.98478 4.58507 3.61496 + 0.21230 1.67338 5.60865 1.39945 0.28334 0.33567 1.25476 + 84 2.88583 5.39491 1.79381 2.06461 4.73890 3.24821 3.51210 4.22442 2.47141 3.51906 4.43601 2.95989 3.57031 2.79057 2.82788 2.02605 2.91163 3.62254 5.82805 4.41723 147 d - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 85 2.90986 4.42406 3.70533 3.66371 3.02577 3.99009 3.90749 2.78363 3.56278 1.02082 3.24022 3.34355 4.36146 3.52102 3.78389 3.13807 2.95820 2.60948 5.03043 3.48016 148 l - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 86 2.57337 4.10245 3.03950 2.95233 2.09915 3.53742 3.15959 3.37138 2.66519 2.44003 3.54971 3.10382 3.71714 3.06888 3.13958 2.44794 3.05039 3.11306 4.61969 3.07664 149 f - + 2.68621 4.42228 2.77522 2.73126 3.46357 2.40516 3.72497 3.29357 2.67744 2.69358 4.24693 2.90350 2.73735 3.18149 2.89804 2.37890 2.77502 2.98521 4.58480 3.61458 + 0.24291 3.02648 1.78874 0.58545 0.81386 0.48576 0.95510 + 87 2.29362 5.30873 1.92419 2.32474 4.26868 3.43187 3.46788 4.12970 2.37357 3.61146 4.35100 2.92576 3.98105 2.69850 2.60197 2.47206 2.54407 3.69618 5.74493 3.96335 152 d - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01185 4.83724 5.55959 0.61958 0.77255 0.87096 0.54223 + 88 2.24696 4.24235 4.56569 3.96478 2.41045 3.97137 3.29432 2.27668 3.43922 2.04964 3.19406 4.05576 4.33743 3.97000 3.38896 3.27217 3.06100 2.23241 4.18296 2.20711 153 l - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01185 4.83724 5.55959 0.61958 0.77255 0.87096 0.54223 + 89 3.80243 5.01974 5.81731 5.27268 3.70245 5.26548 5.70409 1.30084 5.15744 0.98923 3.04180 5.42350 5.39649 5.16571 5.17462 4.65797 4.03105 1.75151 5.84473 4.80632 154 l - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01185 4.83724 5.55959 0.61958 0.77255 0.62617 0.76494 + 90 2.48275 5.13868 3.18520 2.44727 3.97540 3.65122 3.65677 3.36126 2.16734 3.30486 3.19390 3.06911 4.04233 2.41632 2.75033 2.25069 2.41675 3.09873 5.62108 3.69504 155 k - + 2.68595 4.42186 2.77509 2.73103 3.46377 2.40517 3.72421 3.29387 2.67761 2.69368 4.24695 2.90368 2.73754 3.18175 2.89730 2.37895 2.77536 2.98514 4.58473 3.61505 + 0.63487 1.25520 1.68753 1.39580 0.28453 0.74756 0.64154 + 91 2.43987 5.24839 2.75312 2.20207 4.11839 3.54175 3.72993 4.06095 2.07671 3.34429 3.98666 2.75679 3.72576 2.60349 2.28520 2.46158 2.79062 3.43756 5.68761 3.81452 172 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01352 4.70589 5.42824 0.61958 0.77255 0.34096 1.24163 + 92 2.56414 5.37054 2.84426 2.11401 4.71382 2.70860 2.88683 4.19851 2.19051 3.14492 4.41168 2.55924 4.03189 2.79129 2.63798 2.35762 3.09530 3.76022 5.80426 3.44686 173 e - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01035 4.97167 5.69402 0.61958 0.77255 0.60365 0.79145 + 93 2.86527 4.78061 2.95620 2.59670 4.27271 1.99448 3.84571 3.48713 2.08881 3.39073 4.33266 2.46895 3.64059 2.84730 2.63768 2.84659 2.50396 3.24160 5.73764 4.35043 174 g - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01035 4.97167 5.69402 0.61958 0.77255 0.46145 0.99524 + 94 2.57883 3.45102 3.31966 2.70191 4.02973 3.16828 3.76144 3.12068 2.26544 3.06289 4.10647 2.81108 2.70638 2.99156 2.57108 2.49596 2.68439 2.78596 4.48656 4.03099 175 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01001 5.00539 5.72774 0.61958 0.77255 0.51640 0.90799 + 95 3.00846 4.37852 4.95050 4.33851 2.03946 4.18408 4.51243 2.07907 4.13124 1.32746 2.71567 3.86888 4.53472 4.25457 4.14405 3.49709 3.23945 2.15194 4.98866 3.35208 176 l - + 2.68632 4.42239 2.77534 2.73137 3.46298 2.40515 3.72509 3.29351 2.67755 2.69332 4.24641 2.90361 2.73734 3.18136 2.89815 2.37881 2.77519 2.98532 4.58491 3.61446 + 0.13280 2.11108 5.72774 1.00017 0.45858 0.46707 0.98573 + 96 2.55096 5.39506 2.51329 2.14467 4.73966 3.20813 3.84532 4.22553 2.37049 3.70015 4.43599 2.79265 3.16832 2.74582 2.82569 1.88822 2.42672 3.78548 5.82793 4.41687 180 s - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 97 2.55253 5.00371 2.91674 1.56530 3.77486 3.74196 3.71669 3.18678 2.77868 2.90828 3.00031 3.29724 3.28640 3.12328 3.07027 2.76413 2.89289 3.32236 3.74938 3.48354 181 e - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 98 2.59075 4.32000 2.44335 2.15201 3.95693 3.12347 3.34011 3.83572 2.30797 3.16698 3.93315 2.75363 3.60071 2.81660 2.61665 2.70578 2.85000 3.34465 3.67935 4.00275 182 e - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 99 2.65092 5.35978 2.44414 1.82235 4.69093 3.44711 3.03513 3.63938 2.46445 2.69072 4.40412 3.13476 3.87902 2.43027 2.99516 2.67955 2.75495 3.20344 5.80088 4.03299 183 e - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 100 1.86496 3.02665 4.71869 4.11439 3.41506 3.78632 4.39467 1.72869 3.93413 2.03606 3.25110 4.17623 4.43415 4.09606 3.42450 3.02051 2.94480 2.04904 4.94015 3.76003 184 i - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 101 2.66380 3.60669 3.09016 2.70629 3.97052 3.12773 3.91117 3.25572 1.80561 2.74214 4.19581 3.23071 4.10037 2.51557 2.19861 2.73033 3.11863 2.97558 5.62300 4.27841 185 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 102 2.65525 3.61780 2.73206 2.59880 2.91626 3.69337 3.17740 3.91061 2.06495 2.87551 3.62080 2.65252 4.08468 3.01717 2.55140 2.50072 2.84956 3.37543 5.67937 3.86408 186 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 103 2.78549 3.75825 4.89230 4.27707 2.37628 4.09576 4.42870 1.58181 4.06146 2.16353 2.83229 4.25917 4.45832 4.19107 4.06819 3.40747 3.15724 2.08428 3.94244 2.32199 187 i - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 104 1.91854 4.04767 4.83572 4.22341 2.21465 3.82491 4.41156 2.18264 4.01792 2.17430 2.43077 4.22827 4.44431 4.15736 4.04152 2.82624 2.88622 2.07903 4.25105 3.74133 188 a - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 105 2.59846 4.94560 3.39451 2.56515 3.67443 3.44440 3.79808 3.54150 2.22767 2.11264 4.02778 3.19297 4.14629 3.16161 2.51054 2.63727 2.68778 3.11215 4.13689 2.62651 189 l - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 106 2.71202 4.65478 2.93025 2.07602 4.70407 3.24619 3.70431 4.18261 2.58938 3.67040 4.10390 3.00747 4.05496 1.41184 3.00214 2.55548 2.74962 3.75459 5.80879 4.40428 190 q - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 107 3.40758 4.70636 5.39472 4.82751 3.82844 4.73217 5.15283 1.33187 4.66862 1.85779 2.55181 4.88258 5.03394 4.81634 4.72035 4.07618 2.46891 1.37416 5.58393 4.41648 191 i - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 108 2.29107 3.23763 4.81578 4.20571 3.00975 3.26830 4.41487 2.37700 4.00619 1.39060 3.28560 4.22330 4.44775 4.15070 4.03923 2.94875 3.15303 1.86969 4.92930 3.75166 192 l - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 109 2.62933 4.07203 2.95927 2.08969 4.71415 3.53463 3.84677 3.97436 2.17805 2.82549 4.41873 2.79932 4.05232 2.53645 2.16719 2.25459 2.86145 3.76301 5.81311 4.40656 193 e - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 110 1.17650 4.82606 4.24050 3.83461 4.98724 1.08848 4.85992 4.42183 3.81285 4.07900 4.88120 3.97861 4.34888 4.10941 3.49121 2.50205 3.18154 3.58125 6.30917 5.10145 194 g - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 111 3.90271 5.14012 5.90469 5.33230 3.41122 5.28833 5.65529 2.02087 5.19062 0.88043 2.65524 5.45552 5.42442 5.15469 5.16815 4.66249 4.12260 1.40813 5.79888 4.77647 195 l - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 112 2.18892 5.38966 2.64044 1.97751 4.73333 3.65659 3.60437 3.92129 2.10090 3.35469 4.43069 2.33847 4.05005 2.60616 2.77179 2.58383 3.11351 3.51057 5.82316 3.92131 196 e - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 113 2.81051 5.07767 4.77644 4.29954 2.03535 4.57845 2.23184 3.59557 4.18346 3.18325 4.21755 4.37554 4.93163 4.33627 4.35340 3.88728 3.48134 3.41897 4.49144 0.85916 197 y - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 114 3.22459 2.61128 5.38969 4.79509 3.58979 4.68737 5.03975 1.79213 4.61293 0.89179 2.61919 4.84389 4.96801 4.69100 4.62327 4.02095 3.66625 2.57847 5.40913 4.29402 198 l - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 115 4.50357 5.94639 4.67261 4.49457 2.97674 4.90740 0.35314 4.75553 4.20979 3.98991 5.25041 4.60971 5.36272 4.62490 4.36557 4.47961 4.76464 4.60938 4.62703 2.51319 199 H - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 116 2.59851 4.33805 2.68311 2.05797 4.71676 3.15802 3.59362 3.65569 2.43439 3.32473 4.42034 2.78736 4.05190 2.70193 2.69422 1.73897 3.11362 3.60918 5.81450 4.40740 200 s - + 2.68619 4.42226 2.77521 2.73118 3.46355 2.40514 3.72496 3.29355 2.67742 2.69356 4.24691 2.90348 2.73741 3.18131 2.89802 2.37888 2.77521 2.98510 4.58478 3.61505 + 0.04979 3.09322 5.73865 0.35009 1.21950 0.48576 0.95510 + 117 2.54785 4.42029 2.89622 2.25922 4.34868 3.66610 3.21799 3.71995 2.27125 3.07920 3.10189 2.25867 4.05899 2.34775 2.56766 2.85682 3.11428 3.36249 5.78309 3.93739 202 n - + 2.68634 4.42198 2.77524 2.73138 3.46344 2.40486 3.72467 3.29300 2.67713 2.69352 4.24714 2.90371 2.73709 3.18145 2.89825 2.37911 2.77527 2.98532 4.58501 3.61528 + 0.09842 2.40225 5.73865 1.69597 0.20263 0.48576 0.95510 + 118 2.53322 5.34393 2.95935 2.59629 3.94657 1.84501 3.63806 4.14023 2.18335 3.64044 4.39013 2.55576 3.77395 2.95784 2.71428 2.21077 3.11477 3.72355 4.68564 4.39095 213 g - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 119 3.55513 4.24694 5.60079 5.05662 2.60993 4.96071 5.43324 0.97900 4.91818 2.09234 3.80321 5.12225 5.23216 5.06726 4.97588 4.32549 3.79818 1.34455 5.81250 4.64107 214 i - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 120 2.50668 3.55624 4.84676 4.23404 3.24346 4.08398 4.41611 1.66920 4.02684 2.01982 2.79518 4.23489 4.44784 4.16480 3.83668 2.91482 2.83994 1.71230 4.92013 3.32611 215 i - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 121 4.62495 5.94818 4.90176 4.71687 2.80207 5.05504 0.41821 4.71670 4.43975 3.92227 5.21366 4.70109 5.45885 4.74110 4.56151 4.57303 4.86606 4.59605 4.46431 2.05738 216 H - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 122 3.04282 4.16968 3.83274 3.22981 4.12386 3.92565 4.16387 3.45658 2.89535 2.79946 3.52962 3.63885 4.33284 3.40809 0.88367 3.03173 2.91452 3.20781 5.47983 4.24517 217 r - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 123 4.66549 6.56867 0.13049 3.73947 6.20930 4.51726 5.46620 6.15252 4.80154 5.54790 6.65359 4.31602 5.22661 4.77980 5.35908 4.57977 5.04873 5.69924 7.06132 6.05090 218 D - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 124 4.11594 5.30633 6.13178 5.57769 3.73657 5.59693 5.98457 1.50133 5.46568 0.67788 3.07617 5.76705 5.63423 5.36401 5.43088 5.00606 4.33175 2.14525 5.97972 5.01356 219 L - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 125 4.55719 6.24846 4.80697 4.34215 5.94023 4.73956 5.02576 5.52333 0.17090 4.86848 5.87217 4.66859 5.24422 4.23030 3.41495 4.59394 4.77093 5.20290 6.57866 5.65826 220 K - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 126 2.73388 4.87911 3.10327 2.90832 4.07991 3.41413 4.01646 3.20246 2.89177 2.38683 3.78561 3.39051 1.51394 3.22647 3.32105 2.31617 2.81372 3.19214 5.43675 4.15025 221 p - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 127 2.30763 5.39894 2.49711 1.50775 4.74209 3.53358 3.60730 4.22742 2.31483 3.70337 3.89187 2.94609 4.05547 2.65035 3.08133 2.29509 3.12215 3.78862 5.83238 4.42137 222 e - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 128 4.24075 6.04161 4.10323 4.13804 5.66046 4.44992 5.52992 5.77835 4.64675 5.26705 6.30900 0.15130 5.17553 4.91694 4.94682 4.32646 4.70552 5.25421 6.75952 5.61338 223 N - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 129 3.55135 3.88080 5.58388 5.03211 3.05772 4.93598 5.38843 0.81084 4.88763 1.84199 3.74557 5.09695 5.20522 5.02095 4.93631 4.29650 3.79207 1.75582 5.75938 4.60163 224 i - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 130 4.26500 5.46000 6.21355 5.61602 2.31085 5.64571 5.88455 2.68862 5.47780 0.52109 2.36789 5.81754 5.61663 5.25881 5.37169 5.03996 4.45544 2.72136 5.81387 4.88779 225 L - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 131 3.14725 3.80930 5.11896 4.51210 2.75868 4.35237 4.69393 1.48763 4.30885 1.32733 3.15909 4.51494 4.68518 4.42027 4.31553 3.67228 3.37834 1.91515 5.14039 3.60311 226 l - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 132 2.83132 4.28838 2.02200 2.41335 4.70055 3.12743 3.31546 4.17875 2.06503 3.46693 4.09733 2.49326 4.05387 2.94892 3.07895 2.27711 2.89161 2.90947 5.80603 4.40188 227 d - + 2.68620 4.42227 2.77521 2.73125 3.46356 2.40515 3.72496 3.29356 2.67743 2.69346 4.24692 2.90348 2.73741 3.18137 2.89794 2.37889 2.77521 2.98513 4.58479 3.61505 + 0.19179 2.92011 2.11536 0.31959 1.29625 0.48576 0.95510 + 133 2.77846 5.34345 2.73873 2.12504 4.68884 3.31622 3.10327 4.17503 2.07146 3.64885 4.14408 2.35495 3.55373 2.53396 2.68259 2.30312 2.80970 3.73426 5.77591 4.07717 229 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01122 4.89146 5.61380 0.61958 0.77255 0.46383 0.99121 + 134 2.76231 5.37627 2.40965 2.30431 4.72103 3.48860 3.46007 4.20680 2.15285 3.68141 4.41704 2.22463 3.54282 2.67483 2.66394 2.48608 2.48229 3.08661 5.80911 4.39830 230 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01030 4.97674 5.69908 0.61958 0.77255 0.42506 1.06054 + 135 2.88621 4.31580 2.58861 2.52891 4.00821 1.80604 3.64216 3.70404 2.55848 3.01103 3.82083 2.93142 3.28125 2.96153 3.15140 2.63196 2.92652 3.07947 5.65563 3.39061 231 g - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 136 2.74326 5.32913 2.62872 2.23118 4.20190 3.27586 3.01088 3.39612 2.54602 3.28443 3.99578 2.66732 4.06020 2.45230 2.82728 2.54748 2.65672 2.69485 5.77785 3.49295 232 e - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 137 2.61635 3.28525 4.16732 3.71739 2.98202 4.03403 4.34546 2.03775 3.50788 1.92540 3.47356 3.38535 3.11745 3.96570 3.52677 3.32696 2.46663 1.86856 4.97202 3.78516 233 v - + 2.68644 4.42087 2.77438 2.73125 3.46306 2.40580 3.72561 3.29182 2.67742 2.69394 4.24637 2.90298 2.73752 3.18209 2.89809 2.37898 2.77573 2.98487 4.58490 3.61464 + 0.36530 1.19470 5.73865 2.01193 0.14356 0.48576 0.95510 + 138 2.92386 3.12674 3.30583 2.50241 4.41812 3.73989 3.57074 3.83865 1.16713 3.42239 3.64701 3.25964 4.12762 3.06518 2.74407 2.94589 3.15200 3.22587 5.64420 3.71460 253 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 139 3.61791 5.07369 5.93139 5.42030 4.01697 5.40165 5.95563 1.06228 5.32659 1.08905 3.76387 5.56598 5.56723 5.42106 5.39317 4.81179 4.11011 1.74432 6.14737 5.05160 254 i - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 140 1.74479 2.79152 4.35686 3.77898 3.55350 2.78668 4.34505 2.08763 3.66685 2.55990 3.56128 3.98833 4.38080 3.89329 3.86150 2.46831 2.34811 2.41028 5.05799 3.86488 255 a - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 141 4.66549 6.56867 0.13049 3.73947 6.20930 4.51726 5.46620 6.15252 4.80154 5.54790 6.65359 4.31602 5.22661 4.77980 5.35908 4.57977 5.04873 5.69924 7.06132 6.05090 256 D - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 142 4.66482 5.73614 5.86239 5.64956 0.40883 5.43325 4.33355 3.86711 5.42110 2.16428 4.36705 5.11239 5.65371 5.16689 5.27011 4.83252 4.86624 3.98432 3.74189 2.69037 257 F - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 143 3.93699 5.85566 3.02816 3.87037 6.00993 0.21285 5.44927 5.75466 4.70121 5.27717 6.21696 4.31536 4.99427 4.76567 5.12629 4.02226 4.42780 5.10478 6.99282 5.96830 258 G - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 144 2.54355 3.67295 4.73868 4.13265 2.71576 4.06852 3.76754 2.37455 3.94756 1.20416 3.31174 3.74431 4.43365 4.10500 4.00521 2.64259 3.14725 2.29206 4.93223 3.75278 259 l - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03189 5.01631 3.69859 0.61958 0.77255 0.48576 0.95510 + 145 0.77520 2.86695 4.81978 4.47036 4.95592 3.15951 5.20700 4.36343 4.38394 4.08078 4.90451 4.25075 4.38058 4.58838 4.56864 1.45304 3.34905 3.34992 6.35477 5.22001 260 a - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.07711 4.99453 2.69658 0.61958 0.77255 0.54567 0.86620 + 146 2.54977 3.79925 3.16699 2.32606 4.48674 3.31547 3.84408 3.47518 1.75582 3.12339 4.25869 2.84258 4.04145 2.96441 2.18943 2.71334 2.91887 2.95414 5.67187 4.30075 261 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.13472 4.92824 2.13029 0.61958 0.77255 0.70219 0.68419 + 147 2.64685 3.78445 3.06669 2.61534 3.32325 3.67596 3.69246 3.14713 2.01231 2.43193 3.43451 3.16113 4.06301 2.47274 3.08778 2.74475 2.84906 2.65428 5.37440 4.07606 262 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.29473 4.80574 1.39802 0.61958 0.77255 0.92027 0.50818 + 148 2.40579 4.15423 4.25399 3.66267 2.39272 3.57693 3.44550 2.33935 3.03827 1.86796 2.97007 3.83355 4.18573 3.73297 3.67827 3.10851 2.93289 2.21754 4.76738 2.96352 263 l - + 2.68635 4.42219 2.77489 2.73146 3.46367 2.40530 3.72500 3.29419 2.67720 2.69370 4.24630 2.90362 2.73727 3.18122 2.89818 2.37860 2.77478 2.98583 4.58472 3.61420 + 0.77167 0.63015 5.24955 1.50734 0.25038 0.20147 1.70117 + 149 2.68930 5.13793 2.99383 2.28756 4.12167 3.02811 3.40047 2.83046 2.53990 2.67433 3.91490 2.66806 3.85841 2.95123 3.08518 2.54554 2.43488 3.14237 4.83794 3.11842 281 e - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 150 2.67960 3.59834 3.08049 2.32634 4.00400 2.85568 3.65072 3.26198 2.22635 2.80014 3.89773 3.03566 3.90780 2.84131 2.77630 2.59674 2.54121 2.94346 4.66327 3.60288 282 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 151 2.78407 5.36932 2.80723 2.38070 3.95652 3.28210 3.31902 3.80407 2.38757 3.23090 4.41260 2.26860 2.87333 2.94776 2.55475 2.11230 2.82314 3.31603 5.80800 4.40313 283 s - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 152 2.55066 5.37311 2.42428 2.58328 4.70981 2.65546 3.66067 3.46611 2.34139 3.39818 4.41598 2.44705 3.58966 2.48003 2.87086 2.30355 2.92043 3.58081 5.81084 3.32103 284 s - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 153 2.61131 5.36709 3.05324 2.00706 4.70125 2.53001 3.45141 4.17959 2.46541 3.54879 4.41063 3.13225 3.27183 2.67970 2.77280 2.14590 2.62504 2.97295 5.80635 3.79465 285 e - + 2.68619 4.42226 2.77520 2.73124 3.46320 2.40514 3.72495 3.29355 2.67742 2.69356 4.24691 2.90348 2.73740 3.18147 2.89802 2.37888 2.77520 2.98519 4.58478 3.61504 + 0.03620 3.43177 5.73865 0.40966 1.09027 0.48576 0.95510 + 154 2.80870 4.76397 2.82688 2.35901 3.53520 3.31737 3.24083 3.53679 2.31494 2.98485 3.52265 2.69923 3.15465 2.90046 2.56489 2.40361 2.83318 3.04461 5.74293 3.76697 287 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 155 2.38638 3.55872 3.84850 3.27925 3.07902 3.89951 3.49984 3.07191 2.87600 2.13071 2.79826 2.94436 3.28103 3.24012 3.30127 2.77627 2.52689 2.66914 5.17020 2.84075 288 l - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 156 2.88266 4.79637 2.63708 2.49106 4.69372 3.27452 3.02757 4.17056 2.31920 3.54781 3.84892 2.54158 3.83133 2.71114 2.83815 2.34796 2.07167 3.53868 4.84477 3.26548 289 t - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 157 2.55115 5.22307 2.81541 2.42597 3.84088 2.72211 3.45978 3.70939 2.65113 3.50012 4.03956 3.00145 3.26637 2.92366 3.12986 2.10982 2.09681 2.95270 4.42058 4.32902 290 t - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 158 2.79383 4.53543 3.94528 3.00256 2.28876 3.25886 4.19260 2.53698 3.31063 2.13485 3.51266 3.25465 3.61933 3.02975 2.60672 3.04108 3.13630 2.22820 5.12884 3.03437 291 l - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 159 2.54133 2.27249 3.62507 3.14565 3.48798 3.47382 4.20805 2.87324 3.24770 2.61629 3.62417 3.76153 4.31084 3.45605 3.15192 3.19594 2.77273 1.44309 5.11140 3.89714 292 v - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 160 2.50560 4.02210 4.21483 3.69251 4.03927 0.87585 4.50859 3.18042 3.62456 3.12203 4.01557 3.91946 4.34666 3.89680 3.91281 2.66630 3.23503 2.52015 5.49804 3.97346 293 g - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 161 2.98792 5.00679 3.18026 3.47531 5.09253 3.65988 4.75357 4.53531 3.72802 4.18133 4.99276 3.79669 4.37930 3.97717 4.12874 1.60941 0.74054 3.97784 6.39182 5.11951 294 t - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 162 2.69840 5.26022 3.00961 2.31122 4.20998 3.68086 3.63617 3.20701 2.41779 2.58849 4.31499 2.98486 2.62271 2.99075 2.13729 2.36313 3.11573 3.42385 5.72545 3.54571 295 r - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 163 2.71301 5.29924 2.59488 2.14743 3.52695 3.04037 3.28275 4.06670 2.61594 3.34508 4.35002 2.84026 3.31113 2.97459 2.36266 2.86533 2.70674 3.41928 3.03699 3.23042 296 e - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 164 4.65993 5.73598 5.69662 5.49898 1.97465 5.32012 3.31709 4.36240 5.29326 3.66395 4.92323 4.93743 5.59573 5.06816 5.17473 4.69695 3.41633 4.25844 2.61302 0.51590 297 Y - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 165 2.46851 3.63596 4.34730 3.76113 3.49978 4.00900 4.30977 2.55613 3.41377 2.11254 1.89168 3.40620 4.37893 3.86942 2.23584 3.08926 3.14320 2.13937 5.00600 3.81292 298 m - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 166 0.54633 4.79516 4.59072 4.34047 5.33605 3.22550 5.27451 4.80651 4.37656 4.47607 5.24769 4.21379 3.02084 4.58677 4.60871 1.81435 3.40538 4.05386 6.66459 5.53199 299 A - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 167 3.08666 5.02380 4.02349 3.92167 5.10908 3.73669 5.07487 4.62556 4.04836 4.33998 5.22795 3.34786 0.41351 4.38870 4.30726 3.26072 3.60085 3.40472 6.47905 5.20179 300 P - + 2.68622 4.42144 2.77523 2.73111 3.46358 2.40517 3.72498 3.29358 2.67745 2.69359 4.24694 2.90351 2.73743 3.18126 2.89786 2.37891 2.77523 2.98522 4.58481 3.61507 + 0.03484 3.47295 5.73865 0.99675 0.46057 0.48576 0.95510 + 168 3.66837 6.19086 2.84947 0.45189 5.55161 3.90523 4.43200 5.09782 3.30487 4.55035 5.42336 3.03786 4.53514 3.60153 3.37398 3.54999 3.95969 4.65772 6.64024 5.17650 305 E - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 169 2.79774 4.32598 4.68241 3.67608 3.42171 4.06471 4.38713 2.01470 3.90321 1.87174 3.44282 4.15860 4.43014 3.77035 3.25202 3.36713 2.95239 1.31877 3.77234 3.76466 306 v - + 2.68603 4.42242 2.77519 2.73104 3.46342 2.40506 3.72511 3.29371 2.67728 2.69322 4.24707 2.90364 2.73756 3.18163 2.89801 2.37893 2.77519 2.98535 4.58494 3.61520 + 0.12919 2.22240 4.35495 1.23224 0.34480 0.48576 0.95510 + 170 2.91184 3.76308 4.76588 4.15799 3.39752 4.06920 3.82796 1.60071 3.96642 1.39613 3.17824 3.65225 4.43387 4.11848 4.01348 2.94594 3.14403 2.21737 4.92444 3.43929 311 l - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00999 5.00664 5.72898 0.61958 0.77255 0.51297 0.91308 + 171 2.62785 5.06480 3.29796 2.67561 3.73804 3.41086 3.92577 3.21358 2.32640 2.15096 3.31180 2.55443 4.11004 2.47045 2.33927 2.70318 3.11578 3.12852 5.57146 4.24107 312 l - + 2.68631 4.42245 2.77511 2.73076 3.46350 2.40522 3.72547 3.29356 2.67765 2.69366 4.24573 2.90389 2.73738 3.18142 2.89826 2.37846 2.77520 2.98520 4.58530 3.61473 + 0.62427 1.87899 1.16602 1.98855 0.14722 0.46912 0.98231 + 172 2.60166 5.18307 2.62016 2.19793 3.35206 2.39740 3.57105 3.96340 2.18128 3.47543 4.23188 3.01161 3.92489 2.82990 2.86326 2.33987 2.67701 3.55746 5.63416 3.78538 327 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01428 4.65191 5.37425 0.61958 0.77255 0.24611 1.52250 + 173 2.37600 3.94341 2.81761 2.45806 4.08381 2.38833 3.32666 4.15213 2.47322 3.64753 4.39446 2.71786 3.74359 2.39493 2.76163 2.38666 3.00597 3.01776 5.79219 3.82026 328 a - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00998 5.00778 5.73012 0.61958 0.77255 0.47101 0.97916 + 174 2.81816 4.87774 2.88922 2.34131 3.91699 3.47934 3.84840 3.76601 2.22767 3.10881 4.41163 2.46519 2.75598 2.51039 2.43545 2.43680 2.76354 3.54179 5.80719 3.84984 329 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 175 2.74169 5.33416 2.58184 2.32653 3.61666 2.33545 3.50275 4.12419 2.36762 3.50261 3.56274 2.91332 3.07814 2.74477 2.96926 2.79421 2.92848 3.32496 5.78164 2.72284 330 e - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 176 2.48397 4.72191 2.72922 2.94719 3.45604 3.83733 2.73484 2.72590 3.03376 2.94128 3.81928 3.51045 4.21965 3.13222 3.31573 2.84267 3.12967 2.71705 3.94971 1.76193 331 y - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 177 2.88858 5.15756 2.48812 2.69267 3.68939 2.20273 3.90720 3.84889 2.69072 3.17648 4.22648 3.21985 3.19313 3.04303 3.16266 2.07644 2.02474 3.50391 5.64990 3.69862 332 t - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 178 2.44412 5.27089 3.18567 2.52594 4.01181 3.49400 3.20300 3.68711 2.26882 2.99802 4.32458 3.16791 2.73532 2.67304 2.47574 2.35896 2.41445 3.31659 5.73361 3.79657 333 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 179 2.27957 5.36842 3.14470 2.24142 4.70283 3.35867 3.70433 4.18054 1.84880 3.00297 4.41216 3.13478 2.50109 2.87247 2.49374 2.50485 2.88881 3.75338 5.80713 4.40386 334 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 180 2.25487 3.19836 3.67383 3.53894 3.58335 3.60706 4.24810 2.30247 3.45618 2.57768 3.58074 3.40343 4.33674 3.48890 3.71724 2.25302 2.94661 1.56396 5.07167 3.86608 335 v - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 181 3.32488 6.23611 0.30142 2.99559 5.85936 3.97225 4.81661 5.46625 4.07634 5.00781 5.98660 3.57219 4.70996 4.04099 4.76451 3.76774 4.26196 4.95940 7.04785 5.56474 336 D - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 182 2.97530 4.34655 4.92112 4.31006 3.42469 4.15298 4.48903 1.67409 4.10270 2.14170 2.44181 4.30839 4.51041 4.23558 4.11915 3.46567 2.80277 1.45020 3.28394 3.56694 337 v - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 183 4.60767 5.71652 5.61554 3.89031 2.18526 5.28181 4.15190 4.32304 5.18037 3.62888 4.88484 4.90634 5.56392 5.01906 5.10312 4.65700 4.81381 4.22147 0.60655 1.74323 338 W - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 184 1.30551 4.78823 4.65738 4.37945 5.36630 2.58206 5.28849 4.84019 4.38318 4.50739 5.27020 4.22569 4.39579 4.59600 4.61395 0.79404 2.89139 4.06528 6.68751 5.56026 339 s - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 185 2.44153 3.17932 4.87400 4.25972 2.53121 4.09082 4.42403 2.33144 4.04748 1.34403 2.92510 4.24940 4.45392 4.18053 4.05982 3.14600 3.15398 2.13810 4.92017 3.14864 340 l - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 186 2.22507 4.96728 4.63623 4.63233 5.66307 0.33314 5.62287 5.16416 4.86793 4.86816 5.66661 4.43512 4.57282 5.01497 4.99264 3.26151 3.63533 4.32703 6.92990 5.89905 341 G - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 187 2.93009 2.13614 4.95885 4.35253 3.48038 4.19799 4.54424 1.68794 4.14925 1.93394 3.18432 4.35359 4.55452 4.28834 4.17024 3.34008 3.23972 1.60527 5.03746 3.47367 342 v - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 188 3.21831 4.55127 5.17022 4.58630 3.70338 4.47717 4.86313 1.30610 4.40976 1.92114 2.79907 4.62299 4.81179 4.56490 4.45688 3.52794 2.67243 1.42404 5.34369 4.16408 343 i - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 189 2.77853 3.56970 4.91220 4.29933 2.66878 4.13468 4.46922 2.12981 4.08926 1.13811 3.14072 4.29275 4.49323 4.21981 4.10205 3.44689 2.88537 2.20246 4.95897 3.46211 344 l - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 190 2.08301 4.31008 4.80905 4.20025 2.66597 4.08391 3.54227 2.07553 4.00182 2.35024 3.19529 4.21899 4.44796 4.14611 4.03654 3.39206 3.15615 2.32332 2.91148 1.86433 345 y - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 191 2.65126 3.79080 3.03118 1.37895 4.54227 3.68257 3.87660 3.27048 2.56225 3.53374 4.30787 2.88399 4.07460 2.72714 3.11894 2.49943 2.86114 3.20681 5.71940 3.61825 346 e - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 192 2.75949 4.33120 4.86063 4.24972 2.93412 4.11800 4.44873 2.58063 4.04775 1.34098 1.86205 4.26240 4.47769 4.18564 4.07448 3.30982 2.87183 2.17494 4.95131 3.25026 347 l - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 193 2.13730 3.34433 4.84746 4.23449 2.67079 4.08305 4.41495 2.45417 4.02682 1.45586 2.95446 4.23448 4.44687 4.16424 3.65241 3.39295 2.78239 2.10310 4.91833 3.10946 348 l - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 194 2.61714 3.04119 3.51958 2.50105 3.16562 3.44068 4.02999 3.26384 2.78703 2.46125 3.90521 2.94061 4.18669 3.26384 2.94427 2.45451 1.92365 2.96026 5.36672 3.77569 349 t - + 2.68592 4.42131 2.77530 2.73134 3.46364 2.40523 3.72505 3.29364 2.67751 2.69365 4.24624 2.90357 2.73750 3.18157 2.89769 2.37886 2.77510 2.98507 4.58487 3.61513 + 0.08274 2.77459 4.07273 1.24373 0.34011 0.48576 0.95510 + 195 2.74009 5.38236 2.60734 2.58658 4.30151 1.49346 3.57775 4.19577 2.06867 3.68256 4.42710 2.84258 4.06100 2.86136 2.79826 2.78642 3.12785 3.76776 5.82019 4.41533 355 g - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02515 5.00240 4.01100 0.61958 0.77255 0.52459 0.89600 + 196 2.87057 4.15783 2.81932 2.15097 3.67482 3.00161 3.44561 3.53712 2.01194 3.52030 4.39830 2.84675 4.04172 2.62971 2.18111 2.65254 2.90372 3.46034 5.79407 3.92999 356 k - + 2.68632 4.42239 2.77496 2.73101 3.46368 2.40527 3.72508 3.29339 2.67739 2.69369 4.24616 2.90361 2.73734 3.18160 2.89815 2.37901 2.77533 2.98486 4.58491 3.61430 + 0.06990 2.74572 5.70978 1.46974 0.26135 0.43968 1.03351 + 197 2.53761 4.57755 3.85895 3.05555 3.06219 3.90225 3.89097 2.90555 3.23603 1.98376 3.43681 3.14844 2.18635 3.28921 3.56902 2.76101 2.38583 2.48063 5.16546 3.65117 363 l - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 198 2.94035 4.49377 4.16973 3.59341 3.59928 3.99457 4.28692 2.57573 3.48228 2.11382 3.59630 3.88641 1.19333 3.75706 3.46613 3.08341 3.17527 2.51467 5.10025 3.66586 364 p - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 199 2.95410 3.97958 4.76382 4.16399 1.23466 4.10162 4.38107 2.78567 3.65586 2.19089 3.46719 4.20671 3.78920 4.13156 4.03525 3.25126 3.18603 2.50296 2.73984 2.86766 365 f - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 200 2.72297 4.82530 2.62940 2.35446 3.83755 3.31971 3.71413 4.17131 2.26174 3.54363 4.14174 3.02369 2.60946 2.49179 2.66057 2.21727 2.99115 3.74587 4.55596 3.10965 366 s - + 2.68620 4.42227 2.77522 2.73112 3.46340 2.40515 3.72496 3.29334 2.67743 2.69357 4.24692 2.90349 2.73742 3.18148 2.89803 2.37889 2.77522 2.98520 4.58479 3.61505 + 0.07731 2.84051 4.13492 0.30572 1.33404 0.48576 0.95510 + 201 2.63880 5.38435 2.63657 2.22720 4.72697 1.94780 3.15235 3.87964 2.57669 3.68860 4.42577 2.57921 3.16991 2.74291 2.86900 2.50219 2.85278 3.77370 5.81843 4.40865 368 g - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01003 5.00344 5.72579 0.61958 0.77255 0.52175 0.90012 + 202 2.40102 4.71375 2.46996 2.13243 4.71840 3.11745 3.05416 3.48265 2.25142 3.16134 4.41932 2.93828 3.25177 2.60824 2.79040 2.58260 2.90071 3.38079 5.81277 4.40438 369 e - + 2.68658 4.42180 2.77453 2.73123 3.46394 2.40505 3.72421 3.29333 2.67765 2.69382 4.24730 2.90354 2.73686 3.18110 2.89829 2.37906 2.77522 2.98525 4.58428 3.61543 + 0.55463 1.48984 1.60791 1.39890 0.28351 0.52175 0.90012 + 203 2.69338 5.29005 2.51143 2.25105 4.62988 2.84270 3.49832 3.48405 2.27737 3.31427 4.33211 2.56706 3.20350 2.85310 2.67590 2.21378 2.73620 3.67787 5.72586 4.31806 375 s - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01250 4.78398 5.50633 0.61958 0.77255 0.95212 0.48763 + 204 2.65942 5.19894 2.69156 2.28179 3.77027 3.19251 3.77484 3.06173 2.43464 2.99400 3.94013 2.58274 3.44930 2.63512 2.62020 2.46578 2.71730 3.35179 5.65696 3.80565 376 e - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01250 4.78398 5.50633 0.61958 0.77255 0.77169 0.62033 + 205 2.38920 5.21254 2.73488 2.26876 4.51445 3.29559 3.03245 3.05648 2.42252 2.83088 3.97624 2.72691 3.66747 2.74292 2.65924 2.79642 2.87825 3.04317 5.67196 3.47007 377 e - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01186 4.83615 5.55849 0.61958 0.77255 0.33713 1.25111 + 206 2.65422 4.48489 1.88534 2.29942 4.71042 3.12833 3.84224 3.67843 2.58000 3.67468 4.41498 2.22848 4.04754 2.86157 2.64414 2.33478 2.73698 3.75923 5.80928 4.40246 378 d - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01003 5.00344 5.72579 0.61958 0.77255 0.52175 0.90012 + 207 2.52228 5.35256 2.79874 2.27245 4.68298 3.15080 3.25420 3.81263 2.42135 3.03021 2.98061 3.02733 3.41549 2.09266 2.89624 2.43800 3.03420 3.22791 5.79412 4.39217 379 q - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01003 5.00344 5.72579 0.61958 0.77255 0.52175 0.90012 + 208 2.88352 5.03264 3.01718 2.64158 3.36791 3.41419 3.67586 2.82361 2.46533 2.06980 3.25199 2.87105 3.91016 2.67457 2.54739 2.67076 3.11488 3.35644 5.54543 3.24074 380 l - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01003 5.00344 5.72579 0.61958 0.77255 0.52175 0.90012 + 209 2.31106 5.21929 3.20358 2.11286 3.58411 3.54755 3.12693 3.74178 2.35878 3.37262 4.27754 3.18132 3.64073 2.21825 2.83044 2.63943 3.03559 2.71879 4.50670 3.34948 381 e - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01003 5.00344 5.72579 0.61958 0.77255 0.46390 0.99109 + 210 2.74907 4.02445 4.23598 3.43708 3.16042 3.98772 3.66116 2.29352 2.78065 1.91975 2.65717 3.64306 4.00461 3.79624 2.62994 3.12682 2.72367 2.05105 5.03295 3.83444 382 l - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 211 2.79706 4.32223 4.14412 4.07508 2.44930 4.05985 3.54709 1.67401 3.90204 2.17979 2.94629 3.31750 4.42562 4.07034 3.98057 2.91878 2.88141 2.01026 4.94063 2.95520 383 i - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 212 2.43063 3.51667 2.84063 2.33381 3.23751 3.53757 3.64461 3.61354 2.52297 3.04234 3.80037 3.02528 3.31294 2.77439 2.36706 2.71893 3.04140 2.71650 5.64517 3.47973 384 e - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 213 2.54995 5.35768 3.14585 2.23433 4.68798 3.33616 3.38625 3.80986 2.09254 2.85705 3.68757 2.56176 4.05535 2.40160 2.38927 2.57618 3.04385 3.36418 5.79929 3.79887 385 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 214 2.66499 5.02053 2.80345 2.59207 4.23983 3.19081 3.94632 1.95336 2.43621 2.96229 3.77095 2.92719 4.12615 3.11304 2.86357 2.94448 2.42822 2.54184 5.53679 4.21766 386 i - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 215 2.79062 4.84420 3.48859 2.83007 4.02200 3.06268 4.01637 2.98055 2.36084 1.68419 3.06982 3.40535 3.56488 2.89781 2.78978 2.64270 2.97298 2.81255 5.39215 4.11258 387 l - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 216 2.78422 4.40067 2.87114 2.38957 4.66317 2.42774 3.11725 3.68493 2.29738 3.11118 3.80555 3.07548 3.38861 2.66839 2.52841 2.36297 2.74889 3.71883 4.85618 3.72852 388 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.04975 5.01631 3.17248 0.61958 0.77255 0.48576 0.95510 + 217 2.55009 3.88585 3.08502 2.47179 4.52328 2.60499 3.86026 3.74333 2.31088 3.21633 3.94275 3.03087 2.50945 2.97834 2.41589 2.69163 2.38722 3.38360 5.70135 4.11095 389 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01030 4.97686 5.69921 0.61958 0.77255 0.59090 0.80705 + 218 2.71816 5.35510 2.47492 2.28903 4.69101 3.44039 3.67059 2.92462 2.15295 3.03900 4.39818 2.98975 2.40750 2.74839 2.76016 2.49540 2.85213 3.74081 5.79327 4.38792 390 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02103 4.97686 4.27462 0.61958 0.77255 0.59090 0.80705 + 219 2.59242 4.56547 3.37418 3.24570 3.28039 3.87349 3.78552 2.80260 2.91515 1.85640 3.67045 2.94464 3.03710 3.48913 3.31352 2.93163 2.57101 2.12270 4.60315 3.29903 391 l - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01041 4.96623 5.68858 0.61958 0.77255 0.61678 0.77584 + 220 2.76552 5.35116 2.75065 2.09233 4.26840 3.39661 3.23930 3.45666 2.13782 2.93921 3.69074 2.78256 2.85112 2.85423 2.61182 2.41762 3.01864 3.73701 5.78920 4.16743 392 e - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01041 4.96623 5.68858 0.61958 0.77255 0.61678 0.77584 + 221 2.56616 4.88573 3.26662 2.33696 2.41520 3.27403 3.41068 2.92250 2.70761 2.68623 3.97070 3.19787 3.38122 3.16656 2.79903 2.47364 2.99470 2.86843 4.82552 3.32054 393 e - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01041 4.96623 5.68858 0.61958 0.77255 0.61678 0.77584 + 222 2.62567 5.35084 2.04845 2.35215 4.39252 3.47212 3.16243 3.98892 2.45186 3.65226 3.66396 2.66846 2.63580 2.82810 3.05661 2.22708 2.99549 3.54011 5.78899 3.92777 394 d - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03667 4.96623 3.53930 0.61958 0.77255 0.61678 0.77584 + 223 2.86103 4.03193 3.18635 2.38909 3.31435 3.61153 3.49109 2.70908 2.69769 2.69388 3.88535 3.22191 3.67076 3.11276 2.73635 2.49324 3.00545 2.72730 2.94731 2.96802 395 e - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01875 4.94025 4.47244 0.61958 0.77255 0.67631 0.71028 + 224 2.62521 5.12447 2.77972 2.44738 3.31605 3.53418 3.86652 3.33309 2.47319 3.03557 4.18886 3.10134 2.42408 2.60018 2.70100 2.64509 2.92363 3.22521 3.41935 3.46519 396 p - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.05901 4.93227 2.99396 0.61958 0.77255 0.69360 0.69269 + 225 2.68343 5.20702 2.88582 2.22963 3.55567 3.45903 3.65367 3.49248 2.11994 2.97314 4.26172 2.80968 3.57686 2.44336 3.06162 2.53581 2.67303 3.18308 3.73101 3.66292 397 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01130 4.88456 5.60691 0.61958 0.77255 0.78866 0.60597 + 226 2.68707 4.98468 2.82158 2.38405 3.75917 3.36024 3.65392 3.18317 2.38508 2.73942 3.76303 3.22111 3.36652 3.04584 2.96704 2.31757 2.64759 2.95752 3.21600 3.40268 398 s - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.11345 4.88456 2.30573 0.61958 0.77255 0.78866 0.60597 + 227 2.79298 3.84213 2.48108 2.52210 3.99851 3.60747 3.12972 3.13545 2.48018 3.05991 4.13768 2.83211 3.54520 2.93964 2.41588 2.35619 2.76810 2.97839 5.56015 3.44494 399 s - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02807 4.78362 3.94704 0.61958 0.77255 0.95264 0.48731 + 228 2.58191 4.56682 2.77742 2.37170 4.46635 3.58143 3.77449 3.50815 2.36445 2.67587 4.22448 2.86502 2.73607 2.80387 2.79297 2.07848 2.75446 3.53442 5.63386 3.74575 400 s - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.14447 4.76826 2.07130 0.61958 0.77255 0.97412 0.47405 + 229 2.74120 5.02625 2.90214 2.38037 3.96892 2.81361 3.75340 3.09744 2.29181 2.85276 3.79351 2.85134 3.31773 2.88600 2.57247 2.48932 2.74923 2.81409 5.51153 4.15648 401 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02950 4.63827 3.94280 0.61958 0.77255 1.12880 0.39071 + 230 2.65814 5.03703 2.72915 2.44094 4.30481 3.19996 3.74471 3.73960 2.51991 2.72378 3.12113 3.05398 2.98987 2.79382 2.49179 2.12708 2.96796 3.38544 5.51898 3.52938 402 s - + 2.68724 4.42293 2.77612 2.73159 3.46162 2.40699 3.72369 3.29398 2.67731 2.69321 4.24701 2.90285 2.73662 3.18257 2.89624 2.37860 2.77511 2.98573 4.58252 3.61251 + 0.60323 0.80254 5.34581 2.99471 0.05135 0.22221 1.61320 + 231 2.51767 5.38833 2.69504 1.91983 4.73145 3.65677 3.84405 3.51135 2.26714 3.33248 4.42951 2.74739 2.83044 2.63263 2.69535 2.26534 2.89575 3.77792 5.82218 4.12814 442 e - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 232 2.61324 5.33087 2.55247 1.71577 3.78905 3.51981 3.85697 4.11872 2.53837 3.37618 3.68276 2.71899 3.50504 2.96215 2.76975 2.43182 2.62759 3.19721 4.83386 4.08215 443 e - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 233 1.85315 2.66076 4.74963 4.14369 2.72361 2.76389 4.40211 2.66580 3.95769 1.60680 3.08425 4.19191 4.43908 4.11400 4.01342 3.37949 2.94810 2.35782 4.93743 3.75833 444 l - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 234 2.54113 3.93957 3.31567 2.58263 3.59686 3.36801 3.93655 2.84244 1.77469 2.55244 4.12290 3.02474 4.11900 2.54032 2.70090 2.93506 2.79964 3.23719 5.55956 3.97978 445 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 235 2.66035 5.38903 1.80529 2.16718 4.22724 3.25823 3.17680 4.00903 2.28647 3.50730 4.43018 2.97613 4.05032 2.48614 2.98498 2.31241 3.11375 3.77870 5.82277 3.97909 446 d - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 236 3.21254 4.56529 5.14365 4.53738 1.97526 4.40976 4.73239 2.19759 4.34073 1.04052 3.41232 4.55986 4.72994 4.44093 4.35221 3.72900 3.00622 2.20314 5.16040 3.53582 447 l - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 237 2.97518 4.05135 5.35921 4.78478 3.77817 4.66169 5.06989 1.35059 4.61468 1.50253 2.60400 4.82061 4.97178 4.75525 4.65269 4.00168 3.59517 1.52175 5.50364 4.33590 448 i - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 238 2.63113 4.16111 2.70523 2.01221 4.32546 2.89528 3.69801 3.91463 1.97992 3.37990 4.41866 2.72468 4.05215 2.88390 2.65380 2.44936 2.78930 3.52828 5.81309 3.68713 449 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 239 2.79532 4.56741 2.59886 2.26653 4.72524 2.97326 3.84498 4.20852 1.87988 3.68761 4.42563 2.67816 4.05093 2.72680 2.26697 2.39445 3.11354 3.44147 4.06926 3.70096 450 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 240 2.76031 1.91137 4.93344 4.32897 3.47342 4.21043 4.55379 2.12811 4.13437 1.60981 2.11111 4.35327 4.56463 4.27495 4.16872 3.52442 2.73881 2.49904 5.05160 3.88034 451 l - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 241 3.00579 3.43594 4.91160 4.30236 2.88535 4.17356 4.48924 2.41412 3.62991 0.97514 3.41700 4.31537 4.52645 4.23058 4.12367 3.48482 3.23680 2.59853 2.70167 3.78558 452 l - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 242 2.51291 3.86266 2.42773 2.26878 4.71076 3.65927 3.14908 3.51790 2.32370 3.67561 4.41657 2.44903 4.05255 2.58104 2.64695 2.72413 2.48024 3.27065 5.81133 3.77060 453 e - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 243 2.89024 4.99098 3.22187 2.69841 3.16242 3.74556 3.43367 3.45008 2.12873 2.47972 3.65551 3.30484 3.00902 2.69329 2.47140 2.87653 2.77051 2.80352 4.74384 3.09104 454 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 244 2.75442 4.59220 1.48443 2.55169 4.69407 3.66624 3.85987 4.16899 2.26580 3.66358 4.41104 2.16093 4.06270 2.96232 2.94350 2.69711 3.00639 3.21953 5.80766 4.40610 455 d - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 245 2.53666 4.51809 3.31495 2.50094 3.81458 3.47863 3.66745 3.68842 2.74796 3.30408 3.76297 2.90283 1.45947 2.98944 2.97069 2.84711 3.12065 2.90248 5.56105 4.23506 456 p - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 246 2.18867 5.36299 2.90524 2.21328 4.32931 3.53924 3.49382 3.97251 2.24621 3.14962 3.99253 2.78034 3.78478 2.54072 2.85251 2.30318 2.70173 3.25844 5.80328 3.47734 457 a - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 247 2.48590 4.36945 2.67418 2.22639 4.72760 3.65776 3.84501 4.21118 1.68322 3.11616 4.42723 3.02530 4.05117 2.52411 2.40832 2.54354 2.78662 3.77464 5.82017 4.41136 458 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 248 3.97870 5.88109 4.77637 3.79584 5.10245 4.51923 4.26030 4.68907 2.25479 4.07008 4.99673 4.06985 4.83329 3.42182 0.45649 3.98836 4.07883 4.42272 3.45519 4.78623 459 R - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 249 2.59820 4.04607 4.60274 4.00452 3.26886 3.61184 4.36773 2.06089 3.84570 1.56372 3.45362 4.11687 2.06890 4.02734 3.95003 2.68390 3.14561 2.58630 4.40258 3.38622 460 l - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.04987 5.01631 3.16967 0.61958 0.77255 0.48576 0.95510 + 250 2.79362 5.19179 3.01710 2.75300 4.64905 2.77281 4.01085 4.10036 2.79939 3.46822 4.43166 2.61914 4.12461 3.14023 3.27668 1.68833 1.53351 3.69065 5.84113 4.47617 461 t - + 2.68631 4.42192 2.77519 2.73130 3.46353 2.40482 3.72508 3.29367 2.67738 2.69360 4.24703 2.90360 2.73753 3.18148 2.89804 2.37867 2.77518 2.98532 4.58490 3.61498 + 0.12278 2.37863 3.77824 1.17468 0.36950 0.42506 1.06054 + 251 1.47902 3.78300 4.72209 4.11644 2.74562 3.65840 4.38345 2.02614 3.93274 2.07959 3.21794 4.17061 3.49702 4.09137 3.99270 2.98272 3.05871 2.38788 4.48487 3.74373 467 a - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01009 4.99737 5.71972 0.61958 0.77255 0.53813 0.87669 + 252 2.38222 4.71734 2.84513 2.05232 4.42547 3.25385 3.43556 4.19285 2.14440 3.09056 3.51596 2.80436 3.18490 2.67888 2.63294 2.69832 2.67125 3.58577 5.80764 4.40015 468 e - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01009 4.99737 5.71972 0.61958 0.77255 0.45436 1.00747 + 253 2.65797 4.06542 2.63237 1.57032 4.71890 3.65831 3.45654 4.20087 2.52289 3.68238 4.00276 3.00654 3.59507 2.12286 2.86428 2.58695 3.11362 3.45316 5.81563 3.91003 469 e - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 254 1.93383 3.77543 4.87213 4.26567 3.27005 3.35948 4.48352 1.60295 4.06924 1.71770 3.29328 4.28554 4.50523 4.21524 4.10410 3.45599 3.20183 2.00553 4.99383 3.81574 470 i - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 255 2.91099 3.35807 4.39311 3.80506 3.12662 3.41984 4.32058 2.74098 2.62412 1.35983 2.89439 3.70896 4.38574 3.55146 3.43970 3.02120 3.14303 2.30767 4.99433 3.18557 471 l - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 256 2.62697 4.23577 2.94369 2.01671 4.73311 3.52212 3.12192 4.21804 1.98366 3.41966 4.43054 2.33684 4.05005 2.29561 2.80226 2.65814 2.90658 3.41449 5.82302 4.41298 472 k - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 5.01631 5.73865 0.61958 0.77255 0.48576 0.95510 + 257 2.67425 5.24257 2.69003 2.64384 4.09422 3.68496 1.59772 3.97575 2.52719 3.06621 3.97630 3.17995 4.07682 2.88982 2.86815 2.31165 2.78826 3.60139 5.71188 4.10399 473 h - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.18941 5.01631 1.79622 0.61958 0.77255 0.48576 0.95510 + 258 2.81850 5.23743 2.76502 2.35780 4.54654 3.39495 3.79640 3.57339 2.36240 3.35446 4.28834 3.08690 1.61434 2.83455 2.79066 2.56844 3.04975 3.37601 5.69198 4.30446 474 p - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01183 4.83873 5.56107 0.61958 0.77255 0.86853 0.54398 + 259 3.22678 4.58175 4.94227 4.40609 1.73776 4.31983 4.20406 3.01156 4.21650 2.23279 3.33965 4.33985 4.66520 3.80636 4.24184 3.63704 3.45535 2.61441 1.69956 1.91736 475 w - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01183 4.83873 5.56107 0.61958 0.77255 0.30436 1.33787 + 260 2.99670 4.36610 4.95290 4.33956 1.72799 3.71830 4.50360 1.92619 4.12878 1.69258 2.79907 4.33234 4.52551 4.25179 4.13733 3.48573 3.22794 1.98896 4.25850 3.81122 476 l - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00667 5.01308 * 0.61958 0.77255 0.00000 * +// \ No newline at end of file diff --git a/test/jalview/io/test_fn3_hmm.txt b/test/jalview/io/test_fn3_hmm.txt new file mode 100644 index 0000000..0dcfa22 --- /dev/null +++ b/test/jalview/io/test_fn3_hmm.txt @@ -0,0 +1,285 @@ +HMMER3/f [3.1b1 | May 2013] +NAME fn3 +ACC PF00041.13 +DESC Fibronectin type III domain +LENG 86 +ALPH amino +RF no +MM no +CONS yes +CS yes +MAP yes +DATE Fri Jun 20 08:22:31 2014 +NSEQ 106 +EFFN 11.415833 +CKSUM 3564431818 +GA 8.00 7.20 +TC 8.00 7.20 +NC 7.90 7.90 +STATS LOCAL MSV -9.4043 0.71847 +STATS LOCAL VITERBI -9.7737 0.71847 +STATS LOCAL FORWARD -3.8341 0.71847 +HMM A C D E F G H I K L M N P Q R S T V W Y + m->m m->i m->d i->m i->i d->m d->d + COMPO 2.70330 4.91262 3.03272 2.64079 3.60307 2.84344 3.74204 3.07942 2.79841 2.65364 4.14864 2.95826 2.87120 3.02176 2.96125 2.44783 2.59757 2.57680 4.02726 3.21526 + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.00000 * + 1 3.16986 5.21447 4.52134 3.29953 4.34285 4.18764 4.30886 3.35801 3.70246 2.11675 4.32057 4.32984 0.76706 3.91880 4.22437 3.23552 3.21670 2.88223 5.80355 3.93889 1 p - - - + 2.68629 4.42236 2.77530 2.73088 3.46365 2.40512 3.72505 3.29365 2.67737 2.69316 4.24701 2.90358 2.73734 3.18157 2.89812 2.37898 2.77517 2.98515 4.58488 3.61514 + 0.09796 2.38361 6.81068 0.10064 2.34607 0.48576 0.95510 + 2 2.70230 5.97353 2.24744 2.62947 5.31433 2.60356 4.43584 4.79731 3.17221 2.95090 5.01531 3.26630 2.09873 3.30219 3.34190 1.45782 3.14099 3.57507 6.40877 4.25623 3 s - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 + 3 1.38116 5.98285 3.50784 2.54546 5.32790 3.48945 4.43311 4.81385 2.38773 3.98773 5.02352 3.27895 1.92260 2.69012 2.96119 2.64228 3.29228 3.29618 6.41555 4.20553 4 a - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 + 4 3.32856 5.10403 4.47046 4.60386 4.23079 4.75438 5.09647 2.69918 4.46632 2.97102 4.23502 4.77984 0.63388 4.68581 3.76781 4.05413 3.46306 2.04533 5.75329 4.56372 5 P - - - + 2.68616 4.42236 2.77530 2.73134 3.46365 2.40523 3.72505 3.29295 2.67751 2.69303 4.24634 2.90357 2.73739 3.18157 2.89783 2.37897 2.77530 2.98529 4.58488 3.61514 + 0.09682 2.39494 6.81068 0.10162 2.33687 0.48576 0.95510 + 5 2.95325 4.65976 3.57762 2.20709 3.14816 2.51487 3.41109 4.78902 2.65862 3.19599 4.41042 3.45032 3.44719 2.43205 2.26492 2.25400 2.23196 3.66828 4.80003 4.52485 7 e - - C + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01246 6.08833 4.59386 0.61958 0.77255 0.48576 0.95510 + 6 2.74215 5.97618 2.19482 2.69150 4.58171 2.33553 3.83525 3.28222 2.95080 3.32698 5.01691 1.45822 3.52462 2.79670 2.90942 3.13467 3.27956 4.36668 6.40902 3.92307 8 n - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00341 6.07928 6.80162 0.61958 0.77255 0.44282 1.02784 + 7 3.32507 4.98102 3.78072 3.31043 2.85257 4.76439 5.09585 2.50332 4.69760 1.03851 3.36125 4.91001 2.73206 4.83820 4.72389 4.07376 3.83146 1.59790 5.60385 4.42704 9 l - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.03752 6.08833 3.36505 0.61958 0.77255 0.48576 0.95510 + 8 3.15997 4.90658 3.35204 2.72775 4.53493 3.60960 2.65074 3.69535 2.11078 4.01384 4.99896 3.14668 4.61695 2.40643 2.34723 1.92358 2.03982 3.05153 6.39127 4.98082 10 s - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00349 6.05430 6.77664 0.61958 0.77255 0.35749 1.20207 + 9 1.76295 3.98252 5.55061 4.93551 2.13202 3.39992 5.09294 2.14638 4.23898 2.23988 3.42109 4.92079 4.39252 3.70640 3.99349 3.50811 3.63432 1.47830 4.51148 4.41177 11 v - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 + 10 3.01387 4.98892 2.91217 2.42744 5.22342 4.00576 3.74074 2.67275 2.47618 2.92529 3.89570 3.36720 4.15809 3.26810 2.80854 1.81572 2.02040 2.77133 4.92415 4.31555 12 s - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 + 11 2.41247 5.98374 2.24093 2.04842 3.41543 2.59695 4.10033 4.81544 3.05501 4.28918 5.02429 2.22829 2.90635 3.12939 3.01921 2.37278 3.01194 3.02522 6.41619 3.66635 13 e - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.06784 6.08833 2.75947 0.61958 0.77255 0.48576 0.95510 + 12 2.77725 4.36386 3.23435 2.92496 4.75140 4.31852 4.53101 1.91389 3.01135 2.51491 3.47932 2.97934 3.54432 2.88257 2.68923 3.07794 2.71169 1.80880 6.06849 4.75973 14 v - - E + 2.68623 4.42259 2.77533 2.73059 3.46323 2.40500 3.72529 3.29333 2.67757 2.69369 4.24724 2.90364 2.73744 3.18108 2.89835 2.37891 2.77531 2.98493 4.58511 3.61510 + 0.22113 1.62346 6.74643 0.44471 1.02446 0.29166 1.37446 + 13 3.17575 5.97994 3.10322 2.84738 5.32369 2.00173 4.43389 4.80873 3.01150 3.75019 4.42663 2.23751 4.64014 2.74467 2.85546 1.99984 1.67133 4.36987 5.08444 3.58488 18 t - - C + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 + 14 2.14203 5.98483 2.53686 2.20884 5.33077 2.76253 3.61799 4.81737 2.91636 3.96256 5.02525 2.79307 2.44932 3.35978 3.34773 1.76758 2.51815 4.12754 4.53404 4.35768 19 s - - T + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02274 6.08833 3.90154 0.61958 0.77255 0.48576 0.95510 + 15 3.45984 5.96297 2.32904 2.98671 5.30486 3.14893 3.59992 3.68067 2.95954 4.26690 5.00447 2.01875 4.62814 3.51950 2.89162 1.97303 1.47565 3.87160 6.39755 3.59993 20 t - - T + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00344 6.06904 6.79138 0.61958 0.77255 0.40302 1.10352 + 16 2.82603 5.98256 2.96292 2.53617 4.39559 3.14388 4.09532 4.81336 2.59005 4.28779 5.02326 3.12547 4.63955 2.76620 3.03618 1.28432 2.14874 3.55065 4.82032 3.29405 21 s - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 + 17 2.29842 4.96481 5.56794 4.95172 2.45211 3.33868 4.31545 1.97312 4.73378 1.34355 2.88087 4.92903 5.12608 4.86259 4.73754 4.07438 3.55674 1.71344 5.58685 3.78328 22 l - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 + 18 2.99930 4.68496 3.44656 2.53427 3.92510 4.04338 3.13178 3.10095 3.07007 2.68343 3.58599 3.17010 4.15335 2.63450 2.71950 2.30083 2.03779 2.23518 4.92400 3.84991 23 t - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 + 19 3.61302 4.50726 5.99163 5.39935 2.74200 5.23506 5.61087 1.85210 5.20622 1.10188 3.56291 5.40353 5.56305 5.33364 5.22134 4.56441 3.85751 1.20867 6.05610 4.88933 24 l - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 + 20 2.90508 5.98486 3.37356 2.37027 5.33083 3.46854 3.40789 4.81743 2.65230 3.22177 4.17825 2.67373 4.63906 2.52648 2.39431 1.50547 2.16764 4.37598 5.01440 5.00552 25 s - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 + 21 5.54218 6.63564 6.83891 6.61797 2.57168 6.35073 5.30532 3.96643 6.37377 3.18917 5.26281 6.07009 4.35269 6.11992 6.21105 5.74680 5.75143 4.86346 0.24436 3.66807 26 W - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 + 22 3.10862 5.98423 2.61761 2.10221 4.46995 3.93009 3.84182 3.79843 2.19229 3.09373 4.47555 2.66452 4.06864 2.59255 2.99987 1.99073 2.05618 3.67318 6.41655 4.47364 27 s - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 + 23 2.05280 5.87614 3.77610 2.63103 5.17655 3.25143 3.55897 3.09279 2.68152 3.35866 4.92882 3.43937 1.44938 3.29932 2.98336 2.85751 2.78420 3.02863 4.43359 4.47040 28 p - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 + 24 2.65644 5.88726 3.37601 2.96202 5.19190 3.53629 4.46143 4.20046 2.87295 2.91429 4.93884 3.27084 1.07653 3.39095 3.69926 2.07705 3.29723 2.92337 6.34501 4.95985 29 p - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.32165 6.08833 1.29911 0.61958 0.77255 0.48576 0.95510 + 25 2.44244 5.77880 2.64467 2.21733 3.20572 3.66340 3.27861 4.60939 2.17717 2.95495 4.81953 3.17778 2.62084 2.96028 2.64039 2.55818 2.51134 3.52175 6.21164 4.20060 30 k - - S + 2.68557 4.42278 2.77404 2.73101 3.46370 2.40555 3.72548 3.29364 2.67779 2.69337 4.24743 2.90378 2.73741 3.18051 2.89835 2.37928 2.77557 2.98526 4.58530 3.61392 + 1.12909 0.74203 1.60680 0.24883 1.51281 1.67198 0.20810 + 26 2.76497 5.64634 2.06362 2.44254 4.06108 3.91520 3.28362 3.73992 2.46695 3.95074 4.68755 2.93859 2.87257 2.71813 3.08100 2.16767 2.28242 3.00778 6.08028 4.00221 33 d - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00580 5.54941 6.27176 0.61958 0.77255 1.23854 0.34222 + 27 2.94904 4.81418 2.88265 2.99332 4.83563 1.49306 3.87927 3.68299 2.59086 2.53757 4.07313 2.89409 2.92833 3.04624 2.88166 2.82744 3.22994 3.21444 4.18838 4.04981 34 g - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00508 5.68074 6.40309 0.61958 0.77255 0.20085 1.70396 + 28 2.96588 5.95917 2.45759 2.65943 5.30490 1.91234 3.11781 3.44164 2.78003 4.01788 4.99965 2.12379 3.26764 2.84040 2.87160 2.26272 3.15721 3.84740 4.86821 3.64128 35 g - - S + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00351 6.05095 6.77330 0.61958 0.77255 0.34864 1.22298 + 29 2.45969 5.96445 2.88574 2.61716 5.30131 1.53630 4.43818 3.46883 2.98393 3.60366 4.33332 3.25719 4.28257 3.08417 2.40821 2.08539 3.20111 2.81105 6.40207 4.25093 36 g - - S + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 + 30 2.71563 5.98438 2.50720 1.96228 5.33013 3.47246 3.38617 3.68065 2.34086 4.03521 4.36775 3.08029 1.87041 2.90329 3.33287 2.70645 2.77558 2.97286 6.41666 4.17777 37 p - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 + 31 3.04837 4.96747 2.67316 4.92527 2.42064 4.14655 5.09097 1.34551 4.71334 2.18068 3.34829 4.91585 3.31178 4.15082 4.72663 3.69906 3.53551 1.88881 3.93067 3.04034 38 i - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 + 32 2.89418 4.58676 2.12720 2.65970 3.99748 4.30700 4.50689 3.12934 2.75241 2.32504 4.34805 3.25317 4.69765 2.93544 2.97945 2.48570 1.85268 2.60501 5.05387 4.40931 39 t - - S + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 + 33 3.05045 5.96458 3.15002 2.79713 4.16491 1.56242 3.20986 4.07540 2.34002 3.77648 3.66616 2.65073 4.64351 3.21500 2.62101 2.34442 2.98761 3.25677 5.04578 3.36446 40 g - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 + 34 4.72855 5.99332 6.32397 5.91516 1.75259 5.71064 3.47111 3.64093 3.68669 3.44300 5.13564 5.60513 6.03397 5.64902 5.63703 5.05114 4.95149 3.46344 3.97019 0.49348 41 Y - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 + 35 3.03913 5.98101 2.74983 1.95825 3.75604 3.98121 3.78677 3.48894 2.41418 2.89991 5.02189 2.66693 4.63989 2.65222 2.20113 2.26435 2.64729 3.16844 6.41420 3.93691 42 e - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 + 36 3.75576 5.90373 6.92143 6.48083 5.27028 6.48043 7.33031 1.16190 6.46559 1.72148 4.18143 6.65320 6.63807 6.70678 6.63399 5.94811 5.00240 0.82398 7.51298 6.31097 43 v - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.04904 6.08833 3.08806 0.61958 0.77255 0.48576 0.95510 + 37 2.63429 4.71789 2.89387 2.04081 4.17861 4.22097 3.38514 2.92734 2.36124 3.26230 4.97143 3.69265 4.61418 2.27063 2.38238 2.70982 2.11937 3.37005 6.36711 3.73375 44 e - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00353 6.04282 6.76517 0.61958 0.77255 0.32899 1.27173 + 38 3.00800 2.48193 5.53105 4.91728 2.98458 4.75707 4.15268 2.83469 3.12355 2.32451 4.08737 4.91198 5.12099 4.84273 3.46182 3.58557 3.26283 2.28912 2.64554 1.29971 45 y - - E + 2.68641 4.42053 2.77543 2.73091 3.46377 2.40536 3.72420 3.29377 2.67764 2.69378 4.24582 2.90336 2.73763 3.18113 2.89660 2.37910 2.77543 2.98542 4.58500 3.61526 + 0.12278 2.16768 6.81068 0.54422 0.86820 0.48576 0.95510 + 39 2.52553 4.02469 3.60093 2.65311 4.18239 3.63052 4.17989 3.44209 2.14970 3.12319 4.96260 3.43770 4.02454 2.12722 2.15391 2.32250 3.25888 3.40611 2.73453 3.57446 49 q - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02932 6.08833 3.62591 0.61958 0.77255 0.48576 0.95510 + 40 2.85303 5.96779 2.74660 1.91867 5.31393 3.60453 3.59476 4.33679 2.36399 3.57280 3.62613 2.83996 2.06170 2.51716 3.24767 2.43993 2.61505 3.39964 6.39984 4.98824 50 e - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00347 6.06248 6.78482 0.61958 0.77255 0.67944 0.70705 + 41 2.55267 3.11480 2.72137 2.31006 5.21613 3.67111 4.08491 3.18721 2.11932 2.73126 3.73119 3.72342 3.44703 2.78931 3.31632 2.60923 2.50487 2.33623 6.34948 4.95631 51 k - - T + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.09789 6.06248 2.39773 0.61958 0.77255 0.38130 1.14877 + 42 3.41114 5.92195 2.00739 2.51445 4.35946 1.85149 4.04885 4.75310 3.02073 3.41727 4.96259 1.88803 4.57836 2.81891 2.77402 2.53317 2.79169 3.60394 6.35459 4.48731 52 g - - T + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00370 5.99676 6.71911 0.61958 0.77255 0.25112 1.50474 + 43 2.89692 5.98568 2.39354 2.04021 5.33202 2.12548 3.27810 4.81889 2.36649 3.39071 4.58505 2.82477 4.63888 2.99231 3.02264 2.04514 2.45319 3.82791 6.41761 5.00590 53 e - - T + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 + 44 3.10206 5.95088 3.50928 2.19657 4.70794 1.83640 4.44201 3.85177 2.81849 3.20653 3.64542 2.17673 2.82486 2.50236 3.67274 2.64718 2.71954 3.18909 6.39210 3.73228 54 g - - C + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.08059 6.08833 2.58819 0.61958 0.77255 0.48576 0.95510 + 45 2.83017 5.93388 2.31048 1.94273 5.28007 2.46456 3.60606 4.35357 2.35448 2.95362 4.97424 3.06816 3.41033 2.69285 2.84649 2.21743 2.98206 3.67978 4.23187 4.95426 55 e - - C + 2.68733 4.40831 2.77609 2.73043 3.46444 2.40393 3.72592 3.29278 2.67833 2.69426 4.24827 2.90407 2.73626 3.18024 2.89744 2.37952 2.77650 2.98614 4.58019 3.61570 + 1.45631 0.90375 1.01651 1.51529 0.24813 0.96821 0.47765 + 46 2.32839 5.42660 2.93163 2.28220 4.02543 3.04571 3.03894 3.22247 2.82753 3.21315 3.89864 3.49093 2.50859 3.14260 2.89921 2.69284 3.05772 2.38519 4.38264 3.20345 66 e - - G + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00571 5.56406 6.28641 0.61958 0.77255 0.18459 1.78051 + 47 2.69465 3.91083 2.42967 2.34662 4.43247 3.13708 3.62175 3.49809 2.56727 2.84127 4.03266 3.52527 3.00745 3.22895 3.52756 2.46523 2.69768 3.11906 2.19019 4.92515 67 w - - C + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00353 6.04443 6.76678 0.61958 0.77255 0.33269 1.26228 + 48 2.67627 5.86490 3.17099 3.22595 3.40616 4.27494 3.15476 3.07365 2.21494 2.78239 4.39426 2.30764 3.56160 2.19351 2.71433 2.94392 2.62330 2.55032 5.16850 4.37026 68 q - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 + 49 3.05871 5.98132 3.36643 1.71285 5.32569 3.90513 2.27648 4.25125 2.92072 4.28630 4.28595 2.90579 3.33969 2.79371 2.63337 2.42582 2.46361 2.81009 3.46671 3.72048 69 e - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 + 50 2.88323 4.65127 3.40086 2.73607 2.41972 3.62669 3.91044 2.52424 2.75640 2.37424 3.94274 3.64921 4.76561 2.38668 2.64750 3.03028 3.09193 2.27100 6.08057 3.03402 70 v - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 + 51 3.36533 5.95840 2.65995 2.86095 3.44584 4.25167 3.55888 2.90987 2.78397 3.33346 3.90493 2.03375 3.68901 2.80089 2.78508 2.11531 1.97302 3.15541 6.39763 4.99330 71 t - - E + 2.68571 4.42246 2.77540 2.73144 3.46375 2.40497 3.72515 3.29375 2.67742 2.69376 4.24711 2.90367 2.73710 3.18135 2.89822 2.37876 2.77540 2.98457 4.58498 3.61524 + 0.06628 2.76409 6.81068 0.97562 0.47314 0.48576 0.95510 + 52 2.38926 5.49703 3.09615 2.80044 4.68202 3.76562 4.62096 2.19958 3.33274 2.03099 4.11871 2.97731 4.26404 3.83080 2.89542 3.19964 2.84193 1.56133 6.03936 4.75239 75 v - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 + 53 2.79501 4.92737 2.35659 2.60299 4.06511 2.98090 3.88301 4.80087 2.44593 3.57653 5.01701 3.37711 1.76863 3.53250 3.23955 1.94419 2.68524 2.95506 6.41016 5.00121 76 p - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 + 54 2.44542 5.98316 3.18675 2.55065 5.32835 2.12386 4.43300 4.38419 2.38413 2.93654 5.02378 2.50193 2.49139 3.27226 2.05133 2.36069 3.70337 4.12664 4.32391 4.48343 77 r - - T + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 + 55 2.77179 5.98329 2.50848 2.76644 5.32854 3.30269 3.08416 4.38434 3.16759 4.28865 5.02390 2.27915 2.67265 2.61285 3.32102 2.18277 1.82444 2.83013 6.41587 4.35727 78 t - - T + 2.68621 4.42251 2.77546 2.73149 3.46380 2.40468 3.72521 3.29380 2.67767 2.69252 4.24716 2.90344 2.73766 3.18134 2.89827 2.37913 2.77442 2.98545 4.58503 3.61529 + 0.07130 2.69245 6.81068 1.11635 0.39671 0.48576 0.95510 + 56 2.32530 5.97446 3.57954 1.89562 5.31575 4.24796 3.32554 3.73278 2.42253 2.98562 5.01611 3.71687 3.10116 2.71107 2.91871 2.60336 1.70360 3.15915 6.40941 5.00074 83 t - - T + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.35248 6.08833 1.22151 0.61958 0.77255 0.48576 0.95510 + 57 2.95924 5.72336 2.75932 2.63159 3.96190 3.29462 3.22449 3.40062 2.77057 3.18108 3.56769 2.46117 2.98702 3.05715 2.72729 2.56520 1.96589 3.52719 6.16591 2.96938 84 t - - S + 2.68622 4.42162 2.77539 2.73088 3.46349 2.40510 3.72514 3.29311 2.67761 2.69358 4.24710 2.90367 2.73759 3.18166 2.89753 2.37894 2.77488 2.98538 4.58497 3.61523 + 0.23969 1.55321 6.46298 0.15973 1.91309 0.51157 0.91517 + 58 2.78411 5.86726 3.65151 2.46190 3.55121 3.32277 3.71415 3.82816 2.87545 3.69015 4.27003 2.90512 3.60994 2.68731 2.37548 1.72361 1.95655 3.42914 6.30822 3.85760 87 s - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00384 5.96109 6.68344 0.61958 0.77255 0.21363 1.64843 + 59 2.13080 3.38910 5.56698 4.95075 2.41578 4.20194 3.39215 2.83299 4.73282 2.14660 3.19234 4.92810 5.12527 4.86169 4.18461 4.07348 3.03808 1.63705 4.66089 1.78369 88 v - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 + 60 3.12543 5.93769 2.99354 2.53954 5.26303 4.25659 3.21054 2.85212 2.62935 2.82513 3.45830 2.90110 4.19559 2.80624 3.10357 2.88568 1.50190 2.67316 6.38237 3.93622 89 t - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 + 61 3.61965 4.99402 3.63828 4.95783 2.26826 4.79135 5.12555 1.86647 4.74679 1.34194 3.74460 4.94944 5.15281 3.10559 4.75989 3.74420 3.85186 1.42486 5.61987 4.44474 90 l - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 + 62 3.10387 5.98366 3.06368 2.31445 4.05906 3.57903 3.48488 4.81531 2.43543 4.01680 3.91148 2.67498 2.99920 2.70828 2.56621 2.14984 1.90367 3.06274 4.55677 4.37671 91 t - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 + 63 3.34220 5.98744 1.86090 2.69096 5.33359 1.40608 3.63608 4.82043 2.48624 4.29318 4.45099 1.96888 4.06897 3.19339 3.48838 2.73868 3.70514 4.37867 6.41942 4.25681 92 g - - S + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 + 64 5.18530 6.36522 4.58586 6.57578 3.53131 6.59442 6.84537 2.81242 6.44067 0.21363 3.54046 6.78308 6.53953 6.19263 6.31583 5.99910 5.37457 3.39834 6.73440 5.83217 93 L - - - + 2.68590 4.42227 2.77521 2.73125 3.46356 2.40515 3.72496 3.29356 2.67743 2.69357 4.24692 2.90349 2.73741 3.18148 2.89803 2.37889 2.77521 2.98520 4.58479 3.61505 + 0.02033 3.96193 6.81068 0.31431 1.31041 0.48576 0.95510 + 65 2.93361 5.98253 3.16620 2.07447 5.32745 3.84017 3.84639 3.52003 2.07989 2.71701 4.56317 3.05465 3.94228 2.39023 2.13660 2.81003 2.42767 2.98359 6.41531 3.87097 95 e - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 + 66 2.17452 5.85112 3.79178 2.44872 5.14174 4.27993 4.47388 4.59086 3.04069 4.13287 4.42378 3.36057 0.82761 3.31072 3.71538 3.13243 3.15654 3.97958 4.90439 4.38214 96 p - - T + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 + 67 2.72531 5.97666 2.50761 2.79752 4.22378 1.29966 2.70734 4.80294 2.85170 4.02964 5.01805 2.59981 4.64085 3.32835 3.25617 2.51345 3.59137 3.91820 4.88800 2.97800 97 g - - T + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 + 68 2.39925 4.86641 3.79312 2.74568 5.13568 4.27988 3.97435 3.95098 2.69562 3.65359 3.00813 3.38952 4.67180 3.12070 2.33490 2.43668 1.27713 2.90106 6.31421 4.93977 98 t - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 + 69 2.87821 5.98261 2.71299 2.05681 3.93787 3.36966 3.57296 3.81023 2.25993 3.03102 3.49917 2.39917 3.09415 2.62154 2.82818 2.67359 2.51409 3.67730 4.58228 5.00448 99 e - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 + 70 6.32206 7.09639 6.95855 7.01624 2.70399 6.62558 5.12529 5.84365 6.77161 4.03604 6.32463 4.32154 6.86163 6.30239 6.48747 6.05185 6.49899 5.81871 5.18730 0.14189 100 Y - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 + 71 3.06725 5.97020 3.56838 1.93769 4.23056 3.77167 3.39655 3.53252 2.56448 3.45405 4.47893 2.47898 4.64226 2.55695 2.74362 2.36648 2.01401 2.66399 6.40629 3.70776 101 e - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 + 72 3.19486 4.19171 5.58508 4.96942 1.44027 4.15574 5.11433 1.81297 4.75161 2.09873 3.37140 4.94615 5.14143 4.88008 4.75485 4.09123 3.83769 1.47173 5.60267 3.09551 102 f - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 + 73 3.18039 4.06436 3.15201 2.27681 5.32468 3.77041 3.95744 3.70705 2.23538 4.28548 4.11883 2.88564 4.63997 2.58030 1.70576 2.27707 2.39981 3.62914 4.03739 3.61343 103 r - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 + 74 3.76685 5.84337 6.79391 6.31497 3.84743 6.27452 6.95358 1.59565 6.25134 2.11498 4.30213 6.44619 6.46746 6.44080 6.36566 5.70153 4.90672 0.53161 7.20703 6.03175 104 V - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 + 75 2.31005 4.88319 3.40675 2.63903 3.58848 4.26911 3.49342 3.09105 2.39543 3.00463 4.93879 3.41670 4.66153 1.98639 2.22144 3.11070 2.61129 2.78609 6.34491 2.92043 105 q - - E + 2.68621 4.42228 2.77522 2.73126 3.46357 2.40516 3.72497 3.29357 2.67744 2.69312 4.24693 2.90350 2.73743 3.18149 2.89804 2.37890 2.77522 2.98521 4.58480 3.61506 + 0.03738 3.58894 4.70319 0.25135 1.50394 0.48576 0.95510 + 76 0.79499 5.17226 4.80437 3.93376 4.33120 3.17569 4.96596 3.30029 4.15773 2.86829 4.32533 4.52823 5.01384 4.41886 4.42465 2.28661 2.19420 2.76335 5.81537 4.60940 107 a - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00340 6.08033 6.80268 0.61958 0.77255 0.44741 1.01966 + 77 2.84306 4.15407 4.98296 3.19564 3.23517 4.66606 3.67524 2.49603 3.23224 2.21212 3.84796 4.62630 5.03633 2.88555 2.43211 3.49088 3.22704 1.33993 5.67363 2.88123 108 v - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 + 78 3.27061 4.75060 2.81965 3.10410 5.31934 3.95942 3.99367 3.88107 2.62205 4.02823 5.01830 1.35628 3.08534 3.32913 3.08546 1.88067 2.21938 4.02145 6.41122 3.76470 109 n - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00992 6.08833 4.87890 0.61958 0.77255 0.48576 0.95510 + 79 2.39836 4.69624 2.57939 2.56364 4.72011 1.55094 3.74815 4.26504 2.61409 4.28517 5.02018 2.82673 4.26340 2.69971 2.87382 2.73983 2.53993 3.07568 6.41202 5.00074 110 g - - T + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00340 6.08180 6.80415 0.61958 0.77255 0.45398 1.00812 + 80 2.22211 4.94595 2.69424 2.44928 4.84552 2.32005 3.06335 2.95704 2.33976 3.55821 4.09648 2.87488 4.09930 2.85656 2.97877 3.08279 3.07714 2.39346 6.40553 4.01548 111 a - - T + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.38398 6.08833 1.15015 0.61958 0.77255 0.48576 0.95510 + 81 2.96920 5.43248 3.46409 2.76236 3.93019 1.02513 4.29951 4.07917 3.10833 3.39330 4.50784 3.40559 4.48149 3.45547 3.56956 2.50552 2.39680 3.76237 5.94228 3.01765 112 g - - E + 2.68652 4.42259 2.77488 2.73144 3.46170 2.40466 3.72529 3.29388 2.67703 2.69373 4.24724 2.90335 2.73774 3.18162 2.89801 2.37895 2.77529 2.98552 4.58511 3.61537 + 0.29928 1.35852 6.43163 0.48724 0.95274 1.77816 0.18506 + 82 2.84273 4.18992 3.05053 2.12883 3.36284 2.75189 4.25559 3.03507 2.66396 2.65563 4.59024 2.63081 3.84786 2.76844 3.19058 2.84597 2.82776 2.89016 3.06821 3.41272 117 e - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00494 5.70928 6.43163 0.61958 0.77255 1.56406 0.23482 + 83 3.37920 5.61493 3.74277 3.20384 4.92800 1.01625 3.96683 4.35082 2.94708 2.91738 4.72998 3.71516 3.70329 3.52945 3.00683 1.61777 3.61882 4.00263 6.13360 4.80162 118 g - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00481 5.73459 6.45693 0.61958 0.77255 0.30535 1.33510 + 84 2.58463 5.93784 3.04102 2.09605 4.57465 2.51630 3.24109 4.26208 2.60545 3.44607 3.62705 3.20484 1.89678 2.68661 2.74662 2.97880 3.02092 3.23569 6.37074 4.50367 119 p - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00361 6.02233 6.74467 0.61958 0.77255 0.28862 1.38348 + 85 2.48488 5.72055 3.87501 1.97538 3.04853 3.48010 4.51877 3.51898 2.88839 2.73568 4.42660 3.64380 2.08811 3.48814 2.70856 2.40769 2.92982 4.05679 2.77386 3.43366 120 e - - B + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00338 6.08833 6.81068 0.61958 0.77255 0.48576 0.95510 + 86 3.03720 5.94099 3.75455 2.96917 5.26587 2.91682 3.66571 4.11840 2.98472 4.23738 4.98891 3.74380 4.66031 3.40955 3.12788 0.72443 2.46104 4.32115 6.38683 4.99111 121 s - - E + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00227 6.08723 * 0.61958 0.77255 0.00000 * +// diff --git a/test/jalview/schemes/HMMERColourSchemeTest.java b/test/jalview/schemes/HMMERColourSchemeTest.java new file mode 100644 index 0000000..f411708 --- /dev/null +++ b/test/jalview/schemes/HMMERColourSchemeTest.java @@ -0,0 +1,52 @@ +package jalview.schemes; + +import static org.testng.Assert.assertEquals; + +import jalview.io.DataSourceType; +import jalview.io.FileParse; +import jalview.io.HMMFile; + +import java.awt.Color; +import java.io.IOException; +import java.net.MalformedURLException; + +import org.testng.annotations.Test; + +public class HMMERColourSchemeTest { + HMMERColourScheme scheme = new HMMERColourScheme(); + + @Test + public void testFindColour() throws MalformedURLException, IOException + { + + HMMFile file = new HMMFile(new FileParse( + "test/jalview/io/test_PKinase_hmm.txt", DataSourceType.FILE)); + + scheme.hmm = file.getHMM(); + Color expected; + + Color actual = scheme.findColour('A', 1, null, null, 0); + assertEquals(actual, Color.ORANGE); + + actual = scheme.findColour('Y', 3, null, null, 0); + assertEquals(actual, Color.ORANGE); + + actual = scheme.findColour('M', 109, null, null, 0); + expected = new Color(230, 0, 0); + assertEquals(actual, expected); + + actual = scheme.findColour('I', 6, null, null, 0); + expected = new Color(171, 171, 255); + assertEquals(actual, expected); + + actual = scheme.findColour('V', 14, null, null, 0); + expected = new Color(129, 129, 255); + assertEquals(actual, expected); + + actual = scheme.findColour('X', 100000000, null, null, 0); + assertEquals(actual, Color.WHITE); + + + } + +} diff --git a/test/jalview/util/Binned.csv b/test/jalview/util/Binned.csv new file mode 100644 index 0000000..f140646 --- /dev/null +++ b/test/jalview/util/Binned.csv @@ -0,0 +1,4 @@ +1.8, 4.53 +3.4, 2.65 +0, 5.4 +6.4, 10.8 \ No newline at end of file diff --git a/test/jalview/util/HMMProbabilityDistributionAnalyserTest.java b/test/jalview/util/HMMProbabilityDistributionAnalyserTest.java new file mode 100644 index 0000000..9489efb --- /dev/null +++ b/test/jalview/util/HMMProbabilityDistributionAnalyserTest.java @@ -0,0 +1,117 @@ +package jalview.util; + +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNull; + +import jalview.datamodel.HMMNode; +import jalview.datamodel.HiddenMarkovModel; +import jalview.datamodel.Sequence; +import jalview.datamodel.SequenceI; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Vector; + +import org.testng.annotations.Test; + +public class HMMProbabilityDistributionAnalyserTest { + + HMMProbabilityDistributionAnalyser analyser = new HMMProbabilityDistributionAnalyser(); + + @Test + public void testMoveToFile() throws IOException + { + + BufferedReader br = new BufferedReader(new FileReader( + "test/jalview/util/test_Fams_for_probability_analysis")); + analyser.moveLocationBy(1, br); + + String line = br.readLine(); + assertEquals(line, "# STOCKHOLM 1.0"); + line = br.readLine(); + assertEquals(line, "seq1 ATW"); + line = br.readLine(); + assertEquals(line, "seq2 ATI"); + + } + + @Test + public void testCountValidResidues() + { + analyser.sequences = new Vector<>(); + analyser.hmm = new HiddenMarkovModel(); + analyser.hmm.addFileProperty("LENG", "8"); + + List nodes = new ArrayList<>(); + nodes.add(new HMMNode()); + for (int i = 1; i < 9; i++) + { + HMMNode node = new HMMNode(); + node.setAlignmentColumn(i - 1); + nodes.add(node); + + } + analyser.hmm.setNodes(nodes); + + SequenceI[] sequence = new Sequence[] { + new Sequence("seq1", "ATGWWSCF"), new Sequence("seq2", "GGMKI"), + new Sequence("seq3", "--.ATccGc") }; + analyser.sequences.add(sequence[0]); + analyser.sequences.add(sequence[1]); + analyser.sequences.add(sequence[2]); + + int count = analyser.countValidResidues(); + assertEquals(count, 16); + } + + @Test(priority = 0) + public void testReadBinned() throws IOException + { + analyser.readBinned("test/jalview/util/"); + Map map = analyser.binned; + assertEquals(map.get("1.8"), 4.53); + assertEquals(map.get("3.4"), 2.65); + assertEquals(map.get("6.4"), 10.8); + assertEquals(map.get("0"), 5.4); + } + + @Test + public void testReadRaw() throws IOException + { + analyser.readRaw("test/jalview/util/"); + List> list = analyser.raw; + + assertEquals(list.get(0).get(0), 1.43); + assertNull(list.get(0).get(2)); + assertEquals(list.get(1).get(1), 1.2); + assertEquals(list.get(2).get(0), 5.6); + assertEquals(list.get(2).get(2), 6.8); + + } + + @Test(priority = 1) + public void testProcessData() throws IOException + { + analyser.keepRaw = true; + BufferedReader brFam = new BufferedReader(new FileReader( + "test/jalview/util/test_Fams_for_probability_analysis")); + BufferedReader brHMM = new BufferedReader(new FileReader( + "test/jalview/util/test_HMMs_for_probability_analysis")); + analyser.readStockholm(brFam); + analyser.readHMM(brHMM); + analyser.processData(6); + Map map = analyser.binned; + List> list = analyser.raw; + assertEquals(map.get("1.8"), 4.863, 0.001d); + assertEquals(map.get("3.4"), 2.65); + assertEquals(map.get("0"), 5.4); + assertEquals(map.get("6.4"), 10.8); + assertEquals(map.get("1.4"), 0.166667, 0.00001d); + assertEquals(map.get("4.4"), 0.5); + + } +} diff --git a/test/jalview/util/Raw.csv b/test/jalview/util/Raw.csv new file mode 100644 index 0000000..83d3452 --- /dev/null +++ b/test/jalview/util/Raw.csv @@ -0,0 +1,4 @@ +Seq1, Seq2, Seq3 +1.43, 2.34, 5.6, +EMPTY, 1.2, 0.05, +EMPTY, 5.4, 6.8, \ No newline at end of file diff --git a/test/jalview/util/test_Fams_for_probability_analysis b/test/jalview/util/test_Fams_for_probability_analysis new file mode 100644 index 0000000..74fbab0 --- /dev/null +++ b/test/jalview/util/test_Fams_for_probability_analysis @@ -0,0 +1,13 @@ +# STOCKHOLM 1.0 +seq1 AW +seq2 GW +seq3 AW +// +# STOCKHOLM 1.0 +seq1 ATW +seq2 ATI +// +# STOCKHOLM 1.0 +seq1 R-WW +seq2 RAWW +// \ No newline at end of file diff --git a/test/jalview/util/test_hmms_for_probability_analysis b/test/jalview/util/test_hmms_for_probability_analysis new file mode 100644 index 0000000..b70d42b --- /dev/null +++ b/test/jalview/util/test_hmms_for_probability_analysis @@ -0,0 +1,99 @@ +HMMER3/f [3.1b2 | February 2015] +NAME test1 +LENG 4 +ALPH amino +RF no +MM no +CONS yes +CS no +MAP yes +DATE Fri Jul 21 06:35:06 2017 +NSEQ 3 +EFFN 3.000000 +CKSUM 657102310 +STATS LOCAL MSV -5.0223 0.82341 +STATS LOCAL VITERBI -4.9569 0.82341 +STATS LOCAL FORWARD -2.0282 0.82341 +HMM A C D E F G H I K L M N P Q R S T V W Y + m->m m->i m->d i->m i->i d->m d->d + COMPO 1.94296 5.20658 4.78882 4.52987 4.66525 2.54188 5.19553 2.25221 4.08549 3.87133 5.00250 4.55734 4.73106 4.65220 2.77287 3.67799 1.53923 3.75384 1.48526 4.84023 + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01083 4.92694 5.64929 0.61958 0.77255 0.00000 * + 1 0.67027 4.79120 4.60974 4.51892 5.43734 1.28080 5.43621 4.90028 4.64310 4.61059 5.39837 4.28688 4.41468 4.80804 4.79047 3.08135 3.44468 4.10506 6.74908 5.67939 1 A - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01083 4.92694 5.64929 0.61958 0.77255 0.48576 0.95510 + 2 5.43405 6.34487 5.85697 5.84679 4.39288 5.10370 5.65594 5.70664 5.69821 4.87848 6.25251 5.89664 5.70261 6.00722 5.60902 5.64576 5.80049 5.59366 0.08910 4.36301 2 W - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01083 4.92694 5.64929 0.61958 0.77255 0.48576 0.95510 + 3 3.42384 5.23617 4.84601 4.77568 5.39247 4.01365 5.64153 4.72950 4.75585 4.52264 5.55782 4.69647 4.81267 5.08969 4.87301 3.64217 0.20934 4.25217 6.65833 5.63018 3 T - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01083 4.92694 5.64929 0.61958 0.77255 0.48576 0.95510 + 4 3.53954 5.09963 4.71395 4.06038 4.20429 4.44020 4.65482 0.90152 3.16536 2.96072 4.13056 4.31689 4.83725 3.95143 1.46549 3.86829 3.78084 2.85654 5.74911 4.54685 4 i - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00730 4.92341 * 0.61958 0.77255 0.00000 * +// +HMMER3/f [3.1b2 | February 2015] +NAME test2 +LENG 3 +ALPH amino +RF no +MM no +CONS yes +CS no +MAP yes +DATE Fri Jul 21 06:36:50 2017 +NSEQ 2 +EFFN 2.000000 +CKSUM 777554360 +STATS LOCAL MSV -5.2452 0.95763 +STATS LOCAL VITERBI -5.2886 0.95763 +STATS LOCAL FORWARD -1.5134 0.95763 +HMM A C D E F G H I K L M N P Q R S T V W Y + m->m m->i m->d i->m i->i d->m d->d + COMPO 1.33364 4.79082 4.44132 4.24796 3.91456 3.75718 4.85762 2.23342 4.16821 3.09137 4.29744 4.25088 4.41741 4.46803 4.31080 3.33397 1.39376 3.21010 2.54819 4.14914 + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01467 4.62483 5.34718 0.61958 0.77255 0.00000 * + 1 0.32372 4.76536 4.42980 4.32857 5.00499 3.55951 5.22620 4.27004 4.37081 4.10495 5.08789 4.22499 4.36948 4.63911 4.51684 3.12947 3.46009 3.76842 6.33337 5.25783 1 A - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01467 4.62483 5.34718 0.61958 0.77255 0.48576 0.95510 + 2 3.04414 4.87155 4.35068 4.21532 4.89213 3.66881 5.13994 4.14202 4.17893 3.96810 5.00600 4.23490 4.44590 4.53729 4.35178 3.25814 0.35496 3.73038 6.23308 5.12388 2 T - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01467 4.62483 5.34718 0.61958 0.77255 0.48576 0.95510 + 3 3.41901 4.77187 4.98694 4.49106 3.10447 4.49364 4.52024 1.21391 4.22709 2.30875 3.57865 4.53952 4.83367 4.43564 4.31127 3.88439 3.66452 2.61326 1.44329 3.34125 3 i - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 4.62006 * 0.61958 0.77255 0.00000 * +// +HMMER3/f [3.1b2 | February 2015] +NAME test3 +LENG 4 +ALPH amino +RF no +MM no +CONS yes +CS no +MAP yes +DATE Fri Jul 21 06:37:01 2017 +NSEQ 2 +EFFN 2.000000 +CKSUM 986955970 +STATS LOCAL MSV -5.4578 0.80004 +STATS LOCAL VITERBI -5.2499 0.80004 +STATS LOCAL FORWARD -2.1856 0.80004 +HMM A C D E F G H I K L M N P Q R S T V W Y + m->m m->i m->d i->m i->i d->m d->d + COMPO 2.16700 5.33023 4.57707 4.32329 4.15728 4.03215 4.83242 4.49728 3.73978 4.00181 5.18156 4.45520 4.63709 4.41734 1.53081 3.84281 4.10073 4.20172 0.82417 4.15750 + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01467 4.62483 5.34718 0.61958 0.77255 0.00000 * + 1 4.09153 5.75008 4.67229 4.09411 5.31638 4.34678 4.67762 4.97541 2.93879 4.35023 5.37643 4.37234 4.85576 3.90366 0.27042 4.17197 4.33362 4.67489 6.11461 5.14175 1 R - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.39762 4.62483 1.14482 0.61958 0.77255 0.48576 0.95510 + 2 0.58385 4.42717 3.89187 3.72118 4.47383 3.23815 4.69159 3.65968 3.74862 3.52210 4.52478 3.76053 4.01438 4.05655 3.96007 2.78076 3.08518 3.24526 5.86063 4.71068 2 A - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.02145 4.24866 4.97100 0.61958 0.77255 0.27360 1.42978 + 3 4.82318 5.87391 5.36844 5.28961 3.81117 4.70308 5.10523 4.98084 5.06729 4.21822 5.56037 5.33222 5.28501 5.40387 5.04111 5.02415 5.17266 4.88017 0.16601 3.78547 3 W - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.01467 4.62483 5.34718 0.61958 0.77255 0.48576 0.95510 + 4 4.82318 5.87391 5.36844 5.28961 3.81117 4.70308 5.10523 4.98084 5.06729 4.21822 5.56037 5.33222 5.28501 5.40387 5.04111 5.02415 5.17266 4.88017 0.16601 3.78547 4 W - - - + 2.68618 4.42225 2.77519 2.73123 3.46354 2.40513 3.72494 3.29354 2.67741 2.69355 4.24690 2.90347 2.73739 3.18146 2.89801 2.37887 2.77519 2.98518 4.58477 3.61503 + 0.00990 4.62006 * 0.61958 0.77255 0.00000 * +// \ No newline at end of file