use of edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.costmatrixcreation.dataTypes.CostMatrix in project clusterMaker2 by RBVI.
the class InOut method writeCostMatrices.
public static void writeCostMatrices(Edges es, Vector<Vector<Integer>> clusters, HashMap<Integer, String> proteins2integers, HashMap<String, Integer> integers2proteins) throws IOException {
Vector<Vector<Integer>> complete = new Vector<Vector<Integer>>();
int countCostMatrices = 1;
double percentOld = 0;
double numberOfProteins = proteins2integers.size();
double alreadySolvedNumberOfProteins = 0;
for (int i = 0; i < clusters.size(); i++) {
Vector<Integer> cluster = clusters.get(i);
int numberEdges = ((cluster.size() * (cluster.size() - 1)) / 2);
int numberProteins = cluster.size();
alreadySolvedNumberOfProteins += numberProteins;
int countRealEdges = 0;
if (Config.reducedMatrix) {
CostMatrix cm = new CostMatrix(numberProteins);
HashMap<String, Integer> CmIntegers2proteins = new HashMap<String, Integer>(numberProteins);
HashMap<Integer, String> CmProteins2integers = new HashMap<Integer, String>(numberProteins);
for (int j = 0; j < cluster.size(); j++) {
int source = cluster.get(j);
String protein = proteins2integers.get(source);
CmProteins2integers.put(j, protein);
CmIntegers2proteins.put(protein, j);
for (int k = j + 1; k < cluster.size(); k++) {
int target = cluster.get(k);
float value = getEdgeValue(source, target, es);
cm.setEdgevalues(j, k, value);
cm.setEdgevalues(k, j, value);
if (value > Config.threshold)
countRealEdges++;
}
}
cm.setIntegers2proteins(CmIntegers2proteins);
cm.setProteins2integers(CmProteins2integers);
if (countRealEdges == numberEdges) {
complete.add(cluster);
} else {
String costMatrixFile = "";
if (TaskConfig.mode == TaskConfig.HIERARICHAL_MODE) {
costMatrixFile = "costMatrix_size_" + cluster.size() + "_nr_" + countCostMatrices + "_" + new Random().nextDouble() + ".rcm";
} else {
costMatrixFile = "costMatrix_size_" + cluster.size() + "_nr_" + countCostMatrices + ".rcm";
}
CostMatrix mergedCM = cm.mergeNodes();
mergedCM.writeCostMatrix(Config.costMatrixDirectory + "/" + costMatrixFile);
countCostMatrices++;
}
double percent = Math.rint((((double) alreadySolvedNumberOfProteins) / ((double) numberOfProteins)) * 10000) / 100;
if (percent > percentOld + 0.5 || percent == 100) {
percentOld = percent;
if (Config.gui) {
Console.setBarValue((int) Math.rint(percent));
Console.setBarTextPlusRestTime("Writing costmatrices " + percent + "%");
}
// else System.out.print( percent + "%\t");
}
for (int j = 0; j < cluster.size(); j++) {
String id = proteins2integers.get(cluster.get(j));
integers2proteins.remove(id);
}
} else {
int countPosition = 0;
Edges edges = new Edges(numberEdges, numberProteins);
// create edges for connected components
for (int j = 0; j < cluster.size(); j++) {
int source = cluster.get(j);
edges.setStartPosition(j, countPosition);
for (int k = j + 1; k < cluster.size(); k++) {
int target = cluster.get(k);
float value = getEdgeValue(source, target, es);
if (value > Config.threshold) {
countRealEdges++;
}
edges.setSource(countPosition, j);
edges.setTarget(countPosition, k);
edges.setValue(countPosition, value);
countPosition++;
}
edges.setEndPosition(j, countPosition - 1);
}
// divide between complete and incomplete connected components
if (countRealEdges == numberEdges) {
complete.add(cluster);
} else {
writeCostMatrix(edges, cluster, countCostMatrices, proteins2integers, integers2proteins);
countCostMatrices++;
}
double percent = Math.rint((((double) alreadySolvedNumberOfProteins) / ((double) numberOfProteins)) * 10000) / 100;
if (percent > percentOld + 0.5 || percent == 100) {
percentOld = percent;
if (Config.gui) {
Console.setBarValue((int) Math.rint(percent));
Console.setBarTextPlusRestTime("Writing costmatrices " + percent + "%");
}
// else System.out.print( percent + "%\t");
}
// remove proteins from list which are assigned to one cluster
for (int j = 0; j < cluster.size(); j++) {
String id = proteins2integers.get(cluster.get(j));
integers2proteins.remove(id);
}
}
}
for (Iterator<String> iter = integers2proteins.keySet().iterator(); iter.hasNext(); ) {
String element = iter.next();
int id = integers2proteins.get(element);
Vector<Integer> cluster = new Vector<Integer>();
cluster.add(id);
complete.add(cluster);
}
writeCompleteTable(complete, proteins2integers);
}
Aggregations