bio-0.5.1: examples/FlowClip.hs
{-| FlowClip reads in an SFF file using coordinates provided on the
command line, and clips each read accordingly. Negative coordinates
indicate counting from the left, so to clip the last 20 bases off
each read (useful for removing adapters), do 'flowclip 0 -20 input.sff'.
-}
module Main where
import Bio.Sequence.SFF
import System.Environment (getArgs)
import Data.Int
main :: IO ()
main = do
[from,to,input] <- getArgs
SFF h rs <- readSFF input
writeSFF (input++".clip") (SFF h $ map (clip (read from) (read to)) rs)
clip :: Int32 -> Int32 -> ReadBlock -> ReadBlock
clip f t rb = let
rh = read_header rb
n = num_bases rh
left = if f < 0 then n+f else f
right = if t < 0 then n+t else t
in trimFromTo left right rb