Skip to content

Commit a031dda

Browse files
committed
Chart data now defaults to "NES" when all datasets are GSEA and "FDR" if there are other dataset methods (there must be at least 2 datasets).
1 parent b721085 commit a031dda

File tree

2 files changed

+202
-161
lines changed

2 files changed

+202
-161
lines changed

EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/view/control/ControlPanelMediator.java

Lines changed: 198 additions & 160 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import java.util.HashSet;
1919
import java.util.List;
2020
import java.util.Map;
21+
import java.util.Optional;
2122
import java.util.Properties;
2223
import java.util.Set;
2324
import java.util.concurrent.ForkJoinPool;
@@ -36,6 +37,7 @@
3637
import org.baderlab.csplugins.enrichmentmap.model.AbstractDataSet;
3738
import org.baderlab.csplugins.enrichmentmap.model.EMCreationParameters;
3839
import org.baderlab.csplugins.enrichmentmap.model.EMDataSet;
40+
import org.baderlab.csplugins.enrichmentmap.model.EMDataSet.Method;
3941
import org.baderlab.csplugins.enrichmentmap.model.EMSignatureDataSet;
4042
import org.baderlab.csplugins.enrichmentmap.model.EnrichmentMap;
4143
import org.baderlab.csplugins.enrichmentmap.model.EnrichmentMapManager;
@@ -361,187 +363,223 @@ public void handleEvent(NetworkViewAboutToBeDestroyedEvent e) {
361363

362364
private void setCurrentNetworkView(CyNetworkView netView) {
363365
invokeOnEDT(() -> {
366+
EMViewControlPanel viewPanel = null;
364367
updating = true;
365368

366369
try {
367370
if (netView != null && !getControlPanel().contains(netView))
368-
addNetworkView(netView);
371+
viewPanel = addNetworkView(netView);
369372

370373
getControlPanel().update(netView);
371374
} finally {
372375
updating = false;
373376
}
377+
378+
if (viewPanel != null)
379+
setDefaults(viewPanel, emManager.getEnrichmentMap(netView.getModel().getSUID()));
374380
});
375381
}
376382

383+
/**
384+
* Call this method on the EDT only!
385+
*/
386+
private EMViewControlPanel addNetworkView(CyNetworkView netView) {
387+
EMViewControlPanel viewPanel = null;
388+
EnrichmentMap map = emManager.getEnrichmentMap(netView.getModel().getSUID());
389+
390+
// Is the new view an EnrichmentMap one?
391+
if (map != null) {
392+
viewPanel = getControlPanel().addEnrichmentMapView(netView);
393+
394+
if (viewPanel != null)
395+
addListeners(viewPanel, map);
396+
}
397+
398+
return viewPanel;
399+
}
400+
401+
/**
402+
* Add listeners to the new panel's fields.
403+
*/
377404
@SuppressWarnings("unchecked")
378-
private void addNetworkView(CyNetworkView netView) {
379-
invokeOnEDT(() -> {
380-
EnrichmentMap map = emManager.getEnrichmentMap(netView.getModel().getSUID());
405+
private void addListeners(EMViewControlPanel viewPanel, EnrichmentMap map) {
406+
CyNetworkView netView = viewPanel.getNetworkView();
407+
408+
viewPanel.getQValueRadio().addActionListener(evt -> {
409+
viewPanel.updateFilterPanel();
381410

382-
// Is the new view an EnrichmentMap one?
383-
if (map != null) {
384-
EMViewControlPanel viewPanel = getControlPanel().addEnrichmentMapView(netView);
385-
386-
if (viewPanel != null) {
387-
// Add listeners to the new panel's fields
388-
viewPanel.getQValueRadio().addActionListener(evt -> {
389-
viewPanel.updateFilterPanel();
390-
391-
if (!updating)
392-
filterNodesAndEdges(viewPanel, map);
393-
});
394-
viewPanel.getPValueRadio().addActionListener(evt -> {
395-
viewPanel.updateFilterPanel();
396-
397-
if (!updating)
398-
filterNodesAndEdges(viewPanel, map);
399-
});
400-
401-
SliderBarPanel pvSliderPanel = viewPanel.getPValueSliderPanel();
402-
SliderBarPanel qvSliderPanel = viewPanel.getQValueSliderPanel();
403-
SliderBarPanel sSliderPanel = viewPanel.getSimilaritySliderPanel();
404-
405-
if (pvSliderPanel != null)
406-
pvSliderPanel.addChangeListener(evt -> {
407-
if (!updating)
408-
filterNodesAndEdges(viewPanel, map);
409-
});
410-
if (qvSliderPanel != null)
411-
qvSliderPanel.addChangeListener(evt -> {
412-
if (!updating)
413-
filterNodesAndEdges(viewPanel, map);
414-
});
415-
if (sSliderPanel != null)
416-
sSliderPanel.addChangeListener(evt -> {
417-
if (!updating)
418-
filterNodesAndEdges(viewPanel, map);
419-
});
411+
if (!updating)
412+
filterNodesAndEdges(viewPanel, map);
413+
});
414+
viewPanel.getPValueRadio().addActionListener(evt -> {
415+
viewPanel.updateFilterPanel();
416+
417+
if (!updating)
418+
filterNodesAndEdges(viewPanel, map);
419+
});
420+
421+
SliderBarPanel pvSliderPanel = viewPanel.getPValueSliderPanel();
422+
SliderBarPanel qvSliderPanel = viewPanel.getQValueSliderPanel();
423+
SliderBarPanel sSliderPanel = viewPanel.getSimilaritySliderPanel();
424+
425+
if (pvSliderPanel != null)
426+
pvSliderPanel.addChangeListener(evt -> {
427+
if (!updating)
428+
filterNodesAndEdges(viewPanel, map);
429+
});
430+
if (qvSliderPanel != null)
431+
qvSliderPanel.addChangeListener(evt -> {
432+
if (!updating)
433+
filterNodesAndEdges(viewPanel, map);
434+
});
435+
if (sSliderPanel != null)
436+
sSliderPanel.addChangeListener(evt -> {
437+
if (!updating)
438+
filterNodesAndEdges(viewPanel, map);
439+
});
420440

421-
viewPanel.getDataSetSelector().addPropertyChangeListener("checkedData", evt -> {
422-
if (!updating) {
423-
viewPanel.updateChartDataCombo();
424-
425-
filterNodesAndEdges(viewPanel, map);
426-
ChartData data = (ChartData) viewPanel.getChartDataCombo().getSelectedItem();
427-
428-
Set<EMDataSet> oldDataSets = filterDataSets(
429-
(Collection<AbstractDataSet>) evt.getOldValue());
430-
Set<EMDataSet> newDataSets = filterDataSets(
431-
(Collection<AbstractDataSet>) evt.getNewValue());
432-
int oldSize = oldDataSets.size();
433-
int newSize = newDataSets.size();
434-
435-
// Cases where changing the number of checked datasets (Signatures excluded)
436-
// requires the style to be updated:
437-
// a) Chart data may change:
438-
boolean updateStyle = data != null && data != ChartData.NONE && oldSize != newSize;
439-
// b) Node color/shape may change:
440-
updateStyle = updateStyle || oldSize == 0 && newSize > 0;
441-
updateStyle = updateStyle || oldSize > 0 && newSize == 0;
442-
updateStyle = updateStyle || oldSize == 1 && newSize > 1;
443-
updateStyle = updateStyle || oldSize > 1 && newSize == 1;
441+
viewPanel.getDataSetSelector().addPropertyChangeListener("checkedData", evt -> {
442+
if (!updating) {
443+
viewPanel.updateChartDataCombo();
444+
445+
filterNodesAndEdges(viewPanel, map);
446+
ChartData data = (ChartData) viewPanel.getChartDataCombo().getSelectedItem();
447+
448+
Set<EMDataSet> oldDataSets = filterDataSets((Collection<AbstractDataSet>) evt.getOldValue());
449+
Set<EMDataSet> newDataSets = filterDataSets((Collection<AbstractDataSet>) evt.getNewValue());
450+
int oldSize = oldDataSets.size();
451+
int newSize = newDataSets.size();
452+
453+
// Cases where changing the number of checked datasets (Signatures excluded)
454+
// requires the style to be updated:
455+
// a) Chart data may change:
456+
boolean updateStyle = data != null && data != ChartData.NONE && oldSize != newSize;
457+
// b) Node color/shape may change:
458+
updateStyle = updateStyle || oldSize == 0 && newSize > 0;
459+
updateStyle = updateStyle || oldSize > 0 && newSize == 0;
460+
updateStyle = updateStyle || oldSize == 1 && newSize > 1;
461+
updateStyle = updateStyle || oldSize > 1 && newSize == 1;
444462

445-
if (updateStyle)
446-
updateVisualStyle(map, viewPanel);
447-
else
448-
netView.updateView();
449-
}
450-
});
451-
452-
viewPanel.getDataSetSelector().getAddButton().addActionListener(evt -> {
453-
postAnalysisPanelMediatorProvider.get().showDialog(viewPanel, netView);
454-
});
455-
viewPanel.getDataSetSelector().getTable().addMouseListener(new MouseAdapter() {
456-
@Override
457-
public void mousePressed(final MouseEvent e) {
458-
maybeShowContextMenu(e);
459-
}
460-
@Override
461-
public void mouseReleased(final MouseEvent e) {
462-
maybeShowContextMenu(e);
463-
}
464-
private void maybeShowContextMenu(final MouseEvent e) {
465-
if (e.isPopupTrigger()) {
466-
final JPopupMenu contextMenu = new JPopupMenu();
467-
{
468-
JMenuItem mi = new JMenuItem("Select nodes and edges from selected data sets");
469-
mi.addActionListener(evt -> selectNodesEdges(viewPanel.getNetworkView(),
470-
viewPanel.getDataSetSelector().getSelectedItems()));
471-
contextMenu.add(mi);
472-
}
473-
contextMenu.addSeparator();
474-
{
475-
Set<AbstractDataSet> selected = viewPanel.getDataSetSelector().getSelectedItems();
476-
boolean onlySignatureSelected = !selected.isEmpty();
477-
478-
for (AbstractDataSet ds : selected) {
479-
if (ds instanceof EMSignatureDataSet == false) {
480-
onlySignatureSelected = false;
481-
break;
482-
}
483-
}
484-
485-
JMenuItem mi = new JMenuItem("Remove selected signature gene sets");
486-
mi.addActionListener(evt -> removeSignatureDataSets(map, viewPanel));
487-
mi.setEnabled(onlySignatureSelected);
488-
contextMenu.add(mi);
489-
}
490-
showContextMenu(contextMenu, e);
491-
}
492-
}
493-
});
494-
495-
viewPanel.getChartDataCombo().addItemListener(evt -> {
496-
if (!updating && evt.getStateChange() == ItemEvent.SELECTED) {
497-
updating = true;
498-
499-
try {
500-
viewPanel.updateChartCombos();
501-
} finally {
502-
updating = false;
503-
}
504-
505-
updateVisualStyle(map, viewPanel, true);
506-
}
507-
});
508-
viewPanel.getChartTypeCombo().addItemListener(evt -> {
509-
if (!updating && evt.getStateChange() == ItemEvent.SELECTED) {
510-
updating = true;
511-
512-
try {
513-
viewPanel.updateChartColorsCombo();
514-
viewPanel.updateChartLabelsCheck();
515-
} finally {
516-
updating = false;
463+
if (updateStyle)
464+
updateVisualStyle(map, viewPanel);
465+
else
466+
netView.updateView();
467+
}
468+
});
469+
470+
viewPanel.getDataSetSelector().getAddButton().addActionListener(evt -> {
471+
postAnalysisPanelMediatorProvider.get().showDialog(viewPanel, netView);
472+
});
473+
viewPanel.getDataSetSelector().getTable().addMouseListener(new MouseAdapter() {
474+
@Override
475+
public void mousePressed(final MouseEvent e) {
476+
maybeShowContextMenu(e);
477+
}
478+
@Override
479+
public void mouseReleased(final MouseEvent e) {
480+
maybeShowContextMenu(e);
481+
}
482+
private void maybeShowContextMenu(final MouseEvent e) {
483+
if (e.isPopupTrigger()) {
484+
final JPopupMenu contextMenu = new JPopupMenu();
485+
{
486+
JMenuItem mi = new JMenuItem("Select nodes and edges from selected data sets");
487+
mi.addActionListener(evt -> selectNodesEdges(viewPanel.getNetworkView(),
488+
viewPanel.getDataSetSelector().getSelectedItems()));
489+
contextMenu.add(mi);
490+
}
491+
contextMenu.addSeparator();
492+
{
493+
Set<AbstractDataSet> selected = viewPanel.getDataSetSelector().getSelectedItems();
494+
boolean onlySignatureSelected = !selected.isEmpty();
495+
496+
for (AbstractDataSet ds : selected) {
497+
if (ds instanceof EMSignatureDataSet == false) {
498+
onlySignatureSelected = false;
499+
break;
517500
}
518-
519-
updateVisualStyle(map, viewPanel, true);
520501
}
521-
});
522-
viewPanel.getChartColorsCombo().addItemListener(evt -> {
523-
if (!updating && evt.getStateChange() == ItemEvent.SELECTED)
524-
updateVisualStyle(map, viewPanel, true);
525-
});
526-
viewPanel.getShowChartLabelsCheck().addActionListener(evt -> {
527-
if (!updating)
528-
updateVisualStyle(map, viewPanel, true);
529-
});
530-
viewPanel.getPublicationReadyCheck().addActionListener(evt -> {
531-
if (!updating)
532-
updateVisualStyle(map, viewPanel);
533-
});
534-
viewPanel.getResetStyleButton().addActionListener(evt -> {
535-
updateVisualStyle(map, viewPanel);
536-
});
537-
viewPanel.getSetEdgeWidthButton().addActionListener(evt -> {
538-
showEdgeWidthDialog();
539-
});
540-
541-
viewPanel.updateChartDataCombo();
502+
503+
JMenuItem mi = new JMenuItem("Remove selected signature gene sets");
504+
mi.addActionListener(evt -> removeSignatureDataSets(map, viewPanel));
505+
mi.setEnabled(onlySignatureSelected);
506+
contextMenu.add(mi);
507+
}
508+
showContextMenu(contextMenu, e);
509+
}
510+
}
511+
});
512+
513+
viewPanel.getChartDataCombo().addItemListener(evt -> {
514+
if (!updating && evt.getStateChange() == ItemEvent.SELECTED) {
515+
updating = true;
516+
517+
try {
518+
viewPanel.updateChartCombos();
519+
} finally {
520+
updating = false;
521+
}
522+
523+
updateVisualStyle(map, viewPanel, true);
524+
}
525+
});
526+
viewPanel.getChartTypeCombo().addItemListener(evt -> {
527+
if (!updating && evt.getStateChange() == ItemEvent.SELECTED) {
528+
updating = true;
529+
530+
try {
531+
viewPanel.updateChartColorsCombo();
532+
viewPanel.updateChartLabelsCheck();
533+
} finally {
534+
updating = false;
542535
}
536+
537+
updateVisualStyle(map, viewPanel, true);
543538
}
544539
});
540+
viewPanel.getChartColorsCombo().addItemListener(evt -> {
541+
if (!updating && evt.getStateChange() == ItemEvent.SELECTED)
542+
updateVisualStyle(map, viewPanel, true);
543+
});
544+
viewPanel.getShowChartLabelsCheck().addActionListener(evt -> {
545+
if (!updating)
546+
updateVisualStyle(map, viewPanel, true);
547+
});
548+
viewPanel.getPublicationReadyCheck().addActionListener(evt -> {
549+
if (!updating)
550+
updateVisualStyle(map, viewPanel);
551+
});
552+
viewPanel.getResetStyleButton().addActionListener(evt -> {
553+
updateVisualStyle(map, viewPanel);
554+
});
555+
viewPanel.getSetEdgeWidthButton().addActionListener(evt -> {
556+
showEdgeWidthDialog();
557+
});
558+
559+
viewPanel.updateChartDataCombo();
560+
}
561+
562+
/**
563+
* Call this method on the EDT only!
564+
*/
565+
private void setDefaults(EMViewControlPanel viewPanel, EnrichmentMap map) {
566+
List<EMDataSet> dataSets = map.getDataSetList();
567+
568+
if (dataSets.size() > 1) {
569+
ChartData chartData = ChartData.NES_VALUE; // Default for GSEA data sets
570+
EMCreationParameters params = map.getParams();
571+
572+
if (params != null && params.isFDR()) {
573+
Optional<EMDataSet> nonGsea = dataSets.stream()
574+
.filter(ds -> ds.getMethod() != Method.GSEA)
575+
.findFirst();
576+
577+
if (nonGsea.isPresent())
578+
chartData = ChartData.FDR_VALUE; // Default for other data sets
579+
}
580+
581+
viewPanel.getChartDataCombo().setSelectedItem(chartData);
582+
}
545583
}
546584

547585
@AfterInjection

0 commit comments

Comments
 (0)