Skip to content

Commit 382e654

Browse files
committed
Filtering edges based on their datasets. Minor refactoring.
1 parent 1347610 commit 382e654

File tree

1 file changed

+169
-129
lines changed

1 file changed

+169
-129
lines changed

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

Lines changed: 169 additions & 129 deletions
Original file line numberDiff line numberDiff line change
@@ -604,98 +604,6 @@ private void filterNodesAndEdges(EMViewControlPanel viewPanel, EnrichmentMap map
604604
timer.start();
605605
}
606606

607-
private Set<CyNode> getFilteredInNodes(SliderBarPanel sliderPanel, EnrichmentMap map, CyNetworkView networkView,
608-
Set<String> columnNames, Set<Long> dataSetNodes) {
609-
Set<CyNode> nodes = new HashSet<>();
610-
611-
Double maxCutoff = (double) sliderPanel.getValue() / sliderPanel.getPrecision();
612-
Double minCutoff = (double) sliderPanel.getMin() / sliderPanel.getPrecision();
613-
614-
CyNetwork network = networkView.getModel();
615-
CyTable table = network.getDefaultNodeTable();
616-
617-
EMCreationParameters params = map.getParams();
618-
619-
// Get the prefix of the current network
620-
final String prefix = params.getAttributePrefix();
621-
622-
// Go through all the existing nodes to see if we need to hide any new nodes.
623-
for (CyNode n : network.getNodeList()) {
624-
boolean show = true;
625-
CyRow row = network.getRow(n);
626-
627-
if (!dataSetNodes.contains(n.getSUID())) {
628-
show = false;
629-
} else if (table.getColumn(prefix + NODE_GS_TYPE) != null
630-
&& NODE_GS_TYPE_ENRICHMENT.equalsIgnoreCase(row.get(prefix + NODE_GS_TYPE, String.class))) {
631-
// Skip Node if it's not an Enrichment-Geneset (but e.g. a Signature-Hub)...
632-
for (String colName : columnNames) {
633-
if (table.getColumn(colName) == null)
634-
continue; // Ignore this column name (maybe the user deleted it)
635-
636-
Double value = row.get(colName, Double.class);
637-
638-
// Possible that there isn't a cutoff value for this geneset
639-
if (value == null)
640-
continue;
641-
642-
if (value >= minCutoff && value <= maxCutoff) {
643-
show = true;
644-
break;
645-
} else {
646-
show = false;
647-
}
648-
}
649-
}
650-
651-
if (show)
652-
nodes.add(n);
653-
}
654-
655-
return nodes;
656-
}
657-
658-
private Set<CyEdge> getFilteredInEdges(SliderBarPanel sliderPanel, EnrichmentMap map, CyNetworkView networkView,
659-
Set<String> columnNames) {
660-
Set<CyEdge> edges = new HashSet<>();
661-
662-
JSlider slider = sliderPanel.getSlider();
663-
Double maxCutoff = slider.getMaximum() / sliderPanel.getPrecision();
664-
Double minCutoff = slider.getValue() / sliderPanel.getPrecision();
665-
666-
CyNetwork network = networkView.getModel();
667-
CyTable table = network.getDefaultEdgeTable();
668-
669-
// Go through all the existing edges to see if we need to hide any new ones.
670-
for (CyEdge e : network.getEdgeList()) {
671-
boolean show = true;
672-
CyRow row = network.getRow(e);
673-
674-
for (String colName : columnNames) {
675-
if (table.getColumn(colName) == null)
676-
continue; // Ignore this column name (maybe the user deleted it)
677-
678-
Double value = row.get(colName, Double.class);
679-
680-
// Possible that there isn't value for this interaction
681-
if (value == null)
682-
continue;
683-
684-
if (value >= minCutoff && value <= maxCutoff) {
685-
show = true;
686-
break;
687-
} else {
688-
show = false;
689-
}
690-
}
691-
692-
if (show)
693-
edges.add(e);
694-
}
695-
696-
return edges;
697-
}
698-
699607
private JPopupMenu getOptionsMenu() {
700608
final JPopupMenu menu = new JPopupMenu();
701609

@@ -753,31 +661,184 @@ public FilterActionListener(EMViewControlPanel viewPanel, EnrichmentMap map, CyN
753661

754662
@Override
755663
public void actionPerformed(ActionEvent evt) {
756-
Set<CyNode> filteredInNodes = new HashSet<>();
757-
Set<CyEdge> filteredInEdges = Collections.emptySet();
758-
664+
CyNetwork net = netView.getModel();
759665
EMCreationParameters params = map.getParams();
760666
Set<AbstractDataSet> selectedDataSets = viewPanel.getCheckedDataSets();
667+
668+
// Find nodes and edges that must be displayed
669+
Set<CyNode> filteredInNodes = getFilteredInNodes(net, params, selectedDataSets);
670+
Set<CyEdge> filteredInEdges = getFilteredInEdges(net, params, selectedDataSets);
671+
672+
// Hide or show nodes and their edges
673+
showOrHideNodes(net, filteredInNodes);
674+
showOrHideEdges(net, filteredInNodes, filteredInEdges);
675+
netView.updateView();
676+
677+
Timer timer = filterTimers.get(netView);
678+
679+
if (timer != null)
680+
timer.stop();
681+
}
682+
683+
private Set<CyNode> getFilteredInNodes(CyNetwork net, EMCreationParameters params,
684+
Set<AbstractDataSet> selectedDataSets) {
761685
Set<Long> dataSetNodes = EnrichmentMap.getNodesUnion(selectedDataSets);
762686

763687
// Only p or q value, but not both!
764688
if (viewPanel.getPValueSliderPanel() != null && viewPanel.getPValueSliderPanel().isVisible()) {
765689
Set<String> columnNames = getFilteredColumnNames(params.getPValueColumnNames(), selectedDataSets);
766-
filteredInNodes.addAll(
767-
getFilteredInNodes(viewPanel.getPValueSliderPanel(), map, netView, columnNames, dataSetNodes));
768-
} else if (viewPanel.getQValueSliderPanel() != null && viewPanel.getQValueSliderPanel().isVisible()) {
690+
691+
return getFilteredInNodes(viewPanel.getPValueSliderPanel(), map, netView, columnNames, dataSetNodes);
692+
}
693+
694+
if (viewPanel.getQValueSliderPanel() != null && viewPanel.getQValueSliderPanel().isVisible()) {
769695
Set<String> columnNames = getFilteredColumnNames(params.getQValueColumnNames(), selectedDataSets);
770-
filteredInNodes.addAll(
771-
getFilteredInNodes(viewPanel.getQValueSliderPanel(), map, netView, columnNames, dataSetNodes));
696+
697+
return getFilteredInNodes(viewPanel.getQValueSliderPanel(), map, netView, columnNames, dataSetNodes);
772698
}
773-
699+
700+
Set<CyNode> filteredInNodes = new HashSet<>();
701+
702+
for (CyNode n : net.getNodeList()) {
703+
if (dataSetNodes.contains(n.getSUID()))
704+
filteredInNodes.add(n);
705+
}
706+
707+
return filteredInNodes;
708+
}
709+
710+
private Set<CyEdge> getFilteredInEdges(CyNetwork net, EMCreationParameters params,
711+
Set<AbstractDataSet> selectedDataSets) {
712+
Set<Long> dataSetEdges = EnrichmentMap.getEdgesUnion(selectedDataSets);
713+
774714
if (viewPanel.getSimilaritySliderPanel() != null)
775-
filteredInEdges = getFilteredInEdges(viewPanel.getSimilaritySliderPanel(), map, netView,
776-
params.getSimilarityCutoffColumnNames());
715+
return getFilteredInEdges(viewPanel.getSimilaritySliderPanel(), map, netView,
716+
params.getSimilarityCutoffColumnNames(), dataSetEdges);
777717

778-
CyNetwork net = netView.getModel();
718+
Set<CyEdge> filteredInEdges = new HashSet<>();
779719

780-
// Hide or show nodes and their edges
720+
for (CyEdge e : net.getEdgeList()) {
721+
if (dataSetEdges.contains(e.getSUID()))
722+
filteredInEdges.add(e);
723+
}
724+
725+
return filteredInEdges;
726+
}
727+
728+
private Set<CyNode> getFilteredInNodes(SliderBarPanel sliderPanel, EnrichmentMap map, CyNetworkView networkView,
729+
Set<String> columnNames, Set<Long> dataSetNodes) {
730+
Set<CyNode> nodes = new HashSet<>();
731+
732+
Double maxCutoff = (double) sliderPanel.getValue() / sliderPanel.getPrecision();
733+
Double minCutoff = (double) sliderPanel.getMin() / sliderPanel.getPrecision();
734+
735+
CyNetwork network = networkView.getModel();
736+
CyTable table = network.getDefaultNodeTable();
737+
738+
EMCreationParameters params = map.getParams();
739+
740+
// Get the prefix of the current network
741+
final String prefix = params.getAttributePrefix();
742+
743+
// Go through all the existing nodes to see if we need to hide any new nodes.
744+
for (CyNode n : network.getNodeList()) {
745+
boolean show = true;
746+
CyRow row = network.getRow(n);
747+
748+
if (!dataSetNodes.contains(n.getSUID())) {
749+
show = false;
750+
} else if (table.getColumn(prefix + NODE_GS_TYPE) != null
751+
&& NODE_GS_TYPE_ENRICHMENT.equalsIgnoreCase(row.get(prefix + NODE_GS_TYPE, String.class))) {
752+
// Skip Node if it's not an Enrichment-Geneset (but e.g. a Signature-Hub)...
753+
for (String colName : columnNames) {
754+
if (table.getColumn(colName) == null)
755+
continue; // Ignore this column name (maybe the user deleted it)
756+
757+
Double value = row.get(colName, Double.class);
758+
759+
// Possible that there isn't a cutoff value for this geneset
760+
if (value == null)
761+
continue;
762+
763+
if (value >= minCutoff && value <= maxCutoff) {
764+
show = true;
765+
break;
766+
} else {
767+
show = false;
768+
}
769+
}
770+
}
771+
772+
if (show)
773+
nodes.add(n);
774+
}
775+
776+
return nodes;
777+
}
778+
779+
private Set<CyEdge> getFilteredInEdges(SliderBarPanel sliderPanel, EnrichmentMap map, CyNetworkView networkView,
780+
Set<String> columnNames, Set<Long> dataSetEdges) {
781+
Set<CyEdge> edges = new HashSet<>();
782+
783+
JSlider slider = sliderPanel.getSlider();
784+
Double maxCutoff = slider.getMaximum() / sliderPanel.getPrecision();
785+
Double minCutoff = slider.getValue() / sliderPanel.getPrecision();
786+
787+
CyNetwork network = networkView.getModel();
788+
CyTable table = network.getDefaultEdgeTable();
789+
790+
// Go through all the existing edges to see if we need to hide any new ones.
791+
for (CyEdge e : network.getEdgeList()) {
792+
boolean show = true;
793+
794+
if (!dataSetEdges.contains(e.getSUID())) {
795+
show = false;
796+
} else {
797+
CyRow row = network.getRow(e);
798+
799+
for (String colName : columnNames) {
800+
if (table.getColumn(colName) == null)
801+
continue; // Ignore this column name (maybe the user deleted it)
802+
803+
Double value = row.get(colName, Double.class);
804+
805+
// Possible that there isn't value for this interaction
806+
if (value == null)
807+
continue;
808+
809+
if (value >= minCutoff && value <= maxCutoff) {
810+
show = true;
811+
break;
812+
} else {
813+
show = false;
814+
}
815+
}
816+
}
817+
818+
if (show)
819+
edges.add(e);
820+
}
821+
822+
return edges;
823+
}
824+
825+
private Set<String> getFilteredColumnNames(Set<String> columnNames, Collection<AbstractDataSet> dataSets) {
826+
Set<String> filteredNames = new HashSet<>();
827+
828+
for (String name : columnNames) {
829+
for (AbstractDataSet ds : dataSets) {
830+
// TODO What about 2.x columns?
831+
if (name.endsWith(" (" + ds.getName() + ")")) {
832+
filteredNames.add(name);
833+
break;
834+
}
835+
}
836+
}
837+
838+
return filteredNames;
839+
}
840+
841+
private void showOrHideNodes(CyNetwork net, Set<CyNode> filteredInNodes) {
781842
for (CyNode n : net.getNodeList()) {
782843
final View<CyNode> nv = netView.getNodeView(n);
783844

@@ -820,7 +881,9 @@ public void actionPerformed(ActionEvent evt) {
820881
}
821882
}
822883
}
823-
884+
}
885+
886+
private void showOrHideEdges(CyNetwork net, Set<CyNode> filteredInNodes, Set<CyEdge> filteredInEdges) {
824887
for (CyEdge e : net.getEdgeList()) {
825888
final View<CyEdge> ev = netView.getEdgeView(e);
826889

@@ -854,29 +917,6 @@ public void actionPerformed(ActionEvent evt) {
854917
}
855918
}
856919
}
857-
858-
netView.updateView();
859-
860-
Timer timer = filterTimers.get(netView);
861-
862-
if (timer != null)
863-
timer.stop();
864-
}
865-
866-
private Set<String> getFilteredColumnNames(Set<String> columnNames, Collection<AbstractDataSet> dataSets) {
867-
Set<String> filteredNames = new HashSet<>();
868-
869-
for (String name : columnNames) {
870-
for (AbstractDataSet ds : dataSets) {
871-
// TODO What about 2.x columns?
872-
if (name.endsWith(" (" + ds.getName() + ")")) {
873-
filteredNames.add(name);
874-
break;
875-
}
876-
}
877-
}
878-
879-
return filteredNames;
880920
}
881921
}
882922
}

0 commit comments

Comments
 (0)