packages feed

heatitup-0.5.3.3: src/Types.hs

{- Types
Gregory W. Schwartz

Collections the types used in the program
-}

{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE DeriveGeneric #-}

module Types where

-- Standard
import GHC.Generics
import qualified Data.Map.Strict as Map
import qualified Data.Set as Set

-- Cabal
import Control.Lens
import Data.Csv
import Data.Fasta.ByteString
import qualified Data.ByteString.Char8 as C
import qualified Data.SuffixTree as ST
import Data.Colour.SRGB

-- Local

-- Algebraic
newtype Position         = Position { unPosition :: Int }
                           deriving (Eq, Show, Num)
newtype LongestSubstring = LongestSubstring
                            { unLongestSubstring :: Duplication }
                            deriving (Show)
newtype Query        = Query { unQuery :: C.ByteString } deriving (Show)
newtype Substring    = Substring { unSubstring :: C.ByteString }
                       deriving (Eq, Show)
newtype Length       = Length Int deriving (Show)
newtype Distance     = Distance Int deriving (Show)
newtype Threshold    = Threshold Double deriving (Show)
newtype Percent      = Percent Double deriving (Show)
newtype Consecutive  = Consecutive Int deriving (Show)
newtype Label        = Label C.ByteString
newtype MinSize      = MinSize { unMinSize :: Int } deriving (Show)
newtype Richness     = Richness { unRichness :: Int } deriving (Show)
newtype MinMut       = MinMut { unMinMut :: Int } deriving (Show)
newtype MaxMut       = MaxMut { unMaxMut :: Int } deriving (Eq, Ord)
newtype Window       = Window Int
newtype Signal       = Signal { unSignal :: [Double] } deriving (Eq, Ord, Show)
newtype Time         = Time Double deriving (Show)
newtype Field        = Field Int deriving (Show)
newtype Accession    = Accession C.ByteString deriving (Show, Eq, Ord)
newtype Blacklist = Blacklist
    { unBlacklist :: (Set.Set String)
    } deriving (Show)
newtype ReferenceSeq = ReferenceSeq C.ByteString deriving (Show)
newtype ReferenceMap = ReferenceMap
    { unReferenceMap :: (Map.Map Accession FastaSequence)
    } deriving (Show)

data Classification = Typical | Atypical | Normal deriving (Eq, Ord, Read, Show)

data LeftRightPortion = LeftP | RightP deriving (Show)

data Colors = Colors
    { _colorDupL       :: Colour Double
    , _colorDupR       :: Colour Double
    , _colorMut        :: Colour Double
    , _colorSpacer     :: Colour Double
    , _colorBackground :: Colour Double
    , _colorForeground :: Colour Double
    } deriving (Generic)

data Duplication = Duplication { _dupSubstring        :: Substring
                               , _dupLocations        :: [Position]
                               , _dupMutations        :: [Position]
                               }
                    deriving (Show)
makeLenses ''Duplication

data Spacer = Spacer { _spacerSubstring      :: Substring
                     , _spacerLocation       :: Position
                     , _spacerOtherLocations :: [Position]
                     }
              deriving (Show)
makeLenses ''Spacer

data ITD = ITD { _duplication :: Maybe Duplication
               , _spacer      :: Maybe Spacer
               }
           deriving (Show)
makeLenses ''ITD

data RepeatConfig = RepeatConfig
    { _blacklist    :: !Blacklist
    , _refMap       :: !(Maybe ReferenceMap)
    , _richness     :: !Richness
    , _distance     :: !Distance
    , _alphabet     :: !(ST.Alphabet Char)
    , _minSize      :: !MinSize
    , _minMut       :: !(Maybe MinMut)
    , _refCheckFlag :: !Bool
    } deriving (Show)
makeLenses ''RepeatConfig

data PrintITD = PrintITD { label           :: C.ByteString
                         , fHeader         :: C.ByteString
                         , fSequence       :: C.ByteString
                         , dSubstring      :: C.ByteString
                         , dLocations      :: C.ByteString
                         , dMutations      :: C.ByteString
                         , sSubstring      :: C.ByteString
                         , sLocation       :: C.ByteString
                         , sOtherLocations :: C.ByteString
                         , classification  :: C.ByteString
                         }
                deriving (Show, Generic)

instance FromNamedRecord PrintITD
instance ToNamedRecord PrintITD