/// <summary> /// Finds matching sequences per the weight matrix model. /// </summary> public WmmSequenceResult FindScoringSequences() { var returnResult = new WmmSequenceResult() { ParametersUsed = this.parameters.Clone() }; // Scan through sliding window of scan length and calculate the Wmm based score for each instance. for (int i = 0; i < sequence.Length - scanLength + 1; i++) { double score = 0; for (int j = 0; j < scanLength; j++) { score = score + this.parameters.GetWmmScore(sequence[i + j], j); } var resultToAdd = new WmmSequenceResultItem { DistanceFromCleavageSite = sequence.Length - i, LogLikelihoodScore = score, Sequence = sequence.Substring(i, scanLength), }; returnResult.FoundSequences.Add(resultToAdd); } return(returnResult); }
public Dictionary <int, WmmSequenceResult> FindScoringSequences(int iterationCount) { for (int iteration = 1; iteration <= iterationCount; iteration++) { // Find all possible Motif instances and their log probability scores. for (int i = 0; i < sequences.Length; i++) { var wmmImpl = new WmmSequenceScanImpl( parameters, sequence: sequences[i], scanLength: this.scanLength); WmmSequenceResult result = wmmImpl.FindScoringSequences(); resultCollection.Add(i, result); } // Calculate hidden variable a.k.a Yij Hat. foreach (WmmSequenceResult result in resultCollection.Values) { double sumOfProbabilities = result.FoundSequences.Sum(s => s.LikelihoodScore); foreach (WmmSequenceResultItem foundSequence in result.FoundSequences) { foundSequence.LatentVariable = foundSequence.LikelihoodScore / sumOfProbabilities; } } } this.parameters.UpateParameters(resultCollection); // Execute last iteration with new parameters. resultCollection.Clear(); for (int i = 0; i < sequences.Length; i++) { var wmmImpl = new WmmSequenceScanImpl( parameters, sequence: sequences[i], scanLength: this.scanLength); WmmSequenceResult result = wmmImpl.FindScoringSequences(); resultCollection.Add(i, result); } return(resultCollection); }