src/stats/Connectedness.js
-
- import Stat from "./Stat.js"
- import ConnectedComponentsByCell from "./ConnectedComponentsByCell.js"
-
- /** This Stat computes the 'connectedness' of cells on the grid.
- Keys are the {@link CellId} of all cells on the grid, corresponding values the
- connectedness of the corresponding cell.
-
- @example
- * let CPM = require( "path/to/build" )
- *
- * // Make a CPM, seed a cell, and get the Connectedness
- * let C = new CPM.CPM( [100,100], {
- * T:20,
- * J:[[0,20],[20,10]],
- * V:[0,200],
- * LAMBDA_V:[0,2]
- * } )
- * let gm = new CPM.GridManipulator( C )
- * gm.seedCell(1)
- * for( let t = 0; t < 100; t++ ){ C.timeStep() }
- * C.getStat( CPM.Connectedness )
- */
- class Connectedness extends Stat {
-
- /** This method computes the connectedness of a specific cell.
- @return {number} the connectedness value of this cell, a number between 0 and 1.
- */
- connectednessOfCell( cellid ){
-
- let ccbc = this.M.getStat( ConnectedComponentsByCell )
- const v = ccbc[cellid]
-
- //let s = {}, r = {}, i, j
- let s = 0, r = 0
-
- for( let comp in Object.keys( v ) ){
- let volume = v[comp].length
- s += volume
- }
- for( let comp in Object.keys( v ) ){
- let volume = v[comp].length
- r += (volume/s)*(volume/s)
- }
-
- return r
-
- }
-
- /** The compute method of Connectedness creates an object with
- connectedness of each cell on the grid.
- @return {CellObject} object with for each cell on the grid
- a connectedness value.
- */
- compute(){
- // initialize the object
- let connectedness = { }
- // The this.M.pixels() iterator returns coordinates and cellid for all
- // non-background pixels on the grid. See the appropriate Grid class for
- // its implementation.
- for( let ci of this.M.cellIDs() ){
- connectedness[ci] = this.connectednessOfCell( ci )
- }
- return connectedness
- }
- }
-
- export default Connectedness