Changeset 29324
- Timestamp:
- Oct 5, 2010, 2:50:18 PM (16 years ago)
- Location:
- branches/eam_branches/ipp-20100823/ippTools
- Files:
-
- 3 edited
-
share/difftool_definestackstack_part1.sql (modified) (3 diffs)
-
src/difftool.c (modified) (6 diffs)
-
src/difftoolConfig.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/ipp-20100823/ippTools/share/difftool_definestackstack_part1.sql
r26958 r29324 1 SELECT 1 SELECT distinct 2 2 stackRun.stack_id, 3 3 stackRun.data_group, … … 9 9 template.max_stack_id, 10 10 template.template_label, 11 diffExp.diff_id11 count(diffExp.diff_id) as n_diff 12 12 FROM stackRun JOIN stackSumSkyfile USING(stack_id) 13 13 JOIN ( … … 45 45 -- diff where hook %s 46 46 -- input where hook again %s 47 group 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 47 56 ORDER BY stackRun.data_group,stackRun.filter,stackRun.skycell_id -
branches/eam_branches/ipp-20100823/ippTools/src/difftool.c
r28375 r29324 1237 1237 PXOPT_COPY_STR(config->args, stackWhere, "-stack_label", "stackRun.label", "=="); 1238 1238 1239 PXOPT_LOOKUP_BOOL(bothways, config->args, "-bothways", false); 1240 1239 1241 PXOPT_LOOKUP_STR(workdir, config->args, "-set_workdir", true, false); // required option 1240 1242 PXOPT_LOOKUP_STR(reduction, config->args, "-set_reduction", false, false); // option … … 1498 1500 // ok we've got one create the diffRun 1499 1501 diffRunRow *run = diffRunRowAlloc( 1500 0, // ID1501 "reg", // state1502 0, // ID 1503 "reg", // state 1502 1504 workdir, 1503 1505 label, … … 1505 1507 dist_group, 1506 1508 reduction, 1507 NULL, // dvodb1509 NULL, // dvodb 1508 1510 registered, 1509 1511 tess_id, 1510 false, // bothways1511 true, // exposure1512 0, // magicked1513 NULL, // software version1514 0, // mask stat npix1515 NAN, // static1516 NAN, // dynamic1517 NAN, // magic1518 NAN, // advisory1512 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 1519 1521 IPP_DIFF_MODE_WARP_STACK, 1520 1522 note … … 1647 1649 PXOPT_COPY_STR(config->args, selectWhere, "-comment", "inputRawExp.comment", "LIKE"); 1648 1650 1651 PXOPT_LOOKUP_BOOL(not_bothways, config->args, "-not-bothways", false); 1652 1649 1653 // Haversine formula for great circle distance 1650 1654 PXOPT_COPY_F32(config->args, selectWhere, "-distance", … … 1866 1870 registered, 1867 1871 tess_id, 1868 true, // bothways1872 !not_bothways, // bothways (default is true, ie not_bothways is false) 1869 1873 true, // exposure 1870 1874 false, // magicked … … 1949 1953 1950 1954 static 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 2032 2048 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); 2062 2259 psFree(output); 2260 psFree(list); 2261 2063 2262 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); 2254 2269 } 2255 2270 -
branches/eam_branches/ipp-20100823/ippTools/src/difftoolConfig.c
r28375 r29324 222 222 psMetadataAddStr(definewarpstackArgs, PS_LIST_TAIL, "-skycell_id", 0, "search by skycell ID", NULL); 223 223 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); 224 225 psMetadataAddStr(definewarpstackArgs, PS_LIST_TAIL, "-filter", 0, "search by filter", NULL); 225 226 psMetadataAddStr(definewarpstackArgs, PS_LIST_TAIL, "-comment", 0, "search by comment (LIKE)", NULL); … … 245 246 psMetadataAddS64(definewarpwarpArgs, PS_LIST_TAIL, "-warp_id", 0, "search by warp ID", 0); 246 247 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); 247 249 psMetadataAddStr(definewarpwarpArgs, PS_LIST_TAIL, "-filter", 0, "search by filter", NULL); 248 250 psMetadataAddF32(definewarpwarpArgs, PS_LIST_TAIL, "-distance", 0, "limit distance between input and template (deg)", NAN); … … 299 301 psMetadataAddStr(definestackstackArgs, PS_LIST_TAIL, "-skycell_id", 0, "search by skycell ID", NULL); 300 302 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); 301 304 psMetadataAddStr(definestackstackArgs, PS_LIST_TAIL, "-filter", 0, "search by filter", NULL); 302 305 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.
