Search in sources :

Example 6 with Edges

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();
}
Also used : CyEventHelper(org.cytoscape.event.CyEventHelper) HashMap(java.util.HashMap) CyNetwork(org.cytoscape.model.CyNetwork) CyEdge(org.cytoscape.model.CyEdge) HeaderInfo(edu.ucsf.rbvi.clusterMaker2.internal.treeview.HeaderInfo) CyNode(org.cytoscape.model.CyNode) CyNetworkView(org.cytoscape.view.model.CyNetworkView)

Example 7 with Edges

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();
}
Also used : CyEventHelper(org.cytoscape.event.CyEventHelper) HashMap(java.util.HashMap) CyNetwork(org.cytoscape.model.CyNetwork) CyEdge(org.cytoscape.model.CyEdge) HeaderInfo(edu.ucsf.rbvi.clusterMaker2.internal.treeview.HeaderInfo) CyNode(org.cytoscape.model.CyNode) CyNetworkView(org.cytoscape.view.model.CyNetworkView)

Example 8 with Edges

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;
}
Also used : NodeCluster(edu.ucsf.rbvi.clusterMaker2.internal.algorithms.NodeCluster)

Example 9 with Edges

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;
}
Also used : NodeCluster(edu.ucsf.rbvi.clusterMaker2.internal.algorithms.NodeCluster) CyNode(org.cytoscape.model.CyNode) CyEdge(org.cytoscape.model.CyEdge) HashSet(java.util.HashSet)

Example 10 with Edges

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();
}
Also used : ArrayList(java.util.ArrayList) Point(edu.ucsf.rbvi.clusterMaker2.internal.algorithms.attributeClusterers.autosome.cluststruct.Point) List(java.util.List) ArrayList(java.util.ArrayList)

Aggregations

CyNode (org.cytoscape.model.CyNode)10 ArrayList (java.util.ArrayList)9 HashMap (java.util.HashMap)9 CyEdge (org.cytoscape.model.CyEdge)8 NodeCluster (edu.ucsf.rbvi.clusterMaker2.internal.algorithms.NodeCluster)6 Edges (edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.costmatrixcreation.dataTypes.Edges)4 List (java.util.List)4 Vector (java.util.Vector)4 CyNetwork (org.cytoscape.model.CyNetwork)4 CyMatrix (edu.ucsf.rbvi.clusterMaker2.internal.api.CyMatrix)3 Random (java.util.Random)3 Semaphore (java.util.concurrent.Semaphore)3 CyNetworkView (org.cytoscape.view.model.CyNetworkView)3 DoubleMatrix2D (cern.colt.matrix.tdouble.DoubleMatrix2D)2 Point (edu.ucsf.rbvi.clusterMaker2.internal.algorithms.attributeClusterers.autosome.cluststruct.Point)2 ConnectedComponent (edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.datastructure.ConnectedComponent)2 ICCEdges (edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.datastructure.ICCEdges)2 ClusteringManager (edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.taskmanaging.ClusteringManager)2 HeaderInfo (edu.ucsf.rbvi.clusterMaker2.internal.treeview.HeaderInfo)2 Hashtable (java.util.Hashtable)2