Search in sources :

Example 1 with ConnectedComponent

use of edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.datastructure.ConnectedComponent in project clusterMaker2 by RBVI.

the class ConnectedComponent method buildReducedCC.

private boolean buildReducedCC() {
    ConnectedComponent ccCopy = this.copy();
    new GreedyClusterer(ccCopy);
    IPostProcessing pp = PostProcessingFactory.EnumPostProcessingClass.PP_REARRANGE_AND_MERGE_BEST.createPostProcessor();
    pp.initPostProcessing(ccCopy);
    /* run post processing */
    pp.run();
    ConnectedComponent ccCopy2 = this.copy();
    ccCopy2.setClusteringScore(Double.MAX_VALUE);
    if (ccCopy.getClusteringScore() < ccCopy2.getClusteringScore()) {
        boolean isChanged = reduceCC(ccCopy, (float) (Math.rint(ccCopy.getClusteringScore() * 1000) + 1) / 1000);
        if (isChanged) {
            this.reducedConnectedComponent = ccCopy;
            if (ccCopy.buildReducedCC()) {
                this.reducedConnectedComponent = ccCopy.reducedConnectedComponent;
            }
        }
        return isChanged;
    } else {
        boolean isChanged = reduceCC(ccCopy2, (float) (Math.rint(ccCopy2.getClusteringScore() * 1000) + 1) / 1000);
        if (isChanged) {
            this.reducedConnectedComponent = ccCopy2;
            if (ccCopy2.buildReducedCC()) {
                this.reducedConnectedComponent = ccCopy2.reducedConnectedComponent;
            }
        }
        return isChanged;
    }
}
Also used : GreedyClusterer(edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.greedy.GreedyClusterer) IPostProcessing(edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.postprocessing.IPostProcessing)

Example 2 with ConnectedComponent

use of edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.datastructure.ConnectedComponent in project clusterMaker2 by RBVI.

the class ConnectedComponent method reduceCC.

private boolean reduceCC(ConnectedComponent cc, float clusteringScore2) {
    FixedParameterTreeNode fptn = initFirstTreeNode(cc, clusteringScore2);
    if (fptn.size == cc.getNodeNumber())
        return false;
    ICCEdges ccedges = TaskConfig.ccEdgesEnum.createCCEdges(fptn.size);
    for (int i = 0; i < fptn.size; i++) {
        for (int j = i + 1; j < fptn.size; j++) {
            ccedges.setEdgeCost(i, j, fptn.edgeCosts[i][j]);
        }
    }
    String[] objectIds = new String[fptn.size];
    for (int i = 0; i < objectIds.length; i++) {
        String id = "";
        for (int j = 0; j < fptn.clusters[i].length; j++) {
            if (fptn.clusters[i][j]) {
                id += cc.getObjectID(j) + ";";
            }
        }
        objectIds[i] = id;
    }
    cc.setNodeNumber(fptn.size);
    cc.setCCEdges(ccedges);
    cc.setObjectIDs(objectIds);
    cc.setClusters(new int[fptn.size]);
    cc.setReductionCost(fptn.costs);
    return true;
}
Also used : FixedParameterTreeNode(edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.fixedparameterclustering.FixedParameterTreeNode)

Example 3 with ConnectedComponent

use of edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.datastructure.ConnectedComponent in project clusterMaker2 by RBVI.

the class ConnectedComponent method initFirstTreeNode.

public static FixedParameterTreeNode initFirstTreeNode(ConnectedComponent cc, double maxK) {
    FixedParameterTreeNode fptn = new FixedParameterTreeNode(cc.getNodeNumber(), 0, cc.getNodeNumber());
    for (int i = 0; i < fptn.size; i++) {
        fptn.clusters[i][i] = true;
        for (int j = i + 1; j < fptn.size; j++) {
            fptn.edgeCosts[i][j] = fptn.edgeCosts[j][i] = cc.getCCEdges().getEdgeCost(i, j);
        }
    }
    fptn = reductionicf(fptn, maxK, cc);
    return fptn;
}
Also used : FixedParameterTreeNode(edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.fixedparameterclustering.FixedParameterTreeNode)

Example 4 with ConnectedComponent

use of edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.datastructure.ConnectedComponent in project clusterMaker2 by RBVI.

the class PP_DivideAndRecluster method run.

public void run() {
    /* print score before any post processing */
    // double scoreAtStart = this.cc.getClusteringScore();
    // System.out.println("Score before post processing: "+scoreAtStart);
    /* merging step */
    ArrayList<ArrayList<Integer>> clusterObject = PostProcessingUtility.createClusterObject(this.cc, false);
    HashSet<String> alreadyCompared = new HashSet<String>();
    ClusterObjectComparator comparator = new ClusterObjectComparator();
    PostProcessingUtility.mergeCluster(clusterObject, alreadyCompared, this.cc, comparator, true);
    this.bestScore = PostProcessingUtility.updateClusterInfoInCC(clusterObject, this.cc);
    /* collection ConnectedComponent objects */
    ArrayList<ConnectedComponent> cCsOfSubgraphs = new ArrayList<ConnectedComponent>();
    /* start a new clustering procedure for clusters larger than 3 */
    for (int i = 0; i < clusterObject.size(); i++) {
        ArrayList<Integer> cluster = clusterObject.get(i);
        int clusterSize = cluster.size();
        /* if the clusters are to small, leave them in the clusters object and continue */
        if (clusterSize <= 3) {
            // System.out.println("cluster too small: "+cluster.toString());
            continue;
        }
        /* remove cluster from cluster object and decrease i */
        // TODO!!
        clusterObject.remove(i);
        --i;
        ConnectedComponent ccForCluster = this.cc.createConnectedComponentForCluster(i, cluster);
        cCsOfSubgraphs.add(ccForCluster);
        ClusterPostProcessingTask clusterTask = new ClusterPostProcessingTask(ccForCluster, this.params, this.layouterEnumTypes);
        clusterTask.run();
    }
    for (int i = 0; i < cCsOfSubgraphs.size(); i++) {
        ConnectedComponent subCC = cCsOfSubgraphs.get(i);
        addClustersToTotalClusters(subCC, clusterObject);
    }
    /* update clustering information */
    this.bestScore = PostProcessingUtility.updateClusterInfoInCC(clusterObject, this.cc);
    /* do post post processing - merge and rearrange */
    PP_RearrangeAndMergeBest postProcess1 = new PP_RearrangeAndMergeBest();
    postProcess1.initPostProcessing(this.cc);
    postProcess1.run();
}
Also used : ArrayList(java.util.ArrayList) ClusterPostProcessingTask(edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.taskmanaging.ClusterPostProcessingTask) ConnectedComponent(edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.datastructure.ConnectedComponent) HashSet(java.util.HashSet)

Example 5 with ConnectedComponent

use of edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.datastructure.ConnectedComponent in project clusterMaker2 by RBVI.

the class PP_RearrangeAndMergeBest method mergeBest.

protected void mergeBest(ArrayList<ArrayList<Integer>> clusterObject) throws InvalidInputFileException {
    // System.out.println("start merging");
    ICCEdges cc2d = TaskConfig.ccEdgesEnum.createCCEdges(clusterObject.size());
    String[] ids = new String[clusterObject.size()];
    for (int i = 0; i < ids.length; i++) {
        ids[i] = i + "";
        for (int j = i + 1; j < ids.length; j++) {
            cc2d.setEdgeCost(i, j, -(float) calculateCostChange(clusterObject.get(i), clusterObject.get(j)));
        // System.out.println(i + "\t" + j + "\t" + cc2d.getEdgeCost(i, j));
        }
    }
    ConnectedComponent cc2 = new ConnectedComponent(cc2d, ids, null, false);
    ClusteringManager cm = new ClusteringManager(null);
    // cm.runClusteringForOneConnectedComponent(cc2, null, null, null, System.currentTimeMillis());
    new GreedyClusterer(cc2);
    // long dummy = TaskConfig.fpMaxTimeMillis;
    // TaskConfig.fpMaxTimeMillis = Long.MAX_VALUE;
    // FixedParameterClusterer dc = new FixedParameterClusterer(cc2,cc2.getClusteringScore());
    // TaskConfig.fpMaxTimeMillis = dummy;
    // if(cc2.getClusteringScore() != this.bestScore){
    // PP_DivideAndRecluster pp = new PP_DivideAndRecluster();
    // pp.initPostProcessing(cc2);
    // pp.run();
    // }
    ArrayList<ArrayList<Integer>> clusterObjectNew = new ArrayList<ArrayList<Integer>>();
    for (int i = 0; i < cc2.getNumberOfClusters(); i++) {
        ArrayList<Integer> v = new ArrayList<Integer>();
        clusterObjectNew.add(v);
    }
    int[] clustering = cc2.getClusters();
    for (int i = 0; i < clustering.length; i++) {
        clusterObjectNew.get(clustering[i]).addAll(clusterObject.get(i));
    }
    clusterObject = clusterObjectNew;
    this.bestScore = cc2.calculateClusteringScore(clustering);
// System.out.println("end merging");
}
Also used : ClusteringManager(edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.taskmanaging.ClusteringManager) GreedyClusterer(edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.greedy.GreedyClusterer) ConnectedComponent(edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.datastructure.ConnectedComponent) ArrayList(java.util.ArrayList) ICCEdges(edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.datastructure.ICCEdges)

Aggregations

ConnectedComponent (edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.datastructure.ConnectedComponent)11 ArrayList (java.util.ArrayList)9 IParameters (edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.layout.IParameters)7 ICCEdges (edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.datastructure.ICCEdges)4 FixedParameterTreeNode (edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.fixedparameterclustering.FixedParameterTreeNode)4 GreedyClusterer (edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.greedy.GreedyClusterer)4 ILayoutInitialiser (edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.layout.ILayoutInitialiser)4 IPostProcessing (edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.postprocessing.IPostProcessing)4 ClusteringManager (edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.taskmanaging.ClusteringManager)4 Semaphore (java.util.concurrent.Semaphore)4 IGeometricClusterer (edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.geometric_clustering.IGeometricClusterer)3 ILayouter (edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.layout.ILayouter)3 Hashtable (java.util.Hashtable)3 Random (java.util.Random)3 Vector (java.util.Vector)3 FixedParameterClusterer (edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.fixedparameterclustering.FixedParameterClusterer)2 PP_DivideAndRecluster (edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.postprocessing.PP_DivideAndRecluster)2 PostProcessingFactory (edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.postprocessing.PostProcessingFactory)2 ClusterPostProcessingTask (edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.taskmanaging.ClusterPostProcessingTask)2 ClusterFile (edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.layclust.taskmanaging.io.ClusterFile)2