Changeset 15254
- Timestamp:
- Oct 9, 2007, 9:27:04 AM (19 years ago)
- Location:
- trunk
- Files:
-
- 12 edited
-
psLib/src/astro/psCoord.c (modified) (4 diffs)
-
psLib/src/imageops/psImagePixelInterpolate.c (modified) (3 diffs)
-
psLib/src/math/psMinimizePolyFit.c (modified) (27 diffs)
-
psLib/src/math/psPolynomialMetadata.c (modified) (10 diffs)
-
psLib/src/math/psPolynomialUtils.c (modified) (3 diffs)
-
psModules/src/astrom/pmAstrometryDistortion.c (modified) (6 diffs)
-
psModules/src/astrom/pmAstrometryUtils.c (modified) (9 diffs)
-
psModules/src/astrom/pmAstrometryWCS.c (modified) (2 diffs)
-
psModules/src/detrend/pmShutterCorrection.c (modified) (1 diff)
-
psModules/src/objects/pmPSF_IO.c (modified) (3 diffs)
-
psModules/src/objects/pmPSFtry.c (modified) (2 diffs)
-
psModules/src/objects/pmTrend2D.c (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/astro/psCoord.c
r15050 r15254 10 10 * @author GLG, MHPCC 11 11 * 12 * @version $Revision: 1.14 0$ $Name: not supported by cvs2svn $13 * @date $Date: 2007- 09-28 00:37:27$12 * @version $Revision: 1.141 $ $Name: not supported by cvs2svn $ 13 * @date $Date: 2007-10-09 19:25:44 $ 14 14 * 15 15 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 765 765 for (psS32 j = 0 ; j < orderY+1 ; j++) { 766 766 myPT->x->coeff[i][j] = 0.0; 767 myPT->x->mask[i][j] = 0;768 767 myPT->y->coeff[i][j] = 0.0; 769 myPT->y->mask[i][j] = 0; 768 myPT->x->coeffMask[i][j] = PS_POLY_MASK_NONE; 769 myPT->y->coeffMask[i][j] = PS_POLY_MASK_NONE; 770 770 } 771 771 } … … 807 807 for (psS32 t2y = 0 ; t2y < (trans2->x->nY + 1) ; t2y++) { 808 808 psTrace("psLib.astro", 6, "X: -------------------- (t2x, t2y) (%d, %d) --------------------\n", t2x, t2y); 809 if (trans2->x->mask[t2x][t2y] == 0) { 810 psTrace("psLib.astro", 6, "In this iteration, we raise trans1->x to the %d power and trans1->y to the %d-power.\n", t2x, t2y); 811 psPolynomial2D *newPoly = multiplyDPoly2D(trans1XPolys[t2x], trans1YPolys[t2y]); 812 813 if (psTraceGetLevel("psLib.astro") >= 6) { 814 PS_POLY_PRINT_2D(newPoly); 815 } 816 817 // Set the appropriate coeffs in myPT->x 818 for (psS32 i = 0 ; i < (1 + newPoly->nX) ; i++) { 819 for (psS32 j = 0 ; j < (1 + newPoly->nY) ; j++) { 820 myPT->x->coeff[i][j]+= newPoly->coeff[i][j] * trans2->x->coeff[t2x][t2y]; 821 } 822 } 823 824 if (psTraceGetLevel("psLib.astro") >= 6) { 825 PS_POLY_PRINT_2D(myPT->x); 826 } 827 psFree(newPoly); 828 } 809 if (trans2->x->coeffMask[t2x][t2y] & PS_POLY_MASK_SET) { 810 continue; 811 } 812 813 psTrace("psLib.astro", 6, "In this iteration, we raise trans1->x to the %d power and trans1->y to the %d-power.\n", t2x, t2y); 814 psPolynomial2D *newPoly = multiplyDPoly2D(trans1XPolys[t2x], trans1YPolys[t2y]); 815 816 if (psTraceGetLevel("psLib.astro") >= 6) { 817 PS_POLY_PRINT_2D(newPoly); 818 } 819 820 // Set the appropriate coeffs in myPT->x 821 for (psS32 i = 0 ; i < (1 + newPoly->nX) ; i++) { 822 for (psS32 j = 0 ; j < (1 + newPoly->nY) ; j++) { 823 myPT->x->coeff[i][j]+= newPoly->coeff[i][j] * trans2->x->coeff[t2x][t2y]; 824 } 825 } 826 827 if (psTraceGetLevel("psLib.astro") >= 6) { 828 PS_POLY_PRINT_2D(myPT->x); 829 } 830 psFree(newPoly); 829 831 } 830 832 } … … 841 843 for (psS32 t2y = 0 ; t2y < (trans2->y->nY + 1) ; t2y++) { 842 844 psTrace("psLib.astro", 5, "Y: -------------------- (t2x, t2y) (%d, %d) --------------------\n", t2x, t2y); 843 if (trans2->y->mask[t2x][t2y] == 0) { 844 psTrace("psLib.astro", 5, "In this iteration, we raise trans1->x to the %d power and trans1->y to the %d-power.\n", t2x, t2y); 845 psPolynomial2D *newPoly = multiplyDPoly2D(trans1XPolys[t2x], trans1YPolys[t2y]); 846 847 if (psTraceGetLevel("psLib.astro") >= 6) { 848 PS_POLY_PRINT_2D(newPoly); 849 } 850 851 // Set the appropriate coeffs in myPT->x 852 for (psS32 i = 0 ; i < (1 + newPoly->nX) ; i++) { 853 for (psS32 j = 0 ; j < (1 + newPoly->nY) ; j++) { 854 myPT->y->coeff[i][j]+= newPoly->coeff[i][j] * trans2->y->coeff[t2x][t2y]; 855 } 856 } 857 if (psTraceGetLevel("psLib.astro") >= 6) { 858 PS_POLY_PRINT_2D(myPT->x); 859 } 860 psFree(newPoly); 861 } 845 if (trans2->y->coeffMask[t2x][t2y] & PS_POLY_MASK_SET) { 846 continue; 847 } 848 psTrace("psLib.astro", 5, "In this iteration, we raise trans1->x to the %d power and trans1->y to the %d-power.\n", t2x, t2y); 849 psPolynomial2D *newPoly = multiplyDPoly2D(trans1XPolys[t2x], trans1YPolys[t2y]); 850 851 if (psTraceGetLevel("psLib.astro") >= 6) { 852 PS_POLY_PRINT_2D(newPoly); 853 } 854 855 // Set the appropriate coeffs in myPT->x 856 for (psS32 i = 0 ; i < (1 + newPoly->nX) ; i++) { 857 for (psS32 j = 0 ; j < (1 + newPoly->nY) ; j++) { 858 myPT->y->coeff[i][j]+= newPoly->coeff[i][j] * trans2->y->coeff[t2x][t2y]; 859 } 860 } 861 if (psTraceGetLevel("psLib.astro") >= 6) { 862 PS_POLY_PRINT_2D(myPT->x); 863 } 864 psFree(newPoly); 862 865 } 863 866 } -
trunk/psLib/src/imageops/psImagePixelInterpolate.c
r14924 r15254 11 11 * @author Eugene Magnier, IfA 12 12 * 13 * @version $Revision: 1. 2$ $Name: not supported by cvs2svn $14 * @date $Date: 2007- 09-20 23:54:25$13 * @version $Revision: 1.3 $ $Name: not supported by cvs2svn $ 14 * @date $Date: 2007-10-09 19:25:44 $ 15 15 * 16 16 * Copyright 2007 Institute for Astronomy, University of Hawaii … … 153 153 // allocate a 2D polynomial to fit a quadratic to the valid neighbor pixels. 154 154 psPolynomial2D *poly = psPolynomial2DAlloc (PS_POLYNOMIAL_ORD, 2, 2); 155 poly-> mask[2][2] = 1;156 poly-> mask[2][1] = 1;157 poly-> mask[1][2] = 1;155 poly->coeffMask[2][2] = PS_POLY_MASK_SET; 156 poly->coeffMask[2][1] = PS_POLY_MASK_SET; 157 poly->coeffMask[1][2] = PS_POLY_MASK_SET; 158 158 159 159 for (int iy = 0; iy < state->numRows; iy++) { … … 275 275 // allocate a 2D polynomial to fit a quadratic to the valid neighbor pixels. 276 276 psPolynomial2D *poly2o = psPolynomial2DAlloc (PS_POLYNOMIAL_ORD, 2, 2); 277 poly2o-> mask[2][2] = 1;278 poly2o-> mask[2][1] = 1;279 poly2o-> mask[1][2] = 1;277 poly2o->coeffMask[2][2] = PS_POLY_MASK_SET; 278 poly2o->coeffMask[2][1] = PS_POLY_MASK_SET; 279 poly2o->coeffMask[1][2] = PS_POLY_MASK_SET; 280 280 281 281 // allocate a 2D polynomial to fit a plane to the valid neighbor pixels. 282 282 psPolynomial2D *poly1o = psPolynomial2DAlloc (PS_POLYNOMIAL_ORD, 1, 1); 283 poly2o-> mask[1][1] = 1;283 poly2o->coeffMask[1][1] = PS_POLY_MASK_SET; 284 284 285 285 for (int iy = 0; iy < state->numRows; iy++) { -
trunk/psLib/src/math/psMinimizePolyFit.c
r13396 r15254 10 10 * @author EAM, IfA 11 11 * 12 * @version $Revision: 1.3 1$ $Name: not supported by cvs2svn $13 * @date $Date: 2007- 05-16 16:16:48$12 * @version $Revision: 1.32 $ $Name: not supported by cvs2svn $ 13 * @date $Date: 2007-10-09 19:25:45 $ 14 14 * 15 15 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 340 340 psImage *sums = psImageAlloc(numData, numTerms, PS_TYPE_F64); 341 341 for (int i = 0; i < numTerms; i++) { 342 if (myPoly-> mask[i]) {342 if (myPoly->coeffMask[i] & PS_POLY_MASK_BOTH) { 343 343 continue; 344 344 } … … 358 358 dataMask = mask->data.U8; 359 359 } 360 psU8 * termMask = myPoly->mask; // Mask for polynomial terms360 psU8 *coeffMask = myPoly->coeffMask; // Mask for polynomial terms 361 361 psF64 *yData = y->data.F64; // Coordinate data 362 362 psF64 *yErrData = NULL; // Errors in the coordinate … … 380 380 381 381 for (int i = 0; i < numTerms; i++) { 382 if ( termMask[i]) {382 if (coeffMask[i] & PS_POLY_MASK_BOTH) { 383 383 matrix[i][i] = 1.0; 384 384 continue; … … 387 387 matrix[i][i] += sumsData[i][k] * sumsData[i][k] * wt; // The diagonal entry 388 388 for (int j = i + 1; j < numTerms; j++) { // The upper diagonal only: we will use symmetry 389 if ( termMask[j]) {389 if (coeffMask[j] & PS_POLY_MASK_BOTH) { 390 390 continue; 391 391 } … … 533 533 dataMask = mask->data.U8; 534 534 } 535 psU8 * termMask = myPoly->mask; // Dereferenced version of mask for polynomial terms535 psU8 *coeffMask = myPoly->coeffMask; // Dereferenced version of mask for polynomial terms 536 536 psF64 *ordinates = NULL; // Dereferenced version of ordinate data 537 537 if (x) { … … 567 567 568 568 for (int i = 0; i < nTerm; i++) { 569 if ( termMask[i]) {569 if (coeffMask[i] & PS_POLY_MASK_SET) { 570 570 matrix[i][i] = 1.0; 571 571 continue; … … 574 574 matrix[i][i] += sums[2 * i] * wt; // The diagonal entry 575 575 for (int j = i + 1; j < nTerm; j++) { // The upper diagonal only: we will use symmetry 576 if ( termMask[j]) {576 if (coeffMask[j] & PS_POLY_MASK_SET) { 577 577 continue; 578 578 } … … 584 584 } 585 585 psFree(xSums); 586 587 // elements which are masked for fitting need to be subtracted from the vector 588 for (int i = 0; i < nTerm; i++) { 589 if (coeffMask[i] & PS_POLY_MASK_BOTH) { 590 continue; 591 } 592 for (int j = 0; j < nTerm; j++) { // The upper diagonal only: we will use symmetry 593 if (coeffMask[j] & PS_POLY_MASK_SET) { 594 continue; 595 } 596 if (!(coeffMask[j] & PS_POLY_MASK_FIT)) { 597 continue; 598 } 599 vector[i] -= matrix[i][j]*myPoly->coeff[j]; 600 } 601 } 602 603 // set the un-fitted and un-set elements to 0 or 1 for pivots 604 for (int i = 0; i < nTerm; i++) { 605 if (coeffMask[i] & PS_POLY_MASK_BOTH) { 606 for (int j = 0; j < nTerm; j++) { // The upper diagonal only: we will use symmetry 607 matrix[i][j] = 0.0; 608 matrix[j][i] = 0.0; 609 } 610 matrix[i][i] = 1.0; 611 continue; 612 } 613 } 586 614 587 615 if (psTraceGetLevel("psLib.math") >= 4) { … … 610 638 // polynomial coefficients. this is only true for the 1D case 611 639 for (psS32 k = 0; k < nTerm; k++) { 612 myPoly->coeff[k] = B->data.F64[k];613 myPoly->coeffErr[k] = sqrt(A->data.F64[k][k]);614 } 615 }616 640 if (coeffMask[k] & PS_POLY_MASK_FIT) continue; 641 myPoly->coeff[k] = B->data.F64[k]; 642 myPoly->coeffErr[k] = sqrt(A->data.F64[k][k]); 643 } 644 } 617 645 } else { 618 646 // LUD version of the fit … … 633 661 } else { 634 662 for (psS32 k = 0; k < nTerm; k++) { 663 if (coeffMask[k] & PS_POLY_MASK_FIT) continue; 635 664 myPoly->coeff[k] = coeffs->data.F64[k]; 636 665 // XXX LUD does not give inverse of A … … 990 1019 psFree(A); 991 1020 psFree(B); 992 psTrace("psLib.math", 4, "---- %s() End ----\n", __func__);1021 psTrace("psLib.math", 6, "---- %s() End ----\n", __func__); 993 1022 return false; 994 1023 } … … 997 1026 psF64 **matrix = A->data.F64; // Dereference the least-squares matrix 998 1027 psF64 *vector = B->data.F64; // Dereference the least-squares vector 999 psU8 ** termMask = myPoly->mask; // Dereference mask for polynomial terms1028 psU8 **coeffMask = myPoly->coeffMask; // Dereference mask for polynomial terms 1000 1029 psU8 *dataMask = NULL; // Dereference mask for data 1001 1030 if (mask) { … … 1031 1060 int l = i / nYterm; // x index 1032 1061 int m = i % nYterm; // y index 1033 if ( termMask[l][m]) {1062 if (coeffMask[l][m] & PS_POLY_MASK_SET) { 1034 1063 matrix[i][i] = 1.0; 1035 1064 continue; … … 1040 1069 int p = j / nYterm; // x index 1041 1070 int q = j % nYterm; // y index 1042 if ( termMask[p][q]) {1071 if (coeffMask[p][q] & PS_POLY_MASK_SET) { 1043 1072 continue; 1044 1073 } … … 1050 1079 } 1051 1080 psFree(xySums); 1081 1082 // elements which are masked for fitting need to be subtracted from the vector 1083 for (int i = 0; i < nTerm; i++) { 1084 int ix = i / nYterm; // x index 1085 int iy = i % nYterm; // y index 1086 if (coeffMask[ix][iy] & PS_POLY_MASK_BOTH) { 1087 continue; 1088 } 1089 for (int j = 0; j < nTerm; j++) { // The upper diagonal only: we will use symmetry 1090 int jx = j / nYterm; // x index 1091 int jy = j % nYterm; // y index 1092 if (coeffMask[jx][jy] & PS_POLY_MASK_SET) { 1093 continue; 1094 } 1095 if (!(coeffMask[jx][jy] & PS_POLY_MASK_FIT)) { 1096 continue; 1097 } 1098 vector[i] -= matrix[i][j]*myPoly->coeff[jx][jy]; 1099 } 1100 } 1101 1102 // set the un-fitted and un-set elements to 0 or 1 for pivots 1103 for (int i = 0; i < nTerm; i++) { 1104 int ix = i / nYterm; // x index 1105 int iy = i % nYterm; // y index 1106 if (coeffMask[ix][iy] & PS_POLY_MASK_BOTH) { 1107 for (int j = 0; j < nTerm; j++) { // The upper diagonal only: we will use symmetry 1108 matrix[i][j] = 0.0; 1109 matrix[j][i] = 0.0; 1110 } 1111 matrix[i][i] = 1.0; 1112 continue; 1113 } 1114 } 1115 1116 if (psTraceGetLevel("psLib.math") >= 4) { 1117 printf("Least-squares vector:\n"); 1118 for (int i = 0; i < nTerm; i++) { 1119 printf("%f ", B->data.F64[i]); 1120 } 1121 printf("\n"); 1122 printf("Least-squares matrix:\n"); 1123 for (int i = 0; i < nTerm; i++) { 1124 for (int j = 0; j < nTerm; j++) { 1125 printf("%f ", A->data.F64[i][j]); 1126 } 1127 printf("\n"); 1128 } 1129 } 1052 1130 1053 1131 if (!psMatrixGJSolve(A, B)) { … … 1062 1140 int l = i / nYterm; // x index 1063 1141 int m = i % nYterm; // y index 1064 myPoly->coeff[l][m] = B->data.F64[i]; 1065 myPoly->coeffErr[l][m] = sqrt(A->data.F64[i][i]); 1142 1143 // retain the incoming values if masked on the fit 1144 if (coeffMask[l][m] & PS_POLY_MASK_FIT) continue; 1145 myPoly->coeff[l][m] = B->data.F64[i]; 1146 myPoly->coeffErr[l][m] = sqrt(A->data.F64[i][i]); 1066 1147 } 1067 1148 psFree(A); 1068 1149 psFree(B); 1069 1150 1070 psTrace("psLib.math", 4, "---- %s() end ----\n", __func__);1151 psTrace("psLib.math", 6, "---- %s() end ----\n", __func__); 1071 1152 return true; 1072 1153 } … … 1387 1468 dataMask = mask->data.U8; 1388 1469 } 1389 psU8 *** termMask = myPoly->mask; // Mask for polynomial terms1470 psU8 ***coeffMask = myPoly->coeffMask; // Mask for polynomial terms 1390 1471 int nYZterm = nYterm * nZterm; // Multiplication of the numbers, to calculate the index 1391 1472 … … 1411 1492 int iy = (i % nYZterm) / nZterm; // y index 1412 1493 int iz = (i % nYZterm) % nZterm; // z index 1413 if ( termMask[ix][iy][iz]) {1494 if (coeffMask[ix][iy][iz] & PS_POLY_MASK_BOTH) { 1414 1495 matrix[i][i] = 1.0; 1415 1496 continue; … … 1422 1503 int jy = (j % nYZterm) / nZterm; // y index 1423 1504 int jz = (j % nYZterm) % nZterm; // z index 1424 if ( termMask[jx][jy][jz]) {1505 if (coeffMask[jx][jy][jz] & PS_POLY_MASK_BOTH) { 1425 1506 continue; 1426 1507 } … … 1455 1536 int iy = (i % nYZterm) / nZterm; // y index 1456 1537 int iz = (i % nYZterm) % nZterm; // z index 1538 if (coeffMask[ix][iy][iz] & PS_POLY_MASK_FIT) continue; 1457 1539 myPoly->coeff[ix][iy][iz] = B->data.F64[i]; 1458 1540 myPoly->coeffErr[ix][iy][iz] = sqrt(A->data.F64[i][i]); … … 1480 1562 for (psS32 iz = 0; iz < nZterm; iz++) { 1481 1563 psS32 nx = ix+iy*nXterm+iz*nXterm*nYterm; 1564 if (coeffMask[ix][iy][iz] & PS_POLY_MASK_FIT) continue; 1482 1565 myPoly->coeff[ix][iy][iz] = coeffs->data.F64[nx]; 1483 1566 // XXX myPoly->coeffErr[ix][iy][iz] = sqrt(A->data.F64[nx][nx]); … … 1839 1922 dataMask = mask->data.U8; 1840 1923 } 1841 psU8 **** termMask = myPoly->mask; // Mask for polynomial terms1924 psU8 ****coeffMask = myPoly->coeffMask; // Mask for polynomial terms 1842 1925 int nYZTterm = nYterm * nZterm * nTterm; // Multiplication of the numbers, for calculating the index 1843 1926 int nZTterm = nZterm * nTterm; // Multiplication of the numbers, for calculating the index … … 1865 1948 int iz = ((i % (nYZTterm)) % (nZTterm)) / nTterm; // z index 1866 1949 int it = ((i % (nYZTterm)) % (nZTterm)) % nTterm; // t index 1867 if ( termMask[ix][iy][iz][it]) {1950 if (coeffMask[ix][iy][iz][it] & PS_POLY_MASK_BOTH) { 1868 1951 matrix[i][i] = 1.0; 1869 1952 continue; … … 1877 1960 int jz = ((j % nYZTterm) % nZTterm) / nTterm; // z index 1878 1961 int jt = ((j % nYZTterm) % nZTterm) % nTterm; // t index 1879 if ( termMask[jx][jy][jz][jt]) {1962 if (coeffMask[jx][jy][jz][jt] & PS_POLY_MASK_BOTH) { 1880 1963 continue; 1881 1964 } … … 1918 2001 int iz = ((i % nYZTterm) % nZTterm) / nTterm; // z index 1919 2002 int it = ((i % nYZTterm) % nZTterm) % nTterm; // t index 2003 if (coeffMask[ix][iy][iz][it] & PS_POLY_MASK_FIT) continue; 1920 2004 myPoly->coeff[ix][iy][iz][it] = B->data.F64[i]; 1921 2005 myPoly->coeffErr[ix][iy][iz][it] = sqrt(A->data.F64[i][i]); … … 1944 2028 for (psS32 it = 0; it < nTterm; it++) { 1945 2029 psS32 nx = ix+iy*nXterm+iz*nXterm*nYterm+it*nXterm*nYterm*nZterm; 2030 if (coeffMask[ix][iy][iz][it] & PS_POLY_MASK_FIT) continue; 1946 2031 myPoly->coeff[ix][iy][iz][it] = coeffs->data.F64[nx]; 1947 2032 // myPoly->coeffErr[ix][iy][iz][it] = sqrt(A->data.F64[nx][nx]); -
trunk/psLib/src/math/psPolynomialMetadata.c
r11669 r15254 12 12 * @author Ross Harman, MHPCC 13 13 * 14 * @version $Revision: 1. 1$ $Name: not supported by cvs2svn $15 * @date $Date: 2007- 02-06 21:55:28$14 * @version $Revision: 1.2 $ $Name: not supported by cvs2svn $ 15 * @date $Date: 2007-10-09 19:25:45 $ 16 16 * 17 17 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 62 62 // an undefined component implies the component was masked 63 63 // this is symmetrical with the 1DtoMD function 64 poly->mask[nx] = 1;65 64 poly->coeff[nx] = 0; 66 65 poly->coeffErr[nx] = 0; 66 poly->coeffMask[nx] = PS_POLY_MASK_SET; 67 67 } else { 68 poly-> mask[nx] = 0;68 poly->coeffMask[nx] = PS_POLY_MASK_NONE; 69 69 nElements ++; 70 70 } … … 123 123 // place polynomial entries on folder 124 124 for (int nx = 0; nx < poly->nX + 1; nx++) { 125 if ( poly->mask[nx] == 0) {125 if (!(poly->coeffMask[nx] & PS_POLY_MASK_SET)) { 126 126 sprintf(namespace, "VAL_X%02d", nx); 127 127 sprintf(namespace_err, "ERR_X%02d", nx); … … 174 174 // an undefined component implies the component was masked 175 175 // this is symmetrical with the 2DtoMD function 176 poly->mask[nx][ny] = 1;177 176 poly->coeff[nx][ny] = 0; 178 177 poly->coeffErr[nx][ny] = 0; 178 poly->coeffMask[nx][ny] = PS_POLY_MASK_SET; 179 179 } else { 180 poly-> mask[nx][ny] = 0;180 poly->coeffMask[nx][ny] = PS_POLY_MASK_NONE; 181 181 nElements ++; 182 182 } … … 203 203 PS_ASSERT_PTR_NON_NULL(md, false); 204 204 PS_ASSERT_PTR_NON_NULL(poly, false); 205 //XXX: Current implementation only supports ordinary polynomials. 205 206 // XXX Current implementation only supports ordinary polynomials. 206 207 if (poly->type != PS_POLYNOMIAL_ORD) 207 208 return false; 208 209 // XXX I'm puzzled by this test. a polynomial of 0 order with a value of 0 is a210 // perfectly valid polynomial and can be written out. a polynomial with all elements211 // masked still carries information.212 //Make sure polynomial isn't 0, completely empty213 //if (poly->nX == 0 && poly->nY == 0 && poly->coeff[0][0] == 0)214 //return false;215 209 216 210 int Nbyte; … … 245 239 for (int nx = 0; nx < poly->nX + 1; nx++) { 246 240 for (int ny = 0; ny < poly->nY + 1; ny++) { 247 if ( poly->mask[nx][ny] == 0) {241 if (!(poly->coeffMask[nx][ny] & PS_POLY_MASK_SET)) { 248 242 sprintf(namespace, "VAL_X%02d_Y%02d", nx, ny); 249 243 sprintf(namespace_err, "ERR_X%02d_Y%02d", nx, ny); … … 304 298 // an undefined component implies the component was masked 305 299 // this is symmetrical with the 3DtoMD function 306 poly->mask[nx][ny][nz] = 1;307 300 poly->coeff[nx][ny][nz] = 0; 308 301 poly->coeffErr[nx][ny][nz] = 0; 302 poly->coeffMask[nx][ny][nz] = PS_POLY_MASK_SET; 309 303 } else { 310 poly-> mask[nx][ny][nz] = 0;304 poly->coeffMask[nx][ny][nz] = PS_POLY_MASK_NONE; 311 305 nElements ++; 312 306 } … … 370 364 for (int ny = 0; ny < poly->nY + 1; ny++) { 371 365 for (int nz = 0; nz < poly->nZ + 1; nz++) { 372 if ( poly->mask[nx][ny][nz] == 0) {366 if (!(poly->coeffMask[nx][ny][nz] & PS_POLY_MASK_SET)) { 373 367 sprintf(namespace, "VAL_X%02d_Y%02d_Z%02d", nx, ny, nz); 374 368 sprintf(namespace_err, "ERR_X%02d_Y%02d_Z%02d", nx, ny, nz); … … 437 431 // an undefined component implies the component was masked 438 432 // this is symmetrical with the 4DtoMD function 439 poly->mask[nx][ny][nz][nt] = 1;440 433 poly->coeff[nx][ny][nz][nt] = 0; 441 434 poly->coeffErr[nx][ny][nz][nt] = 0; 435 poly->coeffMask[nx][ny][nz][nt] = PS_POLY_MASK_SET; 442 436 } else { 443 poly-> mask[nx][ny][nz][nt] = 0;437 poly->coeffMask[nx][ny][nz][nt] = PS_POLY_MASK_NONE; 444 438 nElements ++; 445 439 } … … 506 500 for (int nz = 0; nz < poly->nZ + 1; nz++) { 507 501 for (int nt = 0; nt < poly->nT + 1; nt++) { 508 if ( poly->mask[nx][ny][nz][nt] == 0) {502 if (!(poly->coeffMask[nx][ny][nz][nt] & PS_POLY_MASK_SET)) { 509 503 sprintf(namespace, "VAL_X%02d_Y%02d_Z%02d_T%02d", nx, ny, nz, nt); 510 504 sprintf(namespace_err, "ERR_X%02d_Y%02d_Z%02d_T%02d", nx, ny, nz, nt); -
trunk/psLib/src/math/psPolynomialUtils.c
r15049 r15254 159 159 160 160 psPolynomial2D *poly = psPolynomial2DAlloc (PS_POLYNOMIAL_ORD, 2, 2); 161 poly-> mask[2][2] = 1;162 poly-> mask[1][2] = 1;163 poly-> mask[2][1] = 1;161 poly->coeffMask[2][2] = PS_POLY_MASK_SET; 162 poly->coeffMask[1][2] = PS_POLY_MASK_SET; 163 poly->coeffMask[2][1] = PS_POLY_MASK_SET; 164 164 165 165 poly->coeff[0][0] = Foo*(5.0/9.0) - (Fxp + Fxm)/3.0 - (Fyp + Fym)/3.0 ; … … 212 212 for (int i = 0; i < nXout + 1; i++) { 213 213 for (int j = 0; j < nYout + 1; j++) { 214 out-> mask[i][j] = poly->mask[i+1][j];214 out->coeffMask[i][j] = poly->coeffMask[i+1][j]; 215 215 out->coeff[i][j] = poly->coeff[i+1][j] * (i+1); 216 216 } … … 240 240 for (int i = 0; i < nXout + 1; i++) { 241 241 for (int j = 0; j < nYout + 1; j++) { 242 out-> mask[i][j] = poly->mask[i][j+1];242 out->coeffMask[i][j] = poly->coeffMask[i][j+1]; 243 243 out->coeff[i][j] = poly->coeff[i][j+1] * (j+1); 244 244 } -
trunk/psModules/src/astrom/pmAstrometryDistortion.c
r13653 r15254 7 7 * @author EAM, IfA 8 8 * 9 * @version $Revision: 1. 19$ $Name: not supported by cvs2svn $10 * @date $Date: 2007- 06-06 00:43:19$9 * @version $Revision: 1.20 $ $Name: not supported by cvs2svn $ 10 * @date $Date: 2007-10-09 19:27:04 $ 11 11 * 12 12 * Copyright 2006 Institute for Astronomy, University of Hawaii … … 62 62 63 63 psPolynomial2D *local = psPolynomial2DAlloc (PS_POLYNOMIAL_ORD, 1, 1); 64 local-> mask[1][1] = 1;64 local->coeffMask[1][1] = PS_POLY_MASK_SET; 65 65 66 66 // measure gradient for fractional chip regions … … 211 211 for (int i = 0; i <= fpa->toTPA->x->nX; i++) { 212 212 for (int j = 0; j <= fpa->toTPA->x->nY; j++) { 213 if (fpa->toTPA->x->mask[i][j]) { 214 if ((i > 0) && (i <= fpa->toTPA->x->nX)) { 215 localX->mask[i-1][j] = 1; 216 } 217 if ((j > 0) && (j <= fpa->toTPA->x->nY)) { 218 localY->mask[i][j-1] = 1; 219 } 220 } 213 if ((i > 0) && (i <= fpa->toTPA->x->nX)) { 214 localX->coeffMask[i-1][j] = fpa->toTPA->x->coeffMask[i][j]; 215 } 216 if ((j > 0) && (j <= fpa->toTPA->x->nY)) { 217 localY->coeffMask[i][j-1] = fpa->toTPA->x->coeffMask[i][j]; 218 } 221 219 } 222 220 } … … 240 238 fpa->toTPA->x->coeff[0][0] = 0; 241 239 for (int i = 1; i <= fpa->toTPA->x->nX; i++) { 242 if (!fpa->toTPA->x->mask[i][0]) { 243 fpa->toTPA->x->coeff[i][0] = localX->coeff[i-1][0] / i; 244 } 240 if (fpa->toTPA->x->coeffMask[i][0] & PS_POLY_MASK_SET) { 241 continue; 242 } 243 fpa->toTPA->x->coeff[i][0] = localX->coeff[i-1][0] / i; 245 244 } 246 245 for (int j = 1; j <= fpa->toTPA->x->nY; j++) { 247 if (!fpa->toTPA->x->mask[0][j]) { 248 fpa->toTPA->x->coeff[0][j] = localY->coeff[0][j-1] / j; 249 } 246 if (fpa->toTPA->x->coeffMask[0][j] & PS_POLY_MASK_SET) { 247 continue; 248 } 249 fpa->toTPA->x->coeff[0][j] = localY->coeff[0][j-1] / j; 250 250 } 251 251 for (int i = 1; i <= fpa->toTPA->x->nX; i++) { 252 252 for (int j = 1; j <= fpa->toTPA->x->nY; j++) { 253 if (!fpa->toTPA->x->mask[i][j]) { 254 fpa->toTPA->x->coeff[i][j] = 0.5*(localX->coeff[i-1][j] / i + localY->coeff[i][j-1] / j); 255 } 253 if (fpa->toTPA->x->coeffMask[i][j] & PS_POLY_MASK_SET) { 254 continue; 255 } 256 fpa->toTPA->x->coeff[i][j] = 0.5*(localX->coeff[i-1][j] / i + localY->coeff[i][j-1] / j); 256 257 } 257 258 } … … 268 269 for (int i = 0; i < fpa->toTPA->y->nX; i++) { 269 270 for (int j = 0; j < fpa->toTPA->y->nY; j++) { 270 if (fpa->toTPA->y->mask[i][j]) { 271 if ((i > 0) && (i <= fpa->toTPA->y->nX)) { 272 localX->mask[i-1][j] = 1; 273 } 274 if ((j > 0) && (j <= fpa->toTPA->y->nY)) { 275 localY->mask[i][j-1] = 1; 276 } 277 } 271 if ((i > 0) && (i <= fpa->toTPA->y->nX)) { 272 localX->coeffMask[i-1][j] = fpa->toTPA->y->coeffMask[i][j]; 273 } 274 if ((j > 0) && (j <= fpa->toTPA->y->nY)) { 275 localY->coeffMask[i][j-1] = fpa->toTPA->y->coeffMask[i][j]; 276 } 278 277 } 279 278 } … … 286 285 fpa->toTPA->y->coeff[0][0] = 0; 287 286 for (int i = 1; i <= fpa->toTPA->y->nX; i++) { 288 if (!fpa->toTPA->y->mask[i][0]) { 289 fpa->toTPA->y->coeff[i][0] = localX->coeff[i-1][0] / i; 290 } 287 if (fpa->toTPA->y->coeffMask[i][0] & PS_POLY_MASK_SET) { 288 continue; 289 } 290 fpa->toTPA->y->coeff[i][0] = localX->coeff[i-1][0] / i; 291 291 } 292 292 for (int j = 1; j <= fpa->toTPA->y->nY; j++) { 293 if (!fpa->toTPA->y->mask[0][j]) { 294 fpa->toTPA->y->coeff[0][j] = localY->coeff[0][j-1] / j; 295 } 293 if (fpa->toTPA->y->coeffMask[0][j] & PS_POLY_MASK_SET) { 294 continue; 295 } 296 fpa->toTPA->y->coeff[0][j] = localY->coeff[0][j-1] / j; 296 297 } 297 298 for (int i = 1; i <= fpa->toTPA->y->nX; i++) { 298 299 for (int j = 1; j <= fpa->toTPA->y->nY; j++) { 299 if ( !fpa->toTPA->y->mask[i][j]) {300 fpa->toTPA->y->coeff[i][j] = 0.5*(localX->coeff[i-1][j] / i + localY->coeff[i][j-1] / j);300 if (fpa->toTPA->y->coeffMask[i][j] & PS_POLY_MASK_SET) { 301 continue; 301 302 } 303 fpa->toTPA->y->coeff[i][j] = 0.5*(localX->coeff[i-1][j] / i + localY->coeff[i][j-1] / j); 302 304 } 303 305 } -
trunk/psModules/src/astrom/pmAstrometryUtils.c
r12696 r15254 7 7 * @author EAM, IfA 8 8 * 9 * @version $Revision: 1. 4$ $Name: not supported by cvs2svn $10 * @date $Date: 2007- 03-30 21:12:56$9 * @version $Revision: 1.5 $ $Name: not supported by cvs2svn $ 10 * @date $Date: 2007-10-09 19:27:04 $ 11 11 * 12 12 * Copyright 2006 Institute for Astronomy, University of Hawaii … … 105 105 psPolynomial2D *yPy = psPolynomial2DCopy (NULL, yPx); 106 106 for (int j = 0; j <= input->x->nY; j++) { 107 output->x-> mask[i][j] = input->x->mask[i][j];108 output->y-> mask[i][j] = input->y->mask[i][j];109 output->x->coeff[i][j] = (output->x-> mask[i][j]) ? 0 : psPolynomial2DEval (xPy, Xo, Yo) / tgamma(i+1) / tgamma(j+1);110 output->y->coeff[i][j] = (output->y-> mask[i][j]) ? 0 : psPolynomial2DEval (yPy, Xo, Yo) / tgamma(i+1) / tgamma(j+1);107 output->x->coeffMask[i][j] = input->x->coeffMask[i][j]; 108 output->y->coeffMask[i][j] = input->y->coeffMask[i][j]; 109 output->x->coeff[i][j] = (output->x->coeffMask[i][j] & PS_POLY_MASK_SET) ? 0 : psPolynomial2DEval (xPy, Xo, Yo) / tgamma(i+1) / tgamma(j+1); 110 output->y->coeff[i][j] = (output->y->coeffMask[i][j] & PS_POLY_MASK_SET) ? 0 : psPolynomial2DEval (yPy, Xo, Yo) / tgamma(i+1) / tgamma(j+1); 111 111 112 112 // take the next derivative wrt y, catch output (is NULL on last pass) … … 146 146 for (int j = 0; j <= order; j++) { 147 147 if (i + j > order) { 148 transform->x-> mask [i][j] = 1;149 transform->y-> mask [i][j] = 1;148 transform->x->coeffMask [i][j] = PS_POLY_MASK_SET; 149 transform->y->coeffMask [i][j] = PS_POLY_MASK_SET; 150 150 } 151 151 } … … 153 153 transform->x->coeff[1][0] = 1; 154 154 transform->y->coeff[0][1] = 1; 155 transform->x-> mask[1][0] = 0;156 transform->y-> mask[0][1] = 0;155 transform->x->coeffMask[1][0] = PS_POLY_MASK_NONE; 156 transform->y->coeffMask[0][1] = PS_POLY_MASK_NONE; 157 157 158 158 return transform; … … 197 197 if (i + j > order) { 198 198 // high-order cross terms must be masked (eg, x^3 y^2) 199 status &= transform->x->mask[i][j];199 status &= (transform->x->coeffMask[i][j] & PS_POLY_MASK_SET); 200 200 } else { 201 status &= ! transform->x->mask[i][j];201 status &= !(transform->x->coeffMask[i][j] & PS_POLY_MASK_SET); 202 202 if ((i == 1) && (i + j == 1)) { 203 203 // linear, diagonal terms must be non-zero … … 216 216 if (i + j > order) { 217 217 // high-order cross terms must be masked (eg, x^3 y^2) 218 status &= transform->y->mask[i][j];218 status &= (transform->y->coeffMask[i][j] & PS_POLY_MASK_SET); 219 219 } else { 220 status &= ! transform->y->mask[i][j];220 status &= !(transform->y->coeffMask[i][j] & PS_POLY_MASK_SET); 221 221 if ((j == 1) && (i + j == 1)) { 222 222 // linear, diagonal terms must be 1.0 … … 249 249 for (int j = 0; j <= order; j++) { 250 250 if (i + j > order) { 251 distort->x-> mask [i][j][0][0] = 1;252 distort->y-> mask [i][j][0][0] = 1;251 distort->x->coeffMask [i][j][0][0] = PS_POLY_MASK_SET; 252 distort->y->coeffMask [i][j][0][0] = PS_POLY_MASK_SET; 253 253 } 254 254 } … … 306 306 if (i + j > order) { 307 307 // high-order cross terms must be masked (eg, x^3 y^2) 308 status &= distort->x->mask[i][j][0][0];308 status &= (distort->x->coeffMask[i][j][0][0] & PS_POLY_MASK_SET); 309 309 } else { 310 status &= ! distort->x->mask[i][j][0][0];310 status &= !(distort->x->coeffMask[i][j][0][0] & PS_POLY_MASK_SET); 311 311 if ((i == 1) && (i + j == 1)) { 312 312 // linear, diagonal terms must be 1.0 … … 325 325 if (i + j > order) { 326 326 // high-order cross terms must be masked (eg, x^3 y^2) 327 status &= distort->y->mask[i][j][0][0];327 status &= (distort->y->coeffMask[i][j][0][0] & PS_POLY_MASK_SET); 328 328 } else { 329 status &= ! distort->y->mask[i][j][0][0];329 status &= !(distort->y->coeffMask[i][j][0][0] & PS_POLY_MASK_SET); 330 330 if ((j == 1) && (i + j == 1)) { 331 331 // linear, diagonal terms must be 1.0 -
trunk/psModules/src/astrom/pmAstrometryWCS.c
r12838 r15254 7 7 * @author EAM, IfA 8 8 * 9 * @version $Revision: 1.2 2$ $Name: not supported by cvs2svn $10 * @date $Date: 2007- 04-17 19:39:04 $9 * @version $Revision: 1.23 $ $Name: not supported by cvs2svn $ 10 * @date $Date: 2007-10-09 19:27:04 $ 11 11 * 12 12 * Copyright 2006 Institute for Astronomy, University of Hawaii … … 298 298 continue; 299 299 if (i + j > fitOrder) { 300 wcs->trans->x-> mask[i][j] = 1;301 wcs->trans->y-> mask[i][j] = 1;300 wcs->trans->x->coeffMask[i][j] = PS_POLY_MASK_SET; 301 wcs->trans->y->coeffMask[i][j] = PS_POLY_MASK_SET; 302 302 continue; 303 303 } -
trunk/psModules/src/detrend/pmShutterCorrection.c
r14935 r15254 230 230 231 231 // mask out the terms we will not fit 232 line-> mask[0][0] = 1;233 line-> mask[1][1] = 1;232 line->coeffMask[0][0] = PS_POLY_MASK_SET; 233 line->coeffMask[1][1] = PS_POLY_MASK_SET; 234 234 line->coeff[0][0] = 0; 235 235 line->coeff[1][1] = 0; -
trunk/psModules/src/objects/pmPSF_IO.c
r15230 r15254 6 6 * @author EAM, IfA 7 7 * 8 * @version $Revision: 1.2 6$ $Name: not supported by cvs2svn $9 * @date $Date: 2007-10-0 6 01:02:49$8 * @version $Revision: 1.27 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2007-10-09 19:26:25 $ 10 10 * 11 11 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 358 358 psMetadataAddF32 (row, PS_LIST_TAIL, "VALUE", 0, "", poly->coeff[ix][iy]); 359 359 psMetadataAddF32 (row, PS_LIST_TAIL, "ERROR", 0, "", poly->coeffErr[ix][iy]); 360 psMetadataAddU8 (row, PS_LIST_TAIL, "MASK", 0, "", poly-> mask[ix][iy]);360 psMetadataAddU8 (row, PS_LIST_TAIL, "MASK", 0, "", poly->coeffMask[ix][iy]); 361 361 362 362 psArrayAdd (psfTable, 100, row); … … 710 710 assert (xPow <= poly->nX); 711 711 assert (yPow <= poly->nY); 712 poly->coeff[xPow][yPow] = psMetadataLookupF32 (&status, row, "VALUE");713 poly->coeffErr[xPow][yPow] = psMetadataLookupF32 (&status, row, "ERROR");714 poly-> mask[xPow][yPow]= psMetadataLookupU8 (&status, row, "MASK");712 poly->coeff[xPow][yPow] = psMetadataLookupF32 (&status, row, "VALUE"); 713 poly->coeffErr[xPow][yPow] = psMetadataLookupF32 (&status, row, "ERROR"); 714 poly->coeffMask[xPow][yPow] = psMetadataLookupU8 (&status, row, "MASK"); 715 715 } 716 716 } -
trunk/psModules/src/objects/pmPSFtry.c
r15016 r15254 5 5 * @author EAM, IfA 6 6 * 7 * @version $Revision: 1.4 8$ $Name: not supported by cvs2svn $8 * @date $Date: 2007- 09-25 22:05:05 $7 * @version $Revision: 1.49 $ $Name: not supported by cvs2svn $ 8 * @date $Date: 2007-10-09 19:26:25 $ 9 9 * 10 10 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 280 280 // linear clipped fit of ApResid to r2rflux 281 281 psPolynomial1D *poly = psPolynomial1DAlloc (PS_POLYNOMIAL_ORD, 1); 282 poly-> mask[1] = 1; // fit only a constant offset (no SKYBIAS)282 poly->coeffMask[1] = PS_POLY_MASK_SET; // fit only a constant offset (no SKYBIAS) 283 283 284 284 // XXX replace this with a psVectorStats call? since we are not fitting the trend -
trunk/psModules/src/objects/pmTrend2D.c
r15000 r15254 3 3 * @author EAM, IfA 4 4 * 5 * @version $Revision: 1. 3$ $Name: not supported by cvs2svn $6 * @date $Date: 2007- 09-24 21:27:58$5 * @version $Revision: 1.4 $ $Name: not supported by cvs2svn $ 6 * @date $Date: 2007-10-09 19:26:25 $ 7 7 * 8 8 * Copyright 2004 Institute for Astronomy, University of Hawaii … … 48 48 for (int ny = 0; ny < trend->poly->nY + 1; ny++) { 49 49 if (nx + ny >= PS_MAX (trend->poly->nX, trend->poly->nY) + 1) { 50 trend->poly-> mask[nx][ny] = 1;50 trend->poly->coeffMask[nx][ny] = PS_POLY_MASK_SET; 51 51 } else { 52 trend->poly-> mask[nx][ny] = 0;52 trend->poly->coeffMask[nx][ny] = PS_POLY_MASK_NONE; 53 53 } 54 54 } … … 96 96 for (int ny = 0; ny < trend->poly->nY + 1; ny++) { 97 97 if (nx + ny >= PS_MAX (trend->poly->nX, trend->poly->nY) + 1) { 98 trend->poly-> mask[nx][ny] = 1;98 trend->poly->coeffMask[nx][ny] = PS_POLY_MASK_SET; 99 99 } else { 100 trend->poly-> mask[nx][ny] = 0;100 trend->poly->coeffMask[nx][ny] = PS_POLY_MASK_NONE; 101 101 } 102 102 } … … 137 137 for (int ny = 0; ny < trend->poly->nY + 1; ny++) { 138 138 if (nx + ny >= PS_MAX (trend->poly->nX, trend->poly->nY) + 1) { 139 trend->poly-> mask[nx][ny] = 1;139 trend->poly->coeffMask[nx][ny] = PS_POLY_MASK_SET; 140 140 } else { 141 trend->poly-> mask[nx][ny] = 0;141 trend->poly->coeffMask[nx][ny] = PS_POLY_MASK_NONE; 142 142 } 143 143 }
Note:
See TracChangeset
for help on using the changeset viewer.
