packages feed

Taxonomy 2.1.0 → 2.2.0

raw patch · 4 files changed

+113/−6 lines, 4 filesdep +graphvizPVP ok

version bump matches the API change (PVP)

Dependencies added: graphviz

API changes (from Hackage documentation)

+ Biobase.Taxonomy.Visualization: drawTaxonomy :: Bool -> Gr SimpleTaxon Double -> String
+ Biobase.Taxonomy.Visualization: drawTaxonomyComparison :: Bool -> (Int, Gr CompareTaxon Double) -> String
+ Biobase.Taxonomy.Visualization: writeDotTree :: String -> Bool -> Gr SimpleTaxon Double -> IO ()
+ Biobase.Taxonomy.Visualization: writeJsonTree :: String -> Gr SimpleTaxon Double -> IO ()
+ Biobase.Taxonomy.Visualization: writeTree :: String -> String -> Bool -> Gr SimpleTaxon Double -> IO ()

Files

Biobase/Taxonomy.hs view
@@ -4,8 +4,10 @@                        -- Datatypes used to represent taxonomy data                        module Biobase.Taxonomy.Types,                        module Biobase.Taxonomy.Import,-                       module Biobase.Taxonomy.Utils+                       module Biobase.Taxonomy.Utils,+                       module Biobase.Taxonomy.Visualization                       ) where import Biobase.Taxonomy.Types import Biobase.Taxonomy.Import import Biobase.Taxonomy.Utils+import Biobase.Taxonomy.Visualization
+ Biobase/Taxonomy/Visualization.hs view
@@ -0,0 +1,101 @@+-- | Functions for  visualization of taxonomy data.+module Biobase.Taxonomy.Visualization (  -- * Datatypes+                       -- Datatypes used to represent taxonomy data+                       module Biobase.Taxonomy.Types,+                       -- * Visualization+                       drawTaxonomyComparison,+                       drawTaxonomy,+                       writeTree,+                       writeDotTree,+                       writeJsonTree+                      ) where+import Prelude+import Biobase.Taxonomy.Types+import Data.Graph.Inductive.Tree+import Data.Graph.Inductive.Basic+import qualified Data.GraphViz as GV+import qualified Data.GraphViz.Printing as GVP+import qualified Data.GraphViz.Attributes.Colors as GVAC+import qualified Data.GraphViz.Attributes.Complete as GVA+import qualified Data.ByteString.Lazy.Char8 as L+import qualified Data.Aeson as AE+import qualified Data.Text.Lazy as T++---------------------------------------+-- Visualisation functions++-- | Draw graph in dot format. Used in Ids2Tree tool.+drawTaxonomy :: Bool -> Gr SimpleTaxon Double -> String+drawTaxonomy withRank inputGraph = do+  let nodeFormating = if withRank then nodeFormatWithRank else nodeFormatWithoutRank+  let params = GV.nonClusteredParams {GV.isDirected       = True+                       , GV.globalAttributes = [GV.GraphAttrs [GVA.Size (GVA.GSize (20 :: Double) (Just (20 :: Double)) False)]]+                       , GV.isDotCluster     = const True+                       --, GV.fmtNode = \ (_,l) -> [GV.textLabel (TL.pack (show (simpleRank l) ++ "\n" ++ T.unpack (simpleScientificName l)))]+                       , GV.fmtNode = nodeFormating+                       , GV.fmtEdge          = const []+                       }+  let dotFormat = GV.graphToDot params inputGraph+  let dottext = GVP.renderDot $ GVP.toDot dotFormat+  T.unpack dottext++nodeFormatWithRank :: (t, SimpleTaxon) -> [GVA.Attribute]+nodeFormatWithRank (_,l) = [GV.textLabel (T.concat [T.pack (show (simpleRank l)), T.pack ("\n") , simpleScientificName l])]++nodeFormatWithoutRank :: (t, SimpleTaxon) -> [GVA.Attribute]+nodeFormatWithoutRank (_,l) = [GV.textLabel (simpleScientificName l)]++-- | Draw tree comparison graph in dot format. Used in Ids2TreeCompare tool.+drawTaxonomyComparison :: Bool -> (Int,Gr CompareTaxon Double) -> String+drawTaxonomyComparison withRank (treeNumber,inputGraph) = do+  let cList = makeColorList treeNumber+  let nodeFormating = if withRank then (compareNodeFormatWithRank cList) else (compareNodeFormatWithoutRank cList)+  let params = GV.nonClusteredParams {GV.isDirected = True+                       , GV.globalAttributes = []+                       , GV.isDotCluster = const True+                       --, GV.fmtNode = \ (_,l) -> [GV.textLabel (TL.pack (show (compareRank l) ++ "\n" ++ B.unpack (compareScientificName l))), GV.style GV.wedged, GVA.Color (selectColors (inTree l) cList)]+                       , GV.fmtNode = nodeFormating+                       , GV.fmtEdge = const []+                       }+  let dotFormat = GV.graphToDot params (grev inputGraph)+  let dottext = GVP.renderDot $ GVP.toDot dotFormat+  T.unpack dottext++compareNodeFormatWithRank :: [GVA.Color] -> (t, CompareTaxon) -> [GVA.Attribute]+compareNodeFormatWithRank cList (_,l) = [GV.textLabel (T.concat [T.pack (show (compareRank l) ++ "\n"),compareScientificName l]), GV.style GV.wedged, GVA.Color (selectColors (inTree l) cList)]++compareNodeFormatWithoutRank :: [GVA.Color] -> (t, CompareTaxon) -> [GVA.Attribute]+compareNodeFormatWithoutRank cList (_,l) = [GV.textLabel (compareScientificName l), GV.style GV.wedged, GVA.Color (selectColors (inTree l) cList)]++-- | Colors from color list are selected according to in which of the compared trees the node is contained.+selectColors :: [Int] -> [GVA.Color] -> GVAC.ColorList+selectColors inTrees currentColorList = GVAC.toColorList (map (\i -> currentColorList !! i) inTrees)++-- | A color list is sampled from the spectrum according to how many trees are compared.+makeColorList :: Int -> [GVA.Color]+makeColorList treeNumber = cList+  where cList = map (\i -> GVAC.HSV ((fromIntegral i/fromIntegral neededColors) * 0.708) 0.5 1.0) [0..neededColors]+        neededColors = treeNumber - 1++-- | Write tree representation either as dot or json to provided file path+writeTree :: String -> String -> Bool -> Gr SimpleTaxon Double -> IO ()+writeTree requestedFormat outputDirectoryPath withRank inputGraph = do+  case requestedFormat of+    "dot" -> writeDotTree outputDirectoryPath withRank inputGraph+    "json"-> writeJsonTree outputDirectoryPath inputGraph+    _ -> writeDotTree outputDirectoryPath withRank inputGraph++-- | Write tree representation as dot to provided file path.+-- Graphviz tools like dot can be applied to the written .dot file to generate e.g. svg-format images.+writeDotTree :: String -> Bool -> Gr SimpleTaxon Double -> IO ()+writeDotTree outputDirectoryPath withRank inputGraph = do+  let diagram = drawTaxonomy withRank (grev inputGraph)+  writeFile (outputDirectoryPath ++ "taxonomy.dot") diagram++-- | Write tree representation as json to provided file path.+-- You can visualize the result for example with 3Djs.+writeJsonTree :: String -> Gr SimpleTaxon Double -> IO ()+writeJsonTree outputDirectoryPath inputGraph = do+  let jsonOutput = AE.encode (grev inputGraph)+  L.writeFile (outputDirectoryPath ++ "taxonomy.json") jsonOutput+
ChangeLog.md view
@@ -1,4 +1,7 @@ -*-change-log-*-+2.2.0 [Florian Eggenhofer](mailto:egg@cs.uni-freiburg.de) 30. May 2020++        * Compatibility with 9.0.1, reintegrated visualisation libraries  2.1.0 [Florian Eggenhofer](mailto:egg@cs.uni-freiburg.de) 17. December 2019 
Taxonomy.cabal view
@@ -1,5 +1,5 @@ name:                Taxonomy-version:             2.1.0+version:             2.2.0 synopsis:            Libary for parsing, processing and vizualization of taxonomy data description:         Haskell cabal Taxonomy libary contains tools, parsers, datastructures and visualisation                      for the NCBI (National Center for Biotechnology Information) Taxonomy datasources.@@ -27,7 +27,7 @@ category:            Bioinformatics build-type:          Simple cabal-version:       >=1.10.0-Tested-With: GHC == 8.4.4, GHC == 8.6.5, GHC == 8.8.1+Tested-With: GHC == 8.4.4, GHC == 8.6.5, GHC == 8.8.1, GHC == 9.0.1 Extra-Source-Files:         README.md ChangeLog.md @@ -38,15 +38,16 @@  source-repository this   type:     git-  location: https://github.com/eggzilla/Taxonomy/tree/v2.1.0-  tag:      v2.1.0+  location: https://github.com/eggzilla/Taxonomy/tree/v2.2.0+  tag:      v2.2.0  Library   ghc-options:         -Wall -fno-warn-unused-do-bind   default-language:    Haskell2010-  build-depends:       base >=4.5 && <5, parsec, either-unwrap, fgl>=5.5.4.0, text, bytestring, aeson, vector+  build-depends:       base >=4.5 && <5, parsec, either-unwrap, fgl>=5.5.4.0, text, bytestring, aeson, vector, graphviz   Hs-source-dirs:      .   Exposed-modules:     Biobase.Taxonomy.Types                        Biobase.Taxonomy.Import                        Biobase.Taxonomy.Utils+                       Biobase.Taxonomy.Visualization                        Biobase.Taxonomy