biophd 0.0.2 → 0.0.3
raw patch · 3 files changed
+30/−24 lines, 3 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Bio.Sequence.Phd: PHD :: Comment -> DNABlock -> (Maybe [PhdTag]) -> PHD
- Bio.Sequence.Phd: data PHD
- Bio.Sequence.PhdData: PHD :: Comment -> DNABlock -> (Maybe [PhdTag]) -> PHD
- Bio.Sequence.PhdData: data PHD
- Bio.Sequence.PhdData: instance Show PHD
+ Bio.Sequence.Phd: Phd :: Comment -> DNABlock -> (Maybe [PhdTag]) -> Phd
+ Bio.Sequence.Phd: data Phd
+ Bio.Sequence.Phd: readPhdTags :: FilePath -> IO (Maybe [PhdTag])
+ Bio.Sequence.PhdData: Phd :: Comment -> DNABlock -> (Maybe [PhdTag]) -> Phd
+ Bio.Sequence.PhdData: data Phd
+ Bio.Sequence.PhdData: instance Show Phd
- Bio.Sequence.Phd: readPhd :: FilePath -> IO PHD
+ Bio.Sequence.Phd: readPhd :: FilePath -> IO Phd
Files
- biophd.cabal +1/−1
- src/Bio/Sequence/Phd.hs +28/−22
- src/Bio/Sequence/PhdData.hs +1/−1
biophd.cabal view
@@ -1,5 +1,5 @@ Name: biophd-Version: 0.0.2+Version: 0.0.3 Synopsis: Library for reading phd sequence files Description: Library for reading phd sequence files Homepage: https://patch-tag.com/r/dfornika/biophd/home
src/Bio/Sequence/Phd.hs view
@@ -1,4 +1,4 @@-module Bio.Sequence.Phd(PHD(..), readPhd) where+module Bio.Sequence.Phd(Phd(..), readPhd, readPhdTags) where import Bio.Core.Sequence import Bio.Sequence.PhdData@@ -12,21 +12,25 @@ import Data.Ix import Data.Int (Int64) import Data.List+import Data.Maybe import Data.Text (Text) import Data.Binary (encode) import System.IO -- | Parse a .phd file, extracting the contents as a PHD-readPhd :: FilePath -> IO PHD+readPhd :: FilePath -> IO Phd readPhd f = return . mkPhd =<< readFile f +readPhdTags :: FilePath -> IO (Maybe [PhdTag])+readPhdTags f = return . (mkPhdTags . lines) =<< readFile f+ -- | Parse .phd contents from a handle-hReadPhd :: Handle -> IO PHD+hReadPhd :: Handle -> IO Phd hReadPhd h = return . mkPhd =<< hGetContents h -- | The actual phd parser. -mkPhd :: String -> PHD+mkPhd :: String -> Phd mkPhd inp = let (hd:fs) = filter (not . null) . lines $ inp (magic,label) = splitAt 15 hd@@ -42,7 +46,7 @@ dna = concat $ map (!!0) $ sdata qual = map ((\x -> read x :: Int) . (!!1)) $ sdata traceInd = map ((\x -> read x :: Int) . (!!2)) $ sdata- in if (magic == "BEGIN_SEQUENCE ") then PHD (mkComment comment) + in if (magic == "BEGIN_SEQUENCE ") then Phd (mkComment comment) (mkDNABlock label dna qual traceInd) (mkPhdTags tags) @@ -69,8 +73,9 @@ , traceIndices = t } mkPhdTags :: [String] -> Maybe [PhdTag]-mkPhdTags [""] = Nothing-mkPhdTags td = Just (map mkOnePhdTag (groupByTags td))+mkPhdTags phdLines = case groupByTags phdLines of+ [] -> Nothing+ _ -> Just (map (fromJust . mkOnePhdTag) (groupByTags phdLines)) groupByTags :: [String] -> [[String]] groupByTags [] = []@@ -81,18 +86,19 @@ grouping = \x -> drop (fst (tag_spans!!x)) (take (snd (tag_spans!!x) + 1) xs) in map grouping (Data.Ix.range (0, (length tag_spans) -1)) -mkOnePhdTag :: [String] -> PhdTag-mkOnePhdTag td = - if length td == 9 then- PhdTag { tagType = drop 6 (td!!1)- , source = drop 8 (td!!2)- , unpaddedReadPosition = map (\x -> Offset {unOff = read x :: Int64}) (words (drop 19 (td!!3)))- , date = drop 6 (td!!4)- , comment = if td!!6 == "BEGIN_TAG" then ""- else td!!6 }- else- PhdTag { tagType = drop 6 (td!!1)- , source = drop 8 (td!!2) - , unpaddedReadPosition = map (\x -> Offset {unOff = read x :: Int64}) (words (drop 19 (td!!3))) - , date = drop 6 (td!!4) - , comment = ""} +mkOnePhdTag :: [String] -> Maybe PhdTag+mkOnePhdTag td = case length td of + 0 -> Nothing+ 9 -> Just PhdTag { tagType = drop 6 (td!!1)+ , source = drop 8 (td!!2)+ , unpaddedReadPosition = map (\x -> Offset {unOff = read x :: Int64}) (words (drop 19 (td!!3)))+ , date = drop 6 (td!!4)+ , comment = if td!!6 == "BEGIN_TAG" then ""+ else td!!6 + }+ _ -> Just PhdTag { tagType = drop 6 (td!!1)+ , source = drop 8 (td!!2) + , unpaddedReadPosition = map (\x -> Offset {unOff = read x :: Int64}) (words (drop 19 (td!!3))) + , date = drop 6 (td!!4) + , comment = ""+ }
src/Bio/Sequence/PhdData.hs view
@@ -6,7 +6,7 @@ {-- A .phd file consists of a DNA block with base and quality values, followed by one or more (optional) tag blocks. --}-data PHD = PHD Comment DNABlock (Maybe [PhdTag]) deriving (Show)+data Phd = Phd Comment DNABlock (Maybe [PhdTag]) deriving (Show) {-- These types are subject to change if it improves functionality, but for now it's simplest to just call them String, Int etc.--}