Changeset 41637 for branches/eam_branches/relphot.20210521/src/StarOps.c
- Timestamp:
- Jun 4, 2021, 10:46:36 AM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/relphot.20210521/src/StarOps.c
r41625 r41637 576 576 } 577 577 578 static float MinChiSqLim = NAN; 579 static float MaxChiSqLim = NAN; 580 static float MinScatterLim = NAN; 581 static float MaxScatterLim = NAN; 582 578 583 void clean_stars (Catalog *catalog, int Ncatalog) { 579 584 580 int i, j, Ndel, Nave, Ntot, mark, Ns, Nscat, Nchi, Nnan; 581 float dM; 582 double MaxScatter, MaxChisq; 583 double *xlist, *slist, *dlist; 585 int Ndel, Nave, Ntot, Nscat, Nchi, Nnan; 586 double *xlist, *slist; 587 588 if (isnan (MaxChiSqLim)) MaxChiSqLim = STAR_CHISQ; 589 if (isnan (MaxScatterLim)) MaxScatterLim = STAR_SCATTER; 584 590 585 591 StatType stats; … … 589 595 590 596 /* find Mchisq median -> ChiSq lim must be > median */ 591 for (i = Ntot = 0; i < Ncatalog; i++) {597 for (int i = Ntot = 0; i < Ncatalog; i++) { 592 598 Ntot += catalog[i].Naverage; 593 599 } 594 600 ALLOCATE (xlist, double, Ntot); 595 601 ALLOCATE (slist, double, Ntot); 596 ALLOCATE (dlist, double, Ntot);597 602 598 603 int Nsecfilt = GetPhotcodeNsecfilt (); 599 604 600 605 // eliminate bad stars using the stats for a single secfilt at a time 601 for ( Ns = 0; Ns < Nphotcodes; Ns ++) {606 for (int Ns = 0; Ns < Nphotcodes; Ns ++) { 602 607 603 608 int thisCode = photcodes[Ns][0].code; 604 609 int Nsec = GetPhotcodeNsec(thisCode); 605 610 606 for (i = Ntot = 0; i < Ncatalog; i++) {607 for ( j = 0; j < catalog[i].Naverage; j++) {611 for (int i = Ntot = 0; i < Ncatalog; i++) { 612 for (int j = 0; j < catalog[i].Naverage; j++) { 608 613 if (catalog[i].secfilt[Nsecfilt*j+Nsec].flags & STAR_BAD) continue; 609 614 float Mchisq = catalog[i].secfilt[Nsecfilt*j+Nsec].Mchisq; … … 611 616 xlist[Ntot] = Mchisq; 612 617 slist[Ntot] = catalog[i].secfilt[Nsecfilt*j+Nsec].dMpsfChp; 613 dlist[Ntot] = 1;614 618 Ntot ++; 615 619 } 616 620 } 617 621 618 // XXX the limits for MaxChisq and MaxScatter should be 619 // user-defined. This uses 620 liststats (xlist, dlist, NULL, Ntot, &stats); 621 float ChiSqUpper90 = stats.Upper90; 622 MaxChisq = MAX (STAR_CHISQ, ChiSqUpper90); 623 624 liststats (slist, dlist, NULL, Ntot, &stats); 622 liststats (xlist, NULL, NULL, Ntot, &stats); 623 float ChiSqUpper90 = stats.Upper90; 624 if (isnan (MinChiSqLim)) MinChiSqLim = 2.0*stats.median; // chi-square cut cannot fall below this value (even if this is > MaxChiSqLim) 625 float ChiSqLimit = MAX(MinChiSqLim, MIN(MaxChiSqLim, ChiSqUpper90)); // chi-square cut should be between MinChiSqLim and MaxChiSqLim 626 627 liststats (slist, NULL, NULL, Ntot, &stats); 625 628 float ScatterUpper90 = stats.Upper90; 626 MaxScatter = MAX (STAR_SCATTER, ScatterUpper90); 627 fprintf (stderr, "Max Scatter: %f, Max Chisq: %f\n", MaxScatter, MaxChisq); 629 if (isnan (MinScatterLim)) MinScatterLim = 2.0*stats.median; // scatter cut cannto fall below this value (even if this is > MaxScatterLim) 630 float ScatterLimit = MAX(MinScatterLim, MIN(MaxScatterLim, ScatterUpper90)); 631 632 fprintf (stderr, "STARS: ChiSqLimit: %f, ScatterLimit: %f | ChiSquare Upper 90: %f, Scatter Upper 90: %f\n", ChiSqLimit, ScatterLimit, ChiSqUpper90, ScatterUpper90); 628 633 629 634 Ndel = Nave = Nscat = Nnan = Nchi = 0; 630 for (i = 0; i < Ncatalog; i++) {631 for ( j = 0; j < catalog[i].Naverage; j++) {632 dM = catalog[i].secfilt[Nsecfilt*j+Nsec].dMpsfChp;635 for (int i = 0; i < Ncatalog; i++) { 636 for (int j = 0; j < catalog[i].Naverage; j++) { 637 float dM = catalog[i].secfilt[Nsecfilt*j+Nsec].dMpsfChp; 633 638 float Mchisq = catalog[i].secfilt[Nsecfilt*j+Nsec].Mchisq; 634 mark = (dM > MaxScatter) || (isnan(Mchisq)) || (Mchisq > MaxChisq);639 int mark = (dM > ScatterLimit) || (isnan(Mchisq)) || (Mchisq > ChiSqLimit); 635 640 if (mark) { 636 641 catalog[i].secfilt[Nsecfilt*j+Nsec].flags |= ID_SECF_STAR_POOR; 637 642 Ndel ++; 638 if (dM > MaxScatter) { Nscat ++; }639 if (isnan(Mchisq)) { Nnan ++; }640 if (Mchisq > MaxChisq) { Nchi ++; }643 if (dM > ScatterLimit) { Nscat ++; } 644 if (isnan(Mchisq)) { Nnan ++; } 645 if (Mchisq > ChiSqLimit) { Nchi ++; } 641 646 } else { 642 647 catalog[i].secfilt[Nsecfilt*j+Nsec].flags &= ~ID_SECF_STAR_POOR; … … 645 650 } 646 651 } 647 fprintf (stderr, "%d stars marked variable (%d scat, %d nan, %d chi), %d total\n", Ndel, Nscat, Nnan, Nchi, Nave);652 fprintf (stderr, "%d of %d stars marked variable (%d scat, %d nan, %d chi)\n", Ndel, Nave, Nscat, Nnan, Nchi); 648 653 } 649 654 free (xlist); 650 655 free (slist); 651 free (dlist);652 656 } 653 657
Note:
See TracChangeset
for help on using the changeset viewer.
