sequence-formats-1.6.6.1: 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