Changeset 10399
- Timestamp:
- Dec 1, 2006, 1:18:58 PM (20 years ago)
- File:
-
- 1 edited
-
trunk/psphot/src/psphotImageMedian.c (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psphot/src/psphotImageMedian.c
r10394 r10399 9 9 pmFPAfile *file; 10 10 psRegion region; 11 int MAX_SAMPLE_PIXELS;12 11 static char *defaultStatsName = "FITTED_MEAN"; 13 12 … … 22 21 psMetadata *recipe = psMetadataLookupPtr (&status, config->recipes, "PSPHOT"); 23 22 24 MAX_SAMPLE_PIXELS = psMetadataLookupF32 (&status, recipe, "IMSTATS_NPIX"); 25 if (!status) { 26 MAX_SAMPLE_PIXELS = 1000; 27 } 23 // user supplied seed, if available 28 24 unsigned long seed = psMetadataLookupS32 (&status, recipe, "IMSTATS_SEED"); 29 25 if (!status) { … … 38 34 } 39 35 40 // supply the sky background statistic name:36 // supply the sky background statistics options 41 37 char *statsName = psMetadataLookupStr (&status, recipe, "SKY_STAT"); 42 38 if (statsName == NULL) { … … 46 42 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))) { 47 43 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; 48 63 } 49 64 … … 116 131 117 132 // 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)) { 121 134 if (stats->options & PS_STAT_ROBUST_QUARTILE) { 122 135 modelData[iy][ix] = stats->robustMedian; … … 125 138 } 126 139 } 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)) { 131 143 psAbort(PS_FILE_LINE, "Failed to estimate background using ROBUST_MEDIAN for " 132 144 "(%dx%d, (row0,col0) = (%d,%d)", … … 134 146 } 135 147 modelData[iy][ix] = psStatsGetValue (stats, PS_STAT_ROBUST_MEDIAN); 148 stats->options = currentOptions; 136 149 } 137 150 modelData[iy][ix] += SKY_BIAS; 138 151 139 psFree (stats);140 152 psFree (subset); 141 153 psFree (submask); … … 150 162 151 163 // 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); 158 170 psMetadataAdd (recipe, PS_LIST_TAIL, "SKY_NX", PS_DATA_S32 | PS_META_REPLACE, "sky model size (x)", nx); 159 171 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); 162 174 163 175 // select background pixels, from output background file, or create … … 216 228 217 229 psLogMsg ("psphot", 3, "subtracted background model: %f sec\n", psTimerMark ("psphot")); 230 psFree(stats); 218 231 psFree(rng); 219 232
Note:
See TracChangeset
for help on using the changeset viewer.
