Changeset 23573 for trunk/ppStack/src/ppStackConvolve.c
- Timestamp:
- Mar 27, 2009, 11:49:17 AM (17 years ago)
- File:
-
- 1 edited
-
trunk/ppStack/src/ppStackConvolve.c (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ppStack/src/ppStackConvolve.c
r23341 r23573 30 30 int num = options->num; // Number of inputs 31 31 options->cells = psArrayAlloc(num); // Cells for convolved images --- a handle for reading again 32 options-> subKernels = psArrayAlloc(num); // Subtractionkernels --- required in the stacking33 options-> subRegions = psArrayAlloc(num); // Subtractionregions --- required in the stacking32 options->kernels = psArrayAlloc(num); // PSF-matching kernels --- required in the stacking 33 options->regions = psArrayAlloc(num); // PSF-matching regions --- required in the stacking 34 34 int numGood = 0; // Number of good frames 35 35 options->numCols = 0; … … 38 38 psVectorInit(options->matchChi2, NAN); 39 39 options->weightings = psVectorAlloc(num, PS_TYPE_F32); // Combination weightings for images (1/noise^2) 40 psVectorInit(options->weightings, NAN);40 psVectorInit(options->weightings, 0.0); 41 41 options->covariances = psArrayAlloc(num); // Covariance matrices 42 42 … … 78 78 79 79 // Background subtraction, scaling and normalisation is performed automatically by the image matching 80 psArray *regions = NULL, *kernels = NULL; // Regions and kernels used in subtraction81 80 psTimerStart("PPSTACK_MATCH"); 82 83 if (!ppStackMatch(readout, ®ions, &kernels, &options->matchChi2->data.F32[i], 84 &options->weightings->data.F32[i], options->sourceLists->data[i], 85 options->psf, rng, config)) { 81 if (!ppStackMatch(readout, options, i, config)) { 86 82 psErrorStackPrint(stderr, "Unable to match image %d --- ignoring.", i); 87 options->inputMask->data.PS_TYPE_VECTOR_MASK_DATA[i] = PPSTACK_MASK_MATCH;83 options->inputMask->data.PS_TYPE_VECTOR_MASK_DATA[i] |= PPSTACK_MASK_MATCH; 88 84 psErrorClear(); 89 85 continue; … … 92 88 93 89 if (options->stats) { 94 pmSubtractionKernels *kernels = psMetadataLookupPtr(NULL, readout->analysis,95 PM_SUBTRACTION_ANALYSIS_KERNEL);// Conv kernel96 90 psMetadataAddF32(options->stats, PS_LIST_TAIL, "TIME_MATCH", PS_META_DUPLICATE_OK, 97 91 "Time to match PSF", psTimerMark("PPSTACK_MATCH")); 98 psMetadataAddF32(options->stats, PS_LIST_TAIL, "STAMP.MEAN", PS_META_DUPLICATE_OK,99 "Mean deviation for stamps", kernels->mean);100 psMetadataAddF32(options->stats, PS_LIST_TAIL, "STAMP.RMS", PS_META_DUPLICATE_OK,101 "RMS deviation for stamps", kernels->rms);102 psMetadataAddF32(options->stats, PS_LIST_TAIL, "STAMP.NUM", PS_META_DUPLICATE_OK,103 "Number of stamps", kernels->numStamps);104 float deconv = psMetadataLookupF32(NULL, readout->analysis,105 PM_SUBTRACTION_ANALYSIS_DECONV_MAX); // Deconvolution fraction106 psMetadataAddF32(options->stats, PS_LIST_TAIL, "KERNEL.DECONV", PS_META_DUPLICATE_OK,107 "Deconvolution fraction for kernel", deconv);108 92 psMetadataAddF32(options->stats, PS_LIST_TAIL, "PPSTACK.WEIGHTING", PS_META_DUPLICATE_OK, 109 93 "Weighting for image", options->weightings->data.F32[i]); 94 95 if (options->convolve) { 96 // Pull parameters out of convolution kernel 97 pmSubtractionKernels *kernels = psMetadataLookupPtr(NULL, readout->analysis, 98 PM_SUBTRACTION_ANALYSIS_KERNEL); 99 psMetadataAddF32(options->stats, PS_LIST_TAIL, "STAMP.MEAN", PS_META_DUPLICATE_OK, 100 "Mean deviation for stamps", kernels->mean); 101 psMetadataAddF32(options->stats, PS_LIST_TAIL, "STAMP.RMS", PS_META_DUPLICATE_OK, 102 "RMS deviation for stamps", kernels->rms); 103 psMetadataAddF32(options->stats, PS_LIST_TAIL, "STAMP.NUM", PS_META_DUPLICATE_OK, 104 "Number of stamps", kernels->numStamps); 105 float deconv = psMetadataLookupF32(NULL, readout->analysis, 106 PM_SUBTRACTION_ANALYSIS_DECONV_MAX); 107 psMetadataAddF32(options->stats, PS_LIST_TAIL, "KERNEL.DECONV", PS_META_DUPLICATE_OK, 108 "Deconvolution fraction for kernel", deconv); 109 } 110 110 } 111 111 psLogMsg("ppStack", PS_LOG_INFO, "Time to match image %d: %f sec", i, psTimerClear("PPSTACK_MATCH")); 112 112 113 options->subRegions->data[i] = regions;114 options->subKernels->data[i] = kernels;115 116 113 // Write the temporary convolved files 117 pmHDU *hdu = readout->parent->parent->parent->hdu; // HDU for convolved image 118 assert(hdu); 119 ppStackWriteImage(options->imageNames->data[i], hdu->header, readout->image, config); 120 psMetadata *maskHeader = psMetadataCopy(NULL, hdu->header); // Copy of header, for mask 121 pmConfigMaskWriteHeader(config, maskHeader); 122 ppStackWriteImage(options->maskNames->data[i], maskHeader, readout->mask, config); 123 psFree(maskHeader); 124 psImageCovarianceTransfer(readout->variance, readout->covariance); 125 ppStackWriteImage(options->varianceNames->data[i], hdu->header, readout->variance, config); 114 if (options->convolve) { 115 pmHDU *hdu = readout->parent->parent->parent->hdu; // HDU for convolved image 116 assert(hdu); 117 ppStackWriteImage(options->imageNames->data[i], hdu->header, readout->image, config); 118 psMetadata *maskHeader = psMetadataCopy(NULL, hdu->header); // Copy of header, for mask 119 pmConfigMaskWriteHeader(config, maskHeader); 120 ppStackWriteImage(options->maskNames->data[i], maskHeader, readout->mask, config); 121 psFree(maskHeader); 122 psImageCovarianceTransfer(readout->variance, readout->covariance); 123 ppStackWriteImage(options->varianceNames->data[i], hdu->header, readout->variance, config); 126 124 #ifdef TESTING 127 {128 psString name = NULL;129 psStringAppend(&name, "covariance_%d.fits", i);130 ppStackWriteImage(name, hdu->header, readout->covariance->image, config);131 pmStackVisualPlotTestImage(readout->covariance->image, name);132 psFree(name);133 }125 { 126 psString name = NULL; 127 psStringAppend(&name, "covariance_%d.fits", i); 128 ppStackWriteImage(name, hdu->header, readout->covariance->image, config); 129 pmStackVisualPlotTestImage(readout->covariance->image, name); 130 psFree(name); 131 } 134 132 #endif 133 } 135 134 136 135 pmCell *inCell = readout->parent; // Input cell … … 152 151 psFree(rng); 153 152 153 psFree(options->norm); options->norm = NULL; 154 154 psFree(options->sourceLists); options->sourceLists = NULL; 155 155 psFree(options->psf); options->psf = NULL;
Note:
See TracChangeset
for help on using the changeset viewer.
