# HG changeset patch # User mas01cr # Date 1196852985 0 # Node ID d1c912ff8286f013c76ea3c36361dd2a6f81a433 # Parent 016303fc3e1b310a61038b0c4e5ce0ccae633545 Move query/db times setup into set_up_query() and set_up_db() diff -r 016303fc3e1b -r d1c912ff8286 audioDB.h --- a/audioDB.h Tue Dec 04 16:48:23 2007 +0000 +++ b/audioDB.h Wed Dec 05 11:09:45 2007 +0000 @@ -196,8 +196,8 @@ void initialize_arrays(int track, unsigned int numVectors, double *query, double *data_buffer, double **D, double **DD); void delete_arrays(int track, unsigned int numVectors, double **D, double **DD); void read_data(int track, double **data_buffer_p, size_t *data_buffer_size_p); - void set_up_query(double **qp, double **qnp, double **qpp, unsigned int *nvp); - void set_up_db(double **snp, double **spp, unsigned int *dvp); + void set_up_query(double **qp, double **qnp, double **qpp, double *mqdp, unsigned int *nvp); + void set_up_db(double **snp, double **spp, double **mddp, unsigned int *dvp); void trackSequenceQueryNN(const char* dbName, const char* inFile, adb__queryResponse *adbQueryResponse=0); void trackSequenceQueryRad(const char* dbName, const char* inFile, adb__queryResponse *adbQueryResponse=0); diff -r 016303fc3e1b -r d1c912ff8286 query.cpp --- a/query.cpp Tue Dec 04 16:48:23 2007 +0000 +++ b/query.cpp Wed Dec 05 11:09:45 2007 +0000 @@ -167,7 +167,7 @@ read(dbfid, *data_buffer_p, trackTable[track] * sizeof(double) * dbH->dim); } -void audioDB::set_up_query(double **qp, double **qnp, double **qpp, unsigned *nvp) { +void audioDB::set_up_query(double **qp, double **qnp, double **qpp, double *mqdp, unsigned *nvp) { *nvp = (statbuf.st_size - sizeof(int)) / (dbH->dim * sizeof(double)); if(!(dbH->flags & O2_FLAG_L2NORM)) { @@ -206,12 +206,30 @@ sequence_sum(*qpp, *nvp, sequenceLength); sequence_average(*qpp, *nvp, sequenceLength); } + + if (usingTimes) { + unsigned int k; + *mqdp = 0.0; + double *querydurs = new double[*nvp]; + double *timesdata = new double[*nvp*2]; + insertTimeStamps(*nvp, timesFile, timesdata); + for(k = 0; k < *nvp; k++) { + querydurs[k] = timesdata[2*k+1] - timesdata[2*k]; + *mqdp += querydurs[k]; + } + *mqdp /= k; + if(verbosity>1) { + std::cerr << "mean query file duration: " << *mqdp << std::endl; + } + delete [] querydurs; + delete [] timesdata; + } } // FIXME: this is not the right name; we're not actually setting up // the database, but copying various bits of it out of mmap()ed tables // in order to reduce seeks. -void audioDB::set_up_db(double **snp, double **spp, unsigned int *dvp) { +void audioDB::set_up_db(double **snp, double **spp, double **mddp, unsigned int *dvp) { *dvp = dbH->length / (dbH->dim * sizeof(double)); *snp = new double[*dvp]; @@ -242,6 +260,23 @@ sppp += trackTable[i]; } } + + if (usingTimes) { + if(!(dbH->flags & O2_FLAG_TIMES)) { + error("query timestamps provided for non-timed database", dbName); + } + + *mddp = new double[dbH->numFiles]; + + for(unsigned int k = 0; k < dbH->numFiles; k++) { + unsigned int j; + (*mddp)[k] = 0.0; + for(j = 0; j < trackTable[k]; j++) { + (*mddp)[k] += timesTable[2*j+1] - timesTable[2*j]; + } + (*mddp)[k] /= j; + } + } } void audioDB::trackSequenceQueryNN(const char* dbName, const char* inFile, adb__queryResponse *adbQueryResponse){ @@ -251,16 +286,18 @@ unsigned int numVectors; double *query, *query_data; double *qNorm, *qnPtr, *qPower = 0, *qpPtr = 0; + double meanQdur; - set_up_query(&query, &qNorm, &qPower, &numVectors); + set_up_query(&query, &qNorm, &qPower, &meanQdur, &numVectors); query_data = query; qpPtr = qPower; qnPtr = qNorm; unsigned int dbVectors; double *sNorm, *snPtr, *sPower = 0, *spPtr = 0; + double *meanDBdur = 0; - set_up_db(&sNorm, &sPower, &dbVectors); + set_up_db(&sNorm, &sPower, &meanDBdur, &dbVectors); spPtr = sPower; snPtr = sNorm; @@ -297,45 +334,6 @@ trackIDs[k]=~0; } - // Timestamp and durations processing - double meanQdur = 0; - double *timesdata = 0; - double *querydurs = 0; - double *meanDBdur = 0; - - if(usingTimes && !(dbH->flags & O2_FLAG_TIMES)){ - std::cerr << "warning: ignoring query timestamps for non-timestamped database" << std::endl; - usingTimes=0; - } - - else if(!usingTimes && (dbH->flags & O2_FLAG_TIMES)) - std::cerr << "warning: no timestamps given for query. Ignoring database timestamps." << std::endl; - - else if(usingTimes && (dbH->flags & O2_FLAG_TIMES)){ - timesdata = new double[2*numVectors]; - querydurs = new double[numVectors]; - - insertTimeStamps(numVectors, timesFile, timesdata); - // Calculate durations of points - for(k=0; k1) { - std::cerr << "mean query file duration: " << meanQdur << std::endl; - } - meanDBdur = new double[dbH->numFiles]; - assert(meanDBdur); - for(k=0; knumFiles; k++){ - meanDBdur[k]=0.0; - for(j=0; jnumVectors || queryPoint>numVectors-wL+1) error("queryPoint > numVectors-wL+1 in query"); @@ -577,10 +575,6 @@ delete[] D; if(DD) delete[] DD; - if(timesdata) - delete[] timesdata; - if(querydurs) - delete[] querydurs; if(meanDBdur) delete[] meanDBdur; } @@ -592,16 +586,18 @@ unsigned int numVectors; double *query, *query_data; double *qNorm, *qnPtr, *qPower = 0, *qpPtr = 0; + double meanQdur; - set_up_query(&query, &qNorm, &qPower, &numVectors); + set_up_query(&query, &qNorm, &qPower, &meanQdur, &numVectors); query_data = query; qpPtr = qPower; qnPtr = qNorm; unsigned int dbVectors; double *sNorm, *snPtr, *sPower = 0, *spPtr = 0; + double *meanDBdur = 0; - set_up_db(&sNorm, &sPower, &dbVectors); + set_up_db(&sNorm, &sPower, &meanDBdur, &dbVectors); spPtr = sPower; snPtr = sNorm; @@ -640,45 +636,6 @@ trackIDs[k]=~0; } - // Timestamp and durations processing - double meanQdur = 0; - double *timesdata = 0; - double *querydurs = 0; - double *meanDBdur = 0; - - if(usingTimes && !(dbH->flags & O2_FLAG_TIMES)){ - std::cerr << "warning: ignoring query timestamps for non-timestamped database" << std::endl; - usingTimes=0; - } - - else if(!usingTimes && (dbH->flags & O2_FLAG_TIMES)) - std::cerr << "warning: no timestamps given for query. Ignoring database timestamps." << std::endl; - - else if(usingTimes && (dbH->flags & O2_FLAG_TIMES)){ - timesdata = new double[2*numVectors]; - querydurs = new double[numVectors]; - - insertTimeStamps(numVectors, timesFile, timesdata); - // Calculate durations of points - for(k=0; k1) { - std::cerr << "mean query file duration: " << meanQdur << std::endl; - } - meanDBdur = new double[dbH->numFiles]; - assert(meanDBdur); - for(k=0; knumFiles; k++){ - meanDBdur[k]=0.0; - for(j=0; jnumVectors || queryPoint>numVectors-wL+1) error("queryPoint > numVectors-wL+1 in query"); @@ -898,10 +855,6 @@ delete[] D; if(DD) delete[] DD; - if(timesdata) - delete[] timesdata; - if(querydurs) - delete[] querydurs; if(meanDBdur) delete[] meanDBdur; }