Changeset 5144 for trunk/Ohana/src/opihi/dvo/cmpread.c
- Timestamp:
- Sep 27, 2005, 7:43:49 AM (21 years ago)
- File:
-
- 1 edited
-
trunk/Ohana/src/opihi/dvo/cmpread.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/opihi/dvo/cmpread.c
r4689 r5144 1 1 # include "dvo1.h" 2 # define D_NSTARS 1000 3 # define BYTES_STAR 66 4 # define BLOCK 1000 2 3 /* add others as needed */ 4 enum {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}; 5 5 6 6 int cmpread (int argc, char **argv) { 7 7 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; 13 11 FILE *f; 14 char *buffer; 15 int Nfield, Nra, Ndec; 16 Vector *rvec, *dvec, *vec; 12 Vector *vec; 17 13 Header header; 18 14 Coords coords; 15 CMPstars *stars; 19 16 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"); 23 19 return (FALSE); 24 20 } 25 21 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]); 48 37 return (FALSE); 49 38 } 50 39 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]); 58 45 return (FALSE); 59 46 } 60 47 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"); 62 58 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]); 66 60 fits_free_header (&header); 67 61 return (FALSE); … … 69 63 fseek (f, header.size, SEEK_SET); 70 64 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); 88 70 } 89 71 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); 102 86 } 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); 143 88 } 144 89 fclose (f); 145 90 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); 146 139 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); 152 141 return (TRUE); 153 142 } 154
Note:
See TracChangeset
for help on using the changeset viewer.
