SyndromeFinder
SyndromeFinder helps genetics, pediatric, and neonatal providers figure out if a patient has a syndrome.
It takes your SQL query and looks through the clinical data from the Online Mendelian Inheritance of Man (OMIM).
It can also be used to suggest other clinical findings to check for to confirm a diagnosis,
and has been used as a teaching tool for students learning about genetics and dysmorphology.
Created 2011 by Sunshine Weiss, using Splink which was created by Robert Harris.
How it works:
Clinical findings from genetic conditions of OMIM have been organized into an ontology based on
the widely used text, Smith's Recognizable Patterns of Malformations.
The data is all stored as triples, with relationships between the syndromes and the findings.
Splink allows users to query the triple store.
How To use SyndromeFinder:
1. Startup Tomcat
a. open a terminal window
b. cd to the tomcat directory (eg /projects/tomcat-7.0-doc/api/org/apache/tomcat)
c. startup.sh
d. open a browser window and go to: http://localhost:8080/openrdf-workbench/repositories/Alpha/namespaces
2. Create a repository and add
<file://rdf-schema.xml>
<file://22-rdf-syntax-ns.xml>
<file://syndromtology.ttl>
<file://SyndromeData.ttl>
to get prefixes:
Prefix Namespace
dc http://purl.org/dc/elements/1.1/
rdfs http://www.w3.org/2000/01/rdf-schema#
owl http://www.w3.org/2002/07/owl#
rdf http://www.w3.org/1999/02/22-rdf-syntax-ns#
syo http://sunshine.com/ns#
syi http://sunshine.com/dysmorph/
3. Open Splink https://github.com/treboresque/Splink/archives/master
4. Load the Repository you've created.
5. Enter your query (sample queries are below)
6. Control - Enter to run the query.
7. Double click on an output cell to see it's connecting nodes. (MIM numbers have many links.)
Sample queries:
=====================
SELECT
?syndrome ?name
WHERE
{
syi:Alopecia syo:featureOf ?syndrome.
?syndrome syo:name ?name.
}
=====================
SELECT
?o ?name
WHERE
{
syi:Hypotonia syo:featureOf ?o.
syi:SparseHair syo:featureOf ?o.
?o syo:name ?name.
}
====================
SELECT distinct
?if_patient_has ?it_might_be
WHERE
{
# input
syi:Hypotonia syo:featureOf ?syndrome.
syi:MentalRetardation syo:featureOf ?syndrome.
# part that doesn't change
?syndrome syo:name ?it_might_be.
?if_patient_has syo:featureOf ?syndrome.
}
ORDER BY ?if_patient_has
=====================
SELECT distinct
?category ?if_patient_has ?it_might_be
WHERE
{
# input
?s syo:featureOf ?syndrome.
FILTER (regex(str(?s), "(?i)retard"))
?t syo:featureOf ?syndrome.
FILTER (regex(str(?t), "(?i)hypotonia"))
?u syo:featureOf ?syndrome.
FILTER (regex(str(?u), "(?i)clino"))
# part that doesn't change
?syndrome syo:name ?it_might_be.
?if_patient_has syo:featureOf ?syndrome.
?if_patient_has syo:inCategory ?category
}
ORDER BY ?category
====================
SELECT distinct
?category ?if_patient_has ?it_might_be
WHERE
{
# input
syi:Hypospadias syo:featureOf ?syndrome.
?s syo:featureOf ?syndrome.
FILTER (regex(str(?s), "(?i)enceph"))
# part that doesn't change
?syndrome syo:name ?it_might_be.
?if_patient_has syo:featureOf ?syndrome.
?if_patient_has syo:inCategory ?category
}
ORDER BY ?category
=================
SELECT distinct
?category ?if_patient_has ?it_might_be
WHERE
{
# input
syi:Hypotonia syo:featureOf ?syndrome.
?s syo:featureOf ?syndrome.
FILTER (regex(str(?s), "(?i)clinod"))
# part that doesn't change
?syndrome syo:name ?it_might_be.
?if_patient_has syo:featureOf ?syndrome.
?if_patient_has syo:inCategory ?category
}
ORDER BY ?it_might_be
Created in 2011