IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 10399


Ignore:
Timestamp:
Dec 1, 2006, 1:18:58 PM (20 years ago)
Author:
eugene
Message:

added SKY_HISTOGRAM_BINS and moved arguments to psImageBackground to a psStats argument

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psphot/src/psphotImageMedian.c

    r10394 r10399  
    99    pmFPAfile *file;
    1010    psRegion region;
    11     int MAX_SAMPLE_PIXELS;
    1211    static char *defaultStatsName = "FITTED_MEAN";
    1312
     
    2221    psMetadata *recipe  = psMetadataLookupPtr (&status, config->recipes, "PSPHOT");
    2322
    24     MAX_SAMPLE_PIXELS = psMetadataLookupF32 (&status, recipe, "IMSTATS_NPIX");
    25     if (!status) {
    26         MAX_SAMPLE_PIXELS = 1000;
    27     }
     23    // user supplied seed, if available
    2824    unsigned long seed = psMetadataLookupS32 (&status, recipe, "IMSTATS_SEED");
    2925    if (!status) {
     
    3834    }
    3935
    40     // supply the sky background statistic name:
     36    // supply the sky background statistics options
    4137    char *statsName = psMetadataLookupStr (&status, recipe, "SKY_STAT");
    4238    if (statsName == NULL) {
     
    4642    if (!(statsOption & (PS_STAT_SAMPLE_MEAN | PS_STAT_SAMPLE_MEDIAN | PS_STAT_ROBUST_MEDIAN | PS_STAT_ROBUST_QUARTILE | PS_STAT_CLIPPED_MEAN | PS_STAT_FITTED_MEAN))) {
    4743        statsOption = PS_STAT_FITTED_MEAN;
     44    }
     45    psStats *stats = psStatsAlloc (statsOption);
     46
     47    // set range for old-version of sky statistic
     48    if (statsOption & PS_STAT_ROBUST_QUARTILE) {
     49        stats->min = 0.25;
     50        stats->max = 0.75;
     51    }
     52
     53    // set user-option for number of pixels per region
     54    stats->nSubsample = psMetadataLookupF32 (&status, recipe, "IMSTATS_NPIX");
     55    if (!status) {
     56        stats->nSubsample = 1000;
     57    }
     58
     59    // optionally set the binsize
     60    stats->binsize = psMetadataLookupF32 (&status, recipe, "SKY_HISTOGRAM_BINS");
     61    if (status) {
     62        stats->options |= PS_STAT_USE_BINSIZE;
    4863    }
    4964
     
    116131
    117132            // XXX the value of the upper and lower cuts probably should be studied...
    118             psStats *stats = psImageBackground(subset, submask, 0xff, 0.25, 0.75, MAX_SAMPLE_PIXELS,
    119                                                statsOption, rng);
    120             if (stats != NULL) {
     133            if (psImageBackground(stats, subset, submask, 0xff, rng)) {
    121134                if (stats->options & PS_STAT_ROBUST_QUARTILE) {
    122135                    modelData[iy][ix] = stats->robustMedian;
     
    125138                }
    126139            } else {
    127                 psStatsOptions fallback_option = PS_STAT_ROBUST_MEDIAN;
    128                 stats = psImageBackground(subset, submask, 0xff, 0.25, 0.75, MAX_SAMPLE_PIXELS,
    129                                           fallback_option, rng);
    130                 if (stats == NULL) {
     140                psStatsOptions currentOptions = stats->options;
     141                stats->options |= PS_STAT_ROBUST_MEDIAN;
     142                if (!psImageBackground(stats, subset, submask, 0xff, rng)) {
    131143                    psAbort(PS_FILE_LINE, "Failed to estimate background using ROBUST_MEDIAN for "
    132144                            "(%dx%d, (row0,col0) = (%d,%d)",
     
    134146                }
    135147                modelData[iy][ix] = psStatsGetValue (stats, PS_STAT_ROBUST_MEDIAN);
     148                stats->options = currentOptions;
    136149            }
    137150            modelData[iy][ix] += SKY_BIAS;
    138151
    139             psFree (stats);
    140152            psFree (subset);
    141153            psFree (submask);
     
    150162
    151163    // measure background stats and save for later output
    152     psStats *stats = psStatsAlloc (PS_STAT_SAMPLE_MEAN | PS_STAT_SAMPLE_STDEV | PS_STAT_MIN | PS_STAT_MAX);
    153     stats = psImageStats (stats, model->image, NULL, 0);
    154     psMetadataAdd (recipe, PS_LIST_TAIL, "SKY_MEAN", PS_DATA_F32 | PS_META_REPLACE, "sky model mean",          stats->sampleMean);
    155     psMetadataAdd (recipe, PS_LIST_TAIL, "SKY_STDEV", PS_DATA_F32 | PS_META_REPLACE, "sky model stdev",        stats->sampleStdev);
    156     psMetadataAdd (recipe, PS_LIST_TAIL, "SKY_MAX",  PS_DATA_F32 | PS_META_REPLACE, "sky model maximum value", stats->max);
    157     psMetadataAdd (recipe, PS_LIST_TAIL, "SKY_MIN",  PS_DATA_F32 | PS_META_REPLACE, "sky model minimum value", stats->min);
     164    psStats *statsBck = psStatsAlloc (PS_STAT_SAMPLE_MEAN | PS_STAT_SAMPLE_STDEV | PS_STAT_MIN | PS_STAT_MAX);
     165    psImageStats (statsBck, model->image, NULL, 0);
     166    psMetadataAdd (recipe, PS_LIST_TAIL, "SKY_MEAN", PS_DATA_F32 | PS_META_REPLACE, "sky model mean",          statsBck->sampleMean);
     167    psMetadataAdd (recipe, PS_LIST_TAIL, "SKY_STDEV", PS_DATA_F32 | PS_META_REPLACE, "sky model stdev",        statsBck->sampleStdev);
     168    psMetadataAdd (recipe, PS_LIST_TAIL, "SKY_MAX",  PS_DATA_F32 | PS_META_REPLACE, "sky model maximum value", statsBck->max);
     169    psMetadataAdd (recipe, PS_LIST_TAIL, "SKY_MIN",  PS_DATA_F32 | PS_META_REPLACE, "sky model minimum value", statsBck->min);
    158170    psMetadataAdd (recipe, PS_LIST_TAIL, "SKY_NX",   PS_DATA_S32 | PS_META_REPLACE, "sky model size (x)",      nx);
    159171    psMetadataAdd (recipe, PS_LIST_TAIL, "SKY_NY",   PS_DATA_S32 | PS_META_REPLACE, "sky model size (y)",      ny);
    160     psLogMsg ("psphot", 3, "background sky : min %f mean %f max %f stdev %f", stats->min, stats->sampleMean, stats->max, stats->sampleStdev);
    161     psFree (stats);
     172    psLogMsg ("psphot", 3, "background sky : min %f mean %f max %f stdev %f", statsBck->min, statsBck->sampleMean, statsBck->max, statsBck->sampleStdev);
     173    psFree (statsBck);
    162174
    163175    // select background pixels, from output background file, or create
     
    216228
    217229    psLogMsg ("psphot", 3, "subtracted background model: %f sec\n", psTimerMark ("psphot"));
     230    psFree(stats);
    218231    psFree(rng);
    219232
Note: See TracChangeset for help on using the changeset viewer.