Skip to content

Commit f24a328

Browse files
committed
Expression data in 'build-table' command.
Add arguments to the 'build-table' command to allow expression data to be loaded from a second table. Refs #419.
1 parent 95881c2 commit f24a328

File tree

10 files changed

+264
-69
lines changed

10 files changed

+264
-69
lines changed

EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/commands/TableCommandTask.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import org.baderlab.csplugins.enrichmentmap.commands.tunables.TableTunables;
88
import org.baderlab.csplugins.enrichmentmap.model.DataSetParameters;
99
import org.baderlab.csplugins.enrichmentmap.model.EMCreationParameters;
10+
import org.baderlab.csplugins.enrichmentmap.model.TableExpressionParameters;
1011
import org.baderlab.csplugins.enrichmentmap.model.TableParameters;
1112
import org.baderlab.csplugins.enrichmentmap.task.CreateEnrichmentMapTaskFactory;
1213
import org.cytoscape.work.AbstractTask;
@@ -36,12 +37,13 @@ public class TableCommandTask extends AbstractTask {
3637
public void run(TaskMonitor taskMonitor) {
3738
EMCreationParameters creationParams = filterArgs.getCreationParameters();
3839
TableParameters tableParams = tableArgs.getTableParameters();
40+
TableExpressionParameters tableExpressionParams = tableArgs.getTableExpressionParameters();
3941

4042
if(filterArgs.networkName != null && !filterArgs.networkName.trim().isEmpty())
4143
creationParams.setNetworkName(filterArgs.networkName);
4244

4345
String dataSetName = this.dataSetName == null ? "Data Set 1" : this.dataSetName;
44-
DataSetParameters dsParams = new DataSetParameters(dataSetName, tableParams);
46+
DataSetParameters dsParams = new DataSetParameters(dataSetName, tableParams, tableExpressionParams);
4547
List<DataSetParameters> dataSets = Collections.singletonList(dsParams);
4648

4749
CreateEnrichmentMapTaskFactory taskFactory = taskFactoryFactory.create(creationParams, dataSets);

EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/commands/tunables/TableTunables.java

Lines changed: 49 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.baderlab.csplugins.enrichmentmap.commands.tunables;
22

3+
import org.baderlab.csplugins.enrichmentmap.model.TableExpressionParameters;
34
import org.baderlab.csplugins.enrichmentmap.model.TableParameters;
45
import org.cytoscape.model.CyColumn;
56
import org.cytoscape.model.CyTable;
@@ -30,11 +31,24 @@ public class TableTunables {
3031
public String descriptionColumn;
3132

3233

34+
@Tunable(description="Table to be used for loading expression data (optional). May be the same as the enrichment data table.")
35+
public String exprTable;
36+
37+
@Tunable(description="Name of column in expression data table that contains gene names (required if 'exprTable' is provided).")
38+
public String exprGeneNameColumn;
39+
40+
@Tunable(description="Name of column in expression data table that contains gene descriptions (optional).")
41+
public String exprDescriptionColumn;
42+
43+
@Tunable(description="Comma separated list of column names in the expression data table that contain the numeric expression values (required if 'exprTable' is provided).")
44+
public String exprValueColumns;
45+
46+
3347
@Inject private CyTableManager tableManager;
3448

3549

3650

37-
private CyTable getTable() {
51+
private CyTable getTable(String table) {
3852
if(table == null)
3953
return null;
4054

@@ -51,37 +65,61 @@ private CyTable getTable() {
5165
return null;
5266
}
5367

68+
5469
public TableParameters getTableParameters() throws IllegalArgumentException {
55-
CyTable table = getTable();
70+
CyTable table = getTable(this.table);
5671
if(table == null)
5772
throw new IllegalArgumentException("Table '" + this.table + "' is invalid.");
5873

5974
if(pvalueColumn == null && qvalueColumn == null)
6075
throw new IllegalArgumentException("At least one of 'pvalueColumn' or 'qvalueColumn' must be provided.");
6176

62-
validateColumn(table, nameColumn, false, String.class, true);
63-
validateColumn(table, genesColumn, true, String.class, true);
64-
validateColumn(table, descriptionColumn, false, String.class, false);
65-
validateColumn(table, pvalueColumn, false, Double.class, false);
66-
validateColumn(table, qvalueColumn, false, Double.class, false);
77+
validateColumn(table, "nameColumn", nameColumn, false, String.class, true);
78+
validateColumn(table, "genesColumn", genesColumn, true, String.class, true);
79+
validateColumn(table, "descriptionColumn", descriptionColumn, false, String.class, false);
80+
validateColumn(table, "pvalueColumn", pvalueColumn, false, Double.class, false);
81+
validateColumn(table, "qvalueColumn", qvalueColumn, false, Double.class, false);
6782

6883
return new TableParameters(table, nameColumn, genesColumn, pvalueColumn, qvalueColumn, descriptionColumn, null);
6984
}
7085

7186

72-
private static void validateColumn(CyTable table, String name, boolean isList, Class<?> type, boolean required) throws IllegalArgumentException {
87+
public TableExpressionParameters getTableExpressionParameters() throws IllegalArgumentException {
88+
if(this.exprTable == null)
89+
return null;
90+
91+
CyTable table = getTable(this.exprTable);
92+
if(table == null)
93+
throw new IllegalArgumentException("Expression table '" + this.exprTable + "' is invalid.");
94+
95+
validateColumn(table, "exprGeneNameColumn", exprGeneNameColumn, false, String.class, true);
96+
validateColumn(table, "exprDescriptionColumn", exprDescriptionColumn, false, String.class, false);
97+
98+
if(exprValueColumns == null || exprValueColumns.isEmpty())
99+
throw new IllegalArgumentException("'exprValueColumns' is required when loading expression data");
100+
101+
String[] valueColumns = exprValueColumns.split(",");
102+
for(String col : valueColumns) {
103+
validateColumn(table, "exprValueColumns", col, false, Double.class, true);
104+
}
105+
106+
return new TableExpressionParameters(table, exprGeneNameColumn, exprDescriptionColumn, valueColumns);
107+
}
108+
109+
110+
private static void validateColumn(CyTable table, String argName, String name, boolean isList, Class<?> type, boolean required) throws IllegalArgumentException {
73111
if(name == null && required)
74-
throw new IllegalArgumentException("Column '" + name + "' is required.");
112+
throw new IllegalArgumentException("Argument '" + argName + "' is required.");
75113
if(name == null)
76114
return;
77115

78116
CyColumn column = table.getColumn(name);
79117
if(column == null)
80-
throw new IllegalArgumentException("Column '" + name + "' is invalid.");
118+
throw new IllegalArgumentException("Column '" + name + "' is invalid for argument '" + argName + "'.");
81119

82120
// if the column exists it must still be of the required type
83121
if((isList && !column.getListElementType().equals(type)) || (!isList && !column.getType().equals(type)))
84-
throw new IllegalArgumentException("Column '" + name + "' must be of type '" + (isList ? "list of " + type : type) + "'");
122+
throw new IllegalArgumentException("Column '" + name + "' must be of type '" + (isList ? "list of " + type : type) + "' for argument '" + argName + "'");
85123
}
86124

87125

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ public class DataSetParameters {
2323
// types, but for the sake of compatibility with the session serialization this is easier.
2424
private final @Nullable DataSetFiles files;
2525
private final @Nullable transient TableParameters tableParameters;
26+
private final @Nullable transient TableExpressionParameters tableExpressionParameters;
2627
private final @Nullable transient GenemaniaParameters genemaniaParameters;
2728

2829

@@ -31,14 +32,16 @@ public DataSetParameters(String name, Method method, DataSetFiles files) {
3132
this.method = Objects.requireNonNull(method);
3233
this.files = Objects.requireNonNull(files);
3334
this.tableParameters = null;
35+
this.tableExpressionParameters = null;
3436
this.genemaniaParameters = null;
3537
}
3638

37-
public DataSetParameters(String name, TableParameters tableParameters) {
39+
public DataSetParameters(String name, TableParameters tableParameters, TableExpressionParameters tableExpressionParameters) {
3840
this.name = Objects.requireNonNull(name);
3941
this.method = Method.Generic;
4042
this.files = new DataSetFiles();
4143
this.tableParameters = Objects.requireNonNull(tableParameters);
44+
this.tableExpressionParameters = tableExpressionParameters;
4245
this.genemaniaParameters = null;
4346
}
4447

@@ -47,6 +50,7 @@ public DataSetParameters(String name, GenemaniaParameters genemaniaParameters) {
4750
this.method = Method.Generic;
4851
this.files = new DataSetFiles();
4952
this.tableParameters = null;
53+
this.tableExpressionParameters = null;
5054
this.genemaniaParameters = Objects.requireNonNull(genemaniaParameters);
5155
}
5256

@@ -62,6 +66,10 @@ public Optional<TableParameters> getTableParams() {
6266
return Optional.ofNullable(tableParameters);
6367
}
6468

69+
public Optional<TableExpressionParameters> getTableExpressionParams() {
70+
return Optional.ofNullable(tableExpressionParameters);
71+
}
72+
6573
public Optional<GenemaniaParameters> getGenemaniaParams() {
6674
return Optional.ofNullable(genemaniaParameters);
6775
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ public void setExpression(String[] expres) {
9595
}
9696
}
9797

98+
9899
private float parseAndRound(String exp) {
99100
float f = Float.parseFloat(exp);
100101
float r = Precision.round(f, 4);
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package org.baderlab.csplugins.enrichmentmap.model;
2+
3+
import java.util.Objects;
4+
5+
import org.cytoscape.model.CyTable;
6+
7+
public class TableExpressionParameters {
8+
9+
// expression table
10+
private final CyTable exprTable;
11+
private final String exprGeneNameColumn;
12+
private final String exprDescriptionColumn;
13+
private final String[] exprValueColumns;
14+
15+
16+
public TableExpressionParameters(CyTable exprTable, String exprGeneNameColumn, String exprDescriptionColumn, String[] exprValueColumns) {
17+
this.exprTable = Objects.requireNonNull(exprTable);
18+
this.exprGeneNameColumn = exprGeneNameColumn;
19+
this.exprDescriptionColumn = exprDescriptionColumn;
20+
this.exprValueColumns = exprValueColumns;
21+
}
22+
23+
public CyTable getExprTable() {
24+
return exprTable;
25+
}
26+
27+
public String getExprGeneNameColumn() {
28+
return exprGeneNameColumn;
29+
}
30+
31+
public String getExprDescriptionColumn() {
32+
return exprDescriptionColumn;
33+
}
34+
35+
public String[] getExprValueColumns() {
36+
return exprValueColumns;
37+
}
38+
39+
}

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package org.baderlab.csplugins.enrichmentmap.model;
22

33
import java.util.Objects;
4-
import java.util.Optional;
54
import java.util.function.Predicate;
65

76
import javax.annotation.Nullable;
@@ -16,7 +15,7 @@ public class TableParameters {
1615
private final String genesColumn;
1716
private final String pvalueColumn;
1817
private final String qvalueColumn;
19-
private final Optional<String> descriptionColumn;
18+
private final String descriptionColumn;
2019

2120
private final @Nullable Predicate<CyRow> filter;
2221

@@ -35,7 +34,7 @@ public TableParameters(
3534
this.genesColumn = Objects.requireNonNull(genesColumn);
3635
this.pvalueColumn = pvalueColumn;
3736
this.qvalueColumn = qvalueColumn;
38-
this.descriptionColumn = Optional.ofNullable(descriptionColumn);
37+
this.descriptionColumn = descriptionColumn;
3938
this.filter = filter;
4039
}
4140

@@ -59,7 +58,7 @@ public String getQvalueColumn() {
5958
return qvalueColumn;
6059
}
6160

62-
public Optional<String> getDescriptionColumn() {
61+
public String getDescriptionColumn() {
6362
return descriptionColumn;
6463
}
6564

EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/parsers/LoadEnrichmentsFromTableTask.java

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -62,29 +62,28 @@ public void run(TaskMonitor taskMonitor) {
6262
qvalue = 1.0;
6363

6464
// Skip row if data is invalid in any way
65-
if(genes == null || genes.isEmpty() || name == null || name.isEmpty())
66-
continue;
67-
68-
String description = null;
69-
if(tableParams.getDescriptionColumn().isPresent()) {
70-
description = row.get(tableParams.getDescriptionColumn().get(), String.class);
71-
}
72-
73-
// Build the GeneSet object
74-
ImmutableSet.Builder<Integer> builder = ImmutableSet.builder();
75-
76-
for(String gene : genes) {
77-
Integer hash = map.addGene(gene);
78-
if(hash != null)
79-
builder.add(hash);
65+
if(!(genes == null || genes.isEmpty() || name == null || name.isEmpty())) {
66+
String description = null;
67+
if(tableParams.getDescriptionColumn() != null) {
68+
description = row.get(tableParams.getDescriptionColumn(), String.class);
69+
}
70+
71+
// Build the GeneSet object
72+
ImmutableSet.Builder<Integer> builder = ImmutableSet.builder();
73+
74+
for(String gene : genes) {
75+
Integer hash = map.addGene(gene);
76+
if(hash != null)
77+
builder.add(hash);
78+
}
79+
80+
GeneSet gs = new GeneSet(name, description, builder.build());
81+
int gsSize = gs.getGenes().size();
82+
genesets.put(name, gs);
83+
84+
GenericResult result = new GenericResult(name, description, pvalue, gsSize, qvalue);
85+
enrichments.getEnrichments().put(name, result);
8086
}
81-
82-
GeneSet gs = new GeneSet(name, description, builder.build());
83-
int gsSize = gs.getGenes().size();
84-
genesets.put(name, gs);
85-
86-
GenericResult result = new GenericResult(name, description, pvalue, gsSize, qvalue);
87-
enrichments.getEnrichments().put(name, result);
8887
}
8988
tm.inc();
9089
}

0 commit comments

Comments
 (0)