private List <double> GetTransitionVector(DnaBase currentBase, double time) { List <EvolutionProbability> EvolutionVector = this.transitionMatrix.ElementAt((int)currentBase); List <double> TransitionVector = new List <double>() { EvolutionVector.ElementAt(DnaBase.A)(time), EvolutionVector.ElementAt(DnaBase.C)(time), EvolutionVector.ElementAt(DnaBase.G)(time), EvolutionVector.ElementAt(DnaBase.T)(time) }; return(TransitionVector); }
public DnaBase GenerateNextBase(DnaBase currentBase, double time) { List <double> TransitionVector = this.GetTransitionVector(currentBase, time); double randomResult = EvolutionModel.randomGen.NextDouble(); double tresholdProbability = 0; for (int i = currentBase; i < currentBase + 4; i++) { tresholdProbability += TransitionVector.ElementAt(i % 4); if (randomResult <= tresholdProbability) { return(i); } } return(currentBase); }