Changeset 20186
- Timestamp:
- Oct 16, 2008, 9:15:20 AM (18 years ago)
- File:
-
- 1 edited
-
trunk/Ohana/src/relphot/src/GridOps.c (modified) (15 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/relphot/src/GridOps.c
r15509 r20186 23 23 int *Fx, *Fy; /* chip flip */ 24 24 int *Ox, *Oy; /* chip offset */ 25 int *valid; 25 26 char **ccdname; 26 27 } camera; 28 29 static int *ccdnum; 30 static char *config; 27 31 28 32 # ifdef GRID_V1 … … 49 53 void initGrid (int dX, int dY) { 50 54 51 int i; 52 char field[64], *config, line[256]; 55 int i, N, ccdnum_max; 56 char *p, field[64], line[256]; 57 int *Fx, *Fy; /* chip flip */ 58 int *Ox, *Oy; /* chip offset */ 59 char **ccdname; 53 60 54 61 /* load camera config file */ … … 66 73 ScanConfig (config, "NAXIS2", "%d", 1, &camera.Ny); 67 74 68 ALLOCATE (camera.Fx, int, camera.Nchip); 69 ALLOCATE (camera.Fy, int, camera.Nchip); 70 ALLOCATE (camera.Ox, int, camera.Nchip); 71 ALLOCATE (camera.Oy, int, camera.Nchip); 72 ALLOCATE (camera.ccdname, char *, camera.Nchip); 75 // temporary storage 76 ALLOCATE (Fx, int, camera.Nchip); 77 ALLOCATE (Fy, int, camera.Nchip); 78 ALLOCATE (Ox, int, camera.Nchip); 79 ALLOCATE (Oy, int, camera.Nchip); 80 ALLOCATE (ccdname, char *, camera.Nchip); 81 ALLOCATE (ccdnum, int, camera.Nchip); 73 82 74 83 /* load per-chip parameters */ 75 84 for (i = 0; i < camera.Nchip; i++) { 76 ALLOCATE (c amera.ccdname[i], char, 256);85 ALLOCATE (ccdname[i], char, 256); 77 86 sprintf (field, "CCD.%d", i); 78 87 ScanConfig (config, field, "%s", 1, line); 79 sscanf (line, "%s %d %d %d %d", camera.ccdname[i], &camera.Ox[i], &camera.Oy[i], &camera.Fx[i], &camera.Fy[i]); 80 } 81 free (config); 88 // XXX get error status! 89 90 sscanf (line, "%s %d %d %d %d", ccdname[i], &Ox[i], &Oy[i], &Fx[i], &Fy[i]); 91 92 p = ccdname[i]; 93 while (!isdigit(*p) && *p) p++; 94 if (*p == 0) continue; 95 ccdnum[i] = atoi (p); 96 } 97 98 /* we now have the parameters loaded into a minimal length list; reshuffle to the a list of length 0 - MAX(ccdnum) */ 99 ccdnum_max = 0; 100 for (i = 0; i < camera.Nchip; i++) { 101 ccdnum_max = MAX(ccdnum_max, ccdnum[i]); 102 } 103 ccdnum_max ++; 104 105 if (ccdnum_max < camera.Nchip) { 106 fprintf (stderr, "problem with camera config: duplicate ccd IDs\n"); 107 exit (1); 108 } 109 110 if (ccdnum_max > 0x1000) { 111 fprintf (stderr, "problem with camera config: absurd max ccd ID number %d\n", ccdnum_max); 112 exit (1); 113 } 114 115 ALLOCATE (camera.Fx, int, ccdnum_max); 116 ALLOCATE (camera.Fy, int, ccdnum_max); 117 ALLOCATE (camera.Ox, int, ccdnum_max); 118 ALLOCATE (camera.Oy, int, ccdnum_max); 119 ALLOCATE (camera.valid, int, ccdnum_max); 120 ALLOCATE (camera.ccdname, char *, ccdnum_max); 121 122 for (i = 0; i < ccdnum_max; i++) { 123 camera.valid[i] = FALSE; 124 } 125 126 for (i = 0; i < camera.Nchip; i++) { 127 N = ccdnum[i]; 128 camera.Fx[N] = Fx[i]; 129 camera.Fy[N] = Fy[i]; 130 camera.Ox[N] = Ox[i]; 131 camera.Oy[N] = Oy[i]; 132 camera.ccdname[N] = ccdname[i]; 133 camera.valid[N] = TRUE; 134 } 82 135 83 136 /* define mosaic 2d correction grid: … … 215 268 bin[cat][meas] = i; 216 269 Xmeas[cat][meas] = x + camera.Ox[ccdnum]*camera.Nx; 217 Ymeas[cat][meas] = Y+ camera.Oy[ccdnum]*camera.Ny;270 Ymeas[cat][meas] = y + camera.Oy[ccdnum]*camera.Ny; 218 271 clist[i][Nlist[i]] = cat; 219 272 mlist[i][Nlist[i]] = meas; … … 248 301 void setMgrid (Catalog *catalog) { 249 302 250 int i, j, m, c, n, N, Nmax ;303 int i, j, m, c, n, N, Nmax, Nbad, Nmos, Ncal, Nrel, Nsys; 251 304 double *list, *dlist; 252 305 float Msys, Mrel, Mcal, Mmos; … … 261 314 ALLOCATE (list, double, Nmax); 262 315 ALLOCATE (dlist, double, Nmax); 316 317 Nbad = Ncal = Nmos = Nrel = Nsys = 0; 263 318 264 319 for (i = 0; i < Ngrid; i++) { … … 270 325 c = clist[i][j]; 271 326 272 if (catalog[c].measure[m].dbFlags & MEAS_BAD) continue; 327 if (catalog[c].measure[m].dbFlags & MEAS_BAD) { 328 Nbad ++; 329 continue; 330 } 273 331 Mcal = getMcal (m, c); 274 if (isnan(Mcal)) continue; 332 if (isnan(Mcal)) { 333 Ncal ++; 334 continue; 335 } 275 336 Mmos = getMmos (m, c); 276 if (isnan(Mmos)) continue; 337 if (isnan(Mmos)) { 338 Nmos ++; 339 continue; 340 } 277 341 Mrel = getMrel (catalog, m, c); 278 if (isnan(Mrel)) continue; 342 if (isnan(Mrel)) { 343 Nrel ++; 344 continue; 345 } 279 346 280 347 n = catalog[c].measure[m].averef; 281 348 Msys = PhotSys (&catalog[c].measure[m], &catalog[c].average[n], &catalog[c].secfilt[n*PhotNsec]); 349 if (isnan(Msys)) { 350 Nsys++; 351 continue; 352 } 282 353 list[N] = Msys - Mrel - Mcal - Mmos; 283 354 dlist[N] = MAX (catalog[c].measure[m].dM, MIN_ERROR); … … 290 361 gridN[i] = N; 291 362 } 363 364 fprintf (stderr, "grid cells having too few measurements (Nbad: %d, Nmos: %d, Ncal: %d, Nrel: %d, Nsys: %d)\n", Nbad, Nmos, Ncal, Nrel, Nsys); 365 292 366 free (list); 293 367 free (dlist); … … 347 421 graphdata.ymin = PlotdMmin; 348 422 graphdata.ymax = PlotdMmax; 349 plot_list (&graphdata, xlist, Mlist, N, "X vs dM raw", " XdM.png");350 plot_list (&graphdata, xlist, dlist, N, "X vs dM corrected", " XdMf.png");351 plot_list (&graphdata, ylist, dlist, N, "Y vs dM corrected", " YdMf.png");423 plot_list (&graphdata, xlist, Mlist, N, "X vs dM raw", "%s.XdM.png", OUTROOT); 424 plot_list (&graphdata, xlist, dlist, N, "X vs dM corrected", "%s.XdMf.png", OUTROOT); 425 plot_list (&graphdata, ylist, dlist, N, "Y vs dM corrected", "%s.YdMf.png", OUTROOT); 352 426 353 427 plot_defaults (&graphdata); 354 plot_list (&graphdata, xlist, ylist, N, "X vs Y", " XY.png");428 plot_list (&graphdata, xlist, ylist, N, "X vs Y", "%s.XY.png", OUTROOT); 355 429 356 430 free (ylist); … … 363 437 void dump_grid () { 364 438 365 int i, j, Nimage;439 int i, j, Nimage, Nbytes, Nformat; 366 440 int *imlist; 367 441 FILE *f; … … 369 443 Matrix matrix; 370 444 Mosaic *refmosaic; 445 char *filename; 446 char formatline[32], key[32], value[64]; 371 447 448 Nbytes = strlen (OUTROOT) + 6; 449 ALLOCATE (filename, char, Nbytes); 450 snprintf (filename, Nbytes, "%s.fits", OUTROOT); 451 372 452 /* select reference mosaic image */ 373 453 imlist = SelectRefMosaic (&refmosaic, &Nimage); 374 454 375 455 /* we are writing to this file */ 376 f = fopen ( "mosaic.fits", "w");456 f = fopen (filename, "w"); 377 457 if (f == (FILE *) NULL) { 378 fprintf (stderr, "cannot open %s for output\n", "mosaic.fits"); 458 fprintf (stderr, "cannot open %s for output\n", filename); 459 free (filename); 379 460 return; 380 461 } … … 388 469 gfits_modify (&header, "FILTER", "%s", 1, photcode[0].name); 389 470 gfits_modify (&header, "COMMENT", "%S", 1, "Mosaic Photometry Grid Analysis"); 471 472 // we need to add lines to the PHU to identify the camera and format; these are used by the ipp config system 473 // Note that config must have been loaded (and not freed) above. 474 ScanConfig (config, "NFORMAT", "%d", 1, &Nformat); 475 for (i = 1; i <= Nformat; i++) { 476 ScanConfig (config, "FORMAT", "%s", i, formatline); 477 sscanf (formatline, "%s %s", key, value); 478 gfits_modify (&header, key, "%s", 1, value); 479 } 480 390 481 gfits_fwrite_header (f, &header); 391 482 gfits_fwrite_matrix (f, &matrix); … … 483 574 /* grid pixels are tied to detector pixels, but are flipped to match focal plane */ 484 575 for (i = 0; i < camera.Nchip; i++) { 485 int ix, iy, x, y, X, Y, bin; 486 487 gfits_modify (&theader, "EXTNAME", "%s", 1, camera.ccdname[i]); 576 int N, ix, iy, x, y, X, Y, bin; 577 578 N = ccdnum[i]; 579 580 gfits_modify (&theader, "EXTNAME", "%s", 1, camera.ccdname[N]); 488 581 gfits_modify (&theader, "FILTER", "%s", 1, photcode[0].name); 489 582 gfits_modify (&theader, "NX", "%d", 1, camera.Nx); … … 501 594 /* normalize X & Y */ 502 595 x = X; 503 if (camera.Fx[ i]) x = RELPHOT_GRID_X - X - 1;596 if (camera.Fx[N]) x = RELPHOT_GRID_X - X - 1; 504 597 y = Y; 505 if (camera.Fy[ i]) y = RELPHOT_GRID_Y - Y - 1;598 if (camera.Fy[N]) y = RELPHOT_GRID_Y - Y - 1; 506 599 507 600 /* coordinates in the grid */ 508 ix = x + camera.Ox[ i]*RELPHOT_GRID_X;509 iy = y + camera.Oy[ i]*RELPHOT_GRID_Y;601 ix = x + camera.Ox[N]*RELPHOT_GRID_X; 602 iy = y + camera.Oy[N]*RELPHOT_GRID_Y; 510 603 511 604 bin = ix + iy*gridX; … … 519 612 # endif 520 613 614 free (filename); 521 615 } 522 616
Note:
See TracChangeset
for help on using the changeset viewer.
