Changeset 5234 for trunk/Ohana/src/libohana
- Timestamp:
- Oct 7, 2005, 6:33:25 AM (21 years ago)
- Location:
- trunk/Ohana/src/libohana
- Files:
-
- 3 edited
-
include/dvo.h (modified) (5 diffs)
-
src/dvo_catalog.c (modified) (1 diff)
-
src/dvo_catalog_split.c (modified) (11 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/libohana/include/dvo.h
r5228 r5234 24 24 25 25 /* catalog values to be loaded */ 26 # define LOAD_AVES 0x01 27 # define LOAD_MEAS 0x02 28 # define LOAD_MISS 0x04 29 # define LOAD_SECF 0x08 26 # define LOAD_AVES 0x01 27 # define LOAD_MEAS 0x02 28 # define LOAD_MISS 0x04 29 # define LOAD_SECF 0x08 30 # define LOAD_MEAS_META 0x10 30 31 31 32 /* invalid mag value */ … … 128 129 Missing *missing; 129 130 SecFilt *secfilt; 130 int Naverage, Nmeasure, Nmissing, Nsecfilt; 131 int Naverage, Nmeasure, Nmissing, Nsecfilt; /* current number of each component */ 132 int Nave_disk, Nmeas_disk, Nmiss_disk; /* number of component on disk */ 133 int Nmeas_off; /* dist seq of first loaded data value */ 134 /* note the different counting for Nsecfilt */ 131 135 132 136 /* pointers to split data files */ … … 139 143 int catmode; /* storage mode (raw, mef, split, mysql) */ 140 144 int catformat; /* storage format (elixir, panstarrs, etc) */ 141 int ordered; /* is measure table average-ordered? */145 int sorted; /* is measure table average-sorted? */ 142 146 143 147 /* pointers for data manipulation */ … … 177 181 int load_catalog (Catalog *catalog, char mode, int VERBOSE); 178 182 int save_catalog (Catalog *catalog, char VERBOSE); 183 int update_catalog (Catalog *catalog, char VERBOSE); 179 184 180 185 int FindMosaicForImage (Image *images, int Nimages, int entry); … … 291 296 int load_catalog_split (Catalog *catalog, char mode, int VERBOSE); 292 297 int save_catalog_split (Catalog *catalog, char VERBOSE); 298 int update_catalog_split (Catalog *catalog, char VERBOSE); 293 299 294 300 /*** DVO image db I/O Functions ***/ -
trunk/Ohana/src/libohana/src/dvo_catalog.c
r5228 r5234 110 110 break; 111 111 case DVO_MODE_SPLIT: 112 update_catalog_split (catalog, VERBOSE); 112 /* new file needs to use save_catalog_split */ 113 if (catalog[0].Nave_disk == 0) { 114 save_catalog_split (catalog, VERBOSE); 115 } else { 116 update_catalog_split (catalog, VERBOSE); 117 } 113 118 break; 114 119 default: -
trunk/Ohana/src/libohana/src/dvo_catalog_split.c
r5228 r5234 65 65 66 66 measure = NULL; 67 68 /* (Full Load) */ 67 69 if (mode & LOAD_MEAS) { 68 70 ALLOCATE (measure, Catalog, 1); … … 104 106 fprintf (stderr, "Warning: mismatch between Nmeasure in PHU and Table headers (%d vs %d)\n", Nmeasure, catalog[0].Nmeasure); 105 107 } 106 fits_free_header (&header); 107 fits_free_matrix (&matrix); 108 catalog[0].Nmeas_off = 0; 109 fits_free_header (&header); 110 fits_free_matrix (&matrix); 111 } 112 113 /* (Meta Load) */ 114 if (mode & LOAD_MEAS_META) { 115 ALLOCATE (measure, Catalog, 1); 116 117 /* get split filename from main header (paths relative to cpt file) */ 118 if (!fits_scan (&catalog[0].header, "MEASURE", "%s", 1, string)) return (FALSE); 119 ALLOCATE (measure[0].filename, char, strlen(path) + strlen(string) + 2); 120 sprintf (measure[0].filename, "%s/%s", path, string); 121 122 /* lock & open catalog file */ 123 if (lock_catalog (measure, catalog[0].lockmode) != 1) { 124 fprintf (stderr, "cannot access measure file %s\n", measure[0].filename); 125 exit (2); 126 } 127 128 /* read PHU */ 129 if (!fits_load_header (measure[0].f, &measure[0].header)) { 130 if (VERBOSE) fprintf (stderr, "catalog file does not exist: %s\n", measure[0].filename); 131 return (FALSE); 132 } 133 134 /* set up the table size information */ 135 catalog[0].Nmeasure = 0; /* no rows loaded */ 136 catalog[0].Nmeas_off = Nmeasure; /* start of new entries */ 108 137 } 109 138 catalog[0].measure_catalog = measure; … … 203 232 catalog[0].secfilt_catalog = secfilt; 204 233 234 /* save the current number so we can do partial updates */ 235 catalog[0].Nave_disk = Naverage; 236 catalog[0].Nmeas_disk = Nmeasure; 237 catalog[0].Nmiss_disk = Nmissing; 238 205 239 return (TRUE); 206 240 } … … 275 309 measure = catalog[0].measure_catalog; 276 310 311 /* XXX EAM : warn about this condition; add code to handle? */ 312 if (catalog[0].Nmeas_off != 0) { 313 fprintf (stderr, "WARNING: LOAD_MEAS_META mixed with save??\n"); 314 fprintf (stderr, "WARNING: this should not be allowed to happen!\n"); 315 } 316 277 317 /* rewind file pointers and truncate (file is still open) */ 278 318 fseek (measure[0].f, 0, SEEK_SET); … … 394 434 int update_catalog_split (Catalog *catalog, char VERBOSE) { 395 435 396 int Nitems; 436 int i, Nx, Ny, Nlines; 437 int Nitems, Nskip, Nout, Ndisk, Nstart; 397 438 Matrix matrix; 398 439 Header header; 399 440 FTable ftable; 441 VTable vtable; 400 442 Catalog *measure, *missing, *secfilt; 401 443 402 444 ftable.header = &header; 445 vtable.header = &header; 403 446 404 447 if (catalog[0].Naverage == 0) { … … 409 452 /* make sure header is consistent with data */ 410 453 fits_modify (&catalog[0].header, "NSTARS", "%d", 1, catalog[0].Naverage); 411 fits_modify (&catalog[0].header, "NMEAS", "%d", 1, catalog[0].Nmeasure );454 fits_modify (&catalog[0].header, "NMEAS", "%d", 1, catalog[0].Nmeasure + catalog[0].Nmeas_off); 412 455 fits_modify (&catalog[0].header, "NMISS", "%d", 1, catalog[0].Nmissing); 413 456 fits_modify (&catalog[0].header, "NSECFILT", "%d", 1, catalog[0].Nsecfilt); … … 424 467 } 425 468 426 /* in split mode, we can save only part of the data */427 428 469 /*** Average Table ***/ 429 470 430 471 if (catalog[0].average != NULL) { 431 ftruncate (fileno (catalog[0].f), catalog[0].header.size); 432 433 /* this is probably a NOP, do I have to keep it in? */ 434 fits_create_matrix (&catalog[0].header, &matrix); 435 if (!fits_fwrite_matrix (catalog[0].f, &matrix)) { 436 fprintf (stderr, "can't write primary matrix"); 437 return (FALSE); 438 } 439 fits_free_matrix (&matrix); 472 473 /* skip past matrix (already at end of header) */ 474 Nskip = fits_matrix_size (&catalog[0].header); 475 fseek (catalog[0].f, Nskip, SEEK_CUR); 476 477 /* how many lines to write out? */ 478 Nout = catalog[0].Naverage - catalog[0].Nave_disk; 440 479 441 480 /* write out Average table (convert to FITS table format) */ 442 481 AverageToFtable (&ftable, catalog[0].average, catalog[0].Naverage, catalog[0].catformat); 482 /* convert only output rows to vtable */ 483 fits_table_to_vtable (&ftable, &vtable, catalog[0].Nave_disk, Nout); 484 443 485 if (!fits_fwrite_Theader (catalog[0].f, &header)) { 444 486 fprintf (stderr, "can't write table header"); 445 487 return (FALSE); 446 488 } 447 if (!fits_fwrite_table (catalog[0].f, &ftable)) { 448 fprintf (stderr, "can't write table data"); 449 return (FALSE); 450 } 489 if (!fits_fwrite_vtable (catalog[0].f, &vtable)) { 490 fprintf (stderr, "can't write table data"); 491 return (FALSE); 492 } 493 fits_free_vtable (&vtable); 451 494 fits_free_table (&ftable); 452 495 fits_free_header (&header); … … 459 502 measure = catalog[0].measure_catalog; 460 503 461 /* rewind file pointers and truncate (file is still open) */ 462 fseek (measure[0].f, 0, SEEK_SET); 463 ftruncate (fileno (measure[0].f), 0); 464 465 /* write table PHU header */ 466 if (!fits_fwrite_header (measure[0].f, &measure[0].header)) { 467 fprintf (stderr, "can't write primary header"); 468 return (FALSE); 469 } 470 471 /* this is probably a NOP, do I have to keep it in? */ 472 fits_create_matrix (&measure[0].header, &matrix); 473 if (!fits_fwrite_matrix (measure[0].f, &matrix)) { 474 fprintf (stderr, "can't write primary matrix"); 475 return (FALSE); 476 } 477 fits_free_matrix (&matrix); 478 479 /* write out Measure table (convert to FITS table format) */ 480 MeasureToFtable (&ftable, catalog[0].measure, catalog[0].Nmeasure, catalog[0].catformat); 504 /* skip past PHU header and matrix */ 505 Nskip = measure[0].header.size + fits_matrix_size (&measure[0].header); 506 fseek (measure[0].f, Nskip, SEEK_SET); 507 508 Ndisk = catalog[0].Nmeas_disk; 509 Nstart = catalog[0].Nmeas_disk - catalog[0].Nmeas_off; /* where is first new line? */ 510 Nout = catalog[0].Nmeasure - Nstart; /* how many lines to write out? */ 511 Nlines = catalog[0].Nmeasure + catalog[0].Nmeas_off; /* how many lines total in file */ 512 513 /* convert to output format FITS table (only rows for output : 0 - Nout) */ 514 MeasureToFtable (&ftable, &catalog[0].measure[Nstart], Nout, catalog[0].catformat); 515 516 fits_scan (&header, "NAXIS1", "%d", 1, &Nx); 517 fits_scan (&header, "NAXIS2", "%d", 1, &Ny); 518 519 /* convert all output rows to vtable */ 520 ALLOCATE (vtable.row, int, MAX (1, Nout)); 521 ALLOCATE (vtable.buffer, char *, MAX (1, Nout)); 522 for (i = 0; i < Nout; i++) { 523 ALLOCATE (vtable.buffer[i], char, MAX (1, Nx)); 524 memcpy (vtable.buffer[i], &ftable.buffer[i*Nx], Nx); 525 vtable.row[i] = i + Ndisk; 526 } 527 528 /* modify vtable to represent full disk table */ 529 fits_modify (&header, "NAXIS2", "%d", 1, Nlines); 530 header.Naxis[1] = Nlines; 531 532 vtable.size = fits_matrix_size (&header); 533 vtable.Nrow = Nout; 534 vtable.pad = vtable.size - Nx*Ny; 535 481 536 if (!fits_fwrite_Theader (measure[0].f, &header)) { 482 537 fprintf (stderr, "can't write table header"); 483 538 return (FALSE); 484 539 } 485 if (!fits_fwrite_table (measure[0].f, &ftable)) { 486 fprintf (stderr, "can't write table data"); 487 return (FALSE); 488 } 540 if (!fits_fwrite_vtable (measure[0].f, &vtable)) { 541 fprintf (stderr, "can't write table data"); 542 return (FALSE); 543 } 544 fits_free_vtable (&vtable); 489 545 fits_free_table (&ftable); 490 546 fits_free_header (&header); … … 492 548 493 549 /*** Missing Table ***/ 550 /* missing table CANNOT be written unsorted, thus it is always written 551 out in full */ 494 552 495 553 if (catalog[0].missing != NULL) { … … 535 593 secfilt = catalog[0].secfilt_catalog; 536 594 537 /* rewind file pointers and truncate (file is still open) */ 538 fseek (secfilt[0].f, 0, SEEK_SET); 539 ftruncate (fileno (secfilt[0].f), 0); 540 541 /* write table PHU header */ 542 if (!fits_fwrite_header (secfilt[0].f, &secfilt[0].header)) { 543 fprintf (stderr, "can't write primary header"); 544 return (FALSE); 545 } 546 547 /* this is probably a NOP, do I have to keep it in? */ 548 fits_create_matrix (&secfilt[0].header, &matrix); 549 if (!fits_fwrite_matrix (secfilt[0].f, &matrix)) { 550 fprintf (stderr, "can't write primary matrix"); 551 return (FALSE); 552 } 553 fits_free_matrix (&matrix); 554 555 /* write out SecFilt table (convert to FITS table format) */ 595 /* skip past PHU header and matrix */ 596 Nskip = secfilt[0].header.size + fits_matrix_size (&secfilt[0].header); 597 fseek (secfilt[0].f, Nskip, SEEK_SET); 598 599 /* how many lines to write out? */ 600 Nout = catalog[0].Nsecfilt * (catalog[0].Naverage - catalog[0].Nave_disk); 601 Ndisk = catalog[0].Nsecfilt * catalog[0].Nave_disk; 602 603 /* convert to output format FITS table */ 556 604 Nitems = catalog[0].Naverage * catalog[0].Nsecfilt; 557 605 SecFiltToFtable (&ftable, catalog[0].secfilt, Nitems, catalog[0].catformat); 606 /* convert only output rows to vtable */ 607 fits_table_to_vtable (&ftable, &vtable, Ndisk, Nout); 608 558 609 if (!fits_fwrite_Theader (secfilt[0].f, &header)) { 559 610 fprintf (stderr, "can't write table header"); 560 611 return (FALSE); 561 612 } 562 if (!fits_fwrite_table (secfilt[0].f, &ftable)) { 563 fprintf (stderr, "can't write table data"); 564 return (FALSE); 565 } 613 if (!fits_fwrite_vtable (secfilt[0].f, &vtable)) { 614 fprintf (stderr, "can't write table data"); 615 return (FALSE); 616 } 617 fits_free_vtable (&vtable); 566 618 fits_free_table (&ftable); 567 619 fits_free_header (&header); … … 578 630 579 631 /* XXX EAM : this file needs work on the error exit conditions and memory leaks, esp under errors */ 632 633 /* XXX EAM : update is not efficient. MeasureToFtable should only 634 convert the new rows (Nmeas_disk to Nmeasure). the resulting 635 table represents the end rows of the vtable. we need to define 636 the vtable based on the ftable, but with Ny = Nmeasure */ 637
Note:
See TracChangeset
for help on using the changeset viewer.
