Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        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);
        }