Changeset 37348
- Timestamp:
- Sep 2, 2014, 5:01:02 PM (12 years ago)
- Location:
- branches/eam_branches/ipp-20140813/Ohana/src/dvomerge
- Files:
-
- 6 edited
-
include/dvoverify.h (modified) (1 diff)
-
src/dvo_image_merge_dbs.c (modified) (2 diffs)
-
src/dvoverify_args.c (modified) (2 diffs)
-
src/dvoverify_catalogs.c (modified) (2 diffs)
-
src/dvoverify_client.c (modified) (1 diff)
-
src/dvoverify_utils.c (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/ipp-20140813/Ohana/src/dvomerge/include/dvoverify.h
r34405 r37348 56 56 int LoadImageIDs (char *catdir); 57 57 int CheckImageID (Catalog *catalog); 58 59 int SaveImageIDsSmall(char *filename); 60 int LoadImageIDsSmall (char *filename); -
branches/eam_branches/ipp-20140813/Ohana/src/dvomerge/src/dvo_image_merge_dbs.c
r36833 r37348 179 179 off_t lastID = IDmap->old[IDmap->Nmap-1]; 180 180 181 // update measure.imageID 181 182 for (i = 0; i < catalog[0].Nmeasure; i++) { 182 183 oldID = catalog[0].measure[i].imageID; … … 200 201 catalog[0].measure[i].imageID = newID; 201 202 } 203 204 // also update lensing.imageID if lensing exists 205 for (i = 0; i < catalog[0].Nlensing; i++) { 206 oldID = catalog[0].lensing[i].imageID; 207 if (oldID == 0) continue; 208 209 newID = dvo_map_image_ID (IDmap, oldID); 210 if (newID == 0) { 211 if (oldID > lastID) { 212 fprintf (stderr, "problem with image IDs : input out of range\n"); 213 fprintf (stderr, "old ID: "OFF_T_FMT", last ID: "OFF_T_FMT"\n", oldID, lastID); 214 exit (2); 215 } 216 if (!IDmap->notFound[oldID]) { 217 fprintf (stderr, "cannot find image ID "OFF_T_FMT"\n", oldID); 218 IDmap->notFound[oldID] = TRUE; 219 // once we discover an imageID is not found, record that fact so we do not complain for every detection 220 } 221 // optionally exit here? or wait until end to report an error? 222 // exit (2); 223 } 224 catalog[0].lensing[i].imageID = newID; 225 } 202 226 return TRUE; 203 227 } -
branches/eam_branches/ipp-20140813/Ohana/src/dvomerge/src/dvoverify_args.c
r36101 r37348 56 56 } 57 57 58 /*** dvoverify -parallel (dvoverify_client, actually) ignores this argument 59 dvoverify should save a subset table of just the IDs, and dvoverify_client should load it 60 dvoverify -cpt should have CHECK_IMAGE_ID = F as default ***/ 58 /*** dvoverify -cpt should have CHECK_IMAGE_ID = F as default ***/ 61 59 62 60 CHECK_IMAGE_ID = TRUE; … … 150 148 } 151 149 150 CHECK_IMAGE_ID = TRUE; 151 if ((N = get_argument (*argc, argv, "-skip-image-ids"))) { 152 CHECK_IMAGE_ID = FALSE; 153 remove_argument (N, argc, argv); 154 } 155 152 156 // restrict to a portion of the sky 153 157 UserPatch.Rmin = 0; -
branches/eam_branches/ipp-20140813/Ohana/src/dvomerge/src/dvoverify_catalogs.c
r36084 r37348 47 47 } 48 48 49 sprintf (filename, "%s/%s.cpx", mycatdir, skylist[0].regions[i][0].name); 50 if (!VerifyTableFile (filename)) { 51 Nbad ++; 52 skipIndexCheck = TRUE; 53 AddFailures (filename); 54 } 55 56 sprintf (filename, "%s/%s.cpy", mycatdir, skylist[0].regions[i][0].name); 57 if (!VerifyTableFile (filename)) { 58 Nbad ++; 59 skipIndexCheck = TRUE; 60 AddFailures (filename); 61 } 62 49 63 sprintf (filename, "%s/%s.cpt", mycatdir, skylist[0].regions[i][0].name); 50 64 if (!skipIndexCheck) { … … 80 94 exit (1); 81 95 } 96 97 // save the IDlist as a smaller FITS table 98 if (CHECK_IMAGE_ID) { 99 char filename[DVO_MAX_PATH]; 100 snprintf (filename, DVO_MAX_PATH, "%s/ImageIDs.fits", CATDIR); 101 if (!SaveImageIDsSmall (filename)) { 102 fprintf (stderr, "ERROR: failure to save image IDs\n"); 103 exit (2); 104 } 105 } 82 106 83 107 int i; -
branches/eam_branches/ipp-20140813/Ohana/src/dvomerge/src/dvoverify_client.c
r34405 r37348 22 22 // XXX in client mode, we should be reading a reduced table generated by the calling 23 23 // serial program 24 LoadImageIDs (CATDIR); 24 char filename[DVO_MAX_PATH]; 25 snprintf (filename, DVO_MAX_PATH, "%s/ImageIDs.fits", CATDIR); 26 if (!LoadImageIDsSmall (filename)) { 27 fprintf (stderr, "ERROR: failure to load image IDs\n"); 28 exit (2); 29 } 25 30 } 26 31 -
branches/eam_branches/ipp-20140813/Ohana/src/dvomerge/src/dvoverify_utils.c
r36101 r37348 178 178 catalog.catformat = DVO_FORMAT_UNDEF; // read-only,do not set the catformat 179 179 catalog.catmode = DVO_MODE_UNDEF; // read-only, do not set the catmode 180 catalog.catflags = LOAD_AVES | LOAD_MEAS ;180 catalog.catflags = LOAD_AVES | LOAD_MEAS | LOAD_LENSING | LOAD_LENSOBJ; 181 181 catalog.Nsecfilt = 0; 182 182 … … 214 214 int NmeasureTotal = 0; 215 215 int measureOffsetOK = TRUE; 216 int NlensingTotal = 0; 217 int lensingOffsetOK = TRUE; 218 int NlensobjTotal = 0; 219 int lensobjOffsetOK = TRUE; 216 220 for (i = 0; i < catalog.Naverage; i++) { 217 221 NmeasureTotal += catalog.average[i].Nmeasure; … … 227 231 fprintf (stderr, "measureOffset + Nmeasure > catalog.Nmeasure : %d %d %d\n", i, catalog.average[i].Nmeasure, (int) catalog.Nmeasure); 228 232 } 233 234 // sum of Nlensing for each object < Nlensing for catalog 235 NlensingTotal += catalog.average[i].Nlensing; 236 if (VERBOSE && !(NlensingTotal <= catalog.Nlensing)) { 237 fprintf (stderr, "NlensingTotal > catalog.Nlensing: %d %d %d\n", i, catalog.average[i].Nlensing, (int) catalog.Nlensing); 238 } 239 // lensingOffset needs to be in range for each object 240 lensingOffsetOK &= (catalog.average[i].lensingOffset < catalog.Nlensing); 241 if (VERBOSE && !(catalog.average[i].lensingOffset < catalog.Nlensing)) { 242 fprintf (stderr, "lensingOffset >= catalog.Nlensing: %d %d %d\n", i, catalog.average[i].lensingOffset, (int) catalog.Nlensing); 243 } 244 lensingOffsetOK &= (catalog.average[i].lensingOffset + catalog.average[i].Nlensing <= catalog.Nlensing); 245 if (VERBOSE && !(catalog.average[i].lensingOffset + catalog.average[i].Nlensing <= catalog.Nlensing)) { 246 fprintf (stderr, "lensingOffset + Nlensing > catalog.Nlensing : %d %d %d\n", i, catalog.average[i].Nlensing, (int) catalog.Nlensing); 247 } 248 249 NlensobjTotal += catalog.average[i].Nlensobj; 250 if (VERBOSE && !(NlensobjTotal <= catalog.Nlensobj)) { 251 fprintf (stderr, "NlensobjTotal > catalog.Nlensobj: %d %d %d\n", i, catalog.average[i].Nlensobj, (int) catalog.Nlensobj); 252 } 253 lensobjOffsetOK &= (catalog.average[i].lensobjOffset < catalog.Nlensobj); 254 if (VERBOSE && !(catalog.average[i].lensobjOffset < catalog.Nlensobj)) { 255 fprintf (stderr, "lensobjOffset >= catalog.Nlensobj: %d %d %d\n", i, catalog.average[i].lensobjOffset, (int) catalog.Nlensobj); 256 } 257 lensobjOffsetOK &= (catalog.average[i].lensobjOffset + catalog.average[i].Nlensobj <= catalog.Nlensobj); 258 if (VERBOSE && !(catalog.average[i].lensobjOffset + catalog.average[i].Nlensobj <= catalog.Nlensobj)) { 259 fprintf (stderr, "lensobjOffset + Nlensobj > catalog.Nlensobj : %d %d %d\n", i, catalog.average[i].Nlensobj, (int) catalog.Nlensobj); 260 } 229 261 } 230 262 … … 236 268 if (NmeasureTotal != catalog.Nmeasure) { 237 269 fprintf (stderr, "ERROR: catalog %s has an invalid Nmeasure\n", catalog.filename); 270 status = FALSE; 271 } 272 273 if (!lensingOffsetOK) { 274 fprintf (stderr, "ERROR: catalog %s has an invalid lensingOffset\n", catalog.filename); 275 status = FALSE; 276 } 277 278 if (NlensingTotal != catalog.Nlensing) { 279 fprintf (stderr, "ERROR: catalog %s has an invalid Nlensing\n", catalog.filename); 280 status = FALSE; 281 } 282 283 if (!lensobjOffsetOK) { 284 fprintf (stderr, "ERROR: catalog %s has an invalid lensobjOffset\n", catalog.filename); 285 status = FALSE; 286 } 287 288 if (NlensobjTotal != catalog.Nlensobj) { 289 fprintf (stderr, "ERROR: catalog %s has an invalid Nlensobj\n", catalog.filename); 238 290 status = FALSE; 239 291 } … … 247 299 } 248 300 249 int objIDsOK = TRUE; 250 int catIDsOK = TRUE; 251 int averefOK = TRUE; 252 253 for (i = 0; i < catalog.Naverage; i++) { 254 m = catalog.average[i].measureOffset; 255 for (j = 0; j < catalog.average[i].Nmeasure; j++) { 256 objIDsOK &= (catalog.average[i].objID == catalog.measure[m+j].objID); 257 catIDsOK &= (catalog.average[i].catID == catalog.measure[m+j].catID); 258 averefOK &= (catalog.measure[m+j].averef == i); 259 } 260 } 301 // check measure <-> average links 302 { 303 int objIDsOK = TRUE; 304 int catIDsOK = TRUE; 305 int averefOK = TRUE; 306 307 for (i = 0; i < catalog.Naverage; i++) { 308 m = catalog.average[i].measureOffset; 309 for (j = 0; j < catalog.average[i].Nmeasure; j++) { 310 objIDsOK &= (catalog.average[i].objID == catalog.measure[m+j].objID); 311 catIDsOK &= (catalog.average[i].catID == catalog.measure[m+j].catID); 312 averefOK &= (catalog.measure[m+j].averef == i); 313 } 314 } 261 315 262 if (!objIDsOK) { 263 fprintf (stderr, "ERROR: catalog %s has invalid obj IDs\n", catalog.filename); 264 status = FALSE; 265 } 266 if (!catIDsOK) { 267 fprintf (stderr, "ERROR: catalog %s has invalid cat IDs\n", catalog.filename); 268 status = FALSE; 269 } 270 if (!averefOK) { 271 fprintf (stderr, "ERROR: catalog %s has invalid averef values\n", catalog.filename); 272 status = FALSE; 316 if (!objIDsOK) { 317 fprintf (stderr, "ERROR: catalog %s has invalid obj IDs\n", catalog.filename); 318 status = FALSE; 319 } 320 if (!catIDsOK) { 321 fprintf (stderr, "ERROR: catalog %s has invalid cat IDs\n", catalog.filename); 322 status = FALSE; 323 } 324 if (!averefOK) { 325 fprintf (stderr, "ERROR: catalog %s has invalid averef values\n", catalog.filename); 326 status = FALSE; 327 } 328 } 329 330 // check lensing <-> average links 331 { 332 int objIDsOK = TRUE; 333 int catIDsOK = TRUE; 334 int averefOK = TRUE; 335 336 for (i = 0; i < catalog.Naverage; i++) { 337 m = catalog.average[i].lensingOffset; 338 for (j = 0; j < catalog.average[i].Nlensing; j++) { 339 objIDsOK &= (catalog.average[i].objID == catalog.lensing[m+j].objID); 340 catIDsOK &= (catalog.average[i].catID == catalog.lensing[m+j].catID); 341 averefOK &= (catalog.lensing[m+j].averef == i); 342 } 343 } 344 345 if (!objIDsOK) { 346 fprintf (stderr, "ERROR: catalog %s has invalid lensing obj IDs\n", catalog.filename); 347 status = FALSE; 348 } 349 if (!catIDsOK) { 350 fprintf (stderr, "ERROR: catalog %s has invalid lensing cat IDs\n", catalog.filename); 351 status = FALSE; 352 } 353 if (!averefOK) { 354 fprintf (stderr, "ERROR: catalog %s has invalid lensing averef values\n", catalog.filename); 355 status = FALSE; 356 } 357 } 358 359 // check lensobj <-> average links 360 { 361 int objIDsOK = TRUE; 362 int catIDsOK = TRUE; 363 364 for (i = 0; i < catalog.Naverage; i++) { 365 m = catalog.average[i].lensobjOffset; 366 for (j = 0; j < catalog.average[i].Nlensobj; j++) { 367 objIDsOK &= (catalog.average[i].objID == catalog.lensobj[m+j].objID); 368 catIDsOK &= (catalog.average[i].catID == catalog.lensobj[m+j].catID); 369 } 370 } 371 372 if (!objIDsOK) { 373 fprintf (stderr, "ERROR: catalog %s has invalid lensobj obj IDs\n", catalog.filename); 374 status = FALSE; 375 } 376 if (!catIDsOK) { 377 fprintf (stderr, "ERROR: catalog %s has invalid lensobj cat IDs\n", catalog.filename); 378 status = FALSE; 379 } 273 380 } 274 381 … … 321 428 } 322 429 } 430 431 for (i = 0; i < catalog[0].Naverage; i++) { 432 m = catalog[0].average[i].lensingOffset; 433 for (j = 0; j < catalog[0].average[i].Nlensing; j++) { 434 id = catalog[0].lensing[m+j].imageID; 435 if (id == 0) continue; // detections from ref photcodes can (should) have unset image IDs 436 if (id > maxID) { 437 Nfail ++; 438 continue; 439 // is this sufficient to catch IDs set without an image table? 440 } 441 if (IDlist) { 442 if (IDlist[id] < 0) { 443 Nfail ++; 444 continue; 445 } 446 } else { 447 if (id > 0) { 448 Nfail ++; 449 continue; 450 } 451 } 452 } 453 } 454 323 455 return Nfail; 324 456 } … … 382 514 return TRUE; 383 515 } 516 517 # define GET_COLUMN(OUT,NAME,TYPE) \ 518 OUT = gfits_get_bintable_column_data (&theader, &ftable, NAME, type, &Nrow, &Ncol); \ 519 myAssert (!strcmp(type, #TYPE), "wrong column type"); 520 521 // STATUS is value expected for success 522 # define CHECK_STATUS(STATUS,MSG,...) \ 523 if (!(STATUS)) { \ 524 fprintf (stderr, MSG, __VA_ARGS__); \ 525 return FALSE; \ 526 } 527 528 // write out the IDmap data for clients to read 529 int SaveImageIDsSmall(char *filename) { 530 531 Header header; 532 Header theader; 533 Matrix matrix; 534 FTable ftable; 535 536 gfits_init_header (&header); 537 header.extend = TRUE; 538 gfits_create_header (&header); 539 gfits_create_matrix (&header, &matrix); 540 541 gfits_create_table_header (&theader, "BINTABLE", "IMAGE_IDS"); 542 543 gfits_define_bintable_column (&theader, "J", "IMAGE_IDS", "image IDs", NULL, 1.0, FT_BZERO_INT32); 544 545 // generate the output array that carries the data 546 gfits_create_table (&theader, &ftable); 547 548 // add the columns to the output array 549 gfits_set_bintable_column (&theader, &ftable, "IMAGE_IDS", IDlist, maxID + 1); 550 551 FILE *f = fopen (filename, "w"); 552 if (!f) { 553 fprintf (stderr, "ERROR: cannot open image ID file for output %s\n", filename); 554 return FALSE; 555 } 556 557 int status; 558 status = gfits_fwrite_header (f, &header); 559 CHECK_STATUS (status, "ERROR: cannot write header for image ID file %s\n", filename); 560 561 status = gfits_fwrite_matrix (f, &matrix); 562 CHECK_STATUS (status, "ERROR: cannot write matrix for image ID file %s\n", filename); 563 564 status = gfits_fwrite_Theader (f, &theader); 565 CHECK_STATUS (status, "ERROR: cannot write table header for image ID file %s\n", filename); 566 567 status = gfits_fwrite_table (f, &ftable); 568 CHECK_STATUS (status, "ERROR: cannot write table data for image ID file %s\n", filename); 569 570 gfits_free_header (&header); 571 gfits_free_matrix (&matrix); 572 gfits_free_header (&theader); 573 gfits_free_table (&ftable); 574 575 int fd = fileno (f); 576 577 status = fflush (f); 578 CHECK_STATUS (!status, "ERROR: cannot flush file image ID file %s\n", filename); 579 580 status = fsync (fd); 581 CHECK_STATUS (!status, "ERROR: cannot flush file image ID file %s\n", filename); 582 583 status = fclose (f); 584 CHECK_STATUS (!status, "ERROR: problem closing image ID file file %s\n", filename); 585 586 return TRUE; 587 } 588 589 int LoadImageIDsSmall (char *filename) { 590 591 int Ncol; 592 off_t Nrow; 593 Header header; 594 Header theader; 595 Matrix matrix; 596 FTable ftable; 597 598 FILE *f = fopen (filename, "r"); 599 if (!f) { 600 fprintf (stderr, "ERROR: cannot open image subset file %s\n", filename); 601 return FALSE; 602 } 603 604 /* load in PHU segment (ignore) */ 605 if (!gfits_fread_header (f, &header)) { 606 if (VERBOSE) fprintf (stderr, "can't read image subset header\n"); 607 fclose (f); 608 return FALSE; 609 } 610 if (!gfits_fread_matrix (f, &matrix, &header)) { 611 if (VERBOSE) fprintf (stderr, "can't read image subset matrix\n"); 612 gfits_free_header (&header); 613 fclose (f); 614 return FALSE; 615 } 616 617 ftable.header = &theader; 618 619 // load data for this header 620 if (!gfits_load_header (f, &theader)) { 621 fclose (f); 622 return FALSE; 623 } 624 625 // read the fits table bytes 626 if (!gfits_fread_ftable_data (f, &ftable, FALSE)) { 627 fclose (f); 628 return FALSE; 629 } 630 fclose (f); 631 632 char type[16]; 633 634 GET_COLUMN (IDlist, "IMAGE_IDS", int); 635 maxID = Nrow - 1; 636 fprintf (stderr, "loaded data for %lld images\n", (long long) Nrow); 637 638 return TRUE; 639 } 640
Note:
See TracChangeset
for help on using the changeset viewer.
