Changeset 26340
- Timestamp:
- Dec 5, 2009, 5:02:29 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/20091201/psModules/src/imcombine/pmSubtractionEquation.c
r26332 r26340 104 104 105 105 // Spatial variation of kernel coeffs 106 if (mode |PM_SUBTRACTION_EQUATION_KERNELS) {106 if (mode & PM_SUBTRACTION_EQUATION_KERNELS) { 107 107 for (int iTerm = 0, iIndex = i; iTerm < numPoly; iTerm++, iIndex += numKernels) { 108 108 for (int jTerm = 0, jIndex = j; jTerm < numPoly; jTerm++, jIndex += numKernels) { … … 147 147 double normTerm = sumRC * poly[iTerm]; 148 148 double bgTerm = sumC * poly[iTerm]; 149 if ((mode | PM_SUBTRACTION_EQUATION_NORM) && (mode |PM_SUBTRACTION_EQUATION_KERNELS)) {149 if ((mode & PM_SUBTRACTION_EQUATION_NORM) && (mode & PM_SUBTRACTION_EQUATION_KERNELS)) { 150 150 matrix->data.F64[iIndex][normIndex] = normTerm; 151 151 matrix->data.F64[normIndex][iIndex] = normTerm; 152 152 } 153 if ((mode | PM_SUBTRACTION_EQUATION_BG) && (mode |PM_SUBTRACTION_EQUATION_KERNELS)) {153 if ((mode & PM_SUBTRACTION_EQUATION_BG) && (mode & PM_SUBTRACTION_EQUATION_KERNELS)) { 154 154 matrix->data.F64[iIndex][bgIndex] = bgTerm; 155 155 matrix->data.F64[bgIndex][iIndex] = bgTerm; 156 156 } 157 if (mode |PM_SUBTRACTION_EQUATION_KERNELS) {157 if (mode & PM_SUBTRACTION_EQUATION_KERNELS) { 158 158 vector->data.F64[iIndex] = sumIC * poly[iTerm]; 159 if (!(mode & PM_SUBTRACTION_EQUATION_NORM)) { 160 // subtract norm * sumRC * poly[iTerm] 161 psAssert (kernels->solution1, "programming error: define solution first!"); 162 int normIndex = PM_SUBTRACTION_INDEX_NORM(kernels); // Index for normalisation 163 double norm = fabs(kernels->solution1->data.F64[normIndex]); // Normalisation 164 vector->data.F64[iIndex] -= norm * normTerm; 165 } 159 166 } 160 167 } … … 196 203 } 197 204 } 198 if (mode |PM_SUBTRACTION_EQUATION_NORM) {205 if (mode & PM_SUBTRACTION_EQUATION_NORM) { 199 206 matrix->data.F64[normIndex][normIndex] = sumRR; 200 207 vector->data.F64[normIndex] = sumIR; 201 } 202 if (mode | PM_SUBTRACTION_EQUATION_BG) { 208 // subtract sum over kernels * kernel solution 209 } 210 if (mode & PM_SUBTRACTION_EQUATION_BG) { 203 211 matrix->data.F64[bgIndex][bgIndex] = sum1; 204 212 vector->data.F64[bgIndex] = sumI; 205 213 } 206 if ((mode | PM_SUBTRACTION_EQUATION_NORM) && (mode |PM_SUBTRACTION_EQUATION_BG)) {214 if ((mode & PM_SUBTRACTION_EQUATION_NORM) && (mode & PM_SUBTRACTION_EQUATION_BG)) { 207 215 matrix->data.F64[normIndex][bgIndex] = sumR; 208 216 matrix->data.F64[bgIndex][normIndex] = sumR; … … 953 961 #endif 954 962 963 // XXX test: save the matrix A and vector b: 964 { 965 psFits *fits = psFitsOpen("matrix.fits", "w"); 966 psFitsWriteImage(fits, NULL, sumMatrix, 0, NULL); 967 psFitsClose(fits); 968 969 FILE *f = fopen ("vector.dat", "w"); 970 int fd = fileno(f); 971 p_psVectorPrint (fd, sumVector, "B"); 972 fclose (f); 973 } 974 955 975 psVector *permutation = NULL; // Permutation vector, required for LU decomposition 956 976 psImage *luMatrix = psMatrixLUDecomposition(NULL, &permutation, sumMatrix); … … 979 999 980 1000 // only update the solutions that we chose to calculate: 981 if (mode |PM_SUBTRACTION_EQUATION_NORM) {1001 if (mode & PM_SUBTRACTION_EQUATION_NORM) { 982 1002 int normIndex = PM_SUBTRACTION_INDEX_NORM(kernels); // Index for normalisation 983 1003 kernels->solution1->data.F64[normIndex] = solution->data.F64[normIndex]; 984 1004 } 985 if (mode |PM_SUBTRACTION_EQUATION_BG) {1005 if (mode & PM_SUBTRACTION_EQUATION_BG) { 986 1006 int bgIndex = PM_SUBTRACTION_INDEX_BG(kernels); // Index in matrix for background 987 1007 kernels->solution1->data.F64[bgIndex] = solution->data.F64[bgIndex]; 988 1008 } 989 if (mode |PM_SUBTRACTION_EQUATION_KERNELS) {1009 if (mode & PM_SUBTRACTION_EQUATION_KERNELS) { 990 1010 int numKernels = kernels->num; 991 1011 int spatialOrder = kernels->spatialOrder; // Order of spatial variation … … 1225 1245 } 1226 1246 1227 pmSubtractionVisualPlotLeastSquares((pmSubtractionStampList *) stamps); //casting away const1247 // pmSubtractionVisualPlotLeastSquares((pmSubtractionStampList *) stamps); //casting away const 1228 1248 return true; 1229 1249 } … … 1241 1261 double devNorm = 1.0 / (double)numPixels; // Normalisation for deviations 1242 1262 int numKernels = kernels->num; // Number of kernels 1243 double norm = NAN;1244 1263 1245 1264 psImage *polyValues = NULL; // Polynomial values … … 1258 1277 // Calculate coefficients of the kernel basis functions 1259 1278 polyValues = p_pmSubtractionPolynomial(polyValues, kernels->spatialOrder, stamp->xNorm, stamp->yNorm); 1260 norm = p_pmSubtractionSolutionNorm(kernels); // Normalisation1279 double norm = p_pmSubtractionSolutionNorm(kernels); // Normalisation 1261 1280 double background = p_pmSubtractionSolutionBackground(kernels, polyValues);// Difference in background 1262 1281 … … 1404 1423 1405 1424 } 1425 1426 // calculate and report the normalization and background for the image center 1427 { 1428 polyValues = p_pmSubtractionPolynomial(polyValues, kernels->spatialOrder, 0.0, 0.0); 1429 double norm = p_pmSubtractionSolutionNorm(kernels); // Normalisation 1430 double background = p_pmSubtractionSolutionBackground(kernels, polyValues);// Difference in background 1431 psLogMsg("psModules.imcombine", PS_LOG_INFO, "normalization: %f, background: %f", norm, background); 1432 } 1433 1434 pmSubtractionVisualShowFit(); 1435 pmSubtractionVisualPlotFit(kernels); 1436 1406 1437 psFree(residual); 1407 1438 psFree(polyValues); 1408 1439 1409 psLogMsg("psModules.imcombine", PS_LOG_INFO, "normalization: %f", norm);1410 pmSubtractionVisualShowFit();1411 pmSubtractionVisualPlotFit(kernels);1412 1413 1440 return deviations; 1414 1441 }
Note:
See TracChangeset
for help on using the changeset viewer.
