# HG changeset patch # User mas01cr # Date 1264674222 0 # Node ID bcc7a6ddb2c8aa109c2dc7072584813b0824d373 # Parent 01af8c56eb8d50f842f3873d398f96912246aae6 Better treatment of refine.hopsize Only adapt the query loop hopping if ADB_REFINE_HOP_SIZE is actually on the refine flags, rather than blithely taking the value of refine.hopsize. Significantly reduces the chances of inadvertently causing an infinite loop. Adjust the tests to remove the 23 now useless instances of "refine.hopsize = 1;" Closes trac ticket #16 diff -r 01af8c56eb8d -r bcc7a6ddb2c8 libtests/0003/prog1.c --- a/libtests/0003/prog1.c Wed Jan 13 15:07:58 2010 +0000 +++ b/libtests/0003/prog1.c Thu Jan 28 10:23:42 2010 +0000 @@ -21,7 +21,6 @@ adb_query_parameters_t parms = {ADB_ACCUMULATION_DB, ADB_DISTANCE_DOT_PRODUCT, 10, 0}; adb_query_refine_t refine = {0}; - refine.hopsize = 1; adb_query_spec_t spec; spec.qid = qid; diff -r 01af8c56eb8d -r bcc7a6ddb2c8 libtests/0004/prog1.c --- a/libtests/0004/prog1.c Wed Jan 13 15:07:58 2010 +0000 +++ b/libtests/0004/prog1.c Thu Jan 28 10:23:42 2010 +0000 @@ -23,7 +23,6 @@ adb_query_parameters_t parms = {ADB_ACCUMULATION_DB, ADB_DISTANCE_DOT_PRODUCT, 10, 0}; adb_query_refine_t refine = {0}; - refine.hopsize = 1; adb_query_spec_t spec; spec.qid = qid; diff -r 01af8c56eb8d -r bcc7a6ddb2c8 libtests/0006/prog1.c --- a/libtests/0006/prog1.c Wed Jan 13 15:07:58 2010 +0000 +++ b/libtests/0006/prog1.c Thu Jan 28 10:23:42 2010 +0000 @@ -21,7 +21,6 @@ adb_query_parameters_t parms = {ADB_ACCUMULATION_PER_TRACK, ADB_DISTANCE_EUCLIDEAN_NORMED, 10, 10}; adb_query_refine_t refine = {0}; - refine.hopsize = 1; adb_query_spec_t spec; spec.qid = qid; diff -r 01af8c56eb8d -r bcc7a6ddb2c8 libtests/0007/prog1.c --- a/libtests/0007/prog1.c Wed Jan 13 15:07:58 2010 +0000 +++ b/libtests/0007/prog1.c Thu Jan 28 10:23:42 2010 +0000 @@ -21,7 +21,6 @@ adb_query_parameters_t parms = {ADB_ACCUMULATION_PER_TRACK, ADB_DISTANCE_EUCLIDEAN_NORMED, 10, 10}; adb_query_refine_t refine = {0}; - refine.hopsize = 1; adb_query_spec_t spec; spec.qid = qid; diff -r 01af8c56eb8d -r bcc7a6ddb2c8 libtests/0008/prog1.c --- a/libtests/0008/prog1.c Wed Jan 13 15:07:58 2010 +0000 +++ b/libtests/0008/prog1.c Thu Jan 28 10:23:42 2010 +0000 @@ -27,7 +27,6 @@ adb_query_parameters_t parms = {ADB_ACCUMULATION_PER_TRACK, ADB_DISTANCE_EUCLIDEAN_NORMED, 10, 10}; adb_query_refine_t refine = {0}; - refine.hopsize = 1; adb_query_spec_t spec; spec.qid = qid; diff -r 01af8c56eb8d -r bcc7a6ddb2c8 libtests/0009/prog1.c --- a/libtests/0009/prog1.c Wed Jan 13 15:07:58 2010 +0000 +++ b/libtests/0009/prog1.c Thu Jan 28 10:23:42 2010 +0000 @@ -26,7 +26,6 @@ adb_query_parameters_t parms = {ADB_ACCUMULATION_PER_TRACK, ADB_DISTANCE_DOT_PRODUCT, 10, 10}; adb_query_refine_t refine = {0}; - refine.hopsize = 1; adb_query_spec_t spec; spec.qid = qid; diff -r 01af8c56eb8d -r bcc7a6ddb2c8 libtests/0010/prog1.c --- a/libtests/0010/prog1.c Wed Jan 13 15:07:58 2010 +0000 +++ b/libtests/0010/prog1.c Thu Jan 28 10:23:42 2010 +0000 @@ -27,7 +27,6 @@ adb_query_refine_t refine = {0}; refine.flags |= ADB_REFINE_RADIUS; refine.radius = 5; - refine.hopsize = 1; adb_query_spec_t spec; spec.qid = qid; diff -r 01af8c56eb8d -r bcc7a6ddb2c8 libtests/0011/prog1.c --- a/libtests/0011/prog1.c Wed Jan 13 15:07:58 2010 +0000 +++ b/libtests/0011/prog1.c Thu Jan 28 10:23:42 2010 +0000 @@ -22,7 +22,6 @@ adb_query_parameters_t parms = {ADB_ACCUMULATION_PER_TRACK, ADB_DISTANCE_EUCLIDEAN_NORMED, 10, 10}; adb_query_refine_t refine = {0}; - refine.hopsize = 1; adb_query_spec_t spec; spec.qid = qid; diff -r 01af8c56eb8d -r bcc7a6ddb2c8 libtests/0012/prog1.c --- a/libtests/0012/prog1.c Wed Jan 13 15:07:58 2010 +0000 +++ b/libtests/0012/prog1.c Thu Jan 28 10:23:42 2010 +0000 @@ -22,7 +22,6 @@ adb_query_parameters_t parms = {ADB_ACCUMULATION_PER_TRACK, ADB_DISTANCE_EUCLIDEAN_NORMED, 10, 10}; adb_query_refine_t refine = {0}; - refine.hopsize = 1; adb_query_spec_t spec; spec.qid = qid; diff -r 01af8c56eb8d -r bcc7a6ddb2c8 libtests/0022/prog1.c --- a/libtests/0022/prog1.c Wed Jan 13 15:07:58 2010 +0000 +++ b/libtests/0022/prog1.c Thu Jan 28 10:23:42 2010 +0000 @@ -27,7 +27,6 @@ adb_query_parameters_t parms = {ADB_ACCUMULATION_PER_TRACK, ADB_DISTANCE_EUCLIDEAN_NORMED, 10, 10}; adb_query_refine_t refine = {0}; - refine.hopsize = 1; adb_query_spec_t spec; spec.qid = qid; diff -r 01af8c56eb8d -r bcc7a6ddb2c8 libtests/0023/prog1.c --- a/libtests/0023/prog1.c Wed Jan 13 15:07:58 2010 +0000 +++ b/libtests/0023/prog1.c Thu Jan 28 10:23:42 2010 +0000 @@ -27,7 +27,6 @@ adb_query_parameters_t parms = {ADB_ACCUMULATION_PER_TRACK, ADB_DISTANCE_EUCLIDEAN_NORMED, 10, 10}; adb_query_refine_t refine = {0}; - refine.hopsize = 1; adb_query_spec_t spec; spec.qid = qid; diff -r 01af8c56eb8d -r bcc7a6ddb2c8 libtests/0024/prog1.c --- a/libtests/0024/prog1.c Wed Jan 13 15:07:58 2010 +0000 +++ b/libtests/0024/prog1.c Thu Jan 28 10:23:42 2010 +0000 @@ -27,7 +27,6 @@ adb_query_parameters_t parms = {ADB_ACCUMULATION_PER_TRACK, ADB_DISTANCE_EUCLIDEAN_NORMED, 10, 10}; adb_query_refine_t refine = {0}; - refine.hopsize = 1; adb_query_spec_t spec; spec.qid = qid; diff -r 01af8c56eb8d -r bcc7a6ddb2c8 libtests/0025/prog1.c --- a/libtests/0025/prog1.c Wed Jan 13 15:07:58 2010 +0000 +++ b/libtests/0025/prog1.c Thu Jan 28 10:23:42 2010 +0000 @@ -23,7 +23,6 @@ adb_query_parameters_t parms = {ADB_ACCUMULATION_PER_TRACK, ADB_DISTANCE_EUCLIDEAN_NORMED, 10, 10}; adb_query_refine_t refine = {0}; - refine.hopsize = 1; adb_query_spec_t spec; spec.qid = qid; diff -r 01af8c56eb8d -r bcc7a6ddb2c8 libtests/0027/prog1.c --- a/libtests/0027/prog1.c Wed Jan 13 15:07:58 2010 +0000 +++ b/libtests/0027/prog1.c Thu Jan 28 10:23:42 2010 +0000 @@ -32,7 +32,6 @@ adb_query_parameters_t parms = {ADB_ACCUMULATION_PER_TRACK, ADB_DISTANCE_EUCLIDEAN_NORMED, 10, 10}; adb_query_refine_t refine = {0}; - refine.hopsize = 1; adb_query_spec_t spec; spec.qid = qid; diff -r 01af8c56eb8d -r bcc7a6ddb2c8 libtests/0028/prog1.c --- a/libtests/0028/prog1.c Wed Jan 13 15:07:58 2010 +0000 +++ b/libtests/0028/prog1.c Thu Jan 28 10:23:42 2010 +0000 @@ -39,7 +39,6 @@ adb_query_parameters_t parms = {ADB_ACCUMULATION_PER_TRACK, ADB_DISTANCE_EUCLIDEAN_NORMED, 10, 10}; adb_query_refine_t refine = {0}; - refine.hopsize = 1; adb_query_spec_t spec; spec.qid = qid; diff -r 01af8c56eb8d -r bcc7a6ddb2c8 libtests/0029/prog1.c --- a/libtests/0029/prog1.c Wed Jan 13 15:07:58 2010 +0000 +++ b/libtests/0029/prog1.c Thu Jan 28 10:23:42 2010 +0000 @@ -34,7 +34,6 @@ adb_query_parameters_t parms = {ADB_ACCUMULATION_PER_TRACK, ADB_DISTANCE_EUCLIDEAN_NORMED, 10, 10}; adb_query_refine_t refine = {0}; - refine.hopsize = 1; adb_query_spec_t spec; spec.qid = qid; diff -r 01af8c56eb8d -r bcc7a6ddb2c8 libtests/0030/prog1.c --- a/libtests/0030/prog1.c Wed Jan 13 15:07:58 2010 +0000 +++ b/libtests/0030/prog1.c Thu Jan 28 10:23:42 2010 +0000 @@ -29,7 +29,6 @@ adb_query_refine_t refine = {0}; refine.flags = ADB_REFINE_RADIUS; refine.radius = 0.1; - refine.hopsize = 1; adb_query_spec_t spec; spec.qid = qid; diff -r 01af8c56eb8d -r bcc7a6ddb2c8 libtests/0031/prog1.c --- a/libtests/0031/prog1.c Wed Jan 13 15:07:58 2010 +0000 +++ b/libtests/0031/prog1.c Thu Jan 28 10:23:42 2010 +0000 @@ -28,7 +28,6 @@ adb_query_parameters_t parms = {ADB_ACCUMULATION_PER_TRACK, ADB_DISTANCE_EUCLIDEAN_NORMED, 10, 10}; adb_query_refine_t refine = {0}; - refine.hopsize = 1; adb_query_spec_t spec; spec.qid = qid; diff -r 01af8c56eb8d -r bcc7a6ddb2c8 libtests/0032/prog1.c --- a/libtests/0032/prog1.c Wed Jan 13 15:07:58 2010 +0000 +++ b/libtests/0032/prog1.c Thu Jan 28 10:23:42 2010 +0000 @@ -27,7 +27,6 @@ adb_query_parameters_t parms = {ADB_ACCUMULATION_PER_TRACK, ADB_DISTANCE_DOT_PRODUCT, 10, 10}; adb_query_refine_t refine = {0}; - refine.hopsize = 1; adb_query_spec_t spec; spec.qid = qid; diff -r 01af8c56eb8d -r bcc7a6ddb2c8 libtests/0033/prog1.c --- a/libtests/0033/prog1.c Wed Jan 13 15:07:58 2010 +0000 +++ b/libtests/0033/prog1.c Thu Jan 28 10:23:42 2010 +0000 @@ -28,7 +28,6 @@ adb_query_refine_t refine = {0}; refine.flags |= ADB_REFINE_RADIUS; refine.radius = 5; - refine.hopsize = 1; adb_query_spec_t spec; spec.qid = qid; diff -r 01af8c56eb8d -r bcc7a6ddb2c8 libtests/0035/prog1.c --- a/libtests/0035/prog1.c Wed Jan 13 15:07:58 2010 +0000 +++ b/libtests/0035/prog1.c Thu Jan 28 10:23:42 2010 +0000 @@ -26,7 +26,6 @@ adb_query_parameters_t parms = {ADB_ACCUMULATION_PER_TRACK, ADB_DISTANCE_EUCLIDEAN, 1, 10}; adb_query_refine_t refine = {0}; - refine.hopsize = 1; adb_query_spec_t spec; spec.qid = qid; diff -r 01af8c56eb8d -r bcc7a6ddb2c8 libtests/0036/prog1.c --- a/libtests/0036/prog1.c Wed Jan 13 15:07:58 2010 +0000 +++ b/libtests/0036/prog1.c Thu Jan 28 10:23:42 2010 +0000 @@ -25,7 +25,6 @@ adb_query_parameters_t parms = {ADB_ACCUMULATION_PER_TRACK, ADB_DISTANCE_EUCLIDEAN_NORMED, 10, 10}; adb_query_refine_t refine = {0}; - refine.hopsize = 1; adb_query_spec_t spec; spec.qid = qid; diff -r 01af8c56eb8d -r bcc7a6ddb2c8 libtests/0037/prog1.c --- a/libtests/0037/prog1.c Wed Jan 13 15:07:58 2010 +0000 +++ b/libtests/0037/prog1.c Thu Jan 28 10:23:42 2010 +0000 @@ -42,7 +42,6 @@ adb_query_parameters_t parms = {ADB_ACCUMULATION_PER_TRACK, ADB_DISTANCE_EUCLIDEAN_NORMED, 10, 10}; adb_query_refine_t refine = {0}; - refine.hopsize = 1; adb_query_spec_t spec; spec.qid = qid; diff -r 01af8c56eb8d -r bcc7a6ddb2c8 query.cpp --- a/query.cpp Wed Jan 13 15:07:58 2010 +0000 +++ b/query.cpp Thu Jan 28 10:23:42 2010 +0000 @@ -135,7 +135,7 @@ // Matched Filter // HOP SIZE == 1 double* spd; - if(HOP_SIZE == 1) { // HOP_SIZE = shingleHop + if(!(spec->refine.flags & ADB_REFINE_HOP_SIZE)) { for(w = 0; w < wL; w++) { for(j = 0; j < numVectors - w; j++) { sp = DD[j]; @@ -145,7 +145,7 @@ *sp++ += *spd++; } } - } else { // HOP_SIZE != 1 + } else { for(w = 0; w < wL; w++) { for(j = 0; j < numVectors - w; j += HOP_SIZE) { sp = DD[j]; @@ -516,7 +516,7 @@ return 1; } - unsigned j,k,track,trackOffset=0, HOP_SIZE = spec->refine.hopsize; + unsigned j,k,track,trackOffset=0; unsigned wL = spec->qid.sequence_length; double **D = 0; // Differences query and target double **DD = 0; // Matched filter distance @@ -524,6 +524,13 @@ D = new double*[qpointers.nvectors]; // pre-allocate DD = new double*[qpointers.nvectors]; + unsigned HOP_SIZE; + + if(spec->refine.flags & ADB_REFINE_HOP_SIZE) { + HOP_SIZE = spec->refine.hopsize; + } else { + HOP_SIZE = 1; + } off_t trackIndexOffset; // Track loop