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:10
-
Epic Link:
-
Sprint:Fall 1, Fall 2, Fall 3, Fall 4, Fall 5, Fall 6, Fall 7, Fall 8, Fall 9
Description
Currently, users can import a file with SAMtool tags values and corresponding color hex codes in two columns. This ticket is about adding functionality where users can add corresponding cluster information (cluster id/name) for each tag value as well.
For the completion of this task:
- Users must be able to import 2-column or 3-column tsv/csv/txt file
- Importing 2-column files, SAMtools tag value and color, should work exactly as it does right now.
- Anticipate potential user errors while importing and handle it.
- Importing 3-column files, includes cluster id, users should be able to choose between:
- using the feature as it is right now - color by samtools tag values such as cell barcode
- or, color by cluster ids
Attachments
Issue Links
- relates to
-
IGBF-4375 Fix Filter By window in IGB when user enters many values
-
- Closed
-
-
IGBF-4376 Fix closing of Color By window when Import window open freezes IGB
-
- Closed
-
-
IGBF-4377 Fix Color By window opening at top left of screen
-
- Closed
-
-
IGBF-4378 Fix manually entered clusters filling entire table
-
- Closed
-
-
IGBF-4379 User entered values in the Color By SAMtags should be auto-checked
-
- Closed
-
Activity
Fetched Karthik's branch and tested on my Mac. All test files used for testing will be included in the zipped file attached to this ticket for reproducibility and future testing.
Testing steps:
- Add Karthik's QL to IGB
- Open the H_sapiens_Feb_2009 genome
- From the Available Data section, add the PBMC dataset to IGB
- Navigate to the GNLY gene
- Click Load Data
- Right-click on the PBMC track name and click "Optimize stack height"
- Right-click on the PBMC track name and click "Color by..."
- From the drop-down menu, choose SAMtags
- Click Edit Tags and Color
- Import test files as desired
Issue #1: Importing a test file with only barcode and cluster information (no color information) throws an error
Test file used: pbmc_2col_no_colors.tsv
Error:
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "a" at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67) at java.base/java.lang.Integer.parseInt(Integer.java:662) at java.base/java.lang.Integer.decode(Integer.java:1450) at java.desktop/java.awt.Color.decode(Color.java:731) at com.affymetrix.igb.colorproviders.SAMtagsTable$1$1.run(SAMtagsTable.java:119) 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.pumpEventsForFilter(EventDispatchThread.java:117) at java.desktop/java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:191) at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:236) at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:234) at java.base/java.security.AccessController.doPrivileged(AccessController.java:319) at java.desktop/java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:234) at java.desktop/java.awt.Dialog.show(Dialog.java:1079) at java.desktop/java.awt.Component.show(Component.java:1728) at java.desktop/java.awt.Component.setVisible(Component.java:1675) at java.desktop/java.awt.Window.setVisible(Window.java:1036) at java.desktop/java.awt.Dialog.setVisible(Dialog.java:1015) at com.affymetrix.igb.shared.ConfigureOptionsPanel$3.actionPerformed(ConfigureOptionsPanel.java:377) 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.pumpEventsForFilter(EventDispatchThread.java:117) at java.desktop/java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:191) at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:236) at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:234) at java.base/java.security.AccessController.doPrivileged(AccessController.java:319) at java.desktop/java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:234) at java.desktop/java.awt.Dialog.show(Dialog.java:1079) at java.desktop/java.awt.Component.show(Component.java:1728) at java.desktop/java.awt.Component.setVisible(Component.java:1675) at java.desktop/java.awt.Window.setVisible(Window.java:1036) at java.desktop/java.awt.Dialog.setVisible(Dialog.java:1015) at com.affymetrix.igb.util.ConfigureOptionsDialog.showDialog(ConfigureOptionsDialog.java:123) at com.affymetrix.igb.action.ColorByAction.actionPerformed(ColorByAction.java:76) 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)
Issue #2: Scrolling to the end of the Color by table after importing a test file throws an error
Notes: This appears to be a new issue. I fetched what I believe is the previous commit (IGBF-4195) and did not encounter this issue.
Error:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: class java.lang.String cannot be cast to class java.lang.Boolean (java.lang.String and java.lang.Boolean are in module java.base of loader 'bootstrap') at java.desktop/javax.swing.JTable$BooleanRenderer.getTableCellRendererComponent(JTable.java:5480) at com.jidesoft.grid.JideTable.prepareRenderer(Unknown Source) at com.affymetrix.igb.swing.jide.StyledJTable.prepareRenderer(StyledJTable.java:137) at com.jidesoft.plaf.basic.BasicJideTableUIDelegate.paintCell(Unknown Source) at com.jidesoft.plaf.basic.BasicJideTableUIDelegate.a(Unknown Source) at com.jidesoft.plaf.basic.BasicJideTableUIDelegate.paint(Unknown Source) at com.jidesoft.plaf.aqua.AquaJideTableUI.paint(Unknown Source) at java.desktop/javax.swing.plaf.ComponentUI.update(ComponentUI.java:161) at java.desktop/javax.swing.JComponent.paintComponent(JComponent.java:852) at java.desktop/javax.swing.JComponent.paint(JComponent.java:1128) at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:961) at java.desktop/javax.swing.JComponent.paint(JComponent.java:1137) at java.desktop/javax.swing.JViewport.paint(JViewport.java:736) at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:961) at java.desktop/javax.swing.JComponent.paint(JComponent.java:1137) at java.desktop/javax.swing.JComponent.paintToOffscreen(JComponent.java:5318) at java.desktop/javax.swing.RepaintManager$PaintManager.paintDoubleBufferedImpl(RepaintManager.java:1656) at java.desktop/javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1631) at java.desktop/javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1569) at java.desktop/javax.swing.RepaintManager.paint(RepaintManager.java:1336) at java.desktop/javax.swing.JComponent._paintImmediately(JComponent.java:5266) at java.desktop/javax.swing.JComponent.paintImmediately(JComponent.java:5076) at java.desktop/javax.swing.RepaintManager$4.run(RepaintManager.java:878) at java.desktop/javax.swing.RepaintManager$4.run(RepaintManager.java:861) at java.base/java.security.AccessController.doPrivileged(AccessController.java:400) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87) at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:861) at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:834) at java.desktop/javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:784) at java.desktop/javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1897) 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.pumpEventsForFilter(EventDispatchThread.java:117) at java.desktop/java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:191) at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:236) at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:234) at java.base/java.security.AccessController.doPrivileged(AccessController.java:319) at java.desktop/java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:234) at java.desktop/java.awt.Dialog.show(Dialog.java:1079) at java.desktop/java.awt.Component.show(Component.java:1728) at java.desktop/java.awt.Component.setVisible(Component.java:1675) at java.desktop/java.awt.Window.setVisible(Window.java:1036) at java.desktop/java.awt.Dialog.setVisible(Dialog.java:1015) at com.affymetrix.igb.shared.ConfigureOptionsPanel$3.actionPerformed(ConfigureOptionsPanel.java:377) 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.pumpEventsForFilter(EventDispatchThread.java:117) at java.desktop/java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:191) at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:236) at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:234) at java.base/java.security.AccessController.doPrivileged(AccessController.java:319) at java.desktop/java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:234) at java.desktop/java.awt.Dialog.show(Dialog.java:1079) at java.desktop/java.awt.Component.show(Component.java:1728) at java.desktop/java.awt.Component.setVisible(Component.java:1675) at java.desktop/java.awt.Window.setVisible(Window.java:1036) at java.desktop/java.awt.Dialog.setVisible(Dialog.java:1015) at com.affymetrix.igb.util.ConfigureOptionsDialog.showDialog(ConfigureOptionsDialog.java:123) at com.affymetrix.igb.action.ColorByAction.actionPerformed(ColorByAction.java:76) 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)
Issue #3: The Clear All button is only clearing barcode information, not color selections.
Notes: This appears to be a new issue. I fetched what I believe is the previous commit (IGBF-4195) and did not encounter this issue.
Issue #4: Color by table entries doubling
Notes: There are specific steps to reproduce this issue:
- Import a sample file (e.g., pbmc_3col_semi.txt)
- Notice the current number of entries in the table
- Click Save and Apply
- Select CB from the SAMtags drop-down menu
- Click Save and Apply
- Close and re-open the Color by window
- Notice that the entries in the table have doubled
Issue #5: Importing a test file with simplified column names assigns all entries in the Color by table the color black
Test file used: pbmc_3col_simple_col_names.tsv
Notes: This appears to be a new issue. I fetched what I believe is the previous commit (IGBF-4195) and did not encounter this issue. Although all entries have been assigned black, it doesn't seem to be coloring those reads black in IGB once the changes are saved and applied.
Issue #6: Importing space-separated files does not add anything to the Color by table
Test file used: pbmc_3col_space.txt
Notes: It might be best for some sort of warning to appear here so that the issue is handled somehow.
Fixed the user file format error: https://bitbucket.org/KarthikRavee91/karthikfork-igb/commits/de4c161893fc6525729a63b06e12278ffc96d287
All six issues listed above have been addressed and fixed. However, I've found a few other issues that likely need to be addressed as part of this ticket.
Issue #7: Highlighting Tag Value cells disrupts the import and clear functions
Notes: Whichever Tag Value cell is highlighted when the Import... button is clicked will not be assigned a value upon import. Similarly, whichever Tag Value cell is highlighted when the Clear all button is clicked will not have its value removed upon clearing. This is not a new issue, I am seeing this same issue in what I believe is the previous commit (IGBF-4195).
Issue #8: File format error persists after importing correctly formatted file.
Test files used: pbmc_2col_space.txt, pbmc_2col.tsv
Notes: The error message that's been added ("Error: Please make sure if the file format is right.") to handle when a user tries to import an improperly formatted file persists even after importing a properly formatted file. It only goes away once a SAMtag has been selected/re-selected. However, I think it would make more sense to clear this message once a file has been imported instead.
Issue #9: Reads are not being colored as expected
Test file used: pbmc_2col.tsv
Notes: The Color by function, generally, does not appear to be working correctly. All reads are colored when I import this file with a version of IGB built from the previous commit. However, with this commit, no reads are being colored. It seems that no reads are being colored regardless of which test file I use.
Fixed the above errors . See commit
ISSUE #7: HIGHLIGHTING TAG VALUE CELLS DISRUPTS THE IMPORT AND CLEAR FUNCTIONS
This issue might need another ticket
ISSUE #8: FILE FORMAT ERROR PERSISTS AFTER IMPORTING CORRECTLY FORMATTED FILE.
Error messages persisting bug has been fixed
ISSUE #9: READS ARE NOT BEING COLORED AS EXPECTED
There was an issue with the some the tag variables which needed to be fixed and has been fixed
Issues #8 and #9 have been fixed! All test files are now loading in without unexpected results. If Issue #7 is being addressed in another ticket, then I would recommend a PR for this ticket.
New Commit for checkboxes: https://bitbucket.org/KarthikRavee91/karthikfork-igb/commits/f871f3916e1ee4a2d4589ee538048ac3b0a1b31e
Hey Paige Kulzer, Do you mind testing the new commit as well?
Clicking anywhere in the Cluster column prompted this error:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException: Cannot invoke "java.awt.Component.setBackground(java.awt.Color)" because "component" is null at com.affymetrix.igb.swing.jide.StyledJTable.setComponentBackground(StyledJTable.java:160) at com.affymetrix.igb.swing.jide.StyledJTable.prepareEditor(StyledJTable.java:155) at com.jidesoft.grid.JideTable.editCellAt(Unknown Source) at java.desktop/javax.swing.plaf.basic.BasicTableUI$Handler.adjustSelection(BasicTableUI.java:1138) at java.desktop/javax.swing.plaf.basic.BasicTableUI$Handler.mousePressed(BasicTableUI.java:1068) at java.desktop/javax.swing.plaf.basic.BasicTableUI$MouseInputHandler.mousePressed(BasicTableUI.java:830) at java.desktop/java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:288) at java.desktop/java.awt.Component.processMouseEvent(Component.java:6618) 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:4572) 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.pumpEventsForFilter(EventDispatchThread.java:117) at java.desktop/java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:191) at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:236) at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:234) at java.base/java.security.AccessController.doPrivileged(AccessController.java:319) at java.desktop/java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:234) at java.desktop/java.awt.Dialog.show(Dialog.java:1079) at java.desktop/java.awt.Component.show(Component.java:1728) at java.desktop/java.awt.Component.setVisible(Component.java:1675) at java.desktop/java.awt.Window.setVisible(Window.java:1036) at java.desktop/java.awt.Dialog.setVisible(Dialog.java:1015) at com.affymetrix.igb.shared.ConfigureOptionsPanel$3.actionPerformed(ConfigureOptionsPanel.java:378) 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.pumpEventsForFilter(EventDispatchThread.java:117) at java.desktop/java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:191) at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:236) at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:234) at java.base/java.security.AccessController.doPrivileged(AccessController.java:319) at java.desktop/java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:234) at java.desktop/java.awt.Dialog.show(Dialog.java:1079) at java.desktop/java.awt.Component.show(Component.java:1728) at java.desktop/java.awt.Component.setVisible(Component.java:1675) at java.desktop/java.awt.Window.setVisible(Window.java:1036) at java.desktop/java.awt.Dialog.setVisible(Dialog.java:1015) at com.affymetrix.igb.util.ConfigureOptionsDialog.showDialog(ConfigureOptionsDialog.java:123) at com.affymetrix.igb.action.ColorByAction.actionPerformed(ColorByAction.java:76) 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 was able to get around this to continue testing by importing a file containing cluster information already (e.g., pbmc_3col.tsv). Unchecking a checkbox does prevent a tag from being found and colored as expected. However, when I re-open the Color by table, that checkbox is checked, therefore not maintaining user input after closing and re-opening.
Thank you for testing the previous commit, Paige Kulzer
New commit for errors mentioned above: https://bitbucket.org/KarthikRavee91/karthikfork-igb/commits/d21f30f4634002ed94cee91f0a56cd70ef930eaf
The above error has been fixed and I can now edit cells in the Cluster column. Also, user input to the Checkbox column is now being retained between instances of the Color by table.
I've found another issue that seems to have been created by the addition of these checkboxes. Importing a file that can't be read into the table (e.g., PNG files) has prompted the error message to pop up within the table as expected but it now says, "Error: Please make sure if the file format is right.java.lang.NullPointerException: Cannot invoke "String.length()" because "regex" is null".
The above error could be fixed in a new ticket that handles errors with this feature.
Cluster view button has been implemented and pushed: https://bitbucket.org/KarthikRavee91/karthikfork-igb/commits/a46be8498f92966ad7e01b9d62fceb7a601178ca
New Commit - toggle display for tag value column when cluster view button is clicked: https://bitbucket.org/KarthikRavee91/karthikfork-igb/commits/6b859318cb62d602208b8d65136074032831e22c
Below, I'm highlighting a few areas of improvement for this new feature as well as an error I found while interacting with the Color by table:
1. In Cluster View, if the last click was in the checkmark column and then you select Switch to Raw View, all checkboxes from that point down are then highlighted automatically in the Raw View.
2. When I import a file with cluster information (e.g., pbmc_3col_clust_letters.tsv) while in the Cluster View, no data is populated there. However, if I switch to Raw View, I see the imported data as expected, and only after that does switching to Cluster View populate the Cluster information there.
3. Similarly, the Clear All button doesn't seem to be working from the Cluster View. I have to click Clear All, then switch to Raw View, then switch back to Cluster View to see that table cleared.
4. From Cluster View, I am able to change the color of a cluster only if there's a single sample assigned to it. If there is a cluster with more than one sample assigned, then I am unable to assign it a new color from the Cluster View.
5. I'm not sure how much manually entry will be happening on the Cluster View side, but it's currently a bit clunky to add information there by hand rather than importing. If I add text to the Cluster column, then hit Enter, no new rows are available to me to edit. It's only after I click the checkbox that a new editable row pops up.
6. Finally, I've found an error that may need to be addressed on a new ticket with the error I found in my last comment. It's occurring when I open the SAMtools Tag Color Mapping table, then click Cancel, then click OK. This also occurs if I first click the red X and then click OK.
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException: Cannot invoke "java.util.HashMap.get(Object)" because the return value of "com.affymetrix.genometry.general.Parameter.get()" is null at com.affymetrix.igb.colorproviders.SAMtagsColor.getColor(SAMtagsColor.java:56) at com.affymetrix.igb.view.factories.AnnotationGlyphFactory.getSymColor(AnnotationGlyphFactory.java:428) at com.affymetrix.igb.view.factories.AnnotationGlyphFactory.determinePGlyph(AnnotationGlyphFactory.java:180) at com.affymetrix.igb.view.factories.AnnotationGlyphFactory.addTopChild(AnnotationGlyphFactory.java:158) at com.affymetrix.igb.view.factories.AnnotationGlyphFactory.addLeafsToTier(AnnotationGlyphFactory.java:141) at com.affymetrix.igb.view.factories.AnnotationGlyphFactory.addLeafsToTier(AnnotationGlyphFactory.java:138) at com.affymetrix.igb.view.factories.AnnotationGlyphFactory.createGlyphs(AnnotationGlyphFactory.java:603) at com.affymetrix.igb.view.TrackView.addAnnotationGlyphs(TrackView.java:174) at com.affymetrix.igb.view.TrackView.addTracks(TrackView.java:158) at com.affymetrix.igb.view.SeqMapView.addAnnotationTracks(SeqMapView.java:1015) at com.affymetrix.igb.view.SeqMapView.addGlyphs(SeqMapView.java:968) at com.affymetrix.igb.view.SeqMapView.setAnnotatedSeq(SeqMapView.java:806) at com.affymetrix.igb.view.SeqMapView.updatePanel(SeqMapView.java:2326) at com.affymetrix.igb.action.SeqMapViewActionA.refreshMap(SeqMapViewActionA.java:71) at com.affymetrix.igb.action.ColorByAction.actionPerformed(ColorByAction.java:86) 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)
New Commit - fixing the above problems and handle pbmc_3col_barcodes_second.tsv: https://bitbucket.org/KarthikRavee91/karthikfork-igb/commits/da99e3d0c74a31becab341f8dfcda9c8774f52b0
Previously outlined issues:
Issue #2 that I outlined in my last comment is not quite fixed. Now, importing that file while in Cluster View does populate the table with data, but it's not in the Cluster View format, it's in the Raw View format. The "Switch to Raw View" button is there, so I clicked on that and it transformed the data into Cluster View format. The button still says "Switch to Raw View". When I click it again, then the tables begin behaving as expected.
As for Issue #5, I am now limited to one row in the Cluster View for manually adding data. Neither clicking the checkbox nor adding text to the Cluster column creates a second editable row. If this is the desired behavior, then please ignore.
New issues I've found:
I've tested the option to Color by a SAMtag other than the five default options, such as "GN", but I then get a pop-up with the following message when I do this:
"You entered parameter GN. Unfortunately, the Track Operation you selected cannot accept this value. More information about this problem may be available in the Console tab."
This pop-up window is hard to get rid of, by which I mean that I have to click any of the three buttons (red X, Copy Error Message, or OK) three times in order for it to be dismissed. Also, since this SAMtag is present in my dataset's Selection Info, I wonder if this feature isn't working as expected.
Finally, I noticed that the default colors upon import seem to be hardcoded. Regardless of the values in the Cluster column, the order of colors is always the same. I'm not sure if this was the case in the previous commit. Example file: pbmc_3col_clust_underscore.tsv
All errors mentioned above has been fixed and Udaya Chinta's changes are included in the commit: https://bitbucket.org/KarthikRavee91/karthikfork-igb/commits/c5a55976b22bb8c0d950d75ca822de91519a73e3
Nowlan Freese and Paige Kulzer If you have the time, It ould be great if you can test this commit. I will be online whenever you need me for any changes
Issue #2 now appears to be fixed. The custom SAMtag feature also appears to be working now! I tested with several different values, including BC and CIGAR.
Adding a manual entry to the Cluster view and then switching back to the Tags view populates the entire table with rows of that Cluster and Color. Karthik Raveendran Is this desired behavior?
Some issues I ran into:
- On my system, after I have colored a track by samtags, if I right-click on the track name and select Color by... again it takes several seconds for the Color By window to appear (should be instant). This behavior does not occur on Main branch (as of Dec 8, 2025). I checked on both the most recent commit and the commit before Udaya's code change, and the behavior was consistent, so I don't think it has to do with Udaya's changes. The behavior only occurs when a Color has been applied to the track, if I remove the color then right-clicking to select Color by... is instantaneous. I want to check that this behavior is reproducible on someone else's machine.
- The order of the tags in IGB appears to be the same order as the imported file. If that is the case, I am missing the first two lines of data from the file if there is no header. If there is a header I am missing the first line of data.
- Color by Samtags import button opens the default Java file chooser. Should use the JavaFX file chooser used by the rest of IGB. I would create a new ticket for this issue.
- Assume there is a header, don't skip second line.
- No requirement for SAMtag if user has clicked Clear all or there is no data.
- Block user interaction with Cluster table if tags are empty OR block user ability to modify cluster name in cluster table.
- Check/improve behavior when changing cluster names.
- Importing two columns (tag/cluster#) does not appear to be working.
Color by Samtags import button opens the default Java file chooser. Should use the JavaFX file chooser used by the rest of IGB. I would create a new ticket for this issue.commit
Assume there is a header, don't skip second line.commit
Check/improve behavior when changing cluster names.
Importing two columns (tag/cluster#) does not appear to be working.commit
- No requirement for SAMtag if user has clicked Clear all or there is no data.
- Block user interaction with Cluster table if tags are empty OR block user ability to modify cluster name in cluster table.
- use the JavaFX file chooser (DONE)
- don't skip second line (DONE)
- improve behavior when changing cluster names (I think this is DONE?)
- Fix importing two columns (DONE)
Fix importing two columns - Two column import is working, but now when I try to import a three column csv (barcode, cluster, color) the color is defaulting to gray. [commit | Fix importing two columns - Two column import is working, but now when I try to import a three column csv (barcode, cluster, color) the color is defaulting to gray.]
Table window should appear above Color by modal in Mac commit
Moving table render in Configure Tag Value button rather Color by menu item SAMtags to avoid speed issues. This will create a better workflow with the IGBF-4344changes commit
No requirement for SAMtag if user has clicked Clear all or there is no data. commit
Steps to test:
1. Right click on the bam file
2. Open ColorBy
3. Select SamTags from dropdown
4. Click on Configure Tag Color Mapping
5. Samtools Tag Color Mapping table appears
case 1: (expected)
Action : Do not select anything, click save and apply.
Result : Reads turned into gray color.
case 2: (expected)
Action : Click on view by cluster and click save and apply
Result : Reads turned into gray color.
case 3 : (expected)
Action : import file and click save and apply
Result : Error Message displayed
case 4: (expected)
Action: import file and click clear all and click save and apply
Result : Reads turned into gray color.
case 5: (expected)
Action: import file and click save and apply and now apply monster without gaps
Result: Reads are colored
case 6: (check this case)
Action: import file and click save and apply and again Select SamTags from dropdown
now click on ok
Result: reads turned to gray color
case 7: (check this case)
Action: select first row and import file
Result: First row tag value is not visible
case 8: (check this case)
Action: Enter tag value manually and click import file and import data
Result: Manually entered value got removed.
case 9: (check this case)
Action: Enter tag value (GAGTTTGTCCCTTCCC-1) and tick the check box
Result : Error Message displayed
case 10: (expected)
Action: Enter tag value (GAGTTTGTCCCTTCCC-1) and tick the check box and change color
Result : Particular read color got changed
Cc : Karthik Raveendran, Dr.Nowlan Freese
The final squashed commit has been pushed. A few bug fixes that include a fix for SAMtags table window appearing behind the Color by window (saideepthi jagarapu) and the cluster name editing issue is included in 63d5298
Nowlan Freese and Paige Kulzer With that we are ready for testing.
Tested Karthik's IGBF-4295 branch with my initial testing instructions as well Udaya's testing flow above and the workflow outlined on IGBF-4344.
No observed speed issues when using relatively large files to color by. The behavior for changing cluster values has been much improved. The warning that is displayed when no cluster information for the Cluster view is available is very clear, and no errors are being thrown with these new changes. There no longer needs to be a SAMtag value selected when trying to close an empty Color by window. I made sure that all types of files could be imported, including files with two columns, three columns, space vs semi-colon vs tab separated, no color column, etc. All issues appear to have been fixed. Good work, Karthik!
I also tested IGBF-4295-2 branch which includes Deepthi's changes from IGBF-4371. The SAMtools Tag Color Mapping window is no longer opening behind the Color By window. I'm not seeing any new errors or loss of functionality as a result of these changes.
Karthik Raveendran, ready for next steps!
PR is merged and installers are built and deployed to bioviz.org early access section.
Ready for testing!
case 6: (check this case)
Action: import file and click save and apply and again Select SamTags from dropdown
now click on ok
Result: reads turned to gray color
UPDATE: It looks like even though the SAMtag colors are added, because the user is changing from SAMtags to something else and then back in the Color By window IGB is forgetting what the SAMtag colors are and defaulting to gray. Karthik and Nowlan discussed this and this is more or less the intended behavior.
case 7: (check this case)
Action: select first row and import file
Result: First row tag value is not visible
UPDATE: This appears to be resolved.
case 8: (check this case)
Action: Enter tag value manually and click import file and import data
Result: Manually entered value got removed.
UPDATE: I think this should be the intended behavior.
case 9: (check this case)
Action: Enter tag value (GAGTTTGTCCCTTCCC-1) and tick the check box
Result : Error Message displayed
UPDATE: Not able to reproduce this issue.
Action: Import data.
Result: The imported data occupies the entire table, there is no way to add additional user-entered tag values at the bottom
UPDATE: This was discussed, and the conclusion we reached was that if the user is importing data they cannot add additional rows to the table.
Action: Enter a manual tag value
Result: The row remains unchecked. If the user clicks Save and Apply they will not see the change. I think the intended behavior should be that if a user adds values to a row, the row should become checked automatically.
UPDATE: Created IGBF-4379
Action: Enter a manual tag and cluster value. Click View by Cluster. Enter a manual cluster and give it a color. Click View by Tags.
Result: The new cluster populates the rest of the table. Would be good to prevent user from manually adding a cluster in the View by Cluster.
UPDATE: Created IGBF-4378
Found an issue today while doing some secondary testing with Dr. Freese. This issue was not present before the implementation of the JavaFX file finder.
Action: Click Import... Then, without clicking anything in the file finder that comes up, close out both of the SAMtags Color By windows, then close the file finder.
Result: IGB freezes and needs to be force quit.
UPDATE: Created IGBF-4376
Action: Hard to reproduce, but right-click the track and click Color by...
Result: Sometimes, the Color by window will open in the top-left corner of my screen rather than centered on IGB.
UPDATE: Created IGBF-4377
Seeing an error when exiting the Edit filter window via the Red X.
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:262) at com.affymetrix.igb.util.ConfigureFilters.editButtonActionPerformed(ConfigureFilters.java:158) 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)
I'm not sure if this was a pre-existing issue because I do recall seeing this before but I can't find evidence of that in any related tickets. Otherwise, I am able to see and interact with the Add/Remove/Edit buttons even after adding a long string of values. The issue of those disappearing appears to have been fixed.
UPDATE - moved to IGBF-4375
Ticket was tested on mac using installer. Some minor issues were identified (see previous comments). After discussion we have triaged the issues that should be addressed and have created new tickets.
Closing ticket.
Pushed commit 627d8d6 in
IGBF-4295This commit addresses:
Note: I have added a sample txt file to the ticket with 3 columns. The quickload for the BAM file corresponding to the sample file is in here: https://bitbucket.org/KarthikRavee91/quickload_scrna-seq_10xgenomics/src/main/
In IGB, after add this quickload data source, load any pmbc alignments file from H_sapiens_Feb_2009