Exemple #1
0
        public void ValidateVQSLCopyTo()
        {
            VirtualQualitativeSequenceList seqList =
                GetVirtualQualitativeSequenceList(
                    Constants.LargeSizeDnaIlluminaFastQNode);
            ICollection <ISequence> seqCopy = seqList;
            int i = seqCopy.Count;

            IQualitativeSequence[] seqArray = new IQualitativeSequence[i];

            seqList.CopyTo(seqArray, 0);
            Assert.AreEqual(seqList[0].ToString(),
                            seqArray[0].ToString());
            Assert.AreEqual(seqList[i - 1].ToString(),
                            seqArray[i - 1].ToString());

            seqCopy.CopyTo(seqArray, 0);
            Assert.AreEqual(seqList[0].ToString(),
                            seqArray[0].ToString());
            Assert.AreEqual(seqList[i - 1].ToString(),
                            seqArray[i - 1].ToString());

            ApplicationLog.WriteLine(
                "VQSL Bvt : Successfully validated the CopyTo() method");
            Console.WriteLine(
                "VQSL Bvt : Successfully validated the CopyTo() method");
        }
Exemple #2
0
        /// <summary>
        /// Writes an IQualitativeSequence to the specified text writer.
        /// </summary>
        /// <param name="qualSequence">The QualitativeSequence to format.</param>
        /// <param name="writer">The TextWriter used to write the formatted sequence text.</param>
        public void Format(IQualitativeSequence qualSequence, TextWriter writer)
        {
            if (qualSequence == null)
            {
                throw new ArgumentNullException(Resource.ParameterNameQualSequence);
            }

            if (writer == null)
            {
                throw new ArgumentNullException(Resource.ParameterNameWriter);
            }

            string header    = qualSequence.ID;
            string lengthStr = " length=";

            if (qualSequence.ID.Contains(lengthStr))
            {
                int startIndex = qualSequence.ID.LastIndexOf(lengthStr);
                header = header.Substring(0, startIndex + 8) + qualSequence.Count;
            }

            writer.WriteLine("@" + header);
            writer.WriteLine(qualSequence.ToString());
            writer.WriteLine("+" + header);
            writer.WriteLine(ASCIIEncoding.ASCII.GetString(qualSequence.Scores));
            writer.Flush();
        }
Exemple #3
0
 /// <summary>
 /// Writes an IQualitativeSequence to the specified file.
 /// </summary>
 /// <param name="qualSequence">The QualitativeSequence to format.</param>
 /// <param name="fileName">The name of the file to write the formatted sequence text.</param>
 public void Format(IQualitativeSequence qualSequence, string fileName)
 {
     using (TextWriter writer = new StreamWriter(fileName))
     {
         Format(qualSequence, writer);
     }
 }
Exemple #4
0
 /// <summary>
 /// Converts an IQualitativeSequence to a formatted text.
 /// </summary>
 /// <param name="qualSequence">The QualitativeSequence to format.</param>
 /// <returns>A string of the formatted text.</returns>
 public string FormatString(IQualitativeSequence qualSequence)
 {
     using (TextWriter writer = new StringWriter())
     {
         Format(qualSequence, writer);
         return(writer.ToString());
     }
 }
Exemple #5
0
        /// <summary>
        /// Returns the index of the first sequence matching the sequence
        /// passed in to the parameter. This does not do a value-based
        /// comparison. The match must be the exact same IQualitativeSequence.
        /// </summary>
        /// <returns>the zero-based index of the sequence if found; otherwise, -1</returns>
        public int IndexOf(IQualitativeSequence item)
        {
            foreach (var entry in _sequenceDictionary)
            {
                if (ReferenceEquals(item, entry.Value.Target))
                {
                    return(entry.Key);
                }
            }

            return(-1);
        }
Exemple #6
0
        /// <summary>
        /// Gets quality values.
        /// </summary>
        public byte[] GetQualityValues()
        {
            IQualitativeSequence seq = QuerySequence as IQualitativeSequence;

            if (seq != null)
            {
                return(seq.Scores);
            }
            else
            {
                return(new byte[0]);
            }
        }
Exemple #7
0
        public void TestFastQWhenParsingOneOfMany()
        {
            // parse
            ISequenceParser parser   = new FastQParser();
            string          filepath = @"testdata\FASTQ\SRR002012_5.fastq";
            ISequence       seq      = parser.ParseOne(filepath);

            FastQParser fqParser = new FastQParser();

            fqParser.AutoDetectFastQFormat = false;
            fqParser.FastqType             = FastQFormatType.Sanger;
            IQualitativeSequence qualSeq = fqParser.ParseOne(filepath);
        }
Exemple #8
0
        /// <summary>
        /// Writes the specified QualitativeSequence in FastQ format to the file.
        /// </summary>
        /// <param name="stream">Stream to write to</param>
        /// <param name="qualitativeSequence">QualitativeSequence to write.</param>
        public void Format(Stream stream, IQualitativeSequence qualitativeSequence)
        {
            if (stream == null)
            {
                throw new ArgumentNullException("stream");
            }

            if (qualitativeSequence == null)
            {
                throw new ArgumentNullException("qualitativeSequence");
            }

            using (var writer = stream.OpenWrite())
            {
                this.Format(writer, qualitativeSequence);
            }
        }
Exemple #9
0
        public void TestFormatingString()
        {
            string str =
                @"@SRR002012.1 Oct4:5:1:871:340 length=26
GGCGCACTTACACCCTACATCCATTG
+SRR002012.1 Oct4:5:1:871:340 length=26
IIIIG1?II;IIIII1IIII1%.I7I
";

            StringReader sr = new StringReader(str);

            FastQParser          parser    = new FastQParser();
            IQualitativeSequence seq       = parser.ParseOne(sr);
            FastQFormatter       formatter = new FastQFormatter();
            string formatterStr            = formatter.FormatString(seq);

            Assert.AreEqual(str, formatterStr);
        }
Exemple #10
0
        /// <summary>
        ///     General method to validate FastQ Formatter.
        ///     <param name="nodeName">xml node name.</param>
        ///     <param name="fileExtension">Different temporary file extensions</param>
        /// </summary>
        private void ValidateFastQFormatter(string nodeName, FastQFileParameters fileExtension)
        {
            // Gets the expected sequence from the Xml
            string filePath = utilityObj.xmlUtil.GetTextValue(nodeName, Constants.FilePathNode);
            string expectedQualitativeSequence = utilityObj.xmlUtil.GetTextValue(nodeName, Constants.ExpectedSequenceNode);
            string expectedSequenceId          = utilityObj.xmlUtil.GetTextValue(nodeName, Constants.SequenceIdNode);
            string tempFileName = Path.GetTempFileName();

            // Parse a FastQ file using parseOne method.
            var fastQParserObj = new FastQParser();

            using (fastQParserObj.Open(filePath))
            {
                IQualitativeSequence oneSequence = fastQParserObj.ParseOne();

                // Format Parsed Sequence to temp file with different extension.
                var fastQFormatter = new FastQFormatter();
                using (fastQFormatter.Open(tempFileName))
                {
                    fastQFormatter.Format(oneSequence);
                }

                string parsedValue;
                string parsedId;

                var fastQParserObjTemp = new FastQParser();
                using (fastQParserObjTemp.Open(tempFileName))
                {
                    oneSequence = fastQParserObjTemp.Parse().First();
                    parsedValue = oneSequence.ConvertToString();
                    parsedId    = oneSequence.ID;
                }

                // Validate qualitative parsing temporary file.
                Assert.AreEqual(expectedQualitativeSequence, parsedValue);
                Assert.AreEqual(expectedSequenceId, parsedId);
                ApplicationLog.WriteLine(string.Format("FastQ Formatter BVT: The FASTQ sequence '{0}' validation after Write() and Parse() is found to be as expected.",
                                                       parsedValue));
                ApplicationLog.WriteLine(string.Format("FastQ Formatter BVT: The FASTQ sequence '{0}' validation after Write() and Parse() is found to be as expected.",
                                                       parsedId));

                File.Delete(tempFileName);
            }
        }
Exemple #11
0
        public void TestFastQWhenParsingOneOfMany()
        {
            // parse
            ISequenceParser parser   = new FastQParser();
            string          filepath = @"TestUtils\FASTQ\SRR002012_5.fastq";
            ISequence       seq      = parser.ParseOne(filepath);

            Assert.IsNotNull(seq);

            FastQParser fqParser = new FastQParser();

            fqParser.AutoDetectFastQFormat = false;
            fqParser.FastqType             = FastQFormatType.Sanger;
            IQualitativeSequence qualSeq = fqParser.ParseOne(filepath);

            Assert.IsNotNull(qualSeq);

            ((FastQParser)parser).Dispose();
        }
Exemple #12
0
        /// <summary>
        /// Convert quality values to string array
        /// </summary>
        /// <param name="sequence">Sequence which has the quality values</param>
        /// <param name="maxColumns">Max number of columns to write to</param>
        /// <returns>string array with quality values</returns>
        public static string[,] FastQQualityValuesToRange(IQualitativeSequence sequence, int maxColumns)
        {
            int rowCount    = (int)Math.Ceiling((decimal)sequence.Scores.Length / (decimal)maxColumns);
            int columnCount = sequence.Count > maxColumns ? maxColumns : sequence.Count;

            string[,] rangeData = new string[rowCount, columnCount];

            int count = 0;

            for (int row = 0; row < rowCount; row++)
            {
                for (int col = 0; col < columnCount && count < sequence.Scores.Length; col++, count++)
                {
                    rangeData[row, col] = sequence.Scores[count].ToString();
                }
            }

            return(rangeData);
        }
Exemple #13
0
        public void TestFastQWhenParsingString()
        {
            string str =
                @"@SRR002012.1 Oct4:5:1:871:340 length=26
GGCGCACTTACACCCTACATCCATTG
+SRR002012.1 Oct4:5:1:871:340 length=26
IIIIG1?II;IIIII1IIII1%.I7I
";

            StringReader    sr     = new StringReader(str);
            ISequenceParser parser = new FastQParser();
            ISequence       seq    = parser.ParseOne(sr);

            sr = new StringReader(str);
            FastQParser fqParser = new FastQParser();

            fqParser.AutoDetectFastQFormat = false;
            fqParser.FastqType             = FastQFormatType.Sanger;
            IQualitativeSequence qualSeq = fqParser.ParseOne(sr);
        }
Exemple #14
0
        public void TestDefaultFastQFormatType()
        {
            QualitativeSequence qualSeq = new QualitativeSequence(Alphabets.DNA);

            Assert.AreEqual(qualSeq.Type, FastQFormatType.Illumina);

            string str =
                @"@Seq1
GGCGCACTTACACCCTACATCCATTG
+
ABCDEFGHIJKLMNOPQRSTUVWZYZ
";

            StringReader sr = new StringReader(str);

            FastQParser          parser = new FastQParser();
            IQualitativeSequence seq    = parser.ParseOne(sr);

            Assert.AreEqual(seq.Type, FastQFormatType.Illumina);
        }
Exemple #15
0
        /// <summary>
        /// Writes an IQualitativeSequence to a FASTQ file in the location specified by the writer.
        /// </summary>
        /// <param name="sequence">The QualitativeSequence to format.</param>
        /// <param name="writer">The TextWriter used to write the formatted sequence text.</param>
        public override void Format(ISequence sequence, TextWriter writer)
        {
            if (sequence == null)
            {
                throw new ArgumentNullException(Resource.ParameterNameSequence);
            }

            IQualitativeSequence qualSequence = sequence as IQualitativeSequence;

            if (qualSequence == null)
            {
                throw new ArgumentException(Resource.FastQ_InvalidSequence);
            }

            if (writer == null)
            {
                throw new ArgumentNullException(Resource.ParameterNameWriter);
            }

            Format(qualSequence, writer);
        }
Exemple #16
0
        /// <summary>
        /// Gets quality values from specified sequence.
        /// </summary>
        /// <param name="sequence">Sequence object.</param>
        private static byte[] GetQualityValue(ISequence sequence)
        {
            byte[] qualityValues = new byte[sequence.Count];
            IQualitativeSequence qualitativeSeq = sequence as IQualitativeSequence;

            if (qualitativeSeq != null)
            {
                qualityValues = qualitativeSeq.Scores;
            }

            for (int i = 0; i < qualityValues.Length; i++)
            {
                if (qualitativeSeq == null)
                {
                    qualityValues[i] = 0xFF;
                }
                else
                {
                    qualityValues[i] -= 33;
                }
            }

            return(qualityValues);
        }
Exemple #17
0
        /// <summary>
        /// Write out a sequence to the given stream writer.
        /// </summary>
        /// <param name="writer"></param>
        /// <param name="qualitativeSequence"></param>
        private void Format(StreamWriter writer, IQualitativeSequence qualitativeSequence)
        {
            string       header    = qualitativeSequence.ID;
            const string LengthStr = " length=";

            if (qualitativeSequence.ID.Contains(LengthStr))
            {
                int startIndex = qualitativeSequence.ID.LastIndexOf(LengthStr, StringComparison.OrdinalIgnoreCase);
                header = header.Substring(0, startIndex + 8) + qualitativeSequence.Count;
            }

            // Write to stream.
            writer.WriteLine("@" + header);
            byte[] sequenceBytes = qualitativeSequence.ToArray();
            writer.WriteLine(Encoding.UTF8.GetString(sequenceBytes, 0, sequenceBytes.Length));
            writer.WriteLine("+" + header);
            byte[] qualityValues = QualitativeSequence.ConvertEncodedQualityScore(qualitativeSequence.FormatType, this.FormatType, qualitativeSequence.GetEncodedQualityScores());
            writer.WriteLine(Encoding.UTF8.GetString(qualityValues, 0, qualityValues.Length));

            if (this.AutoFlush)
            {
                writer.Flush();
            }
        }
Exemple #18
0
        /// <summary>
        /// Writes an ISequenceAlignment to the location specified by the writer.
        /// </summary>
        /// <param name="sequenceAlignment">The sequence alignment to format.</param>
        /// <param name="writer">The TextWriter used to write the formatted sequence alignment text.</param>
        public void Format(ISequenceAlignment sequenceAlignment, TextWriter writer)
        {
            if (sequenceAlignment == null)
            {
                throw new ArgumentNullException(Resource.ParameterNameSequenceAlignment);
            }

            if (writer == null)
            {
                throw new ArgumentNullException(Resource.ParameterNameWriter);
            }

            #region Write alignment header
            SAMAlignmentHeader header = sequenceAlignment.Metadata[Helper.SAMAlignmentHeaderKey] as SAMAlignmentHeader;
            if (header != null)
            {
                WriteHeader(header, writer);
            }

            #endregion

            #region Write aligned sequences
            foreach (IAlignedSequence alignedSequence in sequenceAlignment.AlignedSequences)
            {
                SAMAlignedSequenceHeader alignedHeader = alignedSequence.Metadata[Helper.SAMAlignedSequenceHeaderKey] as SAMAlignedSequenceHeader;
                if (alignedHeader == null)
                {
                    throw new ArgumentException(Resource.SAM_AlignedSequenceHeaderMissing);
                }

                StringBuilder alignmentLine = new StringBuilder();

                alignmentLine.Append(alignedHeader.QName);
                alignmentLine.Append("\t");
                alignmentLine.Append((int)alignedHeader.Flag);
                alignmentLine.Append("\t");
                alignmentLine.Append(alignedHeader.RName);
                alignmentLine.Append("\t");
                alignmentLine.Append(alignedHeader.Pos);
                alignmentLine.Append("\t");
                alignmentLine.Append(alignedHeader.MapQ);
                alignmentLine.Append("\t");
                alignmentLine.Append(alignedHeader.CIGAR);
                alignmentLine.Append("\t");

                if (string.Compare(alignedHeader.MRNM, alignedHeader.RName, StringComparison.InvariantCultureIgnoreCase) == 0)
                {
                    alignmentLine.Append("=");
                }
                else
                {
                    alignmentLine.Append(alignedHeader.MRNM);
                }

                alignmentLine.Append("\t");
                alignmentLine.Append(alignedHeader.MPos);
                alignmentLine.Append("\t");
                alignmentLine.Append(alignedHeader.ISize);
                alignmentLine.Append("\t");
                writer.Write(alignmentLine.ToString());
                List <int> dotSymbolIndices   = new List <int>(alignedHeader.DotSymbolIndices);
                List <int> equalSymbolIndices = new List <int>(alignedHeader.EqualSymbolIndices);

                if (alignedSequence.Sequences.Count > 0 && alignedSequence.Sequences[0] != null)
                {
                    ISequence seq = alignedSequence.Sequences[0];

                    if (seq.Alphabet != Alphabets.DNA)
                    {
                        throw new ArgumentException(Resource.SAMFormatterSupportsDNAOnly);
                    }

                    for (int i = 0; i < seq.Count; i++)
                    {
                        char symbol = seq[i].Symbol;

                        if (dotSymbolIndices.Count > 0)
                        {
                            if (dotSymbolIndices.Contains(i))
                            {
                                symbol = '.';
                                dotSymbolIndices.Remove(i);
                            }
                        }

                        if (equalSymbolIndices.Count > 0)
                        {
                            if (equalSymbolIndices.Contains(i))
                            {
                                symbol = '=';
                                equalSymbolIndices.Remove(i);
                            }
                        }

                        writer.Write(symbol);
                    }

                    writer.Write("\t");

                    IQualitativeSequence qualSeq = seq as IQualitativeSequence;
                    if (qualSeq != null)
                    {
                        writer.Write(ASCIIEncoding.ASCII.GetString(qualSeq.Scores));
                    }
                    else
                    {
                        writer.Write("*");
                    }
                }
                else
                {
                    writer.Write("*");
                    writer.Write("\t");
                    writer.Write("*");
                }

                foreach (SAMOptionalField field in alignedHeader.OptionalFields)
                {
                    writer.Write("\t");
                    writer.Write(field.Tag);
                    writer.Write(":");
                    writer.Write(field.VType);
                    writer.Write(":");
                    writer.Write(field.Value);
                }

                writer.WriteLine();
            }
            #endregion

            writer.Flush();
        }
Exemple #19
0
        /// <summary>
        /// General method to Invalidate FastQ Parser.
        /// <param name="nodeName">xml node name.</param>
        /// <param name="param">FastQ Formatter different parameters</param>
        /// </summary>
        void InValidateFastQFormatter(FastQFormatParameters param)
        {
            // Gets the expected sequence from the Xml
            string filepath = _utilityObj._xmlUtil.GetTextValue(
                Constants.MultiSeqSangerRnaProNode, Constants.FilePathNode);
            FastQFormatType expectedFormatType = Utility.GetFastQFormatType(
                _utilityObj._xmlUtil.GetTextValue(Constants.MultiSeqSangerRnaProNode,
                                                  Constants.FastQFormatType));

            // Parse a FastQ file.
            using (FastQParser fastQParser = new FastQParser())
            {
                fastQParser.AutoDetectFastQFormat = true;
                fastQParser.FastqType             = expectedFormatType;

                IQualitativeSequence sequence = null;
                sequence = fastQParser.ParseOne(filepath);
                FastQFormatter fastQFormatter = new FastQFormatter();
                TextWriter     txtWriter      = null;

                switch (param)
                {
                case FastQFormatParameters.TextWriter:
                    try
                    {
                        fastQFormatter.Format(sequence, null as TextWriter);
                        Assert.Fail();
                    }

                    catch (Exception)
                    {
                        ApplicationLog.WriteLine(
                            "FastQ Parser P2 : Successfully validated the exception");
                        Console.WriteLine(
                            "FastQ Parser P2 : Successfully validated the exception");
                    }
                    break;

                case FastQFormatParameters.Sequence:
                    try
                    {
                        fastQFormatter.Format(null as ISequence, txtWriter);
                        Assert.Fail();
                    }

                    catch (Exception)
                    {
                        ApplicationLog.WriteLine(
                            "FastQ Parser P2 : Successfully validated the exception");
                        Console.WriteLine(
                            "FastQ Parser P2 : Successfully validated the exception");
                    }
                    break;

                case FastQFormatParameters.QualitativeSequence:
                    try
                    {
                        fastQFormatter.Format(null as IQualitativeSequence, txtWriter);
                        Assert.Fail();
                    }

                    catch (Exception)
                    {
                        ApplicationLog.WriteLine(
                            "FastQ Parser P2 : Successfully validated the exception");
                        Console.WriteLine(
                            "FastQ Parser P2 : Successfully validated the exception");
                    }
                    break;

                default:
                    try
                    {
                        fastQFormatter.Format(sequence as QualitativeSequence, null as TextWriter);
                        Assert.Fail();
                    }
                    catch (Exception)
                    {
                        ApplicationLog.WriteLine(
                            "FastQ Parser P2 : Successfully validated the exception");
                        Console.WriteLine(
                            "FastQ Parser P2 : Successfully validated the exception");
                    }
                    break;
                }
            }
        }
Exemple #20
0
 /// <summary>
 /// This method is not supported since VirtualSequenceList is read-only.
 /// </summary>
 public void Insert(int index, IQualitativeSequence item)
 {
     throw new NotSupportedException(Properties.Resource.NotSupportedInVirtualSequence);
 }
Exemple #21
0
 /// <summary>
 /// Determines whether a specific qualitative sequence is in the virtual qualitative sequence list.
 /// </summary>
 /// <param name="item">The qualitative sequence to locate in the list.</param>
 /// <returns>true if the qualitative sequence is found in the list; otherwise, false</returns>
 public bool Contains(IQualitativeSequence item)
 {
     return(IndexOf(item) >= 0);
 }
Exemple #22
0
 /// <summary>
 /// This method is not supported since VirtualSequenceList is read-only.
 /// </summary>
 public bool Remove(IQualitativeSequence item)
 {
     throw new NotSupportedException(Properties.Resource.NotSupportedInVirtualSequence);
 }