- Timestamp:
- Jul 30, 2010, 9:31:50 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/ipp-20100621/archive/noise_model/simulate.c
r28173 r28794 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 … … 562 629 psImageCovarianceFactor(stackCovar2), 563 630 meanVar(stackVariance2, stackMask2, stackCovar2)); 631 632 writeImage(stackImage1, "stack1.image.fits"); 633 writeImage(stackMask1, "stack1.mask.fits"); 634 writeImage(stackVariance1, "stack1.variance.fits"); 635 writeImage(stackCovar1->image, "stack1.covar.fits"); 636 writeImage(stackImage2, "stack2.image.fits"); 637 writeImage(stackMask2, "stack2.mask.fits"); 638 writeImage(stackVariance2, "stack2.variance.fits"); 639 writeImage(stackCovar2->image, "stack2.covar.fits"); 640 564 641 phot(stackImage1, stackMask1, stackVariance1, stackCovar1); 565 642 phot(stackImage2, stackMask2, stackVariance2, stackCovar2); … … 584 661 kernel->yMax = SKY_SIZE; 585 662 663 int normIndex = PM_SUBTRACTION_INDEX_NORM(kernel); 664 int bgIndex = PM_SUBTRACTION_INDEX_BG(kernel); 665 #if 1 666 // kernel->solution1->data.F64[normIndex] += 1.0; 667 kernel->solution1->data.F64[bgIndex] = 0.0; 668 #endif 669 fprintf(stderr, "Norm: %f BG: %f\n", kernel->solution1->data.F64[normIndex], kernel->solution1->data.F64[bgIndex]); 670 586 671 pmReadout *convStack1 = pmReadoutAlloc(NULL); 587 672 pmReadout *convStack2 = pmReadoutAlloc(NULL); … … 594 679 595 680 if (!pmSubtractionMatchPrecalc(convStack1, convStack2, stack1, stack2, stack1->analysis, 596 32, 0.0, 0.001, 0xFF, 0xF0, 0x0F, 0.1, 1.0)) {681 2 * kernel->size + 1, 0.0, 0.001, 0xFF, 0xF0, 0x0F, 0.1, 1.0)) { 597 682 psErrorStackPrint(stderr, "Error:"); 598 683 exit(1); … … 600 685 psFree(stack1); 601 686 psFree(stack2); 687 688 writeImage(convStack1->image, "stack1.conv.image.fits"); 689 writeImage(convStack1->mask, "stack1.conv.mask.fits"); 690 writeImage(convStack1->variance, "stack1.conv.variance.fits"); 691 writeImage(convStack1->covariance->image, "stack1.conv.covar.fits"); 692 writeImage(convStack2->image, "stack2.conv.image.fits"); 693 writeImage(convStack2->mask, "stack2.conv.mask.fits"); 694 writeImage(convStack2->variance, "stack2.conv.variance.fits"); 695 writeImage(convStack2->covariance->image, "stack2.conv.covar.fits"); 602 696 603 697 psImageCovarianceTransfer(convStack1->variance, convStack1->covariance); … … 624 718 meanVar(diffVariance, diffMask, diffCovar)); 625 719 626 phot(diffImage, diffMask, diffVariance, diffCovar);627 628 720 writeImage(diffImage, "ssdiff.image.fits"); 629 721 writeImage(diffMask, "ssdiff.mask.fits"); … … 674 766 kernel->xMax = SKY_SIZE; 675 767 kernel->yMax = SKY_SIZE; 768 769 int normIndex = PM_SUBTRACTION_INDEX_NORM(kernel); 770 int bgIndex = PM_SUBTRACTION_INDEX_BG(kernel); 771 #if 1 772 // kernel->solution1->data.F64[normIndex] += 1.0; 773 kernel->solution1->data.F64[bgIndex] = 0.0; 774 #endif 775 fprintf(stderr, "Norm: %f BG: %f\n", kernel->solution1->data.F64[normIndex], kernel->solution1->data.F64[bgIndex]); 676 776 677 777 pmReadout *warp = readouts->data[readouts->n - 1];
Note:
See TracChangeset
for help on using the changeset viewer.
