Exemplo n.º 1
0
void RateMatrix::setPij(
						Site site, 
						double BL, 
						int rateHetero
					   )
{
    switch (rateHetero) {
	case GammaRates:
		BL *= site.returnGamma();
	case NoRates:
		SetMatrix(Pij.at(0), BL);
	    break;
	case DiscreteGammaRates:
	    for (int j=0; j < num_categories; j++)
	    	SetMatrix(Pij.at(j), catRate.at(j)*BL);
	    break;
	case CodonRates:
//	    for (j=0; j < 3; j++)
//	    	SetMatrix(matrix[j], des->nodeEnv->catRate[j]*inlen);
//		for (i = 0; i < sequence_size; i++) {
//			if (random_placement)
//				pos = (double)rndu() * (des->seq_evo.size()-1);
//			else pos = i;
//			vector<Site>::iterator posit = des->seq_evo.begin()+pos;
//			cat=(pos+iTree->codon_offset)%3;
//			calling_routine.assign("MutateSequence->GONE, CodonRates");
//			result=SetState(
//							matrix[cat]+((*posit).returnState() * numStates), 
//							calling_routine
//						   );
//			if ( !(des->seq_evo.at(pos).motif.active_properties.subst->substitution_bitstring.test((*posit).returnState())) ) 
//				do_sub=true;
//			else if (des->seq_evo.at(pos).motif.active_properties.subst->substitution_bitstring.test(result) )
//				do_sub = true;
//			else rejected++;
//
//			if (do_sub) {
//				// Check if stop codon is result of substitution.
//				int codon[3];
//				if (pos - (3-iTree->codon_offset) < 0 || pos + (3-iTree->codon_offset) >= des->seq_evo.size()) {
//					; // Punt, since I do not keep track of other partitions (what about subsequences??)
//				} else if ( (pos+iTree->codon_offset) % 3 == 0 ) {
//					codon[0] = result;
//					codon[1] = (*(posit+1)).returnState();
//					codon[2] = (*(posit+2)).returnState();
//				} else if ( (pos+iTree->codon_offset) % 3 == 1 ) {
//					codon[0] = (*(posit-1)).returnState();
//					codon[1] = result;
//					codon[2] = (*(posit+1)).returnState();
//				} else if ( (pos+iTree->codon_offset) % 3 == 2 ) {
//					codon[0] = (*(posit-2)).returnState();
//					codon[1] = (*(posit-1)).returnState();
//					codon[2] = result;
//				} else {
//					cerr << "Huh?? how can there be more than 3 codon positions?" << endl;
//					exit(EXIT_FAILURE);
//				}
//				if ( !Stop_Codon(codon) ) {
//					(*posit).setState(result);
//				} else rejected++;
//			}
//	    }
//
		break;
	}
}