コード例 #1
0
        public void TestFastQWhenParsingOneOfMany()
        {
            string filepath = @"TestUtils\FASTQ\SRR002012_5.fastq";
            // parse
            ISequenceParser parser = new FastQParser(filepath);

            try
            {
                ISequence seq = parser.Parse().First();
                Assert.IsNotNull(seq);
            }
            finally
            {
                parser.Dispose();
            }

            using (FastQParser fqParser = new FastQParser(filepath))
            {
                fqParser.AutoDetectFastQFormat = false;
                fqParser.FormatType            = FastQFormatType.Sanger;
                fqParser.Alphabet = Alphabets.DNA;
                QualitativeSequence qualSeq = fqParser.Parse().First();
                Assert.IsNotNull(qualSeq);
            }
        }
コード例 #2
0
        /// <summary>
        /// Writes the specified QualitativeSequence in FastQ format to the file.
        /// </summary>
        /// <param name="qualitativeSequence">QualitativeSequence to write.</param>
        public void Write(QualitativeSequence qualitativeSequence)
        {
            if (qualitativeSequence == null)
            {
                throw new ArgumentNullException("qualitativeSequence");
            }

            if (this.streamWriter == null)
            {
                throw new InvalidOperationException(Properties.Resource.FileNotOpened);
            }

            string header    = qualitativeSequence.ID;
            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.
            this.streamWriter.WriteLine("@" + header);
            byte[] sequenceBytes = qualitativeSequence.ToArray();
            this.streamWriter.WriteLine(UTF8Encoding.UTF8.GetString(sequenceBytes, 0, sequenceBytes.Length));
            this.streamWriter.WriteLine("+" + header);
            byte[] qualityValues = qualitativeSequence.QualityScores.ToArray();
            this.streamWriter.WriteLine(UTF8Encoding.UTF8.GetString(qualityValues, 0, qualityValues.Length));

            if (this.AutoFlush)
            {
                this.streamWriter.Flush();
            }
        }
コード例 #3
0
        public void InvalidateQualSequenceWithNullValue()
        {
            // Get values from xml.
            string expectedErrorMessage = this.utilityObj.xmlUtil.GetTextValue(
                Constants.SimpleDnaSangerNode, Constants.AlphabetNullExceptionNode);
            string actualError = string.Empty;
            string updatedActualError = string.Empty;
            QualitativeSequence qualSeq = null;

            //create Qualitative sequence by passing null value.
            try
            {
                qualSeq = new QualitativeSequence(null, FastQFormatType.Sanger,
                    (byte[])null, (byte[])null);
                Assert.Fail();
            }
            catch (ArgumentNullException ex)
            {
                actualError = ex.Message;

                // Validate an expected exception.
                updatedActualError = actualError.Replace("\r", "").Replace("\n", "");
                Assert.AreEqual(expectedErrorMessage.ToLower(CultureInfo.CurrentCulture),
                    updatedActualError.ToLower(CultureInfo.CurrentCulture));
                Assert.IsNull(qualSeq);
            }

            // Log to VSTest GUI.
            ApplicationLog.WriteLine(string.Format((IFormatProvider)null,
                "Qualitative Sequence P2: Qualitative Sequence Null exception was validated successfully {0}",
                updatedActualError));
        }
コード例 #4
0
        public void ValidateSangerFormatTypeDnaReverseComplement()
        {
            // Gets the actual sequence and the alphabet from the Xml
            IAlphabet alphabet = Utility.GetAlphabet(this.utilityObj.xmlUtil.GetTextValue(
                Constants.SimpleDnaSangerNode, Constants.AlphabetNameNode));
            FastQFormatType expectedFormatType = Utility.GetFastQFormatType(
                this.utilityObj.xmlUtil.GetTextValue(Constants.SimpleDnaSangerNode, Constants.FastQFormatType));
            string inputSequence = this.utilityObj.xmlUtil.GetTextValue(
                Constants.SimpleDnaSangerNode, Constants.inputSequenceNode);
            string compSequence = this.utilityObj.xmlUtil.GetTextValue(
                Constants.SimpleDnaSangerNode, Constants.ComplementQualSeqNode);
            string expectedRevCompSeq = this.utilityObj.xmlUtil.GetTextValue(
                Constants.SimpleDnaSangerNode, Constants.RevComplement);
            string expectedRevSeq = this.utilityObj.xmlUtil.GetTextValue(
                Constants.SimpleDnaSangerNode, Constants.ReverseQualSeq);            
            string inputQuality = this.utilityObj.xmlUtil.GetTextValue(
            Constants.SimpleDnaSangerNode, Constants.InputByteArrayNode);
            byte[] byteArray = Encoding.UTF8.GetBytes(inputQuality);
            
            QualitativeSequence createdQualitativeSequence =
                new QualitativeSequence(alphabet, expectedFormatType,
                    inputSequence, inputQuality);

            ISequence revSeq = createdQualitativeSequence.GetReversedSequence();
            ISequence revCompSeq = createdQualitativeSequence.GetReverseComplementedSequence();
            ISequence compSeq = createdQualitativeSequence.GetComplementedSequence();

            Assert.AreEqual(expectedRevSeq, new string(revSeq.Select(a => (char)a).ToArray()));
            Assert.AreEqual(expectedRevCompSeq, new string(revCompSeq.Select(a => (char)a).ToArray()));
            Assert.AreEqual(compSequence, new string(compSeq.Select(a => (char)a).ToArray()));

            ApplicationLog.WriteLine("Qualitative BVT: Successfully validated Reverse, Complement and ReverseComplement sequence");
        }
コード例 #5
0
        public void TestConstructorsWithInvalidParameters()
        {
            QualitativeSequence qualSequence;

            try
            {
                qualSequence = new QualitativeSequence(null);
                Assert.Fail();
            }
            catch (Exception)
            {
            }

            try
            {
                qualSequence = new QualitativeSequence(
                    Alphabets.DNA,
                    FastQFormatType.Sanger,
                    null as IEncoding,
                    string.Empty);
                Assert.Fail();
            }
            catch (Exception)
            {
            }

            try
            {
                qualSequence = new QualitativeSequence(Alphabets.RNA, FastQFormatType.Illumina, "ACTGGA");
                Assert.Fail();
            }
            catch (Exception)
            {
            }
        }
コード例 #6
0
        public void ValidateSangerFormatTypeDnaReverseComplement()
        {
            // Gets the actual sequence and the alphabet from the Xml
            IAlphabet alphabet = Utility.GetAlphabet(utilityObj.xmlUtil.GetTextValue(
                                                         Constants.SimpleDnaSangerNode, Constants.AlphabetNameNode));
            FastQFormatType expectedFormatType = Utility.GetFastQFormatType(
                utilityObj.xmlUtil.GetTextValue(Constants.SimpleDnaSangerNode, Constants.FastQFormatType));
            string inputSequence = utilityObj.xmlUtil.GetTextValue(
                Constants.SimpleDnaSangerNode, Constants.inputSequenceNode);
            string compSequence = utilityObj.xmlUtil.GetTextValue(
                Constants.SimpleDnaSangerNode, Constants.ComplementQualSeqNode);
            string expectedRevCompSeq = utilityObj.xmlUtil.GetTextValue(
                Constants.SimpleDnaSangerNode, Constants.RevComplement);
            string expectedRevSeq = utilityObj.xmlUtil.GetTextValue(
                Constants.SimpleDnaSangerNode, Constants.ReverseQualSeq);
            string inputQuality = utilityObj.xmlUtil.GetTextValue(
                Constants.SimpleDnaSangerNode, Constants.InputByteArrayNode);

            byte[] byteArray = Encoding.UTF8.GetBytes(inputQuality);

            QualitativeSequence createdQualitativeSequence =
                new QualitativeSequence(alphabet, expectedFormatType,
                                        inputSequence, inputQuality);

            ISequence revSeq     = createdQualitativeSequence.GetReversedSequence();
            ISequence revCompSeq = createdQualitativeSequence.GetReverseComplementedSequence();
            ISequence compSeq    = createdQualitativeSequence.GetComplementedSequence();

            Assert.AreEqual(expectedRevSeq, new string(revSeq.Select(a => (char)a).ToArray()));
            Assert.AreEqual(expectedRevCompSeq, new string(revCompSeq.Select(a => (char)a).ToArray()));
            Assert.AreEqual(compSequence, new string(compSeq.Select(a => (char)a).ToArray()));

            ApplicationLog.WriteLine("Qualitative BVT: Successfully validated Reverse, Complement and ReverseComplement sequence");
        }
コード例 #7
0
        public void QualitativeSequenceClone()
        {
            QualitativeSequence qualSequence = new QualitativeSequence(Alphabets.RNA, FastQFormatType.Illumina, "ACUGGA", 65);

            Assert.AreEqual(qualSequence.Alphabet, Alphabets.RNA);
            Assert.IsTrue(qualSequence.IsReadOnly);
            Assert.AreEqual(qualSequence.Count, 6);
            Assert.AreEqual(qualSequence.Scores.Length, 6);
            foreach (byte qualScore in qualSequence.Scores)
            {
                Assert.AreEqual(qualScore, 65);
            }
            Assert.AreEqual(qualSequence.ToString(), "ACUGGA");
            Assert.AreEqual(qualSequence.Type, FastQFormatType.Illumina);

            QualitativeSequence cloneCopy = qualSequence.Clone();

            Assert.AreEqual(cloneCopy.Alphabet, Alphabets.RNA);
            Assert.IsTrue(cloneCopy.IsReadOnly);
            Assert.AreEqual(cloneCopy.Count, 6);
            Assert.AreEqual(cloneCopy.Scores.Length, 6);
            foreach (byte qualScore in cloneCopy.Scores)
            {
                Assert.AreEqual(qualScore, 65);
            }
            Assert.AreEqual(cloneCopy.ToString(), "ACUGGA");
            Assert.AreEqual(cloneCopy.Type, FastQFormatType.Illumina);
        }
コード例 #8
0
        public void ValidateQualititaiveSequenceConstructor()
        {
            // Gets the actual sequence and the alphabet from the Xml
            IAlphabet alphabet = Utility.GetAlphabet(utilityObj.xmlUtil.GetTextValue(
                                                         Constants.SimpleDnaSolexaNode, Constants.AlphabetNameNode));
            FastQFormatType expectedFormatType = Utility.GetFastQFormatType(
                utilityObj.xmlUtil.GetTextValue(Constants.SimpleDnaSolexaNode,
                                                Constants.FastQFormatType));
            QualitativeSequence createdQualitativeSequence = null;
            string inputSequence = utilityObj.xmlUtil.GetTextValue(
                Constants.SimpleDnaSolexaNode, Constants.inputSequenceNode);

            byte[] qualScores = new byte[inputSequence.Count()];

            for (int i = 0; i < inputSequence.Count(); i++)
            {
                qualScores[i] = (byte)'{';
            }

            // Create a Qualitative Sequence.
            createdQualitativeSequence = new QualitativeSequence(
                alphabet, expectedFormatType, encodingObj.GetBytes(inputSequence), qualScores);

            string qualSequence = new string(createdQualitativeSequence.Select(a => (char)a).ToArray());

            // Validate Qualitative Sequence after addition of Seq Item.
            Assert.IsTrue(!string.IsNullOrEmpty(qualSequence));
            Assert.AreEqual(inputSequence, qualSequence);

            // Logs to the NUnit GUI (Console.Out) window
            Console.WriteLine(string.Format((IFormatProvider)null,
                                            "Qualitative Sequence BVT: Qualitative Sequence {0} is as expected.",
                                            qualSequence));
        }
コード例 #9
0
        public void ConvertIlluminaToSangerAndSolexa()
        {
            // Gets the actual sequence and the Qual score from the Xml
            string illuminaSequence = utilityObj.xmlUtil.GetTextValue(
                Constants.IlluminaToSangerAndSolexaNode, Constants.IlluminaSequence);
            string illuminaQualScore = utilityObj.xmlUtil.GetTextValue(
                Constants.IlluminaToSangerAndSolexaNode, Constants.IlluminaQualScore);
            string expectedSangerQualScore = utilityObj.xmlUtil.GetTextValue(
                Constants.IlluminaToSangerAndSolexaNode, Constants.SangerQualScore);
            string expectedSolexaQualScore = utilityObj.xmlUtil.GetTextValue(
                Constants.IlluminaToSangerAndSolexaNode, Constants.SolexaQualScore);

            byte[] illuminaSequenceinBytes  = Encoding.UTF8.GetBytes(illuminaSequence);
            byte[] illuminaQualScoreinBytes = Encoding.UTF8.GetBytes(illuminaQualScore);
            byte[] sangerQualScore          = QualitativeSequence.ConvertEncodedQualityScore(FastQFormatType.Illumina_v1_3, FastQFormatType.Sanger, illuminaQualScoreinBytes);

            string qualSequenceSanger = new string(Encoding.UTF8.GetChars(sangerQualScore));

            // Validate converted sanger score.
            Assert.AreEqual(expectedSangerQualScore, qualSequenceSanger);

            ApplicationLog.WriteLine(string.Format((IFormatProvider)null,
                                                   "Qualitative Sequence BVT:Qualitative Sanger score type {0} is as expected.",
                                                   sangerQualScore));
            byte[] solexaQualScore = QualitativeSequence.ConvertEncodedQualityScore(FastQFormatType.Illumina_v1_3, FastQFormatType.Solexa_Illumina_v1_0, illuminaQualScoreinBytes);

            string qualSequenceSolexa = new string(Encoding.UTF8.GetChars(solexaQualScore));

            // Validate converted illumina score.
            Assert.AreEqual(expectedSolexaQualScore, qualSequenceSolexa);
            ApplicationLog.WriteLine(string.Format((IFormatProvider)null,
                                                   "Qualitative Sequence BVT:Qualitative Solexa format type {0} is as expected.",
                                                   illuminaQualScore));
        }
コード例 #10
0
        public static void ParseQualityNSequence(SAMAlignedSequence alignedSeq, IAlphabet alphabet, byte[] sequencedata, byte[] qualitydata, bool validate = true)
        {
            if (alignedSeq == null)
            {
                throw new ArgumentNullException("alignedSeq");
            }

            if (sequencedata == null || sequencedata.Length == 0)
            {
                throw new ArgumentNullException("sequencedata");
            }

            if (qualitydata == null || qualitydata.Length == 0)
            {
                throw new ArgumentNullException("qualitydata");
            }

            bool            isQualitativeSequence = true;
            string          message   = string.Empty;
            FastQFormatType fastQType = QualityFormatType;

            if (sequencedata.Length == 1 && sequencedata[0] == AsteriskAsByte)
            {
                return;
            }

            if (qualitydata.Length == 1 && qualitydata[0] == AsteriskAsByte)
            {
                isQualitativeSequence = false;
            }

            if (isQualitativeSequence)
            {
                // Check for sequence length and quality score length.
                if (sequencedata.Length != qualitydata.Length)
                {
                    string message1 = string.Format(CultureInfo.CurrentCulture, Properties.Resource.FastQ_InvalidQualityScoresLength, alignedSeq.QName);
                    message = string.Format(CultureInfo.CurrentCulture, Properties.Resource.IOFormatErrorMessage, Properties.Resource.SAM_NAME, message1);
                    Trace.Report(message);
                    throw new FileFormatException(message);
                }
            }

            ISequence sequence = null;

            if (isQualitativeSequence)
            {
                QualitativeSequence qualSeq = new QualitativeSequence(alphabet, fastQType, sequencedata, qualitydata, validate);
                qualSeq.ID = alignedSeq.QName;
                sequence   = qualSeq;
            }
            else
            {
                sequence    = new Sequence(alphabet, sequencedata, validate);
                sequence.ID = alignedSeq.QName;
            }

            alignedSeq.QuerySequence = sequence;
        }
コード例 #11
0
ファイル: BioHelperTest.cs プロジェクト: kcha/seqcos
 public void GetStringSequenceTest()
 {
     ISequence seqObj = new QualitativeSequence(Alphabets.DNA, FastQFormatType.Sanger,
                                     "GGCGCACTTACACCCTACATCCATTG", "IIIIG1?II;IIIII1IIII1%.I7I");
     string expected = "GGCGCACTTACACCCTACATCCATTG";
     string actual;
     actual = BioHelper.GetStringSequence(seqObj);
     Assert.AreEqual(expected, actual);
 }
コード例 #12
0
        public void TestGetPhredQualityScore()
        {
            // Validate using SangerFormat.
            List <int> pharedQualityScores = GetPharedQualityScoresForSanger();

            byte[] encodedSangerQualityScores = GetSangerEncodedQualityScores(pharedQualityScores);
            byte[] symbols = GetSymbols(encodedSangerQualityScores.Length);
            QualitativeSequence qualSeq = new QualitativeSequence(Alphabets.DNA, FastQFormatType.Sanger, symbols, encodedSangerQualityScores);

            for (int i = 0; i < qualSeq.Count; i++)
            {
                Assert.AreEqual(pharedQualityScores[i], qualSeq.GetPhredQualityScore(i));
            }

            // Validate using illumina v1.3 .
            pharedQualityScores = GetPharedQualityScoresForIllumina_v1_3();
            byte[] encodedIllumina_v1_3_QualityScores = GetIllumina_v1_3_EncodedQualityScores(pharedQualityScores);
            symbols = GetSymbols(encodedIllumina_v1_3_QualityScores.Length);
            qualSeq = new QualitativeSequence(Alphabets.DNA, FastQFormatType.Illumina_v1_3, symbols, encodedIllumina_v1_3_QualityScores);
            for (int i = 0; i < qualSeq.Count; i++)
            {
                Assert.AreEqual(pharedQualityScores[i], qualSeq.GetPhredQualityScore(i));
            }

            // Validate using illumina v1.5
            pharedQualityScores = GetPharedQualityScoresForIllumina_v1_5();
            byte[] encodedIllumina_v1_5_QualityScores = GetIllumina_v1_5_EncodedQualityScores(pharedQualityScores);
            symbols = GetSymbols(encodedIllumina_v1_5_QualityScores.Length);
            qualSeq = new QualitativeSequence(Alphabets.DNA, FastQFormatType.Illumina_v1_5, symbols, encodedIllumina_v1_5_QualityScores);
            for (int i = 0; i < qualSeq.Count; i++)
            {
                Assert.AreEqual(pharedQualityScores[i], qualSeq.GetPhredQualityScore(i));
            }

            // Validate using illumina v1.8
            pharedQualityScores = GetPharedQualityScoresForIllumina_v1_8();
            byte[] encodedIllumina_v1_8_QualityScores = GetIllumina_v1_8_EncodedQualityScores(pharedQualityScores);
            symbols = GetSymbols(encodedIllumina_v1_8_QualityScores.Length);
            qualSeq = new QualitativeSequence(Alphabets.DNA, FastQFormatType.Illumina_v1_8, symbols, encodedIllumina_v1_8_QualityScores);
            for (int i = 0; i < qualSeq.Count; i++)
            {
                Assert.AreEqual(pharedQualityScores[i], qualSeq.GetPhredQualityScore(i));
            }


            // Validate using illumina v1.0 .
            List <int> solexaQualityScores = GetSolexaQualityScoresForIllumina_v1_0();

            byte[] encodedIllumina_v1_0_QualityScores = GetIllumina_v1_0_EncodedQualityScores(solexaQualityScores);
            symbols = GetSymbols(encodedIllumina_v1_0_QualityScores.Length);
            qualSeq = new QualitativeSequence(Alphabets.DNA, FastQFormatType.Solexa_Illumina_v1_0, symbols, encodedIllumina_v1_0_QualityScores);
            for (int i = 0; i < qualSeq.Count; i++)
            {
                Assert.AreEqual(solexaQualityScores[i], qualSeq.GetSolexaQualityScore(i));
            }
        }
コード例 #13
0
 public void TestConvertFromSolexaToSanger()
 {
     byte[] sangerScores;
     byte[] solexaScores = new byte[1];
     solexaScores[0] = (byte)59;
     sangerScores    = QualitativeSequence.ConvertFromSolexaToSanger(solexaScores);
     Assert.IsNotNull((object)sangerScores);
     Assert.AreEqual <int>(1, sangerScores.Length);
     Assert.AreEqual <byte>((byte)33, sangerScores[0]);
 }
コード例 #14
0
ファイル: Utility.cs プロジェクト: slogen/bio
        /// <summary>
        /// Gets default encoded quality scores.
        /// </summary>
        /// <param name="formatType">Fastq format type.</param>
        /// <param name="length">No of quality scores required.</param>
        public static string GetDefaultEncodedQualityScores(FastQFormatType formatType, int length)
        {
            char[] encodedQualityScores = new char[length];
            for (int i = 0; i < length; i++)
            {
                encodedQualityScores[i] = (char)QualitativeSequence.GetDefaultQualScore(formatType);
            }

            return(new string(encodedQualityScores));
        }
コード例 #15
0
 public void TestConvertFromSolexaToSanger()
 {
     byte[] bs;
     byte[] bs1 = new byte[1];
     bs1[0] = (byte)59;
     bs     = QualitativeSequence.ConvertFromSolexaToSanger(bs1);
     Assert.IsNotNull((object)bs);
     Assert.AreEqual <int>(1, bs.Length);
     Assert.AreEqual <byte>((byte)33, bs[0]);
 }
コード例 #16
0
 public void TestConvertFromSolexa_Illumina_v1_0ToSanger()
 {
     byte[] sangerScores;
     byte[] solexaScores = new byte[1];
     solexaScores[0] = (byte)59;
     sangerScores    = QualitativeSequence.ConvertEncodedQualityScore(FastQFormatType.Solexa_Illumina_v1_0, FastQFormatType.Sanger, solexaScores);
     Assert.IsNotNull((object)sangerScores);
     Assert.AreEqual(1, sangerScores.Length);
     Assert.AreEqual((byte)33, sangerScores[0]);
 }
コード例 #17
0
        public void FastqTrimRegex1()
        {
            QualitativeSequence seqObj   = new QualitativeSequence(Alphabets.DNA, FastQFormatType.Sanger, "GGGCCCGATTACATTTAAA", "ABCABCIIIIIIIABCABC");
            QualitativeSequence expected = new QualitativeSequence(Alphabets.DNA, FastQFormatType.Sanger, "GGGCCCTTTAAA", "ABCABCABCABC");
            TrimByRegex         target   = new TrimByRegex(new FastQParser(), new FastQFormatter(), new FastQFormatter(), "GATTACA");
            ISequence           actual   = target.Trim(seqObj);

            Assert.AreEqual(BioHelper.GetStringSequence(expected), BioHelper.GetStringSequence(actual));
            Assert.AreEqual(BioHelper.GetEncodedQualityScoreStringSequence(expected), BioHelper.GetEncodedQualityScoreStringSequence(actual as QualitativeSequence));
        }
コード例 #18
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Bio.IO.PacBio.PacBioCCSRead"/> class. From an initially parsed BAM file.
 /// </summary>
 /// <param name="s">S.</param>
 public PacBioCCSRead(SAMAlignedSequence s)
 {
     /* TODO: Converting from binary to string and back is beyond silly...
      * no performance hit worth worrying about at present, but in the future it might be worth
      * going directly from binary to the type rather than through string intermediates */
     foreach (var v in s.OptionalFields)
     {
         if (v.Tag == "sn")
         {
             var snrs = v.Value.Split(',').Skip(1).Select(x => Convert.ToSingle(x)).ToArray();
             SnrA = snrs [0];
             SnrC = snrs [1];
             SnrG = snrs [2];
             SnrT = snrs [3];
         }
         else if (v.Tag == "zm")
         {
             HoleNumber = (int)Convert.ToInt32(v.Value);
         }
         else if (v.Tag == "pq")
         {
             // This tag is now deprecated by the rq tag
             ReadQuality = Convert.ToSingle(v.Value);
         }
         else if (v.Tag == "rq" && ReadQuality < 0)
         {
             ReadQuality = Convert.ToSingle(v.Value);
         }
         else if (v.Tag == "za")
         {
             AvgZscore = (float)Convert.ToSingle(v.Value);
         }
         else if (v.Tag == "rs")
         {
             statusCounts = v.Value.Split(',').Skip(1).Select(x => Convert.ToInt32(x)).ToArray();
         }
         else if (v.Tag == "np")
         {
             NumPasses = Convert.ToInt32(v.Value);
         }
         else if (v.Tag == "RG")
         {
             ReadGroup = v.Value;
         }
         else if (v.Tag == "zs")
         {
             ZScores = v.Value.Split(',').Skip(1).Select(x => Convert.ToSingle(x)).ToArray();
         }
     }
     // TODO: We should use String.Intern here, but not available in PCL...
     // Movie = String.Intern(s.QuerySequence.ID.Split ('/') [0]);
     Movie    = s.QuerySequence.ID.Split('/') [0];
     Sequence = s.QuerySequence as QualitativeSequence;
 }
コード例 #19
0
 public void TestConvertFromSangerToSolexa()
 {
     byte[] solexaScores;
     byte[] sangerScores = new byte[2];
     sangerScores[0] = (byte)34;
     sangerScores[1] = (byte)34;
     solexaScores    = QualitativeSequence.ConvertFromSangerToSolexa(sangerScores);
     Assert.IsNotNull((object)solexaScores);
     Assert.AreEqual <int>(2, solexaScores.Length);
     Assert.AreEqual <byte>((byte)59, solexaScores[0]);
     Assert.AreEqual <byte>((byte)59, solexaScores[1]);
 }
コード例 #20
0
 public void TestConvertFromIlluminaToSolexa()
 {
     byte[] solexaScores;
     byte[] illuminaScores = new byte[2];
     illuminaScores[0] = (byte)65;
     illuminaScores[1] = (byte)65;
     solexaScores      = QualitativeSequence.ConvertFromIlluminaToSolexa(illuminaScores);
     Assert.IsNotNull((object)solexaScores);
     Assert.AreEqual <int>(2, solexaScores.Length);
     Assert.AreEqual <byte>((byte)59, solexaScores[0]);
     Assert.AreEqual <byte>((byte)59, solexaScores[1]);
 }
コード例 #21
0
 public void TestConvertFromIlluminaToSanger()
 {
     byte[] sangerScores;
     byte[] illuminaScores = new byte[2];
     illuminaScores[0] = (byte)64;
     illuminaScores[1] = (byte)64;
     sangerScores      = QualitativeSequence.ConvertFromIlluminaToSanger(illuminaScores);
     Assert.IsNotNull((object)sangerScores);
     Assert.AreEqual <int>(2, sangerScores.Length);
     Assert.AreEqual <byte>((byte)33, sangerScores[0]);
     Assert.AreEqual <byte>((byte)33, sangerScores[1]);
 }
コード例 #22
0
 public void TestConvertFromIlluminaToSanger()
 {
     byte[] bs;
     byte[] bs1 = new byte[2];
     bs1[0] = (byte)64;
     bs1[1] = (byte)64;
     bs     = QualitativeSequence.ConvertFromIlluminaToSanger(bs1);
     Assert.IsNotNull((object)bs);
     Assert.AreEqual <int>(2, bs.Length);
     Assert.AreEqual <byte>((byte)33, bs[0]);
     Assert.AreEqual <byte>((byte)33, bs[1]);
 }
コード例 #23
0
        public void FastqTrimNullTest()
        {
            ISequence seqObj = new QualitativeSequence(Alphabets.DNA, FastQFormatType.Sanger,
                                                       "GGCGCACTTACACCCTACATCCATTG", "IIIIG1?II;IIIII1IIII1%.I7I");
            double       trimLength    = seqObj.Count + 1;
            bool         trimFromStart = false;
            TrimByLength target        = new TrimByLength(new FastQParser(), new FastQFormatter(), null, trimLength, trimFromStart);
            ISequence    actual;

            actual = target.Trim(seqObj);
            Assert.IsNull(actual);
        }
コード例 #24
0
 public void TestConvertFromIllumina_v1_3ToSolexa_Illumina_v1_0()
 {
     byte[] solexaScores;
     byte[] illuminaScores = new byte[2];
     illuminaScores[0] = (byte)65;
     illuminaScores[1] = (byte)65;
     solexaScores      = QualitativeSequence.ConvertEncodedQualityScore(FastQFormatType.Illumina_v1_3, FastQFormatType.Solexa_Illumina_v1_0, illuminaScores);
     Assert.IsNotNull((object)solexaScores);
     Assert.AreEqual(2, solexaScores.Length);
     Assert.AreEqual((byte)59, solexaScores[0]);
     Assert.AreEqual((byte)59, solexaScores[1]);
 }
コード例 #25
0
 public void TestConvertFromSangerToIllumina_v1_3()
 {
     byte[] illuminaScores;
     byte[] sangerScores = new byte[2];
     sangerScores[0] = (byte)33;
     sangerScores[1] = (byte)33;
     illuminaScores  = QualitativeSequence.ConvertEncodedQualityScore(FastQFormatType.Sanger, FastQFormatType.Illumina_v1_3, sangerScores);
     Assert.IsNotNull((object)illuminaScores);
     Assert.AreEqual <int>(2, illuminaScores.Length);
     Assert.AreEqual <byte>((byte)64, illuminaScores[0]);
     Assert.AreEqual <byte>((byte)64, illuminaScores[1]);
 }
コード例 #26
0
 public void TestConvertFromSangerToSolexa_Illumina_v1_0()
 {
     byte[] solexaScores;
     byte[] sangerScores = new byte[2];
     sangerScores[0] = (byte)34;
     sangerScores[1] = (byte)34;
     solexaScores    = QualitativeSequence.ConvertEncodedQualityScore(FastQFormatType.Sanger, FastQFormatType.Solexa_Illumina_v1_0, sangerScores);
     Assert.IsNotNull((object)solexaScores);
     Assert.AreEqual <int>(2, solexaScores.Length);
     Assert.AreEqual <byte>((byte)59, solexaScores[0]);
     Assert.AreEqual <byte>((byte)59, solexaScores[1]);
 }
コード例 #27
0
 public void TestConvertFromIllumina_v1_3ToSanger()
 {
     byte[] sangerScores;
     byte[] illuminaScores = new byte[2];
     illuminaScores[0] = (byte)64;
     illuminaScores[1] = (byte)64;
     sangerScores      = QualitativeSequence.ConvertEncodedQualityScore(FastQFormatType.Illumina_v1_3, FastQFormatType.Sanger, illuminaScores);
     Assert.IsNotNull((object)sangerScores);
     Assert.AreEqual(2, sangerScores.Length);
     Assert.AreEqual((byte)33, sangerScores[0]);
     Assert.AreEqual((byte)33, sangerScores[1]);
 }
コード例 #28
0
        /// <summary>
        /// Gets the index of a qualitative sequence within the list.
        /// Throws a NotSupportedException when attempting to set the position
        /// since VirtualSequenceList is read-only.
        /// </summary>
        /// <param name="index">The zero-based index of the qualitative sequence in the list.</param>
        /// <returns>The qualitative sequence found at the specified index.</returns>
        public IQualitativeSequence this[int index]
        {
            get
            {
                QualitativeSequence virtualQualitativeSequence;

                if (_sequenceDictionary.ContainsKey(index))
                {
                    virtualQualitativeSequence = _sequenceDictionary[index].Target as QualitativeSequence;
                    if (virtualQualitativeSequence != null)
                    {
                        return(virtualQualitativeSequence);
                    }
                    _sequenceDictionary.Remove(index);
                }

                SequencePointer pointer = _sidecarProvider[index];

                // Get the alphabet from alphabet name.
                IAlphabet alphabet = Alphabets.All.Single(A => A.Name.Equals(pointer.AlphabetName));

                virtualQualitativeSequence = new QualitativeSequence(alphabet)
                {
                    ID = ((FastQParser)_sequenceParser).GetSequenceID(pointer),
                    VirtualQualitativeSequenceProvider =
                        new FileVirtualQualitativeSequenceProvider(_sequenceParser, pointer)
                };
                if (pointer.IndexOffsets[1] - pointer.IndexOffsets[0] < virtualQualitativeSequence.VirtualQualitativeSequenceProvider.BlockSize)
                {
                    virtualQualitativeSequence.VirtualQualitativeSequenceProvider.BlockSize = (int)(pointer.IndexOffsets[1] - pointer.IndexOffsets[0]);
                }

                virtualQualitativeSequence.IsReadOnly = CreateSequenceAsReadOnly;

                // memory opt : cleanup the weak reference dictionary
                if (_sequenceDictionary.Count > 0 && (_sequenceDictionary.Count % MaximumDictionaryLength) == 0)
                {
                    foreach (int key in _sequenceDictionary.Keys.Where(K => _sequenceDictionary[K].IsAlive == false).ToList())
                    {
                        _sequenceDictionary.Remove(key);
                    }
                }

                _sequenceDictionary.Add(index, new WeakReference(virtualQualitativeSequence, false));

                return(virtualQualitativeSequence);
            }
            set
            {
                throw new NotSupportedException(Properties.Resource.NotSupportedInVirtualSequence);
            }
        }
コード例 #29
0
        public void TestGetDefaultQualScore()
        {
            byte b;

            b = QualitativeSequence.GetDefaultQualScore(FastQFormatType.Sanger);
            Assert.AreEqual((byte)93, b);

            b = QualitativeSequence.GetDefaultQualScore(FastQFormatType.Solexa_Illumina_v1_0);
            Assert.AreEqual((byte)124, b);

            b = QualitativeSequence.GetDefaultQualScore(FastQFormatType.Illumina_v1_3);
            Assert.AreEqual((byte)124, b);
        }
コード例 #30
0
        public void TestGetMaxQualScore()
        {
            byte b;

            b = QualitativeSequence.GetMaxEncodedQualScore(FastQFormatType.Solexa_Illumina_v1_0);
            Assert.AreEqual((byte)126, b);

            b = QualitativeSequence.GetMaxEncodedQualScore(FastQFormatType.Sanger);
            Assert.AreEqual((byte)126, b);

            b = QualitativeSequence.GetMaxEncodedQualScore(FastQFormatType.Illumina_v1_3);
            Assert.AreEqual((byte)126, b);
        }
コード例 #31
0
        /// <summary>
        /// Gets encoded quality scores.
        /// </summary>
        public byte[] GetEncodedQualityScores()
        {
            QualitativeSequence seq = QuerySequence as QualitativeSequence;

            if (seq != null)
            {
                return(seq.GetEncodedQualityScores());
            }
            else
            {
                return(new byte[0]);
            }
        }
コード例 #32
0
        /// <summary>
        /// Gets Phred base quality scores.
        /// </summary>
        public int[] GetQualityScores()
        {
            QualitativeSequence seq = QuerySequence as QualitativeSequence;

            if (seq != null)
            {
                return(seq.GetPhredQualityScores());
            }
            else
            {
                return(new int[0]);
            }
        }
コード例 #33
0
        /// <summary>
        /// General method to validate Index of Qualitative Sequence Items.
        /// <param name="nodeName">xml node name.</param>
        /// <param name="indexParam">Different Qualitative Sequence parameters.</param>
        /// </summary>
        void ValidateGeneralQualitativeSeqItemIndices(string nodeName, QualitativeSequenceParameters indexParam)
        {
            // Gets the actual sequence and the alphabet from the Xml
            IAlphabet alphabet = Utility.GetAlphabet(this.utilityObj.xmlUtil.GetTextValue(
               nodeName, Constants.AlphabetNameNode));
            FastQFormatType expectedFormatType = Utility.GetFastQFormatType(
                this.utilityObj.xmlUtil.GetTextValue(nodeName, Constants.FastQFormatType));
            QualitativeSequence createdQualitativeSequence = null;
            string inputSequence = this.utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.inputSequenceNode);
            string expectedFirstItemIdex = this.utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.FirstItemIndex);
            string expectedLastItemIdex = this.utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.LastItemIndex);
            string expectedGapIndex = this.utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.IndexOfGap);
            long lastItemIndex;
            long index;

            // Create a qualitative Sequence.
            createdQualitativeSequence = new QualitativeSequence(
                alphabet, expectedFormatType, inputSequence,
                 Utility.GetDefaultEncodedQualityScores(expectedFormatType, inputSequence.Length));

            // Get a Index of qualitative sequence items
            switch (indexParam)
            {
                case QualitativeSequenceParameters.IndexOfNonGap:
                    index = createdQualitativeSequence.IndexOfNonGap();

                    // Validate Qualitative sequence item indices.
                    Assert.AreEqual(index, Convert.ToInt32(expectedFirstItemIdex, (IFormatProvider)null));
                    break;
                case QualitativeSequenceParameters.IndexOfNonGapWithParam:
                    index = createdQualitativeSequence.IndexOfNonGap(5);

                    // Validate Qualitative sequence item indices.
                    Assert.AreEqual(index, Convert.ToInt32(expectedGapIndex, (IFormatProvider)null));
                    break;
                case QualitativeSequenceParameters.LastIndexOf:
                    lastItemIndex = createdQualitativeSequence.LastIndexOfNonGap();

                    // Validate Qualitative sequence item indices.
                    Assert.AreEqual(lastItemIndex, Convert.ToInt32(expectedLastItemIdex, (IFormatProvider)null));
                    break;
                case QualitativeSequenceParameters.LastIndexOfWithPam:
                    lastItemIndex = createdQualitativeSequence.LastIndexOfNonGap(5);

                    // Validate Qualitative sequence item indices.
                    Assert.AreEqual(lastItemIndex, Convert.ToInt32(expectedGapIndex, (IFormatProvider)null));
                    break;
                default:
                    break;
            }

            // Logs to the VSTest GUI window
            ApplicationLog.WriteLine("Qualitative Sequence P1 : Qualitative SequenceItems indices validation completed successfully.");
        }
コード例 #34
0
        /// <summary>
        /// General method to validate default score for different FastQ 
        /// format with different sequence.
        /// <param name="nodeName">xml node name.</param>
        /// <param name="parameters">Different Qualitative Score method parameter.</param>
        /// </summary>
        void ValidateFastQDefaultScores(string nodeName, QualitativeSequenceParameters parameters)
        {
            // Gets the actual sequence and the alphabet from the Xml
            IAlphabet alphabet = Utility.GetAlphabet(this.utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.AlphabetNameNode));
            FastQFormatType expectedFormatType = Utility.GetFastQFormatType(
                this.utilityObj.xmlUtil.GetTextValue(nodeName, Constants.FastQFormatType));
            string inputSequence = this.utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.inputSequenceNode);
            string expectedMaxScore = this.utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.DefualtMaxScore);
            string expectedMinScore = this.utilityObj.xmlUtil.GetTextValue(
                 nodeName, Constants.DefaultMinScore);

            QualitativeSequence createdQualitativeSequence = null;
            string qualityScoresString = Utility.GetDefaultEncodedQualityScores(expectedFormatType, inputSequence.Length);
            byte[] expectedMaxScores = Utility.GetEncodedQualityScores((byte)int.Parse(expectedMaxScore, null as IFormatProvider), inputSequence.Length);
            byte[] expectedMinScores = Utility.GetEncodedQualityScores((byte)int.Parse(expectedMinScore, null as IFormatProvider), inputSequence.Length);
            int i = 0;
            switch (parameters)
            {
                case QualitativeSequenceParameters.DefaultScoreWithAlphabets:
                    createdQualitativeSequence = new QualitativeSequence(
                        alphabet, expectedFormatType, inputSequence,
                         qualityScoresString);

                    // Validate default score.
                    i = 0;
                    foreach (byte qualitativeScore in createdQualitativeSequence.GetEncodedQualityScores())
                    {
                        Assert.AreEqual(qualitativeScore,
                            (byte)(qualityScoresString[i]));
                        i++;
                    }

                    // Log VSTest GUI.
                    ApplicationLog.WriteLine(string.Format((IFormatProvider)null,
                        "Qualitative Sequence P1:Qualitative Sequence Default score {0} is as expected.",
                        qualityScoresString[0]));
                    break;
                case QualitativeSequenceParameters.DefaultScoreWithSequence:
                    createdQualitativeSequence = new QualitativeSequence(alphabet,
                        expectedFormatType, inputSequence,
                        qualityScoresString);

                    i = 0;
                    // Validate default score.
                    foreach (byte qualitativeScore in createdQualitativeSequence.GetEncodedQualityScores())
                    {
                        Assert.AreEqual(qualitativeScore,
                            (byte)(qualityScoresString[i]));
                        i++;
                    }

                    // Log VSTest GUI.
                    ApplicationLog.WriteLine(string.Format((IFormatProvider)null,
                        "Qualitative Sequence P1:Qualitative Sequence Default score {0} is as expected.",
                        qualityScoresString[0]));
                    break;
                case QualitativeSequenceParameters.MaxDefaultScore:
                    createdQualitativeSequence = new QualitativeSequence(
                        alphabet, expectedFormatType, Encoding.UTF8.GetBytes(inputSequence),
                        expectedMaxScores);
                    i = 0;
                    // Validate default maximum score.
                    foreach (byte qualitativeScore in createdQualitativeSequence.GetEncodedQualityScores())
                    {
                        Assert.AreEqual(qualitativeScore,
                            expectedMaxScores[i]);
                        i++;
                    }

                    // Log VSTest GUI.
                    ApplicationLog.WriteLine(string.Format((IFormatProvider)null,
                        "Qualitative Sequence P1:Qualitative Sequence Maximum score {0} is as expected.",
                        QualitativeSequence.GetMaxEncodedQualScore(expectedFormatType)));
                    break;
                case QualitativeSequenceParameters.MinDefaultScore:
                    createdQualitativeSequence = new QualitativeSequence(
                        alphabet, expectedFormatType, Encoding.UTF8.GetBytes(inputSequence),
                       expectedMinScores);

                    i = 0;
                    // Validate default minimum score.
                    foreach (byte qualitativeScore in createdQualitativeSequence.GetEncodedQualityScores())
                    {
                        Assert.AreEqual(qualitativeScore,
                            expectedMinScores[i]);
                        i++;
                    }

                    // Log VSTest GUI.
                    ApplicationLog.WriteLine(string.Format(null, "Qualitative Sequence P1:Qualitative Sequence Minimum score {0} is as expected.",
                        QualitativeSequence.GetMinEncodedQualScore(expectedFormatType)));
                    break;
                default:
                    break;
            }
        }
コード例 #35
0
        public void InvalidateQualSequenceWithEmptySequence()
        {
            QualitativeSequence qualSeq = new QualitativeSequence(
                Alphabets.DNA, FastQFormatType.Sanger, "", "");

            Assert.IsNotNull(qualSeq);

            // Log to VSTest GUI.
            ApplicationLog.WriteLine(string.Format((IFormatProvider)null,
                "Qualitative Sequence P2: Qualitative empty Sequence was validated successfully {0}",
                qualSeq));
        }
コード例 #36
0
        /// <summary>
        /// General method to validate creation of Qualitative sequence.
        /// <param name="nodeName">xml node name.</param>
        /// <param name="parameters">Different Qualitative Sequence parameters.</param>
        /// </summary>
        void GeneralQualitativeSequence(
            string nodeName, QualitativeSequenceParameters parameters)
        {
            // Gets the actual sequence and the alphabet from the Xml
            IAlphabet alphabet = Utility.GetAlphabet(this.utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.AlphabetNameNode));
            FastQFormatType expectedFormatType = Utility.GetFastQFormatType(
                this.utilityObj.xmlUtil.GetTextValue(nodeName, Constants.FastQFormatType));
            QualitativeSequence createdQualitativeSequence = null;
            string inputSequence = this.utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.inputSequenceNode);
            string expectedSequence = this.utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.ExpectedSequenceNode);
            string expectedSequenceCount = this.utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.QSequenceCount);
            string inputScoreforIUPAC = this.utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.MaxScoreNode);
            string inputQuality = this.utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.InputByteArrayNode);
            byte[] byteArray = Encoding.UTF8.GetBytes(inputQuality);
            int index = 0;

            // Create and validate Qualitative Sequence.
            switch (parameters)
            {
                case QualitativeSequenceParameters.Score:
                    createdQualitativeSequence = new QualitativeSequence(alphabet, expectedFormatType,
                        inputSequence, Utility.GetDefaultEncodedQualityScores(expectedFormatType, inputSequence.Length));
                    // Validate score
                    foreach (byte qualScore in createdQualitativeSequence.GetEncodedQualityScores())
                    {
                        Assert.AreEqual(qualScore, Convert.ToInt32(inputScoreforIUPAC, (IFormatProvider)null));
                    }
                    break;
                case QualitativeSequenceParameters.ByteArray:
                    createdQualitativeSequence = new QualitativeSequence(alphabet, expectedFormatType,
                       Encoding.UTF8.GetBytes(inputSequence), byteArray);

                    // Validate score
                    foreach (byte qualScore in createdQualitativeSequence.GetEncodedQualityScores())
                    {
                        Assert.AreEqual(qualScore, Convert.ToInt32(byteArray[index], (IFormatProvider)null));
                        index++;
                    }
                    break;
                default:
                    break;
            }

            // Validate createdSequence qualitative sequence.
            Assert.IsNotNull(createdQualitativeSequence);
            Assert.AreEqual(createdQualitativeSequence.Alphabet, alphabet);
            Assert.AreEqual(createdQualitativeSequence.ConvertToString(), expectedSequence);
            Assert.AreEqual(createdQualitativeSequence.Count.ToString((IFormatProvider)null), expectedSequenceCount);
            ApplicationLog.WriteLine(string.Format(null, "Qualitative Sequence P1:Qualitative Sequence {0} is as expected.", createdQualitativeSequence));
            ApplicationLog.WriteLine(string.Format(null, "Qualitative Sequence P1:Qualitative Sequence Score {0} is as expected.", createdQualitativeSequence.GetEncodedQualityScores()));
            Assert.AreEqual(createdQualitativeSequence.FormatType, expectedFormatType);
            ApplicationLog.WriteLine(string.Format(null, "Qualitative Sequence P1:Qualitative format type {0} is as expected.", createdQualitativeSequence.FormatType));
        }
コード例 #37
0
        public void ValidateQualititaiveSequenceConstructor()
        {
            // Gets the actual sequence and the alphabet from the Xml
            IAlphabet alphabet = Utility.GetAlphabet(this.utilityObj.xmlUtil.GetTextValue(
            Constants.SimpleDnaSolexaNode, Constants.AlphabetNameNode));
            FastQFormatType expectedFormatType = Utility.GetFastQFormatType(
            this.utilityObj.xmlUtil.GetTextValue(Constants.SimpleDnaSolexaNode,
            Constants.FastQFormatType));
            QualitativeSequence createdQualitativeSequence = null;
            string inputSequence = this.utilityObj.xmlUtil.GetTextValue(
            Constants.SimpleDnaSolexaNode, Constants.inputSequenceNode);

            byte[] qualScores = new byte[inputSequence.Count()];

            for (int i = 0; i < inputSequence.Count(); i++)
            {
                qualScores[i] = (byte)'{';
            }

            // Create a Qualitative Sequence.
            createdQualitativeSequence = new QualitativeSequence(
                    alphabet, expectedFormatType, Encoding.UTF8.GetBytes(inputSequence), qualScores);

            string qualSequence = new string(createdQualitativeSequence.Select(a => (char)a).ToArray());

            // Validate Qualitative Sequence after addition of Seq Item.
            Assert.IsTrue(!string.IsNullOrEmpty(qualSequence));
            Assert.AreEqual(inputSequence, qualSequence);

            // Logs to the VSTest GUI
            ApplicationLog.WriteLine(string.Format(null, "Qualitative Sequence BVT: Qualitative Sequence {0} is as expected.", qualSequence));
        }
コード例 #38
0
ファイル: TestToStringForBio.cs プロジェクト: cpatmoore/bio
 public void TestQualitativeSequenceToString()
 {
     byte[] seqData = new byte[4];
     seqData[0] = (byte)'A';
     seqData[1] = (byte)'T';
     seqData[2] = (byte)'C';
     seqData[3] = (byte)'G';
     byte[] qualityScores = new byte[4];
     qualityScores[0] = (byte)'A';
     qualityScores[1] = (byte)'A';
     qualityScores[2] = (byte)'A';
     qualityScores[3] = (byte)'B';
     QualitativeSequence seq = new QualitativeSequence(Alphabets.DNA, FastQFormatType.Illumina_v1_3, seqData, qualityScores);
     string actualString = seq.ToString().Replace("\r\n", Environment.NewLine);
     string expectedString = "ATCG\r\nAAAB".Replace("\r\n", Environment.NewLine);
     Assert.AreEqual(actualString, expectedString);
 }
コード例 #39
0
        void GeneralQualitativeSequence(
            string nodeName, QualitativeSequenceParameters parameters)
        {
            //// Gets the actual sequence and the alphabet from the Xml
            IAlphabet alphabet = Utility.GetAlphabet(this.utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.AlphabetNameNode));
            FastQFormatType expectedFormatType = Utility.GetFastQFormatType(
                this.utilityObj.xmlUtil.GetTextValue(nodeName, Constants.FastQFormatType));
            string expectedScore = this.utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.ExpectedScore);
            QualitativeSequence createdQualitativeSequence = null;
            string inputSequence = this.utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.inputSequenceNode);
            string expectedSequence = this.utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.ExpectedSequenceNode);
            string expectedSequenceCount = this.utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.QSequenceCount);           
            string inputQuality = this.utilityObj.xmlUtil.GetTextValue(
            nodeName, Constants.InputByteArrayNode);            
            Byte[] inputScoreArray = Encoding.UTF8.GetBytes(inputQuality);

            // Create and validate Qualitative Sequence.
            switch (parameters)
            {

                case QualitativeSequenceParameters.Score:
                    createdQualitativeSequence = new QualitativeSequence(alphabet, expectedFormatType,
                    inputSequence, inputQuality);
                    int count = 0;
                    // Validate score
                    foreach (byte qualScore in createdQualitativeSequence.GetEncodedQualityScores())
                    {
                        Assert.AreEqual(qualScore, inputScoreArray[count]);
                        count++;
                    }
                    break;
                case QualitativeSequenceParameters.ByteArray:
                    byte[] scoreValue = Encoding.UTF8.GetBytes(inputSequence);          
                    int index = 0;
                    createdQualitativeSequence = new QualitativeSequence(alphabet, expectedFormatType,
                    scoreValue, inputScoreArray);

                    // Validate score
                    foreach (byte qualScore in createdQualitativeSequence.GetEncodedQualityScores())
                    {
                        Assert.AreEqual(qualScore, inputScoreArray[index]);
                        index++;
                    }
                    break;
                default:
                    break;
            }

            string qualitativeSequence = new string(createdQualitativeSequence.Select(a => (char)a).ToArray());

            // Validate createdSequence qualitative sequence.
            Assert.IsNotNull(createdQualitativeSequence);
            Assert.AreEqual(alphabet, createdQualitativeSequence.Alphabet);

            Assert.AreEqual(expectedSequence, qualitativeSequence);
            Assert.AreEqual(expectedSequenceCount, createdQualitativeSequence.Count.ToString((IFormatProvider)null));
            ApplicationLog.WriteLine(string.Format(null, "Qualitative Sequence BVT:Qualitative Sequence {0} is as expected.", qualitativeSequence));

            Assert.AreEqual(expectedScore, createdQualitativeSequence.GetEncodedQualityScores().Count().ToString((IFormatProvider)null));
            ApplicationLog.WriteLine(string.Format(null, "Qualitative Sequence BVT:Qualitative Sequence Score {0} is as expected.", createdQualitativeSequence.Count().ToString((IFormatProvider)null)));

            Assert.AreEqual(expectedFormatType, createdQualitativeSequence.FormatType);
            ApplicationLog.WriteLine(string.Format(null, "Qualitative Sequence BVT:Qualitative format type {0} is as expected.", createdQualitativeSequence.FormatType));
        }
コード例 #40
0
        public void ConvertSolexaToSangerAndIllumina()
        {
            // Gets the actual sequence and the Qual score from the Xml
            string solexaSequence = this.utilityObj.xmlUtil.GetTextValue(
                Constants.SolexaToSangerAndIlluminaNode, Constants.SolexaSequence);
            string expectedSangerSequence = this.utilityObj.xmlUtil.GetTextValue(
                Constants.SolexaToSangerAndIlluminaNode, Constants.SangerSequence);
            string expectedIlluminaSequence = this.utilityObj.xmlUtil.GetTextValue(
                Constants.SolexaToSangerAndIlluminaNode, Constants.IlluminaSequence);
            string solexaQualScore = this.utilityObj.xmlUtil.GetTextValue(
                Constants.SolexaToSangerAndIlluminaNode, Constants.SolexaQualScore);
            string expectedSangerQualScore = this.utilityObj.xmlUtil.GetTextValue(
                Constants.SolexaToSangerAndIlluminaNode, Constants.SangerQualScore);
            string expectedIlluminaQualScore = this.utilityObj.xmlUtil.GetTextValue(
                Constants.SolexaToSangerAndIlluminaNode, Constants.IlluminaQualScore);
            byte[] byteValue = Encoding.UTF8.GetBytes(solexaQualScore);

            string sangerQualScore = null;
            string illuminaQualScore = null;

            byte[] qualScores = new byte[solexaSequence.Count()];

            for (int i = 0; i < solexaSequence.Count(); i++)
            {
                qualScores[i] = (byte)'{';
            }

            Byte[] solexaSequenceinBytes = Encoding.UTF8.GetBytes(solexaSequence);

            // Create a Solexa qualitative sequence.
            QualitativeSequence solexaQualSequence = new QualitativeSequence(Alphabets.DNA,
                FastQFormatType.Solexa_Illumina_v1_0, solexaSequenceinBytes, byteValue);

            // Convert Solexa to Sanger.
            QualitativeSequence sangerQualSequence = solexaQualSequence.ConvertTo(
                FastQFormatType.Sanger);
            var scores = sangerQualSequence.GetEncodedQualityScores();
            sangerQualScore = Encoding.UTF8.GetString(scores, 0, scores.Length);

            Assert.AreEqual(expectedSangerQualScore, sangerQualScore);
            Assert.AreEqual(new string(sangerQualSequence.Select(a => (char)a).ToArray()), expectedSangerSequence);

            ApplicationLog.WriteLine(string.Format((IFormatProvider)null,
                "Qualitative Sequence BVT:Qualitative Sanger score type {0} is as expected.",
                sangerQualScore));

            // Convert Solexa to Illumina.
            QualitativeSequence illuminaQualSequence =
               solexaQualSequence.ConvertTo(FastQFormatType.Illumina_v1_3);
            scores = illuminaQualSequence.GetEncodedQualityScores();
            illuminaQualScore = Encoding.UTF8.GetString(scores, 0, scores.Length);
            Assert.AreEqual(expectedIlluminaQualScore, illuminaQualScore);
            
            string illuminaQualseq=new string(illuminaQualSequence.Select(a => (char)a).ToArray());

            // Validate converted illumina score.
            Assert.AreEqual(illuminaQualScore, expectedIlluminaQualScore);
            Assert.AreEqual(illuminaQualseq, expectedIlluminaSequence);
            
            ApplicationLog.WriteLine(string.Format((IFormatProvider)null,
                "Qualitative Sequence BVT:Qualitative Illumina score type {0} is as expected.",
                illuminaQualScore));
        }
コード例 #41
0
        public void InvalidateQualitativeSeqCtor()
        {
            // Get Input values from xml config file.
            string inputSequence = this.utilityObj.xmlUtil.GetTextValue(
                Constants.QualitativeSequenceInsertSeqItemNode,
                Constants.inputSequenceNode);
            string QualScoreError = this.utilityObj.xmlUtil.GetTextValue(
                Constants.QualitativeSequenceInsertSeqItemNode,
                Constants.NullExceptionError);

            string actualError = null;

            QualitativeSequence seq = null;
            // Create a qual sequence.
            try
            {
                seq = new QualitativeSequence(Alphabets.DNA,
                     FastQFormatType.Sanger, inputSequence, null);
                Assert.Fail();
            }
            catch (ArgumentNullException ex)
            {
                actualError = ex.Message;
               
            }
            finally
            {
                if (seq != null)
                    ((IDisposable)seq).Dispose();
            }

           
        }
コード例 #42
0
        /// <summary>
        /// General method to create a Qualitative sequence.
        /// <param name="nodeName">xml node name of diferent FastQ format.</param>
        /// </summary>
        private QualitativeSequence CreateQualitativeSequence(string nodeName)
        {
            // Gets the actual sequence and the alphabet from the Xml
            IAlphabet alphabet = Utility.GetAlphabet(this.utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.AlphabetNameNode));
            FastQFormatType expectedFormatType = Utility.GetFastQFormatType(
                this.utilityObj.xmlUtil.GetTextValue(nodeName, Constants.FastQFormatType));
            QualitativeSequence createdQualitativeSequence = null;
            string inputSequence = this.utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.inputSequenceNode);
            string inputQuality = this.utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.InputByteArrayNode);
            byte[] byteArray = Encoding.UTF8.GetBytes(inputQuality);

            // Create a Qualitative Sequence.
            createdQualitativeSequence = new QualitativeSequence(
                alphabet, expectedFormatType, Encoding.UTF8.GetBytes(inputSequence), byteArray);

            return createdQualitativeSequence;
        }
コード例 #43
0
        public void ConvertSangerToSolexaAndIllumina()
        {
            // Gets the actual sequence and the Qual score from the Xml
            string sangerSequence = this.utilityObj.xmlUtil.GetTextValue(
                Constants.SangerToSolexaAndIlluminaNode, Constants.SangerSequence);
            string expectedSolexaSequence = this.utilityObj.xmlUtil.GetTextValue(
                Constants.SangerToSolexaAndIlluminaNode, Constants.SolexaSequence);
            string expectedIlluminaSequence = this.utilityObj.xmlUtil.GetTextValue(
                Constants.SangerToSolexaAndIlluminaNode, Constants.IlluminaSequence);
            string sangerQualScore = this.utilityObj.xmlUtil.GetTextValue(
                Constants.SangerToSolexaAndIlluminaNode, Constants.SangerQualScore);
            string expectedSolexaQualScore = this.utilityObj.xmlUtil.GetTextValue(
                Constants.SangerToSolexaAndIlluminaNode, Constants.SolexaQualScore);
            string expectedIlluminaQualScore = this.utilityObj.xmlUtil.GetTextValue(
                Constants.SangerToSolexaAndIlluminaNode, Constants.IlluminaQualScore);

            string solexaQualScore = null;
            string illuminaQualScore = null;
            byte[] scoreValue = Encoding.UTF8.GetBytes(sangerQualScore);

            // Create a Sanger qualitative sequence.
            QualitativeSequence sangerQualSequence = new QualitativeSequence(Alphabets.DNA,
                FastQFormatType.Sanger, sangerSequence, sangerQualScore);           

            // Convert Sanger to Solexa.
            QualitativeSequence solexaQualSequence = sangerQualSequence.ConvertTo(
                FastQFormatType.Solexa_Illumina_v1_0);

            byte[] sangerToSolexa = QualitativeSequence.ConvertEncodedQualityScore(FastQFormatType.Sanger, FastQFormatType.Solexa_Illumina_v1_0, scoreValue);
            var scores = solexaQualSequence.GetEncodedQualityScores();
            solexaQualScore = Encoding.UTF8.GetString(scores, 0, scores.Length);

            // Validate converted solexa score.            

            string qualSequence = new string(Encoding.UTF8.GetChars(sangerToSolexa));

            Assert.AreEqual(expectedSolexaQualScore, qualSequence);
            Assert.AreEqual(solexaQualScore, expectedSolexaQualScore);

            string solexaQualString=new string(solexaQualSequence.Select(a => (char)a).ToArray());
            Assert.AreEqual(solexaQualString,expectedSolexaSequence);

            ApplicationLog.WriteLine(string.Format(null,
                "Qualitative Sequence BVT:Qualitative Solexa score type {0} is as expected.",
                solexaQualScore));

            // Convert Sanger to Illumina.
            QualitativeSequence illuminaQualSequence = sangerQualSequence.ConvertTo(
                FastQFormatType.Illumina_v1_3);
            scores = illuminaQualSequence.GetEncodedQualityScores();
            illuminaQualScore = Encoding.UTF8.GetString(scores, 0, scores.Length);

            byte[] sangerToIllumina = QualitativeSequence.ConvertEncodedQualityScore(FastQFormatType.Sanger, FastQFormatType.Illumina_v1_3, scoreValue);
            string illuminaQualSeq = new string(illuminaQualSequence.Select(a => (char)a).ToArray());

            //// Validate converted illumina score.
            Assert.AreEqual(illuminaQualScore, expectedIlluminaQualScore);
            Assert.AreEqual(illuminaQualSeq, expectedIlluminaSequence);

            string sangerToIlluminaString = new string(Encoding.UTF8.GetChars(sangerToIllumina));            
            Assert.AreEqual(expectedIlluminaQualScore, sangerToIlluminaString);

            ApplicationLog.WriteLine(string.Format((IFormatProvider)null,
                "Qualitative Sequence BVT:Qualitative Illumina score type {0} is as expected.",
                illuminaQualScore));
        }
コード例 #44
0
        /// <summary>
        /// General method to invalidate creation of Qualitative sequence
        /// with invalid qual score..
        /// <param name="nodeName">Name of the Format type xml node.</param>
        /// <param name="errorMessage">Error message xml node name.</param>
        /// <param name="qualPam">Qualitative sequence constructor paramter.</param>
        /// </summary>
        void InValidateQualSequence(string nodeName, string errorMessage,
            QualitativeSequenceParameters qualPam)
        {
            // Get values from xml.
            FastQFormatType expectedFormatType = Utility.GetFastQFormatType(
                this.utilityObj.xmlUtil.GetTextValue(nodeName, Constants.FastQFormatType));
            string expectedErrorMessage = this.utilityObj.xmlUtil.GetTextValue(
                nodeName, errorMessage).Replace("FORMATTYPE", expectedFormatType.ToString());
            string inputSequence = this.utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.inputSequenceNode);
            string actualError = string.Empty;
            string updatedActualError = string.Empty;
            QualitativeSequence qualSeq = null;
            byte[] scoreArray = { 65, 64, 66, 68, 69, 67, 65, 65, 65, 65, 65,
                                   200, 3, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 4 };
            switch (qualPam)
            {
                case QualitativeSequenceParameters.FormatType:
                    //Try to create Qualitative sequence by invalid Quality score
                    try
                    {
                        qualSeq = new QualitativeSequence(Alphabets.DNA, expectedFormatType,
                          Encoding.UTF8.GetBytes(inputSequence), (byte[])null);
                        Assert.Fail();
                    }
                    catch (ArgumentException ex)
                    {
                        actualError = ex.Message;
                        // Validate an expected exception.
                        updatedActualError = actualError.Replace("\r", "").Replace("\n", "");
                        Assert.AreEqual(expectedErrorMessage.ToLower(CultureInfo.CurrentCulture),
                            updatedActualError.ToLower(CultureInfo.CurrentCulture));
                    }
                    break;
                case QualitativeSequenceParameters.ByteArray:
                    //Try to create Qualitative sequence by invalid Quality score
                    try
                    {
                        qualSeq = new QualitativeSequence(Alphabets.DNA, expectedFormatType,
                            Encoding.UTF8.GetBytes(inputSequence), scoreArray);
                        Assert.Fail();
                    }
                    catch (ArgumentException ex)
                    {
                        actualError = ex.Message;
                        // Validate an expected exception.
                        updatedActualError = actualError.Replace("\r", "").Replace("\n", "");
                        Assert.AreEqual(expectedErrorMessage.ToLower(CultureInfo.CurrentCulture),
                            updatedActualError.ToLower(CultureInfo.CurrentCulture));
                    }
                    break;
                default:
                    break;
            }

            // Log to VSTest GUI.
            Assert.IsNull(qualSeq);
            ApplicationLog.WriteLine(string.Format((IFormatProvider)null,
                "Qualitative Sequence P2: Qualitative Sequence Invalid score exception was validated successfully {0}",
                updatedActualError));
        }
コード例 #45
0
ファイル: ToStringBvtTestCases.cs プロジェクト: cpatmoore/bio
 public void ValidateQualitativeSequenceToString()
 {
     var seqData = new byte[4];
     seqData[0] = (byte) 'A';
     seqData[1] = (byte) 'T';
     seqData[2] = (byte) 'C';
     seqData[3] = (byte) 'G';
     var qualityScores = new byte[4];
     qualityScores[0] = (byte) 'A';
     qualityScores[1] = (byte) 'A';
     qualityScores[2] = (byte) 'A';
     qualityScores[3] = (byte) 'B';
     var seq = new QualitativeSequence(Alphabets.DNA,
                                       FastQFormatType.Illumina_v1_3, seqData, qualityScores);
     string actualString = seq.ToString();
     string expectedString = "ATCG\nAAAB"; // This is dangerously platform specific
     Assert.AreEqual(expectedString, actualString);
 }
コード例 #46
0
        public void InvalidateQualSequenceWithInvalidChars()
        {
            // Get values from xml.
            string expectedErrorMessage = this.utilityObj.xmlUtil.GetTextValue(
                Constants.SimpleDnaSangerNode, Constants.InvalidAlphabetErrorMessage);
            string actualError = string.Empty;
            string updatedActualError = string.Empty;
            QualitativeSequence qualSeq = null;

            //Try creating Qualitative sequence by passing invalid seq chars.
            try
            {
                qualSeq = new QualitativeSequence(Alphabets.DNA, FastQFormatType.Sanger, "AGTZ",
                    Utility.GetDefaultEncodedQualityScores(FastQFormatType.Sanger,4));
                Assert.Fail();
            }
            catch (ArgumentException ex)
            {
                actualError = ex.Message;
                // Validate an expected exception.
                updatedActualError = actualError.Replace("\r", "").Replace("\n", "");
                Assert.AreEqual(expectedErrorMessage.ToLower(CultureInfo.CurrentCulture),
                    updatedActualError.ToLower(CultureInfo.CurrentCulture));
                Assert.IsNull(qualSeq);
            }

            // Log to VSTest GUI.
            ApplicationLog.WriteLine(string.Format((IFormatProvider)null,
                "Qualitative Sequence P2: Qualitative Sequence Null exception was validated successfully {0}",
                updatedActualError));
        }
コード例 #47
0
ファイル: FastQP1TestCases.cs プロジェクト: cpatmoore/bio
        /// <summary>
        ///     General method to validate FastQ formatting
        ///     Qualitative Sequence by passing TextWriter as a parameter
        ///     <param name="nodeName">xml node name.</param>
        /// </summary>
        private void ValidateFastQFormatByFormattingQualSeqeunce(string nodeName)
        {
            // Gets the actual sequence and the alphabet from the Xml
            IAlphabet alphabet = Utility.GetAlphabet(utilityObj.xmlUtil.GetTextValue(nodeName, Constants.AlphabetNameNodeV2));
            FastQFormatType expectedFormatType = Utility.GetFastQFormatType(utilityObj.xmlUtil.GetTextValue(nodeName, Constants.FastQFormatType));
            string qualSequence = utilityObj.xmlUtil.GetTextValue(nodeName, Constants.ExpectedSequenceNode);
            string expectedQualitativeSequence = utilityObj.xmlUtil.GetTextValue(nodeName, Constants.ExpectedSequenceNode);
            string qualityScores = "";
            int i;

            for (i = 0; i < qualSequence.Length; i++)
                qualityScores = qualityScores + "}";

            byte[] seq = Encoding.UTF8.GetBytes(qualSequence);
            byte[] qScore = Encoding.UTF8.GetBytes(qualityScores);
            string tempFileName = Path.GetTempFileName();

            // Create a Qualitative Sequence.
            var qualSeq = new QualitativeSequence(alphabet, expectedFormatType, seq, qScore);

            var formatter = new FastQFormatter();
            using (formatter.Open(tempFileName))
            {
                formatter.Format(qualSeq);
                formatter.Close();

                var fastQParserObj = new FastQParser();
                using (fastQParserObj.Open(tempFileName))
                {
                    // Read the new file and validate Sequences.
                    var seqsNew = fastQParserObj.Parse();
                    var firstSequence = seqsNew.First();

                    // Validate qualitative Sequence upon parsing FastQ file.
                    Assert.AreEqual(expectedQualitativeSequence, firstSequence.ConvertToString());
                    Assert.IsTrue(string.IsNullOrEmpty(firstSequence.ID));

                    ApplicationLog.WriteLine(string.Format("FastQ Parser P1: The FASTQ sequence '{0}' validation after Parse() is found to be as expected.", firstSequence));
                }

                File.Delete(tempFileName);
            }
        }