use of org.gephi.graph.api.Edge in project gephi by gephi.
the class ConnectedComponents method computeWeeklyConnectedComponents.
public LinkedList<LinkedList<Node>> computeWeeklyConnectedComponents(Graph graph, HashMap<Node, Integer> indicies) {
int N = graph.getNodeCount();
//Keep track of which nodes have been seen
int[] color = new int[N];
Progress.start(progress, N);
int seenCount = 0;
LinkedList<LinkedList<Node>> components = new LinkedList<>();
while (seenCount < N) {
//The search Q
LinkedList<Node> Q = new LinkedList<>();
//The component-list
LinkedList<Node> component = new LinkedList<>();
//Seed the seach Q
NodeIterable iter = graph.getNodes();
for (Node first : iter) {
if (color[indicies.get(first)] == 0) {
Q.add(first);
iter.doBreak();
break;
}
}
//While there are more nodes to search
while (!Q.isEmpty()) {
if (isCanceled) {
return new LinkedList<>();
}
//Get the next Node and add it to the component list
Node u = Q.removeFirst();
component.add(u);
//Iterate over all of u's neighbors
EdgeIterable edgeIter = graph.getEdges(u);
//For each neighbor
for (Edge edge : edgeIter) {
Node reachable = graph.getOpposite(u, edge);
int id = indicies.get(reachable);
//If this neighbor is unvisited
if (color[id] == 0) {
color[id] = 1;
//Add it to the search Q
Q.addLast(reachable);
//Mark it as used
Progress.progress(progress, seenCount);
}
}
color[indicies.get(u)] = 2;
seenCount++;
}
components.add(component);
}
return components;
}
use of org.gephi.graph.api.Edge in project gephi by gephi.
the class EigenvectorCentrality method computeMaxValueAndTempValues.
private double computeMaxValueAndTempValues(Graph graph, HashMap<Integer, Node> indicies, HashMap<Node, Integer> invIndicies, double[] tempValues, double[] centralityValues, boolean directed) {
double max = 0.;
int N = graph.getNodeCount();
for (int i = 0; i < N; i++) {
Node u = indicies.get(i);
EdgeIterable iter;
if (directed) {
iter = ((DirectedGraph) graph).getInEdges(u);
} else {
iter = graph.getEdges(u);
}
for (Edge e : iter) {
Node v = graph.getOpposite(u, e);
Integer id = invIndicies.get(v);
tempValues[i] += centralityValues[id];
}
max = Math.max(max, tempValues[i]);
if (isCanceled) {
return max;
}
}
return max;
}
use of org.gephi.graph.api.Edge in project gephi by gephi.
the class ClusteringCoefficientNGTest method testSpecial2DirectedGraphClusteringCoefficient.
@Test
public void testSpecial2DirectedGraphClusteringCoefficient() {
GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel();
DirectedGraph directedGraph = graphModel.getDirectedGraph();
Node node1 = graphModel.factory().newNode("0");
Node node2 = graphModel.factory().newNode("1");
Node node3 = graphModel.factory().newNode("2");
Node node4 = graphModel.factory().newNode("3");
directedGraph.addNode(node1);
directedGraph.addNode(node2);
directedGraph.addNode(node3);
directedGraph.addNode(node4);
Edge edge21 = graphModel.factory().newEdge(node2, node1);
Edge edge24 = graphModel.factory().newEdge(node2, node4);
Edge edge31 = graphModel.factory().newEdge(node3, node1);
Edge edge32 = graphModel.factory().newEdge(node3, node2);
Edge edge43 = graphModel.factory().newEdge(node4, node3);
directedGraph.addEdge(edge21);
directedGraph.addEdge(edge24);
directedGraph.addEdge(edge31);
directedGraph.addEdge(edge32);
directedGraph.addEdge(edge43);
DirectedGraph graph = graphModel.getDirectedGraph();
ClusteringCoefficient cc = new ClusteringCoefficient();
ArrayWrapper[] network = new ArrayWrapper[4];
int[] triangles = new int[4];
double[] nodeClustering = new double[4];
HashMap<String, Double> results = cc.computeClusteringCoefficient(graph, network, triangles, nodeClustering, true);
double avClusteringCoefficient = results.get("clusteringCoefficient");
double res = 0.4167;
double diff = 0.01;
assertTrue(Math.abs(avClusteringCoefficient - res) < diff);
}
use of org.gephi.graph.api.Edge in project gephi by gephi.
the class GraphDistanceNGTest method testSpecial2UndirectedGraphCloseness.
@Test
public void testSpecial2UndirectedGraphCloseness() {
GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel();
UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph();
Node node1 = graphModel.factory().newNode("0");
Node node2 = graphModel.factory().newNode("1");
Node node3 = graphModel.factory().newNode("2");
Node node4 = graphModel.factory().newNode("3");
Node node5 = graphModel.factory().newNode("4");
Node node6 = graphModel.factory().newNode("5");
Node node7 = graphModel.factory().newNode("6");
Node node8 = graphModel.factory().newNode("7");
undirectedGraph.addNode(node1);
undirectedGraph.addNode(node2);
undirectedGraph.addNode(node3);
undirectedGraph.addNode(node4);
undirectedGraph.addNode(node5);
undirectedGraph.addNode(node6);
undirectedGraph.addNode(node7);
undirectedGraph.addNode(node8);
Edge edge12 = graphModel.factory().newEdge(node1, node2, false);
Edge edge13 = graphModel.factory().newEdge(node1, node3, false);
Edge edge34 = graphModel.factory().newEdge(node3, node4, false);
Edge edge24 = graphModel.factory().newEdge(node2, node4, false);
Edge edge56 = graphModel.factory().newEdge(node5, node6, false);
Edge edge67 = graphModel.factory().newEdge(node6, node7, false);
Edge edge78 = graphModel.factory().newEdge(node7, node8, false);
Edge edge85 = graphModel.factory().newEdge(node8, node5, false);
Edge edge45 = graphModel.factory().newEdge(node4, node5, false);
undirectedGraph.addEdge(edge12);
undirectedGraph.addEdge(edge13);
undirectedGraph.addEdge(edge34);
undirectedGraph.addEdge(edge24);
undirectedGraph.addEdge(edge56);
undirectedGraph.addEdge(edge67);
undirectedGraph.addEdge(edge78);
undirectedGraph.addEdge(edge85);
undirectedGraph.addEdge(edge45);
GraphDistance d = new GraphDistance();
d.initializeStartValues();
UndirectedGraph hierarchicalUndirectedGraph = graphModel.getUndirectedGraph();
HashMap<Node, Integer> indicies = d.createIndiciesMap(hierarchicalUndirectedGraph);
HashMap<String, double[]> metricsMap = (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false);
double[] closeness = metricsMap.get(GraphDistance.CLOSENESS);
int index2 = indicies.get(node2);
double res = 1.0 / 2.2857;
assertEquals(closeness[index2], res, TOLERANCE);
}
use of org.gephi.graph.api.Edge in project gephi by gephi.
the class GraphDistanceNGTest method testSpecial2UndirectedGraphDiameter.
@Test
public void testSpecial2UndirectedGraphDiameter() {
GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel();
UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph();
Node node1 = graphModel.factory().newNode("0");
Node node2 = graphModel.factory().newNode("1");
Node node3 = graphModel.factory().newNode("2");
Node node4 = graphModel.factory().newNode("3");
Node node5 = graphModel.factory().newNode("4");
Node node6 = graphModel.factory().newNode("5");
Node node7 = graphModel.factory().newNode("6");
Node node8 = graphModel.factory().newNode("7");
undirectedGraph.addNode(node1);
undirectedGraph.addNode(node2);
undirectedGraph.addNode(node3);
undirectedGraph.addNode(node4);
undirectedGraph.addNode(node5);
undirectedGraph.addNode(node6);
undirectedGraph.addNode(node7);
undirectedGraph.addNode(node8);
Edge edge12 = graphModel.factory().newEdge(node1, node2, false);
Edge edge23 = graphModel.factory().newEdge(node2, node3, false);
Edge edge34 = graphModel.factory().newEdge(node3, node4, false);
Edge edge45 = graphModel.factory().newEdge(node4, node5, false);
Edge edge56 = graphModel.factory().newEdge(node5, node6, false);
Edge edge67 = graphModel.factory().newEdge(node6, node7, false);
Edge edge78 = graphModel.factory().newEdge(node7, node8, false);
Edge edge81 = graphModel.factory().newEdge(node8, node1, false);
Edge edge14 = graphModel.factory().newEdge(node1, node4, false);
Edge edge85 = graphModel.factory().newEdge(node8, node5, false);
undirectedGraph.addEdge(edge12);
undirectedGraph.addEdge(edge23);
undirectedGraph.addEdge(edge34);
undirectedGraph.addEdge(edge45);
undirectedGraph.addEdge(edge56);
undirectedGraph.addEdge(edge67);
undirectedGraph.addEdge(edge78);
undirectedGraph.addEdge(edge81);
undirectedGraph.addEdge(edge14);
undirectedGraph.addEdge(edge85);
GraphDistance d = new GraphDistance();
d.initializeStartValues();
UndirectedGraph hierarchicalUndirectedGraph = graphModel.getUndirectedGraph();
HashMap<Node, Integer> indicies = d.createIndiciesMap(hierarchicalUndirectedGraph);
d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false);
double diameter = d.getDiameter();
assertEquals(diameter, 4.0, TOLERANCE);
}
Aggregations