packages feed

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 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.--}