/// <summary> /// Gets the Delta for list of query sequences. /// </summary> /// <param name="referenceSequence">The reference sequence.</param> /// <param name="originalQuerySequences">The query sequence.</param> /// <returns>Returns list of IEnumerable Delta Alignment.</returns> private IEnumerable<IEnumerable<DeltaAlignment>> GetDelta(IEnumerable<ISequence> referenceSequence, IEnumerable<ISequence> originalQuerySequences) { IEnumerable<ISequence> querySequences = Forward ? originalQuerySequences : (Reverse ? ReverseComplementSequenceList(originalQuerySequences) : AddReverseComplementsToSequenceList(originalQuerySequences)); foreach (ISequence refSeq in referenceSequence) { NUCmer nucmer = new NUCmer(refSeq) { FixedSeparation = FixedSeparation, BreakLength = BreakLength, LengthOfMUM = MinMatch, MaximumSeparation = MaxGap, MinimumScore = MinCluster, SeparationFactor = (float) DiagFactor }; foreach (ISequence qs in querySequences) { _queryCount++; yield return nucmer.GetDeltaAlignments(qs, !MaxMatch, qs.IsMarkedAsReverseComplement()); } } }
/// <summary> /// Aligns reads to reference genome using NUCmer. /// </summary> /// <param name="nodeName">Name of parent Node which contains the data in xml.</param> /// <param name="isFilePath">Represents sequence is in a file or not.</param> /// <returns>Delta i.e. output from NUCmer</returns> IList<IEnumerable<DeltaAlignment>> GetDeltaAlignment(string nodeName, bool isFilePath) { string[] referenceSequences = null; string[] searchSequences = null; List<ISequence> referenceSeqList = new List<ISequence>(); List<ISequence> searchSeqList = new List<ISequence>(); IList<IEnumerable<DeltaAlignment>> results = new List<IEnumerable<DeltaAlignment>>(); if (isFilePath) { // Gets the reference sequence from the FastA file string filePath = utilityObj.xmlUtil.GetTextValue(nodeName, Constants.FilePathNode1); Assert.IsNotNull(filePath); ApplicationLog.WriteLine(string.Format((IFormatProvider)null, "Comparative BVT : Successfully validated the File Path '{0}'.", filePath)); using (FastASequencePositionParser parser = new FastASequencePositionParser(filePath)) { IEnumerable<ISequence> referenceList = parser.Parse(); foreach (ISequence seq in referenceList) { referenceSeqList.Add(seq); } // Gets the query sequence from the FastA file string queryFilePath = utilityObj.xmlUtil.GetTextValue(nodeName, Constants.FilePathNode2); Assert.IsNotNull(queryFilePath); ApplicationLog.WriteLine(string.Format((IFormatProvider)null, "Comparative BVT : Successfully validated the File Path '{0}'.", queryFilePath)); using (FastASequencePositionParser queryParser = new FastASequencePositionParser(queryFilePath)) { IEnumerable<ISequence> querySeqList = queryParser.Parse(); foreach (ISequence seq in querySeqList) { searchSeqList.Add(seq); } } } } else { // Gets the reference & search sequences from the configurtion file referenceSequences = utilityObj.xmlUtil.GetTextValues(nodeName, Constants.ReferenceSequencesNode); searchSequences = utilityObj.xmlUtil.GetTextValues(nodeName, Constants.SearchSequencesNode); IAlphabet seqAlphabet = Utility.GetAlphabet(utilityObj.xmlUtil.GetTextValue(nodeName, Constants.AlphabetNameNode)); for (int i = 0; i < referenceSequences.Length; i++) { ISequence referSeq = new Sequence(seqAlphabet, encodingObj.GetBytes(referenceSequences[i])); referenceSeqList.Add(referSeq); } string[] seqArray = searchSequences.ElementAt(0).Split(','); searchSeqList.AddRange(seqArray.Select(t => new Sequence(seqAlphabet, encodingObj.GetBytes(t))).Cast<ISequence>()); } foreach (ISequence reference in referenceSeqList) { NUCmer nucmerAligner = new NUCmer((Sequence)reference); string fixedSeparation = utilityObj.xmlUtil.GetTextValue(nodeName, Constants.FixedSeparationNode); string minimumScore = utilityObj.xmlUtil.GetTextValue(nodeName, Constants.MinimumScoreNode); string separationFactor = utilityObj.xmlUtil.GetTextValue(nodeName, Constants.SeparationFactorNode); string LengthOfMUM = utilityObj.xmlUtil.GetTextValue(nodeName, Constants.MUMLengthNode); nucmerAligner.FixedSeparation = int.Parse(fixedSeparation); nucmerAligner.MinimumScore = int.Parse(minimumScore); nucmerAligner.SeparationFactor = int.Parse(separationFactor); nucmerAligner.LengthOfMUM = int.Parse(LengthOfMUM); foreach (ISequence querySeq in searchSeqList) { results.Add(nucmerAligner.GetDeltaAlignments(querySeq, true)); } } return results; }