IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Oct 25, 2016, 6:13:10 PM (10 years ago)
Author:
watersc1
Message:

Fix scaling when using QUARTILE stddev statistics. In that case, use a Gaussian estimate based on the interquartile distance.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/czw_branch/20160809/psLib/src/fits/psFitsScale.c

    r39509 r39787  
    189189                // Desperate retry
    190190                mean = psStatsGetValue(stats, DESPERATE_MEAN_STAT);
    191                 stdev = psStatsGetValue(stats, DESPERATE_STDEV_STAT);
     191                if ((STDEV_STAT == PS_STAT_SAMPLE_QUARTILE)||(STDEV_STAT == PS_STAT_ROBUST_QUARTILE)) {
     192                  stdev = 0.7415 * (stats->sampleUQ - stats->sampleLQ);
     193                }
     194                else {
     195                  stdev = psStatsGetValue(stats, DESPERATE_STDEV_STAT);
     196                }
    192197            }
    193198        } else {
    194199            // Retry with all available pixels
    195200            mean = psStatsGetValue(stats, MEAN_STAT);
    196             stdev = psStatsGetValue(stats, STDEV_STAT);
     201            if ((STDEV_STAT == PS_STAT_SAMPLE_QUARTILE)||(STDEV_STAT == PS_STAT_ROBUST_QUARTILE)) {
     202              stdev = 0.7415 * (stats->sampleUQ - stats->sampleLQ);
     203            }
     204            else {
     205              stdev = psStatsGetValue(stats, STDEV_STAT);
     206            }
    197207        }
    198208    } else {
    199209        // First attempt
    200210        mean = psStatsGetValue(stats, MEAN_STAT);
    201         stdev = psStatsGetValue(stats, STDEV_STAT);
     211        if ((STDEV_STAT == PS_STAT_SAMPLE_QUARTILE)||(STDEV_STAT == PS_STAT_ROBUST_QUARTILE)) {
     212          stdev = 0.7415 * (stats->sampleUQ - stats->sampleLQ);
     213        }
     214        else {
     215          stdev = psStatsGetValue(stats, STDEV_STAT);
     216        }
    202217    }
    203218    psFree(rng);
     
    247262    *bzero = imageVal - *bscale * diskVal;
    248263
     264    fprintf(stderr,"CZW: %g %g -> %g %g @ %ld %g %ld\n",mean,stdev,*bzero,*bscale,range,imageVal,diskVal);
     265   
    249266    psTrace("psLib.fits", 5, "Image %lf corresponds to disk %ld --> BZERO: %lf", imageVal, diskVal, *bzero);
    250267
     
    554571                // Desperate retry
    555572                mean = psStatsGetValue(stats, DESPERATE_MEAN_STAT);
    556                 stdev = psStatsGetValue(stats, DESPERATE_STDEV_STAT);
    557             }
     573                if ((DESPERATE_STDEV_STAT == PS_STAT_SAMPLE_QUARTILE)||(DESPERATE_STDEV_STAT == PS_STAT_ROBUST_QUARTILE)) {
     574                  stdev = 0.7415 * (stats->sampleUQ - stats->sampleLQ); // Calculate a "sigma" based on the interquartile distance.
     575                }
     576                else {
     577                 
     578                  stdev = psStatsGetValue(stats, DESPERATE_STDEV_STAT);
     579                }
     580            }   
    558581        } else {
    559582            // Retry with all available pixels
    560583            mean = psStatsGetValue(stats, MEAN_STAT);
    561             stdev = psStatsGetValue(stats, STDEV_STAT);
     584            if ((STDEV_STAT == PS_STAT_SAMPLE_QUARTILE)||(STDEV_STAT == PS_STAT_ROBUST_QUARTILE)) {
     585              stdev = 0.7415 * (stats->sampleUQ - stats->sampleLQ); // Calculate a "sigma" based on the interquartile distance.
     586            }
     587            else {
     588              stdev = psStatsGetValue(stats, STDEV_STAT);
     589            }
    562590        }
    563591    } else {
    564592        // First attempt
    565593        mean = psStatsGetValue(stats, MEAN_STAT);
    566         stdev = psStatsGetValue(stats, STDEV_STAT);
     594        if ((STDEV_STAT == PS_STAT_SAMPLE_QUARTILE)||(STDEV_STAT == PS_STAT_ROBUST_QUARTILE)) {
     595          stdev = 0.7415 * (stats->sampleUQ - stats->sampleLQ); // Calculate a "sigma" based on the interquartile distance.
     596        }
     597        else {
     598          stdev = psStatsGetValue(stats, STDEV_STAT);
     599        }
    567600    }
    568601    psFree(rng);
     
    723756                // Desperate retry
    724757                mean = psStatsGetValue(stats, DESPERATE_MEAN_STAT);
    725                 stdev = psStatsGetValue(stats, DESPERATE_STDEV_STAT);
     758                if ((DESPERATE_STDEV_STAT == PS_STAT_SAMPLE_QUARTILE)||(DESPERATE_STDEV_STAT == PS_STAT_ROBUST_QUARTILE)) {
     759                  stdev = 0.7415 * (stats->sampleUQ - stats->sampleLQ); // Calculate a "sigma" based on the interquartile distance.
     760                }
     761                else {
     762                  stdev = psStatsGetValue(stats, DESPERATE_STDEV_STAT);
     763                }
    726764            }
    727765        } else {
    728766            // Retry with all available pixels
    729767            mean = psStatsGetValue(stats, MEAN_STAT);
    730             stdev = psStatsGetValue(stats, STDEV_STAT);
     768            if ((STDEV_STAT == PS_STAT_SAMPLE_QUARTILE)||(STDEV_STAT == PS_STAT_ROBUST_QUARTILE)) {
     769              stdev = 0.7415 * (stats->sampleUQ - stats->sampleLQ); // Calculate a "sigma" based on the interquartile distance.
     770            }
     771            else {
     772              stdev = psStatsGetValue(stats, STDEV_STAT);
     773            }
    731774        }
    732775    } else {
    733776        // First attempt
    734777        mean = psStatsGetValue(stats, MEAN_STAT);
    735         stdev = psStatsGetValue(stats, STDEV_STAT);
     778        if ((STDEV_STAT == PS_STAT_SAMPLE_QUARTILE)||(STDEV_STAT == PS_STAT_ROBUST_QUARTILE)) {
     779          stdev = 0.7415 * (stats->sampleUQ - stats->sampleLQ); // Calculate a "sigma" based on the interquartile distance.
     780        }
     781        else {
     782          stdev = psStatsGetValue(stats, STDEV_STAT);
     783        }
    736784    }
    737785    psFree(rng);
Note: See TracChangeset for help on using the changeset viewer.