in progress
[jalview.git] / forester / java / src / org / forester / development / neTest.java
1
2 package org.forester.development;
3
4 public class neTest {
5
6     public class DoublePointer {
7
8         private double _value;
9
10         DoublePointer( final double value ) {
11             _value = value;
12         }
13
14         double getValue() {
15             return _value;
16         }
17
18         void setValue( final double value ) {
19             _value = value;
20         }
21     }
22     double[][] eigvecs = new double[ 20 ][ 20 ];
23
24     //globals
25     //    void coeffs(double x, double y, double *c, double *s, double accuracy)
26     //    { /* compute cosine and sine of theta */
27     //      double root;
28     //
29     //      root = sqrt(x * x + y * y);
30     //      if (root < accuracy) {
31     //        *c = 1.0;
32     //        *s = 0.0;
33     //      } else {
34     //        *c = x / root;
35     //        *s = y / root;
36     //      }
37     //    }  /* coeffs */
38     // compute cosine and sine of theta
39     void coeffs( final double x, final double y, final DoublePointer c, final DoublePointer s, final double accuracy ) {
40         final double root = Math.sqrt( ( x * x ) + ( y * y ) );
41         if ( root < accuracy ) {
42             c.setValue( 1.0 );
43             s.setValue( 0.0 );
44         }
45         else {
46             c.setValue( x / root );
47             s.setValue( y / root );
48         }
49     }
50
51     //    void tridiag(double (*a)[20], long n, double accuracy)
52     //    { /* Givens tridiagonalization */
53     //      long i, j;
54     //      double s, c;
55     //
56     //      for (i = 2; i < n; i++) {
57     //        for (j = i + 1; j <= n; j++) {
58     //          coeffs(a[i - 2][i - 1], a[i - 2][j - 1], &c, &s,accuracy);
59     //          givens(a, i, j, n, c, s, true);
60     //          givens(a, i, j, n, c, s, false);
61     //          givens(eigvecs, i, j, n, c, s, true);
62     //        }
63     //      }
64     //    }  /* tridiag */
65     // Givens tridiagonalization 
66     void tridiag( final double a[][], final int n, final double accuracy ) {
67         int i, j;
68         double s, c;
69         final DoublePointer sp = new DoublePointer( 0 );
70         final DoublePointer cp = new DoublePointer( 0 );
71         for( i = 2; i < n; i++ ) {
72             for( j = i + 1; j <= n; j++ ) {
73                 coeffs( a[ i - 2 ][ i - 1 ], a[ i - 2 ][ j - 1 ], cp, sp, accuracy );
74                 c = cp.getValue();
75                 s = sp.getValue();
76                 givens( a, i, j, n, c, s, true );
77                 givens( a, i, j, n, c, s, false );
78                 givens( eigvecs, i, j, n, c, s, true );
79             }
80         }
81     } /* tridiag */
82
83     //    void shiftqr(double (*a)[20], long n, double accuracy)
84     //    { /* QR eigenvalue-finder */
85     //      long i, j;
86     //      double approx, s, c, d, TEMP, TEMP1;
87     //
88     //      for (i = n; i >= 2; i--) {
89     //        do {
90     //          TEMP = a[i - 2][i - 2] - a[i - 1][i - 1];
91     //          TEMP1 = a[i - 1][i - 2];
92     //          d = sqrt(TEMP * TEMP + TEMP1 * TEMP1);
93     //          approx = a[i - 2][i - 2] + a[i - 1][i - 1];
94     //          if (a[i - 1][i - 1] < a[i - 2][i - 2])
95     //            approx = (approx - d) / 2.0;
96     //          else
97     //            approx = (approx + d) / 2.0;
98     //          for (j = 0; j < i; j++)
99     //            a[j][j] -= approx;
100     //          for (j = 1; j < i; j++) {
101     //            coeffs(a[j - 1][j - 1], a[j][j - 1], &c, &s, accuracy);
102     //            givens(a, j, j + 1, i, c, s, true);
103     //            givens(a, j, j + 1, i, c, s, false);
104     //            givens(eigvecs, j, j + 1, n, c, s, true);
105     //          }
106     //          for (j = 0; j < i; j++)
107     //            a[j][j] += approx;
108     //        } while (fabs(a[i - 1][i - 2]) > accuracy);
109     //      }
110     //    }  /* shiftqr */
111     //
112     // QR eigenvalue-finder 
113     void shiftqr( final double a[][], final int n, final double accuracy ) {
114         int i, j;
115         double approx;
116         final DoublePointer sp = new DoublePointer( 0 );
117         final DoublePointer cp = new DoublePointer( 0 );
118         double s;
119         double c;
120         double d;
121         double TEMP;
122         double TEMP1;
123         for( i = n; i >= 2; i-- ) {
124             do {
125                 TEMP = a[ i - 2 ][ i - 2 ] - a[ i - 1 ][ i - 1 ];
126                 TEMP1 = a[ i - 1 ][ i - 2 ];
127                 d = Math.sqrt( ( TEMP * TEMP ) + ( TEMP1 * TEMP1 ) );
128                 approx = a[ i - 2 ][ i - 2 ] + a[ i - 1 ][ i - 1 ];
129                 if ( a[ i - 1 ][ i - 1 ] < a[ i - 2 ][ i - 2 ] ) {
130                     approx = ( approx - d ) / 2.0;
131                 }
132                 else {
133                     approx = ( approx + d ) / 2.0;
134                 }
135                 for( j = 0; j < i; j++ ) {
136                     a[ j ][ j ] -= approx;
137                 }
138                 for( j = 1; j < i; j++ ) {
139                     coeffs( a[ j - 1 ][ j - 1 ], a[ j ][ j - 1 ], cp, sp, accuracy );
140                     c = cp.getValue();
141                     s = sp.getValue();
142                     givens( a, j, j + 1, i, c, s, true );
143                     givens( a, j, j + 1, i, c, s, false );
144                     givens( eigvecs, j, j + 1, n, c, s, true );
145                 }
146                 for( j = 0; j < i; j++ ) {
147                     a[ j ][ j ] += approx;
148                 }
149             } while ( Math.abs( a[ i - 1 ][ i - 2 ] ) > accuracy );
150         }
151     } /* shiftqr */
152
153     //    void givens(double (*a)[20], long i, long j, long n, double ctheta,
154     //                double stheta, boolean left)
155     //{ /* Givens transform at i,j for 1..n with angle theta */
156     //long k;
157     //double d;
158     //
159     //for (k = 0; k < n; k++) {
160     //if (left) {
161     //d = ctheta * a[i - 1][k] + stheta * a[j - 1][k];
162     //a[j - 1][k] = ctheta * a[j - 1][k] - stheta * a[i - 1][k];
163     //a[i - 1][k] = d;
164     //} else {
165     //d = ctheta * a[k][i - 1] + stheta * a[k][j - 1];
166     //a[k][j - 1] = ctheta * a[k][j - 1] - stheta * a[k][i - 1];
167     //a[k][i - 1] = d;
168     //}
169     //}
170     //}  /* givens */
171     //
172     // Givens transform at i,j for 1..n with angle theta 
173     void givens( final double a[][],
174                  final int i,
175                  final int j,
176                  final int n,
177                  final double ctheta,
178                  final double stheta,
179                  final boolean left ) {
180         int k;
181         double d;
182         for( k = 0; k < n; k++ ) {
183             if ( left ) {
184                 d = ( ctheta * a[ i - 1 ][ k ] ) + ( stheta * a[ j - 1 ][ k ] );
185                 a[ j - 1 ][ k ] = ( ctheta * a[ j - 1 ][ k ] ) - ( stheta * a[ i - 1 ][ k ] );
186                 a[ i - 1 ][ k ] = d;
187             }
188             else {
189                 d = ( ctheta * a[ k ][ i - 1 ] ) + ( stheta * a[ k ][ j - 1 ] );
190                 a[ k ][ j - 1 ] = ( ctheta * a[ k ][ j - 1 ] ) - ( stheta * a[ k ][ i - 1 ] );
191                 a[ k ][ i - 1 ] = d;
192             }
193         }
194     }
195     // this jtt matrix decomposition due to Elisabeth  Tillier 
196     final private static double jtteigs[]    = { +0.00000000000000, -1.81721720738768, -1.87965834528616,
197             -1.61403121885431, -1.53896608443751, -1.40486966367848, -1.30995061286931, -1.24668414819041,
198             -1.17179756521289, -0.31033320987464, -0.34602837857034, -1.06031718484613, -0.99900602987105,
199             -0.45576774888948, -0.86014403434677, -0.54569432735296, -0.76866956571861, -0.60593589295327,
200             -0.65119724379348, -0.70249806480753 };
201     final private static double jttprobs[][] = {
202             { +0.07686196156903, +0.05105697447152, +0.04254597872702, +0.05126897436552, +0.02027898986051,
203             +0.04106097946952, +0.06181996909002, +0.07471396264303, +0.02298298850851, +0.05256897371552,
204             +0.09111095444453, +0.05949797025102, +0.02341398829301, +0.04052997973502, +0.05053197473402,
205             +0.06822496588753, +0.05851797074102, +0.01433599283201, +0.03230298384851, +0.06637396681302 },
206             { -0.04445795120462, -0.01557336502860, -0.09314817363516, +0.04411372100382, -0.00511178725134,
207             +0.00188472427522, -0.02176250428454, -0.01330231089224, +0.01004072641973, +0.02707838224285,
208             -0.00785039050721, +0.02238829876349, +0.00257470703483, -0.00510311699563, -0.01727154263346,
209             +0.20074235330882, -0.07236268502973, -0.00012690116016, -0.00215974664431, -0.01059243778174 },
210             { +0.09480046389131, +0.00082658405814, +0.01530023104155, -0.00639909042723, +0.00160605602061,
211             +0.00035896642912, +0.00199161318384, -0.00220482855717, -0.00112601328033, +0.14840201765438,
212             -0.00344295714983, -0.00123976286718, -0.00439399942758, +0.00032478785709, -0.00104270266394,
213             -0.02596605592109, -0.05645800566901, +0.00022319903170, -0.00022792271829, -0.16133258048606 },
214             { -0.06924141195400, -0.01816245289173, -0.08104005811201, +0.08985697111009, +0.00279659017898,
215             +0.01083740322821, -0.06449599336038, +0.01794514261221, +0.01036809141699, +0.04283504450449,
216             +0.00634472273784, +0.02339134834111, -0.01748667848380, +0.00161859106290, +0.00622486432503,
217             -0.05854130195643, +0.15083728660504, +0.00030733757661, -0.00143739522173, -0.05295810171941 },
218             { -0.14637948915627, +0.02029296323583, +0.02615316895036, -0.10311538564943, -0.00183412744544,
219             -0.02589124656591, +0.11073673851935, +0.00848581728407, +0.00106057791901, +0.05530240732939,
220             -0.00031533506946, -0.03124002869407, -0.01533984125301, -0.00288717337278, +0.00272787410643,
221             +0.06300929916280, +0.07920438311152, -0.00041335282410, -0.00011648873397, -0.03944076085434 },
222             { -0.05558229086909, +0.08935293782491, +0.04869509588770, +0.04856877988810, -0.00253836047720,
223             +0.07651693957635, -0.06342453535092, -0.00777376246014, -0.08570270266807, +0.01943016473512,
224             -0.00599516526932, -0.09157595008575, -0.00397735155663, -0.00440093863690, -0.00232998056918,
225             +0.02979967701162, -0.00477299485901, -0.00144011795333, +0.01795114942404, -0.00080059359232 },
226             { +0.05807741644682, +0.14654292420341, -0.06724975334073, +0.02159062346633, -0.00339085518294,
227             -0.06829036785575, +0.03520631903157, -0.02766062718318, +0.03485632707432, -0.02436836692465,
228             -0.00397566003573, -0.10095488644404, +0.02456887654357, +0.00381764117077, -0.00906261340247,
229             -0.01043058066362, +0.01651199513994, -0.00210417220821, -0.00872508520963, -0.01495915462580 },
230             { +0.02564617106907, +0.02960554611436, -0.00052356748770, +0.00989267817318, -0.00044034172141,
231             -0.02279910634723, -0.00363768356471, -0.01086345665971, +0.01229721799572, +0.02633650142592,
232             +0.06282966783922, -0.00734486499924, -0.13863936313277, -0.00993891943390, -0.00655309682350,
233             -0.00245191788287, -0.02431633805559, -0.00068554031525, -0.00121383858869, +0.06280025239509 },
234             { +0.11362428251792, -0.02080375718488, -0.08802750967213, -0.06531316372189, -0.00166626058292,
235             +0.06846081717224, +0.07007301248407, -0.01713112936632, -0.05900588794853, -0.04497159138485,
236             +0.04222484636983, +0.00129043178508, -0.01550337251561, -0.01553102163852, -0.04363429852047,
237             +0.01600063777880, +0.05787328925647, -0.00008265841118, +0.02870014572813, -0.02657681214523 },
238             { +0.01840541226842, +0.00610159018805, +0.01368080422265, +0.02383751807012, -0.00923516894192,
239             +0.01209943150832, +0.02906782189141, +0.01992384905334, +0.00197323568330, +0.00017531415423,
240             -0.01796698381949, +0.01887083962858, -0.00063335886734, -0.02365277334702, +0.01209445088200,
241             +0.01308086447947, +0.01286727242301, -0.11420358975688, -0.01886991700613, +0.00238338728588 },
242             { -0.01100105031759, -0.04250695864938, -0.02554356700969, -0.05473632078607, +0.00725906469946,
243             -0.03003724918191, -0.07051526125013, -0.06939439879112, -0.00285883056088, +0.05334304124753,
244             +0.12839241846919, -0.05883473754222, +0.02424304967487, +0.09134510778469, -0.00226003347193,
245             -0.01280041778462, -0.00207988305627, -0.02957493909199, +0.05290385686789, +0.05465710875015 },
246             { -0.01421274522011, +0.02074863337778, -0.01006411985628, +0.03319995456446, -0.00005371699269,
247             -0.12266046460835, +0.02419847062899, -0.00441168706583, -0.08299118738167, -0.00323230913482,
248             +0.02954035119881, +0.09212856795583, +0.00718635627257, -0.02706936115539, +0.04473173279913,
249             -0.01274357634785, -0.01395862740618, -0.00071538848681, +0.04767640012830, -0.00729728326990 },
250             { -0.03797680968123, +0.01280286509478, -0.08614616553187, -0.01781049963160, +0.00674319990083,
251             +0.04208667754694, +0.05991325707583, +0.03581015660092, -0.01529816709967, +0.06885987924922,
252             -0.11719120476535, -0.00014333663810, +0.00074336784254, +0.02893416406249, +0.07466151360134,
253             -0.08182016471377, -0.06581536577662, -0.00018195976501, +0.00167443595008, +0.09015415667825 },
254             { +0.03577726799591, -0.02139253448219, -0.01137813538175, -0.01954939202830, -0.04028242801611,
255             -0.01777500032351, -0.02106862264440, +0.00465199658293, -0.02824805812709, +0.06618860061778,
256             +0.08437791757537, -0.02533125946051, +0.02806344654855, -0.06970805797879, +0.02328376968627,
257             +0.00692992333282, +0.02751392122018, +0.01148722812804, -0.11130404325078, +0.07776346000559 },
258             { -0.06014297925310, -0.00711674355952, -0.02424493472566, +0.00032464353156, +0.00321221847573,
259             +0.03257969053884, +0.01072805771161, +0.06892027923996, +0.03326534127710, -0.01558838623875,
260             +0.13794237677194, -0.04292623056646, +0.01375763233229, -0.11125153774789, +0.03510076081639,
261             -0.04531670712549, -0.06170413486351, -0.00182023682123, +0.05979891871679, -0.02551802851059 },
262             { -0.03515069991501, +0.02310847227710, +0.00474493548551, +0.02787717003457, -0.12038329679812,
263             +0.03178473522077, +0.04445111601130, -0.05334957493090, +0.01290386678474, -0.00376064171612,
264             +0.03996642737967, +0.04777677295520, +0.00233689200639, +0.03917715404594, -0.01755598277531,
265             -0.03389088626433, -0.02180780263389, +0.00473402043911, +0.01964539477020, -0.01260807237680 },
266             { -0.04120428254254, +0.00062717164978, -0.01688703578637, +0.01685776910152, +0.02102702093943,
267             +0.01295781834163, +0.03541815979495, +0.03968150445315, -0.02073122710938, -0.06932247350110,
268             +0.11696314241296, -0.00322523765776, -0.01280515661402, +0.08717664266126, +0.06297225078802,
269             -0.01290501780488, -0.04693925076877, -0.00177653675449, -0.08407812137852, -0.08380714022487 },
270             { +0.03138655228534, -0.09052573757196, +0.00874202219428, +0.06060593729292, -0.03426076652151,
271             -0.04832468257386, +0.04735628794421, +0.14504653737383, -0.01709111334001, -0.00278794215381,
272             -0.03513813820550, -0.11690294831883, -0.00836264902624, +0.03270980973180, -0.02587764129811,
273             +0.01638786059073, +0.00485499822497, +0.00305477087025, +0.02295754527195, +0.00616929722958 },
274             { -0.04898722042023, -0.01460879656586, +0.00508708857036, +0.07730497806331, +0.04252420017435,
275             +0.00484232580349, +0.09861807969412, -0.05169447907187, -0.00917820907880, +0.03679081047330,
276             +0.04998537112655, +0.00769330211980, +0.01805447683564, -0.00498723245027, -0.14148416183376,
277             -0.05170281760262, -0.03230723310784, -0.00032890672639, -0.02363523071957, +0.03801365471627 },
278             { -0.02047562162108, +0.06933781779590, -0.02101117884731, -0.06841945874842, -0.00860967572716,
279             -0.00886650271590, -0.07185241332269, +0.16703684361030, -0.00635847581692, +0.00811478913823,
280             +0.01847205842216, +0.06700967948643, +0.00596607376199, +0.02318239240593, -0.10552958537847,
281             -0.01980199747773, -0.02003785382406, -0.00593392430159, -0.00965391033612, +0.00743094349652 } };
282     // PMB matrix decomposition courtesy of Elisabeth Tillier 
283     final private static double pmbeigs[]    = { 0.0000001586972220, -1.8416770496147100, -1.6025046986139100,
284             -1.5801012515121300, -1.4987794099715900, -1.3520794233801900, -1.3003469390479700, -1.2439503327631300,
285             -1.1962574080244200, -1.1383730501367500, -1.1153278910708000, -0.4934843510654760, -0.5419014550215590,
286             -0.9657997830826700, -0.6276075673757390, -0.6675927795018510, -0.6932641383465870, -0.8897872681859630,
287             -0.8382698977371710, -0.8074694642446040 };
288     final private static double pmbprobs[][] = {
289             { 0.0771762457248147, 0.0531913844998640, 0.0393445076407294, 0.0466756566755510, 0.0286348361997465,
290             0.0312327748383639, 0.0505410248721427, 0.0767106611472993, 0.0258916271688597, 0.0673140562194124,
291             0.0965705469252199, 0.0515979465932174, 0.0250628079438675, 0.0503492018628350, 0.0399908189418273,
292             0.0641898881894471, 0.0517539616710987, 0.0143507440546115, 0.0357994592438322, 0.0736218495862984 },
293             { 0.0368263046116572, -0.0006728917107827, 0.0008590805287740, -0.0002764255356960, 0.0020152937187455,
294             0.0055743720652960, 0.0003213317669367, 0.0000449190281568, -0.0004226254397134, 0.1805040629634510,
295             -0.0272246813586204, 0.0005904606533477, -0.0183743200073889, -0.0009194625608688, 0.0008173657533167,
296             -0.0262629806302238, 0.0265738757209787, 0.0002176606241904, 0.0021315644838566, -0.1823229927207580 },
297             { -0.0194800075560895, 0.0012068088610652, -0.0008803318319596, -0.0016044273960017, -0.0002938633803197,
298             -0.0535796754602196, 0.0155163896648621, -0.0015006360762140, 0.0021601372013703, 0.0268513218744797,
299             -0.1085292493742730, 0.0149753083138452, 0.1346457366717310, -0.0009371698759829, 0.0013501708044116,
300             0.0346352293103622, -0.0276963770242276, 0.0003643142783940, 0.0002074817333067, -0.0174108903914110 },
301             { 0.0557839400850153, 0.0023271577185437, 0.0183481103396687, 0.0023339480096311, 0.0002013267015151,
302             -0.0227406863569852, 0.0098644845475047, 0.0064721276774396, 0.0001389408104210, -0.0473713878768274,
303             -0.0086984445005797, 0.0026913674934634, 0.0283724052562196, 0.0001063665179457, 0.0027442574779383,
304             -0.1875312134708470, 0.1279864877057640, 0.0005103347834563, 0.0003155113168637, 0.0081451082759554 },
305             { 0.0037510125027265, 0.0107095920636885, 0.0147305410328404, -0.0112351252180332, -0.0001500408626446,
306             -0.1523450933729730, 0.0611532413339872, -0.0005496748939503, 0.0048714378736644, -0.0003826320053999,
307             0.0552010244407311, 0.0482555671001955, -0.0461664995115847, -0.0021165008617978, -0.0004574454232187,
308             0.0233755883688949, -0.0035484915422384, 0.0009090698422851, 0.0013840637687758, -0.0073895139302231 },
309             { -0.0111512564930024, 0.1025460064723080, 0.0396772456883791, -0.0298408501361294, -0.0001656742634733,
310             -0.0079876311843289, 0.0712644184507945, -0.0010780604625230, -0.0035880882043592, 0.0021070399334252,
311             0.0016716329894279, -0.1810123023850110, 0.0015141703608724, -0.0032700852781804, 0.0035503782441679,
312             0.0118634302028026, 0.0044561606458028, -0.0001576678495964, 0.0023470722225751, -0.0027457045397157 },
313             { 0.1474525743949170, -0.0054432538500293, 0.0853848892349828, -0.0137787746207348, -0.0008274830358513,
314             0.0042248844582553, 0.0019556229305563, -0.0164191435175148, -0.0024501858854849, 0.0120908948084233,
315             -0.0381456105972653, 0.0101271614855119, -0.0061945941321859, 0.0178841099895867, -0.0014577779202600,
316             -0.0752120602555032, -0.1426985695849920, 0.0002862275078983, -0.0081191734261838, 0.0313401149422531 },
317             { 0.0542034611735289, -0.0078763926211829, 0.0060433542506096, 0.0033396210615510, 0.0013965072374079,
318             0.0067798903832256, -0.0135291136622509, -0.0089982442731848, -0.0056744537593887, -0.0766524225176246,
319             0.1881210263933930, -0.0065875518675173, 0.0416627569300375, -0.0953804133524747, -0.0012559228448735,
320             0.0101622644292547, -0.0304742453119050, 0.0011702318499737, 0.0454733434783982, -0.1119239362388150 },
321             { 0.1069409037912470, 0.0805064400880297, -0.1127352030714600, 0.1001181253523260, -0.0021480427488769,
322             -0.0332884841459003, -0.0679837575848452, -0.0043812841356657, 0.0153418716846395, -0.0079441315103188,
323             -0.0121766182046363, -0.0381127991037620, -0.0036338726532673, 0.0195324059593791, -0.0020165963699984,
324             -0.0061222685010268, -0.0253761448771437, -0.0005246410999057, -0.0112205170502433, 0.0052248485517237 },
325             { -0.0325247648326262, 0.0238753651653669, 0.0203684886605797, 0.0295666232678825, -0.0003946714764213,
326             -0.0157242718469554, -0.0511737848084862, 0.0084725632040180, -0.0167068828528921, 0.0686962159427527,
327             -0.0659702890616198, -0.0014289912494271, -0.0167000964093416, -0.1276689083678200, 0.0036575057830967,
328             -0.0205958145531018, 0.0000368919612829, 0.0014413626622426, 0.1064360941926030, 0.0863372661517408 },
329             { -0.0463777468104402, 0.0394712148670596, 0.1118686750747160, 0.0440711686389031, -0.0026076286506751,
330             -0.0268454015202516, -0.1464943067133240, -0.0137514051835380, -0.0094395514284145, -0.0144124844774228,
331             0.0249103379323744, -0.0071832157138676, 0.0035592787728526, 0.0415627419826693, 0.0027040097365669,
332             0.0337523666612066, 0.0316121324137152, -0.0011350177559026, -0.0349998884574440, -0.0302651879823361 },
333             { 0.0142360925194728, 0.0413145623127025, 0.0324976427846929, 0.0580930922002398, -0.0586974207121084,
334             0.0202001168873069, 0.0492204086749069, 0.1126593173463060, 0.0116620013776662, -0.0780333711712066,
335             -0.1109786767320410, 0.0407775100936731, -0.0205013161312652, -0.0653458585025237, 0.0347351829703865,
336             0.0304448983224773, 0.0068813748197884, -0.0189002309261882, -0.0334507528405279, -0.0668143558699485 },
337             { -0.0131548829657936, 0.0044244322828034, -0.0050639951827271, -0.0038668197633889, -0.1536822386530220,
338             0.0026336969165336, 0.0021585651200470, -0.0459233839062969, 0.0046854727140565, 0.0393815434593599,
339             0.0619554007991097, 0.0027456299925622, 0.0117574347936383, 0.0373018612990383, 0.0024818527553328,
340             -0.0133956606027299, -0.0020457128424105, 0.0154178819990401, 0.0246524142683911, 0.0275363065682921 },
341             { -0.1542307272455030, 0.0364861558267547, -0.0090880407008181, 0.0531673937889863, 0.0157585615170580,
342             0.0029986538457297, 0.0180194047699875, 0.0652152443589317, 0.0266842840376180, 0.0388457366405908,
343             0.0856237634510719, 0.0126955778952183, 0.0099593861698250, -0.0013941794862563, 0.0294065511237513,
344             -0.1151906949298290, -0.0852991447389655, 0.0028699120202636, -0.0332087026659522, 0.0006811857297899 },
345             { 0.0281300736924501, -0.0584072081898638, -0.0178386569847853, -0.0536470338171487, -0.0186881656029960,
346             -0.0240008730656106, -0.0541064820498883, 0.2217137098936020, -0.0260500001542033, 0.0234505236798375,
347             0.0311127151218573, -0.0494139126682672, 0.0057093465049849, 0.0124937286655911, -0.0298322975915689,
348             0.0006520211333102, -0.0061018680727128, -0.0007081999479528, -0.0060523759094034, 0.0215845995364623 },
349             { 0.0295321046399105, -0.0088296411830544, -0.0065057049917325, -0.0053478115612781, -0.0100646496794634,
350             -0.0015473619084872, 0.0008539960632865, -0.0376381933046211, -0.0328135588935604, 0.0672161874239480,
351             0.0667626853916552, -0.0026511651464901, 0.0140451514222062, -0.0544836996133137, 0.0427485157912094,
352             0.0097455780205802, 0.0177309072915667, -0.0828759701187452, -0.0729504795471370, 0.0670731961252313 },
353             { 0.0082646581043963, -0.0319918630534466, -0.0188454445200422, -0.0374976353856606, 0.0037131290686848,
354             -0.0132507796987883, -0.0306958830735725, -0.0044119395527308, -0.0140786756619672, -0.0180512599925078,
355             -0.0208243802903953, -0.0232202769398931, -0.0063135878270273, 0.0110442171178168, 0.1824538048228460,
356             -0.0006644614422758, -0.0069909097436659, 0.0255407650654681, 0.0099119399501151, -0.0140911517070698 },
357             { 0.0261344441524861, -0.0714454044548650, 0.0159436926233439, 0.0028462736216688, -0.0044572637889080,
358             -0.0089474834434532, -0.0177570282144517, -0.0153693244094452, 0.1160919467206400, 0.0304911481385036,
359             0.0047047513411774, -0.0456535116423972, 0.0004491494948617, -0.0767108879444462, -0.0012688533741441,
360             0.0192445965934123, 0.0202321954782039, 0.0281039933233607, -0.0590403018490048, 0.0364080426546883 },
361             { 0.0115826306265004, 0.1340228176509380, -0.0236200652949049, -0.1284484655137340, -0.0004742338006503,
362             0.0127617346949511, -0.0428560878860394, 0.0060030732454125, 0.0089182609926781, 0.0085353834972860,
363             0.0048464809638033, 0.0709740071429510, 0.0029940462557054, -0.0483434904493132, -0.0071713680727884,
364             -0.0036840391887209, 0.0031454003250096, 0.0246243550241551, -0.0449551277644180, 0.0111449232769393 },
365             { 0.0140356721886765, -0.0196518236826680, 0.0030517022326582, 0.0582672093364850, -0.0000973895685457,
366             0.0021704767224292, 0.0341806268602705, -0.0152035987563018, -0.0903198657739177, 0.0259623214586925,
367             0.0155832497882743, -0.0040543568451651, 0.0036477631918247, -0.0532892744763217, -0.0142569373662724,
368             0.0104500681408622, 0.0103483945857315, 0.0679534422398752, -0.0768068882938636, 0.0280289727046158 } };
369     // dcmut version of PAM model from http://www.ebi.ac.uk/goldman-srv/dayhoff/ 
370     final private static double pameigs[]    = { 0, -1.93321786301018, -2.20904642493621, -1.74835983874903,
371             -1.64854548332072, -1.54505559488222, -1.33859384676989, -1.29786201193594, -0.235548517495575,
372             -0.266951066089808, -0.28965813670665, -1.10505826965282, -1.04323310568532, -0.430423720979904,
373             -0.541719761016713, -0.879636093986914, -0.711249353378695, -0.725050487280602, -0.776855937389452,
374             -0.808735559461343              };
375     final private static double pamprobs[][] = {
376             { 0.08712695644, 0.04090397955, 0.04043197978, 0.04687197656, 0.03347398326, 0.03825498087, 0.04952997524,
377             0.08861195569, 0.03361898319, 0.03688598156, 0.08535695732, 0.08048095976, 0.01475299262, 0.03977198011,
378             0.05067997466, 0.06957696521, 0.05854197073, 0.01049399475, 0.02991598504, 0.06471796764 },
379             { 0.07991048383, 0.006888314018, 0.03857806206, 0.07947073194, 0.004895492884, 0.03815829405,
380             -0.1087562465, 0.008691167141, -0.0140554828, 0.001306404001, -0.001888411299, -0.006921303342,
381             0.0007655604228, 0.001583298443, 0.006879590446, -0.171806883, 0.04890917949, 0.0006700432804,
382             0.0002276237277, -0.01350591875 },
383             { -0.01641514483, -0.007233933239, -0.1377830621, 0.1163201333, -0.002305138017, 0.01557250366,
384             -0.07455879489, -0.003225343503, 0.0140630487, 0.005112274204, 0.001405731862, 0.01975833782,
385             -0.001348402973, -0.001085733262, -0.003880514478, 0.0851493313, -0.01163526615, -0.0001197903399,
386             0.002056153393, 0.0001536095643 },
387             { 0.009669278686, -0.006905863869, 0.101083544, 0.01179903104, -0.003780967591, 0.05845105878,
388             -0.09138357299, -0.02850503638, -0.03233951408, 0.008708065876, -0.004700705411, -0.02053221579,
389             0.001165851398, -0.001366585849, -0.01317695074, 0.1199985703, -0.1146346193, -0.0005953021314,
390             -0.0004297615194, 0.007475695618 },
391             { 0.1722243502, -0.003737582995, -0.02964873222, -0.02050116381, -0.0004530478465, -0.02460043205,
392             0.02280768412, -0.02127364909, 0.01570095258, 0.1027744285, -0.005330539586, 0.0179697651, -0.002904077286,
393             -0.007068126663, -0.0142869583, -0.01444241844, -0.08218861544, 0.0002069181629, 0.001099671379,
394             -0.1063484263 },
395             { -0.1553433627, -0.001169168032, 0.02134785337, 0.0007602305436, 0.0001395330122, 0.03194992019,
396             -0.01290252206, 0.03281720789, -0.01311103735, 0.1177254769, -0.008008783885, -0.02375317548,
397             -0.002817809762, -0.008196682776, 0.01731267617, 0.01853526375, 0.08249908546, -2.788771776e-05,
398             0.001266182191, -0.09902299976 },
399             { -0.03671080341, 0.0274168035, 0.04625877597, 0.07520706414, -0.0001833803619, -0.1207833161,
400             -0.006415807779, -0.005465629648, 0.02778273972, 0.007589688485, -0.02945266034, -0.03797542064,
401             0.07044042052, -0.002018573865, 0.01845277071, 0.006901513991, -0.02430934639, -0.0005919635873,
402             -0.001266962331, -0.01487591261 },
403             { -0.03060317816, 0.01182361623, 0.04200270053, 0.05406235279, -0.0003920498815, -0.09159709348,
404             -0.009602690652, -0.00382944418, 0.01761361993, 0.01605684317, 0.05198878008, 0.02198696949,
405             -0.09308930025, -0.00102622863, 0.01477637127, 0.0009314065393, -0.01860959472, -0.0005964703968,
406             -0.002694284083, 0.02079767439 },
407             { 0.0195976494, -0.005104484936, 0.007406728707, 0.01236244954, 0.0201446796, 0.007039564785,
408             0.01276942134, 0.02641595685, 0.002764624354, 0.001273314658, -0.01335316035, 0.01105658671,
409             2.148773499e-05, -0.02692205639, 0.0118684991, 0.01212624708, 0.01127770094, -0.09842754796,
410             -0.01942336432, 0.007105703151 },
411             { -0.01819461888, -0.01509348507, -0.01297636935, -0.01996453439, 0.1715705905, -0.01601550692,
412             -0.02122706144, -0.02854628494, -0.009351082371, -0.001527995472, -0.010198224, -0.03609537551,
413             -0.003153182095, 0.02395980501, -0.01378664626, -0.005992611421, -0.01176810875, 0.003132361603,
414             0.03018439539, -0.004956065656 },
415             { -0.02733614784, -0.02258066705, -0.0153112506, -0.02475728664, -0.04480525045, -0.01526640341,
416             -0.02438517425, -0.04836914601, -0.00635964824, 0.02263169831, 0.09794101931, -0.04004304158,
417             0.008464393478, 0.1185443142, -0.02239294163, -0.0281550321, -0.01453581604, -0.0246742804, 0.0879619849,
418             0.02342867605 },
419             { 0.06483718238, 0.1260012082, -0.006496013283, 0.009914915531, -0.004181603532, 0.0003493226286,
420             0.01408035752, -0.04881663016, -0.03431167356, -0.01768005602, 0.02362447761, -0.1482364784,
421             -0.01289035619, -0.001778893279, -0.05240099752, 0.05536174567, 0.06782165352, -0.003548568717,
422             0.001125301173, -0.03277489363 },
423             { 0.06520296909, -0.0754802543, 0.03139281903, -0.03266449554, -0.004485188002, -0.03389072036,
424             -0.06163274338, -0.06484769882, 0.05722658289, -0.02824079619, 0.01544837349, 0.03909752708,
425             0.002029218884, 0.003151939572, -0.05471208363, 0.07962008342, 0.125916047, 0.0008696184937,
426             -0.01086027514, -0.05314092355 },
427             { 0.004543119081, 0.01935177735, 0.01905511007, 0.02682993409, -0.01199617967, 0.01426278655,
428             0.02472521255, 0.03864795501, 0.02166224804, -0.04754243479, -0.1921545477, 0.03621321546, -0.02120627881,
429             0.04928097895, 0.009396088815, 0.01748042052, -6.173742851e-05, -0.003168033098, 0.07723565812,
430             -0.08255529309 },
431             { 0.06710378668, -0.09441410284, -0.004801776989, 0.008830272165, -0.01021645042, -0.02764365608,
432             0.004250361851, 0.1648777542, -0.037446109, 0.004541057635, -0.0296980702, -0.1532325189, -0.008940580901,
433             0.006998050812, 0.02338809379, 0.03175059182, 0.02033965512, 0.006388075608, 0.001762762044, 0.02616280361 },
434             { 0.01915943021, -0.05432967274, 0.01249342683, 0.06836622457, 0.002054462161, -0.01233535859,
435             0.07087282652, -0.08948637051, -0.1245896013, -0.02204522882, 0.03791481736, 0.06557467874, 0.005529294156,
436             -0.006296644235, 0.02144530752, 0.01664230081, 0.02647078439, 0.001737725271, 0.01414149877, -0.05331990116 },
437             { 0.0266659303, 0.0564142853, -0.0263767738, -0.08029726006, -0.006059357163, -0.06317558457,
438             -0.0911894019, 0.05401487057, -0.08178072458, 0.01580699778, -0.05370550396, 0.09798653264, 0.003934944022,
439             0.01977291947, 0.0441198541, 0.02788220393, 0.03201877081, -0.00206161759, -0.005101423308, 0.03113033802 },
440             { 0.02980360751, -0.009513246268, -0.009543527165, -0.02190644172, -0.006146440672, 0.01207009085,
441             -0.0126989156, -0.1378266418, 0.0275235217, 0.00551720592, -0.03104791544, -0.07111701247, -0.006081754489,
442             -0.01337494521, 0.1783961085, 0.01453225059, 0.01938736048, 0.0004488631071, 0.0110844398, 0.02049339243 },
443             { -0.01433508581, 0.01258858175, -0.004294252236, -0.007146532854, 0.009541628809, 0.008040155729,
444             -0.006857781832, 0.05584120066, 0.007749418365, -0.05867835844, 0.08008131283, -0.004877854222,
445             -0.0007128540743, 0.09489058424, 0.06421121962, 0.00271493526, -0.03229944773, -0.001732026038,
446             -0.08053448316, -0.1241903609 },
447             { -0.009854113227, 0.01294129929, -0.00593064392, -0.03016833115, -0.002018439732, -0.00792418722,
448             -0.03372768732, 0.07828561288, 0.007722254639, -0.05067377561, 0.1191848621, 0.005059475202,
449             0.004762387166, -0.1029870175, 0.03537190114, 0.001089956203, -0.02139157573, -0.001015245062,
450             0.08400521847, -0.08273195059 } };
451 }