BiobaseXNA 0.7.0.0 → 0.7.0.1
raw patch · 2 files changed
+61/−1 lines, 2 filesdep +cmdargsnew-component:exe:SubOptDistancePVP ok
version bump matches the API change (PVP)
Dependencies added: cmdargs
API changes (from Hackage documentation)
Files
- BiobaseXNA.cabal +9/−1
- SubOptDistance.hs +52/−0
BiobaseXNA.cabal view
@@ -1,5 +1,5 @@ name: BiobaseXNA-version: 0.7.0.0+version: 0.7.0.1 author: Christian Hoener zu Siederdissen maintainer: choener@tbi.univie.ac.at homepage: http://www.tbi.univie.ac.at/~choener/@@ -72,6 +72,14 @@ ghc-options: -O2 -funbox-strict-fields++executable SubOptDistance+ build-depends:+ cmdargs >= 0.10+ main-is:+ SubOptDistance.hs+ ghc-options:+ -O2 source-repository head type: git
+ SubOptDistance.hs view
@@ -0,0 +1,52 @@+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE NoMonomorphismRestriction #-}++module Main where++import System.Console.CmdArgs+import Control.Arrow+import Data.Char (isSpace)+import Data.List+import Data.Ord+import Text.Printf++import Biobase.Secondary.Diagrams+import Biobase.Secondary++++data Options = Options+ { structure :: String+ , aq :: Bool+ , qa :: Bool+ } deriving (Show,Data,Typeable)++options = Options+ { structure = "" &= args+ , aq = True &= help "perform target \\\\ query calculation"+ , qa = True &= help "perform query \\\\ target calculation"+ } &= help helpLines++helpLines = unlines+ [ "This program reads a bunch of RNAsubopt lines on STDIN. Provide an"+ , "additional structure as the argument line. The result will be the"+ , "sub-optimal line with lowest base pair distance to the query line."+ ]++main = do+ Options{..} <- cmdArgs options+ (sqn:xs') <- fmap lines $ getContents+ let xs = map (\(s,e) -> (s,dotBracket ["()"] s,read e)) $ map (break isSpace) xs'+ let q = dotBracket ["()"] structure+ let (d,x,e) = getMinimalDistance aq qa q xs+ let distance :: Double = e - ((/100) . read $ words sqn !! 1)+ printf "%4d %s %8.2f %8.2f\n" d x e distance++getMinimalDistance :: Bool -> Bool -> [PairIdx] -> [(String,[PairIdx],Double)] -> (Int,String,Double)+getMinimalDistance aq qa q xs = g $ minimumBy (comparing f) xs where+ g (a,b,c) = ( fst $ f (a,b,c) , a, c)+ f (_,a,e) = (length $ aqs ++ qas , e) where+ aqs = if aq then a \\ q else []+ qas = if qa then q \\ a else []