Mercurial > hg > audiodb
comparison query.cpp @ 217:685eb707b660 refactoring
set_up_db() analogue to set_up_query()
author | mas01cr |
---|---|
date | Tue, 04 Dec 2007 12:47:49 +0000 |
parents | cd3dced4f534 |
children | 016303fc3e1b |
comparison
equal
deleted
inserted
replaced
216:cd3dced4f534 | 217:685eb707b660 |
---|---|
206 sequence_sum(*qpp, *nvp, sequenceLength); | 206 sequence_sum(*qpp, *nvp, sequenceLength); |
207 sequence_average(*qpp, *nvp, sequenceLength); | 207 sequence_average(*qpp, *nvp, sequenceLength); |
208 } | 208 } |
209 } | 209 } |
210 | 210 |
211 void audioDB::set_up_db(double **snp, double **spp, unsigned int *dvp) { | |
212 *dvp = dbH->length / (dbH->dim * sizeof(double)); | |
213 *snp = new double[*dvp]; | |
214 | |
215 double *snpp = *snp, *sppp = 0; | |
216 memcpy(*snp, l2normTable, *dvp * sizeof(double)); | |
217 | |
218 if (usingPower) { | |
219 if (!(dbH->flags & O2_FLAG_POWER)) { | |
220 error("database not power-enabled", dbName); | |
221 } | |
222 *spp = new double[*dvp]; | |
223 sppp = *spp; | |
224 memcpy(*spp, powerTable, *dvp * sizeof(double)); | |
225 } | |
226 | |
227 for(unsigned int i = 0; i < dbH->numFiles; i++){ | |
228 if(trackTable[i] >= sequenceLength) { | |
229 sequence_sum(snpp, trackTable[i], sequenceLength); | |
230 sequence_sqrt(snpp, trackTable[i], sequenceLength); | |
231 | |
232 if (usingPower) { | |
233 sequence_sum(sppp, trackTable[i], sequenceLength); | |
234 sequence_average(sppp, trackTable[i], sequenceLength); | |
235 } | |
236 } | |
237 snpp += trackTable[i]; | |
238 if (usingPower) { | |
239 sppp += trackTable[i]; | |
240 } | |
241 } | |
242 } | |
243 | |
211 void audioDB::trackSequenceQueryNN(const char* dbName, const char* inFile, adb__queryResponse *adbQueryResponse){ | 244 void audioDB::trackSequenceQueryNN(const char* dbName, const char* inFile, adb__queryResponse *adbQueryResponse){ |
212 | 245 |
213 initTables(dbName, inFile); | 246 initTables(dbName, inFile); |
214 | 247 |
215 unsigned int numVectors; | 248 unsigned int numVectors; |
219 set_up_query(&query, &qNorm, &qPower, &numVectors); | 252 set_up_query(&query, &qNorm, &qPower, &numVectors); |
220 query_data = query; | 253 query_data = query; |
221 qpPtr = qPower; | 254 qpPtr = qPower; |
222 qnPtr = qNorm; | 255 qnPtr = qNorm; |
223 | 256 |
224 unsigned dbVectors = dbH->length/(sizeof(double)*dbH->dim); | 257 unsigned int dbVectors; |
225 | 258 double *sNorm, *snPtr, *sPower = 0, *spPtr = 0; |
226 double *sNorm = new double[dbVectors]; | 259 |
227 | 260 set_up_db(&sNorm, &sPower, &dbVectors); |
228 // Make norm measurements relative to sequenceLength | 261 spPtr = sPower; |
229 unsigned i,j; | 262 snPtr = sNorm; |
230 | |
231 // Copy the L2 norm values to core to avoid disk random access later on | |
232 memcpy(sNorm, l2normTable, dbVectors*sizeof(double)); | |
233 double* snPtr = sNorm; | |
234 | |
235 double *sPower = 0, *spPtr = 0; | |
236 | |
237 if (usingPower) { | |
238 if (!(dbH->flags & O2_FLAG_POWER)) { | |
239 error("database not power-enabled", dbName); | |
240 } | |
241 sPower = new double[dbVectors]; | |
242 spPtr = sPower; | |
243 memcpy(sPower, powerTable, dbVectors * sizeof(double)); | |
244 } | |
245 | |
246 for(i=0; i<dbH->numFiles; i++){ | |
247 if(trackTable[i]>=sequenceLength) { | |
248 sequence_sum(snPtr, trackTable[i], sequenceLength); | |
249 sequence_sqrt(snPtr, trackTable[i], sequenceLength); | |
250 | |
251 if (usingPower) { | |
252 sequence_sum(spPtr, trackTable[i], sequenceLength); | |
253 sequence_average(spPtr, trackTable[i], sequenceLength); | |
254 } | |
255 } | |
256 snPtr += trackTable[i]; | |
257 if (usingPower) { | |
258 spPtr += trackTable[i]; | |
259 } | |
260 } | |
261 | |
262 if(verbosity>1) { | |
263 std::cerr << "done." << std::endl; | |
264 } | |
265 | 263 |
266 if(verbosity>1) { | 264 if(verbosity>1) { |
267 std::cerr << "matching tracks..." << std::endl; | 265 std::cerr << "matching tracks..." << std::endl; |
268 } | 266 } |
269 | 267 |
278 | 276 |
279 double distances[pointNN]; | 277 double distances[pointNN]; |
280 unsigned qIndexes[pointNN]; | 278 unsigned qIndexes[pointNN]; |
281 unsigned sIndexes[pointNN]; | 279 unsigned sIndexes[pointNN]; |
282 | 280 |
283 | 281 unsigned j,k,l,m,n,track,trackOffset=0, HOP_SIZE=sequenceHop, wL=sequenceLength; |
284 unsigned k,l,m,n,track,trackOffset=0, HOP_SIZE=sequenceHop, wL=sequenceLength; | |
285 double thisDist; | 282 double thisDist; |
286 | 283 |
287 for(k=0; k<pointNN; k++){ | 284 for(k=0; k<pointNN; k++){ |
288 distances[k]=1.0e6; | 285 distances[k]=1.0e6; |
289 qIndexes[k]=~0; | 286 qIndexes[k]=~0; |
596 set_up_query(&query, &qNorm, &qPower, &numVectors); | 593 set_up_query(&query, &qNorm, &qPower, &numVectors); |
597 query_data = query; | 594 query_data = query; |
598 qpPtr = qPower; | 595 qpPtr = qPower; |
599 qnPtr = qNorm; | 596 qnPtr = qNorm; |
600 | 597 |
601 unsigned dbVectors = dbH->length/(sizeof(double)*dbH->dim); | 598 unsigned int dbVectors; |
602 | 599 double *sNorm, *snPtr, *sPower = 0, *spPtr = 0; |
603 double *sNorm = new double[dbVectors]; | 600 |
604 | 601 set_up_db(&sNorm, &sPower, &dbVectors); |
605 // Make norm measurements relative to sequenceLength | 602 spPtr = sPower; |
606 unsigned i,j; | 603 snPtr = sNorm; |
607 | |
608 // Copy the L2 norm values to core to avoid disk random access later on | |
609 memcpy(sNorm, l2normTable, dbVectors*sizeof(double)); | |
610 double* snPtr = sNorm; | |
611 | |
612 double *sPower = 0, *spPtr = 0; | |
613 | |
614 if (usingPower) { | |
615 if(!(dbH->flags & O2_FLAG_POWER)) { | |
616 error("database not power-enabled", dbName); | |
617 } | |
618 sPower = new double[dbVectors]; | |
619 spPtr = sPower; | |
620 memcpy(sPower, powerTable, dbVectors * sizeof(double)); | |
621 } | |
622 | |
623 for(i=0; i<dbH->numFiles; i++){ | |
624 if(trackTable[i]>=sequenceLength) { | |
625 sequence_sum(snPtr, trackTable[i], sequenceLength); | |
626 sequence_sqrt(snPtr, trackTable[i], sequenceLength); | |
627 if (usingPower) { | |
628 sequence_sum(spPtr, trackTable[i], sequenceLength); | |
629 sequence_average(spPtr, trackTable[i], sequenceLength); | |
630 } | |
631 } | |
632 snPtr += trackTable[i]; | |
633 if (usingPower) { | |
634 spPtr += trackTable[i]; | |
635 } | |
636 } | |
637 | |
638 if(verbosity>1) { | |
639 std::cerr << "done." << std::endl; | |
640 } | |
641 | 604 |
642 if(verbosity>1) { | 605 if(verbosity>1) { |
643 std::cerr << "matching tracks..." << std::endl; | 606 std::cerr << "matching tracks..." << std::endl; |
644 } | 607 } |
645 | 608 |
654 | 617 |
655 double distances[pointNN]; | 618 double distances[pointNN]; |
656 unsigned qIndexes[pointNN]; | 619 unsigned qIndexes[pointNN]; |
657 unsigned sIndexes[pointNN]; | 620 unsigned sIndexes[pointNN]; |
658 | 621 |
659 | 622 unsigned j,k,l,n,track,trackOffset=0; |
660 unsigned k,l,n,track,trackOffset=0; | |
661 unsigned const HOP_SIZE=sequenceHop; | 623 unsigned const HOP_SIZE=sequenceHop; |
662 unsigned const wL=sequenceLength; | 624 unsigned const wL=sequenceLength; |
663 double thisDist; | 625 double thisDist; |
664 | 626 |
665 for(k=0; k<pointNN; k++){ | 627 for(k=0; k<pointNN; k++){ |