mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			1114 lines
		
	
	
		
			30 KiB
		
	
	
	
		
			Beef
		
	
	
	
	
	
			
		
		
	
	
			1114 lines
		
	
	
		
			30 KiB
		
	
	
	
		
			Beef
		
	
	
	
	
	
| ModelNames = {{"Neutral",
 | |
| 	  		  "Selection",
 | |
| 			  "Discrete",
 | |
| 			  "Freqs",
 | |
| 			  "Gamma",
 | |
| 			  "2 Gamma",
 | |
| 			  "Beta",
 | |
| 			  "Beta & w",
 | |
| 			  "Beta & Gamma",
 | |
| 			  "Beta & (Gamma+1)",
 | |
| 			  "Beta & (Normal>1)",
 | |
| 			  "0 & 2 (Normal>1)",
 | |
| 			  "3 Normal",
 | |
| 			  "RE: Lognormal",
 | |
| 			  "RE: Gamma",
 | |
| 			  "RE: Discrete"}};
 | |
| 			  
 | |
| ParameterCount = {{0,
 | |
| 	  		  	   1,
 | |
| 			  	   3,
 | |
| 			  	   4,
 | |
| 			  	   2,
 | |
| 			  	   4,
 | |
| 			       2,
 | |
| 			  	   4,
 | |
| 			  	   5,
 | |
| 			       5,
 | |
| 			  	   5,
 | |
| 			       5,
 | |
| 			       6,
 | |
| 			       1,
 | |
| 			       2,
 | |
| 			       4
 | |
| 			       }};
 | |
| 			       
 | |
| MAXIMUM_ITERATIONS_PER_VARIABLE = 2000;
 | |
| OPTIMIZATION_PRECISION = 0.001;
 | |
| 			  
 | |
| function SetWDistribution (resp)
 | |
| {
 | |
| 	if (rateType == 0)
 | |
| 	{
 | |
| 		global P = .5;
 | |
| 		P:<1;
 | |
| 		categFreqMatrix = {{P,1-P}};
 | |
| 		categRateMatrix = {{0,1}};
 | |
| 		category c = (2, categFreqMatrix , MEAN, ,categRateMatrix, 0, 1e25);
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		if (rateType == 1)
 | |
| 		{
 | |
| 			global P1 = 1/3;
 | |
| 			global P2 = 0;
 | |
| 			
 | |
| 			P1:<1;
 | |
| 			P2:<1;
 | |
| 			
 | |
| 			global W = 1;
 | |
| 			categFreqMatrix = {{P1,(1-P1)*P2, (1-P1)*(1-P2)}} ;
 | |
| 			categRateMatrix = {{0,1,W}};
 | |
| 			category c = (3, categFreqMatrix , MEAN, ,categRateMatrix, 0, 1e25);
 | |
| 		}		
 | |
| 		else
 | |
| 		{
 | |
| 			if (rateType == 2)
 | |
| 			{
 | |
| 				global P1 = 1/3;
 | |
| 				global P2 = .5;
 | |
| 				P1:<1;
 | |
| 				P2:<1;
 | |
| 				global W1 = .25;
 | |
| 				global R1 = 4;
 | |
| 				global R2 = 3;
 | |
| 				R1:>1;
 | |
| 				R2:>1;
 | |
| 				categFreqMatrix = {{P1,(1-P1)*P2, (1-P1)*(1-P2)}} ;
 | |
| 				categRateMatrix = {{W1,W1*R1,W1*R1*R2}};
 | |
| 				category c = (3, categFreqMatrix , MEAN, ,categRateMatrix, 0, 1e25);				
 | |
| 			}
 | |
| 			else
 | |
| 			{
 | |
| 				if (rateType == 3)
 | |
| 				{
 | |
| 					global P1 = 1/5;
 | |
| 					global P2 = 1/4;
 | |
| 					global P3 = 1/3;
 | |
| 					global P4 = 1/2;
 | |
| 					
 | |
| 					P1:<1;
 | |
| 					P2:<1;
 | |
| 					P3:<1;
 | |
| 					P4:<1;
 | |
| 					
 | |
| 					categFreqMatrix = {{P1,
 | |
| 										(1-P1)P2,
 | |
| 										(1-P1)(1-P2)*P3,
 | |
| 										(1-P1)(1-P2)(1-P3)P4,
 | |
| 										(1-P1)(1-P2)(1-P3)(1-P4)}} ;
 | |
| 					categRateMatrix = {{0,1/3,2/3,1,3}};
 | |
| 					category c = (5, categFreqMatrix , MEAN, ,categRateMatrix, 0, 1e25);				
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					if (rateType == 4)
 | |
| 					{
 | |
| 						global alpha = .5;
 | |
| 						global beta = 1;
 | |
| 						alpha:>0.01;alpha:<100;
 | |
| 						beta:>0.01;
 | |
| 						beta:<200;
 | |
| 						category c = (resp, EQUAL, MEAN, GammaDist(_x_,alpha,beta), CGammaDist(_x_,alpha,beta), 0 , 
 | |
| 				 			 		  1e25,CGammaDist(_x_,alpha+1,beta)*alpha/beta);
 | |
| 					}
 | |
| 					else
 | |
| 					{
 | |
| 						if (rateType == 5)
 | |
| 						{
 | |
| 							global alpha = .5;
 | |
| 							global beta  =  1;
 | |
| 							global alpha2=  .75;
 | |
| 							global P	 = .5; 
 | |
| 							alpha:>0.01;alpha:<100;
 | |
| 							beta:>0.01;
 | |
| 							beta:<200;
 | |
| 							P:<1;
 | |
| 							alpha2:>0.01;alpha2:<100;
 | |
| 							category c = (resp, EQUAL, MEAN, P*GammaDist(_x_,alpha,beta) + (1-P)*GammaDist(_x_,alpha2,alpha2)
 | |
| 														   , P*CGammaDist(_x_,alpha,beta) + (1-P)*CGammaDist(_x_,alpha2,alpha2), 
 | |
| 														   0 , 1e25,
 | |
| 														   P*CGammaDist(_x_,alpha+1,beta)*alpha/beta + (1-P)*CGammaDist(_x_,alpha2+1,alpha2));
 | |
| 						}
 | |
| 						else
 | |
| 						{
 | |
| 							if (rateType == 6)
 | |
| 							{
 | |
| 								global betaP = 1;
 | |
| 								global betaQ = 1;
 | |
| 								betaP:>0.05;betaP:<85;
 | |
| 								betaQ:>0.05;betaQ:<85;
 | |
| 								category c = (resp, EQUAL, MEAN, _x_^(betaP-1)*(1-_x_)^(betaQ-1)/Beta(betaP,betaQ), IBeta(_x_,betaP,betaQ), 0 , 
 | |
| 						 			 		  1,IBeta(_x_,betaP+1,betaQ)*betaP/(betaP+betaQ));
 | |
| 							}
 | |
| 							else
 | |
| 							{
 | |
| 								if (rateType == 7)
 | |
| 								{
 | |
| 									global W = 2;
 | |
| 									/*W:>1;*/
 | |
| 									global P	 = 1-1/(resp+1);
 | |
| 									global betaP = 1;
 | |
| 									global betaQ = 2;
 | |
| 									betaP:>0.05;
 | |
| 									betaQ:>0.05;
 | |
| 									betaP:<85;
 | |
| 									betaQ:<85;
 | |
| 									P:>0.0000001;
 | |
| 									P:<0.9999999;
 | |
| 									categFreqMatrix = {resp+1,1};
 | |
| 									for (k=0; k<resp; k=k+1)
 | |
| 									{
 | |
| 										categFreqMatrix[k]:=P/resp__;
 | |
| 									}
 | |
| 									categFreqMatrix[resp]:=(1-P);
 | |
| 									category c = (resp+1, categFreqMatrix, MEAN, 
 | |
| 													P*_x_^(betaP-1)*(1-Min(_x_,1))^(betaQ-1)/Beta(betaP,betaQ)+W-W, 
 | |
| 													P*IBeta(Min(_x_,1),betaP,betaQ)+(1-P)*(_x_>=W), 
 | |
| 													0,1e25,
 | |
| 													P*IBeta(Min(_x_,1),betaP+1,betaQ)*betaP/(betaP+betaQ)+(1-P)*W*(_x_>=W));
 | |
| 								}
 | |
| 								else
 | |
| 								{
 | |
| 									if (rateType == 8)
 | |
| 									{
 | |
| 										global P	 = .5;
 | |
| 										global betaP = 1;
 | |
| 										global betaQ = 2;
 | |
| 										betaP:>0.05;betaP:<85;
 | |
| 										betaQ:>0.05;betaQ:<85;
 | |
| 										global alpha = .5;
 | |
| 										global beta  = 1;
 | |
| 										alpha:>0.01;alpha:<100;
 | |
| 										beta:>0.01;										
 | |
| 										beta:<200;
 | |
| 										P:<1;
 | |
| 										category c = (resp, EQUAL, MEAN, 
 | |
| 															P*_x_^(betaP-1)*(1-Min(_x_,1))^(betaQ-1)/Beta(betaP,betaQ)+(1-P)*GammaDist(_x_,alpha,beta), 
 | |
| 															P*IBeta(Min(_x_,1),betaP,betaQ)+(1-P)*CGammaDist(_x_,alpha,beta), 
 | |
| 															0,1e25,
 | |
| 															P*betaP/(betaP+betaQ)*IBeta(Min(_x_,1),betaP+1,betaQ)+(1-P)*alpha/beta*CGammaDist(_x_,alpha+1,beta));
 | |
| 									}	
 | |
| 									else
 | |
| 									{
 | |
| 										if (rateType == 9)
 | |
| 										{
 | |
| 											global P	 = .5;
 | |
| 											P:<1;
 | |
| 											global betaP = 1;
 | |
| 											betaP:>0.05;betaP:<85;
 | |
| 											global betaQ = 2;
 | |
| 											betaQ:>0.05;betaQ:<85;
 | |
| 											global alpha = .5;
 | |
| 											alpha:>0.01;alpha:<100;
 | |
| 											global beta  = 1;
 | |
| 											beta:>0.01;beta:<500;
 | |
| 											category c = (resp, EQUAL, MEAN, 
 | |
| 																P*_x_^(betaP-1)*(1-Min(_x_,1))^(betaQ-1)/Beta(betaP,betaQ)+(1-P)*(_x_>1)*GammaDist(Max(1e-20,_x_-1),alpha,beta), 
 | |
| 																P*IBeta(Min(_x_,1),betaP,betaQ)+(1-P)*CGammaDist(Max(_x_-1,0),alpha,beta), 
 | |
| 																0,1e25,
 | |
| 																P*betaP/(betaP+betaQ)*IBeta(Min(_x_,1),betaP+1,betaQ)+
 | |
| 																		(1-P)*(alpha/beta*CGammaDist(Max(0,_x_-1),alpha+1,beta)+CGammaDist(Max(0,_x_-1),alpha,beta)));
 | |
| 										}				
 | |
| 										else
 | |
| 										{
 | |
| 											if (rateType == 10)
 | |
| 											{
 | |
| 												global P	 = .5;
 | |
| 												global betaP = 1;
 | |
| 												global betaQ = 2;
 | |
| 												betaP:>0.05;
 | |
| 												betaQ:>0.05;
 | |
| 												betaP:<85;
 | |
| 												betaQ:<85;
 | |
| 												global mu = 3;
 | |
| 												global sigma  = .01;
 | |
| 												sigma:>0.0001;
 | |
| 												sqrt2pi = Sqrt(8*Arctan(1));
 | |
| 												P:<1;
 | |
| 
 | |
| 												category c = (resp, EQUAL, MEAN, 
 | |
| 																P*_x_^(betaP-1)*(1-Min(_x_,1))^(betaQ-1)/Beta(betaP,betaQ)+
 | |
| 																	(1-P)*(_x_>=1)*Exp(-(_x_-mu)(_x_-mu)/(2*sigma*sigma))/(sqrt2pi__*sigma)/ZCDF((mu-1)/sigma), 
 | |
| 																P*IBeta(Min(_x_,1),betaP,betaQ)+(1-P)*(_x_>=1)*(1-ZCDF((mu-_x_)/sigma)/ZCDF((mu-1)/sigma)), 
 | |
| 																0,1e25,
 | |
| 																P*betaP/(betaP+betaQ)*IBeta(Min(_x_,1),betaP+1,betaQ)+
 | |
| 																(1-P)*(_x_>=1)*(mu*(1-ZCDF((1-mu)/sigma)-ZCDF((mu-_x_)/sigma))+
 | |
| 																sigma*(Exp((mu-1)(1-mu)/(2*sigma*sigma))-Exp((_x_-mu)(mu-_x_)/(2*sigma*sigma)))/sqrt2pi__)/ZCDF((mu-1)/sigma));
 | |
| 											}				
 | |
| 											else
 | |
| 											{
 | |
| 												if (rateType == 11)
 | |
| 												{
 | |
| 													global P	 = 1/3;
 | |
| 													global P1    = .5;
 | |
| 
 | |
| 													global mu = 3;
 | |
| 													global sigma  = .5;
 | |
| 													sigma:>0.0001;
 | |
| 													global sigma1  = 1;
 | |
| 													sigma1:>0.0001;
 | |
| 
 | |
| 													sqrt2pi = Sqrt(8*Arctan(1));
 | |
| 													P:<1;
 | |
| 													P1:<1;
 | |
| 													
 | |
| 													categFreqMatrix = {resp+1,1};
 | |
| 													for (k=1; k<=resp; k=k+1)
 | |
| 													{
 | |
| 														categFreqMatrix[k]:=(1-P)/resp__;
 | |
| 													}
 | |
| 													categFreqMatrix[0]:=P;
 | |
| 
 | |
| 													category c = (resp+1, categFreqMatrix, MEAN,
 | |
| 																	(1-P)((1-P1)*Exp(-(_x_-mu)(_x_-mu)/(2*sigma1*sigma1))/(sqrt2pi__*sigma1)/ZCDF(mu/sigma1)+
 | |
| 																			  P1*Exp(-(_x_-1)(_x_-1)/(2*sigma*sigma))/(sqrt2pi__*sigma)/ZCDF(1/sigma)), 
 | |
| 																	P+(1-P)(_x_>1e-20)((1-P1)(1-ZCDF((mu-_x_)/sigma1)/ZCDF(mu/sigma1))+
 | |
| 																						P1*(1-ZCDF((1-_x_)/sigma)/ZCDF(1/sigma))), 
 | |
| 																	0,1e25,
 | |
| 																	(1-P)((1-P1)(mu*(1-ZCDF(-mu/sigma1)-ZCDF((mu-_x_)/sigma1))+
 | |
| 																	sigma1*(Exp(-mu*mu/(2*sigma1*sigma1))-Exp((_x_-mu)(mu-_x_)/(2*sigma1*sigma1)))/sqrt2pi__)/ZCDF(mu/sigma1)+
 | |
| 																	P(1-ZCDF(-1/sigma)-ZCDF((1-_x_)/sigma)+
 | |
| 																	sigma*(Exp(-1/(2*sigma*sigma))-Exp((_x_-1)(1-_x_)/(2*sigma*sigma)))/sqrt2pi__)/ZCDF(1/sigma))
 | |
| 																 );
 | |
| 												}
 | |
| 												else		
 | |
| 												{
 | |
| 													if (rateType == 12)
 | |
| 													{
 | |
| 														global P	 = 1/3;
 | |
| 														global P1    = .5;
 | |
| 
 | |
| 														global mu = 3;
 | |
| 														global sigma  = .25;
 | |
| 														global sigma1 = .5;
 | |
| 														global sigma2 = 1;
 | |
| 														sigma:>0.0001;
 | |
| 														sigma1:>0.0001;
 | |
| 														sigma2:>0.0001;
 | |
| 
 | |
| 														sqrt2pi = Sqrt(8*Arctan(1));
 | |
| 														P:<1;
 | |
| 														P1:<1;
 | |
| 
 | |
| 														category c = (resp, EQUAL , MEAN,
 | |
| 																		2*P*Exp(-_x_^2/(2*sigma*sigma))+
 | |
| 																		(1-P)((1-P1)*Exp((_x_-mu)(mu-_x_)/(2*sigma2*sigma2))/(sqrt2pi__*sigma2)/ZCDF(mu/sigma2)+
 | |
| 																			  P1*Exp((1-_x_)(_x_-1)/(2*sigma1*sigma1))/(sqrt2pi__*sigma1)/ZCDF(1/sigma1)), 
 | |
| 																		P*(1-2*ZCDF(-_x_/sigma))+
 | |
| 																		(1-P)((1-P1)(1-ZCDF((mu-_x_)/sigma2)/ZCDF(mu/sigma2))+
 | |
| 																			   P1*(1-ZCDF((1-_x_)/sigma1)/ZCDF(1/sigma1))), 
 | |
| 																		0,1e25,
 | |
| 																		2*P*sigma*(1-Exp(-_x_*_x_/(2*sigma*sigma)))/sqrt2pi__+
 | |
| 																		(1-P)((1-P1)(mu*(1-ZCDF(-mu/sigma2)-ZCDF((mu-_x_)/sigma2))+
 | |
| 																		sigma2*(Exp(-mu*mu/(2*sigma2*sigma2))-Exp((_x_-mu)(mu-_x_)/(2*sigma2*sigma2)))/sqrt2pi__)/ZCDF(mu/sigma2)+
 | |
| 																		P1(1-ZCDF(-1/sigma1)-ZCDF((1-_x_)/sigma1)+
 | |
| 																		sigma1*(Exp(-1/(2*sigma1*sigma1))-Exp((_x_-1)(1-_x_)/(2*sigma1*sigma1)))/sqrt2pi__)/ZCDF(mu/sigma1))
 | |
| 																		);
 | |
| 													}	
 | |
| 													else
 | |
| 													{
 | |
| 														if (rateType == 13)
 | |
| 														{
 | |
| 																global sigma = .1;
 | |
| 																sigma:>0.0001;sigma:<10;
 | |
| 																sqrt2pi = Sqrt(8*Arctan(1));
 | |
| 																global _x_:<1e200;
 | |
| 																category c = (resp, EQUAL, MEAN, 
 | |
| 																				Exp (-Log(_x_)*Log(_x_) / (2*sigma*sigma)) / (_x_*sigma*sqrt2pi__), /*density*/
 | |
| 																				ZCDF (Log(_x_)/sigma), /*CDF*/
 | |
| 																				1e-200, 			   /*left bound*/
 | |
| 																				1e200, 			       /*right bound*/
 | |
| 																		  	    Exp (.5*sigma^2)*ZCDF (Log(_x_)/sigma-sigma),
 | |
| 																		  	    CONSTANT_ON_PARTITION
 | |
| 																		  	 );														
 | |
| 														}
 | |
| 														else
 | |
| 														{
 | |
| 															if (rateType == 14)
 | |
| 															{
 | |
| 																global alpha = .5;
 | |
| 																global beta = 1;
 | |
| 																alpha:>0.01;alpha:<100;
 | |
| 																beta:>0.01;
 | |
| 																beta:<200;
 | |
| 																category c = (resp, EQUAL, MEAN, GammaDist(_x_,alpha,beta), CGammaDist(_x_,alpha,beta), 0 , 
 | |
| 														 			 		  1e25,CGammaDist(_x_,alpha+1,beta)*alpha/beta,CONSTANT_ON_PARTITION);
 | |
| 															}
 | |
| 															else
 | |
| 															{
 | |
| 																global P1 = 1/3;
 | |
| 																global P2 = .5;
 | |
| 																P1:<1;
 | |
| 																P2:<1;
 | |
| 																global W1 = .25;
 | |
| 																global R1 = 4;
 | |
| 																global R2 = 3;
 | |
| 																R1:>1;
 | |
| 																R2:>1;
 | |
| 																categFreqMatrix = {{P1,(1-P1)*P2, (1-P1)*(1-P2)}} ;
 | |
| 																categRateMatrix = {{W1,W1*R1,W1*R1*R2}};
 | |
| 																category c = (3, categFreqMatrix , MEAN, ,categRateMatrix, 0, 1e25, ,CONSTANT_ON_PARTITION);				
 | |
| 															}
 | |
| 														}
 | |
| 													}
 | |
| 												}				
 | |
| 											}				
 | |
| 										}				
 | |
| 									}						
 | |
| 								}
 | |
| 							}
 | |
| 						}
 | |
| 					}				
 | |
| 				}	
 | |
| 			}	
 | |
| 		}	
 | |
| 	}		
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| /* ____________________________________________________________________________________________________________________*/
 | |
| 
 | |
| function FrameText (frameChar,vertChar,parOff,theText)
 | |
| {
 | |
| 	h = Abs (theText)+4;
 | |
| 	fprintf (stdout,"\n");	
 | |
| 	for (k=0; k<parOff; k=k+1)
 | |
| 	{
 | |
| 		fprintf (stdout," ");
 | |
| 	}
 | |
| 	for (k=0; k<h;k=k+1)
 | |
| 	{
 | |
| 		fprintf (stdout,frameChar);
 | |
| 	}
 | |
| 	fprintf (stdout,"\n");	
 | |
| 	for (k=0; k<parOff; k=k+1)
 | |
| 	{
 | |
| 		fprintf (stdout," ");
 | |
| 	}
 | |
| 	fprintf (stdout,vertChar," ",theText," ",vertChar,"\n");
 | |
| 	for (k=0; k<parOff; k=k+1)
 | |
| 	{
 | |
| 		fprintf (stdout," ");
 | |
| 	}
 | |
| 	for (k=0; k<h;k=k+1)
 | |
| 	{
 | |
| 		fprintf (stdout,frameChar);
 | |
| 	}
 | |
| 	fprintf (stdout,"\n");	
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| /* ____________________________________________________________________________________________________________________*/
 | |
| 
 | |
| function BuildCodonFrequencies4 (obsF)
 | |
| {
 | |
| 	PIStop = 1.0;
 | |
| 	result = {ModelMatrixDimension,1};
 | |
| 	hshift = 0;
 | |
| 
 | |
| 	for (h=0; h<64; h=h+1)
 | |
| 	{
 | |
| 		first = h$16;
 | |
| 		second = h%16$4;
 | |
| 		third = h%4;
 | |
| 		if (_Genetic_Code[h]==10) 
 | |
| 		{
 | |
| 			hshift = hshift+1;
 | |
| 			PIStop = PIStop-obsF[first][0]*obsF[second][0]*obsF[third][0];
 | |
| 			continue; 
 | |
| 		}
 | |
| 		result[h-hshift][0]=obsF[first][0]*obsF[second][0]*obsF[third][0];
 | |
| 	}
 | |
| 	return result*(1.0/PIStop);
 | |
| }
 | |
| 
 | |
| /* ____________________________________________________________________________________________________________________*/
 | |
| 
 | |
| function BuildCodonFrequencies12 (obsF)
 | |
| {
 | |
| 	PIStop = 1.0;
 | |
| 	result = {ModelMatrixDimension,1};
 | |
| 	hshift = 0;
 | |
| 
 | |
| 	for (h=0; h<64; h=h+1)
 | |
| 	{
 | |
| 		first = h$16;
 | |
| 		second = h%16$4;
 | |
| 		third = h%4;
 | |
| 		if (_Genetic_Code[h]==10) 
 | |
| 		{
 | |
| 			hshift = hshift+1;
 | |
| 			PIStop = PIStop-obsF[first][0]*obsF[second][1]*obsF[third][2];
 | |
| 			continue; 
 | |
| 		}
 | |
| 		result[h-hshift][0]=obsF[first][0]*obsF[second][1]*obsF[third][2];
 | |
| 	}
 | |
| 	return result*(1.0/PIStop);
 | |
| }
 | |
| /* ____________________________________________________________________________________________________________________*/
 | |
| 
 | |
| 
 | |
| function GetDistributionParameters (sigLevel)
 | |
| {
 | |
| 	GetInformation (distrInfo,c);
 | |
| 	D = Columns(distrInfo);
 | |
| 	E = 0.0;
 | |
| 	T = 0.0;
 | |
| 	sampleVar = 0.0;
 | |
| 	for (k=0; k<D; k=k+1)
 | |
| 	{
 | |
| 		T = distrInfo[0][k]*distrInfo[1][k];
 | |
| 		E = E+T;
 | |
| 		sampleVar = T*distrInfo[0][k]+sampleVar;
 | |
| 	}
 | |
| 	sampleVar = sampleVar-E*E;
 | |
| 	fprintf  (LAST_FILE_PATH,"\n\n------------------------------------------------\n\ndN/dS = ",E, " (sample variance = ",sampleVar,")\n");
 | |
| 	for (k=0; k<D; k=k+1)
 | |
| 	{
 | |
| 		fprintf (LAST_FILE_PATH,"\nRate[",Format(k+1,0,0),"]=",
 | |
| 				 Format(distrInfo[0][k],12,8), " (weight=", Format(distrInfo[1][k],9,7),")");
 | |
| 	}
 | |
| 	
 | |
| 	for (k=0; k<D; k=k+1)
 | |
| 	{
 | |
| 		if (distrInfo[0][k]>1) break;
 | |
| 	}
 | |
| 	if (k<D)
 | |
| 	/* have rates > 1 */
 | |
| 	{
 | |
| 		ConstructCategoryMatrix(marginals,lf,COMPLETE);
 | |
| 		
 | |
| 		CC = Columns (marginals);
 | |
| 		if (rateType>=13)
 | |
| 		/* subset rate variation */
 | |
| 		{
 | |
| 			CC  = CC/numberOfSubsets;
 | |
| 			
 | |
| 			subsetMarginals = {D,numberOfSubsets};
 | |
| 			for (v=0; v<numberOfSubsets; v=v+1)
 | |
| 			{
 | |
| 				for (l=0; l<D; l=l+1)
 | |
| 				{
 | |
| 					for (h=0; h<CC; h=h+1)
 | |
| 					{
 | |
| 						subsetMarginals[l][v] = subsetMarginals[l][v] + marginals[l][v*CC+h];
 | |
| 					}
 | |
| 				}
 | |
| 			}
 | |
| 			marginals = subsetMarginals;
 | |
| 			subsetMarginals = 0;
 | |
| 			fprintf  (LAST_FILE_PATH,"\n\n------------------------------------------------\n\n Subsets with dN/dS>1 (Posterior cutoff = ",sigLevel,")\n\n");
 | |
| 			for (v=0; v<numberOfSubsets; v=v+1)
 | |
| 			{
 | |
| 				sampleVar = 0;
 | |
| 				for (h=0; h<D; h=h+1)
 | |
| 				{
 | |
| 					sampleVar = sampleVar+distrInfo[1][h]*marginals[h][v];
 | |
| 				}
 | |
| 				positiveProb = 0;
 | |
| 				for (l=k; l<D; l=l+1)
 | |
| 				{
 | |
| 					positiveProb = positiveProb+distrInfo[1][l]*marginals[l][v];
 | |
| 				}
 | |
| 				positiveProb = positiveProb/sampleVar;
 | |
| 				marginals[0][v] = positiveProb;
 | |
| 				if (positiveProb>=sigLevel)
 | |
| 				{
 | |
| 					fprintf (LAST_FILE_PATH,Format (v+1,0,0)," (",positiveProb,")\n");
 | |
| 				}
 | |
| 			}
 | |
| 			fprintf  (LAST_FILE_PATH,"\n\n------------------------------------------------\n\n Subsets with dN/dS<=1 (Posterior cutoff = ",sigLevel,")\n\n");
 | |
| 			for (v=0; v<numberOfSubsets; v=v+1)
 | |
| 			{
 | |
| 				if (marginals[0][v]<sigLevel)
 | |
| 				{
 | |
| 					fprintf (LAST_FILE_PATH,Format (v+1,0,0)," (",marginals[0][v],")\n");
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 		else
 | |
| 		{
 | |
| 			fprintf  (LAST_FILE_PATH,"\n\n------------------------------------------------\n\n Sites with dN/dS>1 (Posterior cutoff = ",sigLevel,")\n\n");
 | |
| 			for (v=0; v<CC; v=v+1)
 | |
| 			{
 | |
| 				sampleVar = 0;
 | |
| 				for (h=0; h<D; h=h+1)
 | |
| 				{
 | |
| 					sampleVar = sampleVar+distrInfo[1][h]*marginals[h][v];
 | |
| 				}
 | |
| 				positiveProb = 0;
 | |
| 				for (l=k; l<D; l=l+1)
 | |
| 				{
 | |
| 					positiveProb = positiveProb+distrInfo[1][l]*marginals[l][v];
 | |
| 				}
 | |
| 				positiveProb = positiveProb/sampleVar;
 | |
| 				marginals[0][v] = positiveProb;
 | |
| 				if (positiveProb>=sigLevel)
 | |
| 				{
 | |
| 					fprintf (LAST_FILE_PATH,Format (v+1,0,0)," (",positiveProb,")\n");
 | |
| 				}
 | |
| 			}
 | |
| 			fprintf  (LAST_FILE_PATH,"\n\n------------------------------------------------\n\n Sites with dN/dS<=1 (Posterior cutoff = ",sigLevel,")\n\n");
 | |
| 			for (v=0; v<CC; v=v+1)
 | |
| 			{
 | |
| 				if (marginals[0][v]<sigLevel)
 | |
| 				{
 | |
| 					fprintf (LAST_FILE_PATH,Format (v+1,0,0)," (",marginals[0][v],")\n");
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 		marginals = 0;
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		fprintf  (LAST_FILE_PATH,"\n\n------------------------------------------------\n\n No rate classes with dN/dS>1.");
 | |
| 	}
 | |
| 	fprintf  (LAST_FILE_PATH,"\n\n------------------------------------------------\n\n");
 | |
| 	return E;
 | |
| }
 | |
| 
 | |
| /* ____________________________________________________________________________________________________________________*/
 | |
| 
 | |
| function PopulateModelMatrix (ModelMatrixName&, EFV)
 | |
| {
 | |
| 	ModelMatrixName = {ModelMatrixDimension,ModelMatrixDimension}; 
 | |
| 
 | |
| 	hshift = 0;
 | |
| 	
 | |
| 	if (modelType==0)
 | |
| 	{
 | |
| 		for (h=0; h<64; h=h+1)
 | |
| 		{
 | |
| 			if (_Genetic_Code[h]==10) 
 | |
| 			{
 | |
| 				hshift = hshift+1;
 | |
| 				continue; 
 | |
| 			}
 | |
| 			vshift = hshift;
 | |
| 			for (v = h+1; v<64; v=v+1)
 | |
| 			{
 | |
| 				diff = v-h;
 | |
| 				if (_Genetic_Code[v]==10) 
 | |
| 				{
 | |
| 					vshift = vshift+1;
 | |
| 					continue; 
 | |
| 				}
 | |
| 			  	if ((h$4==v$4)||((diff%4==0)&&(h$16==v$16))||(diff%16==0))
 | |
| 			  	{
 | |
| 			  		if (h$4==v$4)
 | |
| 			  		{
 | |
| 			  			transition = v%4;
 | |
| 			  			transition2= h%4;
 | |
| 			  		}
 | |
| 			  		else
 | |
| 			  		{
 | |
| 			  			if(diff%16==0)
 | |
| 			  			{
 | |
| 			  				transition = v$16;
 | |
| 			  				transition2= h$16;
 | |
| 			  			}
 | |
| 			  			else
 | |
| 			  			{
 | |
| 			  				transition = v%16$4;
 | |
| 			  				transition2= h%16$4;
 | |
| 			  			}
 | |
| 			  		}
 | |
| 			  		if (_Genetic_Code[0][h]==_Genetic_Code[0][v]) 
 | |
| 			  		{
 | |
| 			  			ModelMatrixName[h-hshift][v-vshift] := t*EFV__[transition__];
 | |
| 			  			ModelMatrixName[v-vshift][h-hshift] := t*EFV__[transition2__];
 | |
| 				  	}
 | |
| 			  		else
 | |
| 			  		{
 | |
| 				  		ModelMatrixName[h-hshift][v-vshift] := c*t*EFV__[transition__];
 | |
| 			  			ModelMatrixName[v-vshift][h-hshift] := c*t*EFV__[transition2__];
 | |
| 		  			}
 | |
| 			  	}
 | |
| 			  }
 | |
| 		}
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		if (modelType==1)
 | |
| 		{
 | |
| 			for (h=0; h<64; h=h+1)
 | |
| 			{
 | |
| 				if (_Genetic_Code[h]==10) 
 | |
| 				{
 | |
| 					hshift = hshift+1;
 | |
| 					continue; 
 | |
| 				}
 | |
| 				vshift = hshift;
 | |
| 				for (v = h+1; v<64; v=v+1)
 | |
| 				{
 | |
| 					diff = v-h;
 | |
| 					if (_Genetic_Code[v]==10) 
 | |
| 					{
 | |
| 						vshift = vshift+1;
 | |
| 						continue; 
 | |
| 					}
 | |
| 					nucPosInCodon = 2;
 | |
| 				  	if ((h$4==v$4)||((diff%4==0)&&(h$16==v$16))||(diff%16==0))
 | |
| 				  	{
 | |
| 				  		if (h$4==v$4)
 | |
| 				  		{
 | |
| 				  			transition = v%4;
 | |
| 				  			transition2= h%4;
 | |
| 				  		}
 | |
| 				  		else
 | |
| 				  		{
 | |
| 				  			if(diff%16==0)
 | |
| 				  			{
 | |
| 				  				transition = v$16;
 | |
| 				  				transition2= h$16;
 | |
| 								nucPosInCodon = 0;
 | |
| 				  			}
 | |
| 				  			else
 | |
| 				  			{
 | |
| 				  				transition = v%16$4;
 | |
| 				  				transition2= h%16$4;
 | |
| 								nucPosInCodon = 1;
 | |
| 				  			}
 | |
| 				  		}
 | |
| 				  		if (_Genetic_Code[0][h]==_Genetic_Code[0][v]) 
 | |
| 				  		{
 | |
| 				  			ModelMatrixName[h-hshift][v-vshift] := t*EFV__[transition__][nucPosInCodon__];
 | |
| 				  			ModelMatrixName[v-vshift][h-hshift] := t*EFV__[transition2__][nucPosInCodon__];
 | |
| 					  	}
 | |
| 				  		else
 | |
| 				  		{
 | |
| 					  		ModelMatrixName[h-hshift][v-vshift] := c*t*EFV__[transition__][nucPosInCodon__];
 | |
| 				  			ModelMatrixName[v-vshift][h-hshift] := c*t*EFV__[transition2__][nucPosInCodon__];
 | |
| 			  			}
 | |
| 				  	}
 | |
| 				  }
 | |
| 			}
 | |
| 		}
 | |
| 		else
 | |
| 		{
 | |
| 			for (h=0; h<64; h=h+1)
 | |
| 			{
 | |
| 				if (_Genetic_Code[h]==10) 
 | |
| 				{
 | |
| 					hshift = hshift+1;
 | |
| 					continue; 
 | |
| 				}
 | |
| 				vshift = hshift;
 | |
| 				for (v = h+1; v<64; v=v+1)
 | |
| 				{
 | |
| 					diff = v-h;
 | |
| 					if (_Genetic_Code[v]==10) 
 | |
| 					{
 | |
| 						vshift = vshift+1;
 | |
| 						continue; 
 | |
| 					}
 | |
| 				  	if ((h$4==v$4)||((diff%4==0)&&(h$16==v$16))||(diff%16==0))
 | |
| 				  	{
 | |
| 				  		if (h$4==v$4)
 | |
| 				  		{
 | |
| 				  			transition = v%4;
 | |
| 				  			transition2= h%4;
 | |
| 				  		}
 | |
| 				  		else
 | |
| 				  		{
 | |
| 				  			if(diff%16==0)
 | |
| 				  			{
 | |
| 				  				transition = v$16;
 | |
| 				  				transition2= h$16;
 | |
| 				  			}
 | |
| 				  			else
 | |
| 				  			{
 | |
| 				  				transition = v%16$4;
 | |
| 				  				transition2= h%16$4;
 | |
| 				  			}
 | |
| 				  		}
 | |
| 				  		if (_Genetic_Code[0][h]==_Genetic_Code[0][v]) 
 | |
| 				  		{
 | |
| 				  			if (Abs(transition-transition2)%2)
 | |
| 				  			{
 | |
| 				  				ModelMatrixName[h-hshift][v-vshift] := kappa*t;
 | |
| 				  				ModelMatrixName[v-vshift][h-hshift] := kappa*t;
 | |
| 				  			}
 | |
| 				  			else
 | |
| 				  			{
 | |
| 				  				ModelMatrixName[h-hshift][v-vshift] := t;
 | |
| 				  				ModelMatrixName[v-vshift][h-hshift] := t;
 | |
| 				  			}
 | |
| 				  			
 | |
| 					  	}
 | |
| 				  		else
 | |
| 				  		{
 | |
| 				  			if (Abs(transition-transition2)%2)
 | |
| 				  			{
 | |
| 				  				ModelMatrixName[h-hshift][v-vshift] := kappa*c*t;
 | |
| 				  				ModelMatrixName[v-vshift][h-hshift] := kappa*c*t;
 | |
| 				  			}
 | |
| 				  			else
 | |
| 				  			{
 | |
| 				  				ModelMatrixName[h-hshift][v-vshift] := c*t;
 | |
| 				  				ModelMatrixName[v-vshift][h-hshift] := c*t;
 | |
| 				  			}
 | |
| 					  	}
 | |
| 				  	}	
 | |
| 				 }
 | |
| 			}	
 | |
| 		}
 | |
| 	 }
 | |
| 	 return (modelType>1);
 | |
| }
 | |
| 
 | |
| /* ____________________________________________________________________________________________________________________*/
 | |
| 
 | |
| function PopulateModelMatrix2 (ModelMatrixName&, EFV)
 | |
| {
 | |
| 	ModelMatrixName = {ModelMatrixDimension,ModelMatrixDimension}; 
 | |
| 
 | |
| 	hshift = 0;
 | |
| 	
 | |
| 	for (h=0; h<64; h=h+1)
 | |
| 	{
 | |
| 		if (_Genetic_Code[h]==10) 
 | |
| 		{
 | |
| 			hshift = hshift+1;
 | |
| 			continue; 
 | |
| 		}
 | |
| 		vshift = hshift;
 | |
| 		for (v = h+1; v<64; v=v+1)
 | |
| 		{
 | |
| 			diff = v-h;
 | |
| 			if (_Genetic_Code[v]==10) 
 | |
| 			{
 | |
| 				vshift = vshift+1;
 | |
| 				continue; 
 | |
| 			}
 | |
| 		  	if ((h$4==v$4)||((diff%4==0)&&(h$16==v$16))||(diff%16==0))
 | |
| 		  	{
 | |
| 		  		if (h$4==v$4)
 | |
| 		  		{
 | |
| 		  			transition = v%4;
 | |
| 		  			transition2= h%4;
 | |
| 		  		}
 | |
| 		  		else
 | |
| 		  		{
 | |
| 		  			if(diff%16==0)
 | |
| 		  			{
 | |
| 		  				transition = v$16;
 | |
| 		  				transition2= h$16;
 | |
| 		  			}
 | |
| 		  			else
 | |
| 		  			{
 | |
| 		  				transition = v%16$4;
 | |
| 		  				transition2= h%16$4;
 | |
| 		  			}
 | |
| 		  		}
 | |
| 		  		if (_Genetic_Code[0][h]==_Genetic_Code[0][v]) 
 | |
| 		  		{
 | |
| 		  			if (Abs(transition-transition2)%2)
 | |
| 		  			{
 | |
| 		  				ExecuteCommands ("ModelMatrixName[h-hshift][v-vshift] := kappa"+l+"*t;ModelMatrixName[v-vshift][h-hshift] := kappa"+l+"*t;");
 | |
| 		  			}
 | |
| 		  			else
 | |
| 		  			{
 | |
| 		  				ModelMatrixName[h-hshift][v-vshift] := t;
 | |
| 		  				ModelMatrixName[v-vshift][h-hshift] := t;
 | |
| 		  			}
 | |
| 		  			
 | |
| 			  	}
 | |
| 		  		else
 | |
| 		  		{
 | |
| 		  			if (Abs(transition-transition2)%2)
 | |
| 		  			{
 | |
| 		  				ExecuteCommands ("ModelMatrixName[h-hshift][v-vshift] := c*kappa"+l+"*t;ModelMatrixName[v-vshift][h-hshift] := c*kappa"+l+"*t;");
 | |
| 		  			}
 | |
| 		  			else
 | |
| 		  			{
 | |
| 		  				ModelMatrixName[h-hshift][v-vshift] := c*t;
 | |
| 		  				ModelMatrixName[v-vshift][h-hshift] := c*t;
 | |
| 		  			}
 | |
| 			  	}
 | |
| 		  	}	
 | |
| 		 }
 | |
| 	}	
 | |
| 	return 1;
 | |
| }
 | |
| /* ____________________________________________________________________________________________________________________*/
 | |
| 
 | |
| function spawnLikelihood (kappaSharedOrNot)
 | |
| {
 | |
| 	if (kappaSharedOrNot)
 | |
| 	{
 | |
| 		for (l=0; l<numberOfSubsets;l=l+1)
 | |
| 		{
 | |
| 			if (modelType<=1)
 | |
| 			{
 | |
| 				ExecuteCommands ("modelMatrix"+l+" = 0;MULTIPLY_BY_FREQS = PopulateModelMatrix (\"modelMatrix"+l+"\", observedFreq"+l+");");
 | |
| 			}
 | |
| 			else
 | |
| 			{
 | |
| 				ExecuteCommands ("modelMatrix"+l+" = 0;MULTIPLY_BY_FREQS = PopulateModelMatrix2 (\"modelMatrix"+l+"\", observedFreq"+l+");");
 | |
| 			}			
 | |
| 			ExecuteCommands ("Model theModel"+l+" = (modelMatrix"+l+",vectorOfFrequencies"+l+",MULTIPLY_BY_FREQS);");
 | |
| 			partitionTreeString=partitionTrees[l];
 | |
| 			ExecuteCommands ("Tree subsetTree"+l+"=partitionTreeString;");
 | |
| 		}	
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		MULTIPLY_BY_FREQS = PopulateModelMatrix ("modelMatrix", observedFreq);
 | |
| 		Model theModel = (modelMatrix,vectorOfFrequencies,MULTIPLY_BY_FREQS);
 | |
| 		for (v=0; v<numberOfSubsets;v=v+1)
 | |
| 		{
 | |
| 			partitionTreeString=partitionTrees[v];
 | |
| 			ExecuteCommands ("Tree subsetTree"+v+"=partitionTreeString;");
 | |
| 		}
 | |
| 	}
 | |
| 	lfSpawnString = "LikelihoodFunction lf = (";
 | |
| 	for (v=0; v<numberOfSubsets;v=v+1)
 | |
| 	{
 | |
| 		if (v)
 | |
| 		{
 | |
| 			lfSpawnString = lfSpawnString+",";
 | |
| 		}
 | |
| 		lfSpawnString = lfSpawnString+"subsetFilter"+v+",subsetTree"+v;
 | |
| 	}
 | |
| 	lfSpawnString = lfSpawnString+");";
 | |
| 	ExecuteCommands (lfSpawnString);
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| 
 | |
| /* ____________________________________________________________________________________________________________________*/
 | |
| 
 | |
| NICETY_LEVEL = 3;
 | |
| 
 | |
| #include "TemplateModels/chooseGeneticCode.def";
 | |
| 
 | |
| ModelMatrixDimension = 64;
 | |
| for (h = 0 ;h<64; h=h+1)
 | |
| {
 | |
| 	if (_Genetic_Code[h]==10)
 | |
| 	{
 | |
| 		ModelMatrixDimension = ModelMatrixDimension-1;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| #include "MFPSreader.def";
 | |
| 
 | |
| /* now spawn the dataset filters */
 | |
| 
 | |
| 
 | |
| lowerSeqBound = 0;
 | |
| for (modelType=0; modelType<numberOfSubsets; modelType = modelType+1)
 | |
| {
 | |
| 	ExecuteCommands ("DataSetFilter   subsetFilter"+modelType+"= CreateFilter (ds,3,\"\",(speciesIndex>=lowerSeqBound)&&(speciesIndex<lowerSeqBound+partitionLengths[modelType]),GeneticCodeExclusions);");
 | |
| 	lowerSeqBound = lowerSeqBound+partitionLengths[modelType];
 | |
| }
 | |
| 
 | |
| chosenModelList = {17,1};
 | |
| 
 | |
| ChoiceList (modelType,"Distributions",1,SKIP_NONE,
 | |
| 			"Run All","Run all available dN/dS distributions",
 | |
| 			"Run Custom","Choose from available dN/dS distributions.");
 | |
| 			
 | |
| if (modelType<0)
 | |
| {
 | |
| 	return;
 | |
| }
 | |
| 
 | |
| if (modelType==0)
 | |
| {
 | |
| 	for (rateType = 0; rateType<17; rateType=rateType+1)
 | |
| 	{
 | |
| 		chosenModelList[rateType][0] = 1;
 | |
| 	}
 | |
| }
 | |
| else
 | |
| {
 | |
| 	ChoiceList (modelTypes,"Distributions",0,SKIP_NONE,
 | |
| 				"Single Rate","Single Rate",
 | |
| 				"Neutral","Neutral",
 | |
| 	  			"Selection","Selection",
 | |
| 			    "Discrete","Discrete",
 | |
| 			    "Freqs","Freqs",
 | |
| 			    "Gamma","Gamma",
 | |
| 			    "2 Gamma","2 Gamma",
 | |
| 			    "Beta","Beta",
 | |
| 			    "Beta & w","Beta & w",
 | |
| 			    "Beta & Gamma","Beta & Gamma",
 | |
| 			    "Beta & (Gamma+1)","Beta & (Gamma+1)",
 | |
| 			    "Beta & (Normal>1)","Beta & (Normal>1)",
 | |
| 			    "0 & 2 (Normal>1)","0 & 2 (Normal>1)",
 | |
| 			    "3 Normal","3 Normal",
 | |
| 			    "RE:Log normal","Random Effects: Log normal",
 | |
| 			    "RE:Gamma","Random Effects: Gamma",
 | |
| 			    "RE:Discrete","Random Effects: 3 bin Discrete");
 | |
| 			    
 | |
| 	if (modelTypes[0]<0)
 | |
| 	{
 | |
| 		return;
 | |
| 	}
 | |
| 	for (rateType = 0; rateType < Rows(modelTypes)*Columns(modelTypes); rateType = rateType + 1)
 | |
| 	{
 | |
| 		modelType = modelTypes[rateType];
 | |
| 		chosenModelList[modelType] = 1;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| ChoiceList (shareType,"Choose parameter sharing mode",1,SKIP_NONE,
 | |
| 			"All","Share dN/dS, transversion/transition ratio (if applicable) and base frequencies for all subsets.",
 | |
| 			"dN/dS Only","Share only dN/dS. Transversion/transition ratio (if applicable) and base frequencies are separate for each subset."
 | |
| );
 | |
| 
 | |
| if (shareType<0)
 | |
| {
 | |
| 	return;
 | |
| }
 | |
| 
 | |
| ChoiceList (modelType,"Choose a model",1,SKIP_NONE,
 | |
| 			"MG94 1x4","Muse-Gaut 94 model with 4(-1) nucleotide frequency parameters (intra-codon position independent).",
 | |
| 			"MG94 3x4","Muse-Gaut 94 model with 12(-3) nucleotide frequency parameters (intra-codon position specific).",
 | |
| 			"GY94 1x4","Goldman-Yang 94 model with 4(-1) nucleotide frequency parameters (intra-codon position independent).",
 | |
| 			"GY94 3x4","Goldman-Yang 94 model with 12(-3) nucleotide frequency parameters (intra-codon position specific)."
 | |
| );
 | |
| 
 | |
| if (modelType<0)
 | |
| {
 | |
| 	return;
 | |
| }
 | |
| 
 | |
| if ((modelType==0)||(modelType==2))
 | |
| {
 | |
| 	if (shareType==0)
 | |
| 	{
 | |
| 		HarvestFrequencies (observedFreq,filteredData,1,1,0);
 | |
| 		vectorOfFrequencies = BuildCodonFrequencies4 (observedFreq);
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		for (v=0; v<numberOfSubsets;v=v+1)
 | |
| 		{
 | |
| 			ExecuteCommands ("global kappa"+v+"=2.;HarvestFrequencies (observedFreq"+v+",subsetFilter"+v+",1,1,0);vectorOfFrequencies"+v+"= BuildCodonFrequencies4 (observedFreq"+v+");");
 | |
| 		}		
 | |
| 	}
 | |
| }
 | |
| else
 | |
| {
 | |
| 	if (shareType==0)
 | |
| 	{
 | |
| 		HarvestFrequencies (observedFreq,filteredData,3,1,1);
 | |
| 		vectorOfFrequencies = BuildCodonFrequencies12 (observedFreq);
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		for (v=0; v<numberOfSubsets;v=v+1)
 | |
| 		{
 | |
| 			ExecuteCommands ("global kappa"+v+"=2.;HarvestFrequencies (observedFreq"+v+",subsetFilter"+v+",3,1,1);vectorOfFrequencies"+v+"= BuildCodonFrequencies12 (observedFreq"+v+");");
 | |
| 		}		
 | |
| 	}
 | |
| }
 | |
| 
 | |
| if (modelType>1)
 | |
| {	
 | |
| 	global kappa = 2.;
 | |
| }
 | |
| 
 | |
| fprintf (stdout, "\n\n\nChoose the cutoff (0 to 1) for posterior of dN/dS>1 for a site to be considered under selective pressure:");
 | |
| fscanf  (stdin, "Number",psigLevel);
 | |
| if ((psigLevel <= 0)||(psigLevel>1))
 | |
| {
 | |
| 	psigLevel = .95;
 | |
| }
 | |
| fprintf (stdout, "\n>Using ", psigLevel , " cutoff\n");
 | |
| 
 | |
| fprintf (stdout, "\nChoose the number of categories in discretized distributions:");
 | |
| fscanf  (stdin, "Number",categCount);
 | |
| categCount = categCount$1;
 | |
| if (categCount<=0)
 | |
| {
 | |
| 	categCount = 8;
 | |
| }
 | |
| 
 | |
| fprintf (stdout, "\n>Using ", Format (categCount,0,0), " categories.\n");
 | |
| 
 | |
| SetDialogPrompt ("Write detailed results to:");
 | |
| 
 | |
| fprintf (PROMPT_FOR_FILE,CLEAR_FILE);
 | |
| 
 | |
| global c = 1.;
 | |
| 
 | |
| dummyVar = FrameText ("-","|",2,"SUMMARY TABLE");
 | |
| tableSeparator =  "+-------------------------+----------------+---------------+-----+\n";
 | |
| fprintf (stdout, "\n\"p\" is the number of parameters in addition to the branch lengths.\nDetailed results including sites with dN/dS>1 will be written to\n",LAST_FILE_PATH,"\n\n");
 | |
| fprintf (stdout, tableSeparator,
 | |
| 				 "| MODEL (Number & Desc)   | Log likelihood | 	   dN/dS     |  p  |\n",
 | |
| 				 tableSeparator);
 | |
| 				 
 | |
| cachedBranchLengths = {{-1,-1}};
 | |
| 				 
 | |
| if (chosenModelList[0]>0)
 | |
| {
 | |
| 	timer = Time(1);
 | |
| 	fprintf (LAST_FILE_PATH,"\n*** RUNNING SINGLE RATE MODEL ***\n#################################\n");
 | |
| 	dummy = spawnLikelihood (shareType);
 | |
| 	Optimize (res,lf);
 | |
| 	fprintf (LAST_FILE_PATH,"\n>Done in ", Time(1)-timer, " seconds \n\n");
 | |
| 	fprintf (LAST_FILE_PATH,lf,"\n\n-----------------------------------\n\ndN/dS = ",c,"\n\n");
 | |
| 
 | |
| 	fprintf (stdout, "|  0. Single Rate Model   | ",Format (res[1][0],14,6)," | ",Format (c,13,8)," |  0  |\n",
 | |
| 					 tableSeparator);
 | |
| 					 
 | |
| 	timer = res[1][1]-res[1][2];
 | |
| 	cachedBranchLengths = {timer,1};
 | |
| 	
 | |
| 	for (rateType = timer; rateType < Columns(cachedBranchLengths); rateType = rateType+1)
 | |
| 	{
 | |
| 		cachedBranchLengths[rateType-timer][0] = res [0][rateType];
 | |
| 	}
 | |
| }
 | |
| 
 | |
| for (rateType = 0; rateType < 16; rateType = rateType + 1)
 | |
| {
 | |
| 	if (chosenModelList[rateType+1]==0)
 | |
| 	{
 | |
| 		continue;
 | |
| 	}
 | |
| 	timer = Time(1);
 | |
| 	dummy = SetWDistribution (categCount);
 | |
| 	dummy = spawnLikelihood (shareType);
 | |
| 	
 | |
| 	fprintf (LAST_FILE_PATH,"\n*** RUNNING MODEL ", Format(rateType+1,0,0), " (",ModelNames[rateType],") ***\n######################################\n");
 | |
| 	/*if (cachedBranchLengths[0][0]>=0.0)
 | |
| 	{
 | |
| 		v = ParameterCount[rateType];
 | |
| 		if (modelType>1)
 | |
| 		{
 | |
| 			v=v+1;
 | |
| 		}
 | |
| 		for (h=0; h<Rows(cachedBranchLengths); h=h+1)
 | |
| 		{
 | |
| 			SetParameter (lf,h+v,cachedBranchLengths[h][0]);
 | |
| 		}
 | |
| 	}*/
 | |
| 	Optimize (res,lf);
 | |
| 	fprintf (LAST_FILE_PATH,"\n>Done in ",Time(1)-timer, " seconds \n\n", lf);
 | |
| 	fprintf (stdout, "| ");
 | |
| 	if (rateType<9)
 | |
| 	{
 | |
| 		fprintf (stdout," ");
 | |
| 	}
 | |
| 	fprintf (stdout, Format (rateType+1,0,0), ". ", ModelNames[rateType]);
 | |
| 	for (dummy = Abs(ModelNames[rateType])+5; dummy<25; dummy = dummy+1)
 | |
| 	{
 | |
| 		fprintf (stdout," ");
 | |
| 	}
 | |
| 	dummy = GetDistributionParameters(psigLevel);
 | |
| 	fprintf (stdout,"| ",Format (res[1][0],14,6)," | ",Format (dummy,13,8)," |  ",
 | |
| 						 Format(ParameterCount[rateType],0,0),"  |\n",tableSeparator);
 | |
| 
 | |
| 	if (modelType>1)
 | |
| 	{	
 | |
| 		kappa = 2.;
 | |
| 	}
 | |
| }
 |