IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Aug 23, 2006, 1:55:03 PM (20 years ago)
Author:
jhoblitt
Message:

VERSION 0.0.32

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ippdb/src/ippdb.c

    r8380 r8528  
    6868#define DETRESIDEXP_TABLE_NAME "detResidExp"
    6969#define DETRESIDEXP_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
     70#define DETRUNSUMMARY_TABLE_NAME "detRunSummary"
     71#define DETRUNSUMMARY_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
    7072#define MAX_STRING_LENGTH 1024
    7173
     
    1260712609        return false;
    1260812610    }
    12609     if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, 0)) {
     12611    if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, "Key", 0)) {
    1261012612        psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
    1261112613        psFree(md);
     
    1299212994static void detInputExpRowFree(detInputExpRow *object);
    1299312995
    12994 detInputExpRow *detInputExpRowAlloc(psS32 det_id, psS32 iteration, const char *exp_id, bool include, bool accept)
     12996detInputExpRow *detInputExpRowAlloc(psS32 det_id, psS32 iteration, const char *exp_id, bool include)
    1299512997{
    1299612998    detInputExpRow  *object;
     
    1300313005    object->exp_id = psStringCopy(exp_id);
    1300413006    object->include = include;
    13005     object->accept = accept;
    1300613007
    1300713008    return object;
     
    1304413045        return false;
    1304513046    }
    13046     if (!psMetadataAdd(md, PS_LIST_TAIL, "accept", PS_DATA_BOOL, NULL, false)) {
    13047         psError(PS_ERR_UNKNOWN, false, "failed to add item accept");
    13048         psFree(md);
    13049         return false;
    13050     }
    1305113047
    1305213048    status = psDBCreateTable(dbh, DETINPUTEXP_TABLE_NAME, md);
     
    1306213058}
    1306313059
    13064 bool detInputExpInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *exp_id, bool include, bool accept)
     13060bool detInputExpInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *exp_id, bool include)
    1306513061{
    1306613062    psMetadata      *md;
     
    1308513081    if (!psMetadataAdd(md, PS_LIST_TAIL, "include", PS_DATA_BOOL, NULL, include)) {
    1308613082        psError(PS_ERR_UNKNOWN, false, "failed to add item include");
    13087         psFree(md);
    13088         return false;
    13089     }
    13090     if (!psMetadataAdd(md, PS_LIST_TAIL, "accept", PS_DATA_BOOL, NULL, accept)) {
    13091         psError(PS_ERR_UNKNOWN, false, "failed to add item accept");
    1309213083        psFree(md);
    1309313084        return false;
     
    1311413105    return deleted;
    1311513106}
    13116 bool detInputExpPop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **exp_id, bool *include, bool *accept)
     13107bool detInputExpPop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **exp_id, bool *include)
    1311713108{
    1311813109    psArray         *rowSet;
     
    1318213173        return false;
    1318313174    }
    13184     *accept = psMetadataLookupBool(&status, row, "accept");
    13185     if (!status) {
    13186         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item accept");
    13187         psFree(row);
    13188         return false;
    13189     }
    1319013175
    1319113176    psFree(row);
     
    1319613181bool detInputExpInsertObject(psDB *dbh, detInputExpRow *object)
    1319713182{
    13198     return detInputExpInsert(dbh, object->det_id, object->iteration, object->exp_id, object->include, object->accept);
     13183    return detInputExpInsert(dbh, object->det_id, object->iteration, object->exp_id, object->include);
    1319913184}
    1320013185
     
    1321613201    char            exp_id[256];
    1321713202    bool            include;
    13218     bool            accept;
    13219 
    13220     if (!detInputExpPop(dbh, &det_id, &iteration, (char **)&exp_id, &include, &accept)) {
     13203
     13204    if (!detInputExpPop(dbh, &det_id, &iteration, (char **)&exp_id, &include)) {
    1322113205        psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
    1322213206        return NULL;
    1322313207    }
    1322413208
    13225     return detInputExpRowAlloc(det_id, iteration, exp_id, include, accept);
     13209    return detInputExpRowAlloc(det_id, iteration, exp_id, include);
    1322613210}
    1322713211
     
    1334213326        return NULL;
    1334313327    }
    13344     if (!psMetadataAdd(md, PS_LIST_TAIL, "accept", PS_DATA_BOOL, NULL, object->accept)) {
    13345         psError(PS_ERR_UNKNOWN, false, "failed to add item accept");
    13346         psFree(md);
    13347         return NULL;
    13348     }
    1334913328
    1335013329    return md;
     
    1335813337    char            *exp_id;
    1335913338    bool            include;
    13360     bool            accept;
    1336113339
    1336213340    det_id = psMetadataLookupS32(&status, md, "det_id");
     
    1338013358        return false;
    1338113359    }
    13382     accept = psMetadataLookupBool(&status, md, "accept");
    13383     if (!status) {
    13384         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item accept");
    13385         return false;
    13386     }
    13387 
    13388     return detInputExpRowAlloc(det_id, iteration, exp_id, include, accept);
     13360
     13361    return detInputExpRowAlloc(det_id, iteration, exp_id, include);
    1338913362}
    1339013363psArray *detInputExpSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
     
    1408414057static void detStackedImfileRowFree(detStackedImfileRow *object);
    1408514058
    14086 detStackedImfileRow *detStackedImfileRowAlloc(psS32 det_id, psS32 iteration, const char *class_id, const char *uri, const char *recipe)
     14059detStackedImfileRow *detStackedImfileRowAlloc(psS32 det_id, psS32 iteration, const char *class_id, const char *uri, const char *recipe, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev)
    1408714060{
    1408814061    detStackedImfileRow *object;
     
    1409614069    object->uri = psStringCopy(uri);
    1409714070    object->recipe = psStringCopy(recipe);
     14071    object->bg = bg;
     14072    object->bg_stdev = bg_stdev;
     14073    object->bg_mean_stdev = bg_mean_stdev;
    1409814074
    1409914075    return object;
     
    1414314119        return false;
    1414414120    }
     14121    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 0.0)) {
     14122        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
     14123        psFree(md);
     14124        return false;
     14125    }
     14126    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, 0.0)) {
     14127        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
     14128        psFree(md);
     14129        return false;
     14130    }
     14131    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 0.0)) {
     14132        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
     14133        psFree(md);
     14134        return false;
     14135    }
    1414514136
    1414614137    status = psDBCreateTable(dbh, DETSTACKEDIMFILE_TABLE_NAME, md);
     
    1415614147}
    1415714148
    14158 bool detStackedImfileInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *class_id, const char *uri, const char *recipe)
     14149bool detStackedImfileInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *class_id, const char *uri, const char *recipe, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev)
    1415914150{
    1416014151    psMetadata      *md;
     
    1418414175    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, recipe)) {
    1418514176        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
     14177        psFree(md);
     14178        return false;
     14179    }
     14180    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, bg)) {
     14181        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
     14182        psFree(md);
     14183        return false;
     14184    }
     14185    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, bg_stdev)) {
     14186        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
     14187        psFree(md);
     14188        return false;
     14189    }
     14190    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, bg_mean_stdev)) {
     14191        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    1418614192        psFree(md);
    1418714193        return false;
     
    1420814214    return deleted;
    1420914215}
    14210 bool detStackedImfilePop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **class_id, char **uri, char **recipe)
     14216bool detStackedImfilePop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **class_id, char **uri, char **recipe, psF64 *bg, psF64 *bg_stdev, psF64 *bg_mean_stdev)
    1421114217{
    1421214218    psArray         *rowSet;
     
    1428214288        return false;
    1428314289    }
     14290    *bg = psMetadataLookupF64(&status, row, "bg");
     14291    if (!status) {
     14292        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
     14293        psFree(row);
     14294        return false;
     14295    }
     14296    *bg_stdev = psMetadataLookupF64(&status, row, "bg_stdev");
     14297    if (!status) {
     14298        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
     14299        psFree(row);
     14300        return false;
     14301    }
     14302    *bg_mean_stdev = psMetadataLookupF64(&status, row, "bg_mean_stdev");
     14303    if (!status) {
     14304        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
     14305        psFree(row);
     14306        return false;
     14307    }
    1428414308
    1428514309    psFree(row);
     
    1429014314bool detStackedImfileInsertObject(psDB *dbh, detStackedImfileRow *object)
    1429114315{
    14292     return detStackedImfileInsert(dbh, object->det_id, object->iteration, object->class_id, object->uri, object->recipe);
     14316    return detStackedImfileInsert(dbh, object->det_id, object->iteration, object->class_id, object->uri, object->recipe, object->bg, object->bg_stdev, object->bg_mean_stdev);
    1429314317}
    1429414318
     
    1431114335    char            uri[256];
    1431214336    char            recipe[256];
    14313 
    14314     if (!detStackedImfilePop(dbh, &det_id, &iteration, (char **)&class_id, (char **)&uri, (char **)&recipe)) {
     14337    psF64           bg;
     14338    psF64           bg_stdev;
     14339    psF64           bg_mean_stdev;
     14340
     14341    if (!detStackedImfilePop(dbh, &det_id, &iteration, (char **)&class_id, (char **)&uri, (char **)&recipe, &bg, &bg_stdev, &bg_mean_stdev)) {
    1431514342        psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
    1431614343        return NULL;
    1431714344    }
    1431814345
    14319     return detStackedImfileRowAlloc(det_id, iteration, class_id, uri, recipe);
     14346    return detStackedImfileRowAlloc(det_id, iteration, class_id, uri, recipe, bg, bg_stdev, bg_mean_stdev);
    1432014347}
    1432114348
     
    1444114468        return NULL;
    1444214469    }
     14470    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, object->bg)) {
     14471        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
     14472        psFree(md);
     14473        return NULL;
     14474    }
     14475    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, object->bg_stdev)) {
     14476        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
     14477        psFree(md);
     14478        return NULL;
     14479    }
     14480    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, object->bg_mean_stdev)) {
     14481        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
     14482        psFree(md);
     14483        return NULL;
     14484    }
    1444314485
    1444414486    return md;
     
    1445314495    char            *uri;
    1445414496    char            *recipe;
     14497    psF64           bg;
     14498    psF64           bg_stdev;
     14499    psF64           bg_mean_stdev;
    1445514500
    1445614501    det_id = psMetadataLookupS32(&status, md, "det_id");
     
    1447914524        return false;
    1448014525    }
    14481 
    14482     return detStackedImfileRowAlloc(det_id, iteration, class_id, uri, recipe);
     14526    bg = psMetadataLookupF64(&status, md, "bg");
     14527    if (!status) {
     14528        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
     14529        return false;
     14530    }
     14531    bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
     14532    if (!status) {
     14533        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
     14534        return false;
     14535    }
     14536    bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
     14537    if (!status) {
     14538        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
     14539        return false;
     14540    }
     14541
     14542    return detStackedImfileRowAlloc(det_id, iteration, class_id, uri, recipe, bg, bg_stdev, bg_mean_stdev);
    1448314543}
    1448414544psArray *detStackedImfileSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
     
    1644916509static void detResidImfileRowFree(detResidImfileRow *object);
    1645016510
    16451 detResidImfileRow *detResidImfileRowAlloc(psS32 det_id, psS32 iteration, const char *exp_id, const char *class_id, const char *recipe, const char *uri, const char *b1_uri, const char *b2_uri)
     16511detResidImfileRow *detResidImfileRowAlloc(psS32 det_id, psS32 iteration, const char *exp_id, const char *class_id, const char *uri, const char *recipe, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, const char *b1_uri, const char *b2_uri)
    1645216512{
    1645316513    detResidImfileRow *object;
     
    1646016520    object->exp_id = psStringCopy(exp_id);
    1646116521    object->class_id = psStringCopy(class_id);
     16522    object->uri = psStringCopy(uri);
    1646216523    object->recipe = psStringCopy(recipe);
    16463     object->uri = psStringCopy(uri);
     16524    object->bg = bg;
     16525    object->bg_stdev = bg_stdev;
     16526    object->bg_mean_stdev = bg_mean_stdev;
    1646416527    object->b1_uri = psStringCopy(b1_uri);
    1646516528    object->b2_uri = psStringCopy(b2_uri);
     
    1647216535    psFree(object->exp_id);
    1647316536    psFree(object->class_id);
     16537    psFree(object->uri);
    1647416538    psFree(object->recipe);
    16475     psFree(object->uri);
    1647616539    psFree(object->b1_uri);
    1647716540    psFree(object->b2_uri);
     
    1650916572        return false;
    1651016573    }
     16574    if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, "64")) {
     16575        psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
     16576        psFree(md);
     16577        return false;
     16578    }
    1651116579    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, "64")) {
    1651216580        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
     
    1651416582        return false;
    1651516583    }
    16516     if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, "64")) {
    16517         psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
     16584    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 0.0)) {
     16585        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
     16586        psFree(md);
     16587        return false;
     16588    }
     16589    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, 0.0)) {
     16590        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
     16591        psFree(md);
     16592        return false;
     16593    }
     16594    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 0.0)) {
     16595        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    1651816596        psFree(md);
    1651916597        return false;
     
    1654216620}
    1654316621
    16544 bool detResidImfileInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *exp_id, const char *class_id, const char *recipe, const char *uri, const char *b1_uri, const char *b2_uri)
     16622bool detResidImfileInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *exp_id, const char *class_id, const char *uri, const char *recipe, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, const char *b1_uri, const char *b2_uri)
    1654516623{
    1654616624    psMetadata      *md;
     
    1656816646        return false;
    1656916647    }
     16648    if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, uri)) {
     16649        psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
     16650        psFree(md);
     16651        return false;
     16652    }
    1657016653    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, recipe)) {
    1657116654        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
     
    1657316656        return false;
    1657416657    }
    16575     if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, uri)) {
    16576         psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
     16658    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, bg)) {
     16659        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
     16660        psFree(md);
     16661        return false;
     16662    }
     16663    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, bg_stdev)) {
     16664        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
     16665        psFree(md);
     16666        return false;
     16667    }
     16668    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, bg_mean_stdev)) {
     16669        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    1657716670        psFree(md);
    1657816671        return false;
     
    1660916702    return deleted;
    1661016703}
    16611 bool detResidImfilePop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **exp_id, char **class_id, char **recipe, char **uri, char **b1_uri, char **b2_uri)
     16704bool detResidImfilePop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **exp_id, char **class_id, char **uri, char **recipe, psF64 *bg, psF64 *bg_stdev, psF64 *bg_mean_stdev, char **b1_uri, char **b2_uri)
    1661216705{
    1661316706    psArray         *rowSet;
     
    1667716770        return false;
    1667816771    }
     16772    *uri = psMetadataLookupPtr(&status, row, "uri");
     16773    if (!status) {
     16774        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");
     16775        psFree(row);
     16776        return false;
     16777    }
    1667916778    *recipe = psMetadataLookupPtr(&status, row, "recipe");
    1668016779    if (!status) {
     
    1668316782        return false;
    1668416783    }
    16685     *uri = psMetadataLookupPtr(&status, row, "uri");
    16686     if (!status) {
    16687         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");
     16784    *bg = psMetadataLookupF64(&status, row, "bg");
     16785    if (!status) {
     16786        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
     16787        psFree(row);
     16788        return false;
     16789    }
     16790    *bg_stdev = psMetadataLookupF64(&status, row, "bg_stdev");
     16791    if (!status) {
     16792        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
     16793        psFree(row);
     16794        return false;
     16795    }
     16796    *bg_mean_stdev = psMetadataLookupF64(&status, row, "bg_mean_stdev");
     16797    if (!status) {
     16798        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
    1668816799        psFree(row);
    1668916800        return false;
     
    1670916820bool detResidImfileInsertObject(psDB *dbh, detResidImfileRow *object)
    1671016821{
    16711     return detResidImfileInsert(dbh, object->det_id, object->iteration, object->exp_id, object->class_id, object->recipe, object->uri, object->b1_uri, object->b2_uri);
     16822    return detResidImfileInsert(dbh, object->det_id, object->iteration, object->exp_id, object->class_id, object->uri, object->recipe, object->bg, object->bg_stdev, object->bg_mean_stdev, object->b1_uri, object->b2_uri);
    1671216823}
    1671316824
     
    1672916840    char            exp_id[256];
    1673016841    char            class_id[256];
     16842    char            uri[256];
    1673116843    char            recipe[256];
    16732     char            uri[256];
     16844    psF64           bg;
     16845    psF64           bg_stdev;
     16846    psF64           bg_mean_stdev;
    1673316847    char            b1_uri[256];
    1673416848    char            b2_uri[256];
    1673516849
    16736     if (!detResidImfilePop(dbh, &det_id, &iteration, (char **)&exp_id, (char **)&class_id, (char **)&recipe, (char **)&uri, (char **)&b1_uri, (char **)&b2_uri)) {
     16850    if (!detResidImfilePop(dbh, &det_id, &iteration, (char **)&exp_id, (char **)&class_id, (char **)&uri, (char **)&recipe, &bg, &bg_stdev, &bg_mean_stdev, (char **)&b1_uri, (char **)&b2_uri)) {
    1673716851        psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
    1673816852        return NULL;
    1673916853    }
    1674016854
    16741     return detResidImfileRowAlloc(det_id, iteration, exp_id, class_id, recipe, uri, b1_uri, b2_uri);
     16855    return detResidImfileRowAlloc(det_id, iteration, exp_id, class_id, uri, recipe, bg, bg_stdev, bg_mean_stdev, b1_uri, b2_uri);
    1674216856}
    1674316857
     
    1685816972        return NULL;
    1685916973    }
     16974    if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, object->uri)) {
     16975        psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
     16976        psFree(md);
     16977        return NULL;
     16978    }
    1686016979    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, object->recipe)) {
    1686116980        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
     
    1686316982        return NULL;
    1686416983    }
    16865     if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, object->uri)) {
    16866         psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
     16984    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, object->bg)) {
     16985        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
     16986        psFree(md);
     16987        return NULL;
     16988    }
     16989    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, object->bg_stdev)) {
     16990        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
     16991        psFree(md);
     16992        return NULL;
     16993    }
     16994    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, object->bg_mean_stdev)) {
     16995        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    1686716996        psFree(md);
    1686816997        return NULL;
     
    1688917018    char            *exp_id;
    1689017019    char            *class_id;
     17020    char            *uri;
    1689117021    char            *recipe;
    16892     char            *uri;
     17022    psF64           bg;
     17023    psF64           bg_stdev;
     17024    psF64           bg_mean_stdev;
    1689317025    char            *b1_uri;
    1689417026    char            *b2_uri;
     
    1691417046        return false;
    1691517047    }
     17048    uri = psMetadataLookupPtr(&status, md, "uri");
     17049    if (!status) {
     17050        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");
     17051        return false;
     17052    }
    1691617053    recipe = psMetadataLookupPtr(&status, md, "recipe");
    1691717054    if (!status) {
     
    1691917056        return false;
    1692017057    }
    16921     uri = psMetadataLookupPtr(&status, md, "uri");
    16922     if (!status) {
    16923         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");
     17058    bg = psMetadataLookupF64(&status, md, "bg");
     17059    if (!status) {
     17060        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
     17061        return false;
     17062    }
     17063    bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
     17064    if (!status) {
     17065        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
     17066        return false;
     17067    }
     17068    bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
     17069    if (!status) {
     17070        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
    1692417071        return false;
    1692517072    }
     
    1693517082    }
    1693617083
    16937     return detResidImfileRowAlloc(det_id, iteration, exp_id, class_id, recipe, uri, b1_uri, b2_uri);
     17084    return detResidImfileRowAlloc(det_id, iteration, exp_id, class_id, uri, recipe, bg, bg_stdev, bg_mean_stdev, b1_uri, b2_uri);
    1693817085}
    1693917086psArray *detResidImfileSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
     
    1704217189static void detResidExpRowFree(detResidExpRow *object);
    1704317190
    17044 detResidExpRow *detResidExpRowAlloc(psS32 det_id, psS32 iteration, const char *exp_id, const char *recipe, bool keep, bool accept)
     17191detResidExpRow *detResidExpRowAlloc(psS32 det_id, psS32 iteration, const char *exp_id, const char *recipe, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, const char *b1_uri, const char *b2_uri, bool accept)
    1704517192{
    1704617193    detResidExpRow  *object;
     
    1705317200    object->exp_id = psStringCopy(exp_id);
    1705417201    object->recipe = psStringCopy(recipe);
    17055     object->keep = keep;
     17202    object->bg = bg;
     17203    object->bg_stdev = bg_stdev;
     17204    object->bg_mean_stdev = bg_mean_stdev;
     17205    object->b1_uri = psStringCopy(b1_uri);
     17206    object->b2_uri = psStringCopy(b2_uri);
    1705617207    object->accept = accept;
    1705717208
     
    1706317214    psFree(object->exp_id);
    1706417215    psFree(object->recipe);
     17216    psFree(object->b1_uri);
     17217    psFree(object->b2_uri);
    1706517218}
    1706617219
     
    1709617249        return false;
    1709717250    }
    17098     if (!psMetadataAdd(md, PS_LIST_TAIL, "keep", PS_DATA_BOOL, NULL, false)) {
    17099         psError(PS_ERR_UNKNOWN, false, "failed to add item keep");
     17251    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 0.0)) {
     17252        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
     17253        psFree(md);
     17254        return false;
     17255    }
     17256    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, 0.0)) {
     17257        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
     17258        psFree(md);
     17259        return false;
     17260    }
     17261    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 0.0)) {
     17262        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
     17263        psFree(md);
     17264        return false;
     17265    }
     17266    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, "64")) {
     17267        psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
     17268        psFree(md);
     17269        return false;
     17270    }
     17271    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, "64")) {
     17272        psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
    1710017273        psFree(md);
    1710117274        return false;
     
    1711917292}
    1712017293
    17121 bool detResidExpInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *exp_id, const char *recipe, bool keep, bool accept)
     17294bool detResidExpInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *exp_id, const char *recipe, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, const char *b1_uri, const char *b2_uri, bool accept)
    1712217295{
    1712317296    psMetadata      *md;
     
    1714517318        return false;
    1714617319    }
    17147     if (!psMetadataAdd(md, PS_LIST_TAIL, "keep", PS_DATA_BOOL, NULL, keep)) {
    17148         psError(PS_ERR_UNKNOWN, false, "failed to add item keep");
     17320    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, bg)) {
     17321        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
     17322        psFree(md);
     17323        return false;
     17324    }
     17325    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, bg_stdev)) {
     17326        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
     17327        psFree(md);
     17328        return false;
     17329    }
     17330    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, bg_mean_stdev)) {
     17331        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
     17332        psFree(md);
     17333        return false;
     17334    }
     17335    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, b1_uri)) {
     17336        psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
     17337        psFree(md);
     17338        return false;
     17339    }
     17340    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, b2_uri)) {
     17341        psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
    1714917342        psFree(md);
    1715017343        return false;
     
    1717617369    return deleted;
    1717717370}
    17178 bool detResidExpPop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **exp_id, char **recipe, bool *keep, bool *accept)
     17371bool detResidExpPop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **exp_id, char **recipe, psF64 *bg, psF64 *bg_stdev, psF64 *bg_mean_stdev, char **b1_uri, char **b2_uri, bool *accept)
    1717917372{
    1718017373    psArray         *rowSet;
     
    1724417437        return false;
    1724517438    }
    17246     *keep = psMetadataLookupBool(&status, row, "keep");
    17247     if (!status) {
    17248         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item keep");
     17439    *bg = psMetadataLookupF64(&status, row, "bg");
     17440    if (!status) {
     17441        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
     17442        psFree(row);
     17443        return false;
     17444    }
     17445    *bg_stdev = psMetadataLookupF64(&status, row, "bg_stdev");
     17446    if (!status) {
     17447        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
     17448        psFree(row);
     17449        return false;
     17450    }
     17451    *bg_mean_stdev = psMetadataLookupF64(&status, row, "bg_mean_stdev");
     17452    if (!status) {
     17453        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
     17454        psFree(row);
     17455        return false;
     17456    }
     17457    *b1_uri = psMetadataLookupPtr(&status, row, "b1_uri");
     17458    if (!status) {
     17459        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b1_uri");
     17460        psFree(row);
     17461        return false;
     17462    }
     17463    *b2_uri = psMetadataLookupPtr(&status, row, "b2_uri");
     17464    if (!status) {
     17465        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b2_uri");
    1724917466        psFree(row);
    1725017467        return false;
     
    1726417481bool detResidExpInsertObject(psDB *dbh, detResidExpRow *object)
    1726517482{
    17266     return detResidExpInsert(dbh, object->det_id, object->iteration, object->exp_id, object->recipe, object->keep, object->accept);
     17483    return detResidExpInsert(dbh, object->det_id, object->iteration, object->exp_id, object->recipe, object->bg, object->bg_stdev, object->bg_mean_stdev, object->b1_uri, object->b2_uri, object->accept);
    1726717484}
    1726817485
     
    1728417501    char            exp_id[256];
    1728517502    char            recipe[256];
    17286     bool            keep;
     17503    psF64           bg;
     17504    psF64           bg_stdev;
     17505    psF64           bg_mean_stdev;
     17506    char            b1_uri[256];
     17507    char            b2_uri[256];
    1728717508    bool            accept;
    1728817509
    17289     if (!detResidExpPop(dbh, &det_id, &iteration, (char **)&exp_id, (char **)&recipe, &keep, &accept)) {
     17510    if (!detResidExpPop(dbh, &det_id, &iteration, (char **)&exp_id, (char **)&recipe, &bg, &bg_stdev, &bg_mean_stdev, (char **)&b1_uri, (char **)&b2_uri, &accept)) {
    1729017511        psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
    1729117512        return NULL;
    1729217513    }
    1729317514
    17294     return detResidExpRowAlloc(det_id, iteration, exp_id, recipe, keep, accept);
     17515    return detResidExpRowAlloc(det_id, iteration, exp_id, recipe, bg, bg_stdev, bg_mean_stdev, b1_uri, b2_uri, accept);
    1729517516}
    1729617517
     
    1741117632        return NULL;
    1741217633    }
    17413     if (!psMetadataAdd(md, PS_LIST_TAIL, "keep", PS_DATA_BOOL, NULL, object->keep)) {
    17414         psError(PS_ERR_UNKNOWN, false, "failed to add item keep");
     17634    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, object->bg)) {
     17635        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
     17636        psFree(md);
     17637        return NULL;
     17638    }
     17639    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, object->bg_stdev)) {
     17640        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
     17641        psFree(md);
     17642        return NULL;
     17643    }
     17644    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, object->bg_mean_stdev)) {
     17645        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
     17646        psFree(md);
     17647        return NULL;
     17648    }
     17649    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, object->b1_uri)) {
     17650        psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
     17651        psFree(md);
     17652        return NULL;
     17653    }
     17654    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, object->b2_uri)) {
     17655        psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
    1741517656        psFree(md);
    1741617657        return NULL;
     
    1743217673    char            *exp_id;
    1743317674    char            *recipe;
    17434     bool            keep;
     17675    psF64           bg;
     17676    psF64           bg_stdev;
     17677    psF64           bg_mean_stdev;
     17678    char            *b1_uri;
     17679    char            *b2_uri;
    1743517680    bool            accept;
    1743617681
     
    1745517700        return false;
    1745617701    }
    17457     keep = psMetadataLookupBool(&status, md, "keep");
    17458     if (!status) {
    17459         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item keep");
     17702    bg = psMetadataLookupF64(&status, md, "bg");
     17703    if (!status) {
     17704        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
     17705        return false;
     17706    }
     17707    bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
     17708    if (!status) {
     17709        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
     17710        return false;
     17711    }
     17712    bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
     17713    if (!status) {
     17714        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
     17715        return false;
     17716    }
     17717    b1_uri = psMetadataLookupPtr(&status, md, "b1_uri");
     17718    if (!status) {
     17719        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b1_uri");
     17720        return false;
     17721    }
     17722    b2_uri = psMetadataLookupPtr(&status, md, "b2_uri");
     17723    if (!status) {
     17724        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b2_uri");
    1746017725        return false;
    1746117726    }
     
    1746617731    }
    1746717732
    17468     return detResidExpRowAlloc(det_id, iteration, exp_id, recipe, keep, accept);
     17733    return detResidExpRowAlloc(det_id, iteration, exp_id, recipe, bg, bg_stdev, bg_mean_stdev, b1_uri, b2_uri, accept);
    1746917734}
    1747017735psArray *detResidExpSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
     
    1757117836    return true;
    1757217837}
     17838static void detRunSummaryRowFree(detRunSummaryRow *object);
     17839
     17840detRunSummaryRow *detRunSummaryRowAlloc(psS32 det_id, psS32 iteration, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, bool accept)
     17841{
     17842    detRunSummaryRow *object;
     17843
     17844    object = psAlloc(sizeof(detRunSummaryRow));
     17845    psMemSetDeallocator(object, (psFreeFunc)detRunSummaryRowFree);
     17846
     17847    object->det_id = det_id;
     17848    object->iteration = iteration;
     17849    object->bg = bg;
     17850    object->bg_stdev = bg_stdev;
     17851    object->bg_mean_stdev = bg_mean_stdev;
     17852    object->accept = accept;
     17853
     17854    return object;
     17855}
     17856
     17857static void detRunSummaryRowFree(detRunSummaryRow *object)
     17858{
     17859}
     17860
     17861bool detRunSummaryCreateTable(psDB *dbh)
     17862{
     17863    psMetadata      *md;
     17864    bool            status;
     17865
     17866    md = psMetadataAlloc();
     17867    if (!psMetadataAdd(md, PS_LIST_TAIL, DETRUNSUMMARY_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {
     17868        psError(PS_ERR_UNKNOWN, false, "failed to add item %s", DETRUNSUMMARY_INDEX_NAME);
     17869        psFree(md);
     17870        return false;
     17871    }
     17872    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) {
     17873        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
     17874        psFree(md);
     17875        return false;
     17876    }
     17877    if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, "Primary Key", 0)) {
     17878        psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
     17879        psFree(md);
     17880        return false;
     17881    }
     17882    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 0.0)) {
     17883        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
     17884        psFree(md);
     17885        return false;
     17886    }
     17887    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, 0.0)) {
     17888        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
     17889        psFree(md);
     17890        return false;
     17891    }
     17892    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 0.0)) {
     17893        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
     17894        psFree(md);
     17895        return false;
     17896    }
     17897    if (!psMetadataAdd(md, PS_LIST_TAIL, "accept", PS_DATA_BOOL, NULL, false)) {
     17898        psError(PS_ERR_UNKNOWN, false, "failed to add item accept");
     17899        psFree(md);
     17900        return false;
     17901    }
     17902
     17903    status = psDBCreateTable(dbh, DETRUNSUMMARY_TABLE_NAME, md);
     17904
     17905    psFree(md);
     17906
     17907    return status;
     17908}
     17909
     17910bool detRunSummaryDropTable(psDB *dbh)
     17911{
     17912    return psDBDropTable(dbh, DETRUNSUMMARY_TABLE_NAME);
     17913}
     17914
     17915bool detRunSummaryInsert(psDB * dbh, psS32 det_id, psS32 iteration, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, bool accept)
     17916{
     17917    psMetadata      *md;
     17918    bool            status;
     17919
     17920    md = psMetadataAlloc();
     17921    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, det_id)) {
     17922        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
     17923        psFree(md);
     17924        return false;
     17925    }
     17926    if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, iteration)) {
     17927        psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
     17928        psFree(md);
     17929        return false;
     17930    }
     17931    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, bg)) {
     17932        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
     17933        psFree(md);
     17934        return false;
     17935    }
     17936    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, bg_stdev)) {
     17937        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
     17938        psFree(md);
     17939        return false;
     17940    }
     17941    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, bg_mean_stdev)) {
     17942        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
     17943        psFree(md);
     17944        return false;
     17945    }
     17946    if (!psMetadataAdd(md, PS_LIST_TAIL, "accept", PS_DATA_BOOL, NULL, accept)) {
     17947        psError(PS_ERR_UNKNOWN, false, "failed to add item accept");
     17948        psFree(md);
     17949        return false;
     17950    }
     17951
     17952    status = psDBInsertOneRow(dbh, DETRUNSUMMARY_TABLE_NAME, md);
     17953    psFree(md);
     17954
     17955    return status;
     17956}
     17957
     17958long long detRunSummaryDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)
     17959{
     17960    long long       deleted = 0;
     17961
     17962    long long count = psDBDeleteRows(dbh, DETRUNSUMMARY_TABLE_NAME, where, limit);
     17963    if (count < 0) {
     17964        psError(PS_ERR_UNKNOWN, true, "failed to delete row from detRunSummary");
     17965        return count;
     17966
     17967        deleted += count;
     17968    }
     17969
     17970    return deleted;
     17971}
     17972bool detRunSummaryPop(psDB *dbh, psS32 *det_id, psS32 *iteration, psF64 *bg, psF64 *bg_stdev, psF64 *bg_mean_stdev, bool *accept)
     17973{
     17974    psArray         *rowSet;
     17975    psMetadata      *row;
     17976    psMetadata      *popped;
     17977    long            deleted;
     17978    bool            status;
     17979    int             rowID;
     17980
     17981    rowSet = psDBSelectRows(dbh, DETRUNSUMMARY_TABLE_NAME, NULL, 1);
     17982    if (!rowSet) {
     17983        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETRUNSUMMARY_INDEX_NAME);
     17984        psFree(rowSet);
     17985        return NULL;
     17986    }
     17987
     17988    row = psArrayGet(rowSet, 0);
     17989    psMemIncrRefCounter(row);
     17990    if (!row) {
     17991        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
     17992        return NULL;
     17993    }
     17994    psFree(rowSet);
     17995
     17996    rowID = psMetadataLookupS32(&status, row, DETRUNSUMMARY_INDEX_NAME);
     17997    if (!status) {
     17998        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETRUNSUMMARY_INDEX_NAME);
     17999        psFree(row);
     18000        return NULL;
     18001    }
     18002
     18003    popped = psMetadataAlloc();
     18004    psMetadataAddS32(popped, PS_LIST_TAIL, DETRUNSUMMARY_INDEX_NAME, 0, NULL, rowID);
     18005
     18006    deleted = psDBDeleteRows(dbh, DETRUNSUMMARY_TABLE_NAME, popped, 0);
     18007    if (deleted != 1) {
     18008        psError(PS_ERR_UNKNOWN, false, "database failed to delete row");
     18009        psFree(popped);
     18010        psFree(row);
     18011        return NULL;
     18012    }
     18013
     18014    psFree(popped);
     18015
     18016    *det_id = psMetadataLookupS32(&status, row, "det_id");
     18017    if (!status) {
     18018        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
     18019        psFree(row);
     18020        return false;
     18021    }
     18022    *iteration = psMetadataLookupS32(&status, row, "iteration");
     18023    if (!status) {
     18024        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration");
     18025        psFree(row);
     18026        return false;
     18027    }
     18028    *bg = psMetadataLookupF64(&status, row, "bg");
     18029    if (!status) {
     18030        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
     18031        psFree(row);
     18032        return false;
     18033    }
     18034    *bg_stdev = psMetadataLookupF64(&status, row, "bg_stdev");
     18035    if (!status) {
     18036        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
     18037        psFree(row);
     18038        return false;
     18039    }
     18040    *bg_mean_stdev = psMetadataLookupF64(&status, row, "bg_mean_stdev");
     18041    if (!status) {
     18042        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
     18043        psFree(row);
     18044        return false;
     18045    }
     18046    *accept = psMetadataLookupBool(&status, row, "accept");
     18047    if (!status) {
     18048        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item accept");
     18049        psFree(row);
     18050        return false;
     18051    }
     18052
     18053    psFree(row);
     18054
     18055    return true;
     18056}
     18057
     18058bool detRunSummaryInsertObject(psDB *dbh, detRunSummaryRow *object)
     18059{
     18060    return detRunSummaryInsert(dbh, object->det_id, object->iteration, object->bg, object->bg_stdev, object->bg_mean_stdev, object->accept);
     18061}
     18062
     18063bool detRunSummaryInsertObjects(psDB *dbh, psArray *objects)
     18064{
     18065    for (long i = 0; i < psArrayLength(objects); i++) {
     18066        if (!detRunSummaryInsertObject(dbh, objects->data[i])) {
     18067            return false;
     18068        }
     18069    }
     18070
     18071    return true;
     18072}
     18073
     18074detRunSummaryRow *detRunSummaryPopObject(psDB *dbh)
     18075{
     18076    psS32           det_id;
     18077    psS32           iteration;
     18078    psF64           bg;
     18079    psF64           bg_stdev;
     18080    psF64           bg_mean_stdev;
     18081    bool            accept;
     18082
     18083    if (!detRunSummaryPop(dbh, &det_id, &iteration, &bg, &bg_stdev, &bg_mean_stdev, &accept)) {
     18084        psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
     18085        return NULL;
     18086    }
     18087
     18088    return detRunSummaryRowAlloc(det_id, iteration, bg, bg_stdev, bg_mean_stdev, accept);
     18089}
     18090
     18091bool detRunSummaryInsertFits(psDB *dbh, const psFits *fits)
     18092{
     18093    psArray         *rowSet;
     18094
     18095    // move to (the first?) extension named  DETRUNSUMMARY_TABLE_NAME
     18096    if (!psFitsMoveExtName(fits, DETRUNSUMMARY_TABLE_NAME)) {
     18097        psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", DETRUNSUMMARY_TABLE_NAME);
     18098        return false;
     18099    }
     18100
     18101    // check HDU type
     18102    if (psFitsGetExtType(fits) != PS_FITS_TYPE_BINARY_TABLE)  {
     18103        psError(PS_ERR_UNKNOWN, true, "FITS HDU type is not PS_FITS_TYPE_BINARY_TABLE");
     18104        return false;
     18105    }
     18106
     18107    // read fits table
     18108    rowSet = psFitsReadTable(fits);
     18109    if (!rowSet) {
     18110        psError(PS_ERR_UNKNOWN, true, "FITS read error or FITS table is empty");
     18111        psFree(rowSet);
     18112        return false;
     18113    }
     18114
     18115    if (!psDBInsertRows(dbh, DETRUNSUMMARY_TABLE_NAME, rowSet)) {
     18116        psError(PS_ERR_UNKNOWN, false, "databse insert failed");
     18117        psFree(rowSet);
     18118        return false;
     18119    }
     18120
     18121    psFree(rowSet);
     18122
     18123    return true;
     18124}
     18125
     18126bool detRunSummaryPopFits(psDB *dbh, psFits *fits, unsigned long long limit)
     18127{
     18128    char            query[MAX_STRING_LENGTH];
     18129
     18130    if (!detRunSummarySelectRowsFits(dbh, fits, NULL, limit)) {
     18131        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
     18132        return false;
     18133    }
     18134
     18135    // remove limit rows from the end of the database
     18136    if (snprintf(query, MAX_STRING_LENGTH,
     18137                "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",
     18138                DETRUNSUMMARY_TABLE_NAME, DETRUNSUMMARY_INDEX_NAME, limit) < 0) {
     18139        psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %s bytes", MAX_STRING_LENGTH);
     18140        return false;
     18141    }
     18142           
     18143    if (!p_psDBRunQuery(dbh, query)) {
     18144        psError(PS_ERR_UNKNOWN, false, "database query failed");
     18145        return false;
     18146    }
     18147
     18148    return true;
     18149}
     18150
     18151bool detRunSummarySelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
     18152{
     18153    psArray         *rowSet;
     18154    psU64           i;
     18155
     18156    rowSet = psDBSelectRows(dbh, DETRUNSUMMARY_TABLE_NAME, where, limit);
     18157    if (!rowSet) {
     18158        return false;
     18159    }
     18160
     18161    // strip index column
     18162    for (i = 0; i < rowSet->n; i++) {
     18163        if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, DETRUNSUMMARY_INDEX_NAME)) {
     18164            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETRUNSUMMARY_INDEX_NAME);
     18165            psFree(rowSet);
     18166            return false;
     18167        }
     18168    }
     18169
     18170    // output to fits
     18171    if (!psFitsWriteTable(fits, NULL, rowSet, DETRUNSUMMARY_TABLE_NAME)) {
     18172        psError(PS_ERR_UNKNOWN, false, "FITS table write failed");
     18173        psFree(rowSet);
     18174        return false;
     18175    }
     18176
     18177    psFree(rowSet);
     18178
     18179    return true;
     18180}
     18181
     18182psMetadata *detRunSummaryMetadataFromObject(const detRunSummaryRow *object)
     18183{
     18184    psMetadata      *md;
     18185
     18186    md = psMetadataAlloc();
     18187    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, object->det_id)) {
     18188        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
     18189        psFree(md);
     18190        return NULL;
     18191    }
     18192    if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, object->iteration)) {
     18193        psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
     18194        psFree(md);
     18195        return NULL;
     18196    }
     18197    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, object->bg)) {
     18198        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
     18199        psFree(md);
     18200        return NULL;
     18201    }
     18202    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, object->bg_stdev)) {
     18203        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
     18204        psFree(md);
     18205        return NULL;
     18206    }
     18207    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, object->bg_mean_stdev)) {
     18208        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
     18209        psFree(md);
     18210        return NULL;
     18211    }
     18212    if (!psMetadataAdd(md, PS_LIST_TAIL, "accept", PS_DATA_BOOL, NULL, object->accept)) {
     18213        psError(PS_ERR_UNKNOWN, false, "failed to add item accept");
     18214        psFree(md);
     18215        return NULL;
     18216    }
     18217
     18218    return md;
     18219}
     18220
     18221detRunSummaryRow *detRunSummaryObjectFromMetadata(psMetadata *md)
     18222{
     18223    bool            status;
     18224    psS32           det_id;
     18225    psS32           iteration;
     18226    psF64           bg;
     18227    psF64           bg_stdev;
     18228    psF64           bg_mean_stdev;
     18229    bool            accept;
     18230
     18231    det_id = psMetadataLookupS32(&status, md, "det_id");
     18232    if (!status) {
     18233        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
     18234        return false;
     18235    }
     18236    iteration = psMetadataLookupS32(&status, md, "iteration");
     18237    if (!status) {
     18238        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration");
     18239        return false;
     18240    }
     18241    bg = psMetadataLookupF64(&status, md, "bg");
     18242    if (!status) {
     18243        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
     18244        return false;
     18245    }
     18246    bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
     18247    if (!status) {
     18248        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
     18249        return false;
     18250    }
     18251    bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
     18252    if (!status) {
     18253        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
     18254        return false;
     18255    }
     18256    accept = psMetadataLookupBool(&status, md, "accept");
     18257    if (!status) {
     18258        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item accept");
     18259        return false;
     18260    }
     18261
     18262    return detRunSummaryRowAlloc(det_id, iteration, bg, bg_stdev, bg_mean_stdev, accept);
     18263}
     18264psArray *detRunSummarySelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
     18265{
     18266    psArray         *rowSet;
     18267    psArray         *returnSet;
     18268    psU64           i;
     18269
     18270    rowSet = psDBSelectRows(dbh, DETRUNSUMMARY_TABLE_NAME, where, limit);
     18271    if (!rowSet) {
     18272        return NULL;
     18273    }
     18274
     18275    // strip index column
     18276    for (i = 0; i < rowSet->n; i++) {
     18277        if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, DETRUNSUMMARY_INDEX_NAME)) {
     18278            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETRUNSUMMARY_INDEX_NAME);
     18279            psFree(rowSet);
     18280            return false;
     18281        }
     18282    }
     18283
     18284    // convert psMetadata rows to row objects
     18285
     18286    returnSet = psArrayAlloc(rowSet->n);
     18287    returnSet->n = 0;
     18288
     18289    for (i = 0; i < rowSet->n; i++) {
     18290        detRunSummaryRow *object = detRunSummaryObjectFromMetadata(rowSet->data[i]);
     18291        psArrayAdd(returnSet, 0, object);
     18292        psFree(object);
     18293    }
     18294
     18295    psFree(rowSet);
     18296
     18297    return returnSet;
     18298}
     18299bool detRunSummaryDeleteObject(psDB *dbh, const detRunSummaryRow *object)
     18300{
     18301    psMetadata *where = detRunSummaryMetadataFromObject(object);
     18302    long long count = psDBDeleteRows(dbh, DETRUNSUMMARY_TABLE_NAME, where, 0);
     18303    psFree(where)
     18304    if (count < 0) {
     18305        psError(PS_ERR_UNKNOWN, true, "failed to delete row from detRunSummary");
     18306        return false;
     18307    }
     18308    if (count > 1) {
     18309        // XXX should this be a psAbort() instead?  It is possible that
     18310        // having an object match multiple rows was by design.
     18311        psError(PS_ERR_UNKNOWN, true, "detRunSummaryRow object matched more then one row.  Check your database schema");
     18312        return false;
     18313    }
     18314
     18315    return true;
     18316}
     18317long long detRunSummaryDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)
     18318{
     18319    long long       deleted = 0;
     18320
     18321    for (long long i = 0; i < objects->n; i++) {
     18322        detRunSummaryRow *object = objects->data[i];
     18323        psMetadata *where = detRunSummaryMetadataFromObject(object);
     18324        long long count = psDBDeleteRows(dbh, DETRUNSUMMARY_TABLE_NAME, where, limit);
     18325        psFree(where)
     18326        if (count < 0) {
     18327            psError(PS_ERR_UNKNOWN, true, "failed to delete row from detRunSummary");
     18328            return count;
     18329        }
     18330
     18331        deleted += count;
     18332    }
     18333
     18334    return deleted;
     18335}
     18336bool detRunSummaryPrintObjects(FILE *stream, psArray *objects, bool mdcf)
     18337{
     18338    PS_ASSERT_PTR_NON_NULL(objects, false);
     18339
     18340    psMetadata *output = psMetadataAlloc();
     18341    for (long i = 0; i < psArrayLength(objects); i++) {
     18342        psMetadata *md = detRunSummaryMetadataFromObject(objects->data[i]);
     18343        if (!psMetadataAddMetadata(
     18344            output,
     18345            PS_LIST_TAIL,
     18346            DETRUNSUMMARY_TABLE_NAME,
     18347            PS_META_DUPLICATE_OK,
     18348            NULL,
     18349            md
     18350        )) {
     18351            psError(PS_ERR_UNKNOWN, false, "failed to add metadata");
     18352            psFree(md);
     18353            psFree(output);
     18354            return false;
     18355        }
     18356        psFree(md);
     18357    }
     18358
     18359    if (!ippdbPrintMetadataRaw(stream, output, mdcf)) {
     18360        psError(PS_ERR_UNKNOWN, false, "failed to print metadata");
     18361        psFree(output);
     18362    }
     18363    psFree(output);
     18364
     18365    return true;
     18366}
Note: See TracChangeset for help on using the changeset viewer.