Changeset 15730
- Timestamp:
- Dec 1, 2007, 4:31:23 PM (18 years ago)
- Location:
- branches/eam_branch_20071130/Ohana/src/libdvo/src
- Files:
-
- 2 edited
-
dvo_catalog.c (modified) (3 diffs)
-
dvo_catalog_split.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branch_20071130/Ohana/src/libdvo/src/dvo_catalog.c
r15728 r15730 276 276 gfits_modify (&catalog[0].header, "SORTED", "%t", 1, catalog[0].sorted); 277 277 278 if (catalog[0].Nmeas_off != 0) { 279 if (!dvo_catalog_update (catalog, VERBOSE)) { 280 return (FALSE); 281 } 282 return (TRUE); 283 } 284 278 // XXX handle return status 285 279 switch (catalog[0].catmode) { 286 280 case DVO_MODE_RAW: … … 300 294 } 301 295 296 # if (0) 297 // XXX deprecate this function: choice of update or not is made in dvo_catalog_save_split, etc 302 298 int dvo_catalog_update (Catalog *catalog, char VERBOSE) { 303 299 … … 334 330 return (TRUE); 335 331 } 332 # endif 336 333 337 334 int dvo_catalog_check (Catalog *catalog, int Nsecfilt, int extend) { -
branches/eam_branch_20071130/Ohana/src/libdvo/src/dvo_catalog_split.c
r15728 r15730 447 447 (catalog[0].catformat == DVO_FORMAT_LONEOS)) { // special case for LONEOS 448 448 if (catalog[0].secfilt == NULL) { 449 fprintf (stderr, "missing secfilt, cannot build output averages (dvo_catalog_split.c)\n"); 450 exit (1); 451 } 452 secfilt = catalog[0].secfilt; 453 454 // XXX this translation only works if we have loaded / created a matched average/secfilt set 455 assert (catalog[0].Nsecf_mem == catalog[0].Nsecfilt*catalog[0].Naverage); 456 457 Nallfilt = catalog[0].Nsecfilt; 458 Nsecfilt = catalog[0].Nsecfilt - 1; 459 Ntotal = Nsecfilt * catalog[0].Naverage; 460 ALLOCATE (primary, SecFilt, catalog[0].Naverage); 461 ALLOCATE (secfilt, SecFilt, Ntotal); 462 463 for (i = 0; i < catalog[0].Naverage; i++) { 464 primary[i] = secfilt[i*Nallfilt + 0]; 465 for (j = 0; j < Nsecfilt; j++) { 466 secfilt[i*Nsecfilt + j] = catalog[0].secfilt[i*Nallfilt + j + 1]; 467 } 468 } 469 catalog[0].Nsecfilt --; 470 catalog[0].Nsecf_mem = catalog[0].Naverage*catalog[0].Nsecfilt; 471 } else { 472 primary = NULL; 473 secfilt = catalog[0].secfilt; 474 Nsecfilt = catalog[0].Nsecfilt; 475 } 476 477 /* make sure header is consistent with data */ 478 gfits_modify (&catalog[0].header, "NSTARS", "%d", 1, catalog[0].Naverage); 479 gfits_modify (&catalog[0].header, "NMEAS", "%d", 1, catalog[0].Nmeasure); 480 gfits_modify (&catalog[0].header, "NMISS", "%d", 1, catalog[0].Nmissing); 481 gfits_modify (&catalog[0].header, "NSECFILT", "%d", 1, Nsecfilt); 482 gfits_modify (&catalog[0].header, "EXTEND", "%t", 1, TRUE); 483 484 /* rewind file pointers and truncate (file is still open) */ 485 fseek (catalog[0].f, 0, SEEK_SET); 486 487 /* write table PHU header - always write this out */ 488 /* XXX EAM : check if disk file size has changed */ 489 if (!gfits_fwrite_header (catalog[0].f, &catalog[0].header)) { 490 fprintf (stderr, "can't write primary header"); 491 goto failure; 492 } 493 494 /* in split mode, we can save only part of the data */ 495 496 /*** Average Table ***/ 497 498 if (catalog[0].average != NULL) { 499 ftruncate (fileno (catalog[0].f), catalog[0].header.size); 500 501 /* this is probably a NOP, do I have to keep it in? */ 502 gfits_create_matrix (&catalog[0].header, &matrix); 503 if (!gfits_fwrite_matrix (catalog[0].f, &matrix)) { 504 fprintf (stderr, "can't write primary matrix"); 505 goto failure; 506 } 507 gfits_free_matrix (&matrix); 508 509 /* write out Average table (convert to FITS table format) */ 510 if (!AverageToFtable (&ftable, catalog[0].average, catalog[0].Naverage, catalog[0].catformat, primary)) { 511 fprintf (stderr, "trouble converting format\n"); 512 goto failure; 513 } 514 if (!gfits_fwrite_Theader (catalog[0].f, &header)) { 515 fprintf (stderr, "can't write table header"); 516 goto failure; 517 } 518 if (!gfits_fwrite_table (catalog[0].f, &ftable)) { 519 fprintf (stderr, "can't write table data"); 520 goto failure; 521 } 522 gfits_free_table (&ftable); 523 gfits_free_header (&header); 524 } 525 526 /*** Measure Table ***/ 527 if (catalog[0].measure != NULL) { 528 529 /* catalog file data is stored in separate structure */ 530 catfile = catalog[0].measure_catalog; 531 532 /* XXX EAM : warn about this condition; add code to handle? */ 533 if (catalog[0].Nmeas_off != 0) { 534 fprintf (stderr, "WARNING: LOAD_MEAS_META mixed with save??\n"); 535 fprintf (stderr, "WARNING: this should not be allowed to happen!\n"); 536 } 537 538 /* rewind file pointers and truncate (file is still open) */ 539 fseek (catfile[0].f, 0, SEEK_SET); 540 ftruncate (fileno (catfile[0].f), 0); 541 542 /* write table PHU header */ 543 if (!gfits_fwrite_header (catfile[0].f, &catfile[0].header)) { 544 fprintf (stderr, "can't write primary header"); 545 goto failure; 546 } 547 548 /* this is probably a NOP, do I have to keep it in? */ 549 gfits_create_matrix (&catfile[0].header, &matrix); 550 if (!gfits_fwrite_matrix (catfile[0].f, &matrix)) { 551 fprintf (stderr, "can't write primary matrix"); 552 goto failure; 553 } 554 gfits_free_matrix (&matrix); 555 556 /* write out Measure table (convert to FITS table format) */ 557 MeasureToFtable (&ftable, catalog[0].measure, catalog[0].Nmeasure, catalog[0].catformat); 558 if (!gfits_fwrite_Theader (catfile[0].f, &header)) { 559 fprintf (stderr, "can't write table header"); 560 goto failure; 561 } 562 if (!gfits_fwrite_table (catfile[0].f, &ftable)) { 563 fprintf (stderr, "can't write table data"); 564 goto failure; 565 } 566 gfits_free_table (&ftable); 567 gfits_free_header (&header); 568 } 569 570 /*** Missing Table ***/ 571 if (catalog[0].missing != NULL) { 572 573 /* catalog data is stored in separate catalog */ 574 catfile = catalog[0].missing_catalog; 575 576 /* rewind file pointers and truncate (file is still open) */ 577 fseek (catfile[0].f, 0, SEEK_SET); 578 ftruncate (fileno (catfile[0].f), 0); 579 580 /* write table PHU header */ 581 if (!gfits_fwrite_header (catfile[0].f, &catfile[0].header)) { 582 fprintf (stderr, "can't write primary header"); 583 goto failure; 584 } 585 586 /* this is probably a NOP, do I have to keep it in? */ 587 gfits_create_matrix (&catfile[0].header, &matrix); 588 if (!gfits_fwrite_matrix (catfile[0].f, &matrix)) { 589 fprintf (stderr, "can't write primary matrix"); 590 goto failure; 591 } 592 gfits_free_matrix (&matrix); 593 594 /* write out Missing table (convert to FITS table format) */ 595 gfits_table_set_Missing (&ftable, catalog[0].missing, catalog[0].Nmissing); 596 if (!gfits_fwrite_Theader (catfile[0].f, &header)) { 597 fprintf (stderr, "can't write table header"); 598 goto failure; 599 } 600 if (!gfits_fwrite_table (catfile[0].f, &ftable)) { 601 fprintf (stderr, "can't write table data"); 602 goto failure; 603 } 604 gfits_free_table (&ftable); 605 gfits_free_header (&header); 606 } 607 608 /*** Secfilt Table ***/ 609 if (catalog[0].secfilt != NULL) { 610 611 /* catalog file data is stored in a separate catalog structure */ 612 catfile = catalog[0].secfilt_catalog; 613 614 /* rewind file pointers and truncate (file is still open) */ 615 fseek (catfile[0].f, 0, SEEK_SET); 616 ftruncate (fileno (catfile[0].f), 0); 617 618 /* write table PHU header */ 619 if (!gfits_fwrite_header (catfile[0].f, &catfile[0].header)) { 620 fprintf (stderr, "can't write primary header"); 621 goto failure; 622 } 623 624 /* this is probably a NOP, do I have to keep it in? */ 625 gfits_create_matrix (&catfile[0].header, &matrix); 626 if (!gfits_fwrite_matrix (catfile[0].f, &matrix)) { 627 fprintf (stderr, "can't write primary matrix"); 628 goto failure; 629 } 630 gfits_free_matrix (&matrix); 631 632 /* write out SecFilt table (convert to FITS table format) */ 633 Nitems = catalog[0].Naverage * catalog[0].Nsecfilt; 634 SecFiltToFtable (&ftable, secfilt, Nitems, catalog[0].catformat); 635 if (!gfits_fwrite_Theader (catfile[0].f, &header)) { 636 fprintf (stderr, "can't write table header"); 637 goto failure; 638 } 639 if (!gfits_fwrite_table (catfile[0].f, &ftable)) { 640 fprintf (stderr, "can't write table data"); 641 goto failure; 642 } 643 gfits_free_table (&ftable); 644 gfits_free_header (&header); 645 } 646 647 /* free temp storage */ 648 if (primary != NULL) { 649 free (primary); 650 free (secfilt); 651 } 652 653 return (TRUE); 654 655 failure: 656 /* free temp storage */ 657 if (primary != NULL) { 658 free (primary); 659 free (secfilt); 660 } 661 return (FALSE); 662 } 663 664 /* update_catalog_split only writes new lines to file. 665 * if file is empty, call save_catalog_split instead. 666 * XXX EAM : save_catalog SHOULD do this 667 */ 668 669 int dvo_catalog_update_split (Catalog *catalog, char VERBOSE) { 670 671 int i, Nx, Ny, Nlines; 672 int Nitems, Nskip, Nout, Ndisk, Nstart; 673 Matrix matrix; 674 Header header; 675 FTable ftable; 676 VTable vtable; 677 Catalog *catfile; 678 SecFilt *primary, *secfilt; 679 int j, Nsecfilt, Nallfilt, Ntotal; 680 681 ftable.header = &header; 682 vtable.header = &header; 683 684 if (catalog[0].Naverage == 0) { 685 if (VERBOSE) fprintf (stderr, "no stars in catalog, skipping\n"); 686 return (TRUE); 687 } 688 689 /** for the appropriate types, pull out the first secfilt and pass to AverageToFtable as primary **/ 690 if ((catalog[0].catformat == DVO_FORMAT_ELIXIR) || // special case for ELIXIR 691 (catalog[0].catformat == DVO_FORMAT_LONEOS)) { // special case for LONEOS 692 if (catalog[0].secfilt == NULL) { 449 693 fprintf (stderr, "missing secfilt, cannot build output averages (dvo_catalog_split.c:544)\n"); 450 694 exit (1); … … 472 716 /* make sure header is consistent with data */ 473 717 gfits_modify (&catalog[0].header, "NSTARS", "%d", 1, catalog[0].Naverage); 474 gfits_modify (&catalog[0].header, "NMEAS", "%d", 1, catalog[0].Nmeasure);475 gfits_modify (&catalog[0].header, "NMISS", "%d", 1, catalog[0].Nmissing);476 gfits_modify (&catalog[0].header, "NSECFILT", "%d", 1, Nsecfilt);477 gfits_modify (&catalog[0].header, "EXTEND", "%t", 1, TRUE);478 479 /* rewind file pointers and truncate (file is still open) */480 fseek (catalog[0].f, 0, SEEK_SET);481 482 /* write table PHU header - always write this out */483 /* XXX EAM : check if disk file size has changed */484 if (!gfits_fwrite_header (catalog[0].f, &catalog[0].header)) {485 fprintf (stderr, "can't write primary header");486 goto failure;487 }488 489 /* in split mode, we can save only part of the data */490 491 /*** Average Table ***/492 493 if (catalog[0].average != NULL) {494 ftruncate (fileno (catalog[0].f), catalog[0].header.size);495 496 /* this is probably a NOP, do I have to keep it in? */497 gfits_create_matrix (&catalog[0].header, &matrix);498 if (!gfits_fwrite_matrix (catalog[0].f, &matrix)) {499 fprintf (stderr, "can't write primary matrix");500 goto failure;501 }502 gfits_free_matrix (&matrix);503 504 /* write out Average table (convert to FITS table format) */505 if (!AverageToFtable (&ftable, catalog[0].average, catalog[0].Naverage, catalog[0].catformat, primary)) {506 fprintf (stderr, "trouble converting format\n");507 goto failure;508 }509 if (!gfits_fwrite_Theader (catalog[0].f, &header)) {510 fprintf (stderr, "can't write table header");511 goto failure;512 }513 if (!gfits_fwrite_table (catalog[0].f, &ftable)) {514 fprintf (stderr, "can't write table data");515 goto failure;516 }517 gfits_free_table (&ftable);518 gfits_free_header (&header);519 }520 521 /*** Measure Table ***/522 if (catalog[0].measure != NULL) {523 524 /* catalog file data is stored in separate structure */525 catfile = catalog[0].measure_catalog;526 527 /* XXX EAM : warn about this condition; add code to handle? */528 if (catalog[0].Nmeas_off != 0) {529 fprintf (stderr, "WARNING: LOAD_MEAS_META mixed with save??\n");530 fprintf (stderr, "WARNING: this should not be allowed to happen!\n");531 }532 533 /* rewind file pointers and truncate (file is still open) */534 fseek (catfile[0].f, 0, SEEK_SET);535 ftruncate (fileno (catfile[0].f), 0);536 537 /* write table PHU header */538 if (!gfits_fwrite_header (catfile[0].f, &catfile[0].header)) {539 fprintf (stderr, "can't write primary header");540 goto failure;541 }542 543 /* this is probably a NOP, do I have to keep it in? */544 gfits_create_matrix (&catfile[0].header, &matrix);545 if (!gfits_fwrite_matrix (catfile[0].f, &matrix)) {546 fprintf (stderr, "can't write primary matrix");547 goto failure;548 }549 gfits_free_matrix (&matrix);550 551 /* write out Measure table (convert to FITS table format) */552 MeasureToFtable (&ftable, catalog[0].measure, catalog[0].Nmeasure, catalog[0].catformat);553 if (!gfits_fwrite_Theader (catfile[0].f, &header)) {554 fprintf (stderr, "can't write table header");555 goto failure;556 }557 if (!gfits_fwrite_table (catfile[0].f, &ftable)) {558 fprintf (stderr, "can't write table data");559 goto failure;560 }561 gfits_free_table (&ftable);562 gfits_free_header (&header);563 }564 565 /*** Missing Table ***/566 if (catalog[0].missing != NULL) {567 568 /* catalog data is stored in separate catalog */569 catfile = catalog[0].missing_catalog;570 571 /* rewind file pointers and truncate (file is still open) */572 fseek (catfile[0].f, 0, SEEK_SET);573 ftruncate (fileno (catfile[0].f), 0);574 575 /* write table PHU header */576 if (!gfits_fwrite_header (catfile[0].f, &catfile[0].header)) {577 fprintf (stderr, "can't write primary header");578 goto failure;579 }580 581 /* this is probably a NOP, do I have to keep it in? */582 gfits_create_matrix (&catfile[0].header, &matrix);583 if (!gfits_fwrite_matrix (catfile[0].f, &matrix)) {584 fprintf (stderr, "can't write primary matrix");585 goto failure;586 }587 gfits_free_matrix (&matrix);588 589 /* write out Missing table (convert to FITS table format) */590 gfits_table_set_Missing (&ftable, catalog[0].missing, catalog[0].Nmissing);591 if (!gfits_fwrite_Theader (catfile[0].f, &header)) {592 fprintf (stderr, "can't write table header");593 goto failure;594 }595 if (!gfits_fwrite_table (catfile[0].f, &ftable)) {596 fprintf (stderr, "can't write table data");597 goto failure;598 }599 gfits_free_table (&ftable);600 gfits_free_header (&header);601 }602 603 /*** Secfilt Table ***/604 if (catalog[0].secfilt != NULL) {605 606 /* catalog file data is stored in a separate catalog structure */607 catfile = catalog[0].secfilt_catalog;608 609 /* rewind file pointers and truncate (file is still open) */610 fseek (catfile[0].f, 0, SEEK_SET);611 ftruncate (fileno (catfile[0].f), 0);612 613 /* write table PHU header */614 if (!gfits_fwrite_header (catfile[0].f, &catfile[0].header)) {615 fprintf (stderr, "can't write primary header");616 goto failure;617 }618 619 /* this is probably a NOP, do I have to keep it in? */620 gfits_create_matrix (&catfile[0].header, &matrix);621 if (!gfits_fwrite_matrix (catfile[0].f, &matrix)) {622 fprintf (stderr, "can't write primary matrix");623 goto failure;624 }625 gfits_free_matrix (&matrix);626 627 /* write out SecFilt table (convert to FITS table format) */628 Nitems = catalog[0].Naverage * catalog[0].Nsecfilt;629 SecFiltToFtable (&ftable, secfilt, Nitems, catalog[0].catformat);630 if (!gfits_fwrite_Theader (catfile[0].f, &header)) {631 fprintf (stderr, "can't write table header");632 goto failure;633 }634 if (!gfits_fwrite_table (catfile[0].f, &ftable)) {635 fprintf (stderr, "can't write table data");636 goto failure;637 }638 gfits_free_table (&ftable);639 gfits_free_header (&header);640 }641 642 /* free temp storage */643 if (primary != NULL) {644 free (primary);645 free (secfilt);646 }647 648 return (TRUE);649 650 failure:651 /* free temp storage */652 if (primary != NULL) {653 free (primary);654 free (secfilt);655 }656 return (FALSE);657 }658 659 /* update_catalog_split only writes new lines to file.660 * if file is empty, call save_catalog_split instead.661 * XXX EAM : save_catalog SHOULD do this662 */663 664 int dvo_catalog_update_split (Catalog *catalog, char VERBOSE) {665 666 int i, Nx, Ny, Nlines;667 int Nitems, Nskip, Nout, Ndisk, Nstart;668 Matrix matrix;669 Header header;670 FTable ftable;671 VTable vtable;672 Catalog *catfile;673 SecFilt *primary, *secfilt;674 int j, Nsecfilt, Nallfilt, Ntotal;675 676 ftable.header = &header;677 vtable.header = &header;678 679 if (catalog[0].Naverage == 0) {680 if (VERBOSE) fprintf (stderr, "no stars in catalog, skipping\n");681 return (TRUE);682 }683 684 /** for the appropriate types, pull out the first secfilt and pass to AverageToFtable as primary **/685 if ((catalog[0].catformat == DVO_FORMAT_ELIXIR) || // special case for ELIXIR686 (catalog[0].catformat == DVO_FORMAT_LONEOS)) { // special case for LONEOS687 if (catalog[0].secfilt == NULL) {688 fprintf (stderr, "missing secfilt, cannot build output averages (dvo_catalog_split.c:544)\n");689 exit (1);690 }691 secfilt = catalog[0].secfilt;692 693 Nallfilt = catalog[0].Nsecfilt;694 Nsecfilt = catalog[0].Nsecfilt - 1;695 Ntotal = Nsecfilt * catalog[0].Naverage;696 ALLOCATE (primary, SecFilt, catalog[0].Naverage);697 ALLOCATE (secfilt, SecFilt, Ntotal);698 699 for (i = 0; i < catalog[0].Naverage; i++) {700 primary[i] = secfilt[i*Nallfilt + 0];701 for (j = 0; j < Nsecfilt; j++) {702 secfilt[i*Nsecfilt + j] = catalog[0].secfilt[i*Nallfilt + j + 1];703 }704 }705 } else {706 primary = NULL;707 secfilt = catalog[0].secfilt;708 Nsecfilt = catalog[0].Nsecfilt;709 }710 711 /* make sure header is consistent with data */712 gfits_modify (&catalog[0].header, "NSTARS", "%d", 1, catalog[0].Naverage);713 718 gfits_modify (&catalog[0].header, "NMEAS", "%d", 1, catalog[0].Nmeasure + catalog[0].Nmeas_off); 714 719 gfits_modify (&catalog[0].header, "NMISS", "%d", 1, catalog[0].Nmissing);
Note:
See TracChangeset
for help on using the changeset viewer.
