IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Jun 20, 2008, 10:27:20 AM (18 years ago)
Author:
bills
Message:

updated postage stamp request file format

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/pstamp/src/pstamprequest.c

    r17894 r18243  
    1313} psrOptions;
    1414
     15char *str_columns[] = {
     16    "PROJECT",
     17    "JOB_TYPE",
     18    "REQ_TYPE", // byid,  byexp,         bycoord
     19    "ID",       // db id, exposure name, n/a
     20    "CLASS_ID",
     21    "CENTER_X",
     22    "CENTER_Y",
     23    "WIDTH",
     24    "HEIGHT",
     25    "FILTER",
     26    "DATE_MIN",
     27    "DATE_MAX",
     28    "STAMP_NAME",
     29    NULL
     30};
     31char *u32_columns[] = {
     32    "COORD_MASK",
     33    "OPTION_MASK", // bitmask or of PSTAMP_SELECT_IMAGE PSTAMP_SELECT_MASK PSTAMP_SELECT_WEIGHT
     34    NULL
     35};
     36
    1537static void usage()
    1638{
     
    1941}
    2042
     43static psMetadata *initializeTable()
     44{
     45    psMetadata *md = psMetadataAlloc();
     46
     47    for (char **col_name = str_columns; *col_name != NULL; col_name++) {
     48        psMetadataAddStr(md, PS_LIST_TAIL, *col_name, PS_META_DEFAULT, "", "null");
     49    }
     50    for (char **col_name = u32_columns; *col_name != NULL; col_name++) {
     51        psMetadataAddU32(md, PS_LIST_TAIL, *col_name, PS_META_DEFAULT, "", 0);
     52    }
     53    return md;
     54}
    2155static void getId(char *idString, int argnum, int *pArgc, char *argv[], psrOptions *options)
    2256{
     
    2559        usage();
    2660    }
    27     psMetadataAdd (options->md, PS_LIST_TAIL, idString, PS_DATA_STRING, "", argv[argnum]);
     61    // catch common error
     62    if (*argv[argnum] == '-') {
     63        fprintf(stderr, "%s is not a valid %s\n", argv[argnum], idString);
     64        usage();
     65    }
     66
     67    psMetadataAddStr (options->md, PS_LIST_TAIL, idString, PS_META_REPLACE, "", argv[argnum]);
    2868    psArgumentRemove(argnum, pArgc, argv);
    2969}
     
    5696        usage();
    5797    }
    58     psMetadataAdd (options->md, PS_LIST_TAIL, "IMG_TYPE", PS_DATA_STRING, "", type);
     98    psMetadataAddStr (options->md, PS_LIST_TAIL, "IMG_TYPE", PS_META_REPLACE, "", type);
    5999
    60100    getId(paramName, argnum, pArgc, argv, options);
     
    104144{
    105145    psrOptions *options = psAlloc(sizeof(psrOptions));
    106     psMetadata *md = psMetadataAlloc();
     146    psMetadata *md = initializeTable();
    107147    int         argnum;
    108148    bool        gotStyle  = false;
     
    112152    bool        needROI   = false;
    113153    bool        makeStamps= false;
     154    unsigned    optionMask = PSTAMP_SELECT_IMAGE;
    114155
    115156    options->md = md;
    116157
    117     // Job type. This is normally "stamp" for postage stamp.
    118     // "get_image" requests that whole images to be retrieved (in PS case magic masked)
     158    // Job type.
     159    // "stamp" for make postage stamps.
     160    // "get_image" requests that whole images to be retrieved (magic masked for gpc1)
    119161    // "list_uri" results in a list of matching images
    120162    if ((argnum = psArgumentGet(argc, argv, "-get_image"))) {
    121         psMetadataAdd (md, PS_LIST_TAIL, "REQ_TYPE", PS_DATA_STRING, "", "get_image");
     163        psMetadataAddStr (md, PS_LIST_TAIL, "JOB_TYPE", PS_META_REPLACE, "", "get_image");
    122164        psArgumentRemove(argnum, &argc, argv);
    123165    } else if ((argnum = psArgumentGet(argc, argv, "-list_uri"))) {
    124         psMetadataAdd (md, PS_LIST_TAIL, "REQ_TYPE", PS_DATA_STRING, "", "get_image");
    125         psArgumentRemove(argnum, &argc, argv);
    126     } else {
    127         psMetadataAdd (md, PS_LIST_TAIL, "REQ_TYPE", PS_DATA_STRING, "", "stamp");
     166        psMetadataAddStr (md, PS_LIST_TAIL, "JOB_TYPE", PS_META_REPLACE, "", "list_uri");
     167        psArgumentRemove(argnum, &argc, argv);
     168    } else {
     169        // default JOB_TYPE is stamp
     170        psMetadataAddStr (md, PS_LIST_TAIL, "JOB_TYPE", PS_META_REPLACE, "", "stamp");
    128171        needROI = true;
    129172        makeStamps = true;
    130173    }
    131174
    132     if ((argnum = psArgumentGet(argc, argv, "-name"))) {
     175    if ((argnum = psArgumentGet(argc, argv, "-request_name"))) {
    133176        psArgumentRemove(argnum, &argc, argv);
    134177        if (argc < 2) {
    135             psError(PS_ERR_BAD_PARAMETER_VALUE, true, "no request name specified");
     178            psError(PS_ERR_BAD_PARAMETER_VALUE, true, "value required for request name");
    136179            usage();
    137180        }
     
    146189        psArgumentRemove(argnum, &argc, argv);
    147190        if (argc < 2) {
    148             psError(PS_ERR_BAD_PARAMETER_VALUE, true, "no project name specified");
     191            psError(PS_ERR_BAD_PARAMETER_VALUE, true, "value required for project name");
    149192            usage();
    150193        }
    151         psMetadataAdd(md, PS_LIST_TAIL, "PROJECT", PS_DATA_STRING, "", argv[argnum]);
     194        psMetadataAddStr(md, PS_LIST_TAIL, "PROJECT", PS_META_REPLACE, "", argv[argnum]);
    152195        psArgumentRemove(argnum, &argc, argv);
    153196    } else {
     
    157200
    158201    // user tag will be used as the base name for the postage stamp images
    159     if ((argnum = psArgumentGet(argc, argv, "-user_tag"))) {
     202    if ((argnum = psArgumentGet(argc, argv, "-stamp_name"))) {
    160203        psArgumentRemove(argnum, &argc, argv);
    161204        if (argc < 2) {
    162             psError(PS_ERR_BAD_PARAMETER_VALUE, true, "missing value for user_tag");
     205            psError(PS_ERR_BAD_PARAMETER_VALUE, true, "missing value for stamp_name");
    163206            usage();
    164207        }
    165         psMetadataAdd(md, PS_LIST_TAIL, "USER_TAG", PS_DATA_STRING, "", argv[argnum]);
    166         psArgumentRemove(argnum, &argc, argv);
    167     } else {
    168         // default user tag to requestName
    169         psMetadataAdd(md, PS_LIST_TAIL, "USER_TAG", PS_DATA_STRING, "", options->requestName);
    170     }
     208        psMetadataAddStr(md, PS_LIST_TAIL, "STAMP_NAME", PS_META_REPLACE, "", argv[argnum]);
     209        psArgumentRemove(argnum, &argc, argv);
     210    } else {
     211        // if stamp name not specified use requestName
     212        psMetadataAddStr(md, PS_LIST_TAIL, "STAMP_NAME", PS_META_REPLACE, "", options->requestName);
     213    }
     214
     215    if ((argnum = psArgumentGet(argc, argv, "-mask"))) {
     216        psArgumentRemove(argnum, &argc, argv);
     217        optionMask |= PSTAMP_SELECT_MASK;
     218    }
     219    if ((argnum = psArgumentGet(argc, argv, "-weight"))) {
     220        psArgumentRemove(argnum, &argc, argv);
     221        optionMask |= PSTAMP_SELECT_WEIGHT;
     222    }
     223    psMetadataAddU32(md, PS_LIST_TAIL, "OPTION_MASK", PS_META_REPLACE, "", optionMask);
    171224
    172225    // find style & image type
    173226    if ((argnum = psArgumentGet(argc, argv, "-bycoord"))) {
     227        fprintf(stderr, "-bycoord not implemented yet\n");
     228        exit(1);
     229
    174230        gotStyle = true;
    175         psMetadataAdd(md, PS_LIST_TAIL, "REQ_TYPE", PS_DATA_STRING, "", 1+argv[argnum]);
    176         psArgumentRemove(argnum, &argc, argv);
    177         needCoord = true;
     231        psMetadataAddStr(md, PS_LIST_TAIL, "REQ_TYPE", PS_META_REPLACE, "", 1+argv[argnum]);
     232
     233        psArgumentRemove(argnum, &argc, argv); needCoord = true;
    178234        needROI = true;
    179235        // TODO: we need an IMG_TYPE too...
     
    186242        }
    187243        gotStyle = true;
    188         psMetadataAdd(md, PS_LIST_TAIL, "REQ_TYPE", PS_DATA_STRING, "", 1+argv[argnum]);
     244        psMetadataAddStr(md, PS_LIST_TAIL, "REQ_TYPE", PS_META_REPLACE, "", 1+argv[argnum]);
    189245        psArgumentRemove(argnum, &argc, argv);
    190246        doById(argnum, &argc, argv, options);
     
    197253        }
    198254        gotStyle = true;
    199         psMetadataAdd(md, PS_LIST_TAIL, "REQ_TYPE", PS_DATA_STRING, "", 1+argv[argnum]);
     255        psMetadataAddStr(md, PS_LIST_TAIL, "REQ_TYPE", PS_META_REPLACE, "", 1+argv[argnum]);
    200256        psArgumentRemove(argnum, &argc, argv);
    201257        doByExp(argnum, &argc, argv, options);
     
    213269        if (needROI) {
    214270            usage();
     271        } else {
     272            psErrorClear();
    215273        }
    216274    }
    217275
    218276    if (needROI) {
    219         if (roiParam.celestialCenter) {
    220             psMetadataAdd (md, PS_LIST_TAIL, "RA", PS_DATA_STRING, "",  roiParam.center[0]);
    221             psMetadataAdd (md, PS_LIST_TAIL, "DEC", PS_DATA_STRING, "", roiParam.center[1]);
    222         } else {
     277        unsigned coord_mask = 0;
     278
     279        if (!roiParam.celestialCenter) {
    223280            if (needCoord) {
    224281                fprintf(stderr, "need to specify ROI in sky coordinates with -bycoord\n");
    225282                usage();
    226283            }
    227             psMetadataAdd (md, PS_LIST_TAIL, "CENTER_X", PS_DATA_STRING, "", roiParam.center[0]);
    228             psMetadataAdd (md, PS_LIST_TAIL, "CENTER_Y", PS_DATA_STRING, "", roiParam.center[1]);
    229         }
    230         if (roiParam.celestialRange) {
    231             psMetadataAdd (md, PS_LIST_TAIL, "D_RA", PS_DATA_STRING, "",  roiParam.range[0]);
    232             psMetadataAdd (md, PS_LIST_TAIL, "D_DEC", PS_DATA_STRING, "", roiParam.range[1]);
    233         } else {
    234             psMetadataAdd (md, PS_LIST_TAIL, "WIDTH", PS_DATA_STRING, "",  roiParam.range[0]);
    235             psMetadataAdd (md, PS_LIST_TAIL, "HEIGHT", PS_DATA_STRING, "", roiParam.range[1]);
    236         }
     284            coord_mask |= PSTAMP_CENTER_IN_PIXELS;
     285        }
     286        psMetadataAddStr (md, PS_LIST_TAIL, "CENTER_X", PS_META_REPLACE, "", roiParam.center[0]);
     287        psMetadataAddStr (md, PS_LIST_TAIL, "CENTER_Y", PS_META_REPLACE, "", roiParam.center[1]);
     288
     289        if (!roiParam.celestialRange) {
     290            coord_mask |= PSTAMP_RANGE_IN_PIXELS;
     291        }
     292        psMetadataAddStr (md, PS_LIST_TAIL, "WIDTH", PS_META_REPLACE, "",  roiParam.range[0]);
     293        psMetadataAddStr (md, PS_LIST_TAIL, "HEIGHT", PS_META_REPLACE, "", roiParam.range[1]);
     294
     295        psMetadataAddU32(md, PS_LIST_TAIL, "COORD_MASK", PS_META_REPLACE, "", coord_mask);
    237296    }
    238297
     
    266325    psMetadata *header = psMetadataAlloc();
    267326
    268     psMetadataAdd(header, PS_LIST_TAIL, "REQ_NAME", PS_DATA_STRING, "", options->requestName);
    269     psMetadataAdd(header, PS_LIST_TAIL, "EXTVER",   PS_DATA_STRING, "", STAMP_REQUEST_VERSION);
     327    psMetadataAddStr(header, PS_LIST_TAIL, "EXTVER",   PS_META_REPLACE, "", STAMP_REQUEST_VERSION);
     328    psMetadataAddStr(header, PS_LIST_TAIL, "REQ_NAME", PS_META_REPLACE, "", options->requestName);
    270329
    271330    psArray    *table = psArrayAlloc(1);
     
    285344}
    286345
    287 bool sampleTable(const char *fileName)
    288 {
    289     psFits *fitsFile = psFitsOpen(fileName, "w");
    290     int     numRows = 42;
    291 
    292     if (fitsFile == NULL) {
    293         psError(PS_ERR_IO, true, "failed to open %s for output\n", fileName);
    294         return false;
    295     }
    296 
    297     psArray    *table = psArrayAlloc(numRows);
    298 
    299     for (int i=0; i< numRows; i++) {
    300         psMetadata *row = psMetadataAlloc();
    301         psMetadataAdd (row, PS_LIST_TAIL, "ROW",   PS_DATA_S32,    "", i);
    302         psMetadataAdd (row, PS_LIST_TAIL, "FROW",  PS_TYPE_F32,    "", 0.1*i);
    303         psMetadataAdd (row, PS_LIST_TAIL, "DUMMY", PS_DATA_STRING, "", "test line");
    304 
    305         table->data[i] = row;
    306          
    307     }
    308 
    309     psFitsWriteTable(fitsFile, NULL, table, "BILLSEXT");
    310 
    311     psFitsClose(fitsFile);
    312 
    313     return true;
    314 }
    315 
    316346int main(int argc, char *argv[])
    317347{
Note: See TracChangeset for help on using the changeset viewer.