// validates aligned seq header. private static void ValidateAlignedSequenceHeader(SAMAlignedSequenceHeader header) { string message = header.IsValid(); if (!string.IsNullOrEmpty(message)) { throw new FormatException(message); } }
// Validates the alignment. private SequenceAlignmentMap ValidateAlignment(ISequenceAlignment sequenceAlignment) { SequenceAlignmentMap seqAlignmentMap = sequenceAlignment as SequenceAlignmentMap; if (seqAlignmentMap != null) { ValidateAlignmentHeader(seqAlignmentMap.Header); if (CreateSortedBAMFile && SortType == BAMSortByFields.ChromosomeNameAndCoordinates) { this.refSequences = SortSequenceRanges(seqAlignmentMap.Header.GetReferenceSequenceRanges()); } else { this.refSequences = seqAlignmentMap.Header.GetReferenceSequenceRanges(); } return(seqAlignmentMap); } SAMAlignmentHeader header = sequenceAlignment.Metadata[Helper.SAMAlignmentHeaderKey] as SAMAlignmentHeader; if (header == null) { throw new ArgumentException(Properties.Resource.SAMAlignmentHeaderNotFound); } ValidateAlignmentHeader(header); seqAlignmentMap = new SequenceAlignmentMap(header); if (CreateSortedBAMFile && SortType == BAMSortByFields.ChromosomeNameAndCoordinates) { this.refSequences = SortSequenceRanges(seqAlignmentMap.Header.GetReferenceSequenceRanges()); } else { this.refSequences = seqAlignmentMap.Header.GetReferenceSequenceRanges(); } foreach (IAlignedSequence alignedSeq in sequenceAlignment.AlignedSequences) { SAMAlignedSequenceHeader alignedHeader = alignedSeq.Metadata[Helper.SAMAlignedSequenceHeaderKey] as SAMAlignedSequenceHeader; if (alignedHeader == null) { throw new ArgumentException(Properties.Resource.SAMAlignedSequenceHeaderNotFound); } SAMAlignedSequence samAlignedSeq = new SAMAlignedSequence(alignedHeader); samAlignedSeq.QuerySequence = alignedSeq.Sequences[0]; seqAlignmentMap.QuerySequences.Add(samAlignedSeq); } return(seqAlignmentMap); }
// Validates the alignment. private SequenceAlignmentMap ValidateAlignment(ISequenceAlignment sequenceAlignment) { SequenceAlignmentMap seqAlignmentMap = sequenceAlignment as SequenceAlignmentMap; if (seqAlignmentMap != null) { ValidateAlignmentHeader(seqAlignmentMap.Header); _refSequences = SortSequenceRanges(seqAlignmentMap.Header.GetReferenceSequenceRanges()); foreach (SAMAlignedSequence alignedSequence in seqAlignmentMap.QuerySequences) { string message = alignedSequence.IsValidHeader(); if (!string.IsNullOrEmpty(message)) { throw new ArgumentException(message); } ValidateSQHeader(alignedSequence.RName); } return(seqAlignmentMap); } SAMAlignmentHeader header = sequenceAlignment.Metadata[Helper.SAMAlignmentHeaderKey] as SAMAlignmentHeader; if (header == null) { throw new ArgumentException(Resource.SAMAlignmentHeaderNotFound); } ValidateAlignmentHeader(header); seqAlignmentMap = new SequenceAlignmentMap(header); _refSequences = SortSequenceRanges(seqAlignmentMap.Header.GetReferenceSequenceRanges()); foreach (IAlignedSequence alignedSeq in sequenceAlignment.AlignedSequences) { SAMAlignedSequenceHeader alignedHeader = alignedSeq.Metadata[Helper.SAMAlignedSequenceHeaderKey] as SAMAlignedSequenceHeader; if (alignedHeader == null) { throw new ArgumentException(Resource.SAMAlignedSequenceHeaderNotFound); } ValidateAlignedSequenceHeader(alignedHeader); ValidateSQHeader(alignedHeader.RName); SAMAlignedSequence samAlignedSeq = new SAMAlignedSequence(alignedHeader); samAlignedSeq.QuerySequence = alignedSeq.Sequences[0]; } return(seqAlignmentMap); }
/// <summary> /// Validate parser and formatter by parsing the same file which contains /// extended CIGAR string. Validate the CIGAR property in aligned sequence /// metadata information is updated as expected. /// </summary> /// <param name="nodeName">xml node name</param> void ValidateSAMParseAndFormatWithCIGARFormat(string nodeName) { // Gets the expected sequence from the Xml string filePath = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.FilePathNode); string expectedSequenceFile = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.ExpectedSequence); string expectedCIGARString = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.CIGARNode); // Create parser using encoding ISequenceAlignmentParser parser = new SAMParser(); try { IList <ISequenceAlignment> alignments = parser.Parse(filePath); // Get expected sequences using (FastAParser parserObj = new FastAParser(expectedSequenceFile)) { IEnumerable <ISequence> expectedSequences = parserObj.Parse(); IList <ISequence> expectedSequencesList = expectedSequences.ToList(); // Validate parsed output with expected output int count = 0; for (int index = 0; index < alignments.Count; index++) { for (int ialigned = 0; ialigned < alignments[index].AlignedSequences.Count; ialigned++) { for (int iseq = 0; iseq < alignments[index].AlignedSequences[ialigned].Sequences.Count; iseq++) { Assert.AreEqual(new string(expectedSequencesList[count].Select(a => (char)a).ToArray()), new string(alignments[index].AlignedSequences[ialigned].Sequences[iseq].Select(a => (char)a).ToArray())); foreach (string key in alignments[index].AlignedSequences[ialigned].Metadata.Keys) { SAMAlignedSequenceHeader header = (SAMAlignedSequenceHeader) alignments[index].AlignedSequences[ialigned].Metadata[key]; Assert.AreEqual(expectedCIGARString, header.CIGAR); } count++; } } } } } finally { (parser as SAMParser).Dispose(); } }
/// <summary> /// Validate parser and formatter by parsing the same file which contains /// extended CIGAR string. Validate the CIGAR property in aligned sequence /// metadata information is updated as expected. /// </summary> /// <param name="nodeName">xml node name</param> void ValidateSAMParseAndFormatWithCIGARFormat(string nodeName) { // Gets the expected sequence from the Xml string filePath = Utility._xmlUtil.GetTextValue( nodeName, Constants.FilePathNode); string expectedSequenceFile = Utility._xmlUtil.GetTextValue( nodeName, Constants.ExpectedSequence); string expectedCIGARString = Utility._xmlUtil.GetTextValue( nodeName, Constants.CIGARNode); // Create parser using encoding ISequenceAlignmentParser parser = new SAMParser(); IList <ISequenceAlignment> alignments = parser.Parse(filePath); // Get expected sequences FastaParser parserObj = new FastaParser(); IList <ISequence> expectedSequences = parserObj.Parse(expectedSequenceFile); // Validate parsed output with expected output int count = 0; for (int index = 0; index < alignments.Count; index++) { for (int ialigned = 0; ialigned < alignments[index].AlignedSequences.Count; ialigned++) { for (int iseq = 0; iseq < alignments[index].AlignedSequences[ialigned].Sequences.Count; iseq++) { Assert.AreEqual(expectedSequences[count].ToString(), alignments[index].AlignedSequences[ialigned].Sequences[iseq].ToString()); foreach (string key in alignments[index].AlignedSequences[ialigned].Metadata.Keys) { SAMAlignedSequenceHeader header = (SAMAlignedSequenceHeader) alignments[index].AlignedSequences[ialigned].Metadata[key]; Assert.AreEqual(expectedCIGARString, header.CIGAR.ToString()); } count++; } } } }
// Validates the alignment. private SequenceAlignmentMap ValidateAlignment(ISequenceAlignment sequenceAlignment) { SequenceAlignmentMap seqAlignmentMap = sequenceAlignment as SequenceAlignmentMap; if (seqAlignmentMap != null) { ValidateAlignmentHeader(seqAlignmentMap.Header); _refSequences = SortSequenceRanges(seqAlignmentMap.Header.GetReferenceSequenceRanges()); return(seqAlignmentMap); } SAMAlignmentHeader header = sequenceAlignment.Metadata[Helper.SAMAlignmentHeaderKey] as SAMAlignmentHeader; if (header == null) { throw new ArgumentException(Resource.SAMAlignmentHeaderNotFound); } ValidateAlignmentHeader(header); seqAlignmentMap = new SequenceAlignmentMap(header); _refSequences = SortSequenceRanges(seqAlignmentMap.Header.GetReferenceSequenceRanges()); foreach (IAlignedSequence alignedSeq in sequenceAlignment.AlignedSequences) { SAMAlignedSequenceHeader alignedHeader = alignedSeq.Metadata[Helper.SAMAlignedSequenceHeaderKey] as SAMAlignedSequenceHeader; if (alignedHeader == null) { throw new ArgumentException(Resource.SAMAlignedSequenceHeaderNotFound); } SAMAlignedSequence samAlignedSeq = new SAMAlignedSequence(alignedHeader); samAlignedSeq.QuerySequence = alignedSeq.Sequences[0]; seqAlignmentMap.QuerySequences.Add(samAlignedSeq); } return(seqAlignmentMap); }