- Timestamp:
- Sep 29, 2020, 12:14:23 PM (6 years ago)
- Location:
- trunk/Ohana/src/libdvo
- Files:
-
- 3 edited
-
include/dvo.h (modified) (1 diff)
-
src/skyregion_gsc.c (modified) (11 diffs)
-
src/skyregion_ops.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/libdvo/include/dvo.h
r40583 r41424 1135 1135 SkyList *SkyListChildrenByBounds_List PROTO((SkyList *table, int depth, double Rmin, double Rmax, double Dmin, double Dmax)); 1136 1136 1137 /* APIs to split and extend a skytable */ 1138 void SkyTableL5fromL4_List PROTO((SkyRegion *L4, SkyTable *L5, int Nfirst)); 1139 void SkyTableExtend PROTO((SkyTable *old, SkyTable *new, int depth)); 1140 1141 1137 1142 int set_skyregion(double Rs, double Re, double Ds, double De); 1138 1143 int get_skyregion (double *Rs, double *Re, double *Ds, double *De); -
trunk/Ohana/src/libdvo/src/skyregion_gsc.c
r41422 r41424 39 39 int NsetForDecRange (float dDec); 40 40 void SkyRegionPrint (SkyRegion *region); 41 42 void SkyTableExtend (SkyTable *old, SkyTable *new, int depth); 43 void SkyTableL5fromL4_List (SkyRegion *L4, SkyTable *L5, int Nfirst); 44 45 void SkyTableValidate (SkyTable *table); 41 46 42 47 SkyTable *SkyTableFromGSC (char *filename, int depth, int VERBOSE) { … … 160 165 skytable[0].Nregions = 0; 161 166 167 skytable[0].filename = NULL; 168 162 169 // define the host table filename 163 170 strcpy (skytable->hosts, "HostTable.dat"); … … 171 178 SkyTableAppend (skytable, &L2, skytable[0].Nregions - L1.Nregions); 172 179 SkyTableAppend (skytable, &L3, skytable[0].Nregions - L2.Nregions); 180 SkyTableAppend (skytable, &L4, skytable[0].Nregions - L3.Nregions); 181 182 SkyTableValidate (skytable); 183 184 free (L0.regions); 185 free (L1.regions); 186 free (L2.regions); 187 free (L3.regions); 188 free (L4.regions); 189 gfits_free_header (&theader); 190 gfits_free_table (&ftable); 173 191 174 192 // XXX TEST : for L4 entries in a certain ra,dec range, generate L5 entries: 175 193 # if (0) 176 194 SkyTable L5; 177 195 L5.Nregions = 0; … … 189 207 } 190 208 191 SkyTableAppend (skytable, &L4, skytable[0].Nregions - L3.Nregions);192 193 209 SkyTableAppend (skytable, &L5, skytable[0].Nregions - L4.Nregions); 194 210 free (L5.regions); 195 196 free (L0.regions); 197 free (L1.regions); 198 free (L2.regions); 199 free (L3.regions); 200 free (L4.regions); 201 gfits_free_header (&theader); 202 gfits_free_table (&ftable); 211 # endif 203 212 204 213 /* fix the depth elements and create the filename array */ … … 208 217 skytable[0].regions[i].table = (skytable[0].regions[i].depth == depth); 209 218 } 219 220 // XXX TEST : for L4 entries in a certain ra,dec range, generate L5 entries: 221 # if (0) 222 SkyTable L5; 223 L5.Nregions = 0; 224 L5.Nalloc = 1000; 225 ALLOCATE (L5.regions, SkyRegion, L5.Nalloc); 226 227 // get a list of the SkyRegions which overlap the point at the depth (only 1) 228 SkyList *skylist = SkyRegionByPoint (skytable, 4, 10.0, 40.0); 229 230 for (i = 0; i < skylist->Nregions; i++) { 231 SkyTableL5fromL4_List (skylist->regions[i], &L5, skytable->Nregions); 232 } 233 234 SkyTableExtend (skytable, &L5, depth); 235 free (L5.regions); 236 # endif 210 237 211 238 // ohana_memdump (0); … … 565 592 } 566 593 594 int NDIV_L5 = 5; 595 567 596 // append new regions on to the supplied L5 list (may be empty) 568 597 void SkyTableL5fromL4 (SkyRegion *L4, SkyTable *L5) { … … 573 602 574 603 Nr = L5[0].Nregions; 575 L5[0].Nregions += NDIV *NDIV;604 L5[0].Nregions += NDIV_L5*NDIV_L5; 576 605 CHECK_REALLOCATE (L5[0].regions, SkyRegion, L5[0].Nalloc, L5[0].Nregions, 0.5*L5[0].Nalloc); 577 606 … … 582 611 // XXX handle the pole regions just a bit differently... 583 612 584 /* subdivide L4 into NDIV boxes */613 /* subdivide L4 into NDIV_L5 boxes */ 585 614 Rmin = L4[0].Rmin; 586 615 Dmin = L4[0].Dmin; 587 dR = (L4[0].Rmax - L4[0].Rmin) / NDIV ;588 dD = (L4[0].Dmax - L4[0].Dmin) / NDIV ;616 dR = (L4[0].Rmax - L4[0].Rmin) / NDIV_L5; 617 dD = (L4[0].Dmax - L4[0].Dmin) / NDIV_L5; 589 618 590 619 Nbox = 0; 591 for (ny = 0; ny < NDIV ; ny ++) {592 for (nx = 0; nx < NDIV ; nx ++) {620 for (ny = 0; ny < NDIV_L5; ny ++) { 621 for (nx = 0; nx < NDIV_L5; nx ++) { 593 622 L5[0].regions[Nr].Rmin = Rmin + (nx + 0)*dR; 594 623 L5[0].regions[Nr].Rmax = Rmin + (nx + 1)*dR; … … 618 647 } 619 648 649 // append new regions on to the supplied L5 list (may be empty) 650 void SkyTableL5fromL4_List (SkyRegion *L4, SkyTable *L5, int Nfirst) { 651 652 int nx, ny, Nr, Nbox; 653 double Rmin, Dmin, dR, dD; 654 char name[80]; 655 656 Nr = L5[0].Nregions; 657 L5[0].Nregions += NDIV_L5*NDIV_L5; 658 CHECK_REALLOCATE (L5[0].regions, SkyRegion, L5[0].Nalloc, L5[0].Nregions, 0.5*L5[0].Nalloc); 659 660 // Nfirst is the index value which the first entry in the new table of regions would get. 661 662 // These child ranges are relative to the index of the first entry in this L5 region. 663 // This is the value of Nregions of the full table. 664 665 L4[0].child = TRUE; 666 L4[0].childS = Nfirst + Nr; 667 L4[0].childE = Nfirst + L5[0].Nregions; 668 669 // XXX handle the pole regions just a bit differently... 670 671 /* subdivide L4 into NDIV_L5 boxes */ 672 Rmin = L4[0].Rmin; 673 Dmin = L4[0].Dmin; 674 dR = (L4[0].Rmax - L4[0].Rmin) / NDIV_L5; 675 dD = (L4[0].Dmax - L4[0].Dmin) / NDIV_L5; 676 677 Nbox = 0; 678 for (ny = 0; ny < NDIV_L5; ny ++) { 679 for (nx = 0; nx < NDIV_L5; nx ++) { 680 L5[0].regions[Nr].Rmin = Rmin + (nx + 0)*dR; 681 L5[0].regions[Nr].Rmax = Rmin + (nx + 1)*dR; 682 L5[0].regions[Nr].Dmin = Dmin + (ny + 0)*dD; 683 L5[0].regions[Nr].Dmax = Dmin + (ny + 1)*dD; 684 685 L5[0].regions[Nr].index = Nfirst + Nr; 686 L5[0].regions[Nr].depth = 5; 687 L5[0].regions[Nr].table = -1; 688 L5[0].regions[Nr].parent = L4[0].index; 689 L5[0].regions[Nr].child = FALSE; 690 L5[0].regions[Nr].childS = 0; 691 L5[0].regions[Nr].childE = 0; 692 L5[0].regions[Nr].hostFlags = 0; 693 L5[0].regions[Nr].hostID = 0; 694 L5[0].regions[Nr].backupID = 0; 695 696 myAssert (snprintf (name, 80, "%s.%02d", L4[0].name, Nbox) < 80, "overflow"); 697 strcpy (L5[0].regions[Nr].name, name); 698 if (DEBUG >= 4) SkyRegionPrint (&L5[0].regions[Nr]); 699 700 Nr ++; 701 Nbox ++; 702 } 703 } 704 return; 705 } 706 707 // add the supplied skytable regions to the end. 708 // the parent, child, and index values are already correct 709 void SkyTableExtend (SkyTable *old, SkyTable *new, int depth) { 710 711 int i, Nold; 712 713 Nold = old[0].Nregions; 714 715 old[0].Nregions += new[0].Nregions; 716 REALLOCATE (old[0].regions, SkyRegion, old[0].Nregions); 717 REALLOCATE (old[0].filename, char *, old[0].Nregions); 718 719 for (i = 0; i < new[0].Nregions; i++) { 720 old[0].regions[i + Nold] = new[0].regions[i]; 721 old[0].regions[i + Nold].table = (old[0].regions[i + Nold].depth == depth); 722 old[0].filename[i + Nold] = NULL; 723 } 724 return; 725 } 726 620 727 // memory neutral 728 729 /* We have a skytable with a certain number of entries. 730 Add the new entries on to the end of this table 731 */ 732 621 733 void SkyTableAppend (SkyTable *old, SkyTable *new, int Nprev) { 622 734 … … 628 740 REALLOCATE (old[0].regions, SkyRegion, old[0].Nregions); 629 741 742 // this code assumes that the parents of all supplied 743 // new regions are the last block of regions 630 744 for (i = Nprev; i < Nold; i++) { 631 745 old[0].regions[i].childS += Nold; … … 635 749 for (i = 0; i < new[0].Nregions; i++) { 636 750 old[0].regions[i + Nold] = new[0].regions[i]; 637 old[0].regions[i + Nold].parent += N old;751 old[0].regions[i + Nold].parent += Nprev; 638 752 old[0].regions[i + Nold].index += Nold; 639 753 } 754 return; 755 } 756 757 void SkyTableValidate (SkyTable *table) { 758 759 for (int i = 0; i < table[0].Nregions; i++) { 760 int idx = table[0].regions[i].index; // my index 761 762 // index should match sequence 763 myAssert (i == idx, "bad index"); 764 765 int parent = table[0].regions[i].parent; 766 if (parent != -1) { 767 // my index should be in the range of my parent's children 768 myAssert (idx >= table[0].regions[parent].childS, "bad childS"); 769 myAssert (idx < table[0].regions[parent].childE, "bad childE"); 770 } 771 int Ns = table[0].regions[i].childS; 772 int Ne = table[0].regions[i].childE; 773 if (Ns && Ne) { 774 for (int j = Ns; j < Ne; j++) { 775 // my children should all have my index as the parent 776 myAssert (table[0].regions[j].parent == idx, "bad parent"); 777 } 778 } 779 } 780 781 fprintf (stderr, "validated skytable\n"); 640 782 return; 641 783 } -
trunk/Ohana/src/libdvo/src/skyregion_ops.c
r40384 r41424 116 116 117 117 list[0].regions[0] = ®ion[No]; 118 list[0].filename[0] = table[0].filename[No]; 118 if (table[0].filename) { 119 list[0].filename[0] = table[0].filename[No]; 120 } 119 121 list[0].Nregions = 1; 120 122 return (list);
Note:
See TracChangeset
for help on using the changeset viewer.
