- Timestamp:
- Jun 6, 2011, 1:56:22 PM (15 years ago)
- Location:
- branches/czw_branch/20110406
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/czw_branch/20110406
- Property svn:mergeinfo changed
-
branches/czw_branch/20110406/psphot
- Property svn:mergeinfo changed
/branches/eam_branches/ipp-20110404/psphot (added) merged: 31313-31314,31328,31337,31362,31364,31381,31384,31437,31444
- Property svn:mergeinfo changed
-
branches/czw_branch/20110406/psphot/src/psphotSourceStats.c
r31154 r31606 98 98 99 99 // generate the array of sources, define the associated pixel 100 bool firstPass = false; 100 101 if (!detections->newSources) { 101 102 detections->newSources = psArrayAllocEmpty (peaks->n); 103 firstPass = true; 102 104 } 103 105 sources = detections->newSources; … … 125 127 if (source->mode & PM_SOURCE_MODE_MOMENTS_FAILURE) { 126 128 fprintf (stderr, "moment failure\n"); 129 } 130 131 if (firstPass) { 132 source->mode2 |= PM_SOURCE_MODE2_PASS1_SRC; 127 133 } 128 134 … … 159 165 RADIUS = psMetadataLookupF32 (&status, recipe, "PSF_MOMENTS_RADIUS"); 160 166 } 167 float MIN_KRON_RADIUS = psMetadataLookupF32 (&status, readout->analysis, "MOMENTS_MIN_KRON"); 168 if (!status) { 169 MIN_KRON_RADIUS = 0.75*SIGMA; 170 } 161 171 162 172 // threaded measurement of the source magnitudes … … 186 196 PS_ARRAY_ADD_SCALAR(job->args, RADIUS, PS_TYPE_F32); 187 197 PS_ARRAY_ADD_SCALAR(job->args, SIGMA, PS_TYPE_F32); 198 PS_ARRAY_ADD_SCALAR(job->args, MIN_KRON_RADIUS, PS_TYPE_F32); 188 199 189 200 PS_ARRAY_ADD_SCALAR(job->args, maskVal, PS_TYPE_IMAGE_MASK); … … 215 226 } else { 216 227 psScalar *scalar = NULL; 217 scalar = job->args->data[ 7];228 scalar = job->args->data[8]; 218 229 Nmoments += scalar->data.S32; 219 scalar = job->args->data[ 8];230 scalar = job->args->data[9]; 220 231 Nfail += scalar->data.S32; 221 scalar = job->args->data[ 9];232 scalar = job->args->data[10]; 222 233 Nfaint += scalar->data.S32; 223 234 } … … 231 242 232 243 psphotVisualShowMoments (sources); 244 245 // clear the mark bits 246 // psImageMaskPixels (readout->mask, "AND", PS_NOT_IMAGE_MASK(markVal)); 233 247 234 248 if (detections->allSources) { … … 373 387 float RADIUS = PS_SCALAR_VALUE(job->args->data[3],F32); 374 388 float SIGMA = PS_SCALAR_VALUE(job->args->data[4],F32); 375 376 psImageMaskType maskVal = PS_SCALAR_VALUE(job->args->data[5],PS_TYPE_IMAGE_MASK_DATA); 377 psImageMaskType markVal = PS_SCALAR_VALUE(job->args->data[6],PS_TYPE_IMAGE_MASK_DATA); 389 float MIN_KRON_RADIUS = PS_SCALAR_VALUE(job->args->data[5],F32); 390 391 psImageMaskType maskVal = PS_SCALAR_VALUE(job->args->data[6],PS_TYPE_IMAGE_MASK_DATA); 392 psImageMaskType markVal = PS_SCALAR_VALUE(job->args->data[7],PS_TYPE_IMAGE_MASK_DATA); 378 393 379 394 // if no valid pixels, massive swing or very large Mrf, likely saturated source, … … 431 446 if (!(source->peak->type == PM_PEAK_SUSPECT_SATURATION)) { 432 447 // measure basic source moments (no S/N clipping on input pixels) 433 status = pmSourceMoments (source, RADIUS, SIGMA, 0.0, maskVal);448 status = pmSourceMoments (source, RADIUS, SIGMA, 0.0, MIN_KRON_RADIUS, maskVal); 434 449 } else { 435 450 // For saturated stars, choose a much larger box NOTE this is slightly sleazy, but … … 447 462 448 463 psTrace ("psphot", 4, "retrying moments for %d, %d\n", source->peak->x, source->peak->y); 449 status = pmSourceMoments (source, BIG_RADIUS, BIG_SIGMA, 0.0, maskVal);464 status = pmSourceMoments (source, BIG_RADIUS, BIG_SIGMA, 0.0, MIN_KRON_RADIUS, maskVal); 450 465 source->mode |= PM_SOURCE_MODE_BIG_RADIUS; 451 466 } … … 456 471 continue; 457 472 } 473 474 // XXX test of masking neighbors when measureing moments (does this fail?) 475 // psEllipseMoments moments = {source->moments->Mxx, source->moments->Myy, source->moments->Mxy}; 476 // psEllipseAxes axes = psEllipseMomentsToAxes(moments, 20.0); 477 // psImageMaskCircle (source->maskView, source->peak->x, source->peak->y, 3.0*axes.major, "OR", markVal); 478 458 479 Nmoments ++; 459 480 … … 492 513 float sigma[NSIGMA] = {1.0, 2.0, 3.0, 4.5, 6.0, 9.0, 12.0, 18.0}; 493 514 float Sout[NSIGMA]; 515 float Rmin[NSIGMA]; 494 516 int Nout[NSIGMA]; // number of stars found in clump : use this to control the number of regions measured by psphotRoughClass 495 517 … … 513 535 514 536 // measure basic source moments (no S/N clipping on input pixels) 515 status = pmSourceMoments (source, 4*sigma[i], sigma[i], 0.0, maskVal);537 status = pmSourceMoments (source, 4*sigma[i], sigma[i], 0.0, 0.0, maskVal); 516 538 } 517 539 … … 524 546 pmPSFClump psfClump = pmSourcePSFClump (NULL, NULL, sources, PSF_SN_LIM, PSF_CLUMP_GRID_SCALE, MOMENTS_SX_MAX, MOMENTS_SY_MAX, MOMENTS_AR_MAX); 525 547 psLogMsg ("psphot", 3, "radius %.1f, nStars: %d of %d in clump, nSigma: %5.2f, X, Y: %f, %f (%f, %f)\n", sigma[i], psfClump.nStars, psfClump.nTotal, psfClump.nSigma, psfClump.X, psfClump.Y, sqrt(psfClump.X) / sigma[i], sqrt(psfClump.Y) / sigma[i]); 548 549 Rmin[i] = pmSourceMinKronRadius(sources, PSF_SN_LIM); 526 550 527 551 #if 0 … … 549 573 // we are looking for sigma for which Sout = 0.65 (or some other value) 550 574 int Nstars = 0; 575 float minKronRadius = NAN; 551 576 float Sigma = NAN; 552 577 float minS = Sout[0]; … … 565 590 Sigma = sigma[i] + (0.65 - Sout[i])*(sigma[i+1] - sigma[i])/(Sout[i+1] - Sout[i]); 566 591 Nstars = 0.5*(Nout[i] + Nout[i+1]); 592 minKronRadius = Rmin[i] + (0.65 - Sout[i])*(Rmin[i+1] - Rmin[i])/(Sout[i+1] - Sout[i]); 567 593 } 568 594 psAssert (isfinite(Sigma), "did we miss a case?"); … … 575 601 psMetadataAddF32(analysis, PS_LIST_TAIL, "PSF_MOMENTS_RADIUS", PS_META_REPLACE, "moments limit", 4.0*Sigma); 576 602 psMetadataAddF32(analysis, PS_LIST_TAIL, "PSF_CLUMP_NSTARS", PS_META_REPLACE, "number of stars in clump", Nstars); 577 578 psLogMsg ("psphot", 3, "using window function with sigma = %f\n", Sigma); 603 psMetadataAddF32(analysis, PS_LIST_TAIL, "MOMENTS_MIN_KRON", PS_META_REPLACE, "minimum Kron Radius", minKronRadius); 604 605 psLogMsg ("psphot", 3, "using window function with sigma = %f (Min Kron Radius = %f, Nstars = %d)\n", Sigma, minKronRadius, Nstars); 579 606 return true; 580 607 }
Note:
See TracChangeset
for help on using the changeset viewer.
