Reading an Image or Image groups



next up previous
Next: Illustration of Low-Level Up: Example Programs Previous: Example Programs

Reading an Image or Image groups

      1:    # include <hstio.h>
      2:    # include <stdio.h>
      3:    
      4:    void showHdr(Hdr *h, char *title) {
      5:            int i;
      6:            printf("%s: number of lines: %d\n",title, h->nlines);
      7:            if (h->array != NULL)
      8:                    for (i = 0; i < h->nlines; ++i)
      9:                            printf("%s\n",h->array[i]);
     10:            printf("\n");
     11:    }
     12:    
     13:    void showFloatData(FloatTwoDArray *x, char *title) {
     14:            int i;
     15:            printf("%s:\n",title);
     16:    
     17:            printf("(%d, 0) %g ",0,PPix(x,0,0));
     18:              for (i = 1; i < 5; ++i) printf("%g ",PPix(x,i,0)); 
     19:              printf(" ... ");
     20:            printf("(%d, 0) %g ",(x->nx - 5),PPix(x,(x->nx - 5),0));
     21:              for (i = x->nx - 4; i < x->nx; ++i) printf("%g ",PPix(x,i,0));
     22:              printf("\n");
     23:    
     24:            printf("(%d, 1) %g ",0,PPix(x,0,1));
     25:              for (i = 1; i < 5; ++i) printf("%g ",PPix(x,i,1)); 
     26:              printf(" ... ");
     27:            printf("(%d, 1) %g ",(x->nx - 5),PPix(x,(x->nx - 5),1));
     28:              for (i = x->nx - 4; i < x->nx; ++i) printf("%g ",PPix(x,i,1));
     29:              printf("\n");
     30:    
     31:            printf("(%d, max - 2) %g ",0,PPix(x,0,x->ny - 2));
     32:              for (i = 1; i < 5; ++i) printf("%g ",PPix(x,i,x->ny - 2)); 
     33:              printf(" ... ");
     34:            printf("(%d, max - 2) %g ",(x->nx - 5),PPix(x,(x->nx - 5),x->ny - 2));
     35:              for (i = x->nx - 4; i < x->nx; ++i) printf("%g ",PPix(x,i,x->ny - 2));
     36:              printf("\n");
     37:    
     38:            printf("(%d, max - 1) %g ",0,PPix(x,0,x->ny - 1));
     39:              for (i = 1; i < 5; ++i) printf("%g ",PPix(x,i,x->ny - 1)); 
     40:              printf(" ... ");
     41:            printf("(%d, max - 1) %g ",(x->nx - 5),PPix(x,(x->nx - 5),x->ny - 1));
     42:              for (i = x->nx - 4; i < x->nx; ++i) printf("%g ",PPix(x,i,x->ny - 1));
     43:              printf("\n");
     44:            printf("\n");
     45:    }
     46:    
     47:    void showShortData(ShortTwoDArray *x, char *title) {
     48:            int i;
     49:            printf("%s:\n",title);
     50:    
     51:            printf("(%d, 0) %d ",0,PPix(x,0,0));
     52:              for (i = 1; i < 5; ++i) printf("%d ",PPix(x,i,0)); 
     53:              printf(" ... ");
     54:            printf("(%d, 0) %d ",(x->nx - 5),PPix(x,(x->nx - 5),0));
     55:              for (i = x->nx - 4; i < x->nx; ++i) printf("%d ",PPix(x,i,0));
     56:              printf("\n");
     57:    
     58:            printf("(%d, 1) %d ",0,PPix(x,0,1));
     59:              for (i = 1; i < 5; ++i) printf("%d ",PPix(x,i,1)); 
     60:              printf(" ... ");
     61:            printf("(%d, 1) %d ",(x->nx - 5),PPix(x,(x->nx - 5),1));
     62:              for (i = x->nx - 4; i < x->nx; ++i) printf("%d ",PPix(x,i,1));
     63:              printf("\n");
     64:    
     65:            printf("(%d, max - 2) %d ",0,PPix(x,0,x->ny - 2));
     66:              for (i = 1; i < 5; ++i) printf("%d ",PPix(x,i,x->ny - 2)); 
     67:              printf(" ... ");
     68:            printf("(%d, max - 2) %d ",(x->nx - 5),PPix(x,(x->nx - 5),x->ny - 2));
     69:              for (i = x->nx - 4; i < x->nx; ++i) printf("%d ",PPix(x,i,x->ny - 2));
     70:              printf("\n");
     71:    
     72:            printf("(%d, max - 1) %d ",0,PPix(x,0,x->ny - 1));
     73:              for (i = 1; i < 5; ++i) printf("%d ",PPix(x,i,x->ny - 1)); 
     74:              printf(" ... ");
     75:            printf("(%d, max - 1) %d ",(x->nx - 5),PPix(x,(x->nx - 5),x->ny - 1));
     76:              for (i = x->nx - 4; i < x->nx; ++i) printf("%d ",PPix(x,i,x->ny - 1));
     77:              printf("\n");
     78:            printf("\n");
     79:    }
     80:    
     81:    void show_iodesc(IODescPtr x) {
     82:            printf("IODesc: filename = %s extname = %s extver = %d\n\tnaxis1 = %d \
     83:    naxis2 = %d data type = %d\n", getFilename(x), getExtname(x), getExtver(x), 
     84:                    getNaxis1(x), getNaxis2(x), getType(x));
     85:    }
     86:    
     87:    void detect_err() {
     88:            printf("HSTIO Error (%d): %s\n",hstio_err(),hstio_errmsg());
     89:            exit(0);
     90:    }
     91:    
     92:    int main(int argc, char **argv) {
     93:            IODescPtr pri, sci, dq, err;
     94:    #ifdef EX3
     95:            IODescPtr outpri, outsci, outdq, outerr;
     96:    #endif
     97:    
     98:            Hdr prihdr, scihdr, dqhdr, errhdr;
     99:            FloatTwoDArray scidata;
    100:            ShortTwoDArray dqdata;
    101:            FloatTwoDArray errdata;
    102:            int i;
    103:            char *tmp;
    104:    
    105:            SciHdrData scihdrdata;
    106:            DQHdrData  dqhdrdata;
    107:            ErrHdrData errhdrdata;
    108:            SingleGroup sg;
    109:            MultiGroup mg;
    110:    
    111:            int A = 1; /* low-level routines */
    112:            int B = 3; /* high-level XXHdrData routines */
    113:            int C = 4; /* high-level SingleGroup */
    114:            int D = 5; /* high-level MultiGroup */
    115:    
    116:            /*
    117:            ** Command line arguments: 
    118:            **      1. input file name
    119:            **      2. output file name
    120:            */
    121:    #ifdef EX3
    122:            if (argc != 3) {
    123:                    printf("Wrong number of input arguments: ex3 input output\n");
    124:                    exit(0);
    125:            }
    126:            printf("Executing program ex3 -- test of pipeline I/O routines\n");
    127:            printf("Input: input file reading 6 groups of Sci, Err, DQ.\n");
    128:            printf("Output: output file creating 6 groups of Sci, Err, DQ.\n");
    129:    #else
    130:            if (argc != 2) {
    131:                    printf("Wrong number of input arguments: ex2 input\n");
    132:                    exit(0);
    133:            }
    134:            printf("Executing program ex2 -- test of pipeline I/O routines\n");
    135:            printf("Input: input file reading 6 groups of Sci, Err, DQ.\n");
    136:    #endif
    137:    
    138:            /* install the error handler */
    139:            push_hstioerr(detect_err);
    140:    
    141:            /*
    142:            ** Initialize the data structures.
    143:            */
    144:            initFloatData(&scidata);
    145:            initShortData(&dqdata);
    146:            initFloatData(&errdata);
    147:            initHdr(&prihdr);
    148:            initHdr(&scihdr);
    149:            initHdr(&dqhdr);
    150:            initHdr(&errhdr);
    151:    
    152:            initFloatHdrData(&scihdrdata);
    153:            initShortHdrData(&dqhdrdata);
    154:            initFloatHdrData(&errhdrdata);
    155:            initSingleGroup(&sg);
    156:            initMultiGroup(&mg);
    157:    
    158:            /*
    159:            ** First, we will use the low-level I/O routines to open
    160:            ** and read the primary header, and the first three
    161:            ** extension image arrays.
    162:            */
    163:            printf("\n======= Primary header: read =========\n");
    164:            pri = openInputImage(argv[1],"",0);
    165:            getHeader(pri,&prihdr);
    166:            show_iodesc(pri);
    167:            showHdr(&prihdr,"Primary Header Keywords");
    168:            printf("======= Primary header: read complete =========\n");
    169:    #ifdef EX3
    170:            outpri = openOutputImage(argv[2],"",0,&prihdr, 0, 0, 0);
    171:            closeImage(outpri);
    172:    #endif
    173:            closeImage(pri);
    174:            freeHdr(&prihdr);
    175:    
    176:        for (i = A; i <= A + 1; ++i) {
    177:            printf("\n======= Science data: read =========\n");
    178:            sci = openInputImage(argv[1],"SCI",i);
    179:            getHeader(sci,&scihdr);
    180:            show_iodesc(sci);
    181:            showHdr(&scihdr,"Science Header Keywords");
    182:            getFloatData(sci,&scidata);
    183:            showFloatData(&scidata,"Selected Science Data");
    184:            printf("======= Science data: read complete =========\n");
    185:    #ifdef EX3
    186:            outsci = openOutputImage(argv[2],"sci",i,&scihdr, 
    187:                    getNaxis1(sci), getNaxis2(sci),0);
    188:            putFloatData(outsci,&scidata);
    189:            closeImage(outsci);
    190:    #endif
    191:            closeImage(sci);
    192:            freeFloatData(&scidata);
    193:            freeHdr(&scihdr);
    194:    
    195:            printf("\n======= Error data: read =========\n");
    196:            err = openInputImage(argv[1],"ERR",i);
    197:            getHeader(err,&errhdr);
    198:            showHdr(&errhdr,"Error Header Keywords");
    199:            getFloatData(err,&errdata);
    200:            show_iodesc(err);
    201:            showFloatData(&errdata,"Selected Error Data");
    202:            printf("======= Error data: read complete =========\n");
    203:    #ifdef EX3
    204:            outerr = openOutputImage(argv[2],"err",i,&errhdr, 
    205:                    errdata.nx, errdata.ny,0);
    206:            putFloatData(outerr,&errdata);
    207:            closeImage(outerr);
    208:    #endif
    209:            closeImage(err);
    210:            freeFloatData(&errdata);
    211:            freeHdr(&errhdr);
    212:    
    213:            printf("\n======= Data Quality data: read =========\n");
    214:            dq = openInputImage(argv[1],"DQ",i);
    215:            getHeader(dq,&dqhdr);
    216:            showHdr(&dqhdr,"Data Quality Header Keywords");
    217:            getShortData(dq,&dqdata);
    218:            show_iodesc(dq);
    219:            showShortData(&dqdata,"Selected Data Quality Data");
    220:            printf("\n======= Data Quality data: read complete =========\n");
    221:    #ifdef EX3
    222:            outdq = openOutputImage(argv[2],"dq",i,&dqhdr, 
    223:                    dqdata.nx, dqdata.ny,0);
    224:            putShortData(outdq,&dqdata);
    225:            closeImage(outdq);
    226:    #endif
    227:            closeImage(dq);
    228:            freeShortData(&dqdata);
    229:            freeHdr(&dqhdr);
    230:    
    231:        }
    232:    
    233:            /*
    234:            ** Now, we will test the high-level routines.
    235:            ** First, test getSci, getErr, and getDQ.
    236:            */
    237:            printf("\n======= Science data: read =========\n");
    238:            getSci(argv[1],B,&scihdrdata);
    239:            show_iodesc(scihdrdata.iodesc);
    240:            showHdr(&scihdrdata.hdr,"Science Header Keywords");
    241:            showFloatData(&scihdrdata.data,"Science Data");
    242:            printf("======= Science data: read complete =========\n");
    243:    #ifdef EX3
    244:            putSci(argv[2],B,&scihdrdata,0);
    245:    #endif
    246:            freeFloatHdrData(&scihdrdata);
    247:    
    248:            printf("\n======= Error data: read =========\n");
    249:            getErr(argv[1],B,&errhdrdata);
    250:            show_iodesc(errhdrdata.iodesc);
    251:            showHdr(&errhdrdata.hdr,"Error Header Keywords");
    252:            showFloatData(&errhdrdata.data,"Error Data");
    253:            printf("======= Error data: read complete =========\n");
    254:    #ifdef EX3
    255:            putErr(argv[2],B,&errhdrdata,0);
    256:    #endif
    257:            freeFloatHdrData(&errhdrdata);
    258:    
    259:            printf("\n======= Data Quality data: read =========\n");
    260:            getDQ(argv[1],B,&dqhdrdata);
    261:            show_iodesc(dqhdrdata.iodesc);
    262:            showHdr(&dqhdrdata.hdr,"DQ Header Keywords");
    263:            showShortData(&dqhdrdata.data,"Data Quality Data");
    264:            printf("======= Data Quality data: read complete =========\n");
    265:    #ifdef EX3
    266:            putDQ(argv[2],B,&dqhdrdata,0);
    267:    #endif
    268:            freeShortHdrData(&dqhdrdata);
    269:    
    270:            /*
    271:            ** Now, test getSingleGroup.
    272:            */
    273:            printf("\n======= Single group data: read =========\n");
    274:            getSingleGroup(argv[1],C,&sg);
    275:            printf("Filename: %s group %d\n",sg.filename,sg.group_num);
    276:            showHdr(sg.globalhdr,"Global header");
    277:            showHdr(&sg.sci.hdr,"Science Header Keywords");
    278:            showFloatData(&sg.sci.data,"Science Data");
    279:            showHdr(&sg.err.hdr,"Error Header Keywords");
    280:            showFloatData(&sg.err.data, "Error Data");
    281:            showHdr(&sg.dq.hdr,"DQ Header Keywords");
    282:            showShortData(&sg.dq.data, "Data Quality Data");
    283:            printf("======= Single group data: read complete =========\n");
    284:    #ifdef EX3
    285:            putSingleGroup(argv[2],C,&sg,0);
    286:    #endif
    287:            freeSingleGroup(&sg);
    288:    
    289:            /*
    290:            ** Finally, test getMultiGroup.
    291:            */
    292:            printf("\n======= Multiple group data: read =========\n");
    293:            allocMultiGroup(&mg,4);
    294:            getMultiGroupHdr(argv[1],&mg);
    295:            for (i = 0; i < 2; ++i)
    296:                { getMultiGroup(&mg,i,(i + D)); }
    297:            printf("Filename: %s\n",mg.group[0].filename);
    298:            showHdr(mg.group[0].globalhdr,"Global header");
    299:            for (i = 0; i < 2; ++i) {
    300:                showHdr(&mg.group[i].sci.hdr,"Science Header Keywords");
    301:                showFloatData(&mg.group[i].sci.data,"Science Data");
    302:                showHdr(&mg.group[i].err.hdr,"Error Header Keywords");
    303:                showFloatData(&mg.group[i].err.data,"Error Data");
    304:                showHdr(&mg.group[i].dq.hdr,"DQ Header Keywords");
    305:                showShortData(&mg.group[i].dq.data,"Data Quality Data");
    306:            }
    307:            printf("======= Multi group data: read complete =========\n");
    308:    #ifdef EX3
    309:            for (i = 0; i < 2; ++i)
    310:                putMultiGroup(argv[2],(i + D),&mg,i,0);
    311:    #endif
    312:            freeMultiGroup(&mg);
    313:    
    314:            return 0;
    315:    }
    316:



Sdas Group
Wed Aug 21 10:27:26 EDT 1996