{-# 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 = 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) <- forall a. Environment a -> a
localArguments forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (m :: * -> *) r. Monad m => ReaderT r m r
ask
forall e.
(HasLock e, HasLogHandles e, HasVerbosity e) =>
String -> Logger e ()
logInfoS forall a b. (a -> b) -> a -> b
$ String
" Universal code: " forall a. Semigroup a => a -> a -> a
<> forall a. Show a => a -> String
show UniversalCode
uc forall a. Semigroup a => a -> a -> a
<> String
"."
forall e.
(HasLock e, HasLogHandles e, HasVerbosity e) =>
String -> Logger e ()
logInfoS forall a b. (a -> b) -> a -> b
$ String
" Reading frame: " forall a. Semigroup a => a -> a -> a
<> forall a. Show a => a -> String
show Int
rf forall a. Semigroup a => a -> a -> a
<> String
"."
forall e.
(HasLock e, HasLogHandles e, HasVerbosity e) =>
String -> Logger e ()
logInfoS String
""
[Sequence]
ss <- 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 forall a b. (a -> b) -> a -> b
$ Int -> UniversalCode -> [Sequence] -> [Sequence]
translateSeqs Int
rf UniversalCode
uc [Sequence]
ss
forall a.
Reproducible a =>
String -> ByteString -> String -> ELynx a ()
out String
"translated sequences" ByteString
result String
"fasta"