Changeset 41359 for trunk/psphot/src/psphotSourceStats.c
- Timestamp:
- May 19, 2020, 2:53:41 PM (6 years ago)
- File:
-
- 1 edited
-
trunk/psphot/src/psphotSourceStats.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psphot/src/psphotSourceStats.c
r40489 r41359 560 560 } 561 561 562 #if ( 0)562 #if (1) 563 563 if (psTraceGetLevel("psphot.moments.save")) { 564 564 char name[64]; … … 604 604 #endif 605 605 606 Sout[i] = sqrt(0.5*(psfClump.X + psfClump.Y)) / sigma[i]; 606 // a clump with no stars is not a valid clump 607 607 Nout[i] = psfClump.nStars; 608 Sout[i] = (Nout[i] == 0) ? NAN : sqrt(0.5*(psfClump.X + psfClump.Y)) / sigma[i]; 608 609 } 609 610 610 611 // we are looking for sigma for which Sout = 0.65 (or some other value) 612 // EAM 2020.05.19 : this analysis fails if any of the measurements above have no valid stars 613 // A result with Nout[] = 0 should be skipped in the analysis 614 611 615 int Nstars = 0; 612 616 float minKronRadius = NAN; 613 617 float Sigma = NAN; 614 float minS = Sout[0]; 615 float maxS = Sout[0]; 618 619 float minS = NAN; 620 float maxS = NAN; 621 int maxN = -1; 622 int minN = -1; 616 623 for (int i = 0; i < nsigma; i++) { 617 minS = PS_MIN(Sout[i], minS); 618 maxS = PS_MAX(Sout[i], maxS); 619 } 620 if (minS > 0.65) Sigma = sigma[nsigma-1]; 621 if (maxS < 0.65) Sigma = sigma[0]; 622 624 if (!isfinite(Sout[i])) continue; 625 if (!isfinite(minS)) { 626 minS = Sout[i]; 627 maxS = Sout[i]; 628 minN = i; 629 maxN = i; 630 } 631 if (Sout[i] < minS) { 632 minS = Sout[i]; 633 minN = i; 634 } 635 if (Sout[i] > maxS) { 636 maxS = Sout[i]; 637 maxN = i; 638 } 639 } 640 if (!isfinite(minS)) { 641 psLogMsg ("psphot", 3, "failed to find a valid window function\n"); 642 return false; 643 } 644 645 // if all Sout values are above (or below) the threshold, saturate on the minimum (or maximum) valid sigma value 646 if (minS > 0.65) { Sigma = sigma[minN]; Nstars = Nout[minN]; minKronRadius = Rmin[minN]; } 647 if (maxS < 0.65) { Sigma = sigma[maxN]; Nstars = Nout[maxN]; minKronRadius = Rmin[maxN]; } 648 649 // this loop will be skipped if Sigma is set above 623 650 for (int i = 0; i < nsigma - 1 && isnan(Sigma); i++) { 624 651 if (!isfinite(Sout[i]) || !isfinite(Sout[i+1])) continue; … … 629 656 minKronRadius = Rmin[i] + (0.65 - Sout[i])*(Rmin[i+1] - Rmin[i])/(Sout[i+1] - Sout[i]); 630 657 } 631 psAssert (isfinite(Sigma), "did we miss a case?"); 658 // EAM: this test will fail if only a single entry above is valid 659 if (!isfinite(Sigma)) { 660 psLogMsg ("psphot", 3, "failed to find a valid window function (case 2)\n"); 661 return false; 662 } 632 663 if (!isfinite(minKronRadius)) { 633 664 minKronRadius = Sigma;
Note:
See TracChangeset
for help on using the changeset viewer.
