ncats-tangerine / tkbio Goto Github PK
View Code? Open in Web Editor NEWNCATS Translator Release 4.0 of Knowledge.Bio as a distributed knowledge map management platform
Home Page: http://tkbio.medgeninformatics.net
License: Other
NCATS Translator Release 4.0 of Knowledge.Bio as a distributed knowledge map management platform
Home Page: http://tkbio.medgeninformatics.net
License: Other
If you log in and then open the site in another browser tab, the navigation menu in the second tab shows the Login button instead of the Logout and My Account buttons. This second tab otherwise still acts as if you are logged in (for example you can navigate to the My Account page by manually entering the URL).
NOTE: the same thing happens in the old version
From @cmungall on January 3, 2018 21:33
There are no links to diseases
these are available through the monarch instance of biolink:
The only query results seem to be wikidata and semmeddb, even though I have others checked:
The logs don't help much - I click to see these and it takes me to https://kba.ncats.io/errorlog?sessionId=s3Wg7ENqMudJy75fyJbA which is a json file with []
in it
Copied from original issue: NCATS-Tangerine/translator-knowledge-beacon#35
Should feature images and adhere to the usability.gov style-guide. Assigned to me.
It is very hard to get a sense of the overall breadth of statements with the current pagination approach, where the user has to scroll to the bottom to add new statements. And if a filter is set, the new statements get sorted as they are added so it is not clear which are new. Overall it is a very cumbersome workflow. Two suggested improvements:
First, I would like the option of loading all results at once.
Second, I would like to see a count of the total number of results displayed, that gets updated when a user selects a filter.
The simple keyword search of concept names works well most of the time, but sometimes a user will already know exactly which concept they want by CURIE identification. It would still be convenient to be able to insert such a CURIE into the search box somehow, or perhaps, constrain the search to the identifier space. In addition, we may wish to support a kind of query based on user inputting of a sentence.
The concept table popup window that returns matches for key word searches presents matches of identifiers form all sources, without merging the entries by clique. Clearly, presenting one row entry per clique would make more sense; however, some way of restructuring the presentation of the output is necessary, to still present to the user all matching identifiers indexed by their beacon source.
Note that presenting all matches may be challenging due to the number of equivalent identifiers in a given clique (maybe need to create a new popup window of some kind which presents the aliases in a structured fashion...)
Searching for stress disorder:
Note I seem to have all beacons selected:
In a distributed system we should be resilient to some beacons returning odd results. However, we still need to provide some kind of recommendations as to search behavior.
Also, we need to be able to see which beacon each search result is coming from
If I independently select the identical concept from SemMedDb and Monarch, two nodes show up on the concept map. They should be merged on the map.
e.g. 'Irritable Bowel Disorder"
Clicking the "Show Abstract In New Window" button brings up the original abstract that you clicked on in the evidence view, and not the actual page you're looking at. This can go wrong if you search for an abstract by a pmid, or click a link on the pub med article.
java.lang.NullPointerException: null
at bio.knowledge.web.view.StatementsViewPresenter.lambda$2(StatementsViewPresenter.java:170) ~[main/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_141]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_141]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_141]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_141]
at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:508) ~[vaadin-server-7.6.5.jar:7.6.5]
at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:198) ~[vaadin-server-7.6.5.jar:7.6.5]
at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:161) ~[vaadin-server-7.6.5.jar:7.6.5]
at com.vaadin.server.AbstractClientConnector.fireEvent(AbstractClientConnector.java:1008) ~[vaadin-server-7.6.5.jar:7.6.5]
at com.vaadin.ui.Button.fireClick(Button.java:377) ~[vaadin-server-7.6.5.jar:7.6.5]
at com.vaadin.ui.Button$1.click(Button.java:54) ~[vaadin-server-7.6.5.jar:7.6.5]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_141]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_141]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_141]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_141]
at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:158) ~[vaadin-server-7.6.5.jar:7.6.5]
at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:118) ~[vaadin-server-7.6.5.jar:7.6.5]
at com.vaadin.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:408) [vaadin-server-7.6.5.jar:7.6.5]
at com.vaadin.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:273) [vaadin-server-7.6.5.jar:7.6.5]
at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:79) [vaadin-server-7.6.5.jar:7.6.5]
at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:41) [vaadin-server-7.6.5.jar:7.6.5]
at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1409) [vaadin-server-7.6.5.jar:7.6.5]
at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:364) [vaadin-server-7.6.5.jar:7.6.5]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) [tomcat-embed-core-8.0.23.jar:8.0.23]
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:808) [jetty-servlet-9.2.10.v20150310.jar:9.2.10.v20150310]
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1669) [jetty-servlet-9.2.10.v20150310.jar:9.2.10.v20150310]
at org.springframework.boot.actuate.autoconfigure.EndpointWebMvcAutoConfiguration$ApplicationContextHeaderFilter.doFilterInternal(EndpointWebMvcAutoConfiguration.java:281) [spring-boot-actuator-1.3.7.RELEASE.jar:1.3.7.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE]
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) [jetty-servlet-9.2.10.v20150310.jar:9.2.10.v20150310]
at org.springframework.boot.actuate.trace.WebRequestTraceFilter.doFilterInternal(WebRequestTraceFilter.java:115) [spring-boot-actuator-1.3.7.RELEASE.jar:1.3.7.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE]
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) [jetty-servlet-9.2.10.v20150310.jar:9.2.10.v20150310]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:154) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:199) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:110) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:50) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) [spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE]
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262) [spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE]
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) [jetty-servlet-9.2.10.v20150310.jar:9.2.10.v20150310]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) [spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE]
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) [jetty-servlet-9.2.10.v20150310.jar:9.2.10.v20150310]
at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:87) [spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE]
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) [jetty-servlet-9.2.10.v20150310.jar:9.2.10.v20150310]
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) [spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE]
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) [jetty-servlet-9.2.10.v20150310.jar:9.2.10.v20150310]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197) [spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE]
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) [jetty-servlet-9.2.10.v20150310.jar:9.2.10.v20150310]
at org.springframework.boot.actuate.autoconfigure.MetricsFilter.doFilterInternal(MetricsFilter.java:103) [spring-boot-actuator-1.3.7.RELEASE.jar:1.3.7.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE]
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) [jetty-servlet-9.2.10.v20150310.jar:9.2.10.v20150310]
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585) [jetty-servlet-9.2.10.v20150310.jar:9.2.10.v20150310]
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) [jetty-server-9.2.10.v20150310.jar:9.2.10.v20150310]
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577) [jetty-security-9.2.10.v20150310.jar:9.2.10.v20150310]
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223) [jetty-server-9.2.10.v20150310.jar:9.2.10.v20150310]
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127) [jetty-server-9.2.10.v20150310.jar:9.2.10.v20150310]
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515) [jetty-servlet-9.2.10.v20150310.jar:9.2.10.v20150310]
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185) [jetty-server-9.2.10.v20150310.jar:9.2.10.v20150310]
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061) [jetty-server-9.2.10.v20150310.jar:9.2.10.v20150310]
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) [jetty-server-9.2.10.v20150310.jar:9.2.10.v20150310]
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) [jetty-server-9.2.10.v20150310.jar:9.2.10.v20150310]
at org.eclipse.jetty.server.Server.handle(Server.java:497) [jetty-server-9.2.10.v20150310.jar:9.2.10.v20150310]
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310) [jetty-server-9.2.10.v20150310.jar:9.2.10.v20150310]
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257) [jetty-server-9.2.10.v20150310.jar:9.2.10.v20150310]
at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540) [jetty-io-9.2.10.v20150310.jar:9.2.10.v20150310]
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635) [jetty-util-9.2.10.v20150310.jar:9.2.10.v20150310]
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555) [jetty-util-9.2.10.v20150310.jar:9.2.10.v20150310]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_141]
When searching for concepts, exact matches are mixed in with matches that contain the search term, including matches with the search term in the middle of a word. This can cause the search results to have low relevance. One example is that when searching for "liver," the 1st result is "Drug Delivery Systems," the 4th result is "Liver dysfunction," and "Liver" doesn't appear until the 3rd page.
There should be a way for people to see the HTTP requests and responses and errors that occur when using the tkbio application.
Safari access to the TKBio desktop seems to hang up; same query in other browser (e.g. Chrome) works fine
It points to: http://www.https.com/kba.ncats.io/errorlog?sessionId=
www.https.com is obviously invalid.
These are some observations of functionality that behaved differently in the old version. They may or may not be bugs:
... maybe the dialog box code fails silently whenever relationship edge evidence is lacking or non-routine in nature (e.g. Monarch style?)
In particular, in the "concept details" display of a given concept (using details from WikiData), there may be objects that have a button "Add to Map" (which generally means that they are an associated WikiData concept). These edges don't seem to be added to the concept map anymore?
Going to References Tab From Evidence Tab of a Relation from the Monarch Beacon (in this case, "GCK") seems to cause the following error:
"The statement id is not a curie and could not be parsed at ReferenceView.GetUri... (81)"
It seems to work fine for nDEX Bio concept of the same name, but not another Monarch Beacon Concept ("NM_000799.2(EPO):c.-1306C>A").
The build file must be malformed. Building from Eclipse works fine (probably because Eclipse has more knowledge about the project), but building with gradle 4 fails:
$ gradle4 --version
------------------------------------------------------------
Gradle 4.5
------------------------------------------------------------
Build time: 2018-01-24 17:04:52 UTC
Revision: 77d0ec90636f43669dc794ca17ef80dd65457bec
Groovy: 2.4.12
Ant: Apache Ant(TM) version 1.9.9 compiled on February 2 2017
JVM: 1.8.0_151 (Oracle Corporation 25.151-b12)
OS: Linux 3.13.0-124-generic amd64
$ gradle4 build
Starting a Gradle Daemon (subsequent builds will be faster)
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':bootRepackage'.
> org.gradle.api.artifacts.ProjectDependency.getProjectConfiguration()Lorg/gradle/api/artifacts/Configuration;
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 3m 37s
21 actionable tasks: 5 executed, 16 up-to-date
Gene symbols (e.g. SSH) are a bit degenerate with respect to ortholog loci. This presents a couple of challenges for TKBIO:
The nature of the differences is not explicit in the UI, that is, two identical symbol names may correspond with the loci from distinct taxa (species) but this is not easy to ascertain from the UI
strict concept equivalencies do not merge subgraphs anchored on orthologous loci, which albeit intellectually honest, looks odd on the concept map in that disconnected subgraphs appear with duplicated gene symbol labels.
Although not strictly aggregation of "equivalent concepts", it is nonetheless a comparable task of comparative functional genomics a la Eisen to merge gene concepts based on orthology.
Concurrently, though, it would be helpful to have some visible mechanism to display the taxon (species) of the (gene) concepts being displayed: using colour, tool tip labels, direct text labels, (?)
Simplification of issue #61. Our new KBA architecture makes this feasible. When showing the results of statements and concepts queries to the KBA:
@YinglunQ Talk with me if you have questions about this.
At present, tk.bio behavior when clicking on a concept node in the blackboard is variable. For some concepts (mostly Wikidata ones) a nice table showing concept metadata appears, and the user is given the option to show relations' for that concept in the statement table. But for many concepts (e.g. those from Biolink), no metadata is returned, and the 'show relations' button does not work. This is a significant barrier to navigation of the data in the way we would like to support.
Image below shows dialog box returned after clicking a concept node from Biolink - no metadata returned as for most Wikidata nodes, and also the 'show relations' box is inactive/greyed out.
In Release 3.0 of Knowledge.Bio, concept nodes in the concept map were color coded to reflect concept type (e.g. gene, drug, disease). This doesn't seem to work at the moment (need to check CSS mappings to semantic groups?)
When searching for a concept, results from certain beacons seem to be repeating in an endless(?) loop, which makes the search results seem infinite. In particular, results from Monarch and String-db.org wrapper results do this. Additionally, the repeating results seem to appear no matter what Semantic Group filter is selected (although they do obey the text filter).
Fix the importing and exporting of concept maps
According the FAQ ("How do I remove an element?"), after deleting a node from a concept map, the user can restore both the node and the edges that were connected to it with it by adding the concept back to the map from the Relations tab. This works at first, but manipulating the concept map (for example by clicking on a node) causes the restored edges to disappear (except for the one(s) that were explicitly re-added from the Relations tab).
NOTE: this is not new. The same thing happens in the old version
When the concept map changes size (which can happen when adding/removing nodes or changing the layout) or when zooming is done with a trackpad/mouse, the slider's position is not updated. Once the slider is out-of-sync, sliding it can cause the view to be zoomed in the opposite direction. For example:
You start with an empty graph at zoom level 100. Adding everything in the Relations tab to an empty graph results in a tiny graph that is supposed still at zoom level 100. Moving the slider even slightly will cause the graph to be abruptly zoomed in super close, even though, according to the slider positions, you technically zoomed out from 100 to 99.
NOTE: this is not new. The same thing happens in the old version
Instead of a full URL, the Concept Map Details window shows strings like /#map=Big Map
. Additionally, URL's of the form <website>/#map=<mapname>
just show a Vaadin error page.
Currently for users to add annotations the statement and concepts that are being annotated must be in our database. This is a problem now that concepts and statements are being distributed across many knowledge sources.
As of now, the adding of user annotations is broken. We should rethink how we will handle this.
One idea is to have ForeignConcept and ForeignStatement nodes in our neo4j database that represent concepts and statements coming from other knowledge beacons. We can then get our tkbio application to load that data as needed, when using foreign objects.
Buttons with unimplemented functionality:
In the Relations tab, clicking on a concept in the Object column and then clicking Show Relations doesn't show its relations. The problem doesn't occur when you click on a (object) node on the concept map and click Show Relations.
Unaccepted
The TKBIO 'Beacons" menu brings up a dialog box with a "Record Logs" check box and "View Logs" button.
Even after checking the box, and doing some queries, the "View Logs" button works to bring back a page, but there are no results (i.e. the JSON array is empty "[]")
In resolving issue #31, statementId's were adding to the graph. But concept maps saved (or exported) before that don't have the statementId field. This causes an error to be thrown when trying to add old concept maps to the graph.
If you uncheck all beacons prior to a search, the search attempts to go through but returns a divide by zero error in ListContainer at line 384 (in the loadDataPage function).
Needless to say this is a pathological case, I would both want to make it fail gracefully if a search does go through with no beacons at the very least. We could add a prompt stating that you have no beacons selected, or otherwise force the user to have at least one beacon checked at all times.
Proposed enhancement.
Due to previous discussions over the past three weeks, it became clear that one path for adding value to TKBio is to revise our search entry-point, revise our table display, and potentially revise our graph visualization (in that order).
This may require us to rapidly extend the Vaadin library if there are no closely analogous components to what we are looking to achieve.
Vaadin 10 has given support for the W3 Web Components Standard. Advantages of Vaadin adhering to this standard is the introduction of HTML5-driven interactions (while maintaining backwards-compatibility with their existing library) that can be decoupled from the rest of the system.
This signifies a potential efficiency gain in implementing custom components and expanding the suite of expertise available to our project. I will look into whether there are any backwards-compatibility issues and try for an upgrade.
Need this resolved to check #67.
Statement tables: S and O often wrong for a given triple in the statement table (but arrow will sometimes be in the correct direction if added to graph). e.g. below, vemurafenib should be in the subject column for 'drug used for treatment' statements, but instead are in the object column.
Blackboard arrows: Direction of arrows on relations between concepts on the 'blackboard often appear in the wrong direction. e.g. both arrows are wrong in the example below.
Exporting maps (in any format) doesn't produce a file. In Safari, nothing happens at all. In Chrome, the download has the message:
dl
Failed - Network error
Telling Chrome to resume the download changes the message to:
dl
Failed - No file
Currently, the password reset links and concept map links are only accessible when navigating to the link from a new browser tab (or from a different website). This is because these URLs are only processed in the DesktopUI::init()
method. The user should be able to navigate to these pages even if they are already in the application.
Finding the types of concepts and statements one wants is currently challenging. Some simple enhancements to filtering functionality that could improve this:
Fix Relation Filtering: This is a very valuable feature that is currently not working. Also, it would be nice if the user was presented with a dropdown of all relations used in statements in the table so they could select one or more to filter/facet on.
Fix Statement Filtering by Semantic Type: Also doesn’t seem to be working. e.g. after filtering to select Genes, statements that have nothing to do with Genes are still returned. I assume the desired functionality here is to return only statements where the S or O is tagged with the Gene semantic type.
Allow users to select multiple types when setting filters.
Allow filtering by source from within the concept and statement results tables. Currently filtering by source is only available outside the context of search results.
Right now the URL only loosely represents the state of the application (e.g., whether you're in the relations view or concepts view, and so on). This could be better. For example:
When going into the relations view, the URL should be something like /#!list/relations/CONCEPT_ID, so that the user can copy and save this url, and then paste it into their browser later to come back to the same thing.
When one Beacon uses a unique id system such as Entrez gene, another Beacon uses a system like Ensembl, and other Beacons are capable of providing mappings from 1 concept id scheme to the next, provide functions for integrating equivalent concepts such that e.g. in the graph view, they do not get separated into different nodes and in the table view, all the statements are properly merged together.
Example. Here is a call to a Beacon that uses ensembl ids
http://52.15.182.253:8090/api/concepts/ensembl%3AENSP00000336701
Here is one to a Beacon that uses wikidata ids
http://garbanzo.sulab.org/concepts/wd%3AQ18031015
garbanzo exactMatches can get from wd:Q18031015 to NCBIGENE:5889
An exact matches service could be generated using mygene.info to map from ncbigene:5889 to ensembl:ENSP00000336701 http://mygene.info/v3/api#MyGene.info-gene-annotation-services-GET-Gene-annotation-service
So, we ought to be able to stitch together a single 'entity' containing the 'equivalence clique': {ncbigene:5889, wd:Q18031015, ensembl:ENSP00000336701 } and this clique should make it possible to aggregate content from beacons that work with any of these different id systems.
(Caveat for example, that it may be more appropriate to link ncbigene:5889 to ensembl:ENSP00000336701 via a statement like "X encodes Y" as the former is a gene entry and the latter is a protein entry. We will have to rely on documentation and the Beacon providers implementation of that documentation to get semantic decisions like that accomplished.)
#Beacon-Aggregator
At present, tk.bio behavior when clicking on a concept node in the blackboard is variable. For some concepts (mostly Wikidata ones) a nice table showing concept metadata appears, and the user is given the option to show relations' for that concept in the statement table. But for many concepts (e.g. those from Biolink), no metadata is returned, and the 'show relations' button does not work. This is a significant barrier to navigation of the data in the way we would like to support.
Image below shows dialog box returned after clicking a concept node from Biolink - no metadata returned as for most Wikidata nodes, and also the 'show relations' box is inactive/greyed out.
Selecting an edge on the concept map and clicking Show Evidence shows evidence for the wrong relationship. (There is no such problem with the View evidence buttons in the Relations tab.) If the other relationship is on the concept map, it gets highlighted (otherwise, no edges are highlighted). The evidence being shown is actually the evidence you would get if you:
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.