Changeset 14710 for trunk/psModules/src/imcombine/pmSubtraction.c
- Timestamp:
- Aug 30, 2007, 11:52:56 AM (19 years ago)
- File:
-
- 1 edited
-
trunk/psModules/src/imcombine/pmSubtraction.c (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/src/imcombine/pmSubtraction.c
r14709 r14710 4 4 * @author GLG, MHPCC 5 5 * 6 * @version $Revision: 1.5 0$ $Name: not supported by cvs2svn $7 * @date $Date: 2007-08-30 21: 45:26 $6 * @version $Revision: 1.51 $ $Name: not supported by cvs2svn $ 7 * @date $Date: 2007-08-30 21:52:56 $ 8 8 * 9 9 * Copyright 2004-2007 Institute for Astronomy, University of Hawaii … … 621 621 622 622 // Generate least-squares vector and matrix 623 bool bad = false; // Are there bad values? 623 624 for (int j = 0; j < numKernels; j++) { 624 625 psKernel *jConv = convolutions->data[j]; // Convolution for j-th element 625 626 626 // Generate upper diagonals ofmatrix627 for (int k = 0; k < numKernels; k++) {627 // Generate matrix 628 for (int k = j; k < numKernels; k++) { 628 629 psKernel *kConv = convolutions->data[k]; // Convolution for k-th element 629 630 double sumCC = 0.0; // Sum of the convolution products … … 633 634 } 634 635 } 636 637 if (!isfinite(sumCC) { 638 bad = true; 639 } 635 640 // Generate the pseudo-convolutions from the spatial polynomial terms 636 641 for (int jyOrder = 0, jIndex = j; jyOrder <= spatialOrder; jyOrder++) { 637 642 for (int jxOrder = 0; jxOrder <= spatialOrder - jyOrder; 638 643 jxOrder++, jIndex += numKernels) { 639 for (int kyOrder = 0, kIndex = k; kyOrder <= spatialOrder; kyOrder++) {640 for (int kxOrder = 0; kxOrder <= spatialOrder - kyOrder;644 for (int kyOrder = jyOrder, kIndex = k; kyOrder <= spatialOrder; kyOrder++) { 645 for (int kxOrder = jxOrder; kxOrder <= spatialOrder - kyOrder; 641 646 kxOrder++, kIndex += numKernels) { 642 stampMatrix->data.F64[jIndex][kIndex] = sumCC * 643 polyValues->data.F64[jyOrder][jxOrder] * 644 polyValues->data.F64[kyOrder][kxOrder]; 647 double convPoly = sumCC * polyValues->data.F64[jyOrder][jxOrder] * 648 polyValues->data.F64[kyOrder][kxOrder]; // Temporary value 649 stampMatrix->data.F64[jIndex][kIndex] = convPoly; 650 stampMatrix->data.F64[kIndex][jIndex] = convPoly; 645 651 } 646 652 } … … 659 665 } 660 666 } 667 if (!isfinite(sumC) || !isfinite(sumIC)) { 668 bad = true; 669 } 661 670 for (int jyOrder = 0, jIndex = j; jyOrder <= spatialOrder; jyOrder++) { 662 671 for (int jxOrder = 0; jxOrder <= spatialOrder - jyOrder; 663 672 jxOrder++, jIndex += numKernels) { 664 673 stampVector->data.F64[jIndex] = sumIC * polyValues->data.F64[jyOrder][jxOrder]; 665 stampMatrix->data.F64[jIndex][bgIndex] = sumC * polyValues->data.F64[jyOrder][jxOrder]; 666 stampMatrix->data.F64[bgIndex][jIndex] = sumC * polyValues->data.F64[jyOrder][jxOrder]; 674 675 double convPoly = sumC * polyValues->data.F64[jyOrder][jxOrder]; // Value 676 stampMatrix->data.F64[jIndex][bgIndex] = convPoly; 677 stampMatrix->data.F64[bgIndex][jIndex] = convPoly; 667 678 } 668 679 } … … 681 692 } 682 693 } 694 if (!isfinite(sum1) || !isfinite(sumI)) { 695 bad = true; 696 } 683 697 stampMatrix->data.F64[bgIndex][bgIndex] = sum1; 684 698 stampVector->data.F64[bgIndex] = sumI; 685 686 // Fill in lower diagonals of symmetric matrix, while checking for bad values687 // Note, there are two symmetries going on here --- the matrix is C_i C_j P_i P_j688 bool bad = false; // Are there bad values?689 #if 0690 for (int j = 0; j < numKernels; j++) {691 for (int jSpatial = 0, jIndex = j; jSpatial < numSpatial; jSpatial++, jIndex += numKernels) {692 for (int k = 0; k < j; k++) {693 for (int kSpatial = 0, kIndex = k; kSpatial < numSpatial;694 kSpatial++, kIndex += numKernels) {695 double value = stampMatrix->data.F64[kIndex][jIndex]; // Value of matrix696 stampMatrix->data.F64[jIndex][kIndex] = value;697 if (!isfinite(value)) {698 bad = true;699 }700 }701 }702 703 stampMatrix->data.F64[bgIndex][jIndex] = stampMatrix->data.F64[jIndex][bgIndex];704 if (!isfinite(stampMatrix->data.F64[jIndex][bgIndex]) ||705 !isfinite(stampMatrix->data.F64[jIndex][jIndex]) ||706 !isfinite(stampVector->data.F64[jIndex])) {707 bad = true;708 }709 }710 }711 #endif712 if (!isfinite(stampVector->data.F64[bgIndex])) {713 bad = true;714 }715 699 716 700 if (bad) {
Note:
See TracChangeset
for help on using the changeset viewer.
