IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 21297


Ignore:
Timestamp:
Feb 4, 2009, 2:01:25 PM (17 years ago)
Author:
Paul Price
Message:

Attempt to populate output covariances.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/pap_branch_20090128/psModules/src/imcombine/pmSubtraction.c

    r21293 r21297  
    997997
    998998// XXX Put kernelImage, kernelVariance and polyValues on thread-dependent data
    999 static bool subtractionConvolvePatch(int numCols, int numRows, // Size of image
     999static bool subtractionConvolvePatch(psKernel **covar1, psKernel **covar2, // Covariance matrices
     1000                                     int numCols, int numRows, // Size of image
    10001001                                     int x0, int y0, // Offsets for image
    10011002                                     pmReadout *out1, pmReadout *out2, // Output readouts
     
    10301031                       ro1->image, ro1->variance, sys1, subMask, kernels, polyValues, background, *region,
    10311032                       maskBad, maskPoor, poorFrac, useFFT, false);
     1033        *covar1 = psImageCovarianceCalculate(kernelImage, ro1->covariance);
    10321034    }
    10331035    if (kernels->mode == PM_SUBTRACTION_MODE_2 || kernels->mode == PM_SUBTRACTION_MODE_DUAL) {
     
    10351037                       ro2->image, ro2->variance, sys2, subMask, kernels, polyValues, background, *region,
    10361038                       maskBad, maskPoor, poorFrac, useFFT, kernels->mode == PM_SUBTRACTION_MODE_DUAL);
     1039        *covar2 = psImageCovarianceCalculate(kernelImage, ro2->covariance);
    10371040    }
    10381041
     
    10901093    bool useFFT = PS_SCALAR_VALUE(args->data[18], PS_TYPE_IMAGE_MASK_DATA); // Use FFT for convolution?
    10911094
    1092     return subtractionConvolvePatch(numCols, numRows, x0, y0, out1, out2, convMask, ro1, ro2, sys1, sys2,
    1093                                     subMask, maskBad, maskPoor, poorFrac, region, kernels, doBG, useFFT);
     1095    psKernel *covar1 = NULL, *covar2 = NULL; // Covariance matrices to return
     1096
     1097    if (!subtractionConvolvePatch(&covar1, &covar2, numCols, numRows, x0, y0, out1, out2, convMask, ro1, ro2,
     1098                                  sys1, sys2, subMask, maskBad, maskPoor, poorFrac, region, kernels, doBG,
     1099                                  useFFT)) {
     1100        return false;
     1101    }
     1102    psArrayAdd(job->results, 1, covar1);
     1103    psArrayAdd(job->results, 1, covar2);
     1104    psFree(covar1);
     1105    psFree(covar2);
     1106
     1107    return true;
    10941108}
    10951109
     
    12511265        stride = 2 * size + 1;
    12521266    }
     1267
     1268    psList *covariances1 = psListAlloc(NULL), *covariances2 = psListAlloc(NULL); // List of covariances
    12531269
    12541270    for (int j = yMin; j < yMax; j += stride) {
     
    13061322                psFree(job);
    13071323            } else {
    1308                 subtractionConvolvePatch(numCols, numRows, x0, y0, out1, out2, convMask, ro1, ro2,
    1309                                          sys1, sys2, subMask, maskBad, maskPoor, poorFrac, subRegion,
    1310                                          kernels, doBG, useFFT);
     1324                psKernel *covar1 = NULL, *covar2 = NULL; // Covariance matrices
     1325                subtractionConvolvePatch(&covar1, &covar2, numCols, numRows, x0, y0, out1, out2, convMask,
     1326                                         ro1, ro2, sys1, sys2, subMask, maskBad, maskPoor, poorFrac,
     1327                                         subRegion, kernels, doBG, useFFT);
     1328                if (covar1) {
     1329                    psListAdd(covariances1, PS_LIST_TAIL, covar1);
     1330                }
     1331                if (covar2) {
     1332                    psListAdd(covariances2, PS_LIST_TAIL, covar2);
     1333                }
     1334                psFree(covar1);
     1335                psFree(covar2);
    13111336            }
    13121337            psFree(subRegion);
     
    13281353            psAssert(strcmp(job->type, "PSMODULES_SUBTRACTION_CONVOLVE") == 0,
    13291354                     "Job has incorrect type: %s", job->type);
     1355            psAssert(job->results->n == 2, "Job has insufficient results: %ld", job->results->n);
     1356            if (job->results->data[0]) {
     1357                psListAdd(covariances1, PS_LIST_TAIL, job->results->data[0]);
     1358            }
     1359            if (job->results->data[1]) {
     1360                psListAdd(covariances2, PS_LIST_TAIL, job->results->data[1]);
     1361            }
    13301362            psFree(job);
    13311363        }
     
    13411373        }
    13421374    }
    1343 
    13441375    psImageConvolveSetThreads(oldThreads);
    13451376
    13461377    psFree(sys1);
    13471378    psFree(sys2);
     1379
     1380    if (psListLength(covariances1) > 0) {
     1381        psArray *covar = psListToArray(covariances1);
     1382        out1->covariance = psImageCovarianceAverage(covar);
     1383        psFree(covar);
     1384    }
     1385    if (psListLength(covariances2) > 0) {
     1386        psArray *covar = psListToArray(covariances2);
     1387        out2->covariance = psImageCovarianceAverage(covar);
     1388        psFree(covar);
     1389    }
     1390    psFree(covariances1);
     1391    psFree(covariances2);
    13481392
    13491393    // Copy anything that wasn't convolved
Note: See TracChangeset for help on using the changeset viewer.