{-# LANGUAGE OverloadedStrings #-}
module SLynx.Translate.Translate
( translateCmd,
)
where
import Control.Monad.Trans.Reader
import ELynx.Character.Codon
import ELynx.Sequence.Export.Fasta
import ELynx.Sequence.Sequence
import ELynx.Sequence.Translate
import ELynx.Tools.ELynx
import ELynx.Tools.Environment
import ELynx.Tools.Logger
import SLynx.Tools
import SLynx.Translate.Options
translateSeqs :: Int -> UniversalCode -> [Sequence] -> [Sequence]
translateSeqs :: Int -> UniversalCode -> [Sequence] -> [Sequence]
translateSeqs Int
rf UniversalCode
uc = (Sequence -> Sequence) -> [Sequence] -> [Sequence]
forall a b. (a -> b) -> [a] -> [b]
map (UniversalCode -> Int -> Sequence -> Sequence
translateSeq UniversalCode
uc Int
rf)
translateCmd :: ELynx TranslateArguments ()
translateCmd :: ELynx TranslateArguments ()
translateCmd = do
(TranslateArguments Alphabet
al String
inFile Int
rf UniversalCode
uc) <- Environment TranslateArguments -> TranslateArguments
forall a. Environment a -> a
localArguments (Environment TranslateArguments -> TranslateArguments)
-> ReaderT
(Environment TranslateArguments)
IO
(Environment TranslateArguments)
-> ReaderT (Environment TranslateArguments) IO TranslateArguments
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ReaderT
(Environment TranslateArguments)
IO
(Environment TranslateArguments)
forall (m :: * -> *) r. Monad m => ReaderT r m r
ask
String -> ELynx TranslateArguments ()
forall e.
(HasLock e, HasLogHandles e, HasVerbosity e) =>
String -> Logger e ()
logInfoS (String -> ELynx TranslateArguments ())
-> String -> ELynx TranslateArguments ()
forall a b. (a -> b) -> a -> b
$ String
" Universal code: " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> UniversalCode -> String
forall a. Show a => a -> String
show UniversalCode
uc String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
"."
String -> ELynx TranslateArguments ()
forall e.
(HasLock e, HasLogHandles e, HasVerbosity e) =>
String -> Logger e ()
logInfoS (String -> ELynx TranslateArguments ())
-> String -> ELynx TranslateArguments ()
forall a b. (a -> b) -> a -> b
$ String
" Reading frame: " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> Int -> String
forall a. Show a => a -> String
show Int
rf String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
"."
String -> ELynx TranslateArguments ()
forall e.
(HasLock e, HasLogHandles e, HasVerbosity e) =>
String -> Logger e ()
logInfoS String
""
[Sequence]
ss <- Alphabet
-> String -> Logger (Environment TranslateArguments) [Sequence]
forall e.
(HasLock e, HasLogHandles e, HasVerbosity e) =>
Alphabet -> String -> Logger e [Sequence]
readSeqs Alphabet
al String
inFile
let result :: ByteString
result = [Sequence] -> ByteString
sequencesToFasta ([Sequence] -> ByteString) -> [Sequence] -> ByteString
forall a b. (a -> b) -> a -> b
$ Int -> UniversalCode -> [Sequence] -> [Sequence]
translateSeqs Int
rf UniversalCode
uc [Sequence]
ss
String -> ByteString -> String -> ELynx TranslateArguments ()
forall a.
Reproducible a =>
String -> ByteString -> String -> ELynx a ()
out String
"translated sequences" ByteString
result String
"fasta"