SyndromeFinder

Click for a sample picture.

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