too-many-cells-3.0.1.0: src/TooManyCells/Program/Motifs.hs
{- TooManyCells.Program.Motifs
Gregory W. Schwartz
Motif entry point for command line program.
-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE DuplicateRecordFields #-}
module TooManyCells.Program.Motifs where
-- Remote
import Control.Monad (mfilter)
import Data.Maybe (fromMaybe)
import TextShow (showt)
import qualified Data.Text as T
import qualified Turtle as TU
-- Local
import TooManyCells.File.Types
import TooManyCells.Motifs.FindMotif
import TooManyCells.Motifs.Types
import TooManyCells.Program.Options
-- | Motif path.
motifsMain :: Subcommand -> IO ()
motifsMain (MotifsCommand opts) = do
let genome' = GenomeFile . motifGenome $ opts
topN' = TopN . (topN :: Motifs -> Int) $ opts
motifCommand' = MotifCommand . motifCommand $ opts
motifGenomeCommand' = fmap MotifGenomeCommand
. motifGenomeCommand
$ opts
diffFile' = DiffFile . TU.fromText . diffFile $ opts
backgroundDiffFile' = fmap (BackgroundDiffFile . TU.fromText)
. backgroundDiffFile
$ opts
outDir = OutputDirectory
. (output :: Motifs -> String)
$ opts
TU.mktree . TU.fromText . T.pack . unOutputDirectory $ outDir
TU.sh $ do
nodes <- TU.liftIO $ getNodes diffFile'
node <- if null nodes then pure Nothing else TU.select . fmap Just $ nodes
let outPath = OutputPath
$ (TU.fromText . T.pack $ unOutputDirectory outDir)
TU.</> (maybe mempty (TU.fromText . ("node_" <>) . showt . unNode) node)
case motifGenomeCommand' of
Nothing -> TU.liftIO
$ getMotif
diffFile'
backgroundDiffFile'
outPath
motifCommand'
genome'
topN'
node
(Just x) -> TU.liftIO
$ getMotifGenome
diffFile'
backgroundDiffFile'
outPath
x
genome'
topN'
node