{- | Module : Options Description : TLynx general options Copyright : (c) Dominik Schrempf 2019 License : GPL-3 Maintainer : dominik.schrempf@gmail.com Stability : unstable Portability : portable Creation date: Sat Sep 7 18:55:03 2019. -} module Options ( Arguments (..) , CommandArguments (..) , parseArguments , distanceDescription , examineDescription , simulateDescription , compareDescription , connectDescription , shuffleDescription ) where import Options.Applicative import Options.Applicative.Help.Pretty import Compare.Options import Connect.Options import Distance.Options import Examine.Options import Shuffle.Options import Simulate.Options import ELynx.Tools.Options data CommandArguments = Distance DistanceArguments | Examine ExamineArguments | Simulate SimulateArguments | Compare CompareArguments | Connect ConnectArguments | Shuffle ShuffleArguments distanceDescription :: String distanceDescription = "Compute distances between many phylogenetic trees." examineDescription :: String examineDescription = "Compute summary statistics of phylogenetic trees." simulateDescription :: String simulateDescription = "Simulate phylogenetic trees using birth and death processes." compareDescription :: String compareDescription = "Compare two phylogenetic trees (compute distances and branch-wise differences)." connectDescription :: String connectDescription = "Connect two phylogenetic trees in all ways (possibly honoring constraints)." shuffleDescription :: String shuffleDescription = "Shuffle a phylogenetic tree (keep coalescent times, but shuffle topology and leaves)." distanceCommand :: Mod CommandFields CommandArguments distanceCommand = command "distance" $ info (Distance <$> distanceArguments) ( fullDesc <> progDesc distanceDescription <> footerDoc (Just $ pretty distanceFooter) ) examineCommand :: Mod CommandFields CommandArguments examineCommand = command "examine" $ info (Examine <$> examineArguments) $ progDesc examineDescription simulateCommand :: Mod CommandFields CommandArguments simulateCommand = command "simulate" $ info (Simulate <$> simulateArguments) ( fullDesc <> progDesc simulateDescription <> footerDoc (Just $ pretty simulateFooter) ) compareCommand :: Mod CommandFields CommandArguments compareCommand = command "compare" $ info (Compare <$> compareArguments) $ progDesc compareDescription connectCommand :: Mod CommandFields CommandArguments connectCommand = command "connect" $ info (Connect <$> connectArguments) $ progDesc connectDescription shuffleCommand :: Mod CommandFields CommandArguments shuffleCommand = command "shuffle" $ info (Shuffle <$> shuffleArguments) $ progDesc shuffleDescription commandArguments :: Parser CommandArguments commandArguments = hsubparser $ distanceCommand <> examineCommand <> simulateCommand <> compareCommand <> connectCommand <> shuffleCommand parseArguments :: IO (Arguments CommandArguments) parseArguments = parseArgumentsWith desc ftr commandArguments desc :: [String] desc = [ "Compare, examine, and simulate phylogenetic trees." ] ftr :: [String] ftr = "File formats:" : fs where toListItem = (" - " ++) fs = map toListItem ["Newick"]