Changeset 28667 for trunk/archive/noise_model
- Timestamp:
- Jul 13, 2010, 2:34:04 PM (16 years ago)
- File:
-
- 1 edited
-
trunk/archive/noise_model/simulate.c (modified) (18 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/archive/noise_model/simulate.c
r28173 r28667 6 6 #define DET_SIZE 2000 7 7 #define SKY_SIZE 1000 8 #define SIZE 10249 8 #define OUTPUT_ROOT "test" 10 #define SCALE 0. 6543219 #define SCALE 0.7654321 11 10 #define ROT M_PI_2 12 #define INTERPOLATION PS_INTERPOLATE_LANCZOS 411 #define INTERPOLATION PS_INTERPOLATE_LANCZOS3 13 12 #define OFFSET 16 14 13 #define SMOOTH_SIGMA 6.54321 … … 16 15 #define DUAL_KERNEL "sub.subkernel" 17 16 #define WARP_NUM 10000 17 #define CONV_NUM 1000 18 18 19 19 static const float variances[] = { 3.0, 10.0, 30.0, 100.0, 300.0, 1000.0, 3000.0, 10000.0 }; … … 21 21 static const char *rootNames[] = { "o5298g0209o.fake.warp", "o5298g0210o.fake.warp", "o5298g0211o.fake.warp", 22 22 "o5298g0212o.fake.warp", "o5298g0213o.fake.warp", "o5298g0214o.fake.warp", 23 23 24 "o5298g0215o.fake.warp", "o5298g0216o.fake.warp" }; 25 #if 1 24 26 static const char *kernels[] = { "test.5.kernel", "test.11.kernel", "test.17.kernel", "test.23.kernel", 25 27 "test.29.kernel", "test.35.kernel", "test.41.kernel", "test.47.kernel" }; 26 28 #else 29 static const char *kernels[] = { "test.11.kernel", "test.11.kernel", "test.11.kernel", "test.11.kernel", 30 "test.11.kernel", "test.11.kernel", "test.11.kernel", "test.11.kernel" }; 31 #endif 27 32 28 33 void writeImage(const psImage *image, const char *suffix) … … 76 81 float meanVar(const psImage *var, const psImage *mask, const psKernel *covar) 77 82 { 78 psRandom *rng = psRandomAlloc(PS_RANDOM_TAUS);79 83 psStats *stats = psStatsAlloc(PS_STAT_SAMPLE_MEDIAN); 80 psImage Background(stats, NULL, var, mask, 0xFF, rng);84 psImageStats(stats, var, mask, 0xFF); 81 85 float variance = stats->sampleMedian * psImageCovarianceFactor(covar); 82 86 psFree(stats); 83 psFree(rng);84 87 return variance; 85 88 } … … 93 96 for (int x = 0; x < image->numCols; x++) { 94 97 sn->data.F32[y][x] = image->data.F32[y][x] / sqrtf(var->data.F32[y][x] * varFactor); 98 if (!isfinite(sn->data.F32[y][x])) { 99 mask->data.PS_TYPE_IMAGE_MASK_DATA[y][x] = 0xFF; 100 } 95 101 } 96 102 } … … 100 106 float offset = stats->sampleMean; 101 107 psFree(stats); 108 109 static int number = 0; 110 111 psString snName = NULL; 112 psStringAppend(&snName, "sn.%d.fits", number); 113 writeImage(sn, snName); 114 fprintf(stderr, "Writing S/N image %d\n", number); 102 115 103 116 psHistogram *hist = psHistogramAlloc(-5, +5, 101); … … 121 134 psFree(sn); 122 135 123 static int number = 0;124 136 psString name = NULL; 125 137 fprintf(stderr, "Writing histogram %d\n", number); 126 psStringAppend(&name, "hist_%d.dat", number ++);138 psStringAppend(&name, "hist_%d.dat", number); 127 139 FILE *file = fopen(name, "w"); 128 140 psFree(name); … … 136 148 psFree(hist); 137 149 150 number++; 151 138 152 return noise; 139 153 } … … 144 158 { 145 159 psKernel *kernel2 = psKernelAlloc(kernel->xMin, kernel->xMax, kernel->yMin, kernel->yMax); 146 double sum = 0.0, sum2 = 0.0;147 160 for (int y = kernel->yMin; y <= kernel->yMax; y++) { 148 161 for (int x = kernel->xMin; x <= kernel->xMax; x++) { 149 sum += kernel->kernel[y][x]; 150 sum2 += kernel2->kernel[y][x] = PS_SQR(kernel->kernel[y][x]); 151 } 152 } 153 for (int y = kernel->yMin; y <= kernel->yMax; y++) { 154 for (int x = kernel->xMin; x <= kernel->xMax; x++) { 155 kernel2->kernel[y][x] /= sum2; 162 kernel2->kernel[y][x] = PS_SQR(kernel->kernel[y][x]); 156 163 } 157 164 } … … 176 183 177 184 psKernel *kernel = psImageSmoothKernel(SMOOTH_SIGMA, SMOOTH_N_SIGMA); // Kernel used for smoothing 185 double sum2 = 0.0; // Sum of kernel squared 186 for (int y = kernel->yMin; y <= kernel->yMax; y++) { 187 for (int x = kernel->xMin; x <= kernel->xMax; x++) { 188 sum2 += PS_SQR(kernel->kernel[y][x]); 189 } 190 } 191 float factor = 1.0 / sum2; 178 192 psKernel *smoothCovar = psImageCovarianceCalculate(kernel, covar); 179 193 psFree(kernel); 180 psImageCovarianceTransfer(smoothVariance, smoothCovar); 194 195 // Apply square root of significance image scaling factor to image 196 psBinaryOp(smoothImage, smoothImage, "*", psScalarAlloc(sqrtf(factor), PS_TYPE_F32)); 197 181 198 #else 182 199 psKernel *kernel = psImageSmoothKernel(SMOOTH_SIGMA, SMOOTH_N_SIGMA); // Kernel used for smoothing 183 200 psKernel *kernel2 = psKernelAlloc(kernel->xMin, kernel->xMax, kernel->yMin, kernel->yMax); 184 double sum = 0.0, sum2 = 0.0;185 201 for (int y = kernel->yMin; y <= kernel->yMax; y++) { 186 202 for (int x = kernel->xMin; x <= kernel->xMax; x++) { 187 sum += kernel->kernel[y][x]; 188 sum2 += kernel2->kernel[y][x] = PS_SQR(kernel->kernel[y][x]); 189 } 190 } 191 fprintf(stderr, "Kernel sum: %f %f\n", sum, sum2); 192 for (int y = kernel->yMin; y <= kernel->yMax; y++) { 193 for (int x = kernel->xMin; x <= kernel->xMax; x++) { 194 kernel2->kernel[y][x] /= sum2; 203 kernel2->kernel[y][x] = PS_SQR(kernel->kernel[y][x]); 195 204 } 196 205 } … … 332 341 } 333 342 343 float covarianceSum(const psKernel *covar) 344 { 345 if (!covar) { 346 return 1.0; 347 } 348 double sum = 0.0; 349 for (int y = covar->yMin; y <= covar->yMax; y++) { 350 for (int x = covar->xMin; x <= covar->xMax; x++) { 351 sum += covar->kernel[y][x]; 352 } 353 } 354 return sum; 355 } 356 357 334 358 int main(int argc, char *argv[]) 335 359 { … … 383 407 } 384 408 385 fprintf(stderr, "Input image %d: S/N: %f Covar: %f Var: %f \n",409 fprintf(stderr, "Input image %d: S/N: %f Covar: %f Var: %f CovarSum: %f\n", 386 410 i, 387 411 signoise(inImage, inMask, inVariance, inCovar), 388 412 psImageCovarianceFactor(inCovar), 389 meanVar(inVariance, inMask, inCovar)); 413 meanVar(inVariance, inMask, inCovar), 414 covarianceSum(inCovar)); 390 415 391 416 phot(inImage, inMask, inVariance, inCovar); … … 417 442 } 418 443 419 fprintf(stderr, "Warp image %d: S/N: %f Covar: %f Var: %f \n",444 fprintf(stderr, "Warp image %d: S/N: %f Covar: %f Var: %f CovarSum: %f\n", 420 445 i, 421 446 signoise(warpImage, warpMask, warpVariance, warpCovar), 422 447 psImageCovarianceFactor(warpCovar), 423 meanVar(warpVariance, warpMask, warpCovar)); 448 meanVar(warpVariance, warpMask, warpCovar), 449 covarianceSum(warpCovar)); 424 450 425 451 phot(warpImage, warpMask, warpVariance, warpCovar); … … 434 460 pmReadoutReadSubtractionKernels(ro, fits); 435 461 pmSubtractionKernels *kernels = psMetadataLookupPtr(NULL, ro->analysis, PM_SUBTRACTION_ANALYSIS_KERNEL); 462 int normIndex = PM_SUBTRACTION_INDEX_NORM(kernels); 463 int bgIndex = PM_SUBTRACTION_INDEX_BG(kernels); 464 #if 1 465 // kernels->solution1->data.F64[normIndex] += 1.0; 466 kernels->solution1->data.F64[bgIndex] = 0.0; 467 #endif 468 fprintf(stderr, "Norm: %f BG: %f\n", kernels->solution1->data.F64[normIndex], kernels->solution1->data.F64[bgIndex]); 436 469 #if 0 437 470 for (int i = 0; i < kernels->num; i++) { … … 455 488 psFitsClose(fits); 456 489 490 #if 0 491 { 492 psRandom *rng = psRandomAlloc(PS_RANDOM_TAUS); 493 psArray *covariances = psArrayAlloc(CONV_NUM); 494 psVector *factors = psVectorAlloc(CONV_NUM, PS_TYPE_F32); 495 double mean = 0.0; 496 for (int i = 0; i < CONV_NUM; i++) { 497 float x, y; 498 p_pmSubtractionPolynomialNormCoords(&x, &y, psRandomUniform(rng) * SKY_SIZE, 499 psRandomUniform(rng) * SKY_SIZE, 500 kernels->xMin, kernels->xMax, 501 kernels->yMin, kernels->yMax); 502 psKernel *kernel = pmSubtractionKernel(kernels, x, y, false); 503 psKernel *covar = covariances->data[i] = psImageCovarianceCalculate(kernel, inCovar); 504 psFree(kernel); 505 mean += factors->data.F32[i] = psImageCovarianceFactor(covar); 506 } 507 psFree(rng); 508 psFree(covariances); 509 510 mean /= WARP_NUM; 511 512 double stdev = 0.0; 513 for (int i = 0; i < CONV_NUM; i++) { 514 stdev += PS_SQR(factors->data.F32[i] - mean); 515 } 516 stdev = sqrt(stdev/(CONV_NUM-1)); 517 fprintf(stderr, "Conv covariance mean: %f stdev: %f\n", mean, stdev); 518 psFree(factors); 519 } 520 #endif 521 457 522 pmReadout *conv = pmReadoutAlloc(NULL); 458 523 #if 1 … … 460 525 conv->mask = psImageAlloc(SKY_SIZE, SKY_SIZE, PS_TYPE_IMAGE_MASK); 461 526 conv->variance = psImageAlloc(SKY_SIZE, SKY_SIZE, PS_TYPE_F32); 462 if (!pmSubtractionMatchPrecalc(NULL, conv, NULL, ro, ro->analysis, 32, 0.0, 0.01,527 if (!pmSubtractionMatchPrecalc(NULL, conv, NULL, ro, ro->analysis, 2 * kernels->size + 1, 0.0, 0.01, 463 528 0xFF, 0xF0, 0x0F, 0.1, 1.0)) { 464 529 psErrorStackPrint(stderr, "Error:"); … … 494 559 } 495 560 496 fprintf(stderr, "Conv Image %d: S/N: %f Covar: %f Var: %f \n",561 fprintf(stderr, "Conv Image %d: S/N: %f Covar: %f Var: %f CovarSum: %f\n", 497 562 i, 498 563 signoise(conv->image, conv->mask, conv->variance, conv->covariance), 499 564 psImageCovarianceFactor(conv->covariance), 500 meanVar(conv->variance, conv->mask, conv->covariance)); 565 meanVar(conv->variance, conv->mask, conv->covariance), 566 covarianceSum(conv->covariance)); 501 567 502 568 phot(conv->image, conv->mask, conv->variance, conv->covariance); 503 569 readouts->data[i] = conv; 504 570 571 // exit(1); 505 572 } 506 573 … … 624 691 meanVar(diffVariance, diffMask, diffCovar)); 625 692 626 phot(diffImage, diffMask, diffVariance, diffCovar);627 628 693 writeImage(diffImage, "ssdiff.image.fits"); 629 694 writeImage(diffMask, "ssdiff.mask.fits");
Note:
See TracChangeset
for help on using the changeset viewer.
