flower-0.6: src/FRename.hs
{-|
Rename reads in .SFF files to avoid name clashes.
Apparently, reads with the same name crashes Newbler, and is
in any case a bad idea. This ensures uniqueness by appending a serial number to each read name in a set of files.
-}
module Main where
import Bio.Sequence.SFF
import System.Environment (getArgs)
import qualified Data.ByteString.Char8 as B
main :: IO ()
main = do
fs <- getArgs
if null fs then putStrLn "Usage: frename file1.sff [file2.sff ...]"
else renameSFFs fs
renameSFFs :: [FilePath] -> IO ()
renameSFFs = go 0
where go _ [] = return ()
go current (f:fs) = do
(SFF h rs) <- readSFF f
writeSFF ("r_"++f) (SFF h $ renameFrom current rs)
go (current+num_reads h) fs
renameFrom i rs = zipWith update [i..] rs
where update j r = let h = read_header r
rn = B.concat [read_name h, B.pack "_", B.pack (show j)]
in r { read_header = h { name_length = fromIntegral $ B.length rn, read_name = rn }}