From 70b2b6ad7d60388a11adc9b8a1f59ddc0fc03a31 Mon Sep 17 00:00:00 2001 From: pvtroshin Date: Tue, 21 Jun 2011 10:27:17 +0000 Subject: [PATCH] remove mafft extensions - we do not support them git-svn-id: link to svn.lifesci.dundee.ac.uk/svn/barton/ptroshin/JABA2@4287 e3abac25-378b-4346-85de-24260fe3988d --- binaries/src/mafft/extensions/Makefile | 34 - .../mafft/extensions/mxscarna_src/AlifoldMEA.cpp | 211 - .../src/mafft/extensions/mxscarna_src/AlifoldMEA.h | 63 - .../mafft/extensions/mxscarna_src/BPPMatrix.hpp | 130 - .../src/mafft/extensions/mxscarna_src/Beta.hpp | 201 - .../extensions/mxscarna_src/GlobalParameters.cpp | 27 - .../src/mafft/extensions/mxscarna_src/Globaldp.cpp | 557 - .../src/mafft/extensions/mxscarna_src/Globaldp.hpp | 109 - binaries/src/mafft/extensions/mxscarna_src/Main.cc | 1872 ---- .../src/mafft/extensions/mxscarna_src/Makefile | 76 - .../mafft/extensions/mxscarna_src/McCaskill.cpp | 839 -- .../mafft/extensions/mxscarna_src/McCaskill.hpp | 202 - binaries/src/mafft/extensions/mxscarna_src/README | 129 - .../mafft/extensions/mxscarna_src/ScoreType.hpp | 340 - .../extensions/mxscarna_src/StemCandidate.hpp | 129 - .../src/mafft/extensions/mxscarna_src/Util.hpp | 102 - .../src/mafft/extensions/mxscarna_src/config.h | 86 - .../src/mafft/extensions/mxscarna_src/nrutil.h | 991 -- .../src/mafft/extensions/mxscarna_src/params-weird | 10 - .../extensions/mxscarna_src/postProcessings.cpp | 91 - .../mxscarna_src/probconsRNA/CompareToRef.cc | 348 - .../extensions/mxscarna_src/probconsRNA/Defaults.h | 86 - .../mxscarna_src/probconsRNA/Defaults.h_backup | 57 - .../mxscarna_src/probconsRNA/EMtrainingALL.txt | 11 - .../mxscarna_src/probconsRNA/EvolutionaryTree.h | 200 - .../mxscarna_src/probconsRNA/FileBuffer.h | 104 - .../extensions/mxscarna_src/probconsRNA/FixRef.cc | 1000 -- .../extensions/mxscarna_src/probconsRNA/Main.cc | 1870 ---- .../mxscarna_src/probconsRNA/MakeGnuPlot.cc | 58 - .../extensions/mxscarna_src/probconsRNA/Makefile | 58 - .../mxscarna_src/probconsRNA/MultiSequence.h | 1120 -- .../mxscarna_src/probconsRNA/ProbabilisticModel.h | 1211 -- .../mxscarna_src/probconsRNA/ProjectPairwise.cc | 71 - .../extensions/mxscarna_src/probconsRNA/README | 107 - .../mxscarna_src/probconsRNA/SafeVector.h | 56 - .../mxscarna_src/probconsRNA/ScoreType.h | 340 - .../extensions/mxscarna_src/probconsRNA/Sequence.h | 515 - .../mxscarna_src/probconsRNA/SparseMatrix.h | 341 - .../extensions/mxscarna_src/probconsRNA/mlparams0 | 11 - .../mxscarna_src/probconsRNA/train-script | 30 - .../src/mafft/extensions/mxscarna_src/scarna.hpp | 124 - .../src/mafft/extensions/mxscarna_src/seq2scs.cpp | 620 -- .../mafft/extensions/mxscarna_src/vienna/COPYING | 15 - .../extensions/mxscarna_src/vienna/energy_const.h | 23 - .../extensions/mxscarna_src/vienna/energy_par.h | 61 - .../mxscarna_src/vienna/energy_param.cpp |11600 -------------------- .../mxscarna_src/vienna/energy_param.hpp | 111 - .../mafft/extensions/mxscarna_src/vienna/params.h | 32 - binaries/src/mafft/extensions/univscript.tmpl | 36 - 49 files changed, 26415 deletions(-) delete mode 100644 binaries/src/mafft/extensions/Makefile delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/AlifoldMEA.cpp delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/AlifoldMEA.h delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/BPPMatrix.hpp delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/Beta.hpp delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/GlobalParameters.cpp delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/Globaldp.cpp delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/Globaldp.hpp delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/Main.cc delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/Makefile delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/McCaskill.cpp delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/McCaskill.hpp delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/README delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/ScoreType.hpp delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/StemCandidate.hpp delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/Util.hpp delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/config.h delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/nrutil.h delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/params-weird delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/postProcessings.cpp delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/probconsRNA/CompareToRef.cc delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/probconsRNA/Defaults.h delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/probconsRNA/Defaults.h_backup delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/probconsRNA/EMtrainingALL.txt delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/probconsRNA/EvolutionaryTree.h delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/probconsRNA/FileBuffer.h delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/probconsRNA/FixRef.cc delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/probconsRNA/Main.cc delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/probconsRNA/MakeGnuPlot.cc delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/probconsRNA/Makefile delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/probconsRNA/MultiSequence.h delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/probconsRNA/ProbabilisticModel.h delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/probconsRNA/ProjectPairwise.cc delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/probconsRNA/README delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/probconsRNA/SafeVector.h delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/probconsRNA/ScoreType.h delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/probconsRNA/Sequence.h delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/probconsRNA/SparseMatrix.h delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/probconsRNA/mlparams0 delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/probconsRNA/train-script delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/scarna.hpp delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/seq2scs.cpp delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/vienna/COPYING delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/vienna/energy_const.h delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/vienna/energy_par.h delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/vienna/energy_param.cpp delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/vienna/energy_param.hpp delete mode 100644 binaries/src/mafft/extensions/mxscarna_src/vienna/params.h delete mode 100644 binaries/src/mafft/extensions/univscript.tmpl diff --git a/binaries/src/mafft/extensions/Makefile b/binaries/src/mafft/extensions/Makefile deleted file mode 100644 index 9cc6933..0000000 --- a/binaries/src/mafft/extensions/Makefile +++ /dev/null @@ -1,34 +0,0 @@ -PREFIX = /usr/local -LIBDIR = $(PREFIX)/libexec/mafft - -#MNO_CYGWIN = -mno-cygwin - -INSTALL = install - -PROGS = mxscarnamod -SCARNASRC = mxscarna_src/* mxscarna_src/*/* - -all : $(PROGS) - cp $(PROGS) ../binaries - chmod 755 ../binaries/* - @echo done. - -univscript: univscript.tmpl Makefile - sed "s:_PROGS:$(PROGS):" univscript.tmpl > univscript - - -mxscarnamod: $(SCARNASRC) - $(MAKE) CFLAGS1="$(MNO_CYGWIN)" -C mxscarna_src - mv mxscarna_src/mxscarna mxscarnamod - - -clean : - rm -f *.o *.a *.exe *~ $(PROGS) -# rm -f ../binaries/* ../scripts/* - $(MAKE) clean -C mxscarna_src - -install : all - mkdir -p $(LIBDIR) - chmod 755 $(LIBDIR) - chmod 755 $(PROGS) - $(INSTALL) $(PROGS) $(LIBDIR) diff --git a/binaries/src/mafft/extensions/mxscarna_src/AlifoldMEA.cpp b/binaries/src/mafft/extensions/mxscarna_src/AlifoldMEA.cpp deleted file mode 100644 index 340353f..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/AlifoldMEA.cpp +++ /dev/null @@ -1,211 +0,0 @@ -#include "AlifoldMEA.h" - -namespace MXSCARNA{ - -const int AlifoldMEA::TURN = 3; - -void -AlifoldMEA:: -Run() -{ - makeProfileBPPMatrix(alignment); - Initialization(); - DP(); - TraceBack(); -} - -void -AlifoldMEA:: -makeProfileBPPMatrix(const MultiSequence *Sequences) -{ - int length = Sequences->GetSequence(0)->GetLength(); - - Trimat *consBppMat = new Trimat(length + 1); - fill(consBppMat->begin(), consBppMat->end(), 0); - - for(int i = 1; i <= length; i++) - for (int j = i; j <= length; j++) - bppMat.ref(i, j) = 0; - - - int number = Sequences->GetNumSequences(); - for(int seqNum = 0; seqNum < number; seqNum++) { - SafeVector *tmpMap = Sequences->GetSequence(seqNum)->GetMappingNumber(); - int label = Sequences->GetSequence(seqNum)->GetLabel(); - BPPMatrix *tmpBppMatrix = BPPMatrices[label]; - - for(int i = 1; i <= length ; i++) { - int originI = tmpMap->at(i); - for(int j = i; j <= length; j++) { - int originJ = tmpMap->at(j); - if(originI != 0 && originJ != 0) { - float tmpProb = tmpBppMatrix->GetProb(originI, originJ); - bppMat.ref(i, j) += tmpProb; - } - } - } - } - - /* compute the mean of base pairing probability */ - for(int i = 1; i <= length; i++) { - for(int j = i; j <= length; j++) { - bppMat.ref(i,j) = bppMat.ref(i,j)/(float)number; - } - } - - for (int i = 1; i <= length; i++) { - float sum = 0; - for (int j = i; j <= length; j++) { - sum += bppMat.ref(i,j); - } - Qi[i] = 1 - sum; - } - - for (int i = 1; i <= length; i++) { - float sum = 0; - for (int j = i; j >= 1; j--) { - sum += bppMat.ref(j, i); - } - Qj[i] = 1 - sum; - } -} - -void -AlifoldMEA:: -Initialization() -{ - int length = alignment->GetSequence(0)->GetLength(); - - for (int i = 1; i <= length; i++) { - for (int j = i; j <= length; j++) { - M.ref(i,j) = 0; - traceI.ref(i,j) = 0; - traceJ.ref(i,j) = 0; - } - } - - for (int i = 1; i <= length; i++) { - M.ref(i,i) = Qi[i]; - traceI.ref(i,i) = 0; - traceJ.ref(i,i) = 0; - } - - for (int i = 1; i <= length - 1; i++) { - M.ref(i, i+1) = Qi[i+1]; - traceI.ref(i,i + 1) = 0; - traceJ.ref(i,i + 1) = 0; - } - - for (int i = 0; i <= length; i++) { - ssCons[i] = '.'; - } -} - -void -AlifoldMEA:: -DP() -{ - float g = BasePairConst; // see scarna.hpp - int length = alignment->GetSequence(0)->GetLength(); - - for (int i = length - 1; i >= 1; i--) { - for (int j = i + TURN + 1; j <= length; j++) { - float qi = Qi[i]; - float qj = Qj[j]; - float p = bppMat.ref(i,j); - - - float maxScore = qi + M.ref(i+1, j); - int tmpI = i+1; - int tmpJ = j; - - float tmpScore = qj + M.ref(i, j-1); - if (tmpScore > maxScore) { - maxScore = tmpScore; - tmpI = i; - tmpJ = j - 1; - } - - tmpScore = g*2*p + M.ref(i+1, j-1); - if (tmpScore > maxScore) { - maxScore = tmpScore; - tmpI = i + 1; - tmpJ = j - 1; - } - - for (int k = i + 1; k < j - 1; k++) { - tmpScore = M.ref(i,k) + M.ref(k+1,j); - if (tmpScore > maxScore) { - maxScore = tmpScore; - tmpI = i; - tmpJ = j; - } - } - M.ref(i,j) = maxScore; - traceI.ref(i, j) = tmpI; - traceJ.ref(i, j) = tmpJ; - } - } -} - -void -AlifoldMEA:: -TraceBack() -{ - - int length = alignment->GetSequence(0)->GetLength(); - SafeVector stackI((length + 1)*(length+1)); - SafeVector stackJ((length + 1)*(length+1)); - int pt = 0; - - stackI[pt] = traceI.ref(1, length); - stackJ[pt] = traceJ.ref(1, length); - ++pt; - - while(pt != 0) { - --pt; - int tmpI = stackI[pt]; - int tmpJ = stackJ[pt]; - int nextI = traceI.ref(tmpI, tmpJ); - int nextJ = traceJ.ref(tmpI, tmpJ); - - if (tmpI < tmpJ) { - if (tmpI + 1 == nextI && tmpJ == nextJ) { - stackI[pt] = nextI; - stackJ[pt] = nextJ; - ++pt; - } - else if (tmpI == nextI && tmpJ - 1 == nextJ) { - stackI[pt] = nextI; - stackJ[pt] = nextJ; - ++pt; - } - else if (tmpI + 1 == nextI && tmpJ - 1== nextJ) { - stackI[pt] = nextI; - stackJ[pt] = nextJ; - ++pt; - ssCons[tmpI] = '('; - ssCons[tmpJ] = ')'; - } - else if (tmpI == nextI && tmpJ == nextJ) { - float maxScore = IMPOSSIBLE; - int maxK = 0; - - for (int k = tmpI + 1; k < tmpJ - 1; k++) { - float tmpScore = M.ref(tmpI,k) + M.ref(k+1,tmpJ); - if (tmpScore > maxScore) { - maxScore = tmpScore; - maxK = k; - } - } - stackI[pt] = traceI.ref(tmpI, maxK); - stackJ[pt] = traceJ.ref(tmpI, maxK); - ++pt; - stackI[pt] = traceI.ref(maxK+1, tmpJ); - stackJ[pt] = traceJ.ref(maxK+1, tmpJ); - ++pt; - } - } - } -} -} diff --git a/binaries/src/mafft/extensions/mxscarna_src/AlifoldMEA.h b/binaries/src/mafft/extensions/mxscarna_src/AlifoldMEA.h deleted file mode 100644 index 02c06c5..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/AlifoldMEA.h +++ /dev/null @@ -1,63 +0,0 @@ -#ifndef _ALIFOLDMEA_H_ -#define _ALIFOLDMEA_H_ - -#include -#include -#include -#include "scarna.hpp" -#include "nrutil.h" -#include "Util.hpp" -#include "Beta.hpp" -#include "BPPMatrix.hpp" -#include "MultiSequence.h" -#include "Sequence.h" -#include "SafeVector.h" - -using namespace std; - -namespace MXSCARNA { -class AlifoldMEA { - MultiSequence *alignment; - SafeVector BPPMatrices; - float BasePairConst; - Trimat M; - Trimat traceI; - Trimat traceJ; - Trimat bppMat; - NRVec Qi; - NRVec Qj; - NRVec ssCons; - - static const int TURN; - - void Initialization(); - void makeProfileBPPMatrix(const MultiSequence *Sequences); - void DP(); - void TraceBack(); - public: - AlifoldMEA(MultiSequence *inalignment, SafeVector &inBPPMatrices, float inBasePairConst = 6) : - alignment(inalignment), BPPMatrices(inBPPMatrices), - BasePairConst(inBasePairConst), - M(inalignment->GetSequence(0)->GetLength()+1), - traceI(inalignment->GetSequence(0)->GetLength()+1), - traceJ(inalignment->GetSequence(0)->GetLength()+1), - bppMat(inalignment->GetSequence(0)->GetLength() + 1), - Qi(inalignment->GetSequence(0)->GetLength() + 1), - Qj(inalignment->GetSequence(0)->GetLength() + 1), - ssCons(inalignment->GetSequence(0)->GetLength() + 1){} - - void Run(); - - string *getSScons() { - string *sscons = new string(); - sscons->push_back(' '); - int length = alignment->GetSequence(0)->GetLength(); - for (int i = 1; i <= length; i++) { - sscons->push_back(ssCons[i]); - } - - return sscons; - } -}; -} -#endif // _ALIFOLDMEA_H_ diff --git a/binaries/src/mafft/extensions/mxscarna_src/BPPMatrix.hpp b/binaries/src/mafft/extensions/mxscarna_src/BPPMatrix.hpp deleted file mode 100644 index 1c16ed7..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/BPPMatrix.hpp +++ /dev/null @@ -1,130 +0,0 @@ -////////////////////////////////////////////////////////////// -// BPPMatrix.hpp -// -// save the Base Pairing Probability Matrix for each sequences -////////////////////////////////////////////////////////////// - -#ifndef __BBPMatrix_HPP__ -#define __BBPMatrix_HPP__ - -#include -#include -#include "SparseMatrix.h" -#include "McCaskill.hpp" -#include "nrutil.h" - - - -using namespace std; - -namespace MXSCARNA{ -class BPPMatrix { -private: - - int seqLength; // sequence length; - float cutOff; // the threshold of probability - - BPPMatrix() {} -public: - SparseMatrix bppMat; // base pairing probability matrix 1-origin(1..seqLength) - BPPMatrix(int bppmode, const string &seq, int seqLength, float inCutOff = 0.0001) : seqLength (seqLength), cutOff(inCutOff) { - if( bppmode == 'r' ) // by katoh - readBPPMatrix(seq); - else if( bppmode == 'w' ) - setandwriteBPPMatrix(seq); - else - setBPPMatrix(seq); - } - BPPMatrix(int seqLength, float inCutOff, const Trimat & tmpBppMat) : seqLength(seqLength), cutOff(inCutOff) { - bppMat.SetSparseMatrix(seqLength, seqLength, tmpBppMat, cutOff); - } - - - void setBPPMatrix(const string &seq) { - const char *tmpSeq = seq.c_str(); - McCaskill mc(seqLength, &tmpSeq[1]); - mc.calcPartitionFunction(); - Trimat tmpBppMat(seqLength + 1); - - for (int i = 0; i < seqLength; i++) { - for(int j = i; j < seqLength; j++) { - tmpBppMat.ref(i+1, j+1) = mc.getProb(i,j); - } - } - bppMat.SetSparseMatrix(seqLength, seqLength, tmpBppMat, cutOff); - } - - void setandwriteBPPMatrix(const string &seq) { // by katoh - const char *tmpSeq = seq.c_str(); - McCaskill mc(seqLength, &tmpSeq[1]); - mc.calcPartitionFunction(); - Trimat tmpBppMat(seqLength + 1); - float tmpbp; - - fprintf( stdout, ">\n" ); - for (int i = 0; i < seqLength; i++) { - for(int j = i; j < seqLength; j++) { - tmpbp = mc.getProb(i,j); - if (tmpbp > 0.0001) - fprintf( stdout, "%d %d %50.40f\n", i, j, tmpbp ); - tmpBppMat.ref(i+1, j+1) = tmpbp; - } - } - bppMat.SetSparseMatrix(seqLength, seqLength, tmpBppMat, cutOff); - } - - void readBPPMatrix(const string &seq) { // by katoh - const char *tmpSeq = seq.c_str(); - char oneline[1000]; - int onechar; - float prob; - int posi, posj; - static FILE *bppfp = NULL; - - - if( bppfp == NULL ) - { - bppfp = fopen( "_bpp", "r" ); - if( bppfp == NULL ) - { - fprintf( stderr, "Cannot open _bpp.\n" ); - exit( 1 ); - } - } - - Trimat tmpBppMat(seqLength + 1); - fgets( oneline, 999, bppfp ); - if( oneline[0] != '>' ) - { - fprintf( stderr, "Format error\n" ); - exit( 1 ); - } - while( 1 ) - { - onechar = getc( bppfp ); - ungetc( onechar, bppfp ); - if( onechar == '>' || onechar == EOF ) break; - - fgets( oneline, 999, bppfp ); - sscanf( oneline, "%d %d %f", &posi, &posj, &prob ); -// fprintf( stderr, "%d %d -> %f\n", posi, posj, prob ); - tmpBppMat.ref(posi+1, posj+1) = prob; - } - - bppMat.SetSparseMatrix(seqLength, seqLength, tmpBppMat, cutOff); - } - - float GetProb(int i, int j) { - return bppMat.GetValue(i,j); - } - - float GetLength() const { - return seqLength; - } - - void updateBPPMatrix(const Trimat &inbppMat) { - bppMat.SetSparseMatrix(seqLength, seqLength, inbppMat, cutOff); - } -}; -} -#endif // __BPPMatrix_HPP__ diff --git a/binaries/src/mafft/extensions/mxscarna_src/Beta.hpp b/binaries/src/mafft/extensions/mxscarna_src/Beta.hpp deleted file mode 100644 index f1e77a4..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/Beta.hpp +++ /dev/null @@ -1,201 +0,0 @@ -/* - * - * Beta.hpp - * - */ -#ifndef BETA_HPP -#define BETA_HPP -using namespace std; - -struct Beta { - static const int NBASE = 4;// A, C, G, U - static const int NBASEG = (NBASE + 1); // A, C, G, U, Gap - static const int NBASENG = (NBASE + 2); // A, C, G, U, N, Gap - static const int NPBASE = (NBASE * NBASE); - static const int NPBASEG = (NBASEG * NBASEG); - static const int NPBASENG = (NBASENG * NBASENG); - static const int NCODE = 7; - static const int BASEBIT = 2; - static const int BASEMSK = ~(~0 << BASEBIT); - enum BaseCode { - A_CODE = 0, - C_CODE = 1, - G_CODE = 2, - U_CODE = 3, - N_CODE = 4, - GAP_CODE = 5, - INVALID_CODE = 16 - }; - enum PairCode { - AA_CODE = 0, AC_CODE = 1, AG_CODE = 2, AU_CODE = 3, - CA_CODE = 4, CC_CODE = 5, CG_CODE = 6, CU_CODE = 7, - GA_CODE = 8, GC_CODE = 9, GG_CODE = 10, GU_CODE = 11, - UA_CODE = 12, UC_CODE = 13, UG_CODE = 14, UU_CODE = 15, - INVALID_PAIR_CODE = 16 - }; - enum ReducedPairCode { - REDUCED_NPBASE = 7, - REDUCED_AU_CODE = 0, - REDUCED_CG_CODE = 1, - REDUCED_GC_CODE = 2, - REDUCED_GU_CODE = 3, - REDUCED_UA_CODE = 4, - REDUCED_UG_CODE = 5, - REDUCED_MM_CODE = 6, - REDUCED_INVALID_PAIR_CODE = 16 - }; - - static const int N_CANONICAL = 6; - static const int canonicalPairs[N_CANONICAL]; - static const int N_NON_CANONICAL = 10; - static const int nonCanonicalPairs[N_NON_CANONICAL]; - static const int i2nt[NCODE]; - static const int nt2i[256]; - static const bool isCanonicalBasePair[NPBASE]; - - static bool IsValidCode(const int& c) {return A_CODE <= c && c <= GAP_CODE;} - static bool IsBaseCode(const int& c) {return (A_CODE <= c && c <= U_CODE);} - static bool IsBasePairCode(const int& c){return (AA_CODE <= c && c <= UU_CODE);} - static bool IsReducedBasePairCode(const int& c) { - return (REDUCED_AU_CODE <= c && c <= REDUCED_MM_CODE); - } - static bool IsAmbiguousCode(const int& c) {return c == N_CODE;} - static bool IsGapCode(const int& c) {return c == GAP_CODE;} - static bool IsValidChar(const unsigned char& c) { - return IsValidCode(nt2i[c]); - } - static bool IsBaseChar(const int& c) {return IsBaseCode(nt2i[c]);} - static bool IsAmbiguousChar(const int& c) {return IsAmbiguousCode(nt2i[c]);} - static bool IsGapChar(const int& c) {return IsGapCode(nt2i[c]);} - static int nt2code(const int& nt) { - if (0 <= nt && nt < 256) { - return nt2i[nt]; - } else { - return INVALID_CODE; - } - } - static int getPairCode(const int& c, const int& c1) { - return (IsBaseCode(c) && IsBaseCode(c1) - ? ((c << BASEBIT) | c1) - : INVALID_PAIR_CODE); - } - static bool isValidPairCode(const int& pairCode) { - return (0 <= pairCode && pairCode < NPBASE); - } - static void pair2Bases(const int& pairCode, int& c, int& c1) { - //Assert(IsBasePairCode(pairCode)); - c1 = pairCode & BASEMSK; - c = (pairCode >> BASEBIT) & BASEMSK; - } - static int getReducedPairCode(const int& c, const int& c1) { - return reducePairCode(getPairCode(c, c1)); - } - static int reducePairCode(const int& pairCode) { - static const int table[NPBASE] = { - REDUCED_MM_CODE, REDUCED_MM_CODE, REDUCED_MM_CODE, REDUCED_AU_CODE, - REDUCED_MM_CODE, REDUCED_MM_CODE, REDUCED_CG_CODE, REDUCED_MM_CODE, - REDUCED_MM_CODE, REDUCED_GC_CODE, REDUCED_MM_CODE, REDUCED_GU_CODE, - REDUCED_UA_CODE, REDUCED_MM_CODE, REDUCED_UG_CODE, REDUCED_MM_CODE, - }; - return (IsBasePairCode(pairCode) - ? table[pairCode] - : REDUCED_INVALID_PAIR_CODE); - } - static bool isValidReducedPairCode(const int& pairCode) { - return (0 <= pairCode && pairCode < REDUCED_NPBASE); - } - static bool isCanonicalReducedPairCode(const int& pairCode) { - return (REDUCED_AU_CODE <= pairCode - && pairCode <= REDUCED_UG_CODE); - } - static int flipReducedPairCode(const int& reducedPairCode) { - static const int table[REDUCED_NPBASE + 1] = { - REDUCED_UA_CODE, - REDUCED_GC_CODE, - REDUCED_CG_CODE, - REDUCED_UG_CODE, - REDUCED_AU_CODE, - REDUCED_GU_CODE, - REDUCED_MM_CODE, - REDUCED_INVALID_PAIR_CODE - }; - return (IsReducedBasePairCode(reducedPairCode) - ? table[reducedPairCode] : table[REDUCED_NPBASE]); - } - static void seq2i(char* s, const char* t, int len) { - const char* const s_end = s + len; - while (s < s_end) *s++ = nt2i[(unsigned) (*t++)]; - } - static void i2seq(char* s, const char* t, int len) { - const char* const s_end = s + len; - while (s < s_end) *s++ = i2nt[(unsigned) (*t++)]; - } - static void i2seq(ostream& fo, const char* t, int len) { - const char* const t_end = t + len; - while (t < t_end) fo << (char) i2nt[(unsigned) (*t++)]; - } - static char* wd2str(unsigned int wdSize, unsigned int wd) { - const unsigned int MAX_WD_SIZE = (sizeof(unsigned int) * 8 / BASEBIT); - static char buf[MAX_WD_SIZE + 1] = {}; - //Assert(wdSize <= MAX_WD_SIZE); - - char* s = buf + wdSize; - *s = '\0'; - do { - *(--s) = Beta::i2nt[wd & BASEMSK]; - wd >>= BASEBIT; - } while (s > buf); - return buf; - } - static void printWd(ostream& fo, unsigned int wdSize, unsigned int wd) { - fo << wd2str(wdSize, wd); - } - static const char* code2str(const int& code) { - static const char table[NBASENG+1][2] = { - "A", "C", "G", "U", "N", ".", "?" - }; - return ((A_CODE <= code && code <= GAP_CODE) - ? table[code] : table[NBASENG]); - } - static const char* pairCode2str(const int& pairCode) { - static const char table[NPBASE+1][3] = { - "AA", "AC", "AG", "AU", - "CA", "CC", "CG", "CU", - "GA", "GC", "GG", "GU", - "UA", "UC", "UG", "UU", - "??" - }; - return (IsBasePairCode(pairCode) ? table[pairCode] : table[NPBASE]); - } - static const char* reducedPairCode2str(const int& reducedPairCode) { - static const char table[REDUCED_NPBASE+1][3] = { - "AU", "CG", "GC", "GU", "UA", "UG", "MM", "??" - }; - return (IsReducedBasePairCode(reducedPairCode) - ? table[reducedPairCode] : table[REDUCED_NPBASE]); - } - static char nt2Code(const char& c){ - if (!IsValidChar(c)) { cerr << "character " << c << " is not valid"; } - - return (char) nt2i[(int) c]; - } - static char code2char(const int& c) { - static const char table[NBASENG+1] = { - 'A', 'C', 'G', 'U', 'N', '.', '?' - }; - return ((A_CODE <= c && c <= GAP_CODE) - ? table[(int) c] : table[NBASENG]); - } - /* - static string generateRandomRNA(const int& len) { - static const char nt[5] = "ACGU"; - string rna(len, '\0'); - for (int i = 0; i < len; i++) { - rna[i] = nt[Rand(4)]; - } - return rna; - } - */ -}; - -#endif diff --git a/binaries/src/mafft/extensions/mxscarna_src/GlobalParameters.cpp b/binaries/src/mafft/extensions/mxscarna_src/GlobalParameters.cpp deleted file mode 100644 index 4d32c8e..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/GlobalParameters.cpp +++ /dev/null @@ -1,27 +0,0 @@ -////////////////////////////////////////////////////////////// -// GlobalParameters.cpp -// This file include Global Parameters, command line options, etc. -////////////////////////////////////////////////////////////// - -#include "scarna.hpp" - -// These paramenters are defined in scarna.hpp - -float RNA_Match_AA = RNAMATCHAA; -float RNA_Match_AT = RNAMATCHAT; -float RNA_Match_AG = RNAMATCHAG; -float RNA_Match_AC = RNAMATCHAC; -float RNA_Match_TT = RNAMATCHTT; -float RNA_Match_TG = RNAMATCHTG; -float RNA_Match_TC = RNAMATCHTC; -float RNA_Match_GG = RNAMATCHGG; -float RNA_Match_GC = RNAMATCHGC; -float RNA_Match_CC = RNAMATCHCC; -float RNA_Gap_Penalty = GAPPENALTY; -float RNA_Gap_Extension = GAPEXTENTIONPENALTY; - -int numIterativeRefinementReps = REFINEMENTREPS; -bool PostProcessAlignment = false; -int scsLength = SCSLENGTH; -float BaseProbThreshold = BASEPROBTHRESHOLD; -float BasePairConst = BASEPAIRCONST; diff --git a/binaries/src/mafft/extensions/mxscarna_src/Globaldp.cpp b/binaries/src/mafft/extensions/mxscarna_src/Globaldp.cpp deleted file mode 100644 index daabff4..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/Globaldp.cpp +++ /dev/null @@ -1,557 +0,0 @@ -#include "Globaldp.hpp" - -namespace MXSCARNA { - -double Globaldp::ribosum_matrix[16][16] -= { { -2.49, -7.04, -8.24, -4.32, -8.84, -14.37, -4.68, -12.64, -6.86, -5.03, -8.39, -5.84, -4.01, -11.32, -6.16, -9.05 }, - { -7.04, -2.11, -8.89, -2.04, -9.37, -9.08, -5.86, -10.45, -9.73, -3.81, -11.05, -4.72, -5.33, -8.67, -6.93, -7.83 }, - { -8.24, -8.89, -0.80, -5.13, -10.41, -14.53, -4.57, -10.14, -8.61, -5.77, -5.38, -6.60, -5.43, -8.87, -5.94, -11.07 }, - { -4.32, -2.04, -5.13, 4.49, -5.56, -6.71, 1.67, -5.17, -5.33, 2.70, -5.61, 0.59, 1.61, -4.81, -0.51, -2.98 }, - { -8.84, -9.37, -10.41, -5.56, -5.13, -10.45, -3.57, -8.49, -7.98, -5.95, -11.36, -7.93, -2.42, -7.08, -5.63, -8.39 }, - { -14.37, -9.08, -14.53, -6.71, -10.45, -3.59, -5.71, -5.77, -12.43, -3.70, -12.58, -7.88, -6.88, -7.40, -8.41, -5.41 }, - { -4.68, -5.86, -4.57, 1.67, -3.57, -5.71, 5.36, -4.96, -6.00, 2.11, -4.66, -0.27, 2.75, -4.91, 1.32, -3.67 }, - { -12.64, -10.45, -10.14, -5.17, -8.49, -5.77, -4.96, -2.28, -7.71, -5.84, -13.69, -5.61, -4.72, -3.83, -7.36, -5.21 }, - { -6.86, -9.73, -8.61, -5.33, -7.98, -12.43, -6.00, -7.71, -1.05, -4.88, -8.67, -6.10, -5.85, -6.63, -7.55, -11.54 }, - { -5.03, -3.81, -5.77, 2.70, -5.95, -3.70, 2.11, -5.84, -4.88, 5.62, -4.13, 1.21, 1.60, -4.49, -0.08, -3.90 }, - { -8.39, -11.05, -5.38, -5.61, -11.36, -12.58, -4.66, -13.69, -8.67, -4.13, -1.98, -5.77, -5.75, -12.01, -4.27, -10.79 }, - { -5.84, -4.72, -6.60, 0.59, -7.93, -7.88, -0.27, -5.61, -6.10, 1.21, -5.77, 3.47, -0.57, -5.30, -2.09, -4.45 }, - { -4.01, -5.33, -5.43, 1.61, -2.42, -6.88, 2.75, -4.72, -5.85, 1.60, -5.75, -0.57, 4.97, -2.98, 1.14, -3.39 }, - { -11.32, -8.67, -8.87, -4.81, -7.08, -7.40, -4.91, -3.83, -6.63, -4.49, -12.01, -5.30, -2.98, -3.21, -4.76, -5.97 }, - { -6.16, -6.93, -5.94, -0.51, -5.63, -8.41, 1.32, -7.36, -7.55, -0.08, -4.27, -2.09, 1.14, -4.76, 3.36, -4.28 }, - { -9.05, -7.83, -11.07, -2.98, -8.39, -5.41, -3.67, -5.21, -11.54, -3.90, -10.79, -4.45, -3.39, -5.97, -4.28, -0.02 } -}; - - -Trimat* -Globaldp:: -makeProfileBPPMatrix(const MultiSequence *Sequences) -{ - int length = Sequences->GetSequence(0)->GetLength(); - float thr = THR; - Trimat *consBppMat = new Trimat(length + 1); - fill(consBppMat->begin(), consBppMat->end(), 0); - - int number = Sequences->GetNumSequences(); - for(int seqNum = 0; seqNum < number; seqNum++) { - SafeVector *tmpMap = Sequences->GetSequence(seqNum)->GetMappingNumber(); - int label = Sequences->GetSequence(seqNum)->GetLabel(); - BPPMatrix *tmpBppMatrix = BPPMatrices[label]; - - for(int i = 1; i <= length ; i++) { - int originI = tmpMap->at(i); - for(int j = i; j <= length; j++) { - int originJ = tmpMap->at(j); - if(originI != 0 && originJ != 0) { - float tmpProb = tmpBppMatrix->GetProb(originI, originJ); - - if(tmpProb >= thr) { - consBppMat->ref(i, j) += tmpProb; - } - } - } - } - } - - /* compute the mean of base pairing probability */ - for(int i = 1; i <= length; i++) { - for(int j = i; j <= length; j++) { - consBppMat->ref(i,j) = consBppMat->ref(i,j)/(float)number; - } - } - - return consBppMat; -} - -float -Globaldp:: -incrementalScorePSCPair(const StemCandidate &sc1, const StemCandidate &sc2) -{ - int wordLength = WORDLENGTH; - - int pos1, rvpos1; - if (sc1.GetDistance() > 0) { - pos1 = sc1.GetPosition(); - rvpos1 = sc1.GetRvposition(); - } - else { - pos1 = sc1.GetRvposition(); - rvpos1 = sc1.GetPosition(); - } - - int pos2, rvpos2; - if (sc2.GetDistance() > 0) { - pos2 = sc2.GetPosition(); - rvpos2 = sc2.GetRvposition(); - } - else { - pos2 = sc2.GetRvposition(); - rvpos2 = sc2.GetPosition(); - } -/* - cout << "1:" << i << " " << j << " " << sc1.GetDistance() << " " << sc2.GetDistance() << endl; - cout << sc1.GetPosition() << " " << sc1.GetRvposition() << " " << sc2.GetPosition() << " " << sc2.GetRvposition() << endl; -*/ - float score = - posterior[sc1.GetPosition() + wordLength - 1][sc2.GetPosition() + wordLength - 1] -// * sc1.GetBaseScore(wordLength - 1) - * profileBPPMat1->ref(pos1 + wordLength - 1, rvpos1) - * posterior[sc1.GetRvposition()][sc2.GetRvposition()] -// * sc2.GetBaseScore(wordLength - 1); - * profileBPPMat2->ref(pos2 + wordLength - 1, rvpos2); - - -/* - incrementalWordSimilarity(sc1, sc2, i, j) - + incrementalProbabilityScore(sc1, sc2) * multiDeltaScore - + incrementalStackingScore(sc1, sc2) * multiDeltaStacking; -*/ - - return score*sc1.GetNumSeq()*sc2.GetNumSeq(); -} - -float -Globaldp:: -incrementalProbabilityScore(const StemCandidate &sc1, const StemCandidate &sc2) -{ - int wordLength = WORDLENGTH; - return sc1.GetBaseScore(wordLength-1) + sc2.GetBaseScore(wordLength-1); -} - -float -Globaldp:: -incrementalStackingScore(const StemCandidate &sc1, const StemCandidate &sc2) -{ - return - (sc1.GetStacking() + sc2.GetStacking()); -} - -float -Globaldp:: -incrementalWordSimilarity(const StemCandidate &sc1, const StemCandidate &sc2, int i, int j) -{ - int numSeq1 = sc1.GetNumSeq(); - int numSeq2 = sc2.GetNumSeq(); - - float score = 0; - - for(int k = 0; k < 16; k++) { - for(int l = 0; l < 16; l++) { - score += countContConp1[k][i]*countContConp2[l][j]*ribosum_matrix[k][l]; - } - } - - return score/(numSeq1*numSeq2); -} - -float -Globaldp:: -scorePSCPair(const StemCandidate &sc1, const StemCandidate &sc2) -{ - - - int wordLength = WORDLENGTH; - float score = 0; - - int pos1, rvpos1; - if (sc1.GetDistance() > 0) { - pos1 = sc1.GetPosition(); - rvpos1 = sc1.GetRvposition(); - } - else { - pos1 = sc1.GetRvposition(); - rvpos1 = sc1.GetPosition(); - } - - int pos2, rvpos2; - if (sc2.GetDistance() > 0) { - pos2 = sc2.GetPosition(); - rvpos2 = sc2.GetRvposition(); - } - else { - pos2 = sc2.GetRvposition(); - rvpos2 = sc2.GetPosition(); - } - - for (int k = 0; k < wordLength; k++) { - score += - posterior[sc1.GetPosition() + k][sc2.GetPosition() + k] - * profileBPPMat1->ref(pos1 + k, rvpos1 + wordLength - 1 - k) -// * sc1.GetBaseScore(k) - * posterior[sc1.GetRvposition() + wordLength - 1 - k][sc2.GetRvposition() + wordLength - 1 - k] -// * sc2.GetBaseScore(k); - * profileBPPMat2->ref(pos2 + k, rvpos2 + wordLength - 1 - k); - } - // validation code - /* - if (profileBPPMat1->ref(pos1 , rvpos1 + wordLength - 1) != sc1.GetBaseScore(0)) { - cout << "1 " << profileBPPMat1->ref(pos1, rvpos1 + wordLength - 1) << " " << sc1.GetBaseScore(0) << endl; - } - if (profileBPPMat2->ref(pos2, rvpos2 + wordLength - 1) != sc2.GetBaseScore(0)) { - cout << profileBPPMat2->ref(pos2, rvpos2 + wordLength - 1) << " " << sc2.GetBaseScore(0) << endl; - } - if (profileBPPMat1->ref(pos1 + 1, rvpos1 + wordLength - 1 - 1) != sc1.GetBaseScore(1)) { - cout << "1 " << profileBPPMat1->ref(pos1 + 1, rvpos1 + wordLength - 1 - 1) << " " << sc1.GetBaseScore(1) << endl; - } - if (profileBPPMat2->ref(pos2 + 1, rvpos2 + wordLength - 1 - 1) != sc2.GetBaseScore(1)) { - cout << profileBPPMat2->ref(pos2 + 1, rvpos2 + wordLength - 1 - 1) << " " << sc2.GetBaseScore(1) << endl; - }*/ - -// cout << sc1.GetPosition() << " " << sc1.GetRvposition() << " " << sc1.GetDistance() << endl; -// cout << sc2.GetPosition() << " " << sc2.GetRvposition() << " " << sc2.GetDistance() << endl; -/* - wordSimilarity(sc1, sc2, i, j) - + probabilityScore(sc1, sc2) * multiScore - + stackingScore(sc1, sc2) * multiStacking - -*/ -/* - if (sc1.GetDistance() < 0 && sc2.GetDistance() < 0) { - cout << "2:" << i << " " << j << " " << sc1.GetDistance() << " " << sc2.GetDistance() << endl; - cout << sc1.GetPosition() << " " << sc1.GetRvposition() << " " << sc2.GetPosition() << " " << sc2.GetRvposition() << endl; - cout << "2:score" << score << endl; - - } -*/ - return score*sc1.GetNumSeq()*sc2.GetNumSeq(); -} - -float -Globaldp:: -wordSimilarity(const StemCandidate &sc1, const StemCandidate &sc2, int i, int j) -{ - int wordLength = WORDLENGTH; - - int numSeq1 = sc1.GetNumSeq(); - int numSeq2 = sc2.GetNumSeq(); - - float score = 0; - - for(int k = 0; k < 16; k++) { - for(int l = 0; l < 16; l++) { - for(int iter = 0; iter < wordLength; iter++) { - score += countConp1[iter][k][i]*countConp2[iter][l][j]*ribosum_matrix[k][l]; - } - } - } - - return score/(numSeq1*numSeq2); -} - -int -Globaldp:: -returnBasePairType(char s, char r) -{ - if (s == 'A') { - if (r == 'A') return 0; - else if (r == 'C') return 1; - else if (r == 'G') return 2; - else if (r == 'U') return 3; - } - else if (s == 'C') { - if (r == 'A') return 4; - else if (r == 'C') return 5; - else if (r == 'G') return 6; - else if (r == 'U') return 7; - } - else if (s == 'G') { - if (r == 'A') return 8; - else if (r == 'C') return 9; - else if (r == 'G') return 10; - else if (r == 'U') return 11; - } - else if (s == 'U') { - if (r == 'A') return 12; - else if (r == 'C') return 13; - else if (r == 'G') return 14; - else if (r == 'U') return 15; - } - - return 16; -} - -float -Globaldp:: -probabilityScore(const StemCandidate &sc1, const StemCandidate &sc2) -{ - return sc1.GetScore() + sc2.GetScore(); -} - -float -Globaldp:: -stackingScore(const StemCandidate &sc1, const StemCandidate &sc2) -{ - return - (sc1.GetStemStacking() + sc2.GetStemStacking()); -} - -float -Globaldp:: -distancePenalty(const StemCandidate &sc1, const StemCandidate &sc2) -{ - return std::sqrt((float)std::abs(sc1.GetDistance() - sc2.GetDistance())); -} - -float -Globaldp:: -Run() -{ - Initialize(); - DP(); - float score = traceBack(); - - // printMatch(); - //cout << "score=" << score << endl; - return score; -} - -void -Globaldp:: -Initialize() -{ - int nPscs1 = pscs1->size(); - int nPscs2 = pscs2->size(); - - - for(int i = 0; i < nPscs1; i++) { - for(int j = 0; j < nPscs2; j++) { - VM[i][j] = 0; - VG[i][j] = 0; - } - } - - VM[0][0] = 0; - VG[0][0] = IMPOSSIBLE; - - for (int i = 1; i < nPscs1; i++) { - VM[i][0] = IMPOSSIBLE; VG[i][0] = 0; - } - for (int j = 1; j < nPscs2; j++) { - VM[0][j] = IMPOSSIBLE; VG[0][j] = 0; - } - - for (int i = 0; i < nPscs1; i++) { - for (int j = 0; j < nPscs2; j++) { - traceMI[i][j] = 0; traceMJ[i][j] = 0; - traceGI[i][j] = 0; traceGJ[i][j] = 0; - } - } - - int wordLength = WORDLENGTH; - int size1 = pscs1->size(); - int size2 = pscs2->size(); - - for(int i = 0; i < wordLength; i++) { - for(int j = 0; j < 17; j++) { - for(int k = 0; k < (int)pscs1->size(); k++) { - countConp1[i][j][k] = 0; - } - } - } - for(int i = 0; i < wordLength; i++) { - for(int j = 0; j < 17; j++) { - for(int k = 0; k < (int)pscs2->size(); k++) { - countConp2[i][j][k] = 0; - } - } - } - for(int i = 0; i < 17; i++) { - for(int j = 0; j < (int)pscs1->size()+1; j++) { - countContConp1[i][j] = 0; - } - } - for(int i = 0; i < 17; i++) { - for(int j = 0; j < (int)pscs2->size()+1; j++) { - countContConp2[i][j] = 0; - } - } - - for(int iter = 1; iter < size1; iter++) { - - const StemCandidate &sc1 = pscs1->at(iter); - int numSeq1 = sc1.GetNumSeq(); - for (int i = 0; i < wordLength; i++) { - - for(int k = 0; k < numSeq1; k++) { -// const Sequence *seq = seqs1->GetSequence(k); - string substr = sc1.GetSubstr(k); - string rvstr = sc1.GetRvstr(k); - - char sChar = substr[i]; - char rChar = rvstr[wordLength - 1 -i]; - - int type = returnBasePairType(sChar, rChar); - ++countConp1[i][type][iter]; - } - } - for(int k = 0; k < numSeq1; k++) { -// const Sequence *seq = seqs1->GetSequence(k); - string substr = sc1.GetSubstr(k); - string rvstr = sc1.GetRvstr(k); - - char sChar = substr[wordLength-1]; - char rChar = rvstr[0]; - - int type = returnBasePairType(sChar, rChar); - ++countContConp1[type][iter]; - - } - } - for(int iter = 1; iter < size2; iter++) { - const StemCandidate &sc2 = pscs2->at(iter); - int numSeq2 = sc2.GetNumSeq(); - for (int i = 0; i < wordLength; i++) { - - for(int k = 0; k < numSeq2; k++) { -// const Sequence *seq = seqs2->GetSequence(k); - string substr = sc2.GetSubstr(k); - string rvstr = sc2.GetRvstr(k); - - char sChar = substr[i]; - char rChar = rvstr[wordLength - 1 -i]; - - int type = returnBasePairType(sChar, rChar); - ++countConp2[i][type][iter]; - } - } - for(int k = 0; k < numSeq2; k++) { -// const Sequence *seq = seqs2->GetSequence(k); - string substr = sc2.GetSubstr(k); - string rvstr = sc2.GetRvstr(k); - - char sChar = substr[wordLength-1]; - char rChar = rvstr[0]; - - int type = returnBasePairType(sChar, rChar); - ++countContConp2[type][iter]; - - } - } - profileBPPMat1 = makeProfileBPPMatrix(seqs1); - profileBPPMat2 = makeProfileBPPMatrix(seqs2); -} - -void -Globaldp:: -DP() -{ - int nPscs1 = pscs1->size(); - int nPscs2 = pscs2->size(); - - for(int i = 1; i < nPscs1; i++) { - const StemCandidate &sc1 = pscs1->at(i); - - for(int j = 1; j < nPscs2; j++) { - const StemCandidate &sc2 = pscs2->at(j); - - float max = IMPOSSIBLE; - int traceI = 0; - int traceJ = 0; - int alpha = sc1.GetContPos(), beta = sc2.GetContPos(); - if( (alpha > 0) && (beta > 0) ) { - max = VM[alpha][beta] + incrementalScorePSCPair(sc1, sc2); - traceI = alpha; - traceJ = beta; - } - - float similarity = scorePSCPair(sc1, sc2); - int p = sc1.GetBeforePos(), q = sc2.GetBeforePos(); - float tmpScore = VM[p][q] + similarity; -// cout << i << " " << j << " " << p << " " << q << " " << tmpScore << " " << VM[p][q] << " " << similarity << " " << endl; - - if(max <= tmpScore) { - max = tmpScore; - traceI = p; - traceJ = q; - } - - tmpScore = VG[p][q] + similarity; - if(max <= tmpScore) { - max = tmpScore; - traceI = traceGI[p][q]; - traceJ = traceGJ[p][q]; - } - - VM[i][j] = max; - traceMI[i][j] = traceI; - traceMJ[i][j] = traceJ; - - max = VM[i][j-1]; - traceI = i; - traceJ = j-1; - - tmpScore = VM[i-1][j]; - if(max <= tmpScore) { - max = tmpScore; - traceI = i-1; - traceJ = j; - } - - tmpScore = VG[i-1][j]; - if(max <= tmpScore) { - max = tmpScore; - traceI = traceGI[i-1][j]; - traceJ = traceGJ[i-1][j]; - } - - tmpScore = VG[i][j-1]; - if(max <= tmpScore) { - max = tmpScore; - traceI = traceGI[i][j-1]; - traceJ = traceGJ[i][j-1]; - } - - VG[i][j] = max; - traceGI[i][j] = traceI; - traceGJ[i][j] = traceJ; - } - } -} - -float -Globaldp:: -traceBack() -{ - int nPscs1 = pscs1->size(); - int nPscs2 = pscs2->size(); - - float max = IMPOSSIBLE; - int traceI, traceJ; - for (int i = 1; i < nPscs1; i++) { - for (int j = 1; j < nPscs2; j++) { - if(max < VM[i][j]) { - max = VM[i][j]; - traceI = i; - traceJ = j; - } - } - } - - while ( (traceI != 0) && (traceJ != 0) ) { - matchPSCS1->push_back(traceI); matchPSCS2->push_back(traceJ); - int tmpI = traceMI[traceI][traceJ]; - int tmpJ = traceMJ[traceI][traceJ]; - traceI = tmpI; traceJ = tmpJ; - } - - if(traceI != 0 && traceJ != 0) { - std::cout << "error in trace back of pscs:" << traceI << " " << traceJ << endl; - } - - return max; -} - -void -Globaldp:: -printMatch() -{ - int size = matchPSCS1->size(); - for(int iter = 0; iter < size; iter++) { - int i = matchPSCS1->at(iter); - int j = matchPSCS2->at(iter); - - const StemCandidate &sc1 = pscs1->at(i); - const StemCandidate &sc2 = pscs2->at(j); - - std::cout << iter << "\t" << sc1.GetPosition() << "\t" << sc1.GetRvposition() << "\t" << sc2.GetPosition() << "\t" << sc2.GetRvposition() << endl; - } - -} -} diff --git a/binaries/src/mafft/extensions/mxscarna_src/Globaldp.hpp b/binaries/src/mafft/extensions/mxscarna_src/Globaldp.hpp deleted file mode 100644 index ba3e06f..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/Globaldp.hpp +++ /dev/null @@ -1,109 +0,0 @@ -//////////////////////////////////////////////////////////////// -// Globaldp.hpp -// Global Alignment of two profile computed by SCARNA algorithm -//////////////////////////////////////////////////////////////// - - -#ifndef __GLOBALDP_HPP__ -#define __GLOBALDP_HPP__ - -#include -#include -#include "nrutil.h" -#include "Util.hpp" -#include "Beta.hpp" -#include "scarna.hpp" -#include "StemCandidate.hpp" -#include "MultiSequence.h" -#include "Sequence.h" -#include "BPPMatrix.hpp" - -using namespace ProbCons; -using namespace std; -namespace MXSCARNA { - -typedef std::vector stemcandidate; -class Globaldp { -private: - static double ribosum_matrix[16][16]; - - NRMat VM, VG; - NRMat traceMI, traceMJ, traceGI, traceGJ; - - const stemcandidate *pscs1, *pscs2; - const MultiSequence *seqs1, *seqs2; - std::vector *matchPSCS1, *matchPSCS2; - SafeVector &BPPMatrices; - NRMat posterior; - NRMat3d countConp1, countConp2; - NRMat countContConp1, countContConp2; - Trimat *profileBPPMat1; - Trimat *profileBPPMat2; - float multiDeltaScore; - float multiDeltaStacking; - float multiScore; - float multiStacking; - float multiPenalty; - - float scorePSCPair(const StemCandidate &sc1, const StemCandidate &sc2); - float wordSimilarity(const StemCandidate &sc1, const StemCandidate &sc2, int i, int j); - int returnBasePairType(char s, char r); - float probabilityScore(const StemCandidate &sc1, const StemCandidate &sc2); - float stackingScore(const StemCandidate &sc1, const StemCandidate &sc2); - float distancePenalty(const StemCandidate &sc1, const StemCandidate &sc2); - float incrementalScorePSCPair(const StemCandidate &sc1, const StemCandidate &sc2); - float incrementalProbabilityScore(const StemCandidate &sc1, const StemCandidate &sc2); - float incrementalStackingScore(const StemCandidate &sc1, const StemCandidate &sc2); - float incrementalWordSimilarity(const StemCandidate &sc1, const StemCandidate &sc2, int i, int j); - Trimat* makeProfileBPPMatrix(const MultiSequence *Sequences); - - void Initialize(); - void DP(); - float traceBack(); - void printMatch(); -public: - - Globaldp(const stemcandidate *mypscs1, const stemcandidate *mypscs2, - const MultiSequence *myseqs1, const MultiSequence *myseqs2, - std::vector *matchPSCS1, std::vector *matchPSCS2, - VF *myPosterior, SafeVector &myBPPMatrices, - float myMultiDeltaScore = MULTIDELTASCORE, float myMultiDeltaStacking = MULTIDELTASTACKING, - float myMultiScore = MULTISCORE, float myMultiStacking = MULTISTACKING, - float myMultiPenalty = MULTIPENALTY) - : VM(mypscs1->size(), mypscs2->size()), - VG(mypscs1->size(), mypscs2->size()), - traceMI(mypscs1->size(), mypscs2->size()), - traceMJ(mypscs1->size(), mypscs2->size()), - traceGI(mypscs1->size(), mypscs2->size()), - traceGJ(mypscs1->size(), mypscs2->size()), - pscs1(mypscs1), pscs2(mypscs2), - seqs1(myseqs1), seqs2(myseqs2), - matchPSCS1(matchPSCS1), matchPSCS2(matchPSCS2), - BPPMatrices(myBPPMatrices), posterior(myseqs1->GetSequence(0)->GetLength() + 1, myseqs2->GetSequence(0)->GetLength() + 1), - countConp1(WORDLENGTH, 17, mypscs1->size()+1), countConp2(WORDLENGTH, 17, mypscs2->size()+1), - countContConp1(0, 17, mypscs1->size()+1), countContConp2(0, 17, mypscs2->size()+1), - multiDeltaScore(myMultiDeltaScore), multiDeltaStacking(myMultiDeltaStacking), - multiScore(myMultiScore), multiStacking(myMultiStacking), - multiPenalty(myMultiPenalty) { - - VF::iterator myPosteriorPtr = myPosterior->begin(); - for (int i = 0; i <= seqs1->GetSequence(0)->GetLength(); i++) { - for (int j = 0; j <= seqs2->GetSequence(0)->GetLength(); j++) { - posterior[i][j] = (*myPosteriorPtr)/(seqs1->GetSequence(0)->GetLength()*seqs2->GetSequence(0)->GetLength()); - myPosteriorPtr++; - } - } - } - - - - float Run(); - - void setMultiDeltaScore(float score) { multiDeltaScore = score; } - void setMultiDeltaStacking(float score) { multiDeltaStacking = score; } - void setMultiScore(float score) { multiScore = score; } - void setMultiStacking(float score) { multiStacking = score; } - void setMultiPenalty(float score) { multiPenalty = score; } -}; -} -#endif // __GLOBALDP_HPP__ diff --git a/binaries/src/mafft/extensions/mxscarna_src/Main.cc b/binaries/src/mafft/extensions/mxscarna_src/Main.cc deleted file mode 100644 index 75bc632..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/Main.cc +++ /dev/null @@ -1,1872 +0,0 @@ -///////////////////////////////////////////////////////////////// -// Main.cc -// -// Main routines for MXSCARNA program. -///////////////////////////////////////////////////////////////// - -#include "scarna.hpp" -#include "SafeVector.h" -#include "MultiSequence.h" -#include "Defaults.h" -#include "ScoreType.h" -#include "ProbabilisticModel.h" -#include "EvolutionaryTree.h" -#include "SparseMatrix.h" -#include "BPPMatrix.hpp" -#include "StemCandidate.hpp" -#include "Globaldp.hpp" -#include "nrutil.h" -#include "AlifoldMEA.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -//#include "RfoldWrapper.hpp" -//static RFOLD::Rfold folder; - -using namespace::MXSCARNA; - -string parametersInputFilename = ""; -string parametersOutputFilename = "no training"; -string annotationFilename = ""; -string weboutputFileName = ""; - -ofstream *outputFile; - -bool enableTraining = false; -bool enableVerbose = false; -bool enableAllPairs = false; -bool enableAnnotation = false; -bool enableViterbi = false; -bool enableClustalWOutput = false; -bool enableTrainEmissions = false; -bool enableAlignOrder = false; -bool enableWebOutput = false; -bool enableStockholmOutput = false; -bool enableMXSCARNAOutput = false; -bool enableMcCaskillMEAMode = false; -char bppmode = 's'; // by katoh -int numConsistencyReps = 2; -int numPreTrainingReps = 0; -int numIterativeRefinementReps = 100; -int scsLength = SCSLENGTH; -float cutoff = 0; -float gapOpenPenalty = 0; -float gapContinuePenalty = 0; -float threshhold = 1.0; -float BaseProbThreshold = BASEPROBTHRESHOLD; -float BasePairConst = BASEPAIRCONST; -int BandWidth = BANDWIDTH; - -SafeVector sequenceNames; - -VF initDistrib (NumMatrixTypes); -VF gapOpen (2*NumInsertStates); -VF gapExtend (2*NumInsertStates); -VVF emitPairs (256, VF (256, 1e-10)); -VF emitSingle (256, 1e-5); - -string alphabet = alphabetDefault; - -string *ssCons = NULL; - -const int MIN_PRETRAINING_REPS = 0; -const int MAX_PRETRAINING_REPS = 20; -const int MIN_CONSISTENCY_REPS = 0; -const int MAX_CONSISTENCY_REPS = 5; -const int MIN_ITERATIVE_REFINEMENT_REPS = 0; -const int MAX_ITERATIVE_REFINEMENT_REPS = 1000; - -///////////////////////////////////////////////////////////////// -// Function prototypes -///////////////////////////////////////////////////////////////// - -void PrintHeading(); -void PrintParameters (const char *message, const VF &initDistrib, const VF &gapOpen, - const VF &gapExtend, const VVF &emitPairs, const VF &emitSingle, const char *filename); -MultiSequence *DoAlign (MultiSequence *sequence, const ProbabilisticModel &model, VF &initDistrib, VF &gapOpen, VF &gapExtend, VVF &emitPairs, VF &emitSingle); -SafeVector ParseParams (int argc, char **argv); -void ReadParameters (); -MultiSequence *ComputeFinalAlignment (const TreeNode *tree, MultiSequence *sequences, - const SafeVector > &sparseMatrices, - const ProbabilisticModel &model, - SafeVector &BPPMatrices); -MultiSequence *AlignAlignments (MultiSequence *align1, MultiSequence *align2, - const SafeVector > &sparseMatrices, - const ProbabilisticModel &model, SafeVector &BPPMatrices, float identity); -SafeVector > DoRelaxation (MultiSequence *sequences, - SafeVector > &sparseMatrices); -void Relax (SparseMatrix *matXZ, SparseMatrix *matZY, VF &posterior); -void Relax1 (SparseMatrix *matXZ, SparseMatrix *matZY, VF &posterior); -void DoBasePairProbabilityRelaxation (MultiSequence *sequences, - SafeVector > &sparseMatrices, - SafeVector &BPPMatrices); -set GetSubtree (const TreeNode *tree); -void TreeBasedBiPartitioning (const SafeVector > &sparseMatrices, - const ProbabilisticModel &model, MultiSequence* &alignment, - const TreeNode *tree, SafeVector &BPPMatrices); -void DoIterativeRefinement (const SafeVector > &sparseMatrices, - const ProbabilisticModel &model, MultiSequence* &alignment); -void WriteAnnotation (MultiSequence *alignment, - const SafeVector > &sparseMatrices); -int ComputeScore (const SafeVector > &active, - const SafeVector > &sparseMatrices); -std::vector* seq2scs(MultiSequence *Sequences, SafeVector &BPPMatrices, int BandWidth); -void removeConflicts(std::vector *pscs1, std::vector *pscs2, std::vector *matchPSCS1, std::vector *matchPSCS2); - -struct prob { - int i; - int j; - float p; -}; - -///////////////////////////////////////////////////////////////// -// main() -// -// Calls all initialization routines and runs the MXSCARNA -// aligner. -///////////////////////////////////////////////////////////////// - - -int main (int argc, char **argv){ - - // print MXSCARNA heading - PrintHeading(); - - // parse program parameters - sequenceNames = ParseParams (argc, argv); - ReadParameters(); - PrintParameters ("Using parameter set:", initDistrib, gapOpen, gapExtend, emitPairs, emitSingle, NULL); - - // now, we'll process all the files given as input. If we are given - // several filenames as input, then we'll load all of those sequences - // simultaneously, as long as we're not training. On the other hand, - // if we are training, then we'll treat each file as a separate - // training instance - - if (enableMcCaskillMEAMode) { - MultiSequence *sequences = new MultiSequence(); assert (sequences); - for (int i = 0; i < (int) sequenceNames.size(); i++){ - cerr << "Loading sequence file: " << sequenceNames[i] << endl; - sequences->LoadMFA (sequenceNames[i], true); - } - - const int numSeqs = sequences->GetNumSequences(); - SafeVector BPPMatrices; - - // compute the base pairing matrices for each sequences - for(int i = 0; i < numSeqs; i++) { - Sequence *tmpSeq = sequences->GetSequence(i); - string seq = tmpSeq->GetString(); - int n_seq = tmpSeq->GetLength(); - BPPMatrix *bppmat = new BPPMatrix(bppmode, seq, n_seq); // modified by katoh - BPPMatrices.push_back(bppmat); - } - if (bppmode=='w') exit( 0 ); - - AlifoldMEA alifold(sequences, BPPMatrices, BasePairConst); - alifold.Run(); - ssCons = alifold.getSScons(); - - if (enableStockholmOutput) { - sequences->WriteSTOCKHOLM (cout, ssCons); - } - else if (enableMXSCARNAOutput){ - sequences->WriteMXSCARNA (cout, ssCons); - } - else { - sequences->WriteMFA (cout, ssCons); - } - - delete sequences; - } - // if we are training - else if (enableTraining){ - - // build new model for aligning - ProbabilisticModel model (initDistrib, gapOpen, gapExtend, emitPairs, emitSingle); - - // prepare to average parameters - for (int i = 0; i < (int) initDistrib.size(); i++) initDistrib[i] = 0; - for (int i = 0; i < (int) gapOpen.size(); i++) gapOpen[i] = 0; - for (int i = 0; i < (int) gapExtend.size(); i++) gapExtend[i] = 0; - if (enableTrainEmissions){ - for (int i = 0; i < (int) emitPairs.size(); i++) - for (int j = 0; j < (int) emitPairs[i].size(); j++) emitPairs[i][j] = 0; - for (int i = 0; i < (int) emitSingle.size(); i++) emitSingle[i] = 0; - } - - // align each file individually - for (int i = 0; i < (int) sequenceNames.size(); i++){ - - VF thisInitDistrib (NumMatrixTypes); - VF thisGapOpen (2*NumInsertStates); - VF thisGapExtend (2*NumInsertStates); - VVF thisEmitPairs (256, VF (256, 1e-10)); - VF thisEmitSingle (256, 1e-5); - - // load sequence file - MultiSequence *sequences = new MultiSequence(); assert (sequences); - cerr << "Loading sequence file: " << sequenceNames[i] << endl; - sequences->LoadMFA (sequenceNames[i], true); - - // align sequences - DoAlign (sequences, model, thisInitDistrib, thisGapOpen, thisGapExtend, thisEmitPairs, thisEmitSingle); - - // add in contribution of the derived parameters - for (int i = 0; i < (int) initDistrib.size(); i++) initDistrib[i] += thisInitDistrib[i]; - for (int i = 0; i < (int) gapOpen.size(); i++) gapOpen[i] += thisGapOpen[i]; - for (int i = 0; i < (int) gapExtend.size(); i++) gapExtend[i] += thisGapExtend[i]; - if (enableTrainEmissions){ - for (int i = 0; i < (int) emitPairs.size(); i++) - for (int j = 0; j < (int) emitPairs[i].size(); j++) emitPairs[i][j] += thisEmitPairs[i][j]; - for (int i = 0; i < (int) emitSingle.size(); i++) emitSingle[i] += thisEmitSingle[i]; - } - - delete sequences; - } - - // compute new parameters and print them out - for (int i = 0; i < (int) initDistrib.size(); i++) initDistrib[i] /= (int) sequenceNames.size(); - for (int i = 0; i < (int) gapOpen.size(); i++) gapOpen[i] /= (int) sequenceNames.size(); - for (int i = 0; i < (int) gapExtend.size(); i++) gapExtend[i] /= (int) sequenceNames.size(); - if (enableTrainEmissions){ - for (int i = 0; i < (int) emitPairs.size(); i++) - for (int j = 0; j < (int) emitPairs[i].size(); j++) emitPairs[i][j] /= (int) sequenceNames.size(); - for (int i = 0; i < (int) emitSingle.size(); i++) emitSingle[i] /= sequenceNames.size(); - } - - PrintParameters ("Trained parameter set:", - initDistrib, gapOpen, gapExtend, emitPairs, emitSingle, - parametersOutputFilename.c_str()); - } - // pass - // if we are not training, we must simply want to align some sequences - else { - // load all files together - MultiSequence *sequences = new MultiSequence(); assert (sequences); - for (int i = 0; i < (int) sequenceNames.size(); i++){ - cerr << "Loading sequence file: " << sequenceNames[i] << endl; - - sequences->LoadMFA (sequenceNames[i], true); - } - - // do all "pre-training" repetitions first - // NOT execute - for (int ct = 0; ct < numPreTrainingReps; ct++){ - enableTraining = true; - - // build new model for aligning - ProbabilisticModel model (initDistrib, gapOpen, gapExtend, - emitPairs, emitSingle); - - // do initial alignments - DoAlign (sequences, model, initDistrib, gapOpen, gapExtend, emitPairs, emitSingle); - - // print new parameters - PrintParameters ("Recomputed parameter set:", initDistrib, gapOpen, gapExtend, emitPairs, emitSingle, NULL); - - enableTraining = false; - } - - // now, we can perform the alignments and write them out - if (enableWebOutput) { - outputFile = new ofstream(weboutputFileName.c_str()); - if (!outputFile) { - cerr << "cannot open output file." << weboutputFileName << endl; - exit(1); - } - *outputFile << "" << endl; - *outputFile << "" << endl; - } - MultiSequence *alignment = DoAlign (sequences, - ProbabilisticModel (initDistrib, gapOpen, gapExtend, emitPairs, emitSingle), - initDistrib, gapOpen, gapExtend, emitPairs, emitSingle); - - - if (!enableAllPairs){ - if (enableClustalWOutput) { - alignment->WriteALN (cout); - } - else if (enableWebOutput) { - alignment->WriteWEB (*outputFile, ssCons); -// computeStructureWithAlifold (); - } - else if (enableStockholmOutput) { - alignment->WriteSTOCKHOLM (cout, ssCons); - } - else if (enableMXSCARNAOutput) { - alignment->WriteMXSCARNA (cout, ssCons); - } - else { - alignment->WriteMFA (cout, ssCons); - } - } - - if (enableWebOutput) { - *outputFile << "" << endl; - delete outputFile; - } - - delete ssCons; - delete alignment; - delete sequences; - - } -} - -///////////////////////////////////////////////////////////////// -// PrintHeading() -// -// Prints heading for PROBCONS program. -///////////////////////////////////////////////////////////////// - -void PrintHeading (){ - cerr << endl - << "Multiplex SCARNA"<< endl - << "version " << VERSION << " - align multiple RNA sequences and print to standard output" << endl - << "Written by Yasuo Tabei" << endl - << endl; -} - -///////////////////////////////////////////////////////////////// -// PrintParameters() -// -// Prints PROBCONS parameters to STDERR. If a filename is -// specified, then the parameters are also written to the file. -///////////////////////////////////////////////////////////////// - -void PrintParameters (const char *message, const VF &initDistrib, const VF &gapOpen, - const VF &gapExtend, const VVF &emitPairs, const VF &emitSingle, const char *filename){ - - // print parameters to the screen - cerr << message << endl - << " initDistrib[] = { "; - for (int i = 0; i < NumMatrixTypes; i++) cerr << setprecision (10) << initDistrib[i] << " "; - cerr << "}" << endl - << " gapOpen[] = { "; - for (int i = 0; i < NumInsertStates*2; i++) cerr << setprecision (10) << gapOpen[i] << " "; - cerr << "}" << endl - << " gapExtend[] = { "; - for (int i = 0; i < NumInsertStates*2; i++) cerr << setprecision (10) << gapExtend[i] << " "; - cerr << "}" << endl - << endl; - - /* - for (int i = 0; i < 5; i++){ - for (int j = 0; j <= i; j++){ - cerr << emitPairs[(unsigned char) alphabet[i]][(unsigned char) alphabet[j]] << " "; - } - cerr << endl; - }*/ - - // if a file name is specified - if (filename){ - - // attempt to open the file for writing - FILE *file = fopen (filename, "w"); - if (!file){ - cerr << "ERROR: Unable to write parameter file: " << filename << endl; - exit (1); - } - - // if successful, then write the parameters to the file - for (int i = 0; i < NumMatrixTypes; i++) fprintf (file, "%.10f ", initDistrib[i]); fprintf (file, "\n"); - for (int i = 0; i < 2*NumInsertStates; i++) fprintf (file, "%.10f ", gapOpen[i]); fprintf (file, "\n"); - for (int i = 0; i < 2*NumInsertStates; i++) fprintf (file, "%.10f ", gapExtend[i]); fprintf (file, "\n"); - fprintf (file, "%s\n", alphabet.c_str()); - for (int i = 0; i < (int) alphabet.size(); i++){ - for (int j = 0; j <= i; j++) - fprintf (file, "%.10f ", emitPairs[(unsigned char) alphabet[i]][(unsigned char) alphabet[j]]); - fprintf (file, "\n"); - } - for (int i = 0; i < (int) alphabet.size(); i++) - fprintf (file, "%.10f ", emitSingle[(unsigned char) alphabet[i]]); - fprintf (file, "\n"); - fclose (file); - } -} - -///////////////////////////////////////////////////////////////// -// DoAlign() -// -// First computes all pairwise posterior probability matrices. -// Then, computes new parameters if training, or a final -// alignment, otherwise. -///////////////////////////////////////////////////////////////// -MultiSequence *DoAlign (MultiSequence *sequences, const ProbabilisticModel &model, VF &initDistrib, VF &gapOpen, VF &gapExtend, VVF &emitPairs, VF &emitSingle){ - - - assert (sequences); - - const int numSeqs = sequences->GetNumSequences(); - VVF distances (numSeqs, VF (numSeqs, 0)); - VVF identities (numSeqs, VF (numSeqs, 0)); - SafeVector > sparseMatrices (numSeqs, SafeVector(numSeqs, NULL)); - - SafeVector BPPMatrices; - - for(int i = 0; i < numSeqs; i++) { - Sequence *tmpSeq = sequences->GetSequence(i); - string seq = tmpSeq->GetString(); - int n_seq = tmpSeq->GetLength(); - BPPMatrix *bppmat = new BPPMatrix(bppmode, seq, n_seq, BASEPROBTHRESHOLD); // modified by katoh - BPPMatrices.push_back(bppmat); - } - - if (enableTraining){ - // prepare to average parameters - for (int i = 0; i < (int) initDistrib.size(); i++) initDistrib[i] = 0; - for (int i = 0; i < (int) gapOpen.size(); i++) gapOpen[i] = 0; - for (int i = 0; i < (int) gapExtend.size(); i++) gapExtend[i] = 0; - if (enableTrainEmissions){ - for (int i = 0; i < (int) emitPairs.size(); i++) - for (int j = 0; j < (int) emitPairs[i].size(); j++) emitPairs[i][j] = 0; - for (int i = 0; i < (int) emitSingle.size(); i++) emitSingle[i] = 0; - } - } - - // skip posterior calculations if we just want to do Viterbi alignments - if (!enableViterbi){ - - // do all pairwise alignments for posterior probability matrices - for (int a = 0; a < numSeqs-1; a++){ - for (int b = a+1; b < numSeqs; b++){ - Sequence *seq1 = sequences->GetSequence (a); - Sequence *seq2 = sequences->GetSequence (b); - - // verbose output - if (enableVerbose) - cerr << "Computing posterior matrix: (" << a+1 << ") " << seq1->GetHeader() << " vs. " - << "(" << b+1 << ") " << seq2->GetHeader() << " -- "; - - // compute forward and backward probabilities - VF *forward = model.ComputeForwardMatrix (seq1, seq2); assert (forward); - VF *backward = model.ComputeBackwardMatrix (seq1, seq2); assert (backward); - - // if we are training, then we'll simply want to compute the - // expected counts for each region within the matrix separately; - // otherwise, we'll need to put all of the regions together and - // assemble a posterior probability match matrix - - // so, if we're training - if (enableTraining){ - - // compute new parameters - VF thisInitDistrib (NumMatrixTypes); - VF thisGapOpen (2*NumInsertStates); - VF thisGapExtend (2*NumInsertStates); - VVF thisEmitPairs (256, VF (256, 1e-10)); - VF thisEmitSingle (256, 1e-5); - - model.ComputeNewParameters (seq1, seq2, *forward, *backward, thisInitDistrib, thisGapOpen, thisGapExtend, thisEmitPairs, thisEmitSingle, enableTrainEmissions); - - // add in contribution of the derived parameters - for (int i = 0; i < (int) initDistrib.size(); i++) initDistrib[i] += thisInitDistrib[i]; - for (int i = 0; i < (int) gapOpen.size(); i++) gapOpen[i] += thisGapOpen[i]; - for (int i = 0; i < (int) gapExtend.size(); i++) gapExtend[i] += thisGapExtend[i]; - if (enableTrainEmissions){ - for (int i = 0; i < (int) emitPairs.size(); i++) - for (int j = 0; j < (int) emitPairs[i].size(); j++) emitPairs[i][j] += thisEmitPairs[i][j]; - for (int i = 0; i < (int) emitSingle.size(); i++) emitSingle[i] += thisEmitSingle[i]; - } - - // let us know that we're done. - if (enableVerbose) cerr << "done." << endl; - } - // pass - else { - - // compute posterior probability matrix - VF *posterior = model.ComputePosteriorMatrix (seq1, seq2, *forward, *backward); assert (posterior); - - // compute sparse representations - sparseMatrices[a][b] = new SparseMatrix (seq1->GetLength(), seq2->GetLength(), *posterior); - sparseMatrices[b][a] = NULL; - - if (!enableAllPairs){ - // perform the pairwise sequence alignment - pair *, float> alignment = model.ComputeAlignment (seq1->GetLength(), - seq2->GetLength(), - *posterior); - - Sequence *tmpSeq1 = seq1->AddGaps (alignment.first, 'X'); - Sequence *tmpSeq2 = seq2->AddGaps (alignment.first, 'Y'); - - // compute sequence identity for each pair of sequenceses - int length = tmpSeq1->GetLength(); - int matchCount = 0; - int misMatchCount = 0; - for (int k = 1; k <= length; k++) { - int ch1 = tmpSeq1->GetPosition(k); - int ch2 = tmpSeq2->GetPosition(k); - if (ch1 == ch2 && ch1 != '-' && ch2 != '-') { ++matchCount; } - else if (ch1 != ch2 && ch1 != '-' && ch2 != '-') { ++misMatchCount; } - } - - identities[a][b] = identities[b][a] = (float)matchCount/(float)(matchCount + misMatchCount); - - // compute "expected accuracy" distance for evolutionary tree computation - float distance = alignment.second / min (seq1->GetLength(), seq2->GetLength()); - distances[a][b] = distances[b][a] = distance; - - if (enableVerbose) - cerr << setprecision (10) << distance << endl; - - delete alignment.first; - } - else { - // let us know that we're done. - if (enableVerbose) cerr << "done." << endl; - } - - delete posterior; - } - - delete forward; - delete backward; - } - } - } - - - // now average out parameters derived - if (enableTraining){ - // compute new parameters - for (int i = 0; i < (int) initDistrib.size(); i++) initDistrib[i] /= numSeqs * (numSeqs - 1) / 2; - for (int i = 0; i < (int) gapOpen.size(); i++) gapOpen[i] /= numSeqs * (numSeqs - 1) / 2; - for (int i = 0; i < (int) gapExtend.size(); i++) gapExtend[i] /= numSeqs * (numSeqs - 1) / 2; - - if (enableTrainEmissions){ - for (int i = 0; i < (int) emitPairs.size(); i++) - for (int j = 0; j < (int) emitPairs[i].size(); j++) emitPairs[i][j] /= numSeqs * (numSeqs - 1) / 2; - for (int i = 0; i < (int) emitSingle.size(); i++) emitSingle[i] /= numSeqs * (numSeqs - 1) / 2; - } - } - - // see if we still want to do some alignments - else { - // pass - if (!enableViterbi){ - - // perform the consistency transformation the desired number of times - for (int r = 0; r < numConsistencyReps; r++){ - SafeVector > newSparseMatrices = DoRelaxation (sequences, sparseMatrices); - - // now replace the old posterior matrices - for (int i = 0; i < numSeqs; i++){ - for (int j = 0; j < numSeqs; j++){ - delete sparseMatrices[i][j]; - sparseMatrices[i][j] = newSparseMatrices[i][j]; - } - } - } - //if (numSeqs > 8) { - // for (int r = 0; r < 1; r++) - // DoBasePairProbabilityRelaxation(sequences, sparseMatrices, BPPMatrices); - //} - } - - MultiSequence *finalAlignment = NULL; - - if (enableAllPairs){ - for (int a = 0; a < numSeqs-1; a++){ - for (int b = a+1; b < numSeqs; b++){ - Sequence *seq1 = sequences->GetSequence (a); - Sequence *seq2 = sequences->GetSequence (b); - - if (enableVerbose) - cerr << "Performing pairwise alignment: (" << a+1 << ") " << seq1->GetHeader() << " vs. " - << "(" << b+1 << ") " << seq2->GetHeader() << " -- "; - - - // perform the pairwise sequence alignment - pair *, float> alignment; - if (enableViterbi) - alignment = model.ComputeViterbiAlignment (seq1, seq2); - else { - - // build posterior matrix - VF *posterior = sparseMatrices[a][b]->GetPosterior(); assert (posterior); - int length = (seq1->GetLength() + 1) * (seq2->GetLength() + 1); - for (int i = 0; i < length; i++) (*posterior)[i] -= cutoff; - - alignment = model.ComputeAlignment (seq1->GetLength(), seq2->GetLength(), *posterior); - delete posterior; - } - - - // write pairwise alignments - string name = seq1->GetHeader() + "-" + seq2->GetHeader() + (enableClustalWOutput ? ".aln" : ".fasta"); - ofstream outfile (name.c_str()); - - MultiSequence *result = new MultiSequence(); - result->AddSequence (seq1->AddGaps(alignment.first, 'X')); - result->AddSequence (seq2->AddGaps(alignment.first, 'Y')); - result->WriteMFAseq (outfile); // by katoh - - outfile.close(); - - delete alignment.first; - } - } - exit( 0 ); - } - - // now if we still need to do a final multiple alignment - else { - - if (enableVerbose) - cerr << endl; - - // compute the evolutionary tree - TreeNode *tree = TreeNode::ComputeTree (distances, identities); - - if (enableWebOutput) { - *outputFile << "" << endl; - tree->Print (*outputFile, sequences); - *outputFile << "" << endl; - } - else { - tree->Print (cerr, sequences); - cerr << endl; - } - // make the final alignment - finalAlignment = ComputeFinalAlignment (tree, sequences, sparseMatrices, model, BPPMatrices); - - // build annotation - if (enableAnnotation){ - WriteAnnotation (finalAlignment, sparseMatrices); - } - - delete tree; - } - - if (!enableViterbi){ - // delete sparse matrices - for (int a = 0; a < numSeqs-1; a++){ - for (int b = a+1; b < numSeqs; b++){ - delete sparseMatrices[a][b]; - delete sparseMatrices[b][a]; - } - } - } - - //AlifoldMEA alifold(finalAlignment, BPPMatrices, BasePairConst); - //alifold.Run(); - //ssCons = alifold.getSScons(); - - return finalAlignment; - - } - - return NULL; -} - -///////////////////////////////////////////////////////////////// -// GetInteger() -// -// Attempts to parse an integer from the character string given. -// Returns true only if no parsing error occurs. -///////////////////////////////////////////////////////////////// - -bool GetInteger (char *data, int *val){ - char *endPtr; - long int retVal; - - assert (val); - - errno = 0; - retVal = strtol (data, &endPtr, 0); - if (retVal == 0 && (errno != 0 || data == endPtr)) return false; - if (errno != 0 && (retVal == LONG_MAX || retVal == LONG_MIN)) return false; - if (retVal < (long) INT_MIN || retVal > (long) INT_MAX) return false; - *val = (int) retVal; - return true; -} - -///////////////////////////////////////////////////////////////// -// GetFloat() -// -// Attempts to parse a float from the character string given. -// Returns true only if no parsing error occurs. -///////////////////////////////////////////////////////////////// - -bool GetFloat (char *data, float *val){ - char *endPtr; - double retVal; - - assert (val); - - errno = 0; - retVal = strtod (data, &endPtr); - if (retVal == 0 && (errno != 0 || data == endPtr)) return false; - if (errno != 0 && (retVal >= 1000000.0 || retVal <= -1000000.0)) return false; - *val = (float) retVal; - return true; -} - -///////////////////////////////////////////////////////////////// -// ParseParams() -// -// Parse all command-line options. -///////////////////////////////////////////////////////////////// - -SafeVector ParseParams (int argc, char **argv){ - - if (argc < 2){ - - cerr << "MXSCARNA comes with ABSOLUTELY NO WARRANTY. This is free software, and" << endl - << "you are welcome to redistribute it under certain conditions. See the" << endl - << "file COPYING.txt for details." << endl - << endl - << "Usage:" << endl - << " mxscarna [OPTION]... [MFAFILE]..." << endl - << endl - << "Description:" << endl - << " Align sequences in MFAFILE(s) and print result to standard output" << endl - << endl - << " -clustalw" << endl - << " use CLUSTALW output format instead of MFA" << endl - << endl - << " -stockholm" << endl - << " use STOCKHOLM output format instead of MFA" << endl - << endl - << " -mxscarna" << endl - << " use MXSCARNA output format instead of MFA" << endl - << endl - << " -weboutput //" << endl - << " use web output format" << endl - << endl - << " -c, --consistency REPS" << endl - << " use " << MIN_CONSISTENCY_REPS << " <= REPS <= " << MAX_CONSISTENCY_REPS - << " (default: " << numConsistencyReps << ") passes of consistency transformation" << endl - << endl - << " -ir, --iterative-refinement REPS" << endl - << " use " << MIN_ITERATIVE_REFINEMENT_REPS << " <= REPS <= " << MAX_ITERATIVE_REFINEMENT_REPS - << " (default: " << numIterativeRefinementReps << ") passes of iterative-refinement" << endl - << endl - << " -pre, --pre-training REPS" << endl - << " use " << MIN_PRETRAINING_REPS << " <= REPS <= " << MAX_PRETRAINING_REPS - << " (default: " << numPreTrainingReps << ") rounds of pretraining" << endl - << endl - << " -pairs" << endl - << " generate all-pairs pairwise alignments" << endl - << endl - << " -viterbi" << endl - << " use Viterbi algorithm to generate all pairs (automatically enables -pairs)" << endl - << endl - << " -v, --verbose" << endl - << " report progress while aligning (default: " << (enableVerbose ? "on" : "off") << ")" << endl - << endl - << " -annot FILENAME" << endl - << " write annotation for multiple alignment to FILENAME" << endl - << endl - << " -t, --train FILENAME" << endl - << " compute EM transition probabilities, store in FILENAME (default: " - << parametersOutputFilename << ")" << endl - << endl - << " -e, --emissions" << endl - << " also reestimate emission probabilities (default: " - << (enableTrainEmissions ? "on" : "off") << ")" << endl - << endl - << " -p, --paramfile FILENAME" << endl - << " read parameters from FILENAME (default: " - << parametersInputFilename << ")" << endl - << endl - << " -a, --alignment-order" << endl - << " print sequences in alignment order rather than input order (default: " - << (enableAlignOrder ? "on" : "off") << ")" << endl - << endl - << " -s THRESHOLD" << endl - << " the threshold of SCS alignment" << endl - << endl - << " In default, for less than " << threshhold << ", the SCS aligment is applied. " << endl - << " -l SCSLENGTH" << endl - << " the length of stem candidates " << SCSLENGTH << endl - << endl - << " -b BASEPROBTRHESHHOLD" << endl - << " the threshold of base pairing probability " << BASEPROBTHRESHOLD << endl - << endl - << " -m, --mccaskillmea" << endl - << " McCaskill MEA MODE: input the clustalw format file and output the secondary structure predicted by McCaskill MEA" << endl - << endl - << " -g BASEPAIRSCORECONST" << endl - << " the control parameter of the prediction of base pairs, default:" << BasePairConst << endl - << endl - << " -w BANDWIDTH" << endl - << " the control parameter of the distance of stem candidates, default:" << BANDWIDTH << endl - << endl; - - - // << " -go, --gap-open VALUE" << endl - // << " gap opening penalty of VALUE <= 0 (default: " << gapOpenPenalty << ")" << endl - // << endl - // << " -ge, --gap-extension VALUE" << endl - // << " gap extension penalty of VALUE <= 0 (default: " << gapContinuePenalty << ")" << endl - // << endl - // << " -co, --cutoff CUTOFF" << endl - // << " subtract 0 <= CUTOFF <= 1 (default: " << cutoff << ") from all posterior values before final alignment" << endl - // << endl - - exit (1); - } - - SafeVector sequenceNames; - int tempInt; - float tempFloat; - - for (int i = 1; i < argc; i++){ - if (argv[i][0] == '-'){ - - // training - if (!strcmp (argv[i], "-t") || !strcmp (argv[i], "--train")){ - enableTraining = true; - if (i < argc - 1) - parametersOutputFilename = string (argv[++i]); - else { - cerr << "ERROR: Filename expected for option " << argv[i] << endl; - exit (1); - } - } - - // emission training - else if (!strcmp (argv[i], "-e") || !strcmp (argv[i], "--emissions")){ - enableTrainEmissions = true; - } - - // parameter file - else if (!strcmp (argv[i], "-p") || !strcmp (argv[i], "--paramfile")){ - if (i < argc - 1) - parametersInputFilename = string (argv[++i]); - else { - cerr << "ERROR: Filename expected for option " << argv[i] << endl; - exit (1); - } - } - else if (! strcmp (argv[i], "-s")) { - if (i < argc - 1){ - if (!GetFloat (argv[++i], &tempFloat)){ - cerr << "ERROR: Invalid floating-point value following option " << argv[i-1] << ": " << argv[i] << endl; - exit (1); - } - else { - if (tempFloat < 0){ - cerr << "ERROR: For option " << argv[i-1] << ", floating-point value must not be nagative." << endl; - exit (1); - } - else - threshhold = tempFloat; - } - } - else { - cerr << "ERROR: Floating-point value expected for option " << argv[i] << endl; - exit (1); - } - } - - else if (! strcmp (argv[i], "-l")) { - if (i < argc - 1) { - if (!GetInteger (argv[++i], &tempInt)){ - cerr << "ERROR: Invalid integer following option " << argv[i-1] << ": " << argv[i] << endl; - exit (1); - } - else { - if (tempInt <= 0 || 6 <= tempInt) { - cerr << "ERROR: For option " << argv[i-1] << ", integer must be between " - << "1 and 6" << "." << endl; - exit (1); - } - else - scsLength = tempInt; - } - } - } - else if (! strcmp (argv[i], "-b")) { - if (i < argc - 1) { - if (!GetFloat (argv[++i], &tempFloat)){ - cerr << "ERROR: Invalid floating-point value following option " << argv[i-1] << ": " << argv[i] << endl; - exit (1); - } - else { - if (tempFloat < 0 && 1 < tempFloat) { - cerr << "ERROR: For option " << argv[i-1] << ", floating-point value must not be nagative." << endl; - exit (1); - } - else - BaseProbThreshold = tempFloat; - } - } - } - else if (! strcmp (argv[i], "-g")) { - if (i < argc - 1) { - if (!GetFloat (argv[++i], &tempFloat)){ - cerr << "ERROR: Invalid floating-point value following option " << argv[i-1] << ": " << argv[i] << endl; - exit (1); - } - else { - if (tempFloat < 0 && 1 < tempFloat) { - cerr << "ERROR: For option " << argv[i-1] << ", floating-point value must not be nagative." << endl; - exit (1); - } - else - BasePairConst = tempFloat; - } - } - } - - // number of consistency transformations - else if (!strcmp (argv[i], "-c") || !strcmp (argv[i], "--consistency")){ - if (i < argc - 1){ - if (!GetInteger (argv[++i], &tempInt)){ - cerr << "ERROR: Invalid integer following option " << argv[i-1] << ": " << argv[i] << endl; - exit (1); - } - else { - if (tempInt < MIN_CONSISTENCY_REPS || tempInt > MAX_CONSISTENCY_REPS){ - cerr << "ERROR: For option " << argv[i-1] << ", integer must be between " - << MIN_CONSISTENCY_REPS << " and " << MAX_CONSISTENCY_REPS << "." << endl; - exit (1); - } - else - numConsistencyReps = tempInt; - } - } - else { - cerr << "ERROR: Integer expected for option " << argv[i] << endl; - exit (1); - } - } - - // number of randomized partitioning iterative refinement passes - else if (!strcmp (argv[i], "-ir") || !strcmp (argv[i], "--iterative-refinement")){ - if (i < argc - 1){ - if (!GetInteger (argv[++i], &tempInt)){ - cerr << "ERROR: Invalid integer following option " << argv[i-1] << ": " << argv[i] << endl; - exit (1); - } - else { - if (tempInt < MIN_ITERATIVE_REFINEMENT_REPS || tempInt > MAX_ITERATIVE_REFINEMENT_REPS){ - cerr << "ERROR: For option " << argv[i-1] << ", integer must be between " - << MIN_ITERATIVE_REFINEMENT_REPS << " and " << MAX_ITERATIVE_REFINEMENT_REPS << "." << endl; - exit (1); - } - else - numIterativeRefinementReps = tempInt; - } - } - else { - cerr << "ERROR: Integer expected for option " << argv[i] << endl; - exit (1); - } - } - // number of EM pre-training rounds - else if (!strcmp (argv[i], "-pre") || !strcmp (argv[i], "--pre-training")){ - if (i < argc - 1){ - if (!GetInteger (argv[++i], &tempInt)){ - cerr << "ERROR: Invalid integer following option " << argv[i-1] << ": " << argv[i] << endl; - exit (1); - } - else { - if (tempInt < MIN_PRETRAINING_REPS || tempInt > MAX_PRETRAINING_REPS){ - cerr << "ERROR: For option " << argv[i-1] << ", integer must be between " - << MIN_PRETRAINING_REPS << " and " << MAX_PRETRAINING_REPS << "." << endl; - exit (1); - } - else - numPreTrainingReps = tempInt; - } - } - else { - cerr << "ERROR: Integer expected for option " << argv[i] << endl; - exit (1); - } - } - - // the distance of stem candidate - else if (!strcmp (argv[i], "-w")){ - if (i < argc - 1){ - if (!GetInteger (argv[++i], &tempInt)){ - cerr << "ERROR: Invalid integer following option " << argv[i-1] << ": " << argv[i] << endl; - exit (1); - } - else { - BandWidth = tempInt; - } - } - else { - cerr << "ERROR: Integer expected for option " << argv[i] << endl; - exit (1); - } - } - - // gap open penalty - else if (!strcmp (argv[i], "-go") || !strcmp (argv[i], "--gap-open")){ - if (i < argc - 1){ - if (!GetFloat (argv[++i], &tempFloat)){ - cerr << "ERROR: Invalid floating-point value following option " << argv[i-1] << ": " << argv[i] << endl; - exit (1); - } - else { - if (tempFloat > 0){ - cerr << "ERROR: For option " << argv[i-1] << ", floating-point value must not be positive." << endl; - exit (1); - } - else - gapOpenPenalty = tempFloat; - } - } - else { - cerr << "ERROR: Floating-point value expected for option " << argv[i] << endl; - exit (1); - } - } - - // gap extension penalty - else if (!strcmp (argv[i], "-ge") || !strcmp (argv[i], "--gap-extension")){ - if (i < argc - 1){ - if (!GetFloat (argv[++i], &tempFloat)){ - cerr << "ERROR: Invalid floating-point value following option " << argv[i-1] << ": " << argv[i] << endl; - exit (1); - } - else { - if (tempFloat > 0){ - cerr << "ERROR: For option " << argv[i-1] << ", floating-point value must not be positive." << endl; - exit (1); - } - else - gapContinuePenalty = tempFloat; - } - } - else { - cerr << "ERROR: Floating-point value expected for option " << argv[i] << endl; - exit (1); - } - } - - // all-pairs pairwise alignments - else if (!strcmp (argv[i], "-pairs")){ - enableAllPairs = true; - } - - // all-pairs pairwise Viterbi alignments - else if (!strcmp (argv[i], "-viterbi")){ - enableAllPairs = true; - enableViterbi = true; - } - - // read base-pairing probability from the '_bpp' file, by katoh - else if (!strcmp (argv[i], "-readbpp")){ - bppmode = 'r'; - } - - // write base-pairing probability to stdout, by katoh - else if (!strcmp (argv[i], "-writebpp")){ - bppmode = 'w'; - } - - // annotation files - else if (!strcmp (argv[i], "-annot")){ - enableAnnotation = true; - if (i < argc - 1) - annotationFilename = argv[++i]; - else { - cerr << "ERROR: FILENAME expected for option " << argv[i] << endl; - exit (1); - } - } - - // clustalw output format - else if (!strcmp (argv[i], "-clustalw")){ - enableClustalWOutput = true; - } - // mxscarna output format - else if (!strcmp (argv[i], "-mxscarna")) { - enableMXSCARNAOutput = true; - } - // stockholm output format - else if (!strcmp (argv[i], "-stockholm")) { - enableStockholmOutput = true; - } - // web output format - else if (!strcmp (argv[i], "-weboutput")) { - if (i < argc - 1) { - weboutputFileName = string(argv[++i]); - } - else { - cerr << "ERROR: Invalid following option " << argv[i-1] << ": " << argv[i] << endl; - exit (1); - } - - enableWebOutput = true; - } - - // cutoff - else if (!strcmp (argv[i], "-co") || !strcmp (argv[i], "--cutoff")){ - if (i < argc - 1){ - if (!GetFloat (argv[++i], &tempFloat)){ - cerr << "ERROR: Invalid floating-point value following option " << argv[i-1] << ": " << argv[i] << endl; - exit (1); - } - else { - if (tempFloat < 0 || tempFloat > 1){ - cerr << "ERROR: For option " << argv[i-1] << ", floating-point value must be between 0 and 1." << endl; - exit (1); - } - else - cutoff = tempFloat; - } - } - else { - cerr << "ERROR: Floating-point value expected for option " << argv[i] << endl; - exit (1); - } - } - - // verbose reporting - else if (!strcmp (argv[i], "-v") || !strcmp (argv[i], "--verbose")){ - enableVerbose = true; - } - - // alignment order - else if (!strcmp (argv[i], "-a") || !strcmp (argv[i], "--alignment-order")){ - enableAlignOrder = true; - } - // McCaskill MEA MODE - else if (!strcmp (argv[i], "-m") || !strcmp (argv[i], "--mccaskillmea")){ - enableMcCaskillMEAMode = true; - } - // bad arguments - else { - cerr << "ERROR: Unrecognized option: " << argv[i] << endl; - exit (1); - } - } - else { - sequenceNames.push_back (string (argv[i])); - } - } - - if (enableTrainEmissions && !enableTraining){ - cerr << "ERROR: Training emissions (-e) requires training (-t)" << endl; - exit (1); - } - - return sequenceNames; -} - -///////////////////////////////////////////////////////////////// -// ReadParameters() -// -// Read initial distribution, transition, and emission -// parameters from a file. -///////////////////////////////////////////////////////////////// - -void ReadParameters (){ - - ifstream data; - - emitPairs = VVF (256, VF (256, 1e-10)); - emitSingle = VF (256, 1e-5); - - // read initial state distribution and transition parameters - // pass - if (parametersInputFilename == string ("")){ - if (NumInsertStates == 1){ - for (int i = 0; i < NumMatrixTypes; i++) initDistrib[i] = initDistrib1Default[i]; - for (int i = 0; i < 2*NumInsertStates; i++) gapOpen[i] = gapOpen1Default[i]; - for (int i = 0; i < 2*NumInsertStates; i++) gapExtend[i] = gapExtend1Default[i]; - } - else if (NumInsertStates == 2){ - for (int i = 0; i < NumMatrixTypes; i++) initDistrib[i] = initDistrib2Default[i]; - for (int i = 0; i < 2*NumInsertStates; i++) gapOpen[i] = gapOpen2Default[i]; - for (int i = 0; i < 2*NumInsertStates; i++) gapExtend[i] = gapExtend2Default[i]; - } - else { - cerr << "ERROR: No default initial distribution/parameter settings exist" << endl - << " for " << NumInsertStates << " pairs of insert states. Use --paramfile." << endl; - exit (1); - } - - alphabet = alphabetDefault; - - for (int i = 0; i < (int) alphabet.length(); i++){ - emitSingle[(unsigned char) tolower(alphabet[i])] = emitSingleDefault[i]; - emitSingle[(unsigned char) toupper(alphabet[i])] = emitSingleDefault[i]; - for (int j = 0; j <= i; j++){ - emitPairs[(unsigned char) tolower(alphabet[i])][(unsigned char) tolower(alphabet[j])] = emitPairsDefault[i][j]; - emitPairs[(unsigned char) tolower(alphabet[i])][(unsigned char) toupper(alphabet[j])] = emitPairsDefault[i][j]; - emitPairs[(unsigned char) toupper(alphabet[i])][(unsigned char) tolower(alphabet[j])] = emitPairsDefault[i][j]; - emitPairs[(unsigned char) toupper(alphabet[i])][(unsigned char) toupper(alphabet[j])] = emitPairsDefault[i][j]; - emitPairs[(unsigned char) tolower(alphabet[j])][(unsigned char) tolower(alphabet[i])] = emitPairsDefault[i][j]; - emitPairs[(unsigned char) tolower(alphabet[j])][(unsigned char) toupper(alphabet[i])] = emitPairsDefault[i][j]; - emitPairs[(unsigned char) toupper(alphabet[j])][(unsigned char) tolower(alphabet[i])] = emitPairsDefault[i][j]; - emitPairs[(unsigned char) toupper(alphabet[j])][(unsigned char) toupper(alphabet[i])] = emitPairsDefault[i][j]; - } - } - } - else { - data.open (parametersInputFilename.c_str()); - if (data.fail()){ - cerr << "ERROR: Unable to read parameter file: " << parametersInputFilename << endl; - exit (1); - } - - string line[3]; - for (int i = 0; i < 3; i++){ - if (!getline (data, line[i])){ - cerr << "ERROR: Unable to read transition parameters from parameter file: " << parametersInputFilename << endl; - exit (1); - } - } - istringstream data2; - data2.clear(); data2.str (line[0]); for (int i = 0; i < NumMatrixTypes; i++) data2 >> initDistrib[i]; - data2.clear(); data2.str (line[1]); for (int i = 0; i < 2*NumInsertStates; i++) data2 >> gapOpen[i]; - data2.clear(); data2.str (line[2]); for (int i = 0; i < 2*NumInsertStates; i++) data2 >> gapExtend[i]; - - if (!getline (data, line[0])){ - cerr << "ERROR: Unable to read alphabet from scoring matrix file: " << parametersInputFilename << endl; - exit (1); - } - - // read alphabet as concatenation of all characters on alphabet line - alphabet = ""; - string token; - data2.clear(); data2.str (line[0]); while (data2 >> token) alphabet += token; - - for (int i = 0; i < (int) alphabet.size(); i++){ - for (int j = 0; j <= i; j++){ - float val; - data >> val; - emitPairs[(unsigned char) tolower(alphabet[i])][(unsigned char) tolower(alphabet[j])] = val; - emitPairs[(unsigned char) tolower(alphabet[i])][(unsigned char) toupper(alphabet[j])] = val; - emitPairs[(unsigned char) toupper(alphabet[i])][(unsigned char) tolower(alphabet[j])] = val; - emitPairs[(unsigned char) toupper(alphabet[i])][(unsigned char) toupper(alphabet[j])] = val; - emitPairs[(unsigned char) tolower(alphabet[j])][(unsigned char) tolower(alphabet[i])] = val; - emitPairs[(unsigned char) tolower(alphabet[j])][(unsigned char) toupper(alphabet[i])] = val; - emitPairs[(unsigned char) toupper(alphabet[j])][(unsigned char) tolower(alphabet[i])] = val; - emitPairs[(unsigned char) toupper(alphabet[j])][(unsigned char) toupper(alphabet[i])] = val; - } - } - - for (int i = 0; i < (int) alphabet.size(); i++){ - float val; - data >> val; - emitSingle[(unsigned char) tolower(alphabet[i])] = val; - emitSingle[(unsigned char) toupper(alphabet[i])] = val; - } - data.close(); - } -} - -///////////////////////////////////////////////////////////////// -// ProcessTree() -// -// Process the tree recursively. Returns the aligned sequences -// corresponding to a node or leaf of the tree. -///////////////////////////////////////////////////////////////// -float ide; -MultiSequence *ProcessTree (const TreeNode *tree, MultiSequence *sequences, - const SafeVector > &sparseMatrices, - const ProbabilisticModel &model, SafeVector &BPPMatrices) { - MultiSequence *result; - - // check if this is a node of the alignment tree - if (tree->GetSequenceLabel() == -1){ - MultiSequence *alignLeft = ProcessTree (tree->GetLeftChild(), sequences, sparseMatrices, model, BPPMatrices); - MultiSequence *alignRight = ProcessTree (tree->GetRightChild(), sequences, sparseMatrices, model, BPPMatrices); - - assert (alignLeft); - assert (alignRight); - - result = AlignAlignments (alignLeft, alignRight, sparseMatrices, model, BPPMatrices, tree->GetIdentity()); - assert (result); - - delete alignLeft; - delete alignRight; - } - - // otherwise, this is a leaf of the alignment tree - else { - result = new MultiSequence(); assert (result); - result->AddSequence (sequences->GetSequence(tree->GetSequenceLabel())->Clone()); - } - - return result; -} - -///////////////////////////////////////////////////////////////// -// ComputeFinalAlignment() -// -// Compute the final alignment by calling ProcessTree(), then -// performing iterative refinement as needed. -///////////////////////////////////////////////////////////////// - -MultiSequence *ComputeFinalAlignment (const TreeNode *tree, MultiSequence *sequences, - const SafeVector > &sparseMatrices, - const ProbabilisticModel &model, - SafeVector &BPPMatrices) { - - MultiSequence *alignment = ProcessTree (tree, sequences, sparseMatrices, model, BPPMatrices); - - if (enableAlignOrder){ - alignment->SaveOrdering(); - enableAlignOrder = false; - } - - // tree-based refinement - // if you use the function, you can degrade the quality of the software. - // TreeBasedBiPartitioning (sparseMatrices, model, alignment, tree, BPPMatrices); - - // iterative refinement -/* - for (int i = 0; i < numIterativeRefinementReps; i++) - DoIterativeRefinement (sparseMatrices, model, alignment); - - cerr << endl; -*/ - // return final alignment - return alignment; -} - -///////////////////////////////////////////////////////////////// -// AlignAlignments() -// -// Returns the alignment of two MultiSequence objects. -///////////////////////////////////////////////////////////////// - -MultiSequence *AlignAlignments (MultiSequence *align1, MultiSequence *align2, - const SafeVector > &sparseMatrices, - const ProbabilisticModel &model, - SafeVector &BPPMatrices, float identity){ - - // print some info about the alignment - if (enableVerbose){ - for (int i = 0; i < align1->GetNumSequences(); i++) - cerr << ((i==0) ? "[" : ",") << align1->GetSequence(i)->GetLabel(); - cerr << "] vs. "; - for (int i = 0; i < align2->GetNumSequences(); i++) - cerr << ((i==0) ? "[" : ",") << align2->GetSequence(i)->GetLabel(); - cerr << "]: "; - } - - VF *posterior = model.BuildPosterior (align1, align2, sparseMatrices, cutoff); - - pair *, float> alignment; - // choose the alignment routine depending on the "cosmetic" gap penalties used - if (gapOpenPenalty == 0 && gapContinuePenalty == 0) { - - if(identity <= threshhold) { - std::vector *pscs1, *pscs2; - pscs1 = seq2scs(align1, BPPMatrices, BandWidth); - pscs2 = seq2scs(align2, BPPMatrices, BandWidth); - std::vector *matchPSCS1 = new std::vector; - std::vector *matchPSCS2 = new std::vector; - - Globaldp globaldp(pscs1, pscs2, align1, align2, matchPSCS1, matchPSCS2, posterior, BPPMatrices); - //float scsScore = globaldp.Run(); - - globaldp.Run(); - - removeConflicts(pscs1, pscs2, matchPSCS1, matchPSCS2); - - alignment = model.ComputeAlignment2 (align1->GetSequence(0)->GetLength(), align2->GetSequence(0)->GetLength(), *posterior, pscs1, pscs2, matchPSCS1, matchPSCS2); - delete matchPSCS1; - delete matchPSCS2; - } else { - alignment = model.ComputeAlignment (align1->GetSequence(0)->GetLength(), align2->GetSequence(0)->GetLength(), *posterior); - } - } - else { - alignment = model.ComputeAlignmentWithGapPenalties (align1, align2, - *posterior, align1->GetNumSequences(), align2->GetNumSequences(), - gapOpenPenalty, gapContinuePenalty); - } - - delete posterior; - - if (enableVerbose){ - - // compute total length of sequences - int totLength = 0; - for (int i = 0; i < align1->GetNumSequences(); i++) - for (int j = 0; j < align2->GetNumSequences(); j++) - totLength += min (align1->GetSequence(i)->GetLength(), align2->GetSequence(j)->GetLength()); - - // give an "accuracy" measure for the alignment - cerr << alignment.second / totLength << endl; - } - - // now build final alignment - MultiSequence *result = new MultiSequence(); - for (int i = 0; i < align1->GetNumSequences(); i++) - result->AddSequence (align1->GetSequence(i)->AddGaps(alignment.first, 'X')); - for (int i = 0; i < align2->GetNumSequences(); i++) - result->AddSequence (align2->GetSequence(i)->AddGaps(alignment.first, 'Y')); - if (!enableAlignOrder) - result->SortByLabel(); - - // free temporary alignment - delete alignment.first; - - return result; -} - -///////////////////////////////////////////////////////////////// -// DoRelaxation() -// -// Performs one round of the consistency transformation. The -// formula used is: -// 1 -// P'(x[i]-y[j]) = --- sum sum P(x[i]-z[k]) P(z[k]-y[j]) -// |S| z in S k -// -// where S = {x, y, all other sequences...} -// -///////////////////////////////////////////////////////////////// - -SafeVector > DoRelaxation (MultiSequence *sequences, - SafeVector > &sparseMatrices){ - const int numSeqs = sequences->GetNumSequences(); - - SafeVector > newSparseMatrices (numSeqs, SafeVector(numSeqs, NULL)); - - // for every pair of sequences - for (int i = 0; i < numSeqs; i++){ - for (int j = i+1; j < numSeqs; j++){ - Sequence *seq1 = sequences->GetSequence (i); - Sequence *seq2 = sequences->GetSequence (j); - - if (enableVerbose) - cerr << "Relaxing (" << i+1 << ") " << seq1->GetHeader() << " vs. " - << "(" << j+1 << ") " << seq2->GetHeader() << ": "; - - // get the original posterior matrix - VF *posteriorPtr = sparseMatrices[i][j]->GetPosterior(); assert (posteriorPtr); - VF &posterior = *posteriorPtr; - - const int seq1Length = seq1->GetLength(); - const int seq2Length = seq2->GetLength(); - - // contribution from the summation where z = x and z = y - for (int k = 0; k < (seq1Length+1) * (seq2Length+1); k++) posterior[k] += posterior[k]; - - if (enableVerbose) - cerr << sparseMatrices[i][j]->GetNumCells() << " --> "; - - // contribution from all other sequences - for (int k = 0; k < numSeqs; k++) if (k != i && k != j){ - if (k < i) - Relax1 (sparseMatrices[k][i], sparseMatrices[k][j], posterior); - else if (k > i && k < j) - Relax (sparseMatrices[i][k], sparseMatrices[k][j], posterior); - else { - SparseMatrix *temp = sparseMatrices[j][k]->ComputeTranspose(); - Relax (sparseMatrices[i][k], temp, posterior); - delete temp; - } - } - - // now renormalization - for (int k = 0; k < (seq1Length+1) * (seq2Length+1); k++) posterior[k] /= numSeqs; - - // mask out positions not originally in the posterior matrix - SparseMatrix *matXY = sparseMatrices[i][j]; - for (int y = 0; y <= seq2Length; y++) posterior[y] = 0; - for (int x = 1; x <= seq1Length; x++){ - SafeVector::iterator XYptr = matXY->GetRowPtr(x); - SafeVector::iterator XYend = XYptr + matXY->GetRowSize(x); - VF::iterator base = posterior.begin() + x * (seq2Length + 1); - int curr = 0; - while (XYptr != XYend){ - - // zero out all cells until the first filled column - while (curr < XYptr->first){ - base[curr] = 0; - curr++; - } - - // now, skip over this column - curr++; - ++XYptr; - } - - // zero out cells after last column - while (curr <= seq2Length){ - base[curr] = 0; - curr++; - } - } - - // save the new posterior matrix - newSparseMatrices[i][j] = new SparseMatrix (seq1->GetLength(), seq2->GetLength(), posterior); - newSparseMatrices[j][i] = NULL; - - if (enableVerbose) - cerr << newSparseMatrices[i][j]->GetNumCells() << " -- "; - - delete posteriorPtr; - - if (enableVerbose) - cerr << "done." << endl; - } - } - - return newSparseMatrices; -} - -///////////////////////////////////////////////////////////////// -// Relax() -// -// Computes the consistency transformation for a single sequence -// z, and adds the transformed matrix to "posterior". -///////////////////////////////////////////////////////////////// - -void Relax (SparseMatrix *matXZ, SparseMatrix *matZY, VF &posterior){ - - assert (matXZ); - assert (matZY); - - int lengthX = matXZ->GetSeq1Length(); - int lengthY = matZY->GetSeq2Length(); - assert (matXZ->GetSeq2Length() == matZY->GetSeq1Length()); - - // for every x[i] - for (int i = 1; i <= lengthX; i++){ - SafeVector::iterator XZptr = matXZ->GetRowPtr(i); - SafeVector::iterator XZend = XZptr + matXZ->GetRowSize(i); - - VF::iterator base = posterior.begin() + i * (lengthY + 1); - - // iterate through all x[i]-z[k] - while (XZptr != XZend){ - SafeVector::iterator ZYptr = matZY->GetRowPtr(XZptr->first); - SafeVector::iterator ZYend = ZYptr + matZY->GetRowSize(XZptr->first); - const float XZval = XZptr->second; - - // iterate through all z[k]-y[j] - while (ZYptr != ZYend){ - base[ZYptr->first] += XZval * ZYptr->second; - ZYptr++; - } - XZptr++; - } - } -} - -///////////////////////////////////////////////////////////////// -// Relax1() -// -// Computes the consistency transformation for a single sequence -// z, and adds the transformed matrix to "posterior". -///////////////////////////////////////////////////////////////// - -void Relax1 (SparseMatrix *matZX, SparseMatrix *matZY, VF &posterior){ - - assert (matZX); - assert (matZY); - - int lengthZ = matZX->GetSeq1Length(); - int lengthY = matZY->GetSeq2Length(); - - // for every z[k] - for (int k = 1; k <= lengthZ; k++){ - SafeVector::iterator ZXptr = matZX->GetRowPtr(k); - SafeVector::iterator ZXend = ZXptr + matZX->GetRowSize(k); - - // iterate through all z[k]-x[i] - while (ZXptr != ZXend){ - SafeVector::iterator ZYptr = matZY->GetRowPtr(k); - SafeVector::iterator ZYend = ZYptr + matZY->GetRowSize(k); - const float ZXval = ZXptr->second; - VF::iterator base = posterior.begin() + ZXptr->first * (lengthY + 1); - - // iterate through all z[k]-y[j] - while (ZYptr != ZYend){ - base[ZYptr->first] += ZXval * ZYptr->second; - ZYptr++; - } - ZXptr++; - } - } -} - -void DoBasePairProbabilityRelaxation (MultiSequence *sequences, - SafeVector > &sparseMatrices, - SafeVector &BPPMatrices) { - const int numSeqs = sequences->GetNumSequences(); - - for (int i = 0; i < numSeqs; i++) { - Sequence *seq1 = sequences->GetSequence (i); - BPPMatrix *seq1BppMatrix = BPPMatrices[seq1->GetLabel()]; - Trimat consBppMat(seq1->GetLength() + 1); - int seq1Length = seq1->GetLength(); - - for (int k = 1; k <= seq1Length; k++) { - for (int l = k; l <= seq1Length; l++) { - consBppMat.ref(k, l) = seq1BppMatrix->GetProb(k, l); - } - } - - for (int j = i + 1; j < numSeqs; j++) { - - // VF *posteriorPtr = sparseMatrices[i][j]->GetPosterior() - Sequence *seq2 = sequences->GetSequence (j); - BPPMatrix *seq2BppMatrix = BPPMatrices[seq2->GetLabel()]; -// int seq2Length = seq2->GetLength(); - SparseMatrix *matchProb = sparseMatrices[i][j]; - -// vector &probs1 = seq1BppMatrix->bppMat.data2; - for(int k = 1; k <= seq1Length; k++) { - for(int m = k, n = k; n <= k + 200 && m >= 1 && n <= seq1Length; m--, n++) { - -// for (int k = 0; k < (int)probs1.size(); k++) { -// float tmpProb1 = probs1[k].prob; -// int tmp1I = probs1[k].i; -// int tmp1J = probs1[k].j; - - float sumProb = 0; - vector &probs2 = seq2BppMatrix->bppMat.data2; - for(int l = 0; l < (int)probs2.size(); l++) { - float tmpProb2 = probs2[l].prob; - int tmp2I = probs2[l].i; - int tmp2J = probs2[l].j; - sumProb += matchProb->GetValue(m, tmp2I)*matchProb->GetValue(n, tmp2J)*tmpProb2; - } - - consBppMat.ref(m, n) += sumProb; - } - - for(int m = k, n = k + 1; n <= k + 200 && m >= 1 && n <= seq1Length; m--, n++) { - -// for (int k = 0; k < (int)probs1.size(); k++) { -// float tmpProb1 = probs1[k].prob; -// int tmp1I = probs1[k].i; -// int tmp1J = probs1[k].j; - - float sumProb = 0; - vector &probs2 = seq2BppMatrix->bppMat.data2; - for(int l = 0; l < (int)probs2.size(); l++) { - float tmpProb2 = probs2[l].prob; - int tmp2I = probs2[l].i; - int tmp2J = probs2[l].j; - sumProb += matchProb->GetValue(m, tmp2I)*matchProb->GetValue(n, tmp2J)*tmpProb2; - } - - consBppMat.ref(m, n) += sumProb; - } - } - } - -/* - for(int k = 1; k <= seq1Length; k++) { - for(int m = k, n = k; n <= k + 30 && m >= 1 && n <= seq1Length; m--, n++) { - float tmpProb = seq1BppMatrix->GetProb(m, n); - for(int l = 1; l <= seq2Length; l++) { - for(int s = l, t = l; t <= l + 30 && s >= 1 && t <= seq2Length; s--, t++) { - tmpProb += matchProb->GetValue(m,s)*matchProb->GetValue(n,t)*seq2BppMatrix->GetProb(s,t); - } - for(int s = l, t = l + 1; t <= l + 31 && s >= 1 && t <= seq2Length; s--, t++) { - tmpProb += matchProb->GetValue(m,s)*matchProb->GetValue(n,t)*seq2BppMatrix->GetProb(s,t); - } - } - consBppMat.ref(m, n) += tmpProb; - } - - for(int m = k, n = k + 1; n <= k + 31 && m >= 1 && n <= seq1Length; m--, n++) { - float tmpProb = seq1BppMatrix->GetProb(m, n); - for(int l = 1; l <= seq2Length; l++) { - for(int s = l, t = l; t <= l + 30 && s >= 1 && t <= seq2Length; s--, t++) { - tmpProb += matchProb->GetValue(m,s)*matchProb->GetValue(n,t)*seq2BppMatrix->GetProb(s,t); - } - for(int s = l, t = l + 1; t <= l + 31 && s >= 1 && t <= seq2Length; s--, t++) { - tmpProb += matchProb->GetValue(m,s)*matchProb->GetValue(n,t)*seq2BppMatrix->GetProb(s,t); - } - } - consBppMat.ref(m,n) += tmpProb; - } - } - } -*/ - for (int m = 1; m <= seq1Length; m++) { - for (int n = m + 4; n <= seq1Length; n++) { - consBppMat.ref(m,n) = consBppMat.ref(m,n)/(float)numSeqs; - } - } - seq1BppMatrix->updateBPPMatrix(consBppMat); - } -} - -///////////////////////////////////////////////////////////////// -// GetSubtree -// -// Returns set containing all leaf labels of the current subtree. -///////////////////////////////////////////////////////////////// - -set GetSubtree (const TreeNode *tree){ - set s; - - if (tree->GetSequenceLabel() == -1){ - s = GetSubtree (tree->GetLeftChild()); - set t = GetSubtree (tree->GetRightChild()); - - for (set::iterator iter = t.begin(); iter != t.end(); ++iter) - s.insert (*iter); - } - else { - s.insert (tree->GetSequenceLabel()); - } - - return s; -} - -///////////////////////////////////////////////////////////////// -// TreeBasedBiPartitioning -// -// Uses the iterative refinement scheme from MUSCLE. -///////////////////////////////////////////////////////////////// - -void TreeBasedBiPartitioning (const SafeVector > &sparseMatrices, - const ProbabilisticModel &model, MultiSequence* &alignment, - const TreeNode *tree, SafeVector &BPPMatrices){ - // check if this is a node of the alignment tree - if (tree->GetSequenceLabel() == -1){ - TreeBasedBiPartitioning (sparseMatrices, model, alignment, tree->GetLeftChild(), BPPMatrices); - TreeBasedBiPartitioning (sparseMatrices, model, alignment, tree->GetRightChild(), BPPMatrices); - - set leftSubtree = GetSubtree (tree->GetLeftChild()); - set rightSubtree = GetSubtree (tree->GetRightChild()); - set leftSubtreeComplement, rightSubtreeComplement; - - // calculate complement of each subtree - for (int i = 0; i < alignment->GetNumSequences(); i++){ - if (leftSubtree.find(i) == leftSubtree.end()) leftSubtreeComplement.insert (i); - if (rightSubtree.find(i) == rightSubtree.end()) rightSubtreeComplement.insert (i); - } - - // perform realignments for edge to left child - if (!leftSubtree.empty() && !leftSubtreeComplement.empty()){ - MultiSequence *groupOneSeqs = alignment->Project (leftSubtree); assert (groupOneSeqs); - MultiSequence *groupTwoSeqs = alignment->Project (leftSubtreeComplement); assert (groupTwoSeqs); - delete alignment; - alignment = AlignAlignments (groupOneSeqs, groupTwoSeqs, sparseMatrices, model, BPPMatrices, tree->GetLeftChild()->GetIdentity()); - } - - // perform realignments for edge to right child - if (!rightSubtree.empty() && !rightSubtreeComplement.empty()){ - MultiSequence *groupOneSeqs = alignment->Project (rightSubtree); assert (groupOneSeqs); - MultiSequence *groupTwoSeqs = alignment->Project (rightSubtreeComplement); assert (groupTwoSeqs); - delete alignment; - alignment = AlignAlignments (groupOneSeqs, groupTwoSeqs, sparseMatrices, model, BPPMatrices, tree->GetRightChild()->GetIdentity()); - } - } -} - -///////////////////////////////////////////////////////////////// -// DoterativeRefinement() -// -// Performs a single round of randomized partionining iterative -// refinement. -///////////////////////////////////////////////////////////////// -/* -void DoIterativeRefinement (const SafeVector > &sparseMatrices, - const ProbabilisticModel &model, MultiSequence* &alignment){ - set groupOne, groupTwo; - - // create two separate groups - for (int i = 0; i < alignment->GetNumSequences(); i++){ - if (rand() % 2) - groupOne.insert (i); - else - groupTwo.insert (i); - } - - if (groupOne.empty() || groupTwo.empty()) return; - - // project into the two groups - MultiSequence *groupOneSeqs = alignment->Project (groupOne); assert (groupOneSeqs); - MultiSequence *groupTwoSeqs = alignment->Project (groupTwo); assert (groupTwoSeqs); - delete alignment; - - // realign - alignment = AlignAlignments (groupOneSeqs, groupTwoSeqs, sparseMatrices, model); - - delete groupOneSeqs; - delete groupTwoSeqs; -} -*/ - -///////////////////////////////////////////////////////////////// -// WriteAnnotation() -// -// Computes annotation for multiple alignment and write values -// to a file. -///////////////////////////////////////////////////////////////// - -void WriteAnnotation (MultiSequence *alignment, - const SafeVector > &sparseMatrices){ - ofstream outfile (annotationFilename.c_str()); - - if (outfile.fail()){ - cerr << "ERROR: Unable to write annotation file." << endl; - exit (1); - } - - const int alignLength = alignment->GetSequence(0)->GetLength(); - const int numSeqs = alignment->GetNumSequences(); - - SafeVector position (numSeqs, 0); - SafeVector::iterator> seqs (numSeqs); - for (int i = 0; i < numSeqs; i++) seqs[i] = alignment->GetSequence(i)->GetDataPtr(); - SafeVector > active; - active.reserve (numSeqs); - - // for every column - for (int i = 1; i <= alignLength; i++){ - - // find all aligned residues in this particular column - active.clear(); - for (int j = 0; j < numSeqs; j++){ - if (seqs[j][i] != '-'){ - active.push_back (make_pair(j, ++position[j])); - } - } - - outfile << setw(4) << ComputeScore (active, sparseMatrices) << endl; - } - - outfile.close(); -} - -///////////////////////////////////////////////////////////////// -// ComputeScore() -// -// Computes the annotation score for a particular column. -///////////////////////////////////////////////////////////////// - -int ComputeScore (const SafeVector > &active, - const SafeVector > &sparseMatrices){ - - if (active.size() <= 1) return 0; - - // ALTERNATIVE #1: Compute the average alignment score. - - float val = 0; - for (int i = 0; i < (int) active.size(); i++){ - for (int j = i+1; j < (int) active.size(); j++){ - val += sparseMatrices[active[i].first][active[j].first]->GetValue(active[i].second, active[j].second); - } - } - - return (int) (200 * val / ((int) active.size() * ((int) active.size() - 1))); - -} diff --git a/binaries/src/mafft/extensions/mxscarna_src/Makefile b/binaries/src/mafft/extensions/mxscarna_src/Makefile deleted file mode 100644 index 359e15b..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/Makefile +++ /dev/null @@ -1,76 +0,0 @@ -################################################################################ -# Makefile for probcons -################################################################################ - -################################################################################ -# 1) Choose C++ compiler. -################################################################################ - -CXX = g++ - -################################################################################ -# 2) Set C++ flags. -# a) DEBUG mode -- no optimizations, enable SafeVector checking, no inlining -# b) PROFILE mode -- for gprof -# c) RELEASE mode -################################################################################ -BIG_INLINE_LIMIT = 20000 - -PROBCONS = ./probconsRNA -VIENNA = ./vienna - -# no -Wall option for warning -CXXFLAGS = -O3 -funroll-loops -finline-limit=$(BIG_INLINE_LIMIT) -OFLAGS = -DNDEBUG -DNumInsertStates=1 -DVERSION="2.0" $(CXXFLAGS) $(CFLAGS1) -LIBS = -L$(PROBCONS) -L./ -INCL = -I$(PROBCONS) -I$(VIENNA) -I./ - -################################################################################ -# 3) Dependencies -################################################################################ - -TARGETS = mxscarna - -OBJS = Main.o McCaskill.o vienna/energy_param.o seq2scs.o Globaldp.o postProcessings.o AlifoldMEA.o - -.PHONY : all -all : $(TARGETS) - -mxscarna : $(OBJS) - $(CXX) $(LIBS) $(OFLAGS) -lm -o $@ $(OBJS) - -rfold: - cd $(RFOLD); \ - make; \ - cd .. \ - cd .. -probcons: - cd $(PROBCONS); \ - make; \ - cd .. - -#probcons : MultiSequence.h ProbabilisticModel.h ScoreType.h Sequence.h FileBuffer.h SparseMatrix.h EvolutionaryTree.h Defaults.h SafeVector.h Main.cc -# $(CXX) -lm -o probcons $(OBJS) -#Main.cc - -Main.o : $(PROBCONS)/SafeVector.h $(PROBCONS)/FileBuffer.h $(PROBCONS)/Sequence.h $(PROBCONS)/MultiSequence.h $(PROBCONS)/EvolutionaryTree.h scarna.hpp BPPMatrix.hpp StemCandidate.hpp Globaldp.hpp AlifoldMEA.h Main.cc - $(CXX) $(INCL) $(OFLAGS) -c Main.cc -o Main.o -McCaskill.o: McCaskill.hpp $(VIENNA)/energy_param.hpp Util.hpp Beta.hpp ScoreType.hpp McCaskill.cpp - $(CXX) $(INCL) $(OFLAGS) -c McCaskill.cpp -o McCaskill.o -$(VIENNA)/energy_param.o: $(VIENNA)/energy_param.hpp $(VIENNA)/energy_param.cpp - $(CXX) $(INCL) $(OFLAGS) -c $(VIENNA)/energy_param.cpp -o $(VIENNA)/energy_param.o -seq2scs.o: $(PROBCONS)/SafeVector.h StemCandidate.hpp $(PROBCONS)/Sequence.h $(PROBCONS)/MultiSequence.h BPPMatrix.hpp nrutil.h seq2scs.cpp - $(CXX) $(INCL) $(OFLAGS) -c seq2scs.cpp -o seq2scs.o -Globaldp.o: Globaldp.hpp nrutil.h Util.hpp Beta.hpp scarna.hpp StemCandidate.hpp $(PROBCONS)/MultiSequence.h $(PROBCONS)/Sequence.h BPPMatrix.hpp - $(CXX) $(INCL) $(OFLAGS) -c Globaldp.cpp -o Globaldp.o -GlobalParameters.o: scarna.hpp - $(CXX) $(INCL) $(OFLAGS) -c GlobalParameters.cpp -o GlobalParameters.o -postProcessings.o: StemCandidate.hpp scarna.hpp - $(CXX) $(INCL) $(OFLAGS) -c postProcessings.cpp -o postProcessings.o -AlifoldMEA.o: nrutil.h Util.hpp Beta.hpp BPPMatrix.hpp $(PROBCONS)/MultiSequence.h $(PROBCONS)/Sequence.h $(PROBCONS)/SafeVector.h - $(CXX) $(INCL) $(OFLAGS) -c AlifoldMEA.cpp -o AlifoldMEA.o - -.PHONY : clean -clean: - rm -f $(TARGETS) *.o *.h~ *.hpp~ *.cpp~ *.cc~ $(VIENNA)/*.o - $(MAKE) -C $(PROBCONS) clean diff --git a/binaries/src/mafft/extensions/mxscarna_src/McCaskill.cpp b/binaries/src/mafft/extensions/mxscarna_src/McCaskill.cpp deleted file mode 100644 index 39497fb..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/McCaskill.cpp +++ /dev/null @@ -1,839 +0,0 @@ -#include -#include "McCaskill.hpp" -//#include "energy_param3.hpp" -#include "Util.hpp" -#include - -namespace MXSCARNA { -energy_param McCaskill::energyParam; - -float *McCaskill::exphairpin; -float McCaskill::expninio[5][32]; -float McCaskill::expdangle5[6][4]; -float McCaskill::expdangle3[6][4]; -float McCaskill::expinternalLoop[31]; -float McCaskill::expbulge[31]; -char McCaskill::exptriLoop[2][6]; -float McCaskill::exptriLoopEnergy[2]; -char McCaskill::exptetraLoop[30][7]; -float McCaskill::exptetraLoopEnergy[30]; -float McCaskill::expStack[6][6]; -float McCaskill::expTstackH[6][16]; -float McCaskill::expTstackI[6][16]; -float McCaskill::expint11[6][6][16]; -float McCaskill::expint21[6][6][16][4]; -float McCaskill::expint22[6][6][16][16]; -float McCaskill::expMLclosing; -float McCaskill::expMLintern[8]; -float McCaskill::expTermAU; -float McCaskill::expMLbase[31]; - -const int McCaskill::TURN = 3; -const float McCaskill::GASCONST = 1.98717; -const float McCaskill::T = 37 + 273.15; -const int McCaskill::MAXLOOP = 30; -const int McCaskill::TETRA_ENTH37 = -400; -const int McCaskill::NBPAIRS = 7; -const int McCaskill::SCALE = 10; - - -void -McCaskill:: -calcPartitionFunction() -{ - initParameter(); - Inside(); - Outside(); - convertProbability(); - -/* - for(int i = 0; i < n_seq; i++) { - for(int j = i; j < n_seq; j++) { - cout << getProb(i, j) << " "; - } - cout << endl; - } -*/ -} - -void -McCaskill:: -convertProbability() -{ - float *pPointer = p.getPointer(0, 0); - float *abPointer = ab.getPointer(0,0); - for(int i = 0; i < n_seq; i++) { - for(int j = i; j < n_seq; j++) { - *pPointer += *abPointer++; - *pPointer++ = EXP(*pPointer); - } - } -} - -void -McCaskill:: -Inside() -{ - - for (int i = n_seq - TURN - 2; i >= 0; i--) { - float *abPointer = ab.getPointer(i, i + TURN + 1); - float *am1Pointer = am1.getPointer(i, i + TURN + 1); - float *amPointer = am.getPointer(i, i + TURN + 1); - float *q1Pointer = q1.getPointer(i, i + TURN + 1); - float *aPointer = a.getPointer(i, i + TURN + 1); - int *typePointer = typeMat.getPointer(i, i+TURN+1); - for (int j = i + TURN + 1; j < n_seq; j++) { - int tmpType = *typePointer++; - *abPointer++ = compQb(i, j, tmpType); - am1v.ref(i,j) = *am1Pointer++ = compQm1(i,j, tmpType); - amv.ref(i,j) = *amPointer++ = compQm(i,j); - q1v.ref(i,j) = *q1Pointer++ = compQ1(i,j, tmpType); - *aPointer++ = compQ(i,j); - } - } -} - -inline float -McCaskill:: -compQb(int i, int j, int tmpType) -{ - - float tmpAb; - int type = tmpType; - int u = j - i - 1; - - if(Beta::isCanonicalReducedPairCode(type)) { - // hairpin energy - assert(u >= 3); - tmpAb = expHairpinEnergy(type, u, i + 1, j - 1); - - // base pair, bulge, interior loop energy - for(int h = i + 1; h <= MIN(i + MAXLOOP + 1, j - TURN - 2); h++) { - int u1 = h-i-1; - int max = MAX(h + TURN + 1, j-1-MAXLOOP+u1); - float *abPointer = ab.getPointer(h, max - 1); - const int *typeMatPointer = typeMat.getPointer(h, max); - - for(int l = max; l < j; l++) { - int type2 = *typeMatPointer++; - abPointer++; - if(!Beta::isCanonicalReducedPairCode(type2)) continue; - - assert(h >= 0 && h < n_seq && l >= 0 && l < n_seq); - type2 = Beta::flipReducedPairCode(type2); - assert(h-i-1 >= 0); assert(j-l-1 >= 0); - float loopE = *abPointer; - loopE += expLoopEnergy(u1, j-l-1, tmpType, type2, i+1, j-1, h-1, l+1); - tmpAb = LOG_ADD(tmpAb, loopE); - } - } - - // multi loop - float tmpQm = IMPOSSIBLE; - float *amPointer = am.getPointer(i + 1, j - TURN - 3); - float *am1Pointer = am1v.getPointer(j-TURN-2, j-1); - for(int h = j - TURN - 2; h >= i + TURN + 3; h--) { - assert(h >= 0 && h < n_seq); - float tmpScore = *amPointer--; - tmpScore += *am1Pointer--; - tmpQm = LOG_ADD(tmpQm, tmpScore); - } - tmpQm += expMLclosing + expMLintern[type]; - tmpQm += endStemScore(i, j); - tmpAb = LOG_ADD(tmpAb, tmpQm); - } - else { - tmpAb = IMPOSSIBLE; - } - return tmpAb; -} - -//F = a:ML_closing + b:ML_intern*k + c:ML_BASE*u - -inline float -McCaskill:: -compQm1(int i, int j, int tmpType) -{ - float tmpQm1 = IMPOSSIBLE; - - int l = j; - if (i + TURN + 1 <= l) { - int type = typeMat.ref(i,l); - if(Beta::isCanonicalReducedPairCode(type)) { - float tmpScore = ab.ref(i,l); - tmpScore += beginStemScore(i, l); - //tmpScore += expMLbase[1]*(j-l) + expMLintern[type]; - tmpScore += expMLintern[tmpType]; - tmpQm1 = LOG_ADD(tmpQm1, tmpScore); - } - } - if(i < j) { - tmpQm1 = LOG_ADD(tmpQm1, am1.ref(i,j-1)); - } - - return tmpQm1; -} - -inline float -McCaskill:: -compQm(int i, int j) -{ - float tmpQm = IMPOSSIBLE; - float *amPointer = am.getPointer(i,j-TURN-2); - float *am1Pointer = am1v.getPointer(j-TURN-1, j); - for(int h = j - TURN - 1; h >= i ; h--) { - float tmpScore = 0; - float tmpAm1 = *am1Pointer--; - - tmpScore += tmpAm1; - tmpQm = LOG_ADD(tmpQm, tmpScore); - tmpScore = *amPointer--; - tmpScore += tmpAm1; - tmpQm = LOG_ADD(tmpQm, tmpScore); - } - - return tmpQm; -} - -inline float -McCaskill:: -compQ1(int i, int j, int tmpType) -{ - float tmpQ1 = IMPOSSIBLE; - - if(Beta::isCanonicalReducedPairCode(tmpType)) { - float tmpScore = ab.ref(i, j); - tmpScore += beginStemScore(i, j); - tmpQ1 = LOG_ADD(tmpQ1, tmpScore); - } - tmpQ1 = LOG_ADD(tmpQ1, q1.ref(i, j - 1)); - - return tmpQ1; -} - -inline float -McCaskill:: -compQ(int i, int j) -{ - float tmpQ = 0; - tmpQ = LOG_ADD(tmpQ, q1.ref(i,j)); - - float *aPointer = a.getPointer(i,j-TURN-2); - float *q1Pointer = q1v.getPointer(j-TURN-1, j); - for(int h = j - TURN - 1; h >= i + 1; h--) { - float tmpScore = *aPointer--; - tmpScore += *q1Pointer--; - tmpQ = LOG_ADD(tmpQ, tmpScore); - } - - return tmpQ; -} - -inline float -McCaskill:: -beginStemScore(const int i, const int j) const -{ - float temp = 0; - int type = typeMat.ref(i,j); - - if(0 < i) { temp += expdangle5[type][numSeq[i-1]]; } - if(j < n_seq-1) { temp += expdangle3[type][numSeq[j+1]]; } - if(type != Beta::REDUCED_CG_CODE && type != Beta::REDUCED_GC_CODE) { temp += expTermAU; } - return temp; -} - -inline float -McCaskill:: -endStemScore(const int i, const int j) const -{ - float temp = 0; - int type = typeMat.ref(i,j); - - type = Beta::flipReducedPairCode(type); - - if(i < n_seq-1) { temp += expdangle3[type][numSeq[i+1]]; } - if(j > 0) { temp += expdangle5[type][numSeq[j-1]]; } - if(type != Beta::REDUCED_CG_CODE && type != Beta::REDUCED_GC_CODE) { temp += expTermAU; } - return temp; -} - -inline float -McCaskill:: -compP(int h, int l, int tmpType) -{ - float prob = IMPOSSIBLE; - - int type = tmpType; - if(Beta::isCanonicalReducedPairCode(type)) { - - /* exterior loop */ - float tmp_p = 0; - tmp_p -= a.ref(0,n_seq-1); - if(0 < h) { - tmp_p += a.ref(0,h-1); - } - if(l < n_seq-1) { - tmp_p += a.ref(l+1, n_seq-1); - } - tmp_p += beginStemScore(h, l); - prob = LOG_ADD(prob, tmp_p); - - assert(IMPOSSIBLE <= prob && prob <= 0); - - /* internal loop */ - tmp_p = IMPOSSIBLE; - int tt = Beta::flipReducedPairCode(tmpType); - int max = MAX(0,h-MAXLOOP-1); - for(int i = max; i <= h - 1; i++) { - float min = MIN(l+MAXLOOP-h+i+2, n_seq-1); - int *typeMatPointer = typeMat.getPointer(i,l+1); - float *pPointer = p.getPointer(i,l); - for(int j = l + 1; j <= min; j++) { - int type2 = *typeMatPointer++; - pPointer++; - if(!Beta::isCanonicalReducedPairCode(type2)) continue; - assert(i >= 0 && i < n_seq && j >= 0 && j < n_seq); - - float tmpScore = *pPointer; - tmpScore += expLoopEnergy(h-i-1, j-l-1, type2, tt, i+1, j-1, h-1, l+1); - tmp_p = LOG_ADD(tmp_p, tmpScore); - } - } - prob = LOG_ADD(prob, tmp_p); - assert(IMPOSSIBLE <= prob && prob <= 0); - - /* multi loop */ - tmp_p = IMPOSSIBLE; - float tmp_begin = beginStemScore(h, l); - float *q1Pointer = q1v.getPointer(0, l); - float *am1Pointer = am1v.getPointer(0, l); - float *amPointer = amv.getPointer(1,h-1); - for(int i = 0; i <= h-TURN-1; i++) { - float tmpq1 = *q1Pointer++; - float tmpam = *amPointer++; - float tmpScore = *am1Pointer++; - - tmpScore += tmpam; - tmpScore += tmp_begin; - tmpScore += expMLclosing + expMLintern[tt]; - tmp_p = LOG_ADD(tmp_p, tmpScore); - - tmpScore = tmpq1; - tmpScore += tmpam; - tmpScore += tmp_begin; - tmpScore += expMLclosing + expMLintern[tt]; - tmp_p = LOG_ADD(tmp_p, tmpScore); - - tmpScore = tmpq1; - tmpScore += tmp_begin; - tmpScore += expMLclosing + expMLintern[tt]; - tmp_p = LOG_ADD(tmp_p, tmpScore); - } - - assert(IMPOSSIBLE <= tmp_p && tmp_p <= 0); - prob = LOG_ADD(prob, tmp_p); - - tmp_p = IMPOSSIBLE; - for(int i = h-TURN; i <= h-1; i++) { - if(i >= 0) { - float tmpScore = q1.ref(i,l); - tmpScore += tmp_begin; - tmpScore += expMLclosing + expMLintern[tt]; - tmp_p = LOG_ADD(tmp_p, tmpScore); - } - } - assert(IMPOSSIBLE <= tmp_p && tmp_p <= 0); - prob = LOG_ADD(prob, tmp_p); - } - else { - prob = IMPOSSIBLE; - } - - return prob; -} - -inline float -McCaskill:: -compPm(int i, int l) -{ - float tmpPm = IMPOSSIBLE; - - int *typeMatPointer = typeMat.getPointer(i,n_seq-1); - float *pPointer = p.getPointer(i,n_seq); - float *amPointer = am.getPointer(l+1,n_seq-1); - float *abPointer = ab.getPointer(i, n_seq); - for(int j = n_seq - 1; j >= l + TURN + 1; j--) { - int type = *typeMatPointer--; - pPointer--; - amPointer--; - abPointer--; - if(Beta::isCanonicalReducedPairCode(type)) { - float tmp = *pPointer; - tmp += *amPointer; - tmp += endStemScore(i, j); - tmpPm = LOG_ADD(tmpPm, tmp); - } - } - tmpPm += expMLintern[1]; - - return tmpPm; -} - -inline float -McCaskill:: -compPm1(int i, int l) -{ - float tmpPm1 = IMPOSSIBLE; - - int j = l + 1; - if(j <= n_seq-1) { - int type = typeMat.ref(i,j); - if(Beta::isCanonicalReducedPairCode(type)) { - float tmp = p.ref(i,j); - tmp += endStemScore(i, j); - tmpPm1 = tmp; - } - tmpPm1 += expMLintern[1]; - } - if(l+1 <= n_seq - 1) { - tmpPm1 = LOG_ADD(tmpPm1, am1.ref(i, l+1)); - } - - return tmpPm1; -} - -void -McCaskill:: -Outside() -{ - for(int h = 0; h <= n_seq - TURN - 2; h++) { - float *pPointer = p.getPointer(h, n_seq-1); - float *q1Pointer = q1.getPointer(h, n_seq-1); - float *am1Pointer = am1.getPointer(h, n_seq-1); - int *typePointer = typeMat.getPointer(h, n_seq-1); - for(int l = n_seq-1; l >= h + TURN + 1; l--) { - int tmpType = *typePointer--; - pv.ref(h,l) = *pPointer-- = compP(h,l,tmpType); - q1v.ref(h,l) = *q1Pointer-- = compPm(h,l); - am1v.ref(h,l) = *am1Pointer-- = compPm1(h,l); - - assert(p.ref(h,l) <= 0); - } - } -} - -void -McCaskill:: -printProbMat() -{ - int m = 0; - for(int i = 0; i < n_seq; i++) cout << " " << seq[i]; - cout << endl; - for(int i = 0; i < n_seq; i++) { - if(m < n_seq) { - cout << seq[m]; - } - for(int j = 0; j <= i-1; j++) { - if(j != i-1) cout << " "; - else cout << " "; - } - if(i != 0 && i != n_seq-1) { - cout << "\\"; - } - - for(int j = i; j < n_seq; j++) { - if(p.ref(i,j) > 0.01) { - - int type = Beta::getReducedPairCode(numSeq[i], numSeq[j]); - - if(!Beta::isCanonicalReducedPairCode(type)) { - cout << "\n" << seq[i] << " " << seq[j] << " " << exp(p.ref(i,j)) << endl; - } - - if(j != n_seq-1) { - cout << "* "; - } - else { - cout << "*"; - } - - } - else { - - if(j != n_seq-1) { - cout << " "; - } - else { - cout << " "; - } - - } - - } - if(m < n_seq) { - cout << seq[m++] << endl; - } - if(i == n_seq - 1) cout << endl; - } - for(int i = 0; i < n_seq; i++) cout << " " << seq[i]; - cout << endl; -} - -void -McCaskill:: -initParameter() -{ - float GT; - float RT_KCAL_MOL = McCaskill::T*McCaskill::GASCONST; - int len = 31; - - for(int i = 0; i < len; i++) { - GT = energyParam.getHairpin(i); - exphairpin[i] = -GT*10/RT_KCAL_MOL; - } - - for (int i = 0; i < len; i++) { - GT = energyParam.getBulge(i); - expbulge[i] = -GT*10/RT_KCAL_MOL; - GT = energyParam.getInternalLoop(i); - expinternalLoop[i] = -GT*10/RT_KCAL_MOL; - } - expinternalLoop[2] = -80*10/RT_KCAL_MOL; /* special case of size 2 interior loops (single mismatch) */ - - // float lxc = energy_param3::lxc37; - for (int i = 31; i < n_seq; i++) { - GT = energyParam.getHairpin(30) + (107.856*LOG((float)i/30)); - exphairpin[i] = -GT*10/RT_KCAL_MOL; - } - - for(int i = 0; i < 5; i++) { - GT = energyParam.getNinio(i); - for(int j = 0; j <= MAXLOOP; j++) { - expninio[i][j] = -MIN(energyParam.getMaxNinio(), j*GT)*10/RT_KCAL_MOL; - } - } - - for(int i = 0; i < 30; i++) { - GT = energyParam.getTetraLoopEnergy(i); - exptetraLoopEnergy[i] = -GT*10/RT_KCAL_MOL; - } - - /*no parameters for Triloop*/ - for(int i = 0; i < 2; i++) { - GT = 0; - exptriLoopEnergy[i] = -GT*10/RT_KCAL_MOL; - } - - GT = energyParam.getMLclosing(); - expMLclosing = -GT*10/RT_KCAL_MOL; - - for(int i = 0; i <= NBPAIRS; i++) { - GT = energyParam.getMLintern(); - expMLintern[i] = -GT*10/RT_KCAL_MOL; - } - - expTermAU = -energyParam.getTerminalAU()*10/RT_KCAL_MOL; - - GT = energyParam.getMLBase(); - for(int i = 0; i < len; i++) { - expMLbase[i] = -GT*10*(float)i/RT_KCAL_MOL; - } - - /* - if danlges = 0 just set their energy to 0, - don't let dangle energyies become > 0 (at large temps) - but make sure go smoothly to 0 - */ - for(int i = 0; i < 6; i++) { - for(int j =0; j < 4; j++) { - GT = energyParam.getDangle5(i,j); - expdangle5[i][j] = -GT*10/RT_KCAL_MOL; - GT = energyParam.getDangle3(i,j); - expdangle3[i][j] = -GT*10/RT_KCAL_MOL; - } - } - - /* stacking energies */ - for(int i = 0; i < 6; i++) { - for(int j = 0; j < 6; j++) { - GT = energyParam.getStack(i,j); - expStack[i][j] = -GT*10/RT_KCAL_MOL; - } - } - - /* mismatch energies */ - for (int i = 0; i < 6; i++) { - for (int j = 0; j < 16; j++) { - GT = energyParam.getTstackI(i, j); - // cout << i << " " << " " << j << " " << GT << endl; - expTstackI[i][j] = -GT*10/RT_KCAL_MOL; - GT = energyParam.getTstackH(i, j); - expTstackH[i][j] = -GT*10/RT_KCAL_MOL; - } - } - - /* interior loops of length 2*/ - for(int i = 0; i < 6; i++) { - for(int j = 0; j < 6; j++) { - for(int k = 0; k < 16; k++) { - GT = energyParam.getInt11(i, j, k); - expint11[i][j][k] = -GT*10/RT_KCAL_MOL; - } - } - } - - /* interior 2*1 loops */ - for(int i = 0; i < 6; i++) { - for(int j =0; j < 6; j++) { - for(int k = 0; k < 16; k++) { - for(int l = 0; l < 4; l++) { - GT = energyParam.getInt21(i,j,k,l); - expint21[i][j][k][l] = -GT*10/RT_KCAL_MOL; - } - } - } - } - - /* interior 2*2 loops */ - for (int i = 0; i < 6; i++) { - for(int j = 0; j < 6; j++) { - for(int k = 0; k < 16; k++) { - for(int l = 0; l < 16; l++) { - GT = energyParam.getInt22(i,j,k,l); - expint22[i][j][k][l] = -GT*10/RT_KCAL_MOL; - } - } - } - } -} - - -inline float -McCaskill:: -expHairpinEnergy(const int type, const int l, const int i, const int j) -{ - float q; - int k; - -// assert(l >= 0); - q = exphairpin[l]; - - if(l == 4) { - char temp_seq[7]; - - for(int iter = i - 1; iter < i + 5; iter++) { - temp_seq[iter - (i-1)] = seq[iter]; - } - temp_seq[6] = '\0'; - - for(k = 0; k < 30; k++) { - if(strcmp(temp_seq, energyParam.getTetraLoop(k)) == 0) break; - } - if(k != 30) { - q += exptetraLoopEnergy[k]; - } - } - if(l == 3) { - - /* no triloop bonus - char temp_seq[6]; - - for(int iter = i - 1; iter < i + 4; iter++) { - temp_seq[iter - (i-1)] = seq[iter]; - } - temp_seq[6] = '\0'; - for(k = 0; k < 2; k++) { - if(strcmp(temp_seq, energyParam.getTriLoop(k)) == 0) break; - } - if(k != 2) { - q *= exptriLoopEnergy[k]; - } - */ - - if(type != Beta::REDUCED_CG_CODE && type != Beta::REDUCED_GC_CODE) q += expTermAU; - } - else { - int type2 = Beta::getPairCode(numSeq[i], numSeq[j]); - q += expTstackH[type][type2]; - } - - return q; -} - - -inline float -McCaskill:: -expLoopEnergy(int u1, int u2, int type, int type2, - int si1, int sj1, int sp1, int sq1) -{ - float z = 0; - - if((u1 == 0) && (u2 == 0)) { z = expStack[type][type2]; } - else { - if((u1 == 0) || (u2 == 0)) { - int u; - if(u1 == 0) { u = u2; } - else { u = u1; } - z = expbulge[u]; - if(u1 + u2 == 1) z += expStack[type][type2]; - else { - if (type != Beta::REDUCED_CG_CODE && type != Beta::REDUCED_GC_CODE) z += expTermAU; - if (type2 != Beta::REDUCED_CG_CODE && type2 != Beta::REDUCED_GC_CODE) z += expTermAU; - } - } - else { - if(u1 + u2 == 2) { - z = expint11[type][type2][Beta::getPairCode(numSeq[si1], numSeq[sj1])]; - } - else if((u1 == 1) && (u2 == 2)) { - z = expint21[type][type2][Beta::getPairCode(numSeq[si1], numSeq[sj1])][numSeq[sq1]]; - } - else if((u1 == 2) && (u2 == 1)) { - z = expint21[type2][type][Beta::getPairCode(numSeq[sq1], numSeq[sp1])][numSeq[si1]]; - } - else if((u1 == 2) && (u2 == 2)) { - z = expint22[type][type2][Beta::getPairCode(numSeq[si1], numSeq[sj1])][Beta::getPairCode(numSeq[sp1], numSeq[sq1])]; - } - else { - z = expinternalLoop[u1 + u2] + - expTstackI[type][Beta::getPairCode(numSeq[si1], numSeq[sj1])] - + expTstackI[type2][Beta::getPairCode(numSeq[sq1], numSeq[sp1])]; - z += expninio[2][abs(u1-u2)]; - } - } - } - - return z; -} - -void -McCaskill:: -printExpEnergy() -{ - cout << "exphairpin:" << endl; - for(int i = 0; i < 31; i++) { - cout << exphairpin[i] << endl; - } - - cout << "expninio[5][32]:" << endl; - for(int i = 0; i < 5; i++) { - for(int j = 0; j < 32; j++) { - cout << expninio[i][j] << " "; - } - cout << endl; - } - - cout << "expdangle5[6][4]:" << endl; - for(int i = 0; i < 6; i++) { - for(int j = 0; j < 4; j++) { - cout << expdangle5[i][j] << " "; - } - cout << endl; - } - - cout << "expdangle3[6][4]:" << endl; - for(int i = 0; i < 6; i++) { - for(int j = 0; j < 4; j++) { - cout << expdangle3[i][j] << " "; - } - cout << endl; - } - - cout << "expinternalLoop[31]:" << endl; - for(int i = 0; i < 31; i++) { - cout << i << ":" << expinternalLoop[i] << endl; - } - cout << "expbulge[31]:" << endl; - for(int i = 0; i < 31; i++) { - cout << i << ":" << expbulge[i] << endl; - } - - cout << "exptriLoopEnergy[2]:" << endl; - for(int i = 0; i < 2; i++) { - cout << i << ":" << exptriLoopEnergy[i] << endl; - } - - cout << "exptetraLoopEnergy[15]" << endl; - for(int i = 0; i < 15; i++) { - cout << i << ":" << exptetraLoopEnergy[i] << endl; - } - - cout << "expStack[6][6]:" << endl; - for(int i = 0; i < 6; i++) { - for(int j = 0; j < 6; j++) { - cout << expStack[i][j] << " "; - } - cout << endl; - } - - cout << "expTstackH[6][16]:" << endl; - for(int i = 0; i < 6; i++) { - for(int j = 0; j < 16; j++) { - cout << expTstackH[i][j] << " "; - } - cout << endl; - } - - cout << "expTstackI[6][16]:" << endl; - for(int i = 0; i < 6; i++) { - for(int j = 0; j < 16; j++) { - cout << expTstackI[i][j] << " "; - } - cout << endl; - } - - cout << "expMLclosing=" << expMLclosing << endl; - cout << "expMLintern:" << endl; - for(int i = 0; i < 8; i++) { - cout << expMLintern[i] << " "; - } - cout << endl; - - cout << "expMLbase[31]:"; - for(int i = 0; i < 31; i++) { - cout << i << ":" << expMLbase[i] << endl; - } - - cout << "expint11[6][6][16]:"; - for(int i = 0; i < 6; i++) { - for(int j = 0; j < 6; j++) { - for(int k = 0; k < 16; k++) { - cout << expint11[i][j][k] << " "; - } - cout << endl; - } - cout << endl; - } - - cout << "expint21[6][6][16][4]:" << endl; - for(int i = 0; i < 6; i++) { - for(int j = 0; j < 6; j++) { - for(int k = 0; k < 16; k++) { - for(int l = 0; l < 4; l++) { - cout << expint21[i][j][k][l] << " "; - } - cout << endl; - } - cout << endl; - } - cout << endl; - } - - - cout << "expint22[6][6][16][16]:" << endl; - for(int i = 0; i < 6; i++) { - for(int j = 0; j < 6; j++) { - for(int k = 0; k < 16; k++) { - for(int l = 0; l < 16; l++) { - cout << expint22[i][j][k][l] << " "; - } - cout << endl; - } - cout << endl; - } - cout << endl; - } - -} - -} diff --git a/binaries/src/mafft/extensions/mxscarna_src/McCaskill.hpp b/binaries/src/mafft/extensions/mxscarna_src/McCaskill.hpp deleted file mode 100644 index 97ef7df..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/McCaskill.hpp +++ /dev/null @@ -1,202 +0,0 @@ - -#ifndef MCCAKILL_H -#define MCCAKILL_H - -//#define NDEBUG - -#include -#include -#include "nrutil.h" -#include -#include "Util.hpp" -#include "Beta.hpp" - -#include "energy_param.hpp" -//#include "energy_param3.hpp" - -#include "ScoreType.hpp" - - -using namespace std; -using namespace ProbCons; - -namespace MXSCARNA { -class McCaskill { - char *seq; - int *numSeq; - int n_seq; - static energy_param energyParam; - - Trimat a, q1, ab, am, am1, p; - TriVertMat q1v, abv, amv, am1v, pv; - Trimat typeMat; - - void printExpEnergy(); - void initParameter(); - void Inside(); - void Outside(); - void convertProbability(); - - inline float expHairpinEnergy(const int type, const int l, const int i, const int j); - inline float expLoopEnergy(int u1, int u2, int type, int type2, - int si1, int sj1, int sp1, int sq1); - - inline float compQb(int i, int j, int tmpType); - inline float compQm1(int i, int j, int tmpType); - inline float compQm(int i, int j); - inline float compQ1(int i, int j, int tmpType); - inline float compQ(int i, int j); - inline float compP(int h, int l, int tmpType); - inline float compPm(int i, int l); - inline float compPm1(int i, int l); - inline float beginStemScore(const int i, const int j) const; - inline float endStemScore(const int i, const int j) const; - - static const float GASCONST; - static const float T; - static const int MAXLOOP; - static const int TETRA_ENTH37; - static const int NBPAIRS; - static const int SCALE; - static const int TURN; - static float *exphairpin; - static float expninio[5][32]; - static float expdangle5[6][4]; - static float expdangle3[6][4]; - static float expinternalLoop[31]; - static float expbulge[31]; - static char exptriLoop[2][6]; - static float exptriLoopEnergy[2]; - static char exptetraLoop[30][7]; - static float exptetraLoopEnergy[30]; - static float expStack[6][6]; - static float expTstackH[6][16]; - static float expTstackI[6][16]; - static float expint11[6][6][16]; - static float expint21[6][6][16][4]; - static float expint22[6][6][16][16]; - static float expMLclosing; - static float expMLintern[8]; - static float expTermAU; - static float expMLbase[31]; - - public: - - McCaskill(int n, const char *mySeq) { - seq = new char[n + 1]; - numSeq = new int[n + 1]; - n_seq = 0; - - - for(int i = 0; i < n; i++) { - if (mySeq[i] == 'a' || mySeq[i] == 'A') { seq[n_seq] = 'A'; numSeq[n_seq] = Beta::A_CODE; n_seq++; } - else if(mySeq[i] == 't' || mySeq[i] == 'T' || - mySeq[i] == 'u' || mySeq[i] == 'U') { seq[n_seq] = 'U'; numSeq[n_seq] = Beta::U_CODE; n_seq++; } - else if(mySeq[i] == 'g' || mySeq[i] == 'G') { seq[n_seq] = 'G'; numSeq[n_seq] = Beta::G_CODE; n_seq++; } - else if(mySeq[i] == 'c' || mySeq[i] == 'C') { seq[n_seq] = 'C'; numSeq[n_seq] = Beta::C_CODE; n_seq++; } - else if(mySeq[i] == 'n' || mySeq[i] == 'N') { seq[n_seq] = 'N'; numSeq[n_seq] = Beta::N_CODE; n_seq++; } - else if(mySeq[i] == '.' || mySeq[i] == '-') { seq[n_seq] = '-'; numSeq[n_seq] = Beta::GAP_CODE; n_seq++; } - else { seq[n_seq] = mySeq[i]; numSeq[n_seq] = Beta::INVALID_CODE; n_seq++; } - } - seq[n_seq] = '\0'; - a.Allocator(n_seq); - q1.Allocator(n_seq); - ab.Allocator(n_seq); - am.Allocator(n_seq); - am1.Allocator(n_seq); - p.Allocator(n_seq); - q1v.Allocator(n_seq); - abv.Allocator(n_seq); - amv.Allocator(n_seq); - am1v.Allocator(n_seq); - pv.Allocator(n_seq); - typeMat.Allocator(n_seq); - - if(n_seq > 31) { - exphairpin = new float[n_seq + 1]; - } - else { - exphairpin = new float[31]; - } - - for(int i = 0; i < n_seq; i++) { - for(int j = i; j < n_seq; j++) { - a.ref(i,j) = q1.ref(i,j) = IMPOSSIBLE; - q1v.ref(i,j) = IMPOSSIBLE; - } - } - - for(int i = 0; i < n_seq; i++) { - a.ref(i,i) = 0.0; - q1.ref(i,i) = IMPOSSIBLE; - q1v.ref(i,i) = IMPOSSIBLE; - } - - for(int i = 0; i < n_seq-1; i++) { - a.ref(i,i+1) = 0.0; - q1.ref(i,i+1) = IMPOSSIBLE; - q1v.ref(i,i+1) = IMPOSSIBLE; - } - - for(int i = 0; i < n_seq-2; i++) { - a.ref(i,i+2) = 0.0; - q1.ref(i,i+2) = IMPOSSIBLE; - q1v.ref(i,i+2) = IMPOSSIBLE; - } - - for(int i = 0; i < n_seq-3; i++) { - a.ref(i,i+3) = 0.0; - q1.ref(i,i+3) = IMPOSSIBLE; - q1v.ref(i,i+3) = IMPOSSIBLE; - - } - - for(int i = 0; i < n_seq; i++) { - for(int j = i; j < n_seq; j++) { - ab.ref(i,j) = am.ref(i,j) = am1.ref(i,j) = p.ref(i,j) = IMPOSSIBLE; - abv.ref(i,j) = amv.ref(i,j) = am1v.ref(i,j) = pv.ref(i,j) = IMPOSSIBLE; - } - } - - /* the type of base pair */ - /* C <-> G : type 1 */ - /* G <-> C : type 2 */ - /* G <-> U : type 3 */ - /* U <-> G : type 5 */ - /* A <-> U : type 0 */ - /* U <-> A : type 4 */ - /* ? <-> ? : type 6 */ - for(int i = 0; i < n_seq; i++) { - for(int j = i; j < n_seq; j++) { - typeMat.ref(i,j) = Beta::getReducedPairCode(numSeq[i], numSeq[j]); - } - } - - } - - /*------------------------------------------------------------------------*/ - /* dangling ends should never be destabilizing, i.e. expdangle>=1 */ - /* specific heat needs smooth function (2nd derivative) */ - /* we use a*(sin(x+b)+1)^2, with a=2/(3*sqrt(3)), b=Pi/6-sqrt(3)/2, */ - /* in the interval b0.8660254)?(X): - SCALE*0.38490018*(sin((X)/SCALE-0.34242663)+1)*(sin((X)/SCALE-0.34242663)+1)); - } - - ~McCaskill() { - delete[] seq; - delete[] numSeq; - delete[] exphairpin; - } - - void calcPartitionFunction(); - void printProbMat(); - - inline float getProb(const int i, const int j) const { - // 0 origin : 0..(n-1) - return p.ref(i, j); - } -}; -} -#endif // MCCASKILL_H diff --git a/binaries/src/mafft/extensions/mxscarna_src/README b/binaries/src/mafft/extensions/mxscarna_src/README deleted file mode 100644 index 0578545..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/README +++ /dev/null @@ -1,129 +0,0 @@ -1.Program name - MXSCARNA - -2.Author - Yasuo Tabei - - Department of Computational Biology, - Graduate School of Frontier Science, - The University of Tokyo - and - Computational Biology Research Center (CBRC), - National Institute of Advanced Industrial Science and Technology (AIST) - - E-mail: scarna@m.aist.go.jp - -3.What is MXSCARNA - MXSCARNA (Multiplex Stem Candidate Aligner for RNAs) is a tool for - fast structural multiple alignment of RNA sequences using progressive - alignment based on pairwise structural alignment algorithm of SCARNA. - -4.License - While its original source code is provided as free software, MXSCARNA - contains the source codes of ProbCons and Rfold and the energy parameters - of Vienna RNA package (version 1.5). - The author thanks Dr. Chuong Do, Dr. Hisanori Kiryu and Dr. Ivo Hofacker, - the authors of ProbCons, Rfold and Vienna RNA package respectively, - and Institute for Theoretical Chemistry of the University of Vienna. - - The source code of Rfold is located in ./src/rfold-0.1, which includes - energy parameters of Vienna RNA package in ./src/rfold-0.1/src/vienna. - Energy parameters of Vienna RNA package are also included in the source - code of MXSCARNA (./src/vienna). Please follow ./src/rfold-0.1/readme.txt - file, which describes the license of Rfold, and - ./src/rfold-0.1/src/vienna/COPYING file and ./src/vienna/COPYING file, - which describe the copyright notice of the Vienna RNA package. - The source code of ProbCons is located in ./src/probconsRNA. Please follow - ./src/probcons/README. - - The original part of MXSCARNA is provided as free software. It is - distributed in the hope that it will be useful but WITHOUT ANY WARRANTY; - without even the implied warranty of MERCHANTABILITY or FITNESS FOR A - PARTICULAR PURPOSE. - - Permission is granted for research, educational, and commercial use - and modification so long as - 1) the package and any derived works are not redistributed for any fee, - other than media costs, - 2) proper credit is given to - the authors of MXSCARNA, ProbCons, Rfold and Vienna RNA package, - the Univeristy of Tokyo, - Computational Biology Research Center (CBRC), AIST - and Institute for Theoretical Chemistry of the University of Vienna. - - If you want to include this software in a commercial product, please - contact the author. - -5.Citation - Yasuo Tabei, Hisanori Kiryu, Taishin Kin, Kiyoshi Asai: - "A fast structural multiple alignment method for long RNA sequences," - BMC bioinformatics, to appear. - -6.References - - Do, C.B., Mahabhashyam, M.S.P., Brudno, M., and Batzoglou, S. 2005. - PROBCONS: Probabilistic Consistency-based Multiple Sequence Alignment. - Genome Research 15: 330-340. - - Hisanori Kiryu, Taishin Kin, and Kiyoshi Asai - Rfold: An exact algorithm for computing local base pairing probabilities - Bioinformatics, Advance Access published on December 4, 2007; - doi:10.1093/bioinformatics/btm591 - - Ivo L. Hofacker - Vienna RNA secondary structure server - Nucleic Acids Res., Jul 2003; 31: 3429 - 3431. - - Yasuo Tabei, Koji Tsuda, Taishin Kin, and Kiyoshi Asai - SCARNA: fast and accurate structural alignment of RNA sequences by matching fixed-length stem fragments - Bioinformatics 2006 22(14):1723-1729. - -7.Install - The program was tested using gcc 3.3.3 on linux machines and gcc 3.4 on - cygwin Some gcc specific features are currently used. - - The command to compile this software is as follows: - - make - cd program - -8.Usage - - ./mxscarna [options] seqfile - - seqfile: - sequence file is multi fasta format. - - options: - -clustalw - use CLUSTALW output format instead of MFA - - -stockholm - use STOCKHOLM output format instead of MFA - - -mxscarna - use original output format instead of MFA - - -l - the length of stem candidates (default:2) - - -b - the threshold of base-pairing probability (default:0.01) - - -g - the control parameter of the prediction of base-pairs, (default:6) - - -rfold - use Rfold instead of global McCaskill algorithm to calcurate base - paring probality matrices, (default: off) - - -w - the control parameter of the distance of stem candidates, (default:500) - -9.Example - ./mxscarna -mxscarna ../sample/trna.mfa - -10.Version History -1. 1/16/2008 (Yasuo Tabei) --- MXSCARNA ver 2.0 release - - Rfold was included. \ No newline at end of file diff --git a/binaries/src/mafft/extensions/mxscarna_src/ScoreType.hpp b/binaries/src/mafft/extensions/mxscarna_src/ScoreType.hpp deleted file mode 100644 index 46aa698..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/ScoreType.hpp +++ /dev/null @@ -1,340 +0,0 @@ -///////////////////////////////////////////////////////////////// -// ScoreType.h -// -// Routines for doing math operations in PROBCONS. -///////////////////////////////////////////////////////////////// - -#ifndef SCORETYPE_H -#define SCORETYPE_H - -#include -#include -#include -#include - -typedef float ScoreType; - -const float LOG_ZERO = -2e20; -const float LOG_ONE = 0.0; - -///////////////////////////////////////////////////////////////// -// LOG() -// -// Compute the logarithm of x. -///////////////////////////////////////////////////////////////// - -inline ScoreType LOG (ScoreType x){ - return log (x); -} - -///////////////////////////////////////////////////////////////// -// EXP() -// -// Computes exp(x). -///////////////////////////////////////////////////////////////// - -inline ScoreType EXP (ScoreType x){ - //return exp(x); - if (x > -2){ - if (x > -0.5){ - if (x > 0) - return exp(x); - return (((0.03254409303190190000*x + 0.16280432765779600000)*x + 0.49929760485974900000)*x + 0.99995149601363700000)*x + 0.99999925508501600000; - } - if (x > -1) - return (((0.01973899026052090000*x + 0.13822379685007000000)*x + 0.48056651562365000000)*x + 0.99326940370383500000)*x + 0.99906756856399500000; - return (((0.00940528203591384000*x + 0.09414963667859410000)*x + 0.40825793595877300000)*x + 0.93933625499130400000)*x + 0.98369508190545300000; - } - if (x > -8){ - if (x > -4) - return (((0.00217245711583303000*x + 0.03484829428350620000)*x + 0.22118199801337800000)*x + 0.67049462206469500000)*x + 0.83556950223398500000; - return (((0.00012398771025456900*x + 0.00349155785951272000)*x + 0.03727721426017900000)*x + 0.17974997741536900000)*x + 0.33249299994217400000; - } - if (x > -16) - return (((0.00000051741713416603*x + 0.00002721456879608080)*x + 0.00053418601865636800)*x + 0.00464101989351936000)*x + 0.01507447981459420000; - return 0; -} - -/* -///////////////////////////////////////////////////////////////// -// LOOKUP() -// -// Computes log (exp (x) + 1), for 0 <= x <= 7.5. -///////////////////////////////////////////////////////////////// - -inline ScoreType LOOKUP (ScoreType x){ - //return log (exp(x) + 1); - if (x < 2){ - if (x < 0.5){ - if (x < 0) - return log (exp(x) + 1); - return (((-0.00486373205785640000*x - 0.00020245408813934800)*x + 0.12504222666029800000)*x + 0.49999685320563000000)*x + 0.69314723138948900000; - } - if (x < 1) - return (((-0.00278634205460548000*x - 0.00458097251248546000)*x + 0.12865849880472500000)*x + 0.49862228499205200000)*x + 0.69334810088688000000; - return (((0.00059633755154209200*x - 0.01918996666063320000)*x + 0.15288232492093800000)*x + 0.48039958825756900000)*x + 0.69857578503189200000; - } - if (x < 8){ - if (x < 4) - return (((0.00135958539181047000*x - 0.02329807659316430000)*x + 0.15885799609532100000)*x + 0.48167498563270800000)*x + 0.69276185058669200000; - return (((0.00011992394456683500*x - 0.00338464503306568000)*x + 0.03622746366545470000)*x + 0.82481250248383700000)*x + 0.32507892994863100000; - } - if (x < 16) - return (((0.00000051726300753785*x - 0.00002720671238876090)*x + 0.00053403733818413500)*x + 0.99536021775747900000)*x + 0.01507065715532010000; - return x; -} - -///////////////////////////////////////////////////////////////// -// LOOKUP_SLOW() -// -// Computes log (exp (x) + 1). -///////////////////////////////////////////////////////////////// - -inline ScoreType LOOKUP_SLOW (ScoreType x){ - return log (exp (x) + 1); -} - -///////////////////////////////////////////////////////////////// -// MAX() -// -// Compute max of three numbers -///////////////////////////////////////////////////////////////// - -inline ScoreType MAX (ScoreType x, ScoreType y, ScoreType z){ - if (x >= y){ - if (x >= z) - return x; - return z; - } - if (y >= z) - return y; - return z; -} - -///////////////////////////////////////////////////////////////// -// LOG_PLUS_EQUALS() -// -// Add two log probabilities and store in the first argument -///////////////////////////////////////////////////////////////// - -inline void LOG_PLUS_EQUALS (ScoreType &x, ScoreType y){ - if (x < y) - x = (x <= LOG_ZERO) ? y : LOOKUP(y-x) + x; - else - x = (y <= LOG_ZERO) ? x : LOOKUP(x-y) + y; -} - -///////////////////////////////////////////////////////////////// -// LOG_PLUS_EQUALS_SLOW() -// -// Add two log probabilities and store in the first argument -///////////////////////////////////////////////////////////////// - -inline void LOG_PLUS_EQUALS_SLOW (ScoreType &x, ScoreType y){ - if (x < y) - x = (x <= LOG_ZERO) ? y : LOOKUP_SLOW(y-x) + x; - else - x = (y <= LOG_ZERO) ? x : LOOKUP_SLOW(x-y) + y; -} - -///////////////////////////////////////////////////////////////// -// LOG_ADD() -// -// Add two log probabilities -///////////////////////////////////////////////////////////////// - -inline ScoreType LOG_ADD (ScoreType x, ScoreType y){ - if (x < y) return (x <= LOG_ZERO) ? y : LOOKUP(y-x) + x; - return (y <= LOG_ZERO) ? x : LOOKUP(x-y) + y; -} -*/ - -/* -///////////////////////////////////////////////////////////////// -// LOG() -// -// Compute the logarithm of x. -///////////////////////////////////////////////////////////////// - -inline float LOG (float x){ - return log (x); -} - -///////////////////////////////////////////////////////////////// -// EXP() -// -// Computes exp(x), fr -4.6 <= x <= 0. -///////////////////////////////////////////////////////////////// - -inline float EXP (float x){ - assert (x <= 0.00f); - if (x < EXP_UNDERFLOW_THRESHOLD) return 0.0f; - return (((0.006349841068584 * x + 0.080775412572352) * x + 0.397982026296272) * x + 0.95279335963787f) * x + 0.995176455837312f; - //return (((0.00681169825657f * x + 0.08386267698832f) * x + 0.40413983195844f) * x + 0.95656674979767f) * x + 0.99556744049130f; -} -*/ - -const float EXP_UNDERFLOW_THRESHOLD = -4.6; -const float LOG_UNDERFLOW_THRESHOLD = 7.5; - -///////////////////////////////////////////////////////////////// -// LOOKUP() -// -// Computes log (exp (x) + 1), for 0 <= x <= 7.5. -///////////////////////////////////////////////////////////////// - -inline float LOOKUP (float x){ - assert (x >= 0.00f); - assert (x <= LOG_UNDERFLOW_THRESHOLD); - //return ((-0.00653779113685f * x + 0.09537236626558f) * x + 0.55317574459331f) * x + 0.68672959851568f; - if (x <= 1.00f) return ((-0.009350833524763f * x + 0.130659527668286f) * x + 0.498799810682272f) * x + 0.693203116424741f; - if (x <= 2.50f) return ((-0.014532321752540f * x + 0.139942324101744f) * x + 0.495635523139337f) * x + 0.692140569840976f; - if (x <= 4.50f) return ((-0.004605031767994f * x + 0.063427417320019f) * x + 0.695956496475118f) * x + 0.514272634594009f; - assert (x <= LOG_UNDERFLOW_THRESHOLD); - return ((-0.000458661602210f * x + 0.009695946122598f) * x + 0.930734667215156f) * x + 0.168037164329057f; - - //return (((0.00089738532761f * x - 0.01859488697982f) * x + 0.14415772028626f) * x + 0.49515490689159f) * x + 0.69311928966454f; -} - -///////////////////////////////////////////////////////////////// -// LOOKUP_SLOW() -// -// Computes log (exp (x) + 1). -///////////////////////////////////////////////////////////////// - -inline float LOOKUP_SLOW (float x){ - return log (exp (x) + 1); -} - -///////////////////////////////////////////////////////////////// -// MAX() -// -// Compute max of three numbers -///////////////////////////////////////////////////////////////// - -inline float MAX (float x, float y, float z){ - if (x >= y){ - if (x >= z) - return x; - return z; - } - if (y >= z) - return y; - return z; -} - -///////////////////////////////////////////////////////////////// -// LOG_PLUS_EQUALS() -// -// Add two log probabilities and store in the first argument -///////////////////////////////////////////////////////////////// - -inline void LOG_PLUS_EQUALS (float &x, float y){ - if (x < y) - x = (x == LOG_ZERO || y - x >= LOG_UNDERFLOW_THRESHOLD) ? y : LOOKUP(y-x) + x; - else - x = (y == LOG_ZERO || x - y >= LOG_UNDERFLOW_THRESHOLD) ? x : LOOKUP(x-y) + y; -} - -///////////////////////////////////////////////////////////////// -// LOG_PLUS_EQUALS_SLOW() -// -// Add two log probabilities and store in the first argument -///////////////////////////////////////////////////////////////// - -inline void LOG_PLUS_EQUALS_SLOW (float &x, float y){ - if (x < y) - x = (x == LOG_ZERO) ? y : LOOKUP_SLOW(y-x) + x; - else - x = (y == LOG_ZERO) ? x : LOOKUP_SLOW(x-y) + y; -} - -///////////////////////////////////////////////////////////////// -// LOG_ADD() -// -// Add two log probabilities -///////////////////////////////////////////////////////////////// - -inline float LOG_ADD (float x, float y){ - if (x < y) return (x == LOG_ZERO || y - x >= LOG_UNDERFLOW_THRESHOLD) ? y : LOOKUP(y-x) + x; - return (y == LOG_ZERO || x - y >= LOG_UNDERFLOW_THRESHOLD) ? x : LOOKUP(x-y) + y; -} - - -///////////////////////////////////////////////////////////////// -// LOG_ADD() -// -// Add three log probabilities -///////////////////////////////////////////////////////////////// - -inline float LOG_ADD (float x1, float x2, float x3){ - return LOG_ADD (x1, LOG_ADD (x2, x3)); -} - -///////////////////////////////////////////////////////////////// -// LOG_ADD() -// -// Add four log probabilities -///////////////////////////////////////////////////////////////// - -inline float LOG_ADD (float x1, float x2, float x3, float x4){ - return LOG_ADD (x1, LOG_ADD (x2, LOG_ADD (x3, x4))); -} - -///////////////////////////////////////////////////////////////// -// LOG_ADD() -// -// Add five log probabilities -///////////////////////////////////////////////////////////////// - -inline float LOG_ADD (float x1, float x2, float x3, float x4, float x5){ - return LOG_ADD (x1, LOG_ADD (x2, LOG_ADD (x3, LOG_ADD (x4, x5)))); -} - -///////////////////////////////////////////////////////////////// -// LOG_ADD() -// -// Add siz log probabilities -///////////////////////////////////////////////////////////////// - -inline float LOG_ADD (float x1, float x2, float x3, float x4, float x5, float x6){ - return LOG_ADD (x1, LOG_ADD (x2, LOG_ADD (x3, LOG_ADD (x4, LOG_ADD (x5, x6))))); -} - -///////////////////////////////////////////////////////////////// -// LOG_ADD() -// -// Add seven log probabilities -///////////////////////////////////////////////////////////////// - -inline float LOG_ADD (float x1, float x2, float x3, float x4, float x5, float x6, float x7){ - return LOG_ADD (x1, LOG_ADD (x2, LOG_ADD (x3, LOG_ADD (x4, LOG_ADD (x5, LOG_ADD (x6, x7)))))); -} - -///////////////////////////////////////////////////////////////// -// ChooseBestOfThree() -// -// Store the largest of three values x1, x2, and x3 in *x. Also -// if xi is the largest value, then store bi in *b. -///////////////////////////////////////////////////////////////// - -inline void ChooseBestOfThree (float x1, float x2, float x3, char b1, char b2, char b3, float *x, char *b){ - if (x1 >= x2){ - if (x1 >= x3){ - *x = x1; - *b = b1; - return; - } - *x = x3; - *b = b3; - return; - } - if (x2 >= x3){ - *x = x2; - *b = b2; - return; - } - *x = x3; - *b = b3; -} -#endif diff --git a/binaries/src/mafft/extensions/mxscarna_src/StemCandidate.hpp b/binaries/src/mafft/extensions/mxscarna_src/StemCandidate.hpp deleted file mode 100644 index e1678d6..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/StemCandidate.hpp +++ /dev/null @@ -1,129 +0,0 @@ -///////////////////////////////////////////////////////////// -// StemCandidate.hpp -// Profile Stem Candidate calcurated by profile base pairing -// probability matrix -//////////////////////////////////////////////////////////// - -#ifndef __STEMCANDIDATE_HPP__ -#define __STEMCANDIDATE_HPP__ - -#include -#include - -using namespace std; - -namespace MXSCARNA { -class StemCandidate { -private: - int numSeq; /* the number of sequences in the profile */ - int length; /* length of profile stem candidate of fixed length */ - int position; /* 5' start position of SC in profile */ - int distance; - std::vector substr; /* profile base string of SC */ - std::vector rvstr; /* profile base string of stem partner of SC */ - int rvposition; /* 3' end position of stem partner of SC */ - int rvscnumber; /* SC number of stem partner */ - int contPos; /* previous stem that corresponds continuous stem and has position -1. */ - int beforePos; /* most recent stem that doesn't overlap to SC and has position -len. */ - float score; /* score of the sum of base pairing probability matrix */ - std::vector baseScore; - float stacking; /* the mean of stacking energy */ - float stemStacking; /* the mean of 1-continuous stacking energy */ - -public: - StemCandidate() : numSeq(0), length(0), position(0), distance(0), - rvposition(0), rvscnumber(0), contPos(-1), beforePos(0), - score(0), stacking(0), stemStacking(0) {} - StemCandidate(int numSeq, int length) : numSeq(numSeq), length(length), - substr(numSeq), rvstr(numSeq), - contPos(-1) { } - - void SetNumSeq(int num) { numSeq = num; } - void SetLength(int len) { length = len; } - void SetNumSubstr(int num) { - substr.resize(num); - for(int i = 0; i < num; i++) { - string &tmpStr = substr[i]; - tmpStr = ""; - substr[i] = tmpStr; - } - } - void SetNumRvstr(int num) { - rvstr.resize(num); - - for(int i = 0; i < num; i++) { - string &tmpStr = rvstr[i]; - tmpStr = ""; - rvstr[i] = tmpStr; - } - } - void SetPosition(int pos) { position = pos; } - - void AddSubstr(int num, char word) { - std::string &tmpStr = substr[num]; - tmpStr += word; - substr[num] = tmpStr; - } - - void AddRvstr(int num, char word) { - std::string &tmpStr = rvstr[num]; - tmpStr += word; - rvstr[num] = tmpStr; - } - - void AddBaseScore(float score) { - baseScore.push_back(score); - } - - void SetRvposition(int pos) { rvposition = pos; } - void SetRvscnumber(int num) { rvscnumber = num; } - void SetContPos(int pos) { contPos = pos; } - void SetBeforePos(int pos) { beforePos = pos; } - void SetDistance(int d) { distance = d; } - void SetScore(float s) { score = s; } - void AddScore(float s) { score += s; } - void SetStacking(float s) { stacking = s; } - void AddStacking(float s) { stacking += s; } - void SetStemStacking(float s) { stemStacking = s; } - int GetNumSeq() const { return numSeq; } - int GetLength() const { return length; } - int GetPosition() const { return position; } - - string GetSubstr(int num) const { - const std::string &tmpStr = substr[num]; - return tmpStr; - } - string GetRvstr(int num) const { - const std::string &tmpStr = rvstr[num]; - return tmpStr; - } - float GetBaseScore(int i) const { - return baseScore[i]; - } - int GetRvposition() const { - return rvposition; - } - int GetRvscnumber() const { - return rvscnumber; - } - int GetContPos() const { - return contPos; - } - int GetBeforePos() const { - return beforePos; - } - int GetDistance() const { - return distance; - } - float GetScore() const { - return score; - } - float GetStacking() const { - return stacking; - } - float GetStemStacking() const { - return stemStacking; - } -}; -} -#endif // __STEMCANDIDATE_HPP__ diff --git a/binaries/src/mafft/extensions/mxscarna_src/Util.hpp b/binaries/src/mafft/extensions/mxscarna_src/Util.hpp deleted file mode 100644 index eab7667..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/Util.hpp +++ /dev/null @@ -1,102 +0,0 @@ -#ifndef UTIL_H -#define UTIL_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -//#include // mingw de error, by katoh -#include - -namespace ProbCons { - -const double IMPOSSIBLE = -FLT_MAX + 1000; -const double IMPOSSIBLEDBL = -DBL_MAX + 10000; - -namespace MXSCARNA { -template -inline bool -IsPossible(const T& v) { - return (v > (IMPOSSIBLE + 1.0e-5)); -} - -template -inline T -logSum(const T& a, const T& b) -{ - if (a >= b) { - return a + log(1.0 + exp(b - a)); - } else { - return b + log(1.0 + exp(a - b)); - } -} - -template -inline T -logSub(const T&a, const T& b) -{ - if(a > b) { - return log(exp(a) - exp(b)); - } - else { - return log(exp(a) - exp(b)); - } -} - -template -inline T -logSum(const T& a, const T& b, const T& c) -{ - if (a >= b) { - if( a >= c ) { - return a + log(1.0 + (exp(b - a) + exp(c - a))); - } - else { - if( b >= c) { - return b + log(exp(a - b) + 1.0 + exp(c - b)); - } - } - } - return c + log(exp(a - c) + exp(b - c) + 1.0); -} - -} - -template -inline T -logSumExp(const T& x, const T& y) -{ - if(x == y) return x + 0.69314718055; - double vmin = std::min(x, y); - double vmax = std::max(x, y); - - if (vmax > vmin + 50) { - return vmax; - } - else { - return vmax + std::log (std::exp (vmin - vmax) + 1.0); - } -} -} -#endif /* UTIL_H */ diff --git a/binaries/src/mafft/extensions/mxscarna_src/config.h b/binaries/src/mafft/extensions/mxscarna_src/config.h deleted file mode 100644 index 51c27b8..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/config.h +++ /dev/null @@ -1,86 +0,0 @@ -/* config.h. Generated by configure. */ -/* config.h.in. Generated from configure.in by autoheader. */ - -/* Define to 1 if you have the `erand48' function. */ -#define HAVE_ERAND48 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_INTTYPES_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_MALLOC_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_MEMORY_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STDINT_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STDLIB_H 1 - -/* Define to 1 if you have the `strchr' function. */ -#define HAVE_STRCHR 1 - -/* Define to 1 if you have the `strdup' function. */ -#define HAVE_STRDUP 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STRINGS_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STRING_H 1 - -/* Define to 1 if you have the `strstr' function. */ -#define HAVE_STRSTR 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_STAT_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_TYPES_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_UNISTD_H 1 - -/* Name of package */ -#define PACKAGE "ViennaRNA" - -/* Define to the address where bug reports for this package should be sent. */ -#define PACKAGE_BUGREPORT "rna@tbi.univie.ac.at" - -/* Define to the full name of this package. */ -#define PACKAGE_NAME "ViennaRNA" - -/* Define to the full name and version of this package. */ -#define PACKAGE_STRING "ViennaRNA 1.6.1" - -/* Define to the one symbol short name of this package. */ -#define PACKAGE_TARNAME "ViennaRNA" - -/* Define to the version of this package. */ -#define PACKAGE_VERSION "1.6.1" - -/* Define to 1 if you have the ANSI C header files. */ -#define STDC_HEADERS 1 - -/* only for gcc */ -#define UNUSED __attribute__ ((unused)) - -/* Version number of package */ -#define VERSION "1.6.1" - -/* Define if using the dmalloc debugging malloc package */ -/* #undef WITH_DMALLOC */ - -/* Define to empty if `const' does not conform to ANSI C. */ -/* #undef const */ - -/* Define to `__inline__' or `__inline' if that's what the C compiler - calls it, or to nothing if 'inline' is not supported under any name. */ -#ifndef __cplusplus -/* #undef inline */ -#endif - -/* Define to `unsigned' if does not define. */ -/* #undef size_t */ diff --git a/binaries/src/mafft/extensions/mxscarna_src/nrutil.h b/binaries/src/mafft/extensions/mxscarna_src/nrutil.h deleted file mode 100644 index 3a33874..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/nrutil.h +++ /dev/null @@ -1,991 +0,0 @@ -/* - McCaskill's Algorithm -- The algorithm calculates a base paring probability matrix from the input of one sequence. - - $Id: nrutil.h,v 1.0 2005/10/20 14:22 $; - - Copyright (C) 2005 Yasuo Tabei - - This is free software with ABSOLUTELY NO WARRANTY. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ - -#ifndef _NR_UTIL_H_ -#define _NR_UTIL_H_ -#include -#include -#include -#include -#include // by katoh - -using namespace std; - -typedef double DP; - -template -inline const T SQR(const T a) {return a*a;} - -template -inline const T MAX(const T &a, const T &b) -{return b > a ? (b) : (a);} - -inline float MAX(const double &a, const float &b) -{return b > a ? (b) : float(a);} - -inline float MAX(const float &a, const double &b) -{return b > a ? float(b) : (a);} - -template -inline const T MIN(const T &a, const T &b) -{return b < a ? (b) : (a);} - -inline float MIN(const double &a, const float &b) -{return b < a ? (b) : float(a);} - -inline float MIN(const float &a, const double &b) -{return b < a ? float(b) : (a);} - -template -inline const T SIGN(const T &a, const T &b) -{return b >= 0 ? (a >= 0 ? a : -a) : (a >= 0 ? -a : a);} - -inline float SIGN(const float &a, const double &b) -{return b >= 0 ? (a >= 0 ? a : -a) : (a >= 0 ? -a : a);} - -inline float SIGN(const double &a, const float &b) -{return b >= 0 ? (a >= 0 ? a : -a) : (a >= 0 ? -a : a);} - -template -inline void SWAP(T &a, T &b) -{T dum=a; a=b; b=dum;} -namespace NR { - inline void nrerror(const string error_text) -// Numerical Recipes standard error handler - { - cerr << "Numerical Recipes run-time error..." << endl; - cerr << error_text << endl; - cerr << "...now exiting to system..." << endl; - exit(1); - } -} - -template -class NRVec { - private: - int nn; // size of array. upper index is nn-1 - T *v; - public: - NRVec(); - explicit NRVec(int n); // Zero-based array - NRVec(const T &a, int n); //initialize to constant value - NRVec(const T *a, int n); // Initialize to array - NRVec(const NRVec &rhs); // Copy constructor - NRVec & operator=(const NRVec &rhs); //assignment - NRVec & operator=(const T &a); //assign a to every element - inline T & operator[](const int i); //i¡Çth element - inline const T & operator[](const int i) const; - void Allocator(int i); - inline int size() const; - ~NRVec(); -}; - -template -NRVec::NRVec() : nn(0), v(0) {} - -template -NRVec::NRVec(int n) : nn(n), v(new T[n]) {} - -template -NRVec::NRVec(const T& a, int n) : nn(n), v(new T[n]) -{ - for(int i=0; i -NRVec::NRVec(const T *a, int n) : nn(n), v(new T[n]) -{ -for(int i=0; i -void NRVec::Allocator(int n = 0) -{ - v = new T[n]; -} - -template -NRVec::NRVec(const NRVec &rhs) : nn(rhs.nn), v(new T[nn]) -{ - for(int i=0; i -NRVec & NRVec::operator=(const NRVec &rhs) -// postcondition: normal assignment via copying has been performed; -// if vector and rhs were different sizes, vector -// has been resized to match the size of rhs -{ - if (this != &rhs) -{ - if (nn != rhs.nn) { - if (v != 0) delete [] (v); - nn=rhs.nn; - v= new T[nn]; - } - for (int i=0; i -NRVec & NRVec::operator=(const T &a) //assign a to every element -{ - for (int i=0; i -inline T & NRVec::operator[](const int i) //subscripting -{ - return v[i]; -} - -template -inline const T & NRVec::operator[](const int i) const //subscripting -{ - return v[i]; -} - -template -inline int NRVec::size() const -{ - return nn; -} - -template -NRVec::~NRVec() -{ - if (v != 0) - delete[] (v); -} - -template -class NRMat { - private: - int nn; - int mm; - T **v; - public: - NRMat(); - NRMat(int n, int m); // Zero-based array - NRMat(const T &a, int n, int m); //Initialize to constant - NRMat(const T *a, int n, int m); // Initialize to array - NRMat(const NRMat &rhs); // Copy constructor - void Allocator(int n, int m); - void Allocator(const T &a, int n, int m); - void Allocator(const T *a, int n, int m); - NRMat & operator=(const NRMat &rhs); //assignment - NRMat & operator=(const T &a); //assign a to every element - inline T* operator[](const int i); //subscripting: pointer to row i - inline const T* operator[](const int i) const; - inline T & ref(const int i, const int j); - inline const T ref(const int i, const int j) const; - inline int nrows() const; - inline int ncols() const; - ~NRMat(); -}; - -template -NRMat::NRMat() : nn(0), mm(0), v(0) {} - -template -NRMat::NRMat(int n, int m) : nn(n), mm(m), v(new T*[n]) -{ - v[0] = new T[m*n]; - for (int i=1; i< n; i++) - v[i] = v[i-1] + m; -} - -template -NRMat::NRMat(const T &a, int n, int m) : nn(n), mm(m), v(new T*[n]) -{ - int i,j; - v[0] = new T[m*n]; - for (i=1; i< n; i++) - v[i] = v[i-1] + m; - for (i=0; i< n; i++) - for (j=0; j -NRMat::NRMat(const T *a, int n, int m) : nn(n), mm(m), v(new T*[n]) -{ - int i,j; - v[0] = new T[m*n]; - for (i=1; i< n; i++) - v[i] = v[i-1] + m; - for (i=0; i< n; i++) - for (j=0; j -void NRMat::Allocator(int n, int m) -{ - if( v != 0 ) { - delete[] (v[0]); delete (v); - } - - nn = n; mm = m; v = new T*[n]; - - v[0] = new T[m*n]; - for (int i=1; i< n; i++) - v[i] = v[i-1] + m; -} - -template -void NRMat::Allocator(const T &a, int n, int m) -{ - if( v != 0 ) { - delete[] (v[0]); delete (v); - } - - int i,j; - - nn = n; mm = m; v = new T*[n]; - - v[0] = new T[m*n]; - for (i=1; i< n; i++) - v[i] = v[i-1] + m; - for (i=0; i< n; i++) - for (j=0; j -void NRMat::Allocator(const T *a, int n, int m) -{ - if( v != 0 ) { - delete[] (v[0]); delete (v); - } - - int i,j; - - nn = n; mm = m; v = new T*[n]; - - v[0] = new T[m*n]; - for (i=1; i< n; i++) - v[i] = v[i-1] + m; - for (i=0; i< n; i++) - for (j=0; j -NRMat::NRMat(const NRMat &rhs) : nn(rhs.nn), mm(rhs.mm), v(new T*[nn]) -{ - int i,j; - v[0] = new T[mm*nn]; - for (i=1; i< nn; i++) - v[i] = v[i-1] + mm; - for (i=0; i< nn; i++) - for (j=0; j -NRMat & NRMat::operator=(const NRMat &rhs) -// postcondition: normal assignment via copying has been performed; -// if matrix and rhs were different sizes, matrix -// has been resized to match the size of rhs -{ - if (this != &rhs) { - int i,j; - if (nn != rhs.nn || mm != rhs.mm) { - if (v != 0) { - delete[] (v[0]); - delete[] (v); - } - nn=rhs.nn; - mm=rhs.mm; - v = new T*[nn]; - v[0] = new T[mm*nn]; - } - for (i=1; i< nn; i++) - v[i] = v[i-1] + mm; - for (i=0; i< nn; i++) - for (j=0; j -NRMat & NRMat::operator=(const T &a) //assign a to every element -{ - for (int i=0; i< nn; i++) - for (int j=0; j -inline T* NRMat::operator[](const int i) //subscripting: pointer to row i -{ - return v[i]; -} - -template -inline const T* NRMat::operator[](const int i) const -{ - return v[i]; -} - -template -inline T & NRMat::ref(const int i, const int j) -{ - return v[i][j]; -} - -template -inline const T NRMat::ref(const int i, const int j) const -{ - return v[i][j]; -} - -template -inline int NRMat::nrows() const -{ - return nn; -} - -template -inline int NRMat::ncols() const -{ - return mm; -} - -template -NRMat::~NRMat() -{ - if (v != 0) { - delete[] (v[0]); - delete[] (v); - } -} - -template -class NRMat3d { - private: - int nn; - int mm; - int kk; - T ***v; - public: - NRMat3d(); - NRMat3d(int n, int m, int k); - inline void Allocator(int n, int m, int k); - inline T** operator[](const int i); //subscripting: pointer to row i - inline const T* const * operator[](const int i) const; - inline int dim1() const; - inline int dim2() const; - inline int dim3() const; - ~NRMat3d(); -}; - -template -NRMat3d::NRMat3d(): nn(0), mm(0), kk(0), v(0) {} -template -NRMat3d::NRMat3d(int n, int m, int k) : nn(n), mm(m), kk(k), v(new T**[n]) -{ - int i,j; - v[0] = new T*[n*m]; - v[0][0] = new T[n*m*k]; - for(j=1; j -inline void NRMat3d::Allocator(int n, int m, int k) -{ - int i,j; - v[0] = new T*[n*m]; - v[0][0] = new T[n*m*k]; - for(j=1; j -inline T** NRMat3d::operator[](const int i) //subscripting: pointer to row i -{ - return v[i]; -} - -template -inline const T* const * NRMat3d::operator[](const int i) const -{ - return v[i]; -} - -template -inline int NRMat3d::dim1() const -{ - return nn; -} - -template -inline int NRMat3d::dim2() const -{ - return mm; -} - -template -inline int NRMat3d::dim3() const -{ - return kk; -} - -template -NRMat3d::~NRMat3d() -{ - if (v != 0) { - delete[] (v[0][0]); - delete[] (v[0]); - delete[] (v); - } -} - -//The next 3 classes are used in artihmetic coding, Huffman coding, and -//wavelet transforms respectively. This is as good a place as any to put them! -class arithcode { - private: - NRVec *ilob_p,*iupb_p,*ncumfq_p; - public: - NRVec &ilob,&iupb,&ncumfq; - unsigned long jdif,nc,minint,nch,ncum,nrad; - arithcode(unsigned long n1, unsigned long n2, unsigned long n3) - : ilob_p(new NRVec(n1)), - iupb_p(new NRVec(n2)), - ncumfq_p(new NRVec(n3)), - ilob(*ilob_p),iupb(*iupb_p),ncumfq(*ncumfq_p) {} - ~arithcode() { - if (ilob_p != 0) delete ilob_p; - if (iupb_p != 0) delete iupb_p; - if (ncumfq_p != 0) delete ncumfq_p; - } -}; - -class huffcode { - private: - NRVec *icod_p,*ncod_p,*left_p,*right_p; - public: - NRVec &icod,&ncod,&left,&right; - int nch,nodemax; - huffcode(unsigned long n1, unsigned long n2, unsigned long n3, - unsigned long n4) : - icod_p(new NRVec(n1)), - ncod_p(new NRVec(n2)), - left_p(new NRVec(n3)), - right_p(new NRVec(n4)), - icod(*icod_p),ncod(*ncod_p),left(*left_p),right(*right_p) {} - ~huffcode() { - if (icod_p != 0) delete icod_p; - if (ncod_p != 0) delete ncod_p; - if (left_p != 0) delete left_p; - if (right_p != 0) delete right_p; - } -}; - -class wavefilt { - private: - NRVec *cc_p,*cr_p; - public: - int ncof,ioff,joff; - NRVec &cc,&cr; - wavefilt() : cc(*cc_p),cr(*cr_p) {} - wavefilt(const DP *a, const int n) : //initialize to array - cc_p(new NRVec(n)),cr_p(new NRVec(n)), - ncof(n),ioff(-(n >> 1)),joff(-(n >> 1)),cc(*cc_p),cr(*cr_p) { - int i; - for (i=0; i -class Trimat { - private: - int nn; - T **v; - inline T* operator[](const int i); //subscripting: pointer to row i - inline const T* operator[](const int i) const; - public: - Trimat(); - Trimat(int n); // Zero-based array - Trimat(const T &a, int n); //Initialize to constant - Trimat(const T *a, int n); // Initialize to array - Trimat(const Trimat &rhs); // Copy constructor - void Allocator(int n); - void Allocator(const T &a, int n); - void Allocator(const T *a, int n); - Trimat & operator=(const Trimat &rhs); //assignment - Trimat & operator=(const T &a); //assign a to every element - inline T & ref(const int i, const int j); - inline T * getPointer(const int i, const int j); - inline T * begin() const; - inline T * end() const; - inline const T ref(const int i, const int j) const; - inline int nrows() const; - ~Trimat(); -}; - -template -Trimat::Trimat() : nn(0), v(0) {} - -template -Trimat::Trimat(int n) : nn(n), v(new T*[n]) -{ - v[0] = new T[n*(n+1)/2]; - for (int i=1; i< n; i++) - v[i] = v[i-1] + (n-i+1); - - for (int i=0; i< n; i++) - for (int j=0; j<(n-i); j++) - v[i][j] = 0; -} -template -Trimat::Trimat(const T &a, int n) : nn(n), v(new T*[n]) -{ - int i,j; - v[0] = new T[n*(n+1)/2]; - for (i=1; i< n; i++) - v[i] = v[i-1] + (n-i+1); - for (i=0; i< n; i++) - for (j=0; j<(n-i); j++) - v[i][j] = a; -} - -template -Trimat::Trimat(const T *a, int n) : nn(n), v(new T*[n]) -{ - int i,j; - v[0] = new T[n*(n+1)/2]; - for (i=1; i< n; i++) - v[i] = v[i-1] + (n-i+1); - for (i=0; i< n; i++) - for (j=0; j<(n-i); j++) - v[i][j] = *a++; -} - - -template -void Trimat::Allocator(int n) -{ - nn = n; v = new T*[n]; - - v[0] = new T[n*(n+1)/2]; - for (int i=1; i< n; i++) - v[i] = v[i-1] + (n-i+1); -} - -template -void Trimat::Allocator(const T &a, int n) -{ - nn = n; v = new T*[n]; - - int i,j; - v[0] = new T[n*(n+1)/2]; - for (i=1; i < n; i++) - v[i] = v[i-1] + (n-i+1); - for (i=0; i < n; i++) - for (j=0; j < (n-i); j++) - v[i][j] = a; -} - -template -void Trimat::Allocator(const T *a, int n) -{ - nn = n; v = new T*[n]; - int i,j; - v[0] = new T[n*(n+1)/2]; - for (i=1; i< n; i++) - v[i] = v[i-1] + (n-i+1); - for (i=0; i< n; i++) - for (j=0; j<(n-i); j++) - v[i][j] = *a++; -} - - -template -Trimat::Trimat(const Trimat &rhs) : nn(rhs.nn), v(new T*[nn]) -{ - int i,j; - v[0] = new T[nn*(nn+1)/2]; - for (i=1; i< nn; i++) - v[i] = v[i-1] + (nn-i+1); - for (i=0; i< nn; i++) - for (j=0; j<(nn-i); j++) - v[i][j] = rhs[i][j]; -} -template -Trimat & Trimat::operator=(const Trimat &rhs) -// postcondition: normal assignment via copying has been performed; -// if matrix and rhs were different sizes, matrix -// has been resized to match the size of rhs -{ - if (this != &rhs) { - int i,j; - if (nn != rhs.nn) { - if (v != 0) { - delete[] (v[0]); - delete[] (v); - } - nn=rhs.nn; - v = new T*[nn]; - v[0] = new T[nn*(nn+1)/2]; - } - for (i=1; i< nn; i++) - v[i] = v[i-1] + (nn-i+1); - for (i=0; i< nn; i++) - for (j=0; j<(nn-i); j++) - v[i][j] = rhs[i][j]; - } - return *this; -} - -template -Trimat & Trimat::operator=(const T &a) //assign a to every element -{ - for (int i=0; i< nn; i++) - for (int j=0; j -inline T & Trimat::ref(const int i, const int j) -{ - return v[i][j-i]; -} - -template -inline const T Trimat::ref(const int i, const int j) const -{ - return v[i][j-i]; -} - -template -inline T * Trimat::getPointer(const int i, const int j) -{ - return &v[i][j-i]; -} - -template -inline T * Trimat::begin() const -{ - return &v[0][0]; -} - -template -inline T * Trimat::end() const -{ - return (&v[nn-1][0] + 1); -} - -template -inline int Trimat::nrows() const -{ - return nn; -} - -template -Trimat::~Trimat() -{ - if (v != 0) { - delete[] (v[0]); - delete[] (v); - } -} - - -/* Triangle Vertical Matrix Class - --------------------------------------------------------- - |v[0][0]|v[1][0]| | | |v[n-1][0]| - |-------|-------|------|------------|---------|---------| - |v[0][1]|v[1][1]| | |v[n-2][1]| | - |-------|-------|------|------------|---------|---------| - | | | | | | | - |-------|-------|------|------------|---------|---------| - | | | - | | | - | | | - |-------|-----------------------------------------------| - | | | - |-------|-----------------------------------------------| - |v[0][n-2]|v[n-2][n-2]| | - |-------|-----------------------------------------------| - |v[0][n-1]| | - |-------------------------------------------------------| - */ -template -class TriVertMat { - private: - int nn; - T **v; - inline T* operator[](const int i); //subscripting: pointer to row i - inline const T* operator[](const int i) const; - public: - TriVertMat(); - TriVertMat(int n); // Zero-based array - TriVertMat(const T &a, int n); //Initialize to constant - TriVertMat(const T *a, int n); // Initialize to array - TriVertMat(const TriVertMat &rhs); // Copy constructor - void Allocator(int n); - void Allocator(const T &a, int n); - void Allocator(const T *a, int n); - TriVertMat & operator=(const TriVertMat &rhs); //assignment - TriVertMat & operator=(const T &a); //assign a to every element - inline T & ref(const int i, const int j); - inline T * getPointer(const int i, const int j); - inline const T ref(const int i, const int j) const; - inline int nrows() const; - ~TriVertMat(); -}; - -template -TriVertMat::TriVertMat() : nn(0), v(0) {} - -template -TriVertMat::TriVertMat(int n) : nn(n), v(new T*[n]) -{ - v[0] = new T[n*(n+1)/2]; - for (int i=1; i< n; i++) - v[i] = v[i-1] + i; -} - -template -TriVertMat::TriVertMat(const T &a, int n) : nn(n), v(new T*[n]) -{ - int i,j; - v[0] = new T[n*(n+1)/2]; - for (i=1; i< n; i++) - v[i] = v[i-1] + i; - for (i=0; i< n; i++) - for (j=0; j<(n-i); j++) - v[i][j] = a; -} - -template -TriVertMat::TriVertMat(const T *a, int n) : nn(n), v(new T*[n]) -{ - int i,j; - v[0] = new T[n*(n+1)/2]; - for (i=1; i< n; i++) - v[i] = v[i-1] + i; - for (i=0; i< n; i++) - for (j=0; j<(n-i); j++) - v[i][j] = *a++; -} - - -template -void TriVertMat::Allocator(int n) -{ - nn = n; v = new T*[n]; - - v[0] = new T[n*(n+1)/2]; - for (int i=1; i< n; i++) - v[i] = v[i-1] + i; -} - -template -void TriVertMat::Allocator(const T &a, int n) -{ - nn = n; v = new T*[n]; - - int i,j; - v[0] = new T[n*(n+1)/2]; - for (i=1; i< n; i++) - v[i] = v[i-1] + i; - for (i=0; i< n; i++) - for (j=0; j<(n-i); j++) - v[i][j] = a; -} - -template -void TriVertMat::Allocator(const T *a, int n) -{ - nn = n; v = new T*[n]; - int i,j; - v[0] = new T[n*(n+1)/2]; - for (i=1; i< n; i++) - v[i] = v[i-1] + i; - for (i=0; i< n; i++) - for (j=0; j<(n-i); j++) - v[i][j] = *a++; -} - - -template -TriVertMat::TriVertMat(const TriVertMat &rhs) : nn(rhs.nn), v(new T*[nn]) -{ - int i,j; - v[0] = new T[nn*(nn+1)/2]; - for (i=1; i< nn; i++) - v[i] = v[i-1] + i; - for (i=0; i< nn; i++) - for (j=0; j<(nn-i); j++) - v[i][j] = rhs[i][j]; -} -template -TriVertMat & TriVertMat::operator=(const TriVertMat &rhs) -// postcondition: normal assignment via copying has been performed; -// if matrix and rhs were different sizes, matrix -// has been resized to match the size of rhs -{ - if (this != &rhs) { - int i,j; - if (nn != rhs.nn) { - if (v != 0) { - delete[] (v[0]); - delete[] (v); - } - nn=rhs.nn; - v = new T*[nn]; - v[0] = new T[nn*(nn+1)/2]; - } - for (i=1; i< nn; i++) - v[i] = v[i-1] + i; - for (i=0; i< nn; i++) - for (j=0; j<(nn-i); j++) - v[i][j] = rhs[i][j]; - } - return *this; -} - -template -TriVertMat & TriVertMat::operator=(const T &a) //assign a to every element -{ - for (int i=0; i< nn; i++) - for (int j=0; j -inline T & TriVertMat::ref(const int i, const int j) -{ - return v[j][i]; -} - -template -inline const T TriVertMat::ref(const int i, const int j) const -{ - return v[j][i]; -} - -template -inline T * TriVertMat::getPointer(const int i, const int j) -{ - return &v[j][i]; -} - -template -inline int TriVertMat::nrows() const -{ - return nn; -} - -template -TriVertMat::~TriVertMat() -{ - if (v != 0) { - delete[] (v[0]); - delete[] (v); - } -} - - -//Overloaded complex operations to handle mixed float and double -//This takes care of e.g. 1.0/z, z complex -inline const complex operator+(const double &a, - const complex &b) { return float(a)+b; } -inline const complex operator+(const complex &a, - const double &b) { return a+float(b); } -inline const complex operator-(const double &a, - const complex &b) { return float(a)-b; } -inline const complex operator-(const complex &a, - const double &b) { return a-float(b); } -inline const complex operator*(const double &a, - const complex &b) { return float(a)*b; } -inline const complex operator*(const complex &a, - const double &b) { return a*float(b); } -inline const complex operator/(const double &a, - const complex &b) { return float(a)/b; } -inline const complex operator/(const complex &a, - const double &b) { return a/float(b); } -//some compilers choke on pow(float,double) in single precision. also atan2 -inline float pow (float x, double y) {return pow(double(x),y);} -inline float pow (double x, float y) {return pow(x,double(y));} -inline float atan2 (float x, double y) {return atan2(double(x),y);} -inline float atan2 (double x, float y) {return atan2(x,double(y));} - -#endif /* _NR_UTIL_H_ */ diff --git a/binaries/src/mafft/extensions/mxscarna_src/params-weird b/binaries/src/mafft/extensions/mxscarna_src/params-weird deleted file mode 100644 index 58601f4..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/params-weird +++ /dev/null @@ -1,10 +0,0 @@ -0.8969780803 0.0000000001 0.0000000001 0.0515111387 0.0515111387 -0.0006874357 0.0006874357 0.0502248816 0.0502248816 -0.1025763303 0.1025763303 0.2891978920 0.2891978920 -ACGTN -0.1907979101 -0.0187792275 0.2023714036 -0.0437292010 0.0242512580 0.2525959611 -0.0171148051 0.0289713815 0.0146772768 0.1689696163 -0.0000359111 0.0000737346 0.0000853324 0.0000768761 0.0000296087 -0.1390289217 0.2925130725 0.1882306933 0.2944687903 0.0016553127 diff --git a/binaries/src/mafft/extensions/mxscarna_src/postProcessings.cpp b/binaries/src/mafft/extensions/mxscarna_src/postProcessings.cpp deleted file mode 100644 index 1028630..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/postProcessings.cpp +++ /dev/null @@ -1,91 +0,0 @@ -////////////////////////////////////////////////////////////////////////////////////// -// postProcessings.cpp -// -// several post process functions after aligning two profile stem candidate sequences -////////////////////////////////////////////////////////////////////////////////////// - -#include -#include "scarna.hpp" -#include "StemCandidate.hpp" -#include -#include - -using namespace::MXSCARNA; - -void printStructure(std::vector *pscs1, std::vector *pscs2, std::vector *matchPSCS1, std::vector *matchPSCS2); - -void removeConflicts(std::vector *pscs1, std::vector *pscs2, std::vector *matchPSCS1, std::vector *matchPSCS2) -{ - int size = matchPSCS1->size(); - - std::vector found(size, 0); - for(int k = size - 1; k >= 0; k--) { - int i = matchPSCS1->at(k); - int i_rv = pscs1->at(i).GetRvscnumber(); - int j = matchPSCS2->at(k); - int j_rv = pscs2->at(j).GetRvscnumber(); - - found[k] = 0; - - for(int m = size - 1; m >= 0; m--) { - if ( (matchPSCS1->at(m) == i_rv) && (matchPSCS2->at(m) == j_rv) ) { - found[k] = 1; - break; - } - } - } - - int pt = 0; - for(int k = 0; k < size; k++) { - matchPSCS1->at(pt) = matchPSCS1->at(k); - matchPSCS2->at(pt) = matchPSCS2->at(k); - if(found[k] == 1) ++pt; - } - - matchPSCS1->resize(pt); - matchPSCS2->resize(pt); - - //printStructure (pscs1, pscs2, matchPSCS1, matchPSCS2); -} - -void printStructure(std::vector *pscs1, std::vector *pscs2, std::vector *matchPSCS1, std::vector *matchPSCS2) -{ - int size = matchPSCS1->size(); - int len = WORDLENGTH; - std::vector structure1(100, '.'); - std::vector structure2(100, '.'); - for(int k = 0; k < size; k++) { - int i = matchPSCS1->at(k); - int pos1 = pscs1->at(i).GetPosition(); - int j = matchPSCS2->at(k); - int pos2 = pscs2->at(j).GetPosition(); - for(int l = 0; l < len; l++) { - if(pscs1->at(i).GetDistance() > 0) { - structure1[pos1 + l] = '('; - } - else { - structure1[pos1 + l] = ')'; - } - - if(pscs2->at(j).GetDistance() > 0) { - structure2[pos2 + l] = '('; - } - else { - structure2[pos2 + l] = ')'; - } - } - /* - std::cout << i << "\t" << pscs1->at(i).GetLength() << "\t" << pscs1->at(i).GetPosition() << "\t" << pscs1->at(i).GetRvposition() << "\t" << pscs1->at(i).GetDistance() << "\t" << pscs1->at(i).GetContPos() << "\t" << pscs1->at(i).GetBeforePos() << "\t" << pscs1->at(i).GetRvscnumber() << endl; - */ - } - size = structure1.size(); - for(int k = 0; k < size; k++) { - std::cout << structure1[k]; - } - std::cout << endl; - for(int k = 0; k < size; k++) { - std::cout << structure2[k]; - } - std::cout << endl; -} - diff --git a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/CompareToRef.cc b/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/CompareToRef.cc deleted file mode 100644 index 142fa4c..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/CompareToRef.cc +++ /dev/null @@ -1,348 +0,0 @@ -///////////////////////////////////////////////////////////////// -// CompareToRef.cc -// -// Program for scoring alignments according to the SUM-OF-PAIRS -// or COLUMN score. -///////////////////////////////////////////////////////////////// - -#include "SafeVector.h" -#include "MultiSequence.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -const char CORE_BLOCK = 'h'; -typedef pair PII; -bool useCoreBlocks = false; -bool useColScore = false; -bool useCaps = false; -bool useBaliAnnot = false; -bool makeAnnot = false; - -///////////////////////////////////////////////////////////////// -// Function prototypes -///////////////////////////////////////////////////////////////// - -set ComputePairs (MultiSequence *align, bool isRef); -set ComputeColumns (MultiSequence *align, bool isRef); -string GetName (string s); -set coreCols; - -set refCols, testCols; -set refPairs, testPairs; -VI annotation; - -///////////////////////////////////////////////////////////////// -// main() -// -// Main program. -///////////////////////////////////////////////////////////////// - -int main (int argc, char **argv){ - - // check arguments - if (argc < 3){ - cerr << "Usage: score TEST_ALIGNMENT REFERENCE_ALIGNMENT [BALIBASE_ANNOT_FILE] [-col] [-core] [-caps] [-annot FILENAME]" << endl; - exit (1); - } - - // try opening file - FileBuffer infile (argv[1]); - - MultiSequence *testAlign; - if (infile.fail()){ - cerr << "ERROR: Could not open file '" << argv[1] << "' for reading." << endl; - testAlign = NULL; - } - else { - testAlign = new MultiSequence(); assert (testAlign); - testAlign->LoadMFA (infile); - } - infile.close(); - - MultiSequence *refAlign = new MultiSequence (string (argv[2])); assert (refAlign); - - string outFilename = ""; - - for (int i = 3; i < argc; i++){ - if (strcmp (argv[i], "-core") == 0) - useCoreBlocks = true; - else if (strcmp (argv[i], "-col") == 0) - useColScore = true; - else if (strcmp (argv[i], "-caps") == 0) - useCaps = true; - else if (strcmp (argv[i], "-annot") == 0){ - makeAnnot = true; - outFilename = string (argv[++i]); - } - else { // annotation file - useBaliAnnot = true; - - ifstream annotFile (argv[i]); - if (annotFile.fail()){ - cerr << "ERROR: Could not read BAliBASE annotation file." << endl; - exit (1); - } - - SafeVector *indices = refAlign->GetSequence(0)->GetMapping(); - - char buffer[10000]; - while (annotFile.getline (buffer, 10000)){ - istringstream ss; - ss.str (string (buffer)); - - string s; - - if ((ss >> s) && s == string ("BPOS")){ - while (ss >> s){ - int begin=-1, end=-1; - if (sscanf (s.c_str(), "%d=%d", &begin, &end) == 2){ - for (int i = (*indices)[begin]; i <= (*indices)[end]; i++) - coreCols.insert (i); - } - } - } - } - - delete indices; - - annotFile.close(); - } - } - - if (useColScore) makeAnnot = false; - - if (testAlign){ - for (int i = 0; i < testAlign->GetNumSequences(); i++){ - bool found = false; - - for (int j = 0; !found && j < refAlign->GetNumSequences(); j++){ - if (testAlign->GetSequence(i)->GetHeader() == refAlign->GetSequence(j)->GetHeader()) - found = true; - } - - if (!found){ - testAlign->RemoveSequence (i); - i--; - } - } - - for (int i = 0; i < refAlign->GetNumSequences(); i++){ - bool found = false; - - for (int j = 0; !found && j < testAlign->GetNumSequences(); j++){ - if (refAlign->GetSequence(i)->GetHeader() == testAlign->GetSequence(j)->GetHeader()) - found = true; - } - - if (!found){ - refAlign->RemoveSequence (i); - i--; - } - } - - testAlign->SortByHeader(); - refAlign->SortByHeader(); - } - - int TP = 0; - int TPFN = 0; - int TPFP = 0; - double FD, FM; - if (useColScore){ - refCols = ComputeColumns (refAlign, true); - if (testAlign) testCols = ComputeColumns (testAlign, false); - set colIntersect; - insert_iterator > colIntersectIter (colIntersect, colIntersect.begin()); - set_intersection (testCols.begin(), testCols.end(), refCols.begin(), refCols.end(), colIntersectIter); - TP = (int) colIntersect.size(); - TPFN = (int) refCols.size(); - if (testAlign) TPFP = (int) testCols.size(); - } - else { - refPairs = ComputePairs (refAlign, true); - if (testAlign) testPairs = ComputePairs (testAlign, false); - set pairIntersect; - - insert_iterator > pairIntersectIter (pairIntersect, pairIntersect.begin()); - set_intersection (testPairs.begin(), testPairs.end(), refPairs.begin(), refPairs.end(), pairIntersectIter); - TP = (int) pairIntersect.size(); - TPFN = (int) refPairs.size(); - if (testAlign) TPFP = (int) testPairs.size(); - } - - FD = (double) TP / TPFN; - FM = (double) TP / TPFP; - - cout << GetName(string (argv[2])) << " " << TP << " " << TPFN << " " << TPFP << " " << FD << " " << FM << endl; - - if (makeAnnot){ - ofstream outfile (outFilename.c_str()); - for (int i = 0; i < (int) annotation.size(); i++){ - outfile << annotation[i] << endl; - } - outfile.close(); - } - - if (testAlign) delete testAlign; - delete refAlign; -} - -int GetOffset (Sequence *testSeq, Sequence *refSeq){ - string test = testSeq->GetString(); - string ref = refSeq->GetString(); - - for (int i = 0; i < (int) test.length(); i++) test[i] = toupper(test[i]); - for (int i = 0; i < (int) ref.length(); i++) ref[i] = toupper(ref[i]); - - size_t offset = test.find (ref, 0); - if (offset == string::npos){ - cerr << "ERROR: Reference string not found in original sequence!" << endl; - cerr << " test = " << test << endl; - cerr << " ref = " << ref << endl; - exit (1); - } - - cerr << "Offset found: " << offset << endl; - - return (int) offset; -} - -string GetName (string s){ - - size_t index1 = s.rfind ('/'); - size_t index2 = s.rfind ('.'); - - if (index1 == string::npos) index1 = 0; else index1++; - if (index2 == string::npos) index2 = s.length(); - - if (index2 < index1) index2 = s.length(); - - return s.substr (index1, index2 - index1); -} - -bool isCore (char ch, int col){ - if (ch == '-') return false; - if (useBaliAnnot){ - return coreCols.find (col) != coreCols.end(); - } - if (useCaps){ - return ch >= 'A' && ch <= 'Z'; - } - return ch == CORE_BLOCK; -} - -///////////////////////////////////////////////////////////////// -// ComputePairs -// -// Returns the set of all matching pairs. -///////////////////////////////////////////////////////////////// - -set ComputePairs (MultiSequence *align, bool isRef){ - int N = align->GetNumSequences(); - int L = align->GetSequence(0)->GetLength(); - - // retrieve all sequence data pointers - SafeVector::iterator> seqs (N); - for (int i = 0; i < N; i++){ - seqs[i] = align->GetSequence(i)->GetDataPtr(); - assert (align->GetSequence(i)->GetLength() == L); - } - - set ret; - VI ctr(N); - - // compute pairs - for (int i = 1; i <= L; i++){ - - // ctr keeps track of the current position in each sequence - for (int j = 0; j < N; j++){ - ctr[j] += (seqs[j][i] != '-'); - } - - int good = 0; - int ct = 0; - - // check for all matching pairs - for (int j = 0; j < N - 1; j++){ - for (int k = j + 1; k < N; k++){ - - // skip if one of the sequences is gapped - if (seqs[j][i] == '-' || seqs[k][i] == '-') continue; - - // check for core blocks in the reference sequence - if (isRef && useCoreBlocks) - if (!isCore (seqs[j][i], i) || !isCore (seqs[k][i], i)) continue; - - // if all ok, then add pair to list of pairs - pair p (10000 * j + ctr[j], 10000 * k + ctr[k]); - - // if we're making an annotation, compute annotation statistics - if (makeAnnot && !isRef){ - ct++; - if (refPairs.find (p) != refPairs.end()) good++; - } - ret.insert (p); - } - } - - // build annotation - if (makeAnnot && !isRef){ - annotation.push_back ((ct == 0) ? 0 : 100 * good / ct); - } - - } - - return ret; -} - -///////////////////////////////////////////////////////////////// -// ComputeColumns -// -// Returns the set of all columns. -///////////////////////////////////////////////////////////////// - -set ComputeColumns (MultiSequence *align, bool isRef){ - int N = align->GetNumSequences(); - int L = align->GetSequence(0)->GetLength(); - - // retrieve all sequence data pointers - SafeVector::iterator> seqs (N); - for (int i = 0; i < N; i++){ - seqs[i] = align->GetSequence(i)->GetDataPtr(); - } - - set ret; - VI ctr(N); - - // compute pairs - for (int i = 1; i <= L; i++){ - - // ctr keeps track of the current position in each sequence - for (int j = 0; j < N; j++){ - ctr[j] += (seqs[j][i] != '-'); - } - - // add column, pick only positions that are matched - SafeVector column (N); - bool useThisColumn = !useCoreBlocks; - - for (int j = 0; j < N; j++){ - if (isCore (seqs[j][i], i)) useThisColumn = true; - column[j] = (seqs[j][i] == '-') ? -1 : ctr[j]; - } - - if (useThisColumn || !isRef) - ret.insert (column); - } - - return ret; -} diff --git a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/Defaults.h b/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/Defaults.h deleted file mode 100644 index e8ad944..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/Defaults.h +++ /dev/null @@ -1,86 +0,0 @@ -///////////////////////////////////////////////////////////////// -// Defaults.h -// -// Default constants for use in PROBCONS. The emission -// probabilities were computed using the program used to build -// the BLOSUM62 matrix from the BLOCKS 5.0 dataset. Transition -// parameters were obtained via unsupervised EM training on the -// BALIBASE 2.0 benchmark alignment database. -///////////////////////////////////////////////////////////////// - -#ifndef DEFAULTS_H -#define DEFAULTS_H - -#include - -using namespace std; -/* Default */ -namespace MXSCARNA { -/* -float initDistrib1Default[] = { 0.9588437676f, 0.0205782652f, 0.0205782652f }; -float gapOpen1Default[] = { 0.0190259293f, 0.0190259293f }; -float gapExtend1Default[] = { 0.3269913495f, 0.3269913495f }; -*/ - -/* EMtrainingALL.txt*/ -float initDistrib1Default[] = { 0.9234497547, 0.0385021642, 0.0385021642 }; -float gapOpen1Default[] = { 0.0266662259, 0.0266662259 }; -float gapExtend1Default[] = { 0.3849118352, 0.3849118352 }; - - -float initDistrib2Default[] = { 0.9615409374f, 0.0000004538f, 0.0000004538f, 0.0192291681f, 0.0192291681f }; -float gapOpen2Default[] = { 0.0082473317f, 0.0082473317f, 0.0107844425f, 0.0107844425f }; -float gapExtend2Default[] = { 0.3210460842f, 0.3210460842f, 0.3298229277f, 0.3298229277f }; - -string alphabetDefault = "ACGUTN"; - -//float emitSingleDefault[6] = { -// 0.2174750715, 0.2573366761, 0.3005372882, 0.2233072966, 0.2233072966, 0.0004049665 -//}; - -/* Default */ -/* -float emitSingleDefault[6] = { - 0.2270790040f, 0.2422080040f, 0.2839320004f, 0.2464679927f, 0.2464679927f, 0.0003124650f -}; -*/ - -/* EMtrainingALL.txt */ -float emitSingleDefault[6] = { - 0.2017124593, 0.2590311766, 0.2929603755, 0.2453189045, 0.2453189045, 0.0000873194 }; - -/* ACGUTN */ -/* Default */ -/* -float emitPairsDefault[6][6] = { - { 0.1487240046f, 0.0184142999f, 0.0361397006f, 0.0238473993f, 0.0238473993f, 0.0000375308f }, - { 0.0184142999f, 0.1583919972f, 0.0275536999f, 0.0389291011f, 0.0389291011f, 0.0000815823f }, - { 0.0361397006f, 0.0275536999f, 0.1979320049f, 0.0244289003f, 0.0244289003f, 0.0000824765f }, - { 0.0238473993f, 0.0389291011f, 0.0244289003f, 0.1557479948f, 0.1557479948f, 0.0000743985f }, - { 0.0238473993f, 0.0389291011f, 0.0244289003f, 0.1557479948f, 0.1557479948f, 0.0000743985f }, - { 0.0000375308f, 0.0000815823f, 0.0000824765f, 0.0000743985f, 0.0000743985f, 0.0000263252f } -}; -*/ -/* EMtrainingALL.txt */ -float emitPairsDefault[6][6] = { - { 0.1659344733, 0.0298952684, 0.0543937907, 0.0344539173, 0.0344539173, 0.0000032761 }, - { 0.0298952684, 0.1817403436, 0.0415624641, 0.0589077808, 0.0589077808, 0.0000117011 }, - { 0.0543937907, 0.0415624641, 0.2342105955, 0.0410407558, 0.0410407558, 0.0000072893 }, - { 0.0344539173, 0.0589077808, 0.0410407558, 0.1578272283, 0.1578272283, 0.0000067871 }, - { 0.0344539173, 0.0589077808, 0.0410407558, 0.1578272283, 0.1578272283, 0.0000067871 }, - { 0.0344539173, 0.0589077808, 0.0410407558, 0.1578272283, 0.1578272283, 0.0000067871 }, -// { 0.0000032761, 0.0000117011, 0.0000072893, 0.0000067871, 0.0000067871, 0.0000000166 } -}; - - /* -float emitPairsDefault[6][6] = { - {0.1731323451, 0.0378843173, 0.0656677559, 0.0450690985, 0.0450690985, 0.0000215275}, - {0.0378843173, 0.1611578614, 0.0492933467, 0.0651549697, 0.0651549697, 0.0000362353}, - {0.0656677559, 0.0492933467, 0.1937607974, 0.0464556068, 0.0464556068, 0.0000293904}, - {0.0450690985, 0.0651549697, 0.0464556068, 0.1622997671, 0.1622997671, 0.0000352637}, - {0.0450690985, 0.0651549697, 0.0464556068, 0.1622997671, 0.1622997671, 0.0000352637}, - {0.0000215275, 0.0000362353, 0.0000293904, 0.0000352637, 0.0000352637, 0.0000000000} -}; - */ -} -#endif diff --git a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/Defaults.h_backup b/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/Defaults.h_backup deleted file mode 100644 index e09abb5..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/Defaults.h_backup +++ /dev/null @@ -1,57 +0,0 @@ -///////////////////////////////////////////////////////////////// -// Defaults.h -// -// Default constants for use in PROBCONS. The emission -// probabilities were computed using the program used to build -// the BLOSUM62 matrix from the BLOCKS 5.0 dataset. Transition -// parameters were obtained via unsupervised EM training on the -// BALIBASE 2.0 benchmark alignment database. -///////////////////////////////////////////////////////////////// - -#ifndef DEFAULTS_H -#define DEFAULTS_H - -#include - -using namespace std; - -float initDistrib1Default[] = { 0.9588437676f, 0.0205782652f, 0.0205782652f }; -float gapOpen1Default[] = { 0.0190259293f, 0.0190259293f }; -float gapExtend1Default[] = { 0.3269913495f, 0.3269913495f }; - -float initDistrib2Default[] = { 0.9615409374f, 0.0000004538f, 0.0000004538f, 0.0192291681f, 0.0192291681f }; -float gapOpen2Default[] = { 0.0082473317f, 0.0082473317f, 0.0107844425f, 0.0107844425f }; -float gapExtend2Default[] = { 0.3210460842f, 0.3210460842f, 0.3298229277f, 0.3298229277f }; - -string alphabetDefault = "ACGUTN"; - -//float emitSingleDefault[6] = { -// 0.2174750715, 0.2573366761, 0.3005372882, 0.2233072966, 0.2233072966, 0.0004049665 -//}; - -float emitSingleDefault[6] = { - 0.2270790040f, 0.2422080040f, 0.2839320004f, 0.2464679927f, 0.2464679927f, 0.0003124650f -}; - -/* ACGUTN */ - -float emitPairsDefault[6][6] = { - { 0.1487240046f, 0.0184142999f, 0.0361397006f, 0.0238473993f, 0.0238473993f, 0.0000375308f }, - { 0.0184142999f, 0.1583919972f, 0.0275536999f, 0.0389291011f, 0.0389291011f, 0.0000815823f }, - { 0.0361397006f, 0.0275536999f, 0.1979320049f, 0.0244289003f, 0.0244289003f, 0.0000824765f }, - { 0.0238473993f, 0.0389291011f, 0.0244289003f, 0.1557479948f, 0.1557479948f, 0.0000743985f }, - { 0.0238473993f, 0.0389291011f, 0.0244289003f, 0.1557479948f, 0.1557479948f, 0.0000743985f }, - { 0.0000375308f, 0.0000815823f, 0.0000824765f, 0.0000743985f, 0.0000743985f, 0.0000263252f } -}; - - /* -float emitPairsDefault[6][6] = { - {0.1731323451, 0.0378843173, 0.0656677559, 0.0450690985, 0.0450690985, 0.0000215275}, - {0.0378843173, 0.1611578614, 0.0492933467, 0.0651549697, 0.0651549697, 0.0000362353}, - {0.0656677559, 0.0492933467, 0.1937607974, 0.0464556068, 0.0464556068, 0.0000293904}, - {0.0450690985, 0.0651549697, 0.0464556068, 0.1622997671, 0.1622997671, 0.0000352637}, - {0.0450690985, 0.0651549697, 0.0464556068, 0.1622997671, 0.1622997671, 0.0000352637}, - {0.0000215275, 0.0000362353, 0.0000293904, 0.0000352637, 0.0000352637, 0.0000000000} -}; - */ -#endif diff --git a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/EMtrainingALL.txt b/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/EMtrainingALL.txt deleted file mode 100644 index c2f24a0..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/EMtrainingALL.txt +++ /dev/null @@ -1,11 +0,0 @@ -0.9234497547 0.0385021642 0.0385021642 -0.0266662259 0.0266662259 -0.3849118352 0.3849118352 -ACGUTN -0.1659344733 -0.0298952684 0.1817403436 -0.0543937907 0.0415624641 0.2342105955 -0.0344539173 0.0589077808 0.0410407558 0.1578272283 -0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 -0.0000032761 0.0000117011 0.0000072893 0.0000067871 0.0000000000 0.0000000166 -0.2017124593 0.2590311766 0.2929603755 0.2453189045 0.0000000000 0.0000873194 diff --git a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/EvolutionaryTree.h b/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/EvolutionaryTree.h deleted file mode 100644 index eceeafe..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/EvolutionaryTree.h +++ /dev/null @@ -1,200 +0,0 @@ -///////////////////////////////////////////////////////////////// -// EvolutionaryTree.hpp -// -// Utilities for reading/writing multiple sequence data. -///////////////////////////////////////////////////////////////// - -#ifndef __EVOLUTIONARYTREE_HPP__ -#define __EVOLUTIONARYTREE_HPP__ - -#include -#include -#include -#include "SafeVector.h" -#include "MultiSequence.h" -#include "Sequence.h" -#include "Util.hpp" - -using namespace std; - - -///////////////////////////////////////////////////////////////// -// TreeNode -// -// The fundamental unit for representing an alignment tree. The -// guide tree is represented as a binary tree. -///////////////////////////////////////////////////////////////// -namespace MXSCARNA { -class TreeNode { - int sequenceLabel; // sequence label - float sequenceIdentity; // sequence identity - TreeNode *left, *right, *parent; // pointers to left, right children - float leftLength, rightLength; // the length of left and right edge - ///////////////////////////////////////////////////////////////// - // TreeNode::PrintNode() - // - // Internal routine used to print out the sequence comments - // associated with the evolutionary tree, using a hierarchical - // parenthesized format. - ///////////////////////////////////////////////////////////////// - - void PrintNode (ostream &outfile, const MultiSequence *sequences) const { - - // if this is a leaf node, print out the associated sequence comment - if (sequenceLabel >= 0) - //outfile << sequences->GetSequence (sequenceLabel)->GetHeader(); - outfile << sequences->GetSequence (sequenceLabel)->GetLabel(); - - // otherwise, it must have two children; print out their subtrees recursively - else { - assert (left); - assert (right); - - outfile << "("; - left->PrintNode (outfile, sequences); - outfile << ","; - right->PrintNode (outfile, sequences); - outfile << ")"; - } - } - - public: - - ///////////////////////////////////////////////////////////////// - // TreeNode::TreeNode() - // - // Constructor for a tree node. Note that sequenceLabel = -1 - // implies that the current node is not a leaf in the tree. - ///////////////////////////////////////////////////////////////// - - TreeNode (int sequenceLabel) : sequenceLabel (sequenceLabel), - left (NULL), right (NULL), parent (NULL) { - assert (sequenceLabel >= -1); - } - - ///////////////////////////////////////////////////////////////// - // TreeNode::~TreeNode() - // - // Destructor for a tree node. Recursively deletes all children. - ///////////////////////////////////////////////////////////////// - - ~TreeNode (){ - if (left){ delete left; left = NULL; } - if (right){ delete right; right = NULL; } - parent = NULL; - } - - - // getters - int GetSequenceLabel () const { return sequenceLabel; } - TreeNode *GetLeftChild () const { return left; } - TreeNode *GetRightChild () const { return right; } - TreeNode *GetParent () const { return parent; } - float GetIdentity () const { return sequenceIdentity; } - float GetLeftLength () const { return leftLength; } - float GetRightLength () const { return rightLength; } - // setters - void SetSequenceLabel (int sequenceLabel){ this->sequenceLabel = sequenceLabel; assert (sequenceLabel >= -1); } - void SetLeftChild (TreeNode *left){ this->left = left; } - void SetRightChild (TreeNode *right){ this->right = right; } - void SetParent (TreeNode *parent){ this->parent = parent; } - void SetIdentity (float identity) { this->sequenceIdentity = identity; } - void SetLeftLength (float identity) { this->leftLength = identity; } - void SetRightLength (float identity) {this->rightLength = identity; } - ///////////////////////////////////////////////////////////////// - // TreeNode::ComputeTree() - // - // Routine used to compute an evolutionary tree based on the - // given distance matrix. We assume the distance matrix has the - // form, distMatrix[i][j] = expected accuracy of aligning i with j. - ///////////////////////////////////////////////////////////////// - - static TreeNode *ComputeTree (const VVF &distMatrix, const VVF &identityMatrix){ - - int numSeqs = distMatrix.size(); // number of sequences in distance matrix - VVF distances (numSeqs, VF (numSeqs)); // a copy of the distance matrix - SafeVector nodes (numSeqs, NULL); // list of nodes for each sequence - SafeVector valid (numSeqs, 1); // valid[i] tells whether or not the ith - // nodes in the distances and nodes array - // are valid - VVF identities (numSeqs, VF (numSeqs)); - SafeVector countCluster (numSeqs, 1); - - // initialization: make a copy of the distance matrix - for (int i = 0; i < numSeqs; i++) { - for (int j = 0; j < numSeqs; j++) { - distances[i][j] = distMatrix[i][j]; - identities[i][j] = identityMatrix[i][j]; - } - } - - // initialization: create all the leaf nodes - for (int i = 0; i < numSeqs; i++){ - nodes[i] = new TreeNode (i); - assert (nodes[i]); - } - - // repeat until only a single node left - for (int numNodesLeft = numSeqs; numNodesLeft > 1; numNodesLeft--){ - float bestProb = -1; - pair bestPair; - - // find the closest pair - for (int i = 0; i < numSeqs; i++) if (valid[i]){ - for (int j = i+1; j < numSeqs; j++) if (valid[j]){ - if (distances[i][j] > bestProb){ - bestProb = distances[i][j]; - bestPair = make_pair(i, j); - } - } - } - - // merge the closest pair - TreeNode *newParent = new TreeNode (-1); - newParent->SetLeftChild (nodes[bestPair.first]); - newParent->SetRightChild (nodes[bestPair.second]); - nodes[bestPair.first]->SetParent (newParent); - nodes[bestPair.second]->SetParent (newParent); - nodes[bestPair.first] = newParent; - nodes[bestPair.second] = NULL; - newParent->SetIdentity(identities[bestPair.first][bestPair.second]); - - - // now update the distance matrix - for (int i = 0; i < numSeqs; i++) if (valid[i]){ - distances[bestPair.first][i] = distances[i][bestPair.first] - = (distances[i][bestPair.first]*countCluster[bestPair.first] - + distances[i][bestPair.second]*countCluster[bestPair.second]) - / (countCluster[bestPair.first] + countCluster[bestPair.second]); -// distances[bestPair.first][i] = distances[i][bestPair.first] -// = (distances[i][bestPair.first] + distances[i][bestPair.second]) * bestProb / 2; - identities[bestPair.first][i] = identities[i][bestPair.first] - = (identities[i][bestPair.first]*countCluster[bestPair.first] - + identities[i][bestPair.second]*countCluster[bestPair.second]) - / (countCluster[bestPair.first] + countCluster[bestPair.second]); - } - - // finally, mark the second node entry as no longer valid - countCluster[bestPair.first] += countCluster[bestPair.second]; - valid[bestPair.second] = 0; - } - - assert (nodes[0]); - return nodes[0]; - } - - ///////////////////////////////////////////////////////////////// - // TreeNode::Print() - // - // Print out the subtree associated with this node in a - // parenthesized representation. - ///////////////////////////////////////////////////////////////// - - void Print (ostream &outfile, const MultiSequence *sequences) const { -// outfile << "Alignment tree: "; - PrintNode (outfile, sequences); - outfile << endl; - } -}; -} -#endif //__EVOLUTIONARYTREE_HPP__ diff --git a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/FileBuffer.h b/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/FileBuffer.h deleted file mode 100644 index 9c36188..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/FileBuffer.h +++ /dev/null @@ -1,104 +0,0 @@ -///////////////////////////////////////////////////////////////// -// FileBuffer.h -// -// Buffered file reading. -///////////////////////////////////////////////////////////////// - - -#ifndef FILEBUFFER_H -#define FILEBUFFER_H - -#include -#include -#include - -using namespace std; - -const int BufferSize = 1000; - -///////////////////////////////////////////////////////////////// -// FileBuffer -// -// Class for buffering file reading. -///////////////////////////////////////////////////////////////// -namespace MXSCARNA { -class FileBuffer { - ifstream file; - char buffer[BufferSize]; - int currPos; - int size; - bool isEOF; - bool isValid; - bool canUnget; - - public: - - // Some common routines - - FileBuffer (const char *filename) : file (filename), currPos (0), size (0), isEOF (false), isValid (!file.fail()), canUnget (false){} - ~FileBuffer (){ close(); } - bool fail () const { return !isValid; } - bool eof () const { return (!isValid || isEOF); } - void close(){ file.close(); isValid = false; } - - ///////////////////////////////////////////////////////////////// - // FileBuffer::Get() - // - // Retrieve a character from the file buffer. Returns true if - // and only if a character is read. - ///////////////////////////////////////////////////////////////// - - bool Get (char &ch){ - - // check to make sure that there's more stuff in the file - if (!isValid || isEOF) return false; - - // if the buffer is empty, it's time to reload it - if (currPos == size){ - file.read (buffer, BufferSize); - size = file.gcount(); - isEOF = (size == 0); - currPos = 0; - if (isEOF) return false; - } - - // store the read character - ch = buffer[currPos++]; - canUnget = true; - return true; - } - - ///////////////////////////////////////////////////////////////// - // FileBuffer::UnGet() - // - // Unretrieve the most recently read character from the file - // buffer. Note that this allows only a one-level undo. - ///////////////////////////////////////////////////////////////// - - void UnGet (){ - assert (canUnget); - assert (isValid); - assert (currPos > 0); - currPos--; - assert (currPos < size); - isEOF = false; - canUnget = false; - } - - ///////////////////////////////////////////////////////////////// - // FileBuffer::GetLine() - // - // Retrieve characters of text until a newline character is - // encountered. Terminates properly on end-of-file condition. - ///////////////////////////////////////////////////////////////// - - void GetLine (string &s){ - char ch; - s = ""; - while (Get (ch) && ch != '\n') - s += ch; - } - -}; -} -#endif diff --git a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/FixRef.cc b/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/FixRef.cc deleted file mode 100644 index 7060c79..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/FixRef.cc +++ /dev/null @@ -1,1000 +0,0 @@ -///////////////////////////////////////////////////////////////// -// Main.cc -///////////////////////////////////////////////////////////////// - -#include "SafeVector.h" -#include "MultiSequence.h" -#include "Defaults.h" -#include "ScoreType.h" -#include "ProbabilisticModel.h" -#include "EvolutionaryTree.h" -#include "SparseMatrix.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -string matrixFilename = ""; -string parametersInputFilename = ""; -string parametersOutputFilename = "no training"; - -bool enableTraining = false; -bool enableVerbose = false; -int numConsistencyReps = 2; -int numPreTrainingReps = 0; -int numIterativeRefinementReps = 100; - -float gapOpenPenalty = 0; -float gapContinuePenalty = 0; -VF initDistrib (NumMatrixTypes); -VF gapOpen (2*NumInsertStates); -VF gapExtend (2*NumInsertStates); -SafeVector alphabet; -VVF emitPairs; -VF emitSingle; - -const int MIN_PRETRAINING_REPS = 0; -const int MAX_PRETRAINING_REPS = 20; -const int MIN_CONSISTENCY_REPS = 0; -const int MAX_CONSISTENCY_REPS = 5; -const int MIN_ITERATIVE_REFINEMENT_REPS = 0; -const int MAX_ITERATIVE_REFINEMENT_REPS = 1000; - -///////////////////////////////////////////////////////////////// -// Function prototypes -///////////////////////////////////////////////////////////////// - -void PrintHeading(); -void PrintParameters (const char *message, const VF &initDistrib, const VF &gapOpen, - const VF &gapExtend, const char *filename); -MultiSequence *DoAlign (MultiSequence *sequence, const ProbabilisticModel &model); -SafeVector ParseParams (int argc, char **argv); -void ReadParameters (); -MultiSequence *ComputeFinalAlignment (const TreeNode *tree, MultiSequence *sequences, - const SafeVector > &sparseMatrices, - const ProbabilisticModel &model); -MultiSequence *AlignAlignments (MultiSequence *align1, MultiSequence *align2, - const SafeVector > &sparseMatrices, - const ProbabilisticModel &model); -void DoRelaxation (MultiSequence *sequences, SafeVector > &sparseMatrices); -void Relax (SparseMatrix *matXZ, SparseMatrix *matZY, VF &posterior); -void DoIterativeRefinement (const SafeVector > &sparseMatrices, - const ProbabilisticModel &model, MultiSequence* &alignment); -//float ScoreAlignment (MultiSequence *alignment, MultiSequence *sequences, SparseMatrix **sparseMatrices, const int numSeqs); - -///////////////////////////////////////////////////////////////// -// main() -// -// Calls all initialization routines and runs the PROBCONS -// aligner. -///////////////////////////////////////////////////////////////// - -int main (int argc, char **argv){ - - if (argc != 3){ - cerr << "Usage: FixRef inputfile reffile" << endl; - exit (1); - } - - string inputFilename = string (argv[1]); - string refFilename = string (argv[2]); - - ReadParameters(); - - // build new model for aligning - ProbabilisticModel model (initDistrib, gapOpen, gapExtend, - alphabet, emitPairs, emitSingle); - - MultiSequence *inputSeq = new MultiSequence(); inputSeq->LoadMFA (inputFilename); - MultiSequence *refSeq = new MultiSequence(); refSeq->LoadMFA (refFilename); - - SafeVector *ali = new SafeVector; - - if (refSeq->GetNumSequences() != 2){ - cerr << "ERROR: Expected two sequences in reference alignment." << endl; - exit (1); - } - set s; s.insert (0); - MultiSequence *ref1 = refSeq->Project (s); - s.clear(); s.insert (1); - MultiSequence *ref2 = refSeq->Project (s); - - for (int i = 0; i < inputSeq->GetNumSequences(); i++){ - if (inputSeq->GetSequence(i)->GetHeader() == ref1->GetSequence(0)->GetHeader()){ - ref1->AddSequence (inputSeq->GetSequence(i)->Clone()); - } - if (inputSeq->GetSequence(i)->GetHeader() == ref2->GetSequence(0)->GetHeader()) - ref2->AddSequence (inputSeq->GetSequence(i)->Clone()); - } - if (ref1->GetNumSequences() != 2){ - cerr << "ERROR: Expected two sequences in reference1 alignment." << endl; - exit (1); - } - if (ref2->GetNumSequences() != 2){ - cerr << "ERROR: Expected two sequences in reference2 alignment." << endl; - exit (1); - } - - ref1->GetSequence(0)->SetLabel(0); - ref2->GetSequence(0)->SetLabel(0); - ref1->GetSequence(1)->SetLabel(1); - ref2->GetSequence(1)->SetLabel(1); - - // cerr << "Aligning..." << endl; - - // now, we can perform the alignments and write them out - MultiSequence *alignment1 = DoAlign (ref1, - ProbabilisticModel (initDistrib, gapOpen, gapExtend, - alphabet, emitPairs, emitSingle)); - - //cerr << "Aligning second..." << endl; - MultiSequence *alignment2 = DoAlign (ref2, - ProbabilisticModel (initDistrib, gapOpen, gapExtend, - alphabet, emitPairs, emitSingle)); - - SafeVector::iterator iter1 = alignment1->GetSequence(0)->GetDataPtr(); - SafeVector::iterator iter2 = alignment1->GetSequence(1)->GetDataPtr(); - for (int i = 1; i <= alignment1->GetSequence(0)->GetLength(); i++){ - if (islower(iter1[i])) iter2[i] = tolower(iter2[i]); - if (isupper(iter1[i])) iter2[i] = toupper(iter2[i]); - } - iter1 = alignment2->GetSequence(0)->GetDataPtr(); - iter2 = alignment2->GetSequence(1)->GetDataPtr(); - for (int i = 1; i <= alignment2->GetSequence(0)->GetLength(); i++){ - if (islower(iter1[i])) iter2[i] = tolower(iter2[i]); - if (isupper(iter1[i])) iter2[i] = toupper(iter2[i]); - } - //alignment1->WriteMFA (cout); - //alignment2->WriteMFA (cout); - - int a1 = 0, a = 0; - int b1 = 0, b = 0; - - for (int i = 1; i <= refSeq->GetSequence(0)->GetLength(); i++){ - - // catch up in filler sequences - if (refSeq->GetSequence(0)->GetPosition(i) != '-'){ - while (true){ - a++; - if (alignment1->GetSequence(0)->GetPosition(a) != '-') break; - ali->push_back ('X'); - } - } - if (refSeq->GetSequence(1)->GetPosition(i) != '-'){ - while (true){ - b++; - if (alignment2->GetSequence(0)->GetPosition(b) != '-') break; - ali->push_back ('Y'); - } - } - - if (refSeq->GetSequence(0)->GetPosition(i) != '-' && - refSeq->GetSequence(1)->GetPosition(i) != '-'){ - //cerr << "M: " << refSeq->GetSequence(0)->GetPosition(i) << refSeq->GetSequence(1)->GetPosition(i) << endl; - ali->push_back ('B'); - } - else if (refSeq->GetSequence(0)->GetPosition(i) != '-'){ - //cerr << "X" << endl; - ali->push_back ('X'); - } - else if (refSeq->GetSequence(1)->GetPosition(i) != '-'){ - //cerr << "Y" << endl; - ali->push_back ('Y'); - } - } - - while (a < alignment1->GetSequence(0)->GetLength()){ - a++; - ali->push_back ('X'); - if (alignment1->GetSequence(0)->GetPosition(a) != '-') a1++; - } - while (b < alignment2->GetSequence(0)->GetLength()){ - b++; - ali->push_back ('Y'); - if (alignment2->GetSequence(0)->GetPosition(b) != '-') b1++; - } - - Sequence *seq1 = alignment1->GetSequence(1)->AddGaps (ali, 'X'); - Sequence *seq2 = alignment2->GetSequence(1)->AddGaps (ali, 'Y'); - seq1->WriteMFA (cout, 60); - seq2->WriteMFA (cout, 60); - - delete seq1; - delete seq2; - - delete ali; - delete alignment1; - delete alignment2; - delete inputSeq; - delete refSeq; -} - -///////////////////////////////////////////////////////////////// -// PrintHeading() -// -// Prints heading for PROBCONS program. -///////////////////////////////////////////////////////////////// - -void PrintHeading (){ - cerr << endl - << "PROBCONS version 1.02 - align multiple protein sequences and print to standard output" << endl - << "Copyright (C) 2004 Chuong Ba Do" << endl - << endl; -} - -///////////////////////////////////////////////////////////////// -// PrintParameters() -// -// Prints PROBCONS parameters to STDERR. If a filename is -// specified, then the parameters are also written to the file. -///////////////////////////////////////////////////////////////// - -void PrintParameters (const char *message, const VF &initDistrib, const VF &gapOpen, - const VF &gapExtend, const char *filename){ - - // print parameters to the screen - cerr << message << endl - << " initDistrib[] = { "; - for (int i = 0; i < NumMatrixTypes; i++) cerr << setprecision (10) << initDistrib[i] << " "; - cerr << "}" << endl - << " gapOpen[] = { "; - for (int i = 0; i < NumInsertStates*2; i++) cerr << setprecision (10) << gapOpen[i] << " "; - cerr << "}" << endl - << " gapExtend[] = { "; - for (int i = 0; i < NumInsertStates*2; i++) cerr << setprecision (10) << gapExtend[i] << " "; - cerr << "}" << endl - << endl; - - // if a file name is specified - if (filename){ - - // attempt to open the file for writing - FILE *file = fopen (filename, "w"); - if (!file){ - cerr << "ERROR: Unable to write parameter file: " << filename << endl; - exit (1); - } - - // if successful, then write the parameters to the file - for (int i = 0; i < NumMatrixTypes; i++) fprintf (file, "%.10f ", initDistrib[i]); fprintf (file, "\n"); - for (int i = 0; i < 2*NumInsertStates; i++) fprintf (file, "%.10f ", gapOpen[i]); fprintf (file, "\n"); - for (int i = 0; i < 2*NumInsertStates; i++) fprintf (file, "%.10f ", gapExtend[i]); fprintf (file, "\n"); - fclose (file); - } -} - -///////////////////////////////////////////////////////////////// -// DoAlign() -// -// First computes all pairwise posterior probability matrices. -// Then, computes new parameters if training, or a final -// alignment, otherwise. -///////////////////////////////////////////////////////////////// - -MultiSequence *DoAlign (MultiSequence *sequences, const ProbabilisticModel &model){ - - assert (sequences); - - const int numSeqs = sequences->GetNumSequences(); - VVF distances (numSeqs, VF (numSeqs, 0)); - SafeVector > sparseMatrices (numSeqs, SafeVector(numSeqs, NULL)); - - // do all pairwise alignments - for (int a = 0; a < numSeqs-1; a++){ - for (int b = a+1; b < numSeqs; b++){ - Sequence *seq1 = sequences->GetSequence (a); - Sequence *seq2 = sequences->GetSequence (b); - - // verbose output - if (enableVerbose) - cerr << "(" << a+1 << ") " << seq1->GetHeader() << " vs. " - << "(" << b+1 << ") " << seq2->GetHeader() << ": "; - - // compute forward and backward probabilities - VF *forward = model.ComputeForwardMatrix (seq1, seq2); assert (forward); - VF *backward = model.ComputeBackwardMatrix (seq1, seq2); assert (backward); - - // if we are training, then we'll simply want to compute the - // expected counts for each region within the matrix separately; - // otherwise, we'll need to put all of the regions together and - // assemble a posterior probability match matrix - - // compute posterior probability matrix - VF *posterior = model.ComputePosteriorMatrix (seq1, seq2, *forward, *backward); assert (posterior); - - // compute "expected accuracy" distance for evolutionary tree computation - pair *, float> alignment = model.ComputeAlignment (seq1->GetLength(), - seq2->GetLength(), - *posterior); - - float distance = alignment.second / min (seq1->GetLength(), seq2->GetLength()); - - if (enableVerbose) - cerr << setprecision (10) << distance << endl; - - // save posterior probability matrices in sparse format - distances[a][b] = distances[b][a] = distance; - sparseMatrices[a][b] = new SparseMatrix (seq1->GetLength(), seq2->GetLength(), *posterior); - sparseMatrices[b][a] = sparseMatrices[a][b]->ComputeTranspose(); - - delete alignment.first; - delete posterior; - - delete forward; - delete backward; - } - } - - if (!enableTraining){ - if (enableVerbose) - cerr << endl; - - // now, perform the consistency transformation the desired number of times - for (int i = 0; i < numConsistencyReps; i++) - DoRelaxation (sequences, sparseMatrices); - - // compute the evolutionary tree - TreeNode *tree = TreeNode::ComputeTree (distances); - - //tree->Print (cerr, sequences); - //cerr << endl; - - // make the final alignment - MultiSequence *alignment = ComputeFinalAlignment (tree, sequences, sparseMatrices, model); - delete tree; - - return alignment; - } - - return NULL; -} - -///////////////////////////////////////////////////////////////// -// GetInteger() -// -// Attempts to parse an integer from the character string given. -// Returns true only if no parsing error occurs. -///////////////////////////////////////////////////////////////// - -bool GetInteger (char *data, int *val){ - char *endPtr; - long int retVal; - - assert (val); - - errno = 0; - retVal = strtol (data, &endPtr, 0); - if (retVal == 0 && (errno != 0 || data == endPtr)) return false; - if (errno != 0 && (retVal == LONG_MAX || retVal == LONG_MIN)) return false; - if (retVal < (long) INT_MIN || retVal > (long) INT_MAX) return false; - *val = (int) retVal; - return true; -} - -///////////////////////////////////////////////////////////////// -// GetFloat() -// -// Attempts to parse a float from the character string given. -// Returns true only if no parsing error occurs. -///////////////////////////////////////////////////////////////// - -bool GetFloat (char *data, float *val){ - char *endPtr; - double retVal; - - assert (val); - - errno = 0; - retVal = strtod (data, &endPtr); - if (retVal == 0 && (errno != 0 || data == endPtr)) return false; - if (errno != 0 && (retVal >= 1000000.0 || retVal <= -1000000.0)) return false; - *val = (float) retVal; - return true; -} - -///////////////////////////////////////////////////////////////// -// ParseParams() -// -// Parse all command-line options. -///////////////////////////////////////////////////////////////// - -SafeVector ParseParams (int argc, char **argv){ - - if (argc < 2){ - - cerr << "PROBCONS comes with ABSOLUTELY NO WARRANTY. This is free software, and" << endl - << "you are welcome to redistribute it under certain conditions. See the" << endl - << "file COPYING.txt for details." << endl - << endl - << "Usage:" << endl - << " probcons [OPTION]... [MFAFILE]..." << endl - << endl - << "Description:" << endl - << " Align sequences in MFAFILE(s) and print result to standard output" << endl - << endl - << " -t, --train FILENAME" << endl - << " compute EM transition probabilities, store in FILENAME (default: " - << parametersOutputFilename << ")" << endl - << endl - << " -m, --matrixfile FILENAME" << endl - << " read transition parameters from FILENAME (default: " - << matrixFilename << ")" << endl - << endl - << " -p, --paramfile FILENAME" << endl - << " read scoring matrix probabilities from FILENAME (default: " - << parametersInputFilename << ")" << endl - << endl - << " -c, --consistency REPS" << endl - << " use " << MIN_CONSISTENCY_REPS << " <= REPS <= " << MAX_CONSISTENCY_REPS - << " (default: " << numConsistencyReps << ") passes of consistency transformation" << endl - << endl - << " -ir, --iterative-refinement REPS" << endl - << " use " << MIN_ITERATIVE_REFINEMENT_REPS << " <= REPS <= " << MAX_ITERATIVE_REFINEMENT_REPS - << " (default: " << numIterativeRefinementReps << ") passes of iterative-refinement" << endl - << endl - << " -pre, --pre-training REPS" << endl - << " use " << MIN_PRETRAINING_REPS << " <= REPS <= " << MAX_PRETRAINING_REPS - << " (default: " << numPreTrainingReps << ") rounds of pretraining" << endl - << endl - << " -go, --gap-open VALUE" << endl - << " gap opening penalty of VALUE <= 0 (default: " << gapOpenPenalty << ")" << endl - << endl - << " -ge, --gap-extension VALUE" << endl - << " gap extension penalty of VALUE <= 0 (default: " << gapContinuePenalty << ")" << endl - << endl - << " -v, --verbose" << endl - << " report progress while aligning (default: " << (enableVerbose ? "on" : "off") << ")" << endl - << endl; - - exit (1); - } - - SafeVector sequenceNames; - int tempInt; - float tempFloat; - - for (int i = 1; i < argc; i++){ - if (argv[i][0] == '-'){ - - // training - if (!strcmp (argv[i], "-t") || !strcmp (argv[i], "--train")){ - enableTraining = true; - if (i < argc - 1) - parametersOutputFilename = string (argv[++i]); - else { - cerr << "ERROR: Filename expected for option " << argv[i] << endl; - exit (1); - } - } - - // scoring matrix file - else if (!strcmp (argv[i], "-m") || !strcmp (argv[i], "--matrixfile")){ - if (i < argc - 1) - matrixFilename = string (argv[++i]); - else { - cerr << "ERROR: Filename expected for option " << argv[i] << endl; - exit (1); - } - } - - // transition/initial distribution parameter file - else if (!strcmp (argv[i], "-p") || !strcmp (argv[i], "--paramfile")){ - if (i < argc - 1) - parametersInputFilename = string (argv[++i]); - else { - cerr << "ERROR: Filename expected for option " << argv[i] << endl; - exit (1); - } - } - - // number of consistency transformations - else if (!strcmp (argv[i], "-c") || !strcmp (argv[i], "--consistency")){ - if (i < argc - 1){ - if (!GetInteger (argv[++i], &tempInt)){ - cerr << "ERROR: Invalid integer following option " << argv[i-1] << ": " << argv[i] << endl; - exit (1); - } - else { - if (tempInt < MIN_CONSISTENCY_REPS || tempInt > MAX_CONSISTENCY_REPS){ - cerr << "ERROR: For option " << argv[i-1] << ", integer must be between " - << MIN_CONSISTENCY_REPS << " and " << MAX_CONSISTENCY_REPS << "." << endl; - exit (1); - } - else - numConsistencyReps = tempInt; - } - } - else { - cerr << "ERROR: Integer expected for option " << argv[i] << endl; - exit (1); - } - } - - // number of randomized partitioning iterative refinement passes - else if (!strcmp (argv[i], "-ir") || !strcmp (argv[i], "--iterative-refinement")){ - if (i < argc - 1){ - if (!GetInteger (argv[++i], &tempInt)){ - cerr << "ERROR: Invalid integer following option " << argv[i-1] << ": " << argv[i] << endl; - exit (1); - } - else { - if (tempInt < MIN_ITERATIVE_REFINEMENT_REPS || tempInt > MAX_ITERATIVE_REFINEMENT_REPS){ - cerr << "ERROR: For option " << argv[i-1] << ", integer must be between " - << MIN_ITERATIVE_REFINEMENT_REPS << " and " << MAX_ITERATIVE_REFINEMENT_REPS << "." << endl; - exit (1); - } - else - numIterativeRefinementReps = tempInt; - } - } - else { - cerr << "ERROR: Integer expected for option " << argv[i] << endl; - exit (1); - } - } - - // number of EM pre-training rounds - else if (!strcmp (argv[i], "-pre") || !strcmp (argv[i], "--pre-training")){ - if (i < argc - 1){ - if (!GetInteger (argv[++i], &tempInt)){ - cerr << "ERROR: Invalid integer following option " << argv[i-1] << ": " << argv[i] << endl; - exit (1); - } - else { - if (tempInt < MIN_PRETRAINING_REPS || tempInt > MAX_PRETRAINING_REPS){ - cerr << "ERROR: For option " << argv[i-1] << ", integer must be between " - << MIN_PRETRAINING_REPS << " and " << MAX_PRETRAINING_REPS << "." << endl; - exit (1); - } - else - numPreTrainingReps = tempInt; - } - } - else { - cerr << "ERROR: Integer expected for option " << argv[i] << endl; - exit (1); - } - } - - // gap open penalty - else if (!strcmp (argv[i], "-go") || !strcmp (argv[i], "--gap-open")){ - if (i < argc - 1){ - if (!GetFloat (argv[++i], &tempFloat)){ - cerr << "ERROR: Invalid floating-point value following option " << argv[i-1] << ": " << argv[i] << endl; - exit (1); - } - else { - if (tempFloat > 0){ - cerr << "ERROR: For option " << argv[i-1] << ", floating-point value must not be positive." << endl; - exit (1); - } - else - gapOpenPenalty = tempFloat; - } - } - else { - cerr << "ERROR: Floating-point value expected for option " << argv[i] << endl; - exit (1); - } - } - - // gap extension penalty - else if (!strcmp (argv[i], "-ge") || !strcmp (argv[i], "--gap-extension")){ - if (i < argc - 1){ - if (!GetFloat (argv[++i], &tempFloat)){ - cerr << "ERROR: Invalid floating-point value following option " << argv[i-1] << ": " << argv[i] << endl; - exit (1); - } - else { - if (tempFloat > 0){ - cerr << "ERROR: For option " << argv[i-1] << ", floating-point value must not be positive." << endl; - exit (1); - } - else - gapContinuePenalty = tempFloat; - } - } - else { - cerr << "ERROR: Floating-point value expected for option " << argv[i] << endl; - exit (1); - } - } - - // verbose reporting - else if (!strcmp (argv[i], "-v") || !strcmp (argv[i], "--verbose")){ - enableVerbose = true; - } - - // bad arguments - else { - cerr << "ERROR: Unrecognized option: " << argv[i] << endl; - exit (1); - } - } - else { - sequenceNames.push_back (string (argv[i])); - } - } - - return sequenceNames; -} - -///////////////////////////////////////////////////////////////// -// ReadParameters() -// -// Read initial distribution, transition, and emission -// parameters from a file. -///////////////////////////////////////////////////////////////// - -void ReadParameters (){ - - ifstream data; - - // read initial state distribution and transition parameters - if (parametersInputFilename == string ("")){ - if (NumInsertStates == 1){ - for (int i = 0; i < NumMatrixTypes; i++) initDistrib[i] = initDistrib1Default[i]; - for (int i = 0; i < 2*NumInsertStates; i++) gapOpen[i] = gapOpen1Default[i]; - for (int i = 0; i < 2*NumInsertStates; i++) gapExtend[i] = gapExtend1Default[i]; - } - else if (NumInsertStates == 2){ - for (int i = 0; i < NumMatrixTypes; i++) initDistrib[i] = initDistrib2Default[i]; - for (int i = 0; i < 2*NumInsertStates; i++) gapOpen[i] = gapOpen2Default[i]; - for (int i = 0; i < 2*NumInsertStates; i++) gapExtend[i] = gapExtend2Default[i]; - } - else { - cerr << "ERROR: No default initial distribution/parameter settings exist" << endl - << " for " << NumInsertStates << " pairs of insert states. Use --paramfile." << endl; - exit (1); - } - } - else { - data.open (parametersInputFilename.c_str()); - if (data.fail()){ - cerr << "ERROR: Unable to read parameter file: " << parametersInputFilename << endl; - exit (1); - } - for (int i = 0; i < NumMatrixTypes; i++) data >> initDistrib[i]; - for (int i = 0; i < 2*NumInsertStates; i++) data >> gapOpen[i]; - for (int i = 0; i < 2*NumInsertStates; i++) data >> gapExtend[i]; - data.close(); - } - - // read emission parameters - int alphabetSize = 20; - - // allocate memory - alphabet = SafeVector(alphabetSize); - emitPairs = VVF (alphabetSize, VF (alphabetSize, 0)); - emitSingle = VF (alphabetSize); - - if (matrixFilename == string ("")){ - for (int i = 0; i < alphabetSize; i++) alphabet[i] = alphabetDefault[i]; - for (int i = 0; i < alphabetSize; i++){ - emitSingle[i] = emitSingleDefault[i]; - for (int j = 0; j <= i; j++){ - emitPairs[i][j] = emitPairs[j][i] = (i == j); - } - } - } - else { - data.open (matrixFilename.c_str()); - if (data.fail()){ - cerr << "ERROR: Unable to read scoring matrix file: " << matrixFilename << endl; - exit (1); - } - - for (int i = 0; i < alphabetSize; i++) data >> alphabet[i]; - for (int i = 0; i < alphabetSize; i++){ - for (int j = 0; j <= i; j++){ - data >> emitPairs[i][j]; - emitPairs[j][i] = emitPairs[i][j]; - } - } - for (int i = 0; i < alphabetSize; i++){ - char ch; - data >> ch; - assert (ch == alphabet[i]); - } - for (int i = 0; i < alphabetSize; i++) data >> emitSingle[i]; - data.close(); - } -} - -///////////////////////////////////////////////////////////////// -// ProcessTree() -// -// Process the tree recursively. Returns the aligned sequences -// corresponding to a node or leaf of the tree. -///////////////////////////////////////////////////////////////// - -MultiSequence *ProcessTree (const TreeNode *tree, MultiSequence *sequences, - const SafeVector > &sparseMatrices, - const ProbabilisticModel &model){ - MultiSequence *result; - - // check if this is a node of the alignment tree - if (tree->GetSequenceLabel() == -1){ - MultiSequence *alignLeft = ProcessTree (tree->GetLeftChild(), sequences, sparseMatrices, model); - MultiSequence *alignRight = ProcessTree (tree->GetRightChild(), sequences, sparseMatrices, model); - - assert (alignLeft); - assert (alignRight); - - result = AlignAlignments (alignLeft, alignRight, sparseMatrices, model); - assert (result); - - delete alignLeft; - delete alignRight; - } - - // otherwise, this is a leaf of the alignment tree - else { - result = new MultiSequence(); assert (result); - result->AddSequence (sequences->GetSequence(tree->GetSequenceLabel())->Clone()); - } - - return result; -} - -///////////////////////////////////////////////////////////////// -// ComputeFinalAlignment() -// -// Compute the final alignment by calling ProcessTree(), then -// performing iterative refinement as needed. -///////////////////////////////////////////////////////////////// - -MultiSequence *ComputeFinalAlignment (const TreeNode *tree, MultiSequence *sequences, - const SafeVector > &sparseMatrices, - const ProbabilisticModel &model){ - - MultiSequence *alignment = ProcessTree (tree, sequences, sparseMatrices, model); - - // iterative refinement - for (int i = 0; i < numIterativeRefinementReps; i++) - DoIterativeRefinement (sparseMatrices, model, alignment); - - cerr << endl; - - // return final alignment - return alignment; -} - -///////////////////////////////////////////////////////////////// -// AlignAlignments() -// -// Returns the alignment of two MultiSequence objects. -///////////////////////////////////////////////////////////////// - -MultiSequence *AlignAlignments (MultiSequence *align1, MultiSequence *align2, - const SafeVector > &sparseMatrices, - const ProbabilisticModel &model){ - - // print some info about the alignment - if (enableVerbose){ - for (int i = 0; i < align1->GetNumSequences(); i++) - cerr << ((i==0) ? "[" : ",") << align1->GetSequence(i)->GetLabel(); - cerr << "] vs. "; - for (int i = 0; i < align2->GetNumSequences(); i++) - cerr << ((i==0) ? "[" : ",") << align2->GetSequence(i)->GetLabel(); - cerr << "]: "; - } - - VF *posterior = model.BuildPosterior (align1, align2, sparseMatrices); - pair *, float> alignment; - - // choose the alignment routine depending on the "cosmetic" gap penalties used - if (gapOpenPenalty == 0 && gapContinuePenalty == 0) - alignment = model.ComputeAlignment (align1->GetSequence(0)->GetLength(), align2->GetSequence(0)->GetLength(), *posterior); - else - alignment = model.ComputeAlignmentWithGapPenalties (align1, align2, - *posterior, align1->GetNumSequences(), align2->GetNumSequences(), - gapOpenPenalty, gapContinuePenalty); - - delete posterior; - - if (enableVerbose){ - - // compute total length of sequences - int totLength = 0; - for (int i = 0; i < align1->GetNumSequences(); i++) - for (int j = 0; j < align2->GetNumSequences(); j++) - totLength += min (align1->GetSequence(i)->GetLength(), align2->GetSequence(j)->GetLength()); - - // give an "accuracy" measure for the alignment - cerr << alignment.second / totLength << endl; - } - - // now build final alignment - MultiSequence *result = new MultiSequence(); - for (int i = 0; i < align1->GetNumSequences(); i++) - result->AddSequence (align1->GetSequence(i)->AddGaps(alignment.first, 'X')); - for (int i = 0; i < align2->GetNumSequences(); i++) - result->AddSequence (align2->GetSequence(i)->AddGaps(alignment.first, 'Y')); - result->SortByLabel(); - - // free temporary alignment - delete alignment.first; - - return result; -} - -///////////////////////////////////////////////////////////////// -// DoRelaxation() -// -// Performs one round of the consistency transformation. The -// formula used is: -// 1 -// P'(x[i]-y[j]) = --- sum sum P(x[i]-z[k]) P(z[k]-y[j]) -// |S| z in S k -// -// where S = {x, y, all other sequences...} -// -///////////////////////////////////////////////////////////////// - -void DoRelaxation (MultiSequence *sequences, SafeVector > &sparseMatrices){ - const int numSeqs = sequences->GetNumSequences(); - - SafeVector > newSparseMatrices (numSeqs, SafeVector(numSeqs, NULL)); - - // for every pair of sequences - for (int i = 0; i < numSeqs; i++){ - for (int j = i+1; j < numSeqs; j++){ - Sequence *seq1 = sequences->GetSequence (i); - Sequence *seq2 = sequences->GetSequence (j); - - if (enableVerbose) - cerr << "Relaxing (" << i+1 << ") " << seq1->GetHeader() << " vs. " - << "(" << j+1 << ") " << seq2->GetHeader() << ": "; - - // get the original posterior matrix - VF *posteriorPtr = sparseMatrices[i][j]->GetPosterior(); assert (posteriorPtr); - VF &posterior = *posteriorPtr; - - const int seq1Length = seq1->GetLength(); - const int seq2Length = seq2->GetLength(); - - // contribution from the summation where z = x and z = y - for (int k = 0; k < (seq1Length+1) * (seq2Length+1); k++) posterior[k] += posterior[k]; - - if (enableVerbose) - cerr << sparseMatrices[i][j]->GetNumCells() << " --> "; - - // contribution from all other sequences - for (int k = 0; k < numSeqs; k++) if (k != i && k != j){ - Relax (sparseMatrices[i][k], sparseMatrices[k][j], posterior); - } - - // now renormalization - for (int k = 0; k < (seq1Length+1) * (seq2Length+1); k++) posterior[k] /= numSeqs; - - // save the new posterior matrix - newSparseMatrices[i][j] = new SparseMatrix (seq1->GetLength(), seq2->GetLength(), posterior); - newSparseMatrices[j][i] = newSparseMatrices[i][j]->ComputeTranspose(); - - if (enableVerbose) - cerr << newSparseMatrices[i][j]->GetNumCells() << " -- "; - - delete posteriorPtr; - - if (enableVerbose) - cerr << "done." << endl; - } - } - - // now replace the old posterior matrices - for (int i = 0; i < numSeqs; i++){ - for (int j = 0; j < numSeqs; j++){ - delete sparseMatrices[i][j]; - sparseMatrices[i][j] = newSparseMatrices[i][j]; - } - } -} - -///////////////////////////////////////////////////////////////// -// DoRelaxation() -// -// Computes the consistency transformation for a single sequence -// z, and adds the transformed matrix to "posterior". -///////////////////////////////////////////////////////////////// - -void Relax (SparseMatrix *matXZ, SparseMatrix *matZY, VF &posterior){ - - assert (matXZ); - assert (matZY); - - int lengthX = matXZ->GetSeq1Length(); - int lengthY = matZY->GetSeq2Length(); - assert (matXZ->GetSeq2Length() == matZY->GetSeq1Length()); - - // for every x[i] - for (int i = 1; i <= lengthX; i++){ - SafeVector::iterator XZptr = matXZ->GetRowPtr(i); - SafeVector::iterator XZend = XZptr + matXZ->GetRowSize(i); - - VF::iterator base = posterior.begin() + i * (lengthY + 1); - - // iterate through all x[i]-z[k] - while (XZptr != XZend){ - SafeVector::iterator ZYptr = matZY->GetRowPtr(XZptr->first); - SafeVector::iterator ZYend = ZYptr + matZY->GetRowSize(XZptr->first); - const float XZval = XZptr->second; - - // iterate through all z[k]-y[j] - while (ZYptr != ZYend){ - base[ZYptr->first] += XZval * ZYptr->second;; - ZYptr++; - } - XZptr++; - } - } -} - -///////////////////////////////////////////////////////////////// -// DoIterativeRefinement() -// -// Performs a single round of randomized partionining iterative -// refinement. -///////////////////////////////////////////////////////////////// - -void DoIterativeRefinement (const SafeVector > &sparseMatrices, - const ProbabilisticModel &model, MultiSequence* &alignment){ - set groupOne, groupTwo; - - // create two separate groups - for (int i = 0; i < alignment->GetNumSequences(); i++){ - if (random() % 2) - groupOne.insert (i); - else - groupTwo.insert (i); - } - - if (groupOne.empty() || groupTwo.empty()) return; - - // project into the two groups - MultiSequence *groupOneSeqs = alignment->Project (groupOne); assert (groupOneSeqs); - MultiSequence *groupTwoSeqs = alignment->Project (groupTwo); assert (groupTwoSeqs); - delete alignment; - - // realign - alignment = AlignAlignments (groupOneSeqs, groupTwoSeqs, sparseMatrices, model); -} - -/* -float ScoreAlignment (MultiSequence *alignment, MultiSequence *sequences, SparseMatrix **sparseMatrices, const int numSeqs){ - int totLength = 0; - float score = 0; - - for (int a = 0; a < alignment->GetNumSequences(); a++){ - for (int b = a+1; b < alignment->GetNumSequences(); b++){ - Sequence *seq1 = alignment->GetSequence(a); - Sequence *seq2 = alignment->GetSequence(b); - - const int seq1Length = sequences->GetSequence(seq1->GetLabel())->GetLength(); - const int seq2Length = sequences->GetSequence(seq2->GetLabel())->GetLength(); - - totLength += min (seq1Length, seq2Length); - - int pos1 = 0, pos2 = 0; - for (int i = 1; i <= seq1->GetLength(); i++){ - char ch1 = seq1->GetPosition(i); - char ch2 = seq2->GetPosition(i); - - if (ch1 != '-') pos1++; - if (ch2 != '-') pos2++; - if (ch1 != '-' && ch2 != '-'){ - score += sparseMatrices[a * numSeqs + b]->GetValue (pos1, pos2); - } - } - } - } - - return score / totLength; -} -*/ diff --git a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/Main.cc b/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/Main.cc deleted file mode 100644 index 5392f40..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/Main.cc +++ /dev/null @@ -1,1870 +0,0 @@ -///////////////////////////////////////////////////////////////// -// Main.cc -// -// Main routines for MXSCARNA program. -///////////////////////////////////////////////////////////////// - -#include "scarna.hpp" -#include "SafeVector.h" -#include "MultiSequence.h" -#include "Defaults.h" -#include "ScoreType.h" -#include "ProbabilisticModel.h" -#include "EvolutionaryTree.h" -#include "SparseMatrix.h" -#include "BPPMatrix.hpp" -#include "StemCandidate.hpp" -#include "Globaldp.hpp" -#include "nrutil.h" -#include "AlifoldMEA.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "RfoldWrapper.hpp" -//static RFOLD::Rfold folder; - -using namespace::MXSCARNA; -using namespace::RFOLD; - -string parametersInputFilename = ""; -string parametersOutputFilename = "no training"; -string annotationFilename = ""; -string weboutputFileName = ""; - -ofstream *outputFile; - -bool enableTraining = false; -bool enableVerbose = false; -bool enableAllPairs = false; -bool enableAnnotation = false; -bool enableViterbi = false; -bool enableClustalWOutput = false; -bool enableTrainEmissions = false; -bool enableAlignOrder = false; -bool enableWebOutput = false; -bool enableStockholmOutput = false; -bool enableMXSCARNAOutput = false; -bool enableMcCaskillMEAMode = false; -int numConsistencyReps = 2; -int numPreTrainingReps = 0; -int numIterativeRefinementReps = 100; -int scsLength = SCSLENGTH; -float cutoff = 0; -float gapOpenPenalty = 0; -float gapContinuePenalty = 0; -float threshhold = 1.0; -float BaseProbThreshold = BASEPROBTHRESHOLD; -float BasePairConst = BASEPAIRCONST; -int BandWidth = BANDWIDTH; -bool useRfold = USERFOLD; -SafeVector sequenceNames; - -VF initDistrib (NumMatrixTypes); -VF gapOpen (2*NumInsertStates); -VF gapExtend (2*NumInsertStates); -VVF emitPairs (256, VF (256, 1e-10)); -VF emitSingle (256, 1e-5); - -string alphabet = alphabetDefault; - -string *ssCons = NULL; - -const int MIN_PRETRAINING_REPS = 0; -const int MAX_PRETRAINING_REPS = 20; -const int MIN_CONSISTENCY_REPS = 0; -const int MAX_CONSISTENCY_REPS = 5; -const int MIN_ITERATIVE_REFINEMENT_REPS = 0; -const int MAX_ITERATIVE_REFINEMENT_REPS = 1000; - -///////////////////////////////////////////////////////////////// -// Function prototypes -///////////////////////////////////////////////////////////////// - -void PrintHeading(); -void PrintParameters (const char *message, const VF &initDistrib, const VF &gapOpen, - const VF &gapExtend, const VVF &emitPairs, const VF &emitSingle, const char *filename); -MultiSequence *DoAlign (MultiSequence *sequence, const ProbabilisticModel &model, VF &initDistrib, VF &gapOpen, VF &gapExtend, VVF &emitPairs, VF &emitSingle); -SafeVector ParseParams (int argc, char **argv); -void ReadParameters (); -MultiSequence *ComputeFinalAlignment (const TreeNode *tree, MultiSequence *sequences, - const SafeVector > &sparseMatrices, - const ProbabilisticModel &model, - SafeVector &BPPMatrices); -MultiSequence *AlignAlignments (MultiSequence *align1, MultiSequence *align2, - const SafeVector > &sparseMatrices, - const ProbabilisticModel &model, SafeVector &BPPMatrices, float identity); -SafeVector > DoRelaxation (MultiSequence *sequences, - SafeVector > &sparseMatrices); -void Relax (SparseMatrix *matXZ, SparseMatrix *matZY, VF &posterior); -void Relax1 (SparseMatrix *matXZ, SparseMatrix *matZY, VF &posterior); -void DoBasePairProbabilityRelaxation (MultiSequence *sequences, - SafeVector > &sparseMatrices, - SafeVector &BPPMatrices); -set GetSubtree (const TreeNode *tree); -void TreeBasedBiPartitioning (const SafeVector > &sparseMatrices, - const ProbabilisticModel &model, MultiSequence* &alignment, - const TreeNode *tree, SafeVector &BPPMatrices); -void DoIterativeRefinement (const SafeVector > &sparseMatrices, - const ProbabilisticModel &model, MultiSequence* &alignment); -void WriteAnnotation (MultiSequence *alignment, - const SafeVector > &sparseMatrices); -int ComputeScore (const SafeVector > &active, - const SafeVector > &sparseMatrices); -std::vector* seq2scs(MultiSequence *Sequences, SafeVector &BPPMatrices, int BandWidth); -void removeConflicts(std::vector *pscs1, std::vector *pscs2, std::vector *matchPSCS1, std::vector *matchPSCS2); - -struct prob { - int i; - int j; - float p; -}; - -///////////////////////////////////////////////////////////////// -// main() -// -// Calls all initialization routines and runs the MXSCARNA -// aligner. -///////////////////////////////////////////////////////////////// - - -int main (int argc, char **argv){ - - // print MXSCARNA heading - PrintHeading(); - - // parse program parameters - sequenceNames = ParseParams (argc, argv); - ReadParameters(); - PrintParameters ("Using parameter set:", initDistrib, gapOpen, gapExtend, emitPairs, emitSingle, NULL); - - // now, we'll process all the files given as input. If we are given - // several filenames as input, then we'll load all of those sequences - // simultaneously, as long as we're not training. On the other hand, - // if we are training, then we'll treat each file as a separate - // training instance - - if (enableMcCaskillMEAMode) { - MultiSequence *sequences = new MultiSequence(); assert (sequences); - for (int i = 0; i < (int) sequenceNames.size(); i++){ - cerr << "Loading sequence file: " << sequenceNames[i] << endl; - sequences->LoadMFA (sequenceNames[i], true); - } - - const int numSeqs = sequences->GetNumSequences(); - SafeVector BPPMatrices; - - // compute the base pairing matrices for each sequences - for(int i = 0; i < numSeqs; i++) { - Sequence *tmpSeq = sequences->GetSequence(i); - string seq = tmpSeq->GetString(); - int n_seq = tmpSeq->GetLength(); - BPPMatrix *bppmat = new BPPMatrix(seq, n_seq); - BPPMatrices.push_back(bppmat); - } - AlifoldMEA alifold(sequences, BPPMatrices, BasePairConst); - alifold.Run(); - ssCons = alifold.getSScons(); - - if (enableStockholmOutput) { - sequences->WriteSTOCKHOLM (cout, ssCons); - } - else if (enableMXSCARNAOutput){ - sequences->WriteMXSCARNA (cout, ssCons); - } - else { - sequences->WriteMFA (cout, ssCons); - } - - delete sequences; - } - // if we are training - else if (enableTraining){ - - // build new model for aligning - ProbabilisticModel model (initDistrib, gapOpen, gapExtend, emitPairs, emitSingle); - - // prepare to average parameters - for (int i = 0; i < (int) initDistrib.size(); i++) initDistrib[i] = 0; - for (int i = 0; i < (int) gapOpen.size(); i++) gapOpen[i] = 0; - for (int i = 0; i < (int) gapExtend.size(); i++) gapExtend[i] = 0; - if (enableTrainEmissions){ - for (int i = 0; i < (int) emitPairs.size(); i++) - for (int j = 0; j < (int) emitPairs[i].size(); j++) emitPairs[i][j] = 0; - for (int i = 0; i < (int) emitSingle.size(); i++) emitSingle[i] = 0; - } - - // align each file individually - for (int i = 0; i < (int) sequenceNames.size(); i++){ - - VF thisInitDistrib (NumMatrixTypes); - VF thisGapOpen (2*NumInsertStates); - VF thisGapExtend (2*NumInsertStates); - VVF thisEmitPairs (256, VF (256, 1e-10)); - VF thisEmitSingle (256, 1e-5); - - // load sequence file - MultiSequence *sequences = new MultiSequence(); assert (sequences); - cerr << "Loading sequence file: " << sequenceNames[i] << endl; - sequences->LoadMFA (sequenceNames[i], true); - - // align sequences - DoAlign (sequences, model, thisInitDistrib, thisGapOpen, thisGapExtend, thisEmitPairs, thisEmitSingle); - - // add in contribution of the derived parameters - for (int i = 0; i < (int) initDistrib.size(); i++) initDistrib[i] += thisInitDistrib[i]; - for (int i = 0; i < (int) gapOpen.size(); i++) gapOpen[i] += thisGapOpen[i]; - for (int i = 0; i < (int) gapExtend.size(); i++) gapExtend[i] += thisGapExtend[i]; - if (enableTrainEmissions){ - for (int i = 0; i < (int) emitPairs.size(); i++) - for (int j = 0; j < (int) emitPairs[i].size(); j++) emitPairs[i][j] += thisEmitPairs[i][j]; - for (int i = 0; i < (int) emitSingle.size(); i++) emitSingle[i] += thisEmitSingle[i]; - } - - delete sequences; - } - - // compute new parameters and print them out - for (int i = 0; i < (int) initDistrib.size(); i++) initDistrib[i] /= (int) sequenceNames.size(); - for (int i = 0; i < (int) gapOpen.size(); i++) gapOpen[i] /= (int) sequenceNames.size(); - for (int i = 0; i < (int) gapExtend.size(); i++) gapExtend[i] /= (int) sequenceNames.size(); - if (enableTrainEmissions){ - for (int i = 0; i < (int) emitPairs.size(); i++) - for (int j = 0; j < (int) emitPairs[i].size(); j++) emitPairs[i][j] /= (int) sequenceNames.size(); - for (int i = 0; i < (int) emitSingle.size(); i++) emitSingle[i] /= sequenceNames.size(); - } - - PrintParameters ("Trained parameter set:", - initDistrib, gapOpen, gapExtend, emitPairs, emitSingle, - parametersOutputFilename.c_str()); - } - // pass - // if we are not training, we must simply want to align some sequences - else { - // load all files together - MultiSequence *sequences = new MultiSequence(); assert (sequences); - for (int i = 0; i < (int) sequenceNames.size(); i++){ - cerr << "Loading sequence file: " << sequenceNames[i] << endl; - - sequences->LoadMFA (sequenceNames[i], true); - } - - // do all "pre-training" repetitions first - // NOT execute - for (int ct = 0; ct < numPreTrainingReps; ct++){ - enableTraining = true; - - // build new model for aligning - ProbabilisticModel model (initDistrib, gapOpen, gapExtend, - emitPairs, emitSingle); - - // do initial alignments - DoAlign (sequences, model, initDistrib, gapOpen, gapExtend, emitPairs, emitSingle); - - // print new parameters - PrintParameters ("Recomputed parameter set:", initDistrib, gapOpen, gapExtend, emitPairs, emitSingle, NULL); - - enableTraining = false; - } - - // now, we can perform the alignments and write them out - if (enableWebOutput) { - outputFile = new ofstream(weboutputFileName.c_str()); - if (!outputFile) { - cerr << "cannot open output file." << weboutputFileName << endl; - exit(1); - } - *outputFile << "" << endl; - *outputFile << "" << endl; - } - MultiSequence *alignment = DoAlign (sequences, - ProbabilisticModel (initDistrib, gapOpen, gapExtend, emitPairs, emitSingle), - initDistrib, gapOpen, gapExtend, emitPairs, emitSingle); - - - if (!enableAllPairs){ - if (enableClustalWOutput) { - alignment->WriteALN (cout); - } - else if (enableWebOutput) { - alignment->WriteWEB (*outputFile, ssCons); -// computeStructureWithAlifold (); - } - else if (enableStockholmOutput) { - alignment->WriteSTOCKHOLM (cout, ssCons); - } - else if (enableMXSCARNAOutput) { - alignment->WriteMXSCARNA (cout, ssCons); - } - else { - alignment->WriteMFA (cout, ssCons); - } - } - - if (enableWebOutput) { - *outputFile << "" << endl; - delete outputFile; - } - - delete ssCons; - delete alignment; - delete sequences; - - } -} - -///////////////////////////////////////////////////////////////// -// PrintHeading() -// -// Prints heading for PROBCONS program. -///////////////////////////////////////////////////////////////// - -void PrintHeading (){ - cerr << endl - << "Multiplex SCARNA"<< endl - << "version " << VERSION << " - align multiple RNA sequences and print to standard output" << endl - << "Written by Yasuo Tabei" << endl - << endl; -} - -///////////////////////////////////////////////////////////////// -// PrintParameters() -// -// Prints PROBCONS parameters to STDERR. If a filename is -// specified, then the parameters are also written to the file. -///////////////////////////////////////////////////////////////// - -void PrintParameters (const char *message, const VF &initDistrib, const VF &gapOpen, - const VF &gapExtend, const VVF &emitPairs, const VF &emitSingle, const char *filename){ - - // print parameters to the screen - cerr << message << endl - << " initDistrib[] = { "; - for (int i = 0; i < NumMatrixTypes; i++) cerr << setprecision (10) << initDistrib[i] << " "; - cerr << "}" << endl - << " gapOpen[] = { "; - for (int i = 0; i < NumInsertStates*2; i++) cerr << setprecision (10) << gapOpen[i] << " "; - cerr << "}" << endl - << " gapExtend[] = { "; - for (int i = 0; i < NumInsertStates*2; i++) cerr << setprecision (10) << gapExtend[i] << " "; - cerr << "}" << endl - << endl; - - /* - for (int i = 0; i < 5; i++){ - for (int j = 0; j <= i; j++){ - cerr << emitPairs[(unsigned char) alphabet[i]][(unsigned char) alphabet[j]] << " "; - } - cerr << endl; - }*/ - - // if a file name is specified - if (filename){ - - // attempt to open the file for writing - FILE *file = fopen (filename, "w"); - if (!file){ - cerr << "ERROR: Unable to write parameter file: " << filename << endl; - exit (1); - } - - // if successful, then write the parameters to the file - for (int i = 0; i < NumMatrixTypes; i++) fprintf (file, "%.10f ", initDistrib[i]); fprintf (file, "\n"); - for (int i = 0; i < 2*NumInsertStates; i++) fprintf (file, "%.10f ", gapOpen[i]); fprintf (file, "\n"); - for (int i = 0; i < 2*NumInsertStates; i++) fprintf (file, "%.10f ", gapExtend[i]); fprintf (file, "\n"); - fprintf (file, "%s\n", alphabet.c_str()); - for (int i = 0; i < (int) alphabet.size(); i++){ - for (int j = 0; j <= i; j++) - fprintf (file, "%.10f ", emitPairs[(unsigned char) alphabet[i]][(unsigned char) alphabet[j]]); - fprintf (file, "\n"); - } - for (int i = 0; i < (int) alphabet.size(); i++) - fprintf (file, "%.10f ", emitSingle[(unsigned char) alphabet[i]]); - fprintf (file, "\n"); - fclose (file); - } -} - -///////////////////////////////////////////////////////////////// -// DoAlign() -// -// First computes all pairwise posterior probability matrices. -// Then, computes new parameters if training, or a final -// alignment, otherwise. -///////////////////////////////////////////////////////////////// -MultiSequence *DoAlign (MultiSequence *sequences, const ProbabilisticModel &model, VF &initDistrib, VF &gapOpen, VF &gapExtend, VVF &emitPairs, VF &emitSingle){ - - assert (sequences); - - const int numSeqs = sequences->GetNumSequences(); - VVF distances (numSeqs, VF (numSeqs, 0)); - VVF identities (numSeqs, VF (numSeqs, 0)); - SafeVector > sparseMatrices (numSeqs, SafeVector(numSeqs, NULL)); - - SafeVector BPPMatrices; - - RfoldWrapper rfoldWrapper; - if (useRfold) { - BPPMatrices - = rfoldWrapper.getProb(sequenceNames, sequences, BASEPROBTHRESHOLD, BandWidth); - } - else { - for(int i = 0; i < numSeqs; i++) { - Sequence *tmpSeq = sequences->GetSequence(i); - string seq = tmpSeq->GetString(); - int n_seq = tmpSeq->GetLength(); - BPPMatrix *bppmat = new BPPMatrix(seq, n_seq, BASEPROBTHRESHOLD); - BPPMatrices.push_back(bppmat); - } - } - - if (enableTraining){ - // prepare to average parameters - for (int i = 0; i < (int) initDistrib.size(); i++) initDistrib[i] = 0; - for (int i = 0; i < (int) gapOpen.size(); i++) gapOpen[i] = 0; - for (int i = 0; i < (int) gapExtend.size(); i++) gapExtend[i] = 0; - if (enableTrainEmissions){ - for (int i = 0; i < (int) emitPairs.size(); i++) - for (int j = 0; j < (int) emitPairs[i].size(); j++) emitPairs[i][j] = 0; - for (int i = 0; i < (int) emitSingle.size(); i++) emitSingle[i] = 0; - } - } - - // skip posterior calculations if we just want to do Viterbi alignments - if (!enableViterbi){ - - // do all pairwise alignments for posterior probability matrices - for (int a = 0; a < numSeqs-1; a++){ - for (int b = a+1; b < numSeqs; b++){ - Sequence *seq1 = sequences->GetSequence (a); - Sequence *seq2 = sequences->GetSequence (b); - - // verbose output - if (enableVerbose) - cerr << "Computing posterior matrix: (" << a+1 << ") " << seq1->GetHeader() << " vs. " - << "(" << b+1 << ") " << seq2->GetHeader() << " -- "; - - // compute forward and backward probabilities - VF *forward = model.ComputeForwardMatrix (seq1, seq2); assert (forward); - VF *backward = model.ComputeBackwardMatrix (seq1, seq2); assert (backward); - - // if we are training, then we'll simply want to compute the - // expected counts for each region within the matrix separately; - // otherwise, we'll need to put all of the regions together and - // assemble a posterior probability match matrix - - // so, if we're training - if (enableTraining){ - - // compute new parameters - VF thisInitDistrib (NumMatrixTypes); - VF thisGapOpen (2*NumInsertStates); - VF thisGapExtend (2*NumInsertStates); - VVF thisEmitPairs (256, VF (256, 1e-10)); - VF thisEmitSingle (256, 1e-5); - - model.ComputeNewParameters (seq1, seq2, *forward, *backward, thisInitDistrib, thisGapOpen, thisGapExtend, thisEmitPairs, thisEmitSingle, enableTrainEmissions); - - // add in contribution of the derived parameters - for (int i = 0; i < (int) initDistrib.size(); i++) initDistrib[i] += thisInitDistrib[i]; - for (int i = 0; i < (int) gapOpen.size(); i++) gapOpen[i] += thisGapOpen[i]; - for (int i = 0; i < (int) gapExtend.size(); i++) gapExtend[i] += thisGapExtend[i]; - if (enableTrainEmissions){ - for (int i = 0; i < (int) emitPairs.size(); i++) - for (int j = 0; j < (int) emitPairs[i].size(); j++) emitPairs[i][j] += thisEmitPairs[i][j]; - for (int i = 0; i < (int) emitSingle.size(); i++) emitSingle[i] += thisEmitSingle[i]; - } - - // let us know that we're done. - if (enableVerbose) cerr << "done." << endl; - } - // pass - else { - - // compute posterior probability matrix - VF *posterior = model.ComputePosteriorMatrix (seq1, seq2, *forward, *backward); assert (posterior); - - // compute sparse representations - sparseMatrices[a][b] = new SparseMatrix (seq1->GetLength(), seq2->GetLength(), *posterior); - sparseMatrices[b][a] = NULL; - - if (!enableAllPairs){ - // perform the pairwise sequence alignment - pair *, float> alignment = model.ComputeAlignment (seq1->GetLength(), - seq2->GetLength(), - *posterior); - - Sequence *tmpSeq1 = seq1->AddGaps (alignment.first, 'X'); - Sequence *tmpSeq2 = seq2->AddGaps (alignment.first, 'Y'); - - // compute sequence identity for each pair of sequenceses - int length = tmpSeq1->GetLength(); - int matchCount = 0; - int misMatchCount = 0; - for (int k = 1; k <= length; k++) { - int ch1 = tmpSeq1->GetPosition(k); - int ch2 = tmpSeq2->GetPosition(k); - if (ch1 == ch2 && ch1 != '-' && ch2 != '-') { ++matchCount; } - else if (ch1 != ch2 && ch1 != '-' && ch2 != '-') { ++misMatchCount; } - } - - identities[a][b] = identities[b][a] = (float)matchCount/(float)(matchCount + misMatchCount); - - // compute "expected accuracy" distance for evolutionary tree computation - float distance = alignment.second / min (seq1->GetLength(), seq2->GetLength()); - distances[a][b] = distances[b][a] = distance; - - if (enableVerbose) - cerr << setprecision (10) << distance << endl; - - delete alignment.first; - } - else { - // let us know that we're done. - if (enableVerbose) cerr << "done." << endl; - } - - delete posterior; - } - - delete forward; - delete backward; - } - } - } - - // now average out parameters derived - if (enableTraining){ - // compute new parameters - for (int i = 0; i < (int) initDistrib.size(); i++) initDistrib[i] /= numSeqs * (numSeqs - 1) / 2; - for (int i = 0; i < (int) gapOpen.size(); i++) gapOpen[i] /= numSeqs * (numSeqs - 1) / 2; - for (int i = 0; i < (int) gapExtend.size(); i++) gapExtend[i] /= numSeqs * (numSeqs - 1) / 2; - - if (enableTrainEmissions){ - for (int i = 0; i < (int) emitPairs.size(); i++) - for (int j = 0; j < (int) emitPairs[i].size(); j++) emitPairs[i][j] /= numSeqs * (numSeqs - 1) / 2; - for (int i = 0; i < (int) emitSingle.size(); i++) emitSingle[i] /= numSeqs * (numSeqs - 1) / 2; - } - } - - // see if we still want to do some alignments - else { - // pass - if (!enableViterbi){ - - // perform the consistency transformation the desired number of times - for (int r = 0; r < numConsistencyReps; r++){ - SafeVector > newSparseMatrices = DoRelaxation (sequences, sparseMatrices); - - // now replace the old posterior matrices - for (int i = 0; i < numSeqs; i++){ - for (int j = 0; j < numSeqs; j++){ - delete sparseMatrices[i][j]; - sparseMatrices[i][j] = newSparseMatrices[i][j]; - } - } - } - if (numSeqs > 8) { - for (int r = 0; r < 1; r++) - DoBasePairProbabilityRelaxation(sequences, sparseMatrices, BPPMatrices); - } - } - - MultiSequence *finalAlignment = NULL; - - if (enableAllPairs){ - for (int a = 0; a < numSeqs-1; a++){ - for (int b = a+1; b < numSeqs; b++){ - Sequence *seq1 = sequences->GetSequence (a); - Sequence *seq2 = sequences->GetSequence (b); - - if (enableVerbose) - cerr << "Performing pairwise alignment: (" << a+1 << ") " << seq1->GetHeader() << " vs. " - << "(" << b+1 << ") " << seq2->GetHeader() << " -- "; - - - // perform the pairwise sequence alignment - pair *, float> alignment; - if (enableViterbi) - alignment = model.ComputeViterbiAlignment (seq1, seq2); - else { - - // build posterior matrix - VF *posterior = sparseMatrices[a][b]->GetPosterior(); assert (posterior); - int length = (seq1->GetLength() + 1) * (seq2->GetLength() + 1); - for (int i = 0; i < length; i++) (*posterior)[i] -= cutoff; - - alignment = model.ComputeAlignment (seq1->GetLength(), seq2->GetLength(), *posterior); - delete posterior; - } - - // write pairwise alignments - string name = seq1->GetHeader() + "-" + seq2->GetHeader() + (enableClustalWOutput ? ".aln" : ".fasta"); - ofstream outfile (name.c_str()); - - MultiSequence *result = new MultiSequence(); - result->AddSequence (seq1->AddGaps(alignment.first, 'X')); - result->AddSequence (seq2->AddGaps(alignment.first, 'Y')); - if (enableClustalWOutput) - result->WriteALN (outfile); - else - result->WriteMFA (outfile); - - outfile.close(); - - delete alignment.first; - } - } - } - - // now if we still need to do a final multiple alignment - else { - - if (enableVerbose) - cerr << endl; - - // compute the evolutionary tree - TreeNode *tree = TreeNode::ComputeTree (distances, identities); - - if (enableWebOutput) { - *outputFile << "" << endl; - tree->Print (*outputFile, sequences); - *outputFile << "" << endl; - } - else { - tree->Print (cerr, sequences); - cerr << endl; - } - // make the final alignment - finalAlignment = ComputeFinalAlignment (tree, sequences, sparseMatrices, model, BPPMatrices); - - // build annotation - if (enableAnnotation){ - WriteAnnotation (finalAlignment, sparseMatrices); - } - - delete tree; - } - - if (!enableViterbi){ - // delete sparse matrices - for (int a = 0; a < numSeqs-1; a++){ - for (int b = a+1; b < numSeqs; b++){ - delete sparseMatrices[a][b]; - delete sparseMatrices[b][a]; - } - } - } - - AlifoldMEA alifold(finalAlignment, BPPMatrices, BasePairConst); - alifold.Run(); - ssCons = alifold.getSScons(); - - return finalAlignment; - - } - - return NULL; -} - -///////////////////////////////////////////////////////////////// -// GetInteger() -// -// Attempts to parse an integer from the character string given. -// Returns true only if no parsing error occurs. -///////////////////////////////////////////////////////////////// - -bool GetInteger (char *data, int *val){ - char *endPtr; - long int retVal; - - assert (val); - - errno = 0; - retVal = strtol (data, &endPtr, 0); - if (retVal == 0 && (errno != 0 || data == endPtr)) return false; - if (errno != 0 && (retVal == LONG_MAX || retVal == LONG_MIN)) return false; - if (retVal < (long) INT_MIN || retVal > (long) INT_MAX) return false; - *val = (int) retVal; - return true; -} - -///////////////////////////////////////////////////////////////// -// GetFloat() -// -// Attempts to parse a float from the character string given. -// Returns true only if no parsing error occurs. -///////////////////////////////////////////////////////////////// - -bool GetFloat (char *data, float *val){ - char *endPtr; - double retVal; - - assert (val); - - errno = 0; - retVal = strtod (data, &endPtr); - if (retVal == 0 && (errno != 0 || data == endPtr)) return false; - if (errno != 0 && (retVal >= 1000000.0 || retVal <= -1000000.0)) return false; - *val = (float) retVal; - return true; -} - -///////////////////////////////////////////////////////////////// -// ParseParams() -// -// Parse all command-line options. -///////////////////////////////////////////////////////////////// - -SafeVector ParseParams (int argc, char **argv){ - - if (argc < 2){ - - cerr << "MXSCARNA comes with ABSOLUTELY NO WARRANTY. This is free software, and" << endl - << "you are welcome to redistribute it under certain conditions. See the" << endl - << "file COPYING.txt for details." << endl - << endl - << "Usage:" << endl - << " mxscarna [OPTION]... [MFAFILE]..." << endl - << endl - << "Description:" << endl - << " Align sequences in MFAFILE(s) and print result to standard output" << endl - << endl - << " -clustalw" << endl - << " use CLUSTALW output format instead of MFA" << endl - << endl - << " -stockholm" << endl - << " use STOCKHOLM output format instead of MFA" << endl - << endl - << " -mxscarna" << endl - << " use MXSCARNA output format instead of MFA" << endl - << endl - << " -weboutput //" << endl - << " use web output format" << endl - << endl - << " -c, --consistency REPS" << endl - << " use " << MIN_CONSISTENCY_REPS << " <= REPS <= " << MAX_CONSISTENCY_REPS - << " (default: " << numConsistencyReps << ") passes of consistency transformation" << endl - << endl - << " -ir, --iterative-refinement REPS" << endl - << " use " << MIN_ITERATIVE_REFINEMENT_REPS << " <= REPS <= " << MAX_ITERATIVE_REFINEMENT_REPS - << " (default: " << numIterativeRefinementReps << ") passes of iterative-refinement" << endl - << endl - << " -pre, --pre-training REPS" << endl - << " use " << MIN_PRETRAINING_REPS << " <= REPS <= " << MAX_PRETRAINING_REPS - << " (default: " << numPreTrainingReps << ") rounds of pretraining" << endl - << endl - << " -pairs" << endl - << " generate all-pairs pairwise alignments" << endl - << endl - << " -viterbi" << endl - << " use Viterbi algorithm to generate all pairs (automatically enables -pairs)" << endl - << endl - << " -v, --verbose" << endl - << " report progress while aligning (default: " << (enableVerbose ? "on" : "off") << ")" << endl - << endl - << " -annot FILENAME" << endl - << " write annotation for multiple alignment to FILENAME" << endl - << endl - << " -t, --train FILENAME" << endl - << " compute EM transition probabilities, store in FILENAME (default: " - << parametersOutputFilename << ")" << endl - << endl - << " -e, --emissions" << endl - << " also reestimate emission probabilities (default: " - << (enableTrainEmissions ? "on" : "off") << ")" << endl - << endl - << " -p, --paramfile FILENAME" << endl - << " read parameters from FILENAME (default: " - << parametersInputFilename << ")" << endl - << endl - << " -a, --alignment-order" << endl - << " print sequences in alignment order rather than input order (default: " - << (enableAlignOrder ? "on" : "off") << ")" << endl - << endl - << " -s THRESHOLD" << endl - << " the threshold of SCS alignment" << endl - << endl - << " In default, for less than " << threshhold << ", the SCS aligment is applied. " << endl - << " -l SCSLENGTH" << endl - << " the length of stem candidates " << SCSLENGTH << endl - << endl - << " -b BASEPROBTRHESHHOLD" << endl - << " the threshold of base pairing probability " << BASEPROBTHRESHOLD << endl - << endl - << " -m, --mccaskillmea" << endl - << " McCaskill MEA MODE: input the clustalw format file and output the secondary structure predicted by McCaskill MEA" << endl - << endl - << " -g BASEPAIRSCORECONST" << endl - << " the control parameter of the prediction of base pairs, default:" << BasePairConst << endl - << endl - << " -w BANDWIDTH" << endl - << " the control parameter of the distance of stem candidates, default:" << BANDWIDTH << endl - << " -rfold" << endl - << " use Rfold instead of global McCaskill algorithm to calcurate base paring probality matrices, default: (" << (useRfold? "on" : "off") << ")" << endl - << endl; - - - // << " -go, --gap-open VALUE" << endl - // << " gap opening penalty of VALUE <= 0 (default: " << gapOpenPenalty << ")" << endl - // << endl - // << " -ge, --gap-extension VALUE" << endl - // << " gap extension penalty of VALUE <= 0 (default: " << gapContinuePenalty << ")" << endl - // << endl - // << " -co, --cutoff CUTOFF" << endl - // << " subtract 0 <= CUTOFF <= 1 (default: " << cutoff << ") from all posterior values before final alignment" << endl - // << endl - - exit (1); - } - - SafeVector sequenceNames; - int tempInt; - float tempFloat; - - for (int i = 1; i < argc; i++){ - if (argv[i][0] == '-'){ - - // training - if (!strcmp (argv[i], "-t") || !strcmp (argv[i], "--train")){ - enableTraining = true; - if (i < argc - 1) - parametersOutputFilename = string (argv[++i]); - else { - cerr << "ERROR: Filename expected for option " << argv[i] << endl; - exit (1); - } - } - - // emission training - else if (!strcmp (argv[i], "-e") || !strcmp (argv[i], "--emissions")){ - enableTrainEmissions = true; - } - - // parameter file - else if (!strcmp (argv[i], "-p") || !strcmp (argv[i], "--paramfile")){ - if (i < argc - 1) - parametersInputFilename = string (argv[++i]); - else { - cerr << "ERROR: Filename expected for option " << argv[i] << endl; - exit (1); - } - } - else if (! strcmp (argv[i], "-s")) { - if (i < argc - 1){ - if (!GetFloat (argv[++i], &tempFloat)){ - cerr << "ERROR: Invalid floating-point value following option " << argv[i-1] << ": " << argv[i] << endl; - exit (1); - } - else { - if (tempFloat < 0){ - cerr << "ERROR: For option " << argv[i-1] << ", floating-point value must not be nagative." << endl; - exit (1); - } - else - threshhold = tempFloat; - } - } - else { - cerr << "ERROR: Floating-point value expected for option " << argv[i] << endl; - exit (1); - } - } - - else if (! strcmp (argv[i], "-l")) { - if (i < argc - 1) { - if (!GetInteger (argv[++i], &tempInt)){ - cerr << "ERROR: Invalid integer following option " << argv[i-1] << ": " << argv[i] << endl; - exit (1); - } - else { - if (tempInt <= 0 || 6 <= tempInt) { - cerr << "ERROR: For option " << argv[i-1] << ", integer must be between " - << "1 and 6" << "." << endl; - exit (1); - } - else - scsLength = tempInt; - } - } - } - else if (! strcmp (argv[i], "-b")) { - if (i < argc - 1) { - if (!GetFloat (argv[++i], &tempFloat)){ - cerr << "ERROR: Invalid floating-point value following option " << argv[i-1] << ": " << argv[i] << endl; - exit (1); - } - else { - if (tempFloat < 0 && 1 < tempFloat) { - cerr << "ERROR: For option " << argv[i-1] << ", floating-point value must not be nagative." << endl; - exit (1); - } - else - BaseProbThreshold = tempFloat; - } - } - } - else if (! strcmp (argv[i], "-g")) { - if (i < argc - 1) { - if (!GetFloat (argv[++i], &tempFloat)){ - cerr << "ERROR: Invalid floating-point value following option " << argv[i-1] << ": " << argv[i] << endl; - exit (1); - } - else { - if (tempFloat < 0 && 1 < tempFloat) { - cerr << "ERROR: For option " << argv[i-1] << ", floating-point value must not be nagative." << endl; - exit (1); - } - else - BasePairConst = tempFloat; - } - } - } - - // number of consistency transformations - else if (!strcmp (argv[i], "-c") || !strcmp (argv[i], "--consistency")){ - if (i < argc - 1){ - if (!GetInteger (argv[++i], &tempInt)){ - cerr << "ERROR: Invalid integer following option " << argv[i-1] << ": " << argv[i] << endl; - exit (1); - } - else { - if (tempInt < MIN_CONSISTENCY_REPS || tempInt > MAX_CONSISTENCY_REPS){ - cerr << "ERROR: For option " << argv[i-1] << ", integer must be between " - << MIN_CONSISTENCY_REPS << " and " << MAX_CONSISTENCY_REPS << "." << endl; - exit (1); - } - else - numConsistencyReps = tempInt; - } - } - else { - cerr << "ERROR: Integer expected for option " << argv[i] << endl; - exit (1); - } - } - - // number of randomized partitioning iterative refinement passes - else if (!strcmp (argv[i], "-ir") || !strcmp (argv[i], "--iterative-refinement")){ - if (i < argc - 1){ - if (!GetInteger (argv[++i], &tempInt)){ - cerr << "ERROR: Invalid integer following option " << argv[i-1] << ": " << argv[i] << endl; - exit (1); - } - else { - if (tempInt < MIN_ITERATIVE_REFINEMENT_REPS || tempInt > MAX_ITERATIVE_REFINEMENT_REPS){ - cerr << "ERROR: For option " << argv[i-1] << ", integer must be between " - << MIN_ITERATIVE_REFINEMENT_REPS << " and " << MAX_ITERATIVE_REFINEMENT_REPS << "." << endl; - exit (1); - } - else - numIterativeRefinementReps = tempInt; - } - } - else { - cerr << "ERROR: Integer expected for option " << argv[i] << endl; - exit (1); - } - } - else if (!strcmp (argv[i], "-rfold")){ - useRfold = true; - } - // number of EM pre-training rounds - else if (!strcmp (argv[i], "-pre") || !strcmp (argv[i], "--pre-training")){ - if (i < argc - 1){ - if (!GetInteger (argv[++i], &tempInt)){ - cerr << "ERROR: Invalid integer following option " << argv[i-1] << ": " << argv[i] << endl; - exit (1); - } - else { - if (tempInt < MIN_PRETRAINING_REPS || tempInt > MAX_PRETRAINING_REPS){ - cerr << "ERROR: For option " << argv[i-1] << ", integer must be between " - << MIN_PRETRAINING_REPS << " and " << MAX_PRETRAINING_REPS << "." << endl; - exit (1); - } - else - numPreTrainingReps = tempInt; - } - } - else { - cerr << "ERROR: Integer expected for option " << argv[i] << endl; - exit (1); - } - } - - // the distance of stem candidate - else if (!strcmp (argv[i], "-w")){ - if (i < argc - 1){ - if (!GetInteger (argv[++i], &tempInt)){ - cerr << "ERROR: Invalid integer following option " << argv[i-1] << ": " << argv[i] << endl; - exit (1); - } - else { - BandWidth = tempInt; - } - } - else { - cerr << "ERROR: Integer expected for option " << argv[i] << endl; - exit (1); - } - } - - // gap open penalty - else if (!strcmp (argv[i], "-go") || !strcmp (argv[i], "--gap-open")){ - if (i < argc - 1){ - if (!GetFloat (argv[++i], &tempFloat)){ - cerr << "ERROR: Invalid floating-point value following option " << argv[i-1] << ": " << argv[i] << endl; - exit (1); - } - else { - if (tempFloat > 0){ - cerr << "ERROR: For option " << argv[i-1] << ", floating-point value must not be positive." << endl; - exit (1); - } - else - gapOpenPenalty = tempFloat; - } - } - else { - cerr << "ERROR: Floating-point value expected for option " << argv[i] << endl; - exit (1); - } - } - - // gap extension penalty - else if (!strcmp (argv[i], "-ge") || !strcmp (argv[i], "--gap-extension")){ - if (i < argc - 1){ - if (!GetFloat (argv[++i], &tempFloat)){ - cerr << "ERROR: Invalid floating-point value following option " << argv[i-1] << ": " << argv[i] << endl; - exit (1); - } - else { - if (tempFloat > 0){ - cerr << "ERROR: For option " << argv[i-1] << ", floating-point value must not be positive." << endl; - exit (1); - } - else - gapContinuePenalty = tempFloat; - } - } - else { - cerr << "ERROR: Floating-point value expected for option " << argv[i] << endl; - exit (1); - } - } - - // all-pairs pairwise alignments - else if (!strcmp (argv[i], "-pairs")){ - enableAllPairs = true; - } - - // all-pairs pairwise Viterbi alignments - else if (!strcmp (argv[i], "-viterbi")){ - enableAllPairs = true; - enableViterbi = true; - } - - // annotation files - else if (!strcmp (argv[i], "-annot")){ - enableAnnotation = true; - if (i < argc - 1) - annotationFilename = argv[++i]; - else { - cerr << "ERROR: FILENAME expected for option " << argv[i] << endl; - exit (1); - } - } - - // clustalw output format - else if (!strcmp (argv[i], "-clustalw")){ - enableClustalWOutput = true; - } - // mxscarna output format - else if (!strcmp (argv[i], "-mxscarna")) { - enableMXSCARNAOutput = true; - } - // stockholm output format - else if (!strcmp (argv[i], "-stockholm")) { - enableStockholmOutput = true; - } - // web output format - else if (!strcmp (argv[i], "-weboutput")) { - if (i < argc - 1) { - weboutputFileName = string(argv[++i]); - } - else { - cerr << "ERROR: Invalid following option " << argv[i-1] << ": " << argv[i] << endl; - exit (1); - } - - enableWebOutput = true; - } - - // cutoff - else if (!strcmp (argv[i], "-co") || !strcmp (argv[i], "--cutoff")){ - if (i < argc - 1){ - if (!GetFloat (argv[++i], &tempFloat)){ - cerr << "ERROR: Invalid floating-point value following option " << argv[i-1] << ": " << argv[i] << endl; - exit (1); - } - else { - if (tempFloat < 0 || tempFloat > 1){ - cerr << "ERROR: For option " << argv[i-1] << ", floating-point value must be between 0 and 1." << endl; - exit (1); - } - else - cutoff = tempFloat; - } - } - else { - cerr << "ERROR: Floating-point value expected for option " << argv[i] << endl; - exit (1); - } - } - - // verbose reporting - else if (!strcmp (argv[i], "-v") || !strcmp (argv[i], "--verbose")){ - enableVerbose = true; - } - - // alignment order - else if (!strcmp (argv[i], "-a") || !strcmp (argv[i], "--alignment-order")){ - enableAlignOrder = true; - } - // McCaskill MEA MODE - else if (!strcmp (argv[i], "-m") || !strcmp (argv[i], "--mccaskillmea")){ - enableMcCaskillMEAMode = true; - } - // bad arguments - else { - cerr << "ERROR: Unrecognized option: " << argv[i] << endl; - exit (1); - } - } - else { - sequenceNames.push_back (string (argv[i])); - } - } - - if (enableTrainEmissions && !enableTraining){ - cerr << "ERROR: Training emissions (-e) requires training (-t)" << endl; - exit (1); - } - - return sequenceNames; -} - -///////////////////////////////////////////////////////////////// -// ReadParameters() -// -// Read initial distribution, transition, and emission -// parameters from a file. -///////////////////////////////////////////////////////////////// - -void ReadParameters (){ - - ifstream data; - - emitPairs = VVF (256, VF (256, 1e-10)); - emitSingle = VF (256, 1e-5); - - // read initial state distribution and transition parameters - // pass - if (parametersInputFilename == string ("")){ - if (NumInsertStates == 1){ - for (int i = 0; i < NumMatrixTypes; i++) initDistrib[i] = initDistrib1Default[i]; - for (int i = 0; i < 2*NumInsertStates; i++) gapOpen[i] = gapOpen1Default[i]; - for (int i = 0; i < 2*NumInsertStates; i++) gapExtend[i] = gapExtend1Default[i]; - } - else if (NumInsertStates == 2){ - for (int i = 0; i < NumMatrixTypes; i++) initDistrib[i] = initDistrib2Default[i]; - for (int i = 0; i < 2*NumInsertStates; i++) gapOpen[i] = gapOpen2Default[i]; - for (int i = 0; i < 2*NumInsertStates; i++) gapExtend[i] = gapExtend2Default[i]; - } - else { - cerr << "ERROR: No default initial distribution/parameter settings exist" << endl - << " for " << NumInsertStates << " pairs of insert states. Use --paramfile." << endl; - exit (1); - } - - alphabet = alphabetDefault; - - for (int i = 0; i < (int) alphabet.length(); i++){ - emitSingle[(unsigned char) tolower(alphabet[i])] = emitSingleDefault[i]; - emitSingle[(unsigned char) toupper(alphabet[i])] = emitSingleDefault[i]; - for (int j = 0; j <= i; j++){ - emitPairs[(unsigned char) tolower(alphabet[i])][(unsigned char) tolower(alphabet[j])] = emitPairsDefault[i][j]; - emitPairs[(unsigned char) tolower(alphabet[i])][(unsigned char) toupper(alphabet[j])] = emitPairsDefault[i][j]; - emitPairs[(unsigned char) toupper(alphabet[i])][(unsigned char) tolower(alphabet[j])] = emitPairsDefault[i][j]; - emitPairs[(unsigned char) toupper(alphabet[i])][(unsigned char) toupper(alphabet[j])] = emitPairsDefault[i][j]; - emitPairs[(unsigned char) tolower(alphabet[j])][(unsigned char) tolower(alphabet[i])] = emitPairsDefault[i][j]; - emitPairs[(unsigned char) tolower(alphabet[j])][(unsigned char) toupper(alphabet[i])] = emitPairsDefault[i][j]; - emitPairs[(unsigned char) toupper(alphabet[j])][(unsigned char) tolower(alphabet[i])] = emitPairsDefault[i][j]; - emitPairs[(unsigned char) toupper(alphabet[j])][(unsigned char) toupper(alphabet[i])] = emitPairsDefault[i][j]; - } - } - } - else { - data.open (parametersInputFilename.c_str()); - if (data.fail()){ - cerr << "ERROR: Unable to read parameter file: " << parametersInputFilename << endl; - exit (1); - } - - string line[3]; - for (int i = 0; i < 3; i++){ - if (!getline (data, line[i])){ - cerr << "ERROR: Unable to read transition parameters from parameter file: " << parametersInputFilename << endl; - exit (1); - } - } - istringstream data2; - data2.clear(); data2.str (line[0]); for (int i = 0; i < NumMatrixTypes; i++) data2 >> initDistrib[i]; - data2.clear(); data2.str (line[1]); for (int i = 0; i < 2*NumInsertStates; i++) data2 >> gapOpen[i]; - data2.clear(); data2.str (line[2]); for (int i = 0; i < 2*NumInsertStates; i++) data2 >> gapExtend[i]; - - if (!getline (data, line[0])){ - cerr << "ERROR: Unable to read alphabet from scoring matrix file: " << parametersInputFilename << endl; - exit (1); - } - - // read alphabet as concatenation of all characters on alphabet line - alphabet = ""; - string token; - data2.clear(); data2.str (line[0]); while (data2 >> token) alphabet += token; - - for (int i = 0; i < (int) alphabet.size(); i++){ - for (int j = 0; j <= i; j++){ - float val; - data >> val; - emitPairs[(unsigned char) tolower(alphabet[i])][(unsigned char) tolower(alphabet[j])] = val; - emitPairs[(unsigned char) tolower(alphabet[i])][(unsigned char) toupper(alphabet[j])] = val; - emitPairs[(unsigned char) toupper(alphabet[i])][(unsigned char) tolower(alphabet[j])] = val; - emitPairs[(unsigned char) toupper(alphabet[i])][(unsigned char) toupper(alphabet[j])] = val; - emitPairs[(unsigned char) tolower(alphabet[j])][(unsigned char) tolower(alphabet[i])] = val; - emitPairs[(unsigned char) tolower(alphabet[j])][(unsigned char) toupper(alphabet[i])] = val; - emitPairs[(unsigned char) toupper(alphabet[j])][(unsigned char) tolower(alphabet[i])] = val; - emitPairs[(unsigned char) toupper(alphabet[j])][(unsigned char) toupper(alphabet[i])] = val; - } - } - - for (int i = 0; i < (int) alphabet.size(); i++){ - float val; - data >> val; - emitSingle[(unsigned char) tolower(alphabet[i])] = val; - emitSingle[(unsigned char) toupper(alphabet[i])] = val; - } - data.close(); - } -} - -///////////////////////////////////////////////////////////////// -// ProcessTree() -// -// Process the tree recursively. Returns the aligned sequences -// corresponding to a node or leaf of the tree. -///////////////////////////////////////////////////////////////// -float ide; -MultiSequence *ProcessTree (const TreeNode *tree, MultiSequence *sequences, - const SafeVector > &sparseMatrices, - const ProbabilisticModel &model, SafeVector &BPPMatrices) { - MultiSequence *result; - - // check if this is a node of the alignment tree - if (tree->GetSequenceLabel() == -1){ - MultiSequence *alignLeft = ProcessTree (tree->GetLeftChild(), sequences, sparseMatrices, model, BPPMatrices); - MultiSequence *alignRight = ProcessTree (tree->GetRightChild(), sequences, sparseMatrices, model, BPPMatrices); - - assert (alignLeft); - assert (alignRight); - - result = AlignAlignments (alignLeft, alignRight, sparseMatrices, model, BPPMatrices, tree->GetIdentity()); - assert (result); - - delete alignLeft; - delete alignRight; - } - - // otherwise, this is a leaf of the alignment tree - else { - result = new MultiSequence(); assert (result); - result->AddSequence (sequences->GetSequence(tree->GetSequenceLabel())->Clone()); - } - - return result; -} - -///////////////////////////////////////////////////////////////// -// ComputeFinalAlignment() -// -// Compute the final alignment by calling ProcessTree(), then -// performing iterative refinement as needed. -///////////////////////////////////////////////////////////////// - -MultiSequence *ComputeFinalAlignment (const TreeNode *tree, MultiSequence *sequences, - const SafeVector > &sparseMatrices, - const ProbabilisticModel &model, - SafeVector &BPPMatrices) { - - MultiSequence *alignment = ProcessTree (tree, sequences, sparseMatrices, model, BPPMatrices); - - if (enableAlignOrder){ - alignment->SaveOrdering(); - enableAlignOrder = false; - } - - // tree-based refinement - // if you use the function, you can degrade the quality of the software. - // TreeBasedBiPartitioning (sparseMatrices, model, alignment, tree, BPPMatrices); - - // iterative refinement -/* - for (int i = 0; i < numIterativeRefinementReps; i++) - DoIterativeRefinement (sparseMatrices, model, alignment); - - cerr << endl; -*/ - // return final alignment - return alignment; -} - -///////////////////////////////////////////////////////////////// -// AlignAlignments() -// -// Returns the alignment of two MultiSequence objects. -///////////////////////////////////////////////////////////////// - -MultiSequence *AlignAlignments (MultiSequence *align1, MultiSequence *align2, - const SafeVector > &sparseMatrices, - const ProbabilisticModel &model, - SafeVector &BPPMatrices, float identity){ - - // print some info about the alignment - if (enableVerbose){ - for (int i = 0; i < align1->GetNumSequences(); i++) - cerr << ((i==0) ? "[" : ",") << align1->GetSequence(i)->GetLabel(); - cerr << "] vs. "; - for (int i = 0; i < align2->GetNumSequences(); i++) - cerr << ((i==0) ? "[" : ",") << align2->GetSequence(i)->GetLabel(); - cerr << "]: "; - } - - VF *posterior = model.BuildPosterior (align1, align2, sparseMatrices, cutoff); - - pair *, float> alignment; - // choose the alignment routine depending on the "cosmetic" gap penalties used - if (gapOpenPenalty == 0 && gapContinuePenalty == 0) { - - if(identity < threshhold) { - std::vector *pscs1, *pscs2; - pscs1 = seq2scs(align1, BPPMatrices, BandWidth); - pscs2 = seq2scs(align2, BPPMatrices, BandWidth); - std::vector *matchPSCS1 = new std::vector; - std::vector *matchPSCS2 = new std::vector; - - Globaldp globaldp(pscs1, pscs2, align1, align2, matchPSCS1, matchPSCS2, posterior, BPPMatrices); - //float scsScore = globaldp.Run(); - - globaldp.Run(); - - removeConflicts(pscs1, pscs2, matchPSCS1, matchPSCS2); - - alignment = model.ComputeAlignment2 (align1->GetSequence(0)->GetLength(), align2->GetSequence(0)->GetLength(), *posterior, pscs1, pscs2, matchPSCS1, matchPSCS2); - - } else { - alignment = model.ComputeAlignment (align1->GetSequence(0)->GetLength(), align2->GetSequence(0)->GetLength(), *posterior); - } - } - else { - alignment = model.ComputeAlignmentWithGapPenalties (align1, align2, - *posterior, align1->GetNumSequences(), align2->GetNumSequences(), - gapOpenPenalty, gapContinuePenalty); - } - - delete posterior; - - if (enableVerbose){ - - // compute total length of sequences - int totLength = 0; - for (int i = 0; i < align1->GetNumSequences(); i++) - for (int j = 0; j < align2->GetNumSequences(); j++) - totLength += min (align1->GetSequence(i)->GetLength(), align2->GetSequence(j)->GetLength()); - - // give an "accuracy" measure for the alignment - cerr << alignment.second / totLength << endl; - } - - // now build final alignment - MultiSequence *result = new MultiSequence(); - for (int i = 0; i < align1->GetNumSequences(); i++) - result->AddSequence (align1->GetSequence(i)->AddGaps(alignment.first, 'X')); - for (int i = 0; i < align2->GetNumSequences(); i++) - result->AddSequence (align2->GetSequence(i)->AddGaps(alignment.first, 'Y')); - if (!enableAlignOrder) - result->SortByLabel(); - - // free temporary alignment - delete alignment.first; - - return result; -} - -///////////////////////////////////////////////////////////////// -// DoRelaxation() -// -// Performs one round of the consistency transformation. The -// formula used is: -// 1 -// P'(x[i]-y[j]) = --- sum sum P(x[i]-z[k]) P(z[k]-y[j]) -// |S| z in S k -// -// where S = {x, y, all other sequences...} -// -///////////////////////////////////////////////////////////////// - -SafeVector > DoRelaxation (MultiSequence *sequences, - SafeVector > &sparseMatrices){ - const int numSeqs = sequences->GetNumSequences(); - - SafeVector > newSparseMatrices (numSeqs, SafeVector(numSeqs, NULL)); - - // for every pair of sequences - for (int i = 0; i < numSeqs; i++){ - for (int j = i+1; j < numSeqs; j++){ - Sequence *seq1 = sequences->GetSequence (i); - Sequence *seq2 = sequences->GetSequence (j); - - if (enableVerbose) - cerr << "Relaxing (" << i+1 << ") " << seq1->GetHeader() << " vs. " - << "(" << j+1 << ") " << seq2->GetHeader() << ": "; - - // get the original posterior matrix - VF *posteriorPtr = sparseMatrices[i][j]->GetPosterior(); assert (posteriorPtr); - VF &posterior = *posteriorPtr; - - const int seq1Length = seq1->GetLength(); - const int seq2Length = seq2->GetLength(); - - // contribution from the summation where z = x and z = y - for (int k = 0; k < (seq1Length+1) * (seq2Length+1); k++) posterior[k] += posterior[k]; - - if (enableVerbose) - cerr << sparseMatrices[i][j]->GetNumCells() << " --> "; - - // contribution from all other sequences - for (int k = 0; k < numSeqs; k++) if (k != i && k != j){ - if (k < i) - Relax1 (sparseMatrices[k][i], sparseMatrices[k][j], posterior); - else if (k > i && k < j) - Relax (sparseMatrices[i][k], sparseMatrices[k][j], posterior); - else { - SparseMatrix *temp = sparseMatrices[j][k]->ComputeTranspose(); - Relax (sparseMatrices[i][k], temp, posterior); - delete temp; - } - } - - // now renormalization - for (int k = 0; k < (seq1Length+1) * (seq2Length+1); k++) posterior[k] /= numSeqs; - - // mask out positions not originally in the posterior matrix - SparseMatrix *matXY = sparseMatrices[i][j]; - for (int y = 0; y <= seq2Length; y++) posterior[y] = 0; - for (int x = 1; x <= seq1Length; x++){ - SafeVector::iterator XYptr = matXY->GetRowPtr(x); - SafeVector::iterator XYend = XYptr + matXY->GetRowSize(x); - VF::iterator base = posterior.begin() + x * (seq2Length + 1); - int curr = 0; - while (XYptr != XYend){ - - // zero out all cells until the first filled column - while (curr < XYptr->first){ - base[curr] = 0; - curr++; - } - - // now, skip over this column - curr++; - ++XYptr; - } - - // zero out cells after last column - while (curr <= seq2Length){ - base[curr] = 0; - curr++; - } - } - - // save the new posterior matrix - newSparseMatrices[i][j] = new SparseMatrix (seq1->GetLength(), seq2->GetLength(), posterior); - newSparseMatrices[j][i] = NULL; - - if (enableVerbose) - cerr << newSparseMatrices[i][j]->GetNumCells() << " -- "; - - delete posteriorPtr; - - if (enableVerbose) - cerr << "done." << endl; - } - } - - return newSparseMatrices; -} - -///////////////////////////////////////////////////////////////// -// Relax() -// -// Computes the consistency transformation for a single sequence -// z, and adds the transformed matrix to "posterior". -///////////////////////////////////////////////////////////////// - -void Relax (SparseMatrix *matXZ, SparseMatrix *matZY, VF &posterior){ - - assert (matXZ); - assert (matZY); - - int lengthX = matXZ->GetSeq1Length(); - int lengthY = matZY->GetSeq2Length(); - assert (matXZ->GetSeq2Length() == matZY->GetSeq1Length()); - - // for every x[i] - for (int i = 1; i <= lengthX; i++){ - SafeVector::iterator XZptr = matXZ->GetRowPtr(i); - SafeVector::iterator XZend = XZptr + matXZ->GetRowSize(i); - - VF::iterator base = posterior.begin() + i * (lengthY + 1); - - // iterate through all x[i]-z[k] - while (XZptr != XZend){ - SafeVector::iterator ZYptr = matZY->GetRowPtr(XZptr->first); - SafeVector::iterator ZYend = ZYptr + matZY->GetRowSize(XZptr->first); - const float XZval = XZptr->second; - - // iterate through all z[k]-y[j] - while (ZYptr != ZYend){ - base[ZYptr->first] += XZval * ZYptr->second; - ZYptr++; - } - XZptr++; - } - } -} - -///////////////////////////////////////////////////////////////// -// Relax1() -// -// Computes the consistency transformation for a single sequence -// z, and adds the transformed matrix to "posterior". -///////////////////////////////////////////////////////////////// - -void Relax1 (SparseMatrix *matZX, SparseMatrix *matZY, VF &posterior){ - - assert (matZX); - assert (matZY); - - int lengthZ = matZX->GetSeq1Length(); - int lengthY = matZY->GetSeq2Length(); - - // for every z[k] - for (int k = 1; k <= lengthZ; k++){ - SafeVector::iterator ZXptr = matZX->GetRowPtr(k); - SafeVector::iterator ZXend = ZXptr + matZX->GetRowSize(k); - - // iterate through all z[k]-x[i] - while (ZXptr != ZXend){ - SafeVector::iterator ZYptr = matZY->GetRowPtr(k); - SafeVector::iterator ZYend = ZYptr + matZY->GetRowSize(k); - const float ZXval = ZXptr->second; - VF::iterator base = posterior.begin() + ZXptr->first * (lengthY + 1); - - // iterate through all z[k]-y[j] - while (ZYptr != ZYend){ - base[ZYptr->first] += ZXval * ZYptr->second; - ZYptr++; - } - ZXptr++; - } - } -} - -void DoBasePairProbabilityRelaxation (MultiSequence *sequences, - SafeVector > &sparseMatrices, - SafeVector &BPPMatrices) { - const int numSeqs = sequences->GetNumSequences(); - - for (int i = 0; i < numSeqs; i++) { - Sequence *seq1 = sequences->GetSequence (i); - BPPMatrix *seq1BppMatrix = BPPMatrices[seq1->GetLabel()]; - Trimat consBppMat(seq1->GetLength() + 1); - int seq1Length = seq1->GetLength(); - - for (int k = 1; k <= seq1Length; k++) { - for (int l = k; l <= seq1Length; l++) { - consBppMat.ref(k, l) = seq1BppMatrix->GetProb(k, l); - } - } - - for (int j = i + 1; j < numSeqs; j++) { - - // VF *posteriorPtr = sparseMatrices[i][j]->GetPosterior() - Sequence *seq2 = sequences->GetSequence (j); - BPPMatrix *seq2BppMatrix = BPPMatrices[seq2->GetLabel()]; -// int seq2Length = seq2->GetLength(); - SparseMatrix *matchProb = sparseMatrices[i][j]; - -// vector &probs1 = seq1BppMatrix->bppMat.data2; - for(int k = 1; k <= seq1Length; k++) { - for(int m = k, n = k; n <= k + 200 && m >= 1 && n <= seq1Length; m--, n++) { - -// for (int k = 0; k < (int)probs1.size(); k++) { -// float tmpProb1 = probs1[k].prob; -// int tmp1I = probs1[k].i; -// int tmp1J = probs1[k].j; - - float sumProb = 0; - vector &probs2 = seq2BppMatrix->bppMat.data2; - for(int l = 0; l < (int)probs2.size(); l++) { - float tmpProb2 = probs2[l].prob; - int tmp2I = probs2[l].i; - int tmp2J = probs2[l].j; - sumProb += matchProb->GetValue(m, tmp2I)*matchProb->GetValue(n, tmp2J)*tmpProb2; - } - - consBppMat.ref(m, n) += sumProb; - } - - for(int m = k, n = k + 1; n <= k + 200 && m >= 1 && n <= seq1Length; m--, n++) { - -// for (int k = 0; k < (int)probs1.size(); k++) { -// float tmpProb1 = probs1[k].prob; -// int tmp1I = probs1[k].i; -// int tmp1J = probs1[k].j; - - float sumProb = 0; - vector &probs2 = seq2BppMatrix->bppMat.data2; - for(int l = 0; l < (int)probs2.size(); l++) { - float tmpProb2 = probs2[l].prob; - int tmp2I = probs2[l].i; - int tmp2J = probs2[l].j; - sumProb += matchProb->GetValue(m, tmp2I)*matchProb->GetValue(n, tmp2J)*tmpProb2; - } - - consBppMat.ref(m, n) += sumProb; - } - } - } - -/* - for(int k = 1; k <= seq1Length; k++) { - for(int m = k, n = k; n <= k + 30 && m >= 1 && n <= seq1Length; m--, n++) { - float tmpProb = seq1BppMatrix->GetProb(m, n); - for(int l = 1; l <= seq2Length; l++) { - for(int s = l, t = l; t <= l + 30 && s >= 1 && t <= seq2Length; s--, t++) { - tmpProb += matchProb->GetValue(m,s)*matchProb->GetValue(n,t)*seq2BppMatrix->GetProb(s,t); - } - for(int s = l, t = l + 1; t <= l + 31 && s >= 1 && t <= seq2Length; s--, t++) { - tmpProb += matchProb->GetValue(m,s)*matchProb->GetValue(n,t)*seq2BppMatrix->GetProb(s,t); - } - } - consBppMat.ref(m, n) += tmpProb; - } - - for(int m = k, n = k + 1; n <= k + 31 && m >= 1 && n <= seq1Length; m--, n++) { - float tmpProb = seq1BppMatrix->GetProb(m, n); - for(int l = 1; l <= seq2Length; l++) { - for(int s = l, t = l; t <= l + 30 && s >= 1 && t <= seq2Length; s--, t++) { - tmpProb += matchProb->GetValue(m,s)*matchProb->GetValue(n,t)*seq2BppMatrix->GetProb(s,t); - } - for(int s = l, t = l + 1; t <= l + 31 && s >= 1 && t <= seq2Length; s--, t++) { - tmpProb += matchProb->GetValue(m,s)*matchProb->GetValue(n,t)*seq2BppMatrix->GetProb(s,t); - } - } - consBppMat.ref(m,n) += tmpProb; - } - } - } -*/ - for (int m = 1; m <= seq1Length; m++) { - for (int n = m + 4; n <= seq1Length; n++) { - consBppMat.ref(m,n) = consBppMat.ref(m,n)/(float)numSeqs; - } - } - seq1BppMatrix->updateBPPMatrix(consBppMat); - } -} - -///////////////////////////////////////////////////////////////// -// GetSubtree -// -// Returns set containing all leaf labels of the current subtree. -///////////////////////////////////////////////////////////////// - -set GetSubtree (const TreeNode *tree){ - set s; - - if (tree->GetSequenceLabel() == -1){ - s = GetSubtree (tree->GetLeftChild()); - set t = GetSubtree (tree->GetRightChild()); - - for (set::iterator iter = t.begin(); iter != t.end(); ++iter) - s.insert (*iter); - } - else { - s.insert (tree->GetSequenceLabel()); - } - - return s; -} - -///////////////////////////////////////////////////////////////// -// TreeBasedBiPartitioning -// -// Uses the iterative refinement scheme from MUSCLE. -///////////////////////////////////////////////////////////////// - -void TreeBasedBiPartitioning (const SafeVector > &sparseMatrices, - const ProbabilisticModel &model, MultiSequence* &alignment, - const TreeNode *tree, SafeVector &BPPMatrices){ - // check if this is a node of the alignment tree - if (tree->GetSequenceLabel() == -1){ - TreeBasedBiPartitioning (sparseMatrices, model, alignment, tree->GetLeftChild(), BPPMatrices); - TreeBasedBiPartitioning (sparseMatrices, model, alignment, tree->GetRightChild(), BPPMatrices); - - set leftSubtree = GetSubtree (tree->GetLeftChild()); - set rightSubtree = GetSubtree (tree->GetRightChild()); - set leftSubtreeComplement, rightSubtreeComplement; - - // calculate complement of each subtree - for (int i = 0; i < alignment->GetNumSequences(); i++){ - if (leftSubtree.find(i) == leftSubtree.end()) leftSubtreeComplement.insert (i); - if (rightSubtree.find(i) == rightSubtree.end()) rightSubtreeComplement.insert (i); - } - - // perform realignments for edge to left child - if (!leftSubtree.empty() && !leftSubtreeComplement.empty()){ - MultiSequence *groupOneSeqs = alignment->Project (leftSubtree); assert (groupOneSeqs); - MultiSequence *groupTwoSeqs = alignment->Project (leftSubtreeComplement); assert (groupTwoSeqs); - delete alignment; - alignment = AlignAlignments (groupOneSeqs, groupTwoSeqs, sparseMatrices, model, BPPMatrices, tree->GetLeftChild()->GetIdentity()); - } - - // perform realignments for edge to right child - if (!rightSubtree.empty() && !rightSubtreeComplement.empty()){ - MultiSequence *groupOneSeqs = alignment->Project (rightSubtree); assert (groupOneSeqs); - MultiSequence *groupTwoSeqs = alignment->Project (rightSubtreeComplement); assert (groupTwoSeqs); - delete alignment; - alignment = AlignAlignments (groupOneSeqs, groupTwoSeqs, sparseMatrices, model, BPPMatrices, tree->GetRightChild()->GetIdentity()); - } - } -} - -///////////////////////////////////////////////////////////////// -// DoterativeRefinement() -// -// Performs a single round of randomized partionining iterative -// refinement. -///////////////////////////////////////////////////////////////// -/* -void DoIterativeRefinement (const SafeVector > &sparseMatrices, - const ProbabilisticModel &model, MultiSequence* &alignment){ - set groupOne, groupTwo; - - // create two separate groups - for (int i = 0; i < alignment->GetNumSequences(); i++){ - if (rand() % 2) - groupOne.insert (i); - else - groupTwo.insert (i); - } - - if (groupOne.empty() || groupTwo.empty()) return; - - // project into the two groups - MultiSequence *groupOneSeqs = alignment->Project (groupOne); assert (groupOneSeqs); - MultiSequence *groupTwoSeqs = alignment->Project (groupTwo); assert (groupTwoSeqs); - delete alignment; - - // realign - alignment = AlignAlignments (groupOneSeqs, groupTwoSeqs, sparseMatrices, model); - - delete groupOneSeqs; - delete groupTwoSeqs; -} -*/ - -///////////////////////////////////////////////////////////////// -// WriteAnnotation() -// -// Computes annotation for multiple alignment and write values -// to a file. -///////////////////////////////////////////////////////////////// - -void WriteAnnotation (MultiSequence *alignment, - const SafeVector > &sparseMatrices){ - ofstream outfile (annotationFilename.c_str()); - - if (outfile.fail()){ - cerr << "ERROR: Unable to write annotation file." << endl; - exit (1); - } - - const int alignLength = alignment->GetSequence(0)->GetLength(); - const int numSeqs = alignment->GetNumSequences(); - - SafeVector position (numSeqs, 0); - SafeVector::iterator> seqs (numSeqs); - for (int i = 0; i < numSeqs; i++) seqs[i] = alignment->GetSequence(i)->GetDataPtr(); - SafeVector > active; - active.reserve (numSeqs); - - // for every column - for (int i = 1; i <= alignLength; i++){ - - // find all aligned residues in this particular column - active.clear(); - for (int j = 0; j < numSeqs; j++){ - if (seqs[j][i] != '-'){ - active.push_back (make_pair(j, ++position[j])); - } - } - - outfile << setw(4) << ComputeScore (active, sparseMatrices) << endl; - } - - outfile.close(); -} - -///////////////////////////////////////////////////////////////// -// ComputeScore() -// -// Computes the annotation score for a particular column. -///////////////////////////////////////////////////////////////// - -int ComputeScore (const SafeVector > &active, - const SafeVector > &sparseMatrices){ - - if (active.size() <= 1) return 0; - - // ALTERNATIVE #1: Compute the average alignment score. - - float val = 0; - for (int i = 0; i < (int) active.size(); i++){ - for (int j = i+1; j < (int) active.size(); j++){ - val += sparseMatrices[active[i].first][active[j].first]->GetValue(active[i].second, active[j].second); - } - } - - return (int) (200 * val / ((int) active.size() * ((int) active.size() - 1))); - -} diff --git a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/MakeGnuPlot.cc b/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/MakeGnuPlot.cc deleted file mode 100644 index fe6641a..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/MakeGnuPlot.cc +++ /dev/null @@ -1,58 +0,0 @@ -///////////////////////////////////////////////////////////////// -// MakeGnuPlot.cc -///////////////////////////////////////////////////////////////// - -#include -#include - -using namespace std; - -int main (int argc, char **argv){ - - if (argc == 1 || argc > 3){ - cerr << "Usage: makegnuplot annotscores [refscores]" << endl; - exit (1); - } - - ifstream data (argv[1]); - - if (data.fail()){ - cerr << "ERROR: Could not open file " << argv[1] << endl; - exit (1); - } - - int x, ct = 0; - while (data >> x) ct++; - data.close(); - - ofstream out ("temporary_gnuplot_script"); - - if (out.fail()){ - cerr << "ERROR: Could not create temporary file." << endl; - exit (1); - } - - out << "set title \"Column Reliability Scores\"" << endl - << "set xlabel \"Alignment Position\"" << endl - << "set ylabel \"Column Reliability\"" << endl - << "set xr [1:" << ct << "]" << endl - << "set term postscript enhanced color" << endl - << "set output \"reliability.ps\"" << endl; - - if (argc == 3){ - out << "set style fill solid 0.5 noborder" << endl - << "plot \"" << argv[2] << "\" title \"actual\" with boxes lt 2, \\" << endl - << " \"" << argv[1] << "\" title \"predicted\" with histeps lt 1 lw 3" << endl; - } - else - out << "plot \"" << argv[1] << "\" title \"predicted\" with histeps lt 1 lw 3" << endl; - - out.close(); - - if (system ("gnuplot temporary_gnuplot_script") == -1){ - cerr << "ERROR: Could not run Gnuplot correctly." << endl; - exit (1); - } - - //system ("rm temporary_gnuplot_script"); -} diff --git a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/Makefile b/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/Makefile deleted file mode 100644 index d7581ec..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/Makefile +++ /dev/null @@ -1,58 +0,0 @@ -################################################################################ -# Makefile for probcons -################################################################################ - -################################################################################ -# 1) Choose C++ compiler. -################################################################################ - -CXX = g++ - -################################################################################ -# 2) Set C++ flags. -# a) DEBUG mode -- no optimizations, enable SafeVector checking, no inlining -# b) PROFILE mode -- for gprof -# c) RELEASE mode -################################################################################ - -OTHERFLAGS = -DNumInsertStates=1 -DVERSION="1.10" - -# debug mode -#CXXFLAGS = -g -W -Wall -pedantic -DENABLE_CHECKS -fno-inline $(OTHERFLAGS) - -# profile mode -#CXXFLAGS = -pg -W -Wall -pedantic $(OTHERFLAGS) - -# release mode -#CXXFLAGS = -O3 -W -Wall -pedantic -DNDEBUG $(OTHERFLAGS) -mmmx -msse -msse2 -mfpmath=sse -march=pentium4 -mcpu=pentium4 -funroll-loops -fomit-frame-pointer -CXXFLAGS = -O3 -W -Wall -pedantic -DNDEBUG $(OTHERFLAGS) -funroll-loops - -################################################################################ -# 3) Dependencies -################################################################################ - -TARGETS = probcons -#compare project makegnuplot - -.PHONY : all -all : $(TARGETS) - -#probcons : MultiSequence.h ProbabilisticModel.h ScoreType.h Sequence.h FileBuffer.h SparseMatrix.h EvolutionaryTree.h Defaults.h SafeVector.h Main.cc -probcons : MultiSequence.h ProbabilisticModel.h ScoreType.h Sequence.h FileBuffer.h SparseMatrix.h EvolutionaryTree.h Defaults.h SafeVector.h - $(CXX) $(CXXFLAGS) -lm -o probcons Main.cc - -compare : MultiSequence.h Sequence.h FileBuffer.h SafeVector.h CompareToRef.cc - $(CXX) $(CXXFLAGS) -o compare CompareToRef.cc - -fixref : MultiSequence.h ProbabilisticModel.h ScoreType.h Sequence.h FileBuffer.h SparseMatrix.h EvolutionaryTree.h Defaults.h SafeVector.h FixRef.cc - $(CXX) $(CXXFLAGS) -o fixref FixRef.cc - -project : MultiSequence.h Sequence.h SafeVector.h ProjectPairwise.cc - $(CXX) $(CXXFLAGS) -o project ProjectPairwise.cc - -makegnuplot : MakeGnuPlot.cc - $(CXX) $(CXXFLAGS) -o makegnuplot MakeGnuPlot.cc - -.PHONY : clean -clean: - rm -f $(TARGETS) diff --git a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/MultiSequence.h b/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/MultiSequence.h deleted file mode 100644 index b28c186..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/MultiSequence.h +++ /dev/null @@ -1,1120 +0,0 @@ -//////////////////////////////////////////////////////////////// -// MultiSequence.h -// -// Utilities for reading/writing multiple sequence data. -///////////////////////////////////////////////////////////////// - -#ifndef MULTISEQUENCE_H -#define MULTISEQUENCE_H - -#include -#include -#include -#include -#include -#include -#include -#include "SafeVector.h" -#include "Sequence.h" -#include "FileBuffer.h" - -///////////////////////////////////////////////////////////////// -// MultiSequence -// -// Class for multiple sequence alignment input/output. -///////////////////////////////////////////////////////////////// - -namespace MXSCARNA { -class MultiSequence { - - SafeVector *sequences; - - public: - - ///////////////////////////////////////////////////////////////// - // MultiSequence::MultiSequence() - // - // Default constructor. - ///////////////////////////////////////////////////////////////// - - MultiSequence () : sequences (NULL) {} - - ///////////////////////////////////////////////////////////////// - // MultiSequence::MultiSequence() - // - // Constructor. Load MFA from a FileBuffer object. - ///////////////////////////////////////////////////////////////// - - MultiSequence (FileBuffer &infile) : sequences (NULL) { - LoadMFA (infile); - } - - ///////////////////////////////////////////////////////////////// - // MultiSequence::MultiSequence() - // - // Constructor. Load MFA from a filename. - ///////////////////////////////////////////////////////////////// - - MultiSequence (const string &filename) : sequences (NULL){ - LoadMFA (filename); - } - - ///////////////////////////////////////////////////////////////// - // MultiSequence::~MultiSequence() - // - // Destructor. Gets rid of sequence objects contained in the - // multiple alignment. - ///////////////////////////////////////////////////////////////// - - ~MultiSequence(){ - - // if sequences allocated - if (sequences){ - - // free all sequences - for (SafeVector::iterator iter = sequences->begin(); iter != sequences->end(); ++iter){ - assert (*iter); - delete *iter; - *iter = NULL; - } - - // free sequence vector - delete sequences; - sequences = NULL; - } - } - - ///////////////////////////////////////////////////////////////// - // MultiSequence::LoadMFA() - // - // Load MFA from a filename. - ///////////////////////////////////////////////////////////////// - - void LoadMFA (const string &filename, bool stripGaps = false){ - - // try opening file - FileBuffer infile (filename.c_str()); - - if (infile.fail()){ - cerr << "ERROR: Could not open file '" << filename << "' for reading." << endl; - exit (1); - } - - // if successful, then load using other LoadMFA() routine - LoadMFA (infile, stripGaps); - - infile.close(); - } - - ///////////////////////////////////////////////////////////////// - // MultiSequence::LoadMFA() - // - // Load MSF from a FileBuffer object. - ///////////////////////////////////////////////////////////////// - - void ParseMSF (FileBuffer &infile, string header, bool stripGaps = false){ - - SafeVector *> seqData; - SafeVector seqNames; - SafeVector seqLengths; - - istringstream in; - bool valid = true; - bool missingHeader = false; - bool clustalW = false; - - // read until data starts - while (!infile.eof() && header.find ("..", 0) == string::npos){ - if (header.find ("CLUSTAL", 0) == 0 || header.find ("PROBCONS", 0) == 0){ - clustalW = true; - break; - } - infile.GetLine (header); - if (header.find ("//", 0) != string::npos){ - missingHeader = true; - break; - } - } - - // read until end-of-file - while (valid){ - infile.GetLine (header); - if (infile.eof()) break; - - string word; - in.clear(); - in.str(header); - - // check if there's anything on this line - if (in >> word){ - - // clustalw name parsing - if (clustalW){ - if (!isspace(header[0]) && find (seqNames.begin(), seqNames.end(), word) == seqNames.end()){ - seqNames.push_back (word); - seqData.push_back (new SafeVector()); - seqLengths.push_back (0); - seqData[(int) seqData.size() - 1]->push_back ('@'); - } - } - - // look for new sequence label - if (word == string ("Name:")){ - if (in >> word){ - seqNames.push_back (word); - seqData.push_back (new SafeVector()); - seqLengths.push_back (0); - seqData[(int) seqData.size() - 1]->push_back ('@'); - } - else - valid = false; - } - - // check if this is sequence data - else if (find (seqNames.begin(), seqNames.end(), word) != seqNames.end()){ - int index = find (seqNames.begin(), seqNames.end(), word) - seqNames.begin(); - - // read all remaining characters on the line - char ch; - while (in >> ch){ - if (isspace (ch)) continue; -// if (ch >= 'a' && ch <= 'z') ch = ch - 'a' + 'A'; - if (ch == '.') ch = '-'; - if (stripGaps && ch == '-') continue; -/* - if (!((ch >= 'A' && ch <= 'Z') || ch == '*' || ch == '-')){ - cerr << "ERROR: Unknown character encountered: " << ch << endl; - exit (1); - } -*/ - if (!((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z') || ch == '*' || ch == '-')){ - cerr << "ERROR: Unknown character encountered: " << ch << endl; - exit (1); - } - - // everything's ok so far, so just store this character. - seqData[index]->push_back (ch); - seqLengths[index]++; - } - } - else if (missingHeader){ - seqNames.push_back (word); - seqData.push_back (new SafeVector()); - seqLengths.push_back (0); - seqData[(int) seqData.size() - 1]->push_back ('@'); - - int index = (int) seqNames.size() - 1; - - // read all remaining characters on the line - char ch; - while (in >> ch){ - if (isspace (ch)) continue; -// if (ch >= 'a' && ch <= 'z') ch = ch - 'a' + 'A'; - if (ch == '.') ch = '-'; - if (stripGaps && ch == '-') continue; - - if (!((ch >= 'A' && ch <= 'Z') || ch == '*' || ch == '-')){ - cerr << "ERROR: Unknown character encountered: " << ch << endl; - exit (1); - } -/* - if (!((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z') || ch == '*' || ch == '-')){ - cerr << "ERROR: Unknown character encountered: " << ch << endl; - exit (1); - } -*/ - // everything's ok so far, so just store this character. - seqData[index]->push_back (ch); - seqLengths[index]++; - } - } - } - } - - // check for errorsq - if (seqNames.size() == 0){ - cerr << "ERROR: No sequences read!" << endl; - exit (1); - } - - assert (!sequences); - sequences = new SafeVector; - for (int i = 0; i < (int) seqNames.size(); i++){ - if (seqLengths[i] == 0){ - cerr << "ERROR: Sequence of zero length!" << endl; - exit (1); - } - Sequence *seq = new Sequence (seqData[i], seqNames[i], seqLengths[i], i, i); - sequences->push_back (seq); - } - } - - ///////////////////////////////////////////////////////////////// - // MultiSequence::LoadMFA() - // - // Load MFA from a FileBuffer object. - ///////////////////////////////////////////////////////////////// - - void LoadMFA (FileBuffer &infile, bool stripGaps = false){ - - // check to make sure that file reading is ok - if (infile.fail()){ - cerr << "ERROR: Error reading file." << endl; - exit (1); - } - - // read all sequences - while (true){ - - // get the sequence label as being the current # of sequences - // NOTE: sequence labels here are zero-based - int index = (!sequences) ? 0 : sequences->size(); - - // read the sequence - Sequence *seq = new Sequence (infile, stripGaps); - if (seq->Fail()){ - - // check if alternative file format (i.e. not MFA) - if (index == 0){ - string header = seq->GetHeader(); - if (header.length() > 0 && header[0] != '>'){ - // try MSF format - ParseMSF (infile, header); - break; - } - } - - delete seq; - break; - } - seq->SetLabel (index); - - // add the sequence to the list of current sequences - if (!sequences) sequences = new SafeVector; - sequences->push_back (seq); - } - - // make sure at least one sequence was read - if (!sequences){ - cerr << "ERROR: No sequences read." << endl; - exit (1); - } - } - - ///////////////////////////////////////////////////////////////// - // MultiSequence::AddSequence() - // - // Add another sequence to an existing sequence list - ///////////////////////////////////////////////////////////////// - - void AddSequence (Sequence *sequence){ - assert (sequence); - assert (!sequence->Fail()); - - // add sequence - if (!sequences) sequences = new SafeVector; - sequences->push_back (sequence); - } - - ///////////////////////////////////////////////////////////////// - // MultiSequence::RemoveSequence() - // - // Remove a sequence from the MultiSequence - ///////////////////////////////////////////////////////////////// - - void RemoveSequence (int index){ - assert (sequences); - - assert (index >= 0 && index < (int) sequences->size()); - delete (*sequences)[index]; - - sequences->erase (sequences->begin() + index); - } - - ///////////////////////////////////////////////////////////////// - // MultiSequence::WriteMFA() - // - // Write MFA to the outfile. Allows the user to specify the - // number of columns for the output. Also, useIndices determines - // whether or not the actual sequence comments will be printed - // out or whether the artificially assigned sequence labels will - // be used instead. - ///////////////////////////////////////////////////////////////// - - void WriteMFA (ostream &outfile, string *ssCons = NULL, int numColumns = 60, bool useIndices = false){ - if (!sequences) return; - - // loop through all sequences and write them out - for (SafeVector::iterator iter = sequences->begin(); iter != sequences->end(); ++iter){ - (*iter)->WriteMFA (outfile, numColumns, useIndices); - } - - int count = 0; - if (ssCons != NULL) { - outfile << ">#=GC SS_cons" << endl; - int length = ssCons->length(); - for (int i = 1; i < length; i++ ) { - outfile << ssCons->at(i); - ++count; - - if (numColumns <= count) { - outfile << endl; - count = 0; - } - - } - } - outfile << endl; - } - - void WriteMFAseq (ostream &outfile, int numColumns = 60, bool useIndices = false){ - if (!sequences) return; - - // loop through all sequences and write them out - for (SafeVector::iterator iter = sequences->begin(); iter != sequences->end(); ++iter){ - (*iter)->WriteMFA (outfile, numColumns, useIndices); - } - } - - ///////////////////////////////////////////////////////////////// - // MultiSequence::GetAnnotationChar() - // - // Return CLUSTALW annotation for column. - ///////////////////////////////////////////////////////////////// - - char GetAnnotationChar (SafeVector &column){ - SafeVector counts (256, 0); - int allChars = (int) column.size(); - - for (int i = 0; i < allChars; i++){ - counts[(unsigned char) toupper(column[i])]++; - } - - allChars -= counts[(unsigned char) '-']; - if (allChars == 1) return ' '; - - for (int i = 0; i < 256; i++) if ((char) i != '-' && counts[i] == allChars) return '*'; - - if (counts[(unsigned char) 'S'] + - counts[(unsigned char) 'T'] + - counts[(unsigned char) 'A'] == allChars) - return ':'; - - if (counts[(unsigned char) 'N'] + - counts[(unsigned char) 'E'] + - counts[(unsigned char) 'Q'] + - counts[(unsigned char) 'K'] == allChars) - return ':'; - - if (counts[(unsigned char) 'N'] + - counts[(unsigned char) 'H'] + - counts[(unsigned char) 'Q'] + - counts[(unsigned char) 'K'] == allChars) - return ':'; - - if (counts[(unsigned char) 'N'] + - counts[(unsigned char) 'D'] + - counts[(unsigned char) 'E'] + - counts[(unsigned char) 'Q'] == allChars) - return ':'; - - if (counts[(unsigned char) 'Q'] + - counts[(unsigned char) 'H'] + - counts[(unsigned char) 'R'] + - counts[(unsigned char) 'K'] == allChars) - return ':'; - - if (counts[(unsigned char) 'M'] + - counts[(unsigned char) 'I'] + - counts[(unsigned char) 'L'] + - counts[(unsigned char) 'V'] == allChars) - return ':'; - - if (counts[(unsigned char) 'M'] + - counts[(unsigned char) 'I'] + - counts[(unsigned char) 'L'] + - counts[(unsigned char) 'F'] == allChars) - return ':'; - - if (counts[(unsigned char) 'H'] + - counts[(unsigned char) 'Y'] == allChars) - return ':'; - - if (counts[(unsigned char) 'F'] + - counts[(unsigned char) 'Y'] + - counts[(unsigned char) 'W'] == allChars) - return ':'; - - if (counts[(unsigned char) 'C'] + - counts[(unsigned char) 'S'] + - counts[(unsigned char) 'A'] == allChars) - return '.'; - - if (counts[(unsigned char) 'A'] + - counts[(unsigned char) 'T'] + - counts[(unsigned char) 'V'] == allChars) - return '.'; - - if (counts[(unsigned char) 'S'] + - counts[(unsigned char) 'A'] + - counts[(unsigned char) 'G'] == allChars) - return '.'; - - if (counts[(unsigned char) 'S'] + - counts[(unsigned char) 'T'] + - counts[(unsigned char) 'N'] + - counts[(unsigned char) 'K'] == allChars) - return '.'; - - if (counts[(unsigned char) 'S'] + - counts[(unsigned char) 'T'] + - counts[(unsigned char) 'P'] + - counts[(unsigned char) 'A'] == allChars) - return '.'; - - if (counts[(unsigned char) 'S'] + - counts[(unsigned char) 'G'] + - counts[(unsigned char) 'N'] + - counts[(unsigned char) 'D'] == allChars) - return '.'; - - if (counts[(unsigned char) 'S'] + - counts[(unsigned char) 'N'] + - counts[(unsigned char) 'D'] + - counts[(unsigned char) 'E'] + - counts[(unsigned char) 'Q'] + - counts[(unsigned char) 'K'] == allChars) - return '.'; - - if (counts[(unsigned char) 'N'] + - counts[(unsigned char) 'D'] + - counts[(unsigned char) 'E'] + - counts[(unsigned char) 'Q'] + - counts[(unsigned char) 'H'] + - counts[(unsigned char) 'K'] == allChars) - return '.'; - - if (counts[(unsigned char) 'N'] + - counts[(unsigned char) 'E'] + - counts[(unsigned char) 'H'] + - counts[(unsigned char) 'Q'] + - counts[(unsigned char) 'R'] + - counts[(unsigned char) 'K'] == allChars) - return '.'; - - if (counts[(unsigned char) 'F'] + - counts[(unsigned char) 'V'] + - counts[(unsigned char) 'L'] + - counts[(unsigned char) 'I'] + - counts[(unsigned char) 'M'] == allChars) - return '.'; - - if (counts[(unsigned char) 'H'] + - counts[(unsigned char) 'F'] + - counts[(unsigned char) 'Y'] == allChars) - return '.'; - - return ' '; - } - - ///////////////////////////////////////////////////////////////// - // MultiSequence::WriteALN() - // - // Write ALN to the outfile. Allows the user to specify the - // number of columns for the output. - ///////////////////////////////////////////////////////////////// - - void WriteALN (ostream &outfile, int numColumns = 60){ - if (!sequences) return; - -// outfile << "Multplex SCARNA version " << VERSION << " multiple sequence alignment" << endl; -// outfile << "PROBCONS version " << VERSION << " multiple sequence alignment" << endl; - outfile << "CLUSTAL W(1.83) multiple sequence alignment" << endl; -// outfile << "//" << endl; - - int longestComment = 0; - SafeVector::iterator> ptrs (GetNumSequences()); - SafeVector lengths (GetNumSequences()); - for (int i = 0; i < GetNumSequences(); i++){ - ptrs[i] = GetSequence (i)->GetDataPtr(); - lengths[i] = GetSequence (i)->GetLength(); - longestComment = max (longestComment, (int) GetSequence(i)->GetName().length()); - } - longestComment += 4; - - int writtenChars = 0; - bool allDone = false; - - while (!allDone){ - outfile << endl; - allDone = true; - - // loop through all sequences and write them out - for (int i = 0; i < GetNumSequences(); i++){ - - if (writtenChars < lengths[i]){ - outfile << GetSequence(i)->GetName(); - for (int j = 0; j < longestComment - (int) GetSequence(i)->GetName().length(); j++) - outfile << ' '; - - for (int j = 0; j < numColumns; j++){ - if (writtenChars + j < lengths[i]) - outfile << ptrs[i][writtenChars + j + 1]; - else - break; - } - - outfile << endl; - - if (writtenChars + numColumns < lengths[i]) allDone = false; - } - } - - // write annotation line - for (int j = 0; j < longestComment; j++) - outfile << ' '; - - for (int j = 0; j < numColumns; j++){ - SafeVector column; - - for (int i = 0; i < GetNumSequences(); i++) - if (writtenChars + j < lengths[i]) - column.push_back (ptrs[i][writtenChars + j + 1]); - - if (column.size() > 0) - outfile << GetAnnotationChar (column); - } - - outfile << endl; - writtenChars += numColumns; - } - outfile << endl; - } - - //////////////////////////////////////////////////////////////// - // MultiSequence::WriteWEB(); - // - // Write ALN to the outfile. Allows the user to specify the - // number of columns for the output. - /////////////////////////////////////////////////////////////// - void WriteWEB (ostream &outfile, string *ssCons = NULL, int numColumns = 60, bool useIndices = false){ - if (!sequences) return; - - // loop through all sequences and write them out - for (SafeVector::iterator iter = sequences->begin(); iter != sequences->end(); ++iter){ - (*iter)->WriteWEB (outfile, numColumns, useIndices); - } - - // write conservation - outfile << "" << endl; - int longestComment = 0; - SafeVector::iterator> ptrs (GetNumSequences()); - SafeVector lengths (GetNumSequences()); - for (int i = 0; i < GetNumSequences(); i++){ - ptrs[i] = GetSequence (i)->GetDataPtr(); - lengths[i] = GetSequence (i)->GetLength(); - longestComment = max (longestComment, (int) GetSequence(i)->GetName().length()); - } - longestComment += 4; - - int writtenChars = 0; - bool allDone = false; - - while (!allDone){ -// outfile << endl; - allDone = true; - - // loop through all sequences and write them out - for (int i = 0; i < GetNumSequences(); i++){ - - if (writtenChars < lengths[i]){ -// outfile << GetSequence(i)->GetName(); - for (int j = 0; j < longestComment - (int) GetSequence(i)->GetName().length(); j++) -// outfile << ' '; - - for (int j = 0; j < numColumns; j++){ - if (writtenChars + j < lengths[i]); -// outfile << ptrs[i][writtenChars + j + 1]; - else - break; - } - -// outfile << endl; - - if (writtenChars + numColumns < lengths[i]) allDone = false; - } - } - - // write annotation line -// for (int j = 0; j < longestComment; j++) -// outfile << ' '; - - for (int j = 0; j < numColumns; j++){ - SafeVector column; - - for (int i = 0; i < GetNumSequences(); i++) - if (writtenChars + j < lengths[i]) - column.push_back (ptrs[i][writtenChars + j + 1]); - - if (column.size() > 0) - outfile << GetAnnotationChar (column); - } - -// outfile << endl; - writtenChars += numColumns; - } - outfile << endl; - outfile << "" << endl; - - // write structure information - if (ssCons != NULL) { - outfile << "" << endl; - int length = ssCons->length(); - for (int i = 1; i < length; i++ ) { - outfile << ssCons->at(i); - } - outfile << endl; - outfile << "" << endl; - - // add coordinate information 06/09/14 - outfile << "" << endl; - - int segmentPos = 1; - for (int i = 1; i < length; i++) { - int count = 0; - - if ( ssCons->at(i) == '(' ) { - ++count; - - int j = i; - while (count != 0) { - char ch = ssCons->at(++j); - if (ch == '(') - ++count; - else if (ch == ')') - --count; - } - - outfile << "" << endl; - - } - } - } - outfile << "" << endl; - - outfile << "" << endl; - WriteMXSCARNA (outfile, ssCons); - outfile << "" << endl; - - outfile << "" << endl; - WriteALN (outfile); - outfile << "" << endl; - - outfile << "" << endl; - WriteMFA (outfile, ssCons); - outfile << "" << endl; - - outfile << "" << endl; - WriteWebSTOCKHOLM (outfile, ssCons); - outfile << "" << endl; - } - - //////////////////////////////////////////////////////////////// - // MultiSequence::WriteSTOCKHOLM(); - // - // Write STOCKHOLM to the outfile. Allows the user to specify the - // number of columns for the output. - /////////////////////////////////////////////////////////////// - void WriteSTOCKHOLM (ostream &outfile, string *ssCons = NULL, int numColumns = 60) { - if (!sequences) return; - - outfile << "# STOCKHOLM 1.0" << endl; - - int longestComment = 0; - SafeVector::iterator> ptrs (GetNumSequences()); - SafeVector lengths (GetNumSequences()); - for (int i = 0; i < GetNumSequences(); i++){ - ptrs[i] = GetSequence (i)->GetDataPtr(); - lengths[i] = GetSequence (i)->GetLength(); - longestComment = max (longestComment, (int) GetSequence(i)->GetName().length()); - } - longestComment += 4; - - int writtenChars = 0; - bool allDone = false; - - while (!allDone){ - outfile << endl; - allDone = true; - - // loop through all sequences and write them out - for (int i = 0; i < GetNumSequences(); i++){ - - if (writtenChars < lengths[i]){ - outfile << GetSequence(i)->GetName(); - for (int j = 0; j < longestComment - (int) GetSequence(i)->GetName().length(); j++) - outfile << ' '; - - for (int j = 0; j < numColumns; j++){ - if (writtenChars + j < lengths[i]) - if (ptrs[i][writtenChars + j + 1] != '-') - outfile << ptrs[i][writtenChars + j + 1]; - else - outfile << "."; - else - break; - } - - outfile << endl; - - if (writtenChars + numColumns < lengths[i]) allDone = false; - } - } - - // write ssCons - - if (ssCons != NULL) { - outfile << "#=GC SS_cons"; - int lengthSScons = 12; - for (int j = 0; j < longestComment - lengthSScons; j++) - outfile << ' '; - - for (int j = 0; j < numColumns; j++) { - if (ssCons->at(writtenChars + j + 1) == '(') - outfile << "<"; - else if (ssCons->at(writtenChars + j + 1) == ')') - outfile << ">"; - else - outfile << "."; - if ((unsigned int)writtenChars + j + 1 >= ssCons->length() - 1) - break; - } - outfile << endl; - } - - writtenChars += numColumns; - } - outfile << "//"; - outfile << endl; - } - - //////////////////////////////////////////////////////////////// - // MultiSequence::WriteSTOCKHOLM(); - // - // Write STOCKHOLM to the outfile. Allows the user to specify the - // number of columns for the output. - /////////////////////////////////////////////////////////////// - void WriteWebSTOCKHOLM (ostream &outfile, string *ssCons = NULL, int numColumns = 60) { - if (!sequences) return; - - outfile << "# STOCKHOLM 1.0" << endl; - - int longestComment = 0; - SafeVector::iterator> ptrs (GetNumSequences()); - SafeVector lengths (GetNumSequences()); - for (int i = 0; i < GetNumSequences(); i++){ - ptrs[i] = GetSequence (i)->GetDataPtr(); - lengths[i] = GetSequence (i)->GetLength(); - longestComment = max (longestComment, (int) GetSequence(i)->GetName().length()); - } - longestComment += 4; - - int writtenChars = 0; - bool allDone = false; - - while (!allDone){ - outfile << endl; - allDone = true; - - // loop through all sequences and write them out - for (int i = 0; i < GetNumSequences(); i++){ - - if (writtenChars < lengths[i]){ - outfile << GetSequence(i)->GetName(); - for (int j = 0; j < longestComment - (int) GetSequence(i)->GetName().length(); j++) - outfile << ' '; - - for (int j = 0; j < numColumns; j++){ - if (writtenChars + j < lengths[i]) - if (ptrs[i][writtenChars + j + 1] != '-') - outfile << ptrs[i][writtenChars + j + 1]; - else - outfile << "."; - else - break; - } - - outfile << endl; - - if (writtenChars + numColumns < lengths[i]) allDone = false; - } - } - - // write ssCons - - if (ssCons != NULL) { - outfile << "#=GC SS_cons"; - int lengthSScons = 12; - for (int j = 0; j < longestComment - lengthSScons; j++) - outfile << ' '; - - for (int j = 0; j < numColumns; j++) { - outfile << ssCons->at(writtenChars + j + 1); - - if ((unsigned int)writtenChars + j + 1 >= ssCons->length() - 1) - break; - } - outfile << endl; - } - - writtenChars += numColumns; - } - outfile << "//"; - outfile << endl; - } - - //////////////////////////////////////////////////////////////// - // MultiSequence::WriteMXSCARNA(); - // - // Write MXSCARNA to the outfile. Allows the user to specify the - // number of columns for the output. - /////////////////////////////////////////////////////////////// - void WriteMXSCARNA (ostream &outfile, string *ssCons = NULL, int numColumns = 60){ - if (!sequences) return; - - outfile << "Multplex SCARNA version " << VERSION << " multiple sequence alignment" << endl; - - int longestComment = 0; - SafeVector::iterator> ptrs (GetNumSequences()); - SafeVector lengths (GetNumSequences()); - for (int i = 0; i < GetNumSequences(); i++){ - ptrs[i] = GetSequence (i)->GetDataPtr(); - lengths[i] = GetSequence (i)->GetLength(); - longestComment = max (longestComment, (int) GetSequence(i)->GetName().length()); - } - longestComment += 4; - - int writtenChars = 0; - bool allDone = false; - - while (!allDone){ - outfile << endl; - allDone = true; - - // loop through all sequences and write them out - for (int i = 0; i < GetNumSequences(); i++){ - - if (writtenChars < lengths[i]){ - outfile << GetSequence(i)->GetName(); - for (int j = 0; j < longestComment - (int) GetSequence(i)->GetName().length(); j++) - outfile << ' '; - - for (int j = 0; j < numColumns; j++){ - if (writtenChars + j < lengths[i]) - outfile << ptrs[i][writtenChars + j + 1]; - else - break; - } - - outfile << endl; - - if (writtenChars + numColumns < lengths[i]) allDone = false; - } - } - - // write ssCons - if (ssCons != NULL) { - outfile << "ss_cons"; - int lengthSScons = 7; - for (int j = 0; j < longestComment - lengthSScons; j++) - outfile << ' '; - - for (int j = 0; j < numColumns; j++) { - outfile << ssCons->at(writtenChars + j + 1); - if ((unsigned int)writtenChars + j + 1 >= ssCons->length() - 1) - break; - } - outfile << endl; - } - - // write annotation line - for (int j = 0; j < longestComment; j++) - outfile << ' '; - - for (int j = 0; j < numColumns; j++){ - SafeVector column; - - for (int i = 0; i < GetNumSequences(); i++) - if (writtenChars + j < lengths[i]) - column.push_back (ptrs[i][writtenChars + j + 1]); - - if (column.size() > 0) - outfile << GetAnnotationChar (column); - } - - outfile << endl; - writtenChars += numColumns; - } - outfile << endl; - } - - ///////////////////////////////////////////////////////////////// - // MultiSequence::GetSequence() - // - // Retrieve a sequence from the MultiSequence object. - ///////////////////////////////////////////////////////////////// - - Sequence* GetSequence (int i){ - assert (sequences); - assert (0 <= i && i < (int) sequences->size()); - - return (*sequences)[i]; - } - - ///////////////////////////////////////////////////////////////// - // MultiSequence::GetSequence() - // - // Retrieve a sequence from the MultiSequence object - // (const version). - ///////////////////////////////////////////////////////////////// - - const Sequence* GetSequence (int i) const { - assert (sequences); - assert (0 <= i && i < (int) sequences->size()); - - return (*sequences)[i]; - } - - ///////////////////////////////////////////////////////////////// - // MultiSequence::GetNumSequences() - // - // Returns the number of sequences in the MultiSequence. - ///////////////////////////////////////////////////////////////// - - int GetNumSequences () const { - if (!sequences) return 0; - return (int) sequences->size(); - } - - ///////////////////////////////////////////////////////////////// - // MultiSequence::SortByHeader() - // - // Organizes the sequences according to their sequence headers - // in ascending order. - ///////////////////////////////////////////////////////////////// - - void SortByHeader () { - assert (sequences); - - // a quick and easy O(n^2) sort - for (int i = 0; i < (int) sequences->size()-1; i++){ - for (int j = i+1; j < (int) sequences->size(); j++){ - if ((*sequences)[i]->GetHeader() > (*sequences)[j]->GetHeader()) - swap ((*sequences)[i], (*sequences)[j]); - } - } - } - - ///////////////////////////////////////////////////////////////// - // MultiSequence::SortByLabel() - // - // Organizes the sequences according to their sequence labels - // in ascending order. - ///////////////////////////////////////////////////////////////// - - void SortByLabel () { - assert (sequences); - - // a quick and easy O(n^2) sort - for (int i = 0; i < (int) sequences->size()-1; i++){ - for (int j = i+1; j < (int) sequences->size(); j++){ - if ((*sequences)[i]->GetSortLabel() > (*sequences)[j]->GetSortLabel()) - swap ((*sequences)[i], (*sequences)[j]); - } - } - } - - ///////////////////////////////////////////////////////////////// - // MultiSequence::SaveOrdering() - // - // Relabels sequences so as to preserve the current ordering. - ///////////////////////////////////////////////////////////////// - - void SaveOrdering () { - assert (sequences); - - for (int i = 0; i < (int) sequences->size(); i++) - (*sequences)[i]->SetSortLabel (i); - } - - ///////////////////////////////////////////////////////////////// - // MultiSequence::Project() - // - // Given a set of indices, extract all sequences from the current - // MultiSequence object whose index is included in the set. - // Then, project the multiple alignments down to the desired - // subset, and return the projection as a new MultiSequence - // object. - ///////////////////////////////////////////////////////////////// - - MultiSequence *Project (const set &indices){ - SafeVector::iterator> oldPtrs (indices.size()); - SafeVector *> newPtrs (indices.size()); - - assert (indices.size() != 0); - - // grab old data - int i = 0; - for (set::const_iterator iter = indices.begin(); iter != indices.end(); ++iter){ - oldPtrs[i++] = GetSequence (*iter)->GetDataPtr(); - } - - // compute new length - int oldLength = GetSequence (*indices.begin())->GetLength(); - int newLength = 0; - for (i = 1; i <= oldLength; i++){ - - // check to see if there is a gap in every sequence of the set - bool found = false; - for (int j = 0; !found && j < (int) indices.size(); j++) - found = (oldPtrs[j][i] != '-'); - - // if not, then this column counts towards the sequence length - if (found) newLength++; - } - - // build new alignments - for (i = 0; i < (int) indices.size(); i++){ - newPtrs[i] = new SafeVector(); assert (newPtrs[i]); - newPtrs[i]->push_back ('@'); - } - - // add all needed columns - for (i = 1; i <= oldLength; i++){ - - // make sure column is not gapped in all sequences in the set - bool found = false; - for (int j = 0; !found && j < (int) indices.size(); j++) - found = (oldPtrs[j][i] != '-'); - - // if not, then add it - if (found){ - for (int j = 0; j < (int) indices.size(); j++) - newPtrs[j]->push_back (oldPtrs[j][i]); - } - } - - // wrap sequences in MultiSequence object - MultiSequence *ret = new MultiSequence(); - i = 0; - for (set::const_iterator iter = indices.begin(); iter != indices.end(); ++iter){ - ret->AddSequence (new Sequence (newPtrs[i++], GetSequence (*iter)->GetHeader(), newLength, - GetSequence (*iter)->GetSortLabel(), GetSequence (*iter)->GetLabel())); - } - - return ret; - } -}; -} -#endif diff --git a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/ProbabilisticModel.h b/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/ProbabilisticModel.h deleted file mode 100644 index cd9dae9..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/ProbabilisticModel.h +++ /dev/null @@ -1,1211 +0,0 @@ -///////////////////////////////////////////////////////////////// -// ProbabilisticModel.h -// -// Routines for (1) posterior probability computations -// (2) chained anchoring -// (3) maximum weight trace alignment -///////////////////////////////////////////////////////////////// - -#ifndef PROBABILISTICMODEL_H -#define PROBABILISTICMODEL_H - -#include -#include -#include -#include "SafeVector.h" -#include "ScoreType.h" -#include "SparseMatrix.h" -#include "MultiSequence.h" -#include "StemCandidate.hpp" -#include "scarna.hpp" -#include "nrutil.h" -#include - -using namespace std; - -const int NumMatchStates = 1; // note that in this version the number - // of match states is fixed at 1...will - // change in future versions -const int NumMatrixTypes = NumMatchStates + NumInsertStates * 2; - -///////////////////////////////////////////////////////////////// -// ProbabilisticModel -// -// Class for storing the parameters of a probabilistic model and -// performing different computations based on those parameters. -// In particular, this class handles the computation of -// posterior probabilities that may be used in alignment. -///////////////////////////////////////////////////////////////// -namespace MXSCARNA { -class ProbabilisticModel { - - float initialDistribution[NumMatrixTypes]; // holds the initial probabilities for each state - float transProb[NumMatrixTypes][NumMatrixTypes]; // holds all state-to-state transition probabilities - float matchProb[256][256]; // emission probabilities for match states - float insProb[256][NumMatrixTypes]; // emission probabilities for insert states - NRMat WM; - - public: - - ///////////////////////////////////////////////////////////////// - // ProbabilisticModel::ProbabilisticModel() - // - // Constructor. Builds a new probabilistic model using the - // given parameters. - ///////////////////////////////////////////////////////////////// - - ProbabilisticModel (const VF &initDistribMat, const VF &gapOpen, const VF &gapExtend, - const VVF &emitPairs, const VF &emitSingle){ - - // build transition matrix - VVF transMat (NumMatrixTypes, VF (NumMatrixTypes, 0.0f)); - transMat[0][0] = 1; - for (int i = 0; i < NumInsertStates; i++){ - transMat[0][2*i+1] = gapOpen[2*i]; - transMat[0][2*i+2] = gapOpen[2*i+1]; - transMat[0][0] -= (gapOpen[2*i] + gapOpen[2*i+1]); - assert (transMat[0][0] > 0); - transMat[2*i+1][2*i+1] = gapExtend[2*i]; - transMat[2*i+2][2*i+2] = gapExtend[2*i+1]; - transMat[2*i+1][2*i+2] = 0; - transMat[2*i+2][2*i+1] = 0; - transMat[2*i+1][0] = 1 - gapExtend[2*i]; - transMat[2*i+2][0] = 1 - gapExtend[2*i+1]; - } - - // create initial and transition probability matrices - for (int i = 0; i < NumMatrixTypes; i++){ - initialDistribution[i] = LOG (initDistribMat[i]); - for (int j = 0; j < NumMatrixTypes; j++) - transProb[i][j] = LOG (transMat[i][j]); - } - - // create insertion and match probability matrices - for (int i = 0; i < 256; i++){ - for (int j = 0; j < NumMatrixTypes; j++) - insProb[i][j] = LOG (emitSingle[i]); - for (int j = 0; j < 256; j++) - matchProb[i][j] = LOG (emitPairs[i][j]); - } - } - - NRMat weightMatchScore(std::vector *pscs1, std::vector *pscs2, - std::vector *matchPSCS1, std::vector *matchPSCS2, NRMat WM) { - int len = WORDLENGTH; - int size = matchPSCS1->size(); - float weight = 1000; - - for(int iter = 0; iter < size; iter++) { - int i = matchPSCS1->at(iter); - int j = matchPSCS2->at(iter); - - const StemCandidate &sc1 = pscs1->at(i); - const StemCandidate &sc2 = pscs2->at(j); - - for(int k = 0; k < len; k++) { - WM[sc1.GetPosition() + k][sc2.GetPosition() + k] += weight; -// sumWeight += weight; - } - } - return WM; - } - - ///////////////////////////////////////////////////////////////// - // ProbabilisticModel::ComputeForwardMatrix() - // - // Computes a set of forward probability matrices for aligning - // seq1 and seq2. - // - // For efficiency reasons, a single-dimensional floating-point - // array is used here, with the following indexing scheme: - // - // forward[i + NumMatrixTypes * (j * (seq2Length+1) + k)] - // refers to the probability of aligning through j characters - // of the first sequence, k characters of the second sequence, - // and ending in state i. - ///////////////////////////////////////////////////////////////// - - VF *ComputeForwardMatrix (Sequence *seq1, Sequence *seq2) const { - - assert (seq1); - assert (seq2); - - const int seq1Length = seq1->GetLength(); - const int seq2Length = seq2->GetLength(); - - // retrieve the points to the beginning of each sequence - SafeVector::iterator iter1 = seq1->GetDataPtr(); - SafeVector::iterator iter2 = seq2->GetDataPtr(); - - // create matrix - VF *forwardPtr = new VF (NumMatrixTypes * (seq1Length+1) * (seq2Length+1), LOG_ZERO); - assert (forwardPtr); - VF &forward = *forwardPtr; - - // initialization condition - forward[0 + NumMatrixTypes * (1 * (seq2Length+1) + 1)] = - initialDistribution[0] + matchProb[(unsigned char) iter1[1]][(unsigned char) iter2[1]]; - - for (int k = 0; k < NumInsertStates; k++){ - forward[2*k+1 + NumMatrixTypes * (1 * (seq2Length+1) + 0)] = - initialDistribution[2*k+1] + insProb[(unsigned char) iter1[1]][k]; - forward[2*k+2 + NumMatrixTypes * (0 * (seq2Length+1) + 1)] = - initialDistribution[2*k+2] + insProb[(unsigned char) iter2[1]][k]; - } - - // remember offset for each index combination - int ij = 0; - int i1j = -seq2Length - 1; - int ij1 = -1; - int i1j1 = -seq2Length - 2; - - ij *= NumMatrixTypes; - i1j *= NumMatrixTypes; - ij1 *= NumMatrixTypes; - i1j1 *= NumMatrixTypes; - - // compute forward scores - for (int i = 0; i <= seq1Length; i++){ - unsigned char c1 = (i == 0) ? '~' : (unsigned char) iter1[i]; - for (int j = 0; j <= seq2Length; j++){ - unsigned char c2 = (j == 0) ? '~' : (unsigned char) iter2[j]; - - if (i > 1 || j > 1){ - if (i > 0 && j > 0){ - forward[0 + ij] = forward[0 + i1j1] + transProb[0][0]; - for (int k = 1; k < NumMatrixTypes; k++) - LOG_PLUS_EQUALS (forward[0 + ij], forward[k + i1j1] + transProb[k][0]); - forward[0 + ij] += matchProb[c1][c2]; - } - if (i > 0){ - for (int k = 0; k < NumInsertStates; k++) - forward[2*k+1 + ij] = insProb[c1][k] + - LOG_ADD (forward[0 + i1j] + transProb[0][2*k+1], - forward[2*k+1 + i1j] + transProb[2*k+1][2*k+1]); - } - if (j > 0){ - for (int k = 0; k < NumInsertStates; k++) - forward[2*k+2 + ij] = insProb[c2][k] + - LOG_ADD (forward[0 + ij1] + transProb[0][2*k+2], - forward[2*k+2 + ij1] + transProb[2*k+2][2*k+2]); - } - } - - ij += NumMatrixTypes; - i1j += NumMatrixTypes; - ij1 += NumMatrixTypes; - i1j1 += NumMatrixTypes; - } - } - - return forwardPtr; - } - - ///////////////////////////////////////////////////////////////// - // ProbabilisticModel::ComputeBackwardMatrix() - // - // Computes a set of backward probability matrices for aligning - // seq1 and seq2. - // - // For efficiency reasons, a single-dimensional floating-point - // array is used here, with the following indexing scheme: - // - // backward[i + NumMatrixTypes * (j * (seq2Length+1) + k)] - // refers to the probability of starting in state i and - // aligning from character j+1 to the end of the first - // sequence and from character k+1 to the end of the second - // sequence. - ///////////////////////////////////////////////////////////////// - - VF *ComputeBackwardMatrix (Sequence *seq1, Sequence *seq2) const { - - assert (seq1); - assert (seq2); - - const int seq1Length = seq1->GetLength(); - const int seq2Length = seq2->GetLength(); - SafeVector::iterator iter1 = seq1->GetDataPtr(); - SafeVector::iterator iter2 = seq2->GetDataPtr(); - - // create matrix - VF *backwardPtr = new VF (NumMatrixTypes * (seq1Length+1) * (seq2Length+1), LOG_ZERO); - assert (backwardPtr); - VF &backward = *backwardPtr; - - // initialization condition - for (int k = 0; k < NumMatrixTypes; k++) - backward[NumMatrixTypes * ((seq1Length+1) * (seq2Length+1) - 1) + k] = initialDistribution[k]; - - // remember offset for each index combination - int ij = (seq1Length+1) * (seq2Length+1) - 1; - int i1j = ij + seq2Length + 1; - int ij1 = ij + 1; - int i1j1 = ij + seq2Length + 2; - - ij *= NumMatrixTypes; - i1j *= NumMatrixTypes; - ij1 *= NumMatrixTypes; - i1j1 *= NumMatrixTypes; - - // compute backward scores - for (int i = seq1Length; i >= 0; i--){ - unsigned char c1 = (i == seq1Length) ? '~' : (unsigned char) iter1[i+1]; - for (int j = seq2Length; j >= 0; j--){ - unsigned char c2 = (j == seq2Length) ? '~' : (unsigned char) iter2[j+1]; - - if (i < seq1Length && j < seq2Length){ - const float ProbXY = backward[0 + i1j1] + matchProb[c1][c2]; - for (int k = 0; k < NumMatrixTypes; k++) - LOG_PLUS_EQUALS (backward[k + ij], ProbXY + transProb[k][0]); - } - if (i < seq1Length){ - for (int k = 0; k < NumInsertStates; k++){ - LOG_PLUS_EQUALS (backward[0 + ij], backward[2*k+1 + i1j] + insProb[c1][k] + transProb[0][2*k+1]); - LOG_PLUS_EQUALS (backward[2*k+1 + ij], backward[2*k+1 + i1j] + insProb[c1][k] + transProb[2*k+1][2*k+1]); - } - } - if (j < seq2Length){ - for (int k = 0; k < NumInsertStates; k++){ - LOG_PLUS_EQUALS (backward[0 + ij], backward[2*k+2 + ij1] + insProb[c2][k] + transProb[0][2*k+2]); - LOG_PLUS_EQUALS (backward[2*k+2 + ij], backward[2*k+2 + ij1] + insProb[c2][k] + transProb[2*k+2][2*k+2]); - } - } - - ij -= NumMatrixTypes; - i1j -= NumMatrixTypes; - ij1 -= NumMatrixTypes; - i1j1 -= NumMatrixTypes; - } - } - - return backwardPtr; - } - - ///////////////////////////////////////////////////////////////// - // ProbabilisticModel::ComputeTotalProbability() - // - // Computes the total probability of an alignment given - // the forward and backward matrices. - ///////////////////////////////////////////////////////////////// - - float ComputeTotalProbability (int seq1Length, int seq2Length, - const VF &forward, const VF &backward) const { - - // compute total probability - float totalForwardProb = LOG_ZERO; - float totalBackwardProb = LOG_ZERO; - for (int k = 0; k < NumMatrixTypes; k++){ - LOG_PLUS_EQUALS (totalForwardProb, - forward[k + NumMatrixTypes * ((seq1Length+1) * (seq2Length+1) - 1)] + - backward[k + NumMatrixTypes * ((seq1Length+1) * (seq2Length+1) - 1)]); - } - - totalBackwardProb = - forward[0 + NumMatrixTypes * (1 * (seq2Length+1) + 1)] + - backward[0 + NumMatrixTypes * (1 * (seq2Length+1) + 1)]; - - for (int k = 0; k < NumInsertStates; k++){ - LOG_PLUS_EQUALS (totalBackwardProb, - forward[2*k+1 + NumMatrixTypes * (1 * (seq2Length+1) + 0)] + - backward[2*k+1 + NumMatrixTypes * (1 * (seq2Length+1) + 0)]); - LOG_PLUS_EQUALS (totalBackwardProb, - forward[2*k+2 + NumMatrixTypes * (0 * (seq2Length+1) + 1)] + - backward[2*k+2 + NumMatrixTypes * (0 * (seq2Length+1) + 1)]); - } - - // cerr << totalForwardProb << " " << totalBackwardProb << endl; - - return (totalForwardProb + totalBackwardProb) / 2; - } - - ///////////////////////////////////////////////////////////////// - // ProbabilisticModel::ComputePosteriorMatrix() - // - // Computes the posterior probability matrix based on - // the forward and backward matrices. - ///////////////////////////////////////////////////////////////// - - VF *ComputePosteriorMatrix (Sequence *seq1, Sequence *seq2, - const VF &forward, const VF &backward) const { - - assert (seq1); - assert (seq2); - - const int seq1Length = seq1->GetLength(); - const int seq2Length = seq2->GetLength(); - - float totalProb = ComputeTotalProbability (seq1Length, seq2Length, - forward, backward); - - // compute posterior matrices - VF *posteriorPtr = new VF((seq1Length+1) * (seq2Length+1)); assert (posteriorPtr); - VF &posterior = *posteriorPtr; - - int ij = 0; - VF::iterator ptr = posterior.begin(); - - for (int i = 0; i <= seq1Length; i++){ - for (int j = 0; j <= seq2Length; j++){ - *(ptr++) = EXP (min (LOG_ONE, forward[ij] + backward[ij] - totalProb)); - ij += NumMatrixTypes; - } - } - - posterior[0] = 0; - - return posteriorPtr; - } - - /* - ///////////////////////////////////////////////////////////////// - // ProbabilisticModel::ComputeExpectedCounts() - // - // Computes the expected counts for the various transitions. - ///////////////////////////////////////////////////////////////// - - VVF *ComputeExpectedCounts () const { - - assert (seq1); - assert (seq2); - - const int seq1Length = seq1->GetLength(); - const int seq2Length = seq2->GetLength(); - SafeVector::iterator iter1 = seq1->GetDataPtr(); - SafeVector::iterator iter2 = seq2->GetDataPtr(); - - // compute total probability - float totalProb = ComputeTotalProbability (seq1Length, seq2Length, - forward, backward); - - // initialize expected counts - VVF *countsPtr = new VVF(NumMatrixTypes + 1, VF(NumMatrixTypes, LOG_ZERO)); assert (countsPtr); - VVF &counts = *countsPtr; - - // remember offset for each index combination - int ij = 0; - int i1j = -seq2Length - 1; - int ij1 = -1; - int i1j1 = -seq2Length - 2; - - ij *= NumMatrixTypes; - i1j *= NumMatrixTypes; - ij1 *= NumMatrixTypes; - i1j1 *= NumMatrixTypes; - - // compute expected counts - for (int i = 0; i <= seq1Length; i++){ - unsigned char c1 = (i == 0) ? '~' : (unsigned char) iter1[i]; - for (int j = 0; j <= seq2Length; j++){ - unsigned char c2 = (j == 0) ? '~' : (unsigned char) iter2[j]; - - if (i > 0 && j > 0){ - for (int k = 0; k < NumMatrixTypes; k++) - LOG_PLUS_EQUALS (counts[k][0], - forward[k + i1j1] + transProb[k][0] + - matchProb[c1][c2] + backward[0 + ij]); - } - if (i > 0){ - for (int k = 0; k < NumInsertStates; k++){ - LOG_PLUS_EQUALS (counts[0][2*k+1], - forward[0 + i1j] + transProb[0][2*k+1] + - insProb[c1][k] + backward[2*k+1 + ij]); - LOG_PLUS_EQUALS (counts[2*k+1][2*k+1], - forward[2*k+1 + i1j] + transProb[2*k+1][2*k+1] + - insProb[c1][k] + backward[2*k+1 + ij]); - } - } - if (j > 0){ - for (int k = 0; k < NumInsertStates; k++){ - LOG_PLUS_EQUALS (counts[0][2*k+2], - forward[0 + ij1] + transProb[0][2*k+2] + - insProb[c2][k] + backward[2*k+2 + ij]); - LOG_PLUS_EQUALS (counts[2*k+2][2*k+2], - forward[2*k+2 + ij1] + transProb[2*k+2][2*k+2] + - insProb[c2][k] + backward[2*k+2 + ij]); - } - } - - ij += NumMatrixTypes; - i1j += NumMatrixTypes; - ij1 += NumMatrixTypes; - i1j1 += NumMatrixTypes; - } - } - - // scale all expected counts appropriately - for (int i = 0; i < NumMatrixTypes; i++) - for (int j = 0; j < NumMatrixTypes; j++) - counts[i][j] -= totalProb; - - } - */ - - ///////////////////////////////////////////////////////////////// - // ProbabilisticModel::ComputeNewParameters() - // - // Computes a new parameter set based on the expected counts - // given. - ///////////////////////////////////////////////////////////////// - - void ComputeNewParameters (Sequence *seq1, Sequence *seq2, - const VF &forward, const VF &backward, - VF &initDistribMat, VF &gapOpen, - VF &gapExtend, VVF &emitPairs, VF &emitSingle, bool enableTrainEmissions) const { - - assert (seq1); - assert (seq2); - - const int seq1Length = seq1->GetLength(); - const int seq2Length = seq2->GetLength(); - SafeVector::iterator iter1 = seq1->GetDataPtr(); - SafeVector::iterator iter2 = seq2->GetDataPtr(); - - // compute total probability - float totalProb = ComputeTotalProbability (seq1Length, seq2Length, - forward, backward); - - // initialize expected counts - VVF transCounts (NumMatrixTypes, VF (NumMatrixTypes, LOG_ZERO)); - VF initCounts (NumMatrixTypes, LOG_ZERO); - VVF pairCounts (256, VF (256, LOG_ZERO)); - VF singleCounts (256, LOG_ZERO); - - // remember offset for each index combination - int ij = 0; - int i1j = -seq2Length - 1; - int ij1 = -1; - int i1j1 = -seq2Length - 2; - - ij *= NumMatrixTypes; - i1j *= NumMatrixTypes; - ij1 *= NumMatrixTypes; - i1j1 *= NumMatrixTypes; - - // compute initial distribution posteriors - initCounts[0] = LOG_ADD (forward[0 + NumMatrixTypes * (1 * (seq2Length+1) + 1)] + - backward[0 + NumMatrixTypes * (1 * (seq2Length+1) + 1)], - forward[0 + NumMatrixTypes * ((seq1Length+1) * (seq2Length+1) - 1)] + - backward[0 + NumMatrixTypes * ((seq1Length+1) * (seq2Length+1) - 1)]); - for (int k = 0; k < NumInsertStates; k++){ - initCounts[2*k+1] = LOG_ADD (forward[2*k+1 + NumMatrixTypes * (1 * (seq2Length+1) + 0)] + - backward[2*k+1 + NumMatrixTypes * (1 * (seq2Length+1) + 0)], - forward[2*k+1 + NumMatrixTypes * ((seq1Length+1) * (seq2Length+1) - 1)] + - backward[2*k+1 + NumMatrixTypes * ((seq1Length+1) * (seq2Length+1) - 1)]); - initCounts[2*k+2] = LOG_ADD (forward[2*k+2 + NumMatrixTypes * (0 * (seq2Length+1) + 1)] + - backward[2*k+2 + NumMatrixTypes * (0 * (seq2Length+1) + 1)], - forward[2*k+2 + NumMatrixTypes * ((seq1Length+1) * (seq2Length+1) - 1)] + - backward[2*k+2 + NumMatrixTypes * ((seq1Length+1) * (seq2Length+1) - 1)]); - } - - // compute expected counts - for (int i = 0; i <= seq1Length; i++){ - unsigned char c1 = (i == 0) ? '~' : (unsigned char) toupper(iter1[i]); - for (int j = 0; j <= seq2Length; j++){ - unsigned char c2 = (j == 0) ? '~' : (unsigned char) toupper(iter2[j]); - - if (i > 0 && j > 0){ - if (enableTrainEmissions && i == 1 && j == 1){ - LOG_PLUS_EQUALS (pairCounts[c1][c2], - initialDistribution[0] + matchProb[c1][c2] + backward[0 + ij]); - LOG_PLUS_EQUALS (pairCounts[c2][c1], - initialDistribution[0] + matchProb[c2][c1] + backward[0 + ij]); - } - - for (int k = 0; k < NumMatrixTypes; k++){ - LOG_PLUS_EQUALS (transCounts[k][0], - forward[k + i1j1] + transProb[k][0] + - matchProb[c1][c2] + backward[0 + ij]); - if (enableTrainEmissions && i != 1 || j != 1){ - LOG_PLUS_EQUALS (pairCounts[c1][c2], - forward[k + i1j1] + transProb[k][0] + - matchProb[c1][c2] + backward[0 + ij]); - LOG_PLUS_EQUALS (pairCounts[c2][c1], - forward[k + i1j1] + transProb[k][0] + - matchProb[c2][c1] + backward[0 + ij]); - } - } - } - if (i > 0){ - for (int k = 0; k < NumInsertStates; k++){ - LOG_PLUS_EQUALS (transCounts[0][2*k+1], - forward[0 + i1j] + transProb[0][2*k+1] + - insProb[c1][k] + backward[2*k+1 + ij]); - LOG_PLUS_EQUALS (transCounts[2*k+1][2*k+1], - forward[2*k+1 + i1j] + transProb[2*k+1][2*k+1] + - insProb[c1][k] + backward[2*k+1 + ij]); - if (enableTrainEmissions){ - if (i == 1 && j == 0){ - LOG_PLUS_EQUALS (singleCounts[c1], - initialDistribution[2*k+1] + insProb[c1][k] + backward[2*k+1 + ij]); - } - else { - LOG_PLUS_EQUALS (singleCounts[c1], - forward[0 + i1j] + transProb[0][2*k+1] + - insProb[c1][k] + backward[2*k+1 + ij]); - LOG_PLUS_EQUALS (singleCounts[c1], - forward[2*k+1 + i1j] + transProb[2*k+1][2*k+1] + - insProb[c1][k] + backward[2*k+1 + ij]); - } - } - } - } - if (j > 0){ - for (int k = 0; k < NumInsertStates; k++){ - LOG_PLUS_EQUALS (transCounts[0][2*k+2], - forward[0 + ij1] + transProb[0][2*k+2] + - insProb[c2][k] + backward[2*k+2 + ij]); - LOG_PLUS_EQUALS (transCounts[2*k+2][2*k+2], - forward[2*k+2 + ij1] + transProb[2*k+2][2*k+2] + - insProb[c2][k] + backward[2*k+2 + ij]); - if (enableTrainEmissions){ - if (i == 0 && j == 1){ - LOG_PLUS_EQUALS (singleCounts[c2], - initialDistribution[2*k+2] + insProb[c2][k] + backward[2*k+2 + ij]); - } - else { - LOG_PLUS_EQUALS (singleCounts[c2], - forward[0 + ij1] + transProb[0][2*k+2] + - insProb[c2][k] + backward[2*k+2 + ij]); - LOG_PLUS_EQUALS (singleCounts[c2], - forward[2*k+2 + ij1] + transProb[2*k+2][2*k+2] + - insProb[c2][k] + backward[2*k+2 + ij]); - } - } - } - } - - ij += NumMatrixTypes; - i1j += NumMatrixTypes; - ij1 += NumMatrixTypes; - i1j1 += NumMatrixTypes; - } - } - - // scale all expected counts appropriately - for (int i = 0; i < NumMatrixTypes; i++){ - initCounts[i] -= totalProb; - for (int j = 0; j < NumMatrixTypes; j++) - transCounts[i][j] -= totalProb; - } - if (enableTrainEmissions){ - for (int i = 0; i < 256; i++){ - for (int j = 0; j < 256; j++) - pairCounts[i][j] -= totalProb; - singleCounts[i] -= totalProb; - } - } - - // compute new initial distribution - float totalInitDistribCounts = 0; - for (int i = 0; i < NumMatrixTypes; i++) - totalInitDistribCounts += exp (initCounts[i]); // should be 2 - initDistribMat[0] = min (1.0f, max (0.0f, (float) exp (initCounts[0]) / totalInitDistribCounts)); - for (int k = 0; k < NumInsertStates; k++){ - float val = (exp (initCounts[2*k+1]) + exp (initCounts[2*k+2])) / 2; - initDistribMat[2*k+1] = initDistribMat[2*k+2] = min (1.0f, max (0.0f, val / totalInitDistribCounts)); - } - - // compute total counts for match state - float inMatchStateCounts = 0; - for (int i = 0; i < NumMatrixTypes; i++) - inMatchStateCounts += exp (transCounts[0][i]); - for (int i = 0; i < NumInsertStates; i++){ - - // compute total counts for gap state - float inGapStateCounts = - exp (transCounts[2*i+1][0]) + - exp (transCounts[2*i+1][2*i+1]) + - exp (transCounts[2*i+2][0]) + - exp (transCounts[2*i+2][2*i+2]); - - gapOpen[2*i] = gapOpen[2*i+1] = - (exp (transCounts[0][2*i+1]) + - exp (transCounts[0][2*i+2])) / - (2 * inMatchStateCounts); - - gapExtend[2*i] = gapExtend[2*i+1] = - (exp (transCounts[2*i+1][2*i+1]) + - exp (transCounts[2*i+2][2*i+2])) / - inGapStateCounts; - } - - if (enableTrainEmissions){ - float totalPairCounts = 0; - float totalSingleCounts = 0; - for (int i = 0; i < 256; i++){ - for (int j = 0; j <= i; j++) - totalPairCounts += exp (pairCounts[j][i]); - totalSingleCounts += exp (singleCounts[i]); - } - - for (int i = 0; i < 256; i++) if (!islower ((char) i)){ - int li = (int)((unsigned char) tolower ((char) i)); - for (int j = 0; j <= i; j++) if (!islower ((char) j)){ - int lj = (int)((unsigned char) tolower ((char) j)); - emitPairs[i][j] = emitPairs[i][lj] = emitPairs[li][j] = emitPairs[li][lj] = - emitPairs[j][i] = emitPairs[j][li] = emitPairs[lj][i] = emitPairs[lj][li] = exp(pairCounts[j][i]) / totalPairCounts; - } - emitSingle[i] = emitSingle[li] = exp(singleCounts[i]) / totalSingleCounts; - } - } - } - - ///////////////////////////////////////////////////////////////// - // ProbabilisticModel::ComputeAlignment() - // - // Computes an alignment based on the given posterior matrix. - // This is done by finding the maximum summing path (or - // maximum weight trace) through the posterior matrix. The - // final alignment is returned as a pair consisting of: - // (1) a string (e.g., XXXBBXXXBBBBBBYYYYBBB) where X's and - // denote insertions in one of the two sequences and - // B's denote that both sequences are present (i.e. - // matches). - // (2) a float indicating the sum achieved - ///////////////////////////////////////////////////////////////// - - pair *, float> ComputeAlignment (int seq1Length, int seq2Length, const VF &posterior) const { - - float *twoRows = new float[(seq2Length+1)*2]; assert (twoRows); - float *oldRow = twoRows; - float *newRow = twoRows + seq2Length + 1; - - char *tracebackMatrix = new char[(seq1Length+1)*(seq2Length+1)]; assert (tracebackMatrix); - char *tracebackPtr = tracebackMatrix; - - VF::const_iterator posteriorPtr = posterior.begin() + seq2Length + 1; - - // initialization - for (int i = 0; i <= seq2Length; i++){ - oldRow[i] = 0; - *(tracebackPtr++) = 'L'; - } - - // fill in matrix - for (int i = 1; i <= seq1Length; i++){ - - // initialize left column - newRow[0] = 0; - posteriorPtr++; - *(tracebackPtr++) = 'U'; - - // fill in rest of row - for (int j = 1; j <= seq2Length; j++){ - ChooseBestOfThree (*(posteriorPtr++) + oldRow[j-1], newRow[j-1], oldRow[j], - 'D', 'L', 'U', &newRow[j], tracebackPtr++); // Match, insert, delete - } - - // swap rows - float *temp = oldRow; - oldRow = newRow; - newRow = temp; - } - - // store best score - float total = oldRow[seq2Length]; - delete [] twoRows; - - // compute traceback - SafeVector *alignment = new SafeVector; assert (alignment); - int r = seq1Length, c = seq2Length; - while (r != 0 || c != 0){ - char ch = tracebackMatrix[r*(seq2Length+1) + c]; - switch (ch){ - case 'L': c--; alignment->push_back ('Y'); break; - case 'U': r--; alignment->push_back ('X'); break; - case 'D': c--; r--; alignment->push_back ('B'); break; - default: assert (false); - } - } - - delete [] tracebackMatrix; - - reverse (alignment->begin(), alignment->end()); - - return make_pair(alignment, total); - } - - ///////////////////////////////////////////////////////////////// - // ProbabilisticModel::ComputeAlignment2() - // - // Computes an alignment based on the given posterior matrix. - // This is done by finding the maximum summing path (or - // maximum weight trace) through the posterior matrix. The - // final alignment is returned as a pair consisting of: - // (1) a string (e.g., XXXBBXXXBBBBBBYYYYBBB) where X's and - // denote insertions in one of the two sequences and - // B's denote that both sequences are present (i.e. - // matches). - // (2) a float indicating the sum achieved - ///////////////////////////////////////////////////////////////// - - pair *, float> ComputeAlignment2 (int seq1Length, int seq2Length, - const VF &posterior, std::vector *pscs1, std::vector *pscs2, - std::vector *matchPSCS1, std::vector *matchPSCS2) const { - NRMat WM(seq1Length + 1, seq2Length + 1); - for (int i = 0; i <= seq1Length; i++) { - for (int j = 0; j <= seq2Length; j++) { - WM[i][j] = 0; - } - } - - int len = WORDLENGTH; - int size = matchPSCS1->size(); - float weight = 1000; - - for(int iter = 0; iter < size; iter++) { - int i = matchPSCS1->at(iter); - int j = matchPSCS2->at(iter); - - const StemCandidate &sc1 = pscs1->at(i); - const StemCandidate &sc2 = pscs2->at(j); - for(int k = 0; k < len; k++) { - WM[sc1.GetPosition() + k][sc2.GetPosition() + k] += weight; - } - } - float *twoRows = new float[(seq2Length+1)*2]; assert (twoRows); - float *oldRow = twoRows; - float *newRow = twoRows + seq2Length + 1; - - char *tracebackMatrix = new char[(seq1Length+1)*(seq2Length+1)]; assert (tracebackMatrix); - char *tracebackPtr = tracebackMatrix; - - VF::const_iterator posteriorPtr = posterior.begin() + seq2Length + 1; - - // initialization - for (int i = 0; i <= seq2Length; i++){ - oldRow[i] = 0; - *(tracebackPtr++) = 'L'; - } - - // fill in matrix - for (int i = 1; i <= seq1Length; i++){ - - // initialize left column - newRow[0] = 0; - posteriorPtr++; - *(tracebackPtr++) = 'U'; - - // fill in rest of row - for (int j = 1; j <= seq2Length; j++){ - ChooseBestOfThree (*(posteriorPtr++) + oldRow[j-1] + WM[i][j], newRow[j-1], oldRow[j], - 'D', 'L', 'U', &newRow[j], tracebackPtr++); - } - - // swap rows - float *temp = oldRow; - oldRow = newRow; - newRow = temp; - } - - // store best score - float total = oldRow[seq2Length]; - delete [] twoRows; - - // compute traceback - SafeVector *alignment = new SafeVector; assert (alignment); - int r = seq1Length, c = seq2Length; - while (r != 0 || c != 0){ - char ch = tracebackMatrix[r*(seq2Length+1) + c]; - switch (ch){ - case 'L': c--; alignment->push_back ('Y'); break; - case 'U': r--; alignment->push_back ('X'); break; - case 'D': c--; r--; alignment->push_back ('B'); break; - default: assert (false); - } - } - - delete [] tracebackMatrix; - - reverse (alignment->begin(), alignment->end()); - - return make_pair(alignment, total); - } - - ///////////////////////////////////////////////////////////////// - // ProbabilisticModel::ComputeAlignmentWithGapPenalties() - // - // Similar to ComputeAlignment() except with gap penalties. - ///////////////////////////////////////////////////////////////// - - pair *, float> ComputeAlignmentWithGapPenalties (MultiSequence *align1, - MultiSequence *align2, - const VF &posterior, int numSeqs1, - int numSeqs2, - float gapOpenPenalty, - float gapContinuePenalty) const { - int seq1Length = align1->GetSequence(0)->GetLength(); - int seq2Length = align2->GetSequence(0)->GetLength(); - SafeVector::iterator > dataPtrs1 (align1->GetNumSequences()); - SafeVector::iterator > dataPtrs2 (align2->GetNumSequences()); - - // grab character data - for (int i = 0; i < align1->GetNumSequences(); i++) - dataPtrs1[i] = align1->GetSequence(i)->GetDataPtr(); - for (int i = 0; i < align2->GetNumSequences(); i++) - dataPtrs2[i] = align2->GetSequence(i)->GetDataPtr(); - - // the number of active sequences at any given column is defined to be the - // number of non-gap characters in that column; the number of gap opens at - // any given column is defined to be the number of gap characters in that - // column where the previous character in the respective sequence was not - // a gap - SafeVector numActive1 (seq1Length+1), numGapOpens1 (seq1Length+1); - SafeVector numActive2 (seq2Length+1), numGapOpens2 (seq2Length+1); - - // compute number of active sequences and gap opens for each group - for (int i = 0; i < align1->GetNumSequences(); i++){ - SafeVector::iterator dataPtr = align1->GetSequence(i)->GetDataPtr(); - numActive1[0] = numGapOpens1[0] = 0; - for (int j = 1; j <= seq1Length; j++){ - if (dataPtr[j] != '-'){ - numActive1[j]++; - numGapOpens1[j] += (j != 1 && dataPtr[j-1] != '-'); - } - } - } - for (int i = 0; i < align2->GetNumSequences(); i++){ - SafeVector::iterator dataPtr = align2->GetSequence(i)->GetDataPtr(); - numActive2[0] = numGapOpens2[0] = 0; - for (int j = 1; j <= seq2Length; j++){ - if (dataPtr[j] != '-'){ - numActive2[j]++; - numGapOpens2[j] += (j != 1 && dataPtr[j-1] != '-'); - } - } - } - - VVF openingPenalty1 (numSeqs1+1, VF (numSeqs2+1)); - VF continuingPenalty1 (numSeqs1+1); - VVF openingPenalty2 (numSeqs1+1, VF (numSeqs2+1)); - VF continuingPenalty2 (numSeqs2+1); - - // precompute penalties - for (int i = 0; i <= numSeqs1; i++) - for (int j = 0; j <= numSeqs2; j++) - openingPenalty1[i][j] = i * (gapOpenPenalty * j + gapContinuePenalty * (numSeqs2 - j)); - for (int i = 0; i <= numSeqs1; i++) - continuingPenalty1[i] = i * gapContinuePenalty * numSeqs2; - for (int i = 0; i <= numSeqs2; i++) - for (int j = 0; j <= numSeqs1; j++) - openingPenalty2[i][j] = i * (gapOpenPenalty * j + gapContinuePenalty * (numSeqs1 - j)); - for (int i = 0; i <= numSeqs2; i++) - continuingPenalty2[i] = i * gapContinuePenalty * numSeqs1; - - float *twoRows = new float[6*(seq2Length+1)]; assert (twoRows); - float *oldRowMatch = twoRows; - float *newRowMatch = twoRows + (seq2Length+1); - float *oldRowInsertX = twoRows + 2*(seq2Length+1); - float *newRowInsertX = twoRows + 3*(seq2Length+1); - float *oldRowInsertY = twoRows + 4*(seq2Length+1); - float *newRowInsertY = twoRows + 5*(seq2Length+1); - - char *tracebackMatrix = new char[3*(seq1Length+1)*(seq2Length+1)]; assert (tracebackMatrix); - char *tracebackPtr = tracebackMatrix; - - VF::const_iterator posteriorPtr = posterior.begin() + seq2Length + 1; - - // initialization - for (int i = 0; i <= seq2Length; i++){ - oldRowMatch[i] = oldRowInsertX[i] = (i == 0) ? 0 : LOG_ZERO; - oldRowInsertY[i] = (i == 0) ? 0 : oldRowInsertY[i-1] + continuingPenalty2[numActive2[i]]; - *(tracebackPtr) = *(tracebackPtr+1) = *(tracebackPtr+2) = 'Y'; - tracebackPtr += 3; - } - - // fill in matrix - for (int i = 1; i <= seq1Length; i++){ - - // initialize left column - newRowMatch[0] = newRowInsertY[0] = LOG_ZERO; - newRowInsertX[0] = oldRowInsertX[0] + continuingPenalty1[numActive1[i]]; - posteriorPtr++; - *(tracebackPtr) = *(tracebackPtr+1) = *(tracebackPtr+2) = 'X'; - tracebackPtr += 3; - - // fill in rest of row - for (int j = 1; j <= seq2Length; j++){ - - // going to MATCH state - ChooseBestOfThree (oldRowMatch[j-1], - oldRowInsertX[j-1], - oldRowInsertY[j-1], - 'M', 'X', 'Y', &newRowMatch[j], tracebackPtr++); - newRowMatch[j] += *(posteriorPtr++); - - // going to INSERT X state - ChooseBestOfThree (oldRowMatch[j] + openingPenalty1[numActive1[i]][numGapOpens2[j]], - oldRowInsertX[j] + continuingPenalty1[numActive1[i]], - oldRowInsertY[j] + openingPenalty1[numActive1[i]][numGapOpens2[j]], - 'M', 'X', 'Y', &newRowInsertX[j], tracebackPtr++); - - // going to INSERT Y state - ChooseBestOfThree (newRowMatch[j-1] + openingPenalty2[numActive2[j]][numGapOpens1[i]], - newRowInsertX[j-1] + openingPenalty2[numActive2[j]][numGapOpens1[i]], - newRowInsertY[j-1] + continuingPenalty2[numActive2[j]], - 'M', 'X', 'Y', &newRowInsertY[j], tracebackPtr++); - } - - // swap rows - float *temp; - temp = oldRowMatch; oldRowMatch = newRowMatch; newRowMatch = temp; - temp = oldRowInsertX; oldRowInsertX = newRowInsertX; newRowInsertX = temp; - temp = oldRowInsertY; oldRowInsertY = newRowInsertY; newRowInsertY = temp; - } - - // store best score - float total; - char matrix; - ChooseBestOfThree (oldRowMatch[seq2Length], oldRowInsertX[seq2Length], oldRowInsertY[seq2Length], - 'M', 'X', 'Y', &total, &matrix); - - delete [] twoRows; - - // compute traceback - SafeVector *alignment = new SafeVector; assert (alignment); - int r = seq1Length, c = seq2Length; - while (r != 0 || c != 0){ - - int offset = (matrix == 'M') ? 0 : (matrix == 'X') ? 1 : 2; - char ch = tracebackMatrix[(r*(seq2Length+1) + c) * 3 + offset]; - switch (matrix){ - case 'Y': c--; alignment->push_back ('Y'); break; - case 'X': r--; alignment->push_back ('X'); break; - case 'M': c--; r--; alignment->push_back ('B'); break; - default: assert (false); - } - matrix = ch; - } - - delete [] tracebackMatrix; - - reverse (alignment->begin(), alignment->end()); - - return make_pair(alignment, 1.0f); - } - - - ///////////////////////////////////////////////////////////////// - // ProbabilisticModel::ComputeViterbiAlignment() - // - // Computes the highest probability pairwise alignment using the - // probabilistic model. The final alignment is returned as a - // pair consisting of: - // (1) a string (e.g., XXXBBXXXBBBBBBYYYYBBB) where X's and - // denote insertions in one of the two sequences and - // B's denote that both sequences are present (i.e. - // matches). - // (2) a float containing the log probability of the best - // alignment (not used) - ///////////////////////////////////////////////////////////////// - - pair *, float> ComputeViterbiAlignment (Sequence *seq1, Sequence *seq2) const { - - assert (seq1); - assert (seq2); - - const int seq1Length = seq1->GetLength(); - const int seq2Length = seq2->GetLength(); - - // retrieve the points to the beginning of each sequence - SafeVector::iterator iter1 = seq1->GetDataPtr(); - SafeVector::iterator iter2 = seq2->GetDataPtr(); - - // create viterbi matrix - VF *viterbiPtr = new VF (NumMatrixTypes * (seq1Length+1) * (seq2Length+1), LOG_ZERO); - assert (viterbiPtr); - VF &viterbi = *viterbiPtr; - - // create traceback matrix - VI *tracebackPtr = new VI (NumMatrixTypes * (seq1Length+1) * (seq2Length+1), -1); - assert (tracebackPtr); - VI &traceback = *tracebackPtr; - - // initialization condition - for (int k = 0; k < NumMatrixTypes; k++) - viterbi[k] = initialDistribution[k]; - - // remember offset for each index combination - int ij = 0; - int i1j = -seq2Length - 1; - int ij1 = -1; - int i1j1 = -seq2Length - 2; - - ij *= NumMatrixTypes; - i1j *= NumMatrixTypes; - ij1 *= NumMatrixTypes; - i1j1 *= NumMatrixTypes; - - // compute viterbi scores - for (int i = 0; i <= seq1Length; i++){ - unsigned char c1 = (i == 0) ? '~' : (unsigned char) iter1[i]; - for (int j = 0; j <= seq2Length; j++){ - unsigned char c2 = (j == 0) ? '~' : (unsigned char) iter2[j]; - - if (i > 0 && j > 0){ - for (int k = 0; k < NumMatrixTypes; k++){ - float newVal = viterbi[k + i1j1] + transProb[k][0] + matchProb[c1][c2]; - if (viterbi[0 + ij] < newVal){ - viterbi[0 + ij] = newVal; - traceback[0 + ij] = k; - } - } - } - if (i > 0){ - for (int k = 0; k < NumInsertStates; k++){ - float valFromMatch = insProb[c1][k] + viterbi[0 + i1j] + transProb[0][2*k+1]; - float valFromIns = insProb[c1][k] + viterbi[2*k+1 + i1j] + transProb[2*k+1][2*k+1]; - if (valFromMatch >= valFromIns){ - viterbi[2*k+1 + ij] = valFromMatch; - traceback[2*k+1 + ij] = 0; - } - else { - viterbi[2*k+1 + ij] = valFromIns; - traceback[2*k+1 + ij] = 2*k+1; - } - } - } - if (j > 0){ - for (int k = 0; k < NumInsertStates; k++){ - float valFromMatch = insProb[c2][k] + viterbi[0 + ij1] + transProb[0][2*k+2]; - float valFromIns = insProb[c2][k] + viterbi[2*k+2 + ij1] + transProb[2*k+2][2*k+2]; - if (valFromMatch >= valFromIns){ - viterbi[2*k+2 + ij] = valFromMatch; - traceback[2*k+2 + ij] = 0; - } - else { - viterbi[2*k+2 + ij] = valFromIns; - traceback[2*k+2 + ij] = 2*k+2; - } - } - } - - ij += NumMatrixTypes; - i1j += NumMatrixTypes; - ij1 += NumMatrixTypes; - i1j1 += NumMatrixTypes; - } - } - - // figure out best terminating cell - float bestProb = LOG_ZERO; - int state = -1; - for (int k = 0; k < NumMatrixTypes; k++){ - float thisProb = viterbi[k + NumMatrixTypes * ((seq1Length+1)*(seq2Length+1) - 1)] + initialDistribution[k]; - if (bestProb < thisProb){ - bestProb = thisProb; - state = k; - } - } - assert (state != -1); - - delete viterbiPtr; - - // compute traceback - SafeVector *alignment = new SafeVector; assert (alignment); - int r = seq1Length, c = seq2Length; - while (r != 0 || c != 0){ - int newState = traceback[state + NumMatrixTypes * (r * (seq2Length+1) + c)]; - - if (state == 0){ c--; r--; alignment->push_back ('B'); } - else if (state % 2 == 1){ r--; alignment->push_back ('X'); } - else { c--; alignment->push_back ('Y'); } - - state = newState; - } - - delete tracebackPtr; - - reverse (alignment->begin(), alignment->end()); - - return make_pair(alignment, bestProb); - } - - ///////////////////////////////////////////////////////////////// - // ProbabilisticModel::BuildPosterior() - // - // Builds a posterior probability matrix needed to align a pair - // of alignments. Mathematically, the returned matrix M is - // defined as follows: - // M[i,j] = sum sum f(s,t,i,j) - // s in align1 t in align2 - // where - // [ P(s[i'] <--> t[j']) - // [ if s[i'] is a letter in the ith column of align1 and - // [ t[j'] it a letter in the jth column of align2 - // f(s,t,i,j) = [ - // [ 0 otherwise - // - ///////////////////////////////////////////////////////////////// - - VF *BuildPosterior (MultiSequence *align1, MultiSequence *align2, - const SafeVector > &sparseMatrices, - float cutoff = 0.0f) const { - const int seq1Length = align1->GetSequence(0)->GetLength(); - const int seq2Length = align2->GetSequence(0)->GetLength(); - - VF *posteriorPtr = new VF((seq1Length+1) * (seq2Length+1), 0); assert (posteriorPtr); - VF &posterior = *posteriorPtr; - VF::iterator postPtr = posterior.begin(); - - // for each s in align1 - for (int i = 0; i < align1->GetNumSequences(); i++){ - int first = align1->GetSequence(i)->GetLabel(); - SafeVector *mapping1 = align1->GetSequence(i)->GetMapping(); - - // for each t in align2 - for (int j = 0; j < align2->GetNumSequences(); j++){ - int second = align2->GetSequence(j)->GetLabel(); - SafeVector *mapping2 = align2->GetSequence(j)->GetMapping(); - if (first < second){ - - // get the associated sparse matrix - SparseMatrix *matrix = sparseMatrices[first][second]; - - for (int ii = 1; ii <= matrix->GetSeq1Length(); ii++){ - SafeVector::iterator row = matrix->GetRowPtr(ii); - int base = (*mapping1)[ii] * (seq2Length+1); - int rowSize = matrix->GetRowSize(ii); - // add in all relevant values - for (int jj = 0; jj < rowSize; jj++) - posterior[base + (*mapping2)[row[jj].first]] += row[jj].second; - - // subtract cutoff - for (int jj = 0; jj < matrix->GetSeq2Length(); jj++) { - posterior[base + (*mapping2)[jj]] -= cutoff; - } - - } - - } else { - // get the associated sparse matrix - SparseMatrix *matrix = sparseMatrices[second][first]; - - for (int jj = 1; jj <= matrix->GetSeq1Length(); jj++){ - SafeVector::iterator row = matrix->GetRowPtr(jj); - int base = (*mapping2)[jj]; - int rowSize = matrix->GetRowSize(jj); - - // add in all relevant values - for (int ii = 0; ii < rowSize; ii++) - posterior[base + (*mapping1)[row[ii].first] * (seq2Length + 1)] += row[ii].second; - - // subtract cutoff - for (int ii = 0; ii < matrix->GetSeq2Length(); ii++) - posterior[base + (*mapping1)[ii] * (seq2Length + 1)] -= cutoff; - } - - } - - - delete mapping2; - } - - delete mapping1; - } - - return posteriorPtr; - } -}; -} -#endif diff --git a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/ProjectPairwise.cc b/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/ProjectPairwise.cc deleted file mode 100644 index 4696ba1..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/ProjectPairwise.cc +++ /dev/null @@ -1,71 +0,0 @@ -///////////////////////////////////////////////////////////////// -// ProjectPairwise -// -// Program for projecting multiple alignments to all pairwise -// alignments. -///////////////////////////////////////////////////////////////// - -#include "SafeVector.h" -#include "MultiSequence.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -bool compressGaps = true; - -///////////////////////////////////////////////////////////////// -// main() -// -// Main program. -///////////////////////////////////////////////////////////////// - -int main (int argc, char **argv){ - - // check arguments - if (argc < 2){ - cerr << "Usage: project ALIGNMENT [-nocompressgaps]" << endl; - exit (1); - } - - for (int i = 2; i < argc; i++){ - if (strcmp (argv[i], "-nocompressgaps") == 0) - compressGaps = false; - else { - cerr << "Unrecognized option: " << argv[i] << endl; - exit (1); - } - } - - MultiSequence *align = new MultiSequence (string (argv[1])); assert (align); - - int N = align->GetNumSequences(); - for (int i = 0; i < N; i++){ - for (int j = i+1; j < N; j++){ - string name = align->GetSequence(i)->GetHeader() + "-" + align->GetSequence(j)->GetHeader() + ".fasta"; - ofstream outfile (name.c_str()); - - if (compressGaps){ - set s; - s.insert (i); s.insert (j); - MultiSequence *proj = align->Project (s); - proj->WriteMFA (outfile); - delete proj; - } - else { - align->GetSequence(i)->WriteMFA (outfile, 60); - align->GetSequence(j)->WriteMFA (outfile, 60); - } - outfile.close(); - } - } - - delete align; -} diff --git a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/README b/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/README deleted file mode 100644 index 57087e1..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/README +++ /dev/null @@ -1,107 +0,0 @@ - - PROBCONS - ~~~~~~~~ - - Probabilistic consistency-based multiple sequence alignment - ------------------------------------------------------------------ - -PROBCONS is a novel tool for generating multiple alignments -of protein sequences. Using a combination of probabilistic -modeling and consistency-based alignment techniques, PROBCONS -has achieved the highest accuracy of all alignment methods to -date. - -PROBCONS was developed by Chuong B. Do in collaboration with -Michael Brudno in the research group of Serafim Batzoglou, -Department of Computer Science, Stanford University. - -For more information on the algorithms, please see - - Do, C.B., Brudno, M., and Batzoglou, S. (2004) PROBCONS: - Probabilistic Consistency-based Multiple Alignment of - Amino Acid Sequences. 12th International Conference on - Intelligent Systems for Molecular Biology. In press. - -and - - Do, C.B., Brudno, M., and Batzoglou, S. (2004) PROBCONS: - Probabilistic Consistency-based Multiple Alignment of - Amino Acid Sequences. The 19th National Conference on - Artificial Intelligence (AAAI-04). In press. - ------------------------------------------------------------------ - -PROBCONS has been made freely available as PUBLIC DOMAIN -software and hence is not subject to copyright in the United -States. This system and/or any portion of the source code -may be used, modified, or redistributed without restrictions. -PROBCONS is distributed WITHOUT WARRANTY, express or implied. -The authors accept NO LEGAL LIABILITY OR RESPONSIBILITY for -loss due to reliance on the program. - ------------------------------------------------------------------ - -Version History - -1.0, 3/23/2004 (Chuong Do) - -- initial release - -1.01, 3/25/2004 (Chuong Do) - -- fixed error in training procedure - -- retrained default parameters for 1 and 2 pairs of insert - states - -1.02, 4/17/2004 (Chuong Do) - -- replaced LOG_ADD and EXP routines - -- added support for reading MSF format files - -- added two extra utilities for scoring PROBCONS alignments - (for benchmarking purposes) - -- added the "compare" program for scoring alignments - according to a reference alignment with respect to - sum-of-pairs and column scores - -- added the "fixref" program for adjusting PREFAB - alignments to contain all letters of the input - sequences; basically the main program for PROBCONS - "hacked" to get the job done - -1.03, 5/3/2004 (Chuong Do) - -- added option to do all-pairs pairwise alignments instead - of constructing a full multiple alignment - -- added support for reading DIALIGN style files - -- enabled support for using BAliBASE annotations for scoring - BAliBASE alignments - -- several minor bug fixes thanks to Bob Edgar - -- added "project" program to project multiple alignment to - pairwise alignments - -1.04, 5/9/2004 (Chuong Do) - -- switched over to default of one-insert state pair - -- retrained default parameters - -- added annotation scores - -- small changes to model topology to make end gaps symmetrical - -- added makegnuplot utility to plot annotation scores - -1.05, 5/26/2004 (Chuong Do) - -- added cutoff filtering for posterior scores - -- made small corrections to recurrences for computing alignments - -- added CLUSTALW output support - -1.06, 7/13/2004 (Chuong Do) - -- ProbCons is now PUBLIC DOMAIN software. - -1.07, 8/30/2004 (Chuong Do) - -- Fixed CLUSTALW output for sequence names (thanks to John Calley - for pointing this out) - -1.08, 8/31/2004 (Chuong Do) - -- Added option for alignment order output (-a). - -1.09, 9/1/2004 (Chuong Do) - -- PROBCONS now allows input files with existing gaps -- these are - automatically stripped before alignment. - -1.10, 3/16/2005 (Chuong Do) - -- Reduced memory consumption by - -- not storing posterior matrix transposes - -- restricting consistency-derived posterior matrices to original posterior matrix diff --git a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/SafeVector.h b/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/SafeVector.h deleted file mode 100644 index 7220316..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/SafeVector.h +++ /dev/null @@ -1,56 +0,0 @@ -///////////////////////////////////////////////////////////////// -// SafeVector.h -// -// STL vector with array bounds checking. To enable bounds -// checking, #define ENABLE_CHECKS. -///////////////////////////////////////////////////////////////// - -#ifndef SAFEVECTOR_H -#define SAFEVECTOR_H - -#include -#include - -///////////////////////////////////////////////////////////////// -// SafeVector -// -// Class derived from the STL std::vector for bounds checking. -///////////////////////////////////////////////////////////////// -namespace MXSCARNA { -template -class SafeVector : public std::vector{ - public: - - // miscellaneous constructors - SafeVector() : std::vector() {} - SafeVector (size_t size) : std::vector(size) {} - SafeVector (size_t size, const TYPE &value) : std::vector(size, value) {} - SafeVector (const SafeVector &source) : std::vector(source) {} - -#ifdef ENABLE_CHECKS - - // [] array bounds checking - TYPE &operator[](int index){ - assert (index >= 0 && index < (int) size()); - return std::vector::operator[] ((size_t) index); - } - - // [] const array bounds checking - const TYPE &operator[] (int index) const { - assert (index >= 0 && index < (int) size()); - return std::vector::operator[] ((size_t) index) ; - } - -#endif - -}; - -// some commonly used vector types -typedef SafeVector VI; -typedef SafeVector VVI; -typedef SafeVector VVVI; -typedef SafeVector VF; -typedef SafeVector VVF; -typedef SafeVector VVVF; -} -#endif diff --git a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/ScoreType.h b/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/ScoreType.h deleted file mode 100644 index 186d3fd..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/ScoreType.h +++ /dev/null @@ -1,340 +0,0 @@ -///////////////////////////////////////////////////////////////// -// ScoreType.h -// -// Routines for doing math operations in PROBCONS. -///////////////////////////////////////////////////////////////// - -#ifndef SCORETYPE_H -#define SCORETYPE_H - -#include -#include -#include - -typedef float ScoreType; - -const float LOG_ZERO = -2e20; -const float LOG_ONE = 0.0; - -///////////////////////////////////////////////////////////////// -// LOG() -// -// Compute the logarithm of x. -///////////////////////////////////////////////////////////////// - -inline ScoreType LOG (ScoreType x){ - return log (x); -} - -///////////////////////////////////////////////////////////////// -// EXP() -// -// Computes exp(x). -///////////////////////////////////////////////////////////////// - -inline ScoreType EXP (ScoreType x){ - //return exp(x); - if (x > -2){ - if (x > -0.5){ - if (x > 0) - return exp(x); - return (((0.03254409303190190000*x + 0.16280432765779600000)*x + 0.49929760485974900000)*x + 0.99995149601363700000)*x + 0.99999925508501600000; - } - if (x > -1) - return (((0.01973899026052090000*x + 0.13822379685007000000)*x + 0.48056651562365000000)*x + 0.99326940370383500000)*x + 0.99906756856399500000; - return (((0.00940528203591384000*x + 0.09414963667859410000)*x + 0.40825793595877300000)*x + 0.93933625499130400000)*x + 0.98369508190545300000; - } - if (x > -8){ - if (x > -4) - return (((0.00217245711583303000*x + 0.03484829428350620000)*x + 0.22118199801337800000)*x + 0.67049462206469500000)*x + 0.83556950223398500000; - return (((0.00012398771025456900*x + 0.00349155785951272000)*x + 0.03727721426017900000)*x + 0.17974997741536900000)*x + 0.33249299994217400000; - } - if (x > -16) - return (((0.00000051741713416603*x + 0.00002721456879608080)*x + 0.00053418601865636800)*x + 0.00464101989351936000)*x + 0.01507447981459420000; - return 0; -} - -/* -///////////////////////////////////////////////////////////////// -// LOOKUP() -// -// Computes log (exp (x) + 1), for 0 <= x <= 7.5. -///////////////////////////////////////////////////////////////// - -inline ScoreType LOOKUP (ScoreType x){ - //return log (exp(x) + 1); - if (x < 2){ - if (x < 0.5){ - if (x < 0) - return log (exp(x) + 1); - return (((-0.00486373205785640000*x - 0.00020245408813934800)*x + 0.12504222666029800000)*x + 0.49999685320563000000)*x + 0.69314723138948900000; - } - if (x < 1) - return (((-0.00278634205460548000*x - 0.00458097251248546000)*x + 0.12865849880472500000)*x + 0.49862228499205200000)*x + 0.69334810088688000000; - return (((0.00059633755154209200*x - 0.01918996666063320000)*x + 0.15288232492093800000)*x + 0.48039958825756900000)*x + 0.69857578503189200000; - } - if (x < 8){ - if (x < 4) - return (((0.00135958539181047000*x - 0.02329807659316430000)*x + 0.15885799609532100000)*x + 0.48167498563270800000)*x + 0.69276185058669200000; - return (((0.00011992394456683500*x - 0.00338464503306568000)*x + 0.03622746366545470000)*x + 0.82481250248383700000)*x + 0.32507892994863100000; - } - if (x < 16) - return (((0.00000051726300753785*x - 0.00002720671238876090)*x + 0.00053403733818413500)*x + 0.99536021775747900000)*x + 0.01507065715532010000; - return x; -} - -///////////////////////////////////////////////////////////////// -// LOOKUP_SLOW() -// -// Computes log (exp (x) + 1). -///////////////////////////////////////////////////////////////// - -inline ScoreType LOOKUP_SLOW (ScoreType x){ - return log (exp (x) + 1); -} - -///////////////////////////////////////////////////////////////// -// MAX() -// -// Compute max of three numbers -///////////////////////////////////////////////////////////////// - -inline ScoreType MAX (ScoreType x, ScoreType y, ScoreType z){ - if (x >= y){ - if (x >= z) - return x; - return z; - } - if (y >= z) - return y; - return z; -} - -///////////////////////////////////////////////////////////////// -// LOG_PLUS_EQUALS() -// -// Add two log probabilities and store in the first argument -///////////////////////////////////////////////////////////////// - -inline void LOG_PLUS_EQUALS (ScoreType &x, ScoreType y){ - if (x < y) - x = (x <= LOG_ZERO) ? y : LOOKUP(y-x) + x; - else - x = (y <= LOG_ZERO) ? x : LOOKUP(x-y) + y; -} - -///////////////////////////////////////////////////////////////// -// LOG_PLUS_EQUALS_SLOW() -// -// Add two log probabilities and store in the first argument -///////////////////////////////////////////////////////////////// - -inline void LOG_PLUS_EQUALS_SLOW (ScoreType &x, ScoreType y){ - if (x < y) - x = (x <= LOG_ZERO) ? y : LOOKUP_SLOW(y-x) + x; - else - x = (y <= LOG_ZERO) ? x : LOOKUP_SLOW(x-y) + y; -} - -///////////////////////////////////////////////////////////////// -// LOG_ADD() -// -// Add two log probabilities -///////////////////////////////////////////////////////////////// - -inline ScoreType LOG_ADD (ScoreType x, ScoreType y){ - if (x < y) return (x <= LOG_ZERO) ? y : LOOKUP(y-x) + x; - return (y <= LOG_ZERO) ? x : LOOKUP(x-y) + y; -} -*/ - -/* -///////////////////////////////////////////////////////////////// -// LOG() -// -// Compute the logarithm of x. -///////////////////////////////////////////////////////////////// - -inline float LOG (float x){ - return log (x); -} - -///////////////////////////////////////////////////////////////// -// EXP() -// -// Computes exp(x), fr -4.6 <= x <= 0. -///////////////////////////////////////////////////////////////// - -inline float EXP (float x){ - assert (x <= 0.00f); - if (x < EXP_UNDERFLOW_THRESHOLD) return 0.0f; - return (((0.006349841068584 * x + 0.080775412572352) * x + 0.397982026296272) * x + 0.95279335963787f) * x + 0.995176455837312f; - //return (((0.00681169825657f * x + 0.08386267698832f) * x + 0.40413983195844f) * x + 0.95656674979767f) * x + 0.99556744049130f; -} -*/ - -const float EXP_UNDERFLOW_THRESHOLD = -4.6; -const float LOG_UNDERFLOW_THRESHOLD = 7.5; - -///////////////////////////////////////////////////////////////// -// LOOKUP() -// -// Computes log (exp (x) + 1), for 0 <= x <= 7.5. -///////////////////////////////////////////////////////////////// - -inline float LOOKUP (float x){ - assert (x >= 0.00f); - assert (x <= LOG_UNDERFLOW_THRESHOLD); - //return ((-0.00653779113685f * x + 0.09537236626558f) * x + 0.55317574459331f) * x + 0.68672959851568f; - if (x <= 1.00f) return ((-0.009350833524763f * x + 0.130659527668286f) * x + 0.498799810682272f) * x + 0.693203116424741f; - if (x <= 2.50f) return ((-0.014532321752540f * x + 0.139942324101744f) * x + 0.495635523139337f) * x + 0.692140569840976f; - if (x <= 4.50f) return ((-0.004605031767994f * x + 0.063427417320019f) * x + 0.695956496475118f) * x + 0.514272634594009f; - assert (x <= LOG_UNDERFLOW_THRESHOLD); - return ((-0.000458661602210f * x + 0.009695946122598f) * x + 0.930734667215156f) * x + 0.168037164329057f; - - //return (((0.00089738532761f * x - 0.01859488697982f) * x + 0.14415772028626f) * x + 0.49515490689159f) * x + 0.69311928966454f; -} - -///////////////////////////////////////////////////////////////// -// LOOKUP_SLOW() -// -// Computes log (exp (x) + 1). -///////////////////////////////////////////////////////////////// - -inline float LOOKUP_SLOW (float x){ - return log (exp (x) + 1); -} - -///////////////////////////////////////////////////////////////// -// MAX() -// -// Compute max of three numbers -///////////////////////////////////////////////////////////////// - -inline float MAX (float x, float y, float z){ - if (x >= y){ - if (x >= z) - return x; - return z; - } - if (y >= z) - return y; - return z; -} - -///////////////////////////////////////////////////////////////// -// LOG_PLUS_EQUALS() -// -// Add two log probabilities and store in the first argument -///////////////////////////////////////////////////////////////// - -inline void LOG_PLUS_EQUALS (float &x, float y){ - if (x < y) - x = (x == LOG_ZERO || y - x >= LOG_UNDERFLOW_THRESHOLD) ? y : LOOKUP(y-x) + x; - else - x = (y == LOG_ZERO || x - y >= LOG_UNDERFLOW_THRESHOLD) ? x : LOOKUP(x-y) + y; -} - -///////////////////////////////////////////////////////////////// -// LOG_PLUS_EQUALS_SLOW() -// -// Add two log probabilities and store in the first argument -///////////////////////////////////////////////////////////////// - -inline void LOG_PLUS_EQUALS_SLOW (float &x, float y){ - if (x < y) - x = (x == LOG_ZERO) ? y : LOOKUP_SLOW(y-x) + x; - else - x = (y == LOG_ZERO) ? x : LOOKUP_SLOW(x-y) + y; -} - -///////////////////////////////////////////////////////////////// -// LOG_ADD() -// -// Add two log probabilities -///////////////////////////////////////////////////////////////// - -inline float LOG_ADD (float x, float y){ - if (x < y) return (x == LOG_ZERO || y - x >= LOG_UNDERFLOW_THRESHOLD) ? y : LOOKUP(y-x) + x; - return (y == LOG_ZERO || x - y >= LOG_UNDERFLOW_THRESHOLD) ? x : LOOKUP(x-y) + y; -} - - -///////////////////////////////////////////////////////////////// -// LOG_ADD() -// -// Add three log probabilities -///////////////////////////////////////////////////////////////// - -inline float LOG_ADD (float x1, float x2, float x3){ - return LOG_ADD (x1, LOG_ADD (x2, x3)); -} - -///////////////////////////////////////////////////////////////// -// LOG_ADD() -// -// Add four log probabilities -///////////////////////////////////////////////////////////////// - -inline float LOG_ADD (float x1, float x2, float x3, float x4){ - return LOG_ADD (x1, LOG_ADD (x2, LOG_ADD (x3, x4))); -} - -///////////////////////////////////////////////////////////////// -// LOG_ADD() -// -// Add five log probabilities -///////////////////////////////////////////////////////////////// - -inline float LOG_ADD (float x1, float x2, float x3, float x4, float x5){ - return LOG_ADD (x1, LOG_ADD (x2, LOG_ADD (x3, LOG_ADD (x4, x5)))); -} - -///////////////////////////////////////////////////////////////// -// LOG_ADD() -// -// Add siz log probabilities -///////////////////////////////////////////////////////////////// - -inline float LOG_ADD (float x1, float x2, float x3, float x4, float x5, float x6){ - return LOG_ADD (x1, LOG_ADD (x2, LOG_ADD (x3, LOG_ADD (x4, LOG_ADD (x5, x6))))); -} - -///////////////////////////////////////////////////////////////// -// LOG_ADD() -// -// Add seven log probabilities -///////////////////////////////////////////////////////////////// - -inline float LOG_ADD (float x1, float x2, float x3, float x4, float x5, float x6, float x7){ - return LOG_ADD (x1, LOG_ADD (x2, LOG_ADD (x3, LOG_ADD (x4, LOG_ADD (x5, LOG_ADD (x6, x7)))))); -} - -///////////////////////////////////////////////////////////////// -// ChooseBestOfThree() -// -// Store the largest of three values x1, x2, and x3 in *x. Also -// if xi is the largest value, then store bi in *b. -///////////////////////////////////////////////////////////////// - -inline void ChooseBestOfThree (float x1, float x2, float x3, char b1, char b2, char b3, float *x, char *b){ - if (x1 >= x2){ - if (x1 >= x3){ - *x = x1; - *b = b1; - return; - } - *x = x3; - *b = b3; - return; - } - if (x2 >= x3){ - *x = x2; - *b = b2; - return; - } - *x = x3; - *b = b3; -} - -#endif diff --git a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/Sequence.h b/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/Sequence.h deleted file mode 100644 index ffc6ead..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/Sequence.h +++ /dev/null @@ -1,515 +0,0 @@ -///////////////////////////////////////////////////////////////// -// Sequence.h -// -// Class for reading/manipulating single sequence character data. -///////////////////////////////////////////////////////////////// - -#ifndef __SEQUENCE_H__ -#define __SEQUENCE_H__ - -#include -#include -#include -#include -#include -#include "SafeVector.h" -#include "FileBuffer.h" - -///////////////////////////////////////////////////////////////// -// Sequence -// -// Class for storing sequence information. -///////////////////////////////////////////////////////////////// -namespace MXSCARNA { -class Sequence { - - bool isValid; // a boolean indicating whether the sequence data is valid or not - string header; // string containing the comment line of the FASTA file - SafeVector *data; // pointer to character data - int length; // length of the sequence - int sequenceLabel; // integer sequence label, typically to indicate the ordering of sequences - // in a Multi-FASTA file - int inputLabel; // position of sequence in original input - float weight; - - ///////////////////////////////////////////////////////////////// - // Sequence::Sequence() - // - // Default constructor. Does nothing. - ///////////////////////////////////////////////////////////////// - - Sequence () : isValid (false), header (""), data (NULL), length (0), sequenceLabel (0), inputLabel (0) {} - - public: - - ///////////////////////////////////////////////////////////////// - // Sequence::Sequence() - // - // Constructor. Reads the sequence from a FileBuffer. - ///////////////////////////////////////////////////////////////// - - Sequence (FileBuffer &infile, bool stripGaps = false) : isValid (false), header ("~"), data (NULL), length(0), sequenceLabel (0), inputLabel (0) { - - // read until the first non-blank line - while (!infile.eof()){ - infile.GetLine (header); - if (header.length() != 0) break; - } - - // check to make sure that it is a correct header line - if (header[0] == '>'){ - - // if so, remove the leading ">" - header = header.substr (1); - - // remove any leading or trailing white space in the header comment - while (header.length() > 0 && isspace (header[0])) header = header.substr (1); - while (header.length() > 0 && isspace (header[header.length() - 1])) header = header.substr(0, header.length() - 1); - - // get ready to read the data[] array; note that data[0] is always '@' - char ch; - data = new SafeVector; assert (data); - data->push_back ('@'); - - // get a character from the file - while (infile.Get(ch)){ - - // if we've reached a new comment line, put the character back and stop - if (ch == '>'){ infile.UnGet(); break; } - - // skip whitespace - if (isspace (ch)) continue; - - // substitute gap character - if (ch == '.') ch = '-'; - if (stripGaps && ch == '-') continue; - - // check for known characters - if (!((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z') || ch == '*' || ch == '-')){ - cerr << "ERROR: Unknown character encountered: " << ch << endl; - exit (1); - } - - // everything's ok so far, so just store this character. - data->push_back(ch); - ++length; - } - - // sequence must contain data in order to be valid - isValid = length > 0; - if (!isValid){ - delete data; - data = NULL; - } - } - } - - - ///////////////////////////////////////////////////////////////// - // Sequence::Sequence() - // - // Constructor. Builds a sequence from existing data. Note - // that the data must use one-based indexing where data[0] should - // be set to '@'. - ///////////////////////////////////////////////////////////////// - - Sequence (SafeVector *data, string header, int length, int sequenceLabel, int inputLabel) : - isValid (data != NULL), header(header), data(data), length (length), sequenceLabel (sequenceLabel), inputLabel (inputLabel) { - assert (data); - assert ((*data)[0] == '@'); - } - - ///////////////////////////////////////////////////////////////// - // Sequence::Sequence() - // - // Destructor. Release allocated memory. - ///////////////////////////////////////////////////////////////// - - ~Sequence (){ - if (data){ - assert (isValid); - delete data; - data = NULL; - isValid = false; - } - } - - void SetWeight(float myWeight) { - weight = myWeight; - } - float GetWeight() const { - return weight; - } - - ///////////////////////////////////////////////////////////////// - // Sequence::GetHeader() - // - // Return the string comment associated with this sequence. - ///////////////////////////////////////////////////////////////// - - string GetHeader () const { - return header; - } - - ///////////////////////////////////////////////////////////////// - // Sequence::GetName() - // - // Return the first word of the string comment associated with this sequence. - ///////////////////////////////////////////////////////////////// - - string GetName () const { - char name[1024]; - sscanf (header.c_str(), "%s", name); - return string(name); - } - - ///////////////////////////////////////////////////////////////// - // Sequence::GetDataPtr() - // - // Return the iterator to data associated with this sequence. - ///////////////////////////////////////////////////////////////// - - SafeVector::iterator GetDataPtr(){ - assert (isValid); - assert (data); - return data->begin(); - } - - ///////////////////////////////////////////////////////////////// - // Sequence::GetPosition() - // - // Return the character at position i. Recall that the character - // data is stored with one-based indexing. - ///////////////////////////////////////////////////////////////// - - char GetPosition (int i) const { - assert (isValid); - assert (data); - assert (i >= 0 && i <= length); - return (*data)[i]; - } - - ///////////////////////////////////////////////////////////////// - // Sequence::SetLabel() - // - // Sets the sequence label to i. - ///////////////////////////////////////////////////////////////// - - void SetLabel (int i){ - assert (isValid); - sequenceLabel = i; - inputLabel = i; - } - - ///////////////////////////////////////////////////////////////// - // Sequence::SetSortLabel() - // - // Sets the sequence sorting label to i. - ///////////////////////////////////////////////////////////////// - - void SetSortLabel (int i){ - assert (isValid); - sequenceLabel = i; - } - - ///////////////////////////////////////////////////////////////// - // Sequence::GetLabel() - // - // Retrieves the input label. - ///////////////////////////////////////////////////////////////// - - int GetLabel () const { - assert (isValid); - return inputLabel; - } - - ///////////////////////////////////////////////////////////////// - // Sequence::GetSortLabel() - // - // Retrieves the sorting label. - ///////////////////////////////////////////////////////////////// - - int GetSortLabel () const { - assert (isValid); - return sequenceLabel; - } - - ///////////////////////////////////////////////////////////////// - // Sequence::Fail() - // - // Checks to see if the sequence successfully loaded. - ///////////////////////////////////////////////////////////////// - - bool Fail () const { - return !isValid; - } - - ///////////////////////////////////////////////////////////////// - // Sequence::Length() - // - // Returns the length of the sequence. - ///////////////////////////////////////////////////////////////// - - int GetLength () const { - assert (isValid); - assert (data); - return length; - } - - ///////////////////////////////////////////////////////////////// - // Sequence::WriteMFA() - // - // Writes the sequence to outfile in MFA format. Uses numColumns - // columns per line. If useIndex is set to false, then the - // header is printed as normal, but if useIndex is true, then - // ">S###" is printed where ### represents the sequence label. - ///////////////////////////////////////////////////////////////// - - void WriteMFA (ostream &outfile, int numColumns, bool useIndex = false) const { - assert (isValid); - assert (data); - assert (!outfile.fail()); - - // print out heading - if (useIndex) - outfile << ">S" << GetLabel() << endl; - else - outfile << ">" << header << endl; - - // print out character data - int ct = 1; - for (; ct <= length; ct++){ - outfile << (*data)[ct]; - if (ct % numColumns == 0) outfile << endl; - } - if ((ct-1) % numColumns != 0) outfile << endl; - } - - ///////////////////////////////////////////////////////////////// - // Sequence::WriteWEB() - // - // output for web interfase based on Sequence::WriteMFA() - ///////////////////////////////////////////////////////////////// - - void WriteWEB (ostream &outfile, int numColumns, bool useIndex = false) const { - assert (isValid); - assert (data); - assert (!outfile.fail()); - - outfile << "" << endl; - outfile << "" << endl; - // print out heading - if (useIndex) - outfile << "S" << GetLabel() << endl; - else - outfile << "" << header << endl; - - outfile << "" << endl; - - // print out character data - outfile << "" << endl; - int ct = 1; - for (; ct <= length; ct++){ - outfile << (*data)[ct]; - if (ct % numColumns == 0) outfile << endl; - } - if ((ct-1) % numColumns != 0) outfile << endl; - - outfile << "" << endl; - outfile << "" << endl; - } - - ///////////////////////////////////////////////////////////////// - // Sequence::Clone() - // - // Returns a new deep copy of the seqeuence. - ///////////////////////////////////////////////////////////////// - - Sequence *Clone () const { - Sequence *ret = new Sequence(); - assert (ret); - - ret->isValid = isValid; - ret->header = header; - ret->data = new SafeVector; assert (ret->data); - *(ret->data) = *data; - ret->length = length; - ret->sequenceLabel = sequenceLabel; - ret->inputLabel = inputLabel; - ret->weight = weight; - - return ret; - } - - ///////////////////////////////////////////////////////////////// - // Sequence::GetRange() - // - // Returns a new sequence object consisting of a range of - // characters from the current seuquence. - ///////////////////////////////////////////////////////////////// - - Sequence *GetRange (int start, int end) const { - Sequence *ret = new Sequence(); - assert (ret); - - assert (start >= 1 && start <= length); - assert (end >= 1 && end <= length); - assert (start <= end); - - ret->isValid = isValid; - ret->header = header; - ret->data = new SafeVector; assert (ret->data); - ret->data->push_back ('@'); - for (int i = start; i <= end; i++) - ret->data->push_back ((*data)[i]); - ret->length = end - start + 1; - ret->sequenceLabel = sequenceLabel; - ret->inputLabel = inputLabel; - - return ret; - } - - ///////////////////////////////////////////////////////////////// - // Sequence::AddGaps() - // - // Given an SafeVector containing the skeleton for an - // alignment and the identity of the current character, this - // routine will create a new sequence with all necesssary gaps added. - // For instance, - // alignment = "XXXBBYYYBBYYXX" - // id = 'X' - // will perform the transformation - // "ATGCAGTCA" --> "ATGCC---GT--CA" - // (XXXBBYYYBBYYXX) - ///////////////////////////////////////////////////////////////// - - Sequence *AddGaps (SafeVector *alignment, char id){ - Sequence *ret = new Sequence(); - assert (ret); - - ret->isValid = isValid; - ret->header = header; - ret->data = new SafeVector; assert (ret->data); - ret->length = (int) alignment->size(); - ret->sequenceLabel = sequenceLabel; - ret->inputLabel = inputLabel; - ret->data->push_back ('@'); - - SafeVector::iterator dataIter = data->begin() + 1; - for (SafeVector::iterator iter = alignment->begin(); iter != alignment->end(); ++iter){ - if (*iter == 'B' || *iter == id){ - ret->data->push_back (*dataIter); - ++dataIter; - } - else - ret->data->push_back ('-'); - } - - return ret; - } - - ///////////////////////////////////////////////////////////////// - // Sequence::AddGaps() - // - // Given an SafeVector containing the skeleton for an - // alignment and the identity of the current character, this - // routine will create a new sequence with all necesssary gaps added. - // For instance, - // alignment = "XXXBBYYYBBYYXX" - // id = 'X' - // will perform the transformation - // "ATGCAGTCA" --> "ATGCC---GT--CA" - // (XXXBBYYYBBYYXX) - ///////////////////////////////////////////////////////////////// - Sequence *AddGapsReverse (SafeVector *alignment, char id){ - Sequence *ret = new Sequence(); - assert (ret); - - ret->isValid = isValid; - ret->header = header; - ret->data = new SafeVector; assert (ret->data); - ret->length = (int) alignment->size(); - ret->sequenceLabel = sequenceLabel; - ret->inputLabel = inputLabel; - ret->data->push_back ('@'); - - SafeVector::iterator dataIter = data->begin() + 1; - for (SafeVector::reverse_iterator iter = alignment->rbegin(); iter != alignment->rend(); ++iter){ - if (*iter == 'B' || *iter == id){ - ret->data->push_back (*dataIter); - ++dataIter; - } - else - ret->data->push_back ('-'); - } - - return ret; - } - - - ///////////////////////////////////////////////////////////////// - // Sequence::GetString() - // - // Returns the sequence as a string with gaps removed. - ///////////////////////////////////////////////////////////////// - - string GetString (){ - string s = " "; - for (int i = 1; i <= length; i++){ - if ((*data)[i] != '-') s += (*data)[i]; - } - return s; - } - - - ///////////////////////////////////////////////////////////////// - // Sequence::GetMapping() - // - // Returns a SafeVector containing the indices of every - // character in the sequence. For instance, if the data is - // "ATGCC---GT--CA", the method returns {1,2,3,4,5,9,10,13,14}. - ///////////////////////////////////////////////////////////////// - - SafeVector *GetMapping () const { - SafeVector *ret = new SafeVector(1, 0); - for (int i = 1; i <= length; i++){ - if ((*data)[i] != '-') ret->push_back (i); - } - return ret; - } - - ///////////////////////////////////////////////////////////////// - // Sequence::GetMappingNumber() - // - // Returns a SafeVector containing the indices of every - // character in the sequence. For instance, if the data is - // "ATGCC---GT--CA", the method returns {1,2,3,4,5,0,0,0,6,7,0,0,8,9}. - ///////////////////////////////////////////////////////////////// - SafeVector *GetMappingNumber () const { - SafeVector *ret = new SafeVector(1, 0); - int count = 0; - for(int i = 1; i <= length; i++) { - if((*data)[i] != '-') ret->push_back(++count); - else ret->push_back(0); - } - return ret; - } - - ///////////////////////////////////////////////////////////////// - // Sequence::Highlight() - // - // Changes all positions with score >= cutoff to upper case and - // all positions with score < cutoff to lower case. - ///////////////////////////////////////////////////////////////// - - void Highlight (const SafeVector &scores, const float cutoff){ - for (int i = 1; i <= length; i++){ - if (scores[i-1] >= cutoff) - (*data)[i] = toupper ((*data)[i]); - else - (*data)[i] = tolower ((*data)[i]); - } - } -}; -} -#endif // __SQUENCE_HPP__ diff --git a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/SparseMatrix.h b/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/SparseMatrix.h deleted file mode 100644 index f722642..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/SparseMatrix.h +++ /dev/null @@ -1,341 +0,0 @@ -///////////////////////////////////////////////////////////////// -// SparseMatrix.h -// -// Sparse matrix computations -///////////////////////////////////////////////////////////////// - -#ifndef SPARSEMATRIX_H -#define SPARSEMATRIX_H - -#include -#include "SafeVector.h" -#include "nrutil.h" - -using namespace std; - -const float POSTERIOR_CUTOFF = 0.01; // minimum posterior probability - // value that is maintained in the - // sparse matrix representation - -typedef pair PIF; // Sparse matrix entry type - // first --> column - // second --> value - -namespace MXSCARNA { -struct PIF2 { // Sparse matrix entry type - int i; - int j; - float prob; -}; -} - -///////////////////////////////////////////////////////////////// -// SparseMatrix -// -// Class for sparse matrix computations -///////////////////////////////////////////////////////////////// -namespace MXSCARNA { -class SparseMatrix { - - int seq1Length, seq2Length; // dimensions of matrix - VI rowSize; // rowSize[i] = # of cells in row i - SafeVector data; // data values - SafeVector::iterator> rowPtrs; // pointers to the beginning of each row - - public: - SafeVector data2; - ///////////////////////////////////////////////////////////////// - // SparseMatrix::SparseMatrix() - // - // Private constructor.1 - ///////////////////////////////////////////////////////////////// - SparseMatrix() { } - - ///////////////////////////////////////////////////////////////// - // SparseMatrix::SparseMatrix() - // - // Constructor. Builds a sparse matrix from a posterior matrix. - // Note that the expected format for the posterior matrix is as - // a (seq1Length+1) x (seq2Length+1) matrix where the 0th row - // and 0th column are ignored (they should contain all zeroes). - ///////////////////////////////////////////////////////////////// - - SparseMatrix (int seq1Length, int seq2Length, const VF &posterior) : - seq1Length (seq1Length), seq2Length (seq2Length) { - - int numCells = 0; - - assert (seq1Length > 0); - assert (seq2Length > 0); - - // calculate memory required; count the number of cells in the - // posterior matrix above the threshold - VF::const_iterator postPtr = posterior.begin(); - for (int i = 0; i <= seq1Length; i++){ - for (int j = 0; j <= seq2Length; j++){ - if (*(postPtr++) >= POSTERIOR_CUTOFF){ - assert (i != 0 && j != 0); - numCells++; - } - } - } - - // allocate memory - data.resize(numCells); - rowSize.resize (seq1Length + 1); rowSize[0] = -1; - rowPtrs.resize (seq1Length + 1); rowPtrs[0] = data.end(); - - // build sparse matrix - postPtr = posterior.begin() + seq2Length + 1; // note that we're skipping the first row here - SafeVector::iterator dataPtr = data.begin(); - for (int i = 1; i <= seq1Length; i++){ - postPtr++; // and skipping the first column of each row - rowPtrs[i] = dataPtr; - for (int j = 1; j <= seq2Length; j++){ - if (*postPtr >= POSTERIOR_CUTOFF){ - dataPtr->first = j; - dataPtr->second = *postPtr; - dataPtr++; - } - postPtr++; - } - rowSize[i] = dataPtr - rowPtrs[i]; - } - } - - ////////////////////////////////////////////////////////////////////////// - // SparseMatrix::SetSparseMatrix() - // - // Constructor. - ////////////////////////////////////////////////////////////////////////// - void SetSparseMatrix(int inseq1Length, int inseq2Length, const Trimat &bppMat, float cutoff = 0.01) { - seq1Length = inseq1Length; - seq2Length = inseq2Length; - - int numCells = 0; - - assert (seq1Length > 0); - assert (seq2Length > 0); - - data.clear(); - rowSize.clear(); - rowPtrs.clear(); - for (int i = 1; i <= seq1Length; i++) { - for (int j = i; j <= seq2Length; j++) { - if (bppMat.ref(i, j) >= cutoff ) { - numCells++; - } - } - } - - // allocate memory - data.resize(numCells); - for (int i = 0; i < numCells; i++) { - data[i].first = 0; - data[i].second = 0; - } - rowSize.resize (seq1Length + 1); rowSize[0] = -1; - rowPtrs.resize (seq1Length + 1); rowPtrs[0] = data.end(); - - SafeVector::iterator dataPtr = data.begin(); - for (int i = 1; i <= seq1Length; i++) { - rowPtrs[i] = dataPtr; - for (int j = i; j <= seq2Length; j++) { - if ( bppMat.ref(i, j) >= cutoff ) { - dataPtr->first = j; - dataPtr->second = bppMat.ref(i, j); - dataPtr++; - } - } - rowSize[i] = dataPtr - rowPtrs[i]; - } - - float tmp; - for(int k = 1; k <= seq1Length; k++) { - for(int m = k, n = k; n <= k + 300 && m >= 1 && n <= seq2Length; m--, n++) { - if ((tmp = GetValue(m, n)) > 0) { - PIF2 p; - p.i = m; - p.j = n; - p.prob = tmp; - data2.push_back(p); - } - } - - for(int m = k, n = k + 1; n <= k + 300 && m >= 1 && n <= seq2Length; m--, n++) { - if ((tmp = GetValue(m, n)) > 0) { - PIF2 p; - p.i = m; - p.j = n; - p.prob = tmp; - data2.push_back(p); - } - } - } - } - - ///////////////////////////////////////////////////////////////// - // SparseMatrix::GetRowPtr() - // - // Returns the pointer to a particular row in the sparse matrix. - ///////////////////////////////////////////////////////////////// - - SafeVector::iterator GetRowPtr (int row) const { - assert (row >= 1 && row <= seq1Length); - return rowPtrs[row]; - } - - ///////////////////////////////////////////////////////////////// - // SparseMatrix::GetValue() - // - // Returns value at a particular row, column. - ///////////////////////////////////////////////////////////////// - - float GetValue (int row, int col){ - assert (row >= 1 && row <= seq1Length); - assert (col >= 1 && col <= seq2Length); - for (int i = 0; i < rowSize[row]; i++){ - if (rowPtrs[row][i].first == col) return rowPtrs[row][i].second; - } - return 0; - } - - void SetValue(int row, int col, float value) { - assert (row >= 1 && row <= seq1Length); - assert (col >= 1 && col <= seq2Length); - for (int i = 0; i < rowSize[row]; i++){ - if (rowPtrs[row][i].first == col) rowPtrs[row][i].second = value; - } - } - - ///////////////////////////////////////////////////////////////// - // SparseMatrix::GetRowSize() - // - // Returns the number of entries in a particular row. - ///////////////////////////////////////////////////////////////// - - int GetRowSize (int row) const { - assert (row >= 1 && row <= seq1Length); - return rowSize[row]; - } - - ///////////////////////////////////////////////////////////////// - // SparseMatrix::GetSeq1Length() - // - // Returns the first dimension of the matrix. - ///////////////////////////////////////////////////////////////// - - int GetSeq1Length () const { - return seq1Length; - } - - ///////////////////////////////////////////////////////////////// - // SparseMatrix::GetSeq2Length() - // - // Returns the second dimension of the matrix. - ///////////////////////////////////////////////////////////////// - - int GetSeq2Length () const { - return seq2Length; - } - - ///////////////////////////////////////////////////////////////// - // SparseMatrix::GetRowPtr - // - // Returns the pointer to a particular row in the sparse matrix. - ///////////////////////////////////////////////////////////////// - - int GetNumCells () const { - return data.size(); - } - - ///////////////////////////////////////////////////////////////// - // SparseMatrix::Print() - // - // Prints out a sparse matrix. - ///////////////////////////////////////////////////////////////// - - void Print (ostream &outfile) const { - outfile << "Sparse Matrix:" << endl; - for (int i = 1; i <= seq1Length; i++){ - outfile << " " << i << ":"; - for (int j = 0; j < rowSize[i]; j++){ - outfile << " (" << rowPtrs[i][j].first << "," << rowPtrs[i][j].second << ")"; - } - outfile << endl; - } - } - - ///////////////////////////////////////////////////////////////// - // SparseMatrix::ComputeTranspose() - // - // Returns a new sparse matrix containing the transpose of the - // current matrix. - ///////////////////////////////////////////////////////////////// - - SparseMatrix *ComputeTranspose () const { - - // create a new sparse matrix - SparseMatrix *ret = new SparseMatrix(); - int numCells = data.size(); - - ret->seq1Length = seq2Length; - ret->seq2Length = seq1Length; - - // allocate memory - ret->data.resize (numCells); - ret->rowSize.resize (seq2Length + 1); ret->rowSize[0] = -1; - ret->rowPtrs.resize (seq2Length + 1); ret->rowPtrs[0] = ret->data.end(); - - // compute row sizes - for (int i = 1; i <= seq2Length; i++) ret->rowSize[i] = 0; - for (int i = 0; i < numCells; i++) - ret->rowSize[data[i].first]++; - - // compute row ptrs - for (int i = 1; i <= seq2Length; i++){ - ret->rowPtrs[i] = (i == 1) ? ret->data.begin() : ret->rowPtrs[i-1] + ret->rowSize[i-1]; - } - - // now fill in data - SafeVector::iterator> currPtrs = ret->rowPtrs; - - for (int i = 1; i <= seq1Length; i++){ - SafeVector::iterator row = rowPtrs[i]; - for (int j = 0; j < rowSize[i]; j++){ - currPtrs[row[j].first]->first = i; - currPtrs[row[j].first]->second = row[j].second; - currPtrs[row[j].first]++; - } - } - - return ret; - } - - ///////////////////////////////////////////////////////////////// - // SparseMatrix::GetPosterior() - // - // Return the posterior representation of the sparse matrix. - ///////////////////////////////////////////////////////////////// - - VF *GetPosterior () const { - - // create a new posterior matrix - VF *posteriorPtr = new VF((seq1Length+1) * (seq2Length+1)); assert (posteriorPtr); - VF &posterior = *posteriorPtr; - - // build the posterior matrix - for (int i = 0; i < (seq1Length+1) * (seq2Length+1); i++) posterior[i] = 0; - for (int i = 1; i <= seq1Length; i++){ - VF::iterator postPtr = posterior.begin() + i * (seq2Length+1); - for (int j = 0; j < rowSize[i]; j++){ - postPtr[rowPtrs[i][j].first] = rowPtrs[i][j].second; - } - } - - return posteriorPtr; - } - -}; -} -#endif diff --git a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/mlparams0 b/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/mlparams0 deleted file mode 100644 index 43e501f..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/mlparams0 +++ /dev/null @@ -1,11 +0,0 @@ -0.96 0.02 0.02 -0.01 0.01 -0.4 0.4 -ACGUTN -0.148724 -0.0184143 0.158392 -0.0361397 0.0275537 0.197932 -0.0238474 0.0389291 0.0244289 0.155748 -0.0238474 0.0389291 0.0244289 0.155748 0.155748 -3.75308e-05 8.15823e-05 8.24765e-05 7.43985e-05 7.43985e-05 2.63252e-05 -0.227079 0.242208 0.283932 0.246468 0.246468 0.000312465 diff --git a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/train-script b/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/train-script deleted file mode 100644 index de909da..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/probconsRNA/train-script +++ /dev/null @@ -1,30 +0,0 @@ -./probcons -p mlparams0 -t params1 ../bralibase/* -./probcons -p params1 -t params2 ../bralibase/* -./probcons -p params2 -t params3 ../bralibase/* -./probcons -p params3 -t params4 ../bralibase/* -./probcons -p params4 -t params5 ../bralibase/* -./probcons -p params5 -t params6 ../bralibase/* -./probcons -p params6 -t params7 ../bralibase/* -./probcons -p params7 -t params8 ../bralibase/* -./probcons -p params8 -t params9 ../bralibase/* -./probcons -p params9 -t params10 ../bralibase/* -./probcons -p params10 -t params11 ../bralibase/* -./probcons -p params11 -t params12 ../bralibase/* -./probcons -p params12 -t params13 ../bralibase/* -./probcons -p params13 -t params14 ../bralibase/* -./probcons -p params14 -t params15 ../bralibase/* -./probcons -p params15 -t params16 ../bralibase/* -./probcons -p params16 -t params17 ../bralibase/* -./probcons -p params17 -t params18 ../bralibase/* -./probcons -p params18 -t params19 ../bralibase/* -./probcons -p params19 -t params20 ../bralibase/* -./probcons -p params20 -t params21 ../bralibase/* -./probcons -p params21 -t params22 ../bralibase/* -./probcons -p params22 -t params23 ../bralibase/* -./probcons -p params23 -t params24 ../bralibase/* -./probcons -p params24 -t params25 ../bralibase/* -./probcons -p params25 -t params26 ../bralibase/* -./probcons -p params26 -t params27 ../bralibase/* -./probcons -p params27 -t params28 ../bralibase/* -./probcons -p params28 -t params29 ../bralibase/* -./probcons -p params29 -t params30 ../bralibase/* diff --git a/binaries/src/mafft/extensions/mxscarna_src/scarna.hpp b/binaries/src/mafft/extensions/mxscarna_src/scarna.hpp deleted file mode 100644 index ac58548..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/scarna.hpp +++ /dev/null @@ -1,124 +0,0 @@ - -#ifndef __SCARNA_HPP__ -#define __SCARNA_HPP__ - -#include -using namespace std; - -#define WORDLENGTH 2 /* default word length in stem candidates (SCs) */ - -#define THR 0.01 - -// the parameter trained by maximazing the sps of tRNA -//#define MULTISCORE 9.870619 //multiple score with the constant. -//#define MULTIRIBOSUM 0.452626 //multiple ribosum_score with the constant -//#define MULTIPENALTY 24.263776 //multiple penalty with the constatnt -//#define MULTISTACKING 45.208927 //multiple stacking energy with the constatnt - -/* -#define MULTIRIBOSUM 1 -#define MULTIPENALTY 3.1 -#define MULTISCORE 3.7 -#define MULTISTACKING 0.1 -#define MULTIDELTASCORE 9.4 -#define MULTIDELTASTACKING 8.6 -*/ -/* -#define MULTIRIBOSUM 1 -#define MULTIPENALTY 1.1162 -#define MULTISCORE 0.53299 -#define MULTISTACKING 4.25669 -#define MULTIDELTASCORE 1.17805 -#define MULTIDELTASTACKING 4.2016 -*/ -// new CRF DATA 550 sigma 1 - -#define MULTIRIBOSUM 1 -#define MULTIPENALTY 1.82294 -#define MULTISCORE 0.250631 -#define MULTISTACKING 2.35517 -#define MULTIDELTASCORE 1.1781 -#define MULTIDELTASTACKING 2.45417 - -/* -#define MULTIRIBOSUM 1 -#define MULTIPENALTY 0.478054 -#define MULTISCORE 1.36322 -#define MULTISTACKING 4.96635 -#define MULTIDELTASCORE 1.14239 -#define MULTIDELTASTACKING 7.32992 -*/ -// CRF DATA 900 sigma 1 -/* -#define MULTIRIBOSUM 1 -#define MULTIPENALTY 2.28364 -#define MULTISCORE 0.00945681 -#define MULTISTACKING 2.25357 -#define MULTIDELTASCORE 1.02201 -#define MULTIDELTASTACKING 2.21293 -*/ - -/* -#define RNAMATCHAA 506159 -#define RNAMATCHAT 359916 -#define RNAMATCHAG 451319 -#define RNAMATCHAC 390720 -#define RNAMATCHTT 398658 -#define RNAMATCHTG 377069 -#define RNAMATCHTC 378456 -#define RNAMATCHGG 554695 -#define RNAMATCHGC 419950 -#define RNAMATCHCC 479030 -#define GAPPENALTY 190947 -#define GAPEXTENTIONPENALTY -118817 -*/ -// RIBOSUM -#define RNAMATCHAA 2.22 -#define RNAMATCHAT -1.39 -#define RNAMATCHAG -1.46 -#define RNAMATCHAC -1.86 -#define RNAMATCHTT 1.65 -#define RNAMATCHTG -1.74 -#define RNAMATCHTC -1.05 -#define RNAMATCHGG 1.03 -#define RNAMATCHGC -2.48 -#define RNAMATCHCC 1.16 -//#define GAPPENALTY 9.42 // 3default linear gap penalry in RNA sequence alignment -//#define GAPPENALTY 9.18743 -//#define GAPPENALTY 5.00 -//#define GAPEXTENTIONPENALTY 7.15 -//#define GAPEXTENTIONPENALTY 9.62003 - -#define GAPPENALTY 5 -#define GAPEXTENTIONPENALTY 2.5 -//#define GAPPENALTY 8.08875 -//#define GAPEXTENTIONPENALTY 3.89655 - -#define REFINEMENTREPS 0 -#define SCSLENGTH 2 -#define BASEPROBTHRESHOLD 0.01 -#define BASEPAIRCONST 6 -#define BANDWIDTH 500 -#define USERFOLD false - -extern float RNA_Match_AA; -extern float RNA_Match_AT; -extern float RNA_Match_AG; -extern float RNA_Match_AC; -extern float RNA_Match_TT; -extern float RNA_Match_TG; -extern float RNA_Match_TC; -extern float RNA_Match_GG; -extern float RNA_Match_GC; -extern float RNA_Match_CC; -extern float RNA_Gap_Penalty; -extern float RNA_Gap_Extension; - -extern int numIterativeRefinementReps; -extern bool PostProcessAlignment; -extern int scsLength; -extern float BaseProbThreshold; -extern float BasePairConst; - -#endif /*__SCARNA_HPP__*/ - diff --git a/binaries/src/mafft/extensions/mxscarna_src/seq2scs.cpp b/binaries/src/mafft/extensions/mxscarna_src/seq2scs.cpp deleted file mode 100644 index 24d99f7..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/seq2scs.cpp +++ /dev/null @@ -1,620 +0,0 @@ -/////////////////////////////////////////////////////////////// -// seq2scs.cpp -// -// make SCS(Stem Candidate Sequence) from the profile -////////////////////////////////////////////////////////////// - -#include "scarna.hpp" -#include "SafeVector.h" -#include "StemCandidate.hpp" -#include "Sequence.h" -#include "MultiSequence.h" -#include "BPPMatrix.hpp" -#include "nrutil.h" -#include -#include -#include -#include -#include -#include - -using namespace std; -using namespace::MXSCARNA; - -// for alipfold -/* -#include "utils.h" -#include "fold_vars.h" -#include "fold.h" -#include "part_func.h" -#include "inverse.h" -#include "RNAstruct.h" -#include "treedist.h" -#include "stringdist.h" -#include "profiledist.h" -#include "alifold.h" -#include "aln_util.h" -#include "dist_vars.h" -*/ -double Stacking_Energy[36] ={ - -0.9,-2.1,-1.7,-0.5,-0.9,-1.0, - -1.8,-2.9,-2.0,-1.2,-1.7,-1.9, - -2.3,-3.4,-2.9,-1.4,-2.1,-2.1, - -1.1,-2.1,-1.9,-0.4,-1.0,1.5, - -1.1,-2.3,-1.8,-0.8,-0.9,-1.1, - -0.8,-1.4,-1.2,-0.2,-0.5,-0.4 }; - -static Trimat* makeProfileBPPMatrix(MultiSequence *Sequences, SafeVector &BPPMatrices); -static int countSCS(MultiSequence *Sequences, Trimat* consBppMat, int BandWidth); -static std::vector* makeProfileScs(std::vector *pscs, MultiSequence *Sequences, Trimat* consBppMat, int BandWidth); -static void printScs(std::vector *pscs); -static std::vector* doubleScs(std::vector *pscs); -static std::vector* findRelations(std::vector *pscs); -static std::vector* findCorresponding(std::vector* pscs); -static std::vector* calculateStackingEnergy(std::vector* pscs); - -//float alipf_fold(char **sequences, char *structure, pair_info **pi); - -struct SortCmp { - bool operator()(const StemCandidate &sc1, const StemCandidate &sc2) const { - if (sc1.GetPosition() > sc2.GetPosition()) return false; - else if (sc1.GetPosition() < sc2.GetPosition()) return true; - else if (sc1.GetDistance() > sc2.GetDistance()) return false; - else return true; - } -}; - - -vector* -seq2scs(MultiSequence *Sequences, SafeVector &BPPMatrices, int BandWidth) -{ - - Trimat *consBppMat = makeProfileBPPMatrix(Sequences, BPPMatrices); - - int numberScs = countSCS(Sequences, consBppMat, BandWidth); - - std::vector *pscs = new std::vector(); // Profile Stem Candidate Sequence -// cout << "numberScs=" << numberScs << endl; - pscs->resize(numberScs+1); - - pscs = makeProfileScs(pscs, Sequences, consBppMat, BandWidth); - - pscs = doubleScs(pscs); - - std::vector::iterator startIter = pscs->begin(); - std::vector::iterator endIter = pscs->end(); - ++startIter; - std::sort(startIter, endIter, SortCmp()); - -// printScs(pscs); - pscs = findRelations(pscs); - - pscs = findCorresponding(pscs); - - pscs = calculateStackingEnergy(pscs); - -// findStemRelation() - -// exit(1); - delete consBppMat; - - return pscs; -} - -static Trimat* -makeProfileBPPMatrix(MultiSequence *Sequences, SafeVector &BPPMatrices) -{ - int length = Sequences->GetSequence(0)->GetLength(); -// float thr = BaseProbThreshold; - Trimat *consBppMat = new Trimat(length + 1); - fill(consBppMat->begin(), consBppMat->end(), 0); - -// gabage -// for(int i = 0; i <= length; i++) -// for(int j = i; j <= length; j++) -// cout << "i=" << i << " j=" << j << " " << consBppMat->ref(i,j) << endl; -// consBppMat->ref(i,j) = 0; - - - int number = Sequences->GetNumSequences(); -// if( number == 1) { - for(int seqNum = 0; seqNum < number; seqNum++) { - SafeVector *tmpMap = Sequences->GetSequence(seqNum)->GetMappingNumber(); - int label = Sequences->GetSequence(seqNum)->GetLabel(); - BPPMatrix *tmpBppMatrix = BPPMatrices[label]; - - for(int i = 1; i <= length ; i++) { - int originI = tmpMap->at(i); - for(int j = i + 3; j <= length; j++) { - int originJ = tmpMap->at(j); - if(originI != 0 && originJ != 0) { - float tmpProb = tmpBppMatrix->GetProb(originI, originJ); - -// if(tmpProb >= thr) { - consBppMat->ref(i, j) += tmpProb; -// cout << i << " " << j << " " << consBppMat->ref(i,j) << endl; -// } - } - } - } - } - - /* compute the mean of base pairing probability */ - for(int i = 1; i <= length; i++) { - for(int j = i + 3; j <= length; j++) { - consBppMat->ref(i,j) = consBppMat->ref(i,j)/(float)number; - //consBppMat->ref(i,j) = std::sqrt[number](consBppMat->ref(i,j)); - // cout << i << " " << j << " " << consBppMat->ref(i,j) << endl; - } - } - - -/* - else { - char **Seqs; - Seqs = (char **) malloc(sizeof(char*) * number); - - for(int i = 0; i < number; i++) { - Seqs[i] = (char *) malloc(sizeof(char) * (length + 1)); - for(int j = 1; j <= length; j++) { - Seqs[i][j-1] = Sequences->GetSequence(i)->GetPosition(j); - } - Seqs[i][length] = '\0'; - } - - - char *structure = NULL; - pair_info *pi; - - alipf_fold(Seqs, structure, &pi, number); - - for(int iter = 0; iter < length; iter++) { - if(pi[iter].i == 0) break; - consBppMat->ref(pi[iter].i, pi[iter].j) = pi[iter].p; - } - - for(int i = 0; i < number; i++) { - free (Seqs[i]); - } - free (Seqs); - -// free_alifold_arrays(void); - } -*/ - - return consBppMat; -} - -static int -countSCS(MultiSequence *Sequences, Trimat *consBppMat, int BandWidth) -{ - - int length = Sequences->GetSequence(0)->GetLength(); - int Word_Length = scsLength; - - int i, j, k, s; - int count; - int sum; - - sum = 0; - for(k = 1; k <= length; k++) { - count = 0; - - for(i = k, j = k; i >= 1 && j <= (k + BandWidth - 1) && j <= length; i--, j++) { - if(consBppMat->ref(i, j) >= BaseProbThreshold) { - count++; - } - else if(count >= Word_Length) { - for(s = 0; s <= count - Word_Length; s++) - sum++; - - count = 0; - } - else { - count = 0; - } - if(consBppMat->ref(i, j) >= BaseProbThreshold && count >= Word_Length && (i == 1 || j == length || j == (k + BandWidth - 1))) { - for(s = 0; s <= count - Word_Length; s++) - sum++; - - count = 0; - } - } - - count = 0; - for(i = k, j = k + 1; i >= 1 && j <= (k + BandWidth - 1) && j <= length; i--, j++) { - if(consBppMat->ref(i, j) >= BaseProbThreshold) { - count++; - } - else if(count >= Word_Length) { - for(s = 0; s <= count - Word_Length; s++) sum++; - - count = 0; - } - else { - count = 0; - } - - if(consBppMat->ref(i, j) >= BaseProbThreshold && count >= Word_Length && (i == 1 || j == length || j == (k + BandWidth - 1))) { - for(s = 0; s <= count - Word_Length; s++) sum++; - - count = 0; - } - } - } - - return 2 * sum; -} - -static std::vector* -makeProfileScs(std::vector *pscs, MultiSequence *Sequences, Trimat* consBppMat, int BandWidth) -{ - - int length = Sequences->GetSequence(0)->GetLength(); - int Word_Length = scsLength; - float Thr = BaseProbThreshold; - int i, j, k, s, t, m, n, l; - int count; - int sum; - - sum = 0; - for(k = 1; k <= length; k++) { - count = 0; - for(i = k, j = k; i >= 1 && j <= (k + BandWidth - 1) && j <= length; i--, j++) { - if(consBppMat->ref(i,j) >= Thr) { - count++; - } - else if(count >= Word_Length) { - for(s = 0; s <= count- Word_Length; s++) { - sum++; - pscs->at(sum).SetLength(Word_Length); - pscs->at(sum).SetPosition(i+1+s); - pscs->at(sum).SetRvposition(j-count+(count-Word_Length-s)); - pscs->at(sum).SetDistance((j-count+count-Word_Length-s) - (i+1+s+Word_Length)); - pscs->at(sum).SetNumSeq(Sequences->GetNumSequences()); - pscs->at(sum).SetNumSubstr(Sequences->GetNumSequences()); - pscs->at(sum).SetNumRvstr(Sequences->GetNumSequences()); - for(m = i + 1 + s, n = j - count + (count-Word_Length-s), l = j - 1 - s, t = 0; n < j-s; m++, n++, l--, t++) { - for(int num = 0; num < Sequences->GetNumSequences(); num++) { - Sequence *seq = Sequences->GetSequence(num); -// cout << num << "; " << m << ":" << seq->GetPosition(m) << " " << n << ":" << seq->GetPosition(n) << endl; - pscs->at(sum).AddSubstr(num, seq->GetPosition(m)); - pscs->at(sum).AddRvstr(num, seq->GetPosition(n)); - } - // assert(pr[iindx[m]-l] > Thr); -// cout << "prob=" << consBppMat->ref(m,l) << endl; - pscs->at(sum).AddScore(consBppMat->ref(m,l)); - pscs->at(sum).AddBaseScore(consBppMat->ref(m, l)); - } - for(int num = 0; num < Sequences->GetNumSequences(); num++) { - pscs->at(sum).AddSubstr(num, '\0'); - pscs->at(sum).AddRvstr(num, '\0'); - } - } - count = 0; - } - else { - count = 0; - } - if(consBppMat->ref(i,j) >= Thr && count >= Word_Length && (i == 1 || j == length || j == (k + BandWidth - 1))) { - for(s = 0; s <= count- Word_Length; s++) { - sum++; - pscs->at(sum).SetLength(Word_Length); - pscs->at(sum).SetPosition(i+s); - pscs->at(sum).SetRvposition(j-count+1+(count-Word_Length-s)); - pscs->at(sum).SetDistance((j-count+1+count-Word_Length-s) - (i+s+Word_Length)); - pscs->at(sum).SetNumSeq(Sequences->GetNumSequences()); - pscs->at(sum).SetNumSubstr(Sequences->GetNumSequences()); - pscs->at(sum).SetNumRvstr(Sequences->GetNumSequences()); - for(m = i + s, n = j - count + 1 + (count-Word_Length-s), l = j - s, t = 0; n <= j-s; m++, n++, l--, t++) { - for(int num = 0; num < Sequences->GetNumSequences(); num++) { - Sequence *seq = Sequences->GetSequence(num); - pscs->at(sum).AddSubstr(num, seq->GetPosition(m)); - pscs->at(sum).AddRvstr(num, seq->GetPosition(n)); - } - - pscs->at(sum).AddScore(consBppMat->ref(m,l)); - pscs->at(sum).AddBaseScore(consBppMat->ref(m, l)); - } - for(int num = 0; num < Sequences->GetNumSequences(); num++) { - pscs->at(sum).AddSubstr(num, '\0'); - pscs->at(sum).AddRvstr(num, '\0'); - } - } - count = 0; - } - } - count = 0; - for(i = k, j = k + 1; i >= 1 && j <= (k + BandWidth - 1) && j <= length; i--, j++) { - if(consBppMat->ref(i,j) >= Thr) { - count++; - } - else if(count >= Word_Length) { - for(s = 0; s <= count- Word_Length; s++) { - sum++; - pscs->at(sum).SetLength(Word_Length); - pscs->at(sum).SetPosition(i+1+s); - pscs->at(sum).SetRvposition( j-count+(count-Word_Length-s)); - pscs->at(sum).SetDistance((j-count+count-Word_Length-s) - (i+1+s+Word_Length)); - pscs->at(sum).SetNumSeq(Sequences->GetNumSequences()); - pscs->at(sum).SetNumSubstr(Sequences->GetNumSequences()); - pscs->at(sum).SetNumRvstr(Sequences->GetNumSequences()); - for(m = i + 1 + s, n = j - count + (count-Word_Length-s), l = j - 1 - s, t = 0; n < j-s; m++, n++, l--, t++) { - for(int num = 0; num < Sequences->GetNumSequences(); num++) { - Sequence *seq = Sequences->GetSequence(num); - pscs->at(sum).AddSubstr(num, seq->GetPosition(m)); - pscs->at(sum).AddRvstr(num, seq->GetPosition(n)); - } - - pscs->at(sum).AddScore(consBppMat->ref(m,l)); - pscs->at(sum).AddBaseScore(consBppMat->ref(m, l)); - } - for(int num = 0; num < Sequences->GetNumSequences(); num++) { - pscs->at(sum).AddSubstr(num, '\0'); - pscs->at(sum).AddRvstr(num, '\0'); - } - } - count = 0; - } - else { - count = 0; - } - if(consBppMat->ref(i,j) >= Thr && count >= Word_Length && (i == 1 || j == length || j == (k + BandWidth - 1))) { - for(s = 0; s <= count - Word_Length; s++) { - sum++; - pscs->at(sum).SetLength(Word_Length); - pscs->at(sum).SetPosition(i+s); - pscs->at(sum).SetRvposition(j-count+1+(count-Word_Length-s)); - pscs->at(sum).SetDistance((j-count+1+count-Word_Length-s) - (i+s+Word_Length)); -// pscs->at(sum).SetDistance((j-count+count-Word_Length-s) - (i+1+s+Word_Length)); - pscs->at(sum).SetNumSeq(Sequences->GetNumSequences()); - pscs->at(sum).SetNumSubstr(Sequences->GetNumSequences()); - pscs->at(sum).SetNumRvstr(Sequences->GetNumSequences()); - for(m = i + s, n = j - count + 1 + (count-Word_Length-s), l = j - s, t=0; n <= j-s; m++, n++, l--, t++) { - for(int num = 0; num < Sequences->GetNumSequences(); num++) { - Sequence *seq = Sequences->GetSequence(num); - pscs->at(sum).AddSubstr(num, seq->GetPosition(m)); - pscs->at(sum).AddRvstr(num, seq->GetPosition(n)); - } - - pscs->at(sum).AddScore(consBppMat->ref(m,l)); - pscs->at(sum).AddBaseScore(consBppMat->ref(m, l)); - } - for(int num = 0; num < Sequences->GetNumSequences(); num++) { - pscs->at(sum).AddSubstr(num, '\0'); - pscs->at(sum).AddRvstr(num, '\0'); - } - } - count = 0; - } - } - } - - return pscs; -} - -static std::vector* -doubleScs(std::vector *pscs) -{ - int num = pscs->size()/2; - - for(int i = 1; i <= num; i++) { - int latter = num + i; - //cout << i << " " << latter << endl; - StemCandidate &tmpScs = pscs->at(i); - pscs->at(latter).SetLength(tmpScs.GetLength()); - pscs->at(latter).SetPosition(tmpScs.GetRvposition()); - pscs->at(latter).SetRvposition(tmpScs.GetPosition()); - pscs->at(latter).SetDistance(-tmpScs.GetDistance()); - pscs->at(latter).SetNumSeq(tmpScs.GetNumSeq()); - pscs->at(latter).SetNumSubstr(tmpScs.GetNumSeq()); - pscs->at(latter).SetNumRvstr(tmpScs.GetNumSeq()); - - pscs->at(latter).SetScore(tmpScs.GetScore()); - for(int num = 0; num < tmpScs.GetNumSeq(); num++) { - string tmpSubstr = tmpScs.GetSubstr(num); - string tmpRvstr = tmpScs.GetRvstr(num); - - for(int k = 0; k < tmpScs.GetLength(); k++) { - pscs->at(latter).AddSubstr(num, tmpSubstr[k]); - pscs->at(latter).AddRvstr(num, tmpRvstr[k]); - } - } - for(int k = 0; k < tmpScs.GetLength(); k++) { - pscs->at(latter).AddBaseScore(tmpScs.GetBaseScore(k)); - } - } - return pscs; -} - - -static void -printScs(std::vector *pscs) -{ - int num = pscs->size(); -// std::cout << "size = " << num << endl; - for(int i = 1; i < num; i++) { - StemCandidate &sc = pscs->at(i); - - std::cout << i << "\t" << sc.GetLength() << "\t" << sc.GetPosition() << "\t" << - sc.GetRvposition() << "\t" << sc.GetDistance() << "\t" << sc.GetNumSeq() << - "\t" << sc.GetScore() << "\t" << sc.GetContPos() << "\t" << sc.GetBeforePos() << - "\t" << sc.GetRvscnumber() << "\t" << sc.GetStacking() << "\t" << sc.GetStemStacking() << - "\t" << sc.GetBaseScore(0) << "\t" << sc.GetBaseScore(1) << endl; - cout << "substr:" << endl; - for(int k = 0; k < sc.GetNumSeq(); k++) { - cout << k << "\t" << sc.GetSubstr(k) << "\t" << sc.GetRvstr(k) << "\t" << endl; - } - - } - -} - -static std::vector* -findRelations(std::vector *pscs) -{ - int num = pscs->size(); - - for(int i = 1; i < num; i++) { - int pt = i-1; - StemCandidate &sc = pscs->at(i); - sc.SetContPos(-1); - while(sc.GetPosition() == pscs->at(pt).GetPosition()) { pt--; } - - while((sc.GetPosition() == pscs->at(pt).GetPosition() + 1) && (pt > 0)) { - if(sc.GetRvposition() == pscs->at(pt).GetRvposition() - 1) { - sc.SetContPos(pt); - break; - } - --pt; - } - while((sc.GetPosition() < pscs->at(pt).GetPosition() + pscs->at(pt).GetLength())&&(pt > 0)) { pt--; } - sc.SetBeforePos(pt); - } - - return pscs; -} - -static std::vector* -findCorresponding(std::vector* pscs) -{ - int num = pscs->size(); - - for(int i = 1; i < num; i++) { pscs->at(i).SetRvscnumber(0); } - - for(int i = 1; i < num; i++) { - if(pscs->at(i).GetDistance() > 0) { - for(int j = i + 1; j < num; j++) { - if ( (pscs->at(j).GetPosition() == pscs->at(i).GetRvposition()) - && (pscs->at(i).GetPosition() == pscs->at(j).GetRvposition()) ) { - pscs->at(i).SetRvscnumber(j); - pscs->at(j).SetRvscnumber(i); - break; - } - } - } - if(pscs->at(i).GetRvscnumber() == 0) { - std::cerr << "error in findCorresponding" << " i=" << i << endl; -// exit(1); - } - } - - return pscs; -} - -static std::vector* -calculateStackingEnergy(std::vector* pscs) -{ - int num = pscs->size(); - int wordLength = scsLength; - - for(int i = 1; i < num; i++) { - StemCandidate &scI = pscs->at(i); - int j = pscs->at(i).GetContPos(); - - if(j > 0) { - - StemCandidate &scJ = pscs->at(j); - float stacking = 0; - int profNum = scJ.GetNumSeq(); - for(int k = 0; k < profNum; k++) { - string substr = scJ.GetSubstr(k); - string rvstr = scJ.GetRvstr(k); - int index = 0; - switch(substr[wordLength - 1]) { - case 'A': if( rvstr[0]=='U' ) {index += 0;} - else{ index = -1000; } - break; - case 'C': if( rvstr[0]=='G' ) {index += 6;} - else{ index = -1000; } - break; - case 'G': if( rvstr[0]=='C'){index += 12;} - else if(rvstr[0]=='U'){index += 18;} - else{ index = -1000; } - break; - case 'U': if( rvstr[0]=='A'){index += 24;} - else if(rvstr[0]=='G'){index += 30;} - else{ index = - 1000; } - break; - } - substr = scI.GetSubstr(k); - rvstr = scI.GetRvstr(k); - switch(substr[wordLength - 1]){ - case 'A': if( rvstr[0]=='U'){index += 0;} - else{ index = -1000; } - break; - case 'C': if( rvstr[0]=='G'){index += 1;} - else{ index = -1000; } - break; - case 'G': if( rvstr[0]=='C'){index += 2;} - else if(rvstr[0]=='U'){index += 3;} - else{ index = -1000; } - break; - case 'U': if( rvstr[0]=='A'){index += 4;} - else if(rvstr[0]=='G'){index += 5;} - else{ index = -1000; } - break; - } - if(index > 0) { - stacking += Stacking_Energy[index]; - } - } - scI.SetStacking(stacking/(float)profNum); - } - else { - scI.SetStacking(1000); - } - } - - for(int i = 1; i < num; i++) { - StemCandidate &sc = pscs->at(i); - float stemStacking = 0; - int profNum = sc.GetNumSeq(); - for(int k = 0; k < profNum; k++) { - string substr = sc.GetSubstr(k); - string rvstr = sc.GetRvstr(k); - for(int j = 0; j < wordLength-1; j++) { - int index = 0; - - switch(substr[j]) { - case 'A': if( rvstr[wordLength-1-j]=='U'){index += 0;} - else{ index = -1000; } - break; - case 'C': if( rvstr[wordLength-1-j]=='G'){index += 6;} - else{ index = -1000; } - break; - case 'G': if( rvstr[wordLength-1-j]=='C'){index += 12;} - else if(rvstr[wordLength-1-j]=='U'){index += 18;} - else{ index = -1000; } - break; - case 'U': if( rvstr[wordLength-1-j]=='A'){index += 24;} - else if(rvstr[wordLength-1-j]=='G'){index += 30;} - else{ index = -1000; } - break; - } - switch(substr[j+1]){ - case 'A': if( rvstr[wordLength-1-(j+1)]=='U'){index += 0;} - else{ index = -1000; } - break; - case 'C': if( rvstr[wordLength-1-(j+1)]=='G'){index += 1;} - else{ index = -1000; } - break; - case 'G': if( rvstr[wordLength-1-(j+1)]=='C'){index += 2;} - else if(rvstr[wordLength-1-(j+1)]=='U'){index += 3;} - else{ index = -1000; } - break; - case 'U': if( rvstr[wordLength-1-(j+1)]=='A'){index += 4;} - else if(rvstr[wordLength-1-(j+1)]=='G'){index += 5;} - else{ index = -1000; } - break; - } - if(index > 0) { - stemStacking += Stacking_Energy[index]; - } - } - sc.SetStemStacking(stemStacking/(float)profNum); - } - } - return pscs; -} - diff --git a/binaries/src/mafft/extensions/mxscarna_src/vienna/COPYING b/binaries/src/mafft/extensions/mxscarna_src/vienna/COPYING deleted file mode 100644 index 42607ac..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/vienna/COPYING +++ /dev/null @@ -1,15 +0,0 @@ - Disclaimer and Copyright - -The programs, library and source code of the Vienna RNA Package are free -software. They are distributed in the hope that they will be useful -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -Permission is granted for research, educational, and commercial use -and modification so long as 1) the package and any derived works are not -redistributed for any fee, other than media costs, 2) proper credit is -given to the authors and the Institute for Theoretical Chemistry of the -University of Vienna. - -If you want to include this software in a commercial product, please contact -the authors. \ No newline at end of file diff --git a/binaries/src/mafft/extensions/mxscarna_src/vienna/energy_const.h b/binaries/src/mafft/extensions/mxscarna_src/vienna/energy_const.h deleted file mode 100644 index 04892da..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/vienna/energy_const.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - - energy constants, formerly defined in - energy_par.h - - customized for use with RNAedit by - S.Kopp, IMB-Jena, Germany, Mar 1996 - -*/ - -#ifndef _ENERGY_CONST_H -#define _ENERGY_CONST_H 1 - -#define GASCONST 1.98717 /* in [cal/K] */ -#define K0 273.15 -#define INF 1000000 -#define FORBIDDEN 9999 -#define BONUS 10000 -#define NBPAIRS 7 -#define TURN 3 -#define MAXLOOP 30 - -#endif diff --git a/binaries/src/mafft/extensions/mxscarna_src/vienna/energy_par.h b/binaries/src/mafft/extensions/mxscarna_src/vienna/energy_par.h deleted file mode 100644 index 48b2737..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/vienna/energy_par.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - prototypes for energy_par.c -*/ - -#include "energy_const.h" -namespace MXSCARNA { -extern double lxc37; /* parameter for logarithmic loop - energy extrapolation */ - -extern int stack37[NBPAIRS+1][NBPAIRS+1]; -extern int enthalpies[NBPAIRS+1][NBPAIRS+1]; /* stack enthalpies */ -extern int entropies[NBPAIRS+1][NBPAIRS+1]; /* not used anymore */ - -extern int hairpin37[31]; -extern int bulge37[31]; -extern int internal_loop37[31]; -extern int internal2_energy; -extern int old_mismatch_37[NBPAIRS+1][5][5]; -extern int mismatchI37[NBPAIRS+1][5][5]; /* interior loop mismatches */ -extern int mismatchH37[NBPAIRS+1][5][5]; /* same for hairpins */ -extern int mismatchM37[NBPAIRS+1][5][5]; /* same for multiloops */ -extern int mism_H[NBPAIRS+1][5][5]; /* mismatch enthalpies */ - -extern int dangle5_37[NBPAIRS+1][5]; /* 5' dangle exterior of pair */ -extern int dangle3_37[NBPAIRS+1][5]; /* 3' dangle */ -extern int dangle3_H[NBPAIRS+1][5]; /* corresponding enthalpies */ -extern int dangle5_H[NBPAIRS+1][5]; - -extern int int11_37[NBPAIRS+1][NBPAIRS+1][5][5]; /* 1x1 interior loops */ -extern int int11_H[NBPAIRS+1][NBPAIRS+1][5][5]; - -extern int int21_37[NBPAIRS+1][NBPAIRS+1][5][5][5]; /* 2x1 interior loops */ -extern int int21_H[NBPAIRS+1][NBPAIRS+1][5][5][5]; - -extern int int22_37[NBPAIRS+1][NBPAIRS+1][5][5][5][5]; /* 2x2 interior loops */ -extern int int22_H[NBPAIRS+1][NBPAIRS+1][5][5][5][5]; - -/* constants for linearly destabilizing contributions for multi-loops - F = ML_closing + ML_intern*(k-1) + ML_BASE*u */ -extern int ML_BASE37; -extern int ML_closing37; -extern int ML_intern37; - -/* Ninio-correction for asymmetric internal loops with branches n1 and n2 */ -/* ninio_energy = min{max_ninio, |n1-n2|*F_ninio[min{4.0, n1, n2}] } */ -extern int MAX_NINIO; /* maximum correction */ -extern int F_ninio37[5]; - -/* penalty for helices terminated by AU (actually not GC) */ -extern int TerminalAU; -/* penalty for forming bi-molecular duplex */ -extern int DuplexInit; -/* stabilizing contribution due to special hairpins of size 4 (tetraloops) */ -extern char Tetraloops[]; /* string containing the special tetraloops */ -extern int TETRA_ENERGY37[]; /* Bonus energy for special tetraloops */ -extern int TETRA_ENTH37; -extern char Triloops[]; /* string containing the special triloops */ -extern int Triloop_E37[]; /* Bonus energy for special Triloops */ - -extern double Tmeasure; /* temperature of param measurements */ -} diff --git a/binaries/src/mafft/extensions/mxscarna_src/vienna/energy_param.cpp b/binaries/src/mafft/extensions/mxscarna_src/vienna/energy_param.cpp deleted file mode 100644 index 6834c6e..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/vienna/energy_param.cpp +++ /dev/null @@ -1,11600 +0,0 @@ -#include "energy_param.hpp" - - - -namespace MXSCARNA { -const int energy_param::INF = 10000; -const int energy_param::NST = 0; -const int energy_param::DEF = -50; -const double energy_param::lxc37 = 107.856; -const int -energy_param:: -stack37[8][8] = -/* CG GC GU UG AU UA */ -{ { INF, INF, INF, INF, INF, INF, INF, INF}, - { INF, -240, -330, -210, -140, -210, -210, NST}, // CG - { INF, -330, -340, -250, -150, -220, -240, NST}, // GC - { INF, -210, -250, 130, -50, -140, -130, NST}, // GU - { INF, -140, -150, -50, 30, -60, -100, NST}, // UG - { INF, -210, -220, -140, -60, -110, -90, NST}, // AU - { INF, -210, -240, -130, -100, -90, -130, NST}, // UA - { INF, NST, NST, NST, NST, NST, NST, NST}}; - -/* enthalpies (0.01*kcal/mol at 37 C) for stacked pairs */ -/* different from mfold-2.3, which uses values from mfold-2.2 */ -const int -energy_param:: -enthalpies[8][8] = -/* CG GC GU UG AU UA */ -{ { INF, INF, INF, INF, INF, INF, INF, INF}, - { INF, -1060, -1340, -1210, -560, -1050, -1040, NST}, - { INF, -1340, -1490, -1260, -830, -1140, -1240, NST}, - { INF, -1210, -1260, -1460, -1350, -880, -1280, NST}, - { INF, -560, -830, -1350, -930, -320, -700, NST}, - { INF, -1050, -1140, -880, -320, -940, -680, NST}, - { INF, -1040, -1240, -1280, -700, -680, -770, NST}, - { INF, NST, NST, NST, NST, NST, NST, NST}}; - -/* old values are here just for comparison */ -const int energy_param::oldhairpin37[31] = { /* from ViennaRNA 1.3 */ - INF, INF, INF, 410, 490, 440, 470, 500, 510, 520, 531, - 542, 551, 560, 568, 575, 582, 589, 595, 601, 606, - 611, 616, 621, 626, 630, 634, 638, 642, 646, 650}; - -const int energy_param::hairpin37[31] = { - INF, INF, INF, 570, 560, 560, 540, 590, 560, 640, 650, - 660, 670, 678, 686, 694, 701, 707, 713, 719, 725, - 730, 735, 740, 744, 749, 753, 757, 761, 765, 769}; - -const int energy_param::oldbulge37[31] = { - INF, 390, 310, 350, 420, 480, 500, 516, 531, 543, 555, - 565, 574, 583, 591, 598, 605, 612, 618, 624, 630, - 635, 640, 645, 649, 654, 658, 662, 666, 670, 673}; - -const int energy_param::bulge37[31] = { - INF, 380, 280, 320, 360, 400, 440, 459, 470, 480, 490, - 500, 510, 519, 527, 534, 541, 548, 554, 560, 565, - 571, 576, 580, 585, 589, 594, 598, 602, 605, 609}; - -const int energy_param::oldinternal_loop37[31] = { - INF, INF, 410, 510, 490, 530, 570, 587, 601, 614, 625, - 635, 645, 653, 661, 669, 676, 682, 688, 694, 700, - 705, 710, 715, 720, 724, 728, 732, 736, 740, 744}; - -const int energy_param::internal_loop37[31] = { - INF, INF, 410, 510, 170, 180, 200, 220, 230, 240, 250, - 260, 270, 278, 286, 294, 301, 307, 313, 319, 325, - 330, 335, 340, 345, 349, 353, 357, 361, 365, 369}; - -/* terminal mismatches */ -/* mismatch free energies for interior loops at 37C */ -const int energy_param::mismatchI37[8][5][5] = -{ /* @@ */ - {{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0}}, - { /* CG */ - { 0, 0, 0, 0, 0}, /* @@ @A @C @G @U */ - { 0, 0, 0, -110, 0}, /* A@ AA AC AG AU */ - { 0, 0, 0, 0, 0}, /* C@ CA CC CG CU */ - { 0, -110, 0, 0, 0}, /* G@ GA GC GG GU */ - { 0, 0, 0, 0, -70}},/* U@ UA UC UG UU */ - { /* GC */ - { 0, 0, 0, 0, 0}, /* @@ @A @C @G @U */ - { 0, 0, 0, -110, 0}, /* A@ AA AC AG AU */ - { 0, 0, 0, 0, 0}, /* C@ CA CC CG CU */ - { 0, -110, 0, 0, 0}, /* G@ GA GC GG GU */ - { 0, 0, 0, 0, -70}},/* U@ UA UC UG UU */ - { /* GU */ - { 0, 0, 0, 0, 0}, /* @@ @A @C @G @U */ - { 0, 70, 70, -40, 70}, /* A@ AA AC AG AU */ - { 0, 70, 70, 70, 70}, /* C@ CA CC CG CU */ - { 0, -40, 70, 70, 70}, /* G@ GA GC GG GU */ - { 0, 70, 70, 70, 0}},/* U@ UA UC UG UU */ - { /* UG */ - { 0, 0, 0, 0, 0}, /* @@ @A @C @G @U */ - { 0, 70, 70, -40, 70}, /* A@ AA AC AG AU */ - { 0, 70, 70, 70, 70}, /* C@ CA CC CG CU */ - { 0, -40, 70, 70, 70}, /* G@ GA GC GG GU */ - { 0, 70, 70, 70, 0}},/* U@ UA UC UG UU */ - { /* AU */ - { 0, 0, 0, 0, 0}, /* @@ @A @C @G @U */ - { 0, 70, 70, -40, 70}, /* A@ AA AC AG AU */ - { 0, 70, 70, 70, 70}, /* C@ CA CC CG CU */ - { 0, -40, 70, 70, 70}, /* G@ GA GC GG GU */ - { 0, 70, 70, 70, 0}},/* U@ UA UC UG UU */ - { /* UA */ - { 0, 0, 0, 0, 0}, /* @@ @A @C @G @U */ - { 0, 70, 70, -40, 70}, /* A@ AA AC AG AU */ - { 0, 70, 70, 70, 70}, /* C@ CA CC CG CU */ - { 0, -40, 70, 70, 70}, /* G@ GA GC GG GU */ - { 0, 70, 70, 70, 0}},/* U@ UA UC UG UU */ - { /* @@ */ - { 90, 90, 90, 90, 90},{ 90, 90, 90, 90,-20},{ 90, 90, 90, 90, 90}, - { 90,-20, 90, 90, 90},{ 90, 90, 90, 90, 20}} -}; - -/* mismatch free energies for hairpins at 37C */ -const int energy_param::mismatchH37[8][5][5] = -{ /* @@ */ - {{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0}}, - { /* CG */ - { 0, 0, 0, 0, 0}, /* @@ @A @C @G @U */ - { -90, -150, -150, -140, -180}, /* A@ AA AC AG AU */ - { -90, -100, -90, -290, -80}, /* C@ CA CC CG CU */ - { -90, -220, -200, -160, -110}, /* G@ GA GC GG GU */ - { -90, -170, -140, -180, -200}},/* U@ UA UC UG UU */ - { /* GC */ - { 0, 0, 0, 0, 0}, /* @@ @A @C @G @U */ - { -70, -110, -150, -130, -210}, /* A@ AA AC AG AU */ - { -70, -110, -70, -240, -50}, /* C@ CA CC CG CU */ - { -70, -240, -290, -140, -120}, /* G@ GA GC GG GU */ - { -70, -190, -100, -220, -150}},/* U@ UA UC UG UU */ - { /* GU */ - { 0, 0, 0, 0, 0}, /* @@ @A @C @G @U */ - { 0, 20, -50, -30, -30}, /* A@ AA AC AG AU */ - { 0, -10, -20, -150, -20}, /* C@ CA CC CG CU */ - { 0, -90, -110, -30, 0}, /* G@ GA GC GG GU */ - { 0, -30, -30, -40, -110}},/* U@ UA UC UG UU */ - { /* UG */ - { 0, 0, 0, 0, 0}, /* @@ @A @C @G @U */ - { 0, -50, -30, -60, -50}, /* A@ AA AC AG AU */ - { 0, -20, -10, -170, 0}, /* C@ CA CC CG CU */ - { 0, -80, -120, -30, -70}, /* G@ GA GC GG GU */ - { 0, -60, -10, -60, -80}},/* U@ UA UC UG UU */ - { /* AU */ - { 0, 0, 0, 0, 0}, /* @@ @A @C @G @U */ - { 0, -30, -50, -30, -30}, /* A@ AA AC AG AU */ - { 0, -10, -20, -150, -20}, /* C@ CA CC CG CU */ - { 0, -110, -120, -20, 20}, /* G@ GA GC GG GU */ - { 0, -30, -30, -60, -110}},/* U@ UA UC UG UU */ - { /* UA */ - { 0, 0, 0, 0, 0}, /* @@ @A @C @G @U */ - { 0, -50, -30, -60, -50}, /* A@ AA AC AG AU */ - { 0, -20, -10, -120, -0}, /* C@ CA CC CG CU */ - { 0, -140, -120, -70, -20}, /* G@ GA GC GG GU */ - { 0, -30, -10, -50, -80}},/* U@ UA UC UG UU */ - { /* @@ */ - { 0, 0, 0, 0, 0},{ 0, 0, 0, 0, 0},{ 0, 0, 0, 0, 0}, - { 0, 0, 0, 0, 0},{ 0, 0, 0, 0, 0}} -}; - -/* mismatch energies in multiloops */ - -/* these are probably junk */ -/* mismatch enthalpies for temperature scaling */ -const int energy_param::mism_H[8][5][5] = -{ /* no pair */ - {{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0}}, - { /* CG */ - { 0, 0, 0, 0, 0}, /* @@ @A @C @G @U */ - { DEF,-1030, -950,-1030,-1030}, /* A@ AA AC AG AU */ - { DEF, -520, -450, -520, -670}, /* C@ CA CC CG CU */ - { DEF, -940, -940, -940, -940}, /* G@ GA GC GG GU */ - { DEF, -810, -740, -810, -860}},/* U@ UA UC UG UU */ - { /* GC */ - { 0, 0, 0, 0, 0}, /* @@ @A @C @G @U */ - { DEF, -520, -880, -560, -880}, /* A@ AA AC AG AU */ - { DEF, -720, -310, -310, -390}, /* C@ CA CC CG CU */ - { DEF, -710, -740, -620, -740}, /* G@ GA GC GG GU */ - { DEF, -500, -500, -500, -570}},/* U@ UA UC UG UU */ - { /* GU */ - { 0, 0, 0, 0, 0}, /* @@ @A @C @G @U */ - { DEF, -430, -600, -600, -600}, /* A@ AA AC AG AU */ - { DEF, -260, -240, -240, -240}, /* C@ CA CC CG CU */ - { DEF, -340, -690, -690, -690}, /* G@ GA GC GG GU */ - { DEF, -330, -330, -330, -330}},/* U@ UA UC UG UU */ - { /* UG */ - { 0, 0, 0, 0, 0}, /* @@ @A @C @G @U */ - { DEF, -720, -790, -960, -810}, /* A@ AA AC AG AU */ - { DEF, -480, -480, -360, -480}, /* C@ CA CC CG CU */ - { DEF, -660, -810, -920, -810}, /* G@ GA GC GG GU */ - { DEF, -550, -440, -550, -360}},/* U@ UA UC UG UU */ - { /* AU */ - { 0, 0, 0, 0, 0}, /* @@ @A @C @G @U */ - { DEF, -430, -600, -600, -600}, /* A@ AA AC AG AU */ - { DEF, -260, -240, -240, -240}, /* C@ CA CC CG CU */ - { DEF, -340, -690, -690, -690}, /* G@ GA GC GG GU */ - { DEF, -330, -330, -330, -330}},/* U@ UA UC UG UU */ - { /* UA */ - { 0, 0, 0, 0, 0}, /* @@ @A @C @G @U */ - { DEF, -400, -630, -890, -590}, /* A@ AA AC AG AU */ - { DEF, -430, -510, -200, -180}, /* C@ CA CC CG CU */ - { DEF, -380, -680, -890, -680}, /* G@ GA GC GG GU */ - { DEF, -280, -140, -280, -140}},/* U@ UA UC UG UU */ - { /* nonstandard pair */ - {DEF,DEF,DEF,DEF,DEF},{DEF,DEF,DEF,DEF,DEF},{DEF,DEF,DEF,DEF,DEF}, - {DEF,DEF,DEF,DEF,DEF},{DEF,DEF,DEF,DEF,DEF}} -}; - -/* 5' dangling ends (unpaird base stacks on first paired base) */ -const int energy_param::dangle5_37[8][5]= -{/* @ A C G U */ - { INF, INF, INF, INF, INF}, /* no pair */ - { INF, -50, -30, -20, -10}, /* CG (stacks on C) */ - { INF, -20, -30, -0, -0}, /* GC (stacks on G) */ - { INF, -30, -30, -40, -20}, /* GU */ - { INF, -30, -10, -20, -20}, /* UG */ - { INF, -30, -30, -40, -20}, /* AU */ - { INF, -30, -10, -20, -20}, /* UA */ - { 0, 0, 0, 0, 0} /* @ */ -}; - -/* 3' dangling ends (unpaired base stacks on second paired base */ -const int energy_param::dangle3_37[8][5]= -{/* @ A C G U */ - { INF, INF, INF, INF, INF}, /* no pair */ - { INF, -110, -40, -130, -60}, /* CG (stacks on G) */ - { INF, -170, -80, -170, -120}, /* GC */ - { INF, -70, -10, -70, -10}, /* GU */ - { INF, -80, -50, -80, -60}, /* UG */ - { INF, -70, -10, -70, -10}, /* AU */ - { INF, -80, -50, -80, -60}, /* UA */ - { 0, 0, 0, 0, 0} /* @ */ -}; - -/* enthalpies for temperature scaling */ -const int energy_param::dangle3_H[8][5] = -{/* @ A C G U */ - { INF, INF, INF, INF, INF}, /* no pair */ - { 0, -740, -280, -640, -360}, - { 0, -900, -410, -860, -750}, - { 0, -740, -240, -720, -490}, - { 0, -490, -90, -550, -230}, - { 0, -570, -70, -580, -220}, - { 0, -490, -90, -550, -230}, - { 0, 0, 0, 0, 0} -}; - -const int energy_param::dangle5_H[8][5] = -{/* @ A C G U */ - { INF, INF, INF, INF, INF}, /* no pair */ - { 0, -240, 330, 80, -140}, - { 0, -160, 70, -460, -40}, - { 0, 160, 220, 70, 310}, - { 0, -150, 510, 10, 100}, - { 0, 160, 220, 70, 310}, - { 0, -50, 690, -60, -60}, - { 0, 0, 0, 0, 0} -}; - - -/* constants for linearly destabilizing contributions for multi-loops - F = ML_closing + ML_intern*k + ML_BASE*u */ -/* old versions erroneously used ML_intern*(k-1) */ - -const int energy_param::ML_BASE37 = 0; -const int energy_param::ML_closing37 = 340; -const int energy_param::ML_intern37 = 40; - - -/* Ninio-correction for asymmetric internal loops with branches n1 and n2 */ -/* ninio_energy = min{max_ninio, |n1-n2|*F_ninio[min{4.0, n1, n2}] } */ -const int energy_param::MAX_NINIO = 300; /* maximum correction */ -const int energy_param::F_ninio37[5] = { 0, 40, 50, 20, 10 }; /* only F[2] used */ - -/* stabilizing contribution due to special hairpins of size 4 (tetraloops) */ - -const char energy_param::Tetraloops[1400] = /* place for up to 200 tetra loops */ - "GGGGAC " - "GGUGAC " - "CGAAAG " - "GGAGAC " - "CGCAAG " - "GGAAAC " - "CGGAAG " - "CUUCGG " - "CGUGAG " - "CGAAGG " - "CUACGG " - "GGCAAC " - "CGCGAG " - "UGAGAG " - "CGAGAG " - "AGAAAU " - "CGUAAG " - "CUAACG " - "UGAAAG " - "GGAAGC " - "GGGAAC " - "UGAAAA " - "AGCAAU " - "AGUAAU " - "CGGGAG " - "AGUGAU " - "GGCGAC " - "GGGAGC " - "GUGAAC " - "UGGAAA " -; - -const char energy_param::Tetrastrings[30][7] = { - "GGGGAC", - "GGUGAC", - "CGAAAG", - "GGAGAC", - "CGCAAG", - "GGAAAC", - "CGGAAG", - "CUUCGG", - "CGUGAG", - "CGAAGG", - "CUACGG", - "GGCAAC", - "CGCGAG", - "UGAGAG", - "CGAGAG", - "AGAAAU", - "CGUAAG", - "CUAACG", - "UGAAAG", - "GGAAGC", - "GGGAAC", - "UGAAAA", - "AGCAAU", - "AGUAAU", - "CGGGAG", - "AGUGAU", - "GGCGAC", - "GGGAGC", - "GUGAAC", - "UGGAAA" -}; - -const int energy_param::TETRA_ENERGY37[200] = { - -300, -300, -300, -300, -300, -300, -300, -300, -300, -250, -250, -250, - -250, -250, -200, -200, -200, -200, -200, -150, -150, -150, -150, -150, - -150, -150, -150, -150, -150, -150}; - -const int energy_param::TETRA_ENTH37 = -400; - - -/* penalty for AU (or GU) terminating helix) */ -/* mismatches already contain these */ -const int energy_param::TerminalAU = 50; - -/* penalty for forming a bi-molecular duplex */ -const int energy_param::DuplexInit = 410; - -//#include "intloops.h" - - -const int energy_param::int11_37[8][8][5][5] = -{ /* noPair */ {{{0}}}, - { /* noPair */ {{0}}, -/* CG..CG */ -{{ 110, 110, 110, 110, 110}, -{ 110, 110, 40, 40, 40}, -{ 110, 40, 40, 40, 40}, -{ 110, 40, 40, -140, 40}, -{ 110, 40, 40, 40, 40} -}, -/* CG..GC */ -{{ 110, 110, 110, 110, 110}, -{ 110, 40, -40, 40, 40}, -{ 110, 30, 50, 40, 50}, -{ 110, -10, 40, -170, 40}, -{ 110, 40, 0, 40, -30} -}, -/* CG..GU */ -{{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, -100, 110}, -{ 110, 110, 110, 110, 110} -}, -/* CG..UG */ -{{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, -100, 110}, -{ 110, 110, 110, 110, 110} -}, -/* CG..AU */ -{{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, -100, 110}, -{ 110, 110, 110, 110, 110} -}, -/* CG..UA */ -{{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, -100, 110}, -{ 110, 110, 110, 110, 110} -}, -/* CG..?? */ -{{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110} -} -}, -{ /* noPair */ {{0}}, -/* GC..CG */ -{{ 110, 110, 110, 110, 110}, -{ 110, 40, 30, -10, 40}, -{ 110, -40, 50, 40, 0}, -{ 110, 40, 40, -170, 40}, -{ 110, 40, 50, 40, -30} -}, -/* GC..GC */ -{{ 110, 110, 110, 110, 110}, -{ 110, 80, 40, 40, 40}, -{ 110, 40, 40, 40, 40}, -{ 110, 40, 40, -210, 40}, -{ 110, 40, 40, 40, -70} -}, -/* GC..GU */ -{{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, -100, 110}, -{ 110, 110, 110, 110, 110} -}, -/* GC..UG */ -{{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, -100, 110}, -{ 110, 110, 110, 110, 110} -}, -/* GC..AU */ -{{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, -100, 110}, -{ 110, 110, 110, 110, 100} -}, -/* GC..UA */ -{{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, -100, 110}, -{ 110, 110, 110, 110, 110} -}, -/* GC..?? */ -{{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110} -} -}, -{ /* noPair */ {{0}}, -/* GU..CG */ -{{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, -100, 110}, -{ 110, 110, 110, 110, 110} -}, -/* GU..GC */ -{{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, -100, 110}, -{ 110, 110, 110, 110, 110} -}, -/* GU..GU */ -{{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, -40, 170}, -{ 170, 170, 170, 170, 170} -}, -/* GU..UG */ -{{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, -40, 170}, -{ 170, 170, 170, 170, 170} -}, -/* GU..AU */ -{{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, -40, 170}, -{ 170, 170, 170, 170, 170} -}, -/* GU..UA */ -{{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, -40, 170}, -{ 170, 170, 170, 170, 170} -}, -/* GU..?? */ -{{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170} -} -}, -{ /* noPair */ {{0}}, -/* UG..CG */ -{{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, -100, 110}, -{ 110, 110, 110, 110, 110} -}, -/* UG..GC */ -{{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, -100, 110}, -{ 110, 110, 110, 110, 110} -}, -/* UG..GU */ -{{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, -40, 170}, -{ 170, 170, 170, 170, 170} -}, -/* UG..UG */ -{{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, -40, 170}, -{ 170, 170, 170, 170, 170} -}, -/* UG..AU */ -{{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, -40, 170}, -{ 170, 170, 170, 170, 170} -}, -/* UG..UA */ -{{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, -40, 170}, -{ 170, 170, 170, 170, 170} -}, -/* UG..?? */ -{{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170} -} -}, -{ /* noPair */ {{0}}, -/* AU..CG */ -{{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, -100, 110}, -{ 110, 110, 110, 110, 110} -}, -/* AU..GC */ -{{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, -100, 110}, -{ 110, 110, 110, 110, 100} -}, -/* AU..GU */ -{{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, -40, 170}, -{ 170, 170, 170, 170, 170} -}, -/* AU..UG */ -{{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, -40, 170}, -{ 170, 170, 170, 170, 170} -}, -/* AU..AU */ -{{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, -40, 170}, -{ 170, 170, 170, 170, 120} -}, -/* AU..UA */ -{{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, -40, 170}, -{ 170, 170, 170, 170, 150} -}, -/* AU..?? */ -{{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170} -} -}, -{ /* noPair */ {{0}}, -/* UA..CG */ -{{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, -100, 110}, -{ 110, 110, 110, 110, 110} -}, -/* UA..GC */ -{{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, -100, 110}, -{ 110, 110, 110, 110, 110} -}, -/* UA..GU */ -{{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, -40, 170}, -{ 170, 170, 170, 170, 170} -}, -/* UA..UG */ -{{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, -40, 170}, -{ 170, 170, 170, 170, 170} -}, -/* UA..AU */ -{{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, -40, 170}, -{ 170, 170, 170, 170, 150} -}, -/* UA..UA */ -{{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, -40, 170}, -{ 170, 170, 170, 170, 180} -}, -/* UA..?? */ -{{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170} -} -}, -{ /* noPair */ {{0}}, -/* ??..CG */ -{{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110} -}, -/* ??..GC */ -{{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110}, -{ 110, 110, 110, 110, 110} -}, -/* ??..GU */ -{{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170} -}, -/* ??..UG */ -{{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170} -}, -/* ??..AU */ -{{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170} -}, -/* ??..UA */ -{{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170} -}, -/* ??..?? */ -{{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170}, -{ 170, 170, 170, 170, 170} -} -} -}; - -const int energy_param::int11_H[8][8][5][5] = - /* GC..GC */ -{ /* noPair */ {{{0}}}, -{ /* noPair */ {{0}}, -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}, - /* GC..CG */ -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}, - /* GC..GU */ -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}, - /* GC..UG */ -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}, - /* GC..AU */ -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}, - /* GC..UA */ -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}, - /* GC.. @ */ -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}}, - /* CG..GC */ -{ /* noPair */ {{0}}, -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}, - /* CG..CG */ -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}, - /* CG..GU */ -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}, - /* CG..UG */ -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}, - /* CG..AU */ -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}, - /* CG..UA */ -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}, - /* CG.. @ */ -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}}, - /* GU..GC */ -{ /* noPair */ {{0}}, -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}, - /* GU..CG */ -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}, - /* GU..GU */ -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}, - /* GU..UG */ -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}, - /* GU..AU */ -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}, - /* GU..UA */ -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}, - /* GU.. @ */ -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}}, - /* UG..GC */ -{ /* noPair */ {{0}}, -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}, - /* UG..CG */ -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}, - /* UG..GU */ -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}, - /* UG..UG */ -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}, - /* UG..AU */ -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}, - /* UG..UA */ -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}, - /* UG.. @ */ -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}}, - /* AU..GC */ -{ /* noPair */ {{0}}, -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}, - /* AU..CG */ -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}, - /* AU..GU */ -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}, - /* AU..UG */ -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}, - /* AU..AU */ -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}, - /* AU..UA */ -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}, - /* AU.. @ */ -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}}, - /* UA..GC */ -{ /* noPair */ {{0}}, -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}, - /* UA..CG */ -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}, - /* UA..GU */ -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}, - /* UA..UG */ -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}, - /* UA..AU */ -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}, - /* UA..UA */ -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}, - /* UA.. @ */ -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}}, - /* @..GC */ -{ /* noPair */ {{0}}, -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}, - /* @..CG */ -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}, - /* @..GU */ -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}, - /* @..UG */ -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}, - /* @..AU */ -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}, - /* @..UA */ -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}, - /* @.. @ */ -{ { 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}, -{ 0, 0, 0, 0, 0}}}}; - -const int energy_param::int21_37[8][8][5][5][5] = -{ /* noPair */ {{{{0}}}}, -{ /* noPair */ {{{0}}}, -{ -/* CG.@..GC */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* CG.A..GC */ -{{ 550, 550, 550, 550, 550},{ 550, 240, 220, 160, 400},{ 550, 210, 170, 160, 400},{ 550, 100, 60, 40, 400},{ 550, 400, 400, 400, 400}}, -/* CG.C..GC */ -{{ 550, 550, 550, 550, 550},{ 550, 230, 220, 400, 220},{ 550, 220, 250, 400, 220},{ 550, 400, 400, 400, 400},{ 550, 250, 190, 400, 220}}, -/* CG.G..GC */ -{{ 550, 550, 550, 550, 550},{ 550, 170, 400, 80, 400},{ 550, 400, 400, 400, 400},{ 550, 80, 400, 220, 400},{ 550, 400, 400, 400, 400}}, -/* CG.U..GC */ -{{ 550, 550, 550, 550, 550},{ 550, 400, 400, 400, 400},{ 550, 400, 220, 400, 130},{ 550, 400, 400, 400, 400},{ 550, 400, 170, 400, 120}} -}, -{ -/* CG.@..CG */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* CG.A..CG */ -{{ 550, 550, 550, 550, 550},{ 550, 230, 220, 110, 400},{ 550, 210, 170, 160, 400},{ 550, 80, 60, 40, 400},{ 550, 400, 400, 400, 400}}, -/* CG.C..CG */ -{{ 550, 550, 550, 550, 550},{ 550, 230, 220, 400, 220},{ 550, 220, 250, 400, 220},{ 550, 400, 400, 400, 400},{ 550, 250, 190, 400, 220}}, -/* CG.G..CG */ -{{ 550, 550, 550, 550, 550},{ 550, 170, 400, 80, 400},{ 550, 400, 400, 400, 400},{ 550, 80, 400, 220, 400},{ 550, 400, 400, 400, 400}}, -/* CG.U..CG */ -{{ 550, 550, 550, 550, 550},{ 550, 400, 400, 400, 400},{ 550, 400, 220, 400, 150},{ 550, 400, 400, 400, 400},{ 550, 400, 170, 400, 120}} -}, -{ -/* CG.@..UG */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* CG.A..UG */ -{{ 550, 550, 550, 550, 550},{ 550, 320, 300, 240, 480},{ 550, 290, 250, 240, 480},{ 550, 180, 140, 120, 480},{ 550, 480, 480, 480, 480}}, -/* CG.C..UG */ -{{ 550, 550, 550, 550, 550},{ 550, 310, 300, 480, 300},{ 550, 300, 330, 480, 300},{ 550, 480, 480, 480, 480},{ 550, 330, 270, 480, 300}}, -/* CG.G..UG */ -{{ 550, 550, 550, 550, 550},{ 550, 250, 480, 160, 480},{ 550, 480, 480, 480, 480},{ 550, 160, 480, 300, 480},{ 550, 480, 480, 480, 480}}, -/* CG.U..UG */ -{{ 550, 550, 550, 550, 550},{ 550, 480, 480, 480, 480},{ 550, 480, 300, 480, 210},{ 550, 480, 480, 480, 480},{ 550, 480, 250, 480, 200}} -}, -{ -/* CG.@..GU */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* CG.A..GU */ -{{ 550, 550, 550, 550, 550},{ 550, 320, 300, 240, 480},{ 550, 290, 250, 240, 480},{ 550, 180, 140, 120, 480},{ 550, 480, 480, 480, 480}}, -/* CG.C..GU */ -{{ 550, 550, 550, 550, 550},{ 550, 310, 300, 480, 300},{ 550, 300, 330, 480, 300},{ 550, 480, 480, 480, 480},{ 550, 330, 270, 480, 300}}, -/* CG.G..GU */ -{{ 550, 550, 550, 550, 550},{ 550, 250, 480, 160, 480},{ 550, 480, 480, 480, 480},{ 550, 160, 480, 300, 480},{ 550, 480, 480, 480, 480}}, -/* CG.U..GU */ -{{ 550, 550, 550, 550, 550},{ 550, 480, 480, 480, 480},{ 550, 480, 300, 480, 210},{ 550, 480, 480, 480, 480},{ 550, 480, 250, 480, 200}} -}, -{ -/* CG.@..UA */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* CG.A..UA */ -{{ 550, 550, 550, 550, 550},{ 550, 320, 300, 240, 480},{ 550, 290, 250, 240, 480},{ 550, 180, 140, 120, 480},{ 550, 480, 480, 480, 480}}, -/* CG.C..UA */ -{{ 550, 550, 550, 550, 550},{ 550, 310, 300, 480, 300},{ 550, 300, 330, 480, 300},{ 550, 480, 480, 480, 480},{ 550, 330, 270, 480, 300}}, -/* CG.G..UA */ -{{ 550, 550, 550, 550, 550},{ 550, 250, 480, 160, 480},{ 550, 480, 480, 480, 480},{ 550, 160, 480, 300, 480},{ 550, 480, 480, 480, 480}}, -/* CG.U..UA */ -{{ 550, 550, 550, 550, 550},{ 550, 480, 480, 480, 480},{ 550, 480, 300, 480, 210},{ 550, 480, 480, 480, 480},{ 550, 480, 250, 480, 200}} -}, -{ -/* CG.@..AU */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* CG.A..AU */ -{{ 550, 550, 550, 550, 550},{ 550, 320, 300, 240, 480},{ 550, 290, 250, 240, 480},{ 550, 180, 140, 120, 480},{ 550, 480, 480, 480, 480}}, -/* CG.C..AU */ -{{ 550, 550, 550, 550, 550},{ 550, 310, 300, 480, 300},{ 550, 300, 330, 480, 300},{ 550, 480, 480, 480, 480},{ 550, 330, 270, 480, 300}}, -/* CG.G..AU */ -{{ 550, 550, 550, 550, 550},{ 550, 250, 480, 160, 480},{ 550, 480, 480, 480, 480},{ 550, 160, 480, 300, 480},{ 550, 480, 480, 480, 480}}, -/* CG.U..AU */ -{{ 550, 550, 550, 550, 550},{ 550, 480, 480, 480, 480},{ 550, 480, 300, 480, 210},{ 550, 480, 480, 480, 480},{ 550, 480, 250, 480, 200}} -}, -{ -/* CG.@..?? */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* CG.A..?? */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* CG.C..?? */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* CG.G..?? */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* CG.U..?? */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}} -} -}, -{ /* noPair */ {{{0}}}, -{ -/* GC.@..GC */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* GC.A..GC */ -{{ 550, 550, 550, 550, 550},{ 550, 250, 220, 210, 400},{ 550, 210, 170, 160, 400},{ 550, 120, 60, 40, 400},{ 550, 400, 400, 400, 400}}, -/* GC.C..GC */ -{{ 550, 550, 550, 550, 550},{ 550, 230, 220, 400, 220},{ 550, 220, 250, 400, 220},{ 550, 400, 400, 400, 400},{ 550, 250, 190, 400, 220}}, -/* GC.G..GC */ -{{ 550, 550, 550, 550, 550},{ 550, 170, 400, 80, 400},{ 550, 400, 400, 400, 400},{ 550, 80, 400, 220, 400},{ 550, 400, 400, 400, 400}}, -/* GC.U..GC */ -{{ 550, 550, 550, 550, 550},{ 550, 400, 400, 400, 400},{ 550, 400, 220, 400, 120},{ 550, 400, 400, 400, 400},{ 550, 400, 170, 400, 120}} -}, -{ -/* GC.@..CG */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* GC.A..CG */ -{{ 550, 550, 550, 550, 550},{ 550, 240, 220, 160, 400},{ 550, 210, 170, 160, 400},{ 550, 100, 60, 40, 400},{ 550, 400, 400, 400, 400}}, -/* GC.C..CG */ -{{ 550, 550, 550, 550, 550},{ 550, 230, 220, 400, 220},{ 550, 220, 250, 400, 220},{ 550, 400, 400, 400, 400},{ 550, 250, 190, 400, 220}}, -/* GC.G..CG */ -{{ 550, 550, 550, 550, 550},{ 550, 170, 400, 80, 400},{ 550, 400, 400, 400, 400},{ 550, 80, 400, 220, 400},{ 550, 400, 400, 400, 400}}, -/* GC.U..CG */ -{{ 550, 550, 550, 550, 550},{ 550, 400, 400, 400, 400},{ 550, 400, 220, 400, 130},{ 550, 400, 400, 400, 400},{ 550, 400, 170, 400, 120}} -}, -{ -/* GC.@..UG */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* GC.A..UG */ -{{ 550, 550, 550, 550, 550},{ 550, 320, 300, 240, 480},{ 550, 290, 250, 240, 480},{ 550, 180, 140, 120, 480},{ 550, 480, 480, 480, 480}}, -/* GC.C..UG */ -{{ 550, 550, 550, 550, 550},{ 550, 310, 300, 480, 300},{ 550, 300, 330, 480, 300},{ 550, 480, 480, 480, 480},{ 550, 330, 270, 480, 300}}, -/* GC.G..UG */ -{{ 550, 550, 550, 550, 550},{ 550, 250, 480, 160, 480},{ 550, 480, 480, 480, 480},{ 550, 160, 480, 300, 480},{ 550, 480, 480, 480, 480}}, -/* GC.U..UG */ -{{ 550, 550, 550, 550, 550},{ 550, 480, 480, 480, 480},{ 550, 480, 300, 480, 210},{ 550, 480, 480, 480, 480},{ 550, 480, 250, 480, 200}} -}, -{ -/* GC.@..GU */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* GC.A..GU */ -{{ 550, 550, 550, 550, 550},{ 550, 320, 300, 240, 480},{ 550, 290, 250, 240, 480},{ 550, 180, 140, 120, 480},{ 550, 480, 480, 480, 480}}, -/* GC.C..GU */ -{{ 550, 550, 550, 550, 550},{ 550, 310, 300, 480, 300},{ 550, 300, 330, 480, 300},{ 550, 480, 480, 480, 480},{ 550, 330, 270, 480, 300}}, -/* GC.G..GU */ -{{ 550, 550, 550, 550, 550},{ 550, 250, 480, 160, 480},{ 550, 480, 480, 480, 480},{ 550, 160, 480, 300, 480},{ 550, 480, 480, 480, 480}}, -/* GC.U..GU */ -{{ 550, 550, 550, 550, 550},{ 550, 480, 480, 480, 480},{ 550, 480, 300, 480, 210},{ 550, 480, 480, 480, 480},{ 550, 480, 250, 480, 200}} -}, -{ -/* GC.@..UA */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* GC.A..UA */ -{{ 550, 550, 550, 550, 550},{ 550, 320, 300, 240, 480},{ 550, 290, 250, 240, 480},{ 550, 180, 140, 120, 480},{ 550, 480, 480, 480, 480}}, -/* GC.C..UA */ -{{ 550, 550, 550, 550, 550},{ 550, 310, 300, 480, 300},{ 550, 300, 330, 480, 300},{ 550, 480, 480, 480, 480},{ 550, 330, 270, 480, 300}}, -/* GC.G..UA */ -{{ 550, 550, 550, 550, 550},{ 550, 250, 480, 160, 480},{ 550, 480, 480, 480, 480},{ 550, 160, 480, 300, 480},{ 550, 480, 480, 480, 480}}, -/* GC.U..UA */ -{{ 550, 550, 550, 550, 550},{ 550, 480, 480, 480, 480},{ 550, 480, 300, 480, 210},{ 550, 480, 480, 480, 480},{ 550, 480, 250, 480, 200}} -}, -{ -/* GC.@..AU */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* GC.A..AU */ -{{ 550, 550, 550, 550, 550},{ 550, 320, 300, 240, 480},{ 550, 290, 250, 240, 480},{ 550, 180, 140, 120, 480},{ 550, 480, 480, 480, 480}}, -/* GC.C..AU */ -{{ 550, 550, 550, 550, 550},{ 550, 310, 300, 480, 300},{ 550, 300, 330, 480, 300},{ 550, 480, 480, 480, 480},{ 550, 330, 270, 480, 300}}, -/* GC.G..AU */ -{{ 550, 550, 550, 550, 550},{ 550, 250, 480, 160, 480},{ 550, 480, 480, 480, 480},{ 550, 160, 480, 300, 480},{ 550, 480, 480, 480, 480}}, -/* GC.U..AU */ -{{ 550, 550, 550, 550, 550},{ 550, 480, 480, 480, 480},{ 550, 480, 300, 480, 210},{ 550, 480, 480, 480, 480},{ 550, 480, 250, 480, 200}} -}, -{ -/* GC.@..?? */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* GC.A..?? */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* GC.C..?? */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* GC.G..?? */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* GC.U..?? */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}} -} -}, -{ /* noPair */ {{{0}}}, -{ -/* GU.@..GC */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* GU.A..GC */ -{{ 550, 550, 550, 550, 550},{ 550, 320, 300, 240, 480},{ 550, 290, 250, 240, 480},{ 550, 180, 140, 120, 480},{ 550, 480, 480, 480, 480}}, -/* GU.C..GC */ -{{ 550, 550, 550, 550, 550},{ 550, 310, 300, 480, 300},{ 550, 300, 330, 480, 300},{ 550, 480, 480, 480, 480},{ 550, 330, 270, 480, 300}}, -/* GU.G..GC */ -{{ 550, 550, 550, 550, 550},{ 550, 250, 480, 160, 480},{ 550, 480, 480, 480, 480},{ 550, 160, 480, 300, 480},{ 550, 480, 480, 480, 480}}, -/* GU.U..GC */ -{{ 550, 550, 550, 550, 550},{ 550, 480, 480, 480, 480},{ 550, 480, 300, 480, 210},{ 550, 480, 480, 480, 480},{ 550, 480, 250, 480, 200}} -}, -{ -/* GU.@..CG */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* GU.A..CG */ -{{ 550, 550, 550, 550, 550},{ 550, 320, 300, 240, 480},{ 550, 290, 250, 240, 480},{ 550, 180, 140, 120, 480},{ 550, 480, 480, 480, 480}}, -/* GU.C..CG */ -{{ 550, 550, 550, 550, 550},{ 550, 310, 300, 480, 300},{ 550, 300, 330, 480, 300},{ 550, 480, 480, 480, 480},{ 550, 330, 270, 480, 300}}, -/* GU.G..CG */ -{{ 550, 550, 550, 550, 550},{ 550, 250, 480, 160, 480},{ 550, 480, 480, 480, 480},{ 550, 160, 480, 300, 480},{ 550, 480, 480, 480, 480}}, -/* GU.U..CG */ -{{ 550, 550, 550, 550, 550},{ 550, 480, 480, 480, 480},{ 550, 480, 300, 480, 210},{ 550, 480, 480, 480, 480},{ 550, 480, 250, 480, 200}} -}, -{ -/* GU.@..UG */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* GU.A..UG */ -{{ 550, 550, 550, 550, 550},{ 550, 390, 370, 310, 550},{ 550, 360, 320, 310, 550},{ 550, 250, 210, 190, 550},{ 550, 550, 550, 550, 550}}, -/* GU.C..UG */ -{{ 550, 550, 550, 550, 550},{ 550, 380, 370, 550, 370},{ 550, 370, 400, 550, 370},{ 550, 550, 550, 550, 550},{ 550, 400, 340, 550, 370}}, -/* GU.G..UG */ -{{ 550, 550, 550, 550, 550},{ 550, 320, 550, 230, 550},{ 550, 550, 550, 550, 550},{ 550, 230, 550, 370, 550},{ 550, 550, 550, 550, 550}}, -/* GU.U..UG */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 370, 550, 280},{ 550, 550, 550, 550, 550},{ 550, 550, 320, 550, 270}} -}, -{ -/* GU.@..GU */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* GU.A..GU */ -{{ 550, 550, 550, 550, 550},{ 550, 390, 370, 310, 550},{ 550, 360, 320, 310, 550},{ 550, 250, 210, 190, 550},{ 550, 550, 550, 550, 550}}, -/* GU.C..GU */ -{{ 550, 550, 550, 550, 550},{ 550, 380, 370, 550, 370},{ 550, 370, 400, 550, 370},{ 550, 550, 550, 550, 550},{ 550, 400, 340, 550, 370}}, -/* GU.G..GU */ -{{ 550, 550, 550, 550, 550},{ 550, 320, 550, 230, 550},{ 550, 550, 550, 550, 550},{ 550, 230, 550, 370, 550},{ 550, 550, 550, 550, 550}}, -/* GU.U..GU */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 370, 550, 280},{ 550, 550, 550, 550, 550},{ 550, 550, 320, 550, 270}} -}, -{ -/* GU.@..UA */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* GU.A..UA */ -{{ 550, 550, 550, 550, 550},{ 550, 390, 370, 310, 550},{ 550, 360, 320, 310, 550},{ 550, 250, 210, 190, 550},{ 550, 550, 550, 550, 550}}, -/* GU.C..UA */ -{{ 550, 550, 550, 550, 550},{ 550, 380, 370, 550, 370},{ 550, 370, 400, 550, 370},{ 550, 550, 550, 550, 550},{ 550, 400, 340, 550, 370}}, -/* GU.G..UA */ -{{ 550, 550, 550, 550, 550},{ 550, 320, 550, 230, 550},{ 550, 550, 550, 550, 550},{ 550, 230, 550, 370, 550},{ 550, 550, 550, 550, 550}}, -/* GU.U..UA */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 370, 550, 280},{ 550, 550, 550, 550, 550},{ 550, 550, 320, 550, 270}} -}, -{ -/* GU.@..AU */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* GU.A..AU */ -{{ 550, 550, 550, 550, 550},{ 550, 390, 370, 310, 550},{ 550, 360, 320, 310, 550},{ 550, 250, 210, 190, 550},{ 550, 550, 550, 550, 550}}, -/* GU.C..AU */ -{{ 550, 550, 550, 550, 550},{ 550, 380, 370, 550, 370},{ 550, 370, 400, 550, 370},{ 550, 550, 550, 550, 550},{ 550, 400, 340, 550, 370}}, -/* GU.G..AU */ -{{ 550, 550, 550, 550, 550},{ 550, 320, 550, 230, 550},{ 550, 550, 550, 550, 550},{ 550, 230, 550, 370, 550},{ 550, 550, 550, 550, 550}}, -/* GU.U..AU */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 370, 550, 280},{ 550, 550, 550, 550, 550},{ 550, 550, 320, 550, 270}} -}, -{ -/* GU.@..?? */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* GU.A..?? */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* GU.C..?? */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* GU.G..?? */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* GU.U..?? */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}} -} -}, -{ /* noPair */ {{{0}}}, -{ -/* UG.@..GC */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* UG.A..GC */ -{{ 550, 550, 550, 550, 550},{ 550, 320, 300, 240, 480},{ 550, 290, 250, 240, 480},{ 550, 180, 140, 120, 480},{ 550, 480, 480, 480, 480}}, -/* UG.C..GC */ -{{ 550, 550, 550, 550, 550},{ 550, 310, 300, 480, 300},{ 550, 300, 330, 480, 300},{ 550, 480, 480, 480, 480},{ 550, 330, 270, 480, 300}}, -/* UG.G..GC */ -{{ 550, 550, 550, 550, 550},{ 550, 250, 480, 160, 480},{ 550, 480, 480, 480, 480},{ 550, 160, 480, 300, 480},{ 550, 480, 480, 480, 480}}, -/* UG.U..GC */ -{{ 550, 550, 550, 550, 550},{ 550, 480, 480, 480, 480},{ 550, 480, 300, 480, 210},{ 550, 480, 480, 480, 480},{ 550, 480, 250, 480, 200}} -}, -{ -/* UG.@..CG */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* UG.A..CG */ -{{ 550, 550, 550, 550, 550},{ 550, 320, 300, 240, 480},{ 550, 290, 250, 240, 480},{ 550, 180, 140, 120, 480},{ 550, 480, 480, 480, 480}}, -/* UG.C..CG */ -{{ 550, 550, 550, 550, 550},{ 550, 310, 300, 480, 300},{ 550, 300, 330, 480, 300},{ 550, 480, 480, 480, 480},{ 550, 330, 270, 480, 300}}, -/* UG.G..CG */ -{{ 550, 550, 550, 550, 550},{ 550, 250, 480, 160, 480},{ 550, 480, 480, 480, 480},{ 550, 160, 480, 300, 480},{ 550, 480, 480, 480, 480}}, -/* UG.U..CG */ -{{ 550, 550, 550, 550, 550},{ 550, 480, 480, 480, 480},{ 550, 480, 300, 480, 210},{ 550, 480, 480, 480, 480},{ 550, 480, 250, 480, 200}} -}, -{ -/* UG.@..UG */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* UG.A..UG */ -{{ 550, 550, 550, 550, 550},{ 550, 390, 370, 310, 550},{ 550, 360, 320, 310, 550},{ 550, 250, 210, 190, 550},{ 550, 550, 550, 550, 550}}, -/* UG.C..UG */ -{{ 550, 550, 550, 550, 550},{ 550, 380, 370, 550, 370},{ 550, 370, 400, 550, 370},{ 550, 550, 550, 550, 550},{ 550, 400, 340, 550, 370}}, -/* UG.G..UG */ -{{ 550, 550, 550, 550, 550},{ 550, 320, 550, 230, 550},{ 550, 550, 550, 550, 550},{ 550, 230, 550, 370, 550},{ 550, 550, 550, 550, 550}}, -/* UG.U..UG */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 370, 550, 280},{ 550, 550, 550, 550, 550},{ 550, 550, 320, 550, 270}} -}, -{ -/* UG.@..GU */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* UG.A..GU */ -{{ 550, 550, 550, 550, 550},{ 550, 390, 370, 310, 550},{ 550, 360, 320, 310, 550},{ 550, 250, 210, 190, 550},{ 550, 550, 550, 550, 550}}, -/* UG.C..GU */ -{{ 550, 550, 550, 550, 550},{ 550, 380, 370, 550, 370},{ 550, 370, 400, 550, 370},{ 550, 550, 550, 550, 550},{ 550, 400, 340, 550, 370}}, -/* UG.G..GU */ -{{ 550, 550, 550, 550, 550},{ 550, 320, 550, 230, 550},{ 550, 550, 550, 550, 550},{ 550, 230, 550, 370, 550},{ 550, 550, 550, 550, 550}}, -/* UG.U..GU */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 370, 550, 280},{ 550, 550, 550, 550, 550},{ 550, 550, 320, 550, 270}} -}, -{ -/* UG.@..UA */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* UG.A..UA */ -{{ 550, 550, 550, 550, 550},{ 550, 390, 370, 310, 550},{ 550, 360, 320, 310, 550},{ 550, 250, 210, 190, 550},{ 550, 550, 550, 550, 550}}, -/* UG.C..UA */ -{{ 550, 550, 550, 550, 550},{ 550, 380, 370, 550, 370},{ 550, 370, 400, 550, 370},{ 550, 550, 550, 550, 550},{ 550, 400, 340, 550, 370}}, -/* UG.G..UA */ -{{ 550, 550, 550, 550, 550},{ 550, 320, 550, 230, 550},{ 550, 550, 550, 550, 550},{ 550, 230, 550, 370, 550},{ 550, 550, 550, 550, 550}}, -/* UG.U..UA */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 370, 550, 280},{ 550, 550, 550, 550, 550},{ 550, 550, 320, 550, 270}} -}, -{ -/* UG.@..AU */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* UG.A..AU */ -{{ 550, 550, 550, 550, 550},{ 550, 390, 370, 310, 550},{ 550, 360, 320, 310, 550},{ 550, 250, 210, 190, 550},{ 550, 550, 550, 550, 550}}, -/* UG.C..AU */ -{{ 550, 550, 550, 550, 550},{ 550, 380, 370, 550, 370},{ 550, 370, 400, 550, 370},{ 550, 550, 550, 550, 550},{ 550, 400, 340, 550, 370}}, -/* UG.G..AU */ -{{ 550, 550, 550, 550, 550},{ 550, 320, 550, 230, 550},{ 550, 550, 550, 550, 550},{ 550, 230, 550, 370, 550},{ 550, 550, 550, 550, 550}}, -/* UG.U..AU */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 370, 550, 280},{ 550, 550, 550, 550, 550},{ 550, 550, 320, 550, 270}} -}, -{ -/* UG.@..?? */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* UG.A..?? */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* UG.C..?? */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* UG.G..?? */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* UG.U..?? */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}} -} -}, -{ /* noPair */ {{{0}}}, -{ -/* AU.@..GC */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* AU.A..GC */ -{{ 550, 550, 550, 550, 550},{ 550, 320, 300, 240, 480},{ 550, 290, 250, 240, 480},{ 550, 180, 140, 120, 480},{ 550, 480, 480, 480, 480}}, -/* AU.C..GC */ -{{ 550, 550, 550, 550, 550},{ 550, 310, 300, 480, 300},{ 550, 300, 330, 480, 300},{ 550, 480, 480, 480, 480},{ 550, 330, 270, 480, 300}}, -/* AU.G..GC */ -{{ 550, 550, 550, 550, 550},{ 550, 250, 480, 160, 480},{ 550, 480, 480, 480, 480},{ 550, 160, 480, 300, 480},{ 550, 480, 480, 480, 480}}, -/* AU.U..GC */ -{{ 550, 550, 550, 550, 550},{ 550, 480, 480, 480, 480},{ 550, 480, 300, 480, 210},{ 550, 480, 480, 480, 480},{ 550, 480, 250, 480, 200}} -}, -{ -/* AU.@..CG */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* AU.A..CG */ -{{ 550, 550, 550, 550, 550},{ 550, 320, 300, 240, 480},{ 550, 290, 250, 240, 480},{ 550, 180, 140, 120, 480},{ 550, 480, 480, 480, 480}}, -/* AU.C..CG */ -{{ 550, 550, 550, 550, 550},{ 550, 310, 300, 480, 300},{ 550, 300, 330, 480, 300},{ 550, 480, 480, 480, 480},{ 550, 330, 270, 480, 300}}, -/* AU.G..CG */ -{{ 550, 550, 550, 550, 550},{ 550, 250, 480, 160, 480},{ 550, 480, 480, 480, 480},{ 550, 160, 480, 300, 480},{ 550, 480, 480, 480, 480}}, -/* AU.U..CG */ -{{ 550, 550, 550, 550, 550},{ 550, 480, 480, 480, 480},{ 550, 480, 300, 480, 210},{ 550, 480, 480, 480, 480},{ 550, 480, 250, 480, 200}} -}, -{ -/* AU.@..UG */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* AU.A..UG */ -{{ 550, 550, 550, 550, 550},{ 550, 390, 370, 310, 550},{ 550, 360, 320, 310, 550},{ 550, 250, 210, 190, 550},{ 550, 550, 550, 550, 550}}, -/* AU.C..UG */ -{{ 550, 550, 550, 550, 550},{ 550, 380, 370, 550, 370},{ 550, 370, 400, 550, 370},{ 550, 550, 550, 550, 550},{ 550, 400, 340, 550, 370}}, -/* AU.G..UG */ -{{ 550, 550, 550, 550, 550},{ 550, 320, 550, 230, 550},{ 550, 550, 550, 550, 550},{ 550, 230, 550, 370, 550},{ 550, 550, 550, 550, 550}}, -/* AU.U..UG */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 370, 550, 280},{ 550, 550, 550, 550, 550},{ 550, 550, 320, 550, 270}} -}, -{ -/* AU.@..GU */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* AU.A..GU */ -{{ 550, 550, 550, 550, 550},{ 550, 390, 370, 310, 550},{ 550, 360, 320, 310, 550},{ 550, 250, 210, 190, 550},{ 550, 550, 550, 550, 550}}, -/* AU.C..GU */ -{{ 550, 550, 550, 550, 550},{ 550, 380, 370, 550, 370},{ 550, 370, 400, 550, 370},{ 550, 550, 550, 550, 550},{ 550, 400, 340, 550, 370}}, -/* AU.G..GU */ -{{ 550, 550, 550, 550, 550},{ 550, 320, 550, 230, 550},{ 550, 550, 550, 550, 550},{ 550, 230, 550, 370, 550},{ 550, 550, 550, 550, 550}}, -/* AU.U..GU */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 370, 550, 280},{ 550, 550, 550, 550, 550},{ 550, 550, 320, 550, 270}} -}, -{ -/* AU.@..UA */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* AU.A..UA */ -{{ 550, 550, 550, 550, 550},{ 550, 390, 370, 310, 550},{ 550, 360, 320, 310, 550},{ 550, 250, 210, 190, 550},{ 550, 550, 550, 550, 550}}, -/* AU.C..UA */ -{{ 550, 550, 550, 550, 550},{ 550, 380, 370, 550, 370},{ 550, 370, 400, 550, 370},{ 550, 550, 550, 550, 550},{ 550, 400, 340, 550, 370}}, -/* AU.G..UA */ -{{ 550, 550, 550, 550, 550},{ 550, 320, 550, 230, 550},{ 550, 550, 550, 550, 550},{ 550, 230, 550, 370, 550},{ 550, 550, 550, 550, 550}}, -/* AU.U..UA */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 370, 550, 280},{ 550, 550, 550, 550, 550},{ 550, 550, 320, 550, 270}} -}, -{ -/* AU.@..AU */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* AU.A..AU */ -{{ 550, 550, 550, 550, 550},{ 550, 390, 370, 310, 550},{ 550, 360, 320, 310, 550},{ 550, 250, 210, 190, 550},{ 550, 550, 550, 550, 550}}, -/* AU.C..AU */ -{{ 550, 550, 550, 550, 550},{ 550, 380, 370, 550, 370},{ 550, 370, 400, 550, 370},{ 550, 550, 550, 550, 550},{ 550, 400, 340, 550, 370}}, -/* AU.G..AU */ -{{ 550, 550, 550, 550, 550},{ 550, 320, 550, 230, 550},{ 550, 550, 550, 550, 550},{ 550, 230, 550, 370, 550},{ 550, 550, 550, 550, 550}}, -/* AU.U..AU */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 370, 550, 280},{ 550, 550, 550, 550, 550},{ 550, 550, 320, 550, 270}} -}, -{ -/* AU.@..?? */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* AU.A..?? */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* AU.C..?? */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* AU.G..?? */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* AU.U..?? */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}} -} -}, -{ /* noPair */ {{{0}}}, -{ -/* UA.@..GC */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* UA.A..GC */ -{{ 550, 550, 550, 550, 550},{ 550, 320, 300, 240, 480},{ 550, 290, 250, 240, 480},{ 550, 180, 140, 120, 480},{ 550, 480, 480, 480, 480}}, -/* UA.C..GC */ -{{ 550, 550, 550, 550, 550},{ 550, 310, 300, 480, 300},{ 550, 300, 330, 480, 300},{ 550, 480, 480, 480, 480},{ 550, 330, 270, 480, 300}}, -/* UA.G..GC */ -{{ 550, 550, 550, 550, 550},{ 550, 250, 480, 160, 480},{ 550, 480, 480, 480, 480},{ 550, 160, 480, 300, 480},{ 550, 480, 480, 480, 480}}, -/* UA.U..GC */ -{{ 550, 550, 550, 550, 550},{ 550, 480, 480, 480, 480},{ 550, 480, 300, 480, 210},{ 550, 480, 480, 480, 480},{ 550, 480, 250, 480, 200}} -}, -{ -/* UA.@..CG */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* UA.A..CG */ -{{ 550, 550, 550, 550, 550},{ 550, 320, 300, 240, 480},{ 550, 290, 250, 240, 480},{ 550, 180, 140, 120, 480},{ 550, 480, 480, 480, 480}}, -/* UA.C..CG */ -{{ 550, 550, 550, 550, 550},{ 550, 310, 300, 480, 300},{ 550, 300, 330, 480, 300},{ 550, 480, 480, 480, 480},{ 550, 330, 270, 480, 300}}, -/* UA.G..CG */ -{{ 550, 550, 550, 550, 550},{ 550, 250, 480, 160, 480},{ 550, 480, 480, 480, 480},{ 550, 160, 480, 300, 480},{ 550, 480, 480, 480, 480}}, -/* UA.U..CG */ -{{ 550, 550, 550, 550, 550},{ 550, 480, 480, 480, 480},{ 550, 480, 300, 480, 210},{ 550, 480, 480, 480, 480},{ 550, 480, 250, 480, 200}} -}, -{ -/* UA.@..UG */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* UA.A..UG */ -{{ 550, 550, 550, 550, 550},{ 550, 390, 370, 310, 550},{ 550, 360, 320, 310, 550},{ 550, 250, 210, 190, 550},{ 550, 550, 550, 550, 550}}, -/* UA.C..UG */ -{{ 550, 550, 550, 550, 550},{ 550, 380, 370, 550, 370},{ 550, 370, 400, 550, 370},{ 550, 550, 550, 550, 550},{ 550, 400, 340, 550, 370}}, -/* UA.G..UG */ -{{ 550, 550, 550, 550, 550},{ 550, 320, 550, 230, 550},{ 550, 550, 550, 550, 550},{ 550, 230, 550, 370, 550},{ 550, 550, 550, 550, 550}}, -/* UA.U..UG */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 370, 550, 280},{ 550, 550, 550, 550, 550},{ 550, 550, 320, 550, 270}} -}, -{ -/* UA.@..GU */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* UA.A..GU */ -{{ 550, 550, 550, 550, 550},{ 550, 390, 370, 310, 550},{ 550, 360, 320, 310, 550},{ 550, 250, 210, 190, 550},{ 550, 550, 550, 550, 550}}, -/* UA.C..GU */ -{{ 550, 550, 550, 550, 550},{ 550, 380, 370, 550, 370},{ 550, 370, 400, 550, 370},{ 550, 550, 550, 550, 550},{ 550, 400, 340, 550, 370}}, -/* UA.G..GU */ -{{ 550, 550, 550, 550, 550},{ 550, 320, 550, 230, 550},{ 550, 550, 550, 550, 550},{ 550, 230, 550, 370, 550},{ 550, 550, 550, 550, 550}}, -/* UA.U..GU */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 370, 550, 280},{ 550, 550, 550, 550, 550},{ 550, 550, 320, 550, 270}} -}, -{ -/* UA.@..UA */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* UA.A..UA */ -{{ 550, 550, 550, 550, 550},{ 550, 390, 370, 310, 550},{ 550, 360, 320, 310, 550},{ 550, 250, 210, 190, 550},{ 550, 550, 550, 550, 550}}, -/* UA.C..UA */ -{{ 550, 550, 550, 550, 550},{ 550, 380, 370, 550, 370},{ 550, 370, 400, 550, 370},{ 550, 550, 550, 550, 550},{ 550, 400, 340, 550, 370}}, -/* UA.G..UA */ -{{ 550, 550, 550, 550, 550},{ 550, 320, 550, 230, 550},{ 550, 550, 550, 550, 550},{ 550, 230, 550, 370, 550},{ 550, 550, 550, 550, 550}}, -/* UA.U..UA */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 370, 550, 280},{ 550, 550, 550, 550, 550},{ 550, 550, 320, 550, 270}} -}, -{ -/* UA.@..AU */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* UA.A..AU */ -{{ 550, 550, 550, 550, 550},{ 550, 390, 370, 310, 550},{ 550, 360, 320, 310, 550},{ 550, 250, 210, 190, 550},{ 550, 550, 550, 550, 550}}, -/* UA.C..AU */ -{{ 550, 550, 550, 550, 550},{ 550, 380, 370, 550, 370},{ 550, 370, 400, 550, 370},{ 550, 550, 550, 550, 550},{ 550, 400, 340, 550, 370}}, -/* UA.G..AU */ -{{ 550, 550, 550, 550, 550},{ 550, 320, 550, 230, 550},{ 550, 550, 550, 550, 550},{ 550, 230, 550, 370, 550},{ 550, 550, 550, 550, 550}}, -/* UA.U..AU */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 370, 550, 280},{ 550, 550, 550, 550, 550},{ 550, 550, 320, 550, 270}} -}, -{ -/* UA.@..?? */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* UA.A..?? */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* UA.C..?? */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* UA.G..?? */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* UA.U..?? */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}} -} -}, -{ /* noPair */ {{{0}}}, -{ -/* ??.@..GC */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* ??.A..GC */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* ??.C..GC */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* ??.G..GC */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* ??.U..GC */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}} -}, -{ -/* ??.@..CG */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* ??.A..CG */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* ??.C..CG */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* ??.G..CG */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* ??.U..CG */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}} -}, -{ -/* ??.@..UG */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* ??.A..UG */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* ??.C..UG */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* ??.G..UG */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* ??.U..UG */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}} -}, -{ -/* ??.@..GU */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* ??.A..GU */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* ??.C..GU */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* ??.G..GU */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* ??.U..GU */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}} -}, -{ -/* ??.@..UA */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* ??.A..UA */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* ??.C..UA */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* ??.G..UA */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* ??.U..UA */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}} -}, -{ -/* ??.@..AU */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* ??.A..AU */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* ??.C..AU */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* ??.G..AU */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* ??.U..AU */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}} -}, -{ -/* ??.@..?? */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* ??.A..?? */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* ??.C..?? */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* ??.G..?? */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}}, -/* ??.U..?? */ -{{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550},{ 550, 550, 550, 550, 550}} -} -} -}; - -const int energy_param::int21_H[8][8][5][5][5] = -{ /* noPair */ {{{{0}}}}, -{ /* noPair */ {{{0}}}, -{ -/* CG.@..CG */ -{{ 0, 0, 0, 0, 0},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50}}, -/* CG.A..CG */ -{{ -50,-1029, -949,-1029,-1029},{-1079,-2058,-1978,-2058,-2058},{ -569,-1548,-1468,-1548,-1548},{ -989,-1968,-1888,-1968,-1968},{ -859,-1838,-1758,-1838,-1838}}, -/* CG.C..CG */ -{{ -50, -519, -449, -519, -669},{ -999,-1468,-1398,-1468,-1618},{ -499, -968, -898, -968,-1118},{ -989,-1458,-1388,-1458,-1608},{ -789,-1258,-1188,-1258,-1408}}, -/* CG.G..CG */ -{{ -50, -939, -939, -939, -939},{-1079,-1968,-1968,-1968,-1968},{ -569,-1458,-1458,-1458,-1458},{ -989,-1878,-1878,-1878,-1878},{ -859,-1748,-1748,-1748,-1748}}, -/* CG.U..CG */ -{{ -50, -809, -739, -809, -859},{-1079,-1838,-1768,-1838,-1888},{ -719,-1478,-1408,-1478,-1528},{ -989,-1748,-1678,-1748,-1798},{ -909,-1668,-1598,-1668,-1718}} -}, -{ -/* CG.@..GC */ -{{ 0, 0, 0, 0, 0},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50}}, -/* CG.A..GC */ -{{ -50,-1029, -949,-1029,-1029},{ -569,-1548,-1468,-1548,-1548},{ -769,-1748,-1668,-1748,-1748},{ -759,-1738,-1658,-1738,-1738},{ -549,-1528,-1448,-1528,-1528}}, -/* CG.C..GC */ -{{ -50, -519, -449, -519, -669},{ -929,-1398,-1328,-1398,-1548},{ -359, -828, -758, -828, -978},{ -789,-1258,-1188,-1258,-1408},{ -549,-1018, -948,-1018,-1168}}, -/* CG.G..GC */ -{{ -50, -939, -939, -939, -939},{ -609,-1498,-1498,-1498,-1498},{ -359,-1248,-1248,-1248,-1248},{ -669,-1558,-1558,-1558,-1558},{ -549,-1438,-1438,-1438,-1438}}, -/* CG.U..GC */ -{{ -50, -809, -739, -809, -859},{ -929,-1688,-1618,-1688,-1738},{ -439,-1198,-1128,-1198,-1248},{ -789,-1548,-1478,-1548,-1598},{ -619,-1378,-1308,-1378,-1428}} -}, -{ -/* CG.@..GU */ -{{ 0, 0, 0, 0, 0},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50}}, -/* CG.A..GU */ -{{ -50,-1029, -949,-1029,-1029},{ -479,-1458,-1378,-1458,-1458},{ -309,-1288,-1208,-1288,-1288},{ -389,-1368,-1288,-1368,-1368},{ -379,-1358,-1278,-1358,-1358}}, -/* CG.C..GU */ -{{ -50, -519, -449, -519, -669},{ -649,-1118,-1048,-1118,-1268},{ -289, -758, -688, -758, -908},{ -739,-1208,-1138,-1208,-1358},{ -379, -848, -778, -848, -998}}, -/* CG.G..GU */ -{{ -50, -939, -939, -939, -939},{ -649,-1538,-1538,-1538,-1538},{ -289,-1178,-1178,-1178,-1178},{ -739,-1628,-1628,-1628,-1628},{ -379,-1268,-1268,-1268,-1268}}, -/* CG.U..GU */ -{{ -50, -809, -739, -809, -859},{ -649,-1408,-1338,-1408,-1458},{ -289,-1048, -978,-1048,-1098},{ -739,-1498,-1428,-1498,-1548},{ -379,-1138,-1068,-1138,-1188}} -}, -{ -/* CG.@..UG */ -{{ 0, 0, 0, 0, 0},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50}}, -/* CG.A..UG */ -{{ -50,-1029, -949,-1029,-1029},{ -769,-1748,-1668,-1748,-1748},{ -529,-1508,-1428,-1508,-1508},{ -709,-1688,-1608,-1688,-1688},{ -599,-1578,-1498,-1578,-1578}}, -/* CG.C..UG */ -{{ -50, -519, -449, -519, -669},{ -839,-1308,-1238,-1308,-1458},{ -529, -998, -928, -998,-1148},{ -859,-1328,-1258,-1328,-1478},{ -489, -958, -888, -958,-1108}}, -/* CG.G..UG */ -{{ -50, -939, -939, -939, -939},{-1009,-1898,-1898,-1898,-1898},{ -409,-1298,-1298,-1298,-1298},{ -969,-1858,-1858,-1858,-1858},{ -599,-1488,-1488,-1488,-1488}}, -/* CG.U..UG */ -{{ -50, -809, -739, -809, -859},{ -859,-1618,-1548,-1618,-1668},{ -529,-1288,-1218,-1288,-1338},{ -859,-1618,-1548,-1618,-1668},{ -409,-1168,-1098,-1168,-1218}} -}, -{ -/* CG.@..AU */ -{{ 0, 0, 0, 0, 0},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50}}, -/* CG.A..AU */ -{{ -50,-1029, -949,-1029,-1029},{ -479,-1458,-1378,-1458,-1458},{ -309,-1288,-1208,-1288,-1288},{ -389,-1368,-1288,-1368,-1368},{ -379,-1358,-1278,-1358,-1358}}, -/* CG.C..AU */ -{{ -50, -519, -449, -519, -669},{ -649,-1118,-1048,-1118,-1268},{ -289, -758, -688, -758, -908},{ -739,-1208,-1138,-1208,-1358},{ -379, -848, -778, -848, -998}}, -/* CG.G..AU */ -{{ -50, -939, -939, -939, -939},{ -649,-1538,-1538,-1538,-1538},{ -289,-1178,-1178,-1178,-1178},{ -739,-1628,-1628,-1628,-1628},{ -379,-1268,-1268,-1268,-1268}}, -/* CG.U..AU */ -{{ -50, -809, -739, -809, -859},{ -649,-1408,-1338,-1408,-1458},{ -289,-1048, -978,-1048,-1098},{ -739,-1498,-1428,-1498,-1548},{ -379,-1138,-1068,-1138,-1188}} -}, -{ -/* CG.@..UA */ -{{ 0, 0, 0, 0, 0},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50}}, -/* CG.A..UA */ -{{ -50,-1029, -949,-1029,-1029},{ -449,-1428,-1348,-1428,-1428},{ -479,-1458,-1378,-1458,-1458},{ -429,-1408,-1328,-1408,-1408},{ -329,-1308,-1228,-1308,-1308}}, -/* CG.C..UA */ -{{ -50, -519, -449, -519, -669},{ -679,-1148,-1078,-1148,-1298},{ -559,-1028, -958,-1028,-1178},{ -729,-1198,-1128,-1198,-1348},{ -189, -658, -588, -658, -808}}, -/* CG.G..UA */ -{{ -50, -939, -939, -939, -939},{ -939,-1828,-1828,-1828,-1828},{ -249,-1138,-1138,-1138,-1138},{ -939,-1828,-1828,-1828,-1828},{ -329,-1218,-1218,-1218,-1218}}, -/* CG.U..UA */ -{{ -50, -809, -739, -809, -859},{ -639,-1398,-1328,-1398,-1448},{ -229, -988, -918, -988,-1038},{ -729,-1488,-1418,-1488,-1538},{ -190, -949, -879, -949, -999}} -}, -{ -/* CG.@.. @ */ -{{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50}}, -/* CG.A.. @ */ -{{ -100,-1079, -999,-1079,-1079},{ -100,-1079, -999,-1079,-1079},{ -100,-1079, -999,-1079,-1079},{ -100,-1079, -999,-1079,-1079},{ -100,-1079, -999,-1079,-1079}}, -/* CG.C.. @ */ -{{ -100, -569, -499, -569, -719},{ -100, -569, -499, -569, -719},{ -100, -569, -499, -569, -719},{ -100, -569, -499, -569, -719},{ -100, -569, -499, -569, -719}}, -/* CG.G.. @ */ -{{ -100, -989, -989, -989, -989},{ -100, -989, -989, -989, -989},{ -100, -989, -989, -989, -989},{ -100, -989, -989, -989, -989},{ -100, -989, -989, -989, -989}}, -/* CG.U.. @ */ -{{ -100, -859, -789, -859, -909},{ -100, -859, -789, -859, -909},{ -100, -859, -789, -859, -909},{ -100, -859, -789, -859, -909},{ -100, -859, -789, -859, -909}} -} -}, -{ /* noPair */ {{{0}}}, -{ -/* GC.@..CG */ -{{ 0, 0, 0, 0, 0},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50}}, -/* GC.A..CG */ -{{ -50, -519, -879, -559, -879},{-1079,-1548,-1908,-1588,-1908},{ -569,-1038,-1398,-1078,-1398},{ -989,-1458,-1818,-1498,-1818},{ -859,-1328,-1688,-1368,-1688}}, -/* GC.C..CG */ -{{ -50, -719, -309, -309, -389},{ -999,-1668,-1258,-1258,-1338},{ -499,-1168, -758, -758, -838},{ -989,-1658,-1248,-1248,-1328},{ -789,-1458,-1048,-1048,-1128}}, -/* GC.G..CG */ -{{ -50, -709, -739, -619, -739},{-1079,-1738,-1768,-1648,-1768},{ -569,-1228,-1258,-1138,-1258},{ -989,-1648,-1678,-1558,-1678},{ -859,-1518,-1548,-1428,-1548}}, -/* GC.U..CG */ -{{ -50, -499, -499, -499, -569},{-1079,-1528,-1528,-1528,-1598},{ -719,-1168,-1168,-1168,-1238},{ -989,-1438,-1438,-1438,-1508},{ -909,-1358,-1358,-1358,-1428}} -}, -{ -/* GC.@..GC */ -{{ 0, 0, 0, 0, 0},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50}}, -/* GC.A..GC */ -{{ -50, -519, -879, -559, -879},{ -569,-1038,-1398,-1078,-1398},{ -769,-1238,-1598,-1278,-1598},{ -759,-1228,-1588,-1268,-1588},{ -549,-1018,-1378,-1058,-1378}}, -/* GC.C..GC */ -{{ -50, -719, -309, -309, -389},{ -929,-1598,-1188,-1188,-1268},{ -359,-1028, -618, -618, -698},{ -789,-1458,-1048,-1048,-1128},{ -549,-1218, -808, -808, -888}}, -/* GC.G..GC */ -{{ -50, -709, -739, -619, -739},{ -609,-1268,-1298,-1178,-1298},{ -359,-1018,-1048, -928,-1048},{ -669,-1328,-1358,-1238,-1358},{ -549,-1208,-1238,-1118,-1238}}, -/* GC.U..GC */ -{{ -50, -499, -499, -499, -569},{ -929,-1378,-1378,-1378,-1448},{ -439, -888, -888, -888, -958},{ -789,-1238,-1238,-1238,-1308},{ -619,-1068,-1068,-1068,-1138}} -}, -{ -/* GC.@..GU */ -{{ 0, 0, 0, 0, 0},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50}}, -/* GC.A..GU */ -{{ -50, -519, -879, -559, -879},{ -479, -948,-1308, -988,-1308},{ -309, -778,-1138, -818,-1138},{ -389, -858,-1218, -898,-1218},{ -379, -848,-1208, -888,-1208}}, -/* GC.C..GU */ -{{ -50, -719, -309, -309, -389},{ -649,-1318, -908, -908, -988},{ -289, -958, -548, -548, -628},{ -739,-1408, -998, -998,-1078},{ -379,-1048, -638, -638, -718}}, -/* GC.G..GU */ -{{ -50, -709, -739, -619, -739},{ -649,-1308,-1338,-1218,-1338},{ -289, -948, -978, -858, -978},{ -739,-1398,-1428,-1308,-1428},{ -379,-1038,-1068, -948,-1068}}, -/* GC.U..GU */ -{{ -50, -499, -499, -499, -569},{ -649,-1098,-1098,-1098,-1168},{ -289, -738, -738, -738, -808},{ -739,-1188,-1188,-1188,-1258},{ -379, -828, -828, -828, -898}} -}, -{ -/* GC.@..UG */ -{{ 0, 0, 0, 0, 0},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50}}, -/* GC.A..UG */ -{{ -50, -519, -879, -559, -879},{ -769,-1238,-1598,-1278,-1598},{ -529, -998,-1358,-1038,-1358},{ -709,-1178,-1538,-1218,-1538},{ -599,-1068,-1428,-1108,-1428}}, -/* GC.C..UG */ -{{ -50, -719, -309, -309, -389},{ -839,-1508,-1098,-1098,-1178},{ -529,-1198, -788, -788, -868},{ -859,-1528,-1118,-1118,-1198},{ -489,-1158, -748, -748, -828}}, -/* GC.G..UG */ -{{ -50, -709, -739, -619, -739},{-1009,-1668,-1698,-1578,-1698},{ -409,-1068,-1098, -978,-1098},{ -969,-1628,-1658,-1538,-1658},{ -599,-1258,-1288,-1168,-1288}}, -/* GC.U..UG */ -{{ -50, -499, -499, -499, -569},{ -859,-1308,-1308,-1308,-1378},{ -529, -978, -978, -978,-1048},{ -859,-1308,-1308,-1308,-1378},{ -409, -858, -858, -858, -928}} -}, -{ -/* GC.@..AU */ -{{ 0, 0, 0, 0, 0},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50}}, -/* GC.A..AU */ -{{ -50, -519, -879, -559, -879},{ -479, -948,-1308, -988,-1308},{ -309, -778,-1138, -818,-1138},{ -389, -858,-1218, -898,-1218},{ -379, -848,-1208, -888,-1208}}, -/* GC.C..AU */ -{{ -50, -719, -309, -309, -389},{ -649,-1318, -908, -908, -988},{ -289, -958, -548, -548, -628},{ -739,-1408, -998, -998,-1078},{ -379,-1048, -638, -638, -718}}, -/* GC.G..AU */ -{{ -50, -709, -739, -619, -739},{ -649,-1308,-1338,-1218,-1338},{ -289, -948, -978, -858, -978},{ -739,-1398,-1428,-1308,-1428},{ -379,-1038,-1068, -948,-1068}}, -/* GC.U..AU */ -{{ -50, -499, -499, -499, -569},{ -649,-1098,-1098,-1098,-1168},{ -289, -738, -738, -738, -808},{ -739,-1188,-1188,-1188,-1258},{ -379, -828, -828, -828, -898}} -}, -{ -/* GC.@..UA */ -{{ 0, 0, 0, 0, 0},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50}}, -/* GC.A..UA */ -{{ -50, -519, -879, -559, -879},{ -449, -918,-1278, -958,-1278},{ -479, -948,-1308, -988,-1308},{ -429, -898,-1258, -938,-1258},{ -329, -798,-1158, -838,-1158}}, -/* GC.C..UA */ -{{ -50, -719, -309, -309, -389},{ -679,-1348, -938, -938,-1018},{ -559,-1228, -818, -818, -898},{ -729,-1398, -988, -988,-1068},{ -189, -858, -448, -448, -528}}, -/* GC.G..UA */ -{{ -50, -709, -739, -619, -739},{ -939,-1598,-1628,-1508,-1628},{ -249, -908, -938, -818, -938},{ -939,-1598,-1628,-1508,-1628},{ -329, -988,-1018, -898,-1018}}, -/* GC.U..UA */ -{{ -50, -499, -499, -499, -569},{ -639,-1088,-1088,-1088,-1158},{ -229, -678, -678, -678, -748},{ -729,-1178,-1178,-1178,-1248},{ -190, -639, -639, -639, -709}} -}, -{ -/* GC.@.. @ */ -{{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50}}, -/* GC.A.. @ */ -{{ -100, -569, -929, -609, -929},{ -100, -569, -929, -609, -929},{ -100, -569, -929, -609, -929},{ -100, -569, -929, -609, -929},{ -100, -569, -929, -609, -929}}, -/* GC.C.. @ */ -{{ -100, -769, -359, -359, -439},{ -100, -769, -359, -359, -439},{ -100, -769, -359, -359, -439},{ -100, -769, -359, -359, -439},{ -100, -769, -359, -359, -439}}, -/* GC.G.. @ */ -{{ -100, -759, -789, -669, -789},{ -100, -759, -789, -669, -789},{ -100, -759, -789, -669, -789},{ -100, -759, -789, -669, -789},{ -100, -759, -789, -669, -789}}, -/* GC.U.. @ */ -{{ -100, -549, -549, -549, -619},{ -100, -549, -549, -549, -619},{ -100, -549, -549, -549, -619},{ -100, -549, -549, -549, -619},{ -100, -549, -549, -549, -619}} -} -}, -{ /* noPair */ {{{0}}}, -{ -/* GU.@..CG */ -{{ 0, 0, 0, 0, 0},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50}}, -/* GU.A..CG */ -{{ -50, -429, -599, -599, -599},{-1079,-1458,-1628,-1628,-1628},{ -569, -948,-1118,-1118,-1118},{ -989,-1368,-1538,-1538,-1538},{ -859,-1238,-1408,-1408,-1408}}, -/* GU.C..CG */ -{{ -50, -259, -239, -239, -239},{ -999,-1208,-1188,-1188,-1188},{ -499, -708, -688, -688, -688},{ -989,-1198,-1178,-1178,-1178},{ -789, -998, -978, -978, -978}}, -/* GU.G..CG */ -{{ -50, -339, -689, -689, -689},{-1079,-1368,-1718,-1718,-1718},{ -569, -858,-1208,-1208,-1208},{ -989,-1278,-1628,-1628,-1628},{ -859,-1148,-1498,-1498,-1498}}, -/* GU.U..CG */ -{{ -50, -329, -329, -329, -329},{-1079,-1358,-1358,-1358,-1358},{ -719, -998, -998, -998, -998},{ -989,-1268,-1268,-1268,-1268},{ -909,-1188,-1188,-1188,-1188}} -}, -{ -/* GU.@..GC */ -{{ 0, 0, 0, 0, 0},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50}}, -/* GU.A..GC */ -{{ -50, -429, -599, -599, -599},{ -569, -948,-1118,-1118,-1118},{ -769,-1148,-1318,-1318,-1318},{ -759,-1138,-1308,-1308,-1308},{ -549, -928,-1098,-1098,-1098}}, -/* GU.C..GC */ -{{ -50, -259, -239, -239, -239},{ -929,-1138,-1118,-1118,-1118},{ -359, -568, -548, -548, -548},{ -789, -998, -978, -978, -978},{ -549, -758, -738, -738, -738}}, -/* GU.G..GC */ -{{ -50, -339, -689, -689, -689},{ -609, -898,-1248,-1248,-1248},{ -359, -648, -998, -998, -998},{ -669, -958,-1308,-1308,-1308},{ -549, -838,-1188,-1188,-1188}}, -/* GU.U..GC */ -{{ -50, -329, -329, -329, -329},{ -929,-1208,-1208,-1208,-1208},{ -439, -718, -718, -718, -718},{ -789,-1068,-1068,-1068,-1068},{ -619, -898, -898, -898, -898}} -}, -{ -/* GU.@..GU */ -{{ 0, 0, 0, 0, 0},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50}}, -/* GU.A..GU */ -{{ -50, -429, -599, -599, -599},{ -479, -858,-1028,-1028,-1028},{ -309, -688, -858, -858, -858},{ -389, -768, -938, -938, -938},{ -379, -758, -928, -928, -928}}, -/* GU.C..GU */ -{{ -50, -259, -239, -239, -239},{ -649, -858, -838, -838, -838},{ -289, -498, -478, -478, -478},{ -739, -948, -928, -928, -928},{ -379, -588, -568, -568, -568}}, -/* GU.G..GU */ -{{ -50, -339, -689, -689, -689},{ -649, -938,-1288,-1288,-1288},{ -289, -578, -928, -928, -928},{ -739,-1028,-1378,-1378,-1378},{ -379, -668,-1018,-1018,-1018}}, -/* GU.U..GU */ -{{ -50, -329, -329, -329, -329},{ -649, -928, -928, -928, -928},{ -289, -568, -568, -568, -568},{ -739,-1018,-1018,-1018,-1018},{ -379, -658, -658, -658, -658}} -}, -{ -/* GU.@..UG */ -{{ 0, 0, 0, 0, 0},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50}}, -/* GU.A..UG */ -{{ -50, -429, -599, -599, -599},{ -769,-1148,-1318,-1318,-1318},{ -529, -908,-1078,-1078,-1078},{ -709,-1088,-1258,-1258,-1258},{ -599, -978,-1148,-1148,-1148}}, -/* GU.C..UG */ -{{ -50, -259, -239, -239, -239},{ -839,-1048,-1028,-1028,-1028},{ -529, -738, -718, -718, -718},{ -859,-1068,-1048,-1048,-1048},{ -489, -698, -678, -678, -678}}, -/* GU.G..UG */ -{{ -50, -339, -689, -689, -689},{-1009,-1298,-1648,-1648,-1648},{ -409, -698,-1048,-1048,-1048},{ -969,-1258,-1608,-1608,-1608},{ -599, -888,-1238,-1238,-1238}}, -/* GU.U..UG */ -{{ -50, -329, -329, -329, -329},{ -859,-1138,-1138,-1138,-1138},{ -529, -808, -808, -808, -808},{ -859,-1138,-1138,-1138,-1138},{ -409, -688, -688, -688, -688}} -}, -{ -/* GU.@..AU */ -{{ 0, 0, 0, 0, 0},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50}}, -/* GU.A..AU */ -{{ -50, -429, -599, -599, -599},{ -479, -858,-1028,-1028,-1028},{ -309, -688, -858, -858, -858},{ -389, -768, -938, -938, -938},{ -379, -758, -928, -928, -928}}, -/* GU.C..AU */ -{{ -50, -259, -239, -239, -239},{ -649, -858, -838, -838, -838},{ -289, -498, -478, -478, -478},{ -739, -948, -928, -928, -928},{ -379, -588, -568, -568, -568}}, -/* GU.G..AU */ -{{ -50, -339, -689, -689, -689},{ -649, -938,-1288,-1288,-1288},{ -289, -578, -928, -928, -928},{ -739,-1028,-1378,-1378,-1378},{ -379, -668,-1018,-1018,-1018}}, -/* GU.U..AU */ -{{ -50, -329, -329, -329, -329},{ -649, -928, -928, -928, -928},{ -289, -568, -568, -568, -568},{ -739,-1018,-1018,-1018,-1018},{ -379, -658, -658, -658, -658}} -}, -{ -/* GU.@..UA */ -{{ 0, 0, 0, 0, 0},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50}}, -/* GU.A..UA */ -{{ -50, -429, -599, -599, -599},{ -449, -828, -998, -998, -998},{ -479, -858,-1028,-1028,-1028},{ -429, -808, -978, -978, -978},{ -329, -708, -878, -878, -878}}, -/* GU.C..UA */ -{{ -50, -259, -239, -239, -239},{ -679, -888, -868, -868, -868},{ -559, -768, -748, -748, -748},{ -729, -938, -918, -918, -918},{ -189, -398, -378, -378, -378}}, -/* GU.G..UA */ -{{ -50, -339, -689, -689, -689},{ -939,-1228,-1578,-1578,-1578},{ -249, -538, -888, -888, -888},{ -939,-1228,-1578,-1578,-1578},{ -329, -618, -968, -968, -968}}, -/* GU.U..UA */ -{{ -50, -329, -329, -329, -329},{ -639, -918, -918, -918, -918},{ -229, -508, -508, -508, -508},{ -729,-1008,-1008,-1008,-1008},{ -190, -469, -469, -469, -469}} -}, -{ -/* GU.@.. @ */ -{{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50}}, -/* GU.A.. @ */ -{{ -100, -479, -649, -649, -649},{ -100, -479, -649, -649, -649},{ -100, -479, -649, -649, -649},{ -100, -479, -649, -649, -649},{ -100, -479, -649, -649, -649}}, -/* GU.C.. @ */ -{{ -100, -309, -289, -289, -289},{ -100, -309, -289, -289, -289},{ -100, -309, -289, -289, -289},{ -100, -309, -289, -289, -289},{ -100, -309, -289, -289, -289}}, -/* GU.G.. @ */ -{{ -100, -389, -739, -739, -739},{ -100, -389, -739, -739, -739},{ -100, -389, -739, -739, -739},{ -100, -389, -739, -739, -739},{ -100, -389, -739, -739, -739}}, -/* GU.U.. @ */ -{{ -100, -379, -379, -379, -379},{ -100, -379, -379, -379, -379},{ -100, -379, -379, -379, -379},{ -100, -379, -379, -379, -379},{ -100, -379, -379, -379, -379}} -} -}, -{ /* noPair */ {{{0}}}, -{ -/* UG.@..CG */ -{{ 0, 0, 0, 0, 0},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50}}, -/* UG.A..CG */ -{{ -50, -719, -789, -959, -809},{-1079,-1748,-1818,-1988,-1838},{ -569,-1238,-1308,-1478,-1328},{ -989,-1658,-1728,-1898,-1748},{ -859,-1528,-1598,-1768,-1618}}, -/* UG.C..CG */ -{{ -50, -479, -479, -359, -479},{ -999,-1428,-1428,-1308,-1428},{ -499, -928, -928, -808, -928},{ -989,-1418,-1418,-1298,-1418},{ -789,-1218,-1218,-1098,-1218}}, -/* UG.G..CG */ -{{ -50, -659, -809, -919, -809},{-1079,-1688,-1838,-1948,-1838},{ -569,-1178,-1328,-1438,-1328},{ -989,-1598,-1748,-1858,-1748},{ -859,-1468,-1618,-1728,-1618}}, -/* UG.U..CG */ -{{ -50, -549, -439, -549, -359},{-1079,-1578,-1468,-1578,-1388},{ -719,-1218,-1108,-1218,-1028},{ -989,-1488,-1378,-1488,-1298},{ -909,-1408,-1298,-1408,-1218}} -}, -{ -/* UG.@..GC */ -{{ 0, 0, 0, 0, 0},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50}}, -/* UG.A..GC */ -{{ -50, -719, -789, -959, -809},{ -569,-1238,-1308,-1478,-1328},{ -769,-1438,-1508,-1678,-1528},{ -759,-1428,-1498,-1668,-1518},{ -549,-1218,-1288,-1458,-1308}}, -/* UG.C..GC */ -{{ -50, -479, -479, -359, -479},{ -929,-1358,-1358,-1238,-1358},{ -359, -788, -788, -668, -788},{ -789,-1218,-1218,-1098,-1218},{ -549, -978, -978, -858, -978}}, -/* UG.G..GC */ -{{ -50, -659, -809, -919, -809},{ -609,-1218,-1368,-1478,-1368},{ -359, -968,-1118,-1228,-1118},{ -669,-1278,-1428,-1538,-1428},{ -549,-1158,-1308,-1418,-1308}}, -/* UG.U..GC */ -{{ -50, -549, -439, -549, -359},{ -929,-1428,-1318,-1428,-1238},{ -439, -938, -828, -938, -748},{ -789,-1288,-1178,-1288,-1098},{ -619,-1118,-1008,-1118, -928}} -}, -{ -/* UG.@..GU */ -{{ 0, 0, 0, 0, 0},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50}}, -/* UG.A..GU */ -{{ -50, -719, -789, -959, -809},{ -479,-1148,-1218,-1388,-1238},{ -309, -978,-1048,-1218,-1068},{ -389,-1058,-1128,-1298,-1148},{ -379,-1048,-1118,-1288,-1138}}, -/* UG.C..GU */ -{{ -50, -479, -479, -359, -479},{ -649,-1078,-1078, -958,-1078},{ -289, -718, -718, -598, -718},{ -739,-1168,-1168,-1048,-1168},{ -379, -808, -808, -688, -808}}, -/* UG.G..GU */ -{{ -50, -659, -809, -919, -809},{ -649,-1258,-1408,-1518,-1408},{ -289, -898,-1048,-1158,-1048},{ -739,-1348,-1498,-1608,-1498},{ -379, -988,-1138,-1248,-1138}}, -/* UG.U..GU */ -{{ -50, -549, -439, -549, -359},{ -649,-1148,-1038,-1148, -958},{ -289, -788, -678, -788, -598},{ -739,-1238,-1128,-1238,-1048},{ -379, -878, -768, -878, -688}} -}, -{ -/* UG.@..UG */ -{{ 0, 0, 0, 0, 0},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50}}, -/* UG.A..UG */ -{{ -50, -719, -789, -959, -809},{ -769,-1438,-1508,-1678,-1528},{ -529,-1198,-1268,-1438,-1288},{ -709,-1378,-1448,-1618,-1468},{ -599,-1268,-1338,-1508,-1358}}, -/* UG.C..UG */ -{{ -50, -479, -479, -359, -479},{ -839,-1268,-1268,-1148,-1268},{ -529, -958, -958, -838, -958},{ -859,-1288,-1288,-1168,-1288},{ -489, -918, -918, -798, -918}}, -/* UG.G..UG */ -{{ -50, -659, -809, -919, -809},{-1009,-1618,-1768,-1878,-1768},{ -409,-1018,-1168,-1278,-1168},{ -969,-1578,-1728,-1838,-1728},{ -599,-1208,-1358,-1468,-1358}}, -/* UG.U..UG */ -{{ -50, -549, -439, -549, -359},{ -859,-1358,-1248,-1358,-1168},{ -529,-1028, -918,-1028, -838},{ -859,-1358,-1248,-1358,-1168},{ -409, -908, -798, -908, -718}} -}, -{ -/* UG.@..AU */ -{{ 0, 0, 0, 0, 0},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50}}, -/* UG.A..AU */ -{{ -50, -719, -789, -959, -809},{ -479,-1148,-1218,-1388,-1238},{ -309, -978,-1048,-1218,-1068},{ -389,-1058,-1128,-1298,-1148},{ -379,-1048,-1118,-1288,-1138}}, -/* UG.C..AU */ -{{ -50, -479, -479, -359, -479},{ -649,-1078,-1078, -958,-1078},{ -289, -718, -718, -598, -718},{ -739,-1168,-1168,-1048,-1168},{ -379, -808, -808, -688, -808}}, -/* UG.G..AU */ -{{ -50, -659, -809, -919, -809},{ -649,-1258,-1408,-1518,-1408},{ -289, -898,-1048,-1158,-1048},{ -739,-1348,-1498,-1608,-1498},{ -379, -988,-1138,-1248,-1138}}, -/* UG.U..AU */ -{{ -50, -549, -439, -549, -359},{ -649,-1148,-1038,-1148, -958},{ -289, -788, -678, -788, -598},{ -739,-1238,-1128,-1238,-1048},{ -379, -878, -768, -878, -688}} -}, -{ -/* UG.@..UA */ -{{ 0, 0, 0, 0, 0},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50}}, -/* UG.A..UA */ -{{ -50, -719, -789, -959, -809},{ -449,-1118,-1188,-1358,-1208},{ -479,-1148,-1218,-1388,-1238},{ -429,-1098,-1168,-1338,-1188},{ -329, -998,-1068,-1238,-1088}}, -/* UG.C..UA */ -{{ -50, -479, -479, -359, -479},{ -679,-1108,-1108, -988,-1108},{ -559, -988, -988, -868, -988},{ -729,-1158,-1158,-1038,-1158},{ -189, -618, -618, -498, -618}}, -/* UG.G..UA */ -{{ -50, -659, -809, -919, -809},{ -939,-1548,-1698,-1808,-1698},{ -249, -858,-1008,-1118,-1008},{ -939,-1548,-1698,-1808,-1698},{ -329, -938,-1088,-1198,-1088}}, -/* UG.U..UA */ -{{ -50, -549, -439, -549, -359},{ -639,-1138,-1028,-1138, -948},{ -229, -728, -618, -728, -538},{ -729,-1228,-1118,-1228,-1038},{ -190, -689, -579, -689, -499}} -}, -{ -/* UG.@.. @ */ -{{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50}}, -/* UG.A.. @ */ -{{ -100, -769, -839,-1009, -859},{ -100, -769, -839,-1009, -859},{ -100, -769, -839,-1009, -859},{ -100, -769, -839,-1009, -859},{ -100, -769, -839,-1009, -859}}, -/* UG.C.. @ */ -{{ -100, -529, -529, -409, -529},{ -100, -529, -529, -409, -529},{ -100, -529, -529, -409, -529},{ -100, -529, -529, -409, -529},{ -100, -529, -529, -409, -529}}, -/* UG.G.. @ */ -{{ -100, -709, -859, -969, -859},{ -100, -709, -859, -969, -859},{ -100, -709, -859, -969, -859},{ -100, -709, -859, -969, -859},{ -100, -709, -859, -969, -859}}, -/* UG.U.. @ */ -{{ -100, -599, -489, -599, -409},{ -100, -599, -489, -599, -409},{ -100, -599, -489, -599, -409},{ -100, -599, -489, -599, -409},{ -100, -599, -489, -599, -409}} -} -}, -{ /* noPair */ {{{0}}}, -{ -/* AU.@..CG */ -{{ 0, 0, 0, 0, 0},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50}}, -/* AU.A..CG */ -{{ -50, -429, -599, -599, -599},{-1079,-1458,-1628,-1628,-1628},{ -569, -948,-1118,-1118,-1118},{ -989,-1368,-1538,-1538,-1538},{ -859,-1238,-1408,-1408,-1408}}, -/* AU.C..CG */ -{{ -50, -259, -239, -239, -239},{ -999,-1208,-1188,-1188,-1188},{ -499, -708, -688, -688, -688},{ -989,-1198,-1178,-1178,-1178},{ -789, -998, -978, -978, -978}}, -/* AU.G..CG */ -{{ -50, -339, -689, -689, -689},{-1079,-1368,-1718,-1718,-1718},{ -569, -858,-1208,-1208,-1208},{ -989,-1278,-1628,-1628,-1628},{ -859,-1148,-1498,-1498,-1498}}, -/* AU.U..CG */ -{{ -50, -329, -329, -329, -329},{-1079,-1358,-1358,-1358,-1358},{ -719, -998, -998, -998, -998},{ -989,-1268,-1268,-1268,-1268},{ -909,-1188,-1188,-1188,-1188}} -}, -{ -/* AU.@..GC */ -{{ 0, 0, 0, 0, 0},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50}}, -/* AU.A..GC */ -{{ -50, -429, -599, -599, -599},{ -569, -948,-1118,-1118,-1118},{ -769,-1148,-1318,-1318,-1318},{ -759,-1138,-1308,-1308,-1308},{ -549, -928,-1098,-1098,-1098}}, -/* AU.C..GC */ -{{ -50, -259, -239, -239, -239},{ -929,-1138,-1118,-1118,-1118},{ -359, -568, -548, -548, -548},{ -789, -998, -978, -978, -978},{ -549, -758, -738, -738, -738}}, -/* AU.G..GC */ -{{ -50, -339, -689, -689, -689},{ -609, -898,-1248,-1248,-1248},{ -359, -648, -998, -998, -998},{ -669, -958,-1308,-1308,-1308},{ -549, -838,-1188,-1188,-1188}}, -/* AU.U..GC */ -{{ -50, -329, -329, -329, -329},{ -929,-1208,-1208,-1208,-1208},{ -439, -718, -718, -718, -718},{ -789,-1068,-1068,-1068,-1068},{ -619, -898, -898, -898, -898}} -}, -{ -/* AU.@..GU */ -{{ 0, 0, 0, 0, 0},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50}}, -/* AU.A..GU */ -{{ -50, -429, -599, -599, -599},{ -479, -858,-1028,-1028,-1028},{ -309, -688, -858, -858, -858},{ -389, -768, -938, -938, -938},{ -379, -758, -928, -928, -928}}, -/* AU.C..GU */ -{{ -50, -259, -239, -239, -239},{ -649, -858, -838, -838, -838},{ -289, -498, -478, -478, -478},{ -739, -948, -928, -928, -928},{ -379, -588, -568, -568, -568}}, -/* AU.G..GU */ -{{ -50, -339, -689, -689, -689},{ -649, -938,-1288,-1288,-1288},{ -289, -578, -928, -928, -928},{ -739,-1028,-1378,-1378,-1378},{ -379, -668,-1018,-1018,-1018}}, -/* AU.U..GU */ -{{ -50, -329, -329, -329, -329},{ -649, -928, -928, -928, -928},{ -289, -568, -568, -568, -568},{ -739,-1018,-1018,-1018,-1018},{ -379, -658, -658, -658, -658}} -}, -{ -/* AU.@..UG */ -{{ 0, 0, 0, 0, 0},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50}}, -/* AU.A..UG */ -{{ -50, -429, -599, -599, -599},{ -769,-1148,-1318,-1318,-1318},{ -529, -908,-1078,-1078,-1078},{ -709,-1088,-1258,-1258,-1258},{ -599, -978,-1148,-1148,-1148}}, -/* AU.C..UG */ -{{ -50, -259, -239, -239, -239},{ -839,-1048,-1028,-1028,-1028},{ -529, -738, -718, -718, -718},{ -859,-1068,-1048,-1048,-1048},{ -489, -698, -678, -678, -678}}, -/* AU.G..UG */ -{{ -50, -339, -689, -689, -689},{-1009,-1298,-1648,-1648,-1648},{ -409, -698,-1048,-1048,-1048},{ -969,-1258,-1608,-1608,-1608},{ -599, -888,-1238,-1238,-1238}}, -/* AU.U..UG */ -{{ -50, -329, -329, -329, -329},{ -859,-1138,-1138,-1138,-1138},{ -529, -808, -808, -808, -808},{ -859,-1138,-1138,-1138,-1138},{ -409, -688, -688, -688, -688}} -}, -{ -/* AU.@..AU */ -{{ 0, 0, 0, 0, 0},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50}}, -/* AU.A..AU */ -{{ -50, -429, -599, -599, -599},{ -479, -858,-1028,-1028,-1028},{ -309, -688, -858, -858, -858},{ -389, -768, -938, -938, -938},{ -379, -758, -928, -928, -928}}, -/* AU.C..AU */ -{{ -50, -259, -239, -239, -239},{ -649, -858, -838, -838, -838},{ -289, -498, -478, -478, -478},{ -739, -948, -928, -928, -928},{ -379, -588, -568, -568, -568}}, -/* AU.G..AU */ -{{ -50, -339, -689, -689, -689},{ -649, -938,-1288,-1288,-1288},{ -289, -578, -928, -928, -928},{ -739,-1028,-1378,-1378,-1378},{ -379, -668,-1018,-1018,-1018}}, -/* AU.U..AU */ -{{ -50, -329, -329, -329, -329},{ -649, -928, -928, -928, -928},{ -289, -568, -568, -568, -568},{ -739,-1018,-1018,-1018,-1018},{ -379, -658, -658, -658, -658}} -}, -{ -/* AU.@..UA */ -{{ 0, 0, 0, 0, 0},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50}}, -/* AU.A..UA */ -{{ -50, -429, -599, -599, -599},{ -449, -828, -998, -998, -998},{ -479, -858,-1028,-1028,-1028},{ -429, -808, -978, -978, -978},{ -329, -708, -878, -878, -878}}, -/* AU.C..UA */ -{{ -50, -259, -239, -239, -239},{ -679, -888, -868, -868, -868},{ -559, -768, -748, -748, -748},{ -729, -938, -918, -918, -918},{ -189, -398, -378, -378, -378}}, -/* AU.G..UA */ -{{ -50, -339, -689, -689, -689},{ -939,-1228,-1578,-1578,-1578},{ -249, -538, -888, -888, -888},{ -939,-1228,-1578,-1578,-1578},{ -329, -618, -968, -968, -968}}, -/* AU.U..UA */ -{{ -50, -329, -329, -329, -329},{ -639, -918, -918, -918, -918},{ -229, -508, -508, -508, -508},{ -729,-1008,-1008,-1008,-1008},{ -190, -469, -469, -469, -469}} -}, -{ -/* AU.@.. @ */ -{{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50}}, -/* AU.A.. @ */ -{{ -100, -479, -649, -649, -649},{ -100, -479, -649, -649, -649},{ -100, -479, -649, -649, -649},{ -100, -479, -649, -649, -649},{ -100, -479, -649, -649, -649}}, -/* AU.C.. @ */ -{{ -100, -309, -289, -289, -289},{ -100, -309, -289, -289, -289},{ -100, -309, -289, -289, -289},{ -100, -309, -289, -289, -289},{ -100, -309, -289, -289, -289}}, -/* AU.G.. @ */ -{{ -100, -389, -739, -739, -739},{ -100, -389, -739, -739, -739},{ -100, -389, -739, -739, -739},{ -100, -389, -739, -739, -739},{ -100, -389, -739, -739, -739}}, -/* AU.U.. @ */ -{{ -100, -379, -379, -379, -379},{ -100, -379, -379, -379, -379},{ -100, -379, -379, -379, -379},{ -100, -379, -379, -379, -379},{ -100, -379, -379, -379, -379}} -} -}, -{ /* noPair */ {{{0}}}, -{ -/* UA.@..CG */ -{{ 0, 0, 0, 0, 0},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50}}, -/* UA.A..CG */ -{{ -50, -399, -629, -889, -589},{-1079,-1428,-1658,-1918,-1618},{ -569, -918,-1148,-1408,-1108},{ -989,-1338,-1568,-1828,-1528},{ -859,-1208,-1438,-1698,-1398}}, -/* UA.C..CG */ -{{ -50, -429, -509, -199, -179},{ -999,-1378,-1458,-1148,-1128},{ -499, -878, -958, -648, -628},{ -989,-1368,-1448,-1138,-1118},{ -789,-1168,-1248, -938, -918}}, -/* UA.G..CG */ -{{ -50, -379, -679, -889, -679},{-1079,-1408,-1708,-1918,-1708},{ -569, -898,-1198,-1408,-1198},{ -989,-1318,-1618,-1828,-1618},{ -859,-1188,-1488,-1698,-1488}}, -/* UA.U..CG */ -{{ -50, -279, -139, -279, -140},{-1079,-1308,-1168,-1308,-1169},{ -719, -948, -808, -948, -809},{ -989,-1218,-1078,-1218,-1079},{ -909,-1138, -998,-1138, -999}} -}, -{ -/* UA.@..GC */ -{{ 0, 0, 0, 0, 0},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50}}, -/* UA.A..GC */ -{{ -50, -399, -629, -889, -589},{ -569, -918,-1148,-1408,-1108},{ -769,-1118,-1348,-1608,-1308},{ -759,-1108,-1338,-1598,-1298},{ -549, -898,-1128,-1388,-1088}}, -/* UA.C..GC */ -{{ -50, -429, -509, -199, -179},{ -929,-1308,-1388,-1078,-1058},{ -359, -738, -818, -508, -488},{ -789,-1168,-1248, -938, -918},{ -549, -928,-1008, -698, -678}}, -/* UA.G..GC */ -{{ -50, -379, -679, -889, -679},{ -609, -938,-1238,-1448,-1238},{ -359, -688, -988,-1198, -988},{ -669, -998,-1298,-1508,-1298},{ -549, -878,-1178,-1388,-1178}}, -/* UA.U..GC */ -{{ -50, -279, -139, -279, -140},{ -929,-1158,-1018,-1158,-1019},{ -439, -668, -528, -668, -529},{ -789,-1018, -878,-1018, -879},{ -619, -848, -708, -848, -709}} -}, -{ -/* UA.@..GU */ -{{ 0, 0, 0, 0, 0},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50}}, -/* UA.A..GU */ -{{ -50, -399, -629, -889, -589},{ -479, -828,-1058,-1318,-1018},{ -309, -658, -888,-1148, -848},{ -389, -738, -968,-1228, -928},{ -379, -728, -958,-1218, -918}}, -/* UA.C..GU */ -{{ -50, -429, -509, -199, -179},{ -649,-1028,-1108, -798, -778},{ -289, -668, -748, -438, -418},{ -739,-1118,-1198, -888, -868},{ -379, -758, -838, -528, -508}}, -/* UA.G..GU */ -{{ -50, -379, -679, -889, -679},{ -649, -978,-1278,-1488,-1278},{ -289, -618, -918,-1128, -918},{ -739,-1068,-1368,-1578,-1368},{ -379, -708,-1008,-1218,-1008}}, -/* UA.U..GU */ -{{ -50, -279, -139, -279, -140},{ -649, -878, -738, -878, -739},{ -289, -518, -378, -518, -379},{ -739, -968, -828, -968, -829},{ -379, -608, -468, -608, -469}} -}, -{ -/* UA.@..UG */ -{{ 0, 0, 0, 0, 0},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50}}, -/* UA.A..UG */ -{{ -50, -399, -629, -889, -589},{ -769,-1118,-1348,-1608,-1308},{ -529, -878,-1108,-1368,-1068},{ -709,-1058,-1288,-1548,-1248},{ -599, -948,-1178,-1438,-1138}}, -/* UA.C..UG */ -{{ -50, -429, -509, -199, -179},{ -839,-1218,-1298, -988, -968},{ -529, -908, -988, -678, -658},{ -859,-1238,-1318,-1008, -988},{ -489, -868, -948, -638, -618}}, -/* UA.G..UG */ -{{ -50, -379, -679, -889, -679},{-1009,-1338,-1638,-1848,-1638},{ -409, -738,-1038,-1248,-1038},{ -969,-1298,-1598,-1808,-1598},{ -599, -928,-1228,-1438,-1228}}, -/* UA.U..UG */ -{{ -50, -279, -139, -279, -140},{ -859,-1088, -948,-1088, -949},{ -529, -758, -618, -758, -619},{ -859,-1088, -948,-1088, -949},{ -409, -638, -498, -638, -499}} -}, -{ -/* UA.@..AU */ -{{ 0, 0, 0, 0, 0},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50}}, -/* UA.A..AU */ -{{ -50, -399, -629, -889, -589},{ -479, -828,-1058,-1318,-1018},{ -309, -658, -888,-1148, -848},{ -389, -738, -968,-1228, -928},{ -379, -728, -958,-1218, -918}}, -/* UA.C..AU */ -{{ -50, -429, -509, -199, -179},{ -649,-1028,-1108, -798, -778},{ -289, -668, -748, -438, -418},{ -739,-1118,-1198, -888, -868},{ -379, -758, -838, -528, -508}}, -/* UA.G..AU */ -{{ -50, -379, -679, -889, -679},{ -649, -978,-1278,-1488,-1278},{ -289, -618, -918,-1128, -918},{ -739,-1068,-1368,-1578,-1368},{ -379, -708,-1008,-1218,-1008}}, -/* UA.U..AU */ -{{ -50, -279, -139, -279, -140},{ -649, -878, -738, -878, -739},{ -289, -518, -378, -518, -379},{ -739, -968, -828, -968, -829},{ -379, -608, -468, -608, -469}} -}, -{ -/* UA.@..UA */ -{{ 0, 0, 0, 0, 0},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50}}, -/* UA.A..UA */ -{{ -50, -399, -629, -889, -589},{ -449, -798,-1028,-1288, -988},{ -479, -828,-1058,-1318,-1018},{ -429, -778,-1008,-1268, -968},{ -329, -678, -908,-1168, -868}}, -/* UA.C..UA */ -{{ -50, -429, -509, -199, -179},{ -679,-1058,-1138, -828, -808},{ -559, -938,-1018, -708, -688},{ -729,-1108,-1188, -878, -858},{ -189, -568, -648, -338, -318}}, -/* UA.G..UA */ -{{ -50, -379, -679, -889, -679},{ -939,-1268,-1568,-1778,-1568},{ -249, -578, -878,-1088, -878},{ -939,-1268,-1568,-1778,-1568},{ -329, -658, -958,-1168, -958}}, -/* UA.U..UA */ -{{ -50, -279, -139, -279, -140},{ -639, -868, -728, -868, -729},{ -229, -458, -318, -458, -319},{ -729, -958, -818, -958, -819},{ -190, -419, -279, -419, -280}} -}, -{ -/* UA.@.. @ */ -{{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50},{ -50, -50, -50, -50, -50}}, -/* UA.A.. @ */ -{{ -100, -449, -679, -939, -639},{ -100, -449, -679, -939, -639},{ -100, -449, -679, -939, -639},{ -100, -449, -679, -939, -639},{ -100, -449, -679, -939, -639}}, -/* UA.C.. @ */ -{{ -100, -479, -559, -249, -229},{ -100, -479, -559, -249, -229},{ -100, -479, -559, -249, -229},{ -100, -479, -559, -249, -229},{ -100, -479, -559, -249, -229}}, -/* UA.G.. @ */ -{{ -100, -429, -729, -939, -729},{ -100, -429, -729, -939, -729},{ -100, -429, -729, -939, -729},{ -100, -429, -729, -939, -729},{ -100, -429, -729, -939, -729}}, -/* UA.U.. @ */ -{{ -100, -329, -189, -329, -190},{ -100, -329, -189, -329, -190},{ -100, -329, -189, -329, -190},{ -100, -329, -189, -329, -190},{ -100, -329, -189, -329, -190}} -} -}, -{ /* noPair */ {{{0}}}, -{ -/* @.@..CG */ -{{ -50, -50, -50, -50, -50},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100}}, -/* @.A..CG */ -{{ -50, -50, -50, -50, -50},{-1079,-1079,-1079,-1079,-1079},{ -569, -569, -569, -569, -569},{ -989, -989, -989, -989, -989},{ -859, -859, -859, -859, -859}}, -/* @.C..CG */ -{{ -50, -50, -50, -50, -50},{ -999, -999, -999, -999, -999},{ -499, -499, -499, -499, -499},{ -989, -989, -989, -989, -989},{ -789, -789, -789, -789, -789}}, -/* @.G..CG */ -{{ -50, -50, -50, -50, -50},{-1079,-1079,-1079,-1079,-1079},{ -569, -569, -569, -569, -569},{ -989, -989, -989, -989, -989},{ -859, -859, -859, -859, -859}}, -/* @.U..CG */ -{{ -50, -50, -50, -50, -50},{-1079,-1079,-1079,-1079,-1079},{ -719, -719, -719, -719, -719},{ -989, -989, -989, -989, -989},{ -909, -909, -909, -909, -909}} -}, -{ -/* @.@..GC */ -{{ -50, -50, -50, -50, -50},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100}}, -/* @.A..GC */ -{{ -50, -50, -50, -50, -50},{ -569, -569, -569, -569, -569},{ -769, -769, -769, -769, -769},{ -759, -759, -759, -759, -759},{ -549, -549, -549, -549, -549}}, -/* @.C..GC */ -{{ -50, -50, -50, -50, -50},{ -929, -929, -929, -929, -929},{ -359, -359, -359, -359, -359},{ -789, -789, -789, -789, -789},{ -549, -549, -549, -549, -549}}, -/* @.G..GC */ -{{ -50, -50, -50, -50, -50},{ -609, -609, -609, -609, -609},{ -359, -359, -359, -359, -359},{ -669, -669, -669, -669, -669},{ -549, -549, -549, -549, -549}}, -/* @.U..GC */ -{{ -50, -50, -50, -50, -50},{ -929, -929, -929, -929, -929},{ -439, -439, -439, -439, -439},{ -789, -789, -789, -789, -789},{ -619, -619, -619, -619, -619}} -}, -{ -/* @.@..GU */ -{{ -50, -50, -50, -50, -50},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100}}, -/* @.A..GU */ -{{ -50, -50, -50, -50, -50},{ -479, -479, -479, -479, -479},{ -309, -309, -309, -309, -309},{ -389, -389, -389, -389, -389},{ -379, -379, -379, -379, -379}}, -/* @.C..GU */ -{{ -50, -50, -50, -50, -50},{ -649, -649, -649, -649, -649},{ -289, -289, -289, -289, -289},{ -739, -739, -739, -739, -739},{ -379, -379, -379, -379, -379}}, -/* @.G..GU */ -{{ -50, -50, -50, -50, -50},{ -649, -649, -649, -649, -649},{ -289, -289, -289, -289, -289},{ -739, -739, -739, -739, -739},{ -379, -379, -379, -379, -379}}, -/* @.U..GU */ -{{ -50, -50, -50, -50, -50},{ -649, -649, -649, -649, -649},{ -289, -289, -289, -289, -289},{ -739, -739, -739, -739, -739},{ -379, -379, -379, -379, -379}} -}, -{ -/* @.@..UG */ -{{ -50, -50, -50, -50, -50},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100}}, -/* @.A..UG */ -{{ -50, -50, -50, -50, -50},{ -769, -769, -769, -769, -769},{ -529, -529, -529, -529, -529},{ -709, -709, -709, -709, -709},{ -599, -599, -599, -599, -599}}, -/* @.C..UG */ -{{ -50, -50, -50, -50, -50},{ -839, -839, -839, -839, -839},{ -529, -529, -529, -529, -529},{ -859, -859, -859, -859, -859},{ -489, -489, -489, -489, -489}}, -/* @.G..UG */ -{{ -50, -50, -50, -50, -50},{-1009,-1009,-1009,-1009,-1009},{ -409, -409, -409, -409, -409},{ -969, -969, -969, -969, -969},{ -599, -599, -599, -599, -599}}, -/* @.U..UG */ -{{ -50, -50, -50, -50, -50},{ -859, -859, -859, -859, -859},{ -529, -529, -529, -529, -529},{ -859, -859, -859, -859, -859},{ -409, -409, -409, -409, -409}} -}, -{ -/* @.@..AU */ -{{ -50, -50, -50, -50, -50},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100}}, -/* @.A..AU */ -{{ -50, -50, -50, -50, -50},{ -479, -479, -479, -479, -479},{ -309, -309, -309, -309, -309},{ -389, -389, -389, -389, -389},{ -379, -379, -379, -379, -379}}, -/* @.C..AU */ -{{ -50, -50, -50, -50, -50},{ -649, -649, -649, -649, -649},{ -289, -289, -289, -289, -289},{ -739, -739, -739, -739, -739},{ -379, -379, -379, -379, -379}}, -/* @.G..AU */ -{{ -50, -50, -50, -50, -50},{ -649, -649, -649, -649, -649},{ -289, -289, -289, -289, -289},{ -739, -739, -739, -739, -739},{ -379, -379, -379, -379, -379}}, -/* @.U..AU */ -{{ -50, -50, -50, -50, -50},{ -649, -649, -649, -649, -649},{ -289, -289, -289, -289, -289},{ -739, -739, -739, -739, -739},{ -379, -379, -379, -379, -379}} -}, -{ -/* @.@..UA */ -{{ -50, -50, -50, -50, -50},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100}}, -/* @.A..UA */ -{{ -50, -50, -50, -50, -50},{ -449, -449, -449, -449, -449},{ -479, -479, -479, -479, -479},{ -429, -429, -429, -429, -429},{ -329, -329, -329, -329, -329}}, -/* @.C..UA */ -{{ -50, -50, -50, -50, -50},{ -679, -679, -679, -679, -679},{ -559, -559, -559, -559, -559},{ -729, -729, -729, -729, -729},{ -189, -189, -189, -189, -189}}, -/* @.G..UA */ -{{ -50, -50, -50, -50, -50},{ -939, -939, -939, -939, -939},{ -249, -249, -249, -249, -249},{ -939, -939, -939, -939, -939},{ -329, -329, -329, -329, -329}}, -/* @.U..UA */ -{{ -50, -50, -50, -50, -50},{ -639, -639, -639, -639, -639},{ -229, -229, -229, -229, -229},{ -729, -729, -729, -729, -729},{ -190, -190, -190, -190, -190}} -}, -{ -/* @.@.. @ */ -{{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100}}, -/* @.A.. @ */ -{{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100}}, -/* @.C.. @ */ -{{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100}}, -/* @.G.. @ */ -{{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100}}, -/* @.U.. @ */ -{{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100},{ -100, -100, -100, -100, -100}} -} -} -}; - -const int energy_param::int22_37[8][8][5][5][5][5] = { -/* noPair */ {{{{{0}}}}}, -{ /* noPair */ {{{{0}}}}, -/* CG....CG */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 130, 160, 30, 200},{ 340, 120, 150, 20, 200},{ 340, 30, 60, -70, 200},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 160, 200, 60, 200},{ 340, 210, 180, 150, 200},{ 340, 200, 200, 200, 200},{ 340, 190, 170, 130, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 30, 60, -70, 200},{ 340, 200, 200, 200, 200},{ 340, 100, 140, 0, 200},{ 340, -40, -110, -60, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 190, 170, 130, 200},{ 340, 110, 40, 90, 200},{ 340, 140, 80, 130, 200}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 120, 210, 200, 190},{ 340, 110, 140, 200, 120},{ 340, 20, 150, 200, 130},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 150, 180, 200, 170},{ 340, 140, 170, 200, 150},{ 340, 200, 200, 200, 200},{ 340, 120, 150, 200, 140}}, -{{ 340, 340, 340, 340, 340},{ 340, 20, 150, 200, 130},{ 340, 200, 200, 200, 200},{ 340, 90, 180, 200, 170},{ 340, -150, -20, 200, -40}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 120, 150, 200, 140},{ 340, 0, 130, 200, 110},{ 340, 30, 60, 200, 50}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 30, 200, 100, 110},{ 340, 20, 200, 90, 0},{ 340, -70, 200, 0, 90},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 60, 200, 140, 40},{ 340, 150, 200, 180, 130},{ 340, 200, 200, 200, 200},{ 340, 130, 200, 170, 110}}, -{{ 340, 340, 340, 340, 340},{ 340, -70, 200, 0, 90},{ 340, 200, 200, 200, 200},{ 340, 0, 200, 80, 90},{ 340, -60, 200, -70, -260}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 130, 200, 170, 110},{ 340, 90, 200, 90, -110},{ 340, 130, 200, 120, 110}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 190, -40, 140},{ 340, 200, 120, -150, 30},{ 340, 200, 130, -60, 130},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 170, -110, 80},{ 340, 200, 150, -20, 60},{ 340, 200, 200, 200, 200},{ 340, 200, 140, -40, 50}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 130, -60, 130},{ 340, 200, 200, 200, 200},{ 340, 200, 170, -70, 120},{ 340, 200, -40, -420, -50}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 140, -40, 50},{ 340, 200, 110, -260, 110},{ 340, 200, 50, -50, -40}} -} -}, -/* CG....GC */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 50, 60, 0, 200},{ 340, 110, 150, -70, 200},{ 340, -30, 10, -160, 200},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 110, 110, -100, 200},{ 340, 170, 150, -60, 200},{ 340, 200, 200, 200, 200},{ 340, 70, 50, 20, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 40, 50, -70, 200},{ 340, 200, 200, 200, 200},{ 340, 100, 140, 0, 200},{ 340, 10, -70, -80, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 180, 150, 120, 200},{ 340, -50, -60, -60, 200},{ 340, 150, 0, 90, 200}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 130, 220, 200, 200},{ 340, 100, 130, 200, 120},{ 340, -70, 70, 200, 40},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 100, 190, 200, 110},{ 340, 100, 130, 200, 120},{ 340, 200, 200, 200, 200},{ 340, 0, 30, 200, 170}}, -{{ 340, 340, 340, 340, 340},{ 340, 70, 70, 200, 100},{ 340, 200, 200, 200, 200},{ 340, 90, 180, 200, 170},{ 340, -190, -30, 200, -70}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 110, 140, 200, 120},{ 340, -150, -20, 200, -30},{ 340, -20, -10, 200, 20}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, -20, 200, 110, 90},{ 340, -40, 200, 90, 0},{ 340, -170, 200, -90, 30},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 70, 200, 80, -10},{ 340, 110, 200, 150, 100},{ 340, 200, 200, 200, 200},{ 340, 20, 200, 50, 0}}, -{{ 340, 340, 340, 340, 340},{ 340, -50, 200, -20, 60},{ 340, 200, 200, 200, 200},{ 340, 0, 200, 80, 90},{ 340, -90, 200, -100, -300}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 120, 200, 150, 100},{ 340, -130, 200, -60, -240},{ 340, 90, 200, 110, 60}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, -10, 140},{ 340, 200, 120, -160, 30},{ 340, 200, 40, -160, 50},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 110, -160, 30},{ 340, 200, 120, -60, 30},{ 340, 200, 200, 200, 200},{ 340, 200, 20, -160, 10}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 50, -60, 140},{ 340, 200, 200, 200, 200},{ 340, 200, 170, -70, 120},{ 340, 200, -70, -440, -100}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 120, -50, 30},{ 340, 200, -10, -410, 10},{ 340, 200, 40, -100, 60}} -} -}, -/* CG....GU */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 240, 100, 200},{ 340, 180, 210, 80, 200},{ 340, 80, 110, -20, 200},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 190, 220, 90, 200},{ 340, 230, 210, 170, 200},{ 340, 200, 200, 200, 200},{ 340, 230, 210, 170, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 80, 110, -20, 200},{ 340, 200, 200, 200, 200},{ 340, 130, 170, 30, 200},{ 340, 60, 0, 40, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 230, 210, 170, 200},{ 340, 160, 90, 140, 200},{ 340, 190, 130, 180, 200}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 190, 280, 200, 270},{ 340, 170, 200, 200, 180},{ 340, 70, 200, 200, 180},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 180, 210, 200, 190},{ 340, 160, 190, 200, 180},{ 340, 200, 200, 200, 200},{ 340, 160, 190, 200, 180}}, -{{ 340, 340, 340, 340, 340},{ 340, 70, 200, 200, 180},{ 340, 200, 200, 200, 200},{ 340, 120, 210, 200, 200},{ 340, -50, 80, 200, 70}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 160, 190, 200, 180},{ 340, 50, 180, 200, 160},{ 340, 80, 110, 200, 100}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 100, 200, 180, 180},{ 340, 80, 200, 150, 60},{ 340, -20, 200, 50, 140},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 90, 200, 160, 70},{ 340, 170, 200, 210, 150},{ 340, 200, 200, 200, 200},{ 340, 170, 200, 210, 150}}, -{{ 340, 340, 340, 340, 340},{ 340, -20, 200, 50, 140},{ 340, 200, 200, 200, 200},{ 340, 30, 200, 110, 110},{ 340, 40, 200, 40, -160}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 170, 200, 210, 150},{ 340, 140, 200, 130, -60},{ 340, 180, 200, 170, 160}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 270, 30, 220},{ 340, 200, 180, -90, 90},{ 340, 200, 180, -10, 180},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 190, -80, 100},{ 340, 200, 180, 0, 90},{ 340, 200, 200, 200, 200},{ 340, 200, 180, 0, 90}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 180, -10, 180},{ 340, 200, 200, 200, 200},{ 340, 200, 200, -40, 150},{ 340, 200, 70, -310, 60}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 180, 0, 90},{ 340, 200, 160, -210, 160},{ 340, 200, 100, 0, 10}} -} -}, -/* CG....UG */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 240, 100, 200},{ 340, 160, 190, 60, 200},{ 340, 100, 130, 0, 200},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 240, 100, 200},{ 340, 260, 240, 200, 200},{ 340, 200, 200, 200, 200},{ 340, 260, 240, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 100, 130, 0, 200},{ 340, 200, 200, 200, 200},{ 340, 140, 170, 40, 200},{ 340, 20, -40, 0, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 230, 210, 170, 200},{ 340, 150, 80, 130, 200},{ 340, 220, 150, 200, 200}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 190, 280, 200, 270},{ 340, 150, 180, 200, 160},{ 340, 90, 220, 200, 200},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 190, 220, 200, 210},{ 340, 190, 220, 200, 210},{ 340, 200, 200, 200, 200},{ 340, 190, 220, 200, 210}}, -{{ 340, 340, 340, 340, 340},{ 340, 90, 220, 200, 200},{ 340, 200, 200, 200, 200},{ 340, 130, 220, 200, 200},{ 340, -90, 40, 200, 30}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 160, 190, 200, 180},{ 340, 40, 170, 200, 150},{ 340, 110, 140, 200, 120}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 100, 200, 180, 180},{ 340, 60, 200, 130, 40},{ 340, 0, 200, 70, 160},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 100, 200, 180, 80},{ 340, 200, 200, 240, 180},{ 340, 200, 200, 200, 200},{ 340, 200, 200, 240, 180}}, -{{ 340, 340, 340, 340, 340},{ 340, 0, 200, 70, 160},{ 340, 200, 200, 200, 200},{ 340, 40, 200, 110, 120},{ 340, 0, 200, 0, -200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 170, 200, 210, 150},{ 340, 130, 200, 120, -70},{ 340, 200, 200, 190, 180}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 270, 30, 220},{ 340, 200, 160, -110, 70},{ 340, 200, 200, 10, 190},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 210, -70, 120},{ 340, 200, 210, 30, 120},{ 340, 200, 200, 200, 200},{ 340, 200, 210, 30, 120}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 10, 190},{ 340, 200, 200, 200, 200},{ 340, 200, 200, -30, 150},{ 340, 200, 30, -350, 20}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 180, 0, 90},{ 340, 200, 150, -220, 150},{ 340, 200, 120, 30, 30}} -} -}, -/* CG....AU */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 240, 100, 200},{ 340, 180, 210, 80, 200},{ 340, 80, 110, -20, 200},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 190, 220, 90, 200},{ 340, 230, 210, 170, 200},{ 340, 200, 200, 200, 200},{ 340, 230, 210, 170, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 80, 110, -20, 200},{ 340, 200, 200, 200, 200},{ 340, 130, 170, 30, 200},{ 340, 60, 0, 40, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 230, 210, 170, 200},{ 340, 160, 90, 140, 200},{ 340, 190, 130, 180, 200}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 190, 280, 200, 270},{ 340, 170, 200, 200, 180},{ 340, 70, 200, 200, 180},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 180, 210, 200, 190},{ 340, 160, 190, 200, 180},{ 340, 200, 200, 200, 200},{ 340, 160, 190, 200, 180}}, -{{ 340, 340, 340, 340, 340},{ 340, 70, 200, 200, 180},{ 340, 200, 200, 200, 200},{ 340, 120, 210, 200, 200},{ 340, -50, 80, 200, 70}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 160, 190, 200, 180},{ 340, 50, 180, 200, 160},{ 340, 80, 110, 200, 100}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 100, 200, 180, 180},{ 340, 80, 200, 150, 60},{ 340, -20, 200, 50, 140},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 90, 200, 160, 70},{ 340, 170, 200, 210, 150},{ 340, 200, 200, 200, 200},{ 340, 170, 200, 210, 150}}, -{{ 340, 340, 340, 340, 340},{ 340, -20, 200, 50, 140},{ 340, 200, 200, 200, 200},{ 340, 30, 200, 110, 110},{ 340, 40, 200, 40, -160}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 170, 200, 210, 150},{ 340, 140, 200, 130, -60},{ 340, 180, 200, 170, 160}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 270, 30, 220},{ 340, 200, 180, -90, 90},{ 340, 200, 180, -10, 180},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 190, -80, 100},{ 340, 200, 180, 0, 90},{ 340, 200, 200, 200, 200},{ 340, 200, 180, 0, 90}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 180, -10, 180},{ 340, 200, 200, 200, 200},{ 340, 200, 200, -40, 150},{ 340, 200, 70, -310, 60}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 180, 0, 90},{ 340, 200, 160, -210, 160},{ 340, 200, 100, 0, 10}} -} -}, -/* CG....UA */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 240, 100, 200},{ 340, 160, 190, 60, 200},{ 340, 100, 130, 0, 200},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 240, 100, 200},{ 340, 260, 240, 200, 200},{ 340, 200, 200, 200, 200},{ 340, 260, 240, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 100, 130, 0, 200},{ 340, 200, 200, 200, 200},{ 340, 140, 170, 40, 200},{ 340, 20, -40, 0, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 230, 210, 170, 200},{ 340, 150, 80, 130, 200},{ 340, 220, 150, 200, 200}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 190, 280, 200, 270},{ 340, 150, 180, 200, 160},{ 340, 90, 220, 200, 200},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 190, 220, 200, 210},{ 340, 190, 220, 200, 210},{ 340, 200, 200, 200, 200},{ 340, 190, 220, 200, 210}}, -{{ 340, 340, 340, 340, 340},{ 340, 90, 220, 200, 200},{ 340, 200, 200, 200, 200},{ 340, 130, 220, 200, 200},{ 340, -90, 40, 200, 30}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 160, 190, 200, 180},{ 340, 40, 170, 200, 150},{ 340, 110, 140, 200, 120}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 100, 200, 180, 180},{ 340, 60, 200, 130, 40},{ 340, 0, 200, 70, 160},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 100, 200, 180, 80},{ 340, 200, 200, 240, 180},{ 340, 200, 200, 200, 200},{ 340, 200, 200, 240, 180}}, -{{ 340, 340, 340, 340, 340},{ 340, 0, 200, 70, 160},{ 340, 200, 200, 200, 200},{ 340, 40, 200, 110, 120},{ 340, 0, 200, 0, -200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 170, 200, 210, 150},{ 340, 130, 200, 120, -70},{ 340, 200, 200, 190, 180}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 270, 30, 220},{ 340, 200, 160, -110, 70},{ 340, 200, 200, 10, 190},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 210, -70, 120},{ 340, 200, 210, 30, 120},{ 340, 200, 200, 200, 200},{ 340, 200, 210, 30, 120}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 10, 190},{ 340, 200, 200, 200, 200},{ 340, 200, 200, -30, 150},{ 340, 200, 30, -350, 20}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 180, 0, 90},{ 340, 200, 150, -220, 150},{ 340, 200, 120, 30, 30}} -} -}, -/* CG....?? */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -} -} -}, -{ /* noPair */ {{{{0}}}}, -/* GC....CG */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 50, 110, 40, 200},{ 340, 130, 100, 70, 200},{ 340, -20, 70, -50, 200},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 60, 110, 50, 200},{ 340, 220, 190, 70, 200},{ 340, 200, 200, 200, 200},{ 340, 200, 110, 50, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 0, -100, -70, 200},{ 340, 200, 200, 200, 200},{ 340, 110, 80, -20, 200},{ 340, -10, -160, -60, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 110, 100, 200},{ 340, 90, -10, 60, 200},{ 340, 140, 30, 140, 200}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 110, 170, 200, 180},{ 340, 100, 100, 200, 110},{ 340, -40, 110, 200, 120},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 150, 150, 200, 150},{ 340, 130, 130, 200, 140},{ 340, 200, 200, 200, 200},{ 340, 120, 120, 200, 120}}, -{{ 340, 340, 340, 340, 340},{ 340, -70, -60, 200, 120},{ 340, 200, 200, 200, 200},{ 340, 90, 150, 200, 150},{ 340, -160, -60, 200, -50}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 120, 120, 200, 120},{ 340, 0, 100, 200, 100},{ 340, 30, 30, 200, 30}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, -30, 200, 100, -50},{ 340, -70, 200, 90, -150},{ 340, -170, 200, 0, -130},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 10, 200, 140, -60},{ 340, 70, 200, 180, -20},{ 340, 200, 200, 200, 200},{ 340, 40, 200, 170, -10}}, -{{ 340, 340, 340, 340, 340},{ 340, -160, 200, 0, -60},{ 340, 200, 200, 200, 200},{ 340, -90, 200, 80, -60},{ 340, -160, 200, -70, -410}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 40, 200, 170, -30},{ 340, 30, 200, 90, -240},{ 340, 50, 200, 120, 10}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 70, 10, 150},{ 340, 200, 0, -190, -20},{ 340, 200, 20, -90, 90},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 50, -70, 0},{ 340, 200, 30, -30, -10},{ 340, 200, 200, 200, 200},{ 340, 200, 20, -70, 40}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 20, -80, 90},{ 340, 200, 200, 200, 200},{ 340, 200, 50, -100, 110},{ 340, 200, -160, -440, -100}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 170, -70, 20},{ 340, 200, 0, -300, 60},{ 340, 200, 10, -100, 60}} -} -}, -/* GC....GC */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 150, 120, 10, 200},{ 340, 120, 90, -10, 200},{ 340, -50, -80, -190, 200},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 120, 90, -20, 200},{ 340, 180, 90, 90, 200},{ 340, 200, 200, 200, 200},{ 340, 80, 0, -10, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 10, -20, -130, 200},{ 340, 200, 200, 200, 200},{ 340, 110, 80, -20, 200},{ 340, -70, -200, -130, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 190, 100, 90, 200},{ 340, -30, -160, -90, 200},{ 340, 150, 20, 90, 200}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 120, 180, 200, 190},{ 340, 100, 100, 200, 100},{ 340, -80, 20, 200, 30},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 90, 90, 200, 100},{ 340, 100, 100, 200, 100},{ 340, 200, 200, 200, 200},{ 340, 0, 0, 200, 0}}, -{{ 340, 340, 340, 340, 340},{ 340, -10, 90, 200, 90},{ 340, 200, 200, 200, 200},{ 340, 90, 150, 200, 150},{ 340, -190, -90, 200, -90}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 100, 100, 200, 110},{ 340, -150, -50, 200, -50},{ 340, 20, 20, 200, 30}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, -50, 200, 110, -30},{ 340, -80, 200, 90, -150},{ 340, -260, 200, -90, -150},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, -80, 200, 80, -160},{ 340, 20, 200, 150, -50},{ 340, 200, 200, 200, 200},{ 340, -80, 200, 50, -150}}, -{{ 340, 340, 340, 340, 340},{ 340, -190, 200, -20, -90},{ 340, 200, 200, 200, 200},{ 340, -90, 200, 80, -60},{ 340, -190, 200, -100, -450}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 30, 200, 150, -50},{ 340, -150, 200, -60, -410},{ 340, 30, 200, 110, -50}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 80, -70, 150},{ 340, 200, 0, -190, 20},{ 340, 200, -80, -190, 30},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 0, -200, 20},{ 340, 200, 0, -90, 20},{ 340, 200, 200, 200, 200},{ 340, 200, -100, -190, -70}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, -10, -130, 90},{ 340, 200, 200, 200, 200},{ 340, 200, 50, -100, 110},{ 340, 200, -190, -490, -90}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 0, -90, 30},{ 340, 200, -150, -450, -50},{ 340, 200, -70, -90, -50}} -} -}, -/* GC....GU */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 210, 180, 70, 200},{ 340, 190, 160, 50, 200},{ 340, 90, 60, -50, 200},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 170, 60, 200},{ 340, 240, 150, 140, 200},{ 340, 200, 200, 200, 200},{ 340, 240, 150, 140, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 90, 60, -50, 200},{ 340, 200, 200, 200, 200},{ 340, 140, 110, 0, 200},{ 340, 70, -60, 10, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 240, 150, 140, 200},{ 340, 170, 40, 110, 200},{ 340, 200, 70, 150, 200}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 190, 250, 200, 250},{ 340, 160, 160, 200, 170},{ 340, 60, 160, 200, 170},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 170, 170, 200, 180},{ 340, 160, 160, 200, 160},{ 340, 200, 200, 200, 200},{ 340, 160, 160, 200, 160}}, -{{ 340, 340, 340, 340, 340},{ 340, 60, 160, 200, 170},{ 340, 200, 200, 200, 200},{ 340, 120, 180, 200, 180},{ 340, -50, 50, 200, 50}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 160, 160, 200, 160},{ 340, 40, 140, 200, 150},{ 340, 80, 80, 200, 80}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 10, 200, 180, 40},{ 340, -10, 200, 150, -90},{ 340, -110, 200, 50, -10},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 0, 200, 160, -80},{ 340, 80, 200, 210, 10},{ 340, 200, 200, 200, 200},{ 340, 80, 200, 210, 10}}, -{{ 340, 340, 340, 340, 340},{ 340, -110, 200, 50, -10},{ 340, 200, 200, 200, 200},{ 340, -60, 200, 110, -30},{ 340, -50, 200, 40, -310}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 80, 200, 210, 10},{ 340, 50, 200, 130, -210},{ 340, 80, 200, 170, 10}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 150, 0, 210},{ 340, 200, 60, -130, 90},{ 340, 200, 70, -50, 170},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 70, -120, 100},{ 340, 200, 60, -30, 80},{ 340, 200, 200, 200, 200},{ 340, 200, 60, -30, 80}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 70, -50, 170},{ 340, 200, 200, 200, 200},{ 340, 200, 80, -70, 140},{ 340, 200, -50, -350, 50}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 60, -30, 80},{ 340, 200, 50, -250, 150},{ 340, 200, -20, -30, 0}} -} -}, -/* GC....UG */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 210, 180, 70, 200},{ 340, 170, 140, 30, 200},{ 340, 110, 80, -30, 200},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 210, 180, 70, 200},{ 340, 270, 180, 170, 200},{ 340, 200, 200, 200, 200},{ 340, 270, 180, 170, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 110, 80, -30, 200},{ 340, 200, 200, 200, 200},{ 340, 150, 120, 10, 200},{ 340, 30, -100, -30, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 240, 150, 140, 200},{ 340, 160, 30, 100, 200},{ 340, 230, 100, 170, 200}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 190, 250, 200, 250},{ 340, 140, 140, 200, 150},{ 340, 80, 180, 200, 190},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 190, 190, 200, 190},{ 340, 190, 190, 200, 190},{ 340, 200, 200, 200, 200},{ 340, 190, 190, 200, 190}}, -{{ 340, 340, 340, 340, 340},{ 340, 80, 180, 200, 190},{ 340, 200, 200, 200, 200},{ 340, 120, 180, 200, 190},{ 340, -90, 10, 200, 10}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 160, 160, 200, 160},{ 340, 30, 130, 200, 140},{ 340, 100, 100, 200, 110}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 10, 200, 180, 40},{ 340, -30, 200, 130, -110},{ 340, -90, 200, 70, 10},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 10, 200, 180, -60},{ 340, 110, 200, 240, 40},{ 340, 200, 200, 200, 200},{ 340, 110, 200, 240, 40}}, -{{ 340, 340, 340, 340, 340},{ 340, -90, 200, 70, 10},{ 340, 200, 200, 200, 200},{ 340, -50, 200, 110, -30},{ 340, -90, 200, 0, -350}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 80, 200, 210, 10},{ 340, 40, 200, 120, -220},{ 340, 110, 200, 190, 30}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 150, 0, 210},{ 340, 200, 40, -150, 70},{ 340, 200, 90, -30, 190},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 90, -100, 110},{ 340, 200, 90, 0, 110},{ 340, 200, 200, 200, 200},{ 340, 200, 90, 0, 110}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 90, -30, 190},{ 340, 200, 200, 200, 200},{ 340, 200, 80, -70, 150},{ 340, 200, -90, -390, 10}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 60, -30, 80},{ 340, 200, 40, -260, 140},{ 340, 200, 0, -10, 30}} -} -}, -/* GC....AU */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 210, 180, 70, 200},{ 340, 190, 160, 50, 200},{ 340, 90, 60, -50, 200},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 170, 60, 200},{ 340, 240, 150, 140, 200},{ 340, 200, 200, 200, 200},{ 340, 240, 150, 140, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 90, 60, -50, 200},{ 340, 200, 200, 200, 200},{ 340, 140, 110, 0, 200},{ 340, 70, -60, 10, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 240, 150, 140, 200},{ 340, 170, 40, 110, 200},{ 340, 200, 70, 150, 200}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 190, 250, 200, 250},{ 340, 160, 160, 200, 170},{ 340, 60, 160, 200, 170},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 170, 170, 200, 180},{ 340, 160, 160, 200, 160},{ 340, 200, 200, 200, 200},{ 340, 160, 160, 200, 160}}, -{{ 340, 340, 340, 340, 340},{ 340, 60, 160, 200, 170},{ 340, 200, 200, 200, 200},{ 340, 120, 180, 200, 180},{ 340, -50, 50, 200, 50}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 160, 160, 200, 160},{ 340, 40, 140, 200, 150},{ 340, 80, 80, 200, 80}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 10, 200, 180, 40},{ 340, -10, 200, 150, -90},{ 340, -110, 200, 50, -10},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 0, 200, 160, -80},{ 340, 80, 200, 210, 10},{ 340, 200, 200, 200, 200},{ 340, 80, 200, 210, 10}}, -{{ 340, 340, 340, 340, 340},{ 340, -110, 200, 50, -10},{ 340, 200, 200, 200, 200},{ 340, -60, 200, 110, -30},{ 340, -50, 200, 40, -310}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 80, 200, 210, 10},{ 340, 50, 200, 130, -210},{ 340, 80, 200, 170, 10}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 150, 0, 210},{ 340, 200, 60, -130, 90},{ 340, 200, 70, -50, 170},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 70, -120, 100},{ 340, 200, 60, -30, 80},{ 340, 200, 200, 200, 200},{ 340, 200, 60, -30, 80}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 70, -50, 170},{ 340, 200, 200, 200, 200},{ 340, 200, 80, -70, 140},{ 340, 200, -50, -350, 50}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 60, -30, 80},{ 340, 200, 50, -250, 150},{ 340, 200, -20, -30, 0}} -} -}, -/* GC....UA */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 210, 180, 70, 200},{ 340, 170, 140, 30, 200},{ 340, 110, 80, -30, 200},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 210, 180, 70, 200},{ 340, 270, 180, 170, 200},{ 340, 200, 200, 200, 200},{ 340, 270, 180, 170, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 110, 80, -30, 200},{ 340, 200, 200, 200, 200},{ 340, 150, 120, 10, 200},{ 340, 30, -100, -30, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 240, 150, 140, 200},{ 340, 160, 30, 100, 200},{ 340, 230, 100, 170, 200}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 190, 250, 200, 250},{ 340, 140, 140, 200, 150},{ 340, 80, 180, 200, 190},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 190, 190, 200, 190},{ 340, 190, 190, 200, 190},{ 340, 200, 200, 200, 200},{ 340, 190, 190, 200, 190}}, -{{ 340, 340, 340, 340, 340},{ 340, 80, 180, 200, 190},{ 340, 200, 200, 200, 200},{ 340, 120, 180, 200, 190},{ 340, -90, 10, 200, 10}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 160, 160, 200, 160},{ 340, 30, 130, 200, 140},{ 340, 100, 100, 200, 110}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 10, 200, 180, 40},{ 340, -30, 200, 130, -110},{ 340, -90, 200, 70, 10},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 10, 200, 180, -60},{ 340, 110, 200, 240, 40},{ 340, 200, 200, 200, 200},{ 340, 110, 200, 240, 40}}, -{{ 340, 340, 340, 340, 340},{ 340, -90, 200, 70, 10},{ 340, 200, 200, 200, 200},{ 340, -50, 200, 110, -30},{ 340, -90, 200, 0, -350}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 80, 200, 210, 10},{ 340, 40, 200, 120, -220},{ 340, 110, 200, 190, 30}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 150, 0, 210},{ 340, 200, 40, -150, 70},{ 340, 200, 90, -30, 190},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 90, -100, 110},{ 340, 200, 90, 0, 110},{ 340, 200, 200, 200, 200},{ 340, 200, 90, 0, 110}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 90, -30, 190},{ 340, 200, 200, 200, 200},{ 340, 200, 80, -70, 150},{ 340, 200, -90, -390, 10}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 60, -30, 80},{ 340, 200, 40, -260, 140},{ 340, 200, 0, -10, 30}} -} -}, -/* GC....?? */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -} -} -}, -{ /* noPair */ {{{{0}}}}, -/* GU....CG */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 190, 80, 200},{ 340, 190, 180, 70, 200},{ 340, 100, 90, -20, 200},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 240, 220, 110, 200},{ 340, 280, 210, 200, 200},{ 340, 200, 200, 200, 200},{ 340, 270, 190, 180, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 100, 90, -20, 200},{ 340, 200, 200, 200, 200},{ 340, 180, 160, 50, 200},{ 340, 30, -80, -10, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 270, 190, 180, 200},{ 340, 180, 70, 140, 200},{ 340, 220, 100, 180, 200}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 180, 230, 200, 230},{ 340, 170, 160, 200, 160},{ 340, 80, 170, 200, 170},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 210, 210, 200, 210},{ 340, 200, 190, 200, 190},{ 340, 200, 200, 200, 200},{ 340, 180, 180, 200, 180}}, -{{ 340, 340, 340, 340, 340},{ 340, 80, 170, 200, 170},{ 340, 200, 200, 200, 200},{ 340, 150, 210, 200, 210},{ 340, -90, 0, 200, 0}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 180, 180, 200, 180},{ 340, 60, 150, 200, 150},{ 340, 90, 90, 200, 90}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 80, 200, 130, 160},{ 340, 70, 200, 120, 50},{ 340, -20, 200, 30, 140},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 110, 200, 170, 90},{ 340, 200, 200, 210, 180},{ 340, 200, 200, 200, 200},{ 340, 180, 200, 200, 160}}, -{{ 340, 340, 340, 340, 340},{ 340, -20, 200, 30, 140},{ 340, 200, 200, 200, 200},{ 340, 50, 200, 110, 130},{ 340, -10, 200, -40, -210}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 180, 200, 200, 160},{ 340, 140, 200, 110, -60},{ 340, 180, 200, 150, 160}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 230, 60, 190},{ 340, 200, 160, -50, 80},{ 340, 200, 170, 40, 180},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 210, 0, 130},{ 340, 200, 190, 80, 110},{ 340, 200, 200, 200, 200},{ 340, 200, 180, 70, 100}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 170, 40, 180},{ 340, 200, 200, 200, 200},{ 340, 200, 210, 40, 170},{ 340, 200, 0, -310, 0}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 180, 70, 100},{ 340, 200, 150, -160, 160},{ 340, 200, 90, 60, 10}} -} -}, -/* GU....GC */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 210, 200, 90, 200},{ 340, 190, 170, 60, 200},{ 340, 10, 0, -110, 200},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 180, 170, 60, 200},{ 340, 250, 170, 160, 200},{ 340, 200, 200, 200, 200},{ 340, 150, 70, 70, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 70, 60, -50, 200},{ 340, 200, 200, 200, 200},{ 340, 180, 160, 50, 200},{ 340, 0, -120, -50, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 250, 180, 170, 200},{ 340, 40, -80, -10, 200},{ 340, 210, 100, 170, 200}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 190, 240, 200, 240},{ 340, 160, 160, 200, 160},{ 340, -10, 80, 200, 80},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 160, 150, 200, 150},{ 340, 160, 160, 200, 160},{ 340, 200, 200, 200, 200},{ 340, 60, 60, 200, 60}}, -{{ 340, 340, 340, 340, 340},{ 340, 50, 140, 200, 140},{ 340, 200, 200, 200, 200},{ 340, 150, 210, 200, 210},{ 340, -130, -30, 200, -30}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 170, 160, 200, 160},{ 340, -90, 10, 200, 10},{ 340, 90, 80, 200, 80}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 90, 200, 140, 170},{ 340, 60, 200, 120, 40},{ 340, -110, 200, -60, 50},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 60, 200, 110, 40},{ 340, 160, 200, 180, 140},{ 340, 200, 200, 200, 200},{ 340, 70, 200, 80, 50}}, -{{ 340, 340, 340, 340, 340},{ 340, -50, 200, 0, 110},{ 340, 200, 200, 200, 200},{ 340, 50, 200, 110, 130},{ 340, -50, 200, -70, -250}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 170, 200, 180, 150},{ 340, -10, 200, -30, -210},{ 340, 170, 200, 140, 150}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 240, 70, 200},{ 340, 200, 160, -50, 80},{ 340, 200, 80, -50, 80},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 150, -60, 70},{ 340, 200, 160, 50, 80},{ 340, 200, 200, 200, 200},{ 340, 200, 60, -50, -20}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 140, 10, 150},{ 340, 200, 200, 200, 200},{ 340, 200, 210, 40, 170},{ 340, 200, -30, -350, -30}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 160, 50, 80},{ 340, 200, 10, -310, 10},{ 340, 200, 80, 50, 0}} -} -}, -/* GU....GU */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 280, 260, 150, 200},{ 340, 250, 240, 130, 200},{ 340, 150, 140, 30, 200},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 260, 250, 140, 200},{ 340, 310, 230, 220, 200},{ 340, 200, 200, 200, 200},{ 340, 310, 230, 220, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 150, 140, 30, 200},{ 340, 200, 200, 200, 200},{ 340, 210, 190, 80, 200},{ 340, 130, 20, 90, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 310, 230, 220, 200},{ 340, 230, 120, 190, 200},{ 340, 270, 150, 220, 200}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 250, 310, 200, 310},{ 340, 230, 220, 200, 220},{ 340, 130, 220, 200, 220},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 240, 230, 200, 230},{ 340, 220, 220, 200, 220},{ 340, 200, 200, 200, 200},{ 340, 220, 220, 200, 220}}, -{{ 340, 340, 340, 340, 340},{ 340, 130, 220, 200, 220},{ 340, 200, 200, 200, 200},{ 340, 180, 240, 200, 240},{ 340, 10, 100, 200, 100}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 220, 220, 200, 220},{ 340, 110, 200, 200, 200},{ 340, 140, 140, 200, 140}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 150, 200, 210, 230},{ 340, 130, 200, 180, 110},{ 340, 30, 200, 80, 190},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 140, 200, 190, 120},{ 340, 220, 200, 240, 200},{ 340, 200, 200, 200, 200},{ 340, 220, 200, 240, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 30, 200, 80, 190},{ 340, 200, 200, 200, 200},{ 340, 80, 200, 140, 160},{ 340, 90, 200, 70, -110}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 220, 200, 240, 200},{ 340, 190, 200, 160, -10},{ 340, 220, 200, 200, 200}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 310, 130, 270},{ 340, 200, 220, 10, 140},{ 340, 200, 220, 90, 220},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 230, 20, 150},{ 340, 200, 220, 100, 140},{ 340, 200, 200, 200, 200},{ 340, 200, 220, 100, 140}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 220, 90, 220},{ 340, 200, 200, 200, 200},{ 340, 200, 240, 70, 200},{ 340, 200, 100, -210, 110}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 220, 100, 140},{ 340, 200, 200, -110, 200},{ 340, 200, 140, 110, 60}} -} -}, -/* GU....UG */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 280, 260, 150, 200},{ 340, 230, 220, 110, 200},{ 340, 170, 160, 50, 200},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 280, 260, 150, 200},{ 340, 340, 260, 250, 200},{ 340, 200, 200, 200, 200},{ 340, 340, 260, 250, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 170, 160, 50, 200},{ 340, 200, 200, 200, 200},{ 340, 210, 200, 90, 200},{ 340, 100, -20, 50, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 310, 230, 220, 200},{ 340, 220, 110, 180, 200},{ 340, 290, 180, 250, 200}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 250, 310, 200, 310},{ 340, 210, 200, 200, 200},{ 340, 150, 240, 200, 240},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 250, 250, 200, 250},{ 340, 250, 250, 200, 250},{ 340, 200, 200, 200, 200},{ 340, 250, 250, 200, 250}}, -{{ 340, 340, 340, 340, 340},{ 340, 150, 240, 200, 240},{ 340, 200, 200, 200, 200},{ 340, 190, 240, 200, 240},{ 340, -30, 70, 200, 70}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 220, 220, 200, 220},{ 340, 100, 190, 200, 190},{ 340, 170, 160, 200, 160}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 150, 200, 210, 230},{ 340, 110, 200, 160, 90},{ 340, 50, 200, 100, 210},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 150, 200, 210, 130},{ 340, 250, 200, 270, 230},{ 340, 200, 200, 200, 200},{ 340, 250, 200, 270, 230}}, -{{ 340, 340, 340, 340, 340},{ 340, 50, 200, 100, 210},{ 340, 200, 200, 200, 200},{ 340, 90, 200, 140, 170},{ 340, 50, 200, 30, -150}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 220, 200, 240, 200},{ 340, 180, 200, 150, -20},{ 340, 250, 200, 220, 230}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 310, 130, 270},{ 340, 200, 200, -10, 120},{ 340, 200, 240, 110, 240},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 250, 30, 170},{ 340, 200, 250, 130, 170},{ 340, 200, 200, 200, 200},{ 340, 200, 250, 130, 170}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 240, 110, 240},{ 340, 200, 200, 200, 200},{ 340, 200, 240, 70, 200},{ 340, 200, 70, -250, 70}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 220, 100, 140},{ 340, 200, 190, -120, 190},{ 340, 200, 160, 130, 80}} -} -}, -/* GU....AU */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 280, 260, 150, 200},{ 340, 250, 240, 130, 200},{ 340, 150, 140, 30, 200},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 260, 250, 140, 200},{ 340, 310, 230, 220, 200},{ 340, 200, 200, 200, 200},{ 340, 310, 230, 220, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 150, 140, 30, 200},{ 340, 200, 200, 200, 200},{ 340, 210, 190, 80, 200},{ 340, 130, 20, 90, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 310, 230, 220, 200},{ 340, 230, 120, 190, 200},{ 340, 270, 150, 220, 200}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 250, 310, 200, 310},{ 340, 230, 220, 200, 220},{ 340, 130, 220, 200, 220},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 240, 230, 200, 230},{ 340, 220, 220, 200, 220},{ 340, 200, 200, 200, 200},{ 340, 220, 220, 200, 220}}, -{{ 340, 340, 340, 340, 340},{ 340, 130, 220, 200, 220},{ 340, 200, 200, 200, 200},{ 340, 180, 240, 200, 240},{ 340, 10, 100, 200, 100}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 220, 220, 200, 220},{ 340, 110, 200, 200, 200},{ 340, 140, 140, 200, 140}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 150, 200, 210, 230},{ 340, 130, 200, 180, 110},{ 340, 30, 200, 80, 190},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 140, 200, 190, 120},{ 340, 220, 200, 240, 200},{ 340, 200, 200, 200, 200},{ 340, 220, 200, 240, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 30, 200, 80, 190},{ 340, 200, 200, 200, 200},{ 340, 80, 200, 140, 160},{ 340, 90, 200, 70, -110}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 220, 200, 240, 200},{ 340, 190, 200, 160, -10},{ 340, 220, 200, 200, 200}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 310, 130, 270},{ 340, 200, 220, 10, 140},{ 340, 200, 220, 90, 220},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 230, 20, 150},{ 340, 200, 220, 100, 140},{ 340, 200, 200, 200, 200},{ 340, 200, 220, 100, 140}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 220, 90, 220},{ 340, 200, 200, 200, 200},{ 340, 200, 240, 70, 200},{ 340, 200, 100, -210, 110}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 220, 100, 140},{ 340, 200, 200, -110, 200},{ 340, 200, 140, 110, 60}} -} -}, -/* GU....UA */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 280, 260, 150, 200},{ 340, 230, 220, 110, 200},{ 340, 170, 160, 50, 200},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 280, 260, 150, 200},{ 340, 340, 260, 250, 200},{ 340, 200, 200, 200, 200},{ 340, 340, 260, 250, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 170, 160, 50, 200},{ 340, 200, 200, 200, 200},{ 340, 210, 200, 90, 200},{ 340, 100, -20, 50, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 310, 230, 220, 200},{ 340, 220, 110, 180, 200},{ 340, 290, 180, 250, 200}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 250, 310, 200, 310},{ 340, 210, 200, 200, 200},{ 340, 150, 240, 200, 240},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 250, 250, 200, 250},{ 340, 250, 250, 200, 250},{ 340, 200, 200, 200, 200},{ 340, 250, 250, 200, 250}}, -{{ 340, 340, 340, 340, 340},{ 340, 150, 240, 200, 240},{ 340, 200, 200, 200, 200},{ 340, 190, 240, 200, 240},{ 340, -30, 70, 200, 70}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 220, 220, 200, 220},{ 340, 100, 190, 200, 190},{ 340, 170, 160, 200, 160}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 150, 200, 210, 230},{ 340, 110, 200, 160, 90},{ 340, 50, 200, 100, 210},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 150, 200, 210, 130},{ 340, 250, 200, 270, 230},{ 340, 200, 200, 200, 200},{ 340, 250, 200, 270, 230}}, -{{ 340, 340, 340, 340, 340},{ 340, 50, 200, 100, 210},{ 340, 200, 200, 200, 200},{ 340, 90, 200, 140, 170},{ 340, 50, 200, 30, -150}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 220, 200, 240, 200},{ 340, 180, 200, 150, -20},{ 340, 250, 200, 220, 230}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 310, 130, 270},{ 340, 200, 200, -10, 120},{ 340, 200, 240, 110, 240},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 250, 30, 170},{ 340, 200, 250, 130, 170},{ 340, 200, 200, 200, 200},{ 340, 200, 250, 130, 170}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 240, 110, 240},{ 340, 200, 200, 200, 200},{ 340, 200, 240, 70, 200},{ 340, 200, 70, -250, 70}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 220, 100, 140},{ 340, 200, 190, -120, 190},{ 340, 200, 160, 130, 80}} -} -}, -/* GU....?? */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -} -} -}, -{ /* noPair */ {{{{0}}}}, -/* UG....CG */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 100, 200},{ 340, 190, 190, 90, 200},{ 340, 100, 100, 0, 200},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 240, 240, 130, 200},{ 340, 280, 220, 220, 200},{ 340, 200, 200, 200, 200},{ 340, 270, 210, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 100, 100, 0, 200},{ 340, 200, 200, 200, 200},{ 340, 180, 180, 70, 200},{ 340, 30, -70, 10, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 270, 210, 200, 200},{ 340, 180, 80, 160, 200},{ 340, 220, 120, 190, 200}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 160, 260, 200, 230},{ 340, 150, 190, 200, 160},{ 340, 60, 200, 200, 170},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 190, 240, 200, 210},{ 340, 180, 220, 200, 190},{ 340, 200, 200, 200, 200},{ 340, 160, 210, 200, 180}}, -{{ 340, 340, 340, 340, 340},{ 340, 60, 200, 200, 170},{ 340, 200, 200, 200, 200},{ 340, 130, 240, 200, 210},{ 340, -110, 30, 200, 0}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 160, 210, 200, 180},{ 340, 40, 180, 200, 150},{ 340, 70, 120, 200, 90}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 100, 200, 140, 150},{ 340, 90, 200, 130, 40},{ 340, 0, 200, 40, 130},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 130, 200, 170, 80},{ 340, 220, 200, 220, 170},{ 340, 200, 200, 200, 200},{ 340, 200, 200, 200, 150}}, -{{ 340, 340, 340, 340, 340},{ 340, 0, 200, 40, 130},{ 340, 200, 200, 200, 200},{ 340, 70, 200, 110, 120},{ 340, 10, 200, -30, -220}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 200, 200, 150},{ 340, 160, 200, 120, -70},{ 340, 190, 200, 150, 150}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 260, 20, 220},{ 340, 200, 190, -90, 110},{ 340, 200, 200, 0, 200},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 240, -40, 150},{ 340, 200, 220, 40, 140},{ 340, 200, 200, 200, 200},{ 340, 200, 210, 30, 120}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 0, 200},{ 340, 200, 200, 200, 200},{ 340, 200, 240, 0, 190},{ 340, 200, 30, -350, 30}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 210, 30, 120},{ 340, 200, 180, -200, 180},{ 340, 200, 120, 20, 30}} -} -}, -/* UG....GC */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 210, 210, 110, 200},{ 340, 190, 190, 80, 200},{ 340, 10, 10, -90, 200},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 180, 180, 80, 200},{ 340, 250, 190, 180, 200},{ 340, 200, 200, 200, 200},{ 340, 150, 90, 90, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 70, 70, -30, 200},{ 340, 200, 200, 200, 200},{ 340, 180, 180, 70, 200},{ 340, 0, -100, -30, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 250, 190, 190, 200},{ 340, 40, -60, 10, 200},{ 340, 210, 110, 190, 200}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 170, 270, 200, 240},{ 340, 140, 190, 200, 160},{ 340, -30, 110, 200, 80},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 140, 180, 200, 150},{ 340, 140, 190, 200, 160},{ 340, 200, 200, 200, 200},{ 340, 40, 90, 200, 60}}, -{{ 340, 340, 340, 340, 340},{ 340, 30, 170, 200, 140},{ 340, 200, 200, 200, 200},{ 340, 130, 240, 200, 210},{ 340, -150, 0, 200, -30}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 150, 190, 200, 160},{ 340, -110, 40, 200, 10},{ 340, 70, 110, 200, 80}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 110, 200, 150, 160},{ 340, 80, 200, 120, 30},{ 340, -90, 200, -50, 40},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 80, 200, 120, 30},{ 340, 180, 200, 180, 130},{ 340, 200, 200, 200, 200},{ 340, 90, 200, 80, 40}}, -{{ 340, 340, 340, 340, 340},{ 340, -30, 200, 10, 100},{ 340, 200, 200, 200, 200},{ 340, 70, 200, 110, 120},{ 340, -30, 200, -70, -260}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 190, 200, 190, 140},{ 340, 10, 200, -30, -220},{ 340, 190, 200, 150, 140}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 270, 30, 230},{ 340, 200, 190, -90, 100},{ 340, 200, 110, -90, 110},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 180, -100, 100},{ 340, 200, 190, 10, 100},{ 340, 200, 200, 200, 200},{ 340, 200, 90, -90, 0}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 170, -30, 170},{ 340, 200, 200, 200, 200},{ 340, 200, 240, 0, 190},{ 340, 200, 0, -390, -10}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 190, 10, 110},{ 340, 200, 40, -350, 30},{ 340, 200, 110, 10, 30}} -} -}, -/* UG....GU */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 280, 280, 170, 200},{ 340, 250, 250, 150, 200},{ 340, 150, 150, 50, 200},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 260, 260, 160, 200},{ 340, 310, 250, 240, 200},{ 340, 200, 200, 200, 200},{ 340, 310, 250, 240, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 150, 150, 50, 200},{ 340, 200, 200, 200, 200},{ 340, 210, 210, 100, 200},{ 340, 130, 30, 110, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 310, 250, 240, 200},{ 340, 230, 130, 210, 200},{ 340, 270, 170, 240, 200}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 230, 340, 200, 310},{ 340, 210, 250, 200, 220},{ 340, 110, 250, 200, 220},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 220, 260, 200, 230},{ 340, 200, 250, 200, 220},{ 340, 200, 200, 200, 200},{ 340, 200, 250, 200, 220}}, -{{ 340, 340, 340, 340, 340},{ 340, 110, 250, 200, 220},{ 340, 200, 200, 200, 200},{ 340, 160, 270, 200, 240},{ 340, -10, 130, 200, 100}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 250, 200, 220},{ 340, 90, 230, 200, 200},{ 340, 120, 170, 200, 140}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 170, 200, 210, 220},{ 340, 150, 200, 190, 100},{ 340, 50, 200, 90, 180},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 160, 200, 200, 110},{ 340, 240, 200, 240, 190},{ 340, 200, 200, 200, 200},{ 340, 240, 200, 240, 190}}, -{{ 340, 340, 340, 340, 340},{ 340, 50, 200, 90, 180},{ 340, 200, 200, 200, 200},{ 340, 100, 200, 140, 150},{ 340, 110, 200, 70, -120}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 240, 200, 240, 190},{ 340, 210, 200, 170, -20},{ 340, 240, 200, 200, 190}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 340, 100, 290},{ 340, 200, 250, -30, 170},{ 340, 200, 250, 50, 250},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 260, -20, 180},{ 340, 200, 250, 70, 160},{ 340, 200, 200, 200, 200},{ 340, 200, 250, 70, 160}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 250, 50, 250},{ 340, 200, 200, 200, 200},{ 340, 200, 270, 30, 220},{ 340, 200, 130, -250, 130}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 250, 70, 160},{ 340, 200, 230, -150, 230},{ 340, 200, 170, 70, 80}} -} -}, -/* UG....UG */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 280, 280, 170, 200},{ 340, 230, 230, 130, 200},{ 340, 170, 170, 70, 200},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 280, 280, 170, 200},{ 340, 340, 280, 270, 200},{ 340, 200, 200, 200, 200},{ 340, 340, 280, 270, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 170, 170, 70, 200},{ 340, 200, 200, 200, 200},{ 340, 210, 210, 110, 200},{ 340, 100, 0, 70, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 310, 250, 240, 200},{ 340, 220, 120, 200, 200},{ 340, 290, 190, 270, 200}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 230, 340, 200, 310},{ 340, 190, 230, 200, 200},{ 340, 130, 270, 200, 240},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 230, 280, 200, 250},{ 340, 230, 280, 200, 250},{ 340, 200, 200, 200, 200},{ 340, 230, 280, 200, 250}}, -{{ 340, 340, 340, 340, 340},{ 340, 130, 270, 200, 240},{ 340, 200, 200, 200, 200},{ 340, 170, 270, 200, 240},{ 340, -50, 100, 200, 70}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 250, 200, 220},{ 340, 80, 220, 200, 190},{ 340, 150, 190, 200, 160}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 170, 200, 210, 220},{ 340, 130, 200, 170, 80},{ 340, 70, 200, 110, 200},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 170, 200, 210, 120},{ 340, 270, 200, 270, 220},{ 340, 200, 200, 200, 200},{ 340, 270, 200, 270, 220}}, -{{ 340, 340, 340, 340, 340},{ 340, 70, 200, 110, 200},{ 340, 200, 200, 200, 200},{ 340, 110, 200, 150, 160},{ 340, 70, 200, 30, -160}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 240, 200, 240, 190},{ 340, 200, 200, 160, -30},{ 340, 270, 200, 230, 220}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 340, 100, 290},{ 340, 200, 230, -50, 150},{ 340, 200, 270, 70, 270},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 280, 0, 190},{ 340, 200, 280, 100, 190},{ 340, 200, 200, 200, 200},{ 340, 200, 280, 100, 190}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 270, 70, 270},{ 340, 200, 200, 200, 200},{ 340, 200, 270, 30, 230},{ 340, 200, 100, -290, 90}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 250, 70, 160},{ 340, 200, 220, -160, 220},{ 340, 200, 190, 90, 110}} -} -}, -/* UG....AU */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 280, 280, 170, 200},{ 340, 250, 250, 150, 200},{ 340, 150, 150, 50, 200},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 260, 260, 160, 200},{ 340, 310, 250, 240, 200},{ 340, 200, 200, 200, 200},{ 340, 310, 250, 240, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 150, 150, 50, 200},{ 340, 200, 200, 200, 200},{ 340, 210, 210, 100, 200},{ 340, 130, 30, 110, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 310, 250, 240, 200},{ 340, 230, 130, 210, 200},{ 340, 270, 170, 240, 200}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 230, 340, 200, 310},{ 340, 210, 250, 200, 220},{ 340, 110, 250, 200, 220},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 220, 260, 200, 230},{ 340, 200, 250, 200, 220},{ 340, 200, 200, 200, 200},{ 340, 200, 250, 200, 220}}, -{{ 340, 340, 340, 340, 340},{ 340, 110, 250, 200, 220},{ 340, 200, 200, 200, 200},{ 340, 160, 270, 200, 240},{ 340, -10, 130, 200, 100}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 250, 200, 220},{ 340, 90, 230, 200, 200},{ 340, 120, 170, 200, 140}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 170, 200, 210, 220},{ 340, 150, 200, 190, 100},{ 340, 50, 200, 90, 180},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 160, 200, 200, 110},{ 340, 240, 200, 240, 190},{ 340, 200, 200, 200, 200},{ 340, 240, 200, 240, 190}}, -{{ 340, 340, 340, 340, 340},{ 340, 50, 200, 90, 180},{ 340, 200, 200, 200, 200},{ 340, 100, 200, 140, 150},{ 340, 110, 200, 70, -120}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 240, 200, 240, 190},{ 340, 210, 200, 170, -20},{ 340, 240, 200, 200, 190}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 340, 100, 290},{ 340, 200, 250, -30, 170},{ 340, 200, 250, 50, 250},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 260, -20, 180},{ 340, 200, 250, 70, 160},{ 340, 200, 200, 200, 200},{ 340, 200, 250, 70, 160}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 250, 50, 250},{ 340, 200, 200, 200, 200},{ 340, 200, 270, 30, 220},{ 340, 200, 130, -250, 130}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 250, 70, 160},{ 340, 200, 230, -150, 230},{ 340, 200, 170, 70, 80}} -} -}, -/* UG....UA */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 280, 280, 170, 200},{ 340, 230, 230, 130, 200},{ 340, 170, 170, 70, 200},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 280, 280, 170, 200},{ 340, 340, 280, 270, 200},{ 340, 200, 200, 200, 200},{ 340, 340, 280, 270, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 170, 170, 70, 200},{ 340, 200, 200, 200, 200},{ 340, 210, 210, 110, 200},{ 340, 100, 0, 70, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 310, 250, 240, 200},{ 340, 220, 120, 200, 200},{ 340, 290, 190, 270, 200}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 230, 340, 200, 310},{ 340, 190, 230, 200, 200},{ 340, 130, 270, 200, 240},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 230, 280, 200, 250},{ 340, 230, 280, 200, 250},{ 340, 200, 200, 200, 200},{ 340, 230, 280, 200, 250}}, -{{ 340, 340, 340, 340, 340},{ 340, 130, 270, 200, 240},{ 340, 200, 200, 200, 200},{ 340, 170, 270, 200, 240},{ 340, -50, 100, 200, 70}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 250, 200, 220},{ 340, 80, 220, 200, 190},{ 340, 150, 190, 200, 160}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 170, 200, 210, 220},{ 340, 130, 200, 170, 80},{ 340, 70, 200, 110, 200},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 170, 200, 210, 120},{ 340, 270, 200, 270, 220},{ 340, 200, 200, 200, 200},{ 340, 270, 200, 270, 220}}, -{{ 340, 340, 340, 340, 340},{ 340, 70, 200, 110, 200},{ 340, 200, 200, 200, 200},{ 340, 110, 200, 150, 160},{ 340, 70, 200, 30, -160}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 240, 200, 240, 190},{ 340, 200, 200, 160, -30},{ 340, 270, 200, 230, 220}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 340, 100, 290},{ 340, 200, 230, -50, 150},{ 340, 200, 270, 70, 270},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 280, 0, 190},{ 340, 200, 280, 100, 190},{ 340, 200, 200, 200, 200},{ 340, 200, 280, 100, 190}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 270, 70, 270},{ 340, 200, 200, 200, 200},{ 340, 200, 270, 30, 230},{ 340, 200, 100, -290, 90}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 250, 70, 160},{ 340, 200, 220, -160, 220},{ 340, 200, 190, 90, 110}} -} -}, -/* UG....?? */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -} -} -}, -{ /* noPair */ {{{{0}}}}, -/* AU....CG */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 190, 80, 200},{ 340, 190, 180, 70, 200},{ 340, 100, 90, -20, 200},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 240, 220, 110, 200},{ 340, 280, 210, 200, 200},{ 340, 200, 200, 200, 200},{ 340, 270, 190, 180, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 100, 90, -20, 200},{ 340, 200, 200, 200, 200},{ 340, 180, 160, 50, 200},{ 340, 30, -80, -10, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 270, 190, 180, 200},{ 340, 180, 70, 140, 200},{ 340, 220, 100, 180, 200}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 180, 230, 200, 230},{ 340, 170, 160, 200, 160},{ 340, 80, 170, 200, 170},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 210, 210, 200, 210},{ 340, 200, 190, 200, 190},{ 340, 200, 200, 200, 200},{ 340, 180, 180, 200, 180}}, -{{ 340, 340, 340, 340, 340},{ 340, 80, 170, 200, 170},{ 340, 200, 200, 200, 200},{ 340, 150, 210, 200, 210},{ 340, -90, 0, 200, 0}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 180, 180, 200, 180},{ 340, 60, 150, 200, 150},{ 340, 90, 90, 200, 90}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 80, 200, 130, 160},{ 340, 70, 200, 120, 50},{ 340, -20, 200, 30, 140},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 110, 200, 170, 90},{ 340, 200, 200, 210, 180},{ 340, 200, 200, 200, 200},{ 340, 180, 200, 200, 160}}, -{{ 340, 340, 340, 340, 340},{ 340, -20, 200, 30, 140},{ 340, 200, 200, 200, 200},{ 340, 50, 200, 110, 130},{ 340, -10, 200, -40, -210}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 180, 200, 200, 160},{ 340, 140, 200, 110, -60},{ 340, 180, 200, 150, 160}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 230, 60, 190},{ 340, 200, 160, -50, 80},{ 340, 200, 170, 40, 180},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 210, 0, 130},{ 340, 200, 190, 80, 110},{ 340, 200, 200, 200, 200},{ 340, 200, 180, 70, 100}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 170, 40, 180},{ 340, 200, 200, 200, 200},{ 340, 200, 210, 40, 170},{ 340, 200, 0, -310, 0}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 180, 70, 100},{ 340, 200, 150, -160, 160},{ 340, 200, 90, 60, 10}} -} -}, -/* AU....GC */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 210, 200, 90, 200},{ 340, 190, 170, 60, 200},{ 340, 10, 0, -110, 200},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 180, 170, 60, 200},{ 340, 250, 170, 160, 200},{ 340, 200, 200, 200, 200},{ 340, 150, 70, 70, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 70, 60, -50, 200},{ 340, 200, 200, 200, 200},{ 340, 180, 160, 50, 200},{ 340, 0, -120, -50, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 250, 180, 170, 200},{ 340, 40, -80, -10, 200},{ 340, 210, 100, 170, 200}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 190, 240, 200, 240},{ 340, 160, 160, 200, 160},{ 340, -10, 80, 200, 80},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 160, 150, 200, 150},{ 340, 160, 160, 200, 160},{ 340, 200, 200, 200, 200},{ 340, 60, 60, 200, 60}}, -{{ 340, 340, 340, 340, 340},{ 340, 50, 140, 200, 140},{ 340, 200, 200, 200, 200},{ 340, 150, 210, 200, 210},{ 340, -130, -30, 200, -30}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 170, 160, 200, 160},{ 340, -90, 10, 200, 10},{ 340, 90, 80, 200, 80}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 90, 200, 140, 170},{ 340, 60, 200, 120, 40},{ 340, -110, 200, -60, 50},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 60, 200, 110, 40},{ 340, 160, 200, 180, 140},{ 340, 200, 200, 200, 200},{ 340, 70, 200, 80, 50}}, -{{ 340, 340, 340, 340, 340},{ 340, -50, 200, 0, 110},{ 340, 200, 200, 200, 200},{ 340, 50, 200, 110, 130},{ 340, -50, 200, -70, -250}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 170, 200, 180, 150},{ 340, -10, 200, -30, -210},{ 340, 170, 200, 140, 150}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 240, 70, 200},{ 340, 200, 160, -50, 80},{ 340, 200, 80, -50, 80},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 150, -60, 70},{ 340, 200, 160, 50, 80},{ 340, 200, 200, 200, 200},{ 340, 200, 60, -50, -20}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 140, 10, 150},{ 340, 200, 200, 200, 200},{ 340, 200, 210, 40, 170},{ 340, 200, -30, -350, -30}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 160, 50, 80},{ 340, 200, 10, -310, 10},{ 340, 200, 80, 50, 0}} -} -}, -/* AU....GU */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 280, 260, 150, 200},{ 340, 250, 240, 130, 200},{ 340, 150, 140, 30, 200},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 260, 250, 140, 200},{ 340, 310, 230, 220, 200},{ 340, 200, 200, 200, 200},{ 340, 310, 230, 220, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 150, 140, 30, 200},{ 340, 200, 200, 200, 200},{ 340, 210, 190, 80, 200},{ 340, 130, 20, 90, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 310, 230, 220, 200},{ 340, 230, 120, 190, 200},{ 340, 270, 150, 220, 200}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 250, 310, 200, 310},{ 340, 230, 220, 200, 220},{ 340, 130, 220, 200, 220},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 240, 230, 200, 230},{ 340, 220, 220, 200, 220},{ 340, 200, 200, 200, 200},{ 340, 220, 220, 200, 220}}, -{{ 340, 340, 340, 340, 340},{ 340, 130, 220, 200, 220},{ 340, 200, 200, 200, 200},{ 340, 180, 240, 200, 240},{ 340, 10, 100, 200, 100}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 220, 220, 200, 220},{ 340, 110, 200, 200, 200},{ 340, 140, 140, 200, 140}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 150, 200, 210, 230},{ 340, 130, 200, 180, 110},{ 340, 30, 200, 80, 190},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 140, 200, 190, 120},{ 340, 220, 200, 240, 200},{ 340, 200, 200, 200, 200},{ 340, 220, 200, 240, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 30, 200, 80, 190},{ 340, 200, 200, 200, 200},{ 340, 80, 200, 140, 160},{ 340, 90, 200, 70, -110}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 220, 200, 240, 200},{ 340, 190, 200, 160, -10},{ 340, 220, 200, 200, 200}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 310, 130, 270},{ 340, 200, 220, 10, 140},{ 340, 200, 220, 90, 220},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 230, 20, 150},{ 340, 200, 220, 100, 140},{ 340, 200, 200, 200, 200},{ 340, 200, 220, 100, 140}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 220, 90, 220},{ 340, 200, 200, 200, 200},{ 340, 200, 240, 70, 200},{ 340, 200, 100, -210, 110}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 220, 100, 140},{ 340, 200, 200, -110, 200},{ 340, 200, 140, 110, 60}} -} -}, -/* AU....UG */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 280, 260, 150, 200},{ 340, 230, 220, 110, 200},{ 340, 170, 160, 50, 200},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 280, 260, 150, 200},{ 340, 340, 260, 250, 200},{ 340, 200, 200, 200, 200},{ 340, 340, 260, 250, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 170, 160, 50, 200},{ 340, 200, 200, 200, 200},{ 340, 210, 200, 90, 200},{ 340, 100, -20, 50, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 310, 230, 220, 200},{ 340, 220, 110, 180, 200},{ 340, 290, 180, 250, 200}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 250, 310, 200, 310},{ 340, 210, 200, 200, 200},{ 340, 150, 240, 200, 240},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 250, 250, 200, 250},{ 340, 250, 250, 200, 250},{ 340, 200, 200, 200, 200},{ 340, 250, 250, 200, 250}}, -{{ 340, 340, 340, 340, 340},{ 340, 150, 240, 200, 240},{ 340, 200, 200, 200, 200},{ 340, 190, 240, 200, 240},{ 340, -30, 70, 200, 70}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 220, 220, 200, 220},{ 340, 100, 190, 200, 190},{ 340, 170, 160, 200, 160}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 150, 200, 210, 230},{ 340, 110, 200, 160, 90},{ 340, 50, 200, 100, 210},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 150, 200, 210, 130},{ 340, 250, 200, 270, 230},{ 340, 200, 200, 200, 200},{ 340, 250, 200, 270, 230}}, -{{ 340, 340, 340, 340, 340},{ 340, 50, 200, 100, 210},{ 340, 200, 200, 200, 200},{ 340, 90, 200, 140, 170},{ 340, 50, 200, 30, -150}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 220, 200, 240, 200},{ 340, 180, 200, 150, -20},{ 340, 250, 200, 220, 230}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 310, 130, 270},{ 340, 200, 200, -10, 120},{ 340, 200, 240, 110, 240},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 250, 30, 170},{ 340, 200, 250, 130, 170},{ 340, 200, 200, 200, 200},{ 340, 200, 250, 130, 170}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 240, 110, 240},{ 340, 200, 200, 200, 200},{ 340, 200, 240, 70, 200},{ 340, 200, 70, -250, 70}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 220, 100, 140},{ 340, 200, 190, -120, 190},{ 340, 200, 160, 130, 80}} -} -}, -/* AU....AU */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 280, 260, 150, 200},{ 340, 250, 240, 130, 200},{ 340, 150, 140, 30, 200},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 260, 250, 140, 200},{ 340, 310, 230, 220, 200},{ 340, 200, 200, 200, 200},{ 340, 310, 230, 220, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 150, 140, 30, 200},{ 340, 200, 200, 200, 200},{ 340, 210, 190, 80, 200},{ 340, 130, 20, 90, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 310, 230, 220, 200},{ 340, 230, 120, 190, 200},{ 340, 270, 150, 220, 200}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 250, 310, 200, 310},{ 340, 230, 220, 200, 220},{ 340, 130, 220, 200, 220},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 240, 230, 200, 230},{ 340, 220, 220, 200, 220},{ 340, 200, 200, 200, 200},{ 340, 220, 220, 200, 220}}, -{{ 340, 340, 340, 340, 340},{ 340, 130, 220, 200, 220},{ 340, 200, 200, 200, 200},{ 340, 180, 240, 200, 240},{ 340, 10, 100, 200, 100}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 220, 220, 200, 220},{ 340, 110, 200, 200, 200},{ 340, 140, 140, 200, 140}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 150, 200, 210, 230},{ 340, 130, 200, 180, 110},{ 340, 30, 200, 80, 190},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 140, 200, 190, 120},{ 340, 220, 200, 240, 200},{ 340, 200, 200, 200, 200},{ 340, 220, 200, 240, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 30, 200, 80, 190},{ 340, 200, 200, 200, 200},{ 340, 80, 200, 140, 160},{ 340, 90, 200, 70, -110}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 220, 200, 240, 200},{ 340, 190, 200, 160, -10},{ 340, 220, 200, 200, 200}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 310, 130, 270},{ 340, 200, 220, 10, 140},{ 340, 200, 220, 90, 220},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 230, 20, 150},{ 340, 200, 220, 100, 140},{ 340, 200, 200, 200, 200},{ 340, 200, 220, 100, 140}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 220, 90, 220},{ 340, 200, 200, 200, 200},{ 340, 200, 240, 70, 200},{ 340, 200, 100, -210, 110}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 220, 100, 140},{ 340, 200, 200, -110, 200},{ 340, 200, 140, 110, 60}} -} -}, -/* AU....UA */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 280, 260, 150, 200},{ 340, 230, 220, 110, 200},{ 340, 170, 160, 50, 200},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 280, 260, 150, 200},{ 340, 340, 260, 250, 200},{ 340, 200, 200, 200, 200},{ 340, 340, 260, 250, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 170, 160, 50, 200},{ 340, 200, 200, 200, 200},{ 340, 210, 200, 90, 200},{ 340, 100, -20, 50, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 310, 230, 220, 200},{ 340, 220, 110, 180, 200},{ 340, 290, 180, 250, 200}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 250, 310, 200, 310},{ 340, 210, 200, 200, 200},{ 340, 150, 240, 200, 240},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 250, 250, 200, 250},{ 340, 250, 250, 200, 250},{ 340, 200, 200, 200, 200},{ 340, 250, 250, 200, 250}}, -{{ 340, 340, 340, 340, 340},{ 340, 150, 240, 200, 240},{ 340, 200, 200, 200, 200},{ 340, 190, 240, 200, 240},{ 340, -30, 70, 200, 70}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 220, 220, 200, 220},{ 340, 100, 190, 200, 190},{ 340, 170, 160, 200, 160}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 150, 200, 210, 230},{ 340, 110, 200, 160, 90},{ 340, 50, 200, 100, 210},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 150, 200, 210, 130},{ 340, 250, 200, 270, 230},{ 340, 200, 200, 200, 200},{ 340, 250, 200, 270, 230}}, -{{ 340, 340, 340, 340, 340},{ 340, 50, 200, 100, 210},{ 340, 200, 200, 200, 200},{ 340, 90, 200, 140, 170},{ 340, 50, 200, 30, -150}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 220, 200, 240, 200},{ 340, 180, 200, 150, -20},{ 340, 250, 200, 220, 230}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 310, 130, 270},{ 340, 200, 200, -10, 120},{ 340, 200, 240, 110, 240},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 250, 30, 170},{ 340, 200, 250, 130, 170},{ 340, 200, 200, 200, 200},{ 340, 200, 250, 130, 170}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 240, 110, 240},{ 340, 200, 200, 200, 200},{ 340, 200, 240, 70, 200},{ 340, 200, 70, -250, 70}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 220, 100, 140},{ 340, 200, 190, -120, 190},{ 340, 200, 160, 130, 80}} -} -}, -/* AU....?? */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -} -} -}, -{ /* noPair */ {{{{0}}}}, -/* UA....CG */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 100, 200},{ 340, 190, 190, 90, 200},{ 340, 100, 100, 0, 200},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 240, 240, 130, 200},{ 340, 280, 220, 220, 200},{ 340, 200, 200, 200, 200},{ 340, 270, 210, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 100, 100, 0, 200},{ 340, 200, 200, 200, 200},{ 340, 180, 180, 70, 200},{ 340, 30, -70, 10, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 270, 210, 200, 200},{ 340, 180, 80, 160, 200},{ 340, 220, 120, 190, 200}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 160, 260, 200, 230},{ 340, 150, 190, 200, 160},{ 340, 60, 200, 200, 170},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 190, 240, 200, 210},{ 340, 180, 220, 200, 190},{ 340, 200, 200, 200, 200},{ 340, 160, 210, 200, 180}}, -{{ 340, 340, 340, 340, 340},{ 340, 60, 200, 200, 170},{ 340, 200, 200, 200, 200},{ 340, 130, 240, 200, 210},{ 340, -110, 30, 200, 0}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 160, 210, 200, 180},{ 340, 40, 180, 200, 150},{ 340, 70, 120, 200, 90}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 100, 200, 140, 150},{ 340, 90, 200, 130, 40},{ 340, 0, 200, 40, 130},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 130, 200, 170, 80},{ 340, 220, 200, 220, 170},{ 340, 200, 200, 200, 200},{ 340, 200, 200, 200, 150}}, -{{ 340, 340, 340, 340, 340},{ 340, 0, 200, 40, 130},{ 340, 200, 200, 200, 200},{ 340, 70, 200, 110, 120},{ 340, 10, 200, -30, -220}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 200, 200, 150},{ 340, 160, 200, 120, -70},{ 340, 190, 200, 150, 150}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 260, 20, 220},{ 340, 200, 190, -90, 110},{ 340, 200, 200, 0, 200},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 240, -40, 150},{ 340, 200, 220, 40, 140},{ 340, 200, 200, 200, 200},{ 340, 200, 210, 30, 120}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 0, 200},{ 340, 200, 200, 200, 200},{ 340, 200, 240, 0, 190},{ 340, 200, 30, -350, 30}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 210, 30, 120},{ 340, 200, 180, -200, 180},{ 340, 200, 120, 20, 30}} -} -}, -/* UA....GC */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 210, 210, 110, 200},{ 340, 190, 190, 80, 200},{ 340, 10, 10, -90, 200},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 180, 180, 80, 200},{ 340, 250, 190, 180, 200},{ 340, 200, 200, 200, 200},{ 340, 150, 90, 90, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 70, 70, -30, 200},{ 340, 200, 200, 200, 200},{ 340, 180, 180, 70, 200},{ 340, 0, -100, -30, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 250, 190, 190, 200},{ 340, 40, -60, 10, 200},{ 340, 210, 110, 190, 200}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 170, 270, 200, 240},{ 340, 140, 190, 200, 160},{ 340, -30, 110, 200, 80},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 140, 180, 200, 150},{ 340, 140, 190, 200, 160},{ 340, 200, 200, 200, 200},{ 340, 40, 90, 200, 60}}, -{{ 340, 340, 340, 340, 340},{ 340, 30, 170, 200, 140},{ 340, 200, 200, 200, 200},{ 340, 130, 240, 200, 210},{ 340, -150, 0, 200, -30}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 150, 190, 200, 160},{ 340, -110, 40, 200, 10},{ 340, 70, 110, 200, 80}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 110, 200, 150, 160},{ 340, 80, 200, 120, 30},{ 340, -90, 200, -50, 40},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 80, 200, 120, 30},{ 340, 180, 200, 180, 130},{ 340, 200, 200, 200, 200},{ 340, 90, 200, 80, 40}}, -{{ 340, 340, 340, 340, 340},{ 340, -30, 200, 10, 100},{ 340, 200, 200, 200, 200},{ 340, 70, 200, 110, 120},{ 340, -30, 200, -70, -260}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 190, 200, 190, 140},{ 340, 10, 200, -30, -220},{ 340, 190, 200, 150, 140}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 270, 30, 230},{ 340, 200, 190, -90, 100},{ 340, 200, 110, -90, 110},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 180, -100, 100},{ 340, 200, 190, 10, 100},{ 340, 200, 200, 200, 200},{ 340, 200, 90, -90, 0}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 170, -30, 170},{ 340, 200, 200, 200, 200},{ 340, 200, 240, 0, 190},{ 340, 200, 0, -390, -10}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 190, 10, 110},{ 340, 200, 40, -350, 30},{ 340, 200, 110, 10, 30}} -} -}, -/* UA....GU */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 280, 280, 170, 200},{ 340, 250, 250, 150, 200},{ 340, 150, 150, 50, 200},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 260, 260, 160, 200},{ 340, 310, 250, 240, 200},{ 340, 200, 200, 200, 200},{ 340, 310, 250, 240, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 150, 150, 50, 200},{ 340, 200, 200, 200, 200},{ 340, 210, 210, 100, 200},{ 340, 130, 30, 110, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 310, 250, 240, 200},{ 340, 230, 130, 210, 200},{ 340, 270, 170, 240, 200}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 230, 340, 200, 310},{ 340, 210, 250, 200, 220},{ 340, 110, 250, 200, 220},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 220, 260, 200, 230},{ 340, 200, 250, 200, 220},{ 340, 200, 200, 200, 200},{ 340, 200, 250, 200, 220}}, -{{ 340, 340, 340, 340, 340},{ 340, 110, 250, 200, 220},{ 340, 200, 200, 200, 200},{ 340, 160, 270, 200, 240},{ 340, -10, 130, 200, 100}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 250, 200, 220},{ 340, 90, 230, 200, 200},{ 340, 120, 170, 200, 140}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 170, 200, 210, 220},{ 340, 150, 200, 190, 100},{ 340, 50, 200, 90, 180},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 160, 200, 200, 110},{ 340, 240, 200, 240, 190},{ 340, 200, 200, 200, 200},{ 340, 240, 200, 240, 190}}, -{{ 340, 340, 340, 340, 340},{ 340, 50, 200, 90, 180},{ 340, 200, 200, 200, 200},{ 340, 100, 200, 140, 150},{ 340, 110, 200, 70, -120}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 240, 200, 240, 190},{ 340, 210, 200, 170, -20},{ 340, 240, 200, 200, 190}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 340, 100, 290},{ 340, 200, 250, -30, 170},{ 340, 200, 250, 50, 250},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 260, -20, 180},{ 340, 200, 250, 70, 160},{ 340, 200, 200, 200, 200},{ 340, 200, 250, 70, 160}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 250, 50, 250},{ 340, 200, 200, 200, 200},{ 340, 200, 270, 30, 220},{ 340, 200, 130, -250, 130}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 250, 70, 160},{ 340, 200, 230, -150, 230},{ 340, 200, 170, 70, 80}} -} -}, -/* UA....UG */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 280, 280, 170, 200},{ 340, 230, 230, 130, 200},{ 340, 170, 170, 70, 200},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 280, 280, 170, 200},{ 340, 340, 280, 270, 200},{ 340, 200, 200, 200, 200},{ 340, 340, 280, 270, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 170, 170, 70, 200},{ 340, 200, 200, 200, 200},{ 340, 210, 210, 110, 200},{ 340, 100, 0, 70, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 310, 250, 240, 200},{ 340, 220, 120, 200, 200},{ 340, 290, 190, 270, 200}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 230, 340, 200, 310},{ 340, 190, 230, 200, 200},{ 340, 130, 270, 200, 240},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 230, 280, 200, 250},{ 340, 230, 280, 200, 250},{ 340, 200, 200, 200, 200},{ 340, 230, 280, 200, 250}}, -{{ 340, 340, 340, 340, 340},{ 340, 130, 270, 200, 240},{ 340, 200, 200, 200, 200},{ 340, 170, 270, 200, 240},{ 340, -50, 100, 200, 70}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 250, 200, 220},{ 340, 80, 220, 200, 190},{ 340, 150, 190, 200, 160}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 170, 200, 210, 220},{ 340, 130, 200, 170, 80},{ 340, 70, 200, 110, 200},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 170, 200, 210, 120},{ 340, 270, 200, 270, 220},{ 340, 200, 200, 200, 200},{ 340, 270, 200, 270, 220}}, -{{ 340, 340, 340, 340, 340},{ 340, 70, 200, 110, 200},{ 340, 200, 200, 200, 200},{ 340, 110, 200, 150, 160},{ 340, 70, 200, 30, -160}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 240, 200, 240, 190},{ 340, 200, 200, 160, -30},{ 340, 270, 200, 230, 220}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 340, 100, 290},{ 340, 200, 230, -50, 150},{ 340, 200, 270, 70, 270},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 280, 0, 190},{ 340, 200, 280, 100, 190},{ 340, 200, 200, 200, 200},{ 340, 200, 280, 100, 190}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 270, 70, 270},{ 340, 200, 200, 200, 200},{ 340, 200, 270, 30, 230},{ 340, 200, 100, -290, 90}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 250, 70, 160},{ 340, 200, 220, -160, 220},{ 340, 200, 190, 90, 110}} -} -}, -/* UA....AU */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 280, 280, 170, 200},{ 340, 250, 250, 150, 200},{ 340, 150, 150, 50, 200},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 260, 260, 160, 200},{ 340, 310, 250, 240, 200},{ 340, 200, 200, 200, 200},{ 340, 310, 250, 240, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 150, 150, 50, 200},{ 340, 200, 200, 200, 200},{ 340, 210, 210, 100, 200},{ 340, 130, 30, 110, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 310, 250, 240, 200},{ 340, 230, 130, 210, 200},{ 340, 270, 170, 240, 200}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 230, 340, 200, 310},{ 340, 210, 250, 200, 220},{ 340, 110, 250, 200, 220},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 220, 260, 200, 230},{ 340, 200, 250, 200, 220},{ 340, 200, 200, 200, 200},{ 340, 200, 250, 200, 220}}, -{{ 340, 340, 340, 340, 340},{ 340, 110, 250, 200, 220},{ 340, 200, 200, 200, 200},{ 340, 160, 270, 200, 240},{ 340, -10, 130, 200, 100}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 250, 200, 220},{ 340, 90, 230, 200, 200},{ 340, 120, 170, 200, 140}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 170, 200, 210, 220},{ 340, 150, 200, 190, 100},{ 340, 50, 200, 90, 180},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 160, 200, 200, 110},{ 340, 240, 200, 240, 190},{ 340, 200, 200, 200, 200},{ 340, 240, 200, 240, 190}}, -{{ 340, 340, 340, 340, 340},{ 340, 50, 200, 90, 180},{ 340, 200, 200, 200, 200},{ 340, 100, 200, 140, 150},{ 340, 110, 200, 70, -120}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 240, 200, 240, 190},{ 340, 210, 200, 170, -20},{ 340, 240, 200, 200, 190}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 340, 100, 290},{ 340, 200, 250, -30, 170},{ 340, 200, 250, 50, 250},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 260, -20, 180},{ 340, 200, 250, 70, 160},{ 340, 200, 200, 200, 200},{ 340, 200, 250, 70, 160}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 250, 50, 250},{ 340, 200, 200, 200, 200},{ 340, 200, 270, 30, 220},{ 340, 200, 130, -250, 130}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 250, 70, 160},{ 340, 200, 230, -150, 230},{ 340, 200, 170, 70, 80}} -} -}, -/* UA....UA */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 280, 280, 170, 200},{ 340, 230, 230, 130, 200},{ 340, 170, 170, 70, 200},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 280, 280, 170, 200},{ 340, 340, 280, 270, 200},{ 340, 200, 200, 200, 200},{ 340, 340, 280, 270, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 170, 170, 70, 200},{ 340, 200, 200, 200, 200},{ 340, 210, 210, 110, 200},{ 340, 100, 0, 70, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 310, 250, 240, 200},{ 340, 220, 120, 200, 200},{ 340, 290, 190, 270, 200}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 230, 340, 200, 310},{ 340, 190, 230, 200, 200},{ 340, 130, 270, 200, 240},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 230, 280, 200, 250},{ 340, 230, 280, 200, 250},{ 340, 200, 200, 200, 200},{ 340, 230, 280, 200, 250}}, -{{ 340, 340, 340, 340, 340},{ 340, 130, 270, 200, 240},{ 340, 200, 200, 200, 200},{ 340, 170, 270, 200, 240},{ 340, -50, 100, 200, 70}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 250, 200, 220},{ 340, 80, 220, 200, 190},{ 340, 150, 190, 200, 160}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 170, 200, 210, 220},{ 340, 130, 200, 170, 80},{ 340, 70, 200, 110, 200},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 170, 200, 210, 120},{ 340, 270, 200, 270, 220},{ 340, 200, 200, 200, 200},{ 340, 270, 200, 270, 220}}, -{{ 340, 340, 340, 340, 340},{ 340, 70, 200, 110, 200},{ 340, 200, 200, 200, 200},{ 340, 110, 200, 150, 160},{ 340, 70, 200, 30, -160}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 240, 200, 240, 190},{ 340, 200, 200, 160, -30},{ 340, 270, 200, 230, 220}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 340, 100, 290},{ 340, 200, 230, -50, 150},{ 340, 200, 270, 70, 270},{ 340, 200, 200, 200, 200}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 280, 0, 190},{ 340, 200, 280, 100, 190},{ 340, 200, 200, 200, 200},{ 340, 200, 280, 100, 190}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 270, 70, 270},{ 340, 200, 200, 200, 200},{ 340, 200, 270, 30, 230},{ 340, 200, 100, -290, 90}}, -{{ 340, 340, 340, 340, 340},{ 340, 200, 200, 200, 200},{ 340, 200, 250, 70, 160},{ 340, 200, 220, -160, 220},{ 340, 200, 190, 90, 110}} -} -}, -/* UA....?? */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -} -} -}, -{ /* noPair */ {{{{0}}}}, -/* ??....CG */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -} -}, -/* ??....GC */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -} -}, -/* ??....GU */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -} -}, -/* ??....UG */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -} -}, -/* ??....AU */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -} -}, -/* ??....UA */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -} -}, -/* ??....?? */ -{{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -}, -{ -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}}, -{{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340},{ 340, 340, 340, 340, 340}} -} -} -} -}; - -const int energy_param::int22_H[8][8][5][5][5][5] = -{ /* noPair */ {{{{{0}}}}}, -{ /* noPair */ {{{{0}}}}, -/* CG.@@..CG */ -{ { { { 0, 0, 0, 0, 0}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* CG.@A..CG */ -{ { 0, 0, 0, 0, 0}, -{-1029,-1029,-1029,-1029,-1029}, -{ -519, -519, -519, -519, -519}, -{ -939, -939, -939, -939, -939}, -{ -809, -809, -809, -809, -809}}, -/* CG.@C..CG */ -{ { 0, 0, 0, 0, 0}, -{ -949, -949, -949, -949, -949}, -{ -449, -449, -449, -449, -449}, -{ -939, -939, -939, -939, -939}, -{ -739, -739, -739, -739, -739}}, -/* CG.@G..CG */ -{ { 0, 0, 0, 0, 0}, -{-1029,-1029,-1029,-1029,-1029}, -{ -519, -519, -519, -519, -519}, -{ -939, -939, -939, -939, -939}, -{ -809, -809, -809, -809, -809}}, -/* CG.@U..CG */ -{ { 0, 0, 0, 0, 0}, -{-1029,-1029,-1029,-1029,-1029}, -{ -669, -669, -669, -669, -669}, -{ -939, -939, -939, -939, -939}, -{ -859, -859, -859, -859, -859}}}, -/* CG.A@..CG */ -{{{ -50,-1029, -949,-1029,-1029}, -{ -100,-1079, -999,-1079,-1079}, -{ -100,-1079, -999,-1079,-1079}, -{ -100,-1079, -999,-1079,-1079}, -{ -100,-1079, -999,-1079,-1079}}, -/* CG.AA..CG */ -{{ -50,-1029, -949,-1029,-1029}, -{-1079,-2058,-1978,-2058,-2058}, -{ -569,-1548,-1468,-1548,-1548}, -{ -989,-1968,-1888,-1968,-1968}, -{ -859,-1838,-1758,-1838,-1838}}, -/* CG.AC..CG */ -{{ -50,-1029, -949,-1029,-1029}, -{ -999,-1978,-1898,-1978,-1978}, -{ -499,-1478,-1398,-1478,-1478}, -{ -989,-1968,-1888,-1968,-1968}, -{ -789,-1768,-1688,-1768,-1768}}, -/* CG.AG..CG */ -{{ -50,-1029, -949,-1029,-1029}, -{-1079,-2058,-1978,-2058,-2058}, -{ -569,-1548,-1468,-1548,-1548}, -{ -989,-1968,-1888,-1968,-1968}, -{ -859,-1838,-1758,-1838,-1838}}, -/* CG.AU..CG */ -{{ -50,-1029, -949,-1029,-1029}, -{-1079,-2058,-1978,-2058,-2058}, -{ -719,-1698,-1618,-1698,-1698}, -{ -989,-1968,-1888,-1968,-1968}, -{ -909,-1888,-1808,-1888,-1888}}}, -/* CG.C@..CG */ -{{{ -50, -519, -449, -519, -669}, -{ -100, -569, -499, -569, -719}, -{ -100, -569, -499, -569, -719}, -{ -100, -569, -499, -569, -719}, -{ -100, -569, -499, -569, -719}}, -/* CG.CA..CG */ -{{ -50, -519, -449, -519, -669}, -{-1079,-1548,-1478,-1548,-1698}, -{ -569,-1038, -968,-1038,-1188}, -{ -989,-1458,-1388,-1458,-1608}, -{ -859,-1328,-1258,-1328,-1478}}, -/* CG.CC..CG */ -{{ -50, -519, -449, -519, -669}, -{ -999,-1468,-1398,-1468,-1618}, -{ -499, -968, -898, -968,-1118}, -{ -989,-1458,-1388,-1458,-1608}, -{ -789,-1258,-1188,-1258,-1408}}, -/* CG.CG..CG */ -{{ -50, -519, -449, -519, -669}, -{-1079,-1548,-1478,-1548,-1698}, -{ -569,-1038, -968,-1038,-1188}, -{ -989,-1458,-1388,-1458,-1608}, -{ -859,-1328,-1258,-1328,-1478}}, -/* CG.CU..CG */ -{{ -50, -519, -449, -519, -669}, -{-1079,-1548,-1478,-1548,-1698}, -{ -719,-1188,-1118,-1188,-1338}, -{ -989,-1458,-1388,-1458,-1608}, -{ -909,-1378,-1308,-1378,-1528}}}, -/* CG.G@..CG */ -{{{ -50, -939, -939, -939, -939}, -{ -100, -989, -989, -989, -989}, -{ -100, -989, -989, -989, -989}, -{ -100, -989, -989, -989, -989}, -{ -100, -989, -989, -989, -989}}, -/* CG.GA..CG */ -{{ -50, -939, -939, -939, -939}, -{-1079,-1968,-1968,-1968,-1968}, -{ -569,-1458,-1458,-1458,-1458}, -{ -989,-1878,-1878,-1878,-1878}, -{ -859,-1748,-1748,-1748,-1748}}, -/* CG.GC..CG */ -{{ -50, -939, -939, -939, -939}, -{ -999,-1888,-1888,-1888,-1888}, -{ -499,-1388,-1388,-1388,-1388}, -{ -989,-1878,-1878,-1878,-1878}, -{ -789,-1678,-1678,-1678,-1678}}, -/* CG.GG..CG */ -{{ -50, -939, -939, -939, -939}, -{-1079,-1968,-1968,-1968,-1968}, -{ -569,-1458,-1458,-1458,-1458}, -{ -989,-1878,-1878,-1878,-1878}, -{ -859,-1748,-1748,-1748,-1748}}, -/* CG.GU..CG */ -{{ -50, -939, -939, -939, -939}, -{-1079,-1968,-1968,-1968,-1968}, -{ -719,-1608,-1608,-1608,-1608}, -{ -989,-1878,-1878,-1878,-1878}, -{ -909,-1798,-1798,-1798,-1798}}}, -/* CG.U@..CG */ -{{{ -50, -809, -739, -809, -859}, -{ -100, -859, -789, -859, -909}, -{ -100, -859, -789, -859, -909}, -{ -100, -859, -789, -859, -909}, -{ -100, -859, -789, -859, -909}}, -/* CG.UA..CG */ -{{ -50, -809, -739, -809, -859}, -{-1079,-1838,-1768,-1838,-1888}, -{ -569,-1328,-1258,-1328,-1378}, -{ -989,-1748,-1678,-1748,-1798}, -{ -859,-1618,-1548,-1618,-1668}}, -/* CG.UC..CG */ -{{ -50, -809, -739, -809, -859}, -{ -999,-1758,-1688,-1758,-1808}, -{ -499,-1258,-1188,-1258,-1308}, -{ -989,-1748,-1678,-1748,-1798}, -{ -789,-1548,-1478,-1548,-1598}}, -/* CG.UG..CG */ -{{ -50, -809, -739, -809, -859}, -{-1079,-1838,-1768,-1838,-1888}, -{ -569,-1328,-1258,-1328,-1378}, -{ -989,-1748,-1678,-1748,-1798}, -{ -859,-1618,-1548,-1618,-1668}}, -/* CG.UU..CG */ -{{ -50, -809, -739, -809, -859}, -{-1079,-1838,-1768,-1838,-1888}, -{ -719,-1478,-1408,-1478,-1528}, -{ -989,-1748,-1678,-1748,-1798}, -{ -909,-1668,-1598,-1668,-1718}}}}, -/* CG.@@..GC */ -{{{{ 0, 0, 0, 0, 0}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* CG.@A..GC */ -{{ 0, 0, 0, 0, 0}, -{ -519, -519, -519, -519, -519}, -{ -719, -719, -719, -719, -719}, -{ -709, -709, -709, -709, -709}, -{ -499, -499, -499, -499, -499}}, -/* CG.@C..GC */ -{{ 0, 0, 0, 0, 0}, -{ -879, -879, -879, -879, -879}, -{ -309, -309, -309, -309, -309}, -{ -739, -739, -739, -739, -739}, -{ -499, -499, -499, -499, -499}}, -/* CG.@G..GC */ -{{ 0, 0, 0, 0, 0}, -{ -559, -559, -559, -559, -559}, -{ -309, -309, -309, -309, -309}, -{ -619, -619, -619, -619, -619}, -{ -499, -499, -499, -499, -499}}, -/* CG.@U..GC */ -{{ 0, 0, 0, 0, 0}, -{ -879, -879, -879, -879, -879}, -{ -389, -389, -389, -389, -389}, -{ -739, -739, -739, -739, -739}, -{ -569, -569, -569, -569, -569}}}, -/* CG.A@..GC */ -{{{ -50,-1029, -949,-1029,-1029}, -{ -100,-1079, -999,-1079,-1079}, -{ -100,-1079, -999,-1079,-1079}, -{ -100,-1079, -999,-1079,-1079}, -{ -100,-1079, -999,-1079,-1079}}, -/* CG.AA..GC */ -{{ -50,-1029, -949,-1029,-1029}, -{ -569,-1548,-1468,-1548,-1548}, -{ -769,-1748,-1668,-1748,-1748}, -{ -759,-1738,-1658,-1738,-1738}, -{ -549,-1528,-1448,-1528,-1528}}, -/* CG.AC..GC */ -{{ -50,-1029, -949,-1029,-1029}, -{ -929,-1908,-1828,-1908,-1908}, -{ -359,-1338,-1258,-1338,-1338}, -{ -789,-1768,-1688,-1768,-1768}, -{ -549,-1528,-1448,-1528,-1528}}, -/* CG.AG..GC */ -{{ -50,-1029, -949,-1029,-1029}, -{ -609,-1588,-1508,-1588,-1588}, -{ -359,-1338,-1258,-1338,-1338}, -{ -669,-1648,-1568,-1648,-1648}, -{ -549,-1528,-1448,-1528,-1528}}, -/* CG.AU..GC */ -{{ -50,-1029, -949,-1029,-1029}, -{ -929,-1908,-1828,-1908,-1908}, -{ -439,-1418,-1338,-1418,-1418}, -{ -789,-1768,-1688,-1768,-1768}, -{ -619,-1598,-1518,-1598,-1598}}}, -/* CG.C@..GC */ -{{{ -50, -519, -449, -519, -669}, -{ -100, -569, -499, -569, -719}, -{ -100, -569, -499, -569, -719}, -{ -100, -569, -499, -569, -719}, -{ -100, -569, -499, -569, -719}}, -/* CG.CA..GC */ -{{ -50, -519, -449, -519, -669}, -{ -569,-1038, -968,-1038,-1188}, -{ -769,-1238,-1168,-1238,-1388}, -{ -759,-1228,-1158,-1228,-1378}, -{ -549,-1018, -948,-1018,-1168}}, -/* CG.CC..GC */ -{{ -50, -519, -449, -519, -669}, -{ -929,-1398,-1328,-1398,-1548}, -{ -359, -828, -758, -828, -978}, -{ -789,-1258,-1188,-1258,-1408}, -{ -549,-1018, -948,-1018,-1168}}, -/* CG.CG..GC */ -{{ -50, -519, -449, -519, -669}, -{ -609,-1078,-1008,-1078,-1228}, -{ -359, -828, -758, -828, -978}, -{ -669,-1138,-1068,-1138,-1288}, -{ -549,-1018, -948,-1018,-1168}}, -/* CG.CU..GC */ -{{ -50, -519, -449, -519, -669}, -{ -929,-1398,-1328,-1398,-1548}, -{ -439, -908, -838, -908,-1058}, -{ -789,-1258,-1188,-1258,-1408}, -{ -619,-1088,-1018,-1088,-1238}}}, -/* CG.G@..GC */ -{{{ -50, -939, -939, -939, -939}, -{ -100, -989, -989, -989, -989}, -{ -100, -989, -989, -989, -989}, -{ -100, -989, -989, -989, -989}, -{ -100, -989, -989, -989, -989}}, -/* CG.GA..GC */ -{{ -50, -939, -939, -939, -939}, -{ -569,-1458,-1458,-1458,-1458}, -{ -769,-1658,-1658,-1658,-1658}, -{ -759,-1648,-1648,-1648,-1648}, -{ -549,-1438,-1438,-1438,-1438}}, -/* CG.GC..GC */ -{{ -50, -939, -939, -939, -939}, -{ -929,-1818,-1818,-1818,-1818}, -{ -359,-1248,-1248,-1248,-1248}, -{ -789,-1678,-1678,-1678,-1678}, -{ -549,-1438,-1438,-1438,-1438}}, -/* CG.GG..GC */ -{{ -50, -939, -939, -939, -939}, -{ -609,-1498,-1498,-1498,-1498}, -{ -359,-1248,-1248,-1248,-1248}, -{ -669,-1558,-1558,-1558,-1558}, -{ -549,-1438,-1438,-1438,-1438}}, -/* CG.GU..GC */ -{{ -50, -939, -939, -939, -939}, -{ -929,-1818,-1818,-1818,-1818}, -{ -439,-1328,-1328,-1328,-1328}, -{ -789,-1678,-1678,-1678,-3080}, -{ -619,-1508,-1508,-1508,-1508}}}, -/* CG.U@..GC */ -{{{ -50, -809, -739, -809, -859}, -{ -100, -859, -789, -859, -909}, -{ -100, -859, -789, -859, -909}, -{ -100, -859, -789, -859, -909}, -{ -100, -859, -789, -859, -909}}, -/* CG.UA..GC */ -{{ -50, -809, -739, -809, -859}, -{ -569,-1328,-1258,-1328,-1378}, -{ -769,-1528,-1458,-1528,-1578}, -{ -759,-1518,-1448,-1518,-1568}, -{ -549,-1308,-1238,-1308,-1358}}, -/* CG.UC..GC */ -{{ -50, -809, -739, -809, -859}, -{ -929,-1688,-1618,-1688,-1738}, -{ -359,-1118,-1048,-1118,-1168}, -{ -789,-1548,-1478,-1548,-1598}, -{ -549,-1308,-1238,-1308,-1358}}, -/* CG.UG..GC */ -{{ -50, -809, -739, -809, -859}, -{ -609,-1368,-1298,-1368,-1418}, -{ -359,-1118,-1048,-1118,-1168}, -{ -669,-1428,-1358,-1428,-1478}, -{ -549,-1308,-1238,-1308,-1358}}, -/* CG.UU..GC */ -{{ -50, -809, -739, -809, -859}, -{ -929,-1688,-1618,-1688,-1738}, -{ -439,-1198,-1128,-1198,-1248}, -{ -789,-1548,-1478,-1548,-1598}, -{ -619,-1378,-1308,-1378,-1428}}}}, -/* CG.@@..GU */ -{{{{ 0, 0, 0, 0, 0}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* CG.@A..GU */ -{{ 0, 0, 0, 0, 0}, -{ -429, -429, -429, -429, -429}, -{ -259, -259, -259, -259, -259}, -{ -339, -339, -339, -339, -339}, -{ -329, -329, -329, -329, -329}}, -/* CG.@C..GU */ -{{ 0, 0, 0, 0, 0}, -{ -599, -599, -599, -599, -599}, -{ -239, -239, -239, -239, -239}, -{ -689, -689, -689, -689, -689}, -{ -329, -329, -329, -329, -329}}, -/* CG.@G..GU */ -{{ 0, 0, 0, 0, 0}, -{ -599, -599, -599, -599, -599}, -{ -239, -239, -239, -239, -239}, -{ -689, -689, -689, -689, -689}, -{ -329, -329, -329, -329, -329}}, -/* CG.@U..GU */ -{{ 0, 0, 0, 0, 0}, -{ -599, -599, -599, -599, -599}, -{ -239, -239, -239, -239, -239}, -{ -689, -689, -689, -689, -689}, -{ -329, -329, -329, -329, -329}}}, -/* CG.A@..GU */ -{{{ -50,-1029, -949,-1029,-1029}, -{ -100,-1079, -999,-1079,-1079}, -{ -100,-1079, -999,-1079,-1079}, -{ -100,-1079, -999,-1079,-1079}, -{ -100,-1079, -999,-1079,-1079}}, -/* CG.AA..GU */ -{{ -50,-1029, -949,-1029,-1029}, -{ -479,-1458,-1378,-1458,-1458}, -{ -309,-1288,-1208,-1288,-1288}, -{ -389,-1368,-1288,-1368,-1368}, -{ -379,-1358,-1278,-1358,-1358}}, -/* CG.AC..GU */ -{{ -50,-1029, -949,-1029,-1029}, -{ -649,-1628,-1548,-1628,-1628}, -{ -289,-1268,-1188,-1268,-1268}, -{ -739,-1718,-1638,-1718,-1718}, -{ -379,-1358,-1278,-1358,-1358}}, -/* CG.AG..GU */ -{{ -50,-1029, -949,-1029,-1029}, -{ -649,-1628,-1548,-1628,-1628}, -{ -289,-1268,-1188,-1268,-1268}, -{ -739,-1718,-1638,-1718,-1718}, -{ -379,-1358,-1278,-1358,-1358}}, -/* CG.AU..GU */ -{{ -50,-1029, -949,-1029,-1029}, -{ -649,-1628,-1548,-1628,-1628}, -{ -289,-1268,-1188,-1268,-1268}, -{ -739,-1718,-1638,-1718,-1718}, -{ -379,-1358,-1278,-1358,-1358}}}, -/* CG.C@..GU */ -{{{ -50, -519, -449, -519, -669}, -{ -100, -569, -499, -569, -719}, -{ -100, -569, -499, -569, -719}, -{ -100, -569, -499, -569, -719}, -{ -100, -569, -499, -569, -719}}, -/* CG.CA..GU */ -{{ -50, -519, -449, -519, -669}, -{ -479, -948, -878, -948,-1098}, -{ -309, -778, -708, -778, -928}, -{ -389, -858, -788, -858,-1008}, -{ -379, -848, -778, -848, -998}}, -/* CG.CC..GU */ -{{ -50, -519, -449, -519, -669}, -{ -649,-1118,-1048,-1118,-1268}, -{ -289, -758, -688, -758, -908}, -{ -739,-1208,-1138,-1208,-1358}, -{ -379, -848, -778, -848, -998}}, -/* CG.CG..GU */ -{{ -50, -519, -449, -519, -669}, -{ -649,-1118,-1048,-1118,-1268}, -{ -289, -758, -688, -758, -908}, -{ -739,-1208,-1138,-1208,-1358}, -{ -379, -848, -778, -848, -998}}, -/* CG.CU..GU */ -{{ -50, -519, -449, -519, -669}, -{ -649,-1118,-1048,-1118,-1268}, -{ -289, -758, -688, -758, -908}, -{ -739,-1208,-1138,-1208,-1358}, -{ -379, -848, -778, -848, -998}}}, -/* CG.G@..GU */ -{{{ -50, -939, -939, -939, -939}, -{ -100, -989, -989, -989, -989}, -{ -100, -989, -989, -989, -989}, -{ -100, -989, -989, -989, -989}, -{ -100, -989, -989, -989, -989}}, -/* CG.GA..GU */ -{{ -50, -939, -939, -939, -939}, -{ -479,-1368,-1368,-1368,-1368}, -{ -309,-1198,-1198,-1198,-1198}, -{ -389,-1278,-1278,-1278,-1278}, -{ -379,-1268,-1268,-1268,-1268}}, -/* CG.GC..GU */ -{{ -50, -939, -939, -939, -939}, -{ -649,-1538,-1538,-1538,-1538}, -{ -289,-1178,-1178,-1178,-1178}, -{ -739,-1628,-1628,-1628,-1628}, -{ -379,-1268,-1268,-1268,-1268}}, -/* CG.GG..GU */ -{{ -50, -939, -939, -939, -939}, -{ -649,-1538,-1538,-1538,-1538}, -{ -289,-1178,-1178,-1178,-1178}, -{ -739,-1628,-1628,-1628,-1628}, -{ -379,-1268,-1268,-1268,-1268}}, -/* CG.GU..GU */ -{{ -50, -939, -939, -939, -939}, -{ -649,-1538,-1538,-1538,-1538}, -{ -289,-1178,-1178,-1178,-1178}, -{ -739,-1628,-1628,-1628,-1628}, -{ -379,-1268,-1268,-1268,-1268}}}, -/* CG.U@..GU */ -{{{ -50, -809, -739, -809, -859}, -{ -100, -859, -789, -859, -909}, -{ -100, -859, -789, -859, -909}, -{ -100, -859, -789, -859, -909}, -{ -100, -859, -789, -859, -909}}, -/* CG.UA..GU */ -{{ -50, -809, -739, -809, -859}, -{ -479,-1238,-1168,-1238,-1288}, -{ -309,-1068, -998,-1068,-1118}, -{ -389,-1148,-1078,-1148,-1198}, -{ -379,-1138,-1068,-1138,-1188}}, -/* CG.UC..GU */ -{{ -50, -809, -739, -809, -859}, -{ -649,-1408,-1338,-1408,-1458}, -{ -289,-1048, -978,-1048,-1098}, -{ -739,-1498,-1428,-1498,-1548}, -{ -379,-1138,-1068,-1138,-1188}}, -/* CG.UG..GU */ -{{ -50, -809, -739, -809, -859}, -{ -649,-1408,-1338,-1408,-1458}, -{ -289,-1048, -978,-1048,-1098}, -{ -739,-1498,-1428,-1498,-1548}, -{ -379,-1138,-1068,-1138,-1188}}, -/* CG.UU..GU */ -{{ -50, -809, -739, -809, -859}, -{ -649,-1408,-1338,-1408,-1458}, -{ -289,-1048, -978,-1048,-1098}, -{ -739,-1498,-1428,-1498,-1548}, -{ -379,-1138,-1068,-1138,-1188}}}}, -/* CG.@@..UG */ -{{{{ 0, 0, 0, 0, 0}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* CG.@A..UG */ -{{ 0, 0, 0, 0, 0}, -{ -719, -719, -719, -719, -719}, -{ -479, -479, -479, -479, -479}, -{ -659, -659, -659, -659, -659}, -{ -549, -549, -549, -549, -549}}, -/* CG.@C..UG */ -{{ 0, 0, 0, 0, 0}, -{ -789, -789, -789, -789, -789}, -{ -479, -479, -479, -479, -479}, -{ -809, -809, -809, -809, -809}, -{ -439, -439, -439, -439, -439}}, -/* CG.@G..UG */ -{{ 0, 0, 0, 0, 0}, -{ -959, -959, -959, -959, -959}, -{ -359, -359, -359, -359, -359}, -{ -919, -919, -919, -919, -919}, -{ -549, -549, -549, -549, -549}}, -/* CG.@U..UG */ -{{ 0, 0, 0, 0, 0}, -{ -809, -809, -809, -809, -809}, -{ -479, -479, -479, -479, -479}, -{ -809, -809, -809, -809, -809}, -{ -359, -359, -359, -359, -359}}}, -/* CG.A@..UG */ -{{{ -50,-1029, -949,-1029,-1029}, -{ -100,-1079, -999,-1079,-1079}, -{ -100,-1079, -999,-1079,-1079}, -{ -100,-1079, -999,-1079,-1079}, -{ -100,-1079, -999,-1079,-1079}}, -/* CG.AA..UG */ -{{ -50,-1029, -949,-1029,-1029}, -{ -769,-1748,-1668,-1748,-1748}, -{ -529,-1508,-1428,-1508,-1508}, -{ -709,-1688,-1608,-1688,-1688}, -{ -599,-1578,-1498,-1578,-1578}}, -/* CG.AC..UG */ -{{ -50,-1029, -949,-1029,-1029}, -{ -839,-1818,-1738,-1818,-1818}, -{ -529,-1508,-1428,-1508,-1508}, -{ -859,-1838,-1758,-1838,-1838}, -{ -489,-1468,-1388,-1468,-1468}}, -/* CG.AG..UG */ -{{ -50,-1029, -949,-1029,-1029}, -{-1009,-1988,-1908,-1988,-1988}, -{ -409,-1388,-1308,-1388,-1388}, -{ -969,-1948,-1868,-1948,-1948}, -{ -599,-1578,-1498,-1578,-1578}}, -/* CG.AU..UG */ -{{ -50,-1029, -949,-1029,-1029}, -{ -859,-1838,-1758,-1838,-1838}, -{ -529,-1508,-1428,-1508,-1508}, -{ -859,-1838,-1758,-1838,-1838}, -{ -409,-1388,-1308,-1388,-1388}}}, -/* CG.C@..UG */ -{{{ -50, -519, -449, -519, -669}, -{ -100, -569, -499, -569, -719}, -{ -100, -569, -499, -569, -719}, -{ -100, -569, -499, -569, -719}, -{ -100, -569, -499, -569, -719}}, -/* CG.CA..UG */ -{{ -50, -519, -449, -519, -669}, -{ -769,-1238,-1168,-1238,-1388}, -{ -529, -998, -928, -998,-1148}, -{ -709,-1178,-1108,-1178,-1328}, -{ -599,-1068, -998,-1068,-1218}}, -/* CG.CC..UG */ -{{ -50, -519, -449, -519, -669}, -{ -839,-1308,-1238,-1308,-1458}, -{ -529, -998, -928, -998,-1148}, -{ -859,-1328,-1258,-1328,-1478}, -{ -489, -958, -888, -958,-1108}}, -/* CG.CG..UG */ -{{ -50, -519, -449, -519, -669}, -{-1009,-1478,-1408,-1478,-1628}, -{ -409, -878, -808, -878,-1028}, -{ -969,-1438,-1368,-1438,-1588}, -{ -599,-1068, -998,-1068,-1218}}, -/* CG.CU..UG */ -{{ -50, -519, -449, -519, -669}, -{ -859,-1328,-1258,-1328,-1478}, -{ -529, -998, -928, -998,-1148}, -{ -859,-1328,-1258,-1328,-1478}, -{ -409, -878, -808, -878,-1028}}}, -/* CG.G@..UG */ -{{{ -50, -939, -939, -939, -939}, -{ -100, -989, -989, -989, -989}, -{ -100, -989, -989, -989, -989}, -{ -100, -989, -989, -989, -989}, -{ -100, -989, -989, -989, -989}}, -/* CG.GA..UG */ -{{ -50, -939, -939, -939, -939}, -{ -769,-1658,-1658,-1658,-1658}, -{ -529,-1418,-1418,-1418,-1418}, -{ -709,-1598,-1598,-1598,-1598}, -{ -599,-1488,-1488,-1488,-1488}}, -/* CG.GC..UG */ -{{ -50, -939, -939, -939, -939}, -{ -839,-1728,-1728,-1728,-1728}, -{ -529,-1418,-1418,-1418,-1418}, -{ -859,-1748,-1748,-1748,-1748}, -{ -489,-1378,-1378,-1378,-1378}}, -/* CG.GG..UG */ -{{ -50, -939, -939, -939, -939}, -{-1009,-1898,-1898,-1898,-1898}, -{ -409,-1298,-1298,-1298,-1298}, -{ -969,-1858,-1858,-1858,-1858}, -{ -599,-1488,-1488,-1488,-1488}}, -/* CG.GU..UG */ -{{ -50, -939, -939, -939, -939}, -{ -859,-1748,-1748,-1748,-1748}, -{ -529,-1418,-1418,-1418,-1418}, -{ -859,-1748,-1748,-1748,-1748}, -{ -409,-1298,-1298,-1298,-1298}}}, -/* CG.U@..UG */ -{{{ -50, -809, -739, -809, -859}, -{ -100, -859, -789, -859, -909}, -{ -100, -859, -789, -859, -909}, -{ -100, -859, -789, -859, -909}, -{ -100, -859, -789, -859, -909}}, -/* CG.UA..UG */ -{{ -50, -809, -739, -809, -859}, -{ -769,-1528,-1458,-1528,-1578}, -{ -529,-1288,-1218,-1288,-1338}, -{ -709,-1468,-1398,-1468,-1518}, -{ -599,-1358,-1288,-1358,-1408}}, -/* CG.UC..UG */ -{{ -50, -809, -739, -809, -859}, -{ -839,-1598,-1528,-1598,-1648}, -{ -529,-1288,-1218,-1288,-1338}, -{ -859,-1618,-1548,-1618,-1668}, -{ -489,-1248,-1178,-1248,-1298}}, -/* CG.UG..UG */ -{{ -50, -809, -739, -809, -859}, -{-1009,-1768,-1698,-1768,-1818}, -{ -409,-1168,-1098,-1168,-1218}, -{ -969,-1728,-1658,-1728,-1778}, -{ -599,-1358,-1288,-1358,-1408}}, -/* CG.UU..UG */ -{{ -50, -809, -739, -809, -859}, -{ -859,-1618,-1548,-1618,-1668}, -{ -529,-1288,-1218,-1288,-1338}, -{ -859,-1618,-1548,-1618,-1668}, -{ -409,-1168,-1098,-1168,-1218}}}}, -/* CG.@@..AU */ -{{{{ 0, 0, 0, 0, 0}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* CG.@A..AU */ -{{ 0, 0, 0, 0, 0}, -{ -429, -429, -429, -429, -429}, -{ -259, -259, -259, -259, -259}, -{ -339, -339, -339, -339, -339}, -{ -329, -329, -329, -329, -329}}, -/* CG.@C..AU */ -{{ 0, 0, 0, 0, 0}, -{ -599, -599, -599, -599, -599}, -{ -239, -239, -239, -239, -239}, -{ -689, -689, -689, -689, -689}, -{ -329, -329, -329, -329, -329}}, -/* CG.@G..AU */ -{{ 0, 0, 0, 0, 0}, -{ -599, -599, -599, -599, -599}, -{ -239, -239, -239, -239, -239}, -{ -689, -689, -689, -689, -689}, -{ -329, -329, -329, -329, -329}}, -/* CG.@U..AU */ -{{ 0, 0, 0, 0, 0}, -{ -599, -599, -599, -599, -599}, -{ -239, -239, -239, -239, -239}, -{ -689, -689, -689, -689, -689}, -{ -329, -329, -329, -329, -329}}}, -/* CG.A@..AU */ -{{{ -50,-1029, -949,-1029,-1029}, -{ -100,-1079, -999,-1079,-1079}, -{ -100,-1079, -999,-1079,-1079}, -{ -100,-1079, -999,-1079,-1079}, -{ -100,-1079, -999,-1079,-1079}}, -/* CG.AA..AU */ -{{ -50,-1029, -949,-1029,-1029}, -{ -479,-1458,-1378,-1458,-1458}, -{ -309,-1288,-1208,-1288,-1288}, -{ -389,-1368,-1288,-1368,-1368}, -{ -379,-1358,-1278,-1358,-1358}}, -/* CG.AC..AU */ -{{ -50,-1029, -949,-1029,-1029}, -{ -649,-1628,-1548,-1628,-1628}, -{ -289,-1268,-1188,-1268,-1268}, -{ -739,-1718,-1638,-1718,-1718}, -{ -379,-1358,-1278,-1358,-1358}}, -/* CG.AG..AU */ -{{ -50,-1029, -949,-1029,-1029}, -{ -649,-1628,-1548,-1628,-1628}, -{ -289,-1268,-1188,-1268,-1268}, -{ -739,-1718,-1638,-1718,-1718}, -{ -379,-1358,-1278,-1358,-1358}}, -/* CG.AU..AU */ -{{ -50,-1029, -949,-1029,-1029}, -{ -649,-1628,-1548,-1628,-1628}, -{ -289,-1268,-1188,-1268,-1268}, -{ -739,-1718,-1638,-1718,-1718}, -{ -379,-1358,-1278,-1358,-1358}}}, -/* CG.C@..AU */ -{{{ -50, -519, -449, -519, -669}, -{ -100, -569, -499, -569, -719}, -{ -100, -569, -499, -569, -719}, -{ -100, -569, -499, -569, -719}, -{ -100, -569, -499, -569, -719}}, -/* CG.CA..AU */ -{{ -50, -519, -449, -519, -669}, -{ -479, -948, -878, -948,-1098}, -{ -309, -778, -708, -778, -928}, -{ -389, -858, -788, -858,-1008}, -{ -379, -848, -778, -848, -998}}, -/* CG.CC..AU */ -{{ -50, -519, -449, -519, -669}, -{ -649,-1118,-1048,-1118,-1268}, -{ -289, -758, -688, -758, -908}, -{ -739,-1208,-1138,-1208,-1358}, -{ -379, -848, -778, -848, -998}}, -/* CG.CG..AU */ -{{ -50, -519, -449, -519, -669}, -{ -649,-1118,-1048,-1118,-1268}, -{ -289, -758, -688, -758, -908}, -{ -739,-1208,-1138,-1208,-1358}, -{ -379, -848, -778, -848, -998}}, -/* CG.CU..AU */ -{{ -50, -519, -449, -519, -669}, -{ -649,-1118,-1048,-1118,-1268}, -{ -289, -758, -688, -758, -908}, -{ -739,-1208,-1138,-1208,-1358}, -{ -379, -848, -778, -848, -998}}}, -/* CG.G@..AU */ -{{{ -50, -939, -939, -939, -939}, -{ -100, -989, -989, -989, -989}, -{ -100, -989, -989, -989, -989}, -{ -100, -989, -989, -989, -989}, -{ -100, -989, -989, -989, -989}}, -/* CG.GA..AU */ -{{ -50, -939, -939, -939, -939}, -{ -479,-1368,-1368,-1368,-1368}, -{ -309,-1198,-1198,-1198,-1198}, -{ -389,-1278,-1278,-1278,-1278}, -{ -379,-1268,-1268,-1268,-1268}}, -/* CG.GC..AU */ -{{ -50, -939, -939, -939, -939}, -{ -649,-1538,-1538,-1538,-1538}, -{ -289,-1178,-1178,-1178,-1178}, -{ -739,-1628,-1628,-1628,-1628}, -{ -379,-1268,-1268,-1268,-1268}}, -/* CG.GG..AU */ -{{ -50, -939, -939, -939, -939}, -{ -649,-1538,-1538,-1538,-1538}, -{ -289,-1178,-1178,-1178,-1178}, -{ -739,-1628,-1628,-1628,-1628}, -{ -379,-1268,-1268,-1268,-1268}}, -/* CG.GU..AU */ -{{ -50, -939, -939, -939, -939}, -{ -649,-1538,-1538,-1538,-1538}, -{ -289,-1178,-1178,-1178,-1178}, -{ -739,-1628,-1628,-1628,-1628}, -{ -379,-1268,-1268,-1268,-1268}}}, -/* CG.U@..AU */ -{{{ -50, -809, -739, -809, -859}, -{ -100, -859, -789, -859, -909}, -{ -100, -859, -789, -859, -909}, -{ -100, -859, -789, -859, -909}, -{ -100, -859, -789, -859, -909}}, -/* CG.UA..AU */ -{{ -50, -809, -739, -809, -859}, -{ -479,-1238,-1168,-1238,-1288}, -{ -309,-1068, -998,-1068,-1118}, -{ -389,-1148,-1078,-1148,-1198}, -{ -379,-1138,-1068,-1138,-1188}}, -/* CG.UC..AU */ -{{ -50, -809, -739, -809, -859}, -{ -649,-1408,-1338,-1408,-1458}, -{ -289,-1048, -978,-1048,-1098}, -{ -739,-1498,-1428,-1498,-1548}, -{ -379,-1138,-1068,-1138,-1188}}, -/* CG.UG..AU */ -{{ -50, -809, -739, -809, -859}, -{ -649,-1408,-1338,-1408,-1458}, -{ -289,-1048, -978,-1048,-1098}, -{ -739,-1498,-1428,-1498,-1548}, -{ -379,-1138,-1068,-1138,-1188}}, -/* CG.UU..AU */ -{{ -50, -809, -739, -809, -859}, -{ -649,-1408,-1338,-1408,-1458}, -{ -289,-1048, -978,-1048,-1098}, -{ -739,-1498,-1428,-1498,-1548}, -{ -379,-1138,-1068,-1138,-1188}}}}, -/* CG.@@..UA */ -{{{{ 0, 0, 0, 0, 0}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* CG.@A..UA */ -{{ 0, 0, 0, 0, 0}, -{ -399, -399, -399, -399, -399}, -{ -429, -429, -429, -429, -429}, -{ -379, -379, -379, -379, -379}, -{ -279, -279, -279, -279, -279}}, -/* CG.@C..UA */ -{{ 0, 0, 0, 0, 0}, -{ -629, -629, -629, -629, -629}, -{ -509, -509, -509, -509, -509}, -{ -679, -679, -679, -679, -679}, -{ -139, -139, -139, -139, -139}}, -/* CG.@G..UA */ -{{ 0, 0, 0, 0, 0}, -{ -889, -889, -889, -889, -889}, -{ -199, -199, -199, -199, -199}, -{ -889, -889, -889, -889, -889}, -{ -279, -279, -279, -279, -279}}, -/* CG.@U..UA */ -{{ 0, 0, 0, 0, 0}, -{ -589, -589, -589, -589, -589}, -{ -179, -179, -179, -179, -179}, -{ -679, -679, -679, -679, -679}, -{ -140, -140, -140, -140, -140}}}, -/* CG.A@..UA */ -{{{ -50,-1029, -949,-1029,-1029}, -{ -100,-1079, -999,-1079,-1079}, -{ -100,-1079, -999,-1079,-1079}, -{ -100,-1079, -999,-1079,-1079}, -{ -100,-1079, -999,-1079,-1079}}, -/* CG.AA..UA */ -{{ -50,-1029, -949,-1029,-1029}, -{ -449,-1428,-1348,-1428,-1428}, -{ -479,-1458,-1378,-1458,-1458}, -{ -429,-1408,-1328,-1408,-1408}, -{ -329,-1308,-1228,-1308,-1308}}, -/* CG.AC..UA */ -{{ -50,-1029, -949,-1029,-1029}, -{ -679,-1658,-1578,-1658,-1658}, -{ -559,-1538,-1458,-1538,-1538}, -{ -729,-1708,-1628,-1708,-1708}, -{ -189,-1168,-1088,-1168,-1168}}, -/* CG.AG..UA */ -{{ -50,-1029, -949,-1029,-1029}, -{ -939,-1918,-1838,-1918,-1918}, -{ -249,-1228,-1148,-1228,-1228}, -{ -939,-1918,-1838,-1918,-1918}, -{ -329,-1308,-1228,-1308,-1308}}, -/* CG.AU..UA */ -{{ -50,-1029, -949,-1029,-1029}, -{ -639,-1618,-1538,-1618,-1618}, -{ -229,-1208,-1128,-1208,-1208}, -{ -729,-1708,-1628,-1708,-1708}, -{ -190,-1169,-1089,-1169,-1169}}}, -/* CG.C@..UA */ -{{{ -50, -519, -449, -519, -669}, -{ -100, -569, -499, -569, -719}, -{ -100, -569, -499, -569, -719}, -{ -100, -569, -499, -569, -719}, -{ -100, -569, -499, -569, -719}}, -/* CG.CA..UA */ -{{ -50, -519, -449, -519, -669}, -{ -449, -918, -848, -918,-1068}, -{ -479, -948, -878, -948,-1098}, -{ -429, -898, -828, -898,-1048}, -{ -329, -798, -728, -798, -948}}, -/* CG.CC..UA */ -{{ -50, -519, -449, -519, -669}, -{ -679,-1148,-1078,-1148,-1298}, -{ -559,-1028, -958,-1028,-1178}, -{ -729,-1198,-1128,-1198,-1348}, -{ -189, -658, -588, -658, -808}}, -/* CG.CG..UA */ -{{ -50, -519, -449, -519, -669}, -{ -939,-1408,-1338,-1408,-1558}, -{ -249, -718, -648, -718, -868}, -{ -939,-1408,-1338,-1408,-1558}, -{ -329, -798, -728, -798, -948}}, -/* CG.CU..UA */ -{{ -50, -519, -449, -519, -669}, -{ -639,-1108,-1038,-1108,-1258}, -{ -229, -698, -628, -698, -848}, -{ -729,-1198,-1128,-1198,-1348}, -{ -190, -659, -589, -659, -809}}}, -/* CG.G@..UA */ -{{{ -50, -939, -939, -939, -939}, -{ -100, -989, -989, -989, -989}, -{ -100, -989, -989, -989, -989}, -{ -100, -989, -989, -989, -989}, -{ -100, -989, -989, -989, -989}}, -/* CG.GA..UA */ -{{ -50, -939, -939, -939, -939}, -{ -449,-1338,-1338,-1338,-1338}, -{ -479,-1368,-1368,-1368,-1368}, -{ -429,-1318,-1318,-1318,-1318}, -{ -329,-1218,-1218,-1218,-1218}}, -/* CG.GC..UA */ -{{ -50, -939, -939, -939, -939}, -{ -679,-1568,-1568,-1568,-1568}, -{ -559,-1448,-1448,-1448,-1448}, -{ -729,-1618,-1618,-1618,-1618}, -{ -189,-1078,-1078,-1078,-1078}}, -/* CG.GG..UA */ -{{ -50, -939, -939, -939, -939}, -{ -939,-1828,-1828,-1828,-1828}, -{ -249,-1138,-1138,-1138,-1138}, -{ -939,-1828,-1828,-1828,-1828}, -{ -329,-1218,-1218,-1218,-1218}}, -/* CG.GU..UA */ -{{ -50, -939, -939, -939, -939}, -{ -639,-1528,-1528,-1528,-1528}, -{ -229,-1118,-1118,-1118,-1118}, -{ -729,-1618,-1618,-1618,-1618}, -{ -190,-1079,-1079,-1079,-1079}}}, -/* CG.U@..UA */ -{{{ -50, -809, -739, -809, -859}, -{ -100, -859, -789, -859, -909}, -{ -100, -859, -789, -859, -909}, -{ -100, -859, -789, -859, -909}, -{ -100, -859, -789, -859, -909}}, -/* CG.UA..UA */ -{{ -50, -809, -739, -809, -859}, -{ -449,-1208,-1138,-1208,-1258}, -{ -479,-1238,-1168,-1238,-1288}, -{ -429,-1188,-1118,-1188,-1238}, -{ -329,-1088,-1018,-1088,-1138}}, -/* CG.UC..UA */ -{{ -50, -809, -739, -809, -859}, -{ -679,-1438,-1368,-1438,-1488}, -{ -559,-1318,-1248,-1318,-1368}, -{ -729,-1488,-1418,-1488,-1538}, -{ -189, -948, -878, -948, -998}}, -/* CG.UG..UA */ -{{ -50, -809, -739, -809, -859}, -{ -939,-1698,-1628,-1698,-1748}, -{ -249,-1008, -938,-1008,-1058}, -{ -939,-1698,-1628,-1698,-1748}, -{ -329,-1088,-1018,-1088,-1138}}, -/* CG.UU..UA */ -{{ -50, -809, -739, -809, -859}, -{ -639,-1398,-1328,-1398,-1448}, -{ -229, -988, -918, -988,-1038}, -{ -729,-1488,-1418,-1488,-1538}, -{ -190, -949, -879, -949, -999}}}}, -/* CG.@@.. @ */ -{{{{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* CG.@A.. @ */ -{{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* CG.@C.. @ */ -{{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* CG.@G.. @ */ -{{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* CG.@U.. @ */ -{{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}}, -/* CG.A@.. @ */ -{{{ -100,-1079, -999,-1079,-1079}, -{ -100,-1079, -999,-1079,-1079}, -{ -100,-1079, -999,-1079,-1079}, -{ -100,-1079, -999,-1079,-1079}, -{ -100,-1079, -999,-1079,-1079}}, -/* CG.AA.. @ */ -{{ -100,-1079, -999,-1079,-1079}, -{ -100,-1079, -999,-1079,-1079}, -{ -100,-1079, -999,-1079,-1079}, -{ -100,-1079, -999,-1079,-1079}, -{ -100,-1079, -999,-1079,-1079}}, -/* CG.AC.. @ */ -{{ -100,-1079, -999,-1079,-1079}, -{ -100,-1079, -999,-1079,-1079}, -{ -100,-1079, -999,-1079,-1079}, -{ -100,-1079, -999,-1079,-1079}, -{ -100,-1079, -999,-1079,-1079}}, -/* CG.AG.. @ */ -{{ -100,-1079, -999,-1079,-1079}, -{ -100,-1079, -999,-1079,-1079}, -{ -100,-1079, -999,-1079,-1079}, -{ -100,-1079, -999,-1079,-1079}, -{ -100,-1079, -999,-1079,-1079}}, -/* CG.AU.. @ */ -{{ -100,-1079, -999,-1079,-1079}, -{ -100,-1079, -999,-1079,-1079}, -{ -100,-1079, -999,-1079,-1079}, -{ -100,-1079, -999,-1079,-1079}, -{ -100,-1079, -999,-1079,-1079}}}, -/* CG.C@.. @ */ -{{{ -100, -569, -499, -569, -719}, -{ -100, -569, -499, -569, -719}, -{ -100, -569, -499, -569, -719}, -{ -100, -569, -499, -569, -719}, -{ -100, -569, -499, -569, -719}}, -/* CG.CA.. @ */ -{{ -100, -569, -499, -569, -719}, -{ -100, -569, -499, -569, -719}, -{ -100, -569, -499, -569, -719}, -{ -100, -569, -499, -569, -719}, -{ -100, -569, -499, -569, -719}}, -/* CG.CC.. @ */ -{{ -100, -569, -499, -569, -719}, -{ -100, -569, -499, -569, -719}, -{ -100, -569, -499, -569, -719}, -{ -100, -569, -499, -569, -719}, -{ -100, -569, -499, -569, -719}}, -/* CG.CG.. @ */ -{{ -100, -569, -499, -569, -719}, -{ -100, -569, -499, -569, -719}, -{ -100, -569, -499, -569, -719}, -{ -100, -569, -499, -569, -719}, -{ -100, -569, -499, -569, -719}}, -/* CG.CU.. @ */ -{{ -100, -569, -499, -569, -719}, -{ -100, -569, -499, -569, -719}, -{ -100, -569, -499, -569, -719}, -{ -100, -569, -499, -569, -719}, -{ -100, -569, -499, -569, -719}}}, -/* CG.G@.. @ */ -{{{ -100, -989, -989, -989, -989}, -{ -100, -989, -989, -989, -989}, -{ -100, -989, -989, -989, -989}, -{ -100, -989, -989, -989, -989}, -{ -100, -989, -989, -989, -989}}, -/* CG.GA.. @ */ -{{ -100, -989, -989, -989, -989}, -{ -100, -989, -989, -989, -989}, -{ -100, -989, -989, -989, -989}, -{ -100, -989, -989, -989, -989}, -{ -100, -989, -989, -989, -989}}, -/* CG.GC.. @ */ -{{ -100, -989, -989, -989, -989}, -{ -100, -989, -989, -989, -989}, -{ -100, -989, -989, -989, -989}, -{ -100, -989, -989, -989, -989}, -{ -100, -989, -989, -989, -989}}, -/* CG.GG.. @ */ -{{ -100, -989, -989, -989, -989}, -{ -100, -989, -989, -989, -989}, -{ -100, -989, -989, -989, -989}, -{ -100, -989, -989, -989, -989}, -{ -100, -989, -989, -989, -989}}, -/* CG.GU.. @ */ -{{ -100, -989, -989, -989, -989}, -{ -100, -989, -989, -989, -989}, -{ -100, -989, -989, -989, -989}, -{ -100, -989, -989, -989, -989}, -{ -100, -989, -989, -989, -989}}}, -/* CG.U@.. @ */ -{{{ -100, -859, -789, -859, -909}, -{ -100, -859, -789, -859, -909}, -{ -100, -859, -789, -859, -909}, -{ -100, -859, -789, -859, -909}, -{ -100, -859, -789, -859, -909}}, -/* CG.UA.. @ */ -{{ -100, -859, -789, -859, -909}, -{ -100, -859, -789, -859, -909}, -{ -100, -859, -789, -859, -909}, -{ -100, -859, -789, -859, -909}, -{ -100, -859, -789, -859, -909}}, -/* CG.UC.. @ */ -{{ -100, -859, -789, -859, -909}, -{ -100, -859, -789, -859, -909}, -{ -100, -859, -789, -859, -909}, -{ -100, -859, -789, -859, -909}, -{ -100, -859, -789, -859, -909}}, -/* CG.UG.. @ */ -{{ -100, -859, -789, -859, -909}, -{ -100, -859, -789, -859, -909}, -{ -100, -859, -789, -859, -909}, -{ -100, -859, -789, -859, -909}, -{ -100, -859, -789, -859, -909}}, -/* CG.UU.. @ */ -{{ -100, -859, -789, -859, -909}, -{ -100, -859, -789, -859, -909}, -{ -100, -859, -789, -859, -909}, -{ -100, -859, -789, -859, -909}, -{ -100, -859, -789, -859, -909}}}}}, -{ /* noPair */ {{{{0}}}}, -/* GC.@@..CG */ -{{{{ 0, 0, 0, 0, 0}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* GC.@A..CG */ -{{ 0, 0, 0, 0, 0}, -{-1029,-1029,-1029,-1029,-1029}, -{ -519, -519, -519, -519, -519}, -{ -939, -939, -939, -939, -939}, -{ -809, -809, -809, -809, -809}}, -/* GC.@C..CG */ -{{ 0, 0, 0, 0, 0}, -{ -949, -949, -949, -949, -949}, -{ -449, -449, -449, -449, -449}, -{ -939, -939, -939, -939, -939}, -{ -739, -739, -739, -739, -739}}, -/* GC.@G..CG */ -{{ 0, 0, 0, 0, 0}, -{-1029,-1029,-1029,-1029,-1029}, -{ -519, -519, -519, -519, -519}, -{ -939, -939, -939, -939, -939}, -{ -809, -809, -809, -809, -809}}, -/* GC.@U..CG */ -{{ 0, 0, 0, 0, 0}, -{-1029,-1029,-1029,-1029,-1029}, -{ -669, -669, -669, -669, -669}, -{ -939, -939, -939, -939, -939}, -{ -859, -859, -859, -859, -859}}}, -/* GC.A@..CG */ -{{{ -50, -519, -879, -559, -879}, -{ -100, -569, -929, -609, -929}, -{ -100, -569, -929, -609, -929}, -{ -100, -569, -929, -609, -929}, -{ -100, -569, -929, -609, -929}}, -/* GC.AA..CG */ -{{ -50, -519, -879, -559, -879}, -{-1079,-1548,-1908,-1588,-1908}, -{ -569,-1038,-1398,-1078,-1398}, -{ -989,-1458,-1818,-1498,-1818}, -{ -859,-1328,-1688,-1368,-1688}}, -/* GC.AC..CG */ -{{ -50, -519, -879, -559, -879}, -{ -999,-1468,-1828,-1508,-1828}, -{ -499, -968,-1328,-1008,-1328}, -{ -989,-1458,-1818,-1498,-1818}, -{ -789,-1258,-1618,-1298,-1618}}, -/* GC.AG..CG */ -{{ -50, -519, -879, -559, -879}, -{-1079,-1548,-1908,-1588,-1908}, -{ -569,-1038,-1398,-1078,-1398}, -{ -989,-1458,-1818,-1498,-1818}, -{ -859,-1328,-1688,-1368,-1688}}, -/* GC.AU..CG */ -{{ -50, -519, -879, -559, -879}, -{-1079,-1548,-1908,-1588,-1908}, -{ -719,-1188,-1548,-1228,-1548}, -{ -989,-1458,-1818,-1498,-1818}, -{ -909,-1378,-1738,-1418,-1738}}}, -/* GC.C@..CG */ -{{{ -50, -719, -309, -309, -389}, -{ -100, -769, -359, -359, -439}, -{ -100, -769, -359, -359, -439}, -{ -100, -769, -359, -359, -439}, -{ -100, -769, -359, -359, -439}}, -/* GC.CA..CG */ -{{ -50, -719, -309, -309, -389}, -{-1079,-1748,-1338,-1338,-1418}, -{ -569,-1238, -828, -828, -908}, -{ -989,-1658,-1248,-1248,-1328}, -{ -859,-1528,-1118,-1118,-1198}}, -/* GC.CC..CG */ -{{ -50, -719, -309, -309, -389}, -{ -999,-1668,-1258,-1258,-1338}, -{ -499,-1168, -758, -758, -838}, -{ -989,-1658,-1248,-1248,-1328}, -{ -789,-1458,-1048,-1048,-1128}}, -/* GC.CG..CG */ -{{ -50, -719, -309, -309, -389}, -{-1079,-1748,-1338,-1338,-1418}, -{ -569,-1238, -828, -828, -908}, -{ -989,-1658,-1248,-1248,-1328}, -{ -859,-1528,-1118,-1118,-1198}}, -/* GC.CU..CG */ -{{ -50, -719, -309, -309, -389}, -{-1079,-1748,-1338,-1338,-1418}, -{ -719,-1388, -978, -978,-1058}, -{ -989,-1658,-1248,-1248,-1328}, -{ -909,-1578,-1168,-1168,-1248}}}, -/* GC.G@..CG */ -{{{ -50, -709, -739, -619, -739}, -{ -100, -759, -789, -669, -789}, -{ -100, -759, -789, -669, -789}, -{ -100, -759, -789, -669, -789}, -{ -100, -759, -789, -669, -789}}, -/* GC.GA..CG */ -{{ -50, -709, -739, -619, -739}, -{-1079,-1738,-1768,-1648,-1768}, -{ -569,-1228,-1258,-1138,-1258}, -{ -989,-1648,-1678,-1558,-1678}, -{ -859,-1518,-1548,-1428,-1548}}, -/* GC.GC..CG */ -{{ -50, -709, -739, -619, -739}, -{ -999,-1658,-1688,-1568,-1688}, -{ -499,-1158,-1188,-1068,-1188}, -{ -989,-1648,-1678,-1558,-1678}, -{ -789,-1448,-1478,-1358,-1478}}, -/* GC.GG..CG */ -{{ -50, -709, -739, -619, -739}, -{-1079,-1738,-1768,-1648,-1768}, -{ -569,-1228,-1258,-1138,-1258}, -{ -989,-1648,-1678,-1558,-1678}, -{ -859,-1518,-1548,-1428,-1548}}, -/* GC.GU..CG */ -{{ -50, -709, -739, -619, -739}, -{-1079,-1738,-1768,-1648,-1768}, -{ -719,-1378,-1408,-1288,-1408}, -{ -989,-1648,-1678,-1558,-3080}, -{ -909,-1568,-1598,-1478,-1598}}}, -/* GC.U@..CG */ -{{{ -50, -499, -499, -499, -569}, -{ -100, -549, -549, -549, -619}, -{ -100, -549, -549, -549, -619}, -{ -100, -549, -549, -549, -619}, -{ -100, -549, -549, -549, -619}}, -/* GC.UA..CG */ -{{ -50, -499, -499, -499, -569}, -{-1079,-1528,-1528,-1528,-1598}, -{ -569,-1018,-1018,-1018,-1088}, -{ -989,-1438,-1438,-1438,-1508}, -{ -859,-1308,-1308,-1308,-1378}}, -/* GC.UC..CG */ -{{ -50, -499, -499, -499, -569}, -{ -999,-1448,-1448,-1448,-1518}, -{ -499, -948, -948, -948,-1018}, -{ -989,-1438,-1438,-1438,-1508}, -{ -789,-1238,-1238,-1238,-1308}}, -/* GC.UG..CG */ -{{ -50, -499, -499, -499, -569}, -{-1079,-1528,-1528,-1528,-1598}, -{ -569,-1018,-1018,-1018,-1088}, -{ -989,-1438,-1438,-1438,-1508}, -{ -859,-1308,-1308,-1308,-1378}}, -/* GC.UU..CG */ -{{ -50, -499, -499, -499, -569}, -{-1079,-1528,-1528,-1528,-1598}, -{ -719,-1168,-1168,-1168,-1238}, -{ -989,-1438,-1438,-1438,-1508}, -{ -909,-1358,-1358,-1358,-1428}}}}, -/* GC.@@..GC */ -{{{{ 0, 0, 0, 0, 0}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* GC.@A..GC */ -{{ 0, 0, 0, 0, 0}, -{ -519, -519, -519, -519, -519}, -{ -719, -719, -719, -719, -719}, -{ -709, -709, -709, -709, -709}, -{ -499, -499, -499, -499, -499}}, -/* GC.@C..GC */ -{{ 0, 0, 0, 0, 0}, -{ -879, -879, -879, -879, -879}, -{ -309, -309, -309, -309, -309}, -{ -739, -739, -739, -739, -739}, -{ -499, -499, -499, -499, -499}}, -/* GC.@G..GC */ -{{ 0, 0, 0, 0, 0}, -{ -559, -559, -559, -559, -559}, -{ -309, -309, -309, -309, -309}, -{ -619, -619, -619, -619, -619}, -{ -499, -499, -499, -499, -499}}, -/* GC.@U..GC */ -{{ 0, 0, 0, 0, 0}, -{ -879, -879, -879, -879, -879}, -{ -389, -389, -389, -389, -389}, -{ -739, -739, -739, -739, -739}, -{ -569, -569, -569, -569, -569}}}, -/* GC.A@..GC */ -{{{ -50, -519, -879, -559, -879}, -{ -100, -569, -929, -609, -929}, -{ -100, -569, -929, -609, -929}, -{ -100, -569, -929, -609, -929}, -{ -100, -569, -929, -609, -929}}, -/* GC.AA..GC */ -{{ -50, -519, -879, -559, -879}, -{ -569,-1038,-1398,-1078,-1398}, -{ -769,-1238,-1598,-1278,-1598}, -{ -759,-1228,-1588,-1268,-1588}, -{ -549,-1018,-1378,-1058,-1378}}, -/* GC.AC..GC */ -{{ -50, -519, -879, -559, -879}, -{ -929,-1398,-1758,-1438,-1758}, -{ -359, -828,-1188, -868,-1188}, -{ -789,-1258,-1618,-1298,-1618}, -{ -549,-1018,-1378,-1058,-1378}}, -/* GC.AG..GC */ -{{ -50, -519, -879, -559, -879}, -{ -609,-1078,-1438,-1118,-1438}, -{ -359, -828,-1188, -868,-1188}, -{ -669,-1138,-1498,-1178,-1498}, -{ -549,-1018,-1378,-1058,-1378}}, -/* GC.AU..GC */ -{{ -50, -519, -879, -559, -879}, -{ -929,-1398,-1758,-1438,-1758}, -{ -439, -908,-1268, -948,-1268}, -{ -789,-1258,-1618,-1298,-1618}, -{ -619,-1088,-1448,-1128,-1448}}}, -/* GC.C@..GC */ -{{{ -50, -719, -309, -309, -389}, -{ -100, -769, -359, -359, -439}, -{ -100, -769, -359, -359, -439}, -{ -100, -769, -359, -359, -439}, -{ -100, -769, -359, -359, -439}}, -/* GC.CA..GC */ -{{ -50, -719, -309, -309, -389}, -{ -569,-1238, -828, -828, -908}, -{ -769,-1438,-1028,-1028,-1108}, -{ -759,-1428,-1018,-1018,-1098}, -{ -549,-1218, -808, -808, -888}}, -/* GC.CC..GC */ -{{ -50, -719, -309, -309, -389}, -{ -929,-1598,-1188,-1188,-1268}, -{ -359,-1028, -618, -618, -698}, -{ -789,-1458,-1048,-1048,-1128}, -{ -549,-1218, -808, -808, -888}}, -/* GC.CG..GC */ -{{ -50, -719, -309, -309, -389}, -{ -609,-1278, -868, -868, -948}, -{ -359,-1028, -618, -618, -698}, -{ -669,-1338, -928, -928,-1008}, -{ -549,-1218, -808, -808, -888}}, -/* GC.CU..GC */ -{{ -50, -719, -309, -309, -389}, -{ -929,-1598,-1188,-1188,-1268}, -{ -439,-1108, -698, -698, -778}, -{ -789,-1458,-1048,-1048,-1128}, -{ -619,-1288, -878, -878, -958}}}, -/* GC.G@..GC */ -{{{ -50, -709, -739, -619, -739}, -{ -100, -759, -789, -669, -789}, -{ -100, -759, -789, -669, -789}, -{ -100, -759, -789, -669, -789}, -{ -100, -759, -789, -669, -789}}, -/* GC.GA..GC */ -{{ -50, -709, -739, -619, -739}, -{ -569,-1228,-1258,-1138,-1258}, -{ -769,-1428,-1458,-1338,-1458}, -{ -759,-1418,-1448,-1328,-1448}, -{ -549,-1208,-1238,-1118,-1238}}, -/* GC.GC..GC */ -{{ -50, -709, -739, -619, -739}, -{ -929,-1588,-1618,-1498,-1618}, -{ -359,-1018,-1048, -928,-1048}, -{ -789,-1448,-1478,-1358,-1478}, -{ -549,-1208,-1238,-1118,-1238}}, -/* GC.GG..GC */ -{{ -50, -709, -739, -619, -739}, -{ -609,-1268,-1298,-1178,-1298}, -{ -359,-1018,-1048, -928,-1048}, -{ -669,-1328,-1358,-1238,-1358}, -{ -549,-1208,-1238,-1118,-1238}}, -/* GC.GU..GC */ -{{ -50, -709, -739, -619, -739}, -{ -929,-1588,-1618,-1498,-1618}, -{ -439,-1098,-1128,-1008,-1128}, -{ -789,-1448,-1478,-1358,-3080}, -{ -619,-1278,-1308,-1188,-1308}}}, -/* GC.U@..GC */ -{{{ -50, -499, -499, -499, -569}, -{ -100, -549, -549, -549, -619}, -{ -100, -549, -549, -549, -619}, -{ -100, -549, -549, -549, -619}, -{ -100, -549, -549, -549, -619}}, -/* GC.UA..GC */ -{{ -50, -499, -499, -499, -569}, -{ -569,-1018,-1018,-1018,-1088}, -{ -769,-1218,-1218,-1218,-1288}, -{ -759,-1208,-1208,-1208,-1278}, -{ -549, -998, -998, -998,-1068}}, -/* GC.UC..GC */ -{{ -50, -499, -499, -499, -569}, -{ -929,-1378,-1378,-1378,-1448}, -{ -359, -808, -808, -808, -878}, -{ -789,-1238,-1238,-1238,-1308}, -{ -549, -998, -998, -998,-1068}}, -/* GC.UG..GC */ -{{ -50, -499, -499, -499, -569}, -{ -609,-1058,-1058,-1058,-1128}, -{ -359, -808, -808, -808, -878}, -{ -669,-1118,-1118,-1118,-1188}, -{ -549, -998, -998, -998,-1068}}, -/* GC.UU..GC */ -{{ -50, -499, -499, -499, -569}, -{ -929,-1378,-1378,-1378,-1448}, -{ -439, -888, -888, -888, -958}, -{ -789,-1238,-1238,-1238,-1308}, -{ -619,-1068,-1068,-1068,-1138}}}}, -/* GC.@@..GU */ -{{{{ 0, 0, 0, 0, 0}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* GC.@A..GU */ -{{ 0, 0, 0, 0, 0}, -{ -429, -429, -429, -429, -429}, -{ -259, -259, -259, -259, -259}, -{ -339, -339, -339, -339, -339}, -{ -329, -329, -329, -329, -329}}, -/* GC.@C..GU */ -{{ 0, 0, 0, 0, 0}, -{ -599, -599, -599, -599, -599}, -{ -239, -239, -239, -239, -239}, -{ -689, -689, -689, -689, -689}, -{ -329, -329, -329, -329, -329}}, -/* GC.@G..GU */ -{{ 0, 0, 0, 0, 0}, -{ -599, -599, -599, -599, -599}, -{ -239, -239, -239, -239, -239}, -{ -689, -689, -689, -689, -689}, -{ -329, -329, -329, -329, -329}}, -/* GC.@U..GU */ -{{ 0, 0, 0, 0, 0}, -{ -599, -599, -599, -599, -599}, -{ -239, -239, -239, -239, -239}, -{ -689, -689, -689, -689, -689}, -{ -329, -329, -329, -329, -329}}}, -/* GC.A@..GU */ -{{{ -50, -519, -879, -559, -879}, -{ -100, -569, -929, -609, -929}, -{ -100, -569, -929, -609, -929}, -{ -100, -569, -929, -609, -929}, -{ -100, -569, -929, -609, -929}}, -/* GC.AA..GU */ -{{ -50, -519, -879, -559, -879}, -{ -479, -948,-1308, -988,-1308}, -{ -309, -778,-1138, -818,-1138}, -{ -389, -858,-1218, -898,-1218}, -{ -379, -848,-1208, -888,-1208}}, -/* GC.AC..GU */ -{{ -50, -519, -879, -559, -879}, -{ -649,-1118,-1478,-1158,-1478}, -{ -289, -758,-1118, -798,-1118}, -{ -739,-1208,-1568,-1248,-1568}, -{ -379, -848,-1208, -888,-1208}}, -/* GC.AG..GU */ -{{ -50, -519, -879, -559, -879}, -{ -649,-1118,-1478,-1158,-1478}, -{ -289, -758,-1118, -798,-1118}, -{ -739,-1208,-1568,-1248,-1568}, -{ -379, -848,-1208, -888,-1208}}, -/* GC.AU..GU */ -{{ -50, -519, -879, -559, -879}, -{ -649,-1118,-1478,-1158,-1478}, -{ -289, -758,-1118, -798,-1118}, -{ -739,-1208,-1568,-1248,-1568}, -{ -379, -848,-1208, -888,-1208}}}, -/* GC.C@..GU */ -{{{ -50, -719, -309, -309, -389}, -{ -100, -769, -359, -359, -439}, -{ -100, -769, -359, -359, -439}, -{ -100, -769, -359, -359, -439}, -{ -100, -769, -359, -359, -439}}, -/* GC.CA..GU */ -{{ -50, -719, -309, -309, -389}, -{ -479,-1148, -738, -738, -818}, -{ -309, -978, -568, -568, -648}, -{ -389,-1058, -648, -648, -728}, -{ -379,-1048, -638, -638, -718}}, -/* GC.CC..GU */ -{{ -50, -719, -309, -309, -389}, -{ -649,-1318, -908, -908, -988}, -{ -289, -958, -548, -548, -628}, -{ -739,-1408, -998, -998,-1078}, -{ -379,-1048, -638, -638, -718}}, -/* GC.CG..GU */ -{{ -50, -719, -309, -309, -389}, -{ -649,-1318, -908, -908, -988}, -{ -289, -958, -548, -548, -628}, -{ -739,-1408, -998, -998,-1078}, -{ -379,-1048, -638, -638, -718}}, -/* GC.CU..GU */ -{{ -50, -719, -309, -309, -389}, -{ -649,-1318, -908, -908, -988}, -{ -289, -958, -548, -548, -628}, -{ -739,-1408, -998, -998,-1078}, -{ -379,-1048, -638, -638, -718}}}, -/* GC.G@..GU */ -{{{ -50, -709, -739, -619, -739}, -{ -100, -759, -789, -669, -789}, -{ -100, -759, -789, -669, -789}, -{ -100, -759, -789, -669, -789}, -{ -100, -759, -789, -669, -789}}, -/* GC.GA..GU */ -{{ -50, -709, -739, -619, -739}, -{ -479,-1138,-1168,-1048,-1168}, -{ -309, -968, -998, -878, -998}, -{ -389,-1048,-1078, -958,-1078}, -{ -379,-1038,-1068, -948,-1068}}, -/* GC.GC..GU */ -{{ -50, -709, -739, -619, -739}, -{ -649,-1308,-1338,-1218,-1338}, -{ -289, -948, -978, -858, -978}, -{ -739,-1398,-1428,-1308,-1428}, -{ -379,-1038,-1068, -948,-1068}}, -/* GC.GG..GU */ -{{ -50, -709, -739, -619, -739}, -{ -649,-1308,-1338,-1218,-1338}, -{ -289, -948, -978, -858, -978}, -{ -739,-1398,-1428,-1308,-1428}, -{ -379,-1038,-1068, -948,-1068}}, -/* GC.GU..GU */ -{{ -50, -709, -739, -619, -739}, -{ -649,-1308,-1338,-1218,-1338}, -{ -289, -948, -978, -858, -978}, -{ -739,-1398,-1428,-1308,-1428}, -{ -379,-1038,-1068, -948,-1068}}}, -/* GC.U@..GU */ -{{{ -50, -499, -499, -499, -569}, -{ -100, -549, -549, -549, -619}, -{ -100, -549, -549, -549, -619}, -{ -100, -549, -549, -549, -619}, -{ -100, -549, -549, -549, -619}}, -/* GC.UA..GU */ -{{ -50, -499, -499, -499, -569}, -{ -479, -928, -928, -928, -998}, -{ -309, -758, -758, -758, -828}, -{ -389, -838, -838, -838, -908}, -{ -379, -828, -828, -828, -898}}, -/* GC.UC..GU */ -{{ -50, -499, -499, -499, -569}, -{ -649,-1098,-1098,-1098,-1168}, -{ -289, -738, -738, -738, -808}, -{ -739,-1188,-1188,-1188,-1258}, -{ -379, -828, -828, -828, -898}}, -/* GC.UG..GU */ -{{ -50, -499, -499, -499, -569}, -{ -649,-1098,-1098,-1098,-1168}, -{ -289, -738, -738, -738, -808}, -{ -739,-1188,-1188,-1188,-1258}, -{ -379, -828, -828, -828, -898}}, -/* GC.UU..GU */ -{{ -50, -499, -499, -499, -569}, -{ -649,-1098,-1098,-1098,-1168}, -{ -289, -738, -738, -738, -808}, -{ -739,-1188,-1188,-1188,-1258}, -{ -379, -828, -828, -828, -898}}}}, -/* GC.@@..UG */ -{{{{ 0, 0, 0, 0, 0}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* GC.@A..UG */ -{{ 0, 0, 0, 0, 0}, -{ -719, -719, -719, -719, -719}, -{ -479, -479, -479, -479, -479}, -{ -659, -659, -659, -659, -659}, -{ -549, -549, -549, -549, -549}}, -/* GC.@C..UG */ -{{ 0, 0, 0, 0, 0}, -{ -789, -789, -789, -789, -789}, -{ -479, -479, -479, -479, -479}, -{ -809, -809, -809, -809, -809}, -{ -439, -439, -439, -439, -439}}, -/* GC.@G..UG */ -{{ 0, 0, 0, 0, 0}, -{ -959, -959, -959, -959, -959}, -{ -359, -359, -359, -359, -359}, -{ -919, -919, -919, -919, -919}, -{ -549, -549, -549, -549, -549}}, -/* GC.@U..UG */ -{{ 0, 0, 0, 0, 0}, -{ -809, -809, -809, -809, -809}, -{ -479, -479, -479, -479, -479}, -{ -809, -809, -809, -809, -809}, -{ -359, -359, -359, -359, -359}}}, -/* GC.A@..UG */ -{{{ -50, -519, -879, -559, -879}, -{ -100, -569, -929, -609, -929}, -{ -100, -569, -929, -609, -929}, -{ -100, -569, -929, -609, -929}, -{ -100, -569, -929, -609, -929}}, -/* GC.AA..UG */ -{{ -50, -519, -879, -559, -879}, -{ -769,-1238,-1598,-1278,-1598}, -{ -529, -998,-1358,-1038,-1358}, -{ -709,-1178,-1538,-1218,-1538}, -{ -599,-1068,-1428,-1108,-1428}}, -/* GC.AC..UG */ -{{ -50, -519, -879, -559, -879}, -{ -839,-1308,-1668,-1348,-1668}, -{ -529, -998,-1358,-1038,-1358}, -{ -859,-1328,-1688,-1368,-1688}, -{ -489, -958,-1318, -998,-1318}}, -/* GC.AG..UG */ -{{ -50, -519, -879, -559, -879}, -{-1009,-1478,-1838,-1518,-1838}, -{ -409, -878,-1238, -918,-1238}, -{ -969,-1438,-1798,-1478,-1798}, -{ -599,-1068,-1428,-1108,-1428}}, -/* GC.AU..UG */ -{{ -50, -519, -879, -559, -879}, -{ -859,-1328,-1688,-1368,-1688}, -{ -529, -998,-1358,-1038,-1358}, -{ -859,-1328,-1688,-1368,-1688}, -{ -409, -878,-1238, -918,-1238}}}, -/* GC.C@..UG */ -{{{ -50, -719, -309, -309, -389}, -{ -100, -769, -359, -359, -439}, -{ -100, -769, -359, -359, -439}, -{ -100, -769, -359, -359, -439}, -{ -100, -769, -359, -359, -439}}, -/* GC.CA..UG */ -{{ -50, -719, -309, -309, -389}, -{ -769,-1438,-1028,-1028,-1108}, -{ -529,-1198, -788, -788, -868}, -{ -709,-1378, -968, -968,-1048}, -{ -599,-1268, -858, -858, -938}}, -/* GC.CC..UG */ -{{ -50, -719, -309, -309, -389}, -{ -839,-1508,-1098,-1098,-1178}, -{ -529,-1198, -788, -788, -868}, -{ -859,-1528,-1118,-1118,-1198}, -{ -489,-1158, -748, -748, -828}}, -/* GC.CG..UG */ -{{ -50, -719, -309, -309, -389}, -{-1009,-1678,-1268,-1268,-1348}, -{ -409,-1078, -668, -668, -748}, -{ -969,-1638,-1228,-1228,-1308}, -{ -599,-1268, -858, -858, -938}}, -/* GC.CU..UG */ -{{ -50, -719, -309, -309, -389}, -{ -859,-1528,-1118,-1118,-1198}, -{ -529,-1198, -788, -788, -868}, -{ -859,-1528,-1118,-1118,-1198}, -{ -409,-1078, -668, -668, -748}}}, -/* GC.G@..UG */ -{{{ -50, -709, -739, -619, -739}, -{ -100, -759, -789, -669, -789}, -{ -100, -759, -789, -669, -789}, -{ -100, -759, -789, -669, -789}, -{ -100, -759, -789, -669, -789}}, -/* GC.GA..UG */ -{{ -50, -709, -739, -619, -739}, -{ -769,-1428,-1458,-1338,-1458}, -{ -529,-1188,-1218,-1098,-1218}, -{ -709,-1368,-1398,-1278,-1398}, -{ -599,-1258,-1288,-1168,-1288}}, -/* GC.GC..UG */ -{{ -50, -709, -739, -619, -739}, -{ -839,-1498,-1528,-1408,-1528}, -{ -529,-1188,-1218,-1098,-1218}, -{ -859,-1518,-1548,-1428,-1548}, -{ -489,-1148,-1178,-1058,-1178}}, -/* GC.GG..UG */ -{{ -50, -709, -739, -619, -739}, -{-1009,-1668,-1698,-1578,-1698}, -{ -409,-1068,-1098, -978,-1098}, -{ -969,-1628,-1658,-1538,-1658}, -{ -599,-1258,-1288,-1168,-1288}}, -/* GC.GU..UG */ -{{ -50, -709, -739, -619, -739}, -{ -859,-1518,-1548,-1428,-1548}, -{ -529,-1188,-1218,-1098,-1218}, -{ -859,-1518,-1548,-1428,-1548}, -{ -409,-1068,-1098, -978,-1098}}}, -/* GC.U@..UG */ -{{{ -50, -499, -499, -499, -569}, -{ -100, -549, -549, -549, -619}, -{ -100, -549, -549, -549, -619}, -{ -100, -549, -549, -549, -619}, -{ -100, -549, -549, -549, -619}}, -/* GC.UA..UG */ -{{ -50, -499, -499, -499, -569}, -{ -769,-1218,-1218,-1218,-1288}, -{ -529, -978, -978, -978,-1048}, -{ -709,-1158,-1158,-1158,-1228}, -{ -599,-1048,-1048,-1048,-1118}}, -/* GC.UC..UG */ -{{ -50, -499, -499, -499, -569}, -{ -839,-1288,-1288,-1288,-1358}, -{ -529, -978, -978, -978,-1048}, -{ -859,-1308,-1308,-1308,-1378}, -{ -489, -938, -938, -938,-1008}}, -/* GC.UG..UG */ -{{ -50, -499, -499, -499, -569}, -{-1009,-1458,-1458,-1458,-1528}, -{ -409, -858, -858, -858, -928}, -{ -969,-1418,-1418,-1418,-1488}, -{ -599,-1048,-1048,-1048,-1118}}, -/* GC.UU..UG */ -{{ -50, -499, -499, -499, -569}, -{ -859,-1308,-1308,-1308,-1378}, -{ -529, -978, -978, -978,-1048}, -{ -859,-1308,-1308,-1308,-1378}, -{ -409, -858, -858, -858, -928}}}}, -/* GC.@@..AU */ -{{{{ 0, 0, 0, 0, 0}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* GC.@A..AU */ -{{ 0, 0, 0, 0, 0}, -{ -429, -429, -429, -429, -429}, -{ -259, -259, -259, -259, -259}, -{ -339, -339, -339, -339, -339}, -{ -329, -329, -329, -329, -329}}, -/* GC.@C..AU */ -{{ 0, 0, 0, 0, 0}, -{ -599, -599, -599, -599, -599}, -{ -239, -239, -239, -239, -239}, -{ -689, -689, -689, -689, -689}, -{ -329, -329, -329, -329, -329}}, -/* GC.@G..AU */ -{{ 0, 0, 0, 0, 0}, -{ -599, -599, -599, -599, -599}, -{ -239, -239, -239, -239, -239}, -{ -689, -689, -689, -689, -689}, -{ -329, -329, -329, -329, -329}}, -/* GC.@U..AU */ -{{ 0, 0, 0, 0, 0}, -{ -599, -599, -599, -599, -599}, -{ -239, -239, -239, -239, -239}, -{ -689, -689, -689, -689, -689}, -{ -329, -329, -329, -329, -329}}}, -/* GC.A@..AU */ -{{{ -50, -519, -879, -559, -879}, -{ -100, -569, -929, -609, -929}, -{ -100, -569, -929, -609, -929}, -{ -100, -569, -929, -609, -929}, -{ -100, -569, -929, -609, -929}}, -/* GC.AA..AU */ -{{ -50, -519, -879, -559, -879}, -{ -479, -948,-1308, -988,-1308}, -{ -309, -778,-1138, -818,-1138}, -{ -389, -858,-1218, -898,-1218}, -{ -379, -848,-1208, -888,-1208}}, -/* GC.AC..AU */ -{{ -50, -519, -879, -559, -879}, -{ -649,-1118,-1478,-1158,-1478}, -{ -289, -758,-1118, -798,-1118}, -{ -739,-1208,-1568,-1248,-1568}, -{ -379, -848,-1208, -888,-1208}}, -/* GC.AG..AU */ -{{ -50, -519, -879, -559, -879}, -{ -649,-1118,-1478,-1158,-1478}, -{ -289, -758,-1118, -798,-1118}, -{ -739,-1208,-1568,-1248,-1568}, -{ -379, -848,-1208, -888,-1208}}, -/* GC.AU..AU */ -{{ -50, -519, -879, -559, -879}, -{ -649,-1118,-1478,-1158,-1478}, -{ -289, -758,-1118, -798,-1118}, -{ -739,-1208,-1568,-1248,-1568}, -{ -379, -848,-1208, -888,-1208}}}, -/* GC.C@..AU */ -{{{ -50, -719, -309, -309, -389}, -{ -100, -769, -359, -359, -439}, -{ -100, -769, -359, -359, -439}, -{ -100, -769, -359, -359, -439}, -{ -100, -769, -359, -359, -439}}, -/* GC.CA..AU */ -{{ -50, -719, -309, -309, -389}, -{ -479,-1148, -738, -738, -818}, -{ -309, -978, -568, -568, -648}, -{ -389,-1058, -648, -648, -728}, -{ -379,-1048, -638, -638, -718}}, -/* GC.CC..AU */ -{{ -50, -719, -309, -309, -389}, -{ -649,-1318, -908, -908, -988}, -{ -289, -958, -548, -548, -628}, -{ -739,-1408, -998, -998,-1078}, -{ -379,-1048, -638, -638, -718}}, -/* GC.CG..AU */ -{{ -50, -719, -309, -309, -389}, -{ -649,-1318, -908, -908, -988}, -{ -289, -958, -548, -548, -628}, -{ -739,-1408, -998, -998,-1078}, -{ -379,-1048, -638, -638, -718}}, -/* GC.CU..AU */ -{{ -50, -719, -309, -309, -389}, -{ -649,-1318, -908, -908, -988}, -{ -289, -958, -548, -548, -628}, -{ -739,-1408, -998, -998,-1078}, -{ -379,-1048, -638, -638, -718}}}, -/* GC.G@..AU */ -{{{ -50, -709, -739, -619, -739}, -{ -100, -759, -789, -669, -789}, -{ -100, -759, -789, -669, -789}, -{ -100, -759, -789, -669, -789}, -{ -100, -759, -789, -669, -789}}, -/* GC.GA..AU */ -{{ -50, -709, -739, -619, -739}, -{ -479,-1138,-1168,-1048,-1168}, -{ -309, -968, -998, -878, -998}, -{ -389,-1048,-1078, -958,-1078}, -{ -379,-1038,-1068, -948,-1068}}, -/* GC.GC..AU */ -{{ -50, -709, -739, -619, -739}, -{ -649,-1308,-1338,-1218,-1338}, -{ -289, -948, -978, -858, -978}, -{ -739,-1398,-1428,-1308,-1428}, -{ -379,-1038,-1068, -948,-1068}}, -/* GC.GG..AU */ -{{ -50, -709, -739, -619, -739}, -{ -649,-1308,-1338,-1218,-1338}, -{ -289, -948, -978, -858, -978}, -{ -739,-1398,-1428,-1308,-1428}, -{ -379,-1038,-1068, -948,-1068}}, -/* GC.GU..AU */ -{{ -50, -709, -739, -619, -739}, -{ -649,-1308,-1338,-1218,-1338}, -{ -289, -948, -978, -858, -978}, -{ -739,-1398,-1428,-1308,-1428}, -{ -379,-1038,-1068, -948,-1068}}}, -/* GC.U@..AU */ -{{{ -50, -499, -499, -499, -569}, -{ -100, -549, -549, -549, -619}, -{ -100, -549, -549, -549, -619}, -{ -100, -549, -549, -549, -619}, -{ -100, -549, -549, -549, -619}}, -/* GC.UA..AU */ -{{ -50, -499, -499, -499, -569}, -{ -479, -928, -928, -928, -998}, -{ -309, -758, -758, -758, -828}, -{ -389, -838, -838, -838, -908}, -{ -379, -828, -828, -828, -898}}, -/* GC.UC..AU */ -{{ -50, -499, -499, -499, -569}, -{ -649,-1098,-1098,-1098,-1168}, -{ -289, -738, -738, -738, -808}, -{ -739,-1188,-1188,-1188,-1258}, -{ -379, -828, -828, -828, -898}}, -/* GC.UG..AU */ -{{ -50, -499, -499, -499, -569}, -{ -649,-1098,-1098,-1098,-1168}, -{ -289, -738, -738, -738, -808}, -{ -739,-1188,-1188,-1188,-1258}, -{ -379, -828, -828, -828, -898}}, -/* GC.UU..AU */ -{{ -50, -499, -499, -499, -569}, -{ -649,-1098,-1098,-1098,-1168}, -{ -289, -738, -738, -738, -808}, -{ -739,-1188,-1188,-1188,-1258}, -{ -379, -828, -828, -828, -898}}}}, -/* GC.@@..UA */ -{{{{ 0, 0, 0, 0, 0}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* GC.@A..UA */ -{{ 0, 0, 0, 0, 0}, -{ -399, -399, -399, -399, -399}, -{ -429, -429, -429, -429, -429}, -{ -379, -379, -379, -379, -379}, -{ -279, -279, -279, -279, -279}}, -/* GC.@C..UA */ -{{ 0, 0, 0, 0, 0}, -{ -629, -629, -629, -629, -629}, -{ -509, -509, -509, -509, -509}, -{ -679, -679, -679, -679, -679}, -{ -139, -139, -139, -139, -139}}, -/* GC.@G..UA */ -{{ 0, 0, 0, 0, 0}, -{ -889, -889, -889, -889, -889}, -{ -199, -199, -199, -199, -199}, -{ -889, -889, -889, -889, -889}, -{ -279, -279, -279, -279, -279}}, -/* GC.@U..UA */ -{{ 0, 0, 0, 0, 0}, -{ -589, -589, -589, -589, -589}, -{ -179, -179, -179, -179, -179}, -{ -679, -679, -679, -679, -679}, -{ -140, -140, -140, -140, -140}}}, -/* GC.A@..UA */ -{{{ -50, -519, -879, -559, -879}, -{ -100, -569, -929, -609, -929}, -{ -100, -569, -929, -609, -929}, -{ -100, -569, -929, -609, -929}, -{ -100, -569, -929, -609, -929}}, -/* GC.AA..UA */ -{{ -50, -519, -879, -559, -879}, -{ -449, -918,-1278, -958,-1278}, -{ -479, -948,-1308, -988,-1308}, -{ -429, -898,-1258, -938,-1258}, -{ -329, -798,-1158, -838,-1158}}, -/* GC.AC..UA */ -{{ -50, -519, -879, -559, -879}, -{ -679,-1148,-1508,-1188,-1508}, -{ -559,-1028,-1388,-1068,-1388}, -{ -729,-1198,-1558,-1238,-1558}, -{ -189, -658,-1018, -698,-1018}}, -/* GC.AG..UA */ -{{ -50, -519, -879, -559, -879}, -{ -939,-1408,-1768,-1448,-1768}, -{ -249, -718,-1078, -758,-1078}, -{ -939,-1408,-1768,-1448,-1768}, -{ -329, -798,-1158, -838,-1158}}, -/* GC.AU..UA */ -{{ -50, -519, -879, -559, -879}, -{ -639,-1108,-1468,-1148,-1468}, -{ -229, -698,-1058, -738,-1058}, -{ -729,-1198,-1558,-1238,-1558}, -{ -190, -659,-1019, -699,-1019}}}, -/* GC.C@..UA */ -{{{ -50, -719, -309, -309, -389}, -{ -100, -769, -359, -359, -439}, -{ -100, -769, -359, -359, -439}, -{ -100, -769, -359, -359, -439}, -{ -100, -769, -359, -359, -439}}, -/* GC.CA..UA */ -{{ -50, -719, -309, -309, -389}, -{ -449,-1118, -708, -708, -788}, -{ -479,-1148, -738, -738, -818}, -{ -429,-1098, -688, -688, -768}, -{ -329, -998, -588, -588, -668}}, -/* GC.CC..UA */ -{{ -50, -719, -309, -309, -389}, -{ -679,-1348, -938, -938,-1018}, -{ -559,-1228, -818, -818, -898}, -{ -729,-1398, -988, -988,-1068}, -{ -189, -858, -448, -448, -528}}, -/* GC.CG..UA */ -{{ -50, -719, -309, -309, -389}, -{ -939,-1608,-1198,-1198,-1278}, -{ -249, -918, -508, -508, -588}, -{ -939,-1608,-1198,-1198,-1278}, -{ -329, -998, -588, -588, -668}}, -/* GC.CU..UA */ -{{ -50, -719, -309, -309, -389}, -{ -639,-1308, -898, -898, -978}, -{ -229, -898, -488, -488, -568}, -{ -729,-1398, -988, -988,-1068}, -{ -190, -859, -449, -449, -529}}}, -/* GC.G@..UA */ -{{{ -50, -709, -739, -619, -739}, -{ -100, -759, -789, -669, -789}, -{ -100, -759, -789, -669, -789}, -{ -100, -759, -789, -669, -789}, -{ -100, -759, -789, -669, -789}}, -/* GC.GA..UA */ -{{ -50, -709, -739, -619, -739}, -{ -449,-1108,-1138,-1018,-1138}, -{ -479,-1138,-1168,-1048,-1168}, -{ -429,-1088,-1118, -998,-1118}, -{ -329, -988,-1018, -898,-1018}}, -/* GC.GC..UA */ -{{ -50, -709, -739, -619, -739}, -{ -679,-1338,-1368,-1248,-1368}, -{ -559,-1218,-1248,-1128,-1248}, -{ -729,-1388,-1418,-1298,-1418}, -{ -189, -848, -878, -758, -878}}, -/* GC.GG..UA */ -{{ -50, -709, -739, -619, -739}, -{ -939,-1598,-1628,-1508,-1628}, -{ -249, -908, -938, -818, -938}, -{ -939,-1598,-1628,-1508,-1628}, -{ -329, -988,-1018, -898,-1018}}, -/* GC.GU..UA */ -{{ -50, -709, -739, -619, -739}, -{ -639,-1298,-1328,-1208,-1328}, -{ -229, -888, -918, -798, -918}, -{ -729,-1388,-1418,-1298,-1418}, -{ -190, -849, -879, -759, -879}}}, -/* GC.U@..UA */ -{{{ -50, -499, -499, -499, -569}, -{ -100, -549, -549, -549, -619}, -{ -100, -549, -549, -549, -619}, -{ -100, -549, -549, -549, -619}, -{ -100, -549, -549, -549, -619}}, -/* GC.UA..UA */ -{{ -50, -499, -499, -499, -569}, -{ -449, -898, -898, -898, -968}, -{ -479, -928, -928, -928, -998}, -{ -429, -878, -878, -878, -948}, -{ -329, -778, -778, -778, -848}}, -/* GC.UC..UA */ -{{ -50, -499, -499, -499, -569}, -{ -679,-1128,-1128,-1128,-1198}, -{ -559,-1008,-1008,-1008,-1078}, -{ -729,-1178,-1178,-1178,-1248}, -{ -189, -638, -638, -638, -708}}, -/* GC.UG..UA */ -{{ -50, -499, -499, -499, -569}, -{ -939,-1388,-1388,-1388,-1458}, -{ -249, -698, -698, -698, -768}, -{ -939,-1388,-1388,-1388,-1458}, -{ -329, -778, -778, -778, -848}}, -/* GC.UU..UA */ -{{ -50, -499, -499, -499, -569}, -{ -639,-1088,-1088,-1088,-1158}, -{ -229, -678, -678, -678, -748}, -{ -729,-1178,-1178,-1178,-1248}, -{ -190, -639, -639, -639, -709}}}}, -/* GC.@@.. @ */ -{{{{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* GC.@A.. @ */ -{{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* GC.@C.. @ */ -{{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* GC.@G.. @ */ -{{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* GC.@U.. @ */ -{{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}}, -/* GC.A@.. @ */ -{{{ -100, -569, -929, -609, -929}, -{ -100, -569, -929, -609, -929}, -{ -100, -569, -929, -609, -929}, -{ -100, -569, -929, -609, -929}, -{ -100, -569, -929, -609, -929}}, -/* GC.AA.. @ */ -{{ -100, -569, -929, -609, -929}, -{ -100, -569, -929, -609, -929}, -{ -100, -569, -929, -609, -929}, -{ -100, -569, -929, -609, -929}, -{ -100, -569, -929, -609, -929}}, -/* GC.AC.. @ */ -{{ -100, -569, -929, -609, -929}, -{ -100, -569, -929, -609, -929}, -{ -100, -569, -929, -609, -929}, -{ -100, -569, -929, -609, -929}, -{ -100, -569, -929, -609, -929}}, -/* GC.AG.. @ */ -{{ -100, -569, -929, -609, -929}, -{ -100, -569, -929, -609, -929}, -{ -100, -569, -929, -609, -929}, -{ -100, -569, -929, -609, -929}, -{ -100, -569, -929, -609, -929}}, -/* GC.AU.. @ */ -{{ -100, -569, -929, -609, -929}, -{ -100, -569, -929, -609, -929}, -{ -100, -569, -929, -609, -929}, -{ -100, -569, -929, -609, -929}, -{ -100, -569, -929, -609, -929}}}, -/* GC.C@.. @ */ -{{{ -100, -769, -359, -359, -439}, -{ -100, -769, -359, -359, -439}, -{ -100, -769, -359, -359, -439}, -{ -100, -769, -359, -359, -439}, -{ -100, -769, -359, -359, -439}}, -/* GC.CA.. @ */ -{{ -100, -769, -359, -359, -439}, -{ -100, -769, -359, -359, -439}, -{ -100, -769, -359, -359, -439}, -{ -100, -769, -359, -359, -439}, -{ -100, -769, -359, -359, -439}}, -/* GC.CC.. @ */ -{{ -100, -769, -359, -359, -439}, -{ -100, -769, -359, -359, -439}, -{ -100, -769, -359, -359, -439}, -{ -100, -769, -359, -359, -439}, -{ -100, -769, -359, -359, -439}}, -/* GC.CG.. @ */ -{{ -100, -769, -359, -359, -439}, -{ -100, -769, -359, -359, -439}, -{ -100, -769, -359, -359, -439}, -{ -100, -769, -359, -359, -439}, -{ -100, -769, -359, -359, -439}}, -/* GC.CU.. @ */ -{{ -100, -769, -359, -359, -439}, -{ -100, -769, -359, -359, -439}, -{ -100, -769, -359, -359, -439}, -{ -100, -769, -359, -359, -439}, -{ -100, -769, -359, -359, -439}}}, -/* GC.G@.. @ */ -{{{ -100, -759, -789, -669, -789}, -{ -100, -759, -789, -669, -789}, -{ -100, -759, -789, -669, -789}, -{ -100, -759, -789, -669, -789}, -{ -100, -759, -789, -669, -789}}, -/* GC.GA.. @ */ -{{ -100, -759, -789, -669, -789}, -{ -100, -759, -789, -669, -789}, -{ -100, -759, -789, -669, -789}, -{ -100, -759, -789, -669, -789}, -{ -100, -759, -789, -669, -789}}, -/* GC.GC.. @ */ -{{ -100, -759, -789, -669, -789}, -{ -100, -759, -789, -669, -789}, -{ -100, -759, -789, -669, -789}, -{ -100, -759, -789, -669, -789}, -{ -100, -759, -789, -669, -789}}, -/* GC.GG.. @ */ -{{ -100, -759, -789, -669, -789}, -{ -100, -759, -789, -669, -789}, -{ -100, -759, -789, -669, -789}, -{ -100, -759, -789, -669, -789}, -{ -100, -759, -789, -669, -789}}, -/* GC.GU.. @ */ -{{ -100, -759, -789, -669, -789}, -{ -100, -759, -789, -669, -789}, -{ -100, -759, -789, -669, -789}, -{ -100, -759, -789, -669, -789}, -{ -100, -759, -789, -669, -789}}}, -/* GC.U@.. @ */ -{{{ -100, -549, -549, -549, -619}, -{ -100, -549, -549, -549, -619}, -{ -100, -549, -549, -549, -619}, -{ -100, -549, -549, -549, -619}, -{ -100, -549, -549, -549, -619}}, -/* GC.UA.. @ */ -{{ -100, -549, -549, -549, -619}, -{ -100, -549, -549, -549, -619}, -{ -100, -549, -549, -549, -619}, -{ -100, -549, -549, -549, -619}, -{ -100, -549, -549, -549, -619}}, -/* GC.UC.. @ */ -{{ -100, -549, -549, -549, -619}, -{ -100, -549, -549, -549, -619}, -{ -100, -549, -549, -549, -619}, -{ -100, -549, -549, -549, -619}, -{ -100, -549, -549, -549, -619}}, -/* GC.UG.. @ */ -{{ -100, -549, -549, -549, -619}, -{ -100, -549, -549, -549, -619}, -{ -100, -549, -549, -549, -619}, -{ -100, -549, -549, -549, -619}, -{ -100, -549, -549, -549, -619}}, -/* GC.UU.. @ */ -{{ -100, -549, -549, -549, -619}, -{ -100, -549, -549, -549, -619}, -{ -100, -549, -549, -549, -619}, -{ -100, -549, -549, -549, -619}, -{ -100, -549, -549, -549, -619}}}}}, -{ /* noPair */ {{{{0}}}}, -/* GU.@@..CG */ -{{{{ 0, 0, 0, 0, 0}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* GU.@A..CG */ -{{ 0, 0, 0, 0, 0}, -{-1029,-1029,-1029,-1029,-1029}, -{ -519, -519, -519, -519, -519}, -{ -939, -939, -939, -939, -939}, -{ -809, -809, -809, -809, -809}}, -/* GU.@C..CG */ -{{ 0, 0, 0, 0, 0}, -{ -949, -949, -949, -949, -949}, -{ -449, -449, -449, -449, -449}, -{ -939, -939, -939, -939, -939}, -{ -739, -739, -739, -739, -739}}, -/* GU.@G..CG */ -{{ 0, 0, 0, 0, 0}, -{-1029,-1029,-1029,-1029,-1029}, -{ -519, -519, -519, -519, -519}, -{ -939, -939, -939, -939, -939}, -{ -809, -809, -809, -809, -809}}, -/* GU.@U..CG */ -{{ 0, 0, 0, 0, 0}, -{-1029,-1029,-1029,-1029,-1029}, -{ -669, -669, -669, -669, -669}, -{ -939, -939, -939, -939, -939}, -{ -859, -859, -859, -859, -859}}}, -/* GU.A@..CG */ -{{{ -50, -429, -599, -599, -599}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}}, -/* GU.AA..CG */ -{{ -50, -429, -599, -599, -599}, -{-1079,-1458,-1628,-1628,-1628}, -{ -569, -948,-1118,-1118,-1118}, -{ -989,-1368,-1538,-1538,-1538}, -{ -859,-1238,-1408,-1408,-1408}}, -/* GU.AC..CG */ -{{ -50, -429, -599, -599, -599}, -{ -999,-1378,-1548,-1548,-1548}, -{ -499, -878,-1048,-1048,-1048}, -{ -989,-1368,-1538,-1538,-1538}, -{ -789,-1168,-1338,-1338,-1338}}, -/* GU.AG..CG */ -{{ -50, -429, -599, -599, -599}, -{-1079,-1458,-1628,-1628,-1628}, -{ -569, -948,-1118,-1118,-1118}, -{ -989,-1368,-1538,-1538,-1538}, -{ -859,-1238,-1408,-1408,-1408}}, -/* GU.AU..CG */ -{{ -50, -429, -599, -599, -599}, -{-1079,-1458,-1628,-1628,-1628}, -{ -719,-1098,-1268,-1268,-1268}, -{ -989,-1368,-1538,-1538,-1538}, -{ -909,-1288,-1458,-1458,-1458}}}, -/* GU.C@..CG */ -{{{ -50, -259, -239, -239, -239}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}}, -/* GU.CA..CG */ -{{ -50, -259, -239, -239, -239}, -{-1079,-1288,-1268,-1268,-1268}, -{ -569, -778, -758, -758, -758}, -{ -989,-1198,-1178,-1178,-1178}, -{ -859,-1068,-1048,-1048,-1048}}, -/* GU.CC..CG */ -{{ -50, -259, -239, -239, -239}, -{ -999,-1208,-1188,-1188,-1188}, -{ -499, -708, -688, -688, -688}, -{ -989,-1198,-1178,-1178,-1178}, -{ -789, -998, -978, -978, -978}}, -/* GU.CG..CG */ -{{ -50, -259, -239, -239, -239}, -{-1079,-1288,-1268,-1268,-1268}, -{ -569, -778, -758, -758, -758}, -{ -989,-1198,-1178,-1178,-1178}, -{ -859,-1068,-1048,-1048,-1048}}, -/* GU.CU..CG */ -{{ -50, -259, -239, -239, -239}, -{-1079,-1288,-1268,-1268,-1268}, -{ -719, -928, -908, -908, -908}, -{ -989,-1198,-1178,-1178,-1178}, -{ -909,-1118,-1098,-1098,-1098}}}, -/* GU.G@..CG */ -{{{ -50, -339, -689, -689, -689}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}}, -/* GU.GA..CG */ -{{ -50, -339, -689, -689, -689}, -{-1079,-1368,-1718,-1718,-1718}, -{ -569, -858,-1208,-1208,-1208}, -{ -989,-1278,-1628,-1628,-1628}, -{ -859,-1148,-1498,-1498,-1498}}, -/* GU.GC..CG */ -{{ -50, -339, -689, -689, -689}, -{ -999,-1288,-1638,-1638,-1638}, -{ -499, -788,-1138,-1138,-1138}, -{ -989,-1278,-1628,-1628,-1628}, -{ -789,-1078,-1428,-1428,-1428}}, -/* GU.GG..CG */ -{{ -50, -339, -689, -689, -689}, -{-1079,-1368,-1718,-1718,-1718}, -{ -569, -858,-1208,-1208,-1208}, -{ -989,-1278,-1628,-1628,-1628}, -{ -859,-1148,-1498,-1498,-1498}}, -/* GU.GU..CG */ -{{ -50, -339, -689, -689, -689}, -{-1079,-1368,-1718,-1718,-1718}, -{ -719,-1008,-1358,-1358,-1358}, -{ -989,-1278,-1628,-1628,-1628}, -{ -909,-1198,-1548,-1548,-1548}}}, -/* GU.U@..CG */ -{{{ -50, -329, -329, -329, -329}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}}, -/* GU.UA..CG */ -{{ -50, -329, -329, -329, -329}, -{-1079,-1358,-1358,-1358,-1358}, -{ -569, -848, -848, -848, -848}, -{ -989,-1268,-1268,-1268,-1268}, -{ -859,-1138,-1138,-1138,-1138}}, -/* GU.UC..CG */ -{{ -50, -329, -329, -329, -329}, -{ -999,-1278,-1278,-1278,-1278}, -{ -499, -778, -778, -778, -778}, -{ -989,-1268,-1268,-1268,-1268}, -{ -789,-1068,-1068,-1068,-1068}}, -/* GU.UG..CG */ -{{ -50, -329, -329, -329, -329}, -{-1079,-1358,-1358,-1358,-1358}, -{ -569, -848, -848, -848, -848}, -{ -989,-1268,-1268,-1268,-1268}, -{ -859,-1138,-1138,-1138,-1138}}, -/* GU.UU..CG */ -{{ -50, -329, -329, -329, -329}, -{-1079,-1358,-1358,-1358,-1358}, -{ -719, -998, -998, -998, -998}, -{ -989,-1268,-1268,-1268,-1268}, -{ -909,-1188,-1188,-1188,-1188}}}}, -/* GU.@@..GC */ -{{{{ 0, 0, 0, 0, 0}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* GU.@A..GC */ -{{ 0, 0, 0, 0, 0}, -{ -519, -519, -519, -519, -519}, -{ -719, -719, -719, -719, -719}, -{ -709, -709, -709, -709, -709}, -{ -499, -499, -499, -499, -499}}, -/* GU.@C..GC */ -{{ 0, 0, 0, 0, 0}, -{ -879, -879, -879, -879, -879}, -{ -309, -309, -309, -309, -309}, -{ -739, -739, -739, -739, -739}, -{ -499, -499, -499, -499, -499}}, -/* GU.@G..GC */ -{{ 0, 0, 0, 0, 0}, -{ -559, -559, -559, -559, -559}, -{ -309, -309, -309, -309, -309}, -{ -619, -619, -619, -619, -619}, -{ -499, -499, -499, -499, -499}}, -/* GU.@U..GC */ -{{ 0, 0, 0, 0, 0}, -{ -879, -879, -879, -879, -879}, -{ -389, -389, -389, -389, -389}, -{ -739, -739, -739, -739, -739}, -{ -569, -569, -569, -569, -569}}}, -/* GU.A@..GC */ -{{{ -50, -429, -599, -599, -599}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}}, -/* GU.AA..GC */ -{{ -50, -429, -599, -599, -599}, -{ -569, -948,-1118,-1118,-1118}, -{ -769,-1148,-1318,-1318,-1318}, -{ -759,-1138,-1308,-1308,-1308}, -{ -549, -928,-1098,-1098,-1098}}, -/* GU.AC..GC */ -{{ -50, -429, -599, -599, -599}, -{ -929,-1308,-1478,-1478,-1478}, -{ -359, -738, -908, -908, -908}, -{ -789,-1168,-1338,-1338,-1338}, -{ -549, -928,-1098,-1098,-1098}}, -/* GU.AG..GC */ -{{ -50, -429, -599, -599, -599}, -{ -609, -988,-1158,-1158,-1158}, -{ -359, -738, -908, -908, -908}, -{ -669,-1048,-1218,-1218,-1218}, -{ -549, -928,-1098,-1098,-1098}}, -/* GU.AU..GC */ -{{ -50, -429, -599, -599, -599}, -{ -929,-1308,-1478,-1478,-1478}, -{ -439, -818, -988, -988, -988}, -{ -789,-1168,-1338,-1338,-1338}, -{ -619, -998,-1168,-1168,-1168}}}, -/* GU.C@..GC */ -{{{ -50, -259, -239, -239, -239}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}}, -/* GU.CA..GC */ -{{ -50, -259, -239, -239, -239}, -{ -569, -778, -758, -758, -758}, -{ -769, -978, -958, -958, -958}, -{ -759, -968, -948, -948, -948}, -{ -549, -758, -738, -738, -738}}, -/* GU.CC..GC */ -{{ -50, -259, -239, -239, -239}, -{ -929,-1138,-1118,-1118,-1118}, -{ -359, -568, -548, -548, -548}, -{ -789, -998, -978, -978, -978}, -{ -549, -758, -738, -738, -738}}, -/* GU.CG..GC */ -{{ -50, -259, -239, -239, -239}, -{ -609, -818, -798, -798, -798}, -{ -359, -568, -548, -548, -548}, -{ -669, -878, -858, -858, -858}, -{ -549, -758, -738, -738, -738}}, -/* GU.CU..GC */ -{{ -50, -259, -239, -239, -239}, -{ -929,-1138,-1118,-1118,-1118}, -{ -439, -648, -628, -628, -628}, -{ -789, -998, -978, -978, -978}, -{ -619, -828, -808, -808, -808}}}, -/* GU.G@..GC */ -{{{ -50, -339, -689, -689, -689}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}}, -/* GU.GA..GC */ -{{ -50, -339, -689, -689, -689}, -{ -569, -858,-1208,-1208,-1208}, -{ -769,-1058,-1408,-1408,-1408}, -{ -759,-1048,-1398,-1398,-1398}, -{ -549, -838,-1188,-1188,-1188}}, -/* GU.GC..GC */ -{{ -50, -339, -689, -689, -689}, -{ -929,-1218,-1568,-1568,-1568}, -{ -359, -648, -998, -998, -998}, -{ -789,-1078,-1428,-1428,-1428}, -{ -549, -838,-1188,-1188,-1188}}, -/* GU.GG..GC */ -{{ -50, -339, -689, -689, -689}, -{ -609, -898,-1248,-1248,-1248}, -{ -359, -648, -998, -998, -998}, -{ -669, -958,-1308,-1308,-1308}, -{ -549, -838,-1188,-1188,-1188}}, -/* GU.GU..GC */ -{{ -50, -339, -689, -689, -689}, -{ -929,-1218,-1568,-1568,-1568}, -{ -439, -728,-1078,-1078,-1078}, -{ -789,-1078,-1428,-1428,-1428}, -{ -619, -908,-1258,-1258,-1258}}}, -/* GU.U@..GC */ -{{{ -50, -329, -329, -329, -329}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}}, -/* GU.UA..GC */ -{{ -50, -329, -329, -329, -329}, -{ -569, -848, -848, -848, -848}, -{ -769,-1048,-1048,-1048,-1048}, -{ -759,-1038,-1038,-1038,-1038}, -{ -549, -828, -828, -828, -828}}, -/* GU.UC..GC */ -{{ -50, -329, -329, -329, -329}, -{ -929,-1208,-1208,-1208,-1208}, -{ -359, -638, -638, -638, -638}, -{ -789,-1068,-1068,-1068,-1068}, -{ -549, -828, -828, -828, -828}}, -/* GU.UG..GC */ -{{ -50, -329, -329, -329, -329}, -{ -609, -888, -888, -888, -888}, -{ -359, -638, -638, -638, -638}, -{ -669, -948, -948, -948, -948}, -{ -549, -828, -828, -828, -828}}, -/* GU.UU..GC */ -{{ -50, -329, -329, -329, -329}, -{ -929,-1208,-1208,-1208,-1208}, -{ -439, -718, -718, -718, -718}, -{ -789,-1068,-1068,-1068,-1068}, -{ -619, -898, -898, -898, -898}}}}, -/* GU.@@..GU */ -{{{{ 0, 0, 0, 0, 0}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* GU.@A..GU */ -{{ 0, 0, 0, 0, 0}, -{ -429, -429, -429, -429, -429}, -{ -259, -259, -259, -259, -259}, -{ -339, -339, -339, -339, -339}, -{ -329, -329, -329, -329, -329}}, -/* GU.@C..GU */ -{{ 0, 0, 0, 0, 0}, -{ -599, -599, -599, -599, -599}, -{ -239, -239, -239, -239, -239}, -{ -689, -689, -689, -689, -689}, -{ -329, -329, -329, -329, -329}}, -/* GU.@G..GU */ -{{ 0, 0, 0, 0, 0}, -{ -599, -599, -599, -599, -599}, -{ -239, -239, -239, -239, -239}, -{ -689, -689, -689, -689, -689}, -{ -329, -329, -329, -329, -329}}, -/* GU.@U..GU */ -{{ 0, 0, 0, 0, 0}, -{ -599, -599, -599, -599, -599}, -{ -239, -239, -239, -239, -239}, -{ -689, -689, -689, -689, -689}, -{ -329, -329, -329, -329, -329}}}, -/* GU.A@..GU */ -{{{ -50, -429, -599, -599, -599}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}}, -/* GU.AA..GU */ -{{ -50, -429, -599, -599, -599}, -{ -479, -858,-1028,-1028,-1028}, -{ -309, -688, -858, -858, -858}, -{ -389, -768, -938, -938, -938}, -{ -379, -758, -928, -928, -928}}, -/* GU.AC..GU */ -{{ -50, -429, -599, -599, -599}, -{ -649,-1028,-1198,-1198,-1198}, -{ -289, -668, -838, -838, -838}, -{ -739,-1118,-1288,-1288,-1288}, -{ -379, -758, -928, -928, -928}}, -/* GU.AG..GU */ -{{ -50, -429, -599, -599, -599}, -{ -649,-1028,-1198,-1198,-1198}, -{ -289, -668, -838, -838, -838}, -{ -739,-1118,-1288,-1288,-1288}, -{ -379, -758, -928, -928, -928}}, -/* GU.AU..GU */ -{{ -50, -429, -599, -599, -599}, -{ -649,-1028,-1198,-1198,-1198}, -{ -289, -668, -838, -838, -838}, -{ -739,-1118,-1288,-1288,-1288}, -{ -379, -758, -928, -928, -928}}}, -/* GU.C@..GU */ -{{{ -50, -259, -239, -239, -239}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}}, -/* GU.CA..GU */ -{{ -50, -259, -239, -239, -239}, -{ -479, -688, -668, -668, -668}, -{ -309, -518, -498, -498, -498}, -{ -389, -598, -578, -578, -578}, -{ -379, -588, -568, -568, -568}}, -/* GU.CC..GU */ -{{ -50, -259, -239, -239, -239}, -{ -649, -858, -838, -838, -838}, -{ -289, -498, -478, -478, -478}, -{ -739, -948, -928, -928, -928}, -{ -379, -588, -568, -568, -568}}, -/* GU.CG..GU */ -{{ -50, -259, -239, -239, -239}, -{ -649, -858, -838, -838, -838}, -{ -289, -498, -478, -478, -478}, -{ -739, -948, -928, -928, -928}, -{ -379, -588, -568, -568, -568}}, -/* GU.CU..GU */ -{{ -50, -259, -239, -239, -239}, -{ -649, -858, -838, -838, -838}, -{ -289, -498, -478, -478, -478}, -{ -739, -948, -928, -928, -928}, -{ -379, -588, -568, -568, -568}}}, -/* GU.G@..GU */ -{{{ -50, -339, -689, -689, -689}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}}, -/* GU.GA..GU */ -{{ -50, -339, -689, -689, -689}, -{ -479, -768,-1118,-1118,-1118}, -{ -309, -598, -948, -948, -948}, -{ -389, -678,-1028,-1028,-1028}, -{ -379, -668,-1018,-1018,-1018}}, -/* GU.GC..GU */ -{{ -50, -339, -689, -689, -689}, -{ -649, -938,-1288,-1288,-1288}, -{ -289, -578, -928, -928, -928}, -{ -739,-1028,-1378,-1378,-1378}, -{ -379, -668,-1018,-1018,-1018}}, -/* GU.GG..GU */ -{{ -50, -339, -689, -689, -689}, -{ -649, -938,-1288,-1288,-1288}, -{ -289, -578, -928, -928, -928}, -{ -739,-1028,-1378,-1378,-1378}, -{ -379, -668,-1018,-1018,-1018}}, -/* GU.GU..GU */ -{{ -50, -339, -689, -689, -689}, -{ -649, -938,-1288,-1288,-1288}, -{ -289, -578, -928, -928, -928}, -{ -739,-1028,-1378,-1378,-1378}, -{ -379, -668,-1018,-1018,-1018}}}, -/* GU.U@..GU */ -{{{ -50, -329, -329, -329, -329}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}}, -/* GU.UA..GU */ -{{ -50, -329, -329, -329, -329}, -{ -479, -758, -758, -758, -758}, -{ -309, -588, -588, -588, -588}, -{ -389, -668, -668, -668, -668}, -{ -379, -658, -658, -658, -658}}, -/* GU.UC..GU */ -{{ -50, -329, -329, -329, -329}, -{ -649, -928, -928, -928, -928}, -{ -289, -568, -568, -568, -568}, -{ -739,-1018,-1018,-1018,-1018}, -{ -379, -658, -658, -658, -658}}, -/* GU.UG..GU */ -{{ -50, -329, -329, -329, -329}, -{ -649, -928, -928, -928, -928}, -{ -289, -568, -568, -568, -568}, -{ -739,-1018,-1018,-1018,-1018}, -{ -379, -658, -658, -658, -658}}, -/* GU.UU..GU */ -{{ -50, -329, -329, -329, -329}, -{ -649, -928, -928, -928, -928}, -{ -289, -568, -568, -568, -568}, -{ -739,-1018,-1018,-1018,-1018}, -{ -379, -658, -658, -658, -658}}}}, -/* GU.@@..UG */ -{{{{ 0, 0, 0, 0, 0}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* GU.@A..UG */ -{{ 0, 0, 0, 0, 0}, -{ -719, -719, -719, -719, -719}, -{ -479, -479, -479, -479, -479}, -{ -659, -659, -659, -659, -659}, -{ -549, -549, -549, -549, -549}}, -/* GU.@C..UG */ -{{ 0, 0, 0, 0, 0}, -{ -789, -789, -789, -789, -789}, -{ -479, -479, -479, -479, -479}, -{ -809, -809, -809, -809, -809}, -{ -439, -439, -439, -439, -439}}, -/* GU.@G..UG */ -{{ 0, 0, 0, 0, 0}, -{ -959, -959, -959, -959, -959}, -{ -359, -359, -359, -359, -359}, -{ -919, -919, -919, -919, -919}, -{ -549, -549, -549, -549, -549}}, -/* GU.@U..UG */ -{{ 0, 0, 0, 0, 0}, -{ -809, -809, -809, -809, -809}, -{ -479, -479, -479, -479, -479}, -{ -809, -809, -809, -809, -809}, -{ -359, -359, -359, -359, -359}}}, -/* GU.A@..UG */ -{{{ -50, -429, -599, -599, -599}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}}, -/* GU.AA..UG */ -{{ -50, -429, -599, -599, -599}, -{ -769,-1148,-1318,-1318,-1318}, -{ -529, -908,-1078,-1078,-1078}, -{ -709,-1088,-1258,-1258,-1258}, -{ -599, -978,-1148,-1148,-1148}}, -/* GU.AC..UG */ -{{ -50, -429, -599, -599, -599}, -{ -839,-1218,-1388,-1388,-1388}, -{ -529, -908,-1078,-1078,-1078}, -{ -859,-1238,-1408,-1408,-1408}, -{ -489, -868,-1038,-1038,-1038}}, -/* GU.AG..UG */ -{{ -50, -429, -599, -599, -599}, -{-1009,-1388,-1558,-1558,-1558}, -{ -409, -788, -958, -958, -958}, -{ -969,-1348,-1518,-1518,-1518}, -{ -599, -978,-1148,-1148,-1148}}, -/* GU.AU..UG */ -{{ -50, -429, -599, -599, -599}, -{ -859,-1238,-1408,-1408,-1408}, -{ -529, -908,-1078,-1078,-1078}, -{ -859,-1238,-1408,-1408,-1408}, -{ -409, -788, -958, -958, -958}}}, -/* GU.C@..UG */ -{{{ -50, -259, -239, -239, -239}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}}, -/* GU.CA..UG */ -{{ -50, -259, -239, -239, -239}, -{ -769, -978, -958, -958, -958}, -{ -529, -738, -718, -718, -718}, -{ -709, -918, -898, -898, -898}, -{ -599, -808, -788, -788, -788}}, -/* GU.CC..UG */ -{{ -50, -259, -239, -239, -239}, -{ -839,-1048,-1028,-1028,-1028}, -{ -529, -738, -718, -718, -718}, -{ -859,-1068,-1048,-1048,-1048}, -{ -489, -698, -678, -678, -678}}, -/* GU.CG..UG */ -{{ -50, -259, -239, -239, -239}, -{-1009,-1218,-1198,-1198,-1198}, -{ -409, -618, -598, -598, -598}, -{ -969,-1178,-1158,-1158,-1158}, -{ -599, -808, -788, -788, -788}}, -/* GU.CU..UG */ -{{ -50, -259, -239, -239, -239}, -{ -859,-1068,-1048,-1048,-1048}, -{ -529, -738, -718, -718, -718}, -{ -859,-1068,-1048,-1048,-1048}, -{ -409, -618, -598, -598, -598}}}, -/* GU.G@..UG */ -{{{ -50, -339, -689, -689, -689}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}}, -/* GU.GA..UG */ -{{ -50, -339, -689, -689, -689}, -{ -769,-1058,-1408,-1408,-1408}, -{ -529, -818,-1168,-1168,-1168}, -{ -709, -998,-1348,-1348,-1348}, -{ -599, -888,-1238,-1238,-1238}}, -/* GU.GC..UG */ -{{ -50, -339, -689, -689, -689}, -{ -839,-1128,-1478,-1478,-1478}, -{ -529, -818,-1168,-1168,-1168}, -{ -859,-1148,-1498,-1498,-1498}, -{ -489, -778,-1128,-1128,-1128}}, -/* GU.GG..UG */ -{{ -50, -339, -689, -689, -689}, -{-1009,-1298,-1648,-1648,-1648}, -{ -409, -698,-1048,-1048,-1048}, -{ -969,-1258,-1608,-1608,-1608}, -{ -599, -888,-1238,-1238,-1238}}, -/* GU.GU..UG */ -{{ -50, -339, -689, -689, -689}, -{ -859,-1148,-1498,-1498,-1498}, -{ -529, -818,-1168,-1168,-1168}, -{ -859,-1148,-1498,-1498,-1498}, -{ -409, -698,-1048,-1048,-1048}}}, -/* GU.U@..UG */ -{{{ -50, -329, -329, -329, -329}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}}, -/* GU.UA..UG */ -{{ -50, -329, -329, -329, -329}, -{ -769,-1048,-1048,-1048,-1048}, -{ -529, -808, -808, -808, -808}, -{ -709, -988, -988, -988, -988}, -{ -599, -878, -878, -878, -878}}, -/* GU.UC..UG */ -{{ -50, -329, -329, -329, -329}, -{ -839,-1118,-1118,-1118,-1118}, -{ -529, -808, -808, -808, -808}, -{ -859,-1138,-1138,-1138,-1138}, -{ -489, -768, -768, -768, -768}}, -/* GU.UG..UG */ -{{ -50, -329, -329, -329, -329}, -{-1009,-1288,-1288,-1288,-1288}, -{ -409, -688, -688, -688, -688}, -{ -969,-1248,-1248,-1248,-1248}, -{ -599, -878, -878, -878, -878}}, -/* GU.UU..UG */ -{{ -50, -329, -329, -329, -329}, -{ -859,-1138,-1138,-1138,-1138}, -{ -529, -808, -808, -808, -808}, -{ -859,-1138,-1138,-1138,-1138}, -{ -409, -688, -688, -688, -688}}}}, -/* GU.@@..AU */ -{{{{ 0, 0, 0, 0, 0}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* GU.@A..AU */ -{{ 0, 0, 0, 0, 0}, -{ -429, -429, -429, -429, -429}, -{ -259, -259, -259, -259, -259}, -{ -339, -339, -339, -339, -339}, -{ -329, -329, -329, -329, -329}}, -/* GU.@C..AU */ -{{ 0, 0, 0, 0, 0}, -{ -599, -599, -599, -599, -599}, -{ -239, -239, -239, -239, -239}, -{ -689, -689, -689, -689, -689}, -{ -329, -329, -329, -329, -329}}, -/* GU.@G..AU */ -{{ 0, 0, 0, 0, 0}, -{ -599, -599, -599, -599, -599}, -{ -239, -239, -239, -239, -239}, -{ -689, -689, -689, -689, -689}, -{ -329, -329, -329, -329, -329}}, -/* GU.@U..AU */ -{{ 0, 0, 0, 0, 0}, -{ -599, -599, -599, -599, -599}, -{ -239, -239, -239, -239, -239}, -{ -689, -689, -689, -689, -689}, -{ -329, -329, -329, -329, -329}}}, -/* GU.A@..AU */ -{{{ -50, -429, -599, -599, -599}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}}, -/* GU.AA..AU */ -{{ -50, -429, -599, -599, -599}, -{ -479, -858,-1028,-1028,-1028}, -{ -309, -688, -858, -858, -858}, -{ -389, -768, -938, -938, -938}, -{ -379, -758, -928, -928, -928}}, -/* GU.AC..AU */ -{{ -50, -429, -599, -599, -599}, -{ -649,-1028,-1198,-1198,-1198}, -{ -289, -668, -838, -838, -838}, -{ -739,-1118,-1288,-1288,-1288}, -{ -379, -758, -928, -928, -928}}, -/* GU.AG..AU */ -{{ -50, -429, -599, -599, -599}, -{ -649,-1028,-1198,-1198,-1198}, -{ -289, -668, -838, -838, -838}, -{ -739,-1118,-1288,-1288,-1288}, -{ -379, -758, -928, -928, -928}}, -/* GU.AU..AU */ -{{ -50, -429, -599, -599, -599}, -{ -649,-1028,-1198,-1198,-1198}, -{ -289, -668, -838, -838, -838}, -{ -739,-1118,-1288,-1288,-1288}, -{ -379, -758, -928, -928, -928}}}, -/* GU.C@..AU */ -{{{ -50, -259, -239, -239, -239}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}}, -/* GU.CA..AU */ -{{ -50, -259, -239, -239, -239}, -{ -479, -688, -668, -668, -668}, -{ -309, -518, -498, -498, -498}, -{ -389, -598, -578, -578, -578}, -{ -379, -588, -568, -568, -568}}, -/* GU.CC..AU */ -{{ -50, -259, -239, -239, -239}, -{ -649, -858, -838, -838, -838}, -{ -289, -498, -478, -478, -478}, -{ -739, -948, -928, -928, -928}, -{ -379, -588, -568, -568, -568}}, -/* GU.CG..AU */ -{{ -50, -259, -239, -239, -239}, -{ -649, -858, -838, -838, -838}, -{ -289, -498, -478, -478, -478}, -{ -739, -948, -928, -928, -928}, -{ -379, -588, -568, -568, -568}}, -/* GU.CU..AU */ -{{ -50, -259, -239, -239, -239}, -{ -649, -858, -838, -838, -838}, -{ -289, -498, -478, -478, -478}, -{ -739, -948, -928, -928, -928}, -{ -379, -588, -568, -568, -568}}}, -/* GU.G@..AU */ -{{{ -50, -339, -689, -689, -689}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}}, -/* GU.GA..AU */ -{{ -50, -339, -689, -689, -689}, -{ -479, -768,-1118,-1118,-1118}, -{ -309, -598, -948, -948, -948}, -{ -389, -678,-1028,-1028,-1028}, -{ -379, -668,-1018,-1018,-1018}}, -/* GU.GC..AU */ -{{ -50, -339, -689, -689, -689}, -{ -649, -938,-1288,-1288,-1288}, -{ -289, -578, -928, -928, -928}, -{ -739,-1028,-1378,-1378,-1378}, -{ -379, -668,-1018,-1018,-1018}}, -/* GU.GG..AU */ -{{ -50, -339, -689, -689, -689}, -{ -649, -938,-1288,-1288,-1288}, -{ -289, -578, -928, -928, -928}, -{ -739,-1028,-1378,-1378,-1378}, -{ -379, -668,-1018,-1018,-1018}}, -/* GU.GU..AU */ -{{ -50, -339, -689, -689, -689}, -{ -649, -938,-1288,-1288,-1288}, -{ -289, -578, -928, -928, -928}, -{ -739,-1028,-1378,-1378,-1378}, -{ -379, -668,-1018,-1018,-1018}}}, -/* GU.U@..AU */ -{{{ -50, -329, -329, -329, -329}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}}, -/* GU.UA..AU */ -{{ -50, -329, -329, -329, -329}, -{ -479, -758, -758, -758, -758}, -{ -309, -588, -588, -588, -588}, -{ -389, -668, -668, -668, -668}, -{ -379, -658, -658, -658, -658}}, -/* GU.UC..AU */ -{{ -50, -329, -329, -329, -329}, -{ -649, -928, -928, -928, -928}, -{ -289, -568, -568, -568, -568}, -{ -739,-1018,-1018,-1018,-1018}, -{ -379, -658, -658, -658, -658}}, -/* GU.UG..AU */ -{{ -50, -329, -329, -329, -329}, -{ -649, -928, -928, -928, -928}, -{ -289, -568, -568, -568, -568}, -{ -739,-1018,-1018,-1018,-1018}, -{ -379, -658, -658, -658, -658}}, -/* GU.UU..AU */ -{{ -50, -329, -329, -329, -329}, -{ -649, -928, -928, -928, -928}, -{ -289, -568, -568, -568, -568}, -{ -739,-1018,-1018,-1018,-1018}, -{ -379, -658, -658, -658, -658}}}}, -/* GU.@@..UA */ -{{{{ 0, 0, 0, 0, 0}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* GU.@A..UA */ -{{ 0, 0, 0, 0, 0}, -{ -399, -399, -399, -399, -399}, -{ -429, -429, -429, -429, -429}, -{ -379, -379, -379, -379, -379}, -{ -279, -279, -279, -279, -279}}, -/* GU.@C..UA */ -{{ 0, 0, 0, 0, 0}, -{ -629, -629, -629, -629, -629}, -{ -509, -509, -509, -509, -509}, -{ -679, -679, -679, -679, -679}, -{ -139, -139, -139, -139, -139}}, -/* GU.@G..UA */ -{{ 0, 0, 0, 0, 0}, -{ -889, -889, -889, -889, -889}, -{ -199, -199, -199, -199, -199}, -{ -889, -889, -889, -889, -889}, -{ -279, -279, -279, -279, -279}}, -/* GU.@U..UA */ -{{ 0, 0, 0, 0, 0}, -{ -589, -589, -589, -589, -589}, -{ -179, -179, -179, -179, -179}, -{ -679, -679, -679, -679, -679}, -{ -140, -140, -140, -140, -140}}}, -/* GU.A@..UA */ -{{{ -50, -429, -599, -599, -599}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}}, -/* GU.AA..UA */ -{{ -50, -429, -599, -599, -599}, -{ -449, -828, -998, -998, -998}, -{ -479, -858,-1028,-1028,-1028}, -{ -429, -808, -978, -978, -978}, -{ -329, -708, -878, -878, -878}}, -/* GU.AC..UA */ -{{ -50, -429, -599, -599, -599}, -{ -679,-1058,-1228,-1228,-1228}, -{ -559, -938,-1108,-1108,-1108}, -{ -729,-1108,-1278,-1278,-1278}, -{ -189, -568, -738, -738, -738}}, -/* GU.AG..UA */ -{{ -50, -429, -599, -599, -599}, -{ -939,-1318,-1488,-1488,-1488}, -{ -249, -628, -798, -798, -798}, -{ -939,-1318,-1488,-1488,-1488}, -{ -329, -708, -878, -878, -878}}, -/* GU.AU..UA */ -{{ -50, -429, -599, -599, -599}, -{ -639,-1018,-1188,-1188,-1188}, -{ -229, -608, -778, -778, -778}, -{ -729,-1108,-1278,-1278,-1278}, -{ -190, -569, -739, -739, -739}}}, -/* GU.C@..UA */ -{{{ -50, -259, -239, -239, -239}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}}, -/* GU.CA..UA */ -{{ -50, -259, -239, -239, -239}, -{ -449, -658, -638, -638, -638}, -{ -479, -688, -668, -668, -668}, -{ -429, -638, -618, -618, -618}, -{ -329, -538, -518, -518, -518}}, -/* GU.CC..UA */ -{{ -50, -259, -239, -239, -239}, -{ -679, -888, -868, -868, -868}, -{ -559, -768, -748, -748, -748}, -{ -729, -938, -918, -918, -918}, -{ -189, -398, -378, -378, -378}}, -/* GU.CG..UA */ -{{ -50, -259, -239, -239, -239}, -{ -939,-1148,-1128,-1128,-1128}, -{ -249, -458, -438, -438, -438}, -{ -939,-1148,-1128,-1128,-1128}, -{ -329, -538, -518, -518, -518}}, -/* GU.CU..UA */ -{{ -50, -259, -239, -239, -239}, -{ -639, -848, -828, -828, -828}, -{ -229, -438, -418, -418, -418}, -{ -729, -938, -918, -918, -918}, -{ -190, -399, -379, -379, -379}}}, -/* GU.G@..UA */ -{{{ -50, -339, -689, -689, -689}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}}, -/* GU.GA..UA */ -{{ -50, -339, -689, -689, -689}, -{ -449, -738,-1088,-1088,-1088}, -{ -479, -768,-1118,-1118,-1118}, -{ -429, -718,-1068,-1068,-1068}, -{ -329, -618, -968, -968, -968}}, -/* GU.GC..UA */ -{{ -50, -339, -689, -689, -689}, -{ -679, -968,-1318,-1318,-1318}, -{ -559, -848,-1198,-1198,-1198}, -{ -729,-1018,-1368,-1368,-1368}, -{ -189, -478, -828, -828, -828}}, -/* GU.GG..UA */ -{{ -50, -339, -689, -689, -689}, -{ -939,-1228,-1578,-1578,-1578}, -{ -249, -538, -888, -888, -888}, -{ -939,-1228,-1578,-1578,-1578}, -{ -329, -618, -968, -968, -968}}, -/* GU.GU..UA */ -{{ -50, -339, -689, -689, -689}, -{ -639, -928,-1278,-1278,-1278}, -{ -229, -518, -868, -868, -868}, -{ -729,-1018,-1368,-1368,-1368}, -{ -190, -479, -829, -829, -829}}}, -/* GU.U@..UA */ -{{{ -50, -329, -329, -329, -329}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}}, -/* GU.UA..UA */ -{{ -50, -329, -329, -329, -329}, -{ -449, -728, -728, -728, -728}, -{ -479, -758, -758, -758, -758}, -{ -429, -708, -708, -708, -708}, -{ -329, -608, -608, -608, -608}}, -/* GU.UC..UA */ -{{ -50, -329, -329, -329, -329}, -{ -679, -958, -958, -958, -958}, -{ -559, -838, -838, -838, -838}, -{ -729,-1008,-1008,-1008,-1008}, -{ -189, -468, -468, -468, -468}}, -/* GU.UG..UA */ -{{ -50, -329, -329, -329, -329}, -{ -939,-1218,-1218,-1218,-1218}, -{ -249, -528, -528, -528, -528}, -{ -939,-1218,-1218,-1218,-1218}, -{ -329, -608, -608, -608, -608}}, -/* GU.UU..UA */ -{{ -50, -329, -329, -329, -329}, -{ -639, -918, -918, -918, -918}, -{ -229, -508, -508, -508, -508}, -{ -729,-1008,-1008,-1008,-1008}, -{ -190, -469, -469, -469, -469}}}}, -/* GU.@@.. @ */ -{{{{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* GU.@A.. @ */ -{{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* GU.@C.. @ */ -{{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* GU.@G.. @ */ -{{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* GU.@U.. @ */ -{{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}}, -/* GU.A@.. @ */ -{{{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}}, -/* GU.AA.. @ */ -{{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}}, -/* GU.AC.. @ */ -{{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}}, -/* GU.AG.. @ */ -{{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}}, -/* GU.AU.. @ */ -{{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}}}, -/* GU.C@.. @ */ -{{{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}}, -/* GU.CA.. @ */ -{{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}}, -/* GU.CC.. @ */ -{{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}}, -/* GU.CG.. @ */ -{{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}}, -/* GU.CU.. @ */ -{{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}}}, -/* GU.G@.. @ */ -{{{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}}, -/* GU.GA.. @ */ -{{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}}, -/* GU.GC.. @ */ -{{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}}, -/* GU.GG.. @ */ -{{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}}, -/* GU.GU.. @ */ -{{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}}}, -/* GU.U@.. @ */ -{{{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}}, -/* GU.UA.. @ */ -{{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}}, -/* GU.UC.. @ */ -{{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}}, -/* GU.UG.. @ */ -{{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}}, -/* GU.UU.. @ */ -{{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}}}}}, -{ /* noPair */ {{{{0}}}}, -/* UG.@@..CG */ -{{{{ 0, 0, 0, 0, 0}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* UG.@A..CG */ -{{ 0, 0, 0, 0, 0}, -{-1029,-1029,-1029,-1029,-1029}, -{ -519, -519, -519, -519, -519}, -{ -939, -939, -939, -939, -939}, -{ -809, -809, -809, -809, -809}}, -/* UG.@C..CG */ -{{ 0, 0, 0, 0, 0}, -{ -949, -949, -949, -949, -949}, -{ -449, -449, -449, -449, -449}, -{ -939, -939, -939, -939, -939}, -{ -739, -739, -739, -739, -739}}, -/* UG.@G..CG */ -{{ 0, 0, 0, 0, 0}, -{-1029,-1029,-1029,-1029,-1029}, -{ -519, -519, -519, -519, -519}, -{ -939, -939, -939, -939, -939}, -{ -809, -809, -809, -809, -809}}, -/* UG.@U..CG */ -{{ 0, 0, 0, 0, 0}, -{-1029,-1029,-1029,-1029,-1029}, -{ -669, -669, -669, -669, -669}, -{ -939, -939, -939, -939, -939}, -{ -859, -859, -859, -859, -859}}}, -/* UG.A@..CG */ -{{{ -50, -719, -789, -959, -809}, -{ -100, -769, -839,-1009, -859}, -{ -100, -769, -839,-1009, -859}, -{ -100, -769, -839,-1009, -859}, -{ -100, -769, -839,-1009, -859}}, -/* UG.AA..CG */ -{{ -50, -719, -789, -959, -809}, -{-1079,-1748,-1818,-1988,-1838}, -{ -569,-1238,-1308,-1478,-1328}, -{ -989,-1658,-1728,-1898,-1748}, -{ -859,-1528,-1598,-1768,-1618}}, -/* UG.AC..CG */ -{{ -50, -719, -789, -959, -809}, -{ -999,-1668,-1738,-1908,-1758}, -{ -499,-1168,-1238,-1408,-1258}, -{ -989,-1658,-1728,-1898,-1748}, -{ -789,-1458,-1528,-1698,-1548}}, -/* UG.AG..CG */ -{{ -50, -719, -789, -959, -809}, -{-1079,-1748,-1818,-1988,-1838}, -{ -569,-1238,-1308,-1478,-1328}, -{ -989,-1658,-1728,-1898,-1748}, -{ -859,-1528,-1598,-1768,-1618}}, -/* UG.AU..CG */ -{{ -50, -719, -789, -959, -809}, -{-1079,-1748,-1818,-1988,-1838}, -{ -719,-1388,-1458,-1628,-1478}, -{ -989,-1658,-1728,-1898,-1748}, -{ -909,-1578,-1648,-1818,-1668}}}, -/* UG.C@..CG */ -{{{ -50, -479, -479, -359, -479}, -{ -100, -529, -529, -409, -529}, -{ -100, -529, -529, -409, -529}, -{ -100, -529, -529, -409, -529}, -{ -100, -529, -529, -409, -529}}, -/* UG.CA..CG */ -{{ -50, -479, -479, -359, -479}, -{-1079,-1508,-1508,-1388,-1508}, -{ -569, -998, -998, -878, -998}, -{ -989,-1418,-1418,-1298,-1418}, -{ -859,-1288,-1288,-1168,-1288}}, -/* UG.CC..CG */ -{{ -50, -479, -479, -359, -479}, -{ -999,-1428,-1428,-1308,-1428}, -{ -499, -928, -928, -808, -928}, -{ -989,-1418,-1418,-1298,-1418}, -{ -789,-1218,-1218,-1098,-1218}}, -/* UG.CG..CG */ -{{ -50, -479, -479, -359, -479}, -{-1079,-1508,-1508,-1388,-1508}, -{ -569, -998, -998, -878, -998}, -{ -989,-1418,-1418,-1298,-1418}, -{ -859,-1288,-1288,-1168,-1288}}, -/* UG.CU..CG */ -{{ -50, -479, -479, -359, -479}, -{-1079,-1508,-1508,-1388,-1508}, -{ -719,-1148,-1148,-1028,-1148}, -{ -989,-1418,-1418,-1298,-1418}, -{ -909,-1338,-1338,-1218,-1338}}}, -/* UG.G@..CG */ -{{{ -50, -659, -809, -919, -809}, -{ -100, -709, -859, -969, -859}, -{ -100, -709, -859, -969, -859}, -{ -100, -709, -859, -969, -859}, -{ -100, -709, -859, -969, -859}}, -/* UG.GA..CG */ -{{ -50, -659, -809, -919, -809}, -{-1079,-1688,-1838,-1948,-1838}, -{ -569,-1178,-1328,-1438,-1328}, -{ -989,-1598,-1748,-1858,-1748}, -{ -859,-1468,-1618,-1728,-1618}}, -/* UG.GC..CG */ -{{ -50, -659, -809, -919, -809}, -{ -999,-1608,-1758,-1868,-1758}, -{ -499,-1108,-1258,-1368,-1258}, -{ -989,-1598,-1748,-1858,-1748}, -{ -789,-1398,-1548,-1658,-1548}}, -/* UG.GG..CG */ -{{ -50, -659, -809, -919, -809}, -{-1079,-1688,-1838,-1948,-1838}, -{ -569,-1178,-1328,-1438,-1328}, -{ -989,-1598,-1748,-1858,-1748}, -{ -859,-1468,-1618,-1728,-1618}}, -/* UG.GU..CG */ -{{ -50, -659, -809, -919, -809}, -{-1079,-1688,-1838,-1948,-1838}, -{ -719,-1328,-1478,-1588,-1478}, -{ -989,-1598,-1748,-1858,-1748}, -{ -909,-1518,-1668,-1778,-1668}}}, -/* UG.U@..CG */ -{{{ -50, -549, -439, -549, -359}, -{ -100, -599, -489, -599, -409}, -{ -100, -599, -489, -599, -409}, -{ -100, -599, -489, -599, -409}, -{ -100, -599, -489, -599, -409}}, -/* UG.UA..CG */ -{{ -50, -549, -439, -549, -359}, -{-1079,-1578,-1468,-1578,-1388}, -{ -569,-1068, -958,-1068, -878}, -{ -989,-1488,-1378,-1488,-1298}, -{ -859,-1358,-1248,-1358,-1168}}, -/* UG.UC..CG */ -{{ -50, -549, -439, -549, -359}, -{ -999,-1498,-1388,-1498,-1308}, -{ -499, -998, -888, -998, -808}, -{ -989,-1488,-1378,-1488,-1298}, -{ -789,-1288,-1178,-1288,-1098}}, -/* UG.UG..CG */ -{{ -50, -549, -439, -549, -359}, -{-1079,-1578,-1468,-1578,-1388}, -{ -569,-1068, -958,-1068, -878}, -{ -989,-1488,-1378,-1488,-1298}, -{ -859,-1358,-1248,-1358,-1168}}, -/* UG.UU..CG */ -{{ -50, -549, -439, -549, -359}, -{-1079,-1578,-1468,-1578,-1388}, -{ -719,-1218,-1108,-1218,-1028}, -{ -989,-1488,-1378,-1488,-1298}, -{ -909,-1408,-1298,-1408,-1218}}}}, -/* UG.@@..GC */ -{{{{ 0, 0, 0, 0, 0}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* UG.@A..GC */ -{{ 0, 0, 0, 0, 0}, -{ -519, -519, -519, -519, -519}, -{ -719, -719, -719, -719, -719}, -{ -709, -709, -709, -709, -709}, -{ -499, -499, -499, -499, -499}}, -/* UG.@C..GC */ -{{ 0, 0, 0, 0, 0}, -{ -879, -879, -879, -879, -879}, -{ -309, -309, -309, -309, -309}, -{ -739, -739, -739, -739, -739}, -{ -499, -499, -499, -499, -499}}, -/* UG.@G..GC */ -{{ 0, 0, 0, 0, 0}, -{ -559, -559, -559, -559, -559}, -{ -309, -309, -309, -309, -309}, -{ -619, -619, -619, -619, -619}, -{ -499, -499, -499, -499, -499}}, -/* UG.@U..GC */ -{{ 0, 0, 0, 0, 0}, -{ -879, -879, -879, -879, -879}, -{ -389, -389, -389, -389, -389}, -{ -739, -739, -739, -739, -739}, -{ -569, -569, -569, -569, -569}}}, -/* UG.A@..GC */ -{{{ -50, -719, -789, -959, -809}, -{ -100, -769, -839,-1009, -859}, -{ -100, -769, -839,-1009, -859}, -{ -100, -769, -839,-1009, -859}, -{ -100, -769, -839,-1009, -859}}, -/* UG.AA..GC */ -{{ -50, -719, -789, -959, -809}, -{ -569,-1238,-1308,-1478,-1328}, -{ -769,-1438,-1508,-1678,-1528}, -{ -759,-1428,-1498,-1668,-1518}, -{ -549,-1218,-1288,-1458,-1308}}, -/* UG.AC..GC */ -{{ -50, -719, -789, -959, -809}, -{ -929,-1598,-1668,-1838,-1688}, -{ -359,-1028,-1098,-1268,-1118}, -{ -789,-1458,-1528,-1698,-1548}, -{ -549,-1218,-1288,-1458,-1308}}, -/* UG.AG..GC */ -{{ -50, -719, -789, -959, -809}, -{ -609,-1278,-1348,-1518,-1368}, -{ -359,-1028,-1098,-1268,-1118}, -{ -669,-1338,-1408,-1578,-1428}, -{ -549,-1218,-1288,-1458,-1308}}, -/* UG.AU..GC */ -{{ -50, -719, -789, -959, -809}, -{ -929,-1598,-1668,-1838,-1688}, -{ -439,-1108,-1178,-1348,-1198}, -{ -789,-1458,-1528,-1698,-1548}, -{ -619,-1288,-1358,-1528,-1378}}}, -/* UG.C@..GC */ -{{{ -50, -479, -479, -359, -479}, -{ -100, -529, -529, -409, -529}, -{ -100, -529, -529, -409, -529}, -{ -100, -529, -529, -409, -529}, -{ -100, -529, -529, -409, -529}}, -/* UG.CA..GC */ -{{ -50, -479, -479, -359, -479}, -{ -569, -998, -998, -878, -998}, -{ -769,-1198,-1198,-1078,-1198}, -{ -759,-1188,-1188,-1068,-1188}, -{ -549, -978, -978, -858, -978}}, -/* UG.CC..GC */ -{{ -50, -479, -479, -359, -479}, -{ -929,-1358,-1358,-1238,-1358}, -{ -359, -788, -788, -668, -788}, -{ -789,-1218,-1218,-1098,-1218}, -{ -549, -978, -978, -858, -978}}, -/* UG.CG..GC */ -{{ -50, -479, -479, -359, -479}, -{ -609,-1038,-1038, -918,-1038}, -{ -359, -788, -788, -668, -788}, -{ -669,-1098,-1098, -978,-1098}, -{ -549, -978, -978, -858, -978}}, -/* UG.CU..GC */ -{{ -50, -479, -479, -359, -479}, -{ -929,-1358,-1358,-1238,-1358}, -{ -439, -868, -868, -748, -868}, -{ -789,-1218,-1218,-1098,-1218}, -{ -619,-1048,-1048, -928,-1048}}}, -/* UG.G@..GC */ -{{{ -50, -659, -809, -919, -809}, -{ -100, -709, -859, -969, -859}, -{ -100, -709, -859, -969, -859}, -{ -100, -709, -859, -969, -859}, -{ -100, -709, -859, -969, -859}}, -/* UG.GA..GC */ -{{ -50, -659, -809, -919, -809}, -{ -569,-1178,-1328,-1438,-1328}, -{ -769,-1378,-1528,-1638,-1528}, -{ -759,-1368,-1518,-1628,-1518}, -{ -549,-1158,-1308,-1418,-1308}}, -/* UG.GC..GC */ -{{ -50, -659, -809, -919, -809}, -{ -929,-1538,-1688,-1798,-1688}, -{ -359, -968,-1118,-1228,-1118}, -{ -789,-1398,-1548,-1658,-1548}, -{ -549,-1158,-1308,-1418,-1308}}, -/* UG.GG..GC */ -{{ -50, -659, -809, -919, -809}, -{ -609,-1218,-1368,-1478,-1368}, -{ -359, -968,-1118,-1228,-1118}, -{ -669,-1278,-1428,-1538,-1428}, -{ -549,-1158,-1308,-1418,-1308}}, -/* UG.GU..GC */ -{{ -50, -659, -809, -919, -809}, -{ -929,-1538,-1688,-1798,-1688}, -{ -439,-1048,-1198,-1308,-1198}, -{ -789,-1398,-1548,-1658,-1548}, -{ -619,-1228,-1378,-1488,-1378}}}, -/* UG.U@..GC */ -{{{ -50, -549, -439, -549, -359}, -{ -100, -599, -489, -599, -409}, -{ -100, -599, -489, -599, -409}, -{ -100, -599, -489, -599, -409}, -{ -100, -599, -489, -599, -409}}, -/* UG.UA..GC */ -{{ -50, -549, -439, -549, -359}, -{ -569,-1068, -958,-1068, -878}, -{ -769,-1268,-1158,-1268,-1078}, -{ -759,-1258,-1148,-1258,-1068}, -{ -549,-1048, -938,-1048, -858}}, -/* UG.UC..GC */ -{{ -50, -549, -439, -549, -359}, -{ -929,-1428,-1318,-1428,-1238}, -{ -359, -858, -748, -858, -668}, -{ -789,-1288,-1178,-1288,-1098}, -{ -549,-1048, -938,-1048, -858}}, -/* UG.UG..GC */ -{{ -50, -549, -439, -549, -359}, -{ -609,-1108, -998,-1108, -918}, -{ -359, -858, -748, -858, -668}, -{ -669,-1168,-1058,-1168, -978}, -{ -549,-1048, -938,-1048, -858}}, -/* UG.UU..GC */ -{{ -50, -549, -439, -549, -359}, -{ -929,-1428,-1318,-1428,-1238}, -{ -439, -938, -828, -938, -748}, -{ -789,-1288,-1178,-1288,-1098}, -{ -619,-1118,-1008,-1118, -928}}}}, -/* UG.@@..GU */ -{{{{ 0, 0, 0, 0, 0}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* UG.@A..GU */ -{{ 0, 0, 0, 0, 0}, -{ -429, -429, -429, -429, -429}, -{ -259, -259, -259, -259, -259}, -{ -339, -339, -339, -339, -339}, -{ -329, -329, -329, -329, -329}}, -/* UG.@C..GU */ -{{ 0, 0, 0, 0, 0}, -{ -599, -599, -599, -599, -599}, -{ -239, -239, -239, -239, -239}, -{ -689, -689, -689, -689, -689}, -{ -329, -329, -329, -329, -329}}, -/* UG.@G..GU */ -{{ 0, 0, 0, 0, 0}, -{ -599, -599, -599, -599, -599}, -{ -239, -239, -239, -239, -239}, -{ -689, -689, -689, -689, -689}, -{ -329, -329, -329, -329, -329}}, -/* UG.@U..GU */ -{{ 0, 0, 0, 0, 0}, -{ -599, -599, -599, -599, -599}, -{ -239, -239, -239, -239, -239}, -{ -689, -689, -689, -689, -689}, -{ -329, -329, -329, -329, -329}}}, -/* UG.A@..GU */ -{{{ -50, -719, -789, -959, -809}, -{ -100, -769, -839,-1009, -859}, -{ -100, -769, -839,-1009, -859}, -{ -100, -769, -839,-1009, -859}, -{ -100, -769, -839,-1009, -859}}, -/* UG.AA..GU */ -{{ -50, -719, -789, -959, -809}, -{ -479,-1148,-1218,-1388,-1238}, -{ -309, -978,-1048,-1218,-1068}, -{ -389,-1058,-1128,-1298,-1148}, -{ -379,-1048,-1118,-1288,-1138}}, -/* UG.AC..GU */ -{{ -50, -719, -789, -959, -809}, -{ -649,-1318,-1388,-1558,-1408}, -{ -289, -958,-1028,-1198,-1048}, -{ -739,-1408,-1478,-1648,-1498}, -{ -379,-1048,-1118,-1288,-1138}}, -/* UG.AG..GU */ -{{ -50, -719, -789, -959, -809}, -{ -649,-1318,-1388,-1558,-1408}, -{ -289, -958,-1028,-1198,-1048}, -{ -739,-1408,-1478,-1648,-1498}, -{ -379,-1048,-1118,-1288,-1138}}, -/* UG.AU..GU */ -{{ -50, -719, -789, -959, -809}, -{ -649,-1318,-1388,-1558,-1408}, -{ -289, -958,-1028,-1198,-1048}, -{ -739,-1408,-1478,-1648,-1498}, -{ -379,-1048,-1118,-1288,-1138}}}, -/* UG.C@..GU */ -{{{ -50, -479, -479, -359, -479}, -{ -100, -529, -529, -409, -529}, -{ -100, -529, -529, -409, -529}, -{ -100, -529, -529, -409, -529}, -{ -100, -529, -529, -409, -529}}, -/* UG.CA..GU */ -{{ -50, -479, -479, -359, -479}, -{ -479, -908, -908, -788, -908}, -{ -309, -738, -738, -618, -738}, -{ -389, -818, -818, -698, -818}, -{ -379, -808, -808, -688, -808}}, -/* UG.CC..GU */ -{{ -50, -479, -479, -359, -479}, -{ -649,-1078,-1078, -958,-1078}, -{ -289, -718, -718, -598, -718}, -{ -739,-1168,-1168,-1048,-1168}, -{ -379, -808, -808, -688, -808}}, -/* UG.CG..GU */ -{{ -50, -479, -479, -359, -479}, -{ -649,-1078,-1078, -958,-1078}, -{ -289, -718, -718, -598, -718}, -{ -739,-1168,-1168,-1048,-1168}, -{ -379, -808, -808, -688, -808}}, -/* UG.CU..GU */ -{{ -50, -479, -479, -359, -479}, -{ -649,-1078,-1078, -958,-1078}, -{ -289, -718, -718, -598, -718}, -{ -739,-1168,-1168,-1048,-1168}, -{ -379, -808, -808, -688, -808}}}, -/* UG.G@..GU */ -{{{ -50, -659, -809, -919, -809}, -{ -100, -709, -859, -969, -859}, -{ -100, -709, -859, -969, -859}, -{ -100, -709, -859, -969, -859}, -{ -100, -709, -859, -969, -859}}, -/* UG.GA..GU */ -{{ -50, -659, -809, -919, -809}, -{ -479,-1088,-1238,-1348,-1238}, -{ -309, -918,-1068,-1178,-1068}, -{ -389, -998,-1148,-1258,-1148}, -{ -379, -988,-1138,-1248,-1138}}, -/* UG.GC..GU */ -{{ -50, -659, -809, -919, -809}, -{ -649,-1258,-1408,-1518,-1408}, -{ -289, -898,-1048,-1158,-1048}, -{ -739,-1348,-1498,-1608,-1498}, -{ -379, -988,-1138,-1248,-1138}}, -/* UG.GG..GU */ -{{ -50, -659, -809, -919, -809}, -{ -649,-1258,-1408,-1518,-1408}, -{ -289, -898,-1048,-1158,-1048}, -{ -739,-1348,-1498,-1608,-1498}, -{ -379, -988,-1138,-1248,-1138}}, -/* UG.GU..GU */ -{{ -50, -659, -809, -919, -809}, -{ -649,-1258,-1408,-1518,-1408}, -{ -289, -898,-1048,-1158,-1048}, -{ -739,-1348,-1498,-1608,-1498}, -{ -379, -988,-1138,-1248,-1138}}}, -/* UG.U@..GU */ -{{{ -50, -549, -439, -549, -359}, -{ -100, -599, -489, -599, -409}, -{ -100, -599, -489, -599, -409}, -{ -100, -599, -489, -599, -409}, -{ -100, -599, -489, -599, -409}}, -/* UG.UA..GU */ -{{ -50, -549, -439, -549, -359}, -{ -479, -978, -868, -978, -788}, -{ -309, -808, -698, -808, -618}, -{ -389, -888, -778, -888, -698}, -{ -379, -878, -768, -878, -688}}, -/* UG.UC..GU */ -{{ -50, -549, -439, -549, -359}, -{ -649,-1148,-1038,-1148, -958}, -{ -289, -788, -678, -788, -598}, -{ -739,-1238,-1128,-1238,-1048}, -{ -379, -878, -768, -878, -688}}, -/* UG.UG..GU */ -{{ -50, -549, -439, -549, -359}, -{ -649,-1148,-1038,-1148, -958}, -{ -289, -788, -678, -788, -598}, -{ -739,-1238,-1128,-1238,-1048}, -{ -379, -878, -768, -878, -688}}, -/* UG.UU..GU */ -{{ -50, -549, -439, -549, -359}, -{ -649,-1148,-1038,-1148, -958}, -{ -289, -788, -678, -788, -598}, -{ -739,-1238,-1128,-1238,-1048}, -{ -379, -878, -768, -878, -688}}}}, -/* UG.@@..UG */ -{{{{ 0, 0, 0, 0, 0}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* UG.@A..UG */ -{{ 0, 0, 0, 0, 0}, -{ -719, -719, -719, -719, -719}, -{ -479, -479, -479, -479, -479}, -{ -659, -659, -659, -659, -659}, -{ -549, -549, -549, -549, -549}}, -/* UG.@C..UG */ -{{ 0, 0, 0, 0, 0}, -{ -789, -789, -789, -789, -789}, -{ -479, -479, -479, -479, -479}, -{ -809, -809, -809, -809, -809}, -{ -439, -439, -439, -439, -439}}, -/* UG.@G..UG */ -{{ 0, 0, 0, 0, 0}, -{ -959, -959, -959, -959, -959}, -{ -359, -359, -359, -359, -359}, -{ -919, -919, -919, -919, -919}, -{ -549, -549, -549, -549, -549}}, -/* UG.@U..UG */ -{{ 0, 0, 0, 0, 0}, -{ -809, -809, -809, -809, -809}, -{ -479, -479, -479, -479, -479}, -{ -809, -809, -809, -809, -809}, -{ -359, -359, -359, -359, -359}}}, -/* UG.A@..UG */ -{{{ -50, -719, -789, -959, -809}, -{ -100, -769, -839,-1009, -859}, -{ -100, -769, -839,-1009, -859}, -{ -100, -769, -839,-1009, -859}, -{ -100, -769, -839,-1009, -859}}, -/* UG.AA..UG */ -{{ -50, -719, -789, -959, -809}, -{ -769,-1438,-1508,-1678,-1528}, -{ -529,-1198,-1268,-1438,-1288}, -{ -709,-1378,-1448,-1618,-1468}, -{ -599,-1268,-1338,-1508,-1358}}, -/* UG.AC..UG */ -{{ -50, -719, -789, -959, -809}, -{ -839,-1508,-1578,-1748,-1598}, -{ -529,-1198,-1268,-1438,-1288}, -{ -859,-1528,-1598,-1768,-1618}, -{ -489,-1158,-1228,-1398,-1248}}, -/* UG.AG..UG */ -{{ -50, -719, -789, -959, -809}, -{-1009,-1678,-1748,-1918,-1768}, -{ -409,-1078,-1148,-1318,-1168}, -{ -969,-1638,-1708,-1878,-1728}, -{ -599,-1268,-1338,-1508,-1358}}, -/* UG.AU..UG */ -{{ -50, -719, -789, -959, -809}, -{ -859,-1528,-1598,-1768,-1618}, -{ -529,-1198,-1268,-1438,-1288}, -{ -859,-1528,-1598,-1768,-1618}, -{ -409,-1078,-1148,-1318,-1168}}}, -/* UG.C@..UG */ -{{{ -50, -479, -479, -359, -479}, -{ -100, -529, -529, -409, -529}, -{ -100, -529, -529, -409, -529}, -{ -100, -529, -529, -409, -529}, -{ -100, -529, -529, -409, -529}}, -/* UG.CA..UG */ -{{ -50, -479, -479, -359, -479}, -{ -769,-1198,-1198,-1078,-1198}, -{ -529, -958, -958, -838, -958}, -{ -709,-1138,-1138,-1018,-1138}, -{ -599,-1028,-1028, -908,-1028}}, -/* UG.CC..UG */ -{{ -50, -479, -479, -359, -479}, -{ -839,-1268,-1268,-1148,-1268}, -{ -529, -958, -958, -838, -958}, -{ -859,-1288,-1288,-1168,-1288}, -{ -489, -918, -918, -798, -918}}, -/* UG.CG..UG */ -{{ -50, -479, -479, -359, -479}, -{-1009,-1438,-1438,-1318,-1438}, -{ -409, -838, -838, -718, -838}, -{ -969,-1398,-1398,-1278,-1398}, -{ -599,-1028,-1028, -908,-1028}}, -/* UG.CU..UG */ -{{ -50, -479, -479, -359, -479}, -{ -859,-1288,-1288,-1168,-1288}, -{ -529, -958, -958, -838, -958}, -{ -859,-1288,-1288,-1168,-1288}, -{ -409, -838, -838, -718, -838}}}, -/* UG.G@..UG */ -{{{ -50, -659, -809, -919, -809}, -{ -100, -709, -859, -969, -859}, -{ -100, -709, -859, -969, -859}, -{ -100, -709, -859, -969, -859}, -{ -100, -709, -859, -969, -859}}, -/* UG.GA..UG */ -{{ -50, -659, -809, -919, -809}, -{ -769,-1378,-1528,-1638,-1528}, -{ -529,-1138,-1288,-1398,-1288}, -{ -709,-1318,-1468,-1578,-1468}, -{ -599,-1208,-1358,-1468,-1358}}, -/* UG.GC..UG */ -{{ -50, -659, -809, -919, -809}, -{ -839,-1448,-1598,-1708,-1598}, -{ -529,-1138,-1288,-1398,-1288}, -{ -859,-1468,-1618,-1728,-1618}, -{ -489,-1098,-1248,-1358,-1248}}, -/* UG.GG..UG */ -{{ -50, -659, -809, -919, -809}, -{-1009,-1618,-1768,-1878,-1768}, -{ -409,-1018,-1168,-1278,-1168}, -{ -969,-1578,-1728,-1838,-1728}, -{ -599,-1208,-1358,-1468,-1358}}, -/* UG.GU..UG */ -{{ -50, -659, -809, -919, -809}, -{ -859,-1468,-1618,-1728,-1618}, -{ -529,-1138,-1288,-1398,-1288}, -{ -859,-1468,-1618,-1728,-1618}, -{ -409,-1018,-1168,-1278,-1168}}}, -/* UG.U@..UG */ -{{{ -50, -549, -439, -549, -359}, -{ -100, -599, -489, -599, -409}, -{ -100, -599, -489, -599, -409}, -{ -100, -599, -489, -599, -409}, -{ -100, -599, -489, -599, -409}}, -/* UG.UA..UG */ -{{ -50, -549, -439, -549, -359}, -{ -769,-1268,-1158,-1268,-1078}, -{ -529,-1028, -918,-1028, -838}, -{ -709,-1208,-1098,-1208,-1018}, -{ -599,-1098, -988,-1098, -908}}, -/* UG.UC..UG */ -{{ -50, -549, -439, -549, -359}, -{ -839,-1338,-1228,-1338,-1148}, -{ -529,-1028, -918,-1028, -838}, -{ -859,-1358,-1248,-1358,-1168}, -{ -489, -988, -878, -988, -798}}, -/* UG.UG..UG */ -{{ -50, -549, -439, -549, -359}, -{-1009,-1508,-1398,-1508,-1318}, -{ -409, -908, -798, -908, -718}, -{ -969,-1468,-1358,-1468,-1278}, -{ -599,-1098, -988,-1098, -908}}, -/* UG.UU..UG */ -{{ -50, -549, -439, -549, -359}, -{ -859,-1358,-1248,-1358,-1168}, -{ -529,-1028, -918,-1028, -838}, -{ -859,-1358,-1248,-1358,-1168}, -{ -409, -908, -798, -908, -718}}}}, -/* UG.@@..AU */ -{{{{ 0, 0, 0, 0, 0}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* UG.@A..AU */ -{{ 0, 0, 0, 0, 0}, -{ -429, -429, -429, -429, -429}, -{ -259, -259, -259, -259, -259}, -{ -339, -339, -339, -339, -339}, -{ -329, -329, -329, -329, -329}}, -/* UG.@C..AU */ -{{ 0, 0, 0, 0, 0}, -{ -599, -599, -599, -599, -599}, -{ -239, -239, -239, -239, -239}, -{ -689, -689, -689, -689, -689}, -{ -329, -329, -329, -329, -329}}, -/* UG.@G..AU */ -{{ 0, 0, 0, 0, 0}, -{ -599, -599, -599, -599, -599}, -{ -239, -239, -239, -239, -239}, -{ -689, -689, -689, -689, -689}, -{ -329, -329, -329, -329, -329}}, -/* UG.@U..AU */ -{{ 0, 0, 0, 0, 0}, -{ -599, -599, -599, -599, -599}, -{ -239, -239, -239, -239, -239}, -{ -689, -689, -689, -689, -689}, -{ -329, -329, -329, -329, -329}}}, -/* UG.A@..AU */ -{{{ -50, -719, -789, -959, -809}, -{ -100, -769, -839,-1009, -859}, -{ -100, -769, -839,-1009, -859}, -{ -100, -769, -839,-1009, -859}, -{ -100, -769, -839,-1009, -859}}, -/* UG.AA..AU */ -{{ -50, -719, -789, -959, -809}, -{ -479,-1148,-1218,-1388,-1238}, -{ -309, -978,-1048,-1218,-1068}, -{ -389,-1058,-1128,-1298,-1148}, -{ -379,-1048,-1118,-1288,-1138}}, -/* UG.AC..AU */ -{{ -50, -719, -789, -959, -809}, -{ -649,-1318,-1388,-1558,-1408}, -{ -289, -958,-1028,-1198,-1048}, -{ -739,-1408,-1478,-1648,-1498}, -{ -379,-1048,-1118,-1288,-1138}}, -/* UG.AG..AU */ -{{ -50, -719, -789, -959, -809}, -{ -649,-1318,-1388,-1558,-1408}, -{ -289, -958,-1028,-1198,-1048}, -{ -739,-1408,-1478,-1648,-1498}, -{ -379,-1048,-1118,-1288,-1138}}, -/* UG.AU..AU */ -{{ -50, -719, -789, -959, -809}, -{ -649,-1318,-1388,-1558,-1408}, -{ -289, -958,-1028,-1198,-1048}, -{ -739,-1408,-1478,-1648,-1498}, -{ -379,-1048,-1118,-1288,-1138}}}, -/* UG.C@..AU */ -{{{ -50, -479, -479, -359, -479}, -{ -100, -529, -529, -409, -529}, -{ -100, -529, -529, -409, -529}, -{ -100, -529, -529, -409, -529}, -{ -100, -529, -529, -409, -529}}, -/* UG.CA..AU */ -{{ -50, -479, -479, -359, -479}, -{ -479, -908, -908, -788, -908}, -{ -309, -738, -738, -618, -738}, -{ -389, -818, -818, -698, -818}, -{ -379, -808, -808, -688, -808}}, -/* UG.CC..AU */ -{{ -50, -479, -479, -359, -479}, -{ -649,-1078,-1078, -958,-1078}, -{ -289, -718, -718, -598, -718}, -{ -739,-1168,-1168,-1048,-1168}, -{ -379, -808, -808, -688, -808}}, -/* UG.CG..AU */ -{{ -50, -479, -479, -359, -479}, -{ -649,-1078,-1078, -958,-1078}, -{ -289, -718, -718, -598, -718}, -{ -739,-1168,-1168,-1048,-1168}, -{ -379, -808, -808, -688, -808}}, -/* UG.CU..AU */ -{{ -50, -479, -479, -359, -479}, -{ -649,-1078,-1078, -958,-1078}, -{ -289, -718, -718, -598, -718}, -{ -739,-1168,-1168,-1048,-1168}, -{ -379, -808, -808, -688, -808}}}, -/* UG.G@..AU */ -{{{ -50, -659, -809, -919, -809}, -{ -100, -709, -859, -969, -859}, -{ -100, -709, -859, -969, -859}, -{ -100, -709, -859, -969, -859}, -{ -100, -709, -859, -969, -859}}, -/* UG.GA..AU */ -{{ -50, -659, -809, -919, -809}, -{ -479,-1088,-1238,-1348,-1238}, -{ -309, -918,-1068,-1178,-1068}, -{ -389, -998,-1148,-1258,-1148}, -{ -379, -988,-1138,-1248,-1138}}, -/* UG.GC..AU */ -{{ -50, -659, -809, -919, -809}, -{ -649,-1258,-1408,-1518,-1408}, -{ -289, -898,-1048,-1158,-1048}, -{ -739,-1348,-1498,-1608,-1498}, -{ -379, -988,-1138,-1248,-1138}}, -/* UG.GG..AU */ -{{ -50, -659, -809, -919, -809}, -{ -649,-1258,-1408,-1518,-1408}, -{ -289, -898,-1048,-1158,-1048}, -{ -739,-1348,-1498,-1608,-1498}, -{ -379, -988,-1138,-1248,-1138}}, -/* UG.GU..AU */ -{{ -50, -659, -809, -919, -809}, -{ -649,-1258,-1408,-1518,-1408}, -{ -289, -898,-1048,-1158,-1048}, -{ -739,-1348,-1498,-1608,-1498}, -{ -379, -988,-1138,-1248,-1138}}}, -/* UG.U@..AU */ -{{{ -50, -549, -439, -549, -359}, -{ -100, -599, -489, -599, -409}, -{ -100, -599, -489, -599, -409}, -{ -100, -599, -489, -599, -409}, -{ -100, -599, -489, -599, -409}}, -/* UG.UA..AU */ -{{ -50, -549, -439, -549, -359}, -{ -479, -978, -868, -978, -788}, -{ -309, -808, -698, -808, -618}, -{ -389, -888, -778, -888, -698}, -{ -379, -878, -768, -878, -688}}, -/* UG.UC..AU */ -{{ -50, -549, -439, -549, -359}, -{ -649,-1148,-1038,-1148, -958}, -{ -289, -788, -678, -788, -598}, -{ -739,-1238,-1128,-1238,-1048}, -{ -379, -878, -768, -878, -688}}, -/* UG.UG..AU */ -{{ -50, -549, -439, -549, -359}, -{ -649,-1148,-1038,-1148, -958}, -{ -289, -788, -678, -788, -598}, -{ -739,-1238,-1128,-1238,-1048}, -{ -379, -878, -768, -878, -688}}, -/* UG.UU..AU */ -{{ -50, -549, -439, -549, -359}, -{ -649,-1148,-1038,-1148, -958}, -{ -289, -788, -678, -788, -598}, -{ -739,-1238,-1128,-1238,-1048}, -{ -379, -878, -768, -878, -688}}}}, -/* UG.@@..UA */ -{{{{ 0, 0, 0, 0, 0}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* UG.@A..UA */ -{{ 0, 0, 0, 0, 0}, -{ -399, -399, -399, -399, -399}, -{ -429, -429, -429, -429, -429}, -{ -379, -379, -379, -379, -379}, -{ -279, -279, -279, -279, -279}}, -/* UG.@C..UA */ -{{ 0, 0, 0, 0, 0}, -{ -629, -629, -629, -629, -629}, -{ -509, -509, -509, -509, -509}, -{ -679, -679, -679, -679, -679}, -{ -139, -139, -139, -139, -139}}, -/* UG.@G..UA */ -{{ 0, 0, 0, 0, 0}, -{ -889, -889, -889, -889, -889}, -{ -199, -199, -199, -199, -199}, -{ -889, -889, -889, -889, -889}, -{ -279, -279, -279, -279, -279}}, -/* UG.@U..UA */ -{{ 0, 0, 0, 0, 0}, -{ -589, -589, -589, -589, -589}, -{ -179, -179, -179, -179, -179}, -{ -679, -679, -679, -679, -679}, -{ -140, -140, -140, -140, -140}}}, -/* UG.A@..UA */ -{{{ -50, -719, -789, -959, -809}, -{ -100, -769, -839,-1009, -859}, -{ -100, -769, -839,-1009, -859}, -{ -100, -769, -839,-1009, -859}, -{ -100, -769, -839,-1009, -859}}, -/* UG.AA..UA */ -{{ -50, -719, -789, -959, -809}, -{ -449,-1118,-1188,-1358,-1208}, -{ -479,-1148,-1218,-1388,-1238}, -{ -429,-1098,-1168,-1338,-1188}, -{ -329, -998,-1068,-1238,-1088}}, -/* UG.AC..UA */ -{{ -50, -719, -789, -959, -809}, -{ -679,-1348,-1418,-1588,-1438}, -{ -559,-1228,-1298,-1468,-1318}, -{ -729,-1398,-1468,-1638,-1488}, -{ -189, -858, -928,-1098, -948}}, -/* UG.AG..UA */ -{{ -50, -719, -789, -959, -809}, -{ -939,-1608,-1678,-1848,-1698}, -{ -249, -918, -988,-1158,-1008}, -{ -939,-1608,-1678,-1848,-1698}, -{ -329, -998,-1068,-1238,-1088}}, -/* UG.AU..UA */ -{{ -50, -719, -789, -959, -809}, -{ -639,-1308,-1378,-1548,-1398}, -{ -229, -898, -968,-1138, -988}, -{ -729,-1398,-1468,-1638,-1488}, -{ -190, -859, -929,-1099, -949}}}, -/* UG.C@..UA */ -{{{ -50, -479, -479, -359, -479}, -{ -100, -529, -529, -409, -529}, -{ -100, -529, -529, -409, -529}, -{ -100, -529, -529, -409, -529}, -{ -100, -529, -529, -409, -529}}, -/* UG.CA..UA */ -{{ -50, -479, -479, -359, -479}, -{ -449, -878, -878, -758, -878}, -{ -479, -908, -908, -788, -908}, -{ -429, -858, -858, -738, -858}, -{ -329, -758, -758, -638, -758}}, -/* UG.CC..UA */ -{{ -50, -479, -479, -359, -479}, -{ -679,-1108,-1108, -988,-1108}, -{ -559, -988, -988, -868, -988}, -{ -729,-1158,-1158,-1038,-1158}, -{ -189, -618, -618, -498, -618}}, -/* UG.CG..UA */ -{{ -50, -479, -479, -359, -479}, -{ -939,-1368,-1368,-1248,-1368}, -{ -249, -678, -678, -558, -678}, -{ -939,-1368,-1368,-1248,-1368}, -{ -329, -758, -758, -638, -758}}, -/* UG.CU..UA */ -{{ -50, -479, -479, -359, -479}, -{ -639,-1068,-1068, -948,-1068}, -{ -229, -658, -658, -538, -658}, -{ -729,-1158,-1158,-1038,-1158}, -{ -190, -619, -619, -499, -619}}}, -/* UG.G@..UA */ -{{{ -50, -659, -809, -919, -809}, -{ -100, -709, -859, -969, -859}, -{ -100, -709, -859, -969, -859}, -{ -100, -709, -859, -969, -859}, -{ -100, -709, -859, -969, -859}}, -/* UG.GA..UA */ -{{ -50, -659, -809, -919, -809}, -{ -449,-1058,-1208,-1318,-1208}, -{ -479,-1088,-1238,-1348,-1238}, -{ -429,-1038,-1188,-1298,-1188}, -{ -329, -938,-1088,-1198,-1088}}, -/* UG.GC..UA */ -{{ -50, -659, -809, -919, -809}, -{ -679,-1288,-1438,-1548,-1438}, -{ -559,-1168,-1318,-1428,-1318}, -{ -729,-1338,-1488,-1598,-1488}, -{ -189, -798, -948,-1058, -948}}, -/* UG.GG..UA */ -{{ -50, -659, -809, -919, -809}, -{ -939,-1548,-1698,-1808,-1698}, -{ -249, -858,-1008,-1118,-1008}, -{ -939,-1548,-1698,-1808,-1698}, -{ -329, -938,-1088,-1198,-1088}}, -/* UG.GU..UA */ -{{ -50, -659, -809, -919, -809}, -{ -639,-1248,-1398,-1508,-1398}, -{ -229, -838, -988,-1098, -988}, -{ -729,-1338,-1488,-1598,-1488}, -{ -190, -799, -949,-1059, -949}}}, -/* UG.U@..UA */ -{{{ -50, -549, -439, -549, -359}, -{ -100, -599, -489, -599, -409}, -{ -100, -599, -489, -599, -409}, -{ -100, -599, -489, -599, -409}, -{ -100, -599, -489, -599, -409}}, -/* UG.UA..UA */ -{{ -50, -549, -439, -549, -359}, -{ -449, -948, -838, -948, -758}, -{ -479, -978, -868, -978, -788}, -{ -429, -928, -818, -928, -738}, -{ -329, -828, -718, -828, -638}}, -/* UG.UC..UA */ -{{ -50, -549, -439, -549, -359}, -{ -679,-1178,-1068,-1178, -988}, -{ -559,-1058, -948,-1058, -868}, -{ -729,-1228,-1118,-1228,-1038}, -{ -189, -688, -578, -688, -498}}, -/* UG.UG..UA */ -{{ -50, -549, -439, -549, -359}, -{ -939,-1438,-1328,-1438,-1248}, -{ -249, -748, -638, -748, -558}, -{ -939,-1438,-1328,-1438,-1248}, -{ -329, -828, -718, -828, -638}}, -/* UG.UU..UA */ -{{ -50, -549, -439, -549, -359}, -{ -639,-1138,-1028,-1138, -948}, -{ -229, -728, -618, -728, -538}, -{ -729,-1228,-1118,-1228,-1038}, -{ -190, -689, -579, -689, -499}}}}, -/* UG.@@.. @ */ -{{{{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* UG.@A.. @ */ -{{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* UG.@C.. @ */ -{{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* UG.@G.. @ */ -{{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* UG.@U.. @ */ -{{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}}, -/* UG.A@.. @ */ -{{{ -100, -769, -839,-1009, -859}, -{ -100, -769, -839,-1009, -859}, -{ -100, -769, -839,-1009, -859}, -{ -100, -769, -839,-1009, -859}, -{ -100, -769, -839,-1009, -859}}, -/* UG.AA.. @ */ -{{ -100, -769, -839,-1009, -859}, -{ -100, -769, -839,-1009, -859}, -{ -100, -769, -839,-1009, -859}, -{ -100, -769, -839,-1009, -859}, -{ -100, -769, -839,-1009, -859}}, -/* UG.AC.. @ */ -{{ -100, -769, -839,-1009, -859}, -{ -100, -769, -839,-1009, -859}, -{ -100, -769, -839,-1009, -859}, -{ -100, -769, -839,-1009, -859}, -{ -100, -769, -839,-1009, -859}}, -/* UG.AG.. @ */ -{{ -100, -769, -839,-1009, -859}, -{ -100, -769, -839,-1009, -859}, -{ -100, -769, -839,-1009, -859}, -{ -100, -769, -839,-1009, -859}, -{ -100, -769, -839,-1009, -859}}, -/* UG.AU.. @ */ -{{ -100, -769, -839,-1009, -859}, -{ -100, -769, -839,-1009, -859}, -{ -100, -769, -839,-1009, -859}, -{ -100, -769, -839,-1009, -859}, -{ -100, -769, -839,-1009, -859}}}, -/* UG.C@.. @ */ -{{{ -100, -529, -529, -409, -529}, -{ -100, -529, -529, -409, -529}, -{ -100, -529, -529, -409, -529}, -{ -100, -529, -529, -409, -529}, -{ -100, -529, -529, -409, -529}}, -/* UG.CA.. @ */ -{{ -100, -529, -529, -409, -529}, -{ -100, -529, -529, -409, -529}, -{ -100, -529, -529, -409, -529}, -{ -100, -529, -529, -409, -529}, -{ -100, -529, -529, -409, -529}}, -/* UG.CC.. @ */ -{{ -100, -529, -529, -409, -529}, -{ -100, -529, -529, -409, -529}, -{ -100, -529, -529, -409, -529}, -{ -100, -529, -529, -409, -529}, -{ -100, -529, -529, -409, -529}}, -/* UG.CG.. @ */ -{{ -100, -529, -529, -409, -529}, -{ -100, -529, -529, -409, -529}, -{ -100, -529, -529, -409, -529}, -{ -100, -529, -529, -409, -529}, -{ -100, -529, -529, -409, -529}}, -/* UG.CU.. @ */ -{{ -100, -529, -529, -409, -529}, -{ -100, -529, -529, -409, -529}, -{ -100, -529, -529, -409, -529}, -{ -100, -529, -529, -409, -529}, -{ -100, -529, -529, -409, -529}}}, -/* UG.G@.. @ */ -{{{ -100, -709, -859, -969, -859}, -{ -100, -709, -859, -969, -859}, -{ -100, -709, -859, -969, -859}, -{ -100, -709, -859, -969, -859}, -{ -100, -709, -859, -969, -859}}, -/* UG.GA.. @ */ -{{ -100, -709, -859, -969, -859}, -{ -100, -709, -859, -969, -859}, -{ -100, -709, -859, -969, -859}, -{ -100, -709, -859, -969, -859}, -{ -100, -709, -859, -969, -859}}, -/* UG.GC.. @ */ -{{ -100, -709, -859, -969, -859}, -{ -100, -709, -859, -969, -859}, -{ -100, -709, -859, -969, -859}, -{ -100, -709, -859, -969, -859}, -{ -100, -709, -859, -969, -859}}, -/* UG.GG.. @ */ -{{ -100, -709, -859, -969, -859}, -{ -100, -709, -859, -969, -859}, -{ -100, -709, -859, -969, -859}, -{ -100, -709, -859, -969, -859}, -{ -100, -709, -859, -969, -859}}, -/* UG.GU.. @ */ -{{ -100, -709, -859, -969, -859}, -{ -100, -709, -859, -969, -859}, -{ -100, -709, -859, -969, -859}, -{ -100, -709, -859, -969, -859}, -{ -100, -709, -859, -969, -859}}}, -/* UG.U@.. @ */ -{{{ -100, -599, -489, -599, -409}, -{ -100, -599, -489, -599, -409}, -{ -100, -599, -489, -599, -409}, -{ -100, -599, -489, -599, -409}, -{ -100, -599, -489, -599, -409}}, -/* UG.UA.. @ */ -{{ -100, -599, -489, -599, -409}, -{ -100, -599, -489, -599, -409}, -{ -100, -599, -489, -599, -409}, -{ -100, -599, -489, -599, -409}, -{ -100, -599, -489, -599, -409}}, -/* UG.UC.. @ */ -{{ -100, -599, -489, -599, -409}, -{ -100, -599, -489, -599, -409}, -{ -100, -599, -489, -599, -409}, -{ -100, -599, -489, -599, -409}, -{ -100, -599, -489, -599, -409}}, -/* UG.UG.. @ */ -{{ -100, -599, -489, -599, -409}, -{ -100, -599, -489, -599, -409}, -{ -100, -599, -489, -599, -409}, -{ -100, -599, -489, -599, -409}, -{ -100, -599, -489, -599, -409}}, -/* UG.UU.. @ */ -{{ -100, -599, -489, -599, -409}, -{ -100, -599, -489, -599, -409}, -{ -100, -599, -489, -599, -409}, -{ -100, -599, -489, -599, -409}, -{ -100, -599, -489, -599, -409}}}}}, -{ /* noPair */ {{{{0}}}}, -/* AU.@@..CG */ -{{{{ 0, 0, 0, 0, 0}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* AU.@A..CG */ -{{ 0, 0, 0, 0, 0}, -{-1029,-1029,-1029,-1029,-1029}, -{ -519, -519, -519, -519, -519}, -{ -939, -939, -939, -939, -939}, -{ -809, -809, -809, -809, -809}}, -/* AU.@C..CG */ -{{ 0, 0, 0, 0, 0}, -{ -949, -949, -949, -949, -949}, -{ -449, -449, -449, -449, -449}, -{ -939, -939, -939, -939, -939}, -{ -739, -739, -739, -739, -739}}, -/* AU.@G..CG */ -{{ 0, 0, 0, 0, 0}, -{-1029,-1029,-1029,-1029,-1029}, -{ -519, -519, -519, -519, -519}, -{ -939, -939, -939, -939, -939}, -{ -809, -809, -809, -809, -809}}, -/* AU.@U..CG */ -{{ 0, 0, 0, 0, 0}, -{-1029,-1029,-1029,-1029,-1029}, -{ -669, -669, -669, -669, -669}, -{ -939, -939, -939, -939, -939}, -{ -859, -859, -859, -859, -859}}}, -/* AU.A@..CG */ -{{{ -50, -429, -599, -599, -599}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}}, -/* AU.AA..CG */ -{{ -50, -429, -599, -599, -599}, -{-1079,-1458,-1628,-1628,-1628}, -{ -569, -948,-1118,-1118,-1118}, -{ -989,-1368,-1538,-1538,-1538}, -{ -859,-1238,-1408,-1408,-1408}}, -/* AU.AC..CG */ -{{ -50, -429, -599, -599, -599}, -{ -999,-1378,-1548,-1548,-1548}, -{ -499, -878,-1048,-1048,-1048}, -{ -989,-1368,-1538,-1538,-1538}, -{ -789,-1168,-1338,-1338,-1338}}, -/* AU.AG..CG */ -{{ -50, -429, -599, -599, -599}, -{-1079,-1458,-1628,-1628,-1628}, -{ -569, -948,-1118,-1118,-1118}, -{ -989,-1368,-1538,-1538,-1538}, -{ -859,-1238,-1408,-1408,-1408}}, -/* AU.AU..CG */ -{{ -50, -429, -599, -599, -599}, -{-1079,-1458,-1628,-1628,-1628}, -{ -719,-1098,-1268,-1268,-1268}, -{ -989,-1368,-1538,-1538,-1538}, -{ -909,-1288,-1458,-1458,-1458}}}, -/* AU.C@..CG */ -{{{ -50, -259, -239, -239, -239}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}}, -/* AU.CA..CG */ -{{ -50, -259, -239, -239, -239}, -{-1079,-1288,-1268,-1268,-1268}, -{ -569, -778, -758, -758, -758}, -{ -989,-1198,-1178,-1178,-1178}, -{ -859,-1068,-1048,-1048,-1048}}, -/* AU.CC..CG */ -{{ -50, -259, -239, -239, -239}, -{ -999,-1208,-1188,-1188,-1188}, -{ -499, -708, -688, -688, -688}, -{ -989,-1198,-1178,-1178,-1178}, -{ -789, -998, -978, -978, -978}}, -/* AU.CG..CG */ -{{ -50, -259, -239, -239, -239}, -{-1079,-1288,-1268,-1268,-1268}, -{ -569, -778, -758, -758, -758}, -{ -989,-1198,-1178,-1178,-1178}, -{ -859,-1068,-1048,-1048,-1048}}, -/* AU.CU..CG */ -{{ -50, -259, -239, -239, -239}, -{-1079,-1288,-1268,-1268,-1268}, -{ -719, -928, -908, -908, -908}, -{ -989,-1198,-1178,-1178,-1178}, -{ -909,-1118,-1098,-1098,-1098}}}, -/* AU.G@..CG */ -{{{ -50, -339, -689, -689, -689}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}}, -/* AU.GA..CG */ -{{ -50, -339, -689, -689, -689}, -{-1079,-1368,-1718,-1718,-1718}, -{ -569, -858,-1208,-1208,-1208}, -{ -989,-1278,-1628,-1628,-1628}, -{ -859,-1148,-1498,-1498,-1498}}, -/* AU.GC..CG */ -{{ -50, -339, -689, -689, -689}, -{ -999,-1288,-1638,-1638,-1638}, -{ -499, -788,-1138,-1138,-1138}, -{ -989,-1278,-1628,-1628,-1628}, -{ -789,-1078,-1428,-1428,-1428}}, -/* AU.GG..CG */ -{{ -50, -339, -689, -689, -689}, -{-1079,-1368,-1718,-1718,-1718}, -{ -569, -858,-1208,-1208,-1208}, -{ -989,-1278,-1628,-1628,-1628}, -{ -859,-1148,-1498,-1498,-1498}}, -/* AU.GU..CG */ -{{ -50, -339, -689, -689, -689}, -{-1079,-1368,-1718,-1718,-1718}, -{ -719,-1008,-1358,-1358,-1358}, -{ -989,-1278,-1628,-1628,-1628}, -{ -909,-1198,-1548,-1548,-1548}}}, -/* AU.U@..CG */ -{{{ -50, -329, -329, -329, -329}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}}, -/* AU.UA..CG */ -{{ -50, -329, -329, -329, -329}, -{-1079,-1358,-1358,-1358,-1358}, -{ -569, -848, -848, -848, -848}, -{ -989,-1268,-1268,-1268,-1268}, -{ -859,-1138,-1138,-1138,-1138}}, -/* AU.UC..CG */ -{{ -50, -329, -329, -329, -329}, -{ -999,-1278,-1278,-1278,-1278}, -{ -499, -778, -778, -778, -778}, -{ -989,-1268,-1268,-1268,-1268}, -{ -789,-1068,-1068,-1068,-1068}}, -/* AU.UG..CG */ -{{ -50, -329, -329, -329, -329}, -{-1079,-1358,-1358,-1358,-1358}, -{ -569, -848, -848, -848, -848}, -{ -989,-1268,-1268,-1268,-1268}, -{ -859,-1138,-1138,-1138,-1138}}, -/* AU.UU..CG */ -{{ -50, -329, -329, -329, -329}, -{-1079,-1358,-1358,-1358,-1358}, -{ -719, -998, -998, -998, -998}, -{ -989,-1268,-1268,-1268,-1268}, -{ -909,-1188,-1188,-1188,-1188}}}}, -/* AU.@@..GC */ -{{{{ 0, 0, 0, 0, 0}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* AU.@A..GC */ -{{ 0, 0, 0, 0, 0}, -{ -519, -519, -519, -519, -519}, -{ -719, -719, -719, -719, -719}, -{ -709, -709, -709, -709, -709}, -{ -499, -499, -499, -499, -499}}, -/* AU.@C..GC */ -{{ 0, 0, 0, 0, 0}, -{ -879, -879, -879, -879, -879}, -{ -309, -309, -309, -309, -309}, -{ -739, -739, -739, -739, -739}, -{ -499, -499, -499, -499, -499}}, -/* AU.@G..GC */ -{{ 0, 0, 0, 0, 0}, -{ -559, -559, -559, -559, -559}, -{ -309, -309, -309, -309, -309}, -{ -619, -619, -619, -619, -619}, -{ -499, -499, -499, -499, -499}}, -/* AU.@U..GC */ -{{ 0, 0, 0, 0, 0}, -{ -879, -879, -879, -879, -879}, -{ -389, -389, -389, -389, -389}, -{ -739, -739, -739, -739, -739}, -{ -569, -569, -569, -569, -569}}}, -/* AU.A@..GC */ -{{{ -50, -429, -599, -599, -599}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}}, -/* AU.AA..GC */ -{{ -50, -429, -599, -599, -599}, -{ -569, -948,-1118,-1118,-1118}, -{ -769,-1148,-1318,-1318,-1318}, -{ -759,-1138,-1308,-1308,-1308}, -{ -549, -928,-1098,-1098,-1098}}, -/* AU.AC..GC */ -{{ -50, -429, -599, -599, -599}, -{ -929,-1308,-1478,-1478,-1478}, -{ -359, -738, -908, -908, -908}, -{ -789,-1168,-1338,-1338,-1338}, -{ -549, -928,-1098,-1098,-1098}}, -/* AU.AG..GC */ -{{ -50, -429, -599, -599, -599}, -{ -609, -988,-1158,-1158,-1158}, -{ -359, -738, -908, -908, -908}, -{ -669,-1048,-1218,-1218,-1218}, -{ -549, -928,-1098,-1098,-1098}}, -/* AU.AU..GC */ -{{ -50, -429, -599, -599, -599}, -{ -929,-1308,-1478,-1478,-1478}, -{ -439, -818, -988, -988, -988}, -{ -789,-1168,-1338,-1338,-1338}, -{ -619, -998,-1168,-1168,-1168}}}, -/* AU.C@..GC */ -{{{ -50, -259, -239, -239, -239}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}}, -/* AU.CA..GC */ -{{ -50, -259, -239, -239, -239}, -{ -569, -778, -758, -758, -758}, -{ -769, -978, -958, -958, -958}, -{ -759, -968, -948, -948, -948}, -{ -549, -758, -738, -738, -738}}, -/* AU.CC..GC */ -{{ -50, -259, -239, -239, -239}, -{ -929,-1138,-1118,-1118,-1118}, -{ -359, -568, -548, -548, -548}, -{ -789, -998, -978, -978, -978}, -{ -549, -758, -738, -738, -738}}, -/* AU.CG..GC */ -{{ -50, -259, -239, -239, -239}, -{ -609, -818, -798, -798, -798}, -{ -359, -568, -548, -548, -548}, -{ -669, -878, -858, -858, -858}, -{ -549, -758, -738, -738, -738}}, -/* AU.CU..GC */ -{{ -50, -259, -239, -239, -239}, -{ -929,-1138,-1118,-1118,-1118}, -{ -439, -648, -628, -628, -628}, -{ -789, -998, -978, -978, -978}, -{ -619, -828, -808, -808, -808}}}, -/* AU.G@..GC */ -{{{ -50, -339, -689, -689, -689}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}}, -/* AU.GA..GC */ -{{ -50, -339, -689, -689, -689}, -{ -569, -858,-1208,-1208,-1208}, -{ -769,-1058,-1408,-1408,-1408}, -{ -759,-1048,-1398,-1398,-1398}, -{ -549, -838,-1188,-1188,-1188}}, -/* AU.GC..GC */ -{{ -50, -339, -689, -689, -689}, -{ -929,-1218,-1568,-1568,-1568}, -{ -359, -648, -998, -998, -998}, -{ -789,-1078,-1428,-1428,-1428}, -{ -549, -838,-1188,-1188,-1188}}, -/* AU.GG..GC */ -{{ -50, -339, -689, -689, -689}, -{ -609, -898,-1248,-1248,-1248}, -{ -359, -648, -998, -998, -998}, -{ -669, -958,-1308,-1308,-1308}, -{ -549, -838,-1188,-1188,-1188}}, -/* AU.GU..GC */ -{{ -50, -339, -689, -689, -689}, -{ -929,-1218,-1568,-1568,-1568}, -{ -439, -728,-1078,-1078,-1078}, -{ -789,-1078,-1428,-1428,-1428}, -{ -619, -908,-1258,-1258,-1258}}}, -/* AU.U@..GC */ -{{{ -50, -329, -329, -329, -329}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}}, -/* AU.UA..GC */ -{{ -50, -329, -329, -329, -329}, -{ -569, -848, -848, -848, -848}, -{ -769,-1048,-1048,-1048,-1048}, -{ -759,-1038,-1038,-1038,-1038}, -{ -549, -828, -828, -828, -828}}, -/* AU.UC..GC */ -{{ -50, -329, -329, -329, -329}, -{ -929,-1208,-1208,-1208,-1208}, -{ -359, -638, -638, -638, -638}, -{ -789,-1068,-1068,-1068,-1068}, -{ -549, -828, -828, -828, -828}}, -/* AU.UG..GC */ -{{ -50, -329, -329, -329, -329}, -{ -609, -888, -888, -888, -888}, -{ -359, -638, -638, -638, -638}, -{ -669, -948, -948, -948, -948}, -{ -549, -828, -828, -828, -828}}, -/* AU.UU..GC */ -{{ -50, -329, -329, -329, -329}, -{ -929,-1208,-1208,-1208,-1208}, -{ -439, -718, -718, -718, -718}, -{ -789,-1068,-1068,-1068,-1068}, -{ -619, -898, -898, -898, -898}}}}, -/* AU.@@..GU */ -{{{{ 0, 0, 0, 0, 0}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* AU.@A..GU */ -{{ 0, 0, 0, 0, 0}, -{ -429, -429, -429, -429, -429}, -{ -259, -259, -259, -259, -259}, -{ -339, -339, -339, -339, -339}, -{ -329, -329, -329, -329, -329}}, -/* AU.@C..GU */ -{{ 0, 0, 0, 0, 0}, -{ -599, -599, -599, -599, -599}, -{ -239, -239, -239, -239, -239}, -{ -689, -689, -689, -689, -689}, -{ -329, -329, -329, -329, -329}}, -/* AU.@G..GU */ -{{ 0, 0, 0, 0, 0}, -{ -599, -599, -599, -599, -599}, -{ -239, -239, -239, -239, -239}, -{ -689, -689, -689, -689, -689}, -{ -329, -329, -329, -329, -329}}, -/* AU.@U..GU */ -{{ 0, 0, 0, 0, 0}, -{ -599, -599, -599, -599, -599}, -{ -239, -239, -239, -239, -239}, -{ -689, -689, -689, -689, -689}, -{ -329, -329, -329, -329, -329}}}, -/* AU.A@..GU */ -{{{ -50, -429, -599, -599, -599}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}}, -/* AU.AA..GU */ -{{ -50, -429, -599, -599, -599}, -{ -479, -858,-1028,-1028,-1028}, -{ -309, -688, -858, -858, -858}, -{ -389, -768, -938, -938, -938}, -{ -379, -758, -928, -928, -928}}, -/* AU.AC..GU */ -{{ -50, -429, -599, -599, -599}, -{ -649,-1028,-1198,-1198,-1198}, -{ -289, -668, -838, -838, -838}, -{ -739,-1118,-1288,-1288,-1288}, -{ -379, -758, -928, -928, -928}}, -/* AU.AG..GU */ -{{ -50, -429, -599, -599, -599}, -{ -649,-1028,-1198,-1198,-1198}, -{ -289, -668, -838, -838, -838}, -{ -739,-1118,-1288,-1288,-1288}, -{ -379, -758, -928, -928, -928}}, -/* AU.AU..GU */ -{{ -50, -429, -599, -599, -599}, -{ -649,-1028,-1198,-1198,-1198}, -{ -289, -668, -838, -838, -838}, -{ -739,-1118,-1288,-1288,-1288}, -{ -379, -758, -928, -928, -928}}}, -/* AU.C@..GU */ -{{{ -50, -259, -239, -239, -239}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}}, -/* AU.CA..GU */ -{{ -50, -259, -239, -239, -239}, -{ -479, -688, -668, -668, -668}, -{ -309, -518, -498, -498, -498}, -{ -389, -598, -578, -578, -578}, -{ -379, -588, -568, -568, -568}}, -/* AU.CC..GU */ -{{ -50, -259, -239, -239, -239}, -{ -649, -858, -838, -838, -838}, -{ -289, -498, -478, -478, -478}, -{ -739, -948, -928, -928, -928}, -{ -379, -588, -568, -568, -568}}, -/* AU.CG..GU */ -{{ -50, -259, -239, -239, -239}, -{ -649, -858, -838, -838, -838}, -{ -289, -498, -478, -478, -478}, -{ -739, -948, -928, -928, -928}, -{ -379, -588, -568, -568, -568}}, -/* AU.CU..GU */ -{{ -50, -259, -239, -239, -239}, -{ -649, -858, -838, -838, -838}, -{ -289, -498, -478, -478, -478}, -{ -739, -948, -928, -928, -928}, -{ -379, -588, -568, -568, -568}}}, -/* AU.G@..GU */ -{{{ -50, -339, -689, -689, -689}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}}, -/* AU.GA..GU */ -{{ -50, -339, -689, -689, -689}, -{ -479, -768,-1118,-1118,-1118}, -{ -309, -598, -948, -948, -948}, -{ -389, -678,-1028,-1028,-1028}, -{ -379, -668,-1018,-1018,-1018}}, -/* AU.GC..GU */ -{{ -50, -339, -689, -689, -689}, -{ -649, -938,-1288,-1288,-1288}, -{ -289, -578, -928, -928, -928}, -{ -739,-1028,-1378,-1378,-1378}, -{ -379, -668,-1018,-1018,-1018}}, -/* AU.GG..GU */ -{{ -50, -339, -689, -689, -689}, -{ -649, -938,-1288,-1288,-1288}, -{ -289, -578, -928, -928, -928}, -{ -739,-1028,-1378,-1378,-1378}, -{ -379, -668,-1018,-1018,-1018}}, -/* AU.GU..GU */ -{{ -50, -339, -689, -689, -689}, -{ -649, -938,-1288,-1288,-1288}, -{ -289, -578, -928, -928, -928}, -{ -739,-1028,-1378,-1378,-1378}, -{ -379, -668,-1018,-1018,-1018}}}, -/* AU.U@..GU */ -{{{ -50, -329, -329, -329, -329}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}}, -/* AU.UA..GU */ -{{ -50, -329, -329, -329, -329}, -{ -479, -758, -758, -758, -758}, -{ -309, -588, -588, -588, -588}, -{ -389, -668, -668, -668, -668}, -{ -379, -658, -658, -658, -658}}, -/* AU.UC..GU */ -{{ -50, -329, -329, -329, -329}, -{ -649, -928, -928, -928, -928}, -{ -289, -568, -568, -568, -568}, -{ -739,-1018,-1018,-1018,-1018}, -{ -379, -658, -658, -658, -658}}, -/* AU.UG..GU */ -{{ -50, -329, -329, -329, -329}, -{ -649, -928, -928, -928, -928}, -{ -289, -568, -568, -568, -568}, -{ -739,-1018,-1018,-1018,-1018}, -{ -379, -658, -658, -658, -658}}, -/* AU.UU..GU */ -{{ -50, -329, -329, -329, -329}, -{ -649, -928, -928, -928, -928}, -{ -289, -568, -568, -568, -568}, -{ -739,-1018,-1018,-1018,-1018}, -{ -379, -658, -658, -658, -658}}}}, -/* AU.@@..UG */ -{{{{ 0, 0, 0, 0, 0}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* AU.@A..UG */ -{{ 0, 0, 0, 0, 0}, -{ -719, -719, -719, -719, -719}, -{ -479, -479, -479, -479, -479}, -{ -659, -659, -659, -659, -659}, -{ -549, -549, -549, -549, -549}}, -/* AU.@C..UG */ -{{ 0, 0, 0, 0, 0}, -{ -789, -789, -789, -789, -789}, -{ -479, -479, -479, -479, -479}, -{ -809, -809, -809, -809, -809}, -{ -439, -439, -439, -439, -439}}, -/* AU.@G..UG */ -{{ 0, 0, 0, 0, 0}, -{ -959, -959, -959, -959, -959}, -{ -359, -359, -359, -359, -359}, -{ -919, -919, -919, -919, -919}, -{ -549, -549, -549, -549, -549}}, -/* AU.@U..UG */ -{{ 0, 0, 0, 0, 0}, -{ -809, -809, -809, -809, -809}, -{ -479, -479, -479, -479, -479}, -{ -809, -809, -809, -809, -809}, -{ -359, -359, -359, -359, -359}}}, -/* AU.A@..UG */ -{{{ -50, -429, -599, -599, -599}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}}, -/* AU.AA..UG */ -{{ -50, -429, -599, -599, -599}, -{ -769,-1148,-1318,-1318,-1318}, -{ -529, -908,-1078,-1078,-1078}, -{ -709,-1088,-1258,-1258,-1258}, -{ -599, -978,-1148,-1148,-1148}}, -/* AU.AC..UG */ -{{ -50, -429, -599, -599, -599}, -{ -839,-1218,-1388,-1388,-1388}, -{ -529, -908,-1078,-1078,-1078}, -{ -859,-1238,-1408,-1408,-1408}, -{ -489, -868,-1038,-1038,-1038}}, -/* AU.AG..UG */ -{{ -50, -429, -599, -599, -599}, -{-1009,-1388,-1558,-1558,-1558}, -{ -409, -788, -958, -958, -958}, -{ -969,-1348,-1518,-1518,-1518}, -{ -599, -978,-1148,-1148,-1148}}, -/* AU.AU..UG */ -{{ -50, -429, -599, -599, -599}, -{ -859,-1238,-1408,-1408,-1408}, -{ -529, -908,-1078,-1078,-1078}, -{ -859,-1238,-1408,-1408,-1408}, -{ -409, -788, -958, -958, -958}}}, -/* AU.C@..UG */ -{{{ -50, -259, -239, -239, -239}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}}, -/* AU.CA..UG */ -{{ -50, -259, -239, -239, -239}, -{ -769, -978, -958, -958, -958}, -{ -529, -738, -718, -718, -718}, -{ -709, -918, -898, -898, -898}, -{ -599, -808, -788, -788, -788}}, -/* AU.CC..UG */ -{{ -50, -259, -239, -239, -239}, -{ -839,-1048,-1028,-1028,-1028}, -{ -529, -738, -718, -718, -718}, -{ -859,-1068,-1048,-1048,-1048}, -{ -489, -698, -678, -678, -678}}, -/* AU.CG..UG */ -{{ -50, -259, -239, -239, -239}, -{-1009,-1218,-1198,-1198,-1198}, -{ -409, -618, -598, -598, -598}, -{ -969,-1178,-1158,-1158,-1158}, -{ -599, -808, -788, -788, -788}}, -/* AU.CU..UG */ -{{ -50, -259, -239, -239, -239}, -{ -859,-1068,-1048,-1048,-1048}, -{ -529, -738, -718, -718, -718}, -{ -859,-1068,-1048,-1048,-1048}, -{ -409, -618, -598, -598, -598}}}, -/* AU.G@..UG */ -{{{ -50, -339, -689, -689, -689}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}}, -/* AU.GA..UG */ -{{ -50, -339, -689, -689, -689}, -{ -769,-1058,-1408,-1408,-1408}, -{ -529, -818,-1168,-1168,-1168}, -{ -709, -998,-1348,-1348,-1348}, -{ -599, -888,-1238,-1238,-1238}}, -/* AU.GC..UG */ -{{ -50, -339, -689, -689, -689}, -{ -839,-1128,-1478,-1478,-1478}, -{ -529, -818,-1168,-1168,-1168}, -{ -859,-1148,-1498,-1498,-1498}, -{ -489, -778,-1128,-1128,-1128}}, -/* AU.GG..UG */ -{{ -50, -339, -689, -689, -689}, -{-1009,-1298,-1648,-1648,-1648}, -{ -409, -698,-1048,-1048,-1048}, -{ -969,-1258,-1608,-1608,-1608}, -{ -599, -888,-1238,-1238,-1238}}, -/* AU.GU..UG */ -{{ -50, -339, -689, -689, -689}, -{ -859,-1148,-1498,-1498,-1498}, -{ -529, -818,-1168,-1168,-1168}, -{ -859,-1148,-1498,-1498,-1498}, -{ -409, -698,-1048,-1048,-1048}}}, -/* AU.U@..UG */ -{{{ -50, -329, -329, -329, -329}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}}, -/* AU.UA..UG */ -{{ -50, -329, -329, -329, -329}, -{ -769,-1048,-1048,-1048,-1048}, -{ -529, -808, -808, -808, -808}, -{ -709, -988, -988, -988, -988}, -{ -599, -878, -878, -878, -878}}, -/* AU.UC..UG */ -{{ -50, -329, -329, -329, -329}, -{ -839,-1118,-1118,-1118,-1118}, -{ -529, -808, -808, -808, -808}, -{ -859,-1138,-1138,-1138,-1138}, -{ -489, -768, -768, -768, -768}}, -/* AU.UG..UG */ -{{ -50, -329, -329, -329, -329}, -{-1009,-1288,-1288,-1288,-1288}, -{ -409, -688, -688, -688, -688}, -{ -969,-1248,-1248,-1248,-1248}, -{ -599, -878, -878, -878, -878}}, -/* AU.UU..UG */ -{{ -50, -329, -329, -329, -329}, -{ -859,-1138,-1138,-1138,-1138}, -{ -529, -808, -808, -808, -808}, -{ -859,-1138,-1138,-1138,-1138}, -{ -409, -688, -688, -688, -688}}}}, -/* AU.@@..AU */ -{{{{ 0, 0, 0, 0, 0}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* AU.@A..AU */ -{{ 0, 0, 0, 0, 0}, -{ -429, -429, -429, -429, -429}, -{ -259, -259, -259, -259, -259}, -{ -339, -339, -339, -339, -339}, -{ -329, -329, -329, -329, -329}}, -/* AU.@C..AU */ -{{ 0, 0, 0, 0, 0}, -{ -599, -599, -599, -599, -599}, -{ -239, -239, -239, -239, -239}, -{ -689, -689, -689, -689, -689}, -{ -329, -329, -329, -329, -329}}, -/* AU.@G..AU */ -{{ 0, 0, 0, 0, 0}, -{ -599, -599, -599, -599, -599}, -{ -239, -239, -239, -239, -239}, -{ -689, -689, -689, -689, -689}, -{ -329, -329, -329, -329, -329}}, -/* AU.@U..AU */ -{{ 0, 0, 0, 0, 0}, -{ -599, -599, -599, -599, -599}, -{ -239, -239, -239, -239, -239}, -{ -689, -689, -689, -689, -689}, -{ -329, -329, -329, -329, -329}}}, -/* AU.A@..AU */ -{{{ -50, -429, -599, -599, -599}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}}, -/* AU.AA..AU */ -{{ -50, -429, -599, -599, -599}, -{ -479, -858,-1028,-1028,-1028}, -{ -309, -688, -858, -858, -858}, -{ -389, -768, -938, -938, -938}, -{ -379, -758, -928, -928, -928}}, -/* AU.AC..AU */ -{{ -50, -429, -599, -599, -599}, -{ -649,-1028,-1198,-1198,-1198}, -{ -289, -668, -838, -838, -838}, -{ -739,-1118,-1288,-1288,-1288}, -{ -379, -758, -928, -928, -928}}, -/* AU.AG..AU */ -{{ -50, -429, -599, -599, -599}, -{ -649,-1028,-1198,-1198,-1198}, -{ -289, -668, -838, -838, -838}, -{ -739,-1118,-1288,-1288,-1288}, -{ -379, -758, -928, -928, -928}}, -/* AU.AU..AU */ -{{ -50, -429, -599, -599, -599}, -{ -649,-1028,-1198,-1198,-1198}, -{ -289, -668, -838, -838, -838}, -{ -739,-1118,-1288,-1288,-1288}, -{ -379, -758, -928, -928, -928}}}, -/* AU.C@..AU */ -{{{ -50, -259, -239, -239, -239}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}}, -/* AU.CA..AU */ -{{ -50, -259, -239, -239, -239}, -{ -479, -688, -668, -668, -668}, -{ -309, -518, -498, -498, -498}, -{ -389, -598, -578, -578, -578}, -{ -379, -588, -568, -568, -568}}, -/* AU.CC..AU */ -{{ -50, -259, -239, -239, -239}, -{ -649, -858, -838, -838, -838}, -{ -289, -498, -478, -478, -478}, -{ -739, -948, -928, -928, -928}, -{ -379, -588, -568, -568, -568}}, -/* AU.CG..AU */ -{{ -50, -259, -239, -239, -239}, -{ -649, -858, -838, -838, -838}, -{ -289, -498, -478, -478, -478}, -{ -739, -948, -928, -928, -928}, -{ -379, -588, -568, -568, -568}}, -/* AU.CU..AU */ -{{ -50, -259, -239, -239, -239}, -{ -649, -858, -838, -838, -838}, -{ -289, -498, -478, -478, -478}, -{ -739, -948, -928, -928, -928}, -{ -379, -588, -568, -568, -568}}}, -/* AU.G@..AU */ -{{{ -50, -339, -689, -689, -689}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}}, -/* AU.GA..AU */ -{{ -50, -339, -689, -689, -689}, -{ -479, -768,-1118,-1118,-1118}, -{ -309, -598, -948, -948, -948}, -{ -389, -678,-1028,-1028,-1028}, -{ -379, -668,-1018,-1018,-1018}}, -/* AU.GC..AU */ -{{ -50, -339, -689, -689, -689}, -{ -649, -938,-1288,-1288,-1288}, -{ -289, -578, -928, -928, -928}, -{ -739,-1028,-1378,-1378,-1378}, -{ -379, -668,-1018,-1018,-1018}}, -/* AU.GG..AU */ -{{ -50, -339, -689, -689, -689}, -{ -649, -938,-1288,-1288,-1288}, -{ -289, -578, -928, -928, -928}, -{ -739,-1028,-1378,-1378,-1378}, -{ -379, -668,-1018,-1018,-1018}}, -/* AU.GU..AU */ -{{ -50, -339, -689, -689, -689}, -{ -649, -938,-1288,-1288,-1288}, -{ -289, -578, -928, -928, -928}, -{ -739,-1028,-1378,-1378,-1378}, -{ -379, -668,-1018,-1018,-1018}}}, -/* AU.U@..AU */ -{{{ -50, -329, -329, -329, -329}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}}, -/* AU.UA..AU */ -{{ -50, -329, -329, -329, -329}, -{ -479, -758, -758, -758, -758}, -{ -309, -588, -588, -588, -588}, -{ -389, -668, -668, -668, -668}, -{ -379, -658, -658, -658, -658}}, -/* AU.UC..AU */ -{{ -50, -329, -329, -329, -329}, -{ -649, -928, -928, -928, -928}, -{ -289, -568, -568, -568, -568}, -{ -739,-1018,-1018,-1018,-1018}, -{ -379, -658, -658, -658, -658}}, -/* AU.UG..AU */ -{{ -50, -329, -329, -329, -329}, -{ -649, -928, -928, -928, -928}, -{ -289, -568, -568, -568, -568}, -{ -739,-1018,-1018,-1018,-1018}, -{ -379, -658, -658, -658, -658}}, -/* AU.UU..AU */ -{{ -50, -329, -329, -329, -329}, -{ -649, -928, -928, -928, -928}, -{ -289, -568, -568, -568, -568}, -{ -739,-1018,-1018,-1018,-1018}, -{ -379, -658, -658, -658, -658}}}}, -/* AU.@@..UA */ -{{{{ 0, 0, 0, 0, 0}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* AU.@A..UA */ -{{ 0, 0, 0, 0, 0}, -{ -399, -399, -399, -399, -399}, -{ -429, -429, -429, -429, -429}, -{ -379, -379, -379, -379, -379}, -{ -279, -279, -279, -279, -279}}, -/* AU.@C..UA */ -{{ 0, 0, 0, 0, 0}, -{ -629, -629, -629, -629, -629}, -{ -509, -509, -509, -509, -509}, -{ -679, -679, -679, -679, -679}, -{ -139, -139, -139, -139, -139}}, -/* AU.@G..UA */ -{{ 0, 0, 0, 0, 0}, -{ -889, -889, -889, -889, -889}, -{ -199, -199, -199, -199, -199}, -{ -889, -889, -889, -889, -889}, -{ -279, -279, -279, -279, -279}}, -/* AU.@U..UA */ -{{ 0, 0, 0, 0, 0}, -{ -589, -589, -589, -589, -589}, -{ -179, -179, -179, -179, -179}, -{ -679, -679, -679, -679, -679}, -{ -140, -140, -140, -140, -140}}}, -/* AU.A@..UA */ -{{{ -50, -429, -599, -599, -599}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}}, -/* AU.AA..UA */ -{{ -50, -429, -599, -599, -599}, -{ -449, -828, -998, -998, -998}, -{ -479, -858,-1028,-1028,-1028}, -{ -429, -808, -978, -978, -978}, -{ -329, -708, -878, -878, -878}}, -/* AU.AC..UA */ -{{ -50, -429, -599, -599, -599}, -{ -679,-1058,-1228,-1228,-1228}, -{ -559, -938,-1108,-1108,-1108}, -{ -729,-1108,-1278,-1278,-1278}, -{ -189, -568, -738, -738, -738}}, -/* AU.AG..UA */ -{{ -50, -429, -599, -599, -599}, -{ -939,-1318,-1488,-1488,-1488}, -{ -249, -628, -798, -798, -798}, -{ -939,-1318,-1488,-1488,-1488}, -{ -329, -708, -878, -878, -878}}, -/* AU.AU..UA */ -{{ -50, -429, -599, -599, -599}, -{ -639,-1018,-1188,-1188,-1188}, -{ -229, -608, -778, -778, -778}, -{ -729,-1108,-1278,-1278,-1278}, -{ -190, -569, -739, -739, -739}}}, -/* AU.C@..UA */ -{{{ -50, -259, -239, -239, -239}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}}, -/* AU.CA..UA */ -{{ -50, -259, -239, -239, -239}, -{ -449, -658, -638, -638, -638}, -{ -479, -688, -668, -668, -668}, -{ -429, -638, -618, -618, -618}, -{ -329, -538, -518, -518, -518}}, -/* AU.CC..UA */ -{{ -50, -259, -239, -239, -239}, -{ -679, -888, -868, -868, -868}, -{ -559, -768, -748, -748, -748}, -{ -729, -938, -918, -918, -918}, -{ -189, -398, -378, -378, -378}}, -/* AU.CG..UA */ -{{ -50, -259, -239, -239, -239}, -{ -939,-1148,-1128,-1128,-1128}, -{ -249, -458, -438, -438, -438}, -{ -939,-1148,-1128,-1128,-1128}, -{ -329, -538, -518, -518, -518}}, -/* AU.CU..UA */ -{{ -50, -259, -239, -239, -239}, -{ -639, -848, -828, -828, -828}, -{ -229, -438, -418, -418, -418}, -{ -729, -938, -918, -918, -918}, -{ -190, -399, -379, -379, -379}}}, -/* AU.G@..UA */ -{{{ -50, -339, -689, -689, -689}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}}, -/* AU.GA..UA */ -{{ -50, -339, -689, -689, -689}, -{ -449, -738,-1088,-1088,-1088}, -{ -479, -768,-1118,-1118,-1118}, -{ -429, -718,-1068,-1068,-1068}, -{ -329, -618, -968, -968, -968}}, -/* AU.GC..UA */ -{{ -50, -339, -689, -689, -689}, -{ -679, -968,-1318,-1318,-1318}, -{ -559, -848,-1198,-1198,-1198}, -{ -729,-1018,-1368,-1368,-1368}, -{ -189, -478, -828, -828, -828}}, -/* AU.GG..UA */ -{{ -50, -339, -689, -689, -689}, -{ -939,-1228,-1578,-1578,-1578}, -{ -249, -538, -888, -888, -888}, -{ -939,-1228,-1578,-1578,-1578}, -{ -329, -618, -968, -968, -968}}, -/* AU.GU..UA */ -{{ -50, -339, -689, -689, -689}, -{ -639, -928,-1278,-1278,-1278}, -{ -229, -518, -868, -868, -868}, -{ -729,-1018,-1368,-1368,-1368}, -{ -190, -479, -829, -829, -829}}}, -/* AU.U@..UA */ -{{{ -50, -329, -329, -329, -329}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}}, -/* AU.UA..UA */ -{{ -50, -329, -329, -329, -329}, -{ -449, -728, -728, -728, -728}, -{ -479, -758, -758, -758, -758}, -{ -429, -708, -708, -708, -708}, -{ -329, -608, -608, -608, -608}}, -/* AU.UC..UA */ -{{ -50, -329, -329, -329, -329}, -{ -679, -958, -958, -958, -958}, -{ -559, -838, -838, -838, -838}, -{ -729,-1008,-1008,-1008,-1008}, -{ -189, -468, -468, -468, -468}}, -/* AU.UG..UA */ -{{ -50, -329, -329, -329, -329}, -{ -939,-1218,-1218,-1218,-1218}, -{ -249, -528, -528, -528, -528}, -{ -939,-1218,-1218,-1218,-1218}, -{ -329, -608, -608, -608, -608}}, -/* AU.UU..UA */ -{{ -50, -329, -329, -329, -329}, -{ -639, -918, -918, -918, -918}, -{ -229, -508, -508, -508, -508}, -{ -729,-1008,-1008,-1008,-1008}, -{ -190, -469, -469, -469, -469}}}}, -/* AU.@@.. @ */ -{{{{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* AU.@A.. @ */ -{{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* AU.@C.. @ */ -{{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* AU.@G.. @ */ -{{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* AU.@U.. @ */ -{{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}}, -/* AU.A@.. @ */ -{{{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}}, -/* AU.AA.. @ */ -{{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}}, -/* AU.AC.. @ */ -{{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}}, -/* AU.AG.. @ */ -{{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}}, -/* AU.AU.. @ */ -{{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}, -{ -100, -479, -649, -649, -649}}}, -/* AU.C@.. @ */ -{{{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}}, -/* AU.CA.. @ */ -{{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}}, -/* AU.CC.. @ */ -{{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}}, -/* AU.CG.. @ */ -{{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}}, -/* AU.CU.. @ */ -{{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}, -{ -100, -309, -289, -289, -289}}}, -/* AU.G@.. @ */ -{{{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}}, -/* AU.GA.. @ */ -{{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}}, -/* AU.GC.. @ */ -{{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}}, -/* AU.GG.. @ */ -{{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}}, -/* AU.GU.. @ */ -{{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}, -{ -100, -389, -739, -739, -739}}}, -/* AU.U@.. @ */ -{{{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}}, -/* AU.UA.. @ */ -{{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}}, -/* AU.UC.. @ */ -{{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}}, -/* AU.UG.. @ */ -{{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}}, -/* AU.UU.. @ */ -{{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}, -{ -100, -379, -379, -379, -379}}}}}, -{ /* noPair */ {{{{0}}}}, -/* UA.@@..CG */ -{{{{ 0, 0, 0, 0, 0}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* UA.@A..CG */ -{{ 0, 0, 0, 0, 0}, -{-1029,-1029,-1029,-1029,-1029}, -{ -519, -519, -519, -519, -519}, -{ -939, -939, -939, -939, -939}, -{ -809, -809, -809, -809, -809}}, -/* UA.@C..CG */ -{{ 0, 0, 0, 0, 0}, -{ -949, -949, -949, -949, -949}, -{ -449, -449, -449, -449, -449}, -{ -939, -939, -939, -939, -939}, -{ -739, -739, -739, -739, -739}}, -/* UA.@G..CG */ -{{ 0, 0, 0, 0, 0}, -{-1029,-1029,-1029,-1029,-1029}, -{ -519, -519, -519, -519, -519}, -{ -939, -939, -939, -939, -939}, -{ -809, -809, -809, -809, -809}}, -/* UA.@U..CG */ -{{ 0, 0, 0, 0, 0}, -{-1029,-1029,-1029,-1029,-1029}, -{ -669, -669, -669, -669, -669}, -{ -939, -939, -939, -939, -939}, -{ -859, -859, -859, -859, -859}}}, -/* UA.A@..CG */ -{{{ -50, -399, -629, -889, -589}, -{ -100, -449, -679, -939, -639}, -{ -100, -449, -679, -939, -639}, -{ -100, -449, -679, -939, -639}, -{ -100, -449, -679, -939, -639}}, -/* UA.AA..CG */ -{{ -50, -399, -629, -889, -589}, -{-1079,-1428,-1658,-1918,-1618}, -{ -569, -918,-1148,-1408,-1108}, -{ -989,-1338,-1568,-1828,-1528}, -{ -859,-1208,-1438,-1698,-1398}}, -/* UA.AC..CG */ -{{ -50, -399, -629, -889, -589}, -{ -999,-1348,-1578,-1838,-1538}, -{ -499, -848,-1078,-1338,-1038}, -{ -989,-1338,-1568,-1828,-1528}, -{ -789,-1138,-1368,-1628,-1328}}, -/* UA.AG..CG */ -{{ -50, -399, -629, -889, -589}, -{-1079,-1428,-1658,-1918,-1618}, -{ -569, -918,-1148,-1408,-1108}, -{ -989,-1338,-1568,-1828,-1528}, -{ -859,-1208,-1438,-1698,-1398}}, -/* UA.AU..CG */ -{{ -50, -399, -629, -889, -589}, -{-1079,-1428,-1658,-1918,-1618}, -{ -719,-1068,-1298,-1558,-1258}, -{ -989,-1338,-1568,-1828,-1528}, -{ -909,-1258,-1488,-1748,-1448}}}, -/* UA.C@..CG */ -{{{ -50, -429, -509, -199, -179}, -{ -100, -479, -559, -249, -229}, -{ -100, -479, -559, -249, -229}, -{ -100, -479, -559, -249, -229}, -{ -100, -479, -559, -249, -229}}, -/* UA.CA..CG */ -{{ -50, -429, -509, -199, -179}, -{-1079,-1458,-1538,-1228,-1208}, -{ -569, -948,-1028, -718, -698}, -{ -989,-1368,-1448,-1138,-1118}, -{ -859,-1238,-1318,-1008, -988}}, -/* UA.CC..CG */ -{{ -50, -429, -509, -199, -179}, -{ -999,-1378,-1458,-1148,-1128}, -{ -499, -878, -958, -648, -628}, -{ -989,-1368,-1448,-1138,-1118}, -{ -789,-1168,-1248, -938, -918}}, -/* UA.CG..CG */ -{{ -50, -429, -509, -199, -179}, -{-1079,-1458,-1538,-1228,-1208}, -{ -569, -948,-1028, -718, -698}, -{ -989,-1368,-1448,-1138,-1118}, -{ -859,-1238,-1318,-1008, -988}}, -/* UA.CU..CG */ -{{ -50, -429, -509, -199, -179}, -{-1079,-1458,-1538,-1228,-1208}, -{ -719,-1098,-1178, -868, -848}, -{ -989,-1368,-1448,-1138,-1118}, -{ -909,-1288,-1368,-1058,-1038}}}, -/* UA.G@..CG */ -{{{ -50, -379, -679, -889, -679}, -{ -100, -429, -729, -939, -729}, -{ -100, -429, -729, -939, -729}, -{ -100, -429, -729, -939, -729}, -{ -100, -429, -729, -939, -729}}, -/* UA.GA..CG */ -{{ -50, -379, -679, -889, -679}, -{-1079,-1408,-1708,-1918,-1708}, -{ -569, -898,-1198,-1408,-1198}, -{ -989,-1318,-1618,-1828,-1618}, -{ -859,-1188,-1488,-1698,-1488}}, -/* UA.GC..CG */ -{{ -50, -379, -679, -889, -679}, -{ -999,-1328,-1628,-1838,-1628}, -{ -499, -828,-1128,-1338,-1128}, -{ -989,-1318,-1618,-1828,-1618}, -{ -789,-1118,-1418,-1628,-1418}}, -/* UA.GG..CG */ -{{ -50, -379, -679, -889, -679}, -{-1079,-1408,-1708,-1918,-1708}, -{ -569, -898,-1198,-1408,-1198}, -{ -989,-1318,-1618,-1828,-1618}, -{ -859,-1188,-1488,-1698,-1488}}, -/* UA.GU..CG */ -{{ -50, -379, -679, -889, -679}, -{-1079,-1408,-1708,-1918,-1708}, -{ -719,-1048,-1348,-1558,-1348}, -{ -989,-1318,-1618,-1828,-1618}, -{ -909,-1238,-1538,-1748,-1538}}}, -/* UA.U@..CG */ -{{{ -50, -279, -139, -279, -140}, -{ -100, -329, -189, -329, -190}, -{ -100, -329, -189, -329, -190}, -{ -100, -329, -189, -329, -190}, -{ -100, -329, -189, -329, -190}}, -/* UA.UA..CG */ -{{ -50, -279, -139, -279, -140}, -{-1079,-1308,-1168,-1308,-1169}, -{ -569, -798, -658, -798, -659}, -{ -989,-1218,-1078,-1218,-1079}, -{ -859,-1088, -948,-1088, -949}}, -/* UA.UC..CG */ -{{ -50, -279, -139, -279, -140}, -{ -999,-1228,-1088,-1228,-1089}, -{ -499, -728, -588, -728, -589}, -{ -989,-1218,-1078,-1218,-1079}, -{ -789,-1018, -878,-1018, -879}}, -/* UA.UG..CG */ -{{ -50, -279, -139, -279, -140}, -{-1079,-1308,-1168,-1308,-1169}, -{ -569, -798, -658, -798, -659}, -{ -989,-1218,-1078,-1218,-1079}, -{ -859,-1088, -948,-1088, -949}}, -/* UA.UU..CG */ -{{ -50, -279, -139, -279, -140}, -{-1079,-1308,-1168,-1308,-1169}, -{ -719, -948, -808, -948, -809}, -{ -989,-1218,-1078,-1218,-1079}, -{ -909,-1138, -998,-1138, -999}}}}, -/* UA.@@..GC */ -{{{{ 0, 0, 0, 0, 0}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* UA.@A..GC */ -{{ 0, 0, 0, 0, 0}, -{ -519, -519, -519, -519, -519}, -{ -719, -719, -719, -719, -719}, -{ -709, -709, -709, -709, -709}, -{ -499, -499, -499, -499, -499}}, -/* UA.@C..GC */ -{{ 0, 0, 0, 0, 0}, -{ -879, -879, -879, -879, -879}, -{ -309, -309, -309, -309, -309}, -{ -739, -739, -739, -739, -739}, -{ -499, -499, -499, -499, -499}}, -/* UA.@G..GC */ -{{ 0, 0, 0, 0, 0}, -{ -559, -559, -559, -559, -559}, -{ -309, -309, -309, -309, -309}, -{ -619, -619, -619, -619, -619}, -{ -499, -499, -499, -499, -499}}, -/* UA.@U..GC */ -{{ 0, 0, 0, 0, 0}, -{ -879, -879, -879, -879, -879}, -{ -389, -389, -389, -389, -389}, -{ -739, -739, -739, -739, -739}, -{ -569, -569, -569, -569, -569}}}, -/* UA.A@..GC */ -{{{ -50, -399, -629, -889, -589}, -{ -100, -449, -679, -939, -639}, -{ -100, -449, -679, -939, -639}, -{ -100, -449, -679, -939, -639}, -{ -100, -449, -679, -939, -639}}, -/* UA.AA..GC */ -{{ -50, -399, -629, -889, -589}, -{ -569, -918,-1148,-1408,-1108}, -{ -769,-1118,-1348,-1608,-1308}, -{ -759,-1108,-1338,-1598,-1298}, -{ -549, -898,-1128,-1388,-1088}}, -/* UA.AC..GC */ -{{ -50, -399, -629, -889, -589}, -{ -929,-1278,-1508,-1768,-1468}, -{ -359, -708, -938,-1198, -898}, -{ -789,-1138,-1368,-1628,-1328}, -{ -549, -898,-1128,-1388,-1088}}, -/* UA.AG..GC */ -{{ -50, -399, -629, -889, -589}, -{ -609, -958,-1188,-1448,-1148}, -{ -359, -708, -938,-1198, -898}, -{ -669,-1018,-1248,-1508,-1208}, -{ -549, -898,-1128,-1388,-1088}}, -/* UA.AU..GC */ -{{ -50, -399, -629, -889, -589}, -{ -929,-1278,-1508,-1768,-1468}, -{ -439, -788,-1018,-1278, -978}, -{ -789,-1138,-1368,-1628,-1328}, -{ -619, -968,-1198,-1458,-1158}}}, -/* UA.C@..GC */ -{{{ -50, -429, -509, -199, -179}, -{ -100, -479, -559, -249, -229}, -{ -100, -479, -559, -249, -229}, -{ -100, -479, -559, -249, -229}, -{ -100, -479, -559, -249, -229}}, -/* UA.CA..GC */ -{{ -50, -429, -509, -199, -179}, -{ -569, -948,-1028, -718, -698}, -{ -769,-1148,-1228, -918, -898}, -{ -759,-1138,-1218, -908, -888}, -{ -549, -928,-1008, -698, -678}}, -/* UA.CC..GC */ -{{ -50, -429, -509, -199, -179}, -{ -929,-1308,-1388,-1078,-1058}, -{ -359, -738, -818, -508, -488}, -{ -789,-1168,-1248, -938, -918}, -{ -549, -928,-1008, -698, -678}}, -/* UA.CG..GC */ -{{ -50, -429, -509, -199, -179}, -{ -609, -988,-1068, -758, -738}, -{ -359, -738, -818, -508, -488}, -{ -669,-1048,-1128, -818, -798}, -{ -549, -928,-1008, -698, -678}}, -/* UA.CU..GC */ -{{ -50, -429, -509, -199, -179}, -{ -929,-1308,-1388,-1078,-1058}, -{ -439, -818, -898, -588, -568}, -{ -789,-1168,-1248, -938, -918}, -{ -619, -998,-1078, -768, -748}}}, -/* UA.G@..GC */ -{{{ -50, -379, -679, -889, -679}, -{ -100, -429, -729, -939, -729}, -{ -100, -429, -729, -939, -729}, -{ -100, -429, -729, -939, -729}, -{ -100, -429, -729, -939, -729}}, -/* UA.GA..GC */ -{{ -50, -379, -679, -889, -679}, -{ -569, -898,-1198,-1408,-1198}, -{ -769,-1098,-1398,-1608,-1398}, -{ -759,-1088,-1388,-1598,-1388}, -{ -549, -878,-1178,-1388,-1178}}, -/* UA.GC..GC */ -{{ -50, -379, -679, -889, -679}, -{ -929,-1258,-1558,-1768,-1558}, -{ -359, -688, -988,-1198, -988}, -{ -789,-1118,-1418,-1628,-1418}, -{ -549, -878,-1178,-1388,-1178}}, -/* UA.GG..GC */ -{{ -50, -379, -679, -889, -679}, -{ -609, -938,-1238,-1448,-1238}, -{ -359, -688, -988,-1198, -988}, -{ -669, -998,-1298,-1508,-1298}, -{ -549, -878,-1178,-1388,-1178}}, -/* UA.GU..GC */ -{{ -50, -379, -679, -889, -679}, -{ -929,-1258,-1558,-1768,-1558}, -{ -439, -768,-1068,-1278,-1068}, -{ -789,-1118,-1418,-1628,-1418}, -{ -619, -948,-1248,-1458,-1248}}}, -/* UA.U@..GC */ -{{{ -50, -279, -139, -279, -140}, -{ -100, -329, -189, -329, -190}, -{ -100, -329, -189, -329, -190}, -{ -100, -329, -189, -329, -190}, -{ -100, -329, -189, -329, -190}}, -/* UA.UA..GC */ -{{ -50, -279, -139, -279, -140}, -{ -569, -798, -658, -798, -659}, -{ -769, -998, -858, -998, -859}, -{ -759, -988, -848, -988, -849}, -{ -549, -778, -638, -778, -639}}, -/* UA.UC..GC */ -{{ -50, -279, -139, -279, -140}, -{ -929,-1158,-1018,-1158,-1019}, -{ -359, -588, -448, -588, -449}, -{ -789,-1018, -878,-1018, -879}, -{ -549, -778, -638, -778, -639}}, -/* UA.UG..GC */ -{{ -50, -279, -139, -279, -140}, -{ -609, -838, -698, -838, -699}, -{ -359, -588, -448, -588, -449}, -{ -669, -898, -758, -898, -759}, -{ -549, -778, -638, -778, -639}}, -/* UA.UU..GC */ -{{ -50, -279, -139, -279, -140}, -{ -929,-1158,-1018,-1158,-1019}, -{ -439, -668, -528, -668, -529}, -{ -789,-1018, -878,-1018, -879}, -{ -619, -848, -708, -848, -709}}}}, -/* UA.@@..GU */ -{{{{ 0, 0, 0, 0, 0}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* UA.@A..GU */ -{{ 0, 0, 0, 0, 0}, -{ -429, -429, -429, -429, -429}, -{ -259, -259, -259, -259, -259}, -{ -339, -339, -339, -339, -339}, -{ -329, -329, -329, -329, -329}}, -/* UA.@C..GU */ -{{ 0, 0, 0, 0, 0}, -{ -599, -599, -599, -599, -599}, -{ -239, -239, -239, -239, -239}, -{ -689, -689, -689, -689, -689}, -{ -329, -329, -329, -329, -329}}, -/* UA.@G..GU */ -{{ 0, 0, 0, 0, 0}, -{ -599, -599, -599, -599, -599}, -{ -239, -239, -239, -239, -239}, -{ -689, -689, -689, -689, -689}, -{ -329, -329, -329, -329, -329}}, -/* UA.@U..GU */ -{{ 0, 0, 0, 0, 0}, -{ -599, -599, -599, -599, -599}, -{ -239, -239, -239, -239, -239}, -{ -689, -689, -689, -689, -689}, -{ -329, -329, -329, -329, -329}}}, -/* UA.A@..GU */ -{{{ -50, -399, -629, -889, -589}, -{ -100, -449, -679, -939, -639}, -{ -100, -449, -679, -939, -639}, -{ -100, -449, -679, -939, -639}, -{ -100, -449, -679, -939, -639}}, -/* UA.AA..GU */ -{{ -50, -399, -629, -889, -589}, -{ -479, -828,-1058,-1318,-1018}, -{ -309, -658, -888,-1148, -848}, -{ -389, -738, -968,-1228, -928}, -{ -379, -728, -958,-1218, -918}}, -/* UA.AC..GU */ -{{ -50, -399, -629, -889, -589}, -{ -649, -998,-1228,-1488,-1188}, -{ -289, -638, -868,-1128, -828}, -{ -739,-1088,-1318,-1578,-1278}, -{ -379, -728, -958,-1218, -918}}, -/* UA.AG..GU */ -{{ -50, -399, -629, -889, -589}, -{ -649, -998,-1228,-1488,-1188}, -{ -289, -638, -868,-1128, -828}, -{ -739,-1088,-1318,-1578,-1278}, -{ -379, -728, -958,-1218, -918}}, -/* UA.AU..GU */ -{{ -50, -399, -629, -889, -589}, -{ -649, -998,-1228,-1488,-1188}, -{ -289, -638, -868,-1128, -828}, -{ -739,-1088,-1318,-1578,-1278}, -{ -379, -728, -958,-1218, -918}}}, -/* UA.C@..GU */ -{{{ -50, -429, -509, -199, -179}, -{ -100, -479, -559, -249, -229}, -{ -100, -479, -559, -249, -229}, -{ -100, -479, -559, -249, -229}, -{ -100, -479, -559, -249, -229}}, -/* UA.CA..GU */ -{{ -50, -429, -509, -199, -179}, -{ -479, -858, -938, -628, -608}, -{ -309, -688, -768, -458, -438}, -{ -389, -768, -848, -538, -518}, -{ -379, -758, -838, -528, -508}}, -/* UA.CC..GU */ -{{ -50, -429, -509, -199, -179}, -{ -649,-1028,-1108, -798, -778}, -{ -289, -668, -748, -438, -418}, -{ -739,-1118,-1198, -888, -868}, -{ -379, -758, -838, -528, -508}}, -/* UA.CG..GU */ -{{ -50, -429, -509, -199, -179}, -{ -649,-1028,-1108, -798, -778}, -{ -289, -668, -748, -438, -418}, -{ -739,-1118,-1198, -888, -868}, -{ -379, -758, -838, -528, -508}}, -/* UA.CU..GU */ -{{ -50, -429, -509, -199, -179}, -{ -649,-1028,-1108, -798, -778}, -{ -289, -668, -748, -438, -418}, -{ -739,-1118,-1198, -888, -868}, -{ -379, -758, -838, -528, -508}}}, -/* UA.G@..GU */ -{{{ -50, -379, -679, -889, -679}, -{ -100, -429, -729, -939, -729}, -{ -100, -429, -729, -939, -729}, -{ -100, -429, -729, -939, -729}, -{ -100, -429, -729, -939, -729}}, -/* UA.GA..GU */ -{{ -50, -379, -679, -889, -679}, -{ -479, -808,-1108,-1318,-1108}, -{ -309, -638, -938,-1148, -938}, -{ -389, -718,-1018,-1228,-1018}, -{ -379, -708,-1008,-1218,-1008}}, -/* UA.GC..GU */ -{{ -50, -379, -679, -889, -679}, -{ -649, -978,-1278,-1488,-1278}, -{ -289, -618, -918,-1128, -918}, -{ -739,-1068,-1368,-1578,-1368}, -{ -379, -708,-1008,-1218,-1008}}, -/* UA.GG..GU */ -{{ -50, -379, -679, -889, -679}, -{ -649, -978,-1278,-1488,-1278}, -{ -289, -618, -918,-1128, -918}, -{ -739,-1068,-1368,-1578,-1368}, -{ -379, -708,-1008,-1218,-1008}}, -/* UA.GU..GU */ -{{ -50, -379, -679, -889, -679}, -{ -649, -978,-1278,-1488,-1278}, -{ -289, -618, -918,-1128, -918}, -{ -739,-1068,-1368,-1578,-1368}, -{ -379, -708,-1008,-1218,-1008}}}, -/* UA.U@..GU */ -{{{ -50, -279, -139, -279, -140}, -{ -100, -329, -189, -329, -190}, -{ -100, -329, -189, -329, -190}, -{ -100, -329, -189, -329, -190}, -{ -100, -329, -189, -329, -190}}, -/* UA.UA..GU */ -{{ -50, -279, -139, -279, -140}, -{ -479, -708, -568, -708, -569}, -{ -309, -538, -398, -538, -399}, -{ -389, -618, -478, -618, -479}, -{ -379, -608, -468, -608, -469}}, -/* UA.UC..GU */ -{{ -50, -279, -139, -279, -140}, -{ -649, -878, -738, -878, -739}, -{ -289, -518, -378, -518, -379}, -{ -739, -968, -828, -968, -829}, -{ -379, -608, -468, -608, -469}}, -/* UA.UG..GU */ -{{ -50, -279, -139, -279, -140}, -{ -649, -878, -738, -878, -739}, -{ -289, -518, -378, -518, -379}, -{ -739, -968, -828, -968, -829}, -{ -379, -608, -468, -608, -469}}, -/* UA.UU..GU */ -{{ -50, -279, -139, -279, -140}, -{ -649, -878, -738, -878, -739}, -{ -289, -518, -378, -518, -379}, -{ -739, -968, -828, -968, -829}, -{ -379, -608, -468, -608, -469}}}}, -/* UA.@@..UG */ -{{{{ 0, 0, 0, 0, 0}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* UA.@A..UG */ -{{ 0, 0, 0, 0, 0}, -{ -719, -719, -719, -719, -719}, -{ -479, -479, -479, -479, -479}, -{ -659, -659, -659, -659, -659}, -{ -549, -549, -549, -549, -549}}, -/* UA.@C..UG */ -{{ 0, 0, 0, 0, 0}, -{ -789, -789, -789, -789, -789}, -{ -479, -479, -479, -479, -479}, -{ -809, -809, -809, -809, -809}, -{ -439, -439, -439, -439, -439}}, -/* UA.@G..UG */ -{{ 0, 0, 0, 0, 0}, -{ -959, -959, -959, -959, -959}, -{ -359, -359, -359, -359, -359}, -{ -919, -919, -919, -919, -919}, -{ -549, -549, -549, -549, -549}}, -/* UA.@U..UG */ -{{ 0, 0, 0, 0, 0}, -{ -809, -809, -809, -809, -809}, -{ -479, -479, -479, -479, -479}, -{ -809, -809, -809, -809, -809}, -{ -359, -359, -359, -359, -359}}}, -/* UA.A@..UG */ -{{{ -50, -399, -629, -889, -589}, -{ -100, -449, -679, -939, -639}, -{ -100, -449, -679, -939, -639}, -{ -100, -449, -679, -939, -639}, -{ -100, -449, -679, -939, -639}}, -/* UA.AA..UG */ -{{ -50, -399, -629, -889, -589}, -{ -769,-1118,-1348,-1608,-1308}, -{ -529, -878,-1108,-1368,-1068}, -{ -709,-1058,-1288,-1548,-1248}, -{ -599, -948,-1178,-1438,-1138}}, -/* UA.AC..UG */ -{{ -50, -399, -629, -889, -589}, -{ -839,-1188,-1418,-1678,-1378}, -{ -529, -878,-1108,-1368,-1068}, -{ -859,-1208,-1438,-1698,-1398}, -{ -489, -838,-1068,-1328,-1028}}, -/* UA.AG..UG */ -{{ -50, -399, -629, -889, -589}, -{-1009,-1358,-1588,-1848,-1548}, -{ -409, -758, -988,-1248, -948}, -{ -969,-1318,-1548,-1808,-1508}, -{ -599, -948,-1178,-1438,-1138}}, -/* UA.AU..UG */ -{{ -50, -399, -629, -889, -589}, -{ -859,-1208,-1438,-1698,-1398}, -{ -529, -878,-1108,-1368,-1068}, -{ -859,-1208,-1438,-1698,-1398}, -{ -409, -758, -988,-1248, -948}}}, -/* UA.C@..UG */ -{{{ -50, -429, -509, -199, -179}, -{ -100, -479, -559, -249, -229}, -{ -100, -479, -559, -249, -229}, -{ -100, -479, -559, -249, -229}, -{ -100, -479, -559, -249, -229}}, -/* UA.CA..UG */ -{{ -50, -429, -509, -199, -179}, -{ -769,-1148,-1228, -918, -898}, -{ -529, -908, -988, -678, -658}, -{ -709,-1088,-1168, -858, -838}, -{ -599, -978,-1058, -748, -728}}, -/* UA.CC..UG */ -{{ -50, -429, -509, -199, -179}, -{ -839,-1218,-1298, -988, -968}, -{ -529, -908, -988, -678, -658}, -{ -859,-1238,-1318,-1008, -988}, -{ -489, -868, -948, -638, -618}}, -/* UA.CG..UG */ -{{ -50, -429, -509, -199, -179}, -{-1009,-1388,-1468,-1158,-1138}, -{ -409, -788, -868, -558, -538}, -{ -969,-1348,-1428,-1118,-1098}, -{ -599, -978,-1058, -748, -728}}, -/* UA.CU..UG */ -{{ -50, -429, -509, -199, -179}, -{ -859,-1238,-1318,-1008, -988}, -{ -529, -908, -988, -678, -658}, -{ -859,-1238,-1318,-1008, -988}, -{ -409, -788, -868, -558, -538}}}, -/* UA.G@..UG */ -{{{ -50, -379, -679, -889, -679}, -{ -100, -429, -729, -939, -729}, -{ -100, -429, -729, -939, -729}, -{ -100, -429, -729, -939, -729}, -{ -100, -429, -729, -939, -729}}, -/* UA.GA..UG */ -{{ -50, -379, -679, -889, -679}, -{ -769,-1098,-1398,-1608,-1398}, -{ -529, -858,-1158,-1368,-1158}, -{ -709,-1038,-1338,-1548,-1338}, -{ -599, -928,-1228,-1438,-1228}}, -/* UA.GC..UG */ -{{ -50, -379, -679, -889, -679}, -{ -839,-1168,-1468,-1678,-1468}, -{ -529, -858,-1158,-1368,-1158}, -{ -859,-1188,-1488,-1698,-1488}, -{ -489, -818,-1118,-1328,-1118}}, -/* UA.GG..UG */ -{{ -50, -379, -679, -889, -679}, -{-1009,-1338,-1638,-1848,-1638}, -{ -409, -738,-1038,-1248,-1038}, -{ -969,-1298,-1598,-1808,-1598}, -{ -599, -928,-1228,-1438,-1228}}, -/* UA.GU..UG */ -{{ -50, -379, -679, -889, -679}, -{ -859,-1188,-1488,-1698,-1488}, -{ -529, -858,-1158,-1368,-1158}, -{ -859,-1188,-1488,-1698,-1488}, -{ -409, -738,-1038,-1248,-1038}}}, -/* UA.U@..UG */ -{{{ -50, -279, -139, -279, -140}, -{ -100, -329, -189, -329, -190}, -{ -100, -329, -189, -329, -190}, -{ -100, -329, -189, -329, -190}, -{ -100, -329, -189, -329, -190}}, -/* UA.UA..UG */ -{{ -50, -279, -139, -279, -140}, -{ -769, -998, -858, -998, -859}, -{ -529, -758, -618, -758, -619}, -{ -709, -938, -798, -938, -799}, -{ -599, -828, -688, -828, -689}}, -/* UA.UC..UG */ -{{ -50, -279, -139, -279, -140}, -{ -839,-1068, -928,-1068, -929}, -{ -529, -758, -618, -758, -619}, -{ -859,-1088, -948,-1088, -949}, -{ -489, -718, -578, -718, -579}}, -/* UA.UG..UG */ -{{ -50, -279, -139, -279, -140}, -{-1009,-1238,-1098,-1238,-1099}, -{ -409, -638, -498, -638, -499}, -{ -969,-1198,-1058,-1198,-1059}, -{ -599, -828, -688, -828, -689}}, -/* UA.UU..UG */ -{{ -50, -279, -139, -279, -140}, -{ -859,-1088, -948,-1088, -949}, -{ -529, -758, -618, -758, -619}, -{ -859,-1088, -948,-1088, -949}, -{ -409, -638, -498, -638, -499}}}}, -/* UA.@@..AU */ -{{{{ 0, 0, 0, 0, 0}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* UA.@A..AU */ -{{ 0, 0, 0, 0, 0}, -{ -429, -429, -429, -429, -429}, -{ -259, -259, -259, -259, -259}, -{ -339, -339, -339, -339, -339}, -{ -329, -329, -329, -329, -329}}, -/* UA.@C..AU */ -{{ 0, 0, 0, 0, 0}, -{ -599, -599, -599, -599, -599}, -{ -239, -239, -239, -239, -239}, -{ -689, -689, -689, -689, -689}, -{ -329, -329, -329, -329, -329}}, -/* UA.@G..AU */ -{{ 0, 0, 0, 0, 0}, -{ -599, -599, -599, -599, -599}, -{ -239, -239, -239, -239, -239}, -{ -689, -689, -689, -689, -689}, -{ -329, -329, -329, -329, -329}}, -/* UA.@U..AU */ -{{ 0, 0, 0, 0, 0}, -{ -599, -599, -599, -599, -599}, -{ -239, -239, -239, -239, -239}, -{ -689, -689, -689, -689, -689}, -{ -329, -329, -329, -329, -329}}}, -/* UA.A@..AU */ -{{{ -50, -399, -629, -889, -589}, -{ -100, -449, -679, -939, -639}, -{ -100, -449, -679, -939, -639}, -{ -100, -449, -679, -939, -639}, -{ -100, -449, -679, -939, -639}}, -/* UA.AA..AU */ -{{ -50, -399, -629, -889, -589}, -{ -479, -828,-1058,-1318,-1018}, -{ -309, -658, -888,-1148, -848}, -{ -389, -738, -968,-1228, -928}, -{ -379, -728, -958,-1218, -918}}, -/* UA.AC..AU */ -{{ -50, -399, -629, -889, -589}, -{ -649, -998,-1228,-1488,-1188}, -{ -289, -638, -868,-1128, -828}, -{ -739,-1088,-1318,-1578,-1278}, -{ -379, -728, -958,-1218, -918}}, -/* UA.AG..AU */ -{{ -50, -399, -629, -889, -589}, -{ -649, -998,-1228,-1488,-1188}, -{ -289, -638, -868,-1128, -828}, -{ -739,-1088,-1318,-1578,-1278}, -{ -379, -728, -958,-1218, -918}}, -/* UA.AU..AU */ -{{ -50, -399, -629, -889, -589}, -{ -649, -998,-1228,-1488,-1188}, -{ -289, -638, -868,-1128, -828}, -{ -739,-1088,-1318,-1578,-1278}, -{ -379, -728, -958,-1218, -918}}}, -/* UA.C@..AU */ -{{{ -50, -429, -509, -199, -179}, -{ -100, -479, -559, -249, -229}, -{ -100, -479, -559, -249, -229}, -{ -100, -479, -559, -249, -229}, -{ -100, -479, -559, -249, -229}}, -/* UA.CA..AU */ -{{ -50, -429, -509, -199, -179}, -{ -479, -858, -938, -628, -608}, -{ -309, -688, -768, -458, -438}, -{ -389, -768, -848, -538, -518}, -{ -379, -758, -838, -528, -508}}, -/* UA.CC..AU */ -{{ -50, -429, -509, -199, -179}, -{ -649,-1028,-1108, -798, -778}, -{ -289, -668, -748, -438, -418}, -{ -739,-1118,-1198, -888, -868}, -{ -379, -758, -838, -528, -508}}, -/* UA.CG..AU */ -{{ -50, -429, -509, -199, -179}, -{ -649,-1028,-1108, -798, -778}, -{ -289, -668, -748, -438, -418}, -{ -739,-1118,-1198, -888, -868}, -{ -379, -758, -838, -528, -508}}, -/* UA.CU..AU */ -{{ -50, -429, -509, -199, -179}, -{ -649,-1028,-1108, -798, -778}, -{ -289, -668, -748, -438, -418}, -{ -739,-1118,-1198, -888, -868}, -{ -379, -758, -838, -528, -508}}}, -/* UA.G@..AU */ -{{{ -50, -379, -679, -889, -679}, -{ -100, -429, -729, -939, -729}, -{ -100, -429, -729, -939, -729}, -{ -100, -429, -729, -939, -729}, -{ -100, -429, -729, -939, -729}}, -/* UA.GA..AU */ -{{ -50, -379, -679, -889, -679}, -{ -479, -808,-1108,-1318,-1108}, -{ -309, -638, -938,-1148, -938}, -{ -389, -718,-1018,-1228,-1018}, -{ -379, -708,-1008,-1218,-1008}}, -/* UA.GC..AU */ -{{ -50, -379, -679, -889, -679}, -{ -649, -978,-1278,-1488,-1278}, -{ -289, -618, -918,-1128, -918}, -{ -739,-1068,-1368,-1578,-1368}, -{ -379, -708,-1008,-1218,-1008}}, -/* UA.GG..AU */ -{{ -50, -379, -679, -889, -679}, -{ -649, -978,-1278,-1488,-1278}, -{ -289, -618, -918,-1128, -918}, -{ -739,-1068,-1368,-1578,-1368}, -{ -379, -708,-1008,-1218,-1008}}, -/* UA.GU..AU */ -{{ -50, -379, -679, -889, -679}, -{ -649, -978,-1278,-1488,-1278}, -{ -289, -618, -918,-1128, -918}, -{ -739,-1068,-1368,-1578,-1368}, -{ -379, -708,-1008,-1218,-1008}}}, -/* UA.U@..AU */ -{{{ -50, -279, -139, -279, -140}, -{ -100, -329, -189, -329, -190}, -{ -100, -329, -189, -329, -190}, -{ -100, -329, -189, -329, -190}, -{ -100, -329, -189, -329, -190}}, -/* UA.UA..AU */ -{{ -50, -279, -139, -279, -140}, -{ -479, -708, -568, -708, -569}, -{ -309, -538, -398, -538, -399}, -{ -389, -618, -478, -618, -479}, -{ -379, -608, -468, -608, -469}}, -/* UA.UC..AU */ -{{ -50, -279, -139, -279, -140}, -{ -649, -878, -738, -878, -739}, -{ -289, -518, -378, -518, -379}, -{ -739, -968, -828, -968, -829}, -{ -379, -608, -468, -608, -469}}, -/* UA.UG..AU */ -{{ -50, -279, -139, -279, -140}, -{ -649, -878, -738, -878, -739}, -{ -289, -518, -378, -518, -379}, -{ -739, -968, -828, -968, -829}, -{ -379, -608, -468, -608, -469}}, -/* UA.UU..AU */ -{{ -50, -279, -139, -279, -140}, -{ -649, -878, -738, -878, -739}, -{ -289, -518, -378, -518, -379}, -{ -739, -968, -828, -968, -829}, -{ -379, -608, -468, -608, -469}}}}, -/* UA.@@..UA */ -{{{{ 0, 0, 0, 0, 0}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* UA.@A..UA */ -{{ 0, 0, 0, 0, 0}, -{ -399, -399, -399, -399, -399}, -{ -429, -429, -429, -429, -429}, -{ -379, -379, -379, -379, -379}, -{ -279, -279, -279, -279, -279}}, -/* UA.@C..UA */ -{{ 0, 0, 0, 0, 0}, -{ -629, -629, -629, -629, -629}, -{ -509, -509, -509, -509, -509}, -{ -679, -679, -679, -679, -679}, -{ -139, -139, -139, -139, -139}}, -/* UA.@G..UA */ -{{ 0, 0, 0, 0, 0}, -{ -889, -889, -889, -889, -889}, -{ -199, -199, -199, -199, -199}, -{ -889, -889, -889, -889, -889}, -{ -279, -279, -279, -279, -279}}, -/* UA.@U..UA */ -{{ 0, 0, 0, 0, 0}, -{ -589, -589, -589, -589, -589}, -{ -179, -179, -179, -179, -179}, -{ -679, -679, -679, -679, -679}, -{ -140, -140, -140, -140, -140}}}, -/* UA.A@..UA */ -{{{ -50, -399, -629, -889, -589}, -{ -100, -449, -679, -939, -639}, -{ -100, -449, -679, -939, -639}, -{ -100, -449, -679, -939, -639}, -{ -100, -449, -679, -939, -639}}, -/* UA.AA..UA */ -{{ -50, -399, -629, -889, -589}, -{ -449, -798,-1028,-1288, -988}, -{ -479, -828,-1058,-1318,-1018}, -{ -429, -778,-1008,-1268, -968}, -{ -329, -678, -908,-1168, -868}}, -/* UA.AC..UA */ -{{ -50, -399, -629, -889, -589}, -{ -679,-1028,-1258,-1518,-1218}, -{ -559, -908,-1138,-1398,-1098}, -{ -729,-1078,-1308,-1568,-1268}, -{ -189, -538, -768,-1028, -728}}, -/* UA.AG..UA */ -{{ -50, -399, -629, -889, -589}, -{ -939,-1288,-1518,-1778,-1478}, -{ -249, -598, -828,-1088, -788}, -{ -939,-1288,-1518,-1778,-1478}, -{ -329, -678, -908,-1168, -868}}, -/* UA.AU..UA */ -{{ -50, -399, -629, -889, -589}, -{ -639, -988,-1218,-1478,-1178}, -{ -229, -578, -808,-1068, -768}, -{ -729,-1078,-1308,-1568,-1268}, -{ -190, -539, -769,-1029, -729}}}, -/* UA.C@..UA */ -{{{ -50, -429, -509, -199, -179}, -{ -100, -479, -559, -249, -229}, -{ -100, -479, -559, -249, -229}, -{ -100, -479, -559, -249, -229}, -{ -100, -479, -559, -249, -229}}, -/* UA.CA..UA */ -{{ -50, -429, -509, -199, -179}, -{ -449, -828, -908, -598, -578}, -{ -479, -858, -938, -628, -608}, -{ -429, -808, -888, -578, -558}, -{ -329, -708, -788, -478, -458}}, -/* UA.CC..UA */ -{{ -50, -429, -509, -199, -179}, -{ -679,-1058,-1138, -828, -808}, -{ -559, -938,-1018, -708, -688}, -{ -729,-1108,-1188, -878, -858}, -{ -189, -568, -648, -338, -318}}, -/* UA.CG..UA */ -{{ -50, -429, -509, -199, -179}, -{ -939,-1318,-1398,-1088,-1068}, -{ -249, -628, -708, -398, -378}, -{ -939,-1318,-1398,-1088,-1068}, -{ -329, -708, -788, -478, -458}}, -/* UA.CU..UA */ -{{ -50, -429, -509, -199, -179}, -{ -639,-1018,-1098, -788, -768}, -{ -229, -608, -688, -378, -358}, -{ -729,-1108,-1188, -878, -858}, -{ -190, -569, -649, -339, -319}}}, -/* UA.G@..UA */ -{{{ -50, -379, -679, -889, -679}, -{ -100, -429, -729, -939, -729}, -{ -100, -429, -729, -939, -729}, -{ -100, -429, -729, -939, -729}, -{ -100, -429, -729, -939, -729}}, -/* UA.GA..UA */ -{{ -50, -379, -679, -889, -679}, -{ -449, -778,-1078,-1288,-1078}, -{ -479, -808,-1108,-1318,-1108}, -{ -429, -758,-1058,-1268,-1058}, -{ -329, -658, -958,-1168, -958}}, -/* UA.GC..UA */ -{{ -50, -379, -679, -889, -679}, -{ -679,-1008,-1308,-1518,-1308}, -{ -559, -888,-1188,-1398,-1188}, -{ -729,-1058,-1358,-1568,-1358}, -{ -189, -518, -818,-1028, -818}}, -/* UA.GG..UA */ -{{ -50, -379, -679, -889, -679}, -{ -939,-1268,-1568,-1778,-1568}, -{ -249, -578, -878,-1088, -878}, -{ -939,-1268,-1568,-1778,-1568}, -{ -329, -658, -958,-1168, -958}}, -/* UA.GU..UA */ -{{ -50, -379, -679, -889, -679}, -{ -639, -968,-1268,-1478,-1268}, -{ -229, -558, -858,-1068, -858}, -{ -729,-1058,-1358,-1568,-1358}, -{ -190, -519, -819,-1029, -819}}}, -/* UA.U@..UA */ -{{{ -50, -279, -139, -279, -140}, -{ -100, -329, -189, -329, -190}, -{ -100, -329, -189, -329, -190}, -{ -100, -329, -189, -329, -190}, -{ -100, -329, -189, -329, -190}}, -/* UA.UA..UA */ -{{ -50, -279, -139, -279, -140}, -{ -449, -678, -538, -678, -539}, -{ -479, -708, -568, -708, -569}, -{ -429, -658, -518, -658, -519}, -{ -329, -558, -418, -558, -419}}, -/* UA.UC..UA */ -{{ -50, -279, -139, -279, -140}, -{ -679, -908, -768, -908, -769}, -{ -559, -788, -648, -788, -649}, -{ -729, -958, -818, -958, -819}, -{ -189, -418, -278, -418, -279}}, -/* UA.UG..UA */ -{{ -50, -279, -139, -279, -140}, -{ -939,-1168,-1028,-1168,-1029}, -{ -249, -478, -338, -478, -339}, -{ -939,-1168,-1028,-1168,-1029}, -{ -329, -558, -418, -558, -419}}, -/* UA.UU..UA */ -{{ -50, -279, -139, -279, -140}, -{ -639, -868, -728, -868, -729}, -{ -229, -458, -318, -458, -319}, -{ -729, -958, -818, -958, -819}, -{ -190, -419, -279, -419, -280}}}}, -/* UA.@@.. @ */ -{{{{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* UA.@A.. @ */ -{{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* UA.@C.. @ */ -{{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* UA.@G.. @ */ -{{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}, -/* UA.@U.. @ */ -{{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}, -{ -50, -50, -50, -50, -50}}}, -/* UA.A@.. @ */ -{{{ -100, -449, -679, -939, -639}, -{ -100, -449, -679, -939, -639}, -{ -100, -449, -679, -939, -639}, -{ -100, -449, -679, -939, -639}, -{ -100, -449, -679, -939, -639}}, -/* UA.AA.. @ */ -{{ -100, -449, -679, -939, -639}, -{ -100, -449, -679, -939, -639}, -{ -100, -449, -679, -939, -639}, -{ -100, -449, -679, -939, -639}, -{ -100, -449, -679, -939, -639}}, -/* UA.AC.. @ */ -{{ -100, -449, -679, -939, -639}, -{ -100, -449, -679, -939, -639}, -{ -100, -449, -679, -939, -639}, -{ -100, -449, -679, -939, -639}, -{ -100, -449, -679, -939, -639}}, -/* UA.AG.. @ */ -{{ -100, -449, -679, -939, -639}, -{ -100, -449, -679, -939, -639}, -{ -100, -449, -679, -939, -639}, -{ -100, -449, -679, -939, -639}, -{ -100, -449, -679, -939, -639}}, -/* UA.AU.. @ */ -{{ -100, -449, -679, -939, -639}, -{ -100, -449, -679, -939, -639}, -{ -100, -449, -679, -939, -639}, -{ -100, -449, -679, -939, -639}, -{ -100, -449, -679, -939, -639}}}, -/* UA.C@.. @ */ -{{{ -100, -479, -559, -249, -229}, -{ -100, -479, -559, -249, -229}, -{ -100, -479, -559, -249, -229}, -{ -100, -479, -559, -249, -229}, -{ -100, -479, -559, -249, -229}}, -/* UA.CA.. @ */ -{{ -100, -479, -559, -249, -229}, -{ -100, -479, -559, -249, -229}, -{ -100, -479, -559, -249, -229}, -{ -100, -479, -559, -249, -229}, -{ -100, -479, -559, -249, -229}}, -/* UA.CC.. @ */ -{{ -100, -479, -559, -249, -229}, -{ -100, -479, -559, -249, -229}, -{ -100, -479, -559, -249, -229}, -{ -100, -479, -559, -249, -229}, -{ -100, -479, -559, -249, -229}}, -/* UA.CG.. @ */ -{{ -100, -479, -559, -249, -229}, -{ -100, -479, -559, -249, -229}, -{ -100, -479, -559, -249, -229}, -{ -100, -479, -559, -249, -229}, -{ -100, -479, -559, -249, -229}}, -/* UA.CU.. @ */ -{{ -100, -479, -559, -249, -229}, -{ -100, -479, -559, -249, -229}, -{ -100, -479, -559, -249, -229}, -{ -100, -479, -559, -249, -229}, -{ -100, -479, -559, -249, -229}}}, -/* UA.G@.. @ */ -{{{ -100, -429, -729, -939, -729}, -{ -100, -429, -729, -939, -729}, -{ -100, -429, -729, -939, -729}, -{ -100, -429, -729, -939, -729}, -{ -100, -429, -729, -939, -729}}, -/* UA.GA.. @ */ -{{ -100, -429, -729, -939, -729}, -{ -100, -429, -729, -939, -729}, -{ -100, -429, -729, -939, -729}, -{ -100, -429, -729, -939, -729}, -{ -100, -429, -729, -939, -729}}, -/* UA.GC.. @ */ -{{ -100, -429, -729, -939, -729}, -{ -100, -429, -729, -939, -729}, -{ -100, -429, -729, -939, -729}, -{ -100, -429, -729, -939, -729}, -{ -100, -429, -729, -939, -729}}, -/* UA.GG.. @ */ -{{ -100, -429, -729, -939, -729}, -{ -100, -429, -729, -939, -729}, -{ -100, -429, -729, -939, -729}, -{ -100, -429, -729, -939, -729}, -{ -100, -429, -729, -939, -729}}, -/* UA.GU.. @ */ -{{ -100, -429, -729, -939, -729}, -{ -100, -429, -729, -939, -729}, -{ -100, -429, -729, -939, -729}, -{ -100, -429, -729, -939, -729}, -{ -100, -429, -729, -939, -729}}}, -/* UA.U@.. @ */ -{{{ -100, -329, -189, -329, -190}, -{ -100, -329, -189, -329, -190}, -{ -100, -329, -189, -329, -190}, -{ -100, -329, -189, -329, -190}, -{ -100, -329, -189, -329, -190}}, -/* UA.UA.. @ */ -{{ -100, -329, -189, -329, -190}, -{ -100, -329, -189, -329, -190}, -{ -100, -329, -189, -329, -190}, -{ -100, -329, -189, -329, -190}, -{ -100, -329, -189, -329, -190}}, -/* UA.UC.. @ */ -{{ -100, -329, -189, -329, -190}, -{ -100, -329, -189, -329, -190}, -{ -100, -329, -189, -329, -190}, -{ -100, -329, -189, -329, -190}, -{ -100, -329, -189, -329, -190}}, -/* UA.UG.. @ */ -{{ -100, -329, -189, -329, -190}, -{ -100, -329, -189, -329, -190}, -{ -100, -329, -189, -329, -190}, -{ -100, -329, -189, -329, -190}, -{ -100, -329, -189, -329, -190}}, -/* UA.UU.. @ */ -{{ -100, -329, -189, -329, -190}, -{ -100, -329, -189, -329, -190}, -{ -100, -329, -189, -329, -190}, -{ -100, -329, -189, -329, -190}, -{ -100, -329, -189, -329, -190}}}}}, -{ /* noPair */ {{{{0}}}}, -/* @.@@..CG */ -{{{{ -50, -50, -50, -50, -50}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.@A..CG */ -{{ -50, -50, -50, -50, -50}, -{-1079,-1079,-1079,-1079,-1079}, -{ -569, -569, -569, -569, -569}, -{ -989, -989, -989, -989, -989}, -{ -859, -859, -859, -859, -859}}, -/* @.@C..CG */ -{{ -50, -50, -50, -50, -50}, -{ -999, -999, -999, -999, -999}, -{ -499, -499, -499, -499, -499}, -{ -989, -989, -989, -989, -989}, -{ -789, -789, -789, -789, -789}}, -/* @.@G..CG */ -{{ -50, -50, -50, -50, -50}, -{-1079,-1079,-1079,-1079,-1079}, -{ -569, -569, -569, -569, -569}, -{ -989, -989, -989, -989, -989}, -{ -859, -859, -859, -859, -859}}, -/* @.@U..CG */ -{{ -50, -50, -50, -50, -50}, -{-1079,-1079,-1079,-1079,-1079}, -{ -719, -719, -719, -719, -719}, -{ -989, -989, -989, -989, -989}, -{ -909, -909, -909, -909, -909}}}, -/* @.A@..CG */ -{{{ -50, -50, -50, -50, -50}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.AA..CG */ -{{ -50, -50, -50, -50, -50}, -{-1079,-1079,-1079,-1079,-1079}, -{ -569, -569, -569, -569, -569}, -{ -989, -989, -989, -989, -989}, -{ -859, -859, -859, -859, -859}}, -/* @.AC..CG */ -{{ -50, -50, -50, -50, -50}, -{ -999, -999, -999, -999, -999}, -{ -499, -499, -499, -499, -499}, -{ -989, -989, -989, -989, -989}, -{ -789, -789, -789, -789, -789}}, -/* @.AG..CG */ -{{ -50, -50, -50, -50, -50}, -{-1079,-1079,-1079,-1079,-1079}, -{ -569, -569, -569, -569, -569}, -{ -989, -989, -989, -989, -989}, -{ -859, -859, -859, -859, -859}}, -/* @.AU..CG */ -{{ -50, -50, -50, -50, -50}, -{-1079,-1079,-1079,-1079,-1079}, -{ -719, -719, -719, -719, -719}, -{ -989, -989, -989, -989, -989}, -{ -909, -909, -909, -909, -909}}}, -/* @.C@..CG */ -{{{ -50, -50, -50, -50, -50}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.CA..CG */ -{{ -50, -50, -50, -50, -50}, -{-1079,-1079,-1079,-1079,-1079}, -{ -569, -569, -569, -569, -569}, -{ -989, -989, -989, -989, -989}, -{ -859, -859, -859, -859, -859}}, -/* @.CC..CG */ -{{ -50, -50, -50, -50, -50}, -{ -999, -999, -999, -999, -999}, -{ -499, -499, -499, -499, -499}, -{ -989, -989, -989, -989, -989}, -{ -789, -789, -789, -789, -789}}, -/* @.CG..CG */ -{{ -50, -50, -50, -50, -50}, -{-1079,-1079,-1079,-1079,-1079}, -{ -569, -569, -569, -569, -569}, -{ -989, -989, -989, -989, -989}, -{ -859, -859, -859, -859, -859}}, -/* @.CU..CG */ -{{ -50, -50, -50, -50, -50}, -{-1079,-1079,-1079,-1079,-1079}, -{ -719, -719, -719, -719, -719}, -{ -989, -989, -989, -989, -989}, -{ -909, -909, -909, -909, -909}}}, -/* @.G@..CG */ -{{{ -50, -50, -50, -50, -50}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.GA..CG */ -{{ -50, -50, -50, -50, -50}, -{-1079,-1079,-1079,-1079,-1079}, -{ -569, -569, -569, -569, -569}, -{ -989, -989, -989, -989, -989}, -{ -859, -859, -859, -859, -859}}, -/* @.GC..CG */ -{{ -50, -50, -50, -50, -50}, -{ -999, -999, -999, -999, -999}, -{ -499, -499, -499, -499, -499}, -{ -989, -989, -989, -989, -989}, -{ -789, -789, -789, -789, -789}}, -/* @.GG..CG */ -{{ -50, -50, -50, -50, -50}, -{-1079,-1079,-1079,-1079,-1079}, -{ -569, -569, -569, -569, -569}, -{ -989, -989, -989, -989, -989}, -{ -859, -859, -859, -859, -859}}, -/* @.GU..CG */ -{{ -50, -50, -50, -50, -50}, -{-1079,-1079,-1079,-1079,-1079}, -{ -719, -719, -719, -719, -719}, -{ -989, -989, -989, -989, -989}, -{ -909, -909, -909, -909, -909}}}, -/* @.U@..CG */ -{{{ -50, -50, -50, -50, -50}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.UA..CG */ -{{ -50, -50, -50, -50, -50}, -{-1079,-1079,-1079,-1079,-1079}, -{ -569, -569, -569, -569, -569}, -{ -989, -989, -989, -989, -989}, -{ -859, -859, -859, -859, -859}}, -/* @.UC..CG */ -{{ -50, -50, -50, -50, -50}, -{ -999, -999, -999, -999, -999}, -{ -499, -499, -499, -499, -499}, -{ -989, -989, -989, -989, -989}, -{ -789, -789, -789, -789, -789}}, -/* @.UG..CG */ -{{ -50, -50, -50, -50, -50}, -{-1079,-1079,-1079,-1079,-1079}, -{ -569, -569, -569, -569, -569}, -{ -989, -989, -989, -989, -989}, -{ -859, -859, -859, -859, -859}}, -/* @.UU..CG */ -{{ -50, -50, -50, -50, -50}, -{-1079,-1079,-1079,-1079,-1079}, -{ -719, -719, -719, -719, -719}, -{ -989, -989, -989, -989, -989}, -{ -909, -909, -909, -909, -909}}}}, -/* @.@@..GC */ -{{{{ -50, -50, -50, -50, -50}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.@A..GC */ -{{ -50, -50, -50, -50, -50}, -{ -569, -569, -569, -569, -569}, -{ -769, -769, -769, -769, -769}, -{ -759, -759, -759, -759, -759}, -{ -549, -549, -549, -549, -549}}, -/* @.@C..GC */ -{{ -50, -50, -50, -50, -50}, -{ -929, -929, -929, -929, -929}, -{ -359, -359, -359, -359, -359}, -{ -789, -789, -789, -789, -789}, -{ -549, -549, -549, -549, -549}}, -/* @.@G..GC */ -{{ -50, -50, -50, -50, -50}, -{ -609, -609, -609, -609, -609}, -{ -359, -359, -359, -359, -359}, -{ -669, -669, -669, -669, -669}, -{ -549, -549, -549, -549, -549}}, -/* @.@U..GC */ -{{ -50, -50, -50, -50, -50}, -{ -929, -929, -929, -929, -929}, -{ -439, -439, -439, -439, -439}, -{ -789, -789, -789, -789, -789}, -{ -619, -619, -619, -619, -619}}}, -/* @.A@..GC */ -{{{ -50, -50, -50, -50, -50}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.AA..GC */ -{{ -50, -50, -50, -50, -50}, -{ -569, -569, -569, -569, -569}, -{ -769, -769, -769, -769, -769}, -{ -759, -759, -759, -759, -759}, -{ -549, -549, -549, -549, -549}}, -/* @.AC..GC */ -{{ -50, -50, -50, -50, -50}, -{ -929, -929, -929, -929, -929}, -{ -359, -359, -359, -359, -359}, -{ -789, -789, -789, -789, -789}, -{ -549, -549, -549, -549, -549}}, -/* @.AG..GC */ -{{ -50, -50, -50, -50, -50}, -{ -609, -609, -609, -609, -609}, -{ -359, -359, -359, -359, -359}, -{ -669, -669, -669, -669, -669}, -{ -549, -549, -549, -549, -549}}, -/* @.AU..GC */ -{{ -50, -50, -50, -50, -50}, -{ -929, -929, -929, -929, -929}, -{ -439, -439, -439, -439, -439}, -{ -789, -789, -789, -789, -789}, -{ -619, -619, -619, -619, -619}}}, -/* @.C@..GC */ -{{{ -50, -50, -50, -50, -50}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.CA..GC */ -{{ -50, -50, -50, -50, -50}, -{ -569, -569, -569, -569, -569}, -{ -769, -769, -769, -769, -769}, -{ -759, -759, -759, -759, -759}, -{ -549, -549, -549, -549, -549}}, -/* @.CC..GC */ -{{ -50, -50, -50, -50, -50}, -{ -929, -929, -929, -929, -929}, -{ -359, -359, -359, -359, -359}, -{ -789, -789, -789, -789, -789}, -{ -549, -549, -549, -549, -549}}, -/* @.CG..GC */ -{{ -50, -50, -50, -50, -50}, -{ -609, -609, -609, -609, -609}, -{ -359, -359, -359, -359, -359}, -{ -669, -669, -669, -669, -669}, -{ -549, -549, -549, -549, -549}}, -/* @.CU..GC */ -{{ -50, -50, -50, -50, -50}, -{ -929, -929, -929, -929, -929}, -{ -439, -439, -439, -439, -439}, -{ -789, -789, -789, -789, -789}, -{ -619, -619, -619, -619, -619}}}, -/* @.G@..GC */ -{{{ -50, -50, -50, -50, -50}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.GA..GC */ -{{ -50, -50, -50, -50, -50}, -{ -569, -569, -569, -569, -569}, -{ -769, -769, -769, -769, -769}, -{ -759, -759, -759, -759, -759}, -{ -549, -549, -549, -549, -549}}, -/* @.GC..GC */ -{{ -50, -50, -50, -50, -50}, -{ -929, -929, -929, -929, -929}, -{ -359, -359, -359, -359, -359}, -{ -789, -789, -789, -789, -789}, -{ -549, -549, -549, -549, -549}}, -/* @.GG..GC */ -{{ -50, -50, -50, -50, -50}, -{ -609, -609, -609, -609, -609}, -{ -359, -359, -359, -359, -359}, -{ -669, -669, -669, -669, -669}, -{ -549, -549, -549, -549, -549}}, -/* @.GU..GC */ -{{ -50, -50, -50, -50, -50}, -{ -929, -929, -929, -929, -929}, -{ -439, -439, -439, -439, -439}, -{ -789, -789, -789, -789, -789}, -{ -619, -619, -619, -619, -619}}}, -/* @.U@..GC */ -{{{ -50, -50, -50, -50, -50}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.UA..GC */ -{{ -50, -50, -50, -50, -50}, -{ -569, -569, -569, -569, -569}, -{ -769, -769, -769, -769, -769}, -{ -759, -759, -759, -759, -759}, -{ -549, -549, -549, -549, -549}}, -/* @.UC..GC */ -{{ -50, -50, -50, -50, -50}, -{ -929, -929, -929, -929, -929}, -{ -359, -359, -359, -359, -359}, -{ -789, -789, -789, -789, -789}, -{ -549, -549, -549, -549, -549}}, -/* @.UG..GC */ -{{ -50, -50, -50, -50, -50}, -{ -609, -609, -609, -609, -609}, -{ -359, -359, -359, -359, -359}, -{ -669, -669, -669, -669, -669}, -{ -549, -549, -549, -549, -549}}, -/* @.UU..GC */ -{{ -50, -50, -50, -50, -50}, -{ -929, -929, -929, -929, -929}, -{ -439, -439, -439, -439, -439}, -{ -789, -789, -789, -789, -789}, -{ -619, -619, -619, -619, -619}}}}, -/* @.@@..GU */ -{{{{ -50, -50, -50, -50, -50}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.@A..GU */ -{{ -50, -50, -50, -50, -50}, -{ -479, -479, -479, -479, -479}, -{ -309, -309, -309, -309, -309}, -{ -389, -389, -389, -389, -389}, -{ -379, -379, -379, -379, -379}}, -/* @.@C..GU */ -{{ -50, -50, -50, -50, -50}, -{ -649, -649, -649, -649, -649}, -{ -289, -289, -289, -289, -289}, -{ -739, -739, -739, -739, -739}, -{ -379, -379, -379, -379, -379}}, -/* @.@G..GU */ -{{ -50, -50, -50, -50, -50}, -{ -649, -649, -649, -649, -649}, -{ -289, -289, -289, -289, -289}, -{ -739, -739, -739, -739, -739}, -{ -379, -379, -379, -379, -379}}, -/* @.@U..GU */ -{{ -50, -50, -50, -50, -50}, -{ -649, -649, -649, -649, -649}, -{ -289, -289, -289, -289, -289}, -{ -739, -739, -739, -739, -739}, -{ -379, -379, -379, -379, -379}}}, -/* @.A@..GU */ -{{{ -50, -50, -50, -50, -50}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.AA..GU */ -{{ -50, -50, -50, -50, -50}, -{ -479, -479, -479, -479, -479}, -{ -309, -309, -309, -309, -309}, -{ -389, -389, -389, -389, -389}, -{ -379, -379, -379, -379, -379}}, -/* @.AC..GU */ -{{ -50, -50, -50, -50, -50}, -{ -649, -649, -649, -649, -649}, -{ -289, -289, -289, -289, -289}, -{ -739, -739, -739, -739, -739}, -{ -379, -379, -379, -379, -379}}, -/* @.AG..GU */ -{{ -50, -50, -50, -50, -50}, -{ -649, -649, -649, -649, -649}, -{ -289, -289, -289, -289, -289}, -{ -739, -739, -739, -739, -739}, -{ -379, -379, -379, -379, -379}}, -/* @.AU..GU */ -{{ -50, -50, -50, -50, -50}, -{ -649, -649, -649, -649, -649}, -{ -289, -289, -289, -289, -289}, -{ -739, -739, -739, -739, -739}, -{ -379, -379, -379, -379, -379}}}, -/* @.C@..GU */ -{{{ -50, -50, -50, -50, -50}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.CA..GU */ -{{ -50, -50, -50, -50, -50}, -{ -479, -479, -479, -479, -479}, -{ -309, -309, -309, -309, -309}, -{ -389, -389, -389, -389, -389}, -{ -379, -379, -379, -379, -379}}, -/* @.CC..GU */ -{{ -50, -50, -50, -50, -50}, -{ -649, -649, -649, -649, -649}, -{ -289, -289, -289, -289, -289}, -{ -739, -739, -739, -739, -739}, -{ -379, -379, -379, -379, -379}}, -/* @.CG..GU */ -{{ -50, -50, -50, -50, -50}, -{ -649, -649, -649, -649, -649}, -{ -289, -289, -289, -289, -289}, -{ -739, -739, -739, -739, -739}, -{ -379, -379, -379, -379, -379}}, -/* @.CU..GU */ -{{ -50, -50, -50, -50, -50}, -{ -649, -649, -649, -649, -649}, -{ -289, -289, -289, -289, -289}, -{ -739, -739, -739, -739, -739}, -{ -379, -379, -379, -379, -379}}}, -/* @.G@..GU */ -{{{ -50, -50, -50, -50, -50}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.GA..GU */ -{{ -50, -50, -50, -50, -50}, -{ -479, -479, -479, -479, -479}, -{ -309, -309, -309, -309, -309}, -{ -389, -389, -389, -389, -389}, -{ -379, -379, -379, -379, -379}}, -/* @.GC..GU */ -{{ -50, -50, -50, -50, -50}, -{ -649, -649, -649, -649, -649}, -{ -289, -289, -289, -289, -289}, -{ -739, -739, -739, -739, -739}, -{ -379, -379, -379, -379, -379}}, -/* @.GG..GU */ -{{ -50, -50, -50, -50, -50}, -{ -649, -649, -649, -649, -649}, -{ -289, -289, -289, -289, -289}, -{ -739, -739, -739, -739, -739}, -{ -379, -379, -379, -379, -379}}, -/* @.GU..GU */ -{{ -50, -50, -50, -50, -50}, -{ -649, -649, -649, -649, -649}, -{ -289, -289, -289, -289, -289}, -{ -739, -739, -739, -739, -739}, -{ -379, -379, -379, -379, -379}}}, -/* @.U@..GU */ -{{{ -50, -50, -50, -50, -50}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.UA..GU */ -{{ -50, -50, -50, -50, -50}, -{ -479, -479, -479, -479, -479}, -{ -309, -309, -309, -309, -309}, -{ -389, -389, -389, -389, -389}, -{ -379, -379, -379, -379, -379}}, -/* @.UC..GU */ -{{ -50, -50, -50, -50, -50}, -{ -649, -649, -649, -649, -649}, -{ -289, -289, -289, -289, -289}, -{ -739, -739, -739, -739, -739}, -{ -379, -379, -379, -379, -379}}, -/* @.UG..GU */ -{{ -50, -50, -50, -50, -50}, -{ -649, -649, -649, -649, -649}, -{ -289, -289, -289, -289, -289}, -{ -739, -739, -739, -739, -739}, -{ -379, -379, -379, -379, -379}}, -/* @.UU..GU */ -{{ -50, -50, -50, -50, -50}, -{ -649, -649, -649, -649, -649}, -{ -289, -289, -289, -289, -289}, -{ -739, -739, -739, -739, -739}, -{ -379, -379, -379, -379, -379}}}}, -/* @.@@..UG */ -{{{{ -50, -50, -50, -50, -50}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.@A..UG */ -{{ -50, -50, -50, -50, -50}, -{ -769, -769, -769, -769, -769}, -{ -529, -529, -529, -529, -529}, -{ -709, -709, -709, -709, -709}, -{ -599, -599, -599, -599, -599}}, -/* @.@C..UG */ -{{ -50, -50, -50, -50, -50}, -{ -839, -839, -839, -839, -839}, -{ -529, -529, -529, -529, -529}, -{ -859, -859, -859, -859, -859}, -{ -489, -489, -489, -489, -489}}, -/* @.@G..UG */ -{{ -50, -50, -50, -50, -50}, -{-1009,-1009,-1009,-1009,-1009}, -{ -409, -409, -409, -409, -409}, -{ -969, -969, -969, -969, -969}, -{ -599, -599, -599, -599, -599}}, -/* @.@U..UG */ -{{ -50, -50, -50, -50, -50}, -{ -859, -859, -859, -859, -859}, -{ -529, -529, -529, -529, -529}, -{ -859, -859, -859, -859, -859}, -{ -409, -409, -409, -409, -409}}}, -/* @.A@..UG */ -{{{ -50, -50, -50, -50, -50}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.AA..UG */ -{{ -50, -50, -50, -50, -50}, -{ -769, -769, -769, -769, -769}, -{ -529, -529, -529, -529, -529}, -{ -709, -709, -709, -709, -709}, -{ -599, -599, -599, -599, -599}}, -/* @.AC..UG */ -{{ -50, -50, -50, -50, -50}, -{ -839, -839, -839, -839, -839}, -{ -529, -529, -529, -529, -529}, -{ -859, -859, -859, -859, -859}, -{ -489, -489, -489, -489, -489}}, -/* @.AG..UG */ -{{ -50, -50, -50, -50, -50}, -{-1009,-1009,-1009,-1009,-1009}, -{ -409, -409, -409, -409, -409}, -{ -969, -969, -969, -969, -969}, -{ -599, -599, -599, -599, -599}}, -/* @.AU..UG */ -{{ -50, -50, -50, -50, -50}, -{ -859, -859, -859, -859, -859}, -{ -529, -529, -529, -529, -529}, -{ -859, -859, -859, -859, -859}, -{ -409, -409, -409, -409, -409}}}, -/* @.C@..UG */ -{{{ -50, -50, -50, -50, -50}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.CA..UG */ -{{ -50, -50, -50, -50, -50}, -{ -769, -769, -769, -769, -769}, -{ -529, -529, -529, -529, -529}, -{ -709, -709, -709, -709, -709}, -{ -599, -599, -599, -599, -599}}, -/* @.CC..UG */ -{{ -50, -50, -50, -50, -50}, -{ -839, -839, -839, -839, -839}, -{ -529, -529, -529, -529, -529}, -{ -859, -859, -859, -859, -859}, -{ -489, -489, -489, -489, -489}}, -/* @.CG..UG */ -{{ -50, -50, -50, -50, -50}, -{-1009,-1009,-1009,-1009,-1009}, -{ -409, -409, -409, -409, -409}, -{ -969, -969, -969, -969, -969}, -{ -599, -599, -599, -599, -599}}, -/* @.CU..UG */ -{{ -50, -50, -50, -50, -50}, -{ -859, -859, -859, -859, -859}, -{ -529, -529, -529, -529, -529}, -{ -859, -859, -859, -859, -859}, -{ -409, -409, -409, -409, -409}}}, -/* @.G@..UG */ -{{{ -50, -50, -50, -50, -50}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.GA..UG */ -{{ -50, -50, -50, -50, -50}, -{ -769, -769, -769, -769, -769}, -{ -529, -529, -529, -529, -529}, -{ -709, -709, -709, -709, -709}, -{ -599, -599, -599, -599, -599}}, -/* @.GC..UG */ -{{ -50, -50, -50, -50, -50}, -{ -839, -839, -839, -839, -839}, -{ -529, -529, -529, -529, -529}, -{ -859, -859, -859, -859, -859}, -{ -489, -489, -489, -489, -489}}, -/* @.GG..UG */ -{{ -50, -50, -50, -50, -50}, -{-1009,-1009,-1009,-1009,-1009}, -{ -409, -409, -409, -409, -409}, -{ -969, -969, -969, -969, -969}, -{ -599, -599, -599, -599, -599}}, -/* @.GU..UG */ -{{ -50, -50, -50, -50, -50}, -{ -859, -859, -859, -859, -859}, -{ -529, -529, -529, -529, -529}, -{ -859, -859, -859, -859, -859}, -{ -409, -409, -409, -409, -409}}}, -/* @.U@..UG */ -{{{ -50, -50, -50, -50, -50}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.UA..UG */ -{{ -50, -50, -50, -50, -50}, -{ -769, -769, -769, -769, -769}, -{ -529, -529, -529, -529, -529}, -{ -709, -709, -709, -709, -709}, -{ -599, -599, -599, -599, -599}}, -/* @.UC..UG */ -{{ -50, -50, -50, -50, -50}, -{ -839, -839, -839, -839, -839}, -{ -529, -529, -529, -529, -529}, -{ -859, -859, -859, -859, -859}, -{ -489, -489, -489, -489, -489}}, -/* @.UG..UG */ -{{ -50, -50, -50, -50, -50}, -{-1009,-1009,-1009,-1009,-1009}, -{ -409, -409, -409, -409, -409}, -{ -969, -969, -969, -969, -969}, -{ -599, -599, -599, -599, -599}}, -/* @.UU..UG */ -{{ -50, -50, -50, -50, -50}, -{ -859, -859, -859, -859, -859}, -{ -529, -529, -529, -529, -529}, -{ -859, -859, -859, -859, -859}, -{ -409, -409, -409, -409, -409}}}}, -/* @.@@..AU */ -{{{{ -50, -50, -50, -50, -50}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.@A..AU */ -{{ -50, -50, -50, -50, -50}, -{ -479, -479, -479, -479, -479}, -{ -309, -309, -309, -309, -309}, -{ -389, -389, -389, -389, -389}, -{ -379, -379, -379, -379, -379}}, -/* @.@C..AU */ -{{ -50, -50, -50, -50, -50}, -{ -649, -649, -649, -649, -649}, -{ -289, -289, -289, -289, -289}, -{ -739, -739, -739, -739, -739}, -{ -379, -379, -379, -379, -379}}, -/* @.@G..AU */ -{{ -50, -50, -50, -50, -50}, -{ -649, -649, -649, -649, -649}, -{ -289, -289, -289, -289, -289}, -{ -739, -739, -739, -739, -739}, -{ -379, -379, -379, -379, -379}}, -/* @.@U..AU */ -{{ -50, -50, -50, -50, -50}, -{ -649, -649, -649, -649, -649}, -{ -289, -289, -289, -289, -289}, -{ -739, -739, -739, -739, -739}, -{ -379, -379, -379, -379, -379}}}, -/* @.A@..AU */ -{{{ -50, -50, -50, -50, -50}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.AA..AU */ -{{ -50, -50, -50, -50, -50}, -{ -479, -479, -479, -479, -479}, -{ -309, -309, -309, -309, -309}, -{ -389, -389, -389, -389, -389}, -{ -379, -379, -379, -379, -379}}, -/* @.AC..AU */ -{{ -50, -50, -50, -50, -50}, -{ -649, -649, -649, -649, -649}, -{ -289, -289, -289, -289, -289}, -{ -739, -739, -739, -739, -739}, -{ -379, -379, -379, -379, -379}}, -/* @.AG..AU */ -{{ -50, -50, -50, -50, -50}, -{ -649, -649, -649, -649, -649}, -{ -289, -289, -289, -289, -289}, -{ -739, -739, -739, -739, -739}, -{ -379, -379, -379, -379, -379}}, -/* @.AU..AU */ -{{ -50, -50, -50, -50, -50}, -{ -649, -649, -649, -649, -649}, -{ -289, -289, -289, -289, -289}, -{ -739, -739, -739, -739, -739}, -{ -379, -379, -379, -379, -379}}}, -/* @.C@..AU */ -{{{ -50, -50, -50, -50, -50}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.CA..AU */ -{{ -50, -50, -50, -50, -50}, -{ -479, -479, -479, -479, -479}, -{ -309, -309, -309, -309, -309}, -{ -389, -389, -389, -389, -389}, -{ -379, -379, -379, -379, -379}}, -/* @.CC..AU */ -{{ -50, -50, -50, -50, -50}, -{ -649, -649, -649, -649, -649}, -{ -289, -289, -289, -289, -289}, -{ -739, -739, -739, -739, -739}, -{ -379, -379, -379, -379, -379}}, -/* @.CG..AU */ -{{ -50, -50, -50, -50, -50}, -{ -649, -649, -649, -649, -649}, -{ -289, -289, -289, -289, -289}, -{ -739, -739, -739, -739, -739}, -{ -379, -379, -379, -379, -379}}, -/* @.CU..AU */ -{{ -50, -50, -50, -50, -50}, -{ -649, -649, -649, -649, -649}, -{ -289, -289, -289, -289, -289}, -{ -739, -739, -739, -739, -739}, -{ -379, -379, -379, -379, -379}}}, -/* @.G@..AU */ -{{{ -50, -50, -50, -50, -50}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.GA..AU */ -{{ -50, -50, -50, -50, -50}, -{ -479, -479, -479, -479, -479}, -{ -309, -309, -309, -309, -309}, -{ -389, -389, -389, -389, -389}, -{ -379, -379, -379, -379, -379}}, -/* @.GC..AU */ -{{ -50, -50, -50, -50, -50}, -{ -649, -649, -649, -649, -649}, -{ -289, -289, -289, -289, -289}, -{ -739, -739, -739, -739, -739}, -{ -379, -379, -379, -379, -379}}, -/* @.GG..AU */ -{{ -50, -50, -50, -50, -50}, -{ -649, -649, -649, -649, -649}, -{ -289, -289, -289, -289, -289}, -{ -739, -739, -739, -739, -739}, -{ -379, -379, -379, -379, -379}}, -/* @.GU..AU */ -{{ -50, -50, -50, -50, -50}, -{ -649, -649, -649, -649, -649}, -{ -289, -289, -289, -289, -289}, -{ -739, -739, -739, -739, -739}, -{ -379, -379, -379, -379, -379}}}, -/* @.U@..AU */ -{{{ -50, -50, -50, -50, -50}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.UA..AU */ -{{ -50, -50, -50, -50, -50}, -{ -479, -479, -479, -479, -479}, -{ -309, -309, -309, -309, -309}, -{ -389, -389, -389, -389, -389}, -{ -379, -379, -379, -379, -379}}, -/* @.UC..AU */ -{{ -50, -50, -50, -50, -50}, -{ -649, -649, -649, -649, -649}, -{ -289, -289, -289, -289, -289}, -{ -739, -739, -739, -739, -739}, -{ -379, -379, -379, -379, -379}}, -/* @.UG..AU */ -{{ -50, -50, -50, -50, -50}, -{ -649, -649, -649, -649, -649}, -{ -289, -289, -289, -289, -289}, -{ -739, -739, -739, -739, -739}, -{ -379, -379, -379, -379, -379}}, -/* @.UU..AU */ -{{ -50, -50, -50, -50, -50}, -{ -649, -649, -649, -649, -649}, -{ -289, -289, -289, -289, -289}, -{ -739, -739, -739, -739, -739}, -{ -379, -379, -379, -379, -379}}}}, -/* @.@@..UA */ -{{{{ -50, -50, -50, -50, -50}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.@A..UA */ -{{ -50, -50, -50, -50, -50}, -{ -449, -449, -449, -449, -449}, -{ -479, -479, -479, -479, -479}, -{ -429, -429, -429, -429, -429}, -{ -329, -329, -329, -329, -329}}, -/* @.@C..UA */ -{{ -50, -50, -50, -50, -50}, -{ -679, -679, -679, -679, -679}, -{ -559, -559, -559, -559, -559}, -{ -729, -729, -729, -729, -729}, -{ -189, -189, -189, -189, -189}}, -/* @.@G..UA */ -{{ -50, -50, -50, -50, -50}, -{ -939, -939, -939, -939, -939}, -{ -249, -249, -249, -249, -249}, -{ -939, -939, -939, -939, -939}, -{ -329, -329, -329, -329, -329}}, -/* @.@U..UA */ -{{ -50, -50, -50, -50, -50}, -{ -639, -639, -639, -639, -639}, -{ -229, -229, -229, -229, -229}, -{ -729, -729, -729, -729, -729}, -{ -190, -190, -190, -190, -190}}}, -/* @.A@..UA */ -{{{ -50, -50, -50, -50, -50}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.AA..UA */ -{{ -50, -50, -50, -50, -50}, -{ -449, -449, -449, -449, -449}, -{ -479, -479, -479, -479, -479}, -{ -429, -429, -429, -429, -429}, -{ -329, -329, -329, -329, -329}}, -/* @.AC..UA */ -{{ -50, -50, -50, -50, -50}, -{ -679, -679, -679, -679, -679}, -{ -559, -559, -559, -559, -559}, -{ -729, -729, -729, -729, -729}, -{ -189, -189, -189, -189, -189}}, -/* @.AG..UA */ -{{ -50, -50, -50, -50, -50}, -{ -939, -939, -939, -939, -939}, -{ -249, -249, -249, -249, -249}, -{ -939, -939, -939, -939, -939}, -{ -329, -329, -329, -329, -329}}, -/* @.AU..UA */ -{{ -50, -50, -50, -50, -50}, -{ -639, -639, -639, -639, -639}, -{ -229, -229, -229, -229, -229}, -{ -729, -729, -729, -729, -729}, -{ -190, -190, -190, -190, -190}}}, -/* @.C@..UA */ -{{{ -50, -50, -50, -50, -50}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.CA..UA */ -{{ -50, -50, -50, -50, -50}, -{ -449, -449, -449, -449, -449}, -{ -479, -479, -479, -479, -479}, -{ -429, -429, -429, -429, -429}, -{ -329, -329, -329, -329, -329}}, -/* @.CC..UA */ -{{ -50, -50, -50, -50, -50}, -{ -679, -679, -679, -679, -679}, -{ -559, -559, -559, -559, -559}, -{ -729, -729, -729, -729, -729}, -{ -189, -189, -189, -189, -189}}, -/* @.CG..UA */ -{{ -50, -50, -50, -50, -50}, -{ -939, -939, -939, -939, -939}, -{ -249, -249, -249, -249, -249}, -{ -939, -939, -939, -939, -939}, -{ -329, -329, -329, -329, -329}}, -/* @.CU..UA */ -{{ -50, -50, -50, -50, -50}, -{ -639, -639, -639, -639, -639}, -{ -229, -229, -229, -229, -229}, -{ -729, -729, -729, -729, -729}, -{ -190, -190, -190, -190, -190}}}, -/* @.G@..UA */ -{{{ -50, -50, -50, -50, -50}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.GA..UA */ -{{ -50, -50, -50, -50, -50}, -{ -449, -449, -449, -449, -449}, -{ -479, -479, -479, -479, -479}, -{ -429, -429, -429, -429, -429}, -{ -329, -329, -329, -329, -329}}, -/* @.GC..UA */ -{{ -50, -50, -50, -50, -50}, -{ -679, -679, -679, -679, -679}, -{ -559, -559, -559, -559, -559}, -{ -729, -729, -729, -729, -729}, -{ -189, -189, -189, -189, -189}}, -/* @.GG..UA */ -{{ -50, -50, -50, -50, -50}, -{ -939, -939, -939, -939, -939}, -{ -249, -249, -249, -249, -249}, -{ -939, -939, -939, -939, -939}, -{ -329, -329, -329, -329, -329}}, -/* @.GU..UA */ -{{ -50, -50, -50, -50, -50}, -{ -639, -639, -639, -639, -639}, -{ -229, -229, -229, -229, -229}, -{ -729, -729, -729, -729, -729}, -{ -190, -190, -190, -190, -190}}}, -/* @.U@..UA */ -{{{ -50, -50, -50, -50, -50}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.UA..UA */ -{{ -50, -50, -50, -50, -50}, -{ -449, -449, -449, -449, -449}, -{ -479, -479, -479, -479, -479}, -{ -429, -429, -429, -429, -429}, -{ -329, -329, -329, -329, -329}}, -/* @.UC..UA */ -{{ -50, -50, -50, -50, -50}, -{ -679, -679, -679, -679, -679}, -{ -559, -559, -559, -559, -559}, -{ -729, -729, -729, -729, -729}, -{ -189, -189, -189, -189, -189}}, -/* @.UG..UA */ -{{ -50, -50, -50, -50, -50}, -{ -939, -939, -939, -939, -939}, -{ -249, -249, -249, -249, -249}, -{ -939, -939, -939, -939, -939}, -{ -329, -329, -329, -329, -329}}, -/* @.UU..UA */ -{{ -50, -50, -50, -50, -50}, -{ -639, -639, -639, -639, -639}, -{ -229, -229, -229, -229, -229}, -{ -729, -729, -729, -729, -729}, -{ -190, -190, -190, -190, -190}}}}, -/* @.@@.. @ */ -{{{{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.@A.. @ */ -{{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.@C.. @ */ -{{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.@G.. @ */ -{{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.@U.. @ */ -{{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}}, -/* @.A@.. @ */ -{{{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.AA.. @ */ -{{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.AC.. @ */ -{{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.AG.. @ */ -{{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.AU.. @ */ -{{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}}, -/* @.C@.. @ */ -{{{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.CA.. @ */ -{{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.CC.. @ */ -{{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.CG.. @ */ -{{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.CU.. @ */ -{{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}}, -/* @.G@.. @ */ -{{{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.GA.. @ */ -{{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.GC.. @ */ -{{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.GG.. @ */ -{{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.GU.. @ */ -{{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}}, -/* @.U@.. @ */ -{{{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.UA.. @ */ -{{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.UC.. @ */ -{{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.UG.. @ */ -{{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}, -/* @.UU.. @ */ -{{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}, -{ -100, -100, -100, -100, -100}}}}}}; - -int -energy_param:: -getMaxNinio() -{ return MAX_NINIO; } - -int -energy_param:: -getNinio(int i) -{ return F_ninio37[i]; } - -int -energy_param::getDangle5(int i, int j) -{ return dangle5_37[convertPairType(i)][convertBaseType(j)]; } - -int -energy_param:: -getDangle3(int i, int j) -{ return dangle3_37[convertPairType(i)][convertBaseType(j)]; } - -int -energy_param:: -getHairpin(int i) -{ return hairpin37[i]; } - -int -energy_param:: -getInternalLoop(int i) -{ return internal_loop37[i]; } - -int -energy_param::getBulge(int i) -{ return bulge37[i]; } - -const char -*energy_param:: -getTetraLoop(int i) -{ return Tetrastrings[i]; } - -int -energy_param:: -getTetraLoopEnergy(int i) -{ return TETRA_ENERGY37[i]; } - -int -energy_param:: -getStack(int i, int j) -{ return stack37[convertPairType(i)][convertPairType(j)]; } - -int -energy_param:: -getTstackH(int i, int j) -{ return mismatchH37[convertPairType(i)][convertLeftType(j)][convertRightType(j)]; } - -int -energy_param:: -getTstackI(int i, int j) -{ return mismatchI37[convertPairType(i)][convertLeftType(j)][convertRightType(j)]; } - -int -energy_param:: -getInt11(int i, int j, int k) -{ return int11_37[convertPairType(i)][convertPairType(j)][convertLeftType(k)][convertRightType(k)]; } - -int -energy_param:: -getInt21(int i, int j, int k, int l) -{ return int21_37[convertPairType(i)][convertPairType(j)][convertLeftType(k)][convertBaseType(l)][convertRightType(k)]; } - -int -energy_param:: -getInt22(int i, int j, int k, int l) -{ return int22_37[convertPairType(i)][convertPairType(j)][convertLeftType(k)][convertLeftType(l)][convertRightType(l)][convertRightType(k)]; } - -int -energy_param:: -getMLintern() -{ return ML_intern37; } - -int -energy_param:: -getMLBase() -{ return ML_BASE37; } - -int -energy_param:: -getMLclosing() -{ return ML_closing37; } - -int -energy_param:: -getTerminalAU() -{ return TerminalAU; } - -/* - 1 C<->G 1 - 2 G<->C 2 - 3 G<->U 3 - 5 U<->G 4 - 0 A<->U 5 - 4 U<->A 6 - 6 0 - */ -int -energy_param:: -convertPairType(int type) -{ - if (type == 0) return 5; - else if(type == 1) return 1; - else if(type == 2) return 2; - else if(type == 3) return 3; - else if(type == 4) return 6; - else if(type == 5) return 4; - else if(type == 6) return 0; - else { cerr << "error convertPairType" << endl; exit(1); } -} - -/* - 0 A 1 - 1 C 2 - 2 G 3 - 3 U 4 - */ -int -energy_param:: -convertBaseType(int type) -{ - if (type == 0) return 1; - else if(type == 1) return 2; - else if(type == 2) return 3; - else if(type == 3) return 4; - else { cerr << "error convertBaseType" << endl; exit(1); } -} - -/* - A<->A 0 - A<->C 1 - A<->G 2 - A<->U 3 - C<->A 4 - C<->C 5 - C<->G 6 - C<->U 7 - G<->A 8 - G<->C 9 - G<->G 10 - G<->U 11 - U<->A 12 - U<->C 13 - U<->G 14 - U<->U 15 - */ -int -energy_param:: -convertLeftType(int type) -{ - if (0 <= type && type <= 3 ) { return 1; } - else if(4 <= type && type <= 7 ) { return 2; } - else if(8 <= type && type <= 11) { return 3; } - else if(12<= type && type <= 15) { return 4; } - else { cerr << "convertLeftType" << endl; exit(1); } -} - -int -energy_param:: -convertRightType(int type) -{ - if (type % 4 == 0) { return 1; } - else if(type % 4 == 1) { return 2; } - else if(type % 4 == 2) { return 3; } - else if(type % 4 == 3) { return 4; } - else { cerr << "convertRightType" << endl; exit(1); } -} -} diff --git a/binaries/src/mafft/extensions/mxscarna_src/vienna/energy_param.hpp b/binaries/src/mafft/extensions/mxscarna_src/vienna/energy_param.hpp deleted file mode 100644 index b6bcd4c..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/vienna/energy_param.hpp +++ /dev/null @@ -1,111 +0,0 @@ -/* - Current free energy parameters are summarized in: - - D.H.Mathews, J. Sabina, M. ZUker, D.H. Turner - "Expanded sequence dependence of thermodynamic parameters improves - prediction of RNA secondary structure" - JMB, 288, pp 911-940, 1999 - - Enthalpies taken from: - - A. Walter, D Turner, J Kim, M Lyttle, P M"uller, D Mathews, M Zuker - "Coaxial stckaing of helices enhances binding of oligoribonucleotides.." - PNAS, 91, pp 9218-9222, 1994 - - D.H. Turner, N. Sugimoto, and S.M. Freier. - "RNA Structure Prediction", - Ann. Rev. Biophys. Biophys. Chem. 17, 167-192, 1988. - - John A.Jaeger, Douglas H.Turner, and Michael Zuker. - "Improved predictions of secondary structures for RNA", - PNAS, 86, 7706-7710, October 1989. - - L. He, R. Kierzek, J. SantaLucia, A.E. Walter, D.H. Turner - "Nearest-Neughbor Parameters for GU Mismatches...." - Biochemistry 1991, 30 11124-11132 - - A.E. Peritz, R. Kierzek, N, Sugimoto, D.H. Turner - "Thermodynamic Study of Internal Loops in Oligoribonucleotides..." - Biochemistry 1991, 30, 6428--6435 - - -*/ - -#ifndef ENERGY_PARAM_H -#define ENERGY_PARAM_H - -#include -#include // by katoh - -using namespace std; -namespace MXSCARNA { -class energy_param { - - static const int INF; - static const int NST; - static const int DEF; - - static const double lxc37; /* parameter for logarithmic loop - energy extrapolation */ - static const int stack37[8][8]; - static const int enthalpies[8][8]; - static const int oldhairpin37[31]; - static const int hairpin37[31]; - static const int oldbulge37[31]; - static const int bulge37[31]; - static const int oldinternal_loop37[31]; - static const int internal_loop37[31]; - static const int mismatchI37[8][5][5]; - static const int mismatchH37[8][5][5]; - static const int mism_H[8][5][5]; - static const int dangle5_37[8][5]; - static const int dangle3_37[8][5]; - static const int dangle3_H[8][5]; - static const int dangle5_H[8][5]; - static const int ML_BASE37; - static const int ML_closing37; - static const int ML_intern37; - static const int MAX_NINIO; - static const int F_ninio37[5]; - static const char Tetraloops[1400]; - static const char Tetrastrings[30][7]; - static const int TETRA_ENERGY37[200]; - static const int TETRA_ENTH37; - static const int TerminalAU; - static const int DuplexInit; - - static const int int11_37[8][8][5][5]; - static const int int11_H[8][8][5][5]; - static const int int21_37[8][8][5][5][5]; - static const int int21_H[8][8][5][5][5]; - static const int int22_37[8][8][5][5][5][5]; - static const int int22_H[8][8][5][5][5][5]; - - int convertPairType(int type); - int convertBaseType(int type); - int convertLeftType(int type); - int convertRightType(int type); - - public: - int getMaxNinio(); - int getNinio(int i); - int getDangle5(int i, int j); - int getDangle3(int i, int j); - int getHairpin(int i); - int getInternalLoop(int i); - int getBulge(int i); - const char *getTetraLoop(int i); - int getTetraLoopEnergy(int i); - int getStack(int i, int j); - int getTstackH(int i, int j); - int getTstackI(int i, int j); - int getInt11(int i, int j, int k); - int getInt21(int i, int j, int k, int l); - int getInt22(int i, int j, int k, int l); - int getMLintern(); - int getMLBase(); - int getMLclosing(); - int getTerminalAU(); -}; -} -#endif diff --git a/binaries/src/mafft/extensions/mxscarna_src/vienna/params.h b/binaries/src/mafft/extensions/mxscarna_src/vienna/params.h deleted file mode 100644 index 46d6122..0000000 --- a/binaries/src/mafft/extensions/mxscarna_src/vienna/params.h +++ /dev/null @@ -1,32 +0,0 @@ -#include "energy_const.h" -typedef struct { - int id; - int stack[NBPAIRS+1][NBPAIRS+1]; - int hairpin[31]; - int bulge[MAXLOOP+1]; - int internal_loop[MAXLOOP+1]; - int mismatchI[NBPAIRS+1][5][5]; - int mismatchH[NBPAIRS+1][5][5]; - int mismatchM[NBPAIRS+1][5][5]; - int dangle5[NBPAIRS+1][5]; - int dangle3[NBPAIRS+1][5]; - int int11[NBPAIRS+1][NBPAIRS+1][5][5]; - int int21[NBPAIRS+1][NBPAIRS+1][5][5][5]; - int int22[NBPAIRS+1][NBPAIRS+1][5][5][5][5]; - int F_ninio[5]; - double lxc; - int MLbase; - int MLintern[NBPAIRS+1]; - int MLclosing; - int TerminalAU; - int DuplexInit; - int TETRA_ENERGY[200]; - char Tetraloops[1401]; - int Triloop_E[40]; - char Triloops[241]; - double temperature; -} paramT; - -extern paramT *scale_parameters(void); -extern paramT *copy_parameters(void); -extern paramT *set_parameters(paramT *dest); diff --git a/binaries/src/mafft/extensions/univscript.tmpl b/binaries/src/mafft/extensions/univscript.tmpl deleted file mode 100644 index d6200d2..0000000 --- a/binaries/src/mafft/extensions/univscript.tmpl +++ /dev/null @@ -1,36 +0,0 @@ -progs="_PROGS" -for prog in $progs; do - printf $prog" " -done - - -make clean -make CC="gcc-4.0" CFLAGS="-arch ppc64 -m64 -O3 -mmacosx-version-min=10.4 -isysroot/Developer/SDKs/MacOSX10.4u.sdk -DMACOSX_DEPLOYMENT_TARGET=10.4" CXX="g++-4.0" CXXFLAGS="-arch ppc64 -m64 -O3 -mmacosx-version-min=10.4 -isysroot/Developer/SDKs/MacOSX10.4u.sdk -DMACOSX_DEPLOYMENT_TARGET=10.4" -for prog in $progs; do - mv $prog $prog.ppc64 -done - -make clean -make CC="gcc-4.0" CFLAGS="-arch ppc -m32 -O3 -mmacosx-version-min=10.4 -isysroot/Developer/SDKs/MacOSX10.4u.sdk -DMACOSX_DEPLOYMENT_TARGET=10.4" CXX="g++-4.0" CXXFLAGS="-arch ppc -m32 -O3 -mmacosx-version-min=10.4 -isysroot/Developer/SDKs/MacOSX10.4u.sdk -DMACOSX_DEPLOYMENT_TARGET=10.4" -for prog in $progs; do - mv $prog $prog.ppc32 -done - -make clean -make CC="gcc-4.0" CFLAGS="-arch x86_64 -fast -m64 -mmacosx-version-min=10.4 -isysroot/Developer/SDKs/MacOSX10.4u.sdk -DMACOSX_DEPLOYMENT_TARGET=10.4" CXX="g++-4.0" CXXFLAGS="-arch x86_64 -fast -m64 -mmacosx-version-min=10.4 -isysroot/Developer/SDKs/MacOSX10.4u.sdk -DMACOSX_DEPLOYMENT_TARGET=10.4" -for prog in $progs; do - mv $prog $prog.intel64 -done - -make clean -make CC="gcc-4.0" CFLAGS="-arch i386 -fast -m32 -mmacosx-version-min=10.4 -isysroot/Developer/SDKs/MacOSX10.4u.sdk -DMACOSX_DEPLOYMENT_TARGET=10.4" CXX="g++-4.0" CXXFLAGS="-arch i386 -fast -m32 -mmacosx-version-min=10.4 -isysroot/Developer/SDKs/MacOSX10.4u.sdk -DMACOSX_DEPLOYMENT_TARGET=10.4" -for prog in $progs; do - mv $prog $prog.intel32 -done - -set $progs -for prog in $progs; do -# lipo -create $prog.icc $prog.ppc32 $prog.ppc64 -output $prog - lipo -create $prog.intel64 $prog.intel32 $prog.ppc32 $prog.ppc64 -output $prog - cp $prog ../binaries -done -- 1.7.10.2