packages feed

korfu (empty) → 0.1

raw patch · 3 files changed

+76/−0 lines, 3 filesdep +basedep +biodep +bytestringsetup-changed

Dependencies added: base, bio, bytestring, haskell98, simpleargs

Files

+ Setup.hs view
@@ -0,0 +1,5 @@+#!/usr/bin/env runhaskell+ +import Distribution.Simple+main = defaultMain+
+ korfu.cabal view
@@ -0,0 +1,20 @@+Name:           korfu+Version:        0.1+License:        GPL+Author:         Ketil Malde+Maintainer:	Ketil Malde <ketil@malde.org>+Homepage:	http://blog.malde.org/++Synopsis:       The Korfu ORF Utility+Description:	Reads nucleotide sequences in FASTA format, and generates+		predicted protein sequences, based on BLASTX hits.  +		The predictions are constructed by merging information from+		multiple BLAST hits.  Korfu can also also generate all (six-frame)+		translations (with the '--all' option)+Build-Type:	Simple++Executable:     korfu+Build-Depends:  base, bio >= 0.3, haskell98, simpleargs, bytestring+Hs-Source-Dirs: src+Main-Is:        Korfu.hs+Ghc-Options:    -Wall -fglasgow-exts -O2 -funbox-strict-fields
+ src/Korfu.hs view
@@ -0,0 +1,51 @@+-- | New version, using BlastX results to determine ORFs ++module Main where++import System.IO++import Blastx+import Options++import Bio.Sequence+import Bio.Alignment.BlastFlat++import Control.Monad (when)+import Data.Maybe++main :: IO ()+main = do+  opts <- getOptions+  ss <- readFasta $ fasta opts +  if gen_all opts +     then do +       case cds_out opts of+         "" -> error "No output specified"+         "-" -> hWriteFasta stdout $ concatMap all_frames ss+         cf -> writeFasta cf $ concatMap all_frames ss+     else do+       bs <- readXML $ blastx opts+       h <- case redir_out opts of +           "" -> return Nothing+           "-" -> return (Just stdout)+           rf -> openFile rf WriteMode >>= \x -> return (Just x)+       g <- case cds_out opts of +           "" -> return Nothing+           "-" -> return (Just stdout)+           cf -> openFile cf WriteMode >>= \x -> return (Just x)++       let my_process s = do+             when (isJust h) $ process genFasta (fromJust h) s+             when (isJust g) $ process genCDS (fromJust g) s++       mapM_ my_process (frames ss bs)+       when (isJust g) $ hClose (fromJust g)+       when (isJust h) $ hClose (fromJust h)++all_frames :: Sequence -> [Sequence]+all_frames s = +    map (\i -> (Seq (fromStr (toStr (seqlabel s)++"_F+"++show i))  (toIUPAC $ translate s i) Nothing)) [0,1,2]+    ++ map (\i -> (Seq (fromStr (toStr (seqlabel s)++"_F-"++show i)) (toIUPAC $ translate (revcompl s) i) Nothing)) [0,1,2]++process :: (a -> [Sequence]) -> Handle -> a -> IO ()+process fmt h = hWriteFasta h . fmt