IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 26552


Ignore:
Timestamp:
Jan 8, 2010, 4:45:56 PM (16 years ago)
Author:
Paul Price
Message:

Updating to use new API for psMatrixSolveSVD.

File:
1 edited

Legend:

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

    r26547 r26552  
    543543            for (int xOrder = 0; xOrder <= spatialOrder - yOrder; xOrder++, index += numKernels) {
    544544                // Contribution to chi^2: a_i^2 P_i
    545                 if (!isfinite(penalties->data.F32[i])) {
    546                     psAbort ("invalid penalty");
    547                 }
     545                psAssert(isfinite(penalties->data.F32[i]), "Invalid penalty");
    548546                matrix->data.F64[index][index] -= norm * penalties->data.F32[i];
    549547            }
     
    13601358#if 0
    13611359        {
    1362             solution = psMatrixSolveSVD(solution, sumMatrix, sumVector);
     1360            solution = psMatrixSolveSVD(solution, sumMatrix, sumVector, 1e-5);
    13631361            if (!solution) {
    13641362                psError(PS_ERR_UNKNOWN, false, "SVD solution of least-squares equation failed.\n");
     
    13671365                return NULL;
    13681366            }
     1367
     1368#ifdef TESTING
     1369            {
     1370                psImage *image = psImageAlloc(1, numParams + numParams2, PS_TYPE_F64);
     1371                psFits *fits = psFitsOpen("solnVector.fits", "w");
     1372                for (int i = 0; i < numParams + numParams2; i++) {
     1373                    fprintf(stderr, "Solution %d: %lf\n", i, solution->data.F64[i]);
     1374                    image->data.F64[0][i] = solution->data.F64[i];
     1375                }
     1376                psFitsWriteImage(fits, NULL, image, 0, NULL);
     1377                psFree(image);
     1378                psFitsClose(fits);
     1379            }
     1380#endif
    13691381
    13701382            int numSpatial = PM_SUBTRACTION_POLYTERMS(kernels->spatialOrder); // Number of spatial variations
     
    14051417            }
    14061418
    1407             #define TOL 1.0e-5
     1419            #define TOL 1.0e-3
    14081420            int normIndex = PM_SUBTRACTION_INDEX_NORM(kernels); // Index for normalisation
    14091421            double norm = fabs(solution->data.F64[normIndex]);  // Normalisation
     
    14291441
    14301442                if (!mask1 && !mask2) {
    1431                     if (fabs(param1) < fabs(param2)) {
    1432                         psTrace("psModules.imcombine", 7, "Parameter %d: 1 < 2\n", i);
     1443                    if (fabs(param1) > fabs(param2)) {
     1444                        psTrace("psModules.imcombine", 7, "Parameter %d: 1 > 2\n", i);
     1445                        MASK_BASIS_2(i);
     1446                    } else {
     1447                        psTrace("psModules.imcombine", 7, "Parameter %d: 2 > 1\n", i);
    14331448                        MASK_BASIS_1(i);
    1434                     } else {
    1435                         psTrace("psModules.imcombine", 7, "Parameter %d: 2 < 1\n", i);
    1436                         MASK_BASIS_2(i);
    14371449                    }
    14381450                }
    14391451            }
     1452
     1453            calculateEquationDual(&sumMatrix, &sumVector, sumMatrix1, sumMatrix2,
     1454                                  sumMatrixX, sumVector1, sumVector2);
    14401455
    14411456#ifdef TESTING
     
    14561471            }
    14571472#endif
    1458 
    1459             calculateEquationDual(&sumMatrix, &sumVector, sumMatrix1, sumMatrix2,
    1460                                   sumMatrixX, sumVector1, sumVector2);
    1461         }
    1462 #endif
    1463 
    1464 
    1465         solution = psMatrixSolveSVD(solution, sumMatrix, sumVector);
     1473        }
     1474#endif
     1475
     1476        solution = psMatrixSolveSVD(solution, sumMatrix, sumVector, 1e-7);
    14661477        if (!solution) {
    14671478            psError(PS_ERR_UNKNOWN, false, "SVD solution of least-squares equation failed.\n");
     
    14841495        {
    14851496            psImage *image = psImageAlloc(1, numParams + numParams2, PS_TYPE_F64);
    1486             psFits *fits = psFitsOpen("solnVector.fits", "w");
     1497            psFits *fits = psFitsOpen("solnVectorFix.fits", "w");
    14871498            for (int i = 0; i < numParams + numParams2; i++) {
    14881499                fprintf(stderr, "Solution %d: %lf\n", i, solution->data.F64[i]);
Note: See TracChangeset for help on using the changeset viewer.