module Biobase.Infernal.RfamFasta where
import Bio.Core.Sequence
import Data.ByteString.Char8 as BS
import Data.Map as M
import qualified Data.ByteString.Lazy.Char8 as BSL
import Text.Printf
import Biobase.Infernal.Types
data RfamFasta = RfamFasta
{ modelAccession :: !ModelAccession
, modelIdentifier :: !ModelIdentification
, sequenceAccession :: !EmblAccession
, speciesAccession :: !SpeciesAccession
, speciesName :: !SpeciesName
, fastaData :: !StrictSeqData
} deriving (Show)
instance BioSeq RfamFasta where
seqlabel RfamFasta{..} = SeqLabel . BSL.fromChunks $ [BS.concat
[ BS.pack . printf "RF%05d" . unModelAccession $ modelAccession
, ";"
, unModelIdentification modelIdentifier
, ";"
, let (a,b,c) = unEmblAccession sequenceAccession in BS.concat [a, "/", BS.pack $ show b, "-", BS.pack $ show c]
, " "
, BS.pack . show . unSpeciesAccession $ speciesAccession
, ":"
, unSpeciesName speciesName
] ]
seqdata RfamFasta{..} = SeqData . BSL.fromChunks $ [unStrictSeqData fastaData]
seqlength RfamFasta{..} = Offset . fromInteger . toInteger . BS.length . unStrictSeqData $ fastaData
type ModelAC2ID = Map ModelAccession ModelIdentification
type ModelID2AC = Map ModelIdentification ModelAccession
type ACAC2RfamFasta = Map ModelAccession (Map EmblAccession RfamFasta)
type IDAC2RfamFasta = Map ModelIdentification (Map EmblAccession RfamFasta)