Author: kono
Date: 2010-01-12 11:09:07 -0800 (Tue, 12 Jan 2010)
New Revision: 18874

Modified:
   
csplugins/trunk/ucsd/ruschein/DenovoPGNetworkAlignment/src/networks/denovoPGNetworkAlignment/HCSearch2.java
   
csplugins/trunk/ucsd/ruschein/DenovoPGNetworkAlignment/src/org/cytoscape/DenovoPGNetworkAlignmentPlugin/SearchTask.java
Log:
Report message will be displayed after search.

Modified: 
csplugins/trunk/ucsd/ruschein/DenovoPGNetworkAlignment/src/networks/denovoPGNetworkAlignment/HCSearch2.java
===================================================================
--- 
csplugins/trunk/ucsd/ruschein/DenovoPGNetworkAlignment/src/networks/denovoPGNetworkAlignment/HCSearch2.java
 2010-01-12 18:47:44 UTC (rev 18873)
+++ 
csplugins/trunk/ucsd/ruschein/DenovoPGNetworkAlignment/src/networks/denovoPGNetworkAlignment/HCSearch2.java
 2010-01-12 19:09:07 UTC (rev 18874)
@@ -1,387 +1,469 @@
 package networks.denovoPGNetworkAlignment;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
 
-import networks.*;
-import networks.linkedNetworks.*;
+import networks.SFEdge;
+import networks.SFNetwork;
+import networks.linkedNetworks.TypedLinkEdge;
+import networks.linkedNetworks.TypedLinkNetwork;
+import networks.linkedNetworks.TypedLinkNode;
+import networks.linkedNetworks.TypedLinkNodeModule;
 import data.DoubleVector;
-import java.util.concurrent.*;
 
 public class HCSearch2 {
 
-       public static 
TypedLinkNetwork<TypedLinkNodeModule<String,BFEdge>,BFEdge> search(SFNetwork 
pnet, SFNetwork gnet, HCScoringFunction sfunc)
-       {
-               //The scoring function needs to load several lookup matricies 
for the network data.
+       public static TypedLinkNetwork<TypedLinkNodeModule<String, BFEdge>, 
BFEdge> search(
+                       SFNetwork pnet, SFNetwork gnet, HCScoringFunction 
sfunc) {
+               // The scoring function needs to load several lookup matricies 
for the
+               // network data.
                System.gc();
                utilities.MemoryReporter.reportMemoryUsage();
-               
-               //Need to construct the ONetwork<HyperModule<String>,BFEdge> 
object.
+
+               // Need to construct the ONetwork<HyperModule<String>,BFEdge> 
object.
                System.out.println("1. Building merged network.");
-               
-               TypedLinkNetwork<TypedLinkNodeModule<String,BFEdge>,BFEdge> 
results = constructBaseNetwork(pnet,gnet);
 
+               TypedLinkNetwork<TypedLinkNodeModule<String, BFEdge>, BFEdge> 
results = constructBaseNetwork(
+                               pnet, gnet);
+
                System.gc();
                utilities.MemoryReporter.reportMemoryUsage();
-               
-               //Get the first-pass scores
+
+               // Get the first-pass scores
                System.out.println("2. Obtaining primary scores.");
-               computePrimaryScores(results,sfunc);
-                               
+               computePrimaryScores(results, sfunc);
+
                System.gc();
                utilities.MemoryReporter.reportMemoryUsage();
-               
-               //Merge best tree-pairs together
+
+               // Merge best tree-pairs together
                System.out.println("3. Forming clusters...");
-               
-               //utilities.MemoryReporter.reportMemoryUsage();
-               
+
+               // utilities.MemoryReporter.reportMemoryUsage();
+
                DoubleVector global_scores = new DoubleVector(3000);
                global_scores.add(0);
                float globalscore = 0;
-               float max = 1; //Tracks the best improvement in globalscore.
-               
+               float max = 1; // Tracks the best improvement in globalscore.
+
                System.gc();
-               
+
                int iter = 0;
-               while (results.numEdges()>0 && max > 0)
-               {       
-                       if (iter%1000==0)
-                       {
+               while (results.numEdges() > 0 && max > 0) {
+                       if (iter % 1000 == 0) {
                                System.gc();
                                utilities.MemoryReporter.reportMemoryUsage();
                        }
-                                                                       
-                       //Identify the best physical edge to merge
-                       
Iterator<TypedLinkEdge<TypedLinkNodeModule<String,BFEdge>,BFEdge>> edgei = 
results.edgeIterator().iterator();
-                       
TypedLinkEdge<TypedLinkNodeModule<String,BFEdge>,BFEdge> best = edgei.next();
-                       
-                       while(edgei.hasNext() && 
!best.value().isType(BFEdge.InteractionType.Physical))
+
+                       // Identify the best physical edge to merge
+                       Iterator<TypedLinkEdge<TypedLinkNodeModule<String, 
BFEdge>, BFEdge>> edgei = results
+                                       .edgeIterator().iterator();
+                       TypedLinkEdge<TypedLinkNodeModule<String, BFEdge>, 
BFEdge> best = edgei
+                                       .next();
+
+                       while (edgei.hasNext()
+                                       && 
!best.value().isType(BFEdge.InteractionType.Physical))
                                best = edgei.next();
-                                       
-                       if 
(!best.value().isType(BFEdge.InteractionType.Physical)) break;
-                       
-                       BFEdge first = best.value(); 
+
+                       if 
(!best.value().isType(BFEdge.InteractionType.Physical))
+                               break;
+
+                       BFEdge first = best.value();
                        max = first.global();
-                       
-                       
TypedLinkEdge<TypedLinkNodeModule<String,BFEdge>,BFEdge> newEdge = best;
-                       while (edgei.hasNext())
-                       {
+
+                       TypedLinkEdge<TypedLinkNodeModule<String, BFEdge>, 
BFEdge> newEdge = best;
+                       while (edgei.hasNext()) {
                                newEdge = edgei.next();
                                BFEdge nextedge = newEdge.value();
-                               
-                               if 
(nextedge.isType(BFEdge.InteractionType.Physical))
-                               {
+
+                               if 
(nextedge.isType(BFEdge.InteractionType.Physical)) {
                                        float newscore = nextedge.global();
-                                       if (newscore>max)
-                                       {
+                                       if (newscore > max) {
                                                best = newEdge;
                                                max = nextedge.global();
                                        }
                                }
                        }
-                       
-                       if (max <= 0) break;
-                       
-                       //System.out.println(best+", 
c:"+best.value().complexMerge()+" + l:"+best.value().linkMerge()+" = 
"+best.value().global());
-                       
-                       
-                       //Merge the best pair
-                       
TypedLinkNode<TypedLinkNodeModule<String,BFEdge>,BFEdge> mergedNode = 
mergeNodes(results,best.source(), best.target(),sfunc);
-                       
-                       //Check to see if the search should continue
-                       if (max >0)
-                       {
-                               //Recalculate linkMerge scores
-                               
-                               ExecutorService exec = 
Executors.newCachedThreadPool(new 
utilities.ThreadPriorityFactory(Thread.MIN_PRIORITY));
-                               
-                               //for 
(TypedLinkEdge<TypedLinkNodeModule<String,BFEdge>,BFEdge> e : 
mergedNode.edgeIterator())
-                               //      if 
(e.value().isType(BFEdge.InteractionType.Physical)) assignMergeLinkScore(e);
-                               for 
(TypedLinkEdge<TypedLinkNodeModule<String,BFEdge>,BFEdge> e : 
mergedNode.edgeIterator())
-                                       if 
(e.value().isType(BFEdge.InteractionType.Physical)) exec.execute(new 
MergeLinkRunner(e));
-                               
-                               try
-                               {
+
+                       if (max <= 0)
+                               break;
+
+                       // System.out.println(best+", 
c:"+best.value().complexMerge()+" + l:"+best.value().linkMerge()+" = 
"+best.value().global());
+
+                       // Merge the best pair
+                       TypedLinkNode<TypedLinkNodeModule<String, BFEdge>, 
BFEdge> mergedNode = mergeNodes(
+                                       results, best.source(), best.target(), 
sfunc);
+
+                       // Check to see if the search should continue
+                       if (max > 0) {
+                               // Recalculate linkMerge scores
+
+                               ExecutorService exec = Executors
+                                               .newCachedThreadPool(new 
utilities.ThreadPriorityFactory(
+                                                               
Thread.MIN_PRIORITY));
+
+                               // for 
(TypedLinkEdge<TypedLinkNodeModule<String,BFEdge>,BFEdge>
+                               // e : mergedNode.edgeIterator())
+                               // if 
(e.value().isType(BFEdge.InteractionType.Physical))
+                               // assignMergeLinkScore(e);
+                               for (TypedLinkEdge<TypedLinkNodeModule<String, 
BFEdge>, BFEdge> e : mergedNode
+                                               .edgeIterator())
+                                       if 
(e.value().isType(BFEdge.InteractionType.Physical))
+                                               exec.execute(new 
MergeLinkRunner(e));
+
+                               try {
                                        exec.shutdown();
                                        exec.awaitTermination(30, 
TimeUnit.DAYS);
-                                       if (!exec.isTerminated()) 
System.out.println("Did not fully terminate!");
-                               }catch (InterruptedException e) 
{System.out.println(e);exec.shutdownNow();}
-                               
-                               //Re-calculate global scores for all newly 
created edges
-                               for 
(TypedLinkEdge<TypedLinkNodeModule<String,BFEdge>,BFEdge> e : 
mergedNode.edgeIterator())
-                                       computeGlobalScore(results,e,sfunc);
-                               
+                                       if (!exec.isTerminated())
+                                               System.out.println("Did not 
fully terminate!");
+                               } catch (InterruptedException e) {
+                                       System.out.println(e);
+                                       exec.shutdownNow();
+                               }
+
+                               // Re-calculate global scores for all newly 
created edges
+                               for (TypedLinkEdge<TypedLinkNodeModule<String, 
BFEdge>, BFEdge> e : mergedNode
+                                               .edgeIterator())
+                                       computeGlobalScore(results, e, sfunc);
+
                                globalscore += max;
                                global_scores.add(globalscore);
-                               
+
                                DoubleVector csizes = new 
DoubleVector(results.numNodes());
-                               
-                               Set<TypedLinkNodeModule<String,BFEdge>> allc = 
results.getNodeValues();
-                               
-                               for (TypedLinkNodeModule<String,BFEdge> m : 
allc)
+
+                               Set<TypedLinkNodeModule<String, BFEdge>> allc = 
results
+                                               .getNodeValues();
+
+                               for (TypedLinkNodeModule<String, BFEdge> m : 
allc)
                                        csizes.add(m.size());
-                               
-                               System.out.println("Number of clusters: " + 
results.numNodes() + ",  Largest cluster size: "+csizes.max(false));
+
+                               System.out.println("Number of clusters: " + 
results.numNodes()
+                                               + ",  Largest cluster size: " + 
csizes.max(false));
                        }
-                       
+
                        iter++;
                }
-               
-               //global_scores.plot();
-               System.out.println("Best score: "+global_scores.max(true));
-               System.out.println("Best score index: "+global_scores.maxI());
-                               
+
+               // global_scores.plot();
+               System.out.println("Best score: " + global_scores.max(true));
+               System.out.println("Best score index: " + global_scores.maxI());
+
                return results;
        }
-       
+
        /**
-        * Constructs the base network for performing the network search.
-        * This network contains both physical and genetic interactions.
-        * @param pnet  Physical network
-        * @param gnet  Genetic network
+        * Constructs the base network for performing the network search. This
+        * network contains both physical and genetic interactions.
+        * 
+        * @param pnet
+        *            Physical network
+        * @param gnet
+        *            Genetic network
         */
-       public static 
TypedLinkNetwork<TypedLinkNodeModule<String,BFEdge>,BFEdge> 
constructBaseNetwork(SFNetwork pnet, SFNetwork gnet)
-       {
-               //Set each node in the physical network as a module
-               TypedLinkNetwork<TypedLinkNodeModule<String,BFEdge>,BFEdge> 
results = new 
TypedLinkNetwork<TypedLinkNodeModule<String,BFEdge>,BFEdge>(false,false);
-               
+       public static TypedLinkNetwork<TypedLinkNodeModule<String, BFEdge>, 
BFEdge> constructBaseNetwork(
+                       SFNetwork pnet, SFNetwork gnet) {
+               // Set each node in the physical network as a module
+               TypedLinkNetwork<TypedLinkNodeModule<String, BFEdge>, BFEdge> 
results = new TypedLinkNetwork<TypedLinkNodeModule<String, BFEdge>, BFEdge>(
+                               false, false);
+
                for (String pn : pnet.nodeIterator())
-                       results.addNode(new 
TypedLinkNodeModule<String,BFEdge>(new TypedLinkNode<String,BFEdge>(pn)));
-                               
-               //Add each physical edge
+                       results.addNode(new TypedLinkNodeModule<String, BFEdge>(
+                                       new TypedLinkNode<String, BFEdge>(pn)));
+
+               // Add each physical edge
                System.out.println("->Setting physical interactions.");
-               
-               for (SFEdge pe : pnet.edgeIterator())
-               {
+
+               for (SFEdge pe : pnet.edgeIterator()) {
                        BFEdge anedge = new 
BFEdge(BFEdge.InteractionType.Physical);
-                       results.addEdgeWNodeUpdate(new 
TypedLinkNodeModule<String,BFEdge>(pe.getI1()), new 
TypedLinkNodeModule<String,BFEdge>(pe.getI2()), anedge);
+                       results.addEdgeWNodeUpdate(new 
TypedLinkNodeModule<String, BFEdge>(
+                                       pe.getI1()), new 
TypedLinkNodeModule<String, BFEdge>(pe
+                                       .getI2()), anedge);
                }
-               
-               //Add each genetic edge
-               //CHANGE MAP TO WORK FOR ALL GENES, NOT JUST GENETIC OR PHYSICAL
+
+               // Add each genetic edge
+               // CHANGE MAP TO WORK FOR ALL GENES, NOT JUST GENETIC OR 
PHYSICAL
                /*
-               System.out.println("->->Building translation map.");
-               Map<String,TypedLinkNodeModule<String,BFEdge>> gene_rnode = new 
HashMap<String,TypedLinkNodeModule<String,BFEdge>>(gnet.numNodes());
-                               
-               for (TypedLinkNode<String,Float> gn : gnet.nodes())
-                       gene_rnode.put(gn.value(), results.getNode(new 
TypedLinkNodeModule<String,BFEdge>(gn.value())).value());
-               */
-               
+                * System.out.println("->->Building translation map.");
+                * Map<String,TypedLinkNodeModule<String,BFEdge>> gene_rnode = 
new
+                * 
HashMap<String,TypedLinkNodeModule<String,BFEdge>>(gnet.numNodes());
+                * 
+                * for (TypedLinkNode<String,Float> gn : gnet.nodes())
+                * gene_rnode.put(gn.value(), results.getNode(new
+                * TypedLinkNodeModule<String,BFEdge>(gn.value())).value());
+                */
+
                System.out.println("->Adding genetic interactions.");
                int counter = 0;
-               
-               for (SFEdge ge : gnet.edgeIterator())
-               {
+
+               for (SFEdge ge : gnet.edgeIterator()) {
                        counter++;
-                       if (counter%100000==0) 
System.out.println("->->"+counter+"/"+gnet.numEdges());
-                                               
-                       
TypedLinkNode<TypedLinkNodeModule<String,BFEdge>,BFEdge> source = 
results.getNode(new TypedLinkNodeModule<String,BFEdge>(ge.getI1()));
-                       
TypedLinkNode<TypedLinkNodeModule<String,BFEdge>,BFEdge> target = 
results.getNode(new TypedLinkNodeModule<String,BFEdge>(ge.getI2()));
-                       
-                       if (source!=null && target!=null)
-                       {
-                               
TypedLinkEdge<TypedLinkNodeModule<String,BFEdge>,BFEdge> existingEdge = 
results.getEdge(source.value(), target.value());
-                               
-                               if (existingEdge!=null) 
existingEdge.value().addType(BFEdge.InteractionType.Genetic);
-                               else 
-                               {
+                       if (counter % 100000 == 0)
+                               System.out.println("->->" + counter + "/" + 
gnet.numEdges());
+
+                       TypedLinkNode<TypedLinkNodeModule<String, BFEdge>, 
BFEdge> source = results
+                                       .getNode(new 
TypedLinkNodeModule<String, BFEdge>(ge.getI1()));
+                       TypedLinkNode<TypedLinkNodeModule<String, BFEdge>, 
BFEdge> target = results
+                                       .getNode(new 
TypedLinkNodeModule<String, BFEdge>(ge.getI2()));
+
+                       if (source != null && target != null) {
+                               TypedLinkEdge<TypedLinkNodeModule<String, 
BFEdge>, BFEdge> existingEdge = results
+                                               .getEdge(source.value(), 
target.value());
+
+                               if (existingEdge != null)
+                                       existingEdge.value()
+                                                       
.addType(BFEdge.InteractionType.Genetic);
+                               else {
                                        BFEdge anedge = new 
BFEdge(BFEdge.InteractionType.Genetic);
                                        results.addEdgeWNodeUpdate(source, 
target, anedge);
                                }
                        }
                }
-               
+
                return results;
        }
-       
-       public static void 
computePrimaryScores(TypedLinkNetwork<TypedLinkNodeModule<String,BFEdge>,BFEdge>
 results,HCScoringFunction sfunc)
-       {
-               //Assign link scores
-               for (TypedLinkEdge<TypedLinkNodeModule<String,BFEdge>,BFEdge> 
ed : results.edgeIterator())
-                       
ed.value().setLink(sfunc.getBetweenScore(ed.source().value(), 
ed.target().value())); //Put source and targets into modules?
-               
-               //Assign merge scores
-               ExecutorService exec = Executors.newCachedThreadPool(new 
utilities.ThreadPriorityFactory(Thread.MIN_PRIORITY));
+
+       public static void computePrimaryScores(
+                       TypedLinkNetwork<TypedLinkNodeModule<String, BFEdge>, 
BFEdge> results,
+                       HCScoringFunction sfunc) {
+               // Assign link scores
+               for (TypedLinkEdge<TypedLinkNodeModule<String, BFEdge>, BFEdge> 
ed : results
+                               .edgeIterator())
+                       ed.value().setLink(
+                                       
sfunc.getBetweenScore(ed.source().value(), ed.target()
+                                                       .value())); // Put 
source and targets into modules?
+
+               // Assign merge scores
+               ExecutorService exec = Executors
+                               .newCachedThreadPool(new 
utilities.ThreadPriorityFactory(
+                                               Thread.MIN_PRIORITY));
                int count = 0;
-               for (TypedLinkEdge<TypedLinkNodeModule<String,BFEdge>,BFEdge> 
ed : results.edgeIterator())
-                       if (ed.value().isType(BFEdge.InteractionType.Physical))
-                       {
-                               if (count%100000==0)
-                               {
+               for (TypedLinkEdge<TypedLinkNodeModule<String, BFEdge>, BFEdge> 
ed : results
+                               .edgeIterator())
+                       if (ed.value().isType(BFEdge.InteractionType.Physical)) 
{
+                               if (count % 100000 == 0) {
                                        System.gc();
                                        
utilities.MemoryReporter.reportMemoryUsage();
                                }
-                               
+
                                setComplexMerge(sfunc, ed.source(), 
ed.target(), ed.value());
                                exec.execute(new MergeLinkRunner(ed));
                                count++;
                        }
-               
-               try
-               {
+
+               try {
                        exec.shutdown();
                        exec.awaitTermination(30, TimeUnit.DAYS);
-                       if (!exec.isTerminated()) System.out.println("Did not 
fully terminate!");
-               }catch (InterruptedException e) 
{System.out.println(e);exec.shutdownNow();}
-               
-               //Compute global merging values
-               for (TypedLinkEdge<TypedLinkNodeModule<String,BFEdge>,BFEdge> 
ed : results.edgeIterator())
-                       computeGlobalScore(results,ed,sfunc);
+                       if (!exec.isTerminated())
+                               System.out.println("Did not fully terminate!");
+               } catch (InterruptedException e) {
+                       System.out.println(e);
+                       exec.shutdownNow();
+               }
+
+               // Compute global merging values
+               for (TypedLinkEdge<TypedLinkNodeModule<String, BFEdge>, BFEdge> 
ed : results
+                               .edgeIterator())
+                       computeGlobalScore(results, ed, sfunc);
        }
-       
 
-       public static void 
computeGlobalScore(TypedLinkNetwork<TypedLinkNodeModule<String,BFEdge>,BFEdge> 
results, TypedLinkEdge<TypedLinkNodeModule<String,BFEdge>,BFEdge> edge, 
HCScoringFunction sfunc)
-       {
-               //HyperModule<String> m1 = 
results.getNodeValue(results.getEdgeSource(edgeIndex));
-               //HyperModule<String> m2 = 
results.getNodeValue(results.getEdgeTarget(edgeIndex));
-               
-               //BFEdge edge = results.getEdgeValue(edgeIndex);
-               
//edge.setGlobal(edge.complexMerge()+edge.linkMerge()+sfunc.complexReward(m1.size()+m2.size())-sfunc.complexReward(m1.size())-sfunc.complexReward(m2.size()));
-               
edge.value().setGlobal(edge.value().complexMerge()+edge.value().linkMerge());
+       public static void computeGlobalScore(
+                       TypedLinkNetwork<TypedLinkNodeModule<String, BFEdge>, 
BFEdge> results,
+                       TypedLinkEdge<TypedLinkNodeModule<String, BFEdge>, 
BFEdge> edge,
+                       HCScoringFunction sfunc) {
+               // HyperModule<String> m1 =
+               // results.getNodeValue(results.getEdgeSource(edgeIndex));
+               // HyperModule<String> m2 =
+               // results.getNodeValue(results.getEdgeTarget(edgeIndex));
+
+               // BFEdge edge = results.getEdgeValue(edgeIndex);
+               // 
edge.setGlobal(edge.complexMerge()+edge.linkMerge()+sfunc.complexReward(m1.size()+m2.size())-sfunc.complexReward(m1.size())-sfunc.complexReward(m2.size()));
+               edge.value().setGlobal(
+                               edge.value().complexMerge() + 
edge.value().linkMerge());
        }
-       
-       private static TypedLinkNode<TypedLinkNodeModule<String,BFEdge>,BFEdge> 
mergeNodes(TypedLinkNetwork<TypedLinkNodeModule<String,BFEdge>,BFEdge> results, 
TypedLinkNode<TypedLinkNodeModule<String,BFEdge>,BFEdge> n1, 
TypedLinkNode<TypedLinkNodeModule<String,BFEdge>,BFEdge> n2, HCScoringFunction 
sfunc)
-       {
-               TypedLinkNode<TypedLinkNodeModule<String,BFEdge>,BFEdge> 
mergedNode = new 
TypedLinkNode<TypedLinkNodeModule<String,BFEdge>,BFEdge>(TypedLinkNodeModule.union(n1.value(),
 n2.value()));
+
+       private static TypedLinkNode<TypedLinkNodeModule<String, BFEdge>, 
BFEdge> mergeNodes(
+                       TypedLinkNetwork<TypedLinkNodeModule<String, BFEdge>, 
BFEdge> results,
+                       TypedLinkNode<TypedLinkNodeModule<String, BFEdge>, 
BFEdge> n1,
+                       TypedLinkNode<TypedLinkNodeModule<String, BFEdge>, 
BFEdge> n2,
+                       HCScoringFunction sfunc) {
+               TypedLinkNode<TypedLinkNodeModule<String, BFEdge>, BFEdge> 
mergedNode = new TypedLinkNode<TypedLinkNodeModule<String, BFEdge>, BFEdge>(
+                               TypedLinkNodeModule.union(n1.value(), 
n2.value()));
                results.addNode(mergedNode);
-               
-               for (TypedLinkEdge<TypedLinkNodeModule<String,BFEdge>,BFEdge> 
oldEdge : n1.edgeIterator())
-               {
-                       if (oldEdge.target()!=n1 && oldEdge.target()!=n2) 
results.addEdgeWNodeUpdate(mergedNode, oldEdge.target(), oldEdge.value());
-                       else if (oldEdge.source()!=n1 && oldEdge.source()!=n2) 
results.addEdgeWNodeUpdate(mergedNode, oldEdge.source(), oldEdge.value());
+
+               for (TypedLinkEdge<TypedLinkNodeModule<String, BFEdge>, BFEdge> 
oldEdge : n1
+                               .edgeIterator()) {
+                       if (oldEdge.target() != n1 && oldEdge.target() != n2)
+                               results.addEdgeWNodeUpdate(mergedNode, 
oldEdge.target(),
+                                               oldEdge.value());
+                       else if (oldEdge.source() != n1 && oldEdge.source() != 
n2)
+                               results.addEdgeWNodeUpdate(mergedNode, 
oldEdge.source(),
+                                               oldEdge.value());
                }
-               
-               List<TypedLinkEdge<TypedLinkNodeModule<String,BFEdge>,BFEdge>> 
addEdges = new 
ArrayList<TypedLinkEdge<TypedLinkNodeModule<String,BFEdge>,BFEdge>>();
-               List<TypedLinkEdge<TypedLinkNodeModule<String,BFEdge>,BFEdge>> 
removeEdges = new 
ArrayList<TypedLinkEdge<TypedLinkNodeModule<String,BFEdge>,BFEdge>>();
-               
-               for (TypedLinkEdge<TypedLinkNodeModule<String,BFEdge>,BFEdge> 
oldEdge : n2.edgeIterator())
-               {
-                       
TypedLinkEdge<TypedLinkNodeModule<String,BFEdge>,BFEdge> existingEdge = 
results.getEdge(mergedNode.value(), oldEdge.opposite(n2).value());
-                       
+
+               List<TypedLinkEdge<TypedLinkNodeModule<String, BFEdge>, 
BFEdge>> addEdges = new ArrayList<TypedLinkEdge<TypedLinkNodeModule<String, 
BFEdge>, BFEdge>>();
+               List<TypedLinkEdge<TypedLinkNodeModule<String, BFEdge>, 
BFEdge>> removeEdges = new ArrayList<TypedLinkEdge<TypedLinkNodeModule<String, 
BFEdge>, BFEdge>>();
+
+               for (TypedLinkEdge<TypedLinkNodeModule<String, BFEdge>, BFEdge> 
oldEdge : n2
+                               .edgeIterator()) {
+                       TypedLinkEdge<TypedLinkNodeModule<String, BFEdge>, 
BFEdge> existingEdge = results
+                                       .getEdge(mergedNode.value(), 
oldEdge.opposite(n2).value());
+
                        BFEdge newEdge;
-                       
-                       if (existingEdge==null) newEdge = oldEdge.value();
-                       else
-                       {
-                               //Merge two edges
+
+                       if (existingEdge == null)
+                               newEdge = oldEdge.value();
+                       else {
+                               // Merge two edges
                                newEdge = new BFEdge();
                                
newEdge.addType(existingEdge.value().getTypes());
                                newEdge.addType(oldEdge.value().getTypes());
-                               
-                               
newEdge.setLink(existingEdge.value().link()+oldEdge.value().link());
-                               
//newedge.setComplexMerge(oldedge1.complexMerge()+oldedge2.complexMerge());
-                               
-                               
+
+                               newEdge.setLink(existingEdge.value().link()
+                                               + oldEdge.value().link());
+                               // 
newedge.setComplexMerge(oldedge1.complexMerge()+oldedge2.complexMerge());
+
                                if 
(newEdge.isType(BFEdge.InteractionType.Physical))
-                                       setComplexMerge(sfunc, 
existingEdge.source(), existingEdge.target(), newEdge);                         
                 
+                                       setComplexMerge(sfunc, 
existingEdge.source(), existingEdge
+                                                       .target(), newEdge);
                        }
-               
-                       if (oldEdge.target()!=n1 && oldEdge.target()!=n2) 
-                       {
-                               if (existingEdge!=null) 
-                                       
removeEdges.add(results.getEdge(mergedNode.value(), oldEdge.target().value()));
-                               addEdges.add(new 
TypedLinkEdge<TypedLinkNodeModule<String,BFEdge>,BFEdge>(mergedNode, 
oldEdge.target(), newEdge, false));
+
+                       if (oldEdge.target() != n1 && oldEdge.target() != n2) {
+                               if (existingEdge != null)
+                                       
removeEdges.add(results.getEdge(mergedNode.value(), oldEdge
+                                                       .target().value()));
+                               addEdges
+                                               .add(new 
TypedLinkEdge<TypedLinkNodeModule<String, BFEdge>, BFEdge>(
+                                                               mergedNode, 
oldEdge.target(), newEdge, false));
+                       } else if (oldEdge.source() != n1 && oldEdge.source() 
!= n2) {
+                               if (existingEdge != null)
+                                       
removeEdges.add(results.getEdge(mergedNode.value(), oldEdge
+                                                       .source().value()));
+                               addEdges
+                                               .add(new 
TypedLinkEdge<TypedLinkNodeModule<String, BFEdge>, BFEdge>(
+                                                               mergedNode, 
oldEdge.source(), newEdge, false));
                        }
-                       else if (oldEdge.source()!=n1 && oldEdge.source()!=n2)
-                       {
-                               if (existingEdge!=null) 
-                                       
removeEdges.add(results.getEdge(mergedNode.value(), oldEdge.source().value()));
-                               addEdges.add(new 
TypedLinkEdge<TypedLinkNodeModule<String,BFEdge>,BFEdge>(mergedNode, 
oldEdge.source(), newEdge, false));
-                       }
                }
-               
+
                results.removeAllEdges(removeEdges);
                results.addAllEdgesWNodeUpdate(addEdges);
-               
+
                results.removeNode(n2);
                results.removeNode(n1);
-               
+
                return mergedNode;
        }
-       
-       public static void 
report(TypedLinkNetwork<TypedLinkNodeModule<String,BFEdge>,BFEdge> results)
-       {
-               System.out.println("---Report---");
+
+       public static String report(
+                       TypedLinkNetwork<TypedLinkNodeModule<String, BFEdge>, 
BFEdge> results) {
                
+               final StringBuilder builder = new StringBuilder();
+
                DoubleVector cscores = new DoubleVector(results.numNodes());
                DoubleVector csizes = new DoubleVector(results.numNodes());
-               
-               for (TypedLinkNode<TypedLinkNodeModule<String,BFEdge>,BFEdge> m 
: results.nodeIterator())
-               {
+
+               for (TypedLinkNode<TypedLinkNodeModule<String, BFEdge>, BFEdge> 
m : results
+                               .nodeIterator()) {
                        cscores.add(m.value().score());
                        csizes.add(m.value().size());
                }
+
+               builder.append("Best cluster score: " + cscores.max(false) + 
"\n");
+               builder.append("Worst cluster score: " + cscores.min(false) + 
"\n");
+               builder.append("Largest cluster size: " + csizes.max(false) + 
"\n");
                
-               System.out.println("Best cluster score: "+cscores.max(false));
-               System.out.println("Worst cluster score: "+cscores.min(false));
-               System.out.println("Largest cluster size: "+csizes.max(false));
-                               
+
                DoubleVector escores = new DoubleVector(results.numEdges());
-               for (TypedLinkEdge<TypedLinkNodeModule<String,BFEdge>,BFEdge> 
ed : results.edges())
-               {
+               for (TypedLinkEdge<TypedLinkNodeModule<String, BFEdge>, BFEdge> 
ed : results
+                               .edges()) {
                        float score = ed.value().link();
-                       if (score != -1) escores.add(score);
+                       if (score != -1)
+                               escores.add(score);
                }
-               System.out.println("Best edge score: "+escores.max(false));
                
-               //csizes.plothist(30);
+               builder.append("Best edge score: " + escores.max(false) + "\n");
+
+               // csizes.plothist(30);
+
+               System.out.println(builder.toString());
                
-               System.out.println("------");
+               return builder.toString();
        }
-       
-       protected static void 
assignMergeLinkScore(TypedLinkEdge<TypedLinkNodeModule<String,BFEdge>,BFEdge> 
ed)
-       {
-               TypedLinkNode<TypedLinkNodeModule<String,BFEdge>,BFEdge> n1 = 
ed.source();
-               TypedLinkNode<TypedLinkNodeModule<String,BFEdge>,BFEdge> n2 = 
ed.target();
-               
-               
Map<TypedLinkNode<TypedLinkNodeModule<String,BFEdge>,BFEdge>,Float> linkScores 
= new 
HashMap<TypedLinkNode<TypedLinkNodeModule<String,BFEdge>,BFEdge>,Float>(n1.numNeighbors()+n2.numNeighbors(),1);
-               
-               for (TypedLinkEdge<TypedLinkNodeModule<String,BFEdge>,BFEdge> 
oedge : ed.edgeNeighbors())
-               {
-                       
TypedLinkNode<TypedLinkNodeModule<String,BFEdge>,BFEdge> onode;
-                       if (oedge.source()==n1 || oedge.source()==n2) onode = 
oedge.target();
-                       else onode = oedge.source();
-                       
-                       if (!linkScores.containsKey(onode)) 
linkScores.put(onode,oedge.value().link());
-                       else linkScores.put(onode, 
linkScores.get(onode)+oedge.value().link());
+
+       protected static void assignMergeLinkScore(
+                       TypedLinkEdge<TypedLinkNodeModule<String, BFEdge>, 
BFEdge> ed) {
+               TypedLinkNode<TypedLinkNodeModule<String, BFEdge>, BFEdge> n1 = 
ed
+                               .source();
+               TypedLinkNode<TypedLinkNodeModule<String, BFEdge>, BFEdge> n2 = 
ed
+                               .target();
+
+               Map<TypedLinkNode<TypedLinkNodeModule<String, BFEdge>, BFEdge>, 
Float> linkScores = new HashMap<TypedLinkNode<TypedLinkNodeModule<String, 
BFEdge>, BFEdge>, Float>(
+                               n1.numNeighbors() + n2.numNeighbors(), 1);
+
+               for (TypedLinkEdge<TypedLinkNodeModule<String, BFEdge>, BFEdge> 
oedge : ed
+                               .edgeNeighbors()) {
+                       TypedLinkNode<TypedLinkNodeModule<String, BFEdge>, 
BFEdge> onode;
+                       if (oedge.source() == n1 || oedge.source() == n2)
+                               onode = oedge.target();
+                       else
+                               onode = oedge.source();
+
+                       if (!linkScores.containsKey(onode))
+                               linkScores.put(onode, oedge.value().link());
+                       else
+                               linkScores.put(onode, linkScores.get(onode)
+                                               + oedge.value().link());
                }
-               
-               
-               //****Need to calculate together / apart (not! before/after). 
Old information should be completely unused.
-               //Together has already been done. = 4
-               //Separate needs to be done: = 8  (4-8=-4)
-               
-               //Sum all links to node1
+
+               // ****Need to calculate together / apart (not! before/after). 
Old
+               // information should be completely unused.
+               // Together has already been done. = 4
+               // Separate needs to be done: = 8 (4-8=-4)
+
+               // Sum all links to node1
                float separateScore = 0;
-               for (TypedLinkEdge<TypedLinkNodeModule<String,BFEdge>,BFEdge> 
n1ed : n1.edgeIterator())
-                       //separateScore += n1ed.value().link();
+               for (TypedLinkEdge<TypedLinkNodeModule<String, BFEdge>, BFEdge> 
n1ed : n1
+                               .edgeIterator())
+                       // separateScore += n1ed.value().link();
                        separateScore += Math.max(0, n1ed.value().link());
-               
-               //Sum all links to node2 (which do not point at node1)
-               for (TypedLinkEdge<TypedLinkNodeModule<String,BFEdge>,BFEdge> 
n2ed : n2.edgeIterator())
-               {
-                       if (n2ed.source()==n1) continue;
-                       if (n2ed.target()==n1) continue;
-                       
-                       //separateScore += n2ed.value().link(); 
+
+               // Sum all links to node2 (which do not point at node1)
+               for (TypedLinkEdge<TypedLinkNodeModule<String, BFEdge>, BFEdge> 
n2ed : n2
+                               .edgeIterator()) {
+                       if (n2ed.source() == n1)
+                               continue;
+                       if (n2ed.target() == n1)
+                               continue;
+
+                       // separateScore += n2ed.value().link();
                        separateScore += Math.max(0, n2ed.value().link());
                }
-               
+
                float sumPositive = 0;
                for (Float f : linkScores.values())
-                       if (f>0) sumPositive+=f;
-               
-               ed.value().setLinkMerge(sumPositive-separateScore);
-               
//ed.value().setLinkMerge(ed.value().sumLinkScores()-separateScore);
+                       if (f > 0)
+                               sumPositive += f;
+
+               ed.value().setLinkMerge(sumPositive - separateScore);
+               // 
ed.value().setLinkMerge(ed.value().sumLinkScores()-separateScore);
        }
-       
-       private static void setComplexMerge(HCScoringFunction sfunc, 
TypedLinkNode<TypedLinkNodeModule<String,BFEdge>,BFEdge> n1, 
TypedLinkNode<TypedLinkNodeModule<String,BFEdge>,BFEdge> n2, BFEdge edge)
-       {
+
+       private static void setComplexMerge(HCScoringFunction sfunc,
+                       TypedLinkNode<TypedLinkNodeModule<String, BFEdge>, 
BFEdge> n1,
+                       TypedLinkNode<TypedLinkNodeModule<String, BFEdge>, 
BFEdge> n2,
+                       BFEdge edge) {
                double c1score = sfunc.getWithinScore(n1.value());
                double c2score = sfunc.getWithinScore(n2.value());
-               
-               double combinedScore = 
sfunc.getWithinScore(TypedLinkNodeModule.union(n1.value(), n2.value()));
-               
-               edge.setComplexMerge((float)(combinedScore-c1score-c2score));
+
+               double combinedScore = 
sfunc.getWithinScore(TypedLinkNodeModule.union(
+                               n1.value(), n2.value()));
+
+               edge.setComplexMerge((float) (combinedScore - c1score - 
c2score));
        }
 }

Modified: 
csplugins/trunk/ucsd/ruschein/DenovoPGNetworkAlignment/src/org/cytoscape/DenovoPGNetworkAlignmentPlugin/SearchTask.java
===================================================================
--- 
csplugins/trunk/ucsd/ruschein/DenovoPGNetworkAlignment/src/org/cytoscape/DenovoPGNetworkAlignmentPlugin/SearchTask.java
     2010-01-12 18:47:44 UTC (rev 18873)
+++ 
csplugins/trunk/ucsd/ruschein/DenovoPGNetworkAlignment/src/org/cytoscape/DenovoPGNetworkAlignmentPlugin/SearchTask.java
     2010-01-12 19:09:07 UTC (rev 18874)
@@ -37,7 +37,8 @@
                final TypedLinkNetwork<TypedLinkNodeModule<String, BFEdge>, 
BFEdge> results = HCSearch2
                                .search(converter.getPhysicalNetwork(), 
converter.getGeneticNetwork(), hcScoringFunction);
                
-               setStatus("Search finished!");
+               setStatus("Search finished!\n\n" + HCSearch2.report(results));
+               
                setPercentCompleted(100);
 
        }
@@ -51,7 +52,7 @@
        }
 
        public String getTitle() {
-               return "DenovoPGNetworkAlignment";
+               return "Denovo PG Network Alignment";
        }
 
        private void setPercentCompleted(int percent) {

-- 
You received this message because you are subscribed to the Google Groups 
"cytoscape-cvs" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/cytoscape-cvs?hl=en.


Reply via email to