IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Jul 27, 2006, 5:21:19 PM (20 years ago)
Author:
Paul Price
Message:

Changing p_psGetStatsValue over to psStatsSingleOption and psStatsGetValue

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psModules/src/detrend/pmSubtractBias.c

    r7604 r8004  
    1111 *  @author GLG, MHPCC
    1212 *
    13  *  @version $Revision: 1.5 $ $Name: not supported by cvs2svn $
    14  *  @date $Date: 2006-06-21 03:21:16 $
     13 *  @version $Revision: 1.6 $ $Name: not supported by cvs2svn $
     14 *  @date $Date: 2006-07-28 03:21:19 $
    1515 *
    1616 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    165165}
    166166
    167 
    168 /******************************************************************************
    169 GenNewStatOptions(): this routine will take as input the options member of the
    170 stat data structure, determine if multiple options have been specified, issue
    171 a warning message if so, and return the highest priority option (according to
    172 the order of the if-statements in this code).  The higher priority options are
    173 listed lower in the code.
    174  *****************************************************************************/
    175 static psStatsOptions GenNewStatOptions(const psStats *stat)
    176 {
    177     assert(stat);
    178 
    179     psS32 numOptions = 0;
    180     psStatsOptions opt = 0;
    181 
    182     if (stat->options & PS_STAT_ROBUST_MEDIAN) {
    183         if (numOptions == 0) {
    184             opt = PS_STAT_ROBUST_MEDIAN;
    185         }
    186         numOptions++;
    187     }
    188 
    189     if (stat->options & PS_STAT_CLIPPED_MEAN) {
    190         if (numOptions == 0) {
    191             opt = PS_STAT_CLIPPED_MEAN;
    192         }
    193         numOptions++;
    194     }
    195 
    196     if (stat->options & PS_STAT_SAMPLE_MEDIAN) {
    197         if (numOptions == 0) {
    198             opt = PS_STAT_SAMPLE_MEDIAN;
    199         }
    200         numOptions++;
    201     }
    202 
    203     if (stat->options & PS_STAT_SAMPLE_MEAN) {
    204         numOptions++;
    205         opt = PS_STAT_SAMPLE_MEAN;
    206     }
    207 
    208 
    209     if (numOptions == 0) {
    210         psError(PS_ERR_UNKNOWN,true, "No statistics options have been specified.\n");
    211     }
    212     if (numOptions != 1) {
    213         psLogMsg(__func__, PS_LOG_WARN,
    214                  "WARNING: pmSubtractBias.c: GenNewStatOptions(): Too many statistics options "
    215                  "have been specified\n");
    216     }
    217     return opt;
    218 }
    219 
    220 
    221167// Produce an overscan vector from an array of pixels
    222168static psVector *overscanVector(pmOverscanOptions *overscanOpts, // Overscan options
     
    228174    assert(pixels);
    229175    assert(myStats);
     176
     177    psStatsOptions statistic = psStatsSingleOption(myStats->options); // Statistic to use
     178    assert(statistic != 0);
    230179
    231180    // Reduce the overscans
     
    241190            ordinate->data.F32[i] = 2.0*(float)i/(float)pixels->n - 1.0; // Scale to [-1,1]
    242191            psVectorStats(myStats, values, NULL, NULL, 0);
    243             double reducedVal = NAN; // Result of statistics
    244             if (! p_psGetStatValue(myStats, &reducedVal)) {
    245                 psError(PS_ERR_UNKNOWN, false, "p_psGetStatValue(): could not determine result "
    246                         "of statistics on row %d.\n", i);
    247                 return NULL;
    248             }
    249             reduced->data.F32[i] = reducedVal;
     192            reduced->data.F32[i] = psStatsGetValue(myStats, statistic);
    250193        } else if (overscanOpts->fitType == PM_FIT_NONE) {
    251194            psError(PS_ERR_UNKNOWN, true, "The overscan is not supplied for all points on the "
     
    344287        psList *overscans = in->bias; // List of the overscan images
    345288
    346         psStats *myStats = psStatsAlloc(PS_STAT_SAMPLE_MEAN); // A new psStats, to avoid clobbering original
    347         myStats->options = GenNewStatOptions(overscanOpts->stat);
     289        psStatsOptions statistic = psStatsSingleOption(overscanOpts->stat->options); // Statistic to use
     290        if (statistic == 0) {
     291            psError(PS_ERR_BAD_PARAMETER_VALUE, false, "Multiple or no statistics options set: %x\n",
     292                    overscanOpts->stat);
     293            return false;
     294        }
     295        psStats *stats = psStatsAlloc(statistic); // A new psStats, to avoid clobbering original
    348296
    349297        // Reduce all overscan pixels to a single value
     
    365313            psFree(iter);
    366314
    367             (void)psVectorStats(myStats, pixels, NULL, NULL, 0);
    368             double reduced = NAN;     // Result of statistics
    369             if (! p_psGetStatValue(myStats, &reduced)) {
    370                 psError(PS_ERR_UNKNOWN, false, "p_psGetStatValue(): could not determine result from requested statistical operation.  Returning input image.\n");
    371                 return false;
    372             }
     315            (void)psVectorStats(stats, pixels, NULL, NULL, 0);
     316            double reduced = psStatsGetValue(stats, statistic); // Result of statistics
    373317            (void)psBinaryOp(image, image, "-", psScalarAlloc((float)reduced, PS_TYPE_F32));
    374318        } else {
     
    408352
    409353                // Reduce the overscans
    410                 psVector *reduced = overscanVector(overscanOpts, pixels, myStats);
     354                psVector *reduced = overscanVector(overscanOpts, pixels, stats);
    411355                psFree(pixels);
    412356                if (! reduced) {
     
    452396
    453397                // Reduce the overscans
    454                 psVector *reduced = overscanVector(overscanOpts, pixels, myStats);
     398                psVector *reduced = overscanVector(overscanOpts, pixels, stats);
    455399                psFree(pixels);
    456400                if (! reduced) {
     
    467411            }
    468412        }
    469         psFree(myStats);
     413        psFree(stats);
    470414    } // End of overscan subtraction
    471415
Note: See TracChangeset for help on using the changeset viewer.