Well there are other things that can be done in JavaScript beyond substructure search. For example, Tanimoto binary fingerprint similarity calculation needs just two short functions:
function popcount(b) {
var c, bi3b = 0xE994;
c = 3 & (bi3b >> ((b << 1) & 14));
c += 3 & (bi3b >> ((b >> 2) & 14));
c += 3 & (bi3b >> ((b >> 5) & 6));
return c;
}
function tanimoto(fp1, fp2) {
var a=0;
var b=0;
var c=0;
for (var i=fp1.length-1; i>=0; i--) {
var block_fp1=fp1[i];
var block_fp2=fp2[i];
a += popcount(block_fp1);
b += popcount(block_fp2);
c += popcount(block_fp1 & block_fp2);
}
return c/(a+b-c);
}
The fingerprints have to be converted into JavaScript arrays of equal length containing signed numbers:
onclick="alert(tanimoto(new Array('1','-1073741825'),new Array('3','2147483647')));"
0.9
No comments:
Post a Comment