Performance comparison #2, Simple 13C Spectrum Similarity Search

Prolog

Bioclipse code

var start2 = new Date().getTime();
// js.say(blipkit.queryProlog( [ "findMoleculeWithPeakValuesNear", "100", "[23.3, 23.3, 23.5, 23.5, 26.1, 60.5, 90.0, 132.1, 0]", "Molecules" ] ));
js.say(blipkit.queryProlog( [ "findMoleculeWithPeakValuesNear", "100", "[12.5, 13.8, 23.8, 36.5, 44.3, 78.8, 87.3, 133.8, 0]", "Molecules" ] ));
var elapsed2 = (new Date().getTime() - start2)/1000;
js.say("Total time for finding molecule by shift values (Near-search): " + elapsed2 + " s");

Results

[['.'('http://pele.farmbio.uu.se/nmrshiftdb/?moleculeId=2189', [])]]
Total time for finding molecule by shift values (Near-search): 2.575 s
[['.'('http://pele.farmbio.uu.se/nmrshiftdb/?moleculeId=10022848', [])],
['.'('http://pele.farmbio.uu.se/nmrshiftdb/?moleculeId=20028275', [])],
['.'('http://pele.farmbio.uu.se/nmrshiftdb/?moleculeId=10009791', [])],
['.'('http://pele.farmbio.uu.se/nmrshiftdb/?moleculeId=10022297', [])],
['.'('http://pele.farmbio.uu.se/nmrshiftdb/?moleculeId=10022294', [])],
['.'('http://pele.farmbio.uu.se/nmrshiftdb/?moleculeId=20000143', [])],
['.'('http://pele.farmbio.uu.se/nmrshiftdb/?moleculeId=10022207', [])],
['.'('http://pele.farmbio.uu.se/nmrshiftdb/?moleculeId=10017654', [])],
['.'('http://pele.farmbio.uu.se/nmrshiftdb/?moleculeId=76533', [])],
['.'('http://pele.farmbio.uu.se/nmrshiftdb/?moleculeId=30085506', [])],
['.'('http://pele.farmbio.uu.se/nmrshiftdb/?moleculeId=76477', [])],
['.'('http://pele.farmbio.uu.se/nmrshiftdb/?moleculeId=89235', [])],
['.'('http://pele.farmbio.uu.se/nmrshiftdb/?moleculeId=10022911', [])],
['.'('http://pele.farmbio.uu.se/nmrshiftdb/?moleculeId=89237', [])]]
Total time for finding molecule by shift values (Near-search): 2.385 s
[['.'('http://pele.farmbio.uu.se/nmrshiftdb/?moleculeId=90000', [])]]
Total time for finding molecule by shift values (Near-search): 2.729 s

Prolog code

findMoleculeWithPeakValuesNear( SearchShiftValues, Molecules ) :-
  setof( Molecule, 
         ( listPeakShiftsOfMolecule( Molecule, MoleculeShiftValues ),
           containsListElementsNear( SearchShiftValues, MoleculeShiftValues ) ),
           Molecules ).
 
listPeakShiftsOfMolecule( Molecule, ListOfPeaks ) :-
  hasSpectrum( Molecule, Spectrum ),
  findall( ShiftValue, 
           ( hasPeak( Spectrum, Peak ),
             hasShiftValue( Peak, ShiftValue ) ), 
             ListOfPeaks ).
 
containsListElementsNear( [ElemHead|ElemTail], List ) :-
  memberCloseTo( ElemHead, List ),
  ( containsListElementsNear( ElemTail, List );
    ElemTail == [] ).  
 
memberCloseTo( X, [ Y | Tail ] ) :-
  closeTo( X, Y ).
memberCloseTo( X, [ Y | Tail ] ) :-
  memberCloseTo( X, Tail ).
 
closeTo( Val1, Val2 ) :-
  abs(Val1 - Val2) =< 0.3.
 
hasSpectrumId( Subject, Predicate ) :-
  rdf_db:rdf( Subject, 'http://www.nmrshiftdb.org/onto#spectrumId', Predicate).
 
hasShiftValue( Peak, ShiftValue ) :-
  rdf_db:rdf( Peak, 'http://www.nmrshiftdb.org/onto#hasShift', literal(type('nmr:ppm', ShiftValueLiteral))),
  atom_number_create( ShiftValueLiteral, ShiftValue ).
 
hasPeak( Subject, Predicate ) :-
  rdf_db:rdf( Subject, 'http://www.nmrshiftdb.org/onto#hasPeak', Predicate).

Pellet

Bioclipse JS Code

// JavaScript
 
//var myStore = pellet.createStore("runningbioclipse/JenaTDB3");
// var myStore = pellet.createInMemoryStore();
var myStore = pellet.createStore("runningbioclipse/JenaTDB6");
var start = new Date().getTime();
rdf.importFile(myStore, "runningbioclipse/nmrshiftdata.works.rdf.xml", "RDF/XML");
var elapsed = (new Date().getTime() - start)/1000;
js.say("Total time for importing nmrshiftdata.works.rdf.xml with Pellet: " + elapsed + " s");
 
// rdf.importFile(myStore, "runningbioclipse/NMRDatatypes.R2.rdf.xml", "RDF/XML");
 
// var myStore = pellet.createStore("runningbioclipse/JenaTDB3");
 
var sparql = " PREFIX onto: <http://www.nmrshiftdb.org/onto#> PREFIX afn: <http://jena.hpl.hp.com/ARQ/function#> PREFIX fn: <http://www.w3.org/2005/xpath-functions#> SELECT distinct ?shift WHERE {   ?peak onto:hasShift ?shift .   FILTER (     fn:abs(?shift - 12.5) < 0.3 &&     fn:abs(?shift - 23.8) <= 0.3 &&     fn:abs(?shift - 36.5) <= 0.3 &&     fn:abs(?shift - 44.3) <= 0.3 &&     fn:abs(?shift - 78.8) <= 0.3 &&     fn:abs(?shift - 87.3) <= 0.3 &&     fn:abs(?shift - 133.8) <= 0.3 &&     fn:abs(?shift - 0.0) <= 0.3 )} LIMIT 10";    
 
var start2 = new Date().getTime();
js.say(pellet.reason(myStore, sparql));
var elapsed2 = (new Date().getTime() - start2)/1000;
js.say("Total time for retreiving Molecules with shift near [12.5, 13.8, 23.8, 36.5, 44.3, 78.8, 87.3, 133.8, 0], with Pellet: " + elapsed2 + " s");

Results

Total time for importing nmrshiftdata.works.rdf.xml with Pellet: 137.739 s
[]
Total time for retreiving Molecules with shift near [12.5, 13.8, 23.8, 36.5,
44.3, 78.8, 87.3, 133.8, 0], with Pellet: 215.035 s

No results! :( I'm doing something wrong here ...