sequence-formats-1.8.1.0: src/SequenceFormats/Genomic.hs
module SequenceFormats.Genomic where
import SequenceFormats.Bed (BedEntry (..), filterThroughBed)
import SequenceFormats.Eigenstrat (EigenstratSnpEntry (..))
import SequenceFormats.FreqSum (FreqSumEntry (..))
import SequenceFormats.Pileup (PileupRow (..))
import SequenceFormats.Utils (Chrom)
import SequenceFormats.VCF (VCFentry (..))
import Pipes (Producer)
class Genomic a where
genomicPosition :: a -> (Chrom, Int)
genomicChrom :: a -> Chrom
genomicChrom = fst . genomicPosition
genomicBase :: a -> Int
genomicBase = snd . genomicPosition
instance Genomic EigenstratSnpEntry where
genomicPosition (EigenstratSnpEntry c p _ _ _ _) = (c, p)
instance Genomic FreqSumEntry where
genomicPosition (FreqSumEntry c p _ _ _ _ _) = (c, p)
instance Genomic PileupRow where
genomicPosition (PileupRow c p _ _ _) = (c, p)
instance Genomic VCFentry where
genomicPosition (VCFentry c p _ _ _ _ _ _ _ _) = (c, p)
chromFilter :: (Genomic e) => [Chrom] -> e -> Bool
chromFilter exclusionList = (`notElem` exclusionList) . genomicChrom
genomicFilterThroughBed :: (Monad m, Genomic e) => Producer BedEntry m () -> Producer e m () -> Producer e m ()
genomicFilterThroughBed bedProd = filterThroughBed bedProd genomicPosition