Details
-
Type:
Task
-
Status: Closed (View Workflow)
-
Priority:
Major
-
Resolution: Done
-
Affects Version/s: None
-
Fix Version/s: 10.1.0
-
Labels:None
-
Story Points:5
-
Epic Link:
-
Sprint:Spring 10, Summer 1
Description
Situation: A user has reported that they are unable to load USEQ files in IGB in 10.0.0. We removed USEQ support in IGB 9.1.10 (IGBF-3146).
Task: Add USEQ support back to IGB. It was removed in this pull request.
Attachments
- useqBroken.png
- 171 kB
- useqWorking.png
- 162 kB
Issue Links
- relates to
-
IGBF-3146 Remove "useq" packages from genometry bundle in IGB
-
- Closed
-
Activity
I don't think it is practical to support USEQ. I do not know if it is worthwhile to add back this support.
I was able to add back useq support in IGB by reverting the commit from IGBF-3146 and then removing some obsolete code (see this post) and updating some import statements.
Branch: https://bitbucket.org/nfreese/nowlanfork-igb/branch/IGBF-3705
I used useq test files (attached) that are included in the IGB code base from core/genometry/src/test/resources/data/useq
While testing I noticed that loading the test file chr17_H_sapiens_Mar_2006_Graph.useq caused the track name to appear multiple times in the Data Management Table (see useqBroken.png). When attempting to delete the "extra" tracks, I see the following error:
java.lang.NullPointerException: Cannot invoke "com.affymetrix.genometry.general.DataSet.getDataSetName()" because the return value of "com.affymetrix.genometry.style.ITrackStyleExtended.getFeature()" is null
This same behavior does not appear in the last version of IGB that supports useq (9.1.8). I was able to track down the cause of this behavior to a change made in IGBF-3584 (commit). The change to DataSet.java on line 253 appears to cause the issue, as reverting that specific edit appears to "fix" the issue for the useq file (see useqWorking.png).
However, the same issue does not appear for the file chr17_H_sapiens_Mar_2006_Region.useq, which loads as an annotation (in comparison to chr17_H_sapiens_Mar_2006_Graph.useq, which loads as a graph). As I am unfamiliar with the useq file format it is unclear why this issue is occurring. As we have seen no other issues with loading graph files, the issue may be a quirk of useq graph files.
To reproduce the issue:
- Fetch my branch
- Open the H_sapiens_Mar_2006 genome (it is an older human genome version)
- Navigate to chr17
- Add and load the test files (attached)
- Look for additional tracks to appear
- Attempt to delete the additional tracks
Full Stacktrace:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException: Cannot invoke "com.affymetrix.genometry.general.DataSet.getDataSetName()" because the return value of "com.affymetrix.genometry.style.ITrackStyleExtended.getFeature()" is null at com.affymetrix.igb.action.CloseTracksAction.actionPerformed(CloseTracksAction.java:44) at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1972) at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2314) at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:407) at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262) at java.desktop/javax.swing.AbstractButton.doClick(AbstractButton.java:374) at java.desktop/javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1029) at java.desktop/com.apple.laf.AquaMenuItemUI.doClick(AquaMenuItemUI.java:157) at java.desktop/javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1073) at java.desktop/java.awt.Component.processMouseEvent(Component.java:6621) at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3398) at java.desktop/java.awt.Component.processEvent(Component.java:6386) at java.desktop/java.awt.Container.processEvent(Container.java:2266) at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4996) at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2324) at java.desktop/java.awt.Component.dispatchEvent(Component.java:4828) at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4948) at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4575) at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4516) at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2310) at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2780) at java.desktop/java.awt.Component.dispatchEvent(Component.java:4828) at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:775) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:720) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:714) at java.base/java.security.AccessController.doPrivileged(AccessController.java:400) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:98) at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:747) at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745) at java.base/java.security.AccessController.doPrivileged(AccessController.java:400) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87) at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:744) at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203) at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124) at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
I have investigated the issue of two additional tracks for the useq graph dataset in the data access table, this is occurring because of the code present in GraphSymUtils, the if condition there to check for useq data and adding the strand direction at the end of the id and name doesn't check whether the id or name has the strand direction added before this results in adding two plus or minus signs at the end when getGraphState() is being called in the later part of the code which results in creating a style with no feature attached to it.
Fixed this issue by adding a condition to check whether the id or name has the strand already added, this resolves the issue and shows only a single track name row in the data access table like how it used to behave before.
Why reverting this commit IGBF-3584 (commit) made it work: when we revert this the name that's being sent to the above mentioned method is different and the if condition doesn't pass and it doesn't change the id.
Also, fixed the track removal issue that is there in the previous versions too. Before, when user removes (or deletes) the useq graph track it only removes one of the tracks either positive or negative, fixed this issue by adding logic to deete the other one too. Updated coed is available at: https://bitbucket.org/jaya-sravani/integrated-genome-browser/branch/IGBF-3705. Please review and let me know if there are any issues.
Testing using Sravani's branch on Mac.
The only issue I can find is that the chr17_H_sapiens_Mar_2006_Region.useq file is behaving oddly.
To reproduce:
- Load the H_sapiens_Mar_2006 genome
- Add the chr17_H_sapiens_Mar_2006_Region.useq file
- Go to chr17
- Click Load Data
- Remove the chr17_H_sapiens_Mar_2006_Region.useq file
- Add the chr17_H_sapiens_Mar_2006_Region.useq file back again
- Click Load Data -> the data are duplicated
To reproduce:
- Load the H_sapiens_Mar_2006 genome
- Add the chr17_H_sapiens_Mar_2006_Region.useq file
- Go to chr17
- Click Load Data
- Remove the chr17_H_sapiens_Mar_2006_Region.useq file
- Add the chr17_H_sapiens_Mar_2006_Graph.useq file
- Click Load Data -> the chr17_H_sapiens_Mar_2006_Region.useq file will add itself as a new track
Error that I am seeing:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException: Cannot invoke "com.affymetrix.genometry.general.DataSet.getDataSetName()" because "feature" is null at com.affymetrix.igb.view.load.JTableX.getToolTipText(DataManagementTable.java:293) at java.desktop/javax.swing.ToolTipManager$insideTimerAction.actionPerformed(ToolTipManager.java:693) at java.desktop/javax.swing.Timer.fireActionPerformed(Timer.java:311) at java.desktop/javax.swing.Timer$DoPostEvent.run(Timer.java:243) at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318) at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:773) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:720) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:714) at java.base/java.security.AccessController.doPrivileged(AccessController.java:400) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87) at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742) at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203) at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124) at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90) Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException: Cannot invoke "com.affymetrix.genometry.general.DataSet.getDataSetName()" because the return value of "com.affymetrix.genometry.style.ITrackStyleExtended.getFeature()" is null at com.affymetrix.igb.action.CloseTracksAction.actionPerformed(CloseTracksAction.java:44) at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1972) at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2314) at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:407) at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262) at java.desktop/javax.swing.AbstractButton.doClick(AbstractButton.java:374) at java.desktop/javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1029) at java.desktop/com.apple.laf.AquaMenuItemUI.doClick(AquaMenuItemUI.java:157) at java.desktop/javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1073) at java.desktop/java.awt.Component.processMouseEvent(Component.java:6621) at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3398) at java.desktop/java.awt.Component.processEvent(Component.java:6386) at java.desktop/java.awt.Container.processEvent(Container.java:2266) at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4996) at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2324) at java.desktop/java.awt.Component.dispatchEvent(Component.java:4828) at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4948) at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4575) at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4516) at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2310) at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2780) at java.desktop/java.awt.Component.dispatchEvent(Component.java:4828) at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:775) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:720) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:714) at java.base/java.security.AccessController.doPrivileged(AccessController.java:400) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:98) at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:747) at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745) at java.base/java.security.AccessController.doPrivileged(AccessController.java:400) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87) at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:744) at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203) at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124) at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Investigated and fixed the issue, previously when adding the removal code for the other track didn't consider this region file type for useq so it was satisfying a condition in the code that was written to remove both the tracks for the useq graph file which led to not deleting the syms and removing the tier and track alone. Changed the code accordingly, now working as expected. Updated code is present at the same branch: https://bitbucket.org/jaya-sravani/integrated-genome-browser/branch/IGBF-3705. Please review and let me know if there are any issues.
Tested on updated branch, issue is fixed, ready for pull request.
Raised a Pull request: https://bitbucket.org/lorainelab/integrated-genome-browser/pull-requests/1019. Please review and let me know if there are any issues.
PR is merged. Installers are built and deployed to the "early access" section of bioviz.org web site.
Question for the team: After testing, could we let the user know about the updated IGB version?
Ann Loraine - Yes that is a good idea, I will reach out to them and let them know once it is tested. It would be great if they could try it out as they seem to be very familiar with useq.
Tested using early-access installer on Mac.
I was able to load and then remove data from the three test files in IGB successfully with no errors/warnings in the log.
I have also messaged the IGB user through the IGB help desk to let them know about USEQ support in IGB Early Access.
Closing ticket.
User conversation: