IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Apr 2, 2008, 3:57:59 PM (18 years ago)
Author:
Paul Price
Message:

Removing MODE_TARGET mode --- this is now done by generating a fake image (with pmReadoutFakeFromSources) and matching to that with MODE_1 or MODE_2 as appropriate. Changed pmSubtractionMatch and pmSubtractionConvolve so that two output 'convolved' images are always produced. This makes it easier to determine what to subtract from what.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psModules/src/imcombine/pmSubtractionMatch.c

    r17295 r17297  
    101101                        psMaskType maskBlank, float badFrac, pmSubtractionMode mode)
    102102{
    103     PS_ASSERT_PTR_NON_NULL(conv1, false);
    104     if (mode == PM_SUBTRACTION_MODE_DUAL) {
    105         PS_ASSERT_PTR_NON_NULL(conv2, false);
    106     }
    107     PS_ASSERT_PTR_NON_NULL(ro1, false);
    108     PS_ASSERT_IMAGE_NON_NULL(ro1->image, false);
    109     PS_ASSERT_IMAGE_TYPE(ro1->image, PS_TYPE_F32, false);
    110     if (ro1->mask) {
    111         PS_ASSERT_IMAGE_NON_NULL(ro1->mask, false);
    112         PS_ASSERT_IMAGE_TYPE(ro1->mask, PS_TYPE_MASK, false);
    113         PS_ASSERT_IMAGES_SIZE_EQUAL(ro1->mask, ro1->image, false);
    114     }
    115     if (ro1->weight) {
    116         PS_ASSERT_IMAGE_NON_NULL(ro1->weight, false);
    117         PS_ASSERT_IMAGE_TYPE(ro1->weight, PS_TYPE_F32, false);
    118         PS_ASSERT_IMAGES_SIZE_EQUAL(ro1->weight, ro1->image, false);
    119     }
    120     if (ro2) {
    121         PS_ASSERT_IMAGE_NON_NULL(ro2->image, false);
    122         PS_ASSERT_IMAGE_TYPE(ro2->image, PS_TYPE_F32, false);
    123         PS_ASSERT_IMAGES_SIZE_EQUAL(ro2->image, ro1->image, false);
    124         if (ro2->mask) {
    125             PS_ASSERT_IMAGE_NON_NULL(ro2->mask, false);
    126             PS_ASSERT_IMAGE_TYPE(ro2->mask, PS_TYPE_MASK, false);
    127             PS_ASSERT_IMAGES_SIZE_EQUAL(ro2->mask, ro1->image, false);
    128         }
    129         if (ro2->weight) {
    130             PS_ASSERT_IMAGE_NON_NULL(ro2->weight, false);
    131             PS_ASSERT_IMAGE_TYPE(ro2->weight, PS_TYPE_F32, false);
    132             PS_ASSERT_IMAGES_SIZE_EQUAL(ro2->weight, ro1->image, false);
    133         }
    134     } else if (!stampsName && !sources) {
    135         psError(PS_ERR_UNEXPECTED_NULL, true,
    136                 "A list of sources is required for convolving to a target PSF.");
    137         return false;
    138     }
     103    PM_ASSERT_READOUT_NON_NULL(conv1, false);
     104    PM_ASSERT_READOUT_NON_NULL(conv2, false);
     105
     106    PM_ASSERT_READOUT_NON_NULL(ro1, false);
     107    PM_ASSERT_READOUT_NON_NULL(ro2, false);
     108    PM_ASSERT_READOUT_IMAGE(ro1, false);
     109    PM_ASSERT_READOUT_IMAGE(ro2, false);
     110    PS_ASSERT_IMAGES_SIZE_EQUAL(ro1->image, ro2->image, false);
     111
    139112    PS_ASSERT_INT_NONNEGATIVE(footprint, false);
    140113    // regionSize can be just about anything (except maybe negative, but it can be NAN)
     
    182155    }
    183156
    184     // Reset the output readout, just in case
     157    // Reset the output readouts, just in case
    185158    if (conv1->image) {
    186159        psFree(conv1->image);
     
    195168        conv1->weight = NULL;
    196169    }
     170    if (conv2->image) {
     171        psFree(conv2->image);
     172        conv2->image = NULL;
     173    }
     174    if (conv2->mask) {
     175        psFree(conv2->mask);
     176        conv2->mask = NULL;
     177    }
     178    if (conv2->weight) {
     179        psFree(conv2->weight);
     180        conv2->weight = NULL;
     181    }
    197182
    198183    // Where does our weight map come from?
     184    // Getting the weight exactly right is not necessary --- it's just used for weighting.
    199185    psImage *weight = NULL;             // Weight image to use
    200     if (ro1->weight && ro2 && ro2->weight) {
     186    if (ro1->weight && ro2->weight) {
    201187        weight = (psImage*)psBinaryOp(NULL, ro1->weight, "+", ro2->weight);
    202188    } else if (ro1->weight) {
    203189        weight = psMemIncrRefCounter(ro1->weight);
    204     } else if (ro2) {
    205         if (ro2->weight) {
    206             weight = psMemIncrRefCounter(ro2->weight);
    207         } else {
    208             weight = (psImage*)psBinaryOp(NULL, ro1->image, "+", ro2->image);
    209         }
     190    } else if (ro2->weight) {
     191        weight = psMemIncrRefCounter(ro2->weight);
    210192    } else {
    211         weight = psMemIncrRefCounter(ro1->image);
     193        weight = (psImage*)psBinaryOp(NULL, ro1->image, "+", ro2->image);
    212194    }
    213195
     
    218200    pmSubtractionStampList *stamps = NULL; // Stamps for matching PSF
    219201    pmSubtractionKernels *kernels = NULL; // Kernel basis functions
     202
    220203    int numCols = ro1->image->numCols, numRows = ro1->image->numRows; // Image dimensions
    221204
     
    272255            }
    273256
    274             if (mode == PM_SUBTRACTION_MODE_UNSURE || mode == PM_SUBTRACTION_MODE_TARGET) {
     257            if (mode == PM_SUBTRACTION_MODE_UNSURE) {
    275258                // Get backgrounds
    276259                psStats *bgStats = psStatsAlloc(BG_STAT); // Statistics for background
     
    303286                    break;
    304287                  case PM_SUBTRACTION_MODE_2:
    305                     if (mode == PM_SUBTRACTION_MODE_TARGET) {
    306                         psError(PS_ERR_BAD_PARAMETER_VALUE, true,
    307                                 "Input PSF is larger than target PSF --- can't match image.");
    308                         goto MATCH_ERROR;
    309                     }
    310288                    psLogMsg("psModules.imcombine", PS_LOG_INFO, "Convolving image 2 to match image 1.");
    311289                    break;
     
    334312            // Add analysis metadata
    335313            {
    336                 psMetadataAddPtr(conv1->analysis, PS_LIST_TAIL, PM_SUBTRACTION_ANALYSIS_KERNEL,
    337                                  PS_DATA_UNKNOWN | PS_META_DUPLICATE_OK, "Subtraction kernels", kernels);
    338                 if (conv2) {
    339                     psMetadataAddPtr(conv2->analysis, PS_LIST_TAIL, PM_SUBTRACTION_ANALYSIS_KERNEL,
    340                                      PS_DATA_UNKNOWN | PS_META_DUPLICATE_OK, "Subtraction kernels", kernels);
    341                 }
    342                 psMetadataAddS32(conv1->analysis, PS_LIST_TAIL, PM_SUBTRACTION_ANALYSIS_MODE,
    343                                  PS_META_DUPLICATE_OK, "Subtraction kernels", mode);
    344                 if (conv2) {
    345                     psMetadataAddS32(conv2->analysis, PS_LIST_TAIL, PM_SUBTRACTION_ANALYSIS_MODE,
    346                                      PS_META_DUPLICATE_OK, "Subtraction kernels", mode);
    347                 }
    348                 psRegion *subRegion;
     314                psRegion *subRegion;    // Region over which subtraction was performed
    349315                if (region) {
    350316                    subRegion = psMemIncrRefCounter(region);
     
    352318                    subRegion = psRegionAlloc(0, numCols, 0, numRows);
    353319                }
    354                 psMetadataAddPtr(conv1->analysis, PS_LIST_TAIL, PM_SUBTRACTION_ANALYSIS_REGION,
    355                                   PS_DATA_REGION | PS_META_DUPLICATE_OK,
    356                                  "Region over which subtraction was performed", subRegion);
    357                 if (conv2) {
     320
     321                if (mode == PM_SUBTRACTION_MODE_1 || mode == PM_SUBTRACTION_MODE_DUAL) {
     322                    psMetadataAddPtr(conv1->analysis, PS_LIST_TAIL, PM_SUBTRACTION_ANALYSIS_KERNEL,
     323                                     PS_DATA_UNKNOWN | PS_META_DUPLICATE_OK, "Subtraction kernels", kernels);
     324                    psMetadataAddS32(conv1->analysis, PS_LIST_TAIL, PM_SUBTRACTION_ANALYSIS_MODE,
     325                                     PS_META_DUPLICATE_OK, "Subtraction kernels", mode);
     326                    psMetadataAddPtr(conv1->analysis, PS_LIST_TAIL, PM_SUBTRACTION_ANALYSIS_REGION,
     327                                     PS_DATA_REGION | PS_META_DUPLICATE_OK,
     328                                     "Region over which subtraction was performed", subRegion);
     329                }
     330                if (mode == PM_SUBTRACTION_MODE_2 || mode == PM_SUBTRACTION_MODE_DUAL) {
     331                    psMetadataAddPtr(conv2->analysis, PS_LIST_TAIL, PM_SUBTRACTION_ANALYSIS_KERNEL,
     332                                     PS_DATA_UNKNOWN | PS_META_DUPLICATE_OK, "Subtraction kernels", kernels);
     333                    psMetadataAddS32(conv2->analysis, PS_LIST_TAIL, PM_SUBTRACTION_ANALYSIS_MODE,
     334                                     PS_META_DUPLICATE_OK, "Subtraction kernels", mode);
    358335                    psMetadataAddPtr(conv2->analysis, PS_LIST_TAIL, PM_SUBTRACTION_ANALYSIS_REGION,
    359336                                     PS_DATA_REGION | PS_META_DUPLICATE_OK,
Note: See TracChangeset for help on using the changeset viewer.