IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 35152


Ignore:
Timestamp:
Feb 12, 2013, 4:18:26 PM (13 years ago)
Author:
bills
Message:

in relStack table remove requirement for skycal_id and add stack_id so that
entries can be added after stacks are processed but before photometry
is run and they are calibrated

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/dbconfig/release.md

    r35048 r35152  
    3232    relstack_id S64     0   # Primary Key AUTO_INCREMENT
    3333    rel_id      S32     0   # fkey(rel_id) ref ippRelease(rel_id)
    34     skycal_id   S64     0   # fkey(skycal_id) ref skycalRun(skycal_id)
     34    stack_id    S64     0   # fkey(stack_id) ref stackRun(stack_id)
    3535    skycell_id  STR     64
    3636    tess_id     STR     64
  • trunk/ippTools/src/releasetool.c

    r35048 r35152  
    4343static bool updaterelexpMode(pxConfig *config);
    4444static bool listrelexpMode(pxConfig *config);
     45static bool definerelstackMode(pxConfig *config);
     46static bool updaterelstackMode(pxConfig *config);
     47static bool listrelstackMode(pxConfig *config);
    4548
    4649# define MODECASE(caseName, func) \
     
    7174        MODECASE(RELEASETOOL_MODE_UPDATERELEXP,     updaterelexpMode);
    7275        MODECASE(RELEASETOOL_MODE_LISTRELEXP,       listrelexpMode);
     76
     77        MODECASE(RELEASETOOL_MODE_DEFINERELSTACK,   definerelstackMode);
     78        MODECASE(RELEASETOOL_MODE_UPDATERELSTACK,   updaterelstackMode);
     79        MODECASE(RELEASETOOL_MODE_LISTRELSTACK,     listrelstackMode);
    7380        default:
    7481            psAbort("invalid option (this should not happen)");
     
    533540    return true;
    534541}
    535 
     542static bool definerelstackMode(pxConfig *config)
     543{
     544    PS_ASSERT_PTR_NON_NULL(config, NULL);
     545
     546    psMetadata *where = psMetadataAlloc();
     547
     548    PXOPT_COPY_STR(config->args, where, "-label",      "skycalRun.label", "==");
     549    PXOPT_COPY_STR(config->args, where, "-data_group", "skycalRun.data_group", "==");
     550    PXOPT_COPY_S64(config->args, where, "-skycal_id",  "skcalRun.skycal_id", "==");
     551
     552    // Insure that at least one of the skcalRun selectors is supplied
     553    if (!psListLength(where->list)) {
     554        psFree(where);
     555        psError(PXTOOLS_ERR_CONFIG, false, "at least one of -label, -data_group, or -skycal_id is required");
     556        return false;
     557    }
     558
     559    PXOPT_COPY_S64(config->args, where, "-stack_id",   "stackRun.stack_id", "==");
     560    PXOPT_COPY_STR(config->args, where, "-tess_id",    "stackRun.tess_id", "==");
     561    PXOPT_COPY_STR(config->args, where, "-skycell_id", "stackRun.skycell_id", "==");
     562
     563    // insure that at least one of these is supplied to select the release
     564    PXOPT_LOOKUP_S64(rel_id, config->args,      "-rel_id", false, false);
     565    PXOPT_LOOKUP_STR(releaseName, config->args, "-releaseName", false, false);
     566    if (!rel_id && !releaseName) {
     567        psError(PXTOOLS_ERR_CONFIG, true, "either -rel_id or -releaseName is required");
     568        return false;
     569    }
     570
     571    // limit query to the target release. (Note: this will select nothing of releaseName and rel_id don't match)
     572    // note: we add these after above to insure that search args are supplied
     573    PXOPT_COPY_STR(config->args, where, "-releaseName", "ippRelease.releaseName", "==");
     574    PXOPT_COPY_S32(config->args, where, "-rel_id", "ippRelease.rel_id", "==");
     575
     576
     577    PXOPT_LOOKUP_STR(state, config->args,     "-set_state", true, false);
     578    PXOPT_LOOKUP_STR(stack_type, config->args,"-set_stack_type", true, false);
     579    PXOPT_LOOKUP_U32(flags, config->args,     "-set_flags", false, false);
     580    PXOPT_LOOKUP_F32(zpt_obs, config->args,   "-set_zpt_obs", false, false);
     581    PXOPT_LOOKUP_F32(zpt_stdev, config->args, "-set_zpt_stdev", false, false);
     582    PXOPT_LOOKUP_F32(fwhm_major, config->args, "-set_fwhm_major", false, false);
     583    PXOPT_LOOKUP_STR(path_base, config->args, "-set_path_base", false, false);
     584
     585    PXOPT_LOOKUP_BOOL(pretend, config->args, "-pretend", false);
     586    PXOPT_LOOKUP_BOOL(simple, config->args,  "-simple", false);
     587
     588    // find the parameters of all the exposures that we want to add to the release
     589    psString query = pxDataGet("releasetool_definerelstack.sql");
     590    if (!query) {
     591        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
     592        psFree(where);
     593        return false;
     594    }
     595
     596    psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
     597    psStringAppend(&query, " AND %s", whereClause);
     598    psFree(whereClause);
     599
     600    psFree(where);
     601
     602    if (!p_psDBRunQuery(config->dbh, query)) {
     603        psError(PS_ERR_UNKNOWN, false, "database error");
     604        psFree(query);
     605        return false;
     606    }
     607    psFree(query);
     608
     609    psArray *output = p_psDBFetchResult(config->dbh);
     610    if (!output) {
     611        psError(PS_ERR_UNKNOWN, false, "database error");
     612        return false;
     613    }
     614    if (!psArrayLength(output)) {
     615        psTrace("releasetool", PS_LOG_INFO, "no rows found");
     616        psFree(output);
     617        return true;
     618    }
     619
     620    if (pretend) {
     621        // negative simple so the default is true
     622        if (!ippdbPrintMetadatas(stdout, output, "chipRun", !simple)) {
     623            psError(PS_ERR_UNKNOWN, false, "failed to print array");
     624            psFree(output);
     625            return false;
     626        }
     627        psFree(output);
     628        return true;
     629    }
     630
     631    if (!psDBTransaction(config->dbh)) {
     632        psError(PS_ERR_UNKNOWN, false, "database error");
     633        psFree(output);
     634        return false;
     635    }
     636
     637    psTime *now = psTimeGetNow(PS_TIME_TAI);
     638    // loop over our list of  exposures
     639    for (long i = 0; i < psArrayLength(output); i++) {
     640        psMetadata *md = output->data[i];
     641
     642        bool status = true;
     643        psS32 rel_id = psMetadataLookupS32(&status, md, "rel_id");
     644        psS64 skycal_id = psMetadataLookupS64(&status, md, "skycal_id");
     645        psString skycell_id = psMetadataLookupStr(&status, md, "skycell_id");
     646        psString tess_id = psMetadataLookupStr(&status, md, "tess_id");
     647        psString state = psMetadataLookupStr(&status, md, "state");
     648
     649        // use skycal zero point measurement if not supplied with arguments
     650        psF32 sc_zpt_obs = psMetadataLookupF32(&status, md, "zpt_obs");
     651        psF32 sc_zpt_stdev = psMetadataLookupF32(&status, md, "zpt_stdev");
     652
     653        if (!relStackInsert(config->dbh,
     654            0,          // relstack_id (auto increment)
     655            rel_id,
     656            skycal_id,
     657            skycell_id,
     658            tess_id,
     659            state,
     660            flags,
     661            stack_type,
     662            isfinite(zpt_obs)  ? zpt_obs : sc_zpt_obs,
     663            isfinite(zpt_stdev) ? zpt_stdev : sc_zpt_stdev,
     664            fwhm_major,
     665            path_base,
     666            now,       // registered
     667            now        // time_stamp
     668        )) {
     669            if (!psDBRollback(config->dbh)) {
     670                psError(PS_ERR_UNKNOWN, false, "database error");
     671            }
     672            psError(PS_ERR_UNKNOWN, false,
     673                    "failed to trying to insert relExp for skycal_id %" PRId64, skycal_id);
     674            psFree(output);
     675            psFree(now);
     676            return false;
     677        }
     678    }
     679    psFree(output);
     680
     681    if (!psDBCommit(config->dbh)) {
     682        psError(PS_ERR_UNKNOWN, false, "database error");
     683        return false;
     684    }
     685
     686    return true;
     687}
     688
     689static bool updaterelstackMode(pxConfig *config)
     690{
     691    psError(PS_ERR_UNKNOWN, true, "not yet implemented");
     692    return false;
     693}
     694
     695static bool listrelstackMode(pxConfig *config)
     696{
     697    PS_ASSERT_PTR_NON_NULL(config, NULL);
     698
     699    psMetadata *where = psMetadataAlloc();
     700
     701    PXOPT_COPY_STR(config->args, where, "-releaseName", "ippRelease.releaseName", "LIKE");
     702    pxAddLabelSearchArgs(config, where, "-release_state","ippRelease.state", "==");
     703    PXOPT_COPY_STR(config->args, where, "-state",       "relExp.state", "==");
     704    PXOPT_COPY_STR(config->args, where, "-filter",      "rawExp.filter", "LIKE");
     705    PXOPT_COPY_TIME(config->args, where, "-dateobs_begin","rawExp.dateobs", ">=");
     706    PXOPT_COPY_TIME(config->args, where, "-dateobs_end", "rawExp.dateobs", "<=");
     707    PXOPT_COPY_F32(config->args, where, "-fwhm_min",    "camProcessedExp.fwhm_major", ">=");
     708    PXOPT_COPY_F32(config->args, where, "-fwhm_max",    "camProcessedExp.fwhm_major", "<=");
     709    PXOPT_COPY_STR(config->args, where, "-exp_name",    "rawExp.exp_name", "==");
     710    PXOPT_COPY_S64(config->args, where, "-exp_id",      "relExp.exp_id", "==");
     711    PXOPT_COPY_S64(config->args, where, "-chip_id",     "relExp.chip_id", "==");
     712    PXOPT_COPY_S64(config->args, where, "-cam_id",      "relExp.cam_id", "==");
     713    PXOPT_COPY_S64(config->args, where, "-warp_id",     "warpRun.warp_id", "==");
     714    PXOPT_COPY_STR(config->args, where, "-chip_data_group", "chipRun.data_group", "LIKE");
     715    PXOPT_COPY_STR(config->args, where, "-cam_data_group",  "camRun.data_group", "LIKE");
     716    PXOPT_COPY_STR(config->args, where, "-warp_data_group", "warpRun.data_group", "LIKE");
     717
     718    PXOPT_COPY_STR(config->args, where, "-surveyName",  "survey.surveyName", "LIKE");
     719    PXOPT_COPY_S32(config->args, where, "-rel_id",      "relExp.rel_id", "==");
     720
     721    PXOPT_LOOKUP_BOOL(priority_order, config->args, "-priority_order", false);
     722
     723    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     724    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
     725
     726    psString query = pxDataGet("releasetool_listrelexp.sql");
     727    if (!query) {
     728        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
     729        return false;
     730    }
     731
     732    psString where2 = NULL;
     733    if (!pxspaceAddWhere(config, &where2, "rawExp")) {
     734        psError(psErrorCodeLast(), false, "pxspaceAddWhere failed");
     735        return false;
     736    }
     737
     738    if (psListLength(where->list)) {
     739        psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
     740        psStringAppend(&query, "\nWHERE %s", whereClause);
     741        psFree(whereClause);
     742    } else if (where2) {
     743        psStringAppend(&query, "\nWHERE ");
     744    } else {
     745        psError(PXTOOLS_ERR_CONFIG, false, "search parameters are required\n");
     746        psFree(where);
     747        return false;
     748    }
     749
     750    if (where2) {
     751        psStringAppend(&query, "\n%s", where2);
     752        psFree(where2);
     753    }
     754
     755    if (priority_order) {
     756        psStringAppend(&query, "\nAND priority > 0 order by exp_id, priority");
     757    }
     758
     759    if (limit) {
     760        psString limitString = psDBGenerateLimitSQL(limit);
     761        psStringAppend(&query, " %s", limitString);
     762        psFree(limitString);
     763    }
     764
     765    if (!p_psDBRunQuery(config->dbh, query)) {
     766        psError(PS_ERR_UNKNOWN, false, "database error");
     767        psFree(query);
     768        return false;
     769    }
     770    psFree(query);
     771
     772    psArray *output = p_psDBFetchResult(config->dbh);
     773    if (!output) {
     774        psError(PS_ERR_UNKNOWN, false, "database error");
     775        return false;
     776    }
     777
     778    if (!psArrayLength(output)) {
     779        psTrace("releasetool", PS_LOG_INFO, "no rows found");
     780        psFree(output);
     781        return true;
     782    }
     783
     784    if (!ippdbPrintMetadatas(stdout, output, "relExp", !simple)) {
     785        psError(PS_ERR_UNKNOWN, false, "failed to print array");
     786        psFree(output);
     787        return false;
     788    }
     789
     790    psFree(output);
     791
     792    return true;
     793}
     794
  • trunk/ippTools/src/releasetool.h

    r34908 r35152  
    3333    RELEASETOOL_MODE_UPDATERELEXP,
    3434    RELEASETOOL_MODE_LISTRELEXP,
     35    RELEASETOOL_MODE_DEFINERELSTACK,
     36    RELEASETOOL_MODE_UPDATERELSTACK,
     37    RELEASETOOL_MODE_LISTRELSTACK,
    3538} releasetoolMode;
    3639
Note: See TracChangeset for help on using the changeset viewer.