IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 13040


Ignore:
Timestamp:
Apr 25, 2007, 4:18:42 PM (19 years ago)
Author:
eugene
Message:

fixed MEF NAXIS=3 read

Location:
trunk/Ohana/src/opihi/cmd.data
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana/src/opihi/cmd.data/rd.c

    r12902 r13040  
    5757    return (FALSE);
    5858  }
    59   fclose (f);
    6059
    6160  /* find matrix, free old data */
     
    7170  status = FALSE;
    7271
     72  /*** advance to the correct FITS extension ***/
     73
     74  /* FITS extension by number */
    7375  if (extend) {
    7476    /* load in appropriate header */
    75     Nskip = gfits_read_Xheader (argv[2], &buf[0].header, Nextend);
     77    Nskip = gfits_fread_Xheader (f, &buf[0].header, Nextend);
    7678    if (!Nskip) {
    7779      gprint (GP_ERR, "entry in %s not found\n", argv[2]);
     
    7981      return (FALSE);
    8082    }
    81     /* fix up header */
    82     {
    83       static char simple[] = "SIMPLE  =                    T / Standard FITS";
    84       int Ns, No;
    85 
    86       Ns = strlen (simple);
    87       No = 80 - Ns;
    88       strncpy (buf[0].header.buffer, simple, Ns);
    89       memset (&buf[0].header.buffer[Ns], ' ', No);
    90     }
    91     if (JustHead) {
    92       /* should be in CreateMatrix / CreateBuffer function */
    93       buf[0].header.Naxes = 0;
    94       ALLOCATE (buf[0].matrix.buffer, char, 1);
    95       buf[0].matrix.size = 0;
    96       buf[0].bitpix = 16;
    97       buf[0].bzero = 0;
    98       buf[0].bscale = 1;
    99       buf[0].matrix.bitpix = 16;
    100       buf[0].matrix.bzero = 0;
    101       buf[0].matrix.bscale = 1;
    102       buf[0].header.bitpix = 16;
    103       buf[0].header.bzero = 0;
    104       buf[0].header.bscale = 1;
    105       return (TRUE);
    106     }
    107     /* load matrix data */
    108     f = fopen (argv[2], "r");
    109     if (f == (FILE *) NULL) {
    110       gprint (GP_ERR, "file %s not found\n", argv[2]);
    111       DeleteBuffer (buf);
    112       return (FALSE);
    113     }
    114     fseek (f, Nskip, SEEK_SET);
    115     status = gfits_load_matrix (f, &buf[0].matrix, &buf[0].header);
    116     fclose (f);
    11783  }
    118 
     84  /* FITS extension by name */
    11985  if (ccdsel) {
    12086    char *CCDKeyword, ID[64];
     
    12894    done = FALSE;
    12995    for (i = 0; !done; i++) {
    130       Nskip = gfits_read_Xheader (argv[2], &buf[0].header, i);
     96      Nskip = gfits_fread_Xheader (f, &buf[0].header, i);
    13197      if (!Nskip) {
    13298        gprint (GP_ERR, "extension %s in %s not found\n", ccdid, argv[2]);
     
    144110      /* compare as numbers if both are pure numbers, else as strings */
    145111      done = strnumcmp (ccdid, ID);
    146 
    147112      if (!done) gfits_free_header (&buf[0].header);
    148113    }
    149114    free (CCDKeyword);
    150 
    151     /* fix up header */
    152     {
    153       static char simple[] = "SIMPLE  =                    T / Standard FITS";
    154       int Ns, No;
    155 
    156       Ns = strlen (simple);
    157       No = 80 - Ns;
    158       strncpy (buf[0].header.buffer, simple, Ns);
    159       memset (&buf[0].header.buffer[Ns], ' ', No);
    160     }
    161     if (JustHead) {
    162       buf[0].header.Naxes = 0;
    163       ALLOCATE (buf[0].matrix.buffer, char, 1);
    164       buf[0].matrix.size = 0;
    165       buf[0].bitpix = 16;
    166       buf[0].bzero = 0;
    167       buf[0].bscale = 1;
    168       buf[0].matrix.bitpix = 16;
    169       buf[0].matrix.bzero = 0;
    170       buf[0].matrix.bscale = 1;
    171       buf[0].header.bitpix = 16;
    172       buf[0].header.bzero = 0;
    173       buf[0].header.bscale = 1;
    174       return (TRUE);
    175     }
    176     /* load matrix data */
    177     f = fopen (argv[2], "r");
    178     if (f == (FILE *) NULL) {
    179       gprint (GP_ERR, "file %s not found\n", argv[2]);
    180       DeleteBuffer (buf);
    181       return (FALSE);
    182     }
    183     fseek (f, Nskip, SEEK_SET);
    184     status = gfits_load_matrix (f, &buf[0].matrix, &buf[0].header);
    185     fclose (f);
    186115  }
    187116
    188   if (!ccdsel && !extend) {
    189     status = gfits_read_header (argv[2], &buf[0].header);
    190     if (JustHead) {
    191       buf[0].header.Naxes = 0;
    192       ALLOCATE (buf[0].matrix.buffer, char, 1);
    193       buf[0].matrix.size = 0;
    194       buf[0].bitpix = 16;
    195       buf[0].bzero = 0;
    196       buf[0].matrix.bscale = 1;
    197       buf[0].matrix.bitpix = 16;
    198       buf[0].matrix.bzero = 0;
    199       buf[0].matrix.bscale = 1;
    200       return (TRUE);
    201     }
    202     Nplane = buf[0].header.Naxis[2];
    203     if (Nplane > 0) {
    204       if (plane > Nplane) {
    205         gprint (GP_ERR, "-plane is too large: %d total planes\n", Nplane);
    206         DeleteBuffer (buf);
    207         return (FALSE);
    208       }
    209       buf[0].header.Naxis[2] = 0;
    210       buf[0].header.Naxes = 2;
    211       gfits_modify (&buf[0].header, "NAXIS", "%d", 1, 2);
    212       gfits_delete (&buf[0].header, "NAXIS3", 1);
    213     }
    214     sprintf (region, "-1 -1 -1 -1 %d %d", (plane - 1), plane);
    215     status = gfits_read_segment (argv[2], &buf[0].matrix, region);
     117  /* fix up header, if needed */
     118  if (extend || ccdsel) {
     119    static char simple[] = "SIMPLE  =                    T / Standard FITS";
     120    int Ns, No;
     121
     122    Ns = strlen (simple);
     123    No = 80 - Ns;
     124    strncpy (buf[0].header.buffer, simple, Ns);
     125    memset (&buf[0].header.buffer[Ns], ' ', No);
    216126  }
     127
     128  /* for JustHead, we skip reading the data segment */
     129  if (JustHead) {
     130    /* should be in CreateMatrix / CreateBuffer function */
     131    buf[0].header.Naxes = 0;
     132    ALLOCATE (buf[0].matrix.buffer, char, 1);
     133    buf[0].matrix.size = 0;
     134    buf[0].bitpix = 16;
     135    buf[0].bzero = 0;
     136    buf[0].bscale = 1;
     137    buf[0].matrix.bitpix = 16;
     138    buf[0].matrix.bzero = 0;
     139    buf[0].matrix.bscale = 1;
     140    buf[0].header.bitpix = 16;
     141    buf[0].header.bzero = 0;
     142    buf[0].header.bscale = 1;
     143    return (TRUE);
     144  }
     145
     146  /* check for valid plane */
     147  Nplane = buf[0].header.Naxis[2];
     148  if (Nplane == 0) Nplane = 1;
     149  if (plane > Nplane) {
     150    gprint (GP_ERR, "-plane is too large: %d total planes\n", Nplane);
     151    DeleteBuffer (buf);
     152    return (FALSE);
     153  }
     154
     155  /* load matrix data */
     156  sprintf (region, "-1 -1 -1 -1 %d %d", (plane - 1), plane);
     157  status = gfits_fread_matrix_segment (f, &buf[0].matrix, &buf[0].header, region);
     158  fclose (f);
    217159
    218160  if (!status) {
     
    221163    return (FALSE);
    222164  }
     165
     166  /* adjust buffer to represent 2D data */
     167  if (Nplane > 1) {
     168    buf[0].header.Naxis[2] = 0;
     169    buf[0].header.Naxes = 2;
     170    gfits_modify (&buf[0].header, "NAXIS", "%d", 1, 2);
     171    gfits_delete (&buf[0].header, "NAXIS3", 1);
     172  }
     173
     174  /* we need to return a 2D array, convert 1D images to 2D (Naxis[1] = 1) */
    223175  if (buf[0].header.Naxes == 1) {
    224     /* we need to return an array, so make Naxis[1] = 1 */
    225176    buf[0].header.Naxes = 2;
    226177    buf[0].header.Naxis[1] = 1;
     
    239190 
    240191  return (TRUE);
    241 
    242192}
  • trunk/Ohana/src/opihi/cmd.data/rdseg.c

    r12902 r13040  
    3838  status = gfits_read_header (argv[2], &buf[0].header);
    3939  sprintf (region, "%d %d %d %d 0 1", x, nx + x, y, ny + y);
    40   status = gfits_read_segment (argv[2], &buf[0].matrix, region);
     40  status = gfits_read_matrix_segment (argv[2], &buf[0].matrix, region);
    4141  gfits_modify (&buf[0].header, "NAXIS1", "%d", 1, nx);
    4242  gfits_modify (&buf[0].header, "NAXIS2", "%d", 1, ny);
Note: See TracChangeset for help on using the changeset viewer.