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.