IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 17712


Ignore:
Timestamp:
May 16, 2008, 9:51:26 AM (18 years ago)
Author:
Paul Price
Message:

Adding difftool -queue

Location:
trunk/ippTools
Files:
1 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/ippTools/share/Makefile.am

    r16985 r17712  
    4545        difftool_todiffskyfile.sql \
    4646        difftool_revertdiffskyfile.sql \
     47        difftool_queue.sql \
    4748        flatcorr_create_tmp_chiprundone.sql \
    4849        flatcorr_completely_processed_chiprun.sql \
  • trunk/ippTools/src/difftool.c

    r17611 r17712  
    4040static bool revertdiffskyfileMode(pxConfig *config);
    4141static bool definepoprunMode(pxConfig *config);
     42static bool queueMode(pxConfig *config);
    4243
    4344static bool setdiffRunState(pxConfig *config, const char *diff_id, const char *state);
     
    7071        MODECASE(DIFFTOOL_MODE_REVERTDIFFSKYFILE, revertdiffskyfileMode);
    7172        MODECASE(DIFFTOOL_MODE_DEFINEPOPRUN,      definepoprunMode);
     73        MODECASE(DIFFTOOL_MODE_QUEUE,             queueMode);
    7274        default:
    7375            psAbort("invalid option (this should not happen)");
     
    460462
    461463    if (!diffSkyfileInsert(config->dbh,
    462                (psS64)atoll(diff_id),
    463                uri,
    464                path_base,
    465                bg,
    466                bg_stdev,
    467                dtime_diff,
    468                hostname,
    469                good_frac,
    470                code
    471       )) {
     464                           (psS64)atoll(diff_id),
     465                           uri,
     466                           path_base,
     467                           bg,
     468                           bg_stdev,
     469                           dtime_diff,
     470                           hostname,
     471                           good_frac,
     472                           code
     473          )) {
    472474        if (!psDBRollback(config->dbh)) {
    473475            psError(PS_ERR_UNKNOWN, false, "database error");
     
    628630}
    629631
    630 
    631 static bool definepoprunMode(pxConfig *config)
    632 {
    633     PS_ASSERT_PTR_NON_NULL(config, false);
    634 
    635     // required options
    636     PXOPT_LOOKUP_STR(workdir, config->args, "-workdir", true, false);
    637     PXOPT_LOOKUP_STR(skycell_id, config->args, "-skycell_id", true, false);
    638     PXOPT_LOOKUP_STR(tess_id, config->args, "-tess_id", true, false);
    639 
    640     // optional
    641     PXOPT_LOOKUP_STR(template_stack_id, config->args, "-template_stack_id", false, false);
    642     PXOPT_LOOKUP_STR(template_warp_id, config->args, "-template_warp_id", false, false);
    643 
    644     if (template_stack_id && template_warp_id) {
    645         psError(PS_ERR_BAD_PARAMETER_VALUE, true, "Only one template can be defined.");
    646         return false;
    647     }
    648     if (!template_stack_id && !template_warp_id) {
    649         psError(PS_ERR_BAD_PARAMETER_VALUE, true,
    650                 "No template has been defined (-template_stack_id or -template_warp_id)");
    651         return false;
    652     }
    653 
    654     PXOPT_LOOKUP_STR(input_stack_id, config->args, "-input_stack_id", false, false);
    655     PXOPT_LOOKUP_STR(input_warp_id, config->args, "-input_warp_id", false, false);
    656     if (input_stack_id && input_warp_id) {
    657         psError(PS_ERR_BAD_PARAMETER_VALUE, true, "Only one input can be defined.");
    658         return false;
    659     }
    660     if (!input_stack_id && !input_warp_id) {
    661         psError(PS_ERR_BAD_PARAMETER_VALUE, true,
    662                 "No input has been defined (-input_stack_id or -input_warp_id)");
     632// Generate a single populated run
     633static bool populatedrun(const char *workdir, // Working directory
     634                         const char *skycell_id, // Skycell identifier
     635                         const char *tess_id, // Tessellation identifier
     636                         psS64 input_warp_id, // Warp identifier for input image, PS_MAX_S64 for none
     637                         psS64 input_stack_id, // Stack identifier for input image, PS_MAX_S64 for none
     638                         psS64 template_warp_id, // Warp identifier for template image, PS_MAX_S64 for none
     639                         psS64 template_stack_id, // Stack identifier for template image, PS_MAX_S64 for none
     640                         pxConfig *config // Configuration
     641                         )
     642{
     643    PS_ASSERT_STRING_NON_EMPTY(workdir, false);
     644    PS_ASSERT_STRING_NON_EMPTY(skycell_id, false);
     645    PS_ASSERT_STRING_NON_EMPTY(tess_id, false);
     646    if ((input_warp_id == PS_MAX_S64 && input_stack_id == PS_MAX_S64) ||
     647        (input_warp_id != PS_MAX_S64 && input_stack_id != PS_MAX_S64)) {
     648        psError(PS_ERR_BAD_PARAMETER_VALUE, true, "One, and only one, input must be defined.");
     649        return false;
     650    }
     651    if ((template_warp_id == PS_MAX_S64 && template_stack_id == PS_MAX_S64) ||
     652        (template_warp_id != PS_MAX_S64 && template_stack_id != PS_MAX_S64)) {
     653        psError(PS_ERR_BAD_PARAMETER_VALUE, true, "One, and only one, template must be defined.");
    663654        return false;
    664655    }
     
    683674    }
    684675
    685 
    686676    if (!psDBTransaction(config->dbh)) {
    687677        psError(PS_ERR_UNKNOWN, false, "database error");
     
    702692            run->diff_id,
    703693            true,
    704             template_stack_id ? (psS64)atoll(template_stack_id) : PS_MAX_S64, // defined or NULL
    705             template_warp_id ? (psS64)atoll(template_warp_id) : PS_MAX_S64, // defined or NULL
     694            template_stack_id,
     695            template_warp_id,
    706696            skycell_id,
    707697            tess_id,
     
    719709            run->diff_id,
    720710            false,
    721             input_stack_id ? (psS64)atoll(input_stack_id) : PS_MAX_S64, // defined or NULL
    722             input_warp_id ? (psS64)atoll(input_warp_id) : PS_MAX_S64, // defined or NULL
     711            input_stack_id,
     712            input_warp_id,
    723713            skycell_id,
    724714            tess_id,
     
    758748    return true;
    759749}
     750
     751
     752static bool definepoprunMode(pxConfig *config)
     753{
     754    PS_ASSERT_PTR_NON_NULL(config, false);
     755
     756    // required options
     757    PXOPT_LOOKUP_STR(workdir, config->args, "-workdir", true, false);
     758    PXOPT_LOOKUP_STR(skycell_id, config->args, "-skycell_id", true, false);
     759    PXOPT_LOOKUP_STR(tess_id, config->args, "-tess_id", true, false);
     760
     761    // optional
     762    PXOPT_LOOKUP_STR(template_stack_id, config->args, "-template_stack_id", false, false);
     763    PXOPT_LOOKUP_STR(template_warp_id, config->args, "-template_warp_id", false, false);
     764
     765    if (template_stack_id && template_warp_id) {
     766        psError(PS_ERR_BAD_PARAMETER_VALUE, true, "Only one template can be defined.");
     767        return false;
     768    }
     769    if (!template_stack_id && !template_warp_id) {
     770        psError(PS_ERR_BAD_PARAMETER_VALUE, true,
     771                "No template has been defined (-template_stack_id or -template_warp_id)");
     772        return false;
     773    }
     774
     775    PXOPT_LOOKUP_STR(input_stack_id, config->args, "-input_stack_id", false, false);
     776    PXOPT_LOOKUP_STR(input_warp_id, config->args, "-input_warp_id", false, false);
     777    if (input_stack_id && input_warp_id) {
     778        psError(PS_ERR_BAD_PARAMETER_VALUE, true, "Only one input can be defined.");
     779        return false;
     780    }
     781    if (!input_stack_id && !input_warp_id) {
     782        psError(PS_ERR_BAD_PARAMETER_VALUE, true,
     783                "No input has been defined (-input_stack_id or -input_warp_id)");
     784        return false;
     785    }
     786
     787    return populatedrun(workdir, skycell_id, tess_id,
     788                        input_warp_id ? (psS64)atoll(input_warp_id) : PS_MAX_S64,
     789                        input_stack_id ? (psS64)atoll(input_stack_id) : PS_MAX_S64,
     790                        template_warp_id ? (psS64)atoll(template_warp_id) : PS_MAX_S64,
     791                        template_stack_id ? (psS64)atoll(template_stack_id) : PS_MAX_S64,
     792                        config);
     793
     794    return true;
     795}
     796
     797
     798static bool queueMode(pxConfig *config)
     799{
     800    PS_ASSERT_PTR_NON_NULL(config, false);
     801
     802    // required options
     803    PXOPT_LOOKUP_STR(workdir, config->args, "-workdir", true, false);
     804
     805    // default
     806    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
     807    PXOPT_LOOKUP_TIME(registered, config->args, "-registered", false, false);
     808
     809    // find all things to queue
     810    psString query = pxDataGet("difftool_queue.sql");
     811    if (!query) {
     812        psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     813        return false;
     814    }
     815
     816    if (config->where) {
     817        psString whereClause = psDBGenerateWhereSQL(config->where, NULL);
     818        psStringAppend(&query, " %s", whereClause);
     819        psFree(whereClause);
     820    }
     821
     822    if (!p_psDBRunQuery(config->dbh, query)) {
     823        psError(PS_ERR_UNKNOWN, false, "database error");
     824        psFree(query);
     825        return false;
     826    }
     827    psFree(query);
     828
     829    psArray *output = p_psDBFetchResult(config->dbh);
     830    if (!output) {
     831        psErrorCode err = psErrorCodeLast();
     832        switch (err) {
     833            case PS_ERR_DB_CLIENT:
     834                psError(PXTOOLS_ERR_SYS, false, "database error");
     835            case PS_ERR_DB_SERVER:
     836                psError(PXTOOLS_ERR_PROG, false, "database error");
     837            default:
     838                psError(PXTOOLS_ERR_PROG, false, "unknown error");
     839        }
     840
     841        return false;
     842    }
     843    if (!psArrayLength(output)) {
     844        psTrace("difftool", PS_LOG_INFO, "no rows found");
     845        psFree(output);
     846        return true;
     847    }
     848
     849    long numGood = 0;                   // Number of good rows added
     850    for (long i = 0; i < output->n; i++) {
     851        psMetadata *row = output->data[i]; // Output row from query
     852
     853        // Selected parameters
     854        bool mdok;                      // Status of MD lookup
     855        const char *skycell_id = psMetadataLookupStr(&mdok, row, "skycell_id");
     856        if (!mdok || !skycell_id) {
     857            psWarning("skycell_id not found --- ignoring row %ld", i);
     858            continue;
     859        }
     860        const char *tess_id = psMetadataLookupStr(&mdok, row, "tess_id");
     861        if (!mdok || !tess_id) {
     862            psWarning("tess_id not found --- ignoring row %ld", i);
     863            continue;
     864        }
     865        psS64 stack_id = psMetadataLookupS64(&mdok, row, "stack_id");
     866        if (!mdok) {
     867            psWarning("stack_id not found --- ignoring row %ld", i);
     868            continue;
     869        }
     870        psS64 warp_id = psMetadataLookupS64(&mdok, row, "warp_id");
     871        if (!mdok) {
     872            psWarning("warp_id not found --- ignoring row %ld", i);
     873            continue;
     874        }
     875
     876        if (!populatedrun(workdir, skycell_id, tess_id, warp_id, PS_MAX_S64, PS_MAX_S64, stack_id, config)) {
     877            psWarning("Unable to add run for %s,%s,%" PRId64 ",%" PRId64, skycell_id, tess_id,
     878                      warp_id, stack_id);
     879            psErrorClear();
     880            continue;
     881        }
     882
     883        numGood++;
     884    }
     885
     886    psLogMsg("difftool", PS_LOG_INFO, "%ld runs added.", numGood);
     887
     888    psFree(output);
     889
     890    return true;
     891}
  • trunk/ippTools/src/difftool.h

    r15415 r17712  
    3434    DIFFTOOL_MODE_REVERTDIFFSKYFILE,
    3535    DIFFTOOL_MODE_DEFINEPOPRUN,
     36    DIFFTOOL_MODE_QUEUE,
    3637} difftoolMode;
    3738
  • trunk/ippTools/src/difftoolConfig.c

    r16253 r17712  
    174174            "define stack ID for input", NULL);
    175175
     176    // -queue
     177    psMetadata *queueArgs = psMetadataAlloc();
     178    psMetadataAddStr(queueArgs, PS_LIST_TAIL, "-workdir", 0,
     179            "define workdir (required)", NULL);
     180    psMetadataAddTime(queueArgs, PS_LIST_TAIL, "-registered",  0,
     181            "time detrend run was registered", now);
     182    psMetadataAddBool(queueArgs, PS_LIST_TAIL, "-simple",  0,
     183            "use the simple output format", false);
     184
    176185    psFree(now);
    177186
     
    188197    PXOPT_ADD_MODE("-revertdiffskyfile","", DIFFTOOL_MODE_REVERTDIFFSKYFILE, revertdiffskyfileArgs);
    189198    PXOPT_ADD_MODE("-definepoprun",     "", DIFFTOOL_MODE_DEFINEPOPRUN,      definepoprunArgs);
     199    PXOPT_ADD_MODE("-queue",            "", DIFFTOOL_MODE_QUEUE,             queueArgs);
    190200
    191201    if (!pxGetOptions(stderr, argc, argv, config, modes, argSets)) {
Note: See TracChangeset for help on using the changeset viewer.