Ejemplo n.º 1
0
void SetAAModel(int theAAModel)
{
	aaModel = theAAModel;

	switch (aaModel) {
		case AA_JTT: SetRelativeRates(jttRelativeRates); break;
		case AA_WAG: SetRelativeRates(wagRelativeRates); break;
		case AA_DAYHOFF78: SetRelativeRates(dayhoffRelativeRates); break;
		case AA_BLOSUM62: SetRelativeRates(blosumRelativeRates); break;
		case AA_MTREV24: SetRelativeRates(mtrevRelativeRates); break;
		case AA_CPREV45: SetRelativeRates(cprevRelativeRates); break;
		case AA_GENERAL:
			// relative rates set by user
		break;
	}

	if (!aaFreqSet) {
		switch (aaModel) {
			case AA_JTT: SetFrequencies(jttFrequencies); break;
			case AA_WAG: SetFrequencies(wagFrequencies); break;
			case AA_DAYHOFF78: SetFrequencies(dayhoffFrequencies); break;
			case AA_BLOSUM62: SetFrequencies(blosumFrequencies); break;
			case AA_MTREV24: SetFrequencies(mtrevFrequencies); break;
			case AA_CPREV45: SetFrequencies(cprevFrequencies); break;
			case AA_GENERAL:
				// frequencies set by user
			break;
		}
	} else {
		// User set or equal frequencies
		CheckAAFrequencies();
	}

	SetupAAMatrix();
}
Ejemplo n.º 2
0
void RateMatrix::SetAAFreqs(int theModel, inClade *branch) 
{
	switch (theModel) {
		case AA_JTT: SetFrequencies(jttFrequencies, branch); break;
		case AA_WAG: SetFrequencies(wagFrequencies, branch); break;
		case AA_DAYHOFF78: SetFrequencies(dayhoffFrequencies, branch); break;
		case AA_BLOSUM62: SetFrequencies(blosumFrequencies, branch); break;
		case AA_MTREV24: SetFrequencies(mtrevFrequencies, branch); break;
		case AA_CPREV45: SetFrequencies(cprevFrequencies, branch); break;
		default: cerr << "You cannot set the general matrix in lineages." << endl; exit(EXIT_FAILURE);
	}
}
Ejemplo n.º 3
0
void RateMatrix::SetModel(
						  inClade *branch
						 )
{	
	int i;
	bool freqSet = true;
	double a, b, c, d, e, f, a_, b_, c_, d_, e_, f_, kappa1, kappa2, alpha, beta, gamma, delta;
	double sum_freq = 0;	
	
	cerr << "Point-> RateMatrix::SetModel(inClade *branch) IN" << endl;
	
	if (isNucModel) stateCharacters = nucleotides;
	else stateCharacters = aminoAcids;

	//////////
	/// freqSet does not matter for nucleotides. It should always be set for nuc models that do
	/// not require equal frequencies. For amino acid models, though, need to know if the freqs
	/// are set, otherwise they can be overwritten by model-specific pi values.
	//////////
	if (branch != NULL) {
		if ( !(branch->values2Export2Freq.empty()) ) {
			for (int j = 0; j < numStates; j++)
				pi.at(j) = branch->values2Export2Freq.at(j);
		} else freqSet = false;
	} else freqSet = false;

	for (vector<double>::iterator it = pi.begin(); it != pi.end(); ++it)
		sum_freq += (*it);
	for (vector<double>::iterator it = pi.begin(); it != pi.end(); ++it)
		(*it) /= sum_freq;

	//////////
	/// Putting model parameters explicitly, easier to understand.
	//////////
	switch (substitution_model)
	{
		case NUC_JC69:
			////////// OK
			///     | * 1 1 1 |
			/// Q = | 1 * 1 1 |
			///     | 1 1 * 1 |
			///     | 1 1 1 * |
			//////////
			a=b=c=d=e=f=a_=b_=c_=d_=e_=f_=1;
			pi.at(A) = pi.at(C) = pi.at(G) = pi.at(T) = 0.25;
		break;
		case NUC_K80:
			////////// OK
			///     | * 1 K 1 |
			/// Q = | 1 * 1 K |
			///     | K 1 * 1 |
			///     | 1 K 1 * |
			//////////
			kappa1 = kappa.front();
			b = b_ = e = e_ = kappa1;
			a = a_ = c = c_ = d = d_ = f = f_ = 1.0;
			pi.at(A) = pi.at(C) = pi.at(G) = pi.at(T) = 0.25;
		break;
		case NUC_K81: 
			pi.at(A) = pi.at(C) = pi.at(G) = pi.at(T) = 0.25;
		case NUC_K81ne:
			////////// OK
			///     | *  1  K A |
			/// Q = | 1  *  A K |
			///     | K A  *  1 |
			///     | A K  1  * |
			//////////
			kappa1 = kappa.at(0);
			alpha = kappa.at(1);
			a = 1; b = kappa1; c = alpha;	// *fA
			a_ = 1; d = alpha; e = kappa1;	// *fC
			b_ = kappa1; d_ = alpha; f = 1;	// *fG
			c_ = alpha; e_ = kappa1; f_ = 1;	// *fT
		break;
		case NUC_F81:
			////////// OK
			///     | * fA  fA fA |
			/// Q = | fC *  fC fC |
			///     | fG fG *  fG |
			///     | fT fT fT *  |
			//////////
			a=b=c=d=e=f=a_=b_=c_=d_=e_=f_=1;
		break;
		case NUC_HKY:
			////////// OK
			///     | *   fA  KfA  fA  |
			/// Q = | fC  *   fC   KfC |
			///     | KfG fG  *    fG  |
			///     | fT  KfT fT   *   |
			//////////
			kappa1 = kappa.at(0);
			a = c = 1; b = kappa1;		// *fA
			a_ = d = 1; e = kappa1;		// *fC
			b_ = kappa1; d_ = f = 1;		// *fG
			c_ = f_ = 1; e_ = kappa1;	// *fT
		break;
		case NUC_F84:
			////////// OK
			/// INPUT: kappa
			///     | *               fA              (1+K/(fA+fG))fA fA              |
			/// Q = | fC              *               fC              (1+K/(fC+fT))fC |
			///     | (1+K/(fA+fG))fG fG              *               fG              |
			///     | fT              (1+K/(fC+fT))fT fT              *               |
			//////////
			kappa1 = kappa.at(0);
			a = c = 1; b = (1.0+kappa1/(pi.at(A)+pi.at(G)));		// *fA
			a_ = d = 1; e = (1.0+kappa1/(pi.at(C)+pi.at(T)));		// *fC
			b_ = (1.0+kappa1/(pi.at(A)+pi.at(G))); d_ = f = 1;		// *fG
			c_ = f_ = 1; e_ = (1.0+kappa1/(pi.at(C)+pi.at(T)));		// *fT
		break;
		case NUC_T92:
			//////////
			/// INPUT: kappa
			///     | *             (1-(fG+fC))/2  K(1-(fG+fC))/2 (1-(fG+fC))/2 |
			/// Q = | (fG+fC)/2     *              (fG+fC)/2      K(fG+fC)/2    |
			///     | K(fG+fC)/2    (fG+fC)/2      *              (fG+fC)/2     |
			///     | (1-(fG+fC))/2 K(1-(fG+fC))/2 (1-(fG+fC))/2  *             |
			//////////
		break;
		case NUC_TN93eq:
			pi.at(A) = pi.at(C) = pi.at(G) = pi.at(T) = 0.25;
		case NUC_TN93:
			//////////
			/// INPUT: kappa, kappa2;
			///     | *    fA   K1fA fA   |
			/// Q = | fC   *    fC   K2fC |
			///     | K1fG fG   *    fG   |
			///     | fT   K2fT fT   *    |
			//////////
			kappa1 = kappa.at(0);
			kappa2 = kappa.at(1);
			a = c = 1; b = kappa1;		// *fA
			a_ = d = 1; e = kappa2;		// *fC
			b_ = kappa1; d_ = f = 1;		// *fG
			c_ = f_ = 1; e_ = kappa2;	// *fT
		break;
		case NUC_TIMeq:
			pi.at(A) = pi.at(C) = pi.at(G) = pi.at(T) = 0.25;
		case NUC_TIM:
			//////////
			/// INPUT: alpha, beta, gamma
			///     | *   fA  AfA  BfA |
			/// Q = | fC  *   BfC  GfC |
			///     | AfG BfG *    fG  |
			///     | BfT GfT fT   *   |
			///////////
			alpha = kappa.at(0);
			beta = kappa.at(1);
			gamma = kappa.at(2);
			a = 1; b = alpha; c = beta;		// *fA
			a_ = 1; d = beta; e = gamma;	// *fC
			b_ = alpha; d_ = beta; f = 1;	// *fG
			c_ = beta; e_ = gamma; f_ = 1;	// *fT
		break;
		case NUC_TVMeq:
			pi.at(A) = pi.at(C) = pi.at(G) = pi.at(T) = 0.25;
		case NUC_TVM:
			//////////
			/// INPUT: alpha, beta, gamma, delta
			///     | *   fA  AfA  BfA |
			/// Q = | fC  *   GfC  AfC |
			///     | AfG GfG *    DfG  |
			///     | BfT AfT DfT  *   |
			///////////
			alpha = kappa.at(0);
			beta = kappa.at(1);
			gamma = kappa.at(2);
			delta = kappa.at(3);
			a = 1; b = alpha; c = beta;			// *fA
			a_ = 1; c = gamma; d = alpha;		// *fC
			b_ = alpha; d_ = gamma; f = delta;	// *fG
			c_ = beta; e_ = alpha; f_ = delta;	// *fT
		break;
		case NUC_SYM:
			pi.at(A) = pi.at(C) = pi.at(G) = pi.at(T) = 0.25;
			/// SYM and GTR are same, except SYM has equal nucleotide frequencies. No break.
		case NUC_GTR:
			//////////
			/// INPUT: relative rates abcdef
			///     | *     rACfC rAGfA rATfA |
			/// Q = | rACfC *     rCGfG rCTfC |
			///     | rAGfG rCGfG *     rGTfG |
			///     | rATfT rCTfT rGTfT *     |
			//////////
			a  = Sij.at(0); b  = Sij.at(1); c  = Sij.at(2);		// *fA
			a_ = Sij.at(0); d  = Sij.at(3); e  = Sij.at(4);		// *fC
			b_ = Sij.at(1); d_ = Sij.at(3); f  = Sij.at(5);		// *fG
			c_ = Sij.at(2); e_ = Sij.at(4); d_ = Sij.at(5);		// *fT
		break;
		case AA_JTT:
			SetRelativeRates(jttRelativeRates); 
			if (!freqSet) SetFrequencies(jttFrequencies);
			break;
		case AA_WAG: 
			SetRelativeRates(wagRelativeRates); 
			if (!freqSet) SetFrequencies(wagFrequencies);
			break;
		case AA_DAYHOFF78: 
			SetRelativeRates(dayhoffRelativeRates); 
			if (!freqSet) SetFrequencies(dayhoffFrequencies);
			break;
		case AA_BLOSUM62: 
			SetRelativeRates(blosumRelativeRates); 
			if (!freqSet) SetFrequencies(blosumFrequencies);
			break;
		case AA_MTREV24: 
			SetRelativeRates(mtrevRelativeRates); 
			if (!freqSet) SetFrequencies(mtrevFrequencies);
			break;
		case AA_CPREV45: 
			SetRelativeRates(cprevRelativeRates); 
			if (!freqSet) SetFrequencies(cprevFrequencies);
			break;
	default:
		cerr << "Do not know what to do with your model." << endl;
		exit(EXIT_FAILURE);
	}

	if (numStates == NUM_NUC) {
		Sij.at(0) = a;
		Sij.at(1) = b;
		Sij.at(2) = c;
		Sij.at(3) = d;
		Sij.at(4) = e;
		Sij.at(5) = f;
	}

	SetupMatrix(true);
}