IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Nov 15, 2005, 10:09:03 AM (20 years ago)
Author:
gusciora
Message:

SubtractBias was recoded. Significant mods to removeBadPixels.
Additional mods to other files.

File:
1 edited

Legend:

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

    r5435 r5516  
    1818 *  @author Ross Harman, MHPCC
    1919 *
    20  *  @version $Revision: 1.2 $ $Name: not supported by cvs2svn $
    21  *  @date $Date: 2005-10-20 23:06:24 $
     20 *  @version $Revision: 1.3 $ $Name: not supported by cvs2svn $
     21 *  @date $Date: 2005-11-15 20:09:03 $
    2222 *
    2323 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    3636#include "pmMaskBadPixels.h"
    3737#include "pmFlatFieldErrors.h"
     38#include "pmSubtractBias.h"
    3839
    3940
     
    4243    const pmReadout *flat)
    4344{
     45    // XXX: Use the proper image and readout asserts.
     46    PS_ASSERT_PTR_NON_NULL(in, true);
     47    PS_ASSERT_PTR_NON_NULL(in->image, false);
     48    PS_ASSERT_PTR_NON_NULL(in->mask, false);
     49    PS_ASSERT_PTR_NON_NULL(flat, false);
     50    PS_ASSERT_PTR_NON_NULL(flat->image, false);
     51    if (in == NULL)
     52        printf("XXX: NULL\n");
     53
    4454    // XXX: Not sure if this is correct.  Must consult with IfA.
    4555    PS_ASSERT_PTR_NON_NULL(in->mask, false);
     56
     57    PS_WARN_PTR_NON_NULL(in->parent);
     58    if (in->parent != NULL) {
     59        PS_WARN_PTR_NON_NULL(in->parent->concepts);
     60    }
    4661    int i = 0;
    4762    int j = 0;
     
    5166    psElemType flatType;
    5267    psElemType maskType;
    53     psImage *inImage = NULL;
    5468    psImage *inMask = NULL;
    5569    psImage *flatImage = NULL;
    5670
    57 
    58     // Check for nulls
    59     if (in == NULL) {
    60         return true;       // Readout might have data in it
    61     } else if(flat==NULL) {
    62         psError( PS_ERR_BAD_PARAMETER_NULL, true,
    63                  PS_ERRORTEXT_pmFlatField_NULL_FLAT_READOUT);
    64         return false;
    65     }
    66 
    67     inImage = in->image;
     71    //
     72    // Determine trimmed image from metadata.
     73    //
     74    psImage *trimmedImg = p_psDetermineTrimmedImage(in);
    6875    flatImage = flat->image;
    69     if (inImage == NULL) {
    70         psError( PS_ERR_BAD_PARAMETER_NULL, true,
    71                  PS_ERRORTEXT_pmFlatField_NULL_INPUT_IMAGE);
    72         return false;
    73     } else if(flatImage == NULL) {
    74         psError( PS_ERR_BAD_PARAMETER_NULL, true,
    75                  PS_ERRORTEXT_pmFlatField_NULL_FLAT_IMAGE);
    76         return false;
    77     }
    7876    inMask = in->mask;
    7977
    8078    // Check input image and its mask are not larger than flat image
    8179
    82     if (inImage->numRows>flatImage->numRows || inImage->numCols>flatImage->numCols) {
     80    if (trimmedImg == NULL)
     81        printf("XXX: 00\n");
     82    if (flatImage == NULL)
     83        printf("XXX 01\n");
     84
     85    if (trimmedImg->numRows>flatImage->numRows || trimmedImg->numCols>flatImage->numCols) {
    8386        psError( PS_ERR_BAD_PARAMETER_SIZE, true,
    8487                 PS_ERRORTEXT_pmFlatField_SIZE_INPUT_IMAGE,
    85                  inImage->numRows, inImage->numCols, flatImage->numRows, flatImage->numCols);
     88                 trimmedImg->numRows, trimmedImg->numCols, flatImage->numRows, flatImage->numCols);
    8689        return false;
    8790    }
     
    9497
    9598    // Determine total offset based on image offset with chip offset
    96     totOffCol = inImage->col0 + in->col0;
    97     totOffRow = inImage->row0 + in->row0;
     99    totOffCol = trimmedImg->col0 + in->col0;
     100    totOffRow = trimmedImg->row0 + in->row0;
    98101
    99102    // Check that offsets are within image limits
     
    103106                 totOffRow, totOffCol, flatImage->numRows, flatImage->numCols);
    104107        return false;
    105     } else if(totOffRow>=inImage->numRows || totOffCol>=inImage->numCols) {
     108    } else if(totOffRow>=trimmedImg->numRows || totOffCol>=trimmedImg->numCols) {
    106109        psError( PS_ERR_BAD_PARAMETER_SIZE, true,
    107110                 PS_ERRORTEXT_pmFlatField_OFFSET_INPUT_IMAGE,
    108                  totOffRow, totOffCol, inImage->numRows, inImage->numCols);
     111                 totOffRow, totOffCol, trimmedImg->numRows, trimmedImg->numCols);
    109112        return false;
    110113    } else if(totOffRow>=inMask->numRows || totOffCol>=inMask->numCols) {
     
    116119
    117120    // Check for incorrect types
    118     inType = inImage->type.type;
     121    inType = trimmedImg->type.type;
    119122    flatType = flatImage->type.type;
    120123    maskType = inMask->type.type;
     
    145148case PS_TYPE_##TYPE:                                                                                         \
    146149    /* Per Eugene's request, use two sets of loops: first to fill mask, second to avoid div with bad pix */  \
    147     for(j = totOffRow; j < inImage->numRows; j++) {                                                          \
    148         for(i = totOffCol; i < inImage->numCols; i++) {                                                      \
     150    for(j = totOffRow; j < trimmedImg->numRows; j++) {                                                          \
     151        for(i = totOffCol; i < trimmedImg->numCols; i++) {                                                      \
    149152            if(flatImage->data.TYPE[j][i] <= 0.0) {                                                          \
    150153                /* Negative or zero flat pixels shall be masked in input image as  PM_MASK_FLAT */           \
     
    154157        }                                                                                                    \
    155158    }                                                                                                        \
    156     for(j = totOffRow; j < inImage->numRows; j++) {                                                          \
    157         for(i = totOffCol; i < inImage->numCols; i++) {                                                      \
     159    for(j = totOffRow; j < trimmedImg->numRows; j++) {                                                          \
     160        for(i = totOffCol; i < trimmedImg->numCols; i++) {                                                      \
    158161            if(!inMask->data.PS_TYPE_MASK_DATA[j][i]) {                                                      \
    159162                /* Module shall divide the input image by the flat-fielded image */                          \
    160                 inImage->data.TYPE[j][i] /= flatImage->data.TYPE[j][i];                                      \
     163                trimmedImg->data.TYPE[j][i] /= flatImage->data.TYPE[j][i];                                      \
    161164            }                                                                                                \
    162165        }                                                                                                    \
Note: See TracChangeset for help on using the changeset viewer.