{- Clumpiness
By Gregory W. Schwartz
Contains an easier to use version of the clumpiness function.
-}
module Clumpiness
( getClumpiness
) where
-- Cabal
import Data.Tree (Tree)
import Math.Clumpiness.Algorithms (generateClumpMap)
import Math.Clumpiness.Types (ClumpList)
-- Local
import TreeTransform
import Types
getClumpiness :: Exclusivity -- ^ How to look at vertices with multiple labels.
-> Bool -- ^ Whether the unique node IDs are predefined (recommended False unless you know what you are doing)
-> Bool -- ^ Whether to look at labels in inner vertices.
-> Tree NodeLabel
-> ClumpList Label
getClumpiness exclusivity predefinedIDs excludeInner tree =
generateClumpMap (const True) propertyMap superTree
where
superTree = convertToSuperTree
. filterExclusiveTree exclusivity
. (\ x -> if excludeInner
then x
else innerToLeaves x
)
. (\ x -> if predefinedIDs
then x
else addUniqueNodeIDs x
)
$ tree
propertyMap = getPropertyMap superTree