From 818c809792e06fb149946dd6e876e528d488eace Mon Sep 17 00:00:00 2001 From: jrobinso <933148+jrobinso@users.noreply.github.com> Date: Tue, 29 Aug 2023 22:50:05 -0700 Subject: [PATCH] Fix broken sashimi plot Filter sashimi plot menu to RNA-Seq experiments --- .../org/broad/igv/sam/AlignmentTrack.java | 2 +- .../org/broad/igv/sam/AlignmentTrackMenu.java | 3 ++- .../broad/igv/sam/SpliceJunctionTrack.java | 6 +++++ .../org/broad/igv/sashimi/SashimiPlot.java | 22 ++++++++++++------- 4 files changed, 23 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/broad/igv/sam/AlignmentTrack.java b/src/main/java/org/broad/igv/sam/AlignmentTrack.java index 0af84ef622..1c8fa08b10 100644 --- a/src/main/java/org/broad/igv/sam/AlignmentTrack.java +++ b/src/main/java/org/broad/igv/sam/AlignmentTrack.java @@ -423,7 +423,7 @@ void setExperimentType(ExperimentType type) { } } - ExperimentType getExperimentType() { + public ExperimentType getExperimentType() { return experimentType; } diff --git a/src/main/java/org/broad/igv/sam/AlignmentTrackMenu.java b/src/main/java/org/broad/igv/sam/AlignmentTrackMenu.java index 25fa117d86..26cbe2dff9 100644 --- a/src/main/java/org/broad/igv/sam/AlignmentTrackMenu.java +++ b/src/main/java/org/broad/igv/sam/AlignmentTrackMenu.java @@ -162,10 +162,11 @@ class AlignmentTrackMenu extends IGVPopupMenu { addInsertionItems(insertion); } - // Sashimi plot, probably should be depdenent on experimentType (RNA) + // Sashimi plot addSeparator(); JMenuItem sashimi = new JMenuItem("Sashimi Plot"); sashimi.addActionListener(e1 -> SashimiPlot.openSashimiPlot()); + sashimi.setEnabled(alignmentTrack.getExperimentType() == AlignmentTrack.ExperimentType.RNA); add(sashimi); // Show alignments, coverage, splice junctions diff --git a/src/main/java/org/broad/igv/sam/SpliceJunctionTrack.java b/src/main/java/org/broad/igv/sam/SpliceJunctionTrack.java index be6ddec058..fa0902dbe9 100644 --- a/src/main/java/org/broad/igv/sam/SpliceJunctionTrack.java +++ b/src/main/java/org/broad/igv/sam/SpliceJunctionTrack.java @@ -33,6 +33,7 @@ import org.broad.igv.feature.SpliceJunctionFeature; import org.broad.igv.renderer.DataRange; import org.broad.igv.renderer.GraphicUtils; +import org.broad.igv.renderer.Renderer; import org.broad.igv.renderer.SpliceJunctionRenderer; import org.broad.igv.track.*; import org.broad.igv.ui.IGV; @@ -95,6 +96,11 @@ public SpliceJunctionTrack() { this.renderer = new SpliceJunctionRenderer(); } + @Override + public void setRenderer(Renderer renderer) { + this.renderer = renderer; + } + @Override public String getSample() { if (sampleId != null) { diff --git a/src/main/java/org/broad/igv/sashimi/SashimiPlot.java b/src/main/java/org/broad/igv/sashimi/SashimiPlot.java index 78e7f1b33e..c0211c34e5 100644 --- a/src/main/java/org/broad/igv/sashimi/SashimiPlot.java +++ b/src/main/java/org/broad/igv/sashimi/SashimiPlot.java @@ -49,6 +49,7 @@ import java.io.File; import java.util.List; import java.util.*; +import java.util.stream.Collectors; /** * Window for displaying sashimi style junction plot @@ -81,6 +82,8 @@ public class SashimiPlot extends JFrame implements IGVEventObserver { private static final List plotColors; + private Map junctionRendererMap; + static { ColorPalette palette = ColorUtilities.getDefaultPalette(); plotColors = Arrays.asList(palette.getColors()); @@ -110,8 +113,11 @@ public SashimiPlot(ReferenceFrame iframe, Collection a sashimiPanel.add(generateControlPanel(this.referenceFrame)); spliceJunctionTracks = new ArrayList<>(alignmentTracks.size()); + int colorInd = 0; + junctionRendererMap = new HashMap<>(); + eventBus.subscribe(ViewChange.class, this); for (AlignmentTrack alignmentTrack : alignmentTracks) { @@ -125,7 +131,9 @@ public SashimiPlot(ReferenceFrame iframe, Collection a // Override expand/collpase setting -- expanded sashimi plots make no sense spliceJunctionTrack.setDisplayMode(Track.DisplayMode.COLLAPSED); - spliceJunctionTrack.setRenderer(new SashimiJunctionRenderer()); + SashimiJunctionRenderer renderer = new SashimiJunctionRenderer(); + spliceJunctionTrack.setRenderer(renderer); + junctionRendererMap.put(spliceJunctionTrack, renderer); Color color = plotColors.get(colorInd); colorInd = (colorInd + 1) % plotColors.size(); @@ -234,7 +242,7 @@ private void initSpliceJunctionComponent(TrackComponent tra } private SashimiJunctionRenderer getRenderer(SpliceJunctionTrack spliceJunctionTrack) { - return (SashimiJunctionRenderer) spliceJunctionTrack.getRenderer(); + return junctionRendererMap.get(spliceJunctionTrack); } @Override @@ -649,13 +657,11 @@ public static void openSashimiPlot() { geneTrack = dlg.getSelectedTrack(); } - Collection alignmentTracks = new ArrayList(); - for (Track track : IGV.getInstance().getAllTracks()) { - if (track instanceof AlignmentTrack) { - alignmentTracks.add((AlignmentTrack) track); - } - } + + Collection alignmentTracks =IGV.getInstance().getAlignmentTracks().stream() + .filter(t -> t.getExperimentType() == AlignmentTrack.ExperimentType.RNA).collect(Collectors.toList()); +; if (alignmentTracks.size() > 1) { TrackSelectionDialog alDlg = new TrackSelectionDialog(IGV.getInstance().getMainFrame(), TrackSelectionDialog.SelectionMode.MULTIPLE, alignmentTracks);