cobot-tools 0.1.2.2 → 0.1.2.3
raw patch · 3 files changed
+35/−5 lines, 3 files
Files
- ChangeLog.md +4/−0
- cobot-tools.cabal +2/−2
- test/SpecCodonOptimization.hs +29/−3
ChangeLog.md view
@@ -2,6 +2,10 @@ ## [Unreleased] +## [0.1.2.3] - 2019-12-29+### Added+- quick-check tests for codon-optimization algorithm+ ## [0.1.2.2] - 2019-12-25 ### Fixed - wrike-438378826: CHO codon table fixed
cobot-tools.cabal view
@@ -4,10 +4,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: 84a7b89a1041e9805b22b527f40e7624a4313d166c84a98dae62d1025b096246+-- hash: c103fb434308ace7b65d824296158feae6828093d573662118d87fb7438dba25 name: cobot-tools-version: 0.1.2.2+version: 0.1.2.3 synopsis: Biological data file formats and IO description: Please see the README on GitHub at <https://github.com/less-wrong/cobot-tools#readme> category: Bio
test/SpecCodonOptimization.hs view
@@ -2,7 +2,7 @@ module SpecCodonOptimization where -import Bio.NucleicAcid.Nucleotide.Type (DNA)+import Bio.NucleicAcid.Nucleotide.Type (DNA (..)) import Bio.Protein.AminoAcid () import Bio.Protein.AminoAcid.Type (AA) import Bio.Tools.Sequence.CodonOptimization.Algo (optimizeAA,@@ -11,9 +11,10 @@ scoreCmp, scoreSequence) import Bio.Tools.Sequence.CodonOptimization.Constants (ak2Codon)-import Bio.Tools.Sequence.CodonOptimization.Types (CodonScoreConfig(..),+import Bio.Tools.Sequence.CodonOptimization.Types (CodonScoreConfig (..), Organism (..), defaultForbiddenRegexp)+import Control.Monad (replicateM) import Data.List (foldl', maximumBy, minimumBy)@@ -22,8 +23,13 @@ import System.Random import Test.Hspec (Expectation, Spec, describe,- it, shouldBe,+ it, runIO,+ shouldBe, shouldSatisfy)+import Test.Hspec.QuickCheck (prop)+import Test.QuickCheck.Gen (Gen, elements)+import Test.QuickCheck.Property (Property,+ forAll) confHuman :: CodonScoreConfig confHuman = CodonScoreConfig Human 3 1 1 0.5 1.4 40 0.001 2.6 100 1 60 defaultForbiddenRegexp@@ -67,6 +73,9 @@ codonOptimizationSpec :: Spec codonOptimizationSpec = describe "Codon optimization spec" $ do+ optimizedAgainstRandom confCHO+ optimizedAgainstRandom confHuman+ optimizedAgainstRandom confEColi optimizeSequence optimizeSequenceForEColi optimizeSequenceForCHO@@ -312,3 +321,20 @@ score conf' "GCCAGCGGCGACAAGACCCACACCTGTCCT" `shouldBe` 80.74362252733329 score conf' "CCCTGCCCCGCCCCCGAGGCCGCCGGCGGCCCTAGCGTGTTCCTGTTCCCTCCTAAGCCTAAGGACACCCTGATGATCAGCAGAACCCCCGAGGTGACCTGCGTGGTGGTGGACGTGAGCCACGAGGACCCTGAGGTGAAGTTCAATTGGTACGTGGACGGCGTGGAGGTGCACAACGCCAAGACCAAGCCTAGAGAGGAGCAGTACAACAGCACCTACAGAGTGGTGAGCGTGCTGACCGTGCTGCACCAAGACTGGCTGAACGGCAAGGAGTACAAGTGCAAGGTGAGCAACAAGGCCCTGCCCGCCCCTATCGAGAAGACCATCAGCAAGGCCAAG" `shouldBe` 96.19662511761598++optimizedAgainstRandom :: CodonScoreConfig -> Spec+optimizedAgainstRandom conf = describe "optimizedAgainstRandom" $ do+ let ak = "GQPREPQVYTLPPSRDELTKNQVSLTCLVKGFYPSDIAVEWESNGQPENNYKTTPPVLDSDGSFFLYSKLTVDKSRWQQGNVFSCSVMHEALHNHYTQKSLSLSPGK"+ gen <- runIO $ genNKSequence ak+ prop "optimized sequence should have better score than any random sequence" (runBatchCheck ak gen)+ where+ runBatchCheck :: [AA] -> Gen [DNA] -> Property+ runBatchCheck ak gen = forAll gen (\nk -> scoreSequence conf res >= scoreSequence conf nk)+ where+ res = optimizeAA conf ak++genNKSequence :: [AA] -> IO (Gen [DNA])+genNKSequence aa = elements <$> variants aa++variants :: [AA] -> IO [[DNA]]+variants aa = replicateM 100 (toRandomNKSequ aa)