IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 29324


Ignore:
Timestamp:
Oct 5, 2010, 2:50:18 PM (16 years ago)
Author:
eugene
Message:

add bothways options to warpstack and stackstack (default is bothways = false); add not-bothways option to warpwarp (default is bothways = true); fix stackstack diff query to correctly handle the rerun case with more than one rerun

Location:
branches/eam_branches/ipp-20100823/ippTools
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ipp-20100823/ippTools/share/difftool_definestackstack_part1.sql

    r26958 r29324  
    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
  • branches/eam_branches/ipp-20100823/ippTools/src/difftool.c

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

    r28375 r29324  
    222222    psMetadataAddStr(definewarpstackArgs, PS_LIST_TAIL, "-skycell_id", 0, "search by skycell ID", NULL);
    223223    psMetadataAddStr(definewarpstackArgs, PS_LIST_TAIL, "-tess_id", 0, "search by tess ID", NULL);
     224    psMetadataAddBool(definewarpstackArgs, PS_LIST_TAIL, "-bothways",  0,          "do the subtraction both ways?", false);
    224225    psMetadataAddStr(definewarpstackArgs, PS_LIST_TAIL, "-filter", 0, "search by filter", NULL);
    225226    psMetadataAddStr(definewarpstackArgs, PS_LIST_TAIL, "-comment", 0, "search by comment (LIKE)", NULL);
     
    245246    psMetadataAddS64(definewarpwarpArgs, PS_LIST_TAIL, "-warp_id", 0, "search by warp ID", 0);
    246247    psMetadataAddS64(definewarpwarpArgs, PS_LIST_TAIL, "-exp_id", 0, "search by exposure ID", 0);
     248    psMetadataAddBool(definewarpwarpArgs, PS_LIST_TAIL, "-not-bothways",  0, "only do the single-direction subtraction?", false);
    247249    psMetadataAddStr(definewarpwarpArgs, PS_LIST_TAIL, "-filter", 0, "search by filter", NULL);
    248250    psMetadataAddF32(definewarpwarpArgs, PS_LIST_TAIL, "-distance", 0, "limit distance between input and template (deg)", NAN);
     
    299301    psMetadataAddStr(definestackstackArgs, PS_LIST_TAIL, "-skycell_id", 0, "search by skycell ID", NULL);
    300302    psMetadataAddStr(definestackstackArgs, PS_LIST_TAIL, "-tess_id", 0, "search by tess ID", NULL);
     303    psMetadataAddBool(definestackstackArgs, PS_LIST_TAIL, "-bothways",  0,          "do the subtraction both ways?", false);
    301304    psMetadataAddStr(definestackstackArgs, PS_LIST_TAIL, "-filter", 0, "search by filter", NULL);
    302305    psMetadataAddStr(definestackstackArgs, PS_LIST_TAIL, "-input_label", 0, "search by stack label for input", NULL);
Note: See TracChangeset for help on using the changeset viewer.