Changeset 36680 for branches/eam_branches/ps2-tc3-20130727/psModules/src/imcombine/pmSubtractionSimple.c
- Timestamp:
- Apr 21, 2014, 5:42:34 AM (12 years ago)
- Location:
- branches/eam_branches/ps2-tc3-20130727
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/ps2-tc3-20130727
- Property svn:mergeinfo changed
-
branches/eam_branches/ps2-tc3-20130727/psModules
- Property svn:mergeinfo deleted
-
branches/eam_branches/ps2-tc3-20130727/psModules/src/imcombine/pmSubtractionSimple.c
r35821 r36680 34 34 #include "pmSourceSatstar.h" 35 35 36 #include "pmSourceLensing.h" 36 37 #include "pmSource.h" 37 38 … … 63 64 } 64 65 66 bool simple_apply_mask(psImage *image, psImage *weight, psImage *mask, 67 psImageMaskType maskVal) { 68 for (int y = 0; y < mask->numRows; y++) { 69 for (int x = 0; x < mask->numCols; x++) { 70 if (mask->data.PS_TYPE_IMAGE_MASK_DATA[y][x] & maskVal) { 71 image->data.F32[y][x] = NAN; 72 if (weight) { 73 weight->data.F32[y][x] = NAN; 74 } 75 } 76 } 77 } 78 return(true); 79 } 80 81 65 82 // Copied from pmSubtraction 66 83 static void solvedKernelPreCalc(psKernel *kernel, // Kernel, updated … … 90 107 psImageMaskType maskVal, 91 108 psImageMaskType maskBad, 92 psImageMaskType maskPoor 109 psImageMaskType maskPoor, 110 float deconvolveThreshold 93 111 ) { 94 112 // … … 115 133 psImage *varC2 = NULL; 116 134 135 psImage *maskTemp = NULL; 136 117 137 // Allocate images, as this is usually done by subtractionMatchAlloc after this function is called. 118 138 int numCols = ro1->image->numCols; … … 190 210 if (!conv1) { 191 211 if (convolution_direction == 1) { 192 chisq = 100; 193 } 194 convolution_direction = 2; 212 if (sigma1 - sigma2 > deconvolveThreshold) { 213 chisq = 100; 214 } 215 } 216 // convolution_direction = 2; 195 217 } 196 218 if (!conv2) { 197 219 if (convolution_direction == 2) { 198 chisq = 100; 199 } 200 convolution_direction = 1; 220 if (sigma2 - sigma1 > deconvolveThreshold) { 221 chisq = 100; 222 } 223 } 224 // convolution_direction = 1; 201 225 } 202 226 … … 205 229 int maskBox = (int) ceil(sigmaKern * 1.1774); // diameter is 1/2 FWHM 206 230 int maskBlank = 8; // I should be able to get this from a reference, right? 207 231 int maskPoorVal = 16384; // Another value that should be found elsewhere. 208 232 // 209 233 // Make a fake pmSubtractionKernels element so we can add it appropriately. … … 249 273 // Do convolutions 250 274 if (convolution_direction == 1) { 251 psImageSmoothMask_Threaded(imageC1,image1,mask1,maskVal,sigmaKern,6,1e-6); 252 psImageSmoothMask_Threaded(varC1,var1,mask1,maskVal,sigmaKern * M_SQRT1_2,6,1e-6); 253 maskC1 = psImageConvolveMask(maskC1,mask1,maskVal,maskBad, 254 -maskBox,maskBox,-maskBox,maskBox); 255 conv1->covariance = psImageCovarianceCalculate(kernel,ro1->covariance); 275 if (conv1) { 276 psImageSmoothMask_Threaded(imageC1,image1,mask1,maskVal,sigmaKern,6,1e-6); 277 psImageSmoothMask_Threaded(varC1,var1,mask1,maskVal,sigmaKern * M_SQRT1_2,6,1e-6); 278 279 maskTemp = psImageAlloc(numCols, numRows, PS_TYPE_IMAGE_MASK); 280 maskTemp = psImageConvolveMask(maskTemp,mask1,maskVal,maskBad, // Mask bad values 281 -maskBox,maskBox,-maskBox,maskBox); 282 maskC1 = psImageConvolveMask(maskC1,maskTemp,maskPoorVal,maskPoor, // Mask poor values 283 -maskBox,maskBox,-maskBox,maskBox); 284 psFree(maskTemp); 285 286 conv1->covariance = psImageCovarianceCalculate(kernel,ro1->covariance); 287 pmSubtractionBorder(imageC1,varC1,maskC1,maskBox,maskBlank); 288 simple_apply_mask(imageC1,varC1,maskC1,maskBad); 289 } 256 290 if (conv2) { 257 291 imageC2 = psImageCopy(imageC2,image2,PS_TYPE_F32); … … 260 294 conv2->covariance = psMemIncrRefCounter(ro2->covariance); 261 295 } 262 pmSubtractionBorder(imageC1,varC1,maskC1,maskBox,maskBlank);263 pmSubtractionMaskApply(imageC1,varC1,maskC1,PM_SUBTRACTION_MODE_1);264 296 } 265 297 else if (convolution_direction == 2) { 266 psImageSmoothMask_Threaded(imageC2,image2,mask2,maskVal,sigmaKern,6,1e-6); 267 psImageSmoothMask_Threaded(varC2,var2,mask2,maskVal,sigmaKern * M_SQRT1_2,6,1e-6); 268 maskC2 = psImageConvolveMask(maskC2,mask2,maskVal,maskBad, 269 -maskBox,maskBox,-maskBox,maskBox); 270 conv2->covariance = psImageCovarianceCalculate(kernel,ro2->covariance); 298 if (conv2) { 299 psImageSmoothMask_Threaded(imageC2,image2,mask2,maskVal,sigmaKern,6,1e-6); 300 psImageSmoothMask_Threaded(varC2,var2,mask2,maskVal,sigmaKern * M_SQRT1_2,6,1e-6); 301 302 maskTemp = psImageAlloc(numCols, numRows, PS_TYPE_IMAGE_MASK); 303 maskTemp = psImageConvolveMask(maskTemp,mask2,maskVal,maskBad, // Mask bad values 304 -maskBox,maskBox,-maskBox,maskBox); 305 maskC2 = psImageConvolveMask(maskC2,maskTemp,maskPoorVal,maskPoor, // Mask poor values 306 -maskBox,maskBox,-maskBox,maskBox); 307 psFree(maskTemp); 308 309 conv2->covariance = psImageCovarianceCalculate(kernel,ro2->covariance); 310 pmSubtractionBorder(imageC2,varC2,maskC2,maskBox,maskBlank); 311 simple_apply_mask(imageC2,varC2,maskC2,maskBad); 312 } 271 313 if (conv1) { 272 314 imageC1 = psImageCopy(imageC1,image1,PS_TYPE_F32); … … 275 317 conv1->covariance = psMemIncrRefCounter(ro1->covariance); 276 318 } 277 pmSubtractionBorder(imageC2,varC2,maskC2,maskBox,maskBlank);278 pmSubtractionMaskApply(imageC2,varC2,maskC2,PM_SUBTRACTION_MODE_2);279 319 } 280 320 … … 294 334 float flux1,flux2; 295 335 296 if (conv olution_direction ==1) {336 if (conv1) { 297 337 simple_do_boxphot(&nPix1,&flux1,source,imageC1,maskC1,maskBad,photRadius); 298 if (conv2) { 299 simple_do_boxphot(&nPix2,&flux2,source,imageC2,maskC2,maskBad,photRadius); 300 } 301 else { 302 simple_do_boxphot(&nPix2,&flux2,source,image2,mask2,maskBad,photRadius); 303 } 304 } 305 else if (convolution_direction == 2) { 338 } 339 else { 340 simple_do_boxphot(&nPix1,&flux1,source,image1,mask1,maskBad,photRadius); 341 } 342 343 if (conv2) { 306 344 simple_do_boxphot(&nPix2,&flux2,source,imageC2,maskC2,maskBad,photRadius); 307 if (conv1) { 308 simple_do_boxphot(&nPix1,&flux1,source,imageC1,maskC1,maskBad,photRadius); 309 } 310 else { 311 simple_do_boxphot(&nPix1,&flux1,source,image1,mask1,maskBad,photRadius); 312 } 313 } 345 } 346 else { 347 simple_do_boxphot(&nPix2,&flux2,source,image2,mask2,maskBad,photRadius); 348 } 349 314 350 logFluxDifferences->data.F32[i] = flux2 - flux1; 315 351 fitMask->data.PS_TYPE_VECTOR_MASK_DATA[i] = 0; … … 321 357 // fprintf(stderr,"SOURCES: %d %g %g %g -> %d %d %g %g %d %g\n",i,source->peak->xf,source->peak->yf,source->psfMag, 322 358 // nPix1,nPix2,flux1,flux2,fitMask->data.PS_TYPE_VECTOR_MASK_DATA[i],logFluxDifferences->data.F32[i]); 323 324 359 } 325 360
Note:
See TracChangeset
for help on using the changeset viewer.
