use of org.baderlab.csplugins.enrichmentmap.model.EMDataSet in project EnrichmentMapApp by BaderLab.
the class ControlPanelMediator method addNetworkView.
@SuppressWarnings("unchecked")
private void addNetworkView(CyNetworkView netView) {
invokeOnEDT(() -> {
EnrichmentMap map = emManager.getEnrichmentMap(netView.getModel().getSUID());
// Is the new view an EnrichmentMap one?
if (map != null) {
EMViewControlPanel viewPanel = getControlPanel().addEnrichmentMapView(netView);
if (viewPanel != null) {
// Add listeners to the new panel's fields
viewPanel.getQValueRadio().addActionListener(evt -> {
viewPanel.updateFilterPanel();
if (!updating)
filterNodesAndEdges(viewPanel, map);
});
viewPanel.getPValueRadio().addActionListener(evt -> {
viewPanel.updateFilterPanel();
if (!updating)
filterNodesAndEdges(viewPanel, map);
});
SliderBarPanel pvSliderPanel = viewPanel.getPValueSliderPanel();
SliderBarPanel qvSliderPanel = viewPanel.getQValueSliderPanel();
SliderBarPanel sSliderPanel = viewPanel.getSimilaritySliderPanel();
if (pvSliderPanel != null)
pvSliderPanel.addChangeListener(evt -> {
if (!updating)
filterNodesAndEdges(viewPanel, map);
});
if (qvSliderPanel != null)
qvSliderPanel.addChangeListener(evt -> {
if (!updating)
filterNodesAndEdges(viewPanel, map);
});
if (sSliderPanel != null)
sSliderPanel.addChangeListener(evt -> {
if (!updating)
filterNodesAndEdges(viewPanel, map);
});
viewPanel.getDataSetSelector().addPropertyChangeListener("checkedData", evt -> {
if (!updating) {
viewPanel.updateChartDataCombo();
filterNodesAndEdges(viewPanel, map);
ChartData data = (ChartData) viewPanel.getChartDataCombo().getSelectedItem();
Set<EMDataSet> oldDataSets = filterDataSets((Collection<AbstractDataSet>) evt.getOldValue());
Set<EMDataSet> newDataSets = filterDataSets((Collection<AbstractDataSet>) evt.getNewValue());
int oldSize = oldDataSets.size();
int newSize = newDataSets.size();
boolean updateStyle = data != null && data != ChartData.NONE && oldSize != newSize;
updateStyle = updateStyle || oldSize == 0 && newSize > 0;
updateStyle = updateStyle || oldSize > 0 && newSize == 0;
updateStyle = updateStyle || oldSize == 1 && newSize > 1;
updateStyle = updateStyle || oldSize > 1 && newSize == 1;
if (updateStyle)
updateVisualStyle(map, viewPanel);
else
netView.updateView();
}
});
viewPanel.getDataSetSelector().getAddButton().addActionListener(evt -> {
postAnalysisPanelMediatorProvider.get().showDialog(viewPanel, netView);
});
viewPanel.getDataSetSelector().getRemoveButton().addActionListener(evt -> {
removeSignatureDataSets(map, viewPanel);
});
viewPanel.getChartDataCombo().addItemListener(evt -> {
if (!updating && evt.getStateChange() == ItemEvent.SELECTED) {
updating = true;
try {
viewPanel.updateChartCombos();
} finally {
updating = false;
}
updateVisualStyle(map, viewPanel, true);
}
});
viewPanel.getChartTypeCombo().addItemListener(evt -> {
if (!updating && evt.getStateChange() == ItemEvent.SELECTED) {
updating = true;
try {
viewPanel.updateChartColorsCombo();
viewPanel.updateChartLabelsCheck();
} finally {
updating = false;
}
updateVisualStyle(map, viewPanel, true);
}
});
viewPanel.getChartColorsCombo().addItemListener(evt -> {
if (!updating && evt.getStateChange() == ItemEvent.SELECTED)
updateVisualStyle(map, viewPanel, true);
});
viewPanel.getShowChartLabelsCheck().addActionListener(evt -> {
if (!updating)
updateVisualStyle(map, viewPanel, true);
});
viewPanel.getPublicationReadyCheck().addActionListener(evt -> {
if (!updating)
updateVisualStyle(map, viewPanel);
});
viewPanel.getResetStyleButton().addActionListener(evt -> {
updateVisualStyle(map, viewPanel);
});
viewPanel.getSetEdgeWidthButton().addActionListener(evt -> {
showEdgeWidthDialog();
});
viewPanel.updateChartDataCombo();
}
}
});
}
use of org.baderlab.csplugins.enrichmentmap.model.EMDataSet in project EnrichmentMapApp by BaderLab.
the class HierarchicalClusterTask method cluster.
public Map<Integer, RankValue> cluster(TaskMonitor tm) {
if (tm == null)
tm = new NullTaskMonitor();
tm.setTitle("Hierarchical Cluster");
tm.setStatusMessage("Loading expression data");
List<double[]> clusteringExpressionSet = new ArrayList<>(genes.size());
ArrayList<Integer> labels = new ArrayList<>(genes.size());
List<String> names = new ArrayList<>(genes.size());
List<EMDataSet> dataSets = map.getDataSetList();
final int expressionCount = getTotalExpressionCount(dataSets);
for (int geneId : genes) {
// values all default to 0.0
double[] vals = new double[expressionCount];
int valsIndex = 0;
boolean found = false;
String name = null;
for (EMDataSet dataSet : dataSets) {
GeneExpressionMatrix expressionSets = dataSet.getExpressionSets();
int numConditions = expressionSets.getNumConditions() - 2;
GeneExpression geneExpression = expressionSets.getExpressionMatrix().get(geneId);
if (geneExpression != null) {
found = true;
name = geneExpression.getName();
double[] expression = geneExpression.getExpression();
System.arraycopy(expression, 0, vals, valsIndex, expression.length);
}
valsIndex += numConditions;
}
if (found) {
clusteringExpressionSet.add(vals);
labels.add(geneId);
names.add(name);
}
}
tm.setStatusMessage("Calculating Distance");
DistanceMatrix distanceMatrix = new DistanceMatrix(genes.size());
distanceMatrix.calcDistances(clusteringExpressionSet, distanceMetric);
distanceMatrix.setLabels(labels);
tm.setStatusMessage("Clustering");
AvgLinkHierarchicalClustering clusterResult = new AvgLinkHierarchicalClustering(distanceMatrix);
//check to see if there more than 1000 genes, if there are use eisen ordering otherwise use bar-joseph
clusterResult.setOptimalLeafOrdering(genes.size() <= 1000);
clusterResult.run();
tm.setStatusMessage("Ranking");
Map<Integer, RankValue> ranks = new HashMap<>();
int[] order = clusterResult.getLeafOrder();
for (int i = 0; i < order.length; i++) {
Integer geneId = labels.get(order[i]);
ranks.put(geneId, new RankValue(i + 1, null, false));
}
tm.setStatusMessage("");
return ranks;
}
use of org.baderlab.csplugins.enrichmentmap.model.EMDataSet in project EnrichmentMapApp by BaderLab.
the class ComputeSimilarityTaskParallel method startComputeSimilarities.
private Map<SimilarityKey, GenesetSimilarity> startComputeSimilarities(TaskMonitor tm, ExecutorService executor, boolean distinct, boolean compound) {
Set<String> names = map.getAllGeneSetOfInterestNames();
Map<String, Set<Integer>> unionedGenesets = compound ? map.unionAllGeneSetsOfInterest() : null;
DiscreteTaskMonitor taskMonitor = discreteTaskMonitor(tm, names.size());
String edgeType = map.getParams().getEnrichmentEdgeType();
Map<SimilarityKey, GenesetSimilarity> similarities = new ConcurrentHashMap<>();
Collection<EMDataSet> dataSets = map.getDataSetList();
for (final String geneset1Name : names) {
// Compute similarities in batches, creating a Runnable for every similarity pair would create too many objects
executor.execute(() -> {
loop: for (final String geneset2Name : names) {
if (Thread.interrupted())
break loop;
if (geneset1Name.equalsIgnoreCase(geneset2Name))
//don't compare two identical gene sets
continue;
if (distinct) {
for (EMDataSet dataset : dataSets) {
SimilarityKey key = new SimilarityKey(geneset1Name, geneset2Name, edgeType, dataset.getName());
if (!similarities.containsKey(key)) {
Map<String, GeneSet> genesets = dataset.getGeneSetsOfInterest().getGeneSets();
GeneSet geneset1 = genesets.get(geneset1Name);
GeneSet geneset2 = genesets.get(geneset2Name);
if (geneset1 != null && geneset2 != null) {
// returns null if the similarity coefficient doesn't pass the cutoff
GenesetSimilarity similarity = computeGenesetSimilarity(map.getParams(), geneset1Name, geneset2Name, geneset1.getGenes(), geneset2.getGenes(), dataset.getName());
if (similarity != null) {
similarities.put(key, similarity);
}
}
}
}
}
if (compound) {
SimilarityKey key = new SimilarityKey(geneset1Name, geneset2Name, edgeType, null);
if (!similarities.containsKey(key)) {
Set<Integer> geneset1 = unionedGenesets.get(geneset1Name);
Set<Integer> geneset2 = unionedGenesets.get(geneset2Name);
// returns null if the similarity coefficient doesn't pass the cutoff
GenesetSimilarity similarity = computeGenesetSimilarity(map.getParams(), geneset1Name, geneset2Name, geneset1, geneset2, "compound");
if (similarity != null) {
similarities.put(key, similarity);
}
}
}
}
taskMonitor.inc();
});
}
return similarities;
}
use of org.baderlab.csplugins.enrichmentmap.model.EMDataSet in project EnrichmentMapApp by BaderLab.
the class CreateEMNetworkTask method createNodes.
private Map<String, CyNode> createNodes(CyNetwork network) {
Map<String, CyNode> nodes = new HashMap<>();
Map<String, Set<Integer>> geneSets = map.unionAllGeneSetsOfInterest();
for (String genesetName : geneSets.keySet()) {
CyNode node = network.addNode();
nodes.put(genesetName, node);
// Set common attributes
CyRow row = network.getRow(node);
row.set(CyNetwork.NAME, genesetName);
Columns.NODE_FORMATTED_NAME.set(row, prefix, null, formatLabel(genesetName));
// MKTODO why is this column needed?
Columns.NODE_NAME.set(row, prefix, null, genesetName);
Columns.NODE_GS_DESCR.set(row, prefix, null, map.findGeneSetDescription(genesetName));
Columns.NODE_GS_TYPE.set(row, prefix, null, Columns.NODE_GS_TYPE_ENRICHMENT);
Set<Integer> geneIds = geneSets.get(genesetName);
List<String> genes = geneIds.stream().map(map::getGeneFromHashKey).collect(Collectors.toList());
Columns.NODE_GENES.set(row, prefix, null, genes);
Columns.NODE_GS_SIZE.set(row, prefix, null, genes.size());
// Set attributes specific to each dataset
for (EMDataSet ds : map.getDataSetList()) {
if (ds.getGeneSetsOfInterest().getGeneSets().containsKey(genesetName))
ds.addNodeSuid(node.getSUID());
Map<String, EnrichmentResult> enrichmentResults = ds.getEnrichments().getEnrichments();
EnrichmentResult result = enrichmentResults.get(genesetName);
// if result is null it will fail both instanceof checks
if (result instanceof GSEAResult)
setGSEAResultNodeAttributes(row, ds.getName(), (GSEAResult) result);
else if (result instanceof GenericResult)
setGenericResultNodeAttributes(row, ds.getName(), (GenericResult) result);
}
}
return nodes;
}
use of org.baderlab.csplugins.enrichmentmap.model.EMDataSet in project EnrichmentMapApp by BaderLab.
the class CreateDiseaseSignatureTaskFactory method createTaskIterator.
@Override
public TaskIterator createTaskIterator() {
// Make sure that the minimum information is set in the current set of parameters
EnrichmentMap map = emManager.getEnrichmentMap(netView.getModel().getSUID());
StringBuilder errorBuilder = new StringBuilder();
checkMinimalRequirements(errorBuilder, params);
if (params.getRankTestParameters().getType().isMannWhitney() && map.getAllRanks().isEmpty())
errorBuilder.append("Mann-Whitney requires ranks. \n");
this.errors = errorBuilder.toString();
if (errors.isEmpty()) {
ControlPanelMediator controlPanelMediator = controlPanelMediatorProvider.get();
EMStyleOptions options = controlPanelMediator.createStyleOptions(netView);
CyCustomGraphics2<?> chart = controlPanelMediator.createChart(options);
List<EMDataSet> dataSetList = getDataSets(map);
TaskIterator tasks = new TaskIterator();
tasks.append(signatureTaskFactory.create(params, map, dataSetList));
tasks.append(applyStyleTaskFactory.create(options, chart, false));
return tasks;
} else {
// MKTODO not entirely sure what to do in this case, just return an empty iterator I guess...
return new TaskIterator(new AbstractTask() {
@Override
public void run(TaskMonitor taskMonitor) throws Exception {
throw new RuntimeException(errors);
}
});
}
}
Aggregations