Changeset 25299 for trunk/psModules/src/astrom/pmAstrometryWCS.c
- Timestamp:
- Sep 8, 2009, 5:32:55 PM (17 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
-
. (modified) (1 prop)
-
psModules/src/astrom/pmAstrometryWCS.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk
- Property svn:mergeinfo changed
/branches/czw_branch/cleanup (added) merged: 25050-25051,25088,25143-25155,25157-25159,25161,25210-25212
- Property svn:mergeinfo changed
-
trunk/psModules/src/astrom/pmAstrometryWCS.c
r24052 r25299 289 289 // test the CDELTi varient 290 290 if (pcKeys) { 291 wcs->wcsCDkeys = 0; 292 291 293 wcs->cdelt1 = psMetadataLookupF64 (&status, header, "CDELT1"); 292 294 wcs->cdelt2 = psMetadataLookupF64 (&status, header, "CDELT2"); … … 334 336 // test the CDi_j varient 335 337 if (cdKeys) { 338 wcs->wcsCDkeys = 1; 339 336 340 wcs->trans->x->coeff[1][0] = psMetadataLookupF64 (&status, header, "CD1_1"); // == PC1_1 337 341 wcs->trans->x->coeff[0][1] = psMetadataLookupF64 (&status, header, "CD1_2"); // == PC1_2 … … 375 379 // XXX make it optional to write out CDi_j terms, or other versions 376 380 // 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) { 381 382 if (!(wcs->wcsCDkeys)) { 383 384 double cdelt1 = wcs->cdelt1; 385 double cdelt2 = wcs->cdelt2; 386 psMetadataAddF64 (header, PS_LIST_TAIL, "CDELT1", PS_META_REPLACE, "", cdelt1); 387 psMetadataAddF64 (header, PS_LIST_TAIL, "CDELT2", PS_META_REPLACE, "", cdelt2); 388 389 // test the PC00i00j varient: 390 psMetadataAddF64 (header, PS_LIST_TAIL, "PC001001", PS_META_REPLACE, "", wcs->trans->x->coeff[1][0] / cdelt1); // == PC1_1 391 psMetadataAddF64 (header, PS_LIST_TAIL, "PC001002", PS_META_REPLACE, "", wcs->trans->x->coeff[0][1] / cdelt2); // == PC1_2 392 psMetadataAddF64 (header, PS_LIST_TAIL, "PC002001", PS_META_REPLACE, "", wcs->trans->y->coeff[1][0] / cdelt1); // == PC2_1 393 psMetadataAddF64 (header, PS_LIST_TAIL, "PC002002", PS_META_REPLACE, "", wcs->trans->y->coeff[0][1] / cdelt2); // == PC2_2 394 395 // Elixir-style polynomial terms 396 // XXX currently, Elixir/DVO cannot accept mixed orders 397 // XXX need to respect the masks 398 // XXX is wcs->cdelt1,2 always consistent? 399 int fitOrder = wcs->trans->x->nX; 400 if (fitOrder > 1) { 394 401 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 }402 for (int j = 0; j <= fitOrder; j++) { 403 if (i + j < 2) 404 continue; 405 if (i + j > fitOrder) 406 continue; 407 sprintf (name, "PCA1X%1dY%1d", i, j); 408 psMetadataAddF64 (header, PS_LIST_TAIL, name, PS_META_REPLACE, "", wcs->trans->x->coeff[i][j] / pow(cdelt1, i) / pow(cdelt2, j)); 409 sprintf (name, "PCA2X%1dY%1d", i, j); 410 psMetadataAddF64 (header, PS_LIST_TAIL, name, PS_META_REPLACE, "", wcs->trans->y->coeff[i][j] / pow(cdelt1, i) / pow(cdelt2, j)); 411 } 405 412 } 406 413 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")) {414 } 415 416 // remove any existing 'CDi_j style' wcs keywords 417 if (psMetadataLookup(header, "CD1_1")) { 411 418 psMetadataRemoveKey(header, "CD1_1"); 412 419 psMetadataRemoveKey(header, "CD1_2"); 413 420 psMetadataRemoveKey(header, "CD2_1"); 414 421 psMetadataRemoveKey(header, "CD2_2"); 422 } 423 } 424 if (wcs->wcsCDkeys) { 425 psMetadataAddF64 (header, PS_LIST_TAIL, "CD1_1", PS_META_REPLACE, "", wcs->trans->x->coeff[1][0]); 426 psMetadataAddF64 (header, PS_LIST_TAIL, "CD1_2", PS_META_REPLACE, "", wcs->trans->x->coeff[0][1]); 427 psMetadataAddF64 (header, PS_LIST_TAIL, "CD2_1", PS_META_REPLACE, "", wcs->trans->y->coeff[1][0]); 428 psMetadataAddF64 (header, PS_LIST_TAIL, "CD2_2", PS_META_REPLACE, "", wcs->trans->y->coeff[0][1]); 429 430 if (psMetadataLookup(header, "PC001001")) { 431 psMetadataRemoveKey(header, "PC001001"); 432 psMetadataRemoveKey(header, "PC001002"); 433 psMetadataRemoveKey(header, "PC002001"); 434 psMetadataRemoveKey(header, "PC002002"); 435 } 415 436 } 416 437 … … 535 556 fpa->toSky->R -= 2.0*M_PI; 536 557 558 fpa->wcsCDkeys = wcs->wcsCDkeys; 559 537 560 psTrace ("psastro", 5, "toFPA: %f %f (%f,%f),(%f,%f)\n", 538 561 chip->toFPA->x->coeff[0][0], chip->toFPA->y->coeff[0][0], … … 682 705 wcs->cdelt2 = hypot (wcs->trans->y->coeff[1][0], wcs->trans->y->coeff[0][1]); 683 706 707 wcs->wcsCDkeys = fpa->wcsCDkeys; 684 708 psFree (toTPA); 685 709 … … 922 946 wcs->trans = psPlaneTransformAlloc (nXorder, nYorder); 923 947 wcs->toSky = NULL; 948 wcs->wcsCDkeys = 0; 924 949 925 950 memset (wcs->ctype1, 0, PM_ASTROM_WCS_TYPE_SIZE);
Note:
See TracChangeset
for help on using the changeset viewer.
