use of edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.costmatrixcreation.dataTypes.Edges in project clusterMaker2 by RBVI.
the class TreeView method update.
public void update(Observable o, Object arg) {
CyNetworkView currentView = manager.getNetworkView();
CyNetwork currentNetwork = manager.getNetwork();
// See if we're supposed to disable our listeners
if ((o == arraySelection) && (arg instanceof Boolean)) {
// System.out.println("Changing disable listeners to: "+arg.toString());
disableListeners = ((Boolean) arg).booleanValue();
}
if (disableListeners)
return;
if (o == geneSelection) {
// System.out.println("Gene selection");
selectedNodes.clear();
int[] selections = geneSelection.getSelectedIndexes();
HeaderInfo geneInfo = dataModel.getGeneHeaderInfo();
String[] names = geneInfo.getNames();
for (int i = 0; i < selections.length; i++) {
String nodeName = geneInfo.getHeader(selections[i])[0];
CyNode node = (CyNode) ModelUtils.getNetworkObjectWithName(currentNetwork, nodeName, CyNode.class);
// Now see if this network has this node
if (node != null && !currentNetwork.containsNode(node)) {
// No, try dropping any suffixes from the node name
String[] tokens = nodeName.split(" ");
node = (CyNode) ModelUtils.getNetworkObjectWithName(currentNetwork, tokens[0], CyNode.class);
}
if (node != null)
selectedNodes.add(node);
}
// System.out.println("Selecting "+selectedNodes.size()+" nodes");
if (dataModel.isAssymetricEdge() || !dataModel.isSymmetrical() || selectedArrays.size() == 0) {
// System.out.println("Adding "+selectedNodes.size()+" gene nodes to current network");
selectNodes(currentNetwork, selectedNodes, true);
if (currentView != null)
currentView.updateView();
}
return;
} else if (o == arraySelection) {
// We only care about array selection for symmetrical models
if (!dataModel.isSymmetrical() && !dataModel.isAssymetricEdge())
return;
selectedArrays.clear();
int[] selections = arraySelection.getSelectedIndexes();
if (selections.length == dataModel.nExpr())
return;
HeaderInfo arrayInfo = dataModel.getArrayHeaderInfo();
String[] names = arrayInfo.getNames();
for (int i = 0; i < selections.length; i++) {
String nodeName = arrayInfo.getHeader(selections[i])[0];
CyNode node = (CyNode) ModelUtils.getNetworkObjectWithName(currentNetwork, nodeName, CyNode.class);
if (node != null && !currentNetwork.containsNode(node)) {
// No, try dropping any suffixes from the node name
String[] tokens = nodeName.split(" ");
node = (CyNode) ModelUtils.getNetworkObjectWithName(currentNetwork, tokens[0], CyNode.class);
}
if (node != null)
selectedArrays.add(node);
}
if (selectedNodes.size() > 0)
selectNodes(currentNetwork, selectedArrays, false);
else
selectNodes(currentNetwork, selectedArrays, true);
}
HashMap<CyEdge, CyEdge> edgesToSelect = new HashMap<CyEdge, CyEdge>();
ignoreSelection = true;
List<CyEdge> edgesToClear = CyTableUtil.getEdgesInState(currentNetwork, CyNetwork.SELECTED, true);
for (CyEdge edge : edgesToClear) {
if (myNetwork.containsEdge(edge))
myNetwork.getRow(edge).set(CyNetwork.SELECTED, Boolean.FALSE);
if (currentNetwork.containsEdge(edge))
currentNetwork.getRow(edge).set(CyNetwork.SELECTED, Boolean.FALSE);
}
for (CyNode node1 : selectedNodes) {
for (CyNode node2 : selectedArrays) {
List<CyEdge> edges = currentNetwork.getConnectingEdgeList(node1, node2, CyEdge.Type.ANY);
if (edges == null) {
continue;
}
for (CyEdge edge : edges) {
if (currentNetwork.containsEdge(edge))
currentNetwork.getRow(edge).set(CyNetwork.SELECTED, Boolean.TRUE);
if (myNetwork.containsEdge(edge))
myNetwork.getRow(edge).set(CyNetwork.SELECTED, Boolean.TRUE);
}
}
}
manager.getService(CyEventHelper.class).flushPayloadEvents();
ignoreSelection = false;
if (currentView != null)
currentView.updateView();
selectedNodes.clear();
selectedArrays.clear();
}
use of edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.costmatrixcreation.dataTypes.Edges in project clusterMaker2 by RBVI.
the class HeatMapView method update.
public void update(Observable o, Object arg) {
CyNetworkView currentView = manager.getNetworkView();
CyNetwork currentNetwork = manager.getNetwork();
// See if we're supposed to disable our listeners
if ((o == arraySelection) && (arg instanceof Boolean)) {
// System.out.println("Changing disable listeners to: "+arg.toString());
disableListeners = ((Boolean) arg).booleanValue();
}
if (disableListeners)
return;
if (o == geneSelection) {
// System.out.println("gene selection");
selectedNodes.clear();
int[] selections = geneSelection.getSelectedIndexes();
HeaderInfo geneInfo = dataModel.getGeneHeaderInfo();
String[] names = geneInfo.getNames();
for (int i = 0; i < selections.length; i++) {
String nodeName = geneInfo.getHeader(selections[i])[0];
CyNode node = (CyNode) ModelUtils.getNetworkObjectWithName(currentNetwork, nodeName, CyNode.class);
// Now see if this network has this node
if (node != null && !currentNetwork.containsNode(node)) {
// No, try dropping any suffixes from the node name
String[] tokens = nodeName.split(" ");
node = (CyNode) ModelUtils.getNetworkObjectWithName(currentNetwork, tokens[0], CyNode.class);
}
if (node != null)
selectedNodes.add(node);
}
// System.out.println("Selecting "+selectedNodes.size()+" nodes");
if (!dataModel.isSymmetrical() || selectedArrays.size() == 0) {
List<CyNode> nodesToClear = CyTableUtil.getNodesInState(currentNetwork, CyNetwork.SELECTED, true);
ignoreSelection = true;
for (CyNode node : nodesToClear) {
myNetwork.getRow(node).set(CyNetwork.SELECTED, Boolean.FALSE);
if (currentNetwork.containsNode(node))
currentNetwork.getRow(node).set(CyNetwork.SELECTED, Boolean.FALSE);
}
for (CyNode node : selectedNodes) {
if (currentNetwork.containsNode(node))
currentNetwork.getRow(node).set(CyNetwork.SELECTED, Boolean.TRUE);
myNetwork.getRow(node).set(CyNetwork.SELECTED, Boolean.TRUE);
}
manager.getService(CyEventHelper.class).flushPayloadEvents();
ignoreSelection = false;
if (currentView != null)
currentView.updateView();
}
return;
} else if (o == arraySelection) {
// We only care about array selection for symmetrical models
if (!dataModel.isSymmetrical())
return;
selectedArrays.clear();
int[] selections = arraySelection.getSelectedIndexes();
if (selections.length == dataModel.nExpr())
return;
HeaderInfo arrayInfo = dataModel.getArrayHeaderInfo();
String[] names = arrayInfo.getNames();
for (int i = 0; i < selections.length; i++) {
String nodeName = arrayInfo.getHeader(selections[i])[0];
CyNode node = (CyNode) ModelUtils.getNetworkObjectWithName(currentNetwork, nodeName, CyNode.class);
if (node != null && !currentNetwork.containsNode(node)) {
// No, try dropping any suffixes from the node name
String[] tokens = nodeName.split(" ");
node = (CyNode) ModelUtils.getNetworkObjectWithName(currentNetwork, tokens[0], CyNode.class);
}
if (node != null)
selectedArrays.add(node);
}
}
HashMap<CyEdge, CyEdge> edgesToSelect = new HashMap<CyEdge, CyEdge>();
ignoreSelection = true;
List<CyEdge> edgesToClear = CyTableUtil.getEdgesInState(currentNetwork, CyNetwork.SELECTED, true);
for (CyEdge edge : edgesToClear) {
myNetwork.getRow(edge).set(CyNetwork.SELECTED, Boolean.FALSE);
if (currentNetwork.containsEdge(edge))
currentNetwork.getRow(edge).set(CyNetwork.SELECTED, Boolean.FALSE);
}
for (CyNode node1 : selectedNodes) {
for (CyNode node2 : selectedArrays) {
List<CyEdge> edges = currentNetwork.getConnectingEdgeList(node1, node2, CyEdge.Type.ANY);
if (edges == null) {
continue;
}
for (CyEdge edge : edges) {
myNetwork.getRow(edge).set(CyNetwork.SELECTED, Boolean.TRUE);
if (currentNetwork.containsEdge(edge))
currentNetwork.getRow(edge).set(CyNetwork.SELECTED, Boolean.TRUE);
}
}
}
manager.getService(CyEventHelper.class).flushPayloadEvents();
ignoreSelection = false;
if (currentView != null)
currentView.updateView();
selectedNodes.clear();
selectedArrays.clear();
}
use of edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.costmatrixcreation.dataTypes.Edges in project clusterMaker2 by RBVI.
the class ClusterUtils method setEdgeScoresInCluster.
public static List<NodeCluster> setEdgeScoresInCluster(CyNetwork network, List<NodeCluster> clusters, List<String> edgeAttributes, String clusterColumnName, boolean multiplicative) {
List<CyEdge> edges = network.getEdgeList();
CyTable nodeTable = network.getDefaultNodeTable();
CyTable edgeTable = network.getDefaultEdgeTable();
for (String edgeAttr : edgeAttributes) {
for (CyEdge edge : edges) {
CyRow source = nodeTable.getRow(edge.getSource().getSUID());
CyRow target = nodeTable.getRow(edge.getTarget().getSUID());
CyRow edgeRow = edgeTable.getRow(edge.getSUID());
int sourceClusterNumber = source.get(clusterColumnName, Integer.class, -1);
int targetClusterNumber = target.get(clusterColumnName, Integer.class, -1);
int sourceHighestClusterNumber = -1;
int targetHighestClusterNumber = -1;
for (NodeCluster cluster : clusters) {
int clusterNumber = cluster.getClusterNumber();
if (clusterNumber == sourceClusterNumber && (clusterNumber < sourceHighestClusterNumber || sourceHighestClusterNumber == -1)) {
if (multiplicative) {
setRankScoreMultiplicative(edgeAttr, edgeRow, cluster);
} else {
setRankScore(edgeAttr, edgeRow, cluster);
}
sourceHighestClusterNumber = clusterNumber;
} else if (clusterNumber == targetClusterNumber && (clusterNumber < targetHighestClusterNumber || targetHighestClusterNumber == -1)) {
if (multiplicative) {
setRankScoreMultiplicative(edgeAttr, edgeRow, cluster);
} else {
setRankScore(edgeAttr, edgeRow, cluster);
}
targetHighestClusterNumber = clusterNumber;
}
}
}
}
return clusters;
}
use of edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.costmatrixcreation.dataTypes.Edges in project clusterMaker2 by RBVI.
the class CuttingEdgeFilter method doFilter.
public NodeCluster doFilter(List<CyNode> nodeList, Map<NodeCluster, List<CyNode>> addedNodeMap) {
// Get the total number of edges for all nodes
Set<CyEdge> allEdges = new HashSet<CyEdge>();
for (CyNode node : nodeList) {
List<CyEdge> edgeList = network.getAdjacentEdgeList(node, CyEdge.Type.ANY);
if (edgeList == null && edgeList.size() == 0)
continue;
allEdges.addAll(edgeList);
}
int totalEdges = allEdges.size();
if (totalEdges == 0)
return null;
// Get the number of edges within the cluster
List<CyEdge> edgeList = ModelUtils.getConnectingEdges(network, nodeList);
if (edgeList == null)
return null;
int innerEdges = edgeList.size();
double ep = (double) innerEdges / (double) totalEdges;
System.out.println("innerEdges = " + innerEdges + ", totalEdges = " + totalEdges);
System.out.println("Ratio = " + ep + ", edgeProportion = " + context.edgeProportion);
if (ep >= context.edgeProportion)
return new NodeCluster(nodeList);
else
return null;
}
use of edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.costmatrixcreation.dataTypes.Edges in project clusterMaker2 by RBVI.
the class getClusters method findClusters.
public void findClusters(boolean general) {
// used edges for DFS
boolean[] used = new boolean[nodes.length];
for (int i = 0; i < used.length; i++) used[i] = false;
List<List<double[]>> clust = new ArrayList<List<double[]>>();
List<List<String>> clustLabels = new ArrayList<List<String>>();
List<List<Integer>> clustIDs = new ArrayList<List<Integer>>();
List<List<Integer>> allNodes = new ArrayList<List<Integer>>();
for (int j = 0; j < edges.length; j++) {
if (edges[j][2] > maxDist)
maxDist = edges[j][2];
}
int max = 0;
// iterate across all rescaled SOM nodes
for (int i = 0; i < nodes.length; i++) {
// if node i has not been accessed, find all nodes connected to node i
if (!used[i])
connected(i);
else
// if node i has already been added to cluster, continue
continue;
// populate cluster arrays
List<double[]> allIndices = new ArrayList<double[]>();
List<String> allLabels = new ArrayList<String>();
List<Integer> allIDs = new ArrayList<Integer>();
List<Integer> indices = new ArrayList<Integer>();
for (int index : currClust) {
if (!general) {
// if TR clusters
double[] info = new double[nodes[index].getPoint().length];
for (int k = 0; k < info.length; k++) info[k] = nodes[index].getPoint()[k];
allIndices.add(info);
} else {
// If general numerical clusters
for (int h = 0; h < ids[index].size(); h++) {
double[] info = new double[nodes[index].getPoint().length + 1];
/* String lab = new StringTokenizer(labels[index].get(h).toString(),",").nextToken();
try{
int ID = Integer.parseInt(lab);
info[0] = ID;
}catch(NumberFormatException err) {info[0]=1;} */
// indices.add(index);
info[0] = index;
for (int k = 1; k < info.length; k++) info[k] = nodes[index].getPoint()[k - 1];
int id = ids[index].get(h).intValue();
String[] tokens = s.input[id].getDesc().split(",");
if (s.benchmark) {
int label = Integer.valueOf(tokens[0]);
// if clusters are known (benchmarking), how many are there?
if (label > max)
max = (int) label;
}
allIndices.add(info);
// allLabels.add(labels[index].get(h).toString());
allIDs.add(ids[index].get(h));
}
}
// node 'index' is now used
used[index] = true;
}
allNodes.add(indices);
// add node indices to current cluster
clust.add(allIndices);
// add labels to current cluster
clustLabels.add(allLabels);
clustIDs.add(allIDs);
currClust.clear();
}
clusters = new cluster[clust.size()];
for (int i = 0; i < clusters.length; i++) {
clusters[i] = new cluster(clust.get(i), clustLabels.get(i), clustIDs.get(i), allNodes.get(i));
if (s.benchmark) {
// if benchmarking, store original clusters
origClusters = (List<Integer>[]) Array.newInstance(List.class, max);
if (general) {
for (int j = 0; j < clusters[i].labels.size(); j++) {
String[] tokens = clusters[i].labels.get(j).toString().split(",");
int label = Integer.valueOf(tokens[0]);
if (origClusters[label - 1] == null)
origClusters[label - 1] = new ArrayList<Integer>();
origClusters[label - 1].add(label);
}
}
}
}
currClust.clear();
}
Aggregations