BiobaseENA (empty) → 0.0.0.1
raw patch · 12 files changed
+564/−0 lines, 12 filesdep +BiobaseENAdep +BiobaseTypesdep +QuickChecksetup-changed
Dependencies added: BiobaseENA, BiobaseTypes, QuickCheck, base, bytestring, containers, directory, file-embed, lens, megaparsec, mtl, tasty, tasty-quickcheck, tasty-th, text, vector, vector-th-unbox
Files
- Biobase/GeneticCodes.hs +70/−0
- Biobase/GeneticCodes/Embedded.hs +16/−0
- Biobase/GeneticCodes/Import.hs +78/−0
- Biobase/GeneticCodes/Translation.hs +70/−0
- Biobase/GeneticCodes/Types.hs +49/−0
- BiobaseENA.cabal +94/−0
- LICENSE +30/−0
- README.md +16/−0
- Setup.hs +2/−0
- changelog.md +6/−0
- sources/translation-tables +125/−0
- tests/properties.hs +8/−0
+ Biobase/GeneticCodes.hs view
@@ -0,0 +1,70 @@++module Biobase.GeneticCodes+ ( module Biobase.GeneticCodes+ , module Biobase.GeneticCodes.Types+ , fromByteString+ , fromFile+ , geneticCodes+ , translate+ ) where++import Control.Lens+import Control.Monad.Except+import Data.List (find)+import Data.Text (pack)+import Data.Text (Text,isInfixOf,unpack)+import System.Directory (doesFileExist)+import Text.Printf+import System.Exit (exitSuccess)++import Biobase.GeneticCodes.Embedded+import Biobase.GeneticCodes.Import+import Biobase.GeneticCodes.Translation+import Biobase.GeneticCodes.Types++++codeByTableID+ ∷ (MonadError String m)+ ⇒ [TranslationTable c a]+ → Int+ → m (TranslationTable c a)+codeByTableID ts i+ = maybe (throwError $ printf "No TranslationTable with ID %d found!" i) return+ $ find (\t → t^.tableID == i) ts++codeByTableNameInfix+ ∷ (MonadError String m)+ ⇒ [TranslationTable c a]+ → Text+ → m (TranslationTable c a)+codeByTableNameInfix ts n+ = maybe (throwError $ printf "No TranslationTable with Name infix %s found!" $ unpack n) return+ $ find (\t → n `isInfixOf` (t^.tableName)) ts++-- | If the given filepath exists, then we try to load the genetic table from+-- the file. This will fail if there is not exactly one genetic table there. If+-- @fp@ is not a file, we try parsing @fp@ as a numeric ID and look for that+-- table. Finally we try finding an infix with that name.+--+-- This is all slightly "unsafe" but captures the most common scenario where we+-- either load such a table from file or need selection of the correct one.+--+-- If the given filepath is @"list"@, then a list of table id's and table names+-- is returned.++fromFileOrCached+ ∷ (MonadIO m, MonadError String m)+ ⇒ FilePath+ → m (TranslationTable Char Char)+fromFileOrCached fp = do+ dfe ← liftIO $ doesFileExist fp+ if | fp == "list" → do+ mapM_ (liftIO . uncurry (printf "%3d %s\n")) [ (t^.tableID,t^.tableName) | t ← geneticCodes ]+ liftIO exitSuccess+ | dfe → fromFile fp >>= \case+ [x] → return x+ xs → throwError $ fp ++ " should contain exactly one translation table!"+ | [(k,"")] ← reads fp → codeByTableID geneticCodes k+ | otherwise → codeByTableNameInfix geneticCodes $ pack fp+
+ Biobase/GeneticCodes/Embedded.hs view
@@ -0,0 +1,16 @@++module Biobase.GeneticCodes.Embedded where++import Control.Monad.Except+import Data.ByteString (ByteString)+import Data.FileEmbed++import Biobase.GeneticCodes.Import+import Biobase.GeneticCodes.Types++geneticCodesFile ∷ ByteString+geneticCodesFile = $(embedFile "sources/translation-tables")++geneticCodes ∷ [TranslationTable Char Char]+geneticCodes = either error id . runExcept $ fromByteString geneticCodesFile+
+ Biobase/GeneticCodes/Import.hs view
@@ -0,0 +1,78 @@++-- |+--+-- The tables imported with these functions are from ENA:+-- <https://www.ebi.ac.uk/ena/browse/translation-tables>++module Biobase.GeneticCodes.Import where++import Control.Monad.Except+import Data.ByteString.Char8 as BS hiding (unpack,map)+import Data.ByteString.Char8 (ByteString)+import Data.Text.Encoding (decodeUtf8)+import Data.Text.IO as TIO+import Data.Text (Text,unpack)+import Data.Void+import System.Exit+import Text.Megaparsec+import Text.Megaparsec.Char as MC+import Text.Megaparsec.Char.Lexer as MCL++import Biobase.Types.Codon++import Biobase.GeneticCodes.Types++++type TTParser = Parsec Void Text++-- | Import translation tables from a given file. In case of parse error, print+-- the error and exit with a failure.++fromFile+ ∷ (MonadIO m, MonadError String m)+ ⇒ FilePath+ → m [TranslationTable Char Char]+fromFile fp = (liftIO $ BS.readFile fp) >>= fromByteString++-- | Parse a ByteString with translation tables.++fromByteString+ ∷ (MonadError String m)+ ⇒ ByteString+ → m [TranslationTable Char Char]+fromByteString bs = case runParser (some parseTranslationTable) "" (decodeUtf8 bs) of+ -- Left err → throwError $ parseErrorPretty err -- megaparsec 6.x+ Left err → throwError $ errorBundlePretty err -- megaparsec 7.x+ Right rs → return rs++-- | Parses a single translation table.++parseTranslationTable ∷ TTParser (TranslationTable Char Char)+parseTranslationTable = do+ (i,hdr) ← parseHeader+ aas ← parseData "amino acids"+ starts' ← parseData "start codons"+ base1 ← parseData "Base 1"+ base2 ← parseData "Base 2"+ base3 ← parseData "Base 3"+ let triplets = zipWith3 Codon base1 base2 base3+ let starts = map (=='M') starts'+ let translations = zipWith3 TranslationElement triplets starts aas+ return $ genTranslationTable i hdr translations++-- | Parse the header, returning the Identifier and the name of the table.++parseHeader ∷ TTParser (Int,Text)+parseHeader+ = (,) <$> (fromIntegral <$> lexeme MC.space decimal)+ <* char ':' <* MC.space+ <*> takeWhileP Nothing (/= '\n')+ <* MC.space++parseData ∷ Text → TTParser String+parseData t+ = string' t <* MC.space+ *> (unpack <$> takeP Nothing 64)+ <* MC.space+
+ Biobase/GeneticCodes/Translation.hs view
@@ -0,0 +1,70 @@++-- | Abstract translation functionality. Given a genetic code translation table+-- (as provided within this module), provide translation from the nucleotide to+-- the amino acid alphabet.+--+-- Limited "backtranslation" capabilities are provided. Since this process is+-- lossy, it should only be used in very specific circumstances.+--+-- TODO Translation from @BioSequence RNA is missing.++module Biobase.GeneticCodes.Translation where++import Control.Lens+import qualified Data.Map.Strict as M+import qualified Data.ByteString.Char8 as BS++import Biobase.Types.BioSequence+import Biobase.Types.Codon++import Biobase.GeneticCodes.Types++++-- |++class Translation t where+ -- | Defines the target type for a given translation input.+ type TargetType t ∷ *+ -- | Type of the nucleotide characters.+ type CodonType t ∷ *+ -- | Type of the amino acid characters.+ type AAType t ∷ *+ -- | Translate from a given type of sequence @t@ into the target type.+ translate ∷ TranslationTable (CodonType t) (AAType t) → t → TargetType t++-- | Very simple translation of individual base triplets.++instance Translation (Codon Char) where+ type TargetType (Codon Char) = Char+ type CodonType (Codon Char) = Char+ type AAType (Codon Char) = Char+ translate tbl t = maybe 'X' _aminoAcid $ M.lookup t (tbl^.codonToAminoAcid)+ {-# Inline translate #-}++-- | Strings of characters are normally very inconvenient but useful in+-- backtracking cases. Fully assumes that the alphabet is DNA. Ignores+-- non-triplets at the end.++instance Translation String where+ type TargetType String = String+ type CodonType String = Char+ type AAType String = Char+ translate tbl =+ let go xs | [x,y,z] ← hd = translate tbl (Codon x y z) : go tl+ | otherwise = []+ where (hd,tl) = splitAt 3 xs+ in go++-- | Translation of @BioSequence DNA@. The translation tables assume DNA+-- triplets anyway. Biologically there should be a transcription step in+-- between. Ignores non-triplets at the end.++instance Translation (BioSequence DNA) where+ type TargetType (BioSequence DNA) = BioSequence AA+ type CodonType (BioSequence DNA) = Char+ type AAType (BioSequence DNA) = Char+ translate tbl (BioSequence xs) =+ let go k = Just (translate tbl $ Codon (BS.index xs k) (BS.index xs (k+1)) (BS.index xs (k+2)) ,k+3)+ in BioSequence . fst $ BS.unfoldrN (BS.length xs `div` 3) go 0+
+ Biobase/GeneticCodes/Types.hs view
@@ -0,0 +1,49 @@++-- |++module Biobase.GeneticCodes.Types where++import Control.Lens+import Data.ByteString.Char8 (ByteString)+import Data.Map.Strict (Map,fromList,fromListWith)+import Data.Text (Text)++import Biobase.Types.Codon++++data TranslationElement c a = TranslationElement+ { _baseCodon ∷ !(Codon c)+ , _isStartCodon ∷ !Bool+ , _aminoAcid ∷ !a+ }+ deriving (Show)+makeLenses ''TranslationElement++data TranslationTable c a = TranslationTable+ { _codonToAminoAcid ∷ !(Map (Codon c) (TranslationElement c a))+ , _aminoAcidtoCodons ∷ !(Map a [TranslationElement c a])+ , _tableID ∷ !Int+ , _tableName ∷ !Text+ }+ deriving (Show)+makeLenses ''TranslationTable++genTranslationTable+ ∷ (Ord c, Ord a)+ ⇒ Int+ -- ^ table identifier+ → Text+ -- ^ table hdr / table name+ → [TranslationElement c a]+ -- ^ known translation elements (should be @4^3@ but is not checked)+ → TranslationTable c a+ -- ^ finished translation table+{-# Inlinable genTranslationTable #-}+genTranslationTable i hdr xs = TranslationTable+ { _codonToAminoAcid = fromList [ (t^.baseCodon, t) | t ← xs ]+ , _aminoAcidtoCodons = fromListWith (++) [ (t^.aminoAcid, [t]) | t ← xs ]+ , _tableID = i+ , _tableName = hdr+ }+
+ BiobaseENA.cabal view
@@ -0,0 +1,94 @@+Cabal-version: 2.2+Name: BiobaseENA+Version: 0.0.0.1+License: BSD-3-Clause+License-file: LICENSE+Author: Christian Hoener zu Siederdissen+Maintainer: choener@bioinf.uni-leipzig.de+Copyright: Christian Hoener zu Siederdissen, 2019+homepage: https://github.com/choener/BiobaseENA+bug-reports: https://github.com/choener/BiobaseENA/issues+Stability: Experimental+Category: Data+Build-type: Simple+tested-with: GHC == 8.4.4+Synopsis: European Nucleotide Archive data+Description:+ Provides data (and later API) access to the European Nucleotide Archive.+ .+ * Taxonomy Service / Translation tables (hardcoded)++++extra-source-files:+ changelog.md+ README.md+ sources/translation-tables+++common deps+ build-depends: base >= 4.7 && < 5.0+ , bytestring+ , containers+ , directory+ , file-embed >= 0.0.10+ , lens >= 4.0+ , megaparsec >= 7.0+ , mtl >= 2.0+ , text+ , vector >= 0.10+ , vector-th-unbox >= 0.2+ --+ , BiobaseTypes == 0.2.0.*+ ghc-options:+ -O2+ -funbox-strict-fields+ default-language:+ Haskell2010+ default-extensions: BangPatterns+ , FlexibleContexts+ , FlexibleInstances+ , MultiWayIf+ , LambdaCase+ , OverloadedStrings+ , TemplateHaskell+ , TypeFamilies+ , UnicodeSyntax+++library+ import:+ deps+ exposed-modules:+ Biobase.GeneticCodes+ Biobase.GeneticCodes.Embedded+ Biobase.GeneticCodes.Import+ Biobase.GeneticCodes.Translation+ Biobase.GeneticCodes.Types+++++test-suite properties+ import:+ deps+ type:+ exitcode-stdio-1.0+ main-is:+ properties.hs+ ghc-options:+ -threaded -rtsopts -with-rtsopts=-N+ hs-source-dirs:+ tests+ build-depends: BiobaseENA+ , QuickCheck >= 2.7+ , tasty >= 0.11+ , tasty-quickcheck >= 0.8+ , tasty-th >= 0.1++++source-repository head+ type: git+ location: git://github.com/choener/BiobaseENA+
+ LICENSE view
@@ -0,0 +1,30 @@+Copyright Christian Hoener zu Siederdissen 2018++All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++ * Redistributions of source code must retain the above copyright+ notice, this list of conditions and the following disclaimer.++ * Redistributions in binary form must reproduce the above+ copyright notice, this list of conditions and the following+ disclaimer in the documentation and/or other materials provided+ with the distribution.++ * Neither the name of Christian Hoener zu Siederdissen nor the names of other+ contributors may be used to endorse or promote products derived+ from this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ README.md view
@@ -0,0 +1,16 @@+[](https://travis-ci.org/choener/BiobaseENA)++# BiobaseENA++Data from the European Nucleotide Archive. Currently only provides translation+table but is supposed to, at some point, provide API access to their data.++++#### Contact++Christian Hoener zu Siederdissen +Leipzig University, Leipzig, Germany +choener@bioinf.uni-leipzig.de +http://www.bioinf.uni-leipzig.de/~choener/ +
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ changelog.md view
@@ -0,0 +1,6 @@+0.0.0.1+-------++- initial creation+- using megaparsec (testing for now)+
+ sources/translation-tables view
@@ -0,0 +1,125 @@+1: Standard+Amino acids FFLLSSSSYY**CC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG+Start codons ---M---------------M---------------M----------------------------+Base 1 TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG+Base 2 TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG+Base 3 TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG++2: Vertebrate Mitochondrial+Amino acids FFLLSSSSYY**CCWWLLLLPPPPHHQQRRRRIIMMTTTTNNKKSS**VVVVAAAADDEEGGGG+Start codons --------------------------------MMMM---------------M------------+Base 1 TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG+Base 2 TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG+Base 3 TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG++3: Yeast Mitochondrial+Amino acids FFLLSSSSYY**CCWWTTTTPPPPHHQQRRRRIIMMTTTTNNKKSSRRVVVVAAAADDEEGGGG+Start codons ----------------------------------MM----------------------------+Base 1 TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG+Base 2 TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG+Base 3 TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG++4: Mold Mitochondrial; Protozoan Mitochondrial; Coelenterate Mitochondrial; Mycoplasma; Spiroplasma+Amino acids FFLLSSSSYY**CCWWLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG+Start codons --MM---------------M------------MMMM---------------M------------+Base 1 TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG+Base 2 TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG+Base 3 TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG++5: Invertebrate Mitochondrial+Amino acids FFLLSSSSYY**CCWWLLLLPPPPHHQQRRRRIIMMTTTTNNKKSSSSVVVVAAAADDEEGGGG+Start codons ---M----------------------------MMMM---------------M------------+Base 1 TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG+Base 2 TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG+Base 3 TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG++6: Ciliate Nuclear; Dasycladacean Nuclear; Hexamita Nuclear+Amino acids FFLLSSSSYYQQCC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG+Start codons -----------------------------------M----------------------------+Base 1 TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG+Base 2 TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG+Base 3 TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG++9: Echinoderm Mitochondrial; Flatworm Mitochondrial+Amino acids FFLLSSSSYY**CCWWLLLLPPPPHHQQRRRRIIIMTTTTNNNKSSSSVVVVAAAADDEEGGGG+Start codons -----------------------------------M---------------M------------+Base 1 TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG+Base 2 TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG+Base 3 TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG++10: Euplotid Nuclear+Amino acids FFLLSSSSYY**CCCWLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG+Start codons -----------------------------------M----------------------------+Base 1 TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG+Base 2 TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG+Base 3 TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG++11: Bacterial, Archaeal and Plant Plastid+Amino acids FFLLSSSSYY**CC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG+Start codons ---M---------------M------------MMMM---------------M------------+Base 1 TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG+Base 2 TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG+Base 3 TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG++12: Alternative Yeast Nuclear+Amino acids FFLLSSSSYY**CC*WLLLSPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG+Start codons -------------------M---------------M----------------------------+Base 1 TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG+Base 2 TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG+Base 3 TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG++13: Ascidian Mitochondrial+Amino acids FFLLSSSSYY**CCWWLLLLPPPPHHQQRRRRIIMMTTTTNNKKSSGGVVVVAAAADDEEGGGG+Start codons ---M------------------------------MM---------------M------------+Base 1 TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG+Base 2 TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG+Base 3 TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG++14: Alternative Flatworm Mitochondrial+Amino acids FFLLSSSSYYY*CCWWLLLLPPPPHHQQRRRRIIIMTTTTNNNKSSSSVVVVAAAADDEEGGGG+Start codons -----------------------------------M----------------------------+Base 1 TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG+Base 2 TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG+Base 3 TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG++16: Chlorophycean Mitochondrial+Amino acids FFLLSSSSYY*LCC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG+Start codons -----------------------------------M----------------------------+Base 1 TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG+Base 2 TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG+Base 3 TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG++21: Trematode Mitochondrial+Amino acids FFLLSSSSYY**CCWWLLLLPPPPHHQQRRRRIIMMTTTTNNNKSSSSVVVVAAAADDEEGGGG+Start codons -----------------------------------M---------------M------------+Base 1 TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG+Base 2 TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG+Base 3 TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG++22: Scenedesmus obliquus mitochondrial+Amino acids FFLLSS*SYY*LCC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG+Start codons -----------------------------------M----------------------------+Base 1 TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG+Base 2 TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG+Base 3 TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG++23: Thraustochytrium mitochondrial code+Amino acids FF*LSSSSYY**CC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG+Start codons --------------------------------M--M---------------M------------+Base 1 TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG+Base 2 TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG+Base 3 TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG++24: Pterobranchia Mitochondrial+Amino acids FFLLSSSSYY**CCWWLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSSKVVVVAAAADDEEGGGG+Start codons ---M---------------M---------------M---------------M------------+Base 1 TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG+Base 2 TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG+Base 3 TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG++25: Candidate Division SR1 and Gracilibacteria+Amino acids FFLLSSSSYY**CCGWLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG+Start codons ---M-------------------------------M---------------M------------+Base 1 TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG+Base 2 TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG+Base 3 TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG
+ tests/properties.hs view
@@ -0,0 +1,8 @@++module Main where++++main ∷ IO ()+main = return ()+