IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 10412


Ignore:
Timestamp:
Dec 1, 2006, 4:27:44 PM (20 years ago)
Author:
Paul Price
Message:

Adding overscan coefficients to HISTORY.

File:
1 edited

Legend:

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

    r10326 r10412  
    263263            psFree(pixels);
    264264            double reduced = psStatsGetValue(stats, statistic); // Result of statistics
     265
     266            psString comment = NULL;    // Comment to add
     267            psStringAppend(&comment, "Overscan value: %f", reduced);
     268            psMetadataAddStr(hdu->header, PS_LIST_TAIL, "HISTORY", PS_META_DUPLICATE_OK, comment, "");
     269            psFree(comment);
     270
    265271            (void)psBinaryOp(image, image, "-", psScalarAlloc((float)reduced, PS_TYPE_F32));
    266272        } else {
     
    272278                psArray *pixels = psArrayAlloc(image->numRows); // Array of vectors containing pixels
    273279                for (int i = 0; i < pixels->n; i++) {
    274                     psVector *values = psVectorAlloc(0, PS_TYPE_F32);
    275                     pixels->data[i] = values;
     280                    pixels->data[i] = psVectorAlloc(0, PS_TYPE_F32);
    276281                }
    277282
     
    283288                    for (int i = PS_MAX(0,diff); i < PS_MIN(image->numRows, overscan->numRows + diff); i++) {
    284289                        // i is row on overscan
    285                         // XXX Reimplement with memcpy
    286290                        psVector *values = pixels->data[i];
    287291                        int index = values->n; // Index in the vector
    288292                        values = psVectorRealloc(values, values->n + overscan->numCols);
    289                         for (int j = 0; j < overscan->numCols; j++) {
    290                             values->data.F32[index++] = overscan->data.F32[i][j];
    291                         }
    292293                        values->n += overscan->numCols;
     294                        memcpy(&values->data.F32[index], overscan->data.F32[i],
     295                               overscan->numCols * PSELEMTYPE_SIZEOF(PS_TYPE_F32));
     296                        index += overscan->numCols;
    293297                        pixels->data[i] = values; // Update the pointer in case it's moved
    294298                    }
     
    300304                psFree(pixels);
    301305                if (! reduced) {
     306                    psError(PS_ERR_UNEXPECTED_NULL, false, "Unable to generate overscan vector.\n");
    302307                    return false;
    303308                }
     
    326331                    for (int i = PS_MAX(0,diff); i < PS_MIN(image->numCols, overscan->numCols + diff); i++) {
    327332                        // i is column on overscan
    328                         // XXX Reimplement with memcpy
    329333                        psVector *values = pixels->data[i];
    330334                        int index = values->n; // Index in the vector
    331335                        values = psVectorRealloc(values, values->n + overscan->numRows);
    332336                        for (int j = 0; j < overscan->numRows; j++) {
    333                             values->data.F32[index++] = overscan->data.F32[i][j];
     337                            values->data.F32[index++] = overscan->data.F32[j][i];
    334338                        }
    335339                        values->n += overscan->numRows;
     
    343347                psFree(pixels);
    344348                if (! reduced) {
     349                    psError(PS_ERR_UNEXPECTED_NULL, false, "Unable to generate overscan vector.\n");
    345350                    return false;
    346351                }
     
    354359                psFree(reduced);
    355360            }
     361
     362            switch (overscanOpts->fitType) {
     363            case PM_FIT_POLY_ORD:
     364            case PM_FIT_POLY_CHEBY: {
     365                    psString comment = NULL;    // Comment to add
     366                    psStringAppend(&comment, "Overscan fit: ");
     367                    psPolynomial1D *poly = overscanOpts->poly; // The polynomial
     368                    for (int i = 0; i < poly->nX; i++) {
     369                        psStringAppend(&comment, "%.1f ", poly->coeff[i]);
     370                    }
     371                    psMetadataAddStr(hdu->header, PS_LIST_TAIL, "HISTORY", PS_META_DUPLICATE_OK, comment, "");
     372                    psFree(comment);
     373                    break;
     374                }
     375            case PM_FIT_SPLINE: {
     376                    psSpline1D *spline = overscanOpts->spline; // The spline
     377                    for (int i = 0; i < spline->n; i++) {
     378                        psStringAppend(&comment, "Overscan fit %d: ", i);
     379                        psPolynomial1D *poly = spline->spline[i]; // i-th polynomial
     380                        for (int j = 0; j < poly->nX; j++) {
     381                            psStringAppend(&comment, "%.1f ", poly->coeff[i]);
     382                        }
     383                        psMetadataAddStr(hdu->header, PS_LIST_TAIL, "HISTORY", PS_META_DUPLICATE_OK,
     384                                         comment, "");
     385                        psFree(comment);
     386                    }
     387                    break;
     388                }
     389            case PM_FIT_NONE:
     390            default:
     391                psAbort(__func__, "Should never get here!!!\n");
     392            }
     393
     394
    356395        }
    357396        psFree(stats);
     
    394433    psString timeString = psTimeToISO(time); // String with time
    395434    psFree(time);
    396     psStringPrepend(&timeString, "Bias processing completed at ");
     435    psStringPrepend(&timeString, "Overscan/bias/dark processing completed at ");
    397436    psMetadataAddStr(hdu->header, PS_LIST_TAIL, "HISTORY", PS_META_DUPLICATE_OK,
    398437                     timeString, "");
Note: See TracChangeset for help on using the changeset viewer.