Changeset 10711 for trunk/psModules/test/astrom/tap_pmAstrometryWCS_DVO2.c
- Timestamp:
- Dec 13, 2006, 8:25:29 PM (20 years ago)
- Location:
- trunk/psModules/test/astrom
- Files:
-
- 2 edited
-
. (modified) (1 prop)
-
tap_pmAstrometryWCS_DVO2.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/test/astrom
- Property svn:ignore
-
old new 8 8 tap_pmAstrometryWCS 9 9 tap_pmAstrometryWCS_DVO2 10 tap_pmAstrometryWCS_DVO3
-
- Property svn:ignore
-
trunk/psModules/test/astrom/tap_pmAstrometryWCS_DVO2.c
r10688 r10711 20 20 void test2x(); // small rotation with central offset 21 21 void test3x(); // 2nd order term with central offset 22 void test3inv(); // 2nd order term with central offset 22 23 23 24 int main (void) … … 33 34 test2x(); 34 35 test3x(); 36 test3inv(); 37 35 38 return exit_status(); 39 } 40 41 void test1() 42 { 43 diag("test pmAstromReadWCS"); 44 psMemId id = psMemGetId(); 45 46 // build a DVO-style coordinate system 47 Coords coords; 48 strcpy (coords.ctype, "RA---TAN"); 49 coords.crval1 = 0.0; 50 coords.crval2 = 0.0; 51 coords.crpix1 = 0.0; 52 coords.crpix2 = 0.0; 53 coords.cdelt1 = 1.0/3600; 54 coords.cdelt2 = 1.0/3600; 55 coords.pc1_1 = 1.0; 56 coords.pc1_2 = 0.0; 57 coords.pc2_1 = 0.0; 58 coords.pc2_2 = 1.0; 59 coords.Npolyterms = 0; 60 for (int i = 0; i < 7; i++) { 61 coords.polyterms[i][0] = 0.0; 62 coords.polyterms[i][1] = 0.0; 63 } 64 65 psMetadata *header = WriteCoordsToHeader (&coords); 66 pmFPA *fpa = pmFPAAlloc (NULL); 67 pmChip *chip = pmChipAlloc (fpa, NULL); 68 69 bool status = pmAstromReadWCS (fpa, chip, header, PM_RAD_DEG*10.0/3600.0, false); 70 ok (status, "converted WCS keywords to WCS astrometry"); 71 skip_start (!status, 1, "*** WCS Conversion FAILS *** : skipping related tests"); 72 73 psPlane *onChip = psPlaneAlloc(); 74 psPlane *onFPA = psPlaneAlloc(); 75 psPlane *onTPA = psPlaneAlloc(); 76 psSphere *onSky = psSphereAlloc(); 77 78 double rDVO, dDVO; 79 for (double x = -2000; x <= +2000; x+= 500.0) { 80 for (double y = -2000; y <= +2000; y+= 500.0) { 81 XY_to_RD (&rDVO, &dDVO, x, y, &coords); 82 83 onChip->x = x; 84 onChip->y = y; 85 86 psPlaneTransformApply (onFPA, chip->toFPA, onChip); 87 psPlaneDistortApply (onTPA, fpa->toTPA, onFPA, 0.0, 0.0); 88 psDeproject (onSky, onTPA, fpa->toSky); 89 90 while (onSky->r > 2*M_PI) 91 onSky->r -= 2*M_PI; 92 while (onSky->r < 0) 93 onSky->r += 2*M_PI; 94 95 ok_float(rDVO, onSky->r*PM_DEG_RAD, "coordinate match: %f vs %f (delta = %f)", rDVO, onSky->r*PM_DEG_RAD, rDVO - onSky->r*PM_DEG_RAD); 96 ok_float(dDVO, onSky->d*PM_DEG_RAD, "coordinate match: %f vs %f (delta = %f)", dDVO, onSky->d*PM_DEG_RAD, dDVO - onSky->d*PM_DEG_RAD); 97 } 98 } 99 psFree (onSky); 100 psFree (onTPA); 101 psFree (onFPA); 102 psFree (onChip); 103 104 skip_end(); 105 psFree (fpa); 106 psFree (chip); 107 psFree (header); 108 109 ok(!psMemCheckLeaks (id, NULL, stderr, false), "no memory leaks"); 110 } 111 112 void test2() 113 { 114 diag("test pmAstromReadWCS"); 115 psMemId id = psMemGetId(); 116 117 // build a DVO-style coordinate system 118 Coords coords; 119 strcpy (coords.ctype, "RA---TAN"); 120 coords.crval1 = 0.0; 121 coords.crval2 = 0.0; 122 coords.crpix1 = 0.0; 123 coords.crpix2 = 0.0; 124 coords.cdelt1 = 1.0/3600; 125 coords.cdelt2 = 1.0/3600; 126 coords.pc1_1 = 0.9; 127 coords.pc1_2 = 0.1; 128 coords.pc2_1 =-0.1; 129 coords.pc2_2 = 0.9; 130 coords.Npolyterms = 0; 131 for (int i = 0; i < 7; i++) { 132 coords.polyterms[i][0] = 0.0; 133 coords.polyterms[i][1] = 0.0; 134 } 135 136 psMetadata *header = WriteCoordsToHeader (&coords); 137 pmFPA *fpa = pmFPAAlloc (NULL); 138 pmChip *chip = pmChipAlloc (fpa, NULL); 139 140 bool status = pmAstromReadWCS (fpa, chip, header, PM_RAD_DEG*10.0/3600.0, false); 141 ok (status, "converted WCS keywords to WCS astrometry"); 142 skip_start (!status, 1, "*** WCS Conversion FAILS *** : skipping related tests"); 143 144 psPlane *onChip = psPlaneAlloc(); 145 psPlane *onFPA = psPlaneAlloc(); 146 psPlane *onTPA = psPlaneAlloc(); 147 psSphere *onSky = psSphereAlloc(); 148 149 double rDVO, dDVO; 150 for (double x = -2000; x <= +2000; x+= 500.0) { 151 for (double y = -2000; y <= +2000; y+= 500.0) { 152 XY_to_RD (&rDVO, &dDVO, x, y, &coords); 153 154 onChip->x = x; 155 onChip->y = y; 156 157 psPlaneTransformApply (onFPA, chip->toFPA, onChip); 158 psPlaneDistortApply (onTPA, fpa->toTPA, onFPA, 0.0, 0.0); 159 psDeproject (onSky, onTPA, fpa->toSky); 160 161 while (onSky->r > 2*M_PI) 162 onSky->r -= 2*M_PI; 163 while (onSky->r < 0) 164 onSky->r += 2*M_PI; 165 166 ok_float(rDVO, onSky->r*PM_DEG_RAD, "coordinate match: %f vs %f (delta = %f)", rDVO, onSky->r*PM_DEG_RAD, rDVO - onSky->r*PM_DEG_RAD); 167 ok_float(dDVO, onSky->d*PM_DEG_RAD, "coordinate match: %f vs %f (delta = %f)", dDVO, onSky->d*PM_DEG_RAD, dDVO - onSky->d*PM_DEG_RAD); 168 } 169 } 170 psFree (onSky); 171 psFree (onTPA); 172 psFree (onFPA); 173 psFree (onChip); 174 175 skip_end(); 176 psFree (fpa); 177 psFree (chip); 178 psFree (header); 179 180 ok(!psMemCheckLeaks (id, NULL, stderr, false), "no memory leaks"); 181 } 182 183 void test3() 184 { 185 diag("test pmAstromReadWCS"); 186 psMemId id = psMemGetId(); 187 188 // build a DVO-style coordinate system 189 Coords coords; 190 strcpy (coords.ctype, "RA---TAN"); 191 coords.crval1 = 0.0; 192 coords.crval2 = 0.0; 193 coords.crpix1 = 0.0; 194 coords.crpix2 = 0.0; 195 coords.cdelt1 = 1.0/3600; 196 coords.cdelt2 = 1.0/3600; 197 coords.pc1_1 = 1.0; 198 coords.pc1_2 = 0.0; 199 coords.pc2_1 = 0.0; 200 coords.pc2_2 = 1.0; 201 coords.Npolyterms = 2; 202 for (int i = 0; i < 7; i++) { 203 coords.polyterms[i][0] = 0.0; 204 coords.polyterms[i][1] = 0.0; 205 } 206 coords.polyterms[0][0] = 0.01; // L vs X^2 207 coords.polyterms[2][1] = 0.01; // M vs Y^2 208 209 210 psMetadata *header = WriteCoordsToHeader (&coords); 211 pmFPA *fpa = pmFPAAlloc (NULL); 212 pmChip *chip = pmChipAlloc (fpa, NULL); 213 214 bool status = pmAstromReadWCS (fpa, chip, header, PM_RAD_DEG*10.0/3600.0, false); 215 ok (status, "converted WCS keywords to WCS astrometry"); 216 skip_start (!status, 1, "*** WCS Conversion FAILS *** : skipping related tests"); 217 218 psPlane *onChip = psPlaneAlloc(); 219 psPlane *onFPA = psPlaneAlloc(); 220 psPlane *onTPA = psPlaneAlloc(); 221 psSphere *onSky = psSphereAlloc(); 222 223 double rDVO, dDVO; 224 for (double x = -2000; x <= +2000; x+= 500.0) { 225 for (double y = -2000; y <= +2000; y+= 500.0) { 226 XY_to_RD (&rDVO, &dDVO, x, y, &coords); 227 228 onChip->x = x; 229 onChip->y = y; 230 231 psPlaneTransformApply (onFPA, chip->toFPA, onChip); 232 psPlaneDistortApply (onTPA, fpa->toTPA, onFPA, 0.0, 0.0); 233 psDeproject (onSky, onTPA, fpa->toSky); 234 235 while (onSky->r > 2*M_PI) 236 onSky->r -= 2*M_PI; 237 while (onSky->r < 0) 238 onSky->r += 2*M_PI; 239 240 ok_float(rDVO, onSky->r*PM_DEG_RAD, "coordinate match: %f vs %f (delta = %f)", rDVO, onSky->r*PM_DEG_RAD, rDVO - onSky->r*PM_DEG_RAD); 241 ok_float(dDVO, onSky->d*PM_DEG_RAD, "coordinate match: %f vs %f (delta = %f)", dDVO, onSky->d*PM_DEG_RAD, dDVO - onSky->d*PM_DEG_RAD); 242 } 243 } 244 psFree (onSky); 245 psFree (onTPA); 246 psFree (onFPA); 247 psFree (onChip); 248 249 skip_end(); 250 psFree (fpa); 251 psFree (chip); 252 psFree (header); 253 254 ok(!psMemCheckLeaks (id, NULL, stderr, false), "no memory leaks"); 255 } 256 257 void test1x() 258 { 259 diag("test pmAstromReadWCS"); 260 psMemId id = psMemGetId(); 261 262 // build a DVO-style coordinate system 263 Coords coords; 264 strcpy (coords.ctype, "RA---TAN"); 265 coords.crval1 = 0.0; 266 coords.crval2 = 0.0; 267 coords.crpix1 = +50.0; 268 coords.crpix2 = -20.0; 269 coords.cdelt1 = 1.0/3600; 270 coords.cdelt2 = 1.0/3600; 271 coords.pc1_1 = 1.0; 272 coords.pc1_2 = 0.0; 273 coords.pc2_1 = 0.0; 274 coords.pc2_2 = 1.0; 275 coords.Npolyterms = 0; 276 for (int i = 0; i < 7; i++) { 277 coords.polyterms[i][0] = 0.0; 278 coords.polyterms[i][1] = 0.0; 279 } 280 281 psMetadata *header = WriteCoordsToHeader (&coords); 282 pmFPA *fpa = pmFPAAlloc (NULL); 283 pmChip *chip = pmChipAlloc (fpa, NULL); 284 285 bool status = pmAstromReadWCS (fpa, chip, header, PM_RAD_DEG*10.0/3600.0, false); 286 ok (status, "converted WCS keywords to WCS astrometry"); 287 skip_start (!status, 1, "*** WCS Conversion FAILS *** : skipping related tests"); 288 289 psPlane *onChip = psPlaneAlloc(); 290 psPlane *onFPA = psPlaneAlloc(); 291 psPlane *onTPA = psPlaneAlloc(); 292 psSphere *onSky = psSphereAlloc(); 293 294 double rDVO, dDVO; 295 for (double x = -2000; x <= +2000; x+= 500.0) { 296 for (double y = -2000; y <= +2000; y+= 500.0) { 297 XY_to_RD (&rDVO, &dDVO, x, y, &coords); 298 299 onChip->x = x; 300 onChip->y = y; 301 302 psPlaneTransformApply (onFPA, chip->toFPA, onChip); 303 psPlaneDistortApply (onTPA, fpa->toTPA, onFPA, 0.0, 0.0); 304 psDeproject (onSky, onTPA, fpa->toSky); 305 306 while (onSky->r > 2*M_PI) 307 onSky->r -= 2*M_PI; 308 while (onSky->r < 0) 309 onSky->r += 2*M_PI; 310 311 ok_float(rDVO, onSky->r*PM_DEG_RAD, "coordinate match: %f vs %f (delta = %f)", rDVO, onSky->r*PM_DEG_RAD, rDVO - onSky->r*PM_DEG_RAD); 312 ok_float(dDVO, onSky->d*PM_DEG_RAD, "coordinate match: %f vs %f (delta = %f)", dDVO, onSky->d*PM_DEG_RAD, dDVO - onSky->d*PM_DEG_RAD); 313 } 314 } 315 psFree (onSky); 316 psFree (onTPA); 317 psFree (onFPA); 318 psFree (onChip); 319 320 skip_end(); 321 psFree (fpa); 322 psFree (chip); 323 psFree (header); 324 325 ok(!psMemCheckLeaks (id, NULL, stderr, false), "no memory leaks"); 326 } 327 328 void test2x() 329 { 330 diag("test pmAstromReadWCS"); 331 psMemId id = psMemGetId(); 332 333 // build a DVO-style coordinate system 334 Coords coords; 335 strcpy (coords.ctype, "RA---TAN"); 336 coords.crval1 = 0.0; 337 coords.crval2 = 0.0; 338 coords.crpix1 = +50.0; 339 coords.crpix2 = -20.0; 340 coords.cdelt1 = 1.0/3600; 341 coords.cdelt2 = 1.0/3600; 342 coords.pc1_1 = 0.9; 343 coords.pc1_2 = 0.1; 344 coords.pc2_1 =-0.1; 345 coords.pc2_2 = 0.9; 346 coords.Npolyterms = 0; 347 for (int i = 0; i < 7; i++) { 348 coords.polyterms[i][0] = 0.0; 349 coords.polyterms[i][1] = 0.0; 350 } 351 352 psMetadata *header = WriteCoordsToHeader (&coords); 353 pmFPA *fpa = pmFPAAlloc (NULL); 354 pmChip *chip = pmChipAlloc (fpa, NULL); 355 356 bool status = pmAstromReadWCS (fpa, chip, header, PM_RAD_DEG*10.0/3600.0, false); 357 ok (status, "converted WCS keywords to WCS astrometry"); 358 skip_start (!status, 1, "*** WCS Conversion FAILS *** : skipping related tests"); 359 360 psPlane *onChip = psPlaneAlloc(); 361 psPlane *onFPA = psPlaneAlloc(); 362 psPlane *onTPA = psPlaneAlloc(); 363 psSphere *onSky = psSphereAlloc(); 364 365 double rDVO, dDVO; 366 for (double x = -2000; x <= +2000; x+= 500.0) { 367 for (double y = -2000; y <= +2000; y+= 500.0) { 368 XY_to_RD (&rDVO, &dDVO, x, y, &coords); 369 370 onChip->x = x; 371 onChip->y = y; 372 373 psPlaneTransformApply (onFPA, chip->toFPA, onChip); 374 psPlaneDistortApply (onTPA, fpa->toTPA, onFPA, 0.0, 0.0); 375 psDeproject (onSky, onTPA, fpa->toSky); 376 377 while (onSky->r > 2*M_PI) 378 onSky->r -= 2*M_PI; 379 while (onSky->r < 0) 380 onSky->r += 2*M_PI; 381 382 ok_float(rDVO, onSky->r*PM_DEG_RAD, "coordinate match: %f vs %f (delta = %f)", rDVO, onSky->r*PM_DEG_RAD, rDVO - onSky->r*PM_DEG_RAD); 383 ok_float(dDVO, onSky->d*PM_DEG_RAD, "coordinate match: %f vs %f (delta = %f)", dDVO, onSky->d*PM_DEG_RAD, dDVO - onSky->d*PM_DEG_RAD); 384 } 385 } 386 psFree (onSky); 387 psFree (onTPA); 388 psFree (onFPA); 389 psFree (onChip); 390 391 skip_end(); 392 psFree (fpa); 393 psFree (chip); 394 psFree (header); 395 396 ok(!psMemCheckLeaks (id, NULL, stderr, false), "no memory leaks"); 36 397 } 37 398 … … 110 471 } 111 472 112 void test2x() 113 { 114 diag("test pmAstromReadWCS"); 115 psMemId id = psMemGetId(); 116 117 // build a DVO-style coordinate system 118 Coords coords; 119 strcpy (coords.ctype, "RA---TAN"); 120 coords.crval1 = 0.0; 121 coords.crval2 = 0.0; 122 coords.crpix1 = +50.0; 123 coords.crpix2 = -20.0; 124 coords.cdelt1 = 1.0/3600; 125 coords.cdelt2 = 1.0/3600; 126 coords.pc1_1 = 0.9; 127 coords.pc1_2 = 0.1; 128 coords.pc2_1 =-0.1; 129 coords.pc2_2 = 0.9; 130 coords.Npolyterms = 0; 131 for (int i = 0; i < 7; i++) { 132 coords.polyterms[i][0] = 0.0; 133 coords.polyterms[i][1] = 0.0; 134 } 135 136 psMetadata *header = WriteCoordsToHeader (&coords); 137 pmFPA *fpa = pmFPAAlloc (NULL); 138 pmChip *chip = pmChipAlloc (fpa, NULL); 139 140 bool status = pmAstromReadWCS (fpa, chip, header, PM_RAD_DEG*10.0/3600.0, false); 141 ok (status, "converted WCS keywords to WCS astrometry"); 142 skip_start (!status, 1, "*** WCS Conversion FAILS *** : skipping related tests"); 143 144 psPlane *onChip = psPlaneAlloc(); 145 psPlane *onFPA = psPlaneAlloc(); 146 psPlane *onTPA = psPlaneAlloc(); 147 psSphere *onSky = psSphereAlloc(); 148 149 double rDVO, dDVO; 150 for (double x = -2000; x <= +2000; x+= 500.0) { 151 for (double y = -2000; y <= +2000; y+= 500.0) { 152 XY_to_RD (&rDVO, &dDVO, x, y, &coords); 153 154 onChip->x = x; 155 onChip->y = y; 156 157 psPlaneTransformApply (onFPA, chip->toFPA, onChip); 158 psPlaneDistortApply (onTPA, fpa->toTPA, onFPA, 0.0, 0.0); 159 psDeproject (onSky, onTPA, fpa->toSky); 160 161 while (onSky->r > 2*M_PI) 162 onSky->r -= 2*M_PI; 163 while (onSky->r < 0) 164 onSky->r += 2*M_PI; 165 166 ok_float(rDVO, onSky->r*PM_DEG_RAD, "coordinate match: %f vs %f (delta = %f)", rDVO, onSky->r*PM_DEG_RAD, rDVO - onSky->r*PM_DEG_RAD); 167 ok_float(dDVO, onSky->d*PM_DEG_RAD, "coordinate match: %f vs %f (delta = %f)", dDVO, onSky->d*PM_DEG_RAD, dDVO - onSky->d*PM_DEG_RAD); 168 } 169 } 170 psFree (onSky); 171 psFree (onTPA); 172 psFree (onFPA); 173 psFree (onChip); 174 175 skip_end(); 176 psFree (fpa); 177 psFree (chip); 178 psFree (header); 179 180 ok(!psMemCheckLeaks (id, NULL, stderr, false), "no memory leaks"); 181 } 182 183 void test1x() 184 { 185 diag("test pmAstromReadWCS"); 473 void test3inv() 474 { 475 diag("test the inversion of the non-linear polynomial for toFPA -> fromFPA in pmAstromReadWCS"); 186 476 psMemId id = psMemGetId(); 187 477 … … 199 489 coords.pc2_1 = 0.0; 200 490 coords.pc2_2 = 1.0; 201 coords.Npolyterms = 0;491 coords.Npolyterms = 2; 202 492 for (int i = 0; i < 7; i++) { 203 493 coords.polyterms[i][0] = 0.0; 204 494 coords.polyterms[i][1] = 0.0; 205 495 } 496 coords.polyterms[0][0] = 0.01; // L vs X^2 497 coords.polyterms[2][1] = 0.01; // M vs Y^2 498 206 499 207 500 psMetadata *header = WriteCoordsToHeader (&coords); … … 213 506 skip_start (!status, 1, "*** WCS Conversion FAILS *** : skipping related tests"); 214 507 215 psPlane *onChip = psPlaneAlloc(); 216 psPlane *onFPA = psPlaneAlloc(); 217 psPlane *onTPA = psPlaneAlloc(); 508 psPlane *aChip = psPlaneAlloc(); 509 psPlane *aFPA = psPlaneAlloc(); 510 psPlane *aTPA = psPlaneAlloc(); 511 psPlane *bChip = psPlaneAlloc(); 512 psPlane *bFPA = psPlaneAlloc(); 513 psPlane *bTPA = psPlaneAlloc(); 218 514 psSphere *onSky = psSphereAlloc(); 219 515 220 double rDVO, dDVO;221 516 for (double x = -2000; x <= +2000; x+= 500.0) { 222 517 for (double y = -2000; y <= +2000; y+= 500.0) { 223 XY_to_RD (&rDVO, &dDVO, x, y, &coords); 224 225 onChip->x = x; 226 onChip->y = y; 227 228 psPlaneTransformApply (onFPA, chip->toFPA, onChip); 229 psPlaneDistortApply (onTPA, fpa->toTPA, onFPA, 0.0, 0.0); 230 psDeproject (onSky, onTPA, fpa->toSky); 518 // convert up to sky 519 aChip->x = x; 520 aChip->y = y; 521 522 psPlaneTransformApply (aFPA, chip->toFPA, aChip); 523 psPlaneDistortApply (aTPA, fpa->toTPA, aFPA, 0.0, 0.0); 524 psDeproject (onSky, aTPA, fpa->toSky); 231 525 232 526 while (onSky->r > 2*M_PI) … … 235 529 onSky->r += 2*M_PI; 236 530 237 ok_float(rDVO, onSky->r*PM_DEG_RAD, "coordinate match: %f vs %f (delta = %f)", rDVO, onSky->r*PM_DEG_RAD, rDVO - onSky->r*PM_DEG_RAD); 238 ok_float(dDVO, onSky->d*PM_DEG_RAD, "coordinate match: %f vs %f (delta = %f)", dDVO, onSky->d*PM_DEG_RAD, dDVO - onSky->d*PM_DEG_RAD); 531 psProject (bTPA, onSky, fpa->toSky); 532 psPlaneDistortApply (bFPA, fpa->fromTPA, bTPA, 0.0, 0.0); 533 psPlaneTransformApply (bChip, chip->fromFPA, bFPA); 534 535 ok_float(aChip->x, bChip->x, "coordinate match: %f vs %f (delta = %f)", aChip->x, bChip->x, aChip->x - bChip->x); 536 ok_float(aChip->y, bChip->y, "coordinate match: %f vs %f (delta = %f)", aChip->y, bChip->y, aChip->y - bChip->y); 537 538 // ok_float(aFPA->x, bFPA->x, "coordinate match: %f vs %f (delta = %f)", aFPA->x, bFPA->x, aFPA->x - bFPA->x); 539 // ok_float(aFPA->y, bFPA->y, "coordinate match: %f vs %f (delta = %f)", aFPA->y, bFPA->y, aFPA->y - bFPA->y); 540 541 // in this example, TPA coordinates are 10 arcsec/mm; the tol. below represent 1nano-arcsec 542 // ok_float_tol(aTPA->x, bTPA->x, 1e-10, "coordinate match: %f vs %f (delta = %g)", aTPA->x, bTPA->x, aTPA->x - bTPA->x); 543 // ok_float_tol(aTPA->y, bTPA->y, 1e-10, "coordinate match: %f vs %f (delta = %g)", aTPA->y, bTPA->y, aTPA->y - bTPA->y); 239 544 } 240 545 } 241 546 psFree (onSky); 242 psFree (onTPA); 243 psFree (onFPA); 244 psFree (onChip); 245 246 skip_end(); 247 psFree (fpa); 248 psFree (chip); 249 psFree (header); 250 251 ok(!psMemCheckLeaks (id, NULL, stderr, false), "no memory leaks"); 252 } 253 254 void test3() 255 { 256 diag("test pmAstromReadWCS"); 257 psMemId id = psMemGetId(); 258 259 // build a DVO-style coordinate system 260 Coords coords; 261 strcpy (coords.ctype, "RA---TAN"); 262 coords.crval1 = 0.0; 263 coords.crval2 = 0.0; 264 coords.crpix1 = 0.0; 265 coords.crpix2 = 0.0; 266 coords.cdelt1 = 1.0/3600; 267 coords.cdelt2 = 1.0/3600; 268 coords.pc1_1 = 1.0; 269 coords.pc1_2 = 0.0; 270 coords.pc2_1 = 0.0; 271 coords.pc2_2 = 1.0; 272 coords.Npolyterms = 2; 273 for (int i = 0; i < 7; i++) { 274 coords.polyterms[i][0] = 0.0; 275 coords.polyterms[i][1] = 0.0; 276 } 277 coords.polyterms[0][0] = 0.01; // L vs X^2 278 coords.polyterms[2][1] = 0.01; // M vs Y^2 279 280 281 psMetadata *header = WriteCoordsToHeader (&coords); 282 pmFPA *fpa = pmFPAAlloc (NULL); 283 pmChip *chip = pmChipAlloc (fpa, NULL); 284 285 bool status = pmAstromReadWCS (fpa, chip, header, PM_RAD_DEG*10.0/3600.0, false); 286 ok (status, "converted WCS keywords to WCS astrometry"); 287 skip_start (!status, 1, "*** WCS Conversion FAILS *** : skipping related tests"); 288 289 psPlane *onChip = psPlaneAlloc(); 290 psPlane *onFPA = psPlaneAlloc(); 291 psPlane *onTPA = psPlaneAlloc(); 292 psSphere *onSky = psSphereAlloc(); 293 294 double rDVO, dDVO; 295 for (double x = -2000; x <= +2000; x+= 500.0) { 296 for (double y = -2000; y <= +2000; y+= 500.0) { 297 XY_to_RD (&rDVO, &dDVO, x, y, &coords); 298 299 onChip->x = x; 300 onChip->y = y; 301 302 psPlaneTransformApply (onFPA, chip->toFPA, onChip); 303 psPlaneDistortApply (onTPA, fpa->toTPA, onFPA, 0.0, 0.0); 304 psDeproject (onSky, onTPA, fpa->toSky); 305 306 while (onSky->r > 2*M_PI) 307 onSky->r -= 2*M_PI; 308 while (onSky->r < 0) 309 onSky->r += 2*M_PI; 310 311 ok_float(rDVO, onSky->r*PM_DEG_RAD, "coordinate match: %f vs %f (delta = %f)", rDVO, onSky->r*PM_DEG_RAD, rDVO - onSky->r*PM_DEG_RAD); 312 ok_float(dDVO, onSky->d*PM_DEG_RAD, "coordinate match: %f vs %f (delta = %f)", dDVO, onSky->d*PM_DEG_RAD, dDVO - onSky->d*PM_DEG_RAD); 313 } 314 } 315 psFree (onSky); 316 psFree (onTPA); 317 psFree (onFPA); 318 psFree (onChip); 319 320 skip_end(); 321 psFree (fpa); 322 psFree (chip); 323 psFree (header); 324 325 ok(!psMemCheckLeaks (id, NULL, stderr, false), "no memory leaks"); 326 } 327 328 void test2() 329 { 330 diag("test pmAstromReadWCS"); 331 psMemId id = psMemGetId(); 332 333 // build a DVO-style coordinate system 334 Coords coords; 335 strcpy (coords.ctype, "RA---TAN"); 336 coords.crval1 = 0.0; 337 coords.crval2 = 0.0; 338 coords.crpix1 = 0.0; 339 coords.crpix2 = 0.0; 340 coords.cdelt1 = 1.0/3600; 341 coords.cdelt2 = 1.0/3600; 342 coords.pc1_1 = 0.9; 343 coords.pc1_2 = 0.1; 344 coords.pc2_1 =-0.1; 345 coords.pc2_2 = 0.9; 346 coords.Npolyterms = 0; 347 for (int i = 0; i < 7; i++) { 348 coords.polyterms[i][0] = 0.0; 349 coords.polyterms[i][1] = 0.0; 350 } 351 352 psMetadata *header = WriteCoordsToHeader (&coords); 353 pmFPA *fpa = pmFPAAlloc (NULL); 354 pmChip *chip = pmChipAlloc (fpa, NULL); 355 356 bool status = pmAstromReadWCS (fpa, chip, header, PM_RAD_DEG*10.0/3600.0, false); 357 ok (status, "converted WCS keywords to WCS astrometry"); 358 skip_start (!status, 1, "*** WCS Conversion FAILS *** : skipping related tests"); 359 360 psPlane *onChip = psPlaneAlloc(); 361 psPlane *onFPA = psPlaneAlloc(); 362 psPlane *onTPA = psPlaneAlloc(); 363 psSphere *onSky = psSphereAlloc(); 364 365 double rDVO, dDVO; 366 for (double x = -2000; x <= +2000; x+= 500.0) { 367 for (double y = -2000; y <= +2000; y+= 500.0) { 368 XY_to_RD (&rDVO, &dDVO, x, y, &coords); 369 370 onChip->x = x; 371 onChip->y = y; 372 373 psPlaneTransformApply (onFPA, chip->toFPA, onChip); 374 psPlaneDistortApply (onTPA, fpa->toTPA, onFPA, 0.0, 0.0); 375 psDeproject (onSky, onTPA, fpa->toSky); 376 377 while (onSky->r > 2*M_PI) 378 onSky->r -= 2*M_PI; 379 while (onSky->r < 0) 380 onSky->r += 2*M_PI; 381 382 ok_float(rDVO, onSky->r*PM_DEG_RAD, "coordinate match: %f vs %f (delta = %f)", rDVO, onSky->r*PM_DEG_RAD, rDVO - onSky->r*PM_DEG_RAD); 383 ok_float(dDVO, onSky->d*PM_DEG_RAD, "coordinate match: %f vs %f (delta = %f)", dDVO, onSky->d*PM_DEG_RAD, dDVO - onSky->d*PM_DEG_RAD); 384 } 385 } 386 psFree (onSky); 387 psFree (onTPA); 388 psFree (onFPA); 389 psFree (onChip); 390 391 skip_end(); 392 psFree (fpa); 393 psFree (chip); 394 psFree (header); 395 396 ok(!psMemCheckLeaks (id, NULL, stderr, false), "no memory leaks"); 397 } 398 399 void test1() 400 { 401 diag("test pmAstromReadWCS"); 402 psMemId id = psMemGetId(); 403 404 // build a DVO-style coordinate system 405 Coords coords; 406 strcpy (coords.ctype, "RA---TAN"); 407 coords.crval1 = 0.0; 408 coords.crval2 = 0.0; 409 coords.crpix1 = 0.0; 410 coords.crpix2 = 0.0; 411 coords.cdelt1 = 1.0/3600; 412 coords.cdelt2 = 1.0/3600; 413 coords.pc1_1 = 1.0; 414 coords.pc1_2 = 0.0; 415 coords.pc2_1 = 0.0; 416 coords.pc2_2 = 1.0; 417 coords.Npolyterms = 0; 418 for (int i = 0; i < 7; i++) { 419 coords.polyterms[i][0] = 0.0; 420 coords.polyterms[i][1] = 0.0; 421 } 422 423 psMetadata *header = WriteCoordsToHeader (&coords); 424 pmFPA *fpa = pmFPAAlloc (NULL); 425 pmChip *chip = pmChipAlloc (fpa, NULL); 426 427 bool status = pmAstromReadWCS (fpa, chip, header, PM_RAD_DEG*10.0/3600.0, false); 428 ok (status, "converted WCS keywords to WCS astrometry"); 429 skip_start (!status, 1, "*** WCS Conversion FAILS *** : skipping related tests"); 430 431 psPlane *onChip = psPlaneAlloc(); 432 psPlane *onFPA = psPlaneAlloc(); 433 psPlane *onTPA = psPlaneAlloc(); 434 psSphere *onSky = psSphereAlloc(); 435 436 double rDVO, dDVO; 437 for (double x = -2000; x <= +2000; x+= 500.0) { 438 for (double y = -2000; y <= +2000; y+= 500.0) { 439 XY_to_RD (&rDVO, &dDVO, x, y, &coords); 440 441 onChip->x = x; 442 onChip->y = y; 443 444 psPlaneTransformApply (onFPA, chip->toFPA, onChip); 445 psPlaneDistortApply (onTPA, fpa->toTPA, onFPA, 0.0, 0.0); 446 psDeproject (onSky, onTPA, fpa->toSky); 447 448 while (onSky->r > 2*M_PI) 449 onSky->r -= 2*M_PI; 450 while (onSky->r < 0) 451 onSky->r += 2*M_PI; 452 453 ok_float(rDVO, onSky->r*PM_DEG_RAD, "coordinate match: %f vs %f (delta = %f)", rDVO, onSky->r*PM_DEG_RAD, rDVO - onSky->r*PM_DEG_RAD); 454 ok_float(dDVO, onSky->d*PM_DEG_RAD, "coordinate match: %f vs %f (delta = %f)", dDVO, onSky->d*PM_DEG_RAD, dDVO - onSky->d*PM_DEG_RAD); 455 } 456 } 457 psFree (onSky); 458 psFree (onTPA); 459 psFree (onFPA); 460 psFree (onChip); 547 psFree (aTPA); 548 psFree (aFPA); 549 psFree (aChip); 550 psFree (bTPA); 551 psFree (bFPA); 552 psFree (bChip); 461 553 462 554 skip_end();
Note:
See TracChangeset
for help on using the changeset viewer.
