IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 26340


Ignore:
Timestamp:
Dec 5, 2009, 5:02:29 AM (16 years ago)
Author:
eugene
Message:

allow either separate or simultaneous coeff calculation (norm vs kernels) -- compile time option; report norm and background

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/20091201/psModules/src/imcombine/pmSubtractionEquation.c

    r26332 r26340  
    104104
    105105            // Spatial variation of kernel coeffs
    106             if (mode | PM_SUBTRACTION_EQUATION_KERNELS) {
     106            if (mode & PM_SUBTRACTION_EQUATION_KERNELS) {
    107107                for (int iTerm = 0, iIndex = i; iTerm < numPoly; iTerm++, iIndex += numKernels) {
    108108                    for (int jTerm = 0, jIndex = j; jTerm < numPoly; jTerm++, jIndex += numKernels) {
     
    147147            double normTerm = sumRC * poly[iTerm];
    148148            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)) {
    150150                matrix->data.F64[iIndex][normIndex] = normTerm;
    151151                matrix->data.F64[normIndex][iIndex] = normTerm;
    152152            }
    153             if ((mode | PM_SUBTRACTION_EQUATION_BG) && (mode | PM_SUBTRACTION_EQUATION_KERNELS)) {
     153            if ((mode & PM_SUBTRACTION_EQUATION_BG) && (mode & PM_SUBTRACTION_EQUATION_KERNELS)) {
    154154                matrix->data.F64[iIndex][bgIndex] = bgTerm;
    155155                matrix->data.F64[bgIndex][iIndex] = bgTerm;
    156156            }
    157             if (mode | PM_SUBTRACTION_EQUATION_KERNELS) {
     157            if (mode & PM_SUBTRACTION_EQUATION_KERNELS) {
    158158                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                }
    159166            }
    160167        }
     
    196203        }
    197204    }
    198     if (mode | PM_SUBTRACTION_EQUATION_NORM) {
     205    if (mode & PM_SUBTRACTION_EQUATION_NORM) {
    199206        matrix->data.F64[normIndex][normIndex] = sumRR;
    200207        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) {
    203211        matrix->data.F64[bgIndex][bgIndex] = sum1;
    204212        vector->data.F64[bgIndex] = sumI;
    205213    }
    206     if ((mode | PM_SUBTRACTION_EQUATION_NORM) && (mode | PM_SUBTRACTION_EQUATION_BG)) {
     214    if ((mode & PM_SUBTRACTION_EQUATION_NORM) && (mode & PM_SUBTRACTION_EQUATION_BG)) {
    207215        matrix->data.F64[normIndex][bgIndex] = sumR;
    208216        matrix->data.F64[bgIndex][normIndex] = sumR;
     
    953961#endif
    954962
     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
    955975        psVector *permutation = NULL;       // Permutation vector, required for LU decomposition
    956976        psImage *luMatrix = psMatrixLUDecomposition(NULL, &permutation, sumMatrix);
     
    979999
    9801000        // only update the solutions that we chose to calculate:
    981         if (mode | PM_SUBTRACTION_EQUATION_NORM) {
     1001        if (mode & PM_SUBTRACTION_EQUATION_NORM) {
    9821002            int normIndex = PM_SUBTRACTION_INDEX_NORM(kernels); // Index for normalisation
    9831003            kernels->solution1->data.F64[normIndex] = solution->data.F64[normIndex];
    9841004        }
    985         if (mode | PM_SUBTRACTION_EQUATION_BG) {
     1005        if (mode & PM_SUBTRACTION_EQUATION_BG) {
    9861006            int bgIndex = PM_SUBTRACTION_INDEX_BG(kernels); // Index in matrix for background
    9871007            kernels->solution1->data.F64[bgIndex] = solution->data.F64[bgIndex];
    9881008        }
    989         if (mode | PM_SUBTRACTION_EQUATION_KERNELS) {
     1009        if (mode & PM_SUBTRACTION_EQUATION_KERNELS) {
    9901010            int numKernels = kernels->num;
    9911011            int spatialOrder = kernels->spatialOrder;       // Order of spatial variation
     
    12251245     }
    12261246
    1227     pmSubtractionVisualPlotLeastSquares((pmSubtractionStampList *) stamps); //casting away const
     1247    // pmSubtractionVisualPlotLeastSquares((pmSubtractionStampList *) stamps); //casting away const
    12281248    return true;
    12291249}
     
    12411261    double devNorm = 1.0 / (double)numPixels; // Normalisation for deviations
    12421262    int numKernels = kernels->num;      // Number of kernels
    1243     double norm = NAN;
    12441263
    12451264    psImage *polyValues = NULL;         // Polynomial values
     
    12581277        // Calculate coefficients of the kernel basis functions
    12591278        polyValues = p_pmSubtractionPolynomial(polyValues, kernels->spatialOrder, stamp->xNorm, stamp->yNorm);
    1260         norm = p_pmSubtractionSolutionNorm(kernels); // Normalisation
     1279        double norm = p_pmSubtractionSolutionNorm(kernels); // Normalisation
    12611280        double background = p_pmSubtractionSolutionBackground(kernels, polyValues);// Difference in background
    12621281
     
    14041423   
    14051424    }
     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
    14061437    psFree(residual);
    14071438    psFree(polyValues);
    14081439
    1409     psLogMsg("psModules.imcombine", PS_LOG_INFO, "normalization: %f", norm);
    1410     pmSubtractionVisualShowFit();
    1411     pmSubtractionVisualPlotFit(kernels);
    1412 
    14131440    return deviations;
    14141441}
Note: See TracChangeset for help on using the changeset viewer.