Skip to content

Commit d4bdd50

Browse files
committed
Genemania dialog and load task. Refs #377
1 parent c5806ab commit d4bdd50

File tree

11 files changed

+488
-39
lines changed

11 files changed

+488
-39
lines changed

EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/model/DataSetParameters.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,23 +18,36 @@ public class DataSetParameters {
1818
private final String name;
1919
private final Method method;
2020

21-
// one or the other of the following must be provided
21+
// one of the following must be provided
22+
// This is a hack, there should really be different subclasses for different parameter
23+
// types, but for the sake of compatibility with the session serialization this is easier.
2224
private final @Nullable DataSetFiles files;
2325
private final @Nullable transient TableParameters tableParameters;
26+
private final @Nullable transient GenemaniaParameters genemaniaParameters;
2427

2528

2629
public DataSetParameters(String name, Method method, DataSetFiles files) {
2730
this.name = Objects.requireNonNull(name);
2831
this.method = Objects.requireNonNull(method);
2932
this.files = Objects.requireNonNull(files);
3033
this.tableParameters = null;
34+
this.genemaniaParameters = null;
3135
}
3236

3337
public DataSetParameters(String name, Method method, TableParameters tableParameters) {
3438
this.name = Objects.requireNonNull(name);
3539
this.method = Objects.requireNonNull(method);
3640
this.files = new DataSetFiles();
3741
this.tableParameters = Objects.requireNonNull(tableParameters);
42+
this.genemaniaParameters = null;
43+
}
44+
45+
public DataSetParameters(String name, GenemaniaParameters genemaniaParameters) {
46+
this.name = Objects.requireNonNull(name);
47+
this.method = Method.Generic;
48+
this.files = new DataSetFiles();
49+
this.tableParameters = null;
50+
this.genemaniaParameters = Objects.requireNonNull(genemaniaParameters);
3851
}
3952

4053
public String getName() {
@@ -49,6 +62,10 @@ public Optional<TableParameters> getTableParams() {
4962
return Optional.ofNullable(tableParameters);
5063
}
5164

65+
public Optional<GenemaniaParameters> getGenemaniaParams() {
66+
return Optional.ofNullable(genemaniaParameters);
67+
}
68+
5269
public Method getMethod() {
5370
return method;
5471
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package org.baderlab.csplugins.enrichmentmap.model;
2+
3+
import org.cytoscape.model.CyNetwork;
4+
5+
public class GenemaniaParameters {
6+
7+
// the SUID of the genemania network
8+
private final CyNetwork network;
9+
10+
public GenemaniaParameters(CyNetwork network) {
11+
this.network = network;
12+
}
13+
14+
public CyNetwork getNetwork() {
15+
return network;
16+
}
17+
18+
19+
}
Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
package org.baderlab.csplugins.enrichmentmap.parsers;
2+
3+
import java.lang.reflect.Type;
4+
import java.util.ArrayList;
5+
import java.util.HashMap;
6+
import java.util.HashSet;
7+
import java.util.List;
8+
import java.util.Map;
9+
import java.util.Set;
10+
11+
import org.baderlab.csplugins.enrichmentmap.model.EMDataSet;
12+
import org.baderlab.csplugins.enrichmentmap.model.EnrichmentMap;
13+
import org.baderlab.csplugins.enrichmentmap.model.GeneSet;
14+
import org.baderlab.csplugins.enrichmentmap.model.GenemaniaParameters;
15+
import org.baderlab.csplugins.enrichmentmap.model.GenericResult;
16+
import org.baderlab.csplugins.enrichmentmap.model.SetOfEnrichmentResults;
17+
import org.baderlab.csplugins.enrichmentmap.view.creation.genemania.GenemaniaAnnotation;
18+
import org.cytoscape.model.CyNetwork;
19+
import org.cytoscape.model.CyRow;
20+
import org.cytoscape.model.CyTable;
21+
import org.cytoscape.work.AbstractTask;
22+
import org.cytoscape.work.TaskMonitor;
23+
24+
import com.google.common.collect.ImmutableSet;
25+
import com.google.gson.Gson;
26+
import com.google.gson.GsonBuilder;
27+
import com.google.gson.JsonParseException;
28+
import com.google.gson.reflect.TypeToken;
29+
30+
public class LoadEnrichmentsFromGenemaniaTask extends AbstractTask {
31+
32+
private final GenemaniaParameters genemaniaParams;
33+
private final EMDataSet dataset;
34+
35+
public LoadEnrichmentsFromGenemaniaTask(GenemaniaParameters genemaniaParams, EMDataSet dataset) {
36+
this.genemaniaParams = genemaniaParams;
37+
this.dataset = dataset;
38+
}
39+
40+
@Override
41+
public void run(TaskMonitor tm) {
42+
tm.setStatusMessage("Loading enrichment data from Genemania network.");
43+
tm.setProgress(0.0);
44+
45+
CyNetwork genemaniaNetwork = genemaniaParams.getNetwork();
46+
47+
Map<String,Set<String>> geneSets = computeGeneSets(genemaniaNetwork);
48+
if(geneSets == null || geneSets.isEmpty())
49+
throw new RuntimeException("Gene set data not found in Genemania network.");
50+
51+
tm.setProgress(0.3);
52+
53+
Map<String,GenemaniaAnnotation> annotations = parseAnnotationJson(genemaniaNetwork);
54+
if(annotations == null || annotations.isEmpty())
55+
throw new RuntimeException("Annotation data not found in Genemania network.");
56+
57+
tm.setProgress(0.7);
58+
59+
createDataSet(genemaniaNetwork, geneSets, annotations);
60+
61+
tm.setProgress(1.0);
62+
}
63+
64+
65+
private void createDataSet(CyNetwork genemaniaNetwork, Map<String,Set<String>> geneSets, Map<String,GenemaniaAnnotation> annotations) {
66+
EnrichmentMap map = dataset.getMap();
67+
SetOfEnrichmentResults enrichments = dataset.getEnrichments();
68+
Map<String,GeneSet> genesets = dataset.getSetOfGeneSets().getGeneSets();
69+
70+
for(Map.Entry<String, Set<String>> entry : geneSets.entrySet()) {
71+
String name = entry.getKey();
72+
Set<String> genes = entry.getValue();
73+
74+
75+
GenemaniaAnnotation annotation = annotations.get(name);
76+
if(annotation == null)
77+
continue;
78+
79+
// Build the GeneSet object
80+
ImmutableSet.Builder<Integer> builder = ImmutableSet.builder();
81+
82+
for(String gene : genes) {
83+
Integer hash = map.addGene(gene);
84+
if(hash != null)
85+
builder.add(hash);
86+
}
87+
88+
GeneSet gs = new GeneSet(annotation.getName(), name, builder.build());
89+
int gsSize = gs.getGenes().size();
90+
genesets.put(name, gs);
91+
92+
GenericResult result = new GenericResult(annotation.getName(), name, 1.0, gsSize, annotation.getqValue());
93+
enrichments.getEnrichments().put(name, result);
94+
}
95+
}
96+
97+
98+
private Map<String,Set<String>> computeGeneSets(CyNetwork genemaniaNetwork) {
99+
CyTable nodeTable = genemaniaNetwork.getDefaultNodeTable();
100+
Map<String,Set<String>> geneSets = new HashMap<>();
101+
102+
for(CyRow row : nodeTable.getAllRows()) {
103+
String gene = row.get("gene name", String.class);
104+
List<String> annotations = row.getList("annotation name", String.class);
105+
106+
if(gene != null && annotations != null && !annotations.isEmpty()) {
107+
for(String annotation : annotations) {
108+
geneSets.computeIfAbsent(annotation, k -> new HashSet<>()).add(gene);
109+
}
110+
}
111+
}
112+
113+
return geneSets;
114+
}
115+
116+
117+
private Map<String,GenemaniaAnnotation> parseAnnotationJson(CyNetwork genemaniaNetwork) {
118+
CyTable table = genemaniaNetwork.getDefaultNetworkTable();
119+
120+
CyRow row = table.getRow(genemaniaNetwork.getSUID());
121+
if(row == null)
122+
return null;
123+
124+
String jsonString = row.get("annotations", String.class);
125+
if(jsonString == null)
126+
return null;
127+
128+
try {
129+
Gson gson = new GsonBuilder().create();
130+
Type listType = new TypeToken<ArrayList<GenemaniaAnnotation>>(){}.getType();
131+
List<GenemaniaAnnotation> fromJson = gson.fromJson(jsonString, listType);
132+
Map<String,GenemaniaAnnotation> annotations = new HashMap<>();
133+
for(GenemaniaAnnotation a : fromJson) {
134+
annotations.put(a.getDescription(), a);
135+
}
136+
return annotations;
137+
} catch(JsonParseException e) {
138+
return null;
139+
}
140+
}
141+
142+
}

EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/task/CreateEnrichmentMapTaskFactory.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import org.baderlab.csplugins.enrichmentmap.model.EMDataSet;
1212
import org.baderlab.csplugins.enrichmentmap.model.EMDataSet.Method;
1313
import org.baderlab.csplugins.enrichmentmap.model.EnrichmentMap;
14+
import org.baderlab.csplugins.enrichmentmap.model.GenemaniaParameters;
1415
import org.baderlab.csplugins.enrichmentmap.model.GenesetSimilarity;
1516
import org.baderlab.csplugins.enrichmentmap.model.Ranking;
1617
import org.baderlab.csplugins.enrichmentmap.model.SimilarityKey;
@@ -19,6 +20,7 @@
1920
import org.baderlab.csplugins.enrichmentmap.parsers.ExpressionFileReaderTask;
2021
import org.baderlab.csplugins.enrichmentmap.parsers.GMTFileReaderTask;
2122
import org.baderlab.csplugins.enrichmentmap.parsers.GREATWhichPvalueQuestionTask;
23+
import org.baderlab.csplugins.enrichmentmap.parsers.LoadEnrichmentsFromGenemaniaTask;
2224
import org.baderlab.csplugins.enrichmentmap.parsers.LoadEnrichmentsFromTableTask;
2325
import org.baderlab.csplugins.enrichmentmap.parsers.ParseBingoEnrichmentResults;
2426
import org.baderlab.csplugins.enrichmentmap.parsers.ParseDavidEnrichmentResults;
@@ -96,6 +98,9 @@ private void createTasks(EnrichmentMap map, TaskIterator tasks, MissingGenesetSt
9698
if(dataSetParameters.getTableParams().isPresent()) {
9799
TableParameters tableParams = dataSetParameters.getTableParams().get();
98100
tasks.append(new LoadEnrichmentsFromTableTask(tableParams, dataset));
101+
} else if(dataSetParameters.getGenemaniaParams().isPresent()) {
102+
GenemaniaParameters genemaniaParams = dataSetParameters.getGenemaniaParams().get();
103+
tasks.append(new LoadEnrichmentsFromGenemaniaTask(genemaniaParams, dataset));
99104
} else {
100105
tasks.append(getEnrichmentParserTasks(dataset));
101106
}

EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/view/creation/CutoffPropertiesPanel.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,12 @@
2626
import org.apache.commons.lang3.tuple.Pair;
2727
import org.baderlab.csplugins.enrichmentmap.AfterInjection;
2828
import org.baderlab.csplugins.enrichmentmap.PropertyManager;
29+
import org.baderlab.csplugins.enrichmentmap.model.EMCreationParameters;
2930
import org.baderlab.csplugins.enrichmentmap.model.EMCreationParameters.EdgeStrategy;
3031
import org.baderlab.csplugins.enrichmentmap.model.EMCreationParameters.SimilarityMetric;
3132
import org.baderlab.csplugins.enrichmentmap.model.EnrichmentResultFilterParams.NESFilter;
3233
import org.baderlab.csplugins.enrichmentmap.model.LegacySupport;
34+
import org.baderlab.csplugins.enrichmentmap.style.EMStyleBuilder;
3335
import org.baderlab.csplugins.enrichmentmap.view.util.ComboItem;
3436
import org.baderlab.csplugins.enrichmentmap.view.util.SwingUtil;
3537
import org.cytoscape.util.swing.LookAndFeelUtil;
@@ -40,6 +42,7 @@
4042
public class CutoffPropertiesPanel extends JPanel {
4143

4244
@Inject private PropertyManager propertyManager;
45+
@Inject private LegacySupport legacySupport;
4346

4447
// node filtering
4548
private JCheckBox filterGenesCheckbox;
@@ -572,4 +575,24 @@ public boolean getParseBaderlabGeneSets() {
572575
return parseBaderlabCheckbox.isSelected();
573576
}
574577

578+
public EMCreationParameters getCreationParameters() {
579+
String attributePrefix = EMStyleBuilder.Columns.NAMESPACE_PREFIX;
580+
String stylePrefix = legacySupport.getNextStylePrefix();
581+
582+
SimilarityMetric similarityMetric = getSimilarityMetric();
583+
double pvalue = getPValue();
584+
double qvalue = getQValue();
585+
NESFilter nesFilter = getNESFilter();
586+
boolean filterByExpressions = getFilterGenesByExpressions();
587+
double cutoff = getCutoff();
588+
double combined = getCombinedConstant();
589+
Optional<Integer> minExperiments = getMinimumExperiments();
590+
EdgeStrategy edgeStrategy = getEdgeStrategy();
591+
boolean parseBaderlab = getParseBaderlabGeneSets();
592+
593+
EMCreationParameters params =
594+
new EMCreationParameters(attributePrefix, stylePrefix, pvalue, qvalue, nesFilter, minExperiments, filterByExpressions,
595+
parseBaderlab, similarityMetric, cutoff, combined, edgeStrategy);
596+
return params;
597+
}
575598
}

EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/view/creation/MasterDetailDialogPage.java

Lines changed: 3 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,8 @@
5959
import org.baderlab.csplugins.enrichmentmap.model.DataSetParameters;
6060
import org.baderlab.csplugins.enrichmentmap.model.EMCreationParameters;
6161
import org.baderlab.csplugins.enrichmentmap.model.EMCreationParameters.EdgeStrategy;
62-
import org.baderlab.csplugins.enrichmentmap.model.EMCreationParameters.SimilarityMetric;
6362
import org.baderlab.csplugins.enrichmentmap.model.EMDataSet.Method;
64-
import org.baderlab.csplugins.enrichmentmap.model.EnrichmentResultFilterParams.NESFilter;
65-
import org.baderlab.csplugins.enrichmentmap.model.LegacySupport;
6663
import org.baderlab.csplugins.enrichmentmap.resolver.ResolverTask;
67-
import org.baderlab.csplugins.enrichmentmap.style.EMStyleBuilder;
6864
import org.baderlab.csplugins.enrichmentmap.task.CreateEnrichmentMapTaskFactory;
6965
import org.baderlab.csplugins.enrichmentmap.task.InitializeGenesetsOfInterestTask.MissingGenesetStrategy;
7066
import org.baderlab.csplugins.enrichmentmap.task.MissingGenesetsException;
@@ -95,7 +91,6 @@ public class MasterDetailDialogPage implements CardDialogPage {
9591
@Inject private Provider<JFrame> jframeProvider;
9692
@Inject private FileBrowser fileBrowser;
9793
@Inject private PropertyManager propertyManager;
98-
@Inject private LegacySupport legacySupport;
9994

10095
@Inject private Provider<DetailCommonPanel> commonPanelProvider;
10196
@Inject private Provider<DetailGettingStartedPanel> nullPanelProvider;
@@ -193,29 +188,12 @@ private boolean promptForMissingGenesetRetry(Collection<String> names) {
193188

194189

195190
private EMCreationParameters getCreationParameters() {
196-
String attributePrefix = EMStyleBuilder.Columns.NAMESPACE_PREFIX;
197-
String stylePrefix = legacySupport.getNextStylePrefix();
198-
199-
SimilarityMetric similarityMetric = cutoffPanel.getSimilarityMetric();
200-
double pvalue = cutoffPanel.getPValue();
201-
double qvalue = cutoffPanel.getQValue();
202-
NESFilter nesFilter = cutoffPanel.getNESFilter();
203-
boolean filterByExpressions = cutoffPanel.getFilterGenesByExpressions();
204-
double cutoff = cutoffPanel.getCutoff();
205-
double combined = cutoffPanel.getCombinedConstant();
206-
Optional<Integer> minExperiments = cutoffPanel.getMinimumExperiments();
207-
String networkName = networkNamePanel.getNameText();
208-
EdgeStrategy edgeStrategy = cutoffPanel.getEdgeStrategy();
209-
boolean parseBaderlab = cutoffPanel.getParseBaderlabGeneSets();
210-
211-
EMCreationParameters params =
212-
new EMCreationParameters(attributePrefix, stylePrefix, pvalue, qvalue, nesFilter, minExperiments, filterByExpressions,
213-
parseBaderlab, similarityMetric, cutoff, combined, edgeStrategy);
214-
215-
params.setNetworkName(networkName);
191+
EMCreationParameters params = cutoffPanel.getCreationParameters();
192+
params.setNetworkName(networkNamePanel.getNameText());
216193
return params;
217194
}
218195

196+
219197
private List<DataSetParameters> getDataSetParameters() {
220198
List<DataSetParameters> dataSets = dataSetListModel.toList().stream()
221199
.map(DataSetListItem::getDetailPanel)
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package org.baderlab.csplugins.enrichmentmap.view.creation.genemania;
2+
3+
public class GenemaniaAnnotation {
4+
5+
private String name;
6+
private String description;
7+
private double qValue;
8+
private int sample;
9+
private int total;
10+
11+
public String getName() {
12+
return name;
13+
}
14+
15+
public String getDescription() {
16+
return description;
17+
}
18+
19+
public double getqValue() {
20+
return qValue;
21+
}
22+
23+
public int getSample() {
24+
return sample;
25+
}
26+
27+
public int getTotal() {
28+
return total;
29+
}
30+
31+
@Override
32+
public String toString() {
33+
StringBuilder builder = new StringBuilder();
34+
builder.append("GenemaniaAnnotation [name=");
35+
builder.append(name);
36+
builder.append(", description=");
37+
builder.append(description);
38+
builder.append(", qValue=");
39+
builder.append(qValue);
40+
builder.append(", sample=");
41+
builder.append(sample);
42+
builder.append(", total=");
43+
builder.append(total);
44+
builder.append("]");
45+
return builder.toString();
46+
}
47+
48+
}

0 commit comments

Comments
 (0)