The metric backbone has been successfully computed.
"; + } +} diff --git a/modules/DistanceBackboneToolbox/src/main/java/org/robertpalermo/distancebackbonetoolbox/MetricBackboneBuilder.java b/modules/DistanceBackboneToolbox/src/main/java/org/robertpalermo/distancebackbonetoolbox/MetricBackboneBuilder.java new file mode 100644 index 000000000..d6136ed51 --- /dev/null +++ b/modules/DistanceBackboneToolbox/src/main/java/org/robertpalermo/distancebackbonetoolbox/MetricBackboneBuilder.java @@ -0,0 +1,28 @@ +package org.robertpalermo.distancebackbonetoolbox; + +import org.gephi.statistics.spi.Statistics; +import org.gephi.statistics.spi.StatisticsBuilder; +import org.openide.util.lookup.ServiceProvider; + +@ServiceProvider(service = StatisticsBuilder.class) +public class MetricBackboneBuilder implements StatisticsBuilder { + + public MetricBackboneBuilder() { + System.out.println(">>> MetricBackboneBuilder loaded"); + } + + @Override + public Statistics getStatistics() { + return new MetricBackbone(); + } + + @Override + public String getName() { + return "Metric Backbone"; + } + + @Override + public Class extends Statistics> getStatisticsClass() { + return MetricBackbone.class; + } +} diff --git a/modules/DistanceBackboneToolbox/src/main/java/org/robertpalermo/distancebackbonetoolbox/MetricBackboneUI.java b/modules/DistanceBackboneToolbox/src/main/java/org/robertpalermo/distancebackbonetoolbox/MetricBackboneUI.java new file mode 100644 index 000000000..2bd3e731d --- /dev/null +++ b/modules/DistanceBackboneToolbox/src/main/java/org/robertpalermo/distancebackbonetoolbox/MetricBackboneUI.java @@ -0,0 +1,57 @@ +package org.robertpalermo.distancebackbonetoolbox; + +import javax.swing.JPanel; +import org.gephi.statistics.spi.Statistics; +import org.gephi.statistics.spi.StatisticsUI; +import org.openide.util.lookup.ServiceProvider; + +@ServiceProvider(service = StatisticsUI.class) +public class MetricBackboneUI implements StatisticsUI { + + private MetricBackbone metricBackbone; + + @Override + public JPanel getSettingsPanel() { + return null; + } + + @Override + public void setup(Statistics statistics) { + this.metricBackbone = (MetricBackbone) statistics; + } + + @Override + public void unsetup() { + // Nothing to do + } + + @Override + public Class extends Statistics> getStatisticsClass() { + return MetricBackbone.class; + } + + @Override + public String getDisplayName() { + return "Metric Backbone"; + } + + @Override + public String getCategory() { + return StatisticsUI.CATEGORY_NETWORK_OVERVIEW; + } + + @Override + public int getPosition() { + return 1000; + } + + @Override + public String getShortDescription() { + return "Computes and filters the network using the metric backbone method."; + } + + @Override + public String getValue() { + return null; + } +} diff --git a/modules/DistanceBackboneToolbox/src/main/java/org/robertpalermo/distancebackbonetoolbox/Notes b/modules/DistanceBackboneToolbox/src/main/java/org/robertpalermo/distancebackbonetoolbox/Notes new file mode 100644 index 000000000..1b14670d2 --- /dev/null +++ b/modules/DistanceBackboneToolbox/src/main/java/org/robertpalermo/distancebackbonetoolbox/Notes @@ -0,0 +1,109 @@ +/* +package org.robertpalermo.distancebackbone; + +import org.gephi.graph.api.*; +import java.util.*; + +public class DistanceBackboneProcessor { + private final Graph graph; + + public DistanceBackboneProcessor(GraphModel graphModel) { + this.graph = graphModel.getUndirectedGraph(); + } + + + public void compute() { + + // Removes self loops instead of just throwing an error like in the Python code. + ListThe ultrametric backbone has been successfully computed.
"; + } +} \ No newline at end of file diff --git a/modules/DistanceBackboneToolbox/src/main/java/org/robertpalermo/distancebackbonetoolbox/UltrametricBackboneBuilder.java b/modules/DistanceBackboneToolbox/src/main/java/org/robertpalermo/distancebackbonetoolbox/UltrametricBackboneBuilder.java new file mode 100644 index 000000000..dec9e0620 --- /dev/null +++ b/modules/DistanceBackboneToolbox/src/main/java/org/robertpalermo/distancebackbonetoolbox/UltrametricBackboneBuilder.java @@ -0,0 +1,28 @@ +package org.robertpalermo.distancebackbonetoolbox; + +import org.gephi.statistics.spi.Statistics; +import org.gephi.statistics.spi.StatisticsBuilder; +import org.openide.util.lookup.ServiceProvider; + +@ServiceProvider(service = StatisticsBuilder.class) +public class UltrametricBackboneBuilder implements StatisticsBuilder { + + public UltrametricBackboneBuilder() { + System.out.println(">>> UltrametricBackboneBuilder loaded"); + } + + @Override + public Statistics getStatistics() { + return new UltrametricBackbone(); + } + + @Override + public String getName() { + return "Ultrametric Backbone"; + } + + @Override + public Class extends Statistics> getStatisticsClass() { + return UltrametricBackbone.class; + } +} \ No newline at end of file diff --git a/modules/DistanceBackboneToolbox/src/main/java/org/robertpalermo/distancebackbonetoolbox/UltrametricBackboneUI.java b/modules/DistanceBackboneToolbox/src/main/java/org/robertpalermo/distancebackbonetoolbox/UltrametricBackboneUI.java new file mode 100644 index 000000000..3cae57d5f --- /dev/null +++ b/modules/DistanceBackboneToolbox/src/main/java/org/robertpalermo/distancebackbonetoolbox/UltrametricBackboneUI.java @@ -0,0 +1,57 @@ +package org.robertpalermo.distancebackbonetoolbox; + +import javax.swing.JPanel; +import org.gephi.statistics.spi.Statistics; +import org.gephi.statistics.spi.StatisticsUI; +import org.openide.util.lookup.ServiceProvider; + +@ServiceProvider(service = StatisticsUI.class) +public class UltrametricBackboneUI implements StatisticsUI { + + private UltrametricBackbone ultrametricBackbone; + + @Override + public JPanel getSettingsPanel() { + return null; + } + + @Override + public void setup(Statistics statistics) { + this.ultrametricBackbone = (UltrametricBackbone) statistics; + } + + @Override + public void unsetup() { + // Nothing to do + } + + @Override + public Class extends Statistics> getStatisticsClass() { + return UltrametricBackbone.class; + } + + @Override + public String getDisplayName() { + return "Ultrametric Backbone"; + } + + @Override + public String getCategory() { + return StatisticsUI.CATEGORY_NETWORK_OVERVIEW; + } + + @Override + public int getPosition() { + return 1000; + } + + @Override + public String getShortDescription() { + return "Computes and filters the network using the ultrametric backbone method."; + } + + @Override + public String getValue() { + return null; + } +} \ No newline at end of file diff --git a/modules/DistanceBackboneToolbox/src/main/nbm/manifest.mf b/modules/DistanceBackboneToolbox/src/main/nbm/manifest.mf new file mode 100644 index 000000000..c0b8978e6 --- /dev/null +++ b/modules/DistanceBackboneToolbox/src/main/nbm/manifest.mf @@ -0,0 +1,17 @@ +Manifest-Version: 1.0 +OpenIDE-Module-Name: Distance Backbone Toolbox +OpenIDE-Module-Short-Description: Finds the metric and ultrametric backbone of weighted networks. They are very small subgraphs that preserve important structural and dynamical network features. +OpenIDE-Module-Long-Description: +This plugin allows you to compute the metric and ultrametric distance + backbones defined in Simas et al 2021 (doi:10.1093/comnet/cnab021). For larger networks, we recom + mend the Python library distanceclosure (github.com/CASCI-lab/distanceclosure).
+These backbones are parameter-free, algebraically principled network spar + sifications that remove edges violating generalized triangle inequalities, r + endering them redundant for shortest-path computations. The ultrametric back + bone generalizes the minimum spanning tree to directed graphs and is a subgr + aph of the metric backbone for both directed and undirected networks.
+NOTE: The distance measure of a given edge, dij, must be labelled + 'weight'.
+OpenIDE-Module-Display-Category: Metric diff --git a/pom.xml b/pom.xml index afb8f2bf5..1d9795304 100644 --- a/pom.xml +++ b/pom.xml @@ -12,6 +12,7 @@