packages feed

heatitup-0.5.3.3: src/Load.hs

{- Print
Gregory W. Schwartz

Collections the functions pertaining to the loading of fasta files.
-}

module Load
    ( readFasta
    , toReferenceMap
    ) where

-- Standard
import qualified Data.Map.Strict as Map
import qualified System.IO as IO

-- Cabal
import Pipes
import qualified Pipes.Prelude as P
import qualified Pipes.ByteString as PB
import Data.Fasta.ByteString

-- Local
import Types

-- | Load an input fasta file.
readFasta :: IO.Handle -> IO [FastaSequence]
readFasta hRefIn =
    runEffect $ P.toListM . pipesFasta . PB.fromHandle $ hRefIn

-- | Convert a list of reference sequences to a map of their accessions
toReferenceMap :: Field -> [FastaSequence] -> ReferenceMap
toReferenceMap (Field x) =
    ReferenceMap
        . Map.unions
        . fmap (\fs -> Map.singleton (Accession . getField x '|' $ fs) fs)