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;
}
}
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;
}
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;
}
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();
}
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");
}
Aggregations