IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 29553


Ignore:
Timestamp:
Oct 25, 2010, 3:27:09 PM (16 years ago)
Author:
eugene
Message:

merge changes from eam_branches/ipp-20100823

Location:
trunk/ippTools
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/ippTools

  • trunk/ippTools/share/difftool_definestackstack_part1.sql

    r26958 r29553  
    1 SELECT
     1SELECT distinct
    22       stackRun.stack_id,
    33       stackRun.data_group,
     
    99       template.max_stack_id,
    1010       template.template_label,
    11        diffExp.diff_id
     11       count(diffExp.diff_id) as n_diff
    1212FROM stackRun JOIN stackSumSkyfile USING(stack_id)
    1313JOIN (
     
    4545        -- diff where hook %s
    4646        -- input where hook again %s
     47group by stackRun.stack_id,
     48       stackRun.data_group,
     49       stackRun.filter,
     50       stackRun.label,
     51       stackRun.tess_id,
     52       stackRun.skycell_id,
     53       stackSumSkyfile.good_frac,
     54       template.max_stack_id,
     55       template.template_label
    4756ORDER BY stackRun.data_group,stackRun.filter,stackRun.skycell_id
  • trunk/ippTools/src

    • Property svn:ignore
      •  

        old new  
        4141bgtool
        4242diffphottool
         43minidvodbtool
  • trunk/ippTools/src/camtool.c

    r28370 r29553  
    111111    pxAddLabelSearchArgs (config, where, "-label", "chipRun.label", "=="); // define using chipRun label
    112112    PXOPT_COPY_STR(config->args, where, "-reduction", "chipRun.reduction", "==");
     113    PXOPT_COPY_STR(config->args, where, "-data_group", "chipRun.data_group", "==");
    113114
    114115    if (!psListLength(where->list) &&
  • trunk/ippTools/src/camtoolConfig.c

    r28370 r29553  
    5454    psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-label", PS_META_DUPLICATE_OK, "search by chipRun label", NULL);
    5555    psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-reduction",          0, "search by chipRun reduction class", NULL);
     56    psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-data_group",         0, "search by chipRun data_group", NULL);
    5657
    5758    psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-set_workdir",        0, "define workdir", NULL);
  • trunk/ippTools/src/difftool.c

    r29416 r29553  
    12441244    PXOPT_COPY_STR(config->args, stackWhere, "-stack_data_group", "stackRun.data_group", "==");
    12451245
     1246    PXOPT_LOOKUP_BOOL(bothways, config->args, "-bothways", false);
     1247
    12461248    PXOPT_LOOKUP_STR(workdir, config->args, "-set_workdir", true, false); // required option
    12471249    PXOPT_LOOKUP_STR(reduction, config->args, "-set_reduction", false, false); // option
     
    15051507        // ok we've got one create the diffRun
    15061508        diffRunRow *run = diffRunRowAlloc(
    1507                 0,          // ID
    1508                 "reg",      // state
     1509                0,            // ID
     1510                "reg",        // state
    15091511                workdir,
    15101512                label,
     
    15121514                dist_group,
    15131515                reduction,
    1514                 NULL,       // dvodb
     1516                NULL,         // dvodb
    15151517                registered,
    15161518                tess_id,
    1517                 false,                  // bothways
    1518                 true,                   // exposure
    1519                 0,       // magicked
    1520                 NULL, // software version
    1521                 0,    // mask stat npix
    1522                 NAN,    // static
    1523                 NAN,    // dynamic
    1524                 NAN,    // magic
    1525                 NAN,    // advisory
     1519                bothways,     // bothways (default is false)
     1520                true,         // exposure
     1521                0,            // magicked
     1522                NULL,        // software version
     1523                0,            // mask stat npix
     1524                NAN,          // static
     1525                NAN,          // dynamic
     1526                NAN,          // magic
     1527                NAN,          // advisory
    15261528                IPP_DIFF_MODE_WARP_STACK,
    15271529                note
     
    16561658    PXOPT_COPY_STR(config->args,   selectWhere, "-template_comment",   "templateRawExp.comment",     "LIKE");
    16571659
     1660    PXOPT_LOOKUP_BOOL(not_bothways, config->args, "-not-bothways", false);
     1661
    16581662    // Haversine formula for great circle distance
    16591663    PXOPT_COPY_F32(config->args, selectWhere, "-distance",
     
    18791883                                          registered,
    18801884                                          tess_id,
    1881                                           true,  // bothways
     1885                                          !not_bothways,  // bothways (default is true, ie not_bothways is false)
    18821886                                          true,  // exposure
    18831887                                          false, // magicked
     
    19621966
    19631967static bool definestackstackMode(pxConfig *config) {
    1964   PS_ASSERT_PTR_NON_NULL(config, false);
    1965 
    1966   psMetadata *stack1Where = psMetadataAlloc();
    1967   psMetadata *stack2Where = psMetadataAlloc();
    1968 
    1969   PXOPT_COPY_STR(config->args, stack1Where, "-tess_id", "stackRun.tess_id", "==");
    1970   PXOPT_COPY_STR(config->args, stack2Where, "-tess_id", "stackRun.tess_id", "==");
    1971   PXOPT_COPY_STR(config->args, stack1Where, "-filter", "stackRun.filter", "==");
    1972   PXOPT_COPY_STR(config->args, stack2Where, "-filter", "stackRun.filter", "==");
    1973   PXOPT_COPY_STR(config->args, stack1Where, "-skycell_id", "stackRun.skycell_id", "==");
    1974   PXOPT_COPY_STR(config->args, stack2Where, "-skycell_id", "stackRun.skycell_id", "==");
    1975   PXOPT_COPY_STR(config->args, stack1Where, "-input_label", "stackRun.label","==");
    1976   PXOPT_COPY_STR(config->args, stack2Where, "-template_label", "stackRun.label","==");
    1977   PXOPT_COPY_F32(config->args, stack1Where, "-good_frac", "stackSumSkyfile.good_frac", ">=");
    1978   PXOPT_COPY_F32(config->args, stack2Where, "-good_frac", "stackSumSkyfile.good_frac", ">=");
    1979 
    1980   PXOPT_LOOKUP_STR(workdir, config->args, "-set_workdir", true, false); // required option
    1981   PXOPT_LOOKUP_STR(label, config->args, "-set_label", false, false); // option
    1982   PXOPT_LOOKUP_STR(reduction, config->args, "-set_reduction", false, false); // option
    1983   PXOPT_LOOKUP_TIME(registered, config->args, "-set_registered", false, false);
    1984   PXOPT_LOOKUP_STR(data_group, config->args, "-set_data_group", false, false);
    1985   PXOPT_LOOKUP_STR(dist_group, config->args, "-set_dist_group", false, false);
    1986   PXOPT_LOOKUP_STR(note, config->args, "-set_note", false, false);
    1987 
    1988   PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
    1989   PXOPT_LOOKUP_BOOL(reRun, config->args, "-rerun", false);
    1990   PXOPT_LOOKUP_BOOL(newTemplates,config->args,"-new-templates", false);
    1991 
    1992   PXOPT_LOOKUP_BOOL(available, config->args, "-available", false);
    1993   PXOPT_LOOKUP_BOOL(pretend, config->args, "-pretend", false);
    1994 
    1995   if (!(label)) {
    1996     PXOPT_LOOKUP_STR(label,config->args, "-input_label",true,false);
    1997   }
    1998 
    1999   // Organize the config information into queries.
    2000   psString stack1Query = NULL;
    2001   psString stack2Query = NULL;
    2002 
    2003   if (psListLength(stack1Where->list)) {
    2004     psString whereClause = psDBGenerateWhereConditionSQL(stack1Where, NULL);
    2005     psStringAppend(&stack1Query, "\n AND %s", whereClause);
    2006     psFree(whereClause);
    2007   } else {
    2008     stack1Query = psStringCopy("\n");
    2009   }
    2010   psFree(stack1Where);
    2011 
    2012   if (psListLength(stack2Where->list)) {
    2013     psString whereClause = psDBGenerateWhereConditionSQL(stack2Where, NULL);
    2014     psStringAppend(&stack2Query, "\n AND %s", whereClause);
    2015     psFree(whereClause);
    2016   } else {
    2017     stack2Query = psStringCopy("\n");
    2018   }
    2019   psFree(stack2Where);
    2020 
    2021   // don't queue for stacks that have already been diffed unless requested
    2022   psString diffQuery = NULL;
    2023   if (! (reRun || newTemplates) ) {
    2024     psStringAppend(&diffQuery, "\n AND diffExp.diff_id IS NULL");
    2025   } else {
    2026     diffQuery = psStringCopy("\n");
    2027   }
    2028 
    2029   // find the distinct set of data_groups and filters
    2030   psString query = pxDataGet("difftool_definestackstack_part0.sql");
    2031   if (!query) {
    2032     psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
    2033     return(false);
    2034   }
    2035   psTrace("difftool",1,query,stack2Query,stack1Query,diffQuery,stack1Query);
    2036 /*   exit(10); */
    2037 
    2038   if (!psDBTransaction(config->dbh)) {
    2039     psError(PS_ERR_UNKNOWN, false, "database error");
    2040     return(false);
    2041   }
    2042 
    2043   if (!p_psDBRunQueryF(config->dbh, query, stack2Query, stack1Query, diffQuery, stack1Query)) {
    2044     psError(PS_ERR_UNKNOWN, false, "database error");
     1968    PS_ASSERT_PTR_NON_NULL(config, false);
     1969
     1970    psMetadata *stack1Where = psMetadataAlloc();
     1971    psMetadata *stack2Where = psMetadataAlloc();
     1972
     1973    PXOPT_COPY_STR(config->args, stack1Where, "-tess_id", "stackRun.tess_id", "==");
     1974    PXOPT_COPY_STR(config->args, stack2Where, "-tess_id", "stackRun.tess_id", "==");
     1975    PXOPT_COPY_STR(config->args, stack1Where, "-filter", "stackRun.filter", "==");
     1976    PXOPT_COPY_STR(config->args, stack2Where, "-filter", "stackRun.filter", "==");
     1977    PXOPT_COPY_STR(config->args, stack1Where, "-skycell_id", "stackRun.skycell_id", "==");
     1978    PXOPT_COPY_STR(config->args, stack2Where, "-skycell_id", "stackRun.skycell_id", "==");
     1979    PXOPT_COPY_STR(config->args, stack1Where, "-input_label", "stackRun.label","==");
     1980    PXOPT_COPY_STR(config->args, stack2Where, "-template_label", "stackRun.label","==");
     1981    PXOPT_COPY_F32(config->args, stack1Where, "-good_frac", "stackSumSkyfile.good_frac", ">=");
     1982    PXOPT_COPY_F32(config->args, stack2Where, "-good_frac", "stackSumSkyfile.good_frac", ">=");
     1983
     1984    PXOPT_LOOKUP_STR(workdir, config->args, "-set_workdir", true, false); // required option
     1985    PXOPT_LOOKUP_STR(label, config->args, "-set_label", false, false); // option
     1986    PXOPT_LOOKUP_STR(reduction, config->args, "-set_reduction", false, false); // option
     1987    PXOPT_LOOKUP_TIME(registered, config->args, "-set_registered", false, false);
     1988    PXOPT_LOOKUP_STR(data_group, config->args, "-set_data_group", false, false);
     1989    PXOPT_LOOKUP_STR(dist_group, config->args, "-set_dist_group", false, false);
     1990    PXOPT_LOOKUP_STR(note, config->args, "-set_note", false, false);
     1991
     1992    PXOPT_LOOKUP_BOOL(bothways, config->args, "-bothways", false);
     1993
     1994    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
     1995    PXOPT_LOOKUP_BOOL(reRun, config->args, "-rerun", false);
     1996    PXOPT_LOOKUP_BOOL(newTemplates,config->args,"-new-templates", false);
     1997
     1998    PXOPT_LOOKUP_BOOL(available, config->args, "-available", false);
     1999    PXOPT_LOOKUP_BOOL(pretend, config->args, "-pretend", false);
     2000
     2001    if (!(label)) {
     2002        PXOPT_LOOKUP_STR(label,config->args, "-input_label",true,false);
     2003    }
     2004
     2005    // Organize the config information into queries.
     2006    psString stack1Query = NULL;
     2007    psString stack2Query = NULL;
     2008
     2009    if (psListLength(stack1Where->list)) {
     2010        psString whereClause = psDBGenerateWhereConditionSQL(stack1Where, NULL);
     2011        psStringAppend(&stack1Query, "\n AND %s", whereClause);
     2012        psFree(whereClause);
     2013    } else {
     2014        stack1Query = psStringCopy("\n");
     2015    }
     2016    psFree(stack1Where);
     2017
     2018    if (psListLength(stack2Where->list)) {
     2019        psString whereClause = psDBGenerateWhereConditionSQL(stack2Where, NULL);
     2020        psStringAppend(&stack2Query, "\n AND %s", whereClause);
     2021        psFree(whereClause);
     2022    } else {
     2023        stack2Query = psStringCopy("\n");
     2024    }
     2025    psFree(stack2Where);
     2026
     2027 
     2028    // don't queue for stacks that have already been diffed unless requested
     2029    psString diffQuery0 = NULL;
     2030    psString diffQuery1 = NULL;
     2031    if (! (reRun || newTemplates) ) {
     2032        psStringAppend(&diffQuery0, "\n AND diffExp.diff_id IS NULL");
     2033        psStringAppend(&diffQuery1, "\n AND n_diff = 0");
     2034    } else {
     2035        diffQuery0 = psStringCopy("\n");
     2036        diffQuery1 = psStringCopy("\n");
     2037    }
     2038
     2039    // find the distinct set of data_groups and filters
     2040    psString query = pxDataGet("difftool_definestackstack_part0.sql");
     2041    if (!query) {
     2042        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
     2043        return(false);
     2044    }
     2045    psTrace("difftool",1,query,stack2Query,stack1Query,diffQuery0,stack1Query);
     2046
     2047    if (!psDBTransaction(config->dbh)) {
     2048        psError(PS_ERR_UNKNOWN, false, "database error");
     2049        return(false);
     2050    }
     2051
     2052    if (!p_psDBRunQueryF(config->dbh, query, stack2Query, stack1Query, diffQuery0, stack1Query)) {
     2053        psError(PS_ERR_UNKNOWN, false, "database error");
     2054        psFree(query);
     2055        if (!psDBRollback(config->dbh)) {
     2056            psError(PS_ERR_UNKNOWN, false, "database error");
     2057        }
     2058        return false;
     2059    }
     2060
    20452061    psFree(query);
    2046     if (!psDBRollback(config->dbh)) {
    2047       psError(PS_ERR_UNKNOWN, false, "database error");
    2048     }
    2049     return false;
    2050   }
    2051 
    2052   psFree(query);
    2053 
    2054   psArray *output = p_psDBFetchResult(config->dbh);
    2055   if (!output) {
    2056     psErrorCode err = psErrorCodeLast();
    2057     switch (err) {
    2058     case PS_ERR_DB_CLIENT:
    2059       psError(PXTOOLS_ERR_SYS, false, "database error");
    2060       break;
    2061     case PS_ERR_DB_SERVER:
    2062       psError(PXTOOLS_ERR_PROG, false, "database error");
    2063       break;
    2064     default:
    2065       psError(PXTOOLS_ERR_PROG, false, "unknown error");
    2066       break;
    2067     }
    2068     if (!psDBRollback(config->dbh)) {
    2069       psError(PS_ERR_UNKNOWN, false, "database error");
    2070     }
    2071     return false;
    2072   }
    2073   if (!psArrayLength(output)) {
    2074     psTrace("difftool", PS_LOG_INFO, "no rows found");
     2062
     2063    psArray *output = p_psDBFetchResult(config->dbh);
     2064    if (!output) {
     2065        psErrorCode err = psErrorCodeLast();
     2066        switch (err) {
     2067          case PS_ERR_DB_CLIENT:
     2068            psError(PXTOOLS_ERR_SYS, false, "database error");
     2069            break;
     2070          case PS_ERR_DB_SERVER:
     2071            psError(PXTOOLS_ERR_PROG, false, "database error");
     2072            break;
     2073          default:
     2074            psError(PXTOOLS_ERR_PROG, false, "unknown error");
     2075            break;
     2076        }
     2077        if (!psDBRollback(config->dbh)) {
     2078            psError(PS_ERR_UNKNOWN, false, "database error");
     2079        }
     2080        return false;
     2081    }
     2082    if (!psArrayLength(output)) {
     2083        psTrace("difftool", PS_LOG_INFO, "no rows found");
     2084        psFree(output);
     2085        if (!psDBCommit(config->dbh)) {
     2086            psError(PS_ERR_UNKNOWN, false, "database error");
     2087            return false;
     2088        }
     2089        return true;
     2090    }
     2091
     2092    query = pxDataGet("difftool_definestackstack_part1.sql");
     2093    if (pretend) {
     2094        // negative simple so the default is true
     2095        if (!ippdbPrintMetadatas(stdout, output, "diffRunTemp", !simple)) {
     2096            psError(PS_ERR_UNKNOWN, false, "failed to print array");
     2097            psFree(output);
     2098            return false;
     2099        }
     2100        psFree(output);
     2101        return true;
     2102    }
     2103
     2104    psArray *list = psArrayAllocEmpty(16); // List of runs defined, to print
     2105    for (long i = 0; i < output->n; i++) {
     2106        psMetadata *row = output->data[i]; // Output row from query
     2107        bool mdok;                      // Status of MD lookup
     2108
     2109        // psMetadataPrint(stderr, row, 1);
     2110
     2111        psString tess_id = psMetadataLookupStr(&mdok,row,"INPUT_tess_id");
     2112        psString this_data_group = psMetadataLookupStr(&mdok,row,"INPUT_data_group");
     2113        psString this_dist_group = psMetadataLookupStr(&mdok,row,"INPUT_dist_group");
     2114        psString this_label = psMetadataLookupStr(&mdok,row,"INPUT_label");
     2115
     2116        psString this_stack1Query = psStringCopy(stack1Query);
     2117
     2118        psString thisWhere = psDBGenerateWhereConditionSQL(row,NULL);
     2119        psStringSubstitute(&thisWhere,"stackRun.","INPUT_");
     2120        psStringAppend(&this_stack1Query,"\n AND %s", thisWhere);
     2121        psFree(thisWhere);
     2122
     2123        psTrace("difftool",1, query,stack2Query,this_stack1Query,diffQuery1,this_stack1Query);
     2124        if (!psDBTransaction(config->dbh)) {
     2125            psError(PS_ERR_UNKNOWN, false, "database error");
     2126            return(false);
     2127        }
     2128
     2129        if (!p_psDBRunQueryF(config->dbh, query, stack2Query, this_stack1Query, diffQuery1, this_stack1Query)) {
     2130            psError(PS_ERR_UNKNOWN, false, "database error");
     2131            psFree(query);
     2132            if (!psDBRollback(config->dbh)) {
     2133                psError(PS_ERR_UNKNOWN, false, "database error");
     2134            }
     2135            return false;
     2136        }
     2137        psFree(this_stack1Query);
     2138
     2139        psArray *diff_id_output = p_psDBFetchResult(config->dbh);
     2140        if (!diff_id_output) {
     2141            psErrorCode err = psErrorCodeLast();
     2142            switch (err) {
     2143              case PS_ERR_DB_CLIENT:
     2144                psError(PXTOOLS_ERR_SYS, false, "database error");
     2145                break;
     2146              case PS_ERR_DB_SERVER:
     2147                psError(PXTOOLS_ERR_PROG, false, "database error");
     2148                break;
     2149              default:
     2150                psError(PXTOOLS_ERR_PROG, false, "unknown error");
     2151                break;
     2152            }
     2153            if (!psDBRollback(config->dbh)) {
     2154                psError(PS_ERR_UNKNOWN, false, "database error");
     2155            }
     2156            return false;
     2157        }
     2158        if (!psArrayLength(diff_id_output)) {
     2159            psTrace("difftool", PS_LOG_INFO, "no rows found");
     2160            psFree(diff_id_output);
     2161            if (!psDBCommit(config->dbh)) {
     2162                psError(PS_ERR_UNKNOWN, false, "database error");
     2163                return false;
     2164            }
     2165            return true;
     2166        }
     2167
     2168        // ok we've got one create the diffRun
     2169        diffRunRow *run = diffRunRowAlloc(
     2170            0,          // ID
     2171            "reg",      // state
     2172            workdir,
     2173            label ? label : this_label,
     2174            data_group ? data_group : this_data_group,
     2175            dist_group ? dist_group : this_dist_group,
     2176            reduction,
     2177            NULL,       // dvodb
     2178            registered,
     2179            tess_id,
     2180            bothways,               // bothways
     2181            false,                 // exposure
     2182            0,       // magicked
     2183            NULL, // software version
     2184            0,    // mask stat npix
     2185            NAN,    // static
     2186            NAN,    // dynamic
     2187            NAN,    // magic
     2188            NAN,    // advisory                             
     2189            IPP_DIFF_MODE_STACK_STACK, // diff_mode
     2190            note
     2191            );
     2192        // Commit to database
     2193        if (!diffRunInsertObject(config->dbh, run)) {
     2194            psError(PS_ERR_UNKNOWN, false, "database error");
     2195            psFree(run);
     2196            if (!psDBRollback(config->dbh)) {
     2197                psError(PS_ERR_UNKNOWN, false, "database error");
     2198            }
     2199            return false;
     2200        }
     2201        // diffRunPrintObject(stdout,run,1);
     2202        run->diff_id = psDBLastInsertID(config->dbh);
     2203
     2204        for (long j = 0; j < diff_id_output->n; j++) {
     2205            psMetadata *input_row = diff_id_output->data[j]; // Output row from query
     2206            bool mdok;
     2207            psString in_skycell_id  = psMetadataLookupStr(&mdok,input_row,"skycell_id");
     2208            psS64 in_input_stack_id = psMetadataLookupS64(&mdok,input_row,"stack_id");
     2209            psS64 in_template_stack_id = psMetadataLookupS64(&mdok,input_row,"max_stack_id");
     2210            psString in_tess_id = psMetadataLookupStr(&mdok,input_row,"tess_id");
     2211            psTrace("difftool",1,"%s %" PRId64 " %" PRId64 " %s\n",
     2212                    in_skycell_id, in_input_stack_id, in_template_stack_id, in_tess_id);
     2213            diffInputSkyfileRow *input = diffInputSkyfileRowAlloc(
     2214                run->diff_id,   // ID
     2215                in_skycell_id,
     2216                PS_MAX_S64, // warp1_id -> NULL
     2217                in_input_stack_id, // stack1
     2218                PS_MAX_S64, // warp2_id -> NULL
     2219                in_template_stack_id, // stack2
     2220                in_tess_id,
     2221                0 // diff_skyfile_id
     2222                );
     2223
     2224            // Commit to database the input
     2225            if (!diffInputSkyfileInsertObject(config->dbh, input)) {
     2226                psError(PS_ERR_UNKNOWN, false, "database error");
     2227                psFree(input);
     2228                if (!psDBRollback(config->dbh)) {
     2229                    psError(PS_ERR_UNKNOWN, false, "database error");
     2230                }
     2231                return false;
     2232            }
     2233
     2234/*       diffInputSkyfilePrintObject(stdout,input,1); */
     2235            psFree(input);
     2236        }
     2237
     2238        if (!setdiffRunState(config, run->diff_id, "new", false)) {
     2239            psError(PS_ERR_UNKNOWN, false, "failed to change diffRun.state for diff_id: %" PRId64, run->diff_id);
     2240            psFree(stack1Query);
     2241            psFree(stack2Query);
     2242            psFree(diffQuery0);
     2243            psFree(diffQuery1);
     2244            psFree(run);
     2245            psFree(list);
     2246            if (!psDBRollback(config->dbh)) {
     2247                psError(PS_ERR_UNKNOWN, false, "database error");
     2248            }
     2249            return false;
     2250        }
     2251        psArrayAdd(list, list->n, run);
     2252        psFree(run);
     2253    }
     2254
     2255    if (!psDBCommit(config->dbh)) {
     2256        psError(PS_ERR_UNKNOWN, false, "database error");
     2257        psFree(list);
     2258        return false;
     2259    }
     2260
     2261    if (!diffRunPrintObjects(stdout, list, !simple)) {
     2262        psError(PS_ERR_UNKNOWN, false, "failed to print object");
     2263        psFree(list);
     2264        return false;
     2265    }
     2266
     2267    psFree(query);
     2268    psFree(stack1Query);
     2269    psFree(stack2Query);
     2270    psFree(diffQuery0);
     2271    psFree(diffQuery1);
    20752272    psFree(output);
     2273    psFree(list);
     2274
    20762275    if (!psDBCommit(config->dbh)) {
    2077       psError(PS_ERR_UNKNOWN, false, "database error");
    2078       return false;
    2079     }
    2080     return true;
    2081   }
    2082 
    2083   query = pxDataGet("difftool_definestackstack_part1.sql");
    2084   if (pretend) {
    2085     // negative simple so the default is true
    2086     if (!ippdbPrintMetadatas(stdout, output, "diffRunTemp", !simple)) {
    2087       psError(PS_ERR_UNKNOWN, false, "failed to print array");
    2088       psFree(output);
    2089       return false;
    2090     }
    2091     psFree(output);
    2092     return true;
    2093   }
    2094 
    2095   psArray *list = psArrayAllocEmpty(16); // List of runs defined, to print
    2096   for (long i = 0; i < output->n; i++) {
    2097     psMetadata *row = output->data[i]; // Output row from query
    2098     bool mdok;                      // Status of MD lookup
    2099 
    2100     psString tess_id = psMetadataLookupStr(&mdok,row,"INPUT_tess_id");
    2101     psString this_data_group = psMetadataLookupStr(&mdok,row,"INPUT_data_group");
    2102     psString this_dist_group = psMetadataLookupStr(&mdok,row,"INPUT_dist_group");
    2103     psString this_label = psMetadataLookupStr(&mdok,row,"INPUT_label");
    2104 
    2105     psString this_stack1Query = psStringCopy(stack1Query);
    2106 
    2107     psString thisWhere = psDBGenerateWhereConditionSQL(row,NULL);
    2108     psStringSubstitute(&thisWhere,"stackRun.","INPUT_");
    2109     psStringAppend(&this_stack1Query,"\n AND %s", thisWhere);
    2110     psFree(thisWhere);
    2111 
    2112     psTrace("difftool",1, query,stack2Query,this_stack1Query,diffQuery,this_stack1Query);
    2113     if (!psDBTransaction(config->dbh)) {
    2114       psError(PS_ERR_UNKNOWN, false, "database error");
    2115       return(false);
    2116     }
    2117 
    2118     if (!p_psDBRunQueryF(config->dbh, query, stack2Query, this_stack1Query, diffQuery, this_stack1Query)) {
    2119       psError(PS_ERR_UNKNOWN, false, "database error");
    2120       psFree(query);
    2121       if (!psDBRollback(config->dbh)) {
    2122         psError(PS_ERR_UNKNOWN, false, "database error");
    2123       }
    2124       return false;
    2125     }
    2126     psFree(this_stack1Query);
    2127 
    2128     psArray *diff_id_output = p_psDBFetchResult(config->dbh);
    2129     if (!diff_id_output) {
    2130       psErrorCode err = psErrorCodeLast();
    2131       switch (err) {
    2132       case PS_ERR_DB_CLIENT:
    2133         psError(PXTOOLS_ERR_SYS, false, "database error");
    2134         break;
    2135       case PS_ERR_DB_SERVER:
    2136         psError(PXTOOLS_ERR_PROG, false, "database error");
    2137         break;
    2138       default:
    2139         psError(PXTOOLS_ERR_PROG, false, "unknown error");
    2140         break;
    2141       }
    2142       if (!psDBRollback(config->dbh)) {
    2143         psError(PS_ERR_UNKNOWN, false, "database error");
    2144       }
    2145       return false;
    2146     }
    2147     if (!psArrayLength(diff_id_output)) {
    2148       psTrace("difftool", PS_LOG_INFO, "no rows found");
    2149       psFree(diff_id_output);
    2150       if (!psDBCommit(config->dbh)) {
    2151         psError(PS_ERR_UNKNOWN, false, "database error");
    2152         return false;
    2153       }
    2154       return true;
    2155     }
    2156 
    2157     // ok we've got one create the diffRun
    2158     diffRunRow *run = diffRunRowAlloc(
    2159                                       0,          // ID
    2160                                       "reg",      // state
    2161                                       workdir,
    2162                                       label ? label : this_label,
    2163                                       data_group ? data_group : this_data_group,
    2164                                       dist_group ? dist_group : this_dist_group,
    2165                                       reduction,
    2166                                       NULL,       // dvodb
    2167                                       registered,
    2168                                       tess_id,
    2169                                       false,                 // bothways
    2170                                       false,                 // exposure
    2171                                       0,       // magicked
    2172                                       NULL, // software version
    2173                                       0,    // mask stat npix
    2174                                       NAN,    // static
    2175                                       NAN,    // dynamic
    2176                                       NAN,    // magic
    2177                                       NAN,    // advisory                                   
    2178                                       IPP_DIFF_MODE_STACK_STACK, // diff_mode
    2179                                       note
    2180                                       );
    2181     // Commit to database
    2182     if (!diffRunInsertObject(config->dbh, run)) {
    2183       psError(PS_ERR_UNKNOWN, false, "database error");
    2184       psFree(run);
    2185       if (!psDBRollback(config->dbh)) {
    2186         psError(PS_ERR_UNKNOWN, false, "database error");
    2187       }
    2188       return false;
    2189     }
    2190 /*     diffRunPrintObject(stdout,run,1); */
    2191     run->diff_id = psDBLastInsertID(config->dbh);
    2192     for (long j = 0; j < diff_id_output->n; j++) {
    2193       psMetadata *input_row = diff_id_output->data[j]; // Output row from query
    2194       bool mdok;
    2195       psString in_skycell_id  = psMetadataLookupStr(&mdok,input_row,"skycell_id");
    2196       psS64 in_input_stack_id = psMetadataLookupS64(&mdok,input_row,"stack_id");
    2197       psS64 in_template_stack_id = psMetadataLookupS64(&mdok,input_row,"max_stack_id");
    2198       psString in_tess_id = psMetadataLookupStr(&mdok,input_row,"tess_id");
    2199       psTrace("difftool",1,"%s %" PRId64 " %" PRId64 " %s\n",
    2200               in_skycell_id, in_input_stack_id, in_template_stack_id, in_tess_id);
    2201       diffInputSkyfileRow *input = diffInputSkyfileRowAlloc(
    2202                                                             run->diff_id,   // ID
    2203                                                             in_skycell_id,
    2204                                                             PS_MAX_S64, // warp1_id -> NULL
    2205                                                             in_input_stack_id, // stack1
    2206                                                             PS_MAX_S64, // warp2_id -> NULL
    2207                                                             in_template_stack_id, // stack2
    2208                                                             in_tess_id,
    2209                                                             0 // diff_skyfile_id
    2210                                                             );
    2211       // Commit to database the input
    2212       if (!diffInputSkyfileInsertObject(config->dbh, input)) {
    2213         psError(PS_ERR_UNKNOWN, false, "database error");
    2214         psFree(input);
    2215         if (!psDBRollback(config->dbh)) {
    2216           psError(PS_ERR_UNKNOWN, false, "database error");
    2217         }
    2218         return false;
    2219       }
    2220 
    2221 /*       diffInputSkyfilePrintObject(stdout,input,1); */
    2222       psFree(input);
    2223     }
    2224 
    2225     if (!setdiffRunState(config, run->diff_id, "new", false)) {
    2226         psError(PS_ERR_UNKNOWN, false, "failed to change diffRun.state for diff_id: %" PRId64, run->diff_id);
    2227         psFree(stack1Query);
    2228         psFree(stack2Query);
    2229         psFree(diffQuery);
    2230         psFree(run);
    2231         psFree(list);
    2232         if (!psDBRollback(config->dbh)) {
    2233             psError(PS_ERR_UNKNOWN, false, "database error");
    2234         }
    2235         return false;
    2236     }
    2237     psArrayAdd(list, list->n, run);
    2238     psFree(run);
    2239   }
    2240 
    2241   if (!psDBCommit(config->dbh)) {
    2242     psError(PS_ERR_UNKNOWN, false, "database error");
    2243     psFree(list);
    2244     return false;
    2245   }
    2246 
    2247   if (!diffRunPrintObjects(stdout, list, !simple)) {
    2248     psError(PS_ERR_UNKNOWN, false, "failed to print object");
    2249     psFree(list);
    2250     return false;
    2251   }
    2252 
    2253   psFree(query);
    2254   psFree(stack1Query);
    2255   psFree(stack2Query);
    2256   psFree(diffQuery);
    2257   psFree(output);
    2258   psFree(list);
    2259 
    2260     if (!psDBCommit(config->dbh)) {
    2261         psError(PS_ERR_UNKNOWN, false, "database error");
    2262         psFree(list);
    2263         return false;
    2264     }
    2265 
    2266   return(true);
     2276        psError(PS_ERR_UNKNOWN, false, "database error");
     2277        psFree(list);
     2278        return false;
     2279    }
     2280
     2281    return(true);
    22672282}
    22682283
  • trunk/ippTools/src/difftoolConfig.c

    r29416 r29553  
    249249    psMetadataAddStr(definewarpstackArgs, PS_LIST_TAIL, "-skycell_id", 0, "search by skycell ID", NULL);
    250250    psMetadataAddStr(definewarpstackArgs, PS_LIST_TAIL, "-tess_id", 0, "search by tess ID", NULL);
     251    psMetadataAddBool(definewarpstackArgs, PS_LIST_TAIL, "-bothways",  0,          "do the subtraction both ways?", false);
    251252    psMetadataAddStr(definewarpstackArgs, PS_LIST_TAIL, "-filter", 0, "search by filter", NULL);
    252253    psMetadataAddStr(definewarpstackArgs, PS_LIST_TAIL, "-comment", 0, "search by comment (LIKE)", NULL);
     
    273274    psMetadataAddS64(definewarpwarpArgs, PS_LIST_TAIL, "-warp_id", 0, "search by warp ID", 0);
    274275    psMetadataAddS64(definewarpwarpArgs, PS_LIST_TAIL, "-exp_id", 0, "search by exposure ID", 0);
     276    psMetadataAddBool(definewarpwarpArgs, PS_LIST_TAIL, "-not-bothways",  0, "only do the single-direction subtraction?", false);
    275277    psMetadataAddS64(definewarpwarpArgs, PS_LIST_TAIL,  "-template_exp_id",  0,  "search by template exposure ID", 0);
    276278    psMetadataAddStr(definewarpwarpArgs, PS_LIST_TAIL, "-filter", 0, "search by filter", NULL);
     
    330332    psMetadataAddStr(definestackstackArgs, PS_LIST_TAIL, "-skycell_id", 0, "search by skycell ID", NULL);
    331333    psMetadataAddStr(definestackstackArgs, PS_LIST_TAIL, "-tess_id", 0, "search by tess ID", NULL);
     334    psMetadataAddBool(definestackstackArgs, PS_LIST_TAIL, "-bothways",  0,          "do the subtraction both ways?", false);
    332335    psMetadataAddStr(definestackstackArgs, PS_LIST_TAIL, "-filter", 0, "search by filter", NULL);
    333336    psMetadataAddStr(definestackstackArgs, PS_LIST_TAIL, "-input_label", 0, "search by stack label for input", NULL);
  • trunk/ippTools/src/magictool.c

    r29495 r29553  
    13961396    psStringAppend(&query, "UPDATE magicRun SET state = '%s'", state);
    13971397    if (setString) {
    1398         psStringAppend(&query, setString);
     1398        psStringAppend(&query, "%s", setString);
    13991399    }
    14001400    psStringAppend(&query, " WHERE magic_id = %" PRId64, magic_id);;
Note: See TracChangeset for help on using the changeset viewer.