diff options
author | Justin Bedo <cu@cua0.org> | 2023-08-03 09:03:04 +1000 |
---|---|---|
committer | Justin Bedo <cu@cua0.org> | 2023-08-03 09:03:04 +1000 |
commit | be57c3a0f907661fba2ef559529be743dca28ca1 (patch) | |
tree | c12cdd071e46c9b4150edffbd024c171f94a291c | |
parent | 2a78ced9c247f5a059d8456617391e3e5c846c23 (diff) |
tidy, more fusion, handle different read headers
-rw-r--r-- | Data/FastQ.hs | 22 | ||||
-rw-r--r-- | dedumi.hs | 11 | ||||
-rw-r--r-- | package.yaml | 5 |
3 files changed, 18 insertions, 20 deletions
diff --git a/Data/FastQ.hs b/Data/FastQ.hs index 5f33d27..217d58a 100644 --- a/Data/FastQ.hs +++ b/Data/FastQ.hs @@ -32,23 +32,18 @@ import Streamly.Internal.Data.Unfold.Type (Unfold (..)) import qualified Streamly.Internal.FileSystem.File as File import System.IO import System.IO.Unsafe (unsafeInterleaveIO) -import Prelude hiding (Read, reads) +import Prelude hiding (Read) data Read = Read { _qual :: ByteString, - _nucs :: ByteString + _nucs :: ByteString, + _header :: ByteString } deriving (Eq, Show, Ord) makeLenses ''Read -data ReadPair = ReadPair - { _header :: ByteString, - _reads :: (Read, Read) - } - deriving (Eq, Show, Ord) - -makeLenses ''ReadPair +type ReadPair = (Read, Read) parse :: MonadIO m => FilePath -> FilePath -> Stream m ReadPair parse l r = @@ -66,8 +61,8 @@ parse l r = parseEntry l r = let [hdr, seq, "+", qual] = SB.fromArray l & BC.lines - [_, seq', "+", qual'] = SB.fromArray r & BC.lines - in ReadPair hdr (Read qual seq, Read qual' seq') + [hdr', seq', "+", qual'] = SB.fromArray r & BC.lines + in (Read qual seq hdr, Read qual' seq' hdr') unparse :: FilePath -> FilePath -> Stream IO ReadPair -> IO () unparse l r str = do @@ -83,9 +78,10 @@ unparse l r str = do writeFiles l _ a BSL.Empty = BSL.hPut l a writeFiles _ r BSL.Empty b = BSL.hPut r b + unparse' :: ReadPair -> (ByteString, ByteString) unparse' read = - ( BC.unlines [read ^. header, read ^. reads . _1 . nucs, "+", read ^. reads . _1 . qual], - BC.unlines [read ^. header, read ^. reads . _2 . nucs, "+", read ^. reads . _2 . qual] + ( BC.unlines [read ^. _1 . header, read ^. _1 . nucs, "+", read ^. _1 . qual], + BC.unlines [read ^. _2 . header, read ^. _2 . nucs, "+", read ^. _2 . qual] ) toLazyBS :: Stream IO (ByteString, ByteString) -> IO (BSL.ByteString, BSL.ByteString) @@ -15,7 +15,6 @@ import Data.Typeable import Lens.Micro import qualified Streamly.Data.Stream as S import System.Environment -import Prelude hiding (reads) instance CuckooFilterHash ByteString where cuckooHash (Salt s) = saltedFnv1aByteString s @@ -27,13 +26,13 @@ umiLength = 8 trim x = x - & reads . _1 . nucs %~ B.drop umiLength - & reads . _2 . nucs %~ B.drop umiLength - & reads . _1 . qual %~ B.drop umiLength - & reads . _2 . qual %~ B.drop umiLength + & _1 . nucs %~ B.drop umiLength + & _2 . nucs %~ B.drop umiLength + & _1 . qual %~ B.drop umiLength + & _2 . qual %~ B.drop umiLength insert' f x = - let y = B.take umiLength (x ^. reads . _1 . nucs) <> B.take umiLength (x ^. reads . _2 . nucs) + let y = B.take umiLength (x ^. _1 . nucs) <> B.take umiLength (x ^. _2 . nucs) in member f y >>= \case True -> pure True False -> diff --git a/package.yaml b/package.yaml index a923f2d..4996d83 100644 --- a/package.yaml +++ b/package.yaml @@ -2,6 +2,7 @@ name: dedumi dependencies: - base + - fusion-plugin - zlib - cuckoo - microlens-th @@ -15,4 +16,6 @@ dependencies: executables: dedumi: main: dedumi.hs - ghc-options: [-O2, -fspec-constr-recursive=10, -fmax-worker-args=16] + ghc-options: [-O2, -fspec-constr-recursive=10, -fmax-worker-args=16, -fplugin=Fusion.Plugin] + other-modules: + - Data.FastQ |