IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 1849


Ignore:
Timestamp:
Sep 22, 2004, 9:58:57 AM (22 years ago)
Author:
harman
Message:

Added more tests

Location:
trunk/psModules/src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/psModules/src/Makefile.am

    r1833 r1849  
    22bin_PROGRAMS = tst_pmFlatField tst_pmMaskBadPixels
    33
    4 libpsmodule_a_SOURCES = pmFlatField.c pmMaskBadPixels.c
    5 libpsmodule_a_HEADERS = pmFlatField.h pmMaskBadPixels.h
     4libpsmodule_a_SOURCES = pmFlatField.c pmMaskBadPixels.c psTest.c
     5libpsmodule_a_HEADERS = pmFlatField.h pmMaskBadPixels.h psTest.h
    66libpsmodule_adir = .
    77
     
    1111tst_pmMaskBadPixels_SOURCES = tst_pmMaskBadPixels.c
    1212tst_pmMaskBadPixels_LDFLAGS = libpsmodule.a
    13 
  • trunk/psModules/src/pmFlatField.c

    r1832 r1849  
    1818 *  @author Ross Harman, MHPCC
    1919 *
    20  *  @version $Revision: 1.9 $ $Name: not supported by cvs2svn $
    21  *  @date $Date: 2004-09-20 20:36:46 $
     20 *  @version $Revision: 1.10 $ $Name: not supported by cvs2svn $
     21 *  @date $Date: 2004-09-22 19:58:57 $
    2222 *
    2323 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    3131#include<math.h>
    3232
     33#include "pslib.h"
    3334#include "pmFlatField.h"
    3435#include "pmMaskBadPixels.h"
     
    5051    // Check for nulls
    5152    if (in == NULL) {
    52         psError(__func__, " : Line %d - Null not allowed for input readout", __LINE__);
    5353        return false;
    5454    } else if(flat==NULL) {
     
    7171
    7272    // Check input image and its mask are not larger than flat image
    73     if(inImage->numRows > flatImage->numRows) {
    74         psError(__func__, " : Line %d - Input image exceeds mask image in number of rows. (%d vs %d).",
    75                 __LINE__, inImage->numRows, flatImage->numRows);
     73    if(inImage->numRows>flatImage->numRows || inImage->numCols>flatImage->numCols) {
     74        psError(__func__, " : Line %d - Input image size exceeds that of flat image: (%d, %d) vs (%d, %d)",
     75                __LINE__, inImage->numRows, inImage->numCols, flatImage->numRows, flatImage->numCols);
    7676        return false;
    77     } else if(inImage->numCols > flatImage->numCols) {
    78         psError(__func__, " : Line %d - Input image exceeds mask image in number of columns. (%d vs %d).",
    79                 __LINE__, inImage->numCols, flatImage->numCols);
    80         return false;
    81     } else if(inMask->numRows > flatImage->numRows) {
    82         psError(__func__, " : Line %d - Input image mask exceeds mask image in number of rows. (%d vs %d).",
    83                 __LINE__, inImage->numRows, flatImage->numRows);
    84         return false;
    85     } else if(inMask->numCols > flatImage->numCols) {
    86         psError(__func__, " : Line %d - Input image mask exceeds mask image in number of columns. (%d vs %d).",
    87                 __LINE__, inImage->numCols, flatImage->numCols);
     77    } else if(inMask->numRows>flatImage->numRows || inMask->numCols > flatImage->numCols) {
     78        psError(__func__, " : Line %d - Input image mask size exceeds that of flat image: (%d, %d) vs (%d, %d)",
     79                __LINE__, inMask->numRows, inMask->numCols, flatImage->numRows, flatImage->numCols);
    8880        return false;
    8981    }
     
    9486
    9587    // Check that offsets are within image limits
    96     if(totOffRow > flatImage->numRows-1) {
    97         psError(__func__, " : Line %d - Initial row offset exceeds that of mask image. (%d vs %d).",
    98                 __LINE__, totOffRow, flatImage->numRows);
     88    if(totOffRow>=flatImage->numRows || totOffCol>=flatImage->numCols) {
     89        psError(__func__, " : Line %d - Total offset >= flat image size: (%d, %d) vs (%d, %d)",
     90                __LINE__, totOffRow, totOffCol, flatImage->numRows, flatImage->numCols);
    9991        return false;
    100     } else if(totOffCol > flatImage->numCols-1) {
    101         psError(__func__, " : Line %d - Initial column offset exceeds that of mask image. (%d vs %d).",
    102                 __LINE__, totOffCol, flatImage->numCols);
     92    } else if(totOffRow>=inImage->numRows || totOffCol>=inImage->numCols) {
     93        psError(__func__, " : Line %d - Total offset >= input image: (%d, %d) vs (%d, %d)",
     94                __LINE__, totOffRow, totOffCol, inImage->numRows, inImage->numCols);
    10395        return false;
    104     } else if(totOffRow > inImage->numRows-1) {
    105         psError(__func__, " : Line %d - Initial row offset exceeds that of input image. (%d vs %d).",
    106                 __LINE__, totOffRow, inImage->numRows);
    107         return false;
    108     } else if(totOffCol > inImage->numCols-1) {
    109         psError(__func__, " : Line %d - Initial column offset exceeds that of input image. (%d vs %d).",
    110                 __LINE__, totOffCol, inImage->numCols);
    111         return false;
    112     } else if(totOffRow > inMask->numRows-1) {
    113         psError(__func__, " : Line %d - Initial row offset exceeds that of input image mask. (%d vs %d).",
    114                 __LINE__, totOffRow, inMask->numRows);
    115         return false;
    116     } else if(totOffCol > inMask->numCols-1) {
    117         psError(__func__, " : Line %d - Initial column offset exceeds that of input image mask. (%d vs %d).",
    118                 __LINE__, totOffCol, inMask->numCols);
     96    } else if(totOffRow>=inMask->numRows || totOffCol>=inMask->numCols) {
     97        psError(__func__, " : Line %d - Total offset >= input image mask: (%d, %d) vs (%d, %d)",
     98                __LINE__, totOffRow, totOffCol, inMask->numRows, inMask->numCols);
    11999        return false;
    120100    }
     
    136116        return false;
    137117    } else if(inType != flatType) {
    138         psError(__func__, " : Line %d - Input and flat image types differ. (%d vs %d)", __LINE__, inType,
     118        psError(__func__, " : Line %d - Input and flat image types differ: (%d vs %d)", __LINE__, inType,
    139119                flatType);
    140120        return false;
     
    149129            if(flatImage->data.TYPE[j][i] <= 0.0) {                                                          \
    150130                /* Negative or zero flat pixels shall be masked in input image as  PM_MASK_FLAT */           \
    151                 inMask->data.PS_TYPE_MASK_DATA[j][i] = PM_MASK_FLAT;                                         \
     131                inMask->data.PS_TYPE_MASK_DATA[j][i] |= PM_MASK_FLAT;                                        \
    152132            }                                                                                                \
    153133        }                                                                                                    \
     
    178158    }
    179159
    180     printf("");
    181160    return true;
    182161}
  • trunk/psModules/src/pmFlatField.h

    r1822 r1849  
    1818 *  @author Ross Harman, MHPCC
    1919 *
    20  *  @version $Revision: 1.5 $ $Name: not supported by cvs2svn $
    21  *  @date $Date: 2004-09-17 00:49:04 $
     20 *  @version $Revision: 1.6 $ $Name: not supported by cvs2svn $
     21 *  @date $Date: 2004-09-22 19:58:57 $
    2222 *
    2323 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
    2424 */
    25 
    26 #include "pslib.h"
    2725
    2826/** Execute flat field module.
  • trunk/psModules/src/tst_pmFlatField.c

    r1832 r1849  
    1 /** @file  filename.h
    2  *
    3  *  @brief Contains the definitions for ...
    4  *
    5  *  Detailed Description goes here.
     1/** @file tst_pmFlatField.c
     2 *
     3 *  @brief Contains the tests for pmFlatField.c:
    64 *
    75 *  @author Ross Harman, MHPCC
    86 *
    9  *  @version $Revision: 1.3 $ $Name: not supported by cvs2svn $
    10  *  @date $Date: 2004-09-20 20:36:46 $
     7 *  @version $Revision: 1.4 $ $Name: not supported by cvs2svn $
     8 *  @date $Date: 2004-09-22 19:58:57 $
    119 *
    1210 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
    1311 */
    1412
     13#include<stdlib.h>
     14
     15#include "psTest.h"
     16#include "pslib.h"
    1517#include "pmFlatField.h"
    1618
    1719
    18 #define PRINT_MATRIX(IMAGE,TYPE)                                                                             \
    19 for(int i=IMAGE->numRows-1; i>-1; i--) {                                                                 \
    20     for(int j=0; j<IMAGE->numCols; j++) {                                                                \
    21         if(PS_IS_PSELEMTYPE_COMPLEX(IMAGE->type.type)) {                                                 \
    22             printf("%f+%fi ", creal(IMAGE->data.TYPE[i][j]), cimag(IMAGE->data.TYPE[i][j]));             \
    23         } else if(PS_IS_PSELEMTYPE_INT(IMAGE->type.type)) {                                              \
    24             printf("%d ", (int)IMAGE->data.TYPE[i][j]);                                                  \
    25         } else {                                                                                         \
    26             printf("%f ", (double)IMAGE->data.TYPE[i][j]);                                               \
    27         }                                                                                                \
    28     }                                                                                                    \
    29     printf("\n");                                                                                        \
    30 }                                                                                                        \
     20#define PRINT_MATRIX(IMAGE,TYPE,STRING)                                                                      \
     21printf(STRING);                                                                                              \
     22printf("\n");                                                                                                \
     23for(int i=IMAGE->numRows-1; i>-1; i--) {                                                                     \
     24    for(int j=0; j<IMAGE->numCols; j++) {                                                                    \
     25        if(PS_IS_PSELEMTYPE_COMPLEX(IMAGE->type.type)) {                                                     \
     26            printf("%f+%fi ", creal(IMAGE->data.TYPE[i][j]), cimag(IMAGE->data.TYPE[i][j]));                 \
     27        } else if(PS_IS_PSELEMTYPE_INT(IMAGE->type.type)) {                                                  \
     28            printf("%d ", (int)IMAGE->data.TYPE[i][j]);                                                      \
     29        } else {                                                                                             \
     30            printf("%f ", (double)IMAGE->data.TYPE[i][j]);                                                   \
     31        }                                                                                                    \
     32    }                                                                                                        \
     33    printf("\n");                                                                                            \
     34}                                                                                                            \
    3135printf("\n");
    3236
    3337
    34 int main(void)
     38#define CREATE_AND_SET_IMAGE(NAME,TYPE,VALUE,NROWS,NCOLS)                                                    \
     39psImage *NAME = (psImage*)psImageAlloc(NCOLS,NROWS,PS_TYPE_##TYPE);                                          \
     40for(int i=0; i<NAME->numRows; i++) {                                                                         \
     41    for(int j=0; j<NAME->numCols; j++) {                                                                     \
     42        NAME->data.TYPE[i][j] = VALUE;                                                                       \
     43    }                                                                                                        \
     44}
     45
     46
     47static int testFlatField(void);
     48
     49
     50testDescription tests[] = {
     51                              {testFlatField, 884, "pmFlatField", 0, false},
     52                              {NULL}
     53                          };
     54
     55
     56int main(int argc, char* argv[])
    3557{
    36     psImage *inImage = psImageAlloc(3, 3, PS_TYPE_F64);
    37     psImage *flatImage1 = psImageAlloc(3, 3, PS_TYPE_F64);
    38     psImage *flatImage2 = psImageAlloc(3, 3, PS_TYPE_F64);
     58    return !runTestSuite(stderr, "Test Point Driver", tests, argc, argv);
     59}
     60
     61
     62int testFlatField( void )
     63{
     64    // Test A - Divide input image by flat image
     65    printPositiveTestHeader(stdout, "pmFlatField", "Test A - Divide input image by flat image");
     66    printf("Divide input image by flat image\n\n");
     67    CREATE_AND_SET_IMAGE(inImage,F64,6.0,3,3)
    3968    psReadout *inReadout  = psReadoutAlloc(0, 0, inImage);
     69    PRINT_MATRIX(inImage,F64,"Input image:");
     70    CREATE_AND_SET_IMAGE(flatImage1,F64,2.0,3,3)
    4071    psReadout *flatReadout  = psReadoutAlloc(0, 0, flatImage1);
    41 
    42     for(int r=0;r<3;r++) {
    43         for(int c=0;c<3;c++) {
    44             inImage->data.F64[r][c]=8.0;
    45             flatImage1->data.F64[r][c]=4.0;
    46             flatImage2->data.F64[r][c]=0.0;
    47         }
    48     }
    49 
    50     PRINT_MATRIX(inImage,F64);
    51     PRINT_MATRIX(flatImage1, F64);
    52     pmFlatField(inReadout, flatReadout);
    53     PRINT_MATRIX(inImage,F64);
    54 
    55     PRINT_MATRIX(inImage, F64);
    56     PRINT_MATRIX(flatImage2, F64);
     72    PRINT_MATRIX(flatImage1,F64,"Flat image:");
     73    pmFlatField(inReadout, flatReadout);
     74    PRINT_MATRIX(inImage,F64, "Resulting image:");
     75    printFooter(stdout, "pmFlatField", "Test A - Divide input image by flat image", true);
     76    printf("\n\n\n");
     77
     78
     79    // Test B - Mask flat image data
     80    printPositiveTestHeader(stdout, "pmFlatField", "Test B - Mask flat image data");
     81    PRINT_MATRIX(inImage, F64, "Input image:");
     82    CREATE_AND_SET_IMAGE(flatImage2,F64,0.0,3,3)
     83    PRINT_MATRIX(flatImage2, F64, "Flat image:");
    5784    flatReadout->image = flatImage2;
    5885    pmFlatField(inReadout, flatReadout);
    59     PRINT_MATRIX(inReadout->mask, PS_TYPE_MASK_DATA);
     86    PRINT_MATRIX(inReadout->mask, PS_TYPE_MASK_DATA, "Resulting mask:");
     87    printFooter(stdout, "pmFlatField", "Test B - Mask flat image data", true);
     88    printf("\n\n\n");
     89
     90
     91    // Test C - Mask flat image data starting with non-null mask
     92    printf("Mask flat image data starting with non-null mask\n\n");
     93    printPositiveTestHeader(stdout, "pmFlatField", "Test C - Mask flat image data starting with non-null mask");
     94    PRINT_MATRIX(inImage, F64, "Input image:");
     95    flatImage2->data.F64[0][0] = 1.0;
     96    PRINT_MATRIX(flatImage2, F64, "Flat image:");
     97    CREATE_AND_SET_IMAGE(mask1,U8,0,3,3);
     98    psFree(inReadout->mask);
     99    inReadout->mask = mask1;
     100    pmFlatField(inReadout, flatReadout);
     101    PRINT_MATRIX(inReadout->mask, PS_TYPE_MASK_DATA,"Resulting mask:");
     102    printFooter(stdout, "pmFlatField", "Test C - Mask flat image data starting with non-null mask", true);
     103    printf("\n\n\n");
     104
     105
     106    // Test D - Attempt to use null flat readout
     107    printNegativeTestHeader(stdout,"pmFlatField", "Test D - Attempt to use null flat readout",
     108                            "Null not allowed for flat readout", 0);
     109    pmFlatField(inReadout, NULL);
     110    printFooter(stdout, "pmFlatField", "Test D - Attempt to use null flat readout", true);
     111    printf("\n\n\n");
     112
     113
     114    // Test E - Attempt to use null input image
     115    printNegativeTestHeader(stdout,"pmFlatField", "Test E - Attempt to use null input image",
     116                            "Null not allowed for input image", 0);
     117    psImage *temp = inReadout->image;
     118    inReadout->image = NULL;
     119    pmFlatField(inReadout, flatReadout);
     120    inReadout->image = temp;
     121    printFooter(stdout, "pmFlatField", "Test E - Attempt to use null input image", true);
     122    printf("\n\n\n");
     123
     124
     125    // Test F - Attempt tp use null flat image
     126    printNegativeTestHeader(stdout,"pmFlatField", "Test F - Attempt tp use null flat image",
     127                            "Null not allowed for flat image", 0);
     128    temp = flatReadout->image;
     129    flatReadout->image = NULL;
     130    pmFlatField(inReadout, flatReadout);
     131    flatReadout->image = temp;
     132    printFooter(stdout, "pmFlatField", "Test F - Attempt tp use null flat image", true);
     133    printf("\n\n\n");
     134
     135
     136    // Test G - Attempt to use input image bigger than flat image
     137    printNegativeTestHeader(stdout,"pmFlatField", "Test G - Attempt to use input image bigger than flat image",
     138                            "Input image size exceeds that of flat image", 0);
     139    CREATE_AND_SET_IMAGE(smallFlat,F64,0.0,2,2);
     140    temp = flatReadout->image;
     141    flatReadout->image = smallFlat;
     142    pmFlatField(inReadout, flatReadout);
     143    flatReadout->image = temp;
     144    printFooter(stdout, "pmFlatField", "Test G - Attempt to use input image bigger than flat image", true);
     145    printf("\n\n\n");
     146
     147
     148    // Test H - Attempt to use input image mask bigger than flat image
     149    printNegativeTestHeader(stdout,"pmFlatField", "Test H - Attempt to use input image mask bigger than flat image",
     150                            "Input image mask size exceeds that of flat image", 0);
     151    CREATE_AND_SET_IMAGE(largeMask,F64,0.0,4,4);
     152    temp = inReadout->mask;
     153    inReadout->mask = largeMask;
     154    pmFlatField(inReadout, flatReadout);
     155    inReadout->mask = temp;
     156    printFooter(stdout, "pmFlatField", "Test H - Attempt to use input image mask bigger than flat image", true);
     157    printf("\n\n\n");
     158
     159
     160    // Test I - Attempt to use offset greater than input image
     161    printNegativeTestHeader(stdout,"pmFlatField", "Test I - Attempt to use offset greater than input image",
     162                            "Total offset >= input image size", 0);
     163    *(int*)&inReadout->col0 = 50;
     164    *(int*)&inReadout->row0 = 50;
     165    pmFlatField(inReadout, flatReadout);
     166    *(int*)&inReadout->col0 = 0;
     167    *(int*)&inReadout->row0 = 0;
     168    printFooter(stdout, "pmFlatField", "Test I - Attempt to use offset greater than input image", true);
     169    printf("\n\n\n");
     170
     171
     172    // Test J - Attempt to use complex input image
     173    printNegativeTestHeader(stdout,"pmFlatField", "Test J - Attempt to use complex input image",
     174                            "Complex types not allowed for input image", 0);
     175    *(psElemType* ) & inReadout->image->type.type = PS_TYPE_C64;
     176    pmFlatField(inReadout, flatReadout);
     177    *(psElemType* ) & inReadout->image->type.type = PS_TYPE_F64;
     178    printFooter(stdout, "pmFlatField", "Test J - Attempt to use complex input image", true);
     179    printf("\n\n\n");
     180
     181
     182    // Test K - Attempt to use complex flat image
     183    printNegativeTestHeader(stdout,"pmFlatField", "Test K - Attempt to use complex flat image",
     184                            "Complex types not allowed for flat image", 0);
     185    *(psElemType* ) & flatReadout->image->type.type = PS_TYPE_C64;
     186    pmFlatField(inReadout, flatReadout);
     187    *(psElemType* ) & flatReadout->image->type.type = PS_TYPE_F64;
     188    printFooter(stdout, "pmFlatField", "Test K - Attempt to use complex flat image", true);
     189    printf("\n\n\n");
     190
     191
     192    // Test L - Attempt to use non-equal input and flat image types
     193    printNegativeTestHeader(stdout,"pmFlatField", "Test L - Attempt to use non-equal input and flat image types",
     194                            "Input and flat image types differ", 0);
     195    *(psElemType* ) & flatReadout->image->type.type = PS_TYPE_F32;
     196    pmFlatField(inReadout, flatReadout);
     197    *(psElemType* ) & flatReadout->image->type.type = PS_TYPE_F64;
     198    printFooter(stdout, "pmFlatField", "Test L - Attempt to use non-equal input and flat image types", true);
     199    printf("\n\n\n");
     200
     201
     202    // Test M - Attempt to use non-mask type mask image
     203    printNegativeTestHeader(stdout,"pmFlatField", "Test M - Attempt to use non-mask type mask image",
     204                            "Mask must be PS_TYPE_MASK type", 0);
     205    *(psElemType* ) & inReadout->mask->type.type = PS_TYPE_F32;
     206    pmFlatField(inReadout, flatReadout);
     207    *(psElemType* ) & inReadout->mask->type.type = PS_TYPE_MASK;
     208    printFooter(stdout, "pmFlatField", "Test M - Attempt to use non-mask type mask image", true);
     209    printf("\n\n\n");
     210
     211
     212    // Free memory
     213    psFree(inReadout);
     214    psFree(flatReadout);
     215    psFree(inImage);
     216    psFree(flatImage1);
     217    psFree(flatImage1);
     218    psFree(smallFlat);
     219    psFree(largeMask);
     220
    60221    return 0;
    61222}
     223
Note: See TracChangeset for help on using the changeset viewer.