Changeset 8295
- Timestamp:
- Aug 11, 2006, 4:50:07 PM (20 years ago)
- Location:
- trunk/Ohana/src/libdvo
- Files:
-
- 1 added
- 2 edited
-
Makefile (modified) (1 diff)
-
src/skyregion_gsc.c (modified) (5 diffs)
-
src/tabletest.c (added)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/libdvo/Makefile
r6683 r8295 105 105 cp $(INC)/$* $(DESTINC)/ 106 106 107 tabletest: install 108 gcc -L$(LLIB) -I$(LINC) -o tabletest $(SRC)/tabletest.c -ldvo -lFITS -lohana -lm 109 107 110 clean: 108 111 rm -f */*~ -
trunk/Ohana/src/libdvo/src/skyregion_gsc.c
r7782 r8295 12 12 "s0000", "s0730", "s1500", "s2230", "s3000", "s3730", "s4500", "s5230", "s6000", "s6730", "s7500", "s8230", "none"}; 13 13 14 void SkyTableSort (SkyTable *table); 15 14 16 SkyTable *SkyTableFromGSC (char *filename, int depth, int VERBOSE) { 15 17 16 int i, j, Nx, Ny, No, N r, NR, Nlines;18 int i, j, Nx, Ny, No, Nb, Nr, NR, Nlines; 17 19 int nx, ny, Ne, Ns, Nbox; 18 20 double RA0, RA1, DEC0, DEC1, dR, dD; … … 23 25 SkyTable *skytable; 24 26 SkyRegion *regions; 27 SkyTable bandregions; 25 28 FILE *f; 26 29 … … 95 98 regions[No].childE = Nr; 96 99 97 /* level 2 : copy the data from the GSC Region files */ 100 /* level 2 : identify the blocks in the DEC bands */ 101 No = 1; 102 for (i = 0; i < 25; i++) { 103 if (i == 12) continue; 104 105 Nlines = 0; 106 for (j = 0; j < i; j++) Nlines += DecLines[j]; 107 108 /* find and save all GSC Regions in this band */ 109 Nb = 0; 110 ALLOCATE (bandregions.regions, SkyRegion, DecLines[i]); 111 ALLOCATE (bandregions.filename, char *, DecLines[i]); 112 for (j = 0; j < DecLines[i]; j++) { 113 strncpy (temp, &ftable.buffer[(j + Nlines)*48], 48); 114 temp[49] = 0; 115 hstgsc_hms_to_deg (&RA0, &RA1, &DEC0, &DEC1, &temp[7]); 116 if (DEC1 < DEC0) SWAP (DEC0, DEC1); 117 118 /* check that we are in correct Dec band */ 119 if (DEC1 < regions[No].Dmin) { 120 fprintf (stderr, "error: table mis-match (1)\n"); 121 fprintf (stderr, "line: %s\n", temp); 122 fprintf (stderr, "region %d: %f - %f\n", No, regions[No].Dmin, regions[No].Dmax); 123 return (NULL); 124 } 125 if (DEC0 > regions[No].Dmax) { 126 fprintf (stderr, "error: table mis-match (2)\n"); 127 fprintf (stderr, "line: %s\n", temp); 128 fprintf (stderr, "region %d: %f - %f\n", No, regions[No].Dmin, regions[No].Dmax); 129 return (NULL); 130 } 131 132 /* regions with RA0 < 360 have RA1 == 0.0 */ 133 if (RA1 < RA0) RA1 += 360.0; 134 135 bandregions.regions[Nb].Dmin = DEC0; 136 bandregions.regions[Nb].Dmax = DEC1; 137 bandregions.regions[Nb].Rmin = RA0; 138 bandregions.regions[Nb].Rmax = RA1; 139 bandregions.filename[Nb] = NULL; 140 Nb ++; 141 } 142 bandregions.Nregions = Nb; 143 144 /* sort the band regions by Rmin */ 145 SkyTableSort (&bandregions); 146 147 { 148 int k, Nt, Nrange, Ndiv, Nset; 149 int *transitions; 150 float dDec, dDcur; 151 152 /* search for transitions in the region dDec */ 153 ALLOCATE (transitions, int, 50); 154 Nt = 0; 155 dDec = bandregions.regions[0].Dmax - bandregions.regions[0].Dmin; 156 dDcur = dDec; 157 transitions[0] = 0; 158 Nt++; 159 DEC0 = bandregions.regions[0].Dmin; 160 DEC1 = bandregions.regions[0].Dmax; 161 for (j = 0; j < Nb; j++) { 162 DEC0 = MIN (bandregions.regions[j].Dmin, DEC0); 163 DEC1 = MAX (bandregions.regions[j].Dmax, DEC1); 164 dDec = bandregions.regions[j].Dmax - bandregions.regions[j].Dmin; 165 if (dDec != dDcur) { 166 dDcur = dDec; 167 transitions[Nt] = j; 168 Nt++; 169 } 170 } 171 transitions[Nt] = Nb; 172 Nt++; 173 174 /* subdivide each transition range */ 175 for (j = 1; j < Nt; j++) { 176 Ne = transitions[j]; 177 Ns = transitions[j-1]; 178 dDec = bandregions.regions[Ns].Dmax - bandregions.regions[Ns].Dmin; 179 fprintf (stderr, "trans: %d - %d : ", Ns, Ne); 180 fprintf (stderr, "%f,%f - %f,%f\n", 181 bandregions.regions[Ns].Rmin, bandregions.regions[Ne-1].Rmax, 182 bandregions.regions[Ns].Dmin, bandregions.regions[Ns].Dmax); 183 184 Nrange = transitions[j] - transitions[j-1]; 185 Ndiv = (int) (0.5 + 7.5 / dDec); 186 switch (Ndiv) { 187 case 2: 188 Nset = 4*2; 189 break; 190 case 3: 191 Nset = 6*3; 192 break; 193 case 4: 194 Nset = 8*4; 195 break; 196 default: 197 fprintf (stderr, "programming error\n"); 198 exit (2); 199 } 200 for (k = Ns; k < Ne; k += Nset) { 201 regions[Nr].Rmin = bandregions.regions[k].Rmin; 202 if (k + Nset < Ne) { 203 regions[Nr].Rmax = bandregions.regions[k+Nset-1].Rmax; 204 } else { 205 regions[Nr].Rmax = bandregions.regions[Ne-1].Rmax; 206 } 207 regions[Nr].Dmin = DEC0; 208 regions[Nr].Dmax = DEC1; 209 fprintf (stderr, "new: %f - %f :%f - %f\n", 210 regions[Nr].Rmin, regions[Nr].Rmax, 211 regions[Nr].Dmin, regions[Nr].Dmax); 212 } 213 214 regions[Nr].index = Nr; 215 regions[Nr].depth = 2; 216 regions[Nr].parent = No; 217 regions[Nr].child = TRUE; 218 regions[Nr].table = (depth == 2); 219 regions[Nr].childS = 0; 220 regions[Nr].childE = 0; 221 } 222 regions[No].childS = Nr; 223 regions[No].childE = Nr; 224 No ++; 225 } 226 } 227 228 /* level 3 : copy the data from the GSC Region files */ 229 /* XXX fix this: level here is now 3 */ 98 230 No = 1; 99 231 for (i = 0; i < 25; i++) { … … 152 284 153 285 /* subdivide level 2 into NDIV boxes */ 286 /* XXX level here is now 4 */ 154 287 Ns = regions[regions[0].childS].childS; 155 288 Ne = regions[regions[0].childE - 1].childE; … … 201 334 return (skytable); 202 335 } 336 337 /* sort skytable by Rmin */ 338 void SkyTableSort (SkyTable *table) { 339 340 int i, j, k, l, ir, N; 341 SkyRegion *regions; 342 SkyRegion tempregion; 343 char **filename; 344 char *tempfile; 345 346 N = table[0].Nregions; 347 regions = table[0].regions; 348 filename = table[0].filename; 349 350 if (N < 2) return; 351 l = N >> 1; 352 ir = N - 1; 353 for (;;) { 354 if (l > 0) { 355 l--; 356 tempregion = regions[l]; 357 tempfile = filename[l]; 358 } else { 359 tempregion = regions[ir]; 360 tempfile = filename[ir]; 361 regions[ir] = regions[0]; 362 filename[ir] = filename[0]; 363 if (--ir == 0) { 364 regions[0] = tempregion; 365 filename[0] = tempfile; 366 return; 367 } 368 } 369 i = l; 370 j = (l << 1) + 1; 371 while (j <= ir) { 372 if (j < ir && regions[j].Rmin < regions[j+1].Rmin) ++j; 373 if (tempregion.Rmin < regions[j].Rmin) { 374 regions[i] = regions[j]; 375 filename[i] = filename[j]; 376 j += (i=j) + 1; 377 } 378 else j = ir + 1; 379 } 380 regions[i] = tempregion; 381 filename[i] = tempfile; 382 } 383 }
Note:
See TracChangeset
for help on using the changeset viewer.
