IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 9946


Ignore:
Timestamp:
Nov 9, 2006, 5:21:33 PM (20 years ago)
Author:
jhoblitt
Message:

first pass implementation of -definebydetrun

Location:
trunk/ippTools/src
Files:
2 edited

Legend:

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

    r9942 r9946  
    806806    PS_ASSERT_PTR_NON_NULL(config, false);
    807807
    808     // what type of detRun is this?
    809     // det_type is required
    810     psString det_type = psMetadataLookupStr(&status, config->args, "-det_type");
    811     if (!status) {
    812         psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -det_type");
    813         return false;
    814     }
    815     if (!det_type) {
    816         psError(PS_ERR_UNKNOWN, true, "-det_type is required");
    817         return false;
    818     }
    819 
    820     psMetadata *where = psMetadataAlloc();
     808    // det_id is the only required input
     809    psString det_id = psMetadataLookupStr(&status, config->args, "-det_id");
     810    if (!status) {
     811        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -det_id");
     812        return false;
     813    }
     814    if (!det_id) {
     815        psError(PS_ERR_UNKNOWN, true, "-det_id is required");
     816        return false;
     817    }
     818   
     819    // lookup the detRun that we will be basing this one on
     820    psArray *detRuns = NULL;
    821821    {
    822         bool status = false;
    823         psString exp_type = psMetadataLookupStr(&status, config->args, "-exp_type");        if (!status) {
    824             psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -exp_type");
    825             return false;
    826         }
    827         if (exp_type) {
    828             if (!psMetadataAddStr(where, PS_LIST_TAIL, "exp_type", 0, "==", exp_type)) {
    829                 psError(PS_ERR_UNKNOWN, false, "failed to add item exp_type");
    830                 psFree(where);
    831                 return false;
    832             }
    833         }
    834         // map -inst -> camera
    835         psString camera = psMetadataLookupStr(&status, config->args, "-inst");
    836         if (!status) {
    837             psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -inst");
    838             return false;
    839         }
    840         if (camera) {
    841             if (!psMetadataAddStr(where, PS_LIST_TAIL, "camera", 0, "==", camera)) {
    842                 psError(PS_ERR_UNKNOWN, false, "failed to add item inst");
    843                 psFree(where);
    844                 return false;
    845             }
    846         }
    847         psString telescope = psMetadataLookupStr(&status, config->args, "-telescope");        if (!status) {
    848             psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -telescope");
    849             return false;
    850         }
    851         if (telescope) {
    852             if (!psMetadataAddStr(where, PS_LIST_TAIL, "telescope", 0, "==", telescope)) {
    853                 psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");
    854                 psFree(where);
    855                 return false;
    856             }
    857         }
    858         psString filter = psMetadataLookupStr(&status, config->args, "-filter");
    859         if (!status) {
    860             psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -filter");
    861             return false;
    862         }
    863         if (filter) {
    864             if (!psMetadataAddStr(where, PS_LIST_TAIL, "filter", 0, "==", filter)) {
    865                 psError(PS_ERR_UNKNOWN, false, "failed to add item filter");
    866                 psFree(where);
    867                 return false;
    868             }
    869         }
    870         psString uri = psMetadataLookupStr(&status, config->args, "-uri");
    871         if (!status) {
    872             psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -filter");
    873             return false;
    874         }
    875         if (uri) {
    876             if (!psMetadataAddStr(where, PS_LIST_TAIL, "uri", 0, "==", uri)) {
    877                 psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
    878                 psFree(where);
    879                 return false;
    880             }
    881         }
    882     }
    883     if (!psListLength(where->list)) {
     822        psMetadata *where = psMetadataAlloc();
     823        psMetadataAddS32(where, PS_LIST_TAIL, "det_id", 0, "==", (psS32)atoi(det_id));
     824        detRuns = detRunSelectRowObjects(config->dbh, where, 0);
    884825        psFree(where);
    885         where = NULL;
    886     }
    887 
    888     // there is some namespace overlap between the names of the fields we'd
    889     // like to search by to setup a detrun and the names of the fields we'd
    890     // like to assign values to so I've seperated them but prepending set- to
    891     // the assigned values
    892 
    893     // optional
     826    }
     827    if (!detRuns) {
     828        psError(PS_ERR_UNKNOWN, false, "database error");
     829        return false;
     830    }
     831    // sanity check the result... we should have only found one det_id
     832    if (psArrayLength(detRuns) != 1) {
     833        psAbort(config->argv[0], "found more then one detRun matching det_id %d(this should not happen)", (psS32)atoi(det_id));
     834        return false;
     835    }
     836   
     837    // pull the detRun object out the result array
     838    detRunRow *detRun = psMemIncrRefCounter(detRuns->data[0]);
     839 
     840    // discard the resultarray
     841    psFree(detRuns)
     842
     843    // set the det_id to 0/NULL so the database can assign it
     844    detRun->det_id = 0;
     845   
     846    // reset the iteration to 0
     847    detRun->iteration = 0;
     848   
     849    // reset the state to "run"
     850    psFree(detRun->state);
     851    detRun->state = psStringCopy("run");
     852
     853    // walk through the optional values and update the detRun as required
    894854    psString exp_type = psMetadataLookupStr(&status, config->args, "-set_exp_type");
    895855    if (!status) {
     
    897857        return false;
    898858    }
     859    if (exp_type) {
     860        detRun->exp_type = exp_type;
     861    }
    899862
    900863    psString filter = psMetadataLookupStr(&status, config->args, "-set_filter");
     
    903866        return false;
    904867    }
     868    if (filter) {
     869        detRun->filter = filter;
     870    }
    905871
    906872    psF32 airmass = psMetadataLookupF32(&status, config->args, "-set_airmass");
     
    909875        return false;
    910876    }
     877    if (!isnan(airmass)) {
     878        detRun->airmass = airmass;
     879    }
    911880
    912881    psF32 exp_time = psMetadataLookupF32(&status, config->args, "-set_exp_time");
     
    915884        return false;
    916885    }
     886    if (!isnan(exp_time)) {
     887        detRun->exp_time = exp_time;
     888    }
    917889
    918890    psF32 ccd_temp = psMetadataLookupF32(&status, config->args, "-set_ccd_temp");
     
    921893        return false;
    922894    }
     895    if (!isnan(ccd_temp)) {
     896        detRun->ccd_temp = ccd_temp;
     897    }
    923898
    924899    psF64 posang = psMetadataLookupF32(&status, config->args, "-set_posang");
     
    927902        return false;
    928903    }
     904    if (!isnan(posang)) {
     905        detRun->posang = posang;
     906    }
    929907
    930908    psString object = psMetadataLookupStr(&status, config->args, "-set_object");
     
    933911        return false;
    934912    }
     913    if (object) {
     914        detRun->object = object;
     915    }
     916
    935917    psTime *registered = NULL;
    936918    {
     
    942924        // pass through NULL as this is an optional field
    943925        if (registeredStr) {
     926            psFree(registered);
    944927            registered = psTimeFromISO(registeredStr, PS_TIME_UTC);
    945         } else {
    946             registered = NULL;
     928            detRun->registered = psMemIncrRefCounter(registered);
     929            psFree(registered);
    947930        }
    948931    }
     
    957940        // pass through NULL as this is an optional field
    958941        if (use_beginStr) {
     942            psFree(use_begin);
    959943            use_begin = psTimeFromISO(use_beginStr, PS_TIME_UTC);
    960         } else {
    961             use_begin = NULL;
     944            detRun->use_begin = psMemIncrRefCounter(use_begin);
     945            psFree(use_begin);
    962946        }
    963947    }
     
    972956        // pass through NULL as this is an optional field
    973957        if (use_endStr) {
     958            psFree(use_end);
    974959            use_end = psTimeFromISO(use_endStr, PS_TIME_UTC);
    975         } else {
    976             use_end = NULL;
    977         }
    978     }
    979 
    980     // search for rawDetrendExps with the specified options
    981     psArray *detrendExps = rawDetrendExpSelectRowObjects(config->dbh, where, 0);
    982     psFree(where);
    983     // make sure that we found at least one rawDetrendExp
    984     if (!detrendExps) {
    985         psError(PS_ERR_UNKNOWN, false, "no rawDetrendExp rows found");
    986         return false;
     960            detRun->use_end = psMemIncrRefCounter(use_end);
     961            psFree(use_end);
     962        }
    987963    }
    988964
     
    990966    if (!psDBTransaction(config->dbh)) {
    991967        psError(PS_ERR_UNKNOWN, false, "database error");
    992         psFree(detrendExps);
    993         return false;
    994     }
    995 
    996     // the first iteration is always 0
    997     // XXX det_id
    998     detRunInsert(config->dbh,
    999             0,
    1000             0,
    1001             det_type,
    1002             "run",
    1003             exp_type,
    1004             filter,
    1005             airmass,
    1006             exp_time,
    1007             ccd_temp,
    1008             posang,
    1009             object,
    1010             registered,
    1011             use_begin,
    1012             use_end
    1013         );
    1014     psFree(registered);
    1015     psFree(use_begin);
    1016     psFree(use_end);
    1017     long det_id = psDBLastInsertID(config->dbh);
    1018 
    1019     // create new detInputExp row(s) from the rawDetrendExp row(s)
    1020     psArray *inputExps = psArrayAllocEmpty(psArrayLength(detrendExps));
    1021     for (long i = 0; i < psArrayLength(detrendExps); i++) {
    1022         detInputExpRow *inputExp = rawDetrenTodetInputExpRow(
    1023             detrendExps->data[i],
    1024             det_id,
    1025             0 // the first iteration is explicitly 0
    1026         );
    1027         psArrayAdd(inputExps, 0, inputExp);
    1028         psFree(inputExp);
    1029     }
    1030 
    1031     psFree(detrendExps);
    1032 
    1033     // insert detInputExp objects into the database
    1034     if (!detInputExpInsertObjects(config->dbh, inputExps)) {
     968        psFree(detRun);
     969        return false;
     970    }
     971
     972    if (!detRunInsertObject(config->dbh, detRun)) {
    1035973        psError(PS_ERR_UNKNOWN, false, "database error");
    1036974        // rollback
     
    1038976            psError(PS_ERR_UNKNOWN, false, "database error");
    1039977        }
    1040         psFree(inputExps);
    1041         return false;
    1042     }
    1043     psFree(inputExps);
     978        psFree(detRun);
     979        return false;
     980    }
     981    psFree(detRun);
     982
     983    // get the det_id
     984    long newDet_id = psDBLastInsertID(config->dbh);
     985
     986    char *query =
     987        "INSERT INTO detInputExp"
     988        "   SELECT"
     989        "       %d,"
     990        "       0,"
     991        "       detResidExp.exp_tag,"
     992        "       detResidExp.accept"
     993        "   FROM detResidExp"
     994        "   WHERE det_id = %d";
     995
     996    if (!p_psDBRunQuery(config->dbh, query, (psS32)newDet_id, (psS32)atoi(det_id))) {
     997        psError(PS_ERR_UNKNOWN, false, "database error");
     998        return false;
     999    }
    10441000
    10451001    // point of no return for det_id creation
     
    10591015    }
    10601016
     1017    {
    10611018    // print the new det_id
    10621019    psArray *detRuns = NULL;
    10631020    {
    10641021        psMetadata *where = psMetadataAlloc();
    1065         psMetadataAddS32(where, PS_LIST_TAIL, "det_id", 0, "==", det_id);
     1022        psMetadataAddS32(where, PS_LIST_TAIL, "det_id", 0, "==", newDet_id);
    10661023        detRuns = psDBSelectRows(config->dbh, "detRun", where, 0);
    10671024        psFree(where);
     
    10711028        return false;
    10721029    }
    1073     // sanity check results
     1030    // sanity check the result... we should have only found one det_id
    10741031    if (psArrayLength(detRuns) != 1) {
    1075         psAbort(config->argv[0], "found more then one detRun matching det_id %ld(this should not happen)", det_id);
     1032        psAbort(config->argv[0], "found more then one detRun matching det_id %ld(this should not happen)", newDet_id);
    10761033        return false;
    10771034    }
     
    10911048    }
    10921049    psFree(detRuns);
     1050    }
    10931051
    10941052    return true;
  • trunk/ippTools/src/dettoolConfig.c

    r9942 r9946  
    9393    // -definebyquery
    9494    psMetadata *definebyqueryArgs = psMetadataAlloc();
    95     psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-det_type",  0,
    96             "define the type of detrend run (required)", NULL);
    97     psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-exp_type",  0,
    98             "search by exposure type", NULL);
    99     psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-inst",  0,
    100             "search by camera", NULL);
    101     psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-telescope",  0,
    102             "search by telescope", NULL);
    103     psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-filter",  0,
    104             "search by filter", NULL);
    105     psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-uri",  0,
    106             "search by URL", NULL);
     95    psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-det_id",  0,
     96            "det ID to base the new detrun on (required)", NULL);
    10797    psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-set_exp_type",  0,
    10898        "define exposure type", NULL);
     
    130120    // -definebydetrun
    131121    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);
     122    psMetadataAddStr(definebydetrunArgs, PS_LIST_TAIL, "-det_id",  0,
     123            "det ID to base a new detRun on (required)", NULL);
    144124    psMetadataAddStr(definebydetrunArgs, PS_LIST_TAIL, "-set_exp_type",  0,
    145125        "define exposure type", NULL);
Note: See TracChangeset for help on using the changeset viewer.