heatitup-0.5.3.3: src/Plot.hs
{- Plot
Gregory W. Schwartz
Collections the functions pertaining to plotting the sequence.
-}
{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE NoMonomorphismRestriction #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE PartialTypeSignatures #-}
{-# OPTIONS_GHC -fno-warn-partial-type-signatures #-}
module Plot
( plotITD
) where
-- Standard
import Data.Maybe
import Data.List
-- Cabal
import qualified Data.ByteString.Char8 as C
import Data.Colour.SRGB (sRGB24read)
import Diagrams.Prelude
import Data.Fasta.ByteString
-- Local
import Types
foreground colors p (!xs, !ys)
| p `elem` xs = square 1 # fc (_colorMut colors) # lc (_colorMut colors)
| p `elem` ys = square 1 # fc (_colorSpacer colors) # lc (_colorSpacer colors)
| otherwise = mempty
background colors p (!xs, !ys)
| p `elem` xs = _colorDupL colors
| p `elem` ys = _colorDupR colors
| otherwise = _colorBackground colors
plotNucleotide colors nuc mut backG =
text nuc # fc (_colorForeground colors)
<> mut
<> square 1 # fc backG # lc backG
plotITD
:: _
=> Colors -> FastaSequence -> ITD -> Types.Query -> QDiagram b V2 n Any
plotITD colors fs itd = hcat
. (:) ( text label
<> rect (genericLength label) 1 # lw none
)
. fmap (uncurry plotNuc)
. zip (fmap Position [0..])
. C.unpack
. unQuery
where
label = takeWhile (/= '|') . C.unpack . fastaHeader $ fs
dupLen = fromMaybe 0
. fmap (C.length . unSubstring . _dupSubstring)
. _duplication
$ itd
plotNuc p x =
plotNucleotide
colors
(x : [])
( foreground colors p ( ( fromMaybe []
. fmap _dupMutations
. _duplication
$ itd
)
, ( fromMaybe []
. fmap _spacerOtherLocations
. _spacer
$ itd
)
)
)
( background
colors
p
( fromMaybe ([], [])
. fmap ( (\[x, y] -> (dupPositions x, dupPositions y))
. _dupLocations
)
. _duplication
$ itd
)
)
dupPositions (Position x) = fmap Position [x .. x + dupLen - 1]
gruvColors :: String -> Colour Double
gruvColors "background" = sRGB24read "#282828"
gruvColors "foreground" = sRGB24read "#ebdbb2"
gruvColors "black" = sRGB24read "#282828"
gruvColors "darkgrey" = sRGB24read "#928374"
gruvColors "darkred" = sRGB24read "#cc241d"
gruvColors "red" = sRGB24read "#fb4934"
gruvColors "darkgreen" = sRGB24read "#98971a"
gruvColors "green" = sRGB24read "#b8bb26"
gruvColors "darkyellow" = sRGB24read "#d79921"
gruvColors "yellow" = sRGB24read "#fabd2f"
gruvColors "darkblue" = sRGB24read "#458588"
gruvColors "blue" = sRGB24read "#83a598"
gruvColors "brightblue" = sRGB24read "#2e9ef4"
gruvColors "darkmagenta" = sRGB24read "#b16286"
gruvColors "magenta" = sRGB24read "#d3869b"
gruvColors "darkcyan" = sRGB24read "#689d6a"
gruvColors "cyan" = sRGB24read "#8ec07c"
gruvColors "lightgrey" = sRGB24read "#a89984"
gruvColors "white" = sRGB24read "#ebdbb2"