{- | Module : SubSample.Options Description : ELynxSeq argument parsing Copyright : (c) Dominik Schrempf 2018 License : GPL-3 Maintainer : dominik.schrempf@gmail.com Stability : unstable Portability : portable Creation date: Sun Oct 7 17:29:45 2018. -} module SubSample.Options ( SubSampleArguments (..) , SubSample , subSampleArguments ) where import Control.Applicative import Control.Monad.Logger import Control.Monad.Trans.Reader import Data.Word import Options.Applicative import Tools import ELynx.Data.Alphabet.Alphabet import ELynx.Tools.Options -- | Data structure holding the Command line arguments. data SubSampleArguments = SubSampleArguments { ssAlphabet :: Alphabet , ssInFile :: Maybe FilePath , ssNSites :: Int , ssNAlignments :: Int , ssMbSeed :: Maybe [Word32] } -- | The sub sample command can log stuff and read necessary arguments. type SubSample = LoggingT (ReaderT SubSampleArguments IO) -- | Sub command parser. subSampleArguments :: Parser SubSampleArguments subSampleArguments = SubSampleArguments <$> alphabetOpt <*> optional filePathArg <*> subSampleNSitesOpt <*> subSampleNAlignmentsOpt <*> seedOpt subSampleNSitesOpt :: Parser Int subSampleNSitesOpt = option auto $ long "number-of-sites" <> short 'n' <> metavar "INT" <> help "Number of sites randomly drawn with replacement" subSampleNAlignmentsOpt :: Parser Int subSampleNAlignmentsOpt = option auto $ long "number-of-alignments" <> short 'm' <> metavar "INT" <> help "Number of multi sequence alignments to be created" filePathArg :: Parser FilePath filePathArg = strArgument $ metavar "INPUT-FILE" <> help "Read sequences from INPUT-FILE"