IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 24136


Ignore:
Timestamp:
May 11, 2009, 4:38:18 PM (17 years ago)
Author:
Paul Price
Message:

Make magictool -definebyquery work with inverse subtractions (A-B and B-A). Small change to DB schema.

Location:
branches/pap_magic
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • branches/pap_magic/dbconfig/changes.txt

    r24120 r24136  
    11111111UPDATE diffRun, diffInputSkyfile SET diffRun.exposure = 1 WHERE diffRun.diff_id = diffInputSkyfile.diff_id and diffInputSkyfile.warp1 IS NOT NULL;
    11121112ALTER TABLE stackRun ADD KEY(label);
     1113
     1114ALTER TABLE magicRun ADD COLUMN inverse TINYINT NOT NULL DEFAULT 0 AFTER diff_id;
  • branches/pap_magic/dbconfig/magic.md

    r23387 r24136  
    66    exp_id      S64         0       # Key
    77    diff_id     S64         0       # Key
     8    inverse     BOOL        FALSE           
    89    state       STR         64      # Key
    910    workdir     STR         255
  • branches/pap_magic/ippTools/share/magictool_definebyquery_select.sql

    r20973 r24136  
    11-- Get a list of exposures on which magic may be performed
    2 SELECT 
     2SELECT
    33    exp_id,
    4     MAX(diffRun.diff_id) AS diff_id
    5 FROM diffRun
    6 JOIN rawExp USING(exp_id)
     4    MAX(diffWarps.diff_id) AS diff_id,
     5    -- The following trick pulls out the 'inverse' value for the maximum diff_id
     6    CONVERT(SUBSTRING_INDEX(GROUP_CONCAT(diffWarps.inverse ORDER BY diffWarps.diff_id), ',', 1), UNSIGNED) AS inverse
     7FROM (
     8    -- Forward diffs
     9    SELECT
     10        diffRun.diff_id,
     11        warp1 AS warp_id,
     12        0 AS inverse
     13    FROM diffRun
     14    JOIN diffInputSkyfile USING(diff_id)
     15    WHERE diffInputSkyfile.warp1 IS NOT NULL
     16        AND diffRun.exposure = 1
     17    -- WHERE hook %s
     18    UNION
     19    -- Backward diffs
     20    SELECT
     21        diffRun.diff_id,
     22        warp2 AS warp_id,
     23        1 AS inverse
     24    FROM diffRun
     25    JOIN diffInputSkyfile USING(diff_id)
     26    WHERE diffInputSkyfile.warp2 IS NOT NULL
     27        AND diffRun.exposure = 1
     28        AND diffRun.bothways = 1
     29    -- WHERE hook %s
     30    ) AS diffWarps
     31JOIN warpRun USING(warp_id)
     32JOIN fakeRun USING(fake_id)
     33JOIN camRun USING(cam_id)
     34JOIN chipRun USING(chip_id)
    735LEFT JOIN magicRun USING(exp_id)
    836-- WHERE hook %s
  • branches/pap_magic/ippTools/share/pxadmin_create_tables.sql

    r24132 r24136  
    10091009        exp_id BIGINT,
    10101010        diff_id BIGINT,
     1011        inverse TINYINT NOT NULL DEFAULT 0,
    10111012        state VARCHAR(64),
    10121013        workdir VARCHAR(255),
  • branches/pap_magic/ippTools/src/magictool.c

    r23970 r24136  
    127127    PXOPT_LOOKUP_TIME(registered, config->args, "-registered", false, false);
    128128    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
    129 
    130     psMetadata *where = psMetadataAlloc();
    131     PXOPT_COPY_S64(config->args, where, "-exp_id", "exp_id", "==");
    132     PXOPT_COPY_STR(config->args, where, "-diff_label", "diffRun.label", "==");
    133 
     129    PXOPT_LOOKUP_BOOL(pretend, config->args, "-pretend", false);
     130
     131    psMetadata *diffWhere = psMetadataAlloc(); // WHERE conditions for diffRuns
     132    PXOPT_COPY_STR(config->args, diffWhere, "-diff_label", "diffRun.label", "==");
     133
     134    psMetadata *queryWhere = psMetadataAlloc(); // WHERE conditions for everything else
     135    PXOPT_COPY_S64(config->args, queryWhere, "-exp_id", "exp_id", "==");
    134136
    135137    // Get list of exposures ready to magic
     
    146148        PXOPT_LOOKUP_BOOL(rerun, config->args, "-rerun", false);
    147149
    148         psString queryWhere = NULL;     // WHERE conditions for entire query
     150        psString diffWhereStr = NULL;   // WHERE conditions for diffRuns
     151        psString queryWhereStr = NULL;  // WHERE conditions for entire query
    149152        if (!available) {
    150             psStringAppend(&queryWhere, " \nWHERE diffRun.state = 'full'");
    151         } else {
    152             // what if no skycells for the diff run completed?
    153         }
     153            psStringAppend(&diffWhereStr, "\nAND diffRun.state = 'full'");
     154        }
     155        // what if no skycells for the diff run completed?
     156
    154157        if (!rerun) {
    155             const char *newWhere = " magic_id IS NULL"; // String to add
    156             if (queryWhere) {
    157                 psStringAppend(&queryWhere, " AND %s", newWhere);
    158             } else {
    159                 psStringAppend(&queryWhere, "\nWHERE %s", newWhere);
    160             }
    161         }
     158            psStringAppend(&queryWhereStr, "\n%s magic_id IS NULL", queryWhereStr ? "AND" : "WHERE");
     159        }
     160
    162161        // now add the user specified qualifiers
    163         if (psListLength(where->list)) {
    164             psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
    165             psStringAppend(&queryWhere, "\n%s %s", queryWhere == NULL ? "WHERE" : "AND", whereClause);
     162        if (psListLength(diffWhere->list)) {
     163            psString whereClause = psDBGenerateWhereConditionSQL(diffWhere, NULL);
     164            psStringAppend(&diffWhereStr, "\nAND %s", whereClause);
    166165            psFree(whereClause);
    167166        }
    168         psFree(where);
    169         if (!queryWhere) {
    170             psStringAppend(&queryWhere, " ");
    171         }
    172 
    173         if (!p_psDBRunQueryF(config->dbh, query, queryWhere)) {
     167        if (psListLength(queryWhere->list)) {
     168            psString whereClause = psDBGenerateWhereConditionSQL(queryWhere, NULL);
     169            psStringAppend(&queryWhereStr, "\n%s %s", queryWhereStr ? "AND" : "WHERE", whereClause);
     170            psFree(whereClause);
     171        }
     172        psFree(diffWhere);
     173        psFree(queryWhere);
     174
     175        // Ensure the WHERE strings have something
     176        if (!diffWhereStr) {
     177            diffWhereStr = psStringCopy("");
     178        }
     179        if (!queryWhereStr) {
     180            queryWhereStr = psStringCopy("");
     181        }
     182
     183        if (!p_psDBRunQueryF(config->dbh, query, diffWhereStr, diffWhereStr, queryWhereStr)) {
    174184            psError(PS_ERR_UNKNOWN, false, "database error");
    175             psFree(queryWhere);
     185            psFree(diffWhereStr);
     186            psFree(queryWhereStr);
    176187            psFree(query);
    177188            return false;
    178189        }
    179         psFree(queryWhere);
     190        psFree(diffWhereStr);
     191        psFree(queryWhereStr);
    180192        psFree(query);
    181193    }
     
    201213    }
    202214
     215
     216    if (pretend) {
     217        // negative simple so the default is true
     218        if (!ippdbPrintMetadatas(stdout, output, "diffRun", !simple)) {
     219            psError(PS_ERR_UNKNOWN, false, "failed to print array");
     220            psFree(output);
     221            return false;
     222        }
     223        psFree(output);
     224        return true;
     225    }
     226
     227
    203228    // Parse the list of exposures ready to magic
    204 
    205229    if (!psDBTransaction(config->dbh)) {
    206230        psError(PS_ERR_UNKNOWN, false, "database error");
     
    215239        psS64 exp_id = psMetadataLookupS64(NULL, row, "exp_id"); // Exposure identifier
    216240        psS64 diff_id = psMetadataLookupS64(NULL, row, "diff_id"); // difference identifier
     241        bool inverse = psMetadataLookupU64(NULL, row, "inverse"); // Inverse subtraction? Note types!
    217242
    218243        // create a new magicRun for this group
    219         magicRunRow *run = magicRunRowAlloc(0, exp_id, diff_id, "new", workdir, "dirty", label, dvodb, registered, 0);
     244        magicRunRow *run = magicRunRowAlloc(0, exp_id, diff_id, inverse, "new", workdir, "dirty", label,
     245                                            dvodb, registered, 0);
    220246        if (!run) {
    221247            psAbort("failed to alloc magicRun object");
     
    296322
    297323    // optional
     324    PXOPT_LOOKUP_BOOL(inverse, config->args, "-inverse", false);
    298325    PXOPT_LOOKUP_STR(label, config->args, "-label", false, false);
    299326    PXOPT_LOOKUP_STR(dvodb, config->args, "-dvodb", false, false);
     
    305332            exp_id,
    306333            diff_id ? diff_id : PS_MAX_S64,
     334            inverse,
    307335            "reg",      // state
    308336            workdir,
  • branches/pap_magic/ippTools/src/magictoolConfig.c

    r23969 r24136  
    5858    psMetadataAddBool(definebyqueryArgs, PS_LIST_TAIL, "-rerun", 0, "generate new run even if existing?", false);
    5959    psMetadataAddBool(definebyqueryArgs, PS_LIST_TAIL, "-simple", 0, "use the simple output format", false);
     60    psMetadataAddBool(definebyqueryArgs, PS_LIST_TAIL, "-pretend", 0, "list results but do not queue", false);
    6061
    6162    // -definerun
     
    6566    // following argument is for compatability
    6667    psMetadataAddS64(definerunArgs, PS_LIST_TAIL, "-diff_id", 0, "define diff_id", 0);
     68    psMetadataAddBool(definerunArgs, PS_LIST_TAIL, "-inverse", 0, "use the inverse subtraction?", false);
    6769    psMetadataAddStr(definerunArgs, PS_LIST_TAIL, "-label", 0, "define label", NULL);
    6870    psMetadataAddStr(definerunArgs, PS_LIST_TAIL, "-dvodb", 0, "define dvodb", NULL);
Note: See TracChangeset for help on using the changeset viewer.