Details
-
Type:
Task
-
Status: Closed (View Workflow)
-
Priority:
Major
-
Resolution: Done
-
Affects Version/s: None
-
Fix Version/s: 10.2.0
-
Labels:None
-
Story Points:1
-
Epic Link:
-
Sprint:Spring 3, Spring 4, Spring 5, Spring 6
Description
Situation: The UB samtag represents the chromium molecular barcode sequence that is error-corrected. I would like to be able to filter/color by this tag.
Task Add UB to list of Sam Tag options.
Attachments
Issue Links
- relates to
-
IGBF-3942 Add the ability to add multiple values for Color by
-
- Closed
-
Activity
Reviewed the commit, code changes look good. Tested it as well, working the same as before the changes.
Added UB and MI to the available tag list. See commit
While adding the tags to the list an error was discovered: no matter what tag user selects only CR tag was being selected. It was typo in the variable name: "tags" instead of "tag". In the process of finding this error, the code was refactored and the list of tags was simplified. See branch
Testing protocol:
Add mouse scRNA-seq quickload to the Data Sources:
- Download and unzip the file attached to this ticket.
- Open the unzipped folder and copy the path of the quickload folder.
- Go to IGB and press Ctrl+P to open the Preferences window.
- Select the Data Sources tab and click on the Add button.
- Add 5k_Mouse to the Name field and paste the path from 2. in URL field
- Check the URL looks like this: file:/C:/Users/KarthikRaveendran/BitbucketProjects/scRNA-seq/Quickload/5k_Mouse\quickload
- Press the submit button and check if the data source is added without errors
- Close the Preferences window.
Load the data:
- Expand the 5k_Mouse folder in Available Data window and choose the only file.
- Make sure the Genome Version is M_musculus_Jun_2020
- Before loading the file, Search of Aff3 gene and click on Load Data
- Right-click on the track name and click on Optimize Track height
Get some SAMTag values for testing:
- Right-click a read and follow these steps:
- Look for CR, CB, MI and UB tag and copy the values.
- Paste it separately in a text file for each tag semi-colon separated.
- Repeat these steps a few times.
(eg. CR: TCGGTAATCTGCGGCA;TCGGTAATCTGCGGCA;GCCAAATGTCTGATTG;GTACTTTAGGTAGCTC;TAAGCGTAGGAGTACC
. CB: TCGGTAATCTGCGGCA-1;TCGGTAATCTGCGGCA-1;GCCAAATGTCTGATTG-1;GTACTTTAGGTAGCTC-1;TAAGCGTAGGAGTACC-1
MI: GCAGCGGCG;TCCTCGCTGG;TTAACTACCC;GAATTGTGTC;ACCCGGGGGT;GATAGGGGCG)
Filter and Colors:
- Right-click on the track name and select Filter...
- Choose SAMTags from the dropdown.
- Select a tag you would like to filter.
- Add the semi-colon separated tag value to the value field.
- Hit Ok and hit Ok again
- Right-click on the track name and select Color By
- Choose SAMTags from the dropdown.
- Click on Edit Tags and Color button
- Add each value separately in this row and choose a color of your choosing
- Click on Save and Apply and then OK
- Repeat for other tags you copied values for.
If you are able to filter and color the reads of your choosing the features are behaving as expected.
Fetched Karthik's branch IGBF-4119 and tested on Mac, here's what I noticed:
Overall:
- There is no MI tag listed in Selection Info no matter which read I click on. Therefore, I was unable to test the functionality of Filter by... and Color by... with that tag.
Filter by...
- A string is being added to the end of each filter in the Filter by... window that I don't think should be there. For example: Click Add, choose SAMTags, UB, CGATTGGGGC, =, OK. The tag value in the Filter by... window is listed as (tag:UB,value:CGATTGGGGC, comparator:com.affymetrix.genometry.operator.comparator.EqualMathComparisonOperator@6a410f6a). Can this instead be displayed as an actual equals sign (=)?
- Clicking the X to close out an Edit Filter window throws an error:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: class java.lang.String cannot be cast to class java.lang.Integer (java.lang.String and java.lang.Integer are in module java.base of loader 'bootstrap') at com.affymetrix.igb.util.ConfigureFilters.beginEditing(ConfigureFilters.java:268) at com.affymetrix.igb.util.ConfigureFilters.editButtonActionPerformed(ConfigureFilters.java:155) 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.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279) 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)
Color by...
- Clicking the X to close out a Color by window throws an error:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: class java.lang.String cannot be cast to class java.lang.Integer (java.lang.String and java.lang.Integer are in module java.base of loader 'bootstrap') at com.affymetrix.igb.action.ColorByAction.actionPerformed(ColorByAction.java:77) 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)
- Color by window doesn't save the values that were entered the last time it was opened, so neither the tag nor the values/colors are being remembered after closing and re-opening the Color by window. This should be fixed, it's quite annoying as a user.
- On a similar vein, the window that opens up after clicking the Edit Tags and Color button in the Color by window opens behind the Color by window. This is again quite annoying as a user, it should be opening in front of the Color by window for the user to add values to.
I have some other thoughts on the UI of these windows, but I will save that for the next round of review after these bugs are addressed.
1) The comparator string being added to the Filter window instead of the comparator value itself is an existing issue. A new ticket will be created for it.
2) There is an object type variable that is converted to Integer and when the windows for filter and color by is closed, an attempt to convert the string value that is assigned to that object variable, which throws the error seen above. It is not a blocker for the IGB but a new ticket will be created to fix it.
3) Retaining the user input is a issue that is being handled in IGBF-4098.
4) The Edit Tags and Color window appearing behind the Color by window is an issue that I am unable to replicate. I would like to discuss that with you at some point Paige Kulzer.
Once the 4 the issue is addressed, I will move the ticket to first level review. Thank you, Paige, for testing this ticket. I would indeed like a discussion on the UI and maybe we can do that after we discuss issue 4
Pull Request Submitted : https://bitbucket.org/lorainelab/integrated-genome-browser/pull-requests/1066
PR is merged into main, installers are built and copied to the early access section of the bioviz.org website.
Ready for final testing.
Can we add UR to the list of SAMtags?
Tested Karthik's branch on Mac.
Able to use UR value for Color and Filter by.
Ready for PR.
Tested using main branch installer on Mac. Filter and Color by are now displaying the "UB" and "UR" tags. All filtering and coloring functions appear to be working as expected with these new tags.
Closing this ticket!
A small code refactoring for ConfigureOptionsPanel.java was conducted. See commit