Details
-
Type:
Task
-
Status: Closed (View Workflow)
-
Priority:
Major
-
Resolution: Done
-
Affects Version/s: None
-
Fix Version/s: None
-
Labels:None
-
Story Points:2
-
Epic Link:
-
Sprint:Fall 1: 14 Sep - 25 Sep, Fall 2: 28 Sep - 9 Oct, Fall 3: Oct 12 - Oct 23, Fall 4 Oct 26 - Nov 6
Description
A long-term goal of the IGB project is to enable developers to add new operator functions as plug-able IGB Apps.
As an example, we would like for a developer in the community to implement a new type of depth graph as an App.
However, our current architecture may not support this very well.
For this task, please do a deep dive into the implementation of the "soft clip depth graph" operator (IGBF-1443) and answer the question:
- Could this have been implemented as an IGB App?
In other words, could a developer implement this same functionality using IGB extensions? Or does the platform itself (e.g, SeqUtils and some of the other classes) need to be modified to add the new functionality?
Note that this is an architecture question and also an OSGi services question.
Attachments
Issue Links
- relates to
-
IGBF-1443 Implement Depth Graph (Soft-clip)
-
- Closed
-
Activity
I tried creating a repository for soft clip depth track operation and tried installing it as an app. Looks like it works .
Also a question about nexus - IGB 9.1.6 is not yet a part of nexus right? Because I was not able to add the genometry dependency.
Could you try it with IGB 9.1.4 as the platform version instead of IGB 9.1.6?
The function SeqSymSummarizer.getSymmetrySoftclipSummary(..) is currently present just in IGB 9.1.6. So, IGB 9.1.4 will also not work.
Can you put that function into the App?
The goal here is to find out if adding this new functionality requires modifying IGB itself. In other words, could an external developer implement this new functionality using 9.1.4 and the existing API?
I could put that into the App. getSymmetrySoftclipSummary(..) is internally dependent on getSpanSummary() which is currently a private function. Do you suggest to change that to public? Or include that function within the App?
Yes - please try to include that function within the App.
I have included the function within the App and have pushed the code
I am still seeing a dependency on 9.1.6 code. Can you take a look?
attn: Noor Zahara
I had changed the IGB version in a different commit - https://bitbucket.org/noorzahara/softclip_track_operation/commits/a03eb3bc1af071607671ed8db4d7428bd96cf65b
When you change the version, does it work?
(Asking because it seemed like more code needed to be migrated from 9.1.6.)
When I change the version it does work but the only issue is if genometry jar is not present in nexus then the build fails i.e if I change the version to 9.1.6, since genometry 9.1.6 is not present in nexus, it fails.
OK I understand!
Can you dig a little deeper into the genometry code base and copy the "soft clip" depth graph code from 9.1.6 genometry bundle into the App? The goal here is to get the App to run inside IGB 9.1.4.
This is so that we can demonstrate to new developers how to create the soft-clip depth graph visualization without making any changes to IGB itself.
I have got all the code that softclip feature is dependent to this App. I have placed it under utils folder.
Currently, the app gets installed in IGB 9.1.4.
Quick request:
- Please remove .gitproperties from src/main/resources
I am sorry about that. I have removed it.
For functional review:
- Confirm you can install the App in IGB 9.1.4 without error
- Confirm that when you install the App in IGB 9.1.4, the expected menu item appears when you right-click the track label for a BAM "reads" file track (see RNA-Seq folder under human genome)
- Confirm you can execute the functionality, e.g., a new graph is made when you select the menu item in previous step
- Examine the code and compare to other Apps
- Confirm that the App still works when run in IGB 9.1.6 - note there could potentially be a problem with name collision if the App is exported any packages
For code review:
- Note that the App should use declarative services. That is, the App is providing a service that is immediately available when the App gets installed into IGB's OSGi container. The business logic that creates the context menus upon right-clicking a track label consumes the service to display the provided menu item.
- Check for unneeded dependencies in the App POM.
- Check for copy-paste problems. Confirm that the "utils" code migrated from 9.1.6 is all necessary and being used.
- Inspect the built jar manifest. Ensure that no OSGi packages are exported.
When I tested this feature in 9.1.6, It worked fine but when I tested in 9.1.4 my right-click options are not popping out. Please find the attached error log
Exception in thread "AWT-EventQueue-0" java.util.MissingResourceException: Can't find resource for bundle java.util.PropertyResourceBundle, key operator_alignment_softclip_depth
at java.util.ResourceBundle.getObject(ResourceBundle.java:450)
at java.util.ResourceBundle.getString(ResourceBundle.java:407)
at com.affymetrix.genometry.operator.AbstractAnnotationTransformer.getDisplay(AbstractAnnotationTransformer.java:20)
at com.affymetrix.genometry.util.IDComparator.compare(IDComparator.java:32)
at com.affymetrix.genometry.util.IDComparator.compare(IDComparator.java:11)
at java.util.TreeMap.put(TreeMap.java:552)
at java.util.TreeSet.add(TreeSet.java:255)
at java.util.AbstractCollection.addAll(AbstractCollection.java:344)
at java.util.TreeSet.addAll(TreeSet.java:312)
at org.lorainelab.igb.track.operations.api.OperationsPanel.loadOperators(OperationsPanel.java:155)
at org.lorainelab.igb.track.operations.api.OperationsPanel.resetAll(OperationsPanel.java:91)
at org.lorainelab.igb.track.operations.api.OperationsPanel.selectionRefreshed(OperationsPanel.java:85)
at com.affymetrix.igb.shared.Selections.notifyRefreshListener(Selections.java:346)
at com.affymetrix.igb.shared.Selections.refreshSelection(Selections.java:150)
at com.affymetrix.igb.shared.Selections.access$100(Selections.java:36)
at com.affymetrix.igb.shared.Selections$Listeners.symSelectionChanged(Selections.java:381)
at com.affymetrix.genometry.GenometryModel.fireSymSelectionEvent(GenometryModel.java:220)
at com.affymetrix.genometry.GenometryModel.setSelectedSymmetries(GenometryModel.java:235)
at com.affymetrix.igb.view.SeqMapView.postSelections(SeqMapView.java:1207)
at com.affymetrix.igb.view.SeqMapView.select(SeqMapView.java:1187)
at com.affymetrix.igb.view.SeqMapViewSymSelectionListenerImpl.symSelectionChanged(SeqMapViewSymSelectionListenerImpl.java:46)
at com.affymetrix.genometry.GenometryModel.fireSymSelectionEvent(GenometryModel.java:220)
at com.affymetrix.genometry.GenometryModel.setSelectedSymmetries(GenometryModel.java:235)
at com.affymetrix.igb.tiers.TierLabelManager.doGraphSelections(TierLabelManager.java:529)
at com.affymetrix.igb.tiers.TierLabelManager$2.mousePressed(TierLabelManager.java:262)
at com.affymetrix.genoviz.widget.NeoWidget.heardMouseEvent(NeoWidget.java:1330)
at com.affymetrix.genoviz.widget.NeoMap.heardMouseEvent(NeoMap.java:1589)
at com.affymetrix.genoviz.widget.NeoAbstractWidget.mousePressed(NeoAbstractWidget.java:811)
at com.affymetrix.genoviz.bioviews.View.heardMouseEvent(View.java:969)
at com.affymetrix.genoviz.bioviews.View.mousePressed(View.java:869)
at java.awt.Component.processMouseEvent(Component.java:6536)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6304)
at java.awt.Container.processEvent(Container.java:2239)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2297)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4532)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
at java.awt.Container.dispatchEventImpl(Container.java:2283)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
at java.awt.EventQueue$4.run(EventQueue.java:733)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Sai Supreeth Segu - I have fixed the issue. Kindly try to install the app on 9.1.4 IGB.
I have tested this feature.
For functional review:
- I have successfully installed the App in IGB 9.1.4 without an error and was able to generate a graph on the test bam file.
- For the test bam file, the expected menu item appears when I right-clicked the track label it.
- I have installed the app in IGB 9.1.6 and was able to perform everything as expected.
For code review:
- There are no unneeded dependencies in the App POM.
- All the "utils" code migrated from 9.1.6 is all necessary and being used.
cc: [~aloraine] and Noor Zahara
Noor Zahara - please submit PR.
[~aloraine] - It is a new repository. It should be added to larainelab repositories. Mostly ownership transfer is needed right?
You can keep in your account and LoraineLab can fork it. Or, you can transfer it to LoraineLab. I prefer the first option, like we did with Genome Dashboard by Sameer Shanbhag.
Please indicate what you would like to do.
Forking is a good option. I am fine that. Thanks!
[~aloraine] - One doubt I had about IGB App - Does this mean the app needs to be installable? or it means just a plugin similar to Bookmark service?