IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 9942


Ignore:
Timestamp:
Nov 9, 2006, 3:00:07 PM (20 years ago)
Author:
jhoblitt
Message:

stub out -definebydetrun as a copy of -definebyquery

Location:
trunk/ippTools/src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/ippTools/src/dettool.c

    r9940 r9942  
    3333static bool definebytagMode(pxConfig *config);
    3434static bool definebyqueryMode(pxConfig *config);
     35static bool definebydetrunMode(pxConfig *config);
    3536static bool runsMode(pxConfig *config);
    3637static bool inputMode(pxConfig *config);
     
    9798        MODECASE(DETTOOL_MODE_DEFINEBYTAG,      definebytagMode);
    9899        MODECASE(DETTOOL_MODE_DEFINEBYQUERY,    definebyqueryMode);
     100        MODECASE(DETTOOL_MODE_DEFINEBYDETRUN,   definebydetrunMode);
    99101        MODECASE(DETTOOL_MODE_RUNS,             runsMode);
    100102        MODECASE(DETTOOL_MODE_INPUT,            inputMode);
     
    504506
    505507static bool definebyqueryMode(pxConfig *config)
     508{
     509    bool status     = false;
     510
     511    PS_ASSERT_PTR_NON_NULL(config, false);
     512
     513    // what type of detRun is this?
     514    // det_type is required
     515    psString det_type = psMetadataLookupStr(&status, config->args, "-det_type");
     516    if (!status) {
     517        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -det_type");
     518        return false;
     519    }
     520    if (!det_type) {
     521        psError(PS_ERR_UNKNOWN, true, "-det_type is required");
     522        return false;
     523    }
     524
     525    psMetadata *where = psMetadataAlloc();
     526    {
     527        bool status = false;
     528        psString exp_type = psMetadataLookupStr(&status, config->args, "-exp_type");        if (!status) {
     529            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -exp_type");
     530            return false;
     531        }
     532        if (exp_type) {
     533            if (!psMetadataAddStr(where, PS_LIST_TAIL, "exp_type", 0, "==", exp_type)) {
     534                psError(PS_ERR_UNKNOWN, false, "failed to add item exp_type");
     535                psFree(where);
     536                return false;
     537            }
     538        }
     539        // map -inst -> camera
     540        psString camera = psMetadataLookupStr(&status, config->args, "-inst");
     541        if (!status) {
     542            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -inst");
     543            return false;
     544        }
     545        if (camera) {
     546            if (!psMetadataAddStr(where, PS_LIST_TAIL, "camera", 0, "==", camera)) {
     547                psError(PS_ERR_UNKNOWN, false, "failed to add item inst");
     548                psFree(where);
     549                return false;
     550            }
     551        }
     552        psString telescope = psMetadataLookupStr(&status, config->args, "-telescope");        if (!status) {
     553            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -telescope");
     554            return false;
     555        }
     556        if (telescope) {
     557            if (!psMetadataAddStr(where, PS_LIST_TAIL, "telescope", 0, "==", telescope)) {
     558                psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");
     559                psFree(where);
     560                return false;
     561            }
     562        }
     563        psString filter = psMetadataLookupStr(&status, config->args, "-filter");
     564        if (!status) {
     565            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -filter");
     566            return false;
     567        }
     568        if (filter) {
     569            if (!psMetadataAddStr(where, PS_LIST_TAIL, "filter", 0, "==", filter)) {
     570                psError(PS_ERR_UNKNOWN, false, "failed to add item filter");
     571                psFree(where);
     572                return false;
     573            }
     574        }
     575        psString uri = psMetadataLookupStr(&status, config->args, "-uri");
     576        if (!status) {
     577            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -filter");
     578            return false;
     579        }
     580        if (uri) {
     581            if (!psMetadataAddStr(where, PS_LIST_TAIL, "uri", 0, "==", uri)) {
     582                psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
     583                psFree(where);
     584                return false;
     585            }
     586        }
     587    }
     588    if (!psListLength(where->list)) {
     589        psFree(where);
     590        where = NULL;
     591    }
     592
     593    // there is some namespace overlap between the names of the fields we'd
     594    // like to search by to setup a detrun and the names of the fields we'd
     595    // like to assign values to so I've seperated them but prepending set- to
     596    // the assigned values
     597
     598    // optional
     599    psString exp_type = psMetadataLookupStr(&status, config->args, "-set_exp_type");
     600    if (!status) {
     601        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -set_exp_type");
     602        return false;
     603    }
     604
     605    psString filter = psMetadataLookupStr(&status, config->args, "-set_filter");
     606    if (!status) {
     607        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -set_filter");
     608        return false;
     609    }
     610
     611    psF32 airmass = psMetadataLookupF32(&status, config->args, "-set_airmass");
     612    if (!status) {
     613        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -set_airmass");
     614        return false;
     615    }
     616
     617    psF32 exp_time = psMetadataLookupF32(&status, config->args, "-set_exp_time");
     618    if (!status) {
     619        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -set_exp_time");
     620        return false;
     621    }
     622
     623    psF32 ccd_temp = psMetadataLookupF32(&status, config->args, "-set_ccd_temp");
     624    if (!status) {
     625        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -set_ccd_temp");
     626        return false;
     627    }
     628
     629    psF64 posang = psMetadataLookupF32(&status, config->args, "-set_posang");
     630    if (!status) {
     631        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -set_posang");
     632        return false;
     633    }
     634
     635    psString object = psMetadataLookupStr(&status, config->args, "-set_object");
     636    if (!status) {
     637        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -set_object");
     638        return false;
     639    }
     640    psTime *registered = NULL;
     641    {
     642        psString registeredStr = psMetadataLookupStr(&status, config->args, "-set_registered");
     643        if (!status) {
     644            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -set_registered");
     645            return false;
     646        }
     647        // pass through NULL as this is an optional field
     648        if (registeredStr) {
     649            registered = psTimeFromISO(registeredStr, PS_TIME_UTC);
     650        } else {
     651            registered = NULL;
     652        }
     653    }
     654
     655    psTime *use_begin = NULL;
     656    {
     657        psString use_beginStr = psMetadataLookupStr(&status, config->args, "-set_use_begin");
     658        if (!status) {
     659            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -set_use_begin");
     660            return false;
     661        }
     662        // pass through NULL as this is an optional field
     663        if (use_beginStr) {
     664            use_begin = psTimeFromISO(use_beginStr, PS_TIME_UTC);
     665        } else {
     666            use_begin = NULL;
     667        }
     668    }
     669
     670    psTime *use_end = NULL;
     671    {
     672        psString use_endStr = psMetadataLookupStr(&status, config->args, "-set_use_end");
     673        if (!status) {
     674            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -set_use_end");
     675            return false;
     676        }
     677        // pass through NULL as this is an optional field
     678        if (use_endStr) {
     679            use_end = psTimeFromISO(use_endStr, PS_TIME_UTC);
     680        } else {
     681            use_end = NULL;
     682        }
     683    }
     684
     685    // search for rawDetrendExps with the specified options
     686    psArray *detrendExps = rawDetrendExpSelectRowObjects(config->dbh, where, 0);
     687    psFree(where);
     688    // make sure that we found at least one rawDetrendExp
     689    if (!detrendExps) {
     690        psError(PS_ERR_UNKNOWN, false, "no rawDetrendExp rows found");
     691        return false;
     692    }
     693
     694    // start a transaction so we don't end up with orphaned det_ids
     695    if (!psDBTransaction(config->dbh)) {
     696        psError(PS_ERR_UNKNOWN, false, "database error");
     697        psFree(detrendExps);
     698        return false;
     699    }
     700
     701    // the first iteration is always 0
     702    // XXX det_id
     703    detRunInsert(config->dbh,
     704            0,
     705            0,
     706            det_type,
     707            "run",
     708            exp_type,
     709            filter,
     710            airmass,
     711            exp_time,
     712            ccd_temp,
     713            posang,
     714            object,
     715            registered,
     716            use_begin,
     717            use_end
     718        );
     719    psFree(registered);
     720    psFree(use_begin);
     721    psFree(use_end);
     722    long det_id = psDBLastInsertID(config->dbh);
     723
     724    // create new detInputExp row(s) from the rawDetrendExp row(s)
     725    psArray *inputExps = psArrayAllocEmpty(psArrayLength(detrendExps));
     726    for (long i = 0; i < psArrayLength(detrendExps); i++) {
     727        detInputExpRow *inputExp = rawDetrenTodetInputExpRow(
     728            detrendExps->data[i],
     729            det_id,
     730            0 // the first iteration is explicitly 0
     731        );
     732        psArrayAdd(inputExps, 0, inputExp);
     733        psFree(inputExp);
     734    }
     735
     736    psFree(detrendExps);
     737
     738    // insert detInputExp objects into the database
     739    if (!detInputExpInsertObjects(config->dbh, inputExps)) {
     740        psError(PS_ERR_UNKNOWN, false, "database error");
     741        // rollback
     742        if (!psDBRollback(config->dbh)) {
     743            psError(PS_ERR_UNKNOWN, false, "database error");
     744        }
     745        psFree(inputExps);
     746        return false;
     747    }
     748    psFree(inputExps);
     749
     750    // point of no return for det_id creation
     751    if (!psDBCommit(config->dbh)) {
     752        psError(PS_ERR_UNKNOWN, false, "database error");
     753        return false;
     754    }
     755
     756    bool simple = false;
     757    {
     758        bool status = false;
     759        simple = psMetadataLookupBool(&status, config->args, "-simple");
     760        if (!status) {
     761            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -simple");
     762            return false;
     763        }
     764    }
     765
     766    // print the new det_id
     767    psArray *detRuns = NULL;
     768    {
     769        psMetadata *where = psMetadataAlloc();
     770        psMetadataAddS32(where, PS_LIST_TAIL, "det_id", 0, "==", det_id);
     771        detRuns = psDBSelectRows(config->dbh, "detRun", where, 0);
     772        psFree(where);
     773    }
     774    if (!detRuns) {
     775        psError(PS_ERR_UNKNOWN, false, "can't find the detRun we just created");
     776        return false;
     777    }
     778    // sanity check results
     779    if (psArrayLength(detRuns) != 1) {
     780        psAbort(config->argv[0], "found more then one detRun matching det_id %ld(this should not happen)", det_id);
     781        return false;
     782    }
     783
     784    // convert det_id to a string externaly
     785    if (!convertDetIdToStr(detRuns)) {
     786        psError(PS_ERR_UNKNOWN, false, "failed to convert det_id to a string");
     787        psFree(detRuns);
     788        return false;
     789    }
     790
     791    // negative simple so the default is true
     792    if (!ippdbPrintMetadatas(stdout, detRuns, "detRun", !simple)) {
     793        psError(PS_ERR_UNKNOWN, false, "failed to print array");
     794        psFree(detRuns);
     795        return false;
     796    }
     797    psFree(detRuns);
     798
     799    return true;
     800}
     801
     802static bool definebydetrunMode(pxConfig *config)
    506803{
    507804    bool status     = false;
  • trunk/ippTools/src/dettool.h

    r9816 r9942  
    2828    DETTOOL_MODE_DEFINEBYTAG,
    2929    DETTOOL_MODE_DEFINEBYQUERY,
     30    DETTOOL_MODE_DEFINEBYDETRUN,
    3031    DETTOOL_MODE_RUNS,
    3132    DETTOOL_MODE_INPUT,
  • trunk/ippTools/src/dettoolConfig.c

    r9821 r9942  
    127127    psMetadataAddBool(definebyqueryArgs, PS_LIST_TAIL, "-simple",  0,
    128128            "use the simple output format", false);
     129 
     130    // -definebydetrun
     131    psMetadata *definebydetrunArgs = psMetadataAlloc();
     132    psMetadataAddStr(definebydetrunArgs, PS_LIST_TAIL, "-det_type",  0,
     133            "define the type of detrend run (required)", NULL);
     134    psMetadataAddStr(definebydetrunArgs, PS_LIST_TAIL, "-exp_type",  0,
     135            "search by exposure type", NULL);
     136    psMetadataAddStr(definebydetrunArgs, PS_LIST_TAIL, "-inst",  0,
     137            "search by camera", NULL);
     138    psMetadataAddStr(definebydetrunArgs, PS_LIST_TAIL, "-telescope",  0,
     139            "search by telescope", NULL);
     140    psMetadataAddStr(definebydetrunArgs, PS_LIST_TAIL, "-filter",  0,
     141            "search by filter", NULL);
     142    psMetadataAddStr(definebydetrunArgs, PS_LIST_TAIL, "-uri",  0,
     143            "search by URL", NULL);
     144    psMetadataAddStr(definebydetrunArgs, PS_LIST_TAIL, "-set_exp_type",  0,
     145        "define exposure type", NULL);
     146    psMetadataAddStr(definebydetrunArgs, PS_LIST_TAIL, "-set_filter",  0,
     147        "define filter ", NULL);
     148    psMetadataAddF32(definebydetrunArgs, PS_LIST_TAIL, "-set_airmass",  0,
     149        "define airmass", NAN);
     150    psMetadataAddF32(definebydetrunArgs, PS_LIST_TAIL, "-set_exp_time",  0,
     151        "define exposure time", NAN);
     152    psMetadataAddF64(definebydetrunArgs, PS_LIST_TAIL, "-set_ccd_temp",  0,
     153        "define ccd tempature", NAN);
     154    psMetadataAddF64(definebydetrunArgs, PS_LIST_TAIL, "-set_posang",  0,
     155        "define rotator position angle", NAN);
     156    psMetadataAddStr(definebydetrunArgs, PS_LIST_TAIL, "-set_object",  0,
     157        "define exposure object", NULL);
     158    psMetadataAddStr(definebydetrunArgs, PS_LIST_TAIL, "-set_registered",  0,
     159        "time detrend run was registered", now);
     160    psMetadataAddStr(definebydetrunArgs, PS_LIST_TAIL, "-set_use_begin",  0,
     161        "start of detrend run applicable peroid", NULL);
     162    psMetadataAddStr(definebydetrunArgs, PS_LIST_TAIL, "-set_use_end",  0,
     163        "end of detrend run applicable peroid", NULL);
     164    psMetadataAddBool(definebydetrunArgs, PS_LIST_TAIL, "-simple",  0,
     165            "use the simple output format", false);
    129166
    130167    // -runs
     
    595632    PXTOOL_MODE("-pending",         DETTOOL_MODE_PENDING,       pendingArgs);
    596633    PXTOOL_MODE("-definebytag",     DETTOOL_MODE_DEFINEBYTAG,   definebytagArgs);
    597     PXTOOL_MODE("-definebyquery",DETTOOL_MODE_DEFINEBYQUERY, definebyqueryArgs);
     634    PXTOOL_MODE("-definebyquery",   DETTOOL_MODE_DEFINEBYQUERY, definebyqueryArgs);
     635    PXTOOL_MODE("-definebydetrun",  DETTOOL_MODE_DEFINEBYDETRUN, definebydetrunArgs);
    598636    PXTOOL_MODE("-raw",             DETTOOL_MODE_RAW,           rawArgs);
    599637    PXTOOL_MODE("-runs",            DETTOOL_MODE_RUNS,          runsArgs);
Note: See TracChangeset for help on using the changeset viewer.