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
{ TranslationElement c a -> Codon c
_baseCodon :: !(Codon c)
, TranslationElement c a -> Bool
_isStartCodon :: !Bool
, TranslationElement c a -> a
_aminoAcid :: !a
}
deriving (Int -> TranslationElement c a -> ShowS
[TranslationElement c a] -> ShowS
TranslationElement c a -> String
(Int -> TranslationElement c a -> ShowS)
-> (TranslationElement c a -> String)
-> ([TranslationElement c a] -> ShowS)
-> Show (TranslationElement c a)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
forall c a.
(Show c, Show a) =>
Int -> TranslationElement c a -> ShowS
forall c a. (Show c, Show a) => [TranslationElement c a] -> ShowS
forall c a. (Show c, Show a) => TranslationElement c a -> String
showList :: [TranslationElement c a] -> ShowS
$cshowList :: forall c a. (Show c, Show a) => [TranslationElement c a] -> ShowS
show :: TranslationElement c a -> String
$cshow :: forall c a. (Show c, Show a) => TranslationElement c a -> String
showsPrec :: Int -> TranslationElement c a -> ShowS
$cshowsPrec :: forall c a.
(Show c, Show a) =>
Int -> TranslationElement c a -> ShowS
Show)
makeLenses ''TranslationElement
data TranslationTable c a = TranslationTable
{ TranslationTable c a -> Map (Codon c) (TranslationElement c a)
_codonToAminoAcid :: !(Map (Codon c) (TranslationElement c a))
, TranslationTable c a -> Map a [TranslationElement c a]
_aminoAcidtoCodons :: !(Map a [TranslationElement c a])
, TranslationTable c a -> Int
_tableID :: !Int
, TranslationTable c a -> Text
_tableName :: !Text
}
deriving (Int -> TranslationTable c a -> ShowS
[TranslationTable c a] -> ShowS
TranslationTable c a -> String
(Int -> TranslationTable c a -> ShowS)
-> (TranslationTable c a -> String)
-> ([TranslationTable c a] -> ShowS)
-> Show (TranslationTable c a)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
forall c a.
(Show c, Show a) =>
Int -> TranslationTable c a -> ShowS
forall c a. (Show c, Show a) => [TranslationTable c a] -> ShowS
forall c a. (Show c, Show a) => TranslationTable c a -> String
showList :: [TranslationTable c a] -> ShowS
$cshowList :: forall c a. (Show c, Show a) => [TranslationTable c a] -> ShowS
show :: TranslationTable c a -> String
$cshow :: forall c a. (Show c, Show a) => TranslationTable c a -> String
showsPrec :: Int -> TranslationTable c a -> ShowS
$cshowsPrec :: forall c a.
(Show c, Show a) =>
Int -> TranslationTable c a -> ShowS
Show)
makeLenses ''TranslationTable
genTranslationTable
:: (Ord c, Ord a)
=> Int
-> Text
-> [TranslationElement c a]
-> TranslationTable c a
{-# Inlinable genTranslationTable #-}
genTranslationTable :: Int -> Text -> [TranslationElement c a] -> TranslationTable c a
genTranslationTable Int
i Text
hdr [TranslationElement c a]
xs = TranslationTable :: forall c a.
Map (Codon c) (TranslationElement c a)
-> Map a [TranslationElement c a]
-> Int
-> Text
-> TranslationTable c a
TranslationTable
{ _codonToAminoAcid :: Map (Codon c) (TranslationElement c a)
_codonToAminoAcid = [(Codon c, TranslationElement c a)]
-> Map (Codon c) (TranslationElement c a)
forall k a. Ord k => [(k, a)] -> Map k a
fromList [ (TranslationElement c a
tTranslationElement c a
-> Getting (Codon c) (TranslationElement c a) (Codon c) -> Codon c
forall s a. s -> Getting a s a -> a
^.Getting (Codon c) (TranslationElement c a) (Codon c)
forall c a c.
Lens
(TranslationElement c a)
(TranslationElement c a)
(Codon c)
(Codon c)
baseCodon, TranslationElement c a
t) | TranslationElement c a
t ← [TranslationElement c a]
xs ]
, _aminoAcidtoCodons :: Map a [TranslationElement c a]
_aminoAcidtoCodons = ([TranslationElement c a]
-> [TranslationElement c a] -> [TranslationElement c a])
-> [(a, [TranslationElement c a])]
-> Map a [TranslationElement c a]
forall k a. Ord k => (a -> a -> a) -> [(k, a)] -> Map k a
fromListWith [TranslationElement c a]
-> [TranslationElement c a] -> [TranslationElement c a]
forall a. [a] -> [a] -> [a]
(++) [ (TranslationElement c a
tTranslationElement c a -> Getting a (TranslationElement c a) a -> a
forall s a. s -> Getting a s a -> a
^.Getting a (TranslationElement c a) a
forall c a a.
Lens (TranslationElement c a) (TranslationElement c a) a a
aminoAcid, [TranslationElement c a
t]) | TranslationElement c a
t ← [TranslationElement c a]
xs ]
, _tableID :: Int
_tableID = Int
i
, _tableName :: Text
_tableName = Text
hdr
}