Git Product home page Git Product logo

patient-network's Introduction

PhenoTips Open Source logo

Maven build AGPL-3.0 Made in Canada

This repository is no longer maintained

The open-source, XWiki version of the PhenoTips platform is no longer actively developed or maintained.

PhenoTips development is now focused on the closed-source Enterprise solution available at phenotips.com.

A customizable patient data platform for genomic medicine

PhenoTips is a browser-based tool for recording linked clinical phenotype, genetic, disease, and family history data for patients with genetic diseases. PhenoTips includes a highly-customizable patient form, and includes sections to enter:

  • clinical symptoms & physical findings (HPO)
  • family information and history (including pedigree)
  • diagnosis (mapped to OMIM or Orphanet)
  • genes and variants of interest
  • measurements (with support for instant computation of percentiles and generation of growth charts)
  • demographic information (name, date of birth, ...)

Usage

You use PhenoTips directly through your web browser.

  • If you are running a standalone version of PhenoTips directly on your computer, you can usually find it at localhost:8080
  • If you are at a hospital or in a research group with your own PhenoTips instance, you should ask someone what URL to go to in order to access your instance

Powered by

  • HPO - phenotype ontology
  • OMIM - disease terminology
  • Orphanet - disease ontology
  • MONDO - disease ontology
  • Apache Solr - an enterprise search platform
  • XWiki - an enterprise web application development framework

Building from source

This project uses Apache Maven for lifecycle management.

First set up your environment:

  • Make sure a proper JDK is installed, Java SE 1.8 or higher. Just a JRE isn't enough, since the project requires compilation.
  • Install Apache Maven
  • Clone the source code: git clone [email protected]:phenotips/phenotips.git
  • Ensure Maven has enough memory: export MAVEN_OPTS="-Xmx2g -XX:MaxPermSize=256m"

Then, build the project with:

cd phenotips/
mvn install

Note: the first build may take a long time because all the dependencies are downloaded, but subsequent builds should only take a few minutes

Running a custom built instance

The project is split into several modules, among which distribution/standalone will result in a fully-working self-contained package ready to run. Running the application is as simple as:

  • mvn install, as stated above, to build the project
  • go to the directory where the final package is located, distribution/standalone/target
  • extract the contents of the phenotips-standalone-<version>.zip archive to a location of your choice (outside the target directory, to ensure it is not overwritten by subsequent builds)
  • launch the start script (start.sh on unix-like systems, start.bat on Windows)
  • open a browser and go to http://localhost:8080/
  • this is a completely local version, not connected to any other PhenoTips instance or other software in your institution; a default user is provided, you can log in using User: Admin and Password: admin (case-sensitive)

Support

The open-source community version of PhenoTips is no longer maintained or supported.

For information about the Enterprise version, please see phenotips.com.

License

This open-source version of PhenoTips was distributed under the AGPL version 3 (GNU Affero General Public License), a well known free software/open source license recognized both by the Free Software Foundation and the Open Source Initiative.

You can ensure compliance with this license by:

  • making sure every change made to the code is also be distributed under AGPL, and any works that integrate PhenoTips (even over APIs) use a compatible license
  • including prominent notice of the use of PhenoTips in any software that uses it
  • retaining all copyright notices in the software

For more information, please Contact Us.

patient-network's People

Contributors

a-gvo avatar allasm avatar antonkatz avatar brianlisk avatar buske avatar itaigershtansky avatar marta- avatar meatcar avatar mjshepherd avatar mkozakov avatar sasha-pavlov avatar sdumitriu avatar veronikaslc avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

patient-network's Issues

Similar cases causing NPE for some patients

E.g. https://phenomecentral.org/P0000084:

Failed to execute the [velocity] macroorg.xwiki.rendering.macro.MacroExecutionException: Failed to evaluate Velocity Macro for content [#if ($xcontext.action == 'get')
  $response.setContentType('application/json')
#end
{
  "query": $patient.toJSON(),
  "resultsCount" : $matches.size(),
  "results" : [
#foreach ($p in $matches)
  $p.toJSON()#if ($foreach.hasNext()),
  #end

#end
  ]
}]
    at org.xwiki.rendering.internal.macro.velocity.VelocityMacro.evaluateString(VelocityMacro.java:131)
    at org.xwiki.rendering.internal.macro.velocity.VelocityMacro.evaluateString(VelocityMacro.java:50)
    at org.xwiki.rendering.macro.script.AbstractScriptMacro.evaluateBlock(AbstractScriptMacro.java:302)
    at org.xwiki.rendering.macro.script.AbstractScriptMacro.execute(AbstractScriptMacro.java:198)
    at org.xwiki.rendering.macro.script.AbstractScriptMacro.execute(AbstractScriptMacro.java:59)
    at org.xwiki.rendering.internal.transformation.macro.MacroTransformation.transformOnce(MacroTransformation.java:191)
    at org.xwiki.rendering.internal.transformation.macro.MacroTransformation.transform(MacroTransformation.java:132)
    at org.xwiki.rendering.internal.transformation.DefaultTransformationManager.performTransformations(DefaultTransformationManager.java:87)
    at org.xwiki.display.internal.DocumentContentDisplayer.display(DocumentContentDisplayer.java:252)
    at org.xwiki.display.internal.DocumentContentDisplayer.display(DocumentContentDisplayer.java:125)
    at org.xwiki.display.internal.DocumentContentDisplayer.display(DocumentContentDisplayer.java:55)
    at org.xwiki.display.internal.DefaultDocumentDisplayer.display(DefaultDocumentDisplayer.java:80)
    at org.xwiki.display.internal.DefaultDocumentDisplayer.display(DefaultDocumentDisplayer.java:38)
    at org.xwiki.sheet.internal.SheetDocumentDisplayer.display(SheetDocumentDisplayer.java:113)
    at org.xwiki.sheet.internal.SheetDocumentDisplayer.display(SheetDocumentDisplayer.java:50)
    at org.xwiki.display.internal.ConfiguredDocumentDisplayer.display(ConfiguredDocumentDisplayer.java:67)
    at org.xwiki.display.internal.ConfiguredDocumentDisplayer.display(ConfiguredDocumentDisplayer.java:41)
    at com.xpn.xwiki.doc.XWikiDocument.getRenderedContent(XWikiDocument.java:995)
    at com.xpn.xwiki.doc.XWikiDocument.getRenderedContent(XWikiDocument.java:974)
    at com.xpn.xwiki.api.Document.getRenderedContent(Document.java:676)
    at sun.reflect.GeneratedMethodAccessor632.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.doInvoke(UberspectImpl.java:395)
    at org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.invoke(UberspectImpl.java:384)
    at org.apache.velocity.runtime.parser.node.ASTMethod.execute(ASTMethod.java:173)
    at org.apache.velocity.runtime.parser.node.ASTReference.execute(ASTReference.java:280)
    at org.apache.velocity.runtime.parser.node.ASTReference.render(ASTReference.java:369)
    at org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:72)
    at org.apache.velocity.runtime.parser.node.ASTIfStatement.render(ASTIfStatement.java:87)
    at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:342)
    at org.xwiki.velocity.internal.DefaultVelocityEngine.evaluate(DefaultVelocityEngine.java:228)
    at org.xwiki.velocity.internal.DefaultVelocityEngine.evaluate(DefaultVelocityEngine.java:187)
    at com.xpn.xwiki.render.XWikiVelocityRenderer.evaluate(XWikiVelocityRenderer.java:105)
    at com.xpn.xwiki.internal.template.DefaultPrivilegedTemplateRenderer.evaluate(DefaultPrivilegedTemplateRenderer.java:125)
    at com.xpn.xwiki.internal.template.DefaultPrivilegedTemplateRenderer.evaluateTemplate(DefaultPrivilegedTemplateRenderer.java:75)
    at com.xpn.xwiki.XWiki.evaluateTemplate(XWiki.java:1687)
    at com.xpn.xwiki.XWiki.parseTemplate(XWiki.java:1627)
    at com.xpn.xwiki.api.XWiki.parseTemplate(XWiki.java:918)
    at sun.reflect.GeneratedMethodAccessor189.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.doInvoke(UberspectImpl.java:395)
    at org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.invoke(UberspectImpl.java:384)
    at org.apache.velocity.runtime.parser.node.ASTMethod.execute(ASTMethod.java:173)
    at org.apache.velocity.runtime.parser.node.ASTReference.execute(ASTReference.java:280)
    at org.apache.velocity.runtime.parser.node.ASTReference.render(ASTReference.java:369)
    at org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:72)
    at org.apache.velocity.runtime.directive.VelocimacroProxy.render(VelocimacroProxy.java:216)
    at org.apache.velocity.runtime.directive.RuntimeMacro.render(RuntimeMacro.java:311)
    at org.apache.velocity.runtime.directive.RuntimeMacro.render(RuntimeMacro.java:230)
    at org.apache.velocity.runtime.parser.node.ASTDirective.render(ASTDirective.java:207)
    at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:342)
    at org.xwiki.velocity.internal.DefaultVelocityEngine.evaluate(DefaultVelocityEngine.java:228)
    at org.xwiki.velocity.internal.DefaultVelocityEngine.evaluate(DefaultVelocityEngine.java:187)
    at com.xpn.xwiki.render.XWikiVelocityRenderer.evaluate(XWikiVelocityRenderer.java:105)
    at com.xpn.xwiki.internal.template.DefaultPrivilegedTemplateRenderer.evaluate(DefaultPrivilegedTemplateRenderer.java:125)
    at com.xpn.xwiki.internal.template.DefaultPrivilegedTemplateRenderer.evaluateTemplate(DefaultPrivilegedTemplateRenderer.java:75)
    at com.xpn.xwiki.XWiki.evaluateTemplate(XWiki.java:1687)
    at com.xpn.xwiki.web.Utils.parseTemplate(Utils.java:167)
    at com.xpn.xwiki.web.XWikiAction.execute(XWikiAction.java:304)
    at com.xpn.xwiki.web.XWikiAction.execute(XWikiAction.java:129)
    at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:425)
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:228)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
    at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at com.xpn.xwiki.web.ActionFilter.doFilter(ActionFilter.java:121)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.xwiki.container.servlet.filters.internal.SavedRequestRestorerFilter.doFilter(SavedRequestRestorerFilter.java:208)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.xwiki.container.servlet.filters.internal.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:111)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
    at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291)
    at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:769)
    at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:698)
    at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:891)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.xwiki.velocity.XWikiVelocityException: Failed to evaluate content with id [xwiki:PhenoTips.SimilarCases]
    at org.xwiki.velocity.internal.DefaultVelocityEngine.evaluate(DefaultVelocityEngine.java:247)
    at org.xwiki.velocity.internal.DefaultVelocityEngine.evaluate(DefaultVelocityEngine.java:187)
    at org.xwiki.rendering.internal.macro.velocity.VelocityMacro.evaluateString(VelocityMacro.java:124)
    ... 91 more
Caused by: org.apache.velocity.exception.MethodInvocationException: Invocation of method 'toJSON' in  class org.phenotips.data.similarity.internal.RestrictedPatientSimilarityView threw exception java.lang.NullPointerException at xwiki:PhenoTips.SimilarCases[line 9, column 4]
    at org.apache.velocity.runtime.parser.node.ASTMethod.handleInvocationException(ASTMethod.java:243)
    at org.apache.velocity.runtime.parser.node.ASTMethod.execute(ASTMethod.java:187)
    at org.apache.velocity.runtime.parser.node.ASTReference.execute(ASTReference.java:280)
    at org.apache.velocity.runtime.parser.node.ASTReference.render(ASTReference.java:369)
    at org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:72)
    at org.apache.velocity.runtime.directive.Foreach.render(Foreach.java:420)
    at org.apache.velocity.runtime.parser.node.ASTDirective.render(ASTDirective.java:207)
    at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:342)
    at org.xwiki.velocity.internal.DefaultVelocityEngine.evaluate(DefaultVelocityEngine.java:228)
    ... 93 more
Caused by: java.lang.NullPointerException

Bogus Exomizer dependency breaks PhenoTips

similarity-data-impl depends (wrongly) on an exomizer library, which in fact contains an older version of boqa, incompatible with the boqa library we actually use for differential diagnosis.

Fix NullPointer exception when attempting to load gene data for a remote patient

Remote patients (as provided by remote matching part) do not have a valid local ID, and can't have a complete genotype due to realistic request size restrictions. So it is 1) a valid case when patient id is null in the similarity finder code and 2) there is no need to try to load genotype for such a patient

The current code fails because the cache used does not support null IDs

Consider non-observed features in the matching results as well

Currently even if a patient is public matching algorithm seem to ignore features which are explicitly specified as "not observed", e.g. the JSON returned and the "show phenotype and genotype similarity" button on the patient page do not show any non-observed features.

Even if those features are not useful for the matching algorithm itself, saying that the matched patient has those features may be useful, especially if the "source" patient has those "not observed" features as well.

Sometimes phenotype IDs are doubled

This happens sometimes when searching for similar patients:

2014-03-13 08:50:55,627 [https://copy.phenomecentral.org/copy/get/PhenoTips/SimilarCases] ERROR formationPatientSimilarityView - Error resolving term: HP:0012452 HP:0012452

GenotypeSimilarity candidate gene pre-filtering

Currently, all genes shared by two patients are fully explored (with early termination). Ideally, there would be an earlier cull step based on 1000GP data before looking at similarity with other patients.

Prenatal phenotypes appear as HPO codes in the similar patients comparison

e.g. image

Marta said:
Quick and dirty (very dirty) fix applied to dev.phenomecentral.org and phenomecentral.org . Something cleaner will be done soon. Is there an issue for this already on github? It should be reported to the patient-network project. For the record, the phenotypes showing up as HPO ids are prenatal phenotypes.

Support Connection-s between local and remote users

When a patient is matched using remote-matching API and is converted to JSON an attempt is made to generate a "contact token" (in AbstractPatientSimilarityView.toJSON()). This involves generating a "Connection" to anonymously connect the owners of the matched patients. However currently Connection only supports local users which have a XWiki document associated with them.

We need to rethink the contact mechanism, to support remote users as well (though we do not need to have the ability to grant them patient access, so this contact token should not necessarily involve a "connection")

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.