Select Git revision
GraphAnalyzer.java
-
Philipp Spohr authored
Returning result ID via CyRest
Philipp Spohr authoredReturning result ID via CyRest
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
GraphAnalyzer.java 3.83 KiB
package de.hhu.ba.yoshikoWrapper.cytoUtil;
import java.util.List;
import org.cytoscape.model.CyColumn;
import org.cytoscape.model.CyEdge;
import org.cytoscape.model.CyNetwork;
import org.cytoscape.model.CyRow;
//import org.slf4j.Logger;
//import de.hhu.ba.yoshikoWrapper.logging.YoshikoLogger;
public class GraphAnalyzer {
//private static Logger logger = YoshikoLogger.getInstance().getLogger();
public static boolean isMultiGraph(CyNetwork net) {
//TODO: Better algorithm?
int n = net.getNodeCount();
List<CyEdge> edges = net.getEdgeList();
//Easiest check: Check if the graph contains more edges than a complete graph
if (edges.size() > (n*(n-1))/2) {
return true;
}
for (int i = 0; i < edges.size()-1; i++) {
for (int j=i+1; j<edges.size();j++) {
if (connectSameNodes(edges.get(i),edges.get(j))){
return true;
}
}
}
return false;
}
/**
* Checks whether two edges connect the same pair of nodes
* This function is symmetric
* @param e1 An arbitrary CyEdge
* @param e2 An arbitrary CyEdge
* @return true if the edges connect the same pair of nodes, false otherwise
*/
private static boolean connectSameNodes(CyEdge e1, CyEdge e2) {
if (//Treating all edges as undirected here
(e1.getSource() == e2.getTarget() && e1.getTarget() == e2.getSource()) ||
(e1.getSource() == e2.getSource() && e1.getTarget() == e2.getTarget())
) {
return true;
}
return false;
}
public static boolean isDirected(CyNetwork net) {
for (CyEdge e: net.getEdgeList()) {
if (e.isDirected()) {
return true;
}
}
return false;
}
/**
* Generates a fitting bitmask by choosing the reduction rules that appear to be the best choice based on current research
* @param containsRealValues
* @param heuristic
* @return The bitmask as a String
*/
public static String suggestReductionRules(boolean containsRealValues, boolean heuristic) {
//TODO: Maybe also choose SNR Factor?
//TODO: More research, identify good rules
boolean useCRule = false,useCCRule= false,useACRule= false,useHERule= false,usePDRRule= false,useSNRule = false;
String ret = "";
//First of all: We don't choose any rules when in heuristic mode
if (!heuristic) {
//We check if the graph contains real weights
if (!containsRealValues) {
useCRule = true;
useCCRule = true;
useACRule = true;
useHERule = true;
}
usePDRRule = true;
useSNRule = true;
}
ret += (useCRule ? "1" : "0");
ret += (useCCRule ? "1" : "0");
ret += (useACRule ? "1" : "0");
ret += (useHERule ? "1" : "0");
ret += (usePDRRule ? "1" : "0");
ret += (useSNRule ? "1" : "0");
//logger.info("Suggesting the following reduction-rules bitmask: "+ret);
System.out.println("Suggesting the following reduction-rules bitmask: "+ret);
return ret;
}
public static boolean containsRealValues(
CyNetwork net,
CyColumn weightColumn,
CyColumn permanentColumn,
CyColumn forbiddenColumn,
double defaultInsertionCost,
double defaultDeletionCost)
{
//Simple checks: Deletion and Insertion Costs
if (defaultInsertionCost % 1 != 0 || defaultDeletionCost % 1 != 0) {
return true;
}
if (net != null){
//Fetch edges
List<CyEdge> edges = net.getEdgeList();
//Loop over edges
for (CyEdge e : edges) {
//Fetch entry and check if it exists
CyRow edgeEntry = net.getRow(e);
//Check if there is a weight column defined, else skip
if (weightColumn != null){
//Check if the column contains an entry for the respective edge
//It is possible, that there are missing entries
if (edgeEntry.get(weightColumn.getName(), weightColumn.getType()) != null){
if (weightColumn.getType() == Double.class) {
double weight = edgeEntry.get(weightColumn.getName(), Double.class);
if (weight%1!=0) {
return true;
}
}
}
}
}
}
return false;
}
}