Changeset 21183 for trunk/psModules
- Timestamp:
- Jan 26, 2009, 8:40:07 PM (17 years ago)
- Location:
- trunk/psModules/src
- Files:
-
- 76 edited
-
astrom/pmAstrometryDistortion.c (modified) (3 diffs)
-
astrom/pmAstrometryObjects.c (modified) (2 diffs)
-
camera/pmCellSquish.c (modified) (3 diffs)
-
camera/pmCellSquish.h (modified) (1 diff)
-
camera/pmFPABin.c (modified) (2 diffs)
-
camera/pmFPABin.h (modified) (1 diff)
-
camera/pmFPAMaskWeight.c (modified) (23 diffs)
-
camera/pmFPAMaskWeight.h (modified) (11 diffs)
-
camera/pmFPAMosaic.c (modified) (7 diffs)
-
camera/pmFPAMosaic.h (modified) (3 diffs)
-
camera/pmFPARead.c (modified) (1 diff)
-
camera/pmFPA_JPEG.c (modified) (2 diffs)
-
camera/pmHDU.c (modified) (3 diffs)
-
camera/pmReadoutStack.c (modified) (4 diffs)
-
camera/pmReadoutStack.h (modified) (2 diffs)
-
concepts/pmConceptsStandard.c (modified) (2 diffs)
-
config/pmConfigMask.c (modified) (13 diffs)
-
config/pmConfigMask.h (modified) (3 diffs)
-
detrend/pmBias.c (modified) (2 diffs)
-
detrend/pmDark.c (modified) (16 diffs)
-
detrend/pmDark.h (modified) (3 diffs)
-
detrend/pmFlatField.c (modified) (6 diffs)
-
detrend/pmFlatField.h (modified) (3 diffs)
-
detrend/pmFlatNormalize.c (modified) (12 diffs)
-
detrend/pmFringeStats.c (modified) (23 diffs)
-
detrend/pmFringeStats.h (modified) (3 diffs)
-
detrend/pmMaskBadPixels.c (modified) (8 diffs)
-
detrend/pmMaskBadPixels.h (modified) (4 diffs)
-
detrend/pmOverscan.c (modified) (2 diffs)
-
detrend/pmRemnance.c (modified) (5 diffs)
-
detrend/pmRemnance.h (modified) (1 diff)
-
detrend/pmShifts.c (modified) (1 diff)
-
detrend/pmShifts.h (modified) (1 diff)
-
detrend/pmShutterCorrection.c (modified) (19 diffs)
-
detrend/pmShutterCorrection.h (modified) (7 diffs)
-
detrend/pmSkySubtract.c (modified) (9 diffs)
-
imcombine/pmImageCombine.c (modified) (15 diffs)
-
imcombine/pmPSFEnvelope.c (modified) (1 diff)
-
imcombine/pmReadoutCombine.c (modified) (6 diffs)
-
imcombine/pmReadoutCombine.h (modified) (2 diffs)
-
imcombine/pmStack.c (modified) (15 diffs)
-
imcombine/pmStack.h (modified) (2 diffs)
-
imcombine/pmStackReject.c (modified) (2 diffs)
-
imcombine/pmSubtraction.c (modified) (17 diffs)
-
imcombine/pmSubtraction.h (modified) (2 diffs)
-
imcombine/pmSubtractionMask.c (modified) (8 diffs)
-
imcombine/pmSubtractionMask.h (modified) (2 diffs)
-
imcombine/pmSubtractionMatch.c (modified) (4 diffs)
-
imcombine/pmSubtractionMatch.h (modified) (1 diff)
-
imcombine/pmSubtractionStamps.c (modified) (6 diffs)
-
objects/pmFootprintArrayGrow.c (modified) (2 diffs)
-
objects/pmFootprintFindAtPoint.c (modified) (7 diffs)
-
objects/pmGrowthCurveGenerate.c (modified) (6 diffs)
-
objects/pmModel.c (modified) (9 diffs)
-
objects/pmModel.h (modified) (5 diffs)
-
objects/pmPSF.h (modified) (2 diffs)
-
objects/pmPSF_IO.c (modified) (2 diffs)
-
objects/pmPSFtry.c (modified) (28 diffs)
-
objects/pmPSFtry.h (modified) (4 diffs)
-
objects/pmResiduals.c (modified) (2 diffs)
-
objects/pmResiduals.h (modified) (2 diffs)
-
objects/pmSource.c (modified) (11 diffs)
-
objects/pmSource.h (modified) (3 diffs)
-
objects/pmSourceFitModel.c (modified) (9 diffs)
-
objects/pmSourceFitModel.h (modified) (3 diffs)
-
objects/pmSourceFitSet.c (modified) (9 diffs)
-
objects/pmSourceFitSet.h (modified) (2 diffs)
-
objects/pmSourceMatch.c (modified) (7 diffs)
-
objects/pmSourceMoments.c (modified) (4 diffs)
-
objects/pmSourcePhotometry.c (modified) (14 diffs)
-
objects/pmSourcePhotometry.h (modified) (2 diffs)
-
objects/pmSourceSky.c (modified) (5 diffs)
-
objects/pmSourceSky.h (modified) (3 diffs)
-
objects/pmSourceVisual.c (modified) (1 diff)
-
objects/pmTrend2D.c (modified) (3 diffs)
-
objects/pmTrend2D.h (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/src/astrom/pmAstrometryDistortion.c
r19305 r21183 7 7 * @author EAM, IfA 8 8 * 9 * @version $Revision: 1.2 2$ $Name: not supported by cvs2svn $10 * @date $Date: 200 8-09-02 19:05:09$9 * @version $Revision: 1.23 $ $Name: not supported by cvs2svn $ 10 * @date $Date: 2009-01-27 06:39:38 $ 11 11 * 12 12 * Copyright 2006 Institute for Astronomy, University of Hawaii … … 121 121 // this analysis has too few data points to use the robust median method 122 122 stats = psStatsAlloc (PS_STAT_SAMPLE_MEDIAN | PS_STAT_SAMPLE_STDEV); 123 mask = psVectorAlloc (Npts, PS_TYPE_ MASK);123 mask = psVectorAlloc (Npts, PS_TYPE_VECTOR_MASK); 124 124 psVectorInit (mask, 0); 125 125 … … 206 206 // this analysis has too few data points to use the robust median method 207 207 psStats *stats = psStatsAlloc (PS_STAT_SAMPLE_MEDIAN | PS_STAT_SAMPLE_STDEV); 208 psVector *mask = psVectorAlloc (gradients->n, PS_TYPE_ MASK);208 psVector *mask = psVectorAlloc (gradients->n, PS_TYPE_VECTOR_MASK); 209 209 psVectorInit (mask, 0); 210 210 -
trunk/psModules/src/astrom/pmAstrometryObjects.c
r20801 r21183 8 8 * @author EAM, IfA 9 9 * 10 * @version $Revision: 1.4 2$ $Name: not supported by cvs2svn $11 * @date $Date: 200 8-11-20 01:26:07$10 * @version $Revision: 1.43 $ $Name: not supported by cvs2svn $ 11 * @date $Date: 2009-01-27 06:39:38 $ 12 12 * 13 13 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 227 227 228 228 // constant errors 229 psVector *mask = psVectorAlloc (match->n, PS_TYPE_ U8);229 psVector *mask = psVectorAlloc (match->n, PS_TYPE_VECTOR_MASK); 230 230 psVectorInit (mask, 0); 231 231 -
trunk/psModules/src/camera/pmCellSquish.c
r12696 r21183 12 12 13 13 14 bool pmCellSquish(pmCell *cell, ps MaskType maskVal, bool useShifts)14 bool pmCellSquish(pmCell *cell, psImageMaskType maskVal, bool useShifts) 15 15 { 16 16 PS_ASSERT_PTR_NON_NULL(cell, false); … … 116 116 psImage *squishImage = psImageAlloc(numCols, numRows, PS_TYPE_F32); // Squished image 117 117 psImageInit(squishImage, 0.0); 118 psImage *squishMask = psImageAlloc(numCols, numRows, PS_TYPE_ MASK); // Squished mask118 psImage *squishMask = psImageAlloc(numCols, numRows, PS_TYPE_IMAGE_MASK); // Squished mask 119 119 psImageInit(squishMask, 0); 120 120 … … 159 159 squishImage->data.F32[ySquish][xSquish] += image->data.F32[y][x]; 160 160 if (mask) { 161 squishMask->data.PS_TYPE_ MASK_DATA[ySquish][xSquish] |= mask->data.U8[y][x] & maskVal;161 squishMask->data.PS_TYPE_IMAGE_MASK_DATA[ySquish][xSquish] |= mask->data.PS_TYPE_IMAGE_MASK_DATA[y][x] & maskVal; 162 162 } 163 163 } -
trunk/psModules/src/camera/pmCellSquish.h
r12696 r21183 7 7 /// already have been read) and masks. 8 8 bool pmCellSquish(pmCell *cell, ///< Cell to have readouts combined 9 ps MaskType maskVal, ///< Value to be masked9 psImageMaskType maskVal, ///< Value to be masked 10 10 bool useShifts ///< Use the shifts when squishing? 11 11 ); -
trunk/psModules/src/camera/pmFPABin.c
r20442 r21183 9 9 #include "pmFPABin.h" 10 10 11 bool pmReadoutRebin(pmReadout *out, const pmReadout *in, ps MaskType maskVal, int xBin, int yBin)11 bool pmReadoutRebin(pmReadout *out, const pmReadout *in, psImageMaskType maskVal, int xBin, int yBin) 12 12 { 13 13 PM_ASSERT_READOUT_NON_NULL(out, false); … … 50 50 for (int y = yStart; y < yStop; y++) { 51 51 for (int x = xStart; x < xStop; x++) { 52 if (inMask && (inMask->data.PS_TYPE_ MASK_DATA[y][x] & maskVal)) {52 if (inMask && (inMask->data.PS_TYPE_IMAGE_MASK_DATA[y][x] & maskVal)) { 53 53 continue; 54 54 } -
trunk/psModules/src/camera/pmFPABin.h
r19695 r21183 9 9 bool pmReadoutRebin(pmReadout *out, ///< Output readout 10 10 const pmReadout *in,///< Input readout 11 ps MaskType maskVal, ///< Value to mask11 psImageMaskType maskVal, ///< Value to mask 12 12 int xBin, int yBin ///< Binning factors in x and y 13 13 ); -
trunk/psModules/src/camera/pmFPAMaskWeight.c
r20749 r21183 42 42 continue; 43 43 } 44 masks->data[i] = psImageAlloc(image->numCols, image->numRows, PS_TYPE_ U8);44 masks->data[i] = psImageAlloc(image->numCols, image->numRows, PS_TYPE_IMAGE_MASK); 45 45 psImageInit(masks->data[i], 0); 46 46 } … … 98 98 ////////////////////////////////////////////////////////////////////////////////////////////////////////////// 99 99 100 bool pmReadoutSetMask(pmReadout *readout, ps MaskType satMask, psMaskType badMask)100 bool pmReadoutSetMask(pmReadout *readout, psImageMaskType satMask, psImageMaskType badMask) 101 101 { 102 102 PS_ASSERT_PTR_NON_NULL(readout, false); … … 124 124 if (!readout->mask) { 125 125 // Generate a (throwaway) mask image, if required 126 readout->mask = psImageAlloc(image->numCols, image->numRows, PS_TYPE_ U8);126 readout->mask = psImageAlloc(image->numCols, image->numRows, PS_TYPE_IMAGE_MASK); 127 127 } 128 128 psImage *mask = readout->mask; // The mask pixels … … 131 131 // Dereference pointers for speed 132 132 psF32 **imageData = image->data.F32;// The image 133 ps U8 **maskData = mask->data.U8; // The mask133 psImageMaskType **maskData = mask->data.PS_TYPE_IMAGE_MASK_DATA; // The mask 134 134 135 135 for (int i = 0; i < image->numRows; i++) { … … 153 153 // pixels. currently, it will set mask bits if (value <= BAD) or (value >= SATURATION) 154 154 // should we optionally ignore these tests? 155 bool pmReadoutGenerateMask(pmReadout *readout, ps MaskType satMask, psMaskType badMask)155 bool pmReadoutGenerateMask(pmReadout *readout, psImageMaskType satMask, psImageMaskType badMask) 156 156 { 157 157 PS_ASSERT_PTR_NON_NULL(readout, false); … … 294 294 } 295 295 296 bool pmReadoutGenerateMaskWeight(pmReadout *readout, ps MaskType satMask, psMaskType badMask, bool poisson)296 bool pmReadoutGenerateMaskWeight(pmReadout *readout, psImageMaskType satMask, psImageMaskType badMask, bool poisson) 297 297 { 298 298 PS_ASSERT_PTR_NON_NULL(readout, false); … … 306 306 } 307 307 308 bool pmCellGenerateMaskWeight(pmCell *cell, ps MaskType satMask, psMaskType badMask, bool poisson)308 bool pmCellGenerateMaskWeight(pmCell *cell, psImageMaskType satMask, psImageMaskType badMask, bool poisson) 309 309 { 310 310 PS_ASSERT_PTR_NON_NULL(cell, false); … … 321 321 322 322 323 bool pmReadoutWeightRenormPixels(const pmReadout *readout, ps MaskType maskVal,323 bool pmReadoutWeightRenormPixels(const pmReadout *readout, psImageMaskType maskVal, 324 324 psStatsOptions meanStat, psStatsOptions stdevStat, psRandom *rng) 325 325 { … … 363 363 364 364 365 bool pmReadoutWeightRenormPhot(const pmReadout *readout, ps MaskType maskVal, int num, float width,365 bool pmReadoutWeightRenormPhot(const pmReadout *readout, psImageMaskType maskVal, int num, float width, 366 366 psStatsOptions meanStat, psStatsOptions stdevStat, psRandom *rng) 367 367 { … … 411 411 psVector *source = psVectorAlloc(num, PS_TYPE_F32); // Measurements of fake sources 412 412 psVector *guess = psVectorAlloc(num, PS_TYPE_F32); // Guess at significance 413 psVector *photMask = psVectorAlloc(num, PS_TYPE_ MASK); // Mask for fluxes413 psVector *photMask = psVectorAlloc(num, PS_TYPE_VECTOR_MASK); // Mask for fluxes 414 414 for (int i = 0; i < num; i++) { 415 415 // Coordinates of interest … … 433 433 float yGauss = gauss->data.F32[v]; // Value of Gaussian in y 434 434 for (int u = 0, x = xPix - size; u < fullSize; u++, x++) { 435 if (mask && mask->data.PS_TYPE_ MASK_DATA[y][x] & maskVal) {435 if (mask && mask->data.PS_TYPE_IMAGE_MASK_DATA[y][x] & maskVal) { 436 436 continue; 437 437 } … … 453 453 } 454 454 455 photMask->data.PS_TYPE_ MASK_DATA[i] = ((isfinite(sumNoise) && isfinite(sumSource) &&455 photMask->data.PS_TYPE_VECTOR_MASK_DATA[i] = ((isfinite(sumNoise) && isfinite(sumSource) && 456 456 isfinite(sumWeight) && sumGauss > 0 && sumGauss2 > 0) ? 457 457 0 : 0xFF); … … 493 493 ratio->data.F32[i] = measuredSig / guess->data.F32[i]; 494 494 if (guess->data.F32[i] <= 0.0 || source->data.F32[i] <= 0.0 || !isfinite(ratio->data.F32[i])) { 495 photMask->data.PS_TYPE_ MASK_DATA[i] = 0xFF;495 photMask->data.PS_TYPE_VECTOR_MASK_DATA[i] = 0xFF; 496 496 } 497 497 psTrace("psModules.camera", 9, "Ratio %d: %f, %f, %f\n", … … 523 523 524 524 525 bool pmReadoutWeightRenorm(const pmReadout *readout, ps MaskType maskVal, psStatsOptions meanStat,525 bool pmReadoutWeightRenorm(const pmReadout *readout, psImageMaskType maskVal, psStatsOptions meanStat, 526 526 psStatsOptions stdevStat, int width, psRandom *rng) 527 527 { … … 591 591 592 592 593 bool pmReadoutMaskNonfinite(pmReadout *readout, ps MaskType maskVal)593 bool pmReadoutMaskNonfinite(pmReadout *readout, psImageMaskType maskVal) 594 594 { 595 595 PM_ASSERT_READOUT_NON_NULL(readout, false); … … 601 601 602 602 if (!readout->mask) { 603 readout->mask = psImageAlloc(numCols, numRows, PS_TYPE_ MASK);603 readout->mask = psImageAlloc(numCols, numRows, PS_TYPE_IMAGE_MASK); 604 604 } 605 605 psImage *mask = readout->mask; // Readout's mask … … 608 608 for (int x = 0; x < numCols; x++) { 609 609 if (!isfinite(image->data.F32[y][x]) || (weight && !isfinite(weight->data.F32[y][x]))) { 610 mask->data.PS_TYPE_ MASK_DATA[y][x] |= maskVal;610 mask->data.PS_TYPE_IMAGE_MASK_DATA[y][x] |= maskVal; 611 611 } 612 612 } … … 618 618 619 619 620 bool pmReadoutMaskApply(pmReadout *readout, ps MaskType maskVal)620 bool pmReadoutMaskApply(pmReadout *readout, psImageMaskType maskVal) 621 621 { 622 622 PM_ASSERT_READOUT_NON_NULL(readout, false); … … 625 625 626 626 int numCols = readout->image->numCols, numRows = readout->image->numRows; // Size of image 627 ps MaskType **maskData = readout->mask->data.PS_TYPE_MASK_DATA; // Dereference mask627 psImageMaskType **maskData = readout->mask->data.PS_TYPE_IMAGE_MASK_DATA; // Dereference mask 628 628 psF32 **imageData = readout->image->data.F32;// Dereference image 629 629 psF32 **weightData = readout->weight ? readout->weight->data.F32 : NULL; // Dereference weight map … … 644 644 645 645 646 bool pmReadoutInterpolateBadPixels(pmReadout *readout, ps MaskType maskVal, psImageInterpolateMode mode,647 float poorFrac, ps MaskType maskPoor, psMaskType maskBad)646 bool pmReadoutInterpolateBadPixels(pmReadout *readout, psImageMaskType maskVal, psImageInterpolateMode mode, 647 float poorFrac, psImageMaskType maskPoor, psImageMaskType maskBad) 648 648 { 649 649 PM_ASSERT_READOUT_NON_NULL(readout, false); … … 667 667 psVector *imagePix = psVectorAllocEmpty(PIXELS_BUFFER, PS_TYPE_F32); // Corresponding values for image 668 668 psVector *weightPix = psVectorAllocEmpty(PIXELS_BUFFER, PS_TYPE_F32); // Corresponding values for weight 669 psVector *maskPix = psVectorAllocEmpty(PIXELS_BUFFER, PS_TYPE_MASK); // Corresponding values for mask 669 psVector *maskPix = psVectorAllocEmpty(PIXELS_BUFFER, PS_TYPE_IMAGE_MASK); // Corresponding values for mask 670 // NOTE: maskPix carries the actual image mask values -- do NOT use 671 // PS_TYPE_VECTOR_MASK here; it is storage, and is not treated as a vector mask 670 672 671 673 long numBad = 0; // Number of bad pixels interpolated 672 674 for (int y = 0; y < numRows; y++) { 673 675 for (int x = 0; x < numCols; x++) { 674 if (mask->data.PS_TYPE_ MASK_DATA[y][x] & maskVal) {676 if (mask->data.PS_TYPE_IMAGE_MASK_DATA[y][x] & maskVal) { 675 677 double imageValue, weightValue; // Image and weight value from interpolation 676 psMaskType maskValue = 0; // Mask value from interpolation 677 psImageInterpolateStatus status = psImageInterpolate(&imageValue, &weightValue, &maskValue, 678 x, y, interp); 678 psImageMaskType maskValue = 0; // Mask value from interpolation 679 psImageInterpolateStatus status = psImageInterpolate(&imageValue, &weightValue, &maskValue, x, y, interp); 679 680 if (status == PS_INTERPOLATE_STATUS_ERROR || status == PS_INTERPOLATE_STATUS_OFF) { 680 681 psError(PS_ERR_UNKNOWN, false, "Unable to interpolate readout at %d,%d", x, y); … … 697 698 imagePix->data.F32[numBad] = imageValue; 698 699 weightPix->data.F32[numBad] = weightValue; 699 maskPix->data.PS_TYPE_ MASK_DATA[numBad] = maskValue;700 maskPix->data.PS_TYPE_IMAGE_MASK_DATA[numBad] = maskValue; 700 701 numBad++; 701 702 } … … 709 710 image->data.F32[y][x] = imagePix->data.F32[i]; 710 711 weight->data.F32[y][x] = weightPix->data.F32[i]; 711 mask->data.PS_TYPE_ MASK_DATA[y][x] = maskPix->data.PS_TYPE_MASK_DATA[i];712 mask->data.PS_TYPE_IMAGE_MASK_DATA[y][x] = maskPix->data.PS_TYPE_IMAGE_MASK_DATA[i]; 712 713 } 713 714 -
trunk/psModules/src/camera/pmFPAMaskWeight.h
r20486 r21183 5 5 * @author Eugene Magnier, IfA 6 6 * 7 * @version $Revision: 1.1 6$ $Name: not supported by cvs2svn $8 * @date $Date: 200 8-10-31 21:50:16$7 * @version $Revision: 1.17 $ $Name: not supported by cvs2svn $ 8 * @date $Date: 2009-01-27 06:39:38 $ 9 9 * Copyright 2005-2006 Institute for Astronomy, University of Hawaii 10 10 */ … … 42 42 /// iterating using pmReadoutReadNext, in which case the HDU can't be generated. 43 43 bool pmReadoutSetMask(pmReadout *readout, ///< Readout for which to set mask 44 ps MaskType satMask, ///< Mask value to give saturated pixels45 ps MaskType badMask ///< Mask value to give bad (low) pixels44 psImageMaskType satMask, ///< Mask value to give saturated pixels 45 psImageMaskType badMask ///< Mask value to give bad (low) pixels 46 46 ); 47 47 … … 62 62 /// is suitable for output (complete with HDU entry). This is intended for most operations. 63 63 bool pmReadoutGenerateMask(pmReadout *readout, ///< Readout for which to generate mask 64 ps MaskType sat, ///< Mask value to give saturated pixels65 ps MaskType bad ///< Mask value to give bad (low) pixels64 psImageMaskType sat, ///< Mask value to give saturated pixels 65 psImageMaskType bad ///< Mask value to give bad (low) pixels 66 66 ); 67 67 … … 79 79 /// Calls pmReadoutGenerateMask and pmReadoutGenerateWeight for the readout 80 80 bool pmReadoutGenerateMaskWeight(pmReadout *readout, ///< Readout for which to generate mask and weights 81 ps MaskType sat, ///< Mask value to give saturated pixels82 ps MaskType bad, ///< Mask value to give bad (low) pixels81 psImageMaskType sat, ///< Mask value to give saturated pixels 82 psImageMaskType bad, ///< Mask value to give bad (low) pixels 83 83 bool poisson ///< Use poisson weights (in addition to read noise)? 84 84 ); … … 88 88 /// Calls pmReadoutGenerateMaskWeight for each readout within the cell. 89 89 bool pmCellGenerateMaskWeight(pmCell *cell, ///< Cell for which to generate mask and weights 90 ps MaskType sat, ///< Mask value to give saturated pixels91 ps MaskType bad, ///< Mask value to give bad (low) pixels90 psImageMaskType sat, ///< Mask value to give saturated pixels 91 psImageMaskType bad, ///< Mask value to give bad (low) pixels 92 92 bool poisson ///< Use poisson weights (in addition to read noise)? 93 93 ); … … 98 98 bool pmReadoutWeightRenormPixels( 99 99 const pmReadout *readout, ///< Readout to normalise 100 ps MaskType maskVal, ///< Value to mask100 psImageMaskType maskVal, ///< Value to mask 101 101 psStatsOptions meanStat, ///< Statistic to measure the mean (of the variance map) 102 102 psStatsOptions stdevStat, ///< Statistic to measure the stdev (of the image) … … 110 110 bool pmReadoutWeightRenormPhot( 111 111 const pmReadout *readout, ///< Readout to normalise 112 ps MaskType maskVal, ///< Value to mask112 psImageMaskType maskVal, ///< Value to mask 113 113 int num, ///< Number of instances to measure over the image 114 114 float width, ///< Photometry width … … 123 123 /// that patch corresponds. 124 124 bool pmReadoutWeightRenorm(const pmReadout *readout, // Readout to normalise 125 ps MaskType maskVal, // Value to mask125 psImageMaskType maskVal, // Value to mask 126 126 psStatsOptions meanStat, // Statistic to measure the mean (of the variance map) 127 127 psStatsOptions stdevStat, // Statistic to measure the stdev (of the image) … … 136 136 /// the provided value. 137 137 bool pmReadoutMaskNonfinite(pmReadout *readout, ///< Readout to mask 138 ps MaskType maskVal ///< Mask value to give non-finite pixels138 psImageMaskType maskVal ///< Mask value to give non-finite pixels 139 139 ); 140 140 … … 145 145 /// sets masked areas to NAN in the image and weight. 146 146 bool pmReadoutMaskApply(pmReadout *readout, ///< Readout to mask 147 ps MaskType maskVal ///< Mask value for which to apply mask147 psImageMaskType maskVal ///< Mask value for which to apply mask 148 148 ); 149 149 … … 152 152 /// Scan the mask image for bad pixels, and interpolate over them using the nominated options 153 153 bool pmReadoutInterpolateBadPixels(pmReadout *readout, ///< Readout to work on 154 ps MaskType maskVal, ///< Value to mask154 psImageMaskType maskVal, ///< Value to mask 155 155 psImageInterpolateMode mode, ///< Interpolation mode 156 156 float poorFrac, ///< Maximum bad fraction of kernel for "poor" status 157 ps MaskType maskPoor, ///< Mask value to give poor pixels158 ps MaskType maskBad ///< Mask value to give bad pixels157 psImageMaskType maskPoor, ///< Mask value to give poor pixels 158 psImageMaskType maskBad ///< Mask value to give bad pixels 159 159 ); 160 160 -
trunk/psModules/src/camera/pmFPAMosaic.c
r19073 r21183 471 471 numImages++; 472 472 473 // Only implemented for F32 and U8 images so far.474 assert(image->type.type == PS_TYPE_F32 || image->type.type == PS_TYPE_U8);475 473 // All input types must be the same 476 474 if (type == 0) { … … 537 535 if (xBinSource->data.S32[i] == xBinTarget && yBinSource->data.S32[i] == yBinTarget) { 538 536 switch (type) { 537 COPY_WITH_PARITY_DIFFERENCE(U8); 538 COPY_WITH_PARITY_DIFFERENCE(U16); 539 COPY_WITH_PARITY_DIFFERENCE(U32); 540 COPY_WITH_PARITY_DIFFERENCE(U64); 541 COPY_WITH_PARITY_DIFFERENCE(S8); 542 COPY_WITH_PARITY_DIFFERENCE(S16); 543 COPY_WITH_PARITY_DIFFERENCE(S32); 544 COPY_WITH_PARITY_DIFFERENCE(S64); 539 545 COPY_WITH_PARITY_DIFFERENCE(F32); 540 COPY_WITH_PARITY_DIFFERENCE( U8);546 COPY_WITH_PARITY_DIFFERENCE(F64); 541 547 default: 542 548 psAbort("Should never get here.\n"); … … 548 554 // We have to do all of the hard work ourselves 549 555 switch (type) { 550 FILL_IN(F32); 551 FILL_IN(U8); 556 FILL_IN(U8); 557 FILL_IN(U16); 558 FILL_IN(U32); 559 FILL_IN(U64); 560 FILL_IN(S8); 561 FILL_IN(S16); 562 FILL_IN(S32); 563 FILL_IN(S64); 564 FILL_IN(F32); 565 FILL_IN(F64); 552 566 default: 553 567 psAbort("Should never get here.\n"); … … 730 744 const pmChip *chip, // Chip to mosaic 731 745 const pmCell *targetCell, // Cell to which to mosaic 732 ps MaskType blank // Mask value to give blank pixels746 psImageMaskType blank // Mask value to give blank pixels 733 747 ) 734 748 { … … 838 852 const pmChip *targetChip, // Chip to which to mosaic 839 853 const pmCell *targetCell, // Cell to which to mosaic 840 ps MaskType blank // Mask value to give blank pixels854 psImageMaskType blank // Mask value to give blank pixels 841 855 ) 842 856 { … … 994 1008 // the mosaic image. 995 1009 996 bool pmChipMosaic(pmChip *target, const pmChip *source, bool deepCopy, ps MaskType blank)1010 bool pmChipMosaic(pmChip *target, const pmChip *source, bool deepCopy, psImageMaskType blank) 997 1011 { 998 1012 // Target exists, and has only a single cell … … 1225 1239 1226 1240 1227 bool pmFPAMosaic(pmFPA *target, const pmFPA *source, bool deepCopy, ps MaskType blank)1241 bool pmFPAMosaic(pmFPA *target, const pmFPA *source, bool deepCopy, psImageMaskType blank) 1228 1242 { 1229 1243 // Target exists, and has only a single chip with single cell -
trunk/psModules/src/camera/pmFPAMosaic.h
r13898 r21183 4 4 * @author Paul Price, IfA 5 5 * 6 * @version $Revision: 1. 8$ $Name: not supported by cvs2svn $7 * @date $Date: 200 7-06-20 02:22:26$6 * @version $Revision: 1.9 $ $Name: not supported by cvs2svn $ 7 * @date $Date: 2009-01-27 06:39:38 $ 8 8 * Copyright 2005-2006 Institute for Astronomy, University of Hawaii 9 9 */ … … 24 24 const pmChip *source, ///< Source chip whose cells will be mosaicked 25 25 bool deepCopy, ///< Require a deep copy (disregard 'nice' chip) 26 ps MaskType blank ///< Mask value to give blank pixels26 psImageMaskType blank ///< Mask value to give blank pixels 27 27 ); 28 28 … … 36 36 const pmFPA *source, ///< FPA whose chips and cells will be mosaicked 37 37 bool deepCopy, ///< Require a deep copy (disregard 'nice' chip) 38 ps MaskType blank ///< Mask value to give blank pixels38 psImageMaskType blank ///< Mask value to give blank pixels 39 39 ); 40 40 /// @} -
trunk/psModules/src/camera/pmFPARead.c
r19246 r21183 35 35 static psElemType pixelTypes[] = { 36 36 PS_TYPE_F32, 37 PS_TYPE_ MASK,37 PS_TYPE_IMAGE_MASK, 38 38 PS_TYPE_F32, 39 39 0 -
trunk/psModules/src/camera/pmFPA_JPEG.c
r19653 r21183 5 5 * @author EAM, IfA 6 6 * 7 * @version $Revision: 1.2 6$ $Name: not supported by cvs2svn $8 * @date $Date: 200 8-09-23 02:00:36$7 * @version $Revision: 1.27 $ $Name: not supported by cvs2svn $ 8 * @date $Date: 2009-01-27 06:39:38 $ 9 9 * 10 10 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 157 157 psStats *stats = psStatsAlloc(PS_STAT_ROBUST_MEDIAN); 158 158 stats->nSubsample = 10000; 159 ps MaskType maskVal = pmConfigMaskGet("MASK.VALUE", config); // Value to mask159 psImageMaskType maskVal = pmConfigMaskGet("MASK.VALUE", config); // Value to mask 160 160 float mean = 0, delta = 0; // 161 161 if (!psImageBackground(stats, NULL, readout->image, readout->mask, maskVal, rng)) { -
trunk/psModules/src/camera/pmHDU.c
r19385 r21183 167 167 const psArray *images, // Images to write 168 168 const psArray *masks, // Masks to use when writing 169 ps MaskType maskVal,// Value to mask169 psImageMaskType maskVal,// Value to mask 170 170 psFits *fits // FITS file to which to write 171 171 ) … … 222 222 PS_ASSERT_PTR_NON_NULL(fits, false); 223 223 224 ps MaskType maskVal = pmConfigMaskGet("MASK.VALUE", config); // Value to mask224 psImageMaskType maskVal = pmConfigMaskGet("MASK.VALUE", config); // Value to mask 225 225 return hduWrite(hdu, hdu->images, hdu->masks, maskVal, fits); 226 226 } … … 240 240 PS_ASSERT_PTR_NON_NULL(fits, false); 241 241 242 ps MaskType maskVal = pmConfigMaskGet("MASK.VALUE", config); // Value to mask242 psImageMaskType maskVal = pmConfigMaskGet("MASK.VALUE", config); // Value to mask 243 243 return hduWrite(hdu, hdu->weights, hdu->masks, maskVal, fits); 244 244 } -
trunk/psModules/src/camera/pmReadoutStack.c
r18830 r21183 78 78 79 79 // XXX for the moment, use col0, row0, numCols, numRows supplied from the outside 80 bool pmReadoutStackDefineOutput(pmReadout *readout, int col0, int row0, int numCols, int numRows, bool mask, bool weight, ps MaskType blank)80 bool pmReadoutStackDefineOutput(pmReadout *readout, int col0, int row0, int numCols, int numRows, bool mask, bool weight, psImageMaskType blank) 81 81 { 82 82 PS_ASSERT_PTR_NON_NULL(readout, false); … … 94 94 // XXX is this an error? 95 95 if (readout->mask) return false; 96 readout->mask = psImageAlloc(numCols, numRows, PS_TYPE_ MASK);96 readout->mask = psImageAlloc(numCols, numRows, PS_TYPE_IMAGE_MASK); 97 97 psImageInit(readout->mask, blank); 98 98 } … … 163 163 bool pmReadoutUpdateSize(pmReadout *readout, int minCols, int minRows, 164 164 int numCols, int numRows, bool mask, bool weight, 165 ps MaskType blank)165 psImageMaskType blank) 166 166 { 167 167 PS_ASSERT_PTR_NON_NULL(readout, false); … … 191 191 if (mask) { 192 192 if (!readout->mask) { 193 readout->mask = psImageAlloc(numCols, numRows, PS_TYPE_ MASK);193 readout->mask = psImageAlloc(numCols, numRows, PS_TYPE_IMAGE_MASK); 194 194 psImageInit(readout->mask, blank); 195 195 } 196 196 if (readout->mask->numCols < numCols || readout->mask->numRows < numRows) { 197 psImage *newMask = psImageAlloc(numCols, numRows, PS_TYPE_ MASK);197 psImage *newMask = psImageAlloc(numCols, numRows, PS_TYPE_IMAGE_MASK); 198 198 psImageInit(newMask, blank); 199 199 psImageOverlaySection(newMask, readout->mask, readout->col0, readout->row0, "="); -
trunk/psModules/src/camera/pmReadoutStack.h
r18830 r21183 14 14 bool mask, ///< Worry about the mask? 15 15 bool weight, ///< Worry about the weight? 16 ps MaskType blank ///< Mask value to give to blank pixels16 psImageMaskType blank ///< Mask value to give to blank pixels 17 17 ); 18 18 … … 47 47 48 48 // XXX for the moment, use col0, row0, numCols, numRows supplied from the outside 49 bool pmReadoutStackDefineOutput(pmReadout *readout, int col0, int row0, int numCols, int numRows, bool mask, bool weight, ps MaskType blank);49 bool pmReadoutStackDefineOutput(pmReadout *readout, int col0, int row0, int numCols, int numRows, bool mask, bool weight, psImageMaskType blank); 50 50 51 51 bool pmReadoutStackSetOutputSize(int *col0, int *row0, int *numCols, int *numRows, const psArray *inputs); -
trunk/psModules/src/concepts/pmConceptsStandard.c
r20598 r21183 16 16 #include "pmConceptsWrite.h" 17 17 #include "pmConceptsStandard.h" 18 19 // XXX why are these functions not supporting all types (S64, U64 often missing)? 18 20 19 21 // The functions in this file are intended to be called solely within the psModules concepts code. For this … … 591 593 TYPE_CASE(binning, concept, U16); 592 594 TYPE_CASE(binning, concept, U32); 595 // TYPE_CASE(binning, concept, U64); 593 596 TYPE_CASE(binning, concept, S8); 594 597 TYPE_CASE(binning, concept, S16); 595 598 TYPE_CASE(binning, concept, S32); 599 // TYPE_CASE(binning, concept, S64); 596 600 default: 597 601 psError(PS_ERR_UNKNOWN, true, "Note sure how to parse %s of type %x --- assuming 1.\n", pattern->name, -
trunk/psModules/src/config/pmConfigMask.c
r19870 r21183 9 9 #include "pmConfigMask.h" 10 10 11 ////////////////////////////////////////////////////////////////////////////////////////////////////////////// 12 // Private functions 13 ////////////////////////////////////////////////////////////////////////////////////////////////////////////// 14 15 // maskSetValues examine named mask values and set the bits for maskValue and markValue. 16 // Ensures that the below-named bad mask values are set, and calculates the mask value to catch them all 17 // Ensure that the below-named other mask values are set (to 0x00 if necessary) 18 19 // List of mask names for "bad" (i.e., mask me please) pixels 20 static const char *badMaskNames[] = { "DETECTOR", // Something is wrong with the detector 21 "DARK", // Pixel doesn't dark-subtract properly 22 "FLAT", // Pixel doesn't flat-field properly 23 "BLANK", // Pixel doesn't contain valid data 24 "RANGE",// Pixel is out-of-range of linearity 25 "SAT", // Pixel is saturated 26 // "LOW", // Pixel is low 27 // "CONV", // Pixel is bad after convolution with a bad pixel 28 "BAD", // Pixel is low 29 "BAD.WARP", // Pixel is bad after convolution with a bad pixel 30 "CR", // Pixel contains a cosmic ray 31 "GHOST",// Pixel contains an optical ghost 32 NULL // End marker 11 static pmConfigMaskInfo masks[] = { 12 { "DETECTOR", NULL, 0x00, true }, // Something is wrong with the detector 13 { "DARK", "DETECTOR", 0x00, true }, // Pixel doesn't dark-subtract properly 14 { "FLAT", "DETECTOR", 0x01, true }, // Pixel doesn't flat-field properly 15 { "BLANK", "DETECTOR", 0x01, true }, // Pixel doesn't contain valid data 16 { "RANGE", NULL, 0x00, true }, // Pixel is out-of-range of linearity 17 { "SAT", "RANGE", 0x01, true }, // Pixel is saturated 18 { "BAD", "RANGE", 0x01, true }, // Pixel is low 19 { "BAD.WARP", NULL, 0x01, true }, // Pixel is bad after convolution with a bad pixel 20 { "CR", NULL, 0x00, true }, // Pixel contains a cosmic ray 21 { "GHOST", NULL, 0x00, true }, // Pixel contains an optical ghost 22 { "POOR.WARP", NULL, 0x00, false }, // Pixel is poor after convolution with a bad pixel 23 // "LOW" Pixel is low 24 // "CONV" Pixel is bad after convolution with a bad pixel 33 25 }; 34 // Fallback names in case a bad mask name is not defined 35 static const char *fallbackMaskNames[] = { NULL, // DETECTOR 36 "DETECTOR", // DARK 37 "DETECTOR", // FLAT 38 "DETECTOR", // BLANK 39 NULL, // RANGE 40 "RANGE", // SAT 41 "RANGE", // LOW 42 NULL, // CONV 43 NULL, // CR 44 NULL, // GHOST 45 }; 46 // Default values in case a bad mask name and its fallback is not defined 47 static const psMaskType defaultMask[] = { 0x00, // DETECTOR 48 0x00, // DARK 49 0x01, // FLAT 50 0x01, // BLANK 51 0x00, // RANGE 52 0x01, // SAT 53 0x01, // LOW 54 0x01, // CONV 55 0x00, // CR 56 0x00 // GHOST 57 }; 58 // Other mask names to ensure exist; these shouldn't be combined in the MASK.VALUE 59 static const char *otherMaskNames[] = { // "POOR", // Pixel is poor after convolution with a bad pixel 60 "POOR.WARP", // Pixel is poor after convolution with a bad pixel 61 NULL // End marker 62 }; 63 64 static bool maskSetValues(psMaskType *outMaskValue, // Value of MASK.VALUE, returned 65 psMaskType *outMarkValue, // Value of MARK.VALUE, returned 66 psMetadata *source // Source of mask bits 67 ) 26 27 // The functions in this file do not force the recipe or header values to be stored as the same 28 // type as psImageMaskType : they only check that the given values will fit in the space 29 // provided by psImageMaskType. This should allow some backwards compatibility (old 8-bit 30 // masks will work with a 16-bit system), but will catch unhandled conflicts (trying to fit 16 31 // bits in 8-bits of space). 32 33 // XXX this file does not have psError vs psWarning worked out correctly. some of the 34 // failure modes should result in errors, not just warnings. 35 36 // pmConfigMaskSetInMetadata examines named mask values and set the bits for maskValue and 37 // markValue. Ensures that the below-named mask values are set, and calculates the mask value 38 // to catch all of the mask values marked as 'bad'. Supplies the fallback name if the primary 39 // name is not found, or the default values if the fallback name is not found. 40 41 bool pmConfigMaskSetInMetadata(psImageMaskType *outMaskValue, // Value of MASK.VALUE, returned 42 psImageMaskType *outMarkValue, // Value of MARK.VALUE, returned 43 psMetadata *source // Source of mask bits 44 ) 68 45 { 69 46 PS_ASSERT_METADATA_NON_NULL(source, false); 70 47 71 48 // Ensure all the bad mask names exist, and set the value to catch all bad pixels 72 psMaskType maskValue = 0; // Value to mask to catch all the bad pixels 73 for (int i = 0; badMaskNames[i]; i++) { 74 const char *name = badMaskNames[i]; // Name for mask 75 const char *fallback = fallbackMaskNames[i]; // Fallback for mask 76 49 psImageMaskType maskValue = 0; // Value to mask to catch all the bad pixels 50 psImageMaskType allMasks = 0; // Value to mask to catch all masked bits (to set MARK) 51 52 int nMasks = sizeof (masks) / sizeof (pmConfigMaskInfo); 53 54 for (int i = 0; i < nMasks; i++) { 77 55 bool mdok; // Status of MD lookup 78 psMaskType value = psMetadataLookupU8(&mdok, source, name); // Value of mask 56 psImageMaskType value = psMetadataLookupImageMaskFromGeneric(&mdok, source, masks[i].badMaskName); // Value of mask 57 if (!mdok) { 58 psWarning ("problem with mask value %s\n", masks[i].badMaskName); 59 } 60 79 61 if (!value) { 80 if (fallback) { 81 value = psMetadataLookupU8(&mdok, source, fallback); 82 } 83 if (!value) { 84 value = defaultMask[i]; 85 } 86 psMetadataAddU8(source, PS_LIST_TAIL, name, PS_META_REPLACE, NULL, value); 87 } 88 maskValue |= value; 89 } 90 91 // Ensure all the other mask names exist 92 for (int i = 0; otherMaskNames[i]; i++) { 93 const char *name = otherMaskNames[i]; // Name for mask 94 bool mdok; // Status of MD lookup 95 psMaskType value = psMetadataLookupU8(&mdok, source, name); // Value of mask 96 if (!value) { 97 psMetadataAddU8(source, PS_LIST_TAIL, name, PS_META_REPLACE, NULL, 0x00); 98 } 62 if (masks[i].fallbackName) { 63 value = psMetadataLookupImageMaskFromGeneric(&mdok, source, masks[i].fallbackName); 64 } 65 if (!value) { 66 value = masks[i].defaultMaskValue; 67 } 68 psMetadataAddImageMask(source, PS_LIST_TAIL, masks[i].badMaskName, PS_META_REPLACE, NULL, value); 69 } 70 if (masks[i].isBad) { 71 maskValue |= value; 72 } 73 allMasks |= value; 99 74 } 100 75 101 76 // search for an unset bit to use for MARK: 102 psMaskType markValue = 0x80; 103 104 int nBits = sizeof(psMaskType) * 8; 77 psImageMaskType markValue = 0x00; 78 psImageMaskType markTrial = 0x01; 79 80 int nBits = sizeof(psImageMaskType) * 8; 105 81 for (int i = 0; !markValue && (i < nBits); i++) { 106 if ( maskValue & markValue) {107 mark Value >>= 1;82 if (allMasks & markTrial) { 83 markTrial <<= 1; 108 84 } else { 109 markValue = mark Value;85 markValue = markTrial; 110 86 } 111 87 } … … 116 92 117 93 // update the list with the results 118 psMetadataAdd U8(source, PS_LIST_TAIL, "MASK.VALUE", PS_META_REPLACE, NULL, maskValue);119 psMetadataAdd U8(source, PS_LIST_TAIL, "MARK.VALUE", PS_META_REPLACE, NULL, markValue);94 psMetadataAddImageMask(source, PS_LIST_TAIL, "MASK.VALUE", PS_META_REPLACE, NULL, maskValue); 95 psMetadataAddImageMask(source, PS_LIST_TAIL, "MARK.VALUE", PS_META_REPLACE, NULL, markValue); 120 96 121 97 if (outMaskValue) { … … 130 106 131 107 // Get a mask value by name(s) 132 static psMaskType maskGet(psMetadata *source, // Source of masks133 const char *masks // Mask values to get134 )135 { 136 ps MaskType mask = 0; // Mask value, to return108 psImageMaskType pmConfigMaskGetFromMetadata(psMetadata *source, // Source of masks 109 const char *masks // Mask values to get 110 ) 111 { 112 psImageMaskType mask = 0; // Mask value, to return 137 113 138 114 psArray *names = psStringSplitArray(masks, " ,;", false); // Array of symbolic names … … 140 116 const char *name = names->data[i]; // Symbolic name of interest 141 117 bool mdok; // Status of MD lookup 142 ps MaskType value = psMetadataLookupU8(&mdok, source, name);118 psImageMaskType value = psMetadataLookupImageMaskFromGeneric(&mdok, source, name); 143 119 if (!mdok) { 144 120 // Try and generate the value if we can 145 121 if (strcmp(name, "MASK.VALUE") == 0 || strcmp(name, "MARK.VALUE") == 0) { 146 if (! maskSetValues(NULL, NULL, source)) {122 if (!pmConfigMaskSetInMetadata(NULL, NULL, source)) { 147 123 psError(PS_ERR_UNKNOWN, false, "Unable to set mask bits."); 148 124 return 0; 149 125 } 150 value = psMetadataLookup U8(&mdok, source, name);126 value = psMetadataLookupImageMaskFromGeneric(&mdok, source, name); 151 127 psAssert(mdok, "Should have generated mask value"); 152 128 } else { … … 163 139 } 164 140 141 // lookup an image mask value by name from a psMetadata, without requiring the entry to 142 // be of type psImageMaskType, but verifying that it will fit in psImageMaskType 143 psImageMaskType psMetadataLookupImageMaskFromGeneric (bool *status, const psMetadata *md, const char *name) { 144 145 *status = true; 146 147 // select the mask bit name from the header 148 psMetadataItem *item = psMetadataLookup (md, name); 149 if (!item) { 150 psWarning("Unable to find header keyword %s when parsing mask", name); 151 *status = false; 152 return 0; 153 } 154 155 // the value may be any of the U8, U16, U32, U64 types : accept the value regardless of type size 156 psU64 fullValue = 0; 157 switch (item->type) { 158 case PS_DATA_U8: 159 fullValue = item->data.U8; 160 break; 161 case PS_DATA_U16: 162 fullValue = item->data.U16; 163 break; 164 case PS_DATA_U32: 165 fullValue = item->data.U32; 166 break; 167 case PS_DATA_U64: 168 fullValue = item->data.U64; 169 break; 170 case PS_DATA_S8: 171 fullValue = item->data.S8; 172 break; 173 case PS_DATA_S16: 174 fullValue = item->data.S16; 175 break; 176 case PS_DATA_S32: 177 fullValue = item->data.S32; 178 break; 179 case PS_DATA_S64: 180 fullValue = item->data.S64; 181 break; 182 default: 183 psWarning("Mask entry %s in metadata is not of a mask type", name); 184 *status = false; 185 return 0; 186 } 187 188 // will the incoming value fit within the current image mask type? 189 if (fullValue > PS_MAX_IMAGE_MASK_TYPE) { 190 psWarning("Mask entry %s in metadata is larger than allowed by the psImageMaskType", name); 191 *status = false; 192 return 0; 193 } 194 psImageMaskType value = fullValue; 195 // XXX validate that value is a 2^n value? 196 197 return value; 198 } 199 165 200 // Remove from the header keywords starting with the provided string 166 static int maskRemoveHeader(psMetadata *header, // Header from which to remove keywords167 const char *start // Remove keywords that start with this string168 )201 int pmConfigMaskRemoveHeaderKeywords(psMetadata *header, // Header from which to remove keywords 202 const char *start // Remove keywords that start with this string 203 ) 169 204 { 170 205 psString regex = NULL; // Regular expression for keywords … … 182 217 } 183 218 219 // look up the named mask value(s) from the MASKS recipe in the config system 220 psImageMaskType pmConfigMaskGet(const char *masks, const pmConfig *config) 221 { 222 psAssert(config, "Require configuration"); 223 PS_ASSERT_STRING_NON_EMPTY(masks, 0); 224 225 bool mdok; // Status of MD lookup 226 psMetadata *recipe = psMetadataLookupMetadata(&mdok, config->recipes, "MASKS"); // The recipe 227 if (!recipe) { 228 psError(PS_ERR_UNEXPECTED_NULL, false, "Unable to find MASKS recipe."); 229 return 0; 230 } 231 232 psImageMaskType mask = pmConfigMaskGetFromMetadata (recipe, masks); 233 return mask; 234 } 235 236 bool pmConfigMaskSet(const pmConfig *config, const char *maskName, psImageMaskType maskValue) 237 { 238 psAssert(config, "Require configuration"); 239 PS_ASSERT_STRING_NON_EMPTY(maskName, false); 240 241 psMetadata *recipe = psMetadataLookupMetadata(NULL, config->recipes, "MASKS"); // The recipe 242 if (!recipe) { 243 psError(PS_ERR_UNEXPECTED_NULL, false, "Unable to find MASKS recipe."); 244 return false; 245 } 246 247 bool status = psMetadataAddImageMask(recipe, PS_LIST_TAIL, maskName, PS_META_REPLACE, NULL, maskValue); 248 return status; 249 } 250 251 252 // replace the named masks in the recipe with values in the header: 253 // replace only the names in the header in the recipe 254 bool pmConfigMaskReadHeader(pmConfig *config, const psMetadata *header) 255 { 256 PS_ASSERT_PTR_NON_NULL(config, false); 257 PS_ASSERT_METADATA_NON_NULL(header, false); 258 259 bool status = false; 260 261 psMetadata *recipe = psMetadataLookupMetadata(NULL, config->recipes, "MASKS"); // The recipe 262 if (!recipe) { 263 psError(PS_ERR_UNEXPECTED_NULL, false, "Unable to find MASKS recipe."); 264 return false; 265 } 266 267 // MASK.VALUE and MARK.VALUE aren't usually set in the recipe, but may be set in the header: create fake 268 // versions so that it won't complain later 269 if (!psMetadataLookup(recipe, "MASK.VALUE")) { 270 psMetadataAddImageMask(recipe, PS_LIST_TAIL, "MASK.VALUE", 0, "Bits to mask", 0); 271 } 272 if (!psMetadataLookup(recipe, "MARK.VALUE")) { 273 psMetadataAddImageMask(recipe, PS_LIST_TAIL, "MARK.VALUE", 0, "Bits for marking", 0); 274 } 275 276 // How many mask values do we need to read? We raise an error if this is not found, 277 // unless the MASK.FORCE is set to true in the camera config 278 int nMask = psMetadataLookupS32(&status, header, "MSKNUM"); 279 if (!status) { 280 if (psMetadataLookupBool(&status, config->camera, "MASK.FORCE")) { 281 psWarning("No mask values in header. Assuming MASKS recipe is accurate because of MASK.FORCE"); 282 return true; 283 } 284 psError(PS_ERR_UNKNOWN, true, "Unable to find MSKNUM in header."); 285 return false; 286 } 287 288 // Loop over the expected number of header mask names. For each named mask value, there 289 // should be a pair of header keywords, one for the name and one for the value 290 char namekey[80]; // Keyword name for symbolic name of mask entry 291 char valuekey[80]; // Keyword name for value of mask entry 292 for (int i = 0; i < nMask; i++) { 293 snprintf(namekey, 64, "MSKNAM%02d", i); 294 snprintf(valuekey, 64, "MSKVAL%02d", i); 295 296 char *name = psMetadataLookupStr(&status, header, namekey); 297 if (!status || !name) { 298 psWarning("Unable to find header keyword %s when parsing mask", namekey); 299 continue; 300 } 301 302 psImageMaskType headerValue = psMetadataLookupImageMaskFromGeneric (&status, header, valuekey); 303 if (!status) { 304 psWarning("Failed to get mask value %s from header, skipping", valuekey); 305 continue; 306 } 307 308 // since we may read multiple mask files, we need to warn (or error?) if any of the 309 // header mask values conflict with other header mask values; However, the original 310 // mask values from the recipe do not need to match the header values. 311 312 // when we add a header mask value, we will also add the NAME.ALREADY entry; check for 313 // the NAME.ALREADY entry to see if we have previously added this mask value from a 314 // header. 315 316 psString nameAlready = NULL; // Name of key with ".ALREADY" added 317 psStringAppend(&nameAlready, "%s.ALREADY", name); 318 bool already = psMetadataLookupBool(&status, recipe, nameAlready); // Already read this one? 319 320 bool inRecipe = false; 321 psImageMaskType recipeValue = psMetadataLookupImageMaskFromGeneric (&inRecipe, recipe, name); 322 if (!inRecipe) { 323 psWarning("Mask value %s is not defined in the recipe", name); 324 } 325 326 if (already) { 327 assert (inRecipe); // XXX makes no sense for NAME.ALREADY to be in without NAME 328 if (recipeValue != headerValue) { 329 psWarning("New mask header value does not match previously loaded entry: %x vs %x", headerValue, recipeValue); 330 psMetadataAddImageMask(recipe, PS_LIST_TAIL, name, PS_META_REPLACE, "Bitmask bit value", headerValue); 331 // XXX alternatively, error here 332 } 333 } else { 334 psMetadataAddBool(recipe, PS_LIST_TAIL, nameAlready, 0, "Already read this mask value", true); 335 psMetadataAddImageMask(recipe, PS_LIST_TAIL, name, PS_META_REPLACE, "Bitmask bit value", headerValue); 336 } 337 338 psFree(nameAlready); 339 } 340 341 return true; 342 } 343 344 // write the named mask bits to the header 345 bool pmConfigMaskWriteHeader(const pmConfig *config, psMetadata *header) 346 { 347 PS_ASSERT_PTR_NON_NULL(config, false); 348 PS_ASSERT_METADATA_NON_NULL(header, false); 349 350 pmConfigMaskRemoveHeaderKeywords(header, "MSKNAM"); 351 pmConfigMaskRemoveHeaderKeywords(header, "MSKVAL"); 352 if (psMetadataLookup(header, "MSKNUM")) { 353 psMetadataRemoveKey(header, "MSKNUM"); 354 } 355 356 char namekey[80]; 357 char valuekey[80]; 358 359 psMetadata *recipe = psMetadataLookupMetadata(NULL, config->recipes, "MASKS"); // The recipe 360 if (!recipe) { 361 psError(PS_ERR_UNEXPECTED_NULL, false, "Unable to find MASKS recipe."); 362 return false; 363 } 364 365 int nMask = 0; 366 367 psMetadataIterator *iter = psMetadataIteratorAlloc(recipe, PS_LIST_HEAD, NULL); // Iterator 368 psMetadataItem *item; // Item from iteration 369 while ((item = psMetadataGetAndIncrement(iter))) { 370 371 // XXX this would give a false positive for mask which include '.ALREADY' in their names 372 char *ptr = strstr (item->name, ".ALREADY"); 373 if (ptr) continue; 374 375 psU64 fullValue = 0; 376 switch (item->type) { 377 case PS_DATA_U8: 378 fullValue = item->data.U8; 379 break; 380 case PS_DATA_U16: 381 fullValue = item->data.U16; 382 break; 383 case PS_DATA_U32: 384 fullValue = item->data.U32; 385 break; 386 case PS_DATA_U64: 387 fullValue = item->data.U64; 388 break; 389 default: 390 psWarning("mask recipe entry %s is not a bit value\n", item->name); 391 continue; 392 } 393 assert (fullValue <= PS_MAX_IMAGE_MASK_TYPE); // this should have been asserted on read... 394 395 snprintf(namekey, 64, "MSKNAM%02d", nMask); 396 snprintf(valuekey, 64, "MSKVAL%02d", nMask); 397 398 psMetadataAddStr(header, PS_LIST_TAIL, namekey, 0, "Bitmask bit name", item->name); 399 psMetadataAddImageMask(header, PS_LIST_TAIL, valuekey, 0, "Bitmask bit value", fullValue); 400 nMask++; 401 } 402 psFree(iter); 403 404 psMetadataAddS32(header, PS_LIST_TAIL, "MSKNUM", 0, "Bitmask bit count", nMask); 405 return true; 406 } 407 408 409 bool pmConfigMaskSetBits(psImageMaskType *outMaskValue, psImageMaskType *outMarkValue, const pmConfig *config) 410 { 411 PS_ASSERT_PTR_NON_NULL(config, false); 412 413 psMetadata *recipe = psMetadataLookupMetadata(NULL, config->recipes, "MASKS"); // The recipe 414 if (!recipe) { 415 psError(PS_ERR_UNEXPECTED_NULL, false, "Unable to find MASKS recipe."); 416 return false; 417 } 418 419 bool status = pmConfigMaskSetInMetadata(outMaskValue, outMarkValue, recipe); 420 return status; 421 } 422 184 423 ////////////////////////////////////////////////////////////////////////////////////////////////////////////// 185 424 // FPA version of mask functions. These are not ready to go yet. … … 187 426 188 427 #if 0 189 bool pmFPAMaskSetValues(psMaskType *outMaskValue, psMaskType *outMarkValue, pmFPA *fpa) 190 { 428 429 bool pmFPAMaskWriteHeader(psMetadata *header, const pmFPA *fpa) 430 { 431 PS_ASSERT_METADATA_NON_NULL(header, false); 191 432 PS_ASSERT_PTR_NON_NULL(fpa, false); 192 433 434 // clear out the header of the associated keywords: 435 pmConfigMaskRemoveHeaderKeywords(header, "MSKNAM"); 436 pmConfigMaskRemoveHeaderKeywords(header, "MSKVAL"); 437 if (psMetadataLookup(header, "MSKNUM")) { 438 psMetadataRemoveKey(header, "MSKNUM"); 439 } 440 441 char namekey[80], valuekey[80]; // Mask name and mask value header keywords 442 int numMask = 0; // Number of mask entries 443 444 psMetadataIterator *iter = psMetadataIteratorAlloc(fpa->masks, PS_LIST_HEAD, NULL); // Iterator 445 psMetadataItem *item; // Item from iteration 446 while ((item = psMetadataGetAndIncrement(iter))) { 447 if (item->type != PS_TYPE_IMAGE_MASK) { 448 psWarning("mask recipe entry %s is not of a mask type (%x)", item->name, item->type); 449 continue; 450 } 451 452 snprintf(namekey, 64, "MSKNAM%02d", numMask); 453 snprintf(valuekey, 64, "MSKVAL%02d", numMask); 454 455 psMetadataAddStr(header, PS_LIST_TAIL, namekey, 0, "Bitmask bit name", item->name); 456 psMetadataAddImageMask(header, PS_LIST_TAIL, valuekey, 0, "Bitmask bit value", item->data.PS_TYPE_IMAGE_MASK_DATA); 457 numMask++; 458 } 459 psFree(iter); 460 461 return psMetadataAddS32(header, PS_LIST_TAIL, "MSKNUM", 0, "Number of named mask entries", numMask); 462 } 463 464 bool pmFPAMaskSetValues(psImageMaskType *outMaskValue, psImageMaskType *outMarkValue, pmFPA *fpa) 465 { 466 PS_ASSERT_PTR_NON_NULL(fpa, false); 467 193 468 return maskSetValues(outMaskValue, outMarkValue, fpa->masks); 194 469 } 195 470 196 ps MaskType pmFPAMaskGet(const pmFPA *fpa, const char *masks, const pmConfig *config)471 psImageMaskType pmFPAMaskGet(const pmFPA *fpa, const char *masks, const pmConfig *config) 197 472 { 198 473 PS_ASSERT_PTR_NON_NULL(fpa, 0); … … 201 476 202 477 if (fpa->masks) { 203 return maskGet(fpa->masks, masks);478 return pmConfigMaskGetFromMetadata(fpa->masks, masks); 204 479 } 205 480 return pmConfigMaskGet(masks, config); 206 481 } 207 482 208 bool pmFPAMaskSet(pmFPA *fpa, const char *maskName, ps MaskType maskValue)483 bool pmFPAMaskSet(pmFPA *fpa, const char *maskName, psImageMaskType maskValue) 209 484 { 210 485 PS_ASSERT_PTR_NON_NULL(fpa, 0); … … 214 489 fpa->masks = psMetadataAlloc(); 215 490 } 216 return psMetadataAdd U8(fpa->masks, PS_LIST_TAIL, maskName, PS_META_REPLACE, NULL, maskValue);491 return psMetadataAddImageMask(fpa->masks, PS_LIST_TAIL, maskName, PS_META_REPLACE, NULL, maskValue); 217 492 } 218 493 … … 250 525 continue; 251 526 } 252 ps U8 bit = psMetadataLookupU8(&mdok, header, valuekey);527 psImageMaskType bit = psMetadataLookupImageMask(&mdok, header, valuekey); 253 528 if (!mdok) { 254 529 psWarning("Unable to find header keyword %s when parsing mask", namekey); … … 260 535 psMetadataItem *item = psMetadataLookup(fpa->masks, name); // Item in recipe with current value 261 536 if (item) { 262 psAssert(item->type == PS_TYPE_ MASK, "Mask entry %s is not of a mask type (%x)",537 psAssert(item->type == PS_TYPE_IMAGE_MASK, "Mask entry %s is not of a mask type (%x)", 263 538 name, item->type); 264 if (item->data.PS_TYPE_ MASK_DATA != bit) {539 if (item->data.PS_TYPE_IMAGE_MASK_DATA != bit) { 265 540 psWarning("New mask entry %s doesn't match previously loaded entry: %x vs %x", 266 name, bit, item->data.PS_TYPE_ MASK_DATA);541 name, bit, item->data.PS_TYPE_IMAGE_MASK_DATA); 267 542 } 268 543 } else { 269 psMetadataAdd U8(fpa->masks, PS_LIST_TAIL, name, 0, NULL, bit);544 psMetadataAddImageMask(fpa->masks, PS_LIST_TAIL, name, 0, NULL, bit); 270 545 } 271 546 } … … 281 556 psMetadataItem *item; // Item from iteration 282 557 while ((item = psMetadataGetAndIncrement(iter))) { 283 if (item->type != PS_TYPE_ MASK) {558 if (item->type != PS_TYPE_IMAGE_MASK) { 284 559 psWarning("Recipe mask entry %s is not of a mask type (%x)", item->name, item->type); 285 560 continue; 286 561 } 287 562 if (!psMetadataLookup(fpa->masks, item->name)) { 288 psMetadataAdd U8(fpa->masks, PS_LIST_TAIL, item->name, 0, item->comment,289 item->data.PS_TYPE_ MASK_DATA);563 psMetadataAddImageMask(fpa->masks, PS_LIST_TAIL, item->name, 0, item->comment, 564 item->data.PS_TYPE_IMAGE_MASK_DATA); 290 565 } 291 566 } … … 294 569 return true; 295 570 } 296 297 298 bool pmFPAMaskWriteHeader(psMetadata *header, const pmFPA *fpa)299 {300 PS_ASSERT_METADATA_NON_NULL(header, false);301 PS_ASSERT_PTR_NON_NULL(fpa, false);302 303 maskRemoveHeader(header, "MSKNAM");304 maskRemoveHeader(header, "MSKVAL");305 if (psMetadataLookup(header, "MSKNUM")) {306 psMetadataRemoveKey(header, "MSKNUM");307 }308 309 char namekey[80], valuekey[80]; // Mask name and mask value header keywords310 int numMask = 0; // Number of mask entries311 312 psMetadataIterator *iter = psMetadataIteratorAlloc(fpa->masks, PS_LIST_HEAD, NULL); // Iterator313 psMetadataItem *item; // Item from iteration314 while ((item = psMetadataGetAndIncrement(iter))) {315 if (item->type != PS_TYPE_MASK) {316 psWarning("mask recipe entry %s is not of a mask type (%x)", item->name, item->type);317 continue;318 }319 320 snprintf(namekey, 64, "MSKNAM%02d", numMask);321 snprintf(valuekey, 64, "MSKVAL%02d", numMask);322 323 psMetadataAddStr(header, PS_LIST_TAIL, namekey, 0, "Bitmask bit name", item->name);324 psMetadataAddU8(header, PS_LIST_TAIL, valuekey, 0, "Bitmask bit value", item->data.PS_TYPE_MASK_DATA);325 numMask++;326 }327 psFree(iter);328 329 return psMetadataAddS32(header, PS_LIST_TAIL, "MSKNUM", 0, "Number of named mask entries", numMask);330 }331 332 571 #endif 333 334 335 psMaskType pmConfigMaskGet(const char *masks, const pmConfig *config)336 {337 psAssert(config, "Require configuration");338 PS_ASSERT_STRING_NON_EMPTY(masks, 0);339 340 bool mdok; // Status of MD lookup341 psMetadata *recipe = psMetadataLookupMetadata(&mdok, config->recipes, "MASKS"); // The recipe342 if (!recipe) {343 psError(PS_ERR_UNEXPECTED_NULL, false, "Unable to find MASKS recipe.");344 return 0;345 }346 return maskGet(recipe, masks);347 }348 349 350 bool pmConfigMaskSet(const pmConfig *config, const char *maskName, psMaskType maskValue)351 {352 psAssert(config, "Require configuration");353 PS_ASSERT_STRING_NON_EMPTY(maskName, false);354 355 psMetadata *recipe = psMetadataLookupMetadata(NULL, config->recipes, "MASKS"); // The recipe356 if (!recipe) {357 psError(PS_ERR_UNEXPECTED_NULL, false, "Unable to find MASKS recipe.");358 return false;359 }360 361 return psMetadataAddU8(recipe, PS_LIST_TAIL, maskName, PS_META_REPLACE, NULL, maskValue);362 }363 364 365 // replace the named masks in the recipe with values in the header:366 // replace only the names in the header in the recipe367 bool pmConfigMaskReadHeader(pmConfig *config, const psMetadata *header)368 {369 PS_ASSERT_PTR_NON_NULL(config, false);370 PS_ASSERT_METADATA_NON_NULL(header, false);371 372 bool status = false;373 374 psMetadata *recipe = psMetadataLookupMetadata(NULL, config->recipes, "MASKS"); // The recipe375 if (!recipe) {376 psError(PS_ERR_UNEXPECTED_NULL, false, "Unable to find MASKS recipe.");377 return false;378 }379 380 // MASK.VALUE and MARK.VALUE aren't usually set in the recipe, but may be set in the header: create fake381 // versions so that it won't complain later382 if (!psMetadataLookup(recipe, "MASK.VALUE")) {383 psMetadataAddU8(recipe, PS_LIST_TAIL, "MASK.VALUE", 0, "Bits to mask", 0);384 }385 if (!psMetadataLookup(recipe, "MARK.VALUE")) {386 psMetadataAddU8(recipe, PS_LIST_TAIL, "MARK.VALUE", 0, "Bits for marking", 0);387 }388 389 int nMask = psMetadataLookupS32(&status, header, "MSKNUM");390 if (!status) {391 if (psMetadataLookupBool(&status, config->camera, "MASK.FORCE")) {392 psWarning("No mask values in header. Assuming MASKS recipe is accurate because of MASK.FORCE");393 return true;394 }395 psError(PS_ERR_UNKNOWN, true, "Unable to find MSKNUM in header.");396 return false;397 }398 399 char namekey[80]; // Keyword name for symbolic name of mask entry400 char valuekey[80]; // Keyword name for value of mask entry401 for (int i = 0; i < nMask; i++) {402 snprintf(namekey, 64, "MSKNAM%02d", i);403 snprintf(valuekey, 64, "MSKVAL%02d", i);404 405 char *name = psMetadataLookupStr(&status, header, namekey);406 if (!status || !name) {407 psWarning("Unable to find header keyword %s when parsing mask", namekey);408 continue;409 }410 psU8 bit = psMetadataLookupU8(&status, header, valuekey);411 if (!status) {412 psWarning("Unable to find header keyword %s when parsing mask", namekey);413 continue;414 }415 416 // XXX validate that bit is a 2^n value?417 418 psString nameAlready = NULL; // Name of key with ".ALREADY" added419 psStringAppend(&nameAlready, "%s.ALREADY", name);420 bool already = psMetadataLookupBool(&status, recipe, nameAlready); // Already read this one?421 422 psMetadataItem *item = psMetadataLookup(recipe, name); // Item in recipe with current value423 if (item && item->type != PS_TYPE_MASK) {424 psWarning("Mask recipe entry is not of a mask type (%x)", item->type);425 item->type = PS_TYPE_MASK;426 }427 428 if (already) {429 if (item && item->data.U8 != bit) {430 psWarning("New mask recipe entry doesn't match previously loaded entry: %x vs %x",431 bit, item->data.U8);432 }433 } else {434 psMetadataAddBool(recipe, PS_LIST_TAIL, nameAlready, 0, "Already read this mask value", true);435 }436 437 if (!item) {438 psWarning("Mask recipe entry %s not in recipe\n", name);439 psMetadataAddU8(recipe, PS_LIST_TAIL, name, 0, "Bitmask bit value", bit);440 } else {441 item->data.U8 = bit;442 }443 444 psFree(nameAlready);445 }446 447 448 return true;449 }450 451 452 453 // write the named mask bits to the header454 bool pmConfigMaskWriteHeader(const pmConfig *config, psMetadata *header)455 {456 PS_ASSERT_PTR_NON_NULL(config, false);457 PS_ASSERT_METADATA_NON_NULL(header, false);458 459 maskRemoveHeader(header, "MSKNAM");460 maskRemoveHeader(header, "MSKVAL");461 if (psMetadataLookup(header, "MSKNUM")) {462 psMetadataRemoveKey(header, "MSKNUM");463 }464 465 char namekey[80];466 char valuekey[80];467 468 psMetadata *recipe = psMetadataLookupMetadata(NULL, config->recipes, "MASKS"); // The recipe469 if (!recipe) {470 psError(PS_ERR_UNEXPECTED_NULL, false, "Unable to find MASKS recipe.");471 return false;472 }473 474 int nMask = 0;475 476 psMetadataIterator *iter = psMetadataIteratorAlloc(recipe, PS_LIST_HEAD, NULL); // Iterator477 psMetadataItem *item; // Item from iteration478 while ((item = psMetadataGetAndIncrement(iter))) {479 if (strcmp(item->name + strlen(item->name) - strlen(".ALREADY"), ".ALREADY") == 0) {480 continue;481 }482 483 if (item->type != PS_DATA_U8) {484 psWarning("mask recipe entry %s is not a bit value\n", item->name);485 continue;486 }487 488 snprintf(namekey, 64, "MSKNAM%02d", nMask);489 snprintf(valuekey, 64, "MSKVAL%02d", nMask);490 491 psMetadataAddStr(header, PS_LIST_TAIL, namekey, 0, "Bitmask bit name", item->name);492 psMetadataAddU8(header, PS_LIST_TAIL, valuekey, 0, "Bitmask bit value", item->data.U8);493 nMask++;494 }495 psFree(iter);496 497 psMetadataAddS32(header, PS_LIST_TAIL, "MSKNUM", 0, "Bitmask bit count", nMask);498 return true;499 }500 501 502 bool pmConfigMaskSetBits(psMaskType *outMaskValue, psMaskType *outMarkValue, const pmConfig *config)503 {504 PS_ASSERT_PTR_NON_NULL(config, false);505 506 psMetadata *recipe = psMetadataLookupMetadata(NULL, config->recipes, "MASKS"); // The recipe507 if (!recipe) {508 psError(PS_ERR_UNEXPECTED_NULL, false, "Unable to find MASKS recipe.");509 return false;510 }511 512 return maskSetValues(outMaskValue, outMarkValue, recipe);513 } -
trunk/psModules/src/config/pmConfigMask.h
r18598 r21183 4 4 * @author Paul Price, IfA 5 5 * 6 * @version $Revision: 1. 4$ $Name: not supported by cvs2svn $7 * @date $Date: 200 8-07-17 20:37:20$6 * @version $Revision: 1.5 $ $Name: not supported by cvs2svn $ 7 * @date $Date: 2009-01-27 06:39:38 $ 8 8 * Copyright 2007 Institute for Astronomy, University of Hawaii 9 9 */ … … 20 20 /// @{ 21 21 22 // structure to hold the properties of a mask value 23 typedef struct { 24 char *badMaskName; // name for "bad" (i.e., mask me please) pixels 25 char *fallbackName; // Fallback name in case a bad mask name is not defined 26 psImageMaskType defaultMaskValue; // Default value in case a bad mask name and its fallback are not defined 27 bool isBad; // include this value as part of the MASK.VALUE entry (generically bad) 28 } pmConfigMaskInfo; 29 30 // pmConfigMaskSetInMetadata examines named mask values and set the bits for maskValue and 31 // markValue. Ensures that the below-named mask values are set, and calculates the mask value 32 // to catch all of the mask values marked as 'bad'. Supplies the fallback name if the primary 33 // name is not found, or the default values if the fallback name is not found. 34 bool pmConfigMaskSetInMetadata(psImageMaskType *outMaskValue, // Value of MASK.VALUE, returned 35 psImageMaskType *outMarkValue, // Value of MARK.VALUE, returned 36 psMetadata *source // Source of mask bits 37 ); 38 39 40 // Get a mask value by name(s) 41 psImageMaskType pmConfigMaskGetFromMetadata(psMetadata *source, // Source of masks 42 const char *masks // Mask values to get 43 ); 44 45 46 // lookup an image mask value by name from a psMetadata, without requiring the entry to 47 // be of type psImageMaskType, but verifying that it will fit in psImageMaskType 48 psImageMaskType psMetadataLookupImageMaskFromGeneric (bool *status, const psMetadata *md, const char *name); 49 50 // Remove from the header keywords starting with the provided string 51 int pmConfigMaskRemoveHeaderKeywords(psMetadata *header, // Header from which to remove keywords 52 const char *start // Remove keywords that start with this string 53 ); 54 22 55 /// Return a mask value given a list of symbolic names 23 56 /// 24 57 /// The mask values are derived from the MASKS recipe 25 ps MaskType pmConfigMaskGet(const char *masks, ///< List of symbolic names, space/comma delimited58 psImageMaskType pmConfigMaskGet(const char *masks, ///< List of symbolic names, space/comma delimited 26 59 const pmConfig *config ///< Configuration 27 60 ); 28 61 29 bool pmConfigMaskSet(const pmConfig *config, const char *maskName, ps MaskType maskValue);62 bool pmConfigMaskSet(const pmConfig *config, const char *maskName, psImageMaskType maskValue); 30 63 31 64 // replace the named masks in the recipe with values in the header: … … 36 69 bool pmConfigMaskWriteHeader(const pmConfig *config, psMetadata *header); 37 70 38 bool pmConfigMaskSetBits(ps MaskType *outMaskValue, psMaskType *outMarkValue, const pmConfig *config);71 bool pmConfigMaskSetBits(psImageMaskType *outMaskValue, psImageMaskType *outMarkValue, const pmConfig *config); 39 72 40 73 #endif -
trunk/psModules/src/detrend/pmBias.c
r19432 r21183 45 45 inImage->data.F32[i][j] -= subImage->data.F32[i+yOffset][j+xOffset]; 46 46 if (inMask && subMask) { 47 inMask->data. U8[i][j] |= subMask->data.U8[i+yOffset][j+xOffset];47 inMask->data.PS_TYPE_IMAGE_MASK_DATA[i][j] |= subMask->data.PS_TYPE_IMAGE_MASK_DATA[i+yOffset][j+xOffset]; 48 48 } 49 49 } … … 54 54 inImage->data.F32[i][j] -= subImage->data.F32[i+yOffset][j+xOffset] * scale; 55 55 if (inMask && subMask) { 56 inMask->data. U8[i][j] |= subMask->data.U8[i+yOffset][j+xOffset];56 inMask->data.PS_TYPE_IMAGE_MASK_DATA[i][j] |= subMask->data.PS_TYPE_IMAGE_MASK_DATA[i+yOffset][j+xOffset]; 57 57 } 58 58 } -
trunk/psModules/src/detrend/pmDark.c
r19432 r21183 103 103 { 104 104 psArray *values = psArrayAlloc(inputs->n); 105 psVector *roMask = psVectorAlloc(inputs->n, PS_TYPE_ U8); // Mask for bad readouts105 psVector *roMask = psVectorAlloc(inputs->n, PS_TYPE_VECTOR_MASK); // Mask for bad readouts 106 106 psVector *norm = normConcept ? psVectorAlloc(inputs->n, PS_TYPE_F32) : NULL; // Normalizations for each 107 107 psVector *orders = psVectorAlloc(ordinates->n, PS_TYPE_U8); // Orders for each concept … … 121 121 if (!ordinateLookup(&normValue, &inRange, normConcept, false, NAN, NAN, readout)) { 122 122 psWarning("Unable to find value of %s for readout %d", normConcept, i); 123 roMask->data. U8[i] = 0xff;123 roMask->data.PS_TYPE_VECTOR_MASK_DATA[i] = 0xff; 124 124 norm->data.F32[i] = NAN; 125 125 numBadInputs++; … … 128 128 if (normValue == 0.0) { 129 129 psWarning("Normalisation value (%s) for readout %d is zero", normConcept, i); 130 roMask->data. U8[i] = 0xff;130 roMask->data.PS_TYPE_VECTOR_MASK_DATA[i] = 0xff; 131 131 norm->data.F32[i] = NAN; 132 132 numBadInputs++; … … 151 151 for (int j = 0; j < inputs->n; j++) { 152 152 psVector *val = values->data[j]; // Value vector for readout 153 if (roMask->data. U8[j]) {153 if (roMask->data.PS_TYPE_VECTOR_MASK_DATA[j]) { 154 154 val->data.F32[i] = NAN; 155 155 continue; … … 159 159 float value = NAN; // Value of ordinate 160 160 if (!ordinateLookup(&value, &inRange, ord->name, ord->scale, ord->min, ord->max, readout)) { 161 roMask->data. U8[j] = 0xff;161 roMask->data.PS_TYPE_VECTOR_MASK_DATA[j] = 0xff; 162 162 val->data.F32[i] = NAN; 163 163 numBadInputs++; … … 165 165 } 166 166 if (!inRange) { 167 roMask->data. U8[j] = 0xff;167 roMask->data.PS_TYPE_VECTOR_MASK_DATA[j] = 0xff; 168 168 val->data.F32[i] = NAN; 169 169 numBadInputs++; … … 263 263 264 264 // do the combine work for this portion of the output (range is set by input data) 265 bool pmDarkCombine(pmCell *output, const psArray *inputs, int iter, float rej, ps MaskType maskVal)265 bool pmDarkCombine(pmCell *output, const psArray *inputs, int iter, float rej, psImageMaskType maskVal) 266 266 { 267 267 PS_ASSERT_PTR_NON_NULL(output, false); … … 314 314 // Iterate over pixels, fitting polynomial 315 315 psVector *pixels = psVectorAlloc(inputs->n, PS_TYPE_F32); // Stack of pixels 316 psVector *mask = psVectorAlloc(inputs->n, PS_TYPE_ MASK); // Mask for stack316 psVector *mask = psVectorAlloc(inputs->n, PS_TYPE_VECTOR_MASK); // Mask for stack 317 317 for (int i = minInputRows; i < maxInputRows; i++) { 318 318 int yOut = i - outReadout->row0; // y position on output readout … … 330 330 psVectorInit(mask, 0); 331 331 for (int r = 0; r < inputs->n; r++) { 332 if (roMask->data. U8[r]) {333 mask->data.PS_TYPE_ MASK_DATA[r] = 0xff;332 if (roMask->data.PS_TYPE_VECTOR_MASK_DATA[r]) { 333 mask->data.PS_TYPE_VECTOR_MASK_DATA[r] = 0xff; 334 334 continue; 335 335 } … … 343 343 } 344 344 if (readout->mask) { 345 mask->data.PS_TYPE_ MASK_DATA[r] = readout->mask->data.PS_TYPE_MASK_DATA[yIn][xIn];345 mask->data.PS_TYPE_VECTOR_MASK_DATA[r] = (readout->mask->data.PS_TYPE_IMAGE_MASK_DATA[yIn][xIn] & maskVal); 346 346 } 347 347 348 348 } 349 349 350 if (!psPolynomialMDClipFit(poly, pixels, NULL, mask, maskVal, values, iter, rej)) {350 if (!psPolynomialMDClipFit(poly, pixels, NULL, mask, 0xff, values, iter, rej)) { 351 351 psErrorClear(); // Nothing we can do about it 352 352 psVectorInit(poly->coeff, NAN); … … 376 376 const psVector *values = job->args->data[3]; // Values for each ordinate 377 377 378 ps MaskType bad = PS_SCALAR_VALUE(job->args->data[4], U8); // Mask value to give bad pixels378 psImageMaskType bad = PS_SCALAR_VALUE(job->args->data[4], PS_TYPE_IMAGE_MASK_DATA); // Mask value to give bad pixels 379 379 bool doNorm = PS_SCALAR_VALUE(job->args->data[5], U8); // Normalise values? 380 380 float norm = PS_SCALAR_VALUE(job->args->data[6], F32); // Value by which to normalise … … 386 386 387 387 bool pmDarkApplyScan(pmReadout *readout, const pmCell *dark, const psVector *orders, const psVector *values, 388 ps MaskType bad, bool doNorm, float norm, int rowStart, int rowStop)388 psImageMaskType bad, bool doNorm, float norm, int rowStart, int rowStop) 389 389 { 390 390 int numCols = readout->image->numCols; … … 405 405 readout->image->data.F32[y][x] -= value; 406 406 if (readout->mask && !isfinite(value)) { 407 readout->mask->data.PS_TYPE_ MASK_DATA[y][x] = bad;407 readout->mask->data.PS_TYPE_IMAGE_MASK_DATA[y][x] = bad; 408 408 } 409 409 } … … 414 414 } 415 415 416 bool pmDarkApply(pmReadout *readout, pmCell *dark, ps MaskType bad)416 bool pmDarkApply(pmReadout *readout, pmCell *dark, psImageMaskType bad) 417 417 { 418 418 PS_ASSERT_PTR_NON_NULL(readout, false); … … 424 424 PS_ASSERT_IMAGE_NON_NULL(readout->mask, false); 425 425 PS_ASSERT_IMAGES_SIZE_EQUAL(readout->mask, readout->image, false); 426 PS_ASSERT_IMAGE_TYPE(readout->mask, PS_TYPE_ MASK, false);426 PS_ASSERT_IMAGE_TYPE(readout->mask, PS_TYPE_IMAGE_MASK, false); 427 427 } 428 428 int numTerms = dark->readouts->n; // Number of polynomial terms … … 496 496 psArrayAdd(job->args, 1, orders); 497 497 psArrayAdd(job->args, 1, values); 498 PS_ARRAY_ADD_SCALAR(job->args, bad, PS_TYPE_ MASK);498 PS_ARRAY_ADD_SCALAR(job->args, bad, PS_TYPE_IMAGE_MASK); 499 499 PS_ARRAY_ADD_SCALAR(job->args, doNorm, PS_TYPE_U8); 500 500 PS_ARRAY_ADD_SCALAR(job->args, norm, PS_TYPE_F32); -
trunk/psModules/src/detrend/pmDark.h
r19432 r21183 37 37 int iter, // Number of rejection iterations 38 38 float rej, // Rejection threshold (standard deviations) 39 ps MaskType maskVal // Value to mask39 psImageMaskType maskVal // Value to mask 40 40 ); 41 41 … … 49 49 const psVector *orders, // Polynomial orders for each ordinate 50 50 const psVector *values, // Values for each ordinate 51 ps MaskType bad, // Value to give bad pixels51 psImageMaskType bad, // Value to give bad pixels 52 52 bool doNorm, // Normalise values? 53 53 float norm, // Value by which to normalise … … 58 58 bool pmDarkApply(pmReadout *readout, // Readout to which to apply dark 59 59 pmCell *dark, // Dark to apply 60 ps MaskType bad // Mask value to give bad pixels60 psImageMaskType bad // Mask value to give bad pixels 61 61 ); 62 62 -
trunk/psModules/src/detrend/pmFlatField.c
r19432 r21183 22 22 const psImage *flatMask = job->args->data[3]; // Flat-field mask 23 23 24 ps MaskType badFlat = PS_SCALAR_VALUE(job->args->data[4],U8);24 psImageMaskType badFlat = PS_SCALAR_VALUE(job->args->data[4],PS_TYPE_IMAGE_MASK_DATA); 25 25 int xOffset = PS_SCALAR_VALUE(job->args->data[5],S32); 26 26 int yOffset = PS_SCALAR_VALUE(job->args->data[6],S32); … … 38 38 ps##TYPE flatValue = flatImage->data.TYPE[j + yOffset][i + xOffset]; \ 39 39 if (!isfinite(flatValue) || flatValue <= 0.0 || \ 40 (flatMask && flatMask->data. U8[j + yOffset][i + xOffset])) { \40 (flatMask && flatMask->data.PS_TYPE_IMAGE_MASK_DATA[j + yOffset][i + xOffset])) { \ 41 41 if (inMask) { \ 42 inMask->data.PS_TYPE_ MASK_DATA[j][i] |= badFlat; \42 inMask->data.PS_TYPE_IMAGE_MASK_DATA[j][i] |= badFlat; \ 43 43 } \ 44 44 inImage->data.TYPE[j][i] = SPECIAL; \ … … 51 51 52 52 bool pmFlatFieldScan(psImage *inImage, psImage *inMask, const psImage *flatImage, const psImage *flatMask, 53 ps MaskType badFlat, int xOffset, int yOffset, int rowStart, int rowStop)53 psImageMaskType badFlat, int xOffset, int yOffset, int rowStart, int rowStop) 54 54 { 55 55 switch (inImage->type.type) { … … 72 72 } 73 73 74 bool pmFlatField(pmReadout *in, const pmReadout *flat, ps MaskType badFlat)74 bool pmFlatField(pmReadout *in, const pmReadout *flat, psImageMaskType badFlat) 75 75 { 76 76 PS_ASSERT_PTR_NON_NULL(in, false); … … 81 81 PS_ASSERT_IMAGE_NON_EMPTY(flat->image, false); 82 82 if (in->mask) { 83 PS_ASSERT_IMAGE_TYPE(in->mask, PS_TYPE_ MASK, false);83 PS_ASSERT_IMAGE_TYPE(in->mask, PS_TYPE_IMAGE_MASK, false); 84 84 PS_ASSERT_IMAGES_SIZE_EQUAL(in->mask, in->image, false); 85 85 } 86 86 PS_ASSERT_IMAGE_TYPE(flat->image, in->image->type.type, false); 87 87 if (flat->mask) { 88 PS_ASSERT_IMAGE_TYPE(flat->mask, PS_TYPE_ MASK, false);88 PS_ASSERT_IMAGE_TYPE(flat->mask, PS_TYPE_IMAGE_MASK, false); 89 89 PS_ASSERT_IMAGES_SIZE_EQUAL(flat->mask, flat->image, false); 90 90 } … … 148 148 psArrayAdd(job->args, 1, flatImage); 149 149 psArrayAdd(job->args, 1, flatMask); 150 PS_ARRAY_ADD_SCALAR(job->args, badFlat, PS_TYPE_ U8);150 PS_ARRAY_ADD_SCALAR(job->args, badFlat, PS_TYPE_IMAGE_MASK); 151 151 PS_ARRAY_ADD_SCALAR(job->args, xOffset, PS_TYPE_S32); 152 152 PS_ARRAY_ADD_SCALAR(job->args, yOffset, PS_TYPE_S32); -
trunk/psModules/src/detrend/pmFlatField.h
r19432 r21183 5 5 * @author Paul Price, IfA 6 6 * 7 * @version $Revision: 1.1 4$ $Name: not supported by cvs2svn $8 * @date $Date: 200 8-09-09 04:10:14$7 * @version $Revision: 1.15 $ $Name: not supported by cvs2svn $ 8 * @date $Date: 2009-01-27 06:39:38 $ 9 9 * Copyright 2004-2006 Institute for Astronomy, University of Hawaii 10 10 */ … … 25 25 bool pmFlatField(pmReadout *in, ///< Readout with input image 26 26 const pmReadout *flat, ///< Readout with flat image 27 ps MaskType badFlat ///< Mask value to give bad flat pixels27 psImageMaskType badFlat ///< Mask value to give bad flat pixels 28 28 ); 29 29 … … 38 38 const psImage *flatImage, ///< Flat-field image 39 39 const psImage *flatMask, ///< Flat-field mask 40 ps MaskType badFlag, ///< Mask value to give bad pixels40 psImageMaskType badFlag, ///< Mask value to give bad pixels 41 41 int xOffset, int yOffset, ///< Offset between input and flat-field 42 42 int rowStart, int rowStop ///< Scan range -
trunk/psModules/src/detrend/pmFlatNormalize.c
r9730 r21183 9 9 10 10 #include "pmFlatNormalize.h" 11 12 // XXX this function should take the abstract mask names and set bad values in a more precise way 11 13 12 14 // I'm not sure that many many iterations are required, but rather suspect that the system converges within a … … 55 57 // Take the logarithms 56 58 psImage *flux = psImageCopy(NULL, bgMatrix, PS_TYPE_F32); // Copy of the input flux levels matrix 57 psImage *fluxMask = psImageAlloc(numChips, numExps, PS_TYPE_ U8); // Mask for bad measurements59 psImage *fluxMask = psImageAlloc(numChips, numExps, PS_TYPE_IMAGE_MASK); // Mask for bad measurements 58 60 psImageInit(fluxMask, 0); 59 psVector *gainMask = psVectorAlloc(numChips, PS_TYPE_ U8); // Mask for bad gains61 psVector *gainMask = psVectorAlloc(numChips, PS_TYPE_VECTOR_MASK); // Mask for bad gains 60 62 psVectorInit(gainMask, 0); 61 psVector *expMask = psVectorAlloc(numExps, PS_TYPE_ U8); // Mask for bad exposures63 psVector *expMask = psVectorAlloc(numExps, PS_TYPE_VECTOR_MASK); // Mask for bad exposures 62 64 psVectorInit(expMask, 0); 63 65 for (int i = 0; i < numChips; i++) { … … 75 77 } else { 76 78 // Blank out this measurement 77 fluxMask->data. U8[j][i] = 1;79 fluxMask->data.PS_TYPE_IMAGE_MASK_DATA[j][i] = 1; 78 80 flux->data.F32[j][i] = NAN; 79 81 } … … 90 92 int numFluxes = 0; // Number of fluxes 91 93 for (int i = 0; i < numExps; i++) { 92 if (expMask->data. U8[i]) {94 if (expMask->data.PS_TYPE_VECTOR_MASK_DATA[i]) { 93 95 psTrace("psModules.detrend", 7, "Flux for exposure %d is masked.\n", i); 94 96 continue; … … 98 100 int number = 0; // Number of chips contributing 99 101 for (int j = 0; j < numChips; j++) { 100 if (!gainMask->data. U8[j] && !fluxMask->data.U8[i][j]) {102 if (!gainMask->data.PS_TYPE_VECTOR_MASK_DATA[j] && !fluxMask->data.PS_TYPE_IMAGE_MASK_DATA[i][j]) { 101 103 sum += flux->data.F32[i][j] - chipGains->data.F32[j]; 102 104 number++; … … 106 108 expFluxes->data.F32[i] = sum / (float)number; 107 109 } else { 108 expMask->data. U8[i] = 1;110 expMask->data.PS_TYPE_VECTOR_MASK_DATA[i] = 1; 109 111 expFluxes->data.F32[i] = NAN; 110 112 } … … 116 118 int numGains = 0; // Number of gains 117 119 for (int i = 0; i < numChips; i++) { 118 if (gainMask->data. U8[i]) {120 if (gainMask->data.PS_TYPE_VECTOR_MASK_DATA[i]) { 119 121 continue; 120 122 } … … 122 124 int number = 0; // Numer of sources contributing 123 125 for (int j = 0; j < numExps; j++) { 124 if (!fluxMask->data. U8[j][i]) {126 if (!fluxMask->data.PS_TYPE_IMAGE_MASK_DATA[j][i]) { 125 127 sum += flux->data.F32[j][i] - expFluxes->data.F32[j]; 126 128 number++; … … 130 132 chipGains->data.F32[i] = sum / (float)number; 131 133 } else { 132 gainMask->data. U8[i] = 1;134 gainMask->data.PS_TYPE_VECTOR_MASK_DATA[i] = 1; 133 135 chipGains->data.F32[i] = NAN; 134 136 } … … 144 146 diff = 0.0; 145 147 for (int i = 0; i < numChips; i++) { 146 if (gainMask->data. U8[i]) {148 if (gainMask->data.PS_TYPE_VECTOR_MASK_DATA[i]) { 147 149 continue; 148 150 } … … 151 153 } 152 154 for (int i = 0; i < numExps; i++) { 153 if (expMask->data. U8[i]) {155 if (expMask->data.PS_TYPE_VECTOR_MASK_DATA[i]) { 154 156 continue; 155 157 } … … 171 173 // Un-log the vectors 172 174 for (int i = 0; i < numChips; i++) { 173 if (!gainMask->data. U8[i]) {175 if (!gainMask->data.PS_TYPE_VECTOR_MASK_DATA[i]) { 174 176 chipGains->data.F32[i] = expf(chipGains->data.F32[i]); 175 177 } 176 178 } 177 179 for (int i = 0; i < numExps; i++) { 178 if (!expMask->data. U8[i]) {180 if (!expMask->data.PS_TYPE_VECTOR_MASK_DATA[i]) { 179 181 expFluxes->data.F32[i] = expf(expFluxes->data.F32[i]); 180 182 } -
trunk/psModules/src/detrend/pmFringeStats.c
r13776 r21183 70 70 fringe->x = psVectorRecycle(fringe->x, fringe->nRequested, PS_TYPE_F32); 71 71 fringe->y = psVectorRecycle(fringe->y, fringe->nRequested, PS_TYPE_F32); 72 fringe->mask = psVectorRecycle(fringe->mask, fringe->nRequested, PS_TYPE_ U8);72 fringe->mask = psVectorRecycle(fringe->mask, fringe->nRequested, PS_TYPE_VECTOR_MASK); 73 73 fringe->x->n = fringe->y->n = fringe->mask->n = fringe->nRequested; 74 74 psVectorInit(fringe->mask, 0); … … 115 115 if (mask) { 116 116 PS_ASSERT_VECTOR_NON_NULL(mask, false); 117 PS_ASSERT_VECTOR_TYPE(mask, PS_TYPE_ U8, false);117 PS_ASSERT_VECTOR_TYPE(mask, PS_TYPE_VECTOR_MASK, false); 118 118 PS_ASSERT_VECTOR_SIZE(mask, (long)numRows, false); 119 119 } … … 142 142 psMetadataAddF32(row, PS_LIST_TAIL, "x", PS_META_REPLACE, "Fringe position in x", x->data.F32[i]); 143 143 psMetadataAddF32(row, PS_LIST_TAIL, "y", PS_META_REPLACE, "Fringe position in y", y->data.F32[i]); 144 ps U8maskValue = 0;145 if (mask && mask->data. U8[i]) {144 psVectorMaskType maskValue = 0; 145 if (mask && mask->data.PS_TYPE_VECTOR_MASK_DATA[i]) { 146 146 maskValue = 0xff; 147 147 } 148 psMetadataAdd U8(row, PS_LIST_TAIL, "mask", PS_META_REPLACE, "Mask", maskValue);148 psMetadataAddVectorMask(row, PS_LIST_TAIL, "mask", PS_META_REPLACE, "Mask", maskValue); 149 149 table->data[i] = row; 150 150 } … … 207 207 psVector *x = psVectorAlloc(numRows, PS_TYPE_F32); // x position 208 208 psVector *y = psVectorAlloc(numRows, PS_TYPE_F32); // y position 209 psVector *mask = psVectorAlloc(numRows, PS_TYPE_ U8); // mask209 psVector *mask = psVectorAlloc(numRows, PS_TYPE_VECTOR_MASK); // mask 210 210 regions->x = x; 211 211 regions->y = y; 212 212 regions->mask = mask; 213 213 214 #define READ_REGIONS_ROW(VECTOR, TYPE, NAME, DESCRIPTION) \215 VECTOR->data. TYPE[i] = psMetadataLookup##TYPE(&mdok, row, NAME); \214 #define READ_REGIONS_ROW(VECTOR, TYPE, DATATYPE, NAME, DESCRIPTION) \ 215 VECTOR->data.DATATYPE[i] = psMetadataLookup##TYPE(&mdok, row, NAME); \ 216 216 if (!mdok) { \ 217 217 psError(PS_ERR_IO, true, "Unable to find " #DESCRIPTION " .\n"); \ … … 224 224 for (long i = 0; i < numRows; i++) { 225 225 psMetadata *row = table->data[i]; // Table row 226 READ_REGIONS_ROW(x, F32, "x", "x position");227 READ_REGIONS_ROW(y, F32, "y", "y position");228 READ_REGIONS_ROW(mask, U8, "mask", "mask");226 READ_REGIONS_ROW(x, F32, F32, "x", "x position"); 227 READ_REGIONS_ROW(y, F32, F32, "y", "y position"); 228 READ_REGIONS_ROW(mask, VectorMask, PS_TYPE_VECTOR_MASK_DATA, "mask", "mask"); 229 229 } 230 230 psFree(table); … … 259 259 } 260 260 261 pmFringeStats *pmFringeStatsMeasure(pmFringeRegions *fringe, const pmReadout *readout, ps MaskType maskVal)261 pmFringeStats *pmFringeStatsMeasure(pmFringeRegions *fringe, const pmReadout *readout, psImageMaskType maskVal) 262 262 { 263 263 PS_ASSERT_PTR_NON_NULL(fringe, NULL); … … 490 490 newRegions->x = psVectorAlloc(numPoints, PS_TYPE_F32); 491 491 newRegions->y = psVectorAlloc(numPoints, PS_TYPE_F32); 492 newRegions->mask = psVectorAlloc(numPoints, PS_TYPE_ U8);492 newRegions->mask = psVectorAlloc(numPoints, PS_TYPE_VECTOR_MASK); 493 493 pmFringeStats *newStats = pmFringeStatsAlloc(newRegions); // The new list of statistics 494 494 … … 500 500 memcpy(&newRegions->x->data.F32[offset], regions->x->data.F32, regions->x->n * sizeof(psF32)); 501 501 memcpy(&newRegions->y->data.F32[offset], regions->y->data.F32, regions->y->n * sizeof(psF32)); 502 memcpy(&newRegions->mask->data. U8[offset], regions->mask->data.U8, regions->mask->n * sizeof(psU8));502 memcpy(&newRegions->mask->data.PS_TYPE_VECTOR_MASK_DATA[offset], regions->mask->data.PS_TYPE_VECTOR_MASK_DATA, regions->mask->n * sizeof(psVectorMaskType)); 503 503 memcpy(&newStats->f->data.F32[offset], fringe->f->data.F32, fringe->f->n * sizeof(psF32)); 504 504 memcpy(&newStats->df->data.F32[offset], fringe->df->data.F32, fringe->df->n * sizeof(psF32)); … … 549 549 if (mask) { 550 550 PS_ASSERT_VECTOR_NON_NULL(mask, false); 551 PS_ASSERT_VECTOR_TYPE(mask, PS_TYPE_ U8, false);551 PS_ASSERT_VECTOR_TYPE(mask, PS_TYPE_VECTOR_MASK, false); 552 552 PS_ASSERT_VECTOR_SIZE(mask, (long)numRows, false); 553 553 } … … 580 580 psMetadataAddF32(row, PS_LIST_TAIL, "x", PS_META_REPLACE, "Fringe position in x", x->data.F32[i]); 581 581 psMetadataAddF32(row, PS_LIST_TAIL, "y", PS_META_REPLACE, "Fringe position in y", y->data.F32[i]); 582 ps U8maskValue = 0; // Mask value583 if (mask && mask->data. U8[i]) {582 psVectorMaskType maskValue = 0; // Mask value 583 if (mask && mask->data.PS_TYPE_VECTOR_MASK_DATA[i]) { 584 584 maskValue = 0xff; 585 585 } … … 601 601 psFree(df); 602 602 603 psMetadataAdd U8(row, PS_LIST_TAIL, "mask", PS_META_REPLACE, "Mask", maskValue);603 psMetadataAddVectorMask(row, PS_LIST_TAIL, "mask", PS_META_REPLACE, "Mask", maskValue); 604 604 table->data[i] = row; 605 605 } … … 648 648 psVector *x = psVectorAlloc(numRows, PS_TYPE_F32); // x position 649 649 psVector *y = psVectorAlloc(numRows, PS_TYPE_F32); // y position 650 psVector *mask = psVectorAlloc(numRows, PS_TYPE_ U8); // mask650 psVector *mask = psVectorAlloc(numRows, PS_TYPE_VECTOR_MASK); // mask 651 651 regions->x = x; 652 652 regions->y = y; … … 656 656 psArray *fringes = NULL; // Array of fringes, to return 657 657 658 #define READ_FRINGES_VECTOR_ROW(VECTOR, TYPE, NAME, DESCRIPTION) \658 #define READ_FRINGES_VECTOR_ROW(VECTOR, TYPE, DATATYPE, NAME, DESCRIPTION) \ 659 659 { \ 660 VECTOR->data. TYPE[i] = psMetadataLookup##TYPE(&mdok, row, NAME); \660 VECTOR->data.DATATYPE[i] = psMetadataLookup##TYPE(&mdok, row, NAME); \ 661 661 if (!mdok) { \ 662 662 psError(PS_ERR_IO, true, "Unable to find " #DESCRIPTION " for row %ld.\n", i); \ … … 686 686 } 687 687 688 // XXX : need to extend this to support arbitrary types for the vectors on disk 688 689 // Translate the table into vectors 689 690 for (long i = 0; i < numRows; i++) { 690 691 psMetadata *row = table->data[i]; // Table row 691 READ_FRINGES_VECTOR_ROW(x, F32, "x", "x position");692 READ_FRINGES_VECTOR_ROW(y, F32, "y", "y position");693 READ_FRINGES_VECTOR_ROW(mask, U8, "mask", "mask");692 READ_FRINGES_VECTOR_ROW(x, F32, F32, "x", "x position"); 693 READ_FRINGES_VECTOR_ROW(y, F32, F32, "y", "y position"); 694 READ_FRINGES_VECTOR_ROW(mask, VectorMask, PS_TYPE_VECTOR_MASK_DATA, "mask", "mask"); 694 695 READ_FRINGES_ARRAY_ROW(f, F32, "f", "fringe measurement"); 695 696 READ_FRINGES_ARRAY_ROW(df, F32, "df", "fringe error"); … … 782 783 double matrix = 0.0; // The matrix sum 783 784 for (int k = 0; k < numPoints; k++) { 784 if (!mask->data. U8[k]) {785 if (!mask->data.PS_TYPE_VECTOR_MASK_DATA[k]) { 785 786 psF32 f1 = (fringe1) ? fringe1->data.F32[k] : 1.0; // Contribution from i fringe 786 787 psF32 f2 = (fringe2) ? fringe2->data.F32[k] : 1.0; // Contribution from j fringe … … 799 800 double vector = 0.0; // The vector sum 800 801 for (int k = 0; k < numPoints; k++) { 801 if (!mask->data. U8[k]) {802 if (!mask->data.PS_TYPE_VECTOR_MASK_DATA[k]) { 802 803 psF32 f1 = (fringe1) ? fringe1->data.F32[k] : 1.0; // Contribution from fringe 1 803 804 psF32 s = science->f->data.F32[k]; // Contribution from science measurement … … 855 856 856 857 for (int i = 0; i < diff->n; i++) { 857 if (!mask->data. U8[i]) {858 if (!mask->data.PS_TYPE_VECTOR_MASK_DATA[i]) { 858 859 float difference = science->f->data.F32[i] - scale->coeff->data.F32[0]; 859 860 for (int j = 0; j < fringes->n; j++) { … … 877 878 assert(diffs->type.type == PS_TYPE_F32); 878 879 assert(mask); 879 assert(mask->type.type == PS_TYPE_ U8);880 assert(mask->type.type == PS_TYPE_VECTOR_MASK); 880 881 assert(diffs->n == mask->n); 881 882 … … 888 889 int numClipped = 0; // Number clipped 889 890 for (int i = 0; i < diffs->n; i++) { 890 psTrace("psModules.detrend", 10, "Region %d (%d): %f\n", i, mask->data. U8[i], diffs->data.F32[i]);891 if (!mask->data. U8[i] && fabs(diffs->data.F32[i]) > middle + thresh) {891 psTrace("psModules.detrend", 10, "Region %d (%d): %f\n", i, mask->data.PS_TYPE_VECTOR_MASK_DATA[i], diffs->data.F32[i]); 892 if (!mask->data.PS_TYPE_VECTOR_MASK_DATA[i] && fabs(diffs->data.F32[i]) > middle + thresh) { 892 893 psTrace("psModules.detrend", 5, "Masking %d: %f\n", i, diffs->data.F32[i]); 893 mask->data. U8[i] = 1;894 mask->data.PS_TYPE_VECTOR_MASK_DATA[i] = 1; 894 895 numClipped++; 895 896 } … … 931 932 // Set up the mask 932 933 if (!regions->mask) { 933 regions->mask = psVectorAlloc(numRegions, PS_TYPE_ U8);934 regions->mask = psVectorAlloc(numRegions, PS_TYPE_VECTOR_MASK); 934 935 psVectorInit(regions->mask, 0); 935 936 } … … 946 947 for (int j = 0; j < numRegions; j++) { 947 948 if (!isfinite(fringe->f->data.F32[j])) { 948 mask->data. U8[j] = 1;949 mask->data.PS_TYPE_VECTOR_MASK_DATA[j] = 1; 949 950 psTrace("psModules.detrend", 9, "Masking region %d because not finite in fringe %d.\n", j, i); 950 951 } … … 956 957 FILE *f = fopen ("fringe.dat", "w"); 957 958 for (int j = 0; j < numRegions; j++) { 958 if (mask->data. U8[j]) continue;959 if (mask->data.PS_TYPE_VECTOR_MASK_DATA[j]) continue; 959 960 fprintf (f, "%d %f %f ", j, science->f->data.F32[j], science->df->data.F32[j]); 960 961 for (int i = 0; i < fringes->n; i++) { … … 1014 1015 // XXX note that this modifies the input fringe images 1015 1016 psImage *pmFringeCorrect(pmReadout *readout, pmFringeRegions *fringes, psArray *fringeImages, 1016 psArray *fringeStats, ps MaskType maskVal, float rej,1017 psArray *fringeStats, psImageMaskType maskVal, float rej, 1017 1018 unsigned int nIter, float keepFrac) 1018 1019 { -
trunk/psModules/src/detrend/pmFringeStats.h
r11253 r21183 5 5 * @author Paul Price, IfA 6 6 * 7 * @version $Revision: 1.1 2$ $Name: not supported by cvs2svn $8 * @date $Date: 200 7-01-24 02:54:15$7 * @version $Revision: 1.13 $ $Name: not supported by cvs2svn $ 8 * @date $Date: 2009-01-27 06:39:38 $ 9 9 * Copyright 2004-2006 Institute for Astronomy, University of Hawaii 10 10 */ … … 102 102 pmFringeStats *pmFringeStatsMeasure(pmFringeRegions *fringe, ///< Fringe regions at which to measure 103 103 const pmReadout *readout, ///< Readout for which to measure 104 ps MaskType maskVal ///< Mask value for image104 psImageMaskType maskVal ///< Mask value for image 105 105 ); 106 106 … … 206 206 psArray *fringeImages, ///< Fringe template images to use in correction 207 207 psArray *fringeStats, ///< Fringe stats (for templates) to use in correction 208 ps MaskType maskVal, ///< Value to mask for science image208 psImageMaskType maskVal, ///< Value to mask for science image 209 209 float rej, ///< Rejection threshold, for pmFringeScaleMeasure 210 210 unsigned int nIter, ///< Maximum number of iterations, for pmFringeScaleMeasure -
trunk/psModules/src/detrend/pmMaskBadPixels.c
r18554 r21183 14 14 #include "pmMaskBadPixels.h" 15 15 16 bool pmMaskBadPixels(pmReadout *input, const pmReadout *mask, ps MaskType maskVal)16 bool pmMaskBadPixels(pmReadout *input, const pmReadout *mask, psImageMaskType maskVal) 17 17 { 18 18 PS_ASSERT_PTR_NON_NULL(input, false); 19 19 PS_ASSERT_PTR_NON_NULL(input->mask, false); 20 PS_ASSERT_IMAGE_TYPE(input->mask, PS_TYPE_ MASK, false);20 PS_ASSERT_IMAGE_TYPE(input->mask, PS_TYPE_IMAGE_MASK, false); 21 21 22 22 PS_ASSERT_PTR_NON_NULL(mask, false); 23 23 PS_ASSERT_PTR_NON_NULL(mask->mask, false); 24 PS_ASSERT_IMAGE_TYPE(mask->mask, PS_TYPE_ MASK, false);24 PS_ASSERT_IMAGE_TYPE(mask->mask, PS_TYPE_IMAGE_MASK, false); 25 25 26 26 psImage *inMask = input->mask; … … 53 53 int offRow = input->row0 - mask->row0; 54 54 55 // masks are both of type PS_TYPE_ MASK56 ps MaskType **exVal = exMask->data.U8;57 ps MaskType **inVal = inMask->data.U8;55 // masks are both of type PS_TYPE_IMAGE_MASK 56 psImageMaskType **exVal = exMask->data.PS_TYPE_IMAGE_MASK_DATA; 57 psImageMaskType **inVal = inMask->data.PS_TYPE_IMAGE_MASK_DATA; 58 58 59 59 // apply exMask values … … 82 82 83 83 bool pmMaskFlagSuspectPixels(pmReadout *output, const pmReadout *readout, float median, float stdev, 84 float rej, ps MaskType maskVal)84 float rej, psImageMaskType maskVal) 85 85 { 86 86 PS_ASSERT_PTR_NON_NULL(readout, false); … … 92 92 PS_ASSERT_IMAGE_NON_EMPTY(readout->mask, false); 93 93 PS_ASSERT_IMAGES_SIZE_EQUAL(readout->image, readout->mask, false); 94 PS_ASSERT_IMAGE_TYPE(readout->mask, PS_TYPE_ MASK, false);94 PS_ASSERT_IMAGE_TYPE(readout->mask, PS_TYPE_IMAGE_MASK, false); 95 95 } 96 96 PS_ASSERT_PTR_NON_NULL(output, false); … … 128 128 for (int x = 0; x < image->numCols; x++) { 129 129 if (fabs((image->data.F32[y][x] - median) / stdev) < rej) continue; 130 if (mask && (mask->data.PS_TYPE_ MASK_DATA[y][x] & maskVal)) continue;130 if (mask && (mask->data.PS_TYPE_IMAGE_MASK_DATA[y][x] & maskVal)) continue; 131 131 suspect->data.F32[y][x] += 1.0; 132 132 } … … 142 142 143 143 // the maskVal supplied here is the value SET for this mask (ie, it is not used to avoid pixels) 144 bool pmMaskIdentifyBadPixels(pmReadout *output, ps MaskType maskVal, float thresh, pmMaskIdentifyMode mode)144 bool pmMaskIdentifyBadPixels(pmReadout *output, psImageMaskType maskVal, float thresh, pmMaskIdentifyMode mode) 145 145 { 146 146 PS_ASSERT_PTR_NON_NULL(output, false); … … 155 155 PS_ASSERT_IMAGE_NON_EMPTY(output->mask, false); 156 156 PS_ASSERT_IMAGES_SIZE_EQUAL(output->mask, suspects, false); 157 PS_ASSERT_IMAGE_TYPE(output->mask, PS_TYPE_ MASK, false);157 PS_ASSERT_IMAGE_TYPE(output->mask, PS_TYPE_IMAGE_MASK, false); 158 158 } else { 159 output->mask = psImageAlloc(suspects->numCols, suspects->numRows, PS_TYPE_ MASK);159 output->mask = psImageAlloc(suspects->numCols, suspects->numRows, PS_TYPE_IMAGE_MASK); 160 160 } 161 161 int num = psMetadataLookupS32(NULL, output->analysis, PM_MASK_ANALYSIS_NUM); // Number of inputs … … 246 246 for (int x = 0; x < suspects->numCols; x++) { 247 247 if (suspects->data.F32[y][x] >= limit) { 248 badpix->data.PS_TYPE_ MASK_DATA[y][x] = maskVal;248 badpix->data.PS_TYPE_IMAGE_MASK_DATA[y][x] = maskVal; 249 249 } 250 250 } -
trunk/psModules/src/detrend/pmMaskBadPixels.h
r17228 r21183 5 5 * @author Eugene Magnier, IfA 6 6 * 7 * @version $Revision: 1.1 6$ $Name: not supported by cvs2svn $8 * @date $Date: 200 8-03-29 03:10:17$7 * @version $Revision: 1.17 $ $Name: not supported by cvs2svn $ 8 * @date $Date: 2009-01-27 06:39:38 $ 9 9 * Copyright 2004 Institute for Astronomy, University of Hawaii 10 10 */ … … 40 40 bool pmMaskBadPixels(pmReadout *input, ///< Input science image 41 41 const pmReadout *mask, ///< Mask image to apply 42 ps MaskType maskVal ///< Mask value to apply42 psImageMaskType maskVal ///< Mask value to apply 43 43 ); 44 44 … … 56 56 float stdev, ///< Image standard deviation 57 57 float rej, ///< Rejection threshold (standard deviations) 58 ps MaskType maskVal ///< Mask value for statistics58 psImageMaskType maskVal ///< Mask value for statistics 59 59 ); 60 60 … … 64 64 /// according to the chosen mode. 65 65 bool pmMaskIdentifyBadPixels(pmReadout *output, ///< Output readout, with suspect pixels imageOut 66 ps MaskType maskVal, ///< Value to set for bad pixels66 psImageMaskType maskVal, ///< Value to set for bad pixels 67 67 float thresh, ///< Threshold for bad pixel 68 68 pmMaskIdentifyMode mode ///< Mode for identifying bad pixels -
trunk/psModules/src/detrend/pmOverscan.c
r19846 r21183 67 67 psVector *reduced = psVectorAlloc(pixels->n, PS_TYPE_F32); // Overscan for each row 68 68 psVector *ordinate = psVectorAlloc(pixels->n, PS_TYPE_F32); // Ordinate 69 psVector *mask = psVectorAlloc(pixels->n, PS_TYPE_ U8); // Mask for fitting69 psVector *mask = psVectorAlloc(pixels->n, PS_TYPE_VECTOR_MASK); // Mask for fitting 70 70 71 71 for (int i = 0; i < pixels->n; i++) { 72 72 psVector *values = pixels->data[i]; // Vector with overscan values 73 73 if (values->n > 0) { 74 mask->data. U8[i] = 0;74 mask->data.PS_TYPE_VECTOR_MASK_DATA[i] = 0; 75 75 ordinate->data.F32[i] = 2.0*(float)i/(float)pixels->n - 1.0; // Scale to [-1,1] 76 76 psVectorStats(myStats, values, NULL, NULL, 0); … … 82 82 } else { 83 83 // We'll fit this one out 84 mask->data. U8[i] = 1;84 mask->data.PS_TYPE_VECTOR_MASK_DATA[i] = 1; 85 85 } 86 86 } -
trunk/psModules/src/detrend/pmRemnance.c
r20669 r21183 13 13 14 14 bool pmRemnance(pmReadout *ro, ///< Readout with input image 15 ps MaskType maskVal, ///< Value of mask16 ps MaskType maskRem, ///< Value to give remance15 psImageMaskType maskVal, ///< Value of mask 16 psImageMaskType maskRem, ///< Value to give remance 17 17 int size, ///< Size of accumulation patches 18 18 float threshold ///< Threshold for masking … … 23 23 PM_ASSERT_READOUT_MASK(ro, false); 24 24 25 psImage *image = ro->image, *mask = ro->mask; // Mask and image from readout 25 psImage *image = ro->image; 26 psImage *mask = ro->mask; // Mask and image from readout 27 26 28 int numCols = image->numCols, numRows = image->numRows; // Size of image 27 29 … … 33 35 psErrorClear(); 34 36 psWarning("Unable to calculate image statistics: masking entire readout."); 35 psBinaryOp(mask, mask, "|", psScalarAlloc(maskRem, PS_TYPE_ MASK));37 psBinaryOp(mask, mask, "|", psScalarAlloc(maskRem, PS_TYPE_IMAGE_MASK)); 36 38 psFree(stats); 37 39 psFree(rng); … … 57 59 } 58 60 for (int y = min; y < max; y++) { 59 if (mask->data.PS_TYPE_ MASK_DATA[y][x] & maskVal) {61 if (mask->data.PS_TYPE_IMAGE_MASK_DATA[y][x] & maskVal) { 60 62 continue; 61 63 } … … 84 86 } 85 87 for (int y = 0; y < maxMask; y++) { 86 mask->data.PS_TYPE_ MASK_DATA[y][x] |= maskRem;88 mask->data.PS_TYPE_IMAGE_MASK_DATA[y][x] |= maskRem; 87 89 } 88 90 numMasked += maxMask; -
trunk/psModules/src/detrend/pmRemnance.h
r20622 r21183 13 13 // GPC1 leaves remnance that flows down from where the annoyed pixels are. 14 14 bool pmRemnance(pmReadout *ro, ///< Readout with input image 15 ps MaskType maskVal, ///< Value of mask16 ps MaskType maskRem, ///< Value to give remance15 psImageMaskType maskVal, ///< Value of mask 16 psImageMaskType maskRem, ///< Value to give remance 17 17 int size, ///< Size of accumulation patches 18 18 float threshold ///< Threshold for masking -
trunk/psModules/src/detrend/pmShifts.c
r15322 r21183 412 412 } 413 413 414 bool pmShiftsConvolve(pmReadout *detrend, const pmCell *source, ps MaskType maskVal)414 bool pmShiftsConvolve(pmReadout *detrend, const pmCell *source, psImageMaskType maskVal) 415 415 { 416 416 PS_ASSERT_PTR(detrend, false); -
trunk/psModules/src/detrend/pmShifts.h
r12696 r21183 46 46 bool pmShiftsConvolve(pmReadout *detrend, ///< Detrend readout to convolve 47 47 const pmCell *source, ///< Science exposure, containing a shifts kernel 48 ps MaskType maskVal ///< Mask value to smear48 psImageMaskType maskVal ///< Mask value to smear 49 49 ); 50 50 -
trunk/psModules/src/detrend/pmShutterCorrection.c
r19432 r21183 198 198 pmShutterCorrection *pmShutterCorrectionLinFit(const psVector *exptime, const psVector *counts, 199 199 const psVector *cntError, const psVector *mask, float offref, 200 int nIter, float rej , psMaskType maskVal)200 int nIter, float rej) 201 201 { 202 202 PS_ASSERT_VECTOR_NON_NULL(exptime, NULL); … … 241 241 stats->clipIter = nIter; 242 242 243 if (!psVectorClipFitPolynomial2D(line, stats, mask, maskVal, counts, cntError, x, y)) {243 if (!psVectorClipFitPolynomial2D(line, stats, mask, 0xff, counts, cntError, x, y)) { 244 244 psError(PS_ERR_UNEXPECTED_NULL, false, "Unable to fit shutter correction.\n"); 245 245 psFree(stats); … … 371 371 372 372 bool pmShutterCorrectionMeasure(pmReadout *output, const psArray *readouts, int size, psStatsOptions meanStat, 373 psStatsOptions stdevStat, int nIter, float rej, ps MaskType maskVal)373 psStatsOptions stdevStat, int nIter, float rej, psImageMaskType maskVal) 374 374 { 375 375 PS_ASSERT_ARRAY_NON_NULL(readouts, NULL); … … 457 457 masks->data[i] = psMemIncrRefCounter(mask); 458 458 459 if (mask->type.type != PS_TYPE_ U8) {459 if (mask->type.type != PS_TYPE_IMAGE_MASK) { 460 460 psError(PS_ERR_BAD_PARAMETER_TYPE, true, "Bad type for mask: %x\n", mask->type.type); 461 461 goto MEASURE_ERROR; … … 582 582 psImage *shutter = psImageAlloc(numCols, numRows, PS_TYPE_F32); // Shutter correction image 583 583 psImage *pattern = psImageAlloc(numCols, numRows, PS_TYPE_F32); // Illumination pattern 584 psVector *mask = psVectorAlloc(num, PS_TYPE_ U8); // Mask for each image584 psVector *mask = psVectorAlloc(num, PS_TYPE_VECTOR_MASK); // Mask for each image 585 585 psVectorInit(mask, 0); 586 586 psTrace("psModules.detrend", 2, "Performing linear fit on individual pixels...\n"); … … 592 592 psImage *maskImage; // Mask image 593 593 if (masks && (maskImage = masks->data[i])) { 594 mask->data. U8[i] = maskImage->data.U8[y][x];594 mask->data.PS_TYPE_VECTOR_MASK_DATA[i] = (maskImage->data.PS_TYPE_IMAGE_MASK_DATA[y][x] & maskVal); 595 595 } 596 596 psImage *weight; // Weight image … … 602 602 } 603 603 604 pmShutterCorrection *corr = pmShutterCorrectionLinFit(exptimes, counts, errors, mask, meanRef, 605 nIter, rej, maskVal); 604 pmShutterCorrection *corr = pmShutterCorrectionLinFit(exptimes, counts, errors, mask, meanRef, nIter, rej); 606 605 shutter->data.F32[y][x] = corr->offset; 607 606 pattern->data.F32[y][x] = corr->scale; … … 665 664 666 665 float exptime = PS_SCALAR_VALUE(job->args->data[3],F32); 667 ps MaskType blank = PS_SCALAR_VALUE(job->args->data[4],U8);666 psImageMaskType blank = PS_SCALAR_VALUE(job->args->data[4],PS_TYPE_IMAGE_MASK_DATA); 668 667 int rowStart = PS_SCALAR_VALUE(job->args->data[5],S32); 669 668 int rowStop = PS_SCALAR_VALUE(job->args->data[6],S32); … … 672 671 673 672 bool pmShutterCorrectionApplyScan(psImage *image, const psImage *shutterImage, psImage *mask, float exptime, 674 ps MaskType blank, int rowStart, int rowStop)673 psImageMaskType blank, int rowStart, int rowStop) 675 674 { 676 675 for (int y = rowStart; y < rowStop; y++) { 677 676 for (int x = 0; x < image->numCols; x++) { 678 677 if (mask && !isfinite(shutterImage->data.F32[y][x])) { 679 mask->data.PS_TYPE_ MASK_DATA[y][x] |= blank;678 mask->data.PS_TYPE_IMAGE_MASK_DATA[y][x] |= blank; 680 679 image->data.F32[y][x] = NAN; 681 680 continue; … … 687 686 } 688 687 689 bool pmShutterCorrectionApply(pmReadout *readout, const pmReadout *shutter, ps MaskType blank)688 bool pmShutterCorrectionApply(pmReadout *readout, const pmReadout *shutter, psImageMaskType blank) 690 689 { 691 690 PS_ASSERT_PTR_NON_NULL(readout, false); … … 746 745 for (int x = 0; x < image->numCols; x++) { 747 746 if (mask && !isfinite(shutterImage->data.F32[y][x])) { 748 mask->data.PS_TYPE_ MASK_DATA[y][x] |= blank;747 mask->data.PS_TYPE_IMAGE_MASK_DATA[y][x] |= blank; 749 748 image->data.F32[y][x] = NAN; 750 749 continue; … … 770 769 psArrayAdd(job->args, 1, mask); 771 770 PS_ARRAY_ADD_SCALAR(job->args, exptime, PS_TYPE_F32); 772 PS_ARRAY_ADD_SCALAR(job->args, blank, PS_TYPE_ MASK);771 PS_ARRAY_ADD_SCALAR(job->args, blank, PS_TYPE_IMAGE_MASK); 773 772 PS_ARRAY_ADD_SCALAR(job->args, rowStart, PS_TYPE_S32); 774 773 PS_ARRAY_ADD_SCALAR(job->args, rowStop, PS_TYPE_S32); … … 860 859 psStatsOptions meanStat, ///< Statistic to use for mean 861 860 psStatsOptions stdevStat, ///< Statistic to use for stdev 862 ps MaskType maskVal, ///< Mask value861 psImageMaskType maskVal, ///< Mask value 863 862 psRandom *rng ///< Random number generator 864 863 ) … … 876 875 if (readout->mask) { 877 876 PS_ASSERT_IMAGE_NON_NULL(readout->mask, NULL); 878 PS_ASSERT_IMAGE_TYPE(readout->mask, PS_TYPE_ MASK, NULL);877 PS_ASSERT_IMAGE_TYPE(readout->mask, PS_TYPE_IMAGE_MASK, NULL); 879 878 PS_ASSERT_IMAGE_SIZE(readout->mask, data->numCols, data->numRows, NULL); 880 879 } … … 1022 1021 1023 1022 bool pmShutterCorrectionGeneratePrepare(pmReadout *shutter, pmReadout *pattern, const psArray *inputs, 1024 ps MaskType maskVal)1023 psImageMaskType maskVal) 1025 1024 { 1026 1025 PS_ASSERT_PTR_NON_NULL(shutter, false); … … 1084 1083 bool pmShutterCorrectionGenerate(pmReadout *shutter, pmReadout *pattern, const psArray *inputs, 1085 1084 float reference, const pmShutterCorrectionData *data, 1086 int nIter, float rej, ps MaskType maskVal)1085 int nIter, float rej, psImageMaskType maskVal) 1087 1086 { 1088 1087 PS_ASSERT_PTR_NON_NULL(shutter, false); … … 1116 1115 psVector *counts = psVectorAlloc(num, PS_TYPE_F32); // Counts in each image 1117 1116 psVector *errors = psVectorAlloc(num, PS_TYPE_F32); // Counts in each image 1118 psVector *mask = psVectorAlloc(num, PS_TYPE_ MASK); // Mask for each image1117 psVector *mask = psVectorAlloc(num, PS_TYPE_VECTOR_MASK); // Mask for each image 1119 1118 psTrace("psModules.detrend", 2, "Performing linear fit on individual pixels...\n"); 1120 1119 for (int i = minInputRows; i < maxInputRows; i++) { … … 1132 1131 counts->data.F32[r] = image->data.F32[yIn][xIn] * ref; 1133 1132 if (readout->mask) { 1134 mask->data.PS_TYPE_ MASK_DATA[r] = readout->mask->data.PS_TYPE_MASK_DATA[yIn][xIn];1133 mask->data.PS_TYPE_VECTOR_MASK_DATA[r] = (readout->mask->data.PS_TYPE_IMAGE_MASK_DATA[yIn][xIn] & maskVal); 1135 1134 } 1136 1135 if (readout->weight) { … … 1142 1141 } 1143 1142 1144 pmShutterCorrection *corr = pmShutterCorrectionLinFit(data->exptimes, counts, errors, mask, 1145 reference, nIter, rej, maskVal); 1143 pmShutterCorrection *corr = pmShutterCorrectionLinFit(data->exptimes, counts, errors, mask, reference, nIter, rej); 1146 1144 if (!corr) { 1147 1145 // Nothing we can do about it -
trunk/psModules/src/detrend/pmShutterCorrection.h
r19432 r21183 5 5 * @author Paul Price, IfA 6 6 * 7 * @version $Revision: 1.2 1$ $Name: not supported by cvs2svn $8 * @date $Date: 200 8-09-09 04:10:14$7 * @version $Revision: 1.22 $ $Name: not supported by cvs2svn $ 8 * @date $Date: 2009-01-27 06:39:38 $ 9 9 * Copyright 2006 Institute for Astronomy, University of Hawaii 10 10 */ … … 91 91 float offref, ///< Reference time offset 92 92 int nIter, ///< Number of iterations 93 float rej, ///< Rejection threshold (sigma) 94 psMaskType maskVal ///< Mask value 93 float rej ///< Rejection threshold (sigma) 95 94 ); 96 95 … … 121 120 int nIter, ///< Number of iterations 122 121 float rej, ///< Rejection threshold (sigma) 123 ps MaskType maskVal ///< Mask value122 psImageMaskType maskVal ///< Mask value 124 123 ); 125 124 … … 135 134 psImage *mask, ///< Input mask image 136 135 float exptime, ///< Exposure time to which to correct 137 ps MaskType blank, ///< Mask value to give blank pixels136 psImageMaskType blank, ///< Mask value to give blank pixels 138 137 int rowStart, int rowStop ///< Range of scan 139 138 ); … … 145 144 pmReadout *readout, ///< Readout to which to apply shutter correction 146 145 const pmReadout *shutter, ///< Shutter correction readout, with dT for each pixel 147 ps MaskType blank ///< Value to give blank pixels146 psImageMaskType blank ///< Value to give blank pixels 148 147 ); 149 148 … … 181 180 psStatsOptions meanStat, ///< Statistic to use for mean 182 181 psStatsOptions stdevStat, ///< Statistic to use for stdev 183 ps MaskType maskVal, ///< Mask value182 psImageMaskType maskVal, ///< Mask value 184 183 psRandom *rng ///< Random number generator 185 184 ); … … 201 200 int nIter, ///< Number of iterations 202 201 float rej, ///< Rejection threshold (sigma) 203 ps MaskType maskVal ///< Mask value202 psImageMaskType maskVal ///< Mask value 204 203 ); 205 204 206 205 // prepare outputs for shutter correction 207 206 bool pmShutterCorrectionGeneratePrepare(pmReadout *shutter, pmReadout *pattern, const psArray *inputs, 208 ps MaskType maskVal);207 psImageMaskType maskVal); 209 208 210 209 /// @} -
trunk/psModules/src/detrend/pmSkySubtract.c
r12742 r21183 6 6 * @author GLG, MHPCC 7 7 * 8 * @version $Revision: 1. 3$ $Name: not supported by cvs2svn $9 * @date $Date: 200 7-04-04 22:42:48 $8 * @version $Revision: 1.4 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2009-01-27 06:39:38 $ 10 10 * 11 11 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 114 114 115 115 psVector *binVector = psVectorAlloc(binFactor * binFactor, PS_TYPE_F32); 116 psVector *binMask = psVectorAlloc(binFactor * binFactor, PS_TYPE_ U8);116 psVector *binMask = psVectorAlloc(binFactor * binFactor, PS_TYPE_VECTOR_MASK); 117 117 psStats *myStats = psStatsAlloc(statOptions); 118 118 … … 126 126 binVector->data.F32[count] = 127 127 origImage->data.F32[row + binRow][col + binCol]; 128 binMask->data. U8[count] = 0;128 binMask->data.PS_TYPE_VECTOR_MASK_DATA[count] = 0; 129 129 } else { 130 130 binVector->data.F32[count] = 0.0; 131 binMask->data. U8[count] = 1;131 binMask->data.PS_TYPE_VECTOR_MASK_DATA[count] = 1; 132 132 } 133 133 count++; … … 313 313 PS_ASSERT_IMAGE_NON_NULL(maskImage, NULL); 314 314 PS_ASSERT_IMAGE_NON_EMPTY(maskImage, NULL); 315 PS_ASSERT_IMAGE_TYPE(maskImage, PS_TYPE_ U8, NULL);315 PS_ASSERT_IMAGE_TYPE(maskImage, PS_TYPE_IMAGE_MASK, NULL); 316 316 PS_ASSERT_IMAGES_SIZE_EQUAL(dataImage, maskImage, NULL); 317 317 psS32 oldPolyX = -1; … … 361 361 for (x=0;x<dataImage->numRows;x++) { 362 362 for (y=0;y<dataImage->numCols;y++) { 363 if (maskImage->data. U8[x][y] == 0) {363 if (maskImage->data.PS_TYPE_IMAGE_MASK_DATA[x][y] == 0) { 364 364 buildSums((psF64) x, (psF64) y, myPoly->nX, myPoly->nY); 365 365 … … 572 572 573 573 if (in->mask != NULL) { 574 binnedMaskImage = psImageCopy(binnedMaskImage, in->mask, PS_TYPE_ U8);574 binnedMaskImage = psImageCopy(binnedMaskImage, in->mask, PS_TYPE_IMAGE_MASK); 575 575 if (binnedMaskImage == NULL) { 576 576 psError(PS_ERR_UNKNOWN, false, "psImageCopy() returned NULL. Returning in image.\n"); … … 581 581 binnedMaskImage = psImageAlloc(binnedImage->numCols, 582 582 binnedImage->numRows, 583 PS_TYPE_ U8);583 PS_TYPE_IMAGE_MASK); 584 584 psImageInit(binnedMaskImage, 0); 585 585 } … … 592 592 binnedMaskImage = psImageAlloc(binnedImage->numCols, 593 593 binnedImage->numRows, 594 PS_TYPE_ U8);594 PS_TYPE_IMAGE_MASK); 595 595 psImageInit(binnedMaskImage, 0); 596 596 } … … 625 625 if (fabs(binnedImage->data.F32[row][col] - binnedMean) > 626 626 (clipSD * binnedStdev)) { 627 binnedMaskImage->data. U8[row][col] = 1;627 binnedMaskImage->data.PS_TYPE_IMAGE_MASK_DATA[row][col] = 1; 628 628 } 629 629 } -
trunk/psModules/src/imcombine/pmImageCombine.c
r12742 r21183 8 8 * @author GLG, MHPCC 9 9 * 10 * @version $Revision: 1.1 2$ $Name: not supported by cvs2svn $11 * @date $Date: 200 7-04-04 22:42:48 $10 * @version $Revision: 1.13 $ $Name: not supported by cvs2svn $ 11 * @date $Date: 2009-01-27 06:39:38 $ 12 12 * 13 13 * XXX: pmRejectPixels() has a known bug with the pmImageTransform() call. … … 17 17 */ 18 18 19 // XXX this is somewhat messy and unclear on the masking. 20 19 21 #ifdef HAVE_CONFIG_H 20 22 #include <config.h> … … 53 55 54 56 buffer->pixels = psVectorAlloc(numImages, PS_TYPE_F32); 55 buffer->masks = psVectorAlloc(numImages, PS_TYPE_ MASK);57 buffer->masks = psVectorAlloc(numImages, PS_TYPE_VECTOR_MASK); 56 58 buffer->errors = psVectorAlloc(numImages, PS_TYPE_F32); 57 59 buffer->stats = psStatsAlloc(PS_STAT_SAMPLE_MEAN | PS_STAT_SAMPLE_STDEV); … … 67 69 const psArray *errors, // Array of input error images 68 70 const psArray *masks, // Array of input masks 69 ps U32maskVal, // Mask value71 psImageMaskType maskVal, // Mask value 70 72 psS32 numIter, // Number of rejection iterations 71 73 psF32 sigmaClip, // Number of standard deviations at which to reject … … 115 117 if (masks) { 116 118 psImage *mask = masks->data[i]; // Mask of interest 117 pixelMasks->data.U8[i] = mask->data.U8[y][x]; 118 } // Set the pixel error data, if necessary 119 pixelMasks->data.PS_TYPE_VECTOR_MASK_DATA[i] = (mask->data.PS_TYPE_IMAGE_MASK_DATA[y][x] & maskVal); 120 } 121 // Set the pixel error data, if necessary 119 122 if (errors) { 120 123 psImage *error = errors->data[i]; // Error image of interest … … 128 131 for (int iter = 0; iter < numIter; iter++) { 129 132 // Combine all the pixels, using the specified stat. 130 if (!psVectorStats(stats, pixelData, pixelErrors, pixelMasks, maskVal)) {133 if (!psVectorStats(stats, pixelData, pixelErrors, pixelMasks, 0xff)) { 131 134 combine->data.F32[y][x] = NAN; 132 135 psFree(buffer); … … 148 151 float stdev = stats->sampleStdev; 149 152 for (int i = 0; i < numImages; i++) { 150 if (!(pixelMasks->data. U8[i] & maskVal) &&153 if (!(pixelMasks->data.PS_TYPE_VECTOR_MASK_DATA[i] & 0xff) && 151 154 fabs(pixelData->data.F32[i] - combinedPixel) > sigmaClip * stdev) { 152 155 // Reject pixel as questionable 153 156 numRejects++; 154 pixelMasks->data. U8[i] = maskVal;157 pixelMasks->data.PS_TYPE_IMAGE_MASK_DATA[i] = 0xff; 155 158 if (questionablePixels) { 156 159 // Mark the pixel as questionable … … 191 194 const psArray *errors, ///< Array of input error images 192 195 const psArray *masks, ///< Array of input masks 193 ps U32maskVal, ///< Mask value196 psImageMaskType maskVal, ///< Mask value 194 197 const psPixels *pixels, ///< Pixels to combine 195 198 psS32 numIter, ///< Number of rejection iterations … … 231 234 psImage *mask = masks->data[i]; 232 235 PS_ASSERT_IMAGE_SIZE(mask, numCols, numRows, NULL); 233 PS_ASSERT_IMAGE_TYPE(mask, PS_TYPE_ MASK, NULL);236 PS_ASSERT_IMAGE_TYPE(mask, PS_TYPE_IMAGE_MASK, NULL); 234 237 } 235 238 } … … 319 322 int num = 0; 320 323 psVector *pixels = psVectorAlloc(8, PS_TYPE_F32); // Array of pixels 321 psVector *mask = psVectorAlloc(8, PS_TYPE_ U8); // Corresponding mask324 psVector *mask = psVectorAlloc(8, PS_TYPE_VECTOR_MASK); // Corresponding mask 322 325 323 326 // Get limits … … 329 332 for (int j = yMin; j <= yMax; j++) { 330 333 for (int i = xMin; i <= xMax; i++) { 331 if ((i != x) && (j != y) && (0 == imageMask->data. U8[j][i])) {334 if ((i != x) && (j != y) && (0 == imageMask->data.PS_TYPE_IMAGE_MASK_DATA[j][i])) { 332 335 pixels->data.F32[num] = image->data.F32[j][i]; 333 mask->data. U8[num] = 0;336 mask->data.PS_TYPE_VECTOR_MASK_DATA[num] = 0; 334 337 num++; 335 338 } else { 336 mask->data. U8[num] = 1;339 mask->data.PS_TYPE_VECTOR_MASK_DATA[num] = 1; 337 340 } 338 341 } … … 347 350 if ((i != x) && (j != y)) { 348 351 pixels->data.F32[num] = image->data.F32[j][i]; 349 mask->data. U8[num] = 0;352 mask->data.PS_TYPE_VECTOR_MASK_DATA[num] = 0; 350 353 num++; 351 354 } else { 352 mask->data. U8[num] = 1;355 mask->data.PS_TYPE_VECTOR_MASK_DATA[num] = 1; 353 356 } 354 357 } … … 473 476 for (psS32 i = 0 ; i < image->numRows ; i++) { 474 477 for (psS32 j = 0 ; j < image->numCols ; j++) { 475 imgF32->data.F32[i][j] = (psF32) image->data. U8[i][j];478 imgF32->data.F32[i][j] = (psF32) image->data.PS_TYPE_IMAGE_MASK_DATA[i][j]; 476 479 } 477 480 } … … 518 521 PS_ASSERT_IMAGE_NON_NULL(tmpMask, NULL); 519 522 PS_ASSERT_IMAGE_NON_EMPTY(tmpMask, NULL); 520 PS_ASSERT_IMAGE_TYPE(tmpMask, PS_TYPE_F32, NULL); 523 PS_ASSERT_IMAGE_TYPE(tmpMask, PS_TYPE_F32, NULL); // XXX really F32?? 521 524 PS_ASSERT_IMAGES_SIZE_EQUAL(tmpImage, tmpMask, NULL); 522 525 } … … 571 574 572 575 // 573 // Create a ps U8mask image from the list of cosmic pixels.576 // Create a psImageMaskType mask image from the list of cosmic pixels. 574 577 // 575 578 psImage *maskImage = NULL; -
trunk/psModules/src/imcombine/pmPSFEnvelope.c
r20999 r21183 223 223 // *** readout->weight = (psImage*)psBinaryOp(NULL, readout->image, "*", psScalarAlloc(WEIGHT_FACTOR, PS_TYPE_F32)); 224 224 readout->weight = (psImage*)psBinaryOp(NULL, readout->image, "+", psScalarAlloc(WEIGHT_VAL, PS_TYPE_F32)); 225 readout->mask = psImageAlloc(numCols, numRows, PS_TYPE_ MASK);225 readout->mask = psImageAlloc(numCols, numRows, PS_TYPE_IMAGE_MASK); 226 226 psImageInit(readout->mask, 0); 227 227 -
trunk/psModules/src/imcombine/pmReadoutCombine.c
r19086 r21183 105 105 106 106 // note the mask value actually used 107 ps MaskType maskVal = params->maskVal; // The mask value107 psImageMaskType maskVal = params->maskVal; // The mask value 108 108 if (maskVal) { 109 109 psString comment = NULL; // Comment to add to header … … 247 247 psF32 *pixelsData = pixels->data.F32; // Dereference pixels 248 248 249 psVector *mask = psVectorAlloc(inputs->n, PS_TYPE_ U8); // Mask for stack250 ps U8 *maskData = mask->data.U8; // Dereference mask249 psVector *mask = psVectorAlloc(inputs->n, PS_TYPE_VECTOR_MASK); // Mask for stack 250 psVectorMaskType *maskData = mask->data.PS_TYPE_VECTOR_MASK_DATA; // Dereference mask 251 251 252 252 psVector *weights = NULL; // Stack of weights … … 260 260 261 261 float keepFrac = 1.0 - params->fracLow - params->fracHigh; // Fraction of pixels to keep 262 ps MaskType maskVal = params->maskVal; // The mask value262 psImageMaskType maskVal = params->maskVal; // The mask value 263 263 264 264 #ifndef PS_NO_TRACE … … 278 278 // Dereference output products 279 279 psF32 **outputImage = output->image->data.F32; // Output image 280 ps U8 **outputMask = output->mask->data.U8; // Output mask280 psImageMaskType **outputMask = output->mask->data.PS_TYPE_IMAGE_MASK_DATA; // Output mask 281 281 psF32 **outputWeight = NULL; // Output weight map 282 282 if (output->weight) { … … 303 303 304 304 int numValid = 0; // Number of valid pixels in the stack 305 memset(maskData, 0, mask->n * sizeof(ps U8)); // Reset the mask305 memset(maskData, 0, mask->n * sizeof(psVectorMaskType)); // Reset the mask 306 306 for (int r = 0; r < inputs->n; r++) { 307 307 pmReadout *readout = inputs->data[r]; // Input readout … … 318 318 // Check mask 319 319 psImage *roMask = readout->mask; // The mask image 320 if (roMask && roMask->data. U8[yIn][xIn] & maskVal) {320 if (roMask && roMask->data.PS_TYPE_IMAGE_MASK_DATA[yIn][xIn] & maskVal) { 321 321 maskData[r] = 1; 322 322 continue; -
trunk/psModules/src/imcombine/pmReadoutCombine.h
r18830 r21183 5 5 * @author Paul Price, IfA 6 6 * 7 * @version $Revision: 1.1 4$ $Name: not supported by cvs2svn $8 * @date $Date: 200 8-08-01 00:01:26$7 * @version $Revision: 1.15 $ $Name: not supported by cvs2svn $ 8 * @date $Date: 2009-01-27 06:39:38 $ 9 9 * Copyright 2004-2006 Institute for Astronomy, University of Hawaii 10 10 */ … … 22 22 typedef struct { 23 23 psStatsOptions combine; ///< Statistic to use when performing the combination 24 ps MaskType maskVal;///< Mask value25 ps MaskType blank;///< Mask value to give blank (i.e., no data) pixels24 psImageMaskType maskVal; ///< Mask value 25 psImageMaskType blank; ///< Mask value to give blank (i.e., no data) pixels 26 26 int nKeep; ///< Mimimum number of pixels to keep 27 27 float fracHigh; ///< Fraction of high pixels to immediately throw -
trunk/psModules/src/imcombine/pmStack.c
r20712 r21183 8 8 * @author GLG, MHPCC 9 9 * 10 * @version $Revision: 1.4 5$ $Name: not supported by cvs2svn $11 * @date $Date: 200 8-11-13 03:50:30$10 * @version $Revision: 1.46 $ $Name: not supported by cvs2svn $ 11 * @date $Date: 2009-01-27 06:39:38 $ 12 12 * Copyright 2004-2007 Institute for Astronomy, University of Hawaii 13 13 * … … 63 63 64 64 buffer->pixels = psVectorAlloc(numImages, PS_TYPE_F32); 65 buffer->masks = psVectorAlloc(numImages, PS_TYPE_ MASK);65 buffer->masks = psVectorAlloc(numImages, PS_TYPE_VECTOR_MASK); 66 66 buffer->variances = psVectorAlloc(numImages, PS_TYPE_F32); 67 67 buffer->weights = psVectorAlloc(numImages, PS_TYPE_F32); … … 143 143 assert(!masks || values->n == masks->n); 144 144 assert(values->type.type == PS_TYPE_F32); 145 assert(!masks || masks->type.type == PS_TYPE_ MASK);145 assert(!masks || masks->type.type == PS_TYPE_VECTOR_MASK); 146 146 assert(sortBuffer && sortBuffer->nalloc >= values->n && sortBuffer->type.type == PS_TYPE_F32); 147 147 … … 149 149 int num = 0; // Number of valid values 150 150 for (int i = 0; i < values->n; i++) { 151 if (!masks || !masks->data.PS_TYPE_ MASK_DATA[i]) {151 if (!masks || !masks->data.PS_TYPE_VECTOR_MASK_DATA[i]) { 152 152 sortBuffer->data.F32[num++] = values->data.F32[i]; 153 153 } … … 215 215 const psVector *reject, // Indices of pixels to reject, or NULL 216 216 int x, int y, // Coordinates of interest; frame of output image 217 ps MaskType maskVal, // Value to mask218 ps MaskType bad, // Value to give bad pixels217 psImageMaskType maskVal, // Value to mask 218 psImageMaskType bad, // Value to give bad pixels 219 219 int numIter, // Number of rejection iterations 220 220 float rej, // Number of standard deviations at which to reject … … 258 258 int xIn = x - data->readout->col0, yIn = y - data->readout->row0; // Coordinates on input readout 259 259 psImage *mask = data->readout->mask; // Mask of interest 260 if (mask->data.PS_TYPE_ MASK_DATA[yIn][xIn] & maskVal) {260 if (mask->data.PS_TYPE_IMAGE_MASK_DATA[yIn][xIn] & maskVal) { 261 261 continue; 262 262 } … … 283 283 // Default option is that the pixel is bad 284 284 float imageValue = NAN, varianceValue = NAN; // Value for combined image and variance map 285 ps MaskType maskValue = bad; // Value for combined mask285 psImageMaskType maskValue = bad; // Value for combined mask 286 286 switch (num) { 287 287 case 0: … … 382 382 // Mask a pixel for inspection 383 383 #define MASK_PIXEL_FOR_INSPECTION() \ 384 pixelMasks->data.PS_TYPE_ MASK_DATA[j] = 0xff; \384 pixelMasks->data.PS_TYPE_VECTOR_MASK_DATA[j] = 0xff; \ 385 385 combineInspect(inputs, x, y, pixelSources->data.U16[j]); \ 386 386 numClipped++; \ … … 388 388 389 389 for (int j = 0; j < num; j++) { 390 if (pixelMasks->data.PS_TYPE_ MASK_DATA[j]) {390 if (pixelMasks->data.PS_TYPE_VECTOR_MASK_DATA[j]) { 391 391 continue; 392 392 } … … 408 408 409 409 image->data.F32[y][x] = imageValue; 410 mask->data.PS_TYPE_ MASK_DATA[y][x] = maskValue;410 mask->data.PS_TYPE_IMAGE_MASK_DATA[y][x] = maskValue; 411 411 if (variance) { 412 412 variance->data.F32[y][x] = varianceValue; … … 438 438 PS_ASSERT_IMAGE_TYPE(data->readout->image, PS_TYPE_F32, false); 439 439 PS_ASSERT_IMAGE_NON_NULL(data->readout->mask, false); 440 PS_ASSERT_IMAGE_TYPE(data->readout->mask, PS_TYPE_ MASK, false);440 PS_ASSERT_IMAGE_TYPE(data->readout->mask, PS_TYPE_IMAGE_MASK, false); 441 441 PS_ASSERT_IMAGES_SIZE_EQUAL(data->readout->image, data->readout->mask, false); 442 442 *numCols = data->readout->image->numCols; … … 469 469 PS_ASSERT_IMAGE_NON_NULL(data->readout->mask, false); 470 470 PS_ASSERT_IMAGE_TYPE(data->readout->image, PS_TYPE_F32, false); 471 PS_ASSERT_IMAGE_TYPE(data->readout->mask, PS_TYPE_ MASK, false);471 PS_ASSERT_IMAGE_TYPE(data->readout->mask, PS_TYPE_IMAGE_MASK, false); 472 472 PS_ASSERT_IMAGE_SIZE(data->readout->image, *numCols, *numRows, false); 473 473 PS_ASSERT_IMAGES_SIZE_EQUAL(data->readout->image, data->readout->mask, false); … … 562 562 563 563 /// Stack input images 564 bool pmStackCombine(pmReadout *combined, psArray *input, ps MaskType maskVal, psMaskType bad,564 bool pmStackCombine(pmReadout *combined, psArray *input, psImageMaskType maskVal, psImageMaskType bad, 565 565 int kernelSize, int numIter, float rej, float sys, 566 566 bool entire, bool useVariance, bool safe) … … 587 587 PS_ASSERT_IMAGE_TYPE(combined->image, PS_TYPE_F32, false); 588 588 PS_ASSERT_IMAGE_NON_NULL(combined->mask, false); 589 PS_ASSERT_IMAGE_TYPE(combined->mask, PS_TYPE_ MASK, false);589 PS_ASSERT_IMAGE_TYPE(combined->mask, PS_TYPE_IMAGE_MASK, false); 590 590 PS_ASSERT_IMAGES_SIZE_EQUAL(combined->image, combined->mask, false); 591 591 } … … 698 698 psImage *combinedMask = combined->mask; // Combined mask 699 699 if (!combinedMask) { 700 combined->mask = psImageAlloc(numCols, numRows, PS_TYPE_ MASK);700 combined->mask = psImageAlloc(numCols, numRows, PS_TYPE_IMAGE_MASK); 701 701 combinedMask = combined->mask; 702 702 } -
trunk/psModules/src/imcombine/pmStack.h
r20497 r21183 8 8 * @author GLG, MHPCC 9 9 * 10 * @version $Revision: 1. 9$ $Name: not supported by cvs2svn $11 * @date $Date: 200 8-11-01 02:59:33$10 * @version $Revision: 1.10 $ $Name: not supported by cvs2svn $ 11 * @date $Date: 2009-01-27 06:39:38 $ 12 12 * 13 13 * Copyright 2004-2007 Institute for Astronomy, University of Hawaii … … 43 43 bool pmStackCombine(pmReadout *combined,///< Combined readout (output) 44 44 psArray *input, ///< Input array of pmStackData 45 ps MaskType maskVal, ///< Mask value of bad pixels46 ps MaskType bad, ///< Mask value to give rejected pixels45 psImageMaskType maskVal, ///< Mask value of bad pixels 46 psImageMaskType bad, ///< Mask value to give rejected pixels 47 47 int kernelSize, ///< Half-size of the convolution kernel 48 48 int numIter, ///< Number of iterations -
trunk/psModules/src/imcombine/pmStackReject.c
r20838 r21183 61 61 } 62 62 63 int numBytes = (xMax - xMin) * PSELEMTYPE_SIZEOF(PS_TYPE_ MASK); // Number of bytes to copy63 int numBytes = (xMax - xMin) * PSELEMTYPE_SIZEOF(PS_TYPE_IMAGE_MASK); // Number of bytes to copy 64 64 psAssert(convolved->numCols - 2 * box == xMax - xMin, "Bad number of columns"); 65 65 psAssert(convolved->numRows - 2 * box == yMax - yMin, "Bad number of rows"); 66 66 67 67 for (int yTarget = yMin, ySource = box; yTarget < yMax; yTarget++, ySource++) { 68 memcpy(&target->data.PS_TYPE_ MASK_DATA[yTarget][xMin],69 &convolved->data.PS_TYPE_ MASK_DATA[ySource][box], numBytes);68 memcpy(&target->data.PS_TYPE_IMAGE_MASK_DATA[yTarget][xMin], 69 &convolved->data.PS_TYPE_IMAGE_MASK_DATA[ySource][box], numBytes); 70 70 } 71 71 psFree(convolved); 72 72 } else { 73 73 // Just copy over 74 int numBytes = (xMax - xMin) * PSELEMTYPE_SIZEOF(PS_TYPE_ MASK); // Number of bytes to copy74 int numBytes = (xMax - xMin) * PSELEMTYPE_SIZEOF(PS_TYPE_IMAGE_MASK); // Number of bytes to copy 75 75 for (int yTarget = yMin; yTarget < yMax; yTarget++) { 76 memcpy(&target->data.PS_TYPE_ MASK_DATA[yTarget][xMin],77 &source->data.PS_TYPE_ MASK_DATA[yTarget][xMin], numBytes);76 memcpy(&target->data.PS_TYPE_IMAGE_MASK_DATA[yTarget][xMin], 77 &source->data.PS_TYPE_IMAGE_MASK_DATA[yTarget][xMin], numBytes); 78 78 } 79 79 } … … 262 262 bool oldThreads = psImageConvolveSetThreads(false); // Old value of threading for psImageColvolve 263 263 264 psImage *target = psImageRecycle(convolved, numCols, numRows, PS_TYPE_ MASK); // Grown image264 psImage *target = psImageRecycle(convolved, numCols, numRows, PS_TYPE_IMAGE_MASK); // Grown image 265 265 psImageInit(target, 0); 266 266 if (threaded) { -
trunk/psModules/src/imcombine/pmSubtraction.c
r20838 r21183 246 246 psImage *image, // Image to convolve 247 247 psImage *mask, // Mask image 248 ps MaskType maskVal, // Value to mask248 psImageMaskType maskVal, // Value to mask 249 249 const psKernel *kernel, // Kernel by which to convolve 250 250 psRegion region,// Region of interest … … 291 291 psImage *sys, // Systematic error image 292 292 psImage *mask, // Mask image 293 ps MaskType maskVal, // Value to mask293 psImageMaskType maskVal, // Value to mask 294 294 const psKernel *kernel, // Kernel by which to convolve 295 295 psRegion region,// Region of interest … … 373 373 float background, // Background value to apply 374 374 psRegion region, // Region to convolve 375 ps MaskType maskBad, // Value to give bad pixels376 ps MaskType maskPoor, // Value to give poor pixels375 psImageMaskType maskBad, // Value to give bad pixels 376 psImageMaskType maskPoor, // Value to give poor pixels 377 377 float poorFrac, // Fraction for "poor" 378 378 bool useFFT, // Use FFT to convolve? … … 385 385 } 386 386 387 ps MaskType subBad; // Bad pixels in subtraction mask388 ps MaskType subConvBad; // Bad pixels in subtraction mask when convolving389 ps MaskType subConvPoor; // Poor pixels in subtraction mask when convolving387 psImageMaskType subBad; // Bad pixels in subtraction mask 388 psImageMaskType subConvBad; // Bad pixels in subtraction mask when convolving 389 psImageMaskType subConvPoor; // Poor pixels in subtraction mask when convolving 390 390 if (kernels->mode == PM_SUBTRACTION_MODE_1 || (kernels->mode == PM_SUBTRACTION_MODE_DUAL && !wantDual)) { 391 391 subBad = PM_SUBTRACTION_MASK_BAD_1; … … 437 437 for (int yTarget = rowMin, ySource = box; yTarget < rowMax; yTarget++, ySource++) { 438 438 // Dereference images 439 ps MaskType *target = &convMask->data.PS_TYPE_MASK_DATA[yTarget][colMin]; // Target values440 ps MaskType *source = &convolved->data.PS_TYPE_MASK_DATA[ySource][box]; // Source values439 psImageMaskType *target = &convMask->data.PS_TYPE_IMAGE_MASK_DATA[yTarget][colMin]; // Target values 440 psImageMaskType *source = &convolved->data.PS_TYPE_IMAGE_MASK_DATA[ySource][box]; // Source values 441 441 for (int xTarget = colMin; xTarget < colMax; xTarget++, target++, source++) { 442 442 if (*source & subConvBad) { … … 783 783 PS_ASSERT_VECTOR_TYPE(deviations, PS_TYPE_F32, -1); 784 784 PS_ASSERT_IMAGE_NON_EMPTY(subMask, -1); 785 PS_ASSERT_IMAGE_TYPE(subMask, PS_TYPE_ MASK, -1);785 PS_ASSERT_IMAGE_TYPE(subMask, PS_TYPE_IMAGE_MASK, -1); 786 786 787 787 // I used to measure the rms deviation about zero, and use that as the sigma against which to clip, but … … 794 794 795 795 int numStamps = 0; // Number of used stamps 796 psVector *mask = psVectorAlloc(stamps->num, PS_TYPE_ MASK); // Mask, for statistics796 psVector *mask = psVectorAlloc(stamps->num, PS_TYPE_VECTOR_MASK); // Mask, for statistics 797 797 psVectorInit(mask, 0); 798 798 for (int i = 0; i < stamps->num; i++) { 799 799 pmSubtractionStamp *stamp = stamps->stamps->data[i]; // Stamp of interest 800 800 if (stamp->status != PM_SUBTRACTION_STAMP_USED) { 801 mask->data.PS_TYPE_ MASK_DATA[i] = 0xff;801 mask->data.PS_TYPE_VECTOR_MASK_DATA[i] = 0xff; 802 802 continue; 803 803 } … … 869 869 for (int y = stamp->y - footprint; y <= stamp->y + footprint; y++) { 870 870 for (int x = stamp->x - footprint; x <= stamp->x + footprint; x++) { 871 subMask->data.PS_TYPE_ MASK_DATA[y][x] |= PM_SUBTRACTION_MASK_REJ;871 subMask->data.PS_TYPE_IMAGE_MASK_DATA[y][x] |= PM_SUBTRACTION_MASK_REJ; 872 872 } 873 873 } … … 997 997 psImage *sys1, psImage *sys2, // Systematic error images 998 998 psImage *subMask, // Input subtraction mask 999 ps MaskType maskBad, // Mask value to give bad pixels1000 ps MaskType maskPoor, // Mask value to give poor pixels999 psImageMaskType maskBad, // Mask value to give bad pixels 1000 psImageMaskType maskPoor, // Mask value to give poor pixels 1001 1001 float poorFrac, // Fraction for "poor" 1002 1002 const psRegion *region, // Patch to convolve … … 1035 1035 1036 1036 if ((kernels->mode == PM_SUBTRACTION_MODE_1 || kernels->mode == PM_SUBTRACTION_MODE_DUAL) && ro1->mask) { 1037 ps MaskType **target = convMask->data.PS_TYPE_MASK_DATA; // Target mask1038 ps MaskType **source = ro1->mask->data.PS_TYPE_MASK_DATA; // Source mask1037 psImageMaskType **target = convMask->data.PS_TYPE_IMAGE_MASK_DATA; // Target mask 1038 psImageMaskType **source = ro1->mask->data.PS_TYPE_IMAGE_MASK_DATA; // Source mask 1039 1039 1040 1040 for (int y = yMin; y < yMax; y++) { … … 1045 1045 } 1046 1046 if ((kernels->mode == PM_SUBTRACTION_MODE_2 || kernels->mode == PM_SUBTRACTION_MODE_DUAL) && ro2->mask) { 1047 ps MaskType **target = convMask->data.PS_TYPE_MASK_DATA; // Target mask1048 ps MaskType **source = ro2->mask->data.PS_TYPE_MASK_DATA; // Source mask1047 psImageMaskType **target = convMask->data.PS_TYPE_IMAGE_MASK_DATA; // Target mask 1048 psImageMaskType **source = ro2->mask->data.PS_TYPE_IMAGE_MASK_DATA; // Source mask 1049 1049 1050 1050 for (int y = yMin; y < yMax; y++) { … … 1075 1075 psImage *sys2 = args->data[10]; // Systematic error image 2 1076 1076 psImage *subMask = args->data[11]; // Subtraction mask 1077 ps MaskType maskBad = PS_SCALAR_VALUE(args->data[12], U8); // Output mask value for bad pixels1078 ps MaskType maskPoor = PS_SCALAR_VALUE(args->data[13], U8); // Output mask value for poor pixels1077 psImageMaskType maskBad = PS_SCALAR_VALUE(args->data[12], PS_TYPE_IMAGE_MASK_DATA); // Output mask value for bad pixels 1078 psImageMaskType maskPoor = PS_SCALAR_VALUE(args->data[13], PS_TYPE_IMAGE_MASK_DATA); // Output mask value for poor pixels 1079 1079 float poorFrac = PS_SCALAR_VALUE(args->data[14], F32); // Fraction for "poor" 1080 1080 const psRegion *region = args->data[15]; // Region to convolve 1081 1081 const pmSubtractionKernels *kernels = args->data[16]; // Kernels 1082 bool doBG = PS_SCALAR_VALUE(args->data[17], U8); // Do background subtraction?1083 bool useFFT = PS_SCALAR_VALUE(args->data[18], U8); // Use FFT for convolution?1082 bool doBG = PS_SCALAR_VALUE(args->data[17], PS_TYPE_IMAGE_MASK_DATA); // Do background subtraction? 1083 bool useFFT = PS_SCALAR_VALUE(args->data[18], PS_TYPE_IMAGE_MASK_DATA); // Use FFT for convolution? 1084 1084 1085 1085 return subtractionConvolvePatch(numCols, numRows, x0, y0, out1, out2, convMask, ro1, ro2, sys1, sys2, … … 1088 1088 1089 1089 bool pmSubtractionConvolve(pmReadout *out1, pmReadout *out2, const pmReadout *ro1, const pmReadout *ro2, 1090 psImage *subMask, int stride, ps MaskType maskBad, psMaskType maskPoor,1090 psImage *subMask, int stride, psImageMaskType maskBad, psImageMaskType maskPoor, 1091 1091 float poorFrac, float sysError, const psRegion *region, 1092 1092 const pmSubtractionKernels *kernels, bool doBG, bool useFFT) … … 1121 1121 if (subMask) { 1122 1122 PS_ASSERT_IMAGE_NON_NULL(subMask, false); 1123 PS_ASSERT_IMAGE_TYPE(subMask, PS_TYPE_ MASK, false);1123 PS_ASSERT_IMAGE_TYPE(subMask, PS_TYPE_IMAGE_MASK, false); 1124 1124 PS_ASSERT_IMAGE_SIZE(subMask, numCols, numRows, false); 1125 1125 } … … 1182 1182 if (kernels->mode == PM_SUBTRACTION_MODE_1 || kernels->mode == PM_SUBTRACTION_MODE_DUAL) { 1183 1183 if (!out1->mask) { 1184 out1->mask = psImageAlloc(numCols, numRows, PS_TYPE_ MASK);1184 out1->mask = psImageAlloc(numCols, numRows, PS_TYPE_IMAGE_MASK); 1185 1185 } 1186 1186 convMask = out1->mask; … … 1194 1194 } else { 1195 1195 if (!out2->mask) { 1196 out2->mask = psImageAlloc(numCols, numRows, PS_TYPE_ MASK);1196 out2->mask = psImageAlloc(numCols, numRows, PS_TYPE_IMAGE_MASK); 1197 1197 } 1198 1198 convMask = out2->mask; … … 1285 1285 psMutexUnlock(subMask); 1286 1286 } 1287 PS_ARRAY_ADD_SCALAR(args, maskBad, PS_TYPE_ U8);1288 PS_ARRAY_ADD_SCALAR(args, maskPoor, PS_TYPE_ U8);1287 PS_ARRAY_ADD_SCALAR(args, maskBad, PS_TYPE_IMAGE_MASK); 1288 PS_ARRAY_ADD_SCALAR(args, maskPoor, PS_TYPE_IMAGE_MASK); 1289 1289 PS_ARRAY_ADD_SCALAR(args, poorFrac, PS_TYPE_F32); 1290 1290 psArrayAdd(args, 1, subRegion); -
trunk/psModules/src/imcombine/pmSubtraction.h
r20568 r21183 6 6 * @author GLG, MHPCC 7 7 * 8 * @version $Revision: 1.3 4$ $Name: not supported by cvs2svn $9 * @date $Date: 200 8-11-07 00:03:18 $8 * @version $Revision: 1.35 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2009-01-27 06:39:38 $ 10 10 * Copyright 2004-207 Institute for Astronomy, University of Hawaii 11 11 */ … … 104 104 psImage *subMask, ///< Subtraction mask (or NULL) 105 105 int stride, ///< Size of convolution patches 106 ps MaskType maskBad, ///< Mask value to give bad pixels107 ps MaskType maskPoor, ///< Mask value to give poor pixels106 psImageMaskType maskBad, ///< Mask value to give bad pixels 107 psImageMaskType maskPoor, ///< Mask value to give poor pixels 108 108 float poorFrac, ///< Fraction for "poor" 109 109 float sysError, ///< Relative systematic error -
trunk/psModules/src/imcombine/pmSubtractionMask.c
r20832 r21183 20 20 psImage *weight, // Weight map to mark as blank (or NULL) 21 21 int x, int y, // Coordinates to mark blank 22 ps MaskType blank // Blank mask value22 psImageMaskType blank // Blank mask value 23 23 ) 24 24 { 25 25 image->data.F32[y][x] = NAN; 26 26 if (mask) { 27 mask->data.PS_TYPE_ MASK_DATA[y][x] |= blank;27 mask->data.PS_TYPE_IMAGE_MASK_DATA[y][x] |= blank; 28 28 } 29 29 if (weight) { … … 37 37 ////////////////////////////////////////////////////////////////////////////////////////////////////////////// 38 38 39 psImage *pmSubtractionMask(const psImage *mask1, const psImage *mask2, ps MaskType maskVal,39 psImage *pmSubtractionMask(const psImage *mask1, const psImage *mask2, psImageMaskType maskVal, 40 40 int size, int footprint, float badFrac, bool useFFT) 41 41 { 42 42 PS_ASSERT_IMAGE_NON_NULL(mask1, NULL); 43 PS_ASSERT_IMAGE_TYPE(mask1, PS_TYPE_ MASK, NULL);43 PS_ASSERT_IMAGE_TYPE(mask1, PS_TYPE_IMAGE_MASK, NULL); 44 44 if (mask2) { 45 45 PS_ASSERT_IMAGE_NON_NULL(mask2, NULL); 46 PS_ASSERT_IMAGE_TYPE(mask2, PS_TYPE_ MASK, NULL);46 PS_ASSERT_IMAGE_TYPE(mask2, PS_TYPE_IMAGE_MASK, NULL); 47 47 PS_ASSERT_IMAGES_SIZE_EQUAL(mask2, mask1, NULL); 48 48 } … … 57 57 58 58 // Dereference inputs for convenience 59 ps MaskType **data1 = mask1->data.PS_TYPE_MASK_DATA;60 ps MaskType **data2 = NULL;59 psImageMaskType **data1 = mask1->data.PS_TYPE_IMAGE_MASK_DATA; 60 psImageMaskType **data2 = NULL; 61 61 if (mask2) { 62 data2 = mask2->data.PS_TYPE_ MASK_DATA;62 data2 = mask2->data.PS_TYPE_IMAGE_MASK_DATA; 63 63 } 64 64 … … 86 86 87 87 // Worried about the masks for bad pixels and bad stamps colliding, so make our own mask 88 psImage *mask = psImageAlloc(numCols, numRows, PS_TYPE_ MASK); // The global mask88 psImage *mask = psImageAlloc(numCols, numRows, PS_TYPE_IMAGE_MASK); // The global mask 89 89 psImageInit(mask, 0); 90 ps MaskType **maskData = mask->data.PS_TYPE_MASK_DATA; // Dereference for convenience90 psImageMaskType **maskData = mask->data.PS_TYPE_IMAGE_MASK_DATA; // Dereference for convenience 91 91 92 92 // Block out a border around the edge of the image … … 161 161 162 162 bool pmSubtractionBorder(psImage *image, psImage *weight, psImage *mask, 163 int size, ps MaskType blank)163 int size, psImageMaskType blank) 164 164 { 165 165 PS_ASSERT_IMAGE_NON_NULL(image, false); … … 168 168 PS_ASSERT_IMAGE_NON_NULL(mask, false); 169 169 PS_ASSERT_IMAGES_SIZE_EQUAL(mask, image, false); 170 PS_ASSERT_IMAGE_TYPE(mask, PS_TYPE_ MASK, false);170 PS_ASSERT_IMAGE_TYPE(mask, PS_TYPE_IMAGE_MASK, false); 171 171 } 172 172 if (weight) { … … 211 211 } 212 212 PS_ASSERT_IMAGE_NON_NULL(mask, false); 213 PS_ASSERT_IMAGE_TYPE(mask, PS_TYPE_ MASK, false);213 PS_ASSERT_IMAGE_TYPE(mask, PS_TYPE_IMAGE_MASK, false); 214 214 PS_ASSERT_IMAGES_SIZE_EQUAL(mask, image, false); 215 215 … … 233 233 234 234 int numCols = image->numCols, numRows = image->numRows; // Size of image 235 ps MaskType **maskData = mask->data.PS_TYPE_MASK_DATA; // Dereference mask235 psImageMaskType **maskData = mask->data.PS_TYPE_IMAGE_MASK_DATA; // Dereference mask 236 236 237 237 for (int y = 0; y < numRows; y++) { -
trunk/psModules/src/imcombine/pmSubtractionMask.h
r17729 r21183 7 7 psImage *pmSubtractionMask(const psImage *refMask, ///< Mask for the reference image (will be convolved) 8 8 const psImage *inMask, ///< Mask for the input image, or NULL 9 ps MaskType maskVal, ///< Value to mask out9 psImageMaskType maskVal, ///< Value to mask out 10 10 int size, ///< Half-size of the kernel (pmSubtractionKernels.size) 11 11 int footprint, ///< Half-size of the kernel footprint … … 19 19 psImage *mask, ///< Mask (or NULL) 20 20 int size, ///< Kernel half-size 21 ps MaskType blank ///< Mask value for blank regions21 psImageMaskType blank ///< Mask value for blank regions 22 22 ); 23 23 -
trunk/psModules/src/imcombine/pmSubtractionMatch.c
r21149 r21183 98 98 int inner, int ringsOrder, int binning, float penalty, 99 99 bool optimum, const psVector *optFWHMs, int optOrder, float optThreshold, 100 int iter, float rej, float sysError, ps MaskType maskVal, psMaskType maskBad,101 ps MaskType maskPoor, float poorFrac, float badFrac, pmSubtractionMode subMode)100 int iter, float rej, float sysError, psImageMaskType maskVal, psImageMaskType maskBad, 101 psImageMaskType maskPoor, float poorFrac, float badFrac, pmSubtractionMode subMode) 102 102 { 103 103 if (subMode != PM_SUBTRACTION_MODE_2) { … … 565 565 if (width1 == 0 || width2 == 0) { 566 566 ratios->data.F32[index] = NAN; 567 mask->data.PS_TYPE_ MASK_DATA[index] = 0xff;567 mask->data.PS_TYPE_IMAGE_MASK_DATA[index] = 0xff; 568 568 } else { 569 569 ratios->data.F32[index] = (float)width1 / (float)width2; 570 mask->data.PS_TYPE_ MASK_DATA[index] = 0;570 mask->data.PS_TYPE_IMAGE_MASK_DATA[index] = 0; 571 571 psTrace("psModules.imcombine", 3, "Stamp %d (%.1f,%.1f) widths: %d, %d --> %f\n", 572 572 index, stamp->x, stamp->y, width1, width2, ratios->data.F32[index]); … … 596 596 PM_ASSERT_SUBTRACTION_STAMP_LIST_NON_NULL(stamps, PM_SUBTRACTION_MODE_ERR); 597 597 598 psVector *mask = psVectorAlloc(stamps->num, PS_TYPE_ MASK); // Mask for stamps598 psVector *mask = psVectorAlloc(stamps->num, PS_TYPE_VECTOR_MASK); // Mask for stamps 599 599 psVector *ratios = psVectorAlloc(stamps->num, PS_TYPE_F32); // Ratios of widths 600 600 … … 624 624 pmSubtractionStamp *stamp = stamps->stamps->data[i]; // Stamp of interest 625 625 if (stamp->status != PM_SUBTRACTION_STAMP_CALCULATE && stamp->status != PM_SUBTRACTION_STAMP_USED) { 626 mask->data.PS_TYPE_ MASK_DATA[i] = 0xff;626 mask->data.PS_TYPE_VECTOR_MASK_DATA[i] = 0xff; 627 627 continue; 628 628 } -
trunk/psModules/src/imcombine/pmSubtractionMatch.h
r20568 r21183 40 40 float rej, ///< Rejection threshold 41 41 float sysError, ///< Relative systematic error 42 ps MaskType maskVal, ///< Value to mask for input43 ps MaskType maskBad, ///< Mask for output bad pixels44 ps MaskType maskPoor, ///< Mask for output poor pixels42 psImageMaskType maskVal, ///< Value to mask for input 43 psImageMaskType maskBad, ///< Mask for output bad pixels 44 psImageMaskType maskPoor, ///< Mask for output poor pixels 45 45 float poorFrac, ///< Fraction for "poor" 46 46 float badFrac, ///< Maximum fraction of bad input pixels to accept -
trunk/psModules/src/imcombine/pmSubtractionStamps.c
r20937 r21183 98 98 99 99 // Determine mask value 100 ps MaskType maskVal = PM_SUBTRACTION_MASK_BORDER | PM_SUBTRACTION_MASK_BAD_1 | PM_SUBTRACTION_MASK_BAD_2;100 psImageMaskType maskVal = PM_SUBTRACTION_MASK_BORDER | PM_SUBTRACTION_MASK_BAD_1 | PM_SUBTRACTION_MASK_BAD_2; 101 101 switch (mode) { 102 102 case PM_SUBTRACTION_MODE_1: … … 115 115 116 116 // Check the immediate pixel 117 if (clean && (mask->data.PS_TYPE_ MASK_DATA[y][x] & (maskVal | PM_SUBTRACTION_MASK_REJ))) {117 if (clean && (mask->data.PS_TYPE_IMAGE_MASK_DATA[y][x] & (maskVal | PM_SUBTRACTION_MASK_REJ))) { 118 118 clean = false; 119 119 } … … 126 126 for (int j = yMin; j <= yMax; j++) { 127 127 for (int i = xMin; i <= xMax; i++) { 128 if (mask->data.PS_TYPE_ MASK_DATA[j][i] & maskVal) {128 if (mask->data.PS_TYPE_IMAGE_MASK_DATA[j][i] & maskVal) { 129 129 clean = false; 130 130 goto CHECK_STAMP_MASK_DONE; … … 139 139 for (int j = yMin; j <= yMax; j++) { 140 140 for (int i = xMin; i <= xMax; i++) { 141 mask->data.PS_TYPE_ MASK_DATA[j][i] |= PM_SUBTRACTION_MASK_REJ;141 mask->data.PS_TYPE_IMAGE_MASK_DATA[j][i] |= PM_SUBTRACTION_MASK_REJ; 142 142 } 143 143 } … … 235 235 PS_ASSERT_IMAGE_NON_NULL(subMask, NULL); 236 236 PS_ASSERT_IMAGES_SIZE_EQUAL(image, subMask, NULL); 237 PS_ASSERT_IMAGE_TYPE(subMask, PS_TYPE_ MASK, NULL);237 PS_ASSERT_IMAGE_TYPE(subMask, PS_TYPE_IMAGE_MASK, NULL); 238 238 } 239 239 PS_ASSERT_INT_NONNEGATIVE(footprint, NULL); … … 377 377 if (subMask) { 378 378 PS_ASSERT_IMAGE_NON_NULL(subMask, NULL); 379 PS_ASSERT_IMAGE_TYPE(subMask, PS_TYPE_ MASK, NULL);379 PS_ASSERT_IMAGE_TYPE(subMask, PS_TYPE_IMAGE_MASK, NULL); 380 380 if (image) { 381 381 PS_ASSERT_IMAGE_NON_NULL(image, NULL); -
trunk/psModules/src/objects/pmFootprintArrayGrow.c
r20937 r21183 3 3 * @author RHL, Princeton & IfA; EAM, IfA 4 4 * 5 * @version $Revision: 1.1 1$ $Name: not supported by cvs2svn $6 * @date $Date: 200 8-12-08 02:51:14$5 * @version $Revision: 1.12 $ $Name: not supported by cvs2svn $ 6 * @date $Date: 2009-01-27 06:39:38 $ 7 7 * Copyright 2006 Institute for Astronomy, University of Hawaii 8 8 */ … … 45 45 // Use a separable convolution: should be faster 46 46 idImage = (psImage*)psBinaryOp(idImage, idImage, "MIN", psScalarAlloc(1, PS_TYPE_S32)); 47 psImage *idImageMask = psImageCopy(NULL, idImage, PS_TYPE_ MASK); // Image with 1 = object47 psImage *idImageMask = psImageCopy(NULL, idImage, PS_TYPE_IMAGE_MASK); // Image with 1 = object 48 48 psImage *grownIdImage = psImageConvolveMask(NULL, idImageMask, 0x01, 0x01, -r, r, -r, r); // Grown mask 49 49 if (!grownIdImage) { -
trunk/psModules/src/objects/pmFootprintFindAtPoint.c
r20937 r21183 4 4 * @author RHL, Princeton & IfA; EAM, IfA 5 5 * 6 * @version $Revision: 1. 3$ $Name: not supported by cvs2svn $7 * @date $Date: 200 8-12-08 02:51:14$6 * @version $Revision: 1.4 $ $Name: not supported by cvs2svn $ 7 * @date $Date: 2009-01-27 06:39:38 $ 8 8 * Copyright 2006 Institute for Astronomy, University of Hawaii 9 9 */ … … 77 77 78 78 if (mask != NULL) { // remember that we've detected these pixels 79 ps MaskType *mpix = &mask->data.PS_TYPE_MASK_DATA[span->y - mask->row0][span->x0 - mask->col0];79 psImageMaskType *mpix = &mask->data.PS_TYPE_IMAGE_MASK_DATA[span->y - mask->row0][span->x0 - mask->col0]; 80 80 81 81 for (int i = 0; i <= span->x1 - span->x0; i++) { … … 143 143 psF32 *imgRowF32 = NULL; // row pointer if F32 144 144 psS32 *imgRowS32 = NULL; // " " " " !F32 145 ps MaskType *maskRow = NULL; // masks's row pointer145 psImageMaskType *maskRow = NULL; // masks's row pointer 146 146 147 147 const int row0 = img->row0; … … 186 186 imgRowF32 = img->data.F32[i]; // only one of 187 187 imgRowS32 = img->data.S32[i]; // these is valid! 188 maskRow = mask->data.PS_TYPE_ MASK_DATA[i];188 maskRow = mask->data.PS_TYPE_IMAGE_MASK_DATA[i]; 189 189 // 190 190 // Search left from the pixel diagonally to the left of (i - di, x0). If there's … … 354 354 * looking for the rest of the pmFootprint. These are generally set from peaks. 355 355 */ 356 psImage *mask = psImageAlloc(numCols, numRows, PS_TYPE_ MASK);356 psImage *mask = psImageAlloc(numCols, numRows, PS_TYPE_IMAGE_MASK); 357 357 P_PSIMAGE_SET_ROW0(mask, row0); 358 358 P_PSIMAGE_SET_COL0(mask, col0); … … 365 365 for (int i = 0; i < peaks->n; i++) { 366 366 pmPeak *peak = peaks->data[i]; 367 mask->data.PS_TYPE_ MASK_DATA[peak->y - mask->row0][peak->x - mask->col0] |= PM_SSPAN_STOP;367 mask->data.PS_TYPE_IMAGE_MASK_DATA[peak->y - mask->row0][peak->x - mask->col0] |= PM_SSPAN_STOP; 368 368 } 369 369 } … … 375 375 imgRowF32 = img->data.F32[row]; // only one of 376 376 imgRowS32 = img->data.S32[row]; // these is valid! 377 ps MaskType *maskRow = mask->data.PS_TYPE_MASK_DATA[row];377 psImageMaskType *maskRow = mask->data.PS_TYPE_IMAGE_MASK_DATA[row]; 378 378 { 379 379 int i; -
trunk/psModules/src/objects/pmGrowthCurveGenerate.c
r20937 r21183 5 5 * @author EAM, IfA 6 6 * 7 * @version $Revision: 1. 4$ $Name: not supported by cvs2svn $8 * @date $Date: 200 8-12-08 02:51:14$7 * @version $Revision: 1.5 $ $Name: not supported by cvs2svn $ 8 * @date $Date: 2009-01-27 06:39:38 $ 9 9 * 10 10 * Copyright 2004 Institute for Astronomy, University of Hawaii … … 41 41 #include "pmErrorCodes.h" 42 42 43 pmGrowthCurve *pmGrowthCurveForPosition (psImage *image, pmPSF *psf, bool ignore, ps MaskType maskVal, psMaskType markVal, float xc, float yc);43 pmGrowthCurve *pmGrowthCurveForPosition (psImage *image, pmPSF *psf, bool ignore, psImageMaskType maskVal, psImageMaskType markVal, float xc, float yc); 44 44 45 45 /*****************************************************************************/ … … 48 48 49 49 // we generate the growth curve for the center of the image with the specified psf model 50 bool pmGrowthCurveGenerate (pmReadout *readout, pmPSF *psf, bool ignore, ps MaskType maskVal, psMaskType markVal)50 bool pmGrowthCurveGenerate (pmReadout *readout, pmPSF *psf, bool ignore, psImageMaskType maskVal, psImageMaskType markVal) 51 51 { 52 52 PS_ASSERT_PTR_NON_NULL(readout, false); … … 119 119 } 120 120 121 pmGrowthCurve *pmGrowthCurveForPosition (psImage *image, pmPSF *psf, bool ignore, ps MaskType maskVal, psMaskType markVal, float xc, float yc) {121 pmGrowthCurve *pmGrowthCurveForPosition (psImage *image, pmPSF *psf, bool ignore, psImageMaskType maskVal, psImageMaskType markVal, float xc, float yc) { 122 122 123 123 float fitMag, apMag; … … 162 162 psImage *view = psImageSubset (image, region); 163 163 psImage *pixels = psImageCopy (NULL, view, PS_TYPE_F32); 164 psImage *mask = psImageCopy (NULL, view, PS_TYPE_ U8);164 psImage *mask = psImageCopy (NULL, view, PS_TYPE_IMAGE_MASK); 165 165 166 166 psImageInit (pixels, 0.0); … … 189 189 return NULL; 190 190 } 191 psImageKeepCircle (mask, xc, yc, radius, "AND", PS_NOT_ U8(markVal));191 psImageKeepCircle (mask, xc, yc, radius, "AND", PS_NOT_IMAGE_MASK(markVal)); 192 192 193 193 // the 'ignore' mode is for testing -
trunk/psModules/src/objects/pmModel.c
r20592 r21183 6 6 * @author EAM, IfA 7 7 * 8 * @version $Revision: 1.2 5$ $Name: not supported by cvs2svn $9 * @date $Date: 200 8-11-09 00:28:18 $8 * @version $Revision: 1.26 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2009-01-27 06:39:38 $ 10 10 * 11 11 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 172 172 pmModelOpMode mode, 173 173 bool add, 174 ps MaskType maskVal,174 psImageMaskType maskVal, 175 175 int dx, 176 176 int dy … … 229 229 psF32 **Rx = NULL; 230 230 psF32 **Ry = NULL; 231 ps U8**Rm = NULL;231 psImageMaskType **Rm = NULL; 232 232 233 233 if (model->residuals) { … … 237 237 Rx = (model->residuals->Rx) ? model->residuals->Rx->data.F32 : NULL; 238 238 Ry = (model->residuals->Ry) ? model->residuals->Ry->data.F32 : NULL; 239 Rm = (model->residuals->mask) ? model->residuals->mask->data. U8: NULL;239 Rm = (model->residuals->mask) ? model->residuals->mask->data.PS_TYPE_IMAGE_MASK_DATA : NULL; 240 240 if (Ro) { 241 241 NX = model->residuals->Ro->numCols; … … 249 249 for (psS32 iy = 0; iy < image->numRows; iy++) { 250 250 for (psS32 ix = 0; ix < image->numCols; ix++) { 251 if ((mask != NULL) && (mask->data. U8[iy][ix] & maskVal))251 if ((mask != NULL) && (mask->data.PS_TYPE_IMAGE_MASK_DATA[iy][ix] & maskVal)) 252 252 continue; 253 253 … … 351 351 pmModel *model, 352 352 pmModelOpMode mode, 353 ps MaskType maskVal)353 psImageMaskType maskVal) 354 354 { 355 355 psTrace("psModules.objects", 3, "---- %s() begin ----\n", __func__); … … 365 365 pmModel *model, 366 366 pmModelOpMode mode, 367 ps MaskType maskVal)367 psImageMaskType maskVal) 368 368 { 369 369 psTrace("psModules.objects", 3, "---- %s() begin ----\n", __func__); … … 379 379 pmModel *model, 380 380 pmModelOpMode mode, 381 ps MaskType maskVal,381 psImageMaskType maskVal, 382 382 int dx, 383 383 int dy) … … 395 395 pmModel *model, 396 396 pmModelOpMode mode, 397 ps MaskType maskVal,397 psImageMaskType maskVal, 398 398 int dx, 399 399 int dy) -
trunk/psModules/src/objects/pmModel.h
r20945 r21183 5 5 * @author EAM, IfA 6 6 * 7 * @version $Revision: 1.1 7$ $Name: not supported by cvs2svn $8 * @date $Date: 200 8-12-09 21:16:09$7 * @version $Revision: 1.18 $ $Name: not supported by cvs2svn $ 8 * @date $Date: 2009-01-27 06:39:38 $ 9 9 * 10 10 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 150 150 pmModel *model, ///< The input pmModel 151 151 pmModelOpMode mode, ///< mode to control how the model is added into the image 152 ps MaskType maskVal///< Value to mask152 psImageMaskType maskVal ///< Value to mask 153 153 ); 154 154 … … 168 168 pmModel *model, ///< The input pmModel 169 169 pmModelOpMode mode, ///< mode to control how the model is added into the image 170 ps MaskType maskVal///< Value to mask170 psImageMaskType maskVal ///< Value to mask 171 171 ); 172 172 … … 175 175 pmModel *model, 176 176 pmModelOpMode mode, 177 ps MaskType maskVal,177 psImageMaskType maskVal, 178 178 int dx, 179 179 int dy); … … 183 183 pmModel *model, 184 184 pmModelOpMode mode, 185 ps MaskType maskVal,185 psImageMaskType maskVal, 186 186 int dx, 187 187 int dy); -
trunk/psModules/src/objects/pmPSF.h
r20945 r21183 6 6 * @author EAM, IfA 7 7 * 8 * @version $Revision: 1.2 1$ $Name: not supported by cvs2svn $9 * @date $Date: 200 8-12-09 21:16:09$8 * @version $Revision: 1.22 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2009-01-27 06:39:38 $ 10 10 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii 11 11 */ … … 102 102 double pmPSF_SXYtoModel (psF32 *fittedPar); 103 103 104 bool pmGrowthCurveGenerate (pmReadout *readout, pmPSF *psf, bool ignore, ps MaskType maskVal, psMaskType mark);104 bool pmGrowthCurveGenerate (pmReadout *readout, pmPSF *psf, bool ignore, psImageMaskType maskVal, psImageMaskType mark); 105 105 pmPSF *pmPSFBuildSimple (char *typeName, float sxx, float syy, float sxy, ...); 106 106 -
trunk/psModules/src/objects/pmPSF_IO.c
r20937 r21183 6 6 * @author EAM, IfA 7 7 * 8 * @version $Revision: 1.3 6$ $Name: not supported by cvs2svn $9 * @date $Date: 200 8-12-08 02:51:14$8 * @version $Revision: 1.37 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2009-01-27 06:39:38 $ 10 10 * 11 11 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 871 871 psFitsReadImageBuffer(psf->residuals->Ry, file->fits, fullImage, 2); // Desired pixels 872 872 } 873 // XXX notice that we are not saving the resid->mask 873 874 } 874 875 -
trunk/psModules/src/objects/pmPSFtry.c
r21173 r21183 5 5 * @author EAM, IfA 6 6 * 7 * @version $Revision: 1.68 $ $Name: not supported by cvs2svn $ 8 * @date $Date: 2009-01-27 00:01:33 $ 9 * 7 * @version $Revision: 1.69 $ $Name: not supported by cvs2svn $ 8 * @date $Date: 2009-01-27 06:39:38 $ 10 9 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii 11 10 * … … 115 114 test->metricErr = psVectorAlloc (sources->n, PS_TYPE_F32); 116 115 test->fitMag = psVectorAlloc (sources->n, PS_TYPE_F32); 117 test->mask = psVectorAlloc (sources->n, PS_TYPE_ U8);116 test->mask = psVectorAlloc (sources->n, PS_TYPE_VECTOR_MASK); 118 117 119 118 psVectorInit (test->mask, 0); … … 148 147 149 148 // generate a pmPSFtry with a copy of the test PSF sources 150 pmPSFtry *pmPSFtryModel (const psArray *sources, const char *modelName, pmPSFOptions *options, ps MaskType maskVal, psMaskType markVal)149 pmPSFtry *pmPSFtryModel (const psArray *sources, const char *modelName, pmPSFOptions *options, psImageMaskType maskVal, psImageMaskType markVal) 151 150 { 152 151 bool status; … … 176 175 pmSource *source = psfTry->sources->data[i]; 177 176 if (!source->moments) { 178 psfTry->mask->data. U8[i] = PSFTRY_MASK_EXT_FAIL;177 psfTry->mask->data.PS_TYPE_VECTOR_MASK_DATA[i] = PSFTRY_MASK_EXT_FAIL; 179 178 continue; 180 179 } 181 180 if (!source->moments->nPixels) { 182 psfTry->mask->data. U8[i] = PSFTRY_MASK_EXT_FAIL;181 psfTry->mask->data.PS_TYPE_VECTOR_MASK_DATA[i] = PSFTRY_MASK_EXT_FAIL; 183 182 continue; 184 183 } … … 186 185 source->modelEXT = pmSourceModelGuess (source, psfTry->psf->type); 187 186 if (source->modelEXT == NULL) { 188 psfTry->mask->data. U8[i] = PSFTRY_MASK_EXT_FAIL;187 psfTry->mask->data.PS_TYPE_VECTOR_MASK_DATA[i] = PSFTRY_MASK_EXT_FAIL; 189 188 psTrace ("psModules.objects", 4, "masking %d (%d,%d) : failed to generate model guess\n", i, source->peak->x, source->peak->y); 190 189 continue; … … 198 197 199 198 // clear object mask to define valid pixels 200 psImageKeepCircle (source->maskObj, source->peak->x, source->peak->y, options->radius, "AND", PS_NOT_ U8(markVal));199 psImageKeepCircle (source->maskObj, source->peak->x, source->peak->y, options->radius, "AND", PS_NOT_IMAGE_MASK(markVal)); 201 200 202 201 // exclude the poor fits 203 202 if (!status) { 204 psfTry->mask->data. U8[i] = PSFTRY_MASK_EXT_FAIL;203 psfTry->mask->data.PS_TYPE_VECTOR_MASK_DATA[i] = PSFTRY_MASK_EXT_FAIL; 205 204 psTrace ("psModules.objects", 4, "masking %d (%d,%d) : status is poor\n", i, source->peak->x, source->peak->y); 206 205 continue; … … 231 230 232 231 // masked for: bad model fit, outlier in parameters 233 if (psfTry->mask->data. U8[i] & PSFTRY_MASK_ALL) {232 if (psfTry->mask->data.PS_TYPE_VECTOR_MASK_DATA[i] & PSFTRY_MASK_ALL) { 234 233 psTrace ("psModules.objects", 4, "dropping %d (%d,%d) : source is masked\n", i, source->peak->x, source->peak->y); 235 234 continue; … … 239 238 source->modelPSF = pmModelFromPSF (source->modelEXT, psfTry->psf); 240 239 if (source->modelPSF == NULL) { 241 psfTry->mask->data. U8[i] = PSFTRY_MASK_BAD_MODEL;240 psfTry->mask->data.PS_TYPE_VECTOR_MASK_DATA[i] = PSFTRY_MASK_BAD_MODEL; 242 241 abort(); 243 242 continue; … … 253 252 // skip poor fits 254 253 if (!status) { 255 psImageKeepCircle (source->maskObj, source->peak->x, source->peak->y, options->radius, "AND", PS_NOT_ U8(markVal));256 psfTry->mask->data. U8[i] = PSFTRY_MASK_PSF_FAIL;254 psImageKeepCircle (source->maskObj, source->peak->x, source->peak->y, options->radius, "AND", PS_NOT_IMAGE_MASK(markVal)); 255 psfTry->mask->data.PS_TYPE_VECTOR_MASK_DATA[i] = PSFTRY_MASK_PSF_FAIL; 257 256 psTrace ("psModules.objects", 4, "dropping %d (%d,%d) : failed PSF fit\n", i, source->peak->x, source->peak->y); 258 257 continue; … … 261 260 status = pmSourceMagnitudes (source, psfTry->psf, PM_SOURCE_PHOT_INTERP, maskVal); 262 261 if (!status || isnan(source->apMag)) { 263 psImageKeepCircle (source->maskObj, source->peak->x, source->peak->y, options->radius, "AND", PS_NOT_ U8(markVal));264 psfTry->mask->data. U8[i] = PSFTRY_MASK_BAD_PHOT;262 psImageKeepCircle (source->maskObj, source->peak->x, source->peak->y, options->radius, "AND", PS_NOT_IMAGE_MASK(markVal)); 263 psfTry->mask->data.PS_TYPE_VECTOR_MASK_DATA[i] = PSFTRY_MASK_BAD_PHOT; 265 264 psTrace ("psModules.objects", 4, "dropping %d (%d,%d) : poor photometry\n", i, source->peak->x, source->peak->y); 266 265 continue; … … 268 267 269 268 // clear object mask to define valid pixels 270 psImageKeepCircle (source->maskObj, source->peak->x, source->peak->y, options->radius, "AND", PS_NOT_ U8(markVal));269 psImageKeepCircle (source->maskObj, source->peak->x, source->peak->y, options->radius, "AND", PS_NOT_IMAGE_MASK(markVal)); 271 270 272 271 psfTry->fitMag->data.F32[i] = source->psfMag; … … 292 291 psVector *flux = psVectorAlloc (psfTry->sources->n, PS_TYPE_F32); 293 292 psVector *chisq = psVectorAlloc (psfTry->sources->n, PS_TYPE_F32); 294 psVector *mask = psVectorAlloc (psfTry->sources->n, PS_TYPE_ MASK);293 psVector *mask = psVectorAlloc (psfTry->sources->n, PS_TYPE_VECTOR_MASK); 295 294 296 295 // generate the x and y vectors, and mask missing models … … 300 299 flux->data.F32[i] = 0.0; 301 300 chisq->data.F32[i] = 0.0; 302 mask->data. U8[i] = 0xff;301 mask->data.PS_TYPE_VECTOR_MASK_DATA[i] = 0xff; 303 302 } else { 304 303 flux->data.F32[i] = source->modelPSF->params->data.F32[PM_PAR_I0]; 305 304 chisq->data.F32[i] = source->modelPSF->chisq / source->modelPSF->nDOF; 306 mask->data. U8[i] = 0;305 mask->data.PS_TYPE_VECTOR_MASK_DATA[i] = 0; 307 306 } 308 307 } … … 312 311 313 312 // linear clipped fit of chisq trend vs flux 314 bool result = psVectorClipFitPolynomial1D(psfTry->psf->ChiTrend, options->stats, mask, 315 0xff, chisq, NULL, flux); 313 bool result = psVectorClipFitPolynomial1D(psfTry->psf->ChiTrend, options->stats, mask, 0xff, chisq, NULL, flux); 316 314 psStatsOptions meanStat = psStatsMeanOption(options->stats->options); // Statistic for mean 317 315 psStatsOptions stdevStat = psStatsStdevOption(options->stats->options); // Statistic for stdev … … 370 368 371 369 for (int i = 0; i < psfTry->sources->n; i++) { 372 if (psfTry->mask->data. U8[i] & PSFTRY_MASK_ALL)370 if (psfTry->mask->data.PS_TYPE_VECTOR_MASK_DATA[i] & PSFTRY_MASK_ALL) 373 371 continue; 374 372 r2rflux->data.F32[i] = PS_SQR(RADIUS) * pow(10.0, 0.4*psfTry->fitMag->data.F32[i]); … … 379 377 FILE *f = fopen ("apresid.dat", "w"); 380 378 for (int i = 0; i < psfTry->sources->n; i++) { 381 int keep = (psfTry->mask->data. U8[i] & PSFTRY_MASK_ALL);379 int keep = (psfTry->mask->data.PS_TYPE_VECTOR_MASK_DATA[i] & PSFTRY_MASK_ALL); 382 380 383 381 pmSource *source = psfTry->sources->data[i]; … … 427 425 psVector *apfit = psPolynomial1DEvalVector (poly, r2rflux); 428 426 for (int i = 0; i < psfTry->sources->n; i++) { 429 int keep = (psfTry->mask->data. U8[i] & PSFTRY_MASK_ALL);427 int keep = (psfTry->mask->data.PS_TYPE_VECTOR_MASK_DATA[i] & PSFTRY_MASK_ALL); 430 428 431 429 pmSource *source = psfTry->sources->data[i]; … … 603 601 for (int i = 0; i < sources->n; i++) { 604 602 // skip any masked sources (failed to fit one of the model steps or get a magnitude) 605 if (srcMask->data. U8[i]) continue;603 if (srcMask->data.PS_TYPE_VECTOR_MASK_DATA[i]) continue; 606 604 607 605 pmSource *source = sources->data[i]; … … 624 622 625 623 psVector *dz = NULL; 626 psVector *mask = psVectorAlloc (sources->n, PS_TYPE_ U8);624 psVector *mask = psVectorAlloc (sources->n, PS_TYPE_VECTOR_MASK); 627 625 628 626 // check the fit residuals and increase Nx,Ny until the error is minimized … … 632 630 // copy srcMask to mask (we do not want the mask values set in pmPSFFitShapeParamsMap to be sticky) 633 631 for (int i = 0; i < mask->n; i++) { 634 mask->data. U8[i] = srcMask->data.U8[i];632 mask->data.PS_TYPE_VECTOR_MASK_DATA[i] = srcMask->data.PS_TYPE_VECTOR_MASK_DATA[i]; 635 633 } 636 634 if (!pmPSFFitShapeParamsMap (psf, i, &scatterTotal, mask, x, y, mag, e0, e1, e2, dz)) { … … 651 649 // copy srcMask to mask (we do not want the mask values set in pmPSFFitShapeParamsMap to be sticky) 652 650 for (int i = 0; i < mask->n; i++) { 653 mask->data. U8[i] = srcMask->data.U8[i];651 mask->data.PS_TYPE_VECTOR_MASK_DATA[i] = srcMask->data.PS_TYPE_VECTOR_MASK_DATA[i]; 654 652 } 655 653 if (!pmPSFFitShapeParamsMap (psf, entryMin, &scatterTotal, mask, x, y, mag, e0, e1, e2, dz)) { … … 663 661 // copy mask back to srcMask 664 662 for (int i = 0; i < mask->n; i++) { 665 srcMask->data. U8[i] = mask->data.U8[i];663 srcMask->data.PS_TYPE_VECTOR_MASK_DATA[i] = mask->data.PS_TYPE_VECTOR_MASK_DATA[i]; 666 664 } 667 665 … … 736 734 pmTrend2DEval (psf->params->data[PM_PAR_E1], x->data.F32[i], y->data.F32[i]), 737 735 pmTrend2DEval (psf->params->data[PM_PAR_E2], x->data.F32[i], y->data.F32[i]), 738 srcMask->data. U8[i]);736 srcMask->data.PS_TYPE_VECTOR_MASK_DATA[i]); 739 737 } 740 738 fclose (f); … … 851 849 852 850 // the mask marks the values not used to calculate the ApTrend 853 psVector *fitMask = psVectorAlloc (x_fit->n, PS_TYPE_ U8);851 psVector *fitMask = psVectorAlloc (x_fit->n, PS_TYPE_VECTOR_MASK); 854 852 // copy mask values to fitMask as a starting point 855 853 for (int i = 0; i < fitMask->n; i++) { 856 fitMask->data. U8[i] = mask->data.U8[i];854 fitMask->data.PS_TYPE_VECTOR_MASK_DATA[i] = mask->data.PS_TYPE_VECTOR_MASK_DATA[i]; 857 855 } 858 856 … … 943 941 // XXX copy fitMask values back to mask 944 942 for (int i = 0; i < fitMask->n; i++) { 945 mask->data. U8[i] = fitMask->data.U8[i];943 mask->data.PS_TYPE_VECTOR_MASK_DATA[i] = fitMask->data.PS_TYPE_VECTOR_MASK_DATA[i]; 946 944 } 947 945 psFree (fitMask); … … 951 949 952 950 // calculate the scatter of the parameters 953 bool pmPSFShapeParamsScatter(float *scatterTotal, psVector *e0res, psVector *e1res, psVector *e2res, psVector *mask, ps MaskType maskValue, psStatsOptions stdevOpt)951 bool pmPSFShapeParamsScatter(float *scatterTotal, psVector *e0res, psVector *e1res, psVector *e2res, psVector *mask, psVectorMaskType maskValue, psStatsOptions stdevOpt) 954 952 { 955 953 … … 994 992 psVector *dE1subset = psVectorAllocEmpty (nGroup, PS_TYPE_F32); 995 993 psVector *dE2subset = psVectorAllocEmpty (nGroup, PS_TYPE_F32); 996 psVector *mkSubset = psVectorAllocEmpty (nGroup, PS_TYPE_ U8);994 psVector *mkSubset = psVectorAllocEmpty (nGroup, PS_TYPE_VECTOR_MASK); 997 995 998 996 int n = 0; … … 1007 1005 dE2subset->data.F32[j] = e2res->data.F32[N]; 1008 1006 1009 mkSubset->data. U8[j] = mask->data.U8[N];1010 if (!mask->data. U8[N]) nValid ++;1007 mkSubset->data.PS_TYPE_VECTOR_MASK_DATA[j] = mask->data.PS_TYPE_VECTOR_MASK_DATA[N]; 1008 if (!mask->data.PS_TYPE_VECTOR_MASK_DATA[N]) nValid ++; 1011 1009 } 1012 1010 if (nValid < 3) continue; -
trunk/psModules/src/objects/pmPSFtry.h
r21174 r21183 6 6 * @author EAM, IfA 7 7 * 8 * @version $Revision: 1.2 1$ $Name: not supported by cvs2svn $9 * @date $Date: 2009-01-27 0 0:02:16$8 * @version $Revision: 1.22 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2009-01-27 06:39:38 $ 10 10 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii 11 11 */ … … 48 48 pmPSF *psf; ///< Add comment. 49 49 psArray *sources; ///< pointers to the original sources 50 psVector *mask; ///< Add comment.50 psVector *mask; ///< PS_TYPE_VECTOR_MASK to flag good and bad sources 51 51 psVector *metric; ///< Add comment. 52 52 psVector *metricErr; ///< Add comment. … … 89 89 * 90 90 */ 91 pmPSFtry *pmPSFtryModel (const psArray *sources, const char *modelName, pmPSFOptions *options, ps MaskType maskVal, psMaskType mark);91 pmPSFtry *pmPSFtryModel (const psArray *sources, const char *modelName, pmPSFOptions *options, psImageMaskType maskVal, psImageMaskType mark); 92 92 93 93 /** pmPSFtryMetric() … … 129 129 bool pmPSFFitShapeParams (pmPSF *psf, psArray *sources, psVector *x, psVector *y, psVector *srcMask); 130 130 bool pmPSFFitShapeParamsMap (pmPSF *psf, int scale, float *scatterTotal, psVector *mask, psVector *x, psVector *y, psVector *mag, psVector *e0obs, psVector *e1obs, psVector *e2obs, psVector *dz); 131 bool pmPSFShapeParamsScatter(float *scatterTotal, psVector *e0res, psVector *e1res, psVector *e2res, psVector *mask, ps MaskType maskValue, psStatsOptions stdevOpt);131 bool pmPSFShapeParamsScatter(float *scatterTotal, psVector *e0res, psVector *e1res, psVector *e2res, psVector *mask, psVectorMaskType maskValue, psStatsOptions stdevOpt); 132 132 bool pmPSFShapeParamsErrors (float *errorFloor, psVector *mag, psVector *e0res, psVector *e1res, psVector *e2res, psVector *mask, int nGroup, psStatsOptions stdevOpt); 133 133 -
trunk/psModules/src/objects/pmResiduals.c
r15562 r21183 4 4 * 5 5 * @author EAM, IfA 6 * @version $Revision: 1. 3$ $Name: not supported by cvs2svn $7 * @date $Date: 200 7-11-10 01:09:20$6 * @version $Revision: 1.4 $ $Name: not supported by cvs2svn $ 7 * @date $Date: 2009-01-27 06:39:38 $ 8 8 * Copyright 2004 IfA, University of Hawaii 9 9 */ … … 43 43 resid->Ry = psImageAlloc (nX, nY, PS_TYPE_F32); 44 44 resid->weight = psImageAlloc (nX, nY, PS_TYPE_F32); 45 resid->mask = psImageAlloc (nX, nY, PS_TYPE_U8); 45 resid->mask = psImageAlloc (nX, nY, PM_TYPE_RESID_MASK); 46 47 // NOTE : the residual mask is internal only : 1 byte is sufficient 46 48 47 49 resid->xBin = xBin; -
trunk/psModules/src/objects/pmResiduals.h
r15562 r21183 4 4 * 5 5 * @author EAM, IfA 6 * @version $Revision: 1. 3$ $Name: not supported by cvs2svn $7 * @date $Date: 200 7-11-10 01:09:20$6 * @version $Revision: 1.4 $ $Name: not supported by cvs2svn $ 7 * @date $Date: 2009-01-27 06:39:38 $ 8 8 * Copyright 2004 IfA, University of Hawaii 9 9 */ … … 31 31 bool psMemCheckResiduals(psPtr ptr); 32 32 33 // macros to abstract the resid mask type : these values must be consistent 34 #define PM_TYPE_RESID_MASK PS_TYPE_U8 /**< the psElemType to use for mask image */ 35 #define PM_TYPE_RESID_MASK_DATA U8 /**< the data member to use for mask image */ 36 #define PM_TYPE_RESID_MASK_NAME "psU8" /**< the data type for mask as a string */ 37 typedef psU8 pmResidMaskType; ///< the C datatype for a mask image 38 #define PM_NOT_RESID_MASK(A)(UINT8_MAX-(A)) 39 33 40 /// @} 34 41 # endif -
trunk/psModules/src/objects/pmSource.c
r20937 r21183 6 6 * @author EAM, IfA: significant modifications. 7 7 * 8 * @version $Revision: 1.6 6$ $Name: not supported by cvs2svn $9 * @date $Date: 200 8-12-08 02:51:14$8 * @version $Revision: 1.67 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2009-01-27 06:39:38 $ 10 10 * 11 11 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 171 171 172 172 // the maskObj is a unique mask array; create a new mask image 173 source->maskObj = in->maskObj ? psImageCopy (NULL, in->maskObj, PS_TYPE_ MASK) : NULL;173 source->maskObj = in->maskObj ? psImageCopy (NULL, in->maskObj, PS_TYPE_IMAGE_MASK) : NULL; 174 174 175 175 source->type = in->type; … … 205 205 mySource->maskView = psImageSubset(readout->mask, srcRegion); 206 206 // the object mask is a copy, and used to define the source pixels 207 mySource->maskObj = psImageCopy(NULL, mySource->maskView, PS_TYPE_ MASK);207 mySource->maskObj = psImageCopy(NULL, mySource->maskView, PS_TYPE_IMAGE_MASK); 208 208 } 209 209 mySource->region = srcRegion; … … 255 255 // re-copy the main mask pixels. NOTE: the user will need to reset the object mask 256 256 // pixels (eg, with psImageKeepCircle) 257 mySource->maskObj = psImageCopy (mySource->maskObj, mySource->maskView, PS_TYPE_ MASK);257 mySource->maskObj = psImageCopy (mySource->maskObj, mySource->maskView, PS_TYPE_IMAGE_MASK); 258 258 259 259 // drop the old modelFlux pixels and force the user to re-create … … 505 505 *****************************************************************************/ 506 506 507 bool pmSourceRoughClass(psRegion *region, psArray *sources, psMetadata *recipe, pmPSFClump clump, ps MaskType maskSat)507 bool pmSourceRoughClass(psRegion *region, psArray *sources, psMetadata *recipe, pmPSFClump clump, psImageMaskType maskSat) 508 508 { 509 509 psTrace("psModules.objects", 5, "---- begin ----"); … … 738 738 psF32 *vPix = source->pixels->data.F32[row]; 739 739 psF32 *vWgt = source->weight->data.F32[row]; 740 ps U8 *vMsk = (source->maskObj == NULL) ? NULL : source->maskObj->data.U8[row];740 psImageMaskType *vMsk = (source->maskObj == NULL) ? NULL : source->maskObj->data.PS_TYPE_IMAGE_MASK_DATA[row]; 741 741 742 742 for (psS32 col = 0; col < source->pixels->numCols ; col++, vPix++, vWgt++) { … … 848 848 # endif 849 849 // construct a realization of the source model 850 bool pmSourceCacheModel (pmSource *source, ps MaskType maskVal) {850 bool pmSourceCacheModel (pmSource *source, psImageMaskType maskVal) { 851 851 PS_ASSERT_PTR_NON_NULL(source, false); 852 852 // select appropriate model … … 867 867 // construct a realization of the source model 868 868 // XXX this function should optionally save an existing psf image from modelFlux 869 bool pmSourceCachePSF (pmSource *source, ps MaskType maskVal) {869 bool pmSourceCachePSF (pmSource *source, psImageMaskType maskVal) { 870 870 PS_ASSERT_PTR_NON_NULL(source, false); 871 871 … … 885 885 886 886 // should we call pmSourceCacheModel if it does not exist? 887 bool pmSourceOp (pmSource *source, pmModelOpMode mode, bool add, ps MaskType maskVal, int dx, int dy)887 bool pmSourceOp (pmSource *source, pmModelOpMode mode, bool add, psImageMaskType maskVal, int dx, int dy) 888 888 { 889 889 PS_ASSERT_PTR_NON_NULL(source, false); … … 915 915 } 916 916 917 ps U8**mask = NULL;917 psImageMaskType **mask = NULL; 918 918 if (source->maskObj) { 919 mask = source->maskObj->data. U8;919 mask = source->maskObj->data.PS_TYPE_IMAGE_MASK_DATA; 920 920 } 921 921 … … 957 957 } 958 958 959 bool pmSourceAdd (pmSource *source, pmModelOpMode mode, ps MaskType maskVal) {959 bool pmSourceAdd (pmSource *source, pmModelOpMode mode, psImageMaskType maskVal) { 960 960 return pmSourceOp (source, mode, true, maskVal, 0, 0); 961 961 } 962 962 963 bool pmSourceSub (pmSource *source, pmModelOpMode mode, ps MaskType maskVal) {963 bool pmSourceSub (pmSource *source, pmModelOpMode mode, psImageMaskType maskVal) { 964 964 return pmSourceOp (source, mode, false, maskVal, 0, 0); 965 965 } 966 966 967 bool pmSourceAddWithOffset (pmSource *source, pmModelOpMode mode, ps MaskType maskVal, int dx, int dy) {967 bool pmSourceAddWithOffset (pmSource *source, pmModelOpMode mode, psImageMaskType maskVal, int dx, int dy) { 968 968 return pmSourceOp (source, mode, true, maskVal, dx, dy); 969 969 } 970 970 971 bool pmSourceSubWithOffset (pmSource *source, pmModelOpMode mode, ps MaskType maskVal, int dx, int dy) {971 bool pmSourceSubWithOffset (pmSource *source, pmModelOpMode mode, psImageMaskType maskVal, int dx, int dy) { 972 972 return pmSourceOp (source, mode, false, maskVal, dx, dy); 973 973 } -
trunk/psModules/src/objects/pmSource.h
r20945 r21183 3 3 * @author EAM, IfA; GLG, MHPCC 4 4 * 5 * @version $Revision: 1.2 6$ $Name: not supported by cvs2svn $6 * @date $Date: 200 8-12-09 21:16:09$5 * @version $Revision: 1.27 $ $Name: not supported by cvs2svn $ 6 * @date $Date: 2009-01-27 06:39:38 $ 7 7 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii 8 8 */ … … 210 210 psMetadata *metadata, ///< Contains classification parameters 211 211 pmPSFClump clump, ///< Statistics about the PSF clump 212 ps MaskType maskSat///< Mask value for saturated pixels212 psImageMaskType maskSat ///< Mask value for saturated pixels 213 213 ); 214 214 … … 231 231 pmModel *pmSourceGetModel (bool *isPSF, const pmSource *source); 232 232 233 bool pmSourceAdd (pmSource *source, pmModelOpMode mode, ps MaskType maskVal);234 bool pmSourceSub (pmSource *source, pmModelOpMode mode, ps MaskType maskVal);235 bool pmSourceAddWithOffset (pmSource *source, pmModelOpMode mode, ps MaskType maskVal, int dx, int dy);236 bool pmSourceSubWithOffset (pmSource *source, pmModelOpMode mode, ps MaskType maskVal, int dx, int dy);237 238 bool pmSourceOp (pmSource *source, pmModelOpMode mode, bool add, ps MaskType maskVal, int dx, int dy);239 bool pmSourceCacheModel (pmSource *source, ps MaskType maskVal);240 bool pmSourceCachePSF (pmSource *source, ps MaskType maskVal);233 bool pmSourceAdd (pmSource *source, pmModelOpMode mode, psImageMaskType maskVal); 234 bool pmSourceSub (pmSource *source, pmModelOpMode mode, psImageMaskType maskVal); 235 bool pmSourceAddWithOffset (pmSource *source, pmModelOpMode mode, psImageMaskType maskVal, int dx, int dy); 236 bool pmSourceSubWithOffset (pmSource *source, pmModelOpMode mode, psImageMaskType maskVal, int dx, int dy); 237 238 bool pmSourceOp (pmSource *source, pmModelOpMode mode, bool add, psImageMaskType maskVal, int dx, int dy); 239 bool pmSourceCacheModel (pmSource *source, psImageMaskType maskVal); 240 bool pmSourceCachePSF (pmSource *source, psImageMaskType maskVal); 241 241 242 242 int pmSourceSortBySN (const void **a, const void **b); -
trunk/psModules/src/objects/pmSourceFitModel.c
r20937 r21183 6 6 * @author GLG, MHPCC 7 7 * 8 * @version $Revision: 1.2 8$ $Name: not supported by cvs2svn $9 * @date $Date: 200 8-12-08 02:51:14$8 * @version $Revision: 1.29 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2009-01-27 06:39:38 $ 10 10 * 11 11 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 56 56 pmModel *model, 57 57 pmSourceFitMode mode, 58 ps MaskType maskVal)58 psImageMaskType maskVal) 59 59 { 60 60 psTrace("psModules.objects", 5, "---- %s begin ----\n", __func__); … … 81 81 for (psS32 j = 0; j < source->pixels->numCols; j++) { 82 82 // skip masked points 83 if (source->maskObj->data. U8[i][j] & maskVal) {83 if (source->maskObj->data.PS_TYPE_IMAGE_MASK_DATA[i][j] & maskVal) { 84 84 continue; 85 85 } … … 121 121 // create the minimization constraints 122 122 psMinConstraint *constraint = psMinConstraintAlloc(); 123 constraint->paramMask = psVectorAlloc (params->n, PS_TYPE_ U8);123 constraint->paramMask = psVectorAlloc (params->n, PS_TYPE_VECTOR_MASK); 124 124 constraint->checkLimits = model->modelLimits; 125 125 … … 131 131 nParams = 1; 132 132 psVectorInit (constraint->paramMask, 1); 133 constraint->paramMask->data. U8[PM_PAR_I0] = 0;133 constraint->paramMask->data.PS_TYPE_VECTOR_MASK_DATA[PM_PAR_I0] = 0; 134 134 break; 135 135 case PM_SOURCE_FIT_PSF: … … 137 137 nParams = 3; 138 138 psVectorInit (constraint->paramMask, 1); 139 constraint->paramMask->data. U8[PM_PAR_I0] = 0;140 constraint->paramMask->data. U8[PM_PAR_XPOS] = 0;141 constraint->paramMask->data. U8[PM_PAR_YPOS] = 0;139 constraint->paramMask->data.PS_TYPE_VECTOR_MASK_DATA[PM_PAR_I0] = 0; 140 constraint->paramMask->data.PS_TYPE_VECTOR_MASK_DATA[PM_PAR_XPOS] = 0; 141 constraint->paramMask->data.PS_TYPE_VECTOR_MASK_DATA[PM_PAR_YPOS] = 0; 142 142 break; 143 143 case PM_SOURCE_FIT_EXT: … … 145 145 nParams = params->n - 1; 146 146 psVectorInit (constraint->paramMask, 0); 147 constraint->paramMask->data. U8[PM_PAR_SKY] = 1;147 constraint->paramMask->data.PS_TYPE_VECTOR_MASK_DATA[PM_PAR_SKY] = 1; 148 148 break; 149 149 default: … … 175 175 fprintf (stderr, "%f ", params->data.F32[i]); 176 176 } 177 if ((constraint->paramMask != NULL) && constraint->paramMask->data. U8[i])177 if ((constraint->paramMask != NULL) && constraint->paramMask->data.PS_TYPE_VECTOR_MASK_DATA[i]) 178 178 continue; 179 179 dparams->data.F32[i] = sqrt(covar->data.F32[i][i]); … … 192 192 if (constraint->paramMask != NULL) { 193 193 psVector *delta = psVectorAlloc (params->n, PS_TYPE_F32); 194 psVector *altmask = psVectorAlloc (params->n, PS_TYPE_ U8);195 altmask->data. U8[0] = 1;194 psVector *altmask = psVectorAlloc (params->n, PS_TYPE_VECTOR_MASK); 195 altmask->data.PS_TYPE_VECTOR_MASK_DATA[0] = 1; 196 196 for (int i = 1; i < dparams->n; i++) { 197 altmask->data. U8[i] = (constraint->paramMask->data.U8[i]) ? 0 : 1;197 altmask->data.PS_TYPE_VECTOR_MASK_DATA[i] = (constraint->paramMask->data.PS_TYPE_VECTOR_MASK_DATA[i]) ? 0 : 1; 198 198 } 199 199 psMinimizeGaussNewtonDelta(delta, params, altmask, x, y, yErr, model->modelFunc); 200 200 201 201 for (int i = 0; i < dparams->n; i++) { 202 if (!constraint->paramMask->data. U8[i])202 if (!constraint->paramMask->data.PS_TYPE_VECTOR_MASK_DATA[i]) 203 203 continue; 204 204 // note that delta is the value *subtracted* from the parameter -
trunk/psModules/src/objects/pmSourceFitModel.h
r13898 r21183 3 3 * @author EAM, IfA; GLG, MHPCC 4 4 * 5 * @version $Revision: 1. 6$ $Name: not supported by cvs2svn $6 * @date $Date: 200 7-06-20 02:22:26$5 * @version $Revision: 1.7 $ $Name: not supported by cvs2svn $ 6 * @date $Date: 2009-01-27 06:39:38 $ 7 7 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii 8 8 */ … … 41 41 pmModel *model, ///< model to be fitted 42 42 pmSourceFitMode mode, ///< define parameters to be fitted 43 ps MaskType maskVal///< Value to mask43 psImageMaskType maskVal ///< Value to mask 44 44 ); 45 45 … … 71 71 psArray *modelSet, ///< model to be fitted 72 72 pmSourceFitMode mode, ///< define parameters to be fitted 73 ps MaskType maskVal///< Vale to mask73 psImageMaskType maskVal ///< Vale to mask 74 74 75 75 ); -
trunk/psModules/src/objects/pmSourceFitSet.c
r21163 r21183 6 6 * @author GLG, MHPCC 7 7 * 8 * @version $Revision: 1.13 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2009-01-24 20:52:26 $ 10 * 8 * @version $Revision: 1.14 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2009-01-27 06:39:38 $ 11 10 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii 12 11 * … … 394 393 for (int j = 0; j < paramOne->n; j++) { 395 394 if (j == PM_PAR_I0) continue; 396 constraint->paramMask->data. U8[n + j] = 1;395 constraint->paramMask->data.PS_TYPE_VECTOR_MASK_DATA[n + j] = 1; 397 396 } 398 397 break; … … 403 402 if (j == PM_PAR_YPOS) continue; 404 403 if (j == PM_PAR_I0) continue; 405 constraint->paramMask->data. U8[n + j] = 1;404 constraint->paramMask->data.PS_TYPE_VECTOR_MASK_DATA[n + j] = 1; 406 405 } 407 406 break; 408 407 case PM_SOURCE_FIT_EXT: 409 408 // EXT model fits all params (except sky) 410 constraint->paramMask->data. U8[n + PM_PAR_SKY] = 1;409 constraint->paramMask->data.PS_TYPE_VECTOR_MASK_DATA[n + PM_PAR_SKY] = 1; 411 410 break; 412 411 default: … … 445 444 psArray *modelSet, 446 445 pmSourceFitMode mode, 447 ps MaskType maskVal)446 psImageMaskType maskVal) 448 447 { 449 448 psTrace("psModules.objects", 3, "---- %s begin ----\n", __func__); … … 469 468 for (psS32 j = 0; j < source->pixels->numCols; j++) { 470 469 // skip masked points 471 if (source->maskObj->data. U8[i][j] & maskVal) {470 if (source->maskObj->data.PS_TYPE_IMAGE_MASK_DATA[i][j] & maskVal) { 472 471 continue; 473 472 } … … 515 514 // create the minimization constraints 516 515 psMinConstraint *constraint = psMinConstraintAlloc(); 517 constraint->paramMask = psVectorAlloc (thisSet->nParamSet, PS_TYPE_ U8);516 constraint->paramMask = psVectorAlloc (thisSet->nParamSet, PS_TYPE_VECTOR_MASK); 518 517 constraint->checkLimits = pmSourceFitSetCheckLimits; 519 518 … … 528 527 if (psTraceGetLevel("psModules.objects") >= 5) { 529 528 for (int i = 0; i < params->n; i++) { 530 fprintf (stderr, "%d %f %d\n", i, params->data.F32[i], constraint->paramMask->data. U8[i]);529 fprintf (stderr, "%d %f %d\n", i, params->data.F32[i], constraint->paramMask->data.PS_TYPE_VECTOR_MASK_DATA[i]); 531 530 } 532 531 } … … 560 559 psVector *dparams = psVectorAlloc (thisSet->nParamSet, PS_TYPE_F32); 561 560 for (int i = 0; i < dparams->n; i++) { 562 if ((constraint->paramMask != NULL) && constraint->paramMask->data. U8[i])561 if ((constraint->paramMask != NULL) && constraint->paramMask->data.PS_TYPE_VECTOR_MASK_DATA[i]) 563 562 continue; 564 563 dparams->data.F32[i] = sqrt(covar->data.F32[i][i]); … … 568 567 if (constraint->paramMask != NULL) { 569 568 psVector *delta = psVectorAlloc (params->n, PS_TYPE_F32); 570 psVector *altmask = psVectorAlloc (params->n, PS_TYPE_ U8);571 altmask->data. U8[0] = 1;569 psVector *altmask = psVectorAlloc (params->n, PS_TYPE_VECTOR_MASK); 570 altmask->data.PS_TYPE_VECTOR_MASK_DATA[0] = 1; 572 571 for (int i = 1; i < dparams->n; i++) { 573 altmask->data. U8[i] = (constraint->paramMask->data.U8[i]) ? 0 : 1;572 altmask->data.PS_TYPE_VECTOR_MASK_DATA[i] = (constraint->paramMask->data.PS_TYPE_VECTOR_MASK_DATA[i]) ? 0 : 1; 574 573 } 575 574 psMinimizeGaussNewtonDelta(delta, params, altmask, x, y, yErr, pmSourceFitSetFunction); 576 575 577 576 for (int i = 0; i < dparams->n; i++) { 578 if (!constraint->paramMask->data. U8[i])577 if (!constraint->paramMask->data.PS_TYPE_VECTOR_MASK_DATA[i]) 579 578 continue; 580 579 // note that delta is the value *subtracted* from the parameter -
trunk/psModules/src/objects/pmSourceFitSet.h
r21163 r21183 3 3 * @author EAM, IfA; GLG, MHPCC 4 4 * 5 * @version $Revision: 1. 7$ $Name: not supported by cvs2svn $6 * @date $Date: 2009-01-2 4 20:52:26$5 * @version $Revision: 1.8 $ $Name: not supported by cvs2svn $ 6 * @date $Date: 2009-01-27 06:39:38 $ 7 7 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii 8 8 */ … … 54 54 */ 55 55 bool pmSourceFitSet( 56 pmSource *source, ///< The input pmSource57 psArray *modelSet, ///< model to be fitted58 pmSourceFitMode mode, ///< define parameters to be fitted59 ps MaskType maskVal///< Vale to mask56 pmSource *source, ///< The input pmSource 57 psArray *modelSet, ///< model to be fitted 58 pmSourceFitMode mode, ///< define parameters to be fitted 59 psImageMaskType maskVal ///< Vale to mask 60 60 61 61 ); -
trunk/psModules/src/objects/pmSourceMatch.c
r21105 r21183 122 122 match->image = psVectorAllocEmpty(num, PS_TYPE_U32); 123 123 match->index = psVectorAllocEmpty(num, PS_TYPE_U32); 124 match->mask = psVectorAllocEmpty(num, PS_TYPE_ MASK);124 match->mask = psVectorAllocEmpty(num, PS_TYPE_VECTOR_MASK); 125 125 126 126 return match; … … 143 143 match->image->data.S32[num] = image; 144 144 match->index->data.S32[num] = index; 145 match->mask->data.PS_TYPE_ MASK_DATA[num] = 0;145 match->mask->data.PS_TYPE_VECTOR_MASK_DATA[num] = 0; 146 146 match->num++; 147 147 … … 316 316 double star = 0.0, starErr = 0.0; // Accumulators for star 317 317 for (int j = 0; j < match->num; j++) { 318 if (match->mask->data.PS_TYPE_ MASK_DATA[j]) {318 if (match->mask->data.PS_TYPE_VECTOR_MASK_DATA[j]) { 319 319 continue; 320 320 } … … 347 347 pmSourceMatch *match = matches->data[i]; // Matched stars 348 348 for (int j = 0; j < match->num; j++) { 349 if (match->mask->data.PS_TYPE_ MASK_DATA[j]) {349 if (match->mask->data.PS_TYPE_VECTOR_MASK_DATA[j]) { 350 350 continue; 351 351 } … … 373 373 pmSourceMatch *match = matches->data[i]; // Matched stars 374 374 for (int j = 0; j < match->num; j++) { 375 if (match->mask->data.PS_TYPE_ MASK_DATA[j]) {375 if (match->mask->data.PS_TYPE_VECTOR_MASK_DATA[j]) { 376 376 continue; 377 377 } … … 474 474 pmSourceMatch *match = matches->data[i]; // Matched stars 475 475 for (int j = 0; j < match->num; j++) { 476 if (match->mask->data.PS_TYPE_ MASK_DATA[j]) {476 if (match->mask->data.PS_TYPE_VECTOR_MASK_DATA[j]) { 477 477 continue; 478 478 } … … 488 488 if (PS_SQR(dev) > starClip * (PS_SQR(magErr) + sysErr2)) { 489 489 numRejected++; 490 match->mask->data.PS_TYPE_ MASK_DATA[j] = 0xFF;490 match->mask->data.PS_TYPE_VECTOR_MASK_DATA[j] = 0xFF; 491 491 } 492 492 } -
trunk/psModules/src/objects/pmSourceMoments.c
r20937 r21183 6 6 * @author EAM, IfA: significant modifications. 7 7 * 8 * @version $Revision: 1. 6$ $Name: not supported by cvs2svn $9 * @date $Date: 200 8-12-08 02:51:14$8 * @version $Revision: 1.7 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2009-01-27 06:39:38 $ 10 10 * 11 11 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 100 100 psF32 *vPix = source->pixels->data.F32[row]; 101 101 psF32 *vWgt = source->weight->data.F32[row]; 102 ps U8 *vMsk = (source->maskObj == NULL) ? NULL : source->maskObj->data.U8[row];102 psImageMaskType *vMsk = (source->maskObj == NULL) ? NULL : source->maskObj->data.PS_TYPE_IMAGE_MASK_DATA[row]; 103 103 104 104 for (psS32 col = 0; col < source->pixels->numCols ; col++, vPix++, vWgt++) { … … 190 190 psF32 *vPix = source->pixels->data.F32[row]; 191 191 psF32 *vWgt = source->weight->data.F32[row]; 192 ps U8 *vMsk = (source->maskObj == NULL) ? NULL : source->maskObj->data.U8[row];192 psImageMaskType *vMsk = (source->maskObj == NULL) ? NULL : source->maskObj->data.PS_TYPE_IMAGE_MASK_DATA[row]; 193 193 194 194 for (psS32 col = 0; col < source->pixels->numCols ; col++, vPix++, vWgt++) { … … 342 342 psF32 *vPix = source->pixels->data.F32[row]; 343 343 psF32 *vWgt = source->weight->data.F32[row]; 344 ps U8 *vMsk = (source->maskObj == NULL) ? NULL : source->maskObj->data.U8[row];344 psImageMaskType *vMsk = (source->maskObj == NULL) ? NULL : source->maskObj->data.PS_TYPE_IMAGE_MASK_DATA[row]; 345 345 346 346 for (psS32 col = 0; col < source->pixels->numCols ; col++, vPix++, vWgt++) { -
trunk/psModules/src/objects/pmSourcePhotometry.c
r20937 r21183 3 3 * @author EAM, IfA; GLG, MHPCC 4 4 * 5 * @version $Revision: 1.4 7$ $Name: not supported by cvs2svn $6 * @date $Date: 200 8-12-08 02:51:14$5 * @version $Revision: 1.48 $ $Name: not supported by cvs2svn $ 6 * @date $Date: 2009-01-27 06:39:38 $ 7 7 * 8 8 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 66 66 67 67 // XXX masked region should be (optionally) elliptical 68 bool pmSourceMagnitudes (pmSource *source, pmPSF *psf, pmSourcePhotometryMode mode, ps MaskType maskVal)68 bool pmSourceMagnitudes (pmSource *source, pmPSF *psf, pmSourcePhotometryMode mode, psImageMaskType maskVal) 69 69 { 70 70 PS_ASSERT_PTR_NON_NULL(source, false); … … 306 306 307 307 // return source aperture magnitude 308 bool pmSourcePhotometryAper (float *apMag, pmModel *model, psImage *image, psImage *mask, ps MaskType maskVal)308 bool pmSourcePhotometryAper (float *apMag, pmModel *model, psImage *image, psImage *mask, psImageMaskType maskVal) 309 309 { 310 310 PS_ASSERT_PTR_NON_NULL(apMag, false); … … 324 324 325 325 psF32 **imData = image->data.F32; 326 ps U8 **mkData = mask->data.U8;326 psImageMaskType **mkData = mask->data.PS_TYPE_IMAGE_MASK_DATA; 327 327 328 328 // measure apMag … … 344 344 345 345 // return source aperture magnitude 346 bool pmSourcePixelWeight (float *pixWeight, pmModel *model, psImage *image, psImage *mask, ps MaskType maskVal)346 bool pmSourcePixelWeight (float *pixWeight, pmModel *model, psImage *image, psImage *mask, psImageMaskType maskVal) 347 347 { 348 348 PS_ASSERT_PTR_NON_NULL(pixWeight, false); … … 412 412 if (my >= NY) 413 413 continue; 414 if (mask->data. U8[my][mx] & maskVal)414 if (mask->data.PS_TYPE_IMAGE_MASK_DATA[my][mx] & maskVal) 415 415 continue; 416 416 … … 475 475 for (yi = yIs, yj = yJs; yi < yIe; yi++, yj++) { 476 476 for (xi = xIs, xj = xJs; xi < xIe; xi++, xj++) { 477 if (Ti->data. U8[yi][xi])478 continue; 479 if (Tj->data. U8[yj][xj])477 if (Ti->data.PS_TYPE_IMAGE_MASK_DATA[yi][xi]) 478 continue; 479 if (Tj->data.PS_TYPE_IMAGE_MASK_DATA[yj][xj]) 480 480 continue; 481 481 … … 540 540 for (yi = yIs, yj = yJs; yi < yIe; yi++, yj++) { 541 541 for (xi = xIs, xj = xJs; xi < xIe; xi++, xj++) { 542 if (Ti->data. U8[yi][xi])543 continue; 544 if (Tj->data. U8[yj][xj])542 if (Ti->data.PS_TYPE_IMAGE_MASK_DATA[yi][xi]) 543 continue; 544 if (Tj->data.PS_TYPE_IMAGE_MASK_DATA[yj][xj]) 545 545 continue; 546 546 … … 578 578 for (int yi = 0; yi < Pi->numRows; yi++) { 579 579 for (int xi = 0; xi < Pi->numCols; xi++) { 580 if (Ti->data. U8[yi][xi])580 if (Ti->data.PS_TYPE_IMAGE_MASK_DATA[yi][xi]) 581 581 continue; 582 582 if (!unweighted_sum) { … … 613 613 614 614 bool pmSourceChisq (pmModel *model, psImage *image, psImage *mask, psImage *weight, 615 ps MaskType maskVal)615 psImageMaskType maskVal) 616 616 { 617 617 PS_ASSERT_PTR_NON_NULL(model, false); … … 624 624 for (int j = 0; j < image->numRows; j++) { 625 625 for (int i = 0; i < image->numCols; i++) { 626 if (mask->data. U8[j][i] & maskVal)626 if (mask->data.PS_TYPE_IMAGE_MASK_DATA[j][i] & maskVal) 627 627 continue; 628 628 if (weight->data.F32[j][i] <= 0) … … 657 657 for (int yi = 0; yi < Pi->numRows; yi++) { 658 658 for (int xi = 0; xi < Pi->numCols; xi++) { 659 if (Ti->data. U8[yi][xi])659 if (Ti->data.PS_TYPE_IMAGE_MASK_DATA[yi][xi]) 660 660 continue; 661 661 if (!unweighted_sum) { … … 734 734 for (yi = yIs, yj = yJs; yi < yIe; yi++, yj++) { 735 735 for (xi = xIs, xj = xJs; xi < xIe; xi++, xj++) { 736 if (Ti->data. U8[yi][xi])737 continue; 738 if (Tj->data. U8[yj][xj])736 if (Ti->data.PS_TYPE_IMAGE_MASK_DATA[yi][xi]) 737 continue; 738 if (Tj->data.PS_TYPE_IMAGE_MASK_DATA[yj][xj]) 739 739 continue; 740 740 … … 798 798 for (yi = yIs, yj = yJs; yi < yIe; yi++, yj++) { 799 799 for (xi = xIs, xj = xJs; xi < xIe; xi++, xj++) { 800 if (Ti->data. U8[yi][xi])801 continue; 802 if (Tj->data. U8[yj][xj])800 if (Ti->data.PS_TYPE_IMAGE_MASK_DATA[yi][xi]) 801 continue; 802 if (Tj->data.PS_TYPE_IMAGE_MASK_DATA[yj][xj]) 803 803 continue; 804 804 -
trunk/psModules/src/objects/pmSourcePhotometry.h
r18554 r21183 4 4 * @author EAM, IfA; GLG, MHPCC 5 5 * 6 * @version $Revision: 1.1 1$ $Name: not supported by cvs2svn $7 * @date $Date: 200 8-07-15 20:25:00$6 * @version $Revision: 1.12 $ $Name: not supported by cvs2svn $ 7 * @date $Date: 2009-01-27 06:39:38 $ 8 8 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii 9 9 */ … … 46 46 psImage *image, ///< image pixels to be used 47 47 psImage *mask, ///< mask of pixels to ignore 48 ps MaskType maskVal///< Value to mask48 psImageMaskType maskVal ///< Value to mask 49 49 ); 50 50 51 51 bool pmSourceMagnitudesInit (psMetadata *config); 52 bool pmSourceMagnitudes (pmSource *source, pmPSF *psf, pmSourcePhotometryMode mode, ps MaskType maskVal);53 bool pmSourcePixelWeight (float *pixWeight, pmModel *model, psImage *image, psImage *mask, ps MaskType maskVal);54 bool pmSourceChisq (pmModel *model, psImage *image, psImage *mask, psImage *weight, ps MaskType maskVal);52 bool pmSourceMagnitudes (pmSource *source, pmPSF *psf, pmSourcePhotometryMode mode, psImageMaskType maskVal); 53 bool pmSourcePixelWeight (float *pixWeight, pmModel *model, psImage *image, psImage *mask, psImageMaskType maskVal); 54 bool pmSourceChisq (pmModel *model, psImage *image, psImage *mask, psImage *weight, psImageMaskType maskVal); 55 55 56 56 -
trunk/psModules/src/objects/pmSourceSky.c
r20937 r21183 6 6 * @author EAM, IfA: significant modifications. 7 7 * 8 * @version $Revision: 1.1 8$ $Name: not supported by cvs2svn $9 * @date $Date: 200 8-12-08 02:51:14$8 * @version $Revision: 1.19 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2009-01-27 06:39:38 $ 10 10 * 11 11 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 52 52 psStatsOptions statsOptions, 53 53 psF32 Radius, 54 ps MaskType maskVal,55 ps MaskType markVal)54 psImageMaskType maskVal, 55 psImageMaskType markVal) 56 56 { 57 57 psTrace("psModules.objects", 3, "---- %s() begin ----\n", __func__); … … 86 86 return false; 87 87 } 88 psImageMaskRegion(mask, srcRegion, "AND", PS_NOT_ U8(markVal));88 psImageMaskRegion(mask, srcRegion, "AND", PS_NOT_IMAGE_MASK(markVal)); 89 89 double value = psStatsGetValue(myStats, statistic); 90 90 psFree(myStats); … … 107 107 psStatsOptions statsOptions, 108 108 psF32 Radius, 109 ps MaskType maskVal,110 ps MaskType markVal109 psImageMaskType maskVal, 110 psImageMaskType markVal 111 111 ) 112 112 { … … 142 142 return false; 143 143 } 144 psImageMaskRegion(mask, srcRegion, "AND", PS_NOT_ U8(markVal));144 psImageMaskRegion(mask, srcRegion, "AND", PS_NOT_IMAGE_MASK(markVal)); 145 145 double value = psStatsGetValue(myStats, statistic); 146 146 psFree(myStats); -
trunk/psModules/src/objects/pmSourceSky.h
r13898 r21183 2 2 * @author EAM, IfA; GLG, MHPCC 3 3 * 4 * @version $Revision: 1. 4$ $Name: not supported by cvs2svn $5 * @date $Date: 200 7-06-20 02:22:26$4 * @version $Revision: 1.5 $ $Name: not supported by cvs2svn $ 5 * @date $Date: 2009-01-27 06:39:38 $ 6 6 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii 7 7 */ … … 30 30 psStatsOptions statsOptions, ///< The statistic used in calculating the background sky 31 31 float Radius, ///< The inner radius of the square annulus to exclude 32 ps MaskType maskVal, ///< Value to mask33 ps MaskType mark ///< Mask value for marking32 psImageMaskType maskVal, ///< Value to mask 33 psImageMaskType mark ///< Mask value for marking 34 34 ); 35 35 … … 40 40 psStatsOptions statsOptions, ///< The statistic used in calculating the background sky 41 41 float Radius, ///< The inner radius of the square annulus to exclude 42 ps MaskType maskVal, ///< Value to mask43 ps MaskType mark ///< Mask value for marking42 psImageMaskType maskVal, ///< Value to mask 43 psImageMaskType mark ///< Mask value for marking 44 44 ); 45 45 -
trunk/psModules/src/objects/pmSourceVisual.c
r20582 r21183 57 57 model->data.F32[i] = pmTrend2DEval (trend, x->data.F32[i], y->data.F32[i]); 58 58 resid->data.F32[i] = param->data.F32[i] - model->data.F32[i]; 59 if (mask->data. U8[i]) continue;59 if (mask->data.PS_TYPE_VECTOR_MASK_DATA[i]) continue; 60 60 min = PS_MIN (min, resid->data.F32[i]); 61 61 max = PS_MAX (max, resid->data.F32[i]); -
trunk/psModules/src/objects/pmTrend2D.c
r21172 r21183 3 3 * @author EAM, IfA 4 4 * 5 * @version $Revision: 1.1 1$ $Name: not supported by cvs2svn $6 * @date $Date: 2009-01-27 0 0:00:44$5 * @version $Revision: 1.12 $ $Name: not supported by cvs2svn $ 6 * @date $Date: 2009-01-27 06:39:38 $ 7 7 * Copyright 2004 Institute for Astronomy, University of Hawaii 8 8 * … … 179 179 } 180 180 181 bool pmTrend2DFit(pmTrend2D *trend, psVector *mask, ps MaskType maskVal, const psVector *x,181 bool pmTrend2DFit(pmTrend2D *trend, psVector *mask, psVectorMaskType maskVal, const psVector *x, 182 182 const psVector *y, const psVector *f, const psVector *df) 183 183 { … … 234 234 } 235 235 236 psVector *pmTrend2DEvalVector(const pmTrend2D *trend, psVector *mask, ps MaskType maskValue, const psVector *x, const psVector *y)236 psVector *pmTrend2DEvalVector(const pmTrend2D *trend, psVector *mask, psVectorMaskType maskValue, const psVector *x, const psVector *y) 237 237 { 238 238 PM_ASSERT_TREND2D_NON_NULL(trend, NULL); -
trunk/psModules/src/objects/pmTrend2D.h
r21172 r21183 5 5 * @author EAM, IfA 6 6 * 7 * @version $Revision: 1. 8$ $Name: not supported by cvs2svn $8 * @date $Date: 2009-01-27 0 0:00:45$7 * @version $Revision: 1.9 $ $Name: not supported by cvs2svn $ 8 * @date $Date: 2009-01-27 06:39:38 $ 9 9 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii 10 10 */ … … 80 80 bool pmTrend2DFit(pmTrend2D *trend, 81 81 psVector *mask, // Warning: mask is modified! 82 ps MaskType maskVal,82 psVectorMaskType maskVal, 83 83 const psVector *x, 84 84 const psVector *y, … … 90 90 float x, float y 91 91 ); 92 psVector *pmTrend2DEvalVector(const pmTrend2D *trend, psVector *mask, ps MaskType maskValue,92 psVector *pmTrend2DEvalVector(const pmTrend2D *trend, psVector *mask, psVectorMaskType maskValue, 93 93 const psVector *x, const psVector *y 94 94 );
Note:
See TracChangeset
for help on using the changeset viewer.
