- Timestamp:
- Sep 15, 2009, 4:03:13 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/20090715/psModules/src/astrom/pmAstrometryWCS.c
r24052 r25407 289 289 // test the CDELTi varient 290 290 if (pcKeys) { 291 wcs->wcsCDkeys = 0; 291 292 wcs->cdelt1 = psMetadataLookupF64 (&status, header, "CDELT1"); 292 293 wcs->cdelt2 = psMetadataLookupF64 (&status, header, "CDELT2"); … … 334 335 // test the CDi_j varient 335 336 if (cdKeys) { 337 wcs->wcsCDkeys = 1; 338 336 339 wcs->trans->x->coeff[1][0] = psMetadataLookupF64 (&status, header, "CD1_1"); // == PC1_1 337 340 wcs->trans->x->coeff[0][1] = psMetadataLookupF64 (&status, header, "CD1_2"); // == PC1_2 … … 375 378 // XXX make it optional to write out CDi_j terms, or other versions 376 379 // apply CDELT1,2 (degrees / pixel) to yield PCi,j terms of order unity 377 double cdelt1 = wcs->cdelt1; 378 double cdelt2 = wcs->cdelt2; 379 psMetadataAddF64 (header, PS_LIST_TAIL, "CDELT1", PS_META_REPLACE, "", cdelt1); 380 psMetadataAddF64 (header, PS_LIST_TAIL, "CDELT2", PS_META_REPLACE, "", cdelt2); 381 382 // test the PC00i00j varient: 383 psMetadataAddF64 (header, PS_LIST_TAIL, "PC001001", PS_META_REPLACE, "", wcs->trans->x->coeff[1][0] / cdelt1); // == PC1_1 384 psMetadataAddF64 (header, PS_LIST_TAIL, "PC001002", PS_META_REPLACE, "", wcs->trans->x->coeff[0][1] / cdelt2); // == PC1_2 385 psMetadataAddF64 (header, PS_LIST_TAIL, "PC002001", PS_META_REPLACE, "", wcs->trans->y->coeff[1][0] / cdelt1); // == PC2_1 386 psMetadataAddF64 (header, PS_LIST_TAIL, "PC002002", PS_META_REPLACE, "", wcs->trans->y->coeff[0][1] / cdelt2); // == PC2_2 387 388 // Elixir-style polynomial terms 389 // XXX currently, Elixir/DVO cannot accept mixed orders 390 // XXX need to respect the masks 391 // XXX is wcs->cdelt1,2 always consistent? 392 int fitOrder = wcs->trans->x->nX; 393 if (fitOrder > 1) { 380 if (!(wcs->wcsCDkeys)) { 381 382 double cdelt1 = wcs->cdelt1; 383 double cdelt2 = wcs->cdelt2; 384 psMetadataAddF64 (header, PS_LIST_TAIL, "CDELT1", PS_META_REPLACE, "", cdelt1); 385 psMetadataAddF64 (header, PS_LIST_TAIL, "CDELT2", PS_META_REPLACE, "", cdelt2); 386 387 // test the PC00i00j varient: 388 psMetadataAddF64 (header, PS_LIST_TAIL, "PC001001", PS_META_REPLACE, "", wcs->trans->x->coeff[1][0] / cdelt1); // == PC1_1 389 psMetadataAddF64 (header, PS_LIST_TAIL, "PC001002", PS_META_REPLACE, "", wcs->trans->x->coeff[0][1] / cdelt2); // == PC1_2 390 psMetadataAddF64 (header, PS_LIST_TAIL, "PC002001", PS_META_REPLACE, "", wcs->trans->y->coeff[1][0] / cdelt1); // == PC2_1 391 psMetadataAddF64 (header, PS_LIST_TAIL, "PC002002", PS_META_REPLACE, "", wcs->trans->y->coeff[0][1] / cdelt2); // == PC2_2 392 393 // Elixir-style polynomial terms 394 // XXX currently, Elixir/DVO cannot accept mixed orders 395 // XXX need to respect the masks 396 // XXX is wcs->cdelt1,2 always consistent? 397 int fitOrder = wcs->trans->x->nX; 398 if (fitOrder > 1) { 394 399 for (int i = 0; i <= fitOrder; i++) { 395 for (int j = 0; j <= fitOrder; j++) {396 if (i + j < 2)397 continue;398 if (i + j > fitOrder)399 continue;400 sprintf (name, "PCA1X%1dY%1d", i, j);401 psMetadataAddF64 (header, PS_LIST_TAIL, name, PS_META_REPLACE, "", wcs->trans->x->coeff[i][j] / pow(cdelt1, i) / pow(cdelt2, j));402 sprintf (name, "PCA2X%1dY%1d", i, j);403 psMetadataAddF64 (header, PS_LIST_TAIL, name, PS_META_REPLACE, "", wcs->trans->y->coeff[i][j] / pow(cdelt1, i) / pow(cdelt2, j));404 }400 for (int j = 0; j <= fitOrder; j++) { 401 if (i + j < 2) 402 continue; 403 if (i + j > fitOrder) 404 continue; 405 sprintf (name, "PCA1X%1dY%1d", i, j); 406 psMetadataAddF64 (header, PS_LIST_TAIL, name, PS_META_REPLACE, "", wcs->trans->x->coeff[i][j] / pow(cdelt1, i) / pow(cdelt2, j)); 407 sprintf (name, "PCA2X%1dY%1d", i, j); 408 psMetadataAddF64 (header, PS_LIST_TAIL, name, PS_META_REPLACE, "", wcs->trans->y->coeff[i][j] / pow(cdelt1, i) / pow(cdelt2, j)); 409 } 405 410 } 406 411 psMetadataAddS32 (header, PS_LIST_TAIL, "NPLYTERM", PS_META_REPLACE, "", fitOrder); 407 }408 409 // remove any existing 'CDi_j style' wcs keywords410 if (psMetadataLookup(header, "CD1_1")) {412 } 413 414 // remove any existing 'CDi_j style' wcs keywords 415 if (psMetadataLookup(header, "CD1_1")) { 411 416 psMetadataRemoveKey(header, "CD1_1"); 412 417 psMetadataRemoveKey(header, "CD1_2"); 413 418 psMetadataRemoveKey(header, "CD2_1"); 414 419 psMetadataRemoveKey(header, "CD2_2"); 420 } 421 } 422 if (wcs->wcsCDkeys) { 423 424 psMetadataAddF64 (header, PS_LIST_TAIL, "CD1_1", PS_META_REPLACE, "", wcs->trans->x->coeff[1][0]); 425 psMetadataAddF64 (header, PS_LIST_TAIL, "CD1_2", PS_META_REPLACE, "", wcs->trans->x->coeff[0][1]); 426 psMetadataAddF64 (header, PS_LIST_TAIL, "CD2_1", PS_META_REPLACE, "", wcs->trans->y->coeff[1][0]); 427 psMetadataAddF64 (header, PS_LIST_TAIL, "CD2_2", PS_META_REPLACE, "", wcs->trans->y->coeff[0][1]); 428 429 if (psMetadataLookup(header, "PC001001")) { 430 psMetadataRemoveKey(header, "PC001001"); 431 psMetadataRemoveKey(header, "PC001002"); 432 psMetadataRemoveKey(header, "PC002001"); 433 psMetadataRemoveKey(header, "PC002002"); 434 } 415 435 } 416 436 … … 535 555 fpa->toSky->R -= 2.0*M_PI; 536 556 557 fpa->wcsCDkeys = wcs->wcsCDkeys; 558 537 559 psTrace ("psastro", 5, "toFPA: %f %f (%f,%f),(%f,%f)\n", 538 560 chip->toFPA->x->coeff[0][0], chip->toFPA->y->coeff[0][0], … … 682 704 wcs->cdelt2 = hypot (wcs->trans->y->coeff[1][0], wcs->trans->y->coeff[0][1]); 683 705 706 wcs->wcsCDkeys = fpa->wcsCDkeys; 684 707 psFree (toTPA); 685 708 … … 922 945 wcs->trans = psPlaneTransformAlloc (nXorder, nYorder); 923 946 wcs->toSky = NULL; 947 wcs->wcsCDkeys = 0; 924 948 925 949 memset (wcs->ctype1, 0, PM_ASTROM_WCS_TYPE_SIZE);
Note:
See TracChangeset
for help on using the changeset viewer.
