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

Location:
trunk/psModules/src/detrend
Files:
2 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
  • trunk/psModules/src/detrend/pmSubtractSky.c

    r7769 r8004  
    66 *  @author GLG, MHPCC
    77 *
    8  *  @version $Revision: 1.3 $ $Name: not supported by cvs2svn $
    9  *  @date $Date: 2006-06-30 23:59:49 $
     8 *  @version $Revision: 1.4 $ $Name: not supported by cvs2svn $
     9 *  @date $Date: 2006-07-28 03:21:19 $
    1010 *
    1111 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    9090requirements change and we might need a custom reBin function.
    9191 *****************************************************************************/
    92 /*
     92#if 0
    9393static psImage *binImage(psImage *origImage,
    9494                         int binFactor,
     
    9696{
    9797    psTrace("SubtractSky.binImage", 4, "Calling binImage(%d)\n", binFactor);
    98  
     98
    9999    if (binFactor <= 0) {
    100100        psLogMsg(__func__, PS_LOG_WARN,
     
    105105        return(origImage);
    106106    }
    107  
     107
    108108    psVector *binVector = psVectorAlloc(binFactor * binFactor, PS_TYPE_F32);
    109109    psVector *binMask = psVectorAlloc(binFactor * binFactor, PS_TYPE_U8);
    110110    psStats *myStats = psStatsAlloc(statOptions);
    111  
     111
    112112    for (psS32 row = 0; row < origImage->numRows ; row+=binFactor) {
    113113        for (psS32 col = 0; col < origImage->numCols ; col+=binFactor) {
     
    134134            psF64 statValue;
    135135            psBool rc = p_psGetStatValue(rc1, &statValue);
    136  
     136
    137137            if (rc == true) {
    138138                origImage->data.F32[row][col] = (psF32) statValue;
     
    147147    psFree(binMask);
    148148    psFree(myStats);
    149  
     149
    150150    psTrace("SubtractSky.binImage", 4, "Exiting binImage(%d)\n", binFactor);
    151151    return(origImage);
    152152}
    153 */
     153#endif
    154154
    155155/******************************************************************************
     
    601601    } else {
    602602        // Determine the mean and standard deviation of the binned image.
    603         psF64 binnedMean;
    604         psF64 binnedStdev;
    605         psStats *myStats = psStatsAlloc(PS_STAT_SAMPLE_MEAN);
    606         psStats *rc =  psImageStats(myStats, binnedImage, NULL, 0);
    607         if (rc == NULL) {
    608             psError(PS_ERR_UNKNOWN, false, "psImageStats(): could not perform requested statistical operation.  Returning in image.\n");
    609             return(in);
    610         }
    611         if (false == p_psGetStatValue(rc, &binnedMean)) {
    612             psError(PS_ERR_UNKNOWN, false, "p_psGetStatValue(): could not determine requested statistical operation.  Returning in image.\n");
    613             return(in);
    614         }
    615         psTrace(".psModule.pmSubtractSky", 6,
    616                 "binned Mean is %f\n", binnedMean);
    617 
    618         myStats->options = PS_STAT_SAMPLE_STDEV;
    619         rc =  psImageStats(myStats, binnedImage, NULL, 0);
    620         if (rc == NULL) {
    621             psError(PS_ERR_UNKNOWN, false, "psImageStats(): could not perform requested statistical operation.  Returning in image.\n");
    622             return(in);
    623         }
    624         if (false == p_psGetStatValue(myStats, &binnedStdev)) {
    625             psError(PS_ERR_UNKNOWN, false, "p_psGetStatValue(): could not determine requested statistical operation.  Returning in image.\n");
    626             return(in);
    627         }
     603        psStats *myStats = psStatsAlloc(PS_STAT_SAMPLE_MEAN | PS_STAT_SAMPLE_STDEV);
     604        if (!psImageStats(myStats, binnedImage, NULL, 0)) {
     605            psError(PS_ERR_UNEXPECTED_NULL, false, "Couldn't get statistics for image.\n");
     606            return NULL;
     607        }
     608        psF64 binnedMean = myStats->sampleMean;
     609        psF64 binnedStdev = myStats->sampleStdev;
    628610        psFree(myStats);
    629611        psTrace(".psModule.pmSubtractSky", 6,
Note: See TracChangeset for help on using the changeset viewer.