IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Sep 27, 2005, 7:43:49 AM (21 years ago)
Author:
eugene
Message:

minor cleanups, web edits

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana/src/opihi/dvo/cmpread.c

    r4689 r5144  
    11# include "dvo1.h"
    2 # define D_NSTARS 1000
    3 # define BYTES_STAR 66
    4 # define BLOCK 1000
     2
     3/* add others as needed */
     4enum {F_NONE, F_RA, F_DEC, F_X, F_Y, F_MAG, F_DMAG, F_TYPE, F_SKY, F_FX, F_FY, F_APMAG, F_GALMAG};
    55
    66int cmpread (int argc, char **argv) {
    77 
    8   int i, nstar, Nin, Nextra;
    9   int doneread, done, Nskip, Nbytes, nbytes, Ninstar, RAnDEC;
    10   char *c, *c2, *name, *file;
    11   float *R, *D, *V;
    12   double tR, tD, tmp, X, Y;
     8  int i, field, extend, Nbytes, Nstars;
     9  double tR, tD;
     10  float value;
    1311  FILE *f;
    14   char *buffer;
    15   int Nfield, Nra, Ndec;
    16   Vector *rvec, *dvec, *vec;
     12  Vector *vec;
    1713  Header header;
    1814  Coords coords;
     15  CMPstars *stars;
    1916
    20   if ((argc != 4) && (argc != 6)) {
    21     fprintf (stderr, "USAGE: cmpread name Nfield <filename>\n");
    22     fprintf (stderr, "USAGE: cmpread ra N dec N <filename>\n");
     17  if (argc != 3) {
     18    fprintf (stderr, "USAGE: cmpread field <filename>\n");
    2319    return (FALSE);
    2420  }
    2521
    26   R = D = V = NULL;
    27   file = NULL;
    28   name = NULL;
    29   Nfield = Nra = Ndec = 0;
    30   RAnDEC = FALSE;
    31 
    32   if (argc == 4) {
    33     name = strcreate (argv[1]);
    34     Nfield = atof (argv[2]);
    35     file = strcreate (argv[3]);
    36     RAnDEC = FALSE;
    37   } else {
    38     Nra  = atof (argv[2]);
    39     Ndec = atof (argv[4]);
    40     file = strcreate (argv[5]);
    41     RAnDEC = TRUE;
    42   }   
    43 
    44   if (!fits_read_header (file, &header)) {
    45     fprintf (stderr, "ERROR: can't read header for %s\n", file);
    46     free (file);
    47     if (!RAnDEC) free (name);
     22  field = F_NONE;
     23  if (!strcasecmp (argv[1], "ra"))   field = F_RA;
     24  if (!strcasecmp (argv[1], "dec"))  field = F_DEC;
     25  if (!strcasecmp (argv[1], "mag"))  field = F_MAG;
     26  if (!strcasecmp (argv[1], "dmag")) field = F_DMAG;
     27  if (!strcasecmp (argv[1], "x"))    field = F_X;
     28  if (!strcasecmp (argv[1], "y"))    field = F_Y;
     29  if (!strcasecmp (argv[1], "type")) field = F_TYPE;
     30  if (!strcasecmp (argv[1], "sky"))  field = F_SKY;
     31  if (!strcasecmp (argv[1], "fx"))   field = F_FX;
     32  if (!strcasecmp (argv[1], "fy"))   field = F_FY;
     33  if (!strcasecmp (argv[1], "apmag"))  field = F_APMAG;
     34  if (!strcasecmp (argv[1], "galmag"))  field = F_GALMAG;
     35  if (field == F_NONE) {
     36    fprintf (stderr, "invalid cmp field: %s\n", argv[1]);
    4837    return (FALSE);
    4938  }
    5039
    51   /* find expected number of stars */
    52   fits_scan (&header, "NSTARS", "%d", 1, &nstar);
    53   if (nstar == 0) {
    54     fprintf (stderr, "ERROR: can't get NSTARS from header\n");
    55     free (file);
    56     if (!RAnDEC) free (name);
    57     fits_free_header (&header);
     40  if ((vec = SelectVector (argv[1],  ANYVECTOR, TRUE)) == NULL) return (FALSE);
     41
     42  /* load FITS header */
     43  if (!fits_read_header (argv[2], &header)) {
     44    fprintf (stderr, "ERROR: can't read header for %s\n", argv[2]);
    5845    return (FALSE);
    5946  }
    6047
    61   f = fopen (file, "r");
     48  if ((field == F_RA) || (field == F_DEC)) {
     49    if (!GetCoords (&coords, &header)) {
     50      fprintf (stderr, "can't get WCS info from header\n");
     51      fits_free_header (&header);
     52      return (FALSE);
     53    }
     54  }
     55
     56  /* re-open file to load data */
     57  f = fopen (argv[2], "r");
    6258  if (f == NULL) {
    63     fprintf (stderr, "ERROR: can't read data from %s\n", file);
    64     free (file);
    65     if (!RAnDEC) free (name);
     59    fprintf (stderr, "ERROR: can't read data from %s\n", argv[2]);
    6660    fits_free_header (&header);
    6761    return (FALSE);
     
    6963  fseek (f, header.size, SEEK_SET);
    7064
    71   if (RAnDEC) {
    72     if ((rvec = SelectVector ("ra",  ANYVECTOR, TRUE)) == NULL) return (FALSE);
    73     if ((dvec = SelectVector ("dec",  ANYVECTOR, TRUE)) == NULL) return (FALSE);
    74     REALLOCATE (rvec[0].elements, float, nstar);
    75     REALLOCATE (dvec[0].elements, float, nstar);
    76     R = rvec[0].elements;
    77     D = dvec[0].elements;
    78     rvec[0].Nelements = dvec[0].Nelements = nstar;
    79     if (!GetCoords (&coords, &header)) {
    80       fprintf (stderr, "can't get WCS info from header\n");
    81       return (FALSE);
    82     }
    83   } else {
    84     if ((vec = SelectVector (name, ANYVECTOR, TRUE)) == NULL) return (FALSE);
    85     REALLOCATE (vec[0].elements, float, nstar);
    86     V = vec[0].elements;
    87     vec[0].Nelements = nstar;
     65  /* find expected number of stars */
     66  if (!fits_scan (&header, "NSTARS", "%d", 1, &Nstars)) {
     67    fprintf (stderr, "ERROR: can't get NSTARS from header\n");
     68    fits_free_header (&header);
     69    return (FALSE);
    8870  }
    8971
    90   /* load in stars by blocks of 1000 */
    91   Nin = 0;
    92   ALLOCATE (buffer, char, (BLOCK*BYTES_STAR) + 1);
    93   buffer[BLOCK*BYTES_STAR] = 0;
    94   Nextra = 0;
    95   doneread = FALSE;
    96   while (!doneread) {
    97     Nbytes = BYTES_STAR * BLOCK - Nextra;
    98     nbytes = fread (&buffer[Nextra], 1, Nbytes, f);
    99     if (nbytes == 0) {
    100       doneread = TRUE;
    101       continue;
     72  /* read from FITS table or from text table */
     73  extend = FALSE;
     74  fits_scan (&header, "EXTEND",  "%t", 1, &extend);
     75  if (extend) {
     76    fprintf (stderr, "reading from FITS cmp file %s\n", argv[2]);
     77    Nbytes = fits_matrix_size (&header);
     78    fseek (f, Nbytes, SEEK_CUR);
     79    stars = cmpReadFits (f, &Nstars);
     80  } else {
     81    /* allocate space for stars */
     82    fprintf (stderr, "reading from TEXT cmp file %s\n", argv[2]);
     83    if (!fits_scan (&header, "NSTARS", "%d", 1, &Nstars)) {
     84      fprintf (stderr, "ERROR: failed to find NSTARS\n");
     85      exit (1);
    10286    }
    103     nbytes += Nextra;
    104     /* check line-by-line integrity */
    105     c = buffer;
    106     done = FALSE;
    107     while ((c < buffer + nbytes) && (!done)) {
    108       for (c2 = c; *c2 == '\n'; c2++);
    109       if (c2 > c) { /* extra return chars */
    110         memmove (c, c2, (int)(buffer + nbytes - c2));
    111         Nskip = c2 - c;
    112         nbytes -= Nskip;
    113         bzero (buffer + nbytes, Nskip);
    114       }
    115       c2 = strchr (c, '\n');
    116       if (c2 == (char *) NULL) {
    117         done = TRUE;   
    118         continue;
    119       }
    120       c2++;
    121       if ((c2 - c) != BYTES_STAR) { /* bad line, delete it */
    122         memmove (c, c2, (int)(buffer + nbytes - c2));
    123         Nskip = c2 - c;
    124         nbytes -= Nskip;
    125         bzero (buffer + nbytes, Nskip);
    126       } else {
    127         c = c2;
    128       }
    129     }
    130     Ninstar = nbytes / BYTES_STAR;
    131     Nextra = nbytes % BYTES_STAR;
    132     for (i = 0; i < Ninstar; i++, Nin++) {
    133       if (RAnDEC) {
    134         dparse (&X, Nra,  &buffer[i*BYTES_STAR]);
    135         dparse (&Y, Ndec, &buffer[i*BYTES_STAR]);
    136         XY_to_RD (&tR, &tD, X, Y, &coords);
    137         R[Nin] = tR; D[Nin] = tD;
    138       } else {
    139         dparse (&tmp, Nfield, &buffer[i*BYTES_STAR]);
    140         V[Nin] = tmp;
    141       }
    142     }
     87    stars = cmpReadText (f, &Nstars);
    14388  }
    14489  fclose (f);
    14590
     91  REALLOCATE (vec[0].elements, float, Nstars);
     92  vec[0].Nelements = Nstars;
     93  bzero (vec[0].elements, Nstars*sizeof(float));
     94
     95  for (i = 0; i < Nstars; i++) {
     96    switch (field) {
     97      case F_RA:
     98        XY_to_RD (&tR, &tD, stars[i].X, stars[i].Y, &coords);
     99        value = tR;
     100        break;
     101      case F_DEC:
     102        XY_to_RD (&tR, &tD, stars[i].X, stars[i].Y, &coords);
     103        value = tD;
     104        break;
     105      case F_X:
     106        value = stars[i].X;
     107        break;
     108      case F_Y:
     109        value = stars[i].Y;
     110        break;
     111      case F_MAG:
     112        value = stars[i].M;
     113        break;
     114      case F_APMAG:
     115        value = stars[i].Map;
     116        break;
     117      case F_GALMAG:
     118        value = stars[i].Mgal;
     119        break;
     120      case F_DMAG:
     121        value = stars[i].dM;
     122        break;
     123      case F_TYPE:
     124        value = stars[i].dophot;
     125        break;
     126      case F_SKY:
     127        value = stars[i].sky;
     128        break;
     129      case F_FX:
     130        value = stars[i].fx;
     131        break;
     132      case F_FY:
     133        value = stars[i].fy;
     134        break;
     135    }
     136    vec[0].elements[i] = value;
     137  }     
     138  free (stars);
    146139  fits_free_header (&header);
    147   free (buffer);
    148   free (file);
    149   if (!RAnDEC) free (name);
    150 
    151   fprintf (stderr, "loaded %d objects\n", Nin);
     140  fprintf (stderr, "loaded %d objects\n", Nstars);
    152141  return (TRUE);
    153142}
    154 
Note: See TracChangeset for help on using the changeset viewer.