IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 11204


Ignore:
Timestamp:
Jan 19, 2007, 4:34:35 PM (19 years ago)
Author:
jhoblitt
Message:

add detselect range support

Location:
trunk/ippTools/src
Files:
2 edited

Legend:

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

    r11099 r11204  
    6868{
    6969    PS_ASSERT_PTR_NON_NULL(config, false);
     70
     71    psMetadata *where = psMetadataAlloc();
     72
     73    // airmass_min  < airmass  < airmass_max
     74    {
     75        bool status = false;
     76        psF32 airmass = psMetadataLookupF32(&status, config->args, "-airmass");
     77        if (!status) {
     78            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -airmass");
     79            psFree(where);
     80            return false;
     81        }
     82
     83        if (!isnan(airmass)) {
     84            psMetadataAddF32(where, PS_LIST_TAIL, "airmass_min", 0, "<=", airmass);
     85            psMetadataAddF32(where, PS_LIST_TAIL, "airmass_max", 0, ">=", airmass);
     86        }
     87    }
     88
     89    // exp_time_min < exp_time < exp_time_max
     90    {
     91        bool status = false;
     92        psF32 exp_time = psMetadataLookupF32(&status, config->args, "-exp_time");
     93        if (!status) {
     94            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -exp_time");
     95            psFree(where);
     96            return false;
     97        }
     98
     99        if (!isnan(exp_time)) {
     100            psMetadataAddF32(where, PS_LIST_TAIL, "exp_time_min", 0, "<=", exp_time);
     101            psMetadataAddF32(where, PS_LIST_TAIL, "exp_time_max", 0, ">=", exp_time);
     102        }
     103    }
     104
     105    // ccd_temp_min < ccd_temp < ccd_temp_max
     106    {
     107        bool status = false;
     108        psF32 ccd_temp = psMetadataLookupF32(&status, config->args, "-ccd_temp");
     109        if (!status) {
     110            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -ccd_temp");
     111            psFree(where);
     112            return false;
     113        }
     114
     115        if (!isnan(ccd_temp)) {
     116            psMetadataAddF32(where, PS_LIST_TAIL, "ccd_temp_min", 0, "<=", ccd_temp);
     117            psMetadataAddF32(where, PS_LIST_TAIL, "ccd_temp_max", 0, ">=", ccd_temp);
     118        }
     119    }
     120   
     121    {
     122        bool status = false;
     123        psF64 posang = psMetadataLookupF64(&status, config->args, "-posang");
     124        if (!status) {
     125            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -posang");
     126            psFree(where);
     127            return false;
     128        }
     129
     130        if (!isnan(posang)) {
     131            psMetadataAddF32(where, PS_LIST_TAIL, "posang_min", 0, "<=", posang);
     132            psMetadataAddF32(where, PS_LIST_TAIL, "posang_max", 0, ">=", posang);
     133        }
     134    }
     135
     136    // time_begin    < time     < time_end
     137    {
     138        bool status = false;
     139        psString timeStr = psMetadataLookupStr(&status, config->args, "-time");
     140        if (!status) {
     141            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -time");
     142            psFree(where);
     143            return false;
     144        }
     145
     146        if (timeStr) {
     147            psTime *time = psTimeFromISO(timeStr, PS_TIME_UTC);
     148            if (!time) {
     149                psError(PS_ERR_UNKNOWN, false, "error in time format %s", timeStr);
     150                psFree(where);
     151                return false;
     152            }
     153
     154            psMetadataAddTime(where, PS_LIST_TAIL, "time_begin", 0, "<=", time);
     155            psMetadataAddTime(where, PS_LIST_TAIL, "time_end", 0, ">=", time);
     156            psFree(time);
     157        }
     158    }
    70159
    71160    psString query = psStringCopy(
     
    81170        "   AND detRunSummary.accept = 1"
    82171    );
    83 # if 0
    84     psString query = psStringCopy(
    85         "SELECT DISTINCT"
    86         "   detRunSummary.det_id,"
    87         "   detRunSummary.iteration,"
    88         "   rawImfile.class,"
    89         "   detRun.det_type"
    90         // "   detRun.state,"
    91         // "   detRunSummary.accept,"
    92         // "   rawExp.camera"
    93         " FROM detRun"
    94         " JOIN detRunSummary "
    95         "   USING(det_id)"
    96         " JOIN detInputExp"
    97         "   ON detRunSummary.det_id = detInputExp.det_id"
    98         "   AND detRunSummary.iteration = detInputExp.iteration"
    99         " JOIN rawExp"
    100         "   ON detInputExp.exp_tag = rawExp.exp_tag"
    101         " JOIN rawImfile"
    102         "   ON rawExp.exp_tag = rawImfile.exp_tag"
    103         " WHERE"
    104         "   detRun.state = 'stop'"
    105         "   AND detRunSummary.accept = 1"
    106         // XXX the following entry is needed to exclude db mismatched
    107         // XXX these are caused by an error upstream and should be fixed
    108 //        "   AND detRun.det_type = rawExp.object"
    109     );
    110 # endif
    111172
    112173    if (config->where) {
     
    116177    }
    117178
    118     // XXX need to place in here the range constraints for range-based values:
    119     // use_begin    < time     < use_end
    120     // airmass_min  < airmass  < airmass_max
    121     // ccd_temp_min < ccd_temp < ccd_temp_max
    122     // exp_time_min < exp_time < exp_time_max
    123 
    124     {
    125         psString str = NULL;
    126         bool status = false;
    127         if ((str = psMetadataLookupStr(&status, config->args, "-det_type"))) {
    128             psStringAppend(&query, " AND detRun.det_type = '%s'", str);
    129         }
    130     }
    131 
    132     {
    133         psString str = NULL;
    134         bool status = false;
    135         if ((str = psMetadataLookupStr(&status, config->args, "-filter"))) {
    136             psStringAppend(&query, " AND detRun.filter = '%s'", str);
     179    {
     180        psString whereClause = psDBGenerateWhereConditionSQL(where, "detRun");
     181        psFree(where);
     182        if (whereClause) {
     183            psStringAppend(&query, " AND %s", whereClause);
     184            psFree(whereClause);
    137185        }
    138186    }
     
    141189    // single detrend image which matches all criteria and has the latest
    142190    // insertion date
    143     psStringAppend(&query, " LIMIT 1");
     191    psStringAppend(&query, " ORDER BY detRun.registered DESC LIMIT 1");
    144192
    145193    if (!p_psDBRunQuery(config->dbh, query)) {
  • trunk/ippTools/src/detselectConfig.c

    r11100 r11204  
    4545    // -search
    4646    psMetadata *searchArgs = psMetadataAlloc();
    47     // XXX date/time
    4847    psMetadataAddStr(searchArgs, PS_LIST_TAIL, "-inst", 0,
    49             "search by camera (required)", NULL);
     48            "search by camera", NULL);
     49    psMetadataAddStr(searchArgs, PS_LIST_TAIL, "-telescope", 0,
     50            "search by telescope", NULL);
    5051    psMetadataAddStr(searchArgs, PS_LIST_TAIL, "-det_type", 0,
    51             "search by detrend type (required)", NULL);
     52            "search by detrend type", NULL);
    5253    psMetadataAddStr(searchArgs, PS_LIST_TAIL, "-filter", 0,
    5354            "search by filter", NULL);
     55    psMetadataAddF32(searchArgs, PS_LIST_TAIL, "-airmass", 0,
     56            "define airmass", NAN);
    5457    psMetadataAddF32(searchArgs, PS_LIST_TAIL, "-exp_time", 0,
    5558            "search by exposure time", NAN);
    56     psMetadataAddF64(searchArgs, PS_LIST_TAIL, "-ccd_temp", 0,
     59    psMetadataAddF32(searchArgs, PS_LIST_TAIL, "-ccd_temp", 0,
    5760            "search by ccd tempature", NAN);
    58     psMetadataAddF32(searchArgs, PS_LIST_TAIL, "-airmass", 0,
    59             "define airmass", NAN);
     61    psMetadataAddF64(searchArgs, PS_LIST_TAIL, "-posang", 0,
     62            "search by rotator position angle", NAN);
    6063    psMetadataAddStr(searchArgs, PS_LIST_TAIL, "-time", 0,
    6164            "define time for desired detrend data", NULL);
     
    223226    }
    224227    addWhereStr(telescope);
     228    addWhereStr(det_type);
    225229    addWhereStr(exp_type);
    226230    addWhereS32(imfiles);
     
    228232    addWhereStr(class_id);
    229233    addWhereStr(filter);
    230     addWhereF32(exp_time);
    231     addWhereF64(ccd_temp);
    232     addWhereF32(airmass);
    233     addWhereTimeStr(use_begin);
    234     addWhereTimeStr(use_end);
     234//    addWhereF32(exp_time);
     235//    addWhereF64(ccd_temp);
     236//    addWhereF32(airmass);
     237//    addWhereTimeStr(use_begin);
     238//    addWhereTimeStr(use_end);
    235239
    236240    if (config->where->list->n < 1) {
Note: See TracChangeset for help on using the changeset viewer.