📄 proml.c
字号:
#include "phylip.h"#include "seq.h"/* version 3.6. (c) Copyright 1993-2000 by the University of Washington. Written by Joseph Felsenstein, Lucas Mix, Akiko Fuseki, Sean Lamont, Andrew Keeffe, Dan Fineman, and Patrick Colacurcio. Permission is granted to copy and use this program provided no fee is charged for it and provided that this copyright notice is not removed. */typedef long vall[maxcategs];typedef double contribarr[maxcategs];#ifndef OLDC/* function prototypes */void init_protmats(void);void getoptions(void);void makeprotfreqs(void);void allocrest(void);void doinit(void);void inputoptions(void);void input_protdata(long);void makeweights(void);void prot_makevalues(long, pointarray, long, long, sequence, steptr);void prot_inittable(void);void alloc_pmatrix(long);void getinput(void);void inittravtree(node *);void prot_nuview(node *);void prot_slopecurv(node *, double, double *, double *, double *);void makenewv(node *);void update(node *);void smooth(node *);void make_pmatrix(double **, double **, double **, long, double, double, double *, double **);double prot_evaluate(node *, boolean);void treevaluate(void);void promlcopy(tree *, tree *, long, long);void proml_re_move(node **, node **);void insert_(node *, node *, boolean);void addtraverse(node *, node *, boolean);void rearrange(node *, node *);void proml_coordinates(node *, double, long *, double *);void proml_printree(void);void sigma(node *, double *, double *, double *);void describe(node *);void prot_reconstr(node *, long);void rectrav(node *, long, long);void summarize(void);void initpromlnode(node **, node **, node *, long, long, long *, long *, initops, pointarray, pointarray, Char *, Char *, FILE *);void dnaml_treeout(node *);void buildnewtip(long, tree *);void buildsimpletree(tree *);void free_all_protx (long, pointarray);void maketree(void);void clean_up(void);/* function prototypes */#endifextern sequence y;long rcategs;Char infilename[100], outfilename[100], intreename[100], outtreename[100], catfilename[100], weightfilename[100];double *rate, *rrate, *probcat;long nonodes2, sites, weightsum, categs, datasets, ith, njumble, jumb;long inseed, inseed0, parens;boolean global, jumble, weights, trout, usertree, reconsider, ctgry, rctgry, auto_, hypstate, progress, mulsets, justwts, firstset, improve, smoothit, polishing, lngths, gama, invar, usepam, usejtt;tree curtree, bestree, bestree2, priortree;node *qwhere, *grbg;double cv, alpha, lambda, invarfrac, bestyet;long *enterorder;steptr aliasweight;contribarr *contribution, like, nulike, clai;double **term, **slopeterm, **curveterm;longer seed;char *progname;char aachar[26]="ARNDCQEGHILKMFPSTWYVBZX?*-";/* Local variables for maketree, propagated globally for c version: */long k, nextsp, numtrees, maxwhich, mx, mx0, mx1;double dummy, maxlogl;boolean succeeded, smoothed;double **l0gf;double *l0gl;double **tbl;Char ch, ch2;long col;vall *mp;/* Variables introduced to allow for protein probability calculations */long max_num_sibs; /* maximum number of siblings used in a */ /* nuview calculation. determines size */ /* final size of pmatrices */double *eigmat; /* eig matrix variable */double **probmat; /* prob matrix variable */double ****dpmatrix; /* derivative of pmatrix */double ****ddpmatrix; /* derivative of xpmatrix */double *****pmatrices; /* matrix of probabilities of protien */ /* conversion. The 5 subscripts refer */ /* to sibs, rcategs, categs, final and */ /* initial states, respectively. */double freqaa[20]; /* amino acid frequencies */static double pameigmat[20] = { -0.022091252,-0.019297602, 0.000004760,-0.017477817, -0.016575549,-0.015504543,-0.002112213,-0.002685727, -0.002976402,-0.013440755,-0.012926992,-0.004293227, -0.005356688,-0.011064786,-0.010480731,-0.008760449, -0.007142318,-0.007381851,-0.007806557,-0.008127024 };static double pamprobmat[20][20] = { {-0.01522976,-0.00746819,-0.13934468, 0.11755315,-0.00212101, 0.01558456,-0.07408235,-0.00322387, 0.01375826, 0.00448826, 0.00154174, 0.02013313,-0.00159183,-0.00069275,-0.00399898, 0.08414055,-0.01188178,-0.00029870, 0.00220371, 0.00042546}, {-0.07765582,-0.00712634,-0.03683209,-0.08065755,-0.00462872, -0.03791039, 0.10642147,-0.00912185, 0.01436308,-0.00133243, 0.00166346, 0.00624657,-0.00003363,-0.00128729,-0.00690319, 0.17442028,-0.05373336,-0.00078751,-0.00038151, 0.01382718}, {-0.08810973,-0.04081786,-0.04066004,-0.04736004,-0.03275406, -0.03761164,-0.05047487,-0.09086213,-0.03269598,-0.03558015, -0.08407966,-0.07970977,-0.01504743,-0.04011920,-0.05182232, -0.07026991,-0.05846931,-0.01016998,-0.03047472,-0.06280511}, { 0.02513756,-0.00578333, 0.09865453, 0.01322314,-0.00310665, 0.05880899,-0.09252443,-0.02986539,-0.03127460, 0.01007539, -0.00360119,-0.01995024, 0.00094940,-0.00145868,-0.01388816, 0.11358341,-0.12127513,-0.00054696,-0.00055627, 0.00417284}, { 0.16517316,-0.00254742,-0.03318745,-0.01984173, 0.00031890, -0.02817810, 0.02661678,-0.01761215, 0.01665112, 0.10513343, -0.00545026, 0.01827470,-0.00207616,-0.00763758,-0.01322808, -0.02202576,-0.07434204, 0.00020593, 0.00119979,-0.10827873}, { 0.16088826, 0.00056313,-0.02579303,-0.00319655, 0.00037228, -0.03193150, 0.01655305,-0.03028640, 0.01367746,-0.11248153, 0.00778371, 0.02675579, 0.00243718, 0.00895470,-0.01729803, -0.02686964,-0.08262584, 0.00011794,-0.00225134, 0.09415650}, {-0.01739295, 0.00572017,-0.00712592,-0.01100922,-0.00870113, -0.00663461,-0.01153857,-0.02248432,-0.00382264,-0.00358612, -0.00139345,-0.00971460,-0.00133312, 0.01927783,-0.01053838, -0.00911362,-0.01010908, 0.09417598, 0.01763850,-0.00955454}, { 0.01728888, 0.01344211, 0.01200836, 0.01857259,-0.17088517, 0.01457592, 0.01997839, 0.02844884, 0.00839403, 0.00196862, 0.01391984, 0.03270465, 0.00347173,-0.01940984, 0.01233979, 0.00542887, 0.01008836, 0.00126491,-0.02863042, 0.00449764}, {-0.02881366,-0.02184155,-0.01566086,-0.02593764,-0.04050907, -0.01539603,-0.02576729,-0.05089606,-0.00597430, 0.02181643, 0.09835597,-0.04040940, 0.00873512, 0.12139434,-0.02427882, -0.02945238,-0.01566867,-0.01606503, 0.09475319, 0.02238670}, { 0.04080274,-0.02869626,-0.05191093,-0.08435843, 0.00021141, 0.13043842, 0.00871530, 0.00496058,-0.02797641,-0.00636933, 0.02243277, 0.03640362,-0.05735517, 0.00196918,-0.02218934, -0.00608972, 0.02872922, 0.00047619, 0.00151285, 0.00883489}, {-0.02623824, 0.00331152, 0.03640692, 0.04260231,-0.00038223, -0.07480340,-0.01022492,-0.00426473, 0.01448116, 0.01456847, 0.05786680, 0.03368691,-0.10126924,-0.00147454, 0.01275395, 0.00017574,-0.01585206,-0.00015767,-0.00231848, 0.02310137}, {-0.00846258,-0.01508106,-0.01967505,-0.02772004, 0.01248253, -0.01331243,-0.02569382,-0.04461524,-0.02207075, 0.04663443, 0.19347923,-0.02745691, 0.02288515,-0.04883849,-0.01084597, -0.01947187,-0.00081675, 0.00516540,-0.07815919, 0.08035585}, {-0.06553111, 0.09756831, 0.00524326,-0.00885098, 0.00756653, 0.02783099,-0.00427042,-0.16680359, 0.03951331,-0.00490540, 0.01719610, 0.15018204, 0.00882722,-0.00423197,-0.01919217, -0.02963619,-0.01831342,-0.00524338, 0.00011379,-0.02566864}, {-0.07494341,-0.11348850, 0.00241343,-0.00803016, 0.00492438, 0.00711909,-0.00829147, 0.05793337, 0.02734209, 0.02059759, -0.02770280, 0.14128338, 0.01532479, 0.00364307, 0.05968116, -0.06497960,-0.08113941, 0.00319445,-0.00104222, 0.03553497}, { 0.05948223,-0.08959930, 0.03269977,-0.03272374,-0.00365667, -0.03423294,-0.06418925,-0.05902138, 0.05746317,-0.02580596, 0.01259572, 0.05848832, 0.00672666, 0.00233355,-0.05145149, 0.07348503, 0.11427955, 0.00142592,-0.01030651,-0.04862799}, {-0.01606880, 0.05200845,-0.01212967,-0.06824429,-0.00234304, 0.01094203,-0.07375538, 0.08808629, 0.12394822, 0.02231351, -0.03608265,-0.06978045,-0.00618360, 0.00274747,-0.01921876, -0.01541969,-0.02223856,-0.00107603,-0.01251777, 0.05412534}, { 0.01688843, 0.05784728,-0.02256966,-0.07072251,-0.00422551, -0.06261233,-0.08502830, 0.08925346,-0.08529597, 0.01519343, -0.05008258, 0.10931873, 0.00521033, 0.02593305,-0.00717855, 0.02291527, 0.02527388,-0.00266188,-0.00871160, 0.02708135}, {-0.04233344, 0.00076379, 0.01571257, 0.04003092, 0.00901468, 0.00670577, 0.03459487, 0.12420216,-0.00067366,-0.01515094, 0.05306642, 0.04338407, 0.00511287, 0.01036639,-0.17867462, -0.02289440,-0.03213205, 0.00017924,-0.01187362,-0.03933874}, { 0.01284817,-0.01685622, 0.00724363, 0.01687952,-0.00882070, -0.00555957, 0.01676246,-0.05560456,-0.00966893, 0.06197684, -0.09058758, 0.00880607, 0.00108629,-0.08308956,-0.08056832, -0.00413297, 0.02973107, 0.00092948, 0.07010111, 0.13007418}, { 0.00700223,-0.01347574, 0.00691332, 0.03122905, 0.00310308, 0.00946862, 0.03455040,-0.06712536,-0.00304506, 0.04267941, -0.10422292,-0.01127831,-0.00549798, 0.11680505,-0.03352701, -0.00084536, 0.01631369, 0.00095063,-0.09570217, 0.06480321} };/* this jtt matrix decomposition due to Elisabeth Tillier */static double jtteigmat[] ={0.0, -0.007031123, -0.006484345, -0.006086499, -0.005514432,-0.00772664, -0.008643413, -0.010620756, -0.009965552, -0.011671808,-0.012222418,-0.004589201, -0.013103714, -0.014048038, -0.003170582,-0.00347935, -0.015311677, -0.016021194, -0.017991454, -0.018911888};static double jttprobmat[20][20] ={{0.076999996, 0.051000003, 0.043000004, 0.051999998, 0.019999996, 0.041, 0.061999994, 0.073999997, 0.022999999, 0.052000004, 0.090999997, 0.058999988, 0.024000007, 0.04, 0.050999992, 0.069, 0.059000006, 0.014000008, 0.032000004, 0.066000005}, {0.015604455, -0.068062363, 0.020106264, 0.070723273, 0.011702977, 0.009674053, 0.074000798, -0.169750458, 0.005560808, -0.008208636, -0.012305869, -0.063730179, -0.005674643, -0.02116828, 0.104586169, 0.016480839, 0.016765139, 0.005936994, 0.006046367, -0.0082877}, {-0.049778281, -0.007118197, 0.003801272, 0.070749616, 0.047506147, 0.006447017, 0.090522425, -0.053620432, -0.008508175, 0.037170603, 0.051805545, 0.015413608, 0.019939916, -0.008431976, -0.143511376, -0.052486072, -0.032116542, -0.000860626, -0.02535993, 0.03843545}, {-0.028906423, 0.092952047, -0.009615343, -0.067870117, 0.031970392, 0.048338335, -0.054396304, -0.135916654, 0.017780083, 0.000129242, 0.031267424, 0.116333586, 0.007499746, -0.032153596, 0.033517051, -0.013719269, -0.00347293, -0.003291821, -0.02158326, -0.008862168}, {0.037181176, -0.023106564, -0.004482225, -0.029899635, 0.118139633, -0.032298569, -0.04683198, 0.05566988, -0.012622847, 0.002023096, -0.043921088, -0.04792557, -0.003452711, -0.037744513, 0.020822974, 0.036580187, 0.02331425, -0.004807711, -0.017504496, 0.01086673}, {0.044754061, -0.002503471, 0.019452517, -0.015611487, -0.02152807, -0.013131425, -0.03465365, -0.047928912, 0.020608851, 0.067843095, -0.122130014, 0.002521499, 0.013021646, -0.082891087, -0.061590119, 0.016270856, 0.051468938, 0.002079063, 0.081019713, 0.082927944}, {0.058917882, 0.007320741, 0.025278141, 0.000357541, -0.002831285, -0.032453034, -0.010177288, -0.069447924, -0.034467324, 0.011422358, -0.128478324, 0.04309667, -0.015319944, 0.113302422, -0.035052393, 0.046885372, 0.06185183, 0.00175743, -0.06224497, 0.020282093}, {-0.014562092, 0.022522921, -0.007094389, 0.03480089, -0.000326144, -0.124039037, 0.020577906, -0.005056454, -0.081841576, -0.004381786, 0.030826152, 0.091261631, 0.008878828, -0.02829487, 0.042718836, -0.011180886, -0.012719227, -0.000753926, 0.048062375, -0.009399129}, {0.033789571, -0.013512235, 0.088010984, 0.017580292, -0.006608005, -0.037836971, -0.061344686, -0.034268357, 0.018190209, -0.068484614, 0.120024744, -0.00319321, -0.001349477, -0.03000546, -0.073063759, 0.081912399, 0.0635245, 0.000197, -0.002481798, -0.09108114}, {-0.113947615, 0.019230545, 0.088819683, 0.064832765, 0.001801467, -0.063829682, -0.072001633, 0.018429333, 0.057465965, 0.043901014, -0.048050874, -0.001705918, 0.022637173, 0.017404665, 0.043877902, -0.017089594, -0.058489485, 0.000127498, -0.029357194, 0.025943972}, {0.01512923, 0.023603725, 0.006681954, 0.012360216, -0.000181447, -0.023011838, -0.008960024, -0.008533239, 0.012569835, 0.03216118, 0.061986403, -0.001919083, -0.1400832, -0.010669741, -0.003919454, -0.003707024, -0.026806029, -0.000611603, -0.001402648, 0.065312824}, {-0.036405351, 0.020816769, 0.011408213, 0.019787053, 0.038897829, 0.017641789, 0.020858533, -0.006067252, 0.028617353, -0.064259496, -0.081676567, 0.024421823, -0.028751676, 0.07095096, -0.024199434, -0.007513119, -0.028108766, -0.01198095, 0.111761119, -0.076198809}, {0.060831772, 0.144097327, -0.069151377, 0.023754576, -0.003322955, -0.071618574, 0.03353154, -0.02795295, 0.039519769, -0.023453968, -0.000630308, -0.098024591, 0.017672997, 0.003813378, -0.009266499, -0.011192111, 0.016013873, -0.002072968, -0.010022044, -0.012526904}, {-0.050776604, 0.092833081, 0.044069596, 0.050523021, -0.002628417, 0.076542572, -0.06388631, -0.00854892, -0.084725311, 0.017401063, -0.006262541, -0.094457679, -0.002818678, -0.0044122, -0.002883973, 0.028729685, -0.004961596, -0.001498627, 0.017994575, -0.000232779}, {-0.01894566, -0.007760205, -0.015160993, -0.027254587, 0.009800903, -0.013443561, -0.032896517, -0.022734138, -0.001983861, 0.00256111, 0.024823166, -0.021256768, 0.001980052, 0.028136263, -0.012364384, -0.013782446, -0.013061091, 0.111173981, 0.021702122, 0.00046654}, {-0.009444193, -0.042106824, -0.02535015, -0.055125574, 0.006369612, -0.02945416, -0.069922064, -0.067221068, -0.003004999, 0.053624311, 0.128862984, -0.057245803, 0.025550508, 0.087741073, -0.001119043, -0.012036202, -0.000913488, -0.034864475, 0.050124813, 0.055534723}, {0.145782464, -0.024348311, -0.031216873, 0.106174443, 0.00202862, 0.02653866, -0.113657267, -0.00755018, 0.000307232, -0.051241158, 0.001310685, 0.035275877, 0.013308898, 0.002957626, -0.002925034, -0.065362319, -0.071844582, 0.000475894, -0.000112419, 0.034097762}, {0.079840455, 0.018769331, 0.078685899, -0.084329807, -0.00277264, -0.010099754, 0.059700608, -0.019209715, -0.010442992, -0.042100476, -0.006020556, -0.023061786, 0.017246106, -0.001572858, -0.006703785, 0.056301316, -0.156787357, -0.000303638, 0.001498195, 0.051363455}, {0.049628261, 0.016475144, 0.094141653, -0.04444633, 0.005206131, -0.001827555, 0.02195624, 0.013066683, -0.010415582, -0.022338403, 0.007837197, -0.023397671, -0.002507095, 0.005177694, 0.017109561, -0.202340113, 0.069681441, 0.000120736, 0.002201146, 0.004670849}, {0.089153689, 0.000233354, 0.010826822, -0.004273519, 0.001440618, 0.000436077, 0.001182351, -0.002255508, -0.000700465, 0.150589876, -0.003911914, -0.00050154, -0.004564983, 0.00012701, -0.001486973, -0.018902754, -0.054748555, 0.000217377, -0.000319302, -0.162541651}};void init_protmats(){ long l, m; eigmat = (double *) Malloc (20 * sizeof(double)); for (l = 0; l <= 19; l++) if (usejtt) eigmat[l] = jtteigmat[l]; else eigmat[l] = pameigmat[l]; probmat = (double **) Malloc (20 * sizeof(double *)); for (l = 0; l < 20; l++) probmat[l] = (double *) Malloc (20 * sizeof(double)); for (l = 0; l <= 19; l++) for (m= 0; m <= 19; m++) if (usejtt) probmat[l][m] = jttprobmat[l][m]; else probmat[l][m] = pamprobmat[l][m];} /* init_protmats */void getoptions(){ /* interactively set options */ long i, loopcount, loopcount2; Char ch; boolean didchangecat, didchangercat; double probsum; fprintf(outfile, "\nAmino acid sequence Maximum Likelihood"); fprintf(outfile, " method, version %s\n\n",VERSION); putchar('\n'); ctgry = false; didchangecat = false; didchangercat = false; reconsider = false; trout = true; usertree = false; weights = false; printdata = false; progress = true; treeprint = true; interleaved = false; init_protmats(); loopcount = 0; for (;;){ cleerhome(); printf("Amino acid sequence Maximum Likelihood"); printf(" method, version %s\n\n",VERSION); printf("Settings for this run:\n"); printf(" U Search for best tree? %s\n", (usertree ? "No, use user trees in input file" : "Yes")); if (usertree) { printf(" L Use lengths from user trees? %s\n", (lngths ? "Yes" : "No")); } printf(" P JTT or PAM amino acid change model? %s\n", (usejtt ? "Jones-Taylor-Thornton model" : "Dayhoff PAM model")); printf(" C One category of sites?"); if (!ctgry || categs == 1) printf(" Yes\n"); else printf(" %ld categories of sites\n", categs); printf(" R Rate variation among sites?"); if (!rctgry) printf(" constant rate of change\n"); else { if (gama) printf(" Gamma distributed rates\n"); else { if (invar) printf(" Gamma+Invariant sites\n"); else printf(" user-defined HMM of rates\n"); } printf(" A Rates at adjacent sites correlated?"); if (!auto_) printf(" No, they are independent\n"); else printf(" Yes, mean block length =%6.1f\n", 1.0 / lambda); } printf(" W Sites weighted? %s\n", (weights ? "Yes" : "No")); if ((!usertree) || reconsider) { printf(" S Speedier but rougher analysis? %s\n", (improve ? "No, not rough" : "Yes")); printf(" G Global rearrangements? %s\n", (global ? "Yes" : "No")); } if (!usertree) { printf(" J Randomize input order of sequences?"); if (jumble) printf(" Yes (seed =%8ld,%3ld times)\n", inseed0, njumble); else printf(" No. Use input order\n"); } else printf(" V Rearrange starting with user tree? %s\n", (reconsider ? "Yes" : "No")); printf(" O Outgroup root? %s%3ld\n", (outgropt ? "Yes, at sequence number" : "No, use as outgroup species"),outgrno); printf(" M Analyze multiple data sets?"); if (mulsets) printf(" Yes, %2ld %s\n", datasets, (justwts ? "sets of weights" : "data sets")); else printf(" No\n"); printf(" I Input sequences interleaved? %s\n", (interleaved ? "Yes" : "No, sequential")); printf(" 0 Terminal type (IBM PC, ANSI, none)? %s\n", (ibmpc ? "IBM PC" : ansi ? "ANSI" : "(none)")); printf(" 1 Print out the data at start of run %s\n", (printdata ? "Yes" : "No")); printf(" 2 Print indications of progress of run %s\n", (progress ? "Yes" : "No")); printf(" 3 Print out tree %s\n", (treeprint ? "Yes" : "No")); printf(" 4 Write out trees onto tree file? %s\n", (trout ? "Yes" : "No")); printf(" 5 Reconstruct hypothetical sequences? %s\n", (hypstate ? "Yes" : "No"));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -