PennTURBO / turbo-assay-templating

Here's a first step in modelling assays* with OBO* terms. It generates a template that can be executed by the ROBOT* application, leading to an RDF data model. Assays currently in scope have a specimen collected from an organism as the evaluant and can be used in EHR 2ry research or in vivo basic research. We currently bootstrapping the models from LOINC, but they are not intended for patient care.
1 stars 0 forks source link

Analyte? Target Entity? #1

Open turbomam opened 4 years ago

turbomam commented 4 years ago

The TURBO assay template columns are practically identical to the OBI assay template columns.

I am working on a SPARQL query that will migrate or add analute eligible entities (molecular entities or atoms) into the analyte column

It might also be possible to make that distinction within the script that builds the template.

In either case, handling target entities like 'oxycodone or oxymorphone' will be a challenge

turbomam commented 4 years ago

ROBOT column syntax:

turbomam commented 4 years ago

Issues that affect analyte conversion (among other aspects of the programmatic template generation)

Some non-reasoning solutions and lingering concerns:

Example requiring conversion to analyte: Quantitiative assay for '(-)-cotinine' in 'urine specimen' ['scalar measurement datum' and ('has measurement unit label' some 'mass per unit volume')]

See also #4

SPARQL approach

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
insert {
    graph <http://example.com/resource/analyte> {
        ?assay rdfs:subClassOf  [ owl:intersectionOf [  rdf:first  [ a owl:Restriction ;
                                                                     owl:onProperty <http://purl.obolibrary.org/obo/BFO_0000055> ;
                                                                     owl:someValuesFrom [ owl:intersectionOf  [ rdf:first  <http://purl.obolibrary.org/obo/OBI_0000275> ]] ] ;
                                                                                                                rdf:rest  [ rdf:first [ a owl:Restriction ;
                                                                                                                                        owl:onProperty <http://purl.obolibrary.org/obo/RO_0000081> ;
                                                                                                                                        owl:someValuesFrom  [ owl:intersectionOf  [ rdf:first ?targent ] ] ] ]  ]  ] .
        ?assay rdfs:subClassOf  [ owl:intersectionOf [  rdf:first  [ a owl:Restriction ;
                                                                     owl:onProperty <http://purl.obolibrary.org/obo/OBI_0000293> ;
                                                                     owl:someValuesFrom [ owl:intersectionOf  [ rdf:first  ?targent ]] ] ;
                                                                                                                rdf:rest  [ rdf:first [ a owl:Restriction ;
                                                                                                                                        owl:onProperty <http://purl.obolibrary.org/obo/RO_0000087> ;
                                                                                                                                        owl:someValuesFrom  [ owl:intersectionOf  [ rdf:first <http://purl.obolibrary.org/obo/OBI_0000275> ] ] ] ]  ]  ] .
        <http://purl.obolibrary.org/obo/OBI_0000275> rdfs:label "analyte role" ;
                                                                               rdfs:subClassOf <http://purl.obolibrary.org/obo/OBI_0002444> .
        <http://purl.obolibrary.org/obo/OBI_0002444> rdfs:label "measurand role" ;
                                                                                 rdfs:subClassOf <http://purl.obolibrary.org/obo/BFO_0000023> .
    }
} where {
    ?assay rdfs:subClassOf  [ a owl:Restriction ;
                              owl:onProperty <http://purl.obolibrary.org/obo/OBI_0000299> ;
                              owl:someValuesFrom [ a owl:Restriction ;
                                                   owl:onProperty <http://purl.obolibrary.org/obo/IAO_0000136> ;
                                                   owl:someValuesFrom ?targent ;
                                                   ]  ] .
    values ?eligible {
        <http://purl.obolibrary.org/obo/CHEBI_23367> <http://purl.obolibrary.org/obo/CHEBI_33250>
    }
    ?targent rdfs:subClassOf* <http://purl.obolibrary.org/obo/CHEBI_23367> .
}

Added 12424 statements. Update took 3.8s, moments ago.

WITH NO ELIGIBILITY CONSTRAINT: Added 12814 statements. Update took 0.3s, moments ago.

The OBI assays template "and"s the "has analyte input" and "realizes analyte role axioms" together.Here, they are asserted independently. Is that acceptable?

Positive control

Quantitiative assay for '(-)-cotinine' in 'urine specimen' ['scalar measurement datum' and ('has measurement unit label' some 'mass per unit volume')]

Not currently updated

Some are good negative controls, but some are missed by the current algorithm for reasons discussed above or...

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
select * where {
    ?assay rdfs:subClassOf* <http://purl.obolibrary.org/obo/OBI_0000070> ;
                          rdfs:label ?l .
    minus {
        ?assay rdfs:subClassOf  [ owl:intersectionOf [  rdf:first  [ a owl:Restriction ;
                                                                     owl:onProperty <http://purl.obolibrary.org/obo/BFO_0000055> ;
                                                                     owl:someValuesFrom [ owl:intersectionOf  [ rdf:first  <http://purl.obolibrary.org/obo/OBI_0000275> ]] ] ;
                                                                                                                rdf:rest  [ rdf:first [ a owl:Restriction ;
                                                                                                                                        owl:onProperty <http://purl.obolibrary.org/obo/RO_0000081> ;
                                                                                                                                        owl:someValuesFrom  [ owl:intersectionOf  [ rdf:first ?targent ] ] ] ]  ]  ] .
        ?assay rdfs:subClassOf  [ owl:intersectionOf [  rdf:first  [ a owl:Restriction ;
                                                                     owl:onProperty <http://purl.obolibrary.org/obo/OBI_0000293> ;
                                                                     owl:someValuesFrom [ owl:intersectionOf  [ rdf:first  ?targent ]] ] ;
                                                                                                                rdf:rest  [ rdf:first [ a owl:Restriction ;
                                                                                                                                        owl:onProperty <http://purl.obolibrary.org/obo/RO_0000087> ;
                                                                                                                                        owl:someValuesFrom  [ owl:intersectionOf  [ rdf:first <http://purl.obolibrary.org/obo/OBI_0000275> ] ] ] ]  ]  ] .
    }
}
l targent
http://purl.obolibrary.org/obo/OBI_0000070 "assay"@en
turbo:TURBO_3000001 Quantitiative assay for 'immunoglobulin complex' and 'has disposition to bind' some 'acetylcholine receptor binding' in 'blood serum specimen' ['scalar measurement datum' and ('has measurement unit label' some 'unit of molarity')]
turbo:TURBO_3000002 Quantitiative assay for 'IgG immunoglobulin complex' and 'has disposition to bind' some 'Polistes' in 'blood serum specimen' ['scalar measurement datum' and ('has measurement unit label' some 'mass per unit volume')]
turbo:TURBO_3000003 Quantitiative assay for 'IgG immunoglobulin complex' and 'has disposition to bind' some 'Dolichovespula arenaria' in 'blood serum specimen' ['scalar measurement datum' and ('has measurement unit label' some 'mass per unit volume')]
turbo:TURBO_3000004 Quantitiative assay for 'IgG immunoglobulin complex' and 'has disposition to bind' some 'Dolichovespula maculata' in 'blood serum specimen' ['scalar measurement datum' and ('has measurement unit label' some 'mass per unit volume')]
turbo:TURBO_3000174 Quantitiative assay for 'osmolality' in ('blood serum specimen' or 'blood plasma specimen') ['scalar measurement datum' and ('is about' some 'osmolality')]
turbo:TURBO_3000175 Quantitiative assay for 'osmolality' in 'feces specimen' ['scalar measurement datum' and ('is about' some 'osmolality')]
turbo:TURBO_3000176 Quantitiative assay for 'osmolality' in 'urine specimen' ['scalar measurement datum' and ('is about' some 'osmolality')]
turbo:TURBO_3000207 Quantitiative assay for 'growth hormone' in ('blood serum specimen' or 'blood plasma specimen') ['scalar measurement datum' and ('has measurement unit label' some 'mass per unit volume')]
turbo:TURBO_3000258 Quantitiative assay for ('amitriptyline' and 'nortriptyline') in ('blood serum specimen' or 'blood plasma specimen') ['scalar measurement datum' and ('has measurement unit label' some 'mass per unit volume')]
turbo:TURBO_3000309 Quantitiative assay for 'propoxyphene' in 'urine specimen' ['scalar measurement datum' and ('has measurement unit label' some 'mass per unit volume')]
turbo:TURBO_3000322 Quantitiative assay for ('doxepin' and 'desmethyldoxepin') in ('blood serum specimen' or 'blood plasma specimen') ['scalar measurement datum' and ('has measurement unit label' some 'mass per unit volume')]
turbo:TURBO_3000327 Quantitiative assay for 'fluoxetine' in ('blood serum specimen' or 'blood plasma specimen') ['scalar measurement datum' and ('has measurement unit label' some 'mass per unit volume')]
turbo:TURBO_3000345 Quantitiative assay for 'nicotine' in ('blood serum specimen' or 'blood plasma specimen') ['scalar measurement datum' and ('has measurement unit label' some 'mass per unit volume')]
turbo:TURBO_3000376 Quantitiative assay for ('calcidiol' and 'vitamin D2') in ('blood serum specimen' or 'blood plasma specimen') ['scalar measurement datum' and ('has measurement unit label' some 'mass per unit volume')]
turbo:TURBO_3000389 Quantitiative assay for ('amphetamine' and 'methamphetamine') in 'urine specimen' ['scalar measurement datum' and ('has measurement unit label' some 'mass per unit volume')]
turbo:TURBO_3000423 Quantitiative assay for 'adalimumab' in ('blood serum specimen' or 'blood plasma specimen') ['scalar measurement datum' and ('has measurement unit label' some 'mass per unit volume')]
turbo:TURBO_3000428 Quantitiative assay for ('imipramine' and 'desipramine') in ('blood serum specimen' or 'blood plasma specimen') ['scalar measurement datum' and ('has measurement unit label' some 'mass per unit volume')]
turbomam commented 4 years ago

Queries above have been updated. See pipeline/config/*.rq