module Biobase.Structure.DotBracket where
import Data.Array.IArray
import Data.List (sort)
import Biobase.RNA
import Biobase.Structure
dotbracket :: Secondary -> String
dotbracket Secondary{..} = elems rbr where
arr = listArray (0,len1) $ replicate len '.' :: Array Int Char
lbr = arr // map (\(l,_) -> (l,'(')) pairings
rbr = lbr // map (\(_,r) -> (r,')')) pairings
dotbracketToPairlist :: String -> Secondary
dotbracketToPairlist str = Secondary (length str) (sort $ f 0 [] str) where
f :: Int -> [Int] -> String -> [(Int,Int)]
f _ st [] = []
f k st ('.':xs) = f (k+1) st xs
f k st ('(':xs) = f (k+1) (k:st) xs
f k (s:st) (')':xs) = (s,k) : f (k+1) st xs
f a b c = error $ show (a,b,c)