Search in sources :

Example 1 with CostMatrix

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);
}
Also used : HashMap(java.util.HashMap) Edges(edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.costmatrixcreation.dataTypes.Edges) Random(java.util.Random) Vector(java.util.Vector) CostMatrix(edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.costmatrixcreation.dataTypes.CostMatrix)

Aggregations

CostMatrix (edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.costmatrixcreation.dataTypes.CostMatrix)1 Edges (edu.ucsf.rbvi.clusterMaker2.internal.algorithms.networkClusterers.TransClust.de.costmatrixcreation.dataTypes.Edges)1 HashMap (java.util.HashMap)1 Random (java.util.Random)1 Vector (java.util.Vector)1