{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE DeriveDataTypeable #-}
module Main where
import System.Console.CmdArgs
import Data.List as L
import Biobase.Secondary.PseudoKnots
import qualified Biobase.FR3D as F
import qualified Biobase.FR3D.Import as F
import qualified Biobase.RNAstrand as R
import qualified Biobase.RNAstrand.Import as R
import Biobase.TrainingData
data Options
-- | FR3D parses all files within a directory and all sub-directories.
= FR3D
{ removepk :: Bool
, fromdir :: FilePath
}
-- | RNAstrand reads from one file
| RNAstrand
{ removepk :: Bool
, fromfile :: FilePath
}
deriving (Show,Data,Typeable)
fr3d = FR3D
{ removepk = False &= help "removes pseudoknots from the entry using a heuristic algorithm"
, fromdir = "./" &= args
}
rnastrand = RNAstrand
{ fromfile = "" &= args
}
main :: IO ()
main = do
o <- cmdArgs $ modes [fr3d, rnastrand]
run o
-- | FR3D importer
run FR3D{..} = do
xs <- F.fromDir fromdir
mapM_ print $ map (removePK removepk . mkTrainingData . removeBIF . F.linearizeFR3D) xs
-- | RNAstrand importer
run RNAstrand{..} = do
xs <- R.fromFile fromfile
mapM_ print $ map (removePK removepk . mkTrainingData) xs
-- | Removes bifurcated pairs.
--
-- TODO we should really handle bifurcated pairs better...
removeBIF l@F.LinFR3D{..} = l{F.pairs = sort $ filter f pairs} where
f (_,_,x)
| x == "bif" = False
| otherwise = True
-- | Remove pseudoknots
removePK rpk td@TrainingData{..}
| not rpk = td
| otherwise = td{secondary = removeByCounting secondary}