packages feed

BiobaseTrainingData-0.1.0.0: MkTrainingData.hs

{-# 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}