packages feed

RNAFoldProgs-0.0.0.1: RNAEval.hs

-- | Wraps the BioInf.RNAEval functions, does a bit of input splitting, but not
-- much else.
--
-- TODO nonStandardMax should be an option
--
-- TODO allow different energy par files
--
-- TODO allow loading turner parameters directly
--
-- NOTE All my main programs tend to shrink to less than 100 lines of code ;-)

module Main where

import Control.Monad (liftM)
import Data.List.Split (splitEvery)
import System.IO (hFlush, stdout)
import Text.Printf
import Data.List.Split (splitEvery)

import Biobase.RNA (mkPrimary)
import Biobase.Structure
import Biobase.Structure.DotBracket
import Biobase.Vienna.Default
import Biobase.Vienna.Modification.NonStandard
import BioInf.RNAEval



-- | Evaluate the energy of a sequence and dotbracket string.

doEval trnr [pri,dotb] = do
  let inp = mkPrimary pri
  let sst  = toSSTree $ dotbracketToPairlist dotb
  let te = annotateWithEnergy trnr inp sst
  mapM_ putStrLn $ explainTree inp te
  printf "Total: %6d\n" $ treeSum te
  hFlush stdout
  return ()



main = do
  print "RNAEval"
  let trnr = nonStandardMax . fst $ turner2004GH -- default energy tables
  cnts <- liftM (splitEvery 2 . lines) $ getContents
  mapM_ (doEval trnr) cnts