Changeset 17245
- Timestamp:
- Mar 31, 2008, 12:36:14 PM (18 years ago)
- Location:
- trunk/Ohana/src
- Files:
-
- 4 edited
-
delstar/src/delete_imagename.c (modified) (1 diff)
-
libdvo/include/dvo.h (modified) (2 diffs)
-
libdvo/src/dvo_catalog.c (modified) (2 diffs)
-
libdvo/src/dvo_catalog_split.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/delstar/src/delete_imagename.c
r15743 r17245 57 57 find_matches (&catalog, image[j].photcode, start, stop); 58 58 59 dvo_catalog_save (&catalog, VERBOSE);59 dvo_catalog_save_complete (&catalog, VERBOSE); 60 60 dvo_catalog_unlock (&catalog); 61 61 dvo_catalog_free (&catalog); -
trunk/Ohana/src/libdvo/include/dvo.h
r17190 r17245 360 360 int dvo_catalog_open (Catalog *catalog, SkyRegion *region, int VERBOSE, char *iomode); 361 361 int dvo_catalog_save (Catalog *catalog, char VERBOSE); 362 int dvo_catalog_save_complete (Catalog *catalog, char VERBOSE); 362 363 int dvo_catalog_update (Catalog *catalog, char VERBOSE); 363 364 int dvo_catalog_catformat (char *catformat); … … 373 374 int dvo_catalog_save_split (Catalog *catalog, char VERBOSE); 374 375 int dvo_catalog_update_split (Catalog *catalog, char VERBOSE); 376 int dvo_catalog_save_split_complete (Catalog *catalog, char VERBOSE); 375 377 376 378 int dvo_catalog_load_segment (Catalog *catalog, int VERBOSE, int start, int Nrows); -
trunk/Ohana/src/libdvo/src/dvo_catalog.c
r16810 r17245 274 274 275 275 // write out the data, unlink if empty? 'save' means: write out all data currently in 276 // memory. NOTE: this is currently not always possible: for non-SPLIT mo e files, this276 // memory. NOTE: this is currently not always possible: for non-SPLIT mode files, this 277 277 // operation may require expanding the file size, which does not automatically happen 278 278 int dvo_catalog_save (Catalog *catalog, char VERBOSE) { … … 291 291 case DVO_MODE_SPLIT: 292 292 dvo_catalog_save_split (catalog, VERBOSE); 293 break; 294 default: 295 fprintf (stderr, "invalid catalog mode\n"); 296 exit (2); 297 } 298 return (TRUE); 299 } 300 301 // write out the data, assuming the in-memory data represents all data for the table. 302 // NOTE: This operation may truncate the file and delete entries. 303 int dvo_catalog_save_complete (Catalog *catalog, char VERBOSE) { 304 305 // set the 'sorted' header keyword 306 gfits_modify (&catalog[0].header, "SORTED", "%t", 1, catalog[0].sorted); 307 308 // XXX handle return status 309 switch (catalog[0].catmode) { 310 case DVO_MODE_RAW: 311 dvo_catalog_save_raw (catalog, VERBOSE); 312 break; 313 case DVO_MODE_MEF: 314 dvo_catalog_save_mef (catalog, VERBOSE); 315 break; 316 case DVO_MODE_SPLIT: 317 dvo_catalog_save_split_complete (catalog, VERBOSE); 293 318 break; 294 319 default: -
trunk/Ohana/src/libdvo/src/dvo_catalog_split.c
r17122 r17245 646 646 } 647 647 648 /* save_catalog_split writes all data currently in memory to disk, truncating if the disk file was larger */ 649 int dvo_catalog_save_split_complete (Catalog *catalog, char VERBOSE) { 650 651 int Nitems; 652 Header header; 653 FTable ftable; 654 SecFilt *primary, *secfilt; 655 int Nsecfilt; 656 int Naves_disk_new, Nmeas_disk_new, Nmiss_disk_new, Nsecf_disk_new; 657 int first, start, Nrows; 658 659 ftable.header = &header; 660 ftable.buffer = NULL; 661 header.buffer = NULL; 662 primary = NULL; 663 664 // skip empty catalogs: it is illegal to have Measures without corresponding Averages 665 if (catalog[0].Naves_off > 0) { 666 fprintf (stderr, "ERROR: only partial catalog (Average) was loaded\n"); 667 goto failure; 668 } 669 if (catalog[0].Nmeas_off > 0) { 670 fprintf (stderr, "ERROR: only partial catalog (Measure) was loaded\n"); 671 goto failure; 672 } 673 if (catalog[0].Nmiss_off > 0) { 674 fprintf (stderr, "ERROR: only partial catalog (Missing) was loaded\n"); 675 goto failure; 676 } 677 if (catalog[0].Nsecf_off > 0) { 678 fprintf (stderr, "ERROR: only partial catalog (Secfilt) was loaded\n"); 679 goto failure; 680 } 681 682 if ((catalog[0].Naverage > 0) && (Naves_disk_new == 0)) { 683 Naves_disk_new = catalog[0].Naverage; 684 if (VERBOSE) fprintf (stderr, "resulting catalog is empty; delete it\n"); 685 // unlink (); 686 return (TRUE); 687 } 688 689 Naves_disk_new = catalog[0].Naverage; 690 691 // for the appropriate types, pull out the first secfilt and pass to AverageToFtable as primary 692 switch (catalog[0].catformat) { 693 case DVO_FORMAT_ELIXIR: // special case for ELIXIR 694 case DVO_FORMAT_LONEOS: // special case for LONEOS 695 dvo_catalog_secfilt_to_primary (catalog, &primary, &secfilt, &Nsecfilt); 696 break; 697 default: 698 primary = NULL; 699 secfilt = catalog[0].secfilt; 700 Nsecfilt = catalog[0].Nsecfilt; 701 break; 702 } 703 704 Nmeas_disk_new = catalog[0].Nmeasure; 705 Nmiss_disk_new = catalog[0].Nmissing; 706 Nsecf_disk_new = catalog[0].Naverage*Nsecfilt; 707 708 /* make sure header is consistent with data */ 709 gfits_modify (&catalog[0].header, "NSTARS", "%d", 1, Naves_disk_new); 710 gfits_modify (&catalog[0].header, "NMEAS", "%d", 1, Nmeas_disk_new); 711 gfits_modify (&catalog[0].header, "NMISS", "%d", 1, Nmiss_disk_new); 712 gfits_modify (&catalog[0].header, "NSECFILT", "%d", 1, Nsecfilt); 713 gfits_modify (&catalog[0].header, "EXTEND", "%t", 1, TRUE); 714 715 /* in split mode, we can save only part of the data */ 716 717 /*** Average Table ***/ 718 if ((catalog[0].catflags & LOAD_AVES) && (catalog[0].average != NULL)) { 719 720 first = 0; // first row in memory to write 721 start = catalog[0].Naves_off; // first disk row to write 722 Nrows = catalog[0].Naverage - first; 723 724 assert (Nrows >= 0); 725 assert (first >= 0); 726 assert (first <= catalog[0].Naverage); 727 assert (catalog[0].Naves_disk >= catalog[0].Naves_off); 728 729 /* convert internal to external format */ 730 if (!AverageToFtable (&ftable, &catalog[0].average[first], Nrows, catalog[0].catformat, primary)) { 731 fprintf (stderr, "trouble converting format\n"); 732 goto failure; 733 } 734 735 if (!dvo_catalog_save_subcat (catalog, &ftable, start, Nrows, catalog[0].Naves_disk, Naves_disk_new)) { 736 fprintf (stderr, "failure writing Average table\n"); 737 goto failure; 738 } 739 gfits_free_header (&header); 740 gfits_free_table (&ftable); 741 } else { 742 // even if we do not save the average table, we need to keep the header in sync 743 /* rewind file pointers and truncate (file is still open) */ 744 fseek (catalog[0].f, 0, SEEK_SET); 745 746 /* write table PHU header - always write this out */ 747 /* XXX EAM : check if disk file size has changed */ 748 if (!gfits_fwrite_header (catalog[0].f, &catalog[0].header)) { 749 fprintf (stderr, "can't write primary header"); 750 goto failure; 751 } 752 } 753 754 /*** Measure Table ***/ 755 if ((catalog[0].catflags & LOAD_MEAS) && (catalog[0].measure != NULL)) { 756 757 first = 0; // first row in memory to write 758 start = catalog[0].Nmeas_off; // first disk row to write 759 Nrows = catalog[0].Nmeasure - first; 760 761 assert (Nrows >= 0); 762 assert (first >= 0); 763 assert (first <= catalog[0].Nmeasure); 764 assert (catalog[0].Nmeas_disk >= catalog[0].Nmeas_off); 765 766 // convert to external table format 767 if (!MeasureToFtable (&ftable, &catalog[0].measure[first], Nrows, catalog[0].catformat)) { 768 fprintf (stderr, "trouble converting format\n"); 769 goto failure; 770 } 771 772 // write out Measure table 773 if (!dvo_catalog_save_subcat (catalog[0].measure_catalog, &ftable, start, Nrows, catalog[0].Nmeas_disk, Nmeas_disk_new)) { 774 fprintf (stderr, "trouble writing Measure table\n"); 775 goto failure; 776 } 777 gfits_free_header (&header); 778 gfits_free_table (&ftable); 779 } 780 781 /*** Missing Table ***/ 782 if ((catalog[0].catflags & LOAD_MISS) && (catalog[0].missing != NULL)) { 783 784 if (catalog[0].Nmiss_off != 0) { 785 fprintf (stderr, "inconsistency: Missing table cannot be written in segments\n"); 786 goto failure; 787 } 788 789 // convert to external table format 790 if (!gfits_table_set_Missing (&ftable, catalog[0].missing, catalog[0].Nmissing)) { 791 fprintf (stderr, "trouble converting format\n"); 792 goto failure; 793 } 794 795 // write out Missing table (must write out entire table) 796 if (!dvo_catalog_save_subcat (catalog[0].missing_catalog, &ftable, 0, catalog[0].Nmissing, catalog[0].Nmissing, catalog[0].Nmissing)) { 797 fprintf (stderr, "trouble writing Missing Table\n"); 798 goto failure; 799 } 800 gfits_free_header (&header); 801 gfits_free_table (&ftable); 802 } 803 804 /*** Secfilt Table ***/ 805 if ((catalog[0].catflags & LOAD_SECF) && (catalog[0].secfilt != NULL)) { 806 807 first = 0; // first row in memory to write 808 start = catalog[0].Nsecf_off; // first disk row to write 809 Nitems = catalog[0].Nsecf_mem; 810 Nrows = Nitems - first; 811 812 assert (Nrows >= 0); 813 assert (first >= 0); 814 assert (first <= Nitems); 815 assert (catalog[0].Nsecf_disk >= catalog[0].Nsecf_off); 816 // XXX check these for consistency... 817 818 // convert to external table format 819 SecFiltToFtable (&ftable, &secfilt[first], Nrows, catalog[0].catformat); 820 821 // write out SecFilt table 822 if (!dvo_catalog_save_subcat (catalog[0].secfilt_catalog, &ftable, start, Nrows, catalog[0].Nsecf_disk, Nsecf_disk_new)) { 823 fprintf (stderr, "failure writing SecFilt table\n"); 824 goto failure; 825 } 826 gfits_free_header (&header); 827 gfits_free_table (&ftable); 828 } 829 830 /* free temp storage */ 831 if (primary != NULL) { 832 free (primary); 833 free (secfilt); 834 } 835 return (TRUE); 836 837 failure: 838 /* free temp storage */ 839 gfits_free_header (&header); 840 gfits_free_table (&ftable); 841 if (primary != NULL) { 842 free (primary); 843 free (secfilt); 844 } 845 return (FALSE); 846 } 847 648 848 /* update_catalog_split only writes new lines to file. */ 649 849 int dvo_catalog_update_split (Catalog *catalog, char VERBOSE) {
Note:
See TracChangeset
for help on using the changeset viewer.
