Changeset 1849
- Timestamp:
- Sep 22, 2004, 9:58:57 AM (22 years ago)
- Location:
- trunk/psModules/src
- Files:
-
- 4 edited
-
Makefile.am (modified) (2 diffs)
-
pmFlatField.c (modified) (8 diffs)
-
pmFlatField.h (modified) (1 diff)
-
tst_pmFlatField.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/src/Makefile.am
r1833 r1849 2 2 bin_PROGRAMS = tst_pmFlatField tst_pmMaskBadPixels 3 3 4 libpsmodule_a_SOURCES = pmFlatField.c pmMaskBadPixels.c 5 libpsmodule_a_HEADERS = pmFlatField.h pmMaskBadPixels.h 4 libpsmodule_a_SOURCES = pmFlatField.c pmMaskBadPixels.c psTest.c 5 libpsmodule_a_HEADERS = pmFlatField.h pmMaskBadPixels.h psTest.h 6 6 libpsmodule_adir = . 7 7 … … 11 11 tst_pmMaskBadPixels_SOURCES = tst_pmMaskBadPixels.c 12 12 tst_pmMaskBadPixels_LDFLAGS = libpsmodule.a 13 -
trunk/psModules/src/pmFlatField.c
r1832 r1849 18 18 * @author Ross Harman, MHPCC 19 19 * 20 * @version $Revision: 1. 9$ $Name: not supported by cvs2svn $21 * @date $Date: 2004-09-2 0 20:36:46$20 * @version $Revision: 1.10 $ $Name: not supported by cvs2svn $ 21 * @date $Date: 2004-09-22 19:58:57 $ 22 22 * 23 23 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 31 31 #include<math.h> 32 32 33 #include "pslib.h" 33 34 #include "pmFlatField.h" 34 35 #include "pmMaskBadPixels.h" … … 50 51 // Check for nulls 51 52 if (in == NULL) { 52 psError(__func__, " : Line %d - Null not allowed for input readout", __LINE__);53 53 return false; 54 54 } else if(flat==NULL) { … … 71 71 72 72 // 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); 76 76 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); 88 80 return false; 89 81 } … … 94 86 95 87 // 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); 99 91 return false; 100 } else if(totOff Col > flatImage->numCols-1) {101 psError(__func__, " : Line %d - Initial column offset exceeds that of mask image. (%d vs %d).",102 __LINE__, totOff Col, 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); 103 95 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); 119 99 return false; 120 100 } … … 136 116 return false; 137 117 } 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, 139 119 flatType); 140 120 return false; … … 149 129 if(flatImage->data.TYPE[j][i] <= 0.0) { \ 150 130 /* 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; \ 152 132 } \ 153 133 } \ … … 178 158 } 179 159 180 printf("");181 160 return true; 182 161 } -
trunk/psModules/src/pmFlatField.h
r1822 r1849 18 18 * @author Ross Harman, MHPCC 19 19 * 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 $ 22 22 * 23 23 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii 24 24 */ 25 26 #include "pslib.h"27 25 28 26 /** 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: 6 4 * 7 5 * @author Ross Harman, MHPCC 8 6 * 9 * @version $Revision: 1. 3$ $Name: not supported by cvs2svn $10 * @date $Date: 2004-09-2 0 20:36:46$7 * @version $Revision: 1.4 $ $Name: not supported by cvs2svn $ 8 * @date $Date: 2004-09-22 19:58:57 $ 11 9 * 12 10 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii 13 11 */ 14 12 13 #include<stdlib.h> 14 15 #include "psTest.h" 16 #include "pslib.h" 15 17 #include "pmFlatField.h" 16 18 17 19 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) \ 21 printf(STRING); \ 22 printf("\n"); \ 23 for(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 } \ 31 35 printf("\n"); 32 36 33 37 34 int main(void) 38 #define CREATE_AND_SET_IMAGE(NAME,TYPE,VALUE,NROWS,NCOLS) \ 39 psImage *NAME = (psImage*)psImageAlloc(NCOLS,NROWS,PS_TYPE_##TYPE); \ 40 for(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 47 static int testFlatField(void); 48 49 50 testDescription tests[] = { 51 {testFlatField, 884, "pmFlatField", 0, false}, 52 {NULL} 53 }; 54 55 56 int main(int argc, char* argv[]) 35 57 { 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 62 int 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) 39 68 psReadout *inReadout = psReadoutAlloc(0, 0, inImage); 69 PRINT_MATRIX(inImage,F64,"Input image:"); 70 CREATE_AND_SET_IMAGE(flatImage1,F64,2.0,3,3) 40 71 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:"); 57 84 flatReadout->image = flatImage2; 58 85 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 60 221 return 0; 61 222 } 223
Note:
See TracChangeset
for help on using the changeset viewer.
