Changeset 28386 for trunk/psModules
- Timestamp:
- Jun 17, 2010, 8:27:02 AM (16 years ago)
- File:
-
- 1 edited
-
trunk/psModules/src/astrom/pmAstrometryWCS.c (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/src/astrom/pmAstrometryWCS.c
r27862 r28386 378 378 // XXX make it optional to write out CDi_j terms, or other versions 379 379 // apply CDELT1,2 (degrees / pixel) to yield PCi,j terms of order unity 380 if (!wcs->wcsCDkeys) { 380 if (!wcs->wcsCDkeys) { 381 381 382 382 double cdelt1 = wcs->cdelt1; … … 384 384 psMetadataAddF64 (header, PS_LIST_TAIL, "CDELT1", PS_META_REPLACE, "", cdelt1); 385 385 psMetadataAddF64 (header, PS_LIST_TAIL, "CDELT2", PS_META_REPLACE, "", cdelt2); 386 386 387 387 // test the PC00i00j varient: 388 388 psMetadataAddF64 (header, PS_LIST_TAIL, "PC001001", PS_META_REPLACE, "", wcs->trans->x->coeff[1][0] / cdelt1); // == PC1_1 … … 390 390 psMetadataAddF64 (header, PS_LIST_TAIL, "PC002001", PS_META_REPLACE, "", wcs->trans->y->coeff[1][0] / cdelt1); // == PC2_1 391 391 psMetadataAddF64 (header, PS_LIST_TAIL, "PC002002", PS_META_REPLACE, "", wcs->trans->y->coeff[0][1] / cdelt2); // == PC2_2 392 392 393 393 // Elixir-style polynomial terms 394 394 // XXX currently, Elixir/DVO cannot accept mixed orders … … 398 398 if (fitOrder > 1) { 399 399 for (int i = 0; i <= fitOrder; i++) { 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 }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 } 410 410 } 411 411 psMetadataAddS32 (header, PS_LIST_TAIL, "NPLYTERM", PS_META_REPLACE, "", fitOrder); 412 412 } 413 413 414 414 // remove any existing 'CDi_j style' wcs keywords 415 415 if (psMetadataLookup(header, "CD1_1")) { … … 419 419 psMetadataRemoveKey(header, "CD2_2"); 420 420 } 421 422 // Remove 'CDi_jX' WCS keywords 423 psString cd11 = psStringCopy("CD1_1 "); 424 psString cd12 = psStringCopy("CD1_2 "); 425 psString cd21 = psStringCopy("CD2_1 "); 426 psString cd22 = psStringCopy("CD2_2 "); 427 for (char extra = 'A'; extra <= 'Z'; extra++) { 428 cd11[strlen(cd11)-1] = extra; 429 if (psMetadataLookup(header, cd11)) { 430 cd12[strlen(cd12)-1] = extra; 431 cd21[strlen(cd21)-1] = extra; 432 cd22[strlen(cd22)-1] = extra; 433 psMetadataRemoveKey(header, cd11); 434 psMetadataRemoveKey(header, cd12); 435 psMetadataRemoveKey(header, cd21); 436 psMetadataRemoveKey(header, cd22); 437 } 438 } 439 psFree(cd11); 440 psFree(cd12); 441 psFree(cd21); 442 psFree(cd22); 443 444 421 445 } else { 422 446 … … 427 451 428 452 if (psMetadataLookup(header, "PC001001")) { 429 psMetadataRemoveKey(header, "PC001001");430 psMetadataRemoveKey(header, "PC001002");431 psMetadataRemoveKey(header, "PC002001");432 psMetadataRemoveKey(header, "PC002002");453 psMetadataRemoveKey(header, "PC001001"); 454 psMetadataRemoveKey(header, "PC001002"); 455 psMetadataRemoveKey(header, "PC002001"); 456 psMetadataRemoveKey(header, "PC002002"); 433 457 } 434 458 } … … 685 709 } 686 710 687 // generate transform with the original orientation (does this rotate about 'center'?) 711 // generate transform with the original orientation (does this rotate about 'center'?) 688 712 psPlaneTransform *tpa2 = psPlaneTransformRotate (NULL, tpa1, -1.0*angle); 689 713 … … 967 991 968 992 // outFPA projection must be defined as the goal 969 993 970 994 // the output transformations are: 971 995 // chip -> FPA : standard linear trans with needed rotation, etc … … 990 1014 for (int i = 0; i < nSamples; i++) { 991 1015 992 psSphere srcSky;993 psPlane *srcChip = psPlaneAlloc();994 psPlane *dstTP = psPlaneAlloc();1016 psSphere srcSky; 1017 psPlane *srcChip = psPlaneAlloc(); 1018 psPlane *dstTP = psPlaneAlloc(); 995 1019 996 1020 srcChip->x = bounds->x0 + (i * deltaX / nSamples); 997 1021 srcChip->y = y; 998 1022 999 psPlaneTransformApply (&srcFP, inChip->toFPA, srcChip);1000 psPlaneTransformApply (&srcTP, inFPA->toTPA, &srcFP);1001 psDeproject (&srcSky, &srcTP, inFPA->toSky);1002 1003 // fprintf (stderr, "%f %f | %f %f | %f %f | %f %f\n", srcChip->x, srcChip->y, srcFP.x, srcFP.y, srcTP.x, srcTP.y, srcSky.r*PS_DEG_RAD, srcSky.d*PS_DEG_RAD);1004 1005 psProject (dstTP, &srcSky, outFPA->toSky);1023 psPlaneTransformApply (&srcFP, inChip->toFPA, srcChip); 1024 psPlaneTransformApply (&srcTP, inFPA->toTPA, &srcFP); 1025 psDeproject (&srcSky, &srcTP, inFPA->toSky); 1026 1027 // fprintf (stderr, "%f %f | %f %f | %f %f | %f %f\n", srcChip->x, srcChip->y, srcFP.x, srcFP.y, srcTP.x, srcTP.y, srcSky.r*PS_DEG_RAD, srcSky.d*PS_DEG_RAD); 1028 1029 psProject (dstTP, &srcSky, outFPA->toSky); 1006 1030 1007 1031 srcChip->x -= bounds->x0; 1008 1032 srcChip->y -= bounds->y0; 1009 psArrayAdd (src, 100, srcChip);1010 psArrayAdd (dst, 100, dstTP);1033 psArrayAdd (src, 100, srcChip); 1034 psArrayAdd (dst, 100, dstTP); 1011 1035 1012 1036 psFree(srcChip); // drop our refs to s and d … … 1021 1045 if (!psPlaneTransformFit(newToFPA, src, dst, 0, 0)) { 1022 1046 psError(PS_ERR_UNKNOWN, false, "linear fit to transform failed"); 1023 psFree(src);1024 psFree(dst);1047 psFree(src); 1048 psFree(dst); 1025 1049 return NULL; 1026 1050 } 1027 1051 1028 1052 # if (0) 1029 1053 for (int i = 0; i < src->n; i++) { 1030 1031 psSphere srcSky, dstSky;1032 psPlane *srcChip = src->data[i];1033 psPlane *dstTP = dst->data[i];1034 1035 psPlaneTransformApply (&srcFP, newToFPA, srcChip);1036 psDeproject (&srcSky, &srcFP, outFPA->toSky);1037 psDeproject (&dstSky, dstTP, outFPA->toSky);1038 1039 double dX = (srcSky.r*PS_DEG_RAD - dstSky.r*PS_DEG_RAD)*3600.0;1040 double dY = (srcSky.d*PS_DEG_RAD - dstSky.d*PS_DEG_RAD)*3600.0;1041 fprintf (stderr, "%f %f | %f %f | %f %f | %f %f | %f %f | %f %f\n", dX, dY, srcChip->x, srcChip->y, srcFP.x, srcFP.y, dstTP->x, dstTP->y, srcSky.r*PS_DEG_RAD, srcSky.d*PS_DEG_RAD, dstSky.r*PS_DEG_RAD, dstSky.d*PS_DEG_RAD);1054 1055 psSphere srcSky, dstSky; 1056 psPlane *srcChip = src->data[i]; 1057 psPlane *dstTP = dst->data[i]; 1058 1059 psPlaneTransformApply (&srcFP, newToFPA, srcChip); 1060 psDeproject (&srcSky, &srcFP, outFPA->toSky); 1061 psDeproject (&dstSky, dstTP, outFPA->toSky); 1062 1063 double dX = (srcSky.r*PS_DEG_RAD - dstSky.r*PS_DEG_RAD)*3600.0; 1064 double dY = (srcSky.d*PS_DEG_RAD - dstSky.d*PS_DEG_RAD)*3600.0; 1065 fprintf (stderr, "%f %f | %f %f | %f %f | %f %f | %f %f | %f %f\n", dX, dY, srcChip->x, srcChip->y, srcFP.x, srcFP.y, dstTP->x, dstTP->y, srcSky.r*PS_DEG_RAD, srcSky.d*PS_DEG_RAD, dstSky.r*PS_DEG_RAD, dstSky.d*PS_DEG_RAD); 1042 1066 1043 1067 }
Note:
See TracChangeset
for help on using the changeset viewer.
