Code Monkey home page Code Monkey logo

tkbio's Issues

Navigation menu doesn't reflect login state

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

No links from gene to disease (SLC26A3)

From @cmungall on January 3, 2018 21:33

On this gene:
image

There are no links to diseases

these are available through the monarch instance of biolink:

https://api.monarchinitiative.org/api/bioentity/gene/OMIM%3A126650/diseases/?fetch_objects=true&rows=100

The only query results seem to be wikidata and semmeddb, even though I have others checked:

image

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

Improve pagination functionality in statement table

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.

Provide multi-modal search box: by keyword, by CURIE and by sentence

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.

Merge Cliques in "Concept by text" search table

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...)

Odd results in search

Searching for stress disorder:

image

Note I seem to have all beacons selected:

image

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

Show Abstract In New Window

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.

Clicking "add to graph" throws null pointer error.

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]

Exact match search

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.

Beacon Query Console

There should be a way for people to see the HTTP requests and responses and errors that occur when using the tkbio application.

Differences in this version

These are some observations of functionality that behaved differently in the old version. They may or may not be bugs:

  • when evidence is opened in the Reference tab, the "Search Reference ID" box is no longer pre-populated with the article's ID
  • filtering concepts by Semantic Group still leaves some results with a different group in the Semantic Group column
  • switching to the Relations tab from one of the other tabs causes its contents to be reloaded

Relationship edge rendering to concept map doesn't always work?

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?

Gradle 4 build fails

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

Management of gene orthologs (Taxonomic context of concepts in general)

Gene symbols (e.g. SSH) are a bit degenerate with respect to ortholog loci. This presents a couple of challenges for TKBIO:

  1. 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

  2. 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, (?)

Data counts

Simplification of issue #61. Our new KBA architecture makes this feasible. When showing the results of statements and concepts queries to the KBA:

  • Have an option to retrieve all results at once (maybe setting page size to unlimited?).
  • Show the number of results displayed and the number of total results available.
  • When applying filters on the results, update those counts to reflect what is being viewed.

@YinglunQ Talk with me if you have questions about this.

Fix metadata display and navigation functions on blackboard nodes (copied over from beacon-aggregator issue #19)

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.

image

Concept map node colouring is not working

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?)

Never-ending search results

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).

Disappearing edges when re-adding a deleted node

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

Zoom slider out of sync with graph view

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

Shareable concept map links

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.

User Annotations

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

Buttons with unimplemented functionality:

  • the extra Add to Map buttons (in the concept details pop-up next to Medical Specialty or Drug Used for Treatment) throw Not Implemented Exceptions
  • the Add Annotation buttons (in the concept map pop-up when logged in) throw Not Implemented Exceptions
  • the green library buttons (in the the Library column of the concept-picking window) all have zeroes on them and don't do anything when clicked
  • column names (in any list view) don't sort the results when clicked, although they still toggle between the up and down arrows

Showing relations for Object not working

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.

Concept map loading not working

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.

Searching with no beacons results in divide by zero error

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.

Upgrade to Vaadin 10 to support Web Components

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.

Fix direction of relations in statement table and blackboard display

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.

image


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.

image

Concept map export not working

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

Navigate to valid URLs from any page

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.

Improve filtering functionality in tk.bio interface

Finding the types of concepts and statements one wants is currently challenging. Some simple enhancements to filtering functionality that could improve this:

  1. 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.

  2. 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.

  3. Allow users to select multiple types when setting filters.

  4. 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.

Remove duplicate rows from statement table

There are often many rows with the same statement returned. Seems that they all come from Wikidata. Makes navigation and finding desired statements difficult. Example below.

image

Make the application's URL's better represent the application state

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.

Concept Aggregation (via exactMatches service)

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

Fix metadata display and navigation functions on blackboard nodes

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.

image

Showing evidence for wrong relationship

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:

  1. Select the subject (no arrow-head) of the edge you clicked
  2. Click on Show Relations
  3. Click on the first View button in the Relations tab

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.